summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2010-10-30 23:02:32 +0000
committerDimitry Andric <dim@FreeBSD.org>2010-10-30 23:02:32 +0000
commitb3cded65e92ba4d9b5e5a33fb95c4d551bda9c1b (patch)
tree69d40fbef2c0c4ee32fe97b7a28b510f2e3c2dbc
parent7a815afd9b5121ee0f65dc1e1de1c0de6de97679 (diff)
downloadsrc-test2-b3cded65e92ba4d9b5e5a33fb95c4d551bda9c1b.tar.gz
src-test2-b3cded65e92ba4d9b5e5a33fb95c4d551bda9c1b.zip
Notes
-rw-r--r--.cvsignore1
-rw-r--r--COPYING.LIBGLOSS239
-rw-r--r--COPYING.NEWLIB320
-rw-r--r--ChangeLog697
-rw-r--r--MAINTAINERS14
-rw-r--r--Makefile.def94
-rw-r--r--Makefile.in10796
-rw-r--r--Makefile.tpl286
-rw-r--r--bfd/ChangeLog2849
-rw-r--r--bfd/ChangeLog-020314
-rw-r--r--bfd/ChangeLog-20046
-rw-r--r--bfd/ChangeLog-20058
-rw-r--r--bfd/ChangeLog-20063601
-rw-r--r--bfd/Makefile.am208
-rw-r--r--bfd/Makefile.in275
-rw-r--r--bfd/acinclude.m420
-rw-r--r--bfd/aclocal.m439
-rw-r--r--bfd/aix386-core.c20
-rw-r--r--bfd/aix5ppc-core.c29
-rw-r--r--bfd/aout-adobe.c13
-rw-r--r--bfd/aout-arm.c23
-rw-r--r--bfd/aout-ns32k.c27
-rw-r--r--bfd/aout-target.h6
-rw-r--r--bfd/aout-tic30.c24
-rw-r--r--bfd/aoutf1.h26
-rw-r--r--bfd/aoutx.h50
-rw-r--r--bfd/archive.c66
-rw-r--r--bfd/archive64.c34
-rw-r--r--bfd/archures.c58
-rw-r--r--bfd/bfd-in.h86
-rw-r--r--bfd/bfd-in2.h354
-rw-r--r--bfd/bfd.c320
-rw-r--r--bfd/bfdio.c19
-rw-r--r--bfd/binary.c16
-rw-r--r--bfd/bout.c24
-rw-r--r--bfd/cache.c4
-rw-r--r--bfd/cf-i386lynx.c4
-rw-r--r--bfd/cisco-core.c18
-rw-r--r--bfd/coff-alpha.c22
-rw-r--r--bfd/coff-apollo.c6
-rw-r--r--bfd/coff-arm.c109
-rw-r--r--bfd/coff-aux.c4
-rw-r--r--bfd/coff-h8300.c10
-rw-r--r--bfd/coff-h8500.c6
-rw-r--r--bfd/coff-i386.c19
-rw-r--r--bfd/coff-i860.c19
-rw-r--r--bfd/coff-i960.c19
-rw-r--r--bfd/coff-ia64.c4
-rw-r--r--bfd/coff-m68k.c29
-rw-r--r--bfd/coff-m88k.c5
-rw-r--r--bfd/coff-maxq.c95
-rw-r--r--bfd/coff-mcore.c23
-rw-r--r--bfd/coff-mips.c21
-rw-r--r--bfd/coff-or32.c8
-rw-r--r--bfd/coff-pmac.c4
-rw-r--r--bfd/coff-ppc.c25
-rw-r--r--bfd/coff-rs6000.c65
-rw-r--r--bfd/coff-sh.c24
-rw-r--r--bfd/coff-sparc.c22
-rw-r--r--bfd/coff-stgo32.c4
-rw-r--r--bfd/coff-tic30.c23
-rw-r--r--bfd/coff-tic4x.c21
-rw-r--r--bfd/coff-tic54x.c21
-rw-r--r--bfd/coff-tic80.c4
-rw-r--r--bfd/coff-w65.c8
-rw-r--r--bfd/coff-we32k.c4
-rw-r--r--bfd/coff-x86_64.c783
-rw-r--r--bfd/coff-z80.c25
-rw-r--r--bfd/coff-z8k.c29
-rw-r--r--bfd/coff64-rs6000.c32
-rw-r--r--bfd/coffcode.h120
-rw-r--r--bfd/coffgen.c19
-rw-r--r--bfd/cofflink.c27
-rwxr-xr-xbfd/config.bfd198
-rw-r--r--bfd/config.in119
-rwxr-xr-xbfd/configure13041
-rw-r--r--bfd/configure.in108
-rw-r--r--bfd/corefile.c6
-rw-r--r--bfd/cpu-alpha.c4
-rw-r--r--bfd/cpu-arc.c5
-rw-r--r--bfd/cpu-arm.c44
-rw-r--r--bfd/cpu-avr.c9
-rw-r--r--bfd/cpu-bfin.c4
-rw-r--r--bfd/cpu-cr16.c40
-rw-r--r--bfd/cpu-cr16c.c4
-rw-r--r--bfd/cpu-cris.c5
-rw-r--r--bfd/cpu-crx.c4
-rw-r--r--bfd/cpu-d10v.c5
-rw-r--r--bfd/cpu-d30v.c4
-rw-r--r--bfd/cpu-dlx.c4
-rw-r--r--bfd/cpu-fr30.c4
-rw-r--r--bfd/cpu-frv.c4
-rw-r--r--bfd/cpu-h8300.c4
-rw-r--r--bfd/cpu-h8500.c4
-rw-r--r--bfd/cpu-hppa.c4
-rw-r--r--bfd/cpu-i370.c4
-rw-r--r--bfd/cpu-i386.c4
-rw-r--r--bfd/cpu-i860.c5
-rw-r--r--bfd/cpu-i960.c32
-rw-r--r--bfd/cpu-ia64.c4
-rw-r--r--bfd/cpu-ip2k.c4
-rw-r--r--bfd/cpu-iq2000.c4
-rw-r--r--bfd/cpu-m10200.c4
-rw-r--r--bfd/cpu-m10300.c4
-rw-r--r--bfd/cpu-m32c.c4
-rw-r--r--bfd/cpu-m32r.c5
-rw-r--r--bfd/cpu-m68hc11.c4
-rw-r--r--bfd/cpu-m68hc12.c4
-rw-r--r--bfd/cpu-m68k.c101
-rw-r--r--bfd/cpu-m88k.c5
-rw-r--r--bfd/cpu-maxq.c4
-rw-r--r--bfd/cpu-mcore.c4
-rw-r--r--bfd/cpu-mep.c28
-rw-r--r--bfd/cpu-mips.c4
-rw-r--r--bfd/cpu-mmix.c4
-rw-r--r--bfd/cpu-msp430.c4
-rw-r--r--bfd/cpu-mt.c4
-rw-r--r--bfd/cpu-ns32k.c4
-rw-r--r--bfd/cpu-openrisc.c4
-rw-r--r--bfd/cpu-or32.c4
-rw-r--r--bfd/cpu-pdp11.c4
-rw-r--r--bfd/cpu-pj.c4
-rw-r--r--bfd/cpu-powerpc.c4
-rw-r--r--bfd/cpu-rs6000.c10
-rw-r--r--bfd/cpu-s390.c4
-rw-r--r--bfd/cpu-score.c51
-rw-r--r--bfd/cpu-sh.c6
-rw-r--r--bfd/cpu-sparc.c4
-rw-r--r--bfd/cpu-spu.c54
-rw-r--r--bfd/cpu-tic30.c4
-rw-r--r--bfd/cpu-tic4x.c4
-rw-r--r--bfd/cpu-tic54x.c4
-rw-r--r--bfd/cpu-tic80.c4
-rw-r--r--bfd/cpu-v850.c4
-rw-r--r--bfd/cpu-vax.c5
-rw-r--r--bfd/cpu-w65.c5
-rw-r--r--bfd/cpu-we32k.c4
-rw-r--r--bfd/cpu-xc16x.c4
-rw-r--r--bfd/cpu-xstormy16.c4
-rw-r--r--bfd/cpu-xtensa.c4
-rw-r--r--bfd/cpu-z80.c4
-rw-r--r--bfd/cpu-z8k.c4
-rw-r--r--bfd/doc/ChangeLog49
-rw-r--r--bfd/doc/Makefile.am26
-rw-r--r--bfd/doc/Makefile.in120
-rw-r--r--bfd/doc/aoutx.texi213
-rw-r--r--bfd/doc/archive.texi99
-rw-r--r--bfd/doc/archures.texi585
-rw-r--r--bfd/doc/bfd.info10305
-rw-r--r--bfd/doc/bfd.texinfo52
-rw-r--r--bfd/doc/bfdint.texi52
-rw-r--r--bfd/doc/bfdio.texi72
-rw-r--r--bfd/doc/bfdt.texi721
-rw-r--r--bfd/doc/bfdwin.texi2
-rw-r--r--bfd/doc/cache.texi65
-rw-r--r--bfd/doc/coffcode.texi608
-rw-r--r--bfd/doc/core.texi60
-rw-r--r--bfd/doc/elf.texi22
-rw-r--r--bfd/doc/format.texi112
-rw-r--r--bfd/doc/hash.texi247
-rw-r--r--bfd/doc/init.texi16
-rw-r--r--bfd/doc/libbfd.texi179
-rw-r--r--bfd/doc/linker.texi380
-rw-r--r--bfd/doc/mmo.texi365
-rw-r--r--bfd/doc/opncls.texi365
-rw-r--r--bfd/doc/reloc.texi2494
-rw-r--r--bfd/doc/section.texi989
-rw-r--r--bfd/doc/syms.texi461
-rw-r--r--bfd/doc/targets.texi551
-rw-r--r--bfd/dwarf1.c4
-rw-r--r--bfd/dwarf2.c502
-rw-r--r--bfd/ecoff.c24
-rw-r--r--bfd/ecofflink.c7
-rw-r--r--bfd/efi-app-ia32.c4
-rw-r--r--bfd/efi-app-ia64.c4
-rw-r--r--bfd/efi-app-x86_64.c34
-rw-r--r--bfd/elf-attrs.c628
-rw-r--r--bfd/elf-bfd.h299
-rw-r--r--bfd/elf-eh-frame.c557
-rw-r--r--bfd/elf-hppa.h988
-rw-r--r--bfd/elf-m10200.c38
-rw-r--r--bfd/elf-m10300.c258
-rw-r--r--bfd/elf-strtab.c5
-rw-r--r--bfd/elf-vxworks.c46
-rw-r--r--bfd/elf.c2791
-rw-r--r--bfd/elf32-am33lin.c4
-rw-r--r--bfd/elf32-arc.c20
-rw-r--r--bfd/elf32-arm.c4057
-rw-r--r--bfd/elf32-avr.c1313
-rw-r--r--bfd/elf32-avr.h38
-rw-r--r--bfd/elf32-bfin.c306
-rw-r--r--bfd/elf32-cr16.c1433
-rw-r--r--bfd/elf32-cr16c.c110
-rw-r--r--bfd/elf32-cris.c158
-rw-r--r--bfd/elf32-crx.c83
-rw-r--r--bfd/elf32-d10v.c126
-rw-r--r--bfd/elf32-d30v.c20
-rw-r--r--bfd/elf32-dlx.c37
-rw-r--r--bfd/elf32-fr30.c101
-rw-r--r--bfd/elf32-frv.c444
-rw-r--r--bfd/elf32-gen.c5
-rw-r--r--bfd/elf32-h8300.c94
-rw-r--r--bfd/elf32-hppa.c689
-rw-r--r--bfd/elf32-i370.c123
-rw-r--r--bfd/elf32-i386.c264
-rw-r--r--bfd/elf32-i860.c39
-rw-r--r--bfd/elf32-i960.c21
-rw-r--r--bfd/elf32-ip2k.c87
-rw-r--r--bfd/elf32-iq2000.c111
-rw-r--r--bfd/elf32-m32c.c161
-rw-r--r--bfd/elf32-m32r.c372
-rw-r--r--bfd/elf32-m68hc11.c33
-rw-r--r--bfd/elf32-m68hc12.c34
-rw-r--r--bfd/elf32-m68hc1x.c214
-rw-r--r--bfd/elf32-m68hc1x.h10
-rw-r--r--bfd/elf32-m68k.c641
-rw-r--r--bfd/elf32-m88k.c5
-rw-r--r--bfd/elf32-mcore.c90
-rw-r--r--bfd/elf32-mep.c959
-rw-r--r--bfd/elf32-mips.c119
-rw-r--r--bfd/elf32-msp430.c100
-rw-r--r--bfd/elf32-mt.c92
-rw-r--r--bfd/elf32-openrisc.c95
-rw-r--r--bfd/elf32-or32.c20
-rw-r--r--bfd/elf32-pj.c31
-rw-r--r--bfd/elf32-ppc.c479
-rw-r--r--bfd/elf32-ppc.h12
-rw-r--r--bfd/elf32-s390.c223
-rw-r--r--bfd/elf32-score.c3883
-rw-r--r--bfd/elf32-sh-relocs.h1716
-rw-r--r--bfd/elf32-sh-symbian.c62
-rw-r--r--bfd/elf32-sh.c2684
-rw-r--r--bfd/elf32-sh64-com.c5
-rw-r--r--bfd/elf32-sh64.c30
-rw-r--r--bfd/elf32-sparc.c8
-rw-r--r--bfd/elf32-spu.c3154
-rw-r--r--bfd/elf32-spu.h57
-rw-r--r--bfd/elf32-v850.c141
-rw-r--r--bfd/elf32-vax.c132
-rw-r--r--bfd/elf32-xc16x.c48
-rw-r--r--bfd/elf32-xstormy16.c107
-rw-r--r--bfd/elf32-xtensa.c1745
-rw-r--r--bfd/elf64-alpha.c193
-rw-r--r--bfd/elf64-gen.c5
-rw-r--r--bfd/elf64-hppa.c74
-rw-r--r--bfd/elf64-mips.c134
-rw-r--r--bfd/elf64-mmix.c181
-rw-r--r--bfd/elf64-ppc.c721
-rw-r--r--bfd/elf64-s390.c166
-rw-r--r--bfd/elf64-sh64.c178
-rw-r--r--bfd/elf64-sparc.c25
-rw-r--r--bfd/elf64-x86-64.c213
-rw-r--r--bfd/elfcode.h145
-rw-r--r--bfd/elflink.c2108
-rw-r--r--bfd/elfn32-mips.c109
-rw-r--r--bfd/elfxx-ia64.c247
-rw-r--r--bfd/elfxx-mips.c949
-rw-r--r--bfd/elfxx-mips.h10
-rw-r--r--bfd/elfxx-sparc.c339
-rw-r--r--bfd/elfxx-sparc.h5
-rw-r--r--bfd/elfxx-target.h77
-rw-r--r--bfd/format.c4
-rw-r--r--bfd/freebsd.h4
-rw-r--r--bfd/gen-aout.c4
-rw-r--r--bfd/hash.c102
-rw-r--r--bfd/host-aout.c4
-rw-r--r--bfd/hp300bsd.c5
-rw-r--r--bfd/hppabsd-core.c9
-rw-r--r--bfd/hpux-core.c11
-rw-r--r--bfd/i386aout.c6
-rw-r--r--bfd/i386bsd.c4
-rw-r--r--bfd/i386linux.c16
-rw-r--r--bfd/i386lynx.c4
-rw-r--r--bfd/i386mach3.c4
-rw-r--r--bfd/i386msdos.c31
-rw-r--r--bfd/i386os9k.c92
-rw-r--r--bfd/ieee.c32
-rw-r--r--bfd/ihex.c21
-rw-r--r--bfd/init.c4
-rw-r--r--bfd/irix-core.c7
-rw-r--r--bfd/libaout.h7
-rw-r--r--bfd/libbfd-in.h28
-rw-r--r--bfd/libbfd.c21
-rw-r--r--bfd/libbfd.h142
-rw-r--r--bfd/libcoff-in.h2
-rw-r--r--bfd/libcoff.h2
-rw-r--r--bfd/libecoff.h4
-rw-r--r--bfd/libpei.h62
-rw-r--r--bfd/linker.c82
-rw-r--r--bfd/lynx-core.c7
-rw-r--r--bfd/m68klinux.c16
-rw-r--r--bfd/m88kmach3.c4
-rw-r--r--bfd/mach-o-target.c4
-rw-r--r--bfd/mach-o.c40
-rwxr-xr-xbfd/mep-relocs.pl274
-rw-r--r--bfd/merge.c6
-rw-r--r--bfd/mipsbsd.c31
-rw-r--r--bfd/mmo.c72
-rw-r--r--bfd/netbsd-core.c12
-rw-r--r--bfd/netbsd.h6
-rw-r--r--bfd/newsos3.c4
-rw-r--r--bfd/nlm-target.h3
-rw-r--r--bfd/nlm.c4
-rw-r--r--bfd/nlm32-alpha.c4
-rw-r--r--bfd/nlm32-i386.c4
-rw-r--r--bfd/nlm32-ppc.c4
-rw-r--r--bfd/nlm32-sparc.c24
-rw-r--r--bfd/nlmcode.h31
-rw-r--r--bfd/oasys.c18
-rw-r--r--bfd/opncls.c67
-rw-r--r--bfd/osf-core.c11
-rw-r--r--bfd/pc532-mach.c4
-rw-r--r--bfd/pdp11.c58
-rw-r--r--bfd/pe-arm-wince.c37
-rw-r--r--bfd/pe-arm.c45
-rw-r--r--bfd/pe-i386.c11
-rw-r--r--bfd/pe-mcore.c4
-rw-r--r--bfd/pe-mips.c21
-rw-r--r--bfd/pe-ppc.c4
-rw-r--r--bfd/pe-sh.c4
-rw-r--r--bfd/pe-x86_64.c53
-rw-r--r--bfd/peXXigen.c313
-rw-r--r--bfd/pef.c20
-rw-r--r--bfd/pei-arm-wince.c30
-rw-r--r--bfd/pei-arm.c22
-rw-r--r--bfd/pei-i386.c11
-rw-r--r--bfd/pei-mcore.c4
-rw-r--r--bfd/pei-mips.c4
-rw-r--r--bfd/pei-ppc.c4
-rw-r--r--bfd/pei-sh.c4
-rw-r--r--bfd/pei-x86_64.c54
-rw-r--r--bfd/peicode.h118
-rw-r--r--bfd/po/BLD-POTFILES.in1
-rw-r--r--bfd/po/Make-in3
-rw-r--r--bfd/po/SRC-POTFILES.in15
-rw-r--r--bfd/po/bfd.pot1837
-rw-r--r--bfd/po/da.gmobin60556 -> 0 bytes
-rw-r--r--bfd/po/es.gmobin87772 -> 0 bytes
-rw-r--r--bfd/po/fr.gmobin71749 -> 0 bytes
-rw-r--r--bfd/po/ja.gmobin38616 -> 0 bytes
-rw-r--r--bfd/po/ro.gmobin69038 -> 0 bytes
-rw-r--r--bfd/po/rw.gmobin429 -> 0 bytes
-rw-r--r--bfd/po/sv.gmobin67266 -> 0 bytes
-rw-r--r--bfd/po/tr.gmobin69529 -> 0 bytes
-rw-r--r--bfd/po/vi.gmobin39617 -> 0 bytes
-rw-r--r--bfd/po/zh_CN.gmobin28132 -> 0 bytes
-rw-r--r--bfd/ppcboot.c25
-rw-r--r--bfd/ptrace-core.c21
-rw-r--r--bfd/reloc.c380
-rw-r--r--bfd/reloc16.c4
-rw-r--r--bfd/riscix.c21
-rw-r--r--bfd/rs6000-core.c14
-rw-r--r--bfd/sco5-core.c7
-rw-r--r--bfd/section.c115
-rw-r--r--bfd/simple.c5
-rw-r--r--bfd/som.c51
-rw-r--r--bfd/sparclinux.c46
-rw-r--r--bfd/sparclynx.c4
-rw-r--r--bfd/srec.c18
-rw-r--r--bfd/stabs.c27
-rw-r--r--bfd/sunos.c41
-rw-r--r--bfd/syms.c12
-rw-r--r--bfd/sysdep.h6
-rw-r--r--bfd/targets.c92
-rw-r--r--bfd/tekhex.c25
-rw-r--r--bfd/trad-core.c35
-rw-r--r--bfd/vaxbsd.c4
-rw-r--r--bfd/versados.c9
-rw-r--r--bfd/version.h5
-rw-r--r--bfd/vms-gsd.c6
-rw-r--r--bfd/vms-hdr.c14
-rw-r--r--bfd/vms-misc.c6
-rw-r--r--bfd/vms-tir.c4
-rw-r--r--bfd/vms.c24
-rw-r--r--bfd/warning.m44
-rw-r--r--bfd/xcoff-target.h4
-rw-r--r--bfd/xcofflink.c41
-rw-r--r--bfd/xsym.c22
-rw-r--r--bfd/xsym.h6
-rw-r--r--bfd/xtensa-isa.c4
-rw-r--r--binutils/ChangeLog779
-rw-r--r--binutils/ChangeLog-2006599
-rw-r--r--binutils/MAINTAINERS35
-rw-r--r--binutils/Makefile.am533
-rw-r--r--binutils/Makefile.in680
-rw-r--r--binutils/NEWS18
-rw-r--r--binutils/acinclude.m41
-rw-r--r--binutils/aclocal.m438
-rw-r--r--binutils/addr2line.c27
-rw-r--r--binutils/ar.c114
-rw-r--r--binutils/arlex.c1856
-rw-r--r--binutils/arparse.c1605
-rw-r--r--binutils/arparse.h92
-rw-r--r--binutils/arparse.y4
-rw-r--r--binutils/arsup.c37
-rw-r--r--binutils/bin2c.c105
-rw-r--r--binutils/binemul.c4
-rw-r--r--binutils/binemul.h3
-rw-r--r--binutils/bucomm.c97
-rw-r--r--binutils/bucomm.h156
-rw-r--r--binutils/budemang.c100
-rw-r--r--binutils/budemang.h25
-rw-r--r--binutils/coffdump.c7
-rw-r--r--binutils/coffgrok.c6
-rw-r--r--binutils/config.in92
-rwxr-xr-xbinutils/configure11035
-rw-r--r--binutils/configure.in109
-rw-r--r--binutils/cxxfilt.c8
-rw-r--r--binutils/debug.c6
-rw-r--r--binutils/deflex.c1881
-rw-r--r--binutils/defparse.c1777
-rw-r--r--binutils/defparse.h111
-rw-r--r--binutils/defparse.y5
-rw-r--r--binutils/dlltool.c160
-rw-r--r--binutils/dllwrap.c13
-rw-r--r--binutils/doc/Makefile.am31
-rw-r--r--binutils/doc/Makefile.in115
-rw-r--r--binutils/doc/addr2line.1265
-rw-r--r--binutils/doc/ar.1390
-rw-r--r--binutils/doc/binutils.info3835
-rw-r--r--binutils/doc/binutils.texi454
-rw-r--r--binutils/doc/config.texi2
-rw-r--r--binutils/doc/cxxfilt.man345
-rw-r--r--binutils/doc/dlltool.1478
-rw-r--r--binutils/doc/nlmconv.1243
-rw-r--r--binutils/doc/nm.1449
-rw-r--r--binutils/doc/objcopy.1795
-rw-r--r--binutils/doc/objdump.1634
-rw-r--r--binutils/doc/ranlib.1188
-rw-r--r--binutils/doc/readelf.1376
-rw-r--r--binutils/doc/size.1263
-rw-r--r--binutils/doc/strings.1249
-rw-r--r--binutils/doc/strip.1383
-rw-r--r--binutils/doc/windres.1343
-rw-r--r--binutils/dwarf.c169
-rw-r--r--binutils/dwarf.h5
-rw-r--r--binutils/embedspu.sh257
-rw-r--r--binutils/emul_aix.c10
-rw-r--r--binutils/filemode.c5
-rw-r--r--binutils/ieee.c6
-rw-r--r--binutils/mclex.c441
-rw-r--r--binutils/mcparse.y356
-rw-r--r--binutils/nlmconv.c28
-rw-r--r--binutils/nlmheader.c2534
-rw-r--r--binutils/nlmheader.h125
-rw-r--r--binutils/nlmheader.y7
-rw-r--r--binutils/nm.c137
-rw-r--r--binutils/objcopy.c434
-rw-r--r--binutils/objdump.c365
-rw-r--r--binutils/po/Make-in3
-rw-r--r--binutils/po/POTFILES.in8
-rw-r--r--binutils/po/binutils.pot2277
-rw-r--r--binutils/po/da.gmobin80846 -> 0 bytes
-rw-r--r--binutils/po/es.gmobin137588 -> 0 bytes
-rw-r--r--binutils/po/fi.gmobin127911 -> 0 bytes
-rw-r--r--binutils/po/fr.gmobin134234 -> 0 bytes
-rw-r--r--binutils/po/ja.gmobin97376 -> 0 bytes
-rw-r--r--binutils/po/ro.gmobin20265 -> 0 bytes
-rw-r--r--binutils/po/ru.gmobin130197 -> 0 bytes
-rw-r--r--binutils/po/rw.gmobin615 -> 0 bytes
-rw-r--r--binutils/po/sv.gmobin103077 -> 0 bytes
-rw-r--r--binutils/po/tr.gmobin129842 -> 0 bytes
-rw-r--r--binutils/po/vi.gmobin147286 -> 0 bytes
-rw-r--r--binutils/po/zh_CN.gmobin75903 -> 0 bytes
-rw-r--r--binutils/po/zh_TW.gmobin121475 -> 0 bytes
-rw-r--r--binutils/prdbg.c82
-rw-r--r--binutils/rclex.c2881
-rw-r--r--binutils/rclex.l504
-rw-r--r--binutils/rcparse.c4144
-rw-r--r--binutils/rcparse.h255
-rw-r--r--binutils/rcparse.y540
-rw-r--r--binutils/rdcoff.c6
-rw-r--r--binutils/rddbg.c5
-rw-r--r--binutils/readelf.c869
-rw-r--r--binutils/rename.c3
-rw-r--r--binutils/resbin.c2046
-rw-r--r--binutils/rescoff.c289
-rw-r--r--binutils/resrc.c1660
-rw-r--r--binutils/resres.c544
-rw-r--r--binutils/size.c12
-rw-r--r--binutils/srconv.c6
-rw-r--r--binutils/stabs.c20
-rw-r--r--binutils/strings.c15
-rw-r--r--binutils/sysdep.h174
-rw-r--r--binutils/sysdump.c9
-rw-r--r--binutils/sysinfo.c1804
-rw-r--r--binutils/sysinfo.h67
-rw-r--r--binutils/syslex.c1729
-rw-r--r--binutils/testsuite/ChangeLog192
-rw-r--r--binutils/testsuite/binutils-all/arm/objdump.exp63
-rw-r--r--binutils/testsuite/binutils-all/arm/thumb2-cond.s6
-rw-r--r--binutils/testsuite/binutils-all/copy-1.d13
-rw-r--r--binutils/testsuite/binutils-all/copy-1.s6
-rw-r--r--binutils/testsuite/binutils-all/copy-2.d18
-rw-r--r--binutils/testsuite/binutils-all/copy-3.d17
-rw-r--r--binutils/testsuite/binutils-all/copytest.s7
-rw-r--r--binutils/testsuite/binutils-all/dlltool.exp7
-rw-r--r--binutils/testsuite/binutils-all/empty.s1
-rw-r--r--binutils/testsuite/binutils-all/localize-hidden-1.d19
-rw-r--r--binutils/testsuite/binutils-all/localize-hidden-1.s36
-rw-r--r--binutils/testsuite/binutils-all/localize-hidden-2.d7
-rw-r--r--binutils/testsuite/binutils-all/localize-hidden-2.s2
-rw-r--r--binutils/testsuite/binutils-all/needed-by-reloc.s7
-rw-r--r--binutils/testsuite/binutils-all/objcopy.exp99
-rw-r--r--binutils/testsuite/binutils-all/readelf.exp106
-rw-r--r--binutils/testsuite/binutils-all/strip-1.d11
-rw-r--r--binutils/testsuite/binutils-all/strip-2.d18
-rw-r--r--binutils/testsuite/binutils-all/strip-3.d11
-rw-r--r--binutils/testsuite/binutils-all/windres/MSG00001.binbin0 -> 112 bytes
-rw-r--r--binutils/testsuite/binutils-all/windres/dialogid.rsd8
-rw-r--r--binutils/testsuite/binutils-all/windres/html.rc7
-rw-r--r--binutils/testsuite/binutils-all/windres/html.rsd45
-rw-r--r--binutils/testsuite/binutils-all/windres/html1.hm11
-rw-r--r--binutils/testsuite/binutils-all/windres/html2.hm11
-rw-r--r--binutils/testsuite/binutils-all/windres/lang.rc1
-rw-r--r--binutils/testsuite/binutils-all/windres/messagetable.rc6
-rw-r--r--binutils/testsuite/binutils-all/windres/messagetable.rsd15
-rw-r--r--binutils/testsuite/binutils-all/windres/strtab1.rc1
-rw-r--r--binutils/testsuite/binutils-all/windres/strtab2.rc9
-rw-r--r--binutils/testsuite/binutils-all/windres/strtab2.rsd8
-rw-r--r--binutils/testsuite/binutils-all/windres/version.rc33
-rw-r--r--binutils/testsuite/binutils-all/windres/version.rsd55
-rw-r--r--binutils/testsuite/binutils-all/windres/version_cat.rc33
-rw-r--r--binutils/testsuite/binutils-all/windres/version_cat.rsd55
-rw-r--r--binutils/testsuite/binutils-all/windres/windres.exp7
-rw-r--r--binutils/testsuite/lib/utils-lib.exp503
-rw-r--r--binutils/version.c9
-rw-r--r--binutils/windint.h1088
-rw-r--r--binutils/windmc.c1197
-rw-r--r--binutils/windmc.h99
-rw-r--r--binutils/windres.c491
-rw-r--r--binutils/windres.h859
-rw-r--r--binutils/winduni.c732
-rw-r--r--binutils/winduni.h103
-rw-r--r--binutils/wrstabs.c7
-rwxr-xr-xcompile142
-rw-r--r--config-ml.in8
-rwxr-xr-xconfig.guess63
-rwxr-xr-xconfig.rpath548
-rwxr-xr-xconfig.sub74
-rw-r--r--config/ChangeLog180
-rw-r--r--config/acx.m4139
-rw-r--r--config/confsubdir.m4127
-rw-r--r--config/depstand.m45
-rw-r--r--config/gettext-sister.m422
-rw-r--r--config/gxx-include-dir.m48
-rw-r--r--config/ld-symbolic.m445
-rw-r--r--config/mh-ppc-aix11
-rw-r--r--config/mh-ppc-darwin4
-rw-r--r--config/mt-mep8
-rw-r--r--config/mt-spu4
-rw-r--r--config/multi.m465
-rw-r--r--config/stdint.m448
-rw-r--r--config/tls.m470
-rw-r--r--config/unwind_ipinfo.m422
-rw-r--r--config/warnings.m447
-rwxr-xr-xconfigure10739
-rw-r--r--configure.ac2639
-rw-r--r--configure.in2407
-rw-r--r--cpu/ChangeLog36
-rw-r--r--cpu/frv.cpu17
-rw-r--r--cpu/iq2000.cpu7
-rw-r--r--cpu/m32c.cpu125
-rw-r--r--cpu/m32r.opc20
-rw-r--r--cpu/xc16x.cpu3374
-rwxr-xr-xdjunpack.bat52
-rw-r--r--elfcpp/README9
-rw-r--r--elfcpp/elfcpp.h1622
-rw-r--r--elfcpp/elfcpp_config.h (renamed from bfd/doc/elfcode.texi)0
-rw-r--r--elfcpp/elfcpp_file.h278
-rw-r--r--elfcpp/elfcpp_internal.h213
-rw-r--r--elfcpp/elfcpp_swap.h350
-rw-r--r--elfcpp/i386.h63
-rw-r--r--etc/ChangeLog30
-rw-r--r--etc/Makefile.in41
-rw-r--r--etc/configure.info2773
-rw-r--r--etc/standards.info4930
-rw-r--r--etc/texi2pod.pl25
-rw-r--r--gas/ChangeLog1776
-rw-r--r--gas/ChangeLog-20062756
-rw-r--r--gas/Makefile.am2427
-rw-r--r--gas/Makefile.in2607
-rw-r--r--gas/NEWS8
-rw-r--r--gas/acinclude.m418
-rw-r--r--gas/aclocal.m433
-rw-r--r--gas/app.c77
-rw-r--r--gas/as.c48
-rw-r--r--gas/as.h14
-rw-r--r--gas/atof-generic.c4
-rw-r--r--gas/bfin-lex.c3368
-rw-r--r--gas/bfin-parse.c7491
-rw-r--r--gas/bfin-parse.h406
-rw-r--r--gas/cgen.c336
-rw-r--r--gas/cond.c3
-rw-r--r--gas/config.in97
-rw-r--r--gas/config/atof-vax.c6
-rw-r--r--gas/config/bfin-defs.h6
-rw-r--r--gas/config/bfin-lex.l6
-rw-r--r--gas/config/bfin-parse.y129
-rw-r--r--gas/config/m68k-parse.h8
-rw-r--r--gas/config/obj-coff.c4
-rw-r--r--gas/config/obj-coff.h18
-rw-r--r--gas/config/obj-elf.c42
-rw-r--r--gas/config/obj-elf.h16
-rw-r--r--gas/config/obj-ieee.c613
-rw-r--r--gas/config/obj-ieee.h46
-rw-r--r--gas/config/obj-som.c20
-rw-r--r--gas/config/obj-som.h3
-rw-r--r--gas/config/tc-alpha.c14
-rw-r--r--gas/config/tc-alpha.h4
-rw-r--r--gas/config/tc-arc.c2
-rw-r--r--gas/config/tc-arm.c7846
-rw-r--r--gas/config/tc-arm.h58
-rw-r--r--gas/config/tc-avr.c220
-rw-r--r--gas/config/tc-avr.h35
-rw-r--r--gas/config/tc-bfin.c58
-rw-r--r--gas/config/tc-bfin.h9
-rw-r--r--gas/config/tc-cr16.c2444
-rw-r--r--gas/config/tc-cr16.h73
-rw-r--r--gas/config/tc-cris.c6
-rw-r--r--gas/config/tc-cris.h5
-rw-r--r--gas/config/tc-crx.c2
-rw-r--r--gas/config/tc-d10v.c20
-rw-r--r--gas/config/tc-d30v.c3
-rw-r--r--gas/config/tc-dlx.h10
-rw-r--r--gas/config/tc-fr30.c3
-rw-r--r--gas/config/tc-frv.c1
-rw-r--r--gas/config/tc-h8300.c6
-rw-r--r--gas/config/tc-h8300.h3
-rw-r--r--gas/config/tc-hppa.c5077
-rw-r--r--gas/config/tc-hppa.h50
-rw-r--r--gas/config/tc-i370.c1
-rw-r--r--gas/config/tc-i386.c1851
-rw-r--r--gas/config/tc-i386.h297
-rw-r--r--gas/config/tc-i860.c6
-rw-r--r--gas/config/tc-i960.c4
-rw-r--r--gas/config/tc-i960.h3
-rw-r--r--gas/config/tc-ia64.c21
-rw-r--r--gas/config/tc-ia64.h4
-rw-r--r--gas/config/tc-ip2k.c3
-rw-r--r--gas/config/tc-iq2000.c5
-rw-r--r--gas/config/tc-m32c.c115
-rw-r--r--gas/config/tc-m32c.h4
-rw-r--r--gas/config/tc-m32r.c5
-rw-r--r--gas/config/tc-m32r.h11
-rw-r--r--gas/config/tc-m68hc11.c48
-rw-r--r--gas/config/tc-m68k.c460
-rw-r--r--gas/config/tc-m68k.h2
-rw-r--r--gas/config/tc-maxq.c16
-rw-r--r--gas/config/tc-maxq.h8
-rw-r--r--gas/config/tc-mcore.c25
-rw-r--r--gas/config/tc-mep.c1886
-rw-r--r--gas/config/tc-mep.h119
-rw-r--r--gas/config/tc-mips.c2003
-rw-r--r--gas/config/tc-mips.h16
-rw-r--r--gas/config/tc-mmix.c5
-rw-r--r--gas/config/tc-mmix.h3
-rw-r--r--gas/config/tc-mn10200.c1
-rw-r--r--gas/config/tc-mn10300.c23
-rw-r--r--gas/config/tc-mn10300.h20
-rw-r--r--gas/config/tc-msp430.c13
-rw-r--r--gas/config/tc-mt.c3
-rw-r--r--gas/config/tc-ns32k.c6
-rw-r--r--gas/config/tc-openrisc.c3
-rw-r--r--gas/config/tc-or32.c6
-rw-r--r--gas/config/tc-ppc.c658
-rw-r--r--gas/config/tc-ppc.h79
-rw-r--r--gas/config/tc-s390.c7
-rw-r--r--gas/config/tc-s390.h2
-rw-r--r--gas/config/tc-score.c6661
-rw-r--r--gas/config/tc-score.h83
-rw-r--r--gas/config/tc-sh.c169
-rw-r--r--gas/config/tc-sh.h22
-rw-r--r--gas/config/tc-sh64.c8
-rw-r--r--gas/config/tc-sh64.h4
-rw-r--r--gas/config/tc-sparc.c46
-rw-r--r--gas/config/tc-sparc.h19
-rw-r--r--gas/config/tc-spu.c1083
-rw-r--r--gas/config/tc-spu.h107
-rw-r--r--gas/config/tc-tic30.c11
-rw-r--r--gas/config/tc-tic4x.c7
-rw-r--r--gas/config/tc-tic54x.c6
-rw-r--r--gas/config/tc-v850.c1
-rw-r--r--gas/config/tc-vax.c142
-rw-r--r--gas/config/tc-vax.h7
-rw-r--r--gas/config/tc-xc16x.c2
-rw-r--r--gas/config/tc-xc16x.h5
-rw-r--r--gas/config/tc-xstormy16.c4
-rw-r--r--gas/config/tc-xstormy16.h3
-rw-r--r--gas/config/tc-xtensa.c1414
-rw-r--r--gas/config/tc-xtensa.h32
-rw-r--r--gas/config/tc-z80.c6
-rw-r--r--gas/config/tc-z8k.c50
-rw-r--r--gas/config/te-pep.h10
-rw-r--r--gas/config/xtensa-istack.h5
-rw-r--r--gas/config/xtensa-relax.c310
-rw-r--r--gas/config/xtensa-relax.h9
-rwxr-xr-xgas/configure10812
-rw-r--r--gas/configure.in67
-rw-r--r--gas/configure.tgt24
-rw-r--r--gas/debug.c38
-rw-r--r--gas/dep-in.sed5
-rw-r--r--gas/doc/Makefile.am29
-rw-r--r--gas/doc/Makefile.in106
-rw-r--r--gas/doc/all.texi4
-rw-r--r--gas/doc/as.11109
-rw-r--r--gas/doc/as.info18352
-rw-r--r--gas/doc/as.texinfo460
-rw-r--r--gas/doc/asconfig.texi90
-rw-r--r--gas/doc/c-arc.texi4
-rw-r--r--gas/doc/c-arm.texi117
-rw-r--r--gas/doc/c-avr.texi364
-rw-r--r--gas/doc/c-bfin.texi4
-rw-r--r--gas/doc/c-cr16.texi80
-rw-r--r--gas/doc/c-i386.texi56
-rw-r--r--gas/doc/c-i960.texi2
-rw-r--r--gas/doc/c-m32r.texi16
-rw-r--r--gas/doc/c-m68hc11.texi18
-rw-r--r--gas/doc/c-m68k.texi13
-rw-r--r--gas/doc/c-mips.texi124
-rw-r--r--gas/doc/c-mmix.texi2
-rw-r--r--gas/doc/c-pdp11.texi2
-rw-r--r--gas/doc/c-ppc.texi18
-rw-r--r--gas/doc/c-tic54x.texi6
-rw-r--r--gas/doc/c-v850.texi2
-rw-r--r--gas/doc/c-xtensa.texi151
-rw-r--r--gas/doc/c-z80.texi12
-rw-r--r--gas/doc/gasver.texi1
-rw-r--r--gas/doc/internals.texi14
-rw-r--r--gas/dw2gencfi.c361
-rw-r--r--gas/dwarf2dbg.c206
-rw-r--r--gas/ecoff.c4
-rw-r--r--gas/expr.c21
-rw-r--r--gas/frags.c4
-rw-r--r--gas/frags.h2
-rw-r--r--gas/gdbinit.in1
-rw-r--r--gas/input-file.c33
-rw-r--r--gas/input-file.h7
-rw-r--r--gas/input-scrub.c52
-rw-r--r--gas/itbl-lex.c1713
-rw-r--r--gas/itbl-lex.l8
-rw-r--r--gas/itbl-ops.c15
-rw-r--r--gas/itbl-ops.h12
-rw-r--r--gas/itbl-parse.c1842
-rw-r--r--gas/itbl-parse.h77
-rw-r--r--gas/itbl-parse.y6
-rw-r--r--gas/listing.c19
-rw-r--r--gas/m68k-parse.c2672
-rw-r--r--gas/macro.c55
-rw-r--r--gas/macro.h5
-rw-r--r--gas/messages.c38
-rw-r--r--gas/output-file.c36
-rw-r--r--gas/po/Make-in3
-rw-r--r--gas/po/POTFILES.in10
-rw-r--r--gas/po/es.gmobin305962 -> 0 bytes
-rw-r--r--gas/po/fr.gmobin288175 -> 0 bytes
-rw-r--r--gas/po/gas.pot7166
-rw-r--r--gas/po/rw.gmobin438 -> 0 bytes
-rw-r--r--gas/po/tr.gmobin254790 -> 0 bytes
-rw-r--r--gas/read.c407
-rw-r--r--gas/read.h1
-rw-r--r--gas/sb.c23
-rw-r--r--gas/sb.h13
-rw-r--r--gas/subsegs.c202
-rw-r--r--gas/subsegs.h16
-rw-r--r--gas/symbols.c369
-rw-r--r--gas/symbols.h4
-rw-r--r--gas/testsuite/ChangeLog863
-rw-r--r--gas/testsuite/ChangeLog-20061094
-rw-r--r--gas/testsuite/gas/all/gas.exp20
-rw-r--r--gas/testsuite/gas/all/relax.d13
-rw-r--r--gas/testsuite/gas/all/relax.s20
-rw-r--r--gas/testsuite/gas/alpha/alpha.exp13
-rw-r--r--gas/testsuite/gas/arm/arch4t.d8
-rw-r--r--gas/testsuite/gas/arm/arch7.d5
-rw-r--r--gas/testsuite/gas/arm/archv6.d104
-rw-r--r--gas/testsuite/gas/arm/archv6.s4
-rw-r--r--gas/testsuite/gas/arm/archv6t2.d10
-rw-r--r--gas/testsuite/gas/arm/arm-it.d9
-rw-r--r--gas/testsuite/gas/arm/arm-it.s8
-rw-r--r--gas/testsuite/gas/arm/arm3.d2
-rw-r--r--gas/testsuite/gas/arm/arm7dm.d2
-rw-r--r--gas/testsuite/gas/arm/arm7t.d20
-rw-r--r--gas/testsuite/gas/arm/armv1.d9
-rw-r--r--gas/testsuite/gas/arm/armv1.l5
-rw-r--r--gas/testsuite/gas/arm/backslash-at.d17
-rw-r--r--gas/testsuite/gas/arm/backslash-at.s16
-rw-r--r--gas/testsuite/gas/arm/copro.d4
-rw-r--r--gas/testsuite/gas/arm/copro.s3
-rw-r--r--gas/testsuite/gas/arm/group-reloc-alu-encoding-bad.d3
-rw-r--r--gas/testsuite/gas/arm/group-reloc-alu-encoding-bad.l81
-rw-r--r--gas/testsuite/gas/arm/group-reloc-alu-encoding-bad.s35
-rw-r--r--gas/testsuite/gas/arm/group-reloc-alu-parsing-bad.d3
-rw-r--r--gas/testsuite/gas/arm/group-reloc-alu-parsing-bad.l5
-rw-r--r--gas/testsuite/gas/arm/group-reloc-alu-parsing-bad.s12
-rw-r--r--gas/testsuite/gas/arm/group-reloc-alu.d168
-rw-r--r--gas/testsuite/gas/arm/group-reloc-alu.s39
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldc-encoding-bad.d3
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldc-encoding-bad.l721
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldc-encoding-bad.s169
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldc-parsing-bad.d3
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldc-parsing-bad.l147
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldc-parsing-bad.s67
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldc.d727
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldc.s151
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldr-encoding-bad.d3
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldr-encoding-bad.l97
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldr-encoding-bad.s39
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldr-parsing-bad.d3
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldr-parsing-bad.l21
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldr-parsing-bad.s33
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldr.d200
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldr.s41
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldrs-encoding-bad.d3
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldrs-encoding-bad.l121
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldrs-encoding-bad.s54
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldrs-parsing-bad.d3
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldrs-parsing-bad.l31
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldrs-parsing-bad.s44
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldrs.d248
-rw-r--r--gas/testsuite/gas/arm/group-reloc-ldrs.s54
-rw-r--r--gas/testsuite/gas/arm/inst.d92
-rw-r--r--gas/testsuite/gas/arm/itblock.s21
-rw-r--r--gas/testsuite/gas/arm/iwmmxt-bad.l2
-rw-r--r--gas/testsuite/gas/arm/iwmmxt-bad.s2
-rw-r--r--gas/testsuite/gas/arm/iwmmxt-wldsttbh.d11
-rw-r--r--gas/testsuite/gas/arm/iwmmxt-wldsttbh.s8
-rw-r--r--gas/testsuite/gas/arm/iwmmxt.d4
-rw-r--r--gas/testsuite/gas/arm/iwmmxt.s5
-rw-r--r--gas/testsuite/gas/arm/iwmmxt2.d119
-rw-r--r--gas/testsuite/gas/arm/iwmmxt2.s137
-rw-r--r--gas/testsuite/gas/arm/local_function.d10
-rw-r--r--gas/testsuite/gas/arm/local_function.s10
-rw-r--r--gas/testsuite/gas/arm/local_label_coff.d11
-rw-r--r--gas/testsuite/gas/arm/local_label_coff.s3
-rw-r--r--gas/testsuite/gas/arm/local_label_elf.d9
-rw-r--r--gas/testsuite/gas/arm/local_label_elf.s3
-rw-r--r--gas/testsuite/gas/arm/local_label_wince.d11
-rw-r--r--gas/testsuite/gas/arm/local_label_wince.s3
-rw-r--r--gas/testsuite/gas/arm/macro1.d2
-rw-r--r--gas/testsuite/gas/arm/mapshort-eabi.d45
-rw-r--r--gas/testsuite/gas/arm/mapshort-elf.d44
-rw-r--r--gas/testsuite/gas/arm/mapshort.s24
-rw-r--r--gas/testsuite/gas/arm/mul-overlap-v6.d10
-rw-r--r--gas/testsuite/gas/arm/mul-overlap-v6.s9
-rw-r--r--gas/testsuite/gas/arm/mul-overlap.d2
-rw-r--r--gas/testsuite/gas/arm/mul-overlap.l3
-rw-r--r--gas/testsuite/gas/arm/mul-overlap.s8
-rw-r--r--gas/testsuite/gas/arm/neon-cond-bad-inc.s57
-rw-r--r--gas/testsuite/gas/arm/neon-cond-bad.d3
-rw-r--r--gas/testsuite/gas/arm/neon-cond-bad.l29
-rw-r--r--gas/testsuite/gas/arm/neon-cond-bad.s2
-rw-r--r--gas/testsuite/gas/arm/neon-cond-bad_t2.d55
-rw-r--r--gas/testsuite/gas/arm/neon-cond-bad_t2.s2
-rw-r--r--gas/testsuite/gas/arm/neon-cond.d14
-rw-r--r--gas/testsuite/gas/arm/neon-cond.s13
-rw-r--r--gas/testsuite/gas/arm/neon-const.d265
-rw-r--r--gas/testsuite/gas/arm/neon-const.s297
-rw-r--r--gas/testsuite/gas/arm/neon-cov.d1522
-rw-r--r--gas/testsuite/gas/arm/neon-cov.s666
-rw-r--r--gas/testsuite/gas/arm/neon-ldst-es.d57
-rw-r--r--gas/testsuite/gas/arm/neon-ldst-es.s59
-rw-r--r--gas/testsuite/gas/arm/neon-ldst-rm.d63
-rw-r--r--gas/testsuite/gas/arm/neon-ldst-rm.s44
-rw-r--r--gas/testsuite/gas/arm/neon-omit.d95
-rw-r--r--gas/testsuite/gas/arm/neon-omit.s97
-rw-r--r--gas/testsuite/gas/arm/neon-psyn.d37
-rw-r--r--gas/testsuite/gas/arm/neon-psyn.s78
-rw-r--r--gas/testsuite/gas/arm/noarm.d3
-rw-r--r--gas/testsuite/gas/arm/noarm.l3
-rw-r--r--gas/testsuite/gas/arm/noarm.s13
-rw-r--r--gas/testsuite/gas/arm/relax_branch_align.d13
-rw-r--r--gas/testsuite/gas/arm/relax_branch_align.s17
-rw-r--r--gas/testsuite/gas/arm/srs-arm.d2
-rw-r--r--gas/testsuite/gas/arm/srs-arm.l5
-rw-r--r--gas/testsuite/gas/arm/srs-arm.s16
-rw-r--r--gas/testsuite/gas/arm/srs-t2.d2
-rw-r--r--gas/testsuite/gas/arm/srs-t2.l3
-rw-r--r--gas/testsuite/gas/arm/srs-t2.s10
-rw-r--r--gas/testsuite/gas/arm/svc.d1
-rw-r--r--gas/testsuite/gas/arm/tcompat.d42
-rw-r--r--gas/testsuite/gas/arm/thumb.d14
-rw-r--r--gas/testsuite/gas/arm/thumb1_unified.d20
-rw-r--r--gas/testsuite/gas/arm/thumb1_unified.s25
-rw-r--r--gas/testsuite/gas/arm/thumb2_add.d30
-rw-r--r--gas/testsuite/gas/arm/thumb2_add.s31
-rw-r--r--gas/testsuite/gas/arm/thumb2_bcond.d17
-rw-r--r--gas/testsuite/gas/arm/thumb2_it_bad.d1
-rw-r--r--gas/testsuite/gas/arm/thumb2_ldmstm.d27
-rw-r--r--gas/testsuite/gas/arm/thumb2_ldmstm.s24
-rw-r--r--gas/testsuite/gas/arm/thumb2_pool.d5
-rw-r--r--gas/testsuite/gas/arm/thumb2_relax.d6
-rw-r--r--gas/testsuite/gas/arm/thumb32.d316
-rw-r--r--gas/testsuite/gas/arm/thumb32.l17
-rw-r--r--gas/testsuite/gas/arm/thumb32.s48
-rw-r--r--gas/testsuite/gas/arm/thumbrel.d14
-rw-r--r--gas/testsuite/gas/arm/thumbrel.s11
-rw-r--r--gas/testsuite/gas/arm/thumbver.d15
-rw-r--r--gas/testsuite/gas/arm/thumbver.s9
-rw-r--r--gas/testsuite/gas/arm/tls.d8
-rw-r--r--gas/testsuite/gas/arm/undefined.d5
-rw-r--r--gas/testsuite/gas/arm/undefined_coff.d5
-rw-r--r--gas/testsuite/gas/arm/unwind.d10
-rw-r--r--gas/testsuite/gas/arm/unwind.s16
-rw-r--r--gas/testsuite/gas/arm/unwind_vxworks.d8
-rw-r--r--gas/testsuite/gas/arm/vfp-neon-overlap.d35
-rw-r--r--gas/testsuite/gas/arm/vfp-neon-overlap.s41
-rw-r--r--gas/testsuite/gas/arm/vfp-neon-syntax-inc.s162
-rw-r--r--gas/testsuite/gas/arm/vfp-neon-syntax.d187
-rw-r--r--gas/testsuite/gas/arm/vfp-neon-syntax.s2
-rw-r--r--gas/testsuite/gas/arm/vfp-neon-syntax_t2.d219
-rw-r--r--gas/testsuite/gas/arm/vfp-neon-syntax_t2.s2
-rw-r--r--gas/testsuite/gas/arm/vfp1.d152
-rw-r--r--gas/testsuite/gas/arm/vfp1_t2.d203
-rw-r--r--gas/testsuite/gas/arm/vfp1xD.d12
-rw-r--r--gas/testsuite/gas/arm/vfp1xD.s14
-rw-r--r--gas/testsuite/gas/arm/vfp1xD_t2.d127
-rw-r--r--gas/testsuite/gas/arm/vfp1xD_t2.s17
-rw-r--r--gas/testsuite/gas/arm/vfp2.d12
-rw-r--r--gas/testsuite/gas/arm/vfp2_t2.d12
-rw-r--r--gas/testsuite/gas/arm/vfpv3-32drs.d73
-rw-r--r--gas/testsuite/gas/arm/vfpv3-32drs.s68
-rw-r--r--gas/testsuite/gas/arm/vfpv3-const-conv.d29
-rw-r--r--gas/testsuite/gas/arm/vfpv3-const-conv.s25
-rw-r--r--gas/testsuite/gas/arm/wince.d30
-rw-r--r--gas/testsuite/gas/arm/wince.s25
-rw-r--r--gas/testsuite/gas/arm/wince_inst.d28
-rw-r--r--gas/testsuite/gas/arm/xscale.d8
-rw-r--r--gas/testsuite/gas/bfin/bfin.exp12
-rw-r--r--gas/testsuite/gas/bfin/load.d140
-rw-r--r--gas/testsuite/gas/bfin/load.s4
-rw-r--r--gas/testsuite/gas/bfin/vector2.d3
-rwxr-xr-xgas/testsuite/gas/bfin/vector2.s5
-rw-r--r--gas/testsuite/gas/cfi/cfi-common-5.d24
-rw-r--r--gas/testsuite/gas/cfi/cfi-common-5.s24
-rw-r--r--gas/testsuite/gas/cfi/cfi-common-6.d73
-rw-r--r--gas/testsuite/gas/cfi/cfi-common-6.s40
-rw-r--r--gas/testsuite/gas/cfi/cfi-hppa-1.d38
-rw-r--r--gas/testsuite/gas/cfi/cfi-hppa-1.s66
-rw-r--r--gas/testsuite/gas/cfi/cfi-x86_64.d39
-rw-r--r--gas/testsuite/gas/cfi/cfi-x86_64.s49
-rw-r--r--gas/testsuite/gas/cfi/cfi.exp22
-rw-r--r--gas/testsuite/gas/cr16/add_test.d71
-rw-r--r--gas/testsuite/gas/cr16/add_test.s98
-rw-r--r--gas/testsuite/gas/cr16/and_test.d55
-rw-r--r--gas/testsuite/gas/cr16/and_test.s57
-rw-r--r--gas/testsuite/gas/cr16/ash_test.d47
-rw-r--r--gas/testsuite/gas/cr16/ash_test.s59
-rw-r--r--gas/testsuite/gas/cr16/bal_test.d25
-rw-r--r--gas/testsuite/gas/cr16/bal_test.s14
-rw-r--r--gas/testsuite/gas/cr16/bcc_test.d69
-rw-r--r--gas/testsuite/gas/cr16/bcc_test.s59
-rw-r--r--gas/testsuite/gas/cr16/beq0_test.d15
-rw-r--r--gas/testsuite/gas/cr16/beq0_test.s15
-rw-r--r--gas/testsuite/gas/cr16/cbitb_test.d82
-rw-r--r--gas/testsuite/gas/cr16/cbitb_test.s62
-rw-r--r--gas/testsuite/gas/cr16/cbitw_test.d155
-rw-r--r--gas/testsuite/gas/cr16/cbitw_test.s117
-rw-r--r--gas/testsuite/gas/cr16/cinv_test.d15
-rw-r--r--gas/testsuite/gas/cr16/cinv_test.s12
-rw-r--r--gas/testsuite/gas/cr16/cmp_test.d51
-rw-r--r--gas/testsuite/gas/cr16/cmp_test.s62
-rw-r--r--gas/testsuite/gas/cr16/cr16.exp27
-rw-r--r--gas/testsuite/gas/cr16/excp_test.d18
-rw-r--r--gas/testsuite/gas/cr16/excp_test.s15
-rw-r--r--gas/testsuite/gas/cr16/jal_test.d14
-rw-r--r--gas/testsuite/gas/cr16/jal_test.s11
-rw-r--r--gas/testsuite/gas/cr16/jcc_test.d24
-rw-r--r--gas/testsuite/gas/cr16/jcc_test.s21
-rw-r--r--gas/testsuite/gas/cr16/loadb_test.d79
-rw-r--r--gas/testsuite/gas/cr16/loadb_test.s72
-rw-r--r--gas/testsuite/gas/cr16/loadd_test.d79
-rw-r--r--gas/testsuite/gas/cr16/loadd_test.s72
-rw-r--r--gas/testsuite/gas/cr16/loadm_test.d25
-rw-r--r--gas/testsuite/gas/cr16/loadm_test.s25
-rw-r--r--gas/testsuite/gas/cr16/loadw_test.d79
-rw-r--r--gas/testsuite/gas/cr16/loadw_test.s72
-rw-r--r--gas/testsuite/gas/cr16/lpsp_test.d57
-rw-r--r--gas/testsuite/gas/cr16/lpsp_test.s63
-rw-r--r--gas/testsuite/gas/cr16/lsh_test.d47
-rw-r--r--gas/testsuite/gas/cr16/lsh_test.s59
-rw-r--r--gas/testsuite/gas/cr16/mov_test.d69
-rw-r--r--gas/testsuite/gas/cr16/mov_test.s94
-rw-r--r--gas/testsuite/gas/cr16/mul_test.d47
-rw-r--r--gas/testsuite/gas/cr16/mul_test.s64
-rw-r--r--gas/testsuite/gas/cr16/or_test.d49
-rw-r--r--gas/testsuite/gas/cr16/or_test.s57
-rw-r--r--gas/testsuite/gas/cr16/pop_test.d24
-rw-r--r--gas/testsuite/gas/cr16/pop_test.s27
-rw-r--r--gas/testsuite/gas/cr16/popret_test.d24
-rw-r--r--gas/testsuite/gas/cr16/popret_test.s27
-rw-r--r--gas/testsuite/gas/cr16/push_test.d26
-rw-r--r--gas/testsuite/gas/cr16/push_test.s40
-rw-r--r--gas/testsuite/gas/cr16/sbitb_test.d82
-rw-r--r--gas/testsuite/gas/cr16/sbitb_test.s62
-rw-r--r--gas/testsuite/gas/cr16/sbitw_test.d155
-rw-r--r--gas/testsuite/gas/cr16/sbitw_test.s117
-rw-r--r--gas/testsuite/gas/cr16/scc_test.d22
-rw-r--r--gas/testsuite/gas/cr16/scc_test.s19
-rw-r--r--gas/testsuite/gas/cr16/storb_test.d153
-rw-r--r--gas/testsuite/gas/cr16/storb_test.s143
-rw-r--r--gas/testsuite/gas/cr16/stord_test.d80
-rw-r--r--gas/testsuite/gas/cr16/stord_test.s72
-rw-r--r--gas/testsuite/gas/cr16/storm_test.d25
-rw-r--r--gas/testsuite/gas/cr16/storm_test.s25
-rw-r--r--gas/testsuite/gas/cr16/storw_test.d153
-rw-r--r--gas/testsuite/gas/cr16/storw_test.s144
-rw-r--r--gas/testsuite/gas/cr16/sub_test.d69
-rw-r--r--gas/testsuite/gas/cr16/sub_test.s93
-rw-r--r--gas/testsuite/gas/cr16/tbit_test.d37
-rw-r--r--gas/testsuite/gas/cr16/tbit_test.s41
-rw-r--r--gas/testsuite/gas/cr16/tbitb_test.d82
-rw-r--r--gas/testsuite/gas/cr16/tbitb_test.s62
-rw-r--r--gas/testsuite/gas/cr16/tbitw_test.d155
-rw-r--r--gas/testsuite/gas/cr16/tbitw_test.s117
-rw-r--r--gas/testsuite/gas/cr16/xor_test.d49
-rw-r--r--gas/testsuite/gas/cr16/xor_test.s57
-rw-r--r--gas/testsuite/gas/crx/allinsn.exp13
-rw-r--r--gas/testsuite/gas/d10v/address-002.l2
-rw-r--r--gas/testsuite/gas/d10v/address-003.l3
-rw-r--r--gas/testsuite/gas/d10v/address-004.l2
-rw-r--r--gas/testsuite/gas/d10v/address-005.l2
-rw-r--r--gas/testsuite/gas/d10v/address-006.l2
-rw-r--r--gas/testsuite/gas/d10v/address-007.l2
-rw-r--r--gas/testsuite/gas/d10v/address-008.l2
-rw-r--r--gas/testsuite/gas/d10v/address-009.l2
-rw-r--r--gas/testsuite/gas/d10v/address-010.l2
-rw-r--r--gas/testsuite/gas/d10v/address-011.l2
-rw-r--r--gas/testsuite/gas/d10v/address-012.l2
-rw-r--r--gas/testsuite/gas/d10v/address-013.l2
-rw-r--r--gas/testsuite/gas/d10v/address-014.l2
-rw-r--r--gas/testsuite/gas/d10v/address-015.l2
-rw-r--r--gas/testsuite/gas/d10v/address-016.l2
-rw-r--r--gas/testsuite/gas/d10v/address-017.l2
-rw-r--r--gas/testsuite/gas/d10v/address-018.l2
-rw-r--r--gas/testsuite/gas/d10v/address-019.l2
-rw-r--r--gas/testsuite/gas/d10v/address-020.l2
-rw-r--r--gas/testsuite/gas/d10v/address-021.l2
-rw-r--r--gas/testsuite/gas/d10v/address-022.l2
-rw-r--r--gas/testsuite/gas/d10v/address-023.l2
-rw-r--r--gas/testsuite/gas/d10v/address-024.l2
-rw-r--r--gas/testsuite/gas/d10v/address-025.l2
-rw-r--r--gas/testsuite/gas/d10v/address-026.l2
-rw-r--r--gas/testsuite/gas/d10v/address-027.l2
-rw-r--r--gas/testsuite/gas/d10v/address-030.l2
-rw-r--r--gas/testsuite/gas/d10v/address-031.l2
-rw-r--r--gas/testsuite/gas/d10v/address-032.l2
-rw-r--r--gas/testsuite/gas/d10v/address-033.l2
-rw-r--r--gas/testsuite/gas/d10v/address-034.l2
-rw-r--r--gas/testsuite/gas/d10v/address-035.l2
-rw-r--r--gas/testsuite/gas/d10v/address-036.l2
-rw-r--r--gas/testsuite/gas/d10v/address-037.l2
-rw-r--r--gas/testsuite/gas/d10v/address-038.l2
-rw-r--r--gas/testsuite/gas/d10v/address-039.l2
-rw-r--r--gas/testsuite/gas/d10v/address-040.l2
-rw-r--r--gas/testsuite/gas/d10v/address-041.l2
-rw-r--r--gas/testsuite/gas/d10v/d10v.exp13
-rw-r--r--gas/testsuite/gas/d30v/d30.exp13
-rw-r--r--gas/testsuite/gas/elf/elf.exp32
-rw-r--r--gas/testsuite/gas/elf/equ-reloc.d13
-rw-r--r--gas/testsuite/gas/elf/equ-reloc.s16
-rw-r--r--gas/testsuite/gas/elf/section2.e-armeabi5
-rw-r--r--gas/testsuite/gas/elf/section2.e-armelf9
-rw-r--r--gas/testsuite/gas/elf/section2.e-score9
-rw-r--r--gas/testsuite/gas/elf/section2.e-xtensa9
-rw-r--r--gas/testsuite/gas/frv/allinsn.exp22
-rw-r--r--gas/testsuite/gas/i386/addr16.d15
-rw-r--r--gas/testsuite/gas/i386/addr16.s7
-rw-r--r--gas/testsuite/gas/i386/addr32.d15
-rw-r--r--gas/testsuite/gas/i386/addr32.s8
-rw-r--r--gas/testsuite/gas/i386/amd.d4
-rw-r--r--gas/testsuite/gas/i386/amdfam10.d23
-rw-r--r--gas/testsuite/gas/i386/amdfam10.s21
-rw-r--r--gas/testsuite/gas/i386/crc32-intel.d25
-rw-r--r--gas/testsuite/gas/i386/crc32.d24
-rw-r--r--gas/testsuite/gas/i386/crc32.s24
-rw-r--r--gas/testsuite/gas/i386/fp.d8
-rw-r--r--gas/testsuite/gas/i386/fp.s13
-rw-r--r--gas/testsuite/gas/i386/gotpc.d4
-rw-r--r--gas/testsuite/gas/i386/gotpc.s1
-rw-r--r--gas/testsuite/gas/i386/i386.exp58
-rw-r--r--gas/testsuite/gas/i386/immed32.d6
-rw-r--r--gas/testsuite/gas/i386/immed64.d1
-rw-r--r--gas/testsuite/gas/i386/intel.d507
-rw-r--r--gas/testsuite/gas/i386/intel.s9
-rw-r--r--gas/testsuite/gas/i386/intel16.d12
-rw-r--r--gas/testsuite/gas/i386/intelok.d64
-rw-r--r--gas/testsuite/gas/i386/inval-crc32.l43
-rw-r--r--gas/testsuite/gas/i386/inval-crc32.s23
-rw-r--r--gas/testsuite/gas/i386/inval.l4
-rw-r--r--gas/testsuite/gas/i386/inval.s2
-rw-r--r--gas/testsuite/gas/i386/jump16.d20
-rw-r--r--gas/testsuite/gas/i386/merom.d2
-rw-r--r--gas/testsuite/gas/i386/naked.d10
-rw-r--r--gas/testsuite/gas/i386/nops-1-i386.d177
-rw-r--r--gas/testsuite/gas/i386/nops-1-i686.d161
-rw-r--r--gas/testsuite/gas/i386/nops-1-merom.d156
-rw-r--r--gas/testsuite/gas/i386/nops-1.d176
-rw-r--r--gas/testsuite/gas/i386/nops-1.s147
-rw-r--r--gas/testsuite/gas/i386/nops-2-i386.d182
-rw-r--r--gas/testsuite/gas/i386/nops-2-merom.d182
-rw-r--r--gas/testsuite/gas/i386/nops-2.d181
-rw-r--r--gas/testsuite/gas/i386/nops-2.s151
-rw-r--r--gas/testsuite/gas/i386/nops-3.d43
-rw-r--r--gas/testsuite/gas/i386/nops-3.s6
-rw-r--r--gas/testsuite/gas/i386/nops.d24
-rw-r--r--gas/testsuite/gas/i386/nops.s20
-rw-r--r--gas/testsuite/gas/i386/opcode-intel.d615
-rw-r--r--gas/testsuite/gas/i386/opcode-suffix.d591
-rw-r--r--gas/testsuite/gas/i386/opcode.d519
-rw-r--r--gas/testsuite/gas/i386/opcode.s19
-rw-r--r--gas/testsuite/gas/i386/prefix.d4
-rw-r--r--gas/testsuite/gas/i386/prescott.d6
-rw-r--r--gas/testsuite/gas/i386/reloc64.d1
-rw-r--r--gas/testsuite/gas/i386/reloc64.s3
-rw-r--r--gas/testsuite/gas/i386/rep-suffix.d4
-rw-r--r--gas/testsuite/gas/i386/rep.d56
-rw-r--r--gas/testsuite/gas/i386/rex.d26
-rw-r--r--gas/testsuite/gas/i386/rex.s18
-rw-r--r--gas/testsuite/gas/i386/secrel.d34
-rw-r--r--gas/testsuite/gas/i386/simd-intel.d37
-rw-r--r--gas/testsuite/gas/i386/simd.d36
-rw-r--r--gas/testsuite/gas/i386/simd.s29
-rw-r--r--gas/testsuite/gas/i386/sse2.d16
-rw-r--r--gas/testsuite/gas/i386/sse2.s4
-rw-r--r--gas/testsuite/gas/i386/sse4_1.d102
-rw-r--r--gas/testsuite/gas/i386/sse4_1.s99
-rw-r--r--gas/testsuite/gas/i386/sse4_2.d36
-rw-r--r--gas/testsuite/gas/i386/sse4_2.s33
-rw-r--r--gas/testsuite/gas/i386/ssemmx2.d96
-rw-r--r--gas/testsuite/gas/i386/tlsd.d2
-rw-r--r--gas/testsuite/gas/i386/tlspic.d2
-rw-r--r--gas/testsuite/gas/i386/white.l2
-rw-r--r--gas/testsuite/gas/i386/x86-64-addr32-intel.d23
-rw-r--r--gas/testsuite/gas/i386/x86-64-addr32.d13
-rw-r--r--gas/testsuite/gas/i386/x86-64-addr32.s8
-rw-r--r--gas/testsuite/gas/i386/x86-64-amdfam10.d27
-rw-r--r--gas/testsuite/gas/i386/x86-64-amdfam10.s25
-rw-r--r--gas/testsuite/gas/i386/x86-64-branch.d3
-rw-r--r--gas/testsuite/gas/i386/x86-64-cbw-intel.d26
-rw-r--r--gas/testsuite/gas/i386/x86-64-cbw.d25
-rw-r--r--gas/testsuite/gas/i386/x86-64-cbw.s18
-rw-r--r--gas/testsuite/gas/i386/x86-64-crc32-intel.d35
-rw-r--r--gas/testsuite/gas/i386/x86-64-crc32.d34
-rw-r--r--gas/testsuite/gas/i386/x86-64-crc32.s34
-rw-r--r--gas/testsuite/gas/i386/x86-64-crx-suffix.d2
-rw-r--r--gas/testsuite/gas/i386/x86-64-crx.d2
-rw-r--r--gas/testsuite/gas/i386/x86-64-drx-suffix.d2
-rw-r--r--gas/testsuite/gas/i386/x86-64-drx.d2
-rw-r--r--gas/testsuite/gas/i386/x86-64-gidt.d17
-rw-r--r--gas/testsuite/gas/i386/x86-64-gidt.s14
-rw-r--r--gas/testsuite/gas/i386/x86-64-inval-crc32.l65
-rw-r--r--gas/testsuite/gas/i386/x86-64-inval-crc32.s34
-rw-r--r--gas/testsuite/gas/i386/x86-64-inval.l5
-rw-r--r--gas/testsuite/gas/i386/x86-64-inval.s3
-rw-r--r--gas/testsuite/gas/i386/x86-64-io-intel.d28
-rw-r--r--gas/testsuite/gas/i386/x86-64-io-suffix.d28
-rw-r--r--gas/testsuite/gas/i386/x86-64-io.d27
-rw-r--r--gas/testsuite/gas/i386/x86-64-io.s16
-rw-r--r--gas/testsuite/gas/i386/x86-64-merom.d2
-rw-r--r--gas/testsuite/gas/i386/x86-64-nops-1-k8.d177
-rw-r--r--gas/testsuite/gas/i386/x86-64-nops-1-merom.d156
-rw-r--r--gas/testsuite/gas/i386/x86-64-nops-1-nocona.d161
-rw-r--r--gas/testsuite/gas/i386/x86-64-nops-1.d160
-rw-r--r--gas/testsuite/gas/i386/x86-64-nops-1.s147
-rw-r--r--gas/testsuite/gas/i386/x86-64-nops.d37
-rw-r--r--gas/testsuite/gas/i386/x86-64-nops.s33
-rw-r--r--gas/testsuite/gas/i386/x86-64-opcode.d32
-rw-r--r--gas/testsuite/gas/i386/x86-64-opcode.s31
-rw-r--r--gas/testsuite/gas/i386/x86-64-pcrel.d2
-rw-r--r--gas/testsuite/gas/i386/x86-64-prescott.d6
-rw-r--r--gas/testsuite/gas/i386/x86-64-rep-suffix.d4
-rw-r--r--gas/testsuite/gas/i386/x86-64-rep.d66
-rw-r--r--gas/testsuite/gas/i386/x86-64-rip-intel.d15
-rw-r--r--gas/testsuite/gas/i386/x86-64-rip.d11
-rw-r--r--gas/testsuite/gas/i386/x86-64-simd-intel.d37
-rw-r--r--gas/testsuite/gas/i386/x86-64-simd.d36
-rw-r--r--gas/testsuite/gas/i386/x86-64-simd.s29
-rw-r--r--gas/testsuite/gas/i386/x86-64-sse4_1.d110
-rw-r--r--gas/testsuite/gas/i386/x86-64-sse4_1.s107
-rw-r--r--gas/testsuite/gas/i386/x86-64-sse4_2.d45
-rw-r--r--gas/testsuite/gas/i386/x86-64-sse4_2.s42
-rw-r--r--gas/testsuite/gas/i386/x86-64-stack-intel.d2
-rw-r--r--gas/testsuite/gas/i386/x86-64-stack-suffix.d2
-rw-r--r--gas/testsuite/gas/i386/x86-64-stack.d2
-rw-r--r--gas/testsuite/gas/i386/x86_64.d20
-rw-r--r--gas/testsuite/gas/i386/x86_64.s5
-rw-r--r--gas/testsuite/gas/i860/i860.exp13
-rw-r--r--gas/testsuite/gas/ia64/ia64.exp13
-rw-r--r--gas/testsuite/gas/lns/lns-common-1-alt.d39
-rw-r--r--gas/testsuite/gas/lns/lns.exp34
-rw-r--r--gas/testsuite/gas/m68k/all.exp43
-rw-r--r--gas/testsuite/gas/m68k/br-isaa.d15
-rw-r--r--gas/testsuite/gas/m68k/br-isaa.s6
-rw-r--r--gas/testsuite/gas/m68k/br-isab.d16
-rw-r--r--gas/testsuite/gas/m68k/br-isab.s7
-rw-r--r--gas/testsuite/gas/m68k/br-isac.d16
-rw-r--r--gas/testsuite/gas/m68k/br-isac.s7
-rw-r--r--gas/testsuite/gas/m68k/cpu32.d35
-rw-r--r--gas/testsuite/gas/m68k/cpu32.s26
-rw-r--r--gas/testsuite/gas/m68k/ctrl-1.d12
-rw-r--r--gas/testsuite/gas/m68k/ctrl-1.s2
-rw-r--r--gas/testsuite/gas/m68k/ctrl-2.d11
-rw-r--r--gas/testsuite/gas/m68k/ctrl-2.s2
-rw-r--r--gas/testsuite/gas/m68k/fido.d41
-rw-r--r--gas/testsuite/gas/m68k/fido.s37
-rw-r--r--gas/testsuite/gas/m68k/mcf-coproc.d50
-rw-r--r--gas/testsuite/gas/m68k/mcf-coproc.s47
-rw-r--r--gas/testsuite/gas/m68k/mcf-fpu.d648
-rw-r--r--gas/testsuite/gas/m68k/mcf-fpu.s648
-rw-r--r--gas/testsuite/gas/m68k/mcf-trap.d15
-rw-r--r--gas/testsuite/gas/m68k/mcf-trap.s9
-rw-r--r--gas/testsuite/gas/m68k/mcf-wdebug.d11
-rw-r--r--gas/testsuite/gas/m68k/mcf-wdebug.s6
-rw-r--r--gas/testsuite/gas/m68k/p3041.d15
-rw-r--r--gas/testsuite/gas/m68k/p3041.s6
-rw-r--r--gas/testsuite/gas/macros/macros.exp14
-rw-r--r--gas/testsuite/gas/maxq10/maxq10.exp13
-rw-r--r--gas/testsuite/gas/maxq20/maxq20.exp13
-rw-r--r--gas/testsuite/gas/mcore/allinsn.d255
-rw-r--r--gas/testsuite/gas/mcore/allinsn.s12
-rw-r--r--gas/testsuite/gas/mep/allinsn.d1345
-rw-r--r--gas/testsuite/gas/mep/allinsn.exp9
-rw-r--r--gas/testsuite/gas/mep/allinsn.le.d1346
-rw-r--r--gas/testsuite/gas/mep/allinsn.s1536
-rw-r--r--gas/testsuite/gas/mep/branch1.d14
-rw-r--r--gas/testsuite/gas/mep/branch1.s7
-rw-r--r--gas/testsuite/gas/mep/complex-relocs.exp42
-rw-r--r--gas/testsuite/gas/mep/dj1.d1393
-rw-r--r--gas/testsuite/gas/mep/dj1.le.d1393
-rw-r--r--gas/testsuite/gas/mep/dj1.s1306
-rw-r--r--gas/testsuite/gas/mep/dj2.d11
-rw-r--r--gas/testsuite/gas/mep/dj2.le.d12
-rw-r--r--gas/testsuite/gas/mep/dj2.s5
-rw-r--r--gas/testsuite/gas/mep/relocs-bad3.s15
-rw-r--r--gas/testsuite/gas/mep/relocs-junk1.s8
-rw-r--r--gas/testsuite/gas/mep/relocs-junk2.s7
-rw-r--r--gas/testsuite/gas/mep/relocs-refs.s55
-rw-r--r--gas/testsuite/gas/mep/relocs-syms.s18
-rw-r--r--gas/testsuite/gas/mep/relocs.d98
-rw-r--r--gas/testsuite/gas/mips/cp0sel-names-mips32r2.d42
-rw-r--r--gas/testsuite/gas/mips/cp0sel-names-mips64r2.d42
-rw-r--r--gas/testsuite/gas/mips/e32-rel2.d1
-rw-r--r--gas/testsuite/gas/mips/e32-rel4.d3
-rw-r--r--gas/testsuite/gas/mips/elf-rel26.d22
-rw-r--r--gas/testsuite/gas/mips/elf-rel26.s62
-rw-r--r--gas/testsuite/gas/mips/elf-rel6-n32.d16
-rw-r--r--gas/testsuite/gas/mips/elf-rel6-n64.d22
-rw-r--r--gas/testsuite/gas/mips/elf-rel6.d4
-rw-r--r--gas/testsuite/gas/mips/elf-rel6.s1
-rw-r--r--gas/testsuite/gas/mips/mips-gp32-fp64-pic.d1
-rw-r--r--gas/testsuite/gas/mips/mips-gp32-fp64.d1
-rw-r--r--gas/testsuite/gas/mips/mips-gp32-fp64.l2
-rw-r--r--gas/testsuite/gas/mips/mips-gp64-fp32-pic.d1
-rw-r--r--gas/testsuite/gas/mips/mips-gp64-fp32-pic.l2
-rw-r--r--gas/testsuite/gas/mips/mips-gp64-fp32.l3
-rw-r--r--gas/testsuite/gas/mips/mips-gp64-fp64.d2
-rw-r--r--gas/testsuite/gas/mips/mips.exp61
-rw-r--r--gas/testsuite/gas/mips/mips16-intermix.d164
-rw-r--r--gas/testsuite/gas/mips/mips16-intermix.s2631
-rw-r--r--gas/testsuite/gas/mips/mips16e-64.d19
-rw-r--r--gas/testsuite/gas/mips/mips16e-64.l3
-rw-r--r--gas/testsuite/gas/mips/mips16e-64.s9
-rw-r--r--gas/testsuite/gas/mips/mips16e-save.d2
-rw-r--r--gas/testsuite/gas/mips/mips16e.d50
-rw-r--r--gas/testsuite/gas/mips/mips16e.s58
-rw-r--r--gas/testsuite/gas/mips/mips32-dsp.d239
-rw-r--r--gas/testsuite/gas/mips/mips32-dsp.l39
-rw-r--r--gas/testsuite/gas/mips/mips32-dsp.s39
-rw-r--r--gas/testsuite/gas/mips/mips32-dspr2.d72
-rw-r--r--gas/testsuite/gas/mips/mips32-dspr2.s73
-rw-r--r--gas/testsuite/gas/mips/mips32-mt.d320
-rw-r--r--gas/testsuite/gas/mips/mips32-mt.l257
-rw-r--r--gas/testsuite/gas/mips/mips32-mt.s192
-rw-r--r--gas/testsuite/gas/mips/mips32-sf32.d19
-rw-r--r--gas/testsuite/gas/mips/mips32-sf32.s14
-rw-r--r--gas/testsuite/gas/mips/mips32.d50
-rw-r--r--gas/testsuite/gas/mips/mips32.s16
-rw-r--r--gas/testsuite/gas/mips/mips4.d17
-rw-r--r--gas/testsuite/gas/mips/mips4.s13
-rw-r--r--gas/testsuite/gas/mips/mips64-dsp.d172
-rw-r--r--gas/testsuite/gas/mips/mips64-dsp.s174
-rw-r--r--gas/testsuite/gas/mips/noreorder.d23
-rw-r--r--gas/testsuite/gas/mips/noreorder.s25
-rw-r--r--gas/testsuite/gas/mips/set-arch.d8
-rw-r--r--gas/testsuite/gas/mips/smartmips.d29
-rw-r--r--gas/testsuite/gas/mips/smartmips.s31
-rw-r--r--gas/testsuite/gas/mmix/bspec-1.d1
-rw-r--r--gas/testsuite/gas/mmix/bspec-2.d1
-rw-r--r--gas/testsuite/gas/mmix/comment-1.d1
-rw-r--r--gas/testsuite/gas/mmix/mmix-list.exp20
-rw-r--r--gas/testsuite/gas/mn10300/basic.exp16
-rw-r--r--gas/testsuite/gas/msp430/msp430.exp13
-rw-r--r--gas/testsuite/gas/pdp11/pdp11.exp13
-rw-r--r--gas/testsuite/gas/ppc/booke.d20
-rw-r--r--gas/testsuite/gas/ppc/booke.s5
-rw-r--r--gas/testsuite/gas/ppc/cell.d31
-rw-r--r--gas/testsuite/gas/ppc/cell.s24
-rw-r--r--gas/testsuite/gas/ppc/ppc.exp3
-rw-r--r--gas/testsuite/gas/ppc/range.l3
-rw-r--r--gas/testsuite/gas/ppc/range.s7
-rw-r--r--gas/testsuite/gas/ppc/range64.l6
-rw-r--r--gas/testsuite/gas/ppc/range64.s7
-rw-r--r--gas/testsuite/gas/ppc/reloc.d12
-rw-r--r--gas/testsuite/gas/ppc/reloc.s13
-rw-r--r--gas/testsuite/gas/s390/esa-g5.d8
-rw-r--r--gas/testsuite/gas/s390/esa-g5.s8
-rw-r--r--gas/testsuite/gas/s390/operands.d23
-rw-r--r--gas/testsuite/gas/s390/operands.s16
-rw-r--r--gas/testsuite/gas/s390/operands64.d14
-rw-r--r--gas/testsuite/gas/s390/operands64.s6
-rw-r--r--gas/testsuite/gas/s390/s390.exp14
-rw-r--r--gas/testsuite/gas/s390/zarch-z9-ec.d76
-rw-r--r--gas/testsuite/gas/s390/zarch-z9-ec.s72
-rw-r--r--gas/testsuite/gas/s390/zarch-z900.d18
-rw-r--r--gas/testsuite/gas/s390/zarch-z900.s18
-rw-r--r--gas/testsuite/gas/score/addi.d33
-rw-r--r--gas/testsuite/gas/score/addi.s37
-rw-r--r--gas/testsuite/gas/score/b.d18
-rw-r--r--gas/testsuite/gas/score/b.s30
-rw-r--r--gas/testsuite/gas/score/bittst.d36
-rw-r--r--gas/testsuite/gas/score/bittst.s59
-rw-r--r--gas/testsuite/gas/score/br.d49
-rw-r--r--gas/testsuite/gas/score/br.s53
-rw-r--r--gas/testsuite/gas/score/ldi.d29
-rw-r--r--gas/testsuite/gas/score/ldi.s53
-rw-r--r--gas/testsuite/gas/score/ls32ls16.d145
-rw-r--r--gas/testsuite/gas/score/ls32ls16.s70
-rw-r--r--gas/testsuite/gas/score/ls32ls16p.d135
-rw-r--r--gas/testsuite/gas/score/ls32ls16p.s68
-rw-r--r--gas/testsuite/gas/score/move.d60
-rw-r--r--gas/testsuite/gas/score/move.s98
-rw-r--r--gas/testsuite/gas/score/nop.d15
-rw-r--r--gas/testsuite/gas/score/nop.s38
-rw-r--r--gas/testsuite/gas/score/postlw.d32
-rw-r--r--gas/testsuite/gas/score/postlw.s54
-rw-r--r--gas/testsuite/gas/score/presw.d32
-rw-r--r--gas/testsuite/gas/score/presw.s54
-rw-r--r--gas/testsuite/gas/score/rD_rA.d90
-rw-r--r--gas/testsuite/gas/score/rD_rA.s66
-rw-r--r--gas/testsuite/gas/score/rD_rA_BN.d144
-rw-r--r--gas/testsuite/gas/score/rD_rA_BN.s73
-rw-r--r--gas/testsuite/gas/score/rD_rA_rB.d252
-rw-r--r--gas/testsuite/gas/score/rD_rA_rB.s86
-rw-r--r--gas/testsuite/gas/score/relax.exp20
-rw-r--r--gas/testsuite/gas/score/tcond.d264
-rw-r--r--gas/testsuite/gas/score/tcond.s55
-rw-r--r--gas/testsuite/gas/sh/basic.exp2
-rw-r--r--gas/testsuite/gas/sh/pcrel-coff.d6
-rw-r--r--gas/testsuite/gas/sh/pcrel-hms.d10
-rw-r--r--gas/testsuite/gas/sh/pcrel.d8
-rw-r--r--gas/testsuite/gas/sh/pcrel2.d4
-rw-r--r--gas/testsuite/gas/sh/pic.d12
-rw-r--r--gas/testsuite/gas/sh/sh64/syntax-1.d4
-rw-r--r--gas/testsuite/gas/sh/tlsd.d14
-rw-r--r--gas/testsuite/gas/sh/tlsnopic.d2
-rw-r--r--gas/testsuite/gas/sh/tlspic.d4
-rw-r--r--gas/testsuite/gas/sh/too_large.d9
-rw-r--r--gas/testsuite/gas/sh/too_large.s39
-rw-r--r--gas/testsuite/gas/sparc/pr4587.l2
-rw-r--r--gas/testsuite/gas/sparc/pr4587.s22
-rw-r--r--gas/testsuite/gas/sparc/sparc.exp7
-rw-r--r--gas/testsuite/gas/sparc/v9branch1.d23
-rw-r--r--gas/testsuite/gas/sparc/v9branch1.s18
-rw-r--r--gas/testsuite/gas/sparc/v9branch2.d3
-rw-r--r--gas/testsuite/gas/sparc/v9branch2.s7
-rw-r--r--gas/testsuite/gas/sparc/v9branch3.d3
-rw-r--r--gas/testsuite/gas/sparc/v9branch3.s6
-rw-r--r--gas/testsuite/gas/sparc/v9branch4.d3
-rw-r--r--gas/testsuite/gas/sparc/v9branch4.s7
-rw-r--r--gas/testsuite/gas/sparc/v9branch5.d3
-rw-r--r--gas/testsuite/gas/sparc/v9branch5.s6
-rw-r--r--gas/testsuite/gas/v850/v850e1.d2
-rw-r--r--gas/testsuite/gas/z8k/calr.d6
-rw-r--r--gas/testsuite/gas/z8k/ctrl-names.d4
-rw-r--r--gas/testsuite/gas/z8k/djnz.d4
-rw-r--r--gas/testsuite/gas/z8k/inout.d2
-rw-r--r--gas/testsuite/gas/z8k/jmp-cc.d4
-rw-r--r--gas/testsuite/gas/z8k/jr-back.d2
-rw-r--r--gas/testsuite/gas/z8k/jr-forw.d4
-rw-r--r--gas/testsuite/gas/z8k/reglabel.d268
-rw-r--r--gas/testsuite/gas/z8k/reglabel.s99
-rw-r--r--gas/testsuite/gas/z8k/ret-cc.d6
-rw-r--r--gas/testsuite/gas/z8k/z8k.exp4
-rw-r--r--gas/testsuite/lib/gas-defs.exp41
-rw-r--r--gas/testsuite/lib/gas-dg.exp3
-rw-r--r--gas/write.c1082
-rw-r--r--gas/write.h64
-rw-r--r--gettext.m4346
-rw-r--r--gold/Makefile.am112
-rw-r--r--gold/Makefile.in873
-rw-r--r--gold/README18
-rw-r--r--gold/aclocal.m4877
-rw-r--r--gold/archive.cc368
-rw-r--r--gold/archive.h162
-rw-r--r--gold/common.cc210
-rw-r--r--gold/common.h49
-rw-r--r--gold/config.in75
-rwxr-xr-xgold/configure6715
-rw-r--r--gold/configure.ac52
-rw-r--r--gold/defstd.cc239
-rw-r--r--gold/defstd.h16
-rw-r--r--gold/dirsearch.cc236
-rw-r--r--gold/dirsearch.h57
-rw-r--r--gold/dynobj.cc1647
-rw-r--r--gold/dynobj.h494
-rw-r--r--gold/fileread.cc379
-rw-r--r--gold/fileread.h257
-rw-r--r--gold/gold-threads.cc228
-rw-r--r--gold/gold-threads.h101
-rw-r--r--gold/gold.cc239
-rw-r--r--gold/gold.h214
-rw-r--r--gold/i386.cc1517
-rw-r--r--gold/layout.cc1440
-rw-r--r--gold/layout.h430
-rw-r--r--gold/main.cc57
-rw-r--r--gold/merge.cc333
-rw-r--r--gold/merge.h226
-rw-r--r--gold/object.cc973
-rw-r--r--gold/object.h820
-rw-r--r--gold/options.cc579
-rw-r--r--gold/options.h394
-rw-r--r--gold/output.cc1670
-rw-r--r--gold/output.h1801
-rw-r--r--gold/po/Make-in256
-rw-r--r--gold/po/POTFILES.in46
-rw-r--r--gold/po/gold.pot654
-rw-r--r--gold/readsyms.cc313
-rw-r--r--gold/readsyms.h194
-rw-r--r--gold/reloc-types.h36
-rw-r--r--gold/reloc.cc738
-rw-r--r--gold/reloc.h409
-rw-r--r--gold/resolve.cc560
-rw-r--r--gold/script-c.h53
-rw-r--r--gold/script.cc1193
-rw-r--r--gold/script.h39
-rw-r--r--gold/stringpool.cc386
-rw-r--r--gold/stringpool.h167
-rw-r--r--gold/strtab.h73
-rw-r--r--gold/symtab.cc1567
-rw-r--r--gold/symtab.h1050
-rw-r--r--gold/target-reloc.h193
-rw-r--r--gold/target-select.cc52
-rw-r--r--gold/target-select.h69
-rw-r--r--gold/target.h210
-rw-r--r--gold/testsuite/Makefile.am22
-rw-r--r--gold/testsuite/Makefile.in521
-rw-r--r--gold/testsuite/object_unittest.cc41
-rw-r--r--gold/testsuite/test.cc78
-rw-r--r--gold/testsuite/test.h121
-rw-r--r--gold/testsuite/testfile.cc261
-rw-r--r--gold/testsuite/testfile.h20
-rw-r--r--gold/testsuite/testmain.cc18
-rw-r--r--gold/workqueue.cc404
-rw-r--r--gold/workqueue.h419
-rw-r--r--gold/yyscript.y168
-rw-r--r--gprof/ChangeLog242
-rw-r--r--gprof/Makefile.am212
-rw-r--r--gprof/Makefile.in312
-rw-r--r--gprof/acinclude.m415
-rw-r--r--gprof/aclocal.m437
-rw-r--r--gprof/alpha.c14
-rw-r--r--gprof/bsd_callg_bl.c120
-rw-r--r--gprof/config.texi1
-rwxr-xr-xgprof/configure9866
-rw-r--r--gprof/configure.in7
-rw-r--r--gprof/corefile.c53
-rw-r--r--gprof/flat_bl.c39
-rw-r--r--gprof/fsf_callg_bl.c95
-rw-r--r--gprof/gconfig.in113
-rw-r--r--gprof/gmon_io.c60
-rw-r--r--gprof/gprof.1742
-rw-r--r--gprof/gprof.c15
-rw-r--r--gprof/gprof.h3
-rw-r--r--gprof/gprof.info2313
-rw-r--r--gprof/gprof.texi500
-rw-r--r--gprof/hist.c370
-rw-r--r--gprof/hist.h29
-rw-r--r--gprof/i386.c14
-rw-r--r--gprof/mips.c17
-rw-r--r--gprof/po/Make-in3
-rw-r--r--gprof/po/da.gmobin9586 -> 0 bytes
-rw-r--r--gprof/po/de.gmobin9762 -> 0 bytes
-rw-r--r--gprof/po/es.gmobin10062 -> 0 bytes
-rw-r--r--gprof/po/fr.gmobin10062 -> 0 bytes
-rw-r--r--gprof/po/ga.gmobin9819 -> 0 bytes
-rw-r--r--gprof/po/gprof.pot128
-rw-r--r--gprof/po/id.gmobin9735 -> 0 bytes
-rw-r--r--gprof/po/ms.po561
-rw-r--r--gprof/po/pt_BR.gmobin9984 -> 0 bytes
-rw-r--r--gprof/po/rw.gmobin486 -> 0 bytes
-rw-r--r--gprof/po/sv.gmobin9586 -> 0 bytes
-rw-r--r--gprof/po/tr.gmobin11331 -> 0 bytes
-rw-r--r--gprof/po/vi.gmobin10914 -> 0 bytes
-rw-r--r--gprof/sparc.c14
-rw-r--r--gprof/sym_ids.c20
-rw-r--r--gprof/tahoe.c14
-rw-r--r--gprof/utils.c18
-rw-r--r--gprof/vax.c14
-rw-r--r--include/ChangeLog148
-rw-r--r--include/ansidecl.h22
-rw-r--r--include/bfdlink.h61
-rw-r--r--include/bin-bugs.h3
-rw-r--r--include/coff/ChangeLog38
-rw-r--r--include/coff/external.h24
-rw-r--r--include/coff/internal.h59
-rw-r--r--include/coff/pe.h16
-rw-r--r--include/coff/rs6000.h6
-rw-r--r--include/coff/x86_64.h54
-rw-r--r--include/demangle.h78
-rw-r--r--include/dis-asm.h94
-rw-r--r--include/elf/ChangeLog166
-rw-r--r--include/elf/arm.h38
-rw-r--r--include/elf/avr.h5
-rw-r--r--include/elf/common.h16
-rw-r--r--include/elf/cr16.h56
-rw-r--r--include/elf/dwarf2.h1
-rw-r--r--include/elf/external.h6
-rw-r--r--include/elf/hppa.h50
-rw-r--r--include/elf/internal.h58
-rw-r--r--include/elf/m68k.h32
-rw-r--r--include/elf/mep.h84
-rw-r--r--include/elf/mips.h14
-rw-r--r--include/elf/ppc.h11
-rw-r--r--include/elf/reloc-macros.h2
-rw-r--r--include/elf/score.h123
-rw-r--r--include/elf/spu.h60
-rw-r--r--include/elf/v850.h9
-rw-r--r--include/elf/xtensa.h4
-rw-r--r--include/filenames.h7
-rw-r--r--include/gdb/ChangeLog4
-rw-r--r--include/gdb/callback.h2
-rw-r--r--include/gdb/fileio.h2
-rw-r--r--include/gdb/remote-sim.h4
-rw-r--r--include/gdb/signals.h5
-rw-r--r--include/gdb/sim-arm.h2
-rw-r--r--include/gdb/sim-d10v.h2
-rw-r--r--include/gdb/sim-frv.h2
-rw-r--r--include/gdb/sim-h8300.h2
-rw-r--r--include/gdb/sim-m32c.h2
-rw-r--r--include/gdb/sim-ppc.h2
-rw-r--r--include/gdb/sim-sh.h2
-rw-r--r--include/libiberty.h74
-rw-r--r--include/opcode/ChangeLog183
-rw-r--r--include/opcode/arm.h13
-rw-r--r--include/opcode/cr16.h437
-rw-r--r--include/opcode/i386.h1680
-rw-r--r--include/opcode/m68k.h36
-rw-r--r--include/opcode/mips.h57
-rw-r--r--include/opcode/ppc.h72
-rw-r--r--include/opcode/s390.h3
-rw-r--r--include/opcode/score-datadep.h282
-rw-r--r--include/opcode/score-inst.h507
-rw-r--r--include/opcode/spu-insns.h417
-rw-r--r--include/opcode/spu.h126
-rw-r--r--include/xtensa-config.h11
-rw-r--r--include/xtensa-isa.h9
-rw-r--r--intl/ChangeLog1220
-rw-r--r--intl/Makefile.in336
-rw-r--r--intl/README21
-rw-r--r--intl/VERSION1
-rw-r--r--intl/acconfig.h14
-rw-r--r--intl/aclocal.m4418
-rw-r--r--intl/bindtextdom.c343
-rw-r--r--intl/cat-compat.c262
-rw-r--r--intl/config.h.in245
-rw-r--r--intl/config.in128
-rw-r--r--intl/config.intl.in12
-rwxr-xr-xintl/configure9671
-rw-r--r--intl/configure.ac51
-rw-r--r--intl/configure.in10
-rw-r--r--intl/dcgettext.c597
-rw-r--r--intl/dcigettext.c1238
-rw-r--r--intl/dcngettext.c60
-rw-r--r--intl/dgettext.c35
-rw-r--r--intl/dngettext.c62
-rw-r--r--intl/eval-plural.h114
-rw-r--r--intl/explodename.c46
-rw-r--r--intl/finddomain.c73
-rw-r--r--intl/gettext.c40
-rw-r--r--intl/gettext.h105
-rw-r--r--intl/gettextP.h175
-rw-r--r--intl/gmo.h148
-rw-r--r--intl/hash-string.h30
-rw-r--r--intl/intl-compat.c123
-rw-r--r--intl/intlh.inst.in111
-rw-r--r--intl/l10nflist.c196
-rw-r--r--intl/libgettext.h182
-rw-r--r--intl/libgnuintl.h309
-rw-r--r--intl/libintl.glibc120
-rw-r--r--intl/linux-msg.sed100
-rw-r--r--intl/loadinfo.h104
-rw-r--r--intl/loadmsgcat.c1196
-rw-r--r--intl/localcharset.c398
-rw-r--r--intl/localcharset.h42
-rw-r--r--intl/locale.alias78
-rw-r--r--intl/localealias.c271
-rw-r--r--intl/localename.c772
-rw-r--r--intl/log.c104
-rw-r--r--intl/ngettext.c68
-rw-r--r--intl/osdep.c24
-rw-r--r--intl/plural-exp.c156
-rw-r--r--intl/plural-exp.h126
-rw-r--r--intl/plural.c1518
-rw-r--r--intl/plural.y409
-rw-r--r--intl/po2tbl.sed.in102
-rw-r--r--intl/relocatable.c439
-rw-r--r--intl/relocatable.h67
-rw-r--r--intl/textdomain.c104
-rw-r--r--intl/xopen-msg.sed104
-rw-r--r--ld/ChangeLog848
-rw-r--r--ld/ChangeLog-20061364
-rw-r--r--ld/Makefile.am832
-rw-r--r--ld/Makefile.in916
-rw-r--r--ld/NEWS36
-rw-r--r--ld/acinclude.m41
-rw-r--r--ld/aclocal.m434
-rw-r--r--ld/config.in112
-rw-r--r--ld/configdoc.texi22
-rwxr-xr-xld/configure10547
-rw-r--r--ld/configure.host6
-rw-r--r--ld/configure.in46
-rw-r--r--ld/configure.tgt112
-rw-r--r--ld/deffilep.y5
-rw-r--r--ld/emulparams/arcelf.sh5
-rw-r--r--ld/emulparams/arm_wince_pe.sh14
-rw-r--r--ld/emulparams/armelf.sh8
-rw-r--r--ld/emulparams/armelf_linux.sh6
-rw-r--r--ld/emulparams/armelf_nbsd.sh2
-rw-r--r--ld/emulparams/armelf_vxworks.sh2
-rw-r--r--ld/emulparams/armnto.sh4
-rw-r--r--ld/emulparams/armsymbian.sh5
-rw-r--r--ld/emulparams/avr1.sh3
-rw-r--r--ld/emulparams/avr2.sh3
-rw-r--r--ld/emulparams/avr3.sh3
-rw-r--r--ld/emulparams/avr4.sh3
-rw-r--r--ld/emulparams/avr5.sh3
-rw-r--r--ld/emulparams/avr6.sh11
-rwxr-xr-xld/emulparams/bfin.sh5
-rw-r--r--ld/emulparams/criself.sh7
-rw-r--r--ld/emulparams/crislinux.sh2
-rw-r--r--ld/emulparams/d30v_e.sh2
-rw-r--r--ld/emulparams/d30v_o.sh2
-rw-r--r--ld/emulparams/d30velf.sh2
-rw-r--r--ld/emulparams/elf32_dlx.sh1
-rw-r--r--ld/emulparams/elf32_i860.sh4
-rw-r--r--ld/emulparams/elf32_i960.sh2
-rw-r--r--ld/emulparams/elf32_sparc.sh7
-rw-r--r--ld/emulparams/elf32_spu.sh20
-rw-r--r--ld/emulparams/elf32am33lin.sh2
-rw-r--r--ld/emulparams/elf32bfinfd.sh2
-rw-r--r--ld/emulparams/elf32bmip.sh19
-rw-r--r--ld/emulparams/elf32bmipn32-defs.sh17
-rwxr-xr-xld/emulparams/elf32bmipn32.sh2
-rw-r--r--ld/emulparams/elf32btsmipn32.sh2
-rw-r--r--ld/emulparams/elf32cr16.sh6
-rw-r--r--ld/emulparams/elf32ebmipvxworks.sh9
-rwxr-xr-xld/emulparams/elf32fr30.sh2
-rwxr-xr-xld/emulparams/elf32frv.sh2
-rw-r--r--ld/emulparams/elf32frvfd.sh3
-rw-r--r--ld/emulparams/elf32i370.sh2
-rwxr-xr-xld/emulparams/elf32iq10.sh2
-rwxr-xr-xld/emulparams/elf32iq2000.sh2
-rw-r--r--ld/emulparams/elf32lppcnto.sh2
-rw-r--r--ld/emulparams/elf32mcore.sh2
-rwxr-xr-xld/emulparams/elf32mep.sh55
-rw-r--r--ld/emulparams/elf32mt.sh2
-rwxr-xr-xld/emulparams/elf32openrisc.sh2
-rw-r--r--ld/emulparams/elf32ppc.sh3
-rw-r--r--ld/emulparams/elf32ppccommon.sh4
-rw-r--r--ld/emulparams/elf32ppcnto.sh2
-rw-r--r--ld/emulparams/elf32ppcwindiss.sh2
-rw-r--r--ld/emulparams/elf32vax.sh2
-rw-r--r--ld/emulparams/elf32xc16x.sh2
-rw-r--r--ld/emulparams/elf32xc16xl.sh2
-rw-r--r--ld/emulparams/elf32xc16xs.sh2
-rw-r--r--ld/emulparams/elf32xtensa.sh28
-rw-r--r--ld/emulparams/elf64_aix.sh2
-rw-r--r--ld/emulparams/elf64_ia64.sh4
-rw-r--r--ld/emulparams/elf64_s390.sh4
-rw-r--r--ld/emulparams/elf64_sparc.sh4
-rw-r--r--ld/emulparams/elf64_sparc_fbsd.sh2
-rw-r--r--ld/emulparams/elf64alpha.sh4
-rw-r--r--ld/emulparams/elf64bmip-defs.sh3
-rwxr-xr-xld/emulparams/elf64bmip.sh2
-rw-r--r--ld/emulparams/elf64btsmip.sh2
-rwxr-xr-xld/emulparams/elf64hppa.sh2
-rw-r--r--ld/emulparams/elf64mmix.sh6
-rw-r--r--ld/emulparams/elf64ppc.sh7
-rw-r--r--ld/emulparams/elf_i386.sh4
-rw-r--r--ld/emulparams/elf_i386_be.sh2
-rw-r--r--ld/emulparams/elf_i386_chaos.sh2
-rw-r--r--ld/emulparams/elf_i386_ldso.sh2
-rw-r--r--ld/emulparams/elf_i386_vxworks.sh4
-rw-r--r--ld/emulparams/elf_s390.sh4
-rw-r--r--ld/emulparams/elf_x86_64.sh12
-rw-r--r--ld/emulparams/elf_x86_64_fbsd.sh1
-rw-r--r--ld/emulparams/h8300.sh2
-rw-r--r--ld/emulparams/h8300elf.sh6
-rw-r--r--ld/emulparams/h8300sxelf.sh2
-rw-r--r--ld/emulparams/hppa64linux.sh4
-rw-r--r--ld/emulparams/hppalinux.sh2
-rw-r--r--ld/emulparams/hppaobsd.sh2
-rw-r--r--ld/emulparams/i386lynx.sh2
-rw-r--r--ld/emulparams/i386moss.sh2
-rw-r--r--ld/emulparams/i386nto.sh2
-rw-r--r--ld/emulparams/i386nw.sh2
-rw-r--r--ld/emulparams/i386pep.sh9
-rw-r--r--ld/emulparams/m32relf_linux.sh2
-rw-r--r--ld/emulparams/m68kelf.sh2
-rw-r--r--ld/emulparams/m68kpsos.sh2
-rw-r--r--ld/emulparams/mn10200.sh2
-rw-r--r--ld/emulparams/mn10300.sh1
-rw-r--r--ld/emulparams/msp430all.sh465
-rw-r--r--ld/emulparams/or32.sh1
-rw-r--r--ld/emulparams/or32elf.sh4
-rw-r--r--ld/emulparams/pjelf.sh4
-rw-r--r--ld/emulparams/pjlelf.sh5
-rw-r--r--ld/emulparams/ppclynx.sh2
-rw-r--r--ld/emulparams/ppcnw.sh2
-rw-r--r--ld/emulparams/scoreelf.sh31
-rw-r--r--ld/emulparams/shelf32.sh2
-rw-r--r--ld/emulparams/shelf32_nbsd.sh2
-rw-r--r--ld/emulparams/shelf64.sh2
-rw-r--r--ld/emulparams/shelf_nbsd.sh2
-rw-r--r--ld/emulparams/shelf_nto.sh2
-rw-r--r--ld/emulparams/shelf_uclinux.sh4
-rw-r--r--ld/emulparams/shelf_vxworks.sh19
-rw-r--r--ld/emulparams/shlelf32_linux.sh4
-rw-r--r--ld/emulparams/shlelf_linux.sh4
-rw-r--r--ld/emulparams/shlelf_nto.sh2
-rw-r--r--ld/emulparams/shlelf_vxworks.sh2
-rw-r--r--ld/emulparams/vxworks.sh12
-rw-r--r--ld/emulparams/xtensa-config.sh3
-rw-r--r--ld/emultempl/aix.em60
-rw-r--r--ld/emultempl/armcoff.em79
-rw-r--r--ld/emultempl/armelf.em95
-rw-r--r--ld/emultempl/avrelf.em269
-rw-r--r--ld/emultempl/beos.em21
-rw-r--r--ld/emultempl/cr16elf.em92
-rw-r--r--ld/emultempl/elf-generic.em81
-rw-r--r--ld/emultempl/elf32.em190
-rw-r--r--ld/emultempl/genelf.em39
-rw-r--r--ld/emultempl/generic.em6
-rw-r--r--ld/emultempl/gld960.em4
-rw-r--r--ld/emultempl/gld960c.em4
-rw-r--r--ld/emultempl/hppaelf.em13
-rw-r--r--ld/emultempl/irix.em1
-rw-r--r--ld/emultempl/linux.em4
-rw-r--r--ld/emultempl/lnk960.em6
-rw-r--r--ld/emultempl/m68kcoff.em5
-rw-r--r--ld/emultempl/mipself.em37
-rw-r--r--ld/emultempl/mmixelf.em1
-rw-r--r--ld/emultempl/mmo.em21
-rw-r--r--ld/emultempl/pe.em321
-rw-r--r--ld/emultempl/pep.em1706
-rw-r--r--ld/emultempl/ppc32elf.em40
-rw-r--r--ld/emultempl/ppc64elf.em50
-rw-r--r--ld/emultempl/scoreelf.em74
-rw-r--r--ld/emultempl/spu_ovl.S294
-rw-r--r--ld/emultempl/spu_ovl.obin0 -> 1432 bytes
-rw-r--r--ld/emultempl/spuelf.em504
-rw-r--r--ld/emultempl/sunos.em16
-rw-r--r--ld/emultempl/ticoff.em5
-rw-r--r--ld/emultempl/vanilla.em5
-rw-r--r--ld/emultempl/vxworks.em34
-rw-r--r--ld/emultempl/xtensaelf.em253
-rw-r--r--ld/gen-doc.texi7
-rwxr-xr-xld/genscripts.sh8
-rw-r--r--ld/ld.12071
-rw-r--r--ld/ld.h106
-rw-r--r--ld/ld.info6691
-rw-r--r--ld/ld.texinfo538
-rw-r--r--ld/ldcref.c23
-rw-r--r--ld/ldctor.c6
-rw-r--r--ld/ldemul.c5
-rw-r--r--ld/ldexp.c81
-rw-r--r--ld/ldexp.h1
-rw-r--r--ld/ldfile.c16
-rw-r--r--ld/ldgram.c4163
-rw-r--r--ld/ldgram.h307
-rw-r--r--ld/ldgram.y81
-rw-r--r--ld/ldint.texinfo46
-rw-r--r--ld/ldlang.c876
-rw-r--r--ld/ldlang.h38
-rw-r--r--ld/ldlex.c3833
-rw-r--r--ld/ldlex.h1
-rw-r--r--ld/ldlex.l25
-rw-r--r--ld/ldmain.c128
-rw-r--r--ld/ldmisc.c78
-rw-r--r--ld/ldmisc.h3
-rw-r--r--ld/ldver.c9
-rw-r--r--ld/ldver.texi1
-rw-r--r--ld/ldwrite.c8
-rw-r--r--ld/lexsup.c121
-rw-r--r--ld/mri.c4
-rw-r--r--ld/pe-dll.c515
-rw-r--r--ld/pe-dll.h8
-rw-r--r--ld/pep-dll.c58
-rw-r--r--ld/pep-dll.h54
-rw-r--r--ld/po/Make-in3
-rw-r--r--ld/po/POTFILES.in2
-rw-r--r--ld/po/da.gmobin40607 -> 0 bytes
-rw-r--r--ld/po/es.gmobin48316 -> 0 bytes
-rw-r--r--ld/po/fr.gmobin49474 -> 0 bytes
-rw-r--r--ld/po/ga.po1915
-rw-r--r--ld/po/ld.pot787
-rw-r--r--ld/po/sv.gmobin43131 -> 0 bytes
-rw-r--r--ld/po/tr.gmobin41339 -> 0 bytes
-rw-r--r--ld/po/vi.gmobin53249 -> 0 bytes
-rw-r--r--ld/po/zh_CN.gmobin24796 -> 0 bytes
-rw-r--r--ld/po/zh_TW.po1913
-rw-r--r--ld/scripttempl/armbpabi.sc10
-rw-r--r--ld/scripttempl/avr.sc36
-rw-r--r--ld/scripttempl/crisaout.sc10
-rw-r--r--ld/scripttempl/elf.sc52
-rw-r--r--ld/scripttempl/elf32cr16.sc175
-rw-r--r--ld/scripttempl/elf32crx.sc12
-rw-r--r--ld/scripttempl/elf32sh-symbian.sc13
-rw-r--r--ld/scripttempl/elf_chaos.sc13
-rw-r--r--ld/scripttempl/elfd10v.sc10
-rw-r--r--ld/scripttempl/elfd30v.sc10
-rw-r--r--ld/scripttempl/elfi370.sc3
-rw-r--r--ld/scripttempl/elfxtensa.sc127
-rw-r--r--ld/scripttempl/iq2000.sc10
-rw-r--r--ld/scripttempl/mep.sc446
-rw-r--r--ld/scripttempl/mmo.sc10
-rw-r--r--ld/scripttempl/pep.sc272
-rw-r--r--ld/scripttempl/xstormy16.sc10
-rw-r--r--ld/testsuite/ChangeLog817
-rw-r--r--ld/testsuite/ChangeLog-20061285
-rw-r--r--ld/testsuite/ld-alpha/tlsbin.rd5
-rw-r--r--ld/testsuite/ld-alpha/tlsbinr.rd5
-rw-r--r--ld/testsuite/ld-alpha/tlspic.rd11
-rw-r--r--ld/testsuite/ld-arm/arm-app-abs32.d8
-rw-r--r--ld/testsuite/ld-arm/arm-app.d10
-rw-r--r--ld/testsuite/ld-arm/arm-be8.d8
-rw-r--r--ld/testsuite/ld-arm/arm-be8.s14
-rw-r--r--ld/testsuite/ld-arm/arm-call.d18
-rw-r--r--ld/testsuite/ld-arm/arm-dyn.ld5
-rw-r--r--ld/testsuite/ld-arm/arm-elf.exp76
-rw-r--r--ld/testsuite/ld-arm/arm-lib-plt32.d6
-rw-r--r--ld/testsuite/ld-arm/arm-lib.d6
-rw-r--r--ld/testsuite/ld-arm/arm-lib.ld5
-rw-r--r--ld/testsuite/ld-arm/arm-movwt.d39
-rw-r--r--ld/testsuite/ld-arm/arm-movwt.s44
-rw-r--r--ld/testsuite/ld-arm/arm-pic-veneer.d17
-rw-r--r--ld/testsuite/ld-arm/arm-pic-veneer.s14
-rw-r--r--ld/testsuite/ld-arm/arm-static-app.d8
-rw-r--r--ld/testsuite/ld-arm/arm.ld2
-rw-r--r--ld/testsuite/ld-arm/armthumb-lib.d44
-rw-r--r--ld/testsuite/ld-arm/armthumb-lib.sym17
-rw-r--r--ld/testsuite/ld-arm/attr-merge.attr12
-rw-r--r--ld/testsuite/ld-arm/attr-merge.s11
-rw-r--r--ld/testsuite/ld-arm/emit-relocs1-vxworks.d12
-rw-r--r--ld/testsuite/ld-arm/emit-relocs1.d12
-rw-r--r--ld/testsuite/ld-arm/emit-relocs1.s6
-rw-r--r--ld/testsuite/ld-arm/gc-unwind.d5
-rw-r--r--ld/testsuite/ld-arm/gc-unwind.s38
-rw-r--r--ld/testsuite/ld-arm/group-relocs-alu-bad.d4
-rw-r--r--ld/testsuite/ld-arm/group-relocs-alu-bad.s20
-rw-r--r--ld/testsuite/ld-arm/group-relocs-ldc-bad.d4
-rw-r--r--ld/testsuite/ld-arm/group-relocs-ldc-bad.s19
-rw-r--r--ld/testsuite/ld-arm/group-relocs-ldr-bad.d4
-rw-r--r--ld/testsuite/ld-arm/group-relocs-ldr-bad.s18
-rw-r--r--ld/testsuite/ld-arm/group-relocs-ldrs-bad.d4
-rw-r--r--ld/testsuite/ld-arm/group-relocs-ldrs-bad.s17
-rw-r--r--ld/testsuite/ld-arm/group-relocs.d69
-rw-r--r--ld/testsuite/ld-arm/group-relocs.s156
-rw-r--r--ld/testsuite/ld-arm/jump19.d12
-rw-r--r--ld/testsuite/ld-arm/jump19.s12
-rw-r--r--ld/testsuite/ld-arm/mixed-app-v5.d12
-rw-r--r--ld/testsuite/ld-arm/mixed-app.d17
-rw-r--r--ld/testsuite/ld-arm/mixed-app.sym1
-rw-r--r--ld/testsuite/ld-arm/mixed-lib.d10
-rw-r--r--ld/testsuite/ld-arm/mixed-lib.sym19
-rw-r--r--ld/testsuite/ld-arm/preempt-app.s27
-rw-r--r--ld/testsuite/ld-arm/preempt-app.sym16
-rw-r--r--ld/testsuite/ld-arm/thumb1-bl.d11
-rw-r--r--ld/testsuite/ld-arm/thumb1-bl.s22
-rw-r--r--ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.d4
-rw-r--r--ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.s22
-rw-r--r--ld/testsuite/ld-arm/thumb2-bl-bad.d4
-rw-r--r--ld/testsuite/ld-arm/thumb2-bl-bad.s22
-rw-r--r--ld/testsuite/ld-arm/thumb2-bl.d11
-rw-r--r--ld/testsuite/ld-arm/thumb2-bl.s23
-rw-r--r--ld/testsuite/ld-arm/tls-app.d22
-rw-r--r--ld/testsuite/ld-arm/tls-lib.d6
-rw-r--r--ld/testsuite/ld-arm/use-thumb-lib.s25
-rw-r--r--ld/testsuite/ld-arm/use-thumb-lib.sym4
-rw-r--r--ld/testsuite/ld-arm/vfp11-fix-none.d9
-rw-r--r--ld/testsuite/ld-arm/vfp11-fix-none.s7
-rw-r--r--ld/testsuite/ld-arm/vfp11-fix-scalar.d15
-rw-r--r--ld/testsuite/ld-arm/vfp11-fix-scalar.s7
-rw-r--r--ld/testsuite/ld-arm/vfp11-fix-vector.d16
-rw-r--r--ld/testsuite/ld-arm/vfp11-fix-vector.s8
-rw-r--r--ld/testsuite/ld-arm/vxworks1-lib.dd32
-rw-r--r--ld/testsuite/ld-arm/vxworks1-lib.rd4
-rw-r--r--ld/testsuite/ld-arm/vxworks1-lib.td3
-rw-r--r--ld/testsuite/ld-arm/vxworks1.dd30
-rw-r--r--ld/testsuite/ld-arm/vxworks1.ld4
-rw-r--r--ld/testsuite/ld-bootstrap/bootstrap.exp4
-rw-r--r--ld/testsuite/ld-cris/hiddef1.d2
-rw-r--r--ld/testsuite/ld-cris/ldsym1.d2
-rw-r--r--ld/testsuite/ld-cris/libdso-12.d52
-rw-r--r--ld/testsuite/ld-cris/libdso-2.d25
-rw-r--r--ld/testsuite/ld-cris/v32-ba-1.d2
-rw-r--r--ld/testsuite/ld-discard/zero-rel.d8
-rw-r--r--ld/testsuite/ld-discard/zero-rel.s11
-rw-r--r--ld/testsuite/ld-elf/begin.c5
-rw-r--r--ld/testsuite/ld-elf/beginwarn.c9
-rw-r--r--ld/testsuite/ld-elf/binutils.exp124
-rw-r--r--ld/testsuite/ld-elf/commonpage1.d9
-rw-r--r--ld/testsuite/ld-elf/data1.c6
-rw-r--r--ld/testsuite/ld-elf/data1.h9
-rw-r--r--ld/testsuite/ld-elf/del.cc29
-rw-r--r--ld/testsuite/ld-elf/dl1.c10
-rw-r--r--ld/testsuite/ld-elf/dl1.list6
-rw-r--r--ld/testsuite/ld-elf/dl1.out1
-rw-r--r--ld/testsuite/ld-elf/dl1main.c33
-rw-r--r--ld/testsuite/ld-elf/dl2.c16
-rw-r--r--ld/testsuite/ld-elf/dl2.list3
-rw-r--r--ld/testsuite/ld-elf/dl2a.list3
-rw-r--r--ld/testsuite/ld-elf/dl2a.out3
-rw-r--r--ld/testsuite/ld-elf/dl2b.out3
-rw-r--r--ld/testsuite/ld-elf/dl2main.c22
-rw-r--r--ld/testsuite/ld-elf/dl2xxx.c7
-rw-r--r--ld/testsuite/ld-elf/dl2xxx.list3
-rw-r--r--ld/testsuite/ld-elf/dl3.cc7
-rw-r--r--ld/testsuite/ld-elf/dl3.list6
-rw-r--r--ld/testsuite/ld-elf/dl3a.out1
-rw-r--r--ld/testsuite/ld-elf/dl3b.out1
-rw-r--r--ld/testsuite/ld-elf/dl3header.h5
-rw-r--r--ld/testsuite/ld-elf/dl3main.cc25
-rw-r--r--ld/testsuite/ld-elf/dl4.c24
-rw-r--r--ld/testsuite/ld-elf/dl4.list4
-rw-r--r--ld/testsuite/ld-elf/dl4a.out6
-rw-r--r--ld/testsuite/ld-elf/dl4b.out6
-rw-r--r--ld/testsuite/ld-elf/dl4main.c34
-rw-r--r--ld/testsuite/ld-elf/dl4xxx.c13
-rw-r--r--ld/testsuite/ld-elf/dl4xxx.list4
-rw-r--r--ld/testsuite/ld-elf/dl5.cc61
-rw-r--r--ld/testsuite/ld-elf/dl5.out1
-rw-r--r--ld/testsuite/ld-elf/dl6.c14
-rw-r--r--ld/testsuite/ld-elf/dl6a.out1
-rw-r--r--ld/testsuite/ld-elf/dl6amain.c33
-rw-r--r--ld/testsuite/ld-elf/dl6b.out1
-rw-r--r--ld/testsuite/ld-elf/dl6bmain.c33
-rw-r--r--ld/testsuite/ld-elf/dl6cmain.c33
-rw-r--r--ld/testsuite/ld-elf/dl6dmain.c33
-rw-r--r--ld/testsuite/ld-elf/dummy.c1
-rw-r--r--ld/testsuite/ld-elf/dwarf.exp111
-rw-r--r--ld/testsuite/ld-elf/dwarf1.c10
-rw-r--r--ld/testsuite/ld-elf/dwarf1.h6
-rw-r--r--ld/testsuite/ld-elf/dwarf1.out1
-rw-r--r--ld/testsuite/ld-elf/dwarf1main.c10
-rw-r--r--ld/testsuite/ld-elf/dynbss1.c20
-rw-r--r--ld/testsuite/ld-elf/eh-frame-hdr.d17
-rw-r--r--ld/testsuite/ld-elf/eh-frame-hdr.s6
-rw-r--r--ld/testsuite/ld-elf/eh1.d6
-rw-r--r--ld/testsuite/ld-elf/eh2.d6
-rw-r--r--ld/testsuite/ld-elf/eh3.d6
-rw-r--r--ld/testsuite/ld-elf/eh4.d32
-rw-r--r--ld/testsuite/ld-elf/eh4.s92
-rw-r--r--ld/testsuite/ld-elf/eh4a.s3
-rw-r--r--ld/testsuite/ld-elf/eh5.d161
-rw-r--r--ld/testsuite/ld-elf/eh5.s29
-rw-r--r--ld/testsuite/ld-elf/eh5a.s27
-rw-r--r--ld/testsuite/ld-elf/eh5b.s29
-rw-r--r--ld/testsuite/ld-elf/elf.exp6
-rw-r--r--ld/testsuite/ld-elf/end.c7
-rw-r--r--ld/testsuite/ld-elf/endhidden.c8
-rw-r--r--ld/testsuite/ld-elf/endprotected.c8
-rw-r--r--ld/testsuite/ld-elf/expr1.d2
-rw-r--r--ld/testsuite/ld-elf/expr1.s4
-rw-r--r--ld/testsuite/ld-elf/expr1.t6
-rw-r--r--ld/testsuite/ld-elf/extract-symbol-1.ld18
-rw-r--r--ld/testsuite/ld-elf/extract-symbol-1.s15
-rw-r--r--ld/testsuite/ld-elf/extract-symbol-1sec.d13
-rw-r--r--ld/testsuite/ld-elf/extract-symbol-1sym.d11
-rw-r--r--ld/testsuite/ld-elf/foo.c11
-rw-r--r--ld/testsuite/ld-elf/foo.map4
-rw-r--r--ld/testsuite/ld-elf/group.ld3
-rw-r--r--ld/testsuite/ld-elf/group3a.d8
-rw-r--r--ld/testsuite/ld-elf/group3a.s5
-rw-r--r--ld/testsuite/ld-elf/group3b.d8
-rw-r--r--ld/testsuite/ld-elf/group3b.s6
-rw-r--r--ld/testsuite/ld-elf/hash.d9
-rw-r--r--ld/testsuite/ld-elf/header.d5
-rw-r--r--ld/testsuite/ld-elf/header.s8
-rw-r--r--ld/testsuite/ld-elf/header.t8
-rw-r--r--ld/testsuite/ld-elf/hidden.out3
-rw-r--r--ld/testsuite/ld-elf/linkonce1.d12
-rw-r--r--ld/testsuite/ld-elf/linkonce1a.s3
-rw-r--r--ld/testsuite/ld-elf/linkonce1b.s17
-rw-r--r--ld/testsuite/ld-elf/linkonce2.d12
-rw-r--r--ld/testsuite/ld-elf/loadaddr.s20
-rw-r--r--ld/testsuite/ld-elf/loadaddr1.d10
-rw-r--r--ld/testsuite/ld-elf/loadaddr1.t13
-rw-r--r--ld/testsuite/ld-elf/loadaddr2.d10
-rw-r--r--ld/testsuite/ld-elf/loadaddr2.t13
-rw-r--r--ld/testsuite/ld-elf/loadaddr3.t16
-rw-r--r--ld/testsuite/ld-elf/loadaddr3a.d9
-rw-r--r--ld/testsuite/ld-elf/loadaddr3b.d13
-rw-r--r--ld/testsuite/ld-elf/main.c8
-rw-r--r--ld/testsuite/ld-elf/maxpage1.d9
-rw-r--r--ld/testsuite/ld-elf/maxpage1.s13
-rw-r--r--ld/testsuite/ld-elf/maxpage2.d9
-rw-r--r--ld/testsuite/ld-elf/maxpage3.t7
-rw-r--r--ld/testsuite/ld-elf/maxpage3a.d11
-rw-r--r--ld/testsuite/ld-elf/maxpage3b.d10
-rw-r--r--ld/testsuite/ld-elf/maxpage3c.d12
-rw-r--r--ld/testsuite/ld-elf/merge.d2
-rw-r--r--ld/testsuite/ld-elf/multibss1.d9
-rw-r--r--ld/testsuite/ld-elf/multibss1.s11
-rw-r--r--ld/testsuite/ld-elf/new.cc48
-rw-r--r--ld/testsuite/ld-elf/nobits-1.d7
-rw-r--r--ld/testsuite/ld-elf/nobits-1.s6
-rw-r--r--ld/testsuite/ld-elf/nobits-1.t13
-rw-r--r--ld/testsuite/ld-elf/noload-1.d7
-rw-r--r--ld/testsuite/ld-elf/noload-1.s2
-rw-r--r--ld/testsuite/ld-elf/noload-1.t8
-rw-r--r--ld/testsuite/ld-elf/noload-2.d8
-rw-r--r--ld/testsuite/ld-elf/normal.out3
-rw-r--r--ld/testsuite/ld-elf/note-1.d8
-rw-r--r--ld/testsuite/ld-elf/note-1.s6
-rw-r--r--ld/testsuite/ld-elf/note-1.t14
-rw-r--r--ld/testsuite/ld-elf/orphan.d1
-rw-r--r--ld/testsuite/ld-elf/orphan2.d1
-rw-r--r--ld/testsuite/ld-elf/overlay.d12
-rw-r--r--ld/testsuite/ld-elf/overlay.s6
-rw-r--r--ld/testsuite/ld-elf/overlay.t10
-rw-r--r--ld/testsuite/ld-elf/pass.out1
-rw-r--r--ld/testsuite/ld-elf/sec64k.exp92
-rw-r--r--ld/testsuite/ld-elf/shared.exp283
-rw-r--r--ld/testsuite/ld-elf/stab.d11
-rw-r--r--ld/testsuite/ld-elf/start.s6
-rw-r--r--ld/testsuite/ld-elf/symbol1ref.s2
-rw-r--r--ld/testsuite/ld-elf/symbol2ref.s3
-rw-r--r--ld/testsuite/ld-elf/symbol2w.s6
-rw-r--r--ld/testsuite/ld-elf/tbss1.s24
-rw-r--r--ld/testsuite/ld-elf/tbss2.s16
-rw-r--r--ld/testsuite/ld-elf/tdata1.s24
-rw-r--r--ld/testsuite/ld-elf/tdata2.s16
-rw-r--r--ld/testsuite/ld-elf/tls_common.exp70
-rw-r--r--ld/testsuite/ld-elf/tls_common.s11
-rw-r--r--ld/testsuite/ld-elf/warn.out3
-rw-r--r--ld/testsuite/ld-elf/warn2.d15
-rw-r--r--ld/testsuite/ld-elf/wrap.exp54
-rw-r--r--ld/testsuite/ld-elf/wrap1.c8
-rw-r--r--ld/testsuite/ld-elf/wrap1.out3
-rw-r--r--ld/testsuite/ld-elf/wrap1a.c6
-rw-r--r--ld/testsuite/ld-elf/wrap1b.c16
-rw-r--r--ld/testsuite/ld-elfcomm/elfcomm.exp30
-rw-r--r--ld/testsuite/ld-elfvers/vers.exp45
-rw-r--r--ld/testsuite/ld-elfvers/vers1.ver8
-rw-r--r--ld/testsuite/ld-elfvers/vers15.ver6
-rw-r--r--ld/testsuite/ld-elfvers/vers16a.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers17.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers18.ver8
-rw-r--r--ld/testsuite/ld-elfvers/vers2.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers20.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers20a.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers21.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers22a.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers22b.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers23a.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers23b.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers23c.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers25a.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers26a.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers27a.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers27d.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers28b.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers29.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers30.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers31.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers4a.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers7a.ver4
-rw-r--r--ld/testsuite/ld-elfvers/vers8.ver8
-rw-r--r--ld/testsuite/ld-elfvers/vers9.ver6
-rw-r--r--ld/testsuite/ld-elfvsb/elfvsb.exp8
-rw-r--r--ld/testsuite/ld-elfvsb/sh1.c14
-rw-r--r--ld/testsuite/ld-elfvsb/sh2.c15
-rw-r--r--ld/testsuite/ld-fastcall/fastcall.exp7
-rw-r--r--ld/testsuite/ld-frv/fdpic-shared-6.d16
-rw-r--r--ld/testsuite/ld-frv/tls-dynamic-1.d2
-rw-r--r--ld/testsuite/ld-frv/tls-dynamic-2.d2
-rw-r--r--ld/testsuite/ld-frv/tls-dynamic-3.d2
-rw-r--r--ld/testsuite/ld-frv/tls-initial-shared-2.d2
-rw-r--r--ld/testsuite/ld-frv/tls-pie-1.d2
-rw-r--r--ld/testsuite/ld-frv/tls-pie-3.d2
-rw-r--r--ld/testsuite/ld-frv/tls-relax-dynamic-1.d2
-rw-r--r--ld/testsuite/ld-frv/tls-relax-dynamic-2.d2
-rw-r--r--ld/testsuite/ld-frv/tls-relax-dynamic-3.d2
-rw-r--r--ld/testsuite/ld-frv/tls-relax-initial-shared-2.d2
-rw-r--r--ld/testsuite/ld-frv/tls-relax-pie-1.d2
-rw-r--r--ld/testsuite/ld-frv/tls-relax-pie-3.d2
-rw-r--r--ld/testsuite/ld-frv/tls-relax-shared-1.d2
-rw-r--r--ld/testsuite/ld-frv/tls-relax-shared-2.d2
-rw-r--r--ld/testsuite/ld-frv/tls-relax-shared-3.d2
-rw-r--r--ld/testsuite/ld-frv/tls-relax-static-3.d2
-rw-r--r--ld/testsuite/ld-frv/tls-shared-1.d2
-rw-r--r--ld/testsuite/ld-frv/tls-shared-2.d2
-rw-r--r--ld/testsuite/ld-frv/tls-shared-3.d2
-rw-r--r--ld/testsuite/ld-frv/tls-static-1.d2
-rw-r--r--ld/testsuite/ld-frv/tls-static-3.d2
-rw-r--r--ld/testsuite/ld-i386/alloc.d4
-rw-r--r--ld/testsuite/ld-i386/alloc.s6
-rw-r--r--ld/testsuite/ld-i386/alloc.t13
-rw-r--r--ld/testsuite/ld-i386/combreloc.d1
-rw-r--r--ld/testsuite/ld-i386/i386.exp5
-rw-r--r--ld/testsuite/ld-i386/pcrel16abs.d12
-rw-r--r--ld/testsuite/ld-i386/pcrel16abs.s6
-rw-r--r--ld/testsuite/ld-i386/reloc.d1
-rw-r--r--ld/testsuite/ld-i386/tlsbin.dd34
-rw-r--r--ld/testsuite/ld-i386/tlsbin.rd7
-rw-r--r--ld/testsuite/ld-i386/tlsbindesc.dd55
-rw-r--r--ld/testsuite/ld-i386/tlsbindesc.rd7
-rw-r--r--ld/testsuite/ld-i386/tlsdesc.dd90
-rw-r--r--ld/testsuite/ld-i386/tlsdesc.rd60
-rw-r--r--ld/testsuite/ld-i386/tlsdesc.sd2
-rw-r--r--ld/testsuite/ld-i386/tlsgdesc.dd36
-rw-r--r--ld/testsuite/ld-i386/tlsgdesc.rd30
-rw-r--r--ld/testsuite/ld-i386/tlsnopic.dd2
-rw-r--r--ld/testsuite/ld-i386/tlsnopic.rd9
-rw-r--r--ld/testsuite/ld-i386/tlspic.dd80
-rw-r--r--ld/testsuite/ld-i386/tlspic.rd10
-rw-r--r--ld/testsuite/ld-i386/vxworks1-lib.rd4
-rw-r--r--ld/testsuite/ld-i386/vxworks1-lib.td3
-rw-r--r--ld/testsuite/ld-i386/vxworks1.ld4
-rw-r--r--ld/testsuite/ld-i386/warn1.d4
-rw-r--r--ld/testsuite/ld-i386/warn1.s5
-rw-r--r--ld/testsuite/ld-ia64/merge1.d10
-rw-r--r--ld/testsuite/ld-ia64/merge1.s12
-rw-r--r--ld/testsuite/ld-ia64/merge2.d10
-rw-r--r--ld/testsuite/ld-ia64/merge2.s12
-rw-r--r--ld/testsuite/ld-ia64/merge3.d13
-rw-r--r--ld/testsuite/ld-ia64/merge3.s16
-rw-r--r--ld/testsuite/ld-ia64/merge4.d13
-rw-r--r--ld/testsuite/ld-ia64/merge4.s21
-rw-r--r--ld/testsuite/ld-ia64/merge5.d16
-rw-r--r--ld/testsuite/ld-ia64/merge5.s24
-rw-r--r--ld/testsuite/ld-ia64/tlsbin.dd16
-rw-r--r--ld/testsuite/ld-ia64/tlsbin.rd5
-rw-r--r--ld/testsuite/ld-ia64/tlsbin.sd4
-rw-r--r--ld/testsuite/ld-ia64/tlspic.rd10
-rw-r--r--ld/testsuite/ld-libs/lib-1.s2
-rw-r--r--ld/testsuite/ld-libs/lib-2.d4
-rw-r--r--ld/testsuite/ld-libs/lib-2.s2
-rw-r--r--ld/testsuite/ld-libs/libs.exp9
-rw-r--r--ld/testsuite/ld-linkonce/x.s27
-rw-r--r--ld/testsuite/ld-linkonce/y.s35
-rw-r--r--ld/testsuite/ld-linkonce/zeroeh.ld3
-rw-r--r--ld/testsuite/ld-linkonce/zeroehl32.d7
-rw-r--r--ld/testsuite/ld-m68k/m68k.exp9
-rw-r--r--ld/testsuite/ld-m68k/merge-error-1a.d2
-rw-r--r--ld/testsuite/ld-m68k/merge-error-1b.d2
-rw-r--r--ld/testsuite/ld-m68k/merge-error-1c.d2
-rw-r--r--ld/testsuite/ld-m68k/merge-error-1d.d2
-rw-r--r--ld/testsuite/ld-m68k/merge-error-1e.d2
-rw-r--r--ld/testsuite/ld-m68k/plt1-68020.d35
-rw-r--r--ld/testsuite/ld-m68k/plt1-cpu32.d43
-rw-r--r--ld/testsuite/ld-m68k/plt1-empty.s3
-rw-r--r--ld/testsuite/ld-m68k/plt1-isab.d44
-rw-r--r--ld/testsuite/ld-m68k/plt1-isac.d44
-rw-r--r--ld/testsuite/ld-m68k/plt1.ld23
-rw-r--r--ld/testsuite/ld-m68k/plt1.s3
-rw-r--r--ld/testsuite/ld-mep/mep.exp35
-rw-r--r--ld/testsuite/ld-mep/mep1.ld8
-rw-r--r--ld/testsuite/ld-mep/mep1.s13
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-0.s1
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-00.d7
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-01.d10
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-02.d10
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-03.d10
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-1.s1
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-10.d10
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-11.d10
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-12.d6
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-13.d6
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-14.d6
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-2.s1
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-20.d10
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-21.d6
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-22.d10
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-23.d6
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-3.s1
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-30.d10
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-31.d6
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-32.d6
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-33.d10
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-4.s1
-rw-r--r--ld/testsuite/ld-mips-elf/attr-gnu-4-41.d6
-rw-r--r--ld/testsuite/ld-mips-elf/branch-misc-1.d26
-rw-r--r--ld/testsuite/ld-mips-elf/eh-frame1-n32.d22
-rw-r--r--ld/testsuite/ld-mips-elf/eh-frame1-n64.d22
-rw-r--r--ld/testsuite/ld-mips-elf/eh-frame2-n32.d22
-rw-r--r--ld/testsuite/ld-mips-elf/eh-frame2-n64.d22
-rw-r--r--ld/testsuite/ld-mips-elf/elf-rel-got-n32.d497
-rw-r--r--ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d82
-rw-r--r--ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d717
-rw-r--r--ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d42
-rw-r--r--ld/testsuite/ld-mips-elf/hash1.s1
-rw-r--r--ld/testsuite/ld-mips-elf/hash1a.d4
-rw-r--r--ld/testsuite/ld-mips-elf/hash1b.d3
-rw-r--r--ld/testsuite/ld-mips-elf/hash1c.d3
-rw-r--r--ld/testsuite/ld-mips-elf/jalbal.d10
-rw-r--r--ld/testsuite/ld-mips-elf/jaloverflow-2.d4
-rw-r--r--ld/testsuite/ld-mips-elf/mips-elf.exp55
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-call-global-1.s12
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-call-global-2.s8
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-call-global-3.s16
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-call-global.d39
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-intermix-1.s104
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-intermix-2.s2631
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-intermix.d132
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-local-stubs-1.d114
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-local-stubs-1.s49
-rw-r--r--ld/testsuite/ld-mips-elf/multi-got-1.d16401
-rw-r--r--ld/testsuite/ld-mips-elf/multi-got-no-shared.d4
-rw-r--r--ld/testsuite/ld-mips-elf/rel32-n32.d10
-rw-r--r--ld/testsuite/ld-mips-elf/rel32-o32.d6
-rw-r--r--ld/testsuite/ld-mips-elf/rel64.d20
-rw-r--r--ld/testsuite/ld-mips-elf/reloc-1-n64.d70
-rw-r--r--ld/testsuite/ld-mips-elf/reloc-3-n32.d18
-rw-r--r--ld/testsuite/ld-mips-elf/reloc-3.d16
-rw-r--r--ld/testsuite/ld-mips-elf/textrel-1.d3
-rw-r--r--ld/testsuite/ld-mips-elf/tls-hidden3.r2
-rw-r--r--ld/testsuite/ld-mips-elf/tls-hidden4.r12
-rw-r--r--ld/testsuite/ld-mips-elf/tls-multi-got-1.got60
-rw-r--r--ld/testsuite/ld-mips-elf/tls-multi-got-1.r65
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d4
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got20
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d4
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got22
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d4
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got20
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32.d2
-rw-r--r--ld/testsuite/ld-mips-elf/tlsdyn-o32.got20
-rw-r--r--ld/testsuite/ld-mips-elf/tlslib-o32-hidden.got14
-rw-r--r--ld/testsuite/ld-mips-elf/tlslib-o32-ver.got16
-rw-r--r--ld/testsuite/ld-mips-elf/tlslib-o32.got16
-rw-r--r--ld/testsuite/ld-mips-elf/vxworks1-lib.rd12
-rw-r--r--ld/testsuite/ld-mips-elf/vxworks1-lib.td3
-rw-r--r--ld/testsuite/ld-mips-elf/vxworks1.ld4
-rw-r--r--ld/testsuite/ld-mips-elf/vxworks1.rd8
-rw-r--r--ld/testsuite/ld-mmix/bpo-1.d3
-rw-r--r--ld/testsuite/ld-mmix/bpo-10.d5
-rw-r--r--ld/testsuite/ld-mmix/bpo-11.d3
-rw-r--r--ld/testsuite/ld-mmix/bpo-14.d3
-rw-r--r--ld/testsuite/ld-mmix/bpo-16.d3
-rw-r--r--ld/testsuite/ld-mmix/bpo-17.d3
-rw-r--r--ld/testsuite/ld-mmix/bpo-18.d3
-rw-r--r--ld/testsuite/ld-mmix/bpo-19.d3
-rw-r--r--ld/testsuite/ld-mmix/bpo-2.d3
-rw-r--r--ld/testsuite/ld-mmix/bpo-22.d3
-rw-r--r--ld/testsuite/ld-mmix/bpo-3.d3
-rw-r--r--ld/testsuite/ld-mmix/bpo-4.d3
-rw-r--r--ld/testsuite/ld-mmix/bpo-5.d3
-rw-r--r--ld/testsuite/ld-mmix/bpo-6.d3
-rw-r--r--ld/testsuite/ld-mmix/bpo-9.d3
-rw-r--r--ld/testsuite/ld-mmix/bspec1.d13
-rw-r--r--ld/testsuite/ld-mmix/bspec2.d15
-rw-r--r--ld/testsuite/ld-mmix/greg-1.d3
-rw-r--r--ld/testsuite/ld-mmix/greg-19.d3
-rw-r--r--ld/testsuite/ld-mmix/greg-2.d3
-rw-r--r--ld/testsuite/ld-mmix/greg-3.d3
-rw-r--r--ld/testsuite/ld-mmix/greg-4.d3
-rw-r--r--ld/testsuite/ld-mmix/greg-5.d3
-rw-r--r--ld/testsuite/ld-mmix/greg-5s.d3
-rw-r--r--ld/testsuite/ld-mmix/greg-6.d3
-rw-r--r--ld/testsuite/ld-mmix/greg-7.d3
-rw-r--r--ld/testsuite/ld-mmix/loc1.d3
-rw-r--r--ld/testsuite/ld-mmix/loc2.d3
-rw-r--r--ld/testsuite/ld-mmix/loc3.d3
-rw-r--r--ld/testsuite/ld-mmix/loc4.d3
-rw-r--r--ld/testsuite/ld-mmix/loc6.d3
-rw-r--r--ld/testsuite/ld-mmix/local1.d17
-rw-r--r--ld/testsuite/ld-mmix/local3.d17
-rw-r--r--ld/testsuite/ld-mmix/local5.d17
-rw-r--r--ld/testsuite/ld-mmix/local7.d17
-rw-r--r--ld/testsuite/ld-mmix/locdo-1.d3
-rw-r--r--ld/testsuite/ld-mmix/loct-1.d3
-rw-r--r--ld/testsuite/ld-mmix/locto-1.d3
-rw-r--r--ld/testsuite/ld-mmix/start-1.d3
-rw-r--r--ld/testsuite/ld-mmix/undef-3.d21
-rw-r--r--ld/testsuite/ld-pe/direct.exp143
-rw-r--r--ld/testsuite/ld-pe/direct_client.c8
-rw-r--r--ld/testsuite/ld-pe/direct_dll.c5
-rw-r--r--ld/testsuite/ld-pe/image_size.d9
-rw-r--r--ld/testsuite/ld-pe/image_size.s8
-rw-r--r--ld/testsuite/ld-pe/image_size.t15
-rw-r--r--ld/testsuite/ld-pe/pe.exp13
-rw-r--r--ld/testsuite/ld-pe/secrel.d42
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-0.s1
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-00.d7
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-01.d10
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-02.d10
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-1.s1
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-10.d10
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-11.d10
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-12.d6
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-13.d6
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-2.s1
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-20.d10
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-21.d6
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-22.d10
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-3.s1
-rw-r--r--ld/testsuite/ld-powerpc/attr-gnu-4-31.d6
-rw-r--r--ld/testsuite/ld-powerpc/plt1.d20
-rw-r--r--ld/testsuite/ld-powerpc/plt1.s9
-rw-r--r--ld/testsuite/ld-powerpc/powerpc.exp19
-rw-r--r--ld/testsuite/ld-powerpc/relbrlt.d50
-rw-r--r--ld/testsuite/ld-powerpc/relbrlt.s34
-rw-r--r--ld/testsuite/ld-powerpc/tlsexe.d27
-rw-r--r--ld/testsuite/ld-powerpc/tlsexe.r47
-rw-r--r--ld/testsuite/ld-powerpc/tlsexe32.r5
-rw-r--r--ld/testsuite/ld-powerpc/tlsexetoc.d27
-rw-r--r--ld/testsuite/ld-powerpc/tlsexetoc.r45
-rw-r--r--ld/testsuite/ld-powerpc/tlsso.d27
-rw-r--r--ld/testsuite/ld-powerpc/tlsso.g2
-rw-r--r--ld/testsuite/ld-powerpc/tlsso.r17
-rw-r--r--ld/testsuite/ld-powerpc/tlsso32.d2
-rw-r--r--ld/testsuite/ld-powerpc/tlsso32.g2
-rw-r--r--ld/testsuite/ld-powerpc/tlsso32.r12
-rw-r--r--ld/testsuite/ld-powerpc/tlstocso.d27
-rw-r--r--ld/testsuite/ld-powerpc/tlstocso.g2
-rw-r--r--ld/testsuite/ld-powerpc/tlstocso.r11
-rw-r--r--ld/testsuite/ld-powerpc/vxworks1-lib.rd4
-rw-r--r--ld/testsuite/ld-powerpc/vxworks1-lib.td3
-rw-r--r--ld/testsuite/ld-powerpc/vxworks1.ld4
-rw-r--r--ld/testsuite/ld-s390/tlsbin.rd5
-rw-r--r--ld/testsuite/ld-s390/tlsbin_64.rd5
-rw-r--r--ld/testsuite/ld-s390/tlspic.rd6
-rw-r--r--ld/testsuite/ld-s390/tlspic_64.rd6
-rw-r--r--ld/testsuite/ld-scripts/align.exp16
-rw-r--r--ld/testsuite/ld-scripts/align2a.d8
-rw-r--r--ld/testsuite/ld-scripts/alignof.exp63
-rw-r--r--ld/testsuite/ld-scripts/alignof.s9
-rw-r--r--ld/testsuite/ld-scripts/alignof.t15
-rw-r--r--ld/testsuite/ld-scripts/assert.t7
-rw-r--r--ld/testsuite/ld-scripts/cross3.t2
-rw-r--r--ld/testsuite/ld-scripts/default-script.exp29
-rw-r--r--ld/testsuite/ld-scripts/default-script.s3
-rw-r--r--ld/testsuite/ld-scripts/default-script.t7
-rw-r--r--ld/testsuite/ld-scripts/default-script1.d9
-rw-r--r--ld/testsuite/ld-scripts/default-script2.d9
-rw-r--r--ld/testsuite/ld-scripts/default-script3.d9
-rw-r--r--ld/testsuite/ld-scripts/default-script4.d9
-rw-r--r--ld/testsuite/ld-scripts/defined.exp11
-rw-r--r--ld/testsuite/ld-scripts/empty-address-1.d8
-rw-r--r--ld/testsuite/ld-scripts/empty-address-1.s5
-rw-r--r--ld/testsuite/ld-scripts/empty-address-1.t11
-rw-r--r--ld/testsuite/ld-scripts/empty-address-2.s5
-rw-r--r--ld/testsuite/ld-scripts/empty-address-2a.d8
-rw-r--r--ld/testsuite/ld-scripts/empty-address-2a.t7
-rw-r--r--ld/testsuite/ld-scripts/empty-address-2b.d8
-rw-r--r--ld/testsuite/ld-scripts/empty-address-2b.t11
-rw-r--r--ld/testsuite/ld-scripts/empty-address-3.s5
-rw-r--r--ld/testsuite/ld-scripts/empty-address-3a.d8
-rw-r--r--ld/testsuite/ld-scripts/empty-address-3a.t10
-rw-r--r--ld/testsuite/ld-scripts/empty-address-3b.d8
-rw-r--r--ld/testsuite/ld-scripts/empty-address-3b.t11
-rw-r--r--ld/testsuite/ld-scripts/empty-address-3c.d10
-rw-r--r--ld/testsuite/ld-scripts/empty-address-3c.t11
-rw-r--r--ld/testsuite/ld-scripts/empty-address.exp25
-rw-r--r--ld/testsuite/ld-scripts/empty-orphan.exp6
-rw-r--r--ld/testsuite/ld-scripts/empty-orphan.t2
-rw-r--r--ld/testsuite/ld-scripts/expr.exp20
-rw-r--r--ld/testsuite/ld-scripts/expr1.d2
-rw-r--r--ld/testsuite/ld-scripts/expr1.s2
-rw-r--r--ld/testsuite/ld-scripts/expr1.t12
-rw-r--r--ld/testsuite/ld-scripts/extern.exp68
-rw-r--r--ld/testsuite/ld-scripts/extern.s1
-rw-r--r--ld/testsuite/ld-scripts/extern.t14
-rw-r--r--ld/testsuite/ld-scripts/overlay-size.t1
-rw-r--r--ld/testsuite/ld-scripts/phdrs.exp10
-rw-r--r--ld/testsuite/ld-scripts/phdrs2.exp8
-rw-r--r--ld/testsuite/ld-scripts/provide.exp10
-rw-r--r--ld/testsuite/ld-scripts/script.exp6
-rw-r--r--ld/testsuite/ld-scripts/sort.t5
-rw-r--r--ld/testsuite/ld-scripts/sort_b_a-1.d9
-rw-r--r--ld/testsuite/ld-scripts/sort_b_a-1.s16
-rw-r--r--ld/testsuite/ld-scripts/sort_b_n-1.d9
-rw-r--r--ld/testsuite/ld-scripts/sort_b_n-1.s12
-rw-r--r--ld/testsuite/ld-scripts/weak.exp12
-rw-r--r--ld/testsuite/ld-selective/selective.exp11
-rw-r--r--ld/testsuite/ld-sh/arch/arch.exp6
-rw-r--r--ld/testsuite/ld-sh/ld-r-1.d5
-rw-r--r--ld/testsuite/ld-sh/rd-sh.exp6
-rw-r--r--ld/testsuite/ld-sh/reloc1.d10
-rw-r--r--ld/testsuite/ld-sh/reloc1.s2
-rw-r--r--ld/testsuite/ld-sh/sh-vxworks.exp42
-rw-r--r--ld/testsuite/ld-sh/sh.exp6
-rw-r--r--ld/testsuite/ld-sh/sh64/abi32.xd11
-rw-r--r--ld/testsuite/ld-sh/sh64/abi64.xd11
-rw-r--r--ld/testsuite/ld-sh/sh64/cmpct1.xd11
-rw-r--r--ld/testsuite/ld-sh/sh64/crange1.rd15
-rw-r--r--ld/testsuite/ld-sh/sh64/crange2.rd19
-rw-r--r--ld/testsuite/ld-sh/sh64/crange3-cmpct.rd17
-rw-r--r--ld/testsuite/ld-sh/sh64/crange3-media.rd17
-rw-r--r--ld/testsuite/ld-sh/sh64/crange3.rd17
-rw-r--r--ld/testsuite/ld-sh/sh64/crangerel1.rd14
-rw-r--r--ld/testsuite/ld-sh/sh64/crangerel2.rd22
-rw-r--r--ld/testsuite/ld-sh/sh64/mix1.xd11
-rw-r--r--ld/testsuite/ld-sh/sh64/mix2.xd11
-rw-r--r--ld/testsuite/ld-sh/sh64/rel32.xd5
-rw-r--r--ld/testsuite/ld-sh/sh64/rel64.xd5
-rw-r--r--ld/testsuite/ld-sh/sh64/reldl32.rd591
-rw-r--r--ld/testsuite/ld-sh/sh64/reldl64.rd601
-rw-r--r--ld/testsuite/ld-sh/sh64/shdl32.xd11
-rw-r--r--ld/testsuite/ld-sh/sh64/shdl64.xd11
-rw-r--r--ld/testsuite/ld-sh/shared-1.d7
-rw-r--r--ld/testsuite/ld-sh/tlsbin-1.d44
-rw-r--r--ld/testsuite/ld-sh/tlspic-1.d54
-rw-r--r--ld/testsuite/ld-sh/tlspic-2.d3
-rw-r--r--ld/testsuite/ld-sh/tlstpoff-1.d4
-rw-r--r--ld/testsuite/ld-sh/vxworks1-le.dd73
-rw-r--r--ld/testsuite/ld-sh/vxworks1-lib-le.dd76
-rw-r--r--ld/testsuite/ld-sh/vxworks1-lib.dd76
-rw-r--r--ld/testsuite/ld-sh/vxworks1-lib.nd9
-rw-r--r--ld/testsuite/ld-sh/vxworks1-lib.rd12
-rw-r--r--ld/testsuite/ld-sh/vxworks1-lib.s61
-rw-r--r--ld/testsuite/ld-sh/vxworks1-lib.td3
-rw-r--r--ld/testsuite/ld-sh/vxworks1-static.d4
-rw-r--r--ld/testsuite/ld-sh/vxworks1.dd73
-rw-r--r--ld/testsuite/ld-sh/vxworks1.ld30
-rw-r--r--ld/testsuite/ld-sh/vxworks1.rd19
-rw-r--r--ld/testsuite/ld-sh/vxworks1.s32
-rw-r--r--ld/testsuite/ld-sh/vxworks2-static.sd9
-rw-r--r--ld/testsuite/ld-sh/vxworks2.s6
-rw-r--r--ld/testsuite/ld-sh/vxworks2.sd13
-rw-r--r--ld/testsuite/ld-sh/vxworks3-le.dd34
-rw-r--r--ld/testsuite/ld-sh/vxworks3-lib-le.dd12
-rw-r--r--ld/testsuite/ld-sh/vxworks3-lib.dd12
-rw-r--r--ld/testsuite/ld-sh/vxworks3-lib.s12
-rw-r--r--ld/testsuite/ld-sh/vxworks3.dd34
-rw-r--r--ld/testsuite/ld-sh/vxworks3.s7
-rw-r--r--ld/testsuite/ld-sh/vxworks4.d11
-rw-r--r--ld/testsuite/ld-sh/vxworks4a.s2
-rw-r--r--ld/testsuite/ld-sh/vxworks4b.s4
-rw-r--r--ld/testsuite/ld-sparc/sparc.exp2
-rw-r--r--ld/testsuite/ld-sparc/tlssunbin32.rd7
-rw-r--r--ld/testsuite/ld-sparc/tlssunbin64.rd7
-rw-r--r--ld/testsuite/ld-sparc/tlssunnopic32.rd5
-rw-r--r--ld/testsuite/ld-sparc/tlssunnopic64.rd5
-rw-r--r--ld/testsuite/ld-sparc/tlssunpic32.rd6
-rw-r--r--ld/testsuite/ld-sparc/tlssunpic64.rd6
-rw-r--r--ld/testsuite/ld-sparc/vxworks1-lib.rd4
-rw-r--r--ld/testsuite/ld-sparc/vxworks1-lib.td3
-rw-r--r--ld/testsuite/ld-sparc/vxworks1.ld4
-rw-r--r--ld/testsuite/ld-spu/ear.d30
-rw-r--r--ld/testsuite/ld-spu/ear.s25
-rw-r--r--ld/testsuite/ld-spu/embed.rd16
-rw-r--r--ld/testsuite/ld-spu/ovl.d136
-rw-r--r--ld/testsuite/ld-spu/ovl.lnk14
-rw-r--r--ld/testsuite/ld-spu/ovl.s82
-rw-r--r--ld/testsuite/ld-spu/ovl2.d81
-rw-r--r--ld/testsuite/ld-spu/ovl2.s35
-rw-r--r--ld/testsuite/ld-spu/spu.exp91
-rw-r--r--ld/testsuite/ld-srec/srec.exp4
-rw-r--r--ld/testsuite/ld-undefined/undefined.exp1
-rw-r--r--ld/testsuite/ld-vxworks/rpath-1.d6
-rw-r--r--ld/testsuite/ld-vxworks/rpath-1.s2
-rw-r--r--ld/testsuite/ld-vxworks/vxworks.exp24
-rw-r--r--ld/testsuite/ld-x86-64/tlsbin.dd36
-rw-r--r--ld/testsuite/ld-x86-64/tlsbin.rd23
-rw-r--r--ld/testsuite/ld-x86-64/tlsbin.sd4
-rw-r--r--ld/testsuite/ld-x86-64/tlsbin.td12
-rw-r--r--ld/testsuite/ld-x86-64/tlsbindesc.dd48
-rw-r--r--ld/testsuite/ld-x86-64/tlsbindesc.rd35
-rw-r--r--ld/testsuite/ld-x86-64/tlsbindesc.sd4
-rw-r--r--ld/testsuite/ld-x86-64/tlsbindesc.td12
-rw-r--r--ld/testsuite/ld-x86-64/tlsdesc.dd46
-rw-r--r--ld/testsuite/ld-x86-64/tlsdesc.pd22
-rw-r--r--ld/testsuite/ld-x86-64/tlsdesc.rd62
-rw-r--r--ld/testsuite/ld-x86-64/tlsdesc.sd24
-rw-r--r--ld/testsuite/ld-x86-64/tlsdesc.td12
-rw-r--r--ld/testsuite/ld-x86-64/tlsgdesc.dd44
-rw-r--r--ld/testsuite/ld-x86-64/tlsgdesc.rd5
-rw-r--r--ld/testsuite/ld-x86-64/tlspic.dd38
-rw-r--r--ld/testsuite/ld-x86-64/tlspic.rd24
-rw-r--r--ld/testsuite/ld-x86-64/tlspic.sd18
-rw-r--r--ld/testsuite/ld-x86-64/tlspic.td12
-rw-r--r--ld/testsuite/lib/ld-lib.exp189
-rw-r--r--libiberty/ChangeLog316
-rw-r--r--libiberty/Makefile.in64
-rw-r--r--libiberty/aclocal.m41
-rw-r--r--libiberty/argv.c60
-rw-r--r--libiberty/bcopy.c4
-rw-r--r--libiberty/choose-temp.c5
-rwxr-xr-xlibiberty/configure351
-rw-r--r--libiberty/configure.ac108
-rw-r--r--libiberty/cp-demangle.c854
-rw-r--r--libiberty/cp-demangle.h15
-rw-r--r--libiberty/cplus-dem.c2
-rw-r--r--libiberty/filename_cmp.c78
-rw-r--r--libiberty/floatformat.c111
-rw-r--r--libiberty/functions.texi82
-rw-r--r--libiberty/hashtab.c23
-rw-r--r--libiberty/hex.c2
-rw-r--r--libiberty/make-relative-prefix.c46
-rw-r--r--libiberty/mkstemps.c6
-rw-r--r--libiberty/pex-common.c90
-rw-r--r--libiberty/pex-common.h18
-rw-r--r--libiberty/pex-djgpp.c17
-rw-r--r--libiberty/pex-msdos.c8
-rw-r--r--libiberty/pex-unix.c22
-rw-r--r--libiberty/pex-win32.c138
-rw-r--r--libiberty/pexecute.txh39
-rw-r--r--libiberty/strsignal.c6
-rw-r--r--libiberty/testsuite/Makefile.in3
-rw-r--r--libiberty/testsuite/demangle-expected53
-rw-r--r--libiberty/testsuite/test-demangle.c56
-rw-r--r--libtool.m47386
-rw-r--r--ltcf-c.sh828
-rw-r--r--ltcf-cxx.sh1024
-rw-r--r--ltcf-gcj.sh651
-rwxr-xr-xltconfig2856
-rw-r--r--ltgcc.m460
-rw-r--r--ltmain.sh7776
-rw-r--r--ltoptions.m4342
-rw-r--r--ltsugar.m4111
-rw-r--r--ltversion.m423
-rw-r--r--opcodes/ChangeLog792
-rw-r--r--opcodes/ChangeLog-2006837
-rw-r--r--opcodes/Makefile.am671
-rw-r--r--opcodes/Makefile.in718
-rw-r--r--opcodes/acinclude.m424
-rw-r--r--opcodes/aclocal.m439
-rw-r--r--opcodes/arm-dis.c2761
-rw-r--r--opcodes/avr-dis.c19
-rw-r--r--opcodes/cgen-types.h2
-rw-r--r--opcodes/config.in113
-rwxr-xr-xopcodes/configure9990
-rw-r--r--opcodes/configure.in12
-rw-r--r--opcodes/cr16-dis.c820
-rw-r--r--opcodes/cr16-opc.c611
-rw-r--r--opcodes/cris-dis.c10
-rw-r--r--opcodes/disassemble.c38
-rw-r--r--opcodes/fr30-asm.c3
-rw-r--r--opcodes/frv-asm.c3
-rw-r--r--opcodes/frv-desc.c45
-rw-r--r--opcodes/frv-desc.h13
-rw-r--r--opcodes/h8300-dis.c10
-rw-r--r--opcodes/i386-dis.c4733
-rw-r--r--opcodes/i386-gen.c394
-rw-r--r--opcodes/i386-opc.c32
-rw-r--r--opcodes/i386-opc.h239
-rw-r--r--opcodes/i386-opc.tbl1489
-rw-r--r--opcodes/i386-reg.tbl182
-rw-r--r--opcodes/i386-tbl.h4468
-rw-r--r--opcodes/ia64-gen.c48
-rw-r--r--opcodes/ip2k-asm.c3
-rw-r--r--opcodes/iq2000-asm.c3
-rw-r--r--opcodes/m32c-asm.c9
-rw-r--r--opcodes/m32c-desc.c321
-rw-r--r--opcodes/m32c-desc.h325
-rw-r--r--opcodes/m32c-dis.c14
-rw-r--r--opcodes/m32c-ibld.c73
-rw-r--r--opcodes/m32c-opc.c188
-rw-r--r--opcodes/m32c-opc.h20
-rw-r--r--opcodes/m32r-asm.c17
-rw-r--r--opcodes/m32r-dis.c4
-rw-r--r--opcodes/m68hc11-dis.c7
-rw-r--r--opcodes/m68k-dis.c111
-rw-r--r--opcodes/m68k-opc.c291
-rw-r--r--opcodes/mep-asm.c1398
-rw-r--r--opcodes/mep-desc.c2729
-rw-r--r--opcodes/mep-desc.h342
-rw-r--r--opcodes/mep-dis.c1205
-rw-r--r--opcodes/mep-ibld.c2541
-rw-r--r--opcodes/mep-opc.c2274
-rw-r--r--opcodes/mep-opc.h294
-rw-r--r--opcodes/mips-dis.c113
-rw-r--r--opcodes/mips-opc.c485
-rw-r--r--opcodes/mips16-opc.c270
-rw-r--r--opcodes/mt-asm.c3
-rw-r--r--opcodes/mt-ibld.c23
-rw-r--r--opcodes/mt-opc.c3
-rw-r--r--opcodes/ns32k-dis.c4
-rw-r--r--opcodes/openrisc-asm.c3
-rw-r--r--opcodes/po/Make-in3
-rw-r--r--opcodes/po/POTFILES.in17
-rw-r--r--opcodes/po/da.gmobin8332 -> 0 bytes
-rw-r--r--opcodes/po/de.gmobin16919 -> 0 bytes
-rw-r--r--opcodes/po/es.gmobin21084 -> 0 bytes
-rw-r--r--opcodes/po/fi.gmobin21547 -> 0 bytes
-rw-r--r--opcodes/po/fr.gmobin16408 -> 0 bytes
-rw-r--r--opcodes/po/ga.gmobin20664 -> 0 bytes
-rw-r--r--opcodes/po/id.gmobin8307 -> 0 bytes
-rw-r--r--opcodes/po/nl.gmobin20474 -> 0 bytes
-rw-r--r--opcodes/po/opcodes.pot473
-rw-r--r--opcodes/po/pt_BR.gmobin8467 -> 0 bytes
-rw-r--r--opcodes/po/ro.gmobin15986 -> 0 bytes
-rw-r--r--opcodes/po/sv.gmobin16004 -> 0 bytes
-rw-r--r--opcodes/po/tr.gmobin16094 -> 0 bytes
-rw-r--r--opcodes/po/vi.gmobin17773 -> 0 bytes
-rw-r--r--opcodes/po/zh_CN.gmobin9050 -> 0 bytes
-rw-r--r--opcodes/ppc-dis.c93
-rw-r--r--opcodes/ppc-opc.c900
-rw-r--r--opcodes/s390-mkopc.c5
-rw-r--r--opcodes/s390-opc.c35
-rw-r--r--opcodes/s390-opc.txt96
-rw-r--r--opcodes/score-dis.c504
-rw-r--r--opcodes/score-opc.h487
-rw-r--r--opcodes/sh-dis.c4
-rw-r--r--opcodes/spu-dis.c260
-rw-r--r--opcodes/spu-opc.c44
-rw-r--r--opcodes/xc16x-asm.c3
-rw-r--r--opcodes/xstormy16-asm.c3
-rw-r--r--src-release16
2613 files changed, 350025 insertions, 219624 deletions
diff --git a/.cvsignore b/.cvsignore
index a73a969e5ff6..07be49647edb 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -30,3 +30,4 @@ Makefile
lost+found
update.out
update.sourceware
+autom4te.cache
diff --git a/COPYING.LIBGLOSS b/COPYING.LIBGLOSS
index d6f99e51f6eb..db0ab5ea1ad1 100644
--- a/COPYING.LIBGLOSS
+++ b/COPYING.LIBGLOSS
@@ -1,101 +1,52 @@
The libgloss subdirectory is a collection of software from several sources.
-Each have their own copyrights embedded in each file that they concern.
-(1) University of California, Berkeley
+Each file may have its own copyright/license that is embedded in the source
+file. Unless otherwise noted in the body of the source file(s), the following copyright
+notices will apply to the contents of the libgloss subdirectory:
-[1a]
+(1) Red Hat Incorporated
-Copyright (c) 1990 The Regents of the University of California.
-All rights reserved.
+Copyright (c) 1994-2006 Red Hat, Inc. All rights reserved.
-Redistribution and use in source and binary forms are permitted
-provided that the above copyright notice and this paragraph are
-duplicated in all such forms and that any documentation,
-and other materials related to such distribution and use
-acknowledge that the software was developed
-by the University of California, Berkeley. The name of the
-University may not be used to endorse or promote products derived
-from this software without specific prior written permission.
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+This copyrighted material is made available to anyone wishing to use, modify,
+copy, or redistribute it subject to the terms and conditions of the BSD
+License. This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY expressed or implied, including the implied warranties
+of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. A copy of this license
+is available at http://www.opensource.org/licenses. Any Red Hat trademarks that
+are incorporated in the source code or documentation are not subject to the BSD
+License and may only be used or replicated with the express permission of
+Red Hat, Inc.
-[1b]
+(2) University of California, Berkeley
-Copyright (c) 1991, 2000 The Regents of the University of California.
+Copyright (c) 1981-2000 The Regents of the University of California.
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.
-3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product includes software developed by the University of
- California, Berkeley and its contributors.
-4. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
-
-[1c]
-
-Copyright (c) 1991, 1998, 2001 The Regents of the University of California.
-All rights reserved.
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
-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.
-3. [rescinded 22 July 1999]
-4. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * 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.
+ * Neither the name of the University nor the names of its contributors may
+ be used to endorse or promote products derived from this software without
+ specific prior written permission.
--------------------------------------------------------------
- Please note that in some of the above alternate licenses, there is a
- statement regarding that acknowledgement must be made in any
- advertising materials for products using the code. This restriction
- no longer applies due to the following license change:
-
- ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
-
- In some cases the defunct clause has been removed in modified newlib code and
- in some cases, the clause has been left as-is.
--------------------------------------------------------------
-
-(2) DJ Delorie
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.
+
+(3) DJ Delorie
Copyright (C) 1993 DJ Delorie
All rights reserved.
@@ -107,7 +58,7 @@ duplicated in all such forms.
This file is distributed WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-(3) GPL (fr30 directory only)
+(4) GPL (fr30 directory only)
Copyright (C) 1998 Free Software Foundation, Inc.
Contributed by Cygnus Solutions.
@@ -129,7 +80,7 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
-(4) Advanced Micro Devices
+(5) Advanced Micro Devices
Copyright 1989, 1990 Advanced Micro Devices, Inc.
@@ -155,7 +106,7 @@ Mail Stop 573
Austin, TX 78741
800-292-9263
-(5) Array Technology Corporation and MIPS (mips/lsi33k-stub.h)
+(6) Array Technology Corporation and MIPS (mips/lsi33k-stub.h)
COPYRIGHT (C) 1991, 1992 ARRAY TECHNOLOGY CORPORATION
All Rights Reserved
@@ -166,9 +117,8 @@ disclosure is subject to the terms of a separate license agreement.
Copyright 1985 by MIPS Computer Systems, Inc.
-(6) University of Utah and the Computer Systems Laboratory (CSL)
- [applies only to hppa*-*-pro* targets]
-
+(7) University of Utah and the Computer Systems Laboratory (CSL)
+ [applies only to hppa*-*-pro* targets]
Copyright (c) 1990,1994 The University of Utah and
the Computer Systems Laboratory (CSL). All rights reserved.
@@ -187,22 +137,22 @@ ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
CSL requests users of this software to return to csl-dist@cs.utah.edu any
improvements that they make and grant CSL redistribution rights.
-(7) Sun Microsystems
+(8) Sun Microsystems
Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
Developed at SunPro, a Sun Microsystems, Inc. business.
Permission to use, copy, modify, and distribute this
-software is freely granted, provided that this notice
-is preserved.
+software is freely granted, provided that this notice is preserved.
-(8) Hewlett Packard
+(9) Hewlett Packard
(c) Copyright 1986 HEWLETT-PACKARD COMPANY
To anyone who acknowledges that this file is provided "AS IS"
without any express or implied warranty:
- permission to use, copy, modify, and distribute this file
+
+permission to use, copy, modify, and distribute this file
for any purpose is hereby granted without fee, provided that
the above copyright notice and this notice appears in all
copies, and that the name of Hewlett-Packard Company not be
@@ -211,7 +161,7 @@ of the software without specific, written prior permission.
Hewlett-Packard Company makes no representations about the
suitability of this software for any purpose.
-(9) Hans-Peter Nilsson
+(10) Hans-Peter Nilsson
Copyright (C) 2001 Hans-Peter Nilsson
@@ -224,74 +174,33 @@ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.
-(10) No Copyright
-
-THIS SOFTWARE IS NOT COPYRIGHTED
+(11) IBM Corp. spu processor (only spu-* targets)
-(11) Cygnus Support / Cygnus Solutions
+(C) Copyright IBM Corp. 2005, 2006
-Copyright (c) 1995, 1996, 1997, 1998, 1999 Cygnus Support
-
-The authors hereby grant permission to use, copy, modify, distribute,
-and license this software and its documentation for any purpose, provided
-that existing copyright notices are retained in all copies and that this
-notice is included verbatim in any distributions. No written agreement,
-license, or royalty fee is required for any of the authorized uses.
-Modifications to this software may be copyrighted by their authors
-and need not follow the licensing terms described here, provided that
-the new terms are clearly indicated on the first page of each file where
-they apply.
-
----------------------------------------------------------------
- Please note that the copyright above may be used with the name
- Cygnus Solutions instead of Cygnus Support. Both names should
- be considered interchangeable. These copyrights are now owned
- by Red Hat Incorporated.
----------------------------------------------------------------
-
-(12) Red Hat Incorporated
-
-Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
-
-The authors hereby grant permission to use, copy, modify, distribute,
-and license this software and its documentation for any purpose, provided
-that existing copyright notices are retained in all copies and that this
-notice is included verbatim in any distributions. No written agreement,
-license, or royalty fee is required for any of the authorized uses.
-Modifications to this software may be copyrighted by their authors
-and need not follow the licensing terms described here, provided that
-the new terms are clearly indicated on the first page of each file where
-they apply.
-
-(13) Default copyright
-
-Unless otherwise stated in each remaining libgloss file, the remaining
-files in the libgloss subdirectory are governed by the following copyright.
-
-Copyright (c) 1994, 1997, 2001, 2002 Red Hat Incorporated.
All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 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.
-
- The name of Red Hat Incorporated may not be used to endorse
- or promote products derived from this software without specific
- prior written permission.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+ * 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.
+ * Neither the name of IBM nor the names of its contributors may be
+used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 RED HAT INCORPORATED 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.
diff --git a/COPYING.NEWLIB b/COPYING.NEWLIB
index 141ca017ee0a..72721a32b177 100644
--- a/COPYING.NEWLIB
+++ b/COPYING.NEWLIB
@@ -1,197 +1,53 @@
The newlib subdirectory is a collection of software from several sources.
-Each file may have its own copyright/license that is embedded in the source
-file.
-
-This list documents those licenses which are more restrictive than
-a BSD-like license or require the copyright notice
-to be duplicated in documentation and/or other materials associated with
-the distribution. Certain licenses documented here only apply to
-specific targets. Certain clauses only apply if you are building the
-code as part of your binary.
-
-Note that this list may omit certain licenses that
-only pertain to the copying/modifying of the individual source code.
-If you are distributing the source code, then you do not need to
-worry about these omitted licenses, so long as you do not modify the
-copyright information already in place.
-
-(1) University of California, Berkeley
-
-[1a]
-
-Copyright (c) 1990 The Regents of the University of California.
-All rights reserved.
-
-Redistribution and use in source and binary forms are permitted
-provided that the above copyright notice and this paragraph are
-duplicated in all such forms and that any documentation,
-and other materials related to such distribution and use
-acknowledge that the software was developed
-by the University of California, Berkeley. The name of the
-University may not be used to endorse or promote products derived
-from this software without specific prior written permission.
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-[1b]
-
-Copyright (c) 1990 The Regents of the University of California.
-All rights reserved.
-
-Redistribution and use in source and binary forms are permitted
-provided that the above copyright notice and this paragraph are
-duplicated in all such forms and that any documentation,
-advertising materials, and other materials related to such
-distribution and use acknowledge that the software was developed
-by the University of California, Berkeley. The name of the
-University may not be used to endorse or promote products derived
-from this software without specific prior written permission.
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-[1c]
-
-Copyright (c) 1981, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
-The Regents of the University of California.
-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.
-3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product includes software developed by the University of
- California, Berkeley and its contributors.
-4. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
-
-[1d]
-
-Copyright (c) 1988, 1990, 1993 Regents of the University of California.
-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.
-3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
+Each file may have its own copyright/license that is embedded in the source
+file. Unless otherwise noted in the body of the source file(s), the following copyright
+notices will apply to the contents of the newlib subdirectory:
-[1e]
+(1) Red Hat Incorporated
-Copyright (c) 1982, 1986, 1989, 1991, 1993, 1994
-The Regents of the University of California. All rights reserved.
-(c) UNIX System Laboratories, Inc.
-All or some portions of this file are derived from material licensed
-to the University of California by American Telephone and Telegraph
-Co. or Unix System Laboratories, Inc. and are reproduced herein with
-the permission of UNIX System Laboratories, Inc.
+Copyright (c) 1994-2006 Red Hat, Inc. 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.
-3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product includes software developed by the University of
- California, Berkeley and its contributors.
-4. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
+This copyrighted material is made available to anyone wishing to use,
+modify, copy, or redistribute it subject to the terms and conditions
+of the BSD License. This program is distributed in the hope that
+it will be useful, but WITHOUT ANY WARRANTY expressed or implied,
+including the implied warranties of MERCHANTABILITY or FITNESS FOR
+A PARTICULAR PURPOSE. A copy of this license is available at
+http://www.opensource.org/licenses. Any Red Hat trademarks that are
+incorporated in the source code or documentation are not subject to
+the BSD License and may only be used or replicated with the express
+permission of Red Hat, Inc.
-[1f]
+(2) University of California, Berkeley
-Copyright (c) 1987, 1988, 2000 Regents of the University of California.
+Copyright (c) 1981-2000 The Regents of the University of California.
All rights reserved.
-Redistribution and use in source and binary forms are permitted
-provided that: (1) source distributions retain this entire copyright
-notice and comment, and (2) distributions including binaries display
-the following acknowledgement: ``This product includes software
-developed by the University of California, Berkeley and its contributors''
-in the documentation or other materials provided with the distribution
-and in all advertising materials mentioning features or use of this
-software. Neither the name of the University nor the names of its
-contributors may be used to endorse or promote products derived
-from this software without specific prior written permission.
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
--------------------------------------------------------------
- Please note that in some of the above alternate licenses, there is a
- statement regarding that acknowledgement must be made in any
- advertising materials for products using the code. This restriction
- no longer applies due to the following license change:
-
- ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
-
- In some cases the defunct clause has been removed in modified newlib code and
- in some cases, the clause has been left as-is.
--------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
-(2) Cygwin (cygwin targets only)
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * 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.
+ * Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
-Copyright 2001 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details.
-
-(3) David M. Gay at AT&T
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.
+
+(3) David M. Gay (AT&T 1991, Lucent 1998)
The author of this software is David M. Gay.
@@ -208,6 +64,33 @@ WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY
REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+-------------------------------------------------------------------
+
+The author of this software is David M. Gay.
+
+Copyright (C) 1998-2001 by Lucent Technologies
+All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of Lucent or any of its entities
+not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
+SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+
+
(4) Advanced Micro Devices
Copyright 1989, 1990 Advanced Micro Devices, Inc.
@@ -253,8 +136,7 @@ Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
Developed at SunPro, a Sun Microsystems, Inc. business.
Permission to use, copy, modify, and distribute this
-software is freely granted, provided that this notice
-is preserved.
+software is freely granted, provided that this notice is preserved.
(8) Hewlett Packard
@@ -335,7 +217,7 @@ provided this notice is not removed or altered. All other rights are
reserved by SuperH.
SUPERH MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO
-THIS SOFTWARE. IN NO EVENT SHALL SUPERH BE LIABLE FOR INDIRECT, SPECIAL,
+THIS SOFTWARE. IN NO EVENT SHALL SUPERH BE LIABLE FOR INDIRECT, SPECIAL,
INCIDENTAL OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH OR ARISING FROM
THE FURNISHING, PERFORMANCE, OR USE OF THIS SOFTWARE.
@@ -351,7 +233,7 @@ USA
(13) Royal Institute of Technology
-Copyright (c) 1999 Kungliga Tekniska Högskolan
+Copyright (c) 1999 Kungliga Tekniska Högskolan
(Royal Institute of Technology, Stockholm, Sweden).
All rights reserved.
@@ -530,8 +412,7 @@ 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.
-(20) DJ Delorie (i386)
-
+(20) DJ Delorie (i386)
Copyright (C) 1991 DJ Delorie
All rights reserved.
@@ -544,8 +425,7 @@ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
(21) Free Software Foundation LGPL License (*-linux* targets only)
- Copyright (C) 1990-1999, 2000, 2001
- Free Software Foundation, Inc.
+ Copyright (C) 1990-1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1997.
@@ -572,7 +452,7 @@ This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Library 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
@@ -698,7 +578,7 @@ SUCH DAMAGE.
iconv (Charset Conversion Library) v2.0
-(27) Artem Bityuckiy (--enable-newlib-iconv)
+(28) Artem Bityuckiy (--enable-newlib-iconv)
Copyright (c) 2003, Artem B. Bityuckiy, SoftMine Corporation.
Rights transferred to Franklin Electronic Publishers.
@@ -724,37 +604,37 @@ 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.
-(28) Red Hat Incorporated
+(29) IBM, Sony, Toshiba (only spu-* targets)
-Unless otherwise stated in each remaining newlib file, the remaining
-files in the newlib subdirectory default to the following copyright.
-It should be noted that Red Hat Incorporated now owns copyrights
-belonging to Cygnus Solutions and Cygnus Support.
+ (C) Copyright 2001,2006,
+ International Business Machines Corporation,
+ Sony Computer Entertainment, Incorporated,
+ Toshiba Corporation,
-Copyright (c) 1994, 1997, 2001, 2002, 2003, 2004, 2005 Red Hat Incorporated.
-All rights reserved.
+ All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * 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.
+ * Neither the names of the copyright holders nor the names of their
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
- 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.
- The name of Red Hat Incorporated may not be used to endorse
- or promote products derived from this software without specific
- prior written permission.
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 RED HAT INCORPORATED 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.
diff --git a/ChangeLog b/ChangeLog
index 1d6afc2e0f1d..dbb7644376be 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,691 @@
+2007-06-29 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * configure.ac: Don't add target-libmudflap to noconfigdirs for
+ uclinux and linux-uclibc targets.
+ * configure: Regenerate.
+
+2007-06-28 DJ Delorie <dj@redhat.com>
+
+ * configure.ac (arm*-*-linux-gnueabi): Don't build libgloss if we're
+ not building newlib.
+ * configure: Regenerated.
+
+2007-06-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * src-release (DEVO_SUPPORT): Correct typos.
+
+2007-06-18 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.def: Add dependency from configure-gdb to all-bfd.
+ * Makefile.in: Regenerated.
+
+2007-06-14 Paolo Bonzini <bonzini@gnu.org>
+
+ * Makefile.tpl (cleanstrap): Don't delete the toplevel Makefile.
+ (distclean-stage[+id+]): Possibly delete stage_last.
+ * Makefile.in: Regenerate.
+
+2007-06-07 Ben Elliston <bje@au.ibm.com>
+
+ * config.sub, config.guess: Update from upstream sources.
+
+2007-06-07 Ben Elliston <bje@au.ibm.com>
+
+ * Makefile.tpl: Fix spelling error.
+ * Makefile.in: Regenerate.
+
+2007-06-04 Paolo Bonzini <bonzini@gnu.org>
+
+ Sync with gcc:
+ 2007-05-30 Jakub Jelinek <jakub@redhat.com>
+
+ PR bootstrap/29382
+ * configure.ac: Don't use -fkeep-inline-functions for GCC < 3.3.1.
+ * configure: Rebuilt.
+
+2007-06-01 Steve Ellcey <sje@cup.hp.com>
+
+ * libtool.m4 (LT_CMD_MAX_LEN): Try using getconf to set
+ lt_cv_sys_max_cmd_len.
+
+2007-05-31 Paolo Bonzini <bonzini@gnu.org>
+
+ * ltgcc.m4: Update from GCC.
+
+2007-05-25 Andreas Tobler <a.tobler@schweiz.org>
+
+ * ltmain.sh: Fix Darwin verstring, remove ${wl}.
+
+2007-05-24 Steve Ellcey <sje@cup.hp.com>
+
+ * ltmain.sh: Update from GCC.
+ * libtool.m4: Update from GCC.
+ * ltsugar.m4: New. Update from GCC.
+ * ltversion.m4: New. Update from GCC.
+ * ltoptions.m4: New. Update from GCC.
+ * ltconfig: Remove.
+ * ltcf-c.sh: Remove.
+ * ltcf-cxx.sh: Remove.
+ * ltcf-gcj.sh: Remove.
+ * src-release: Update with new libtool file list.
+
+2007-05-16 Paolo Bonzini <bonzini@gnu.org>
+
+ * Makefile.def (bootstrap_stage): Replace stage_make_flags with
+ stage_cflags.
+ * Makefile.tpl (POSTSTAGE1_HOST_EXPORTS, POSTSTAGE1_FLAGS_TO_PASS):
+ Remove CFLAGS/LIBCFLAGS.
+ (configure-stage[+id+]-[+prefix+][+module+],
+ all-stage[+id+]-[+prefix+][+module+]): Pass it from [+stage_cflags+].
+ * Makefile.in: Regenerate.
+
+2007-04-14 Steve Ellcey <sje@cup.hp.com>
+
+ * config-ml.in: Update from GCC.
+
+2007-04-09 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * src-release (do-proto-toplev): Process the support directories before
+ the tool directory.
+
+2007-03-21 Richard Sandiford <richard@codesourcery.com>
+
+ * configure.ac (TOPLEVEL_CONFIGURE_ARGUMENTS): Fix m4 quoting
+ of glob. Quote arguments with single quotes too.
+ * configure: Regenerate.
+
+2007-03-12 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.def (fixincludes): Remove unneeded "missing" lines.
+ * Makefile.in: Regenerate
+
+2007-03-07 Andreas Schwab <schwab@suse.de>
+
+ * configure: Regenerate.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * configure.ac: Add "--with-pdfdir" configure option,
+ which defines pdfdir variable.
+ * Makefile.def (target=fixincludes): Add install-pdf to
+ missing targets.
+ (recursive_targets): Add install-pdf target.
+ (flags_to_pass): Add pdfdir.
+ * Makefile.tpl: Add pdfdir handling, add do-install-pdf
+ target.
+ * configure: Regenerate
+ * Makefile.in: Regenerate
+
+2007-02-28 Eric Christopher <echristo@apple.com>
+
+ Revert:
+ 2006-12-07 Mike Stump <mrs@apple.com>
+
+ * Makefile.def (dependencies): Add dependency for
+ install-target-libssp and install-target-libgomp on
+ install-gcc.
+ * Makefile.in: Regenerate.
+
+2007-02-27 Matt Kraai <kraai@ftbfs.org>
+
+ * configure: Regenerate.
+ * configure.ac: Move statements after variable declarations.
+
+2007-02-19 Joseph Myers <joseph@codesourcery.com>
+
+ * configure.ac: Adjust for loop syntax.
+ * configure: Regenerate.
+
+2007-02-18 Alexandre Oliva <aoliva@redhat.com>
+
+ * configure: Rebuilt.
+
+2007-02-18 Alexandre Oliva <aoliva@redhat.com>
+
+ * configure.ac: Drop multiple occurrences of --enable-languages,
+ and fix its quoting.
+ * configure: Rebuilt.
+
+2007-02-17 Mark Mitchell <mark@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+ Vladimir Prus <vladimir@codesourcery.com
+ Joseph Myers <joseph@codesourcery.com>
+
+ * configure.ac (TOPLEVEL_CONFIGURE_ARGUMENTS): Fix quoting.
+ * configure: Regenerate.
+
+2007-02-13 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.ac (target_libraries): Move libgcc before libiberty.
+ * configure: Regenerated.
+
+2007-02-13 Paolo Bonzini <bonzini@gnu.org>
+
+ * configure: Regenerate again?
+
+2007-02-13 Paolo Bonzini <bonzini@gnu.org>
+
+ * configure: Reapply PR30748 fix which was lost in the previous commit.
+
+2007-02-13 Daniel Jacobowitz <dan@codesourcery.com>
+ Paolo Bonzini <bonzini@gnu.org>
+
+ PR bootstrap/30753
+ * configure.ac: Remove obsolete build / host tests. Use AC_PROG_CC
+ unconditionally. Use AC_PROG_CXX. Use ACX_TOOL_DIRS to find $prefix.
+ * configure: Regenerated.
+
+2007-02-10 Paolo Bonzini <bonzini@gnu.org>
+
+ * configure: Regenerate.
+
+2007-02-09 Daniel Jacobowitz <dan@codesourcery.com>
+
+ PR bootstrap/30748
+ * configure.ac: Correct syntax for Solaris ksh.
+ * configure: Regenerated.
+
+2007-02-09 Paolo Bonzini <bonzini@gnu.org>
+
+ * Makefile.def: Sync with GCC.
+ * Makefile.tpl: Sync with GCC.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+
+2007-02-09 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.tpl (build_alias, host_alias, target_alias): Use
+ noncanonical equivalents.
+ * configure.in: Rename to...
+ * configure.ac: ...this. Update AC_PREREQ. Prevent error for
+ AS_FOR_TARGET. Set build_noncanonical, host_noncanonical, and
+ target_noncanonical. Use them. Rewrite removal of configure
+ arguments for autoconf 2.59. Discard variable settings. Force
+ program_transform_name for native tools.
+
+ * Makefile.in: Regenerated.
+ * configure: Regenerated with autoconf 2.59.
+
+ * src-release (DEVO_SUPPORT, do-proto-toplev): Expect configure.ac.
+
+2007-02-08 Jeff Johnston <jjohnstn@redhat.com>
+
+ * COPYING.LIBGLOSS: Reformat default Red Hat
+ license to fit within 80 columns.
+ * COPYING.NEWLIB: Ditto.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * Contribute the following changes:
+ 2006-11-28 DJ Delorie <dj@redhat.com>
+
+ * configure.in: Fix typo for mep's target_makefile_frag.
+ * configure: Regenerated.
+
+ 2005-04-22 Richard Sandiford <rsandifo@redhat.com>
+
+ * configure.in (mep*): Add -mlibrary to FLAGS_FOR_TARGET.
+ * configure: Regenerate.
+
+ 2001-09-19 DJ Delorie <dj@redhat.com>
+
+ * configure.in (target_makefile_frag): use mt-mep
+
+ 2001-06-12 Don Howard <dhoward@redhat.com>
+
+ * configure.in: Remove gdb from MeP skip list.
+
+ 2001-04-05 DJ Delorie <dj@redhat.com>
+
+ * configure.in (noconfigdirs): Remove gcc from MeP skip list.
+
+ 2001-03-20 Ben Elliston <bje@redhat.com>
+
+ * configure.in (noconfigdirs): Add gcc and gdb for MeP.
+
+ 2001-03-19 Ben Elliston <bje@redhat.com>
+
+ * config.sub (mep, mep-*): Add.
+
+2007-01-31 Andreas Schwab <schwab@suse.de>
+
+ * Makefile.tpl (LDFLAGS): Substitute it.
+ * Makefile.in: Regenerate.
+
+2007-01-11 Paolo Bonzini <bonzini@gnu.org>
+
+ * configure.in: Change == to = in test command.
+ * configure: Regenerate.
+
+2007-01-11 Paolo Bonzini <bonzini@gnu.org>
+ Nick Clifton <nickc@redhat.com>
+ Kaveh R. Ghazi <ghazi@caip.rutgets.edu>
+
+ * configure.in (build_configargs, host_configargs, target_configargs):
+ Remove build/host/target parameters.
+ (host_libs): Add gmp and mpfr.
+ (GMP tests): Reorganize to allow in-tree GMP/MPFR.
+ * Makefile.def (gmp, mpfr): New.
+ (gcc): Remove target.
+ * Makefile.tpl (build_os, build_vendor, host_os, host_vendor,
+ target_os, target_vendor): New.
+ (configure): Add host_alias/target_alias arguments. Adjust invocations.
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+
+2007-01-11 Matt Fago <fago@earthlink.net>
+
+ * configure.in: Try to link to functions only in mpfr 2.2.x
+ to improve robustness of configure tests.
+ * configure: Regenerate.
+
+2007-01-08 Kai Tietz <kai.tietz@onevision.com>
+
+ * configure.in: Add support for an x86_64-mingw* target.
+ * configure: Regenerate.
+
+2007-01-05 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.tpl (all-target): Correct @if conditional for target
+ modules.
+ * configure.in: Omit libiberty if building only target libgcc.
+ * configure, Makefile.in: Regenerated.
+
+2007-01-04 Paolo Bonzini <bonzini@gnu.org>
+
+ * configure.in: Use DEV-PHASE to detect the default for --enable-werror.
+ * configure: Regenerate.
+
+2007-01-03 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.def (target_modules): Add libgcc.
+ (lang_env_dependencies): Remove default items. Use no_c and no_gcc.
+ * Makefile.tpl (clean-target-libgcc): Delete.
+ (configure-target-[+module+]): Emit --disable-bootstrap dependencies
+ on gcc even for bootstrapped modules. Rewrite handling of
+ lang_env_dependencies to loop over target_modules.
+ * configure.in (target_libraries): Add target-libgcc.
+ * Makefile.in, configure: Regenerated.
+
+2006-12-29 Paolo Bonzini <bonzini@gnu.org>
+
+ Sync with gcc:
+ 2006-12-29 Paolo Bonzini <bonzini@gnu.org>
+
+ * configure.in: Reorganize recognition of languages. Add
+ --enable-stage1-languages. Show supported languages for the chosen
+ target rather than all recognized languages.
+ * configure: Regenerate.
+
+ 2006-12-29 Paolo Bonzini <bonzini@gnu.org>
+
+ * Makefile.tpl (GCC_STRAP_TARGETS, all-prebootstrap): Remove.
+ * Makefile.in: Regenerate.
+
+ 2006-12-29 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * configure.in: Warn that MPFR 2.2.0 is buggy.
+ * configure: Regenerate.
+
+2006-12-27 Ian Lance Taylor <iant@google.com>
+
+ * configure.in: When removing Makefiles to force a reconfigure, also
+ remove prev-DIR*/Makefile.
+ * configure: Regenerate.
+
+2006-12-23 Kazu Hirata <kazu@codesourcery.com>
+
+ * config.bfd: Recognize fido.
+
+2006-12-19 Paolo Bonzini <bonzini@gnu.org>
+
+ Sync with gcc:
+
+ 2006-12-19 Paolo Bonzini <bonzini@gnu.org>
+
+ * configure.in: Remove "$build" case for powerpc-*-darwin* since
+ it only affects bootstrap and could be tested on "$host" as well.
+ * configure: Regenerate.
+ * config/mh-ppc-darwin: Add to the stage1 cflags here.
+
+ 2006-12-19 Paolo Bonzini <bonzini@gnu.org>
+
+ PR bootstrap/29544
+ * Makefile.def (flags_to_pass): Add STAGE1_CHECKING.
+ (bootstrap_stage): Add STAGE1_CHECKING to stage1 configure flags,
+ move here comment from Makefile.tpl.
+ * Makefile.tpl: Move some definitions higher in the file.
+ (STAGE1_CHECKING): New.
+ * configure.in: Add --enable-stage1-checking.
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+
+ 2006-12-03 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * configure.in: Update error message for missing GMP/MPFR.
+
+ * configure: Regenerate.
+
+ 2006-12-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * configure.in: Update MPFR version in error message.
+
+ * configure: Regenerate.
+
+ 2006-11-26 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * configure.in (--with-mpfr-dir, --with-gmp-dir): Remove flags.
+ (--with-mpfr-include, --with-mpfr-lib, --with-gmp-include,
+ --with-gmp-lib): New flags.
+
+ * configure: Regenerate.
+
+2006-12-12 Andreas Tobler <a.tobler@schweiz.org>
+
+ PR bootstrap/30134
+ * configure.in: Correct x86 darwin support for libjava to powerpc
+ and i?86 only.
+ * configure: Regenerate.
+
+2006-12-11 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.in: Handle spu makefile frag.
+ * Makefile.tpl (MAINT): Define
+ (MAINTAINER_MODE_FALSE, MAINTAINER_MODE_TRUE): Define.
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+
+2006-12-11 Ben Elliston <bje@au.ibm.com>
+
+ * config.sub, config.guess: Update from upstream sources.
+
+2006-12-11 Ben Elliston <bje@au.ibm.com>
+
+ * configure.in: Sync with GCC (spu-*-*).
+ * configure: Sync with GCC.
+
+2006-12-07 Mike Stump <mrs@apple.com>
+
+ * Makefile.def (dependencies): Add dependency for
+ install-target-libssp and install-target-libgomp on
+ install-gcc.
+ * Makefile.in: Regenerate.
+
+2006-11-16 Paolo Bonzini <bonzini@gnu.org>
+
+ * Makefile.tpl (clean-target-libgcc): Test for gcc Makefile presence.
+ (unstage): Test for stage_last presence.
+
+ PR bootstrap/29802
+ * Makefile.tpl (POSTSTAGE1_FLAGS_TO_PASS): Add HOST_SUBDIR in STAGE_PREFIX.
+ * Makefile.in: Regenerate.
+
+2006-11-14 DJ Delorie <dj@redhat.com>
+
+ * Makefile.tpl (clean-stage*): Sync with GCC (clean).
+ * Makefile.in: Sync with GCC.
+ * configure.in: Sync with GCC (mpfr, gmp).
+ * configure: Sync with GCC.
+
+2006-11-08 Jie Zhang <jie.zhang@analog.com>
+
+ * configure.in: Remove target-libgloss from noconfigdirs for
+ bfin-*-*.
+ * configure: Regenerated.
+
+2006-10-27 Jeff Johnston <jjohnstn@redhat.com>
+
+ * COPYING.NEWLIB: Add spu license.
+ * COPYING.LIBGLOSS: Ditto.
+
+2006-10-17 Brooks Moses <bmoses@stanford.edu>
+
+ * Makefile.def: Added pdf target handling.
+ * Makefile.tpl: Added pdf target handling.
+ * Makefile.in: Regenerated.
+
+2006-10-11 Jeff Johnston <jjohnstn@redhat.com>
+
+ * COPYING.NEWLIB: Updated.
+ * COPYING.LIBGLOSS: Ditto.
+
+2006-09-27 Dave Brolley <brolley@redhat.com>
+
+ * configure.in (RUNTEST): Look for 'runtest' in the source tree by using
+ $s instead of $r.
+ * configure: Regenerated.
+
+2006-09-26 Ben Elliston <bje@au.ibm.com>
+
+ * config.sub, config.guess: Update from upstream sources.
+
+2006-09-20 Thiemo Seufer <ths@mips.com>
+
+ * configure.in: Remove redundant handling of mips*-dec-bsd*. Likewise
+ for mipstx39-*-*. Disable libgloss for mips64*-*-linux*.
+ * configure: Regenerate.
+
+2006-08-30 Corinna Vinschen <corinna@vinschen.de>
+
+ * configure.in: Never build newlib for a Mingw host.
+ Never build newlib as Mingw target library.
+ Test the existence of winsup/cygwin for building a Cygwin newlib,
+ rather than just winsup.
+ Add winsup/mingw and winsup/w32api paths to FLAGS_FOR_TARGET if
+ building a Mingw target.
+ * configure: Regenerate.
+
+2006-08-15 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+ David Ung <davidu@mips.com>
+
+ * config.sub: Add support for sde as alias of mipsisa32-sde-elf.
+
+2006-07-25 Paolo Bonzini <bonzini@gnu.org>
+
+ Sync from GCC:
+ 2006-07-04 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR bootstrap/18058
+ * configure.in: Add -fkeep-inline-functions to CFLAGS for stage 1
+ if the bootstrap compiler is a GCC version that supports it.
+ * configure: Regenerate.
+
+2006-07-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.in: Allow mingw32 and cygwin targets to build cross-gdb.
+ * configure: Regenerated.
+
+2006-07-18 Paolo Bonzini <bonzini@gnu.org>
+
+ * Makefile.tpl (configure-stageN-MODULE): Pass --with-build-libsubdir
+ for stages after the first.
+
+2006-07-17 Jakub Jelinek <jakub@redhat.com>
+
+ * Makefile.def: Add dependencies for configure-opcodes
+ on configure-intl and all-opcodes on all-intl.
+ * Makefile.in: Regenerated.
+
+2006-07-04 Peter O'Gorman <peter@pogma.com>
+
+ * ltconfig: chmod 644 before ranlib during install.
+
+2006-07-03 Paolo Bonzini <bonzini@gnu.org>
+
+ * configure.in: Fix thinkos in previous check-in.
+ * configure: Regenerate.
+
+2006-07-03 Paolo Bonzini <bonzini@gnu.org>
+
+ Sync from gcc:
+
+ 2007-07-03 Paolo Bonzini <bonzini@gnu.org>
+
+ PR other/27063
+ * configure.in: Test subdir_requires and give an appropriate
+ error message.
+ * configure: Regenerate.
+
+ 2006-06-16 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ PR target/27540
+ * configure.in: Only enable libgomp on IRIX 6.
+ * configure: Regenerate.
+
+2006-06-20 David Ayers <d.ayers@inode.at>
+
+ PR bootstrap/28072
+ * configure.in: Add target-boehm-gc to noconfigdirs depending on
+ whether target-libjava is being configured instead of whether the
+ java front end is enabled.
+ * configure: Regenerate.
+
+2006-06-15 Mark Shinwell <shinwell@codesourcery.com>
+
+ * include/elf/arm.h: Correct names of R_ARM_LDC_G{0,1,2}
+ to R_ARM_LDC_SB_G{0,1,2} respectively.
+
+2006-06-15 Paolo Bonzini <bonzini@gnu.org>
+
+ * Makefile.tpl (POSTSTAGE1_HOST_EXPORTS): Export CFLAGS and LDFLAGS
+ too.
+ * Makefile.in: Regenerate.
+
+2006-06-13 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ Sync from gcc:
+
+ 2006-06-12 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+ * configure.in: Don't enable libgomp on hpux10.
+ * configure: Rebuilt.
+
+2006-06-13 David Ayers <d.ayers@inode.at>
+
+ Sync from gcc:
+
+ 2006-06-12 David Ayers <d.ayers@inode.at>
+
+ PR bootstrap/27963
+ PR target/19970
+ * configure.in: Remove target-boehm-gc from noconfigdirs where
+ ${libgcj} is specified.
+ * configure: Regenerate.
+
+2006-06-08 Jeff Johnston <jjohnstn@redhat.com>
+
+ Sync from gcc:
+
+ 2005-01-12 David Edelsohn <edelsohn@gnu.org>
+ Andreas Schwab <schwab@suse.de>
+
+ PR bootstrap/18033
+ * config-ml.in: Eval option if surrounded by single quotes.
+
+2006-06-07 Carlos O'Donell <carlos@codesourcery.com>
+
+ Sync from gcc:
+
+ 2006-06-06 David Ayers <d.ayers@inode.at>
+
+ PR libobjc/13946
+ * Makefile.def: Add dependencies for libobjc which boehm-gc.
+ * Makefile.in: Regenerate.
+ * configure.in: Add --enable-objc-gc at toplevel and have it
+ enable boehm-gc for Objective-C.
+ Remove target-boehm-gc from libgcj.
+ Add target-boehm-gc to target_libraries.
+ Add target-boehm-gc to noconfigdirs where ${libgcj}
+ is specified.
+ Assert that boehm-gc is supported when requested for Objective-C.
+ Only build boehm-gc if needed either for Java or Objective-C.
+ * configure: Regenerate.
+
+ 2006-06-05 Paolo Bonzini <bonzini@gnu.org>
+
+ PR 27674
+ * Makefile.tpl (configure-[+prefix+][+module+],
+ all-[+prefix+][+module+]): Depend on stage_current if bootstrapping.
+ Remove rule to unstage bootstrapped modules.
+ (stage_current): New.
+ * Makefile.in: Regenerate.
+
+ 2006-05-20 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+ Andreas Tobler <a.tobler@schweiz.ch>
+
+ * configure.in: Enable libgcj for hppa*-hp-hpux11*.
+ * configure: Rebuilt.
+
+ Revert
+ 2006-01-31 Richard Guenther <rguenther@suse.de>
+ Paolo Bonzini <bonzini@gnu.org>
+
+ * Makefile.def (target_modules): Add libgcc-math target module.
+ * configure.in (target_libraries): Add libgcc-math target library.
+ (--enable-libgcc-math): New configure switch.
+ * Makefile.in: Re-generate.
+ * configure: Re-generate.
+
+2006-06-05 Jeff Johnston <jjohnstn@redhat.com>
+
+ * config-ml.in: Alter CCASFLAGS to include special
+ multilib options the same as is done for CFLAGS.
+
+2006-05-31 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.def: Added dependencies from sim and gdb on intl, and
+ added configure dependencies to everything with an all dependency
+ on intl.
+ * gettext.m4: Removed.
+ * src-release (DEVO_SUPPORT): Don't mention gettext.m4.
+ (GDB_SUPPORT_DIRS): Add intl.
+ * Makefile.in: Regenerated.
+
+2006-05-25 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * src-release (DEVO_SUPPORT): Add config.rpath.
+
+2006-05-25 Paolo Bonzini <bonzini@gnu.org>
+
+ * Makefile.def (bfd, opcodes): Fix lib_path.
+ * Makefile.tpl (POSTSTAGE1_FLAGS_TO_PASS): Replace ADAC with ADAFLAGS.
+ (restrap): Move under "@if gcc-bootstrap". Fix typo.
+ * Makefile.in: Regenerate.
+
+2006-05-24 Mark Shinwell <shinwell@codesourcery.com>
+
+ * configure.in: Enable gprof for cross builds.
+ * configure: Regenerate.
+
2006-05-17 Daniel Jacobowitz <dan@codesourcery.com>
* src-release (MAKEINFOFLAGS): Define.
(do-proto-toplev): Pass MAKEINFOFLAGS to submakes.
+2006-05-14 Ben Elliston <bje@au.ibm.com>
+
+ * config.sub, config.guess: Update from upstream sources.
+
+2006-05-12 Ben Elliston <bje@au.ibm.com>
+
+ * config.sub, config.guess: Update from upstream sources.
+
+2006-05-04 Steve Ellcey <sje@cup.hp.com>
+
+ * blt, iwidgets, mmalloc: Remove directories.
+
+2006-05-01 DJ Delorie <dj@redhat.com>
+
+ * configure.in: Restore CFLAGS if GMP isn't present.
+ * configure: Regenerate.
+
+2006-04-18 DJ Delorie <dj@redhat.com>
+
+ * configure.in (m32c): Build libstdc++-v3. Pass flags to
+ reference libgloss so that libssp can be built in a combined
+ tree.
+ * configure: Regenerate.
+
2006-04-10 Ben Elliston <bje@au.ibm.com>
* contrib: Remove directory.
@@ -35,7 +718,7 @@
* configure: Regenerate.
2006-02-21 Rafael Avila de Espindola <rafael.espindola@gmail.com>
-
+
* Makefile.tpl (BUILD_CONFIGDIRS): Remove.
(TARGET_CONFIGDIRS): Remove.
* configure.in: Remove AC_SUBST(target_configdirs).
@@ -105,7 +788,7 @@
2006-02-14 Paolo Bonzini <bonzini@gnu.org>
Andreas Schwab <schwab@suse.de>
-
+
* configure: Regenerate.
2006-01-16 Paolo Bonzini <bonzini@gnu.org>
@@ -117,7 +800,7 @@
2006-01-16 Nick Clifton <nickc@redhat.com>
- * config.sub, config.guess: Sync from config repository.
+ * config.sub, config.guess: Sync from config repository.
2006-01-05 Alexandre Oliva <aoliva@redhat.com>
@@ -397,7 +1080,7 @@
CONFIGURED_LIPO_FOR_TARGET, CONFIGURED_STRIP_FOR_TARGET.
* Makefile.in: Regenerate.
* configure: Regenerate.
-
+
2005-09-19 David Edelsohn <edelsohn@gnu.org>
* configure.in (powerpc-*-aix*): Add target-libssp to noconfigdirs.
@@ -464,7 +1147,7 @@
2005-07-27 Mark Mitchell <mark@codesourcery.com>
* Makefile.tpl (EXTRA_TARGET_FLAGS): Set LDFLAGS=LDFLAGS_FOR_TARGET.
- * Makefile.def (flags_to_pass): Add LDFLAGS_FOR_TARGET.
+ * Makefile.def (flags_to_pass): Add LDFLAGS_FOR_TARGET.
* Makefile.in: Regenerated.
2005-07-26 Mark Mitchell <mark@codesourcery.com>
@@ -489,7 +1172,7 @@
* configure.in: Add cases for Renesas m32c.
* configure: Regenerated.
-
+
2005-07-14 Kelley Cook <kcook@gcc.gnu.org>
* COPYING, compile, config-ml.in, config.guess,
@@ -604,7 +1287,7 @@
2005-05-19 Paul Brook <paul@codesourcery.com>
- * configure.in: Rewrite misleading error message when requested
+ * configure.in: Rewrite misleading error message when requested
language cannot be built.
* configure: Regenerate.
diff --git a/MAINTAINERS b/MAINTAINERS
index b2077e7c26a1..6c5f732805e9 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -47,15 +47,15 @@ gdb/; readline/; sim/; GDB's part of include/
include/
See binutils/, gdb/, sid/, gcc/, libiberty/ etc.
-libiberty/; libiberty's part of include/
+intl/; config.rhost; libiberty/; libiberty's part of include/
gcc: http://gcc.gnu.org
Changes need to be done in tandem with the official GCC
sources or submitted to the master file maintainer and brought
- in via a merge. Note: approved patches in gcc's libiberty
- are automatically approved in this libiberty also; feel free
- to merge them yourself if needed sooner than the next merge.
- Otherwise, changes are automatically merged, usually within
- a day.
+ in via a merge. Note: approved patches in gcc's libiberty or
+ intl are automatically approved in this libiberty and intl also;
+ feel free to merge them yourself if needed sooner than the next
+ merge. Otherwise, changes are automatically merged, usually
+ within a day.
ltconfig; ltmain.sh; ltcf-*.sh
libtool: http://www.gnu.org/software/libtool/
@@ -99,7 +99,7 @@ winsup/
See also winsup/MAINTAINERS.
config-ml.in; makefile.vms; mkdep; setup.com;
-etc/; intl/; utils/;
+etc/; utils/;
Any global maintainer can approve changes to these
files and directories.
diff --git a/Makefile.def b/Makefile.def
index 4c58ab5a71f7..3d2c6eeeb44b 100644
--- a/Makefile.def
+++ b/Makefile.def
@@ -30,15 +30,14 @@ build_modules= { module= byacc; };
build_modules= { module= flex; };
build_modules= { module= m4; };
build_modules= { module= texinfo; };
-build_modules= { module= fixincludes;
- extra_configure_args='--target=$(target)'; };
+build_modules= { module= fixincludes; };
host_modules= { module= ash; };
host_modules= { module= autoconf; };
host_modules= { module= automake; };
host_modules= { module= bash; };
-host_modules= { module= bfd; lib_path=.; bootstrap=true; };
-host_modules= { module= opcodes; lib_path=.; bootstrap=true; };
+host_modules= { module= bfd; lib_path=.libs; bootstrap=true; };
+host_modules= { module= opcodes; lib_path=.libs; bootstrap=true; };
host_modules= { module= binutils; bootstrap=true; };
host_modules= { module= bison; no_check_cross= true; };
host_modules= { module= byacc; no_check_cross= true; };
@@ -52,18 +51,23 @@ host_modules= { module= fileutils; };
host_modules= { module= findutils; };
host_modules= { module= find; };
host_modules= { module= fixincludes;
- missing= info;
- missing= dvi;
- missing= TAGS;
- missing= install-info;
- missing= installcheck; };
+ missing= TAGS; };
host_modules= { module= flex; no_check_cross= true; };
host_modules= { module= gas; bootstrap=true; };
host_modules= { module= gcc; bootstrap=true;
- target="`if [ -f stage_last ]; then echo quickstrap ; else echo all; fi`";
extra_make_flags="$(EXTRA_GCC_FLAGS)"; };
host_modules= { module= gawk; };
host_modules= { module= gettext; };
+host_modules= { module= gmp; lib_path=.libs; bootstrap=true;
+ extra_configure_flags='--disable-shared';
+ no_install= true;
+ host="none-${host_vendor}-${host_os}";
+ target="none-${host_vendor}-${host_os}"; };
+host_modules= { module= mpfr; lib_path=.libs; bootstrap=true;
+ extra_configure_flags='--disable-shared --with-gmp-build=$$r/$(HOST_SUBDIR)/gmp';
+ no_install= true;
+ host="none-${host_vendor}-${host_os}";
+ target="none-${host_vendor}-${host_os}"; };
host_modules= { module= gnuserv; };
host_modules= { module= gprof; };
host_modules= { module= gzip; };
@@ -117,8 +121,8 @@ host_modules= { module= gnattools; };
target_modules = { module= libstdc++-v3; lib_path=.libs; raw_cxx=true; };
target_modules = { module= libmudflap; lib_path=.libs; };
target_modules = { module= libssp; lib_path=.libs; };
-target_modules = { module= libgcc-math; lib_path=.libs; };
target_modules = { module= newlib; };
+target_modules = { module= libgcc; bootstrap=true; no_check=true; };
target_modules = { module= libgfortran; };
target_modules = { module= libobjc; };
target_modules = { module= libtermcap; no_check=true;
@@ -148,6 +152,8 @@ recursive_targets = { make_target= info;
depend=configure; };
recursive_targets = { make_target= dvi;
depend=configure; };
+recursive_targets = { make_target= pdf;
+ depend=configure; };
recursive_targets = { make_target= html;
depend=configure; };
recursive_targets = { make_target= TAGS;
@@ -155,6 +161,9 @@ recursive_targets = { make_target= TAGS;
recursive_targets = { make_target= install-info;
depend=configure;
depend=info; };
+recursive_targets = { make_target= install-pdf;
+ depend=configure;
+ depend=pdf; };
recursive_targets = { make_target= install-html;
depend=configure;
depend=html; };
@@ -178,6 +187,7 @@ flags_to_pass = { flag= includedir ; };
flags_to_pass = { flag= datarootdir ; };
flags_to_pass = { flag= docdir ; };
flags_to_pass = { flag= infodir ; };
+flags_to_pass = { flag= pdfdir ; };
flags_to_pass = { flag= htmldir ; };
flags_to_pass = { flag= libdir ; };
flags_to_pass = { flag= libexecdir ; };
@@ -224,7 +234,10 @@ flags_to_pass = { flag= LDFLAGS ; };
flags_to_pass = { flag= LIBCFLAGS ; };
flags_to_pass = { flag= LIBCXXFLAGS ; };
flags_to_pass = { flag= STAGE1_CFLAGS ; };
+flags_to_pass = { flag= STAGE1_CHECKING ; };
flags_to_pass = { flag= STAGE1_LANGUAGES ; };
+flags_to_pass = { flag= GNATBIND ; };
+flags_to_pass = { flag= GNATMAKE ; };
// Target tools
flags_to_pass = { flag= AR_FOR_TARGET ; };
@@ -271,7 +284,9 @@ dependencies = { module=configure-gcc; on=all-binutils; };
dependencies = { module=configure-gcc; on=all-gas; };
dependencies = { module=configure-gcc; on=all-ld; };
dependencies = { module=all-gcc; on=all-libiberty; hard=true; };
+dependencies = { module=all-gcc; on=all-gmp; };
dependencies = { module=all-gcc; on=all-intl; };
+dependencies = { module=all-gcc; on=all-mpfr; };
dependencies = { module=all-gcc; on=all-build-texinfo; };
dependencies = { module=all-gcc; on=all-build-bison; };
dependencies = { module=all-gcc; on=all-build-byacc; };
@@ -294,11 +309,15 @@ dependencies = { module=all-fixincludes; on=all-libiberty; };
dependencies = { module=all-gnattools; on=all-target-libada; };
+dependencies = { module=configure-mpfr; on=all-gmp; };
+
// Host modules specific to gdb.
+dependencies = { module=configure-gdb; on=configure-intl; };
dependencies = { module=configure-gdb; on=configure-sim; };
+dependencies = { module=configure-gdb; on=all-bfd; };
+dependencies = { module=all-gdb; on=all-intl; };
dependencies = { module=all-gdb; on=all-libiberty; };
dependencies = { module=all-gdb; on=all-opcodes; };
-dependencies = { module=all-gdb; on=all-bfd; };
dependencies = { module=all-gdb; on=all-readline; };
dependencies = { module=all-gdb; on=all-build-bison; };
dependencies = { module=all-gdb; on=all-build-byacc; };
@@ -312,9 +331,11 @@ dependencies = { module=all-libgui; on=all-itcl; };
// Host modules specific to binutils.
dependencies = { module=configure-bfd; on=configure-libiberty; hard=true; };
+dependencies = { module=configure-bfd; on=configure-intl; };
dependencies = { module=all-bfd; on=all-libiberty; };
dependencies = { module=all-bfd; on=all-intl; };
+dependencies = { module=configure-binutils; on=configure-intl; };
dependencies = { module=all-binutils; on=all-libiberty; };
dependencies = { module=all-binutils; on=all-opcodes; };
dependencies = { module=all-binutils; on=all-bfd; };
@@ -331,14 +352,17 @@ dependencies = { module=install-binutils; on=install-opcodes; };
// libopcodes depends on libbfd
dependencies = { module=install-opcodes; on=install-bfd; };
+dependencies = { module=configure-gas; on=configure-intl; };
dependencies = { module=all-gas; on=all-libiberty; };
dependencies = { module=all-gas; on=all-opcodes; };
dependencies = { module=all-gas; on=all-bfd; };
dependencies = { module=all-gas; on=all-intl; };
+dependencies = { module=configure-gprof; on=configure-intl; };
dependencies = { module=all-gprof; on=all-libiberty; };
dependencies = { module=all-gprof; on=all-bfd; };
dependencies = { module=all-gprof; on=all-opcodes; };
dependencies = { module=all-gprof; on=all-intl; };
+dependencies = { module=configure-ld; on=configure-intl; };
dependencies = { module=all-ld; on=all-libiberty; };
dependencies = { module=all-ld; on=all-bfd; };
dependencies = { module=all-ld; on=all-opcodes; };
@@ -347,8 +371,10 @@ dependencies = { module=all-ld; on=all-build-byacc; };
dependencies = { module=all-ld; on=all-build-flex; };
dependencies = { module=all-ld; on=all-intl; };
+dependencies = { module=configure-opcodes; on=configure-intl; };
dependencies = { module=all-opcodes; on=all-bfd; };
dependencies = { module=all-opcodes; on=all-libiberty; };
+dependencies = { module=all-opcodes; on=all-intl; };
// Other host modules in the 'src' repository.
dependencies = { module=all-dejagnu; on=all-tcl; };
@@ -378,6 +404,8 @@ dependencies = { module=all-sid; on=all-tk; };
dependencies = { module=install-sid; on=install-tcl; };
dependencies = { module=install-sid; on=install-tk; };
+dependencies = { module=configure-sim; on=configure-intl; };
+dependencies = { module=all-sim; on=all-intl; };
dependencies = { module=all-sim; on=all-libiberty; };
dependencies = { module=all-sim; on=all-bfd; };
dependencies = { module=all-sim; on=all-opcodes; };
@@ -425,18 +453,17 @@ dependencies = { module=all-tar; on=all-build-texinfo; };
dependencies = { module=all-uudecode; on=all-build-texinfo; };
// Target modules. These can also have dependencies on the language
-// environment (e.g. on libstdc++).
-lang_env_dependencies = { module=boehm-gc; };
+// environment (e.g. on libstdc++). By default target modules depend
+// on libgcc and newlib/libgloss.
lang_env_dependencies = { module=gperf; cxx=true; };
-lang_env_dependencies = { module=libada; };
-lang_env_dependencies = { module=libgfortran; };
-lang_env_dependencies = { module=libffi; };
lang_env_dependencies = { module=libjava; cxx=true; };
-lang_env_dependencies = { module=libmudflap; };
-lang_env_dependencies = { module=libobjc; };
-lang_env_dependencies = { module=libssp; };
-lang_env_dependencies = { module=libstdc++-v3; };
-lang_env_dependencies = { module=zlib; };
+lang_env_dependencies = { module=newlib; no_c=true; };
+lang_env_dependencies = { module=libgloss; no_c=true; };
+lang_env_dependencies = { module=libgcc; no_gcc=true; no_c=true; };
+// libiberty does not depend on newlib or libgloss because it must be
+// built newlib on some targets (e.g. Cygwin). It still needs
+// a dependency on libgcc for native targets to configure.
+lang_env_dependencies = { module=libiberty; no_c=true; };
dependencies = { module=configure-target-boehm-gc; on=configure-target-qthreads; };
dependencies = { module=configure-target-fastjar; on=configure-target-zlib; };
@@ -451,7 +478,9 @@ dependencies = { module=all-target-libjava; on=all-target-zlib; };
dependencies = { module=all-target-libjava; on=all-target-boehm-gc; };
dependencies = { module=all-target-libjava; on=all-target-qthreads; };
dependencies = { module=all-target-libjava; on=all-target-libffi; };
+dependencies = { module=configure-target-libobjc; on=configure-target-boehm-gc; };
dependencies = { module=all-target-libobjc; on=all-target-libiberty; };
+dependencies = { module=all-target-libobjc; on=all-target-boehm-gc; };
dependencies = { module=all-target-libstdc++-v3; on=all-target-libiberty; };
// Target modules in the 'src' repository.
@@ -468,33 +497,40 @@ dependencies = { module=all-target-winsup; on=all-target-libtermcap; };
// Toplevel bootstrap
bootstrap_stage = {
id=1 ;
- stage_configure_flags='--disable-intermodule \
+
+ // * We force-disable intermodule optimizations, even if
+ // --enable-intermodule was passed, since the installed compiler
+ // probably can't handle them. Luckily, autoconf always respects
+ // the last argument when conflicting --enable arguments are passed.
+ // * Likewise, we force-disable coverage flags, since the installed
+ // compiler probably has never heard of them.
+ stage_configure_flags='--disable-intermodule $(STAGE1_CHECKING) \
--disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"' ;
- stage_make_flags='CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)"' ; };
+ stage_cflags='$(STAGE1_CFLAGS)' ; };
bootstrap_stage = {
id=2 ; prev=1 ;
bootstrap_target=bootstrap2 ;
stage_configure_flags="@stage2_werror_flag@" ;
- stage_make_flags="" ; };
+ stage_cflags="$(BOOT_CFLAGS)" ; };
bootstrap_stage = {
id=3 ; prev=2 ; lean=1 ;
compare_target=compare ;
bootstrap_target=bootstrap ;
cleanstrap_target=cleanstrap ;
stage_configure_flags="@stage2_werror_flag@" ;
- stage_make_flags="" ; };
+ stage_cflags="$(BOOT_CFLAGS)" ; };
bootstrap_stage = {
id=4 ; prev=3 ; lean=2 ;
compare_target=compare3 ;
bootstrap_target=bootstrap4 ;
stage_configure_flags="@stage2_werror_flag@" ;
- stage_make_flags="" ; };
+ stage_cflags="$(BOOT_CFLAGS)" ; };
bootstrap_stage = {
id=profile ; prev=1 ;
stage_configure_flags="@stage2_werror_flag@" ;
- stage_make_flags='CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"' ; };
+ stage_cflags='$(BOOT_CFLAGS) -fprofile-generate' ; };
bootstrap_stage = {
id=feedback ; prev=profile ;
bootstrap_target=profiledbootstrap ;
stage_configure_flags="@stage2_werror_flag@" ;
- stage_make_flags='CFLAGS="$(BOOT_CFLAGS) -fprofile-use"' ; };
+ stage_cflags='$(BOOT_CFLAGS) -fprofile-use' ; };
diff --git a/Makefile.in b/Makefile.in
index 2d0da2e7c3c5..e34410cf18bc 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -25,11 +25,17 @@
# -------------------------------
VPATH=@srcdir@
-build_alias=@build_alias@
+build_alias=@build_noncanonical@
+build_vendor=@build_vendor@
+build_os=@build_os@
build=@build@
-host_alias=@host_alias@
+host_alias=@host_noncanonical@
+host_vendor=@host_vendor@
+host_os=@host_os@
host=@host@
-target_alias=@target_alias@
+target_alias=@target_noncanonical@
+target_vendor=@target_vendor@
+target_os=@target_os@
target=@target@
program_transform_name = @program_transform_name@
@@ -52,6 +58,7 @@ oldincludedir = @oldincludedir@
infodir = @infodir@
datarootdir = @datarootdir@
docdir = @docdir@
+pdfdir = @pdfdir@
htmldir = @htmldir@
mandir = @mandir@
man1dir = $(mandir)/man1
@@ -70,6 +77,9 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_DATA = @INSTALL_DATA@
LN = @LN@
LN_S = @LN_S@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
# -------------------------------------------------
# Miscellaneous non-standard autoconf-set variables
@@ -177,7 +187,8 @@ POSTSTAGE1_HOST_EXPORTS = \
CC_FOR_BUILD="$(STAGE_CC_WRAPPER) \
$$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \
-B$$r/$(HOST_SUBDIR)/prev-gcc/ \
- -B$(build_tooldir)/bin/"; export CC_FOR_BUILD;
+ -B$(build_tooldir)/bin/"; export CC_FOR_BUILD; \
+ LDFLAGS="$(BOOT_LDFLAGS)"; export LDFLAGS;
# Target libraries are put under this directory:
TARGET_SUBDIR = @target_subdir@
@@ -285,13 +296,26 @@ RANLIB = @RANLIB@
STRIP = @STRIP@
WINDRES = @WINDRES@
+GNATBIND = @GNATBIND@
+GNATMAKE = @GNATMAKE@
+
CFLAGS = @CFLAGS@
-LDFLAGS =
+LDFLAGS = @LDFLAGS@
LIBCFLAGS = $(CFLAGS)
CXXFLAGS = @CXXFLAGS@
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
PICFLAG =
+# Only build the C compiler for stage1, because that is the only one that
+# we can guarantee will build with the native compiler, and also it is the
+# only thing useful for building stage2. STAGE1_CFLAGS (via CFLAGS),
+# MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
+# overrideable (for a bootstrap build stage1 also builds gcc.info).
+
+STAGE1_CFLAGS=@stage1_cflags@
+STAGE1_CHECKING=@stage1_checking@
+STAGE1_LANGUAGES=@stage1_languages@
+
# -----------------------------------------------
# Programs producing files for the TARGET machine
# -----------------------------------------------
@@ -354,7 +378,7 @@ all:
# This is the list of directories that may be needed in RPATH_ENVVAR
# so that prorgams built for the target machine work.
-TARGET_LIB_PATH = $(TARGET_LIB_PATH_libstdc++-v3)$(TARGET_LIB_PATH_libmudflap)$(TARGET_LIB_PATH_libssp)$(TARGET_LIB_PATH_libgcc-math)$(TARGET_LIB_PATH_libgomp)$(HOST_LIB_PATH_gcc)
+TARGET_LIB_PATH = $(TARGET_LIB_PATH_libstdc++-v3)$(TARGET_LIB_PATH_libmudflap)$(TARGET_LIB_PATH_libssp)$(TARGET_LIB_PATH_libgomp)$(HOST_LIB_PATH_gcc)
@if target-libstdc++-v3
TARGET_LIB_PATH_libstdc++-v3 = $$r/$(TARGET_SUBDIR)/libstdc++-v3/.libs:
@@ -368,10 +392,6 @@ TARGET_LIB_PATH_libmudflap = $$r/$(TARGET_SUBDIR)/libmudflap/.libs:
TARGET_LIB_PATH_libssp = $$r/$(TARGET_SUBDIR)/libssp/.libs:
@endif target-libssp
-@if target-libgcc-math
-TARGET_LIB_PATH_libgcc-math = $$r/$(TARGET_SUBDIR)/libgcc-math/.libs:
-@endif target-libgcc-math
-
@if target-libgomp
TARGET_LIB_PATH_libgomp = $$r/$(TARGET_SUBDIR)/libgomp/.libs:
@endif target-libgomp
@@ -380,7 +400,7 @@ TARGET_LIB_PATH_libgomp = $$r/$(TARGET_SUBDIR)/libgomp/.libs:
# This is the list of directories that may be needed in RPATH_ENVVAR
# so that programs built for the host machine work.
-HOST_LIB_PATH = $(HOST_LIB_PATH_bfd)$(HOST_LIB_PATH_opcodes)
+HOST_LIB_PATH = $(HOST_LIB_PATH_bfd)$(HOST_LIB_PATH_opcodes)$(HOST_LIB_PATH_gmp)$(HOST_LIB_PATH_mpfr)
# Define HOST_LIB_PATH_gcc here, for the sake of TARGET_LIB_PATH, ouch
@if gcc
@@ -390,14 +410,24 @@ HOST_LIB_PATH_gcc = $$r/$(HOST_SUBDIR)/gcc:$$r/$(HOST_SUBDIR)/prev-gcc:
@if bfd
HOST_LIB_PATH_bfd = \
- $$r/$(HOST_SUBDIR)/bfd/.:$$r/$(HOST_SUBDIR)/prev-bfd/.:
+ $$r/$(HOST_SUBDIR)/bfd/.libs:$$r/$(HOST_SUBDIR)/prev-bfd/.libs:
@endif bfd
@if opcodes
HOST_LIB_PATH_opcodes = \
- $$r/$(HOST_SUBDIR)/opcodes/.:$$r/$(HOST_SUBDIR)/prev-opcodes/.:
+ $$r/$(HOST_SUBDIR)/opcodes/.libs:$$r/$(HOST_SUBDIR)/prev-opcodes/.libs:
@endif opcodes
+@if gmp
+HOST_LIB_PATH_gmp = \
+ $$r/$(HOST_SUBDIR)/gmp/.libs:$$r/$(HOST_SUBDIR)/prev-gmp/.libs:
+@endif gmp
+
+@if mpfr
+HOST_LIB_PATH_mpfr = \
+ $$r/$(HOST_SUBDIR)/mpfr/.libs:$$r/$(HOST_SUBDIR)/prev-mpfr/.libs:
+@endif mpfr
+
# Flags to pass down to all sub-makes.
BASE_FLAGS_TO_PASS = \
@@ -411,6 +441,7 @@ BASE_FLAGS_TO_PASS = \
"datarootdir=$(datarootdir)" \
"docdir=$(docdir)" \
"infodir=$(infodir)" \
+ "pdfdir=$(pdfdir)" \
"htmldir=$(htmldir)" \
"libdir=$(libdir)" \
"libexecdir=$(libexecdir)" \
@@ -453,7 +484,10 @@ BASE_FLAGS_TO_PASS = \
"LIBCFLAGS=$(LIBCFLAGS)" \
"LIBCXXFLAGS=$(LIBCXXFLAGS)" \
"STAGE1_CFLAGS=$(STAGE1_CFLAGS)" \
+ "STAGE1_CHECKING=$(STAGE1_CHECKING)" \
"STAGE1_LANGUAGES=$(STAGE1_LANGUAGES)" \
+ "GNATBIND=$(GNATBIND)" \
+ "GNATMAKE=$(GNATMAKE)" \
"AR_FOR_TARGET=$(AR_FOR_TARGET)" \
"AS_FOR_TARGET=$(AS_FOR_TARGET)" \
"CC_FOR_TARGET=$(CC_FOR_TARGET)" \
@@ -512,6 +546,14 @@ X11_FLAGS_TO_PASS = \
'X11_EXTRA_CFLAGS=$(X11_EXTRA_CFLAGS)' \
'X11_EXTRA_LIBS=$(X11_EXTRA_LIBS)'
+# Flags to pass to stage2 and later makes.
+
+POSTSTAGE1_FLAGS_TO_PASS = \
+ CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
+ GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind" \
+ LDFLAGS="$(BOOT_LDFLAGS)" \
+ "`echo 'ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
+
# Flags to pass down to makes which are built with the target environment.
# The double $ decreases the length of the command line; those variables
# are set in BASE_FLAGS_TO_PASS, and the sub-make will expand them. The
@@ -577,6 +619,8 @@ configure-host: \
maybe-configure-gcc \
maybe-configure-gawk \
maybe-configure-gettext \
+ maybe-configure-gmp \
+ maybe-configure-mpfr \
maybe-configure-gnuserv \
maybe-configure-gprof \
maybe-configure-gzip \
@@ -626,8 +670,8 @@ configure-target: \
maybe-configure-target-libstdc++-v3 \
maybe-configure-target-libmudflap \
maybe-configure-target-libssp \
- maybe-configure-target-libgcc-math \
maybe-configure-target-newlib \
+ maybe-configure-target-libgcc \
maybe-configure-target-libgfortran \
maybe-configure-target-libobjc \
maybe-configure-target-libtermcap \
@@ -709,6 +753,12 @@ all-host: maybe-all-gcc
@endif gcc-no-bootstrap
all-host: maybe-all-gawk
all-host: maybe-all-gettext
+@if gmp-no-bootstrap
+all-host: maybe-all-gmp
+@endif gmp-no-bootstrap
+@if mpfr-no-bootstrap
+all-host: maybe-all-mpfr
+@endif mpfr-no-bootstrap
all-host: maybe-all-gnuserv
all-host: maybe-all-gprof
all-host: maybe-all-gzip
@@ -771,8 +821,10 @@ all-host: maybe-all-gnattools
all-target: maybe-all-target-libstdc++-v3
all-target: maybe-all-target-libmudflap
all-target: maybe-all-target-libssp
-all-target: maybe-all-target-libgcc-math
all-target: maybe-all-target-newlib
+@if target-libgcc-no-bootstrap
+all-target: maybe-all-target-libgcc
+@endif target-libgcc-no-bootstrap
all-target: maybe-all-target-libgfortran
all-target: maybe-all-target-libobjc
all-target: maybe-all-target-libtermcap
@@ -830,6 +882,8 @@ info-host: maybe-info-gas
info-host: maybe-info-gcc
info-host: maybe-info-gawk
info-host: maybe-info-gettext
+info-host: maybe-info-gmp
+info-host: maybe-info-mpfr
info-host: maybe-info-gnuserv
info-host: maybe-info-gprof
info-host: maybe-info-gzip
@@ -880,8 +934,8 @@ info-host: maybe-info-gnattools
info-target: maybe-info-target-libstdc++-v3
info-target: maybe-info-target-libmudflap
info-target: maybe-info-target-libssp
-info-target: maybe-info-target-libgcc-math
info-target: maybe-info-target-newlib
+info-target: maybe-info-target-libgcc
info-target: maybe-info-target-libgfortran
info-target: maybe-info-target-libobjc
info-target: maybe-info-target-libtermcap
@@ -934,6 +988,8 @@ dvi-host: maybe-dvi-gas
dvi-host: maybe-dvi-gcc
dvi-host: maybe-dvi-gawk
dvi-host: maybe-dvi-gettext
+dvi-host: maybe-dvi-gmp
+dvi-host: maybe-dvi-mpfr
dvi-host: maybe-dvi-gnuserv
dvi-host: maybe-dvi-gprof
dvi-host: maybe-dvi-gzip
@@ -984,8 +1040,8 @@ dvi-host: maybe-dvi-gnattools
dvi-target: maybe-dvi-target-libstdc++-v3
dvi-target: maybe-dvi-target-libmudflap
dvi-target: maybe-dvi-target-libssp
-dvi-target: maybe-dvi-target-libgcc-math
dvi-target: maybe-dvi-target-newlib
+dvi-target: maybe-dvi-target-libgcc
dvi-target: maybe-dvi-target-libgfortran
dvi-target: maybe-dvi-target-libobjc
dvi-target: maybe-dvi-target-libtermcap
@@ -1003,6 +1059,112 @@ dvi-target: maybe-dvi-target-rda
dvi-target: maybe-dvi-target-libada
dvi-target: maybe-dvi-target-libgomp
+.PHONY: do-pdf
+do-pdf:
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(MAKE) $(RECURSE_FLAGS_TO_PASS) pdf-host \
+ pdf-target
+
+
+.PHONY: pdf-host
+
+pdf-host: maybe-pdf-ash
+pdf-host: maybe-pdf-autoconf
+pdf-host: maybe-pdf-automake
+pdf-host: maybe-pdf-bash
+pdf-host: maybe-pdf-bfd
+pdf-host: maybe-pdf-opcodes
+pdf-host: maybe-pdf-binutils
+pdf-host: maybe-pdf-bison
+pdf-host: maybe-pdf-byacc
+pdf-host: maybe-pdf-bzip2
+pdf-host: maybe-pdf-dejagnu
+pdf-host: maybe-pdf-diff
+pdf-host: maybe-pdf-dosutils
+pdf-host: maybe-pdf-etc
+pdf-host: maybe-pdf-fastjar
+pdf-host: maybe-pdf-fileutils
+pdf-host: maybe-pdf-findutils
+pdf-host: maybe-pdf-find
+pdf-host: maybe-pdf-fixincludes
+pdf-host: maybe-pdf-flex
+pdf-host: maybe-pdf-gas
+pdf-host: maybe-pdf-gcc
+pdf-host: maybe-pdf-gawk
+pdf-host: maybe-pdf-gettext
+pdf-host: maybe-pdf-gmp
+pdf-host: maybe-pdf-mpfr
+pdf-host: maybe-pdf-gnuserv
+pdf-host: maybe-pdf-gprof
+pdf-host: maybe-pdf-gzip
+pdf-host: maybe-pdf-hello
+pdf-host: maybe-pdf-indent
+pdf-host: maybe-pdf-intl
+pdf-host: maybe-pdf-tcl
+pdf-host: maybe-pdf-itcl
+pdf-host: maybe-pdf-ld
+pdf-host: maybe-pdf-libcpp
+pdf-host: maybe-pdf-libdecnumber
+pdf-host: maybe-pdf-libgui
+pdf-host: maybe-pdf-libiberty
+pdf-host: maybe-pdf-libtool
+pdf-host: maybe-pdf-m4
+pdf-host: maybe-pdf-make
+pdf-host: maybe-pdf-mmalloc
+pdf-host: maybe-pdf-patch
+pdf-host: maybe-pdf-perl
+pdf-host: maybe-pdf-prms
+pdf-host: maybe-pdf-rcs
+pdf-host: maybe-pdf-readline
+pdf-host: maybe-pdf-release
+pdf-host: maybe-pdf-recode
+pdf-host: maybe-pdf-sed
+pdf-host: maybe-pdf-send-pr
+pdf-host: maybe-pdf-shellutils
+pdf-host: maybe-pdf-sid
+pdf-host: maybe-pdf-sim
+pdf-host: maybe-pdf-tar
+pdf-host: maybe-pdf-texinfo
+pdf-host: maybe-pdf-textutils
+pdf-host: maybe-pdf-time
+pdf-host: maybe-pdf-uudecode
+pdf-host: maybe-pdf-wdiff
+pdf-host: maybe-pdf-zip
+pdf-host: maybe-pdf-zlib
+pdf-host: maybe-pdf-gdb
+pdf-host: maybe-pdf-expect
+pdf-host: maybe-pdf-guile
+pdf-host: maybe-pdf-tk
+pdf-host: maybe-pdf-libtermcap
+pdf-host: maybe-pdf-utils
+pdf-host: maybe-pdf-gnattools
+
+.PHONY: pdf-target
+
+pdf-target: maybe-pdf-target-libstdc++-v3
+pdf-target: maybe-pdf-target-libmudflap
+pdf-target: maybe-pdf-target-libssp
+pdf-target: maybe-pdf-target-newlib
+pdf-target: maybe-pdf-target-libgcc
+pdf-target: maybe-pdf-target-libgfortran
+pdf-target: maybe-pdf-target-libobjc
+pdf-target: maybe-pdf-target-libtermcap
+pdf-target: maybe-pdf-target-winsup
+pdf-target: maybe-pdf-target-libgloss
+pdf-target: maybe-pdf-target-libiberty
+pdf-target: maybe-pdf-target-gperf
+pdf-target: maybe-pdf-target-examples
+pdf-target: maybe-pdf-target-libffi
+pdf-target: maybe-pdf-target-libjava
+pdf-target: maybe-pdf-target-zlib
+pdf-target: maybe-pdf-target-boehm-gc
+pdf-target: maybe-pdf-target-qthreads
+pdf-target: maybe-pdf-target-rda
+pdf-target: maybe-pdf-target-libada
+pdf-target: maybe-pdf-target-libgomp
+
.PHONY: do-html
do-html:
@: $(MAKE); $(unstage)
@@ -1038,6 +1200,8 @@ html-host: maybe-html-gas
html-host: maybe-html-gcc
html-host: maybe-html-gawk
html-host: maybe-html-gettext
+html-host: maybe-html-gmp
+html-host: maybe-html-mpfr
html-host: maybe-html-gnuserv
html-host: maybe-html-gprof
html-host: maybe-html-gzip
@@ -1088,8 +1252,8 @@ html-host: maybe-html-gnattools
html-target: maybe-html-target-libstdc++-v3
html-target: maybe-html-target-libmudflap
html-target: maybe-html-target-libssp
-html-target: maybe-html-target-libgcc-math
html-target: maybe-html-target-newlib
+html-target: maybe-html-target-libgcc
html-target: maybe-html-target-libgfortran
html-target: maybe-html-target-libobjc
html-target: maybe-html-target-libtermcap
@@ -1142,6 +1306,8 @@ TAGS-host: maybe-TAGS-gas
TAGS-host: maybe-TAGS-gcc
TAGS-host: maybe-TAGS-gawk
TAGS-host: maybe-TAGS-gettext
+TAGS-host: maybe-TAGS-gmp
+TAGS-host: maybe-TAGS-mpfr
TAGS-host: maybe-TAGS-gnuserv
TAGS-host: maybe-TAGS-gprof
TAGS-host: maybe-TAGS-gzip
@@ -1192,8 +1358,8 @@ TAGS-host: maybe-TAGS-gnattools
TAGS-target: maybe-TAGS-target-libstdc++-v3
TAGS-target: maybe-TAGS-target-libmudflap
TAGS-target: maybe-TAGS-target-libssp
-TAGS-target: maybe-TAGS-target-libgcc-math
TAGS-target: maybe-TAGS-target-newlib
+TAGS-target: maybe-TAGS-target-libgcc
TAGS-target: maybe-TAGS-target-libgfortran
TAGS-target: maybe-TAGS-target-libobjc
TAGS-target: maybe-TAGS-target-libtermcap
@@ -1246,6 +1412,8 @@ install-info-host: maybe-install-info-gas
install-info-host: maybe-install-info-gcc
install-info-host: maybe-install-info-gawk
install-info-host: maybe-install-info-gettext
+install-info-host: maybe-install-info-gmp
+install-info-host: maybe-install-info-mpfr
install-info-host: maybe-install-info-gnuserv
install-info-host: maybe-install-info-gprof
install-info-host: maybe-install-info-gzip
@@ -1296,8 +1464,8 @@ install-info-host: maybe-install-info-gnattools
install-info-target: maybe-install-info-target-libstdc++-v3
install-info-target: maybe-install-info-target-libmudflap
install-info-target: maybe-install-info-target-libssp
-install-info-target: maybe-install-info-target-libgcc-math
install-info-target: maybe-install-info-target-newlib
+install-info-target: maybe-install-info-target-libgcc
install-info-target: maybe-install-info-target-libgfortran
install-info-target: maybe-install-info-target-libobjc
install-info-target: maybe-install-info-target-libtermcap
@@ -1315,6 +1483,112 @@ install-info-target: maybe-install-info-target-rda
install-info-target: maybe-install-info-target-libada
install-info-target: maybe-install-info-target-libgomp
+.PHONY: do-install-pdf
+do-install-pdf:
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(MAKE) $(RECURSE_FLAGS_TO_PASS) install-pdf-host \
+ install-pdf-target
+
+
+.PHONY: install-pdf-host
+
+install-pdf-host: maybe-install-pdf-ash
+install-pdf-host: maybe-install-pdf-autoconf
+install-pdf-host: maybe-install-pdf-automake
+install-pdf-host: maybe-install-pdf-bash
+install-pdf-host: maybe-install-pdf-bfd
+install-pdf-host: maybe-install-pdf-opcodes
+install-pdf-host: maybe-install-pdf-binutils
+install-pdf-host: maybe-install-pdf-bison
+install-pdf-host: maybe-install-pdf-byacc
+install-pdf-host: maybe-install-pdf-bzip2
+install-pdf-host: maybe-install-pdf-dejagnu
+install-pdf-host: maybe-install-pdf-diff
+install-pdf-host: maybe-install-pdf-dosutils
+install-pdf-host: maybe-install-pdf-etc
+install-pdf-host: maybe-install-pdf-fastjar
+install-pdf-host: maybe-install-pdf-fileutils
+install-pdf-host: maybe-install-pdf-findutils
+install-pdf-host: maybe-install-pdf-find
+install-pdf-host: maybe-install-pdf-fixincludes
+install-pdf-host: maybe-install-pdf-flex
+install-pdf-host: maybe-install-pdf-gas
+install-pdf-host: maybe-install-pdf-gcc
+install-pdf-host: maybe-install-pdf-gawk
+install-pdf-host: maybe-install-pdf-gettext
+install-pdf-host: maybe-install-pdf-gmp
+install-pdf-host: maybe-install-pdf-mpfr
+install-pdf-host: maybe-install-pdf-gnuserv
+install-pdf-host: maybe-install-pdf-gprof
+install-pdf-host: maybe-install-pdf-gzip
+install-pdf-host: maybe-install-pdf-hello
+install-pdf-host: maybe-install-pdf-indent
+install-pdf-host: maybe-install-pdf-intl
+install-pdf-host: maybe-install-pdf-tcl
+install-pdf-host: maybe-install-pdf-itcl
+install-pdf-host: maybe-install-pdf-ld
+install-pdf-host: maybe-install-pdf-libcpp
+install-pdf-host: maybe-install-pdf-libdecnumber
+install-pdf-host: maybe-install-pdf-libgui
+install-pdf-host: maybe-install-pdf-libiberty
+install-pdf-host: maybe-install-pdf-libtool
+install-pdf-host: maybe-install-pdf-m4
+install-pdf-host: maybe-install-pdf-make
+install-pdf-host: maybe-install-pdf-mmalloc
+install-pdf-host: maybe-install-pdf-patch
+install-pdf-host: maybe-install-pdf-perl
+install-pdf-host: maybe-install-pdf-prms
+install-pdf-host: maybe-install-pdf-rcs
+install-pdf-host: maybe-install-pdf-readline
+install-pdf-host: maybe-install-pdf-release
+install-pdf-host: maybe-install-pdf-recode
+install-pdf-host: maybe-install-pdf-sed
+install-pdf-host: maybe-install-pdf-send-pr
+install-pdf-host: maybe-install-pdf-shellutils
+install-pdf-host: maybe-install-pdf-sid
+install-pdf-host: maybe-install-pdf-sim
+install-pdf-host: maybe-install-pdf-tar
+install-pdf-host: maybe-install-pdf-texinfo
+install-pdf-host: maybe-install-pdf-textutils
+install-pdf-host: maybe-install-pdf-time
+install-pdf-host: maybe-install-pdf-uudecode
+install-pdf-host: maybe-install-pdf-wdiff
+install-pdf-host: maybe-install-pdf-zip
+install-pdf-host: maybe-install-pdf-zlib
+install-pdf-host: maybe-install-pdf-gdb
+install-pdf-host: maybe-install-pdf-expect
+install-pdf-host: maybe-install-pdf-guile
+install-pdf-host: maybe-install-pdf-tk
+install-pdf-host: maybe-install-pdf-libtermcap
+install-pdf-host: maybe-install-pdf-utils
+install-pdf-host: maybe-install-pdf-gnattools
+
+.PHONY: install-pdf-target
+
+install-pdf-target: maybe-install-pdf-target-libstdc++-v3
+install-pdf-target: maybe-install-pdf-target-libmudflap
+install-pdf-target: maybe-install-pdf-target-libssp
+install-pdf-target: maybe-install-pdf-target-newlib
+install-pdf-target: maybe-install-pdf-target-libgcc
+install-pdf-target: maybe-install-pdf-target-libgfortran
+install-pdf-target: maybe-install-pdf-target-libobjc
+install-pdf-target: maybe-install-pdf-target-libtermcap
+install-pdf-target: maybe-install-pdf-target-winsup
+install-pdf-target: maybe-install-pdf-target-libgloss
+install-pdf-target: maybe-install-pdf-target-libiberty
+install-pdf-target: maybe-install-pdf-target-gperf
+install-pdf-target: maybe-install-pdf-target-examples
+install-pdf-target: maybe-install-pdf-target-libffi
+install-pdf-target: maybe-install-pdf-target-libjava
+install-pdf-target: maybe-install-pdf-target-zlib
+install-pdf-target: maybe-install-pdf-target-boehm-gc
+install-pdf-target: maybe-install-pdf-target-qthreads
+install-pdf-target: maybe-install-pdf-target-rda
+install-pdf-target: maybe-install-pdf-target-libada
+install-pdf-target: maybe-install-pdf-target-libgomp
+
.PHONY: do-install-html
do-install-html:
@: $(MAKE); $(unstage)
@@ -1350,6 +1624,8 @@ install-html-host: maybe-install-html-gas
install-html-host: maybe-install-html-gcc
install-html-host: maybe-install-html-gawk
install-html-host: maybe-install-html-gettext
+install-html-host: maybe-install-html-gmp
+install-html-host: maybe-install-html-mpfr
install-html-host: maybe-install-html-gnuserv
install-html-host: maybe-install-html-gprof
install-html-host: maybe-install-html-gzip
@@ -1400,8 +1676,8 @@ install-html-host: maybe-install-html-gnattools
install-html-target: maybe-install-html-target-libstdc++-v3
install-html-target: maybe-install-html-target-libmudflap
install-html-target: maybe-install-html-target-libssp
-install-html-target: maybe-install-html-target-libgcc-math
install-html-target: maybe-install-html-target-newlib
+install-html-target: maybe-install-html-target-libgcc
install-html-target: maybe-install-html-target-libgfortran
install-html-target: maybe-install-html-target-libobjc
install-html-target: maybe-install-html-target-libtermcap
@@ -1454,6 +1730,8 @@ installcheck-host: maybe-installcheck-gas
installcheck-host: maybe-installcheck-gcc
installcheck-host: maybe-installcheck-gawk
installcheck-host: maybe-installcheck-gettext
+installcheck-host: maybe-installcheck-gmp
+installcheck-host: maybe-installcheck-mpfr
installcheck-host: maybe-installcheck-gnuserv
installcheck-host: maybe-installcheck-gprof
installcheck-host: maybe-installcheck-gzip
@@ -1504,8 +1782,8 @@ installcheck-host: maybe-installcheck-gnattools
installcheck-target: maybe-installcheck-target-libstdc++-v3
installcheck-target: maybe-installcheck-target-libmudflap
installcheck-target: maybe-installcheck-target-libssp
-installcheck-target: maybe-installcheck-target-libgcc-math
installcheck-target: maybe-installcheck-target-newlib
+installcheck-target: maybe-installcheck-target-libgcc
installcheck-target: maybe-installcheck-target-libgfortran
installcheck-target: maybe-installcheck-target-libobjc
installcheck-target: maybe-installcheck-target-libtermcap
@@ -1558,6 +1836,8 @@ mostlyclean-host: maybe-mostlyclean-gas
mostlyclean-host: maybe-mostlyclean-gcc
mostlyclean-host: maybe-mostlyclean-gawk
mostlyclean-host: maybe-mostlyclean-gettext
+mostlyclean-host: maybe-mostlyclean-gmp
+mostlyclean-host: maybe-mostlyclean-mpfr
mostlyclean-host: maybe-mostlyclean-gnuserv
mostlyclean-host: maybe-mostlyclean-gprof
mostlyclean-host: maybe-mostlyclean-gzip
@@ -1608,8 +1888,8 @@ mostlyclean-host: maybe-mostlyclean-gnattools
mostlyclean-target: maybe-mostlyclean-target-libstdc++-v3
mostlyclean-target: maybe-mostlyclean-target-libmudflap
mostlyclean-target: maybe-mostlyclean-target-libssp
-mostlyclean-target: maybe-mostlyclean-target-libgcc-math
mostlyclean-target: maybe-mostlyclean-target-newlib
+mostlyclean-target: maybe-mostlyclean-target-libgcc
mostlyclean-target: maybe-mostlyclean-target-libgfortran
mostlyclean-target: maybe-mostlyclean-target-libobjc
mostlyclean-target: maybe-mostlyclean-target-libtermcap
@@ -1662,6 +1942,8 @@ clean-host: maybe-clean-gas
clean-host: maybe-clean-gcc
clean-host: maybe-clean-gawk
clean-host: maybe-clean-gettext
+clean-host: maybe-clean-gmp
+clean-host: maybe-clean-mpfr
clean-host: maybe-clean-gnuserv
clean-host: maybe-clean-gprof
clean-host: maybe-clean-gzip
@@ -1712,8 +1994,8 @@ clean-host: maybe-clean-gnattools
clean-target: maybe-clean-target-libstdc++-v3
clean-target: maybe-clean-target-libmudflap
clean-target: maybe-clean-target-libssp
-clean-target: maybe-clean-target-libgcc-math
clean-target: maybe-clean-target-newlib
+clean-target: maybe-clean-target-libgcc
clean-target: maybe-clean-target-libgfortran
clean-target: maybe-clean-target-libobjc
clean-target: maybe-clean-target-libtermcap
@@ -1766,6 +2048,8 @@ distclean-host: maybe-distclean-gas
distclean-host: maybe-distclean-gcc
distclean-host: maybe-distclean-gawk
distclean-host: maybe-distclean-gettext
+distclean-host: maybe-distclean-gmp
+distclean-host: maybe-distclean-mpfr
distclean-host: maybe-distclean-gnuserv
distclean-host: maybe-distclean-gprof
distclean-host: maybe-distclean-gzip
@@ -1816,8 +2100,8 @@ distclean-host: maybe-distclean-gnattools
distclean-target: maybe-distclean-target-libstdc++-v3
distclean-target: maybe-distclean-target-libmudflap
distclean-target: maybe-distclean-target-libssp
-distclean-target: maybe-distclean-target-libgcc-math
distclean-target: maybe-distclean-target-newlib
+distclean-target: maybe-distclean-target-libgcc
distclean-target: maybe-distclean-target-libgfortran
distclean-target: maybe-distclean-target-libobjc
distclean-target: maybe-distclean-target-libtermcap
@@ -1870,6 +2154,8 @@ maintainer-clean-host: maybe-maintainer-clean-gas
maintainer-clean-host: maybe-maintainer-clean-gcc
maintainer-clean-host: maybe-maintainer-clean-gawk
maintainer-clean-host: maybe-maintainer-clean-gettext
+maintainer-clean-host: maybe-maintainer-clean-gmp
+maintainer-clean-host: maybe-maintainer-clean-mpfr
maintainer-clean-host: maybe-maintainer-clean-gnuserv
maintainer-clean-host: maybe-maintainer-clean-gprof
maintainer-clean-host: maybe-maintainer-clean-gzip
@@ -1920,8 +2206,8 @@ maintainer-clean-host: maybe-maintainer-clean-gnattools
maintainer-clean-target: maybe-maintainer-clean-target-libstdc++-v3
maintainer-clean-target: maybe-maintainer-clean-target-libmudflap
maintainer-clean-target: maybe-maintainer-clean-target-libssp
-maintainer-clean-target: maybe-maintainer-clean-target-libgcc-math
maintainer-clean-target: maybe-maintainer-clean-target-newlib
+maintainer-clean-target: maybe-maintainer-clean-target-libgcc
maintainer-clean-target: maybe-maintainer-clean-target-libgfortran
maintainer-clean-target: maybe-maintainer-clean-target-libobjc
maintainer-clean-target: maybe-maintainer-clean-target-libtermcap
@@ -1942,12 +2228,14 @@ maintainer-clean-target: maybe-maintainer-clean-target-libgomp
# Here are the targets which correspond to the do-X targets.
-.PHONY: info installcheck dvi html install-info install-html
+.PHONY: info installcheck dvi pdf html
+.PHONY: install-info install-pdf install-html
.PHONY: clean distclean mostlyclean maintainer-clean realclean
.PHONY: local-clean local-distclean local-maintainer-clean
info: do-info
installcheck: do-installcheck
dvi: do-dvi
+pdf: do-pdf
html: do-html
# Make sure makeinfo is built before we do a `make info', if we're
@@ -1960,6 +2248,8 @@ install-info: do-install-info dir.info
$(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info ; \
else true ; fi
+install-pdf: do-install-pdf
+
install-html: do-install-html
local-clean:
@@ -1992,11 +2282,6 @@ maintainer-clean: local-maintainer-clean do-maintainer-clean local-clean
maintainer-clean: local-distclean
realclean: maintainer-clean
-# Extra dependency for clean-target, owing to the mixed nature of gcc.
-clean-target: clean-target-libgcc
-clean-target-libgcc:
- test ! -d gcc || (cd gcc && $(MAKE) $@)
-
# Check target.
.PHONY: check do-check
@@ -2029,6 +2314,8 @@ check-host: \
maybe-check-gcc \
maybe-check-gawk \
maybe-check-gettext \
+ maybe-check-gmp \
+ maybe-check-mpfr \
maybe-check-gnuserv \
maybe-check-gprof \
maybe-check-gzip \
@@ -2079,8 +2366,8 @@ check-target: \
maybe-check-target-libstdc++-v3 \
maybe-check-target-libmudflap \
maybe-check-target-libssp \
- maybe-check-target-libgcc-math \
maybe-check-target-newlib \
+ maybe-check-target-libgcc \
maybe-check-target-libgfortran \
maybe-check-target-libobjc \
maybe-check-target-libtermcap \
@@ -2159,6 +2446,8 @@ install-host-nogcc: \
maybe-install-gas \
maybe-install-gawk \
maybe-install-gettext \
+ maybe-install-gmp \
+ maybe-install-mpfr \
maybe-install-gnuserv \
maybe-install-gprof \
maybe-install-gzip \
@@ -2230,6 +2519,8 @@ install-host: \
maybe-install-gcc \
maybe-install-gawk \
maybe-install-gettext \
+ maybe-install-gmp \
+ maybe-install-mpfr \
maybe-install-gnuserv \
maybe-install-gprof \
maybe-install-gzip \
@@ -2280,8 +2571,8 @@ install-target: \
maybe-install-target-libstdc++-v3 \
maybe-install-target-libmudflap \
maybe-install-target-libssp \
- maybe-install-target-libgcc-math \
maybe-install-target-newlib \
+ maybe-install-target-libgcc \
maybe-install-target-libgfortran \
maybe-install-target-libobjc \
maybe-install-target-libtermcap \
@@ -2365,6 +2656,9 @@ TAGS: do-TAGS
.PHONY: configure-build-libiberty maybe-configure-build-libiberty
maybe-configure-build-libiberty:
+@if gcc-bootstrap
+configure-build-libiberty: stage_current
+@endif gcc-bootstrap
@if build-libiberty
maybe-configure-build-libiberty: configure-build-libiberty
configure-build-libiberty:
@@ -2385,7 +2679,8 @@ configure-build-libiberty:
libsrcdir="$$s/libiberty"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(BUILD_CONFIGARGS) $${srcdiroption} \
+ $(BUILD_CONFIGARGS) --build=${build_alias} --host=${build_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif build-libiberty
@@ -2395,6 +2690,9 @@ configure-build-libiberty:
.PHONY: all-build-libiberty maybe-all-build-libiberty
maybe-all-build-libiberty:
+@if gcc-bootstrap
+all-build-libiberty: stage_current
+@endif gcc-bootstrap
@if build-libiberty
TARGET-build-libiberty=all
maybe-all-build-libiberty: all-build-libiberty
@@ -2413,6 +2711,9 @@ all-build-libiberty: configure-build-libiberty
.PHONY: configure-build-bison maybe-configure-build-bison
maybe-configure-build-bison:
+@if gcc-bootstrap
+configure-build-bison: stage_current
+@endif gcc-bootstrap
@if build-bison
maybe-configure-build-bison: configure-build-bison
configure-build-bison:
@@ -2433,7 +2734,8 @@ configure-build-bison:
libsrcdir="$$s/bison"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(BUILD_CONFIGARGS) $${srcdiroption} \
+ $(BUILD_CONFIGARGS) --build=${build_alias} --host=${build_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif build-bison
@@ -2443,6 +2745,9 @@ configure-build-bison:
.PHONY: all-build-bison maybe-all-build-bison
maybe-all-build-bison:
+@if gcc-bootstrap
+all-build-bison: stage_current
+@endif gcc-bootstrap
@if build-bison
TARGET-build-bison=all
maybe-all-build-bison: all-build-bison
@@ -2461,6 +2766,9 @@ all-build-bison: configure-build-bison
.PHONY: configure-build-byacc maybe-configure-build-byacc
maybe-configure-build-byacc:
+@if gcc-bootstrap
+configure-build-byacc: stage_current
+@endif gcc-bootstrap
@if build-byacc
maybe-configure-build-byacc: configure-build-byacc
configure-build-byacc:
@@ -2481,7 +2789,8 @@ configure-build-byacc:
libsrcdir="$$s/byacc"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(BUILD_CONFIGARGS) $${srcdiroption} \
+ $(BUILD_CONFIGARGS) --build=${build_alias} --host=${build_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif build-byacc
@@ -2491,6 +2800,9 @@ configure-build-byacc:
.PHONY: all-build-byacc maybe-all-build-byacc
maybe-all-build-byacc:
+@if gcc-bootstrap
+all-build-byacc: stage_current
+@endif gcc-bootstrap
@if build-byacc
TARGET-build-byacc=all
maybe-all-build-byacc: all-build-byacc
@@ -2509,6 +2821,9 @@ all-build-byacc: configure-build-byacc
.PHONY: configure-build-flex maybe-configure-build-flex
maybe-configure-build-flex:
+@if gcc-bootstrap
+configure-build-flex: stage_current
+@endif gcc-bootstrap
@if build-flex
maybe-configure-build-flex: configure-build-flex
configure-build-flex:
@@ -2529,7 +2844,8 @@ configure-build-flex:
libsrcdir="$$s/flex"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(BUILD_CONFIGARGS) $${srcdiroption} \
+ $(BUILD_CONFIGARGS) --build=${build_alias} --host=${build_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif build-flex
@@ -2539,6 +2855,9 @@ configure-build-flex:
.PHONY: all-build-flex maybe-all-build-flex
maybe-all-build-flex:
+@if gcc-bootstrap
+all-build-flex: stage_current
+@endif gcc-bootstrap
@if build-flex
TARGET-build-flex=all
maybe-all-build-flex: all-build-flex
@@ -2557,6 +2876,9 @@ all-build-flex: configure-build-flex
.PHONY: configure-build-m4 maybe-configure-build-m4
maybe-configure-build-m4:
+@if gcc-bootstrap
+configure-build-m4: stage_current
+@endif gcc-bootstrap
@if build-m4
maybe-configure-build-m4: configure-build-m4
configure-build-m4:
@@ -2577,7 +2899,8 @@ configure-build-m4:
libsrcdir="$$s/m4"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(BUILD_CONFIGARGS) $${srcdiroption} \
+ $(BUILD_CONFIGARGS) --build=${build_alias} --host=${build_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif build-m4
@@ -2587,6 +2910,9 @@ configure-build-m4:
.PHONY: all-build-m4 maybe-all-build-m4
maybe-all-build-m4:
+@if gcc-bootstrap
+all-build-m4: stage_current
+@endif gcc-bootstrap
@if build-m4
TARGET-build-m4=all
maybe-all-build-m4: all-build-m4
@@ -2605,6 +2931,9 @@ all-build-m4: configure-build-m4
.PHONY: configure-build-texinfo maybe-configure-build-texinfo
maybe-configure-build-texinfo:
+@if gcc-bootstrap
+configure-build-texinfo: stage_current
+@endif gcc-bootstrap
@if build-texinfo
maybe-configure-build-texinfo: configure-build-texinfo
configure-build-texinfo:
@@ -2625,7 +2954,8 @@ configure-build-texinfo:
libsrcdir="$$s/texinfo"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(BUILD_CONFIGARGS) $${srcdiroption} \
+ $(BUILD_CONFIGARGS) --build=${build_alias} --host=${build_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif build-texinfo
@@ -2635,6 +2965,9 @@ configure-build-texinfo:
.PHONY: all-build-texinfo maybe-all-build-texinfo
maybe-all-build-texinfo:
+@if gcc-bootstrap
+all-build-texinfo: stage_current
+@endif gcc-bootstrap
@if build-texinfo
TARGET-build-texinfo=all
maybe-all-build-texinfo: all-build-texinfo
@@ -2653,6 +2986,9 @@ all-build-texinfo: configure-build-texinfo
.PHONY: configure-build-fixincludes maybe-configure-build-fixincludes
maybe-configure-build-fixincludes:
+@if gcc-bootstrap
+configure-build-fixincludes: stage_current
+@endif gcc-bootstrap
@if build-fixincludes
maybe-configure-build-fixincludes: configure-build-fixincludes
configure-build-fixincludes:
@@ -2673,7 +3009,8 @@ configure-build-fixincludes:
libsrcdir="$$s/fixincludes"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(BUILD_CONFIGARGS) $${srcdiroption} \
+ $(BUILD_CONFIGARGS) --build=${build_alias} --host=${build_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif build-fixincludes
@@ -2683,6 +3020,9 @@ configure-build-fixincludes:
.PHONY: all-build-fixincludes maybe-all-build-fixincludes
maybe-all-build-fixincludes:
+@if gcc-bootstrap
+all-build-fixincludes: stage_current
+@endif gcc-bootstrap
@if build-fixincludes
TARGET-build-fixincludes=all
maybe-all-build-fixincludes: all-build-fixincludes
@@ -2706,6 +3046,9 @@ all-build-fixincludes: configure-build-fixincludes
.PHONY: configure-ash maybe-configure-ash
maybe-configure-ash:
+@if gcc-bootstrap
+configure-ash: stage_current
+@endif gcc-bootstrap
@if ash
maybe-configure-ash: configure-ash
configure-ash:
@@ -2725,7 +3068,8 @@ configure-ash:
srcdiroption="--srcdir=$${topdir}/ash"; \
libsrcdir="$$s/ash"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif ash
@@ -2735,6 +3079,9 @@ configure-ash:
.PHONY: all-ash maybe-all-ash
maybe-all-ash:
+@if gcc-bootstrap
+all-ash: stage_current
+@endif gcc-bootstrap
@if ash
TARGET-ash=all
maybe-all-ash: all-ash
@@ -2780,7 +3127,7 @@ install-ash: installdirs
@endif ash
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-ash info-ash
maybe-info-ash:
@@ -2834,6 +3181,32 @@ dvi-ash: \
@endif ash
+.PHONY: maybe-pdf-ash pdf-ash
+maybe-pdf-ash:
+@if ash
+maybe-pdf-ash: pdf-ash
+
+pdf-ash: \
+ configure-ash
+ @: $(MAKE); $(unstage)
+ @[ -f ./ash/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in ash" ; \
+ (cd $(HOST_SUBDIR)/ash && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif ash
+
.PHONY: maybe-html-ash html-ash
maybe-html-ash:
@if ash
@@ -2913,6 +3286,33 @@ install-info-ash: \
@endif ash
+.PHONY: maybe-install-pdf-ash install-pdf-ash
+maybe-install-pdf-ash:
+@if ash
+maybe-install-pdf-ash: install-pdf-ash
+
+install-pdf-ash: \
+ configure-ash \
+ pdf-ash
+ @: $(MAKE); $(unstage)
+ @[ -f ./ash/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in ash" ; \
+ (cd $(HOST_SUBDIR)/ash && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif ash
+
.PHONY: maybe-install-html-ash install-html-ash
maybe-install-html-ash:
@if ash
@@ -3070,6 +3470,9 @@ maintainer-clean-ash:
.PHONY: configure-autoconf maybe-configure-autoconf
maybe-configure-autoconf:
+@if gcc-bootstrap
+configure-autoconf: stage_current
+@endif gcc-bootstrap
@if autoconf
maybe-configure-autoconf: configure-autoconf
configure-autoconf:
@@ -3089,7 +3492,8 @@ configure-autoconf:
srcdiroption="--srcdir=$${topdir}/autoconf"; \
libsrcdir="$$s/autoconf"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif autoconf
@@ -3099,6 +3503,9 @@ configure-autoconf:
.PHONY: all-autoconf maybe-all-autoconf
maybe-all-autoconf:
+@if gcc-bootstrap
+all-autoconf: stage_current
+@endif gcc-bootstrap
@if autoconf
TARGET-autoconf=all
maybe-all-autoconf: all-autoconf
@@ -3144,7 +3551,7 @@ install-autoconf: installdirs
@endif autoconf
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-autoconf info-autoconf
maybe-info-autoconf:
@@ -3198,6 +3605,32 @@ dvi-autoconf: \
@endif autoconf
+.PHONY: maybe-pdf-autoconf pdf-autoconf
+maybe-pdf-autoconf:
+@if autoconf
+maybe-pdf-autoconf: pdf-autoconf
+
+pdf-autoconf: \
+ configure-autoconf
+ @: $(MAKE); $(unstage)
+ @[ -f ./autoconf/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in autoconf" ; \
+ (cd $(HOST_SUBDIR)/autoconf && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif autoconf
+
.PHONY: maybe-html-autoconf html-autoconf
maybe-html-autoconf:
@if autoconf
@@ -3277,6 +3710,33 @@ install-info-autoconf: \
@endif autoconf
+.PHONY: maybe-install-pdf-autoconf install-pdf-autoconf
+maybe-install-pdf-autoconf:
+@if autoconf
+maybe-install-pdf-autoconf: install-pdf-autoconf
+
+install-pdf-autoconf: \
+ configure-autoconf \
+ pdf-autoconf
+ @: $(MAKE); $(unstage)
+ @[ -f ./autoconf/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in autoconf" ; \
+ (cd $(HOST_SUBDIR)/autoconf && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif autoconf
+
.PHONY: maybe-install-html-autoconf install-html-autoconf
maybe-install-html-autoconf:
@if autoconf
@@ -3434,6 +3894,9 @@ maintainer-clean-autoconf:
.PHONY: configure-automake maybe-configure-automake
maybe-configure-automake:
+@if gcc-bootstrap
+configure-automake: stage_current
+@endif gcc-bootstrap
@if automake
maybe-configure-automake: configure-automake
configure-automake:
@@ -3453,7 +3916,8 @@ configure-automake:
srcdiroption="--srcdir=$${topdir}/automake"; \
libsrcdir="$$s/automake"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif automake
@@ -3463,6 +3927,9 @@ configure-automake:
.PHONY: all-automake maybe-all-automake
maybe-all-automake:
+@if gcc-bootstrap
+all-automake: stage_current
+@endif gcc-bootstrap
@if automake
TARGET-automake=all
maybe-all-automake: all-automake
@@ -3508,7 +3975,7 @@ install-automake: installdirs
@endif automake
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-automake info-automake
maybe-info-automake:
@@ -3562,6 +4029,32 @@ dvi-automake: \
@endif automake
+.PHONY: maybe-pdf-automake pdf-automake
+maybe-pdf-automake:
+@if automake
+maybe-pdf-automake: pdf-automake
+
+pdf-automake: \
+ configure-automake
+ @: $(MAKE); $(unstage)
+ @[ -f ./automake/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in automake" ; \
+ (cd $(HOST_SUBDIR)/automake && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif automake
+
.PHONY: maybe-html-automake html-automake
maybe-html-automake:
@if automake
@@ -3641,6 +4134,33 @@ install-info-automake: \
@endif automake
+.PHONY: maybe-install-pdf-automake install-pdf-automake
+maybe-install-pdf-automake:
+@if automake
+maybe-install-pdf-automake: install-pdf-automake
+
+install-pdf-automake: \
+ configure-automake \
+ pdf-automake
+ @: $(MAKE); $(unstage)
+ @[ -f ./automake/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in automake" ; \
+ (cd $(HOST_SUBDIR)/automake && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif automake
+
.PHONY: maybe-install-html-automake install-html-automake
maybe-install-html-automake:
@if automake
@@ -3798,6 +4318,9 @@ maintainer-clean-automake:
.PHONY: configure-bash maybe-configure-bash
maybe-configure-bash:
+@if gcc-bootstrap
+configure-bash: stage_current
+@endif gcc-bootstrap
@if bash
maybe-configure-bash: configure-bash
configure-bash:
@@ -3817,7 +4340,8 @@ configure-bash:
srcdiroption="--srcdir=$${topdir}/bash"; \
libsrcdir="$$s/bash"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif bash
@@ -3827,6 +4351,9 @@ configure-bash:
.PHONY: all-bash maybe-all-bash
maybe-all-bash:
+@if gcc-bootstrap
+all-bash: stage_current
+@endif gcc-bootstrap
@if bash
TARGET-bash=all
maybe-all-bash: all-bash
@@ -3872,7 +4399,7 @@ install-bash: installdirs
@endif bash
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-bash info-bash
maybe-info-bash:
@@ -3926,6 +4453,32 @@ dvi-bash: \
@endif bash
+.PHONY: maybe-pdf-bash pdf-bash
+maybe-pdf-bash:
+@if bash
+maybe-pdf-bash: pdf-bash
+
+pdf-bash: \
+ configure-bash
+ @: $(MAKE); $(unstage)
+ @[ -f ./bash/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in bash" ; \
+ (cd $(HOST_SUBDIR)/bash && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif bash
+
.PHONY: maybe-html-bash html-bash
maybe-html-bash:
@if bash
@@ -4005,6 +4558,33 @@ install-info-bash: \
@endif bash
+.PHONY: maybe-install-pdf-bash install-pdf-bash
+maybe-install-pdf-bash:
+@if bash
+maybe-install-pdf-bash: install-pdf-bash
+
+install-pdf-bash: \
+ configure-bash \
+ pdf-bash
+ @: $(MAKE); $(unstage)
+ @[ -f ./bash/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in bash" ; \
+ (cd $(HOST_SUBDIR)/bash && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif bash
+
.PHONY: maybe-install-html-bash install-html-bash
maybe-install-html-bash:
@if bash
@@ -4162,14 +4742,12 @@ maintainer-clean-bash:
.PHONY: configure-bfd maybe-configure-bfd
maybe-configure-bfd:
+@if gcc-bootstrap
+configure-bfd: stage_current
+@endif gcc-bootstrap
@if bfd
maybe-configure-bfd: configure-bfd
configure-bfd:
-@endif bfd
-@if bfd-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif bfd-bootstrap
-@if bfd
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/bfd/Makefile || exit 0; \
@@ -4185,7 +4763,8 @@ configure-bfd:
srcdiroption="--srcdir=$${topdir}/bfd"; \
libsrcdir="$$s/bfd"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif bfd
@@ -4202,6 +4781,8 @@ configure-stage1-bfd:
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/bfd/Makefile || exit 0; \
$(HOST_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 1 in $(HOST_SUBDIR)/bfd ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd ; \
cd $(HOST_SUBDIR)/bfd || exit 1; \
@@ -4213,8 +4794,10 @@ configure-stage1-bfd:
srcdiroption="--srcdir=$${topdir}/bfd"; \
libsrcdir="$$s/bfd"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
- --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
@endif bfd-bootstrap
.PHONY: configure-stage2-bfd maybe-configure-stage2-bfd
@@ -4229,6 +4812,8 @@ configure-stage2-bfd:
test ! -f $(HOST_SUBDIR)/bfd/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 2 in $(HOST_SUBDIR)/bfd ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd ; \
cd $(HOST_SUBDIR)/bfd || exit 1; \
@@ -4240,7 +4825,9 @@ configure-stage2-bfd:
srcdiroption="--srcdir=$${topdir}/bfd"; \
libsrcdir="$$s/bfd"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif bfd-bootstrap
@@ -4256,6 +4843,8 @@ configure-stage3-bfd:
test ! -f $(HOST_SUBDIR)/bfd/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 3 in $(HOST_SUBDIR)/bfd ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd ; \
cd $(HOST_SUBDIR)/bfd || exit 1; \
@@ -4267,7 +4856,9 @@ configure-stage3-bfd:
srcdiroption="--srcdir=$${topdir}/bfd"; \
libsrcdir="$$s/bfd"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif bfd-bootstrap
@@ -4283,6 +4874,8 @@ configure-stage4-bfd:
test ! -f $(HOST_SUBDIR)/bfd/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 4 in $(HOST_SUBDIR)/bfd ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd ; \
cd $(HOST_SUBDIR)/bfd || exit 1; \
@@ -4294,7 +4887,9 @@ configure-stage4-bfd:
srcdiroption="--srcdir=$${topdir}/bfd"; \
libsrcdir="$$s/bfd"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif bfd-bootstrap
@@ -4310,6 +4905,8 @@ configure-stageprofile-bfd:
test ! -f $(HOST_SUBDIR)/bfd/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
echo Configuring stage profile in $(HOST_SUBDIR)/bfd ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd ; \
cd $(HOST_SUBDIR)/bfd || exit 1; \
@@ -4321,7 +4918,9 @@ configure-stageprofile-bfd:
srcdiroption="--srcdir=$${topdir}/bfd"; \
libsrcdir="$$s/bfd"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif bfd-bootstrap
@@ -4337,6 +4936,8 @@ configure-stagefeedback-bfd:
test ! -f $(HOST_SUBDIR)/bfd/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
echo Configuring stage feedback in $(HOST_SUBDIR)/bfd ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd ; \
cd $(HOST_SUBDIR)/bfd || exit 1; \
@@ -4348,7 +4949,9 @@ configure-stagefeedback-bfd:
srcdiroption="--srcdir=$${topdir}/bfd"; \
libsrcdir="$$s/bfd"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif bfd-bootstrap
@@ -4358,15 +4961,13 @@ configure-stagefeedback-bfd:
.PHONY: all-bfd maybe-all-bfd
maybe-all-bfd:
+@if gcc-bootstrap
+all-bfd: stage_current
+@endif gcc-bootstrap
@if bfd
TARGET-bfd=all
maybe-all-bfd: all-bfd
all-bfd: configure-bfd
-@endif bfd
-@if bfd-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif bfd-bootstrap
-@if bfd
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
@@ -4390,18 +4991,22 @@ all-stage1-bfd: configure-stage1-bfd
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
cd $(HOST_SUBDIR)/bfd && \
- $(MAKE) $(FLAGS_TO_PASS) CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
$(TARGET-stage1-bfd)
maybe-clean-stage1-bfd: clean-stage1-bfd
clean-stage1: clean-stage1-bfd
clean-stage1-bfd:
- @[ -f $(HOST_SUBDIR)/bfd/Makefile ] || [ -f $(HOST_SUBDIR)/stage1-bfd/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage1 ] || $(MAKE) stage1-start; \
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(HOST_SUBDIR)/bfd/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage1-bfd/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
cd $(HOST_SUBDIR)/bfd && \
$(MAKE) $(FLAGS_TO_PASS) \
- CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" clean
+ clean
@endif bfd-bootstrap
@@ -4420,19 +5025,23 @@ all-stage2-bfd: configure-stage2-bfd
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/bfd && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage2-bfd)
maybe-clean-stage2-bfd: clean-stage2-bfd
clean-stage2: clean-stage2-bfd
clean-stage2-bfd:
- @[ -f $(HOST_SUBDIR)/bfd/Makefile ] || [ -f $(HOST_SUBDIR)/stage2-bfd/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage2 ] || $(MAKE) stage2-start; \
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(HOST_SUBDIR)/bfd/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage2-bfd/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
cd $(HOST_SUBDIR)/bfd && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif bfd-bootstrap
@@ -4451,19 +5060,23 @@ all-stage3-bfd: configure-stage3-bfd
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/bfd && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage3-bfd)
maybe-clean-stage3-bfd: clean-stage3-bfd
clean-stage3: clean-stage3-bfd
clean-stage3-bfd:
- @[ -f $(HOST_SUBDIR)/bfd/Makefile ] || [ -f $(HOST_SUBDIR)/stage3-bfd/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage3 ] || $(MAKE) stage3-start; \
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(HOST_SUBDIR)/bfd/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage3-bfd/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
cd $(HOST_SUBDIR)/bfd && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif bfd-bootstrap
@@ -4482,19 +5095,23 @@ all-stage4-bfd: configure-stage4-bfd
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/bfd && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage4-bfd)
maybe-clean-stage4-bfd: clean-stage4-bfd
clean-stage4: clean-stage4-bfd
clean-stage4-bfd:
- @[ -f $(HOST_SUBDIR)/bfd/Makefile ] || [ -f $(HOST_SUBDIR)/stage4-bfd/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage4 ] || $(MAKE) stage4-start; \
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(HOST_SUBDIR)/bfd/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage4-bfd/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
cd $(HOST_SUBDIR)/bfd && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif bfd-bootstrap
@@ -4513,19 +5130,23 @@ all-stageprofile-bfd: configure-stageprofile-bfd
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/bfd && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stageprofile-bfd)
maybe-clean-stageprofile-bfd: clean-stageprofile-bfd
clean-stageprofile: clean-stageprofile-bfd
clean-stageprofile-bfd:
- @[ -f $(HOST_SUBDIR)/bfd/Makefile ] || [ -f $(HOST_SUBDIR)/stageprofile-bfd/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start; \
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(HOST_SUBDIR)/bfd/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stageprofile-bfd/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
cd $(HOST_SUBDIR)/bfd && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" clean
+ clean
@endif bfd-bootstrap
@@ -4544,19 +5165,23 @@ all-stagefeedback-bfd: configure-stagefeedback-bfd
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/bfd && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-use" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stagefeedback-bfd)
maybe-clean-stagefeedback-bfd: clean-stagefeedback-bfd
clean-stagefeedback: clean-stagefeedback-bfd
clean-stagefeedback-bfd:
- @[ -f $(HOST_SUBDIR)/bfd/Makefile ] || [ -f $(HOST_SUBDIR)/stagefeedback-bfd/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start; \
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(HOST_SUBDIR)/bfd/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stagefeedback-bfd/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
cd $(HOST_SUBDIR)/bfd && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-use" clean
+ clean
@endif bfd-bootstrap
@@ -4593,7 +5218,7 @@ install-bfd: installdirs
@endif bfd
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-bfd info-bfd
maybe-info-bfd:
@@ -4645,6 +5270,31 @@ dvi-bfd: \
@endif bfd
+.PHONY: maybe-pdf-bfd pdf-bfd
+maybe-pdf-bfd:
+@if bfd
+maybe-pdf-bfd: pdf-bfd
+
+pdf-bfd: \
+ configure-bfd
+ @[ -f ./bfd/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in bfd" ; \
+ (cd $(HOST_SUBDIR)/bfd && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif bfd
+
.PHONY: maybe-html-bfd html-bfd
maybe-html-bfd:
@if bfd
@@ -4721,6 +5371,32 @@ install-info-bfd: \
@endif bfd
+.PHONY: maybe-install-pdf-bfd install-pdf-bfd
+maybe-install-pdf-bfd:
+@if bfd
+maybe-install-pdf-bfd: install-pdf-bfd
+
+install-pdf-bfd: \
+ configure-bfd \
+ pdf-bfd
+ @[ -f ./bfd/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in bfd" ; \
+ (cd $(HOST_SUBDIR)/bfd && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif bfd
+
.PHONY: maybe-install-html-bfd install-html-bfd
maybe-install-html-bfd:
@if bfd
@@ -4872,14 +5548,12 @@ maintainer-clean-bfd:
.PHONY: configure-opcodes maybe-configure-opcodes
maybe-configure-opcodes:
+@if gcc-bootstrap
+configure-opcodes: stage_current
+@endif gcc-bootstrap
@if opcodes
maybe-configure-opcodes: configure-opcodes
configure-opcodes:
-@endif opcodes
-@if opcodes-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif opcodes-bootstrap
-@if opcodes
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/opcodes/Makefile || exit 0; \
@@ -4895,7 +5569,8 @@ configure-opcodes:
srcdiroption="--srcdir=$${topdir}/opcodes"; \
libsrcdir="$$s/opcodes"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif opcodes
@@ -4912,6 +5587,8 @@ configure-stage1-opcodes:
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/opcodes/Makefile || exit 0; \
$(HOST_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 1 in $(HOST_SUBDIR)/opcodes ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes ; \
cd $(HOST_SUBDIR)/opcodes || exit 1; \
@@ -4923,8 +5600,10 @@ configure-stage1-opcodes:
srcdiroption="--srcdir=$${topdir}/opcodes"; \
libsrcdir="$$s/opcodes"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
- --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
@endif opcodes-bootstrap
.PHONY: configure-stage2-opcodes maybe-configure-stage2-opcodes
@@ -4939,6 +5618,8 @@ configure-stage2-opcodes:
test ! -f $(HOST_SUBDIR)/opcodes/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 2 in $(HOST_SUBDIR)/opcodes ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes ; \
cd $(HOST_SUBDIR)/opcodes || exit 1; \
@@ -4950,7 +5631,9 @@ configure-stage2-opcodes:
srcdiroption="--srcdir=$${topdir}/opcodes"; \
libsrcdir="$$s/opcodes"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif opcodes-bootstrap
@@ -4966,6 +5649,8 @@ configure-stage3-opcodes:
test ! -f $(HOST_SUBDIR)/opcodes/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 3 in $(HOST_SUBDIR)/opcodes ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes ; \
cd $(HOST_SUBDIR)/opcodes || exit 1; \
@@ -4977,7 +5662,9 @@ configure-stage3-opcodes:
srcdiroption="--srcdir=$${topdir}/opcodes"; \
libsrcdir="$$s/opcodes"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif opcodes-bootstrap
@@ -4993,6 +5680,8 @@ configure-stage4-opcodes:
test ! -f $(HOST_SUBDIR)/opcodes/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 4 in $(HOST_SUBDIR)/opcodes ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes ; \
cd $(HOST_SUBDIR)/opcodes || exit 1; \
@@ -5004,7 +5693,9 @@ configure-stage4-opcodes:
srcdiroption="--srcdir=$${topdir}/opcodes"; \
libsrcdir="$$s/opcodes"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif opcodes-bootstrap
@@ -5020,6 +5711,8 @@ configure-stageprofile-opcodes:
test ! -f $(HOST_SUBDIR)/opcodes/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
echo Configuring stage profile in $(HOST_SUBDIR)/opcodes ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes ; \
cd $(HOST_SUBDIR)/opcodes || exit 1; \
@@ -5031,7 +5724,9 @@ configure-stageprofile-opcodes:
srcdiroption="--srcdir=$${topdir}/opcodes"; \
libsrcdir="$$s/opcodes"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif opcodes-bootstrap
@@ -5047,6 +5742,8 @@ configure-stagefeedback-opcodes:
test ! -f $(HOST_SUBDIR)/opcodes/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
echo Configuring stage feedback in $(HOST_SUBDIR)/opcodes ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes ; \
cd $(HOST_SUBDIR)/opcodes || exit 1; \
@@ -5058,7 +5755,9 @@ configure-stagefeedback-opcodes:
srcdiroption="--srcdir=$${topdir}/opcodes"; \
libsrcdir="$$s/opcodes"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif opcodes-bootstrap
@@ -5068,15 +5767,13 @@ configure-stagefeedback-opcodes:
.PHONY: all-opcodes maybe-all-opcodes
maybe-all-opcodes:
+@if gcc-bootstrap
+all-opcodes: stage_current
+@endif gcc-bootstrap
@if opcodes
TARGET-opcodes=all
maybe-all-opcodes: all-opcodes
all-opcodes: configure-opcodes
-@endif opcodes
-@if opcodes-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif opcodes-bootstrap
-@if opcodes
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
@@ -5100,18 +5797,22 @@ all-stage1-opcodes: configure-stage1-opcodes
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
cd $(HOST_SUBDIR)/opcodes && \
- $(MAKE) $(FLAGS_TO_PASS) CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
$(TARGET-stage1-opcodes)
maybe-clean-stage1-opcodes: clean-stage1-opcodes
clean-stage1: clean-stage1-opcodes
clean-stage1-opcodes:
- @[ -f $(HOST_SUBDIR)/opcodes/Makefile ] || [ -f $(HOST_SUBDIR)/stage1-opcodes/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage1 ] || $(MAKE) stage1-start; \
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(HOST_SUBDIR)/opcodes/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage1-opcodes/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
cd $(HOST_SUBDIR)/opcodes && \
$(MAKE) $(FLAGS_TO_PASS) \
- CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" clean
+ clean
@endif opcodes-bootstrap
@@ -5130,19 +5831,23 @@ all-stage2-opcodes: configure-stage2-opcodes
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/opcodes && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage2-opcodes)
maybe-clean-stage2-opcodes: clean-stage2-opcodes
clean-stage2: clean-stage2-opcodes
clean-stage2-opcodes:
- @[ -f $(HOST_SUBDIR)/opcodes/Makefile ] || [ -f $(HOST_SUBDIR)/stage2-opcodes/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage2 ] || $(MAKE) stage2-start; \
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(HOST_SUBDIR)/opcodes/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage2-opcodes/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
cd $(HOST_SUBDIR)/opcodes && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif opcodes-bootstrap
@@ -5161,19 +5866,23 @@ all-stage3-opcodes: configure-stage3-opcodes
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/opcodes && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage3-opcodes)
maybe-clean-stage3-opcodes: clean-stage3-opcodes
clean-stage3: clean-stage3-opcodes
clean-stage3-opcodes:
- @[ -f $(HOST_SUBDIR)/opcodes/Makefile ] || [ -f $(HOST_SUBDIR)/stage3-opcodes/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage3 ] || $(MAKE) stage3-start; \
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(HOST_SUBDIR)/opcodes/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage3-opcodes/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
cd $(HOST_SUBDIR)/opcodes && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif opcodes-bootstrap
@@ -5192,19 +5901,23 @@ all-stage4-opcodes: configure-stage4-opcodes
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/opcodes && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage4-opcodes)
maybe-clean-stage4-opcodes: clean-stage4-opcodes
clean-stage4: clean-stage4-opcodes
clean-stage4-opcodes:
- @[ -f $(HOST_SUBDIR)/opcodes/Makefile ] || [ -f $(HOST_SUBDIR)/stage4-opcodes/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage4 ] || $(MAKE) stage4-start; \
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(HOST_SUBDIR)/opcodes/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage4-opcodes/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
cd $(HOST_SUBDIR)/opcodes && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif opcodes-bootstrap
@@ -5223,19 +5936,23 @@ all-stageprofile-opcodes: configure-stageprofile-opcodes
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/opcodes && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stageprofile-opcodes)
maybe-clean-stageprofile-opcodes: clean-stageprofile-opcodes
clean-stageprofile: clean-stageprofile-opcodes
clean-stageprofile-opcodes:
- @[ -f $(HOST_SUBDIR)/opcodes/Makefile ] || [ -f $(HOST_SUBDIR)/stageprofile-opcodes/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start; \
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(HOST_SUBDIR)/opcodes/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stageprofile-opcodes/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
cd $(HOST_SUBDIR)/opcodes && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" clean
+ clean
@endif opcodes-bootstrap
@@ -5254,19 +5971,23 @@ all-stagefeedback-opcodes: configure-stagefeedback-opcodes
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/opcodes && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-use" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stagefeedback-opcodes)
maybe-clean-stagefeedback-opcodes: clean-stagefeedback-opcodes
clean-stagefeedback: clean-stagefeedback-opcodes
clean-stagefeedback-opcodes:
- @[ -f $(HOST_SUBDIR)/opcodes/Makefile ] || [ -f $(HOST_SUBDIR)/stagefeedback-opcodes/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start; \
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(HOST_SUBDIR)/opcodes/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stagefeedback-opcodes/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
cd $(HOST_SUBDIR)/opcodes && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-use" clean
+ clean
@endif opcodes-bootstrap
@@ -5303,7 +6024,7 @@ install-opcodes: installdirs
@endif opcodes
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-opcodes info-opcodes
maybe-info-opcodes:
@@ -5355,6 +6076,31 @@ dvi-opcodes: \
@endif opcodes
+.PHONY: maybe-pdf-opcodes pdf-opcodes
+maybe-pdf-opcodes:
+@if opcodes
+maybe-pdf-opcodes: pdf-opcodes
+
+pdf-opcodes: \
+ configure-opcodes
+ @[ -f ./opcodes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in opcodes" ; \
+ (cd $(HOST_SUBDIR)/opcodes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif opcodes
+
.PHONY: maybe-html-opcodes html-opcodes
maybe-html-opcodes:
@if opcodes
@@ -5431,6 +6177,32 @@ install-info-opcodes: \
@endif opcodes
+.PHONY: maybe-install-pdf-opcodes install-pdf-opcodes
+maybe-install-pdf-opcodes:
+@if opcodes
+maybe-install-pdf-opcodes: install-pdf-opcodes
+
+install-pdf-opcodes: \
+ configure-opcodes \
+ pdf-opcodes
+ @[ -f ./opcodes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in opcodes" ; \
+ (cd $(HOST_SUBDIR)/opcodes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif opcodes
+
.PHONY: maybe-install-html-opcodes install-html-opcodes
maybe-install-html-opcodes:
@if opcodes
@@ -5582,14 +6354,12 @@ maintainer-clean-opcodes:
.PHONY: configure-binutils maybe-configure-binutils
maybe-configure-binutils:
+@if gcc-bootstrap
+configure-binutils: stage_current
+@endif gcc-bootstrap
@if binutils
maybe-configure-binutils: configure-binutils
configure-binutils:
-@endif binutils
-@if binutils-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif binutils-bootstrap
-@if binutils
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/binutils/Makefile || exit 0; \
@@ -5605,7 +6375,8 @@ configure-binutils:
srcdiroption="--srcdir=$${topdir}/binutils"; \
libsrcdir="$$s/binutils"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif binutils
@@ -5622,6 +6393,8 @@ configure-stage1-binutils:
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/binutils/Makefile || exit 0; \
$(HOST_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 1 in $(HOST_SUBDIR)/binutils ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils ; \
cd $(HOST_SUBDIR)/binutils || exit 1; \
@@ -5633,8 +6406,10 @@ configure-stage1-binutils:
srcdiroption="--srcdir=$${topdir}/binutils"; \
libsrcdir="$$s/binutils"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
- --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
@endif binutils-bootstrap
.PHONY: configure-stage2-binutils maybe-configure-stage2-binutils
@@ -5649,6 +6424,8 @@ configure-stage2-binutils:
test ! -f $(HOST_SUBDIR)/binutils/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 2 in $(HOST_SUBDIR)/binutils ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils ; \
cd $(HOST_SUBDIR)/binutils || exit 1; \
@@ -5660,7 +6437,9 @@ configure-stage2-binutils:
srcdiroption="--srcdir=$${topdir}/binutils"; \
libsrcdir="$$s/binutils"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif binutils-bootstrap
@@ -5676,6 +6455,8 @@ configure-stage3-binutils:
test ! -f $(HOST_SUBDIR)/binutils/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 3 in $(HOST_SUBDIR)/binutils ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils ; \
cd $(HOST_SUBDIR)/binutils || exit 1; \
@@ -5687,7 +6468,9 @@ configure-stage3-binutils:
srcdiroption="--srcdir=$${topdir}/binutils"; \
libsrcdir="$$s/binutils"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif binutils-bootstrap
@@ -5703,6 +6486,8 @@ configure-stage4-binutils:
test ! -f $(HOST_SUBDIR)/binutils/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 4 in $(HOST_SUBDIR)/binutils ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils ; \
cd $(HOST_SUBDIR)/binutils || exit 1; \
@@ -5714,7 +6499,9 @@ configure-stage4-binutils:
srcdiroption="--srcdir=$${topdir}/binutils"; \
libsrcdir="$$s/binutils"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif binutils-bootstrap
@@ -5730,6 +6517,8 @@ configure-stageprofile-binutils:
test ! -f $(HOST_SUBDIR)/binutils/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
echo Configuring stage profile in $(HOST_SUBDIR)/binutils ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils ; \
cd $(HOST_SUBDIR)/binutils || exit 1; \
@@ -5741,7 +6530,9 @@ configure-stageprofile-binutils:
srcdiroption="--srcdir=$${topdir}/binutils"; \
libsrcdir="$$s/binutils"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif binutils-bootstrap
@@ -5757,6 +6548,8 @@ configure-stagefeedback-binutils:
test ! -f $(HOST_SUBDIR)/binutils/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
echo Configuring stage feedback in $(HOST_SUBDIR)/binutils ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils ; \
cd $(HOST_SUBDIR)/binutils || exit 1; \
@@ -5768,7 +6561,9 @@ configure-stagefeedback-binutils:
srcdiroption="--srcdir=$${topdir}/binutils"; \
libsrcdir="$$s/binutils"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif binutils-bootstrap
@@ -5778,15 +6573,13 @@ configure-stagefeedback-binutils:
.PHONY: all-binutils maybe-all-binutils
maybe-all-binutils:
+@if gcc-bootstrap
+all-binutils: stage_current
+@endif gcc-bootstrap
@if binutils
TARGET-binutils=all
maybe-all-binutils: all-binutils
all-binutils: configure-binutils
-@endif binutils
-@if binutils-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif binutils-bootstrap
-@if binutils
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
@@ -5810,18 +6603,22 @@ all-stage1-binutils: configure-stage1-binutils
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
cd $(HOST_SUBDIR)/binutils && \
- $(MAKE) $(FLAGS_TO_PASS) CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
$(TARGET-stage1-binutils)
maybe-clean-stage1-binutils: clean-stage1-binutils
clean-stage1: clean-stage1-binutils
clean-stage1-binutils:
- @[ -f $(HOST_SUBDIR)/binutils/Makefile ] || [ -f $(HOST_SUBDIR)/stage1-binutils/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage1 ] || $(MAKE) stage1-start; \
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(HOST_SUBDIR)/binutils/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage1-binutils/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
cd $(HOST_SUBDIR)/binutils && \
$(MAKE) $(FLAGS_TO_PASS) \
- CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" clean
+ clean
@endif binutils-bootstrap
@@ -5840,19 +6637,23 @@ all-stage2-binutils: configure-stage2-binutils
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/binutils && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage2-binutils)
maybe-clean-stage2-binutils: clean-stage2-binutils
clean-stage2: clean-stage2-binutils
clean-stage2-binutils:
- @[ -f $(HOST_SUBDIR)/binutils/Makefile ] || [ -f $(HOST_SUBDIR)/stage2-binutils/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage2 ] || $(MAKE) stage2-start; \
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(HOST_SUBDIR)/binutils/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage2-binutils/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
cd $(HOST_SUBDIR)/binutils && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif binutils-bootstrap
@@ -5871,19 +6672,23 @@ all-stage3-binutils: configure-stage3-binutils
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/binutils && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage3-binutils)
maybe-clean-stage3-binutils: clean-stage3-binutils
clean-stage3: clean-stage3-binutils
clean-stage3-binutils:
- @[ -f $(HOST_SUBDIR)/binutils/Makefile ] || [ -f $(HOST_SUBDIR)/stage3-binutils/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage3 ] || $(MAKE) stage3-start; \
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(HOST_SUBDIR)/binutils/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage3-binutils/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
cd $(HOST_SUBDIR)/binutils && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif binutils-bootstrap
@@ -5902,19 +6707,23 @@ all-stage4-binutils: configure-stage4-binutils
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/binutils && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage4-binutils)
maybe-clean-stage4-binutils: clean-stage4-binutils
clean-stage4: clean-stage4-binutils
clean-stage4-binutils:
- @[ -f $(HOST_SUBDIR)/binutils/Makefile ] || [ -f $(HOST_SUBDIR)/stage4-binutils/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage4 ] || $(MAKE) stage4-start; \
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(HOST_SUBDIR)/binutils/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage4-binutils/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
cd $(HOST_SUBDIR)/binutils && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif binutils-bootstrap
@@ -5933,19 +6742,23 @@ all-stageprofile-binutils: configure-stageprofile-binutils
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/binutils && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stageprofile-binutils)
maybe-clean-stageprofile-binutils: clean-stageprofile-binutils
clean-stageprofile: clean-stageprofile-binutils
clean-stageprofile-binutils:
- @[ -f $(HOST_SUBDIR)/binutils/Makefile ] || [ -f $(HOST_SUBDIR)/stageprofile-binutils/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start; \
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(HOST_SUBDIR)/binutils/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stageprofile-binutils/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
cd $(HOST_SUBDIR)/binutils && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" clean
+ clean
@endif binutils-bootstrap
@@ -5964,19 +6777,23 @@ all-stagefeedback-binutils: configure-stagefeedback-binutils
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/binutils && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-use" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stagefeedback-binutils)
maybe-clean-stagefeedback-binutils: clean-stagefeedback-binutils
clean-stagefeedback: clean-stagefeedback-binutils
clean-stagefeedback-binutils:
- @[ -f $(HOST_SUBDIR)/binutils/Makefile ] || [ -f $(HOST_SUBDIR)/stagefeedback-binutils/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start; \
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(HOST_SUBDIR)/binutils/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stagefeedback-binutils/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
cd $(HOST_SUBDIR)/binutils && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-use" clean
+ clean
@endif binutils-bootstrap
@@ -6013,7 +6830,7 @@ install-binutils: installdirs
@endif binutils
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-binutils info-binutils
maybe-info-binutils:
@@ -6065,6 +6882,31 @@ dvi-binutils: \
@endif binutils
+.PHONY: maybe-pdf-binutils pdf-binutils
+maybe-pdf-binutils:
+@if binutils
+maybe-pdf-binutils: pdf-binutils
+
+pdf-binutils: \
+ configure-binutils
+ @[ -f ./binutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in binutils" ; \
+ (cd $(HOST_SUBDIR)/binutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif binutils
+
.PHONY: maybe-html-binutils html-binutils
maybe-html-binutils:
@if binutils
@@ -6141,6 +6983,32 @@ install-info-binutils: \
@endif binutils
+.PHONY: maybe-install-pdf-binutils install-pdf-binutils
+maybe-install-pdf-binutils:
+@if binutils
+maybe-install-pdf-binutils: install-pdf-binutils
+
+install-pdf-binutils: \
+ configure-binutils \
+ pdf-binutils
+ @[ -f ./binutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in binutils" ; \
+ (cd $(HOST_SUBDIR)/binutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif binutils
+
.PHONY: maybe-install-html-binutils install-html-binutils
maybe-install-html-binutils:
@if binutils
@@ -6292,6 +7160,9 @@ maintainer-clean-binutils:
.PHONY: configure-bison maybe-configure-bison
maybe-configure-bison:
+@if gcc-bootstrap
+configure-bison: stage_current
+@endif gcc-bootstrap
@if bison
maybe-configure-bison: configure-bison
configure-bison:
@@ -6311,7 +7182,8 @@ configure-bison:
srcdiroption="--srcdir=$${topdir}/bison"; \
libsrcdir="$$s/bison"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif bison
@@ -6321,6 +7193,9 @@ configure-bison:
.PHONY: all-bison maybe-all-bison
maybe-all-bison:
+@if gcc-bootstrap
+all-bison: stage_current
+@endif gcc-bootstrap
@if bison
TARGET-bison=all
maybe-all-bison: all-bison
@@ -6369,7 +7244,7 @@ install-bison: installdirs
@endif bison
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-bison info-bison
maybe-info-bison:
@@ -6423,6 +7298,32 @@ dvi-bison: \
@endif bison
+.PHONY: maybe-pdf-bison pdf-bison
+maybe-pdf-bison:
+@if bison
+maybe-pdf-bison: pdf-bison
+
+pdf-bison: \
+ configure-bison
+ @: $(MAKE); $(unstage)
+ @[ -f ./bison/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in bison" ; \
+ (cd $(HOST_SUBDIR)/bison && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif bison
+
.PHONY: maybe-html-bison html-bison
maybe-html-bison:
@if bison
@@ -6502,6 +7403,33 @@ install-info-bison: \
@endif bison
+.PHONY: maybe-install-pdf-bison install-pdf-bison
+maybe-install-pdf-bison:
+@if bison
+maybe-install-pdf-bison: install-pdf-bison
+
+install-pdf-bison: \
+ configure-bison \
+ pdf-bison
+ @: $(MAKE); $(unstage)
+ @[ -f ./bison/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in bison" ; \
+ (cd $(HOST_SUBDIR)/bison && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif bison
+
.PHONY: maybe-install-html-bison install-html-bison
maybe-install-html-bison:
@if bison
@@ -6659,6 +7587,9 @@ maintainer-clean-bison:
.PHONY: configure-byacc maybe-configure-byacc
maybe-configure-byacc:
+@if gcc-bootstrap
+configure-byacc: stage_current
+@endif gcc-bootstrap
@if byacc
maybe-configure-byacc: configure-byacc
configure-byacc:
@@ -6678,7 +7609,8 @@ configure-byacc:
srcdiroption="--srcdir=$${topdir}/byacc"; \
libsrcdir="$$s/byacc"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif byacc
@@ -6688,6 +7620,9 @@ configure-byacc:
.PHONY: all-byacc maybe-all-byacc
maybe-all-byacc:
+@if gcc-bootstrap
+all-byacc: stage_current
+@endif gcc-bootstrap
@if byacc
TARGET-byacc=all
maybe-all-byacc: all-byacc
@@ -6736,7 +7671,7 @@ install-byacc: installdirs
@endif byacc
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-byacc info-byacc
maybe-info-byacc:
@@ -6790,6 +7725,32 @@ dvi-byacc: \
@endif byacc
+.PHONY: maybe-pdf-byacc pdf-byacc
+maybe-pdf-byacc:
+@if byacc
+maybe-pdf-byacc: pdf-byacc
+
+pdf-byacc: \
+ configure-byacc
+ @: $(MAKE); $(unstage)
+ @[ -f ./byacc/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in byacc" ; \
+ (cd $(HOST_SUBDIR)/byacc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif byacc
+
.PHONY: maybe-html-byacc html-byacc
maybe-html-byacc:
@if byacc
@@ -6869,6 +7830,33 @@ install-info-byacc: \
@endif byacc
+.PHONY: maybe-install-pdf-byacc install-pdf-byacc
+maybe-install-pdf-byacc:
+@if byacc
+maybe-install-pdf-byacc: install-pdf-byacc
+
+install-pdf-byacc: \
+ configure-byacc \
+ pdf-byacc
+ @: $(MAKE); $(unstage)
+ @[ -f ./byacc/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in byacc" ; \
+ (cd $(HOST_SUBDIR)/byacc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif byacc
+
.PHONY: maybe-install-html-byacc install-html-byacc
maybe-install-html-byacc:
@if byacc
@@ -7026,6 +8014,9 @@ maintainer-clean-byacc:
.PHONY: configure-bzip2 maybe-configure-bzip2
maybe-configure-bzip2:
+@if gcc-bootstrap
+configure-bzip2: stage_current
+@endif gcc-bootstrap
@if bzip2
maybe-configure-bzip2: configure-bzip2
configure-bzip2:
@@ -7045,7 +8036,8 @@ configure-bzip2:
srcdiroption="--srcdir=$${topdir}/bzip2"; \
libsrcdir="$$s/bzip2"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif bzip2
@@ -7055,6 +8047,9 @@ configure-bzip2:
.PHONY: all-bzip2 maybe-all-bzip2
maybe-all-bzip2:
+@if gcc-bootstrap
+all-bzip2: stage_current
+@endif gcc-bootstrap
@if bzip2
TARGET-bzip2=all
maybe-all-bzip2: all-bzip2
@@ -7100,7 +8095,7 @@ install-bzip2: installdirs
@endif bzip2
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-bzip2 info-bzip2
maybe-info-bzip2:
@@ -7154,6 +8149,32 @@ dvi-bzip2: \
@endif bzip2
+.PHONY: maybe-pdf-bzip2 pdf-bzip2
+maybe-pdf-bzip2:
+@if bzip2
+maybe-pdf-bzip2: pdf-bzip2
+
+pdf-bzip2: \
+ configure-bzip2
+ @: $(MAKE); $(unstage)
+ @[ -f ./bzip2/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in bzip2" ; \
+ (cd $(HOST_SUBDIR)/bzip2 && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif bzip2
+
.PHONY: maybe-html-bzip2 html-bzip2
maybe-html-bzip2:
@if bzip2
@@ -7233,6 +8254,33 @@ install-info-bzip2: \
@endif bzip2
+.PHONY: maybe-install-pdf-bzip2 install-pdf-bzip2
+maybe-install-pdf-bzip2:
+@if bzip2
+maybe-install-pdf-bzip2: install-pdf-bzip2
+
+install-pdf-bzip2: \
+ configure-bzip2 \
+ pdf-bzip2
+ @: $(MAKE); $(unstage)
+ @[ -f ./bzip2/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in bzip2" ; \
+ (cd $(HOST_SUBDIR)/bzip2 && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif bzip2
+
.PHONY: maybe-install-html-bzip2 install-html-bzip2
maybe-install-html-bzip2:
@if bzip2
@@ -7390,6 +8438,9 @@ maintainer-clean-bzip2:
.PHONY: configure-dejagnu maybe-configure-dejagnu
maybe-configure-dejagnu:
+@if gcc-bootstrap
+configure-dejagnu: stage_current
+@endif gcc-bootstrap
@if dejagnu
maybe-configure-dejagnu: configure-dejagnu
configure-dejagnu:
@@ -7409,7 +8460,8 @@ configure-dejagnu:
srcdiroption="--srcdir=$${topdir}/dejagnu"; \
libsrcdir="$$s/dejagnu"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif dejagnu
@@ -7419,6 +8471,9 @@ configure-dejagnu:
.PHONY: all-dejagnu maybe-all-dejagnu
maybe-all-dejagnu:
+@if gcc-bootstrap
+all-dejagnu: stage_current
+@endif gcc-bootstrap
@if dejagnu
TARGET-dejagnu=all
maybe-all-dejagnu: all-dejagnu
@@ -7464,7 +8519,7 @@ install-dejagnu: installdirs
@endif dejagnu
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-dejagnu info-dejagnu
maybe-info-dejagnu:
@@ -7518,6 +8573,32 @@ dvi-dejagnu: \
@endif dejagnu
+.PHONY: maybe-pdf-dejagnu pdf-dejagnu
+maybe-pdf-dejagnu:
+@if dejagnu
+maybe-pdf-dejagnu: pdf-dejagnu
+
+pdf-dejagnu: \
+ configure-dejagnu
+ @: $(MAKE); $(unstage)
+ @[ -f ./dejagnu/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in dejagnu" ; \
+ (cd $(HOST_SUBDIR)/dejagnu && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif dejagnu
+
.PHONY: maybe-html-dejagnu html-dejagnu
maybe-html-dejagnu:
@if dejagnu
@@ -7597,6 +8678,33 @@ install-info-dejagnu: \
@endif dejagnu
+.PHONY: maybe-install-pdf-dejagnu install-pdf-dejagnu
+maybe-install-pdf-dejagnu:
+@if dejagnu
+maybe-install-pdf-dejagnu: install-pdf-dejagnu
+
+install-pdf-dejagnu: \
+ configure-dejagnu \
+ pdf-dejagnu
+ @: $(MAKE); $(unstage)
+ @[ -f ./dejagnu/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in dejagnu" ; \
+ (cd $(HOST_SUBDIR)/dejagnu && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif dejagnu
+
.PHONY: maybe-install-html-dejagnu install-html-dejagnu
maybe-install-html-dejagnu:
@if dejagnu
@@ -7754,6 +8862,9 @@ maintainer-clean-dejagnu:
.PHONY: configure-diff maybe-configure-diff
maybe-configure-diff:
+@if gcc-bootstrap
+configure-diff: stage_current
+@endif gcc-bootstrap
@if diff
maybe-configure-diff: configure-diff
configure-diff:
@@ -7773,7 +8884,8 @@ configure-diff:
srcdiroption="--srcdir=$${topdir}/diff"; \
libsrcdir="$$s/diff"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif diff
@@ -7783,6 +8895,9 @@ configure-diff:
.PHONY: all-diff maybe-all-diff
maybe-all-diff:
+@if gcc-bootstrap
+all-diff: stage_current
+@endif gcc-bootstrap
@if diff
TARGET-diff=all
maybe-all-diff: all-diff
@@ -7828,7 +8943,7 @@ install-diff: installdirs
@endif diff
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-diff info-diff
maybe-info-diff:
@@ -7882,6 +8997,32 @@ dvi-diff: \
@endif diff
+.PHONY: maybe-pdf-diff pdf-diff
+maybe-pdf-diff:
+@if diff
+maybe-pdf-diff: pdf-diff
+
+pdf-diff: \
+ configure-diff
+ @: $(MAKE); $(unstage)
+ @[ -f ./diff/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in diff" ; \
+ (cd $(HOST_SUBDIR)/diff && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif diff
+
.PHONY: maybe-html-diff html-diff
maybe-html-diff:
@if diff
@@ -7961,6 +9102,33 @@ install-info-diff: \
@endif diff
+.PHONY: maybe-install-pdf-diff install-pdf-diff
+maybe-install-pdf-diff:
+@if diff
+maybe-install-pdf-diff: install-pdf-diff
+
+install-pdf-diff: \
+ configure-diff \
+ pdf-diff
+ @: $(MAKE); $(unstage)
+ @[ -f ./diff/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in diff" ; \
+ (cd $(HOST_SUBDIR)/diff && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif diff
+
.PHONY: maybe-install-html-diff install-html-diff
maybe-install-html-diff:
@if diff
@@ -8118,6 +9286,9 @@ maintainer-clean-diff:
.PHONY: configure-dosutils maybe-configure-dosutils
maybe-configure-dosutils:
+@if gcc-bootstrap
+configure-dosutils: stage_current
+@endif gcc-bootstrap
@if dosutils
maybe-configure-dosutils: configure-dosutils
configure-dosutils:
@@ -8137,7 +9308,8 @@ configure-dosutils:
srcdiroption="--srcdir=$${topdir}/dosutils"; \
libsrcdir="$$s/dosutils"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif dosutils
@@ -8147,6 +9319,9 @@ configure-dosutils:
.PHONY: all-dosutils maybe-all-dosutils
maybe-all-dosutils:
+@if gcc-bootstrap
+all-dosutils: stage_current
+@endif gcc-bootstrap
@if dosutils
TARGET-dosutils=all
maybe-all-dosutils: all-dosutils
@@ -8186,7 +9361,7 @@ install-dosutils: installdirs
@endif dosutils
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-dosutils info-dosutils
maybe-info-dosutils:
@@ -8240,6 +9415,32 @@ dvi-dosutils: \
@endif dosutils
+.PHONY: maybe-pdf-dosutils pdf-dosutils
+maybe-pdf-dosutils:
+@if dosutils
+maybe-pdf-dosutils: pdf-dosutils
+
+pdf-dosutils: \
+ configure-dosutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./dosutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in dosutils" ; \
+ (cd $(HOST_SUBDIR)/dosutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif dosutils
+
.PHONY: maybe-html-dosutils html-dosutils
maybe-html-dosutils:
@if dosutils
@@ -8319,6 +9520,33 @@ install-info-dosutils: \
@endif dosutils
+.PHONY: maybe-install-pdf-dosutils install-pdf-dosutils
+maybe-install-pdf-dosutils:
+@if dosutils
+maybe-install-pdf-dosutils: install-pdf-dosutils
+
+install-pdf-dosutils: \
+ configure-dosutils \
+ pdf-dosutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./dosutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in dosutils" ; \
+ (cd $(HOST_SUBDIR)/dosutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif dosutils
+
.PHONY: maybe-install-html-dosutils install-html-dosutils
maybe-install-html-dosutils:
@if dosutils
@@ -8476,6 +9704,9 @@ maintainer-clean-dosutils:
.PHONY: configure-etc maybe-configure-etc
maybe-configure-etc:
+@if gcc-bootstrap
+configure-etc: stage_current
+@endif gcc-bootstrap
@if etc
maybe-configure-etc: configure-etc
configure-etc:
@@ -8495,7 +9726,8 @@ configure-etc:
srcdiroption="--srcdir=$${topdir}/etc"; \
libsrcdir="$$s/etc"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif etc
@@ -8505,6 +9737,9 @@ configure-etc:
.PHONY: all-etc maybe-all-etc
maybe-all-etc:
+@if gcc-bootstrap
+all-etc: stage_current
+@endif gcc-bootstrap
@if etc
TARGET-etc=all
maybe-all-etc: all-etc
@@ -8550,7 +9785,7 @@ install-etc: installdirs
@endif etc
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-etc info-etc
maybe-info-etc:
@@ -8604,6 +9839,32 @@ dvi-etc: \
@endif etc
+.PHONY: maybe-pdf-etc pdf-etc
+maybe-pdf-etc:
+@if etc
+maybe-pdf-etc: pdf-etc
+
+pdf-etc: \
+ configure-etc
+ @: $(MAKE); $(unstage)
+ @[ -f ./etc/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in etc" ; \
+ (cd $(HOST_SUBDIR)/etc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif etc
+
.PHONY: maybe-html-etc html-etc
maybe-html-etc:
@if etc
@@ -8683,6 +9944,33 @@ install-info-etc: \
@endif etc
+.PHONY: maybe-install-pdf-etc install-pdf-etc
+maybe-install-pdf-etc:
+@if etc
+maybe-install-pdf-etc: install-pdf-etc
+
+install-pdf-etc: \
+ configure-etc \
+ pdf-etc
+ @: $(MAKE); $(unstage)
+ @[ -f ./etc/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in etc" ; \
+ (cd $(HOST_SUBDIR)/etc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif etc
+
.PHONY: maybe-install-html-etc install-html-etc
maybe-install-html-etc:
@if etc
@@ -8840,6 +10128,9 @@ maintainer-clean-etc:
.PHONY: configure-fastjar maybe-configure-fastjar
maybe-configure-fastjar:
+@if gcc-bootstrap
+configure-fastjar: stage_current
+@endif gcc-bootstrap
@if fastjar
maybe-configure-fastjar: configure-fastjar
configure-fastjar:
@@ -8859,7 +10150,8 @@ configure-fastjar:
srcdiroption="--srcdir=$${topdir}/fastjar"; \
libsrcdir="$$s/fastjar"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif fastjar
@@ -8869,6 +10161,9 @@ configure-fastjar:
.PHONY: all-fastjar maybe-all-fastjar
maybe-all-fastjar:
+@if gcc-bootstrap
+all-fastjar: stage_current
+@endif gcc-bootstrap
@if fastjar
TARGET-fastjar=all
maybe-all-fastjar: all-fastjar
@@ -8917,7 +10212,7 @@ install-fastjar: installdirs
@endif fastjar
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-fastjar info-fastjar
maybe-info-fastjar:
@@ -8971,6 +10266,32 @@ dvi-fastjar: \
@endif fastjar
+.PHONY: maybe-pdf-fastjar pdf-fastjar
+maybe-pdf-fastjar:
+@if fastjar
+maybe-pdf-fastjar: pdf-fastjar
+
+pdf-fastjar: \
+ configure-fastjar
+ @: $(MAKE); $(unstage)
+ @[ -f ./fastjar/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in fastjar" ; \
+ (cd $(HOST_SUBDIR)/fastjar && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif fastjar
+
.PHONY: maybe-html-fastjar html-fastjar
maybe-html-fastjar:
@if fastjar
@@ -9050,6 +10371,33 @@ install-info-fastjar: \
@endif fastjar
+.PHONY: maybe-install-pdf-fastjar install-pdf-fastjar
+maybe-install-pdf-fastjar:
+@if fastjar
+maybe-install-pdf-fastjar: install-pdf-fastjar
+
+install-pdf-fastjar: \
+ configure-fastjar \
+ pdf-fastjar
+ @: $(MAKE); $(unstage)
+ @[ -f ./fastjar/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in fastjar" ; \
+ (cd $(HOST_SUBDIR)/fastjar && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif fastjar
+
.PHONY: maybe-install-html-fastjar install-html-fastjar
maybe-install-html-fastjar:
@if fastjar
@@ -9207,6 +10555,9 @@ maintainer-clean-fastjar:
.PHONY: configure-fileutils maybe-configure-fileutils
maybe-configure-fileutils:
+@if gcc-bootstrap
+configure-fileutils: stage_current
+@endif gcc-bootstrap
@if fileutils
maybe-configure-fileutils: configure-fileutils
configure-fileutils:
@@ -9226,7 +10577,8 @@ configure-fileutils:
srcdiroption="--srcdir=$${topdir}/fileutils"; \
libsrcdir="$$s/fileutils"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif fileutils
@@ -9236,6 +10588,9 @@ configure-fileutils:
.PHONY: all-fileutils maybe-all-fileutils
maybe-all-fileutils:
+@if gcc-bootstrap
+all-fileutils: stage_current
+@endif gcc-bootstrap
@if fileutils
TARGET-fileutils=all
maybe-all-fileutils: all-fileutils
@@ -9281,7 +10636,7 @@ install-fileutils: installdirs
@endif fileutils
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-fileutils info-fileutils
maybe-info-fileutils:
@@ -9335,6 +10690,32 @@ dvi-fileutils: \
@endif fileutils
+.PHONY: maybe-pdf-fileutils pdf-fileutils
+maybe-pdf-fileutils:
+@if fileutils
+maybe-pdf-fileutils: pdf-fileutils
+
+pdf-fileutils: \
+ configure-fileutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./fileutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in fileutils" ; \
+ (cd $(HOST_SUBDIR)/fileutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif fileutils
+
.PHONY: maybe-html-fileutils html-fileutils
maybe-html-fileutils:
@if fileutils
@@ -9414,6 +10795,33 @@ install-info-fileutils: \
@endif fileutils
+.PHONY: maybe-install-pdf-fileutils install-pdf-fileutils
+maybe-install-pdf-fileutils:
+@if fileutils
+maybe-install-pdf-fileutils: install-pdf-fileutils
+
+install-pdf-fileutils: \
+ configure-fileutils \
+ pdf-fileutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./fileutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in fileutils" ; \
+ (cd $(HOST_SUBDIR)/fileutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif fileutils
+
.PHONY: maybe-install-html-fileutils install-html-fileutils
maybe-install-html-fileutils:
@if fileutils
@@ -9571,6 +10979,9 @@ maintainer-clean-fileutils:
.PHONY: configure-findutils maybe-configure-findutils
maybe-configure-findutils:
+@if gcc-bootstrap
+configure-findutils: stage_current
+@endif gcc-bootstrap
@if findutils
maybe-configure-findutils: configure-findutils
configure-findutils:
@@ -9590,7 +11001,8 @@ configure-findutils:
srcdiroption="--srcdir=$${topdir}/findutils"; \
libsrcdir="$$s/findutils"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif findutils
@@ -9600,6 +11012,9 @@ configure-findutils:
.PHONY: all-findutils maybe-all-findutils
maybe-all-findutils:
+@if gcc-bootstrap
+all-findutils: stage_current
+@endif gcc-bootstrap
@if findutils
TARGET-findutils=all
maybe-all-findutils: all-findutils
@@ -9645,7 +11060,7 @@ install-findutils: installdirs
@endif findutils
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-findutils info-findutils
maybe-info-findutils:
@@ -9699,6 +11114,32 @@ dvi-findutils: \
@endif findutils
+.PHONY: maybe-pdf-findutils pdf-findutils
+maybe-pdf-findutils:
+@if findutils
+maybe-pdf-findutils: pdf-findutils
+
+pdf-findutils: \
+ configure-findutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./findutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in findutils" ; \
+ (cd $(HOST_SUBDIR)/findutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif findutils
+
.PHONY: maybe-html-findutils html-findutils
maybe-html-findutils:
@if findutils
@@ -9778,6 +11219,33 @@ install-info-findutils: \
@endif findutils
+.PHONY: maybe-install-pdf-findutils install-pdf-findutils
+maybe-install-pdf-findutils:
+@if findutils
+maybe-install-pdf-findutils: install-pdf-findutils
+
+install-pdf-findutils: \
+ configure-findutils \
+ pdf-findutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./findutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in findutils" ; \
+ (cd $(HOST_SUBDIR)/findutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif findutils
+
.PHONY: maybe-install-html-findutils install-html-findutils
maybe-install-html-findutils:
@if findutils
@@ -9935,6 +11403,9 @@ maintainer-clean-findutils:
.PHONY: configure-find maybe-configure-find
maybe-configure-find:
+@if gcc-bootstrap
+configure-find: stage_current
+@endif gcc-bootstrap
@if find
maybe-configure-find: configure-find
configure-find:
@@ -9954,7 +11425,8 @@ configure-find:
srcdiroption="--srcdir=$${topdir}/find"; \
libsrcdir="$$s/find"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif find
@@ -9964,6 +11436,9 @@ configure-find:
.PHONY: all-find maybe-all-find
maybe-all-find:
+@if gcc-bootstrap
+all-find: stage_current
+@endif gcc-bootstrap
@if find
TARGET-find=all
maybe-all-find: all-find
@@ -10009,7 +11484,7 @@ install-find: installdirs
@endif find
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-find info-find
maybe-info-find:
@@ -10063,6 +11538,32 @@ dvi-find: \
@endif find
+.PHONY: maybe-pdf-find pdf-find
+maybe-pdf-find:
+@if find
+maybe-pdf-find: pdf-find
+
+pdf-find: \
+ configure-find
+ @: $(MAKE); $(unstage)
+ @[ -f ./find/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in find" ; \
+ (cd $(HOST_SUBDIR)/find && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif find
+
.PHONY: maybe-html-find html-find
maybe-html-find:
@if find
@@ -10142,6 +11643,33 @@ install-info-find: \
@endif find
+.PHONY: maybe-install-pdf-find install-pdf-find
+maybe-install-pdf-find:
+@if find
+maybe-install-pdf-find: install-pdf-find
+
+install-pdf-find: \
+ configure-find \
+ pdf-find
+ @: $(MAKE); $(unstage)
+ @[ -f ./find/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in find" ; \
+ (cd $(HOST_SUBDIR)/find && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif find
+
.PHONY: maybe-install-html-find install-html-find
maybe-install-html-find:
@if find
@@ -10299,6 +11827,9 @@ maintainer-clean-find:
.PHONY: configure-fixincludes maybe-configure-fixincludes
maybe-configure-fixincludes:
+@if gcc-bootstrap
+configure-fixincludes: stage_current
+@endif gcc-bootstrap
@if fixincludes
maybe-configure-fixincludes: configure-fixincludes
configure-fixincludes:
@@ -10318,7 +11849,8 @@ configure-fixincludes:
srcdiroption="--srcdir=$${topdir}/fixincludes"; \
libsrcdir="$$s/fixincludes"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif fixincludes
@@ -10328,6 +11860,9 @@ configure-fixincludes:
.PHONY: all-fixincludes maybe-all-fixincludes
maybe-all-fixincludes:
+@if gcc-bootstrap
+all-fixincludes: stage_current
+@endif gcc-bootstrap
@if fixincludes
TARGET-fixincludes=all
maybe-all-fixincludes: all-fixincludes
@@ -10373,15 +11908,31 @@ install-fixincludes: installdirs
@endif fixincludes
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-fixincludes info-fixincludes
maybe-info-fixincludes:
@if fixincludes
maybe-info-fixincludes: info-fixincludes
-# fixincludes doesn't support info.
-info-fixincludes:
+info-fixincludes: \
+ configure-fixincludes
+ @: $(MAKE); $(unstage)
+ @[ -f ./fixincludes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing info in fixincludes" ; \
+ (cd $(HOST_SUBDIR)/fixincludes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ info) \
+ || exit 1
@endif fixincludes
@@ -10390,8 +11941,50 @@ maybe-dvi-fixincludes:
@if fixincludes
maybe-dvi-fixincludes: dvi-fixincludes
-# fixincludes doesn't support dvi.
-dvi-fixincludes:
+dvi-fixincludes: \
+ configure-fixincludes
+ @: $(MAKE); $(unstage)
+ @[ -f ./fixincludes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing dvi in fixincludes" ; \
+ (cd $(HOST_SUBDIR)/fixincludes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ dvi) \
+ || exit 1
+
+@endif fixincludes
+
+.PHONY: maybe-pdf-fixincludes pdf-fixincludes
+maybe-pdf-fixincludes:
+@if fixincludes
+maybe-pdf-fixincludes: pdf-fixincludes
+
+pdf-fixincludes: \
+ configure-fixincludes
+ @: $(MAKE); $(unstage)
+ @[ -f ./fixincludes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in fixincludes" ; \
+ (cd $(HOST_SUBDIR)/fixincludes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
@endif fixincludes
@@ -10436,8 +12029,52 @@ maybe-install-info-fixincludes:
@if fixincludes
maybe-install-info-fixincludes: install-info-fixincludes
-# fixincludes doesn't support install-info.
-install-info-fixincludes:
+install-info-fixincludes: \
+ configure-fixincludes \
+ info-fixincludes
+ @: $(MAKE); $(unstage)
+ @[ -f ./fixincludes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-info in fixincludes" ; \
+ (cd $(HOST_SUBDIR)/fixincludes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-info) \
+ || exit 1
+
+@endif fixincludes
+
+.PHONY: maybe-install-pdf-fixincludes install-pdf-fixincludes
+maybe-install-pdf-fixincludes:
+@if fixincludes
+maybe-install-pdf-fixincludes: install-pdf-fixincludes
+
+install-pdf-fixincludes: \
+ configure-fixincludes \
+ pdf-fixincludes
+ @: $(MAKE); $(unstage)
+ @[ -f ./fixincludes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in fixincludes" ; \
+ (cd $(HOST_SUBDIR)/fixincludes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
@endif fixincludes
@@ -10473,8 +12110,24 @@ maybe-installcheck-fixincludes:
@if fixincludes
maybe-installcheck-fixincludes: installcheck-fixincludes
-# fixincludes doesn't support installcheck.
-installcheck-fixincludes:
+installcheck-fixincludes: \
+ configure-fixincludes
+ @: $(MAKE); $(unstage)
+ @[ -f ./fixincludes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing installcheck in fixincludes" ; \
+ (cd $(HOST_SUBDIR)/fixincludes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ installcheck) \
+ || exit 1
@endif fixincludes
@@ -10582,6 +12235,9 @@ maintainer-clean-fixincludes:
.PHONY: configure-flex maybe-configure-flex
maybe-configure-flex:
+@if gcc-bootstrap
+configure-flex: stage_current
+@endif gcc-bootstrap
@if flex
maybe-configure-flex: configure-flex
configure-flex:
@@ -10601,7 +12257,8 @@ configure-flex:
srcdiroption="--srcdir=$${topdir}/flex"; \
libsrcdir="$$s/flex"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif flex
@@ -10611,6 +12268,9 @@ configure-flex:
.PHONY: all-flex maybe-all-flex
maybe-all-flex:
+@if gcc-bootstrap
+all-flex: stage_current
+@endif gcc-bootstrap
@if flex
TARGET-flex=all
maybe-all-flex: all-flex
@@ -10659,7 +12319,7 @@ install-flex: installdirs
@endif flex
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-flex info-flex
maybe-info-flex:
@@ -10713,6 +12373,32 @@ dvi-flex: \
@endif flex
+.PHONY: maybe-pdf-flex pdf-flex
+maybe-pdf-flex:
+@if flex
+maybe-pdf-flex: pdf-flex
+
+pdf-flex: \
+ configure-flex
+ @: $(MAKE); $(unstage)
+ @[ -f ./flex/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in flex" ; \
+ (cd $(HOST_SUBDIR)/flex && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif flex
+
.PHONY: maybe-html-flex html-flex
maybe-html-flex:
@if flex
@@ -10792,6 +12478,33 @@ install-info-flex: \
@endif flex
+.PHONY: maybe-install-pdf-flex install-pdf-flex
+maybe-install-pdf-flex:
+@if flex
+maybe-install-pdf-flex: install-pdf-flex
+
+install-pdf-flex: \
+ configure-flex \
+ pdf-flex
+ @: $(MAKE); $(unstage)
+ @[ -f ./flex/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in flex" ; \
+ (cd $(HOST_SUBDIR)/flex && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif flex
+
.PHONY: maybe-install-html-flex install-html-flex
maybe-install-html-flex:
@if flex
@@ -10949,14 +12662,12 @@ maintainer-clean-flex:
.PHONY: configure-gas maybe-configure-gas
maybe-configure-gas:
+@if gcc-bootstrap
+configure-gas: stage_current
+@endif gcc-bootstrap
@if gas
maybe-configure-gas: configure-gas
configure-gas:
-@endif gas
-@if gas-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif gas-bootstrap
-@if gas
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/gas/Makefile || exit 0; \
@@ -10972,7 +12683,8 @@ configure-gas:
srcdiroption="--srcdir=$${topdir}/gas"; \
libsrcdir="$$s/gas"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif gas
@@ -10989,6 +12701,8 @@ configure-stage1-gas:
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/gas/Makefile || exit 0; \
$(HOST_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 1 in $(HOST_SUBDIR)/gas ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas ; \
cd $(HOST_SUBDIR)/gas || exit 1; \
@@ -11000,8 +12714,10 @@ configure-stage1-gas:
srcdiroption="--srcdir=$${topdir}/gas"; \
libsrcdir="$$s/gas"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
- --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
@endif gas-bootstrap
.PHONY: configure-stage2-gas maybe-configure-stage2-gas
@@ -11016,6 +12732,8 @@ configure-stage2-gas:
test ! -f $(HOST_SUBDIR)/gas/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 2 in $(HOST_SUBDIR)/gas ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas ; \
cd $(HOST_SUBDIR)/gas || exit 1; \
@@ -11027,7 +12745,9 @@ configure-stage2-gas:
srcdiroption="--srcdir=$${topdir}/gas"; \
libsrcdir="$$s/gas"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif gas-bootstrap
@@ -11043,6 +12763,8 @@ configure-stage3-gas:
test ! -f $(HOST_SUBDIR)/gas/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 3 in $(HOST_SUBDIR)/gas ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas ; \
cd $(HOST_SUBDIR)/gas || exit 1; \
@@ -11054,7 +12776,9 @@ configure-stage3-gas:
srcdiroption="--srcdir=$${topdir}/gas"; \
libsrcdir="$$s/gas"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif gas-bootstrap
@@ -11070,6 +12794,8 @@ configure-stage4-gas:
test ! -f $(HOST_SUBDIR)/gas/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 4 in $(HOST_SUBDIR)/gas ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas ; \
cd $(HOST_SUBDIR)/gas || exit 1; \
@@ -11081,7 +12807,9 @@ configure-stage4-gas:
srcdiroption="--srcdir=$${topdir}/gas"; \
libsrcdir="$$s/gas"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif gas-bootstrap
@@ -11097,6 +12825,8 @@ configure-stageprofile-gas:
test ! -f $(HOST_SUBDIR)/gas/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
echo Configuring stage profile in $(HOST_SUBDIR)/gas ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas ; \
cd $(HOST_SUBDIR)/gas || exit 1; \
@@ -11108,7 +12838,9 @@ configure-stageprofile-gas:
srcdiroption="--srcdir=$${topdir}/gas"; \
libsrcdir="$$s/gas"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif gas-bootstrap
@@ -11124,6 +12856,8 @@ configure-stagefeedback-gas:
test ! -f $(HOST_SUBDIR)/gas/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
echo Configuring stage feedback in $(HOST_SUBDIR)/gas ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas ; \
cd $(HOST_SUBDIR)/gas || exit 1; \
@@ -11135,7 +12869,9 @@ configure-stagefeedback-gas:
srcdiroption="--srcdir=$${topdir}/gas"; \
libsrcdir="$$s/gas"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif gas-bootstrap
@@ -11145,15 +12881,13 @@ configure-stagefeedback-gas:
.PHONY: all-gas maybe-all-gas
maybe-all-gas:
+@if gcc-bootstrap
+all-gas: stage_current
+@endif gcc-bootstrap
@if gas
TARGET-gas=all
maybe-all-gas: all-gas
all-gas: configure-gas
-@endif gas
-@if gas-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif gas-bootstrap
-@if gas
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
@@ -11177,18 +12911,22 @@ all-stage1-gas: configure-stage1-gas
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gas && \
- $(MAKE) $(FLAGS_TO_PASS) CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
$(TARGET-stage1-gas)
maybe-clean-stage1-gas: clean-stage1-gas
clean-stage1: clean-stage1-gas
clean-stage1-gas:
- @[ -f $(HOST_SUBDIR)/gas/Makefile ] || [ -f $(HOST_SUBDIR)/stage1-gas/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage1 ] || $(MAKE) stage1-start; \
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(HOST_SUBDIR)/gas/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage1-gas/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
cd $(HOST_SUBDIR)/gas && \
$(MAKE) $(FLAGS_TO_PASS) \
- CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" clean
+ clean
@endif gas-bootstrap
@@ -11207,19 +12945,23 @@ all-stage2-gas: configure-stage2-gas
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gas && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage2-gas)
maybe-clean-stage2-gas: clean-stage2-gas
clean-stage2: clean-stage2-gas
clean-stage2-gas:
- @[ -f $(HOST_SUBDIR)/gas/Makefile ] || [ -f $(HOST_SUBDIR)/stage2-gas/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage2 ] || $(MAKE) stage2-start; \
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(HOST_SUBDIR)/gas/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage2-gas/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
cd $(HOST_SUBDIR)/gas && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif gas-bootstrap
@@ -11238,19 +12980,23 @@ all-stage3-gas: configure-stage3-gas
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gas && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage3-gas)
maybe-clean-stage3-gas: clean-stage3-gas
clean-stage3: clean-stage3-gas
clean-stage3-gas:
- @[ -f $(HOST_SUBDIR)/gas/Makefile ] || [ -f $(HOST_SUBDIR)/stage3-gas/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage3 ] || $(MAKE) stage3-start; \
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(HOST_SUBDIR)/gas/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage3-gas/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
cd $(HOST_SUBDIR)/gas && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif gas-bootstrap
@@ -11269,19 +13015,23 @@ all-stage4-gas: configure-stage4-gas
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gas && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage4-gas)
maybe-clean-stage4-gas: clean-stage4-gas
clean-stage4: clean-stage4-gas
clean-stage4-gas:
- @[ -f $(HOST_SUBDIR)/gas/Makefile ] || [ -f $(HOST_SUBDIR)/stage4-gas/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage4 ] || $(MAKE) stage4-start; \
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(HOST_SUBDIR)/gas/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage4-gas/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
cd $(HOST_SUBDIR)/gas && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif gas-bootstrap
@@ -11300,19 +13050,23 @@ all-stageprofile-gas: configure-stageprofile-gas
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gas && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stageprofile-gas)
maybe-clean-stageprofile-gas: clean-stageprofile-gas
clean-stageprofile: clean-stageprofile-gas
clean-stageprofile-gas:
- @[ -f $(HOST_SUBDIR)/gas/Makefile ] || [ -f $(HOST_SUBDIR)/stageprofile-gas/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start; \
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(HOST_SUBDIR)/gas/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stageprofile-gas/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
cd $(HOST_SUBDIR)/gas && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" clean
+ clean
@endif gas-bootstrap
@@ -11331,19 +13085,23 @@ all-stagefeedback-gas: configure-stagefeedback-gas
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gas && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-use" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stagefeedback-gas)
maybe-clean-stagefeedback-gas: clean-stagefeedback-gas
clean-stagefeedback: clean-stagefeedback-gas
clean-stagefeedback-gas:
- @[ -f $(HOST_SUBDIR)/gas/Makefile ] || [ -f $(HOST_SUBDIR)/stagefeedback-gas/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start; \
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(HOST_SUBDIR)/gas/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stagefeedback-gas/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
cd $(HOST_SUBDIR)/gas && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-use" clean
+ clean
@endif gas-bootstrap
@@ -11380,7 +13138,7 @@ install-gas: installdirs
@endif gas
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-gas info-gas
maybe-info-gas:
@@ -11432,6 +13190,31 @@ dvi-gas: \
@endif gas
+.PHONY: maybe-pdf-gas pdf-gas
+maybe-pdf-gas:
+@if gas
+maybe-pdf-gas: pdf-gas
+
+pdf-gas: \
+ configure-gas
+ @[ -f ./gas/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in gas" ; \
+ (cd $(HOST_SUBDIR)/gas && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif gas
+
.PHONY: maybe-html-gas html-gas
maybe-html-gas:
@if gas
@@ -11508,6 +13291,32 @@ install-info-gas: \
@endif gas
+.PHONY: maybe-install-pdf-gas install-pdf-gas
+maybe-install-pdf-gas:
+@if gas
+maybe-install-pdf-gas: install-pdf-gas
+
+install-pdf-gas: \
+ configure-gas \
+ pdf-gas
+ @[ -f ./gas/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gas" ; \
+ (cd $(HOST_SUBDIR)/gas && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gas
+
.PHONY: maybe-install-html-gas install-html-gas
maybe-install-html-gas:
@if gas
@@ -11659,14 +13468,12 @@ maintainer-clean-gas:
.PHONY: configure-gcc maybe-configure-gcc
maybe-configure-gcc:
-@if gcc
-maybe-configure-gcc: configure-gcc
-configure-gcc:
-@endif gcc
@if gcc-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
+configure-gcc: stage_current
@endif gcc-bootstrap
@if gcc
+maybe-configure-gcc: configure-gcc
+configure-gcc:
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \
@@ -11682,7 +13489,8 @@ configure-gcc:
srcdiroption="--srcdir=$${topdir}/gcc"; \
libsrcdir="$$s/gcc"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif gcc
@@ -11699,6 +13507,8 @@ configure-stage1-gcc:
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \
$(HOST_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 1 in $(HOST_SUBDIR)/gcc ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc ; \
cd $(HOST_SUBDIR)/gcc || exit 1; \
@@ -11710,8 +13520,10 @@ configure-stage1-gcc:
srcdiroption="--srcdir=$${topdir}/gcc"; \
libsrcdir="$$s/gcc"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
- --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
@endif gcc-bootstrap
.PHONY: configure-stage2-gcc maybe-configure-stage2-gcc
@@ -11726,6 +13538,8 @@ configure-stage2-gcc:
test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 2 in $(HOST_SUBDIR)/gcc ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc ; \
cd $(HOST_SUBDIR)/gcc || exit 1; \
@@ -11737,7 +13551,9 @@ configure-stage2-gcc:
srcdiroption="--srcdir=$${topdir}/gcc"; \
libsrcdir="$$s/gcc"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif gcc-bootstrap
@@ -11753,6 +13569,8 @@ configure-stage3-gcc:
test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 3 in $(HOST_SUBDIR)/gcc ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc ; \
cd $(HOST_SUBDIR)/gcc || exit 1; \
@@ -11764,7 +13582,9 @@ configure-stage3-gcc:
srcdiroption="--srcdir=$${topdir}/gcc"; \
libsrcdir="$$s/gcc"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif gcc-bootstrap
@@ -11780,6 +13600,8 @@ configure-stage4-gcc:
test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 4 in $(HOST_SUBDIR)/gcc ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc ; \
cd $(HOST_SUBDIR)/gcc || exit 1; \
@@ -11791,7 +13613,9 @@ configure-stage4-gcc:
srcdiroption="--srcdir=$${topdir}/gcc"; \
libsrcdir="$$s/gcc"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif gcc-bootstrap
@@ -11807,6 +13631,8 @@ configure-stageprofile-gcc:
test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
echo Configuring stage profile in $(HOST_SUBDIR)/gcc ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc ; \
cd $(HOST_SUBDIR)/gcc || exit 1; \
@@ -11818,7 +13644,9 @@ configure-stageprofile-gcc:
srcdiroption="--srcdir=$${topdir}/gcc"; \
libsrcdir="$$s/gcc"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif gcc-bootstrap
@@ -11834,6 +13662,8 @@ configure-stagefeedback-gcc:
test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
echo Configuring stage feedback in $(HOST_SUBDIR)/gcc ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc ; \
cd $(HOST_SUBDIR)/gcc || exit 1; \
@@ -11845,7 +13675,9 @@ configure-stagefeedback-gcc:
srcdiroption="--srcdir=$${topdir}/gcc"; \
libsrcdir="$$s/gcc"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif gcc-bootstrap
@@ -11855,15 +13687,13 @@ configure-stagefeedback-gcc:
.PHONY: all-gcc maybe-all-gcc
maybe-all-gcc:
-@if gcc
-TARGET-gcc=`if [ -f stage_last ]; then echo quickstrap ; else echo all; fi`
-maybe-all-gcc: all-gcc
-all-gcc: configure-gcc
-@endif gcc
@if gcc-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
+all-gcc: stage_current
@endif gcc-bootstrap
@if gcc
+TARGET-gcc=all
+maybe-all-gcc: all-gcc
+all-gcc: configure-gcc
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
@@ -11887,18 +13717,22 @@ all-stage1-gcc: configure-stage1-gcc
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gcc && \
- $(MAKE) $(FLAGS_TO_PASS) CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" $(EXTRA_GCC_FLAGS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" $(EXTRA_GCC_FLAGS) \
$(TARGET-stage1-gcc)
maybe-clean-stage1-gcc: clean-stage1-gcc
clean-stage1: clean-stage1-gcc
clean-stage1-gcc:
- @[ -f $(HOST_SUBDIR)/gcc/Makefile ] || [ -f $(HOST_SUBDIR)/stage1-gcc/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage1 ] || $(MAKE) stage1-start; \
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage1-gcc/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
cd $(HOST_SUBDIR)/gcc && \
$(MAKE) $(FLAGS_TO_PASS) \
- CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" $(EXTRA_GCC_FLAGS) clean
+ $(EXTRA_GCC_FLAGS) clean
@endif gcc-bootstrap
@@ -11917,19 +13751,23 @@ all-stage2-gcc: configure-stage2-gcc
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gcc && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \
$(TARGET-stage2-gcc)
maybe-clean-stage2-gcc: clean-stage2-gcc
clean-stage2: clean-stage2-gcc
clean-stage2-gcc:
- @[ -f $(HOST_SUBDIR)/gcc/Makefile ] || [ -f $(HOST_SUBDIR)/stage2-gcc/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage2 ] || $(MAKE) stage2-start; \
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage2-gcc/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
cd $(HOST_SUBDIR)/gcc && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- $(EXTRA_GCC_FLAGS) clean
+ $(EXTRA_GCC_FLAGS) clean
@endif gcc-bootstrap
@@ -11948,19 +13786,23 @@ all-stage3-gcc: configure-stage3-gcc
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gcc && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \
$(TARGET-stage3-gcc)
maybe-clean-stage3-gcc: clean-stage3-gcc
clean-stage3: clean-stage3-gcc
clean-stage3-gcc:
- @[ -f $(HOST_SUBDIR)/gcc/Makefile ] || [ -f $(HOST_SUBDIR)/stage3-gcc/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage3 ] || $(MAKE) stage3-start; \
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage3-gcc/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
cd $(HOST_SUBDIR)/gcc && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- $(EXTRA_GCC_FLAGS) clean
+ $(EXTRA_GCC_FLAGS) clean
@endif gcc-bootstrap
@@ -11979,19 +13821,23 @@ all-stage4-gcc: configure-stage4-gcc
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gcc && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \
$(TARGET-stage4-gcc)
maybe-clean-stage4-gcc: clean-stage4-gcc
clean-stage4: clean-stage4-gcc
clean-stage4-gcc:
- @[ -f $(HOST_SUBDIR)/gcc/Makefile ] || [ -f $(HOST_SUBDIR)/stage4-gcc/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage4 ] || $(MAKE) stage4-start; \
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage4-gcc/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
cd $(HOST_SUBDIR)/gcc && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- $(EXTRA_GCC_FLAGS) clean
+ $(EXTRA_GCC_FLAGS) clean
@endif gcc-bootstrap
@@ -12010,19 +13856,23 @@ all-stageprofile-gcc: configure-stageprofile-gcc
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gcc && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(EXTRA_GCC_FLAGS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \
$(TARGET-stageprofile-gcc)
maybe-clean-stageprofile-gcc: clean-stageprofile-gcc
clean-stageprofile: clean-stageprofile-gcc
clean-stageprofile-gcc:
- @[ -f $(HOST_SUBDIR)/gcc/Makefile ] || [ -f $(HOST_SUBDIR)/stageprofile-gcc/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start; \
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stageprofile-gcc/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
cd $(HOST_SUBDIR)/gcc && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(EXTRA_GCC_FLAGS) clean
+ $(EXTRA_GCC_FLAGS) clean
@endif gcc-bootstrap
@@ -12041,19 +13891,23 @@ all-stagefeedback-gcc: configure-stagefeedback-gcc
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gcc && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(EXTRA_GCC_FLAGS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \
$(TARGET-stagefeedback-gcc)
maybe-clean-stagefeedback-gcc: clean-stagefeedback-gcc
clean-stagefeedback: clean-stagefeedback-gcc
clean-stagefeedback-gcc:
- @[ -f $(HOST_SUBDIR)/gcc/Makefile ] || [ -f $(HOST_SUBDIR)/stagefeedback-gcc/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start; \
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(HOST_SUBDIR)/gcc/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stagefeedback-gcc/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
cd $(HOST_SUBDIR)/gcc && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(EXTRA_GCC_FLAGS) clean
+ $(EXTRA_GCC_FLAGS) clean
@endif gcc-bootstrap
@@ -12090,7 +13944,7 @@ install-gcc: installdirs
@endif gcc
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-gcc info-gcc
maybe-info-gcc:
@@ -12142,6 +13996,31 @@ dvi-gcc: \
@endif gcc
+.PHONY: maybe-pdf-gcc pdf-gcc
+maybe-pdf-gcc:
+@if gcc
+maybe-pdf-gcc: pdf-gcc
+
+pdf-gcc: \
+ configure-gcc
+ @[ -f ./gcc/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in gcc" ; \
+ (cd $(HOST_SUBDIR)/gcc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif gcc
+
.PHONY: maybe-html-gcc html-gcc
maybe-html-gcc:
@if gcc
@@ -12218,6 +14097,32 @@ install-info-gcc: \
@endif gcc
+.PHONY: maybe-install-pdf-gcc install-pdf-gcc
+maybe-install-pdf-gcc:
+@if gcc
+maybe-install-pdf-gcc: install-pdf-gcc
+
+install-pdf-gcc: \
+ configure-gcc \
+ pdf-gcc
+ @[ -f ./gcc/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gcc" ; \
+ (cd $(HOST_SUBDIR)/gcc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gcc
+
.PHONY: maybe-install-html-gcc install-html-gcc
maybe-install-html-gcc:
@if gcc
@@ -12369,6 +14274,9 @@ maintainer-clean-gcc:
.PHONY: configure-gawk maybe-configure-gawk
maybe-configure-gawk:
+@if gcc-bootstrap
+configure-gawk: stage_current
+@endif gcc-bootstrap
@if gawk
maybe-configure-gawk: configure-gawk
configure-gawk:
@@ -12388,7 +14296,8 @@ configure-gawk:
srcdiroption="--srcdir=$${topdir}/gawk"; \
libsrcdir="$$s/gawk"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif gawk
@@ -12398,6 +14307,9 @@ configure-gawk:
.PHONY: all-gawk maybe-all-gawk
maybe-all-gawk:
+@if gcc-bootstrap
+all-gawk: stage_current
+@endif gcc-bootstrap
@if gawk
TARGET-gawk=all
maybe-all-gawk: all-gawk
@@ -12443,7 +14355,7 @@ install-gawk: installdirs
@endif gawk
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-gawk info-gawk
maybe-info-gawk:
@@ -12497,6 +14409,32 @@ dvi-gawk: \
@endif gawk
+.PHONY: maybe-pdf-gawk pdf-gawk
+maybe-pdf-gawk:
+@if gawk
+maybe-pdf-gawk: pdf-gawk
+
+pdf-gawk: \
+ configure-gawk
+ @: $(MAKE); $(unstage)
+ @[ -f ./gawk/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in gawk" ; \
+ (cd $(HOST_SUBDIR)/gawk && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif gawk
+
.PHONY: maybe-html-gawk html-gawk
maybe-html-gawk:
@if gawk
@@ -12576,6 +14514,33 @@ install-info-gawk: \
@endif gawk
+.PHONY: maybe-install-pdf-gawk install-pdf-gawk
+maybe-install-pdf-gawk:
+@if gawk
+maybe-install-pdf-gawk: install-pdf-gawk
+
+install-pdf-gawk: \
+ configure-gawk \
+ pdf-gawk
+ @: $(MAKE); $(unstage)
+ @[ -f ./gawk/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gawk" ; \
+ (cd $(HOST_SUBDIR)/gawk && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gawk
+
.PHONY: maybe-install-html-gawk install-html-gawk
maybe-install-html-gawk:
@if gawk
@@ -12733,6 +14698,9 @@ maintainer-clean-gawk:
.PHONY: configure-gettext maybe-configure-gettext
maybe-configure-gettext:
+@if gcc-bootstrap
+configure-gettext: stage_current
+@endif gcc-bootstrap
@if gettext
maybe-configure-gettext: configure-gettext
configure-gettext:
@@ -12752,7 +14720,8 @@ configure-gettext:
srcdiroption="--srcdir=$${topdir}/gettext"; \
libsrcdir="$$s/gettext"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif gettext
@@ -12762,6 +14731,9 @@ configure-gettext:
.PHONY: all-gettext maybe-all-gettext
maybe-all-gettext:
+@if gcc-bootstrap
+all-gettext: stage_current
+@endif gcc-bootstrap
@if gettext
TARGET-gettext=all
maybe-all-gettext: all-gettext
@@ -12807,7 +14779,7 @@ install-gettext: installdirs
@endif gettext
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-gettext info-gettext
maybe-info-gettext:
@@ -12861,6 +14833,32 @@ dvi-gettext: \
@endif gettext
+.PHONY: maybe-pdf-gettext pdf-gettext
+maybe-pdf-gettext:
+@if gettext
+maybe-pdf-gettext: pdf-gettext
+
+pdf-gettext: \
+ configure-gettext
+ @: $(MAKE); $(unstage)
+ @[ -f ./gettext/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in gettext" ; \
+ (cd $(HOST_SUBDIR)/gettext && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif gettext
+
.PHONY: maybe-html-gettext html-gettext
maybe-html-gettext:
@if gettext
@@ -12940,6 +14938,33 @@ install-info-gettext: \
@endif gettext
+.PHONY: maybe-install-pdf-gettext install-pdf-gettext
+maybe-install-pdf-gettext:
+@if gettext
+maybe-install-pdf-gettext: install-pdf-gettext
+
+install-pdf-gettext: \
+ configure-gettext \
+ pdf-gettext
+ @: $(MAKE); $(unstage)
+ @[ -f ./gettext/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gettext" ; \
+ (cd $(HOST_SUBDIR)/gettext && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gettext
+
.PHONY: maybe-install-html-gettext install-html-gettext
maybe-install-html-gettext:
@if gettext
@@ -13095,8 +15120,1611 @@ maintainer-clean-gettext:
+.PHONY: configure-gmp maybe-configure-gmp
+maybe-configure-gmp:
+@if gcc-bootstrap
+configure-gmp: stage_current
+@endif gcc-bootstrap
+@if gmp
+maybe-configure-gmp: configure-gmp
+configure-gmp:
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/gmp/Makefile || exit 0; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp ; \
+ $(HOST_EXPORTS) \
+ echo Configuring in $(HOST_SUBDIR)/gmp; \
+ cd "$(HOST_SUBDIR)/gmp" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/gmp/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/gmp"; \
+ libsrcdir="$$s/gmp"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} --disable-shared \
+ || exit 1
+@endif gmp
+
+
+
+.PHONY: configure-stage1-gmp maybe-configure-stage1-gmp
+maybe-configure-stage1-gmp:
+@if gmp-bootstrap
+maybe-configure-stage1-gmp: configure-stage1-gmp
+configure-stage1-gmp:
+ @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/gmp/Makefile || exit 0; \
+ $(HOST_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
+ echo Configuring stage 1 in $(HOST_SUBDIR)/gmp ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp ; \
+ cd $(HOST_SUBDIR)/gmp || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/gmp/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/gmp"; \
+ libsrcdir="$$s/gmp"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" --disable-shared
+@endif gmp-bootstrap
+
+.PHONY: configure-stage2-gmp maybe-configure-stage2-gmp
+maybe-configure-stage2-gmp:
+@if gmp-bootstrap
+maybe-configure-stage2-gmp: configure-stage2-gmp
+configure-stage2-gmp:
+ @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/gmp/Makefile || exit 0; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
+ echo Configuring stage 2 in $(HOST_SUBDIR)/gmp ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp ; \
+ cd $(HOST_SUBDIR)/gmp || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/gmp/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/gmp"; \
+ libsrcdir="$$s/gmp"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@ --disable-shared
+@endif gmp-bootstrap
+
+.PHONY: configure-stage3-gmp maybe-configure-stage3-gmp
+maybe-configure-stage3-gmp:
+@if gmp-bootstrap
+maybe-configure-stage3-gmp: configure-stage3-gmp
+configure-stage3-gmp:
+ @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/gmp/Makefile || exit 0; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
+ echo Configuring stage 3 in $(HOST_SUBDIR)/gmp ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp ; \
+ cd $(HOST_SUBDIR)/gmp || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/gmp/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/gmp"; \
+ libsrcdir="$$s/gmp"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@ --disable-shared
+@endif gmp-bootstrap
+
+.PHONY: configure-stage4-gmp maybe-configure-stage4-gmp
+maybe-configure-stage4-gmp:
+@if gmp-bootstrap
+maybe-configure-stage4-gmp: configure-stage4-gmp
+configure-stage4-gmp:
+ @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/gmp/Makefile || exit 0; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
+ echo Configuring stage 4 in $(HOST_SUBDIR)/gmp ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp ; \
+ cd $(HOST_SUBDIR)/gmp || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/gmp/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/gmp"; \
+ libsrcdir="$$s/gmp"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@ --disable-shared
+@endif gmp-bootstrap
+
+.PHONY: configure-stageprofile-gmp maybe-configure-stageprofile-gmp
+maybe-configure-stageprofile-gmp:
+@if gmp-bootstrap
+maybe-configure-stageprofile-gmp: configure-stageprofile-gmp
+configure-stageprofile-gmp:
+ @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/gmp/Makefile || exit 0; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
+ echo Configuring stage profile in $(HOST_SUBDIR)/gmp ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp ; \
+ cd $(HOST_SUBDIR)/gmp || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/gmp/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/gmp"; \
+ libsrcdir="$$s/gmp"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@ --disable-shared
+@endif gmp-bootstrap
+
+.PHONY: configure-stagefeedback-gmp maybe-configure-stagefeedback-gmp
+maybe-configure-stagefeedback-gmp:
+@if gmp-bootstrap
+maybe-configure-stagefeedback-gmp: configure-stagefeedback-gmp
+configure-stagefeedback-gmp:
+ @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/gmp/Makefile || exit 0; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
+ echo Configuring stage feedback in $(HOST_SUBDIR)/gmp ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp ; \
+ cd $(HOST_SUBDIR)/gmp || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/gmp/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/gmp"; \
+ libsrcdir="$$s/gmp"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@ --disable-shared
+@endif gmp-bootstrap
+
+
+
+
+
+.PHONY: all-gmp maybe-all-gmp
+maybe-all-gmp:
+@if gcc-bootstrap
+all-gmp: stage_current
+@endif gcc-bootstrap
+@if gmp
+TARGET-gmp=all
+maybe-all-gmp: all-gmp
+all-gmp: configure-gmp
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) $(TARGET-gmp))
+@endif gmp
+
+
+
+.PHONY: all-stage1-gmp maybe-all-stage1-gmp
+.PHONY: clean-stage1-gmp maybe-clean-stage1-gmp
+maybe-all-stage1-gmp:
+maybe-clean-stage1-gmp:
+@if gmp-bootstrap
+maybe-all-stage1-gmp: all-stage1-gmp
+all-stage1: all-stage1-gmp
+TARGET-stage1-gmp = $(TARGET-gmp)
+all-stage1-gmp: configure-stage1-gmp
+ @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
+ $(TARGET-stage1-gmp)
+
+maybe-clean-stage1-gmp: clean-stage1-gmp
+clean-stage1: clean-stage1-gmp
+clean-stage1-gmp:
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(HOST_SUBDIR)/gmp/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage1-gmp/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
+ cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ clean
+@endif gmp-bootstrap
+
+
+.PHONY: all-stage2-gmp maybe-all-stage2-gmp
+.PHONY: clean-stage2-gmp maybe-clean-stage2-gmp
+maybe-all-stage2-gmp:
+maybe-clean-stage2-gmp:
+@if gmp-bootstrap
+maybe-all-stage2-gmp: all-stage2-gmp
+all-stage2: all-stage2-gmp
+TARGET-stage2-gmp = $(TARGET-gmp)
+all-stage2-gmp: configure-stage2-gmp
+ @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(TARGET-stage2-gmp)
+
+maybe-clean-stage2-gmp: clean-stage2-gmp
+clean-stage2: clean-stage2-gmp
+clean-stage2-gmp:
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(HOST_SUBDIR)/gmp/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage2-gmp/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
+ cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ $(POSTSTAGE1_FLAGS_TO_PASS) \
+ clean
+@endif gmp-bootstrap
+
+
+.PHONY: all-stage3-gmp maybe-all-stage3-gmp
+.PHONY: clean-stage3-gmp maybe-clean-stage3-gmp
+maybe-all-stage3-gmp:
+maybe-clean-stage3-gmp:
+@if gmp-bootstrap
+maybe-all-stage3-gmp: all-stage3-gmp
+all-stage3: all-stage3-gmp
+TARGET-stage3-gmp = $(TARGET-gmp)
+all-stage3-gmp: configure-stage3-gmp
+ @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(TARGET-stage3-gmp)
+
+maybe-clean-stage3-gmp: clean-stage3-gmp
+clean-stage3: clean-stage3-gmp
+clean-stage3-gmp:
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(HOST_SUBDIR)/gmp/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage3-gmp/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
+ cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ $(POSTSTAGE1_FLAGS_TO_PASS) \
+ clean
+@endif gmp-bootstrap
+
+
+.PHONY: all-stage4-gmp maybe-all-stage4-gmp
+.PHONY: clean-stage4-gmp maybe-clean-stage4-gmp
+maybe-all-stage4-gmp:
+maybe-clean-stage4-gmp:
+@if gmp-bootstrap
+maybe-all-stage4-gmp: all-stage4-gmp
+all-stage4: all-stage4-gmp
+TARGET-stage4-gmp = $(TARGET-gmp)
+all-stage4-gmp: configure-stage4-gmp
+ @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(TARGET-stage4-gmp)
+
+maybe-clean-stage4-gmp: clean-stage4-gmp
+clean-stage4: clean-stage4-gmp
+clean-stage4-gmp:
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(HOST_SUBDIR)/gmp/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage4-gmp/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
+ cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ $(POSTSTAGE1_FLAGS_TO_PASS) \
+ clean
+@endif gmp-bootstrap
+
+
+.PHONY: all-stageprofile-gmp maybe-all-stageprofile-gmp
+.PHONY: clean-stageprofile-gmp maybe-clean-stageprofile-gmp
+maybe-all-stageprofile-gmp:
+maybe-clean-stageprofile-gmp:
+@if gmp-bootstrap
+maybe-all-stageprofile-gmp: all-stageprofile-gmp
+all-stageprofile: all-stageprofile-gmp
+TARGET-stageprofile-gmp = $(TARGET-gmp)
+all-stageprofile-gmp: configure-stageprofile-gmp
+ @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(TARGET-stageprofile-gmp)
+
+maybe-clean-stageprofile-gmp: clean-stageprofile-gmp
+clean-stageprofile: clean-stageprofile-gmp
+clean-stageprofile-gmp:
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(HOST_SUBDIR)/gmp/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stageprofile-gmp/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
+ cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ $(POSTSTAGE1_FLAGS_TO_PASS) \
+ clean
+@endif gmp-bootstrap
+
+
+.PHONY: all-stagefeedback-gmp maybe-all-stagefeedback-gmp
+.PHONY: clean-stagefeedback-gmp maybe-clean-stagefeedback-gmp
+maybe-all-stagefeedback-gmp:
+maybe-clean-stagefeedback-gmp:
+@if gmp-bootstrap
+maybe-all-stagefeedback-gmp: all-stagefeedback-gmp
+all-stagefeedback: all-stagefeedback-gmp
+TARGET-stagefeedback-gmp = $(TARGET-gmp)
+all-stagefeedback-gmp: configure-stagefeedback-gmp
+ @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(TARGET-stagefeedback-gmp)
+
+maybe-clean-stagefeedback-gmp: clean-stagefeedback-gmp
+clean-stagefeedback: clean-stagefeedback-gmp
+clean-stagefeedback-gmp:
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(HOST_SUBDIR)/gmp/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stagefeedback-gmp/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
+ cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ $(POSTSTAGE1_FLAGS_TO_PASS) \
+ clean
+@endif gmp-bootstrap
+
+
+
+
+
+.PHONY: check-gmp maybe-check-gmp
+maybe-check-gmp:
+@if gmp
+maybe-check-gmp: check-gmp
+
+check-gmp:
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(FLAGS_TO_PASS) check)
+
+@endif gmp
+
+.PHONY: install-gmp maybe-install-gmp
+maybe-install-gmp:
+@if gmp
+maybe-install-gmp: install-gmp
+
+install-gmp:
+
+@endif gmp
+
+# Other targets (info, dvi, pdf, etc.)
+
+.PHONY: maybe-info-gmp info-gmp
+maybe-info-gmp:
+@if gmp
+maybe-info-gmp: info-gmp
+
+info-gmp: \
+ configure-gmp
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing info in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ info) \
+ || exit 1
+
+@endif gmp
+
+.PHONY: maybe-dvi-gmp dvi-gmp
+maybe-dvi-gmp:
+@if gmp
+maybe-dvi-gmp: dvi-gmp
+
+dvi-gmp: \
+ configure-gmp
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing dvi in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ dvi) \
+ || exit 1
+
+@endif gmp
+
+.PHONY: maybe-pdf-gmp pdf-gmp
+maybe-pdf-gmp:
+@if gmp
+maybe-pdf-gmp: pdf-gmp
+
+pdf-gmp: \
+ configure-gmp
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif gmp
+
+.PHONY: maybe-html-gmp html-gmp
+maybe-html-gmp:
+@if gmp
+maybe-html-gmp: html-gmp
+
+html-gmp: \
+ configure-gmp
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing html in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ html) \
+ || exit 1
+
+@endif gmp
+
+.PHONY: maybe-TAGS-gmp TAGS-gmp
+maybe-TAGS-gmp:
+@if gmp
+maybe-TAGS-gmp: TAGS-gmp
+
+TAGS-gmp: \
+ configure-gmp
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing TAGS in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ TAGS) \
+ || exit 1
+
+@endif gmp
+
+.PHONY: maybe-install-info-gmp install-info-gmp
+maybe-install-info-gmp:
+@if gmp
+maybe-install-info-gmp: install-info-gmp
+
+install-info-gmp: \
+ configure-gmp \
+ info-gmp
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-info in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-info) \
+ || exit 1
+
+@endif gmp
+
+.PHONY: maybe-install-pdf-gmp install-pdf-gmp
+maybe-install-pdf-gmp:
+@if gmp
+maybe-install-pdf-gmp: install-pdf-gmp
+
+install-pdf-gmp: \
+ configure-gmp \
+ pdf-gmp
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gmp
+
+.PHONY: maybe-install-html-gmp install-html-gmp
+maybe-install-html-gmp:
+@if gmp
+maybe-install-html-gmp: install-html-gmp
+
+install-html-gmp: \
+ configure-gmp \
+ html-gmp
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-html in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-html) \
+ || exit 1
+
+@endif gmp
+
+.PHONY: maybe-installcheck-gmp installcheck-gmp
+maybe-installcheck-gmp:
+@if gmp
+maybe-installcheck-gmp: installcheck-gmp
+
+installcheck-gmp: \
+ configure-gmp
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing installcheck in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ installcheck) \
+ || exit 1
+
+@endif gmp
+
+.PHONY: maybe-mostlyclean-gmp mostlyclean-gmp
+maybe-mostlyclean-gmp:
+@if gmp
+maybe-mostlyclean-gmp: mostlyclean-gmp
+
+mostlyclean-gmp:
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing mostlyclean in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ mostlyclean) \
+ || exit 1
+
+@endif gmp
+
+.PHONY: maybe-clean-gmp clean-gmp
+maybe-clean-gmp:
+@if gmp
+maybe-clean-gmp: clean-gmp
+
+clean-gmp:
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing clean in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ clean) \
+ || exit 1
+
+@endif gmp
+
+.PHONY: maybe-distclean-gmp distclean-gmp
+maybe-distclean-gmp:
+@if gmp
+maybe-distclean-gmp: distclean-gmp
+
+distclean-gmp:
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing distclean in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ distclean) \
+ || exit 1
+
+@endif gmp
+
+.PHONY: maybe-maintainer-clean-gmp maintainer-clean-gmp
+maybe-maintainer-clean-gmp:
+@if gmp
+maybe-maintainer-clean-gmp: maintainer-clean-gmp
+
+maintainer-clean-gmp:
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing maintainer-clean in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ maintainer-clean) \
+ || exit 1
+
+@endif gmp
+
+
+
+.PHONY: configure-mpfr maybe-configure-mpfr
+maybe-configure-mpfr:
+@if gcc-bootstrap
+configure-mpfr: stage_current
+@endif gcc-bootstrap
+@if mpfr
+maybe-configure-mpfr: configure-mpfr
+configure-mpfr:
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/mpfr/Makefile || exit 0; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr ; \
+ $(HOST_EXPORTS) \
+ echo Configuring in $(HOST_SUBDIR)/mpfr; \
+ cd "$(HOST_SUBDIR)/mpfr" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/mpfr/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/mpfr"; \
+ libsrcdir="$$s/mpfr"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} --disable-shared --with-gmp-build=$$r/$(HOST_SUBDIR)/gmp \
+ || exit 1
+@endif mpfr
+
+
+
+.PHONY: configure-stage1-mpfr maybe-configure-stage1-mpfr
+maybe-configure-stage1-mpfr:
+@if mpfr-bootstrap
+maybe-configure-stage1-mpfr: configure-stage1-mpfr
+configure-stage1-mpfr:
+ @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/mpfr/Makefile || exit 0; \
+ $(HOST_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
+ echo Configuring stage 1 in $(HOST_SUBDIR)/mpfr ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr ; \
+ cd $(HOST_SUBDIR)/mpfr || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/mpfr/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/mpfr"; \
+ libsrcdir="$$s/mpfr"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" --disable-shared --with-gmp-build=$$r/$(HOST_SUBDIR)/gmp
+@endif mpfr-bootstrap
+
+.PHONY: configure-stage2-mpfr maybe-configure-stage2-mpfr
+maybe-configure-stage2-mpfr:
+@if mpfr-bootstrap
+maybe-configure-stage2-mpfr: configure-stage2-mpfr
+configure-stage2-mpfr:
+ @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/mpfr/Makefile || exit 0; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
+ echo Configuring stage 2 in $(HOST_SUBDIR)/mpfr ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr ; \
+ cd $(HOST_SUBDIR)/mpfr || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/mpfr/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/mpfr"; \
+ libsrcdir="$$s/mpfr"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@ --disable-shared --with-gmp-build=$$r/$(HOST_SUBDIR)/gmp
+@endif mpfr-bootstrap
+
+.PHONY: configure-stage3-mpfr maybe-configure-stage3-mpfr
+maybe-configure-stage3-mpfr:
+@if mpfr-bootstrap
+maybe-configure-stage3-mpfr: configure-stage3-mpfr
+configure-stage3-mpfr:
+ @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/mpfr/Makefile || exit 0; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
+ echo Configuring stage 3 in $(HOST_SUBDIR)/mpfr ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr ; \
+ cd $(HOST_SUBDIR)/mpfr || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/mpfr/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/mpfr"; \
+ libsrcdir="$$s/mpfr"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@ --disable-shared --with-gmp-build=$$r/$(HOST_SUBDIR)/gmp
+@endif mpfr-bootstrap
+
+.PHONY: configure-stage4-mpfr maybe-configure-stage4-mpfr
+maybe-configure-stage4-mpfr:
+@if mpfr-bootstrap
+maybe-configure-stage4-mpfr: configure-stage4-mpfr
+configure-stage4-mpfr:
+ @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/mpfr/Makefile || exit 0; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
+ echo Configuring stage 4 in $(HOST_SUBDIR)/mpfr ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr ; \
+ cd $(HOST_SUBDIR)/mpfr || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/mpfr/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/mpfr"; \
+ libsrcdir="$$s/mpfr"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@ --disable-shared --with-gmp-build=$$r/$(HOST_SUBDIR)/gmp
+@endif mpfr-bootstrap
+
+.PHONY: configure-stageprofile-mpfr maybe-configure-stageprofile-mpfr
+maybe-configure-stageprofile-mpfr:
+@if mpfr-bootstrap
+maybe-configure-stageprofile-mpfr: configure-stageprofile-mpfr
+configure-stageprofile-mpfr:
+ @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/mpfr/Makefile || exit 0; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
+ echo Configuring stage profile in $(HOST_SUBDIR)/mpfr ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr ; \
+ cd $(HOST_SUBDIR)/mpfr || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/mpfr/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/mpfr"; \
+ libsrcdir="$$s/mpfr"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@ --disable-shared --with-gmp-build=$$r/$(HOST_SUBDIR)/gmp
+@endif mpfr-bootstrap
+
+.PHONY: configure-stagefeedback-mpfr maybe-configure-stagefeedback-mpfr
+maybe-configure-stagefeedback-mpfr:
+@if mpfr-bootstrap
+maybe-configure-stagefeedback-mpfr: configure-stagefeedback-mpfr
+configure-stagefeedback-mpfr:
+ @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ test ! -f $(HOST_SUBDIR)/mpfr/Makefile || exit 0; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
+ echo Configuring stage feedback in $(HOST_SUBDIR)/mpfr ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr ; \
+ cd $(HOST_SUBDIR)/mpfr || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(HOST_SUBDIR)/mpfr/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/mpfr"; \
+ libsrcdir="$$s/mpfr"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \
+ --target=none-${host_vendor}-${host_os} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@ --disable-shared --with-gmp-build=$$r/$(HOST_SUBDIR)/gmp
+@endif mpfr-bootstrap
+
+
+
+
+
+.PHONY: all-mpfr maybe-all-mpfr
+maybe-all-mpfr:
+@if gcc-bootstrap
+all-mpfr: stage_current
+@endif gcc-bootstrap
+@if mpfr
+TARGET-mpfr=all
+maybe-all-mpfr: all-mpfr
+all-mpfr: configure-mpfr
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) $(TARGET-mpfr))
+@endif mpfr
+
+
+
+.PHONY: all-stage1-mpfr maybe-all-stage1-mpfr
+.PHONY: clean-stage1-mpfr maybe-clean-stage1-mpfr
+maybe-all-stage1-mpfr:
+maybe-clean-stage1-mpfr:
+@if mpfr-bootstrap
+maybe-all-stage1-mpfr: all-stage1-mpfr
+all-stage1: all-stage1-mpfr
+TARGET-stage1-mpfr = $(TARGET-mpfr)
+all-stage1-mpfr: configure-stage1-mpfr
+ @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
+ $(TARGET-stage1-mpfr)
+
+maybe-clean-stage1-mpfr: clean-stage1-mpfr
+clean-stage1: clean-stage1-mpfr
+clean-stage1-mpfr:
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(HOST_SUBDIR)/mpfr/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage1-mpfr/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
+ cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ clean
+@endif mpfr-bootstrap
+
+
+.PHONY: all-stage2-mpfr maybe-all-stage2-mpfr
+.PHONY: clean-stage2-mpfr maybe-clean-stage2-mpfr
+maybe-all-stage2-mpfr:
+maybe-clean-stage2-mpfr:
+@if mpfr-bootstrap
+maybe-all-stage2-mpfr: all-stage2-mpfr
+all-stage2: all-stage2-mpfr
+TARGET-stage2-mpfr = $(TARGET-mpfr)
+all-stage2-mpfr: configure-stage2-mpfr
+ @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(TARGET-stage2-mpfr)
+
+maybe-clean-stage2-mpfr: clean-stage2-mpfr
+clean-stage2: clean-stage2-mpfr
+clean-stage2-mpfr:
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(HOST_SUBDIR)/mpfr/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage2-mpfr/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
+ cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ $(POSTSTAGE1_FLAGS_TO_PASS) \
+ clean
+@endif mpfr-bootstrap
+
+
+.PHONY: all-stage3-mpfr maybe-all-stage3-mpfr
+.PHONY: clean-stage3-mpfr maybe-clean-stage3-mpfr
+maybe-all-stage3-mpfr:
+maybe-clean-stage3-mpfr:
+@if mpfr-bootstrap
+maybe-all-stage3-mpfr: all-stage3-mpfr
+all-stage3: all-stage3-mpfr
+TARGET-stage3-mpfr = $(TARGET-mpfr)
+all-stage3-mpfr: configure-stage3-mpfr
+ @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(TARGET-stage3-mpfr)
+
+maybe-clean-stage3-mpfr: clean-stage3-mpfr
+clean-stage3: clean-stage3-mpfr
+clean-stage3-mpfr:
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(HOST_SUBDIR)/mpfr/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage3-mpfr/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
+ cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ $(POSTSTAGE1_FLAGS_TO_PASS) \
+ clean
+@endif mpfr-bootstrap
+
+
+.PHONY: all-stage4-mpfr maybe-all-stage4-mpfr
+.PHONY: clean-stage4-mpfr maybe-clean-stage4-mpfr
+maybe-all-stage4-mpfr:
+maybe-clean-stage4-mpfr:
+@if mpfr-bootstrap
+maybe-all-stage4-mpfr: all-stage4-mpfr
+all-stage4: all-stage4-mpfr
+TARGET-stage4-mpfr = $(TARGET-mpfr)
+all-stage4-mpfr: configure-stage4-mpfr
+ @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(TARGET-stage4-mpfr)
+
+maybe-clean-stage4-mpfr: clean-stage4-mpfr
+clean-stage4: clean-stage4-mpfr
+clean-stage4-mpfr:
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(HOST_SUBDIR)/mpfr/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage4-mpfr/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
+ cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ $(POSTSTAGE1_FLAGS_TO_PASS) \
+ clean
+@endif mpfr-bootstrap
+
+
+.PHONY: all-stageprofile-mpfr maybe-all-stageprofile-mpfr
+.PHONY: clean-stageprofile-mpfr maybe-clean-stageprofile-mpfr
+maybe-all-stageprofile-mpfr:
+maybe-clean-stageprofile-mpfr:
+@if mpfr-bootstrap
+maybe-all-stageprofile-mpfr: all-stageprofile-mpfr
+all-stageprofile: all-stageprofile-mpfr
+TARGET-stageprofile-mpfr = $(TARGET-mpfr)
+all-stageprofile-mpfr: configure-stageprofile-mpfr
+ @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(TARGET-stageprofile-mpfr)
+
+maybe-clean-stageprofile-mpfr: clean-stageprofile-mpfr
+clean-stageprofile: clean-stageprofile-mpfr
+clean-stageprofile-mpfr:
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(HOST_SUBDIR)/mpfr/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stageprofile-mpfr/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
+ cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ $(POSTSTAGE1_FLAGS_TO_PASS) \
+ clean
+@endif mpfr-bootstrap
+
+
+.PHONY: all-stagefeedback-mpfr maybe-all-stagefeedback-mpfr
+.PHONY: clean-stagefeedback-mpfr maybe-clean-stagefeedback-mpfr
+maybe-all-stagefeedback-mpfr:
+maybe-clean-stagefeedback-mpfr:
+@if mpfr-bootstrap
+maybe-all-stagefeedback-mpfr: all-stagefeedback-mpfr
+all-stagefeedback: all-stagefeedback-mpfr
+TARGET-stagefeedback-mpfr = $(TARGET-mpfr)
+all-stagefeedback-mpfr: configure-stagefeedback-mpfr
+ @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ $(POSTSTAGE1_HOST_EXPORTS) \
+ cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(TARGET-stagefeedback-mpfr)
+
+maybe-clean-stagefeedback-mpfr: clean-stagefeedback-mpfr
+clean-stagefeedback: clean-stagefeedback-mpfr
+clean-stagefeedback-mpfr:
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(HOST_SUBDIR)/mpfr/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stagefeedback-mpfr/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
+ cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ $(POSTSTAGE1_FLAGS_TO_PASS) \
+ clean
+@endif mpfr-bootstrap
+
+
+
+
+
+.PHONY: check-mpfr maybe-check-mpfr
+maybe-check-mpfr:
+@if mpfr
+maybe-check-mpfr: check-mpfr
+
+check-mpfr:
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(FLAGS_TO_PASS) check)
+
+@endif mpfr
+
+.PHONY: install-mpfr maybe-install-mpfr
+maybe-install-mpfr:
+@if mpfr
+maybe-install-mpfr: install-mpfr
+
+install-mpfr:
+
+@endif mpfr
+
+# Other targets (info, dvi, pdf, etc.)
+
+.PHONY: maybe-info-mpfr info-mpfr
+maybe-info-mpfr:
+@if mpfr
+maybe-info-mpfr: info-mpfr
+
+info-mpfr: \
+ configure-mpfr
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing info in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ info) \
+ || exit 1
+
+@endif mpfr
+
+.PHONY: maybe-dvi-mpfr dvi-mpfr
+maybe-dvi-mpfr:
+@if mpfr
+maybe-dvi-mpfr: dvi-mpfr
+
+dvi-mpfr: \
+ configure-mpfr
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing dvi in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ dvi) \
+ || exit 1
+
+@endif mpfr
+
+.PHONY: maybe-pdf-mpfr pdf-mpfr
+maybe-pdf-mpfr:
+@if mpfr
+maybe-pdf-mpfr: pdf-mpfr
+
+pdf-mpfr: \
+ configure-mpfr
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif mpfr
+
+.PHONY: maybe-html-mpfr html-mpfr
+maybe-html-mpfr:
+@if mpfr
+maybe-html-mpfr: html-mpfr
+
+html-mpfr: \
+ configure-mpfr
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing html in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ html) \
+ || exit 1
+
+@endif mpfr
+
+.PHONY: maybe-TAGS-mpfr TAGS-mpfr
+maybe-TAGS-mpfr:
+@if mpfr
+maybe-TAGS-mpfr: TAGS-mpfr
+
+TAGS-mpfr: \
+ configure-mpfr
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing TAGS in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ TAGS) \
+ || exit 1
+
+@endif mpfr
+
+.PHONY: maybe-install-info-mpfr install-info-mpfr
+maybe-install-info-mpfr:
+@if mpfr
+maybe-install-info-mpfr: install-info-mpfr
+
+install-info-mpfr: \
+ configure-mpfr \
+ info-mpfr
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-info in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-info) \
+ || exit 1
+
+@endif mpfr
+
+.PHONY: maybe-install-pdf-mpfr install-pdf-mpfr
+maybe-install-pdf-mpfr:
+@if mpfr
+maybe-install-pdf-mpfr: install-pdf-mpfr
+
+install-pdf-mpfr: \
+ configure-mpfr \
+ pdf-mpfr
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif mpfr
+
+.PHONY: maybe-install-html-mpfr install-html-mpfr
+maybe-install-html-mpfr:
+@if mpfr
+maybe-install-html-mpfr: install-html-mpfr
+
+install-html-mpfr: \
+ configure-mpfr \
+ html-mpfr
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-html in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-html) \
+ || exit 1
+
+@endif mpfr
+
+.PHONY: maybe-installcheck-mpfr installcheck-mpfr
+maybe-installcheck-mpfr:
+@if mpfr
+maybe-installcheck-mpfr: installcheck-mpfr
+
+installcheck-mpfr: \
+ configure-mpfr
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing installcheck in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ installcheck) \
+ || exit 1
+
+@endif mpfr
+
+.PHONY: maybe-mostlyclean-mpfr mostlyclean-mpfr
+maybe-mostlyclean-mpfr:
+@if mpfr
+maybe-mostlyclean-mpfr: mostlyclean-mpfr
+
+mostlyclean-mpfr:
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing mostlyclean in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ mostlyclean) \
+ || exit 1
+
+@endif mpfr
+
+.PHONY: maybe-clean-mpfr clean-mpfr
+maybe-clean-mpfr:
+@if mpfr
+maybe-clean-mpfr: clean-mpfr
+
+clean-mpfr:
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing clean in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ clean) \
+ || exit 1
+
+@endif mpfr
+
+.PHONY: maybe-distclean-mpfr distclean-mpfr
+maybe-distclean-mpfr:
+@if mpfr
+maybe-distclean-mpfr: distclean-mpfr
+
+distclean-mpfr:
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing distclean in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ distclean) \
+ || exit 1
+
+@endif mpfr
+
+.PHONY: maybe-maintainer-clean-mpfr maintainer-clean-mpfr
+maybe-maintainer-clean-mpfr:
+@if mpfr
+maybe-maintainer-clean-mpfr: maintainer-clean-mpfr
+
+maintainer-clean-mpfr:
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing maintainer-clean in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ maintainer-clean) \
+ || exit 1
+
+@endif mpfr
+
+
+
.PHONY: configure-gnuserv maybe-configure-gnuserv
maybe-configure-gnuserv:
+@if gcc-bootstrap
+configure-gnuserv: stage_current
+@endif gcc-bootstrap
@if gnuserv
maybe-configure-gnuserv: configure-gnuserv
configure-gnuserv:
@@ -13116,7 +16744,8 @@ configure-gnuserv:
srcdiroption="--srcdir=$${topdir}/gnuserv"; \
libsrcdir="$$s/gnuserv"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif gnuserv
@@ -13126,6 +16755,9 @@ configure-gnuserv:
.PHONY: all-gnuserv maybe-all-gnuserv
maybe-all-gnuserv:
+@if gcc-bootstrap
+all-gnuserv: stage_current
+@endif gcc-bootstrap
@if gnuserv
TARGET-gnuserv=all
maybe-all-gnuserv: all-gnuserv
@@ -13171,7 +16803,7 @@ install-gnuserv: installdirs
@endif gnuserv
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-gnuserv info-gnuserv
maybe-info-gnuserv:
@@ -13225,6 +16857,32 @@ dvi-gnuserv: \
@endif gnuserv
+.PHONY: maybe-pdf-gnuserv pdf-gnuserv
+maybe-pdf-gnuserv:
+@if gnuserv
+maybe-pdf-gnuserv: pdf-gnuserv
+
+pdf-gnuserv: \
+ configure-gnuserv
+ @: $(MAKE); $(unstage)
+ @[ -f ./gnuserv/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in gnuserv" ; \
+ (cd $(HOST_SUBDIR)/gnuserv && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif gnuserv
+
.PHONY: maybe-html-gnuserv html-gnuserv
maybe-html-gnuserv:
@if gnuserv
@@ -13304,6 +16962,33 @@ install-info-gnuserv: \
@endif gnuserv
+.PHONY: maybe-install-pdf-gnuserv install-pdf-gnuserv
+maybe-install-pdf-gnuserv:
+@if gnuserv
+maybe-install-pdf-gnuserv: install-pdf-gnuserv
+
+install-pdf-gnuserv: \
+ configure-gnuserv \
+ pdf-gnuserv
+ @: $(MAKE); $(unstage)
+ @[ -f ./gnuserv/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gnuserv" ; \
+ (cd $(HOST_SUBDIR)/gnuserv && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gnuserv
+
.PHONY: maybe-install-html-gnuserv install-html-gnuserv
maybe-install-html-gnuserv:
@if gnuserv
@@ -13461,6 +17146,9 @@ maintainer-clean-gnuserv:
.PHONY: configure-gprof maybe-configure-gprof
maybe-configure-gprof:
+@if gcc-bootstrap
+configure-gprof: stage_current
+@endif gcc-bootstrap
@if gprof
maybe-configure-gprof: configure-gprof
configure-gprof:
@@ -13480,7 +17168,8 @@ configure-gprof:
srcdiroption="--srcdir=$${topdir}/gprof"; \
libsrcdir="$$s/gprof"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif gprof
@@ -13490,6 +17179,9 @@ configure-gprof:
.PHONY: all-gprof maybe-all-gprof
maybe-all-gprof:
+@if gcc-bootstrap
+all-gprof: stage_current
+@endif gcc-bootstrap
@if gprof
TARGET-gprof=all
maybe-all-gprof: all-gprof
@@ -13535,7 +17227,7 @@ install-gprof: installdirs
@endif gprof
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-gprof info-gprof
maybe-info-gprof:
@@ -13589,6 +17281,32 @@ dvi-gprof: \
@endif gprof
+.PHONY: maybe-pdf-gprof pdf-gprof
+maybe-pdf-gprof:
+@if gprof
+maybe-pdf-gprof: pdf-gprof
+
+pdf-gprof: \
+ configure-gprof
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprof/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in gprof" ; \
+ (cd $(HOST_SUBDIR)/gprof && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif gprof
+
.PHONY: maybe-html-gprof html-gprof
maybe-html-gprof:
@if gprof
@@ -13668,6 +17386,33 @@ install-info-gprof: \
@endif gprof
+.PHONY: maybe-install-pdf-gprof install-pdf-gprof
+maybe-install-pdf-gprof:
+@if gprof
+maybe-install-pdf-gprof: install-pdf-gprof
+
+install-pdf-gprof: \
+ configure-gprof \
+ pdf-gprof
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprof/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gprof" ; \
+ (cd $(HOST_SUBDIR)/gprof && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gprof
+
.PHONY: maybe-install-html-gprof install-html-gprof
maybe-install-html-gprof:
@if gprof
@@ -13825,6 +17570,9 @@ maintainer-clean-gprof:
.PHONY: configure-gzip maybe-configure-gzip
maybe-configure-gzip:
+@if gcc-bootstrap
+configure-gzip: stage_current
+@endif gcc-bootstrap
@if gzip
maybe-configure-gzip: configure-gzip
configure-gzip:
@@ -13844,7 +17592,8 @@ configure-gzip:
srcdiroption="--srcdir=$${topdir}/gzip"; \
libsrcdir="$$s/gzip"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif gzip
@@ -13854,6 +17603,9 @@ configure-gzip:
.PHONY: all-gzip maybe-all-gzip
maybe-all-gzip:
+@if gcc-bootstrap
+all-gzip: stage_current
+@endif gcc-bootstrap
@if gzip
TARGET-gzip=all
maybe-all-gzip: all-gzip
@@ -13899,7 +17651,7 @@ install-gzip: installdirs
@endif gzip
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-gzip info-gzip
maybe-info-gzip:
@@ -13953,6 +17705,32 @@ dvi-gzip: \
@endif gzip
+.PHONY: maybe-pdf-gzip pdf-gzip
+maybe-pdf-gzip:
+@if gzip
+maybe-pdf-gzip: pdf-gzip
+
+pdf-gzip: \
+ configure-gzip
+ @: $(MAKE); $(unstage)
+ @[ -f ./gzip/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in gzip" ; \
+ (cd $(HOST_SUBDIR)/gzip && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif gzip
+
.PHONY: maybe-html-gzip html-gzip
maybe-html-gzip:
@if gzip
@@ -14032,6 +17810,33 @@ install-info-gzip: \
@endif gzip
+.PHONY: maybe-install-pdf-gzip install-pdf-gzip
+maybe-install-pdf-gzip:
+@if gzip
+maybe-install-pdf-gzip: install-pdf-gzip
+
+install-pdf-gzip: \
+ configure-gzip \
+ pdf-gzip
+ @: $(MAKE); $(unstage)
+ @[ -f ./gzip/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gzip" ; \
+ (cd $(HOST_SUBDIR)/gzip && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gzip
+
.PHONY: maybe-install-html-gzip install-html-gzip
maybe-install-html-gzip:
@if gzip
@@ -14189,6 +17994,9 @@ maintainer-clean-gzip:
.PHONY: configure-hello maybe-configure-hello
maybe-configure-hello:
+@if gcc-bootstrap
+configure-hello: stage_current
+@endif gcc-bootstrap
@if hello
maybe-configure-hello: configure-hello
configure-hello:
@@ -14208,7 +18016,8 @@ configure-hello:
srcdiroption="--srcdir=$${topdir}/hello"; \
libsrcdir="$$s/hello"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif hello
@@ -14218,6 +18027,9 @@ configure-hello:
.PHONY: all-hello maybe-all-hello
maybe-all-hello:
+@if gcc-bootstrap
+all-hello: stage_current
+@endif gcc-bootstrap
@if hello
TARGET-hello=all
maybe-all-hello: all-hello
@@ -14263,7 +18075,7 @@ install-hello: installdirs
@endif hello
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-hello info-hello
maybe-info-hello:
@@ -14317,6 +18129,32 @@ dvi-hello: \
@endif hello
+.PHONY: maybe-pdf-hello pdf-hello
+maybe-pdf-hello:
+@if hello
+maybe-pdf-hello: pdf-hello
+
+pdf-hello: \
+ configure-hello
+ @: $(MAKE); $(unstage)
+ @[ -f ./hello/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in hello" ; \
+ (cd $(HOST_SUBDIR)/hello && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif hello
+
.PHONY: maybe-html-hello html-hello
maybe-html-hello:
@if hello
@@ -14396,6 +18234,33 @@ install-info-hello: \
@endif hello
+.PHONY: maybe-install-pdf-hello install-pdf-hello
+maybe-install-pdf-hello:
+@if hello
+maybe-install-pdf-hello: install-pdf-hello
+
+install-pdf-hello: \
+ configure-hello \
+ pdf-hello
+ @: $(MAKE); $(unstage)
+ @[ -f ./hello/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in hello" ; \
+ (cd $(HOST_SUBDIR)/hello && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif hello
+
.PHONY: maybe-install-html-hello install-html-hello
maybe-install-html-hello:
@if hello
@@ -14553,6 +18418,9 @@ maintainer-clean-hello:
.PHONY: configure-indent maybe-configure-indent
maybe-configure-indent:
+@if gcc-bootstrap
+configure-indent: stage_current
+@endif gcc-bootstrap
@if indent
maybe-configure-indent: configure-indent
configure-indent:
@@ -14572,7 +18440,8 @@ configure-indent:
srcdiroption="--srcdir=$${topdir}/indent"; \
libsrcdir="$$s/indent"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif indent
@@ -14582,6 +18451,9 @@ configure-indent:
.PHONY: all-indent maybe-all-indent
maybe-all-indent:
+@if gcc-bootstrap
+all-indent: stage_current
+@endif gcc-bootstrap
@if indent
TARGET-indent=all
maybe-all-indent: all-indent
@@ -14627,7 +18499,7 @@ install-indent: installdirs
@endif indent
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-indent info-indent
maybe-info-indent:
@@ -14681,6 +18553,32 @@ dvi-indent: \
@endif indent
+.PHONY: maybe-pdf-indent pdf-indent
+maybe-pdf-indent:
+@if indent
+maybe-pdf-indent: pdf-indent
+
+pdf-indent: \
+ configure-indent
+ @: $(MAKE); $(unstage)
+ @[ -f ./indent/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in indent" ; \
+ (cd $(HOST_SUBDIR)/indent && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif indent
+
.PHONY: maybe-html-indent html-indent
maybe-html-indent:
@if indent
@@ -14760,6 +18658,33 @@ install-info-indent: \
@endif indent
+.PHONY: maybe-install-pdf-indent install-pdf-indent
+maybe-install-pdf-indent:
+@if indent
+maybe-install-pdf-indent: install-pdf-indent
+
+install-pdf-indent: \
+ configure-indent \
+ pdf-indent
+ @: $(MAKE); $(unstage)
+ @[ -f ./indent/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in indent" ; \
+ (cd $(HOST_SUBDIR)/indent && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif indent
+
.PHONY: maybe-install-html-indent install-html-indent
maybe-install-html-indent:
@if indent
@@ -14917,14 +18842,12 @@ maintainer-clean-indent:
.PHONY: configure-intl maybe-configure-intl
maybe-configure-intl:
+@if gcc-bootstrap
+configure-intl: stage_current
+@endif gcc-bootstrap
@if intl
maybe-configure-intl: configure-intl
configure-intl:
-@endif intl
-@if intl-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif intl-bootstrap
-@if intl
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/intl/Makefile || exit 0; \
@@ -14940,7 +18863,8 @@ configure-intl:
srcdiroption="--srcdir=$${topdir}/intl"; \
libsrcdir="$$s/intl"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif intl
@@ -14957,6 +18881,8 @@ configure-stage1-intl:
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/intl/Makefile || exit 0; \
$(HOST_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 1 in $(HOST_SUBDIR)/intl ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl ; \
cd $(HOST_SUBDIR)/intl || exit 1; \
@@ -14968,8 +18894,10 @@ configure-stage1-intl:
srcdiroption="--srcdir=$${topdir}/intl"; \
libsrcdir="$$s/intl"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
- --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
@endif intl-bootstrap
.PHONY: configure-stage2-intl maybe-configure-stage2-intl
@@ -14984,6 +18912,8 @@ configure-stage2-intl:
test ! -f $(HOST_SUBDIR)/intl/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 2 in $(HOST_SUBDIR)/intl ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl ; \
cd $(HOST_SUBDIR)/intl || exit 1; \
@@ -14995,7 +18925,9 @@ configure-stage2-intl:
srcdiroption="--srcdir=$${topdir}/intl"; \
libsrcdir="$$s/intl"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif intl-bootstrap
@@ -15011,6 +18943,8 @@ configure-stage3-intl:
test ! -f $(HOST_SUBDIR)/intl/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 3 in $(HOST_SUBDIR)/intl ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl ; \
cd $(HOST_SUBDIR)/intl || exit 1; \
@@ -15022,7 +18956,9 @@ configure-stage3-intl:
srcdiroption="--srcdir=$${topdir}/intl"; \
libsrcdir="$$s/intl"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif intl-bootstrap
@@ -15038,6 +18974,8 @@ configure-stage4-intl:
test ! -f $(HOST_SUBDIR)/intl/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 4 in $(HOST_SUBDIR)/intl ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl ; \
cd $(HOST_SUBDIR)/intl || exit 1; \
@@ -15049,7 +18987,9 @@ configure-stage4-intl:
srcdiroption="--srcdir=$${topdir}/intl"; \
libsrcdir="$$s/intl"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif intl-bootstrap
@@ -15065,6 +19005,8 @@ configure-stageprofile-intl:
test ! -f $(HOST_SUBDIR)/intl/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
echo Configuring stage profile in $(HOST_SUBDIR)/intl ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl ; \
cd $(HOST_SUBDIR)/intl || exit 1; \
@@ -15076,7 +19018,9 @@ configure-stageprofile-intl:
srcdiroption="--srcdir=$${topdir}/intl"; \
libsrcdir="$$s/intl"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif intl-bootstrap
@@ -15092,6 +19036,8 @@ configure-stagefeedback-intl:
test ! -f $(HOST_SUBDIR)/intl/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
echo Configuring stage feedback in $(HOST_SUBDIR)/intl ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl ; \
cd $(HOST_SUBDIR)/intl || exit 1; \
@@ -15103,7 +19049,9 @@ configure-stagefeedback-intl:
srcdiroption="--srcdir=$${topdir}/intl"; \
libsrcdir="$$s/intl"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif intl-bootstrap
@@ -15113,15 +19061,13 @@ configure-stagefeedback-intl:
.PHONY: all-intl maybe-all-intl
maybe-all-intl:
+@if gcc-bootstrap
+all-intl: stage_current
+@endif gcc-bootstrap
@if intl
TARGET-intl=all
maybe-all-intl: all-intl
all-intl: configure-intl
-@endif intl
-@if intl-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif intl-bootstrap
-@if intl
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
@@ -15145,18 +19091,22 @@ all-stage1-intl: configure-stage1-intl
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
cd $(HOST_SUBDIR)/intl && \
- $(MAKE) $(FLAGS_TO_PASS) CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
$(TARGET-stage1-intl)
maybe-clean-stage1-intl: clean-stage1-intl
clean-stage1: clean-stage1-intl
clean-stage1-intl:
- @[ -f $(HOST_SUBDIR)/intl/Makefile ] || [ -f $(HOST_SUBDIR)/stage1-intl/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage1 ] || $(MAKE) stage1-start; \
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(HOST_SUBDIR)/intl/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage1-intl/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
cd $(HOST_SUBDIR)/intl && \
$(MAKE) $(FLAGS_TO_PASS) \
- CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" clean
+ clean
@endif intl-bootstrap
@@ -15175,19 +19125,23 @@ all-stage2-intl: configure-stage2-intl
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/intl && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage2-intl)
maybe-clean-stage2-intl: clean-stage2-intl
clean-stage2: clean-stage2-intl
clean-stage2-intl:
- @[ -f $(HOST_SUBDIR)/intl/Makefile ] || [ -f $(HOST_SUBDIR)/stage2-intl/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage2 ] || $(MAKE) stage2-start; \
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(HOST_SUBDIR)/intl/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage2-intl/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
cd $(HOST_SUBDIR)/intl && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif intl-bootstrap
@@ -15206,19 +19160,23 @@ all-stage3-intl: configure-stage3-intl
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/intl && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage3-intl)
maybe-clean-stage3-intl: clean-stage3-intl
clean-stage3: clean-stage3-intl
clean-stage3-intl:
- @[ -f $(HOST_SUBDIR)/intl/Makefile ] || [ -f $(HOST_SUBDIR)/stage3-intl/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage3 ] || $(MAKE) stage3-start; \
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(HOST_SUBDIR)/intl/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage3-intl/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
cd $(HOST_SUBDIR)/intl && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif intl-bootstrap
@@ -15237,19 +19195,23 @@ all-stage4-intl: configure-stage4-intl
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/intl && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage4-intl)
maybe-clean-stage4-intl: clean-stage4-intl
clean-stage4: clean-stage4-intl
clean-stage4-intl:
- @[ -f $(HOST_SUBDIR)/intl/Makefile ] || [ -f $(HOST_SUBDIR)/stage4-intl/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage4 ] || $(MAKE) stage4-start; \
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(HOST_SUBDIR)/intl/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage4-intl/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
cd $(HOST_SUBDIR)/intl && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif intl-bootstrap
@@ -15268,19 +19230,23 @@ all-stageprofile-intl: configure-stageprofile-intl
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/intl && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stageprofile-intl)
maybe-clean-stageprofile-intl: clean-stageprofile-intl
clean-stageprofile: clean-stageprofile-intl
clean-stageprofile-intl:
- @[ -f $(HOST_SUBDIR)/intl/Makefile ] || [ -f $(HOST_SUBDIR)/stageprofile-intl/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start; \
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(HOST_SUBDIR)/intl/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stageprofile-intl/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
cd $(HOST_SUBDIR)/intl && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" clean
+ clean
@endif intl-bootstrap
@@ -15299,19 +19265,23 @@ all-stagefeedback-intl: configure-stagefeedback-intl
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/intl && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-use" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stagefeedback-intl)
maybe-clean-stagefeedback-intl: clean-stagefeedback-intl
clean-stagefeedback: clean-stagefeedback-intl
clean-stagefeedback-intl:
- @[ -f $(HOST_SUBDIR)/intl/Makefile ] || [ -f $(HOST_SUBDIR)/stagefeedback-intl/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start; \
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(HOST_SUBDIR)/intl/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stagefeedback-intl/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
cd $(HOST_SUBDIR)/intl && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-use" clean
+ clean
@endif intl-bootstrap
@@ -15348,7 +19318,7 @@ install-intl: installdirs
@endif intl
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-intl info-intl
maybe-info-intl:
@@ -15400,6 +19370,31 @@ dvi-intl: \
@endif intl
+.PHONY: maybe-pdf-intl pdf-intl
+maybe-pdf-intl:
+@if intl
+maybe-pdf-intl: pdf-intl
+
+pdf-intl: \
+ configure-intl
+ @[ -f ./intl/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in intl" ; \
+ (cd $(HOST_SUBDIR)/intl && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif intl
+
.PHONY: maybe-html-intl html-intl
maybe-html-intl:
@if intl
@@ -15476,6 +19471,32 @@ install-info-intl: \
@endif intl
+.PHONY: maybe-install-pdf-intl install-pdf-intl
+maybe-install-pdf-intl:
+@if intl
+maybe-install-pdf-intl: install-pdf-intl
+
+install-pdf-intl: \
+ configure-intl \
+ pdf-intl
+ @[ -f ./intl/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in intl" ; \
+ (cd $(HOST_SUBDIR)/intl && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif intl
+
.PHONY: maybe-install-html-intl install-html-intl
maybe-install-html-intl:
@if intl
@@ -15627,6 +19648,9 @@ maintainer-clean-intl:
.PHONY: configure-tcl maybe-configure-tcl
maybe-configure-tcl:
+@if gcc-bootstrap
+configure-tcl: stage_current
+@endif gcc-bootstrap
@if tcl
maybe-configure-tcl: configure-tcl
configure-tcl:
@@ -15646,7 +19670,8 @@ configure-tcl:
srcdiroption="--srcdir=$${topdir}/tcl"; \
libsrcdir="$$s/tcl"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif tcl
@@ -15656,6 +19681,9 @@ configure-tcl:
.PHONY: all-tcl maybe-all-tcl
maybe-all-tcl:
+@if gcc-bootstrap
+all-tcl: stage_current
+@endif gcc-bootstrap
@if tcl
TARGET-tcl=all
maybe-all-tcl: all-tcl
@@ -15701,7 +19729,7 @@ install-tcl: installdirs
@endif tcl
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-tcl info-tcl
maybe-info-tcl:
@@ -15755,6 +19783,32 @@ dvi-tcl: \
@endif tcl
+.PHONY: maybe-pdf-tcl pdf-tcl
+maybe-pdf-tcl:
+@if tcl
+maybe-pdf-tcl: pdf-tcl
+
+pdf-tcl: \
+ configure-tcl
+ @: $(MAKE); $(unstage)
+ @[ -f ./tcl/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in tcl" ; \
+ (cd $(HOST_SUBDIR)/tcl && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif tcl
+
.PHONY: maybe-html-tcl html-tcl
maybe-html-tcl:
@if tcl
@@ -15834,6 +19888,33 @@ install-info-tcl: \
@endif tcl
+.PHONY: maybe-install-pdf-tcl install-pdf-tcl
+maybe-install-pdf-tcl:
+@if tcl
+maybe-install-pdf-tcl: install-pdf-tcl
+
+install-pdf-tcl: \
+ configure-tcl \
+ pdf-tcl
+ @: $(MAKE); $(unstage)
+ @[ -f ./tcl/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in tcl" ; \
+ (cd $(HOST_SUBDIR)/tcl && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif tcl
+
.PHONY: maybe-install-html-tcl install-html-tcl
maybe-install-html-tcl:
@if tcl
@@ -15976,6 +20057,9 @@ maintainer-clean-tcl:
.PHONY: configure-itcl maybe-configure-itcl
maybe-configure-itcl:
+@if gcc-bootstrap
+configure-itcl: stage_current
+@endif gcc-bootstrap
@if itcl
maybe-configure-itcl: configure-itcl
configure-itcl:
@@ -15995,7 +20079,8 @@ configure-itcl:
srcdiroption="--srcdir=$${topdir}/itcl"; \
libsrcdir="$$s/itcl"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif itcl
@@ -16005,6 +20090,9 @@ configure-itcl:
.PHONY: all-itcl maybe-all-itcl
maybe-all-itcl:
+@if gcc-bootstrap
+all-itcl: stage_current
+@endif gcc-bootstrap
@if itcl
TARGET-itcl=all
maybe-all-itcl: all-itcl
@@ -16050,7 +20138,7 @@ install-itcl: installdirs
@endif itcl
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-itcl info-itcl
maybe-info-itcl:
@@ -16104,6 +20192,32 @@ dvi-itcl: \
@endif itcl
+.PHONY: maybe-pdf-itcl pdf-itcl
+maybe-pdf-itcl:
+@if itcl
+maybe-pdf-itcl: pdf-itcl
+
+pdf-itcl: \
+ configure-itcl
+ @: $(MAKE); $(unstage)
+ @[ -f ./itcl/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in itcl" ; \
+ (cd $(HOST_SUBDIR)/itcl && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif itcl
+
.PHONY: maybe-html-itcl html-itcl
maybe-html-itcl:
@if itcl
@@ -16183,6 +20297,33 @@ install-info-itcl: \
@endif itcl
+.PHONY: maybe-install-pdf-itcl install-pdf-itcl
+maybe-install-pdf-itcl:
+@if itcl
+maybe-install-pdf-itcl: install-pdf-itcl
+
+install-pdf-itcl: \
+ configure-itcl \
+ pdf-itcl
+ @: $(MAKE); $(unstage)
+ @[ -f ./itcl/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in itcl" ; \
+ (cd $(HOST_SUBDIR)/itcl && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif itcl
+
.PHONY: maybe-install-html-itcl install-html-itcl
maybe-install-html-itcl:
@if itcl
@@ -16340,14 +20481,12 @@ maintainer-clean-itcl:
.PHONY: configure-ld maybe-configure-ld
maybe-configure-ld:
+@if gcc-bootstrap
+configure-ld: stage_current
+@endif gcc-bootstrap
@if ld
maybe-configure-ld: configure-ld
configure-ld:
-@endif ld
-@if ld-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif ld-bootstrap
-@if ld
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/ld/Makefile || exit 0; \
@@ -16363,7 +20502,8 @@ configure-ld:
srcdiroption="--srcdir=$${topdir}/ld"; \
libsrcdir="$$s/ld"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif ld
@@ -16380,6 +20520,8 @@ configure-stage1-ld:
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/ld/Makefile || exit 0; \
$(HOST_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 1 in $(HOST_SUBDIR)/ld ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld ; \
cd $(HOST_SUBDIR)/ld || exit 1; \
@@ -16391,8 +20533,10 @@ configure-stage1-ld:
srcdiroption="--srcdir=$${topdir}/ld"; \
libsrcdir="$$s/ld"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
- --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
@endif ld-bootstrap
.PHONY: configure-stage2-ld maybe-configure-stage2-ld
@@ -16407,6 +20551,8 @@ configure-stage2-ld:
test ! -f $(HOST_SUBDIR)/ld/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 2 in $(HOST_SUBDIR)/ld ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld ; \
cd $(HOST_SUBDIR)/ld || exit 1; \
@@ -16418,7 +20564,9 @@ configure-stage2-ld:
srcdiroption="--srcdir=$${topdir}/ld"; \
libsrcdir="$$s/ld"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif ld-bootstrap
@@ -16434,6 +20582,8 @@ configure-stage3-ld:
test ! -f $(HOST_SUBDIR)/ld/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 3 in $(HOST_SUBDIR)/ld ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld ; \
cd $(HOST_SUBDIR)/ld || exit 1; \
@@ -16445,7 +20595,9 @@ configure-stage3-ld:
srcdiroption="--srcdir=$${topdir}/ld"; \
libsrcdir="$$s/ld"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif ld-bootstrap
@@ -16461,6 +20613,8 @@ configure-stage4-ld:
test ! -f $(HOST_SUBDIR)/ld/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 4 in $(HOST_SUBDIR)/ld ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld ; \
cd $(HOST_SUBDIR)/ld || exit 1; \
@@ -16472,7 +20626,9 @@ configure-stage4-ld:
srcdiroption="--srcdir=$${topdir}/ld"; \
libsrcdir="$$s/ld"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif ld-bootstrap
@@ -16488,6 +20644,8 @@ configure-stageprofile-ld:
test ! -f $(HOST_SUBDIR)/ld/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
echo Configuring stage profile in $(HOST_SUBDIR)/ld ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld ; \
cd $(HOST_SUBDIR)/ld || exit 1; \
@@ -16499,7 +20657,9 @@ configure-stageprofile-ld:
srcdiroption="--srcdir=$${topdir}/ld"; \
libsrcdir="$$s/ld"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif ld-bootstrap
@@ -16515,6 +20675,8 @@ configure-stagefeedback-ld:
test ! -f $(HOST_SUBDIR)/ld/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
echo Configuring stage feedback in $(HOST_SUBDIR)/ld ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld ; \
cd $(HOST_SUBDIR)/ld || exit 1; \
@@ -16526,7 +20688,9 @@ configure-stagefeedback-ld:
srcdiroption="--srcdir=$${topdir}/ld"; \
libsrcdir="$$s/ld"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif ld-bootstrap
@@ -16536,15 +20700,13 @@ configure-stagefeedback-ld:
.PHONY: all-ld maybe-all-ld
maybe-all-ld:
+@if gcc-bootstrap
+all-ld: stage_current
+@endif gcc-bootstrap
@if ld
TARGET-ld=all
maybe-all-ld: all-ld
all-ld: configure-ld
-@endif ld
-@if ld-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif ld-bootstrap
-@if ld
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
@@ -16568,18 +20730,22 @@ all-stage1-ld: configure-stage1-ld
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
cd $(HOST_SUBDIR)/ld && \
- $(MAKE) $(FLAGS_TO_PASS) CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
$(TARGET-stage1-ld)
maybe-clean-stage1-ld: clean-stage1-ld
clean-stage1: clean-stage1-ld
clean-stage1-ld:
- @[ -f $(HOST_SUBDIR)/ld/Makefile ] || [ -f $(HOST_SUBDIR)/stage1-ld/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage1 ] || $(MAKE) stage1-start; \
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(HOST_SUBDIR)/ld/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage1-ld/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
cd $(HOST_SUBDIR)/ld && \
$(MAKE) $(FLAGS_TO_PASS) \
- CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" clean
+ clean
@endif ld-bootstrap
@@ -16598,19 +20764,23 @@ all-stage2-ld: configure-stage2-ld
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/ld && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage2-ld)
maybe-clean-stage2-ld: clean-stage2-ld
clean-stage2: clean-stage2-ld
clean-stage2-ld:
- @[ -f $(HOST_SUBDIR)/ld/Makefile ] || [ -f $(HOST_SUBDIR)/stage2-ld/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage2 ] || $(MAKE) stage2-start; \
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(HOST_SUBDIR)/ld/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage2-ld/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
cd $(HOST_SUBDIR)/ld && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif ld-bootstrap
@@ -16629,19 +20799,23 @@ all-stage3-ld: configure-stage3-ld
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/ld && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage3-ld)
maybe-clean-stage3-ld: clean-stage3-ld
clean-stage3: clean-stage3-ld
clean-stage3-ld:
- @[ -f $(HOST_SUBDIR)/ld/Makefile ] || [ -f $(HOST_SUBDIR)/stage3-ld/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage3 ] || $(MAKE) stage3-start; \
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(HOST_SUBDIR)/ld/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage3-ld/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
cd $(HOST_SUBDIR)/ld && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif ld-bootstrap
@@ -16660,19 +20834,23 @@ all-stage4-ld: configure-stage4-ld
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/ld && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage4-ld)
maybe-clean-stage4-ld: clean-stage4-ld
clean-stage4: clean-stage4-ld
clean-stage4-ld:
- @[ -f $(HOST_SUBDIR)/ld/Makefile ] || [ -f $(HOST_SUBDIR)/stage4-ld/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage4 ] || $(MAKE) stage4-start; \
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(HOST_SUBDIR)/ld/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage4-ld/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
cd $(HOST_SUBDIR)/ld && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif ld-bootstrap
@@ -16691,19 +20869,23 @@ all-stageprofile-ld: configure-stageprofile-ld
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/ld && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stageprofile-ld)
maybe-clean-stageprofile-ld: clean-stageprofile-ld
clean-stageprofile: clean-stageprofile-ld
clean-stageprofile-ld:
- @[ -f $(HOST_SUBDIR)/ld/Makefile ] || [ -f $(HOST_SUBDIR)/stageprofile-ld/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start; \
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(HOST_SUBDIR)/ld/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stageprofile-ld/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
cd $(HOST_SUBDIR)/ld && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" clean
+ clean
@endif ld-bootstrap
@@ -16722,19 +20904,23 @@ all-stagefeedback-ld: configure-stagefeedback-ld
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/ld && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-use" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stagefeedback-ld)
maybe-clean-stagefeedback-ld: clean-stagefeedback-ld
clean-stagefeedback: clean-stagefeedback-ld
clean-stagefeedback-ld:
- @[ -f $(HOST_SUBDIR)/ld/Makefile ] || [ -f $(HOST_SUBDIR)/stagefeedback-ld/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start; \
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(HOST_SUBDIR)/ld/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stagefeedback-ld/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
cd $(HOST_SUBDIR)/ld && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-use" clean
+ clean
@endif ld-bootstrap
@@ -16771,7 +20957,7 @@ install-ld: installdirs
@endif ld
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-ld info-ld
maybe-info-ld:
@@ -16823,6 +21009,31 @@ dvi-ld: \
@endif ld
+.PHONY: maybe-pdf-ld pdf-ld
+maybe-pdf-ld:
+@if ld
+maybe-pdf-ld: pdf-ld
+
+pdf-ld: \
+ configure-ld
+ @[ -f ./ld/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in ld" ; \
+ (cd $(HOST_SUBDIR)/ld && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif ld
+
.PHONY: maybe-html-ld html-ld
maybe-html-ld:
@if ld
@@ -16899,6 +21110,32 @@ install-info-ld: \
@endif ld
+.PHONY: maybe-install-pdf-ld install-pdf-ld
+maybe-install-pdf-ld:
+@if ld
+maybe-install-pdf-ld: install-pdf-ld
+
+install-pdf-ld: \
+ configure-ld \
+ pdf-ld
+ @[ -f ./ld/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in ld" ; \
+ (cd $(HOST_SUBDIR)/ld && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif ld
+
.PHONY: maybe-install-html-ld install-html-ld
maybe-install-html-ld:
@if ld
@@ -17050,14 +21287,12 @@ maintainer-clean-ld:
.PHONY: configure-libcpp maybe-configure-libcpp
maybe-configure-libcpp:
+@if gcc-bootstrap
+configure-libcpp: stage_current
+@endif gcc-bootstrap
@if libcpp
maybe-configure-libcpp: configure-libcpp
configure-libcpp:
-@endif libcpp
-@if libcpp-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif libcpp-bootstrap
-@if libcpp
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \
@@ -17073,7 +21308,8 @@ configure-libcpp:
srcdiroption="--srcdir=$${topdir}/libcpp"; \
libsrcdir="$$s/libcpp"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif libcpp
@@ -17090,6 +21326,8 @@ configure-stage1-libcpp:
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \
$(HOST_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 1 in $(HOST_SUBDIR)/libcpp ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp ; \
cd $(HOST_SUBDIR)/libcpp || exit 1; \
@@ -17101,8 +21339,10 @@ configure-stage1-libcpp:
srcdiroption="--srcdir=$${topdir}/libcpp"; \
libsrcdir="$$s/libcpp"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
- --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
@endif libcpp-bootstrap
.PHONY: configure-stage2-libcpp maybe-configure-stage2-libcpp
@@ -17117,6 +21357,8 @@ configure-stage2-libcpp:
test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 2 in $(HOST_SUBDIR)/libcpp ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp ; \
cd $(HOST_SUBDIR)/libcpp || exit 1; \
@@ -17128,7 +21370,9 @@ configure-stage2-libcpp:
srcdiroption="--srcdir=$${topdir}/libcpp"; \
libsrcdir="$$s/libcpp"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libcpp-bootstrap
@@ -17144,6 +21388,8 @@ configure-stage3-libcpp:
test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 3 in $(HOST_SUBDIR)/libcpp ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp ; \
cd $(HOST_SUBDIR)/libcpp || exit 1; \
@@ -17155,7 +21401,9 @@ configure-stage3-libcpp:
srcdiroption="--srcdir=$${topdir}/libcpp"; \
libsrcdir="$$s/libcpp"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libcpp-bootstrap
@@ -17171,6 +21419,8 @@ configure-stage4-libcpp:
test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 4 in $(HOST_SUBDIR)/libcpp ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp ; \
cd $(HOST_SUBDIR)/libcpp || exit 1; \
@@ -17182,7 +21432,9 @@ configure-stage4-libcpp:
srcdiroption="--srcdir=$${topdir}/libcpp"; \
libsrcdir="$$s/libcpp"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libcpp-bootstrap
@@ -17198,6 +21450,8 @@ configure-stageprofile-libcpp:
test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
echo Configuring stage profile in $(HOST_SUBDIR)/libcpp ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp ; \
cd $(HOST_SUBDIR)/libcpp || exit 1; \
@@ -17209,7 +21463,9 @@ configure-stageprofile-libcpp:
srcdiroption="--srcdir=$${topdir}/libcpp"; \
libsrcdir="$$s/libcpp"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libcpp-bootstrap
@@ -17225,6 +21481,8 @@ configure-stagefeedback-libcpp:
test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
echo Configuring stage feedback in $(HOST_SUBDIR)/libcpp ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp ; \
cd $(HOST_SUBDIR)/libcpp || exit 1; \
@@ -17236,7 +21494,9 @@ configure-stagefeedback-libcpp:
srcdiroption="--srcdir=$${topdir}/libcpp"; \
libsrcdir="$$s/libcpp"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libcpp-bootstrap
@@ -17246,15 +21506,13 @@ configure-stagefeedback-libcpp:
.PHONY: all-libcpp maybe-all-libcpp
maybe-all-libcpp:
+@if gcc-bootstrap
+all-libcpp: stage_current
+@endif gcc-bootstrap
@if libcpp
TARGET-libcpp=all
maybe-all-libcpp: all-libcpp
all-libcpp: configure-libcpp
-@endif libcpp
-@if libcpp-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif libcpp-bootstrap
-@if libcpp
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
@@ -17278,18 +21536,22 @@ all-stage1-libcpp: configure-stage1-libcpp
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libcpp && \
- $(MAKE) $(FLAGS_TO_PASS) CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
$(TARGET-stage1-libcpp)
maybe-clean-stage1-libcpp: clean-stage1-libcpp
clean-stage1: clean-stage1-libcpp
clean-stage1-libcpp:
- @[ -f $(HOST_SUBDIR)/libcpp/Makefile ] || [ -f $(HOST_SUBDIR)/stage1-libcpp/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage1 ] || $(MAKE) stage1-start; \
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage1-libcpp/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
cd $(HOST_SUBDIR)/libcpp && \
$(MAKE) $(FLAGS_TO_PASS) \
- CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" clean
+ clean
@endif libcpp-bootstrap
@@ -17308,19 +21570,23 @@ all-stage2-libcpp: configure-stage2-libcpp
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libcpp && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage2-libcpp)
maybe-clean-stage2-libcpp: clean-stage2-libcpp
clean-stage2: clean-stage2-libcpp
clean-stage2-libcpp:
- @[ -f $(HOST_SUBDIR)/libcpp/Makefile ] || [ -f $(HOST_SUBDIR)/stage2-libcpp/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage2 ] || $(MAKE) stage2-start; \
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage2-libcpp/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
cd $(HOST_SUBDIR)/libcpp && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif libcpp-bootstrap
@@ -17339,19 +21605,23 @@ all-stage3-libcpp: configure-stage3-libcpp
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libcpp && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage3-libcpp)
maybe-clean-stage3-libcpp: clean-stage3-libcpp
clean-stage3: clean-stage3-libcpp
clean-stage3-libcpp:
- @[ -f $(HOST_SUBDIR)/libcpp/Makefile ] || [ -f $(HOST_SUBDIR)/stage3-libcpp/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage3 ] || $(MAKE) stage3-start; \
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage3-libcpp/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
cd $(HOST_SUBDIR)/libcpp && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif libcpp-bootstrap
@@ -17370,19 +21640,23 @@ all-stage4-libcpp: configure-stage4-libcpp
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libcpp && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage4-libcpp)
maybe-clean-stage4-libcpp: clean-stage4-libcpp
clean-stage4: clean-stage4-libcpp
clean-stage4-libcpp:
- @[ -f $(HOST_SUBDIR)/libcpp/Makefile ] || [ -f $(HOST_SUBDIR)/stage4-libcpp/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage4 ] || $(MAKE) stage4-start; \
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage4-libcpp/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
cd $(HOST_SUBDIR)/libcpp && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif libcpp-bootstrap
@@ -17401,19 +21675,23 @@ all-stageprofile-libcpp: configure-stageprofile-libcpp
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libcpp && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stageprofile-libcpp)
maybe-clean-stageprofile-libcpp: clean-stageprofile-libcpp
clean-stageprofile: clean-stageprofile-libcpp
clean-stageprofile-libcpp:
- @[ -f $(HOST_SUBDIR)/libcpp/Makefile ] || [ -f $(HOST_SUBDIR)/stageprofile-libcpp/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start; \
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stageprofile-libcpp/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
cd $(HOST_SUBDIR)/libcpp && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" clean
+ clean
@endif libcpp-bootstrap
@@ -17432,19 +21710,23 @@ all-stagefeedback-libcpp: configure-stagefeedback-libcpp
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libcpp && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-use" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stagefeedback-libcpp)
maybe-clean-stagefeedback-libcpp: clean-stagefeedback-libcpp
clean-stagefeedback: clean-stagefeedback-libcpp
clean-stagefeedback-libcpp:
- @[ -f $(HOST_SUBDIR)/libcpp/Makefile ] || [ -f $(HOST_SUBDIR)/stagefeedback-libcpp/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start; \
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(HOST_SUBDIR)/libcpp/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stagefeedback-libcpp/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
cd $(HOST_SUBDIR)/libcpp && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-use" clean
+ clean
@endif libcpp-bootstrap
@@ -17481,7 +21763,7 @@ install-libcpp: installdirs
@endif libcpp
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-libcpp info-libcpp
maybe-info-libcpp:
@@ -17533,6 +21815,31 @@ dvi-libcpp: \
@endif libcpp
+.PHONY: maybe-pdf-libcpp pdf-libcpp
+maybe-pdf-libcpp:
+@if libcpp
+maybe-pdf-libcpp: pdf-libcpp
+
+pdf-libcpp: \
+ configure-libcpp
+ @[ -f ./libcpp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in libcpp" ; \
+ (cd $(HOST_SUBDIR)/libcpp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif libcpp
+
.PHONY: maybe-html-libcpp html-libcpp
maybe-html-libcpp:
@if libcpp
@@ -17609,6 +21916,32 @@ install-info-libcpp: \
@endif libcpp
+.PHONY: maybe-install-pdf-libcpp install-pdf-libcpp
+maybe-install-pdf-libcpp:
+@if libcpp
+maybe-install-pdf-libcpp: install-pdf-libcpp
+
+install-pdf-libcpp: \
+ configure-libcpp \
+ pdf-libcpp
+ @[ -f ./libcpp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in libcpp" ; \
+ (cd $(HOST_SUBDIR)/libcpp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif libcpp
+
.PHONY: maybe-install-html-libcpp install-html-libcpp
maybe-install-html-libcpp:
@if libcpp
@@ -17760,14 +22093,12 @@ maintainer-clean-libcpp:
.PHONY: configure-libdecnumber maybe-configure-libdecnumber
maybe-configure-libdecnumber:
+@if gcc-bootstrap
+configure-libdecnumber: stage_current
+@endif gcc-bootstrap
@if libdecnumber
maybe-configure-libdecnumber: configure-libdecnumber
configure-libdecnumber:
-@endif libdecnumber
-@if libdecnumber-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif libdecnumber-bootstrap
-@if libdecnumber
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \
@@ -17783,7 +22114,8 @@ configure-libdecnumber:
srcdiroption="--srcdir=$${topdir}/libdecnumber"; \
libsrcdir="$$s/libdecnumber"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif libdecnumber
@@ -17800,6 +22132,8 @@ configure-stage1-libdecnumber:
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \
$(HOST_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 1 in $(HOST_SUBDIR)/libdecnumber ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber ; \
cd $(HOST_SUBDIR)/libdecnumber || exit 1; \
@@ -17811,8 +22145,10 @@ configure-stage1-libdecnumber:
srcdiroption="--srcdir=$${topdir}/libdecnumber"; \
libsrcdir="$$s/libdecnumber"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
- --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
@endif libdecnumber-bootstrap
.PHONY: configure-stage2-libdecnumber maybe-configure-stage2-libdecnumber
@@ -17827,6 +22163,8 @@ configure-stage2-libdecnumber:
test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 2 in $(HOST_SUBDIR)/libdecnumber ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber ; \
cd $(HOST_SUBDIR)/libdecnumber || exit 1; \
@@ -17838,7 +22176,9 @@ configure-stage2-libdecnumber:
srcdiroption="--srcdir=$${topdir}/libdecnumber"; \
libsrcdir="$$s/libdecnumber"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libdecnumber-bootstrap
@@ -17854,6 +22194,8 @@ configure-stage3-libdecnumber:
test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 3 in $(HOST_SUBDIR)/libdecnumber ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber ; \
cd $(HOST_SUBDIR)/libdecnumber || exit 1; \
@@ -17865,7 +22207,9 @@ configure-stage3-libdecnumber:
srcdiroption="--srcdir=$${topdir}/libdecnumber"; \
libsrcdir="$$s/libdecnumber"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libdecnumber-bootstrap
@@ -17881,6 +22225,8 @@ configure-stage4-libdecnumber:
test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 4 in $(HOST_SUBDIR)/libdecnumber ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber ; \
cd $(HOST_SUBDIR)/libdecnumber || exit 1; \
@@ -17892,7 +22238,9 @@ configure-stage4-libdecnumber:
srcdiroption="--srcdir=$${topdir}/libdecnumber"; \
libsrcdir="$$s/libdecnumber"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libdecnumber-bootstrap
@@ -17908,6 +22256,8 @@ configure-stageprofile-libdecnumber:
test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
echo Configuring stage profile in $(HOST_SUBDIR)/libdecnumber ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber ; \
cd $(HOST_SUBDIR)/libdecnumber || exit 1; \
@@ -17919,7 +22269,9 @@ configure-stageprofile-libdecnumber:
srcdiroption="--srcdir=$${topdir}/libdecnumber"; \
libsrcdir="$$s/libdecnumber"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libdecnumber-bootstrap
@@ -17935,6 +22287,8 @@ configure-stagefeedback-libdecnumber:
test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
echo Configuring stage feedback in $(HOST_SUBDIR)/libdecnumber ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber ; \
cd $(HOST_SUBDIR)/libdecnumber || exit 1; \
@@ -17946,7 +22300,9 @@ configure-stagefeedback-libdecnumber:
srcdiroption="--srcdir=$${topdir}/libdecnumber"; \
libsrcdir="$$s/libdecnumber"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libdecnumber-bootstrap
@@ -17956,15 +22312,13 @@ configure-stagefeedback-libdecnumber:
.PHONY: all-libdecnumber maybe-all-libdecnumber
maybe-all-libdecnumber:
+@if gcc-bootstrap
+all-libdecnumber: stage_current
+@endif gcc-bootstrap
@if libdecnumber
TARGET-libdecnumber=all
maybe-all-libdecnumber: all-libdecnumber
all-libdecnumber: configure-libdecnumber
-@endif libdecnumber
-@if libdecnumber-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif libdecnumber-bootstrap
-@if libdecnumber
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
@@ -17988,18 +22342,22 @@ all-stage1-libdecnumber: configure-stage1-libdecnumber
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libdecnumber && \
- $(MAKE) $(FLAGS_TO_PASS) CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
$(TARGET-stage1-libdecnumber)
maybe-clean-stage1-libdecnumber: clean-stage1-libdecnumber
clean-stage1: clean-stage1-libdecnumber
clean-stage1-libdecnumber:
- @[ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || [ -f $(HOST_SUBDIR)/stage1-libdecnumber/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage1 ] || $(MAKE) stage1-start; \
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage1-libdecnumber/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
cd $(HOST_SUBDIR)/libdecnumber && \
$(MAKE) $(FLAGS_TO_PASS) \
- CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" clean
+ clean
@endif libdecnumber-bootstrap
@@ -18018,19 +22376,23 @@ all-stage2-libdecnumber: configure-stage2-libdecnumber
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libdecnumber && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage2-libdecnumber)
maybe-clean-stage2-libdecnumber: clean-stage2-libdecnumber
clean-stage2: clean-stage2-libdecnumber
clean-stage2-libdecnumber:
- @[ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || [ -f $(HOST_SUBDIR)/stage2-libdecnumber/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage2 ] || $(MAKE) stage2-start; \
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage2-libdecnumber/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
cd $(HOST_SUBDIR)/libdecnumber && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif libdecnumber-bootstrap
@@ -18049,19 +22411,23 @@ all-stage3-libdecnumber: configure-stage3-libdecnumber
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libdecnumber && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage3-libdecnumber)
maybe-clean-stage3-libdecnumber: clean-stage3-libdecnumber
clean-stage3: clean-stage3-libdecnumber
clean-stage3-libdecnumber:
- @[ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || [ -f $(HOST_SUBDIR)/stage3-libdecnumber/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage3 ] || $(MAKE) stage3-start; \
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage3-libdecnumber/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
cd $(HOST_SUBDIR)/libdecnumber && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif libdecnumber-bootstrap
@@ -18080,19 +22446,23 @@ all-stage4-libdecnumber: configure-stage4-libdecnumber
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libdecnumber && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage4-libdecnumber)
maybe-clean-stage4-libdecnumber: clean-stage4-libdecnumber
clean-stage4: clean-stage4-libdecnumber
clean-stage4-libdecnumber:
- @[ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || [ -f $(HOST_SUBDIR)/stage4-libdecnumber/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage4 ] || $(MAKE) stage4-start; \
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage4-libdecnumber/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
cd $(HOST_SUBDIR)/libdecnumber && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif libdecnumber-bootstrap
@@ -18111,19 +22481,23 @@ all-stageprofile-libdecnumber: configure-stageprofile-libdecnumber
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libdecnumber && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stageprofile-libdecnumber)
maybe-clean-stageprofile-libdecnumber: clean-stageprofile-libdecnumber
clean-stageprofile: clean-stageprofile-libdecnumber
clean-stageprofile-libdecnumber:
- @[ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || [ -f $(HOST_SUBDIR)/stageprofile-libdecnumber/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start; \
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stageprofile-libdecnumber/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
cd $(HOST_SUBDIR)/libdecnumber && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" clean
+ clean
@endif libdecnumber-bootstrap
@@ -18142,19 +22516,23 @@ all-stagefeedback-libdecnumber: configure-stagefeedback-libdecnumber
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libdecnumber && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-use" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stagefeedback-libdecnumber)
maybe-clean-stagefeedback-libdecnumber: clean-stagefeedback-libdecnumber
clean-stagefeedback: clean-stagefeedback-libdecnumber
clean-stagefeedback-libdecnumber:
- @[ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || [ -f $(HOST_SUBDIR)/stagefeedback-libdecnumber/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start; \
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(HOST_SUBDIR)/libdecnumber/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stagefeedback-libdecnumber/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
cd $(HOST_SUBDIR)/libdecnumber && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-use" clean
+ clean
@endif libdecnumber-bootstrap
@@ -18191,7 +22569,7 @@ install-libdecnumber: installdirs
@endif libdecnumber
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-libdecnumber info-libdecnumber
maybe-info-libdecnumber:
@@ -18243,6 +22621,31 @@ dvi-libdecnumber: \
@endif libdecnumber
+.PHONY: maybe-pdf-libdecnumber pdf-libdecnumber
+maybe-pdf-libdecnumber:
+@if libdecnumber
+maybe-pdf-libdecnumber: pdf-libdecnumber
+
+pdf-libdecnumber: \
+ configure-libdecnumber
+ @[ -f ./libdecnumber/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in libdecnumber" ; \
+ (cd $(HOST_SUBDIR)/libdecnumber && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif libdecnumber
+
.PHONY: maybe-html-libdecnumber html-libdecnumber
maybe-html-libdecnumber:
@if libdecnumber
@@ -18319,6 +22722,32 @@ install-info-libdecnumber: \
@endif libdecnumber
+.PHONY: maybe-install-pdf-libdecnumber install-pdf-libdecnumber
+maybe-install-pdf-libdecnumber:
+@if libdecnumber
+maybe-install-pdf-libdecnumber: install-pdf-libdecnumber
+
+install-pdf-libdecnumber: \
+ configure-libdecnumber \
+ pdf-libdecnumber
+ @[ -f ./libdecnumber/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in libdecnumber" ; \
+ (cd $(HOST_SUBDIR)/libdecnumber && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif libdecnumber
+
.PHONY: maybe-install-html-libdecnumber install-html-libdecnumber
maybe-install-html-libdecnumber:
@if libdecnumber
@@ -18470,6 +22899,9 @@ maintainer-clean-libdecnumber:
.PHONY: configure-libgui maybe-configure-libgui
maybe-configure-libgui:
+@if gcc-bootstrap
+configure-libgui: stage_current
+@endif gcc-bootstrap
@if libgui
maybe-configure-libgui: configure-libgui
configure-libgui:
@@ -18489,7 +22921,8 @@ configure-libgui:
srcdiroption="--srcdir=$${topdir}/libgui"; \
libsrcdir="$$s/libgui"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif libgui
@@ -18499,6 +22932,9 @@ configure-libgui:
.PHONY: all-libgui maybe-all-libgui
maybe-all-libgui:
+@if gcc-bootstrap
+all-libgui: stage_current
+@endif gcc-bootstrap
@if libgui
TARGET-libgui=all
maybe-all-libgui: all-libgui
@@ -18544,7 +22980,7 @@ install-libgui: installdirs
@endif libgui
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-libgui info-libgui
maybe-info-libgui:
@@ -18598,6 +23034,32 @@ dvi-libgui: \
@endif libgui
+.PHONY: maybe-pdf-libgui pdf-libgui
+maybe-pdf-libgui:
+@if libgui
+maybe-pdf-libgui: pdf-libgui
+
+pdf-libgui: \
+ configure-libgui
+ @: $(MAKE); $(unstage)
+ @[ -f ./libgui/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in libgui" ; \
+ (cd $(HOST_SUBDIR)/libgui && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif libgui
+
.PHONY: maybe-html-libgui html-libgui
maybe-html-libgui:
@if libgui
@@ -18677,6 +23139,33 @@ install-info-libgui: \
@endif libgui
+.PHONY: maybe-install-pdf-libgui install-pdf-libgui
+maybe-install-pdf-libgui:
+@if libgui
+maybe-install-pdf-libgui: install-pdf-libgui
+
+install-pdf-libgui: \
+ configure-libgui \
+ pdf-libgui
+ @: $(MAKE); $(unstage)
+ @[ -f ./libgui/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in libgui" ; \
+ (cd $(HOST_SUBDIR)/libgui && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif libgui
+
.PHONY: maybe-install-html-libgui install-html-libgui
maybe-install-html-libgui:
@if libgui
@@ -18834,14 +23323,12 @@ maintainer-clean-libgui:
.PHONY: configure-libiberty maybe-configure-libiberty
maybe-configure-libiberty:
+@if gcc-bootstrap
+configure-libiberty: stage_current
+@endif gcc-bootstrap
@if libiberty
maybe-configure-libiberty: configure-libiberty
configure-libiberty:
-@endif libiberty
-@if libiberty-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif libiberty-bootstrap
-@if libiberty
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \
@@ -18857,7 +23344,8 @@ configure-libiberty:
srcdiroption="--srcdir=$${topdir}/libiberty"; \
libsrcdir="$$s/libiberty"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif libiberty
@@ -18874,6 +23362,8 @@ configure-stage1-libiberty:
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \
$(HOST_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 1 in $(HOST_SUBDIR)/libiberty ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty ; \
cd $(HOST_SUBDIR)/libiberty || exit 1; \
@@ -18885,8 +23375,10 @@ configure-stage1-libiberty:
srcdiroption="--srcdir=$${topdir}/libiberty"; \
libsrcdir="$$s/libiberty"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
- --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
@endif libiberty-bootstrap
.PHONY: configure-stage2-libiberty maybe-configure-stage2-libiberty
@@ -18901,6 +23393,8 @@ configure-stage2-libiberty:
test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 2 in $(HOST_SUBDIR)/libiberty ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty ; \
cd $(HOST_SUBDIR)/libiberty || exit 1; \
@@ -18912,7 +23406,9 @@ configure-stage2-libiberty:
srcdiroption="--srcdir=$${topdir}/libiberty"; \
libsrcdir="$$s/libiberty"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libiberty-bootstrap
@@ -18928,6 +23424,8 @@ configure-stage3-libiberty:
test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 3 in $(HOST_SUBDIR)/libiberty ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty ; \
cd $(HOST_SUBDIR)/libiberty || exit 1; \
@@ -18939,7 +23437,9 @@ configure-stage3-libiberty:
srcdiroption="--srcdir=$${topdir}/libiberty"; \
libsrcdir="$$s/libiberty"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libiberty-bootstrap
@@ -18955,6 +23455,8 @@ configure-stage4-libiberty:
test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 4 in $(HOST_SUBDIR)/libiberty ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty ; \
cd $(HOST_SUBDIR)/libiberty || exit 1; \
@@ -18966,7 +23468,9 @@ configure-stage4-libiberty:
srcdiroption="--srcdir=$${topdir}/libiberty"; \
libsrcdir="$$s/libiberty"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libiberty-bootstrap
@@ -18982,6 +23486,8 @@ configure-stageprofile-libiberty:
test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
echo Configuring stage profile in $(HOST_SUBDIR)/libiberty ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty ; \
cd $(HOST_SUBDIR)/libiberty || exit 1; \
@@ -18993,7 +23499,9 @@ configure-stageprofile-libiberty:
srcdiroption="--srcdir=$${topdir}/libiberty"; \
libsrcdir="$$s/libiberty"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libiberty-bootstrap
@@ -19009,6 +23517,8 @@ configure-stagefeedback-libiberty:
test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
echo Configuring stage feedback in $(HOST_SUBDIR)/libiberty ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty ; \
cd $(HOST_SUBDIR)/libiberty || exit 1; \
@@ -19020,7 +23530,9 @@ configure-stagefeedback-libiberty:
srcdiroption="--srcdir=$${topdir}/libiberty"; \
libsrcdir="$$s/libiberty"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif libiberty-bootstrap
@@ -19030,15 +23542,13 @@ configure-stagefeedback-libiberty:
.PHONY: all-libiberty maybe-all-libiberty
maybe-all-libiberty:
+@if gcc-bootstrap
+all-libiberty: stage_current
+@endif gcc-bootstrap
@if libiberty
TARGET-libiberty=all
maybe-all-libiberty: all-libiberty
all-libiberty: configure-libiberty
-@endif libiberty
-@if libiberty-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif libiberty-bootstrap
-@if libiberty
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
@@ -19062,18 +23572,22 @@ all-stage1-libiberty: configure-stage1-libiberty
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libiberty && \
- $(MAKE) $(FLAGS_TO_PASS) CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
$(TARGET-stage1-libiberty)
maybe-clean-stage1-libiberty: clean-stage1-libiberty
clean-stage1: clean-stage1-libiberty
clean-stage1-libiberty:
- @[ -f $(HOST_SUBDIR)/libiberty/Makefile ] || [ -f $(HOST_SUBDIR)/stage1-libiberty/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage1 ] || $(MAKE) stage1-start; \
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage1-libiberty/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
cd $(HOST_SUBDIR)/libiberty && \
$(MAKE) $(FLAGS_TO_PASS) \
- CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" clean
+ clean
@endif libiberty-bootstrap
@@ -19092,19 +23606,23 @@ all-stage2-libiberty: configure-stage2-libiberty
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libiberty && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage2-libiberty)
maybe-clean-stage2-libiberty: clean-stage2-libiberty
clean-stage2: clean-stage2-libiberty
clean-stage2-libiberty:
- @[ -f $(HOST_SUBDIR)/libiberty/Makefile ] || [ -f $(HOST_SUBDIR)/stage2-libiberty/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage2 ] || $(MAKE) stage2-start; \
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage2-libiberty/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
cd $(HOST_SUBDIR)/libiberty && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif libiberty-bootstrap
@@ -19123,19 +23641,23 @@ all-stage3-libiberty: configure-stage3-libiberty
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libiberty && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage3-libiberty)
maybe-clean-stage3-libiberty: clean-stage3-libiberty
clean-stage3: clean-stage3-libiberty
clean-stage3-libiberty:
- @[ -f $(HOST_SUBDIR)/libiberty/Makefile ] || [ -f $(HOST_SUBDIR)/stage3-libiberty/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage3 ] || $(MAKE) stage3-start; \
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage3-libiberty/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
cd $(HOST_SUBDIR)/libiberty && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif libiberty-bootstrap
@@ -19154,19 +23676,23 @@ all-stage4-libiberty: configure-stage4-libiberty
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libiberty && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage4-libiberty)
maybe-clean-stage4-libiberty: clean-stage4-libiberty
clean-stage4: clean-stage4-libiberty
clean-stage4-libiberty:
- @[ -f $(HOST_SUBDIR)/libiberty/Makefile ] || [ -f $(HOST_SUBDIR)/stage4-libiberty/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage4 ] || $(MAKE) stage4-start; \
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage4-libiberty/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
cd $(HOST_SUBDIR)/libiberty && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif libiberty-bootstrap
@@ -19185,19 +23711,23 @@ all-stageprofile-libiberty: configure-stageprofile-libiberty
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libiberty && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stageprofile-libiberty)
maybe-clean-stageprofile-libiberty: clean-stageprofile-libiberty
clean-stageprofile: clean-stageprofile-libiberty
clean-stageprofile-libiberty:
- @[ -f $(HOST_SUBDIR)/libiberty/Makefile ] || [ -f $(HOST_SUBDIR)/stageprofile-libiberty/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start; \
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stageprofile-libiberty/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
cd $(HOST_SUBDIR)/libiberty && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" clean
+ clean
@endif libiberty-bootstrap
@@ -19216,19 +23746,23 @@ all-stagefeedback-libiberty: configure-stagefeedback-libiberty
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libiberty && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-use" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stagefeedback-libiberty)
maybe-clean-stagefeedback-libiberty: clean-stagefeedback-libiberty
clean-stagefeedback: clean-stagefeedback-libiberty
clean-stagefeedback-libiberty:
- @[ -f $(HOST_SUBDIR)/libiberty/Makefile ] || [ -f $(HOST_SUBDIR)/stagefeedback-libiberty/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start; \
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(HOST_SUBDIR)/libiberty/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stagefeedback-libiberty/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
cd $(HOST_SUBDIR)/libiberty && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-use" clean
+ clean
@endif libiberty-bootstrap
@@ -19265,7 +23799,7 @@ install-libiberty: installdirs
@endif libiberty
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-libiberty info-libiberty
maybe-info-libiberty:
@@ -19317,6 +23851,31 @@ dvi-libiberty: \
@endif libiberty
+.PHONY: maybe-pdf-libiberty pdf-libiberty
+maybe-pdf-libiberty:
+@if libiberty
+maybe-pdf-libiberty: pdf-libiberty
+
+pdf-libiberty: \
+ configure-libiberty
+ @[ -f ./libiberty/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in libiberty" ; \
+ (cd $(HOST_SUBDIR)/libiberty && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif libiberty
+
.PHONY: maybe-html-libiberty html-libiberty
maybe-html-libiberty:
@if libiberty
@@ -19393,6 +23952,32 @@ install-info-libiberty: \
@endif libiberty
+.PHONY: maybe-install-pdf-libiberty install-pdf-libiberty
+maybe-install-pdf-libiberty:
+@if libiberty
+maybe-install-pdf-libiberty: install-pdf-libiberty
+
+install-pdf-libiberty: \
+ configure-libiberty \
+ pdf-libiberty
+ @[ -f ./libiberty/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in libiberty" ; \
+ (cd $(HOST_SUBDIR)/libiberty && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif libiberty
+
.PHONY: maybe-install-html-libiberty install-html-libiberty
maybe-install-html-libiberty:
@if libiberty
@@ -19544,6 +24129,9 @@ maintainer-clean-libiberty:
.PHONY: configure-libtool maybe-configure-libtool
maybe-configure-libtool:
+@if gcc-bootstrap
+configure-libtool: stage_current
+@endif gcc-bootstrap
@if libtool
maybe-configure-libtool: configure-libtool
configure-libtool:
@@ -19563,7 +24151,8 @@ configure-libtool:
srcdiroption="--srcdir=$${topdir}/libtool"; \
libsrcdir="$$s/libtool"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif libtool
@@ -19573,6 +24162,9 @@ configure-libtool:
.PHONY: all-libtool maybe-all-libtool
maybe-all-libtool:
+@if gcc-bootstrap
+all-libtool: stage_current
+@endif gcc-bootstrap
@if libtool
TARGET-libtool=all
maybe-all-libtool: all-libtool
@@ -19618,7 +24210,7 @@ install-libtool: installdirs
@endif libtool
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-libtool info-libtool
maybe-info-libtool:
@@ -19672,6 +24264,32 @@ dvi-libtool: \
@endif libtool
+.PHONY: maybe-pdf-libtool pdf-libtool
+maybe-pdf-libtool:
+@if libtool
+maybe-pdf-libtool: pdf-libtool
+
+pdf-libtool: \
+ configure-libtool
+ @: $(MAKE); $(unstage)
+ @[ -f ./libtool/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in libtool" ; \
+ (cd $(HOST_SUBDIR)/libtool && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif libtool
+
.PHONY: maybe-html-libtool html-libtool
maybe-html-libtool:
@if libtool
@@ -19751,6 +24369,33 @@ install-info-libtool: \
@endif libtool
+.PHONY: maybe-install-pdf-libtool install-pdf-libtool
+maybe-install-pdf-libtool:
+@if libtool
+maybe-install-pdf-libtool: install-pdf-libtool
+
+install-pdf-libtool: \
+ configure-libtool \
+ pdf-libtool
+ @: $(MAKE); $(unstage)
+ @[ -f ./libtool/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in libtool" ; \
+ (cd $(HOST_SUBDIR)/libtool && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif libtool
+
.PHONY: maybe-install-html-libtool install-html-libtool
maybe-install-html-libtool:
@if libtool
@@ -19908,6 +24553,9 @@ maintainer-clean-libtool:
.PHONY: configure-m4 maybe-configure-m4
maybe-configure-m4:
+@if gcc-bootstrap
+configure-m4: stage_current
+@endif gcc-bootstrap
@if m4
maybe-configure-m4: configure-m4
configure-m4:
@@ -19927,7 +24575,8 @@ configure-m4:
srcdiroption="--srcdir=$${topdir}/m4"; \
libsrcdir="$$s/m4"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif m4
@@ -19937,6 +24586,9 @@ configure-m4:
.PHONY: all-m4 maybe-all-m4
maybe-all-m4:
+@if gcc-bootstrap
+all-m4: stage_current
+@endif gcc-bootstrap
@if m4
TARGET-m4=all
maybe-all-m4: all-m4
@@ -19982,7 +24634,7 @@ install-m4: installdirs
@endif m4
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-m4 info-m4
maybe-info-m4:
@@ -20036,6 +24688,32 @@ dvi-m4: \
@endif m4
+.PHONY: maybe-pdf-m4 pdf-m4
+maybe-pdf-m4:
+@if m4
+maybe-pdf-m4: pdf-m4
+
+pdf-m4: \
+ configure-m4
+ @: $(MAKE); $(unstage)
+ @[ -f ./m4/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in m4" ; \
+ (cd $(HOST_SUBDIR)/m4 && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif m4
+
.PHONY: maybe-html-m4 html-m4
maybe-html-m4:
@if m4
@@ -20115,6 +24793,33 @@ install-info-m4: \
@endif m4
+.PHONY: maybe-install-pdf-m4 install-pdf-m4
+maybe-install-pdf-m4:
+@if m4
+maybe-install-pdf-m4: install-pdf-m4
+
+install-pdf-m4: \
+ configure-m4 \
+ pdf-m4
+ @: $(MAKE); $(unstage)
+ @[ -f ./m4/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in m4" ; \
+ (cd $(HOST_SUBDIR)/m4 && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif m4
+
.PHONY: maybe-install-html-m4 install-html-m4
maybe-install-html-m4:
@if m4
@@ -20272,6 +24977,9 @@ maintainer-clean-m4:
.PHONY: configure-make maybe-configure-make
maybe-configure-make:
+@if gcc-bootstrap
+configure-make: stage_current
+@endif gcc-bootstrap
@if make
maybe-configure-make: configure-make
configure-make:
@@ -20291,7 +24999,8 @@ configure-make:
srcdiroption="--srcdir=$${topdir}/make"; \
libsrcdir="$$s/make"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif make
@@ -20301,6 +25010,9 @@ configure-make:
.PHONY: all-make maybe-all-make
maybe-all-make:
+@if gcc-bootstrap
+all-make: stage_current
+@endif gcc-bootstrap
@if make
TARGET-make=all
maybe-all-make: all-make
@@ -20346,7 +25058,7 @@ install-make: installdirs
@endif make
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-make info-make
maybe-info-make:
@@ -20400,6 +25112,32 @@ dvi-make: \
@endif make
+.PHONY: maybe-pdf-make pdf-make
+maybe-pdf-make:
+@if make
+maybe-pdf-make: pdf-make
+
+pdf-make: \
+ configure-make
+ @: $(MAKE); $(unstage)
+ @[ -f ./make/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in make" ; \
+ (cd $(HOST_SUBDIR)/make && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif make
+
.PHONY: maybe-html-make html-make
maybe-html-make:
@if make
@@ -20479,6 +25217,33 @@ install-info-make: \
@endif make
+.PHONY: maybe-install-pdf-make install-pdf-make
+maybe-install-pdf-make:
+@if make
+maybe-install-pdf-make: install-pdf-make
+
+install-pdf-make: \
+ configure-make \
+ pdf-make
+ @: $(MAKE); $(unstage)
+ @[ -f ./make/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in make" ; \
+ (cd $(HOST_SUBDIR)/make && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif make
+
.PHONY: maybe-install-html-make install-html-make
maybe-install-html-make:
@if make
@@ -20636,6 +25401,9 @@ maintainer-clean-make:
.PHONY: configure-mmalloc maybe-configure-mmalloc
maybe-configure-mmalloc:
+@if gcc-bootstrap
+configure-mmalloc: stage_current
+@endif gcc-bootstrap
@if mmalloc
maybe-configure-mmalloc: configure-mmalloc
configure-mmalloc:
@@ -20655,7 +25423,8 @@ configure-mmalloc:
srcdiroption="--srcdir=$${topdir}/mmalloc"; \
libsrcdir="$$s/mmalloc"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif mmalloc
@@ -20665,6 +25434,9 @@ configure-mmalloc:
.PHONY: all-mmalloc maybe-all-mmalloc
maybe-all-mmalloc:
+@if gcc-bootstrap
+all-mmalloc: stage_current
+@endif gcc-bootstrap
@if mmalloc
TARGET-mmalloc=all
maybe-all-mmalloc: all-mmalloc
@@ -20704,7 +25476,7 @@ install-mmalloc: installdirs
@endif mmalloc
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-mmalloc info-mmalloc
maybe-info-mmalloc:
@@ -20758,6 +25530,32 @@ dvi-mmalloc: \
@endif mmalloc
+.PHONY: maybe-pdf-mmalloc pdf-mmalloc
+maybe-pdf-mmalloc:
+@if mmalloc
+maybe-pdf-mmalloc: pdf-mmalloc
+
+pdf-mmalloc: \
+ configure-mmalloc
+ @: $(MAKE); $(unstage)
+ @[ -f ./mmalloc/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in mmalloc" ; \
+ (cd $(HOST_SUBDIR)/mmalloc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif mmalloc
+
.PHONY: maybe-html-mmalloc html-mmalloc
maybe-html-mmalloc:
@if mmalloc
@@ -20837,6 +25635,33 @@ install-info-mmalloc: \
@endif mmalloc
+.PHONY: maybe-install-pdf-mmalloc install-pdf-mmalloc
+maybe-install-pdf-mmalloc:
+@if mmalloc
+maybe-install-pdf-mmalloc: install-pdf-mmalloc
+
+install-pdf-mmalloc: \
+ configure-mmalloc \
+ pdf-mmalloc
+ @: $(MAKE); $(unstage)
+ @[ -f ./mmalloc/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in mmalloc" ; \
+ (cd $(HOST_SUBDIR)/mmalloc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif mmalloc
+
.PHONY: maybe-install-html-mmalloc install-html-mmalloc
maybe-install-html-mmalloc:
@if mmalloc
@@ -20994,6 +25819,9 @@ maintainer-clean-mmalloc:
.PHONY: configure-patch maybe-configure-patch
maybe-configure-patch:
+@if gcc-bootstrap
+configure-patch: stage_current
+@endif gcc-bootstrap
@if patch
maybe-configure-patch: configure-patch
configure-patch:
@@ -21013,7 +25841,8 @@ configure-patch:
srcdiroption="--srcdir=$${topdir}/patch"; \
libsrcdir="$$s/patch"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif patch
@@ -21023,6 +25852,9 @@ configure-patch:
.PHONY: all-patch maybe-all-patch
maybe-all-patch:
+@if gcc-bootstrap
+all-patch: stage_current
+@endif gcc-bootstrap
@if patch
TARGET-patch=all
maybe-all-patch: all-patch
@@ -21068,7 +25900,7 @@ install-patch: installdirs
@endif patch
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-patch info-patch
maybe-info-patch:
@@ -21122,6 +25954,32 @@ dvi-patch: \
@endif patch
+.PHONY: maybe-pdf-patch pdf-patch
+maybe-pdf-patch:
+@if patch
+maybe-pdf-patch: pdf-patch
+
+pdf-patch: \
+ configure-patch
+ @: $(MAKE); $(unstage)
+ @[ -f ./patch/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in patch" ; \
+ (cd $(HOST_SUBDIR)/patch && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif patch
+
.PHONY: maybe-html-patch html-patch
maybe-html-patch:
@if patch
@@ -21201,6 +26059,33 @@ install-info-patch: \
@endif patch
+.PHONY: maybe-install-pdf-patch install-pdf-patch
+maybe-install-pdf-patch:
+@if patch
+maybe-install-pdf-patch: install-pdf-patch
+
+install-pdf-patch: \
+ configure-patch \
+ pdf-patch
+ @: $(MAKE); $(unstage)
+ @[ -f ./patch/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in patch" ; \
+ (cd $(HOST_SUBDIR)/patch && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif patch
+
.PHONY: maybe-install-html-patch install-html-patch
maybe-install-html-patch:
@if patch
@@ -21358,6 +26243,9 @@ maintainer-clean-patch:
.PHONY: configure-perl maybe-configure-perl
maybe-configure-perl:
+@if gcc-bootstrap
+configure-perl: stage_current
+@endif gcc-bootstrap
@if perl
maybe-configure-perl: configure-perl
configure-perl:
@@ -21377,7 +26265,8 @@ configure-perl:
srcdiroption="--srcdir=$${topdir}/perl"; \
libsrcdir="$$s/perl"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif perl
@@ -21387,6 +26276,9 @@ configure-perl:
.PHONY: all-perl maybe-all-perl
maybe-all-perl:
+@if gcc-bootstrap
+all-perl: stage_current
+@endif gcc-bootstrap
@if perl
TARGET-perl=all
maybe-all-perl: all-perl
@@ -21432,7 +26324,7 @@ install-perl: installdirs
@endif perl
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-perl info-perl
maybe-info-perl:
@@ -21486,6 +26378,32 @@ dvi-perl: \
@endif perl
+.PHONY: maybe-pdf-perl pdf-perl
+maybe-pdf-perl:
+@if perl
+maybe-pdf-perl: pdf-perl
+
+pdf-perl: \
+ configure-perl
+ @: $(MAKE); $(unstage)
+ @[ -f ./perl/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in perl" ; \
+ (cd $(HOST_SUBDIR)/perl && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif perl
+
.PHONY: maybe-html-perl html-perl
maybe-html-perl:
@if perl
@@ -21565,6 +26483,33 @@ install-info-perl: \
@endif perl
+.PHONY: maybe-install-pdf-perl install-pdf-perl
+maybe-install-pdf-perl:
+@if perl
+maybe-install-pdf-perl: install-pdf-perl
+
+install-pdf-perl: \
+ configure-perl \
+ pdf-perl
+ @: $(MAKE); $(unstage)
+ @[ -f ./perl/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in perl" ; \
+ (cd $(HOST_SUBDIR)/perl && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif perl
+
.PHONY: maybe-install-html-perl install-html-perl
maybe-install-html-perl:
@if perl
@@ -21722,6 +26667,9 @@ maintainer-clean-perl:
.PHONY: configure-prms maybe-configure-prms
maybe-configure-prms:
+@if gcc-bootstrap
+configure-prms: stage_current
+@endif gcc-bootstrap
@if prms
maybe-configure-prms: configure-prms
configure-prms:
@@ -21741,7 +26689,8 @@ configure-prms:
srcdiroption="--srcdir=$${topdir}/prms"; \
libsrcdir="$$s/prms"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif prms
@@ -21751,6 +26700,9 @@ configure-prms:
.PHONY: all-prms maybe-all-prms
maybe-all-prms:
+@if gcc-bootstrap
+all-prms: stage_current
+@endif gcc-bootstrap
@if prms
TARGET-prms=all
maybe-all-prms: all-prms
@@ -21796,7 +26748,7 @@ install-prms: installdirs
@endif prms
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-prms info-prms
maybe-info-prms:
@@ -21850,6 +26802,32 @@ dvi-prms: \
@endif prms
+.PHONY: maybe-pdf-prms pdf-prms
+maybe-pdf-prms:
+@if prms
+maybe-pdf-prms: pdf-prms
+
+pdf-prms: \
+ configure-prms
+ @: $(MAKE); $(unstage)
+ @[ -f ./prms/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in prms" ; \
+ (cd $(HOST_SUBDIR)/prms && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif prms
+
.PHONY: maybe-html-prms html-prms
maybe-html-prms:
@if prms
@@ -21929,6 +26907,33 @@ install-info-prms: \
@endif prms
+.PHONY: maybe-install-pdf-prms install-pdf-prms
+maybe-install-pdf-prms:
+@if prms
+maybe-install-pdf-prms: install-pdf-prms
+
+install-pdf-prms: \
+ configure-prms \
+ pdf-prms
+ @: $(MAKE); $(unstage)
+ @[ -f ./prms/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in prms" ; \
+ (cd $(HOST_SUBDIR)/prms && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif prms
+
.PHONY: maybe-install-html-prms install-html-prms
maybe-install-html-prms:
@if prms
@@ -22086,6 +27091,9 @@ maintainer-clean-prms:
.PHONY: configure-rcs maybe-configure-rcs
maybe-configure-rcs:
+@if gcc-bootstrap
+configure-rcs: stage_current
+@endif gcc-bootstrap
@if rcs
maybe-configure-rcs: configure-rcs
configure-rcs:
@@ -22105,7 +27113,8 @@ configure-rcs:
srcdiroption="--srcdir=$${topdir}/rcs"; \
libsrcdir="$$s/rcs"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif rcs
@@ -22115,6 +27124,9 @@ configure-rcs:
.PHONY: all-rcs maybe-all-rcs
maybe-all-rcs:
+@if gcc-bootstrap
+all-rcs: stage_current
+@endif gcc-bootstrap
@if rcs
TARGET-rcs=all
maybe-all-rcs: all-rcs
@@ -22160,7 +27172,7 @@ install-rcs: installdirs
@endif rcs
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-rcs info-rcs
maybe-info-rcs:
@@ -22214,6 +27226,32 @@ dvi-rcs: \
@endif rcs
+.PHONY: maybe-pdf-rcs pdf-rcs
+maybe-pdf-rcs:
+@if rcs
+maybe-pdf-rcs: pdf-rcs
+
+pdf-rcs: \
+ configure-rcs
+ @: $(MAKE); $(unstage)
+ @[ -f ./rcs/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in rcs" ; \
+ (cd $(HOST_SUBDIR)/rcs && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif rcs
+
.PHONY: maybe-html-rcs html-rcs
maybe-html-rcs:
@if rcs
@@ -22293,6 +27331,33 @@ install-info-rcs: \
@endif rcs
+.PHONY: maybe-install-pdf-rcs install-pdf-rcs
+maybe-install-pdf-rcs:
+@if rcs
+maybe-install-pdf-rcs: install-pdf-rcs
+
+install-pdf-rcs: \
+ configure-rcs \
+ pdf-rcs
+ @: $(MAKE); $(unstage)
+ @[ -f ./rcs/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in rcs" ; \
+ (cd $(HOST_SUBDIR)/rcs && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif rcs
+
.PHONY: maybe-install-html-rcs install-html-rcs
maybe-install-html-rcs:
@if rcs
@@ -22450,6 +27515,9 @@ maintainer-clean-rcs:
.PHONY: configure-readline maybe-configure-readline
maybe-configure-readline:
+@if gcc-bootstrap
+configure-readline: stage_current
+@endif gcc-bootstrap
@if readline
maybe-configure-readline: configure-readline
configure-readline:
@@ -22469,7 +27537,8 @@ configure-readline:
srcdiroption="--srcdir=$${topdir}/readline"; \
libsrcdir="$$s/readline"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif readline
@@ -22479,6 +27548,9 @@ configure-readline:
.PHONY: all-readline maybe-all-readline
maybe-all-readline:
+@if gcc-bootstrap
+all-readline: stage_current
+@endif gcc-bootstrap
@if readline
TARGET-readline=all
maybe-all-readline: all-readline
@@ -22524,7 +27596,7 @@ install-readline: installdirs
@endif readline
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-readline info-readline
maybe-info-readline:
@@ -22578,6 +27650,32 @@ dvi-readline: \
@endif readline
+.PHONY: maybe-pdf-readline pdf-readline
+maybe-pdf-readline:
+@if readline
+maybe-pdf-readline: pdf-readline
+
+pdf-readline: \
+ configure-readline
+ @: $(MAKE); $(unstage)
+ @[ -f ./readline/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in readline" ; \
+ (cd $(HOST_SUBDIR)/readline && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif readline
+
.PHONY: maybe-html-readline html-readline
maybe-html-readline:
@if readline
@@ -22657,6 +27755,33 @@ install-info-readline: \
@endif readline
+.PHONY: maybe-install-pdf-readline install-pdf-readline
+maybe-install-pdf-readline:
+@if readline
+maybe-install-pdf-readline: install-pdf-readline
+
+install-pdf-readline: \
+ configure-readline \
+ pdf-readline
+ @: $(MAKE); $(unstage)
+ @[ -f ./readline/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in readline" ; \
+ (cd $(HOST_SUBDIR)/readline && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif readline
+
.PHONY: maybe-install-html-readline install-html-readline
maybe-install-html-readline:
@if readline
@@ -22814,6 +27939,9 @@ maintainer-clean-readline:
.PHONY: configure-release maybe-configure-release
maybe-configure-release:
+@if gcc-bootstrap
+configure-release: stage_current
+@endif gcc-bootstrap
@if release
maybe-configure-release: configure-release
configure-release:
@@ -22833,7 +27961,8 @@ configure-release:
srcdiroption="--srcdir=$${topdir}/release"; \
libsrcdir="$$s/release"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif release
@@ -22843,6 +27972,9 @@ configure-release:
.PHONY: all-release maybe-all-release
maybe-all-release:
+@if gcc-bootstrap
+all-release: stage_current
+@endif gcc-bootstrap
@if release
TARGET-release=all
maybe-all-release: all-release
@@ -22876,7 +28008,7 @@ install-release:
@endif release
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-release info-release
maybe-info-release:
@@ -22930,6 +28062,32 @@ dvi-release: \
@endif release
+.PHONY: maybe-pdf-release pdf-release
+maybe-pdf-release:
+@if release
+maybe-pdf-release: pdf-release
+
+pdf-release: \
+ configure-release
+ @: $(MAKE); $(unstage)
+ @[ -f ./release/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in release" ; \
+ (cd $(HOST_SUBDIR)/release && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif release
+
.PHONY: maybe-html-release html-release
maybe-html-release:
@if release
@@ -23009,6 +28167,33 @@ install-info-release: \
@endif release
+.PHONY: maybe-install-pdf-release install-pdf-release
+maybe-install-pdf-release:
+@if release
+maybe-install-pdf-release: install-pdf-release
+
+install-pdf-release: \
+ configure-release \
+ pdf-release
+ @: $(MAKE); $(unstage)
+ @[ -f ./release/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in release" ; \
+ (cd $(HOST_SUBDIR)/release && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif release
+
.PHONY: maybe-install-html-release install-html-release
maybe-install-html-release:
@if release
@@ -23166,6 +28351,9 @@ maintainer-clean-release:
.PHONY: configure-recode maybe-configure-recode
maybe-configure-recode:
+@if gcc-bootstrap
+configure-recode: stage_current
+@endif gcc-bootstrap
@if recode
maybe-configure-recode: configure-recode
configure-recode:
@@ -23185,7 +28373,8 @@ configure-recode:
srcdiroption="--srcdir=$${topdir}/recode"; \
libsrcdir="$$s/recode"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif recode
@@ -23195,6 +28384,9 @@ configure-recode:
.PHONY: all-recode maybe-all-recode
maybe-all-recode:
+@if gcc-bootstrap
+all-recode: stage_current
+@endif gcc-bootstrap
@if recode
TARGET-recode=all
maybe-all-recode: all-recode
@@ -23240,7 +28432,7 @@ install-recode: installdirs
@endif recode
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-recode info-recode
maybe-info-recode:
@@ -23294,6 +28486,32 @@ dvi-recode: \
@endif recode
+.PHONY: maybe-pdf-recode pdf-recode
+maybe-pdf-recode:
+@if recode
+maybe-pdf-recode: pdf-recode
+
+pdf-recode: \
+ configure-recode
+ @: $(MAKE); $(unstage)
+ @[ -f ./recode/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in recode" ; \
+ (cd $(HOST_SUBDIR)/recode && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif recode
+
.PHONY: maybe-html-recode html-recode
maybe-html-recode:
@if recode
@@ -23373,6 +28591,33 @@ install-info-recode: \
@endif recode
+.PHONY: maybe-install-pdf-recode install-pdf-recode
+maybe-install-pdf-recode:
+@if recode
+maybe-install-pdf-recode: install-pdf-recode
+
+install-pdf-recode: \
+ configure-recode \
+ pdf-recode
+ @: $(MAKE); $(unstage)
+ @[ -f ./recode/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in recode" ; \
+ (cd $(HOST_SUBDIR)/recode && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif recode
+
.PHONY: maybe-install-html-recode install-html-recode
maybe-install-html-recode:
@if recode
@@ -23530,6 +28775,9 @@ maintainer-clean-recode:
.PHONY: configure-sed maybe-configure-sed
maybe-configure-sed:
+@if gcc-bootstrap
+configure-sed: stage_current
+@endif gcc-bootstrap
@if sed
maybe-configure-sed: configure-sed
configure-sed:
@@ -23549,7 +28797,8 @@ configure-sed:
srcdiroption="--srcdir=$${topdir}/sed"; \
libsrcdir="$$s/sed"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif sed
@@ -23559,6 +28808,9 @@ configure-sed:
.PHONY: all-sed maybe-all-sed
maybe-all-sed:
+@if gcc-bootstrap
+all-sed: stage_current
+@endif gcc-bootstrap
@if sed
TARGET-sed=all
maybe-all-sed: all-sed
@@ -23604,7 +28856,7 @@ install-sed: installdirs
@endif sed
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-sed info-sed
maybe-info-sed:
@@ -23658,6 +28910,32 @@ dvi-sed: \
@endif sed
+.PHONY: maybe-pdf-sed pdf-sed
+maybe-pdf-sed:
+@if sed
+maybe-pdf-sed: pdf-sed
+
+pdf-sed: \
+ configure-sed
+ @: $(MAKE); $(unstage)
+ @[ -f ./sed/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in sed" ; \
+ (cd $(HOST_SUBDIR)/sed && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif sed
+
.PHONY: maybe-html-sed html-sed
maybe-html-sed:
@if sed
@@ -23737,6 +29015,33 @@ install-info-sed: \
@endif sed
+.PHONY: maybe-install-pdf-sed install-pdf-sed
+maybe-install-pdf-sed:
+@if sed
+maybe-install-pdf-sed: install-pdf-sed
+
+install-pdf-sed: \
+ configure-sed \
+ pdf-sed
+ @: $(MAKE); $(unstage)
+ @[ -f ./sed/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in sed" ; \
+ (cd $(HOST_SUBDIR)/sed && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif sed
+
.PHONY: maybe-install-html-sed install-html-sed
maybe-install-html-sed:
@if sed
@@ -23894,6 +29199,9 @@ maintainer-clean-sed:
.PHONY: configure-send-pr maybe-configure-send-pr
maybe-configure-send-pr:
+@if gcc-bootstrap
+configure-send-pr: stage_current
+@endif gcc-bootstrap
@if send-pr
maybe-configure-send-pr: configure-send-pr
configure-send-pr:
@@ -23913,7 +29221,8 @@ configure-send-pr:
srcdiroption="--srcdir=$${topdir}/send-pr"; \
libsrcdir="$$s/send-pr"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif send-pr
@@ -23923,6 +29232,9 @@ configure-send-pr:
.PHONY: all-send-pr maybe-all-send-pr
maybe-all-send-pr:
+@if gcc-bootstrap
+all-send-pr: stage_current
+@endif gcc-bootstrap
@if send-pr
TARGET-send-pr=all
maybe-all-send-pr: all-send-pr
@@ -23968,7 +29280,7 @@ install-send-pr: installdirs
@endif send-pr
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-send-pr info-send-pr
maybe-info-send-pr:
@@ -24022,6 +29334,32 @@ dvi-send-pr: \
@endif send-pr
+.PHONY: maybe-pdf-send-pr pdf-send-pr
+maybe-pdf-send-pr:
+@if send-pr
+maybe-pdf-send-pr: pdf-send-pr
+
+pdf-send-pr: \
+ configure-send-pr
+ @: $(MAKE); $(unstage)
+ @[ -f ./send-pr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in send-pr" ; \
+ (cd $(HOST_SUBDIR)/send-pr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif send-pr
+
.PHONY: maybe-html-send-pr html-send-pr
maybe-html-send-pr:
@if send-pr
@@ -24101,6 +29439,33 @@ install-info-send-pr: \
@endif send-pr
+.PHONY: maybe-install-pdf-send-pr install-pdf-send-pr
+maybe-install-pdf-send-pr:
+@if send-pr
+maybe-install-pdf-send-pr: install-pdf-send-pr
+
+install-pdf-send-pr: \
+ configure-send-pr \
+ pdf-send-pr
+ @: $(MAKE); $(unstage)
+ @[ -f ./send-pr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in send-pr" ; \
+ (cd $(HOST_SUBDIR)/send-pr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif send-pr
+
.PHONY: maybe-install-html-send-pr install-html-send-pr
maybe-install-html-send-pr:
@if send-pr
@@ -24258,6 +29623,9 @@ maintainer-clean-send-pr:
.PHONY: configure-shellutils maybe-configure-shellutils
maybe-configure-shellutils:
+@if gcc-bootstrap
+configure-shellutils: stage_current
+@endif gcc-bootstrap
@if shellutils
maybe-configure-shellutils: configure-shellutils
configure-shellutils:
@@ -24277,7 +29645,8 @@ configure-shellutils:
srcdiroption="--srcdir=$${topdir}/shellutils"; \
libsrcdir="$$s/shellutils"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif shellutils
@@ -24287,6 +29656,9 @@ configure-shellutils:
.PHONY: all-shellutils maybe-all-shellutils
maybe-all-shellutils:
+@if gcc-bootstrap
+all-shellutils: stage_current
+@endif gcc-bootstrap
@if shellutils
TARGET-shellutils=all
maybe-all-shellutils: all-shellutils
@@ -24332,7 +29704,7 @@ install-shellutils: installdirs
@endif shellutils
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-shellutils info-shellutils
maybe-info-shellutils:
@@ -24386,6 +29758,32 @@ dvi-shellutils: \
@endif shellutils
+.PHONY: maybe-pdf-shellutils pdf-shellutils
+maybe-pdf-shellutils:
+@if shellutils
+maybe-pdf-shellutils: pdf-shellutils
+
+pdf-shellutils: \
+ configure-shellutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./shellutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in shellutils" ; \
+ (cd $(HOST_SUBDIR)/shellutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif shellutils
+
.PHONY: maybe-html-shellutils html-shellutils
maybe-html-shellutils:
@if shellutils
@@ -24465,6 +29863,33 @@ install-info-shellutils: \
@endif shellutils
+.PHONY: maybe-install-pdf-shellutils install-pdf-shellutils
+maybe-install-pdf-shellutils:
+@if shellutils
+maybe-install-pdf-shellutils: install-pdf-shellutils
+
+install-pdf-shellutils: \
+ configure-shellutils \
+ pdf-shellutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./shellutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in shellutils" ; \
+ (cd $(HOST_SUBDIR)/shellutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif shellutils
+
.PHONY: maybe-install-html-shellutils install-html-shellutils
maybe-install-html-shellutils:
@if shellutils
@@ -24622,6 +30047,9 @@ maintainer-clean-shellutils:
.PHONY: configure-sid maybe-configure-sid
maybe-configure-sid:
+@if gcc-bootstrap
+configure-sid: stage_current
+@endif gcc-bootstrap
@if sid
maybe-configure-sid: configure-sid
configure-sid:
@@ -24641,7 +30069,8 @@ configure-sid:
srcdiroption="--srcdir=$${topdir}/sid"; \
libsrcdir="$$s/sid"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif sid
@@ -24651,6 +30080,9 @@ configure-sid:
.PHONY: all-sid maybe-all-sid
maybe-all-sid:
+@if gcc-bootstrap
+all-sid: stage_current
+@endif gcc-bootstrap
@if sid
TARGET-sid=all
maybe-all-sid: all-sid
@@ -24696,7 +30128,7 @@ install-sid: installdirs
@endif sid
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-sid info-sid
maybe-info-sid:
@@ -24750,6 +30182,32 @@ dvi-sid: \
@endif sid
+.PHONY: maybe-pdf-sid pdf-sid
+maybe-pdf-sid:
+@if sid
+maybe-pdf-sid: pdf-sid
+
+pdf-sid: \
+ configure-sid
+ @: $(MAKE); $(unstage)
+ @[ -f ./sid/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in sid" ; \
+ (cd $(HOST_SUBDIR)/sid && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif sid
+
.PHONY: maybe-html-sid html-sid
maybe-html-sid:
@if sid
@@ -24829,6 +30287,33 @@ install-info-sid: \
@endif sid
+.PHONY: maybe-install-pdf-sid install-pdf-sid
+maybe-install-pdf-sid:
+@if sid
+maybe-install-pdf-sid: install-pdf-sid
+
+install-pdf-sid: \
+ configure-sid \
+ pdf-sid
+ @: $(MAKE); $(unstage)
+ @[ -f ./sid/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in sid" ; \
+ (cd $(HOST_SUBDIR)/sid && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif sid
+
.PHONY: maybe-install-html-sid install-html-sid
maybe-install-html-sid:
@if sid
@@ -24986,6 +30471,9 @@ maintainer-clean-sid:
.PHONY: configure-sim maybe-configure-sim
maybe-configure-sim:
+@if gcc-bootstrap
+configure-sim: stage_current
+@endif gcc-bootstrap
@if sim
maybe-configure-sim: configure-sim
configure-sim:
@@ -25005,7 +30493,8 @@ configure-sim:
srcdiroption="--srcdir=$${topdir}/sim"; \
libsrcdir="$$s/sim"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif sim
@@ -25015,6 +30504,9 @@ configure-sim:
.PHONY: all-sim maybe-all-sim
maybe-all-sim:
+@if gcc-bootstrap
+all-sim: stage_current
+@endif gcc-bootstrap
@if sim
TARGET-sim=all
maybe-all-sim: all-sim
@@ -25060,7 +30552,7 @@ install-sim: installdirs
@endif sim
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-sim info-sim
maybe-info-sim:
@@ -25114,6 +30606,32 @@ dvi-sim: \
@endif sim
+.PHONY: maybe-pdf-sim pdf-sim
+maybe-pdf-sim:
+@if sim
+maybe-pdf-sim: pdf-sim
+
+pdf-sim: \
+ configure-sim
+ @: $(MAKE); $(unstage)
+ @[ -f ./sim/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in sim" ; \
+ (cd $(HOST_SUBDIR)/sim && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif sim
+
.PHONY: maybe-html-sim html-sim
maybe-html-sim:
@if sim
@@ -25193,6 +30711,33 @@ install-info-sim: \
@endif sim
+.PHONY: maybe-install-pdf-sim install-pdf-sim
+maybe-install-pdf-sim:
+@if sim
+maybe-install-pdf-sim: install-pdf-sim
+
+install-pdf-sim: \
+ configure-sim \
+ pdf-sim
+ @: $(MAKE); $(unstage)
+ @[ -f ./sim/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in sim" ; \
+ (cd $(HOST_SUBDIR)/sim && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif sim
+
.PHONY: maybe-install-html-sim install-html-sim
maybe-install-html-sim:
@if sim
@@ -25350,6 +30895,9 @@ maintainer-clean-sim:
.PHONY: configure-tar maybe-configure-tar
maybe-configure-tar:
+@if gcc-bootstrap
+configure-tar: stage_current
+@endif gcc-bootstrap
@if tar
maybe-configure-tar: configure-tar
configure-tar:
@@ -25369,7 +30917,8 @@ configure-tar:
srcdiroption="--srcdir=$${topdir}/tar"; \
libsrcdir="$$s/tar"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif tar
@@ -25379,6 +30928,9 @@ configure-tar:
.PHONY: all-tar maybe-all-tar
maybe-all-tar:
+@if gcc-bootstrap
+all-tar: stage_current
+@endif gcc-bootstrap
@if tar
TARGET-tar=all
maybe-all-tar: all-tar
@@ -25424,7 +30976,7 @@ install-tar: installdirs
@endif tar
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-tar info-tar
maybe-info-tar:
@@ -25478,6 +31030,32 @@ dvi-tar: \
@endif tar
+.PHONY: maybe-pdf-tar pdf-tar
+maybe-pdf-tar:
+@if tar
+maybe-pdf-tar: pdf-tar
+
+pdf-tar: \
+ configure-tar
+ @: $(MAKE); $(unstage)
+ @[ -f ./tar/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in tar" ; \
+ (cd $(HOST_SUBDIR)/tar && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif tar
+
.PHONY: maybe-html-tar html-tar
maybe-html-tar:
@if tar
@@ -25557,6 +31135,33 @@ install-info-tar: \
@endif tar
+.PHONY: maybe-install-pdf-tar install-pdf-tar
+maybe-install-pdf-tar:
+@if tar
+maybe-install-pdf-tar: install-pdf-tar
+
+install-pdf-tar: \
+ configure-tar \
+ pdf-tar
+ @: $(MAKE); $(unstage)
+ @[ -f ./tar/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in tar" ; \
+ (cd $(HOST_SUBDIR)/tar && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif tar
+
.PHONY: maybe-install-html-tar install-html-tar
maybe-install-html-tar:
@if tar
@@ -25714,6 +31319,9 @@ maintainer-clean-tar:
.PHONY: configure-texinfo maybe-configure-texinfo
maybe-configure-texinfo:
+@if gcc-bootstrap
+configure-texinfo: stage_current
+@endif gcc-bootstrap
@if texinfo
maybe-configure-texinfo: configure-texinfo
configure-texinfo:
@@ -25733,7 +31341,8 @@ configure-texinfo:
srcdiroption="--srcdir=$${topdir}/texinfo"; \
libsrcdir="$$s/texinfo"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif texinfo
@@ -25743,6 +31352,9 @@ configure-texinfo:
.PHONY: all-texinfo maybe-all-texinfo
maybe-all-texinfo:
+@if gcc-bootstrap
+all-texinfo: stage_current
+@endif gcc-bootstrap
@if texinfo
TARGET-texinfo=all
maybe-all-texinfo: all-texinfo
@@ -25782,7 +31394,7 @@ install-texinfo:
@endif texinfo
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-texinfo info-texinfo
maybe-info-texinfo:
@@ -25836,6 +31448,32 @@ dvi-texinfo: \
@endif texinfo
+.PHONY: maybe-pdf-texinfo pdf-texinfo
+maybe-pdf-texinfo:
+@if texinfo
+maybe-pdf-texinfo: pdf-texinfo
+
+pdf-texinfo: \
+ configure-texinfo
+ @: $(MAKE); $(unstage)
+ @[ -f ./texinfo/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in texinfo" ; \
+ (cd $(HOST_SUBDIR)/texinfo && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif texinfo
+
.PHONY: maybe-html-texinfo html-texinfo
maybe-html-texinfo:
@if texinfo
@@ -25915,6 +31553,33 @@ install-info-texinfo: \
@endif texinfo
+.PHONY: maybe-install-pdf-texinfo install-pdf-texinfo
+maybe-install-pdf-texinfo:
+@if texinfo
+maybe-install-pdf-texinfo: install-pdf-texinfo
+
+install-pdf-texinfo: \
+ configure-texinfo \
+ pdf-texinfo
+ @: $(MAKE); $(unstage)
+ @[ -f ./texinfo/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in texinfo" ; \
+ (cd $(HOST_SUBDIR)/texinfo && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif texinfo
+
.PHONY: maybe-install-html-texinfo install-html-texinfo
maybe-install-html-texinfo:
@if texinfo
@@ -26072,6 +31737,9 @@ maintainer-clean-texinfo:
.PHONY: configure-textutils maybe-configure-textutils
maybe-configure-textutils:
+@if gcc-bootstrap
+configure-textutils: stage_current
+@endif gcc-bootstrap
@if textutils
maybe-configure-textutils: configure-textutils
configure-textutils:
@@ -26091,7 +31759,8 @@ configure-textutils:
srcdiroption="--srcdir=$${topdir}/textutils"; \
libsrcdir="$$s/textutils"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif textutils
@@ -26101,6 +31770,9 @@ configure-textutils:
.PHONY: all-textutils maybe-all-textutils
maybe-all-textutils:
+@if gcc-bootstrap
+all-textutils: stage_current
+@endif gcc-bootstrap
@if textutils
TARGET-textutils=all
maybe-all-textutils: all-textutils
@@ -26146,7 +31818,7 @@ install-textutils: installdirs
@endif textutils
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-textutils info-textutils
maybe-info-textutils:
@@ -26200,6 +31872,32 @@ dvi-textutils: \
@endif textutils
+.PHONY: maybe-pdf-textutils pdf-textutils
+maybe-pdf-textutils:
+@if textutils
+maybe-pdf-textutils: pdf-textutils
+
+pdf-textutils: \
+ configure-textutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./textutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in textutils" ; \
+ (cd $(HOST_SUBDIR)/textutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif textutils
+
.PHONY: maybe-html-textutils html-textutils
maybe-html-textutils:
@if textutils
@@ -26279,6 +31977,33 @@ install-info-textutils: \
@endif textutils
+.PHONY: maybe-install-pdf-textutils install-pdf-textutils
+maybe-install-pdf-textutils:
+@if textutils
+maybe-install-pdf-textutils: install-pdf-textutils
+
+install-pdf-textutils: \
+ configure-textutils \
+ pdf-textutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./textutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in textutils" ; \
+ (cd $(HOST_SUBDIR)/textutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif textutils
+
.PHONY: maybe-install-html-textutils install-html-textutils
maybe-install-html-textutils:
@if textutils
@@ -26436,6 +32161,9 @@ maintainer-clean-textutils:
.PHONY: configure-time maybe-configure-time
maybe-configure-time:
+@if gcc-bootstrap
+configure-time: stage_current
+@endif gcc-bootstrap
@if time
maybe-configure-time: configure-time
configure-time:
@@ -26455,7 +32183,8 @@ configure-time:
srcdiroption="--srcdir=$${topdir}/time"; \
libsrcdir="$$s/time"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif time
@@ -26465,6 +32194,9 @@ configure-time:
.PHONY: all-time maybe-all-time
maybe-all-time:
+@if gcc-bootstrap
+all-time: stage_current
+@endif gcc-bootstrap
@if time
TARGET-time=all
maybe-all-time: all-time
@@ -26510,7 +32242,7 @@ install-time: installdirs
@endif time
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-time info-time
maybe-info-time:
@@ -26564,6 +32296,32 @@ dvi-time: \
@endif time
+.PHONY: maybe-pdf-time pdf-time
+maybe-pdf-time:
+@if time
+maybe-pdf-time: pdf-time
+
+pdf-time: \
+ configure-time
+ @: $(MAKE); $(unstage)
+ @[ -f ./time/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in time" ; \
+ (cd $(HOST_SUBDIR)/time && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif time
+
.PHONY: maybe-html-time html-time
maybe-html-time:
@if time
@@ -26643,6 +32401,33 @@ install-info-time: \
@endif time
+.PHONY: maybe-install-pdf-time install-pdf-time
+maybe-install-pdf-time:
+@if time
+maybe-install-pdf-time: install-pdf-time
+
+install-pdf-time: \
+ configure-time \
+ pdf-time
+ @: $(MAKE); $(unstage)
+ @[ -f ./time/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in time" ; \
+ (cd $(HOST_SUBDIR)/time && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif time
+
.PHONY: maybe-install-html-time install-html-time
maybe-install-html-time:
@if time
@@ -26800,6 +32585,9 @@ maintainer-clean-time:
.PHONY: configure-uudecode maybe-configure-uudecode
maybe-configure-uudecode:
+@if gcc-bootstrap
+configure-uudecode: stage_current
+@endif gcc-bootstrap
@if uudecode
maybe-configure-uudecode: configure-uudecode
configure-uudecode:
@@ -26819,7 +32607,8 @@ configure-uudecode:
srcdiroption="--srcdir=$${topdir}/uudecode"; \
libsrcdir="$$s/uudecode"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif uudecode
@@ -26829,6 +32618,9 @@ configure-uudecode:
.PHONY: all-uudecode maybe-all-uudecode
maybe-all-uudecode:
+@if gcc-bootstrap
+all-uudecode: stage_current
+@endif gcc-bootstrap
@if uudecode
TARGET-uudecode=all
maybe-all-uudecode: all-uudecode
@@ -26874,7 +32666,7 @@ install-uudecode: installdirs
@endif uudecode
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-uudecode info-uudecode
maybe-info-uudecode:
@@ -26928,6 +32720,32 @@ dvi-uudecode: \
@endif uudecode
+.PHONY: maybe-pdf-uudecode pdf-uudecode
+maybe-pdf-uudecode:
+@if uudecode
+maybe-pdf-uudecode: pdf-uudecode
+
+pdf-uudecode: \
+ configure-uudecode
+ @: $(MAKE); $(unstage)
+ @[ -f ./uudecode/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in uudecode" ; \
+ (cd $(HOST_SUBDIR)/uudecode && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif uudecode
+
.PHONY: maybe-html-uudecode html-uudecode
maybe-html-uudecode:
@if uudecode
@@ -27007,6 +32825,33 @@ install-info-uudecode: \
@endif uudecode
+.PHONY: maybe-install-pdf-uudecode install-pdf-uudecode
+maybe-install-pdf-uudecode:
+@if uudecode
+maybe-install-pdf-uudecode: install-pdf-uudecode
+
+install-pdf-uudecode: \
+ configure-uudecode \
+ pdf-uudecode
+ @: $(MAKE); $(unstage)
+ @[ -f ./uudecode/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in uudecode" ; \
+ (cd $(HOST_SUBDIR)/uudecode && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif uudecode
+
.PHONY: maybe-install-html-uudecode install-html-uudecode
maybe-install-html-uudecode:
@if uudecode
@@ -27164,6 +33009,9 @@ maintainer-clean-uudecode:
.PHONY: configure-wdiff maybe-configure-wdiff
maybe-configure-wdiff:
+@if gcc-bootstrap
+configure-wdiff: stage_current
+@endif gcc-bootstrap
@if wdiff
maybe-configure-wdiff: configure-wdiff
configure-wdiff:
@@ -27183,7 +33031,8 @@ configure-wdiff:
srcdiroption="--srcdir=$${topdir}/wdiff"; \
libsrcdir="$$s/wdiff"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif wdiff
@@ -27193,6 +33042,9 @@ configure-wdiff:
.PHONY: all-wdiff maybe-all-wdiff
maybe-all-wdiff:
+@if gcc-bootstrap
+all-wdiff: stage_current
+@endif gcc-bootstrap
@if wdiff
TARGET-wdiff=all
maybe-all-wdiff: all-wdiff
@@ -27238,7 +33090,7 @@ install-wdiff: installdirs
@endif wdiff
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-wdiff info-wdiff
maybe-info-wdiff:
@@ -27292,6 +33144,32 @@ dvi-wdiff: \
@endif wdiff
+.PHONY: maybe-pdf-wdiff pdf-wdiff
+maybe-pdf-wdiff:
+@if wdiff
+maybe-pdf-wdiff: pdf-wdiff
+
+pdf-wdiff: \
+ configure-wdiff
+ @: $(MAKE); $(unstage)
+ @[ -f ./wdiff/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in wdiff" ; \
+ (cd $(HOST_SUBDIR)/wdiff && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif wdiff
+
.PHONY: maybe-html-wdiff html-wdiff
maybe-html-wdiff:
@if wdiff
@@ -27371,6 +33249,33 @@ install-info-wdiff: \
@endif wdiff
+.PHONY: maybe-install-pdf-wdiff install-pdf-wdiff
+maybe-install-pdf-wdiff:
+@if wdiff
+maybe-install-pdf-wdiff: install-pdf-wdiff
+
+install-pdf-wdiff: \
+ configure-wdiff \
+ pdf-wdiff
+ @: $(MAKE); $(unstage)
+ @[ -f ./wdiff/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in wdiff" ; \
+ (cd $(HOST_SUBDIR)/wdiff && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif wdiff
+
.PHONY: maybe-install-html-wdiff install-html-wdiff
maybe-install-html-wdiff:
@if wdiff
@@ -27528,6 +33433,9 @@ maintainer-clean-wdiff:
.PHONY: configure-zip maybe-configure-zip
maybe-configure-zip:
+@if gcc-bootstrap
+configure-zip: stage_current
+@endif gcc-bootstrap
@if zip
maybe-configure-zip: configure-zip
configure-zip:
@@ -27547,7 +33455,8 @@ configure-zip:
srcdiroption="--srcdir=$${topdir}/zip"; \
libsrcdir="$$s/zip"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif zip
@@ -27557,6 +33466,9 @@ configure-zip:
.PHONY: all-zip maybe-all-zip
maybe-all-zip:
+@if gcc-bootstrap
+all-zip: stage_current
+@endif gcc-bootstrap
@if zip
TARGET-zip=all
maybe-all-zip: all-zip
@@ -27605,7 +33517,7 @@ install-zip: installdirs
@endif zip
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-zip info-zip
maybe-info-zip:
@@ -27659,6 +33571,32 @@ dvi-zip: \
@endif zip
+.PHONY: maybe-pdf-zip pdf-zip
+maybe-pdf-zip:
+@if zip
+maybe-pdf-zip: pdf-zip
+
+pdf-zip: \
+ configure-zip
+ @: $(MAKE); $(unstage)
+ @[ -f ./zip/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in zip" ; \
+ (cd $(HOST_SUBDIR)/zip && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif zip
+
.PHONY: maybe-html-zip html-zip
maybe-html-zip:
@if zip
@@ -27738,6 +33676,33 @@ install-info-zip: \
@endif zip
+.PHONY: maybe-install-pdf-zip install-pdf-zip
+maybe-install-pdf-zip:
+@if zip
+maybe-install-pdf-zip: install-pdf-zip
+
+install-pdf-zip: \
+ configure-zip \
+ pdf-zip
+ @: $(MAKE); $(unstage)
+ @[ -f ./zip/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in zip" ; \
+ (cd $(HOST_SUBDIR)/zip && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif zip
+
.PHONY: maybe-install-html-zip install-html-zip
maybe-install-html-zip:
@if zip
@@ -27895,14 +33860,12 @@ maintainer-clean-zip:
.PHONY: configure-zlib maybe-configure-zlib
maybe-configure-zlib:
+@if gcc-bootstrap
+configure-zlib: stage_current
+@endif gcc-bootstrap
@if zlib
maybe-configure-zlib: configure-zlib
configure-zlib:
-@endif zlib
-@if zlib-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif zlib-bootstrap
-@if zlib
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \
@@ -27918,7 +33881,8 @@ configure-zlib:
srcdiroption="--srcdir=$${topdir}/zlib"; \
libsrcdir="$$s/zlib"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif zlib
@@ -27935,6 +33899,8 @@ configure-stage1-zlib:
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \
$(HOST_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 1 in $(HOST_SUBDIR)/zlib ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib ; \
cd $(HOST_SUBDIR)/zlib || exit 1; \
@@ -27946,8 +33912,10 @@ configure-stage1-zlib:
srcdiroption="--srcdir=$${topdir}/zlib"; \
libsrcdir="$$s/zlib"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
- --disable-intermodule --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
@endif zlib-bootstrap
.PHONY: configure-stage2-zlib maybe-configure-stage2-zlib
@@ -27962,6 +33930,8 @@ configure-stage2-zlib:
test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 2 in $(HOST_SUBDIR)/zlib ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib ; \
cd $(HOST_SUBDIR)/zlib || exit 1; \
@@ -27973,7 +33943,9 @@ configure-stage2-zlib:
srcdiroption="--srcdir=$${topdir}/zlib"; \
libsrcdir="$$s/zlib"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif zlib-bootstrap
@@ -27989,6 +33961,8 @@ configure-stage3-zlib:
test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 3 in $(HOST_SUBDIR)/zlib ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib ; \
cd $(HOST_SUBDIR)/zlib || exit 1; \
@@ -28000,7 +33974,9 @@ configure-stage3-zlib:
srcdiroption="--srcdir=$${topdir}/zlib"; \
libsrcdir="$$s/zlib"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif zlib-bootstrap
@@ -28016,6 +33992,8 @@ configure-stage4-zlib:
test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
echo Configuring stage 4 in $(HOST_SUBDIR)/zlib ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib ; \
cd $(HOST_SUBDIR)/zlib || exit 1; \
@@ -28027,7 +34005,9 @@ configure-stage4-zlib:
srcdiroption="--srcdir=$${topdir}/zlib"; \
libsrcdir="$$s/zlib"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif zlib-bootstrap
@@ -28043,6 +34023,8 @@ configure-stageprofile-zlib:
test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
echo Configuring stage profile in $(HOST_SUBDIR)/zlib ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib ; \
cd $(HOST_SUBDIR)/zlib || exit 1; \
@@ -28054,7 +34036,9 @@ configure-stageprofile-zlib:
srcdiroption="--srcdir=$${topdir}/zlib"; \
libsrcdir="$$s/zlib"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif zlib-bootstrap
@@ -28070,6 +34054,8 @@ configure-stagefeedback-zlib:
test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
echo Configuring stage feedback in $(HOST_SUBDIR)/zlib ; \
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib ; \
cd $(HOST_SUBDIR)/zlib || exit 1; \
@@ -28081,7 +34067,9 @@ configure-stagefeedback-zlib:
srcdiroption="--srcdir=$${topdir}/zlib"; \
libsrcdir="$$s/zlib"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
@stage2_werror_flag@
@endif zlib-bootstrap
@@ -28091,15 +34079,13 @@ configure-stagefeedback-zlib:
.PHONY: all-zlib maybe-all-zlib
maybe-all-zlib:
+@if gcc-bootstrap
+all-zlib: stage_current
+@endif gcc-bootstrap
@if zlib
TARGET-zlib=all
maybe-all-zlib: all-zlib
all-zlib: configure-zlib
-@endif zlib
-@if zlib-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif zlib-bootstrap
-@if zlib
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
@@ -28123,18 +34109,22 @@ all-stage1-zlib: configure-stage1-zlib
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
cd $(HOST_SUBDIR)/zlib && \
- $(MAKE) $(FLAGS_TO_PASS) CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
$(TARGET-stage1-zlib)
maybe-clean-stage1-zlib: clean-stage1-zlib
clean-stage1: clean-stage1-zlib
clean-stage1-zlib:
- @[ -f $(HOST_SUBDIR)/zlib/Makefile ] || [ -f $(HOST_SUBDIR)/stage1-zlib/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage1 ] || $(MAKE) stage1-start; \
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage1-zlib/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
cd $(HOST_SUBDIR)/zlib && \
$(MAKE) $(FLAGS_TO_PASS) \
- CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" clean
+ clean
@endif zlib-bootstrap
@@ -28153,19 +34143,23 @@ all-stage2-zlib: configure-stage2-zlib
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/zlib && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage2-zlib)
maybe-clean-stage2-zlib: clean-stage2-zlib
clean-stage2: clean-stage2-zlib
clean-stage2-zlib:
- @[ -f $(HOST_SUBDIR)/zlib/Makefile ] || [ -f $(HOST_SUBDIR)/stage2-zlib/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage2 ] || $(MAKE) stage2-start; \
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage2-zlib/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
cd $(HOST_SUBDIR)/zlib && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif zlib-bootstrap
@@ -28184,19 +34178,23 @@ all-stage3-zlib: configure-stage3-zlib
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/zlib && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage3-zlib)
maybe-clean-stage3-zlib: clean-stage3-zlib
clean-stage3: clean-stage3-zlib
clean-stage3-zlib:
- @[ -f $(HOST_SUBDIR)/zlib/Makefile ] || [ -f $(HOST_SUBDIR)/stage3-zlib/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage3 ] || $(MAKE) stage3-start; \
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage3-zlib/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
cd $(HOST_SUBDIR)/zlib && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif zlib-bootstrap
@@ -28215,19 +34213,23 @@ all-stage4-zlib: configure-stage4-zlib
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/zlib && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stage4-zlib)
maybe-clean-stage4-zlib: clean-stage4-zlib
clean-stage4: clean-stage4-zlib
clean-stage4-zlib:
- @[ -f $(HOST_SUBDIR)/zlib/Makefile ] || [ -f $(HOST_SUBDIR)/stage4-zlib/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage4 ] || $(MAKE) stage4-start; \
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stage4-zlib/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
cd $(HOST_SUBDIR)/zlib && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- clean
+ clean
@endif zlib-bootstrap
@@ -28246,19 +34248,23 @@ all-stageprofile-zlib: configure-stageprofile-zlib
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/zlib && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stageprofile-zlib)
maybe-clean-stageprofile-zlib: clean-stageprofile-zlib
clean-stageprofile: clean-stageprofile-zlib
clean-stageprofile-zlib:
- @[ -f $(HOST_SUBDIR)/zlib/Makefile ] || [ -f $(HOST_SUBDIR)/stageprofile-zlib/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start; \
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stageprofile-zlib/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
cd $(HOST_SUBDIR)/zlib && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" clean
+ clean
@endif zlib-bootstrap
@@ -28277,19 +34283,23 @@ all-stagefeedback-zlib: configure-stagefeedback-zlib
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/zlib && \
- $(MAKE) $(FLAGS_TO_PASS) $(POSTSTAGE1_FLAGS_TO_PASS) CFLAGS="$(BOOT_CFLAGS) -fprofile-use" \
+ $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \
$(TARGET-stagefeedback-zlib)
maybe-clean-stagefeedback-zlib: clean-stagefeedback-zlib
clean-stagefeedback: clean-stagefeedback-zlib
clean-stagefeedback-zlib:
- @[ -f $(HOST_SUBDIR)/zlib/Makefile ] || [ -f $(HOST_SUBDIR)/stagefeedback-zlib/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start; \
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(HOST_SUBDIR)/zlib/Makefile ] || exit 0; \
+ else \
+ [ -f $(HOST_SUBDIR)/stagefeedback-zlib/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
cd $(HOST_SUBDIR)/zlib && \
$(MAKE) $(FLAGS_TO_PASS) \
$(POSTSTAGE1_FLAGS_TO_PASS) \
- CFLAGS="$(BOOT_CFLAGS) -fprofile-use" clean
+ clean
@endif zlib-bootstrap
@@ -28314,7 +34324,7 @@ install-zlib:
@endif zlib
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-zlib info-zlib
maybe-info-zlib:
@@ -28366,6 +34376,31 @@ dvi-zlib: \
@endif zlib
+.PHONY: maybe-pdf-zlib pdf-zlib
+maybe-pdf-zlib:
+@if zlib
+maybe-pdf-zlib: pdf-zlib
+
+pdf-zlib: \
+ configure-zlib
+ @[ -f ./zlib/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in zlib" ; \
+ (cd $(HOST_SUBDIR)/zlib && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif zlib
+
.PHONY: maybe-html-zlib html-zlib
maybe-html-zlib:
@if zlib
@@ -28442,6 +34477,32 @@ install-info-zlib: \
@endif zlib
+.PHONY: maybe-install-pdf-zlib install-pdf-zlib
+maybe-install-pdf-zlib:
+@if zlib
+maybe-install-pdf-zlib: install-pdf-zlib
+
+install-pdf-zlib: \
+ configure-zlib \
+ pdf-zlib
+ @[ -f ./zlib/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in zlib" ; \
+ (cd $(HOST_SUBDIR)/zlib && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif zlib
+
.PHONY: maybe-install-html-zlib install-html-zlib
maybe-install-html-zlib:
@if zlib
@@ -28593,6 +34654,9 @@ maintainer-clean-zlib:
.PHONY: configure-gdb maybe-configure-gdb
maybe-configure-gdb:
+@if gcc-bootstrap
+configure-gdb: stage_current
+@endif gcc-bootstrap
@if gdb
maybe-configure-gdb: configure-gdb
configure-gdb:
@@ -28612,7 +34676,8 @@ configure-gdb:
srcdiroption="--srcdir=$${topdir}/gdb"; \
libsrcdir="$$s/gdb"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif gdb
@@ -28622,6 +34687,9 @@ configure-gdb:
.PHONY: all-gdb maybe-all-gdb
maybe-all-gdb:
+@if gcc-bootstrap
+all-gdb: stage_current
+@endif gcc-bootstrap
@if gdb
TARGET-gdb=all
maybe-all-gdb: all-gdb
@@ -28667,7 +34735,7 @@ install-gdb: installdirs
@endif gdb
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-gdb info-gdb
maybe-info-gdb:
@@ -28721,6 +34789,32 @@ dvi-gdb: \
@endif gdb
+.PHONY: maybe-pdf-gdb pdf-gdb
+maybe-pdf-gdb:
+@if gdb
+maybe-pdf-gdb: pdf-gdb
+
+pdf-gdb: \
+ configure-gdb
+ @: $(MAKE); $(unstage)
+ @[ -f ./gdb/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in gdb" ; \
+ (cd $(HOST_SUBDIR)/gdb && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif gdb
+
.PHONY: maybe-html-gdb html-gdb
maybe-html-gdb:
@if gdb
@@ -28800,6 +34894,33 @@ install-info-gdb: \
@endif gdb
+.PHONY: maybe-install-pdf-gdb install-pdf-gdb
+maybe-install-pdf-gdb:
+@if gdb
+maybe-install-pdf-gdb: install-pdf-gdb
+
+install-pdf-gdb: \
+ configure-gdb \
+ pdf-gdb
+ @: $(MAKE); $(unstage)
+ @[ -f ./gdb/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gdb" ; \
+ (cd $(HOST_SUBDIR)/gdb && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gdb
+
.PHONY: maybe-install-html-gdb install-html-gdb
maybe-install-html-gdb:
@if gdb
@@ -28957,6 +35078,9 @@ maintainer-clean-gdb:
.PHONY: configure-expect maybe-configure-expect
maybe-configure-expect:
+@if gcc-bootstrap
+configure-expect: stage_current
+@endif gcc-bootstrap
@if expect
maybe-configure-expect: configure-expect
configure-expect:
@@ -28976,7 +35100,8 @@ configure-expect:
srcdiroption="--srcdir=$${topdir}/expect"; \
libsrcdir="$$s/expect"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif expect
@@ -28986,6 +35111,9 @@ configure-expect:
.PHONY: all-expect maybe-all-expect
maybe-all-expect:
+@if gcc-bootstrap
+all-expect: stage_current
+@endif gcc-bootstrap
@if expect
TARGET-expect=all
maybe-all-expect: all-expect
@@ -29031,7 +35159,7 @@ install-expect: installdirs
@endif expect
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-expect info-expect
maybe-info-expect:
@@ -29085,6 +35213,32 @@ dvi-expect: \
@endif expect
+.PHONY: maybe-pdf-expect pdf-expect
+maybe-pdf-expect:
+@if expect
+maybe-pdf-expect: pdf-expect
+
+pdf-expect: \
+ configure-expect
+ @: $(MAKE); $(unstage)
+ @[ -f ./expect/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in expect" ; \
+ (cd $(HOST_SUBDIR)/expect && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif expect
+
.PHONY: maybe-html-expect html-expect
maybe-html-expect:
@if expect
@@ -29164,6 +35318,33 @@ install-info-expect: \
@endif expect
+.PHONY: maybe-install-pdf-expect install-pdf-expect
+maybe-install-pdf-expect:
+@if expect
+maybe-install-pdf-expect: install-pdf-expect
+
+install-pdf-expect: \
+ configure-expect \
+ pdf-expect
+ @: $(MAKE); $(unstage)
+ @[ -f ./expect/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in expect" ; \
+ (cd $(HOST_SUBDIR)/expect && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif expect
+
.PHONY: maybe-install-html-expect install-html-expect
maybe-install-html-expect:
@if expect
@@ -29321,6 +35502,9 @@ maintainer-clean-expect:
.PHONY: configure-guile maybe-configure-guile
maybe-configure-guile:
+@if gcc-bootstrap
+configure-guile: stage_current
+@endif gcc-bootstrap
@if guile
maybe-configure-guile: configure-guile
configure-guile:
@@ -29340,7 +35524,8 @@ configure-guile:
srcdiroption="--srcdir=$${topdir}/guile"; \
libsrcdir="$$s/guile"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif guile
@@ -29350,6 +35535,9 @@ configure-guile:
.PHONY: all-guile maybe-all-guile
maybe-all-guile:
+@if gcc-bootstrap
+all-guile: stage_current
+@endif gcc-bootstrap
@if guile
TARGET-guile=all
maybe-all-guile: all-guile
@@ -29395,7 +35583,7 @@ install-guile: installdirs
@endif guile
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-guile info-guile
maybe-info-guile:
@@ -29449,6 +35637,32 @@ dvi-guile: \
@endif guile
+.PHONY: maybe-pdf-guile pdf-guile
+maybe-pdf-guile:
+@if guile
+maybe-pdf-guile: pdf-guile
+
+pdf-guile: \
+ configure-guile
+ @: $(MAKE); $(unstage)
+ @[ -f ./guile/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in guile" ; \
+ (cd $(HOST_SUBDIR)/guile && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif guile
+
.PHONY: maybe-html-guile html-guile
maybe-html-guile:
@if guile
@@ -29528,6 +35742,33 @@ install-info-guile: \
@endif guile
+.PHONY: maybe-install-pdf-guile install-pdf-guile
+maybe-install-pdf-guile:
+@if guile
+maybe-install-pdf-guile: install-pdf-guile
+
+install-pdf-guile: \
+ configure-guile \
+ pdf-guile
+ @: $(MAKE); $(unstage)
+ @[ -f ./guile/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in guile" ; \
+ (cd $(HOST_SUBDIR)/guile && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif guile
+
.PHONY: maybe-install-html-guile install-html-guile
maybe-install-html-guile:
@if guile
@@ -29685,6 +35926,9 @@ maintainer-clean-guile:
.PHONY: configure-tk maybe-configure-tk
maybe-configure-tk:
+@if gcc-bootstrap
+configure-tk: stage_current
+@endif gcc-bootstrap
@if tk
maybe-configure-tk: configure-tk
configure-tk:
@@ -29704,7 +35948,8 @@ configure-tk:
srcdiroption="--srcdir=$${topdir}/tk"; \
libsrcdir="$$s/tk"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif tk
@@ -29714,6 +35959,9 @@ configure-tk:
.PHONY: all-tk maybe-all-tk
maybe-all-tk:
+@if gcc-bootstrap
+all-tk: stage_current
+@endif gcc-bootstrap
@if tk
TARGET-tk=all
maybe-all-tk: all-tk
@@ -29759,7 +36007,7 @@ install-tk: installdirs
@endif tk
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-tk info-tk
maybe-info-tk:
@@ -29813,6 +36061,32 @@ dvi-tk: \
@endif tk
+.PHONY: maybe-pdf-tk pdf-tk
+maybe-pdf-tk:
+@if tk
+maybe-pdf-tk: pdf-tk
+
+pdf-tk: \
+ configure-tk
+ @: $(MAKE); $(unstage)
+ @[ -f ./tk/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in tk" ; \
+ (cd $(HOST_SUBDIR)/tk && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif tk
+
.PHONY: maybe-html-tk html-tk
maybe-html-tk:
@if tk
@@ -29892,6 +36166,33 @@ install-info-tk: \
@endif tk
+.PHONY: maybe-install-pdf-tk install-pdf-tk
+maybe-install-pdf-tk:
+@if tk
+maybe-install-pdf-tk: install-pdf-tk
+
+install-pdf-tk: \
+ configure-tk \
+ pdf-tk
+ @: $(MAKE); $(unstage)
+ @[ -f ./tk/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in tk" ; \
+ (cd $(HOST_SUBDIR)/tk && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif tk
+
.PHONY: maybe-install-html-tk install-html-tk
maybe-install-html-tk:
@if tk
@@ -30049,6 +36350,9 @@ maintainer-clean-tk:
.PHONY: configure-libtermcap maybe-configure-libtermcap
maybe-configure-libtermcap:
+@if gcc-bootstrap
+configure-libtermcap: stage_current
+@endif gcc-bootstrap
@if libtermcap
maybe-configure-libtermcap: configure-libtermcap
configure-libtermcap:
@@ -30068,7 +36372,8 @@ configure-libtermcap:
srcdiroption="--srcdir=$${topdir}/libtermcap"; \
libsrcdir="$$s/libtermcap"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif libtermcap
@@ -30078,6 +36383,9 @@ configure-libtermcap:
.PHONY: all-libtermcap maybe-all-libtermcap
maybe-all-libtermcap:
+@if gcc-bootstrap
+all-libtermcap: stage_current
+@endif gcc-bootstrap
@if libtermcap
TARGET-libtermcap=all
maybe-all-libtermcap: all-libtermcap
@@ -30117,7 +36425,7 @@ install-libtermcap: installdirs
@endif libtermcap
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-libtermcap info-libtermcap
maybe-info-libtermcap:
@@ -30171,6 +36479,32 @@ dvi-libtermcap: \
@endif libtermcap
+.PHONY: maybe-pdf-libtermcap pdf-libtermcap
+maybe-pdf-libtermcap:
+@if libtermcap
+maybe-pdf-libtermcap: pdf-libtermcap
+
+pdf-libtermcap: \
+ configure-libtermcap
+ @: $(MAKE); $(unstage)
+ @[ -f ./libtermcap/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in libtermcap" ; \
+ (cd $(HOST_SUBDIR)/libtermcap && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif libtermcap
+
.PHONY: maybe-html-libtermcap html-libtermcap
maybe-html-libtermcap:
@if libtermcap
@@ -30250,6 +36584,33 @@ install-info-libtermcap: \
@endif libtermcap
+.PHONY: maybe-install-pdf-libtermcap install-pdf-libtermcap
+maybe-install-pdf-libtermcap:
+@if libtermcap
+maybe-install-pdf-libtermcap: install-pdf-libtermcap
+
+install-pdf-libtermcap: \
+ configure-libtermcap \
+ pdf-libtermcap
+ @: $(MAKE); $(unstage)
+ @[ -f ./libtermcap/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in libtermcap" ; \
+ (cd $(HOST_SUBDIR)/libtermcap && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif libtermcap
+
.PHONY: maybe-install-html-libtermcap install-html-libtermcap
maybe-install-html-libtermcap:
@if libtermcap
@@ -30347,6 +36708,9 @@ maintainer-clean-libtermcap:
.PHONY: configure-utils maybe-configure-utils
maybe-configure-utils:
+@if gcc-bootstrap
+configure-utils: stage_current
+@endif gcc-bootstrap
@if utils
maybe-configure-utils: configure-utils
configure-utils:
@@ -30366,7 +36730,8 @@ configure-utils:
srcdiroption="--srcdir=$${topdir}/utils"; \
libsrcdir="$$s/utils"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif utils
@@ -30376,6 +36741,9 @@ configure-utils:
.PHONY: all-utils maybe-all-utils
maybe-all-utils:
+@if gcc-bootstrap
+all-utils: stage_current
+@endif gcc-bootstrap
@if utils
TARGET-utils=all
maybe-all-utils: all-utils
@@ -30415,7 +36783,7 @@ install-utils: installdirs
@endif utils
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-utils info-utils
maybe-info-utils:
@@ -30469,6 +36837,32 @@ dvi-utils: \
@endif utils
+.PHONY: maybe-pdf-utils pdf-utils
+maybe-pdf-utils:
+@if utils
+maybe-pdf-utils: pdf-utils
+
+pdf-utils: \
+ configure-utils
+ @: $(MAKE); $(unstage)
+ @[ -f ./utils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in utils" ; \
+ (cd $(HOST_SUBDIR)/utils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif utils
+
.PHONY: maybe-html-utils html-utils
maybe-html-utils:
@if utils
@@ -30548,6 +36942,33 @@ install-info-utils: \
@endif utils
+.PHONY: maybe-install-pdf-utils install-pdf-utils
+maybe-install-pdf-utils:
+@if utils
+maybe-install-pdf-utils: install-pdf-utils
+
+install-pdf-utils: \
+ configure-utils \
+ pdf-utils
+ @: $(MAKE); $(unstage)
+ @[ -f ./utils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in utils" ; \
+ (cd $(HOST_SUBDIR)/utils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif utils
+
.PHONY: maybe-install-html-utils install-html-utils
maybe-install-html-utils:
@if utils
@@ -30705,6 +37126,9 @@ maintainer-clean-utils:
.PHONY: configure-gnattools maybe-configure-gnattools
maybe-configure-gnattools:
+@if gcc-bootstrap
+configure-gnattools: stage_current
+@endif gcc-bootstrap
@if gnattools
maybe-configure-gnattools: configure-gnattools
configure-gnattools:
@@ -30724,7 +37148,8 @@ configure-gnattools:
srcdiroption="--srcdir=$${topdir}/gnattools"; \
libsrcdir="$$s/gnattools"; \
$(SHELL) $${libsrcdir}/configure \
- $(HOST_CONFIGARGS) $${srcdiroption} \
+ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif gnattools
@@ -30734,6 +37159,9 @@ configure-gnattools:
.PHONY: all-gnattools maybe-all-gnattools
maybe-all-gnattools:
+@if gcc-bootstrap
+all-gnattools: stage_current
+@endif gcc-bootstrap
@if gnattools
TARGET-gnattools=all
maybe-all-gnattools: all-gnattools
@@ -30779,7 +37207,7 @@ install-gnattools: installdirs
@endif gnattools
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-gnattools info-gnattools
maybe-info-gnattools:
@@ -30833,6 +37261,32 @@ dvi-gnattools: \
@endif gnattools
+.PHONY: maybe-pdf-gnattools pdf-gnattools
+maybe-pdf-gnattools:
+@if gnattools
+maybe-pdf-gnattools: pdf-gnattools
+
+pdf-gnattools: \
+ configure-gnattools
+ @: $(MAKE); $(unstage)
+ @[ -f ./gnattools/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in gnattools" ; \
+ (cd $(HOST_SUBDIR)/gnattools && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif gnattools
+
.PHONY: maybe-html-gnattools html-gnattools
maybe-html-gnattools:
@if gnattools
@@ -30912,6 +37366,33 @@ install-info-gnattools: \
@endif gnattools
+.PHONY: maybe-install-pdf-gnattools install-pdf-gnattools
+maybe-install-pdf-gnattools:
+@if gnattools
+maybe-install-pdf-gnattools: install-pdf-gnattools
+
+install-pdf-gnattools: \
+ configure-gnattools \
+ pdf-gnattools
+ @: $(MAKE); $(unstage)
+ @[ -f ./gnattools/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gnattools" ; \
+ (cd $(HOST_SUBDIR)/gnattools && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gnattools
+
.PHONY: maybe-install-html-gnattools install-html-gnattools
maybe-install-html-gnattools:
@if gnattools
@@ -31076,6 +37557,9 @@ maintainer-clean-gnattools:
.PHONY: configure-target-libstdc++-v3 maybe-configure-target-libstdc++-v3
maybe-configure-target-libstdc++-v3:
+@if gcc-bootstrap
+configure-target-libstdc++-v3: stage_current
+@endif gcc-bootstrap
@if target-libstdc++-v3
maybe-configure-target-libstdc++-v3: configure-target-libstdc++-v3
configure-target-libstdc++-v3:
@@ -31109,7 +37593,8 @@ configure-target-libstdc++-v3:
libsrcdir="$$s/libstdc++-v3"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-libstdc++-v3
@@ -31119,6 +37604,9 @@ configure-target-libstdc++-v3:
.PHONY: all-target-libstdc++-v3 maybe-all-target-libstdc++-v3
maybe-all-target-libstdc++-v3:
+@if gcc-bootstrap
+all-target-libstdc++-v3: stage_current
+@endif gcc-bootstrap
@if target-libstdc++-v3
TARGET-target-libstdc++-v3=all
maybe-all-target-libstdc++-v3: all-target-libstdc++-v3
@@ -31165,7 +37653,7 @@ install-target-libstdc++-v3: installdirs
@endif target-libstdc++-v3
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-libstdc++-v3 info-target-libstdc++-v3
maybe-info-target-libstdc++-v3:
@@ -31219,6 +37707,32 @@ dvi-target-libstdc++-v3: \
@endif target-libstdc++-v3
+.PHONY: maybe-pdf-target-libstdc++-v3 pdf-target-libstdc++-v3
+maybe-pdf-target-libstdc++-v3:
+@if target-libstdc++-v3
+maybe-pdf-target-libstdc++-v3: pdf-target-libstdc++-v3
+
+pdf-target-libstdc++-v3: \
+ configure-target-libstdc++-v3
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(RAW_CXX_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/libstdc++-v3" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libstdc++-v3 && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-libstdc++-v3
+
.PHONY: maybe-html-target-libstdc++-v3 html-target-libstdc++-v3
maybe-html-target-libstdc++-v3:
@if target-libstdc++-v3
@@ -31298,6 +37812,33 @@ install-info-target-libstdc++-v3: \
@endif target-libstdc++-v3
+.PHONY: maybe-install-pdf-target-libstdc++-v3 install-pdf-target-libstdc++-v3
+maybe-install-pdf-target-libstdc++-v3:
+@if target-libstdc++-v3
+maybe-install-pdf-target-libstdc++-v3: install-pdf-target-libstdc++-v3
+
+install-pdf-target-libstdc++-v3: \
+ configure-target-libstdc++-v3 \
+ pdf-target-libstdc++-v3
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(RAW_CXX_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libstdc++-v3" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libstdc++-v3 && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libstdc++-v3
+
.PHONY: maybe-install-html-target-libstdc++-v3 install-html-target-libstdc++-v3
maybe-install-html-target-libstdc++-v3:
@if target-libstdc++-v3
@@ -31457,6 +37998,9 @@ maintainer-clean-target-libstdc++-v3:
.PHONY: configure-target-libmudflap maybe-configure-target-libmudflap
maybe-configure-target-libmudflap:
+@if gcc-bootstrap
+configure-target-libmudflap: stage_current
+@endif gcc-bootstrap
@if target-libmudflap
maybe-configure-target-libmudflap: configure-target-libmudflap
configure-target-libmudflap:
@@ -31490,7 +38034,8 @@ configure-target-libmudflap:
libsrcdir="$$s/libmudflap"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-libmudflap
@@ -31500,6 +38045,9 @@ configure-target-libmudflap:
.PHONY: all-target-libmudflap maybe-all-target-libmudflap
maybe-all-target-libmudflap:
+@if gcc-bootstrap
+all-target-libmudflap: stage_current
+@endif gcc-bootstrap
@if target-libmudflap
TARGET-target-libmudflap=all
maybe-all-target-libmudflap: all-target-libmudflap
@@ -31546,7 +38094,7 @@ install-target-libmudflap: installdirs
@endif target-libmudflap
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-libmudflap info-target-libmudflap
maybe-info-target-libmudflap:
@@ -31600,6 +38148,32 @@ dvi-target-libmudflap: \
@endif target-libmudflap
+.PHONY: maybe-pdf-target-libmudflap pdf-target-libmudflap
+maybe-pdf-target-libmudflap:
+@if target-libmudflap
+maybe-pdf-target-libmudflap: pdf-target-libmudflap
+
+pdf-target-libmudflap: \
+ configure-target-libmudflap
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libmudflap/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/libmudflap" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libmudflap && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-libmudflap
+
.PHONY: maybe-html-target-libmudflap html-target-libmudflap
maybe-html-target-libmudflap:
@if target-libmudflap
@@ -31679,6 +38253,33 @@ install-info-target-libmudflap: \
@endif target-libmudflap
+.PHONY: maybe-install-pdf-target-libmudflap install-pdf-target-libmudflap
+maybe-install-pdf-target-libmudflap:
+@if target-libmudflap
+maybe-install-pdf-target-libmudflap: install-pdf-target-libmudflap
+
+install-pdf-target-libmudflap: \
+ configure-target-libmudflap \
+ pdf-target-libmudflap
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libmudflap/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libmudflap" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libmudflap && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libmudflap
+
.PHONY: maybe-install-html-target-libmudflap install-html-target-libmudflap
maybe-install-html-target-libmudflap:
@if target-libmudflap
@@ -31838,6 +38439,9 @@ maintainer-clean-target-libmudflap:
.PHONY: configure-target-libssp maybe-configure-target-libssp
maybe-configure-target-libssp:
+@if gcc-bootstrap
+configure-target-libssp: stage_current
+@endif gcc-bootstrap
@if target-libssp
maybe-configure-target-libssp: configure-target-libssp
configure-target-libssp:
@@ -31871,7 +38475,8 @@ configure-target-libssp:
libsrcdir="$$s/libssp"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-libssp
@@ -31881,6 +38486,9 @@ configure-target-libssp:
.PHONY: all-target-libssp maybe-all-target-libssp
maybe-all-target-libssp:
+@if gcc-bootstrap
+all-target-libssp: stage_current
+@endif gcc-bootstrap
@if target-libssp
TARGET-target-libssp=all
maybe-all-target-libssp: all-target-libssp
@@ -31927,7 +38535,7 @@ install-target-libssp: installdirs
@endif target-libssp
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-libssp info-target-libssp
maybe-info-target-libssp:
@@ -31981,6 +38589,32 @@ dvi-target-libssp: \
@endif target-libssp
+.PHONY: maybe-pdf-target-libssp pdf-target-libssp
+maybe-pdf-target-libssp:
+@if target-libssp
+maybe-pdf-target-libssp: pdf-target-libssp
+
+pdf-target-libssp: \
+ configure-target-libssp
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/libssp" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libssp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-libssp
+
.PHONY: maybe-html-target-libssp html-target-libssp
maybe-html-target-libssp:
@if target-libssp
@@ -32060,6 +38694,33 @@ install-info-target-libssp: \
@endif target-libssp
+.PHONY: maybe-install-pdf-target-libssp install-pdf-target-libssp
+maybe-install-pdf-target-libssp:
+@if target-libssp
+maybe-install-pdf-target-libssp: install-pdf-target-libssp
+
+install-pdf-target-libssp: \
+ configure-target-libssp \
+ pdf-target-libssp
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libssp" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libssp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libssp
+
.PHONY: maybe-install-html-target-libssp install-html-target-libssp
maybe-install-html-target-libssp:
@if target-libssp
@@ -32217,116 +38878,123 @@ maintainer-clean-target-libssp:
-.PHONY: configure-target-libgcc-math maybe-configure-target-libgcc-math
-maybe-configure-target-libgcc-math:
-@if target-libgcc-math
-maybe-configure-target-libgcc-math: configure-target-libgcc-math
-configure-target-libgcc-math:
+.PHONY: configure-target-newlib maybe-configure-target-newlib
+maybe-configure-target-newlib:
+@if gcc-bootstrap
+configure-target-newlib: stage_current
+@endif gcc-bootstrap
+@if target-newlib
+maybe-configure-target-newlib: configure-target-newlib
+configure-target-newlib:
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- echo "Checking multilib configuration for libgcc-math..."; \
- $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc-math ; \
- $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc-math/multilib.tmp 2> /dev/null ; \
- if test -r $(TARGET_SUBDIR)/libgcc-math/multilib.out; then \
- if cmp -s $(TARGET_SUBDIR)/libgcc-math/multilib.tmp $(TARGET_SUBDIR)/libgcc-math/multilib.out; then \
- rm -f $(TARGET_SUBDIR)/libgcc-math/multilib.tmp; \
+ echo "Checking multilib configuration for newlib..."; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/newlib ; \
+ $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/newlib/multilib.tmp 2> /dev/null ; \
+ if test -r $(TARGET_SUBDIR)/newlib/multilib.out; then \
+ if cmp -s $(TARGET_SUBDIR)/newlib/multilib.tmp $(TARGET_SUBDIR)/newlib/multilib.out; then \
+ rm -f $(TARGET_SUBDIR)/newlib/multilib.tmp; \
else \
- rm -f $(TARGET_SUBDIR)/libgcc-math/Makefile; \
- mv $(TARGET_SUBDIR)/libgcc-math/multilib.tmp $(TARGET_SUBDIR)/libgcc-math/multilib.out; \
+ rm -f $(TARGET_SUBDIR)/newlib/Makefile; \
+ mv $(TARGET_SUBDIR)/newlib/multilib.tmp $(TARGET_SUBDIR)/newlib/multilib.out; \
fi; \
else \
- mv $(TARGET_SUBDIR)/libgcc-math/multilib.tmp $(TARGET_SUBDIR)/libgcc-math/multilib.out; \
+ mv $(TARGET_SUBDIR)/newlib/multilib.tmp $(TARGET_SUBDIR)/newlib/multilib.out; \
fi; \
- test ! -f $(TARGET_SUBDIR)/libgcc-math/Makefile || exit 0; \
- $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc-math ; \
+ test ! -f $(TARGET_SUBDIR)/newlib/Makefile || exit 0; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/newlib ; \
$(NORMAL_TARGET_EXPORTS) \
- echo Configuring in $(TARGET_SUBDIR)/libgcc-math; \
- cd "$(TARGET_SUBDIR)/libgcc-math" || exit 1; \
+ echo Configuring in $(TARGET_SUBDIR)/newlib; \
+ cd "$(TARGET_SUBDIR)/newlib" || exit 1; \
case $(srcdir) in \
/* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
- *) topdir=`echo $(TARGET_SUBDIR)/libgcc-math/ | \
+ *) topdir=`echo $(TARGET_SUBDIR)/newlib/ | \
sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
esac; \
- srcdiroption="--srcdir=$${topdir}/libgcc-math"; \
- libsrcdir="$$s/libgcc-math"; \
+ srcdiroption="--srcdir=$${topdir}/newlib"; \
+ libsrcdir="$$s/newlib"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
-@endif target-libgcc-math
+@endif target-newlib
-.PHONY: all-target-libgcc-math maybe-all-target-libgcc-math
-maybe-all-target-libgcc-math:
-@if target-libgcc-math
-TARGET-target-libgcc-math=all
-maybe-all-target-libgcc-math: all-target-libgcc-math
-all-target-libgcc-math: configure-target-libgcc-math
+.PHONY: all-target-newlib maybe-all-target-newlib
+maybe-all-target-newlib:
+@if gcc-bootstrap
+all-target-newlib: stage_current
+@endif gcc-bootstrap
+@if target-newlib
+TARGET-target-newlib=all
+maybe-all-target-newlib: all-target-newlib
+all-target-newlib: configure-target-newlib
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-libgcc-math))
-@endif target-libgcc-math
+ (cd $(TARGET_SUBDIR)/newlib && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-newlib))
+@endif target-newlib
-.PHONY: check-target-libgcc-math maybe-check-target-libgcc-math
-maybe-check-target-libgcc-math:
-@if target-libgcc-math
-maybe-check-target-libgcc-math: check-target-libgcc-math
+.PHONY: check-target-newlib maybe-check-target-newlib
+maybe-check-target-newlib:
+@if target-newlib
+maybe-check-target-newlib: check-target-newlib
-check-target-libgcc-math:
+check-target-newlib:
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
+ (cd $(TARGET_SUBDIR)/newlib && \
$(MAKE) $(TARGET_FLAGS_TO_PASS) check)
-@endif target-libgcc-math
+@endif target-newlib
-.PHONY: install-target-libgcc-math maybe-install-target-libgcc-math
-maybe-install-target-libgcc-math:
-@if target-libgcc-math
-maybe-install-target-libgcc-math: install-target-libgcc-math
+.PHONY: install-target-newlib maybe-install-target-newlib
+maybe-install-target-newlib:
+@if target-newlib
+maybe-install-target-newlib: install-target-newlib
-install-target-libgcc-math: installdirs
+install-target-newlib: installdirs
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
+ (cd $(TARGET_SUBDIR)/newlib && \
$(MAKE) $(TARGET_FLAGS_TO_PASS) install)
-@endif target-libgcc-math
+@endif target-newlib
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
-.PHONY: maybe-info-target-libgcc-math info-target-libgcc-math
-maybe-info-target-libgcc-math:
-@if target-libgcc-math
-maybe-info-target-libgcc-math: info-target-libgcc-math
+.PHONY: maybe-info-target-newlib info-target-newlib
+maybe-info-target-newlib:
+@if target-newlib
+maybe-info-target-newlib: info-target-newlib
-info-target-libgcc-math: \
- configure-target-libgcc-math
+info-target-newlib: \
+ configure-target-newlib
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/libgcc-math/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing info in $(TARGET_SUBDIR)/libgcc-math" ; \
+ echo "Doing info in $(TARGET_SUBDIR)/newlib" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
+ (cd $(TARGET_SUBDIR)/newlib && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32334,25 +39002,25 @@ info-target-libgcc-math: \
info) \
|| exit 1
-@endif target-libgcc-math
+@endif target-newlib
-.PHONY: maybe-dvi-target-libgcc-math dvi-target-libgcc-math
-maybe-dvi-target-libgcc-math:
-@if target-libgcc-math
-maybe-dvi-target-libgcc-math: dvi-target-libgcc-math
+.PHONY: maybe-dvi-target-newlib dvi-target-newlib
+maybe-dvi-target-newlib:
+@if target-newlib
+maybe-dvi-target-newlib: dvi-target-newlib
-dvi-target-libgcc-math: \
- configure-target-libgcc-math
+dvi-target-newlib: \
+ configure-target-newlib
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/libgcc-math/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing dvi in $(TARGET_SUBDIR)/libgcc-math" ; \
+ echo "Doing dvi in $(TARGET_SUBDIR)/newlib" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
+ (cd $(TARGET_SUBDIR)/newlib && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32360,25 +39028,51 @@ dvi-target-libgcc-math: \
dvi) \
|| exit 1
-@endif target-libgcc-math
+@endif target-newlib
+
+.PHONY: maybe-pdf-target-newlib pdf-target-newlib
+maybe-pdf-target-newlib:
+@if target-newlib
+maybe-pdf-target-newlib: pdf-target-newlib
+
+pdf-target-newlib: \
+ configure-target-newlib
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/newlib" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/newlib && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-newlib
-.PHONY: maybe-html-target-libgcc-math html-target-libgcc-math
-maybe-html-target-libgcc-math:
-@if target-libgcc-math
-maybe-html-target-libgcc-math: html-target-libgcc-math
+.PHONY: maybe-html-target-newlib html-target-newlib
+maybe-html-target-newlib:
+@if target-newlib
+maybe-html-target-newlib: html-target-newlib
-html-target-libgcc-math: \
- configure-target-libgcc-math
+html-target-newlib: \
+ configure-target-newlib
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/libgcc-math/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing html in $(TARGET_SUBDIR)/libgcc-math" ; \
+ echo "Doing html in $(TARGET_SUBDIR)/newlib" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
+ (cd $(TARGET_SUBDIR)/newlib && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32386,25 +39080,25 @@ html-target-libgcc-math: \
html) \
|| exit 1
-@endif target-libgcc-math
+@endif target-newlib
-.PHONY: maybe-TAGS-target-libgcc-math TAGS-target-libgcc-math
-maybe-TAGS-target-libgcc-math:
-@if target-libgcc-math
-maybe-TAGS-target-libgcc-math: TAGS-target-libgcc-math
+.PHONY: maybe-TAGS-target-newlib TAGS-target-newlib
+maybe-TAGS-target-newlib:
+@if target-newlib
+maybe-TAGS-target-newlib: TAGS-target-newlib
-TAGS-target-libgcc-math: \
- configure-target-libgcc-math
+TAGS-target-newlib: \
+ configure-target-newlib
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/libgcc-math/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing TAGS in $(TARGET_SUBDIR)/libgcc-math" ; \
+ echo "Doing TAGS in $(TARGET_SUBDIR)/newlib" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
+ (cd $(TARGET_SUBDIR)/newlib && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32412,26 +39106,26 @@ TAGS-target-libgcc-math: \
TAGS) \
|| exit 1
-@endif target-libgcc-math
+@endif target-newlib
-.PHONY: maybe-install-info-target-libgcc-math install-info-target-libgcc-math
-maybe-install-info-target-libgcc-math:
-@if target-libgcc-math
-maybe-install-info-target-libgcc-math: install-info-target-libgcc-math
+.PHONY: maybe-install-info-target-newlib install-info-target-newlib
+maybe-install-info-target-newlib:
+@if target-newlib
+maybe-install-info-target-newlib: install-info-target-newlib
-install-info-target-libgcc-math: \
- configure-target-libgcc-math \
- info-target-libgcc-math
+install-info-target-newlib: \
+ configure-target-newlib \
+ info-target-newlib
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/libgcc-math/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing install-info in $(TARGET_SUBDIR)/libgcc-math" ; \
+ echo "Doing install-info in $(TARGET_SUBDIR)/newlib" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
+ (cd $(TARGET_SUBDIR)/newlib && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32439,26 +39133,53 @@ install-info-target-libgcc-math: \
install-info) \
|| exit 1
-@endif target-libgcc-math
+@endif target-newlib
-.PHONY: maybe-install-html-target-libgcc-math install-html-target-libgcc-math
-maybe-install-html-target-libgcc-math:
-@if target-libgcc-math
-maybe-install-html-target-libgcc-math: install-html-target-libgcc-math
+.PHONY: maybe-install-pdf-target-newlib install-pdf-target-newlib
+maybe-install-pdf-target-newlib:
+@if target-newlib
+maybe-install-pdf-target-newlib: install-pdf-target-newlib
-install-html-target-libgcc-math: \
- configure-target-libgcc-math \
- html-target-libgcc-math
+install-pdf-target-newlib: \
+ configure-target-newlib \
+ pdf-target-newlib
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/libgcc-math/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing install-html in $(TARGET_SUBDIR)/libgcc-math" ; \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/newlib" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
+ (cd $(TARGET_SUBDIR)/newlib && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-newlib
+
+.PHONY: maybe-install-html-target-newlib install-html-target-newlib
+maybe-install-html-target-newlib:
+@if target-newlib
+maybe-install-html-target-newlib: install-html-target-newlib
+
+install-html-target-newlib: \
+ configure-target-newlib \
+ html-target-newlib
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-html in $(TARGET_SUBDIR)/newlib" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/newlib && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32466,25 +39187,25 @@ install-html-target-libgcc-math: \
install-html) \
|| exit 1
-@endif target-libgcc-math
+@endif target-newlib
-.PHONY: maybe-installcheck-target-libgcc-math installcheck-target-libgcc-math
-maybe-installcheck-target-libgcc-math:
-@if target-libgcc-math
-maybe-installcheck-target-libgcc-math: installcheck-target-libgcc-math
+.PHONY: maybe-installcheck-target-newlib installcheck-target-newlib
+maybe-installcheck-target-newlib:
+@if target-newlib
+maybe-installcheck-target-newlib: installcheck-target-newlib
-installcheck-target-libgcc-math: \
- configure-target-libgcc-math
+installcheck-target-newlib: \
+ configure-target-newlib
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/libgcc-math/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing installcheck in $(TARGET_SUBDIR)/libgcc-math" ; \
+ echo "Doing installcheck in $(TARGET_SUBDIR)/newlib" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
+ (cd $(TARGET_SUBDIR)/newlib && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32492,24 +39213,24 @@ installcheck-target-libgcc-math: \
installcheck) \
|| exit 1
-@endif target-libgcc-math
+@endif target-newlib
-.PHONY: maybe-mostlyclean-target-libgcc-math mostlyclean-target-libgcc-math
-maybe-mostlyclean-target-libgcc-math:
-@if target-libgcc-math
-maybe-mostlyclean-target-libgcc-math: mostlyclean-target-libgcc-math
+.PHONY: maybe-mostlyclean-target-newlib mostlyclean-target-newlib
+maybe-mostlyclean-target-newlib:
+@if target-newlib
+maybe-mostlyclean-target-newlib: mostlyclean-target-newlib
-mostlyclean-target-libgcc-math:
+mostlyclean-target-newlib:
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/libgcc-math/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgcc-math" ; \
+ echo "Doing mostlyclean in $(TARGET_SUBDIR)/newlib" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
+ (cd $(TARGET_SUBDIR)/newlib && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32517,24 +39238,24 @@ mostlyclean-target-libgcc-math:
mostlyclean) \
|| exit 1
-@endif target-libgcc-math
+@endif target-newlib
-.PHONY: maybe-clean-target-libgcc-math clean-target-libgcc-math
-maybe-clean-target-libgcc-math:
-@if target-libgcc-math
-maybe-clean-target-libgcc-math: clean-target-libgcc-math
+.PHONY: maybe-clean-target-newlib clean-target-newlib
+maybe-clean-target-newlib:
+@if target-newlib
+maybe-clean-target-newlib: clean-target-newlib
-clean-target-libgcc-math:
+clean-target-newlib:
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/libgcc-math/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing clean in $(TARGET_SUBDIR)/libgcc-math" ; \
+ echo "Doing clean in $(TARGET_SUBDIR)/newlib" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
+ (cd $(TARGET_SUBDIR)/newlib && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32542,24 +39263,24 @@ clean-target-libgcc-math:
clean) \
|| exit 1
-@endif target-libgcc-math
+@endif target-newlib
-.PHONY: maybe-distclean-target-libgcc-math distclean-target-libgcc-math
-maybe-distclean-target-libgcc-math:
-@if target-libgcc-math
-maybe-distclean-target-libgcc-math: distclean-target-libgcc-math
+.PHONY: maybe-distclean-target-newlib distclean-target-newlib
+maybe-distclean-target-newlib:
+@if target-newlib
+maybe-distclean-target-newlib: distclean-target-newlib
-distclean-target-libgcc-math:
+distclean-target-newlib:
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/libgcc-math/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing distclean in $(TARGET_SUBDIR)/libgcc-math" ; \
+ echo "Doing distclean in $(TARGET_SUBDIR)/newlib" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
+ (cd $(TARGET_SUBDIR)/newlib && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32567,24 +39288,24 @@ distclean-target-libgcc-math:
distclean) \
|| exit 1
-@endif target-libgcc-math
+@endif target-newlib
-.PHONY: maybe-maintainer-clean-target-libgcc-math maintainer-clean-target-libgcc-math
-maybe-maintainer-clean-target-libgcc-math:
-@if target-libgcc-math
-maybe-maintainer-clean-target-libgcc-math: maintainer-clean-target-libgcc-math
+.PHONY: maybe-maintainer-clean-target-newlib maintainer-clean-target-newlib
+maybe-maintainer-clean-target-newlib:
+@if target-newlib
+maybe-maintainer-clean-target-newlib: maintainer-clean-target-newlib
-maintainer-clean-target-libgcc-math:
+maintainer-clean-target-newlib:
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/libgcc-math/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgcc-math" ; \
+ echo "Doing maintainer-clean in $(TARGET_SUBDIR)/newlib" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/libgcc-math && \
+ (cd $(TARGET_SUBDIR)/newlib && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32592,122 +39313,591 @@ maintainer-clean-target-libgcc-math:
maintainer-clean) \
|| exit 1
-@endif target-libgcc-math
+@endif target-newlib
-.PHONY: configure-target-newlib maybe-configure-target-newlib
-maybe-configure-target-newlib:
-@if target-newlib
-maybe-configure-target-newlib: configure-target-newlib
-configure-target-newlib:
- @: $(MAKE); $(unstage)
+.PHONY: configure-target-libgcc maybe-configure-target-libgcc
+maybe-configure-target-libgcc:
+@if gcc-bootstrap
+configure-target-libgcc: stage_current
+@endif gcc-bootstrap
+@if target-libgcc
+maybe-configure-target-libgcc: configure-target-libgcc
+configure-target-libgcc:
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- echo "Checking multilib configuration for newlib..."; \
- $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/newlib ; \
- $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/newlib/multilib.tmp 2> /dev/null ; \
- if test -r $(TARGET_SUBDIR)/newlib/multilib.out; then \
- if cmp -s $(TARGET_SUBDIR)/newlib/multilib.tmp $(TARGET_SUBDIR)/newlib/multilib.out; then \
- rm -f $(TARGET_SUBDIR)/newlib/multilib.tmp; \
+ echo "Checking multilib configuration for libgcc..."; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \
+ $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null ; \
+ if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \
else \
- rm -f $(TARGET_SUBDIR)/newlib/Makefile; \
- mv $(TARGET_SUBDIR)/newlib/multilib.tmp $(TARGET_SUBDIR)/newlib/multilib.out; \
+ rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
fi; \
else \
- mv $(TARGET_SUBDIR)/newlib/multilib.tmp $(TARGET_SUBDIR)/newlib/multilib.out; \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
fi; \
- test ! -f $(TARGET_SUBDIR)/newlib/Makefile || exit 0; \
- $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/newlib ; \
+ test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \
$(NORMAL_TARGET_EXPORTS) \
- echo Configuring in $(TARGET_SUBDIR)/newlib; \
- cd "$(TARGET_SUBDIR)/newlib" || exit 1; \
+ echo Configuring in $(TARGET_SUBDIR)/libgcc; \
+ cd "$(TARGET_SUBDIR)/libgcc" || exit 1; \
case $(srcdir) in \
/* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
- *) topdir=`echo $(TARGET_SUBDIR)/newlib/ | \
+ *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \
sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
esac; \
- srcdiroption="--srcdir=$${topdir}/newlib"; \
- libsrcdir="$$s/newlib"; \
+ srcdiroption="--srcdir=$${topdir}/libgcc"; \
+ libsrcdir="$$s/libgcc"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
-@endif target-newlib
+@endif target-libgcc
+.PHONY: configure-stage1-target-libgcc maybe-configure-stage1-target-libgcc
+maybe-configure-stage1-target-libgcc:
+@if target-libgcc-bootstrap
+maybe-configure-stage1-target-libgcc: configure-stage1-target-libgcc
+configure-stage1-target-libgcc:
+ @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ echo "Checking multilib configuration for libgcc..."; \
+ $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null ; \
+ if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \
+ else \
+ rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
+ fi; \
+ else \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
+ fi; \
+ test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
+ $(NORMAL_TARGET_EXPORTS) \
+ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \
+ echo Configuring stage 1 in $(TARGET_SUBDIR)/libgcc ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \
+ cd $(TARGET_SUBDIR)/libgcc || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/libgcc"; \
+ libsrcdir="$$s/libgcc"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ \
+ --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
+@endif target-libgcc-bootstrap
+
+.PHONY: configure-stage2-target-libgcc maybe-configure-stage2-target-libgcc
+maybe-configure-stage2-target-libgcc:
+@if target-libgcc-bootstrap
+maybe-configure-stage2-target-libgcc: configure-stage2-target-libgcc
+configure-stage2-target-libgcc:
+ @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ echo "Checking multilib configuration for libgcc..."; \
+ $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null ; \
+ if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \
+ else \
+ rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
+ fi; \
+ else \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
+ fi; \
+ test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
+ $(NORMAL_TARGET_EXPORTS) \
+ \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
+ echo Configuring stage 2 in $(TARGET_SUBDIR)/libgcc ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \
+ cd $(TARGET_SUBDIR)/libgcc || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/libgcc"; \
+ libsrcdir="$$s/libgcc"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@
+@endif target-libgcc-bootstrap
+.PHONY: configure-stage3-target-libgcc maybe-configure-stage3-target-libgcc
+maybe-configure-stage3-target-libgcc:
+@if target-libgcc-bootstrap
+maybe-configure-stage3-target-libgcc: configure-stage3-target-libgcc
+configure-stage3-target-libgcc:
+ @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ echo "Checking multilib configuration for libgcc..."; \
+ $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null ; \
+ if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \
+ else \
+ rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
+ fi; \
+ else \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
+ fi; \
+ test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
+ $(NORMAL_TARGET_EXPORTS) \
+ \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
+ echo Configuring stage 3 in $(TARGET_SUBDIR)/libgcc ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \
+ cd $(TARGET_SUBDIR)/libgcc || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/libgcc"; \
+ libsrcdir="$$s/libgcc"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@
+@endif target-libgcc-bootstrap
-.PHONY: all-target-newlib maybe-all-target-newlib
-maybe-all-target-newlib:
-@if target-newlib
-TARGET-target-newlib=all
-maybe-all-target-newlib: all-target-newlib
-all-target-newlib: configure-target-newlib
- @: $(MAKE); $(unstage)
+.PHONY: configure-stage4-target-libgcc maybe-configure-stage4-target-libgcc
+maybe-configure-stage4-target-libgcc:
+@if target-libgcc-bootstrap
+maybe-configure-stage4-target-libgcc: configure-stage4-target-libgcc
+configure-stage4-target-libgcc:
+ @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ echo "Checking multilib configuration for libgcc..."; \
+ $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null ; \
+ if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \
+ else \
+ rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
+ fi; \
+ else \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
+ fi; \
+ test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
+ $(NORMAL_TARGET_EXPORTS) \
+ \
+ CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \
+ echo Configuring stage 4 in $(TARGET_SUBDIR)/libgcc ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \
+ cd $(TARGET_SUBDIR)/libgcc || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/libgcc"; \
+ libsrcdir="$$s/libgcc"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@
+@endif target-libgcc-bootstrap
+
+.PHONY: configure-stageprofile-target-libgcc maybe-configure-stageprofile-target-libgcc
+maybe-configure-stageprofile-target-libgcc:
+@if target-libgcc-bootstrap
+maybe-configure-stageprofile-target-libgcc: configure-stageprofile-target-libgcc
+configure-stageprofile-target-libgcc:
+ @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ echo "Checking multilib configuration for libgcc..."; \
+ $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null ; \
+ if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \
+ else \
+ rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
+ fi; \
+ else \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
+ fi; \
+ test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
+ $(NORMAL_TARGET_EXPORTS) \
+ \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate"; export LIBCFLAGS; \
+ echo Configuring stage profile in $(TARGET_SUBDIR)/libgcc ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \
+ cd $(TARGET_SUBDIR)/libgcc || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/libgcc"; \
+ libsrcdir="$$s/libgcc"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@
+@endif target-libgcc-bootstrap
+
+.PHONY: configure-stagefeedback-target-libgcc maybe-configure-stagefeedback-target-libgcc
+maybe-configure-stagefeedback-target-libgcc:
+@if target-libgcc-bootstrap
+maybe-configure-stagefeedback-target-libgcc: configure-stagefeedback-target-libgcc
+configure-stagefeedback-target-libgcc:
+ @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
+ @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ echo "Checking multilib configuration for libgcc..."; \
+ $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgcc/multilib.tmp 2> /dev/null ; \
+ if test -r $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ if cmp -s $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; then \
+ rm -f $(TARGET_SUBDIR)/libgcc/multilib.tmp; \
+ else \
+ rm -f $(TARGET_SUBDIR)/libgcc/Makefile; \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
+ fi; \
+ else \
+ mv $(TARGET_SUBDIR)/libgcc/multilib.tmp $(TARGET_SUBDIR)/libgcc/multilib.out; \
+ fi; \
+ test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
+ $(NORMAL_TARGET_EXPORTS) \
+ \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export CFLAGS; \
+ LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use"; export LIBCFLAGS; \
+ echo Configuring stage feedback in $(TARGET_SUBDIR)/libgcc ; \
+ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \
+ cd $(TARGET_SUBDIR)/libgcc || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ *) topdir=`echo $(TARGET_SUBDIR)/libgcc/ | \
+ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ esac; \
+ srcdiroption="--srcdir=$${topdir}/libgcc"; \
+ libsrcdir="$$s/libgcc"; \
+ $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
+ --with-build-libsubdir=$(HOST_SUBDIR) \
+ @stage2_werror_flag@
+@endif target-libgcc-bootstrap
+
+
+
+
+
+.PHONY: all-target-libgcc maybe-all-target-libgcc
+maybe-all-target-libgcc:
+@if gcc-bootstrap
+all-target-libgcc: stage_current
+@endif gcc-bootstrap
+@if target-libgcc
+TARGET-target-libgcc=all
+maybe-all-target-libgcc: all-target-libgcc
+all-target-libgcc: configure-target-libgcc
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- (cd $(TARGET_SUBDIR)/newlib && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-newlib))
-@endif target-newlib
+ (cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-libgcc))
+@endif target-libgcc
+.PHONY: all-stage1-target-libgcc maybe-all-stage1-target-libgcc
+.PHONY: clean-stage1-target-libgcc maybe-clean-stage1-target-libgcc
+maybe-all-stage1-target-libgcc:
+maybe-clean-stage1-target-libgcc:
+@if target-libgcc-bootstrap
+maybe-all-stage1-target-libgcc: all-stage1-target-libgcc
+all-stage1: all-stage1-target-libgcc
+TARGET-stage1-target-libgcc = $(TARGET-target-libgcc)
+all-stage1-target-libgcc: configure-stage1-target-libgcc
+ @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) \
+ CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \
+ $(TARGET-stage1-target-libgcc)
+maybe-clean-stage1-target-libgcc: clean-stage1-target-libgcc
+clean-stage1: clean-stage1-target-libgcc
+clean-stage1-target-libgcc:
+ @if [ $(current_stage) = stage1 ]; then \
+ [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \
+ else \
+ [ -f $(TARGET_SUBDIR)/stage1-libgcc/Makefile ] || exit 0; \
+ $(MAKE) stage1-start; \
+ fi; \
+ cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) \
+ clean
+@endif target-libgcc-bootstrap
+
+
+.PHONY: all-stage2-target-libgcc maybe-all-stage2-target-libgcc
+.PHONY: clean-stage2-target-libgcc maybe-clean-stage2-target-libgcc
+maybe-all-stage2-target-libgcc:
+maybe-clean-stage2-target-libgcc:
+@if target-libgcc-bootstrap
+maybe-all-stage2-target-libgcc: all-stage2-target-libgcc
+all-stage2: all-stage2-target-libgcc
+TARGET-stage2-target-libgcc = $(TARGET-target-libgcc)
+all-stage2-target-libgcc: configure-stage2-target-libgcc
+ @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ \
+ cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" \
+ $(TARGET-stage2-target-libgcc)
-.PHONY: check-target-newlib maybe-check-target-newlib
-maybe-check-target-newlib:
-@if target-newlib
-maybe-check-target-newlib: check-target-newlib
+maybe-clean-stage2-target-libgcc: clean-stage2-target-libgcc
+clean-stage2: clean-stage2-target-libgcc
+clean-stage2-target-libgcc:
+ @if [ $(current_stage) = stage2 ]; then \
+ [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \
+ else \
+ [ -f $(TARGET_SUBDIR)/stage2-libgcc/Makefile ] || exit 0; \
+ $(MAKE) stage2-start; \
+ fi; \
+ cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) \
+ \
+ clean
+@endif target-libgcc-bootstrap
+
+
+.PHONY: all-stage3-target-libgcc maybe-all-stage3-target-libgcc
+.PHONY: clean-stage3-target-libgcc maybe-clean-stage3-target-libgcc
+maybe-all-stage3-target-libgcc:
+maybe-clean-stage3-target-libgcc:
+@if target-libgcc-bootstrap
+maybe-all-stage3-target-libgcc: all-stage3-target-libgcc
+all-stage3: all-stage3-target-libgcc
+TARGET-stage3-target-libgcc = $(TARGET-target-libgcc)
+all-stage3-target-libgcc: configure-stage3-target-libgcc
+ @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ \
+ cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" \
+ $(TARGET-stage3-target-libgcc)
-check-target-newlib:
- @: $(MAKE); $(unstage)
+maybe-clean-stage3-target-libgcc: clean-stage3-target-libgcc
+clean-stage3: clean-stage3-target-libgcc
+clean-stage3-target-libgcc:
+ @if [ $(current_stage) = stage3 ]; then \
+ [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \
+ else \
+ [ -f $(TARGET_SUBDIR)/stage3-libgcc/Makefile ] || exit 0; \
+ $(MAKE) stage3-start; \
+ fi; \
+ cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) \
+ \
+ clean
+@endif target-libgcc-bootstrap
+
+
+.PHONY: all-stage4-target-libgcc maybe-all-stage4-target-libgcc
+.PHONY: clean-stage4-target-libgcc maybe-clean-stage4-target-libgcc
+maybe-all-stage4-target-libgcc:
+maybe-clean-stage4-target-libgcc:
+@if target-libgcc-bootstrap
+maybe-all-stage4-target-libgcc: all-stage4-target-libgcc
+all-stage4: all-stage4-target-libgcc
+TARGET-stage4-target-libgcc = $(TARGET-target-libgcc)
+all-stage4-target-libgcc: configure-stage4-target-libgcc
+ @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- (cd $(TARGET_SUBDIR)/newlib && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
+ \
+ cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" \
+ $(TARGET-stage4-target-libgcc)
-@endif target-newlib
+maybe-clean-stage4-target-libgcc: clean-stage4-target-libgcc
+clean-stage4: clean-stage4-target-libgcc
+clean-stage4-target-libgcc:
+ @if [ $(current_stage) = stage4 ]; then \
+ [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \
+ else \
+ [ -f $(TARGET_SUBDIR)/stage4-libgcc/Makefile ] || exit 0; \
+ $(MAKE) stage4-start; \
+ fi; \
+ cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) \
+ \
+ clean
+@endif target-libgcc-bootstrap
+
+
+.PHONY: all-stageprofile-target-libgcc maybe-all-stageprofile-target-libgcc
+.PHONY: clean-stageprofile-target-libgcc maybe-clean-stageprofile-target-libgcc
+maybe-all-stageprofile-target-libgcc:
+maybe-clean-stageprofile-target-libgcc:
+@if target-libgcc-bootstrap
+maybe-all-stageprofile-target-libgcc: all-stageprofile-target-libgcc
+all-stageprofile: all-stageprofile-target-libgcc
+TARGET-stageprofile-target-libgcc = $(TARGET-target-libgcc)
+all-stageprofile-target-libgcc: configure-stageprofile-target-libgcc
+ @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ \
+ cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" \
+ $(TARGET-stageprofile-target-libgcc)
-.PHONY: install-target-newlib maybe-install-target-newlib
-maybe-install-target-newlib:
-@if target-newlib
-maybe-install-target-newlib: install-target-newlib
+maybe-clean-stageprofile-target-libgcc: clean-stageprofile-target-libgcc
+clean-stageprofile: clean-stageprofile-target-libgcc
+clean-stageprofile-target-libgcc:
+ @if [ $(current_stage) = stageprofile ]; then \
+ [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \
+ else \
+ [ -f $(TARGET_SUBDIR)/stageprofile-libgcc/Makefile ] || exit 0; \
+ $(MAKE) stageprofile-start; \
+ fi; \
+ cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) \
+ \
+ clean
+@endif target-libgcc-bootstrap
+
+
+.PHONY: all-stagefeedback-target-libgcc maybe-all-stagefeedback-target-libgcc
+.PHONY: clean-stagefeedback-target-libgcc maybe-clean-stagefeedback-target-libgcc
+maybe-all-stagefeedback-target-libgcc:
+maybe-clean-stagefeedback-target-libgcc:
+@if target-libgcc-bootstrap
+maybe-all-stagefeedback-target-libgcc: all-stagefeedback-target-libgcc
+all-stagefeedback: all-stagefeedback-target-libgcc
+TARGET-stagefeedback-target-libgcc = $(TARGET-target-libgcc)
+all-stagefeedback-target-libgcc: configure-stagefeedback-target-libgcc
+ @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ \
+ cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) \
+ CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" \
+ $(TARGET-stagefeedback-target-libgcc)
-install-target-newlib: installdirs
+maybe-clean-stagefeedback-target-libgcc: clean-stagefeedback-target-libgcc
+clean-stagefeedback: clean-stagefeedback-target-libgcc
+clean-stagefeedback-target-libgcc:
+ @if [ $(current_stage) = stagefeedback ]; then \
+ [ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \
+ else \
+ [ -f $(TARGET_SUBDIR)/stagefeedback-libgcc/Makefile ] || exit 0; \
+ $(MAKE) stagefeedback-start; \
+ fi; \
+ cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) \
+ \
+ clean
+@endif target-libgcc-bootstrap
+
+
+
+
+
+
+.PHONY: check-target-libgcc maybe-check-target-libgcc
+maybe-check-target-libgcc:
+@if target-libgcc
+maybe-check-target-libgcc: check-target-libgcc
+
+# Dummy target for uncheckable module.
+check-target-libgcc:
+
+@endif target-libgcc
+
+.PHONY: install-target-libgcc maybe-install-target-libgcc
+maybe-install-target-libgcc:
+@if target-libgcc
+maybe-install-target-libgcc: install-target-libgcc
+
+install-target-libgcc: installdirs
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- (cd $(TARGET_SUBDIR)/newlib && \
+ (cd $(TARGET_SUBDIR)/libgcc && \
$(MAKE) $(TARGET_FLAGS_TO_PASS) install)
-@endif target-newlib
+@endif target-libgcc
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
-.PHONY: maybe-info-target-newlib info-target-newlib
-maybe-info-target-newlib:
-@if target-newlib
-maybe-info-target-newlib: info-target-newlib
+.PHONY: maybe-info-target-libgcc info-target-libgcc
+maybe-info-target-libgcc:
+@if target-libgcc
+maybe-info-target-libgcc: info-target-libgcc
-info-target-newlib: \
- configure-target-newlib
+info-target-libgcc: \
+ configure-target-libgcc
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing info in $(TARGET_SUBDIR)/newlib" ; \
+ echo "Doing info in $(TARGET_SUBDIR)/libgcc" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/newlib && \
+ (cd $(TARGET_SUBDIR)/libgcc && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32715,25 +39905,25 @@ info-target-newlib: \
info) \
|| exit 1
-@endif target-newlib
+@endif target-libgcc
-.PHONY: maybe-dvi-target-newlib dvi-target-newlib
-maybe-dvi-target-newlib:
-@if target-newlib
-maybe-dvi-target-newlib: dvi-target-newlib
+.PHONY: maybe-dvi-target-libgcc dvi-target-libgcc
+maybe-dvi-target-libgcc:
+@if target-libgcc
+maybe-dvi-target-libgcc: dvi-target-libgcc
-dvi-target-newlib: \
- configure-target-newlib
+dvi-target-libgcc: \
+ configure-target-libgcc
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing dvi in $(TARGET_SUBDIR)/newlib" ; \
+ echo "Doing dvi in $(TARGET_SUBDIR)/libgcc" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/newlib && \
+ (cd $(TARGET_SUBDIR)/libgcc && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32741,25 +39931,51 @@ dvi-target-newlib: \
dvi) \
|| exit 1
-@endif target-newlib
+@endif target-libgcc
-.PHONY: maybe-html-target-newlib html-target-newlib
-maybe-html-target-newlib:
-@if target-newlib
-maybe-html-target-newlib: html-target-newlib
+.PHONY: maybe-pdf-target-libgcc pdf-target-libgcc
+maybe-pdf-target-libgcc:
+@if target-libgcc
+maybe-pdf-target-libgcc: pdf-target-libgcc
-html-target-newlib: \
- configure-target-newlib
+pdf-target-libgcc: \
+ configure-target-libgcc
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing html in $(TARGET_SUBDIR)/newlib" ; \
+ echo "Doing pdf in $(TARGET_SUBDIR)/libgcc" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/newlib && \
+ (cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-libgcc
+
+.PHONY: maybe-html-target-libgcc html-target-libgcc
+maybe-html-target-libgcc:
+@if target-libgcc
+maybe-html-target-libgcc: html-target-libgcc
+
+html-target-libgcc: \
+ configure-target-libgcc
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing html in $(TARGET_SUBDIR)/libgcc" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libgcc && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32767,25 +39983,25 @@ html-target-newlib: \
html) \
|| exit 1
-@endif target-newlib
+@endif target-libgcc
-.PHONY: maybe-TAGS-target-newlib TAGS-target-newlib
-maybe-TAGS-target-newlib:
-@if target-newlib
-maybe-TAGS-target-newlib: TAGS-target-newlib
+.PHONY: maybe-TAGS-target-libgcc TAGS-target-libgcc
+maybe-TAGS-target-libgcc:
+@if target-libgcc
+maybe-TAGS-target-libgcc: TAGS-target-libgcc
-TAGS-target-newlib: \
- configure-target-newlib
+TAGS-target-libgcc: \
+ configure-target-libgcc
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing TAGS in $(TARGET_SUBDIR)/newlib" ; \
+ echo "Doing TAGS in $(TARGET_SUBDIR)/libgcc" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/newlib && \
+ (cd $(TARGET_SUBDIR)/libgcc && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32793,26 +40009,26 @@ TAGS-target-newlib: \
TAGS) \
|| exit 1
-@endif target-newlib
+@endif target-libgcc
-.PHONY: maybe-install-info-target-newlib install-info-target-newlib
-maybe-install-info-target-newlib:
-@if target-newlib
-maybe-install-info-target-newlib: install-info-target-newlib
+.PHONY: maybe-install-info-target-libgcc install-info-target-libgcc
+maybe-install-info-target-libgcc:
+@if target-libgcc
+maybe-install-info-target-libgcc: install-info-target-libgcc
-install-info-target-newlib: \
- configure-target-newlib \
- info-target-newlib
+install-info-target-libgcc: \
+ configure-target-libgcc \
+ info-target-libgcc
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing install-info in $(TARGET_SUBDIR)/newlib" ; \
+ echo "Doing install-info in $(TARGET_SUBDIR)/libgcc" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/newlib && \
+ (cd $(TARGET_SUBDIR)/libgcc && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32820,26 +40036,53 @@ install-info-target-newlib: \
install-info) \
|| exit 1
-@endif target-newlib
+@endif target-libgcc
-.PHONY: maybe-install-html-target-newlib install-html-target-newlib
-maybe-install-html-target-newlib:
-@if target-newlib
-maybe-install-html-target-newlib: install-html-target-newlib
+.PHONY: maybe-install-pdf-target-libgcc install-pdf-target-libgcc
+maybe-install-pdf-target-libgcc:
+@if target-libgcc
+maybe-install-pdf-target-libgcc: install-pdf-target-libgcc
-install-html-target-newlib: \
- configure-target-newlib \
- html-target-newlib
+install-pdf-target-libgcc: \
+ configure-target-libgcc \
+ pdf-target-libgcc
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing install-html in $(TARGET_SUBDIR)/newlib" ; \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libgcc" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/newlib && \
+ (cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libgcc
+
+.PHONY: maybe-install-html-target-libgcc install-html-target-libgcc
+maybe-install-html-target-libgcc:
+@if target-libgcc
+maybe-install-html-target-libgcc: install-html-target-libgcc
+
+install-html-target-libgcc: \
+ configure-target-libgcc \
+ html-target-libgcc
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-html in $(TARGET_SUBDIR)/libgcc" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libgcc && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32847,25 +40090,25 @@ install-html-target-newlib: \
install-html) \
|| exit 1
-@endif target-newlib
+@endif target-libgcc
-.PHONY: maybe-installcheck-target-newlib installcheck-target-newlib
-maybe-installcheck-target-newlib:
-@if target-newlib
-maybe-installcheck-target-newlib: installcheck-target-newlib
+.PHONY: maybe-installcheck-target-libgcc installcheck-target-libgcc
+maybe-installcheck-target-libgcc:
+@if target-libgcc
+maybe-installcheck-target-libgcc: installcheck-target-libgcc
-installcheck-target-newlib: \
- configure-target-newlib
+installcheck-target-libgcc: \
+ configure-target-libgcc
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing installcheck in $(TARGET_SUBDIR)/newlib" ; \
+ echo "Doing installcheck in $(TARGET_SUBDIR)/libgcc" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/newlib && \
+ (cd $(TARGET_SUBDIR)/libgcc && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32873,24 +40116,24 @@ installcheck-target-newlib: \
installcheck) \
|| exit 1
-@endif target-newlib
+@endif target-libgcc
-.PHONY: maybe-mostlyclean-target-newlib mostlyclean-target-newlib
-maybe-mostlyclean-target-newlib:
-@if target-newlib
-maybe-mostlyclean-target-newlib: mostlyclean-target-newlib
+.PHONY: maybe-mostlyclean-target-libgcc mostlyclean-target-libgcc
+maybe-mostlyclean-target-libgcc:
+@if target-libgcc
+maybe-mostlyclean-target-libgcc: mostlyclean-target-libgcc
-mostlyclean-target-newlib:
+mostlyclean-target-libgcc:
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing mostlyclean in $(TARGET_SUBDIR)/newlib" ; \
+ echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgcc" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/newlib && \
+ (cd $(TARGET_SUBDIR)/libgcc && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32898,24 +40141,24 @@ mostlyclean-target-newlib:
mostlyclean) \
|| exit 1
-@endif target-newlib
+@endif target-libgcc
-.PHONY: maybe-clean-target-newlib clean-target-newlib
-maybe-clean-target-newlib:
-@if target-newlib
-maybe-clean-target-newlib: clean-target-newlib
+.PHONY: maybe-clean-target-libgcc clean-target-libgcc
+maybe-clean-target-libgcc:
+@if target-libgcc
+maybe-clean-target-libgcc: clean-target-libgcc
-clean-target-newlib:
+clean-target-libgcc:
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing clean in $(TARGET_SUBDIR)/newlib" ; \
+ echo "Doing clean in $(TARGET_SUBDIR)/libgcc" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/newlib && \
+ (cd $(TARGET_SUBDIR)/libgcc && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32923,24 +40166,24 @@ clean-target-newlib:
clean) \
|| exit 1
-@endif target-newlib
+@endif target-libgcc
-.PHONY: maybe-distclean-target-newlib distclean-target-newlib
-maybe-distclean-target-newlib:
-@if target-newlib
-maybe-distclean-target-newlib: distclean-target-newlib
+.PHONY: maybe-distclean-target-libgcc distclean-target-libgcc
+maybe-distclean-target-libgcc:
+@if target-libgcc
+maybe-distclean-target-libgcc: distclean-target-libgcc
-distclean-target-newlib:
+distclean-target-libgcc:
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing distclean in $(TARGET_SUBDIR)/newlib" ; \
+ echo "Doing distclean in $(TARGET_SUBDIR)/libgcc" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/newlib && \
+ (cd $(TARGET_SUBDIR)/libgcc && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32948,24 +40191,24 @@ distclean-target-newlib:
distclean) \
|| exit 1
-@endif target-newlib
+@endif target-libgcc
-.PHONY: maybe-maintainer-clean-target-newlib maintainer-clean-target-newlib
-maybe-maintainer-clean-target-newlib:
-@if target-newlib
-maybe-maintainer-clean-target-newlib: maintainer-clean-target-newlib
+.PHONY: maybe-maintainer-clean-target-libgcc maintainer-clean-target-libgcc
+maybe-maintainer-clean-target-libgcc:
+@if target-libgcc
+maybe-maintainer-clean-target-libgcc: maintainer-clean-target-libgcc
-maintainer-clean-target-newlib:
+maintainer-clean-target-libgcc:
@: $(MAKE); $(unstage)
- @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(NORMAL_TARGET_EXPORTS) \
- echo "Doing maintainer-clean in $(TARGET_SUBDIR)/newlib" ; \
+ echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgcc" ; \
for flag in $(EXTRA_TARGET_FLAGS); do \
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
done; \
- (cd $(TARGET_SUBDIR)/newlib && \
+ (cd $(TARGET_SUBDIR)/libgcc && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
"RANLIB=$${RANLIB}" \
@@ -32973,7 +40216,7 @@ maintainer-clean-target-newlib:
maintainer-clean) \
|| exit 1
-@endif target-newlib
+@endif target-libgcc
@@ -32981,6 +40224,9 @@ maintainer-clean-target-newlib:
.PHONY: configure-target-libgfortran maybe-configure-target-libgfortran
maybe-configure-target-libgfortran:
+@if gcc-bootstrap
+configure-target-libgfortran: stage_current
+@endif gcc-bootstrap
@if target-libgfortran
maybe-configure-target-libgfortran: configure-target-libgfortran
configure-target-libgfortran:
@@ -33014,7 +40260,8 @@ configure-target-libgfortran:
libsrcdir="$$s/libgfortran"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-libgfortran
@@ -33024,6 +40271,9 @@ configure-target-libgfortran:
.PHONY: all-target-libgfortran maybe-all-target-libgfortran
maybe-all-target-libgfortran:
+@if gcc-bootstrap
+all-target-libgfortran: stage_current
+@endif gcc-bootstrap
@if target-libgfortran
TARGET-target-libgfortran=all
maybe-all-target-libgfortran: all-target-libgfortran
@@ -33070,7 +40320,7 @@ install-target-libgfortran: installdirs
@endif target-libgfortran
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-libgfortran info-target-libgfortran
maybe-info-target-libgfortran:
@@ -33124,6 +40374,32 @@ dvi-target-libgfortran: \
@endif target-libgfortran
+.PHONY: maybe-pdf-target-libgfortran pdf-target-libgfortran
+maybe-pdf-target-libgfortran:
+@if target-libgfortran
+maybe-pdf-target-libgfortran: pdf-target-libgfortran
+
+pdf-target-libgfortran: \
+ configure-target-libgfortran
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/libgfortran" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libgfortran && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-libgfortran
+
.PHONY: maybe-html-target-libgfortran html-target-libgfortran
maybe-html-target-libgfortran:
@if target-libgfortran
@@ -33203,6 +40479,33 @@ install-info-target-libgfortran: \
@endif target-libgfortran
+.PHONY: maybe-install-pdf-target-libgfortran install-pdf-target-libgfortran
+maybe-install-pdf-target-libgfortran:
+@if target-libgfortran
+maybe-install-pdf-target-libgfortran: install-pdf-target-libgfortran
+
+install-pdf-target-libgfortran: \
+ configure-target-libgfortran \
+ pdf-target-libgfortran
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libgfortran" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libgfortran && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libgfortran
+
.PHONY: maybe-install-html-target-libgfortran install-html-target-libgfortran
maybe-install-html-target-libgfortran:
@if target-libgfortran
@@ -33362,6 +40665,9 @@ maintainer-clean-target-libgfortran:
.PHONY: configure-target-libobjc maybe-configure-target-libobjc
maybe-configure-target-libobjc:
+@if gcc-bootstrap
+configure-target-libobjc: stage_current
+@endif gcc-bootstrap
@if target-libobjc
maybe-configure-target-libobjc: configure-target-libobjc
configure-target-libobjc:
@@ -33395,7 +40701,8 @@ configure-target-libobjc:
libsrcdir="$$s/libobjc"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-libobjc
@@ -33405,6 +40712,9 @@ configure-target-libobjc:
.PHONY: all-target-libobjc maybe-all-target-libobjc
maybe-all-target-libobjc:
+@if gcc-bootstrap
+all-target-libobjc: stage_current
+@endif gcc-bootstrap
@if target-libobjc
TARGET-target-libobjc=all
maybe-all-target-libobjc: all-target-libobjc
@@ -33451,7 +40761,7 @@ install-target-libobjc: installdirs
@endif target-libobjc
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-libobjc info-target-libobjc
maybe-info-target-libobjc:
@@ -33505,6 +40815,32 @@ dvi-target-libobjc: \
@endif target-libobjc
+.PHONY: maybe-pdf-target-libobjc pdf-target-libobjc
+maybe-pdf-target-libobjc:
+@if target-libobjc
+maybe-pdf-target-libobjc: pdf-target-libobjc
+
+pdf-target-libobjc: \
+ configure-target-libobjc
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/libobjc" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libobjc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-libobjc
+
.PHONY: maybe-html-target-libobjc html-target-libobjc
maybe-html-target-libobjc:
@if target-libobjc
@@ -33584,6 +40920,33 @@ install-info-target-libobjc: \
@endif target-libobjc
+.PHONY: maybe-install-pdf-target-libobjc install-pdf-target-libobjc
+maybe-install-pdf-target-libobjc:
+@if target-libobjc
+maybe-install-pdf-target-libobjc: install-pdf-target-libobjc
+
+install-pdf-target-libobjc: \
+ configure-target-libobjc \
+ pdf-target-libobjc
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libobjc" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libobjc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libobjc
+
.PHONY: maybe-install-html-target-libobjc install-html-target-libobjc
maybe-install-html-target-libobjc:
@if target-libobjc
@@ -33743,6 +41106,9 @@ maintainer-clean-target-libobjc:
.PHONY: configure-target-libtermcap maybe-configure-target-libtermcap
maybe-configure-target-libtermcap:
+@if gcc-bootstrap
+configure-target-libtermcap: stage_current
+@endif gcc-bootstrap
@if target-libtermcap
maybe-configure-target-libtermcap: configure-target-libtermcap
configure-target-libtermcap:
@@ -33776,7 +41142,8 @@ configure-target-libtermcap:
libsrcdir="$$s/libtermcap"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-libtermcap
@@ -33786,6 +41153,9 @@ configure-target-libtermcap:
.PHONY: all-target-libtermcap maybe-all-target-libtermcap
maybe-all-target-libtermcap:
+@if gcc-bootstrap
+all-target-libtermcap: stage_current
+@endif gcc-bootstrap
@if target-libtermcap
TARGET-target-libtermcap=all
maybe-all-target-libtermcap: all-target-libtermcap
@@ -33827,7 +41197,7 @@ install-target-libtermcap: installdirs
@endif target-libtermcap
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-libtermcap info-target-libtermcap
maybe-info-target-libtermcap:
@@ -33881,6 +41251,32 @@ dvi-target-libtermcap: \
@endif target-libtermcap
+.PHONY: maybe-pdf-target-libtermcap pdf-target-libtermcap
+maybe-pdf-target-libtermcap:
+@if target-libtermcap
+maybe-pdf-target-libtermcap: pdf-target-libtermcap
+
+pdf-target-libtermcap: \
+ configure-target-libtermcap
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/libtermcap" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libtermcap && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-libtermcap
+
.PHONY: maybe-html-target-libtermcap html-target-libtermcap
maybe-html-target-libtermcap:
@if target-libtermcap
@@ -33960,6 +41356,33 @@ install-info-target-libtermcap: \
@endif target-libtermcap
+.PHONY: maybe-install-pdf-target-libtermcap install-pdf-target-libtermcap
+maybe-install-pdf-target-libtermcap:
+@if target-libtermcap
+maybe-install-pdf-target-libtermcap: install-pdf-target-libtermcap
+
+install-pdf-target-libtermcap: \
+ configure-target-libtermcap \
+ pdf-target-libtermcap
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libtermcap" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libtermcap && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libtermcap
+
.PHONY: maybe-install-html-target-libtermcap install-html-target-libtermcap
maybe-install-html-target-libtermcap:
@if target-libtermcap
@@ -34059,6 +41482,9 @@ maintainer-clean-target-libtermcap:
.PHONY: configure-target-winsup maybe-configure-target-winsup
maybe-configure-target-winsup:
+@if gcc-bootstrap
+configure-target-winsup: stage_current
+@endif gcc-bootstrap
@if target-winsup
maybe-configure-target-winsup: configure-target-winsup
configure-target-winsup:
@@ -34092,7 +41518,8 @@ configure-target-winsup:
libsrcdir="$$s/winsup"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-winsup
@@ -34102,6 +41529,9 @@ configure-target-winsup:
.PHONY: all-target-winsup maybe-all-target-winsup
maybe-all-target-winsup:
+@if gcc-bootstrap
+all-target-winsup: stage_current
+@endif gcc-bootstrap
@if target-winsup
TARGET-target-winsup=all
maybe-all-target-winsup: all-target-winsup
@@ -34148,7 +41578,7 @@ install-target-winsup: installdirs
@endif target-winsup
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-winsup info-target-winsup
maybe-info-target-winsup:
@@ -34202,6 +41632,32 @@ dvi-target-winsup: \
@endif target-winsup
+.PHONY: maybe-pdf-target-winsup pdf-target-winsup
+maybe-pdf-target-winsup:
+@if target-winsup
+maybe-pdf-target-winsup: pdf-target-winsup
+
+pdf-target-winsup: \
+ configure-target-winsup
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/winsup" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/winsup && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-winsup
+
.PHONY: maybe-html-target-winsup html-target-winsup
maybe-html-target-winsup:
@if target-winsup
@@ -34281,6 +41737,33 @@ install-info-target-winsup: \
@endif target-winsup
+.PHONY: maybe-install-pdf-target-winsup install-pdf-target-winsup
+maybe-install-pdf-target-winsup:
+@if target-winsup
+maybe-install-pdf-target-winsup: install-pdf-target-winsup
+
+install-pdf-target-winsup: \
+ configure-target-winsup \
+ pdf-target-winsup
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/winsup" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/winsup && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-winsup
+
.PHONY: maybe-install-html-target-winsup install-html-target-winsup
maybe-install-html-target-winsup:
@if target-winsup
@@ -34440,6 +41923,9 @@ maintainer-clean-target-winsup:
.PHONY: configure-target-libgloss maybe-configure-target-libgloss
maybe-configure-target-libgloss:
+@if gcc-bootstrap
+configure-target-libgloss: stage_current
+@endif gcc-bootstrap
@if target-libgloss
maybe-configure-target-libgloss: configure-target-libgloss
configure-target-libgloss:
@@ -34473,7 +41959,8 @@ configure-target-libgloss:
libsrcdir="$$s/libgloss"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-libgloss
@@ -34483,6 +41970,9 @@ configure-target-libgloss:
.PHONY: all-target-libgloss maybe-all-target-libgloss
maybe-all-target-libgloss:
+@if gcc-bootstrap
+all-target-libgloss: stage_current
+@endif gcc-bootstrap
@if target-libgloss
TARGET-target-libgloss=all
maybe-all-target-libgloss: all-target-libgloss
@@ -34524,7 +42014,7 @@ install-target-libgloss: installdirs
@endif target-libgloss
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-libgloss info-target-libgloss
maybe-info-target-libgloss:
@@ -34578,6 +42068,32 @@ dvi-target-libgloss: \
@endif target-libgloss
+.PHONY: maybe-pdf-target-libgloss pdf-target-libgloss
+maybe-pdf-target-libgloss:
+@if target-libgloss
+maybe-pdf-target-libgloss: pdf-target-libgloss
+
+pdf-target-libgloss: \
+ configure-target-libgloss
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/libgloss" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libgloss && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-libgloss
+
.PHONY: maybe-html-target-libgloss html-target-libgloss
maybe-html-target-libgloss:
@if target-libgloss
@@ -34657,6 +42173,33 @@ install-info-target-libgloss: \
@endif target-libgloss
+.PHONY: maybe-install-pdf-target-libgloss install-pdf-target-libgloss
+maybe-install-pdf-target-libgloss:
+@if target-libgloss
+maybe-install-pdf-target-libgloss: install-pdf-target-libgloss
+
+install-pdf-target-libgloss: \
+ configure-target-libgloss \
+ pdf-target-libgloss
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libgloss" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libgloss && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libgloss
+
.PHONY: maybe-install-html-target-libgloss install-html-target-libgloss
maybe-install-html-target-libgloss:
@if target-libgloss
@@ -34816,6 +42359,9 @@ maintainer-clean-target-libgloss:
.PHONY: configure-target-libiberty maybe-configure-target-libiberty
maybe-configure-target-libiberty:
+@if gcc-bootstrap
+configure-target-libiberty: stage_current
+@endif gcc-bootstrap
@if target-libiberty
maybe-configure-target-libiberty: configure-target-libiberty
configure-target-libiberty:
@@ -34849,7 +42395,8 @@ configure-target-libiberty:
libsrcdir="$$s/libiberty"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-libiberty
@@ -34859,6 +42406,9 @@ configure-target-libiberty:
.PHONY: all-target-libiberty maybe-all-target-libiberty
maybe-all-target-libiberty:
+@if gcc-bootstrap
+all-target-libiberty: stage_current
+@endif gcc-bootstrap
@if target-libiberty
TARGET-target-libiberty=all
maybe-all-target-libiberty: all-target-libiberty
@@ -34905,7 +42455,7 @@ install-target-libiberty: installdirs
@endif target-libiberty
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-libiberty info-target-libiberty
maybe-info-target-libiberty:
@@ -34959,6 +42509,32 @@ dvi-target-libiberty: \
@endif target-libiberty
+.PHONY: maybe-pdf-target-libiberty pdf-target-libiberty
+maybe-pdf-target-libiberty:
+@if target-libiberty
+maybe-pdf-target-libiberty: pdf-target-libiberty
+
+pdf-target-libiberty: \
+ configure-target-libiberty
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/libiberty" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libiberty && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-libiberty
+
.PHONY: maybe-html-target-libiberty html-target-libiberty
maybe-html-target-libiberty:
@if target-libiberty
@@ -35038,6 +42614,33 @@ install-info-target-libiberty: \
@endif target-libiberty
+.PHONY: maybe-install-pdf-target-libiberty install-pdf-target-libiberty
+maybe-install-pdf-target-libiberty:
+@if target-libiberty
+maybe-install-pdf-target-libiberty: install-pdf-target-libiberty
+
+install-pdf-target-libiberty: \
+ configure-target-libiberty \
+ pdf-target-libiberty
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libiberty" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libiberty && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libiberty
+
.PHONY: maybe-install-html-target-libiberty install-html-target-libiberty
maybe-install-html-target-libiberty:
@if target-libiberty
@@ -35197,6 +42800,9 @@ maintainer-clean-target-libiberty:
.PHONY: configure-target-gperf maybe-configure-target-gperf
maybe-configure-target-gperf:
+@if gcc-bootstrap
+configure-target-gperf: stage_current
+@endif gcc-bootstrap
@if target-gperf
maybe-configure-target-gperf: configure-target-gperf
configure-target-gperf:
@@ -35230,7 +42836,8 @@ configure-target-gperf:
libsrcdir="$$s/gperf"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-gperf
@@ -35240,6 +42847,9 @@ configure-target-gperf:
.PHONY: all-target-gperf maybe-all-target-gperf
maybe-all-target-gperf:
+@if gcc-bootstrap
+all-target-gperf: stage_current
+@endif gcc-bootstrap
@if target-gperf
TARGET-target-gperf=all
maybe-all-target-gperf: all-target-gperf
@@ -35286,7 +42896,7 @@ install-target-gperf: installdirs
@endif target-gperf
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-gperf info-target-gperf
maybe-info-target-gperf:
@@ -35340,6 +42950,32 @@ dvi-target-gperf: \
@endif target-gperf
+.PHONY: maybe-pdf-target-gperf pdf-target-gperf
+maybe-pdf-target-gperf:
+@if target-gperf
+maybe-pdf-target-gperf: pdf-target-gperf
+
+pdf-target-gperf: \
+ configure-target-gperf
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/gperf" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/gperf && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-gperf
+
.PHONY: maybe-html-target-gperf html-target-gperf
maybe-html-target-gperf:
@if target-gperf
@@ -35419,6 +43055,33 @@ install-info-target-gperf: \
@endif target-gperf
+.PHONY: maybe-install-pdf-target-gperf install-pdf-target-gperf
+maybe-install-pdf-target-gperf:
+@if target-gperf
+maybe-install-pdf-target-gperf: install-pdf-target-gperf
+
+install-pdf-target-gperf: \
+ configure-target-gperf \
+ pdf-target-gperf
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/gperf" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/gperf && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-gperf
+
.PHONY: maybe-install-html-target-gperf install-html-target-gperf
maybe-install-html-target-gperf:
@if target-gperf
@@ -35578,6 +43241,9 @@ maintainer-clean-target-gperf:
.PHONY: configure-target-examples maybe-configure-target-examples
maybe-configure-target-examples:
+@if gcc-bootstrap
+configure-target-examples: stage_current
+@endif gcc-bootstrap
@if target-examples
maybe-configure-target-examples: configure-target-examples
configure-target-examples:
@@ -35611,7 +43277,8 @@ configure-target-examples:
libsrcdir="$$s/examples"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-examples
@@ -35621,6 +43288,9 @@ configure-target-examples:
.PHONY: all-target-examples maybe-all-target-examples
maybe-all-target-examples:
+@if gcc-bootstrap
+all-target-examples: stage_current
+@endif gcc-bootstrap
@if target-examples
TARGET-target-examples=all
maybe-all-target-examples: all-target-examples
@@ -35657,7 +43327,7 @@ install-target-examples:
@endif target-examples
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-examples info-target-examples
maybe-info-target-examples:
@@ -35711,6 +43381,32 @@ dvi-target-examples: \
@endif target-examples
+.PHONY: maybe-pdf-target-examples pdf-target-examples
+maybe-pdf-target-examples:
+@if target-examples
+maybe-pdf-target-examples: pdf-target-examples
+
+pdf-target-examples: \
+ configure-target-examples
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/examples" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/examples && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-examples
+
.PHONY: maybe-html-target-examples html-target-examples
maybe-html-target-examples:
@if target-examples
@@ -35790,6 +43486,33 @@ install-info-target-examples: \
@endif target-examples
+.PHONY: maybe-install-pdf-target-examples install-pdf-target-examples
+maybe-install-pdf-target-examples:
+@if target-examples
+maybe-install-pdf-target-examples: install-pdf-target-examples
+
+install-pdf-target-examples: \
+ configure-target-examples \
+ pdf-target-examples
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/examples" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/examples && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-examples
+
.PHONY: maybe-install-html-target-examples install-html-target-examples
maybe-install-html-target-examples:
@if target-examples
@@ -35949,6 +43672,9 @@ maintainer-clean-target-examples:
.PHONY: configure-target-libffi maybe-configure-target-libffi
maybe-configure-target-libffi:
+@if gcc-bootstrap
+configure-target-libffi: stage_current
+@endif gcc-bootstrap
@if target-libffi
maybe-configure-target-libffi: configure-target-libffi
configure-target-libffi:
@@ -35982,7 +43708,8 @@ configure-target-libffi:
libsrcdir="$$s/libffi"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-libffi
@@ -35992,6 +43719,9 @@ configure-target-libffi:
.PHONY: all-target-libffi maybe-all-target-libffi
maybe-all-target-libffi:
+@if gcc-bootstrap
+all-target-libffi: stage_current
+@endif gcc-bootstrap
@if target-libffi
TARGET-target-libffi=all
maybe-all-target-libffi: all-target-libffi
@@ -36038,7 +43768,7 @@ install-target-libffi: installdirs
@endif target-libffi
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-libffi info-target-libffi
maybe-info-target-libffi:
@@ -36092,6 +43822,32 @@ dvi-target-libffi: \
@endif target-libffi
+.PHONY: maybe-pdf-target-libffi pdf-target-libffi
+maybe-pdf-target-libffi:
+@if target-libffi
+maybe-pdf-target-libffi: pdf-target-libffi
+
+pdf-target-libffi: \
+ configure-target-libffi
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/libffi" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libffi && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-libffi
+
.PHONY: maybe-html-target-libffi html-target-libffi
maybe-html-target-libffi:
@if target-libffi
@@ -36171,6 +43927,33 @@ install-info-target-libffi: \
@endif target-libffi
+.PHONY: maybe-install-pdf-target-libffi install-pdf-target-libffi
+maybe-install-pdf-target-libffi:
+@if target-libffi
+maybe-install-pdf-target-libffi: install-pdf-target-libffi
+
+install-pdf-target-libffi: \
+ configure-target-libffi \
+ pdf-target-libffi
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libffi" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libffi && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libffi
+
.PHONY: maybe-install-html-target-libffi install-html-target-libffi
maybe-install-html-target-libffi:
@if target-libffi
@@ -36330,6 +44113,9 @@ maintainer-clean-target-libffi:
.PHONY: configure-target-libjava maybe-configure-target-libjava
maybe-configure-target-libjava:
+@if gcc-bootstrap
+configure-target-libjava: stage_current
+@endif gcc-bootstrap
@if target-libjava
maybe-configure-target-libjava: configure-target-libjava
configure-target-libjava:
@@ -36363,7 +44149,8 @@ configure-target-libjava:
libsrcdir="$$s/libjava"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-libjava
@@ -36373,6 +44160,9 @@ configure-target-libjava:
.PHONY: all-target-libjava maybe-all-target-libjava
maybe-all-target-libjava:
+@if gcc-bootstrap
+all-target-libjava: stage_current
+@endif gcc-bootstrap
@if target-libjava
TARGET-target-libjava=all
maybe-all-target-libjava: all-target-libjava
@@ -36419,7 +44209,7 @@ install-target-libjava: installdirs
@endif target-libjava
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-libjava info-target-libjava
maybe-info-target-libjava:
@@ -36473,6 +44263,32 @@ dvi-target-libjava: \
@endif target-libjava
+.PHONY: maybe-pdf-target-libjava pdf-target-libjava
+maybe-pdf-target-libjava:
+@if target-libjava
+maybe-pdf-target-libjava: pdf-target-libjava
+
+pdf-target-libjava: \
+ configure-target-libjava
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(RAW_CXX_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/libjava" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libjava && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-libjava
+
.PHONY: maybe-html-target-libjava html-target-libjava
maybe-html-target-libjava:
@if target-libjava
@@ -36552,6 +44368,33 @@ install-info-target-libjava: \
@endif target-libjava
+.PHONY: maybe-install-pdf-target-libjava install-pdf-target-libjava
+maybe-install-pdf-target-libjava:
+@if target-libjava
+maybe-install-pdf-target-libjava: install-pdf-target-libjava
+
+install-pdf-target-libjava: \
+ configure-target-libjava \
+ pdf-target-libjava
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(RAW_CXX_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libjava" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libjava && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libjava
+
.PHONY: maybe-install-html-target-libjava install-html-target-libjava
maybe-install-html-target-libjava:
@if target-libjava
@@ -36711,6 +44554,9 @@ maintainer-clean-target-libjava:
.PHONY: configure-target-zlib maybe-configure-target-zlib
maybe-configure-target-zlib:
+@if gcc-bootstrap
+configure-target-zlib: stage_current
+@endif gcc-bootstrap
@if target-zlib
maybe-configure-target-zlib: configure-target-zlib
configure-target-zlib:
@@ -36744,7 +44590,8 @@ configure-target-zlib:
libsrcdir="$$s/zlib"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-zlib
@@ -36754,6 +44601,9 @@ configure-target-zlib:
.PHONY: all-target-zlib maybe-all-target-zlib
maybe-all-target-zlib:
+@if gcc-bootstrap
+all-target-zlib: stage_current
+@endif gcc-bootstrap
@if target-zlib
TARGET-target-zlib=all
maybe-all-target-zlib: all-target-zlib
@@ -36800,7 +44650,7 @@ install-target-zlib: installdirs
@endif target-zlib
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-zlib info-target-zlib
maybe-info-target-zlib:
@@ -36854,6 +44704,32 @@ dvi-target-zlib: \
@endif target-zlib
+.PHONY: maybe-pdf-target-zlib pdf-target-zlib
+maybe-pdf-target-zlib:
+@if target-zlib
+maybe-pdf-target-zlib: pdf-target-zlib
+
+pdf-target-zlib: \
+ configure-target-zlib
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/zlib" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/zlib && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-zlib
+
.PHONY: maybe-html-target-zlib html-target-zlib
maybe-html-target-zlib:
@if target-zlib
@@ -36933,6 +44809,33 @@ install-info-target-zlib: \
@endif target-zlib
+.PHONY: maybe-install-pdf-target-zlib install-pdf-target-zlib
+maybe-install-pdf-target-zlib:
+@if target-zlib
+maybe-install-pdf-target-zlib: install-pdf-target-zlib
+
+install-pdf-target-zlib: \
+ configure-target-zlib \
+ pdf-target-zlib
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/zlib" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/zlib && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-zlib
+
.PHONY: maybe-install-html-target-zlib install-html-target-zlib
maybe-install-html-target-zlib:
@if target-zlib
@@ -37092,6 +44995,9 @@ maintainer-clean-target-zlib:
.PHONY: configure-target-boehm-gc maybe-configure-target-boehm-gc
maybe-configure-target-boehm-gc:
+@if gcc-bootstrap
+configure-target-boehm-gc: stage_current
+@endif gcc-bootstrap
@if target-boehm-gc
maybe-configure-target-boehm-gc: configure-target-boehm-gc
configure-target-boehm-gc:
@@ -37125,7 +45031,8 @@ configure-target-boehm-gc:
libsrcdir="$$s/boehm-gc"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-boehm-gc
@@ -37135,6 +45042,9 @@ configure-target-boehm-gc:
.PHONY: all-target-boehm-gc maybe-all-target-boehm-gc
maybe-all-target-boehm-gc:
+@if gcc-bootstrap
+all-target-boehm-gc: stage_current
+@endif gcc-bootstrap
@if target-boehm-gc
TARGET-target-boehm-gc=all
maybe-all-target-boehm-gc: all-target-boehm-gc
@@ -37181,7 +45091,7 @@ install-target-boehm-gc: installdirs
@endif target-boehm-gc
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-boehm-gc info-target-boehm-gc
maybe-info-target-boehm-gc:
@@ -37235,6 +45145,32 @@ dvi-target-boehm-gc: \
@endif target-boehm-gc
+.PHONY: maybe-pdf-target-boehm-gc pdf-target-boehm-gc
+maybe-pdf-target-boehm-gc:
+@if target-boehm-gc
+maybe-pdf-target-boehm-gc: pdf-target-boehm-gc
+
+pdf-target-boehm-gc: \
+ configure-target-boehm-gc
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/boehm-gc" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/boehm-gc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-boehm-gc
+
.PHONY: maybe-html-target-boehm-gc html-target-boehm-gc
maybe-html-target-boehm-gc:
@if target-boehm-gc
@@ -37314,6 +45250,33 @@ install-info-target-boehm-gc: \
@endif target-boehm-gc
+.PHONY: maybe-install-pdf-target-boehm-gc install-pdf-target-boehm-gc
+maybe-install-pdf-target-boehm-gc:
+@if target-boehm-gc
+maybe-install-pdf-target-boehm-gc: install-pdf-target-boehm-gc
+
+install-pdf-target-boehm-gc: \
+ configure-target-boehm-gc \
+ pdf-target-boehm-gc
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/boehm-gc" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/boehm-gc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-boehm-gc
+
.PHONY: maybe-install-html-target-boehm-gc install-html-target-boehm-gc
maybe-install-html-target-boehm-gc:
@if target-boehm-gc
@@ -37473,6 +45436,9 @@ maintainer-clean-target-boehm-gc:
.PHONY: configure-target-qthreads maybe-configure-target-qthreads
maybe-configure-target-qthreads:
+@if gcc-bootstrap
+configure-target-qthreads: stage_current
+@endif gcc-bootstrap
@if target-qthreads
maybe-configure-target-qthreads: configure-target-qthreads
configure-target-qthreads:
@@ -37506,7 +45472,8 @@ configure-target-qthreads:
libsrcdir="$$s/qthreads"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-qthreads
@@ -37516,6 +45483,9 @@ configure-target-qthreads:
.PHONY: all-target-qthreads maybe-all-target-qthreads
maybe-all-target-qthreads:
+@if gcc-bootstrap
+all-target-qthreads: stage_current
+@endif gcc-bootstrap
@if target-qthreads
TARGET-target-qthreads=all
maybe-all-target-qthreads: all-target-qthreads
@@ -37562,7 +45532,7 @@ install-target-qthreads: installdirs
@endif target-qthreads
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-qthreads info-target-qthreads
maybe-info-target-qthreads:
@@ -37616,6 +45586,32 @@ dvi-target-qthreads: \
@endif target-qthreads
+.PHONY: maybe-pdf-target-qthreads pdf-target-qthreads
+maybe-pdf-target-qthreads:
+@if target-qthreads
+maybe-pdf-target-qthreads: pdf-target-qthreads
+
+pdf-target-qthreads: \
+ configure-target-qthreads
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/qthreads" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/qthreads && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-qthreads
+
.PHONY: maybe-html-target-qthreads html-target-qthreads
maybe-html-target-qthreads:
@if target-qthreads
@@ -37695,6 +45691,33 @@ install-info-target-qthreads: \
@endif target-qthreads
+.PHONY: maybe-install-pdf-target-qthreads install-pdf-target-qthreads
+maybe-install-pdf-target-qthreads:
+@if target-qthreads
+maybe-install-pdf-target-qthreads: install-pdf-target-qthreads
+
+install-pdf-target-qthreads: \
+ configure-target-qthreads \
+ pdf-target-qthreads
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/qthreads" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/qthreads && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-qthreads
+
.PHONY: maybe-install-html-target-qthreads install-html-target-qthreads
maybe-install-html-target-qthreads:
@if target-qthreads
@@ -37854,6 +45877,9 @@ maintainer-clean-target-qthreads:
.PHONY: configure-target-rda maybe-configure-target-rda
maybe-configure-target-rda:
+@if gcc-bootstrap
+configure-target-rda: stage_current
+@endif gcc-bootstrap
@if target-rda
maybe-configure-target-rda: configure-target-rda
configure-target-rda:
@@ -37887,7 +45913,8 @@ configure-target-rda:
libsrcdir="$$s/rda"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-rda
@@ -37897,6 +45924,9 @@ configure-target-rda:
.PHONY: all-target-rda maybe-all-target-rda
maybe-all-target-rda:
+@if gcc-bootstrap
+all-target-rda: stage_current
+@endif gcc-bootstrap
@if target-rda
TARGET-target-rda=all
maybe-all-target-rda: all-target-rda
@@ -37943,7 +45973,7 @@ install-target-rda: installdirs
@endif target-rda
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-rda info-target-rda
maybe-info-target-rda:
@@ -37997,6 +46027,32 @@ dvi-target-rda: \
@endif target-rda
+.PHONY: maybe-pdf-target-rda pdf-target-rda
+maybe-pdf-target-rda:
+@if target-rda
+maybe-pdf-target-rda: pdf-target-rda
+
+pdf-target-rda: \
+ configure-target-rda
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/rda" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/rda && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-rda
+
.PHONY: maybe-html-target-rda html-target-rda
maybe-html-target-rda:
@if target-rda
@@ -38076,6 +46132,33 @@ install-info-target-rda: \
@endif target-rda
+.PHONY: maybe-install-pdf-target-rda install-pdf-target-rda
+maybe-install-pdf-target-rda:
+@if target-rda
+maybe-install-pdf-target-rda: install-pdf-target-rda
+
+install-pdf-target-rda: \
+ configure-target-rda \
+ pdf-target-rda
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/rda" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/rda && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-rda
+
.PHONY: maybe-install-html-target-rda install-html-target-rda
maybe-install-html-target-rda:
@if target-rda
@@ -38235,6 +46318,9 @@ maintainer-clean-target-rda:
.PHONY: configure-target-libada maybe-configure-target-libada
maybe-configure-target-libada:
+@if gcc-bootstrap
+configure-target-libada: stage_current
+@endif gcc-bootstrap
@if target-libada
maybe-configure-target-libada: configure-target-libada
configure-target-libada:
@@ -38268,7 +46354,8 @@ configure-target-libada:
libsrcdir="$$s/libada"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-libada
@@ -38278,6 +46365,9 @@ configure-target-libada:
.PHONY: all-target-libada maybe-all-target-libada
maybe-all-target-libada:
+@if gcc-bootstrap
+all-target-libada: stage_current
+@endif gcc-bootstrap
@if target-libada
TARGET-target-libada=all
maybe-all-target-libada: all-target-libada
@@ -38324,7 +46414,7 @@ install-target-libada: installdirs
@endif target-libada
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-libada info-target-libada
maybe-info-target-libada:
@@ -38378,6 +46468,32 @@ dvi-target-libada: \
@endif target-libada
+.PHONY: maybe-pdf-target-libada pdf-target-libada
+maybe-pdf-target-libada:
+@if target-libada
+maybe-pdf-target-libada: pdf-target-libada
+
+pdf-target-libada: \
+ configure-target-libada
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/libada" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libada && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-libada
+
.PHONY: maybe-html-target-libada html-target-libada
maybe-html-target-libada:
@if target-libada
@@ -38457,6 +46573,33 @@ install-info-target-libada: \
@endif target-libada
+.PHONY: maybe-install-pdf-target-libada install-pdf-target-libada
+maybe-install-pdf-target-libada:
+@if target-libada
+maybe-install-pdf-target-libada: install-pdf-target-libada
+
+install-pdf-target-libada: \
+ configure-target-libada \
+ pdf-target-libada
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libada" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libada && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libada
+
.PHONY: maybe-install-html-target-libada install-html-target-libada
maybe-install-html-target-libada:
@if target-libada
@@ -38616,6 +46759,9 @@ maintainer-clean-target-libada:
.PHONY: configure-target-libgomp maybe-configure-target-libgomp
maybe-configure-target-libgomp:
+@if gcc-bootstrap
+configure-target-libgomp: stage_current
+@endif gcc-bootstrap
@if target-libgomp
maybe-configure-target-libgomp: configure-target-libgomp
configure-target-libgomp:
@@ -38649,7 +46795,8 @@ configure-target-libgomp:
libsrcdir="$$s/libgomp"; \
rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ --target=${target_alias} $${srcdiroption} \
|| exit 1
@endif target-libgomp
@@ -38659,6 +46806,9 @@ configure-target-libgomp:
.PHONY: all-target-libgomp maybe-all-target-libgomp
maybe-all-target-libgomp:
+@if gcc-bootstrap
+all-target-libgomp: stage_current
+@endif gcc-bootstrap
@if target-libgomp
TARGET-target-libgomp=all
maybe-all-target-libgomp: all-target-libgomp
@@ -38705,7 +46855,7 @@ install-target-libgomp: installdirs
@endif target-libgomp
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
.PHONY: maybe-info-target-libgomp info-target-libgomp
maybe-info-target-libgomp:
@@ -38759,6 +46909,32 @@ dvi-target-libgomp: \
@endif target-libgomp
+.PHONY: maybe-pdf-target-libgomp pdf-target-libgomp
+maybe-pdf-target-libgomp:
+@if target-libgomp
+maybe-pdf-target-libgomp: pdf-target-libgomp
+
+pdf-target-libgomp: \
+ configure-target-libgomp
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing pdf in $(TARGET_SUBDIR)/libgomp" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libgomp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
+
+@endif target-libgomp
+
.PHONY: maybe-html-target-libgomp html-target-libgomp
maybe-html-target-libgomp:
@if target-libgomp
@@ -38838,6 +47014,33 @@ install-info-target-libgomp: \
@endif target-libgomp
+.PHONY: maybe-install-pdf-target-libgomp install-pdf-target-libgomp
+maybe-install-pdf-target-libgomp:
+@if target-libgomp
+maybe-install-pdf-target-libgomp: install-pdf-target-libgomp
+
+install-pdf-target-libgomp: \
+ configure-target-libgomp \
+ pdf-target-libgomp
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libgomp" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libgomp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libgomp
+
.PHONY: maybe-install-html-target-libgomp install-html-target-libgomp
maybe-install-html-target-libgomp:
@if target-libgomp
@@ -38998,60 +47201,6 @@ maintainer-clean-target-libgomp:
# ----------
@if gcc-no-bootstrap
-# GCC has some more recursive targets, which trigger the old
-# (but still current, until the toplevel bootstrap project
-# is finished) compiler bootstrapping rules.
-
-GCC_STRAP_TARGETS = bootstrap bootstrap-lean bootstrap2 bootstrap2-lean bootstrap3 bootstrap3-lean bootstrap4 bootstrap4-lean bubblestrap quickstrap cleanstrap restrap
-.PHONY: $(GCC_STRAP_TARGETS)
-$(GCC_STRAP_TARGETS): all-prebootstrap configure-gcc
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- $(HOST_EXPORTS) \
- echo "Bootstrapping the compiler"; \
- $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,:[ :]*,:,g;s,^[ :]*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
- cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $@
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- case "$@" in \
- *bootstrap4-lean ) \
- msg="Comparing stage3 and stage4 of the compiler"; \
- compare=compare3-lean ;; \
- *bootstrap4 ) \
- msg="Comparing stage3 and stage4 of the compiler"; \
- compare=compare3 ;; \
- *-lean ) \
- msg="Comparing stage2 and stage3 of the compiler"; \
- compare=compare-lean ;; \
- * ) \
- msg="Comparing stage2 and stage3 of the compiler"; \
- compare=compare ;; \
- esac; \
- $(HOST_EXPORTS) \
- echo "$$msg"; \
- cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $$compare
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
- echo "Building runtime libraries"; \
- $(MAKE) $(RECURSE_FLAGS_TO_PASS) all
-
-profiledbootstrap: all-prebootstrap configure-gcc
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- $(HOST_EXPORTS) \
- $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,:[ :]*,:,g;s,^[ :]*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
- echo "Bootstrapping training compiler"; \
- cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stageprofile_build
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- $(HOST_EXPORTS) \
- echo "Building feedback based compiler"; \
- cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stagefeedback_build
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
- echo "Building runtime libraries"; \
- $(MAKE) $(RECURSE_FLAGS_TO_PASS) all
-
.PHONY: cross
cross: all-build all-gas all-ld
@r=`${PWD_COMMAND}`; export r; \
@@ -39121,7 +47270,7 @@ stage = :
current_stage = ""
@if gcc-bootstrap
-unstage = [ -f stage_current ] || $(MAKE) `cat stage_last`-start
+unstage = if [ -f stage_last ]; then [ -f stage_current ] || $(MAKE) `cat stage_last`-start || exit 1; else :; fi
stage = if [ -f stage_current ]; then $(MAKE) `cat stage_current`-end || exit 1; else :; fi
current_stage = "`cat stage_current 2> /dev/null`"
@endif gcc-bootstrap
@@ -39149,36 +47298,9 @@ LEAN = false
# 'touch' doesn't work right on some platforms.
STAMP = echo timestamp >
-# Only build the C compiler for stage1, because that is the only one that
-# we can guarantee will build with the native compiler, and also it is the
-# only thing useful for building stage2. STAGE1_CFLAGS (via CFLAGS),
-# MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
-# overrideable (for a bootstrap build stage1 also builds gcc.info).
-
-STAGE1_CFLAGS=@stage1_cflags@
-STAGE1_LANGUAGES=@stage1_languages@
-
# We only want to compare .o files, so set this!
objext = .o
-# Flags to pass to stage2 and later makes.
-POSTSTAGE1_FLAGS_TO_PASS = \
- CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
- STAGE_PREFIX=$$r/prev-gcc/ \
- CFLAGS="$(BOOT_CFLAGS)" \
- LIBCFLAGS="$(BOOT_CFLAGS)" \
- LDFLAGS="$(BOOT_LDFLAGS)" \
- ADAC="\$$(CC)"
-
-# For stage 1:
-# * We force-disable intermodule optimizations, even if
-# --enable-intermodule was passed, since the installed compiler probably
-# can't handle them. Luckily, autoconf always respects
-# the last argument when conflicting --enable arguments are passed.
-# * Likewise, we force-disable coverage flags, since the installed compiler
-# probably has never heard of them.
-# * We build only C (and possibly Ada).
-
.PHONY: stage1-start stage1-end
@@ -39212,6 +47334,16 @@ stage1-start::
mkdir stage1-gcc; \
mv stage1-gcc gcc
@endif gcc
+@if gmp
+ @cd $(HOST_SUBDIR); [ -d stage1-gmp ] || \
+ mkdir stage1-gmp; \
+ mv stage1-gmp gmp
+@endif gmp
+@if mpfr
+ @cd $(HOST_SUBDIR); [ -d stage1-mpfr ] || \
+ mkdir stage1-mpfr; \
+ mv stage1-mpfr mpfr
+@endif mpfr
@if intl
@cd $(HOST_SUBDIR); [ -d stage1-intl ] || \
mkdir stage1-intl; \
@@ -39272,6 +47404,16 @@ stage1-end::
cd $(HOST_SUBDIR); mv gcc stage1-gcc ; \
fi
@endif gcc
+@if gmp
+ @if test -d $(HOST_SUBDIR)/gmp ; then \
+ cd $(HOST_SUBDIR); mv gmp stage1-gmp ; \
+ fi
+@endif gmp
+@if mpfr
+ @if test -d $(HOST_SUBDIR)/mpfr ; then \
+ cd $(HOST_SUBDIR); mv mpfr stage1-mpfr ; \
+ fi
+@endif mpfr
@if intl
@if test -d $(HOST_SUBDIR)/intl ; then \
cd $(HOST_SUBDIR); mv intl stage1-intl ; \
@@ -39307,7 +47449,7 @@ stage1-end::
fi
rm -f stage_current
-# Bubble a bugfix through all the stages up to stage 1. They are
+# Bubble a bug fix through all the stages up to stage 1. They are
# remade, but not reconfigured. The next stage (if any) will not be
# reconfigured as well.
.PHONY: stage1-bubble
@@ -39336,6 +47478,7 @@ do-clean: clean-stage1
.PHONY: distclean-stage1
distclean-stage1::
@: $(MAKE); $(stage)
+ @test "`cat stage_last`" != stage1 || rm -f stage_last
rm -rf stage1-*
@@ -39379,6 +47522,18 @@ stage2-start::
mv stage2-gcc gcc ; \
mv stage1-gcc prev-gcc || test -f stage1-lean
@endif gcc
+@if gmp
+ @cd $(HOST_SUBDIR); [ -d stage2-gmp ] || \
+ mkdir stage2-gmp; \
+ mv stage2-gmp gmp ; \
+ mv stage1-gmp prev-gmp || test -f stage1-lean
+@endif gmp
+@if mpfr
+ @cd $(HOST_SUBDIR); [ -d stage2-mpfr ] || \
+ mkdir stage2-mpfr; \
+ mv stage2-mpfr mpfr ; \
+ mv stage1-mpfr prev-mpfr || test -f stage1-lean
+@endif mpfr
@if intl
@cd $(HOST_SUBDIR); [ -d stage2-intl ] || \
mkdir stage2-intl; \
@@ -39451,6 +47606,18 @@ stage2-end::
mv prev-gcc stage1-gcc ; : ; \
fi
@endif gcc
+@if gmp
+ @if test -d $(HOST_SUBDIR)/gmp ; then \
+ cd $(HOST_SUBDIR); mv gmp stage2-gmp ; \
+ mv prev-gmp stage1-gmp ; : ; \
+ fi
+@endif gmp
+@if mpfr
+ @if test -d $(HOST_SUBDIR)/mpfr ; then \
+ cd $(HOST_SUBDIR); mv mpfr stage2-mpfr ; \
+ mv prev-mpfr stage1-mpfr ; : ; \
+ fi
+@endif mpfr
@if intl
@if test -d $(HOST_SUBDIR)/intl ; then \
cd $(HOST_SUBDIR); mv intl stage2-intl ; \
@@ -39493,7 +47660,7 @@ stage2-end::
fi
rm -f stage_current
-# Bubble a bugfix through all the stages up to stage 2. They are
+# Bubble a bug fix through all the stages up to stage 2. They are
# remade, but not reconfigured. The next stage (if any) will not be
# reconfigured as well.
.PHONY: stage2-bubble
@@ -39543,6 +47710,7 @@ distclean-stage1:: distclean-stage2
.PHONY: distclean-stage2
distclean-stage2::
@: $(MAKE); $(stage)
+ @test "`cat stage_last`" != stage2 || rm -f stage_last
rm -rf stage2-*
@@ -39586,6 +47754,18 @@ stage3-start::
mv stage3-gcc gcc ; \
mv stage2-gcc prev-gcc || test -f stage2-lean
@endif gcc
+@if gmp
+ @cd $(HOST_SUBDIR); [ -d stage3-gmp ] || \
+ mkdir stage3-gmp; \
+ mv stage3-gmp gmp ; \
+ mv stage2-gmp prev-gmp || test -f stage2-lean
+@endif gmp
+@if mpfr
+ @cd $(HOST_SUBDIR); [ -d stage3-mpfr ] || \
+ mkdir stage3-mpfr; \
+ mv stage3-mpfr mpfr ; \
+ mv stage2-mpfr prev-mpfr || test -f stage2-lean
+@endif mpfr
@if intl
@cd $(HOST_SUBDIR); [ -d stage3-intl ] || \
mkdir stage3-intl; \
@@ -39658,6 +47838,18 @@ stage3-end::
mv prev-gcc stage2-gcc ; : ; \
fi
@endif gcc
+@if gmp
+ @if test -d $(HOST_SUBDIR)/gmp ; then \
+ cd $(HOST_SUBDIR); mv gmp stage3-gmp ; \
+ mv prev-gmp stage2-gmp ; : ; \
+ fi
+@endif gmp
+@if mpfr
+ @if test -d $(HOST_SUBDIR)/mpfr ; then \
+ cd $(HOST_SUBDIR); mv mpfr stage3-mpfr ; \
+ mv prev-mpfr stage2-mpfr ; : ; \
+ fi
+@endif mpfr
@if intl
@if test -d $(HOST_SUBDIR)/intl ; then \
cd $(HOST_SUBDIR); mv intl stage3-intl ; \
@@ -39700,7 +47892,7 @@ stage3-end::
fi
rm -f stage_current
-# Bubble a bugfix through all the stages up to stage 3. They are
+# Bubble a bug fix through all the stages up to stage 3. They are
# remade, but not reconfigured. The next stage (if any) will not be
# reconfigured as well.
.PHONY: stage3-bubble
@@ -39793,11 +47985,20 @@ distclean-stage2:: distclean-stage3
.PHONY: distclean-stage3
distclean-stage3::
@: $(MAKE); $(stage)
+ @test "`cat stage_last`" != stage3 || rm -f stage_last
rm -rf stage3-* compare
.PHONY: cleanstrap
-cleanstrap: distclean bootstrap
+cleanstrap: do-distclean local-clean
+ echo stage3 > stage_final
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(MAKE) $(RECURSE_FLAGS_TO_PASS) stage3-bubble
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
@endif gcc-bootstrap
@@ -39839,6 +48040,18 @@ stage4-start::
mv stage4-gcc gcc ; \
mv stage3-gcc prev-gcc || test -f stage3-lean
@endif gcc
+@if gmp
+ @cd $(HOST_SUBDIR); [ -d stage4-gmp ] || \
+ mkdir stage4-gmp; \
+ mv stage4-gmp gmp ; \
+ mv stage3-gmp prev-gmp || test -f stage3-lean
+@endif gmp
+@if mpfr
+ @cd $(HOST_SUBDIR); [ -d stage4-mpfr ] || \
+ mkdir stage4-mpfr; \
+ mv stage4-mpfr mpfr ; \
+ mv stage3-mpfr prev-mpfr || test -f stage3-lean
+@endif mpfr
@if intl
@cd $(HOST_SUBDIR); [ -d stage4-intl ] || \
mkdir stage4-intl; \
@@ -39911,6 +48124,18 @@ stage4-end::
mv prev-gcc stage3-gcc ; : ; \
fi
@endif gcc
+@if gmp
+ @if test -d $(HOST_SUBDIR)/gmp ; then \
+ cd $(HOST_SUBDIR); mv gmp stage4-gmp ; \
+ mv prev-gmp stage3-gmp ; : ; \
+ fi
+@endif gmp
+@if mpfr
+ @if test -d $(HOST_SUBDIR)/mpfr ; then \
+ cd $(HOST_SUBDIR); mv mpfr stage4-mpfr ; \
+ mv prev-mpfr stage3-mpfr ; : ; \
+ fi
+@endif mpfr
@if intl
@if test -d $(HOST_SUBDIR)/intl ; then \
cd $(HOST_SUBDIR); mv intl stage4-intl ; \
@@ -39953,7 +48178,7 @@ stage4-end::
fi
rm -f stage_current
-# Bubble a bugfix through all the stages up to stage 4. They are
+# Bubble a bug fix through all the stages up to stage 4. They are
# remade, but not reconfigured. The next stage (if any) will not be
# reconfigured as well.
.PHONY: stage4-bubble
@@ -40046,6 +48271,7 @@ distclean-stage3:: distclean-stage4
.PHONY: distclean-stage4
distclean-stage4::
@: $(MAKE); $(stage)
+ @test "`cat stage_last`" != stage4 || rm -f stage_last
rm -rf stage4-* compare3
@@ -40089,6 +48315,18 @@ stageprofile-start::
mv stageprofile-gcc gcc ; \
mv stage1-gcc prev-gcc || test -f stage1-lean
@endif gcc
+@if gmp
+ @cd $(HOST_SUBDIR); [ -d stageprofile-gmp ] || \
+ mkdir stageprofile-gmp; \
+ mv stageprofile-gmp gmp ; \
+ mv stage1-gmp prev-gmp || test -f stage1-lean
+@endif gmp
+@if mpfr
+ @cd $(HOST_SUBDIR); [ -d stageprofile-mpfr ] || \
+ mkdir stageprofile-mpfr; \
+ mv stageprofile-mpfr mpfr ; \
+ mv stage1-mpfr prev-mpfr || test -f stage1-lean
+@endif mpfr
@if intl
@cd $(HOST_SUBDIR); [ -d stageprofile-intl ] || \
mkdir stageprofile-intl; \
@@ -40161,6 +48399,18 @@ stageprofile-end::
mv prev-gcc stage1-gcc ; : ; \
fi
@endif gcc
+@if gmp
+ @if test -d $(HOST_SUBDIR)/gmp ; then \
+ cd $(HOST_SUBDIR); mv gmp stageprofile-gmp ; \
+ mv prev-gmp stage1-gmp ; : ; \
+ fi
+@endif gmp
+@if mpfr
+ @if test -d $(HOST_SUBDIR)/mpfr ; then \
+ cd $(HOST_SUBDIR); mv mpfr stageprofile-mpfr ; \
+ mv prev-mpfr stage1-mpfr ; : ; \
+ fi
+@endif mpfr
@if intl
@if test -d $(HOST_SUBDIR)/intl ; then \
cd $(HOST_SUBDIR); mv intl stageprofile-intl ; \
@@ -40203,7 +48453,7 @@ stageprofile-end::
fi
rm -f stage_current
-# Bubble a bugfix through all the stages up to stage profile. They are
+# Bubble a bug fix through all the stages up to stage profile. They are
# remade, but not reconfigured. The next stage (if any) will not be
# reconfigured as well.
.PHONY: stageprofile-bubble
@@ -40232,6 +48482,7 @@ distclean-stage1:: distclean-stageprofile
.PHONY: distclean-stageprofile
distclean-stageprofile::
@: $(MAKE); $(stage)
+ @test "`cat stage_last`" != stageprofile || rm -f stage_last
rm -rf stageprofile-*
@@ -40275,6 +48526,18 @@ stagefeedback-start::
mv stagefeedback-gcc gcc ; \
mv stageprofile-gcc prev-gcc || test -f stageprofile-lean
@endif gcc
+@if gmp
+ @cd $(HOST_SUBDIR); [ -d stagefeedback-gmp ] || \
+ mkdir stagefeedback-gmp; \
+ mv stagefeedback-gmp gmp ; \
+ mv stageprofile-gmp prev-gmp || test -f stageprofile-lean
+@endif gmp
+@if mpfr
+ @cd $(HOST_SUBDIR); [ -d stagefeedback-mpfr ] || \
+ mkdir stagefeedback-mpfr; \
+ mv stagefeedback-mpfr mpfr ; \
+ mv stageprofile-mpfr prev-mpfr || test -f stageprofile-lean
+@endif mpfr
@if intl
@cd $(HOST_SUBDIR); [ -d stagefeedback-intl ] || \
mkdir stagefeedback-intl; \
@@ -40347,6 +48610,18 @@ stagefeedback-end::
mv prev-gcc stageprofile-gcc ; : ; \
fi
@endif gcc
+@if gmp
+ @if test -d $(HOST_SUBDIR)/gmp ; then \
+ cd $(HOST_SUBDIR); mv gmp stagefeedback-gmp ; \
+ mv prev-gmp stageprofile-gmp ; : ; \
+ fi
+@endif gmp
+@if mpfr
+ @if test -d $(HOST_SUBDIR)/mpfr ; then \
+ cd $(HOST_SUBDIR); mv mpfr stagefeedback-mpfr ; \
+ mv prev-mpfr stageprofile-mpfr ; : ; \
+ fi
+@endif mpfr
@if intl
@if test -d $(HOST_SUBDIR)/intl ; then \
cd $(HOST_SUBDIR); mv intl stagefeedback-intl ; \
@@ -40389,7 +48664,7 @@ stagefeedback-end::
fi
rm -f stage_current
-# Bubble a bugfix through all the stages up to stage feedback. They are
+# Bubble a bug fix through all the stages up to stage feedback. They are
# remade, but not reconfigured. The next stage (if any) will not be
# reconfigured as well.
.PHONY: stagefeedback-bubble
@@ -40439,6 +48714,7 @@ distclean-stageprofile:: distclean-stagefeedback
.PHONY: distclean-stagefeedback
distclean-stagefeedback::
@: $(MAKE); $(stage)
+ @test "`cat stage_last`" != stagefeedback || rm -f stage_last
rm -rf stagefeedback-*
@@ -40466,13 +48742,18 @@ do-distclean: distclean-stage1
# not work as a dependency, just as the minimum necessary to avoid errors.
stage_last:
$(MAKE) $(RECURSE_FLAGS_TO_PASS) stage1-bubble
-@endif gcc-bootstrap
+
+# Same as unstage, but not phony and defaulting to stage1-start. We place
+# it in the dependency so that for example `make -j3 all-gcc' works.
+stage_current:
+ @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
.PHONY: restrap
restrap:
@: $(MAKE); $(stage)
- rm -rf stage1-$(TARGET_SUBDIR) stage2 stage3 stage4 stageprofile stagefeedback
+ rm -rf stage1-$(TARGET_SUBDIR) stage2-* stage3-* stage4-* stageprofile-* stagefeedback-*
$(MAKE) $(RECURSE_FLAGS_TO_PASS) all
+@endif gcc-bootstrap
# --------------------------------------
# Dependencies between different modules
@@ -40483,8 +48764,13 @@ restrap:
configure-target-libstdc++-v3: stage_last
configure-target-libmudflap: stage_last
configure-target-libssp: stage_last
-configure-target-libgcc-math: stage_last
configure-target-newlib: stage_last
+configure-stage1-target-libgcc: maybe-all-stage1-gcc
+configure-stage2-target-libgcc: maybe-all-stage2-gcc
+configure-stage3-target-libgcc: maybe-all-stage3-gcc
+configure-stage4-target-libgcc: maybe-all-stage4-gcc
+configure-stageprofile-target-libgcc: maybe-all-stageprofile-gcc
+configure-stagefeedback-target-libgcc: maybe-all-stagefeedback-gcc
configure-target-libgfortran: stage_last
configure-target-libobjc: stage_last
configure-target-libtermcap: stage_last
@@ -40507,8 +48793,8 @@ configure-target-libgomp: stage_last
configure-target-libstdc++-v3: maybe-all-gcc
configure-target-libmudflap: maybe-all-gcc
configure-target-libssp: maybe-all-gcc
-configure-target-libgcc-math: maybe-all-gcc
configure-target-newlib: maybe-all-gcc
+configure-target-libgcc: maybe-all-gcc
configure-target-libgfortran: maybe-all-gcc
configure-target-libobjc: maybe-all-gcc
configure-target-libtermcap: maybe-all-gcc
@@ -40528,42 +48814,6 @@ configure-target-libgomp: maybe-all-gcc
@endif gcc-no-bootstrap
-
-configure-target-boehm-gc: maybe-all-target-newlib maybe-all-target-libgloss
-
-configure-target-gperf: maybe-all-target-newlib maybe-all-target-libgloss
-configure-target-gperf: maybe-all-target-libstdc++-v3
-
-configure-target-libada: maybe-all-target-newlib maybe-all-target-libgloss
-
-configure-target-libgfortran: maybe-all-target-newlib maybe-all-target-libgloss
-
-configure-target-libffi: maybe-all-target-newlib maybe-all-target-libgloss
-
-configure-target-libjava: maybe-all-target-newlib maybe-all-target-libgloss
-configure-target-libjava: maybe-all-target-libstdc++-v3
-
-configure-target-libmudflap: maybe-all-target-newlib maybe-all-target-libgloss
-
-configure-target-libobjc: maybe-all-target-newlib maybe-all-target-libgloss
-
-configure-target-libssp: maybe-all-target-newlib maybe-all-target-libgloss
-
-configure-target-libstdc++-v3: maybe-all-target-newlib maybe-all-target-libgloss
-
-configure-target-zlib: maybe-all-target-newlib maybe-all-target-libgloss
-
-configure-target-examples: maybe-all-target-newlib maybe-all-target-libgloss
-
-configure-target-libtermcap: maybe-all-target-newlib maybe-all-target-libgloss
-
-configure-target-rda: maybe-all-target-newlib maybe-all-target-libgloss
-
-configure-target-winsup: maybe-all-target-newlib maybe-all-target-libgloss
-
-configure-target-qthreads: maybe-all-target-newlib maybe-all-target-libgloss
-
-
# There are two types of dependencies here: 'hard' dependencies, where one
# module simply won't build without the other; and 'soft' dependencies, where
# if the depended-on module is missing, the depending module will do without
@@ -40630,6 +48880,14 @@ all-stage3-gcc: all-stage3-libiberty
all-stage4-gcc: all-stage4-libiberty
all-stageprofile-gcc: all-stageprofile-libiberty
all-stagefeedback-gcc: all-stagefeedback-libiberty
+all-gcc: maybe-all-gmp
+
+all-stage1-gcc: maybe-all-stage1-gmp
+all-stage2-gcc: maybe-all-stage2-gmp
+all-stage3-gcc: maybe-all-stage3-gmp
+all-stage4-gcc: maybe-all-stage4-gmp
+all-stageprofile-gcc: maybe-all-stageprofile-gmp
+all-stagefeedback-gcc: maybe-all-stagefeedback-gmp
all-gcc: maybe-all-intl
all-stage1-gcc: maybe-all-stage1-intl
@@ -40638,6 +48896,14 @@ all-stage3-gcc: maybe-all-stage3-intl
all-stage4-gcc: maybe-all-stage4-intl
all-stageprofile-gcc: maybe-all-stageprofile-intl
all-stagefeedback-gcc: maybe-all-stagefeedback-intl
+all-gcc: maybe-all-mpfr
+
+all-stage1-gcc: maybe-all-stage1-mpfr
+all-stage2-gcc: maybe-all-stage2-mpfr
+all-stage3-gcc: maybe-all-stage3-mpfr
+all-stage4-gcc: maybe-all-stage4-mpfr
+all-stageprofile-gcc: maybe-all-stageprofile-mpfr
+all-stagefeedback-gcc: maybe-all-stagefeedback-mpfr
all-gcc: maybe-all-build-texinfo
all-stage1-gcc: maybe-all-build-texinfo
@@ -40646,7 +48912,6 @@ all-stage3-gcc: maybe-all-build-texinfo
all-stage4-gcc: maybe-all-build-texinfo
all-stageprofile-gcc: maybe-all-build-texinfo
all-stagefeedback-gcc: maybe-all-build-texinfo
-all-prebootstrap: maybe-all-build-texinfo
all-gcc: maybe-all-build-bison
all-stage1-gcc: maybe-all-build-bison
@@ -40655,7 +48920,6 @@ all-stage3-gcc: maybe-all-build-bison
all-stage4-gcc: maybe-all-build-bison
all-stageprofile-gcc: maybe-all-build-bison
all-stagefeedback-gcc: maybe-all-build-bison
-all-prebootstrap: maybe-all-build-bison
all-gcc: maybe-all-build-byacc
all-stage1-gcc: maybe-all-build-byacc
@@ -40664,7 +48928,6 @@ all-stage3-gcc: maybe-all-build-byacc
all-stage4-gcc: maybe-all-build-byacc
all-stageprofile-gcc: maybe-all-build-byacc
all-stagefeedback-gcc: maybe-all-build-byacc
-all-prebootstrap: maybe-all-build-byacc
all-gcc: maybe-all-build-flex
all-stage1-gcc: maybe-all-build-flex
@@ -40673,7 +48936,6 @@ all-stage3-gcc: maybe-all-build-flex
all-stage4-gcc: maybe-all-build-flex
all-stageprofile-gcc: maybe-all-build-flex
all-stagefeedback-gcc: maybe-all-build-flex
-all-prebootstrap: maybe-all-build-flex
all-gcc: maybe-all-build-libiberty
all-stage1-gcc: maybe-all-build-libiberty
@@ -40682,7 +48944,6 @@ all-stage3-gcc: maybe-all-build-libiberty
all-stage4-gcc: maybe-all-build-libiberty
all-stageprofile-gcc: maybe-all-build-libiberty
all-stagefeedback-gcc: maybe-all-build-libiberty
-all-prebootstrap: maybe-all-build-libiberty
all-gcc: maybe-all-build-fixincludes
all-stage1-gcc: maybe-all-build-fixincludes
@@ -40691,7 +48952,6 @@ all-stage3-gcc: maybe-all-build-fixincludes
all-stage4-gcc: maybe-all-build-fixincludes
all-stageprofile-gcc: maybe-all-build-fixincludes
all-stagefeedback-gcc: maybe-all-build-fixincludes
-all-prebootstrap: maybe-all-build-fixincludes
all-gcc: maybe-all-zlib
all-stage1-gcc: maybe-all-stage1-zlib
@@ -40760,10 +49020,20 @@ all-stageprofile-libcpp: maybe-all-stageprofile-intl
all-stagefeedback-libcpp: maybe-all-stagefeedback-intl
all-fixincludes: maybe-all-libiberty
all-gnattools: maybe-all-target-libada
+configure-mpfr: maybe-all-gmp
+
+configure-stage1-mpfr: maybe-all-stage1-gmp
+configure-stage2-mpfr: maybe-all-stage2-gmp
+configure-stage3-mpfr: maybe-all-stage3-gmp
+configure-stage4-mpfr: maybe-all-stage4-gmp
+configure-stageprofile-mpfr: maybe-all-stageprofile-gmp
+configure-stagefeedback-mpfr: maybe-all-stagefeedback-gmp
+configure-gdb: maybe-configure-intl
configure-gdb: maybe-configure-sim
+configure-gdb: maybe-all-bfd
+all-gdb: maybe-all-intl
all-gdb: maybe-all-libiberty
all-gdb: maybe-all-opcodes
-all-gdb: maybe-all-bfd
all-gdb: maybe-all-readline
all-gdb: maybe-all-build-bison
all-gdb: maybe-all-build-byacc
@@ -40781,6 +49051,14 @@ configure-stage3-bfd: configure-stage3-libiberty
configure-stage4-bfd: configure-stage4-libiberty
configure-stageprofile-bfd: configure-stageprofile-libiberty
configure-stagefeedback-bfd: configure-stagefeedback-libiberty
+configure-bfd: maybe-configure-intl
+
+configure-stage1-bfd: maybe-configure-stage1-intl
+configure-stage2-bfd: maybe-configure-stage2-intl
+configure-stage3-bfd: maybe-configure-stage3-intl
+configure-stage4-bfd: maybe-configure-stage4-intl
+configure-stageprofile-bfd: maybe-configure-stageprofile-intl
+configure-stagefeedback-bfd: maybe-configure-stagefeedback-intl
all-bfd: maybe-all-libiberty
all-stage1-bfd: maybe-all-stage1-libiberty
@@ -40797,6 +49075,14 @@ all-stage3-bfd: maybe-all-stage3-intl
all-stage4-bfd: maybe-all-stage4-intl
all-stageprofile-bfd: maybe-all-stageprofile-intl
all-stagefeedback-bfd: maybe-all-stagefeedback-intl
+configure-binutils: maybe-configure-intl
+
+configure-stage1-binutils: maybe-configure-stage1-intl
+configure-stage2-binutils: maybe-configure-stage2-intl
+configure-stage3-binutils: maybe-configure-stage3-intl
+configure-stage4-binutils: maybe-configure-stage4-intl
+configure-stageprofile-binutils: maybe-configure-stageprofile-intl
+configure-stagefeedback-binutils: maybe-configure-stagefeedback-intl
all-binutils: maybe-all-libiberty
all-stage1-binutils: maybe-all-stage1-libiberty
@@ -40829,7 +49115,6 @@ all-stage3-binutils: maybe-all-build-flex
all-stage4-binutils: maybe-all-build-flex
all-stageprofile-binutils: maybe-all-build-flex
all-stagefeedback-binutils: maybe-all-build-flex
-all-prebootstrap: maybe-all-build-flex
all-binutils: maybe-all-build-bison
all-stage1-binutils: maybe-all-build-bison
@@ -40838,7 +49123,6 @@ all-stage3-binutils: maybe-all-build-bison
all-stage4-binutils: maybe-all-build-bison
all-stageprofile-binutils: maybe-all-build-bison
all-stagefeedback-binutils: maybe-all-build-bison
-all-prebootstrap: maybe-all-build-bison
all-binutils: maybe-all-build-byacc
all-stage1-binutils: maybe-all-build-byacc
@@ -40847,7 +49131,6 @@ all-stage3-binutils: maybe-all-build-byacc
all-stage4-binutils: maybe-all-build-byacc
all-stageprofile-binutils: maybe-all-build-byacc
all-stagefeedback-binutils: maybe-all-build-byacc
-all-prebootstrap: maybe-all-build-byacc
all-binutils: maybe-all-intl
all-stage1-binutils: maybe-all-stage1-intl
@@ -40858,6 +49141,14 @@ all-stageprofile-binutils: maybe-all-stageprofile-intl
all-stagefeedback-binutils: maybe-all-stagefeedback-intl
install-binutils: maybe-install-opcodes
install-opcodes: maybe-install-bfd
+configure-gas: maybe-configure-intl
+
+configure-stage1-gas: maybe-configure-stage1-intl
+configure-stage2-gas: maybe-configure-stage2-intl
+configure-stage3-gas: maybe-configure-stage3-intl
+configure-stage4-gas: maybe-configure-stage4-intl
+configure-stageprofile-gas: maybe-configure-stageprofile-intl
+configure-stagefeedback-gas: maybe-configure-stagefeedback-intl
all-gas: maybe-all-libiberty
all-stage1-gas: maybe-all-stage1-libiberty
@@ -40890,10 +49181,19 @@ all-stage3-gas: maybe-all-stage3-intl
all-stage4-gas: maybe-all-stage4-intl
all-stageprofile-gas: maybe-all-stageprofile-intl
all-stagefeedback-gas: maybe-all-stagefeedback-intl
+configure-gprof: maybe-configure-intl
all-gprof: maybe-all-libiberty
all-gprof: maybe-all-bfd
all-gprof: maybe-all-opcodes
all-gprof: maybe-all-intl
+configure-ld: maybe-configure-intl
+
+configure-stage1-ld: maybe-configure-stage1-intl
+configure-stage2-ld: maybe-configure-stage2-intl
+configure-stage3-ld: maybe-configure-stage3-intl
+configure-stage4-ld: maybe-configure-stage4-intl
+configure-stageprofile-ld: maybe-configure-stageprofile-intl
+configure-stagefeedback-ld: maybe-configure-stagefeedback-intl
all-ld: maybe-all-libiberty
all-stage1-ld: maybe-all-stage1-libiberty
@@ -40926,7 +49226,6 @@ all-stage3-ld: maybe-all-build-bison
all-stage4-ld: maybe-all-build-bison
all-stageprofile-ld: maybe-all-build-bison
all-stagefeedback-ld: maybe-all-build-bison
-all-prebootstrap: maybe-all-build-bison
all-ld: maybe-all-build-byacc
all-stage1-ld: maybe-all-build-byacc
@@ -40935,7 +49234,6 @@ all-stage3-ld: maybe-all-build-byacc
all-stage4-ld: maybe-all-build-byacc
all-stageprofile-ld: maybe-all-build-byacc
all-stagefeedback-ld: maybe-all-build-byacc
-all-prebootstrap: maybe-all-build-byacc
all-ld: maybe-all-build-flex
all-stage1-ld: maybe-all-build-flex
@@ -40944,7 +49242,6 @@ all-stage3-ld: maybe-all-build-flex
all-stage4-ld: maybe-all-build-flex
all-stageprofile-ld: maybe-all-build-flex
all-stagefeedback-ld: maybe-all-build-flex
-all-prebootstrap: maybe-all-build-flex
all-ld: maybe-all-intl
all-stage1-ld: maybe-all-stage1-intl
@@ -40953,6 +49250,14 @@ all-stage3-ld: maybe-all-stage3-intl
all-stage4-ld: maybe-all-stage4-intl
all-stageprofile-ld: maybe-all-stageprofile-intl
all-stagefeedback-ld: maybe-all-stagefeedback-intl
+configure-opcodes: maybe-configure-intl
+
+configure-stage1-opcodes: maybe-configure-stage1-intl
+configure-stage2-opcodes: maybe-configure-stage2-intl
+configure-stage3-opcodes: maybe-configure-stage3-intl
+configure-stage4-opcodes: maybe-configure-stage4-intl
+configure-stageprofile-opcodes: maybe-configure-stageprofile-intl
+configure-stagefeedback-opcodes: maybe-configure-stagefeedback-intl
all-opcodes: maybe-all-bfd
all-stage1-opcodes: maybe-all-stage1-bfd
@@ -40969,6 +49274,14 @@ all-stage3-opcodes: maybe-all-stage3-libiberty
all-stage4-opcodes: maybe-all-stage4-libiberty
all-stageprofile-opcodes: maybe-all-stageprofile-libiberty
all-stagefeedback-opcodes: maybe-all-stagefeedback-libiberty
+all-opcodes: maybe-all-intl
+
+all-stage1-opcodes: maybe-all-stage1-intl
+all-stage2-opcodes: maybe-all-stage2-intl
+all-stage3-opcodes: maybe-all-stage3-intl
+all-stage4-opcodes: maybe-all-stage4-intl
+all-stageprofile-opcodes: maybe-all-stageprofile-intl
+all-stagefeedback-opcodes: maybe-all-stagefeedback-intl
all-dejagnu: maybe-all-tcl
all-dejagnu: maybe-all-expect
all-dejagnu: maybe-all-tk
@@ -40990,6 +49303,8 @@ all-sid: maybe-all-tcl
all-sid: maybe-all-tk
install-sid: maybe-install-tcl
install-sid: maybe-install-tk
+configure-sim: maybe-configure-intl
+all-sim: maybe-all-intl
all-sim: maybe-all-libiberty
all-sim: maybe-all-bfd
all-sim: maybe-all-opcodes
@@ -41044,29 +49359,88 @@ all-target-libjava: maybe-all-target-zlib
all-target-libjava: maybe-all-target-boehm-gc
all-target-libjava: maybe-all-target-qthreads
all-target-libjava: maybe-all-target-libffi
+configure-target-libobjc: maybe-configure-target-boehm-gc
all-target-libobjc: maybe-all-target-libiberty
+all-target-libobjc: maybe-all-target-boehm-gc
all-target-libstdc++-v3: maybe-all-target-libiberty
all-target-libgloss: maybe-configure-target-newlib
all-target-winsup: maybe-all-target-libiberty
all-target-winsup: maybe-all-target-libtermcap
-# Non-toplevel bootstrap rules must depend on several packages, to be built
-# before gcc. Another wart that will go away, hopefully soon.
-@if gcc-no-bootstrap
+# Dependencies for target modules on other target modules are
+# described by lang_env_dependencies; the defaults apply to anything
+# not mentioned there.
+
-all-prebootstrap: maybe-all-bfd
-all-prebootstrap: maybe-all-opcodes
-all-prebootstrap: maybe-all-binutils
-all-prebootstrap: maybe-all-gas
-all-prebootstrap: maybe-all-intl
-all-prebootstrap: maybe-all-ld
-all-prebootstrap: maybe-all-libcpp
-all-prebootstrap: maybe-all-libdecnumber
-all-prebootstrap: maybe-all-libiberty
-all-prebootstrap: maybe-all-zlib
+@if gcc-bootstrap
+@endif gcc-bootstrap
+
+@if gcc-no-bootstrap
+configure-target-libstdc++-v3: maybe-all-target-libgcc
+configure-target-libmudflap: maybe-all-target-libgcc
+configure-target-libssp: maybe-all-target-libgcc
+configure-target-newlib: maybe-all-target-libgcc
+configure-target-libgfortran: maybe-all-target-libgcc
+configure-target-libobjc: maybe-all-target-libgcc
+configure-target-libtermcap: maybe-all-target-libgcc
+configure-target-winsup: maybe-all-target-libgcc
+configure-target-libgloss: maybe-all-target-libgcc
+configure-target-libiberty: maybe-all-target-libgcc
+configure-target-gperf: maybe-all-target-libgcc
+configure-target-examples: maybe-all-target-libgcc
+configure-target-libffi: maybe-all-target-libgcc
+configure-target-libjava: maybe-all-target-libgcc
+configure-target-zlib: maybe-all-target-libgcc
+configure-target-boehm-gc: maybe-all-target-libgcc
+configure-target-qthreads: maybe-all-target-libgcc
+configure-target-rda: maybe-all-target-libgcc
+configure-target-libada: maybe-all-target-libgcc
+configure-target-libgomp: maybe-all-target-libgcc
@endif gcc-no-bootstrap
+
+configure-target-libstdc++-v3: maybe-all-target-newlib maybe-all-target-libgloss
+
+configure-target-libmudflap: maybe-all-target-newlib maybe-all-target-libgloss
+
+configure-target-libssp: maybe-all-target-newlib maybe-all-target-libgloss
+
+
+
+configure-target-libgfortran: maybe-all-target-newlib maybe-all-target-libgloss
+
+configure-target-libobjc: maybe-all-target-newlib maybe-all-target-libgloss
+
+configure-target-libtermcap: maybe-all-target-newlib maybe-all-target-libgloss
+
+configure-target-winsup: maybe-all-target-newlib maybe-all-target-libgloss
+
+
+
+configure-target-gperf: maybe-all-target-newlib maybe-all-target-libgloss
+configure-target-gperf: maybe-all-target-libstdc++-v3
+
+configure-target-examples: maybe-all-target-newlib maybe-all-target-libgloss
+
+configure-target-libffi: maybe-all-target-newlib maybe-all-target-libgloss
+
+configure-target-libjava: maybe-all-target-newlib maybe-all-target-libgloss
+configure-target-libjava: maybe-all-target-libstdc++-v3
+
+configure-target-zlib: maybe-all-target-newlib maybe-all-target-libgloss
+
+configure-target-boehm-gc: maybe-all-target-newlib maybe-all-target-libgloss
+
+configure-target-qthreads: maybe-all-target-newlib maybe-all-target-libgloss
+
+configure-target-rda: maybe-all-target-newlib maybe-all-target-libgloss
+
+configure-target-libada: maybe-all-target-newlib maybe-all-target-libgloss
+
+configure-target-libgomp: maybe-all-target-newlib maybe-all-target-libgloss
+
+
CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@
GDB_TK = @GDB_TK@
INSTALL_GDB_TK = @INSTALL_GDB_TK@
@@ -41097,7 +49471,7 @@ config.status: configure
# Rebuilding configure.
AUTOCONF = autoconf
-$(srcdir)/configure: @MAINT@ $(srcdir)/configure.in $(srcdir)/config/acx.m4
+$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4
cd $(srcdir) && $(AUTOCONF)
# ------------------------------
diff --git a/Makefile.tpl b/Makefile.tpl
index b83d8d5abd98..6164a4164c69 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -28,11 +28,17 @@ in
# -------------------------------
VPATH=@srcdir@
-build_alias=@build_alias@
+build_alias=@build_noncanonical@
+build_vendor=@build_vendor@
+build_os=@build_os@
build=@build@
-host_alias=@host_alias@
+host_alias=@host_noncanonical@
+host_vendor=@host_vendor@
+host_os=@host_os@
host=@host@
-target_alias=@target_alias@
+target_alias=@target_noncanonical@
+target_vendor=@target_vendor@
+target_os=@target_os@
target=@target@
program_transform_name = @program_transform_name@
@@ -55,6 +61,7 @@ oldincludedir = @oldincludedir@
infodir = @infodir@
datarootdir = @datarootdir@
docdir = @docdir@
+pdfdir = @pdfdir@
htmldir = @htmldir@
mandir = @mandir@
man1dir = $(mandir)/man1
@@ -73,6 +80,9 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_DATA = @INSTALL_DATA@
LN = @LN@
LN_S = @LN_S@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
# -------------------------------------------------
# Miscellaneous non-standard autoconf-set variables
@@ -180,7 +190,8 @@ POSTSTAGE1_HOST_EXPORTS = \
CC_FOR_BUILD="$(STAGE_CC_WRAPPER) \
$$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \
-B$$r/$(HOST_SUBDIR)/prev-gcc/ \
- -B$(build_tooldir)/bin/"; export CC_FOR_BUILD;
+ -B$(build_tooldir)/bin/"; export CC_FOR_BUILD; \
+ LDFLAGS="$(BOOT_LDFLAGS)"; export LDFLAGS;
# Target libraries are put under this directory:
TARGET_SUBDIR = @target_subdir@
@@ -288,13 +299,26 @@ RANLIB = @RANLIB@
STRIP = @STRIP@
WINDRES = @WINDRES@
+GNATBIND = @GNATBIND@
+GNATMAKE = @GNATMAKE@
+
CFLAGS = @CFLAGS@
-LDFLAGS =
+LDFLAGS = @LDFLAGS@
LIBCFLAGS = $(CFLAGS)
CXXFLAGS = @CXXFLAGS@
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
PICFLAG =
+# Only build the C compiler for stage1, because that is the only one that
+# we can guarantee will build with the native compiler, and also it is the
+# only thing useful for building stage2. STAGE1_CFLAGS (via CFLAGS),
+# MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
+# overrideable (for a bootstrap build stage1 also builds gcc.info).
+
+STAGE1_CFLAGS=@stage1_cflags@
+STAGE1_CHECKING=@stage1_checking@
+STAGE1_LANGUAGES=@stage1_languages@
+
# -----------------------------------------------
# Programs producing files for the TARGET machine
# -----------------------------------------------
@@ -426,6 +450,14 @@ X11_FLAGS_TO_PASS = \
'X11_EXTRA_CFLAGS=$(X11_EXTRA_CFLAGS)' \
'X11_EXTRA_LIBS=$(X11_EXTRA_LIBS)'
+# Flags to pass to stage2 and later makes.
+
+POSTSTAGE1_FLAGS_TO_PASS = \
+ CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
+ GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind" \
+ LDFLAGS="$(BOOT_LDFLAGS)" \
+ "`echo 'ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
+
# Flags to pass down to makes which are built with the target environment.
# The double $ decreases the length of the command line; those variables
# are set in BASE_FLAGS_TO_PASS, and the sub-make will expand them. The
@@ -506,9 +538,10 @@ all-host: maybe-all-[+module+][+ IF bootstrap +]
.PHONY: all-target
[+ FOR target_modules +][+ IF bootstrap +]
-@if [+module+]-no-bootstrap[+ ENDIF bootstrap +]
+@if target-[+module+]-no-bootstrap[+ ENDIF bootstrap +]
all-target: maybe-all-target-[+module+][+ IF bootstrap +]
-@endif [+module+]-no-bootstrap[+ ENDIF bootstrap +][+ ENDFOR target_modules +]
+@endif target-[+module+]-no-bootstrap[+
+ ENDIF bootstrap +][+ ENDFOR target_modules +]
# Do a target for all the subdirectories. A ``make do-X'' will do a
# ``make X'' in all subdirectories (because, in general, there is a
@@ -535,12 +568,14 @@ do-[+make_target+]:
# Here are the targets which correspond to the do-X targets.
-.PHONY: info installcheck dvi html install-info install-html
+.PHONY: info installcheck dvi pdf html
+.PHONY: install-info install-pdf install-html
.PHONY: clean distclean mostlyclean maintainer-clean realclean
.PHONY: local-clean local-distclean local-maintainer-clean
info: do-info
installcheck: do-installcheck
dvi: do-dvi
+pdf: do-pdf
html: do-html
# Make sure makeinfo is built before we do a `make info', if we're
@@ -553,6 +588,8 @@ install-info: do-install-info dir.info
$(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info ; \
else true ; fi
+install-pdf: do-install-pdf
+
install-html: do-install-html
local-clean:
@@ -585,11 +622,6 @@ maintainer-clean: local-maintainer-clean do-maintainer-clean local-clean
maintainer-clean: local-distclean
realclean: maintainer-clean
-# Extra dependency for clean-target, owing to the mixed nature of gcc.
-clean-target: clean-target-libgcc
-clean-target-libgcc:
- test ! -d gcc || (cd gcc && $(MAKE) $@)
-
# Check target.
.PHONY: check do-check
@@ -720,14 +752,12 @@ TAGS: do-TAGS
[+ DEFINE configure +]
.PHONY: configure-[+prefix+][+module+] maybe-configure-[+prefix+][+module+]
maybe-configure-[+prefix+][+module+]:
+@if gcc-bootstrap
+configure-[+prefix+][+module+]: stage_current
+@endif gcc-bootstrap
@if [+prefix+][+module+]
maybe-configure-[+prefix+][+module+]: configure-[+prefix+][+module+]
-configure-[+prefix+][+module+]: [+ IF bootstrap +]
-@endif [+prefix+][+module+]
-@if [+prefix+][+module+]-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif [+prefix+][+module+]-bootstrap
-@if [+prefix+][+module+][+ ELSE bootstrap +]
+configure-[+prefix+][+module+]: [+ IF bootstrap +][+ ELSE +]
@: $(MAKE); $(unstage)[+ ENDIF bootstrap +]
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
@@ -759,7 +789,8 @@ configure-[+prefix+][+module+]: [+ IF bootstrap +]
libsrcdir="$$s/[+module+]"; \
[+ IF no-config-site +]rm -f no-such-file || : ; \
CONFIG_SITE=no-such-file [+ ENDIF +]$(SHELL) $${libsrcdir}/configure \
- [+args+] $${srcdiroption} [+extra_configure_flags+] \
+ [+args+] --build=${build_alias} --host=[+host_alias+] \
+ --target=[+target_alias+] $${srcdiroption} [+extra_configure_flags+] \
|| exit 1
@endif [+prefix+][+module+]
@@ -790,6 +821,8 @@ configure-stage[+id+]-[+prefix+][+module+]:
[+ ENDIF check_multilibs +]test ! -f [+subdir+]/[+module+]/Makefile || exit 0; \
[+exports+][+ IF prev +] \
[+poststage1_exports+][+ ENDIF prev +] \
+ CFLAGS="[+stage_cflags+]"; export CFLAGS; \
+ LIBCFLAGS="[+stage_cflags+]"; export LIBCFLAGS; \
echo Configuring stage [+id+] in [+subdir+]/[+module+] ; \
$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
cd [+subdir+]/[+module+] || exit 1; \
@@ -801,7 +834,9 @@ configure-stage[+id+]-[+prefix+][+module+]:
srcdiroption="--srcdir=$${topdir}/[+module+]"; \
libsrcdir="$$s/[+module+]"; \
$(SHELL) $${libsrcdir}/configure \
- [+args+] $${srcdiroption} \
+ [+args+] --build=${build_alias} --host=[+host_alias+] \
+ --target=[+target_alias+] $${srcdiroption} \
+ [+ IF prev +]--with-build-libsubdir=$(HOST_SUBDIR)[+ ENDIF prev +] \
[+stage_configure_flags+] [+extra_configure_flags+]
@endif [+prefix+][+module+]-bootstrap
[+ ENDFOR bootstrap_stage +]
@@ -811,16 +846,14 @@ configure-stage[+id+]-[+prefix+][+module+]:
[+ DEFINE all +]
.PHONY: all-[+prefix+][+module+] maybe-all-[+prefix+][+module+]
maybe-all-[+prefix+][+module+]:
+@if gcc-bootstrap
+all-[+prefix+][+module+]: stage_current
+@endif gcc-bootstrap
@if [+prefix+][+module+]
TARGET-[+prefix+][+module+]=[+
- IF target +][+target+][+ ELSE +]all[+ ENDIF target +]
+ IF all_target +][+all_target+][+ ELSE +]all[+ ENDIF all_target +]
maybe-all-[+prefix+][+module+]: all-[+prefix+][+module+]
-all-[+prefix+][+module+]: configure-[+prefix+][+module+][+ IF bootstrap +]
-@endif [+prefix+][+module+]
-@if [+prefix+][+module+]-bootstrap
- @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
-@endif [+prefix+][+module+]-bootstrap
-@if [+prefix+][+module+][+ ELSE bootstrap +]
+all-[+prefix+][+module+]: configure-[+prefix+][+module+][+ IF bootstrap +][+ ELSE +]
@: $(MAKE); $(unstage)[+ ENDIF bootstrap +]
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
@@ -846,21 +879,25 @@ all-stage[+id+]-[+prefix+][+module+]: configure-stage[+id+]-[+prefix+][+module+]
[+exports+][+ IF prev +] \
[+poststage1_exports+][+ ENDIF prev +] \
cd [+subdir+]/[+module+] && \
- $(MAKE) [+args+] [+ IF prev
- +][+poststage1_args+][+ ENDIF prev
- +] [+stage_make_flags+] [+extra_make_flags+] \
+ $(MAKE) [+args+] \
+ CFLAGS="[+stage_cflags+]" LIBCFLAGS="[+stage_cflags+]" [+
+ IF prev +][+poststage1_args+][+ ENDIF prev
+ +] [+extra_make_flags+] \
$(TARGET-stage[+id+]-[+prefix+][+module+])
maybe-clean-stage[+id+]-[+prefix+][+module+]: clean-stage[+id+]-[+prefix+][+module+]
clean-stage[+id+]: clean-stage[+id+]-[+prefix+][+module+]
clean-stage[+id+]-[+prefix+][+module+]:
- @[ -f [+subdir+]/[+module+]/Makefile ] || [ -f [+subdir+]/stage[+id+]-[+module+]/Makefile ] \
- || exit 0 ; \
- [ $(current_stage) = stage[+id+] ] || $(MAKE) stage[+id+]-start; \
+ @if [ $(current_stage) = stage[+id+] ]; then \
+ [ -f [+subdir+]/[+module+]/Makefile ] || exit 0; \
+ else \
+ [ -f [+subdir+]/stage[+id+]-[+module+]/Makefile ] || exit 0; \
+ $(MAKE) stage[+id+]-start; \
+ fi; \
cd [+subdir+]/[+module+] && \
$(MAKE) [+args+] [+ IF prev +] \
[+poststage1_args+] [+ ENDIF prev +] \
- [+stage_make_flags+] [+extra_make_flags+] clean
+ [+extra_make_flags+] clean
@endif [+prefix+][+module+]-bootstrap
[+ ENDFOR bootstrap_stage +]
@@ -872,6 +909,8 @@ clean-stage[+id+]-[+prefix+][+module+]:
# --------------------------------------
[+ FOR build_modules +]
[+ configure prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)"
+ host_alias=(get "host" "${build_alias}")
+ target_alias=(get "target" "${target_alias}")
args="$(BUILD_CONFIGARGS)" no-config-site=true +]
[+ all prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)" +]
@@ -884,6 +923,8 @@ clean-stage[+id+]-[+prefix+][+module+]:
[+ configure prefix="" subdir="$(HOST_SUBDIR)"
exports="$(HOST_EXPORTS)"
poststage1_exports="$(POSTSTAGE1_HOST_EXPORTS)"
+ host_alias=(get "host" "${host_alias}")
+ target_alias=(get "target" "${target_alias}")
args="$(HOST_CONFIGARGS)" +]
[+ all prefix="" subdir="$(HOST_SUBDIR)"
@@ -937,7 +978,7 @@ install-[+module+]: installdirs
[+ ENDIF no_install +]
@endif [+module+]
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
[+ FOR recursive_targets +]
.PHONY: maybe-[+make_target+]-[+module+] [+make_target+]-[+module+]
maybe-[+make_target+]-[+module+]:
@@ -981,6 +1022,8 @@ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
[+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
check_multilibs=true
exports="$(RAW_CXX_TARGET_EXPORTS)"
+ host_alias=(get "host" "${target_alias}")
+ target_alias=(get "target" "${target_alias}")
args="$(TARGET_CONFIGARGS)" no-config-site=true +]
[+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
@@ -990,6 +1033,8 @@ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
[+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
check_multilibs=true
exports="$(NORMAL_TARGET_EXPORTS)"
+ host_alias=(get "host" "${target_alias}")
+ target_alias=(get "target" "${target_alias}")
args="$(TARGET_CONFIGARGS)" no-config-site=true +]
[+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
@@ -1045,7 +1090,7 @@ ENDIF raw_cxx +]
[+ ENDIF no_install +]
@endif target-[+module+]
-# Other targets (info, dvi, etc.)
+# Other targets (info, dvi, pdf, etc.)
[+ FOR recursive_targets +]
.PHONY: maybe-[+make_target+]-target-[+module+] [+make_target+]-target-[+module+]
maybe-[+make_target+]-target-[+module+]:
@@ -1089,60 +1134,6 @@ ENDIF raw_cxx +]
# ----------
@if gcc-no-bootstrap
-# GCC has some more recursive targets, which trigger the old
-# (but still current, until the toplevel bootstrap project
-# is finished) compiler bootstrapping rules.
-
-GCC_STRAP_TARGETS = bootstrap bootstrap-lean bootstrap2 bootstrap2-lean bootstrap3 bootstrap3-lean bootstrap4 bootstrap4-lean bubblestrap quickstrap cleanstrap restrap
-.PHONY: $(GCC_STRAP_TARGETS)
-$(GCC_STRAP_TARGETS): all-prebootstrap configure-gcc
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- $(HOST_EXPORTS) \
- echo "Bootstrapping the compiler"; \
- $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,:[ :]*,:,g;s,^[ :]*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
- cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $@
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- case "$@" in \
- *bootstrap4-lean ) \
- msg="Comparing stage3 and stage4 of the compiler"; \
- compare=compare3-lean ;; \
- *bootstrap4 ) \
- msg="Comparing stage3 and stage4 of the compiler"; \
- compare=compare3 ;; \
- *-lean ) \
- msg="Comparing stage2 and stage3 of the compiler"; \
- compare=compare-lean ;; \
- * ) \
- msg="Comparing stage2 and stage3 of the compiler"; \
- compare=compare ;; \
- esac; \
- $(HOST_EXPORTS) \
- echo "$$msg"; \
- cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) $$compare
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
- echo "Building runtime libraries"; \
- $(MAKE) $(RECURSE_FLAGS_TO_PASS) all
-
-profiledbootstrap: all-prebootstrap configure-gcc
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- $(HOST_EXPORTS) \
- $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,:[ :]*,:,g;s,^[ :]*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
- echo "Bootstrapping training compiler"; \
- cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stageprofile_build
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- $(HOST_EXPORTS) \
- echo "Building feedback based compiler"; \
- cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) stagefeedback_build
- @r=`${PWD_COMMAND}`; export r; \
- s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
- echo "Building runtime libraries"; \
- $(MAKE) $(RECURSE_FLAGS_TO_PASS) all
-
.PHONY: cross
cross: all-build all-gas all-ld
@r=`${PWD_COMMAND}`; export r; \
@@ -1212,7 +1203,7 @@ stage = :
current_stage = ""
@if gcc-bootstrap
-unstage = [ -f stage_current ] || $(MAKE) `cat stage_last`-start
+unstage = if [ -f stage_last ]; then [ -f stage_current ] || $(MAKE) `cat stage_last`-start || exit 1; else :; fi
stage = if [ -f stage_current ]; then $(MAKE) `cat stage_current`-end || exit 1; else :; fi
current_stage = "`cat stage_current 2> /dev/null`"
@endif gcc-bootstrap
@@ -1240,36 +1231,9 @@ LEAN = false
# 'touch' doesn't work right on some platforms.
STAMP = echo timestamp >
-# Only build the C compiler for stage1, because that is the only one that
-# we can guarantee will build with the native compiler, and also it is the
-# only thing useful for building stage2. STAGE1_CFLAGS (via CFLAGS),
-# MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
-# overrideable (for a bootstrap build stage1 also builds gcc.info).
-
-STAGE1_CFLAGS=@stage1_cflags@
-STAGE1_LANGUAGES=@stage1_languages@
-
# We only want to compare .o files, so set this!
objext = .o
-# Flags to pass to stage2 and later makes.
-POSTSTAGE1_FLAGS_TO_PASS = \
- CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
- STAGE_PREFIX=$$r/prev-gcc/ \
- CFLAGS="$(BOOT_CFLAGS)" \
- LIBCFLAGS="$(BOOT_CFLAGS)" \
- LDFLAGS="$(BOOT_LDFLAGS)" \
- ADAC="\$$(CC)"
-
-# For stage 1:
-# * We force-disable intermodule optimizations, even if
-# --enable-intermodule was passed, since the installed compiler probably
-# can't handle them. Luckily, autoconf always respects
-# the last argument when conflicting --enable arguments are passed.
-# * Likewise, we force-disable coverage flags, since the installed compiler
-# probably has never heard of them.
-# * We build only C (and possibly Ada).
-
[+ FOR bootstrap-stage +]
.PHONY: stage[+id+]-start stage[+id+]-end
@@ -1303,7 +1267,7 @@ stage[+id+]-end:: [+ FOR host_modules +][+ IF bootstrap +]
fi
rm -f stage_current
-# Bubble a bugfix through all the stages up to stage [+id+]. They are
+# Bubble a bug fix through all the stages up to stage [+id+]. They are
# remade, but not reconfigured. The next stage (if any) will not be
# reconfigured as well.
.PHONY: stage[+id+]-bubble
@@ -1397,12 +1361,21 @@ do-clean: clean-stage[+id+]
.PHONY: distclean-stage[+id+]
distclean-stage[+id+]::
@: $(MAKE); $(stage)
+ @test "`cat stage_last`" != stage[+id+] || rm -f stage_last
rm -rf stage[+id+]-* [+
IF compare-target +][+compare-target+] [+ ENDIF compare-target +]
[+ IF cleanstrap-target +]
.PHONY: [+cleanstrap-target+]
-[+cleanstrap-target+]: distclean [+bootstrap-target+]
+[+cleanstrap-target+]: do-distclean local-clean
+ echo stage[+id+] > stage_final
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(MAKE) $(RECURSE_FLAGS_TO_PASS) stage[+id+]-bubble
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
[+ ENDIF cleanstrap-target +]
@endif gcc-bootstrap
@@ -1428,14 +1401,19 @@ do-distclean: distclean-stage1
# not work as a dependency, just as the minimum necessary to avoid errors.
stage_last:
$(MAKE) $(RECURSE_FLAGS_TO_PASS) stage1-bubble
-@endif gcc-bootstrap
+
+# Same as unstage, but not phony and defaulting to stage1-start. We place
+# it in the dependency so that for example `make -j3 all-gcc' works.
+stage_current:
+ @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
.PHONY: restrap
restrap:
@: $(MAKE); $(stage)
rm -rf stage1-$(TARGET_SUBDIR) [+ FOR bootstrap-stage +][+ IF prev
- +]stage[+id+] [+ ENDIF prev +][+ ENDFOR bootstrap-stage +]
+ +]stage[+id+]-* [+ ENDIF prev +][+ ENDFOR bootstrap-stage +]
$(MAKE) $(RECURSE_FLAGS_TO_PASS) all
+@endif gcc-bootstrap
# --------------------------------------
# Dependencies between different modules
@@ -1450,18 +1428,12 @@ configure-target-[+module+]: stage_last[+
ENDIF bootstrap +][+ ENDFOR target_modules +]
@endif gcc-bootstrap
-@if gcc-no-bootstrap[+ FOR target_modules +][+ IF bootstrap
- +][+ ELSE +]
+@if gcc-no-bootstrap[+ FOR target_modules +]
configure-target-[+module+]: maybe-all-gcc[+
- ENDIF bootstrap +][+ ENDFOR target_modules +]
+ ENDFOR target_modules +]
@endif gcc-no-bootstrap
-[+ FOR lang_env_dependencies +]
-configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss
-[+ IF cxx +]configure-target-[+module+]: maybe-all-target-libstdc++-v3
-[+ ENDIF cxx +][+ ENDFOR lang_env_dependencies +]
-
# There are two types of dependencies here: 'hard' dependencies, where one
# module simply won't build without the other; and 'soft' dependencies, where
# if the depended-on module is missing, the depending module will do without
@@ -1550,7 +1522,6 @@ configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss
+][+ FOR bootstrap_stage +]
[+ (make-dep (dep-stage) "") +][+
ENDFOR bootstrap_stage +]
-all-prebootstrap: [+ (dep-target "" "on" (exist? "hard")) +]
[+ == "bootstrap"
+][+ FOR bootstrap_stage +]
[+ (make-dep (dep-stage) (dep-stage)) +][+
@@ -1558,17 +1529,48 @@ all-prebootstrap: [+ (dep-target "" "on" (exist? "hard")) +]
[+ ESAC +][+
ENDFOR dependencies +]
-# Non-toplevel bootstrap rules must depend on several packages, to be built
-# before gcc. Another wart that will go away, hopefully soon.
-@if gcc-no-bootstrap
-[+ FOR host_modules +][+
- IF (and (not (= (get "module") "gcc"))
- (hash-ref boot-modules (get "module"))) +]
-all-prebootstrap: maybe-all-[+module+][+
- ENDIF +][+
-ENDFOR host_modules +]
+# Dependencies for target modules on other target modules are
+# described by lang_env_dependencies; the defaults apply to anything
+# not mentioned there.
+[+
+ ;; Predicate for whether LANG was specified in lang_env_dependencies.
+ (define lang-dep (lambda (lang)
+ (hash-ref lang-env-deps (string-append (get "module") "-" lang))))
+
+ ;; Build the hash table we will need.
+ (define lang-env-deps (make-hash-table 7))
++][+ FOR lang_env_dependencies +][+
+ (if (exist? "cxx")
+ (hash-create-handle! lang-env-deps
+ (string-append (get "module") "-" "cxx") #t))
+
+ (if (exist? "no_c")
+ (hash-create-handle! lang-env-deps
+ (string-append (get "module") "-" "no_c") #t))
+
+ (if (exist? "no_gcc")
+ (hash-create-handle! lang-env-deps
+ (string-append (get "module") "-" "no_gcc") #t))
+ "" +][+ ENDFOR lang_env_dependencies +]
+
+@if gcc-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc"))
+ +][+ IF bootstrap +][+ FOR bootstrap_stage +]
+configure-stage[+id+]-target-[+module+]: maybe-all-stage[+id+]-target-libgcc[+
+ ENDFOR +][+ ENDIF bootstrap +][+ ENDIF +][+ ENDFOR target_modules +]
+@endif gcc-bootstrap
+
+@if gcc-no-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc")) +]
+configure-target-[+module+]: maybe-all-target-libgcc[+
+ ENDIF +][+ ENDFOR target_modules +]
@endif gcc-no-bootstrap
+[+ FOR target_modules +][+ IF (not (lang-dep "no_c")) +]
+configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss[+
+ ENDIF +][+ IF (lang-dep "cxx") +]
+configure-target-[+module+]: maybe-all-target-libstdc++-v3[+
+ ENDIF +]
+[+ ENDFOR target_modules +]
+
CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@
GDB_TK = @GDB_TK@
INSTALL_GDB_TK = @INSTALL_GDB_TK@
@@ -1599,7 +1601,7 @@ config.status: configure
# Rebuilding configure.
AUTOCONF = autoconf
-$(srcdir)/configure: @MAINT@ $(srcdir)/configure.in $(srcdir)/config/acx.m4
+$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4
cd $(srcdir) && $(AUTOCONF)
# ------------------------------
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 5bb5bb2a6009..e006595f969e 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,1359 +1,1788 @@
-2006-12-11 Eric Botcazou <ebotcazou@adacore.com>
+2007-07-02 Joseph Myers <joseph@codesourcery.com>
- * elflink.c (bfd_elf_gc_sections): Also search for corresponding
- sections with .gnu.linkonce.t. prefix.
+ * elfxx-mips.c (mips_elf_calculate_relocation): Handle
+ R_MIPS_TLS_DTPREL32 and R_MIPS_TLS_DTPREL64.
+ * elf64-mips.c (mips_elf64_howto_table_rela): Support
+ R_MIPS_TLS_DTPREL64.
-2006-08-08 Nick Clifton <nickc@redhat.com>
+2007-07-02 Alan Modra <amodra@bigpond.net.au>
- PR binutils/2724
- * coffcode.h (coff_new_section_hook): Only modify the section
- symbol of sections which were created by the user.
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * config.in: Regenerate.
+ * po/SRC-POTFILES.in: Regenerate.
+ * po/bfd.pot: Regenerate.
+
+2007-07-02 Alan Modra <amodra@bigpond.net.au>
+
+ * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Tidy
+ symsec != NULL tests.
+
+2007-07-02 Alan Modra <amodra@bigpond.net.au>
+
+ PR 4712
+ * elf.c (assign_file_positions_for_load_sections): Adjust lma
+ by p_vaddr_offset.
+
+2007-06-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * aclocal.m4: Regenerated.
+ * Makefile.in: Likewise.
+
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
+
+ * elf32-ppc.c (ppc_elf_merge_obj_attributes): New.
+ (ppc_elf_merge_private_bfd_data): Call it.
+
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
+
+ * elfxx-mips.c (mips_elf_merge_obj_attributes): New.
+ (_bfd_mips_elf_merge_private_bfd_data): Call it.
+
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
+
+ * elf-attrs.c: New.
+ * Makefile.am (BFD32_BACKENDS): Add elf-attrs.lo.
+ (BFD32_BACKENDS_CFILES): Add elf-attrs.c.
+ (elf-attrs.lo): Generate dependencies.
+ * Makefile.in: Regenerate.
+ * configure.in (elf): Add elf-attrs.lo.
+ * configure: Regenerate.
+ * elf-bfd.h (struct elf_backend_data): Add entries for object
+ attributes.
+ (NUM_KNOWN_OBJ_ATTRIBUTES, obj_attribute, obj_attribute_list,
+ OBJ_ATTR_PROC, OBJ_ATTR_GNU, OBJ_ATTR_FIRST, OBJ_ATTR_LAST,
+ Tag_NULL, Tag_File, Tag_Section, Tag_Symbol, Tag_compatibility):
+ New.
+ (struct elf_obj_tdata): Add entries for object attributes.
+ (elf_known_obj_attributes, elf_other_obj_attributes,
+ elf_known_obj_attributes_proc, elf_other_obj_attributes_proc):
+ New.
+ (bfd_elf_obj_attr_size, bfd_elf_set_obj_attr_contents,
+ bfd_elf_get_obj_attr_int, bfd_elf_add_obj_attr_int,
+ bfd_elf_add_proc_attr_int, bfd_elf_add_obj_attr_string,
+ bfd_elf_add_proc_attr_string, bfd_elf_add_obj_attr_compat,
+ bfd_elf_add_proc_attr_compat, _bfd_elf_attr_strdup,
+ _bfd_elf_copy_obj_attributes, _bfd_elf_obj_attrs_arg_type,
+ _bfd_elf_parse_attributes, _bfd_elf_merge_object_attributes): New.
+ * elf.c (_bfd_elf_copy_private_bfd_data): Copy object attributes.
+ (bfd_section_from_shdr): Handle attributes sections.
+ * elflink.c (bfd_elf_final_link): Handle attributes sections.
+ * elfxx-target.h (elf_backend_obj_attrs_vendor,
+ elf_backend_obj_attrs_section, elf_backend_obj_attrs_arg_type,
+ elf_backend_obj_attrs_section_type): New.
+ (elfNN_bed): Update.
+ * elf32-arm.c (NUM_KNOWN_ATTRIBUTES, aeabi_attribute,
+ aeabi_attribute_list): Remove.
+ (struct elf32_arm_obj_tdata): Remove object attributes fields.
+ (check_use_blx, bfd_elf32_arm_set_vfp11_fix, using_thumb2,
+ elf32_arm_copy_private_bfd_data, elf32_arm_merge_eabi_attributes):
+ Update for new object attributes interfaces.
+ (uleb128_size, is_default_attr, eabi_attr_size,
+ elf32_arm_eabi_attr_size, write_uleb128, write_eabi_attribute,
+ elf32_arm_set_eabi_attr_contents, elf32_arm_bfd_final_link,
+ elf32_arm_new_eabi_attr, elf32_arm_get_eabi_attr_int,
+ elf32_arm_add_eabi_attr_int, attr_strdup,
+ elf32_arm_add_eabi_attr_string, elf32_arm_add_eabi_attr_compat,
+ copy_eabi_attributes, elf32_arm_parse_attributes): Remove. Moved
+ to generic code in elf-attrs.c.
+ (elf32_arm_obj_attrs_arg_type): New.
+ (elf32_arm_fake_sections): Do not handle .ARM.attributes.
+ (elf32_arm_section_from_shdr): Do not handle SHT_ARM_ATTRIBUTES.
+ (bfd_elf32_bfd_final_link): Remove.
+ (elf_backend_obj_attrs_vendor, elf_backend_obj_attrs_section,
+ elf_backend_obj_attrs_arg_type,
+ elf_backend_obj_attrs_section_type): New.
+ * elf32-bfin.c (bfin_elf_copy_private_bfd_data): Copy object
+ attributes.
+ * elf32-frv.c (frv_elf_copy_private_bfd_data): Likewise.
+ * elf32-iq2000.c (iq2000_elf_copy_private_bfd_data): Likewise.
+ * elf32-mep.c (mep_elf_copy_private_bfd_data): Likewise.
+ * elf32-mt.c (mt_elf_copy_private_bfd_data): Likewise.
+ * elf32-sh.c (sh_elf_copy_private_data): Likewise.
+ * elf64-sh64.c (sh_elf64_copy_private_data_internal): Likewise.
+
+2007-06-29 Paul Brook <paul@codesourcery.com>
+
+ * elf32-arm.c (bfd_elf32_arm_process_before_allocation): Suppress
+ call veneers for call relocations against undefined symbols.
+ (elf32_arm_final_link_relocate): Turn call to undefined symbol
+ into a jump to the next instruction.
+
+2007-06-29 Michael Snyder <msnyder@svkmacdonelllnx>
+
+ * bfd.c (bfd_demangle): Plug memory leak (Coverity).
+
+2007-06-29 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
+
+ * Makefile.am: Add cr16 related entry
+ * Makefile.in: Regenerate
+ * archures.c: Add bfd_cr16_arch
+ * bfd-in2.h: Regenerate
+ * config.bfd: Add cr16-elf
+ * configure.in: Add bfd_elf32_cr16_vec
+ * configure: Regenerate.
+ * targets.c: Added cr16 related information
+ * cpu-cr16.c: New file.
+ * elf32-cr16.c: New file.
+ * reloc.c: Added cr16 relocs.
+
+2007-06-29 Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c (_bfd_elf_link_assign_sym_version): Improve error
+ message for undefined version nodes.
+ (elf_gc_sweep): Don't warn when zero size sections are
+ removed.
+
+2007-06-29 Nathan Froyd <froydnj@codesourcery.com>
+
+ * elf32-ppc.c (ppc_elf_info_to_howto): Check for invalid relocation
+ types.
+
+2007-06-29 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-spu.c (spu_elf_fake_sections): New function.
+ (elf_backend_fake_sections): Define.
+
+2007-06-29 Alan Modra <amodra@bigpond.net.au>
+
+ * elf.c (assign_file_positions_for_load_sections): Use elf
+ section header sh_size rather than bfd section size, simplifying
+ .tbss handling.
+
+2007-06-29 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/4701
+ * elf.c (assign_file_positions_for_load_sections): Ensure bss
+ segments meet gABI alignment requirements. Don't allocate
+ file space for bss sections in a segment also containing file
+ or program headers.
-2006-07-19 Alan Modra <amodra@bigpond.net.au>
+2007-06-27 Alan Modra <amodra@bigpond.net.au>
- * bfd-in.h (enum notice_asneeded_action): Define.
+ * bfd.c (struct bfd): Rename "next" to "archive_next".
+ * archive.c: Rename uses throughout file.
+ * archive64.c: Likewise.
+ * coff-rs6000.c: Likewise.
+ * ecoff.c: Likewise.
+ * som.c: Likewise.
* bfd-in2.h: Regenerate.
- * elflink.c (elf_link_add_object_symbols): Call linker "notice"
- function with NULL name for as-needed handling.
-2006-07-12 Matthew R. Dempsky <mrd@alkemio.org>
+ * elf32-ppc.c (ppc_elf_select_plt_layout): Properly iterate over
+ input bfds.
+ * elf32-spu.c (spu_elf_create_sections): Likewise.
+
+2007-06-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ * dwarf2.c (find_line): New. Contains the duplicated code from:
+ (_bfd_dwarf2_find_nearest_line): Use it.
+ (_bfd_dwarf2_find_line): Use it.
+
+2007-06-26 Joseph Myers <joseph@codesourcery.com>
+
+ * elf32-arm.c (copy_eabi_attributes): Copy type of attributes.
+
+2007-06-25 Richard Sandiford <richard@codesourcery.com>
+
+ * elfxx-mips.c (mips_elf_calculate_relocation): Allow local stubs
+ to be used for calls from MIPS16 code.
+
+2007-06-23 Andreas Schwab <schwab@suse.de>
+
+ * configure.in (--with-separate-debug-dir): New option.
+ * configure: Regenerate.
+ * Makefile.am (dwarf2.lo): Add rule to pass DEBUGDIR.
+ * Makefile.in: Regenerate.
+ * dwarf2.c (_bfd_dwarf2_find_nearest_line): Pass DEBUGDIR to
+ bfd_follow_gnu_debuglink.
+ (_bfd_dwarf2_find_line): Likewise.
+
+2007-06-22 Nick Clifton <nickc@redhat.com>
+
+ * dwarf2.c: Add support for reading in debug information via a
+ .gnu_debuglink section:
+ (struct dwarf2_debug): Add bfd field to record the bfd containing
+ the debug info.
+ (parse_comp_unit): Remove ABFD parameter. Instead use the bfd
+ field in the dwarf2_debug structure.
+ (_bfd_dwarf2_find_nearest_line): If a debug info section could not
+ be found in the current bfd call bfd_follow_gnu_debuglink to see
+ if another file contains the debug information. If it does, open
+ it and continue.
+ (_bfd_dwarf2_find_line): Likewise.
+
+2007-06-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4590
+ * elfxx-ia64.c (sort_dyn_sym_info): Keep the valid got_offset
+ when removing duplicated entries.
+ (get_dyn_sym_info): Initialize the got_offset field to -1.
+ Update call to sort_dyn_sym_info.
+ (elfNN_ia64_relocate_section): Call sort_dyn_sym_info to sort
+ array of addend and remove duplicates.
+
+2007-06-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * libpei.h (_bfd_XXi_final_link_postscript): Remove
+ duplication.
+ (bfd_target_pei_p): New.
+ (bfd_target_pei_arch): New
+ (bfd_target_efi_p): Likewise.
+ (bfd_target_efi_arch): New
+ (bfd_pe_executable_p): Use bfd_target_pei_p and
+ bfd_target_efi_p.
+
+ * peicode.h (arch_type): New enum.
+ (pe_arch): New function.
+ (pe_bfd_object_p): Don't match PE/EFI target with EFI/PE file
+ if there is an EFI/PE target.
+
+2007-06-14 H.J. Lu <hongjiu.lu@intel.com>
- * cpu-m68k.c (bfd_m68k_compatible): Handle CPU32.
+ * Makefile.am (ACLOCAL_AMFLAGS): Add -I . -I ../config.
-2006-06-23 Daniel Jacobowitz <dan@codesourcery.com>
+ * acinclude.m4: Don't include m4 files. Remove libtool
+ kludge.
- * Makefile.am: Clear RELEASE.
* Makefile.in: Regenerated.
+ * aclocal.m4: Likewise.
+ * configure: Likewise.
-2006-06-23 Daniel Jacobowitz <dan@codesourcery.com>
+2007-06-11 Sterling Augustine <sterling@tensilica.com>
+ Bob Wilson <bob.wilson@acm.org>
- * configure.in: Update version to 2.17.
- * Makefile.am: Set RELEASE.
- * configure, Makefile.in: Regenerated.
+ * elf32-xtensa.c (extend_ebb_bounds_forward): Use renamed
+ XTENSA_PROP_NO_TRANSFORM flag instead of XTENSA_PROP_INSN_NO_TRANSFORM.
+ (extend_ebb_bounds_backward, compute_text_actions): Likewise.
+ (compute_ebb_proposed_actions, coalesce_shared_literal): Likewise.
+ (xtensa_get_property_predef_flags): Likewise.
+ (compute_removed_literals): Pass new arguments to is_removable_literal.
+ (is_removable_literal): Add sec, prop_table and ptblsize arguments.
+ Do not remove literal if the NO_TRANSFORM property flag is set.
-2006-06-12 Daniel Jacobowitz <dan@codesourcery.com>
+2007-05-31 Richard Sandiford <rsandifo@nildram.co.uk>
- * configure.in: Update version to 2.16.94.
- * configure: Regenerated.
+ * elfxx-mips.c (mips_elf_initialize_tls_index): When processing a
+ type (3) single-GOT entry, read tls_type from the hash table entry
+ rather than the GOT entry.
-2006-06-11 Richard Sandiford <richard@codesourcery.com>
- Thiemo Seufer <ths@mips.com>
-
- * elfxx-mips.c (mips_elf_link_hash_table): Add function_stub_size.
- (STUB_ORI): New macro.
- (STUB_LI16U): Fix formatting.
- (MIPS_FUNCTION_STUB_SIZE): Delete.
- (MIPS_FUNCTION_STUB_MAX_SIZE): Likewise.
- (MIPS_FUNCTION_STUB_NORMAL_SIZE): New macro.
- (MIPS_FUNCTION_STUB_BIG_SIZE): Likewise.
- (_bfd_mips_elf_adjust_dynamic_symbol): Use htab->function_stub_size
- instead of MIPS_FUNCTION_STUB_SIZE.
- (count_section_dynsyms): New function, split out from
- _bfd_mips_elf_final_link.
- (_bfd_mips_elf_always_size_sections): Get a worst-case estimate
- of the number of dynamic symbols needed and use it to set up
- function_stub_size. Use function_stub_size rather than
- MIPS_FUNCTION_STUB_SIZE to determine the size of the stub section.
- Use 16-byte stubs for 0x10000 dynamic symbols.
- (_bfd_mips_elf_size_dynamic_sections): Use htab->function_stub_size
- instead of MIPS_FUNCTION_STUB_SIZE. Fix formatting.
- (_bfd_mips_elf_finish_dynamic_symbol): Likewise. Change the
- size of the stub buffer from MIPS_FUNCTION_STUB_MAX_SIZE to
- MIPS_FUNCTION_STUB_BIG_SIZE. Tweak the check for unhandled dynindxes.
- Use MIPS_FUNCTION_STUB_BIG_SIZE rather than a hard-coded 20.
- Use STUB_ORI rather than STUB_LI16U for big stubs.
- (_bfd_mips_elf_link_hash_table_create): Initialize function_stub_size.
- (_bfd_mips_elf_final_link): Use count_section_dynsyms.
-
-2006-06-08 David Daney <ddaney@avtrex.com>
-
- * elfxx-mips.c (STUB_LI16): Removed.
- (STUB_LUI): New macro.
- (STUB_LI16U): Ditto.
- (STUB_LI16S): Ditto.
- (MIPS_FUNCTION_STUB_SIZE): Rewrote to take info parameter.
- (_bfd_mips_elf_adjust_dynamic_symbol): Pass info parameter to
- MIPS_FUNCTION_STUB_SIZE.
- (_bfd_mips_elf_always_size_sections): Ditto.
- (_bfd_mips_elf_size_dynamic_sections): Ditto.
- (_bfd_mips_elf_finish_dynamic_sections): Ditto.
- (_bfd_mips_elf_finish_dynamic_symbol): Rewrote stub generation
- to allow larger symbol table indexes.
-
-2006-06-07 Joseph S. Myers <joseph@codesourcery.com>
-
- * po/Make-in (pdf, ps): New dummy targets.
-
-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
- * elf-eh-frame.c (_bfd_elf_write_section_eh_frame): Properly
- update CIE/FDE length. Don't pad to the section alignment.
-
-2006-05-30 Nick Clifton <nickc@redhat.com>
-
- * po/es.po: Updated Spanish translation.
-
-2006-05-23 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (compare_symbols): Prefer strong dynamic global
- function syms over other syms.
-
-2006-05-22 Daniel Jacobowitz <dan@codesourcery.com>
-
- * elflink.c (_bfd_elf_add_dynamic_entry): Remove DT_TEXTREL
- check.
- (bfd_elf_final_link): Add a late DT_TEXTREL check.
- * elfxx-mips.c (MIPS_ELF_READONLY_SECTION): Define.
- (mips_elf_create_dynamic_relocation): Set DF_TEXTREL.
- (_bfd_mips_elf_check_relocs): Delete MIPS_READONLY_SECTION.
- Use MIPS_ELF_READONLY_SECTION.
- (_bfd_mips_elf_size_dynamic_sections): Clear DF_TEXTREL after
- creating DT_TEXTREL.
- (_bfd_mips_elf_finish_dynamic_sections): Clear textrel markers
- if no text relocations were generated.
-
-2006-05-17 Daniel Jacobowitz <dan@codesourcery.com>
-
- * configure.in: Update version to 2.16.93.
- * configure: Regenerated.
+2007-06-01 Alan Modra <amodra@bigpond.net.au>
-2006-05-17 Alan Modra <amodra@bigpond.net.au>
+ * simple.c (bfd_simple_get_relocated_section_contents): Init
+ input_bfds_tail.
- * elflink.c (elf_gc_sweep): Don't specially keep non-alloc,
- non-load sections if they have relocs.
+2007-05-30 Alan Modra <amodra@bigpond.net.au>
-2006-05-16 Andreas Schwab <schwab@suse.de>
+ * elf.c (elf_fake_sections): Adjust test for SHT_NOBITS sections
+ created by objcopy --only-keep-debug.
+ (_bfd_elf_init_private_section_data): Only change elf_section_type
+ if it is SHT_NULL.
- * aoutf1.h (struct external_sparc_core): Declare c_regs as struct
- regs instead of an array of int.
- (struct external_solaris_bcp_core): Likewise.
- (swapcore_sun3): Use offsetof instead of computing the offset
- manually.
- (swapcore_sparc): Likewise. Simplify reference to c_regs.
- (swapcore_solaris_bcp): Likewise.
+ * elf.c (assign_file_positions_for_load_sections): Correct sh_type
+ to SHT_NOBITS earlier. Base actions in rest of function on sh_type
+ and sh_flags instead of bfd section flags. Delete voff and code
+ keeping nobits segments aligned.
-2006-05-15 Alan Modra <amodra@bigpond.net.au>
+2007-05-25 Eric Christopher <echristo@apple.com>
- PR 2658
- * elf32-ppc.c (ppc_elf_relax_section): Don't segfault on non-pic
- -shared link.
+ * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame):
+ Check that sym_sec isn't NULL before accessing.
-2006-05-11 Michael Matz <matz@suse.de>
+2007-05-24 Steve Ellcey <sje@cup.hp.com>
- * elflink.c (match_group_member): Correctly iterate group
- members.
+ * Makefile.in: Regnerate.
+ * configure: Regenerate.
+ * aclocal.m4: Regenerate.
+ * doc/Makefile.in: Regenerate.
-2006-05-11 Nick Clifton <nickc@redhat.com>
+2007-05-22 Paul Brook <paul@codesourcery.com>
- PR ld/2607
- * elfcode.h (valid_section_index_p): New function: Checks for a
- valid section index. Allows indicies in the range SHN_LOPROC to
- SHN_HIOS.
- (elf_object_p): Use valid_section_index_p.
+ * elf32-arm.c (output_arch_syminfo): Replace plt_shndx and plt_offset
+ with sec and sec_shndx.
+ (elf32_arm_ouput_plt_map_sym): Use them.
+ (elf32_arm_output_arch_local_syms): Output mapping symbols for
+ interworking glue.
-2006-05-11 Nick Clifton <nickc@redhat.com>
+2007-05-18 Paul Brook <paul@codesourcery.com>
- PR ld/2257
- * elfcode.h (elf_object_p): Allow files with corrupt e_shstrndx
- fields to still be handled as ELF files.
+ * elf32-arm.c (ARM2THUMB_V5_STATIC_GLUE_SIZE): Define.
+ (a2t1v5_ldr_insn, a2t1v5_ldr_insn): New.
+ (record_arm_to_thumb_glue): Add v5t non-pic glue.
+ (elf32_arm_create_thumb_stub): Ditto.
-2006-05-10 Alan Modra <amodra@bigpond.net.au>
+2007-05-16 H.J. Lu <hongjiu.lu@intel.com>
+ Alan Modra <amodra@bigpond.net.au>
- PR 2342
- * elflink.c (_bfd_elf_default_action_discarded): Revert 2006-02-16.
+ * elflink.c (_bfd_elf_adjust_dynamic_copy): Align dynamic bss
+ section to the minimum alignment.
-2006-05-10 Alan Modra <amodra@bigpond.net.au>
+2007-05-15 H.J. Lu <hongjiu.lu@intel.com>
+ Alan Modra <amodra@bigpond.net.au>
- * elf64-ppc.c (ppc64_elf_tls_optimize): Only optimize
- R_PPC64_TPREL64 and R_PPC64_DTPMOD64 relocs when they are in
- the .toc and referenced by a TLS code sequence.
- (ppc64_elf_edit_toc): Cater for the unlikely situation that
- .toc is the first section in a file.
+ PR ld/4504
+ * elf-bfd.h (_bfd_elf_adjust_dynamic_copy): New.
+ * elflink.c (_bfd_elf_adjust_dynamic_copy): New.
+
+ * elf-m10300.c (_bfd_mn10300_elf_adjust_dynamic_symbol): Call
+ _bfd_elf_adjust_dynamic_copy to adjust for the copy in dynamic
+ bss section.
+ * elf32-arm.c (elf32_arm_adjust_dynamic_symbol): Likewise.
+ * elf32-cris.c (elf_cris_adjust_dynamic_symbol): Likewise.
+ * elf32-hppa.c (elf32_hppa_adjust_dynamic_symbol): Likewise.
+ * elf32-i370.c (i370_elf_adjust_dynamic_symbol): Likewise.
+ * elf32-i386.c (elf_i386_adjust_dynamic_symbol): Likewise.
+ * elf32-m32r.c (m32r_elf_adjust_dynamic_symbol): Likewise.
+ * elf32-m68k.c (elf_m68k_adjust_dynamic_symbol): Likewise.
+ * elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Likewise.
+ * elf32-s390.c (elf_s390_adjust_dynamic_symbol): Likewise.
+ * elf32-sh.c (sh_elf_adjust_dynamic_symbol): Likewise.
+ * elf32-vax.c (elf_vax_adjust_dynamic_symbol): Likewise.
+ * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Likewise.
+ * elf64-s390.c (elf_s390_adjust_dynamic_symbol): Likewise.
+ * elf64-sh64.c (sh64_elf64_adjust_dynamic_symbol): Likewise.
+ * elf64-x86-64.c (elf64_x86_64_adjust_dynamic_symbol): Likewise.
+ * elfxx-mips.c (_bfd_mips_vxworks_adjust_dynamic_symbol): Likewise.
+ * elfxx-sparc.c (_bfd_sparc_elf_adjust_dynamic_symbol): Likewise.
+
+2007-05-15 Richard Sandiford <richard@codesourcery.com>
+
+ * elfxx-mips.c (mips_elf_create_local_got_entry): Remove
+ input_section argument. Create .rela.dyn relocations against
+ symbol 0 rather than the section symbol.
+ (mips_elf_local_got_index): Remove input_section argument.
+ Update call to mips_elf_create_local_got_entry.
+ (mips_elf_got_page, mips_elf_got16_entry): Likewise.
+ (mips_elf_calculate_relocation): Update calls to
+ mips_elf_local_got_index, mips_elf_got16_entry and mips_elf_got_page.
+
+2007-05-15 Mark Shinwell <shinwell@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_final_link_relocate): Correctly
+ handle the Thumb-2 JUMP19 relocation.
+
+2007-05-15 Alan Modra <amodra@bigpond.net.au>
+
+ PR 4479
+ * elf.c (elf_fake_sections): Don't allow backend to change
+ SHT_NOBITS if called for strip/objcopy --only-keep-debug.
+ * elfxx-mips.c (_bfd_mips_elf_fake_sections): Remove similar
+ fix from here.
+
+2007-05-14 Alan Modra <amodra@bigpond.net.au>
+
+ * elf.c (bfd_elf_string_from_elf_section): Return NULL on
+ invalid shstrndx.
+ (bfd_elf_get_str_section): Likewise.
+
+2007-05-12 Alan Modra <amodra@bigpond.net.au>
+
+ PR 4497
+ * elf-eh-frame.c (struct cie): Add "local_personality". Make
+ "personality" a union.
+ (cie_eq): Compare local_personality too. Adjust personality
+ comparison.
+ (_bfd_elf_discard_section_eh_frame): Check binding on personality
+ reloc sym to allow for bad symtab. Use stashed local syms rather
+ than reading personality local sym. Handle discarded sections.
+
+2007-05-12 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-spu.c (elf_howto_table): Add howto for R_SPU_ADDR16X.
+
+2007-05-11 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-ppc.h (ppc_elf_select_plt_layout): Update prototype.
+ (enum ppc_elf_plt_type): Move from..
+ * elf32-ppc.c: ..here.
+ (struct ppc_elf_obj_tdata): Add makes_plt_call and has_rel16.
+ (struct ppc_elf_link_hash_table): Reorder. Add old_bfd. Delete
+ can_use_new_plt. Make is_vxworks a bitfield.
+ (ppc_elf_link_hash_table_create): Don't clear is_vxworks (again).
+ (ppc_elf_check_relocs): Update setting of reloc flags. Set old_bfd.
+ (ppc_elf_select_plt_layout): Modify parameters. Use bfd reloc
+ flags to better detect object files needing old bss-style plt.
+ Allow secure plt to be used without rel16 relocs being detected.
+ Warn if secure plt request cannot be allowed.
+
+2007-05-11 Alan Modra <amodra@bigpond.net.au>
+
+ * reloc.c (BFD_RELOC_SPU_PPU32, BFD_RELOC_SPU_PPU64): Define.
+ * elf-bfd.h (struct elf_backend_data): Change return type of
+ elf_backend_relocate_section to int.
+ * elf32-spu.c (elf_howto_table): Add howtos for R_SPU_PPU32 and
+ R_SPU_PPU64.
+ (spu_elf_bfd_to_reloc_type): Convert new relocs.
+ (spu_elf_count_relocs): New function.
+ (elf_backend_count_relocs): Define.
+ (spu_elf_relocate_section): Arrange to emit R_SPU_PPU32 and
+ R_SPU_PPU64 relocs.
+ * elflink.c (elf_link_input_bfd): Emit relocs if relocate_section
+ returns 2.
+ * bfd-in2.h: Regenerate.
+ * libbfd.h: Regenerate.
-2006-05-03 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+2007-05-10 Richard Sandiford <richard@codesourcery.com>
- PR binutils/2584
- * tekhex.c (getvalue): Change return type to bfd_boolean and
- add the new parameter. Return false if the unexpected character
- is found.
- (getsym): Likewise.
- (first_phase): Change return type to bfd_boolean and return
- false if the unexpected character is found. Replace abort
- with returning false.
- (pass_over): Change return type to bfd_boolean and the type of
- the second argument to bfd_boolean (*) (bfd *, int, char *).
- Return false if FUNC returns false.
- (tekhex_object_p): Return NULL if pass_over fails.
+ * elf32-arm.c (elf32_arm_check_relocs): Don't create PLT entries
+ for R_ARM_ABS12 relocs.
+ (elf32_arm_finish_dynamic_symbol): Fix the loop that creates
+ non-shared VxWorks PLT entries.
-2006-05-02 Paul Brook <paul@codesourcery.com>
+2007-05-11 Alan Modra <amodra@bigpond.net.au>
- * elf32-arm.c (elf32_arm_final_link_relocate): Set thumb funciton bit
- for R_ARM_REL32.
+ PR 4454
+ * elf-eh-frame.c (struct cie): Make "personality" a bfd_vma.
+ (_bfd_elf_discard_section_eh_frame): Handle local syms on
+ personality relocation.
-2006-04-27 Alan Modra <amodra@bigpond.net.au>
+2007-05-10 Richard Sandiford <richard@codesourcery.com>
- * coff-rs6000.c (xcoff_write_archive_contents_old): Warning fix.
+ * elf.c (assign_file_positions_for_load_sections): Use p_memsz
+ rather than p_filesz to calculate the LMA of the end of a segment.
-2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+2007-05-10 Jakub Jelinek <jakub@redhat.com>
- * configure.in: Update version to 2.16.92.
- * configure: Regenerated.
+ * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Don't do copyreloc
+ processing if symbol is defined in the executable.
+
+2007-05-10 Alexandre Oliva <aoliva@redhat.com>
+
+ * elf32-frv.c (_frvfdpic_check_discarded_relocs): New.
+ (frvfdpic_elf_discard_info): New.
+ (elf_backend_discard_info): Define for FDPIC.
+
+2007-05-09 Mark Shinwell <shinwell@codesourcery.com>
+
+ * elf32-arm.c (bfd_elf32_arm_vfp11_erratum_scan): Don't
+ attempt to scan if the bfd doesn't correspond to an ELF image.
+ (bfd_elf32_arm_vfp11_fix_veneer_locations): Likewise.
+
+2007-05-08 Alexandre Oliva <aoliva@redhat.com>
+
+ * elf32-frv.c (elf32_frv_relocate_section): Discard dynamic relocs
+ for which _bfd_elf_section_offset returns -1.
+
+2007-05-08 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-spu.c (spu_elf_size_stubs): Use "void *" for psyms.
+ (mark_functions_via_relocs): Likewise.
+
+2007-05-07 Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c (bfd_elf_final_link): Correct reloc handling for
+ elf_backend_count_relocs.
+ (bfd_elf_discard_info): Print an error if we can't read syms.
+
+2007-05-07 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-spu.c (spu_elf_reloc_type_lookup): Return NULL on
+ invalid reloc code.
+ (spu_elf_gc_mark_hook, spu_elf_section_processing): Delete functions.
+ (elf_backend_gc_mark_hook, elf_backend_section_processing): Don't
+ define.
+
+2007-05-07 Alan Modra <amodra@bigpond.net.au>
+
+ * elf.c (assign_file_positions_for_load_sections): Don't check
+ core segment.
+
+2007-05-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elflink.c (elf_link_sort_relocs): Return if both .rela.dyn
+ and .rel.dyn aren't present.
+
+2007-05-04 Nick Clifton <nickc@redhat.com>
+
+ * elflink.c (elf_link_sort_relocs): If both .rela.dyn and .rel.dyn
+ sections are present examine the indirect sections in an attempt
+ to compute the correct relocation size. If there is any
+ ambiguity, produce an error and refuse to sort.
+
+2007-05-03 Sandra Loosemore <sandra@codesourcery.com>
+
+ * elf32-arm.c (allocate_dynrelocs): Fix typo in comment.
+
+2007-05-03 Vincent Riviere <vincent.riviere@freesbee.fr>
+ Nick Clifton <nickc@redhat.com>
+
+ PR gas/3041
+ * aoutx.h (swap_std_reloc_out): Treat relocs against weak symbols
+ in the same way as relocs against external symbols.
+
+2007-05-02 Alan Modra <amodra@bigpond.net.au>
+
+ * elf.c (assign_file_positions_for_load_sections): Set sh_offset
+ here. Set sh_type to SHT_NOBITS if we won't be allocating
+ file space. Don't bump p_memsz for non-alloc sections. Adjust
+ section-in-segment check.
+ (assign_file_positions_for_non_load_sections): Don't set sh_offset
+ here for sections that have already been handled above.
-2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+2007-04-30 Alan Modra <amodra@bigpond.net.au>
- * po/SRC-POTFILES.in: Regenerated.
+ * elf32-spu.c (struct spu_link_hash_table): Add stack_analysis
+ and emit_stack_syms bitfields.
+ (get_sym_h): Read all symbols if stack analysis will be done.
+ (spu_elf_create_sections): Add stack_analysis and emit_stack_syms
+ params, and stash in hash table.
+ (is_hint): Split off from..
+ (is_branch): ..here. Adjust callers.
+ (spu_elf_size_stubs): Add stack_analysis param. Arrange to read
+ and keep all syms.
+ (write_one_stub): Fix mem leak.
+ (find_function_stack_adjust): New function.
+ (sort_syms_syms, sort_syms_psecs): New vars.
+ (sort_syms): New function.
+ (struct call_info, struct function_info): New.
+ (struct spu_elf_stack_info): New.
+ (alloc_stack_info, maybe_insert_function, func_name): New functions.
+ (is_nop, insns_at_end, check_function_ranges): Likewise.
+ (find_function, insert_callee, mark_functions_via_relocs): Likewise.
+ (pasted_function, interesting_section, discover_functions): Likewise.
+ (mark_non_root, call_graph_traverse, build_call_tree): Likewise.
+ (sum_stack, spu_elf_stack_analysis, spu_elf_final_link): Likewise.
+ (bfd_elf32_bfd_final_link): Define.
+ * elf32-spu.h (struct _spu_elf_section_data): Add stack_info field.
+ (spu_elf_create_sections, spu_elf_size_stubs): Update prototypes.
-2006-04-14 David Heine <dlheine@tensilica.com>
+2007-04-28 Sergey Rogozhkin <rogozhkin@niisi.msk.ru>
- * elf32-xtensa.c (build_reloc_opcodes): New.
- (compute_text_actions): Use it to decode opcodes outside inner loop.
- (check_section_ebb_pcrels_fit): Add "reloc_opcodes" argument, and if
- it is set, use it to get the opcodes for relocations.
- (move_shared_literal): Adjust call to check_section_ebb_pcrels_fit.
+ * elfxx-mips.c (mips_elf_create_dynamic_relocation): Don't access
+ memory which we might not own.
-2006-04-08 H.J. Lu <hongjiu.lu@intel.com>
+2007-04-27 Bob Wilson <bob.wilson@acm.org>
- PR ld/2513
- * elf32-i386.c (GOT_TLS_MASK): New macro for tls_type.
- (GOT_TLS_IE_IE): Likewise.
- (GOT_TLS_IE_GD): Likewise.
- (GOT_TLS_IE_MASK): Likewise.
- (elf_i386_check_relocs): For global symbols, set GOT_TLS_IE_GD
- and GOT_TLS_IE_IE for R_386_TLS_GD and R_386_TLS_IE
- respectively.
- (allocate_dynrelocs): If both GOT_TLS_IE_IE and GOT_TLS_IE_GD
- are set, treat tls_type as GOT_TLS_IE_BOTH.
- (elf_i386_relocate_section): Likewise.
+ * elf32-xtensa.c (elf_xtensa_make_sym_local): Restore deleted function.
+ (elf_xtensa_hide_symbol, elf_backend_hide_symbol): Likewise.
+ (elf_xtensa_allocate_dynrelocs): Use elf_xtensa_make_sym_local.
-2006-04-07 Randolph Chung <tausq@debian.org>
+2007-04-27 Bob Wilson <bob.wilson@acm.org>
- * elf64-hppa.c (elf64_hppa_grok_prstatus): New function.
- (elf64_hppa_grok_psinfo): Likewise.
- (elf_backend_grok_pstatus, elf_backend_grok_psinfo): Define.
+ * elf32-xtensa.c (xtensa_read_table_entries): Step through table
+ contents and relocs in parallel.
-2006-04-06 DJ Delorie <dj@redhat.com>
+2007-04-27 Bob Wilson <bob.wilson@acm.org>
- * elf32-m32c.c (m32c_elf_relocate_section): Generate a symbol for
- each plt entry we create.
+ * elf32-xtensa.c (relax_property_section): Remove extra irel increment.
-2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
+2007-04-27 Alan Modra <amodra@bigpond.net.au>
- * po/Make-in: Add install-html target.
- * Makefile.am: Rename docdir to bfddocdir. Add datarootdir, docdir
- htmldir. Add install-html and install-html-recursive targets.
+ * cpu-rs6000.c: Write Mimi's name in ASCII.
+ * coff-rs6000.c: Likewise.
+ * rs6000-core.c: Likewise.
+
+2007-04-27 Alan Modra <amodra@bigpond.net.au>
+
+ * sysdep.h: Include config.h first.
+ Many files: Include sysdep.h before bfd.h.
+ * Makefile.am: Run "make dep-am".
* Makefile.in: Regenerate.
- * configure.in: AC_SUBST for datarootdir, docdir and htmldir.
- * configure: Regenerate.
-2006-04-06 H.J. Lu <hongjiu.lu@intel.com>
+2007-04-25 Alan Modra <amodra@bigpond.net.au>
- * elfxx-ia64.c (elfNN_ia64_relax_section): Skip unneeded passes
- with the skip_relax_pass_0 and skip_relax_pass_1 bits in the
- section structure.
+ * sysdep.h: Revert last change.
-2006-04-05 Bernd Schmidt <bernd.schmidt@analog.com>
+2007-04-24 Nick Clifton <nickc@redhat.com>
- * elf32-bfin.c (bfinfdpic_relocs_info_hash): Sprinkle casts to
- eliminate warnings.
+ * coffcode.h (coff_slurp_reloc_table): Initialise dst.r_offset.
+ * coff-m68k.c (m68kcoff_rtype_to_howto): Initialize relent.howto.
-2006-04-05 H.J. Lu <hongjiu.lu@intel.com>
- James E Wilson <wilson@specifixinc.com>
+2007-04-24 Alan Modra <amodra@bigpond.net.au>
- PR ld/2442
- * elfxx-ia64.c (elfNN_ia64_dyn_sym_info): Remove next.
- (elfNN_ia64_local_hash_entry): Add count, sorted_count and
- size.
- (elfNN_ia64_link_hash_entry): Likewise.
- (elfNN_ia64_new_elf_hash_entry): Initialize count, sorted_count
- and size.
- (elfNN_ia64_hash_copy_indirect): Updated elfNN_ia64_dyn_sym_info
- processing.
- (elfNN_ia64_hash_hide_symbol): Likewise.
- (elfNN_ia64_global_dyn_sym_thunk): Likewise.
- (elfNN_ia64_local_dyn_sym_thunk): Likewise.
- (elfNN_ia64_global_dyn_info_free): New function.
- (elfNN_ia64_local_dyn_info_free): Likewise.
- (elfNN_ia64_hash_table_free): Free local and global
- elfNN_ia64_dyn_sym_info.
- (addend_compare): New function.
- (sort_dyn_sym_info): Likewise.
- (get_dyn_sym_info): Updated to use binary search for addend.
- (elfNN_ia64_check_relocs): Scan relocations to create dynamic
- relocation arrays first.
-
-2006-04-05 Bernd Schmidt <bernd.schmidt@analog.com>
-
- * elf32-bfin.c (_bfin_create_got_section): Don't generate a _gp
- symbol.
-
-2006-04-05 H.J. Lu <hongjiu.lu@intel.com>
-
- PR ld/2411
- * elflink.c (check_dynsym): New.
- (elf_link_output_extsym): Use it.
- (bfd_elf_final_link): Likewise.
-
-2006-04-05 H.J. Lu <hongjiu.lu@intel.com>
-
- PR ld/2404
- * elflink.c (_bfd_elf_merge_symbol): Skip the default indirect
- symbol from the dynamic definition with the default version if
- its type and the type of existing regular definition mismatch.
-
-2006-04-05 Richard Sandiford <richard@codesourcery.com>
- Daniel Jacobowitz <dan@codesourcery.com>
-
- * config.bfd (sparc-*-vxworks*): New stanza.
- * configure.in (bfd_elf32_sparc_vxworks_vec): New stanza.
- (bfd_elf32_sparc_vec, bfd_elf64_sparc_vec): Add elf-vxworks.lo.
+ * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Warn if
+ eh_frame_hdr table won't be created.
+
+2007-04-24 Alan Modra <amodra@bigpond.net.au>
+
+ * acinclude.m4: Include config/stdint.m4.
+ * configure.in: Invoke GCC_HEADER_STDINT.
+ * sysdep.h: Don't include ansidecl.h here.
* configure: Regenerate.
- * elf32-sparc.c: Include elf-vxworks.h.
- (elf32_sparc_vxworks_link_hash_table_create: New.
- (elf32_sparc_vxworks_final_write_processing): New.
- (TARGET_BIG_SYM): Override for VxWorks.
- (TARGET_BIG_NAME, ELF_MINPAGESIZE): Likewise.
- (bfd_elf32_bfd_link_hash_table_create): Likewise.
- (elf_backend_want_got_plt, elf_backend_plt_readonly): Likewise.
- (elf_backend_got_header_size, elf_backend_add_symbol_hook): Likewise.
- (elf_backend_link_output_symbol_hook): Likewise.
- (elf_backend_emit_relocs): Likewise.
- (elf_backend_final_write_processing, elf32_bed): Likewise.
- * elfxx-sparc.c: Include libiberty.h and elf-vxworks.h.
- (sparc_vxworks_exec_plt0_entry, sparc_vxworks_exec_plt_entry): New.
- (sparc_vxworks_shared_plt0_entry, sparc_vxworks_shared_plt_entry): New.
- (_bfd_sparc_elf_link_hash_table_create): Don't initialize
- build_plt_entry here.
- (create_got_section): Initialize sgotplt for VxWorks.
- (_bfd_sparc_elf_create_dynamic_sections): Initialize build_plt_entry,
- plt_header_size and plt_entry_size, with new VxWorks-specific settings.
- Call elf_vxworks_create_dynamic_sections for VxWorks.
- (allocate_dynrelocs): Use plt_header_size and plt_entry_size.
- Allocate room for .got.plt and .rela.plt.unloaded entries on VxWorks.
- (_bfd_sparc_elf_size_dynamic_sections): Don't allocate a nop in .plt
- for VxWorks. Check for the .got.plt section.
- (sparc_vxworks_build_plt_entry): New function.
- (_bfd_sparc_elf_finish_dynamic_symbol): Add handling of VxWorks PLTs.
- Don't make _GLOBAL_OFFSET_TABLE_ and _PROCEDURE_LINKAGE_TABLE_
- absolute on VxWorks.
- (sparc32_finish_dyn): Add special handling for DT_RELASZ
- and DT_PLTGOT on VxWorks.
- (sparc_vxworks_finish_exec_plt): New.
- (sparc_vxworks_finish_shared_plt): New.
- (_bfd_sparc_elf_finish_dynamic_sections): Call them.
- Use plt_header_size and plt_entry_size.
- * elfxx-sparc.h (_bfd_sparc_elf_link_hash_table): Add is_vxworks,
- srelplt2, sgotplt, plt_header_size and plt_entry_size fields.
- * Makefile.am (elfxx-sparc.lo): Depend on elf-vxworks.h.
- (elf32-sparc.lo): Likewise.
+ * config.in: Regenerate.
* Makefile.in: Regenerate.
- * targets.c (bfd_elf32_sparc_vxworks_vec): Declare.
- (_bfd_target_vector): Add a pointer to it.
-
-2006-03-30 Ben Elliston <bje@au.ibm.com>
-
- PR ld/2267
- * elflink.c (elf_fixup_link_order): Ensure `elfsec' is not a
- special section number that exceeds the number of ELF sections
- (eg. SHN_MIPS_SCOMMON).
-
-2006-03-27 Richard Sandiford <richard@codesourcery.com>
-
- * elfxx-mips.c (mips_got_entry): Add more commentary.
- (mips_elf_local_got_index): Use the hash table entry to record
- the GOT index of forced-local symbols.
- (mips_elf_initialize_tls_index): Rearrange code. Store the index
- in either the hash table entry or the mips_got_entry, not both.
- Add more commentary.
- (mips_elf_multi_got): Make sure the g->next is nonnull when calling
- mips_elf_initialize_tls_index.
-
-2006-03-25 Bernd Schmidt <bernd.schmidt@analog.com>
-
- * elf32-bfin.c (bfd_const_reloc, bfd_oper_reloc, bfin_push_reloc,
- RELOC_STACK_SIZE, reloc_stack, reloc_stack_tos, is_reloc_stack_empty,
- reloc_stack_push, reloc_stack_pop, reloc_stack_operate,
- bfin_areloc_howto_table): Delete. All
- uses deleted as well.
- (bfin_reloc_map): Delete all stack relocs.
- (bfin_info_to_howto, bfin_bfd_reloc_type_lookup,
- bfin_reloc_type_lookup): Don't support them.
- (bfin_relocate_section): Don't try to handle them.
-
- * config.bfd (bfin-*-*): Add bfd_elf32_bfinfdpic_vec.
- * configure.in: Likewise.
- * configure: Regenerate.
- * elf32-bfin.c: Include "elf/dwarf2.h" and "hashtab.h".
- (BFIN_RELOC_MAX): Now 0x21.
- (bfin_howto_table, bfin_reloc_map): Add FD-PIC relocs.
- (bfd_elf32_bfinfdpic_vec): Declare.
- (IS_FDPIC): New macro.
- (struct bfinfdpic_elf_link_hash_table): New struct.
- (bfinfdpic_hash_table, bfinfdpic_got_section,
- bfinfdpic_gotrel_section, bfinfdpic_gotfixup_section,
- bfinfdpic_plt_setion, bfinfdpic_pltrel_section,
- bfinfdpic_relocs_info, bfinfdpic_got_initial_offset,
- bfinfdpic_plt_initial_offset): Accessor macros for it.
- (BFINFDPIC_SYM_LOCAL, BFINFDPIC_FUNCDESC_LOCAL): New macros.
- (struct bfinfdpic_relocs_info): New struct.
- (LZPLT_RESOLVER_EXTRA, LZPLT_NORMAL_SIZE, LZPLT_ENTRIES,
- BFINFDPIC_LZPLT_BLOCK_SIZE, BFINFDPIC_LZPLT_RESOLV_LOC,
- DEFAULT_STACK_SIZE): New macros.
- (bfinfdpic_elf_link_hash_table_create, bfinfdpic_relocs_info_hash,
- bfinfdpic_relocs_info_eq, bfinfdpics_relocs_info_find,
- bfinfdpic_relocs_info_for_global, bfinfdpic_relocs_info_for_local,
- bfinfdpic_pic_merge_early_relocs_info, _bfinfdpic_add_dyn_reloc,
- _bfinfdpic_add_rofixup, _bfinfdpic_osec_to_segment,
- _bfinfdpic_osec_readonly_p, bfinfdpic_relocate_section,
- bfinfdpic_check_relocs, bfinfdpic_gc_sweep_hook,
- _bfinfdpic_link_omit_section_dynsym, _bfin_create_got_section,
- elf32_bfinfdpic_create_dynamic_sections, _bfinfdpic_get_fd_entry,
- _bfinfdpic_compute_got_alloc_data, _bfinfdpic_get_got_entry,
- _bfinfdpic_assign_got_entries, _bfinfdpic_assign_plt_entries,
- _bfinfdpic_resolve_final_relocs_info,
- elf32_bfinfdpic_size_dynamic_sections,
- elf32_bfinfdpic_always_size_sections,
- elf32_bfinfdpic_modify_segment_map,
- _bfinfdpic_count_got_plt_entries,
- elf32_bfinfdpic_finish_dynamic_sections,
- elf32_bfinfdpic_adjust_dynamic_symbol,
- elf32_bfinfdpic_finish_dynamic_symbol,
- elf32_bfinfdpic_elf_use_relative_eh_frame,
- elf32_bfinfdpic_elf_encode_eh_address,
- elf32_bfin_object_p, bfin_elf_copy_private_bfd_data,
- elf32_bfinfdpic_copy_private_bfd_data,
- (struct _bfinfdpic_dynamic_got_info,
- struct _bfinfdpic_dynamic_got_plt_info): New structs.
- (elf32_bfin_print_private_bfd_data): Print PIC flags.
- (elf32_bfin_merge_private_bfd_data): Extend to support FD-PIC.
- (TARGET_LITTLE_SYM, TARGET_LITTLE_NAME, elf32_bed,
- elf_backend_got_header_size, bfd_elf32_bfd_link_hash_table_create,
- elf_backend_always_size_sectinos, elf_backend_modify_segment_map,
- bfd_elf32_bfd_copy_private_bfd_data,
- elf_backend_create_dynamic_sections, elf_backend_adjust_dynamic_symbol,
- elf_backend_size_dynamic_sections, elf_backend_finish_dynamic_symbol,
- elf_backend_finish_dynamic_sections, elf_backend_relocate_section,
- elf_backend_can_make_relative_eh_frame, elf_backend_check_relocs,
- elf_backend_can_make_ldsa_relative_eh_frame, elf_backend_may_use_rel_p,
- elf_backend_may_use_rela_p, elf_backend_default_use_rela_p,
- elf_backend_omit_section_dynsym): Redefine these macros and include
- "elf32-target.h" again to create the elf32-bfinfdpic target.
- * reloc.c (BFD_RELOC_BFIN_GOT17M4, BFD_RELOC_BFIN_GOTHI,
- BFD_RELOC_BFIN_GOTLO, BFD_RELOC_BFIN_FUNCDESC,
- BFD_RELOC_BFIN_FUNCDESC_GOT17M4, BFD_RELOC_BFIN_FUNCDESC_GOTHI,
- BFD_RELOC_BFIN_FUNCDESC_GOTLO, BFD_RELOC_BFIN_FUNCDESC_VALUE,
- BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4, BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI,
- BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO, BFD_RELOC_BFIN_GOTOFFHI,
- BFD_RELOC_BFIN_GOTOFFLO): New.
- * targets.c (bfd_elf32_bfinfdpic_vec): New bfd_target.
- (_bfd_target_vector): Add it.
- * bfd-in2.h: Regenerate.
- * libbfd.h: Regenerate.
-2006-03-25 Richard Sandiford <richard@codesourcery.com>
+2007-04-23 Nathan Sidwell <nathan@codesourcery.com>
- * cpu-m68k.c (bfd_m68k_compatible): Treat ISA A+ and ISA B code as
- incompatible. Likewise MAC and EMAC code.
- * elf32-m68k.c (elf32_m68k_merge_private_bfd_data): Use
- bfd_get_compatible to set the new bfd architecture. Rely on it
- to detect incompatibilities.
+ * archures.c (bfd_mach_mcf_isa_c, bfd_mach_mcf_isa_c_mac,
+ bfd_mach_mcf_isa_c_emac): New.
+ * elf32-m68k.c (ISAC_PLT_ENTRY_SIZE, elf_isac_plt0_entry,
+ elf_isac_plt_entry, elf_isac_plt_info): New.
+ (elf32_m68k_object_p): Add ISA_C.
+ (elf32_m68k_print_private_bfd_data): Print ISA_C.
+ (elf32_m68k_get_plt_info): Detect ISA_C.
+ * cpu-m68k.c (arch_info): Add ISAC.
+ (m68k_arch_features): Likewise,
+ (bfd_m68k_compatible): ISAs B & C are not compatible.
-2006-03-22 Bob Wilson <bob.wilson@acm.org>
+2007-04-21 Nick Clifton <nickc@redhat.com>
- * elf32-xtensa.c (xtensa_read_table_entries): Remove assertion that
- rel->r_addend is zero.
+ * ecoff.c (_bfd_ecoff_write_armap): Initialise rehash.
+ (ecoff_link_add_archive_symbols): Likewise.
+ * coff-m68k.c (m68kcoff_common_addend_rtype_to_howto): Initialise
+ relent.howto.
+ * ieee.c (parse_int): Initialise x.
+ (must_parse_int): Initialise result.
+ (ieee_slurp_external_symbols): Initialise value.
-2006-03-22 Richard Sandiford <richard@codesourcery.com>
+2007-04-21 Alan Modra <amodra@bigpond.net.au>
- * elfxx-mips.c (_bfd_mips_vxworks_finish_dynamic_symbol): Fix type
- of "loc".
+ * config.bfd (spu-*-elf): Delete targ_selvecs.
-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>
+2007-04-19 Nick Clifton <nickc@redhat.com>
+
+ * coffcode.h (coff_rtype_to_howto): Initialise genrel.howto.
+
+2007-04-19 Alan Modra <amodra@bigpond.net.au>
+ * bfd.c (bfd_demangle): New function.
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
* bfd-in2.h: Regenerate.
- * config.bfd (mips*-*-vxworks*, mips*el-*-vxworks*): New stanzas.
- * configure.in (bfd_elf32_bigmips_vxworks_vec): New stanza.
- (bfd_elf32_littlemips_vxworks_vec): Likewise.
- (bfd_elf32_bigmips_vec): Add elf-vxworks.lo.
- (bfd_elf32_littlemips_vec): Likewise.
- (bfd_elf32_nbigmips_vec): Likewise.
- (bfd_elf32_nlittlemips_vec): Likewise.
- (bfd_elf32_ntradbigmips_vec): Likewise.
- (bfd_elf32_ntradlittlemips_vec): Likewise.
- (bfd_elf32_tradbigmips_vec): Likewise.
- (bfd_elf32_tradlittlemips_vec): Likewise.
- (bfd_elf64_bigmips_vec): Likewise.
- (bfd_elf64_littlemips_vec): Likewise.
- (bfd_elf64_tradbigmips_vec): Likewise.
- (bfd_elf64_tradlittlemips_vec): Likewise.
- * elf32-mips.c: Include elf-vxworks.h.
- (mips_info_to_howto_rel): Use elf_backend_mips_rtype_to_howto
- instead of calling mips_elf32_rtype_to_howto directly.
- (mips_vxworks_copy_howto_rela): New reloc howto.
- (mips_vxworks_jump_slot_howto_rela): Likewise.
- (mips_vxworks_bfd_reloc_type_lookup): New function.
- (mips_vxworks_rtype_to_howto): Likewise.
- (mips_vxworks_final_write_processing): Likewise.
- (TARGET_LITTLE_SYM, TARGET_LITTLE_NAME): Override for VxWorks.
- (TARGET_BIG_SYM, TARGET_BIG_NAME, elf_bed, ELF_MAXPAGESIZE): Likewise.
- (elf_backend_want_got_plt): Likewise.
- (elf_backend_want_plt_sym): Likewise.
- (elf_backend_got_symbol_offset): Likewise.
- (elf_backend_want_dynbss): Likewise.
- (elf_backend_may_use_rel_p): Likewise.
- (elf_backend_may_use_rela_p): Likewise.
- (elf_backend_default_use_rela_p): Likewise.
- (elf_backend_got_header_size: Likewise.
- (elf_backend_plt_readonly): Likewise.
- (bfd_elf32_bfd_reloc_type_lookup): Likewise.
- (elf_backend_mips_rtype_to_howto): Likewise.
- (elf_backend_adjust_dynamic_symbol): Likewise.
- (elf_backend_finish_dynamic_symbol): Likewise.
- (bfd_elf32_bfd_link_hash_table_create): Likewise.
- (elf_backend_add_symbol_hook): Likewise.
- (elf_backend_link_output_symbol_hook): Likewise.
- (elf_backend_emit_relocs): Likewise.
- (elf_backend_final_write_processing: Likewise.
- (elf_backend_additional_program_headers): Likewise.
- (elf_backend_modify_segment_map): Likewise.
- (elf_backend_symbol_processing): Likewise.
- * elfxx-mips.c: Include elf-vxworks.h.
- (mips_elf_link_hash_entry): Add is_relocation_target and
- is_branch_target fields.
- (mips_elf_link_hash_table): Add is_vxworks, srelbss, sdynbss, srelplt,
- srelplt2, sgotplt, splt, plt_header_size and plt_entry_size fields.
- (MIPS_ELF_RELA_SIZE, MIPS_ELF_REL_DYN_NAME): New macros.
- (MIPS_RESERVED_GOTNO): Take a mips_elf_link_hash_table argument.
- Return 3 for VxWorks.
- (ELF_MIPS_GP_OFFSET): Change the argument from a bfd to a
- mips_elf_link_hash_table. Return 0 for VxWorks.
- (MIPS_ELF_GOT_MAX_SIZE): Change the argument from a bfd to a
- mips_elf_link_hash_table. Update the call to ELF_MIPS_GP_OFFSET.
- (mips_vxworks_exec_plt0_entry): New variable.
- (mips_vxworks_exec_plt_entry): Likewise.
- (mips_vxworks_shared_plt0_entry): Likewise.
- (mips_vxworks_shared_plt_entry): Likewise.
- (mips_elf_link_hash_newfunc): Initialize the new hash_entry fields.
- (mips_elf_rel_dyn_section): Change the bfd argument to a
- mips_elf_link_hash_table. Use MIPS_ELF_REL_DYN_NAME to get
- the name of the section.
- (mips_elf_initialize_tls_slots): Update the call to
- mips_elf_rel_dyn_section.
- (mips_elf_gotplt_index): New function.
- (mips_elf_local_got_index): Add an input_section argument.
- Update the call to mips_elf_create_local_got_entry.
- (mips_elf_got_page): Likewise.
- (mips_elf_got16_entry): Likewise.
- (mips_elf_create_local_got_entry): Add bfd_link_info and input_section
- arguments. Create dynamic relocations for each entry on VxWorks.
- (mips_elf_merge_gots): Update the use of MIPS_ELF_GOT_MAX_SIZE.
- (mips_elf_multi_got): Update the uses of MIPS_ELF_GOT_MAX_SIZE
- and MIPS_RESERVED_GOTNO.
- (mips_elf_create_got_section): Update the uses of
- MIPS_ELF_GOT_MAX_SIZE. Create .got.plt on VxWorks.
- (is_gott_symbol): New function.
- (mips_elf_calculate_relocation): Use a dynobj local variable.
- Update the calls to mips_elf_local_got_index, mips_elf_got16_entry and
- mips_elf_got_page_entry. Set G to the .got.plt entry when calculating
- VxWorks R_MIPS_CALL* relocations. Calculate and use G for all GOT
- relocations on VxWorks. Add dynamic relocations for references
- to the VxWorks __GOTT_BASE__ and __GOTT_INDEX__ symbols. Don't
- create dynamic relocations for R_MIPS_32, R_MIPS_REL32 or R_MIPS_64
- in VxWorks executables.
- (mips_elf_allocate_dynamic_relocations): Add a bfd_link_info argument.
- Use MIPS_ELF_RELA_SIZE to calculate the size of a VxWorks entry.
- Don't allocate a null entry on VxWorks.
- (mips_elf_create_dynamic_relocation): Update the call to
- mips_elf_rel_dyn_section. Use absolute rather than relative
- relocations for VxWorks, and make them RELA rather than REL.
- (_bfd_mips_elf_create_dynamic_sections): Don't make .dynamic
- read-only on VxWorks. Update the call to mips_elf_rel_dyn_section.
- Create the .plt, .rela.plt, .dynbss and .rela.bss sections on
- VxWorks. Likewise create the _PROCEDURE_LINKAGE_TABLE symbol.
- Call elf_vxworks_create_dynamic_sections for VxWorks and
- initialize the plt_header_size and plt_entry_size fields.
- (_bfd_mips_elf_check_relocs): Don't allow GOT relocations to be
- used in VxWorks executables. Don't allocate dynamic relocations
- for R_MIPS_32, R_MIPS_REL32 or R_MIPS_64 in VxWorks executables.
- Set is_relocation_target for each symbol referenced by a relocation.
- Allocate .rela.dyn entries for relocations against the special
- VxWorks __GOTT_BASE__ and __GOTT_INDEX__ symbols. Create GOT
- entries for all VxWorks R_MIPS_GOT16 relocations. Don't allocate
- a global GOT entry for symbols mentioned in VxWorks R_MIPS_CALL*,
- R_MIPS_32, R_MIPS_REL32 or R_MIPS_64 relocations. Update the calls
- to mips_elf_rel_dyn_section and mips_elf_allocate_dynamic_relocations.
- Set is_branch_target for symbols mentioned in R_MIPS_PC16 or R_MIPS_26
- relocations. Don't set no_fn_stub on VxWorks.
- (_bfd_mips_elf_adjust_dynamic_symbol): Update the call to
- mips_elf_allocate_dynamic_relocations.
- (_bfd_mips_vxworks_adjust_dynamic_symbol): New function.
- (_bfd_mips_elf_always_size_sections): Do not allocate GOT page
- entries for VxWorks, and do not create multiple GOTs.
- (_bfd_mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_NAME.
- Handle .got specially for VxWorks. Update the uses of
- MIPS_RESERVED_GOTNO and mips_elf_allocate_dynamic_relocations.
- Check for sgotplt and splt. Allocate the .rel(a).dyn contents last,
- once its final size is known. Set DF_TEXTREL for VxWorks. Add
- DT_RELA, DT_RELASZ, DT_RELAENT, DT_PLTREL, DT_PLTRELSZ and DT_JMPREL
- tags on VxWorks. Do not add the MIPS-specific tags for VxWorks.
- (_bfd_mips_vxworks_finish_dynamic_symbol): New function.
- (mips_vxworks_finish_exec_plt): Likewise.
- (mips_vxworks_finish_shared_plt): Likewise.
- (_bfd_mips_elf_finish_dynamic_sections): Remove an unncessary call
- to mips_elf_rel_dyn_section. Use a VxWorks-specific value of
- DT_PLTGOT. Handle DT_RELA, DT_RELASZ, DT_RELAENT, DT_PLTREL,
- DT_PLTRELSZ and DT_JMPREL. Update the uses of MIPS_RESERVED_GOTNO
- and mips_elf_rel_dyn_section. Use a different GOT header for
- VxWorks. Don't sort .rela.dyn on VxWorks. Finish the PLT on VxWorks.
- (_bfd_mips_elf_link_hash_table_create): Initialize the new
- mips_elf_link_hash_table fields.
- (_bfd_mips_vxworks_link_hash_table_create): New function.
- (_bfd_mips_elf_final_link): Set the GP value to _GLOBAL_OFFSET_TABLE_
- on VxWorks. Update the call to ELF_MIPS_GP_OFFSET.
- * elfxx-mips.h (_bfd_mips_vxworks_adjust_dynamic_symbol): Declare.
- (_bfd_mips_vxworks_finish_dynamic_symbol): Likewise.
- (_bfd_mips_vxworks_link_hash_table_create): Likewise.
- * libbfd.h: Regenerate.
- * Makefile.am (elfxx-mips.lo): Depend on elf-vxworks.h.
- (elf32-mips.lo): Likewise.
+
+2007-04-18 Matthias Klose <doko@ubuntu.com>
+
+ * Makefile.am (libbfd_la_LDFLAGS): Use bfd soversion.
+ (bfdver.h): Use the date in non-release builds for the soversion.
* Makefile.in: Regenerate.
- * reloc.c (BFD_RELOC_MIPS_COPY, BFD_RELOC_MIPS_JUMP_SLOT): Declare.
- * targets.c (bfd_elf32_bigmips_vxworks_vec): Declare.
- (bfd_elf32_littlemips_vxworks_vec): Likewise.
- (_bfd_target_vector): Add entries for them.
-2006-03-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+2007-04-17 Paul Brook <paul@codesourcery.com>
- * elf64-hppa.c (elf64_hppa_special_sections): Change flags for .tbss
- section from SHF_PARISC_WEAKORDER to SHF_HP_TLS.
- (elf_backend_special_sections): Remove #undef.
+ * elf.c (_bfd_elf_is_function_type): New function.
+ * elflink.c (_bfd_elf_merge_symbol): Use bed->is_function_type.
+ (_bfd_elf_dynamic_symbol_p, _bfd_elf_symbol_refs_local_p,
+ is_global_data_symbol_definition, elf_link_add_object_symbols): Ditto.
+ * elf-bfd.h (elf_backend_data): Add is_function_type.
+ (_bfd_elf_is_function_type): Add prototype.
+ * elfxx-target.h (elf_backend_is_function_type): Add default
+ definition.
+ (elfNN_bed): Add elf_backend_is_function_type.
+ * elf32-arm.c (elf32_arm_is_function_type): New function.
+ (elf_backend_is_function_type): Define.
-2006-03-18 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+2007-04-17 Daniel Jacobowitz <dan@codesourcery.com>
- * elf64-hppa.c (allocate_global_data_opd): Don't create an OPD entry
- for undefined weak symbols.
+ * elfxx-mips.c (_bfd_mips_elf_size_dynamic_sections): Put
+ DT_MIPS_RLD_MAP before DT_DEBUG again.
-2006-03-17 Daniel Jacobowitz <dan@codesourcery.com>
+2007-04-14 Steve Ellcey <sje@cup.hp.com>
- PR ld/2462
- * elflink.c (bfd_elf_final_link): Remove
- bed->elf_backend_emit_relocs from emit_relocs.
+ * Makefile.am: Add ACLOCAL_AMFLAGS.
+ * configure.in: Change macro call order.
+ * Makefile.in: Regnerate.
+ * doc/Makefile.in: Regenerate.
+ * configure: Regenerate.
-2006-03-17 Alexandre Oliva <aoliva@redhat.com>
+2007-04-14 Jakub Jelinek <jakub@redhat.com>
- * elf32-ppc.c (ppc_elf_relocate_section): Copy addend from
- first relocation to the second when relaxing TLS GD to LE;
- zero it out when relaxing to IE.
+ * elflink.c (bfd_elf_final_link): Don't free symbuf for
+ non-elf input bfds.
+ (bfd_elf_size_dynamic_sections): Don't access elf_section_data
+ for non-elf input bfds.
-2006-03-17 Alan Modra <amodra@bigpond.net.au>
+2007-04-12 Richard Sandiford <richard@codesourcery.com>
- PR 2434
- * elflink.c (elf_link_add_object_symbols): Save and restore
- warning sym's linked sym.
+ * elfxx-mips.c (_bfd_mips_elf_size_dynamic_sections): Don't add
+ DT_MIPS_RTLD_MAP for PIEs.
-2006-03-16 Alan Modra <amodra@bigpond.net.au>
+2007-04-12 Richard Sandiford <richard@codesourcery.com>
- PR 2434
- * elflink.c (struct elf_smash_syms_data, elf_smash_syms): Delete.
- (elf_link_add_object_symbols): Delete unnecessary locals. Rename
- hash_table -> htab. Formatting. Save entire symbol table
- before loading as-needed syms, and restore afterwards if lib not
- needed. Use bfd_hash_allocate rather than bfd_alloc for sym
- name. Free some buffers earlier.
- * bfd-in.h (struct bfd_hash_table): Add entsize.
- (bfd_hash_table_init, bfd_hash_table_init_n): Adjust prototype.
- * elf-bfd.h (_bfd_elf_link_hash_table_init): Likewise
- * hash.c (bfd_hash_table_init_n): Add entsize param, save to
- hash table.
- (bfd_hash_table_init): Add param, adjust calls.
- * aoutx.h: Adjust all hash_table_init functions and calls.
- * bfd.c: Likewise.
- * coff-arm.c: Likewise.
- * coff-h8300.c: Likewise.
- * coff-ppc.c: Likewise.
- * cofflink.c: Likewise.
- * ecoff.c: Likewise.
- * ecofflink.c: Likewise.
- * elf-m10300.c: Likewise.
- * elf-strtab.c: Likewise.
- * elf.c: Likewise.
- * elf32-arm.c: Likewise.
- * elf32-bfin.c: Likewise.
- * elf32-cris.c: Likewise.
- * elf32-frv.c: Likewise.
- * elf32-hppa.c: Likewise.
- * elf32-i386.c: Likewise.
- * elf32-m32r.c: Likewise.
- * elf32-m68hc1x.c: Likewise.
- * elf32-m68k.c: Likewise.
- * elf32-ppc.c: Likewise.
- * elf32-s390.c: Likewise.
- * elf32-sh.c: Likewise.
- * elf32-vax.c: Likewise.
- * elf64-alpha.c: Likewise.
- * elf64-hppa.c: Likewise.
- * elf64-ppc.c: Likewise.
- * elf64-s390.c: Likewise.
- * elf64-sh64.c: Likewise.
- * elf64-x86-64.c: Likewise.
- * elfxx-ia64.c: Likewise.
- * elfxx-mips.c: Likewise.
- * elfxx-sparc.c: Likewise.
- * i386linux.c: Likewise.
- * libaout.h: Likewise.
- * libbfd-in.h: Likewise.
- * libcoff-in.h: Likewise.
- * linker.c: Likewise.
- * m68klinux.c: Likewise.
- * merge.c: Likewise.
- * opncls.c: Likewise.
- * pdp11.c: Likewise.
- * sparclinux.c: Likewise.
- * stabs.c: Likewise.
- * sunos.c: Likewise.
- * vms.c: Likewise.
- * xcofflink.c: Likewise.
- * section.c (struct section_hash_entry): Move to..
- * libbfd-in.h: ..here.
- * Makefile.am: Run "make dep-am"
- * Makefile.in: Regenerate.
- * bfd-in2.h: Regenerate.
- * libbfd.h: Regenerate.
- * libcoff.h: Regenerate.
+ * elfxx-mips.c (mips_elf_calculate_relocation): Set DT_TEXTREL
+ when creating a __GOTT_BASE__ or __GOTT_INDEX__ relocation
+ in a read-only section.
+ (_bfd_mips_elf_check_relocs): Likewise.
+
+2007-04-12 Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (xtensa_is_insntable_section): New.
+ (xtensa_is_proptable_section): New.
+ (elf_xtensa_discard_info_for_section): Handle "full" .xt.prop property
+ tables with 12-byte entries, as well as tables with 8-byte entries.
+ Sort the relocations before examining them.
+ (relax_property_section): Use xtensa_is_proptable_section and
+ xtensa_is_littable_section. Rewrite code for combining table entries
+ to be more robust in case of unexpected relocations. Do not set offset
+ of unused relocations to less than zero.
+ (xtensa_is_property_section): Use other functions instead of
+ duplicating section name comparisons.
+ (xtensa_is_littable_section): Use CONST_STRNEQ for ".gnu.linkonce.p.".
+ (xtensa_get_property_predef_flags): Use xtensa_is_insntable_section.
+
+2007-04-12 Bob Wilson <bob.wilson@acm.org>
-2006-03-16 Alan Modra <amodra@bigpond.net.au>
+ * elf32-xtensa.c (elf_xtensa_gc_mark_hook): Don't follow references
+ from Xtensa property sections.
- * elf32-ppc.c (ppc_elf_check_relocs): REL24 and REL14 relocs
- against __GLOBAL_OFFSET_TABLE__ need never be dynamic. Tweak
- last change to REL32 relocs so that they are counted as
- possibly dynamic as per REL24 and REL14.
+2007-04-12 Alan Modra <amodra@bigpond.net.au>
-2006-03-16 Alan Modra <amodra@bigpond.net.au>
+ * elf32-spu.c (needs_ovl_stub): Test that spu_elf_section_data
+ is non-NULL before dereferencing.
- * elf32-ppc.c (ppc_elf_check_relocs): Don't fall into REL24
- checks from REL32.
+2007-04-11 Nathan Sidwell <nathan@codesourcery.com>
-2006-03-15 Ben Elliston <bje@au.ibm.com>
+ * elf-vxworks.c (elf_vxworks_emit_relocs): Remap weakdef PLT slot
+ relocs too.
- * elf32-arm.c (elf32_arm_merge_eabi_attributes): Iterate over all
- in_list elements, not just the first.
-
-2006-03-14 Richard Sandiford <richard@codesourcery.com>
+2007-04-10 Richard Henderson <rth@redhat.com>
- * elf32-mips.c (mips_elf_adjust_addend): New function, mostly split
- out from...
- (_bfd_mips_elf_relocate_section): ...here. Use it to adjust r_addend
- for final links too.
+ * elf64-alpha.c (struct alpha_elf_link_hash_table): Add relax_trip.
+ (elf64_alpha_size_got_sections): Remove unused something_changed local.
+ (elf64_alpha_size_plt_section): Return void.
+ (elf64_alpha_size_rela_got_section): Likewise.
+ (elf64_alpha_relax_section): Only regenerate got+plt if the
+ relax_trip counter has changed.
-2006-03-13 Richard Sandiford <richard@codesourcery.com>
+2007-04-09 Daniel Jacobowitz <dan@codesourcery.com>
- * elfxx-mips.c (mips_elf_create_got_section): Initialize hgot.
+ * Makefile.am (bfdver.h): Do not generate doc/bfdver.texi.
+ * doc/Makefile.am (DOCFILES): Add bfdver.texi.
+ (bfdver.texi): New rule.
+ * Makefile.in, doc/Makefile.in: Regenerated.
-2006-03-11 H.J. Lu <hongjiu.lu@intel.com>
+2007-04-03 Matt Thomas <matt@netbsd.org>
- PR ld/2443
- * dwarf2.c (concat_filename): Don't issue an error if file is
- 0.
+ * elf32-vax.c (elf_vax_relocate_section): Do not emit a PCREL reloc
+ in a shared object if it is not in a CODE section or if it is against
+ a section symbol. This allows DWARF2 to use pcrel format.
-2006-03-10 Paul Brook <paul@codesourcery.com>
+2007-04-05 H.J. Lu <hongjiu.lu@intel.com>
- * elf32-arm.c (INTERWORK_FLAG): Handle EABIv5.
- (elf32_arm_print_private_bfd_data): Ditto.
+ PR ld/4304
+ * elflink.c (bfd_elf_final_link): Call einfo callback in
+ bfd_link_info instead of _bfd_error_handler for DT_TEXTREL
+ warning.
-2006-03-09 Paul Brook <paul@codesourcery.com>
+2007-04-05 Alan Modra <amodra@bigpond.net.au>
- * cpu-arm.c (bfd_is_arm_mapping_symbol_name): Recognise additional
- mapping symbols.
+ * elf32-spu.c (spu_elf_output_symbol_hook): New function.
+ (elf_backend_link_output_symbol_hook): Define.
-2006-03-09 Khem Raj <khem@mvista.com>
+2007-04-02 Nick Clifton <nickc@redhat.com>
- * elf32-arm.c(elf32_arm_finish_dynamic_sections): Use unsigned
- char type.
+ PR binutils/4292
+ * bfd.c (bfd_fprintf_vma): Do not print addresses of 32-bit
+ targets as 64-bit values, even if running on a 64-bit host.
+ * coffgen.c (coff_print_symbol): Likewise.
-2006-03-08 H.J. Lu <hongjiu.lu@intel.com>
+2007-03-29 Nick Clifton <nickc@redhat.com>
- * elfxx-ia64.c (elfNN_ia64_choose_gp): Properly choose gp.
+ PR binutils/4110
+ * elf.c (IS_VALID_GROUP_SECTION_HEADER): New macro.
+ (setup_group): Use it. Report corrupt group section headers.
+ (bfd_section_from_shdr): Use new macro. Replace constant 4 with
+ GRP_ENTRY_SIZE. Cope with NULLs in the group section table.
+ (elf_fake_section): Replace constant 4 with GRP_ENTRY_SIZE.
-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>
+2007-03-29 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/4267
+ * elflink.c (evaluate_complex_relocation_symbols): Use bfd_vma
+ for rel->r_info values.
+ (bfd_elf_perform_complex_relocation): Likewise.
+ * elf32-ppc.c (allocate_dynrelocs): Set plt.offset to -1 for
+ unused entries. Don't clear plt.plist in loop.
+
+2007-03-28 Richard Sandiford <richard@codesourcery.com>
+
+ * elfxx-sparc.h (_bfd_sparc_elf_link_hash_table): Remove append_rela.
+ * elfxx-sparc.c (sparc_elf_append_rela_64, sparc_elf_append_rela_32):
+ Merge into...
+ (sparc_elf_append_rela): ...this new function.
+ (SPARC_ELF_APPEND_RELA): Delete.
+ (_bfd_sparc_elf_link_hash_table_create): Don't initialize
+ the deleted append_rela field.
+ (_bfd_sparc_elf_relocate_section): Use sparc_elf_append_rela
+ instead of SPARC_ELF_APPEND_RELA.
+ (_bfd_sparc_elf_finish_dynamic_symbol): Likewise. Use the
+ elf_size_info structure to find the size of a RELA entry and
+ the associated swap-out function.
+ (sparc64_finish_dyn, sparc64_finish_dyn): Merge into...
+ (sparc_finish_dyn): ...this new function.
+ (_bfd_sparc_elf_finish_dynamic_sections): Update calls accordingly.
+
+2007-03-28 Richard Sandiford <richard@codesourcery.com>
Phil Edwards <phil@codesourcery.com>
- * configure.in (bfd_elf32_bigarm_vec): Include elf-vxworks.lo.
- (bfd_elf32_bigarm_symbian_vec): Likewise.
- (bfd_elf32_bigarm_vxworks_vec): Likewise.
- (bfd_elf32_littlearm_vec): Likewise.
- (bfd_elf32_littlearm_symbian_vec): Likewise.
- (bfd_elf32_littlearm_vxworks_vec): Likewise.
- * configure: Regenerate.
- * elf32-arm.c: Include libiberty.h and elf-vxworks.h.
- (RELOC_SECTION, RELOC_SIZE, SWAP_RELOC_IN, SWAP_RELOC_OUT): New macros.
- (elf32_arm_vxworks_bed): Add forward declaration.
- (elf32_arm_howto_table_1): Fix the masks for R_ASM_ABS12.
- (elf32_arm_vxworks_exec_plt0_entry): New table.
- (elf32_arm_vxworks_exec_plt_entry): Likewise.
- (elf32_arm_vxworks_shared_plt_entry): Likewise.
- (elf32_arm_link_hash_table): Add vxworks_p and srelplt2 fields.
- (reloc_section_p): New function.
- (create_got_section): Use RELOC_SECTION.
- (elf32_arm_create_dynamic_sections): Likewise. Call
- elf_vxworks_create_dynamic_sections for VxWorks targets.
- Choose between the two possible values of plt_header_size
- and plt_entry_size.
- (elf32_arm_link_hash_table_create): Initialize vxworks_p and srelplt2.
- (elf32_arm_abs12_reloc): New function.
- (elf32_arm_final_link_relocate): Call it. Allow the creation of
- dynamic R_ARM_ABS12 relocs on VxWorks. Use reloc_section_p,
- RELOC_SIZE, SWAP_RELOC_OUT and RELOC_SECTION. Initialize the
- r_addend fields of relocs. On rela targets, skip any code that
- adjusts in-place addends. When using _bfd_link_final_relocate
- to perform a final relocation, pass rel->r_addend as the addend
- argument.
- (elf32_arm_merge_private_bfd_data): If one of the bfds is a VxWorks
- object, ignore flags that are not standard on VxWorks.
- (elf32_arm_check_relocs): Allow the creation of dynamic R_ARM_ABS12
- relocs on VxWorks. Use reloc_section_p.
- (elf32_arm_adjust_dynamic_symbol): Use RELOC_SECTION and RELOC_SIZE.
- (allocate_dynrelocs): Use RELOC_SIZE. Account for the size of
- .rela.plt.unloaded relocs on VxWorks targets.
- (elf32_arm_size_dynamic_sections): Use RELOC_SIZE. Check for
- .rela.plt.unloaded as well as .rel(a).plt. Add DT_RELA* tags
- instead of DT_REL* tags on RELA targets.
- (elf32_arm_finish_dynamic_symbol): Use RELOC_SECTION, RELOC_SIZE
- and SWAP_RELOC_OUT. Initialize r_addend fields. Handle VxWorks
- PLT entries. Do not make _GLOBAL_OFFSET_TABLE_ absolute on VxWorks.
- (elf32_arm_finish_dynamic_sections): Use RELOC_SECTION, RELOC_SIZE
- and SWAP_RELOC_OUT. Initialize r_addend fields. Handle DT_RELASZ
- like DT_RELSZ. Handle the VxWorks form of initial PLT entry.
- Correct the .rela.plt.unreloaded symbol indexes.
- (elf32_arm_output_symbol_hook): Call the VxWorks version of this
- hook on VxWorks targets.
- (elf32_arm_vxworks_link_hash_table_create): Set vxworks_p to true.
- Minor formatting tweak.
- (elf32_arm_vxworks_final_write_processing): New function.
- (elf_backend_add_symbol_hook): Override for VxWorks and reset
- for Symbian.
- (elf_backend_final_write_processing): Likewise.
- (elf_backend_emit_relocs): Likewise.
- (elf_backend_want_plt_sym): Likewise.
- (ELF_MAXPAGESIZE): Likewise.
- (elf_backend_may_use_rel_p): Minor formatting tweak.
- (elf_backend_may_use_rela_p): Likewise.
- (elf_backend_default_use_rela_p): Likewise.
- (elf_backend_rela_normal): Likewise.
- * Makefile.in (elf32-arm.lo): Depend on elf-vxworks.h.
-
-2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
-
- * archures.c (bfd_mach_mcf_isa_a_nodiv, bfd_mach_mcf_isa_b_nousp):
- New. Adjust other variants.
- (bfd_default_scan): Update.
- * bfd-in2.h: Rebuilt.
- * cpu-m68k.c: Adjust.
- (bfd_m68k_compatible): New. Use it for architectures.
- * elf32-m68k.c (elf32_m68k_object_p): Adjust.
- (elf32_m68k_merge_private_bfd_data): Adjust. Correct isa-a/b
- mismatch.
- (elf32_m68k_print_private_bfd_data): Adjust.
- * ieee.c (ieee_write_processor): Adjust.
-
-2006-03-06 Alan Modra <amodra@bigpond.net.au>
-
- * dwarf2.c: Formatting.
- (add_line_info): Remove outer loop.
-
-2006-03-05 H.J. Lu <hongjiu.lu@intel.com>
- Alan Modra <amodra@bigpond.net.au>
+ * doc/bfd.texinfo: Put the contents after the title page rather
+ than at the end of the document.
- PR binutils/2338
- * dwarf2.c (loadable_section): New struct.
- (dwarf2_debug): Add loadable_section_count and
- loadable_sections.
- (new_line_sorts_after): New.
- (add_line_info): Use new_line_sorts_after to compare line
- addresses.
- (check_function_name): Removed.
- (unset_sections): New.
- (place_sections): New.
- (_bfd_dwarf2_find_nearest_line): Updated. Call place_sections
- and unset_sections on relocatable files.
- (_bfd_dwarf2_find_line): Likewise.
+2007-03-27 Andreas Schwab <schwab@suse.de>
-2006-03-03 Nick Clifton <nickc@redhat.com>
+ * elfxx-ia64.c (elf_backend_default_execstack): Define to 0.
- * cpu-avr.c: Update to ISO-C90 formatting.
- * elf32-avr.c: Likewise.
+2007-03-26 H.J. Lu <hongjiu.lu@intel.com>
-2006-03-03 Bjoern Haase <bjoern.m.haase@web.de>
+ * configure: Regenerated.
- * elf32-avr.c (avr_reloc_map): Insert BFD_RELOC_AVR_MS8_LDI
- and R_AVR_MS8_LDI
- (bfd_elf_avr_final_write_processing): Set
- EF_AVR_LINKRELAX_PREPARED in e_flags field.
- (elf32_avr_relax_section): New function.
- (elf32_avr_relax_delete_bytes): New function.
- (elf32_avr_get_relocated_section_contents): New function.
- (avr_pc_wrap_around): New function.
- (avr_relative_distance_considering_wrap_around): New function.
- (avr_final_link_relocate): Handle negative int8t_t immediate for R_AVR_LDI.
- * reloc.c: Add BFD_RELOC_AVR_MS8_LDI and BFD_RELOC_AVR_LDI_NEG
+2007-03-26 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-spu.c (struct stubarr): Add stub_hash_table and err fields.
+ (allocate_spuear_stubs): New function.
+ (spu_elf_size_stubs): Call allocate_spuear_stubs.
+
+2007-03-26 Alan Modra <amodra@bigpond.net.au>
+
+ * aout-adobe.c (aout_32_bfd_reloc_name_lookup): Define.
+ * aout-arm.c (MY_bfd_reloc_name_lookup): Define.
+ (MY (bfd_reloc_name_lookup)): New function.
+ * aout-ns32k.c (MY (bfd_reloc_name_lookup)): New function.
+ * aout-target.h (NAME (aout, reloc_name_lookup)): Declare.
+ (MY_bfd_reloc_name_lookup): Define.
+ * aout-tic30.c (tic30_aout_reloc_name_lookup): New function.
+ (MY_bfd_reloc_name_lookup): Define.
+ * aoutx.h (NAME (aout, reloc_type_lookup)): Don't declare.
+ (NAME (aout, reloc_name_lookup)): New function.
+ * bout.c (b_out_bfd_reloc_name_lookup): New function.
+ * coff-alpha.c (alpha_bfd_reloc_name_lookup): New function.
+ (_bfd_ecoff_bfd_reloc_name_lookup): Define.
+ * coff-arm.c (coff_arm_reloc_name_lookup): New function.
+ (coff_bfd_reloc_name_lookup): Define.
+ * coff-i386.c (coff_bfd_reloc_name_lookup): Define.
+ (coff_i386_reloc_name_lookup): New function.
+ * coff-i860.c (coff_i860_reloc_name_lookup): New function.
+ (coff_bfd_reloc_name_lookup): Define.
+ * coff-i960.c (coff_i960_reloc_name_lookup): New function.
+ (coff_bfd_reloc_name_lookup): Define.
+ * coff-m68k.c (m68k_reloc_name_lookup): New function.
+ (coff_bfd_reloc_name_lookup): Define.
+ * coff-maxq.c (maxq_reloc_name_lookup): New function.
+ (coff_bfd_reloc_name_lookup): Define.
+ * coff-mcore.c (mcore_coff_reloc_name_lookup): New function.
+ (coff_bfd_reloc_name_lookup): Define.
+ * coff-mips.c (mips_bfd_reloc_name_lookup): New function.
+ (_bfd_ecoff_bfd_reloc_name_lookup): Define.
+ * coff-ppc.c (ppc_coff_reloc_name_lookup): New function.
+ (coff_bfd_reloc_name_lookup): Define.
+ * coff-rs6000.c (coff_bfd_reloc_name_lookup): Define.
+ (_bfd_xcoff_reloc_name_lookup): New function.
+ (rs6000coff_vec, pmac_xcoff_vec): Init new field.
+ * coff-sh.c (coff_bfd_reloc_name_lookup): Define.
+ (sh_coff_reloc_name_lookup): New function.
+ * coff-sparc.c (coff_sparc_reloc_name_lookup): New function.
+ (coff_bfd_reloc_name_lookup): Define.
+ * coff-tic30.c (coff_bfd_reloc_name_lookup): Define.
+ (tic30_coff_reloc_name_lookup): New function.
+ * coff-tic4x.c (coff_bfd_reloc_name_lookup): Define.
+ (tic4x_coff_reloc_name_lookup): New function.
+ * coff-tic54x.c (coff_bfd_reloc_name_lookup): Define.
+ (tic54x_coff_reloc_name_lookup): New function.
+ * coff-x86_64.c (coff_bfd_reloc_name_lookup): Define.
+ (coff_amd64_reloc_name_lookup): New function.
+ * coff-z80.c (coff_z80_reloc_name_lookup): New function.
+ (coff_bfd_reloc_name_lookup): Define.
+ * coff-z8k.c (coff_z8k_reloc_name_lookup): New function.
+ (coff_bfd_reloc_name_lookup): Define.
+ * coff64-rs6000.c (coff_bfd_reloc_name_lookup): Define.
+ (xcoff64_reloc_name_lookup): New function.
+ (rs6000coff64_vec, aix5coff64_vec): Init new field.
+ * coffcode.h (coff_bfd_reloc_name_lookup): Define.
+ * elf-hppa.h (elf_hppa_reloc_name_lookup): New function.
+ * elf-m10200.c (bfd_elf32_bfd_reloc_name_lookup): New function.
+ * elf-m10300.c (bfd_elf32_bfd_reloc_name_lookup): New function.
+ * elf32-arc.c (bfd_elf32_bfd_reloc_name_lookup): New function.
+ * elf32-arm.c (elf32_arm_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-avr.c (bfd_elf32_bfd_reloc_name_lookup): New function.
+ * elf32-bfin.c (bfin_bfd_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-cr16c.c (elf_cr16c_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-cris.c (cris_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-crx.c (elf_crx_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-d10v.c (bfd_elf32_bfd_reloc_name_lookup): New function.
+ * elf32-d30v.c (bfd_elf32_bfd_reloc_name_lookup): New function.
+ * elf32-dlx.c (elf32_dlx_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-fr30.c (fr30_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-frv.c (frv_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-gen.c (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-h8300.c (elf32_h8_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-hppa.c (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-i370.c (i370_elf_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-i386.c (elf_i386_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-i860.c (elf32_i860_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-i960.c (elf32_i960_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-ip2k.c (ip2k_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-iq2000.c (iq2000_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-m32c.c (m32c_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-m32r.c (bfd_elf32_bfd_reloc_name_lookup): New function.
+ * elf32-m68hc11.c (bfd_elf32_bfd_reloc_name_lookup): New function.
+ * elf32-m68hc12.c (bfd_elf32_bfd_reloc_name_lookup): New function.
+ * elf32-m68k.c (reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-m88k.c (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-mcore.c (mcore_elf_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-mep.c (mep_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-mips.c (bfd_elf32_bfd_reloc_name_lookup): New function.
+ (mips_vxworks_bfd_reloc_name_lookup): Likewise.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-msp430.c (bfd_elf32_bfd_reloc_name_lookup): New function.
+ * elf32-mt.c (mt_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-openrisc.c (openrisc_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-or32.c (bfd_elf32_bfd_reloc_name_lookup): New function.
+ * elf32-pj.c (pj_elf_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-ppc.c (ppc_elf_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-s390.c (elf_s390_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-score.c (elf32_score_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-sh.c (sh_elf_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-sparc.c (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-spu.c (spu_elf_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-v850.c (v850_elf_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-vax.c (reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-xc16x.c (xc16x_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-xstormy16.c (xstormy16_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf32-xtensa.c (elf_xtensa_reloc_name_lookup): New function.
+ (bfd_elf32_bfd_reloc_name_lookup): Define.
+ * elf64-alpha.c (elf64_alpha_bfd_reloc_name_lookup): New function.
+ (bfd_elf64_bfd_reloc_name_lookup): Define.
+ * elf64-gen.c (bfd_elf64_bfd_reloc_name_lookup): Define.
+ * elf64-hppa.c (bfd_elf64_bfd_reloc_name_lookup): Define.
+ * elf64-mips.c (bfd_elf64_bfd_reloc_name_lookup): New function.
+ * elf64-mmix.c (bfd_elf64_bfd_reloc_name_lookup): New function.
+ * elf64-ppc.c (ppc64_elf_reloc_name_lookup): New function.
+ (bfd_elf64_bfd_reloc_name_lookup): Define.
+ * elf64-s390.c (elf_s390_reloc_name_lookup): New function.
+ (bfd_elf64_bfd_reloc_name_lookup): Define.
+ * elf64-sh64.c (sh_elf64_reloc_name_lookup): New function.
+ (bfd_elf64_bfd_reloc_name_lookup): Define.
+ * elf64-sparc.c (bfd_elf64_bfd_reloc_name_lookup): Define.
+ * elf64-x86-64.c (elf64_x86_64_reloc_name_lookup): New function.
+ (bfd_elf64_bfd_reloc_name_lookup): Define.
+ * elfn32-mips.c (bfd_elf32_bfd_reloc_name_lookup): New function.
+ * elfxx-ia64.c (elfNN_ia64_reloc_name_lookup): New function.
+ (bfd_elfNN_bfd_reloc_name_lookup): Define.
+ * elfxx-sparc.c (_bfd_sparc_elf_reloc_name_lookup): New function.
+ * elfxx-sparc.h (_bfd_sparc_elf_reloc_name_lookup): Declare.
+ * i386msdos.c (msdos_bfd_reloc_name_lookup): Define.
+ * i386os9k.c (aout_32_bfd_reloc_name_lookup): Define.
+ * ieee.c (ieee_bfd_reloc_name_lookup): Define.
+ * libaout.h (NAME (aout, reloc_name_lookup)): Declare.
+ * libbfd-in.h (_bfd_norelocs_bfd_reloc_name_lookup): Declare.
+ * mipsbsd.c (MY_bfd_reloc_name_lookup): Define.
+ (MY(reloc_type_lookup)): Rename from MY(reloc_howto_type_lookup).
+ (MY(reloc_name_lookup)): New function.
+ * nlm-target.h (nlm_bfd_reloc_name_lookup): Define.
+ * oasys.c (oasys_bfd_reloc_name_lookup): Define.
+ * pdp11.c (NAME (aout, reloc_name_lookup)): New function.
+ * pe-mips.c (coff_mips_reloc_name_lookup): New function.
+ (coff_bfd_reloc_name_lookup): Define.
+ * reloc.c (bfd_reloc_name_lookup): New function.
+ * riscix.c (riscix_reloc_name_lookup): New function.
+ (MY_bfd_reloc_name_lookup): Define.
+ * som.c (som_bfd_reloc_name_lookup): New function.
+ * targets.c (struct bfd_target): Add reloc_name_lookup.
+ (BFD_JUMP_TABLE_RELOCS): Add NAME##_bfd_reloc_name_lookup.
+ * versados.c (versados_bfd_reloc_name_lookup): Define.
+ * vms.c (vms_bfd_reloc_name_lookup): New function.
+ * bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
+
+2007-03-26 Thiemo Seufer <ths@mips.com>
+
+ PR ld/4208
+ * elfxx-mips.c (mips_elf_next_relocation): Don't signal an error if no
+ matching relocation is found.
+ (_bfd_mips_elf_relocate_section): Only warn about missing relocations.
+
+2007-03-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
+
+2007-03-23 Joseph Myers <joseph@codesourcery.com>
+
+ * configure.in: Use ACX_PKGVERSION and ACX_BUGURL.
+ * configure: Regenerate.
+
+2007-03-23 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-spu.c (spu_stub_name): Don't put input section in stub name.
+ Remove input_sec param. Adjust all calls.
+ (write_one_stub): Adjust stub symbol.
+ (needs_ovl_stub): New function, extracted from..
+ (spu_elf_size_stubs): ..here.
+ (spu_elf_relocate_section): Use needs_ovl_stub.
+
+2007-03-22 Joseph Myers <joseph@codesourcery.com>
+
+ * Makefile.am (bfdver.h): Only set VERSION_PACKAGE in bfdver.texi
+ if nonempty.
+ * configure.in (REPORT_BUGS_TO): Do not use "URL:" prefix.
+ * Makefile.in, configure, doc/Makefile.in: Regenerate.
+
+2007-03-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4210
+ * peXXigen.c (_bfd_XXi_swap_aouthdr_out): Use the virtual
+ address and virtual size of the last section for the image
+ size.
+
+2007-03-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4007
+ * elf.c (assign_file_positions_for_load_sections): Check if
+ all sections are in the segment.
+
+2007-03-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4208
+ * elfxx-mips.c (_bfd_mips_elf_relocate_section): Report missing
+ matching LO16 relocation for HI16 relocation.
+
+2007-03-20 Paul Brook <paul@codesourcery.com>
+
+ * bfd-in.h (bfd_elf32_arm_set_target_relocs): Update prototype.
* bfd-in2.h: Regenerate.
+ * elf32-arm.c (elf32_arm_link_hash_table): Add pic_veneer.
+ (record_arm_to_thumb_glue): Use globals->pic_veneer.
+ (elf32_arm_create_thumb_stub): Ditto.
+ (bfd_elf32_arm_set_target_relocs): Set globals->pic_veneer.
-2006-03-02 DJ Delorie <dj@redhat.com>
-
- * elf32-m32c.c (m32c_offset_for_reloc): Fix local symbol
- calculations.
-
-2006-03-02 Richard Sandiford <richard@codesourcery.com>
-
- * elf32-ppc.c (is_ppc_elf_target): Return true if the target is
- bfd_elf32_powerpc_vxworks_vec.
-
-2006-03-02 Nick Clifton <nickc@redhat.com>
-
- * elf32-m32c.c (m32c_elf_relax_section): Initialise 'gap'.
-
-2006-03-02 Richard Sandiford <richard@codesourcery.com>
-
- * elf32-i386.c (elf_i386_create_dynamic_sections): Use
- elf_vxworks_create_dynamic_sections.
- (elf_i386_size_dynamic_sections): Remove VxWorks GOT and PLT
- symbol handling.
- * elf32-ppc.c (ppc_elf_create_dynamic_sections): Use
- elf_vxworks_create_dynamic_sections.
- (ppc_elf_size_dynamic_sections): Remove VxWorks GOT and PLT
- symbol handling.
- * elf-vxworks.c (elf_vxworks_create_dynamic_sections): New function.
- * elf-vxworks.h (elf_vxworks_create_dynamic_sections): Declare.
-
-2006-03-02 Richard Sandiford <richard@codesourcery.com>
-
- * elf32-i386.c (elf_i386_vxworks_link_output_symbol_hook): Delete.
- (elf_backend_link_output_symbol_hook): Use
- elf_vxworks_link_output_symbol_hook instead.
- * elf32-ppc.c (elf_i386_vxworks_link_output_symbol_hook): Delete.
- (elf_backend_link_output_symbol_hook): Use
- elf_vxworks_link_output_symbol_hook instead.
- * elf-vxworks.c (elf_vxworks_link_output_symbol_hook): Provide the
- same interface as elf_backend_link_output_symbol_hook.
- * elf-vxworks.h (elf_vxworks_link_output_symbol_hook): Update
- prototype accordingly.
-
-2006-03-02 Richard Sandiford <richard@codesourcery.com>
-
- * elf32-ppc.c (ppc_elf_plt_type): New enumeration.
- (ppc_elf_link_hash_table): Replace old_got and new_got with
- plt_type and can_use_new_plt.
- (ppc_elf_create_dynamic_sections): Add SEC_HAS_CONTENTS,
- SEC_LOAD and SEC_READONLY to the VxWorks .plt flags.
- (ppc_elf_check_relocs): Set can_use_new_plt instead of new_plt.
- Move from plt_type == PLT_UNSET to PLT_OLD instead of setting old_plt.
- (ppc_elf_select_plt_layout): Move from plt_type == PLT_UNSET to
- either plt_type == PLT_OLD or plt_type == PLT_NEW. Assert that
- this function should not be called for VxWorks targets.
- (ppc_elf_tls_setup): Use plt_type instead of old_got.
- (allocate_got): Likewise. Rearrange so that max_before_header
- is only used for PLT_OLD and PLT_NEW.
- (allocate_dynrelocs): Use plt_type instead of old_got and is_vxworks.
- (ppc_elf_size_dynamic_sections): Likewise.
- (ppc_elf_relax_section): Likewise.
- (ppc_elf_relocate_section): Likewise.
- (ppc_elf_finish_dynamic_symbol): Likewise.
- (ppc_elf_vxworks_link_hash_table_create): Initialize plt_type.
-
-2006-02-28 Richard Sandiford <richard@codesourcery.com>
-
- * elf32-i386.c (elf_i386_link_hash_table): Add next_tls_desc_index.
- (elf_i386_link_hash_table_create): Initialize it.
- (elf_i386_compute_jump_table_size): Use it instead of
- srelplt->reloc_count.
- (allocate_dynrelocs): Likewise.
- (elf_i386_size_dynamic_sections): Likewise.
- (elf_i386_relocate_section): Likewise.
-
-2006-02-27 Jakub Jelinek <jakub@redhat.com>
-
- * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Handle S flag.
- (_bfd_elf_write_section_eh_frame): Likewise.
-
-2006-02-27 Carlos O'Donell <carlos@codesourcery.com>
-
- * po/Make-in: Add html target.
-
-2006-02-27 Richard Sandiford <richard@codesourcery.com>
-
- * elf-m10300.c (_bfd_mn10300_elf_finish_dynamic_symbol): Use the
- cached hgot entry to check for _GLOBAL_OFFSET_TABLE_.
- * elf32-arm.c (elf32_arm_finish_dynamic_symbol): Likewise.
- * elf32-bfin.c (bfin_finish_dynamic_symbol): Likewise.
- * elf32-cris.c (elf_cris_finish_dynamic_symbol): Likewise.
- * elf32-hppa.c (elf32_hppa_finish_dynamic_symbol): Likewise.
- * elf32-i386.c (elf_i386_finish_dynamic_symbol): Likewise.
- * elf32-m32r.c (m32r_elf_finish_dynamic_symbol): Likewise.
- * elf32-m68k.c (elf_m68k_finish_dynamic_symbol): Likewise.
- * elf32-sh.c (sh_elf_finish_dynamic_symbol): Likewise.
- * elf32-vax.c (elf_vax_finish_dynamic_symbol): Likewise.
- * elf32-xtensa.c (elf_xtensa_finish_dynamic_symbol): Likewise.
- * elf64-sh64.c (sh64_elf64_finish_dynamic_symbol): Likewise.
- * elf64-x86-64.c (elf64_x86_64_finish_dynamic_symbol): Likewise.
- * elfxx-mips.c (_bfd_mips_elf_finish_dynamic_symbol): Likewise.
- * elf32-s390.c (elf_s390_finish_dynamic_symbol): Likewise. Also use
- the cached hplt entry to check for _PROCEDURE_LINKAGE_TABLE_.
- * elf64-alpha.c (elf64_alpha_finish_dynamic_symbol): Likewise.
- * elf64-s390.c (elf_s390_finish_dynamic_symbol): Likewise.
- * elfxx-ia64.c (elfNN_ia64_finish_dynamic_symbol): Likewise.
- * elfxx-sparc.c (_bfd_sparc_elf_finish_dynamic_symbol): Likewise.
-
-2006-02-25 Richard Sandiford <richard@codesourcery.com>
-
- * elf-bfd.h (elf_link_hash_table): Add hplt field.
- * elflink.c (_bfd_elf_create_dynamic_sections): Initialize it.
- * elf-m10300.c (_bfd_mn10300_elf_create_got_section): Likewise.
- * elf32-frv.c (_frv_create_got_section): Likewise.
- * elf32-m32r.c (m32r_elf_create_dynamic_sections): Likewise.
- * elf32-sh.c (sh_elf_create_dynamic_sections): Likewise.
- * elf64-alpha.c (elf64_alpha_create_dynamic_sections): Likewise.
- * elf64-sh64.c (sh64_elf64_create_dynamic_sections): Likewise.
- * elf32-i386.c (elf_i386_link_hash_table): Remove hgot and hplt.
- (elf_i386_link_hash_table_create): Don't initialize them.
- (elf_i386_size_dynamic_sections): Use the generic ELF hplt and
- hgot fields.
- (elf_i386_finish_dynamic_symbol): Likewise.
- * elf32-ppc.c (ppc_elf_link_hash_table): Remove hplt.
- (ppc_elf_size_dynamic_sections): Use the generic ELF hplt fields.
- (ppc_elf_finish_dynamic_symbol): Likewise.
-
-2006-02-24 DJ Delorie <dj@redhat.com>
-
- * elf32-m32c.c (m32c_elf_howto_table): Add relaxation relocs.
- (m32c_elf_relocate_section): Don't relocate them.
- (compare_reloc): New.
- (relax_reloc): Remove.
- (m32c_offset_for_reloc): New.
- (m16c_addr_encodings): New.
- (m16c_jmpaddr_encodings): New.
- (m32c_addr_encodings): New.
- (m32c_elf_relax_section): Relax jumps and address displacements.
- (m32c_elf_relax_delete_bytes): Adjust for internal syms. Fix up
- short jumps.
-
- * reloc.c: Add m32c relax relocs.
- * libbfd.h: Regenerate.
+2007-03-18 Mark Shinwell <shinwell@codesourcery.com>
+
+ * bfd-in.h (bfd_elf32_arm_set_target_relocs): Add "bfd *"
+ argument and extra last argument.
* bfd-in2.h: Regenerate.
-
-2006-02-24 H.J. Lu <hongjiu.lu@intel.com>
+ * elf32-arm.c (elf32_arm_obj_tdata): Add no_enum_size_warning
+ member.
+ (bfd_elf32_arm_set_target_relocs): Add "bfd *" argument and
+ extra last argument. Set no_enum_size_warning appropriately.
+ (elf32_arm_merge_eabi_attributes): Improve enum sizes
+ diagnostic, suppressing it when no_enum_size_warning dictates.
- PR ld/2218
- * elf-bfd.h (elf_backend_data): Add elf_backend_fixup_symbol.
- (_bfd_elf_link_hash_fixup_symbol): New.
+2007-03-20 Nick Clifton <nickc@redhat.com>
- * elflink.c (_bfd_elf_link_hash_fixup_symbol): New.
- (_bfd_elf_fix_symbol_flags): Call elf_backend_fixup_symbol if
- it isn't NULL.
+ PR binutils/3535
+ * elf.c (copy_private_bfd_data): Widen the scope of Solaris
+ specific conditions that need the program headers to be
+ rewritten.
- * elfxx-ia64.c (elf_backend_fixup_symbol): Defined.
+2007-03-19 H.J. Lu <hongjiu.lu@intel.com>
- * elfxx-target.h (elf_backend_fixup_symbol): New.
- (elfNN_bed): Initialize elf_backend_fixup_symbol.
+ * peXXigen.c (_bfd_XXi_swap_aouthdr_in): Store Magic,
+ MajorLinkerVersion, MinorLinkerVersion, SizeOfCode,
+ SizeOfInitializedData, SizeOfUninitializedData,
+ AddressOfEntryPoint, BaseOfCode and BaseOfData in internal
+ extra PE a.out header.
+ (IMAGE_NT_OPTIONAL_HDR_MAGIC): Defined as 0x10b if not defined.
+ (IMAGE_NT_OPTIONAL_HDR64_MAGIC): Defined as 0x20b if not
+ defined.
+ (IMAGE_NT_OPTIONAL_HDRROM_MAGIC): Defined as 0x107 if not
+ defined.
+ (_bfd_XX_print_private_bfd_data_common): Also print Magic,
+ MajorLinkerVersion, MinorLinkerVersion, SizeOfCode,
+ SizeOfInitializedData, SizeOfUninitializedData,
+ AddressOfEntryPoint, BaseOfCode and BaseOfData from internal
+ extra PE a.out header.
-2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
+2007-03-18 H.J. Lu <hongjiu.lu@intel.com>
- * cpu-ia64-opc.c (ins_immu5b): New.
- (ext_immu5b): Likewise.
- (elf64_ia64_operands): Add IMMU5b.
+ * targets.c (_bfd_target_vector): Add bfd_efi_app_x86_64_vec
+ only if BFD64 is defined.
-2006-02-21 Alan Modra <amodra@bigpond.net.au>
+2007-03-17 Alan Modra <amodra@bigpond.net.au>
- PR ld/2218
- * elf32-arm.c (allocate_dynrelocs): Ensure undef weak sym in pie
- is dynamic.
- * elf32-hppa.c (allocate_dynrelocs): Likewise.
- * elf32-i386.c (allocate_dynrelocs): Likewise.
- * elf32-s390.c (allocate_dynrelocs): Likewise.
- * elf32-sh.c (allocate_dynrelocs): Likewise.
- * elf64-s390.c (allocate_dynrelocs): Likewise.
- * elf64-x86-64.c (allocate_dynrelocs): Likewise.
- * elf32-m32r.c (allocate_dynrelocs): Likewise. Discard relocs
- on undef weak with non-default visibility too.
- * elfxx-sparc.c (allocate_dynrelocs): Ditto.
+ * elf32-spu.c (spu_elf_size_stubs): Always use an overlay stub
+ on setjmp calls.
-2006-02-21 Alan Modra <amodra@bigpond.net.au>
+2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
- * bfd.c: (_bfd_default_error_handler): Don't call abort on
- error, instead call _exit.
- (_bfd_abort): Call _exit not xexit.
+ * doc/Makefile.in: Regenerated.
-2006-02-17 Kevin Buettner <kevinb@redhat.com>
+2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
- * elf32-frv.c (elf32_frv_grok_prstatus, elf32_frv_grok_psinfo):
- New functions.
- * elf_backend_grok_prstatus, elf_backend_grok_psinfo): Define.
+ * Makefile.am (bfdver.h): Substitute report_bugs_to. Also
+ create doc/bfdver.texi.
+ * Makefile.in: Regenerated.
-2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
- Anil Paranjape <anilp1@kpitcummins.com>
- Shilin Shakti <shilins@kpitcummins.com>
+ * configure.in (--with-bugurl): New option.
+ * configure: Regenerated.
- * Makefile.am: Add xc16x related entry
- * Makefile.in: Regenerate
- * archures.c: Add bfd_xc16x_arch
- * bfd-in2.h: Regenerate
- * config.bfd: Add xc16x-*-elf
- * configure.in: Add bfd_elf32_xc16x_vec
+ * version.h (REPORT_BUGS_TO): New.
+
+2007-03-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3826
+ * elf-bfd.h (elf_backend_data): Add elf_osabi.
+ (_bfd_elf_set_osabi): New.
+
+ * elf.c (_bfd_elf_set_osabi): New.
+
+ * elf32-hppa.c (elf32_hppa_post_process_headers): Removed.
+ (elf_backend_post_process_headers): Defined with
+ _bfd_elf_set_osabi.
+ (ELF_OSABI): Properly defined for each target.
+
+ * elf32-i370.c (i370_elf_post_process_headers): Removed.
+ (ELF_OSABI): Defined.
+ (elf_backend_post_process_headers): Defined with
+ _bfd_elf_set_osabi.
+
+ * elf32-i386.c (ELF_OSABI): Defined to ELFOSABI_FREEBSD for
+ freebsd.
+ (elf_i386_post_process_headers): Set EI_OSABI with elf_osabi.
+
+ * elf32-msp430.c (elf32_msp430_post_process_headers): Removed.
+ (ELF_OSABI): Defined.
+ (elf_backend_post_process_headers): Defined with
+ _bfd_elf_set_osabi.
+
+ * elf64-alpha.c (ELF_OSABI): Defined to ELFOSABI_FREEBSD for
+ freebsd.
+ (elf64_alpha_fbsd_post_process_headers): Set EI_OSABI with
+ elf_osabi.
+
+ * elf64-hppa.c (elf64_hppa_post_process_headers): Set EI_OSABI
+ with elf_osabi.
+ (ELF_OSABI): Properly defined for each target.
+ (elf_backend_post_process_headers): Defined with
+ _bfd_elf_set_osabi for Linux.
+
+ * elf64-sparc.c (elf64_sparc_fbsd_post_process_headers): Removed.
+ (ELF_OSABI): Defined to ELFOSABI_FREEBSD for freebsd.
+ (elf_backend_post_process_headers): Defined with
+ _bfd_elf_set_osabi.
+
+ * elf64-x86-64.c (elf64_x86_64_fbsd_post_process_headers): Removed.
+ (ELF_OSABI): Defined to ELFOSABI_FREEBSD for freebsd.
+ (elf_backend_post_process_headers): Defined with
+ _bfd_elf_set_osabi.
+
+ * elfcode.h (elf_object_p): Match the ELFOSABI_NONE ELF target
+ with any ELF target of the compatible machine for which we do not
+ have a specific backend.
+
+ * elfxx-ia64.c (elfNN_hpux_post_process_headers): Set EI_OSABI
+ with elf_osabi.
+
+ * elfxx-target.h (ELF_OSABI): Default to ELFOSABI_NONE.
+ (elfNN_bed): Initialize elf_osabi with ELF_OSABI.
+
+2007-03-08 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-v850.c (v850_elf_link_output_symbol_hook): Clean out
+ V850_OTHER_* bits.
+
+2007-03-08 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (BFD64_BACKENDS): Add efi-app-x86_64.lo.
+ (BFD64_BACKENDS_CFILES): Add efi-app-x86_64.c.
+ Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * po/SRC-POTFILES.in: Regenerate.
+
+2007-03-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config.bfd (x86_64-*-freebsd*): Add bfd_efi_app_x86_64_vec.
+ (x86_64-*-kfreebsd*-gnu): Likewise.
+ (x86_64-*-netbsd*): Likewise.
+ (x86_64-*-openbsd*): Likewise.
+ (x86_64-*-linux-*): Likewise.
+
+ * configure.in: Support bfd_efi_app_x86_64_vec.
+ * configure: Regenerated.
+
+ * efi-app-x86_64.c: New file.
+
+ * targets.c (bfd_efi_app_x86_64_vec): New.
+ (_bfd_target_vector): Add bfd_efi_app_x86_64_vec.
+
+2007-03-07 Kai Tietz <kai.tietz@onevision.com>
+
+ * reloc.c (bfd_generic_get_relocated_section_contents): Remove
+ const for type reloc_howto_type.
+
+2007-03-07 Alan Modra <amodra@bigpond.net.au>
+
+ PR 3958
+ * elf-bfd.h (RELOC_FOR_GLOBAL_SYMBOL): No error on relocatable link.
+ (elf_discarded_section): Move..
+ * bfd-in.h: ..to here.
+ * bfd-in2.h: Regenerate.
+ * elflink.c (elf_link_input_bfd): Don't zap relocs against symbols
+ from discarded sections before relocate_section has done its job.
+ * reloc.c (bfd_generic_get_relocated_section_contents): Handle
+ relocs against symbols from discarded sections.
+ * elf-hppa.h (elf_hppa_howto_table): Set size. Set dst_mask on
+ SECREL32.
+ (elf_hppa_relocate_section): Handle relocatable link after setting
+ sec, sym, h etc. for final link. Squash error messages for
+ relocatable link. Clear section contents for relocs against
+ symbols in discarded sections, and zero reloc. Remove existing
+ zero r_symndx code.
+ * elf-m10200.c (mn10200_elf_relocate_section): Likewise.
+ * elf-m10300.c (mn10300_elf_relocate_section): Likewise.
+ * elf32-arm.c (elf32_arm_relocate_section): Likewise.
+ * elf32-avr.c (elf32_avr_relocate_section): Likewise.
+ * elf32-bfin.c (bfinfdpic_relocate_section): Likewise.
+ (bfin_relocate_section): Likewise.
+ * elf32-cr16c.c (elf32_cr16c_relocate_section): Likewise.
+ * elf32-cris.c (cris_elf_relocate_section): Likewise.
+ * elf32-crx.c (elf32_crx_relocate_section): Likewise.
+ * elf32-d10v.c (elf32_d10v_relocate_section): Likewise.
+ * elf32-fr30.c (fr30_elf_relocate_section): Likewise.
+ * elf32-frv.c (elf32_frv_relocate_section): Likewise.
+ * elf32-h8300.c (elf32_h8_relocate_section): Likewise.
+ * elf32-hppa.c (elf32_hppa_relocate_section): Likewise.
+ * elf32-i370.c (i370_elf_relocate_section): Likewise.
+ * elf32-i386.c (elf_i386_relocate_section): Likewise.
+ * elf32-i860.c (elf32_i860_relocate_section): Likewise.
+ * elf32-ip2k.c (ip2k_elf_relocate_section): Likewise.
+ * elf32-iq2000.c (iq2000_elf_relocate_section): Likewise.
+ * elf32-m32c.c (m32c_elf_relocate_section): Likewise.
+ * elf32-m32r.c (m32r_elf_relocate_section): Likewise.
+ * elf32-m68hc1x.c (elf32_m68hc11_check_relocs): Likewise.
+ * elf32-m68k.c (elf_m68k_relocate_section): Likewise.
+ * elf32-mcore.c (mcore_elf_relocate_section): Likewise.
+ * elf32-mep.c (mep_elf_relocate_section): Likewise.
+ * elf32-msp430.c (elf32_msp430_relocate_section): Likewise.
+ * elf32-mt.c (mt_elf_relocate_section): Likewise.
+ * elf32-openrisc.c (openrisc_elf_relocate_section): Likewise.
+ * elf32-ppc.c (ppc_elf_relocate_section): Likewise.
+ * elf32-s390.c (elf_s390_relocate_section): Likewise.
+ * elf32-score.c (_bfd_score_elf_relocate_section): Likewise.
+ * elf32-sh.c (sh_elf_relocate_section): Likewise.
+ * elf32-spu.c (spu_elf_relocate_section): Likewise.
+ * elf32-v850.c (v850_elf_relocate_section): Likewise.
+ * elf32-vax.c (elf_vax_relocate_section): Likewise.
+ * elf32-xc16x.c (elf32_xc16x_relocate_section): Likewise.
+ * elf32-xstormy16.c (xstormy16_elf_relocate_section): Likewise.
+ * elf32-xtensa.c (elf_xtensa_relocate_section): Likewise.
+ * elf64-alpha.c (elf64_alpha_relocate_section_r): Likewise.
+ (elf64_alpha_relocate_section): Likewise.
+ * elf64-mmix.c (mmix_elf_relocate_section): Likewise.
+ * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
+ * elf64-s390.c (elf_s390_relocate_section): Likewise.
+ * elf64-sh64.c (sh_elf64_relocate_section): Likewise.
+ * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
+ * elfxx-ia64.c (elfNN_ia64_relocate_section): Likewise.
+ * elfxx-mips.c (_bfd_mips_elf_relocate_section): Likewise.
+ * elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Likewise.
+
+ * elf32-arm.c (elf32_arm_relocate_section): Always adjust section
+ symbols for relocatable link. Don't use always-zero st_value.
+ (elf_backend_rela_normal): Don't define.
+ * elf32-bfin.c (bfinfdpic_relocate_section): Use
+ RELOC_FOR_GLOBAL_SYMBOL.
+ * elf32-frv.c (elf32_frv_relocate_section): Likewise.
+ * elf32-d10v.c (elf32_d10v_relocate_section): Combine SEC_MERGE
+ section symbol adjustments with same for relocatable link.
+ * elf32-i386.c (elf_i386_relocate_section): Likewise.
+ * elf32-m68hc1x.c (m68hc11_get_relocation_value): Move..
+ (elf32_m68hc11_check_relocs): ..to here.
+ * elf32-score.c (score_elf_final_link_relocate): Remove zero
+ r_symndx code.
+ * elfxx-mips.c (mips_elf_calculate_relocation): Likewise.
+
+2007-03-07 Alan Modra <amodra@bigpond.net.au>
+
+ PR 4144
+ * elf.c (assign_file_positions_for_load_sections): Don't
+ adjust p_memsz for !SEC_LOAD section vma modulo page size.
+ Instead, use the same lma based adjustment for SEC_LOAD
+ sections.
+
+2007-03-01 Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (analyze_relocations): Zero src_count if not relaxing.
+ (find_relaxable_sections): Do not increment src_count for unknown
+ opcodes. Decode only once instead of calling is_l32r_relocation.
+ (compute_text_actions): Remove unused no_insn_move flag. Assert that
+ src_next matches src_count in relax_info.
+
+2007-03-01 Joseph Myers <joseph@codesourcery.com>
+
+ * Makefile.am (bfdver.h): Use "." not " " between version number
+ and date.
+ * Makefile.in: Regenerate.
+ * configure.in (PKGVERSION): Default to "(GNU Binutils) ".
* configure: Regenerate.
- * targets.c: Added xc16x related information
- * cpu-xc16x.c: New file
- * reloc.c: Add new relocations specific to xc16x:
- BFD_RELOC_XC16X_PAG, BFD_RELOC_XC16X_POF, BFD_RELOC_XC16X_SEG,
- BFD_RELOC_XC16X_SOF
- * elf32-xc16x.c: New file.
-
-2006-02-17 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (allocate_dynrelocs): Tweak undef weak handling.
- * elf64-ppc.c (allocate_dynrelocs): Likewise.
-
-2006-02-17 Alan Modra <amodra@bigpond.net.au>
- PR ld/2218
- * elf64-ppc.c (allocate_dynrelocs): Ensure undef weak sym is
- dynamic.
- (ppc64_elf_relocate_section): Check output reloc section size.
- * elf32-ppc.c (allocate_dynrelocs): Simplify undef weak test.
+2007-02-28 Nathan Sidwell <nathan@codesourcery.com>
+
+ * config.bfd (sh-*-uclinux, sh[12]-*-uclinux): New stanza.
+
+2007-02-27 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-spu.h (struct _ovl_stream): Make "start" and "end" const.
+ * elf32-spu.c (ovl_mgr_pread): Add const to casts.
+
+2007-02-23 Carlos O'Donell <carlos@codesourcery.com>
+
+ * dwarf2.c (_bfd_dwarf2_find_nearest_line): Assume 32-bit
+ DWARF even with 64-bit addresses.
+ (_bfd_dwarf2_find_nearest_line): Likewise.
+
+2007-02-23 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/3535
+ * elf.c (copy_private_bfd_data): Always rewrite the program
+ headers when a Solaris interpreter segment is involved.
+
+2007-02-22 Paul Brook <paul@codesourcery.com>
+
+ * elflink.c (gc_mark_hook_fn): Remove.
+ (_bfd_elf_gc_mark): Rename gc_mark_hook_fn to elf_gc_mark_hook_fn.
+ (bfd_elf_gc_sections): Ditto. Call gc_mark_extra_sections.
+ * elf-bfd.h (elf_gc_mark_hook_fn): Define.
+ (elf_backend_data): Add gc_mark_extra_sections.
+ * elfxx-target.h (elf_backend_gc_mark_extra_sections): Provide default
+ definition.
+ (elfNN_bed): Add elf_backend_gc_mark_extra_sections.
+ * elf32-arm.c (elf32_arm_gc_mark_extra_sections): New function.
+ (elf_backend_gc_mark_extra_sections): Define.
+
+2007-02-21 Nick Clifton <nickc@redhat.com>
+
+ * elf.c (_bfd_elf_map_sections_to_segments): If the
+ override_segment_assignment callback is defined then call it.
+
+2007-02-21 Alan Modra <amodra@bigpond.net.au>
-2006-02-16 H.J. Lu <hongjiu.lu@intel.com>
+ * elf32-spu.c (spu_elf_size_stubs): Correct order of warning args.
- PR ld/2322
- * elf.c (get_segment_type): New function.
- (_bfd_elf_print_private_bfd_data): Use it.
- (print_segment_map): New function.
- (assign_file_positions_for_segments): Call print_segment_map
- when there are not enough room for program headers.
+2007-02-19 Thiemo Seufer <ths@mips.com>
-2006-02-16 Nick Hudson <nick.hudson@dsl.pipex.com>
+ * elfxx-mips.c (_bfd_mips_elf_print_private_bfd_data): Remove
+ translation marker from untranslatable strings.
- * config.bfd (mips*el-*-netbsd*, mips*-*-netbsd*): Use
- traditional MIPS ELF targets.
-
-2006-02-15 H.J. Lu <hongjiu.lu@intel.com>
-
- PR binutils/2338
- * dwarf2.c (check_function_name): New function.
- (_bfd_dwarf2_find_nearest_line): Use check_function_name to
- check if function is correct.
-
-2006-02-16 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.c (_bfd_elf_default_action_discarded): Return 0 for
- debug sections.
- (elf_link_input_bfd): Adjust comments.
-
-2006-02-10 H.J. Lu <hongjiu.lu@intel.com>
-
- * elf.c (copy_private_bfd_data): Minor update.
-
-2006-02-10 H.J. Lu <hongjiu.lu@intel.com>
-
- PR binutils/2258
- * elf.c (copy_private_bfd_data): Renamed to ...
- (rewrite_elf_program_header): This.
- (copy_elf_program_header): New function.
- (copy_private_bfd_data): Likewise.
-
-2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
-
- * archures.c (bfd_mach_mcf5200, bfd_mach_mcf5206e,
- bfd_mach_mcf5307, bfd_mach_mcf5407, bfd_mach_mcf528x,
- bfd_mach_mcfv4e, bfd_mach_mcf521x, bfd_mach_mcf5249,
- bfd_mach_mcf547x, bfd_mach_mcf548x): Remove.
- (bfd_mach_mcf_isa_a, bfd_mach_mcf_isa_a_div,
- bfd_mach_mcf_isa_a_div_mac, bfd_mach_mcf_isa_a_div_emac,
- bfd_mach_mcf_isa_aplus, bfd_mach_mcf_isa_aplus_mac,
- bfd_mach_mcf_isa_aplus_emac, bfd_mach_mcf_isa_aplus_usp,
- bfd_mach_mcf_isa_aplus_usp_mac, bfd_mach_mcf_isa_aplus_usp_emac,
- bfd_mach_mcf_isa_b, bfd_mach_mcf_isa_b_mac, bfd_mach_mcf_isa_b_emac,
- bfd_mach_mcf_isa_b_usp_float, bfd_mach_mcf_isa_b_usp_float_mac,
- bfd_mach_mcf_isa_b_usp_float_emac): New.
- (bfd_default_scan): Update coldfire mapping.
- * bfd-in.h (bfd_m68k_mach_to_features,
- bfd_m68k_features_to_mach): Declare.
- * bfd-in2.h: Rebuilt.
- * cpu-m68k.c (arch_info_struct): Add new coldfire machines,
- adjust legacy names.
- (m68k_arch_features): New.
- (bfd_m68k_mach_to_features,
- bfd_m68k_features_to_mach): Define.
- * elf32-m68k.c (elf32_m68k_object_p): New.
- (elf32_m68k_merge_private_bfd_data): Merge the CF EF flags.
- (elf32_m68k_print_private_bfd_data): Print the CF EF flags.
- (elf_backend_object_p): Define.
- * ieee.c (ieee_write_processor): Update coldfire machines.
- * libbfd.h: Rebuilt.
-
-2006-02-06 Steve Ellcey <sje@cup.hp.com>
-
- * elfxx-ia64.c (elfNN_ia64_fake_sections): Set SHF_IA_64_HP_TLS
- if SHF_TLS is set.
-
-2006-02-05 Arnold Metselaar <arnold.metselaar@planet.nl>
-
- * coff-z80.c (r_imm24): New howto.
- (rtype2howto): New case R_IMM24.
- (coff_z80_reloc_type_lookup): New case BFD_RELOC_24.
- (extra_case): Use bfd_get_8 for R_IMM8, new case R_IMM24.
-
-2006-02-04 Richard Sandiford <richard@codesourcery.com>
-
- * elfxx-mips.c (mips_elf_initialize_tls_index): If a TLS symbol
- has already been assigned a GOT index, copy that index to the
- current hash table entry.
-
-2006-02-01 Eric Botcazou <ebotcazou@libertysurf.fr>
-
- * elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Reinstate bypass
- for call-to-undefweak reloc overflow.
-
-2006-01-31 Eric Botcazou <ebotcazou@libertysurf.fr>
-
- * elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Reinstate bypass
- for 32-bit relocs overflow.
-
-2006-01-27 Paul Brook <paul@codesourcery.com>
-
- * elf32-arm.c (elf32_arm_get_symbol_type): Allow STT_TLS thumb
- objects.
-
-2006-01-18 Alexandre Oliva <aoliva@redhat.com>
-
- Introduce TLS descriptors for i386 and x86_64.
- * reloc.c (BFD_RELOC_386_TLS_GOTDESC, BFD_RELOC_386_TLS_DESC,
- BFD_RELOC_386_TLS_DESC_CALL, BFD_RELOC_X86_64_GOTPC32_TLSDESC,
- BFD_RELOC_X86_64_TLSDESC, BFD_RELOC_X86_64_TLSDESC_CALL): New.
- * libbfd.h, bfd-in2.h: Rebuilt.
- * elf32-i386.c (elf_howto_table): New relocations.
- (R_386_tls): Adjust.
- (elf_i386_reloc_type_lookup): Map new relocations.
- (GOT_TLS_GDESC, GOT_TLS_GD_BOTH_P): New macros.
- (GOT_TLS_GD_P, GOT_TLS_GDESC_P, GOT_TLS_GD_ANY_P): New macros.
- (struct elf_i386_link_hash_entry): Add tlsdesc_got field.
- (struct elf_i386_obj_tdata): Add local_tlsdesc_gotent field.
- (elf_i386_local_tlsdesc_gotent): New macro.
- (struct elf_i386_link_hash_table): Add sgotplt_jump_table_size.
- (elf_i386_compute_jump_table_size): New macro.
- (link_hash_newfunc): Initialize tlsdesc_got.
- (elf_i386_link_hash_table_create): Set sgotplt_jump_table_size.
- (elf_i386_tls_transition): Handle R_386_TLS_GOTDESC and
- R_386_TLS_DESC_CALL.
- (elf_i386_check_relocs): Likewise. Allocate space for
- local_tlsdesc_gotent.
- (elf_i386_gc_sweep_hook): Handle R_386_TLS_GOTDESC and
- R_386_TLS_DESC_CALL.
- (allocate_dynrelocs): Count function PLT relocations. Reserve
- space for TLS descriptors and relocations.
- (elf_i386_size_dynamic_sections): Reserve space for TLS
- descriptors and relocations. Set up sgotplt_jump_table_size.
- Don't zero reloc_count in srelplt.
- (elf_i386_always_size_sections): New. Set up _TLS_MODULE_BASE_.
- (elf_i386_relocate_section): Handle R_386_TLS_GOTDESC and
- R_386_TLS_DESC_CALL.
- (elf_i386_finish_dynamic_symbol): Use GOT_TLS_GD_ANY_P.
- (elf_backend_always_size_sections): Define.
- * elf64-x86-64.c (x86_64_elf_howto): Add R_X86_64_GOTPC32_TLSDESC,
- R_X86_64_TLSDESC, R_X86_64_TLSDESC_CALL.
- (R_X86_64_standard): Adjust.
- (x86_64_reloc_map): Map new relocs.
- (elf64_x86_64_rtype_to_howto): New, split out of...
- (elf64_x86_64_info_to_howto): ... this function, and...
- (elf64_x86_64_reloc_type_lookup): ... use it to map elf_reloc_val.
- (GOT_TLS_GDESC, GOT_TLS_GD_BOTH_P): New macros.
- (GOT_TLS_GD_P, GOT_TLS_GDESC_P, GOT_TLS_GD_ANY_P): New macros.
- (struct elf64_x86_64_link_hash_entry): Add tlsdesc_got field.
- (struct elf64_x86_64_obj_tdata): Add local_tlsdesc_gotent field.
- (elf64_x86_64_local_tlsdesc_gotent): New macro.
- (struct elf64_x86_64_link_hash_table): Add tlsdesc_plt,
- tlsdesc_got and sgotplt_jump_table_size fields.
- (elf64_x86_64_compute_jump_table_size): New macro.
- (link_hash_newfunc): Initialize tlsdesc_got.
- (elf64_x86_64_link_hash_table_create): Initialize new fields.
- (elf64_x86_64_tls_transition): Handle R_X86_64_GOTPC32_TLSDESC and
- R_X86_64_TLSDESC_CALL.
- (elf64_x86_64_check_relocs): Likewise. Allocate space for
- local_tlsdesc_gotent.
- (elf64_x86_64_gc_sweep_hook): Handle R_X86_64_GOTPC32_TLSDESC and
- R_X86_64_TLSDESC_CALL.
- (allocate_dynrelocs): Count function PLT relocations. Reserve
- space for TLS descriptors and relocations.
- (elf64_x86_64_size_dynamic_sections): Reserve space for TLS
- descriptors and relocations. Set up sgotplt_jump_table_size,
- tlsdesc_plt and tlsdesc_got. Make room for them. Don't zero
- reloc_count in srelplt. Add dynamic entries for DT_TLSDESC_PLT
- and DT_TLSDESC_GOT.
- (elf64_x86_64_always_size_sections): New. Set up
- _TLS_MODULE_BASE_.
- (elf64_x86_64_relocate_section): Handle R_386_TLS_GOTDESC and
- R_386_TLS_DESC_CALL.
- (elf64_x86_64_finish_dynamic_symbol): Use GOT_TLS_GD_ANY_P.
- (elf64_x86_64_finish_dynamic_sections): Set DT_TLSDESC_PLT and
- DT_TLSDESC_GOT. Set up TLS descriptor lazy resolver PLT entry.
- (elf_backend_always_size_sections): Define.
-
-2006-01-17 H.J. Lu <hongjiu.lu@intel.com>
-
- PR binutils/2096
- * dwarf2.c (comp_unit_contains_address): Update comment.
- (_bfd_dwarf2_find_nearest_line): Use section's vma, instead of
- lma. Return TRUE only if both comp_unit_contains_address and
- comp_unit_find_nearest_line return TRUE.
- (_bfd_dwarf2_find_line): Use section's vma, instead of lma.
-
-2006-01-18 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (struct elf_backend_data): Add gc_mark_dynamic_ref.
- (bfd_elf_gc_mark_dynamic_ref_symbol): Declare.
- * elflink.c (bfd_elf_gc_mark_dynamic_ref_symbol): Rename from
- elf_gc_mark_dynamic_ref_symbol. Make global.
- (bfd_elf_gc_sections): Call bed->gc_mark_dynamic_ref.
- * elfxx-target.h (elf_backend_gc_mark_dynamic_ref): Define.
+2007-02-19 Alan Modra <amodra@bigpond.net.au>
+
+ * elf-bfd.h (struct elf_backend_data): Add default_execstack.
+ * elflink.c (bfd_elf_size_dynamic_sections): Heed default_execstack.
+ * elfxx-target.h (elf_backend_default_execstack): Define to 1.
(elfNN_bed): Init new field.
- * elf64-ppc.c (elf_backend_gc_mark_dynamic_ref): Define.
- (ppc64_elf_gc_mark_dynamic_ref): New function.
+ * elf64-ppc.c (elf_backend_default_execstack): Define to 0.
+
+2007-02-17 Mark Mitchell <mark@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+ Vladimir Prus <vladimir@codesourcery.com
+ Joseph Myers <joseph@codesourcery.com>
+
+ * configure.in (--with-pkgversion): New option.
+ * configure: Regenerate.
+ * Makefile.am (bfdver.h): Substitute for @bfd_version_package@.
+ * Makefile.in: Regenerate.
+ * version.h (BFD_VERSION_STRING): Define using
+ @bfd_version_package@.
+
+2007-02-16 Carlos O'Donell <carlos@codesourcery.com>
+
+ * elfxx-mips.c (_bfd_mips_elf_print_private_bfd_data):
+ Print EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_XGOT
+ and EF_MIPS_UCODE.
+
+2007-02-15 Alan Modra <amodra@bigpond.net.au>
+
+ * libbfd-in.h (_bfd_norelocs_get_reloc_upper_bound): Don't define,
+ declare.
+ (_bfd_norelocs_canonicalize_reloc): Likewise.
+ * libbfd.h: Regenerate.
+ * libbfd.c (_bfd_norelocs_get_reloc_upper_bound): New function.
+ (_bfd_norelocs_canonicalize_reloc): Likewise.
+ * binary.c (binary_bfd_reloc_type_lookup): Don't define.
+ (binary_get_reloc_upper_bound, binary_canonicalize_reloc): Likewise.
+ (binary_vec): Use _bfd_norelocs in BFD_JUMP_TABLE_RELOCS.
+ * ihex.c: Similarly.
+ * mach-o-target.c: Similarly.
+ * mach-o.c: Similarly.
+ * mmo.c: Similarly.
+ * pef.c: Similarly.
+ * ppcboot.c: Similarly.
+ * srec.c: Similarly.
+ * xsym.c: Similarly.
+
+2007-02-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3953
+ * elflink.c (_bfd_elf_add_default_symbol): Check warning symbol
+ when adding default symbol.
+
+2007-02-13 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (create_linkage_sections): Use section ".branch_lt"
+ for branch lookup table.
+
+2007-02-12 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (create_linkage_sections): Don't create
+ .rela.rodata.brlt for --emit-relocs.
+ (ppc_build_one_stub): Create relocs for brlt --emit-relocs here.
+ (ppc_size_one_stub): Count them. Simplify test of stub type
+ when counting stub relocs. Set SEC_RELOC too.
+ (ppc64_elf_size_stubs): Clear reloc_count and SEC_RELOC.
+ (ppc64_elf_finish_dynamic_sections): Output brlt relocs.
+
+2007-02-12 Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c (evaluate_complex_relocation_symbols): Ignore relocs
+ with a zero symbol index.
+
+2007-02-12 Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c (bfd_elf_discard_info): Tidy setting of "eh".
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+ Stan Cox <scox@redhat.com>
+
+ PR ld/3972
+ * elflink.c (elf_link_input_bfd): Always setup finfo->internal_syms.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+ Richard Sandiford <rsandifo@redhat.com>
+ Stan Cox <scox@redhat.com>
+ Nick Clifton <nickc@redhat.com>
+ DJ Delorie <dj@redhat.com>
+ Frank Ch. Eigler <fche@redhat.com>
+ Ben Elliston <bje@redhat.com>
+ Richard Henderson <rth@redhat.com>
+
+ * Makefile.am (ALL_MACHINES): Add cpu-mep.lo.
+ (ALL_MACHINES_CFILES): Add CPU_MEP.c.
+ (BFD32_BACKENDS): Add elf32-mep.lo.
+ (BFD32_BACKENDS_CFILES): Add elf32-mep.c.
+ (cpu-mep.lo,elf32-mep.lo): New targets.
+ * archures.c (bfd_arch_mep): New enumerator.
+ (bfd_mach_mep, bfd_mach_mep_h1): New macros.
+ (bfd_mep_arch): New external variable.
+ (bfd_archures_list): Add bfd_mep_arch.
+ * config.bfd: Support mep-*-elf.
+ * configure.in: Support bfd_elf32_mep_vec and bfd_elf32_mep_little_vec.
+ * reloc.c (BFD_RELOC_MEP_*): New relocation numbers.
+ * targets.c (bfd_elf32_mep_vec,bfd_elf32_mep_little_vec): New extern
+ declarations.
+ (_bfd_target_vector): Add bfd_elf32_mep_vec and
+ bfd_elf32_mep_little_vec.
+ * mep-relocs.pl: New file.
+ * cpu-mep.c: New file.
+ * elf32-mep.c: New file.
+ * bfd-in2.h: Regenerate.
+ * po/POTFILES.in: Regenerate.
+ * libbfd.h: Regenerate.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
-2006-01-17 Alan Modra <amodra@bigpond.net.au>
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * elflink.c (evaluate_complex_relocation_symbols): Check for
+ STT_SRELC for global symbols.
+ (perform_complex_relocations): Renamed to
+ perform_complex_relocation and now examines only one relocation.
+ (elf_link_input_bfd): Don't call perform_complex_relocations.
+ * elf-bfd.h (bfd_elf_perform_complex_relocation_: New prototype.
+ * elf32-mep.c (mep_elf_howto_table): Add R_RELC.
+ (OD,OS,OU): #undefs corrected to N, S and U repectively.
+ (mep_reloc_type_lookup): Handle BFD_RELOC_RELC.
+ (complex_reloc_installation_howto): Removed.
+ (mep_info_to_howto_rela): Remove special case for r_type==0xff.
+ (mep_elf_relocate_section): Call bfd_elf_perform_complex_relocation.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+ Richard Sandiford <rsandifo@redhat.com>
+ DJ Delorie <dj@redhat.com>
+ Graydon Hoare <graydon@redhat.com>
+ Nick Clifton <nickc@cambridge.redhat.com>
+ Jeff Holcomb <jeffh@redhat.com>
+ Frank Ch. Eigler <fche@redhat.com>
+
+ * elf-bfd.h (bfd_elf_perform_complex_relocations): New prototype.
+ * elf.c (swap_out_syms): Handle BSF_RELC and BSF_SRELC.
+ * elfcode.h (elf_slurp_symbol_table): Handle STT_RELC and STT_SRELC.
+ * elflink.c (set_symbolValue): New static function.
+ (resolve_symbol): Likewise.
+ (resolve_section): Likewise.
+ (undefined_reference): Likewise.
+ (eval_symbol): Likewise.
+ (evaluate_complex_relocation_symbols): Likewise.
+ (put_value): Likewise.
+ (get_value): Likewise.
+ (decode_complex_addend):
+ (bfd_elf_perform_complex_relocation): New function.
+ (elf_link_input_bfd): Call evaluate_complex_relocation_symbols.
+ * reloc.c (BFD_RELOC_RELC): New relocation number.
+ * syms.c (BSF_RELC,BSF_SRELC): New macros.
+
+2007-02-05 Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (elf_xtensa_make_sym_local): Delete.
+ (elf_xtensa_hide_symbol, elf_backend_hide_symbol): Delete.
+ (elf_xtensa_fix_refcounts, elf_xtensa_allocate_plt_size)
+ (elf_xtensa_allocate_got_size): Replace these with...
+ (elf_xtensa_allocate_dynrelocs): ...this new function.
+ (elf_xtensa_size_dynamic_sections): Use it.
+
+2007-02-05 Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (elf_howto_table) <R_XTENSA_GLOB_DAT>
+ <R_XTENSA_JMP_SLOT, R_XTENSA_RELATIVE, R_XTENSA_PLT, R_XTENSA_DIFF32>:
+ Set src_mask to zero.
+ <R_XTENSA_DIFF8, R_XTENSA_DIFF16>: Likewise. Also fix dst_mask.
+ <R_XTENSA_ASM_EXPAND>: Set pcrel_offset to TRUE.
+
+2007-02-02 Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (xtensa_elf_dynamic_symbol_p): Renamed to...
+ (elf_xtensa_dynamic_symbol_p): ...this.
+
+2007-02-02 Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (plt_reloc_count): Move into link hash table.
+ (struct elf_xtensa_link_hash_table): New.
+ (elf_xtensa_hash_table): New.
+ (elf_xtensa_link_hash_table_create): New.
+ (elf_xtensa_check_relocs): Update plt_reloc_count references.
+ Update arguments to add_extra_plt_sections.
+ (elf_xtensa_create_dynamic_sections): Record new sections in the hash
+ table. Update for plt_reloc_count and add_extra_plt_sections.
+ (add_extra_plt_sections, elf_xtensa_create_plt_entry): Replace dynobj
+ argument with link info. Update calls to elf_xtensa_get_plt_section
+ and elf_xtensa_get_gotplt_section.
+ (elf_xtensa_allocate_local_got_size, elf_xtensa_size_dynamic_sections)
+ (elf_xtensa_relocate_section, elf_xtensa_finish_dynamic_sections)
+ (elf_xtensa_discard_info_for_section, shrink_dynamic_reloc_sections)
+ (relax_property_section): Get sections from the hash table and update
+ function calls.
+ (elf_xtensa_get_plt_section, elf_xtensa_get_gotplt_section): Replace
+ dynobj argument with link info. Get sections for first plt chunk from
+ the hash table.
+ (bfd_elf32_bfd_link_hash_table_create): Define.
+
+2007-02-02 Jakub Jelinek <jakub@redhat.com>
+
+ * elf-bfd.h (struct elf_obj_tdata): Change symbuf type to void *.
+ * elf.c (struct elf_symbuf_symbol, struct elf_symbuf_head): New types.
+ (struct elf_symbol): Change first member into union.
+ (elf_sort_elf_symbol): Compare pointers to internal syms rather than
+ internal syms. Only compare st_shndx fields.
+ (elf_create_symbuf): New function.
+ (bfd_elf_match_symbols_in_sections): Use it. If symbufs are available
+ for bfds, use a binary search, otherwise don't qsort symbols
+ unnecessarily only to select which symbols are for the particular
+ shndx.
+
+2007-02-01 Nick Clifton <nickc@redhat.com>
+
+ PR ld/3852
+ * elf.c (_bfd_elf_link_hash_table_init): Initialize all the fields
+ in the elf_link_hash_table structure.
+
+2007-02-01 Alan Modra <amodra@bigpond.net.au>
+
+ * elf-bfd.h (struct elf_backend_data): Add elf_backend_write_core_note.
+ * elfxx-target.h (elf_backend_write_core_note): Define and use.
+ * elf.c (elfcore_write_prpsinfo): Call the above. Add support for
+ 32-bit core note on 64-bit target.
+ (elfcore_write_prstatus): Likewise.
+ (elfcore_write_lwpstatus): Make note_name const.
+ (elfcore_write_prfpreg): Likewise.
+ (elfcore_write_pstatus): Add support for 32-bit core note on 64-bit
+ target.
+ * elf32-ppc.c (ppc_elf_write_core_note): New function.
+ (elf_backend_write_core_note): Define.
+ * elf64-ppc.c (ppc64_elf_write_core_note): New function.
+ (elf_backend_write_core_note): Define.
+
+2007-01-31 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf32-cris.c (INCLUDED_TARGET_FILE): Removed.
+ (elf32_bed): Defined for elf32-us-cris.
+
+ * elf64-sh64.c (elf64_bed): Defined for Linux.
+ (INCLUDED_TARGET_FILE): Removed.
+
+ * elfxx-target.h (elfNN_bed): Always define. Don't check
+ INCLUDED_TARGET_FILE.
+
+2007-01-31 DJ Delorie <dj@redhat.com>
+
+ * elf-m10300.c (mn10300_elf_relocate_section): Clarify the warning
+ message for dangerous relocs, special case the common user error.
+
+2007-01-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf.c (copy_elf_program_header): Start from the first section
+ in a segment and stop when all sections in a segment are
+ accounted for.
+
+2007-01-29 Julian Brown <julian@codesourcery.com>
- * elf64-ppc.c (ppc64_elf_gc_mark_hook): Don't hang forever in loop.
+ * bfd-in2.h: Regenerate.
+ * bfd-in.h (bfd_arm_vfp11_fix): New enum. Specify how VFP11
+ instruction scanning should be done.
+ (bfd_elf32_arm_init_maps, bfd_elf32_arm_vfp11_erratum_scan)
+ (bfd_elf32_arm_vfp11_fix_veneer_locations): Add prototypes.
+ (bfd_elf32_arm_set_target_relocs): Add vfp11 fix type argument to
+ prototype.
+ * elf-bfd.h (elf_backend_write_section): Add struct bfd_link_info
+ argument.
+ * elf32-arm.c (VFP11_ERRATUM_VENEER_SECTION_NAME)
+ (VFP11_ERRATUM_VENEER_ENTRY_NAME): Define macros.
+ (elf32_vfp11_erratum_type): New enum.
+ (elf32_vfp11_erratum_list): New struct. List of veneers or jumps to
+ veneers.
+ (_arm_elf_section_data): Add mapsize, erratumcount, erratumlist.
+ (elf32_arm_link_hash_table): Add vfp11_erratum_glue_size,
+ vfp11_fix and num_vfp11_fixes fields.
+ (elf32_arm_link_hash_table_create): Initialise vfp11_fix,
+ vfp11_erratum_glue_size, num_vfp11_fixes fields.
+ (VFP11_ERRATUM_VENEER_SIZE): Define. Size of an (ARM) veneer.
+ (bfd_elf32_arm_allocate_interworking_sections): Initialise erratum
+ glue section.
+ (elf32_arm_section_map_add): Add an code/data mapping symbol entry
+ to a section's map.
+ (record_vfp11_erratum_veneer): Create a single veneer, and its
+ associated symbols.
+ (bfd_elf32_arm_add_glue_sections_to_bfd): Add vfp11 erratum glue.
+ (bfd_elf32_arm_init_maps): Initialise mapping symbol table for input
+ BFDs.
+ (bfd_elf32_arm_set_vfp11_fix): Set the type of erratum workaround
+ required.
+ (bfd_arm_vfp11_pipe): Define VFP11 instruction pipes.
+ (bfd_arm_vfp11_regno): Recode a register number from a VFP11 insn.
+ (bfd_arm_vfp11_write_mask): Update write mask according to coded
+ register number.
+ (bfd_arm_vfp11_antidependency): New function.
+ (bfd_arm_vfp11_insn_decode): Decode a VFP11 insn.
+ (elf32_arm_compare_mapping): Declare.
+ (bfd_elf32_arm_vfp11_erratum_scan): Scan the sections of an input
+ BFD for potential erratum-triggering insns. Record results.
+ (bfd_elf32_arm_vfp11_fix_veneer_locations): Find out where veneers
+ and branches to veneers have been placed in virtual memory after
+ layout.
+ (bfd_elf32_arm_set_target_relocs): Set vfp11_fix field in global
+ hash table.
+ (elf32_arm_output_symbol_hook): Remove.
+ (elf32_arm_write_section): Output veneers, and branches to veneers.
+ Use maps from input sections, not output sections, for code
+ byte-swapping.
+ * elf32-ppc.c (ppc_elf_write_section): Add dummy link_info argument.
+ * elf32-score.c (_bfd_score_elf_write_section): Likewise.
+ * elfxx-mips.c (_bfd_mips_elf_write_section): Likewise.
+ * elfxx-mips.h (_bfd_mips_elf_write_section): Likewise.
+
+2007-01-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf64-hppa.c (elf64_bed): Defined for HPUX and Linux.
+ (INCLUDED_TARGET_FILE): Removed.
+
+2007-01-27 Mike Frysinger <vapier@gentoo.org>
+
+ * elf32-hppa.c (elf32_bed): Define for hpux, linux and netbsd.
+ (INCLUDED_TARGET_FILE): Remove.
+
+2007-01-25 DJ Delorie <dj@redhat.com>
+
+ * elf32-m32c.c (m32c_elf_howto_table): Don't complain about
+ R_M32C_16 or R_M32C_24 relocs.
+
+2007-01-25 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/3874
+ * elf32-avr.c (avr_link_hash_table): Check to make sure that the
+ hash table was created by elf32_avr_link_hash_table_create before
+ using it.
+ (elf32_avr_link_hash_newfunc): New function. Just pass the call
+ through to _bfd_elf_link_hash_newfunc.
+ (elf32_avr_link_hash_table_create): Use
+ elf32_avr_link_hash_newfunc instead of
+ _bfd_elf_link_hash_newfunc.
+ (elf32_avr_relocate_section): Check for the hash table pointer
+ being NULL.
+ (elf32_avr_relax_section, avr_build_one_stub,
+ elf32_avr_setup_params, get_local_syms, elf32_avr_size_stubs,
+ elf32_avr_build_stubs): Likewise.
+
+2007-01-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3831
+ * elf-bfd.h (bfd_elf_link_mark_dynamic_symbol): Add an
+ argument, Elf_Internal_Sym *.
+
+ * elflink.c (bfd_elf_link_mark_dynamic_symbol): Mark a data
+ symbol dynamic if info->dynamic_data is TRUE.
+ (bfd_elf_record_link_assignment): Updated call to
+ bfd_elf_record_link_assignment.
+ (_bfd_elf_merge_symbol): Likewise. Always call
+ bfd_elf_link_mark_dynamic_symbol.
+
+2007-01-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (BFD_LIBS): Removed.
+ * Makefile.in: Regenerated.
+
+2007-01-11 H.J. Lu <hongjiu.lu@intel.com>
-2006-01-17 Nick Clifton <nickc@redhat.com>
+ PR binutils/3631
+ * Makefile.am (OFILES): Add @bfd64_libs@.
+ (libbfd_la_SOURCES): Remove $(BFD64_LIBS_CFILES).
+ * Makefile.in: Regenerated.
- PR binutils/2159
- * elf.c (elfcore_write_pstatus): Add ATTRIBUTE_UNUSED to unused
- parameters.
+ * configure.in (bfd_libs): Replaced by ...
+ (bfd64_libs): This.
+ * configure: Regenerated.
+
+2007-01-11 Nathan Sidwell <nathan@codesourcery.com>
+
+ * elf.c (assign_file_positions_for_load_sections): We can
+ require fewer phdrs than expected.
+
+2007-01-08 Kazu Hirata <kazu@codesourcery.com>
+
+ * archures.c (bfd_mach_cpu32_fido): Rename to bfd_mach_fido.
+ * bfd-in2.h: Regenerate.
+ * cpu-m68k.c (arch_info_struct): Use bfd_mach_fido instead of
+ bfd_mach_cpu32_fido.
+ (m68k_arch_features): Use fido_a instead of cpu32.
+ (bfd_m68k_compatible): Reject the combination of Fido and
+ ColdFire. Accept the combination of CPU32 and Fido with a
+ warning.
+ * elf32-m68k.c (elf32_m68k_object_p,
+ elf32_m68k_merge_private_bfd_data,
+ elf32_m68k_print_private_bfd_data): Treat Fido as an
+ architecture by itself.
-2006-01-11 Nick Clifton <nickc@redhat.com>
+2007-01-08 Kai Tietz <kai.tietz@onevision.com>
- * elf32-arm.c (elf32_arm_output_symbol_hook): Install new entry
- into the newly (re)allocated map array.
+ * config.bfd: Renamed target x86_64-*-mingw64 to x86_64-*-mingw*.
-2006-01-09 Alexis Wilke <alexis_wilke@yahoo.com>
+2007-01-05 Jakub Jelinek <jakub@redhat.com>
- * peXXigen.c (tbl): Add comma after "HIGH3ADJ".
+ * texhex.c (first_phase): Don't fall through into the default
+ case.
+ (pass_over): Replace abort () calls with return FALSE. Fix
+ buffer overflow.
-2006-01-01 Jakub Jelinek <jakub@redhat.com>
+2007-01-04 Jie Zhang <jie.zhang@analog.com>
- * elf64-ppc.c (ppc64_elf_action_discarded): Return 0
- for .toc1 section.
+ * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Don't set
+ SEC_EXCLUDE on zero size .eh_frame.
-For older changes see ChangeLog-2005
+For older changes see ChangeLog-2006
Local Variables:
mode: change-log
diff --git a/bfd/ChangeLog-0203 b/bfd/ChangeLog-0203
index f99029a87ae2..1b1abb149da3 100644
--- a/bfd/ChangeLog-0203
+++ b/bfd/ChangeLog-0203
@@ -858,7 +858,7 @@
Bernardo Innocenti <bernie@develer.com>
* archures.c: Add MCF528x (MCFv4) support.
- * bfd/cpu-m68k.c (arch_info_struct): Likewise.
+ * cpu-m68k.c (arch_info_struct): Likewise.
* bfd-in2.h: Regenerate.
2003-10-20 Andrew Cagney <cagney@redhat.com>
@@ -1953,10 +1953,10 @@
2003-07-12 Jeff Baker <jbaker@qnx.com>
- * bfd/config.bfd (__QNXTARGET__): Define for Neutrino architectures.
- * bfd/elf32-arm.h (ELF_MAXPAGESIZE): Set to 4k for Neutrino.
- * bfd/elf32-sh.c (ELF_MAXPAGESIZE): Set to 4k for Neutrino.
- * bfd/elf32-ppc.c (ELF_MAXPAGESIZE): Set to 4k for Neutrino.
+ * config.bfd (__QNXTARGET__): Define for Neutrino architectures.
+ * elf32-arm.h (ELF_MAXPAGESIZE): Set to 4k for Neutrino.
+ * elf32-sh.c (ELF_MAXPAGESIZE): Set to 4k for Neutrino.
+ * elf32-ppc.c (ELF_MAXPAGESIZE): Set to 4k for Neutrino.
2003-07-12 Jeff Muizelaar <muizelaar@rogers.com>
@@ -2196,13 +2196,13 @@
2003-07-09 Richard Sandiford <rsandifo@redhat.com>
- * bfd/elfxx-mips.c (mips_elf_create_dynamic_relocation): Treat
+ * elfxx-mips.c (mips_elf_create_dynamic_relocation): Treat
forced-local symbols like other locals. Don't create relocations
against STN_UNDEF in irix objects.
2003-07-09 Richard Sandiford <rsandifo@redhat.com>
- * bfd/elfxx-mips.c (mips_elf_create_dynamic_relocation): In SGI-
+ * elfxx-mips.c (mips_elf_create_dynamic_relocation): In SGI-
compatible objects, add the values of defined external symbols
to the addend.
diff --git a/bfd/ChangeLog-2004 b/bfd/ChangeLog-2004
index fa2f1adf3164..0c4709616463 100644
--- a/bfd/ChangeLog-2004
+++ b/bfd/ChangeLog-2004
@@ -283,7 +283,7 @@
2004-11-13 Paul Brook <paul@codesourcery.com>
- * bfd/elf32-arm.c (elf32_arm_final_link_relocate): Resolve
+ * elf32-arm.c (elf32_arm_final_link_relocate): Resolve
R_ARM_PREL31 relocations to PLT entries.
(elf32_arm_relocate_section, elf32_arm_gc_sweep_hook): Ditto.
(elf32_arm_check_relocs): Ditto.
@@ -1248,7 +1248,7 @@
* bfd-in.h (bfd_elf32_arm_set_target_relocs): Add prototype.
(bfd_elf32_arm_process_before_allocation): Update prototype.
* bfd-in2.h: Regenerate.
- * bfd/elf32-arm.h (elf32_arm_link_hash_table): Add target2_reloc.
+ * elf32-arm.h (elf32_arm_link_hash_table): Add target2_reloc.
(elf32_arm_link_hash_table_create): Set it.
(bfd_elf32_arm_process_before_allocation): Remove target1_is_rel.
(bfd_elf32_arm_set_target_relocs): New function.
@@ -3017,7 +3017,7 @@
2004-06-07 Daniel Jacobowitz <dan@debian.org>
From: Albert Chin-A-Young <china@thewrittenword.com>
- * bfd/elf-bfd.h (struct eh_cie_fde): Convert unsigned char bitfields
+ * elf-bfd.h (struct eh_cie_fde): Convert unsigned char bitfields
to unsigned int.
2004-05-29 H.J. Lu <hongjiu.lu@intel.com>
diff --git a/bfd/ChangeLog-2005 b/bfd/ChangeLog-2005
index f23727863556..95746fc1c2df 100644
--- a/bfd/ChangeLog-2005
+++ b/bfd/ChangeLog-2005
@@ -1899,7 +1899,7 @@
2005-06-27 Carlos O'Donell <carlos@systemhalted.org>
- * bfd/elf32-hppa.c (struct elf32_hppa_stub_hash_entry):
+ * elf32-hppa.c (struct elf32_hppa_stub_hash_entry):
Use bh_root, and hh.
(struct elf32_hppa_link_hash_entry): Use eh, and hsh_cache.
(struct elf32_hppa_dyn_reloc_entry): Use hdh_next.
@@ -1936,7 +1936,7 @@
2005-06-21 Carlos O'Donell <carlos@systemhalted.org>
- * bfd/elf32-hppa.c (hppa_elf_hash_entry): Define.
+ * elf32-hppa.c (hppa_elf_hash_entry): Define.
(hppa_stub_hash_entry): Define.
(stub_hash_newfunc): Rename variables.
(hppa_link_hash_newfunc): Likewise.
@@ -2504,7 +2504,7 @@
2005-05-20 Daniel Jacobowitz <dan@codesourcery.com>
- * bfd/elf32-ppc.c (struct ppc_elf_link_hash_entry): Add new field
+ * elf32-ppc.c (struct ppc_elf_link_hash_entry): Add new field
has_sda_refs.
(ppc_elf_copy_indirect_symbol): Copy has_sda_refs.
(ppc_elf_check_relocs): Set has_sda_refs.
@@ -5202,7 +5202,7 @@
2005-01-07 Jakub Jelinek <jakub@redhat.com>
- * bfd/elf.c (INCLUDE_SECTION_IN_SEGMENT): Don't put empty sections into
+ * elf.c (INCLUDE_SECTION_IN_SEGMENT): Don't put empty sections into
PT_DYNAMIC segment, unless .dynamic.
2005-01-06 Paul Brook <paul@codesourcery.com>
diff --git a/bfd/ChangeLog-2006 b/bfd/ChangeLog-2006
new file mode 100644
index 000000000000..82216d69382b
--- /dev/null
+++ b/bfd/ChangeLog-2006
@@ -0,0 +1,3601 @@
+2006-12-31 H.J. Lu <hongjiu.lu@intel.com>
+
+ * bfd.c (bfd_record_phdr): Call bfd_zalloc instead of bfd_alloc
+ to allocate elf_segment_map.
+
+2006-12-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elflink.c (elf_link_add_object_symbols): Remember the symbol
+ size only if it is defined.
+
+2006-12-25 Kazu Hirata <kazu@codesourcery.com>
+
+ * archures.c (bfd_mach_cpu32_fido): New.
+ (bfd_mach_mcf_isa_a_nodiv, bfd_mach_mcf_isa_a,
+ bfd_mach_mcf_isa_a_mac, bfd_mach_mcf_isa_a_emac,
+ bfd_mach_mcf_isa_aplus, bfd_mach_mcf_isa_aplus_mac,
+ bfd_mach_mcf_isa_aplus_emac, bfd_mach_mcf_isa_b_nousp,
+ bfd_mach_mcf_isa_b_nousp_mac, bfd_mach_mcf_isa_b_nousp_emac,
+ bfd_mach_mcf_isa_b, bfd_mach_mcf_isa_b_mac,
+ bfd_mach_mcf_isa_b_emac, bfd_mach_mcf_isa_b_float,
+ bfd_mach_mcf_isa_b_float_mac, bfd_mach_mcf_isa_b_float_emac):
+ Increment the defined values.
+ * bfd-in2.h: Regenerate.
+ * cpu-m68k.c (arch_info_struct): Add en entry for
+ bfd_mach_cpu32_fido.
+ * elf32-m68k.c (elf32_m68k_object_p): Handle
+ EF_M68K_CPU32_FIDO_A.
+ (elf32_m68k_merge_private_bfd_data): Use EF_M68K_CPU32_MASK.
+ (elf32_m68k_print_private_bfd_data): Handle
+ EF_M68K_CPU32_FIDO_A.
+
+2006-12-25 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * elf32-score.c (score_elf_got_lo16_reloc): Change some variables
+ type from unsigned to signed.
+ (score_elf_final_link_relocate): Fix bugs of handling relocation
+ type R_SCORE_GOT15, R_SCORE_GOT_LO16, and R_SCORE_REL32.
+ (_bfd_score_elf_relocate_section): Handle R_SCORE_GOT_LO16
+ specially.
+
+2006-12-23 Jakub Jelinek <jakub@redhat.com>
+
+ * elf-bfd.h (struct elf_backend_data): Add as_needed_cleanup hook.
+ * elfxx-target.h (elf_backend_as_needed_cleanup): Define.
+ (elfNN_bed): Add as_needed_cleanup hook.
+ * elflink.c (elf_link_add_object_symbols): Call it when reverting
+ hash table changes for unneeded --as-needed input.
+ * elf64-ppc64.c (elf_backend_as_needed_cleanup): Define.
+ (ppc64_elf_as_needed_cleanup): New function.
+
+2006-12-19 Kazu Hirata <kazu@codesourcery.com>
+
+ * elf32-m68k.c (elf32_m68k_object_p,
+ elf32_m68k_print_private_bfd_data): Use EF_M68K_ARCH_MASK to
+ extract architecture mask.
+
+2006-12-19 Nathan Sidwell <nathan@codesourcery.com>
+
+ * elf.c (assign_file_positions_for_load_sections): Adjust p_vaddr
+ by p_vaddr_offset. Copy alignment & use if it is valid.
+ (rewrite_elf_program_headers): Cope with leading padding in a
+ segment that does not contain file or program headers.
+ (copy_elf_program_header): Likewise.
+
+2006-12-15 Mark Kettenis <kettenis@gnu.org>
+
+ * config.bfd: (sh*-*-openbsd*): Add target.
+ * configure.in (sh*-*-openbsd*): Set COREFILE to netbsd-core.lo.
+ * configure: Regenerate.
+
+2006-12-15 Alan Modra <amodra@bigpond.net.au>
+
+ * opncls.c (bfd_openr_iovec): Add "stat" parameter.
+ (struct opncls): Add "stat" field.
+ (opncls_bstat): Call vec->stat.
+ * bfd-in2.h: Regenerate.
+ * elf32-spu.c (spu_elf_open_builtin_lib): Adjust.
+
+2006-12-14 Alan Modra <amodra@bigpond.net.au>
+
+ * elf-bfd.h (struct bfd_elf_section_data): Clarify sec_group
+ and next_in_group usage.
+
+2006-12-14 Alan Modra <amodra@bigpond.net.au>
+
+ PR 3704
+ * bfdio.c (bfd_bread): Don't read past end of archive elements.
+
+2006-12-12 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * doc/Makefile.am (bfd_TEXINFOS): Set.
+ (bfd.info bfd.dvi bfd.html): Delete rule.
+ * doc/Makefile.in: Regenerated.
+
+2006-12-11 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.in: Define GENINSRC_NEVER.
+ * doc/Makefile.am (bfd.info): Remove srcdir prefix.
+ (MAINTAINERCLEANFILES): Add info file.
+ (DISTCLEANFILES): Pretend to add info file.
+ * po/Make-in (.po.gmo): Put gmo files in objdir.
+ * configure, Makefile.in, doc/Makefile.in: Regenerated.
+
+2006-12-11 Eric Botcazou <ebotcazou@adacore.com>
+
+ * elflink.c (bfd_elf_gc_sections): Also search for corresponding
+ sections with .gnu.linkonce.t. prefix.
+
+2006-12-07 Kazu Hirata <kazu@codesourcery.com>
+
+ * elf32-m68k.c: Update uses of EF_M68K_*.
+
+2006-12-07 H.J. Lu <hjl@gnu.org>
+
+ PR ld/3666
+ * elflink.c (elf_link_add_object_symbols): Keep symbol
+ visibility for symbols from discarded section.
+
+2006-12-06 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-alpha.c (elf64_alpha_merge_symbol_attribute): New function.
+ (elf_backend_merge_symbol_attribute): Define.
+
+2006-12-04 Jan Beulich <jbeulich@novell.com>
+
+ * elflink.c (_bfd_elf_link_create_dynamic_sections): Don't create
+ .eh_frame_hdr section from here anymore.
+ (bfd_elf_size_dynamic_sections): Call _bfd_elf_maybe_strip_eh_frame_hdr
+ a little earlier.
+
+2006-12-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3609
+ * elf.c (rewrite_elf_program_header): Preserve segment physical
+ address in the output segment if the first section in the
+ corresponding input segment is null.
+
+2006-12-01 Nick Clifton <nickc@redhat.com>
+
+ PR 3609
+ * elf.c (rewrite_elf_program_header): Do not use the first_section
+ pointer if it is null.
+
+2006-11-29 Paul Brook <paul@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_to_thumb_export_stub): Assert that output
+ section is present.
+ (allocate_dynrelocs): Only add export stub for symbols defined in
+ this object.
+
+2006-11-29 Paul Brook <paul@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_to_thumb_export_stub): Assert that output
+ section is present.
+ (allocate_dynrelocs): Only add export stub for symbols defined in
+ this object.
+
+2006-11-29 Paul Brook <paul@codesourcery.com>
+ Julian Brown <julian@codesourcery.com>
+
+ * elf32-arm.c (copy_eabi_attributes): Correct starting offset.
+ (elf32_arm_merge_eabi_attributes): Mark output as initialized.
+ Only set Tag_CPU_name and Tag_ABI_PCS_R9_use if input attribute
+ is present.
+
+2006-11-27 Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (elf_xtensa_special_sections): Add .xtensa.info.
+
+2006-11-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf.c (IS_SECTION_IN_INPUT_SEGMENT): New.
+ (INCLUDE_SECTION_IN_SEGMENT): Use IS_SECTION_IN_INPUT_SEGMENT.
+ (rewrite_elf_program_header): Don't preserve segment physical
+ address in the output segment if the first section in the
+ corresponding input segment is removed.
+
+2006-11-22 Alan Modra <amodra@bigpond.net.au>
+
+ * pef.c (bfd_pef_make_empty_symbol): Delete function. Define instead.
+ * xsym.c (bfd_sym_make_empty_symbol): Likewise.
+ * xsym.h (bfd_sym_make_empty_symbol): Delete.
+
+2006-11-21 Greg McGary <greg@mcgary.org>
+
+ * elf32-ppc.c (ppc_elf_relocate_section): Fixup D field
+ at proper offset in little-endian mode.
+ * elf64-ppc.c (ppc_elf_relocate_section): Likewise.
+
+2006-11-21 Jakub Jelinek <jakub@redhat.com>
+
+ * elf-eh-frame.c (struct cie): New type.
+ (cie_compare): Removed.
+ (cie_eq, cie_hash, cie_compute_hash): New functions.
+ (_bfd_elf_discard_section_eh_frame): Rewrite not to rely on FDEs
+ pointing only to last CIE and allow merging of any duplicate CIEs,
+ not just duplicate consecutive CIEs.
+ (_bfd_elf_discard_section_eh_frame_hdr): Delete cies hash table.
+ * elf-bfd.h (struct cie_header, struct cie): Removed.
+ (struct eh_frame_sec_info): Remove alloced field.
+ (struct eh_frame_hdr_info): Remove last_cie, last_cie_sec
+ and last_cie_inf fields. Add cies field.
+
+2006-11-20 Alan Modra <amodra@bigpond.net.au>
+
+ * bfd-in.h (struct stat): Don't typedef.
+ * bfdio.c (bfd_get_size): Return a file_ptr.
+ * cisco-core.c (cisco_core_file_validate): Use bfd_size_type for nread.
+ * mmo.c (mmo_scan): Use file_ptr for curpos.
+ * trad-core.c (trad_unix_core): Don't cast statbuf.st_size to
+ unsigned long.
+ * bfd-in2.h: Regenerate.
+
+2006-11-20 Alan Modra <amodra@bigpond.net.au>
+
+ PR 3532
+ * bfd-in.h (struct bfd_hash_table): Reorganize. Add "frozen".
+ * hash.c (bfd_hash_table_init_n): Init frozen.
+ (bfd_hash_lookup): Don't grow if frozen.
+ (bfd_hash_traverse): Freeze hash table during traversal.
+ * bfd-in2.h: Regenerate.
+
+2006-11-18 Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c (_bfd_elf_check_kept_section): Test for kept group
+ section. Save result of checks in kept_section.
+ (_bfd_elf_section_already_linked): Tidy. Correct comments.
+ Ignore all group member sections. Handle special matching of
+ single-member groups against linkonce sections via their group
+ section. When such a match is found, set kept_section to the
+ group member section rather than to the group.
+
+2006-11-14 Phil Lello <phil.lello@homecall.co.uk>
+
+ * peXXigen.c: Updates for PE/COFF V8.0, and clarification
+ (dir_names): Added CLR Runtime Header to dir_names[].
+ (_bfd_XX_print_private_bfd_data_common): Added EFI_ROM and XBOX
+ subsystem names
+ (_bfd_XXi_swap_aouthdr_in, _bfd_XXi_swap_aouthdr_out)
+ (pe_print_idata, pe_print_edata)
+ (_bfd_XX_bfd_copy_private_bfd_data_common)
+ (_bfd_XXi_final_link_postscript): Use #DEFINEs for index into
+ DataDirectory.
+
+2006-11-13 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * bfd-in.h (bfd_elf32_arm_process_before_allocation): Update
+ prototype.
+ (bfd_elf32_arm_set_byteswap_code): New prototype.
+ * bfd-in2.h: Regenerate.
+ * elf32-arm.c (bfd_elf32_arm_process_before_allocation): Don't take
+ byteswap_code as an argument. Revert 2006-11-01 change.
+ (bfd_elf32_arm_set_byteswap_code): New.
+ (elf32_arm_size_dynamic_sections): Call
+ bfd_elf32_arm_process_before_allocation.
+
+2006-11-10 Thiemo Seufer <ths@mips.com>
+
+ * config.bfd (mips*el-sde-elf*, mips*-sde-elf*): Drop ECOFF support
+ for SDE configs.
+
+2006-11-10 Nick Clifton <nickc@redhat.com>
+
+ * config.bfd: Move previously obsoleted targets to the REMOVED
+ list.
+ Add maxq-*-coff to the obsolete list.
+
+2006-11-10 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-arm-wince.c (LOCAL_LABEL_PREFIX): Define as ".".
+ * pei-arm-wince.c (LOCAL_LABEL_PREFIX): Likewise.
+ * coff-arm.c (LOCAL_LABEL_PREFIX): Only define if not defined before.
+
+2006-11-07 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * elf32-arm.c (find_thumb_glue): Add ERROR_MESSAGE argument; set it
+ on error.
+ (find_arm_glue): Likewise.
+ (elf32_thumb_to_arm_stub, elf32_arm_create_thumb_stub)
+ (elf32_arm_to_thumb_stub, elf32_arm_final_link_relocate): Add
+ ERROR_MESSAGE argument and pass it through.
+ (elf32_arm_to_thumb_export_stub): Update.
+ (elf32_arm_relocate_section): Use ERROR_MESSAGE and reloc_dangerous.
+
+2006-11-07 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (enum _ppc64_sec_type): New.
+ (struct _ppc64_elf_section_data): Move "t_symndx" into opd union,
+ and rename fields. Add sec_type and has_14bit_branch.
+ (struct ppc_link_hash_table): Remove has_14bit_branch.
+ (get_opd_info, get_tls_mask, ppc64_elf_edit_opd): Adjust.
+ (ppc64_elf_relocate_section): Likewise.
+ (ppc64_elf_check_relocs): Likewise. Set per-section has_14bit_branch.
+ (ppc64_elf_size_stubs): Don't set default group size here.
+ (group_sections): Instead do so here, and group sections using
+ their individual requirements.
+
+2006-11-07 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (struct ppc64_elf_obj_tdata): Remove "has_dotsym"
+ and union.
+ (struct ppc_link_hash_entry): Add "next_dot_sym".
+ (struct ppc_link_hash_table): Add "dot_syms".
+ (link_hash_newfunc): Make list of syms starting with a dot.
+ (ppc_get_stub_entry, adjust_opd_syms): Adjust.
+ (ppc64_elf_add_symbol_hook): Don't set has_dotsym.
+ (struct add_symbol_adjust_data): Delete.
+ (add_symbol_adjust): Simplify params and return.
+ (ppc64_elf_check_directives): Just process the "dot_syms" lists,
+ not all syms.
+
+2006-11-02 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * libbfd-in.h (_bfd_clear_contents): New prototype.
+ * reloc.c (_bfd_clear_contents): New.
+ * libbfd.h: Regenerated.
+
+ * elf32-arm.c (elf32_arm_final_link_relocate): Use
+ _bfd_clear_contents.
+ * elf32-d10v.c (elf32_d10v_relocate_section): Likewise.
+ * elf32-hppa.c (elf32_hppa_relocate_section): Likewise.
+ * elf32-i386.c (elf_i386_relocate_section): Likewise.
+ * elf32-ppc.c (ppc_elf_relocate_section): Likewise.
+ * elf32-s390.c (elf_s390_relocate_section): Likewise.
+ * elf32-sh.c (sh_elf_relocate_section): Likewise.
+ * elf32-xtensa.c (elf_xtensa_relocate_section): Likewise.
+ * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
+ * elf64-s390.c (elf_s390_relocate_section): Likewise.
+ * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
+ * elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Likewise.
+
+ * elfxx-ia64.c (elfNN_ia64_relocate_section): Set value to
+ zero for discarded symbols.
+ * elfxx-mips.c (mips_elf_calculate_relocation): Likewise.
+
+2006-11-01 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+
+ * elf-bfd.h (local_call_stubs): New member.
+ * elfxx-mips.c (FN_STUB_P, CALL_STUB_P, CALL_FP_STUB_P): New macros.
+ (mips_elf_calculate_relocation): Handle local mips16 call stubs.
+ (mips16_stub_section_p): Rename from mips_elf_stub_section_p, use
+ the new stub macros.
+ (_bfd_mips_elf_check_relocs): Handle call stubs for code which
+ mixes mips16 and mips32 functions. Use mips16_stub_section_p. Mark
+ used stubs with SEC_KEEP. Use the new stub macros.
+
+2006-11-01 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-arm.c (bfd_elf32_arm_process_before_allocation): Correct
+ check for PLT usage.
+
+2006-11-01 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * elfxx-mips.c (mips_elf_merge_gots): Always use maxcnt.
+
+2006-10-31 Alan Modra <amodra@bigpond.net.au>
+
+ * elf.c (elfcore_write_note): Pad note descriptor to 4-byte
+ boundary. Tidy. Comment.
+
+2006-10-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3111
+ * elf-bfd.h (elf_obj_tdata): Add symbuf.
+ (_bfd_elf_section_already_linked): Add struct bfd_link_info *.
+ (_bfd_elf_check_kept_section): Likewise.
+ (bfd_elf_match_symbols_in_sections): Likewise.
+
+ * elf.c (assign_section_numbers): Updated to add
+ struct bfd_link_info *.
+ (bfd_elf_match_symbols_in_sections): Updated. Cache symbol
+ buffer if info->reduce_memory_overheads is false.
+
+ * elflink.c (match_group_member): Updated to add
+ struct bfd_link_info *.
+ (_bfd_elf_check_kept_section): Likewise.
+ (elf_link_input_bfd): Likewise.
+ (_bfd_elf_section_already_linked): Likewise.
+ (bfd_elf_final_link): Free symbol buffer if
+ info->reduce_memory_overheads is false.
+
+ * libbfd-in.h (_bfd_nolink_section_already_linked): Add
+ struct bfd_link_info *.
+ (_bfd_generic_section_already_linked): Likewise.
+ * libbfd.h: Regenerated.
+
+ * linker.c (bfd_section_already_linked): Add
+ struct bfd_link_info *.
+ (_bfd_generic_section_already_linked): Likewise.
+ * targets.c (bfd_target): Add struct bfd_link_info * to
+ _section_already_linked.
+ * bfd-in2.h: Regenerated.
+
+2006-10-30 Alan Modra <amodra@bigpond.net.au>
+
+ * bfd.c (bfd_error_type): Add bfd_error_on_input.
+ (input_bfd, input_error): New static vars.
+ (bfd_set_error): Handle bfd_error_on_input.
+ (bfd_errmsg): Likewise.
+ (bfd_perror): Simplify.
+ * archive.c (_bfd_write_archive_contents): Report errors on input.
+ * bfd-in2.h: Regenerate.
+
+2006-10-30 Alan Modra <amodra@bigpond.net.au>
+
+ * elf.c (elfcore_write_note): Pad to 4-byte boundary.
+
+2006-10-28 Richard Sandiford <richard@codesourcery.com>
+
+ * elf32-mips.c (elf_mips_howto_table_rel): Add R_MIPS_GLOB_DAT.
+ * elfn32-mips.c (elf_mips_howto_table_rel): Likewise.
+ (elf_mips_howto_table_rela): Likewise.
+ * elf64-mips.c (mips_elf64_howto_table_rel): Likewise.
+ (mips_elf64_howto_table_rela): Likewise.
+
+2006-10-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf.c (_bfd_elf_init_private_section_data): Assert output
+ section ELF type instead of check if it is SHT_NULL. Copy
+ OS/PROC specific flags from input section to output section.
+
+2006-10-27 Alan Modra <amodra@bigpond.net.au>
+
+ * section.c (SEC_KEEP): Update comment.
+ * bfd-in2.h: Regenerate.
+ * elflink.c (bfd_elf_gc_sections): Ignore SEC_EXCLUDE sections.
+ * merge.c (_bfd_merge_sections): Set SEC_KEEP on excluded sections.
+ * stabs.c (_bfd_discard_section_stabs): Likewise.
+ (_bfd_link_section_stabs): Likewise. Simplify abs_section check.
+
+2006-10-26 Ben Elliston <bje@au.ibm.com>
+
+ * reloc.c (_bfd_relocate_contents): Remove explicit case 0.
+
+ * elf.c (bfd_section_from_shdr): Remove extraneous breaks.
+ * targets.c (find_target): Remove extraneous break.
+
+2006-10-26 Ben Elliston <bje@au.ibm.com>
+
+ * coff-maxq.c (coff_maxq20_reloc): Remove unused variable `howto'.
+ (struct maxq_reloc_map): Unused; remove.
+ (maxq_reloc_map): Likewise.
+ (maxq_reloc_type_lookup): Remove loop over maxq_reloc_map.
+
+2006-10-26 Ben Elliston <bje@au.ibm.com>
+
+ * elf.c (bfd_elf_set_dyn_lib_class): Change second argument type
+ from int to enum dynamic_lib_link_class lib_class.
+ * bfd-in.h (bfd_elf_set_dyn_lib_class): Likewise.
+ * bfd-in2.h: Regenerate.
+
+2006-10-25 Alan Modra <amodra@bigpond.net.au>
+ Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
+ Yukishige Shibata <shibata@rd.scei.sony.co.jp>
+ Nobuhisa Fujinami <fnami@rd.scei.sony.co.jp>
+ Takeaki Fukuoka <fukuoka@rd.scei.sony.co.jp>
+
+ * cpu-spu.c: New file.
+ * elf32-spu.c: New file.
+ * elf32-spu.h: New file.
+ * archures.c: Add SPU support.
+ * config.bfd: Likewise.
+ * configure.in: Likewise.
+ * reloc.c: Likewise.
+ * targets.c: Likewise.
+ * Makefile.am: Likewise. Run "make dep-am".
+ * libbfd.h: Regenerate.
+ * bfd-in2.h: Regenerate.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * po/SRC-POTFILES.in: Regenerate.
+
+2006-10-23 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (ppc64_elf_edit_opd): Clarify comment.
+
+2006-10-23 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-score.c: Formatting.
+ (elf_backend_omit_section_dynsym): Define.
+ (score_elf_create_dynamic_relocation): Remove code copied from mips.
+ Don't use section syms in dynamic relocs. Remove unused param.
+ (score_elf_final_link_relocate): Remove unused param.
+
+2006-10-23 Alan Modra <amodra@bigpond.net.au>
+
+ * linker.c (fix_syms): Choose best of previous and next
+ section based on section flags and vma.
+
+2006-10-21 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * elf32-sh64.c (sh64_elf_merge_symbol_attribute): Do merging
+ only when the non visibility part of st_other is non-zero.
+ * elf64-sh64.c (sh64_elf64_merge_symbol_attribute): Likewise.
+
+2006-10-20 Richard Sandiford <richard@codesourcery.com>
+
+ * elfxx-mips.c (_bfd_mips_elf_modify_segment_map): Don't extend
+ PT_DYNAMIC on GNU/Linux targets.
+
+2006-10-20 Richard Sandiford <richard@codesourcery.com>
+
+ * elfxx-mips.c (_bfd_mips_elf_finish_dynamic_sections): Make the
+ size of .rel.dyn reflect the value of DT_RELSZ.
+
+2006-10-20 Richard Sandiford <richard@codesourcery.com>
+
+ * elfxx-mips.c (_bfd_mips_elf_additional_program_headers): Allocate
+ a PT_NULL header for dynamic objects.
+ (_bfd_mips_elf_modify_segment_map): Add it.
+
+2006-10-19 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * elf32-score.c (score_elf_rel_dyn_section): Replace
+ bfd_make_section with bfd_make_section_with_flags.
+ (_bfd_score_elf_create_dynamic_sections): Ditto.
+ (score_elf_create_got_section): Ditto.
+ (score_elf_final_link_relocate): Delete referrence to
+ EF_SCORE_HASENTRY.
+
+2006-10-19 Richard Sandiford <richard@codesourcery.com>
+
+ * elfxx-mips.c (sort_dynamic_relocs): Sort relocations against the
+ same symbol by increasing r_offset.
+ (sort_dynamic_relocs_64): Likewise. Fix comparisons between very
+ large and very small symbol indexes.
+
+2006-10-19 Richard Sandiford <richard@codesourcery.com>
+
+ * elfxx-mips.c (_bfd_mips_elf_size_dynamic_sections): Add DT_DEBUG
+ and DT_MIPS_RLD_MAP tags for position-independent executables.
+ Do not add DT_DEBUG to shared libraries for any MIPS target.
+
+2006-10-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3290
+ * elflink.c (elf_link_add_object_symbols): Hide definitions in
+ debug sections.
+
+2006-10-19 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-arm.c (bfd_elf32_arm_allocate_interworking_sect): Check,
+ don't set, glue section size.
+ (record_arm_to_thumb_glue): Set glue section size here.
+ (record_thumb_to_arm_glue): Likewise.
+ (bfd_elf32_arm_add_glue_sections_to_bfd): Formatting.
+ (bfd_elf32_arm_process_before_allocation): Ignore exluded sections.
+
+2006-10-18 Roy Marples <uberlord@gentoo.org>
+
+ * elf64-sparc.c: Add FreeBSD support.
+ (elf64_sparc_fbsd_post_process_headers): New function.
+ * targets.c (_bfd_target_vector): Add bfd_elf64_sparc_freebsd_vec.
+ * config.bfd (sparc64-*-freebsd*): Set targ_defvec to bfd_elf64_sparc_freebsd_vec.
+ * configure.in: Add entry for bfd_elf64_sparc_freebsd_vec.
+ * configure: Regenerate.
+
+2006-10-17 Mark Shinwell <shinwell@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_final_link_relocate): Add support for
+ R_ARM_MOVW_BREL_NC, R_ARM_MOVW_BREL, R_ARM_MOVT_BREL,
+ R_ARM_THM_MOVW_BREL_NC, R_ARM_THM_MOVW_BREL and
+ R_ARM_THM_MOVT_BREL relocations.
+
+2006-10-17 Mark Shinwell <shinwell@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_howto_table_1): Change offset for
+ R_THM_CALL to 25 and remove FIXME comment.
+ (using_thumb2): New function.
+ (elf32_arm_final_link_relocate): Cope with Thumb-2 BL encoding.
+
+2006-10-17 Mark Shinwell <shinwell@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_final_link_relocate): Add cases
+ for R_ARM_ABS32_NOI and R_ARM_REL32_NOI.
+ (elf32_arm_gc_sweep_hook): Likewise.
+ (elf32_arm_check_relocs): Likewise.
+ (allocate_dynrelocs): Likewise.
+
+2006-10-17 Alan Modra <amodra@bigpond.net.au>
+
+ * elf-bfd.h (struct elf_link_hash_table): Reorder. Add
+ text_index_section and data_index_section.
+ (struct elf_backend_data): Add elf_backend_init_index_section.
+ (_bfd_elf_init_1_index_section): Declare.
+ (_bfd_elf_init_2_index_sections): Declare.
+ * elfxx-target.h (elf_backend_init_index_section): Define.
+ (elfNN_bed): Init new field.
+ * elflink.c (_bfd_elf_link_omit_section_dynsym): Keep first tls
+ section and text_index_section plus data_index_section.
+ (_bfd_elf_link_renumber_dynsyms): Clear dynindx on omitted sections.
+ (_bfd_elf_init_1_index_section): New function.
+ (_bfd_elf_init_2_index_sections): New function.
+ (bfd_elf_size_dynsym_hash_dynstr): Call elf_backend_init_index_section.
+ (elf_link_input_bfd): When emitting relocs, use text_index_section
+ and data_index_section for removed sections.
+ * elf-m10300.c (elf_backend_omit_section_dynsym): Define.
+ * elf32-i386.c: Likewise.
+ * elf32-m32r.c: Likewise.
+ * elf32-sh.c: Likewise.
+ * elf32-xstormy16.c: Likewise.
+ * elf32-xtensa.c: Likewise.
+ * elf64-alpha.c: Likewise.
+ * elf64-hppa.c: Likewise.
+ * elf64-mmix.c: Likewise.
+ * elf64-sh64.c: Likewise.
+ * elfxx-ia64.c: Likewise.
+ * elf32-arm.c (elf32_arm_final_link_relocate): Use text_index_section
+ and data_index_section sym for relocs against sections with no dynamic
+ section sym.
+ (elf_backend_init_index_section): Define.
+ * elf32-cris.c: Similarly.
+ * elf32-hppa.c: Similarly.
+ * elf32-i370.c: Similarly.
+ * elf32-m68k.c: Similarly.
+ * elf32-mips.c: Similarly.
+ * elf32-ppc.c: Similarly.
+ * elf32-s390.c: Similarly.
+ * elf32-sparc.c: Similarly.
+ * elf32-vax.c: Similarly.
+ * elf64-mips.c: Similarly.
+ * elf64-ppc.c: Similarly.
+ * elf64-s390.c: Similarly.
+ * elf64-sparc.c: Similarly.
+ * elf64-x86-64.c: Similarly.
+ * elfn32-mips.c: Similarly.
+ * elfxx-mips.c: Similarly.
+ * elfxx-sparc.c: Similarly.
+ * linker.c (fix_syms): Base symbols in removed sections on
+ previous section in preference to using absolute section.
+
+2006-10-16 Andreas Schwab <schwab@suse.de>
+
+ * elfxx-ia64.c (addend_compare): Properly compute return value.
+
+2006-10-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3314
+ * elf.c (assign_file_positions_for_non_load_sections): Don't
+ page align empty SHF_ALLOC sections.
+
+2006-10-13 Jakub Jelinek <jakub@redhat.com>
+
+ * elfxx-sparc.c (_bfd_sparc_elf_finish_dynamic_sections): Set
+ .plt sh_entsize to 0 if plt header size isn't multiple of
+ plt entry size or for 32-bit which adds a nop insn at the
+ end of the .plt section.
+
+2006-10-12 Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (elf_xtensa_action_discarded): New.
+ (elf_backend_action_discarded): Define.
+
+2006-10-11 Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (elf_xtensa_relocate_section): Return after
+ unresolvable relocation error.
+ (elf_xtensa_finish_dynamic_symbol): Set value of undefined, weak
+ symbols to zero.
+
+2006-10-10 Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (elf_xtensa_size_dynamic_sections): Add DT_DEBUG
+ for PIE executables.
+
+2006-10-03 Jakub Jelinek <jakub@redhat.com>
+
+ * elf-bfd.h (struct eh_cie_fde): Add set_loc pointer.
+ * elf-eh-frame.c (skip_cfa_op): Fix handling of DW_CFA_advance_loc.
+ Handle DW_CFA_{remember,restore}_state, DW_CFA_GNU_window_save,
+ DW_CFA_val_{offset{,_sf},expression}.
+ (skip_non_nops): Record number of DW_CFA_set_loc ops.
+ (_bfd_elf_discard_section_eh_frame): Require skip_non_nops recognizes
+ all ops. If there are any DW_CFA_set_loc ops and they are pcrel
+ or going to be pcrel, compute set_loc array.
+ (_bfd_elf_eh_frame_section_offset): If make_relative, kill relocations
+ against DW_CFA_set_loc operands.
+ (_bfd_elf_write_section_eh_frame): Handle DW_CFA_set_loc adjusting.
+
+2006-10-02 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * elflink.c (_bfd_elf_merge_symbol): Discard references to TLS
+ symbols from the --just-syms file.
+
+2006-10-01 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (ppc64_elf_build_stubs): Test glink size for
+ existence of PLT.
+
+2006-09-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3283
+ * elf64-x86-64.c (elf64_x86_64_relocate_section): Don't ignore
+ relocation overflow on branches to undefweaks.
+
+2006-09-29 Alan Modra <amodra@bigpond.net.au>
+
+ * po/BLD-POTFILES.in: Regenerate.
+ * po/SRC-POTFILES.in: Regenerate.
+
+2006-09-29 Danny Smith <dannysmith@users.sourceforge.net>
+
+ PR 3276
+ * pei-i386.c (COFF_SECTION_ALIGNMENT_ENTRIES): Enable 16 byte
+ alignment for .data$, .rdata$ and .text$ sections so that sse
+ and sse2 code will work for linkonce sections too.
+ * pe-i386.c (COFF_SECTION_ALIGNMENT_ENTRIES): Likewise.
+
+2006-09-28 Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c (_bfd_elf_gc_mark_hook): New function.
+ * elf-bfd.h (_bfd_elf_gc_mark_hook): Declare.
+ * elfxx-target.h (elf_backend_gc_mark_hook): Default to above.
+ * elf-m10300.c (mn10300_elf_gc_mark_hook): Use _bfd_elf_gc_mark_hook.
+ * elf32-arm.c (elf32_arm_gc_mark_hook): Likewise.
+ * elf32-cris.c (cris_elf_gc_mark_hook): Likewise.
+ * elf32-hppa.c (elf32_hppa_gc_mark_hook): Likewise.
+ * elf32-i386.c (elf_i386_gc_mark_hook): Likewise.
+ * elf32-m32r.c (m32r_elf_gc_mark_hook): Likewise.
+ * elf32-m68k.c (elf_m68k_gc_mark_hook): Likewise.
+ * elf32-mcore.c (mcore_elf_gc_mark_hook): Likewise.
+ * elf32-ppc.c (ppc_elf_gc_mark_hook): Likewise.
+ * elf32-s390.c (elf_s390_gc_mark_hook): Likewise.
+ * elf32-score.c (_bfd_score_elf_gc_mark_hook): Likewise.
+ * elf32-sh.c (sh_elf_gc_mark_hook): Likewise.
+ * elf32-vax.c (elf_vax_gc_mark_hook): Likewise.
+ * elf32-xtensa.c (elf_xtensa_gc_mark_hook): Likewise.
+ * elf64-mmix.c (mmix_elf_gc_mark_hook): Likewise.
+ * elf64-s390.c (elf_s390_gc_mark_hook): Likewise.
+ * elf64-x86-64.c (elf64_x86_64_gc_mark_hook): Likewise.
+ * elfxx-mips.c (_bfd_mips_elf_gc_mark_hook): Likewise.
+ * elfxx-sparc.c (_bfd_sparc_elf_gc_mark_hook): Likewise.
+ * elf32-bfin.c (bfin_gc_mark_hook): Likewise.
+ (bfinfdpic_gc_sweep_hook): Delete.
+ (elf_backend_gc_sweep_hook): Don't define for elf32-bfinfdpic.
+ * elf32-d10v.c (elf32_d10v_gc_mark_hook): Use _bfd_elf_gc_mark_hook.
+ (elf32_d10v_gc_sweep_hook): Delete.
+ (elf_backend_gc_sweep_hook): Don't define.
+ * elf32-fr30.c (fr30_elf_gc_mark_hook): Use _bfd_elf_gc_mark_hook.
+ (fr30_elf_gc_sweep_hook): Delete.
+ (elf_backend_gc_sweep_hook): Don't define.
+ * elf32-frv.c (elf32_frv_gc_mark_hook): Use _bfd_elf_gc_mark_hook.
+ (elf32_frv_gc_sweep_hook): Delete.
+ (elf_backend_gc_sweep_hook): Don't define.
+ * elf32-iq2000.c (iq2000_elf_gc_mark_hook): Use _bfd_elf_gc_mark_hook.
+ (iq2000_elf_gc_sweep_hook): Delete.
+ (elf_backend_gc_sweep_hook): Don't define.
+ * elf32-openrisc.c (openrisc_elf_gc_mark_hook): Use
+ _bfd_elf_gc_mark_hook.
+ (openrisc_elf_gc_sweep_hook): Delete.
+ (elf_backend_gc_sweep_hook): Don't define.
+ * elf32-v850.c (v850_elf_gc_mark_hook): Use _bfd_elf_gc_mark_hook.
+ (v850_elf_gc_sweep_hook): Delete.
+ (elf_backend_gc_sweep_hook): Don't define.
+ * elf32-xstormy16.c (xstormy16_elf_gc_mark_hook): Use
+ _bfd_elf_gc_mark_hook.
+ (xstormy16_elf_gc_sweep_hook): Delete.
+ (elf_backend_gc_sweep_hook): Don't define.
+ * elf64-sh64.c (sh_elf64_gc_mark_hook): Use _bfd_elf_gc_mark_hook.
+ (sh_elf64_gc_sweep_hook): Delete.
+ (elf_backend_gc_sweep_hook): Don't define.
+ * elf32-avr.c (elf32_avr_gc_mark_hook): Delete.
+ (elf32_avr_gc_sweep_hook): Delete.
+ (elf_backend_gc_mark_hook, elf_backend_gc_mark_hook): Don't define.
+ * elf32-cr16c.c (elf32_cr16c_gc_mark_hook): Delete.
+ (elf32_cr16c_gc_sweep_hook): Delete.
+ (elf_backend_gc_mark_hook, elf_backend_gc_mark_hook): Don't define.
+ * elf32-crx.c (elf32_crx_gc_mark_hook): Delete.
+ (elf32_crx_gc_sweep_hook): Delete.
+ (elf_backend_gc_mark_hook, elf_backend_gc_mark_hook): Don't define.
+ * elf32-h8300.c (elf32_h8_gc_mark_hook): Delete.
+ (elf32_h8_gc_sweep_hook): Delete.
+ (elf_backend_gc_mark_hook, elf_backend_gc_mark_hook): Don't define.
+ * elf32-ip2k.c (ip2k_elf_gc_mark_hook): Delete.
+ (ip2k_elf_gc_sweep_hook): Delete.
+ (elf_backend_gc_mark_hook, elf_backend_gc_mark_hook): Don't define.
+ * elf32-m32c.c (m32c_elf_gc_mark_hook, m32c_elf_gc_sweep_hook): Delete.
+ (elf_backend_gc_mark_hook, elf_backend_gc_mark_hook): Don't define.
+ * elf32-m68hc11.c (elf_backend_gc_mark_hook): Don't define.
+ (elf_backend_gc_sweep_hook): Don't define.
+ * elf32-m68hc12.c (elf_backend_gc_mark_hook): Don't define.
+ (elf_backend_gc_sweep_hook): Don't define.
+ * elf32-m68hc1x.c (elf32_m68hc11_gc_mark_hook): Delete.
+ (elf32_m68hc11_gc_sweep_hook): Delete.
+ * elf32-m68hc1x.h (elf32_m68hc11_gc_mark_hook): Delete.
+ (elf32_m68hc11_gc_sweep_hook): Delete.
+ * elf32-msp430.c (elf32_msp430_gc_mark_hook): Delete.
+ (elf32_msp430_gc_sweep_hook): Delete.
+ (elf_backend_gc_mark_hook, elf_backend_gc_mark_hook): Don't define.
+ * elf32-mt.c (mt_elf_gc_mark_hook, mt_elf_gc_sweep_hook): Delete.
+ (elf_backend_gc_mark_hook, elf_backend_gc_mark_hook): Don't define.
+
+2006-09-25 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * bfd-in.h (CONST_STRNCPY) : Delete.
+ (LITSTRCPY) : New.
+ (LITMEMCPY) : New.
+ * bfd-in2.h : Regenerate.
+ * elflink.c (bfd_elf_gc_sections) : Use LITMEMCPY. Don't manually
+ calculate string lengths.
+ * nlmcode.h (nlm_swap_auxiliary_headers_in) : Use LITMEMCPY.
+
+2006-09-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3223
+ PR ld/3267
+ * elf.c (assign_file_positions_for_non_load_sections): Don't
+ warn zero size allocated sections.
+
+2006-09-27 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-score.c (_bfd_score_elf_relocate_section): Move assignment
+ to "name" so that compiler realizes it is never uninitialized.
+ Use bfd_elf_sym_name.
+
+2006-09-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3262
+ * elf.c (rewrite_elf_program_header): Use bfd_zalloc instead of
+ bfd_alloc to allocate segment map.
+ (copy_elf_program_header): Likewise.
+
+2006-09-26 Mark Shinwell <shinwell@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+ Ian Lance Taylor <ian@wasabisystems.com>
+ Ben Elliston <bje@wasabisystems.com>
+
+ * archures.c: Add definition for bfd_mach_arm_iWMMXt2.
+ * cpu-arm.c (processors): Add bfd_mach_arm_iWMMXt2.
+ (arch_info_struct, bfd_arm_update_notes): Likewise.
+ (architectures): Likewise.
+ (bfd_arm_merge_machines): Check for iWMMXt2.
+ * bfd-in2.h: Rebuild.
+
+2006-09-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
+
+2006-09-22 Alan Modra <amodra@bigpond.net.au>
+
+ * elfcode.h (elf_swap_symbol_in): Return bfd_boolean. Don't abort
+ on error.
+ * elf-bfd.h (elf_size_info <swap_symbol_in>): Adjust decl.
+ (bfd_elf32_swap_symbol_in, bfd_elf64_swap_symbol_in): Likewise.
+ * elf.c (bfd_elf_get_elf_syms): Test return of swap_symbol_in,
+ and report error.
+ * elf32-arm.c (elf32_arm_swap_symbol_in): Return bfd_boolean.
+
+2006-09-20 Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ * elf32-s390.c (elf_s390_relocate_section): Remove check for code
+ section in LD to LE linker relaxation for R_390_TLS_LDO32.
+ * elf64-s390.c (elf_s390_relocate_section): Likewise for
+ R_390_TLS_LDO64.
+
+2006-09-20 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * configure.in: Added new target-vectors x86_64coff_vec,
+ x86_64pe_vec, and x86_64pei_vec.
+ * configure: Regenerate.
+ * config.bfd: Adjusted x86_64 target architecture detection.
+ * bfd.c: Add for new target "coff-x86-64"
+ (bfd_get_sign_extend): Add target vector idents for pe-x86-64. and pei-x86-64.
+ * coff-x86_64.c: Add new file for x86_64 (AMD64) coff support.
+ * libpei.h: Adjustments for COFF_WITH_pex64.
+ * coffcode.h: Add for new target machine, architecture, signature, and internal
+ signature handler.
+ * Makefile.am: Add new files to target-all and define make-rule for pex64igen.c
+ * Makefile.in: Regenerate.
+ * pe-x86_64.c: Add for new target "pe-x86-64".
+ * pei-x86_64.c: Add for new target "pei-x86-64".
+ * peicode.h: Adjusts for new targets.
+ (coff_swap_filehdr_out): Set for this target to
+ _bfd_pex64_only_swap_filehdr_out.
+ (SIZEOF_IDATA4): Define it as 8 byte size for this target.
+ (SIZEOF_IDATA5): Define it as 8 byte size for this target.
+ (jump_table jtab): Add for AMD64MAGIC.
+ (pe_ILF_build_a_bfd): Adjusts for new size of SIZEOF_IDATA4 and SIZE_IDATA5.
+ (pe_ILF_object_p): Add coff image-file signature to internal
+ signature translation.
+ * peXXigen.c: Adjust proper include of target coff-header and
+ introduced target specific code
+ (COFF_WITH_pex64): New macro for this target.
+ (pe_print_idata): New dumping method for import section of PE+ files.
+ * targets.c: Add new target vectors declarations for x86_64 coff targets.
+ * coffcode.h: Support code to support the x86_64 PE magic number.
+ * coff-x86_64.c: New file.
+
+2006-09-17 Hans-Peter Nilsson <hp@axis.com>
+
+ * elf.c (special_sections_s): Revert last STRING_COMMA_LEN change
+ for .stabstr entry, explain why.
+
+2006-09-17 Anton Blanchard <anton@samba.org>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * dwarf2.c (concat_filename): Apply DW_AT_comp_dir if dir table
+ entry isn't absolute.
+
+2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * cpu-score.c: New file.
+ * elf32-score.c: New file.
+ * config.bfd: Add Score target.
+ * Makefile.am: Add Score files.
+ * Makefile.in: Regenerate.
+ * archures.c: Add Score architecture.
+ * reloc.c: Add Score relocs.
+ * targets.c: Add Score target vectors.
+ * bfd-in2.h: Regenerate.
+ * libbfd.h: Regenerate.
+ * configure.in: Add Score target.
+ * configure: Regenerate.
+
+2006-09-16 Nick Clifton <nickc@redhat.com>
+ Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * bfd-in.h (STRING_COMMA_LEN): New macro. Takes one constant
+ string as its argument and emits the string followed by a comma
+ and then the length of the string.
+ (CONST_STRNEQ): New macro. Checks to see if a variable string
+ has a constant string as its initial characters.
+ (CONST_STRNCPY): New macro. Copies a constant string to the start
+ of a variable string.
+ * bfd-in2.h: Regenerate.
+ * archive.c: Make use of the new macros.
+ * archive64.c: Likewise.
+ * bfd.c: Likewise.
+ * coff-ppc.c: Likewise.
+ * coff-stgo32.c: Likewise.
+ * coffcode.h: Likewise.
+ * cofflink.c: Likewise.
+ * cpu-i960.c: Likewise.
+ * dwarf2.c: Likewise.
+ * ecoff.c: Likewise.
+ * elf-m10300.c: Likewise.
+ * elf.c: Likewise.
+ * elf32-arm.c: Likewise.
+ * elf32-bfin.c: Likewise.
+ * elf32-cris.c: Likewise.
+ * elf32-hppa.c: Likewise.
+ * elf32-i370.c: Likewise.
+ * elf32-i386.c: Likewise.
+ * elf32-iq2000.c: Likewise.
+ * elf32-m32r.c: Likewise.
+ * elf32-m68hc11.c: Likewise.
+ * elf32-m68hc12.c: Likewise.
+ * elf32-m68k.c: Likewise.
+ * elf32-mcore.c: Likewise.
+ * elf32-ppc.c: Likewise.
+ * elf32-s390.c: Likewise.
+ * elf32-sh-symbian.c: Likewise.
+ * elf32-sh.c: Likewise.
+ * elf32-sh64.c: Likewise.
+ * elf32-v850.c: Likewise.
+ * elf32-vax.c: Likewise.
+ * elf32-xtensa.c: Likewise.
+ * elf64-alpha.c: Likewise.
+ * elf64-hppa.c: Likewise.
+ * elf64-mmix.c: Likewise.
+ * elf64-ppc.c: Likewise.
+ * elf64-s390.c: Likewise.
+ * elf64-sh64.c: Likewise.
+ * elf64-x86-64.c: Likewise.
+ * elflink.c: Likewise.
+ * elfxx-ia64.c: Likewise.
+ * elfxx-mips.c: Likewise.
+ * elfxx-sparc.c: Likewise.
+ * hpux-core.c: Likewise.
+ * i386linux.c: Likewise.
+ * ieee.c: Likewise.
+ * libpei.h: Likewise.
+ * linker.c: Likewise.
+ * m68klinux.c: Likewise.
+ * mmo.c: Likewise.
+ * nlmcode.h: Likewise.
+ * osf-core.c: Likewise.
+ * pef.c: Likewise.
+ * som.c: Likewise.
+ * sparclinux.c: Likewise.
+ * vms-hdr.c: Likewise.
+
+2006-09-14 Alan Modra <amodra@bigpond.net.au>
+
+ PR 3181
+ * elf.c (_bfd_elf_copy_private_header_data): Fix group members
+ that have had their SHT_GROUP section removed.
+
+2006-09-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3197
+ * elflink.c (elf_link_output_extsym): Compute bucket only if
+ needed.
+
+2006-09-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3186
+ * elf.c (_bfd_elf_make_section_from_shdr): Correct length of
+ "gnu.linkonce.wi.".
+
+2006-09-08 Vladimir Prus <vladimir@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_swap_symbol_out): Remove
+ unconditional setting of low bit for Thumb symbol
+ mistakenly left behind after check for external
+ symbols was added. Fix comment typo.
+
+2006-09-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf-bfd.h (elf_link_hash_entry): Add a dynamic field.
+ (bfd_elf_link_mark_dynamic_symbol): New.
+ (SYMBOLIC_BIND): New.
+
+ * elf32-i386.c (elf_i386_check_relocs): Replace info->symbolic
+ with SYMBOLIC_BIND (info, h).
+ (elf_i386_relocate_section): Likewise.
+ * elf64-x86-64.c (elf64_x86_64_check_relocs): Likewise.
+ (elf64_x86_64_relocate_section): Likewise.
+ * elfxx-ia64.c (elfNN_ia64_check_relocs): Likewise.
+
+ * elflink.c (bfd_elf_link_mark_dynamic_symbol): New.
+ (bfd_elf_record_link_assignment): Call
+ bfd_elf_link_mark_dynamic_symbol on new entry.
+ (_bfd_elf_merge_symbol): Likewise.
+ (_bfd_elf_export_symbol): Return if the symbol isn't exported.
+ (_bfd_elf_fix_symbol_flags): Replace info->symbolic with
+ SYMBOLIC_BIND (info, h).
+ (_bfd_elf_dynamic_symbol_p): Likewise.
+ (_bfd_elf_symbol_refs_local_p): Likewise.
+ (bfd_elf_size_dynamic_sections): Updated.
+
+2006-09-05 Bibo Mao <bibo.mao@intel.com>
+
+ PR binutils/3171
+ * coffcode.h (coff_write_object_contents): Set the optional
+ header magic number to PE32PMAGIC instead of ZMAGIC for ia64.
+
+2006-09-04 Mark Shinwell <shinwell@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_howto_table_1): Adjust entries for
+ R_ARM_THM_ALU_PREL_11_0 and R_ARM_THM_PC12 relocations.
+ (elf32_arm_final_link_relocate): Handle R_ARM_THM_ALU_PREL_11_0
+ and R_ARM_THM_PC12 relocations.
+
+2006-08-24 Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (xtensa_get_property_section_name): Delete.
+ (xtensa_get_property_section): New.
+ (xtensa_read_table_entries): Use xtensa_get_property_section.
+ (relax_property_section, xtensa_get_property_predef_flags): Handle
+ group name suffixes in property section names.
+ (match_section_group): New.
+
+2006-08-23 Frediano Ziglio <Frediano.Ziglio@vodafone.com>
+
+ * archive.c (hpux_uid_gid_encode): Fix thinko decrementing "cnt"
+ variable.
+
+2006-08-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_copy_indirect_symbol): Only copy
+ plt_thumb_refcount from indirect symbols.
+
+2006-08-22 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-ppc.c (ppc_elf_relocate_section): Correct GOT and PLT HA
+ reloc handling.
+ * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
+
+2006-08-21 Mark Shinwell <shinwell@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_link_hash_table): Correct typo in
+ comment for target1_is_rel.
+
+2006-08-21 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * Makefile.am: Add rules to build pe-arm-wince.lo
+ and pei-arm-wince.lo objects.
+ * Makefile.in: Regenerate.
+ * pe-arm-wince.c: New file.
+ * pei-arm-wince.c: New file.
+ * pei-arm.c: Remove ARM_WINCE block.
+ * pe-arm.c: Remove ARM_WINCE block. Rename
+ bfd_arm_pe_allocate_interworking_sections,
+ bfd_arm_pe_get_bfd_for_interworking, and
+ bfd_arm_pe_process_before_allocation to
+ bfd_armpe_allocate_interworking_sections,
+ bfd_armpe_get_bfd_for_interworking, and
+ bfd_armpe_process_before_allocation. Move them before
+ including bfd.h.
+ * bfd.c: ARM wince bfd format names were renamed. Adjust.
+ * coff-arm.c [ARM_WINCE]: Adjust so Windows CE doesn't end up
+ with unexpected/conflicting relocs.
+ * targets.c: The arm-wince-pe target got its own new vector.
+ Adjust.
+ * config.bfd: Likewise.
+ * configure.in: Likewise.
+ * configure: Regenerate.
+
+2006-08-18 Paul Brook <paul@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_link_hash_entry): Add export_glue.
+ (elf32_arm_link_hash_newfunc): Initialize export_glue.
+ (record_arm_to_thumb_glue): Return stub symbol.
+ (elf32_arm_create_thumb_stub): New function.
+ (elf32_arm_to_thumb_stub): Use it.
+ (elf32_arm_to_thumb_export_stub): New function.
+ (elf32_arm_begin_write_processing): New function.
+ (allocate_dynrelocs): Allocate Arm stubs.
+ (elf_backend_begin_write_processing): Define.
+ (elf32_arm_symbian_begin_write_processing): Remove ATTRIBUTE_UNUSED.
+ Call elf32_arm_begin_write_processing.
+
+2006-08-17 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (create_linkage_sections): Align .glink to 8 bytes.
+ (ppc64_elf_build_stubs): Use new lazy linking stub.
+
+2006-08-17 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (ppc64_elf_size_stubs): Ignore non-code sections.
+
+2006-08-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3015
+ * elf.c (get_program_header_size): Add a PT_GNU_RELRO segment
+ only if there is a PT_DYNAMIC segment.
+ (_bfd_elf_map_sections_to_segments): Likewise.
+ (assign_file_positions_for_load_sections): Set PT_GNU_RELRO
+ segment alignment to 1.
+
+2006-08-15 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * elf32-mips.c, elf64-mips.c, elfn32-mips.c
+ (elf_backend_merge_symbol_attribute): Define.
+ * elflink.c (elf_link_add_object_symbols): Merge only the ELF
+ visibility flags.
+ * elfxx-mips.c (_bfd_mips_elf_merge_symbol_attribute): New function.
+
+2006-08-15 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+ David Ung <davidu@mips.com>
+
+ * config.bfd: Add configurations for mips*el-sde-elf* and
+ mips*-sde-elf*.
+
+2006-08-14 DJ Delorie <dj@redhat.com>
+
+ * elf-m10300.c (elf32_mn10300_link_hash_entry): Add value.
+ (elf32_mn10300_count_hash_table_entries): New.
+ (elf32_mn10300_list_hash_table_entries): New.
+ (sort_by_value): New.
+ (mn10300_elf_relax_section): Don't skip data sections; restrict
+ code-specific tests to code-specific areas so that potential
+ indirect calls can be detected. Check for multiple local symbols
+ at the same address and merge their flags.
+ (elf32_mn10300_link_hash_newfunc): Initialize value.
+
+2006-08-14 Thiemo Seufer <ths@mips.com>
+
+ * elfxx-mips.c (_bfd_mips_elf_symbol_processing,
+ _bfd_mips_elf_add_symbol_hook): Don't try to place small common TLS
+ symbols in .scommon.
+
+2006-08-11 Thiemo Seufer <ths@mips.com>
+
+ * elfxx-mips.c (_bfd_mips_elf_finish_dynamic_sections): Set
+ sh_entsize only when sgot was already initialized.
+
+2006-08-08 DJ Delorie <dj@redhat.com>
+
+ * elf32-sh.c (sh_elf_relax_section): Allow for branches across
+ non-moving .align directives. Preserve any DIR32 offset when
+ converting bsr's to jsr's.
+
+2006-08-08 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (ppc64_elf_build_stubs): Clear relbrlt reloc_count
+ after stubs have been built.
+
+2006-08-07 Nick Clifton <nickc@redhat.com>
+
+ * elf32-sh.c (vxworks_object_p): Only check for vxworks target
+ vectors if they are going to be created.
+
+2006-08-07 Nick Clifton <nickc@redhat.com>
+
+ * configure.in (bfd_elf32_shnbsd_vec): Fix typo.
+ * configure: Regenerate.
+
+2006-08-07 Nick Clifton <nickc@redhat.com>
+
+ * coff-arm.c (coff_arm_rtype_to_howto): Only check for ARM_SECREL
+ relocation types if the target is ARM_WINCE.
+
+2006-08-05 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * bfd.c (bfd_get_sign_extend_vma): Add cases for pe-arm-little
+ and pei-arm-little.
+ * coff-arm.c (coff_arm_rtype_to_howto) [COFF_WITH_PE]: Handle
+ ARM_SECREL.
+ (coff_arm_reloc_type_lookup): Map BFD_RELOC_32_SECREL to
+ ARM_SECREL.
+ * pe-arm.c [COFF_SECTION_ALIGNMENT_ENTRIES]: Define.
+ * pei-arm.c [TARGET_UNDERSCORE]: Define for ARM_WINCE like in
+ pe-arm.c.
+ [COFF_SECTION_ALIGNMENT_ENTRIES]: Define.
+
+2006-08-04 Marcelo Tosatti <marcelo@kvack.org>
+
+ * elflink.c (elf_gc_sweep): If info.print_gc_sections is true,
+ list removed sections to stderr.
+
+2006-08-04 Richard Sandiford <richard@codesourcery.com>
+ Kazu Hirata <kazu@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+
+ * config.bfd (sh-*-vxworks): Use bfd_elf32_shvxworks_vec and
+ bfd_elf32_shlvxworks_vec.
+ * configure.in (bfd_elf32_sh64_vec): Add elf-vxworks.lo.
+ (bfd_elf32_sh64l_vec, bfd_elf32_sh64lin_vec): Likewise.
+ (bfd_elf32_sh64blin_vec, bfd_elf32_sh64lnbsd_vec): Likewise.
+ (bfd_elf32_sh64nbsd_vec, bfd_elf32_sh_vec): Likewise.
+ (bfd_elf32_shblin_vec, bfd_elf32_shl_vec): Likewise.
+ (bfd_elf32_shl_symbian_vec, bfd_elf32_shlin_vec): Likewise.
+ (bfd_elf32_shlnbsd_vec, bfd_elf32_shnbsd_vec): Likewise.
+ (bfd_elf32_shlvxworks_vec, bfd_elf32_shvxworks_vec): New stanzas.
+ * configure: Regenerate.
+ * Makefile.am: Regenerate dependencies.
+ * Makefile.in: Regenerate.
+ * elf-vxworks.c (elf_vxworks_gott_symbol_p): New function.
+ (elf_vxworks_add_symbol_hook): Use it.
+ (elf_vxworks_link_output_symbol_hook): Likewise. Use the hash
+ table entry to check for weak undefined symbols and to obtain
+ the original bfd.
+ (elf_vxworks_emit_relocs): Use target_index instead of this_idx.
+ * elf32-sh-relocs.h: New file, split from elf32-sh.c.
+ (R_SH_DIR32): Use SH_PARTIAL32 for the partial_inplace field,
+ SH_SRC_MASK32 for the src_mask field, and SH_ELF_RELOC for the
+ special_function field.
+ (R_SH_REL32): Use SH_PARTIAL32 and SH_SRC_MASK32 here too.
+ (R_SH_REL32, R_SH_TLS_GD_32, R_SH_TLS_LD_32): Likewise.
+ (R_SH_TLS_LDO_32, R_SH_TLS_IE_32, R_SH_TLS_LE_32): Likewise.
+ (R_SH_TLS_DTPMOD32, R_SH_TLS_DTPOFF32, R_SH_TLS_TPOFF32): Likewise.
+ (R_SH_GOT32, R_SH_PLT32, R_SH_COPY, R_SH_GLOB_DAT): Likewise.
+ (R_SH_JMP_SLOT, R_SH_RELATIVE, R_SH_GOTOFF, R_SH_GOTPC): Likewise.
+ (SH_PARTIAL32, SH_SRC_MASK32, SH_ELF_RELOC): Undefine at end of file.
+ * elf32-sh.c: Include elf32-vxworks.h.
+ (MINUS_ONE): Define.
+ (sh_elf_howto_table): Include elf32-sh-relocs.h with SH_PARTIAL32
+ set to TRUE, SH_SRC_MASK32 set to 0xffffffff, and SH_ELF_RELOC set
+ to sh_elf_reloc.
+ (sh_vxworks_howto_table): New variable. Include elf32-sh-relocs.h
+ with SH_PARTIAL32 set to FALSE, SH_SRC_MASK32 set to 0, and
+ SH_ELF_RELOC set to bfd_elf_generic_reloc.
+ (vxworks_object_p, get_howto_table): New functions.
+ (sh_elf_reloc_type_lookup): Fix typo. Use get_howto_table.
+ (sh_elf_info_to_howto): Use get_howto_table.
+ (sh_elf_relax_section): Honor the partial_inplace field of the
+ R_SH_DIR32 howto.
+ (sh_elf_relax_delete_bytes): Likewise.
+ (elf_sh_plt_info): New structure.
+ (PLT_ENTRY_SIZE): Replace both definitions with...
+ (ELF_PLT_ENTRY_SIZE): ...this new macro, with separate definitions for
+ INCLUDE_SHMEDIA and !INCLUDE_SHMEDIA.
+ (elf_sh_plt0_entry_be): Update sizes of both definitions accordingly.
+ (elf_sh_plt0_entry_le): Likewise.
+ (elf_sh_plt_entry_be, elf_sh_plt_entry_le): Likewise.
+ (elf_sh_pic_plt_entry_be, elf_sh_pic_plt_entry_le): Likewise.
+ (elf_sh_plts): New structure, with separate definitions for
+ INCLUDE_SHMEDIA and !INCLUDE_SHMEDIA.
+ (elf_sh_plt0_entry): Delete both definitions.
+ (elf_sh_plt_entry, elf_sh_pic_plt_entry): Likewise.
+ (elf_sh_sizeof_plt, elf_sh_plt_plt0_offset): Likewise.
+ (elf_sh_plt_temp_offset, elf_sh_plt_symbol_offset): Likewise.
+ (elf_sh_plt_reloc_offset): Likewise.
+ (movi_shori_putval): Delete in favor of...
+ (install_plt_field): ...this new function, with separate definitions
+ for INCLUDE_SHMEDIA and !INCLUDE_SHMEDIA.
+ (get_plt_info): New function, with separate definitions
+ for INCLUDE_SHMEDIA and !INCLUDE_SHMEDIA.
+ (elf_sh_plt0_linker_offset, elf_sh_plt0_gotid_offset): Delete.
+ (VXWORKS_PLT_HEADER_SIZE, VXWORKS_PLT_ENTRY_SIZE): New macros.
+ (vxworks_sh_plt0_entry_be, vxworks_sh_plt0_entry_le): New constants.
+ (vxworks_sh_plt_entry_be, vxworks_sh_plt_entry_le): Likewise.
+ (vxworks_sh_pic_plt_entry_be, vxworks_sh_pic_plt_entry_le): Likewise.
+ (get_plt_index, get_plt_offset): New functions.
+ (elf_sh_link_hash_table): Add srelplt2, plt_info and vxworks_p fields.
+ (sh_elf_link_hash_table_create): Initialize them.
+ (sh_elf_create_dynamic_sections): Call
+ elf_vxworks_create_dynamic_sections for VxWorks.
+ (allocate_dynrelocs): Use htab->plt_info to get the size of PLT
+ entries. Allocate relocation entries in .rela.plt.unloaded if
+ generating a VxWorks executable.
+ (sh_elf_always_size_sections): New function.
+ (sh_elf_size_dynamic_sections): Extend .rela.plt handling to
+ .rela.plt.unloaded.
+ (sh_elf_relocate_section): Use get_howto_table. Honor
+ partial_inplace when calculating the addend for dynamic
+ relocations. Use get_plt_index.
+ (sh_elf_finish_dynamic_symbol): Use get_plt_index, install_plt_field
+ and htab->plt_info. Fill in the bra .plt offset for VxWorks
+ executables. Populate .rela.plt.unloaded. Do not make
+ _GLOBAL_OFFSET_TABLE_ absolute on VxWorks.
+ (sh_elf_finish_dynamic_sections): Use install_plt_field and
+ htab->plt_info. Handle cases where there is no special PLT header.
+ Populate the first relocation in .rela.plt.unloaded and fix up
+ the remaining entries.
+ (sh_elf_plt_sym_val): Use get_plt_info.
+ (elf_backend_always_size_sections): Define.
+ (TARGET_BIG_SYM, TARGET_BIG_NAME): Override for VxWorks.
+ (TARGET_LITTLE_SYM, TARGET_BIG_SYM): Likewise.
+ (elf32_bed, elf_backend_want_plt_sym): Likewise.
+ (elf_symbol_leading_char, elf_backend_want_got_underscore): Likewise.
+ (elf_backend_grok_prstatus, elf_backend_grok_psinfo): Likewise.
+ (elf_backend_add_symbol_hook): Likewise.
+ (elf_backend_link_output_symbol_hook): Likewise.
+ (elf_backend_emit_relocs): Likewise.
+ (elf_backend_final_write_processing): Likewise.
+ (ELF_MAXPAGESIZE, ELF_COMMONPAGESIZE): Likewise.
+ * targets.c (bfd_elf32_shlvxworks_vec): Declare.
+ (bfd_elf32_shvxworks_vec): Likewise.
+ (_bfd_target_vector): Include bfd_elf32_shlvxworks_vec and
+ bfd_elf32_shvxworks_vec.
+
+2006-08-02 Mark Kettenis <kettenis@gnu.org>
+
+ * configure.in (arm-*-openbsd*): Set COREFILE to netbsd-core.lo.
+ * configure: Regenerate.
+
+2006-08-02 Petr Salinger <Petr.Salinger@seznam.cz>
+
+ PR binutils/2983
+ * elf64-x86-64.c: Add FreeBSD support.
+ (elf64_x86_64_fbsd_post_process_headers): New function.
+ * targets.c (_bfd_target_vector): Add bfd_elf64_x86_64_freebsd_vec.
+ * config.bfd (x64_64-*-freebsd*): Add bfd_elf64_x86_64_freebsd_vec
+ to the targ_selvecs.
+ * configure.in: Add entry for bfd_elf64_x86_64_freebsd_vec.
+ * configure: Regenerate.
+
+2006-07-26 Andreas Schwab <schwab@suse.de>
+
+ * elfxx-ia64.c (elfNN_ia64_choose_gp): Use rawsize if set.
+
+2006-07-26 Alan Modra <amodra@bigpond.net.au>
+
+ * elf.c (elf_modify_segment_map): Delete empty PT_LOAD segments.
+ * elf32-xtensa.c (elf_xtensa_modify_segment_map): Delete.
+ (define elf_backend_modify_segment_map): Don't define.
+
+2006-07-25 Thiemo Seufer <ths@networkno.de>
+
+ * elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Allow
+ linking of objects for compatible machine types.
+
+2006-07-25 Thiemo Seufer <ths@networkno.de>
+
+ * elfxx-mips.c (mips_elf_next_relocation): Tighten check to test
+ also for same symbol.
+
+2006-07-25 Thiemo Seufer <ths@mips.com>
+
+ * elfxx-mips.c (mips_elf_calculate_relocation): Remove magic constant.
+
+2006-07-24 Michael Wetherell <mike.wetherell@ntlworld.com>
+
+ * elf.c (bfd_section_from_shdr): Reject unrecognised OS-specific
+ sections only if the SHF_OS_NONCONFORMING flag is present.
+
+2006-07-24 Nick Clifton <nickc@redhat.com>
+
+ PR ld/2729
+ * peXXigen.c (_bfd_XXi_final_link_postscript): Check for the
+ existance of output sections before putting their entries into the
+ DataDictionary.
+
+2006-07-20 Thiemo Seufer <ths@mips.com>
+
+ * elf32-mips.c (mips16_jump_reloc): Remove function.
+ (elf_mips16_howto_table_rel): Use _bfd_mips_elf_generic_reloc
+ instead of mips16_jump_reloc.
+ * elf64_mips.c, wlfn32-mips.c (mips16_jump_reloc): Remove function.
+ (elf_mips16_howto_table_rel, elf_mips16_howto_table_rela): Use
+ _bfd_mips_elf_generic_reloc instead of mips16_jump_reloc.
+
+2006-07-19 Alan Modra <amodra@bigpond.net.au>
+
+ * bfd-in.h (enum notice_asneeded_action): Define.
+ * bfd-in2.h: Regenerate.
+ * elflink.c (elf_link_add_object_symbols): Call linker "notice"
+ function with NULL name for as-needed handling.
+
+2006-07-18 Paul Brook <paul@codesourcery.com>
+
+ * bfd-in2.h: Regenerate.
+ * libbfd.h: Regenerate.
+ * reloc.c: Add BFD_RELOC_ARM_T32_ADD_IMM.
+
+2006-07-18 Nick Clifton <nickc@redhat.com>
+
+ * elfxx-mips.c (_bfd_mips_elf_common_definition): New function.
+ Consider SHN_MIPS_ACOMMON and SHN_MIPS_SCOMMON as being common
+ sections.
+ * elfxx-mips.h (_bfd_mips_elf_common_definition): Prototype.
+
+2006-07-14 Jakub Jelinek <jakub@redhat.com>
+
+ * elflink.c (bfd_elf_size_dynsym_hash_dynstr): Fix cinfo.shift2 value.
+
+2006-07-14 Mark Kettenis <kettenis@gnu.org>
+
+ * elflink.c (bfd_elf_size_dynsym_hash_dynstr): Move declarations
+ to the start of a block.
+
+2006-07-13 Nick Clifton <nickc@redhat.com>
+
+ * coff-sh.c (_bfd_sh_align_load_span): Catch sh_insn_info()
+ returning a NULL value.
+
+2006-07-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2884
+ * elflink.c (_bfd_elf_merge_symbol): Copy the symbol info from
+ the old versioned dynamic definition to the new one with
+ non-default visibility. Hide the symbol if it is hidden or
+ internal.
+
+2006-07-12 Matthew R. Dempsky <mrd@alkemio.org>
+
+ * cpu-m68k.c (bfd_m68k_compatible): Handle CPU32.
+
+2006-07-10 Jakub Jelinek <jakub@redhat.com>
+
+ * elf.c (_bfd_elf_print_private_bfd_data): Handle DT_GNU_HASH.
+ (bfd_section_from_shdr, elf_fake_sections, assign_section_numbers):
+ Handle SHT_GNU_HASH.
+ (special_sections_g): Include .gnu.hash section.
+ (bfd_elf_gnu_hash): New function.
+ * elf-bfd.h (bfd_elf_gnu_hash, _bfd_elf_hash_symbol): New prototypes.
+ (struct elf_backend_data): Add elf_hash_symbol method.
+ * elflink.c (_bfd_elf_link_create_dynamic_sections): Create .hash
+ only if info->emit_hash, create .gnu.hash section if
+ info->emit_gnu_hash.
+ (struct collect_gnu_hash_codes): New type.
+ (elf_collect_gnu_hash_codes, elf_renumber_gnu_hash_syms,
+ _bfd_elf_hash_symbol): New functions.
+ (compute_bucket_count): Don't compute HASHCODES array, instead add
+ that and NSYMS as arguments. Use bed->s->sizeof_hash_entry
+ instead of bed->s->arch_size / 8. Fix .hash size estimation.
+ When not optimizing, use the number of hashed symbols rather than
+ dynsymcount.
+ (bfd_elf_size_dynamic_sections): Only add DT_HASH if info->emit_hash,
+ and ADD DT_GNU_HASH if info->emit_gnu_hash.
+ (bfd_elf_size_dynsym_hash_dynstr): Size .hash only if info->emit_hash,
+ adjust compute_bucket_count caller. Create and populate .gnu.hash
+ section if info->emit_gnu_hash.
+ (elf_link_output_extsym): Only populate .hash section if
+ finfo->hash_sec != NULL.
+ (bfd_elf_final_link): Adjust assertion. Handle DT_GNU_HASH.
+ * elfxx-target.h (elf_backend_hash_symbol): Define if not yet defined.
+ (elfNN_bed): Add elf_backend_hash_symbol.
+ * elf64-x86-64.c (elf64_x86_64_hash_symbol): New function.
+ (elf_backend_hash_symbol): Define.
+ * elf32-i386.c (elf_i386_hash_symbol): New function.
+ (elf_backend_hash_symbol): Define.
+
+2006-07-05 Nick Clifton <nickc@redhat.com>
+
+ PR ld/2659
+ * cofflink.c (_bfd_coff_link_input_bfd): Fix selection of aux
+ entry when multiple definitions of a symbol are encountered.
+
+2006-06-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf32-i386.c (elf_i386_relocate_section): Use xchg %ax,%ax
+ instead of 2 nops.
+ * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
+ (elf64_x86_64_plt0_entry): Use nopl 0(%rax) instead of 4 nops.
+
+2006-06-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR ld/2513
+ * elf32-i386.c (GOT_TLS_MASK, GOT_TLS_IE_IE, GOT_TLS_IE_GD,
+ GOT_TLS_IE_MASK, elf_i386_check_relocs, allocate_dynrelocs): Revert
+ 2006-04-08 changes.
+ (elf_i386_relocate_section): Likewise. For GD->IE transition
+ change subl into addl whenever tls_type is GOT_TLS_IE_POS.
+
+2006-06-23 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/2754
+ * elf.c (bfd_elf_mkobject): Don't alloc if already done. Set
+ program_header_size to -1.
+ (_bfd_elf_map_sections_to_segments): Adjust program_header_size check.
+ (assign_file_positions_for_load_sections ): Likewise.
+ (_bfd_elf_sizeof_headers): Use saved program_header_size if
+ available.
+ * elf32-arm.c (elf32_arm_mkobject): Call bfd_elf_mkobject, don't
+ alloc if already done.
+ * elf32-i386.c (elf_i386_mkobject): Likewise.
+ * elf32-ppc.c (ppc_elf_mkobject): Likewise.
+ * elf32-s390.c (elf_s390_mkobject): Likewise.
+ * elf32-sh.c (sh_elf_mkobject): Likewise.
+ * elf64-alpha.c (elf64_alpha_mkobject): Likewise.
+ * elf64-ppc.c (ppc64_elf_mkobject): Likewise.
+ * elf64-s390.c (elf_s390_mkobject): Likewise.
+ * elf64-x86-64.c (elf64_x86_64_mkobject): Likewise.
+ * elfxx-sparc.c (_bfd_sparc_elf_mkobject): Likewise.
+
+2006-06-20 Jakub Jelinek <jakub@redhat.com>
+
+ * elflink.c (elf_link_add_object_symbols): Don't create .tcommon
+ section for relocatable link.
+
+2006-06-21 Alan Modra <amodra@bigpond.net.au>
+
+ * elf-bfd.h (struct elf_backend_data): Add
+ elf_backend_modify_program_headers.
+ * elfxx-target.h (elf_backend_modify_program_headers): Define.
+ (elfNN_bed): Init new field.
+ * elf.c (elf_modify_segment_map): Remove comment.
+ (assign_file_positions_for_load_sections): Only call
+ elf_modify_segment_map for objcopy/strip.
+ (assign_file_positions_except_relocs): Call
+ elf_backend_modify_program_headers.
+ * elf32-frv.c (elf32_frvfdpic_always_size_sections): Don't make
+ .stack section.
+ (elf32_frvfdpic_modify_segment_map): Delete.
+ (elf32_frvfdpic_modify_program_headers): New.
+ (elf_backend_modify_segment_map): Don't define.
+ (elf_backend_modify_program_headers): Define.
+ * elf32-bfin.c (elf32_bfinfdpic_always_size_sections): Don't make
+ .stack section.
+ (elf32_bfinfdpic_modify_segment_map): Delete.
+ (elf32_bfinfdpic_modify_program_headers): New.
+ (elf_backend_modify_segment_map): Don't define.
+ (elf_backend_modify_program_headers): Define.
+ * elfxx-ia64.c (elfNN_ia64_modify_program_headers): New function.
+ Split out from..
+ (elfNN_ia64_modify_segment_map): ..here.
+ (elf_backend_modify_program_headers): Define.
+
+2006-06-20 Jakub Jelinek <jakub@redhat.com>
+
+ * bfd.c (bfd_record_phdr): Clear p_align and p_align_valid fields.
+ * elf.c (_bfd_elf_link_hash_table_init): Clear hplt field.
+
+2006-06-20 Alan Modra <amodra@bigpond.net.au>
+
+ * elf-bfd.h: Formatting.
+ (_bfd_elf_map_sections_to_segments): Declare.
+ * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame_hdr): Don't
+ clear program_header_size.
+ * elf.c (get_program_header_size): Move. Don't use or set saved
+ program_header_size here.
+ (elf_modify_segment_map): New function. Split out from..
+ (assign_file_positions_for_load_sections): ..here. Assert
+ header size is correct. Remove dead code.
+ (_bfd_elf_map_sections_to_segments): Rename from
+ map_sections_to_segments. Make global. Use get_program_header_size
+ when we need estimate of header size. Call elf_modify_segment_map.
+ Set program_header_size.
+ (print_segment_map): Delete.
+ (_bfd_elf_sizeof_headers): If segment_map available, get the
+ actual size.
+ * elf32-arm.c (elf32_arm_symbian_modify_segment_map): Make safe
+ for calling more than once.
+ * elf32-bfin.c (elf32_bfinfdpic_modify_segment_map): Likewise.
+ * elf32-frv.c (elf32_frvfdpic_modify_segment_map): Likewise.
+ * elfxx-mips.c (_bfd_mips_elf_modify_segment_map): Likewise.
+ * elf32-i370.c (elf_backend_add_symbol_hook): Delete.
+ (elf_backend_additional_program_headers): Delete.
+ (elf_backend_modify_segment_map): Delete.
+ * elf64-hppa.c (elf64_hppa_modify_segment_map): Convert to ISO C.
+ * elfxx-ia64.c (elfNN_ia64_modify_segment_map): Likewise.
+ * doc/bfdint.texi: Delete SIZEOF_HEADERS difficulties.
+
+2006-06-19 Vladimir Prus <vladimir@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_swap_symbol_out): Don't set low
+ bit for undefined symbols.
+
+2006-06-19 Alan Modra <amodra@bigpond.net.au>
+
+ * elf-bfd.h (struct elf_backend_data): Add bfd_link_info pointer
+ parameter.
+ (_bfd_elf_sizeof_headers): Replace bfd_boolean param with
+ bfd_link_info pointer.
+ * targets.c (struct bfd_target <_bfd_sizeof_headers>): Likewise.
+ * bfd.c (bfd_sizeof_headers): Tweak param name.
+ * aout-adobe.c (aout_adobe_sizeof_headers): Adjust.
+ * aoutx.h (NAME (aout, sizeof_headers)): Adjust.
+ * binary.c (binary_sizeof_headers): Adjust.
+ * bout.c (b_out_sizeof_headers): Adjust.
+ * coff-rs6000.c (_bfd_xcoff_sizeof_headers): Adjust.
+ * coff64-rs6000.c (xcoff64_sizeof_headers): Adjust.
+ * coffgen.c (coff_sizeof_headers): Adjust.
+ * ecoff.c (_bfd_ecoff_sizeof_headers): Adjust.
+ (ecoff_compute_section_file_positions): Adjust.
+ (_bfd_ecoff_write_object_contents): Adjust.
+ * elf.c (get_program_header_size, _bfd_elf_sizeof_headers): Adjust.
+ * elf32-arm.c (elf32_arm_additional_program_headers): Adjust.
+ * elf32-i370.c (elf_backend_additional_program_headers): Adjust.
+ * elf32-ppc.c (ppc_elf_additional_program_headers): Adjust.
+ * elf64-hppa.c (elf64_hppa_additional_program_headers): Adjust.
+ * elf64-x86-64.c (elf64_x86_64_additional_program_headers): Adjust.
+ * elfxx-ia64.c (elfNN_ia64_additional_program_headers): Adjust.
+ * elfxx-mips.c (_bfd_mips_elf_additional_program_headers): Adjust.
+ * elfxx-mips.h (_bfd_mips_elf_additional_program_headers): Adjust.
+ * i386msdos.c: Convert to ISO C.
+ (msdos_sizeof_headers): Adjust.
+ * i386os9k.c: Convert to ISO C.
+ (os9k_sizeof_headers): Adjust.
+ * ieee.c (ieee_sizeof_headers): Adjust.
+ * ihex.c (ihex_sizeof_headers): Adjust.
+ * libaout.h (NAME (aout, sizeof_headers)): Adjust.
+ * libbfd-in.h (_bfd_nolink_sizeof_headers): Adjust.
+ * libcoff-in.h (coff_sizeof_headers): Adjust.
+ * libecoff.h (_bfd_ecoff_sizeof_headers): Adjust.
+ * mach-o.c (bfd_mach_o_sizeof_headers): Adjust.
+ * mmo.c (mmo_sizeof_headers): Adjust.
+ * oasys.c (oasys_sizeof_headers): Adjust.
+ * pdp11.c (NAME (aout, sizeof_headers)): Adjust.
+ * pef.c (bfd_pef_sizeof_headers): Adjust.
+ * ppcboot.c (ppcboot_sizeof_headers): Adjust.
+ * som.c (som_sizeof_headers): Adjust.
+ * srec.c (srec_sizeof_headers): Adjust.
+ * tekhex.c (tekhex_sizeof_headers): Adjust.
+ * versados.c (versados_sizeof_headers): Adjust.
+ * vms.c (vms_sizeof_headers): Adjust.
+ * xcoff-target.h (_bfd_xcoff_sizeof_headers): Adjust.
+ * xsym.c (bfd_sym_sizeof_headers): Adjust.
+ * xsym.h (bfd_sym_sizeof_headers): Adjust.
+ * bfd-in2.h: Regenerate.
+ * libbfd.h: Regenerate.
+ * libcoff.h: Regenerate.
+
+2006-06-15 Mark Shinwell <shinwell@codesourcery.com>
+
+ * bfd-in2.h: Regenerate.
+ * elf32-arm.c (R_ARM_ALU_PC_G0_NC, R_ARM_ALU_PC_G0,
+ R_ARM_ALU_PC_G1_NC, R_ARM_ALU_PC_G1, R_ARM_ALU_PC_G2,
+ R_ARM_LDR_PC_G1, R_ARM_LDR_PC_G2, R_ARM_LDRS_PC_G0,
+ R_ARM_LDRS_PC_G1, R_ARM_LDRS_PC_G2, R_ARM_LDC_PC_G0,
+ R_ARM_LDC_PC_G1, R_ARM_LDC_PC_G2, R_ARM_ALU_SB_G0_NC,
+ R_ARM_ALU_SB_G0, R_ARM_ALU_SB_G1_NC, R_ARM_ALU_SB_G1,
+ R_ARM_ALU_SB_G2, R_ARM_LDR_SB_G0, R_ARM_LDR_SB_G1,
+ R_ARM_LDR_SB_G2, R_ARM_LDRS_SB_G0, R_ARM_LDRS_SB_G1,
+ R_ARM_LDRS_SB_G2, R_ARM_LDC_SB_G0, R_ARM_LDC_SB_G1,
+ R_ARM_LDC_SB_G2): New relocation types.
+ (R_ARM_PC13): Rename to AAELF name R_ARM_LDR_PC_G0 and
+ adjust HOWTO entry to be consistent with R_ARM_LDR_PC_G1
+ and friends.
+ (elf32_arm_howto_table_3): Delete; contents merged into
+ elf32_arm_howto_table_2.
+ (elf32_arm_howto_from_type): Adjust correspondingly.
+ (elf32_arm_reloc_map): Extend with the above relocations.
+ (calculate_group_reloc_mask): New function.
+ (identify_add_or_sub): New function.
+ (elf32_arm_final_link_relocate): Support for the above
+ relocations.
+ * reloc.c: Add enumeration entries for BFD_RELOC_ARM_...
+ codes to correspond to the above relocations.
+
+2006-06-14 Richard Sandiford <richard@codesourcery.com>
+
+ * elf32-m68k.c (elf_m68k_plt_info): New structure.
+ (elf_m68k_plt0_entry): Add R_68K_PC32-style in-place addends.
+ (elf_m68k_plt_entry): Likewise.
+ (elf_m68k_plt_info): New table.
+ (CFV4E_PLT_ENTRY_SIZE): Rename to...
+ (ISAB_PLT_ENTRY_SIZE): ...this.
+ (CFV4E_FLAG): Delete.
+ (elf_cfv4e_plt0_entry): Rename to...
+ (elf_isab_plt0_entry): ...this. Adjust comments. Use (-6,%pc,%d0)
+ for the second instruction too.
+ (elf_cfv4e_plt_entry): Rename to...
+ (elf_isab_plt_entry): ...this. Adjust comments and use (-6,%pc,%d0).
+ (elf_isab_plt_info): New table.
+ (CPU32_FLAG): Delete.
+ (PLT_CPU32_ENTRY_SIZE): Rename to...
+ (CPU32_PLT_ENTRY_SIZE): ...this.
+ (elf_cpu32_plt0_entry): Update bounds accordingly. Add R_68K_PC32-
+ style in-place addends.
+ (elf_cpu32_plt_entry): Likewise.
+ (elf_cpu32_plt_info): New table.
+ (elf_m68k_link_hash_table): Add a plt_info field.
+ (elf_m68k_link_hash_table_create): Initialize it.
+ (elf_m68k_get_plt_info): New function.
+ (elf_m68k_always_size_sections): Likewise.
+ (elf_m68k_adjust_dynamic_symbol): Use the plt_info hash table field.
+ (elf_m68k_install_pc32): New function.
+ (elf_m68k_finish_dynamic_symbol): Factor code using plt_info and
+ elf_m68k_install_pc32.
+ (elf_m68k_finish_dynamic_sections): Likewise.
+ (elf_m68k_plt_sym_val): Use elf_m68k_get_plt_info.
+ (elf_backend_always_size_sections): Define.
+
+2006-06-14 Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c (elf_link_add_object_symbols): Save and restore
+ struct bfd_hash_table table, size and count fields for
+ as-needed libs.
+
+2006-06-12 Thiemo Seufer <ths@mips.com>
+
+ * elf32-mips.c: Expand comment about ABI-mandated pagesize values.
+ (ELF_MAXPAGESIZE, ELF_COMMONPAGESIZE): define in a more obvious way.
+ * elf64-mips.c, elfn32-mips.c (ELF_MAXPAGESIZE): Fix value for IRIX6.
+ Delete old comments.
+ (ELF_COMMONPAGESIZE): Define in a more obvious way.
+
+2006-06-12 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/2735
+ * elflink.c (elf_link_add_object_symbols): Fix the warning message
+ about mismatched alignments to allow for the case where the common
+ alignment has been deduced from the section alignment.
+ * bfd.c (_bfd_default_error_handler): Update comment to explain
+ why bfd and asection varargs are out of order. Explicitly catch
+ and abort on NULL bfd and asection arguments.
+
+2006-06-11 Richard Sandiford <richard@codesourcery.com>
+ Thiemo Seufer <ths@mips.com>
+
+ * elfxx-mips.c (mips_elf_link_hash_table): Add function_stub_size.
+ (STUB_ORI): New macro.
+ (STUB_LI16U): Fix formatting.
+ (MIPS_FUNCTION_STUB_SIZE): Delete.
+ (MIPS_FUNCTION_STUB_MAX_SIZE): Likewise.
+ (MIPS_FUNCTION_STUB_NORMAL_SIZE): New macro.
+ (MIPS_FUNCTION_STUB_BIG_SIZE): Likewise.
+ (_bfd_mips_elf_adjust_dynamic_symbol): Use htab->function_stub_size
+ instead of MIPS_FUNCTION_STUB_SIZE.
+ (count_section_dynsyms): New function, split out from
+ _bfd_mips_elf_final_link.
+ (_bfd_mips_elf_always_size_sections): Get a worst-case estimate
+ of the number of dynamic symbols needed and use it to set up
+ function_stub_size. Use function_stub_size rather than
+ MIPS_FUNCTION_STUB_SIZE to determine the size of the stub section.
+ Use 16-byte stubs for 0x10000 dynamic symbols.
+ (_bfd_mips_elf_size_dynamic_sections): Use htab->function_stub_size
+ instead of MIPS_FUNCTION_STUB_SIZE. Fix formatting.
+ (_bfd_mips_elf_finish_dynamic_symbol): Likewise. Change the
+ size of the stub buffer from MIPS_FUNCTION_STUB_MAX_SIZE to
+ MIPS_FUNCTION_STUB_BIG_SIZE. Tweak the check for unhandled dynindxes.
+ Use MIPS_FUNCTION_STUB_BIG_SIZE rather than a hard-coded 20.
+ Use STUB_ORI rather than STUB_LI16U for big stubs.
+ (_bfd_mips_elf_link_hash_table_create): Initialize function_stub_size.
+ (_bfd_mips_elf_final_link): Use count_section_dynsyms.
+
+2006-06-09 David Ung <davidu@mips.com>
+
+ * bfd/elfxx-mips.c (mips_elf_calculate_relocation): Fix mode for stub
+ calling relocations.
+
+2006-06-08 David Daney <ddaney@avtrex.com>
+
+ * elfxx-mips.c (STUB_LI16): Removed.
+ (STUB_LUI): New macro.
+ (STUB_LI16U): Ditto.
+ (STUB_LI16S): Ditto.
+ (MIPS_FUNCTION_STUB_SIZE): Rewrote to take info parameter.
+ (_bfd_mips_elf_adjust_dynamic_symbol): Pass info parameter to
+ MIPS_FUNCTION_STUB_SIZE.
+ (_bfd_mips_elf_always_size_sections): Ditto.
+ (_bfd_mips_elf_size_dynamic_sections): Ditto.
+ (_bfd_mips_elf_finish_dynamic_sections): Ditto.
+ (_bfd_mips_elf_finish_dynamic_symbol): Rewrote stub generation
+ to allow larger symbol table indexes.
+
+2006-06-07 Joseph S. Myers <joseph@codesourcery.com>
+
+ * po/Make-in (pdf, ps): New dummy targets.
+
+2006-06-06 Alan Modra <amodra@bigpond.net.au>
+
+ * hash.c (bfd_hash_lookup): Correct stray line.
+
+ * elf.c (_bfd_elf_init_private_section_data): Comment typo.
+ (elfcore_grok_nto_status): Use long instead of pid_t.
+ (elfcore_grok_nto_regs, elfcore_grok_nto_note): Likewise.
+
+2006-06-05 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/Make-in (top_builddir): Define.
+
+2006-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * config.in: Regenerate.
+
+2006-06-02 Alan Modra <amodra@bigpond.net.au>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2723
+ * elflink.c (bfd_elf_final_link): Don't output section symbols
+ for special ELF sections.
+
+2006-06-01 Alan Modra <amodra@bigpond.net.au>
+
+ * stabs.c (_bfd_link_section_stabs): Use bfd_make_section*_with_flags
+ instead of bfd_make_section*.
+ * aix386-core.c: Likewise.
+ * aix5ppc-core.c: Likewise.
+ * aout-adobe.c: Likewise.
+ * aoutf1.h: Likewise.
+ * binary.c: Likewise.
+ * cisco-core.c: Likewise.
+ * coff-arm.c: Likewise.
+ * coff-h8300.c: Likewise.
+ * elf.c: Likewise.
+ * elf32-bfin.c: Likewise.
+ * elf32-m32c.c: Likewise.
+ * hppabsd-core.c: Likewise.
+ * hpux-core.c: Likewise.
+ * i386linux.c: Likewise.
+ * ieee.c: Likewise.
+ * ihex.c: Likewise.
+ * irix-core.c: Likewise.
+ * lynx-core.c: Likewise.
+ * m68klinux.c: Likewise.
+ * mach-o.c: Likewise.
+ * netbsd-core.c: Likewise.
+ * nlmcode.h: Likewise.
+ * opncls.c: Likewise.
+ * osf-core.c: Likewise.
+ * peXXigen.c: Likewise.
+ * ppcboot.c: Likewise.
+ * ptrace-core.c: Likewise.
+ * rs6000-core.c: Likewise.
+ * sco5-core.c: Likewise.
+ * sparclinux.c: Likewise.
+ * srec.c: Likewise.
+ * sunos.c: Likewise.
+ * trad-core.c: Likewise.
+ * xcofflink.c: Likewise.
+ * xsym.c: Likewise.
+
+2006-05-31 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (INCLUDES): Use @INCINTL@.
+ * acinclude.m4: Include new gettext macros.
+ * configure.in: Use ZW_GNU_GETTEXT_SISTER_DIR and AM_PO_SUBDIRS.
+ Manually substitute POFILES and GMOFILES.
+ * Makefile.in, aclocal.m4, configure, doc/Makefile.in: Regenerated.
+
+2006-05-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * bfd.c (bfd_emul_get_maxpagesize): New.
+ (bfd_elf_set_pagesize): Likewise.
+ (bfd_emul_set_maxpagesize): Likewise.
+ (bfd_emul_get_commonpagesize): Likewise.
+ (bfd_emul_set_commonpagesize): Likewise.
+ * bfd-in2.h: Regenerated.
+
+ * elf-bfd.h (elf_backend_data): Add commonpagesize.
+ (xvec_get_elf_backend_data): New.
+ (get_elf_backend_data): Use xvec_get_elf_backend_data.
+
+ * elf32-arm.c (elf32_arm_vxworks_bed): Remove const.
+ * elfxx-target.h (elfNN_bed): Likewise.
+
+ * elf32-arm.c (ELF_COMMONPAGESIZE): Defined.
+ * elf32-mips.c (ELF_COMMONPAGESIZE): Likewise.
+ * elf32-ppc.c (ELF_COMMONPAGESIZE): Likewise.
+ * elf32-sh.c (ELF_COMMONPAGESIZE): Likewise.
+ * elf32-sh64.c (ELF_COMMONPAGESIZE): Likewise.
+ * elf32-sparc.c (ELF_COMMONPAGESIZE): Likewise.
+ * elf64-alpha.c (ELF_COMMONPAGESIZE): Likewise.
+ * elf64-ppc.c (ELF_COMMONPAGESIZE): Likewise.
+ * elf64-sparc.c (ELF_COMMONPAGESIZE): Likewise.
+ * elf64-x86-64.c (ELF_COMMONPAGESIZE): Likewise.
+ * elfn32-mips.c (ELF_COMMONPAGESIZE): Likewise.
+ * elfxx-ia64.c (ELF_COMMONPAGESIZE): Likewise.
+
+ * elfxx-target.h (ELF_COMMONPAGESIZE): Define if not defined.
+ (elfNN_bed): Initialize commonpagesize with ELF_COMMONPAGESIZE.
+
+ * targets.c (bfd_find_target): Support NULL abfd.
+
+2006-05-30 Nick Clifton <nickc@redhat.com>
+
+ * po/es.po: Updated Spanish translation.
+
+2006-05-27 Alan Modra <amodra@bigpond.net.au>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf.c (assign_file_positions_for_load_sections): Retrieve
+ maxpagesize from m->p_align if it is valid. Set p_vaddr,
+ p_paddr and p_align earlier. Revert 2006-05-19 change to p_align.
+ (copy_elf_program_header): Copy p_align. Set p_align_valid.
+
+2006-05-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf64-x86-64.c (ELF_MINPAGESIZE): Changed to 0x1000.
+
+2006-05-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf64-x86-64.c (ELF_MINPAGESIZE): Set to 0x100000.
+
+2006-05-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf64-x86-64.c (ELF_MAXPAGESIZE): Updated to 0x200000.
+
+2006-05-26 Alan Modra <amodra@bigpond.net.au>
+
+ * elf.c (sym_is_global): Return a bfd_boolean.
+ (ignore_section_sym): New function.
+ (elf_map_symbols): Use ignore_section_sym to discard some syms.
+ (_bfd_elf_symbol_from_bfd_symbol): Ensure section belongs to
+ bfd before using elf_section_syms.
+
+2006-05-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config.bfd: (sh-*-linux*): Treat as 64bit target.
+ (sh*l*-*-netbsdelf*): Likewise.
+ (sh-*-netbsdelf*): Likewise.
+ (shl*-*-elf*): Likewise.
+ (sh[1234]l*-*-elf*): Likewise.
+ (sh3el*-*-elf*): Likewise.
+ (shl*-*-kaos*): Likewise.
+ (sh-*-elf*): Likewise.
+ (sh[1234]*-elf*): Likewise.
+ (sh-*-rtems*): Likewise.
+ (sh-*-kaos*): Likewise.
+
+2006-05-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1485
+ * config.bfd: Set want64 to true if 64bit bfd is used.
+ (sh-*-linux*): Use targ64_selvecs for 64bit targets.
+ (sh*l*-*-netbsdelf*): Likewise.
+ (sh-*-netbsdelf*): Likewise.
+ (shl*-*-elf*): Likewise.
+ (sh[1234]l*-*-elf*): Likewise.
+ (sh3el*-*-elf*): Likewise.
+ (shl*-*-kaos*): Likewise.
+ (sh-*-elf*): Likewise.
+ (sh[1234]*-elf*): Likewise.
+ (sh-*-rtems*): Likewise.
+ (sh-*-kaos*): Likewise.
+
+2006-05-24 Paul Brook <paul@codesourcery.com>
+
+ * elf-bfd.h (elf_backend_data): Add elf_backend_output_arch_local_syms
+ * elf32-arm.c (output_arch_syminfo): Define.
+ (elf32_arm_ouput_plt_map_sym, elf32_arm_output_plt_map,
+ elf32_arm_output_arch_local_syms): New functions.
+ (elf_backend_output_arch_local_syms): Define.
+ * elflink.c (bfd_elf_final_link): Call
+ elf_backend_output_arch_local_syms.
+ * elfxx-target.h (elf_backend_output_arch_local_syms): Provide default
+ definition.
+ (elfNN_bed): Add elf_backend_output_arch_local_syms.
+
+2006-05-24 Paul Brook <paul@codesourcery.com>
+
+ * elf32-arm.c (put_arm_insn, put_thumb_insn): New functions.
+ (elf32_thumb_to_arm_stub, elf32_arm_to_thumb_stub,
+ elf32_arm_finish_dynamic_symbol): Use them.
+
+2006-05-24 Carlos O'Donell <carlos@systemhalted.org>
+ Randolph Chung <tausq@debian.org>
+
+ * elf-hppa.h (reloc_hppa_howto_table): Check bitfield for
+ TPREL21L/TPREL14R relocations. Handle LTOFF_TP14R relocations.
+ Add handling for TLS relocations.
+ (elf_hpp_reloc_final_type): Handle TLS relocs.
+ * elf32-hppa.c: Add authors for cleanup and TLS support.
+ (hppa_elf_local_got_tls_type, hh_name, eh_name): Define.
+ (elf32_hppa_link_hash_entry): Add tls_type.
+ (elf32_hppa_link_hash_table): Add tld_ldm_got.
+ (hppa_link_has_newfunc): Set tls_type.
+ (elf32_hppa_link_hash_table_create): Set tls_ldm_got refcount.
+ (hppa_stub_name): Use hh_name macro.
+ (elf32_hppa_copy_indirect_symbol): Copy TLS information.
+ (elf32_hppa_check_relocs): Call elf32_hppa_optimized_tls_reloc.
+ Handle TLS relocs.
+ (elf32_hppa_gc_sweep_hook): Likewise.
+ (allocate_dynrelocs): Handle TLS relocs.
+ (elf32_hppa_size_dynamic_sections): Count space required by TLS
+ relocs. Use hh_name macro.
+ (dtpoff_base): New function.
+ (tpoff): Likewise.
+ (elf32_hppa_optimized_tls_reloc): Likewise.
+ (final_link_relocate): Handle TLS relocs.
+ (elf32_hppa_relocate_section): Handle TLS relocs. Use eh_name
+ and hh_name macros.
+ (elf32_hppa_finish_dynamic_symbol): Setup TLS got entries. Use
+ hh_name and eh_name macros.
+ (elf32_hppa_reloc_type_clas): Handle TLS relocs.
+
+2006-05-24 Bjoern Haase <bjoern.m.haase@web.de>
+
+ * archures.c: Add bfd_mach_avr6.
+ * cpu-avr.c: Likewise.
+ * reloc.c (BFD_RELOC_AVR_LO8_LDI_GS, BFD_RELOC_AVR_HI8_LDI_GS):
+ New relocations.
+ * libbfd.h: Regenerate.
+ * bfd-in2.h:Regenerate.
+ * elf32-avr.h: New file. Protoypes for functions accessed from ld.
+ * elf32-avr.c: Add elf32-avr.h to include list.
+ (elf32_avr_stub_hash_entry): New function.
+ (elf32_avr_link_hash_table): New struct.
+ (avr_link_hash_table): Likewise.
+ (avr_stub_hash_entry): Likewise.
+ (avr_stub_hash_lookup): New function.
+ (stub_hash_newfunc): New function.
+ (elf32_avr_link_hash_table_create): New function.
+ (elf32_avr_link_hash_table_free): New function.
+ (avr_get_stub_addr): New function.
+ (debug_relax, debug_stubs): Add new global variables controlling
+ debugging printout to stdout.
+ (avr_pc_wrap_around): Change the type to bfd_vma.
+ (avr_replace_call_ret_sequences): Add a new variable controling
+ linkrelax optimizations.
+ (avr_stub_is_required_for_16_bit_reloc): New function.
+ (avr_final_link_relocate):
+ Add linker hash table to parameter list. Use stub addr. if necessary.
+ (elf32_avr_relocate_section):
+ Add linker hashtable to parameter list of avr_final_link_relocate.
+ (bfd_elf_avr_final_write_processing): Add support for bfd_mach_avr6.
+ (elf32_avr_object_p): Add support for E_AVR_MACH_AVR6.
+ (elf32_avr_relax_delete_bytes):
+ Iterate over all sections of a bfd when adjusting relocs addends.
+ (elf32_avr_relax_section):
+ Evaluate avr_replace_call_ret_sequences and recalculate the size of
+ stub section.
+ (avr_stub_name): New function.
+ (avr_get_stub_entry): New function.
+ (avr_add_stub): New function.
+ (avr_build_one_stub): New function.
+ (avr_size_one_stub): New function.
+ (elf32_avr_setup_params): New function.
+ (elf32_avr_setup_section_lists): New function.
+ (get_local_syms): New function.
+ (elf32_avr_size_stubs): New function.
+ (bfd_elf32_bfd_link_hash_table_create): New function.
+ (bfd_elf32_bfd_link_hash_table_free): New function.
+
+2006-05-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2655
+ PR ld/2657
+ * elf-eh-frame.c (_bfd_elf_write_section_eh_frame): Properly
+ update CIE/FDE length. Don't pad to the section alignment.
+
+2006-05-23 Jie Zhang <jie.zhang@analog.com>
+
+ * elf32-bfin.c (bfinfdpic_relocate_section): Clear reloc for
+ deteted entries in .eh_frame section.
+
+2006-05-23 Jie Zhang <jie.zhang@analog.com>
+
+ * elf32-bfin.c (bfin_check_relocs): Use __GLOBAL_OFFSET_TABLE_
+ instead of _GLOBAL_OFFSET_TABLE_.
+ (bfin_relocate_section): Ditto.
+ (_bfin_create_got_section): Ditto.
+ (elf32_bfinfdpic_create_dynamic_sections): Use
+ __PROCEDURE_LINKAGE_TABLE_ instead of _PROCEDURE_LINKAGE_TABLE_.
+ (bfin_finish_dynamic_symbol): Use __DYNAMIC instead of _DYNAMIC.
+
+2006-05-23 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (compare_symbols): Prefer strong dynamic global
+ function syms over other syms.
+
+2006-05-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * elflink.c (_bfd_elf_add_dynamic_entry): Remove DT_TEXTREL
+ check.
+ (bfd_elf_final_link): Add a late DT_TEXTREL check.
+ * elfxx-mips.c (MIPS_ELF_READONLY_SECTION): Define.
+ (mips_elf_create_dynamic_relocation): Set DF_TEXTREL.
+ (_bfd_mips_elf_check_relocs): Delete MIPS_READONLY_SECTION.
+ Use MIPS_ELF_READONLY_SECTION.
+ (_bfd_mips_elf_size_dynamic_sections): Clear DF_TEXTREL after
+ creating DT_TEXTREL.
+ (_bfd_mips_elf_finish_dynamic_sections): Clear textrel markers
+ if no text relocations were generated.
+
+2006-05-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elfxx-ia64.c (ELF_MAXPAGESIZE): Fix a typo in comment.
+
+2006-05-19 Alan Modra <amodra@bigpond.net.au>
+
+ * elf.c (elf_fake_sections): Formatting.
+ (assign_file_positions_for_load_sections): Only add SEC_ALLOC
+ sections to p_memsz. Remove hack for PT_NOTE sections. Allow
+ section alignment to increase p_align for PT_LOAD.
+ (assign_file_positions_for_non_load_sections): Remove ARM BPABI
+ hack for PT_DYNAMIC. Instead, set p_filesz for all segments
+ other than PT_LOAD, and PT_NOTE in core.
+
+2006-05-17 Alan Modra <amodra@bigpond.net.au>
+
+ * elf.c (assign_file_positions_for_segments): Split into..
+ (assign_file_positions_for_load_sections): ..this, and..
+ (assign_file_positions_for_non_load_sections): ..this new function,..
+ (assign_file_positions_except_relocs): ..writing program headers here.
+
+2006-05-17 Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c (elf_gc_sweep): Don't specially keep non-alloc,
+ non-load sections if they have relocs.
+
+2006-05-15 Paul Brook <paul@codesourcery.com>
+
+ * cpu-arm.c (bfd_is_arm_mapping_symbol_name): Rename ...
+ (bfd_is_arm_special_symbol_name): ... to this. Add type argument.
+ Check symbol name is of specified type.
+ * elf32-arm.c (elf32_arm_is_target_special_symbol,
+ arm_elf_find_function, elf32_arm_output_symbol_hook): Use
+ bfd_is_arm_special_symbol_name.
+ * bfd-in.h (BFD_ARM_SPECIAL_SYM_TYPE_MAP,
+ BFD_ARM_SPECIAL_SYM_TYPE_TAG, BFD_ARM_SPECIAL_SYM_TYPE_OTHER,
+ BFD_ARM_SPECIAL_SYM_TYPE_ANY): Define.
+ (bfd_is_arm_mapping_symbol_name): Remove prototype.
+ (bfd_is_arm_special_symbol_name): Add prototype.
+ * bfd-in2.h: Regenerate.
+
+2006-05-15 David Heine <dlheine@tensilica.com>
+ Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (check_loop_aligned): Fix reversed check for
+ undefined opcode. Clean up assertions.
+ (narrow_instruction, widen_instruction): Remove "do_it" parameters.
+ Factor most of the code into separate functions....
+ (can_narrow_instruction, can_widen_instruction): New.
+ (prev_instr_is_a_loop): New.
+ (compute_ebb_proposed_actions): Combine error handling code for
+ decode errors. Replace call to insn_decode_len with inline code.
+ Use can_narrow_instruction and can_widen_instruction. Handle errors
+ from call to xtensa_opcode_is_loop.
+ (relax_section): Adjust calls to narrow_instruction and
+ widen_instruction.
+
+2006-05-15 Alan Modra <amodra@bigpond.net.au>
+
+ PR 2658
+ * elf32-ppc.c (ppc_elf_relax_section): Don't segfault on non-pic
+ -shared link.
+
+2006-05-11 Michael Matz <matz@suse.de>
+
+ * elflink.c (match_group_member): Correctly iterate group
+ members.
+
+2006-05-11 Paul Brook <paul@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_reloc_map): Add MOVW and MOVT relocs.
+ (elf32_arm_final_link_relocate): Handle MOVW and MOVT relocs.
+ (elf32_arm_gc_sweep_hook, elf32_arm_check_relocs): Ditto.
+ * reloc.c: Ditto.
+ * bfd-in2.h: Regenerate.
+ * libbfd.h: Regenerate.
+ * libcoff.h: Regenerate.
+
+2006-05-11 Mike Bland <mbland@google.com>
+
+ * elf.c (_bfd_elf_init_private_section_data): Don't change
+ section type if already set.
+
+2006-05-10 Nick Clifton <nickc@redhat.com>
+
+ PR ld/2607
+ * elfcode.h (valid_section_index_p): New function: Checks for a
+ valid section index. Allows indicies in the range SHN_LOPROC to
+ SHN_HIOS.
+ (elf_object_p): Use valid_section_index_p.
+
+2006-05-11 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * coff-arm.c (ARM_26D, ARM_32, ARM_RVA_32, ARM_SECTION,
+ ARM_SECREL): Mark WinCE versions of these relocs as partial
+ inplace.
+ (coff_arm_relocate_section): Adjust addend for WinCE.
+
+2006-05-10 Alan Modra <amodra@bigpond.net.au>
+
+ PR 2342
+ * elflink.c (_bfd_elf_default_action_discarded): Revert 2006-02-16.
+
+2006-05-09 Nick Clifton <nickc@redhat.com>
+
+ * coffcode.h (coff_write_relocs): Produce an error message if a an
+ out-of-range symbol index is detected in a reloc.
+
+2006-05-09 Ben Elliston <bje@au.ibm.com>
+
+ * elf64-ppc.c (ppc64_elf_finish_dynamic_symbol): Remove unused
+ local variable `dynobj'.
+
+2006-05-05 Bjoern Haase <bjoern.m.haase@web.de>
+
+ * elf32-avr.c (elf32_avr_relax_delete_bytes): Iterate over all
+ of the bfd's sections for the reloc-addend adjustments.
+
+2006-05-05 Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ * elf32-s390.c (invalid_tls_insn): Call bfd_set_error.
+ (elf_s390_relocate_section): Add code to do the GD->LE and
+ LD->LE TLS linker optimizations if a brasl instruction is used
+ for the __tls_get_offset function call.
+ * elf64-s390.c (invalid_tls_insn): Call bfd_set_error.
+
+2006-05-05 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (ppc64_elf_tls_optimize): Only optimize
+ R_PPC64_TPREL64 and R_PPC64_DTPMOD64 relocs when they are in
+ the .toc and referenced by a TLS code sequence.
+ (ppc64_elf_edit_toc): Cater for the unlikely situation that
+ .toc is the first section in a file.
+
+2006-05-04 Andreas Schwab <schwab@suse.de>
+
+ * aoutf1.h (struct external_sparc_core): Declare c_regs as struct
+ regs instead of an array of int.
+ (struct external_solaris_bcp_core): Likewise.
+ (swapcore_sun3): Use offsetof instead of computing the offset
+ manually.
+ (swapcore_sparc): Likewise. Simplify reference to c_regs.
+ (swapcore_solaris_bcp): Likewise.
+
+2006-05-04 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * elfxx-mips.c (_bfd_mips_elf_hide_symbol): Adjust handling
+ for missing GOTs.
+
+2006-05-04 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * cpu-arm.c (bfd_is_arm_mapping_symbol_name): Accept more
+ mapping symbols.
+
+2006-05-04 Ben Elliston <bje@au.ibm.com>
+
+ * coff-or32.c (bfd_section_from_shdr): Remove unused local
+ variable `ptr'.
+ * cofflink.c (process_embedded_commands): Remove unused local
+ variables `had_read' and `had_shared'.
+ * ecofflink.c (bfd_ecoff_debug_accumulate): Remove unused local
+ variable `fdr_adr'.
+ * ihex.c (ihex_read_section): Remove unused local variable `addr'.
+
+2006-05-03 Alan Modra <amodra@bigpond.net.au>
+
+ * libbfd-in.h (_bfd_generic_new_section_hook): Declare.
+ * section.c (bfd_abs_symbol, bfd_com_symbol): Delete.
+ (bfd_und_symbol, bfd_ind_symbol): Delete.
+ (BFD_FAKE_SECTION): Remove SYM_PTR param, set symbol_ptr_ptr to
+ &SEC.symbol.
+ (STD_SECTION): Adjust.
+ (_bfd_generic_new_section_hook): New function, extracted from..
+ (bfd_section_init): ..here.
+ (bfd_make_section_old_way): Call new_section_hook for abs, com,
+ und and ind sections.
+ * elf.c (_bfd_elf_large_com_section): Adjust.
+ * aoutx.h (new_section_hook): Call _bfd_generic_new_section_hook.
+ * pdp11.c (new_section_hook): Likewise.
+ * coffcode.h (coff_new_section_hook): Likewise.
+ * ecoff.c (_bfd_ecoff_new_section_hook): Likewise.
+ * elf.c (_bfd_elf_new_section_hook): Likewise.
+ * vms.c (vms_new_section_hook): Likwise.
+ * elf32-arm.c (elf32_arm_new_section_hook): Check used_by_bfd isn't
+ already set.
+ * elf32-sh64.c (sh64_elf_new_section_hook): Likewise.
+ * elf32-xtensa.c (elf_xtensa_new_section_hook): Likewise.
+ * elf64-mmix.c (mmix_elf_new_section_hook): Likewise.
+ * elf64-ppc.c (ppc64_elf_new_section_hook): Likewise.
+ * elfxx-mips.c (_bfd_mips_elf_new_section_hook): Likewise.
+ * elfxx-sparc.c (_bfd_sparc_elf_new_section_hook): Likewise.
+ * ieee.c (ieee_new_section_hook): Likewise. Call
+ _bfd_generic_new_section_hook too.
+ * mmo.c (mmo_new_section_hook): Likewise.
+ * oasys.c (oasys_new_section_hook): Likewise.
+ * som.c (som_new_section_hook): Likewise.
+ * coff-w65.c (reloc_processing): Don't use bfd_abs_symbol.
+ * bfd-in2.h: Regenerate.
+ * libbfd.h: Regenerate.
+
+2006-05-03 Alan Modra <amodra@bigpond.net.au>
+
+ * hash.c (DEFAULT_SIZE): Revert last change.
+ (higher_prime_number): Correct test for no larger prime. Don't
+ abort on error, instead return 0. Depopulate primes[].
+ (bfd_hash_lookup): If we overflow size, refuse to grow table.
+
+2006-05-02 Paul Brook <paul@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_final_link_relocate): Set thumb funciton bit
+ for R_ARM_REL32.
+
+2006-05-02 Ben Elliston <bje@au.ibm.com>
+
+ * archive.c (bfd_generic_archive_p): Remove unused local variable
+ `fail'.
+ * dwarf2.c (decode_line_info): Remove unused local variable
+ `basic_block'.
+ * elfcode.h (elf_slurp_reloc_table_from_section): Remove unused
+ local variable `s'.
+ * tekhex.c (tekhex_write_object_contents): Remove unused local
+ variable `bytes_written'.
+ * aout-ns32k.c (MY_swap_std_reloc_out): Remove unused local
+ variable `r_addend'.
+ * elf32-dlx.c (dlx_rtype_to_howto): Remove breaks after returns.
+ * elfxx-mips.c (_bfd_elf_mips_mach): Remove breaks after returns.
+ (_bfd_ns32k_relocate_contents): Remove break after return.
+ * elf.c (bfd_section_from_shdr): Remove breaks after returns.
+
+2006-05-02 Nick Clifton <nickc@redhat.com>
+
+ * elf32-sh-symbian.c: Rename local define DEBUG to SYMBIAN_DEBUG
+ in order to avoid conflicts with the global DEBUG define.
+
+2006-05-02 Alan Modra <amodra@bigpond.net.au>
+
+ * dwarf2.c: Formatting.
+ * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Simplify
+ output section check.
+ * elf32-i370.c: Warning fixes inside #ifdef DEBUG.
+ * elf32-m32c.c: Similarly.
+ * elf32-ppc.c: Similarly.
+ * elf32-v850.c: Similarly.
+ * nlm32-sparc.c: Similarly.
+ * elfcode.h: Similarly.
+ (elf_symbol_flags): Delete.
+ * elflink.c (elf_link_input_bfd): Comment typo.
+
+2006-05-01 DJ Delorie <dj@redhat.com>
+
+ * bfd-in.h (bfd_hash_table): Add count field.
+ * bfd-in2.h: Regenerate.
+ * hash.c (higher_prime_number): New.
+ (bfd_hash_table_inint_n): Init count field.
+ (bfd_hash_lookup): Grow table as needed.
+
+2006-04-27 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ PR binutils/2584
+ * tekhex.c (getvalue): Change return type to bfd_boolean and
+ add the new parameter. Return false if the unexpected character
+ is found.
+ (getsym): Likewise.
+ (first_phase): Change return type to bfd_boolean and return
+ false if the unexpected character is found. Replace abort
+ with returning false.
+ (pass_over): Change return type to bfd_boolean and the type of
+ the second argument to bfd_boolean (*) (bfd *, int, char *).
+ Return false if FUNC returns false.
+ (tekhex_object_p): Return NULL if pass_over fails.
+
+2006-04-27 Alan Modra <amodra@bigpond.net.au>
+
+ * coff-rs6000.c (xcoff_write_archive_contents_old): Warning fix.
+
+2006-04-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/2593
+ * elf.c (_bfd_elf_new_section_hook): Don't set section ELF type
+ and flags if its BFD flags have been set.
+ (_bfd_elf_init_private_section_data): Don't copy the output ELF
+ section type from input if it has been set to something
+ different.
+
+2006-04-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/2467
+ * elf.c (_bfd_elf_close_and_cleanup): Check elf_tdata (abfd)
+ is NULL first.
+
+ * elf32-arm.c (elf32_arm_close_and_cleanup): Check if
+ abfd->sections is NULL.
+ (elf32_arm_bfd_free_cached_info): New.
+ (bfd_elf32_bfd_free_cached_info): Defined.
+
+ * elfxx-target.h (bfd_elfNN_bfd_free_cached_info): Default it
+ to _bfd_free_cached_info.
+
+ * libbfd-in.h (_bfd_free_cached_info): New.
+ * libbfd: Regenerated.
+
+ * opncls.c (_bfd_delete_bfd): Check if abfd->memory is NULL.
+ (_bfd_free_cached_info): New.
+
+2006-04-21 Alan Modra <amodra@bigpond.net.au>
+
+ * elf.c (assign_file_positions_except_relocs): Move code setting
+ file position of non-loaded sections..
+ (assign_file_positions_for_segments): ..to here.
+
+2006-04-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2537
+ * elf.c (bfd_section_from_shdr): Allow sections reserved for
+ applications. Issue an error on sections we don't know how
+ to handle.
+
+2006-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2006-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * warning.m4 (--enable-werror): Format help message.
+ (--enable-build-warnings): Likewise.
+ * configure: Regenerate.
+
+2006-04-18 Nick Clifton <nickc@redhat.com>
+
+ PR 2257
+ * elfcode.h (elf_object_p): Allow files with corrupt e_shstrndx
+ fields to still be handled as ELF files.
+
+2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/SRC-POTFILES.in: Regenerated.
+
+2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.in: Update version to 2.17.50.
+ * configure: Regenerated.
+
+2006-04-14 David Heine <dlheine@tensilica.com>
+
+ * elf32-xtensa.c (build_reloc_opcodes): New.
+ (compute_text_actions): Use it to decode opcodes outside inner loop.
+ (check_section_ebb_pcrels_fit): Add "reloc_opcodes" argument, and if
+ it is set, use it to get the opcodes for relocations.
+ (move_shared_literal): Adjust call to check_section_ebb_pcrels_fit.
+
+2006-04-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2513
+ * elf32-i386.c (GOT_TLS_MASK): New macro for tls_type.
+ (GOT_TLS_IE_IE): Likewise.
+ (GOT_TLS_IE_GD): Likewise.
+ (GOT_TLS_IE_MASK): Likewise.
+ (elf_i386_check_relocs): For global symbols, set GOT_TLS_IE_GD
+ and GOT_TLS_IE_IE for R_386_TLS_GD and R_386_TLS_IE
+ respectively.
+ (allocate_dynrelocs): If both GOT_TLS_IE_IE and GOT_TLS_IE_GD
+ are set, treat tls_type as GOT_TLS_IE_BOTH.
+ (elf_i386_relocate_section): Likewise.
+
+2006-04-07 Randolph Chung <tausq@debian.org>
+
+ * elf64-hppa.c (elf64_hppa_grok_prstatus): New function.
+ (elf64_hppa_grok_psinfo): Likewise.
+ (elf_backend_grok_pstatus, elf_backend_grok_psinfo): Define.
+
+2006-04-06 DJ Delorie <dj@redhat.com>
+
+ * elf32-m32c.c (m32c_elf_relocate_section): Generate a symbol for
+ each plt entry we create.
+
+2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
+
+ * po/Make-in: Add install-html target.
+ * Makefile.am: Rename docdir to bfddocdir. Add datarootdir, docdir
+ htmldir. Add install-html and install-html-recursive targets.
+ * Makefile.in: Regenerate.
+ * configure.in: AC_SUBST for datarootdir, docdir and htmldir.
+ * configure: Regenerate.
+
+2006-04-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elfxx-ia64.c (elfNN_ia64_relax_section): Skip unneeded passes
+ with the skip_relax_pass_0 and skip_relax_pass_1 bits in the
+ section structure.
+
+2006-04-05 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * elf32-bfin.c (bfinfdpic_relocs_info_hash): Sprinkle casts to
+ eliminate warnings.
+
+2006-04-05 H.J. Lu <hongjiu.lu@intel.com>
+ James E Wilson <wilson@specifixinc.com>
+
+ PR ld/2442
+ * elfxx-ia64.c (elfNN_ia64_dyn_sym_info): Remove next.
+ (elfNN_ia64_local_hash_entry): Add count, sorted_count and
+ size.
+ (elfNN_ia64_link_hash_entry): Likewise.
+ (elfNN_ia64_new_elf_hash_entry): Initialize count, sorted_count
+ and size.
+ (elfNN_ia64_hash_copy_indirect): Updated elfNN_ia64_dyn_sym_info
+ processing.
+ (elfNN_ia64_hash_hide_symbol): Likewise.
+ (elfNN_ia64_global_dyn_sym_thunk): Likewise.
+ (elfNN_ia64_local_dyn_sym_thunk): Likewise.
+ (elfNN_ia64_global_dyn_info_free): New function.
+ (elfNN_ia64_local_dyn_info_free): Likewise.
+ (elfNN_ia64_hash_table_free): Free local and global
+ elfNN_ia64_dyn_sym_info.
+ (addend_compare): New function.
+ (sort_dyn_sym_info): Likewise.
+ (get_dyn_sym_info): Updated to use binary search for addend.
+ (elfNN_ia64_check_relocs): Scan relocations to create dynamic
+ relocation arrays first.
+
+2006-04-05 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * elf32-bfin.c (_bfin_create_got_section): Don't generate a _gp
+ symbol.
+
+2006-04-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2411
+ * elflink.c (check_dynsym): New.
+ (elf_link_output_extsym): Use it.
+ (bfd_elf_final_link): Likewise.
+
+2006-04-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2404
+ * elflink.c (_bfd_elf_merge_symbol): Skip the default indirect
+ symbol from the dynamic definition with the default version if
+ its type and the type of existing regular definition mismatch.
+
+2006-04-05 Richard Sandiford <richard@codesourcery.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+
+ * config.bfd (sparc-*-vxworks*): New stanza.
+ * configure.in (bfd_elf32_sparc_vxworks_vec): New stanza.
+ (bfd_elf32_sparc_vec, bfd_elf64_sparc_vec): Add elf-vxworks.lo.
+ * configure: Regenerate.
+ * elf32-sparc.c: Include elf-vxworks.h.
+ (elf32_sparc_vxworks_link_hash_table_create: New.
+ (elf32_sparc_vxworks_final_write_processing): New.
+ (TARGET_BIG_SYM): Override for VxWorks.
+ (TARGET_BIG_NAME, ELF_MINPAGESIZE): Likewise.
+ (bfd_elf32_bfd_link_hash_table_create): Likewise.
+ (elf_backend_want_got_plt, elf_backend_plt_readonly): Likewise.
+ (elf_backend_got_header_size, elf_backend_add_symbol_hook): Likewise.
+ (elf_backend_link_output_symbol_hook): Likewise.
+ (elf_backend_emit_relocs): Likewise.
+ (elf_backend_final_write_processing, elf32_bed): Likewise.
+ * elfxx-sparc.c: Include libiberty.h and elf-vxworks.h.
+ (sparc_vxworks_exec_plt0_entry, sparc_vxworks_exec_plt_entry): New.
+ (sparc_vxworks_shared_plt0_entry, sparc_vxworks_shared_plt_entry): New.
+ (_bfd_sparc_elf_link_hash_table_create): Don't initialize
+ build_plt_entry here.
+ (create_got_section): Initialize sgotplt for VxWorks.
+ (_bfd_sparc_elf_create_dynamic_sections): Initialize build_plt_entry,
+ plt_header_size and plt_entry_size, with new VxWorks-specific settings.
+ Call elf_vxworks_create_dynamic_sections for VxWorks.
+ (allocate_dynrelocs): Use plt_header_size and plt_entry_size.
+ Allocate room for .got.plt and .rela.plt.unloaded entries on VxWorks.
+ (_bfd_sparc_elf_size_dynamic_sections): Don't allocate a nop in .plt
+ for VxWorks. Check for the .got.plt section.
+ (sparc_vxworks_build_plt_entry): New function.
+ (_bfd_sparc_elf_finish_dynamic_symbol): Add handling of VxWorks PLTs.
+ Don't make _GLOBAL_OFFSET_TABLE_ and _PROCEDURE_LINKAGE_TABLE_
+ absolute on VxWorks.
+ (sparc32_finish_dyn): Add special handling for DT_RELASZ
+ and DT_PLTGOT on VxWorks.
+ (sparc_vxworks_finish_exec_plt): New.
+ (sparc_vxworks_finish_shared_plt): New.
+ (_bfd_sparc_elf_finish_dynamic_sections): Call them.
+ Use plt_header_size and plt_entry_size.
+ * elfxx-sparc.h (_bfd_sparc_elf_link_hash_table): Add is_vxworks,
+ srelplt2, sgotplt, plt_header_size and plt_entry_size fields.
+ * Makefile.am (elfxx-sparc.lo): Depend on elf-vxworks.h.
+ (elf32-sparc.lo): Likewise.
+ * Makefile.in: Regenerate.
+ * targets.c (bfd_elf32_sparc_vxworks_vec): Declare.
+ (_bfd_target_vector): Add a pointer to it.
+
+2006-03-30 Ben Elliston <bje@au.ibm.com>
+
+ PR ld/2267
+ * elflink.c (elf_fixup_link_order): Ensure `elfsec' is not a
+ special section number that exceeds the number of ELF sections
+ (eg. SHN_MIPS_SCOMMON).
+
+2006-03-27 Richard Sandiford <richard@codesourcery.com>
+
+ * elfxx-mips.c (mips_got_entry): Add more commentary.
+ (mips_elf_local_got_index): Use the hash table entry to record
+ the GOT index of forced-local symbols.
+ (mips_elf_initialize_tls_index): Rearrange code. Store the index
+ in either the hash table entry or the mips_got_entry, not both.
+ Add more commentary.
+ (mips_elf_multi_got): Make sure the g->next is nonnull when calling
+ mips_elf_initialize_tls_index.
+
+2006-03-25 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * elf32-bfin.c (bfd_const_reloc, bfd_oper_reloc, bfin_push_reloc,
+ RELOC_STACK_SIZE, reloc_stack, reloc_stack_tos, is_reloc_stack_empty,
+ reloc_stack_push, reloc_stack_pop, reloc_stack_operate,
+ bfin_areloc_howto_table): Delete. All
+ uses deleted as well.
+ (bfin_reloc_map): Delete all stack relocs.
+ (bfin_info_to_howto, bfin_bfd_reloc_type_lookup,
+ bfin_reloc_type_lookup): Don't support them.
+ (bfin_relocate_section): Don't try to handle them.
+
+ * config.bfd (bfin-*-*): Add bfd_elf32_bfinfdpic_vec.
+ * configure.in: Likewise.
+ * configure: Regenerate.
+ * elf32-bfin.c: Include "elf/dwarf2.h" and "hashtab.h".
+ (BFIN_RELOC_MAX): Now 0x21.
+ (bfin_howto_table, bfin_reloc_map): Add FD-PIC relocs.
+ (bfd_elf32_bfinfdpic_vec): Declare.
+ (IS_FDPIC): New macro.
+ (struct bfinfdpic_elf_link_hash_table): New struct.
+ (bfinfdpic_hash_table, bfinfdpic_got_section,
+ bfinfdpic_gotrel_section, bfinfdpic_gotfixup_section,
+ bfinfdpic_plt_setion, bfinfdpic_pltrel_section,
+ bfinfdpic_relocs_info, bfinfdpic_got_initial_offset,
+ bfinfdpic_plt_initial_offset): Accessor macros for it.
+ (BFINFDPIC_SYM_LOCAL, BFINFDPIC_FUNCDESC_LOCAL): New macros.
+ (struct bfinfdpic_relocs_info): New struct.
+ (LZPLT_RESOLVER_EXTRA, LZPLT_NORMAL_SIZE, LZPLT_ENTRIES,
+ BFINFDPIC_LZPLT_BLOCK_SIZE, BFINFDPIC_LZPLT_RESOLV_LOC,
+ DEFAULT_STACK_SIZE): New macros.
+ (bfinfdpic_elf_link_hash_table_create, bfinfdpic_relocs_info_hash,
+ bfinfdpic_relocs_info_eq, bfinfdpics_relocs_info_find,
+ bfinfdpic_relocs_info_for_global, bfinfdpic_relocs_info_for_local,
+ bfinfdpic_pic_merge_early_relocs_info, _bfinfdpic_add_dyn_reloc,
+ _bfinfdpic_add_rofixup, _bfinfdpic_osec_to_segment,
+ _bfinfdpic_osec_readonly_p, bfinfdpic_relocate_section,
+ bfinfdpic_check_relocs, bfinfdpic_gc_sweep_hook,
+ _bfinfdpic_link_omit_section_dynsym, _bfin_create_got_section,
+ elf32_bfinfdpic_create_dynamic_sections, _bfinfdpic_get_fd_entry,
+ _bfinfdpic_compute_got_alloc_data, _bfinfdpic_get_got_entry,
+ _bfinfdpic_assign_got_entries, _bfinfdpic_assign_plt_entries,
+ _bfinfdpic_resolve_final_relocs_info,
+ elf32_bfinfdpic_size_dynamic_sections,
+ elf32_bfinfdpic_always_size_sections,
+ elf32_bfinfdpic_modify_segment_map,
+ _bfinfdpic_count_got_plt_entries,
+ elf32_bfinfdpic_finish_dynamic_sections,
+ elf32_bfinfdpic_adjust_dynamic_symbol,
+ elf32_bfinfdpic_finish_dynamic_symbol,
+ elf32_bfinfdpic_elf_use_relative_eh_frame,
+ elf32_bfinfdpic_elf_encode_eh_address,
+ elf32_bfin_object_p, bfin_elf_copy_private_bfd_data,
+ elf32_bfinfdpic_copy_private_bfd_data,
+ (struct _bfinfdpic_dynamic_got_info,
+ struct _bfinfdpic_dynamic_got_plt_info): New structs.
+ (elf32_bfin_print_private_bfd_data): Print PIC flags.
+ (elf32_bfin_merge_private_bfd_data): Extend to support FD-PIC.
+ (TARGET_LITTLE_SYM, TARGET_LITTLE_NAME, elf32_bed,
+ elf_backend_got_header_size, bfd_elf32_bfd_link_hash_table_create,
+ elf_backend_always_size_sectinos, elf_backend_modify_segment_map,
+ bfd_elf32_bfd_copy_private_bfd_data,
+ elf_backend_create_dynamic_sections, elf_backend_adjust_dynamic_symbol,
+ elf_backend_size_dynamic_sections, elf_backend_finish_dynamic_symbol,
+ elf_backend_finish_dynamic_sections, elf_backend_relocate_section,
+ elf_backend_can_make_relative_eh_frame, elf_backend_check_relocs,
+ elf_backend_can_make_ldsa_relative_eh_frame, elf_backend_may_use_rel_p,
+ elf_backend_may_use_rela_p, elf_backend_default_use_rela_p,
+ elf_backend_omit_section_dynsym): Redefine these macros and include
+ "elf32-target.h" again to create the elf32-bfinfdpic target.
+ * reloc.c (BFD_RELOC_BFIN_GOT17M4, BFD_RELOC_BFIN_GOTHI,
+ BFD_RELOC_BFIN_GOTLO, BFD_RELOC_BFIN_FUNCDESC,
+ BFD_RELOC_BFIN_FUNCDESC_GOT17M4, BFD_RELOC_BFIN_FUNCDESC_GOTHI,
+ BFD_RELOC_BFIN_FUNCDESC_GOTLO, BFD_RELOC_BFIN_FUNCDESC_VALUE,
+ BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4, BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI,
+ BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO, BFD_RELOC_BFIN_GOTOFFHI,
+ BFD_RELOC_BFIN_GOTOFFLO): New.
+ * targets.c (bfd_elf32_bfinfdpic_vec): New bfd_target.
+ (_bfd_target_vector): Add it.
+ * bfd-in2.h: Regenerate.
+ * libbfd.h: Regenerate.
+
+2006-03-25 Richard Sandiford <richard@codesourcery.com>
+
+ * cpu-m68k.c (bfd_m68k_compatible): Treat ISA A+ and ISA B code as
+ incompatible. Likewise MAC and EMAC code.
+ * elf32-m68k.c (elf32_m68k_merge_private_bfd_data): Use
+ bfd_get_compatible to set the new bfd architecture. Rely on it
+ to detect incompatibilities.
+
+2006-03-23 Michael Matz <matz@suse.de>
+
+ * reloc.c: Add BFD_RELOC_X86_64_GOT64, BFD_RELOC_X86_64_GOTPCREL64,
+ BFD_RELOC_X86_64_GOTPC64, BFD_RELOC_X86_64_GOTPLT64,
+ BFD_RELOC_X86_64_PLTOFF64.
+ * bfd-in2.h: Regenerated.
+ * libbfd.h: Regenerated.
+ * elf64-x86-64.c (x86_64_elf_howto_table): Correct comment.
+ Add howtos for above relocs.
+ (x86_64_reloc_map): Add mappings for new relocs.
+ (elf64_x86_64_check_relocs): R_X86_64_GOT64, R_X86_64_GOTPCREL64,
+ R_X86_64_GOTPLT64 need a got entry. R_X86_64_GOTPLT64 also a PLT
+ entry. R_X86_64_GOTPC64 needs a .got section. R_X86_64_PLTOFF64
+ needs a PLT entry.
+ (elf64_x86_64_gc_sweep_hook): Reflect changes from
+ elf64_x86_64_check_relocs for the new relocs.
+ (elf64_x86_64_relocate_section): Handle new relocs.
+
+2006-03-22 Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (xtensa_read_table_entries): Remove assertion that
+ rel->r_addend is zero.
+
+2006-03-22 Richard Sandiford <richard@codesourcery.com>
+
+ * elfxx-mips.c (_bfd_mips_vxworks_finish_dynamic_symbol): Fix type
+ of "loc".
+
+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>
+
+ * bfd-in2.h: Regenerate.
+ * config.bfd (mips*-*-vxworks*, mips*el-*-vxworks*): New stanzas.
+ * configure.in (bfd_elf32_bigmips_vxworks_vec): New stanza.
+ (bfd_elf32_littlemips_vxworks_vec): Likewise.
+ (bfd_elf32_bigmips_vec): Add elf-vxworks.lo.
+ (bfd_elf32_littlemips_vec): Likewise.
+ (bfd_elf32_nbigmips_vec): Likewise.
+ (bfd_elf32_nlittlemips_vec): Likewise.
+ (bfd_elf32_ntradbigmips_vec): Likewise.
+ (bfd_elf32_ntradlittlemips_vec): Likewise.
+ (bfd_elf32_tradbigmips_vec): Likewise.
+ (bfd_elf32_tradlittlemips_vec): Likewise.
+ (bfd_elf64_bigmips_vec): Likewise.
+ (bfd_elf64_littlemips_vec): Likewise.
+ (bfd_elf64_tradbigmips_vec): Likewise.
+ (bfd_elf64_tradlittlemips_vec): Likewise.
+ * elf32-mips.c: Include elf-vxworks.h.
+ (mips_info_to_howto_rel): Use elf_backend_mips_rtype_to_howto
+ instead of calling mips_elf32_rtype_to_howto directly.
+ (mips_vxworks_copy_howto_rela): New reloc howto.
+ (mips_vxworks_jump_slot_howto_rela): Likewise.
+ (mips_vxworks_bfd_reloc_type_lookup): New function.
+ (mips_vxworks_rtype_to_howto): Likewise.
+ (mips_vxworks_final_write_processing): Likewise.
+ (TARGET_LITTLE_SYM, TARGET_LITTLE_NAME): Override for VxWorks.
+ (TARGET_BIG_SYM, TARGET_BIG_NAME, elf_bed, ELF_MAXPAGESIZE): Likewise.
+ (elf_backend_want_got_plt): Likewise.
+ (elf_backend_want_plt_sym): Likewise.
+ (elf_backend_got_symbol_offset): Likewise.
+ (elf_backend_want_dynbss): Likewise.
+ (elf_backend_may_use_rel_p): Likewise.
+ (elf_backend_may_use_rela_p): Likewise.
+ (elf_backend_default_use_rela_p): Likewise.
+ (elf_backend_got_header_size: Likewise.
+ (elf_backend_plt_readonly): Likewise.
+ (bfd_elf32_bfd_reloc_type_lookup): Likewise.
+ (elf_backend_mips_rtype_to_howto): Likewise.
+ (elf_backend_adjust_dynamic_symbol): Likewise.
+ (elf_backend_finish_dynamic_symbol): Likewise.
+ (bfd_elf32_bfd_link_hash_table_create): Likewise.
+ (elf_backend_add_symbol_hook): Likewise.
+ (elf_backend_link_output_symbol_hook): Likewise.
+ (elf_backend_emit_relocs): Likewise.
+ (elf_backend_final_write_processing: Likewise.
+ (elf_backend_additional_program_headers): Likewise.
+ (elf_backend_modify_segment_map): Likewise.
+ (elf_backend_symbol_processing): Likewise.
+ * elfxx-mips.c: Include elf-vxworks.h.
+ (mips_elf_link_hash_entry): Add is_relocation_target and
+ is_branch_target fields.
+ (mips_elf_link_hash_table): Add is_vxworks, srelbss, sdynbss, srelplt,
+ srelplt2, sgotplt, splt, plt_header_size and plt_entry_size fields.
+ (MIPS_ELF_RELA_SIZE, MIPS_ELF_REL_DYN_NAME): New macros.
+ (MIPS_RESERVED_GOTNO): Take a mips_elf_link_hash_table argument.
+ Return 3 for VxWorks.
+ (ELF_MIPS_GP_OFFSET): Change the argument from a bfd to a
+ mips_elf_link_hash_table. Return 0 for VxWorks.
+ (MIPS_ELF_GOT_MAX_SIZE): Change the argument from a bfd to a
+ mips_elf_link_hash_table. Update the call to ELF_MIPS_GP_OFFSET.
+ (mips_vxworks_exec_plt0_entry): New variable.
+ (mips_vxworks_exec_plt_entry): Likewise.
+ (mips_vxworks_shared_plt0_entry): Likewise.
+ (mips_vxworks_shared_plt_entry): Likewise.
+ (mips_elf_link_hash_newfunc): Initialize the new hash_entry fields.
+ (mips_elf_rel_dyn_section): Change the bfd argument to a
+ mips_elf_link_hash_table. Use MIPS_ELF_REL_DYN_NAME to get
+ the name of the section.
+ (mips_elf_initialize_tls_slots): Update the call to
+ mips_elf_rel_dyn_section.
+ (mips_elf_gotplt_index): New function.
+ (mips_elf_local_got_index): Add an input_section argument.
+ Update the call to mips_elf_create_local_got_entry.
+ (mips_elf_got_page): Likewise.
+ (mips_elf_got16_entry): Likewise.
+ (mips_elf_create_local_got_entry): Add bfd_link_info and input_section
+ arguments. Create dynamic relocations for each entry on VxWorks.
+ (mips_elf_merge_gots): Update the use of MIPS_ELF_GOT_MAX_SIZE.
+ (mips_elf_multi_got): Update the uses of MIPS_ELF_GOT_MAX_SIZE
+ and MIPS_RESERVED_GOTNO.
+ (mips_elf_create_got_section): Update the uses of
+ MIPS_ELF_GOT_MAX_SIZE. Create .got.plt on VxWorks.
+ (is_gott_symbol): New function.
+ (mips_elf_calculate_relocation): Use a dynobj local variable.
+ Update the calls to mips_elf_local_got_index, mips_elf_got16_entry and
+ mips_elf_got_page_entry. Set G to the .got.plt entry when calculating
+ VxWorks R_MIPS_CALL* relocations. Calculate and use G for all GOT
+ relocations on VxWorks. Add dynamic relocations for references
+ to the VxWorks __GOTT_BASE__ and __GOTT_INDEX__ symbols. Don't
+ create dynamic relocations for R_MIPS_32, R_MIPS_REL32 or R_MIPS_64
+ in VxWorks executables.
+ (mips_elf_allocate_dynamic_relocations): Add a bfd_link_info argument.
+ Use MIPS_ELF_RELA_SIZE to calculate the size of a VxWorks entry.
+ Don't allocate a null entry on VxWorks.
+ (mips_elf_create_dynamic_relocation): Update the call to
+ mips_elf_rel_dyn_section. Use absolute rather than relative
+ relocations for VxWorks, and make them RELA rather than REL.
+ (_bfd_mips_elf_create_dynamic_sections): Don't make .dynamic
+ read-only on VxWorks. Update the call to mips_elf_rel_dyn_section.
+ Create the .plt, .rela.plt, .dynbss and .rela.bss sections on
+ VxWorks. Likewise create the _PROCEDURE_LINKAGE_TABLE symbol.
+ Call elf_vxworks_create_dynamic_sections for VxWorks and
+ initialize the plt_header_size and plt_entry_size fields.
+ (_bfd_mips_elf_check_relocs): Don't allow GOT relocations to be
+ used in VxWorks executables. Don't allocate dynamic relocations
+ for R_MIPS_32, R_MIPS_REL32 or R_MIPS_64 in VxWorks executables.
+ Set is_relocation_target for each symbol referenced by a relocation.
+ Allocate .rela.dyn entries for relocations against the special
+ VxWorks __GOTT_BASE__ and __GOTT_INDEX__ symbols. Create GOT
+ entries for all VxWorks R_MIPS_GOT16 relocations. Don't allocate
+ a global GOT entry for symbols mentioned in VxWorks R_MIPS_CALL*,
+ R_MIPS_32, R_MIPS_REL32 or R_MIPS_64 relocations. Update the calls
+ to mips_elf_rel_dyn_section and mips_elf_allocate_dynamic_relocations.
+ Set is_branch_target for symbols mentioned in R_MIPS_PC16 or R_MIPS_26
+ relocations. Don't set no_fn_stub on VxWorks.
+ (_bfd_mips_elf_adjust_dynamic_symbol): Update the call to
+ mips_elf_allocate_dynamic_relocations.
+ (_bfd_mips_vxworks_adjust_dynamic_symbol): New function.
+ (_bfd_mips_elf_always_size_sections): Do not allocate GOT page
+ entries for VxWorks, and do not create multiple GOTs.
+ (_bfd_mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_NAME.
+ Handle .got specially for VxWorks. Update the uses of
+ MIPS_RESERVED_GOTNO and mips_elf_allocate_dynamic_relocations.
+ Check for sgotplt and splt. Allocate the .rel(a).dyn contents last,
+ once its final size is known. Set DF_TEXTREL for VxWorks. Add
+ DT_RELA, DT_RELASZ, DT_RELAENT, DT_PLTREL, DT_PLTRELSZ and DT_JMPREL
+ tags on VxWorks. Do not add the MIPS-specific tags for VxWorks.
+ (_bfd_mips_vxworks_finish_dynamic_symbol): New function.
+ (mips_vxworks_finish_exec_plt): Likewise.
+ (mips_vxworks_finish_shared_plt): Likewise.
+ (_bfd_mips_elf_finish_dynamic_sections): Remove an unncessary call
+ to mips_elf_rel_dyn_section. Use a VxWorks-specific value of
+ DT_PLTGOT. Handle DT_RELA, DT_RELASZ, DT_RELAENT, DT_PLTREL,
+ DT_PLTRELSZ and DT_JMPREL. Update the uses of MIPS_RESERVED_GOTNO
+ and mips_elf_rel_dyn_section. Use a different GOT header for
+ VxWorks. Don't sort .rela.dyn on VxWorks. Finish the PLT on VxWorks.
+ (_bfd_mips_elf_link_hash_table_create): Initialize the new
+ mips_elf_link_hash_table fields.
+ (_bfd_mips_vxworks_link_hash_table_create): New function.
+ (_bfd_mips_elf_final_link): Set the GP value to _GLOBAL_OFFSET_TABLE_
+ on VxWorks. Update the call to ELF_MIPS_GP_OFFSET.
+ * elfxx-mips.h (_bfd_mips_vxworks_adjust_dynamic_symbol): Declare.
+ (_bfd_mips_vxworks_finish_dynamic_symbol): Likewise.
+ (_bfd_mips_vxworks_link_hash_table_create): Likewise.
+ * libbfd.h: Regenerate.
+ * Makefile.am (elfxx-mips.lo): Depend on elf-vxworks.h.
+ (elf32-mips.lo): Likewise.
+ * Makefile.in: Regenerate.
+ * reloc.c (BFD_RELOC_MIPS_COPY, BFD_RELOC_MIPS_JUMP_SLOT): Declare.
+ * targets.c (bfd_elf32_bigmips_vxworks_vec): Declare.
+ (bfd_elf32_littlemips_vxworks_vec): Likewise.
+ (_bfd_target_vector): Add entries for them.
+
+2006-03-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * elf64-hppa.c (elf64_hppa_special_sections): Change flags for .tbss
+ section from SHF_PARISC_WEAKORDER to SHF_HP_TLS.
+ (elf_backend_special_sections): Remove #undef.
+
+2006-03-18 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * elf64-hppa.c (allocate_global_data_opd): Don't create an OPD entry
+ for undefined weak symbols.
+
+2006-03-17 Daniel Jacobowitz <dan@codesourcery.com>
+
+ PR ld/2462
+ * elflink.c (bfd_elf_final_link): Remove
+ bed->elf_backend_emit_relocs from emit_relocs.
+
+2006-03-17 Alexandre Oliva <aoliva@redhat.com>
+
+ * elf32-ppc.c (ppc_elf_relocate_section): Copy addend from
+ first relocation to the second when relaxing TLS GD to LE;
+ zero it out when relaxing to IE.
+
+2006-03-17 Alan Modra <amodra@bigpond.net.au>
+
+ PR 2434
+ * elflink.c (elf_link_add_object_symbols): Save and restore
+ warning sym's linked sym.
+
+2006-03-16 Alan Modra <amodra@bigpond.net.au>
+
+ PR 2434
+ * elflink.c (struct elf_smash_syms_data, elf_smash_syms): Delete.
+ (elf_link_add_object_symbols): Delete unnecessary locals. Rename
+ hash_table -> htab. Formatting. Save entire symbol table
+ before loading as-needed syms, and restore afterwards if lib not
+ needed. Use bfd_hash_allocate rather than bfd_alloc for sym
+ name. Free some buffers earlier.
+ * bfd-in.h (struct bfd_hash_table): Add entsize.
+ (bfd_hash_table_init, bfd_hash_table_init_n): Adjust prototype.
+ * elf-bfd.h (_bfd_elf_link_hash_table_init): Likewise
+ * hash.c (bfd_hash_table_init_n): Add entsize param, save to
+ hash table.
+ (bfd_hash_table_init): Add param, adjust calls.
+ * aoutx.h: Adjust all hash_table_init functions and calls.
+ * bfd.c: Likewise.
+ * coff-arm.c: Likewise.
+ * coff-h8300.c: Likewise.
+ * coff-ppc.c: Likewise.
+ * cofflink.c: Likewise.
+ * ecoff.c: Likewise.
+ * ecofflink.c: Likewise.
+ * elf-m10300.c: Likewise.
+ * elf-strtab.c: Likewise.
+ * elf.c: Likewise.
+ * elf32-arm.c: Likewise.
+ * elf32-bfin.c: Likewise.
+ * elf32-cris.c: Likewise.
+ * elf32-frv.c: Likewise.
+ * elf32-hppa.c: Likewise.
+ * elf32-i386.c: Likewise.
+ * elf32-m32r.c: Likewise.
+ * elf32-m68hc1x.c: Likewise.
+ * elf32-m68k.c: Likewise.
+ * elf32-ppc.c: Likewise.
+ * elf32-s390.c: Likewise.
+ * elf32-sh.c: Likewise.
+ * elf32-vax.c: Likewise.
+ * elf64-alpha.c: Likewise.
+ * elf64-hppa.c: Likewise.
+ * elf64-ppc.c: Likewise.
+ * elf64-s390.c: Likewise.
+ * elf64-sh64.c: Likewise.
+ * elf64-x86-64.c: Likewise.
+ * elfxx-ia64.c: Likewise.
+ * elfxx-mips.c: Likewise.
+ * elfxx-sparc.c: Likewise.
+ * i386linux.c: Likewise.
+ * libaout.h: Likewise.
+ * libbfd-in.h: Likewise.
+ * libcoff-in.h: Likewise.
+ * linker.c: Likewise.
+ * m68klinux.c: Likewise.
+ * merge.c: Likewise.
+ * opncls.c: Likewise.
+ * pdp11.c: Likewise.
+ * sparclinux.c: Likewise.
+ * stabs.c: Likewise.
+ * sunos.c: Likewise.
+ * vms.c: Likewise.
+ * xcofflink.c: Likewise.
+ * section.c (struct section_hash_entry): Move to..
+ * libbfd-in.h: ..here.
+ * Makefile.am: Run "make dep-am"
+ * Makefile.in: Regenerate.
+ * bfd-in2.h: Regenerate.
+ * libbfd.h: Regenerate.
+ * libcoff.h: Regenerate.
+
+2006-03-16 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-ppc.c (ppc_elf_check_relocs): REL24 and REL14 relocs
+ against __GLOBAL_OFFSET_TABLE__ need never be dynamic. Tweak
+ last change to REL32 relocs so that they are counted as
+ possibly dynamic as per REL24 and REL14.
+
+2006-03-16 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-ppc.c (ppc_elf_check_relocs): Don't fall into REL24
+ checks from REL32.
+
+2006-03-15 Ben Elliston <bje@au.ibm.com>
+
+ * elf32-arm.c (elf32_arm_merge_eabi_attributes): Iterate over all
+ in_list elements, not just the first.
+
+2006-03-14 Richard Sandiford <richard@codesourcery.com>
+
+ * elf32-mips.c (mips_elf_adjust_addend): New function, mostly split
+ out from...
+ (_bfd_mips_elf_relocate_section): ...here. Use it to adjust r_addend
+ for final links too.
+
+2006-03-13 Richard Sandiford <richard@codesourcery.com>
+
+ * elfxx-mips.c (mips_elf_create_got_section): Initialize hgot.
+
+2006-03-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2443
+ * dwarf2.c (concat_filename): Don't issue an error if file is 0.
+
+2006-03-10 Paul Brook <paul@codesourcery.com>
+
+ * elf32-arm.c (INTERWORK_FLAG): Handle EABIv5.
+ (elf32_arm_print_private_bfd_data): Ditto.
+
+2006-03-09 Paul Brook <paul@codesourcery.com>
+
+ * cpu-arm.c (bfd_is_arm_mapping_symbol_name): Recognise additional
+ mapping symbols.
+
+2006-03-09 Khem Raj <khem@mvista.com>
+
+ * elf32-arm.c(elf32_arm_finish_dynamic_sections): Use unsigned
+ char type.
+
+2006-03-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elfxx-ia64.c (elfNN_ia64_choose_gp): Properly choose gp.
+
+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>
+
+ * configure.in (bfd_elf32_bigarm_vec): Include elf-vxworks.lo.
+ (bfd_elf32_bigarm_symbian_vec): Likewise.
+ (bfd_elf32_bigarm_vxworks_vec): Likewise.
+ (bfd_elf32_littlearm_vec): Likewise.
+ (bfd_elf32_littlearm_symbian_vec): Likewise.
+ (bfd_elf32_littlearm_vxworks_vec): Likewise.
+ * configure: Regenerate.
+ * elf32-arm.c: Include libiberty.h and elf-vxworks.h.
+ (RELOC_SECTION, RELOC_SIZE, SWAP_RELOC_IN, SWAP_RELOC_OUT): New macros.
+ (elf32_arm_vxworks_bed): Add forward declaration.
+ (elf32_arm_howto_table_1): Fix the masks for R_ASM_ABS12.
+ (elf32_arm_vxworks_exec_plt0_entry): New table.
+ (elf32_arm_vxworks_exec_plt_entry): Likewise.
+ (elf32_arm_vxworks_shared_plt_entry): Likewise.
+ (elf32_arm_link_hash_table): Add vxworks_p and srelplt2 fields.
+ (reloc_section_p): New function.
+ (create_got_section): Use RELOC_SECTION.
+ (elf32_arm_create_dynamic_sections): Likewise. Call
+ elf_vxworks_create_dynamic_sections for VxWorks targets.
+ Choose between the two possible values of plt_header_size
+ and plt_entry_size.
+ (elf32_arm_link_hash_table_create): Initialize vxworks_p and srelplt2.
+ (elf32_arm_abs12_reloc): New function.
+ (elf32_arm_final_link_relocate): Call it. Allow the creation of
+ dynamic R_ARM_ABS12 relocs on VxWorks. Use reloc_section_p,
+ RELOC_SIZE, SWAP_RELOC_OUT and RELOC_SECTION. Initialize the
+ r_addend fields of relocs. On rela targets, skip any code that
+ adjusts in-place addends. When using _bfd_link_final_relocate
+ to perform a final relocation, pass rel->r_addend as the addend
+ argument.
+ (elf32_arm_merge_private_bfd_data): If one of the bfds is a VxWorks
+ object, ignore flags that are not standard on VxWorks.
+ (elf32_arm_check_relocs): Allow the creation of dynamic R_ARM_ABS12
+ relocs on VxWorks. Use reloc_section_p.
+ (elf32_arm_adjust_dynamic_symbol): Use RELOC_SECTION and RELOC_SIZE.
+ (allocate_dynrelocs): Use RELOC_SIZE. Account for the size of
+ .rela.plt.unloaded relocs on VxWorks targets.
+ (elf32_arm_size_dynamic_sections): Use RELOC_SIZE. Check for
+ .rela.plt.unloaded as well as .rel(a).plt. Add DT_RELA* tags
+ instead of DT_REL* tags on RELA targets.
+ (elf32_arm_finish_dynamic_symbol): Use RELOC_SECTION, RELOC_SIZE
+ and SWAP_RELOC_OUT. Initialize r_addend fields. Handle VxWorks
+ PLT entries. Do not make _GLOBAL_OFFSET_TABLE_ absolute on VxWorks.
+ (elf32_arm_finish_dynamic_sections): Use RELOC_SECTION, RELOC_SIZE
+ and SWAP_RELOC_OUT. Initialize r_addend fields. Handle DT_RELASZ
+ like DT_RELSZ. Handle the VxWorks form of initial PLT entry.
+ Correct the .rela.plt.unreloaded symbol indexes.
+ (elf32_arm_output_symbol_hook): Call the VxWorks version of this
+ hook on VxWorks targets.
+ (elf32_arm_vxworks_link_hash_table_create): Set vxworks_p to true.
+ Minor formatting tweak.
+ (elf32_arm_vxworks_final_write_processing): New function.
+ (elf_backend_add_symbol_hook): Override for VxWorks and reset
+ for Symbian.
+ (elf_backend_final_write_processing): Likewise.
+ (elf_backend_emit_relocs): Likewise.
+ (elf_backend_want_plt_sym): Likewise.
+ (ELF_MAXPAGESIZE): Likewise.
+ (elf_backend_may_use_rel_p): Minor formatting tweak.
+ (elf_backend_may_use_rela_p): Likewise.
+ (elf_backend_default_use_rela_p): Likewise.
+ (elf_backend_rela_normal): Likewise.
+ * Makefile.in (elf32-arm.lo): Depend on elf-vxworks.h.
+
+2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * archures.c (bfd_mach_mcf_isa_a_nodiv, bfd_mach_mcf_isa_b_nousp):
+ New. Adjust other variants.
+ (bfd_default_scan): Update.
+ * bfd-in2.h: Rebuilt.
+ * cpu-m68k.c: Adjust.
+ (bfd_m68k_compatible): New. Use it for architectures.
+ * elf32-m68k.c (elf32_m68k_object_p): Adjust.
+ (elf32_m68k_merge_private_bfd_data): Adjust. Correct isa-a/b
+ mismatch.
+ (elf32_m68k_print_private_bfd_data): Adjust.
+ * ieee.c (ieee_write_processor): Adjust.
+
+2006-03-06 Alan Modra <amodra@bigpond.net.au>
+
+ * dwarf2.c: Formatting.
+ (add_line_info): Remove outer loop.
+
+2006-03-05 H.J. Lu <hongjiu.lu@intel.com>
+ Alan Modra <amodra@bigpond.net.au>
+
+ PR binutils/2338
+ * dwarf2.c (loadable_section): New struct.
+ (dwarf2_debug): Add loadable_section_count and
+ loadable_sections.
+ (new_line_sorts_after): New.
+ (add_line_info): Use new_line_sorts_after to compare line
+ addresses.
+ (check_function_name): Removed.
+ (unset_sections): New.
+ (place_sections): New.
+ (_bfd_dwarf2_find_nearest_line): Updated. Call place_sections
+ and unset_sections on relocatable files.
+ (_bfd_dwarf2_find_line): Likewise.
+
+2006-03-03 Nick Clifton <nickc@redhat.com>
+
+ * cpu-avr.c: Update to ISO-C90 formatting.
+ * elf32-avr.c: Likewise.
+
+2006-03-03 Bjoern Haase <bjoern.m.haase@web.de>
+
+ * elf32-avr.c (avr_reloc_map): Insert BFD_RELOC_AVR_MS8_LDI
+ and R_AVR_MS8_LDI
+ (bfd_elf_avr_final_write_processing): Set
+ EF_AVR_LINKRELAX_PREPARED in e_flags field.
+ (elf32_avr_relax_section): New function.
+ (elf32_avr_relax_delete_bytes): New function.
+ (elf32_avr_get_relocated_section_contents): New function.
+ (avr_pc_wrap_around): New function.
+ (avr_relative_distance_considering_wrap_around): New function.
+ (avr_final_link_relocate): Handle negative int8t_t immediate for R_AVR_LDI.
+ * reloc.c: Add BFD_RELOC_AVR_MS8_LDI and BFD_RELOC_AVR_LDI_NEG
+ * libbfd.h: Regenerate.
+ * bfd-in2.h: Regenerate.
+
+2006-03-02 DJ Delorie <dj@redhat.com>
+
+ * elf32-m32c.c (m32c_offset_for_reloc): Fix local symbol
+ calculations.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * elf32-ppc.c (is_ppc_elf_target): Return true if the target is
+ bfd_elf32_powerpc_vxworks_vec.
+
+2006-03-02 Nick Clifton <nickc@redhat.com>
+
+ * elf32-m32c.c (m32c_elf_relax_section): Initialise 'gap'.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * elf32-i386.c (elf_i386_create_dynamic_sections): Use
+ elf_vxworks_create_dynamic_sections.
+ (elf_i386_size_dynamic_sections): Remove VxWorks GOT and PLT
+ symbol handling.
+ * elf32-ppc.c (ppc_elf_create_dynamic_sections): Use
+ elf_vxworks_create_dynamic_sections.
+ (ppc_elf_size_dynamic_sections): Remove VxWorks GOT and PLT
+ symbol handling.
+ * elf-vxworks.c (elf_vxworks_create_dynamic_sections): New function.
+ * elf-vxworks.h (elf_vxworks_create_dynamic_sections): Declare.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * elf32-i386.c (elf_i386_vxworks_link_output_symbol_hook): Delete.
+ (elf_backend_link_output_symbol_hook): Use
+ elf_vxworks_link_output_symbol_hook instead.
+ * elf32-ppc.c (elf_i386_vxworks_link_output_symbol_hook): Delete.
+ (elf_backend_link_output_symbol_hook): Use
+ elf_vxworks_link_output_symbol_hook instead.
+ * elf-vxworks.c (elf_vxworks_link_output_symbol_hook): Provide the
+ same interface as elf_backend_link_output_symbol_hook.
+ * elf-vxworks.h (elf_vxworks_link_output_symbol_hook): Update
+ prototype accordingly.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * elf32-ppc.c (ppc_elf_plt_type): New enumeration.
+ (ppc_elf_link_hash_table): Replace old_got and new_got with
+ plt_type and can_use_new_plt.
+ (ppc_elf_create_dynamic_sections): Add SEC_HAS_CONTENTS,
+ SEC_LOAD and SEC_READONLY to the VxWorks .plt flags.
+ (ppc_elf_check_relocs): Set can_use_new_plt instead of new_plt.
+ Move from plt_type == PLT_UNSET to PLT_OLD instead of setting old_plt.
+ (ppc_elf_select_plt_layout): Move from plt_type == PLT_UNSET to
+ either plt_type == PLT_OLD or plt_type == PLT_NEW. Assert that
+ this function should not be called for VxWorks targets.
+ (ppc_elf_tls_setup): Use plt_type instead of old_got.
+ (allocate_got): Likewise. Rearrange so that max_before_header
+ is only used for PLT_OLD and PLT_NEW.
+ (allocate_dynrelocs): Use plt_type instead of old_got and is_vxworks.
+ (ppc_elf_size_dynamic_sections): Likewise.
+ (ppc_elf_relax_section): Likewise.
+ (ppc_elf_relocate_section): Likewise.
+ (ppc_elf_finish_dynamic_symbol): Likewise.
+ (ppc_elf_vxworks_link_hash_table_create): Initialize plt_type.
+
+2006-02-28 Richard Sandiford <richard@codesourcery.com>
+
+ * elf32-i386.c (elf_i386_link_hash_table): Add next_tls_desc_index.
+ (elf_i386_link_hash_table_create): Initialize it.
+ (elf_i386_compute_jump_table_size): Use it instead of
+ srelplt->reloc_count.
+ (allocate_dynrelocs): Likewise.
+ (elf_i386_size_dynamic_sections): Likewise.
+ (elf_i386_relocate_section): Likewise.
+
+2006-02-27 Jakub Jelinek <jakub@redhat.com>
+
+ * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Handle S flag.
+ (_bfd_elf_write_section_eh_frame): Likewise.
+
+2006-02-27 Carlos O'Donell <carlos@codesourcery.com>
+
+ * po/Make-in: Add html target.
+
+2006-02-27 Richard Sandiford <richard@codesourcery.com>
+
+ * elf-m10300.c (_bfd_mn10300_elf_finish_dynamic_symbol): Use the
+ cached hgot entry to check for _GLOBAL_OFFSET_TABLE_.
+ * elf32-arm.c (elf32_arm_finish_dynamic_symbol): Likewise.
+ * elf32-bfin.c (bfin_finish_dynamic_symbol): Likewise.
+ * elf32-cris.c (elf_cris_finish_dynamic_symbol): Likewise.
+ * elf32-hppa.c (elf32_hppa_finish_dynamic_symbol): Likewise.
+ * elf32-i386.c (elf_i386_finish_dynamic_symbol): Likewise.
+ * elf32-m32r.c (m32r_elf_finish_dynamic_symbol): Likewise.
+ * elf32-m68k.c (elf_m68k_finish_dynamic_symbol): Likewise.
+ * elf32-sh.c (sh_elf_finish_dynamic_symbol): Likewise.
+ * elf32-vax.c (elf_vax_finish_dynamic_symbol): Likewise.
+ * elf32-xtensa.c (elf_xtensa_finish_dynamic_symbol): Likewise.
+ * elf64-sh64.c (sh64_elf64_finish_dynamic_symbol): Likewise.
+ * elf64-x86-64.c (elf64_x86_64_finish_dynamic_symbol): Likewise.
+ * elfxx-mips.c (_bfd_mips_elf_finish_dynamic_symbol): Likewise.
+ * elf32-s390.c (elf_s390_finish_dynamic_symbol): Likewise. Also use
+ the cached hplt entry to check for _PROCEDURE_LINKAGE_TABLE_.
+ * elf64-alpha.c (elf64_alpha_finish_dynamic_symbol): Likewise.
+ * elf64-s390.c (elf_s390_finish_dynamic_symbol): Likewise.
+ * elfxx-ia64.c (elfNN_ia64_finish_dynamic_symbol): Likewise.
+ * elfxx-sparc.c (_bfd_sparc_elf_finish_dynamic_symbol): Likewise.
+
+2006-02-25 Richard Sandiford <richard@codesourcery.com>
+
+ * elf-bfd.h (elf_link_hash_table): Add hplt field.
+ * elflink.c (_bfd_elf_create_dynamic_sections): Initialize it.
+ * elf-m10300.c (_bfd_mn10300_elf_create_got_section): Likewise.
+ * elf32-frv.c (_frv_create_got_section): Likewise.
+ * elf32-m32r.c (m32r_elf_create_dynamic_sections): Likewise.
+ * elf32-sh.c (sh_elf_create_dynamic_sections): Likewise.
+ * elf64-alpha.c (elf64_alpha_create_dynamic_sections): Likewise.
+ * elf64-sh64.c (sh64_elf64_create_dynamic_sections): Likewise.
+ * elf32-i386.c (elf_i386_link_hash_table): Remove hgot and hplt.
+ (elf_i386_link_hash_table_create): Don't initialize them.
+ (elf_i386_size_dynamic_sections): Use the generic ELF hplt and
+ hgot fields.
+ (elf_i386_finish_dynamic_symbol): Likewise.
+ * elf32-ppc.c (ppc_elf_link_hash_table): Remove hplt.
+ (ppc_elf_size_dynamic_sections): Use the generic ELF hplt fields.
+ (ppc_elf_finish_dynamic_symbol): Likewise.
+
+2006-02-24 DJ Delorie <dj@redhat.com>
+
+ * elf32-m32c.c (m32c_elf_howto_table): Add relaxation relocs.
+ (m32c_elf_relocate_section): Don't relocate them.
+ (compare_reloc): New.
+ (relax_reloc): Remove.
+ (m32c_offset_for_reloc): New.
+ (m16c_addr_encodings): New.
+ (m16c_jmpaddr_encodings): New.
+ (m32c_addr_encodings): New.
+ (m32c_elf_relax_section): Relax jumps and address displacements.
+ (m32c_elf_relax_delete_bytes): Adjust for internal syms. Fix up
+ short jumps.
+
+ * reloc.c: Add m32c relax relocs.
+ * libbfd.h: Regenerate.
+ * bfd-in2.h: Regenerate.
+
+2006-02-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2218
+ * elf-bfd.h (elf_backend_data): Add elf_backend_fixup_symbol.
+ (_bfd_elf_link_hash_fixup_symbol): New.
+
+ * elflink.c (_bfd_elf_link_hash_fixup_symbol): New.
+ (_bfd_elf_fix_symbol_flags): Call elf_backend_fixup_symbol if
+ it isn't NULL.
+
+ * elfxx-ia64.c (elf_backend_fixup_symbol): Defined.
+
+ * elfxx-target.h (elf_backend_fixup_symbol): New.
+ (elfNN_bed): Initialize elf_backend_fixup_symbol.
+
+2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * cpu-ia64-opc.c (ins_immu5b): New.
+ (ext_immu5b): Likewise.
+ (elf64_ia64_operands): Add IMMU5b.
+
+2006-02-21 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/2218
+ * elf32-arm.c (allocate_dynrelocs): Ensure undef weak sym in pie
+ is dynamic.
+ * elf32-hppa.c (allocate_dynrelocs): Likewise.
+ * elf32-i386.c (allocate_dynrelocs): Likewise.
+ * elf32-s390.c (allocate_dynrelocs): Likewise.
+ * elf32-sh.c (allocate_dynrelocs): Likewise.
+ * elf64-s390.c (allocate_dynrelocs): Likewise.
+ * elf64-x86-64.c (allocate_dynrelocs): Likewise.
+ * elf32-m32r.c (allocate_dynrelocs): Likewise. Discard relocs
+ on undef weak with non-default visibility too.
+ * elfxx-sparc.c (allocate_dynrelocs): Ditto.
+
+2006-02-21 Alan Modra <amodra@bigpond.net.au>
+
+ * bfd.c: (_bfd_default_error_handler): Don't call abort on
+ error, instead call _exit.
+ (_bfd_abort): Call _exit not xexit.
+
+2006-02-17 Kevin Buettner <kevinb@redhat.com>
+
+ * elf32-frv.c (elf32_frv_grok_prstatus, elf32_frv_grok_psinfo):
+ New functions.
+ * elf_backend_grok_prstatus, elf_backend_grok_psinfo): Define.
+
+2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
+ Anil Paranjape <anilp1@kpitcummins.com>
+ Shilin Shakti <shilins@kpitcummins.com>
+
+ * Makefile.am: Add xc16x related entry
+ * Makefile.in: Regenerate
+ * archures.c: Add bfd_xc16x_arch
+ * bfd-in2.h: Regenerate
+ * config.bfd: Add xc16x-*-elf
+ * configure.in: Add bfd_elf32_xc16x_vec
+ * configure: Regenerate.
+ * targets.c: Added xc16x related information
+ * cpu-xc16x.c: New file
+ * reloc.c: Add new relocations specific to xc16x:
+ BFD_RELOC_XC16X_PAG, BFD_RELOC_XC16X_POF, BFD_RELOC_XC16X_SEG,
+ BFD_RELOC_XC16X_SOF
+ * elf32-xc16x.c: New file.
+
+2006-02-17 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-ppc.c (allocate_dynrelocs): Tweak undef weak handling.
+ * elf64-ppc.c (allocate_dynrelocs): Likewise.
+
+2006-02-17 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/2218
+ * elf64-ppc.c (allocate_dynrelocs): Ensure undef weak sym is
+ dynamic.
+ (ppc64_elf_relocate_section): Check output reloc section size.
+ * elf32-ppc.c (allocate_dynrelocs): Simplify undef weak test.
+
+2006-02-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2322
+ * elf.c (get_segment_type): New function.
+ (_bfd_elf_print_private_bfd_data): Use it.
+ (print_segment_map): New function.
+ (assign_file_positions_for_segments): Call print_segment_map
+ when there are not enough room for program headers.
+
+2006-02-16 Nick Hudson <nick.hudson@dsl.pipex.com>
+
+ * config.bfd (mips*el-*-netbsd*, mips*-*-netbsd*): Use
+ traditional MIPS ELF targets.
+
+2006-02-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/2338
+ * dwarf2.c (check_function_name): New function.
+ (_bfd_dwarf2_find_nearest_line): Use check_function_name to
+ check if function is correct.
+
+2006-02-16 Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c (_bfd_elf_default_action_discarded): Return 0 for
+ debug sections.
+ (elf_link_input_bfd): Adjust comments.
+
+2006-02-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf.c (copy_private_bfd_data): Minor update.
+
+2006-02-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/2258
+ * elf.c (copy_private_bfd_data): Renamed to ...
+ (rewrite_elf_program_header): This.
+ (copy_elf_program_header): New function.
+ (copy_private_bfd_data): Likewise.
+
+2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
+
+ * archures.c (bfd_mach_mcf5200, bfd_mach_mcf5206e,
+ bfd_mach_mcf5307, bfd_mach_mcf5407, bfd_mach_mcf528x,
+ bfd_mach_mcfv4e, bfd_mach_mcf521x, bfd_mach_mcf5249,
+ bfd_mach_mcf547x, bfd_mach_mcf548x): Remove.
+ (bfd_mach_mcf_isa_a, bfd_mach_mcf_isa_a_div,
+ bfd_mach_mcf_isa_a_div_mac, bfd_mach_mcf_isa_a_div_emac,
+ bfd_mach_mcf_isa_aplus, bfd_mach_mcf_isa_aplus_mac,
+ bfd_mach_mcf_isa_aplus_emac, bfd_mach_mcf_isa_aplus_usp,
+ bfd_mach_mcf_isa_aplus_usp_mac, bfd_mach_mcf_isa_aplus_usp_emac,
+ bfd_mach_mcf_isa_b, bfd_mach_mcf_isa_b_mac, bfd_mach_mcf_isa_b_emac,
+ bfd_mach_mcf_isa_b_usp_float, bfd_mach_mcf_isa_b_usp_float_mac,
+ bfd_mach_mcf_isa_b_usp_float_emac): New.
+ (bfd_default_scan): Update coldfire mapping.
+ * bfd-in.h (bfd_m68k_mach_to_features,
+ bfd_m68k_features_to_mach): Declare.
+ * bfd-in2.h: Rebuilt.
+ * cpu-m68k.c (arch_info_struct): Add new coldfire machines,
+ adjust legacy names.
+ (m68k_arch_features): New.
+ (bfd_m68k_mach_to_features,
+ bfd_m68k_features_to_mach): Define.
+ * elf32-m68k.c (elf32_m68k_object_p): New.
+ (elf32_m68k_merge_private_bfd_data): Merge the CF EF flags.
+ (elf32_m68k_print_private_bfd_data): Print the CF EF flags.
+ (elf_backend_object_p): Define.
+ * ieee.c (ieee_write_processor): Update coldfire machines.
+ * libbfd.h: Rebuilt.
+
+2006-02-06 Steve Ellcey <sje@cup.hp.com>
+
+ * elfxx-ia64.c (elfNN_ia64_fake_sections): Set SHF_IA_64_HP_TLS
+ if SHF_TLS is set.
+
+2006-02-05 Arnold Metselaar <arnold.metselaar@planet.nl>
+
+ * coff-z80.c (r_imm24): New howto.
+ (rtype2howto): New case R_IMM24.
+ (coff_z80_reloc_type_lookup): New case BFD_RELOC_24.
+ (extra_case): Use bfd_get_8 for R_IMM8, new case R_IMM24.
+
+2006-02-04 Richard Sandiford <richard@codesourcery.com>
+
+ * elfxx-mips.c (mips_elf_initialize_tls_index): If a TLS symbol
+ has already been assigned a GOT index, copy that index to the
+ current hash table entry.
+
+2006-02-01 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Reinstate bypass
+ for call-to-undefweak reloc overflow.
+
+2006-01-31 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Reinstate bypass
+ for 32-bit relocs overflow.
+
+2006-01-27 Paul Brook <paul@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_get_symbol_type): Allow STT_TLS thumb
+ objects.
+
+2006-01-18 Alexandre Oliva <aoliva@redhat.com>
+
+ Introduce TLS descriptors for i386 and x86_64.
+ * reloc.c (BFD_RELOC_386_TLS_GOTDESC, BFD_RELOC_386_TLS_DESC,
+ BFD_RELOC_386_TLS_DESC_CALL, BFD_RELOC_X86_64_GOTPC32_TLSDESC,
+ BFD_RELOC_X86_64_TLSDESC, BFD_RELOC_X86_64_TLSDESC_CALL): New.
+ * libbfd.h, bfd-in2.h: Rebuilt.
+ * elf32-i386.c (elf_howto_table): New relocations.
+ (R_386_tls): Adjust.
+ (elf_i386_reloc_type_lookup): Map new relocations.
+ (GOT_TLS_GDESC, GOT_TLS_GD_BOTH_P): New macros.
+ (GOT_TLS_GD_P, GOT_TLS_GDESC_P, GOT_TLS_GD_ANY_P): New macros.
+ (struct elf_i386_link_hash_entry): Add tlsdesc_got field.
+ (struct elf_i386_obj_tdata): Add local_tlsdesc_gotent field.
+ (elf_i386_local_tlsdesc_gotent): New macro.
+ (struct elf_i386_link_hash_table): Add sgotplt_jump_table_size.
+ (elf_i386_compute_jump_table_size): New macro.
+ (link_hash_newfunc): Initialize tlsdesc_got.
+ (elf_i386_link_hash_table_create): Set sgotplt_jump_table_size.
+ (elf_i386_tls_transition): Handle R_386_TLS_GOTDESC and
+ R_386_TLS_DESC_CALL.
+ (elf_i386_check_relocs): Likewise. Allocate space for
+ local_tlsdesc_gotent.
+ (elf_i386_gc_sweep_hook): Handle R_386_TLS_GOTDESC and
+ R_386_TLS_DESC_CALL.
+ (allocate_dynrelocs): Count function PLT relocations. Reserve
+ space for TLS descriptors and relocations.
+ (elf_i386_size_dynamic_sections): Reserve space for TLS
+ descriptors and relocations. Set up sgotplt_jump_table_size.
+ Don't zero reloc_count in srelplt.
+ (elf_i386_always_size_sections): New. Set up _TLS_MODULE_BASE_.
+ (elf_i386_relocate_section): Handle R_386_TLS_GOTDESC and
+ R_386_TLS_DESC_CALL.
+ (elf_i386_finish_dynamic_symbol): Use GOT_TLS_GD_ANY_P.
+ (elf_backend_always_size_sections): Define.
+ * elf64-x86-64.c (x86_64_elf_howto): Add R_X86_64_GOTPC32_TLSDESC,
+ R_X86_64_TLSDESC, R_X86_64_TLSDESC_CALL.
+ (R_X86_64_standard): Adjust.
+ (x86_64_reloc_map): Map new relocs.
+ (elf64_x86_64_rtype_to_howto): New, split out of...
+ (elf64_x86_64_info_to_howto): ... this function, and...
+ (elf64_x86_64_reloc_type_lookup): ... use it to map elf_reloc_val.
+ (GOT_TLS_GDESC, GOT_TLS_GD_BOTH_P): New macros.
+ (GOT_TLS_GD_P, GOT_TLS_GDESC_P, GOT_TLS_GD_ANY_P): New macros.
+ (struct elf64_x86_64_link_hash_entry): Add tlsdesc_got field.
+ (struct elf64_x86_64_obj_tdata): Add local_tlsdesc_gotent field.
+ (elf64_x86_64_local_tlsdesc_gotent): New macro.
+ (struct elf64_x86_64_link_hash_table): Add tlsdesc_plt,
+ tlsdesc_got and sgotplt_jump_table_size fields.
+ (elf64_x86_64_compute_jump_table_size): New macro.
+ (link_hash_newfunc): Initialize tlsdesc_got.
+ (elf64_x86_64_link_hash_table_create): Initialize new fields.
+ (elf64_x86_64_tls_transition): Handle R_X86_64_GOTPC32_TLSDESC and
+ R_X86_64_TLSDESC_CALL.
+ (elf64_x86_64_check_relocs): Likewise. Allocate space for
+ local_tlsdesc_gotent.
+ (elf64_x86_64_gc_sweep_hook): Handle R_X86_64_GOTPC32_TLSDESC and
+ R_X86_64_TLSDESC_CALL.
+ (allocate_dynrelocs): Count function PLT relocations. Reserve
+ space for TLS descriptors and relocations.
+ (elf64_x86_64_size_dynamic_sections): Reserve space for TLS
+ descriptors and relocations. Set up sgotplt_jump_table_size,
+ tlsdesc_plt and tlsdesc_got. Make room for them. Don't zero
+ reloc_count in srelplt. Add dynamic entries for DT_TLSDESC_PLT
+ and DT_TLSDESC_GOT.
+ (elf64_x86_64_always_size_sections): New. Set up
+ _TLS_MODULE_BASE_.
+ (elf64_x86_64_relocate_section): Handle R_386_TLS_GOTDESC and
+ R_386_TLS_DESC_CALL.
+ (elf64_x86_64_finish_dynamic_symbol): Use GOT_TLS_GD_ANY_P.
+ (elf64_x86_64_finish_dynamic_sections): Set DT_TLSDESC_PLT and
+ DT_TLSDESC_GOT. Set up TLS descriptor lazy resolver PLT entry.
+ (elf_backend_always_size_sections): Define.
+
+2006-01-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/2096
+ * dwarf2.c (comp_unit_contains_address): Update comment.
+ (_bfd_dwarf2_find_nearest_line): Use section's vma, instead of
+ lma. Return TRUE only if both comp_unit_contains_address and
+ comp_unit_find_nearest_line return TRUE.
+ (_bfd_dwarf2_find_line): Use section's vma, instead of lma.
+
+2006-01-18 Alan Modra <amodra@bigpond.net.au>
+
+ * elf-bfd.h (struct elf_backend_data): Add gc_mark_dynamic_ref.
+ (bfd_elf_gc_mark_dynamic_ref_symbol): Declare.
+ * elflink.c (bfd_elf_gc_mark_dynamic_ref_symbol): Rename from
+ elf_gc_mark_dynamic_ref_symbol. Make global.
+ (bfd_elf_gc_sections): Call bed->gc_mark_dynamic_ref.
+ * elfxx-target.h (elf_backend_gc_mark_dynamic_ref): Define.
+ (elfNN_bed): Init new field.
+ * elf64-ppc.c (elf_backend_gc_mark_dynamic_ref): Define.
+ (ppc64_elf_gc_mark_dynamic_ref): New function.
+
+2006-01-17 Alan Modra <amodra@bigpond.net.au>
+
+ * elf64-ppc.c (ppc64_elf_gc_mark_hook): Don't hang forever in loop.
+
+2006-01-17 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/2159
+ * elf.c (elfcore_write_pstatus): Add ATTRIBUTE_UNUSED to unused
+ parameters.
+
+2006-01-11 Nick Clifton <nickc@redhat.com>
+
+ * elf32-arm.c (elf32_arm_output_symbol_hook): Install new entry
+ into the newly (re)allocated map array.
+
+2006-01-09 Alexis Wilke <alexis_wilke@yahoo.com>
+
+ * peXXigen.c (tbl): Add comma after "HIGH3ADJ".
+
+2006-01-01 Jakub Jelinek <jakub@redhat.com>
+
+ * elf64-ppc.c (ppc64_elf_action_discarded): Return 0
+ for .toc1 section.
+
+For older changes see ChangeLog-2005
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/bfd/Makefile.am b/bfd/Makefile.am
index 77278a832a16..48919af759b6 100644
--- a/bfd/Makefile.am
+++ b/bfd/Makefile.am
@@ -1,6 +1,7 @@
## Process this file with automake to generate Makefile.in
AUTOMAKE_OPTIONS = 1.9 cygnus
+ACLOCAL_AMFLAGS = -I . -I .. -I ../config
# Uncomment the following line when doing a release.
# RELEASE=y
@@ -63,6 +64,7 @@ ALL_MACHINES = \
cpu-arm.lo \
cpu-avr.lo \
cpu-bfin.lo \
+ cpu-cr16.lo \
cpu-cr16c.lo \
cpu-cris.lo \
cpu-crx.lo \
@@ -91,6 +93,7 @@ ALL_MACHINES = \
cpu-m10300.lo \
cpu-maxq.lo \
cpu-mcore.lo \
+ cpu-mep.lo \
cpu-mips.lo \
cpu-mmix.lo \
cpu-mt.lo \
@@ -103,8 +106,10 @@ ALL_MACHINES = \
cpu-powerpc.lo \
cpu-rs6000.lo \
cpu-s390.lo \
+ cpu-score.lo \
cpu-sh.lo \
cpu-sparc.lo \
+ cpu-spu.lo \
cpu-tic30.lo \
cpu-tic4x.lo \
cpu-tic54x.lo \
@@ -125,6 +130,7 @@ ALL_MACHINES_CFILES = \
cpu-arm.c \
cpu-avr.c \
cpu-bfin.c \
+ cpu-cr16.c \
cpu-cris.c \
cpu-cr16c.c \
cpu-crx.c \
@@ -153,6 +159,7 @@ ALL_MACHINES_CFILES = \
cpu-m10300.c \
cpu-maxq.c \
cpu-mcore.c \
+ cpu-mep.c \
cpu-mips.c \
cpu-mmix.c \
cpu-mt.c \
@@ -165,8 +172,10 @@ ALL_MACHINES_CFILES = \
cpu-powerpc.c \
cpu-rs6000.c \
cpu-s390.c \
+ cpu-score.c \
cpu-sh.c \
cpu-sparc.c \
+ cpu-spu.c \
cpu-tic30.c \
cpu-tic4x.c \
cpu-tic54x.c \
@@ -235,6 +244,7 @@ BFD32_BACKENDS = \
elf32-arm.lo \
elf32-avr.lo \
elf32-bfin.lo \
+ elf32-cr16.lo \
elf32-cr16c.lo \
elf32-cris.lo \
elf32-crx.lo \
@@ -262,6 +272,7 @@ BFD32_BACKENDS = \
elf-m10200.lo \
elf-m10300.lo \
elf32-mcore.lo \
+ elf32-mep.lo \
elfxx-mips.lo \
elf32-mips.lo \
elf32-mt.lo \
@@ -271,12 +282,14 @@ BFD32_BACKENDS = \
elf32-pj.lo \
elf32-ppc.lo \
elf32-s390.lo \
+ elf32-score.lo \
elf32-sh.lo \
elf32-sh-symbian.lo \
elf32-sh64.lo \
elf32-sh64-com.lo \
elfxx-sparc.lo \
elf32-sparc.lo \
+ elf32-spu.lo \
elf32-v850.lo \
elf32-vax.lo \
elf32-xstormy16.lo \
@@ -284,6 +297,7 @@ BFD32_BACKENDS = \
elf32-xc16x.lo \
elf32.lo \
elflink.lo \
+ elf-attrs.lo \
elf-strtab.lo \
elf-eh-frame.lo \
elf-vxworks.lo \
@@ -323,6 +337,8 @@ BFD32_BACKENDS = \
pef.lo \
pe-arm.lo \
pei-arm.lo \
+ pe-arm-wince.lo \
+ pei-arm-wince.lo \
pe-i386.lo \
pei-i386.lo \
pe-mcore.lo \
@@ -407,6 +423,7 @@ BFD32_BACKENDS_CFILES = \
elf32-arm.c \
elf32-avr.c \
elf32-bfin.c \
+ elf32-cr16.c \
elf32-cr16c.c \
elf32-cris.c \
elf32-crx.c \
@@ -434,6 +451,7 @@ BFD32_BACKENDS_CFILES = \
elf-m10200.c \
elf-m10300.c \
elf32-mcore.c \
+ elf32-mep.c \
elfxx-mips.c \
elf32-mips.c \
elf32-mt.c \
@@ -445,10 +463,12 @@ BFD32_BACKENDS_CFILES = \
elf32-sh64.c \
elf32-sh64-com.c \
elf32-s390.c \
+ elf32-score.c \
elf32-sh.c \
elf32-sh-symbian.c \
elfxx-sparc.c \
elf32-sparc.c \
+ elf32-spu.c \
elf32-v850.c \
elf32-vax.c \
elf32-xstormy16.c \
@@ -456,6 +476,7 @@ BFD32_BACKENDS_CFILES = \
elf32-xc16x.c \
elf32.c \
elflink.c \
+ elf-attrs.c \
elf-strtab.c \
elf-eh-frame.c \
elf-vxworks.c \
@@ -495,6 +516,8 @@ BFD32_BACKENDS_CFILES = \
pef.c \
pe-arm.c \
pei-arm.c \
+ pe-arm-wince.c \
+ pei-arm-wince.c \
pe-i386.c \
pei-i386.c \
pe-mcore.c \
@@ -538,6 +561,7 @@ BFD64_BACKENDS = \
coff64-rs6000.lo \
demo64.lo \
efi-app-ia64.lo \
+ efi-app-x86_64.lo \
elf64-x86-64.lo \
elf64-alpha.lo \
elf64-hppa.lo \
@@ -555,7 +579,11 @@ BFD64_BACKENDS = \
mmo.lo \
nlm32-alpha.lo \
nlm64.lo \
- pepigen.lo
+ coff-x86_64.lo \
+ pe-x86_64.lo \
+ pei-x86_64.lo \
+ pepigen.lo \
+ pex64igen.lo
BFD64_BACKENDS_CFILES = \
aix5ppc-core.c \
@@ -564,6 +592,7 @@ BFD64_BACKENDS_CFILES = \
coff64-rs6000.c \
demo64.c \
efi-app-ia64.c \
+ efi-app-x86_64.c \
elf64-x86-64.c \
elf64-alpha.c \
elf64-hppa.c \
@@ -578,7 +607,10 @@ BFD64_BACKENDS_CFILES = \
elf64.c \
mmo.c \
nlm32-alpha.c \
- nlm64.c
+ nlm64.c \
+ coff-x86_64.c \
+ pe-x86_64.c \
+ pei-x86_64.c
OPTIONAL_BACKENDS = \
aix386-core.lo \
@@ -612,11 +644,10 @@ CONFIG_STATUS_DEPENDENCIES = \
WORDSIZE = @wordsize@
ALL_BACKENDS = @all_backends@
BFD_BACKENDS = @bfd_backends@
-BFD_LIBS = @bfd_libs@
BFD_MACHINES = @bfd_machines@
TDEFAULTS = @tdefaults@
-INCLUDES = @HDEFINES@ @COREFLAG@ @TDEFINES@ $(CSEARCH) $(CSWITCHES) -I$(srcdir)/../intl -I../intl
+INCLUDES = @HDEFINES@ @COREFLAG@ @TDEFINES@ $(CSEARCH) $(CSWITCHES) @INCINTL@
# C source files that correspond to .o's.
SOURCE_CFILES = \
@@ -628,7 +659,7 @@ SOURCE_CFILES = \
$(OPTIONAL_BACKENDS_CFILES)
BUILD_CFILES = \
- elf32-ia64.c elf64-ia64.c peigen.c pepigen.c
+ elf32-ia64.c elf64-ia64.c peigen.c pepigen.c pex64igen.c
CFILES = $(SOURCE_CFILES) $(BUILD_CFILES)
@@ -698,7 +729,8 @@ install-html-recursive:
# BFD_BACKENDS Routines the configured targets need.
# BFD_MACHINES Architecture-specific routines the configured targets need.
# COREFILE Core file routines for a native configuration
-OFILES = $(BFD_BACKENDS) $(BFD_MACHINES) @COREFILE@
+# bfd64_libs Routines for 64bit support
+OFILES = $(BFD_BACKENDS) $(BFD_MACHINES) @COREFILE@ @bfd64_libs@
stamp-ofiles: Makefile
rm -f tofiles
@@ -715,10 +747,12 @@ stamp-ofiles: Makefile
ofiles: stamp-ofiles ; @true
-libbfd_la_SOURCES = $(BFD32_LIBS_CFILES) $(BFD64_LIBS_CFILES)
+# Since BFD64_LIBS is optional and we can't have substitution in
+# libbfd_la_SOURCES, we put BFD64_LIBS in OFILES instead.
+libbfd_la_SOURCES = $(BFD32_LIBS_CFILES)
libbfd_la_DEPENDENCIES = $(OFILES) ofiles
libbfd_la_LIBADD = `cat ofiles` @WIN32LIBADD@
-libbfd_la_LDFLAGS = -release $(VERSION) @WIN32LDFLAGS@
+libbfd_la_LDFLAGS = -release `cat libtool-soversion` @WIN32LDFLAGS@
# libtool will build .libs/libbfd.a. We create libbfd.a in the build
# directory so that we don't have to convert all the programs that use
@@ -756,6 +790,9 @@ targets.lo: targets.c Makefile
archures.lo: archures.c Makefile
$(LIBTOOL) --mode=compile $(COMPILE) -c $(TDEFAULTS) $(srcdir)/archures.c
+dwarf2.lo: dwarf2.c Makefile
+ $(LIBTOOL) --mode=compile $(COMPILE) -c -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c
+
elf32-target.h : elfxx-target.h
rm -f elf32-target.h
sed -e s/NN/32/g < $(srcdir)/elfxx-target.h > elf32-target.new
@@ -786,6 +823,11 @@ pepigen.c : peXXigen.c
sed -e s/XX/pep/g < $(srcdir)/peXXigen.c > pepigen.new
mv -f pepigen.new pepigen.c
+pex64igen.c: peXXigen.c
+ rm -f pex64igen.c
+ sed -e s/XX/pex64/g < $(srcdir)/peXXigen.c > pex64igen.new
+ mv -f pex64igen.new pex64igen.c
+
BFD_H_DEPS= $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
LOCAL_H_DEPS= libbfd.h sysdep.h config.h
$(BFD32_LIBS) \
@@ -929,17 +971,26 @@ MOSTLYCLEANFILES = ofiles stamp-ofiles
CLEANFILES = bfd.h dep.sed stmp-bfd-h DEP DEPA DEP1 DEP2 libbfd.a stamp-lib \
stmp-bin2-h stmp-lbfd-h stmp-lcoff-h
-DISTCLEANFILES = $(BUILD_CFILES) $(BUILD_HFILES)
+DISTCLEANFILES = $(BUILD_CFILES) $(BUILD_HFILES) libtool-soversion
bfdver.h: $(srcdir)/version.h $(srcdir)/Makefile.in
@echo "creating $@"
@bfd_version=`echo "$(VERSION)" | sed -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
bfd_version_string="\"$(VERSION)\"" ;\
+ bfd_soversion="$(VERSION)" ;\
+ bfd_version_package="\"$(PKGVERSION)\"" ;\
+ report_bugs_to="\"$(REPORT_BUGS_TO)\"" ;\
if test "x$(RELEASE)" = x ; then \
bfd_version_date=`sed -n -e 's/.*DATE //p' < $(srcdir)/version.h` ;\
- bfd_version_string="\"$(VERSION) $${bfd_version_date}\"" ;\
+ bfd_version_string="\"$(VERSION).$${bfd_version_date}\"" ;\
+ bfd_soversion="$(VERSION).$${bfd_version_date}" ;\
fi ;\
- sed -e "s/@bfd_version@/$$bfd_version/" -e "s/@bfd_version_string@/$$bfd_version_string/" < $(srcdir)/version.h > $@
+ sed -e "s,@bfd_version@,$$bfd_version," \
+ -e "s,@bfd_version_string@,$$bfd_version_string," \
+ -e "s,@bfd_version_package@,$$bfd_version_package," \
+ -e "s,@report_bugs_to@,$$report_bugs_to," \
+ < $(srcdir)/version.h > $@; \
+ echo "$${bfd_soversion}" > libtool-soversion
# What appears below is generated by a hacked mkdep using gcc -MM.
@@ -950,11 +1001,12 @@ archive.lo: archive.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
$(INCDIR)/safe-ctype.h
archures.lo: archures.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/safe-ctype.h
-bfd.lo: bfd.c bfdver.h $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h \
- $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h libcoff.h \
- libecoff.h $(INCDIR)/coff/ecoff.h elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h
+bfd.lo: bfd.c $(INCDIR)/filenames.h bfdver.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/demangle.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/sym.h libcoff.h libecoff.h $(INCDIR)/coff/ecoff.h \
+ elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h
bfdio.lo: bfdio.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
bfdwin.lo: bfdwin.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cache.lo: cache.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
@@ -1008,6 +1060,7 @@ cpu-arm.lo: cpu-arm.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/libiberty.h
cpu-avr.lo: cpu-avr.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-bfin.lo: cpu-bfin.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
+cpu-cr16.lo: cpu-cr16.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-cris.lo: cpu-cris.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-cr16c.lo: cpu-cr16c.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-crx.lo: cpu-crx.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
@@ -1040,6 +1093,7 @@ cpu-m10200.lo: cpu-m10200.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-m10300.lo: cpu-m10300.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-maxq.lo: cpu-maxq.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mcore.lo: cpu-mcore.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
+cpu-mep.lo: cpu-mep.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mips.lo: cpu-mips.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mmix.lo: cpu-mmix.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mt.lo: cpu-mt.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
@@ -1055,9 +1109,11 @@ cpu-powerpc.lo: cpu-powerpc.c $(INCDIR)/filenames.h \
$(INCDIR)/hashtab.h
cpu-rs6000.lo: cpu-rs6000.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-s390.lo: cpu-s390.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
+cpu-score.lo: cpu-score.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-sh.lo: cpu-sh.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(srcdir)/../opcodes/sh-opc.h
cpu-sparc.lo: cpu-sparc.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
+cpu-spu.lo: cpu-spu.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-tic30.lo: cpu-tic30.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-tic4x.lo: cpu-tic4x.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-tic54x.lo: cpu-tic54x.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
@@ -1127,7 +1183,8 @@ coff-arm.lo: coff-arm.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h
coff-aux.lo: coff-aux.c $(INCDIR)/filenames.h $(INCDIR)/coff/aux-coff.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h \
- coff-m68k.c $(INCDIR)/hashtab.h libcoff.h $(INCDIR)/bfdlink.h \
+ coff-m68k.c $(INCDIR)/hashtab.h $(INCDIR)/coff/m68k.h \
+ $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \
coffcode.h coffswap.h
coff-h8300.lo: coff-h8300.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/bfdlink.h genlink.h $(INCDIR)/coff/h8300.h \
@@ -1197,7 +1254,7 @@ coff-tic54x.lo: coff-tic54x.c $(INCDIR)/filenames.h \
$(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/coff/tic54x.h \
$(INCDIR)/coff/ti.h $(INCDIR)/coff/internal.h libcoff.h \
coffcode.h coffswap.h
-coff-tic80.lo: coff-tic80.c $(INCDIR)/bfdlink.h $(INCDIR)/filenames.h \
+coff-tic80.lo: coff-tic80.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h $(INCDIR)/coff/tic80.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h
coff-u68k.lo: coff-u68k.c coff-m68k.c $(INCDIR)/filenames.h \
@@ -1260,11 +1317,16 @@ elf32-arm.lo: elf32-arm.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
elf32-avr.lo: elf32-avr.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/avr.h \
- $(INCDIR)/elf/reloc-macros.h elf32-target.h
+ $(INCDIR)/elf/reloc-macros.h elf32-avr.h elf32-target.h
elf32-bfin.lo: elf32-bfin.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/bfin.h \
- $(INCDIR)/elf/reloc-macros.h elf32-target.h
+ $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/dwarf2.h \
+ elf32-target.h
+elf32-cr16.lo: elf32-cr16.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/elf/cr16.h $(INCDIR)/elf/reloc-macros.h elf32-target.h
elf32-cr16c.lo: elf32-cr16c.c $(INCDIR)/filenames.h \
$(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/cr16c.h \
$(INCDIR)/elf/reloc-macros.h elf-bfd.h $(INCDIR)/elf/common.h \
@@ -1378,19 +1440,24 @@ elf32-mcore.lo: elf32-mcore.c $(INCDIR)/filenames.h \
$(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/mcore.h \
$(INCDIR)/elf/reloc-macros.h elf32-target.h
+elf32-mep.lo: elf32-mep.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
+ elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/mep.h \
+ $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \
+ elf32-target.h
elfxx-mips.lo: elfxx-mips.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/libiberty.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
elfxx-mips.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h \
- $(INCDIR)/coff/mips.h $(INCDIR)/coff/external.h elf-vxworks.h
+ elf-vxworks.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h \
+ $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/mips.h $(INCDIR)/coff/external.h
elf32-mips.lo: elf32-mips.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/bfdlink.h genlink.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h elfxx-mips.h \
- $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/symconst.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h elf-vxworks.h \
+ $(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h $(INCDIR)/coff/internal.h \
$(INCDIR)/coff/ecoff.h $(INCDIR)/coff/mips.h $(INCDIR)/coff/external.h \
- ecoffswap.h elf32-target.h elf-vxworks.h
+ ecoffswap.h elf32-target.h
elf32-mt.lo: elf32-mt.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/mt.h \
@@ -1422,9 +1489,9 @@ elf32-ppc.lo: elf32-ppc.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
elf32-sh64.lo: elf32-sh64.c $(INCDIR)/filenames.h elf-bfd.h \
$(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
$(INCDIR)/bfdlink.h $(srcdir)/../opcodes/sh64-opc.h \
- elf32-sh64.h elf32-sh.c $(INCDIR)/hashtab.h $(INCDIR)/elf/sh.h \
- $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \
- $(srcdir)/../opcodes/sh-opc.h elf32-target.h
+ elf32-sh64.h elf32-sh.c $(INCDIR)/hashtab.h elf-vxworks.h \
+ $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \
+ $(srcdir)/../opcodes/sh-opc.h elf32-sh-relocs.h elf32-target.h
elf32-sh64-com.lo: elf32-sh64-com.c $(INCDIR)/filenames.h \
$(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
@@ -1434,27 +1501,36 @@ elf32-s390.lo: elf32-s390.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/s390.h \
$(INCDIR)/elf/reloc-macros.h elf32-target.h
+elf32-score.lo: elf32-score.c $(INCDIR)/filenames.h \
+ $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/elf/score.h $(INCDIR)/elf/reloc-macros.h \
+ elf32-target.h
elf32-sh.lo: elf32-sh.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/sh.h \
- $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \
- $(srcdir)/../opcodes/sh-opc.h elf32-target.h
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h elf-vxworks.h \
+ $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \
+ $(srcdir)/../opcodes/sh-opc.h elf32-sh-relocs.h elf32-target.h
elf32-sh-symbian.lo: elf32-sh-symbian.c elf32-sh.c \
$(INCDIR)/filenames.h $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/libiberty.h $(srcdir)/../opcodes/sh-opc.h \
- elf32-target.h
+ $(INCDIR)/elf/external.h elf-vxworks.h $(INCDIR)/elf/sh.h \
+ $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \
+ $(srcdir)/../opcodes/sh-opc.h elf32-sh-relocs.h elf32-target.h
elfxx-sparc.lo: elfxx-sparc.c $(INCDIR)/filenames.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/sparc.h \
- $(INCDIR)/elf/reloc-macros.h $(INCDIR)/opcode/sparc.h \
- elfxx-sparc.h elf-vxworks.h
+ $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h \
+ elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/elf/sparc.h $(INCDIR)/elf/reloc-macros.h \
+ $(INCDIR)/opcode/sparc.h elfxx-sparc.h elf-vxworks.h
elf32-sparc.lo: elf32-sparc.c $(INCDIR)/filenames.h \
$(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/sparc.h \
$(INCDIR)/elf/reloc-macros.h $(INCDIR)/opcode/sparc.h \
- elfxx-sparc.h elf32-target.h elf-vxworks.h
+ elfxx-sparc.h elf-vxworks.h elf32-target.h
+elf32-spu.lo: elf32-spu.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/spu.h \
+ $(INCDIR)/elf/reloc-macros.h elf32-spu.h elf32-target.h
elf32-v850.lo: elf32-v850.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/v850.h \
@@ -1486,6 +1562,9 @@ elflink.lo: elflink.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/safe-ctype.h \
$(INCDIR)/libiberty.h $(INCDIR)/objalloc.h
+elf-attrs.lo: elf-attrs.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h
elf-strtab.lo: elf-strtab.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h
@@ -1570,7 +1649,7 @@ m88kopenbsd.lo: m88kopenbsd.c netbsd.h $(INCDIR)/filenames.h \
$(INCDIR)/hashtab.h libaout.h $(INCDIR)/bfdlink.h aout-target.h \
$(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \
$(INCDIR)/aout/ar.h
-mach-o.lo: mach-o.c mach-o.h $(INCDIR)/filenames.h \
+mach-o.lo: mach-o.c $(INCDIR)/filenames.h mach-o.h \
$(INCDIR)/hashtab.h $(INCDIR)/libiberty.h mach-o-target.c
mipsbsd.lo: mipsbsd.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
libaout.h $(INCDIR)/bfdlink.h aout-target.h $(INCDIR)/aout/aout64.h \
@@ -1610,8 +1689,8 @@ pdp11.lo: pdp11.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
libaout.h $(INCDIR)/bfdlink.h aout-target.h $(INCDIR)/aout/aout64.h \
$(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h \
$(INCDIR)/safe-ctype.h
-pef.lo: pef.c $(INCDIR)/safe-ctype.h pef.h pef-traceback.h \
- $(INCDIR)/filenames.h $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h
+pef.lo: pef.c $(INCDIR)/filenames.h $(INCDIR)/safe-ctype.h \
+ pef.h pef-traceback.h $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h
pe-arm.lo: pe-arm.c $(INCDIR)/filenames.h coff-arm.c \
$(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
@@ -1620,6 +1699,16 @@ pei-arm.lo: pei-arm.c $(INCDIR)/filenames.h coff-arm.c \
$(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
$(INCDIR)/bfdlink.h coffcode.h peicode.h libpei.h
+pe-arm-wince.lo: pe-arm-wince.c pe-arm.c $(INCDIR)/filenames.h \
+ coff-arm.c $(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h \
+ $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
+ peicode.h libpei.h
+pei-arm-wince.lo: pei-arm-wince.c pei-arm.c $(INCDIR)/filenames.h \
+ coff-arm.c $(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h \
+ $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
+ peicode.h libpei.h
pe-i386.lo: pe-i386.c $(INCDIR)/filenames.h coff-i386.c \
$(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
@@ -1662,7 +1751,7 @@ pei-mips.lo: pei-mips.c $(INCDIR)/filenames.h pe-mips.c \
$(INCDIR)/hashtab.h $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
$(INCDIR)/bfdlink.h coffcode.h peicode.h libpei.h
-ppcboot.lo: ppcboot.c $(INCDIR)/safe-ctype.h $(INCDIR)/filenames.h \
+ppcboot.lo: ppcboot.c $(INCDIR)/filenames.h $(INCDIR)/safe-ctype.h \
$(INCDIR)/hashtab.h
reloc16.lo: reloc16.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/bfdlink.h genlink.h $(INCDIR)/coff/internal.h \
@@ -1703,7 +1792,7 @@ vms.lo: vms.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h vms.h
vms-gsd.lo: vms-gsd.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h vms.h
-vms-hdr.lo: vms-hdr.c bfdver.h $(INCDIR)/filenames.h \
+vms-hdr.lo: vms-hdr.c $(INCDIR)/filenames.h bfdver.h \
$(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h $(INCDIR)/hashtab.h \
vms.h
vms-misc.lo: vms-misc.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
@@ -1713,12 +1802,12 @@ vms-tir.lo: vms-tir.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
xcofflink.lo: xcofflink.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/xcoff.h \
libcoff.h libxcoff.h
-xsym.lo: xsym.c xsym.h $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
+xsym.lo: xsym.c $(INCDIR)/filenames.h xsym.h $(INCDIR)/hashtab.h
xtensa-isa.lo: xtensa-isa.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/xtensa-isa.h $(INCDIR)/xtensa-isa-internal.h
xtensa-modules.lo: xtensa-modules.c $(INCDIR)/xtensa-isa.h \
$(INCDIR)/xtensa-isa-internal.h
-aix5ppc-core.lo: aix5ppc-core.c
+aix5ppc-core.lo: aix5ppc-core.c $(INCDIR)/filenames.h
aout64.lo: aout64.c aoutx.h $(INCDIR)/filenames.h $(INCDIR)/safe-ctype.h \
$(INCDIR)/bfdlink.h libaout.h $(INCDIR)/hashtab.h $(INCDIR)/aout/aout64.h \
$(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h
@@ -1740,6 +1829,11 @@ efi-app-ia64.lo: efi-app-ia64.c $(INCDIR)/filenames.h \
$(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
$(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
peicode.h libpei.h
+efi-app-x86_64.lo: efi-app-x86_64.c $(INCDIR)/filenames.h \
+ coff-x86_64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h \
+ $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h \
+ coffcode.h peicode.h libpei.h
elf64-x86-64.lo: elf64-x86-64.c $(INCDIR)/filenames.h \
$(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/x86-64.h \
@@ -1808,6 +1902,21 @@ nlm32-alpha.lo: nlm32-alpha.c $(INCDIR)/filenames.h \
nlm64.lo: nlm64.c nlmcode.h $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
libnlm.h $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h \
$(INCDIR)/nlm/external.h
+coff-x86_64.lo: coff-x86_64.c $(INCDIR)/filenames.h \
+ $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h coffcode.h \
+ coffswap.h
+pe-x86_64.lo: pe-x86_64.c $(INCDIR)/filenames.h coff-x86_64.c \
+ $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h coffcode.h \
+ peicode.h libpei.h
+pei-x86_64.lo: pei-x86_64.c $(INCDIR)/filenames.h coff-x86_64.c \
+ $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h coffcode.h \
+ peicode.h libpei.h
aix386-core.lo: aix386-core.c $(INCDIR)/filenames.h \
$(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h
@@ -1824,16 +1933,19 @@ elf32-ia64.lo: elf32-ia64.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ia64.h \
$(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/objalloc.h \
- elf32-target.h
+ $(INCDIR)/hashtab.h elf32-target.h
elf64-ia64.lo: elf64-ia64.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ia64.h \
$(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/objalloc.h \
- elf64-target.h
+ $(INCDIR)/hashtab.h elf64-target.h
peigen.lo: peigen.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h libpei.h
pepigen.lo: pepigen.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/ia64.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h libpei.h
+pex64igen.lo: pex64igen.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
+ $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h libpei.h
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/bfd/Makefile.in b/bfd/Makefile.in
index 8ed905635617..8f4580e1821c 100644
--- a/bfd/Makefile.in
+++ b/bfd/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -15,8 +15,6 @@
@SET_MAKE@
-SOURCES = $(libbfd_a_SOURCES) $(libbfd_la_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
@@ -49,10 +47,17 @@ DIST_COMMON = $(srcdir)/../config.guess $(srcdir)/../config.sub README \
$(srcdir)/../config.sub
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/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__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
+ $(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/gettext-sister.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/nls.m4 $(top_srcdir)/../config/po.m4 \
+ $(top_srcdir)/../config/progtest.m4 \
+ $(top_srcdir)/../config/stdint.m4 $(top_srcdir)/../libtool.m4 \
+ $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
+ $(top_srcdir)/../ltversion.m4 $(top_srcdir)/bfd.m4 \
+ $(top_srcdir)/warning.m4 $(top_srcdir)/acinclude.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 \
@@ -80,19 +85,18 @@ am__objects_1 = archive.lo archures.lo bfd.lo bfdio.lo bfdwin.lo \
opncls.lo reloc.lo section.lo syms.lo targets.lo hash.lo \
linker.lo srec.lo binary.lo tekhex.lo ihex.lo stabs.lo \
stab-syms.lo merge.lo dwarf2.lo simple.lo
-am__objects_2 = archive64.lo
-am_libbfd_la_OBJECTS = $(am__objects_1) $(am__objects_2)
+am_libbfd_la_OBJECTS = $(am__objects_1)
libbfd_la_OBJECTS = $(am_libbfd_la_OBJECTS)
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) \
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libbfd_a_SOURCES) $(libbfd_la_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
@@ -105,7 +109,6 @@ ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
@@ -131,20 +134,24 @@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
+DEBUGDIR = @DEBUGDIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
+DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
-GMOFILES = @GMOFILES@
+FGREP = @FGREP@
+GENCAT = @GENCAT@
+GENINSRC_NEVER_FALSE = @GENINSRC_NEVER_FALSE@
+GENINSRC_NEVER_TRUE = @GENINSRC_NEVER_TRUE@
GMSGFMT = @GMSGFMT@
-GT_NO = @GT_NO@
-GT_YES = @GT_YES@
+GREP = @GREP@
HDEFINES = @HDEFINES@
-INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
+INCINTL = @INCINTL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_LIBBFD_FALSE = @INSTALL_LIBBFD_FALSE@
INSTALL_LIBBFD_TRUE = @INSTALL_LIBBFD_TRUE@
@@ -152,10 +159,10 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTOBJEXT = @INSTOBJEXT@
-INTLDEPS = @INTLDEPS@
-INTLLIBS = @INTLLIBS@
-INTLOBJS = @INTLOBJS@
+LD = @LD@
LDFLAGS = @LDFLAGS@
+LIBINTL = @LIBINTL@
+LIBINTL_DEP = @LIBINTL_DEP@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
@@ -167,6 +174,8 @@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
NO_WERROR = @NO_WERROR@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
@@ -176,14 +185,16 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-POFILES = @POFILES@
+PKGVERSION = @PKGVERSION@
POSUB = @POSUB@
RANLIB = @RANLIB@
+REPORT_BUGS_TEXI = @REPORT_BUGS_TEXI@
+REPORT_BUGS_TO = @REPORT_BUGS_TO@
+SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
TDEFINES = @TDEFINES@
-USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
@@ -192,6 +203,7 @@ WIN32LIBADD = @WIN32LIBADD@
XGETTEXT = @XGETTEXT@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
all_backends = @all_backends@
@@ -202,10 +214,10 @@ am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+bfd64_libs = @bfd64_libs@
bfd_backends = @bfd_backends@
bfd_default_target_size = @bfd_default_target_size@
bfd_file_ptr = @bfd_file_ptr@
-bfd_libs = @bfd_libs@
bfd_machines = @bfd_machines@
bfd_ufile_ptr = @bfd_ufile_ptr@
bfdincludedir = @bfdincludedir@
@@ -230,10 +242,10 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-l = @l@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -251,6 +263,7 @@ target_vendor = @target_vendor@
tdefaults = @tdefaults@
wordsize = @wordsize@
AUTOMAKE_OPTIONS = 1.9 cygnus
+ACLOCAL_AMFLAGS = -I . -I .. -I ../config
# Uncomment the following line when doing a release.
# RELEASE=y
@@ -299,6 +312,7 @@ ALL_MACHINES = \
cpu-arm.lo \
cpu-avr.lo \
cpu-bfin.lo \
+ cpu-cr16.lo \
cpu-cr16c.lo \
cpu-cris.lo \
cpu-crx.lo \
@@ -327,6 +341,7 @@ ALL_MACHINES = \
cpu-m10300.lo \
cpu-maxq.lo \
cpu-mcore.lo \
+ cpu-mep.lo \
cpu-mips.lo \
cpu-mmix.lo \
cpu-mt.lo \
@@ -339,8 +354,10 @@ ALL_MACHINES = \
cpu-powerpc.lo \
cpu-rs6000.lo \
cpu-s390.lo \
+ cpu-score.lo \
cpu-sh.lo \
cpu-sparc.lo \
+ cpu-spu.lo \
cpu-tic30.lo \
cpu-tic4x.lo \
cpu-tic54x.lo \
@@ -361,6 +378,7 @@ ALL_MACHINES_CFILES = \
cpu-arm.c \
cpu-avr.c \
cpu-bfin.c \
+ cpu-cr16.c \
cpu-cris.c \
cpu-cr16c.c \
cpu-crx.c \
@@ -389,6 +407,7 @@ ALL_MACHINES_CFILES = \
cpu-m10300.c \
cpu-maxq.c \
cpu-mcore.c \
+ cpu-mep.c \
cpu-mips.c \
cpu-mmix.c \
cpu-mt.c \
@@ -401,8 +420,10 @@ ALL_MACHINES_CFILES = \
cpu-powerpc.c \
cpu-rs6000.c \
cpu-s390.c \
+ cpu-score.c \
cpu-sh.c \
cpu-sparc.c \
+ cpu-spu.c \
cpu-tic30.c \
cpu-tic4x.c \
cpu-tic54x.c \
@@ -472,6 +493,7 @@ BFD32_BACKENDS = \
elf32-arm.lo \
elf32-avr.lo \
elf32-bfin.lo \
+ elf32-cr16.lo \
elf32-cr16c.lo \
elf32-cris.lo \
elf32-crx.lo \
@@ -499,6 +521,7 @@ BFD32_BACKENDS = \
elf-m10200.lo \
elf-m10300.lo \
elf32-mcore.lo \
+ elf32-mep.lo \
elfxx-mips.lo \
elf32-mips.lo \
elf32-mt.lo \
@@ -508,12 +531,14 @@ BFD32_BACKENDS = \
elf32-pj.lo \
elf32-ppc.lo \
elf32-s390.lo \
+ elf32-score.lo \
elf32-sh.lo \
elf32-sh-symbian.lo \
elf32-sh64.lo \
elf32-sh64-com.lo \
elfxx-sparc.lo \
elf32-sparc.lo \
+ elf32-spu.lo \
elf32-v850.lo \
elf32-vax.lo \
elf32-xstormy16.lo \
@@ -521,6 +546,7 @@ BFD32_BACKENDS = \
elf32-xc16x.lo \
elf32.lo \
elflink.lo \
+ elf-attrs.lo \
elf-strtab.lo \
elf-eh-frame.lo \
elf-vxworks.lo \
@@ -560,6 +586,8 @@ BFD32_BACKENDS = \
pef.lo \
pe-arm.lo \
pei-arm.lo \
+ pe-arm-wince.lo \
+ pei-arm-wince.lo \
pe-i386.lo \
pei-i386.lo \
pe-mcore.lo \
@@ -644,6 +672,7 @@ BFD32_BACKENDS_CFILES = \
elf32-arm.c \
elf32-avr.c \
elf32-bfin.c \
+ elf32-cr16.c \
elf32-cr16c.c \
elf32-cris.c \
elf32-crx.c \
@@ -671,6 +700,7 @@ BFD32_BACKENDS_CFILES = \
elf-m10200.c \
elf-m10300.c \
elf32-mcore.c \
+ elf32-mep.c \
elfxx-mips.c \
elf32-mips.c \
elf32-mt.c \
@@ -682,10 +712,12 @@ BFD32_BACKENDS_CFILES = \
elf32-sh64.c \
elf32-sh64-com.c \
elf32-s390.c \
+ elf32-score.c \
elf32-sh.c \
elf32-sh-symbian.c \
elfxx-sparc.c \
elf32-sparc.c \
+ elf32-spu.c \
elf32-v850.c \
elf32-vax.c \
elf32-xstormy16.c \
@@ -693,6 +725,7 @@ BFD32_BACKENDS_CFILES = \
elf32-xc16x.c \
elf32.c \
elflink.c \
+ elf-attrs.c \
elf-strtab.c \
elf-eh-frame.c \
elf-vxworks.c \
@@ -732,6 +765,8 @@ BFD32_BACKENDS_CFILES = \
pef.c \
pe-arm.c \
pei-arm.c \
+ pe-arm-wince.c \
+ pei-arm-wince.c \
pe-i386.c \
pei-i386.c \
pe-mcore.c \
@@ -776,6 +811,7 @@ BFD64_BACKENDS = \
coff64-rs6000.lo \
demo64.lo \
efi-app-ia64.lo \
+ efi-app-x86_64.lo \
elf64-x86-64.lo \
elf64-alpha.lo \
elf64-hppa.lo \
@@ -793,7 +829,11 @@ BFD64_BACKENDS = \
mmo.lo \
nlm32-alpha.lo \
nlm64.lo \
- pepigen.lo
+ coff-x86_64.lo \
+ pe-x86_64.lo \
+ pei-x86_64.lo \
+ pepigen.lo \
+ pex64igen.lo
BFD64_BACKENDS_CFILES = \
aix5ppc-core.c \
@@ -802,6 +842,7 @@ BFD64_BACKENDS_CFILES = \
coff64-rs6000.c \
demo64.c \
efi-app-ia64.c \
+ efi-app-x86_64.c \
elf64-x86-64.c \
elf64-alpha.c \
elf64-hppa.c \
@@ -816,7 +857,10 @@ BFD64_BACKENDS_CFILES = \
elf64.c \
mmo.c \
nlm32-alpha.c \
- nlm64.c
+ nlm64.c \
+ coff-x86_64.c \
+ pe-x86_64.c \
+ pei-x86_64.c
OPTIONAL_BACKENDS = \
aix386-core.lo \
@@ -852,10 +896,9 @@ CONFIG_STATUS_DEPENDENCIES = \
WORDSIZE = @wordsize@
ALL_BACKENDS = @all_backends@
BFD_BACKENDS = @bfd_backends@
-BFD_LIBS = @bfd_libs@
BFD_MACHINES = @bfd_machines@
TDEFAULTS = @tdefaults@
-INCLUDES = @HDEFINES@ @COREFLAG@ @TDEFINES@ $(CSEARCH) $(CSWITCHES) -I$(srcdir)/../intl -I../intl
+INCLUDES = @HDEFINES@ @COREFLAG@ @TDEFINES@ $(CSEARCH) $(CSWITCHES) @INCINTL@
# C source files that correspond to .o's.
SOURCE_CFILES = \
@@ -867,7 +910,7 @@ SOURCE_CFILES = \
$(OPTIONAL_BACKENDS_CFILES)
BUILD_CFILES = \
- elf32-ia64.c elf64-ia64.c peigen.c pepigen.c
+ elf32-ia64.c elf64-ia64.c peigen.c pepigen.c pex64igen.c
CFILES = $(SOURCE_CFILES) $(BUILD_CFILES)
SOURCE_HFILES = \
@@ -892,11 +935,15 @@ BLD_POTFILES = $(BUILD_CFILES) $(BUILD_HFILES)
# BFD_BACKENDS Routines the configured targets need.
# BFD_MACHINES Architecture-specific routines the configured targets need.
# COREFILE Core file routines for a native configuration
-OFILES = $(BFD_BACKENDS) $(BFD_MACHINES) @COREFILE@
-libbfd_la_SOURCES = $(BFD32_LIBS_CFILES) $(BFD64_LIBS_CFILES)
+# bfd64_libs Routines for 64bit support
+OFILES = $(BFD_BACKENDS) $(BFD_MACHINES) @COREFILE@ @bfd64_libs@
+
+# Since BFD64_LIBS is optional and we can't have substitution in
+# libbfd_la_SOURCES, we put BFD64_LIBS in OFILES instead.
+libbfd_la_SOURCES = $(BFD32_LIBS_CFILES)
libbfd_la_DEPENDENCIES = $(OFILES) ofiles
libbfd_la_LIBADD = `cat ofiles` @WIN32LIBADD@
-libbfd_la_LDFLAGS = -release $(VERSION) @WIN32LDFLAGS@
+libbfd_la_LDFLAGS = -release `cat libtool-soversion` @WIN32LDFLAGS@
# libtool will build .libs/libbfd.a. We create libbfd.a in the build
# directory so that we don't have to convert all the programs that use
@@ -919,7 +966,7 @@ MOSTLYCLEANFILES = ofiles stamp-ofiles
CLEANFILES = bfd.h dep.sed stmp-bfd-h DEP DEPA DEP1 DEP2 libbfd.a stamp-lib \
stmp-bin2-h stmp-lbfd-h stmp-lcoff-h
-DISTCLEANFILES = $(BUILD_CFILES) $(BUILD_HFILES)
+DISTCLEANFILES = $(BUILD_CFILES) $(BUILD_HFILES) libtool-soversion
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
@@ -931,15 +978,15 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
- echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
- cd $(srcdir) && $(AUTOMAKE) --foreign \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --cygnus '; \
+ cd $(srcdir) && $(AUTOMAKE) --cygnus \
&& exit 0; \
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign Makefile
+ $(AUTOMAKE) --cygnus Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -1340,6 +1387,9 @@ targets.lo: targets.c Makefile
archures.lo: archures.c Makefile
$(LIBTOOL) --mode=compile $(COMPILE) -c $(TDEFAULTS) $(srcdir)/archures.c
+dwarf2.lo: dwarf2.c Makefile
+ $(LIBTOOL) --mode=compile $(COMPILE) -c -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c
+
elf32-target.h : elfxx-target.h
rm -f elf32-target.h
sed -e s/NN/32/g < $(srcdir)/elfxx-target.h > elf32-target.new
@@ -1369,6 +1419,11 @@ pepigen.c : peXXigen.c
rm -f pepigen.c
sed -e s/XX/pep/g < $(srcdir)/peXXigen.c > pepigen.new
mv -f pepigen.new pepigen.c
+
+pex64igen.c: peXXigen.c
+ rm -f pex64igen.c
+ sed -e s/XX/pex64/g < $(srcdir)/peXXigen.c > pex64igen.new
+ mv -f pex64igen.new pex64igen.c
$(BFD32_LIBS) \
$(BFD64_LIBS) \
$(ALL_MACHINES) \
@@ -1501,11 +1556,20 @@ bfdver.h: $(srcdir)/version.h $(srcdir)/Makefile.in
@echo "creating $@"
@bfd_version=`echo "$(VERSION)" | sed -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
bfd_version_string="\"$(VERSION)\"" ;\
+ bfd_soversion="$(VERSION)" ;\
+ bfd_version_package="\"$(PKGVERSION)\"" ;\
+ report_bugs_to="\"$(REPORT_BUGS_TO)\"" ;\
if test "x$(RELEASE)" = x ; then \
bfd_version_date=`sed -n -e 's/.*DATE //p' < $(srcdir)/version.h` ;\
- bfd_version_string="\"$(VERSION) $${bfd_version_date}\"" ;\
+ bfd_version_string="\"$(VERSION).$${bfd_version_date}\"" ;\
+ bfd_soversion="$(VERSION).$${bfd_version_date}" ;\
fi ;\
- sed -e "s/@bfd_version@/$$bfd_version/" -e "s/@bfd_version_string@/$$bfd_version_string/" < $(srcdir)/version.h > $@
+ sed -e "s,@bfd_version@,$$bfd_version," \
+ -e "s,@bfd_version_string@,$$bfd_version_string," \
+ -e "s,@bfd_version_package@,$$bfd_version_package," \
+ -e "s,@report_bugs_to@,$$report_bugs_to," \
+ < $(srcdir)/version.h > $@; \
+ echo "$${bfd_soversion}" > libtool-soversion
# What appears below is generated by a hacked mkdep using gcc -MM.
@@ -1516,11 +1580,12 @@ archive.lo: archive.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
$(INCDIR)/safe-ctype.h
archures.lo: archures.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/safe-ctype.h
-bfd.lo: bfd.c bfdver.h $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h \
- $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h libcoff.h \
- libecoff.h $(INCDIR)/coff/ecoff.h elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h
+bfd.lo: bfd.c $(INCDIR)/filenames.h bfdver.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/demangle.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/sym.h libcoff.h libecoff.h $(INCDIR)/coff/ecoff.h \
+ elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h
bfdio.lo: bfdio.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
bfdwin.lo: bfdwin.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cache.lo: cache.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
@@ -1574,6 +1639,7 @@ cpu-arm.lo: cpu-arm.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/libiberty.h
cpu-avr.lo: cpu-avr.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-bfin.lo: cpu-bfin.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
+cpu-cr16.lo: cpu-cr16.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-cris.lo: cpu-cris.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-cr16c.lo: cpu-cr16c.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-crx.lo: cpu-crx.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
@@ -1606,6 +1672,7 @@ cpu-m10200.lo: cpu-m10200.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-m10300.lo: cpu-m10300.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-maxq.lo: cpu-maxq.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mcore.lo: cpu-mcore.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
+cpu-mep.lo: cpu-mep.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mips.lo: cpu-mips.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mmix.lo: cpu-mmix.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mt.lo: cpu-mt.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
@@ -1621,9 +1688,11 @@ cpu-powerpc.lo: cpu-powerpc.c $(INCDIR)/filenames.h \
$(INCDIR)/hashtab.h
cpu-rs6000.lo: cpu-rs6000.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-s390.lo: cpu-s390.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
+cpu-score.lo: cpu-score.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-sh.lo: cpu-sh.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(srcdir)/../opcodes/sh-opc.h
cpu-sparc.lo: cpu-sparc.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
+cpu-spu.lo: cpu-spu.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-tic30.lo: cpu-tic30.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-tic4x.lo: cpu-tic4x.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-tic54x.lo: cpu-tic54x.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
@@ -1693,7 +1762,8 @@ coff-arm.lo: coff-arm.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h
coff-aux.lo: coff-aux.c $(INCDIR)/filenames.h $(INCDIR)/coff/aux-coff.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h \
- coff-m68k.c $(INCDIR)/hashtab.h libcoff.h $(INCDIR)/bfdlink.h \
+ coff-m68k.c $(INCDIR)/hashtab.h $(INCDIR)/coff/m68k.h \
+ $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \
coffcode.h coffswap.h
coff-h8300.lo: coff-h8300.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/bfdlink.h genlink.h $(INCDIR)/coff/h8300.h \
@@ -1763,7 +1833,7 @@ coff-tic54x.lo: coff-tic54x.c $(INCDIR)/filenames.h \
$(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/coff/tic54x.h \
$(INCDIR)/coff/ti.h $(INCDIR)/coff/internal.h libcoff.h \
coffcode.h coffswap.h
-coff-tic80.lo: coff-tic80.c $(INCDIR)/bfdlink.h $(INCDIR)/filenames.h \
+coff-tic80.lo: coff-tic80.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h $(INCDIR)/coff/tic80.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h
coff-u68k.lo: coff-u68k.c coff-m68k.c $(INCDIR)/filenames.h \
@@ -1826,11 +1896,16 @@ elf32-arm.lo: elf32-arm.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
elf32-avr.lo: elf32-avr.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/avr.h \
- $(INCDIR)/elf/reloc-macros.h elf32-target.h
+ $(INCDIR)/elf/reloc-macros.h elf32-avr.h elf32-target.h
elf32-bfin.lo: elf32-bfin.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/bfin.h \
- $(INCDIR)/elf/reloc-macros.h elf32-target.h
+ $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/dwarf2.h \
+ elf32-target.h
+elf32-cr16.lo: elf32-cr16.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/elf/cr16.h $(INCDIR)/elf/reloc-macros.h elf32-target.h
elf32-cr16c.lo: elf32-cr16c.c $(INCDIR)/filenames.h \
$(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/cr16c.h \
$(INCDIR)/elf/reloc-macros.h elf-bfd.h $(INCDIR)/elf/common.h \
@@ -1944,19 +2019,24 @@ elf32-mcore.lo: elf32-mcore.c $(INCDIR)/filenames.h \
$(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/mcore.h \
$(INCDIR)/elf/reloc-macros.h elf32-target.h
+elf32-mep.lo: elf32-mep.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
+ elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/mep.h \
+ $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \
+ elf32-target.h
elfxx-mips.lo: elfxx-mips.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/libiberty.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
elfxx-mips.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h \
- $(INCDIR)/coff/mips.h $(INCDIR)/coff/external.h elf-vxworks.h
+ elf-vxworks.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h \
+ $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/mips.h $(INCDIR)/coff/external.h
elf32-mips.lo: elf32-mips.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/bfdlink.h genlink.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h elfxx-mips.h \
- $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/symconst.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h elf-vxworks.h \
+ $(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h $(INCDIR)/coff/internal.h \
$(INCDIR)/coff/ecoff.h $(INCDIR)/coff/mips.h $(INCDIR)/coff/external.h \
- ecoffswap.h elf32-target.h elf-vxworks.h
+ ecoffswap.h elf32-target.h
elf32-mt.lo: elf32-mt.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/mt.h \
@@ -1988,9 +2068,9 @@ elf32-ppc.lo: elf32-ppc.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
elf32-sh64.lo: elf32-sh64.c $(INCDIR)/filenames.h elf-bfd.h \
$(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
$(INCDIR)/bfdlink.h $(srcdir)/../opcodes/sh64-opc.h \
- elf32-sh64.h elf32-sh.c $(INCDIR)/hashtab.h $(INCDIR)/elf/sh.h \
- $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \
- $(srcdir)/../opcodes/sh-opc.h elf32-target.h
+ elf32-sh64.h elf32-sh.c $(INCDIR)/hashtab.h elf-vxworks.h \
+ $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \
+ $(srcdir)/../opcodes/sh-opc.h elf32-sh-relocs.h elf32-target.h
elf32-sh64-com.lo: elf32-sh64-com.c $(INCDIR)/filenames.h \
$(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
@@ -2000,27 +2080,36 @@ elf32-s390.lo: elf32-s390.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/s390.h \
$(INCDIR)/elf/reloc-macros.h elf32-target.h
+elf32-score.lo: elf32-score.c $(INCDIR)/filenames.h \
+ $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/elf/score.h $(INCDIR)/elf/reloc-macros.h \
+ elf32-target.h
elf32-sh.lo: elf32-sh.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/sh.h \
- $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \
- $(srcdir)/../opcodes/sh-opc.h elf32-target.h
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h elf-vxworks.h \
+ $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \
+ $(srcdir)/../opcodes/sh-opc.h elf32-sh-relocs.h elf32-target.h
elf32-sh-symbian.lo: elf32-sh-symbian.c elf32-sh.c \
$(INCDIR)/filenames.h $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/libiberty.h $(srcdir)/../opcodes/sh-opc.h \
- elf32-target.h
+ $(INCDIR)/elf/external.h elf-vxworks.h $(INCDIR)/elf/sh.h \
+ $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \
+ $(srcdir)/../opcodes/sh-opc.h elf32-sh-relocs.h elf32-target.h
elfxx-sparc.lo: elfxx-sparc.c $(INCDIR)/filenames.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/sparc.h \
- $(INCDIR)/elf/reloc-macros.h $(INCDIR)/opcode/sparc.h \
- elfxx-sparc.h elf-vxworks.h
+ $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h \
+ elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/elf/sparc.h $(INCDIR)/elf/reloc-macros.h \
+ $(INCDIR)/opcode/sparc.h elfxx-sparc.h elf-vxworks.h
elf32-sparc.lo: elf32-sparc.c $(INCDIR)/filenames.h \
$(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/sparc.h \
$(INCDIR)/elf/reloc-macros.h $(INCDIR)/opcode/sparc.h \
- elfxx-sparc.h elf32-target.h elf-vxworks.h
+ elfxx-sparc.h elf-vxworks.h elf32-target.h
+elf32-spu.lo: elf32-spu.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/spu.h \
+ $(INCDIR)/elf/reloc-macros.h elf32-spu.h elf32-target.h
elf32-v850.lo: elf32-v850.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/v850.h \
@@ -2052,6 +2141,9 @@ elflink.lo: elflink.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/safe-ctype.h \
$(INCDIR)/libiberty.h $(INCDIR)/objalloc.h
+elf-attrs.lo: elf-attrs.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h
elf-strtab.lo: elf-strtab.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h
@@ -2136,7 +2228,7 @@ m88kopenbsd.lo: m88kopenbsd.c netbsd.h $(INCDIR)/filenames.h \
$(INCDIR)/hashtab.h libaout.h $(INCDIR)/bfdlink.h aout-target.h \
$(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \
$(INCDIR)/aout/ar.h
-mach-o.lo: mach-o.c mach-o.h $(INCDIR)/filenames.h \
+mach-o.lo: mach-o.c $(INCDIR)/filenames.h mach-o.h \
$(INCDIR)/hashtab.h $(INCDIR)/libiberty.h mach-o-target.c
mipsbsd.lo: mipsbsd.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
libaout.h $(INCDIR)/bfdlink.h aout-target.h $(INCDIR)/aout/aout64.h \
@@ -2176,8 +2268,8 @@ pdp11.lo: pdp11.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
libaout.h $(INCDIR)/bfdlink.h aout-target.h $(INCDIR)/aout/aout64.h \
$(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h \
$(INCDIR)/safe-ctype.h
-pef.lo: pef.c $(INCDIR)/safe-ctype.h pef.h pef-traceback.h \
- $(INCDIR)/filenames.h $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h
+pef.lo: pef.c $(INCDIR)/filenames.h $(INCDIR)/safe-ctype.h \
+ pef.h pef-traceback.h $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h
pe-arm.lo: pe-arm.c $(INCDIR)/filenames.h coff-arm.c \
$(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
@@ -2186,6 +2278,16 @@ pei-arm.lo: pei-arm.c $(INCDIR)/filenames.h coff-arm.c \
$(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
$(INCDIR)/bfdlink.h coffcode.h peicode.h libpei.h
+pe-arm-wince.lo: pe-arm-wince.c pe-arm.c $(INCDIR)/filenames.h \
+ coff-arm.c $(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h \
+ $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
+ peicode.h libpei.h
+pei-arm-wince.lo: pei-arm-wince.c pei-arm.c $(INCDIR)/filenames.h \
+ coff-arm.c $(INCDIR)/hashtab.h $(INCDIR)/coff/arm.h \
+ $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
+ peicode.h libpei.h
pe-i386.lo: pe-i386.c $(INCDIR)/filenames.h coff-i386.c \
$(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
@@ -2228,7 +2330,7 @@ pei-mips.lo: pei-mips.c $(INCDIR)/filenames.h pe-mips.c \
$(INCDIR)/hashtab.h $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
$(INCDIR)/bfdlink.h coffcode.h peicode.h libpei.h
-ppcboot.lo: ppcboot.c $(INCDIR)/safe-ctype.h $(INCDIR)/filenames.h \
+ppcboot.lo: ppcboot.c $(INCDIR)/filenames.h $(INCDIR)/safe-ctype.h \
$(INCDIR)/hashtab.h
reloc16.lo: reloc16.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/bfdlink.h genlink.h $(INCDIR)/coff/internal.h \
@@ -2269,7 +2371,7 @@ vms.lo: vms.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h vms.h
vms-gsd.lo: vms-gsd.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h vms.h
-vms-hdr.lo: vms-hdr.c bfdver.h $(INCDIR)/filenames.h \
+vms-hdr.lo: vms-hdr.c $(INCDIR)/filenames.h bfdver.h \
$(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h $(INCDIR)/hashtab.h \
vms.h
vms-misc.lo: vms-misc.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
@@ -2279,12 +2381,12 @@ vms-tir.lo: vms-tir.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
xcofflink.lo: xcofflink.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
$(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/xcoff.h \
libcoff.h libxcoff.h
-xsym.lo: xsym.c xsym.h $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
+xsym.lo: xsym.c $(INCDIR)/filenames.h xsym.h $(INCDIR)/hashtab.h
xtensa-isa.lo: xtensa-isa.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/xtensa-isa.h $(INCDIR)/xtensa-isa-internal.h
xtensa-modules.lo: xtensa-modules.c $(INCDIR)/xtensa-isa.h \
$(INCDIR)/xtensa-isa-internal.h
-aix5ppc-core.lo: aix5ppc-core.c
+aix5ppc-core.lo: aix5ppc-core.c $(INCDIR)/filenames.h
aout64.lo: aout64.c aoutx.h $(INCDIR)/filenames.h $(INCDIR)/safe-ctype.h \
$(INCDIR)/bfdlink.h libaout.h $(INCDIR)/hashtab.h $(INCDIR)/aout/aout64.h \
$(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h
@@ -2306,6 +2408,11 @@ efi-app-ia64.lo: efi-app-ia64.c $(INCDIR)/filenames.h \
$(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
$(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
peicode.h libpei.h
+efi-app-x86_64.lo: efi-app-x86_64.c $(INCDIR)/filenames.h \
+ coff-x86_64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h \
+ $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h \
+ coffcode.h peicode.h libpei.h
elf64-x86-64.lo: elf64-x86-64.c $(INCDIR)/filenames.h \
$(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/x86-64.h \
@@ -2374,6 +2481,21 @@ nlm32-alpha.lo: nlm32-alpha.c $(INCDIR)/filenames.h \
nlm64.lo: nlm64.c nlmcode.h $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
libnlm.h $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h \
$(INCDIR)/nlm/external.h
+coff-x86_64.lo: coff-x86_64.c $(INCDIR)/filenames.h \
+ $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h coffcode.h \
+ coffswap.h
+pe-x86_64.lo: pe-x86_64.c $(INCDIR)/filenames.h coff-x86_64.c \
+ $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h coffcode.h \
+ peicode.h libpei.h
+pei-x86_64.lo: pei-x86_64.c $(INCDIR)/filenames.h coff-x86_64.c \
+ $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h coffcode.h \
+ peicode.h libpei.h
aix386-core.lo: aix386-core.c $(INCDIR)/filenames.h \
$(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h
@@ -2390,18 +2512,21 @@ elf32-ia64.lo: elf32-ia64.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ia64.h \
$(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/objalloc.h \
- elf32-target.h
+ $(INCDIR)/hashtab.h elf32-target.h
elf64-ia64.lo: elf64-ia64.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ia64.h \
$(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/objalloc.h \
- elf64-target.h
+ $(INCDIR)/hashtab.h elf64-target.h
peigen.lo: peigen.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h libpei.h
pepigen.lo: pepigen.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/ia64.h $(INCDIR)/coff/external.h \
$(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h libpei.h
+pex64igen.lo: pex64igen.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
+ $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h libpei.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.
diff --git a/bfd/acinclude.m4 b/bfd/acinclude.m4
index 95e3d4a702d3..cd4fd55be6c2 100644
--- a/bfd/acinclude.m4
+++ b/bfd/acinclude.m4
@@ -1,7 +1,3 @@
-sinclude(../config/acx.m4)
-sinclude(../bfd/bfd.m4)
-sinclude(../bfd/warning.m4)
-
dnl See whether we need to use fopen-bin.h rather than fopen-same.h.
AC_DEFUN([BFD_BINARY_FOPEN],
[AC_REQUIRE([AC_CANONICAL_TARGET])
@@ -45,22 +41,6 @@ else
fi
AC_SUBST(EXEEXT_FOR_BUILD)])dnl
-sinclude(../libtool.m4)
-dnl The lines below arrange for aclocal not to bring libtool.m4
-dnl AM_PROG_LIBTOOL into aclocal.m4, while still arranging for automake
-dnl to add a definition of LIBTOOL to Makefile.in.
-ifelse(yes,no,[
-AC_DEFUN([AM_PROG_LIBTOOL],)
-AC_DEFUN([AM_DISABLE_SHARED],)
-AC_SUBST(LIBTOOL)
-])
-
-sinclude(../gettext.m4)
-ifelse(yes,no,[
-AC_DEFUN([CY_WITH_NLS],)
-AC_SUBST(INTLLIBS)
-])
-
AC_DEFUN([AM_INSTALL_LIBBFD],
[AC_MSG_CHECKING([whether to install libbfd])
AC_ARG_ENABLE(install-libbfd,
diff --git a/bfd/aclocal.m4 b/bfd/aclocal.m4
index d5f315805a9c..9dfea067fbf9 100644
--- a/bfd/aclocal.m4
+++ b/bfd/aclocal.m4
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.9.5 -*- Autoconf -*-
+# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005 Free Software Foundation, Inc.
@@ -28,7 +28,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
# 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.5])])
+ [AM_AUTOMAKE_VERSION([1.9.6])])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
@@ -480,27 +480,6 @@ AC_DEFUN([AM_PROG_INSTALL_SH],
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])])
-
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering
@@ -889,4 +868,18 @@ AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
+m4_include([../config/acx.m4])
+m4_include([../config/depstand.m4])
+m4_include([../config/gettext-sister.m4])
+m4_include([../config/lead-dot.m4])
+m4_include([../config/nls.m4])
+m4_include([../config/po.m4])
+m4_include([../config/progtest.m4])
+m4_include([../config/stdint.m4])
+m4_include([../libtool.m4])
+m4_include([../ltoptions.m4])
+m4_include([../ltsugar.m4])
+m4_include([../ltversion.m4])
+m4_include([bfd.m4])
+m4_include([warning.m4])
m4_include([acinclude.m4])
diff --git a/bfd/aix386-core.c b/bfd/aix386-core.c
index 17a0290e3544..7730011a64fa 100644
--- a/bfd/aix386-core.c
+++ b/bfd/aix386-core.c
@@ -2,7 +2,7 @@
This was based on trad-core.c, which was written by John Gilmore of
Cygnus Support.
Copyright 1988, 1989, 1991, 1992, 1993, 1994, 1996, 1998, 1999, 2000,
- 2001, 2002, 2004
+ 2001, 2002, 2004, 2006, 2007
Free Software Foundation, Inc.
Written by Minh Tran-Le <TRANLE@INTELLICORP.COM>.
Converted to back end form by Ian Lance Taylor <ian@cygnus.com>.
@@ -23,8 +23,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "coff/i386.h"
#include "coff/internal.h"
@@ -80,6 +80,7 @@ aix386_core_file_p (abfd)
struct trad_core_struct coredata;
struct corehdr internal_core;
} *mergem;
+ flagword flags;
amt = sizeof (longbuf);
if (bfd_bread ((PTR) longbuf, amt, abfd) != amt)
@@ -117,11 +118,12 @@ aix386_core_file_p (abfd)
core_hdr (abfd) = core;
/* Create the sections. */
- core_regsec (abfd) = bfd_make_section_anyway (abfd, ".reg");
+ flags = SEC_HAS_CONTENTS;
+ core_regsec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".reg",
+ flags);
if (core_regsec (abfd) == NULL)
goto loser;
- core_regsec (abfd)->flags = SEC_HAS_CONTENTS;
core_regsec (abfd)->size = sizeof (core->cd_regs);
core_regsec (abfd)->vma = (bfd_vma) -1;
@@ -129,12 +131,13 @@ aix386_core_file_p (abfd)
core_regsec (abfd)->filepos =
(file_ptr) offsetof (struct corehdr, cd_regs[0]);
- core_reg2sec (abfd) = bfd_make_section_anyway (abfd, ".reg2");
+ flags = SEC_HAS_CONTENTS;
+ core_reg2sec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".reg2",
+ flags);
if (core_reg2sec (abfd) == NULL)
/* bfd_release frees everything allocated after it's arg. */
goto loser;
- core_reg2sec (abfd)->flags = SEC_HAS_CONTENTS;
core_reg2sec (abfd)->size = sizeof (core->cd_fpregs);
core_reg2sec (abfd)->vma = (bfd_vma) -1;
core_reg2sec (abfd)->filepos =
@@ -175,11 +178,12 @@ aix386_core_file_p (abfd)
flags = SEC_ALLOC + SEC_HAS_CONTENTS;
break;
}
- core_section (abfd, n) = bfd_make_section_anyway (abfd, sname);
+ core_section (abfd, n) = bfd_make_section_anyway_with_flags (abfd,
+ sname,
+ flags);
if (core_section (abfd, n) == NULL)
goto loser;
- core_section (abfd, n)->flags = flags;
core_section (abfd, n)->size = core->cd_segs[i].cs_len;
core_section (abfd, n)->vma = core->cd_segs[i].cs_address;
core_section (abfd, n)->filepos = core->cd_segs[i].cs_offset;
diff --git a/bfd/aix5ppc-core.c b/bfd/aix5ppc-core.c
index ee2a223d9e52..ef1447b946fe 100644
--- a/bfd/aix5ppc-core.c
+++ b/bfd/aix5ppc-core.c
@@ -1,5 +1,5 @@
/* IBM RS/6000 "XCOFF" back-end for BFD.
- Copyright 2001, 2002, 2003, 2004, 2005
+ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Tom Rix
Contributed by Red Hat Inc.
@@ -21,6 +21,7 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
+#include "sysdep.h"
#include "bfd.h"
const bfd_target *xcoff64_core_p (bfd *);
@@ -30,7 +31,6 @@ int xcoff64_core_file_failing_signal (bfd *);
#ifdef AIX_5_CORE
-#include "sysdep.h"
#include "libbfd.h"
/* Aix 5.1 system include file. */
@@ -56,6 +56,7 @@ xcoff64_core_p (bfd *abfd)
bfd_size_type i;
struct vm_infox vminfo;
const bfd_target *return_value = NULL;
+ flagword flags;
/* Get the header. */
if (bfd_seek (abfd, 0, SEEK_SET) != 0)
@@ -117,21 +118,21 @@ xcoff64_core_p (bfd *abfd)
abfd->tdata.any = new_core_hdr;
/* .stack section. */
- sec = bfd_make_section_anyway (abfd, ".stack");
+ flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
+ sec = bfd_make_section_anyway_with_flags (abfd, ".stack", flags);
if (NULL == sec)
return return_value;
- sec->flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
sec->size = core.c_size;
sec->vma = core.c_stackorg;
sec->filepos = core.c_stack;
/* .reg section for all registers. */
- sec = bfd_make_section_anyway (abfd, ".reg");
+ flags = SEC_HAS_CONTENTS | SEC_IN_MEMORY;
+ sec = bfd_make_section_anyway_with_flags (abfd, ".reg", flags);
if (NULL == sec)
return return_value;
- sec->flags = SEC_HAS_CONTENTS | SEC_IN_MEMORY;
sec->size = sizeof (struct __context64);
sec->vma = 0;
sec->filepos = 0;
@@ -141,11 +142,11 @@ xcoff64_core_p (bfd *abfd)
To actually find out how long this section is in this particular
core dump would require going down the whole list of struct
ld_info's. See if we can just fake it. */
- sec = bfd_make_section_anyway (abfd, ".ldinfo");
+ flags = SEC_HAS_CONTENTS;
+ sec = bfd_make_section_anyway_with_flags (abfd, ".ldinfo", flags);
if (NULL == sec)
return return_value;
- sec->flags = SEC_HAS_CONTENTS;
sec->size = core.c_lsize;
sec->vma = 0;
sec->filepos = core.c_loader;
@@ -155,11 +156,11 @@ xcoff64_core_p (bfd *abfd)
regions. */
/* .data section from executable. */
- sec = bfd_make_section_anyway (abfd, ".data");
+ flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
+ sec = bfd_make_section_anyway_with_flags (abfd, ".data", flags);
if (NULL == sec)
return return_value;
- sec->flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
sec->size = core.c_datasize;
sec->vma = core.c_dataorg;
sec->filepos = core.c_data;
@@ -178,11 +179,11 @@ xcoff64_core_p (bfd *abfd)
if (ldinfo.ldinfo_core)
{
- sec = bfd_make_section_anyway (abfd, ".data");
+ flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
+ sec = bfd_make_section_anyway_with_flags (abfd, ".data", flags);
if (NULL == sec)
return return_value;
- sec->flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
sec->size = ldinfo.ldinfo_datasize;
sec->vma = ldinfo.ldinfo_dataorg;
sec->filepos = ldinfo.ldinfo_core;
@@ -206,11 +207,11 @@ xcoff64_core_p (bfd *abfd)
if (vminfo.vminfo_offset)
{
- sec = bfd_make_section_anyway (abfd, ".vmdata");
+ flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
+ sec = bfd_make_section_anyway_with_flags (abfd, ".vmdata", flags);
if (NULL == sec)
return return_value;
- sec->flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
sec->size = vminfo.vminfo_size;
sec->vma = vminfo.vminfo_addr;
sec->filepos = vminfo.vminfo_offset;
diff --git a/bfd/aout-adobe.c b/bfd/aout-adobe.c
index 93182f7ad858..203738ebb409 100644
--- a/bfd/aout-adobe.c
+++ b/bfd/aout-adobe.c
@@ -1,6 +1,6 @@
/* BFD back-end for a.out.adobe binaries.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support. Based on bout.c.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "aout/adobe.h"
#include "aout/stab_gnu.h"
@@ -132,7 +132,7 @@ aout_adobe_callback (bfd *abfd)
/* First one is called ".text" or whatever; subsequent ones are
".text1", ".text2", ... */
bfd_set_error (bfd_error_no_error);
- sect = bfd_make_section (abfd, section_name);
+ sect = bfd_make_section_with_flags (abfd, section_name, flags);
trynum = 0;
while (!sect)
@@ -141,7 +141,7 @@ aout_adobe_callback (bfd *abfd)
/* Some other error -- slide into the sunset. */
return NULL;
sprintf (try_again, "%s%d", section_name, ++trynum);
- sect = bfd_make_section (abfd, try_again);
+ sect = bfd_make_section_with_flags (abfd, try_again, flags);
}
/* Fix the name, if it is a sprintf'd name. */
@@ -155,8 +155,6 @@ aout_adobe_callback (bfd *abfd)
sect->name = newname;
}
- /* Now set the section's attributes. */
- bfd_set_section_flags (abfd, sect, flags);
/* Assumed big-endian. */
sect->size = ((ext->e_size[0] << 8)
| ext->e_size[1] << 8
@@ -443,7 +441,7 @@ aout_adobe_set_arch_mach (bfd *abfd,
static int
aout_adobe_sizeof_headers (bfd *ignore_abfd ATTRIBUTE_UNUSED,
- bfd_boolean ignore ATTRIBUTE_UNUSED)
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return sizeof (struct internal_exec);
}
@@ -452,6 +450,7 @@ aout_adobe_sizeof_headers (bfd *ignore_abfd ATTRIBUTE_UNUSED,
#define aout_32_bfd_make_debug_symbol ((asymbol *(*) (bfd *, void *, unsigned long)) bfd_nullvoidptr)
#define aout_32_bfd_reloc_type_lookup ((reloc_howto_type *(*) (bfd *, bfd_reloc_code_real_type)) bfd_nullvoidptr)
+#define aout_32_bfd_reloc_name_lookup ((reloc_howto_type *(*) (bfd *, const char *)) bfd_nullvoidptr)
#define aout_32_close_and_cleanup aout_32_bfd_free_cached_info
#define aout_32_set_arch_mach aout_adobe_set_arch_mach
#define aout_32_set_section_contents aout_adobe_set_section_contents
diff --git a/bfd/aout-arm.c b/bfd/aout-arm.c
index d8834a4f331d..4b0d42c1acad 100644
--- a/bfd/aout-arm.c
+++ b/bfd/aout-arm.c
@@ -1,6 +1,6 @@
/* BFD back-end for raw ARM a.out binaries.
- Copyright 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
- Free Software Foundation, Inc.
+ Copyright 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005,
+ 2007 Free Software Foundation, Inc.
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
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 "bfd.h"
/* Avoid multiple definitions from aoutx if supporting standard a.out
as well as our own. */
@@ -50,6 +50,7 @@
#define N_MAGIC(x) ((x).a_info & ~07200)
#define MY_bfd_reloc_type_lookup aoutarm_bfd_reloc_type_lookup
+#define MY_bfd_reloc_name_lookup aoutarm_bfd_reloc_name_lookup
#include "libaout.h"
#include "aout/aout64.h"
@@ -317,6 +318,22 @@ MY (bfd_reloc_type_lookup) (bfd *abfd,
}
}
+static reloc_howto_type *
+MY (bfd_reloc_name_lookup) (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (MY (howto_table)) / sizeof (MY (howto_table)[0]);
+ i++)
+ if (MY (howto_table)[i].name != NULL
+ && strcasecmp (MY (howto_table)[i].name, r_name) == 0)
+ return &MY (howto_table)[i];
+
+ return NULL;
+}
+
#define MY_swap_std_reloc_in MY (swap_std_reloc_in)
#define MY_swap_std_reloc_out MY (swap_std_reloc_out)
#define MY_get_section_contents _bfd_generic_get_section_contents
diff --git a/bfd/aout-ns32k.c b/bfd/aout-ns32k.c
index cc9f06d8dabd..46eac5c1ccd7 100644
--- a/bfd/aout-ns32k.c
+++ b/bfd/aout-ns32k.c
@@ -1,6 +1,6 @@
/* BFD back-end for ns32k a.out-ish binaries.
Copyright 1990, 1991, 1992, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
- 2002, 2003, 2005 Free Software Foundation, Inc.
+ 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
Contributed by Ian Dall (idall@eleceng.adelaide.edu.au).
This file is part of BFD, the Binary File Descriptor library.
@@ -28,8 +28,9 @@
the tokens. */
#define MYNS(OP) CONCAT2 (ns32kaout_,OP)
-reloc_howto_type * MYNS (bfd_reloc_type_lookup) (bfd * abfd, bfd_reloc_code_real_type);
-bfd_boolean MYNS (write_object_contents) (bfd *abfd);
+reloc_howto_type * MYNS (bfd_reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
+reloc_howto_type * MYNS (bfd_reloc_name_lookup) (bfd *, const char *);
+bfd_boolean MYNS (write_object_contents) (bfd *);
/* Avoid multiple definitions from aoutx if supporting
standard a.out format(s) as well as this one. */
@@ -246,6 +247,22 @@ MY (bfd_reloc_type_lookup) (bfd *abfd, bfd_reloc_code_real_type code)
#undef ENTRY
}
+reloc_howto_type *
+MY (bfd_reloc_name_lookup) (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (MY (howto_table)) / sizeof (MY (howto_table)[0]);
+ i++)
+ if (MY (howto_table)[i].name != NULL
+ && strcasecmp (MY (howto_table)[i].name, r_name) == 0)
+ return &MY (howto_table)[i];
+
+ return NULL;
+}
+
static void
MY_swap_std_reloc_in (bfd *abfd,
struct reloc_std_external *bytes,
@@ -274,11 +291,8 @@ MY_swap_std_reloc_out (bfd *abfd,
int r_index;
asymbol *sym = *(g->sym_ptr_ptr);
int r_extern;
- unsigned int r_addend;
asection *output_section = sym->section->output_section;
- r_addend = g->addend + (*(g->sym_ptr_ptr))->section->output_section->vma;
-
/* Name was clobbered by aout_write_syms to be symbol index. */
/* If this relocation is relative to a symbol then set the
@@ -341,7 +355,6 @@ _bfd_ns32k_relocate_contents (reloc_howto_type *howto,
case 2:
return _bfd_relocate_contents (howto, input_bfd, relocation,
location);
- break;
default:
return bfd_reloc_notsupported;
}
diff --git a/bfd/aout-target.h b/bfd/aout-target.h
index 5a30eda74142..3e5fa910170e 100644
--- a/bfd/aout-target.h
+++ b/bfd/aout-target.h
@@ -1,6 +1,6 @@
/* Define a target vector and some small routines for a variant of a.out.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005
+ 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -29,6 +29,7 @@
#endif
extern reloc_howto_type * NAME (aout, reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
+extern reloc_howto_type * NAME (aout, reloc_name_lookup) (bfd *, const char *);
/* Set parameters about this a.out file that are machine-dependent.
This routine is called from some_aout_object_p just before it returns. */
@@ -494,6 +495,9 @@ MY_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
#ifndef MY_bfd_reloc_type_lookup
#define MY_bfd_reloc_type_lookup NAME (aout, reloc_type_lookup)
#endif
+#ifndef MY_bfd_reloc_name_lookup
+#define MY_bfd_reloc_name_lookup NAME (aout, reloc_name_lookup)
+#endif
#ifndef MY_bfd_make_debug_symbol
#define MY_bfd_make_debug_symbol 0
#endif
diff --git a/bfd/aout-tic30.c b/bfd/aout-tic30.c
index 0feb99decb16..6e8be1ee9a0d 100644
--- a/bfd/aout-tic30.c
+++ b/bfd/aout-tic30.c
@@ -1,5 +1,5 @@
/* BFD back-end for TMS320C30 a.out binaries.
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au)
@@ -35,8 +35,8 @@
#define TARGETNAME "a.out-tic30"
#define NAME(x,y) CONCAT3 (tic30_aout,_32_,y)
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libaout.h"
#include "aout/aout64.h"
#include "aout/stab_gnu.h"
@@ -271,6 +271,23 @@ tic30_aout_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
}
static reloc_howto_type *
+tic30_aout_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (tic30_aout_howto_table)
+ / sizeof (tic30_aout_howto_table[0]));
+ i++)
+ if (tic30_aout_howto_table[i].name != NULL
+ && strcasecmp (tic30_aout_howto_table[i].name, r_name) == 0)
+ return &tic30_aout_howto_table[i];
+
+ return NULL;
+}
+
+static reloc_howto_type *
tic30_aout_reloc_howto (bfd *abfd,
struct reloc_std_external *relocs,
int *r_index,
@@ -936,6 +953,9 @@ tic30_aout_set_arch_mach (bfd *abfd,
#ifndef MY_bfd_reloc_type_lookup
#define MY_bfd_reloc_type_lookup tic30_aout_reloc_type_lookup
#endif
+#ifndef MY_bfd_reloc_name_lookup
+#define MY_bfd_reloc_name_lookup tic30_aout_reloc_name_lookup
+#endif
#ifndef MY_bfd_make_debug_symbol
#define MY_bfd_make_debug_symbol 0
#endif
diff --git a/bfd/aoutf1.h b/bfd/aoutf1.h
index cba4fbbeff99..0353bfdc3f28 100644
--- a/bfd/aoutf1.h
+++ b/bfd/aoutf1.h
@@ -1,6 +1,6 @@
/* A.out "format 1" file handling code for BFD.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "aout/sun4.h"
@@ -566,6 +566,7 @@ sunos4_core_file_p (bfd *abfd)
struct internal_sunos_core internal_sunos_core;
char external_core[1];
} *mergem;
+ flagword flags;
if (bfd_bread ((void *) longbuf, (bfd_size_type) sizeof (longbuf), abfd)
!= sizeof (longbuf))
@@ -627,28 +628,31 @@ sunos4_core_file_p (bfd *abfd)
abfd->tdata.sun_core_data->hdr = core;
/* Create the sections. */
- core_stacksec (abfd) = bfd_make_section_anyway (abfd, ".stack");
+ flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
+ core_stacksec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".stack",
+ flags);
if (core_stacksec (abfd) == NULL)
/* bfd_release frees everything allocated after it's arg. */
goto loser;
- core_datasec (abfd) = bfd_make_section_anyway (abfd, ".data");
+ flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
+ core_datasec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".data",
+ flags);
if (core_datasec (abfd) == NULL)
goto loser;
- core_regsec (abfd) = bfd_make_section_anyway (abfd, ".reg");
+ flags = SEC_HAS_CONTENTS;
+ core_regsec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".reg",
+ flags);
if (core_regsec (abfd) == NULL)
goto loser;
- core_reg2sec (abfd) = bfd_make_section_anyway (abfd, ".reg2");
+ flags = SEC_HAS_CONTENTS;
+ core_reg2sec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".reg2",
+ flags);
if (core_reg2sec (abfd) == NULL)
goto loser;
- core_stacksec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
- core_datasec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
- core_regsec (abfd)->flags = SEC_HAS_CONTENTS;
- core_reg2sec (abfd)->flags = SEC_HAS_CONTENTS;
-
core_stacksec (abfd)->size = core->c_ssize;
core_datasec (abfd)->size = core->c_dsize;
core_regsec (abfd)->size = core->c_regs_size;
diff --git a/bfd/aoutx.h b/bfd/aoutx.h
index 7dce07240ff6..09331aa0ca24 100644
--- a/bfd/aoutx.h
+++ b/bfd/aoutx.h
@@ -1,6 +1,6 @@
/* BFD semi-generic back-end for a.out binaries.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -118,8 +118,8 @@ DESCRIPTION
#define KEEPIT udata.i
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "safe-ctype.h"
#include "bfdlink.h"
@@ -129,8 +129,6 @@ DESCRIPTION
#include "aout/stab_gnu.h"
#include "aout/ar.h"
-reloc_howto_type * NAME (aout, reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
-
/*
SUBSECTION
Relocations
@@ -319,6 +317,31 @@ NAME (aout, reloc_type_lookup) (bfd *abfd, bfd_reloc_code_real_type code)
}
}
+reloc_howto_type *
+NAME (aout, reloc_name_lookup) (bfd *abfd, const char *r_name)
+{
+ unsigned int i, size;
+ reloc_howto_type *howto_table;
+
+ if (obj_reloc_entry_size (abfd) == RELOC_EXT_SIZE)
+ {
+ howto_table = howto_table_ext;
+ size = sizeof (howto_table_ext) / sizeof (howto_table_ext[0]);
+ }
+ else
+ {
+ howto_table = howto_table_std;
+ size = sizeof (howto_table_std) / sizeof (howto_table_std[0]);
+ }
+
+ for (i = 0; i < size; i++)
+ if (howto_table[i].name != NULL
+ && strcasecmp (howto_table[i].name, r_name) == 0)
+ return &howto_table[i];
+
+ return NULL;
+}
+
/*
SUBSECTION
Internal entry points
@@ -1193,26 +1216,21 @@ NAME (aout, new_section_hook) (bfd *abfd, asection *newsect)
{
obj_textsec (abfd)= newsect;
newsect->target_index = N_TEXT;
- return TRUE;
}
-
- if (obj_datasec (abfd) == NULL && !strcmp (newsect->name, ".data"))
+ else if (obj_datasec (abfd) == NULL && !strcmp (newsect->name, ".data"))
{
obj_datasec (abfd) = newsect;
newsect->target_index = N_DATA;
- return TRUE;
}
-
- if (obj_bsssec (abfd) == NULL && !strcmp (newsect->name, ".bss"))
+ else if (obj_bsssec (abfd) == NULL && !strcmp (newsect->name, ".bss"))
{
obj_bsssec (abfd) = newsect;
newsect->target_index = N_BSS;
- return TRUE;
}
}
/* We allow more than three sections internally. */
- return TRUE;
+ return _bfd_generic_new_section_hook (abfd, newsect);
}
bfd_boolean
@@ -1934,7 +1952,10 @@ NAME (aout, swap_std_reloc_out) (bfd *abfd,
if (bfd_is_com_section (output_section)
|| bfd_is_abs_section (output_section)
- || bfd_is_und_section (output_section))
+ || bfd_is_und_section (output_section)
+ /* PR gas/3041 a.out relocs against weak symbols
+ must be treated as if they were against externs. */
+ || (sym->flags & BSF_WEAK))
{
if (bfd_abs_section_ptr->symbol == sym)
{
@@ -2785,7 +2806,8 @@ NAME (aout, find_nearest_line) (bfd *abfd,
}
int
-NAME (aout, sizeof_headers) (bfd *abfd, bfd_boolean execable ATTRIBUTE_UNUSED)
+NAME (aout, sizeof_headers) (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return adata (abfd).exec_bytes_size;
}
diff --git a/bfd/archive.c b/bfd/archive.c
index 5a12f01f7cc5..053ad47dfddf 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -1,6 +1,6 @@
/* BFD back-end for archive files (libraries).
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support. Mostly Gumby Henkel-Wallace's fault.
@@ -129,8 +129,8 @@ SUBSECTION
" 18 " - Long name 18 characters long, extended pseudo-BSD.
*/
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libiberty.h"
#include "libbfd.h"
#include "aout/ar.h"
@@ -666,10 +666,7 @@ bfd_generic_archive_p (bfd *abfd)
first = bfd_openr_next_archived_file (abfd, NULL);
if (first != NULL)
{
- bfd_boolean fail;
-
first->target_defaulted = FALSE;
- fail = FALSE;
if (bfd_check_format (first, bfd_object)
&& first->xvec != abfd->xvec)
{
@@ -915,12 +912,12 @@ bfd_slurp_armap (bfd *abfd)
if (bfd_seek (abfd, (file_ptr) -16, SEEK_CUR) != 0)
return FALSE;
- if (!strncmp (nextname, "__.SYMDEF ", 16)
- || !strncmp (nextname, "__.SYMDEF/ ", 16)) /* old Linux archives */
+ if (CONST_STRNEQ (nextname, "__.SYMDEF ")
+ || CONST_STRNEQ (nextname, "__.SYMDEF/ ")) /* Old Linux archives. */
return do_slurp_bsd_armap (abfd);
- else if (!strncmp (nextname, "/ ", 16))
+ else if (CONST_STRNEQ (nextname, "/ "))
return do_slurp_coff_armap (abfd);
- else if (!strncmp (nextname, "/SYM64/ ", 16))
+ else if (CONST_STRNEQ (nextname, "/SYM64/ "))
{
/* 64bit ELF (Irix 6) archive. */
#ifdef BFD64
@@ -966,11 +963,11 @@ bfd_slurp_bsd_armap_f2 (bfd *abfd)
if (bfd_seek (abfd, (file_ptr) -16, SEEK_CUR) != 0)
return FALSE;
- if (!strncmp (nextname, "__.SYMDEF ", 16)
- || !strncmp (nextname, "__.SYMDEF/ ", 16)) /* Old Linux archives. */
+ if (CONST_STRNEQ (nextname, "__.SYMDEF ")
+ || CONST_STRNEQ (nextname, "__.SYMDEF/ ")) /* Old Linux archives. */
return do_slurp_bsd_armap (abfd);
- if (strncmp (nextname, "/ ", 16))
+ if (! CONST_STRNEQ (nextname, "/ "))
{
bfd_has_map (abfd) = FALSE;
return TRUE;
@@ -1066,8 +1063,8 @@ _bfd_slurp_extended_name_table (bfd *abfd)
if (bfd_seek (abfd, (file_ptr) -16, SEEK_CUR) != 0)
return FALSE;
- if (strncmp (nextname, "ARFILENAMES/ ", 16) != 0 &&
- strncmp (nextname, "// ", 16) != 0)
+ if (! CONST_STRNEQ (nextname, "ARFILENAMES/ ")
+ && ! CONST_STRNEQ (nextname, "// "))
{
bfd_ardata (abfd)->extended_names = NULL;
bfd_ardata (abfd)->extended_names_size = 0;
@@ -1237,7 +1234,9 @@ _bfd_construct_extended_name_table (bfd *abfd,
*tablen = 0;
/* Figure out how long the table should be. */
- for (current = abfd->archive_head; current != NULL; current = current->next)
+ for (current = abfd->archive_head;
+ current != NULL;
+ current = current->archive_next)
{
const char *normal;
unsigned int thislen;
@@ -1289,8 +1288,9 @@ _bfd_construct_extended_name_table (bfd *abfd,
*tablen = total_namelen;
strptr = *tabloc;
- for (current = abfd->archive_head; current != NULL; current =
- current->next)
+ for (current = abfd->archive_head;
+ current != NULL;
+ current = current->archive_next)
{
const char *normal;
unsigned int thislen;
@@ -1339,7 +1339,7 @@ hpux_uid_gid_encode (char str[6], long int id)
str[5] = '@' + (id & 3);
id >>= 2;
- for (cnt = 4; cnt >= 0; ++cnt, id >>= 6)
+ for (cnt = 4; cnt >= 0; --cnt, id >>= 6)
str[cnt] = ' ' + (id & 0x3f);
}
#endif /* HPUX_LARGE_AR_IDS */
@@ -1640,7 +1640,9 @@ _bfd_write_archive_contents (bfd *arch)
/* Verify the viability of all entries; if any of them live in the
filesystem (as opposed to living in an archive open for input)
then construct a fresh ar_hdr for them. */
- for (current = arch->archive_head; current; current = current->next)
+ for (current = arch->archive_head;
+ current != NULL;
+ current = current->archive_next)
{
/* This check is checking the bfds for the objects we're reading
from (which are usually either an object file or archive on
@@ -1650,14 +1652,14 @@ _bfd_write_archive_contents (bfd *arch)
if (bfd_write_p (current))
{
bfd_set_error (bfd_error_invalid_operation);
- return FALSE;
+ goto input_err;
}
if (!current->arelt_data)
{
current->arelt_data =
bfd_ar_hdr_from_filesystem (arch, current->filename, current);
if (!current->arelt_data)
- return FALSE;
+ goto input_err;
/* Put in the file name. */
BFD_SEND (arch, _bfd_truncate_arname,
@@ -1708,7 +1710,9 @@ _bfd_write_archive_contents (bfd *arch)
}
}
- for (current = arch->archive_head; current; current = current->next)
+ for (current = arch->archive_head;
+ current != NULL;
+ current = current->archive_next)
{
char buffer[DEFAULT_BUFFERSIZE];
unsigned int remaining = arelt_size (current);
@@ -1719,7 +1723,7 @@ _bfd_write_archive_contents (bfd *arch)
!= sizeof (*hdr))
return FALSE;
if (bfd_seek (current, (file_ptr) 0, SEEK_SET) != 0)
- return FALSE;
+ goto input_err;
while (remaining)
{
unsigned int amt = DEFAULT_BUFFERSIZE;
@@ -1729,8 +1733,8 @@ _bfd_write_archive_contents (bfd *arch)
if (bfd_bread (buffer, amt, current) != amt)
{
if (bfd_get_error () != bfd_error_system_call)
- bfd_set_error (bfd_error_malformed_archive);
- return FALSE;
+ bfd_set_error (bfd_error_file_truncated);
+ goto input_err;
}
if (bfd_bwrite (buffer, amt, arch) != amt)
return FALSE;
@@ -1763,6 +1767,10 @@ _bfd_write_archive_contents (bfd *arch)
}
return TRUE;
+
+ input_err:
+ bfd_set_error (bfd_error_on_input, current, bfd_get_error ());
+ return FALSE;
}
/* Note that the namidx for the first symbol is 0. */
@@ -1801,12 +1809,12 @@ _bfd_compute_and_write_armap (bfd *arch, unsigned int elength)
/* Drop all the files called __.SYMDEF, we're going to make our own. */
while (arch->archive_head &&
strcmp (arch->archive_head->filename, "__.SYMDEF") == 0)
- arch->archive_head = arch->archive_head->next;
+ arch->archive_head = arch->archive_head->archive_next;
/* Map over each element. */
for (current = arch->archive_head;
current != NULL;
- current = current->next, elt_no++)
+ current = current->archive_next, elt_no++)
{
if (bfd_check_format (current, bfd_object)
&& (bfd_get_file_flags (current) & HAS_SYMS) != 0)
@@ -1963,7 +1971,7 @@ bsd_write_armap (bfd *arch,
{
firstreal += arelt_size (current) + sizeof (struct ar_hdr);
firstreal += firstreal % 2;
- current = current->next;
+ current = current->archive_next;
}
while (current != map[count].u.abfd);
}
@@ -2133,7 +2141,7 @@ coff_write_armap (bfd *arch,
archive_member_file_ptr += arelt_size (current) + sizeof (struct ar_hdr);
/* Remember aboout the even alignment. */
archive_member_file_ptr += archive_member_file_ptr % 2;
- current = current->next;
+ current = current->archive_next;
}
/* Now write the strings themselves. */
diff --git a/bfd/archive64.c b/bfd/archive64.c
index 3b28f853c216..5e2bf1198c20 100644
--- a/bfd/archive64.c
+++ b/bfd/archive64.c
@@ -1,30 +1,30 @@
/* MIPS-specific support for 64-bit ELF
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2006, 2007
Free Software Foundation, Inc.
Ian Lance Taylor, Cygnus Support
Linker support added by Mark Mitchell, CodeSourcery, LLC.
<mark@codesourcery.com>
-This file is part of BFD, the Binary File Descriptor library.
+ This file is part of BFD, the Binary File Descriptor library.
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+ This program is free software; you can 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.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU General Public 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 supports the 64-bit (MIPS) ELF archives. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "aout/ar.h"
@@ -65,10 +65,10 @@ bfd_elf64_archive_slurp_armap (bfd *abfd)
return FALSE;
/* Archives with traditional armaps are still permitted. */
- if (strncmp (nextname, "/ ", 16) == 0)
+ if (CONST_STRNEQ (nextname, "/ "))
return bfd_slurp_armap (abfd);
- if (strncmp (nextname, "/SYM64/ ", 16) != 0)
+ if (! CONST_STRNEQ (nextname, "/SYM64/ "))
{
bfd_has_map (abfd) = FALSE;
return TRUE;
@@ -215,7 +215,7 @@ bfd_elf64_archive_write_armap (bfd *arch,
+ sizeof (struct ar_hdr));
/* remember about the even alignment */
archive_member_file_ptr += archive_member_file_ptr % 2;
- current = current->next;
+ current = current->archive_next;
}
/* now write the strings themselves */
diff --git a/bfd/archures.c b/bfd/archures.c
index f4080a63a46e..df4e788b79e8 100644
--- a/bfd/archures.c
+++ b/bfd/archures.c
@@ -1,6 +1,6 @@
/* BFD library support routines for architectures.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Hacked by John Gilmore and Steve Chamberlain of Cygnus Support.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "safe-ctype.h"
@@ -80,22 +80,26 @@ DESCRIPTION
.#define bfd_mach_m68040 6
.#define bfd_mach_m68060 7
.#define bfd_mach_cpu32 8
-.#define bfd_mach_mcf_isa_a_nodiv 9
-.#define bfd_mach_mcf_isa_a 10
-.#define bfd_mach_mcf_isa_a_mac 11
-.#define bfd_mach_mcf_isa_a_emac 12
-.#define bfd_mach_mcf_isa_aplus 13
-.#define bfd_mach_mcf_isa_aplus_mac 14
-.#define bfd_mach_mcf_isa_aplus_emac 15
-.#define bfd_mach_mcf_isa_b_nousp 16
-.#define bfd_mach_mcf_isa_b_nousp_mac 17
-.#define bfd_mach_mcf_isa_b_nousp_emac 18
-.#define bfd_mach_mcf_isa_b 19
-.#define bfd_mach_mcf_isa_b_mac 20
-.#define bfd_mach_mcf_isa_b_emac 21
-.#define bfd_mach_mcf_isa_b_float 22
-.#define bfd_mach_mcf_isa_b_float_mac 23
-.#define bfd_mach_mcf_isa_b_float_emac 24
+.#define bfd_mach_fido 9
+.#define bfd_mach_mcf_isa_a_nodiv 10
+.#define bfd_mach_mcf_isa_a 11
+.#define bfd_mach_mcf_isa_a_mac 12
+.#define bfd_mach_mcf_isa_a_emac 13
+.#define bfd_mach_mcf_isa_aplus 14
+.#define bfd_mach_mcf_isa_aplus_mac 15
+.#define bfd_mach_mcf_isa_aplus_emac 16
+.#define bfd_mach_mcf_isa_b_nousp 17
+.#define bfd_mach_mcf_isa_b_nousp_mac 18
+.#define bfd_mach_mcf_isa_b_nousp_emac 19
+.#define bfd_mach_mcf_isa_b 20
+.#define bfd_mach_mcf_isa_b_mac 21
+.#define bfd_mach_mcf_isa_b_emac 22
+.#define bfd_mach_mcf_isa_b_float 23
+.#define bfd_mach_mcf_isa_b_float_mac 24
+.#define bfd_mach_mcf_isa_b_float_emac 25
+.#define bfd_mach_mcf_isa_c 26
+.#define bfd_mach_mcf_isa_c_mac 27
+.#define bfd_mach_mcf_isa_c_emac 28
. bfd_arch_vax, {* DEC Vax *}
. bfd_arch_i960, {* Intel 960 *}
. {* The order of the following is important.
@@ -136,6 +140,8 @@ DESCRIPTION
.{* Nonzero if MACH is a 64 bit sparc architecture. *}
.#define bfd_mach_sparc_64bit_p(mach) \
. ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb)
+. bfd_arch_spu, {* PowerPC SPU *}
+.#define bfd_mach_spu 256
. bfd_arch_mips, {* MIPS Rxxxx *}
.#define bfd_mach_mips3000 3000
.#define bfd_mach_mips3900 3900
@@ -273,6 +279,7 @@ DESCRIPTION
.#define bfd_mach_arm_XScale 10
.#define bfd_mach_arm_ep9312 11
.#define bfd_mach_arm_iWMMXt 12
+.#define bfd_mach_arm_iWMMXt2 13
. bfd_arch_ns32k, {* National Semiconductors ns32000 *}
. bfd_arch_w65, {* WDC 65816 *}
. bfd_arch_tic30, {* Texas Instruments TMS320C30 *}
@@ -314,6 +321,9 @@ DESCRIPTION
.#define bfd_mach_fr500 500
.#define bfd_mach_fr550 550
. bfd_arch_mcore,
+. bfd_arch_mep,
+.#define bfd_mach_mep 1
+.#define bfd_mach_mep_h1 0x6831
. bfd_arch_ia64, {* HP/Intel ia64 *}
.#define bfd_mach_ia64_elf64 64
.#define bfd_mach_ia64_elf32 32
@@ -334,8 +344,11 @@ DESCRIPTION
.#define bfd_mach_avr3 3
.#define bfd_mach_avr4 4
.#define bfd_mach_avr5 5
+.#define bfd_mach_avr6 6
. bfd_arch_bfin, {* ADI Blackfin *}
.#define bfd_mach_bfin 1
+. bfd_arch_cr16, {* National Semiconductor CompactRISC (ie CR16). *}
+.#define bfd_mach_cr16 1
. bfd_arch_cr16c, {* National Semiconductor CompactRISC. *}
.#define bfd_mach_cr16c 1
. bfd_arch_crx, {* National Semiconductor CRX. *}
@@ -347,6 +360,7 @@ DESCRIPTION
. bfd_arch_s390, {* IBM s390 *}
.#define bfd_mach_s390_31 31
.#define bfd_mach_s390_64 64
+. bfd_arch_score, {* Sunplus score *}
. bfd_arch_openrisc, {* OpenRISC *}
. bfd_arch_mmix, {* Donald Knuth's educational processor. *}
. bfd_arch_xstormy16,
@@ -424,6 +438,7 @@ extern const bfd_arch_info_type bfd_arc_arch;
extern const bfd_arch_info_type bfd_arm_arch;
extern const bfd_arch_info_type bfd_avr_arch;
extern const bfd_arch_info_type bfd_bfin_arch;
+extern const bfd_arch_info_type bfd_cr16_arch;
extern const bfd_arch_info_type bfd_cr16c_arch;
extern const bfd_arch_info_type bfd_cris_arch;
extern const bfd_arch_info_type bfd_crx_arch;
@@ -450,6 +465,7 @@ extern const bfd_arch_info_type bfd_m68k_arch;
extern const bfd_arch_info_type bfd_m88k_arch;
extern const bfd_arch_info_type bfd_maxq_arch;
extern const bfd_arch_info_type bfd_mcore_arch;
+extern const bfd_arch_info_type bfd_mep_arch;
extern const bfd_arch_info_type bfd_mips_arch;
extern const bfd_arch_info_type bfd_mmix_arch;
extern const bfd_arch_info_type bfd_mn10200_arch;
@@ -465,8 +481,10 @@ extern const bfd_arch_info_type bfd_powerpc_archs[];
#define bfd_powerpc_arch bfd_powerpc_archs[0]
extern const bfd_arch_info_type bfd_rs6000_arch;
extern const bfd_arch_info_type bfd_s390_arch;
+extern const bfd_arch_info_type bfd_score_arch;
extern const bfd_arch_info_type bfd_sh_arch;
extern const bfd_arch_info_type bfd_sparc_arch;
+extern const bfd_arch_info_type bfd_spu_arch;
extern const bfd_arch_info_type bfd_tic30_arch;
extern const bfd_arch_info_type bfd_tic4x_arch;
extern const bfd_arch_info_type bfd_tic54x_arch;
@@ -491,6 +509,7 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
&bfd_arm_arch,
&bfd_avr_arch,
&bfd_bfin_arch,
+ &bfd_cr16_arch,
&bfd_cr16c_arch,
&bfd_cris_arch,
&bfd_crx_arch,
@@ -517,6 +536,7 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
&bfd_m88k_arch,
&bfd_maxq_arch,
&bfd_mcore_arch,
+ &bfd_mep_arch,
&bfd_mips_arch,
&bfd_mmix_arch,
&bfd_mn10200_arch,
@@ -530,8 +550,10 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
&bfd_powerpc_arch,
&bfd_rs6000_arch,
&bfd_s390_arch,
+ &bfd_score_arch,
&bfd_sh_arch,
&bfd_sparc_arch,
+ &bfd_spu_arch,
&bfd_tic30_arch,
&bfd_tic4x_arch,
&bfd_tic54x_arch,
diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h
index 33b649d05855..617aa07ec550 100644
--- a/bfd/bfd-in.h
+++ b/bfd/bfd-in.h
@@ -1,7 +1,7 @@
/* Main header file for the bfd library -- portable access to object files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by Cygnus Support.
@@ -43,6 +43,30 @@ extern "C" {
#endif
#endif
+/* This is a utility macro to handle the situation where the code
+ wants to place a constant string into the code, followed by a
+ comma and then the length of the string. Doing this by hand
+ is error prone, so using this macro is safer. The macro will
+ also safely handle the case where a NULL is passed as the arg. */
+#define STRING_COMMA_LEN(STR) (STR), ((STR) ? sizeof (STR) - 1 : 0)
+/* Unfortunately it is not possible to use the STRING_COMMA_LEN macro
+ to create the arguments to another macro, since the preprocessor
+ will mis-count the number of arguments to the outer macro (by not
+ evaluating STRING_COMMA_LEN and so missing the comma). This is a
+ problem for example when trying to use STRING_COMMA_LEN to build
+ the arguments to the strncmp() macro. Hence this alternative
+ definition of strncmp is provided here.
+
+ Note - these macros do NOT work if STR2 is not a constant string. */
+#define CONST_STRNEQ(STR1,STR2) (strncmp ((STR1), (STR2), sizeof (STR2) - 1) == 0)
+ /* strcpy() can have a similar problem, but since we know we are
+ copying a constant string, we can use memcpy which will be faster
+ since there is no need to check for a NUL byte inside STR. We
+ can also save time if we do not need to copy the terminating NUL. */
+#define LITMEMCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2) - 1)
+#define LITSTRCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2))
+
+
/* The word size used by BFD on the host. This may be 64 with a 32
bit target if the host is 64 bit, or if other 64 bit targets have
been selected with --enable-targets, or if --enable-64-bit-bfd. */
@@ -326,7 +350,15 @@ typedef struct bfd_section *sec_ptr;
(((sec)->rawsize ? (sec)->rawsize : (sec)->size) \
/ bfd_octets_per_byte (bfd))
-typedef struct stat stat_type;
+/* Return TRUE if section has been discarded. */
+#define elf_discarded_section(sec) \
+ (!bfd_is_abs_section (sec) \
+ && bfd_is_abs_section ((sec)->output_section) \
+ && (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
+ && (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
+
+/* Forward define. */
+struct stat;
typedef enum bfd_print_symbol
{
@@ -374,10 +406,6 @@ struct bfd_hash_table
{
/* The hash array. */
struct bfd_hash_entry **table;
- /* The number of slots in the hash table. */
- unsigned int size;
- /* The size of elements. */
- unsigned int entsize;
/* A function used to create new elements in the hash table. The
first entry is itself a pointer to an element. When this
function is first invoked, this pointer will be NULL. However,
@@ -390,6 +418,14 @@ struct bfd_hash_table
/* An objalloc for this hash table. This is a struct objalloc *,
but we use void * to avoid requiring the inclusion of objalloc.h. */
void *memory;
+ /* The number of slots in the hash table. */
+ unsigned int size;
+ /* The number of entries in the hash table. */
+ unsigned int count;
+ /* The size of elements. */
+ unsigned int entsize;
+ /* If non-zero, don't grow the hash table. */
+ unsigned int frozen:1;
};
/* Initialize a hash table. */
@@ -660,7 +696,7 @@ extern void bfd_elf_set_dt_needed_name
extern const char *bfd_elf_get_dt_soname
(bfd *);
extern void bfd_elf_set_dyn_lib_class
- (bfd *, int);
+ (bfd *, enum dynamic_lib_link_class);
extern int bfd_elf_get_dyn_lib_class
(bfd *);
extern struct bfd_link_needed_list *bfd_elf_get_runpath_list
@@ -817,6 +853,27 @@ extern bfd_boolean bfd_coff_set_symbol_class
extern bfd_boolean bfd_m68k_coff_create_embedded_relocs
(bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, char **);
+/* ARM VFP11 erratum workaround support. */
+typedef enum
+{
+ BFD_ARM_VFP11_FIX_DEFAULT,
+ BFD_ARM_VFP11_FIX_NONE,
+ BFD_ARM_VFP11_FIX_SCALAR,
+ BFD_ARM_VFP11_FIX_VECTOR
+} bfd_arm_vfp11_fix;
+
+extern void bfd_elf32_arm_init_maps
+ (bfd *);
+
+extern void bfd_elf32_arm_set_vfp11_fix
+ (bfd *, struct bfd_link_info *);
+
+extern bfd_boolean bfd_elf32_arm_vfp11_erratum_scan
+ (bfd *, struct bfd_link_info *);
+
+extern void bfd_elf32_arm_vfp11_fix_veneer_locations
+ (bfd *, struct bfd_link_info *);
+
/* ARM Interworking support. Called from linker. */
extern bfd_boolean bfd_arm_allocate_interworking_sections
(struct bfd_link_info *);
@@ -842,10 +899,11 @@ extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections
(struct bfd_link_info *);
extern bfd_boolean bfd_elf32_arm_process_before_allocation
- (bfd *, struct bfd_link_info *, int);
+ (bfd *, struct bfd_link_info *);
void bfd_elf32_arm_set_target_relocs
- (struct bfd_link_info *, int, char *, int, int);
+ (bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix,
+ int, int);
extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
(bfd *, struct bfd_link_info *);
@@ -854,8 +912,14 @@ extern bfd_boolean bfd_elf32_arm_add_glue_sections_to_bfd
(bfd *, struct bfd_link_info *);
/* ELF ARM mapping symbol support */
-extern bfd_boolean bfd_is_arm_mapping_symbol_name
- (const char * name);
+#define BFD_ARM_SPECIAL_SYM_TYPE_MAP (1 << 0)
+#define BFD_ARM_SPECIAL_SYM_TYPE_TAG (1 << 1)
+#define BFD_ARM_SPECIAL_SYM_TYPE_OTHER (1 << 2)
+#define BFD_ARM_SPECIAL_SYM_TYPE_ANY (~0)
+extern bfd_boolean bfd_is_arm_special_symbol_name
+ (const char * name, int type);
+
+extern void bfd_elf32_arm_set_byteswap_code (struct bfd_link_info *, int);
/* ARM Note section processing. */
extern bfd_boolean bfd_arm_merge_machines
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index ddcda2377df6..8ea1cdd3b188 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -8,7 +8,7 @@
/* Main header file for the bfd library -- portable access to object files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by Cygnus Support.
@@ -50,6 +50,30 @@ extern "C" {
#endif
#endif
+/* This is a utility macro to handle the situation where the code
+ wants to place a constant string into the code, followed by a
+ comma and then the length of the string. Doing this by hand
+ is error prone, so using this macro is safer. The macro will
+ also safely handle the case where a NULL is passed as the arg. */
+#define STRING_COMMA_LEN(STR) (STR), ((STR) ? sizeof (STR) - 1 : 0)
+/* Unfortunately it is not possible to use the STRING_COMMA_LEN macro
+ to create the arguments to another macro, since the preprocessor
+ will mis-count the number of arguments to the outer macro (by not
+ evaluating STRING_COMMA_LEN and so missing the comma). This is a
+ problem for example when trying to use STRING_COMMA_LEN to build
+ the arguments to the strncmp() macro. Hence this alternative
+ definition of strncmp is provided here.
+
+ Note - these macros do NOT work if STR2 is not a constant string. */
+#define CONST_STRNEQ(STR1,STR2) (strncmp ((STR1), (STR2), sizeof (STR2) - 1) == 0)
+ /* strcpy() can have a similar problem, but since we know we are
+ copying a constant string, we can use memcpy which will be faster
+ since there is no need to check for a NUL byte inside STR. We
+ can also save time if we do not need to copy the terminating NUL. */
+#define LITMEMCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2) - 1)
+#define LITSTRCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2))
+
+
/* The word size used by BFD on the host. This may be 64 with a 32
bit target if the host is 64 bit, or if other 64 bit targets have
been selected with --enable-targets, or if --enable-64-bit-bfd. */
@@ -333,7 +357,15 @@ typedef struct bfd_section *sec_ptr;
(((sec)->rawsize ? (sec)->rawsize : (sec)->size) \
/ bfd_octets_per_byte (bfd))
-typedef struct stat stat_type;
+/* Return TRUE if section has been discarded. */
+#define elf_discarded_section(sec) \
+ (!bfd_is_abs_section (sec) \
+ && bfd_is_abs_section ((sec)->output_section) \
+ && (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
+ && (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
+
+/* Forward define. */
+struct stat;
typedef enum bfd_print_symbol
{
@@ -381,10 +413,6 @@ struct bfd_hash_table
{
/* The hash array. */
struct bfd_hash_entry **table;
- /* The number of slots in the hash table. */
- unsigned int size;
- /* The size of elements. */
- unsigned int entsize;
/* A function used to create new elements in the hash table. The
first entry is itself a pointer to an element. When this
function is first invoked, this pointer will be NULL. However,
@@ -397,6 +425,14 @@ struct bfd_hash_table
/* An objalloc for this hash table. This is a struct objalloc *,
but we use void * to avoid requiring the inclusion of objalloc.h. */
void *memory;
+ /* The number of slots in the hash table. */
+ unsigned int size;
+ /* The number of entries in the hash table. */
+ unsigned int count;
+ /* The size of elements. */
+ unsigned int entsize;
+ /* If non-zero, don't grow the hash table. */
+ unsigned int frozen:1;
};
/* Initialize a hash table. */
@@ -667,7 +703,7 @@ extern void bfd_elf_set_dt_needed_name
extern const char *bfd_elf_get_dt_soname
(bfd *);
extern void bfd_elf_set_dyn_lib_class
- (bfd *, int);
+ (bfd *, enum dynamic_lib_link_class);
extern int bfd_elf_get_dyn_lib_class
(bfd *);
extern struct bfd_link_needed_list *bfd_elf_get_runpath_list
@@ -824,6 +860,27 @@ extern bfd_boolean bfd_coff_set_symbol_class
extern bfd_boolean bfd_m68k_coff_create_embedded_relocs
(bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, char **);
+/* ARM VFP11 erratum workaround support. */
+typedef enum
+{
+ BFD_ARM_VFP11_FIX_DEFAULT,
+ BFD_ARM_VFP11_FIX_NONE,
+ BFD_ARM_VFP11_FIX_SCALAR,
+ BFD_ARM_VFP11_FIX_VECTOR
+} bfd_arm_vfp11_fix;
+
+extern void bfd_elf32_arm_init_maps
+ (bfd *);
+
+extern void bfd_elf32_arm_set_vfp11_fix
+ (bfd *, struct bfd_link_info *);
+
+extern bfd_boolean bfd_elf32_arm_vfp11_erratum_scan
+ (bfd *, struct bfd_link_info *);
+
+extern void bfd_elf32_arm_vfp11_fix_veneer_locations
+ (bfd *, struct bfd_link_info *);
+
/* ARM Interworking support. Called from linker. */
extern bfd_boolean bfd_arm_allocate_interworking_sections
(struct bfd_link_info *);
@@ -849,10 +906,11 @@ extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections
(struct bfd_link_info *);
extern bfd_boolean bfd_elf32_arm_process_before_allocation
- (bfd *, struct bfd_link_info *, int);
+ (bfd *, struct bfd_link_info *);
void bfd_elf32_arm_set_target_relocs
- (struct bfd_link_info *, int, char *, int, int);
+ (bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix,
+ int, int);
extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
(bfd *, struct bfd_link_info *);
@@ -861,8 +919,14 @@ extern bfd_boolean bfd_elf32_arm_add_glue_sections_to_bfd
(bfd *, struct bfd_link_info *);
/* ELF ARM mapping symbol support */
-extern bfd_boolean bfd_is_arm_mapping_symbol_name
- (const char * name);
+#define BFD_ARM_SPECIAL_SYM_TYPE_MAP (1 << 0)
+#define BFD_ARM_SPECIAL_SYM_TYPE_TAG (1 << 1)
+#define BFD_ARM_SPECIAL_SYM_TYPE_OTHER (1 << 2)
+#define BFD_ARM_SPECIAL_SYM_TYPE_ANY (~0)
+extern bfd_boolean bfd_is_arm_special_symbol_name
+ (const char * name, int type);
+
+extern void bfd_elf32_arm_set_byteswap_code (struct bfd_link_info *, int);
/* ARM Note section processing. */
extern bfd_boolean bfd_arm_merge_machines
@@ -935,7 +999,10 @@ bfd *bfd_openr_iovec (const char *filename, const char *target,
file_ptr nbytes,
file_ptr offset),
int (*close) (struct bfd *nbfd,
- void *stream));
+ void *stream),
+ int (*stat) (struct bfd *abfd,
+ void *stream,
+ struct stat *sb));
bfd *bfd_openw (const char *filename, const char *target);
@@ -1076,7 +1143,7 @@ bfd_boolean bfd_fill_in_gnu_debuglink_section
/* Extracted from bfdio.c. */
long bfd_get_mtime (bfd *abfd);
-long bfd_get_size (bfd *abfd);
+file_ptr bfd_get_size (bfd *abfd);
/* Extracted from bfdwin.c. */
/* Extracted from section.c. */
@@ -1225,7 +1292,9 @@ typedef struct bfd_section
else up the line will take care of it later. */
#define SEC_LINKER_CREATED 0x200000
- /* This section should not be subject to garbage collection. */
+ /* This section should not be subject to garbage collection.
+ Also set to inform the linker that this section should not be
+ listed in the link map as discarded. */
#define SEC_KEEP 0x400000
/* This section contains "short" data, and should be placed
@@ -1471,11 +1540,6 @@ extern asection bfd_ind_section;
|| ((SEC) == bfd_com_section_ptr) \
|| ((SEC) == bfd_ind_section_ptr))
-extern const struct bfd_symbol * const bfd_abs_symbol;
-extern const struct bfd_symbol * const bfd_com_symbol;
-extern const struct bfd_symbol * const bfd_und_symbol;
-extern const struct bfd_symbol * const bfd_ind_symbol;
-
/* Macros to handle insertion and deletion of a bfd's sections. These
only handle the list pointers, ie. do not adjust section_count,
target_index etc. */
@@ -1566,7 +1630,7 @@ extern const struct bfd_symbol * const bfd_ind_symbol;
#define bfd_section_removed_from_list(ABFD, S) \
((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
-#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, SYM_PTR, NAME, IDX) \
+#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, NAME, IDX) \
/* name, id, index, next, prev, flags, user_set_vma, */ \
{ NAME, IDX, 0, NULL, NULL, FLAGS, 0, \
\
@@ -1597,11 +1661,8 @@ extern const struct bfd_symbol * const bfd_ind_symbol;
/* target_index, used_by_bfd, constructor_chain, owner, */ \
0, NULL, NULL, NULL, \
\
- /* symbol, */ \
- (struct bfd_symbol *) SYM, \
- \
- /* symbol_ptr_ptr, */ \
- (struct bfd_symbol **) SYM_PTR, \
+ /* symbol, symbol_ptr_ptr, */ \
+ (struct bfd_symbol *) SYM, &SEC.symbol, \
\
/* map_head, map_tail */ \
{ NULL }, { NULL } \
@@ -1683,22 +1744,26 @@ enum bfd_architecture
#define bfd_mach_m68040 6
#define bfd_mach_m68060 7
#define bfd_mach_cpu32 8
-#define bfd_mach_mcf_isa_a_nodiv 9
-#define bfd_mach_mcf_isa_a 10
-#define bfd_mach_mcf_isa_a_mac 11
-#define bfd_mach_mcf_isa_a_emac 12
-#define bfd_mach_mcf_isa_aplus 13
-#define bfd_mach_mcf_isa_aplus_mac 14
-#define bfd_mach_mcf_isa_aplus_emac 15
-#define bfd_mach_mcf_isa_b_nousp 16
-#define bfd_mach_mcf_isa_b_nousp_mac 17
-#define bfd_mach_mcf_isa_b_nousp_emac 18
-#define bfd_mach_mcf_isa_b 19
-#define bfd_mach_mcf_isa_b_mac 20
-#define bfd_mach_mcf_isa_b_emac 21
-#define bfd_mach_mcf_isa_b_float 22
-#define bfd_mach_mcf_isa_b_float_mac 23
-#define bfd_mach_mcf_isa_b_float_emac 24
+#define bfd_mach_fido 9
+#define bfd_mach_mcf_isa_a_nodiv 10
+#define bfd_mach_mcf_isa_a 11
+#define bfd_mach_mcf_isa_a_mac 12
+#define bfd_mach_mcf_isa_a_emac 13
+#define bfd_mach_mcf_isa_aplus 14
+#define bfd_mach_mcf_isa_aplus_mac 15
+#define bfd_mach_mcf_isa_aplus_emac 16
+#define bfd_mach_mcf_isa_b_nousp 17
+#define bfd_mach_mcf_isa_b_nousp_mac 18
+#define bfd_mach_mcf_isa_b_nousp_emac 19
+#define bfd_mach_mcf_isa_b 20
+#define bfd_mach_mcf_isa_b_mac 21
+#define bfd_mach_mcf_isa_b_emac 22
+#define bfd_mach_mcf_isa_b_float 23
+#define bfd_mach_mcf_isa_b_float_mac 24
+#define bfd_mach_mcf_isa_b_float_emac 25
+#define bfd_mach_mcf_isa_c 26
+#define bfd_mach_mcf_isa_c_mac 27
+#define bfd_mach_mcf_isa_c_emac 28
bfd_arch_vax, /* DEC Vax */
bfd_arch_i960, /* Intel 960 */
/* The order of the following is important.
@@ -1739,6 +1804,8 @@ enum bfd_architecture
/* Nonzero if MACH is a 64 bit sparc architecture. */
#define bfd_mach_sparc_64bit_p(mach) \
((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb)
+ bfd_arch_spu, /* PowerPC SPU */
+#define bfd_mach_spu 256
bfd_arch_mips, /* MIPS Rxxxx */
#define bfd_mach_mips3000 3000
#define bfd_mach_mips3900 3900
@@ -1876,6 +1943,7 @@ enum bfd_architecture
#define bfd_mach_arm_XScale 10
#define bfd_mach_arm_ep9312 11
#define bfd_mach_arm_iWMMXt 12
+#define bfd_mach_arm_iWMMXt2 13
bfd_arch_ns32k, /* National Semiconductors ns32000 */
bfd_arch_w65, /* WDC 65816 */
bfd_arch_tic30, /* Texas Instruments TMS320C30 */
@@ -1917,6 +1985,9 @@ enum bfd_architecture
#define bfd_mach_fr500 500
#define bfd_mach_fr550 550
bfd_arch_mcore,
+ bfd_arch_mep,
+#define bfd_mach_mep 1
+#define bfd_mach_mep_h1 0x6831
bfd_arch_ia64, /* HP/Intel ia64 */
#define bfd_mach_ia64_elf64 64
#define bfd_mach_ia64_elf32 32
@@ -1937,8 +2008,11 @@ enum bfd_architecture
#define bfd_mach_avr3 3
#define bfd_mach_avr4 4
#define bfd_mach_avr5 5
+#define bfd_mach_avr6 6
bfd_arch_bfin, /* ADI Blackfin */
#define bfd_mach_bfin 1
+ bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */
+#define bfd_mach_cr16 1
bfd_arch_cr16c, /* National Semiconductor CompactRISC. */
#define bfd_mach_cr16c 1
bfd_arch_crx, /* National Semiconductor CRX. */
@@ -1950,6 +2024,7 @@ enum bfd_architecture
bfd_arch_s390, /* IBM s390 */
#define bfd_mach_s390_31 31
#define bfd_mach_s390_64 64
+ bfd_arch_score, /* Sunplus score */
bfd_arch_openrisc, /* OpenRISC */
bfd_arch_mmix, /* Donald Knuth's educational processor. */
bfd_arch_xstormy16,
@@ -2427,6 +2502,22 @@ relocation types already defined. */
BFD_RELOC_SPARC_TLS_TPOFF32,
BFD_RELOC_SPARC_TLS_TPOFF64,
+/* SPU Relocations. */
+ BFD_RELOC_SPU_IMM7,
+ BFD_RELOC_SPU_IMM8,
+ BFD_RELOC_SPU_IMM10,
+ BFD_RELOC_SPU_IMM10W,
+ BFD_RELOC_SPU_IMM16,
+ BFD_RELOC_SPU_IMM16W,
+ BFD_RELOC_SPU_IMM18,
+ BFD_RELOC_SPU_PCREL9a,
+ BFD_RELOC_SPU_PCREL9b,
+ BFD_RELOC_SPU_PCREL16,
+ BFD_RELOC_SPU_LO16,
+ BFD_RELOC_SPU_HI16,
+ BFD_RELOC_SPU_PPU32,
+ BFD_RELOC_SPU_PPU64,
+
/* Alpha ECOFF and ELF relocations. Some of these treat the symbol or
"addend" in some special way.
For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
@@ -2909,6 +3000,16 @@ pc-relative or some form of GOT-indirect relocation. */
/* 31-bit PC relative address. */
BFD_RELOC_ARM_PREL31,
+/* Low and High halfword relocations for MOVW and MOVT instructions. */
+ BFD_RELOC_ARM_MOVW,
+ BFD_RELOC_ARM_MOVT,
+ BFD_RELOC_ARM_MOVW_PCREL,
+ BFD_RELOC_ARM_MOVT_PCREL,
+ BFD_RELOC_ARM_THUMB_MOVW,
+ BFD_RELOC_ARM_THUMB_MOVT,
+ BFD_RELOC_ARM_THUMB_MOVW_PCREL,
+ BFD_RELOC_ARM_THUMB_MOVT_PCREL,
+
/* Relocations for setting up GOTs and PLTs for shared libraries. */
BFD_RELOC_ARM_JUMP_SLOT,
BFD_RELOC_ARM_GLOB_DAT,
@@ -2928,11 +3029,42 @@ pc-relative or some form of GOT-indirect relocation. */
BFD_RELOC_ARM_TLS_IE32,
BFD_RELOC_ARM_TLS_LE32,
+/* ARM group relocations. */
+ BFD_RELOC_ARM_ALU_PC_G0_NC,
+ BFD_RELOC_ARM_ALU_PC_G0,
+ BFD_RELOC_ARM_ALU_PC_G1_NC,
+ BFD_RELOC_ARM_ALU_PC_G1,
+ BFD_RELOC_ARM_ALU_PC_G2,
+ BFD_RELOC_ARM_LDR_PC_G0,
+ BFD_RELOC_ARM_LDR_PC_G1,
+ BFD_RELOC_ARM_LDR_PC_G2,
+ BFD_RELOC_ARM_LDRS_PC_G0,
+ BFD_RELOC_ARM_LDRS_PC_G1,
+ BFD_RELOC_ARM_LDRS_PC_G2,
+ BFD_RELOC_ARM_LDC_PC_G0,
+ BFD_RELOC_ARM_LDC_PC_G1,
+ BFD_RELOC_ARM_LDC_PC_G2,
+ BFD_RELOC_ARM_ALU_SB_G0_NC,
+ BFD_RELOC_ARM_ALU_SB_G0,
+ BFD_RELOC_ARM_ALU_SB_G1_NC,
+ BFD_RELOC_ARM_ALU_SB_G1,
+ BFD_RELOC_ARM_ALU_SB_G2,
+ BFD_RELOC_ARM_LDR_SB_G0,
+ BFD_RELOC_ARM_LDR_SB_G1,
+ BFD_RELOC_ARM_LDR_SB_G2,
+ BFD_RELOC_ARM_LDRS_SB_G0,
+ BFD_RELOC_ARM_LDRS_SB_G1,
+ BFD_RELOC_ARM_LDRS_SB_G2,
+ BFD_RELOC_ARM_LDC_SB_G0,
+ BFD_RELOC_ARM_LDC_SB_G1,
+ BFD_RELOC_ARM_LDC_SB_G2,
+
/* These relocs are only used within the ARM assembler. They are not
(at present) written to any object files. */
BFD_RELOC_ARM_IMMEDIATE,
BFD_RELOC_ARM_ADRL_IMMEDIATE,
BFD_RELOC_ARM_T32_IMMEDIATE,
+ BFD_RELOC_ARM_T32_ADD_IMM,
BFD_RELOC_ARM_T32_IMM12,
BFD_RELOC_ARM_T32_ADD_PC12,
BFD_RELOC_ARM_SHIFT_IMM,
@@ -3446,6 +3578,29 @@ short offset into 11 bits. */
BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2,
BFD_RELOC_MCORE_RVA,
+/* Toshiba Media Processor Relocations. */
+ BFD_RELOC_MEP_8,
+ BFD_RELOC_MEP_16,
+ BFD_RELOC_MEP_32,
+ BFD_RELOC_MEP_PCREL8A2,
+ BFD_RELOC_MEP_PCREL12A2,
+ BFD_RELOC_MEP_PCREL17A2,
+ BFD_RELOC_MEP_PCREL24A2,
+ BFD_RELOC_MEP_PCABS24A2,
+ BFD_RELOC_MEP_LOW16,
+ BFD_RELOC_MEP_HI16U,
+ BFD_RELOC_MEP_HI16S,
+ BFD_RELOC_MEP_GPREL,
+ BFD_RELOC_MEP_TPREL,
+ BFD_RELOC_MEP_TPREL7,
+ BFD_RELOC_MEP_TPREL7A2,
+ BFD_RELOC_MEP_TPREL7A4,
+ BFD_RELOC_MEP_UIMM24,
+ BFD_RELOC_MEP_ADDR24A4,
+ BFD_RELOC_MEP_GNU_VTINHERIT,
+ BFD_RELOC_MEP_GNU_VTENTRY,
+
+
/* These are relocations for the GETA instruction. */
BFD_RELOC_MMIX_GETA,
BFD_RELOC_MMIX_GETA_1,
@@ -3545,10 +3700,22 @@ of 32 bit value) into 8 bit immediate value of LDI insn. */
command address) into 8 bit immediate value of LDI insn. */
BFD_RELOC_AVR_LO8_LDI_PM,
+/* This is a 16 bit reloc for the AVR that stores 8 bit value
+(command address) into 8 bit immediate value of LDI insn. If the address
+is beyond the 128k boundary, the linker inserts a jump stub for this reloc
+in the lower 128k. */
+ BFD_RELOC_AVR_LO8_LDI_GS,
+
/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
of command address) into 8 bit immediate value of LDI insn. */
BFD_RELOC_AVR_HI8_LDI_PM,
+/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
+of command address) into 8 bit immediate value of LDI insn. If the address
+is beyond the 128k boundary, the linker inserts a jump stub for this reloc
+below 128k. */
+ BFD_RELOC_AVR_HI8_LDI_GS,
+
/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
of command address) into 8 bit immediate value of LDI insn. */
BFD_RELOC_AVR_HH8_LDI_PM,
@@ -3689,6 +3856,31 @@ instructions */
BFD_RELOC_390_GOTPLT20,
BFD_RELOC_390_TLS_GOTIE20,
+/* Score relocations */
+ BFD_RELOC_SCORE_DUMMY1,
+
+/* Low 16 bit for load/store */
+ BFD_RELOC_SCORE_GPREL15,
+
+/* This is a 24-bit reloc with the right 1 bit assumed to be 0 */
+ BFD_RELOC_SCORE_DUMMY2,
+ BFD_RELOC_SCORE_JMP,
+
+/* This is a 19-bit reloc with the right 1 bit assumed to be 0 */
+ BFD_RELOC_SCORE_BRANCH,
+
+/* This is a 11-bit reloc with the right 1 bit assumed to be 0 */
+ BFD_RELOC_SCORE16_JMP,
+
+/* This is a 8-bit reloc with the right 1 bit assumed to be 0 */
+ BFD_RELOC_SCORE16_BRANCH,
+
+/* Undocumented Score relocs */
+ BFD_RELOC_SCORE_GOT15,
+ BFD_RELOC_SCORE_GOT_LO16,
+ BFD_RELOC_SCORE_CALL15,
+ BFD_RELOC_SCORE_DUMMY_HI16,
+
/* Scenix IP2K - 9-bit register number / data address */
BFD_RELOC_IP2K_FR9,
@@ -3913,6 +4105,35 @@ This is the 5 bits of a value. */
BFD_RELOC_16C_IMM32,
BFD_RELOC_16C_IMM32_C,
+/* NS CR16 Relocations. */
+ BFD_RELOC_CR16_NUM8,
+ BFD_RELOC_CR16_NUM16,
+ BFD_RELOC_CR16_NUM32,
+ BFD_RELOC_CR16_NUM32a,
+ BFD_RELOC_CR16_REGREL0,
+ BFD_RELOC_CR16_REGREL4,
+ BFD_RELOC_CR16_REGREL4a,
+ BFD_RELOC_CR16_REGREL14,
+ BFD_RELOC_CR16_REGREL14a,
+ BFD_RELOC_CR16_REGREL16,
+ BFD_RELOC_CR16_REGREL20,
+ BFD_RELOC_CR16_REGREL20a,
+ BFD_RELOC_CR16_ABS20,
+ BFD_RELOC_CR16_ABS24,
+ BFD_RELOC_CR16_IMM4,
+ BFD_RELOC_CR16_IMM8,
+ BFD_RELOC_CR16_IMM16,
+ BFD_RELOC_CR16_IMM20,
+ BFD_RELOC_CR16_IMM24,
+ BFD_RELOC_CR16_IMM32,
+ BFD_RELOC_CR16_IMM32a,
+ BFD_RELOC_CR16_DISP4,
+ BFD_RELOC_CR16_DISP8,
+ BFD_RELOC_CR16_DISP16,
+ BFD_RELOC_CR16_DISP20,
+ BFD_RELOC_CR16_DISP24,
+ BFD_RELOC_CR16_DISP24a,
+
/* NS CRX Relocations. */
BFD_RELOC_CRX_REL4,
BFD_RELOC_CRX_REL8,
@@ -4026,6 +4247,10 @@ This is the 5 bits of a value. */
BFD_RELOC_XSTORMY16_24,
BFD_RELOC_XSTORMY16_FPTR16,
+/* Self-describing complex relocations. */
+ BFD_RELOC_RELC,
+
+
/* Infineon Relocations. */
BFD_RELOC_XC16X_PAG,
BFD_RELOC_XC16X_POF,
@@ -4163,6 +4388,8 @@ BFD_RELOC_XTENSA_ASM_EXPAND. */
typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
reloc_howto_type *bfd_reloc_type_lookup
(bfd *abfd, bfd_reloc_code_real_type code);
+reloc_howto_type *bfd_reloc_name_lookup
+ (bfd *abfd, const char *reloc_name);
const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
@@ -4275,6 +4502,14 @@ typedef struct bfd_symbol
/* This symbol is thread local. Used in ELF. */
#define BSF_THREAD_LOCAL 0x40000
+ /* This symbol represents a complex relocation expression,
+ with the expression tree serialized in the symbol name. */
+#define BSF_RELC 0x80000
+
+ /* This symbol represents a signed complex relocation expression,
+ with the expression tree serialized in the symbol name. */
+#define BSF_SRELC 0x100000
+
flagword flags;
/* A pointer to the section to which this symbol is
@@ -4442,7 +4677,7 @@ struct bfd
/* Stuff only useful for archives. */
void *arelt_data;
struct bfd *my_archive; /* The containing archive BFD. */
- struct bfd *next; /* The next BFD in the archive. */
+ struct bfd *archive_next; /* The next BFD in the archive. */
struct bfd *archive_head; /* The first BFD in the archive. */
bfd_boolean has_armap;
@@ -4524,13 +4759,14 @@ typedef enum bfd_error
bfd_error_bad_value,
bfd_error_file_truncated,
bfd_error_file_too_big,
+ bfd_error_on_input,
bfd_error_invalid_error_code
}
bfd_error_type;
bfd_error_type bfd_get_error (void);
-void bfd_set_error (bfd_error_type error_tag);
+void bfd_set_error (bfd_error_type error_tag, ...);
const char *bfd_errmsg (bfd_error_type error_tag);
@@ -4585,8 +4821,8 @@ bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
#define bfd_set_private_flags(abfd, flags) \
BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
-#define bfd_sizeof_headers(abfd, reloc) \
- BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, reloc))
+#define bfd_sizeof_headers(abfd, info) \
+ BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
BFD_SEND (abfd, _bfd_find_nearest_line, \
@@ -4694,6 +4930,16 @@ void bfd_preserve_restore (bfd *, struct bfd_preserve *);
void bfd_preserve_finish (bfd *, struct bfd_preserve *);
+bfd_vma bfd_emul_get_maxpagesize (const char *);
+
+void bfd_emul_set_maxpagesize (const char *, bfd_vma);
+
+bfd_vma bfd_emul_get_commonpagesize (const char *);
+
+void bfd_emul_set_commonpagesize (const char *, bfd_vma);
+
+char *bfd_demangle (bfd *, const char *, int);
+
/* Extracted from archive.c. */
symindex bfd_get_next_mapent
(bfd *abfd, symindex previous, carsym **sym);
@@ -4992,7 +5238,8 @@ typedef struct bfd_target
#define BFD_JUMP_TABLE_RELOCS(NAME) \
NAME##_get_reloc_upper_bound, \
NAME##_canonicalize_reloc, \
- NAME##_bfd_reloc_type_lookup
+ NAME##_bfd_reloc_type_lookup, \
+ NAME##_bfd_reloc_name_lookup
long (*_get_reloc_upper_bound) (bfd *, sec_ptr);
long (*_bfd_canonicalize_reloc)
@@ -5000,6 +5247,9 @@ typedef struct bfd_target
/* See documentation on reloc types. */
reloc_howto_type *
(*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
+ reloc_howto_type *
+ (*reloc_name_lookup) (bfd *, const char *);
+
/* Routines used when writing an object file. */
#define BFD_JUMP_TABLE_WRITE(NAME) \
@@ -5028,7 +5278,7 @@ typedef struct bfd_target
NAME##_bfd_discard_group, \
NAME##_section_already_linked \
- int (*_bfd_sizeof_headers) (bfd *, bfd_boolean);
+ int (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
bfd_byte * (*_bfd_get_relocated_section_contents)
(bfd *, struct bfd_link_info *, struct bfd_link_order *,
bfd_byte *, bfd_boolean, struct bfd_symbol **);
@@ -5071,7 +5321,8 @@ typedef struct bfd_target
/* Check if SEC has been already linked during a reloceatable or
final link. */
- void (*_section_already_linked) (bfd *, struct bfd_section *);
+ void (*_section_already_linked) (bfd *, struct bfd_section *,
+ struct bfd_link_info *);
/* Routines to handle dynamic symbols and relocs. */
#define BFD_JUMP_TABLE_DYNAMIC(NAME) \
@@ -5131,10 +5382,11 @@ bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
#define bfd_link_split_section(abfd, sec) \
BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
-void bfd_section_already_linked (bfd *abfd, asection *sec);
+void bfd_section_already_linked (bfd *abfd, asection *sec,
+ struct bfd_link_info *info);
-#define bfd_section_already_linked(abfd, sec) \
- BFD_SEND (abfd, _section_already_linked, (abfd, sec))
+#define bfd_section_already_linked(abfd, sec, info) \
+ BFD_SEND (abfd, _section_already_linked, (abfd, sec, info))
/* Extracted from simple.c. */
bfd_byte *bfd_simple_get_relocated_section_contents
diff --git a/bfd/bfd.c b/bfd/bfd.c
index 733f6ee0272d..510df0ab27f5 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -1,6 +1,6 @@
/* Generic BFD library interface and support routines.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -139,7 +139,7 @@ CODE_FRAGMENT
. {* Stuff only useful for archives. *}
. void *arelt_data;
. struct bfd *my_archive; {* The containing archive BFD. *}
-. struct bfd *next; {* The next BFD in the archive. *}
+. struct bfd *archive_next; {* The next BFD in the archive. *}
. struct bfd *archive_head; {* The first BFD in the archive. *}
. bfd_boolean has_armap;
.
@@ -202,11 +202,12 @@ CODE_FRAGMENT
.
*/
-#include "bfd.h"
-#include "bfdver.h"
#include "sysdep.h"
#include <stdarg.h>
+#include "bfd.h"
+#include "bfdver.h"
#include "libiberty.h"
+#include "demangle.h"
#include "safe-ctype.h"
#include "bfdlink.h"
#include "libbfd.h"
@@ -271,6 +272,7 @@ CODE_FRAGMENT
. bfd_error_bad_value,
. bfd_error_file_truncated,
. bfd_error_file_too_big,
+. bfd_error_on_input,
. bfd_error_invalid_error_code
.}
.bfd_error_type;
@@ -278,6 +280,8 @@ CODE_FRAGMENT
*/
static bfd_error_type bfd_error = bfd_error_no_error;
+static bfd *input_bfd = NULL;
+static bfd_error_type input_error = bfd_error_no_error;
const char *const bfd_errmsgs[] =
{
@@ -300,6 +304,7 @@ const char *const bfd_errmsgs[] =
N_("Bad value"),
N_("File truncated"),
N_("File too big"),
+ N_("Error reading %s: %s"),
N_("#<Invalid error code>")
};
@@ -325,16 +330,32 @@ FUNCTION
bfd_set_error
SYNOPSIS
- void bfd_set_error (bfd_error_type error_tag);
+ void bfd_set_error (bfd_error_type error_tag, ...);
DESCRIPTION
Set the BFD error condition to be @var{error_tag}.
+ If @var{error_tag} is bfd_error_on_input, then this function
+ takes two more parameters, the input bfd where the error
+ occurred, and the bfd_error_type error.
*/
void
-bfd_set_error (bfd_error_type error_tag)
+bfd_set_error (bfd_error_type error_tag, ...)
{
bfd_error = error_tag;
+ if (error_tag == bfd_error_on_input)
+ {
+ /* This is an error that occurred during bfd_close when
+ writing an archive, but on one of the input files. */
+ va_list ap;
+
+ va_start (ap, error_tag);
+ input_bfd = va_arg (ap, bfd *);
+ input_error = va_arg (ap, int);
+ if (input_error >= bfd_error_on_input)
+ abort ();
+ va_end (ap);
+ }
}
/*
@@ -355,6 +376,19 @@ bfd_errmsg (bfd_error_type error_tag)
#ifndef errno
extern int errno;
#endif
+ if (error_tag == bfd_error_on_input)
+ {
+ char *buf;
+ const char *msg = bfd_errmsg (input_error);
+
+ if (asprintf (&buf, _(bfd_errmsgs [error_tag]), input_bfd->filename, msg)
+ != -1)
+ return buf;
+
+ /* Ick, what to do on out of memory? */
+ return msg;
+ }
+
if (error_tag == bfd_error_system_call)
return xstrerror (errno);
@@ -382,16 +416,10 @@ DESCRIPTION
void
bfd_perror (const char *message)
{
- if (bfd_get_error () == bfd_error_system_call)
- /* Must be a system error then. */
- perror ((char *) message);
+ if (message == NULL || *message == '\0')
+ fprintf (stderr, "%s\n", bfd_errmsg (bfd_get_error ()));
else
- {
- if (message == NULL || *message == '\0')
- fprintf (stderr, "%s\n", bfd_errmsg (bfd_get_error ()));
- else
- fprintf (stderr, "%s: %s\n", message, bfd_errmsg (bfd_get_error ()));
- }
+ fprintf (stderr, "%s: %s\n", message, bfd_errmsg (bfd_get_error ()));
}
/*
@@ -419,6 +447,23 @@ static const char *_bfd_error_program_name;
%A section name from section. For group components, print group name too.
%B file name from bfd. For archive components, prints archive too.
+
+ Note - because these two extra format specifiers require special handling
+ they are scanned for and processed in this function, before calling
+ vfprintf. This means that the *arguments* for these format specifiers
+ must be the first ones in the variable argument list, regardless of where
+ the specifiers appear in the format string. Thus for example calling
+ this function with a format string of:
+
+ "blah %s blah %A blah %d blah %B"
+
+ would involve passing the arguments as:
+
+ "blah %s blah %A blah %d blah %B",
+ asection_for_the_%A,
+ bfd_for_the_%B,
+ string_for_the_%s,
+ integer_for_the_%d);
*/
void
@@ -483,7 +528,11 @@ _bfd_default_error_handler (const char *fmt, ...)
if (p[1] == 'B')
{
bfd *abfd = va_arg (ap, bfd *);
- if (abfd->my_archive)
+
+ if (abfd == NULL)
+ /* Invoking %B with a null bfd pointer is an internal error. */
+ abort ();
+ else if (abfd->my_archive)
snprintf (bufp, avail, "%s(%s)",
abfd->my_archive->filename, abfd->filename);
else
@@ -492,10 +541,14 @@ _bfd_default_error_handler (const char *fmt, ...)
else
{
asection *sec = va_arg (ap, asection *);
- bfd *abfd = sec->owner;
+ bfd *abfd;
const char *group = NULL;
struct coff_comdat_info *ci;
+ if (sec == NULL)
+ /* Invoking %A with a null section pointer is an internal error. */
+ abort ();
+ abfd = sec->owner;
if (abfd != NULL
&& bfd_get_flavour (abfd) == bfd_target_elf_flavour
&& elf_next_in_group (sec) != NULL
@@ -851,14 +904,16 @@ bfd_get_sign_extend_vma (bfd *abfd)
name = bfd_get_target (abfd);
- /* Return a proper value for DJGPP & PE COFF (x86 COFF variants).
+ /* Return a proper value for DJGPP & PE COFF.
This function is required for DWARF2 support, but there is
no place to store this information in the COFF back end.
Should enough other COFF targets add support for DWARF2,
a place will have to be found. Until then, this hack will do. */
- if (strncmp (name, "coff-go32", sizeof ("coff-go32") - 1) == 0
+ if (CONST_STRNEQ (name, "coff-go32")
|| strcmp (name, "pe-i386") == 0
- || strcmp (name, "pei-i386") == 0)
+ || strcmp (name, "pei-i386") == 0
+ || strcmp (name, "pe-arm-wince-little") == 0
+ || strcmp (name, "pei-arm-wince-little") == 0)
return 1;
bfd_set_error (bfd_error_wrong_format);
@@ -1158,8 +1213,8 @@ FUNCTION
DESCRIPTION
The following functions exist but have not yet been documented.
-.#define bfd_sizeof_headers(abfd, reloc) \
-. BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, reloc))
+.#define bfd_sizeof_headers(abfd, info) \
+. BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
.
.#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
. BFD_SEND (abfd, _bfd_find_nearest_line, \
@@ -1298,11 +1353,10 @@ bfd_record_phdr (bfd *abfd,
amt = sizeof (struct elf_segment_map);
amt += ((bfd_size_type) count - 1) * sizeof (asection *);
- m = bfd_alloc (abfd, amt);
+ m = bfd_zalloc (abfd, amt);
if (m == NULL)
return FALSE;
- m->next = NULL;
m->p_type = type;
m->p_flags = flags;
m->p_paddr = at;
@@ -1335,6 +1389,15 @@ bfd_fprintf_vma (bfd *abfd, void *stream, bfd_vma value)
{
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
get_elf_backend_data (abfd)->elf_backend_fprintf_vma (abfd, stream, value);
+#ifdef BFD64
+ /* fprintf_vma() on a 64-bit enabled host will always print a 64-bit
+ value, but really we want to display the address in the target's
+ address size. Since we do not have a field in the bfd structure
+ to tell us this, we take a guess, based on the target's name. */
+ else if (strstr (bfd_get_target (abfd), "64") == NULL
+ && strcmp (bfd_get_target (abfd), "mmo") != 0)
+ fprintf ((FILE *) stream, "%08lx", (unsigned long) (value & 0xffffffff));
+#endif
else
fprintf_vma ((FILE *) stream, value);
}
@@ -1513,3 +1576,212 @@ bfd_preserve_finish (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_preserve *preserve)
objalloc. */
bfd_hash_table_free (&preserve->section_htab);
}
+
+/*
+FUNCTION
+ bfd_emul_get_maxpagesize
+
+SYNOPSIS
+ bfd_vma bfd_emul_get_maxpagesize (const char *);
+
+DESCRIPTION
+ Returns the maximum page size, in bytes, as determined by
+ emulation.
+
+RETURNS
+ Returns the maximum page size in bytes for ELF, abort
+ otherwise.
+*/
+
+bfd_vma
+bfd_emul_get_maxpagesize (const char *emul)
+{
+ const bfd_target *target;
+
+ target = bfd_find_target (emul, NULL);
+ if (target != NULL
+ && target->flavour == bfd_target_elf_flavour)
+ return xvec_get_elf_backend_data (target)->maxpagesize;
+
+ abort ();
+ return 0;
+}
+
+static void
+bfd_elf_set_pagesize (const bfd_target *target, bfd_vma size,
+ int offset, const bfd_target *orig_target)
+{
+ if (target->flavour == bfd_target_elf_flavour)
+ {
+ const struct elf_backend_data *bed;
+
+ bed = xvec_get_elf_backend_data (target);
+ *((bfd_vma *) ((char *) bed + offset)) = size;
+ }
+
+ if (target->alternative_target
+ && target->alternative_target != orig_target)
+ bfd_elf_set_pagesize (target->alternative_target, size, offset,
+ orig_target);
+}
+
+/*
+FUNCTION
+ bfd_emul_set_maxpagesize
+
+SYNOPSIS
+ void bfd_emul_set_maxpagesize (const char *, bfd_vma);
+
+DESCRIPTION
+ For ELF, set the maximum page size for the emulation. It is
+ a no-op for other formats.
+
+*/
+
+void
+bfd_emul_set_maxpagesize (const char *emul, bfd_vma size)
+{
+ const bfd_target *target;
+
+ target = bfd_find_target (emul, NULL);
+ if (target)
+ bfd_elf_set_pagesize (target, size,
+ offsetof (struct elf_backend_data,
+ maxpagesize), target);
+}
+
+/*
+FUNCTION
+ bfd_emul_get_commonpagesize
+
+SYNOPSIS
+ bfd_vma bfd_emul_get_commonpagesize (const char *);
+
+DESCRIPTION
+ Returns the common page size, in bytes, as determined by
+ emulation.
+
+RETURNS
+ Returns the common page size in bytes for ELF, abort otherwise.
+*/
+
+bfd_vma
+bfd_emul_get_commonpagesize (const char *emul)
+{
+ const bfd_target *target;
+
+ target = bfd_find_target (emul, NULL);
+ if (target != NULL
+ && target->flavour == bfd_target_elf_flavour)
+ return xvec_get_elf_backend_data (target)->commonpagesize;
+
+ abort ();
+ return 0;
+}
+
+/*
+FUNCTION
+ bfd_emul_set_commonpagesize
+
+SYNOPSIS
+ void bfd_emul_set_commonpagesize (const char *, bfd_vma);
+
+DESCRIPTION
+ For ELF, set the common page size for the emulation. It is
+ a no-op for other formats.
+
+*/
+
+void
+bfd_emul_set_commonpagesize (const char *emul, bfd_vma size)
+{
+ const bfd_target *target;
+
+ target = bfd_find_target (emul, NULL);
+ if (target)
+ bfd_elf_set_pagesize (target, size,
+ offsetof (struct elf_backend_data,
+ commonpagesize), target);
+}
+
+/*
+FUNCTION
+ bfd_demangle
+
+SYNOPSIS
+ char *bfd_demangle (bfd *, const char *, int);
+
+DESCRIPTION
+ Wrapper around cplus_demangle. Strips leading underscores and
+ other such chars that would otherwise confuse the demangler.
+ If passed a g++ v3 ABI mangled name, returns a buffer allocated
+ with malloc holding the demangled name. Returns NULL otherwise
+ and on memory alloc failure.
+*/
+
+char *
+bfd_demangle (bfd *abfd, const char *name, int options)
+{
+ char *res, *alloc;
+ const char *pre, *suf;
+ size_t pre_len;
+
+ if (abfd != NULL
+ && *name != '\0'
+ && bfd_get_symbol_leading_char (abfd) == *name)
+ ++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. */
+ pre = name;
+ while (*name == '.' || *name == '$')
+ ++name;
+ pre_len = name - pre;
+
+ /* Strip off @plt and suchlike too. */
+ alloc = NULL;
+ suf = strchr (name, '@');
+ if (suf != NULL)
+ {
+ alloc = bfd_malloc (suf - name + 1);
+ if (alloc == NULL)
+ return NULL;
+ memcpy (alloc, name, suf - name);
+ alloc[suf - name] = '\0';
+ name = alloc;
+ }
+
+ res = cplus_demangle (name, options);
+
+ if (alloc != NULL)
+ free (alloc);
+
+ if (res == NULL)
+ return NULL;
+
+ /* Put back any prefix or suffix. */
+ if (pre_len != 0 || suf != NULL)
+ {
+ size_t len;
+ size_t suf_len;
+ char *final;
+
+ len = strlen (res);
+ if (suf == NULL)
+ suf = res + len;
+ suf_len = strlen (suf) + 1;
+ final = bfd_malloc (pre_len + len + suf_len);
+ if (final != NULL)
+ {
+ memcpy (final, pre, pre_len);
+ memcpy (final + pre_len, res, len);
+ memcpy (final + pre_len + len, suf, suf_len);
+ }
+ free (res);
+ res = final;
+ }
+
+ return res;
+}
diff --git a/bfd/bfdio.c b/bfd/bfdio.c
index 22ea886b5cb0..0df25c3baf80 100644
--- a/bfd/bfdio.c
+++ b/bfd/bfdio.c
@@ -1,7 +1,7 @@
/* Low-level I/O routines for BFDs.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -23,12 +23,10 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
#include "sysdep.h"
-
+#include <limits.h>
#include "bfd.h"
#include "libbfd.h"
-#include <limits.h>
-
#ifndef S_IXUSR
#define S_IXUSR 0100 /* Execute by owner. */
#endif
@@ -116,6 +114,15 @@ bfd_bread (void *ptr, bfd_size_type size, bfd *abfd)
{
size_t nread;
+ /* If this is an archive element, don't read past the end of
+ this element. */
+ if (abfd->arelt_data != NULL)
+ {
+ size_t maxbytes = ((struct areltdata *) abfd->arelt_data)->parsed_size;
+ if (size > maxbytes)
+ size = maxbytes;
+ }
+
if ((abfd->flags & BFD_IN_MEMORY) != 0)
{
struct bfd_in_memory *bim;
@@ -401,7 +408,7 @@ FUNCTION
bfd_get_size
SYNOPSIS
- long bfd_get_size (bfd *abfd);
+ file_ptr bfd_get_size (bfd *abfd);
DESCRIPTION
Return the file size (as read from file system) for the file
@@ -429,7 +436,7 @@ DESCRIPTION
size reasonable?".
*/
-long
+file_ptr
bfd_get_size (bfd *abfd)
{
struct stat buf;
diff --git a/bfd/binary.c b/bfd/binary.c
index 458626f02a35..b5347dd4ba45 100644
--- a/bfd/binary.c
+++ b/bfd/binary.c
@@ -1,6 +1,6 @@
/* BFD back-end for binary objects.
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>
This file is part of BFD, the Binary File Descriptor library.
@@ -32,8 +32,8 @@
the file. objcopy cooperates by specially setting the start
address to zero by default. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "safe-ctype.h"
#include "libbfd.h"
@@ -63,6 +63,7 @@ binary_object_p (bfd *abfd)
{
struct stat statbuf;
asection *sec;
+ flagword flags;
if (abfd->target_defaulted)
{
@@ -80,10 +81,10 @@ binary_object_p (bfd *abfd)
}
/* One data section. */
- sec = bfd_make_section (abfd, ".data");
+ flags = SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS;
+ sec = bfd_make_section_with_flags (abfd, ".data", flags);
if (sec == NULL)
return NULL;
- sec->flags = SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS;
sec->vma = 0;
sec->size = statbuf.st_size;
sec->filepos = 0;
@@ -220,9 +221,6 @@ binary_get_symbol_info (bfd *ignore_abfd ATTRIBUTE_UNUSED,
#define binary_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define binary_read_minisymbols _bfd_generic_read_minisymbols
#define binary_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
-#define binary_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
-#define binary_get_reloc_upper_bound ((long (*) (bfd *, asection *)) bfd_0l)
-#define binary_canonicalize_reloc ((long (*) (bfd *, asection *, arelent **, asymbol **)) bfd_0l)
#define binary_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
/* Set the architecture of a binary file. */
@@ -305,7 +303,7 @@ binary_set_section_contents (bfd *abfd,
static int
binary_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
- bfd_boolean exec ATTRIBUTE_UNUSED)
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return 0;
}
@@ -367,7 +365,7 @@ const bfd_target binary_vec =
BFD_JUMP_TABLE_CORE (_bfd_nocore),
BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
BFD_JUMP_TABLE_SYMBOLS (binary),
- BFD_JUMP_TABLE_RELOCS (binary),
+ BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
BFD_JUMP_TABLE_WRITE (binary),
BFD_JUMP_TABLE_LINK (binary),
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
diff --git a/bfd/bout.c b/bfd/bout.c
index 5102ba776223..fe132129d67e 100644
--- a/bfd/bout.c
+++ b/bfd/bout.c
@@ -1,6 +1,6 @@
/* BFD back-end for Intel 960 b.out binaries.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "genlink.h"
@@ -635,7 +635,8 @@ callj_callback (bfd *abfd,
}
static reloc_howto_type *
-b_out_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code)
+b_out_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ bfd_reloc_code_real_type code)
{
switch (code)
{
@@ -651,6 +652,20 @@ b_out_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_typ
}
}
+static reloc_howto_type *
+b_out_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ if (strcasecmp (howto_reloc_callj.name, r_name) == 0)
+ return &howto_reloc_callj;
+ if (strcasecmp (howto_reloc_abs32.name, r_name) == 0)
+ return &howto_reloc_abs32;
+ if (strcasecmp (howto_reloc_pcrel24.name, r_name) == 0)
+ return &howto_reloc_pcrel24;
+
+ return NULL;
+}
+
/* Allocate enough room for all the reloc entries, plus pointers to them all. */
static bfd_boolean
@@ -990,7 +1005,8 @@ b_out_set_arch_mach (bfd *abfd,
}
static int
-b_out_sizeof_headers (bfd *ignore_abfd ATTRIBUTE_UNUSED, bfd_boolean ignore ATTRIBUTE_UNUSED)
+b_out_sizeof_headers (bfd *ignore_abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return sizeof (struct external_exec);
}
diff --git a/bfd/cache.c b/bfd/cache.c
index 6db6a6b4d56d..5252cc9d1320 100644
--- a/bfd/cache.c
+++ b/bfd/cache.c
@@ -1,7 +1,7 @@
/* BFD library -- caching of file descriptors.
Copyright 1990, 1991, 1992, 1993, 1994, 1996, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
Hacked by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
@@ -40,8 +40,8 @@ SUBSECTION
Caching functions
*/
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libiberty.h"
diff --git a/bfd/cf-i386lynx.c b/bfd/cf-i386lynx.c
index 45e699e0b638..d28a30260102 100644
--- a/bfd/cf-i386lynx.c
+++ b/bfd/cf-i386lynx.c
@@ -1,5 +1,5 @@
/* BFD back-end for Intel 386 COFF LynxOS files.
- Copyright 1993, 1994, 1995 Free Software Foundation, Inc.
+ Copyright 1993, 1994, 1995, 2007 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#define TARGET_SYM i386lynx_coff_vec
#define TARGET_NAME "coff-i386-lynx"
diff --git a/bfd/cisco-core.c b/bfd/cisco-core.c
index b7f735b59dee..dfa3a1f28bc5 100644
--- a/bfd/cisco-core.c
+++ b/bfd/cisco-core.c
@@ -1,5 +1,5 @@
/* BFD back-end for CISCO crash dumps.
- Copyright 1994, 1997, 1999, 2000, 2001, 2002, 2004
+ Copyright 1994, 1997, 1999, 2000, 2001, 2002, 2004, 2006, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
/* core_file_failing_signal returns a host signal (this probably should
be fixed). */
@@ -88,13 +88,14 @@ cisco_core_file_validate (abfd, crash_info_loc)
char buf[4];
unsigned int crashinfo_offset;
crashinfo_external crashinfo;
- int nread;
+ bfd_size_type nread;
unsigned int magic;
unsigned int version;
unsigned int rambase;
sec_ptr asect;
struct stat statbuf;
bfd_size_type amt;
+ flagword flags;
if (bfd_seek (abfd, (file_ptr) crash_info_loc, SEEK_SET) != 0)
return NULL;
@@ -241,10 +242,10 @@ cisco_core_file_validate (abfd, crash_info_loc)
/* Create a ".data" section that maps the entire file, which is
essentially a dump of the target system's RAM. */
- asect = bfd_make_section_anyway (abfd, ".data");
+ flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
+ asect = bfd_make_section_anyway_with_flags (abfd, ".data", flags);
if (asect == NULL)
goto error_return;
- asect->flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
/* The size of memory is the size of the core file itself. */
asect->size = statbuf.st_size;
asect->vma = rambase;
@@ -253,10 +254,10 @@ cisco_core_file_validate (abfd, crash_info_loc)
/* Create a ".crash" section to allow access to the saved
crash information. */
- asect = bfd_make_section_anyway (abfd, ".crash");
+ flags = SEC_HAS_CONTENTS;
+ asect = bfd_make_section_anyway_with_flags (abfd, ".crash", flags);
if (asect == NULL)
goto error_return;
- asect->flags = SEC_HAS_CONTENTS;
asect->vma = 0;
asect->filepos = crashinfo_offset;
asect->size = sizeof (crashinfo);
@@ -264,10 +265,9 @@ cisco_core_file_validate (abfd, crash_info_loc)
/* Create a ".reg" section to allow access to the saved
registers. */
- asect = bfd_make_section_anyway (abfd, ".reg");
+ asect = bfd_make_section_anyway_with_flags (abfd, ".reg", flags);
if (asect == NULL)
goto error_return;
- asect->flags = SEC_HAS_CONTENTS;
asect->vma = 0;
asect->filepos = bfd_get_32 (abfd, crashinfo.registers) - rambase;
/* Since we don't know the exact size of the saved register info,
diff --git a/bfd/coff-alpha.c b/bfd/coff-alpha.c
index d9b890502d3f..dcb182bff9b5 100644
--- a/bfd/coff-alpha.c
+++ b/bfd/coff-alpha.c
@@ -1,6 +1,6 @@
/* BFD back-end for ALPHA Extended-Coff files.
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
Modified from coff-mips.c by Steve Chamberlain <sac@cygnus.com> and
Ian Lance Taylor <ian@cygnus.com>.
@@ -20,8 +20,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "coff/internal.h"
@@ -1244,6 +1244,22 @@ alpha_bfd_reloc_type_lookup (abfd, code)
return &alpha_howto_table[alpha_type];
}
+
+static reloc_howto_type *
+alpha_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (alpha_howto_table) / sizeof (alpha_howto_table[0]);
+ i++)
+ if (alpha_howto_table[i].name != NULL
+ && strcasecmp (alpha_howto_table[i].name, r_name) == 0)
+ return &alpha_howto_table[i];
+
+ return NULL;
+}
/* A helper routine for alpha_relocate_section which converts an
external reloc when generating relocatable output. Returns the
@@ -2361,6 +2377,8 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data =
/* Looking up a reloc type is Alpha specific. */
#define _bfd_ecoff_bfd_reloc_type_lookup alpha_bfd_reloc_type_lookup
+#define _bfd_ecoff_bfd_reloc_name_lookup \
+ alpha_bfd_reloc_name_lookup
/* So is getting relocated section contents. */
#define _bfd_ecoff_bfd_get_relocated_section_contents \
diff --git a/bfd/coff-apollo.c b/bfd/coff-apollo.c
index 2fe1b3e55675..171a62f43002 100644
--- a/bfd/coff-apollo.c
+++ b/bfd/coff-apollo.c
@@ -1,6 +1,6 @@
/* BFD back-end for Apollo 68000 COFF binaries.
- Copyright 1990, 1991, 1992, 1993, 1994, 1999, 2000, 2001, 2002, 2003
- Free Software Foundation, Inc.
+ Copyright 1990, 1991, 1992, 1993, 1994, 1999, 2000, 2001, 2002, 2003,
+ 2007 Free Software Foundation, Inc.
By Troy Rollo (troy@cbme.unsw.edu.au)
Based on m68k standard COFF version Written by Cygnus Support.
@@ -20,8 +20,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "coff/apollo.h"
#include "coff/internal.h"
diff --git a/bfd/coff-arm.c b/bfd/coff-arm.c
index 6b83dc7af7fd..28cd4e736ea1 100644
--- a/bfd/coff-arm.c
+++ b/bfd/coff-arm.c
@@ -1,6 +1,6 @@
/* BFD back-end for ARM COFF files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "coff/arm.h"
#include "coff/internal.h"
@@ -163,6 +163,19 @@ coff_arm_reloc (bfd *abfd,
/* These most certainly belong somewhere else. Just had to get rid of
the manifest constants in the code. */
+
+#ifdef ARM_WINCE
+
+#define ARM_26D 0
+#define ARM_32 1
+#define ARM_RVA32 2
+#define ARM_26 3
+#define ARM_THUMB12 4
+#define ARM_SECTION 14
+#define ARM_SECREL 15
+
+#else
+
#define ARM_8 0
#define ARM_16 1
#define ARM_32 2
@@ -179,20 +192,6 @@ coff_arm_reloc (bfd *abfd,
#define ARM_THUMB12 13
#define ARM_THUMB23 14
-#ifdef ARM_WINCE
-#undef ARM_32
-#undef ARM_RVA32
-#undef ARM_26
-#undef ARM_THUMB12
-#undef ARM_26D
-
-#define ARM_26D 0
-#define ARM_32 1
-#define ARM_RVA32 2
-#define ARM_26 3
-#define ARM_THUMB12 4
-#define ARM_SECTION 14
-#define ARM_SECREL 15
#endif
static bfd_reloc_status_type aoutarm_fix_pcrel_26_done
@@ -220,7 +219,7 @@ static reloc_howto_type aoutarm_std_reloc_howto[] =
complain_overflow_dont,
aoutarm_fix_pcrel_26_done,
"ARM_26D",
- FALSE,
+ TRUE, /* partial_inplace. */
0x00ffffff,
0x0,
PCRELOFFSET),
@@ -233,7 +232,7 @@ static reloc_howto_type aoutarm_std_reloc_howto[] =
complain_overflow_bitfield,
coff_arm_reloc,
"ARM_32",
- FALSE,
+ TRUE, /* partial_inplace. */
0xffffffff,
0xffffffff,
PCRELOFFSET),
@@ -246,7 +245,7 @@ static reloc_howto_type aoutarm_std_reloc_howto[] =
complain_overflow_bitfield,
coff_arm_reloc,
"ARM_RVA32",
- FALSE,
+ TRUE, /* partial_inplace. */
0xffffffff,
0xffffffff,
PCRELOFFSET),
@@ -294,7 +293,7 @@ static reloc_howto_type aoutarm_std_reloc_howto[] =
complain_overflow_bitfield,
coff_arm_reloc,
"ARM_SECTION",
- FALSE,
+ TRUE, /* partial_inplace. */
0x0000ffff,
0x0000ffff,
PCRELOFFSET),
@@ -307,7 +306,7 @@ static reloc_howto_type aoutarm_std_reloc_howto[] =
complain_overflow_bitfield,
coff_arm_reloc,
"ARM_SECREL",
- FALSE,
+ TRUE, /* partial_inplace. */
0xffffffff,
0xffffffff,
PCRELOFFSET),
@@ -539,6 +538,32 @@ coff_arm_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
if (rel->r_type == ARM_RVA32)
*addendp -= pe_data (sec->output_section->owner)->pe_opthdr.ImageBase;
+#if defined COFF_WITH_PE && defined ARM_WINCE
+ if (rel->r_type == ARM_SECREL)
+ {
+ bfd_vma osect_vma;
+
+ if (h && (h->type == bfd_link_hash_defined
+ || h->type == bfd_link_hash_defweak))
+ osect_vma = h->root.u.def.section->output_section->vma;
+ else
+ {
+ asection *sec;
+ int i;
+
+ /* Sigh, the only way to get the section to offset against
+ is to find it the hard way. */
+
+ for (sec = abfd->sections, i = 1; i < sym->n_scnum; i++)
+ sec = sec->next;
+
+ osect_vma = sec->output_section->vma;
+ }
+
+ *addendp -= osect_vma;
+ }
+#endif
+
return howto;
}
@@ -808,6 +833,7 @@ coff_arm_reloc_type_lookup (bfd * abfd, bfd_reloc_code_real_type code)
ASTD (BFD_RELOC_RVA, ARM_RVA32);
ASTD (BFD_RELOC_ARM_PCREL_BRANCH, ARM_26);
ASTD (BFD_RELOC_THUMB_PCREL_BRANCH12, ARM_THUMB12);
+ ASTD (BFD_RELOC_32_SECREL, ARM_SECREL);
#else
ASTD (BFD_RELOC_8, ARM_8);
ASTD (BFD_RELOC_16, ARM_16);
@@ -827,6 +853,23 @@ coff_arm_reloc_type_lookup (bfd * abfd, bfd_reloc_code_real_type code)
}
}
+static reloc_howto_type *
+coff_arm_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (aoutarm_std_reloc_howto)
+ / sizeof (aoutarm_std_reloc_howto[0]));
+ i++)
+ if (aoutarm_std_reloc_howto[i].name != NULL
+ && strcasecmp (aoutarm_std_reloc_howto[i].name, r_name) == 0)
+ return &aoutarm_std_reloc_howto[i];
+
+ return NULL;
+}
+
#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER 2
#define COFF_PAGE_SIZE 0x1000
@@ -1209,12 +1252,14 @@ coff_arm_relocate_section (bfd *output_bfd,
generation of bl's instruction offset. */
addend -= 8;
#endif
- howto = &fake_arm26_reloc;
+ howto = & fake_arm26_reloc;
}
#ifdef ARM_WINCE
/* MS ARM-CE makes the reloc relative to the opcode's pc, not
the next opcode's pc, so is off by one. */
+ if (howto->pc_relative && !info->relocatable)
+ addend -= 8;
#endif
/* If we are doing a relocatable link, then we can just ignore
@@ -1938,12 +1983,11 @@ bfd_arm_get_bfd_for_interworking (bfd * abfd,
if (sec == NULL)
{
- flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_CODE | SEC_READONLY;
-
- sec = bfd_make_section (abfd, ARM2THUMB_GLUE_SECTION_NAME);
-
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
+ | SEC_CODE | SEC_READONLY);
+ sec = bfd_make_section_with_flags (abfd, ARM2THUMB_GLUE_SECTION_NAME,
+ flags);
if (sec == NULL
- || ! bfd_set_section_flags (abfd, sec, flags)
|| ! bfd_set_section_alignment (abfd, sec, 2))
return FALSE;
}
@@ -1952,12 +1996,12 @@ bfd_arm_get_bfd_for_interworking (bfd * abfd,
if (sec == NULL)
{
- flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_CODE | SEC_READONLY;
-
- sec = bfd_make_section (abfd, THUMB2ARM_GLUE_SECTION_NAME);
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
+ | SEC_CODE | SEC_READONLY);
+ sec = bfd_make_section_with_flags (abfd, THUMB2ARM_GLUE_SECTION_NAME,
+ flags);
if (sec == NULL
- || ! bfd_set_section_flags (abfd, sec, flags)
|| ! bfd_set_section_alignment (abfd, sec, 2))
return FALSE;
}
@@ -2085,6 +2129,7 @@ bfd_arm_process_before_allocation (bfd * abfd,
#endif /* ! defined (COFF_IMAGE_WITH_PE) */
#define coff_bfd_reloc_type_lookup coff_arm_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup coff_arm_reloc_name_lookup
#define coff_relocate_section coff_arm_relocate_section
#define coff_bfd_is_local_label_name coff_arm_is_local_label_name
#define coff_adjust_symndx coff_arm_adjust_symndx
@@ -2397,7 +2442,9 @@ Warning: Clearing the interworking flag of %B because non-interworking code in %
/* Note: the definitions here of LOCAL_LABEL_PREFIX and USER_LABEL_PREIFX
*must* match the definitions in gcc/config/arm/{coff|semi|aout}.h. */
+#ifndef LOCAL_LABEL_PREFIX
#define LOCAL_LABEL_PREFIX ""
+#endif
#ifndef USER_LABEL_PREFIX
#define USER_LABEL_PREFIX "_"
#endif
diff --git a/bfd/coff-aux.c b/bfd/coff-aux.c
index e22d85566a69..f28a9483fd5d 100644
--- a/bfd/coff-aux.c
+++ b/bfd/coff-aux.c
@@ -1,5 +1,5 @@
/* BFD back-end for Apple M68K COFF A/UX 3.x files.
- Copyright 1996, 1997, 2000, 2002 Free Software Foundation, Inc.
+ Copyright 1996, 1997, 2000, 2002, 2007 Free Software Foundation, Inc.
Written by Richard Henderson <rth@tamu.edu>.
This file is part of BFD, the Binary File Descriptor library.
@@ -37,8 +37,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define COFF_COMMON_ADDEND
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
static bfd_boolean coff_m68k_aux_link_add_one_symbol
PARAMS ((struct bfd_link_info *, bfd *, const char *, flagword,
diff --git a/bfd/coff-h8300.c b/bfd/coff-h8300.c
index 9c858e1ef1ed..99c0a5a9832e 100644
--- a/bfd/coff-h8300.c
+++ b/bfd/coff-h8300.c
@@ -1,6 +1,6 @@
/* BFD back-end for Renesas H8/300 COFF binaries.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Steve Chamberlain, <sac@cygnus.com>.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "genlink.h"
@@ -1276,12 +1276,12 @@ h8300_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
/* Make sure the appropriate flags are set, including SEC_IN_MEMORY. */
flags = (SEC_ALLOC | SEC_LOAD
| SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_READONLY);
- htab->vectors_sec = bfd_make_section (abfd, ".vectors");
+ htab->vectors_sec = bfd_make_section_with_flags (abfd, ".vectors",
+ flags);
/* If the section wasn't created, or we couldn't set the flags,
quit quickly now, rather than dying a painful death later. */
- if (!htab->vectors_sec
- || !bfd_set_section_flags (abfd, htab->vectors_sec, flags))
+ if (!htab->vectors_sec)
return FALSE;
/* Also create the vector hash table. */
diff --git a/bfd/coff-h8500.c b/bfd/coff-h8500.c
index e9c878d820a0..7297fe689335 100644
--- a/bfd/coff-h8500.c
+++ b/bfd/coff-h8500.c
@@ -1,6 +1,6 @@
/* BFD back-end for Renesas H8/500 COFF binaries.
- Copyright 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2007 Free Software Foundation, Inc.
Contributed by Cygnus Support.
Written by Steve Chamberlain, <sac@cygnus.com>.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "coff/h8500.h"
diff --git a/bfd/coff-i386.c b/bfd/coff-i386.c
index 0d71cd000657..81d380012336 100644
--- a/bfd/coff-i386.c
+++ b/bfd/coff-i386.c
@@ -1,6 +1,6 @@
/* BFD back-end for Intel 386 COFF files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004
+ 2000, 2001, 2002, 2003, 2004, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "coff/i386.h"
@@ -546,6 +546,7 @@ coff_i386_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
}
#define coff_bfd_reloc_type_lookup coff_i386_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup coff_i386_reloc_name_lookup
static reloc_howto_type *
coff_i386_reloc_type_lookup (abfd, code)
@@ -578,6 +579,20 @@ coff_i386_reloc_type_lookup (abfd, code)
}
}
+static reloc_howto_type *
+coff_i386_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof (howto_table) / sizeof (howto_table[0]); i++)
+ if (howto_table[i].name != NULL
+ && strcasecmp (howto_table[i].name, r_name) == 0)
+ return &howto_table[i];
+
+ return NULL;
+}
+
#define coff_rtype_to_howto coff_i386_rtype_to_howto
#ifdef TARGET_UNDERSCORE
diff --git a/bfd/coff-i860.c b/bfd/coff-i860.c
index 723e823f1c7b..53e0fd199ea8 100644
--- a/bfd/coff-i860.c
+++ b/bfd/coff-i860.c
@@ -1,6 +1,6 @@
/* BFD back-end for Intel i860 COFF files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
Created mostly by substituting "860" for "386" in coff-i386.c
Harry Dolan <dolan@ssd.intel.com>, October 1995
@@ -20,8 +20,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "coff/i860.h"
@@ -555,6 +555,20 @@ coff_i860_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
}
}
+static reloc_howto_type *
+coff_i860_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof (howto_table) / sizeof (howto_table[0]); i++)
+ if (howto_table[i].name != NULL
+ && strcasecmp (howto_table[i].name, r_name) == 0)
+ return &howto_table[i];
+
+ return NULL;
+}
+
/* This is called from coff_slurp_reloc_table for each relocation
entry. This special handling is due to the `PAIR' relocation
which has a different meaning for the `r_symndx' field. */
@@ -620,6 +634,7 @@ i860_reloc_processing (arelent *cache_ptr, struct internal_reloc *dst,
#define coff_rtype_to_howto coff_i860_rtype_to_howto
#define coff_bfd_reloc_type_lookup coff_i860_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup coff_i860_reloc_name_lookup
#define RELOC_PROCESSING(relent, reloc, symbols, abfd, section) \
i860_reloc_processing (relent, reloc, symbols, abfd, section)
diff --git a/bfd/coff-i960.c b/bfd/coff-i960.c
index 741e15d41ea7..e83fbac774e8 100644
--- a/bfd/coff-i960.c
+++ b/bfd/coff-i960.c
@@ -1,6 +1,6 @@
/* BFD back-end for Intel 960 COFF files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001,
- 2002, 2003, 2004 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -22,8 +22,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define I960 1
#define BADMAG(x) I960BADMAG(x)
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "coff/i960.h"
#include "coff/internal.h"
@@ -296,6 +296,20 @@ coff_i960_reloc_type_lookup (abfd, code)
}
}
+static reloc_howto_type *
+coff_i960_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ if (strcasecmp (howto_optcall.name, r_name) == 0)
+ return &howto_optcall;
+ if (strcasecmp (howto_rellong.name, r_name) == 0)
+ return &howto_rellong;
+ if (strcasecmp (howto_iprmed.name, r_name) == 0)
+ return &howto_iprmed;
+
+ return NULL;
+}
+
/* The real code is in coffcode.h */
#define RTYPE2HOWTO(cache_ptr, dst) \
@@ -613,6 +627,7 @@ coff_i960_adjust_symndx (obfd, info, ibfd, sec, irel, adjustedp)
#define coff_adjust_symndx coff_i960_adjust_symndx
#define coff_bfd_reloc_type_lookup coff_i960_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup coff_i960_reloc_name_lookup
#include "coffcode.h"
diff --git a/bfd/coff-ia64.c b/bfd/coff-ia64.c
index 1e3b3440f2ef..32702a8f6ff1 100644
--- a/bfd/coff-ia64.c
+++ b/bfd/coff-ia64.c
@@ -1,5 +1,5 @@
/* BFD back-end for HP/Intel IA-64 COFF files.
- Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
Contributed by David Mosberger <davidm@hpl.hp.com>
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "coff/ia64.h"
#include "coff/internal.h"
diff --git a/bfd/coff-m68k.c b/bfd/coff-m68k.c
index d389a4ff1e00..b06334983571 100644
--- a/bfd/coff-m68k.c
+++ b/bfd/coff-m68k.c
@@ -1,6 +1,6 @@
/* BFD back-end for Motorola 68000 COFF binaries.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999,
- 2000, 2001, 2002, 2003, 2005
+ 2000, 2001, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -20,8 +20,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "coff/m68k.h"
#include "coff/internal.h"
@@ -91,6 +91,7 @@ m68k_coff_is_local_label_name (abfd, name)
#define m68k_rtype2howto _bfd_m68kcoff_rtype2howto
#define m68k_howto2rtype _bfd_m68kcoff_howto2rtype
#define m68k_reloc_type_lookup _bfd_m68kcoff_reloc_type_lookup
+#define m68k_reloc_name_lookup _bfd_m68kcoff_reloc_name_lookup
#endif
#ifdef ONLY_DECLARE_RELOCS
@@ -123,6 +124,8 @@ extern void m68k_rtype2howto PARAMS ((arelent *internal, int relocentry));
extern int m68k_howto2rtype PARAMS ((reloc_howto_type *));
extern reloc_howto_type *m68k_reloc_type_lookup
PARAMS ((bfd *, bfd_reloc_code_real_type));
+extern reloc_howto_type *m68k_reloc_name_lookup
+ PARAMS ((bfd *, const char *));
#else
#ifdef STATIC_RELOCS
@@ -132,6 +135,7 @@ extern reloc_howto_type *m68k_reloc_type_lookup
#endif
STAT_REL reloc_howto_type * m68k_reloc_type_lookup PARAMS ((bfd *, bfd_reloc_code_real_type));
+STAT_REL reloc_howto_type * m68k_reloc_name_lookup PARAMS ((bfd *, const char *));
STAT_REL int m68k_howto2rtype PARAMS ((reloc_howto_type *));
STAT_REL void m68k_rtype2howto PARAMS ((arelent *, int));
@@ -198,6 +202,22 @@ m68k_reloc_type_lookup (abfd, code)
/*NOTREACHED*/
}
+STAT_REL reloc_howto_type *
+m68k_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (m68kcoff_howto_table) / sizeof (m68kcoff_howto_table[0]);
+ i++)
+ if (m68kcoff_howto_table[i].name != NULL
+ && strcasecmp (m68kcoff_howto_table[i].name, r_name) == 0)
+ return &m68kcoff_howto_table[i];
+
+ return NULL;
+}
+
#endif /* not ONLY_DECLARE_RELOCS */
#define RTYPE2HOWTO(internal, relocentry) \
@@ -207,6 +227,7 @@ m68k_reloc_type_lookup (abfd, code)
external.r_type = m68k_howto2rtype (internal)
#define coff_bfd_reloc_type_lookup m68k_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup m68k_reloc_name_lookup
#ifndef COFF_COMMON_ADDEND
#ifndef coff_rtype_to_howto
@@ -230,11 +251,12 @@ m68kcoff_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
arelent relent;
reloc_howto_type *howto;
+ relent.howto = NULL;
RTYPE2HOWTO (&relent, rel);
howto = relent.howto;
- if (howto->pc_relative)
+ if (howto != NULL && howto->pc_relative)
*addendp += sec->vma;
return howto;
@@ -390,6 +412,7 @@ m68kcoff_common_addend_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
arelent relent;
reloc_howto_type *howto;
+ relent.howto = NULL;
RTYPE2HOWTO (&relent, rel);
howto = relent.howto;
diff --git a/bfd/coff-m88k.c b/bfd/coff-m88k.c
index 422798b1af40..101cdcb738e1 100644
--- a/bfd/coff-m88k.c
+++ b/bfd/coff-m88k.c
@@ -1,7 +1,6 @@
/* BFD back-end for Motorola 88000 COFF "Binary Compatibility Standard" files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003
- Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2007 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -21,8 +20,8 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
#define M88 1 /* Customize various include files */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "coff/m88k.h"
#include "coff/internal.h"
diff --git a/bfd/coff-maxq.c b/bfd/coff-maxq.c
index 6414cb9c206e..b3881d323a10 100644
--- a/bfd/coff-maxq.c
+++ b/bfd/coff-maxq.c
@@ -1,5 +1,5 @@
/* BFD back-end for MAXQ COFF binaries.
- Copyright 2004 Free Software Foundation, Inc.
+ Copyright 2004, 2007 Free Software Foundation, Inc.
Contributed by Vineet Sharma (vineets@noida.hcltech.com) Inderpreet S.
(inderpreetb@noida.hcltech.com)
@@ -22,8 +22,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "coff/maxq.h"
#include "coff/internal.h"
@@ -82,7 +82,6 @@ coff_maxq20_reloc (bfd * abfd,
bfd * output_bfd ATTRIBUTE_UNUSED,
char ** error_message ATTRIBUTE_UNUSED)
{
- reloc_howto_type *howto = NULL;
unsigned char *addr = NULL;
unsigned long x = 0;
long call_addr = 0;
@@ -96,7 +95,6 @@ coff_maxq20_reloc (bfd * abfd,
if (data && reloc_entry)
{
- howto = reloc_entry->howto;
addr = (unsigned char *) data + reloc_entry->address;
call_addr = call_addr - call_addr;
call_addr = get_symbol_value (symbol_in);
@@ -374,69 +372,56 @@ static reloc_howto_type howto_table[] =
EMPTY_HOWTO (10),
};
-/* Map BFD reloc types to MAXQ COFF reloc types. */
-
-typedef struct maxq_reloc_map
-{
- bfd_reloc_code_real_type bfd_reloc_val;
- unsigned int maxq_reloc_val;
- reloc_howto_type * table;
-}
-reloc_map;
-
-static const reloc_map maxq_reloc_map[] =
-{
- {BFD_RELOC_16_PCREL_S2, SHORT_JUMP, howto_table},
- {BFD_RELOC_16, LONG_JUMP, howto_table},
-};
-
static reloc_howto_type *
maxq_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
bfd_reloc_code_real_type code)
{
- unsigned int i;
-
- for (i = 0; i < ARRAY_SIZE (maxq_reloc_map); i++)
+ switch (code)
{
- const reloc_map *entry;
-
- entry = maxq_reloc_map + i;
-
- switch (code)
- {
- /* SHORT JUMP */
- case BFD_RELOC_16_PCREL_S2:
- return howto_table + 3;
-
- /* INTERSEGMENT JUMP */
- case BFD_RELOC_24:
- return howto_table + 4;
-
- /* BYTE RELOC */
- case BFD_RELOC_8:
- return howto_table + 7;
-
- /* WORD RELOC */
- case BFD_RELOC_16:
- return howto_table + 5;
-
- /* LONG RELOC */
- case BFD_RELOC_32:
- return howto_table + 2;
+ /* SHORT JUMP */
+ case BFD_RELOC_16_PCREL_S2:
+ return howto_table + 3;
+
+ /* INTERSEGMENT JUMP */
+ case BFD_RELOC_24:
+ return howto_table + 4;
+
+ /* BYTE RELOC */
+ case BFD_RELOC_8:
+ return howto_table + 7;
+
+ /* WORD RELOC */
+ case BFD_RELOC_16:
+ return howto_table + 5;
+
+ /* LONG RELOC */
+ case BFD_RELOC_32:
+ return howto_table + 2;
+
+ /* LONG JUMP */
+ case BFD_RELOC_14:
+ return howto_table + 6;
+
+ default:
+ return NULL;
+ }
+}
- /* LONG JUMP */
- case BFD_RELOC_14:
- return howto_table + 6;
+static reloc_howto_type *
+maxq_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+{
+ unsigned int i;
- default:
- return NULL;
- }
- }
+ for (i = 0; i < sizeof (howto_table) / sizeof (howto_table[0]); i++)
+ if (howto_table[i].name != NULL
+ && strcasecmp (howto_table[i].name, r_name) == 0)
+ return &howto_table[i];
return NULL;
}
#define coff_bfd_reloc_type_lookup maxq_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup maxq_reloc_name_lookup
/* Perform any necessary magic to the addend in a reloc entry. */
#define CALC_ADDEND(abfd, symbol, ext_reloc, cache_ptr) \
diff --git a/bfd/coff-mcore.c b/bfd/coff-mcore.c
index 08935fd62971..291474cbec9f 100644
--- a/bfd/coff-mcore.c
+++ b/bfd/coff-mcore.c
@@ -1,5 +1,5 @@
/* BFD back-end for Motorola MCore COFF/PE
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@ along with this program; 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 "bfd.h"
#include "libbfd.h"
#include "coff/mcore.h"
#include "coff/internal.h"
@@ -283,9 +283,25 @@ mcore_coff_reloc_type_lookup (abfd, code)
}
/*NOTREACHED*/
}
-
#undef HOW2MAP
+static reloc_howto_type *
+mcore_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (mcore_coff_howto_table)
+ / sizeof (mcore_coff_howto_table[0]));
+ i++)
+ if (mcore_coff_howto_table[i].name != NULL
+ && strcasecmp (mcore_coff_howto_table[i].name, r_name) == 0)
+ return &mcore_coff_howto_table[i];
+
+ return NULL;
+}
+
#define RTYPE2HOWTO(cache_ptr, dst) \
(cache_ptr)->howto = mcore_coff_howto_table + (dst)->r_type;
@@ -538,6 +554,7 @@ coff_mcore_relocate_section (output_bfd, info, input_bfd, input_section,
/* We use the special COFF backend linker, with our own special touch. */
#define coff_bfd_reloc_type_lookup mcore_coff_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup mcore_coff_reloc_name_lookup
#define coff_relocate_section coff_mcore_relocate_section
#define coff_rtype_to_howto coff_mcore_rtype_to_howto
diff --git a/bfd/coff-mips.c b/bfd/coff-mips.c
index 34b072c4138e..d5dafc7bf35f 100644
--- a/bfd/coff-mips.c
+++ b/bfd/coff-mips.c
@@ -1,6 +1,6 @@
/* BFD back-end for MIPS Extended-Coff files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004
+ 2000, 2001, 2002, 2003, 2004, 2007
Free Software Foundation, Inc.
Original version by Per Bothner.
Full support added by Ian Lance Taylor, ian@cygnus.com.
@@ -21,8 +21,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "coff/internal.h"
@@ -769,6 +769,22 @@ mips_bfd_reloc_type_lookup (abfd, code)
return &mips_howto_table[mips_type];
}
+
+static reloc_howto_type *
+mips_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (mips_howto_table) / sizeof (mips_howto_table[0]);
+ i++)
+ if (mips_howto_table[i].name != NULL
+ && strcasecmp (mips_howto_table[i].name, r_name) == 0)
+ return &mips_howto_table[i];
+
+ return NULL;
+}
/* A helper routine for mips_relocate_section which handles the REFHI
relocations. The REFHI relocation must be followed by a REFLO
@@ -1375,6 +1391,7 @@ static const struct ecoff_backend_data mips_ecoff_backend_data =
/* Looking up a reloc type is MIPS specific. */
#define _bfd_ecoff_bfd_reloc_type_lookup mips_bfd_reloc_type_lookup
+#define _bfd_ecoff_bfd_reloc_name_lookup mips_bfd_reloc_name_lookup
/* Getting relocated section contents is generic. */
#define _bfd_ecoff_bfd_get_relocated_section_contents \
diff --git a/bfd/coff-or32.c b/bfd/coff-or32.c
index c8f0fe03601a..077e8f6bab28 100644
--- a/bfd/coff-or32.c
+++ b/bfd/coff-or32.c
@@ -1,5 +1,5 @@
/* BFD back-end for OpenRISC 1000 COFF binaries.
- Copyright 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
Contributed by Ivan Guzvinec <ivang@opencores.org>
This file is part of BFD, the Binary File Descriptor library.
@@ -20,8 +20,8 @@
#define OR32 1
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "coff/or32.h"
#include "coff/internal.h"
@@ -317,11 +317,7 @@ reloc_processing (relent,reloc, symbols, abfd, section)
}
else
{
- asymbol *ptr;
relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx];
-
- ptr = *(relent->sym_ptr_ptr);
-
relent->addend = 0;
relent->address-= section->vma;
diff --git a/bfd/coff-pmac.c b/bfd/coff-pmac.c
index 5e5086738456..49ceb5241b07 100644
--- a/bfd/coff-pmac.c
+++ b/bfd/coff-pmac.c
@@ -1,5 +1,5 @@
/* BFD back-end for Apple et al PowerPC Mac "XCOFF" files.
- Copyright 1995, 2000, 2001 Free Software Foundation, Inc.
+ Copyright 1995, 2000, 2001, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -24,8 +24,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define TARGET_SYM pmac_xcoff_vec
#define TARGET_NAME "xcoff-powermac"
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "coff/internal.h"
#include "coff/rs6000.h"
diff --git a/bfd/coff-ppc.c b/bfd/coff-ppc.c
index b4427936933a..72ade4e8ad25 100644
--- a/bfd/coff-ppc.c
+++ b/bfd/coff-ppc.c
@@ -1,6 +1,6 @@
/* BFD back-end for PowerPC Microsoft Portable Executable files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Original version pieced together by Kim Knuttila (krk@cygnus.com)
@@ -33,9 +33,8 @@
- dlltool will not produce correct output in some .reloc cases, and will
not produce the right glue code for dll function calls. */
-#include "bfd.h"
#include "sysdep.h"
-
+#include "bfd.h"
#include "libbfd.h"
#include "coff/powerpc.h"
@@ -1332,7 +1331,7 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section,
DUMP_RELOC2 (howto->name, rel);
- if (strncmp(".idata$2",input_section->name,8) == 0 && first_thunk_address == 0)
+ if (CONST_STRNEQ (input_section->name, ".idata$2") && first_thunk_address == 0)
{
/* Set magic values. */
int idata5offset;
@@ -1961,8 +1960,23 @@ ppc_coff_reloc_type_lookup (abfd, code)
return NULL;
}
}
-
#undef HOW2MAP
+
+static reloc_howto_type *
+ppc_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (ppc_coff_howto_table) / sizeof (ppc_coff_howto_table[0]);
+ i++)
+ if (ppc_coff_howto_table[i].name != NULL
+ && strcasecmp (ppc_coff_howto_table[i].name, r_name) == 0)
+ return &ppc_coff_howto_table[i];
+
+ return NULL;
+}
/* Tailor coffcode.h -- macro heaven. */
@@ -1971,6 +1985,7 @@ ppc_coff_reloc_type_lookup (abfd, code)
/* We use the special COFF backend linker, with our own special touch. */
#define coff_bfd_reloc_type_lookup ppc_coff_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup ppc_coff_reloc_name_lookup
#define coff_rtype_to_howto coff_ppc_rtype_to_howto
#define coff_relocate_section coff_ppc_relocate_section
#define coff_bfd_final_link ppc_bfd_coff_final_link
diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c
index 951587f99b1e..f446f497306a 100644
--- a/bfd/coff-rs6000.c
+++ b/bfd/coff-rs6000.c
@@ -1,12 +1,7 @@
/* BFD back-end for IBM RS/6000 "XCOFF" files.
- Copyright 1990-1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 1990-1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
- FIXME: Can someone provide a transliteration of this name into ASCII?
- Using the following chars caused a compiler warning on HIUX (so I replaced
- them with octal escapes), and isn't useful without an understanding of what
- character set it is.
- Written by Metin G. Ozisik, Mimi Ph\373\364ng-Th\345o V\365,
- and John Gilmore.
+ Written by Metin G. Ozisik, Mimi Phuong-Thao Vo, and John Gilmore.
Archive support from Damon A. Permezel.
Contributed by IBM Corporation and Cygnus Support.
@@ -26,8 +21,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "coff/internal.h"
@@ -59,7 +54,7 @@ extern bfd_boolean _bfd_xcoff_write_armap
extern bfd_boolean _bfd_xcoff_write_archive_contents
PARAMS ((bfd *));
extern int _bfd_xcoff_sizeof_headers
- PARAMS ((bfd *, bfd_boolean));
+ PARAMS ((bfd *, struct bfd_link_info *));
extern void _bfd_xcoff_swap_sym_in
PARAMS ((bfd *, PTR, PTR));
extern unsigned int _bfd_xcoff_swap_sym_out
@@ -98,6 +93,7 @@ void xcoff_rtype2howto
#define coff_bfd_copy_private_bfd_data _bfd_xcoff_copy_private_bfd_data
#define coff_bfd_is_local_label_name _bfd_xcoff_is_local_label_name
#define coff_bfd_reloc_type_lookup _bfd_xcoff_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup _bfd_xcoff_reloc_name_lookup
#ifdef AIX_CORE
extern const bfd_target * rs6000coff_core_p
PARAMS ((bfd *abfd));
@@ -1051,6 +1047,21 @@ _bfd_xcoff_reloc_type_lookup (abfd, code)
}
}
+static reloc_howto_type *
+_bfd_xcoff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (xcoff_howto_table) / sizeof (xcoff_howto_table[0]);
+ i++)
+ if (xcoff_howto_table[i].name != NULL
+ && strcasecmp (xcoff_howto_table[i].name, r_name) == 0)
+ return &xcoff_howto_table[i];
+
+ return NULL;
+}
/* XCOFF archive support. The original version of this code was by
Damon A. Permezel. It was enhanced to permit cross support, and
@@ -1638,7 +1649,7 @@ xcoff_write_armap_old (abfd, elength, map, orl_count, stridx)
+ SXCOFFARFMAG
+ arelt_size (sub));
fileoff = (fileoff + 1) &~ 1;
- sub = sub->next;
+ sub = sub->archive_next;
}
for (i = 0; i < orl_count; i++)
@@ -1809,7 +1820,7 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx)
}
i++;
}
- current_bfd = current_bfd->next;
+ current_bfd = current_bfd->archive_next;
if (current_bfd != NULL)
arch_info = bfd_get_arch_info (current_bfd);
}
@@ -1913,7 +1924,7 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx)
+ SXCOFFARFMAG
+ arelt_size (current_bfd));
fileoff += fileoff & 1;
- current_bfd = current_bfd->next;
+ current_bfd = current_bfd->archive_next;
if (current_bfd != NULL)
arch_info = bfd_get_arch_info (current_bfd);
}
@@ -1934,7 +1945,7 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx)
}
i++;
}
- current_bfd = current_bfd->next;
+ current_bfd = current_bfd->archive_next;
if (current_bfd != NULL)
arch_info = bfd_get_arch_info (current_bfd);
}
@@ -2009,7 +2020,7 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx)
+ SXCOFFARFMAG
+ arelt_size (current_bfd));
fileoff += fileoff & 1;
- current_bfd = current_bfd->next;
+ current_bfd = current_bfd->archive_next;
if (current_bfd != NULL)
arch_info = bfd_get_arch_info (current_bfd);
}
@@ -2030,7 +2041,7 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx)
}
i++;
}
- current_bfd = current_bfd->next;
+ current_bfd = current_bfd->archive_next;
if (current_bfd != NULL)
arch_info = bfd_get_arch_info (current_bfd);
}
@@ -2089,7 +2100,7 @@ xcoff_write_archive_contents_old (abfd)
count = 0;
total_namlen = 0;
- for (sub = abfd->archive_head; sub != NULL; sub = sub->next)
+ for (sub = abfd->archive_head; sub != NULL; sub = sub->archive_next)
{
++count;
total_namlen += strlen (normalize_filename (sub)) + 1;
@@ -2105,7 +2116,9 @@ xcoff_write_archive_contents_old (abfd)
hasobjects = FALSE;
prevoff = 0;
nextoff = SIZEOF_AR_FILE_HDR;
- for (sub = abfd->archive_head, i = 0; sub != NULL; sub = sub->next, i++)
+ for (sub = abfd->archive_head, i = 0;
+ sub != NULL;
+ sub = sub->archive_next, i++)
{
const char *name;
bfd_size_type namlen;
@@ -2253,7 +2266,7 @@ xcoff_write_archive_contents_old (abfd)
abfd) != XCOFFARMAG_ELEMENT_SIZE)
return FALSE;
}
- for (sub = abfd->archive_head; sub != NULL; sub = sub->next)
+ for (sub = abfd->archive_head; sub != NULL; sub = sub->archive_next)
{
const char *name;
bfd_size_type namlen;
@@ -2323,7 +2336,7 @@ xcoff_write_archive_contents_big (abfd)
hasobjects = FALSE;
for (current_bfd = abfd->archive_head, count = 0, total_namlen = 0;
current_bfd != NULL;
- current_bfd = current_bfd->next, count++)
+ current_bfd = current_bfd->archive_next, count++)
{
total_namlen += strlen (normalize_filename (current_bfd)) + 1;
@@ -2345,7 +2358,7 @@ xcoff_write_archive_contents_big (abfd)
nextoff = SIZEOF_AR_FILE_HDR_BIG;
for (current_bfd = abfd->archive_head, i = 0;
current_bfd != NULL;
- current_bfd = current_bfd->next, i++)
+ current_bfd = current_bfd->archive_next, i++)
{
const char *name;
bfd_size_type namlen;
@@ -2512,8 +2525,9 @@ xcoff_write_archive_contents_big (abfd)
offsets = NULL;
}
- for (current_bfd = abfd->archive_head; current_bfd != NULL;
- current_bfd = current_bfd->next)
+ for (current_bfd = abfd->archive_head;
+ current_bfd != NULL;
+ current_bfd = current_bfd->archive_next)
{
const char *name;
size_t namlen;
@@ -2573,9 +2587,8 @@ _bfd_xcoff_write_archive_contents (abfd)
always uses an a.out header. */
int
-_bfd_xcoff_sizeof_headers (abfd, reloc)
- bfd *abfd;
- bfd_boolean reloc ATTRIBUTE_UNUSED;
+_bfd_xcoff_sizeof_headers (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
int size;
@@ -4179,6 +4192,7 @@ const bfd_target rs6000coff_vec =
coff_get_reloc_upper_bound,
coff_canonicalize_reloc,
_bfd_xcoff_reloc_type_lookup,
+ _bfd_xcoff_reloc_name_lookup,
/* Write */
coff_set_arch_mach,
@@ -4429,6 +4443,7 @@ const bfd_target pmac_xcoff_vec =
coff_get_reloc_upper_bound,
coff_canonicalize_reloc,
_bfd_xcoff_reloc_type_lookup,
+ _bfd_xcoff_reloc_name_lookup,
/* Write */
coff_set_arch_mach,
diff --git a/bfd/coff-sh.c b/bfd/coff-sh.c
index fcfee718982d..3734fb37912e 100644
--- a/bfd/coff-sh.c
+++ b/bfd/coff-sh.c
@@ -1,6 +1,6 @@
/* BFD back-end for Renesas Super-H COFF binaries.
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
Contributed by Cygnus Support.
Written by Steve Chamberlain, <sac@cygnus.com>.
Relaxing code written by Ian Lance Taylor, <ian@cygnus.com>.
@@ -21,8 +21,8 @@
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 "bfd.h"
#include "libiberty.h"
#include "libbfd.h"
#include "bfdlink.h"
@@ -494,6 +494,7 @@ static const struct shcoff_reloc_map sh_reloc_map[] =
/* Given a BFD reloc code, return the howto structure for the
corresponding SH PE reloc. */
#define coff_bfd_reloc_type_lookup sh_coff_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup sh_coff_reloc_name_lookup
static reloc_howto_type *
sh_coff_reloc_type_lookup (abfd, code)
@@ -510,6 +511,20 @@ sh_coff_reloc_type_lookup (abfd, code)
return NULL;
}
+static reloc_howto_type *
+sh_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof (sh_coff_howtos) / sizeof (sh_coff_howtos[0]); i++)
+ if (sh_coff_howtos[i].name != NULL
+ && strcasecmp (sh_coff_howtos[i].name, r_name) == 0)
+ return &sh_coff_howtos[i];
+
+ return NULL;
+}
+
/* This macro is used in coffcode.h to get the howto corresponding to
an internal reloc. */
@@ -2510,8 +2525,9 @@ _bfd_sh_align_load_span (abfd, sec, contents, swap, relocs,
next2_insn = bfd_get_16 (abfd, contents + i + 4);
next2_op = sh_insn_info (next2_insn);
- if ((next2_op->flags & (LOAD | STORE)) == 0
- && sh_load_use (insn, op, next2_insn, next2_op))
+ if (next2_op == NULL
+ || ((next2_op->flags & (LOAD | STORE)) == 0
+ && sh_load_use (insn, op, next2_insn, next2_op)))
ok = FALSE;
}
diff --git a/bfd/coff-sparc.c b/bfd/coff-sparc.c
index 0236f525e66f..236c7bfd4e38 100644
--- a/bfd/coff-sparc.c
+++ b/bfd/coff-sparc.c
@@ -1,6 +1,6 @@
/* BFD back-end for Sparc COFF files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2001,
- 2002, 2003, 2005 Free Software Foundation, Inc.
+ 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "coff/sparc.h"
#include "coff/internal.h"
@@ -158,6 +158,24 @@ coff_sparc_reloc_type_lookup (abfd, code)
}
#define coff_bfd_reloc_type_lookup coff_sparc_reloc_type_lookup
+static reloc_howto_type *
+coff_sparc_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (coff_sparc_howto_table)
+ / sizeof (coff_sparc_howto_table[0]));
+ i++)
+ if (coff_sparc_howto_table[i].name != NULL
+ && strcasecmp (coff_sparc_howto_table[i].name, r_name) == 0)
+ return &coff_sparc_howto_table[i];
+
+ return NULL;
+}
+#define coff_bfd_reloc_name_lookup coff_sparc_reloc_name_lookup
+
static void
rtype2howto (cache_ptr, dst)
arelent *cache_ptr;
diff --git a/bfd/coff-stgo32.c b/bfd/coff-stgo32.c
index 3c5fdbb6e804..61f18f0c1f35 100644
--- a/bfd/coff-stgo32.c
+++ b/bfd/coff-stgo32.c
@@ -1,5 +1,5 @@
/* BFD back-end for Intel 386 COFF files (DJGPP variant with a stub).
- Copyright 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2006 Free Software Foundation, Inc.
Written by Robert Hoehne.
This file is part of BFD, the Binary File Descriptor library.
@@ -354,7 +354,7 @@ create_go32_stub (abfd)
close (f);
goto stub_end;
}
- if (memcmp (magic, "go32stub", 8) != 0)
+ if (! CONST_STRNEQ (magic, "go32stub"))
{
close (f);
goto stub_end;
diff --git a/bfd/coff-tic30.c b/bfd/coff-tic30.c
index b1ff5dbdfbff..dd97b2f8abbb 100644
--- a/bfd/coff-tic30.c
+++ b/bfd/coff-tic30.c
@@ -1,5 +1,6 @@
/* BFD back-end for TMS320C30 coff binaries.
- Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1998, 1999, 2000, 2001, 2002, 2007
+ Free Software Foundation, Inc.
Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au)
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +20,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "coff/tic30.h"
@@ -52,6 +53,7 @@ reloc_howto_type tic30_coff_howto_table[] =
#ifndef coff_bfd_reloc_type_lookup
#define coff_bfd_reloc_type_lookup tic30_coff_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup tic30_coff_reloc_name_lookup
/* For the case statement use the code values used in tc_gen_reloc to
map to the howto table entries that match those in both the aout
@@ -80,6 +82,23 @@ tic30_coff_reloc_type_lookup (abfd, code)
}
}
+static reloc_howto_type *
+tic30_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (tic30_coff_howto_table)
+ / sizeof (tic30_coff_howto_table[0]));
+ i++)
+ if (tic30_coff_howto_table[i].name != NULL
+ && strcasecmp (tic30_coff_howto_table[i].name, r_name) == 0)
+ return &tic30_coff_howto_table[i];
+
+ return NULL;
+}
+
#endif
/* Turn a howto into a reloc number. */
diff --git a/bfd/coff-tic4x.c b/bfd/coff-tic4x.c
index 1e95411e9e62..110fe1c1295e 100644
--- a/bfd/coff-tic4x.c
+++ b/bfd/coff-tic4x.c
@@ -1,5 +1,5 @@
/* BFD back-end for TMS320C4X coff binaries.
- Copyright 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2005
+ Copyright 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
@@ -21,8 +21,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "coff/tic4x.h"
@@ -117,6 +117,8 @@ reloc_howto_type tic4x_howto_table[] =
#undef coff_bfd_reloc_type_lookup
#define coff_bfd_reloc_type_lookup tic4x_coff_reloc_type_lookup
+#undef coff_bfd_reloc_name_lookup
+#define coff_bfd_reloc_name_lookup tic4x_coff_reloc_name_lookup
/* For the case statement use the code values used tc_gen_reloc (defined in
bfd/reloc.c) to map to the howto table entries. */
@@ -150,6 +152,21 @@ tic4x_coff_reloc_type_lookup (abfd, code)
return NULL;
}
+static reloc_howto_type *
+tic4x_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (tic4x_howto_table) / sizeof (tic4x_howto_table[0]);
+ i++)
+ if (tic4x_howto_table[i].name != NULL
+ && strcasecmp (tic4x_howto_table[i].name, r_name) == 0)
+ return &tic4x_howto_table[i];
+
+ return NULL;
+}
/* Code to turn a r_type into a howto ptr, uses the above howto table.
Called after some initial checking by the tic4x_rtype_to_howto fn
diff --git a/bfd/coff-tic54x.c b/bfd/coff-tic54x.c
index f16fe899671d..6b3e686b57bf 100644
--- a/bfd/coff-tic54x.c
+++ b/bfd/coff-tic54x.c
@@ -1,5 +1,5 @@
/* BFD back-end for TMS320C54X coff binaries.
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Contributed by Timothy Wall (twall@cygnus.com)
@@ -20,8 +20,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "coff/tic54x.h"
@@ -229,6 +229,7 @@ reloc_howto_type tic54x_howto_table[] =
};
#define coff_bfd_reloc_type_lookup tic54x_coff_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup tic54x_coff_reloc_name_lookup
/* For the case statement use the code values used tc_gen_reloc (defined in
bfd/reloc.c) to map to the howto table entries. */
@@ -259,6 +260,22 @@ tic54x_coff_reloc_type_lookup (abfd, code)
}
}
+static reloc_howto_type *
+tic54x_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (tic54x_howto_table) / sizeof (tic54x_howto_table[0]);
+ i++)
+ if (tic54x_howto_table[i].name != NULL
+ && strcasecmp (tic54x_howto_table[i].name, r_name) == 0)
+ return &tic54x_howto_table[i];
+
+ return NULL;
+}
+
/* Code to turn a r_type into a howto ptr, uses the above howto table.
Called after some initial checking by the tic54x_rtype_to_howto fn below. */
diff --git a/bfd/coff-tic80.c b/bfd/coff-tic80.c
index ec9cbeef59aa..3fcedd7e6056 100644
--- a/bfd/coff-tic80.c
+++ b/bfd/coff-tic80.c
@@ -1,5 +1,5 @@
/* BFD back-end for Texas Instruments TMS320C80 Multimedia Video Processor (MVP).
- Copyright 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Written by Fred Fish (fnf@cygnus.com)
@@ -24,9 +24,9 @@ along with this program; if not, write to the Free Software
Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
+#include "sysdep.h"
#include "bfd.h"
#include "bfdlink.h"
-#include "sysdep.h"
#include "libbfd.h"
#ifdef _CONST
/* Newlib-based hosts define _CONST as a STDC-safe alias for const,
diff --git a/bfd/coff-w65.c b/bfd/coff-w65.c
index 7a1cfb73928b..ce8f1dc2bca8 100644
--- a/bfd/coff-w65.c
+++ b/bfd/coff-w65.c
@@ -1,6 +1,6 @@
/* BFD back-end for WDC 65816 COFF binaries.
- Copyright 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain, <sac@cygnus.com>.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "coff/w65.h"
@@ -105,7 +105,7 @@ reloc_processing (relent, reloc, symbols, abfd, section)
if (((int) reloc->r_symndx) > 0)
relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx];
else
- relent->sym_ptr_ptr = (asymbol **)&(bfd_abs_symbol);
+ relent->sym_ptr_ptr = (asymbol **) bfd_abs_section_ptr->symbol_ptr_ptr;
relent->addend = reloc->r_offset;
diff --git a/bfd/coff-we32k.c b/bfd/coff-we32k.c
index a488e2dc644d..e7b0b5c03307 100644
--- a/bfd/coff-we32k.c
+++ b/bfd/coff-we32k.c
@@ -1,5 +1,5 @@
/* BFD back-end for we32k COFF files.
- Copyright 1992, 1993, 1994, 1999, 2000, 2002, 2003
+ Copyright 1992, 1993, 1994, 1999, 2000, 2002, 2003, 2007
Free Software Foundation, Inc.
Contributed by Brendan Kehoe (brendan@cs.widener.edu).
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "coff/we32k.h"
#include "coff/internal.h"
diff --git a/bfd/coff-x86_64.c b/bfd/coff-x86_64.c
new file mode 100644
index 000000000000..a30349f16080
--- /dev/null
+++ b/bfd/coff-x86_64.c
@@ -0,0 +1,783 @@
+/* BFD back-end for AMD 64 COFF files.
+ Copyright 2006, 2007 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Written by Kai Tietz, OneVision Software GmbH&CoKg. */
+
+#ifndef COFF_WITH_pex64
+#define COFF_WITH_pex64
+#endif
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "coff/x86_64.h"
+#include "coff/internal.h"
+#include "coff/pe.h"
+#include "libcoff.h"
+#include "libiberty.h"
+
+#define BADMAG(x) AMD64BADMAG(x)
+
+#ifdef COFF_WITH_pex64
+# undef AOUTSZ
+# define AOUTSZ PEPAOUTSZ
+# define PEAOUTHDR PEPAOUTHDR
+#endif
+
+#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2)
+
+/* The page size is a guess based on ELF. */
+
+#define COFF_PAGE_SIZE 0x1000
+
+/* For some reason when using AMD COFF the value stored in the .text
+ section for a reference to a common symbol is the value itself plus
+ any desired offset. Ian Taylor, Cygnus Support. */
+
+/* If we are producing relocatable output, we need to do some
+ adjustments to the object file that are not done by the
+ bfd_perform_relocation function. This function is called by every
+ reloc type to make any required adjustments. */
+
+static bfd_reloc_status_type
+coff_amd64_reloc (bfd *abfd,
+ arelent *reloc_entry,
+ asymbol *symbol,
+ void * data,
+ asection *input_section ATTRIBUTE_UNUSED,
+ bfd *output_bfd,
+ char **error_message ATTRIBUTE_UNUSED)
+{
+ symvalue diff;
+
+#if !defined(COFF_WITH_PE)
+ if (output_bfd == NULL)
+ return bfd_reloc_continue;
+#endif
+
+ if (bfd_is_com_section (symbol->section))
+ {
+#if !defined(COFF_WITH_PE)
+ /* We are relocating a common symbol. The current value in the
+ object file is ORIG + OFFSET, where ORIG is the value of the
+ common symbol as seen by the object file when it was compiled
+ (this may be zero if the symbol was undefined) and OFFSET is
+ the offset into the common symbol (normally zero, but may be
+ non-zero when referring to a field in a common structure).
+ ORIG is the negative of reloc_entry->addend, which is set by
+ the CALC_ADDEND macro below. We want to replace the value in
+ the object file with NEW + OFFSET, where NEW is the value of
+ the common symbol which we are going to put in the final
+ object file. NEW is symbol->value. */
+ diff = symbol->value + reloc_entry->addend;
+#else
+ /* In PE mode, we do not offset the common symbol. */
+ diff = reloc_entry->addend;
+#endif
+ }
+ else
+ {
+ /* For some reason bfd_perform_relocation always effectively
+ ignores the addend for a COFF target when producing
+ relocatable output. This seems to be always wrong for 386
+ COFF, so we handle the addend here instead. */
+#if defined(COFF_WITH_PE)
+ if (output_bfd == NULL)
+ {
+ reloc_howto_type *howto = reloc_entry->howto;
+
+ /* Although PC relative relocations are very similar between
+ PE and non-PE formats, but they are off by 1 << howto->size
+ bytes. For the external relocation, PE is very different
+ from others. See md_apply_fix3 () in gas/config/tc-amd64.c.
+ When we link PE and non-PE object files together to
+ generate a non-PE executable, we have to compensate it
+ here. */
+ if(howto->pc_relative && howto->pcrel_offset)
+ diff = -(1 << howto->size);
+ else if(symbol->flags & BSF_WEAK)
+ diff = reloc_entry->addend - symbol->value;
+ else
+ diff = -reloc_entry->addend;
+ }
+ else
+#endif
+ diff = reloc_entry->addend;
+ }
+
+#if defined(COFF_WITH_PE)
+ /* FIXME: How should this case be handled? */
+ if (reloc_entry->howto->type == R_AMD64_IMAGEBASE
+ && output_bfd != NULL
+ && bfd_get_flavour (output_bfd) == bfd_target_coff_flavour)
+ diff -= pe_data (output_bfd)->pe_opthdr.ImageBase;
+#endif
+
+#define DOIT(x) \
+ x = ((x & ~howto->dst_mask) | (((x & howto->src_mask) + diff) & howto->dst_mask))
+
+ if (diff != 0)
+ {
+ reloc_howto_type *howto = reloc_entry->howto;
+ unsigned char *addr = (unsigned char *) data + reloc_entry->address;
+
+ switch (howto->size)
+ {
+ case 0:
+ {
+ char x = bfd_get_8 (abfd, addr);
+ DOIT (x);
+ bfd_put_8 (abfd, x, addr);
+ }
+ break;
+
+ case 1:
+ {
+ short x = bfd_get_16 (abfd, addr);
+ DOIT (x);
+ bfd_put_16 (abfd, (bfd_vma) x, addr);
+ }
+ break;
+
+ case 2:
+ {
+ long x = bfd_get_32 (abfd, addr);
+ DOIT (x);
+ bfd_put_32 (abfd, (bfd_vma) x, addr);
+ }
+ break;
+ case 4:
+ {
+ long long x = bfd_get_64 (abfd, addr);
+ DOIT (x);
+ bfd_put_64 (abfd, (bfd_vma) x, addr);
+ }
+ break;
+
+ default:
+ abort ();
+ }
+ }
+
+ /* Now let bfd_perform_relocation finish everything up. */
+ return bfd_reloc_continue;
+}
+
+#if defined(COFF_WITH_PE)
+/* Return TRUE if this relocation should appear in the output .reloc
+ section. */
+
+static bfd_boolean
+in_reloc_p (bfd *abfd ATTRIBUTE_UNUSED, reloc_howto_type *howto)
+{
+ return ! howto->pc_relative && howto->type != R_AMD64_IMAGEBASE;
+}
+#endif /* COFF_WITH_PE */
+
+#ifndef PCRELOFFSET
+#define PCRELOFFSET TRUE
+#endif
+
+static reloc_howto_type howto_table[] =
+{
+ EMPTY_HOWTO (0),
+ HOWTO (R_AMD64_DIR64, /* type 1*/
+ 0, /* rightshift */
+ 4, /* size (0 = byte, 1 = short, 2 = long, 4 = long long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "R_X86_64_64", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffffffffffffll, /* src_mask */
+ 0xffffffffffffffffll, /* dst_mask */
+ TRUE), /* pcrel_offset */
+ HOWTO (R_AMD64_DIR32, /* type 2 */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "R_X86_64_32", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+ /* PE IMAGE_REL_AMD64_ADDR32NB relocation (3). */
+ HOWTO (R_AMD64_IMAGEBASE, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "rva32", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+ /* 32-bit longword PC relative relocation (4). */
+ HOWTO (R_AMD64_PCRLONG, /* type 4 */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "R_X86_64_PC32", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ PCRELOFFSET), /* pcrel_offset */
+
+ HOWTO (R_AMD64_PCRLONG_1, /* type 5 */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "DISP32+1", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ PCRELOFFSET), /* pcrel_offset */
+ HOWTO (R_AMD64_PCRLONG_2, /* type 6 */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "DISP32+2", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ PCRELOFFSET), /* pcrel_offset */
+ HOWTO (R_AMD64_PCRLONG_3, /* type 7 */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "DISP32+3", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ PCRELOFFSET), /* pcrel_offset */
+ HOWTO (R_AMD64_PCRLONG_4, /* type 8 */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "DISP32+4", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ PCRELOFFSET), /* pcrel_offset */
+ HOWTO (R_AMD64_PCRLONG_5, /* type 9 */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "DISP32+5", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ PCRELOFFSET), /* pcrel_offset */
+ EMPTY_HOWTO (10), /* R_AMD64_SECTION 10 */
+#if defined(COFF_WITH_PE)
+ /* 32-bit longword section relative relocation (11). */
+ HOWTO (R_AMD64_SECREL, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "secrel32", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+#else
+ EMPTY_HOWTO (11),
+#endif
+ EMPTY_HOWTO (12),
+ EMPTY_HOWTO (13),
+#ifndef DONT_EXTEND_AMD64
+ HOWTO (R_AMD64_PCRQUAD,
+ 0, /* rightshift */
+ 4, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "R_X86_64_PC64", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffffffffffffll, /* src_mask */
+ 0xffffffffffffffffll, /* dst_mask */
+ PCRELOFFSET), /* pcrel_offset */
+#else
+ EMPTY_HOWTO (14),
+#endif
+ /* Byte relocation (15). */
+ HOWTO (R_RELBYTE, /* type */
+ 0, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "R_X86_64_8", /* name */
+ TRUE, /* partial_inplace */
+ 0x000000ff, /* src_mask */
+ 0x000000ff, /* dst_mask */
+ PCRELOFFSET), /* pcrel_offset */
+ /* 16-bit word relocation (16). */
+ HOWTO (R_RELWORD, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "R_X86_64_16", /* name */
+ TRUE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ PCRELOFFSET), /* pcrel_offset */
+ /* 32-bit longword relocation (17). */
+ HOWTO (R_RELLONG, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "R_X86_64_32S", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ PCRELOFFSET), /* pcrel_offset */
+ /* Byte PC relative relocation (18). */
+ HOWTO (R_PCRBYTE, /* type */
+ 0, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "R_X86_64_PC8", /* name */
+ TRUE, /* partial_inplace */
+ 0x000000ff, /* src_mask */
+ 0x000000ff, /* dst_mask */
+ PCRELOFFSET), /* pcrel_offset */
+ /* 16-bit word PC relative relocation (19). */
+ HOWTO (R_PCRWORD, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "R_X86_64_PC16", /* name */
+ TRUE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ PCRELOFFSET), /* pcrel_offset */
+ /* 32-bit longword PC relative relocation (20). */
+ HOWTO (R_PCRLONG, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ coff_amd64_reloc, /* special_function */
+ "R_X86_64_PC32", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ PCRELOFFSET) /* pcrel_offset */
+};
+
+/* Turn a howto into a reloc nunmber */
+
+#define SELECT_RELOC(x,howto) { x.r_type = howto->type; }
+#define I386 1 /* Customize coffcode.h */
+#define AMD64 1
+
+#define RTYPE2HOWTO(cache_ptr, dst) \
+ ((cache_ptr)->howto = \
+ ((dst)->r_type < ARRAY_SIZE (howto_table)) \
+ ? howto_table + (dst)->r_type \
+ : NULL)
+
+/* For 386 COFF a STYP_NOLOAD | STYP_BSS section is part of a shared
+ library. On some other COFF targets STYP_BSS is normally
+ STYP_NOLOAD. */
+#define BSS_NOLOAD_IS_SHARED_LIBRARY
+
+/* Compute the addend of a reloc. If the reloc is to a common symbol,
+ the object file contains the value of the common symbol. By the
+ time this is called, the linker may be using a different symbol
+ from a different object file with a different value. Therefore, we
+ hack wildly to locate the original symbol from this file so that we
+ can make the correct adjustment. This macro sets coffsym to the
+ symbol from the original file, and uses it to set the addend value
+ correctly. If this is not a common symbol, the usual addend
+ calculation is done, except that an additional tweak is needed for
+ PC relative relocs.
+ FIXME: This macro refers to symbols and asect; these are from the
+ calling function, not the macro arguments. */
+
+#define CALC_ADDEND(abfd, ptr, reloc, cache_ptr) \
+ { \
+ coff_symbol_type *coffsym = NULL; \
+ \
+ if (ptr && bfd_asymbol_bfd (ptr) != abfd) \
+ coffsym = (obj_symbols (abfd) \
+ + (cache_ptr->sym_ptr_ptr - symbols)); \
+ else if (ptr) \
+ coffsym = coff_symbol_from (abfd, ptr); \
+ \
+ if (coffsym != NULL \
+ && coffsym->native->u.syment.n_scnum == 0) \
+ cache_ptr->addend = - coffsym->native->u.syment.n_value; \
+ else if (ptr && bfd_asymbol_bfd (ptr) == abfd \
+ && ptr->section != NULL) \
+ cache_ptr->addend = - (ptr->section->vma + ptr->value); \
+ else \
+ cache_ptr->addend = 0; \
+ if (ptr && howto_table[reloc.r_type].pc_relative) \
+ cache_ptr->addend += asect->vma; \
+ }
+
+/* We use the special COFF backend linker. For normal AMD64 COFF, we
+ can use the generic relocate_section routine. For PE, we need our
+ own routine. */
+
+#if !defined(COFF_WITH_PE)
+
+#define coff_relocate_section _bfd_coff_generic_relocate_section
+
+#else /* COFF_WITH_PE */
+
+/* The PE relocate section routine. The only difference between this
+ and the regular routine is that we don't want to do anything for a
+ relocatable link. */
+
+static bfd_boolean
+coff_pe_amd64_relocate_section (bfd *output_bfd,
+ struct bfd_link_info *info,
+ bfd *input_bfd,
+ asection *input_section,
+ bfd_byte *contents,
+ struct internal_reloc *relocs,
+ struct internal_syment *syms,
+ asection **sections)
+{
+ if (info->relocatable)
+ return TRUE;
+
+ return _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,input_section, contents,relocs, syms, sections);
+}
+
+#define coff_relocate_section coff_pe_amd64_relocate_section
+
+#endif /* COFF_WITH_PE */
+
+/* Convert an rtype to howto for the COFF backend linker. */
+
+static reloc_howto_type *
+coff_amd64_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+ asection *sec,
+ struct internal_reloc *rel,
+ struct coff_link_hash_entry *h,
+ struct internal_syment *sym,
+ bfd_vma *addendp)
+{
+ reloc_howto_type *howto;
+
+ if (rel->r_type > ARRAY_SIZE (howto_table))
+ {
+ bfd_set_error (bfd_error_bad_value);
+ return NULL;
+ }
+ if (rel->r_type >= R_AMD64_PCRLONG_1 && rel->r_type <= R_AMD64_PCRLONG_5)
+ {
+ rel->r_vaddr += (bfd_vma)(rel->r_type-R_AMD64_PCRLONG);
+ rel->r_type = R_AMD64_PCRLONG;
+ }
+ howto = howto_table + rel->r_type;
+
+#if defined(COFF_WITH_PE)
+ /* Cancel out code in _bfd_coff_generic_relocate_section. */
+ *addendp = 0;
+#endif
+
+ if (howto->pc_relative)
+ *addendp += sec->vma;
+
+ if (sym != NULL && sym->n_scnum == 0 && sym->n_value != 0)
+ {
+ /* This is a common symbol. The section contents include the
+ size (sym->n_value) as an addend. The relocate_section
+ function will be adding in the final value of the symbol. We
+ need to subtract out the current size in order to get the
+ correct result. */
+ BFD_ASSERT (h != NULL);
+
+#if !defined(COFF_WITH_PE)
+ /* I think we *do* want to bypass this. If we don't, I have
+ seen some data parameters get the wrong relocation address.
+ If I link two versions with and without this section bypassed
+ and then do a binary comparison, the addresses which are
+ different can be looked up in the map. The case in which
+ this section has been bypassed has addresses which correspond
+ to values I can find in the map. */
+ *addendp -= sym->n_value;
+#endif
+ }
+
+#if !defined(COFF_WITH_PE)
+ /* If the output symbol is common (in which case this must be a
+ relocatable link), we need to add in the final size of the
+ common symbol. */
+ if (h != NULL && h->root.type == bfd_link_hash_common)
+ *addendp += h->root.u.c.size;
+#endif
+
+#if defined(COFF_WITH_PE)
+ if (howto->pc_relative)
+ {
+ *addendp -= 4;
+
+ /* If the symbol is defined, then the generic code is going to
+ add back the symbol value in order to cancel out an
+ adjustment it made to the addend. However, we set the addend
+ to 0 at the start of this function. We need to adjust here,
+ to avoid the adjustment the generic code will make. FIXME:
+ This is getting a bit hackish. */
+ if (sym != NULL && sym->n_scnum != 0)
+ *addendp -= sym->n_value;
+ }
+
+ if (rel->r_type == R_AMD64_IMAGEBASE
+ && (bfd_get_flavour (sec->output_section->owner) == bfd_target_coff_flavour))
+ *addendp -= pe_data (sec->output_section->owner)->pe_opthdr.ImageBase;
+
+ if (rel->r_type == R_AMD64_SECREL)
+ {
+ bfd_vma osect_vma;
+
+ if (h && (h->type == bfd_link_hash_defined || h->type == bfd_link_hash_defweak))
+ osect_vma = h->root.u.def.section->output_section->vma;
+ else
+ {
+ asection *sec;
+ int i;
+
+ /* Sigh, the only way to get the section to offset against
+ is to find it the hard way. */
+ for (sec = abfd->sections, i = 1; i < sym->n_scnum; i++)
+ sec = sec->next;
+
+ osect_vma = sec->output_section->vma;
+ }
+
+ *addendp -= osect_vma;
+ }
+#endif
+
+ return howto;
+}
+
+#define coff_bfd_reloc_type_lookup coff_amd64_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup coff_amd64_reloc_name_lookup
+
+static reloc_howto_type *
+coff_amd64_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code)
+{
+ switch (code)
+ {
+ case BFD_RELOC_RVA:
+ return howto_table + R_AMD64_IMAGEBASE;
+ case BFD_RELOC_32:
+ return howto_table + R_AMD64_DIR32;
+ case BFD_RELOC_64:
+ return howto_table + R_AMD64_DIR64;
+ case BFD_RELOC_64_PCREL:
+#ifndef DONT_EXTEND_AMD64
+ return howto_table + R_AMD64_PCRQUAD;
+#else
+ /* Fall through. */
+#endif
+ case BFD_RELOC_32_PCREL:
+ return howto_table + R_AMD64_PCRLONG;
+ case BFD_RELOC_X86_64_32S:
+ return howto_table + R_RELLONG;
+ case BFD_RELOC_16:
+ return howto_table + R_RELWORD;
+ case BFD_RELOC_16_PCREL:
+ return howto_table + R_PCRWORD;
+ case BFD_RELOC_8:
+ return howto_table + R_RELBYTE;
+ case BFD_RELOC_8_PCREL:
+ return howto_table + R_PCRBYTE;
+#if defined(COFF_WITH_PE)
+ case BFD_RELOC_32_SECREL:
+ return howto_table + R_AMD64_SECREL;
+#endif
+ default:
+ BFD_FAIL ();
+ return 0;
+ }
+}
+
+static reloc_howto_type *
+coff_amd64_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof (howto_table) / sizeof (howto_table[0]); i++)
+ if (howto_table[i].name != NULL
+ && strcasecmp (howto_table[i].name, r_name) == 0)
+ return &howto_table[i];
+
+ return NULL;
+}
+
+#define coff_rtype_to_howto coff_amd64_rtype_to_howto
+
+#ifdef TARGET_UNDERSCORE
+
+/* If amd64 gcc uses underscores for symbol names, then it does not use
+ a leading dot for local labels, so if TARGET_UNDERSCORE is defined
+ we treat all symbols starting with L as local. */
+
+static bfd_boolean
+coff_amd64_is_local_label_name (bfd *abfd, const char *name)
+{
+ if (name[0] == 'L')
+ return TRUE;
+
+ return _bfd_coff_is_local_label_name (abfd, name);
+}
+
+#define coff_bfd_is_local_label_name coff_amd64_is_local_label_name
+
+#endif /* TARGET_UNDERSCORE */
+
+#include "coffcode.h"
+
+#ifdef PE
+#define amd64coff_object_p pe_bfd_object_p
+#else
+#define amd64coff_object_p coff_object_p
+#endif
+
+const bfd_target
+#ifdef TARGET_SYM
+ TARGET_SYM =
+#else
+ x86_64coff_vec =
+#endif
+{
+#ifdef TARGET_NAME
+ TARGET_NAME,
+#else
+ "coff-x86-64", /* Name. */
+#endif
+ bfd_target_coff_flavour,
+ BFD_ENDIAN_LITTLE, /* Data byte order is little. */
+ BFD_ENDIAN_LITTLE, /* Header byte order is little. */
+
+ (HAS_RELOC | EXEC_P | /* Object flags. */
+ HAS_LINENO | HAS_DEBUG |
+ HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
+
+ (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags. */
+#if defined(COFF_WITH_PE)
+ | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY
+#endif
+ | SEC_CODE | SEC_DATA),
+
+#ifdef TARGET_UNDERSCORE
+ TARGET_UNDERSCORE, /* Leading underscore. */
+#else
+ 0, /* Leading underscore. */
+#endif
+ '/', /* Ar_pad_char. */
+ 15, /* Ar_max_namelen. */
+
+ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+ bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data. */
+ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+ bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs. */
+
+ /* Note that we allow an object file to be treated as a core file as well. */
+ { _bfd_dummy_target, amd64coff_object_p, /* BFD_check_format. */
+ bfd_generic_archive_p, amd64coff_object_p },
+ { bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format. */
+ bfd_false },
+ { bfd_false, coff_write_object_contents, /* bfd_write_contents. */
+ _bfd_write_archive_contents, bfd_false },
+
+ BFD_JUMP_TABLE_GENERIC (coff),
+ BFD_JUMP_TABLE_COPY (coff),
+ BFD_JUMP_TABLE_CORE (_bfd_nocore),
+ BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
+ BFD_JUMP_TABLE_SYMBOLS (coff),
+ BFD_JUMP_TABLE_RELOCS (coff),
+ BFD_JUMP_TABLE_WRITE (coff),
+ BFD_JUMP_TABLE_LINK (coff),
+ BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
+
+ NULL,
+
+ COFF_SWAP_TABLE
+};
diff --git a/bfd/coff-z80.c b/bfd/coff-z80.c
index 512c2b8677e6..cb5a0e3dd1ae 100644
--- a/bfd/coff-z80.c
+++ b/bfd/coff-z80.c
@@ -1,5 +1,5 @@
/* BFD back-end for Zilog Z80 COFF binaries.
- Copyright 2005 Free Software Foundation, Inc.
+ Copyright 2005, 2007 Free Software Foundation, Inc.
Contributed by Arnold Metselaar <arnold_m@operamail.com>
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "coff/z80.h"
@@ -123,6 +123,26 @@ coff_z80_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
}
}
+static reloc_howto_type *
+coff_z80_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ if (strcasecmp (r_imm8.name, r_name) == 0)
+ return &r_imm8;
+ if (strcasecmp (r_imm16.name, r_name) == 0)
+ return &r_imm16;
+ if (strcasecmp (r_imm24.name, r_name) == 0)
+ return &r_imm24;
+ if (strcasecmp (r_imm32.name, r_name) == 0)
+ return &r_imm32;
+ if (strcasecmp (r_jr.name, r_name) == 0)
+ return &r_jr;
+ if (strcasecmp (r_off8.name, r_name) == 0)
+ return &r_off8;
+
+ return NULL;
+}
+
/* Perform any necessary magic to the addend in a reloc entry. */
#define CALC_ADDEND(abfd, symbol, ext_reloc, cache_ptr) \
@@ -248,6 +268,7 @@ extra_case (bfd *in_abfd,
#define coff_reloc16_extra_cases extra_case
#define coff_bfd_reloc_type_lookup coff_z80_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup coff_z80_reloc_name_lookup
#include "coffcode.h"
diff --git a/bfd/coff-z8k.c b/bfd/coff-z8k.c
index 8fc2f1692398..fb07db3a6e5a 100644
--- a/bfd/coff-z8k.c
+++ b/bfd/coff-z8k.c
@@ -1,6 +1,6 @@
/* BFD back-end for Zilog Z800n COFF binaries.
Copyright 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005 Free Software Foundation, Inc.
+ 2004, 2005, 2007 Free Software Foundation, Inc.
Contributed by Cygnus Support.
Written by Steve Chamberlain, <sac@cygnus.com>.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "coff/z8k.h"
@@ -135,6 +135,30 @@ coff_z8k_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
}
}
+static reloc_howto_type *
+coff_z8k_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ if (strcasecmp (r_imm8.name, r_name) == 0)
+ return &r_imm8;
+ if (strcasecmp (r_da.name, r_name) == 0)
+ return &r_da;
+ if (strcasecmp (r_imm32.name, r_name) == 0)
+ return &r_imm32;
+ if (strcasecmp (r_jr.name, r_name) == 0)
+ return &r_jr;
+ if (strcasecmp (r_rel16.name, r_name) == 0)
+ return &r_rel16;
+ if (strcasecmp (r_disp7.name, r_name) == 0)
+ return &r_disp7;
+ if (strcasecmp (r_callr.name, r_name) == 0)
+ return &r_callr;
+ if (strcasecmp (r_imm4l.name, r_name) == 0)
+ return &r_imm4l;
+
+ return NULL;
+}
+
/* Perform any necessary magic to the addend in a reloc entry. */
#define CALC_ADDEND(abfd, symbol, ext_reloc, cache_ptr) \
@@ -345,6 +369,7 @@ extra_case (bfd *in_abfd,
#define coff_reloc16_extra_cases extra_case
#define coff_bfd_reloc_type_lookup coff_z8k_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup coff_z8k_reloc_name_lookup
#include "coffcode.h"
diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c
index e0aa87ef6775..5e0804f00fc7 100644
--- a/bfd/coff64-rs6000.c
+++ b/bfd/coff64-rs6000.c
@@ -1,5 +1,5 @@
/* BFD back-end for IBM RS/6000 "XCOFF64" files.
- Copyright 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written Clinton Popetz.
Contributed by Cygnus Support.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "coff/internal.h"
@@ -127,7 +127,7 @@ extern bfd_boolean _bfd_xcoff_write_armap
extern bfd_boolean _bfd_xcoff_write_archive_contents
PARAMS ((bfd *));
extern int _bfd_xcoff_sizeof_headers
- PARAMS ((bfd *, bfd_boolean));
+ PARAMS ((bfd *, struct bfd_link_info *));
extern void _bfd_xcoff_swap_sym_in
PARAMS ((bfd *, PTR, PTR));
extern unsigned int _bfd_xcoff_swap_sym_out
@@ -161,7 +161,7 @@ static const bfd_target *xcoff64_archive_p
static bfd *xcoff64_openr_next_archived_file
PARAMS ((bfd *, bfd *));
static int xcoff64_sizeof_headers
- PARAMS ((bfd *, bfd_boolean));
+ PARAMS ((bfd *, struct bfd_link_info *));
static asection *xcoff64_create_csect_from_smclas
PARAMS ((bfd *, union internal_auxent *, const char *));
static bfd_boolean xcoff64_is_lineno_count_overflow
@@ -237,6 +237,7 @@ bfd_boolean (*xcoff64_calculate_relocation[XCOFF_MAX_CALCULATE_RELOCATION])
#define coff_bfd_copy_private_bfd_data _bfd_xcoff_copy_private_bfd_data
#define coff_bfd_is_local_label_name _bfd_xcoff_is_local_label_name
#define coff_bfd_reloc_type_lookup xcoff64_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup xcoff64_reloc_name_lookup
#ifdef AIX_CORE
extern const bfd_target * rs6000coff_core_p
PARAMS ((bfd *abfd));
@@ -1843,6 +1844,22 @@ xcoff64_reloc_type_lookup (abfd, code)
}
}
+static reloc_howto_type *
+xcoff64_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (xcoff64_howto_table) / sizeof (xcoff64_howto_table[0]);
+ i++)
+ if (xcoff64_howto_table[i].name != NULL
+ && strcasecmp (xcoff64_howto_table[i].name, r_name) == 0)
+ return &xcoff64_howto_table[i];
+
+ return NULL;
+}
+
/* Read in the armap of an XCOFF archive. */
static bfd_boolean
@@ -2056,9 +2073,8 @@ xcoff64_openr_next_archived_file (archive, last_file)
always uses an a.out header. */
static int
-xcoff64_sizeof_headers (abfd, reloc)
- bfd *abfd;
- bfd_boolean reloc ATTRIBUTE_UNUSED;
+xcoff64_sizeof_headers (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
int size;
@@ -2726,6 +2742,7 @@ const bfd_target rs6000coff64_vec =
coff_get_reloc_upper_bound,
coff_canonicalize_reloc,
xcoff64_reloc_type_lookup,
+ xcoff64_reloc_name_lookup,
/* Write */
coff_set_arch_mach,
@@ -2977,6 +2994,7 @@ const bfd_target aix5coff64_vec =
coff_get_reloc_upper_bound,
coff_canonicalize_reloc,
xcoff64_reloc_type_lookup,
+ xcoff64_reloc_name_lookup,
/* Write */
coff_set_arch_mach,
diff --git a/bfd/coffcode.h b/bfd/coffcode.h
index 256732c314d4..a2aac5f63b4c 100644
--- a/bfd/coffcode.h
+++ b/bfd/coffcode.h
@@ -1,6 +1,6 @@
/* Support for the generic parts of most COFF variants, for BFD.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -427,7 +427,7 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags)
styp_flags = STYP_LIT;
#endif /* _LIT */
}
- else if (!strncmp (sec_name, DOT_DEBUG, sizeof (DOT_DEBUG) - 1))
+ else if (CONST_STRNEQ (sec_name, DOT_DEBUG))
{
/* Handle the XCOFF debug section and DWARF2 debug sections. */
if (!sec_name[6])
@@ -435,12 +435,12 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags)
else
styp_flags = STYP_DEBUG_INFO;
}
- else if (!strncmp (sec_name, ".stab", 5))
+ else if (CONST_STRNEQ (sec_name, ".stab"))
{
styp_flags = STYP_DEBUG_INFO;
}
#ifdef COFF_LONG_SECTION_NAMES
- else if (!strncmp (sec_name, GNU_LINKONCE_WI, sizeof (GNU_LINKONCE_WI) - 1))
+ else if (CONST_STRNEQ (sec_name, GNU_LINKONCE_WI))
{
styp_flags = STYP_DEBUG_INFO;
}
@@ -529,8 +529,8 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags)
but there are more IMAGE_SCN_* flags. */
/* FIXME: There is no gas syntax to specify the debug section flag. */
- if (strncmp (sec_name, DOT_DEBUG, sizeof (DOT_DEBUG) - 1) == 0
- || strncmp (sec_name, GNU_LINKONCE_WI, sizeof (GNU_LINKONCE_WI) - 1) == 0)
+ if (CONST_STRNEQ (sec_name, DOT_DEBUG)
+ || CONST_STRNEQ (sec_name, GNU_LINKONCE_WI))
sec_flags = SEC_DEBUGGING;
/* skip LOAD */
@@ -674,14 +674,14 @@ styp_to_sec_flags (bfd *abfd ATTRIBUTE_UNUSED,
#endif
sec_flags |= SEC_ALLOC;
}
- else if (strncmp (name, DOT_DEBUG, sizeof (DOT_DEBUG) - 1) == 0
+ else if (CONST_STRNEQ (name, DOT_DEBUG)
#ifdef _COMMENT
|| strcmp (name, _COMMENT) == 0
#endif
#ifdef COFF_LONG_SECTION_NAMES
- || strncmp (name, GNU_LINKONCE_WI, sizeof (GNU_LINKONCE_WI) - 1) == 0
+ || CONST_STRNEQ (name, GNU_LINKONCE_WI)
#endif
- || strncmp (name, ".stab", 5) == 0)
+ || CONST_STRNEQ (name, ".stab"))
{
#ifdef COFF_PAGE_SIZE
sec_flags |= SEC_DEBUGGING;
@@ -715,7 +715,7 @@ styp_to_sec_flags (bfd *abfd ATTRIBUTE_UNUSED,
The symbols will be defined as weak, so that multiple definitions
are permitted. The GNU linker extension is to actually discard
all but one of the sections. */
- if (strncmp (name, ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) == 0)
+ if (CONST_STRNEQ (name, ".gnu.linkonce"))
sec_flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
#endif
@@ -1071,7 +1071,7 @@ styp_to_sec_flags (bfd *abfd,
/* The MS PE spec sets the DISCARDABLE flag on .reloc sections
but we do not want them to be labelled as debug section, since
then strip would remove them. */
- if (strncmp (name, ".reloc", sizeof ".reloc" - 1) != 0)
+ if (! CONST_STRNEQ (name, ".reloc"))
sec_flags |= SEC_DEBUGGING;
break;
case IMAGE_SCN_MEM_SHARED:
@@ -1126,7 +1126,7 @@ styp_to_sec_flags (bfd *abfd,
The symbols will be defined as weak, so that multiple definitions
are permitted. The GNU linker extension is to actually discard
all but one of the sections. */
- if (strncmp (name, ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) == 0)
+ if (CONST_STRNEQ (name, ".gnu.linkonce"))
sec_flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
#endif
@@ -1546,6 +1546,9 @@ static const unsigned int coff_section_alignment_table_size =
static bfd_boolean
coff_new_section_hook (bfd * abfd, asection * section)
{
+ combined_entry_type *native;
+ bfd_size_type amt;
+
section->alignment_power = COFF_DEFAULT_SECTION_ALIGNMENT_POWER;
#ifdef RS6000COFF_C
@@ -1557,34 +1560,31 @@ coff_new_section_hook (bfd * abfd, asection * section)
section->alignment_power = bfd_xcoff_data_align_power (abfd);
#endif
- /* PR binutils/2724: Only real sections have a symbol that
- has the coff_symbol_type structure allocated for it. */
- if (! bfd_is_const_section (section))
- {
- combined_entry_type *native;
- bfd_size_type amt;
+ /* Set up the section symbol. */
+ if (!_bfd_generic_new_section_hook (abfd, section))
+ return FALSE;
- /* Allocate aux records for section symbols, to store size and
- related info.
+ /* Allocate aux records for section symbols, to store size and
+ related info.
- @@ The 10 is a guess at a plausible maximum number of aux entries
- (but shouldn't be a constant). */
- amt = sizeof (combined_entry_type) * 10;
- native = bfd_zalloc (abfd, amt);
- if (native == NULL)
- return FALSE;
+ @@ The 10 is a guess at a plausible maximum number of aux entries
+ (but shouldn't be a constant). */
+ amt = sizeof (combined_entry_type) * 10;
+ native = bfd_zalloc (abfd, amt);
+ if (native == NULL)
+ return FALSE;
- /* We don't need to set up n_name, n_value, or n_scnum in the native
- symbol information, since they'll be overridden by the BFD symbol
- anyhow. However, we do need to set the type and storage class,
- in case this symbol winds up getting written out. The value 0
- for n_numaux is already correct. */
- native->u.syment.n_type = T_NULL;
- native->u.syment.n_sclass = C_STAT;
+ /* We don't need to set up n_name, n_value, or n_scnum in the native
+ symbol information, since they'll be overridden by the BFD symbol
+ anyhow. However, we do need to set the type and storage class,
+ in case this symbol winds up getting written out. The value 0
+ for n_numaux is already correct. */
+
+ native->u.syment.n_type = T_NULL;
+ native->u.syment.n_sclass = C_STAT;
+
+ coffsymbol (section->symbol)->native = native;
- coffsymbol (section->symbol)->native = native;
- }
-
coff_set_custom_section_alignment (abfd, section,
coff_section_alignment_table,
coff_section_alignment_table_size);
@@ -1882,9 +1882,15 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr)
#ifdef I386MAGIC
case I386MAGIC:
case I386PTXMAGIC:
- case I386AIXMAGIC: /* Danbury PS/2 AIX C Compiler */
- case LYNXCOFFMAGIC: /* shadows the m68k Lynx number below, sigh */
+ case I386AIXMAGIC: /* Danbury PS/2 AIX C Compiler. */
+ case LYNXCOFFMAGIC: /* Shadows the m68k Lynx number below, sigh. */
+ arch = bfd_arch_i386;
+ break;
+#endif
+#ifdef AMD64MAGIC
+ case AMD64MAGIC:
arch = bfd_arch_i386;
+ machine = bfd_mach_x86_64;
break;
#endif
#ifdef IA64MAGIC
@@ -2532,11 +2538,15 @@ coff_write_relocs (bfd * abfd, int first_undef)
else
{
n.r_symndx = get_index ((*(q->sym_ptr_ptr)));
- /* Take notice if the symbol reloc points to a symbol
- we don't have in our symbol table. What should we
- do for this?? */
+ /* Check to see if the symbol reloc points to a symbol
+ we don't have in our symbol table. */
if (n.r_symndx > obj_conv_table_size (abfd))
- abort ();
+ {
+ bfd_set_error (bfd_error_bad_value);
+ _bfd_error_handler (_("%B: reloc against a non-existant symbol index: %ld"),
+ abfd, n.r_symndx);
+ return FALSE;
+ }
}
}
@@ -2717,13 +2727,18 @@ coff_set_flags (bfd * abfd,
return TRUE;
#endif
-#ifdef I386MAGIC
+#if defined(I386MAGIC) || defined(AMD64MAGIC)
case bfd_arch_i386:
+#if defined(I386MAGIC)
*magicp = I386MAGIC;
-#ifdef LYNXOS
+#endif
+#if defined LYNXOS
/* Just overwrite the usual value if we're doing Lynx. */
*magicp = LYNXCOFFMAGIC;
#endif
+#if defined AMD64MAGIC
+ *magicp = AMD64MAGIC;
+#endif
return TRUE;
#endif
@@ -3755,6 +3770,7 @@ coff_write_object_contents (bfd * abfd)
internal_f.f_flags |= IMAGE_FILE_LARGE_ADDRESS_AWARE;
#endif
+#ifndef COFF_WITH_pex64
#ifdef COFF_WITH_PE
internal_f.f_flags |= IMAGE_FILE_32BIT_MACHINE;
#else
@@ -3763,6 +3779,7 @@ coff_write_object_contents (bfd * abfd)
else
internal_f.f_flags |= F_AR32W;
#endif
+#endif
#ifdef TI_TARGET_ID
/* Target id is used in TI COFF v1 and later; COFF0 won't use this field,
@@ -3856,16 +3873,18 @@ coff_write_object_contents (bfd * abfd)
#if defined(I386)
#define __A_MAGIC_SET__
-#if defined(LYNXOS)
+#if defined LYNXOS
internal_a.magic = LYNXCOFFMAGIC;
-#else /* LYNXOS */
+#elif defined AMD64
+ internal_a.magic = IMAGE_NT_OPTIONAL_HDR64_MAGIC;
+#else
internal_a.magic = ZMAGIC;
-#endif /* LYNXOS */
+#endif
#endif /* I386 */
#if defined(IA64)
#define __A_MAGIC_SET__
- internal_a.magic = ZMAGIC;
+ internal_a.magic = PE32PMAGIC;
#endif /* IA64 */
#if defined(SPARC)
@@ -4851,6 +4870,7 @@ coff_slurp_reloc_table (bfd * abfd, sec_ptr asect, asymbol ** symbols)
cache_ptr = reloc_cache + idx;
src = native_relocs + idx;
+ dst.r_offset = 0;
coff_swap_reloc_in (abfd, src, &dst);
#ifdef RELOC_PROCESSING
@@ -4931,6 +4951,7 @@ coff_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
{
arelent genrel;
+ genrel.howto = NULL;
RTYPE2HOWTO (&genrel, rel);
return genrel.howto;
}
@@ -5314,6 +5335,9 @@ static const bfd_coff_backend_data ticoff1_swap_table =
#ifndef coff_bfd_reloc_type_lookup
#define coff_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
#endif
+#ifndef coff_bfd_reloc_name_lookup
+#define coff_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
+#endif
#ifndef coff_bfd_get_relocated_section_contents
#define coff_bfd_get_relocated_section_contents \
diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index c541e6a590eb..8884a7f14db5 100644
--- a/bfd/coffgen.c
+++ b/bfd/coffgen.c
@@ -1,6 +1,6 @@
/* Support for the generic parts of COFF, for BFD.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005
+ 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -37,8 +37,8 @@
Those functions may not use any COFF specific information, such as
coff_data (abfd). */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "coff/internal.h"
#include "libcoff.h"
@@ -1901,7 +1901,16 @@ coff_print_symbol (bfd *abfd,
combined->u.syment.n_type,
combined->u.syment.n_sclass,
combined->u.syment.n_numaux);
- fprintf_vma (file, val);
+#ifdef BFD64
+ /* fprintf_vma() on a 64-bit enabled host will always print a 64-bit
+ value, but really we want to display the address in the target's
+ address size. Since we do not have a field in the bfd structure
+ to tell us this, we take a guess, based on the target's name. */
+ if (strstr (bfd_get_target (abfd), "64") == NULL)
+ fprintf (file, "%08lx", (unsigned long) (val & 0xffffffff));
+ else
+#endif
+ fprintf_vma (file, val);
fprintf (file, " %s", symbol->name);
for (aux = 0; aux < combined->u.syment.n_numaux; aux++)
@@ -2238,11 +2247,11 @@ coff_find_inliner_info (bfd *abfd,
}
int
-coff_sizeof_headers (bfd *abfd, bfd_boolean reloc)
+coff_sizeof_headers (bfd *abfd, struct bfd_link_info *info)
{
size_t size;
- if (! reloc)
+ if (!info->relocatable)
size = bfd_coff_filhsz (abfd) + bfd_coff_aoutsz (abfd);
else
size = bfd_coff_filhsz (abfd);
diff --git a/bfd/cofflink.c b/bfd/cofflink.c
index a1f6684bb61c..1ed7107fc1dd 100644
--- a/bfd/cofflink.c
+++ b/bfd/cofflink.c
@@ -1,6 +1,6 @@
/* COFF specific linker code.
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -21,8 +21,8 @@
/* This file contains the COFF backend linker code. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "coff/internal.h"
@@ -232,7 +232,7 @@ coff_link_check_ar_symbols (bfd *abfd,
/* Auto import. */
if (!h
&& info->pei386_auto_import
- && !strncmp (name,"__imp_", 6))
+ && CONST_STRNEQ (name, "__imp_"))
h = bfd_link_hash_lookup (info->hash, name + 6, FALSE, FALSE, TRUE);
/* We are only interested in symbols that are currently
@@ -439,7 +439,7 @@ coff_link_add_symbols (bfd *abfd,
|| classification == COFF_SYMBOL_PE_SECTION)
&& coff_section_data (abfd, section) != NULL
&& coff_section_data (abfd, section)->comdat != NULL
- && strncmp (name, "??_", 3) == 0
+ && CONST_STRNEQ (name, "??_")
&& strcmp (name, coff_section_data (abfd, section)->comdat->name) == 0)
{
if (*sym_hash == NULL)
@@ -583,7 +583,7 @@ coff_link_add_symbols (bfd *abfd,
asection *stab;
for (stab = abfd->sections; stab; stab = stab->next)
- if (strncmp (".stab", stab->name, 5) == 0
+ if (CONST_STRNEQ (stab->name, ".stab")
&& (!stab->name[5]
|| (stab->name[5] == '.' && ISDIGIT (stab->name[6]))))
{
@@ -1232,16 +1232,14 @@ process_embedded_commands (bfd *output_bfd,
s++;
continue;
}
- if (strncmp (s, "-attr", 5) == 0)
+ if (CONST_STRNEQ (s, "-attr"))
{
char *name;
char *attribs;
asection *asec;
int loop = 1;
int had_write = 0;
- int had_read = 0;
int had_exec= 0;
- int had_shared= 0;
s += 5;
s = get_name (s, &name);
@@ -1255,10 +1253,8 @@ process_embedded_commands (bfd *output_bfd,
had_write = 1;
break;
case 'R':
- had_read = 1;
break;
case 'S':
- had_shared = 1;
break;
case 'X':
had_exec = 1;
@@ -1276,11 +1272,11 @@ process_embedded_commands (bfd *output_bfd,
asec->flags |= SEC_READONLY;
}
}
- else if (strncmp (s,"-heap", 5) == 0)
- s = dores_com (s+5, output_bfd, 1);
+ else if (CONST_STRNEQ (s, "-heap"))
+ s = dores_com (s + 5, output_bfd, 1);
- else if (strncmp (s,"-stack", 6) == 0)
- s = dores_com (s+6, output_bfd, 0);
+ else if (CONST_STRNEQ (s, "-stack"))
+ s = dores_com (s + 6, output_bfd, 0);
else
s++;
@@ -1925,6 +1921,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
generate two symbols with the same name, but only one
will have aux entries. */
BFD_ASSERT (isymp->n_numaux == 0
+ || h->numaux == 0
|| h->numaux == isymp->n_numaux);
}
@@ -1940,7 +1937,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
union internal_auxent aux;
union internal_auxent *auxp;
- if (h != NULL)
+ if (h != NULL && h->aux != NULL && (h->numaux > i))
auxp = h->aux + i;
else
{
diff --git a/bfd/config.bfd b/bfd/config.bfd
index 4fd72c1c1527..10b0b9481570 100755
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -31,12 +31,7 @@ targ_underscore=no
# Catch obsolete configurations.
case $targ in
- m68*-apple-aux* | \
- m68*-apollo-* | \
- m68*-bull-sysv* | \
- m68*-*-rtemscoff* | \
- i960-*-rtems* | \
- or32-*-rtems* | \
+ maxq-*-coff | \
null)
if test "x$enable_obsolete" != xyes; then
echo "*** Configuration $targ is obsolete." >&2
@@ -48,6 +43,12 @@ case $targ in
esac
case $targ in
+ m68*-apple-aux* | \
+ m68*-apollo-* | \
+ m68*-bull-sysv* | \
+ m68*-*-rtemscoff* | \
+ i960-*-rtems* | \
+ or32-*-rtems* | \
m68*-*-lynxos* | \
sparc-*-lynxos* | \
vax-*-vms* | \
@@ -75,9 +76,11 @@ bfin*) targ_archs=bfd_bfin_arch ;;
c30*) targ_archs=bfd_tic30_arch ;;
c4x*) targ_archs=bfd_tic4x_arch ;;
c54x*) targ_archs=bfd_tic54x_arch ;;
+cr16*) targ_archs=bfd_cr16_arch ;;
crisv32) targ_archs=bfd_cris_arch ;;
crx*) targ_archs=bfd_crx_arch ;;
dlx*) targ_archs=bfd_dlx_arch ;;
+fido*) targ_archs=bfd_m68k_arch ;;
hppa*) targ_archs=bfd_hppa_arch ;;
i[3-7]86) targ_archs=bfd_i386_arch ;;
i370) targ_archs=bfd_i370_arch ;;
@@ -95,10 +98,11 @@ rs6000) targ_archs="bfd_rs6000_arch bfd_powerpc_arch" ;;
s390*) targ_archs=bfd_s390_arch ;;
sh*) targ_archs=bfd_sh_arch ;;
sparc*) targ_archs=bfd_sparc_arch ;;
+spu*) targ_archs=bfd_spu_arch ;;
strongarm*) targ_archs=bfd_arm_arch ;;
thumb*) targ_archs=bfd_arm_arch ;;
v850*) targ_archs=bfd_v850_arch ;;
-x86_64) targ_archs=bfd_i386_arch ;;
+x86_64*) targ_archs=bfd_i386_arch ;;
xscale*) targ_archs=bfd_arm_arch ;;
xtensa*) targ_archs=bfd_xtensa_arch ;;
z80|r800) targ_archs=bfd_z80_arch ;;
@@ -137,6 +141,7 @@ case "${targ}" in
alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
targ_defvec=bfd_elf64_alpha_freebsd_vec
targ_selvecs=ecoffalpha_little_vec
+ want64=true
# FreeBSD <= 4.0 supports only the old nonstandard way of ABI labelling.
case "${targ}" in
alpha*-*-freebsd3* | alpha*-*-freebsd4 | alpha*-*-freebsd4.0*)
@@ -146,36 +151,49 @@ case "${targ}" in
alpha*-*-netbsd* | alpha*-*-openbsd*)
targ_defvec=bfd_elf64_alpha_vec
targ_selvecs=ecoffalpha_little_vec
+ want64=true
;;
alpha*-*-netware*)
targ_defvec=ecoffalpha_little_vec
targ_selvecs=nlm32_alpha_vec
+ want64=true
;;
alpha*-*-linuxecoff*)
targ_defvec=ecoffalpha_little_vec
targ_selvecs=bfd_elf64_alpha_vec
+ want64=true
;;
alpha*-*-linux-* | alpha*-*-elf*)
targ_defvec=bfd_elf64_alpha_vec
targ_selvecs=ecoffalpha_little_vec
+ want64=true
;;
alpha*-*-*vms*)
targ_defvec=vms_alpha_vec
+ want64=true
;;
alpha*-*-*)
targ_defvec=ecoffalpha_little_vec
+ want64=true
;;
ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
targ_defvec=bfd_elf64_ia64_little_vec
targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+ want64=true
;;
ia64*-*-hpux*)
targ_defvec=bfd_elf32_ia64_hpux_big_vec
targ_selvecs="bfd_elf64_ia64_hpux_big_vec"
+ want64=true
;;
- sparc64-*-freebsd* | sparc64-*-netbsd* | sparc64-*-openbsd* | sparc64-*-kfreebsd*-gnu)
+ sparc64-*-freebsd* | sparc64-*-kfreebsd*-gnu)
+ targ_defvec=bfd_elf64_sparc_freebsd_vec
+ targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+ ;;
+ sparc64-*-netbsd* | sparc64-*-openbsd*)
targ_defvec=bfd_elf64_sparc_vec
targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+ want64=true
;;
#endif /* BFD64 */
@@ -215,8 +233,8 @@ case "${targ}" in
targ_cflags=-DARM_COFF_BUGFIX
;;
arm-wince-pe | arm-*-wince)
- targ_defvec=armpe_little_vec
- targ_selvecs="armpe_little_vec armpe_big_vec armpei_little_vec armpei_big_vec"
+ targ_defvec=arm_wince_pe_little_vec
+ targ_selvecs="arm_wince_pe_little_vec arm_wince_pe_big_vec arm_wince_pei_little_vec arm_wince_pei_big_vec"
targ_underscore=no
targ_cflags="-DARM_WINCE -DARM_COFF_BUGFIX"
;;
@@ -336,6 +354,11 @@ case "${targ}" in
targ_underscore=yes
;;
+ cr16-*-elf*)
+ targ_defvec=bfd_elf32_cr16_vec
+ targ_underscore=yes
+ ;;
+
cr16c-*-elf*)
targ_defvec=bfd_elf32_cr16c_vec
targ_underscore=yes
@@ -365,6 +388,11 @@ case "${targ}" in
targ_defvec=bfd_elf32_d30v_vec
;;
+ fido-*-elf* )
+ targ_defvec=bfd_elf32_m68k_vec
+ targ_selvecs="m68kcoff_vec ieee_vec"
+ ;;
+
fr30-*-elf)
targ_defvec=bfd_elf32_fr30_vec
;;
@@ -403,11 +431,13 @@ case "${targ}" in
hppa*64*-*-linux-*)
targ_defvec=bfd_elf64_hppa_linux_vec
targ_selvecs=bfd_elf64_hppa_vec
+ want64=true
;;
hppa*64*-*-hpux11*)
targ_defvec=bfd_elf64_hppa_vec
targ_selvecs=bfd_elf64_hppa_linux_vec
targ_cflags=-DHPUX_LARGE_AR_IDS
+ want64=true
;;
#endif
@@ -549,18 +579,28 @@ case "${targ}" in
x86_64-*-elf*)
targ_defvec=bfd_elf64_x86_64_vec
targ_selvecs="bfd_elf32_i386_vec i386coff_vec"
+ want64=true
;;
x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
- targ_defvec=bfd_elf64_x86_64_vec
- targ_selvecs="bfd_elf32_i386_vec i386coff_vec bfd_efi_app_ia32_vec"
+ targ_defvec=bfd_elf64_x86_64_freebsd_vec
+ targ_selvecs="bfd_elf32_i386_freebsd_vec i386coff_vec bfd_efi_app_ia32_vec bfd_efi_app_x86_64_vec bfd_elf32_i386_vec bfd_elf64_x86_64_vec"
+ want64=true
;;
x86_64-*-netbsd* | x86_64-*-openbsd*)
targ_defvec=bfd_elf64_x86_64_vec
- targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+ targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec bfd_efi_app_x86_64_vec"
+ want64=true
;;
x86_64-*-linux-*)
targ_defvec=bfd_elf64_x86_64_vec
- targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+ targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec bfd_efi_app_x86_64_vec"
+ want64=true
+ ;;
+ x86_64-*-mingw*)
+ targ_defvec=x86_64pe_vec
+ targ_selvecs="x86_64pe_vec x86_64pei_vec x86_64coff_vec bfd_elf64_x86_64_vec"
+ want64=true
+ targ_underscore=yes
;;
#endif
i[3-7]86-*-lynxos*)
@@ -640,7 +680,7 @@ case "${targ}" in
targ_selvecs="b_out_vec_big_host icoff_little_vec icoff_big_vec ieee_vec"
targ_underscore=yes
;;
- i960-*-vxworks5.* | i960-*-coff* | i960-*-sysv* | i960-*-rtems*)
+ i960-*-vxworks5.* | i960-*-coff* | i960-*-sysv*)
targ_defvec=icoff_little_vec
targ_selvecs="icoff_big_vec b_out_vec_little_host b_out_vec_big_host ieee_vec"
targ_underscore=yes
@@ -671,17 +711,14 @@ case "${targ}" in
targ_defvec=bfd_elf32_m32rlelin_vec
targ_selvecs="bfd_elf32_m32rlin_vec bfd_elf32_m32rlelin_vec"
;;
-
m32r*-*-linux*)
targ_defvec=bfd_elf32_m32rlin_vec
targ_selvecs="bfd_elf32_m32rlin_vec bfd_elf32_m32rlelin_vec"
;;
-
m32r*le-*-*)
targ_defvec=bfd_elf32_m32rle_vec
targ_selvecs="bfd_elf32_m32r_vec bfd_elf32_m32rle_vec"
;;
-
m32r-*-*)
targ_defvec=bfd_elf32_m32r_vec
;;
@@ -695,13 +732,6 @@ case "${targ}" in
targ_selvecs="bfd_elf32_m68hc11_vec bfd_elf32_m68hc12_vec"
;;
- m68*-apollo-*)
- targ_defvec=apollocoff_vec
- ;;
- m68*-bull-sysv*)
- targ_defvec=m68kcoffun_vec
- targ_underscore=yes
- ;;
m68*-motorola-sysv*)
targ_defvec=m68ksysvcoff_vec
;;
@@ -717,10 +747,6 @@ case "${targ}" in
targ_selvecs="cisco_core_big_vec ieee_vec"
targ_underscore=yes
;;
- m68*-*-rtemscoff*)
- targ_defvec=m68kcoff_vec
- targ_selvecs="m68kcoff_vec versados_vec ieee_vec aout0_big_vec"
- ;;
m68*-*-elf* | m68*-*-sysv4* | m68*-*-uclinux*)
targ_defvec=bfd_elf32_m68k_vec
targ_selvecs="m68kcoff_vec ieee_vec"
@@ -784,9 +810,6 @@ case "${targ}" in
targ_defvec=bfd_elf32_m68k_vec
targ_selvecs=m68kcoff_vec
;;
- m68*-apple-aux*)
- targ_defvec=m68kaux_coff_vec
- ;;
m68*-*-psos*)
targ_defvec=bfd_elf32_m68k_vec
targ_selvecs=ieee_vec
@@ -823,6 +846,11 @@ case "${targ}" in
targ_selvecs="mcore_pe_big_vec mcore_pe_little_vec mcore_pei_big_vec mcore_pei_little_vec"
;;
+ mep-*-elf)
+ targ_defvec=bfd_elf32_mep_vec
+ targ_selvecs=bfd_elf32_mep_little_vec
+ ;;
+
mips*-big-*)
targ_defvec=ecoff_big_vec
targ_selvecs=ecoff_little_vec
@@ -847,6 +875,7 @@ case "${targ}" in
mips*-*-irix6*)
targ_defvec=bfd_elf32_nbigmips_vec
targ_selvecs="bfd_elf32_nlittlemips_vec bfd_elf32_bigmips_vec bfd_elf32_littlemips_vec bfd_elf64_bigmips_vec bfd_elf64_littlemips_vec"
+ want64=true
;;
#endif
mips*-*-irix5*)
@@ -873,12 +902,24 @@ case "${targ}" in
mips*el-*-vxworks*)
targ_defvec=bfd_elf32_littlemips_vxworks_vec
targ_selvecs="bfd_elf32_littlemips_vec bfd_elf32_bigmips_vxworks_vec bfd_elf32_bigmips_vec bfd_elf64_bigmips_vec bfd_elf64_littlemips_vec"
+ want64=true
;;
mips*-*-vxworks*)
targ_defvec=bfd_elf32_bigmips_vxworks_vec
targ_selvecs="bfd_elf32_bigmips_vec bfd_elf32_littlemips_vxworks_vec bfd_elf32_bigmips_vec bfd_elf64_bigmips_vec bfd_elf64_littlemips_vec"
+ want64=true
;;
#endif
+ mips*el-sde-elf*)
+ targ_defvec=bfd_elf32_tradlittlemips_vec
+ targ_selvecs="bfd_elf32_tradbigmips_vec bfd_elf32_ntradbigmips_vec bfd_elf32_ntradlittlemips_vec bfd_elf64_tradbigmips_vec bfd_elf64_tradlittlemips_vec"
+ want64=true
+ ;;
+ mips*-sde-elf*)
+ targ_defvec=bfd_elf32_tradbigmips_vec
+ targ_selvecs="bfd_elf32_tradlittlemips_vec bfd_elf32_ntradbigmips_vec bfd_elf32_ntradlittlemips_vec bfd_elf64_tradbigmips_vec bfd_elf64_tradlittlemips_vec"
+ want64=true
+ ;;
mips*el-*-elf* | mips*el-*-vxworks* | mips*-*-chorus*)
targ_defvec=bfd_elf32_littlemips_vec
targ_selvecs="bfd_elf32_bigmips_vec bfd_elf64_bigmips_vec bfd_elf64_littlemips_vec"
@@ -895,6 +936,7 @@ case "${targ}" in
mips64*-*-openbsd*)
targ_defvec=bfd_elf64_tradbigmips_vec
targ_selvecs="bfd_elf32_ntradlittlemips_vec bfd_elf32_ntradbigmips_vec bfd_elf32_tradlittlemips_vec bfd_elf32_tradbigmips_vec bfd_elf64_tradlittlemips_vec"
+ want64=true
;;
#endif
mips*el-*-openbsd*)
@@ -909,10 +951,12 @@ case "${targ}" in
mips64*el-*-linux*)
targ_defvec=bfd_elf32_ntradlittlemips_vec
targ_selvecs="bfd_elf32_ntradbigmips_vec bfd_elf32_tradlittlemips_vec bfd_elf32_tradbigmips_vec bfd_elf64_tradlittlemips_vec bfd_elf64_tradbigmips_vec"
+ want64=true
;;
mips64*-*-linux*)
targ_defvec=bfd_elf32_ntradbigmips_vec
targ_selvecs="bfd_elf32_ntradlittlemips_vec bfd_elf32_tradbigmips_vec bfd_elf32_tradlittlemips_vec bfd_elf64_tradbigmips_vec bfd_elf64_tradlittlemips_vec"
+ want64=true
;;
#endif
mips*el-*-linux*)
@@ -929,6 +973,7 @@ case "${targ}" in
mmix-*-*)
targ_defvec=bfd_elf64_mmix_vec
targ_selvecs=bfd_mmo_vec
+ want64=true
;;
#endif
mn10200-*-*)
@@ -961,7 +1006,7 @@ case "${targ}" in
targ_defvec=bfd_elf32_openrisc_vec
;;
- or32-*-coff | or32-*-rtems* )
+ or32-*-coff)
targ_defvec=or32coff_big_vec
targ_underscore=yes
;;
@@ -1026,15 +1071,18 @@ case "${targ}" in
powerpc64-*-aix*)
targ_defvec=rs6000coff64_vec
targ_selvecs=rs6000coff_vec
+ want64=true
;;
powerpc64-*-elf* | powerpc-*-elf64* | powerpc64-*-linux* | \
powerpc64-*-*bsd*)
targ_defvec=bfd_elf64_powerpc_vec
targ_selvecs="bfd_elf64_powerpcle_vec bfd_elf32_powerpc_vec bfd_elf32_powerpcle_vec rs6000coff_vec rs6000coff64_vec"
+ want64=true
;;
powerpc64le-*-elf* | powerpcle-*-elf64*)
targ_defvec=bfd_elf64_powerpcle_vec
targ_selvecs="bfd_elf64_powerpc_vec bfd_elf32_powerpcle_vec bfd_elf32_powerpc_vec rs6000coff_vec rs6000coff64_vec"
+ want64=true
;;
#endif
powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
@@ -1099,40 +1147,49 @@ case "${targ}" in
s390x-*-linux*)
targ_defvec=bfd_elf64_s390_vec
targ_selvecs=bfd_elf32_s390_vec
+ want64=true
;;
s390x-*-tpf*)
targ_defvec=bfd_elf64_s390_vec
+ want64=true
;;
#endif
+ score*-*-elf*)
+ targ_defvec=bfd_elf32_bigscore_vec
+ targ_selvecs=bfd_elf32_littlescore_vec
+ ;;
+
#ifdef BFD64
sh64l*-*-elf*)
targ_defvec=bfd_elf32_sh64l_vec
targ_selvecs="bfd_elf32_sh64_vec bfd_elf64_sh64l_vec bfd_elf64_sh64_vec bfd_elf32_shl_vec bfd_elf32_sh_vec"
targ_underscore=yes
+ want64=true
;;
sh64-*-elf*)
targ_defvec=bfd_elf32_sh64_vec
targ_selvecs="bfd_elf32_sh64l_vec bfd_elf64_sh64_vec bfd_elf64_sh64l_vec bfd_elf32_sh_vec bfd_elf32_shl_vec"
targ_underscore=yes
+ want64=true
;;
sh64eb-*-linux*)
targ_defvec=bfd_elf32_sh64blin_vec
targ_selvecs="bfd_elf32_sh64lin_vec bfd_elf64_sh64blin_vec bfd_elf64_sh64lin_vec bfd_elf32_shblin_vec bfd_elf32_shlin_vec"
+ want64=true
;;
sh64-*-linux*)
targ_defvec=bfd_elf32_sh64lin_vec
targ_selvecs="bfd_elf32_sh64blin_vec bfd_elf64_sh64lin_vec bfd_elf64_sh64blin_vec bfd_elf32_shlin_vec bfd_elf32_shblin_vec"
+ want64=true
;;
-#endif /* BFD64 */
-
sh-*-linux*)
targ_defvec=bfd_elf32_shblin_vec
- targ_selvecs=bfd_elf32_shlin_vec
-#ifdef BFD64
- targ_selvecs="${targ_selvecs} bfd_elf32_sh64lin_vec bfd_elf32_sh64blin_vec bfd_elf64_sh64lin_vec bfd_elf64_sh64blin_vec"
-#endif
+ targ_selvecs="bfd_elf32_shlin_vec bfd_elf32_sh64lin_vec bfd_elf32_sh64blin_vec bfd_elf64_sh64lin_vec bfd_elf64_sh64blin_vec"
+ want64=true
;;
+#endif /* BFD64 */
+
sh*eb-*-linux*)
targ_defvec=bfd_elf32_shblin_vec
targ_selvecs=bfd_elf32_shlin_vec
@@ -1142,40 +1199,49 @@ case "${targ}" in
targ_selvecs=bfd_elf32_shblin_vec
;;
+ sh-*-uclinux* | sh[12]-*-uclinux*)
+ targ_defvec=bfd_elf32_sh_vec
+ targ_selvecs="bfd_elf32_shblin_vec bfd_elf32_shlin_vec"
+#ifdef BFD64
+ targ_selvecs="${targ_selvecs} bfd_elf32_sh64lin_vec bfd_elf32_sh64blin_vec bfd_elf64_sh64lin_vec bfd_elf64_sh64blin_vec"
+#endif
+ ;;
+
#ifdef BFD64
sh5le-*-netbsd*)
targ_defvec=bfd_elf32_sh64lnbsd_vec
targ_selvecs="bfd_elf32_sh64nbsd_vec bfd_elf64_sh64lnbsd_vec bfd_elf64_sh64nbsd_vec bfd_elf32_shnbsd_vec bfd_elf32_shlnbsd_vec"
+ want64=true
;;
sh5-*-netbsd*)
targ_defvec=bfd_elf32_sh64nbsd_vec
targ_selvecs="bfd_elf32_sh64lnbsd_vec bfd_elf64_sh64lnbsd_vec bfd_elf64_sh64nbsd_vec bfd_elf32_shnbsd_vec bfd_elf32_shlnbsd_vec"
+ want64=true
;;
sh64le-*-netbsd*)
targ_defvec=bfd_elf64_sh64lnbsd_vec
targ_selvecs="bfd_elf64_sh64nbsd_vec bfd_elf32_sh64lnbsd_vec bfd_elf32_sh64nbsd_vec bfd_elf32_shnbsd_vec bfd_elf32_shlnbsd_vec"
+ want64=true
;;
sh64-*-netbsd*)
targ_defvec=bfd_elf64_sh64nbsd_vec
targ_selvecs="bfd_elf64_sh64lnbsd_vec bfd_elf32_sh64lnbsd_vec bfd_elf32_sh64nbsd_vec bfd_elf32_shnbsd_vec bfd_elf32_shlnbsd_vec"
+ want64=true
;;
-#endif
sh*l*-*-netbsdelf*)
targ_defvec=bfd_elf32_shlnbsd_vec
- targ_selvecs="bfd_elf32_shnbsd_vec shcoff_vec shlcoff_vec"
-#ifdef BFD64
- targ_selvecs="${targ_selvecs} bfd_elf32_sh64lnbsd_vec bfd_elf32_sh64nbsd_vec bfd_elf64_sh64lnbsd_vec bfd_elf64_sh64nbsd_vec"
-#endif
+ targ_selvecs="bfd_elf32_shnbsd_vec shcoff_vec shlcoff_vec bfd_elf32_sh64lnbsd_vec bfd_elf32_sh64nbsd_vec bfd_elf64_sh64lnbsd_vec bfd_elf64_sh64nbsd_vec"
+ want64=true
;;
sh-*-netbsdelf*)
targ_defvec=bfd_elf32_shnbsd_vec
- targ_selvecs="bfd_elf32_shlnbsd_vec shcoff_vec shlcoff_vec"
-#ifdef BFD64
- targ_selvecs="${targ_selvecs} bfd_elf32_sh64lnbsd_vec bfd_elf32_sh64nbsd_vec bfd_elf64_sh64lnbsd_vec bfd_elf64_sh64nbsd_vec"
-#endif
+ targ_selvecs="bfd_elf32_shlnbsd_vec shcoff_vec shlcoff_vec bfd_elf32_sh64lnbsd_vec bfd_elf32_sh64nbsd_vec bfd_elf64_sh64lnbsd_vec bfd_elf64_sh64nbsd_vec"
+ want64=true
;;
+#endif
+
sh*-*-netbsdelf*)
targ_defvec=bfd_elf32_shnbsd_vec
targ_selvecs="bfd_elf32_shlnbsd_vec shcoff_vec shlcoff_vec"
@@ -1185,40 +1251,48 @@ case "${targ}" in
targ_selvecs="shlcoff_vec shlcoff_small_vec"
targ_underscore=yes
;;
+
+#ifdef BFD64
shl*-*-elf* | sh[1234]l*-*-elf* | sh3el*-*-elf* | shl*-*-kaos*)
targ_defvec=bfd_elf32_shl_vec
- targ_selvecs="bfd_elf32_sh_vec shlcoff_vec shcoff_vec shlcoff_small_vec shcoff_small_vec"
-#ifdef BFD64
- targ_selvecs="${targ_selvecs} bfd_elf32_sh64_vec bfd_elf32_sh64l_vec bfd_elf64_sh64_vec bfd_elf64_sh64l_vec"
-#endif
+ targ_selvecs="bfd_elf32_sh_vec shlcoff_vec shcoff_vec shlcoff_small_vec shcoff_small_vec bfd_elf32_sh64_vec bfd_elf32_sh64l_vec bfd_elf64_sh64_vec bfd_elf64_sh64l_vec"
targ_underscore=yes
+ want64=true
;;
+#endif
+
sh-*-rtemscoff*)
targ_defvec=shcoff_vec
targ_selvecs="shcoff_vec shlcoff_vec shcoff_small_vec shlcoff_small_vec"
targ_underscore=yes
;;
+
+#ifdef BFD64
sh-*-elf* | sh[1234]*-elf* | sh-*-rtems* | sh-*-kaos*)
targ_defvec=bfd_elf32_sh_vec
- targ_selvecs="bfd_elf32_shl_vec shcoff_vec shlcoff_vec shcoff_small_vec shlcoff_small_vec"
-#ifdef BFD64
- targ_selvecs="${targ_selvecs} bfd_elf32_sh64_vec bfd_elf32_sh64l_vec bfd_elf64_sh64_vec bfd_elf64_sh64l_vec"
-#endif
+ targ_selvecs="bfd_elf32_shl_vec shcoff_vec shlcoff_vec shcoff_small_vec shlcoff_small_vec bfd_elf32_sh64_vec bfd_elf32_sh64l_vec bfd_elf64_sh64_vec bfd_elf64_sh64l_vec"
targ_underscore=yes
+ want64=true
;;
+#endif
+
sh-*-nto*)
targ_defvec=bfd_elf32_sh_vec
targ_selvecs="bfd_elf32_shl_vec shcoff_vec shlcoff_vec shcoff_small_vec shlcoff_small_vec"
targ_underscore=yes
;;
+ sh*-*-openbsd*)
+ targ_defvec=bfd_elf32_shlnbsd_vec
+ targ_selvecs="bfd_elf32_shnbsd_vec shcoff_vec shlcoff_vec"
+ ;;
sh-*-pe)
targ_defvec=shlpe_vec
targ_selvecs="shlpe_vec shlpei_vec"
targ_underscore=yes
;;
sh-*-vxworks)
- targ_defvec=bfd_elf32_sh_vec
- targ_selvecs="bfd_elf32_shl_vec"
+ targ_defvec=bfd_elf32_shvxworks_vec
+ targ_selvecs="bfd_elf32_shlvxworks_vec"
# FIXME None of the following are actually used on this target, but
# they're necessary for coff-sh.c (which is unconditionally used) to be
# compiled correctly.
@@ -1279,6 +1353,7 @@ case "${targ}" in
sparc-*-solaris2* | sparcv9-*-solaris2* | sparc64-*-solaris2*)
targ_defvec=bfd_elf32_sparc_vec
targ_selvecs="bfd_elf64_sparc_vec sunos_big_vec"
+ want64=true
;;
#endif
sparc-*-sysv4*)
@@ -1296,14 +1371,17 @@ case "${targ}" in
sparc64-*-aout*)
targ_defvec=sunos_big_vec
targ_underscore=yes
+ want64=true
;;
sparc64-*-linux-*)
targ_defvec=bfd_elf64_sparc_vec
targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+ want64=true
;;
sparc64-*-elf*)
targ_defvec=bfd_elf64_sparc_vec
targ_selvecs=bfd_elf32_sparc_vec
+ want64=true
;;
#endif /* BFD64 */
sparc*-*-coff*)
@@ -1318,6 +1396,10 @@ case "${targ}" in
targ_underscore=yes
;;
+ spu-*-elf)
+ targ_defvec=bfd_elf32_spu_vec
+ ;;
+
#if HAVE_host_aout_vec
tahoe-*-*)
targ_defvec=host_aout_vec
diff --git a/bfd/config.in b/bfd/config.in
index 6c738257d982..aa91dd698881 100644
--- a/bfd/config.in
+++ b/bfd/config.in
@@ -1,29 +1,9 @@
/* 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 */
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
#undef ENABLE_NLS
-/* 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 `basename', and to 0 if you
don't. */
#undef HAVE_DECL_BASENAME
@@ -83,6 +63,9 @@
*/
#undef HAVE_DIRENT_H
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
/* Define to 1 if you have the `fcntl' function. */
#undef HAVE_FCNTL
@@ -107,33 +90,18 @@
/* Define to 1 if you have the `ftello64' function. */
#undef HAVE_FTELLO64
-/* Define to 1 if you have the `getcwd' function. */
-#undef HAVE_GETCWD
-
/* Define to 1 if you have the `getgid' function. */
#undef HAVE_GETGID
/* 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 `getuid' function. */
#undef HAVE_GETUID
/* 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 if <sys/procfs.h> has lwpstatus_t. */
#undef HAVE_LWPSTATUS_T
@@ -149,9 +117,6 @@
/* Define to 1 if you have the `madvise' function. */
#undef HAVE_MADVISE
-/* 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
@@ -161,15 +126,9 @@
/* Define to 1 if you have the `mprotect' function. */
#undef HAVE_MPROTECT
-/* 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 if <sys/procfs.h> has prpsinfo32_t. */
#undef HAVE_PRPSINFO32_T
@@ -200,21 +159,12 @@
/* Define if <sys/procfs.h> has pstatus_t. */
#undef HAVE_PSTATUS_T
-/* Define to 1 if you have the `putenv' function. */
-#undef HAVE_PUTENV
-
/* Define if <sys/procfs.h> has pxstatus_t. */
#undef HAVE_PXSTATUS_T
-/* Define to 1 if you have the `setenv' function. */
-#undef HAVE_SETENV
-
/* Define to 1 if you have the `setitimer' function. */
#undef HAVE_SETITIMER
-/* Define to 1 if you have the `setlocale' function. */
-#undef HAVE_SETLOCALE
-
/* Define to 1 if you have the <stddef.h> header file. */
#undef HAVE_STDDEF_H
@@ -224,15 +174,6 @@
/* 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
@@ -259,9 +200,6 @@
*/
#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/procfs.h> header file. */
#undef HAVE_SYS_PROCFS_H
@@ -280,20 +218,12 @@
/* 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 if <sys/procfs.h> has win32_pstatus_t. */
#undef HAVE_WIN32_PSTATUS_T
-/* 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
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#undef LT_OBJDIR
/* Name of package */
#undef PACKAGE
@@ -313,6 +243,12 @@
/* Define to the version of this package. */
#undef PACKAGE_VERSION
+/* The size of a `char', as computed by sizeof. */
+#undef SIZEOF_CHAR
+
+/* The size of a `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
/* The size of a `long', as computed by sizeof. */
#undef SIZEOF_LONG
@@ -322,13 +258,11 @@
/* The size of a `off_t', as computed by sizeof. */
#undef SIZEOF_OFF_T
-/* 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
+/* The size of a `short', as computed by sizeof. */
+#undef SIZEOF_SHORT
+
+/* The size of a `void *', as computed by sizeof. */
+#undef SIZEOF_VOID_P
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
@@ -358,18 +292,3 @@
#ifndef _GNU_SOURCE
# undef _GNU_SOURCE
#endif
-
-/* 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/bfd/configure b/bfd/configure
index af6c22b5a669..3cff895158fc 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -241,6 +241,155 @@ IFS=" $as_nl"
$as_unset CDPATH
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+ ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<_LT_EOF
+$*
+_LT_EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+ if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+ then
+ break
+ fi
+ done
+ fi
+
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+ else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$ECHO" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ ECHO='print -r'
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+ else
+ # Try using printf.
+ ECHO='printf %s\n'
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "$0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ ECHO=echo
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
# Name of the host.
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
# so uname gets run too.
@@ -309,7 +458,7 @@ ac_includes_default="\
# 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 AR ac_ct_AR RANLIB ac_ct_RANLIB LN_S LIBTOOL WARN_CFLAGS NO_WERROR MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT INSTALL_LIBBFD_TRUE INSTALL_LIBBFD_FALSE host_noncanonical target_noncanonical bfdlibdir bfdincludedir 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 HDEFINES BFD_HOST_64BIT_LONG BFD_HOST_LONG_LONG BFD_HOST_64_BIT_DEFINED BFD_HOST_64_BIT BFD_HOST_U_64_BIT CC_FOR_BUILD EXEEXT_FOR_BUILD COREFILE COREFLAG WIN32LDFLAGS WIN32LIBADD TDEFINES wordsize bfd_libs all_backends bfd_backends bfd_machines bfd_default_target_size bfd_file_ptr bfd_ufile_ptr tdefaults datarootdir docdir htmldir LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir 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 AR ac_ct_AR RANLIB ac_ct_RANLIB LIBTOOL SED EGREP FGREP GREP LD DUMPBIN ac_ct_DUMPBIN NM LN_S lt_ECHO CPP DEBUGDIR PKGVERSION REPORT_BUGS_TO REPORT_BUGS_TEXI WARN_CFLAGS NO_WERROR MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT GENINSRC_NEVER_TRUE GENINSRC_NEVER_FALSE INSTALL_LIBBFD_TRUE INSTALL_LIBBFD_FALSE host_noncanonical target_noncanonical bfdlibdir bfdincludedir USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT MKINSTALLDIRS MSGFMT MSGMERGE HDEFINES BFD_HOST_64BIT_LONG BFD_HOST_LONG_LONG BFD_HOST_64_BIT_DEFINED BFD_HOST_64_BIT BFD_HOST_U_64_BIT CC_FOR_BUILD EXEEXT_FOR_BUILD COREFILE COREFLAG WIN32LDFLAGS WIN32LIBADD TDEFINES wordsize bfd64_libs all_backends bfd_backends bfd_machines bfd_default_target_size bfd_file_ptr bfd_ufile_ptr tdefaults datarootdir docdir htmldir LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -852,16 +1001,19 @@ Optional Features:
--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=no
- --enable-static=PKGS build static libraries default=yes
- --enable-fast-install=PKGS optimize for fast installation default=yes
+ --enable-shared[=PKGS]
+ build shared libraries [default=no]
+ --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-64-bit-bfd 64-bit support (on hosts with narrower word sizes)
--enable-targets alternative target configurations
--enable-commonbfdlib build shared BFD/opcodes/libiberty library
--enable-secureplt Default to creating read-only plt entries
- --enable-werror treat compile warnings as errors
- --enable-build-warnings Enable build-time compiler warnings
+ --enable-werror treat compile warnings as errors
+ --enable-build-warnings enable build-time compiler warnings
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
--enable-install-libbfd controls installation of libbfd and related headers
@@ -870,10 +1022,16 @@ Optional Features:
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-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
--with-mmap try using mmap for BFD input files if available
- --with-included-gettext use the GNU gettext library included here
+ --with-separate-debug-dir=DIR
+ Look for global separate debug info in DIR
+ [default=LIBDIR/debug]
+ --with-pkgversion=PKG Use PKG in the version string in place of "GNU
+ Binutils"
+ --with-bugurl=URL Direct users to URL to report a bug
Some influential environment variables:
CC C compiler command
@@ -2836,7 +2994,7 @@ fi
# Define the identity of the package.
PACKAGE=bfd
- VERSION=2.17
+ VERSION=2.17.50
cat >>confdefs.h <<_ACEOF
@@ -3240,1303 +3398,34 @@ fi
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=no
-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 4035 "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"
- ;;
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
*)
- # `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"
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
;;
- esac;
-} |
- 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 --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 --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-commonbfdlib or --disable-commonbfdlib was given.
-if test "${enable_commonbfdlib+set}" = set; then
- enableval="$enable_commonbfdlib"
- case "${enableval}" in
- yes) commonbfdlib=true ;;
- no) commonbfdlib=false ;;
- *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for BFD commonbfdlib option" >&5
-echo "$as_me: error: bad value ${enableval} for BFD commonbfdlib option" >&2;}
- { (exit 1); exit 1; }; } ;;
-esac
-fi;
-# Check whether --with-mmap or --without-mmap was given.
-if test "${with_mmap+set}" = set; then
- withval="$with_mmap"
- case "${withval}" in
- yes) want_mmap=true ;;
- no) want_mmap=false ;;
- *) { { echo "$as_me:$LINENO: error: bad value ${withval} for BFD with-mmap option" >&5
-echo "$as_me: error: bad value ${withval} for BFD with-mmap option" >&2;}
- { (exit 1); exit 1; }; } ;;
-esac
-else
- want_mmap=false
-fi;
-# Check whether --enable-secureplt or --disable-secureplt was given.
-if test "${enable_secureplt+set}" = set; then
- enableval="$enable_secureplt"
- case "${enableval}" in
- yes) use_secureplt=true ;;
- no) use_secureplt=false ;;
- *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for secureplt option" >&5
-echo "$as_me: error: bad value ${enableval} for secureplt option" >&2;}
- { (exit 1); exit 1; }; } ;;
-esac
-else
- use_secureplt=false
-fi; if test $use_secureplt = true; then
-
-cat >>confdefs.h <<\_ACEOF
-#define USE_SECUREPLT 1
-_ACEOF
-
-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
-
-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
-
-
- case ${build_alias} in
- "") build_noncanonical=${build} ;;
- *) build_noncanonical=${build_alias} ;;
-esac
-
- case ${host_alias} in
- "") host_noncanonical=${build_noncanonical} ;;
- *) host_noncanonical=${host_alias} ;;
-esac
-
- case ${target_alias} in
- "") target_noncanonical=${host_noncanonical} ;;
- *) target_noncanonical=${target_alias} ;;
-esac
-
-echo "$as_me:$LINENO: checking whether to install libbfd" >&5
-echo $ECHO_N "checking whether to install libbfd... $ECHO_C" >&6
- # Check whether --enable-install-libbfd or --disable-install-libbfd was given.
-if test "${enable_install_libbfd+set}" = set; then
- enableval="$enable_install_libbfd"
- install_libbfd_p=$enableval
-else
- if test "${host}" = "${target}" || test "$enable_shared" = "yes"; then
- install_libbfd_p=yes
- else
- install_libbfd_p=no
- fi
+ enable_shared=no
fi;
- echo "$as_me:$LINENO: result: $install_libbfd_p" >&5
-echo "${ECHO_T}$install_libbfd_p" >&6
-if test $install_libbfd_p = yes; then
- INSTALL_LIBBFD_TRUE=
- INSTALL_LIBBFD_FALSE='#'
-else
- INSTALL_LIBBFD_TRUE='#'
- INSTALL_LIBBFD_FALSE=
-fi
- # Need _noncanonical variables for this.
- # libbfd.a is a host library containing target dependent code
- bfdlibdir='$(libdir)'
- bfdincludedir='$(includedir)'
- if test "${host}" != "${target}"; then
- bfdlibdir='$(exec_prefix)/$(host_noncanonical)/$(target_noncanonical)/lib'
- bfdincludedir='$(exec_prefix)/$(host_noncanonical)/$(target_noncanonical)/include'
- fi
-
-
-
-
-host64=false
-target64=false
-bfd_default_target_size=32
-
-# host stuff:
-
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -5273,7 +4162,1149 @@ _ACEOF
-ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi"
+
+
+macro_version='2.1a'
+macro_revision='1.2435'
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Set options
+
+enable_dlopen=no
+
+
+enable_win32_dll=no
+
+
+
+# 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.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_static=yes
+fi;
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+ withval="$with_pic"
+ pic_mode="$withval"
+else
+ pic_mode=default
+fi;
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+# Check whether --enable-fast-install 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.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_fast_install=yes
+fi;
+
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
+if test "${lt_cv_path_SED+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+
+fi
+
+SED=$lt_cv_path_SED
+
+echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+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 fgrep" >&5
+echo $ECHO_N "checking for fgrep... $ECHO_C" >&6
+if test "${ac_cv_prog_fgrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo 'ab*c' | (grep -F 'ab*c') >/dev/null 2>&1
+ then ac_cv_prog_fgrep='grep -F'
+ else ac_cv_prog_fgrep='fgrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_fgrep" >&5
+echo "${ECHO_T}$ac_cv_prog_fgrep" >&6
+ FGREP=$ac_cv_prog_fgrep
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# 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 $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $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.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ 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
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ 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 lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+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 BSD- or MS-compatible name lister (nm)" >&5
+echo $ECHO_N "checking for BSD- or MS-compatible name lister (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
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+ 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_DUMPBIN+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DUMPBIN="$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
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+echo "${ECHO_T}$DUMPBIN" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+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_DUMPBIN+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
+echo "${ECHO_T}$ac_ct_DUMPBIN" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+test -n "$ac_ct_DUMPBIN" || ac_ct_DUMPBIN=":"
+
+ DUMPBIN=$ac_ct_DUMPBIN
+fi
+
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+echo $ECHO_N "checking the name lister ($NM) interface... $ECHO_C" >&6
+if test "${lt_cv_nm_interface+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:4668: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:4671: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:4674: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
+echo "${ECHO_T}$lt_cv_nm_interface" >&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
+
+# 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
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # 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 all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`getconf ARG_MAX 2> /dev/null`
+ if test -n $lt_cv_sys_max_cmd_len; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ 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
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+echo $ECHO_N "checking whether the shell understands some XSI constructs... $ECHO_C" >&6
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+echo "$as_me:$LINENO: result: $xsi_shell" >&5
+echo "${ECHO_T}$xsi_shell" >&6
+
+
+echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+echo $ECHO_N "checking whether the shell understands \"+=\"... $ECHO_C" >&6
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+echo "$as_me:$LINENO: result: $lt_shell_append" >&5
+echo "${ECHO_T}$lt_shell_append" >&6
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+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
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+echo $ECHO_N "checking how to recognize dependent 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 extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+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
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+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_AR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="ar"
+ 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_AR" && ac_cv_prog_ac_ct_AR="false"
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ AR=$ac_ct_AR
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+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
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
@@ -5354,6 +5385,533 @@ else
RANLIB="$ac_cv_prog_RANLIB"
fi
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
+else
+ echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# 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 && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$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.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line 5729 "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*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$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-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ 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
+ ;;
+sparc*-*solaris*)
+ # 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
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *) LD="${LD-ld} -64" ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -5589,21 +6147,6 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
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
@@ -5770,132 +6313,34 @@ _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. */
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
-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
+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
- 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
+$ac_includes_default
+#include <$ac_header>
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
@@ -5919,47 +6364,29 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_c_inline=$ac_kw; break
+ 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
-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
+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
- ;;
-esac
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
+fi
+done
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
+for ac_header in dlfcn.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -6020,156 +6447,1357 @@ 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
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+if test "${lt_cv_objdir+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;
-}
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
_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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ 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
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
-ac_cv_type_off_t=no
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+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
-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
- :
+
+
+
+
+
+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_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
-cat >>confdefs.h <<_ACEOF
-#define off_t long
-_ACEOF
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
fi
-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
+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
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+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
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6829: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:6833: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ :
+fi
-ac_cv_type_size_t=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ fi
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ lt_prog_compiler_pic='-qnocommon'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:7151: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:7155: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
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
- :
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
+
+if test x"$lt_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned
-_ACEOF
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
+if test "${lt_prog_compiler_static_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_static_works=yes
+ fi
+ else
+ lt_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM conftest*
+ LDFLAGS="$save_LDFLAGS"
fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
-# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
-# for constant arguments. Useless!
-echo "$as_me:$LINENO: checking for working alloca.h" >&5
-echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6
-if test "${ac_cv_working_alloca_h+set}" = set; then
+if test x"$lt_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:7256: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:7260: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:7311: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:7315: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ fi
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ ld_shlibs=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ *)
+ tmp_sharedflag='-shared' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >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;
}
@@ -6196,62 +7824,49 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_working_alloca_h=yes
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
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
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >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;
}
@@ -6278,125 +7893,277 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_func_alloca_works=yes
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
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 -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
-if test $ac_cv_func_alloca_works = yes; then
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ fi
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_ALLOCA 1
-_ACEOF
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
-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.
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
-ALLOCA=alloca.$ac_objext
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[012])
+ allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ ;;
+ esac
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ whole_archive_flag_spec=''
+ link_all_deplibs=yes
+ if test "$GCC" = yes ; then
+ if test "${lt_cv_apple_cc_single_mod+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi-module to the
+ # link flags.
+ echo "int foo(void){return 1;}" > conftest.c
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib ${wl}-single_module conftest.c
+ if test -f libconftest.dylib; then
+ lt_cv_apple_cc_single_mod=yes
+ rm libconftest.dylib
+ fi
+ rm conftest.$ac_ext
+ fi
+fi
-cat >>confdefs.h <<\_ACEOF
-#define C_ALLOCA 1
-_ACEOF
+ output_verbose_link_cmd=echo
+ if test "X$lt_cv_apple_cc_single_mod" = Xyes ; then
+ archive_cmds='$CC -dynamiclib $single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $single_module -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ module_expsym_cmds='sed -e "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd=echo
+ archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`$ECHO $rpath/$soname` $verstring'
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ module_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
-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
+ freebsd1*)
+ ld_shlibs=no
+ ;;
-_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*
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
-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
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
-/* 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. */
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
-#undef $ac_func
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
-/* 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
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat >conftest.$ac_ext <<_ACEOF
+int foo(void) {}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
@@ -6420,304 +8187,933 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
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
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
-cat >>confdefs.h <<_ACEOF
-#define CRAY_STACKSEG_END $ac_func
-_ACEOF
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
- break
-fi
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
- done
-fi
+ *nto* | *qnx*)
+ ;;
-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;
-}
+ openbsd*)
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
-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
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
-( 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
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
-cat >>confdefs.h <<_ACEOF
-#define STACK_DIRECTION $ac_cv_c_stack_direction
-_ACEOF
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
-fi
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
-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
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > 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); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ (exit $ac_status); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
ac_status=$?
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
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc=no
+ else
+ archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
-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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+withGCC=$GCC
+if test "$withGCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
else
- ac_cpp_err=
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
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
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
- 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
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
-# 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
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ if test "$host_cpu" = m68k; then
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ else
+ dynamic_linker=no
+ fi
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $withGCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
;;
- 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
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
;;
-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
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
-fi
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
-done
+freebsd1*)
+ dynamic_linker=no
+ ;;
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
-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
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
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;
}
@@ -6744,200 +9140,236 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir"; then
+ shlibpath_overrides_runpath=yes
+fi
+
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
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
-fi
-done
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
-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
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
-/* 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.
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
- 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) */
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
-#include <fcntl.h>
-#include <sys/mman.h>
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
-#if !STDC_HEADERS && !HAVE_STDLIB_H
-char *malloc ();
-#endif
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
-/* 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
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
-# 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 */
+rdos*)
+ dynamic_linker=no
+ ;;
-#endif /* no HAVE_GETPAGESIZE */
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
-int
-main ()
-{
- char *data, *data2, *data3;
- int i, pagesize;
- int fd;
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
- pagesize = getpagesize ();
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
- /* 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);
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
- /* 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);
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
- /* 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
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
-( 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
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MMAP 1
-_ACEOF
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
fi
-rm -f conftest.mmap
@@ -6949,155 +9381,13 @@ 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
@@ -7109,62 +9399,159 @@ 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 "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+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
-
+char dlopen ();
int
main ()
{
-return f != $ac_func;
+dlopen ();
;
return 0;
}
@@ -7191,35 +9578,35 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_lib_dl_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_lib_dl_dlopen=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: `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
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
-fi
-done
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+fi
- 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 "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -7228,12 +9615,12 @@ _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.
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
+#define shl_load innocuous_shl_load
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
+ which can conflict with char shl_load (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
@@ -7243,7 +9630,7 @@ cat >>conftest.$ac_ext <<_ACEOF
# include <assert.h>
#endif
-#undef $ac_func
+#undef shl_load
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
@@ -7252,14 +9639,14 @@ 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 ();
+char shl_load ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
choke me
#else
-char (*f) () = $ac_func;
+char (*f) () = shl_load;
#endif
#ifdef __cplusplus
}
@@ -7268,7 +9655,7 @@ char (*f) () = $ac_func;
int
main ()
{
-return f != $ac_func;
+return f != shl_load;
;
return 0;
}
@@ -7295,52 +9682,46 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_func_shl_load=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_func_shl_load=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 "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
+else
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+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>
+
+/* 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 shl_load ();
int
main ()
{
-return LC_MESSAGES
+shl_load ();
;
return 0;
}
@@ -7367,85 +9748,81 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- am_cv_val_LC_MESSAGES=yes
+ ac_cv_lib_dld_shl_load=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-am_cv_val_LC_MESSAGES=no
+ac_cv_lib_dld_shl_load=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: $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
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
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 "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+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
+ 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>
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen (); 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 dlopen
+
+/* 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 dlopen ();
+/* 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_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+ ;
+ return 0;
+}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (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
@@ -7459,123 +9836,52 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_header_compiler=yes
+ ac_cv_func_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ac_cv_func_dlopen=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
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
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 "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+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>
+
+/* 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 dlopen ();
int
main ()
{
-return (int) gettext ("")
+dlopen ();
;
return 0;
}
@@ -7602,27 +9908,29 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- gt_cv_func_gettext_libc=yes
+ ac_cv_lib_dl_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-gt_cv_func_gettext_libc=no
+ac_cv_lib_dl_dlopen=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: $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 "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lintl $LIBS"
+LIBS="-lsvld $LIBS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -7636,11 +9944,11 @@ 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 ();
+char dlopen ();
int
main ()
{
-bindtextdomain ();
+dlopen ();
;
return 0;
}
@@ -7667,36 +9975,47 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_lib_intl_bindtextdomain=yes
+ ac_cv_lib_svld_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_intl_bindtextdomain=no
+ac_cv_lib_svld_dlopen=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 "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $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 dld_link ();
int
main ()
{
-return (int) gettext ("")
+dld_link ();
;
return 0;
}
@@ -7723,311 +10042,822 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- gt_cv_func_gettext_libintl=yes
+ ac_cv_lib_dld_dld_link=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-gt_cv_func_gettext_libintl=no
+ac_cv_lib_dld_dld_link=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: $gt_cv_func_gettext_libintl" >&5
-echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
fi
- fi
- if test "$gt_cv_func_gettext_libc" = "yes" \
- || test "$gt_cv_func_gettext_libintl" = "yes"; then
+fi
-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
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+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
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 10108 "configure"
+#include "confdefs.h"
-/* 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. */
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
-#ifdef __STDC__
-# include <limits.h>
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
#else
-# include <assert.h>
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
#endif
-#undef $ac_func
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
-/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
-extern "C"
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}
+_LT_EOF
+ 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); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 10208 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
#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
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
#else
-char (*f) () = $ac_func;
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
#ifdef __cplusplus
-}
+extern "C" void exit (int);
#endif
-int
-main ()
+void fnord() { int i=42;}
+int main ()
{
-return f != $ac_func;
- ;
- return 0;
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
}
-_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
+_LT_EOF
+ 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
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
-eval "$as_ac_var=no"
fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
fi
-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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+ echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+# 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 --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-commonbfdlib or --disable-commonbfdlib was given.
+if test "${enable_commonbfdlib+set}" = set; then
+ enableval="$enable_commonbfdlib"
+ case "${enableval}" in
+ yes) commonbfdlib=true ;;
+ no) commonbfdlib=false ;;
+ *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for BFD commonbfdlib option" >&5
+echo "$as_me: error: bad value ${enableval} for BFD commonbfdlib option" >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+fi;
+# Check whether --with-mmap or --without-mmap was given.
+if test "${with_mmap+set}" = set; then
+ withval="$with_mmap"
+ case "${withval}" in
+ yes) want_mmap=true ;;
+ no) want_mmap=false ;;
+ *) { { echo "$as_me:$LINENO: error: bad value ${withval} for BFD with-mmap option" >&5
+echo "$as_me: error: bad value ${withval} for BFD with-mmap option" >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ want_mmap=false
+fi;
+# Check whether --enable-secureplt or --disable-secureplt was given.
+if test "${enable_secureplt+set}" = set; then
+ enableval="$enable_secureplt"
+ case "${enableval}" in
+ yes) use_secureplt=true ;;
+ no) use_secureplt=false ;;
+ *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for secureplt option" >&5
+echo "$as_me: error: bad value ${enableval} for secureplt option" >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ use_secureplt=false
+fi; if test $use_secureplt = true; then
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_SECUREPLT 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
+DEBUGDIR=${libdir}/debug
+
+
+# Check whether --with-separate-debug-dir or --without-separate-debug-dir was given.
+if test "${with_separate_debug_dir+set}" = set; then
+ withval="$with_separate_debug_dir"
+ DEBUGDIR="${withval}"
+fi;
+
+
+
+
+# Check whether --with-pkgversion or --without-pkgversion was given.
+if test "${with_pkgversion+set}" = set; then
+ withval="$with_pkgversion"
+ case "$withval" in
+ yes) { { echo "$as_me:$LINENO: error: package version not specified" >&5
+echo "$as_me: error: package version not specified" >&2;}
+ { (exit 1); exit 1; }; } ;;
+ no) PKGVERSION= ;;
+ *) PKGVERSION="($withval) " ;;
+ esac
else
- case $GMSGFMT in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
- ;;
+ PKGVERSION="(GNU Binutils) "
+
+fi;
+
+
+
+
+# Check whether --with-bugurl or --without-bugurl was given.
+if test "${with_bugurl+set}" = set; then
+ withval="$with_bugurl"
+ case "$withval" in
+ yes) { { echo "$as_me:$LINENO: error: bug URL not specified" >&5
+echo "$as_me: error: bug URL not specified" >&2;}
+ { (exit 1); exit 1; }; } ;;
+ no) BUGURL=
+ ;;
+ *) BUGURL="$withval"
+ ;;
+ esac
+else
+ BUGURL="http://www.sourceware.org/bugzilla/"
+
+fi;
+ case ${BUGURL} in
+ "")
+ REPORT_BUGS_TO=
+ REPORT_BUGS_TEXI=
+ ;;
*)
- 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
+ REPORT_BUGS_TO="<$BUGURL>"
+ REPORT_BUGS_TEXI=@uref{`echo "$BUGURL" | sed 's/@/@@/g'`}
+ ;;
+ esac;
- test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
- ;;
+
+
+
+
+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
-GMSGFMT=$ac_cv_path_GMSGFMT
-if test -n "$GMSGFMT"; then
- echo "$as_me:$LINENO: result: $GMSGFMT" >&5
-echo "${ECHO_T}$GMSGFMT" >&6
+
+
+
+
+ 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
+
+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
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ 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
- # 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
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+
+if false; then
+ GENINSRC_NEVER_TRUE=
+ GENINSRC_NEVER_FALSE='#'
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
+ GENINSRC_NEVER_TRUE='#'
+ GENINSRC_NEVER_FALSE=
fi
-XGETTEXT="$ac_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
- echo "$as_me:$LINENO: result: $XGETTEXT" >&5
-echo "${ECHO_T}$XGETTEXT" >&6
+
+ case ${build_alias} in
+ "") build_noncanonical=${build} ;;
+ *) build_noncanonical=${build_alias} ;;
+esac
+
+ case ${host_alias} in
+ "") host_noncanonical=${build_noncanonical} ;;
+ *) host_noncanonical=${host_alias} ;;
+esac
+
+ case ${target_alias} in
+ "") target_noncanonical=${host_noncanonical} ;;
+ *) target_noncanonical=${target_alias} ;;
+esac
+
+echo "$as_me:$LINENO: checking whether to install libbfd" >&5
+echo $ECHO_N "checking whether to install libbfd... $ECHO_C" >&6
+ # Check whether --enable-install-libbfd or --disable-install-libbfd was given.
+if test "${enable_install_libbfd+set}" = set; then
+ enableval="$enable_install_libbfd"
+ install_libbfd_p=$enableval
else
+ if test "${host}" = "${target}" || test "$enable_shared" = "yes"; then
+ install_libbfd_p=yes
+ else
+ install_libbfd_p=no
+ fi
+fi;
+ echo "$as_me:$LINENO: result: $install_libbfd_p" >&5
+echo "${ECHO_T}$install_libbfd_p" >&6
+
+
+if test $install_libbfd_p = yes; then
+ INSTALL_LIBBFD_TRUE=
+ INSTALL_LIBBFD_FALSE='#'
+else
+ INSTALL_LIBBFD_TRUE='#'
+ INSTALL_LIBBFD_FALSE=
+fi
+
+ # Need _noncanonical variables for this.
+
+
+
+
+ # libbfd.a is a host library containing target dependent code
+ bfdlibdir='$(libdir)'
+ bfdincludedir='$(includedir)'
+ if test "${host}" != "${target}"; then
+ bfdlibdir='$(exec_prefix)/$(host_noncanonical)/$(target_noncanonical)/lib'
+ bfdincludedir='$(exec_prefix)/$(host_noncanonical)/$(target_noncanonical)/include'
+ fi
+
+
+
+
+
+
+host64=false
+target64=false
+bfd_default_target_size=32
+
+# host stuff:
+
+ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi"
+# If we haven't got the data from the intl directory,
+# assume NLS is disabled.
+USE_NLS=no
+LIBINTL=
+LIBINTL_DEP=
+INCINTL=
+XGETTEXT=
+GMSGFMT=
+POSUB=
+
+if test -f ../intl/config.intl; then
+ . ../intl/config.intl
+fi
+echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
+if test x"$USE_NLS" != xyes; then
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
-fi
+else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
_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
+
+ echo "$as_me:$LINENO: checking for catalogs to be installed" >&5
+echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6
+ # Look for .po and .gmo files in the source directory.
+ CATALOGS=
+ XLINGUAS=
+ for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
+ # If there aren't any .gmo files the shell will give us the
+ # literal string "../path/to/srcdir/po/*.gmo" which has to be
+ # weeded out.
+ case "$cat" in *\**)
+ continue;;
+ esac
+ # The quadruple backslash is collapsed to a double backslash
+ # by the backticks, then collapsed again by the double quotes,
+ # leaving us with one backslash in the sed expression (right
+ # before the dot that mustn't act as a wildcard).
+ cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
+ lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
+ # The user is allowed to set LINGUAS to a list of languages to
+ # install catalogs for. If it's empty that means "all of them."
+ if test "x$LINGUAS" = x; then
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ else
+ case "$LINGUAS" in *$lang*)
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ ;;
+ esac
+ fi
+ done
+ LINGUAS="$XLINGUAS"
+ echo "$as_me:$LINENO: result: $LINGUAS" >&5
+echo "${ECHO_T}$LINGUAS" >&6
+
+
+ DATADIRNAME=share
+
+ INSTOBJEXT=.mo
+
+ GENCAT=gencat
+
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
+ MKINSTALLDIRS=
+ if test -n "$ac_aux_dir"; then
+ case "$ac_aux_dir" in
+ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+ esac
+ fi
+ if test -z "$MKINSTALLDIRS"; then
+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+ fi
+ 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
+
+
- 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.
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
@@ -8035,27 +10865,31 @@ 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.
- ;;
+ [\\/]* | ?:[\\/]*)
+ 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"
- ;;
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
esac
fi
MSGFMT="$ac_cv_path_MSGFMT"
-if test -n "$MSGFMT"; then
+if test "$MSGFMT" != ":"; then
echo "$as_me:$LINENO: result: $MSGFMT" >&5
echo "${ECHO_T}$MSGFMT" >&6
else
@@ -8063,7 +10897,7 @@ else
echo "${ECHO_T}no" >&6
fi
- # Extract the first word of "gmsgfmt", so it can be a program name with args.
+ # 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
@@ -8103,7 +10937,37 @@ else
echo "${ECHO_T}no" >&6
fi
- # Extract the first word of "xgettext", so it can be a program name with args.
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
@@ -8111,27 +10975,31 @@ 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.
- ;;
+ [\\/]* | ?:[\\/]*)
+ 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"
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
- ;;
+ ;;
esac
fi
XGETTEXT="$ac_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
+if test "$XGETTEXT" != ":"; then
echo "$as_me:$LINENO: result: $XGETTEXT" >&5
echo "${ECHO_T}$XGETTEXT" >&6
else
@@ -8139,282 +11007,103 @@ else
echo "${ECHO_T}no" >&6
fi
+ rm -f messages.po
- 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
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
else
- ac_cpp_err=
+ PATH_SEPARATOR=:
fi
-else
- ac_cpp_err=yes
+ rm -f conf$$.sh
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
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
+rm -f conf$$.file
-# 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
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; 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_MSGMERGE+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
;;
- 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
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
;;
esac
-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
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+echo "${ECHO_T}$MSGMERGE" >&6
else
- msgformat=xopen
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+ if test "$GMSGFMT" != ":"; then
+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+ echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6
+ GMSGFMT=":"
+ fi
+ 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"
+ if test "$XGETTEXT" != ":"; then
+ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
+echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
+ XGETTEXT=":"
+ fi
+ rm -f messages.po
+ fi
+ ac_config_commands="$ac_config_commands default-1"
- 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
# Permit host specific settings.
@@ -9760,6 +12449,2853 @@ fi
done
+
+
+inttype_headers=`echo inttypes.h sys/inttypes.h | sed -e 's/,/ /g'`
+
+acx_cv_header_stdint=stddef.h
+acx_cv_header_stdint_kind="(already complete)"
+for i in stdint.h $inttype_headers; do
+ unset ac_cv_type_uintptr_t
+ unset ac_cv_type_uintmax_t
+ unset ac_cv_type_int_least32_t
+ unset ac_cv_type_int_fast32_t
+ unset ac_cv_type_uint64_t
+ echo $ECHO_N "looking for a compliant stdint.h in $i, $ECHO_C" >&6
+ echo "$as_me:$LINENO: checking for uintmax_t" >&5
+echo $ECHO_N "checking for uintmax_t... $ECHO_C" >&6
+if test "${ac_cv_type_uintmax_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. */
+#include <sys/types.h>
+#include <$i>
+
+int
+main ()
+{
+if ((uintmax_t *) 0)
+ return 0;
+if (sizeof (uintmax_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_uintmax_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uintmax_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uintmax_t" >&5
+echo "${ECHO_T}$ac_cv_type_uintmax_t" >&6
+if test $ac_cv_type_uintmax_t = yes; then
+ acx_cv_header_stdint=$i
+else
+ continue
+fi
+
+ echo "$as_me:$LINENO: checking for uintptr_t" >&5
+echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6
+if test "${ac_cv_type_uintptr_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. */
+#include <sys/types.h>
+#include <$i>
+
+int
+main ()
+{
+if ((uintptr_t *) 0)
+ return 0;
+if (sizeof (uintptr_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_uintptr_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uintptr_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5
+echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6
+if test $ac_cv_type_uintptr_t = yes; then
+ :
+else
+ acx_cv_header_stdint_kind="(mostly complete)"
+fi
+
+ echo "$as_me:$LINENO: checking for int_least32_t" >&5
+echo $ECHO_N "checking for int_least32_t... $ECHO_C" >&6
+if test "${ac_cv_type_int_least32_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. */
+#include <sys/types.h>
+#include <$i>
+
+int
+main ()
+{
+if ((int_least32_t *) 0)
+ return 0;
+if (sizeof (int_least32_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_int_least32_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int_least32_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int_least32_t" >&5
+echo "${ECHO_T}$ac_cv_type_int_least32_t" >&6
+if test $ac_cv_type_int_least32_t = yes; then
+ :
+else
+ acx_cv_header_stdint_kind="(mostly complete)"
+fi
+
+ echo "$as_me:$LINENO: checking for int_fast32_t" >&5
+echo $ECHO_N "checking for int_fast32_t... $ECHO_C" >&6
+if test "${ac_cv_type_int_fast32_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. */
+#include <sys/types.h>
+#include <$i>
+
+int
+main ()
+{
+if ((int_fast32_t *) 0)
+ return 0;
+if (sizeof (int_fast32_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_int_fast32_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int_fast32_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int_fast32_t" >&5
+echo "${ECHO_T}$ac_cv_type_int_fast32_t" >&6
+if test $ac_cv_type_int_fast32_t = yes; then
+ :
+else
+ acx_cv_header_stdint_kind="(mostly complete)"
+fi
+
+ echo "$as_me:$LINENO: checking for uint64_t" >&5
+echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint64_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. */
+#include <sys/types.h>
+#include <$i>
+
+int
+main ()
+{
+if ((uint64_t *) 0)
+ return 0;
+if (sizeof (uint64_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_uint64_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint64_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint64_t" >&6
+if test $ac_cv_type_uint64_t = yes; then
+ :
+else
+ acx_cv_header_stdint_kind="(lacks uint64_t)"
+fi
+
+ break
+done
+if test "$acx_cv_header_stdint" = stddef.h; then
+ acx_cv_header_stdint_kind="(lacks uintmax_t)"
+ for i in stdint.h $inttype_headers; do
+ unset ac_cv_type_uintptr_t
+ unset ac_cv_type_uint32_t
+ unset ac_cv_type_uint64_t
+ echo $ECHO_N "looking for an incomplete stdint.h in $i, $ECHO_C" >&6
+ echo "$as_me:$LINENO: checking for uint32_t" >&5
+echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint32_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. */
+#include <sys/types.h>
+#include <$i>
+
+int
+main ()
+{
+if ((uint32_t *) 0)
+ return 0;
+if (sizeof (uint32_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_uint32_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint32_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint32_t" >&6
+if test $ac_cv_type_uint32_t = yes; then
+ acx_cv_header_stdint=$i
+else
+ continue
+fi
+
+ echo "$as_me:$LINENO: checking for uint64_t" >&5
+echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint64_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. */
+#include <sys/types.h>
+#include <$i>
+
+int
+main ()
+{
+if ((uint64_t *) 0)
+ return 0;
+if (sizeof (uint64_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_uint64_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint64_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint64_t" >&6
+
+ echo "$as_me:$LINENO: checking for uintptr_t" >&5
+echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6
+if test "${ac_cv_type_uintptr_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. */
+#include <sys/types.h>
+#include <$i>
+
+int
+main ()
+{
+if ((uintptr_t *) 0)
+ return 0;
+if (sizeof (uintptr_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_uintptr_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uintptr_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5
+echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6
+
+ break
+ done
+fi
+if test "$acx_cv_header_stdint" = stddef.h; then
+ acx_cv_header_stdint_kind="(u_intXX_t style)"
+ for i in sys/types.h $inttype_headers; do
+ unset ac_cv_type_u_int32_t
+ unset ac_cv_type_u_int64_t
+ echo $ECHO_N "looking for u_intXX_t types in $i, $ECHO_C" >&6
+ echo "$as_me:$LINENO: checking for u_int32_t" >&5
+echo $ECHO_N "checking for u_int32_t... $ECHO_C" >&6
+if test "${ac_cv_type_u_int32_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. */
+#include <sys/types.h>
+#include <$i>
+
+int
+main ()
+{
+if ((u_int32_t *) 0)
+ return 0;
+if (sizeof (u_int32_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_u_int32_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_u_int32_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_u_int32_t" >&5
+echo "${ECHO_T}$ac_cv_type_u_int32_t" >&6
+if test $ac_cv_type_u_int32_t = yes; then
+ acx_cv_header_stdint=$i
+else
+ continue
+fi
+
+ echo "$as_me:$LINENO: checking for u_int64_t" >&5
+echo $ECHO_N "checking for u_int64_t... $ECHO_C" >&6
+if test "${ac_cv_type_u_int64_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. */
+#include <sys/types.h>
+#include <$i>
+
+int
+main ()
+{
+if ((u_int64_t *) 0)
+ return 0;
+if (sizeof (u_int64_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_u_int64_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_u_int64_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_u_int64_t" >&5
+echo "${ECHO_T}$ac_cv_type_u_int64_t" >&6
+
+ break
+ done
+fi
+if test "$acx_cv_header_stdint" = stddef.h; then
+ acx_cv_header_stdint_kind="(using manual detection)"
+fi
+
+test -z "$ac_cv_type_uintptr_t" && ac_cv_type_uintptr_t=no
+test -z "$ac_cv_type_uint64_t" && ac_cv_type_uint64_t=no
+test -z "$ac_cv_type_u_int64_t" && ac_cv_type_u_int64_t=no
+test -z "$ac_cv_type_int_least32_t" && ac_cv_type_int_least32_t=no
+test -z "$ac_cv_type_int_fast32_t" && ac_cv_type_int_fast32_t=no
+
+# ----------------- Summarize what we found so far
+
+echo "$as_me:$LINENO: checking what to include in bfd_stdint.h" >&5
+echo $ECHO_N "checking what to include in bfd_stdint.h... $ECHO_C" >&6
+
+case `$as_basename bfd_stdint.h ||
+$as_expr X/bfd_stdint.h : '.*/\([^/][^/]*\)/*$' \| \
+ Xbfd_stdint.h : 'X\(//\)$' \| \
+ Xbfd_stdint.h : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/bfd_stdint.h |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'` in
+ stdint.h) { echo "$as_me:$LINENO: WARNING: are you sure you want it there?" >&5
+echo "$as_me: WARNING: are you sure you want it there?" >&2;} ;;
+ inttypes.h) { echo "$as_me:$LINENO: WARNING: are you sure you want it there?" >&5
+echo "$as_me: WARNING: are you sure you want it there?" >&2;} ;;
+ *) ;;
+esac
+
+echo "$as_me:$LINENO: result: $acx_cv_header_stdint $acx_cv_header_stdint_kind" >&5
+echo "${ECHO_T}$acx_cv_header_stdint $acx_cv_header_stdint_kind" >&6
+
+# ----------------- done included file, check C basic types --------
+
+# Lacking an uintptr_t? Test size of void *
+case "$acx_cv_header_stdint:$ac_cv_type_uintptr_t" in
+ stddef.h:* | *:no) echo "$as_me:$LINENO: checking for void *" >&5
+echo $ECHO_N "checking for void *... $ECHO_C" >&6
+if test "${ac_cv_type_void_p+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 ((void * *) 0)
+ return 0;
+if (sizeof (void *))
+ 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_void_p=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_void_p=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_void_p" >&5
+echo "${ECHO_T}$ac_cv_type_void_p" >&6
+
+echo "$as_me:$LINENO: checking size of void *" >&5
+echo $ECHO_N "checking size of void *... $ECHO_C" >&6
+if test "${ac_cv_sizeof_void_p+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_void_p" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= 0)];
+test_array [0] = 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_lo=0 ac_mid=0
+ while :; do
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)];
+test_array [0] = 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_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (void *))) < 0)];
+test_array [0] = 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_hi=-1 ac_mid=-1
+ while :; do
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= $ac_mid)];
+test_array [0] = 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_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)];
+test_array [0] = 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_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_void_p=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (void *), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+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
+long longval () { return (long) (sizeof (void *)); }
+unsigned long ulongval () { return (long) (sizeof (void *)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (void *))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (void *))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (void *))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 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_sizeof_void_p=`cat conftest.val`
+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 )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (void *), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_void_p=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5
+echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
+_ACEOF
+
+ ;;
+esac
+
+# Lacking an uint64_t? Test size of long
+case "$acx_cv_header_stdint:$ac_cv_type_uint64_t:$ac_cv_type_u_int64_t" in
+ stddef.h:*:* | *:no:no) echo "$as_me:$LINENO: checking for long" >&5
+echo $ECHO_N "checking for long... $ECHO_C" >&6
+if test "${ac_cv_type_long+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 ((long *) 0)
+ return 0;
+if (sizeof (long))
+ 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_long=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_long=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
+echo "${ECHO_T}$ac_cv_type_long" >&6
+
+echo "$as_me:$LINENO: checking size of long" >&5
+echo $ECHO_N "checking size of long... $ECHO_C" >&6
+if test "${ac_cv_sizeof_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_long" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)];
+test_array [0] = 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_lo=0 ac_mid=0
+ while :; do
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 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_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)];
+test_array [0] = 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_hi=-1 ac_mid=-1
+ while :; do
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)];
+test_array [0] = 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_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 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_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+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
+long longval () { return (long) (sizeof (long)); }
+unsigned long ulongval () { return (long) (sizeof (long)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (long))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (long))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (long))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 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_sizeof_long=`cat conftest.val`
+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 )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_long=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+ ;;
+esac
+
+if test $acx_cv_header_stdint = stddef.h; then
+ # Lacking a good header? Test size of everything and deduce all types.
+ echo "$as_me:$LINENO: checking for int" >&5
+echo $ECHO_N "checking for int... $ECHO_C" >&6
+if test "${ac_cv_type_int+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 ((int *) 0)
+ return 0;
+if (sizeof (int))
+ 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_int=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
+echo "${ECHO_T}$ac_cv_type_int" >&6
+
+echo "$as_me:$LINENO: checking size of int" >&5
+echo $ECHO_N "checking size of int... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_int" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)];
+test_array [0] = 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_lo=0 ac_mid=0
+ while :; do
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 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_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)];
+test_array [0] = 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_hi=-1 ac_mid=-1
+ while :; do
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)];
+test_array [0] = 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_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 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_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+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
+long longval () { return (long) (sizeof (int)); }
+unsigned long ulongval () { return (long) (sizeof (int)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (int))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (int))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (int))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 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_sizeof_int=`cat conftest.val`
+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 )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_int=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+ echo "$as_me:$LINENO: checking for short" >&5
+echo $ECHO_N "checking for short... $ECHO_C" >&6
+if test "${ac_cv_type_short+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 ((short *) 0)
+ return 0;
+if (sizeof (short))
+ 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_short=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_short=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
+echo "${ECHO_T}$ac_cv_type_short" >&6
+
+echo "$as_me:$LINENO: checking size of short" >&5
+echo $ECHO_N "checking size of short... $ECHO_C" >&6
+if test "${ac_cv_sizeof_short+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_short" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)];
+test_array [0] = 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_lo=0 ac_mid=0
+ while :; do
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+test_array [0] = 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_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)];
+test_array [0] = 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_hi=-1 ac_mid=-1
+ while :; do
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)];
+test_array [0] = 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_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+test_array [0] = 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_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_short=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+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
+long longval () { return (long) (sizeof (short)); }
+unsigned long ulongval () { return (long) (sizeof (short)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (short))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (short))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (short))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 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_sizeof_short=`cat conftest.val`
+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 )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_short=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
+echo "${ECHO_T}$ac_cv_sizeof_short" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SHORT $ac_cv_sizeof_short
+_ACEOF
+
+
+ echo "$as_me:$LINENO: checking for char" >&5
+echo $ECHO_N "checking for char... $ECHO_C" >&6
+if test "${ac_cv_type_char+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 ((char *) 0)
+ return 0;
+if (sizeof (char))
+ 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_char=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_char=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5
+echo "${ECHO_T}$ac_cv_type_char" >&6
+
+echo "$as_me:$LINENO: checking size of char" >&5
+echo $ECHO_N "checking size of char... $ECHO_C" >&6
+if test "${ac_cv_sizeof_char+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_char" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)];
+test_array [0] = 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_lo=0 ac_mid=0
+ while :; do
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+test_array [0] = 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_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)];
+test_array [0] = 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_hi=-1 ac_mid=-1
+ while :; do
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)];
+test_array [0] = 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_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+test_array [0] = 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_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_char=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+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
+long longval () { return (long) (sizeof (char)); }
+unsigned long ulongval () { return (long) (sizeof (char)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (char))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (char))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (char))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 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_sizeof_char=`cat conftest.val`
+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 )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_char=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5
+echo "${ECHO_T}$ac_cv_sizeof_char" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_CHAR $ac_cv_sizeof_char
+_ACEOF
+
+
+
+ echo "$as_me:$LINENO: checking for type equivalent to int8_t" >&5
+echo $ECHO_N "checking for type equivalent to int8_t... $ECHO_C" >&6
+ case "$ac_cv_sizeof_char" in
+ 1) acx_cv_type_int8_t=char ;;
+ *) { { echo "$as_me:$LINENO: error: no 8-bit type" >&5
+echo "$as_me: error: no 8-bit type" >&2;}
+ { (exit please report a bug); exit please report a bug; }; }
+ esac
+ echo "$as_me:$LINENO: result: $acx_cv_type_int8_t" >&5
+echo "${ECHO_T}$acx_cv_type_int8_t" >&6
+
+ echo "$as_me:$LINENO: checking for type equivalent to int16_t" >&5
+echo $ECHO_N "checking for type equivalent to int16_t... $ECHO_C" >&6
+ case "$ac_cv_sizeof_int:$ac_cv_sizeof_short" in
+ 2:*) acx_cv_type_int16_t=int ;;
+ *:2) acx_cv_type_int16_t=short ;;
+ *) { { echo "$as_me:$LINENO: error: no 16-bit type" >&5
+echo "$as_me: error: no 16-bit type" >&2;}
+ { (exit please report a bug); exit please report a bug; }; }
+ esac
+ echo "$as_me:$LINENO: result: $acx_cv_type_int16_t" >&5
+echo "${ECHO_T}$acx_cv_type_int16_t" >&6
+
+ echo "$as_me:$LINENO: checking for type equivalent to int32_t" >&5
+echo $ECHO_N "checking for type equivalent to int32_t... $ECHO_C" >&6
+ case "$ac_cv_sizeof_int:$ac_cv_sizeof_long" in
+ 4:*) acx_cv_type_int32_t=int ;;
+ *:4) acx_cv_type_int32_t=long ;;
+ *) { { echo "$as_me:$LINENO: error: no 32-bit type" >&5
+echo "$as_me: error: no 32-bit type" >&2;}
+ { (exit please report a bug); exit please report a bug; }; }
+ esac
+ echo "$as_me:$LINENO: result: $acx_cv_type_int32_t" >&5
+echo "${ECHO_T}$acx_cv_type_int32_t" >&6
+fi
+
+# These tests are here to make the output prettier
+
+if test "$ac_cv_type_uint64_t" != yes && test "$ac_cv_type_u_int64_t" != yes; then
+ case "$ac_cv_sizeof_long" in
+ 8) acx_cv_type_int64_t=long ;;
+ esac
+ echo "$as_me:$LINENO: checking for type equivalent to int64_t" >&5
+echo $ECHO_N "checking for type equivalent to int64_t... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: ${acx_cv_type_int64_t-'using preprocessor symbols'}" >&5
+echo "${ECHO_T}${acx_cv_type_int64_t-'using preprocessor symbols'}" >&6
+fi
+
+# Now we can use the above types
+
+if test "$ac_cv_type_uintptr_t" != yes; then
+ echo "$as_me:$LINENO: checking for type equivalent to intptr_t" >&5
+echo $ECHO_N "checking for type equivalent to intptr_t... $ECHO_C" >&6
+ case $ac_cv_sizeof_void_p in
+ 2) acx_cv_type_intptr_t=int16_t ;;
+ 4) acx_cv_type_intptr_t=int32_t ;;
+ 8) acx_cv_type_intptr_t=int64_t ;;
+ *) { { echo "$as_me:$LINENO: error: no equivalent for intptr_t" >&5
+echo "$as_me: error: no equivalent for intptr_t" >&2;}
+ { (exit please report a bug); exit please report a bug; }; }
+ esac
+ echo "$as_me:$LINENO: result: $acx_cv_type_intptr_t" >&5
+echo "${ECHO_T}$acx_cv_type_intptr_t" >&6
+fi
+
+# ----------------- done all checks, emit header -------------
+ ac_config_commands="$ac_config_commands bfd_stdint.h"
+
+
+
echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
if test "${ac_cv_header_time+set}" = set; then
@@ -11467,7 +17003,9 @@ if test "${target}" = "${host}"; then
alpha*-*-*) COREFILE=osf-core.lo ;;
arm-*-freebsd* | arm-*-kfreebsd*-gnu)
COREFILE='' ;;
- arm-*-netbsd*) COREFILE=netbsd-core.lo ;;
+ arm-*-netbsd* | arm-*-openbsd*)
+ COREFILE=netbsd-core.lo
+ ;;
arm-*-riscix) COREFILE=trad-core.lo ;;
hppa*-*-hpux*) COREFILE=hpux-core.lo ;;
hppa*-*-hiux*) COREFILE=hpux-core.lo ;;
@@ -11674,7 +17212,9 @@ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
powerpc-*-netbsd*) COREFILE=netbsd-core.lo ;;
powerpc-*-*bsd*) COREFILE=netbsd-core.lo ;;
s390*-*-*) COREFILE=trad-core.lo ;;
- sh*-*-netbsd*) COREFILE=netbsd-core.lo ;;
+ sh*-*-netbsd* | sh*-*-openbsd*)
+ COREFILE=netbsd-core.lo
+ ;;
sparc-*-netbsd* | sparc*-*-openbsd*)
COREFILE=netbsd-core.lo
;;
@@ -13038,7 +18578,7 @@ selarchs="$f"
# Target backend .o files.
tb=
-elf="elf.lo elflink.lo elf-strtab.lo elf-eh-frame.lo dwarf1.lo"
+elf="elf.lo elflink.lo elf-attrs.lo elf-strtab.lo elf-eh-frame.lo dwarf1.lo"
for vec in $selvecs
do
@@ -13057,6 +18597,10 @@ do
arm_epoc_pe_little_vec) tb="$tb epoc-pe-arm.lo peigen.lo cofflink.lo " ;;
arm_epoc_pei_big_vec) tb="$tb epoc-pei-arm.lo peigen.lo cofflink.lo " ;;
arm_epoc_pei_little_vec) tb="$tb epoc-pei-arm.lo peigen.lo cofflink.lo " ;;
+ arm_wince_pe_big_vec) tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo cofflink.lo " ;;
+ arm_wince_pe_little_vec) tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo cofflink.lo " ;;
+ arm_wince_pei_big_vec) tb="$tb pei-arm-wince.lo pei-arm.lo peigen.lo cofflink.lo " ;;
+ arm_wince_pei_little_vec) tb="$tb pei-arm-wince.lo pei-arm.lo peigen.lo cofflink.lo " ;;
armcoff_big_vec) tb="$tb coff-arm.lo cofflink.lo " ;;
armcoff_little_vec) tb="$tb coff-arm.lo cofflink.lo " ;;
armnetbsd_vec) tb="$tb armnetbsd.lo aout32.lo" ;;
@@ -13067,6 +18611,7 @@ do
b_out_vec_big_host) tb="$tb bout.lo aout32.lo" ;;
b_out_vec_little_host) tb="$tb bout.lo aout32.lo" ;;
bfd_efi_app_ia32_vec) tb="$tb efi-app-ia32.lo peigen.lo cofflink.lo" ;;
+ bfd_efi_app_x86_64_vec) tb="$tb efi-app-x86_64.lo pex64igen.lo cofflink.lo" ;target_size=64;;
bfd_efi_app_ia64_vec) tb="$tb efi-app-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;;
bfd_elf32_am33lin_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;;
bfd_elf32_avr_vec) tb="$tb elf32-avr.lo elf32.lo $elf" ;;
@@ -13082,6 +18627,7 @@ do
bfd_elf32_bigmips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
bfd_elf32_bigmips_vxworks_vec)
tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
+ bfd_elf32_cr16_vec) tb="$tb elf32-cr16.lo elf32.lo $elf" ;;
bfd_elf32_cr16c_vec) tb="$tb elf32-cr16c.lo elf32.lo $elf" ;;
bfd_elf32_cris_vec) tb="$tb elf32-cris.lo elf32.lo $elf" ;;
bfd_elf32_crx_vec) tb="$tb elf32-crx.lo elf32.lo $elf" ;;
@@ -13127,6 +18673,8 @@ do
bfd_elf32_m88k_vec) tb="$tb elf32-m88k.lo elf32.lo $elf" ;;
bfd_elf32_mcore_big_vec) tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
bfd_elf32_mcore_little_vec) tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
+ bfd_elf32_mep_vec) tb="$tb elf32-mep.lo elf32.lo $elf" ;;
+ bfd_elf32_mep_little_vec) tb="$tb elf32-mep.lo elf32.lo $elf" ;;
bfd_elf32_mn10200_vec) tb="$tb elf-m10200.lo elf32.lo $elf" ;;
bfd_elf32_mn10300_vec) tb="$tb elf-m10300.lo elf32.lo $elf" ;;
bfd_elf32_mt_vec) tb="$tb elf32-mt.lo elf32.lo $elf" ;;
@@ -13143,24 +18691,29 @@ do
bfd_elf32_powerpcle_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
bfd_elf32_powerpc_vxworks_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
bfd_elf32_s390_vec) tb="$tb elf32-s390.lo elf32.lo $elf" ;;
+ bfd_elf32_bigscore_vec) tb="$tb elf32-score.lo elf32.lo $elf" ;;
+ bfd_elf32_littlescore_vec) tb="$tb elf32-score.lo elf32.lo $elf" ;;
# FIXME: We include cofflink.lo not because it's needed for
# bfd_elf32_sh64[l]_vec, but because we include bfd_elf32_sh[l]_vec
# which needs it but does not list it. Should be fixed in right place.
- bfd_elf32_sh64_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
- bfd_elf32_sh64l_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
- bfd_elf32_sh64lin_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
- bfd_elf32_sh64blin_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
- bfd_elf32_sh64lnbsd_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf32.lo $elf cofflink.lo" ;;
- bfd_elf32_sh64nbsd_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf32.lo $elf cofflink.lo" ;;
- bfd_elf32_sh_vec) tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo" ;;
- bfd_elf32_shblin_vec) tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
- bfd_elf32_shl_vec) tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo" ;;
- bfd_elf32_shl_symbian_vec) tb="$tb elf32-sh-symbian.lo elf32-sh64-com.lo elf32.lo $elf coff-sh.lo" ;;
- bfd_elf32_shlin_vec) tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
- bfd_elf32_shlnbsd_vec) tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
- bfd_elf32_shnbsd_vec) tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
+ bfd_elf32_sh64_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
+ bfd_elf32_sh64l_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
+ bfd_elf32_sh64lin_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
+ bfd_elf32_sh64blin_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
+ bfd_elf32_sh64lnbsd_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" ;;
+ bfd_elf32_sh64nbsd_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" ;;
+ bfd_elf32_sh_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
+ bfd_elf32_shblin_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
+ bfd_elf32_shl_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
+ bfd_elf32_shl_symbian_vec) tb="$tb elf32-sh-symbian.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
+ bfd_elf32_shlin_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
+ bfd_elf32_shlnbsd_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
+ bfd_elf32_shlvxworks_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
+ bfd_elf32_shnbsd_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
+ bfd_elf32_shvxworks_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
bfd_elf32_sparc_vec) tb="$tb elf32-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf32.lo $elf" ;;
bfd_elf32_sparc_vxworks_vec) tb="$tb elf32-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf32.lo $elf" ;;
+ bfd_elf32_spu_vec) tb="$tb elf32-spu.lo elf32.lo $elf" ;;
bfd_elf32_tradbigmips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
bfd_elf32_tradlittlemips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
bfd_elf32_us_cris_vec) tb="$tb elf32-cris.lo elf32.lo $elf" ;;
@@ -13192,8 +18745,10 @@ do
bfd_elf64_sh64lnbsd_vec) tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
bfd_elf64_sh64nbsd_vec) tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
bfd_elf64_sparc_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
+ bfd_elf64_sparc_freebsd_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
bfd_elf64_tradbigmips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
bfd_elf64_tradlittlemips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
+ bfd_elf64_x86_64_freebsd_vec) tb="$tb elf64-x86-64.lo elf64.lo $elf"; target_size=64 ;;
bfd_elf64_x86_64_vec) tb="$tb elf64-x86-64.lo elf64.lo $elf"; target_size=64 ;;
bfd_mmo_vec) tb="$tb mmo.lo" target_size=64 ;;
bfd_powerpc_pe_vec) tb="$tb pe-ppc.lo peigen.lo cofflink.lo" ;;
@@ -13216,6 +18771,7 @@ do
i386aout_vec) tb="$tb i386aout.lo aout32.lo" ;;
i386bsd_vec) tb="$tb i386bsd.lo aout32.lo" ;;
i386coff_vec) tb="$tb coff-i386.lo cofflink.lo" ;;
+ x86_64coff_vec) tb="$tb coff-x86_64.lo cofflink.lo"; target_size=64 ;;
i386dynix_vec) tb="$tb i386dynix.lo aout32.lo" ;;
i386freebsd_vec) tb="$tb i386freebsd.lo aout32.lo" ;;
i386linux_vec) tb="$tb i386linux.lo aout32.lo" ;;
@@ -13227,6 +18783,8 @@ do
i386os9k_vec) tb="$tb i386os9k.lo aout32.lo" ;;
i386pe_vec) tb="$tb pe-i386.lo peigen.lo cofflink.lo" ;;
i386pei_vec) tb="$tb pei-i386.lo peigen.lo cofflink.lo" ;;
+ x86_64pe_vec) tb="$tb pe-x86_64.lo pex64igen.lo cofflink.lo"; target_size=64 ;;
+ x86_64pei_vec) tb="$tb pei-x86_64.lo pex64igen.lo cofflink.lo"; target_size=64 ;;
i860coff_vec) tb="$tb coff-i860.lo cofflink.lo" ;;
icoff_big_vec) tb="$tb coff-i960.lo cofflink.lo" ;;
icoff_little_vec) tb="$tb coff-i960.lo cofflink.lo" ;;
@@ -13379,7 +18937,7 @@ fi # all_targets is true
case ${host64}-${target64}-${want64} in
*true*)
wordsize=64
- bfd_libs='$(BFD64_LIBS) $(BFD32_LIBS)'
+ bfd64_libs='$(BFD64_LIBS)'
all_backends='$(BFD64_BACKENDS) $(BFD32_BACKENDS)'
if test $BFD_HOST_64_BIT_DEFINED = 0; then
{ echo "$as_me:$LINENO: WARNING: You have requested a 64 bit BFD configuration, but" >&5
@@ -13420,7 +18978,6 @@ echo "$as_me: error: A newer version of gcc is needed for the requested 64-bit B
;;
false-false-false)
wordsize=32
- bfd_libs='$(BFD32_LIBS)'
all_backends='$(BFD32_BACKENDS)'
;;
esac
@@ -14524,6 +20081,7 @@ esac
rm -f doc/config.status
ac_config_files="$ac_config_files Makefile doc/Makefile bfd-in3.h:bfd-in2.h po/Makefile.in:po/Make-in"
+
ac_config_commands="$ac_config_commands default"
@@ -14643,6 +20201,13 @@ 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
+if test -z "${GENINSRC_NEVER_TRUE}" && test -z "${GENINSRC_NEVER_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"GENINSRC_NEVER\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"GENINSRC_NEVER\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
if test -z "${INSTALL_LIBBFD_TRUE}" && test -z "${INSTALL_LIBBFD_FALSE}"; then
{ { echo "$as_me:$LINENO: error: conditional \"INSTALL_LIBBFD\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
@@ -15086,6 +20651,272 @@ cat >>$CONFIG_STATUS <<_ACEOF
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+ ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+ # from automake.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+
+GCC="$GCC"
+CC="$CC"
+acx_cv_header_stdint="$acx_cv_header_stdint"
+acx_cv_type_int8_t="$acx_cv_type_int8_t"
+acx_cv_type_int16_t="$acx_cv_type_int16_t"
+acx_cv_type_int32_t="$acx_cv_type_int32_t"
+acx_cv_type_int64_t="$acx_cv_type_int64_t"
+acx_cv_type_intptr_t="$acx_cv_type_intptr_t"
+ac_cv_type_uintmax_t="$ac_cv_type_uintmax_t"
+ac_cv_type_uintptr_t="$ac_cv_type_uintptr_t"
+ac_cv_type_uint64_t="$ac_cv_type_uint64_t"
+ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t"
+ac_cv_type_u_int32_t="$ac_cv_type_u_int32_t"
+ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t"
+ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t"
+ac_cv_sizeof_void_p="$ac_cv_sizeof_void_p"
+
+
+
_ACEOF
@@ -15100,6 +20931,9 @@ do
"bfd-in3.h" ) CONFIG_FILES="$CONFIG_FILES bfd-in3.h:bfd-in2.h" ;;
"po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;;
"depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "libtool" ) CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+ "bfd_stdint.h" ) CONFIG_COMMANDS="$CONFIG_COMMANDS bfd_stdint.h" ;;
"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
@@ -15241,42 +21075,50 @@ s,@AR@,$AR,;t t
s,@ac_ct_AR@,$ac_ct_AR,;t t
s,@RANLIB@,$RANLIB,;t t
s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s,@LN_S@,$LN_S,;t t
s,@LIBTOOL@,$LIBTOOL,;t t
+s,@SED@,$SED,;t t
+s,@EGREP@,$EGREP,;t t
+s,@FGREP@,$FGREP,;t t
+s,@GREP@,$GREP,;t t
+s,@LD@,$LD,;t t
+s,@DUMPBIN@,$DUMPBIN,;t t
+s,@ac_ct_DUMPBIN@,$ac_ct_DUMPBIN,;t t
+s,@NM@,$NM,;t t
+s,@LN_S@,$LN_S,;t t
+s,@lt_ECHO@,$lt_ECHO,;t t
+s,@CPP@,$CPP,;t t
+s,@DEBUGDIR@,$DEBUGDIR,;t t
+s,@PKGVERSION@,$PKGVERSION,;t t
+s,@REPORT_BUGS_TO@,$REPORT_BUGS_TO,;t t
+s,@REPORT_BUGS_TEXI@,$REPORT_BUGS_TEXI,;t t
s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t
s,@NO_WERROR@,$NO_WERROR,;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,@GENINSRC_NEVER_TRUE@,$GENINSRC_NEVER_TRUE,;t t
+s,@GENINSRC_NEVER_FALSE@,$GENINSRC_NEVER_FALSE,;t t
s,@INSTALL_LIBBFD_TRUE@,$INSTALL_LIBBFD_TRUE,;t t
s,@INSTALL_LIBBFD_FALSE@,$INSTALL_LIBBFD_FALSE,;t t
s,@host_noncanonical@,$host_noncanonical,;t t
s,@target_noncanonical@,$target_noncanonical,;t t
s,@bfdlibdir@,$bfdlibdir,;t t
s,@bfdincludedir@,$bfdincludedir,;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,@LIBINTL@,$LIBINTL,;t t
+s,@LIBINTL_DEP@,$LIBINTL_DEP,;t t
+s,@INCINTL@,$INCINTL,;t t
s,@XGETTEXT@,$XGETTEXT,;t t
-s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t
+s,@GMSGFMT@,$GMSGFMT,;t t
+s,@POSUB@,$POSUB,;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,@GENCAT@,$GENCAT,;t t
+s,@CATOBJEXT@,$CATOBJEXT,;t t
s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
-s,@l@,$l,;t t
+s,@MSGFMT@,$MSGFMT,;t t
+s,@MSGMERGE@,$MSGMERGE,;t t
s,@HDEFINES@,$HDEFINES,;t t
s,@BFD_HOST_64BIT_LONG@,$BFD_HOST_64BIT_LONG,;t t
s,@BFD_HOST_LONG_LONG@,$BFD_HOST_LONG_LONG,;t t
@@ -15291,7 +21133,7 @@ s,@WIN32LDFLAGS@,$WIN32LDFLAGS,;t t
s,@WIN32LIBADD@,$WIN32LIBADD,;t t
s,@TDEFINES@,$TDEFINES,;t t
s,@wordsize@,$wordsize,;t t
-s,@bfd_libs@,$bfd_libs,;t t
+s,@bfd64_libs@,$bfd64_libs,;t t
s,@all_backends@,$all_backends,;t t
s,@bfd_backends@,$bfd_backends,;t t
s,@bfd_machines@,$bfd_machines,;t t
@@ -15986,7 +21828,1002 @@ echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
done
done
;;
- default ) sed -e '/SRC-POTFILES =/r po/SRC-POTFILES' -e '/BLD-POTFILES =/r po/BLD-POTFILES' po/Makefile.in > po/Makefile ;;
+ libtool )
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# 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, a copy can be downloaded from
+# http://www.gnu.org/copyleft/gpl.html, or by writing to the Free
+# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1+=\$2"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1=\$$1\$2"
+}
+_LT_EOF
+ ;;
+ esac
+
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+ ;;
+ default-1 )
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ GMOFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
+ bfd_stdint.h )
+if test "$GCC" = yes; then
+ echo "/* generated for " `$CC --version | sed 1q` "*/" > tmp-stdint.h
+else
+ echo "/* generated for $CC */" > tmp-stdint.h
+fi
+
+sed 's/^ *//' >> tmp-stdint.h <<EOF
+
+ #ifndef GCC_GENERATED_STDINT_H
+ #define GCC_GENERATED_STDINT_H 1
+
+ #include <sys/types.h>
+EOF
+
+if test "$acx_cv_header_stdint" != stdint.h; then
+ echo "#include <stddef.h>" >> tmp-stdint.h
+fi
+if test "$acx_cv_header_stdint" != stddef.h; then
+ echo "#include <$acx_cv_header_stdint>" >> tmp-stdint.h
+fi
+
+sed 's/^ *//' >> tmp-stdint.h <<EOF
+ /* glibc uses these symbols as guards to prevent redefinitions. */
+ #ifdef __int8_t_defined
+ #define _INT8_T
+ #define _INT16_T
+ #define _INT32_T
+ #endif
+ #ifdef __uint32_t_defined
+ #define _UINT32_T
+ #endif
+
+EOF
+
+# ----------------- done header, emit basic int types -------------
+if test "$acx_cv_header_stdint" = stddef.h; then
+ sed 's/^ *//' >> tmp-stdint.h <<EOF
+
+ #ifndef _UINT8_T
+ #define _UINT8_T
+ #ifndef __uint8_t_defined
+ #define __uint8_t_defined
+ typedef unsigned $acx_cv_type_int8_t uint8_t;
+ #endif
+ #endif
+
+ #ifndef _UINT16_T
+ #define _UINT16_T
+ #ifndef __uint16_t_defined
+ #define __uint16_t_defined
+ typedef unsigned $acx_cv_type_int16_t uint16_t;
+ #endif
+ #endif
+
+ #ifndef _UINT32_T
+ #define _UINT32_T
+ #ifndef __uint32_t_defined
+ #define __uint32_t_defined
+ typedef unsigned $acx_cv_type_int32_t uint32_t;
+ #endif
+ #endif
+
+ #ifndef _INT8_T
+ #define _INT8_T
+ #ifndef __int8_t_defined
+ #define __int8_t_defined
+ typedef $acx_cv_type_int8_t int8_t;
+ #endif
+ #endif
+
+ #ifndef _INT16_T
+ #define _INT16_T
+ #ifndef __int16_t_defined
+ #define __int16_t_defined
+ typedef $acx_cv_type_int16_t int16_t;
+ #endif
+ #endif
+
+ #ifndef _INT32_T
+ #define _INT32_T
+ #ifndef __int32_t_defined
+ #define __int32_t_defined
+ typedef $acx_cv_type_int32_t int32_t;
+ #endif
+ #endif
+EOF
+elif test "$ac_cv_type_u_int32_t" = yes; then
+ sed 's/^ *//' >> tmp-stdint.h <<EOF
+
+ /* int8_t int16_t int32_t defined by inet code, we do the u_intXX types */
+ #ifndef _INT8_T
+ #define _INT8_T
+ #endif
+ #ifndef _INT16_T
+ #define _INT16_T
+ #endif
+ #ifndef _INT32_T
+ #define _INT32_T
+ #endif
+
+ #ifndef _UINT8_T
+ #define _UINT8_T
+ #ifndef __uint8_t_defined
+ #define __uint8_t_defined
+ typedef u_int8_t uint8_t;
+ #endif
+ #endif
+
+ #ifndef _UINT16_T
+ #define _UINT16_T
+ #ifndef __uint16_t_defined
+ #define __uint16_t_defined
+ typedef u_int16_t uint16_t;
+ #endif
+ #endif
+
+ #ifndef _UINT32_T
+ #define _UINT32_T
+ #ifndef __uint32_t_defined
+ #define __uint32_t_defined
+ typedef u_int32_t uint32_t;
+ #endif
+ #endif
+EOF
+else
+ sed 's/^ *//' >> tmp-stdint.h <<EOF
+
+ /* Some systems have guard macros to prevent redefinitions, define them. */
+ #ifndef _INT8_T
+ #define _INT8_T
+ #endif
+ #ifndef _INT16_T
+ #define _INT16_T
+ #endif
+ #ifndef _INT32_T
+ #define _INT32_T
+ #endif
+ #ifndef _UINT8_T
+ #define _UINT8_T
+ #endif
+ #ifndef _UINT16_T
+ #define _UINT16_T
+ #endif
+ #ifndef _UINT32_T
+ #define _UINT32_T
+ #endif
+EOF
+fi
+
+# ------------- done basic int types, emit int64_t types ------------
+if test "$ac_cv_type_uint64_t" = yes; then
+ sed 's/^ *//' >> tmp-stdint.h <<EOF
+
+ /* system headers have good uint64_t and int64_t */
+ #ifndef _INT64_T
+ #define _INT64_T
+ #endif
+ #ifndef _UINT64_T
+ #define _UINT64_T
+ #endif
+EOF
+elif test "$ac_cv_type_u_int64_t" = yes; then
+ sed 's/^ *//' >> tmp-stdint.h <<EOF
+
+ /* system headers have an u_int64_t (and int64_t) */
+ #ifndef _INT64_T
+ #define _INT64_T
+ #endif
+ #ifndef _UINT64_T
+ #define _UINT64_T
+ #ifndef __uint64_t_defined
+ #define __uint64_t_defined
+ typedef u_int64_t uint64_t;
+ #endif
+ #endif
+EOF
+elif test -n "$acx_cv_type_int64_t"; then
+ sed 's/^ *//' >> tmp-stdint.h <<EOF
+
+ /* architecture has a 64-bit type, $acx_cv_type_int64_t */
+ #ifndef _INT64_T
+ #define _INT64_T
+ typedef $acx_cv_type_int64_t int64_t;
+ #endif
+ #ifndef _UINT64_T
+ #define _UINT64_T
+ #ifndef __uint64_t_defined
+ #define __uint64_t_defined
+ typedef unsigned $acx_cv_type_int64_t uint64_t;
+ #endif
+ #endif
+EOF
+else
+ sed 's/^ *//' >> tmp-stdint.h <<EOF
+
+ /* some common heuristics for int64_t, using compiler-specific tests */
+ #if defined __STDC_VERSION__ && (__STDC_VERSION__-0) >= 199901L
+ #ifndef _INT64_T
+ #define _INT64_T
+ #ifndef __int64_t_defined
+ typedef long long int64_t;
+ #endif
+ #endif
+ #ifndef _UINT64_T
+ #define _UINT64_T
+ typedef unsigned long long uint64_t;
+ #endif
+
+ #elif defined __GNUC__ && defined (__STDC__) && __STDC__-0
+ /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
+ does not implement __extension__. But that compiler doesn't define
+ __GNUC_MINOR__. */
+ # if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
+ # define __extension__
+ # endif
+
+ # ifndef _INT64_T
+ # define _INT64_T
+ __extension__ typedef long long int64_t;
+ # endif
+ # ifndef _UINT64_T
+ # define _UINT64_T
+ __extension__ typedef unsigned long long uint64_t;
+ # endif
+
+ #elif !defined __STRICT_ANSI__
+ # if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__
+
+ # ifndef _INT64_T
+ # define _INT64_T
+ typedef __int64 int64_t;
+ # endif
+ # ifndef _UINT64_T
+ # define _UINT64_T
+ typedef unsigned __int64 uint64_t;
+ # endif
+ # endif /* compiler */
+
+ #endif /* ANSI version */
+EOF
+fi
+
+# ------------- done int64_t types, emit intptr types ------------
+if test "$ac_cv_type_uintptr_t" != yes; then
+ sed 's/^ *//' >> tmp-stdint.h <<EOF
+
+ /* Define intptr_t based on sizeof(void*) = $ac_cv_sizeof_void_p */
+ #ifndef __uintptr_t_defined
+ typedef u$acx_cv_type_intptr_t uintptr_t;
+ #endif
+ #ifndef __intptr_t_defined
+ typedef $acx_cv_type_intptr_t intptr_t;
+ #endif
+EOF
+fi
+
+# ------------- done intptr types, emit int_least types ------------
+if test "$ac_cv_type_int_least32_t" != yes; then
+ sed 's/^ *//' >> tmp-stdint.h <<EOF
+
+ /* Define int_least types */
+ typedef int8_t int_least8_t;
+ typedef int16_t int_least16_t;
+ typedef int32_t int_least32_t;
+ #ifdef _INT64_T
+ typedef int64_t int_least64_t;
+ #endif
+
+ typedef uint8_t uint_least8_t;
+ typedef uint16_t uint_least16_t;
+ typedef uint32_t uint_least32_t;
+ #ifdef _UINT64_T
+ typedef uint64_t uint_least64_t;
+ #endif
+EOF
+fi
+
+# ------------- done intptr types, emit int_fast types ------------
+if test "$ac_cv_type_int_fast32_t" != yes; then
+ sed 's/^ *//' >> tmp-stdint.h <<EOF
+
+ /* Define int_fast types. short is often slow */
+ typedef int8_t int_fast8_t;
+ typedef int int_fast16_t;
+ typedef int32_t int_fast32_t;
+ #ifdef _INT64_T
+ typedef int64_t int_fast64_t;
+ #endif
+
+ typedef uint8_t uint_fast8_t;
+ typedef unsigned int uint_fast16_t;
+ typedef uint32_t uint_fast32_t;
+ #ifdef _UINT64_T
+ typedef uint64_t uint_fast64_t;
+ #endif
+EOF
+fi
+
+if test "$ac_cv_type_uintmax_t" != yes; then
+ sed 's/^ *//' >> tmp-stdint.h <<EOF
+
+ /* Define intmax based on what we found */
+ #ifdef _INT64_T
+ typedef int64_t intmax_t;
+ #else
+ typedef long intmax_t;
+ #endif
+ #ifdef _UINT64_T
+ typedef uint64_t uintmax_t;
+ #else
+ typedef unsigned long uintmax_t;
+ #endif
+EOF
+fi
+
+sed 's/^ *//' >> tmp-stdint.h <<EOF
+
+ #endif /* GCC_GENERATED_STDINT_H */
+EOF
+
+if test -r bfd_stdint.h && cmp -s tmp-stdint.h bfd_stdint.h; then
+ rm -f tmp-stdint.h
+else
+ mv -f tmp-stdint.h bfd_stdint.h
+fi
+
+ ;;
+ default )
+case "$srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+esac
+POFILES=
+GMOFILES=
+for lang in dummy $OBSOLETE_ALL_LINGUAS; do
+ if test $lang != dummy; then
+ POFILES="$POFILES $srcdirpre$lang.po"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ fi
+done
+sed -e '/SRC-POTFILES =/r po/SRC-POTFILES' \
+ -e '/BLD-POTFILES =/r po/BLD-POTFILES' \
+ -e "s,@POFILES@,$POFILES," \
+ -e "s,@GMOFILES@,$GMOFILES," \
+ po/Makefile.in > po/Makefile ;;
esac
done
_ACEOF
diff --git a/bfd/configure.in b/bfd/configure.in
index 212f96142fd8..1ea98ae0259a 100644
--- a/bfd/configure.in
+++ b/bfd/configure.in
@@ -8,7 +8,7 @@ AC_CONFIG_SRCDIR([libbfd.c])
AC_CANONICAL_TARGET
AC_ISC_POSIX
-AM_INIT_AUTOMAKE(bfd, 2.17)
+AM_INIT_AUTOMAKE(bfd, 2.17.50)
dnl These must be called before AM_PROG_LIBTOOL, because it may want
dnl to call AC_CHECK_PROG.
@@ -19,7 +19,10 @@ dnl Default to a non shared library. This may be overridden by the
dnl configure option --enable-shared.
AM_DISABLE_SHARED
-AM_PROG_LIBTOOL
+AC_PROG_CC
+AC_GNU_SOURCE
+
+AC_PROG_LIBTOOL
AC_ARG_ENABLE(64-bit-bfd,
[ --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)],
@@ -63,6 +66,17 @@ if test $use_secureplt = true; then
[Define if we should default to creating read-only plt entries])
fi
+DEBUGDIR=${libdir}/debug
+
+AC_ARG_WITH(separate-debug-dir,
+ AS_HELP_STRING([--with-separate-debug-dir=DIR],
+ [Look for global separate debug info in DIR [[default=LIBDIR/debug]]]),
+[DEBUGDIR="${withval}"])
+AC_SUBST(DEBUGDIR)
+
+ACX_PKGVERSION([GNU Binutils])
+ACX_BUGURL([http://www.sourceware.org/bugzilla/])
+
AM_BINUTILS_WARNINGS
AM_CONFIG_HEADER(config.h:config.in)
@@ -72,6 +86,7 @@ if test -z "$target" ; then
fi
AM_MAINTAINER_MODE
+AM_CONDITIONAL(GENINSRC_NEVER, false)
AM_INSTALL_LIBBFD
AC_EXEEXT
@@ -81,11 +96,9 @@ bfd_default_target_size=32
# host stuff:
-AC_PROG_CC
-AC_GNU_SOURCE
-
ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi"
-CY_GNU_GETTEXT
+ZW_GNU_GETTEXT_SISTER_DIR
+AM_PO_SUBDIRS
# Permit host specific settings.
. ${srcdir}/configure.host
@@ -135,6 +148,7 @@ BFD_CC_FOR_BUILD
AC_CHECK_HEADERS(stddef.h string.h strings.h stdlib.h time.h unistd.h)
AC_CHECK_HEADERS(fcntl.h sys/file.h sys/time.h)
+GCC_HEADER_STDINT(bfd_stdint.h)
AC_HEADER_TIME
AC_HEADER_DIRENT
ACX_HEADER_STRING
@@ -178,7 +192,9 @@ if test "${target}" = "${host}"; then
alpha*-*-*) COREFILE=osf-core.lo ;;
arm-*-freebsd* | arm-*-kfreebsd*-gnu)
COREFILE='' ;;
- arm-*-netbsd*) COREFILE=netbsd-core.lo ;;
+ arm-*-netbsd* | arm-*-openbsd*)
+ COREFILE=netbsd-core.lo
+ ;;
arm-*-riscix) COREFILE=trad-core.lo ;;
hppa*-*-hpux*) COREFILE=hpux-core.lo ;;
hppa*-*-hiux*) COREFILE=hpux-core.lo ;;
@@ -361,7 +377,9 @@ changequote([,])dnl
powerpc-*-netbsd*) COREFILE=netbsd-core.lo ;;
powerpc-*-*bsd*) COREFILE=netbsd-core.lo ;;
s390*-*-*) COREFILE=trad-core.lo ;;
- sh*-*-netbsd*) COREFILE=netbsd-core.lo ;;
+ sh*-*-netbsd* | sh*-*-openbsd*)
+ COREFILE=netbsd-core.lo
+ ;;
sparc-*-netbsd* | sparc*-*-openbsd*)
COREFILE=netbsd-core.lo
;;
@@ -551,7 +569,7 @@ selarchs="$f"
# Target backend .o files.
tb=
-elf="elf.lo elflink.lo elf-strtab.lo elf-eh-frame.lo dwarf1.lo"
+elf="elf.lo elflink.lo elf-attrs.lo elf-strtab.lo elf-eh-frame.lo dwarf1.lo"
for vec in $selvecs
do
@@ -570,6 +588,10 @@ do
arm_epoc_pe_little_vec) tb="$tb epoc-pe-arm.lo peigen.lo cofflink.lo " ;;
arm_epoc_pei_big_vec) tb="$tb epoc-pei-arm.lo peigen.lo cofflink.lo " ;;
arm_epoc_pei_little_vec) tb="$tb epoc-pei-arm.lo peigen.lo cofflink.lo " ;;
+ arm_wince_pe_big_vec) tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo cofflink.lo " ;;
+ arm_wince_pe_little_vec) tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo cofflink.lo " ;;
+ arm_wince_pei_big_vec) tb="$tb pei-arm-wince.lo pei-arm.lo peigen.lo cofflink.lo " ;;
+ arm_wince_pei_little_vec) tb="$tb pei-arm-wince.lo pei-arm.lo peigen.lo cofflink.lo " ;;
armcoff_big_vec) tb="$tb coff-arm.lo cofflink.lo " ;;
armcoff_little_vec) tb="$tb coff-arm.lo cofflink.lo " ;;
armnetbsd_vec) tb="$tb armnetbsd.lo aout32.lo" ;;
@@ -580,6 +602,7 @@ do
b_out_vec_big_host) tb="$tb bout.lo aout32.lo" ;;
b_out_vec_little_host) tb="$tb bout.lo aout32.lo" ;;
bfd_efi_app_ia32_vec) tb="$tb efi-app-ia32.lo peigen.lo cofflink.lo" ;;
+ bfd_efi_app_x86_64_vec) tb="$tb efi-app-x86_64.lo pex64igen.lo cofflink.lo" ;target_size=64;;
bfd_efi_app_ia64_vec) tb="$tb efi-app-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;;
bfd_elf32_am33lin_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;;
bfd_elf32_avr_vec) tb="$tb elf32-avr.lo elf32.lo $elf" ;;
@@ -595,6 +618,7 @@ do
bfd_elf32_bigmips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
bfd_elf32_bigmips_vxworks_vec)
tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
+ bfd_elf32_cr16_vec) tb="$tb elf32-cr16.lo elf32.lo $elf" ;;
bfd_elf32_cr16c_vec) tb="$tb elf32-cr16c.lo elf32.lo $elf" ;;
bfd_elf32_cris_vec) tb="$tb elf32-cris.lo elf32.lo $elf" ;;
bfd_elf32_crx_vec) tb="$tb elf32-crx.lo elf32.lo $elf" ;;
@@ -640,6 +664,8 @@ do
bfd_elf32_m88k_vec) tb="$tb elf32-m88k.lo elf32.lo $elf" ;;
bfd_elf32_mcore_big_vec) tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
bfd_elf32_mcore_little_vec) tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
+ bfd_elf32_mep_vec) tb="$tb elf32-mep.lo elf32.lo $elf" ;;
+ bfd_elf32_mep_little_vec) tb="$tb elf32-mep.lo elf32.lo $elf" ;;
bfd_elf32_mn10200_vec) tb="$tb elf-m10200.lo elf32.lo $elf" ;;
bfd_elf32_mn10300_vec) tb="$tb elf-m10300.lo elf32.lo $elf" ;;
bfd_elf32_mt_vec) tb="$tb elf32-mt.lo elf32.lo $elf" ;;
@@ -656,24 +682,29 @@ do
bfd_elf32_powerpcle_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
bfd_elf32_powerpc_vxworks_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
bfd_elf32_s390_vec) tb="$tb elf32-s390.lo elf32.lo $elf" ;;
+ bfd_elf32_bigscore_vec) tb="$tb elf32-score.lo elf32.lo $elf" ;;
+ bfd_elf32_littlescore_vec) tb="$tb elf32-score.lo elf32.lo $elf" ;;
# FIXME: We include cofflink.lo not because it's needed for
# bfd_elf32_sh64[l]_vec, but because we include bfd_elf32_sh[l]_vec
# which needs it but does not list it. Should be fixed in right place.
- bfd_elf32_sh64_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
- bfd_elf32_sh64l_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
- bfd_elf32_sh64lin_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
- bfd_elf32_sh64blin_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
- bfd_elf32_sh64lnbsd_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf32.lo $elf cofflink.lo" ;;
- bfd_elf32_sh64nbsd_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf32.lo $elf cofflink.lo" ;;
- bfd_elf32_sh_vec) tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo" ;;
- bfd_elf32_shblin_vec) tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
- bfd_elf32_shl_vec) tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo" ;;
- bfd_elf32_shl_symbian_vec) tb="$tb elf32-sh-symbian.lo elf32-sh64-com.lo elf32.lo $elf coff-sh.lo" ;;
- bfd_elf32_shlin_vec) tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
- bfd_elf32_shlnbsd_vec) tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
- bfd_elf32_shnbsd_vec) tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
+ bfd_elf32_sh64_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
+ bfd_elf32_sh64l_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
+ bfd_elf32_sh64lin_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
+ bfd_elf32_sh64blin_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" target_size=64 ;;
+ bfd_elf32_sh64lnbsd_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" ;;
+ bfd_elf32_sh64nbsd_vec) tb="$tb elf32-sh64.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf cofflink.lo" ;;
+ bfd_elf32_sh_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
+ bfd_elf32_shblin_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
+ bfd_elf32_shl_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
+ bfd_elf32_shl_symbian_vec) tb="$tb elf32-sh-symbian.lo elf32-sh64-com.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
+ bfd_elf32_shlin_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
+ bfd_elf32_shlnbsd_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
+ bfd_elf32_shlvxworks_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
+ bfd_elf32_shnbsd_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
+ bfd_elf32_shvxworks_vec) tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo" ;;
bfd_elf32_sparc_vec) tb="$tb elf32-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf32.lo $elf" ;;
bfd_elf32_sparc_vxworks_vec) tb="$tb elf32-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf32.lo $elf" ;;
+ bfd_elf32_spu_vec) tb="$tb elf32-spu.lo elf32.lo $elf" ;;
bfd_elf32_tradbigmips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
bfd_elf32_tradlittlemips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
bfd_elf32_us_cris_vec) tb="$tb elf32-cris.lo elf32.lo $elf" ;;
@@ -705,8 +736,10 @@ do
bfd_elf64_sh64lnbsd_vec) tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
bfd_elf64_sh64nbsd_vec) tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
bfd_elf64_sparc_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
+ bfd_elf64_sparc_freebsd_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
bfd_elf64_tradbigmips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
bfd_elf64_tradlittlemips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
+ bfd_elf64_x86_64_freebsd_vec) tb="$tb elf64-x86-64.lo elf64.lo $elf"; target_size=64 ;;
bfd_elf64_x86_64_vec) tb="$tb elf64-x86-64.lo elf64.lo $elf"; target_size=64 ;;
bfd_mmo_vec) tb="$tb mmo.lo" target_size=64 ;;
bfd_powerpc_pe_vec) tb="$tb pe-ppc.lo peigen.lo cofflink.lo" ;;
@@ -729,6 +762,7 @@ do
i386aout_vec) tb="$tb i386aout.lo aout32.lo" ;;
i386bsd_vec) tb="$tb i386bsd.lo aout32.lo" ;;
i386coff_vec) tb="$tb coff-i386.lo cofflink.lo" ;;
+ x86_64coff_vec) tb="$tb coff-x86_64.lo cofflink.lo"; target_size=64 ;;
i386dynix_vec) tb="$tb i386dynix.lo aout32.lo" ;;
i386freebsd_vec) tb="$tb i386freebsd.lo aout32.lo" ;;
i386linux_vec) tb="$tb i386linux.lo aout32.lo" ;;
@@ -740,6 +774,8 @@ do
i386os9k_vec) tb="$tb i386os9k.lo aout32.lo" ;;
i386pe_vec) tb="$tb pe-i386.lo peigen.lo cofflink.lo" ;;
i386pei_vec) tb="$tb pei-i386.lo peigen.lo cofflink.lo" ;;
+ x86_64pe_vec) tb="$tb pe-x86_64.lo pex64igen.lo cofflink.lo"; target_size=64 ;;
+ x86_64pei_vec) tb="$tb pei-x86_64.lo pex64igen.lo cofflink.lo"; target_size=64 ;;
i860coff_vec) tb="$tb coff-i860.lo cofflink.lo" ;;
icoff_big_vec) tb="$tb coff-i960.lo cofflink.lo" ;;
icoff_little_vec) tb="$tb coff-i960.lo cofflink.lo" ;;
@@ -890,7 +926,7 @@ fi # all_targets is true
case ${host64}-${target64}-${want64} in
*true*)
wordsize=64
- bfd_libs='$(BFD64_LIBS) $(BFD32_LIBS)'
+ bfd64_libs='$(BFD64_LIBS)'
all_backends='$(BFD64_BACKENDS) $(BFD32_BACKENDS)'
if test $BFD_HOST_64_BIT_DEFINED = 0; then
AC_MSG_WARN([You have requested a 64 bit BFD configuration, but])
@@ -911,13 +947,12 @@ case ${host64}-${target64}-${want64} in
;;
false-false-false)
wordsize=32
- bfd_libs='$(BFD32_LIBS)'
all_backends='$(BFD32_BACKENDS)'
;;
esac
AC_SUBST(wordsize)
-AC_SUBST(bfd_libs)
+AC_SUBST(bfd64_libs)
AC_SUBST(all_backends)
AC_SUBST(bfd_backends)
AC_SUBST(bfd_machines)
@@ -962,7 +997,28 @@ esac
rm -f doc/config.status
AC_CONFIG_FILES([Makefile doc/Makefile bfd-in3.h:bfd-in2.h po/Makefile.in:po/Make-in])
-AC_CONFIG_COMMANDS([default],[[sed -e '/SRC-POTFILES =/r po/SRC-POTFILES' -e '/BLD-POTFILES =/r po/BLD-POTFILES' po/Makefile.in > po/Makefile]],[[]])
+
+dnl We need this duplication, even though we use AM_PO_SUBDIRS, because of
+dnl our two separate POTFILES. Yuck.
+AC_CONFIG_COMMANDS([default],
+[[
+case "$srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+esac
+POFILES=
+GMOFILES=
+for lang in dummy $OBSOLETE_ALL_LINGUAS; do
+ if test $lang != dummy; then
+ POFILES="$POFILES $srcdirpre$lang.po"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ fi
+done
+sed -e '/SRC-POTFILES =/r po/SRC-POTFILES' \
+ -e '/BLD-POTFILES =/r po/BLD-POTFILES' \
+ -e "s,@POFILES@,$POFILES," \
+ -e "s,@GMOFILES@,$GMOFILES," \
+ po/Makefile.in > po/Makefile]],[[]])
dnl Required by html and install-html
AC_SUBST(datarootdir)
diff --git a/bfd/corefile.c b/bfd/corefile.c
index 602de911a2c5..58cd7f613f6d 100644
--- a/bfd/corefile.c
+++ b/bfd/corefile.c
@@ -1,6 +1,6 @@
/* Core file generic interface routines for BFD.
- Copyright 1990, 1991, 1992, 1993, 1994, 2000, 2001, 2002, 2003, 2005
- Free Software Foundation, Inc.
+ Copyright 1990, 1991, 1992, 1993, 1994, 2000, 2001, 2002, 2003, 2005,
+ 2007 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -30,8 +30,8 @@ DESCRIPTION
These are functions pertaining to core files.
*/
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
/*
diff --git a/bfd/cpu-alpha.c b/bfd/cpu-alpha.c
index 48b748d9f36e..db7abfbdb29f 100644
--- a/bfd/cpu-alpha.c
+++ b/bfd/cpu-alpha.c
@@ -1,5 +1,5 @@
/* BFD support for the Alpha architecture.
- Copyright 1992, 1993, 1998, 2000, 2002, 2003
+ Copyright 1992, 1993, 1998, 2000, 2002, 2003, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#define N(BITS_WORD, BITS_ADDR, NUMBER, PRINT, DEFAULT, NEXT) \
diff --git a/bfd/cpu-arc.c b/bfd/cpu-arc.c
index ef97da0eda2e..bf9a739149f4 100644
--- a/bfd/cpu-arc.c
+++ b/bfd/cpu-arc.c
@@ -1,5 +1,6 @@
/* BFD support for the ARC processor
- Copyright 1994, 1995, 1997, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1994, 1995, 1997, 2001, 2002, 2007
+ Free Software Foundation, Inc.
Contributed by Doug Evans (dje@cygnus.com).
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#define ARC(mach, print_name, default_p, next) \
diff --git a/bfd/cpu-arm.c b/bfd/cpu-arm.c
index a28a1f9e8fcf..a44b98395eee 100644
--- a/bfd/cpu-arm.c
+++ b/bfd/cpu-arm.c
@@ -1,5 +1,5 @@
/* BFD support for the ARM processor
- Copyright 1994, 1997, 1999, 2000, 2002, 2003, 2004, 2005
+ Copyright 1994, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
@@ -19,8 +19,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "libiberty.h"
@@ -92,7 +92,8 @@ processors[] =
{ bfd_mach_arm_4, "strongarm1100" },
{ bfd_mach_arm_XScale, "xscale" },
{ bfd_mach_arm_ep9312, "ep9312" },
- { bfd_mach_arm_iWMMXt, "iwmmxt" }
+ { bfd_mach_arm_iWMMXt, "iwmmxt" },
+ { bfd_mach_arm_iWMMXt2, "iwmmxt2" }
};
static bfd_boolean
@@ -137,7 +138,8 @@ static const bfd_arch_info_type arch_info_struct[] =
N (bfd_mach_arm_5TE, "armv5te", FALSE, & arch_info_struct[9]),
N (bfd_mach_arm_XScale, "xscale", FALSE, & arch_info_struct[10]),
N (bfd_mach_arm_ep9312, "ep9312", FALSE, & arch_info_struct[11]),
- N (bfd_mach_arm_iWMMXt,"iwmmxt", FALSE, NULL)
+ N (bfd_mach_arm_iWMMXt, "iwmmxt", FALSE, & arch_info_struct[12]),
+ N (bfd_mach_arm_iWMMXt2, "iwmmxt2", FALSE, NULL)
};
const bfd_arch_info_type bfd_arm_arch =
@@ -179,7 +181,9 @@ bfd_arm_merge_machines (bfd *ibfd, bfd *obfd)
Intel XScale binary, since these architecture have co-processors which
will not both be present on the same physical hardware. */
else if (in == bfd_mach_arm_ep9312
- && (out == bfd_mach_arm_XScale || out == bfd_mach_arm_iWMMXt))
+ && (out == bfd_mach_arm_XScale
+ || out == bfd_mach_arm_iWMMXt
+ || out == bfd_mach_arm_iWMMXt2))
{
_bfd_error_handler (_("\
ERROR: %B is compiled for the EP9312, whereas %B is compiled for XScale"),
@@ -188,7 +192,9 @@ ERROR: %B is compiled for the EP9312, whereas %B is compiled for XScale"),
return FALSE;
}
else if (out == bfd_mach_arm_ep9312
- && (in == bfd_mach_arm_XScale || in == bfd_mach_arm_iWMMXt))
+ && (in == bfd_mach_arm_XScale
+ || in == bfd_mach_arm_iWMMXt
+ || in == bfd_mach_arm_iWMMXt2))
{
_bfd_error_handler (_("\
ERROR: %B is compiled for the EP9312, whereas %B is compiled for XScale"),
@@ -309,6 +315,7 @@ bfd_arm_update_notes (bfd *abfd, const char *note_section)
case bfd_mach_arm_XScale: expected = "XScale"; break;
case bfd_mach_arm_ep9312: expected = "ep9312"; break;
case bfd_mach_arm_iWMMXt: expected = "iWMMXt"; break;
+ case bfd_mach_arm_iWMMXt2: expected = "iWMMXt2"; break;
}
if (strcmp (arch_string, expected) != 0)
@@ -355,7 +362,8 @@ architectures[] =
{ "armv5te", bfd_mach_arm_5TE },
{ "XScale", bfd_mach_arm_XScale },
{ "ep9312", bfd_mach_arm_ep9312 },
- { "iWMMXt", bfd_mach_arm_iWMMXt }
+ { "iWMMXt", bfd_mach_arm_iWMMXt },
+ { "iWMMXt2", bfd_mach_arm_iWMMXt2 }
};
/* Extract the machine number stored in a note section. */
@@ -402,14 +410,22 @@ bfd_arm_get_mach_from_notes (bfd *abfd, const char *note_section)
}
bfd_boolean
-bfd_is_arm_mapping_symbol_name (const char * name)
+bfd_is_arm_special_symbol_name (const char * name, int type)
{
/* The ARM compiler outputs several obsolete forms. Recognize them
- in addition to the standard $a, $t and $d. */
- return (name != NULL)
- && (name[0] == '$')
- && ((name[1] == 'a') || (name[1] == 't') || (name[1] == 'd')
- || (name[1] == 'm') || (name[1] == 'f') || (name[1] == 'p'))
- && (name[2] == 0 || name[2] == '.');
+ in addition to the standard $a, $t and $d. We are somewhat loose
+ in what we accept here, since the full set is not documented. */
+ if (!name || name[0] != '$')
+ return FALSE;
+ if (name[1] == 'a' || name[1] == 't' || name[1] == 'd')
+ type &= BFD_ARM_SPECIAL_SYM_TYPE_MAP;
+ else if (name[1] == 'm' || name[1] == 'f' || name[1] == 'p')
+ type &= BFD_ARM_SPECIAL_SYM_TYPE_TAG;
+ else if (name[1] >= 'a' && name[1] <= 'z')
+ type &= BFD_ARM_SPECIAL_SYM_TYPE_OTHER;
+ else
+ return FALSE;
+
+ return (type != 0 && (name[2] == 0 || name[2] == '.'));
}
diff --git a/bfd/cpu-avr.c b/bfd/cpu-avr.c
index 4c8c193f6169..82b282ac22f3 100644
--- a/bfd/cpu-avr.c
+++ b/bfd/cpu-avr.c
@@ -1,5 +1,5 @@
/* BFD library support routines for the AVR architecture.
- Copyright 1999, 2000, 2002, 2006 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2002, 2006, 2007 Free Software Foundation, Inc.
Contributed by Denis Chertykov <denisc@overta.ru>
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
/* This routine is provided two arch_infos and works out which AVR
@@ -82,7 +82,10 @@ static const bfd_arch_info_type arch_info_struct[] =
N (16, bfd_mach_avr4, "avr:4", FALSE, & arch_info_struct[4]),
/* ATmega161, ATmega163, ATmega32, AT94K. */
- N (22, bfd_mach_avr5, "avr:5", FALSE, NULL)
+ N (22, bfd_mach_avr5, "avr:5", FALSE, & arch_info_struct[5]),
+
+ /* ATmega256x. */
+ N (22, bfd_mach_avr6, "avr:6", FALSE, NULL)
};
const bfd_arch_info_type bfd_avr_arch =
diff --git a/bfd/cpu-bfin.c b/bfd/cpu-bfin.c
index 6de6757a9a82..e30ee37d08c3 100644
--- a/bfd/cpu-bfin.c
+++ b/bfd/cpu-bfin.c
@@ -1,6 +1,6 @@
/* BFD Support for the ADI Blackfin processor.
- Copyright 2005 Free Software Foundation, Inc.
+ Copyright 2005, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_bfin_arch =
diff --git a/bfd/cpu-cr16.c b/bfd/cpu-cr16.c
new file mode 100644
index 000000000000..5695f0eda87b
--- /dev/null
+++ b/bfd/cpu-cr16.c
@@ -0,0 +1,40 @@
+/* BFD support for the CR16 processor.
+ Copyright 2007 Free Software Foundation, Inc.
+ Written by M R Swami Reddy
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+
+
+const bfd_arch_info_type bfd_cr16_arch =
+ {
+ 16, /* 16 bits in a word. */
+ 32, /* 32 bits in an address. */
+ 8, /* 8 bits in a byte. */
+ bfd_arch_cr16, /* enum bfd_architecture arch. */
+ bfd_mach_cr16,
+ "cr16", /* Arch name. */
+ "cr16", /* Printable name. */
+ 1, /* Unsigned int section alignment power. */
+ TRUE, /* The one and only. */
+ bfd_default_compatible,
+ bfd_default_scan ,
+ 0,
+ };
diff --git a/bfd/cpu-cr16c.c b/bfd/cpu-cr16c.c
index 1ab39ed6fec4..08eea01a84ed 100644
--- a/bfd/cpu-cr16c.c
+++ b/bfd/cpu-cr16c.c
@@ -1,5 +1,5 @@
/* BFD support for the CR16C processor.
- Copyright 2004 Free Software Foundation, Inc.
+ Copyright 2004, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@
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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_cr16c_arch =
diff --git a/bfd/cpu-cris.c b/bfd/cpu-cris.c
index e89d74b5055c..0e6c24d32f8d 100644
--- a/bfd/cpu-cris.c
+++ b/bfd/cpu-cris.c
@@ -1,5 +1,6 @@
/* BFD support for the Axis CRIS architecture.
- Copyright 2000, 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2000, 2002, 2004, 2005, 2007
+ Free Software Foundation, Inc.
Contributed by Axis Communications AB.
Written by Hans-Peter Nilsson.
@@ -19,8 +20,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
/* This routine is provided two arch_infos and returns the lowest common
diff --git a/bfd/cpu-crx.c b/bfd/cpu-crx.c
index 9605dd578f43..855d2e6d9aaf 100644
--- a/bfd/cpu-crx.c
+++ b/bfd/cpu-crx.c
@@ -1,5 +1,5 @@
/* BFD support for the CRX processor.
- Copyright 2004 Free Software Foundation, Inc.
+ Copyright 2004, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@
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 "bfd.h"
#include "libbfd.h"
diff --git a/bfd/cpu-d10v.c b/bfd/cpu-d10v.c
index 18061a137976..77ca6ff4974b 100644
--- a/bfd/cpu-d10v.c
+++ b/bfd/cpu-d10v.c
@@ -1,5 +1,6 @@
/* BFD support for the D10V processor
- Copyright 1996, 1999, 2000, 2002, 2005 Free Software Foundation, Inc.
+ Copyright 1996, 1999, 2000, 2002, 2005, 2007
+ Free Software Foundation, Inc.
Contributed by Martin Hunt (hunt@cygnus.com).
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +20,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
static const bfd_arch_info_type d10v_ts3_info =
diff --git a/bfd/cpu-d30v.c b/bfd/cpu-d30v.c
index 5346cb3219ff..cec22428b225 100644
--- a/bfd/cpu-d30v.c
+++ b/bfd/cpu-d30v.c
@@ -1,5 +1,5 @@
/* BFD support for the Mitsubishi D30V processor
- Copyright 1997, 2002, 2005 Free Software Foundation, Inc.
+ Copyright 1997, 2002, 2005, 2007 Free Software Foundation, Inc.
Contributed by Martin Hunt (hunt@cygnus.com).
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_d30v_arch =
diff --git a/bfd/cpu-dlx.c b/bfd/cpu-dlx.c
index d4771cae7a79..f71ed098bef5 100644
--- a/bfd/cpu-dlx.c
+++ b/bfd/cpu-dlx.c
@@ -1,5 +1,5 @@
/* BFD support for the DLX Microprocessor architecture.
- Copyright 2002 Free Software Foundation, Inc.
+ Copyright 2002, 2007 Free Software Foundation, Inc.
Hacked by Kuang Hwa Lin <kuang@sbcglobal.net>
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_dlx_arch =
diff --git a/bfd/cpu-fr30.c b/bfd/cpu-fr30.c
index 585d820b84a4..fd3057436d6b 100644
--- a/bfd/cpu-fr30.c
+++ b/bfd/cpu-fr30.c
@@ -1,5 +1,5 @@
/* BFD support for the FR30 processor.
- Copyright 1998, 2002 Free Software Foundation, Inc.
+ Copyright 1998, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_fr30_arch =
diff --git a/bfd/cpu-frv.c b/bfd/cpu-frv.c
index f80066b9bbac..4d803095c78c 100644
--- a/bfd/cpu-frv.c
+++ b/bfd/cpu-frv.c
@@ -1,5 +1,5 @@
/* BFD support for the FRV processor.
- Copyright 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#define FRV_ARCH(MACHINE, NAME, DEFAULT, NEXT) \
diff --git a/bfd/cpu-h8300.c b/bfd/cpu-h8300.c
index e7a2bf263ea2..cb9d0d8715b8 100644
--- a/bfd/cpu-h8300.c
+++ b/bfd/cpu-h8300.c
@@ -1,6 +1,6 @@
/* BFD library support routines for the Renesas H8/300 architecture.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 2000, 2001, 2002,
- 2003, 2004 Free Software Foundation, Inc.
+ 2003, 2004, 2007 Free Software Foundation, Inc.
Hacked by Steve Chamberlain of Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
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 "bfd.h"
#include "libbfd.h"
static bfd_boolean
diff --git a/bfd/cpu-h8500.c b/bfd/cpu-h8500.c
index 11193275eec8..78788aec66ae 100644
--- a/bfd/cpu-h8500.c
+++ b/bfd/cpu-h8500.c
@@ -1,5 +1,5 @@
/* BFD library support routines for the H8/500 architecture.
- Copyright 1993, 1995, 1999, 2000, 2001, 2002, 2003, 2005
+ Copyright 1993, 1995, 1999, 2000, 2001, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
Hacked by Steve Chamberlain of Cygnus Support.
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
static bfd_boolean scan_mach
diff --git a/bfd/cpu-hppa.c b/bfd/cpu-hppa.c
index de9d1f43b277..b11ce8d94b25 100644
--- a/bfd/cpu-hppa.c
+++ b/bfd/cpu-hppa.c
@@ -1,5 +1,5 @@
/* BFD support for the HP Precision Architecture architecture.
- Copyright 1992, 1995, 1998, 1999, 2000, 2002, 2003
+ Copyright 1992, 1995, 1998, 1999, 2000, 2002, 2003, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
static const bfd_arch_info_type bfd_hppa10_arch =
diff --git a/bfd/cpu-i370.c b/bfd/cpu-i370.c
index d7d712f3ff99..1fa97580602f 100644
--- a/bfd/cpu-i370.c
+++ b/bfd/cpu-i370.c
@@ -1,5 +1,5 @@
/* BFD i370 CPU definition
- Copyright 1994, 1995, 1996, 1998, 1999, 2000, 2002, 2005
+ Copyright 1994, 1995, 1996, 1998, 1999, 2000, 2002, 2005, 2007
Free Software Foundation, Inc.
Contributed by Ian Lance Taylor, Cygnus Support.
Hacked by Linas Vepstas <linas@linas.org> in 1998, 1999
@@ -21,8 +21,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
static const bfd_arch_info_type arch_info_struct[] =
diff --git a/bfd/cpu-i386.c b/bfd/cpu-i386.c
index 8886c47d0a09..339c7d994001 100644
--- a/bfd/cpu-i386.c
+++ b/bfd/cpu-i386.c
@@ -1,5 +1,5 @@
/* BFD support for the Intel 386 architecture.
- Copyright 1992, 1994, 1995, 1996, 1998, 2000, 2001, 2002, 2004
+ Copyright 1992, 1994, 1995, 1996, 1998, 2000, 2001, 2002, 2004, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_x86_64_arch_intel_syntax =
diff --git a/bfd/cpu-i860.c b/bfd/cpu-i860.c
index 33262fe553d0..df38ddfc9bab 100644
--- a/bfd/cpu-i860.c
+++ b/bfd/cpu-i860.c
@@ -1,5 +1,6 @@
/* BFD support for the Intel 860 architecture.
- Copyright 1992, 1995, 2000, 2002 Free Software Foundation, Inc.
+ Copyright 1992, 1995, 2000, 2002, 2007
+ Free Software Foundation, Inc.
Created mostly by substituting "860" for "386" in cpu-i386.c
Harry Dolan <dolan@ssd.intel.com>, October 1995
@@ -19,8 +20,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_i860_arch =
diff --git a/bfd/cpu-i960.c b/bfd/cpu-i960.c
index 7a9be7ca640a..3569aac789d2 100644
--- a/bfd/cpu-i960.c
+++ b/bfd/cpu-i960.c
@@ -1,26 +1,26 @@
/* BFD library support routines for the i960 architecture.
- Copyright 1990, 1991, 1993, 1994, 1996, 1999, 2000, 2001, 2002
- Free Software Foundation, Inc.
+ Copyright 1990, 1991, 1993, 1994, 1996, 1999, 2000, 2001, 2002, 2006,
+ 2007 Free Software Foundation, Inc.
Hacked by Steve Chamberlain of Cygnus Support.
-This file is part of BFD, the Binary File Descriptor library.
+ This file is part of BFD, the Binary File Descriptor library.
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+ This program is free software; you can 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.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
static bfd_boolean scan_960_mach
@@ -57,7 +57,7 @@ scan_960_mach (ap, string)
}
/* In some bfds the cpu-id is written as "80960KA", "80960KB",
"80960CA" or "80960MC". */
- else if (strncmp ("80960", string, 5) == 0)
+ else if (CONST_STRNEQ (string, "80960"))
{
string += 5;
diff --git a/bfd/cpu-ia64.c b/bfd/cpu-ia64.c
index e172f5a85f2b..a38d24de41bc 100644
--- a/bfd/cpu-ia64.c
+++ b/bfd/cpu-ia64.c
@@ -1,5 +1,5 @@
/* BFD support for the ia64 architecture.
- Copyright 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright 1998, 1999, 2000, 2002, 2007 Free Software Foundation, Inc.
Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_ia64_elf32_arch =
diff --git a/bfd/cpu-ip2k.c b/bfd/cpu-ip2k.c
index a03df757af6c..9e303d744c55 100644
--- a/bfd/cpu-ip2k.c
+++ b/bfd/cpu-ip2k.c
@@ -1,5 +1,5 @@
/* BFD support for the Scenix IP2xxx processor.
- Copyright 2000, 2002 Free Software Foundation, Inc.
+ Copyright 2000, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@
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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_ip2k_nonext_arch =
diff --git a/bfd/cpu-iq2000.c b/bfd/cpu-iq2000.c
index c3331db05be5..ace95e2780ef 100644
--- a/bfd/cpu-iq2000.c
+++ b/bfd/cpu-iq2000.c
@@ -1,5 +1,5 @@
/* BFD support for the Vitesse IQ2000 processor.
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
static const bfd_arch_info_type arch_info_struct[] =
diff --git a/bfd/cpu-m10200.c b/bfd/cpu-m10200.c
index 6f511113906c..d3d596f2d34a 100644
--- a/bfd/cpu-m10200.c
+++ b/bfd/cpu-m10200.c
@@ -1,5 +1,5 @@
/* BFD support for the Matsushita 10200 processor
- Copyright 1996, 1997, 2002 Free Software Foundation, Inc.
+ Copyright 1996, 1997, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_mn10200_arch =
diff --git a/bfd/cpu-m10300.c b/bfd/cpu-m10300.c
index c417928d83f3..7aece6e69d77 100644
--- a/bfd/cpu-m10300.c
+++ b/bfd/cpu-m10300.c
@@ -1,5 +1,5 @@
/* BFD support for the Matsushita 10300 processor
- Copyright 1996, 1997, 1999, 2000, 2002, 2003
+ Copyright 1996, 1997, 1999, 2000, 2002, 2003, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_am33_2_arch =
diff --git a/bfd/cpu-m32c.c b/bfd/cpu-m32c.c
index e60b746ffc2d..f61ff980f638 100644
--- a/bfd/cpu-m32c.c
+++ b/bfd/cpu-m32c.c
@@ -1,5 +1,5 @@
/* BFD support for the M16C/M32C processors.
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@
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 "bfd.h"
#include "libbfd.h"
static const bfd_arch_info_type arch_info_struct[] =
diff --git a/bfd/cpu-m32r.c b/bfd/cpu-m32r.c
index 0b5c8dafcdaa..dbc742a1c105 100644
--- a/bfd/cpu-m32r.c
+++ b/bfd/cpu-m32r.c
@@ -1,5 +1,6 @@
/* BFD support for the M32R processor.
- Copyright 1996, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+ Copyright 1996, 1999, 2000, 2002, 2003, 2007
+ Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
#define N(number, print, default, next) \
diff --git a/bfd/cpu-m68hc11.c b/bfd/cpu-m68hc11.c
index 386d2480de69..e293a2cf5dc7 100644
--- a/bfd/cpu-m68hc11.c
+++ b/bfd/cpu-m68hc11.c
@@ -1,5 +1,5 @@
/* BFD support for the Motorola 68HC11 processor
- Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_m68hc11_arch =
diff --git a/bfd/cpu-m68hc12.c b/bfd/cpu-m68hc12.c
index 43520a1028f6..52c4f2f23e63 100644
--- a/bfd/cpu-m68hc12.c
+++ b/bfd/cpu-m68hc12.c
@@ -1,5 +1,5 @@
/* BFD support for the Motorola 68HC12 processor
- Copyright 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2002, 2003, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_m68hc12s_arch =
diff --git a/bfd/cpu-m68k.c b/bfd/cpu-m68k.c
index 5be4aa047cce..07abf9da130d 100644
--- a/bfd/cpu-m68k.c
+++ b/bfd/cpu-m68k.c
@@ -1,6 +1,6 @@
/* BFD library support routines for architectures.
Copyright 1990, 1991, 1992, 1993, 1994, 1997, 1998, 2000, 2001, 2002,
- 2003, 2004, 2006 Free Software Foundation, Inc.
+ 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
Hacked by Steve Chamberlain of Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "opcode/m68k.h"
@@ -41,53 +41,60 @@ static const bfd_arch_info_type arch_info_struct[] =
N(bfd_mach_m68040, "m68k:68040", FALSE, &arch_info_struct[6]),
N(bfd_mach_m68060, "m68k:68060", FALSE, &arch_info_struct[7]),
N(bfd_mach_cpu32, "m68k:cpu32", FALSE, &arch_info_struct[8]),
+ N(bfd_mach_fido, "m68k:fido", FALSE, &arch_info_struct[9]),
/* Various combinations of CF architecture features */
N(bfd_mach_mcf_isa_a_nodiv, "m68k:isa-a:nodiv",
- FALSE, &arch_info_struct[9]),
- N(bfd_mach_mcf_isa_a, "m68k:isa-a",
FALSE, &arch_info_struct[10]),
- N(bfd_mach_mcf_isa_a_mac, "m68k:isa-a:mac",
+ N(bfd_mach_mcf_isa_a, "m68k:isa-a",
FALSE, &arch_info_struct[11]),
- N(bfd_mach_mcf_isa_a_emac, "m68k:isa-a:emac",
+ N(bfd_mach_mcf_isa_a_mac, "m68k:isa-a:mac",
FALSE, &arch_info_struct[12]),
- N(bfd_mach_mcf_isa_aplus, "m68k:isa-aplus",
+ N(bfd_mach_mcf_isa_a_emac, "m68k:isa-a:emac",
FALSE, &arch_info_struct[13]),
- N(bfd_mach_mcf_isa_aplus_mac, "m68k:isa-aplus:mac",
+ N(bfd_mach_mcf_isa_aplus, "m68k:isa-aplus",
FALSE, &arch_info_struct[14]),
- N(bfd_mach_mcf_isa_aplus_emac, "m68k:isa-aplus:emac",
+ N(bfd_mach_mcf_isa_aplus_mac, "m68k:isa-aplus:mac",
FALSE, &arch_info_struct[15]),
- N(bfd_mach_mcf_isa_b_nousp, "m68k:isa-b:nousp",
+ N(bfd_mach_mcf_isa_aplus_emac, "m68k:isa-aplus:emac",
FALSE, &arch_info_struct[16]),
- N(bfd_mach_mcf_isa_b_nousp_mac, "m68k:isa-b:nousp:mac",
+ N(bfd_mach_mcf_isa_b_nousp, "m68k:isa-b:nousp",
FALSE, &arch_info_struct[17]),
- N(bfd_mach_mcf_isa_b_nousp_emac, "m68k:isa-b:nousp:emac",
+ N(bfd_mach_mcf_isa_b_nousp_mac, "m68k:isa-b:nousp:mac",
FALSE, &arch_info_struct[18]),
- N(bfd_mach_mcf_isa_b, "m68k:isa-b",
+ N(bfd_mach_mcf_isa_b_nousp_emac, "m68k:isa-b:nousp:emac",
FALSE, &arch_info_struct[19]),
- N(bfd_mach_mcf_isa_b_mac, "m68k:isa-b:mac",
+ N(bfd_mach_mcf_isa_b, "m68k:isa-b",
FALSE, &arch_info_struct[20]),
- N(bfd_mach_mcf_isa_b_emac, "m68k:isa-b:emac",
+ N(bfd_mach_mcf_isa_b_mac, "m68k:isa-b:mac",
FALSE, &arch_info_struct[21]),
- N(bfd_mach_mcf_isa_b_float, "m68k:isa-b:float",
+ N(bfd_mach_mcf_isa_b_emac, "m68k:isa-b:emac",
FALSE, &arch_info_struct[22]),
- N(bfd_mach_mcf_isa_b_float_mac, "m68k:isa-b:float:mac",
+ N(bfd_mach_mcf_isa_b_float, "m68k:isa-b:float",
FALSE, &arch_info_struct[23]),
- N(bfd_mach_mcf_isa_b_float_emac, "m68k:isa-b:float:emac",
+ N(bfd_mach_mcf_isa_b_float_mac, "m68k:isa-b:float:mac",
FALSE, &arch_info_struct[24]),
+ N(bfd_mach_mcf_isa_b_float_emac, "m68k:isa-b:float:emac",
+ FALSE, &arch_info_struct[25]),
+ N(bfd_mach_mcf_isa_c, "m68k:isa-c",
+ FALSE, &arch_info_struct[26]),
+ N(bfd_mach_mcf_isa_c_mac, "m68k:isa-c:mac",
+ FALSE, &arch_info_struct[27]),
+ N(bfd_mach_mcf_isa_c_emac, "m68k:isa-c:emac",
+ FALSE, &arch_info_struct[28]),
/* Legacy names for CF architectures */
- N(bfd_mach_mcf_isa_a_nodiv, "m68k:5200", FALSE, &arch_info_struct[25]),
- N(bfd_mach_mcf_isa_a_mac,"m68k:5206e", FALSE, &arch_info_struct[26]),
- N(bfd_mach_mcf_isa_a_mac, "m68k:5307", FALSE, &arch_info_struct[27]),
- N(bfd_mach_mcf_isa_b_nousp_mac, "m68k:5407", FALSE, &arch_info_struct[28]),
- N(bfd_mach_mcf_isa_aplus_emac, "m68k:528x", FALSE, &arch_info_struct[29]),
- N(bfd_mach_mcf_isa_aplus_emac, "m68k:521x", FALSE, &arch_info_struct[30]),
- N(bfd_mach_mcf_isa_a_emac, "m68k:5249", FALSE, &arch_info_struct[31]),
+ N(bfd_mach_mcf_isa_a_nodiv, "m68k:5200", FALSE, &arch_info_struct[29]),
+ N(bfd_mach_mcf_isa_a_mac,"m68k:5206e", FALSE, &arch_info_struct[30]),
+ N(bfd_mach_mcf_isa_a_mac, "m68k:5307", FALSE, &arch_info_struct[31]),
+ N(bfd_mach_mcf_isa_b_nousp_mac, "m68k:5407", FALSE, &arch_info_struct[32]),
+ N(bfd_mach_mcf_isa_aplus_emac, "m68k:528x", FALSE, &arch_info_struct[33]),
+ N(bfd_mach_mcf_isa_aplus_emac, "m68k:521x", FALSE, &arch_info_struct[34]),
+ N(bfd_mach_mcf_isa_a_emac, "m68k:5249", FALSE, &arch_info_struct[35]),
N(bfd_mach_mcf_isa_b_float_emac, "m68k:547x",
- FALSE, &arch_info_struct[32]),
+ FALSE, &arch_info_struct[36]),
N(bfd_mach_mcf_isa_b_float_emac, "m68k:548x",
- FALSE, &arch_info_struct[33]),
+ FALSE, &arch_info_struct[37]),
N(bfd_mach_mcf_isa_b_float_emac, "m68k:cfv4e", FALSE, 0),
};
@@ -107,6 +114,7 @@ static const unsigned m68k_arch_features[] =
m68040|m68881|m68851,
m68060|m68881|m68851,
cpu32|m68881,
+ fido_a|m68881,
mcfisa_a,
mcfisa_a|mcfhwdiv,
mcfisa_a|mcfhwdiv|mcfmac,
@@ -123,6 +131,9 @@ static const unsigned m68k_arch_features[] =
mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat,
mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat|mcfmac,
mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat|mcfemac,
+ mcfisa_a|mcfhwdiv|mcfisa_c|mcfusp,
+ mcfisa_a|mcfhwdiv|mcfisa_c|mcfusp|mcfmac,
+ mcfisa_a|mcfhwdiv|mcfisa_c|mcfusp|mcfemac,
};
/* Return the count of bits set in MASK */
@@ -202,24 +213,48 @@ bfd_m68k_compatible (const bfd_arch_info_type *a,
if (a->mach <= bfd_mach_m68060 && b->mach <= bfd_mach_m68060)
/* Merge m68k machine. */
return a->mach > b->mach ? a : b;
- else if (a->mach == bfd_mach_cpu32 && b->mach == bfd_mach_cpu32)
- /* CPU32 is compatible with itself. */
- return a;
- else if (a->mach >= bfd_mach_mcf_isa_a_nodiv
- && b->mach >= bfd_mach_mcf_isa_a_nodiv)
+ else if (a->mach >= bfd_mach_cpu32 && b->mach >= bfd_mach_cpu32)
{
- /* Merge cf machine. */
+ /* Merge the machine features. */
unsigned features = (bfd_m68k_mach_to_features (a->mach)
| bfd_m68k_mach_to_features (b->mach));
+ /* CPU32 and Coldfire are incompatible. */
+ if ((~features & (cpu32 | mcfisa_a)) == 0)
+ return NULL;
+
+ /* Fido and Coldfire are incompatible. */
+ if ((~features & (fido_a | mcfisa_a)) == 0)
+ return NULL;
+
/* ISA A+ and ISA B are incompatible. */
if ((~features & (mcfisa_aa | mcfisa_b)) == 0)
return NULL;
+ /* ISA B and ISA C are incompatible. */
+ if ((~features & (mcfisa_b | mcfisa_c)) == 0)
+ return NULL;
+
/* MAC and EMAC code cannot be merged. */
if ((~features & (mcfmac | mcfemac)) == 0)
return NULL;
+ /* CPU32 is compatible with Fido except that Fido does not
+ support tbl instructions. Warn when the user wants to mix
+ the two. */
+ if ((a->mach == bfd_mach_cpu32 && b->mach == bfd_mach_fido)
+ || (a->mach == bfd_mach_fido && b->mach == bfd_mach_cpu32))
+ {
+ static int cpu32_fido_mix_warning;
+ if (!cpu32_fido_mix_warning)
+ {
+ cpu32_fido_mix_warning = 1;
+ (*_bfd_error_handler) ("warning: linking CPU32 objects with fido objects");
+ }
+ return bfd_lookup_arch (a->arch,
+ bfd_m68k_features_to_mach (fido_a | m68881));
+ }
+
return bfd_lookup_arch (a->arch, bfd_m68k_features_to_mach (features));
}
else
diff --git a/bfd/cpu-m88k.c b/bfd/cpu-m88k.c
index 394b42ec5d06..ce0dbb4ee01b 100644
--- a/bfd/cpu-m88k.c
+++ b/bfd/cpu-m88k.c
@@ -1,5 +1,6 @@
/* bfd back-end for m88k support
- Copyright 1990, 1991, 1994, 2000, 2002 Free Software Foundation, Inc.
+ Copyright 1990, 1991, 1994, 2000, 2002, 2007
+ Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_m88k_arch =
diff --git a/bfd/cpu-maxq.c b/bfd/cpu-maxq.c
index 523ef8886163..adf2d8d19267 100644
--- a/bfd/cpu-maxq.c
+++ b/bfd/cpu-maxq.c
@@ -1,5 +1,5 @@
/* BFD support for the MAXQ20/10 architecture.
- Copyright 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2004, 2005, 2007 Free Software Foundation, Inc.
Written by Vineet Sharma(vineets@noida.hcltech.com)
Inderpreet Singh(inderpreetb@noida.hcltech.com)
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
/* MAXQ Archtecture info. */
diff --git a/bfd/cpu-mcore.c b/bfd/cpu-mcore.c
index 949fa430c46d..8957224725b9 100644
--- a/bfd/cpu-mcore.c
+++ b/bfd/cpu-mcore.c
@@ -1,5 +1,5 @@
/* BFD library support routines for Motorola's MCore architecture
- Copyright 1993, 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright 1993, 1999, 2000, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_mcore_arch =
diff --git a/bfd/cpu-mep.c b/bfd/cpu-mep.c
new file mode 100644
index 000000000000..d5ee1d67b423
--- /dev/null
+++ b/bfd/cpu-mep.c
@@ -0,0 +1,28 @@
+/* BFD support for the Toshiba Media Engine Processor.
+ Copyright (C) 2001, 2002, 2004, 2007 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+
+#define MA(x, n, def, y) { 32, 32, 8, bfd_arch_mep, x, "mep", n, \
+ 2, def, bfd_default_compatible, bfd_default_scan, y }
+
+static const bfd_arch_info_type bfd_h1_arch = MA (bfd_mach_mep_h1, "h1", FALSE, NULL);
+const bfd_arch_info_type bfd_mep_arch = MA (bfd_mach_mep, "mep", TRUE, & bfd_h1_arch);
diff --git a/bfd/cpu-mips.c b/bfd/cpu-mips.c
index 5f4dccafbb7a..f4783790c959 100644
--- a/bfd/cpu-mips.c
+++ b/bfd/cpu-mips.c
@@ -1,6 +1,6 @@
/* bfd back-end for mips support
Copyright 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
- 2002, 2003, 2004 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
static const bfd_arch_info_type *mips_compatible
diff --git a/bfd/cpu-mmix.c b/bfd/cpu-mmix.c
index fc0e875c78bb..712713707a28 100644
--- a/bfd/cpu-mmix.c
+++ b/bfd/cpu-mmix.c
@@ -1,5 +1,5 @@
/* BFD library support routines for MMIX.
- Copyright 2001, 2002 Free Software Foundation, Inc.
+ Copyright 2001, 2002, 2007 Free Software Foundation, Inc.
Contributed by Hans-Peter Nilsson (hp@bitrange.com)
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type
diff --git a/bfd/cpu-msp430.c b/bfd/cpu-msp430.c
index 18e371667d61..f7f369a355d8 100644
--- a/bfd/cpu-msp430.c
+++ b/bfd/cpu-msp430.c
@@ -1,5 +1,5 @@
/* BFD library support routines for the MSP architecture.
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc.
Contributed by Dmitry Diky <diwil@mail.ru>
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
static const bfd_arch_info_type *compatible
diff --git a/bfd/cpu-mt.c b/bfd/cpu-mt.c
index 43b442aee9f8..4d07c4347c4f 100644
--- a/bfd/cpu-mt.c
+++ b/bfd/cpu-mt.c
@@ -1,5 +1,5 @@
/* BFD support for the Morpho Technologies MT processor.
- Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2005, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type arch_info_struct[] =
diff --git a/bfd/cpu-ns32k.c b/bfd/cpu-ns32k.c
index f7e2f1197e38..447b26fe9812 100644
--- a/bfd/cpu-ns32k.c
+++ b/bfd/cpu-ns32k.c
@@ -1,6 +1,6 @@
/* BFD support for the ns32k architecture.
Copyright 1990, 1991, 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005 Free Software Foundation, Inc.
+ 2004, 2005, 2007 Free Software Foundation, Inc.
Almost totally rewritten by Ian Dall from initial work
by Andrew Cagney.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "ns32k.h"
diff --git a/bfd/cpu-openrisc.c b/bfd/cpu-openrisc.c
index bf26d51c50ae..a6de202371b6 100644
--- a/bfd/cpu-openrisc.c
+++ b/bfd/cpu-openrisc.c
@@ -1,5 +1,5 @@
/* BFD support for the OpenRISC architecture.
- Copyright 2001, 2002 Free Software Foundation, Inc.
+ Copyright 2001, 2002, 2007 Free Software Foundation, Inc.
Contributed by Johan Rydberg, jrydberg@opencores.org
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#define N(BITS_WORD, BITS_ADDR, NUMBER, PRINT, DEFAULT, NEXT) \
diff --git a/bfd/cpu-or32.c b/bfd/cpu-or32.c
index 41c218b0ffd2..ddb79240a6bc 100644
--- a/bfd/cpu-or32.c
+++ b/bfd/cpu-or32.c
@@ -1,5 +1,5 @@
/* BFD support for the OpenRISC 1000 architecture.
- Copyright 2002 Free Software Foundation, Inc.
+ Copyright 2002, 2007 Free Software Foundation, Inc.
Contributed by Ivan Guzvinec <ivang@opencores.org>
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_or32_arch =
diff --git a/bfd/cpu-pdp11.c b/bfd/cpu-pdp11.c
index 98efd4d33445..7609c8ebb0a1 100644
--- a/bfd/cpu-pdp11.c
+++ b/bfd/cpu-pdp11.c
@@ -1,5 +1,5 @@
/* BFD back-end for PDP-11 support.
- Copyright 2001, 2002 Free Software Foundation, Inc.
+ Copyright 2001, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_pdp11_arch =
diff --git a/bfd/cpu-pj.c b/bfd/cpu-pj.c
index 60f0303116e7..6972ceb65395 100644
--- a/bfd/cpu-pj.c
+++ b/bfd/cpu-pj.c
@@ -1,5 +1,5 @@
/* BFD library support routines for the Pico Java architecture.
- Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
Hacked by Steve Chamberlain of Transmeta. sac@pobox.com
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_pj_arch =
diff --git a/bfd/cpu-powerpc.c b/bfd/cpu-powerpc.c
index 2584d6511622..e35833061298 100644
--- a/bfd/cpu-powerpc.c
+++ b/bfd/cpu-powerpc.c
@@ -1,5 +1,5 @@
/* BFD PowerPC CPU definition
- Copyright 1994, 1995, 1996, 2000, 2001, 2002, 2003
+ Copyright 1994, 1995, 1996, 2000, 2001, 2002, 2003, 2007
Free Software Foundation, Inc.
Contributed by Ian Lance Taylor, Cygnus Support.
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
/* The common PowerPC architecture is compatible with the RS/6000. */
diff --git a/bfd/cpu-rs6000.c b/bfd/cpu-rs6000.c
index 43c7be7539f9..4ed1d71e1a9b 100644
--- a/bfd/cpu-rs6000.c
+++ b/bfd/cpu-rs6000.c
@@ -1,11 +1,7 @@
/* BFD back-end for rs6000 support
- Copyright 1990, 1991, 1993, 1995, 2000, 2002, 2003
+ Copyright 1990, 1991, 1993, 1995, 2000, 2002, 2003, 2007
Free Software Foundation, Inc.
- FIXME: Can someone provide a transliteration of this name into ASCII?
- Using the following chars caused a compiler warning on HIUX (so I replaced
- them with octal escapes), and isn't useful without an understanding of what
- character set it is.
- Written by Mimi Ph\373\364ng-Th\345o V\365 of IBM
+ Written by Mimi Phuong-Thao Vo of IBM
and John Gilmore of Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -24,8 +20,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
/* The RS/6000 architecture is compatible with the PowerPC common
diff --git a/bfd/cpu-s390.c b/bfd/cpu-s390.c
index e7c714f26dc8..b385a9c6bdb1 100644
--- a/bfd/cpu-s390.c
+++ b/bfd/cpu-s390.c
@@ -1,5 +1,5 @@
/* BFD support for the s390 processor.
- Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
Contributed by Carl B. Pedersen and Martin Schwidefsky.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_s390_64_arch =
diff --git a/bfd/cpu-score.c b/bfd/cpu-score.c
new file mode 100644
index 000000000000..90d3113bd66b
--- /dev/null
+++ b/bfd/cpu-score.c
@@ -0,0 +1,51 @@
+/* BFD support for the score processor
+ Copyright 2006, 2007 Free Software Foundation, Inc.
+ Contributed by
+ Mei Ligang (ligang@sunnorth.com.cn)
+ Pei-Lin Tsai (pltsai@sunplus.com)
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+
+const bfd_arch_info_type
+bfd_score_arch =
+{
+ 32, /* There's 32 bits_per_word. */
+ 32, /* There's 32 bits_per_address. */
+ 8, /* There's 8 bits_per_byte. */
+ bfd_arch_score, /* One of enum bfd_architecture, defined
+ in archures.c and provided in
+ generated header files. */
+ 0, /* Only 1 machine, but #255 for
+ historical reasons. */
+ "score", /* The arch_name. */
+ "score", /* The printable name is the same. */
+ 4, /* Section alignment power; each section
+ is aligned to (only) 2^4 bytes. */
+ TRUE, /* This is the default "machine", since
+ there's only one. */
+ bfd_default_compatible, /* A default function for testing
+ "machine" compatibility of two
+ bfd_arch_info_type. */
+ bfd_default_scan, /* Check if an bfd_arch_info_type is a
+ match. */
+ NULL /* Pointer to next bfd_arch_info_type in
+ the same family. */
+};
diff --git a/bfd/cpu-sh.c b/bfd/cpu-sh.c
index 531431c1dcdd..4aa99c18e496 100644
--- a/bfd/cpu-sh.c
+++ b/bfd/cpu-sh.c
@@ -1,6 +1,6 @@
/* BFD library support routines for the Renesas / SuperH SH architecture.
- Copyright 1993, 1994, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1993, 1994, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2007 Free Software Foundation, Inc.
Hacked by Steve Chamberlain of Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "../opcodes/sh-opc.h"
diff --git a/bfd/cpu-sparc.c b/bfd/cpu-sparc.c
index 42153269a24b..35a109e2c497 100644
--- a/bfd/cpu-sparc.c
+++ b/bfd/cpu-sparc.c
@@ -1,5 +1,5 @@
/* BFD support for the SPARC architecture.
- Copyright 1992, 1995, 1996, 1998, 2000, 2002
+ Copyright 1992, 1995, 1996, 1998, 2000, 2002, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
static const bfd_arch_info_type arch_info_struct[] =
diff --git a/bfd/cpu-spu.c b/bfd/cpu-spu.c
new file mode 100644
index 000000000000..540a19fa71bb
--- /dev/null
+++ b/bfd/cpu-spu.c
@@ -0,0 +1,54 @@
+/* Copyright 2006, 2007 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+
+
+static const bfd_arch_info_type *
+spu_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b)
+{
+ BFD_ASSERT (a->arch == bfd_arch_spu);
+ switch (b->arch)
+ {
+ default:
+ return NULL;
+ case bfd_arch_spu:
+ return bfd_default_compatible (a, b);
+ }
+ /*NOTREACHED*/
+}
+
+const bfd_arch_info_type bfd_spu_arch[] =
+{
+ {
+ 32, /* 32 bits in a word */
+ 32, /* 32 bits in an address */
+ 8, /* 8 bits in a byte */
+ bfd_arch_spu, /* architecture */
+ bfd_mach_spu, /* machine */
+ "spu", /* architecture name */
+ "spu:256K", /* printable name */
+ 3, /* aligned power */
+ TRUE, /* the default machine for the architecture */
+ spu_compatible, /* the spu is only compatible with itself, see above */
+ bfd_default_scan,
+ 0, /* next -- there are none! */
+ }
+};
diff --git a/bfd/cpu-tic30.c b/bfd/cpu-tic30.c
index 29e6f3be12d6..8506b41a84a1 100644
--- a/bfd/cpu-tic30.c
+++ b/bfd/cpu-tic30.c
@@ -1,5 +1,5 @@
/* BFD support for the Texas Instruments TMS320C30 architecture.
- Copyright 1998, 2002 Free Software Foundation, Inc.
+ Copyright 1998, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_tic30_arch =
diff --git a/bfd/cpu-tic4x.c b/bfd/cpu-tic4x.c
index 8ff88839db22..dfcfe1612414 100644
--- a/bfd/cpu-tic4x.c
+++ b/bfd/cpu-tic4x.c
@@ -1,5 +1,5 @@
/* bfd back-end for TMS320C[34]x support
- Copyright 1996, 1997, 2002, 2003 Free Software Foundation, Inc.
+ Copyright 1996, 1997, 2002, 2003, 2007 Free Software Foundation, Inc.
Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
@@ -19,8 +19,8 @@
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 "bfd.h"
#include "libbfd.h"
static bfd_boolean tic4x_scan
diff --git a/bfd/cpu-tic54x.c b/bfd/cpu-tic54x.c
index debfe6929d62..f3f6d3287abe 100644
--- a/bfd/cpu-tic54x.c
+++ b/bfd/cpu-tic54x.c
@@ -1,5 +1,5 @@
/* BFD support for the Texas Instruments TMS320C54X architecture.
- Copyright 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_tic54x_arch =
diff --git a/bfd/cpu-tic80.c b/bfd/cpu-tic80.c
index 7dca8c7cf0cd..88bf0a11958d 100644
--- a/bfd/cpu-tic80.c
+++ b/bfd/cpu-tic80.c
@@ -1,5 +1,5 @@
/* bfd back-end for TI TMS320C80 (MVP) support
- Copyright 1996, 2002 Free Software Foundation, Inc.
+ Copyright 1996, 2002, 2007 Free Software Foundation, Inc.
Written by Fred Fish at Cygnus support (fnf@cygnus.com)
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_tic80_arch =
diff --git a/bfd/cpu-v850.c b/bfd/cpu-v850.c
index 5a776ddbe068..30d3a7dd797c 100644
--- a/bfd/cpu-v850.c
+++ b/bfd/cpu-v850.c
@@ -1,5 +1,5 @@
/* BFD support for the NEC V850 processor
- Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003
+ Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "safe-ctype.h"
diff --git a/bfd/cpu-vax.c b/bfd/cpu-vax.c
index 1af84a624511..cea4e98cf1dc 100644
--- a/bfd/cpu-vax.c
+++ b/bfd/cpu-vax.c
@@ -1,5 +1,6 @@
/* bfd back-end for vax support
- Copyright 1990, 1991, 1994, 2000, 2002 Free Software Foundation, Inc.
+ Copyright 1990, 1991, 1994, 2000, 2002, 2007
+ Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_vax_arch =
diff --git a/bfd/cpu-w65.c b/bfd/cpu-w65.c
index 82e485f92361..1acaf32939f6 100644
--- a/bfd/cpu-w65.c
+++ b/bfd/cpu-w65.c
@@ -1,5 +1,6 @@
/* BFD library support routines for the WDC 65816 architecture.
- Copyright 1995, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1995, 1999, 2000, 2001, 2002, 2007
+ Free Software Foundation, Inc.
Hacked by Steve Chamberlain of Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +19,8 @@ You w65ould have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
static bfd_boolean scan_mach
diff --git a/bfd/cpu-we32k.c b/bfd/cpu-we32k.c
index c0e7ab637ddc..2aab22e27cf7 100644
--- a/bfd/cpu-we32k.c
+++ b/bfd/cpu-we32k.c
@@ -1,5 +1,5 @@
/* bfd back-end for we32k support
- Copyright 1992, 2000, 2002 Free Software Foundation, Inc.
+ Copyright 1992, 2000, 2002, 2007 Free Software Foundation, Inc.
Contributed by Brendan Kehoe (brendan@cs.widener.edu).
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_we32k_arch =
diff --git a/bfd/cpu-xc16x.c b/bfd/cpu-xc16x.c
index 11569003629f..b173107b9b67 100644
--- a/bfd/cpu-xc16x.c
+++ b/bfd/cpu-xc16x.c
@@ -1,5 +1,5 @@
/* BFD support for the Infineon XC16X Microcontroller.
- Copyright 2006 Free Software Foundation, Inc.
+ Copyright 2006, 2007 Free Software Foundation, Inc.
Contributed by KPIT Cummins Infosystems
This file is part of BFD, the Binary File Descriptor library.
@@ -20,8 +20,8 @@
Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type xc16xs_info_struct =
diff --git a/bfd/cpu-xstormy16.c b/bfd/cpu-xstormy16.c
index 62c5302222d7..b2be98b70b68 100644
--- a/bfd/cpu-xstormy16.c
+++ b/bfd/cpu-xstormy16.c
@@ -1,5 +1,5 @@
/* BFD support for the XSTORMY16 processor.
- Copyright 2001, 2002 Free Software Foundation, Inc.
+ Copyright 2001, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@
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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_xstormy16_arch =
diff --git a/bfd/cpu-xtensa.c b/bfd/cpu-xtensa.c
index 797143194a99..59f37fb0eb79 100644
--- a/bfd/cpu-xtensa.c
+++ b/bfd/cpu-xtensa.c
@@ -1,5 +1,5 @@
/* BFD support for the Xtensa processor.
- Copyright 2003 Free Software Foundation, Inc.
+ Copyright 2003, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@
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 "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_xtensa_arch =
diff --git a/bfd/cpu-z80.c b/bfd/cpu-z80.c
index 3fd6fd481767..f106afbd8057 100644
--- a/bfd/cpu-z80.c
+++ b/bfd/cpu-z80.c
@@ -1,5 +1,5 @@
/* BFD library support routines for the Z80 architecture.
- Copyright 2005 Free Software Foundation, Inc.
+ Copyright 2005, 2007 Free Software Foundation, Inc.
Contributed by Arnold Metselaar <arnold_m@operamail.com>
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_z80_arch;
diff --git a/bfd/cpu-z8k.c b/bfd/cpu-z8k.c
index 043bbc50dce1..4d47b4e974a0 100644
--- a/bfd/cpu-z8k.c
+++ b/bfd/cpu-z8k.c
@@ -1,5 +1,5 @@
/* BFD library support routines for the Z800n architecture.
- Copyright 1992, 1993, 1994, 2000, 2001, 2002, 2003
+ Copyright 1992, 1993, 1994, 2000, 2001, 2002, 2003, 2007
Free Software Foundation, Inc.
Hacked by Steve Chamberlain of Cygnus Support.
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
/* This routine is provided two arch_infos and returns whether
diff --git a/bfd/doc/ChangeLog b/bfd/doc/ChangeLog
index 7909268f98bf..6b96b613d139 100644
--- a/bfd/doc/ChangeLog
+++ b/bfd/doc/ChangeLog
@@ -1,7 +1,56 @@
+2007-07-02 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.in: Regenerate.
+
+2007-06-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.in: Likewise.
+
+2007-06-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.in: Regenerated.
+
+2007-05-22 Nick Clifton <nickc@redhat.com>
+
+ * bfd.texinfo: Use @copying around the copyright notice.
+ * bfdint.texi: Likewise.
+
+2007-05-21 Nick Clifton <nickc@redhat.com>
+
+ * bfdint.texi: Add GNU Free Documentation License notice.
+
+2007-04-24 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.in: Regenerate.
+
+2007-02-17 Mark Mitchell <mark@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+ Vladimir Prus <vladimir@codesourcery.com
+ Joseph Myers <joseph@codesourcery.com>
+
+ * Makefile.in: Regenerate.
+
+2006-07-24 Ralk Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * bfd..texinfo: Fix spelling mistakes.
+ * bfdint.texinfo: Likewise.
+
+2006-07-18 Nigel Stephens <nigel@mips.com>
+
+ * bfd.texinfo: Add @section for "What to Put Where".
+
2006-06-07 Joseph S. Myers <joseph@codesourcery.com>
* bfd.texinfo: Remove local @tex code.
+2006-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.in: Regenerate.
+
+2006-05-11 Carlos O'Donell <carlos@codesourcery.com>
+
+ * bfd.texinfo: Rename "Index" to "BFD Index"
+
2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
* Makefile.am: Add install-html and install-html-am targets.
diff --git a/bfd/doc/Makefile.am b/bfd/doc/Makefile.am
index 6d221faad4a2..6ff434a6e7e6 100644
--- a/bfd/doc/Makefile.am
+++ b/bfd/doc/Makefile.am
@@ -8,7 +8,8 @@ DOCFILES = aoutx.texi archive.texi archures.texi \
libbfd.texi bfdwin.texi bfdio.texi \
opncls.texi reloc.texi section.texi \
syms.texi targets.texi init.texi hash.texi linker.texi \
- mmo.texi
+ mmo.texi \
+ bfdver.texi
PROTOS = archive.p archures.p bfd.p \
core.p format.p \
@@ -51,6 +52,7 @@ SRCIPROT = $(srcdir)/../cache.c $(srcdir)/../libbfd.c \
TEXIDIR = $(srcdir)/../../texinfo/fsf
info_TEXINFOS = bfd.texinfo
+bfd_TEXINFOS = $(DOCFILES) bfdsumm.texi
MKDOC = chew$(EXEEXT_FOR_BUILD)
@@ -68,8 +70,6 @@ chew.o: chew.c
protos: libbfd.h libcoff.h bfd.h
-$(srcdir)/bfd.info bfd.dvi bfd.html: $(DOCFILES) bfdsumm.texi bfd.texinfo
-
# We can't replace these rules with an implicit rule, because
# makes without VPATH support couldn't find the .h files in `..'.
@@ -274,6 +274,17 @@ bfd.h: $(BFD_H_DEP)
echo "#endif" >> $@
echo "#endif" >> $@
+bfdver.texi: $(srcdir)/Makefile.in
+ @echo "creating $@"; \
+ echo "@set VERSION $(VERSION)" > bfdver.texi; \
+ if [ -n "$(PKGVERSION)" ]; then \
+ echo "@set VERSION_PACKAGE $(PKGVERSION)" >> bfdver.texi; \
+ fi; \
+ echo "@set UPDATED `date '+%B %Y'`" >> bfdver.texi; \
+ if [ -n "$(REPORT_BUGS_TEXI)" ]; then \
+ echo "@set BUGURL $(REPORT_BUGS_TEXI)" >> bfdver.texi; \
+ fi
+
noinst_TEXINFOS = bfdint.texi
MOSTLYCLEANFILES = $(MKDOC) *.o
@@ -309,6 +320,11 @@ install-html-am: $(HTMLS)
fi; \
done
+MAINTAINERCLEANFILES += bfd.info
-
-
+# Automake 1.9 will only build info files in the objdir if they are
+# mentioned in DISTCLEANFILES. It doesn't have to be unconditional,
+# though, so we use a bogus condition.
+if GENINSRC_NEVER
+DISTCLEANFILES += bfd.info
+endif
diff --git a/bfd/doc/Makefile.in b/bfd/doc/Makefile.in
index ad81061ec7b7..02b15d0dbe30 100644
--- a/bfd/doc/Makefile.in
+++ b/bfd/doc/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -36,13 +36,26 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
+
+# Automake 1.9 will only build info files in the objdir if they are
+# mentioned in DISTCLEANFILES. It doesn't have to be unconditional,
+# though, so we use a bogus condition.
+@GENINSRC_NEVER_TRUE@am__append_1 = bfd.info
subdir = doc
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ $(bfd_TEXINFOS)
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/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__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
+ $(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/gettext-sister.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/nls.m4 $(top_srcdir)/../config/po.m4 \
+ $(top_srcdir)/../config/progtest.m4 \
+ $(top_srcdir)/../config/stdint.m4 $(top_srcdir)/../libtool.m4 \
+ $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
+ $(top_srcdir)/../ltversion.m4 $(top_srcdir)/bfd.m4 \
+ $(top_srcdir)/warning.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
@@ -51,7 +64,7 @@ CONFIG_CLEAN_FILES =
depcomp =
am__depfiles_maybe =
SOURCES =
-INFO_DEPS = $(srcdir)/bfd.info
+INFO_DEPS = bfd.info
TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex
am__TEXINFO_TEX_DIR = $(top_srcdir)/../texinfo
DVIS = bfd.dvi
@@ -69,7 +82,6 @@ MAKEINFOHTML = $(MAKEINFO) --html
AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
DVIPS = dvips
ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
@@ -95,20 +107,24 @@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
+DEBUGDIR = @DEBUGDIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
+DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
-GMOFILES = @GMOFILES@
+FGREP = @FGREP@
+GENCAT = @GENCAT@
+GENINSRC_NEVER_FALSE = @GENINSRC_NEVER_FALSE@
+GENINSRC_NEVER_TRUE = @GENINSRC_NEVER_TRUE@
GMSGFMT = @GMSGFMT@
-GT_NO = @GT_NO@
-GT_YES = @GT_YES@
+GREP = @GREP@
HDEFINES = @HDEFINES@
-INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
+INCINTL = @INCINTL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_LIBBFD_FALSE = @INSTALL_LIBBFD_FALSE@
INSTALL_LIBBFD_TRUE = @INSTALL_LIBBFD_TRUE@
@@ -116,10 +132,10 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTOBJEXT = @INSTOBJEXT@
-INTLDEPS = @INTLDEPS@
-INTLLIBS = @INTLLIBS@
-INTLOBJS = @INTLOBJS@
+LD = @LD@
LDFLAGS = @LDFLAGS@
+LIBINTL = @LIBINTL@
+LIBINTL_DEP = @LIBINTL_DEP@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
@@ -131,6 +147,8 @@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
NO_WERROR = @NO_WERROR@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
@@ -140,14 +158,16 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-POFILES = @POFILES@
+PKGVERSION = @PKGVERSION@
POSUB = @POSUB@
RANLIB = @RANLIB@
+REPORT_BUGS_TEXI = @REPORT_BUGS_TEXI@
+REPORT_BUGS_TO = @REPORT_BUGS_TO@
+SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
TDEFINES = @TDEFINES@
-USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
@@ -156,6 +176,7 @@ WIN32LIBADD = @WIN32LIBADD@
XGETTEXT = @XGETTEXT@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
all_backends = @all_backends@
@@ -166,10 +187,10 @@ am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+bfd64_libs = @bfd64_libs@
bfd_backends = @bfd_backends@
bfd_default_target_size = @bfd_default_target_size@
bfd_file_ptr = @bfd_file_ptr@
-bfd_libs = @bfd_libs@
bfd_machines = @bfd_machines@
bfd_ufile_ptr = @bfd_ufile_ptr@
bfdincludedir = @bfdincludedir@
@@ -194,10 +215,10 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-l = @l@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -221,7 +242,8 @@ DOCFILES = aoutx.texi archive.texi archures.texi \
libbfd.texi bfdwin.texi bfdio.texi \
opncls.texi reloc.texi section.texi \
syms.texi targets.texi init.texi hash.texi linker.texi \
- mmo.texi
+ mmo.texi \
+ bfdver.texi
PROTOS = archive.p archures.p bfd.p \
core.p format.p \
@@ -263,6 +285,7 @@ SRCIPROT = $(srcdir)/../cache.c $(srcdir)/../libbfd.c \
TEXIDIR = $(srcdir)/../../texinfo/fsf
info_TEXINFOS = bfd.texinfo
+bfd_TEXINFOS = $(DOCFILES) bfdsumm.texi
MKDOC = chew$(EXEEXT_FOR_BUILD)
INCLUDES = -I.. -I$(srcdir)/.. -I$(srcdir)/../../include \
-I$(srcdir)/../../intl -I../../intl
@@ -314,13 +337,14 @@ BFD_H_DEP = \
noinst_TEXINFOS = bfdint.texi
MOSTLYCLEANFILES = $(MKDOC) *.o
CLEANFILES = *.p *.ip
-DISTCLEANFILES = bfd.?? bfd.??? bfd.h libbfd.h libcoff.h texput.log
-MAINTAINERCLEANFILES = $(DOCFILES)
+DISTCLEANFILES = bfd.?? bfd.??? bfd.h libbfd.h libcoff.h texput.log \
+ $(am__append_1)
+MAINTAINERCLEANFILES = $(DOCFILES) bfd.info
html__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
all: all-am
.SUFFIXES:
-.SUFFIXES: .dvi .html .info .pdf .ps .texinfo
+.SUFFIXES: .dvi .ps
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@@ -330,9 +354,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus doc/Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/Makefile
+ $(AUTOMAKE) --cygnus doc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -360,40 +384,38 @@ clean-libtool:
distclean-libtool:
-rm -f libtool
-.texinfo.info:
+bfd.info: bfd.texinfo $(bfd_TEXINFOS)
restore=: && backupdir="$(am__leading_dot)am$$$$" && \
- am__cwd=`pwd` && cd $(srcdir) && \
rm -rf $$backupdir && mkdir $$backupdir && \
- 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; \
- cd "$$am__cwd"; \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
- -o $@ $<; \
+ -o $@ `test -f 'bfd.texinfo' || echo '$(srcdir)/'`bfd.texinfo; \
then \
rc=0; \
- cd $(srcdir); \
else \
rc=$$?; \
- cd $(srcdir) && \
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
fi; \
rm -rf $$backupdir; exit $$rc
-.texinfo.dvi:
+bfd.dvi: bfd.texinfo $(bfd_TEXINFOS)
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
- $(TEXI2DVI) $<
+ $(TEXI2DVI) -o $@ `test -f 'bfd.texinfo' || echo '$(srcdir)/'`bfd.texinfo
-.texinfo.pdf:
+bfd.pdf: bfd.texinfo $(bfd_TEXINFOS)
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
- $(TEXI2PDF) $<
+ $(TEXI2PDF) -o $@ `test -f 'bfd.texinfo' || echo '$(srcdir)/'`bfd.texinfo
-.texinfo.html:
+bfd.html: bfd.texinfo $(bfd_TEXINFOS)
rm -rf $(@:.html=.htp)
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
- -o $(@:.html=.htp) $<; \
+ -o $(@:.html=.htp) `test -f 'bfd.texinfo' || echo '$(srcdir)/'`bfd.texinfo; \
then \
rm -rf $@; \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
@@ -403,11 +425,8 @@ distclean-libtool:
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
exit 1; \
fi
-$(srcdir)/bfd.info: bfd.texinfo
-bfd.dvi: bfd.texinfo
-bfd.pdf: bfd.texinfo
-bfd.html: bfd.texinfo
.dvi.ps:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
$(DVIPS) -o $@ $<
uninstall-info-am:
@@ -600,8 +619,6 @@ chew.o: chew.c
protos: libbfd.h libcoff.h bfd.h
-$(srcdir)/bfd.info bfd.dvi bfd.html: $(DOCFILES) bfdsumm.texi bfd.texinfo
-
# We can't replace these rules with an implicit rule, because
# makes without VPATH support couldn't find the .h files in `..'.
@@ -762,6 +779,17 @@ bfd.h: $(BFD_H_DEP)
echo "#endif" >> $@
echo "#endif" >> $@
+bfdver.texi: $(srcdir)/Makefile.in
+ @echo "creating $@"; \
+ echo "@set VERSION $(VERSION)" > bfdver.texi; \
+ if [ -n "$(PKGVERSION)" ]; then \
+ echo "@set VERSION_PACKAGE $(PKGVERSION)" >> bfdver.texi; \
+ fi; \
+ echo "@set UPDATED `date '+%B %Y'`" >> bfdver.texi; \
+ if [ -n "$(REPORT_BUGS_TEXI)" ]; then \
+ echo "@set BUGURL $(REPORT_BUGS_TEXI)" >> bfdver.texi; \
+ fi
+
# We want install to imply install-info as per GNU standards, despite the
# cygnus option.
install: install-info
diff --git a/bfd/doc/aoutx.texi b/bfd/doc/aoutx.texi
deleted file mode 100644
index 7cf9787f106f..000000000000
--- a/bfd/doc/aoutx.texi
+++ /dev/null
@@ -1,213 +0,0 @@
-@section a.out backends
-
-
-@strong{Description}@*
-BFD supports a number of different flavours of a.out format,
-though the major differences are only the sizes of the
-structures on disk, and the shape of the relocation
-information.
-
-The support is split into a basic support file @file{aoutx.h}
-and other files which derive functions from the base. One
-derivation file is @file{aoutf1.h} (for a.out flavour 1), and
-adds to the basic a.out functions support for sun3, sun4, 386
-and 29k a.out files, to create a target jump vector for a
-specific target.
-
-This information is further split out into more specific files
-for each machine, including @file{sunos.c} for sun3 and sun4,
-@file{newsos3.c} for the Sony NEWS, and @file{demo64.c} for a
-demonstration of a 64 bit a.out format.
-
-The base file @file{aoutx.h} defines general mechanisms for
-reading and writing records to and from disk and various
-other methods which BFD requires. It is included by
-@file{aout32.c} and @file{aout64.c} to form the names
-@code{aout_32_swap_exec_header_in}, @code{aout_64_swap_exec_header_in}, etc.
-
-As an example, this is what goes on to make the back end for a
-sun4, from @file{aout32.c}:
-
-@example
- #define ARCH_SIZE 32
- #include "aoutx.h"
-@end example
-
-Which exports names:
-
-@example
- ...
- aout_32_canonicalize_reloc
- aout_32_find_nearest_line
- aout_32_get_lineno
- aout_32_get_reloc_upper_bound
- ...
-@end example
-
-from @file{sunos.c}:
-
-@example
- #define TARGET_NAME "a.out-sunos-big"
- #define VECNAME sunos_big_vec
- #include "aoutf1.h"
-@end example
-
-requires all the names from @file{aout32.c}, and produces the jump vector
-
-@example
- sunos_big_vec
-@end example
-
-The file @file{host-aout.c} is a special case. It is for a large set
-of hosts that use ``more or less standard'' a.out files, and
-for which cross-debugging is not interesting. It uses the
-standard 32-bit a.out support routines, but determines the
-file offsets and addresses of the text, data, and BSS
-sections, the machine architecture and machine type, and the
-entry point address, in a host-dependent manner. Once these
-values have been determined, generic code is used to handle
-the object file.
-
-When porting it to run on a new system, you must supply:
-
-@example
- HOST_PAGE_SIZE
- HOST_SEGMENT_SIZE
- HOST_MACHINE_ARCH (optional)
- HOST_MACHINE_MACHINE (optional)
- HOST_TEXT_START_ADDR
- HOST_STACK_END_ADDR
-@end example
-
-in the file @file{../include/sys/h-@var{XXX}.h} (for your host). These
-values, plus the structures and macros defined in @file{a.out.h} on
-your host system, will produce a BFD target that will access
-ordinary a.out files on your host. To configure a new machine
-to use @file{host-aout.c}, specify:
-
-@example
- TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec
- TDEPFILES= host-aout.o trad-core.o
-@end example
-
-in the @file{config/@var{XXX}.mt} file, and modify @file{configure.in}
-to use the
-@file{@var{XXX}.mt} file (by setting "@code{bfd_target=XXX}") when your
-configuration is selected.
-
-@subsection Relocations
-
-
-@strong{Description}@*
-The file @file{aoutx.h} provides for both the @emph{standard}
-and @emph{extended} forms of a.out relocation records.
-
-The standard records contain only an
-address, a symbol index, and a type field. The extended records
-(used on 29ks and sparcs) also have a full integer for an
-addend.
-
-@subsection Internal entry points
-
-
-@strong{Description}@*
-@file{aoutx.h} exports several routines for accessing the
-contents of an a.out file, which are gathered and exported in
-turn by various format specific files (eg sunos.c).
-
-@findex aout_@var{size}_swap_exec_header_in
-@subsubsection @code{aout_@var{size}_swap_exec_header_in}
-@strong{Synopsis}
-@example
-void aout_@var{size}_swap_exec_header_in,
- (bfd *abfd,
- struct external_exec *bytes,
- struct internal_exec *execp);
-@end example
-@strong{Description}@*
-Swap the information in an executable header @var{raw_bytes} taken
-from a raw byte stream memory image into the internal exec header
-structure @var{execp}.
-
-@findex aout_@var{size}_swap_exec_header_out
-@subsubsection @code{aout_@var{size}_swap_exec_header_out}
-@strong{Synopsis}
-@example
-void aout_@var{size}_swap_exec_header_out
- (bfd *abfd,
- struct internal_exec *execp,
- struct external_exec *raw_bytes);
-@end example
-@strong{Description}@*
-Swap the information in an internal exec header structure
-@var{execp} into the buffer @var{raw_bytes} ready for writing to disk.
-
-@findex aout_@var{size}_some_aout_object_p
-@subsubsection @code{aout_@var{size}_some_aout_object_p}
-@strong{Synopsis}
-@example
-const bfd_target *aout_@var{size}_some_aout_object_p
- (bfd *abfd,
- struct internal_exec *execp,
- const bfd_target *(*callback_to_real_object_p) (bfd *));
-@end example
-@strong{Description}@*
-Some a.out variant thinks that the file open in @var{abfd}
-checking is an a.out file. Do some more checking, and set up
-for access if it really is. Call back to the calling
-environment's "finish up" function just before returning, to
-handle any last-minute setup.
-
-@findex aout_@var{size}_mkobject
-@subsubsection @code{aout_@var{size}_mkobject}
-@strong{Synopsis}
-@example
-bfd_boolean aout_@var{size}_mkobject, (bfd *abfd);
-@end example
-@strong{Description}@*
-Initialize BFD @var{abfd} for use with a.out files.
-
-@findex aout_@var{size}_machine_type
-@subsubsection @code{aout_@var{size}_machine_type}
-@strong{Synopsis}
-@example
-enum machine_type aout_@var{size}_machine_type
- (enum bfd_architecture arch,
- unsigned long machine,
- bfd_boolean *unknown);
-@end example
-@strong{Description}@*
-Keep track of machine architecture and machine type for
-a.out's. Return the @code{machine_type} for a particular
-architecture and machine, or @code{M_UNKNOWN} if that exact architecture
-and machine can't be represented in a.out format.
-
-If the architecture is understood, machine type 0 (default)
-is always understood.
-
-@findex aout_@var{size}_set_arch_mach
-@subsubsection @code{aout_@var{size}_set_arch_mach}
-@strong{Synopsis}
-@example
-bfd_boolean aout_@var{size}_set_arch_mach,
- (bfd *,
- enum bfd_architecture arch,
- unsigned long machine);
-@end example
-@strong{Description}@*
-Set the architecture and the machine of the BFD @var{abfd} to the
-values @var{arch} and @var{machine}. Verify that @var{abfd}'s format
-can support the architecture required.
-
-@findex aout_@var{size}_new_section_hook
-@subsubsection @code{aout_@var{size}_new_section_hook}
-@strong{Synopsis}
-@example
-bfd_boolean aout_@var{size}_new_section_hook,
- (bfd *abfd,
- asection *newsect);
-@end example
-@strong{Description}@*
-Called by the BFD in response to a @code{bfd_make_section}
-request.
-
diff --git a/bfd/doc/archive.texi b/bfd/doc/archive.texi
deleted file mode 100644
index 3d0a97d4b82e..000000000000
--- a/bfd/doc/archive.texi
+++ /dev/null
@@ -1,99 +0,0 @@
-@section Archives
-
-
-@strong{Description}@*
-An archive (or library) is just another BFD. It has a symbol
-table, although there's not much a user program will do with it.
-
-The big difference between an archive BFD and an ordinary BFD
-is that the archive doesn't have sections. Instead it has a
-chain of BFDs that are considered its contents. These BFDs can
-be manipulated like any other. The BFDs contained in an
-archive opened for reading will all be opened for reading. You
-may put either input or output BFDs into an archive opened for
-output; they will be handled correctly when the archive is closed.
-
-Use @code{bfd_openr_next_archived_file} to step through
-the contents of an archive opened for input. You don't
-have to read the entire archive if you don't want
-to! Read it until you find what you want.
-
-Archive contents of output BFDs are chained through the
-@code{next} pointer in a BFD. The first one is findable through
-the @code{archive_head} slot of the archive. Set it with
-@code{bfd_set_archive_head} (q.v.). A given BFD may be in only one
-open output archive at a time.
-
-As expected, the BFD archive code is more general than the
-archive code of any given environment. BFD archives may
-contain files of different formats (e.g., a.out and coff) and
-even different architectures. You may even place archives
-recursively into archives!
-
-This can cause unexpected confusion, since some archive
-formats are more expressive than others. For instance, Intel
-COFF archives can preserve long filenames; SunOS a.out archives
-cannot. If you move a file from the first to the second
-format and back again, the filename may be truncated.
-Likewise, different a.out environments have different
-conventions as to how they truncate filenames, whether they
-preserve directory names in filenames, etc. When
-interoperating with native tools, be sure your files are
-homogeneous.
-
-Beware: most of these formats do not react well to the
-presence of spaces in filenames. We do the best we can, but
-can't always handle this case due to restrictions in the format of
-archives. Many Unix utilities are braindead in regards to
-spaces and such in filenames anyway, so this shouldn't be much
-of a restriction.
-
-Archives are supported in BFD in @code{archive.c}.
-
-@subsection Archive functions
-
-
-@findex bfd_get_next_mapent
-@subsubsection @code{bfd_get_next_mapent}
-@strong{Synopsis}
-@example
-symindex bfd_get_next_mapent
- (bfd *abfd, symindex previous, carsym **sym);
-@end example
-@strong{Description}@*
-Step through archive @var{abfd}'s symbol table (if it
-has one). Successively update @var{sym} with the next symbol's
-information, returning that symbol's (internal) index into the
-symbol table.
-
-Supply @code{BFD_NO_MORE_SYMBOLS} as the @var{previous} entry to get
-the first one; returns @code{BFD_NO_MORE_SYMBOLS} when you've already
-got the last one.
-
-A @code{carsym} is a canonical archive symbol. The only
-user-visible element is its name, a null-terminated string.
-
-@findex bfd_set_archive_head
-@subsubsection @code{bfd_set_archive_head}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
-@end example
-@strong{Description}@*
-Set the head of the chain of
-BFDs contained in the archive @var{output} to @var{new_head}.
-
-@findex bfd_openr_next_archived_file
-@subsubsection @code{bfd_openr_next_archived_file}
-@strong{Synopsis}
-@example
-bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous);
-@end example
-@strong{Description}@*
-Provided a BFD, @var{archive}, containing an archive and NULL, open
-an input BFD on the first contained element and returns that.
-Subsequent calls should pass
-the archive and the previous return value to return a created
-BFD to the next contained element. NULL is returned when there
-are no more.
-
diff --git a/bfd/doc/archures.texi b/bfd/doc/archures.texi
deleted file mode 100644
index bf72179dad31..000000000000
--- a/bfd/doc/archures.texi
+++ /dev/null
@@ -1,585 +0,0 @@
-@section Architectures
-BFD keeps one atom in a BFD describing the
-architecture of the data attached to the BFD: a pointer to a
-@code{bfd_arch_info_type}.
-
-Pointers to structures can be requested independently of a BFD
-so that an architecture's information can be interrogated
-without access to an open BFD.
-
-The architecture information is provided by each architecture package.
-The set of default architectures is selected by the macro
-@code{SELECT_ARCHITECTURES}. This is normally set up in the
-@file{config/@var{target}.mt} file of your choice. If the name is not
-defined, then all the architectures supported are included.
-
-When BFD starts up, all the architectures are called with an
-initialize method. It is up to the architecture back end to
-insert as many items into the list of architectures as it wants to;
-generally this would be one for each machine and one for the
-default case (an item with a machine field of 0).
-
-BFD's idea of an architecture is implemented in @file{archures.c}.
-
-@subsection bfd_architecture
-
-
-@strong{Description}@*
-This enum gives the object file's CPU architecture, in a
-global sense---i.e., what processor family does it belong to?
-Another field indicates which processor within
-the family is in use. The machine gives a number which
-distinguishes different versions of the architecture,
-containing, for example, 2 and 3 for Intel i960 KA and i960 KB,
-and 68020 and 68030 for Motorola 68020 and 68030.
-@example
-enum bfd_architecture
-@{
- bfd_arch_unknown, /* File arch not known. */
- bfd_arch_obscure, /* Arch known, not one of these. */
- bfd_arch_m68k, /* Motorola 68xxx */
-#define bfd_mach_m68000 1
-#define bfd_mach_m68008 2
-#define bfd_mach_m68010 3
-#define bfd_mach_m68020 4
-#define bfd_mach_m68030 5
-#define bfd_mach_m68040 6
-#define bfd_mach_m68060 7
-#define bfd_mach_cpu32 8
-#define bfd_mach_mcf_isa_a_nodiv 9
-#define bfd_mach_mcf_isa_a 10
-#define bfd_mach_mcf_isa_a_mac 11
-#define bfd_mach_mcf_isa_a_emac 12
-#define bfd_mach_mcf_isa_aplus 13
-#define bfd_mach_mcf_isa_aplus_mac 14
-#define bfd_mach_mcf_isa_aplus_emac 15
-#define bfd_mach_mcf_isa_b_nousp 16
-#define bfd_mach_mcf_isa_b_nousp_mac 17
-#define bfd_mach_mcf_isa_b_nousp_emac 18
-#define bfd_mach_mcf_isa_b 19
-#define bfd_mach_mcf_isa_b_mac 20
-#define bfd_mach_mcf_isa_b_emac 21
-#define bfd_mach_mcf_isa_b_float 22
-#define bfd_mach_mcf_isa_b_float_mac 23
-#define bfd_mach_mcf_isa_b_float_emac 24
- bfd_arch_vax, /* DEC Vax */
- bfd_arch_i960, /* Intel 960 */
- /* The order of the following is important.
- lower number indicates a machine type that
- only accepts a subset of the instructions
- available to machines with higher numbers.
- The exception is the "ca", which is
- incompatible with all other machines except
- "core". */
-
-#define bfd_mach_i960_core 1
-#define bfd_mach_i960_ka_sa 2
-#define bfd_mach_i960_kb_sb 3
-#define bfd_mach_i960_mc 4
-#define bfd_mach_i960_xa 5
-#define bfd_mach_i960_ca 6
-#define bfd_mach_i960_jx 7
-#define bfd_mach_i960_hx 8
-
- bfd_arch_or32, /* OpenRISC 32 */
-
- bfd_arch_sparc, /* SPARC */
-#define bfd_mach_sparc 1
-/* The difference between v8plus and v9 is that v9 is a true 64 bit env. */
-#define bfd_mach_sparc_sparclet 2
-#define bfd_mach_sparc_sparclite 3
-#define bfd_mach_sparc_v8plus 4
-#define bfd_mach_sparc_v8plusa 5 /* with ultrasparc add'ns. */
-#define bfd_mach_sparc_sparclite_le 6
-#define bfd_mach_sparc_v9 7
-#define bfd_mach_sparc_v9a 8 /* with ultrasparc add'ns. */
-#define bfd_mach_sparc_v8plusb 9 /* with cheetah add'ns. */
-#define bfd_mach_sparc_v9b 10 /* with cheetah add'ns. */
-/* Nonzero if MACH has the v9 instruction set. */
-#define bfd_mach_sparc_v9_p(mach) \
- ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \
- && (mach) != bfd_mach_sparc_sparclite_le)
-/* Nonzero if MACH is a 64 bit sparc architecture. */
-#define bfd_mach_sparc_64bit_p(mach) \
- ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb)
- bfd_arch_mips, /* MIPS Rxxxx */
-#define bfd_mach_mips3000 3000
-#define bfd_mach_mips3900 3900
-#define bfd_mach_mips4000 4000
-#define bfd_mach_mips4010 4010
-#define bfd_mach_mips4100 4100
-#define bfd_mach_mips4111 4111
-#define bfd_mach_mips4120 4120
-#define bfd_mach_mips4300 4300
-#define bfd_mach_mips4400 4400
-#define bfd_mach_mips4600 4600
-#define bfd_mach_mips4650 4650
-#define bfd_mach_mips5000 5000
-#define bfd_mach_mips5400 5400
-#define bfd_mach_mips5500 5500
-#define bfd_mach_mips6000 6000
-#define bfd_mach_mips7000 7000
-#define bfd_mach_mips8000 8000
-#define bfd_mach_mips9000 9000
-#define bfd_mach_mips10000 10000
-#define bfd_mach_mips12000 12000
-#define bfd_mach_mips16 16
-#define bfd_mach_mips5 5
-#define bfd_mach_mips_sb1 12310201 /* octal 'SB', 01 */
-#define bfd_mach_mipsisa32 32
-#define bfd_mach_mipsisa32r2 33
-#define bfd_mach_mipsisa64 64
-#define bfd_mach_mipsisa64r2 65
- bfd_arch_i386, /* Intel 386 */
-#define bfd_mach_i386_i386 1
-#define bfd_mach_i386_i8086 2
-#define bfd_mach_i386_i386_intel_syntax 3
-#define bfd_mach_x86_64 64
-#define bfd_mach_x86_64_intel_syntax 65
- bfd_arch_we32k, /* AT&T WE32xxx */
- bfd_arch_tahoe, /* CCI/Harris Tahoe */
- bfd_arch_i860, /* Intel 860 */
- bfd_arch_i370, /* IBM 360/370 Mainframes */
- bfd_arch_romp, /* IBM ROMP PC/RT */
- bfd_arch_convex, /* Convex */
- bfd_arch_m88k, /* Motorola 88xxx */
- bfd_arch_m98k, /* Motorola 98xxx */
- bfd_arch_pyramid, /* Pyramid Technology */
- bfd_arch_h8300, /* Renesas H8/300 (formerly Hitachi H8/300) */
-#define bfd_mach_h8300 1
-#define bfd_mach_h8300h 2
-#define bfd_mach_h8300s 3
-#define bfd_mach_h8300hn 4
-#define bfd_mach_h8300sn 5
-#define bfd_mach_h8300sx 6
-#define bfd_mach_h8300sxn 7
- bfd_arch_pdp11, /* DEC PDP-11 */
- bfd_arch_powerpc, /* PowerPC */
-#define bfd_mach_ppc 32
-#define bfd_mach_ppc64 64
-#define bfd_mach_ppc_403 403
-#define bfd_mach_ppc_403gc 4030
-#define bfd_mach_ppc_505 505
-#define bfd_mach_ppc_601 601
-#define bfd_mach_ppc_602 602
-#define bfd_mach_ppc_603 603
-#define bfd_mach_ppc_ec603e 6031
-#define bfd_mach_ppc_604 604
-#define bfd_mach_ppc_620 620
-#define bfd_mach_ppc_630 630
-#define bfd_mach_ppc_750 750
-#define bfd_mach_ppc_860 860
-#define bfd_mach_ppc_a35 35
-#define bfd_mach_ppc_rs64ii 642
-#define bfd_mach_ppc_rs64iii 643
-#define bfd_mach_ppc_7400 7400
-#define bfd_mach_ppc_e500 500
- bfd_arch_rs6000, /* IBM RS/6000 */
-#define bfd_mach_rs6k 6000
-#define bfd_mach_rs6k_rs1 6001
-#define bfd_mach_rs6k_rsc 6003
-#define bfd_mach_rs6k_rs2 6002
- bfd_arch_hppa, /* HP PA RISC */
-#define bfd_mach_hppa10 10
-#define bfd_mach_hppa11 11
-#define bfd_mach_hppa20 20
-#define bfd_mach_hppa20w 25
- bfd_arch_d10v, /* Mitsubishi D10V */
-#define bfd_mach_d10v 1
-#define bfd_mach_d10v_ts2 2
-#define bfd_mach_d10v_ts3 3
- bfd_arch_d30v, /* Mitsubishi D30V */
- bfd_arch_dlx, /* DLX */
- bfd_arch_m68hc11, /* Motorola 68HC11 */
- bfd_arch_m68hc12, /* Motorola 68HC12 */
-#define bfd_mach_m6812_default 0
-#define bfd_mach_m6812 1
-#define bfd_mach_m6812s 2
- bfd_arch_z8k, /* Zilog Z8000 */
-#define bfd_mach_z8001 1
-#define bfd_mach_z8002 2
- bfd_arch_h8500, /* Renesas H8/500 (formerly Hitachi H8/500) */
- bfd_arch_sh, /* Renesas / SuperH SH (formerly Hitachi SH) */
-#define bfd_mach_sh 1
-#define bfd_mach_sh2 0x20
-#define bfd_mach_sh_dsp 0x2d
-#define bfd_mach_sh2a 0x2a
-#define bfd_mach_sh2a_nofpu 0x2b
-#define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1
-#define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2
-#define bfd_mach_sh2a_or_sh4 0x2a3
-#define bfd_mach_sh2a_or_sh3e 0x2a4
-#define bfd_mach_sh2e 0x2e
-#define bfd_mach_sh3 0x30
-#define bfd_mach_sh3_nommu 0x31
-#define bfd_mach_sh3_dsp 0x3d
-#define bfd_mach_sh3e 0x3e
-#define bfd_mach_sh4 0x40
-#define bfd_mach_sh4_nofpu 0x41
-#define bfd_mach_sh4_nommu_nofpu 0x42
-#define bfd_mach_sh4a 0x4a
-#define bfd_mach_sh4a_nofpu 0x4b
-#define bfd_mach_sh4al_dsp 0x4d
-#define bfd_mach_sh5 0x50
- bfd_arch_alpha, /* Dec Alpha */
-#define bfd_mach_alpha_ev4 0x10
-#define bfd_mach_alpha_ev5 0x20
-#define bfd_mach_alpha_ev6 0x30
- bfd_arch_arm, /* Advanced Risc Machines ARM. */
-#define bfd_mach_arm_unknown 0
-#define bfd_mach_arm_2 1
-#define bfd_mach_arm_2a 2
-#define bfd_mach_arm_3 3
-#define bfd_mach_arm_3M 4
-#define bfd_mach_arm_4 5
-#define bfd_mach_arm_4T 6
-#define bfd_mach_arm_5 7
-#define bfd_mach_arm_5T 8
-#define bfd_mach_arm_5TE 9
-#define bfd_mach_arm_XScale 10
-#define bfd_mach_arm_ep9312 11
-#define bfd_mach_arm_iWMMXt 12
- bfd_arch_ns32k, /* National Semiconductors ns32000 */
- bfd_arch_w65, /* WDC 65816 */
- bfd_arch_tic30, /* Texas Instruments TMS320C30 */
- bfd_arch_tic4x, /* Texas Instruments TMS320C3X/4X */
-#define bfd_mach_tic3x 30
-#define bfd_mach_tic4x 40
- bfd_arch_tic54x, /* Texas Instruments TMS320C54X */
- bfd_arch_tic80, /* TI TMS320c80 (MVP) */
- bfd_arch_v850, /* NEC V850 */
-#define bfd_mach_v850 1
-#define bfd_mach_v850e 'E'
-#define bfd_mach_v850e1 '1'
- bfd_arch_arc, /* ARC Cores */
-#define bfd_mach_arc_5 5
-#define bfd_mach_arc_6 6
-#define bfd_mach_arc_7 7
-#define bfd_mach_arc_8 8
- bfd_arch_m32c, /* Renesas M16C/M32C. */
-#define bfd_mach_m16c 0x75
-#define bfd_mach_m32c 0x78
- bfd_arch_m32r, /* Renesas M32R (formerly Mitsubishi M32R/D) */
-#define bfd_mach_m32r 1 /* For backwards compatibility. */
-#define bfd_mach_m32rx 'x'
-#define bfd_mach_m32r2 '2'
- bfd_arch_mn10200, /* Matsushita MN10200 */
- bfd_arch_mn10300, /* Matsushita MN10300 */
-#define bfd_mach_mn10300 300
-#define bfd_mach_am33 330
-#define bfd_mach_am33_2 332
- bfd_arch_fr30,
-#define bfd_mach_fr30 0x46523330
- bfd_arch_frv,
-#define bfd_mach_frv 1
-#define bfd_mach_frvsimple 2
-#define bfd_mach_fr300 300
-#define bfd_mach_fr400 400
-#define bfd_mach_fr450 450
-#define bfd_mach_frvtomcat 499 /* fr500 prototype */
-#define bfd_mach_fr500 500
-#define bfd_mach_fr550 550
- bfd_arch_mcore,
- bfd_arch_ia64, /* HP/Intel ia64 */
-#define bfd_mach_ia64_elf64 64
-#define bfd_mach_ia64_elf32 32
- bfd_arch_ip2k, /* Ubicom IP2K microcontrollers. */
-#define bfd_mach_ip2022 1
-#define bfd_mach_ip2022ext 2
- bfd_arch_iq2000, /* Vitesse IQ2000. */
-#define bfd_mach_iq2000 1
-#define bfd_mach_iq10 2
- bfd_arch_mt,
-#define bfd_mach_ms1 1
-#define bfd_mach_mrisc2 2
-#define bfd_mach_ms2 3
- bfd_arch_pj,
- bfd_arch_avr, /* Atmel AVR microcontrollers. */
-#define bfd_mach_avr1 1
-#define bfd_mach_avr2 2
-#define bfd_mach_avr3 3
-#define bfd_mach_avr4 4
-#define bfd_mach_avr5 5
- bfd_arch_bfin, /* ADI Blackfin */
-#define bfd_mach_bfin 1
- bfd_arch_cr16c, /* National Semiconductor CompactRISC. */
-#define bfd_mach_cr16c 1
- bfd_arch_crx, /* National Semiconductor CRX. */
-#define bfd_mach_crx 1
- bfd_arch_cris, /* Axis CRIS */
-#define bfd_mach_cris_v0_v10 255
-#define bfd_mach_cris_v32 32
-#define bfd_mach_cris_v10_v32 1032
- bfd_arch_s390, /* IBM s390 */
-#define bfd_mach_s390_31 31
-#define bfd_mach_s390_64 64
- bfd_arch_openrisc, /* OpenRISC */
- bfd_arch_mmix, /* Donald Knuth's educational processor. */
- bfd_arch_xstormy16,
-#define bfd_mach_xstormy16 1
- bfd_arch_msp430, /* Texas Instruments MSP430 architecture. */
-#define bfd_mach_msp11 11
-#define bfd_mach_msp110 110
-#define bfd_mach_msp12 12
-#define bfd_mach_msp13 13
-#define bfd_mach_msp14 14
-#define bfd_mach_msp15 15
-#define bfd_mach_msp16 16
-#define bfd_mach_msp21 21
-#define bfd_mach_msp31 31
-#define bfd_mach_msp32 32
-#define bfd_mach_msp33 33
-#define bfd_mach_msp41 41
-#define bfd_mach_msp42 42
-#define bfd_mach_msp43 43
-#define bfd_mach_msp44 44
- bfd_arch_xc16x, /* Infineon's XC16X Series. */
-#define bfd_mach_xc16x 1
-#define bfd_mach_xc16xl 2
-#define bfd_mach_xc16xs 3
- bfd_arch_xtensa, /* Tensilica's Xtensa cores. */
-#define bfd_mach_xtensa 1
- bfd_arch_maxq, /* Dallas MAXQ 10/20 */
-#define bfd_mach_maxq10 10
-#define bfd_mach_maxq20 20
- bfd_arch_z80,
-#define bfd_mach_z80strict 1 /* No undocumented opcodes. */
-#define bfd_mach_z80 3 /* With ixl, ixh, iyl, and iyh. */
-#define bfd_mach_z80full 7 /* All undocumented instructions. */
-#define bfd_mach_r800 11 /* R800: successor with multiplication. */
- bfd_arch_last
- @};
-@end example
-
-@subsection bfd_arch_info
-
-
-@strong{Description}@*
-This structure contains information on architectures for use
-within BFD.
-@example
-
-typedef struct bfd_arch_info
-@{
- int bits_per_word;
- int bits_per_address;
- int bits_per_byte;
- enum bfd_architecture arch;
- unsigned long mach;
- const char *arch_name;
- const char *printable_name;
- unsigned int section_align_power;
- /* TRUE if this is the default machine for the architecture.
- The default arch should be the first entry for an arch so that
- all the entries for that arch can be accessed via @code{next}. */
- bfd_boolean the_default;
- const struct bfd_arch_info * (*compatible)
- (const struct bfd_arch_info *a, const struct bfd_arch_info *b);
-
- bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
-
- const struct bfd_arch_info *next;
-@}
-bfd_arch_info_type;
-
-@end example
-
-@findex bfd_printable_name
-@subsubsection @code{bfd_printable_name}
-@strong{Synopsis}
-@example
-const char *bfd_printable_name (bfd *abfd);
-@end example
-@strong{Description}@*
-Return a printable string representing the architecture and machine
-from the pointer to the architecture info structure.
-
-@findex bfd_scan_arch
-@subsubsection @code{bfd_scan_arch}
-@strong{Synopsis}
-@example
-const bfd_arch_info_type *bfd_scan_arch (const char *string);
-@end example
-@strong{Description}@*
-Figure out if BFD supports any cpu which could be described with
-the name @var{string}. Return a pointer to an @code{arch_info}
-structure if a machine is found, otherwise NULL.
-
-@findex bfd_arch_list
-@subsubsection @code{bfd_arch_list}
-@strong{Synopsis}
-@example
-const char **bfd_arch_list (void);
-@end example
-@strong{Description}@*
-Return a freshly malloced NULL-terminated vector of the names
-of all the valid BFD architectures. Do not modify the names.
-
-@findex bfd_arch_get_compatible
-@subsubsection @code{bfd_arch_get_compatible}
-@strong{Synopsis}
-@example
-const bfd_arch_info_type *bfd_arch_get_compatible
- (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
-@end example
-@strong{Description}@*
-Determine whether two BFDs' architectures and machine types
-are compatible. Calculates the lowest common denominator
-between the two architectures and machine types implied by
-the BFDs and returns a pointer to an @code{arch_info} structure
-describing the compatible machine.
-
-@findex bfd_default_arch_struct
-@subsubsection @code{bfd_default_arch_struct}
-@strong{Description}@*
-The @code{bfd_default_arch_struct} is an item of
-@code{bfd_arch_info_type} which has been initialized to a fairly
-generic state. A BFD starts life by pointing to this
-structure, until the correct back end has determined the real
-architecture of the file.
-@example
-extern const bfd_arch_info_type bfd_default_arch_struct;
-@end example
-
-@findex bfd_set_arch_info
-@subsubsection @code{bfd_set_arch_info}
-@strong{Synopsis}
-@example
-void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
-@end example
-@strong{Description}@*
-Set the architecture info of @var{abfd} to @var{arg}.
-
-@findex bfd_default_set_arch_mach
-@subsubsection @code{bfd_default_set_arch_mach}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_default_set_arch_mach
- (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
-@end example
-@strong{Description}@*
-Set the architecture and machine type in BFD @var{abfd}
-to @var{arch} and @var{mach}. Find the correct
-pointer to a structure and insert it into the @code{arch_info}
-pointer.
-
-@findex bfd_get_arch
-@subsubsection @code{bfd_get_arch}
-@strong{Synopsis}
-@example
-enum bfd_architecture bfd_get_arch (bfd *abfd);
-@end example
-@strong{Description}@*
-Return the enumerated type which describes the BFD @var{abfd}'s
-architecture.
-
-@findex bfd_get_mach
-@subsubsection @code{bfd_get_mach}
-@strong{Synopsis}
-@example
-unsigned long bfd_get_mach (bfd *abfd);
-@end example
-@strong{Description}@*
-Return the long type which describes the BFD @var{abfd}'s
-machine.
-
-@findex bfd_arch_bits_per_byte
-@subsubsection @code{bfd_arch_bits_per_byte}
-@strong{Synopsis}
-@example
-unsigned int bfd_arch_bits_per_byte (bfd *abfd);
-@end example
-@strong{Description}@*
-Return the number of bits in one of the BFD @var{abfd}'s
-architecture's bytes.
-
-@findex bfd_arch_bits_per_address
-@subsubsection @code{bfd_arch_bits_per_address}
-@strong{Synopsis}
-@example
-unsigned int bfd_arch_bits_per_address (bfd *abfd);
-@end example
-@strong{Description}@*
-Return the number of bits in one of the BFD @var{abfd}'s
-architecture's addresses.
-
-@findex bfd_default_compatible
-@subsubsection @code{bfd_default_compatible}
-@strong{Synopsis}
-@example
-const bfd_arch_info_type *bfd_default_compatible
- (const bfd_arch_info_type *a, const bfd_arch_info_type *b);
-@end example
-@strong{Description}@*
-The default function for testing for compatibility.
-
-@findex bfd_default_scan
-@subsubsection @code{bfd_default_scan}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_default_scan
- (const struct bfd_arch_info *info, const char *string);
-@end example
-@strong{Description}@*
-The default function for working out whether this is an
-architecture hit and a machine hit.
-
-@findex bfd_get_arch_info
-@subsubsection @code{bfd_get_arch_info}
-@strong{Synopsis}
-@example
-const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
-@end example
-@strong{Description}@*
-Return the architecture info struct in @var{abfd}.
-
-@findex bfd_lookup_arch
-@subsubsection @code{bfd_lookup_arch}
-@strong{Synopsis}
-@example
-const bfd_arch_info_type *bfd_lookup_arch
- (enum bfd_architecture arch, unsigned long machine);
-@end example
-@strong{Description}@*
-Look for the architecture info structure which matches the
-arguments @var{arch} and @var{machine}. A machine of 0 matches the
-machine/architecture structure which marks itself as the
-default.
-
-@findex bfd_printable_arch_mach
-@subsubsection @code{bfd_printable_arch_mach}
-@strong{Synopsis}
-@example
-const char *bfd_printable_arch_mach
- (enum bfd_architecture arch, unsigned long machine);
-@end example
-@strong{Description}@*
-Return a printable string representing the architecture and
-machine type.
-
-This routine is depreciated.
-
-@findex bfd_octets_per_byte
-@subsubsection @code{bfd_octets_per_byte}
-@strong{Synopsis}
-@example
-unsigned int bfd_octets_per_byte (bfd *abfd);
-@end example
-@strong{Description}@*
-Return the number of octets (8-bit quantities) per target byte
-(minimum addressable unit). In most cases, this will be one, but some
-DSP targets have 16, 32, or even 48 bits per byte.
-
-@findex bfd_arch_mach_octets_per_byte
-@subsubsection @code{bfd_arch_mach_octets_per_byte}
-@strong{Synopsis}
-@example
-unsigned int bfd_arch_mach_octets_per_byte
- (enum bfd_architecture arch, unsigned long machine);
-@end example
-@strong{Description}@*
-See bfd_octets_per_byte.
-
-This routine is provided for those cases where a bfd * is not
-available
-
diff --git a/bfd/doc/bfd.info b/bfd/doc/bfd.info
deleted file mode 100644
index 14f4c2cdedd0..000000000000
--- a/bfd/doc/bfd.info
+++ /dev/null
@@ -1,10305 +0,0 @@
-This is ../.././bfd/doc/bfd.info, produced by makeinfo version 4.8 from
-../.././bfd/doc/bfd.texinfo.
-
-START-INFO-DIR-ENTRY
-* Bfd: (bfd). The Binary File Descriptor library.
-END-INFO-DIR-ENTRY
-
- This file documents the BFD library.
-
- Copyright (C) 1991, 2000, 2001, 2003 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".
-
-
-File: bfd.info, Node: Top, Next: Overview, Prev: (dir), Up: (dir)
-
- This file documents the binary file descriptor library libbfd.
-
-* Menu:
-
-* Overview:: Overview of BFD
-* BFD front end:: BFD front end
-* BFD back ends:: BFD back ends
-* GNU Free Documentation License:: GNU Free Documentation License
-* Index:: Index
-
-
-File: bfd.info, Node: Overview, Next: BFD front end, Prev: Top, Up: Top
-
-1 Introduction
-**************
-
-BFD is a package which allows applications to use the same routines to
-operate on object files whatever the object file format. A new object
-file format can be supported simply by creating a new BFD back end and
-adding it to the library.
-
- BFD is split into two parts: the front end, and the back ends (one
-for each object file format).
- * The front end of BFD provides the interface to the user. It manages
- memory and various canonical data structures. The front end also
- decides which back end to use and when to call back end routines.
-
- * The back ends provide BFD its view of the real world. Each back
- end provides a set of calls which the BFD front end can use to
- maintain its canonical form. The back ends also may keep around
- information for their own use, for greater efficiency.
-
-* Menu:
-
-* History:: History
-* How It Works:: How It Works
-* What BFD Version 2 Can Do:: What BFD Version 2 Can Do
-
-
-File: bfd.info, Node: History, Next: How It Works, Prev: Overview, Up: Overview
-
-1.1 History
-===========
-
-One spur behind BFD was the desire, on the part of the GNU 960 team at
-Intel Oregon, for interoperability of applications on their COFF and
-b.out file formats. Cygnus was providing GNU support for the team, and
-was contracted to provide the required functionality.
-
- The name came from a conversation David Wallace was having with
-Richard Stallman about the library: RMS said that it would be quite
-hard--David said "BFD". Stallman was right, but the name stuck.
-
- At the same time, Ready Systems wanted much the same thing, but for
-different object file formats: IEEE-695, Oasys, Srecords, a.out and 68k
-coff.
-
- BFD was first implemented by members of Cygnus Support; Steve
-Chamberlain (`sac@cygnus.com'), John Gilmore (`gnu@cygnus.com'), K.
-Richard Pixley (`rich@cygnus.com') and David Henkel-Wallace
-(`gumby@cygnus.com').
-
-
-File: bfd.info, Node: How It Works, Next: What BFD Version 2 Can Do, Prev: History, Up: Overview
-
-1.2 How To Use BFD
-==================
-
-To use the library, include `bfd.h' and link with `libbfd.a'.
-
- BFD provides a common interface to the parts of an object file for a
-calling application.
-
- When an application sucessfully opens a target file (object,
-archive, or whatever), a pointer to an internal structure is returned.
-This pointer points to a structure called `bfd', described in `bfd.h'.
-Our convention is to call this pointer a BFD, and instances of it
-within code `abfd'. All operations on the target object file are
-applied as methods to the BFD. The mapping is defined within `bfd.h'
-in a set of macros, all beginning with `bfd_' to reduce namespace
-pollution.
-
- For example, this sequence does what you would probably expect:
-return the number of sections in an object file attached to a BFD
-`abfd'.
-
- #include "bfd.h"
-
- unsigned int number_of_sections (abfd)
- bfd *abfd;
- {
- return bfd_count_sections (abfd);
- }
-
- The abstraction used within BFD is that an object file has:
-
- * a header,
-
- * a number of sections containing raw data (*note Sections::),
-
- * a set of relocations (*note Relocations::), and
-
- * some symbol information (*note Symbols::).
- Also, BFDs opened for archives have the additional attribute of an
-index and contain subordinate BFDs. This approach is fine for a.out and
-coff, but loses efficiency when applied to formats such as S-records and
-IEEE-695.
-
-
-File: bfd.info, Node: What BFD Version 2 Can Do, Prev: How It Works, Up: Overview
-
-1.3 What BFD Version 2 Can Do
-=============================
-
-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: bfd.info, Node: BFD information loss, Next: Canonical format, Up: What BFD Version 2 Can Do
-
-1.3.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: bfd.info, Node: Canonical format, Prev: BFD information loss, Up: What BFD Version 2 Can Do
-
-1.3.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: bfd.info, Node: BFD front end, Next: BFD back ends, Prev: Overview, Up: Top
-
-2 BFD Front End
-***************
-
-2.1 `typedef bfd'
-=================
-
-A BFD has type `bfd'; objects of this type are the cornerstone of any
-application using BFD. Using BFD consists of making references though
-the BFD and to data in the BFD.
-
- Here is the structure that defines the type `bfd'. It contains the
-major data about the file and pointers to the rest of the data.
-
-
- struct bfd
- {
- /* A unique identifier of the BFD */
- unsigned int id;
-
- /* The filename the application opened the BFD with. */
- const char *filename;
-
- /* A pointer to the target jump table. */
- const struct bfd_target *xvec;
-
- /* The IOSTREAM, and corresponding IO vector that provide access
- to the file backing the BFD. */
- void *iostream;
- const struct bfd_iovec *iovec;
-
- /* Is the file descriptor being cached? That is, can it be closed as
- needed, and re-opened when accessed later? */
- bfd_boolean cacheable;
-
- /* Marks whether there was a default target specified when the
- BFD was opened. This is used to select which matching algorithm
- to use to choose the back end. */
- bfd_boolean target_defaulted;
-
- /* The caching routines use these to maintain a
- least-recently-used list of BFDs. */
- struct bfd *lru_prev, *lru_next;
-
- /* When a file is closed by the caching routines, BFD retains
- state information on the file here... */
- ufile_ptr where;
-
- /* ... and here: (``once'' means at least once). */
- bfd_boolean opened_once;
-
- /* Set if we have a locally maintained mtime value, rather than
- getting it from the file each time. */
- bfd_boolean mtime_set;
-
- /* File modified time, if mtime_set is TRUE. */
- long mtime;
-
- /* Reserved for an unimplemented file locking extension. */
- int ifd;
-
- /* The format which belongs to the BFD. (object, core, etc.) */
- bfd_format format;
-
- /* The direction with which the BFD was opened. */
- enum bfd_direction
- {
- no_direction = 0,
- read_direction = 1,
- write_direction = 2,
- both_direction = 3
- }
- direction;
-
- /* Format_specific flags. */
- flagword flags;
-
- /* Currently my_archive is tested before adding origin to
- anything. I believe that this can become always an add of
- origin, with origin set to 0 for non archive files. */
- ufile_ptr origin;
-
- /* Remember when output has begun, to stop strange things
- from happening. */
- bfd_boolean output_has_begun;
-
- /* A hash table for section names. */
- struct bfd_hash_table section_htab;
-
- /* Pointer to linked list of sections. */
- struct bfd_section *sections;
-
- /* The last section on the section list. */
- struct bfd_section *section_last;
-
- /* The number of sections. */
- unsigned int section_count;
-
- /* Stuff only useful for object files:
- The start address. */
- bfd_vma start_address;
-
- /* Used for input and output. */
- unsigned int symcount;
-
- /* Symbol table for output BFD (with symcount entries). */
- struct bfd_symbol **outsymbols;
-
- /* Used for slurped dynamic symbol tables. */
- unsigned int dynsymcount;
-
- /* Pointer to structure which contains architecture information. */
- const struct bfd_arch_info *arch_info;
-
- /* Flag set if symbols from this BFD should not be exported. */
- bfd_boolean no_export;
-
- /* Stuff only useful for archives. */
- void *arelt_data;
- struct bfd *my_archive; /* The containing archive BFD. */
- struct bfd *next; /* The next BFD in the archive. */
- struct bfd *archive_head; /* The first BFD in the archive. */
- bfd_boolean has_armap;
-
- /* A chain of BFD structures involved in a link. */
- struct bfd *link_next;
-
- /* A field used by _bfd_generic_link_add_archive_symbols. This will
- be used only for archive elements. */
- int archive_pass;
-
- /* Used by the back end to hold private data. */
- union
- {
- struct aout_data_struct *aout_data;
- struct artdata *aout_ar_data;
- struct _oasys_data *oasys_obj_data;
- struct _oasys_ar_data *oasys_ar_data;
- struct coff_tdata *coff_obj_data;
- struct pe_tdata *pe_obj_data;
- struct xcoff_tdata *xcoff_obj_data;
- struct ecoff_tdata *ecoff_obj_data;
- struct ieee_data_struct *ieee_data;
- struct ieee_ar_data_struct *ieee_ar_data;
- struct srec_data_struct *srec_data;
- struct ihex_data_struct *ihex_data;
- struct tekhex_data_struct *tekhex_data;
- struct elf_obj_tdata *elf_obj_data;
- struct nlm_obj_tdata *nlm_obj_data;
- struct bout_data_struct *bout_data;
- struct mmo_data_struct *mmo_data;
- struct sun_core_struct *sun_core_data;
- struct sco5_core_struct *sco5_core_data;
- struct trad_core_struct *trad_core_data;
- struct som_data_struct *som_data;
- struct hpux_core_struct *hpux_core_data;
- struct hppabsd_core_struct *hppabsd_core_data;
- struct sgi_core_struct *sgi_core_data;
- struct lynx_core_struct *lynx_core_data;
- struct osf_core_struct *osf_core_data;
- struct cisco_core_struct *cisco_core_data;
- struct versados_data_struct *versados_data;
- struct netbsd_core_struct *netbsd_core_data;
- struct mach_o_data_struct *mach_o_data;
- struct mach_o_fat_data_struct *mach_o_fat_data;
- struct bfd_pef_data_struct *pef_data;
- struct bfd_pef_xlib_data_struct *pef_xlib_data;
- struct bfd_sym_data_struct *sym_data;
- void *any;
- }
- tdata;
-
- /* Used by the application to hold private data. */
- void *usrdata;
-
- /* Where all the allocated stuff under this BFD goes. This is a
- struct objalloc *, but we use void * to avoid requiring the inclusion
- of objalloc.h. */
- void *memory;
- };
-
-2.2 Error reporting
-===================
-
-Most BFD functions return nonzero on success (check their individual
-documentation for precise semantics). On an error, they call
-`bfd_set_error' to set an error condition that callers can check by
-calling `bfd_get_error'. If that returns `bfd_error_system_call', then
-check `errno'.
-
- The easiest way to report a BFD error to the user is to use
-`bfd_perror'.
-
-2.2.1 Type `bfd_error_type'
----------------------------
-
-The values returned by `bfd_get_error' are defined by the enumerated
-type `bfd_error_type'.
-
-
- typedef enum bfd_error
- {
- bfd_error_no_error = 0,
- bfd_error_system_call,
- bfd_error_invalid_target,
- bfd_error_wrong_format,
- bfd_error_wrong_object_format,
- bfd_error_invalid_operation,
- bfd_error_no_memory,
- bfd_error_no_symbols,
- bfd_error_no_armap,
- bfd_error_no_more_archived_files,
- bfd_error_malformed_archive,
- bfd_error_file_not_recognized,
- bfd_error_file_ambiguously_recognized,
- bfd_error_no_contents,
- bfd_error_nonrepresentable_section,
- bfd_error_no_debug_section,
- bfd_error_bad_value,
- bfd_error_file_truncated,
- bfd_error_file_too_big,
- bfd_error_invalid_error_code
- }
- bfd_error_type;
-
-2.2.1.1 `bfd_get_error'
-.......................
-
-*Synopsis*
- bfd_error_type bfd_get_error (void);
- *Description*
-Return the current BFD error condition.
-
-2.2.1.2 `bfd_set_error'
-.......................
-
-*Synopsis*
- void bfd_set_error (bfd_error_type error_tag);
- *Description*
-Set the BFD error condition to be ERROR_TAG.
-
-2.2.1.3 `bfd_errmsg'
-....................
-
-*Synopsis*
- const char *bfd_errmsg (bfd_error_type error_tag);
- *Description*
-Return a string describing the error ERROR_TAG, or the system error if
-ERROR_TAG is `bfd_error_system_call'.
-
-2.2.1.4 `bfd_perror'
-....................
-
-*Synopsis*
- void bfd_perror (const char *message);
- *Description*
-Print to the standard error stream a string describing the last BFD
-error that occurred, or the last system error if the last BFD error was
-a system call failure. If MESSAGE is non-NULL and non-empty, the error
-string printed is preceded by MESSAGE, a colon, and a space. It is
-followed by a newline.
-
-2.2.2 BFD error handler
------------------------
-
-Some BFD functions want to print messages describing the problem. They
-call a BFD error handler function. This function may be overridden by
-the program.
-
- The BFD error handler acts like printf.
-
-
- typedef void (*bfd_error_handler_type) (const char *, ...);
-
-2.2.2.1 `bfd_set_error_handler'
-...............................
-
-*Synopsis*
- bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
- *Description*
-Set the BFD error handler function. Returns the previous function.
-
-2.2.2.2 `bfd_set_error_program_name'
-....................................
-
-*Synopsis*
- void bfd_set_error_program_name (const char *);
- *Description*
-Set the program name to use when printing a BFD error. This is printed
-before the error message followed by a colon and space. The string
-must not be changed after it is passed to this function.
-
-2.2.2.3 `bfd_get_error_handler'
-...............................
-
-*Synopsis*
- bfd_error_handler_type bfd_get_error_handler (void);
- *Description*
-Return the BFD error handler function.
-
-2.3 Miscellaneous
-=================
-
-2.3.1 Miscellaneous functions
------------------------------
-
-2.3.1.1 `bfd_get_reloc_upper_bound'
-...................................
-
-*Synopsis*
- long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
- *Description*
-Return the number of bytes required to store the relocation information
-associated with section SECT attached to bfd ABFD. If an error occurs,
-return -1.
-
-2.3.1.2 `bfd_canonicalize_reloc'
-................................
-
-*Synopsis*
- long bfd_canonicalize_reloc
- (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
- *Description*
-Call the back end associated with the open BFD ABFD and translate the
-external form of the relocation information attached to SEC into the
-internal canonical form. Place the table into memory at LOC, which has
-been preallocated, usually by a call to `bfd_get_reloc_upper_bound'.
-Returns the number of relocs, or -1 on error.
-
- The SYMS table is also needed for horrible internal magic reasons.
-
-2.3.1.3 `bfd_set_reloc'
-.......................
-
-*Synopsis*
- void bfd_set_reloc
- (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
- *Description*
-Set the relocation pointer and count within section SEC to the values
-REL and COUNT. The argument ABFD is ignored.
-
-2.3.1.4 `bfd_set_file_flags'
-............................
-
-*Synopsis*
- bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
- *Description*
-Set the flag word in the BFD ABFD to the value FLAGS.
-
- Possible errors are:
- * `bfd_error_wrong_format' - The target bfd was not of object format.
-
- * `bfd_error_invalid_operation' - The target bfd was open for
- reading.
-
- * `bfd_error_invalid_operation' - The flag word contained a bit
- which was not applicable to the type of file. E.g., an attempt
- was made to set the `D_PAGED' bit on a BFD format which does not
- support demand paging.
-
-2.3.1.5 `bfd_get_arch_size'
-...........................
-
-*Synopsis*
- int bfd_get_arch_size (bfd *abfd);
- *Description*
-Returns the architecture address size, in bits, as determined by the
-object file's format. For ELF, this information is included in the
-header.
-
- *Returns*
-Returns the arch size in bits if known, `-1' otherwise.
-
-2.3.1.6 `bfd_get_sign_extend_vma'
-.................................
-
-*Synopsis*
- int bfd_get_sign_extend_vma (bfd *abfd);
- *Description*
-Indicates if the target architecture "naturally" sign extends an
-address. Some architectures implicitly sign extend address values when
-they are converted to types larger than the size of an address. For
-instance, bfd_get_start_address() will return an address sign extended
-to fill a bfd_vma when this is the case.
-
- *Returns*
-Returns `1' if the target architecture is known to sign extend
-addresses, `0' if the target architecture is known to not sign extend
-addresses, and `-1' otherwise.
-
-2.3.1.7 `bfd_set_start_address'
-...............................
-
-*Synopsis*
- bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
- *Description*
-Make VMA the entry point of output BFD ABFD.
-
- *Returns*
-Returns `TRUE' on success, `FALSE' otherwise.
-
-2.3.1.8 `bfd_get_gp_size'
-.........................
-
-*Synopsis*
- unsigned int bfd_get_gp_size (bfd *abfd);
- *Description*
-Return the maximum size of objects to be optimized using the GP
-register under MIPS ECOFF. This is typically set by the `-G' argument
-to the compiler, assembler or linker.
-
-2.3.1.9 `bfd_set_gp_size'
-.........................
-
-*Synopsis*
- void bfd_set_gp_size (bfd *abfd, unsigned int i);
- *Description*
-Set the maximum size of objects to be optimized using the GP register
-under ECOFF or MIPS ELF. This is typically set by the `-G' argument to
-the compiler, assembler or linker.
-
-2.3.1.10 `bfd_scan_vma'
-.......................
-
-*Synopsis*
- bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
- *Description*
-Convert, like `strtoul', a numerical expression STRING into a `bfd_vma'
-integer, and return that integer. (Though without as many bells and
-whistles as `strtoul'.) The expression is assumed to be unsigned
-(i.e., positive). If given a BASE, it is used as the base for
-conversion. A base of 0 causes the function to interpret the string in
-hex if a leading "0x" or "0X" is found, otherwise in octal if a leading
-zero is found, otherwise in decimal.
-
- If the value would overflow, the maximum `bfd_vma' value is returned.
-
-2.3.1.11 `bfd_copy_private_header_data'
-.......................................
-
-*Synopsis*
- bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
- *Description*
-Copy private BFD header information from the BFD IBFD to the the BFD
-OBFD. This copies information that may require sections to exist, but
-does not require symbol tables. Return `true' on success, `false' on
-error. Possible error returns are:
-
- * `bfd_error_no_memory' - Not enough memory exists to create private
- data for OBFD.
-
- #define bfd_copy_private_header_data(ibfd, obfd) \
- BFD_SEND (obfd, _bfd_copy_private_header_data, \
- (ibfd, obfd))
-
-2.3.1.12 `bfd_copy_private_bfd_data'
-....................................
-
-*Synopsis*
- bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
- *Description*
-Copy private BFD information from the BFD IBFD to the the BFD OBFD.
-Return `TRUE' on success, `FALSE' on error. Possible error returns are:
-
- * `bfd_error_no_memory' - Not enough memory exists to create private
- data for OBFD.
-
- #define bfd_copy_private_bfd_data(ibfd, obfd) \
- BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
- (ibfd, obfd))
-
-2.3.1.13 `bfd_merge_private_bfd_data'
-.....................................
-
-*Synopsis*
- bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd);
- *Description*
-Merge private BFD information from the BFD IBFD to the the output file
-BFD OBFD when linking. Return `TRUE' on success, `FALSE' on error.
-Possible error returns are:
-
- * `bfd_error_no_memory' - Not enough memory exists to create private
- data for OBFD.
-
- #define bfd_merge_private_bfd_data(ibfd, obfd) \
- BFD_SEND (obfd, _bfd_merge_private_bfd_data, \
- (ibfd, obfd))
-
-2.3.1.14 `bfd_set_private_flags'
-................................
-
-*Synopsis*
- bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
- *Description*
-Set private BFD flag information in the BFD ABFD. Return `TRUE' on
-success, `FALSE' on error. Possible error returns are:
-
- * `bfd_error_no_memory' - Not enough memory exists to create private
- data for OBFD.
-
- #define bfd_set_private_flags(abfd, flags) \
- BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
-
-2.3.1.15 `Other functions'
-..........................
-
-*Description*
-The following functions exist but have not yet been documented.
- #define bfd_sizeof_headers(abfd, reloc) \
- BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, reloc))
-
- #define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
- BFD_SEND (abfd, _bfd_find_nearest_line, \
- (abfd, sec, syms, off, file, func, line))
-
- #define bfd_find_line(abfd, syms, sym, file, line) \
- BFD_SEND (abfd, _bfd_find_line, \
- (abfd, syms, sym, file, line))
-
- #define bfd_find_inliner_info(abfd, file, func, line) \
- BFD_SEND (abfd, _bfd_find_inliner_info, \
- (abfd, file, func, line))
-
- #define bfd_debug_info_start(abfd) \
- BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
-
- #define bfd_debug_info_end(abfd) \
- BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
-
- #define bfd_debug_info_accumulate(abfd, section) \
- BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
-
- #define bfd_stat_arch_elt(abfd, stat) \
- BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
-
- #define bfd_update_armap_timestamp(abfd) \
- BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
-
- #define bfd_set_arch_mach(abfd, arch, mach)\
- BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
-
- #define bfd_relax_section(abfd, section, link_info, again) \
- BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
-
- #define bfd_gc_sections(abfd, link_info) \
- BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
-
- #define bfd_merge_sections(abfd, link_info) \
- BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
-
- #define bfd_is_group_section(abfd, sec) \
- BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
-
- #define bfd_discard_group(abfd, sec) \
- BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
-
- #define bfd_link_hash_table_create(abfd) \
- BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
-
- #define bfd_link_hash_table_free(abfd, hash) \
- BFD_SEND (abfd, _bfd_link_hash_table_free, (hash))
-
- #define bfd_link_add_symbols(abfd, info) \
- BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
-
- #define bfd_link_just_syms(abfd, sec, info) \
- BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
-
- #define bfd_final_link(abfd, info) \
- BFD_SEND (abfd, _bfd_final_link, (abfd, info))
-
- #define bfd_free_cached_info(abfd) \
- BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
-
- #define bfd_get_dynamic_symtab_upper_bound(abfd) \
- BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
-
- #define bfd_print_private_bfd_data(abfd, file)\
- BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
-
- #define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
- BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
-
- #define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
- BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
- dyncount, dynsyms, ret))
-
- #define bfd_get_dynamic_reloc_upper_bound(abfd) \
- BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
-
- #define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
- BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
-
- extern bfd_byte *bfd_get_relocated_section_contents
- (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
- bfd_boolean, asymbol **);
-
-2.3.1.16 `bfd_alt_mach_code'
-............................
-
-*Synopsis*
- bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
- *Description*
-When more than one machine code number is available for the same
-machine type, this function can be used to switch between the preferred
-one (alternative == 0) and any others. Currently, only ELF supports
-this feature, with up to two alternate machine codes.
-
- struct bfd_preserve
- {
- void *marker;
- void *tdata;
- flagword flags;
- const struct bfd_arch_info *arch_info;
- struct bfd_section *sections;
- struct bfd_section *section_last;
- unsigned int section_count;
- struct bfd_hash_table section_htab;
- };
-
-2.3.1.17 `bfd_preserve_save'
-............................
-
-*Synopsis*
- bfd_boolean bfd_preserve_save (bfd *, struct bfd_preserve *);
- *Description*
-When testing an object for compatibility with a particular target
-back-end, the back-end object_p function needs to set up certain fields
-in the bfd on successfully recognizing the object. This typically
-happens in a piecemeal fashion, with failures possible at many points.
-On failure, the bfd is supposed to be restored to its initial state,
-which is virtually impossible. However, restoring a subset of the bfd
-state works in practice. This function stores the subset and
-reinitializes the bfd.
-
-2.3.1.18 `bfd_preserve_restore'
-...............................
-
-*Synopsis*
- void bfd_preserve_restore (bfd *, struct bfd_preserve *);
- *Description*
-This function restores bfd state saved by bfd_preserve_save. If MARKER
-is non-NULL in struct bfd_preserve then that block and all subsequently
-bfd_alloc'd memory is freed.
-
-2.3.1.19 `bfd_preserve_finish'
-..............................
-
-*Synopsis*
- void bfd_preserve_finish (bfd *, struct bfd_preserve *);
- *Description*
-This function should be called when the bfd state saved by
-bfd_preserve_save is no longer needed. ie. when the back-end object_p
-function returns with success.
-
-2.3.1.20 `struct bfd_iovec'
-...........................
-
-*Description*
-The `struct bfd_iovec' contains the internal file I/O class. Each
-`BFD' has an instance of this class and all file I/O is routed through
-it (it is assumed that the instance implements all methods listed
-below).
- struct bfd_iovec
- {
- /* To avoid problems with macros, a "b" rather than "f"
- prefix is prepended to each method name. */
- /* Attempt to read/write NBYTES on ABFD's IOSTREAM storing/fetching
- bytes starting at PTR. Return the number of bytes actually
- transfered (a read past end-of-file returns less than NBYTES),
- or -1 (setting `bfd_error') if an error occurs. */
- file_ptr (*bread) (struct bfd *abfd, void *ptr, file_ptr nbytes);
- file_ptr (*bwrite) (struct bfd *abfd, const void *ptr,
- file_ptr nbytes);
- /* Return the current IOSTREAM file offset, or -1 (setting `bfd_error'
- if an error occurs. */
- file_ptr (*btell) (struct bfd *abfd);
- /* For the following, on successful completion a value of 0 is returned.
- Otherwise, a value of -1 is returned (and `bfd_error' is set). */
- int (*bseek) (struct bfd *abfd, file_ptr offset, int whence);
- int (*bclose) (struct bfd *abfd);
- int (*bflush) (struct bfd *abfd);
- int (*bstat) (struct bfd *abfd, struct stat *sb);
- };
-
-2.3.1.21 `bfd_get_mtime'
-........................
-
-*Synopsis*
- long bfd_get_mtime (bfd *abfd);
- *Description*
-Return the file modification time (as read from the file system, or
-from the archive header for archive members).
-
-2.3.1.22 `bfd_get_size'
-.......................
-
-*Synopsis*
- long bfd_get_size (bfd *abfd);
- *Description*
-Return the file size (as read from file system) for the file associated
-with BFD ABFD.
-
- The initial motivation for, and use of, this routine is not so we
-can get the exact size of the object the BFD applies to, since that
-might not be generally possible (archive members for example). It
-would be ideal if someone could eventually modify it so that such
-results were guaranteed.
-
- Instead, we want to ask questions like "is this NNN byte sized
-object I'm about to try read from file offset YYY reasonable?" As as
-example of where we might do this, some object formats use string
-tables for which the first `sizeof (long)' bytes of the table contain
-the size of the table itself, including the size bytes. If an
-application tries to read what it thinks is one of these string tables,
-without some way to validate the size, and for some reason the size is
-wrong (byte swapping error, wrong location for the string table, etc.),
-the only clue is likely to be a read error when it tries to read the
-table, or a "virtual memory exhausted" error when it tries to allocate
-15 bazillon bytes of space for the 15 bazillon byte table it is about
-to read. This function at least allows us to answer the question, "is
-the size reasonable?".
-
-* Menu:
-
-* Memory Usage::
-* Initialization::
-* Sections::
-* Symbols::
-* Archives::
-* Formats::
-* Relocations::
-* Core Files::
-* Targets::
-* Architectures::
-* Opening and Closing::
-* Internal::
-* File Caching::
-* Linker Functions::
-* Hash Tables::
-
-
-File: bfd.info, Node: Memory Usage, Next: Initialization, Prev: BFD front end, Up: BFD front end
-
-2.4 Memory Usage
-================
-
-BFD keeps all of its internal structures in obstacks. There is one
-obstack per open BFD file, into which the current state is stored. When
-a BFD is closed, the obstack is deleted, and so everything which has
-been allocated by BFD for the closing file is thrown away.
-
- BFD does not free anything created by an application, but pointers
-into `bfd' structures become invalid on a `bfd_close'; for example,
-after a `bfd_close' the vector passed to `bfd_canonicalize_symtab' is
-still around, since it has been allocated by the application, but the
-data that it pointed to are lost.
-
- The general rule is to not close a BFD until all operations dependent
-upon data from the BFD have been completed, or all the data from within
-the file has been copied. To help with the management of memory, there
-is a function (`bfd_alloc_size') which returns the number of bytes in
-obstacks associated with the supplied BFD. This could be used to select
-the greediest open BFD, close it to reclaim the memory, perform some
-operation and reopen the BFD again, to get a fresh copy of the data
-structures.
-
-
-File: bfd.info, Node: Initialization, Next: Sections, Prev: Memory Usage, Up: BFD front end
-
-2.5 Initialization
-==================
-
-2.5.1 Initialization functions
-------------------------------
-
-These are the functions that handle initializing a BFD.
-
-2.5.1.1 `bfd_init'
-..................
-
-*Synopsis*
- void bfd_init (void);
- *Description*
-This routine must be called before any other BFD function to initialize
-magical internal data structures.
-
-
-File: bfd.info, Node: Sections, Next: Symbols, Prev: Initialization, Up: BFD front end
-
-2.6 Sections
-============
-
-The raw data contained within a BFD is maintained through the section
-abstraction. A single BFD may have any number of sections. It keeps
-hold of them by pointing to the first; each one points to the next in
-the list.
-
- Sections are supported in BFD in `section.c'.
-
-* Menu:
-
-* Section Input::
-* Section Output::
-* typedef asection::
-* section prototypes::
-
-
-File: bfd.info, Node: Section Input, Next: Section Output, Prev: Sections, Up: Sections
-
-2.6.1 Section input
--------------------
-
-When a BFD is opened for reading, the section structures are created
-and attached to the BFD.
-
- Each section has a name which describes the section in the outside
-world--for example, `a.out' would contain at least three sections,
-called `.text', `.data' and `.bss'.
-
- Names need not be unique; for example a COFF file may have several
-sections named `.data'.
-
- Sometimes a BFD will contain more than the "natural" number of
-sections. A back end may attach other sections containing constructor
-data, or an application may add a section (using `bfd_make_section') to
-the sections attached to an already open BFD. For example, the linker
-creates an extra section `COMMON' for each input file's BFD to hold
-information about common storage.
-
- The raw data is not necessarily read in when the section descriptor
-is created. Some targets may leave the data in place until a
-`bfd_get_section_contents' call is made. Other back ends may read in
-all the data at once. For example, an S-record file has to be read
-once to determine the size of the data. An IEEE-695 file doesn't
-contain raw data in sections, but data and relocation expressions
-intermixed, so the data area has to be parsed to get out the data and
-relocations.
-
-
-File: bfd.info, Node: Section Output, Next: typedef asection, Prev: Section Input, Up: Sections
-
-2.6.2 Section output
---------------------
-
-To write a new object style BFD, the various sections to be written
-have to be created. They are attached to the BFD in the same way as
-input sections; data is written to the sections using
-`bfd_set_section_contents'.
-
- Any program that creates or combines sections (e.g., the assembler
-and linker) must use the `asection' fields `output_section' and
-`output_offset' to indicate the file sections to which each section
-must be written. (If the section is being created from scratch,
-`output_section' should probably point to the section itself and
-`output_offset' should probably be zero.)
-
- The data to be written comes from input sections attached (via
-`output_section' pointers) to the output sections. The output section
-structure can be considered a filter for the input section: the output
-section determines the vma of the output data and the name, but the
-input section determines the offset into the output section of the data
-to be written.
-
- E.g., to create a section "O", starting at 0x100, 0x123 long,
-containing two subsections, "A" at offset 0x0 (i.e., at vma 0x100) and
-"B" at offset 0x20 (i.e., at vma 0x120) the `asection' structures would
-look like:
-
- section name "A"
- output_offset 0x00
- size 0x20
- output_section -----------> section name "O"
- | vma 0x100
- section name "B" | size 0x123
- output_offset 0x20 |
- size 0x103 |
- output_section --------|
-
-2.6.3 Link orders
------------------
-
-The data within a section is stored in a "link_order". These are much
-like the fixups in `gas'. The link_order abstraction allows a section
-to grow and shrink within itself.
-
- A link_order knows how big it is, and which is the next link_order
-and where the raw data for it is; it also points to a list of
-relocations which apply to it.
-
- The link_order is used by the linker to perform relaxing on final
-code. The compiler creates code which is as big as necessary to make
-it work without relaxing, and the user can select whether to relax.
-Sometimes relaxing takes a lot of time. The linker runs around the
-relocations to see if any are attached to data which can be shrunk, if
-so it does it on a link_order by link_order basis.
-
-
-File: bfd.info, Node: typedef asection, Next: section prototypes, Prev: Section Output, Up: Sections
-
-2.6.4 typedef asection
-----------------------
-
-Here is the section structure:
-
-
- typedef struct bfd_section
- {
- /* The name of the section; the name isn't a copy, the pointer is
- the same as that passed to bfd_make_section. */
- const char *name;
-
- /* A unique sequence number. */
- int id;
-
- /* Which section in the bfd; 0..n-1 as sections are created in a bfd. */
- int index;
-
- /* The next section in the list belonging to the BFD, or NULL. */
- struct bfd_section *next;
-
- /* The previous section in the list belonging to the BFD, or NULL. */
- struct bfd_section *prev;
-
- /* The field flags contains attributes of the section. Some
- flags are read in from the object file, and some are
- synthesized from other information. */
- flagword flags;
-
- #define SEC_NO_FLAGS 0x000
-
- /* Tells the OS to allocate space for this section when loading.
- This is clear for a section containing debug information only. */
- #define SEC_ALLOC 0x001
-
- /* Tells the OS to load the section from the file when loading.
- This is clear for a .bss section. */
- #define SEC_LOAD 0x002
-
- /* The section contains data still to be relocated, so there is
- some relocation information too. */
- #define SEC_RELOC 0x004
-
- /* A signal to the OS that the section contains read only data. */
- #define SEC_READONLY 0x008
-
- /* The section contains code only. */
- #define SEC_CODE 0x010
-
- /* The section contains data only. */
- #define SEC_DATA 0x020
-
- /* The section will reside in ROM. */
- #define SEC_ROM 0x040
-
- /* The section contains constructor information. This section
- type is used by the linker to create lists of constructors and
- destructors used by `g++'. When a back end sees a symbol
- which should be used in a constructor list, it creates a new
- section for the type of name (e.g., `__CTOR_LIST__'), attaches
- the symbol to it, and builds a relocation. To build the lists
- of constructors, all the linker has to do is catenate all the
- sections called `__CTOR_LIST__' and relocate the data
- contained within - exactly the operations it would peform on
- standard data. */
- #define SEC_CONSTRUCTOR 0x080
-
- /* The section has contents - a data section could be
- `SEC_ALLOC' | `SEC_HAS_CONTENTS'; a debug section could be
- `SEC_HAS_CONTENTS' */
- #define SEC_HAS_CONTENTS 0x100
-
- /* An instruction to the linker to not output the section
- even if it has information which would normally be written. */
- #define SEC_NEVER_LOAD 0x200
-
- /* The section contains thread local data. */
- #define SEC_THREAD_LOCAL 0x400
-
- /* The section has GOT references. This flag is only for the
- linker, and is currently only used by the elf32-hppa back end.
- It will be set if global offset table references were detected
- in this section, which indicate to the linker that the section
- contains PIC code, and must be handled specially when doing a
- static link. */
- #define SEC_HAS_GOT_REF 0x800
-
- /* The section contains common symbols (symbols may be defined
- multiple times, the value of a symbol is the amount of
- space it requires, and the largest symbol value is the one
- used). Most targets have exactly one of these (which we
- translate to bfd_com_section_ptr), but ECOFF has two. */
- #define SEC_IS_COMMON 0x1000
-
- /* The section contains only debugging information. For
- example, this is set for ELF .debug and .stab sections.
- strip tests this flag to see if a section can be
- discarded. */
- #define SEC_DEBUGGING 0x2000
-
- /* The contents of this section are held in memory pointed to
- by the contents field. This is checked by bfd_get_section_contents,
- and the data is retrieved from memory if appropriate. */
- #define SEC_IN_MEMORY 0x4000
-
- /* The contents of this section are to be excluded by the
- linker for executable and shared objects unless those
- objects are to be further relocated. */
- #define SEC_EXCLUDE 0x8000
-
- /* The contents of this section are to be sorted based on the sum of
- the symbol and addend values specified by the associated relocation
- entries. Entries without associated relocation entries will be
- appended to the end of the section in an unspecified order. */
- #define SEC_SORT_ENTRIES 0x10000
-
- /* When linking, duplicate sections of the same name should be
- discarded, rather than being combined into a single section as
- is usually done. This is similar to how common symbols are
- handled. See SEC_LINK_DUPLICATES below. */
- #define SEC_LINK_ONCE 0x20000
-
- /* If SEC_LINK_ONCE is set, this bitfield describes how the linker
- should handle duplicate sections. */
- #define SEC_LINK_DUPLICATES 0x40000
-
- /* This value for SEC_LINK_DUPLICATES means that duplicate
- sections with the same name should simply be discarded. */
- #define SEC_LINK_DUPLICATES_DISCARD 0x0
-
- /* This value for SEC_LINK_DUPLICATES means that the linker
- should warn if there are any duplicate sections, although
- it should still only link one copy. */
- #define SEC_LINK_DUPLICATES_ONE_ONLY 0x80000
-
- /* This value for SEC_LINK_DUPLICATES means that the linker
- should warn if any duplicate sections are a different size. */
- #define SEC_LINK_DUPLICATES_SAME_SIZE 0x100000
-
- /* This value for SEC_LINK_DUPLICATES means that the linker
- should warn if any duplicate sections contain different
- contents. */
- #define SEC_LINK_DUPLICATES_SAME_CONTENTS \
- (SEC_LINK_DUPLICATES_ONE_ONLY | SEC_LINK_DUPLICATES_SAME_SIZE)
-
- /* This section was created by the linker as part of dynamic
- relocation or other arcane processing. It is skipped when
- going through the first-pass output, trusting that someone
- else up the line will take care of it later. */
- #define SEC_LINKER_CREATED 0x200000
-
- /* This section should not be subject to garbage collection. */
- #define SEC_KEEP 0x400000
-
- /* This section contains "short" data, and should be placed
- "near" the GP. */
- #define SEC_SMALL_DATA 0x800000
-
- /* Attempt to merge identical entities in the section.
- Entity size is given in the entsize field. */
- #define SEC_MERGE 0x1000000
-
- /* If given with SEC_MERGE, entities to merge are zero terminated
- strings where entsize specifies character size instead of fixed
- size entries. */
- #define SEC_STRINGS 0x2000000
-
- /* This section contains data about section groups. */
- #define SEC_GROUP 0x4000000
-
- /* The section is a COFF shared library section. This flag is
- only for the linker. If this type of section appears in
- the input file, the linker must copy it to the output file
- without changing the vma or size. FIXME: Although this
- was originally intended to be general, it really is COFF
- specific (and the flag was renamed to indicate this). It
- might be cleaner to have some more general mechanism to
- allow the back end to control what the linker does with
- sections. */
- #define SEC_COFF_SHARED_LIBRARY 0x10000000
-
- /* This section contains data which may be shared with other
- executables or shared objects. This is for COFF only. */
- #define SEC_COFF_SHARED 0x20000000
-
- /* When a section with this flag is being linked, then if the size of
- the input section is less than a page, it should not cross a page
- boundary. If the size of the input section is one page or more,
- it should be aligned on a page boundary. This is for TI
- TMS320C54X only. */
- #define SEC_TIC54X_BLOCK 0x40000000
-
- /* Conditionally link this section; do not link if there are no
- references found to any symbol in the section. This is for TI
- TMS320C54X only. */
- #define SEC_TIC54X_CLINK 0x80000000
-
- /* End of section flags. */
-
- /* Some internal packed boolean fields. */
-
- /* See the vma field. */
- unsigned int user_set_vma : 1;
-
- /* A mark flag used by some of the linker backends. */
- unsigned int linker_mark : 1;
-
- /* Another mark flag used by some of the linker backends. Set for
- output sections that have an input section. */
- unsigned int linker_has_input : 1;
-
- /* Mark flags used by some linker backends for garbage collection. */
- unsigned int gc_mark : 1;
- unsigned int gc_mark_from_eh : 1;
-
- /* The following flags are used by the ELF linker. */
-
- /* Mark sections which have been allocated to segments. */
- unsigned int segment_mark : 1;
-
- /* Type of sec_info information. */
- unsigned int sec_info_type:3;
- #define ELF_INFO_TYPE_NONE 0
- #define ELF_INFO_TYPE_STABS 1
- #define ELF_INFO_TYPE_MERGE 2
- #define ELF_INFO_TYPE_EH_FRAME 3
- #define ELF_INFO_TYPE_JUST_SYMS 4
-
- /* Nonzero if this section uses RELA relocations, rather than REL. */
- unsigned int use_rela_p:1;
-
- /* Bits used by various backends. The generic code doesn't touch
- these fields. */
-
- /* Nonzero if this section has TLS related relocations. */
- unsigned int has_tls_reloc:1;
-
- /* Nonzero if this section has a gp reloc. */
- unsigned int has_gp_reloc:1;
-
- /* Nonzero if this section needs the relax finalize pass. */
- unsigned int need_finalize_relax:1;
-
- /* Whether relocations have been processed. */
- unsigned int reloc_done : 1;
-
- /* End of internal packed boolean fields. */
-
- /* The virtual memory address of the section - where it will be
- at run time. The symbols are relocated against this. The
- user_set_vma flag is maintained by bfd; if it's not set, the
- backend can assign addresses (for example, in `a.out', where
- the default address for `.data' is dependent on the specific
- target and various flags). */
- bfd_vma vma;
-
- /* The load address of the section - where it would be in a
- rom image; really only used for writing section header
- information. */
- bfd_vma lma;
-
- /* The size of the section in octets, as it will be output.
- Contains a value even if the section has no contents (e.g., the
- size of `.bss'). */
- bfd_size_type size;
-
- /* For input sections, the original size on disk of the section, in
- octets. This field is used by the linker relaxation code. It is
- currently only set for sections where the linker relaxation scheme
- doesn't cache altered section and reloc contents (stabs, eh_frame,
- SEC_MERGE, some coff relaxing targets), and thus the original size
- needs to be kept to read the section multiple times.
- For output sections, rawsize holds the section size calculated on
- a previous linker relaxation pass. */
- bfd_size_type rawsize;
-
- /* If this section is going to be output, then this value is the
- offset in *bytes* into the output section of the first byte in the
- input section (byte ==> smallest addressable unit on the
- target). In most cases, if this was going to start at the
- 100th octet (8-bit quantity) in the output section, this value
- would be 100. However, if the target byte size is 16 bits
- (bfd_octets_per_byte is "2"), this value would be 50. */
- bfd_vma output_offset;
-
- /* The output section through which to map on output. */
- struct bfd_section *output_section;
-
- /* The alignment requirement of the section, as an exponent of 2 -
- e.g., 3 aligns to 2^3 (or 8). */
- unsigned int alignment_power;
-
- /* If an input section, a pointer to a vector of relocation
- records for the data in this section. */
- struct reloc_cache_entry *relocation;
-
- /* If an output section, a pointer to a vector of pointers to
- relocation records for the data in this section. */
- struct reloc_cache_entry **orelocation;
-
- /* The number of relocation records in one of the above. */
- unsigned reloc_count;
-
- /* Information below is back end specific - and not always used
- or updated. */
-
- /* File position of section data. */
- file_ptr filepos;
-
- /* File position of relocation info. */
- file_ptr rel_filepos;
-
- /* File position of line data. */
- file_ptr line_filepos;
-
- /* Pointer to data for applications. */
- void *userdata;
-
- /* If the SEC_IN_MEMORY flag is set, this points to the actual
- contents. */
- unsigned char *contents;
-
- /* Attached line number information. */
- alent *lineno;
-
- /* Number of line number records. */
- unsigned int lineno_count;
-
- /* Entity size for merging purposes. */
- unsigned int entsize;
-
- /* Points to the kept section if this section is a link-once section,
- and is discarded. */
- struct bfd_section *kept_section;
-
- /* When a section is being output, this value changes as more
- linenumbers are written out. */
- file_ptr moving_line_filepos;
-
- /* What the section number is in the target world. */
- int target_index;
-
- void *used_by_bfd;
-
- /* If this is a constructor section then here is a list of the
- relocations created to relocate items within it. */
- struct relent_chain *constructor_chain;
-
- /* The BFD which owns the section. */
- bfd *owner;
-
- /* A symbol which points at this section only. */
- struct bfd_symbol *symbol;
- struct bfd_symbol **symbol_ptr_ptr;
-
- /* Early in the link process, map_head and map_tail are used to build
- a list of input sections attached to an output section. Later,
- output sections use these fields for a list of bfd_link_order
- structs. */
- union {
- struct bfd_link_order *link_order;
- struct bfd_section *s;
- } map_head, map_tail;
- } asection;
-
- /* These sections are global, and are managed by BFD. The application
- and target back end are not permitted to change the values in
- these sections. New code should use the section_ptr macros rather
- than referring directly to the const sections. The const sections
- may eventually vanish. */
- #define BFD_ABS_SECTION_NAME "*ABS*"
- #define BFD_UND_SECTION_NAME "*UND*"
- #define BFD_COM_SECTION_NAME "*COM*"
- #define BFD_IND_SECTION_NAME "*IND*"
-
- /* The absolute section. */
- extern asection bfd_abs_section;
- #define bfd_abs_section_ptr ((asection *) &bfd_abs_section)
- #define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
- /* Pointer to the undefined section. */
- extern asection bfd_und_section;
- #define bfd_und_section_ptr ((asection *) &bfd_und_section)
- #define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
- /* Pointer to the common section. */
- extern asection bfd_com_section;
- #define bfd_com_section_ptr ((asection *) &bfd_com_section)
- /* Pointer to the indirect section. */
- extern asection bfd_ind_section;
- #define bfd_ind_section_ptr ((asection *) &bfd_ind_section)
- #define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
-
- #define bfd_is_const_section(SEC) \
- ( ((SEC) == bfd_abs_section_ptr) \
- || ((SEC) == bfd_und_section_ptr) \
- || ((SEC) == bfd_com_section_ptr) \
- || ((SEC) == bfd_ind_section_ptr))
-
- extern const struct bfd_symbol * const bfd_abs_symbol;
- extern const struct bfd_symbol * const bfd_com_symbol;
- extern const struct bfd_symbol * const bfd_und_symbol;
- extern const struct bfd_symbol * const bfd_ind_symbol;
-
- /* Macros to handle insertion and deletion of a bfd's sections. These
- only handle the list pointers, ie. do not adjust section_count,
- target_index etc. */
- #define bfd_section_list_remove(ABFD, S) \
- do \
- { \
- asection *_s = S; \
- asection *_next = _s->next; \
- asection *_prev = _s->prev; \
- if (_prev) \
- _prev->next = _next; \
- else \
- (ABFD)->sections = _next; \
- if (_next) \
- _next->prev = _prev; \
- else \
- (ABFD)->section_last = _prev; \
- } \
- while (0)
- #define bfd_section_list_append(ABFD, S) \
- do \
- { \
- asection *_s = S; \
- bfd *_abfd = ABFD; \
- _s->next = NULL; \
- if (_abfd->section_last) \
- { \
- _s->prev = _abfd->section_last; \
- _abfd->section_last->next = _s; \
- } \
- else \
- { \
- _s->prev = NULL; \
- _abfd->sections = _s; \
- } \
- _abfd->section_last = _s; \
- } \
- while (0)
- #define bfd_section_list_prepend(ABFD, S) \
- do \
- { \
- asection *_s = S; \
- bfd *_abfd = ABFD; \
- _s->prev = NULL; \
- if (_abfd->sections) \
- { \
- _s->next = _abfd->sections; \
- _abfd->sections->prev = _s; \
- } \
- else \
- { \
- _s->next = NULL; \
- _abfd->section_last = _s; \
- } \
- _abfd->sections = _s; \
- } \
- while (0)
- #define bfd_section_list_insert_after(ABFD, A, S) \
- do \
- { \
- asection *_a = A; \
- asection *_s = S; \
- asection *_next = _a->next; \
- _s->next = _next; \
- _s->prev = _a; \
- _a->next = _s; \
- if (_next) \
- _next->prev = _s; \
- else \
- (ABFD)->section_last = _s; \
- } \
- while (0)
- #define bfd_section_list_insert_before(ABFD, B, S) \
- do \
- { \
- asection *_b = B; \
- asection *_s = S; \
- asection *_prev = _b->prev; \
- _s->prev = _prev; \
- _s->next = _b; \
- _b->prev = _s; \
- if (_prev) \
- _prev->next = _s; \
- else \
- (ABFD)->sections = _s; \
- } \
- while (0)
- #define bfd_section_removed_from_list(ABFD, S) \
- ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
-
- #define BFD_FAKE_SECTION(SEC, FLAGS, SYM, SYM_PTR, NAME, IDX) \
- /* name, id, index, next, prev, flags, user_set_vma, */ \
- { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \
- \
- /* linker_mark, linker_has_input, gc_mark, gc_mark_from_eh, */ \
- 0, 0, 1, 0, \
- \
- /* segment_mark, sec_info_type, use_rela_p, has_tls_reloc, */ \
- 0, 0, 0, 0, \
- \
- /* has_gp_reloc, need_finalize_relax, reloc_done, */ \
- 0, 0, 0, \
- \
- /* vma, lma, size, rawsize */ \
- 0, 0, 0, 0, \
- \
- /* output_offset, output_section, alignment_power, */ \
- 0, (struct bfd_section *) &SEC, 0, \
- \
- /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \
- NULL, NULL, 0, 0, 0, \
- \
- /* line_filepos, userdata, contents, lineno, lineno_count, */ \
- 0, NULL, NULL, NULL, 0, \
- \
- /* entsize, kept_section, moving_line_filepos, */ \
- 0, NULL, 0, \
- \
- /* target_index, used_by_bfd, constructor_chain, owner, */ \
- 0, NULL, NULL, NULL, \
- \
- /* symbol, */ \
- (struct bfd_symbol *) SYM, \
- \
- /* symbol_ptr_ptr, */ \
- (struct bfd_symbol **) SYM_PTR, \
- \
- /* map_head, map_tail */ \
- { NULL }, { NULL } \
- }
-
-
-File: bfd.info, Node: section prototypes, Prev: typedef asection, Up: Sections
-
-2.6.5 Section prototypes
-------------------------
-
-These are the functions exported by the section handling part of BFD.
-
-2.6.5.1 `bfd_section_list_clear'
-................................
-
-*Synopsis*
- void bfd_section_list_clear (bfd *);
- *Description*
-Clears the section list, and also resets the section count and hash
-table entries.
-
-2.6.5.2 `bfd_get_section_by_name'
-.................................
-
-*Synopsis*
- asection *bfd_get_section_by_name (bfd *abfd, const char *name);
- *Description*
-Run through ABFD and return the one of the `asection's whose name
-matches NAME, otherwise `NULL'. *Note Sections::, for more information.
-
- This should only be used in special cases; the normal way to process
-all sections of a given name is to use `bfd_map_over_sections' and
-`strcmp' on the name (or better yet, base it on the section flags or
-something else) for each section.
-
-2.6.5.3 `bfd_get_section_by_name_if'
-....................................
-
-*Synopsis*
- asection *bfd_get_section_by_name_if
- (bfd *abfd,
- const char *name,
- bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
- void *obj);
- *Description*
-Call the provided function FUNC for each section attached to the BFD
-ABFD whose name matches NAME, passing OBJ as an argument. The function
-will be called as if by
-
- func (abfd, the_section, obj);
-
- It returns the first section for which FUNC returns true, otherwise
-`NULL'.
-
-2.6.5.4 `bfd_get_unique_section_name'
-.....................................
-
-*Synopsis*
- char *bfd_get_unique_section_name
- (bfd *abfd, const char *templat, int *count);
- *Description*
-Invent a section name that is unique in ABFD by tacking a dot and a
-digit suffix onto the original TEMPLAT. If COUNT is non-NULL, then it
-specifies the first number tried as a suffix to generate a unique name.
-The value pointed to by COUNT will be incremented in this case.
-
-2.6.5.5 `bfd_make_section_old_way'
-..................................
-
-*Synopsis*
- asection *bfd_make_section_old_way (bfd *abfd, const char *name);
- *Description*
-Create a new empty section called NAME and attach it to the end of the
-chain of sections for the BFD ABFD. An attempt to create a section with
-a name which is already in use returns its pointer without changing the
-section chain.
-
- It has the funny name since this is the way it used to be before it
-was rewritten....
-
- Possible errors are:
- * `bfd_error_invalid_operation' - If output has already started for
- this BFD.
-
- * `bfd_error_no_memory' - If memory allocation fails.
-
-2.6.5.6 `bfd_make_section_anyway_with_flags'
-............................................
-
-*Synopsis*
- asection *bfd_make_section_anyway_with_flags
- (bfd *abfd, const char *name, flagword flags);
- *Description*
-Create a new empty section called NAME and attach it to the end of the
-chain of sections for ABFD. Create a new section even if there is
-already a section with that name. Also set the attributes of the new
-section to the value FLAGS.
-
- Return `NULL' and set `bfd_error' on error; possible errors are:
- * `bfd_error_invalid_operation' - If output has already started for
- ABFD.
-
- * `bfd_error_no_memory' - If memory allocation fails.
-
-2.6.5.7 `bfd_make_section_anyway'
-.................................
-
-*Synopsis*
- asection *bfd_make_section_anyway (bfd *abfd, const char *name);
- *Description*
-Create a new empty section called NAME and attach it to the end of the
-chain of sections for ABFD. Create a new section even if there is
-already a section with that name.
-
- Return `NULL' and set `bfd_error' on error; possible errors are:
- * `bfd_error_invalid_operation' - If output has already started for
- ABFD.
-
- * `bfd_error_no_memory' - If memory allocation fails.
-
-2.6.5.8 `bfd_make_section_with_flags'
-.....................................
-
-*Synopsis*
- asection *bfd_make_section_with_flags
- (bfd *, const char *name, flagword flags);
- *Description*
-Like `bfd_make_section_anyway', but return `NULL' (without calling
-bfd_set_error ()) without changing the section chain if there is
-already a section named NAME. Also set the attributes of the new
-section to the value FLAGS. If there is an error, return `NULL' and set
-`bfd_error'.
-
-2.6.5.9 `bfd_make_section'
-..........................
-
-*Synopsis*
- asection *bfd_make_section (bfd *, const char *name);
- *Description*
-Like `bfd_make_section_anyway', but return `NULL' (without calling
-bfd_set_error ()) without changing the section chain if there is
-already a section named NAME. If there is an error, return `NULL' and
-set `bfd_error'.
-
-2.6.5.10 `bfd_set_section_flags'
-................................
-
-*Synopsis*
- bfd_boolean bfd_set_section_flags
- (bfd *abfd, asection *sec, flagword flags);
- *Description*
-Set the attributes of the section SEC in the BFD ABFD to the value
-FLAGS. Return `TRUE' on success, `FALSE' on error. Possible error
-returns are:
-
- * `bfd_error_invalid_operation' - The section cannot have one or
- more of the attributes requested. For example, a .bss section in
- `a.out' may not have the `SEC_HAS_CONTENTS' field set.
-
-2.6.5.11 `bfd_map_over_sections'
-................................
-
-*Synopsis*
- void bfd_map_over_sections
- (bfd *abfd,
- void (*func) (bfd *abfd, asection *sect, void *obj),
- void *obj);
- *Description*
-Call the provided function FUNC for each section attached to the BFD
-ABFD, passing OBJ as an argument. The function will be called as if by
-
- func (abfd, the_section, obj);
-
- This is the preferred method for iterating over sections; an
-alternative would be to use a loop:
-
- section *p;
- for (p = abfd->sections; p != NULL; p = p->next)
- func (abfd, p, ...)
-
-2.6.5.12 `bfd_sections_find_if'
-...............................
-
-*Synopsis*
- asection *bfd_sections_find_if
- (bfd *abfd,
- bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj),
- void *obj);
- *Description*
-Call the provided function OPERATION for each section attached to the
-BFD ABFD, passing OBJ as an argument. The function will be called as if
-by
-
- operation (abfd, the_section, obj);
-
- It returns the first section for which OPERATION returns true.
-
-2.6.5.13 `bfd_set_section_size'
-...............................
-
-*Synopsis*
- bfd_boolean bfd_set_section_size
- (bfd *abfd, asection *sec, bfd_size_type val);
- *Description*
-Set SEC to the size VAL. If the operation is ok, then `TRUE' is
-returned, else `FALSE'.
-
- Possible error returns:
- * `bfd_error_invalid_operation' - Writing has started to the BFD, so
- setting the size is invalid.
-
-2.6.5.14 `bfd_set_section_contents'
-...................................
-
-*Synopsis*
- bfd_boolean bfd_set_section_contents
- (bfd *abfd, asection *section, const void *data,
- file_ptr offset, bfd_size_type count);
- *Description*
-Sets the contents of the section SECTION in BFD ABFD to the data
-starting in memory at DATA. The data is written to the output section
-starting at offset OFFSET for COUNT octets.
-
- Normally `TRUE' is returned, else `FALSE'. Possible error returns
-are:
- * `bfd_error_no_contents' - The output section does not have the
- `SEC_HAS_CONTENTS' attribute, so nothing can be written to it.
-
- * and some more too
- This routine is front end to the back end function
-`_bfd_set_section_contents'.
-
-2.6.5.15 `bfd_get_section_contents'
-...................................
-
-*Synopsis*
- bfd_boolean bfd_get_section_contents
- (bfd *abfd, asection *section, void *location, file_ptr offset,
- bfd_size_type count);
- *Description*
-Read data from SECTION in BFD ABFD into memory starting at LOCATION.
-The data is read at an offset of OFFSET from the start of the input
-section, and is read for COUNT bytes.
-
- If the contents of a constructor with the `SEC_CONSTRUCTOR' flag set
-are requested or if the section does not have the `SEC_HAS_CONTENTS'
-flag set, then the LOCATION is filled with zeroes. If no errors occur,
-`TRUE' is returned, else `FALSE'.
-
-2.6.5.16 `bfd_malloc_and_get_section'
-.....................................
-
-*Synopsis*
- bfd_boolean bfd_malloc_and_get_section
- (bfd *abfd, asection *section, bfd_byte **buf);
- *Description*
-Read all data from SECTION in BFD ABFD into a buffer, *BUF, malloc'd by
-this function.
-
-2.6.5.17 `bfd_copy_private_section_data'
-........................................
-
-*Synopsis*
- bfd_boolean bfd_copy_private_section_data
- (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
- *Description*
-Copy private section information from ISEC in the BFD IBFD to the
-section OSEC in the BFD OBFD. Return `TRUE' on success, `FALSE' on
-error. Possible error returns are:
-
- * `bfd_error_no_memory' - Not enough memory exists to create private
- data for OSEC.
-
- #define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
- BFD_SEND (obfd, _bfd_copy_private_section_data, \
- (ibfd, isection, obfd, osection))
-
-2.6.5.18 `bfd_generic_is_group_section'
-.......................................
-
-*Synopsis*
- bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
- *Description*
-Returns TRUE if SEC is a member of a group.
-
-2.6.5.19 `bfd_generic_discard_group'
-....................................
-
-*Synopsis*
- bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
- *Description*
-Remove all members of GROUP from the output.
-
-
-File: bfd.info, Node: Symbols, Next: Archives, Prev: Sections, Up: BFD front end
-
-2.7 Symbols
-===========
-
-BFD tries to maintain as much symbol information as it can when it
-moves information from file to file. BFD passes information to
-applications though the `asymbol' structure. When the application
-requests the symbol table, BFD reads the table in the native form and
-translates parts of it into the internal format. To maintain more than
-the information passed to applications, some targets keep some
-information "behind the scenes" in a structure only the particular back
-end knows about. For example, the coff back end keeps the original
-symbol table structure as well as the canonical structure when a BFD is
-read in. On output, the coff back end can reconstruct the output symbol
-table so that no information is lost, even information unique to coff
-which BFD doesn't know or understand. If a coff symbol table were read,
-but were written through an a.out back end, all the coff specific
-information would be lost. The symbol table of a BFD is not necessarily
-read in until a canonicalize request is made. Then the BFD back end
-fills in a table provided by the application with pointers to the
-canonical information. To output symbols, the application provides BFD
-with a table of pointers to pointers to `asymbol's. This allows
-applications like the linker to output a symbol as it was read, since
-the "behind the scenes" information will be still available.
-
-* Menu:
-
-* Reading Symbols::
-* Writing Symbols::
-* Mini Symbols::
-* typedef asymbol::
-* symbol handling functions::
-
-
-File: bfd.info, Node: Reading Symbols, Next: Writing Symbols, Prev: Symbols, Up: Symbols
-
-2.7.1 Reading symbols
----------------------
-
-There are two stages to reading a symbol table from a BFD: allocating
-storage, and the actual reading process. This is an excerpt from an
-application which reads the symbol table:
-
- long storage_needed;
- asymbol **symbol_table;
- long number_of_symbols;
- long i;
-
- storage_needed = bfd_get_symtab_upper_bound (abfd);
-
- if (storage_needed < 0)
- FAIL
-
- if (storage_needed == 0)
- return;
-
- symbol_table = xmalloc (storage_needed);
- ...
- number_of_symbols =
- bfd_canonicalize_symtab (abfd, symbol_table);
-
- if (number_of_symbols < 0)
- FAIL
-
- for (i = 0; i < number_of_symbols; i++)
- process_symbol (symbol_table[i]);
-
- All storage for the symbols themselves is in an objalloc connected
-to the BFD; it is freed when the BFD is closed.
-
-
-File: bfd.info, Node: Writing Symbols, Next: Mini Symbols, Prev: Reading Symbols, Up: Symbols
-
-2.7.2 Writing symbols
----------------------
-
-Writing of a symbol table is automatic when a BFD open for writing is
-closed. The application attaches a vector of pointers to pointers to
-symbols to the BFD being written, and fills in the symbol count. The
-close and cleanup code reads through the table provided and performs
-all the necessary operations. The BFD output code must always be
-provided with an "owned" symbol: one which has come from another BFD,
-or one which has been created using `bfd_make_empty_symbol'. Here is an
-example showing the creation of a symbol table with only one element:
-
- #include "bfd.h"
- int main (void)
- {
- bfd *abfd;
- asymbol *ptrs[2];
- asymbol *new;
-
- abfd = bfd_openw ("foo","a.out-sunos-big");
- bfd_set_format (abfd, bfd_object);
- new = bfd_make_empty_symbol (abfd);
- new->name = "dummy_symbol";
- new->section = bfd_make_section_old_way (abfd, ".text");
- new->flags = BSF_GLOBAL;
- new->value = 0x12345;
-
- ptrs[0] = new;
- ptrs[1] = 0;
-
- bfd_set_symtab (abfd, ptrs, 1);
- bfd_close (abfd);
- return 0;
- }
-
- ./makesym
- nm foo
- 00012345 A dummy_symbol
-
- Many formats cannot represent arbitrary symbol information; for
-instance, the `a.out' object format does not allow an arbitrary number
-of sections. A symbol pointing to a section which is not one of
-`.text', `.data' or `.bss' cannot be described.
-
-
-File: bfd.info, Node: Mini Symbols, Next: typedef asymbol, Prev: Writing Symbols, Up: Symbols
-
-2.7.3 Mini Symbols
-------------------
-
-Mini symbols provide read-only access to the symbol table. They use
-less memory space, but require more time to access. They can be useful
-for tools like nm or objdump, which may have to handle symbol tables of
-extremely large executables.
-
- The `bfd_read_minisymbols' function will read the symbols into
-memory in an internal form. It will return a `void *' pointer to a
-block of memory, a symbol count, and the size of each symbol. The
-pointer is allocated using `malloc', and should be freed by the caller
-when it is no longer needed.
-
- The function `bfd_minisymbol_to_symbol' will take a pointer to a
-minisymbol, and a pointer to a structure returned by
-`bfd_make_empty_symbol', and return a `asymbol' structure. The return
-value may or may not be the same as the value from
-`bfd_make_empty_symbol' which was passed in.
-
-
-File: bfd.info, Node: typedef asymbol, Next: symbol handling functions, Prev: Mini Symbols, Up: Symbols
-
-2.7.4 typedef asymbol
----------------------
-
-An `asymbol' has the form:
-
-
- typedef struct bfd_symbol
- {
- /* A pointer to the BFD which owns the symbol. This information
- is necessary so that a back end can work out what additional
- information (invisible to the application writer) is carried
- with the symbol.
-
- This field is *almost* redundant, since you can use section->owner
- instead, except that some symbols point to the global sections
- bfd_{abs,com,und}_section. This could be fixed by making
- these globals be per-bfd (or per-target-flavor). FIXME. */
- struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field. */
-
- /* The text of the symbol. The name is left alone, and not copied; the
- application may not alter it. */
- const char *name;
-
- /* The value of the symbol. This really should be a union of a
- numeric value with a pointer, since some flags indicate that
- a pointer to another symbol is stored here. */
- symvalue value;
-
- /* Attributes of a symbol. */
- #define BSF_NO_FLAGS 0x00
-
- /* The symbol has local scope; `static' in `C'. The value
- is the offset into the section of the data. */
- #define BSF_LOCAL 0x01
-
- /* The symbol has global scope; initialized data in `C'. The
- value is the offset into the section of the data. */
- #define BSF_GLOBAL 0x02
-
- /* The symbol has global scope and is exported. The value is
- the offset into the section of the data. */
- #define BSF_EXPORT BSF_GLOBAL /* No real difference. */
-
- /* A normal C symbol would be one of:
- `BSF_LOCAL', `BSF_FORT_COMM', `BSF_UNDEFINED' or
- `BSF_GLOBAL'. */
-
- /* The symbol is a debugging record. The value has an arbitrary
- meaning, unless BSF_DEBUGGING_RELOC is also set. */
- #define BSF_DEBUGGING 0x08
-
- /* The symbol denotes a function entry point. Used in ELF,
- perhaps others someday. */
- #define BSF_FUNCTION 0x10
-
- /* Used by the linker. */
- #define BSF_KEEP 0x20
- #define BSF_KEEP_G 0x40
-
- /* A weak global symbol, overridable without warnings by
- a regular global symbol of the same name. */
- #define BSF_WEAK 0x80
-
- /* This symbol was created to point to a section, e.g. ELF's
- STT_SECTION symbols. */
- #define BSF_SECTION_SYM 0x100
-
- /* The symbol used to be a common symbol, but now it is
- allocated. */
- #define BSF_OLD_COMMON 0x200
-
- /* The default value for common data. */
- #define BFD_FORT_COMM_DEFAULT_VALUE 0
-
- /* In some files the type of a symbol sometimes alters its
- location in an output file - ie in coff a `ISFCN' symbol
- which is also `C_EXT' symbol appears where it was
- declared and not at the end of a section. This bit is set
- by the target BFD part to convey this information. */
- #define BSF_NOT_AT_END 0x400
-
- /* Signal that the symbol is the label of constructor section. */
- #define BSF_CONSTRUCTOR 0x800
-
- /* Signal that the symbol is a warning symbol. The name is a
- warning. The name of the next symbol is the one to warn about;
- if a reference is made to a symbol with the same name as the next
- symbol, a warning is issued by the linker. */
- #define BSF_WARNING 0x1000
-
- /* Signal that the symbol is indirect. This symbol is an indirect
- pointer to the symbol with the same name as the next symbol. */
- #define BSF_INDIRECT 0x2000
-
- /* BSF_FILE marks symbols that contain a file name. This is used
- for ELF STT_FILE symbols. */
- #define BSF_FILE 0x4000
-
- /* Symbol is from dynamic linking information. */
- #define BSF_DYNAMIC 0x8000
-
- /* The symbol denotes a data object. Used in ELF, and perhaps
- others someday. */
- #define BSF_OBJECT 0x10000
-
- /* This symbol is a debugging symbol. The value is the offset
- into the section of the data. BSF_DEBUGGING should be set
- as well. */
- #define BSF_DEBUGGING_RELOC 0x20000
-
- /* This symbol is thread local. Used in ELF. */
- #define BSF_THREAD_LOCAL 0x40000
-
- flagword flags;
-
- /* A pointer to the section to which this symbol is
- relative. This will always be non NULL, there are special
- sections for undefined and absolute symbols. */
- struct bfd_section *section;
-
- /* Back end special data. */
- union
- {
- void *p;
- bfd_vma i;
- }
- udata;
- }
- asymbol;
-
-
-File: bfd.info, Node: symbol handling functions, Prev: typedef asymbol, Up: Symbols
-
-2.7.5 Symbol handling functions
--------------------------------
-
-2.7.5.1 `bfd_get_symtab_upper_bound'
-....................................
-
-*Description*
-Return the number of bytes required to store a vector of pointers to
-`asymbols' for all the symbols in the BFD ABFD, including a terminal
-NULL pointer. If there are no symbols in the BFD, then return 0. If an
-error occurs, return -1.
- #define bfd_get_symtab_upper_bound(abfd) \
- BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
-
-2.7.5.2 `bfd_is_local_label'
-............................
-
-*Synopsis*
- bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);
- *Description*
-Return TRUE if the given symbol SYM in the BFD ABFD is a compiler
-generated local label, else return FALSE.
-
-2.7.5.3 `bfd_is_local_label_name'
-.................................
-
-*Synopsis*
- bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
- *Description*
-Return TRUE if a symbol with the name NAME in the BFD ABFD is a
-compiler generated local label, else return FALSE. This just checks
-whether the name has the form of a local label.
- #define bfd_is_local_label_name(abfd, name) \
- BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
-
-2.7.5.4 `bfd_is_target_special_symbol'
-......................................
-
-*Synopsis*
- bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
- *Description*
-Return TRUE iff a symbol SYM in the BFD ABFD is something special to
-the particular target represented by the BFD. Such symbols should
-normally not be mentioned to the user.
- #define bfd_is_target_special_symbol(abfd, sym) \
- BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))
-
-2.7.5.5 `bfd_canonicalize_symtab'
-.................................
-
-*Description*
-Read the symbols from the BFD ABFD, and fills in the vector LOCATION
-with pointers to the symbols and a trailing NULL. Return the actual
-number of symbol pointers, not including the NULL.
- #define bfd_canonicalize_symtab(abfd, location) \
- BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location))
-
-2.7.5.6 `bfd_set_symtab'
-........................
-
-*Synopsis*
- bfd_boolean bfd_set_symtab
- (bfd *abfd, asymbol **location, unsigned int count);
- *Description*
-Arrange that when the output BFD ABFD is closed, the table LOCATION of
-COUNT pointers to symbols will be written.
-
-2.7.5.7 `bfd_print_symbol_vandf'
-................................
-
-*Synopsis*
- void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
- *Description*
-Print the value and flags of the SYMBOL supplied to the stream FILE.
-
-2.7.5.8 `bfd_make_empty_symbol'
-...............................
-
-*Description*
-Create a new `asymbol' structure for the BFD ABFD and return a pointer
-to it.
-
- This routine is necessary because each back end has private
-information surrounding the `asymbol'. Building your own `asymbol' and
-pointing to it will not create the private information, and will cause
-problems later on.
- #define bfd_make_empty_symbol(abfd) \
- BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
-
-2.7.5.9 `_bfd_generic_make_empty_symbol'
-........................................
-
-*Synopsis*
- asymbol *_bfd_generic_make_empty_symbol (bfd *);
- *Description*
-Create a new `asymbol' structure for the BFD ABFD and return a pointer
-to it. Used by core file routines, binary back-end and anywhere else
-where no private info is needed.
-
-2.7.5.10 `bfd_make_debug_symbol'
-................................
-
-*Description*
-Create a new `asymbol' structure for the BFD ABFD, to be used as a
-debugging symbol. Further details of its use have yet to be worked out.
- #define bfd_make_debug_symbol(abfd,ptr,size) \
- BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
-
-2.7.5.11 `bfd_decode_symclass'
-..............................
-
-*Description*
-Return a character corresponding to the symbol class of SYMBOL, or '?'
-for an unknown class.
-
- *Synopsis*
- int bfd_decode_symclass (asymbol *symbol);
-
-2.7.5.12 `bfd_is_undefined_symclass'
-....................................
-
-*Description*
-Returns non-zero if the class symbol returned by bfd_decode_symclass
-represents an undefined symbol. Returns zero otherwise.
-
- *Synopsis*
- bfd_boolean bfd_is_undefined_symclass (int symclass);
-
-2.7.5.13 `bfd_symbol_info'
-..........................
-
-*Description*
-Fill in the basic info about symbol that nm needs. Additional info may
-be added by the back-ends after calling this function.
-
- *Synopsis*
- void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
-
-2.7.5.14 `bfd_copy_private_symbol_data'
-.......................................
-
-*Synopsis*
- bfd_boolean bfd_copy_private_symbol_data
- (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
- *Description*
-Copy private symbol information from ISYM in the BFD IBFD to the symbol
-OSYM in the BFD OBFD. Return `TRUE' on success, `FALSE' on error.
-Possible error returns are:
-
- * `bfd_error_no_memory' - Not enough memory exists to create private
- data for OSEC.
-
- #define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
- BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
- (ibfd, isymbol, obfd, osymbol))
-
-
-File: bfd.info, Node: Archives, Next: Formats, Prev: Symbols, Up: BFD front end
-
-2.8 Archives
-============
-
-*Description*
-An archive (or library) is just another BFD. It has a symbol table,
-although there's not much a user program will do with it.
-
- The big difference between an archive BFD and an ordinary BFD is
-that the archive doesn't have sections. Instead it has a chain of BFDs
-that are considered its contents. These BFDs can be manipulated like
-any other. The BFDs contained in an archive opened for reading will
-all be opened for reading. You may put either input or output BFDs
-into an archive opened for output; they will be handled correctly when
-the archive is closed.
-
- Use `bfd_openr_next_archived_file' to step through the contents of
-an archive opened for input. You don't have to read the entire archive
-if you don't want to! Read it until you find what you want.
-
- Archive contents of output BFDs are chained through the `next'
-pointer in a BFD. The first one is findable through the `archive_head'
-slot of the archive. Set it with `bfd_set_archive_head' (q.v.). A
-given BFD may be in only one open output archive at a time.
-
- As expected, the BFD archive code is more general than the archive
-code of any given environment. BFD archives may contain files of
-different formats (e.g., a.out and coff) and even different
-architectures. You may even place archives recursively into archives!
-
- This can cause unexpected confusion, since some archive formats are
-more expressive than others. For instance, Intel COFF archives can
-preserve long filenames; SunOS a.out archives cannot. If you move a
-file from the first to the second format and back again, the filename
-may be truncated. Likewise, different a.out environments have different
-conventions as to how they truncate filenames, whether they preserve
-directory names in filenames, etc. When interoperating with native
-tools, be sure your files are homogeneous.
-
- Beware: most of these formats do not react well to the presence of
-spaces in filenames. We do the best we can, but can't always handle
-this case due to restrictions in the format of archives. Many Unix
-utilities are braindead in regards to spaces and such in filenames
-anyway, so this shouldn't be much of a restriction.
-
- Archives are supported in BFD in `archive.c'.
-
-2.8.1 Archive functions
------------------------
-
-2.8.1.1 `bfd_get_next_mapent'
-.............................
-
-*Synopsis*
- symindex bfd_get_next_mapent
- (bfd *abfd, symindex previous, carsym **sym);
- *Description*
-Step through archive ABFD's symbol table (if it has one). Successively
-update SYM with the next symbol's information, returning that symbol's
-(internal) index into the symbol table.
-
- Supply `BFD_NO_MORE_SYMBOLS' as the PREVIOUS entry to get the first
-one; returns `BFD_NO_MORE_SYMBOLS' when you've already got the last one.
-
- A `carsym' is a canonical archive symbol. The only user-visible
-element is its name, a null-terminated string.
-
-2.8.1.2 `bfd_set_archive_head'
-..............................
-
-*Synopsis*
- bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
- *Description*
-Set the head of the chain of BFDs contained in the archive OUTPUT to
-NEW_HEAD.
-
-2.8.1.3 `bfd_openr_next_archived_file'
-......................................
-
-*Synopsis*
- bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous);
- *Description*
-Provided a BFD, ARCHIVE, containing an archive and NULL, open an input
-BFD on the first contained element and returns that. Subsequent calls
-should pass the archive and the previous return value to return a
-created BFD to the next contained element. NULL is returned when there
-are no more.
-
-
-File: bfd.info, Node: Formats, Next: Relocations, Prev: Archives, Up: BFD front end
-
-2.9 File formats
-================
-
-A format is a BFD concept of high level file contents type. The formats
-supported by BFD are:
-
- * `bfd_object'
- The BFD may contain data, symbols, relocations and debug info.
-
- * `bfd_archive'
- The BFD contains other BFDs and an optional index.
-
- * `bfd_core'
- The BFD contains the result of an executable core dump.
-
-2.9.1 File format functions
----------------------------
-
-2.9.1.1 `bfd_check_format'
-..........................
-
-*Synopsis*
- bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);
- *Description*
-Verify if the file attached to the BFD ABFD is compatible with the
-format FORMAT (i.e., one of `bfd_object', `bfd_archive' or `bfd_core').
-
- If the BFD has been set to a specific target before the call, only
-the named target and format combination is checked. If the target has
-not been set, or has been set to `default', then all the known target
-backends is interrogated to determine a match. If the default target
-matches, it is used. If not, exactly one target must recognize the
-file, or an error results.
-
- The function returns `TRUE' on success, otherwise `FALSE' with one
-of the following error codes:
-
- * `bfd_error_invalid_operation' - if `format' is not one of
- `bfd_object', `bfd_archive' or `bfd_core'.
-
- * `bfd_error_system_call' - if an error occured during a read - even
- some file mismatches can cause bfd_error_system_calls.
-
- * `file_not_recognised' - none of the backends recognised the file
- format.
-
- * `bfd_error_file_ambiguously_recognized' - more than one backend
- recognised the file format.
-
-2.9.1.2 `bfd_check_format_matches'
-..................................
-
-*Synopsis*
- bfd_boolean bfd_check_format_matches
- (bfd *abfd, bfd_format format, char ***matching);
- *Description*
-Like `bfd_check_format', except when it returns FALSE with `bfd_errno'
-set to `bfd_error_file_ambiguously_recognized'. In that case, if
-MATCHING is not NULL, it will be filled in with a NULL-terminated list
-of the names of the formats that matched, allocated with `malloc'.
-Then the user may choose a format and try again.
-
- When done with the list that MATCHING points to, the caller should
-free it.
-
-2.9.1.3 `bfd_set_format'
-........................
-
-*Synopsis*
- bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
- *Description*
-This function sets the file format of the BFD ABFD to the format
-FORMAT. If the target set in the BFD does not support the format
-requested, the format is invalid, or the BFD is not open for writing,
-then an error occurs.
-
-2.9.1.4 `bfd_format_string'
-...........................
-
-*Synopsis*
- const char *bfd_format_string (bfd_format format);
- *Description*
-Return a pointer to a const string `invalid', `object', `archive',
-`core', or `unknown', depending upon the value of FORMAT.
-
-
-File: bfd.info, Node: Relocations, Next: Core Files, Prev: Formats, Up: BFD front end
-
-2.10 Relocations
-================
-
-BFD maintains relocations in much the same way it maintains symbols:
-they are left alone until required, then read in en-masse and
-translated into an internal form. A common routine
-`bfd_perform_relocation' acts upon the canonical form to do the fixup.
-
- Relocations are maintained on a per section basis, while symbols are
-maintained on a per BFD basis.
-
- All that a back end has to do to fit the BFD interface is to create
-a `struct reloc_cache_entry' for each relocation in a particular
-section, and fill in the right bits of the structures.
-
-* Menu:
-
-* typedef arelent::
-* howto manager::
-
-
-File: bfd.info, Node: typedef arelent, Next: howto manager, Prev: Relocations, Up: Relocations
-
-2.10.1 typedef arelent
-----------------------
-
-This is the structure of a relocation entry:
-
-
- typedef enum bfd_reloc_status
- {
- /* No errors detected. */
- bfd_reloc_ok,
-
- /* The relocation was performed, but there was an overflow. */
- bfd_reloc_overflow,
-
- /* The address to relocate was not within the section supplied. */
- bfd_reloc_outofrange,
-
- /* Used by special functions. */
- bfd_reloc_continue,
-
- /* Unsupported relocation size requested. */
- bfd_reloc_notsupported,
-
- /* Unused. */
- bfd_reloc_other,
-
- /* The symbol to relocate against was undefined. */
- bfd_reloc_undefined,
-
- /* The relocation was performed, but may not be ok - presently
- generated only when linking i960 coff files with i960 b.out
- symbols. If this type is returned, the error_message argument
- to bfd_perform_relocation will be set. */
- bfd_reloc_dangerous
- }
- bfd_reloc_status_type;
-
-
- typedef struct reloc_cache_entry
- {
- /* A pointer into the canonical table of pointers. */
- struct bfd_symbol **sym_ptr_ptr;
-
- /* offset in section. */
- bfd_size_type address;
-
- /* addend for relocation value. */
- bfd_vma addend;
-
- /* Pointer to how to perform the required relocation. */
- reloc_howto_type *howto;
-
- }
- arelent;
- *Description*
-Here is a description of each of the fields within an `arelent':
-
- * `sym_ptr_ptr'
- The symbol table pointer points to a pointer to the symbol
-associated with the relocation request. It is the pointer into the
-table returned by the back end's `canonicalize_symtab' action. *Note
-Symbols::. The symbol is referenced through a pointer to a pointer so
-that tools like the linker can fix up all the symbols of the same name
-by modifying only one pointer. The relocation routine looks in the
-symbol and uses the base of the section the symbol is attached to and
-the value of the symbol as the initial relocation offset. If the symbol
-pointer is zero, then the section provided is looked up.
-
- * `address'
- The `address' field gives the offset in bytes from the base of the
-section data which owns the relocation record to the first byte of
-relocatable information. The actual data relocated will be relative to
-this point; for example, a relocation type which modifies the bottom
-two bytes of a four byte word would not touch the first byte pointed to
-in a big endian world.
-
- * `addend'
- The `addend' is a value provided by the back end to be added (!) to
-the relocation offset. Its interpretation is dependent upon the howto.
-For example, on the 68k the code:
-
- char foo[];
- main()
- {
- return foo[0x12345678];
- }
-
- Could be compiled into:
-
- linkw fp,#-4
- moveb @#12345678,d0
- extbl d0
- unlk fp
- rts
-
- This could create a reloc pointing to `foo', but leave the offset in
-the data, something like:
-
- RELOCATION RECORDS FOR [.text]:
- offset type value
- 00000006 32 _foo
-
- 00000000 4e56 fffc ; linkw fp,#-4
- 00000004 1039 1234 5678 ; moveb @#12345678,d0
- 0000000a 49c0 ; extbl d0
- 0000000c 4e5e ; unlk fp
- 0000000e 4e75 ; rts
-
- Using coff and an 88k, some instructions don't have enough space in
-them to represent the full address range, and pointers have to be
-loaded in two parts. So you'd get something like:
-
- or.u r13,r0,hi16(_foo+0x12345678)
- ld.b r2,r13,lo16(_foo+0x12345678)
- jmp r1
-
- This should create two relocs, both pointing to `_foo', and with
-0x12340000 in their addend field. The data would consist of:
-
- RELOCATION RECORDS FOR [.text]:
- offset type value
- 00000002 HVRT16 _foo+0x12340000
- 00000006 LVRT16 _foo+0x12340000
-
- 00000000 5da05678 ; or.u r13,r0,0x5678
- 00000004 1c4d5678 ; ld.b r2,r13,0x5678
- 00000008 f400c001 ; jmp r1
-
- The relocation routine digs out the value from the data, adds it to
-the addend to get the original offset, and then adds the value of
-`_foo'. Note that all 32 bits have to be kept around somewhere, to cope
-with carry from bit 15 to bit 16.
-
- One further example is the sparc and the a.out format. The sparc has
-a similar problem to the 88k, in that some instructions don't have room
-for an entire offset, but on the sparc the parts are created in odd
-sized lumps. The designers of the a.out format chose to not use the
-data within the section for storing part of the offset; all the offset
-is kept within the reloc. Anything in the data should be ignored.
-
- save %sp,-112,%sp
- sethi %hi(_foo+0x12345678),%g2
- ldsb [%g2+%lo(_foo+0x12345678)],%i0
- ret
- restore
-
- Both relocs contain a pointer to `foo', and the offsets contain junk.
-
- RELOCATION RECORDS FOR [.text]:
- offset type value
- 00000004 HI22 _foo+0x12345678
- 00000008 LO10 _foo+0x12345678
-
- 00000000 9de3bf90 ; save %sp,-112,%sp
- 00000004 05000000 ; sethi %hi(_foo+0),%g2
- 00000008 f048a000 ; ldsb [%g2+%lo(_foo+0)],%i0
- 0000000c 81c7e008 ; ret
- 00000010 81e80000 ; restore
-
- * `howto'
- The `howto' field can be imagined as a relocation instruction. It is
-a pointer to a structure which contains information on what to do with
-all of the other information in the reloc record and data section. A
-back end would normally have a relocation instruction set and turn
-relocations into pointers to the correct structure on input - but it
-would be possible to create each howto field on demand.
-
-2.10.1.1 `enum complain_overflow'
-.................................
-
-Indicates what sort of overflow checking should be done when performing
-a relocation.
-
-
- enum complain_overflow
- {
- /* Do not complain on overflow. */
- complain_overflow_dont,
-
- /* Complain if the value overflows when considered as a signed
- number one bit larger than the field. ie. A bitfield of N bits
- is allowed to represent -2**n to 2**n-1. */
- complain_overflow_bitfield,
-
- /* Complain if the value overflows when considered as a signed
- number. */
- complain_overflow_signed,
-
- /* Complain if the value overflows when considered as an
- unsigned number. */
- complain_overflow_unsigned
- };
-
-2.10.1.2 `reloc_howto_type'
-...........................
-
-The `reloc_howto_type' is a structure which contains all the
-information that libbfd needs to know to tie up a back end's data.
-
- struct bfd_symbol; /* Forward declaration. */
-
- struct reloc_howto_struct
- {
- /* The type field has mainly a documentary use - the back end can
- do what it wants with it, though normally the back end's
- external idea of what a reloc number is stored
- in this field. For example, a PC relative word relocation
- in a coff environment has the type 023 - because that's
- what the outside world calls a R_PCRWORD reloc. */
- unsigned int type;
-
- /* The value the final relocation is shifted right by. This drops
- unwanted data from the relocation. */
- unsigned int rightshift;
-
- /* The size of the item to be relocated. This is *not* a
- power-of-two measure. To get the number of bytes operated
- on by a type of relocation, use bfd_get_reloc_size. */
- int size;
-
- /* The number of bits in the item to be relocated. This is used
- when doing overflow checking. */
- unsigned int bitsize;
-
- /* Notes that the relocation is relative to the location in the
- data section of the addend. The relocation function will
- subtract from the relocation value the address of the location
- being relocated. */
- bfd_boolean pc_relative;
-
- /* The bit position of the reloc value in the destination.
- The relocated value is left shifted by this amount. */
- unsigned int bitpos;
-
- /* What type of overflow error should be checked for when
- relocating. */
- enum complain_overflow complain_on_overflow;
-
- /* If this field is non null, then the supplied function is
- called rather than the normal function. This allows really
- strange relocation methods to be accommodated (e.g., i960 callj
- instructions). */
- bfd_reloc_status_type (*special_function)
- (bfd *, arelent *, struct bfd_symbol *, void *, asection *,
- bfd *, char **);
-
- /* The textual name of the relocation type. */
- char *name;
-
- /* Some formats record a relocation addend in the section contents
- rather than with the relocation. For ELF formats this is the
- distinction between USE_REL and USE_RELA (though the code checks
- for USE_REL == 1/0). The value of this field is TRUE if the
- addend is recorded with the section contents; when performing a
- partial link (ld -r) the section contents (the data) will be
- modified. The value of this field is FALSE if addends are
- recorded with the relocation (in arelent.addend); when performing
- a partial link the relocation will be modified.
- All relocations for all ELF USE_RELA targets should set this field
- to FALSE (values of TRUE should be looked on with suspicion).
- However, the converse is not true: not all relocations of all ELF
- USE_REL targets set this field to TRUE. Why this is so is peculiar
- to each particular target. For relocs that aren't used in partial
- links (e.g. GOT stuff) it doesn't matter what this is set to. */
- bfd_boolean partial_inplace;
-
- /* src_mask selects the part of the instruction (or data) to be used
- in the relocation sum. If the target relocations don't have an
- addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
- dst_mask to extract the addend from the section contents. If
- relocations do have an addend in the reloc, eg. ELF USE_RELA, this
- field should be zero. Non-zero values for ELF USE_RELA targets are
- bogus as in those cases the value in the dst_mask part of the
- section contents should be treated as garbage. */
- bfd_vma src_mask;
-
- /* dst_mask selects which parts of the instruction (or data) are
- replaced with a relocated value. */
- bfd_vma dst_mask;
-
- /* When some formats create PC relative instructions, they leave
- the value of the pc of the place being relocated in the offset
- slot of the instruction, so that a PC relative relocation can
- be made just by adding in an ordinary offset (e.g., sun3 a.out).
- Some formats leave the displacement part of an instruction
- empty (e.g., m88k bcs); this flag signals the fact. */
- bfd_boolean pcrel_offset;
- };
-
-2.10.1.3 `The HOWTO Macro'
-..........................
-
-*Description*
-The HOWTO define is horrible and will go away.
- #define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
- { (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC }
-
- *Description*
-And will be replaced with the totally magic way. But for the moment, we
-are compatible, so do it this way.
- #define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \
- HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \
- NAME, FALSE, 0, 0, IN)
-
- *Description*
-This is used to fill in an empty howto entry in an array.
- #define EMPTY_HOWTO(C) \
- HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
- NULL, FALSE, 0, 0, FALSE)
-
- *Description*
-Helper routine to turn a symbol into a relocation value.
- #define HOWTO_PREPARE(relocation, symbol) \
- { \
- if (symbol != NULL) \
- { \
- if (bfd_is_com_section (symbol->section)) \
- { \
- relocation = 0; \
- } \
- else \
- { \
- relocation = symbol->value; \
- } \
- } \
- }
-
-2.10.1.4 `bfd_get_reloc_size'
-.............................
-
-*Synopsis*
- unsigned int bfd_get_reloc_size (reloc_howto_type *);
- *Description*
-For a reloc_howto_type that operates on a fixed number of bytes, this
-returns the number of bytes operated on.
-
-2.10.1.5 `arelent_chain'
-........................
-
-*Description*
-How relocs are tied together in an `asection':
- typedef struct relent_chain
- {
- arelent relent;
- struct relent_chain *next;
- }
- arelent_chain;
-
-2.10.1.6 `bfd_check_overflow'
-.............................
-
-*Synopsis*
- bfd_reloc_status_type bfd_check_overflow
- (enum complain_overflow how,
- unsigned int bitsize,
- unsigned int rightshift,
- unsigned int addrsize,
- bfd_vma relocation);
- *Description*
-Perform overflow checking on RELOCATION which has BITSIZE significant
-bits and will be shifted right by RIGHTSHIFT bits, on a machine with
-addresses containing ADDRSIZE significant bits. The result is either of
-`bfd_reloc_ok' or `bfd_reloc_overflow'.
-
-2.10.1.7 `bfd_perform_relocation'
-.................................
-
-*Synopsis*
- bfd_reloc_status_type bfd_perform_relocation
- (bfd *abfd,
- arelent *reloc_entry,
- void *data,
- asection *input_section,
- bfd *output_bfd,
- char **error_message);
- *Description*
-If OUTPUT_BFD is supplied to this function, the generated image will be
-relocatable; the relocations are copied to the output file after they
-have been changed to reflect the new state of the world. There are two
-ways of reflecting the results of partial linkage in an output file: by
-modifying the output data in place, and by modifying the relocation
-record. Some native formats (e.g., basic a.out and basic coff) have no
-way of specifying an addend in the relocation type, so the addend has
-to go in the output data. This is no big deal since in these formats
-the output data slot will always be big enough for the addend. Complex
-reloc types with addends were invented to solve just this problem. The
-ERROR_MESSAGE argument is set to an error message if this return
-`bfd_reloc_dangerous'.
-
-2.10.1.8 `bfd_install_relocation'
-.................................
-
-*Synopsis*
- bfd_reloc_status_type bfd_install_relocation
- (bfd *abfd,
- arelent *reloc_entry,
- void *data, bfd_vma data_start,
- asection *input_section,
- char **error_message);
- *Description*
-This looks remarkably like `bfd_perform_relocation', except it does not
-expect that the section contents have been filled in. I.e., it's
-suitable for use when creating, rather than applying a relocation.
-
- For now, this function should be considered reserved for the
-assembler.
-
-
-File: bfd.info, Node: howto manager, Prev: typedef arelent, Up: Relocations
-
-2.10.2 The howto manager
-------------------------
-
-When an application wants to create a relocation, but doesn't know what
-the target machine might call it, it can find out by using this bit of
-code.
-
-2.10.2.1 `bfd_reloc_code_type'
-..............................
-
-*Description*
-The insides of a reloc code. The idea is that, eventually, there will
-be one enumerator for every type of relocation we ever do. Pass one of
-these values to `bfd_reloc_type_lookup', and it'll return a howto
-pointer.
-
- This does mean that the application must determine the correct
-enumerator value; you can't get a howto pointer from a random set of
-attributes.
-
- Here are the possible values for `enum bfd_reloc_code_real':
-
- -- : BFD_RELOC_64
- -- : BFD_RELOC_32
- -- : BFD_RELOC_26
- -- : BFD_RELOC_24
- -- : BFD_RELOC_16
- -- : BFD_RELOC_14
- -- : BFD_RELOC_8
- Basic absolute relocations of N bits.
-
- -- : BFD_RELOC_64_PCREL
- -- : BFD_RELOC_32_PCREL
- -- : BFD_RELOC_24_PCREL
- -- : BFD_RELOC_16_PCREL
- -- : BFD_RELOC_12_PCREL
- -- : BFD_RELOC_8_PCREL
- PC-relative relocations. Sometimes these are relative to the
- address of the relocation itself; sometimes they are relative to
- the start of the section containing the relocation. It depends on
- the specific target.
-
- The 24-bit relocation is used in some Intel 960 configurations.
-
- -- : BFD_RELOC_32_SECREL
- Section relative relocations. Some targets need this for DWARF2.
-
- -- : BFD_RELOC_32_GOT_PCREL
- -- : BFD_RELOC_16_GOT_PCREL
- -- : BFD_RELOC_8_GOT_PCREL
- -- : BFD_RELOC_32_GOTOFF
- -- : BFD_RELOC_16_GOTOFF
- -- : BFD_RELOC_LO16_GOTOFF
- -- : BFD_RELOC_HI16_GOTOFF
- -- : BFD_RELOC_HI16_S_GOTOFF
- -- : BFD_RELOC_8_GOTOFF
- -- : BFD_RELOC_64_PLT_PCREL
- -- : BFD_RELOC_32_PLT_PCREL
- -- : BFD_RELOC_24_PLT_PCREL
- -- : BFD_RELOC_16_PLT_PCREL
- -- : BFD_RELOC_8_PLT_PCREL
- -- : BFD_RELOC_64_PLTOFF
- -- : BFD_RELOC_32_PLTOFF
- -- : BFD_RELOC_16_PLTOFF
- -- : BFD_RELOC_LO16_PLTOFF
- -- : BFD_RELOC_HI16_PLTOFF
- -- : BFD_RELOC_HI16_S_PLTOFF
- -- : BFD_RELOC_8_PLTOFF
- For ELF.
-
- -- : BFD_RELOC_68K_GLOB_DAT
- -- : BFD_RELOC_68K_JMP_SLOT
- -- : BFD_RELOC_68K_RELATIVE
- Relocations used by 68K ELF.
-
- -- : BFD_RELOC_32_BASEREL
- -- : BFD_RELOC_16_BASEREL
- -- : BFD_RELOC_LO16_BASEREL
- -- : BFD_RELOC_HI16_BASEREL
- -- : BFD_RELOC_HI16_S_BASEREL
- -- : BFD_RELOC_8_BASEREL
- -- : BFD_RELOC_RVA
- Linkage-table relative.
-
- -- : BFD_RELOC_8_FFnn
- Absolute 8-bit relocation, but used to form an address like 0xFFnn.
-
- -- : BFD_RELOC_32_PCREL_S2
- -- : BFD_RELOC_16_PCREL_S2
- -- : BFD_RELOC_23_PCREL_S2
- These PC-relative relocations are stored as word displacements -
- i.e., byte displacements shifted right two bits. The 30-bit word
- displacement (<<32_PCREL_S2>> - 32 bits, shifted 2) is used on the
- SPARC. (SPARC tools generally refer to this as <<WDISP30>>.) The
- signed 16-bit displacement is used on the MIPS, and the 23-bit
- displacement is used on the Alpha.
-
- -- : BFD_RELOC_HI22
- -- : BFD_RELOC_LO10
- High 22 bits and low 10 bits of 32-bit value, placed into lower
- bits of the target word. These are used on the SPARC.
-
- -- : BFD_RELOC_GPREL16
- -- : BFD_RELOC_GPREL32
- For systems that allocate a Global Pointer register, these are
- displacements off that register. These relocation types are
- handled specially, because the value the register will have is
- decided relatively late.
-
- -- : BFD_RELOC_I960_CALLJ
- Reloc types used for i960/b.out.
-
- -- : BFD_RELOC_NONE
- -- : BFD_RELOC_SPARC_WDISP22
- -- : BFD_RELOC_SPARC22
- -- : BFD_RELOC_SPARC13
- -- : BFD_RELOC_SPARC_GOT10
- -- : BFD_RELOC_SPARC_GOT13
- -- : BFD_RELOC_SPARC_GOT22
- -- : BFD_RELOC_SPARC_PC10
- -- : BFD_RELOC_SPARC_PC22
- -- : BFD_RELOC_SPARC_WPLT30
- -- : BFD_RELOC_SPARC_COPY
- -- : BFD_RELOC_SPARC_GLOB_DAT
- -- : BFD_RELOC_SPARC_JMP_SLOT
- -- : BFD_RELOC_SPARC_RELATIVE
- -- : BFD_RELOC_SPARC_UA16
- -- : BFD_RELOC_SPARC_UA32
- -- : BFD_RELOC_SPARC_UA64
- SPARC ELF relocations. There is probably some overlap with other
- relocation types already defined.
-
- -- : BFD_RELOC_SPARC_BASE13
- -- : BFD_RELOC_SPARC_BASE22
- I think these are specific to SPARC a.out (e.g., Sun 4).
-
- -- : BFD_RELOC_SPARC_64
- -- : BFD_RELOC_SPARC_10
- -- : BFD_RELOC_SPARC_11
- -- : BFD_RELOC_SPARC_OLO10
- -- : BFD_RELOC_SPARC_HH22
- -- : BFD_RELOC_SPARC_HM10
- -- : BFD_RELOC_SPARC_LM22
- -- : BFD_RELOC_SPARC_PC_HH22
- -- : BFD_RELOC_SPARC_PC_HM10
- -- : BFD_RELOC_SPARC_PC_LM22
- -- : BFD_RELOC_SPARC_WDISP16
- -- : BFD_RELOC_SPARC_WDISP19
- -- : BFD_RELOC_SPARC_7
- -- : BFD_RELOC_SPARC_6
- -- : BFD_RELOC_SPARC_5
- -- : BFD_RELOC_SPARC_DISP64
- -- : BFD_RELOC_SPARC_PLT32
- -- : BFD_RELOC_SPARC_PLT64
- -- : BFD_RELOC_SPARC_HIX22
- -- : BFD_RELOC_SPARC_LOX10
- -- : BFD_RELOC_SPARC_H44
- -- : BFD_RELOC_SPARC_M44
- -- : BFD_RELOC_SPARC_L44
- -- : BFD_RELOC_SPARC_REGISTER
- SPARC64 relocations
-
- -- : BFD_RELOC_SPARC_REV32
- SPARC little endian relocation
-
- -- : BFD_RELOC_SPARC_TLS_GD_HI22
- -- : BFD_RELOC_SPARC_TLS_GD_LO10
- -- : BFD_RELOC_SPARC_TLS_GD_ADD
- -- : BFD_RELOC_SPARC_TLS_GD_CALL
- -- : BFD_RELOC_SPARC_TLS_LDM_HI22
- -- : BFD_RELOC_SPARC_TLS_LDM_LO10
- -- : BFD_RELOC_SPARC_TLS_LDM_ADD
- -- : BFD_RELOC_SPARC_TLS_LDM_CALL
- -- : BFD_RELOC_SPARC_TLS_LDO_HIX22
- -- : BFD_RELOC_SPARC_TLS_LDO_LOX10
- -- : BFD_RELOC_SPARC_TLS_LDO_ADD
- -- : BFD_RELOC_SPARC_TLS_IE_HI22
- -- : BFD_RELOC_SPARC_TLS_IE_LO10
- -- : BFD_RELOC_SPARC_TLS_IE_LD
- -- : BFD_RELOC_SPARC_TLS_IE_LDX
- -- : BFD_RELOC_SPARC_TLS_IE_ADD
- -- : BFD_RELOC_SPARC_TLS_LE_HIX22
- -- : BFD_RELOC_SPARC_TLS_LE_LOX10
- -- : BFD_RELOC_SPARC_TLS_DTPMOD32
- -- : BFD_RELOC_SPARC_TLS_DTPMOD64
- -- : BFD_RELOC_SPARC_TLS_DTPOFF32
- -- : BFD_RELOC_SPARC_TLS_DTPOFF64
- -- : BFD_RELOC_SPARC_TLS_TPOFF32
- -- : BFD_RELOC_SPARC_TLS_TPOFF64
- SPARC TLS relocations
-
- -- : BFD_RELOC_ALPHA_GPDISP_HI16
- Alpha ECOFF and ELF relocations. Some of these treat the symbol or
- "addend" in some special way. For GPDISP_HI16 ("gpdisp")
- relocations, the symbol is ignored when writing; when reading, it
- will be the absolute section symbol. The addend is the
- displacement in bytes of the "lda" instruction from the "ldah"
- instruction (which is at the address of this reloc).
-
- -- : BFD_RELOC_ALPHA_GPDISP_LO16
- For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
- with GPDISP_HI16 relocs. The addend is ignored when writing the
- relocations out, and is filled in with the file's GP value on
- reading, for convenience.
-
- -- : BFD_RELOC_ALPHA_GPDISP
- The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
- relocation except that there is no accompanying GPDISP_LO16
- relocation.
-
- -- : BFD_RELOC_ALPHA_LITERAL
- -- : BFD_RELOC_ALPHA_ELF_LITERAL
- -- : BFD_RELOC_ALPHA_LITUSE
- The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
- the assembler turns it into a LDQ instruction to load the address
- of the symbol, and then fills in a register in the real
- instruction.
-
- The LITERAL reloc, at the LDQ instruction, refers to the .lita
- section symbol. The addend is ignored when writing, but is filled
- in with the file's GP value on reading, for convenience, as with
- the GPDISP_LO16 reloc.
-
- The ELF_LITERAL reloc is somewhere between 16_GOTOFF and
- GPDISP_LO16. It should refer to the symbol to be referenced, as
- with 16_GOTOFF, but it generates output not based on the position
- within the .got section, but relative to the GP value chosen for
- the file during the final link stage.
-
- The LITUSE reloc, on the instruction using the loaded address,
- gives information to the linker that it might be able to use to
- optimize away some literal section references. The symbol is
- ignored (read as the absolute section symbol), and the "addend"
- indicates the type of instruction using the register: 1 - "memory"
- fmt insn 2 - byte-manipulation (byte offset reg) 3 - jsr (target
- of branch)
-
- -- : BFD_RELOC_ALPHA_HINT
- The HINT relocation indicates a value that should be filled into
- the "hint" field of a jmp/jsr/ret instruction, for possible branch-
- prediction logic which may be provided on some processors.
-
- -- : BFD_RELOC_ALPHA_LINKAGE
- The LINKAGE relocation outputs a linkage pair in the object file,
- which is filled by the linker.
-
- -- : BFD_RELOC_ALPHA_CODEADDR
- The CODEADDR relocation outputs a STO_CA in the object file, which
- is filled by the linker.
-
- -- : BFD_RELOC_ALPHA_GPREL_HI16
- -- : BFD_RELOC_ALPHA_GPREL_LO16
- The GPREL_HI/LO relocations together form a 32-bit offset from the
- GP register.
-
- -- : BFD_RELOC_ALPHA_BRSGP
- Like BFD_RELOC_23_PCREL_S2, except that the source and target must
- share a common GP, and the target address is adjusted for
- STO_ALPHA_STD_GPLOAD.
-
- -- : BFD_RELOC_ALPHA_TLSGD
- -- : BFD_RELOC_ALPHA_TLSLDM
- -- : BFD_RELOC_ALPHA_DTPMOD64
- -- : BFD_RELOC_ALPHA_GOTDTPREL16
- -- : BFD_RELOC_ALPHA_DTPREL64
- -- : BFD_RELOC_ALPHA_DTPREL_HI16
- -- : BFD_RELOC_ALPHA_DTPREL_LO16
- -- : BFD_RELOC_ALPHA_DTPREL16
- -- : BFD_RELOC_ALPHA_GOTTPREL16
- -- : BFD_RELOC_ALPHA_TPREL64
- -- : BFD_RELOC_ALPHA_TPREL_HI16
- -- : BFD_RELOC_ALPHA_TPREL_LO16
- -- : BFD_RELOC_ALPHA_TPREL16
- Alpha thread-local storage relocations.
-
- -- : BFD_RELOC_MIPS_JMP
- Bits 27..2 of the relocation address shifted right 2 bits; simple
- reloc otherwise.
-
- -- : BFD_RELOC_MIPS16_JMP
- The MIPS16 jump instruction.
-
- -- : BFD_RELOC_MIPS16_GPREL
- MIPS16 GP relative reloc.
-
- -- : BFD_RELOC_HI16
- High 16 bits of 32-bit value; simple reloc.
-
- -- : BFD_RELOC_HI16_S
- High 16 bits of 32-bit value but the low 16 bits will be sign
- extended and added to form the final result. If the low 16 bits
- form a negative number, we need to add one to the high value to
- compensate for the borrow when the low bits are added.
-
- -- : BFD_RELOC_LO16
- Low 16 bits.
-
- -- : BFD_RELOC_HI16_PCREL
- High 16 bits of 32-bit pc-relative value
-
- -- : BFD_RELOC_HI16_S_PCREL
- High 16 bits of 32-bit pc-relative value, adjusted
-
- -- : BFD_RELOC_LO16_PCREL
- Low 16 bits of pc-relative value
-
- -- : BFD_RELOC_MIPS16_HI16
- MIPS16 high 16 bits of 32-bit value.
-
- -- : BFD_RELOC_MIPS16_HI16_S
- MIPS16 high 16 bits of 32-bit value but the low 16 bits will be
- sign extended and added to form the final result. If the low 16
- bits form a negative number, we need to add one to the high value
- to compensate for the borrow when the low bits are added.
-
- -- : BFD_RELOC_MIPS16_LO16
- MIPS16 low 16 bits.
-
- -- : BFD_RELOC_MIPS_LITERAL
- Relocation against a MIPS literal section.
-
- -- : BFD_RELOC_MIPS_GOT16
- -- : BFD_RELOC_MIPS_CALL16
- -- : BFD_RELOC_MIPS_GOT_HI16
- -- : BFD_RELOC_MIPS_GOT_LO16
- -- : BFD_RELOC_MIPS_CALL_HI16
- -- : BFD_RELOC_MIPS_CALL_LO16
- -- : BFD_RELOC_MIPS_SUB
- -- : BFD_RELOC_MIPS_GOT_PAGE
- -- : BFD_RELOC_MIPS_GOT_OFST
- -- : BFD_RELOC_MIPS_GOT_DISP
- -- : BFD_RELOC_MIPS_SHIFT5
- -- : BFD_RELOC_MIPS_SHIFT6
- -- : BFD_RELOC_MIPS_INSERT_A
- -- : BFD_RELOC_MIPS_INSERT_B
- -- : BFD_RELOC_MIPS_DELETE
- -- : BFD_RELOC_MIPS_HIGHEST
- -- : BFD_RELOC_MIPS_HIGHER
- -- : BFD_RELOC_MIPS_SCN_DISP
- -- : BFD_RELOC_MIPS_REL16
- -- : BFD_RELOC_MIPS_RELGOT
- -- : BFD_RELOC_MIPS_JALR
- -- : BFD_RELOC_MIPS_TLS_DTPMOD32
- -- : BFD_RELOC_MIPS_TLS_DTPREL32
- -- : BFD_RELOC_MIPS_TLS_DTPMOD64
- -- : BFD_RELOC_MIPS_TLS_DTPREL64
- -- : BFD_RELOC_MIPS_TLS_GD
- -- : BFD_RELOC_MIPS_TLS_LDM
- -- : BFD_RELOC_MIPS_TLS_DTPREL_HI16
- -- : BFD_RELOC_MIPS_TLS_DTPREL_LO16
- -- : BFD_RELOC_MIPS_TLS_GOTTPREL
- -- : BFD_RELOC_MIPS_TLS_TPREL32
- -- : BFD_RELOC_MIPS_TLS_TPREL64
- -- : BFD_RELOC_MIPS_TLS_TPREL_HI16
- -- : BFD_RELOC_MIPS_TLS_TPREL_LO16
- MIPS ELF relocations.
-
- -- : BFD_RELOC_MIPS_COPY
- -- : BFD_RELOC_MIPS_JUMP_SLOT
- MIPS ELF relocations (VxWorks extensions).
-
- -- : BFD_RELOC_FRV_LABEL16
- -- : BFD_RELOC_FRV_LABEL24
- -- : BFD_RELOC_FRV_LO16
- -- : BFD_RELOC_FRV_HI16
- -- : BFD_RELOC_FRV_GPREL12
- -- : BFD_RELOC_FRV_GPRELU12
- -- : BFD_RELOC_FRV_GPREL32
- -- : BFD_RELOC_FRV_GPRELHI
- -- : BFD_RELOC_FRV_GPRELLO
- -- : BFD_RELOC_FRV_GOT12
- -- : BFD_RELOC_FRV_GOTHI
- -- : BFD_RELOC_FRV_GOTLO
- -- : BFD_RELOC_FRV_FUNCDESC
- -- : BFD_RELOC_FRV_FUNCDESC_GOT12
- -- : BFD_RELOC_FRV_FUNCDESC_GOTHI
- -- : BFD_RELOC_FRV_FUNCDESC_GOTLO
- -- : BFD_RELOC_FRV_FUNCDESC_VALUE
- -- : BFD_RELOC_FRV_FUNCDESC_GOTOFF12
- -- : BFD_RELOC_FRV_FUNCDESC_GOTOFFHI
- -- : BFD_RELOC_FRV_FUNCDESC_GOTOFFLO
- -- : BFD_RELOC_FRV_GOTOFF12
- -- : BFD_RELOC_FRV_GOTOFFHI
- -- : BFD_RELOC_FRV_GOTOFFLO
- -- : BFD_RELOC_FRV_GETTLSOFF
- -- : BFD_RELOC_FRV_TLSDESC_VALUE
- -- : BFD_RELOC_FRV_GOTTLSDESC12
- -- : BFD_RELOC_FRV_GOTTLSDESCHI
- -- : BFD_RELOC_FRV_GOTTLSDESCLO
- -- : BFD_RELOC_FRV_TLSMOFF12
- -- : BFD_RELOC_FRV_TLSMOFFHI
- -- : BFD_RELOC_FRV_TLSMOFFLO
- -- : BFD_RELOC_FRV_GOTTLSOFF12
- -- : BFD_RELOC_FRV_GOTTLSOFFHI
- -- : BFD_RELOC_FRV_GOTTLSOFFLO
- -- : BFD_RELOC_FRV_TLSOFF
- -- : BFD_RELOC_FRV_TLSDESC_RELAX
- -- : BFD_RELOC_FRV_GETTLSOFF_RELAX
- -- : BFD_RELOC_FRV_TLSOFF_RELAX
- -- : BFD_RELOC_FRV_TLSMOFF
- Fujitsu Frv Relocations.
-
- -- : BFD_RELOC_MN10300_GOTOFF24
- This is a 24bit GOT-relative reloc for the mn10300.
-
- -- : BFD_RELOC_MN10300_GOT32
- This is a 32bit GOT-relative reloc for the mn10300, offset by two
- bytes in the instruction.
-
- -- : BFD_RELOC_MN10300_GOT24
- This is a 24bit GOT-relative reloc for the mn10300, offset by two
- bytes in the instruction.
-
- -- : BFD_RELOC_MN10300_GOT16
- This is a 16bit GOT-relative reloc for the mn10300, offset by two
- bytes in the instruction.
-
- -- : BFD_RELOC_MN10300_COPY
- Copy symbol at runtime.
-
- -- : BFD_RELOC_MN10300_GLOB_DAT
- Create GOT entry.
-
- -- : BFD_RELOC_MN10300_JMP_SLOT
- Create PLT entry.
-
- -- : BFD_RELOC_MN10300_RELATIVE
- Adjust by program base.
-
- -- : BFD_RELOC_386_GOT32
- -- : BFD_RELOC_386_PLT32
- -- : BFD_RELOC_386_COPY
- -- : BFD_RELOC_386_GLOB_DAT
- -- : BFD_RELOC_386_JUMP_SLOT
- -- : BFD_RELOC_386_RELATIVE
- -- : BFD_RELOC_386_GOTOFF
- -- : BFD_RELOC_386_GOTPC
- -- : BFD_RELOC_386_TLS_TPOFF
- -- : BFD_RELOC_386_TLS_IE
- -- : BFD_RELOC_386_TLS_GOTIE
- -- : BFD_RELOC_386_TLS_LE
- -- : BFD_RELOC_386_TLS_GD
- -- : BFD_RELOC_386_TLS_LDM
- -- : BFD_RELOC_386_TLS_LDO_32
- -- : BFD_RELOC_386_TLS_IE_32
- -- : BFD_RELOC_386_TLS_LE_32
- -- : BFD_RELOC_386_TLS_DTPMOD32
- -- : BFD_RELOC_386_TLS_DTPOFF32
- -- : BFD_RELOC_386_TLS_TPOFF32
- -- : BFD_RELOC_386_TLS_GOTDESC
- -- : BFD_RELOC_386_TLS_DESC_CALL
- -- : BFD_RELOC_386_TLS_DESC
- i386/elf relocations
-
- -- : BFD_RELOC_X86_64_GOT32
- -- : BFD_RELOC_X86_64_PLT32
- -- : BFD_RELOC_X86_64_COPY
- -- : BFD_RELOC_X86_64_GLOB_DAT
- -- : BFD_RELOC_X86_64_JUMP_SLOT
- -- : BFD_RELOC_X86_64_RELATIVE
- -- : BFD_RELOC_X86_64_GOTPCREL
- -- : BFD_RELOC_X86_64_32S
- -- : BFD_RELOC_X86_64_DTPMOD64
- -- : BFD_RELOC_X86_64_DTPOFF64
- -- : BFD_RELOC_X86_64_TPOFF64
- -- : BFD_RELOC_X86_64_TLSGD
- -- : BFD_RELOC_X86_64_TLSLD
- -- : BFD_RELOC_X86_64_DTPOFF32
- -- : BFD_RELOC_X86_64_GOTTPOFF
- -- : BFD_RELOC_X86_64_TPOFF32
- -- : BFD_RELOC_X86_64_GOTOFF64
- -- : BFD_RELOC_X86_64_GOTPC32
- -- : BFD_RELOC_X86_64_GOT64
- -- : BFD_RELOC_X86_64_GOTPCREL64
- -- : BFD_RELOC_X86_64_GOTPC64
- -- : BFD_RELOC_X86_64_GOTPLT64
- -- : BFD_RELOC_X86_64_PLTOFF64
- -- : BFD_RELOC_X86_64_GOTPC32_TLSDESC
- -- : BFD_RELOC_X86_64_TLSDESC_CALL
- -- : BFD_RELOC_X86_64_TLSDESC
- x86-64/elf relocations
-
- -- : BFD_RELOC_NS32K_IMM_8
- -- : BFD_RELOC_NS32K_IMM_16
- -- : BFD_RELOC_NS32K_IMM_32
- -- : BFD_RELOC_NS32K_IMM_8_PCREL
- -- : BFD_RELOC_NS32K_IMM_16_PCREL
- -- : BFD_RELOC_NS32K_IMM_32_PCREL
- -- : BFD_RELOC_NS32K_DISP_8
- -- : BFD_RELOC_NS32K_DISP_16
- -- : BFD_RELOC_NS32K_DISP_32
- -- : BFD_RELOC_NS32K_DISP_8_PCREL
- -- : BFD_RELOC_NS32K_DISP_16_PCREL
- -- : BFD_RELOC_NS32K_DISP_32_PCREL
- ns32k relocations
-
- -- : BFD_RELOC_PDP11_DISP_8_PCREL
- -- : BFD_RELOC_PDP11_DISP_6_PCREL
- PDP11 relocations
-
- -- : BFD_RELOC_PJ_CODE_HI16
- -- : BFD_RELOC_PJ_CODE_LO16
- -- : BFD_RELOC_PJ_CODE_DIR16
- -- : BFD_RELOC_PJ_CODE_DIR32
- -- : BFD_RELOC_PJ_CODE_REL16
- -- : BFD_RELOC_PJ_CODE_REL32
- Picojava relocs. Not all of these appear in object files.
-
- -- : BFD_RELOC_PPC_B26
- -- : BFD_RELOC_PPC_BA26
- -- : BFD_RELOC_PPC_TOC16
- -- : BFD_RELOC_PPC_B16
- -- : BFD_RELOC_PPC_B16_BRTAKEN
- -- : BFD_RELOC_PPC_B16_BRNTAKEN
- -- : BFD_RELOC_PPC_BA16
- -- : BFD_RELOC_PPC_BA16_BRTAKEN
- -- : BFD_RELOC_PPC_BA16_BRNTAKEN
- -- : BFD_RELOC_PPC_COPY
- -- : BFD_RELOC_PPC_GLOB_DAT
- -- : BFD_RELOC_PPC_JMP_SLOT
- -- : BFD_RELOC_PPC_RELATIVE
- -- : BFD_RELOC_PPC_LOCAL24PC
- -- : BFD_RELOC_PPC_EMB_NADDR32
- -- : BFD_RELOC_PPC_EMB_NADDR16
- -- : BFD_RELOC_PPC_EMB_NADDR16_LO
- -- : BFD_RELOC_PPC_EMB_NADDR16_HI
- -- : BFD_RELOC_PPC_EMB_NADDR16_HA
- -- : BFD_RELOC_PPC_EMB_SDAI16
- -- : BFD_RELOC_PPC_EMB_SDA2I16
- -- : BFD_RELOC_PPC_EMB_SDA2REL
- -- : BFD_RELOC_PPC_EMB_SDA21
- -- : BFD_RELOC_PPC_EMB_MRKREF
- -- : BFD_RELOC_PPC_EMB_RELSEC16
- -- : BFD_RELOC_PPC_EMB_RELST_LO
- -- : BFD_RELOC_PPC_EMB_RELST_HI
- -- : BFD_RELOC_PPC_EMB_RELST_HA
- -- : BFD_RELOC_PPC_EMB_BIT_FLD
- -- : BFD_RELOC_PPC_EMB_RELSDA
- -- : BFD_RELOC_PPC64_HIGHER
- -- : BFD_RELOC_PPC64_HIGHER_S
- -- : BFD_RELOC_PPC64_HIGHEST
- -- : BFD_RELOC_PPC64_HIGHEST_S
- -- : BFD_RELOC_PPC64_TOC16_LO
- -- : BFD_RELOC_PPC64_TOC16_HI
- -- : BFD_RELOC_PPC64_TOC16_HA
- -- : BFD_RELOC_PPC64_TOC
- -- : BFD_RELOC_PPC64_PLTGOT16
- -- : BFD_RELOC_PPC64_PLTGOT16_LO
- -- : BFD_RELOC_PPC64_PLTGOT16_HI
- -- : BFD_RELOC_PPC64_PLTGOT16_HA
- -- : BFD_RELOC_PPC64_ADDR16_DS
- -- : BFD_RELOC_PPC64_ADDR16_LO_DS
- -- : BFD_RELOC_PPC64_GOT16_DS
- -- : BFD_RELOC_PPC64_GOT16_LO_DS
- -- : BFD_RELOC_PPC64_PLT16_LO_DS
- -- : BFD_RELOC_PPC64_SECTOFF_DS
- -- : BFD_RELOC_PPC64_SECTOFF_LO_DS
- -- : BFD_RELOC_PPC64_TOC16_DS
- -- : BFD_RELOC_PPC64_TOC16_LO_DS
- -- : BFD_RELOC_PPC64_PLTGOT16_DS
- -- : BFD_RELOC_PPC64_PLTGOT16_LO_DS
- Power(rs6000) and PowerPC relocations.
-
- -- : BFD_RELOC_PPC_TLS
- -- : BFD_RELOC_PPC_DTPMOD
- -- : BFD_RELOC_PPC_TPREL16
- -- : BFD_RELOC_PPC_TPREL16_LO
- -- : BFD_RELOC_PPC_TPREL16_HI
- -- : BFD_RELOC_PPC_TPREL16_HA
- -- : BFD_RELOC_PPC_TPREL
- -- : BFD_RELOC_PPC_DTPREL16
- -- : BFD_RELOC_PPC_DTPREL16_LO
- -- : BFD_RELOC_PPC_DTPREL16_HI
- -- : BFD_RELOC_PPC_DTPREL16_HA
- -- : BFD_RELOC_PPC_DTPREL
- -- : BFD_RELOC_PPC_GOT_TLSGD16
- -- : BFD_RELOC_PPC_GOT_TLSGD16_LO
- -- : BFD_RELOC_PPC_GOT_TLSGD16_HI
- -- : BFD_RELOC_PPC_GOT_TLSGD16_HA
- -- : BFD_RELOC_PPC_GOT_TLSLD16
- -- : BFD_RELOC_PPC_GOT_TLSLD16_LO
- -- : BFD_RELOC_PPC_GOT_TLSLD16_HI
- -- : BFD_RELOC_PPC_GOT_TLSLD16_HA
- -- : BFD_RELOC_PPC_GOT_TPREL16
- -- : BFD_RELOC_PPC_GOT_TPREL16_LO
- -- : BFD_RELOC_PPC_GOT_TPREL16_HI
- -- : BFD_RELOC_PPC_GOT_TPREL16_HA
- -- : BFD_RELOC_PPC_GOT_DTPREL16
- -- : BFD_RELOC_PPC_GOT_DTPREL16_LO
- -- : BFD_RELOC_PPC_GOT_DTPREL16_HI
- -- : BFD_RELOC_PPC_GOT_DTPREL16_HA
- -- : BFD_RELOC_PPC64_TPREL16_DS
- -- : BFD_RELOC_PPC64_TPREL16_LO_DS
- -- : BFD_RELOC_PPC64_TPREL16_HIGHER
- -- : BFD_RELOC_PPC64_TPREL16_HIGHERA
- -- : BFD_RELOC_PPC64_TPREL16_HIGHEST
- -- : BFD_RELOC_PPC64_TPREL16_HIGHESTA
- -- : BFD_RELOC_PPC64_DTPREL16_DS
- -- : BFD_RELOC_PPC64_DTPREL16_LO_DS
- -- : BFD_RELOC_PPC64_DTPREL16_HIGHER
- -- : BFD_RELOC_PPC64_DTPREL16_HIGHERA
- -- : BFD_RELOC_PPC64_DTPREL16_HIGHEST
- -- : BFD_RELOC_PPC64_DTPREL16_HIGHESTA
- PowerPC and PowerPC64 thread-local storage relocations.
-
- -- : BFD_RELOC_I370_D12
- IBM 370/390 relocations
-
- -- : BFD_RELOC_CTOR
- The type of reloc used to build a constructor table - at the moment
- probably a 32 bit wide absolute relocation, but the target can
- choose. It generally does map to one of the other relocation
- types.
-
- -- : BFD_RELOC_ARM_PCREL_BRANCH
- ARM 26 bit pc-relative branch. The lowest two bits must be zero
- and are not stored in the instruction.
-
- -- : BFD_RELOC_ARM_PCREL_BLX
- ARM 26 bit pc-relative branch. The lowest bit must be zero and is
- not stored in the instruction. The 2nd lowest bit comes from a 1
- bit field in the instruction.
-
- -- : BFD_RELOC_THUMB_PCREL_BLX
- Thumb 22 bit pc-relative branch. The lowest bit must be zero and
- is not stored in the instruction. The 2nd lowest bit comes from a
- 1 bit field in the instruction.
-
- -- : BFD_RELOC_ARM_PCREL_CALL
- ARM 26-bit pc-relative branch for an unconditional BL or BLX
- instruction.
-
- -- : BFD_RELOC_ARM_PCREL_JUMP
- ARM 26-bit pc-relative branch for B or conditional BL instruction.
-
- -- : BFD_RELOC_THUMB_PCREL_BRANCH7
- -- : BFD_RELOC_THUMB_PCREL_BRANCH9
- -- : BFD_RELOC_THUMB_PCREL_BRANCH12
- -- : BFD_RELOC_THUMB_PCREL_BRANCH20
- -- : BFD_RELOC_THUMB_PCREL_BRANCH23
- -- : BFD_RELOC_THUMB_PCREL_BRANCH25
- Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches. The
- lowest bit must be zero and is not stored in the instruction.
- Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an
- "nn" one smaller in all cases. Note further that BRANCH23
- corresponds to R_ARM_THM_CALL.
-
- -- : BFD_RELOC_ARM_OFFSET_IMM
- 12-bit immediate offset, used in ARM-format ldr and str
- instructions.
-
- -- : BFD_RELOC_ARM_THUMB_OFFSET
- 5-bit immediate offset, used in Thumb-format ldr and str
- instructions.
-
- -- : BFD_RELOC_ARM_TARGET1
- Pc-relative or absolute relocation depending on target. Used for
- entries in .init_array sections.
-
- -- : BFD_RELOC_ARM_ROSEGREL32
- Read-only segment base relative address.
-
- -- : BFD_RELOC_ARM_SBREL32
- Data segment base relative address.
-
- -- : BFD_RELOC_ARM_TARGET2
- This reloc is used for references to RTTI data from exception
- handling tables. The actual definition depends on the target. It
- may be a pc-relative or some form of GOT-indirect relocation.
-
- -- : BFD_RELOC_ARM_PREL31
- 31-bit PC relative address.
-
- -- : BFD_RELOC_ARM_JUMP_SLOT
- -- : BFD_RELOC_ARM_GLOB_DAT
- -- : BFD_RELOC_ARM_GOT32
- -- : BFD_RELOC_ARM_PLT32
- -- : BFD_RELOC_ARM_RELATIVE
- -- : BFD_RELOC_ARM_GOTOFF
- -- : BFD_RELOC_ARM_GOTPC
- Relocations for setting up GOTs and PLTs for shared libraries.
-
- -- : BFD_RELOC_ARM_TLS_GD32
- -- : BFD_RELOC_ARM_TLS_LDO32
- -- : BFD_RELOC_ARM_TLS_LDM32
- -- : BFD_RELOC_ARM_TLS_DTPOFF32
- -- : BFD_RELOC_ARM_TLS_DTPMOD32
- -- : BFD_RELOC_ARM_TLS_TPOFF32
- -- : BFD_RELOC_ARM_TLS_IE32
- -- : BFD_RELOC_ARM_TLS_LE32
- ARM thread-local storage relocations.
-
- -- : BFD_RELOC_ARM_IMMEDIATE
- -- : BFD_RELOC_ARM_ADRL_IMMEDIATE
- -- : BFD_RELOC_ARM_T32_IMMEDIATE
- -- : BFD_RELOC_ARM_T32_IMM12
- -- : BFD_RELOC_ARM_T32_ADD_PC12
- -- : BFD_RELOC_ARM_SHIFT_IMM
- -- : BFD_RELOC_ARM_SMC
- -- : BFD_RELOC_ARM_SWI
- -- : BFD_RELOC_ARM_MULTI
- -- : BFD_RELOC_ARM_CP_OFF_IMM
- -- : BFD_RELOC_ARM_CP_OFF_IMM_S2
- -- : BFD_RELOC_ARM_T32_CP_OFF_IMM
- -- : BFD_RELOC_ARM_T32_CP_OFF_IMM_S2
- -- : BFD_RELOC_ARM_ADR_IMM
- -- : BFD_RELOC_ARM_LDR_IMM
- -- : BFD_RELOC_ARM_LITERAL
- -- : BFD_RELOC_ARM_IN_POOL
- -- : BFD_RELOC_ARM_OFFSET_IMM8
- -- : BFD_RELOC_ARM_T32_OFFSET_U8
- -- : BFD_RELOC_ARM_T32_OFFSET_IMM
- -- : BFD_RELOC_ARM_HWLITERAL
- -- : BFD_RELOC_ARM_THUMB_ADD
- -- : BFD_RELOC_ARM_THUMB_IMM
- -- : BFD_RELOC_ARM_THUMB_SHIFT
- These relocs are only used within the ARM assembler. They are not
- (at present) written to any object files.
-
- -- : BFD_RELOC_SH_PCDISP8BY2
- -- : BFD_RELOC_SH_PCDISP12BY2
- -- : BFD_RELOC_SH_IMM3
- -- : BFD_RELOC_SH_IMM3U
- -- : BFD_RELOC_SH_DISP12
- -- : BFD_RELOC_SH_DISP12BY2
- -- : BFD_RELOC_SH_DISP12BY4
- -- : BFD_RELOC_SH_DISP12BY8
- -- : BFD_RELOC_SH_DISP20
- -- : BFD_RELOC_SH_DISP20BY8
- -- : BFD_RELOC_SH_IMM4
- -- : BFD_RELOC_SH_IMM4BY2
- -- : BFD_RELOC_SH_IMM4BY4
- -- : BFD_RELOC_SH_IMM8
- -- : BFD_RELOC_SH_IMM8BY2
- -- : BFD_RELOC_SH_IMM8BY4
- -- : BFD_RELOC_SH_PCRELIMM8BY2
- -- : BFD_RELOC_SH_PCRELIMM8BY4
- -- : BFD_RELOC_SH_SWITCH16
- -- : BFD_RELOC_SH_SWITCH32
- -- : BFD_RELOC_SH_USES
- -- : BFD_RELOC_SH_COUNT
- -- : BFD_RELOC_SH_ALIGN
- -- : BFD_RELOC_SH_CODE
- -- : BFD_RELOC_SH_DATA
- -- : BFD_RELOC_SH_LABEL
- -- : BFD_RELOC_SH_LOOP_START
- -- : BFD_RELOC_SH_LOOP_END
- -- : BFD_RELOC_SH_COPY
- -- : BFD_RELOC_SH_GLOB_DAT
- -- : BFD_RELOC_SH_JMP_SLOT
- -- : BFD_RELOC_SH_RELATIVE
- -- : BFD_RELOC_SH_GOTPC
- -- : BFD_RELOC_SH_GOT_LOW16
- -- : BFD_RELOC_SH_GOT_MEDLOW16
- -- : BFD_RELOC_SH_GOT_MEDHI16
- -- : BFD_RELOC_SH_GOT_HI16
- -- : BFD_RELOC_SH_GOTPLT_LOW16
- -- : BFD_RELOC_SH_GOTPLT_MEDLOW16
- -- : BFD_RELOC_SH_GOTPLT_MEDHI16
- -- : BFD_RELOC_SH_GOTPLT_HI16
- -- : BFD_RELOC_SH_PLT_LOW16
- -- : BFD_RELOC_SH_PLT_MEDLOW16
- -- : BFD_RELOC_SH_PLT_MEDHI16
- -- : BFD_RELOC_SH_PLT_HI16
- -- : BFD_RELOC_SH_GOTOFF_LOW16
- -- : BFD_RELOC_SH_GOTOFF_MEDLOW16
- -- : BFD_RELOC_SH_GOTOFF_MEDHI16
- -- : BFD_RELOC_SH_GOTOFF_HI16
- -- : BFD_RELOC_SH_GOTPC_LOW16
- -- : BFD_RELOC_SH_GOTPC_MEDLOW16
- -- : BFD_RELOC_SH_GOTPC_MEDHI16
- -- : BFD_RELOC_SH_GOTPC_HI16
- -- : BFD_RELOC_SH_COPY64
- -- : BFD_RELOC_SH_GLOB_DAT64
- -- : BFD_RELOC_SH_JMP_SLOT64
- -- : BFD_RELOC_SH_RELATIVE64
- -- : BFD_RELOC_SH_GOT10BY4
- -- : BFD_RELOC_SH_GOT10BY8
- -- : BFD_RELOC_SH_GOTPLT10BY4
- -- : BFD_RELOC_SH_GOTPLT10BY8
- -- : BFD_RELOC_SH_GOTPLT32
- -- : BFD_RELOC_SH_SHMEDIA_CODE
- -- : BFD_RELOC_SH_IMMU5
- -- : BFD_RELOC_SH_IMMS6
- -- : BFD_RELOC_SH_IMMS6BY32
- -- : BFD_RELOC_SH_IMMU6
- -- : BFD_RELOC_SH_IMMS10
- -- : BFD_RELOC_SH_IMMS10BY2
- -- : BFD_RELOC_SH_IMMS10BY4
- -- : BFD_RELOC_SH_IMMS10BY8
- -- : BFD_RELOC_SH_IMMS16
- -- : BFD_RELOC_SH_IMMU16
- -- : BFD_RELOC_SH_IMM_LOW16
- -- : BFD_RELOC_SH_IMM_LOW16_PCREL
- -- : BFD_RELOC_SH_IMM_MEDLOW16
- -- : BFD_RELOC_SH_IMM_MEDLOW16_PCREL
- -- : BFD_RELOC_SH_IMM_MEDHI16
- -- : BFD_RELOC_SH_IMM_MEDHI16_PCREL
- -- : BFD_RELOC_SH_IMM_HI16
- -- : BFD_RELOC_SH_IMM_HI16_PCREL
- -- : BFD_RELOC_SH_PT_16
- -- : BFD_RELOC_SH_TLS_GD_32
- -- : BFD_RELOC_SH_TLS_LD_32
- -- : BFD_RELOC_SH_TLS_LDO_32
- -- : BFD_RELOC_SH_TLS_IE_32
- -- : BFD_RELOC_SH_TLS_LE_32
- -- : BFD_RELOC_SH_TLS_DTPMOD32
- -- : BFD_RELOC_SH_TLS_DTPOFF32
- -- : BFD_RELOC_SH_TLS_TPOFF32
- Renesas / SuperH SH relocs. Not all of these appear in object
- files.
-
- -- : BFD_RELOC_ARC_B22_PCREL
- ARC Cores relocs. ARC 22 bit pc-relative branch. The lowest two
- bits must be zero and are not stored in the instruction. The high
- 20 bits are installed in bits 26 through 7 of the instruction.
-
- -- : BFD_RELOC_ARC_B26
- ARC 26 bit absolute branch. The lowest two bits must be zero and
- are not stored in the instruction. The high 24 bits are installed
- in bits 23 through 0.
-
- -- : BFD_RELOC_BFIN_16_IMM
- ADI Blackfin 16 bit immediate absolute reloc.
-
- -- : BFD_RELOC_BFIN_16_HIGH
- ADI Blackfin 16 bit immediate absolute reloc higher 16 bits.
-
- -- : BFD_RELOC_BFIN_4_PCREL
- ADI Blackfin 'a' part of LSETUP.
-
- -- : BFD_RELOC_BFIN_5_PCREL
- ADI Blackfin.
-
- -- : BFD_RELOC_BFIN_16_LOW
- ADI Blackfin 16 bit immediate absolute reloc lower 16 bits.
-
- -- : BFD_RELOC_BFIN_10_PCREL
- ADI Blackfin.
-
- -- : BFD_RELOC_BFIN_11_PCREL
- ADI Blackfin 'b' part of LSETUP.
-
- -- : BFD_RELOC_BFIN_12_PCREL_JUMP
- ADI Blackfin.
-
- -- : BFD_RELOC_BFIN_12_PCREL_JUMP_S
- ADI Blackfin Short jump, pcrel.
-
- -- : BFD_RELOC_BFIN_24_PCREL_CALL_X
- ADI Blackfin Call.x not implemented.
-
- -- : BFD_RELOC_BFIN_24_PCREL_JUMP_L
- ADI Blackfin Long Jump pcrel.
-
- -- : BFD_RELOC_BFIN_GOT17M4
- -- : BFD_RELOC_BFIN_GOTHI
- -- : BFD_RELOC_BFIN_GOTLO
- -- : BFD_RELOC_BFIN_FUNCDESC
- -- : BFD_RELOC_BFIN_FUNCDESC_GOT17M4
- -- : BFD_RELOC_BFIN_FUNCDESC_GOTHI
- -- : BFD_RELOC_BFIN_FUNCDESC_GOTLO
- -- : BFD_RELOC_BFIN_FUNCDESC_VALUE
- -- : BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4
- -- : BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI
- -- : BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO
- -- : BFD_RELOC_BFIN_GOTOFF17M4
- -- : BFD_RELOC_BFIN_GOTOFFHI
- -- : BFD_RELOC_BFIN_GOTOFFLO
- ADI Blackfin FD-PIC relocations.
-
- -- : BFD_RELOC_BFIN_GOT
- ADI Blackfin GOT relocation.
-
- -- : BFD_RELOC_BFIN_PLTPC
- ADI Blackfin PLTPC relocation.
-
- -- : BFD_ARELOC_BFIN_PUSH
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_CONST
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_ADD
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_SUB
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_MULT
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_DIV
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_MOD
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_LSHIFT
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_RSHIFT
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_AND
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_OR
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_XOR
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_LAND
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_LOR
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_LEN
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_NEG
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_COMP
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_PAGE
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_HWPAGE
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_ARELOC_BFIN_ADDR
- ADI Blackfin arithmetic relocation.
-
- -- : BFD_RELOC_D10V_10_PCREL_R
- Mitsubishi D10V relocs. This is a 10-bit reloc with the right 2
- bits assumed to be 0.
-
- -- : BFD_RELOC_D10V_10_PCREL_L
- Mitsubishi D10V relocs. This is a 10-bit reloc with the right 2
- bits assumed to be 0. This is the same as the previous reloc
- except it is in the left container, i.e., shifted left 15 bits.
-
- -- : BFD_RELOC_D10V_18
- This is an 18-bit reloc with the right 2 bits assumed to be 0.
-
- -- : BFD_RELOC_D10V_18_PCREL
- This is an 18-bit reloc with the right 2 bits assumed to be 0.
-
- -- : BFD_RELOC_D30V_6
- Mitsubishi D30V relocs. This is a 6-bit absolute reloc.
-
- -- : BFD_RELOC_D30V_9_PCREL
- This is a 6-bit pc-relative reloc with the right 3 bits assumed to
- be 0.
-
- -- : BFD_RELOC_D30V_9_PCREL_R
- This is a 6-bit pc-relative reloc with the right 3 bits assumed to
- be 0. Same as the previous reloc but on the right side of the
- container.
-
- -- : BFD_RELOC_D30V_15
- This is a 12-bit absolute reloc with the right 3 bitsassumed to be
- 0.
-
- -- : BFD_RELOC_D30V_15_PCREL
- This is a 12-bit pc-relative reloc with the right 3 bits assumed
- to be 0.
-
- -- : BFD_RELOC_D30V_15_PCREL_R
- This is a 12-bit pc-relative reloc with the right 3 bits assumed
- to be 0. Same as the previous reloc but on the right side of the
- container.
-
- -- : BFD_RELOC_D30V_21
- This is an 18-bit absolute reloc with the right 3 bits assumed to
- be 0.
-
- -- : BFD_RELOC_D30V_21_PCREL
- This is an 18-bit pc-relative reloc with the right 3 bits assumed
- to be 0.
-
- -- : BFD_RELOC_D30V_21_PCREL_R
- This is an 18-bit pc-relative reloc with the right 3 bits assumed
- to be 0. Same as the previous reloc but on the right side of the
- container.
-
- -- : BFD_RELOC_D30V_32
- This is a 32-bit absolute reloc.
-
- -- : BFD_RELOC_D30V_32_PCREL
- This is a 32-bit pc-relative reloc.
-
- -- : BFD_RELOC_DLX_HI16_S
- DLX relocs
-
- -- : BFD_RELOC_DLX_LO16
- DLX relocs
-
- -- : BFD_RELOC_DLX_JMP26
- DLX relocs
-
- -- : BFD_RELOC_M32C_HI8
- -- : BFD_RELOC_M32C_RL_JUMP
- -- : BFD_RELOC_M32C_RL_1ADDR
- -- : BFD_RELOC_M32C_RL_2ADDR
- Renesas M16C/M32C Relocations.
-
- -- : BFD_RELOC_M32R_24
- Renesas M32R (formerly Mitsubishi M32R) relocs. This is a 24 bit
- absolute address.
-
- -- : BFD_RELOC_M32R_10_PCREL
- This is a 10-bit pc-relative reloc with the right 2 bits assumed
- to be 0.
-
- -- : BFD_RELOC_M32R_18_PCREL
- This is an 18-bit reloc with the right 2 bits assumed to be 0.
-
- -- : BFD_RELOC_M32R_26_PCREL
- This is a 26-bit reloc with the right 2 bits assumed to be 0.
-
- -- : BFD_RELOC_M32R_HI16_ULO
- This is a 16-bit reloc containing the high 16 bits of an address
- used when the lower 16 bits are treated as unsigned.
-
- -- : BFD_RELOC_M32R_HI16_SLO
- This is a 16-bit reloc containing the high 16 bits of an address
- used when the lower 16 bits are treated as signed.
-
- -- : BFD_RELOC_M32R_LO16
- This is a 16-bit reloc containing the lower 16 bits of an address.
-
- -- : BFD_RELOC_M32R_SDA16
- This is a 16-bit reloc containing the small data area offset for
- use in add3, load, and store instructions.
-
- -- : BFD_RELOC_M32R_GOT24
- -- : BFD_RELOC_M32R_26_PLTREL
- -- : BFD_RELOC_M32R_COPY
- -- : BFD_RELOC_M32R_GLOB_DAT
- -- : BFD_RELOC_M32R_JMP_SLOT
- -- : BFD_RELOC_M32R_RELATIVE
- -- : BFD_RELOC_M32R_GOTOFF
- -- : BFD_RELOC_M32R_GOTOFF_HI_ULO
- -- : BFD_RELOC_M32R_GOTOFF_HI_SLO
- -- : BFD_RELOC_M32R_GOTOFF_LO
- -- : BFD_RELOC_M32R_GOTPC24
- -- : BFD_RELOC_M32R_GOT16_HI_ULO
- -- : BFD_RELOC_M32R_GOT16_HI_SLO
- -- : BFD_RELOC_M32R_GOT16_LO
- -- : BFD_RELOC_M32R_GOTPC_HI_ULO
- -- : BFD_RELOC_M32R_GOTPC_HI_SLO
- -- : BFD_RELOC_M32R_GOTPC_LO
- For PIC.
-
- -- : BFD_RELOC_V850_9_PCREL
- This is a 9-bit reloc
-
- -- : BFD_RELOC_V850_22_PCREL
- This is a 22-bit reloc
-
- -- : BFD_RELOC_V850_SDA_16_16_OFFSET
- This is a 16 bit offset from the short data area pointer.
-
- -- : BFD_RELOC_V850_SDA_15_16_OFFSET
- This is a 16 bit offset (of which only 15 bits are used) from the
- short data area pointer.
-
- -- : BFD_RELOC_V850_ZDA_16_16_OFFSET
- This is a 16 bit offset from the zero data area pointer.
-
- -- : BFD_RELOC_V850_ZDA_15_16_OFFSET
- This is a 16 bit offset (of which only 15 bits are used) from the
- zero data area pointer.
-
- -- : BFD_RELOC_V850_TDA_6_8_OFFSET
- This is an 8 bit offset (of which only 6 bits are used) from the
- tiny data area pointer.
-
- -- : BFD_RELOC_V850_TDA_7_8_OFFSET
- This is an 8bit offset (of which only 7 bits are used) from the
- tiny data area pointer.
-
- -- : BFD_RELOC_V850_TDA_7_7_OFFSET
- This is a 7 bit offset from the tiny data area pointer.
-
- -- : BFD_RELOC_V850_TDA_16_16_OFFSET
- This is a 16 bit offset from the tiny data area pointer.
-
- -- : BFD_RELOC_V850_TDA_4_5_OFFSET
- This is a 5 bit offset (of which only 4 bits are used) from the
- tiny data area pointer.
-
- -- : BFD_RELOC_V850_TDA_4_4_OFFSET
- This is a 4 bit offset from the tiny data area pointer.
-
- -- : BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET
- This is a 16 bit offset from the short data area pointer, with the
- bits placed non-contiguously in the instruction.
-
- -- : BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET
- This is a 16 bit offset from the zero data area pointer, with the
- bits placed non-contiguously in the instruction.
-
- -- : BFD_RELOC_V850_CALLT_6_7_OFFSET
- This is a 6 bit offset from the call table base pointer.
-
- -- : BFD_RELOC_V850_CALLT_16_16_OFFSET
- This is a 16 bit offset from the call table base pointer.
-
- -- : BFD_RELOC_V850_LONGCALL
- Used for relaxing indirect function calls.
-
- -- : BFD_RELOC_V850_LONGJUMP
- Used for relaxing indirect jumps.
-
- -- : BFD_RELOC_V850_ALIGN
- Used to maintain alignment whilst relaxing.
-
- -- : BFD_RELOC_V850_LO16_SPLIT_OFFSET
- This is a variation of BFD_RELOC_LO16 that can be used in v850e
- ld.bu instructions.
-
- -- : BFD_RELOC_MN10300_32_PCREL
- This is a 32bit pcrel reloc for the mn10300, offset by two bytes
- in the instruction.
-
- -- : BFD_RELOC_MN10300_16_PCREL
- This is a 16bit pcrel reloc for the mn10300, offset by two bytes
- in the instruction.
-
- -- : BFD_RELOC_TIC30_LDP
- This is a 8bit DP reloc for the tms320c30, where the most
- significant 8 bits of a 24 bit word are placed into the least
- significant 8 bits of the opcode.
-
- -- : BFD_RELOC_TIC54X_PARTLS7
- This is a 7bit reloc for the tms320c54x, where the least
- significant 7 bits of a 16 bit word are placed into the least
- significant 7 bits of the opcode.
-
- -- : BFD_RELOC_TIC54X_PARTMS9
- This is a 9bit DP reloc for the tms320c54x, where the most
- significant 9 bits of a 16 bit word are placed into the least
- significant 9 bits of the opcode.
-
- -- : BFD_RELOC_TIC54X_23
- This is an extended address 23-bit reloc for the tms320c54x.
-
- -- : BFD_RELOC_TIC54X_16_OF_23
- This is a 16-bit reloc for the tms320c54x, where the least
- significant 16 bits of a 23-bit extended address are placed into
- the opcode.
-
- -- : BFD_RELOC_TIC54X_MS7_OF_23
- This is a reloc for the tms320c54x, where the most significant 7
- bits of a 23-bit extended address are placed into the opcode.
-
- -- : BFD_RELOC_FR30_48
- This is a 48 bit reloc for the FR30 that stores 32 bits.
-
- -- : BFD_RELOC_FR30_20
- This is a 32 bit reloc for the FR30 that stores 20 bits split up
- into two sections.
-
- -- : BFD_RELOC_FR30_6_IN_4
- This is a 16 bit reloc for the FR30 that stores a 6 bit word
- offset in 4 bits.
-
- -- : BFD_RELOC_FR30_8_IN_8
- This is a 16 bit reloc for the FR30 that stores an 8 bit byte
- offset into 8 bits.
-
- -- : BFD_RELOC_FR30_9_IN_8
- This is a 16 bit reloc for the FR30 that stores a 9 bit short
- offset into 8 bits.
-
- -- : BFD_RELOC_FR30_10_IN_8
- This is a 16 bit reloc for the FR30 that stores a 10 bit word
- offset into 8 bits.
-
- -- : BFD_RELOC_FR30_9_PCREL
- This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
- short offset into 8 bits.
-
- -- : BFD_RELOC_FR30_12_PCREL
- This is a 16 bit reloc for the FR30 that stores a 12 bit pc
- relative short offset into 11 bits.
-
- -- : BFD_RELOC_MCORE_PCREL_IMM8BY4
- -- : BFD_RELOC_MCORE_PCREL_IMM11BY2
- -- : BFD_RELOC_MCORE_PCREL_IMM4BY2
- -- : BFD_RELOC_MCORE_PCREL_32
- -- : BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2
- -- : BFD_RELOC_MCORE_RVA
- Motorola Mcore relocations.
-
- -- : BFD_RELOC_MMIX_GETA
- -- : BFD_RELOC_MMIX_GETA_1
- -- : BFD_RELOC_MMIX_GETA_2
- -- : BFD_RELOC_MMIX_GETA_3
- These are relocations for the GETA instruction.
-
- -- : BFD_RELOC_MMIX_CBRANCH
- -- : BFD_RELOC_MMIX_CBRANCH_J
- -- : BFD_RELOC_MMIX_CBRANCH_1
- -- : BFD_RELOC_MMIX_CBRANCH_2
- -- : BFD_RELOC_MMIX_CBRANCH_3
- These are relocations for a conditional branch instruction.
-
- -- : BFD_RELOC_MMIX_PUSHJ
- -- : BFD_RELOC_MMIX_PUSHJ_1
- -- : BFD_RELOC_MMIX_PUSHJ_2
- -- : BFD_RELOC_MMIX_PUSHJ_3
- -- : BFD_RELOC_MMIX_PUSHJ_STUBBABLE
- These are relocations for the PUSHJ instruction.
-
- -- : BFD_RELOC_MMIX_JMP
- -- : BFD_RELOC_MMIX_JMP_1
- -- : BFD_RELOC_MMIX_JMP_2
- -- : BFD_RELOC_MMIX_JMP_3
- These are relocations for the JMP instruction.
-
- -- : BFD_RELOC_MMIX_ADDR19
- This is a relocation for a relative address as in a GETA
- instruction or a branch.
-
- -- : BFD_RELOC_MMIX_ADDR27
- This is a relocation for a relative address as in a JMP
- instruction.
-
- -- : BFD_RELOC_MMIX_REG_OR_BYTE
- This is a relocation for an instruction field that may be a general
- register or a value 0..255.
-
- -- : BFD_RELOC_MMIX_REG
- This is a relocation for an instruction field that may be a general
- register.
-
- -- : BFD_RELOC_MMIX_BASE_PLUS_OFFSET
- This is a relocation for two instruction fields holding a register
- and an offset, the equivalent of the relocation.
-
- -- : BFD_RELOC_MMIX_LOCAL
- This relocation is an assertion that the expression is not
- allocated as a global register. It does not modify contents.
-
- -- : BFD_RELOC_AVR_7_PCREL
- This is a 16 bit reloc for the AVR that stores 8 bit pc relative
- short offset into 7 bits.
-
- -- : BFD_RELOC_AVR_13_PCREL
- This is a 16 bit reloc for the AVR that stores 13 bit pc relative
- short offset into 12 bits.
-
- -- : BFD_RELOC_AVR_16_PM
- This is a 16 bit reloc for the AVR that stores 17 bit value
- (usually program memory address) into 16 bits.
-
- -- : BFD_RELOC_AVR_LO8_LDI
- This is a 16 bit reloc for the AVR that stores 8 bit value (usually
- data memory address) into 8 bit immediate value of LDI insn.
-
- -- : BFD_RELOC_AVR_HI8_LDI
- This is a 16 bit reloc for the AVR that stores 8 bit value (high 8
- bit of data memory address) into 8 bit immediate value of LDI insn.
-
- -- : BFD_RELOC_AVR_HH8_LDI
- This is a 16 bit reloc for the AVR that stores 8 bit value (most
- high 8 bit of program memory address) into 8 bit immediate value
- of LDI insn.
-
- -- : BFD_RELOC_AVR_MS8_LDI
- This is a 16 bit reloc for the AVR that stores 8 bit value (most
- high 8 bit of 32 bit value) into 8 bit immediate value of LDI insn.
-
- -- : BFD_RELOC_AVR_LO8_LDI_NEG
- This is a 16 bit reloc for the AVR that stores negated 8 bit value
- (usually data memory address) into 8 bit immediate value of SUBI
- insn.
-
- -- : BFD_RELOC_AVR_HI8_LDI_NEG
- This is a 16 bit reloc for the AVR that stores negated 8 bit value
- (high 8 bit of data memory address) into 8 bit immediate value of
- SUBI insn.
-
- -- : BFD_RELOC_AVR_HH8_LDI_NEG
- This is a 16 bit reloc for the AVR that stores negated 8 bit value
- (most high 8 bit of program memory address) into 8 bit immediate
- value of LDI or SUBI insn.
-
- -- : BFD_RELOC_AVR_MS8_LDI_NEG
- This is a 16 bit reloc for the AVR that stores negated 8 bit value
- (msb of 32 bit value) into 8 bit immediate value of LDI insn.
-
- -- : BFD_RELOC_AVR_LO8_LDI_PM
- This is a 16 bit reloc for the AVR that stores 8 bit value (usually
- command address) into 8 bit immediate value of LDI insn.
-
- -- : BFD_RELOC_AVR_HI8_LDI_PM
- This is a 16 bit reloc for the AVR that stores 8 bit value (high 8
- bit of command address) into 8 bit immediate value of LDI insn.
-
- -- : BFD_RELOC_AVR_HH8_LDI_PM
- This is a 16 bit reloc for the AVR that stores 8 bit value (most
- high 8 bit of command address) into 8 bit immediate value of LDI
- insn.
-
- -- : BFD_RELOC_AVR_LO8_LDI_PM_NEG
- This is a 16 bit reloc for the AVR that stores negated 8 bit value
- (usually command address) into 8 bit immediate value of SUBI insn.
-
- -- : BFD_RELOC_AVR_HI8_LDI_PM_NEG
- This is a 16 bit reloc for the AVR that stores negated 8 bit value
- (high 8 bit of 16 bit command address) into 8 bit immediate value
- of SUBI insn.
-
- -- : BFD_RELOC_AVR_HH8_LDI_PM_NEG
- This is a 16 bit reloc for the AVR that stores negated 8 bit value
- (high 6 bit of 22 bit command address) into 8 bit immediate value
- of SUBI insn.
-
- -- : BFD_RELOC_AVR_CALL
- This is a 32 bit reloc for the AVR that stores 23 bit value into
- 22 bits.
-
- -- : BFD_RELOC_AVR_LDI
- This is a 16 bit reloc for the AVR that stores all needed bits for
- absolute addressing with ldi with overflow check to linktime
-
- -- : BFD_RELOC_AVR_6
- This is a 6 bit reloc for the AVR that stores offset for ldd/std
- instructions
-
- -- : BFD_RELOC_AVR_6_ADIW
- This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
- instructions
-
- -- : BFD_RELOC_390_12
- Direct 12 bit.
-
- -- : BFD_RELOC_390_GOT12
- 12 bit GOT offset.
-
- -- : BFD_RELOC_390_PLT32
- 32 bit PC relative PLT address.
-
- -- : BFD_RELOC_390_COPY
- Copy symbol at runtime.
-
- -- : BFD_RELOC_390_GLOB_DAT
- Create GOT entry.
-
- -- : BFD_RELOC_390_JMP_SLOT
- Create PLT entry.
-
- -- : BFD_RELOC_390_RELATIVE
- Adjust by program base.
-
- -- : BFD_RELOC_390_GOTPC
- 32 bit PC relative offset to GOT.
-
- -- : BFD_RELOC_390_GOT16
- 16 bit GOT offset.
-
- -- : BFD_RELOC_390_PC16DBL
- PC relative 16 bit shifted by 1.
-
- -- : BFD_RELOC_390_PLT16DBL
- 16 bit PC rel. PLT shifted by 1.
-
- -- : BFD_RELOC_390_PC32DBL
- PC relative 32 bit shifted by 1.
-
- -- : BFD_RELOC_390_PLT32DBL
- 32 bit PC rel. PLT shifted by 1.
-
- -- : BFD_RELOC_390_GOTPCDBL
- 32 bit PC rel. GOT shifted by 1.
-
- -- : BFD_RELOC_390_GOT64
- 64 bit GOT offset.
-
- -- : BFD_RELOC_390_PLT64
- 64 bit PC relative PLT address.
-
- -- : BFD_RELOC_390_GOTENT
- 32 bit rel. offset to GOT entry.
-
- -- : BFD_RELOC_390_GOTOFF64
- 64 bit offset to GOT.
-
- -- : BFD_RELOC_390_GOTPLT12
- 12-bit offset to symbol-entry within GOT, with PLT handling.
-
- -- : BFD_RELOC_390_GOTPLT16
- 16-bit offset to symbol-entry within GOT, with PLT handling.
-
- -- : BFD_RELOC_390_GOTPLT32
- 32-bit offset to symbol-entry within GOT, with PLT handling.
-
- -- : BFD_RELOC_390_GOTPLT64
- 64-bit offset to symbol-entry within GOT, with PLT handling.
-
- -- : BFD_RELOC_390_GOTPLTENT
- 32-bit rel. offset to symbol-entry within GOT, with PLT handling.
-
- -- : BFD_RELOC_390_PLTOFF16
- 16-bit rel. offset from the GOT to a PLT entry.
-
- -- : BFD_RELOC_390_PLTOFF32
- 32-bit rel. offset from the GOT to a PLT entry.
-
- -- : BFD_RELOC_390_PLTOFF64
- 64-bit rel. offset from the GOT to a PLT entry.
-
- -- : BFD_RELOC_390_TLS_LOAD
- -- : BFD_RELOC_390_TLS_GDCALL
- -- : BFD_RELOC_390_TLS_LDCALL
- -- : BFD_RELOC_390_TLS_GD32
- -- : BFD_RELOC_390_TLS_GD64
- -- : BFD_RELOC_390_TLS_GOTIE12
- -- : BFD_RELOC_390_TLS_GOTIE32
- -- : BFD_RELOC_390_TLS_GOTIE64
- -- : BFD_RELOC_390_TLS_LDM32
- -- : BFD_RELOC_390_TLS_LDM64
- -- : BFD_RELOC_390_TLS_IE32
- -- : BFD_RELOC_390_TLS_IE64
- -- : BFD_RELOC_390_TLS_IEENT
- -- : BFD_RELOC_390_TLS_LE32
- -- : BFD_RELOC_390_TLS_LE64
- -- : BFD_RELOC_390_TLS_LDO32
- -- : BFD_RELOC_390_TLS_LDO64
- -- : BFD_RELOC_390_TLS_DTPMOD
- -- : BFD_RELOC_390_TLS_DTPOFF
- -- : BFD_RELOC_390_TLS_TPOFF
- s390 tls relocations.
-
- -- : BFD_RELOC_390_20
- -- : BFD_RELOC_390_GOT20
- -- : BFD_RELOC_390_GOTPLT20
- -- : BFD_RELOC_390_TLS_GOTIE20
- Long displacement extension.
-
- -- : BFD_RELOC_IP2K_FR9
- Scenix IP2K - 9-bit register number / data address
-
- -- : BFD_RELOC_IP2K_BANK
- Scenix IP2K - 4-bit register/data bank number
-
- -- : BFD_RELOC_IP2K_ADDR16CJP
- Scenix IP2K - low 13 bits of instruction word address
-
- -- : BFD_RELOC_IP2K_PAGE3
- Scenix IP2K - high 3 bits of instruction word address
-
- -- : BFD_RELOC_IP2K_LO8DATA
- -- : BFD_RELOC_IP2K_HI8DATA
- -- : BFD_RELOC_IP2K_EX8DATA
- Scenix IP2K - ext/low/high 8 bits of data address
-
- -- : BFD_RELOC_IP2K_LO8INSN
- -- : BFD_RELOC_IP2K_HI8INSN
- Scenix IP2K - low/high 8 bits of instruction word address
-
- -- : BFD_RELOC_IP2K_PC_SKIP
- Scenix IP2K - even/odd PC modifier to modify snb pcl.0
-
- -- : BFD_RELOC_IP2K_TEXT
- Scenix IP2K - 16 bit word address in text section.
-
- -- : BFD_RELOC_IP2K_FR_OFFSET
- Scenix IP2K - 7-bit sp or dp offset
-
- -- : BFD_RELOC_VPE4KMATH_DATA
- -- : BFD_RELOC_VPE4KMATH_INSN
- Scenix VPE4K coprocessor - data/insn-space addressing
-
- -- : BFD_RELOC_VTABLE_INHERIT
- -- : BFD_RELOC_VTABLE_ENTRY
- These two relocations are used by the linker to determine which of
- the entries in a C++ virtual function table are actually used.
- When the -gc-sections option is given, the linker will zero out
- the entries that are not used, so that the code for those
- functions need not be included in the output.
-
- VTABLE_INHERIT is a zero-space relocation used to describe to the
- linker the inheritance tree of a C++ virtual function table. The
- relocation's symbol should be the parent class' vtable, and the
- relocation should be located at the child vtable.
-
- VTABLE_ENTRY is a zero-space relocation that describes the use of a
- virtual function table entry. The reloc's symbol should refer to
- the table of the class mentioned in the code. Off of that base,
- an offset describes the entry that is being used. For Rela hosts,
- this offset is stored in the reloc's addend. For Rel hosts, we
- are forced to put this offset in the reloc's section offset.
-
- -- : BFD_RELOC_IA64_IMM14
- -- : BFD_RELOC_IA64_IMM22
- -- : BFD_RELOC_IA64_IMM64
- -- : BFD_RELOC_IA64_DIR32MSB
- -- : BFD_RELOC_IA64_DIR32LSB
- -- : BFD_RELOC_IA64_DIR64MSB
- -- : BFD_RELOC_IA64_DIR64LSB
- -- : BFD_RELOC_IA64_GPREL22
- -- : BFD_RELOC_IA64_GPREL64I
- -- : BFD_RELOC_IA64_GPREL32MSB
- -- : BFD_RELOC_IA64_GPREL32LSB
- -- : BFD_RELOC_IA64_GPREL64MSB
- -- : BFD_RELOC_IA64_GPREL64LSB
- -- : BFD_RELOC_IA64_LTOFF22
- -- : BFD_RELOC_IA64_LTOFF64I
- -- : BFD_RELOC_IA64_PLTOFF22
- -- : BFD_RELOC_IA64_PLTOFF64I
- -- : BFD_RELOC_IA64_PLTOFF64MSB
- -- : BFD_RELOC_IA64_PLTOFF64LSB
- -- : BFD_RELOC_IA64_FPTR64I
- -- : BFD_RELOC_IA64_FPTR32MSB
- -- : BFD_RELOC_IA64_FPTR32LSB
- -- : BFD_RELOC_IA64_FPTR64MSB
- -- : BFD_RELOC_IA64_FPTR64LSB
- -- : BFD_RELOC_IA64_PCREL21B
- -- : BFD_RELOC_IA64_PCREL21BI
- -- : BFD_RELOC_IA64_PCREL21M
- -- : BFD_RELOC_IA64_PCREL21F
- -- : BFD_RELOC_IA64_PCREL22
- -- : BFD_RELOC_IA64_PCREL60B
- -- : BFD_RELOC_IA64_PCREL64I
- -- : BFD_RELOC_IA64_PCREL32MSB
- -- : BFD_RELOC_IA64_PCREL32LSB
- -- : BFD_RELOC_IA64_PCREL64MSB
- -- : BFD_RELOC_IA64_PCREL64LSB
- -- : BFD_RELOC_IA64_LTOFF_FPTR22
- -- : BFD_RELOC_IA64_LTOFF_FPTR64I
- -- : BFD_RELOC_IA64_LTOFF_FPTR32MSB
- -- : BFD_RELOC_IA64_LTOFF_FPTR32LSB
- -- : BFD_RELOC_IA64_LTOFF_FPTR64MSB
- -- : BFD_RELOC_IA64_LTOFF_FPTR64LSB
- -- : BFD_RELOC_IA64_SEGREL32MSB
- -- : BFD_RELOC_IA64_SEGREL32LSB
- -- : BFD_RELOC_IA64_SEGREL64MSB
- -- : BFD_RELOC_IA64_SEGREL64LSB
- -- : BFD_RELOC_IA64_SECREL32MSB
- -- : BFD_RELOC_IA64_SECREL32LSB
- -- : BFD_RELOC_IA64_SECREL64MSB
- -- : BFD_RELOC_IA64_SECREL64LSB
- -- : BFD_RELOC_IA64_REL32MSB
- -- : BFD_RELOC_IA64_REL32LSB
- -- : BFD_RELOC_IA64_REL64MSB
- -- : BFD_RELOC_IA64_REL64LSB
- -- : BFD_RELOC_IA64_LTV32MSB
- -- : BFD_RELOC_IA64_LTV32LSB
- -- : BFD_RELOC_IA64_LTV64MSB
- -- : BFD_RELOC_IA64_LTV64LSB
- -- : BFD_RELOC_IA64_IPLTMSB
- -- : BFD_RELOC_IA64_IPLTLSB
- -- : BFD_RELOC_IA64_COPY
- -- : BFD_RELOC_IA64_LTOFF22X
- -- : BFD_RELOC_IA64_LDXMOV
- -- : BFD_RELOC_IA64_TPREL14
- -- : BFD_RELOC_IA64_TPREL22
- -- : BFD_RELOC_IA64_TPREL64I
- -- : BFD_RELOC_IA64_TPREL64MSB
- -- : BFD_RELOC_IA64_TPREL64LSB
- -- : BFD_RELOC_IA64_LTOFF_TPREL22
- -- : BFD_RELOC_IA64_DTPMOD64MSB
- -- : BFD_RELOC_IA64_DTPMOD64LSB
- -- : BFD_RELOC_IA64_LTOFF_DTPMOD22
- -- : BFD_RELOC_IA64_DTPREL14
- -- : BFD_RELOC_IA64_DTPREL22
- -- : BFD_RELOC_IA64_DTPREL64I
- -- : BFD_RELOC_IA64_DTPREL32MSB
- -- : BFD_RELOC_IA64_DTPREL32LSB
- -- : BFD_RELOC_IA64_DTPREL64MSB
- -- : BFD_RELOC_IA64_DTPREL64LSB
- -- : BFD_RELOC_IA64_LTOFF_DTPREL22
- Intel IA64 Relocations.
-
- -- : BFD_RELOC_M68HC11_HI8
- Motorola 68HC11 reloc. This is the 8 bit high part of an absolute
- address.
-
- -- : BFD_RELOC_M68HC11_LO8
- Motorola 68HC11 reloc. This is the 8 bit low part of an absolute
- address.
-
- -- : BFD_RELOC_M68HC11_3B
- Motorola 68HC11 reloc. This is the 3 bit of a value.
-
- -- : BFD_RELOC_M68HC11_RL_JUMP
- Motorola 68HC11 reloc. This reloc marks the beginning of a
- jump/call instruction. It is used for linker relaxation to
- correctly identify beginning of instruction and change some
- branches to use PC-relative addressing mode.
-
- -- : BFD_RELOC_M68HC11_RL_GROUP
- Motorola 68HC11 reloc. This reloc marks a group of several
- instructions that gcc generates and for which the linker
- relaxation pass can modify and/or remove some of them.
-
- -- : BFD_RELOC_M68HC11_LO16
- Motorola 68HC11 reloc. This is the 16-bit lower part of an
- address. It is used for 'call' instruction to specify the symbol
- address without any special transformation (due to memory bank
- window).
-
- -- : BFD_RELOC_M68HC11_PAGE
- Motorola 68HC11 reloc. This is a 8-bit reloc that specifies the
- page number of an address. It is used by 'call' instruction to
- specify the page number of the symbol.
-
- -- : BFD_RELOC_M68HC11_24
- Motorola 68HC11 reloc. This is a 24-bit reloc that represents the
- address with a 16-bit value and a 8-bit page number. The symbol
- address is transformed to follow the 16K memory bank of 68HC12
- (seen as mapped in the window).
-
- -- : BFD_RELOC_M68HC12_5B
- Motorola 68HC12 reloc. This is the 5 bits of a value.
-
- -- : BFD_RELOC_16C_NUM08
- -- : BFD_RELOC_16C_NUM08_C
- -- : BFD_RELOC_16C_NUM16
- -- : BFD_RELOC_16C_NUM16_C
- -- : BFD_RELOC_16C_NUM32
- -- : BFD_RELOC_16C_NUM32_C
- -- : BFD_RELOC_16C_DISP04
- -- : BFD_RELOC_16C_DISP04_C
- -- : BFD_RELOC_16C_DISP08
- -- : BFD_RELOC_16C_DISP08_C
- -- : BFD_RELOC_16C_DISP16
- -- : BFD_RELOC_16C_DISP16_C
- -- : BFD_RELOC_16C_DISP24
- -- : BFD_RELOC_16C_DISP24_C
- -- : BFD_RELOC_16C_DISP24a
- -- : BFD_RELOC_16C_DISP24a_C
- -- : BFD_RELOC_16C_REG04
- -- : BFD_RELOC_16C_REG04_C
- -- : BFD_RELOC_16C_REG04a
- -- : BFD_RELOC_16C_REG04a_C
- -- : BFD_RELOC_16C_REG14
- -- : BFD_RELOC_16C_REG14_C
- -- : BFD_RELOC_16C_REG16
- -- : BFD_RELOC_16C_REG16_C
- -- : BFD_RELOC_16C_REG20
- -- : BFD_RELOC_16C_REG20_C
- -- : BFD_RELOC_16C_ABS20
- -- : BFD_RELOC_16C_ABS20_C
- -- : BFD_RELOC_16C_ABS24
- -- : BFD_RELOC_16C_ABS24_C
- -- : BFD_RELOC_16C_IMM04
- -- : BFD_RELOC_16C_IMM04_C
- -- : BFD_RELOC_16C_IMM16
- -- : BFD_RELOC_16C_IMM16_C
- -- : BFD_RELOC_16C_IMM20
- -- : BFD_RELOC_16C_IMM20_C
- -- : BFD_RELOC_16C_IMM24
- -- : BFD_RELOC_16C_IMM24_C
- -- : BFD_RELOC_16C_IMM32
- -- : BFD_RELOC_16C_IMM32_C
- NS CR16C Relocations.
-
- -- : BFD_RELOC_CRX_REL4
- -- : BFD_RELOC_CRX_REL8
- -- : BFD_RELOC_CRX_REL8_CMP
- -- : BFD_RELOC_CRX_REL16
- -- : BFD_RELOC_CRX_REL24
- -- : BFD_RELOC_CRX_REL32
- -- : BFD_RELOC_CRX_REGREL12
- -- : BFD_RELOC_CRX_REGREL22
- -- : BFD_RELOC_CRX_REGREL28
- -- : BFD_RELOC_CRX_REGREL32
- -- : BFD_RELOC_CRX_ABS16
- -- : BFD_RELOC_CRX_ABS32
- -- : BFD_RELOC_CRX_NUM8
- -- : BFD_RELOC_CRX_NUM16
- -- : BFD_RELOC_CRX_NUM32
- -- : BFD_RELOC_CRX_IMM16
- -- : BFD_RELOC_CRX_IMM32
- -- : BFD_RELOC_CRX_SWITCH8
- -- : BFD_RELOC_CRX_SWITCH16
- -- : BFD_RELOC_CRX_SWITCH32
- NS CRX Relocations.
-
- -- : BFD_RELOC_CRIS_BDISP8
- -- : BFD_RELOC_CRIS_UNSIGNED_5
- -- : BFD_RELOC_CRIS_SIGNED_6
- -- : BFD_RELOC_CRIS_UNSIGNED_6
- -- : BFD_RELOC_CRIS_SIGNED_8
- -- : BFD_RELOC_CRIS_UNSIGNED_8
- -- : BFD_RELOC_CRIS_SIGNED_16
- -- : BFD_RELOC_CRIS_UNSIGNED_16
- -- : BFD_RELOC_CRIS_LAPCQ_OFFSET
- -- : BFD_RELOC_CRIS_UNSIGNED_4
- These relocs are only used within the CRIS assembler. They are not
- (at present) written to any object files.
-
- -- : BFD_RELOC_CRIS_COPY
- -- : BFD_RELOC_CRIS_GLOB_DAT
- -- : BFD_RELOC_CRIS_JUMP_SLOT
- -- : BFD_RELOC_CRIS_RELATIVE
- Relocs used in ELF shared libraries for CRIS.
-
- -- : BFD_RELOC_CRIS_32_GOT
- 32-bit offset to symbol-entry within GOT.
-
- -- : BFD_RELOC_CRIS_16_GOT
- 16-bit offset to symbol-entry within GOT.
-
- -- : BFD_RELOC_CRIS_32_GOTPLT
- 32-bit offset to symbol-entry within GOT, with PLT handling.
-
- -- : BFD_RELOC_CRIS_16_GOTPLT
- 16-bit offset to symbol-entry within GOT, with PLT handling.
-
- -- : BFD_RELOC_CRIS_32_GOTREL
- 32-bit offset to symbol, relative to GOT.
-
- -- : BFD_RELOC_CRIS_32_PLT_GOTREL
- 32-bit offset to symbol with PLT entry, relative to GOT.
-
- -- : BFD_RELOC_CRIS_32_PLT_PCREL
- 32-bit offset to symbol with PLT entry, relative to this
- relocation.
-
- -- : BFD_RELOC_860_COPY
- -- : BFD_RELOC_860_GLOB_DAT
- -- : BFD_RELOC_860_JUMP_SLOT
- -- : BFD_RELOC_860_RELATIVE
- -- : BFD_RELOC_860_PC26
- -- : BFD_RELOC_860_PLT26
- -- : BFD_RELOC_860_PC16
- -- : BFD_RELOC_860_LOW0
- -- : BFD_RELOC_860_SPLIT0
- -- : BFD_RELOC_860_LOW1
- -- : BFD_RELOC_860_SPLIT1
- -- : BFD_RELOC_860_LOW2
- -- : BFD_RELOC_860_SPLIT2
- -- : BFD_RELOC_860_LOW3
- -- : BFD_RELOC_860_LOGOT0
- -- : BFD_RELOC_860_SPGOT0
- -- : BFD_RELOC_860_LOGOT1
- -- : BFD_RELOC_860_SPGOT1
- -- : BFD_RELOC_860_LOGOTOFF0
- -- : BFD_RELOC_860_SPGOTOFF0
- -- : BFD_RELOC_860_LOGOTOFF1
- -- : BFD_RELOC_860_SPGOTOFF1
- -- : BFD_RELOC_860_LOGOTOFF2
- -- : BFD_RELOC_860_LOGOTOFF3
- -- : BFD_RELOC_860_LOPC
- -- : BFD_RELOC_860_HIGHADJ
- -- : BFD_RELOC_860_HAGOT
- -- : BFD_RELOC_860_HAGOTOFF
- -- : BFD_RELOC_860_HAPC
- -- : BFD_RELOC_860_HIGH
- -- : BFD_RELOC_860_HIGOT
- -- : BFD_RELOC_860_HIGOTOFF
- Intel i860 Relocations.
-
- -- : BFD_RELOC_OPENRISC_ABS_26
- -- : BFD_RELOC_OPENRISC_REL_26
- OpenRISC Relocations.
-
- -- : BFD_RELOC_H8_DIR16A8
- -- : BFD_RELOC_H8_DIR16R8
- -- : BFD_RELOC_H8_DIR24A8
- -- : BFD_RELOC_H8_DIR24R8
- -- : BFD_RELOC_H8_DIR32A16
- H8 elf Relocations.
-
- -- : BFD_RELOC_XSTORMY16_REL_12
- -- : BFD_RELOC_XSTORMY16_12
- -- : BFD_RELOC_XSTORMY16_24
- -- : BFD_RELOC_XSTORMY16_FPTR16
- Sony Xstormy16 Relocations.
-
- -- : BFD_RELOC_XC16X_PAG
- -- : BFD_RELOC_XC16X_POF
- -- : BFD_RELOC_XC16X_SEG
- -- : BFD_RELOC_XC16X_SOF
- Infineon Relocations.
-
- -- : BFD_RELOC_VAX_GLOB_DAT
- -- : BFD_RELOC_VAX_JMP_SLOT
- -- : BFD_RELOC_VAX_RELATIVE
- Relocations used by VAX ELF.
-
- -- : BFD_RELOC_MT_PC16
- Morpho MT - 16 bit immediate relocation.
-
- -- : BFD_RELOC_MT_HI16
- Morpho MT - Hi 16 bits of an address.
-
- -- : BFD_RELOC_MT_LO16
- Morpho MT - Low 16 bits of an address.
-
- -- : BFD_RELOC_MT_GNU_VTINHERIT
- Morpho MT - Used to tell the linker which vtable entries are used.
-
- -- : BFD_RELOC_MT_GNU_VTENTRY
- Morpho MT - Used to tell the linker which vtable entries are used.
-
- -- : BFD_RELOC_MT_PCINSN8
- Morpho MT - 8 bit immediate relocation.
-
- -- : BFD_RELOC_MSP430_10_PCREL
- -- : BFD_RELOC_MSP430_16_PCREL
- -- : BFD_RELOC_MSP430_16
- -- : BFD_RELOC_MSP430_16_PCREL_BYTE
- -- : BFD_RELOC_MSP430_16_BYTE
- -- : BFD_RELOC_MSP430_2X_PCREL
- -- : BFD_RELOC_MSP430_RL_PCREL
- msp430 specific relocation codes
-
- -- : BFD_RELOC_IQ2000_OFFSET_16
- -- : BFD_RELOC_IQ2000_OFFSET_21
- -- : BFD_RELOC_IQ2000_UHI16
- IQ2000 Relocations.
-
- -- : BFD_RELOC_XTENSA_RTLD
- Special Xtensa relocation used only by PLT entries in ELF shared
- objects to indicate that the runtime linker should set the value
- to one of its own internal functions or data structures.
-
- -- : BFD_RELOC_XTENSA_GLOB_DAT
- -- : BFD_RELOC_XTENSA_JMP_SLOT
- -- : BFD_RELOC_XTENSA_RELATIVE
- Xtensa relocations for ELF shared objects.
-
- -- : BFD_RELOC_XTENSA_PLT
- Xtensa relocation used in ELF object files for symbols that may
- require PLT entries. Otherwise, this is just a generic 32-bit
- relocation.
-
- -- : BFD_RELOC_XTENSA_DIFF8
- -- : BFD_RELOC_XTENSA_DIFF16
- -- : BFD_RELOC_XTENSA_DIFF32
- Xtensa relocations to mark the difference of two local symbols.
- These are only needed to support linker relaxation and can be
- ignored when not relaxing. The field is set to the value of the
- difference assuming no relaxation. The relocation encodes the
- position of the first symbol so the linker can determine whether
- to adjust the field value.
-
- -- : BFD_RELOC_XTENSA_SLOT0_OP
- -- : BFD_RELOC_XTENSA_SLOT1_OP
- -- : BFD_RELOC_XTENSA_SLOT2_OP
- -- : BFD_RELOC_XTENSA_SLOT3_OP
- -- : BFD_RELOC_XTENSA_SLOT4_OP
- -- : BFD_RELOC_XTENSA_SLOT5_OP
- -- : BFD_RELOC_XTENSA_SLOT6_OP
- -- : BFD_RELOC_XTENSA_SLOT7_OP
- -- : BFD_RELOC_XTENSA_SLOT8_OP
- -- : BFD_RELOC_XTENSA_SLOT9_OP
- -- : BFD_RELOC_XTENSA_SLOT10_OP
- -- : BFD_RELOC_XTENSA_SLOT11_OP
- -- : BFD_RELOC_XTENSA_SLOT12_OP
- -- : BFD_RELOC_XTENSA_SLOT13_OP
- -- : BFD_RELOC_XTENSA_SLOT14_OP
- Generic Xtensa relocations for instruction operands. Only the slot
- number is encoded in the relocation. The relocation applies to the
- last PC-relative immediate operand, or if there are no PC-relative
- immediates, to the last immediate operand.
-
- -- : BFD_RELOC_XTENSA_SLOT0_ALT
- -- : BFD_RELOC_XTENSA_SLOT1_ALT
- -- : BFD_RELOC_XTENSA_SLOT2_ALT
- -- : BFD_RELOC_XTENSA_SLOT3_ALT
- -- : BFD_RELOC_XTENSA_SLOT4_ALT
- -- : BFD_RELOC_XTENSA_SLOT5_ALT
- -- : BFD_RELOC_XTENSA_SLOT6_ALT
- -- : BFD_RELOC_XTENSA_SLOT7_ALT
- -- : BFD_RELOC_XTENSA_SLOT8_ALT
- -- : BFD_RELOC_XTENSA_SLOT9_ALT
- -- : BFD_RELOC_XTENSA_SLOT10_ALT
- -- : BFD_RELOC_XTENSA_SLOT11_ALT
- -- : BFD_RELOC_XTENSA_SLOT12_ALT
- -- : BFD_RELOC_XTENSA_SLOT13_ALT
- -- : BFD_RELOC_XTENSA_SLOT14_ALT
- Alternate Xtensa relocations. Only the slot is encoded in the
- relocation. The meaning of these relocations is opcode-specific.
-
- -- : BFD_RELOC_XTENSA_OP0
- -- : BFD_RELOC_XTENSA_OP1
- -- : BFD_RELOC_XTENSA_OP2
- Xtensa relocations for backward compatibility. These have all been
- replaced by BFD_RELOC_XTENSA_SLOT0_OP.
-
- -- : BFD_RELOC_XTENSA_ASM_EXPAND
- Xtensa relocation to mark that the assembler expanded the
- instructions from an original target. The expansion size is
- encoded in the reloc size.
-
- -- : BFD_RELOC_XTENSA_ASM_SIMPLIFY
- Xtensa relocation to mark that the linker should simplify
- assembler-expanded instructions. This is commonly used internally
- by the linker after analysis of a BFD_RELOC_XTENSA_ASM_EXPAND.
-
- -- : BFD_RELOC_Z80_DISP8
- 8 bit signed offset in (ix+d) or (iy+d).
-
- -- : BFD_RELOC_Z8K_DISP7
- DJNZ offset.
-
- -- : BFD_RELOC_Z8K_CALLR
- CALR offset.
-
- -- : BFD_RELOC_Z8K_IMM4L
- 4 bit value.
-
-
- typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
-
-2.10.2.2 `bfd_reloc_type_lookup'
-................................
-
-*Synopsis*
- reloc_howto_type *bfd_reloc_type_lookup
- (bfd *abfd, bfd_reloc_code_real_type code);
- *Description*
-Return a pointer to a howto structure which, when invoked, will perform
-the relocation CODE on data from the architecture noted.
-
-2.10.2.3 `bfd_default_reloc_type_lookup'
-........................................
-
-*Synopsis*
- reloc_howto_type *bfd_default_reloc_type_lookup
- (bfd *abfd, bfd_reloc_code_real_type code);
- *Description*
-Provides a default relocation lookup routine for any architecture.
-
-2.10.2.4 `bfd_get_reloc_code_name'
-..................................
-
-*Synopsis*
- const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
- *Description*
-Provides a printable name for the supplied relocation code. Useful
-mainly for printing error messages.
-
-2.10.2.5 `bfd_generic_relax_section'
-....................................
-
-*Synopsis*
- bfd_boolean bfd_generic_relax_section
- (bfd *abfd,
- asection *section,
- struct bfd_link_info *,
- bfd_boolean *);
- *Description*
-Provides default handling for relaxing for back ends which don't do
-relaxing.
-
-2.10.2.6 `bfd_generic_gc_sections'
-..................................
-
-*Synopsis*
- bfd_boolean bfd_generic_gc_sections
- (bfd *, struct bfd_link_info *);
- *Description*
-Provides default handling for relaxing for back ends which don't do
-section gc - i.e., does nothing.
-
-2.10.2.7 `bfd_generic_merge_sections'
-.....................................
-
-*Synopsis*
- bfd_boolean bfd_generic_merge_sections
- (bfd *, struct bfd_link_info *);
- *Description*
-Provides default handling for SEC_MERGE section merging for back ends
-which don't have SEC_MERGE support - i.e., does nothing.
-
-2.10.2.8 `bfd_generic_get_relocated_section_contents'
-.....................................................
-
-*Synopsis*
- bfd_byte *bfd_generic_get_relocated_section_contents
- (bfd *abfd,
- struct bfd_link_info *link_info,
- struct bfd_link_order *link_order,
- bfd_byte *data,
- bfd_boolean relocatable,
- asymbol **symbols);
- *Description*
-Provides default handling of relocation effort for back ends which
-can't be bothered to do it efficiently.
-
-
-File: bfd.info, Node: Core Files, Next: Targets, Prev: Relocations, Up: BFD front end
-
-2.11 Core files
-===============
-
-2.11.1 Core file functions
---------------------------
-
-*Description*
-These are functions pertaining to core files.
-
-2.11.1.1 `bfd_core_file_failing_command'
-........................................
-
-*Synopsis*
- const char *bfd_core_file_failing_command (bfd *abfd);
- *Description*
-Return a read-only string explaining which program was running when it
-failed and produced the core file ABFD.
-
-2.11.1.2 `bfd_core_file_failing_signal'
-.......................................
-
-*Synopsis*
- int bfd_core_file_failing_signal (bfd *abfd);
- *Description*
-Returns the signal number which caused the core dump which generated
-the file the BFD ABFD is attached to.
-
-2.11.1.3 `core_file_matches_executable_p'
-.........................................
-
-*Synopsis*
- bfd_boolean core_file_matches_executable_p
- (bfd *core_bfd, bfd *exec_bfd);
- *Description*
-Return `TRUE' if the core file attached to CORE_BFD was generated by a
-run of the executable file attached to EXEC_BFD, `FALSE' otherwise.
-
-2.11.1.4 `generic_core_file_matches_executable_p'
-.................................................
-
-*Synopsis*
- bfd_boolean generic_core_file_matches_executable_p
- (bfd *core_bfd, bfd *exec_bfd);
- *Description*
-Return TRUE if the core file attached to CORE_BFD was generated by a
-run of the executable file attached to EXEC_BFD. The match is based on
-executable basenames only.
-
- Note: When not able to determine the core file failing command or
-the executable name, we still return TRUE even though we're not sure
-that core file and executable match. This is to avoid generating a
-false warning in situations where we really don't know whether they
-match or not.
-
-
-File: bfd.info, Node: Targets, Next: Architectures, Prev: Core Files, Up: BFD front end
-
-2.12 Targets
-============
-
-*Description*
-Each port of BFD to a different machine requires the creation of a
-target back end. All the back end provides to the root part of BFD is a
-structure containing pointers to functions which perform certain low
-level operations on files. BFD translates the applications's requests
-through a pointer into calls to the back end routines.
-
- When a file is opened with `bfd_openr', its format and target are
-unknown. BFD uses various mechanisms to determine how to interpret the
-file. The operations performed are:
-
- * Create a BFD by calling the internal routine `_bfd_new_bfd', then
- call `bfd_find_target' with the target string supplied to
- `bfd_openr' and the new BFD pointer.
-
- * If a null target string was provided to `bfd_find_target', look up
- the environment variable `GNUTARGET' and use that as the target
- string.
-
- * If the target string is still `NULL', or the target string is
- `default', then use the first item in the target vector as the
- target type, and set `target_defaulted' in the BFD to cause
- `bfd_check_format' to loop through all the targets. *Note
- bfd_target::. *Note Formats::.
-
- * Otherwise, inspect the elements in the target vector one by one,
- until a match on target name is found. When found, use it.
-
- * Otherwise return the error `bfd_error_invalid_target' to
- `bfd_openr'.
-
- * `bfd_openr' attempts to open the file using `bfd_open_file', and
- returns the BFD.
- Once the BFD has been opened and the target selected, the file
-format may be determined. This is done by calling `bfd_check_format' on
-the BFD with a suggested format. If `target_defaulted' has been set,
-each possible target type is tried to see if it recognizes the
-specified format. `bfd_check_format' returns `TRUE' when the caller
-guesses right.
-
-* Menu:
-
-* bfd_target::
-
-
-File: bfd.info, Node: bfd_target, Prev: Targets, Up: Targets
-
-2.12.1 bfd_target
------------------
-
-*Description*
-This structure contains everything that BFD knows about a target. It
-includes things like its byte order, name, and which routines to call
-to do various operations.
-
- Every BFD points to a target structure with its `xvec' member.
-
- The macros below are used to dispatch to functions through the
-`bfd_target' vector. They are used in a number of macros further down
-in `bfd.h', and are also used when calling various routines by hand
-inside the BFD implementation. The ARGLIST argument must be
-parenthesized; it contains all the arguments to the called function.
-
- They make the documentation (more) unpleasant to read, so if someone
-wants to fix this and not break the above, please do.
- #define BFD_SEND(bfd, message, arglist) \
- ((*((bfd)->xvec->message)) arglist)
-
- #ifdef DEBUG_BFD_SEND
- #undef BFD_SEND
- #define BFD_SEND(bfd, message, arglist) \
- (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
- ((*((bfd)->xvec->message)) arglist) : \
- (bfd_assert (__FILE__,__LINE__), NULL))
- #endif
- For operations which index on the BFD format:
- #define BFD_SEND_FMT(bfd, message, arglist) \
- (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist)
-
- #ifdef DEBUG_BFD_SEND
- #undef BFD_SEND_FMT
- #define BFD_SEND_FMT(bfd, message, arglist) \
- (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
- (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \
- (bfd_assert (__FILE__,__LINE__), NULL))
- #endif
- This is the structure which defines the type of BFD this is. The
-`xvec' member of the struct `bfd' itself points here. Each module that
-implements access to a different target under BFD, defines one of these.
-
- FIXME, these names should be rationalised with the names of the
-entry points which call them. Too bad we can't have one macro to define
-them both!
- enum bfd_flavour
- {
- bfd_target_unknown_flavour,
- bfd_target_aout_flavour,
- bfd_target_coff_flavour,
- bfd_target_ecoff_flavour,
- bfd_target_xcoff_flavour,
- bfd_target_elf_flavour,
- bfd_target_ieee_flavour,
- bfd_target_nlm_flavour,
- bfd_target_oasys_flavour,
- bfd_target_tekhex_flavour,
- bfd_target_srec_flavour,
- bfd_target_ihex_flavour,
- bfd_target_som_flavour,
- bfd_target_os9k_flavour,
- bfd_target_versados_flavour,
- bfd_target_msdos_flavour,
- bfd_target_ovax_flavour,
- bfd_target_evax_flavour,
- bfd_target_mmo_flavour,
- bfd_target_mach_o_flavour,
- bfd_target_pef_flavour,
- bfd_target_pef_xlib_flavour,
- bfd_target_sym_flavour
- };
-
- enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN };
-
- /* Forward declaration. */
- typedef struct bfd_link_info _bfd_link_info;
-
- typedef struct bfd_target
- {
- /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. */
- char *name;
-
- /* The "flavour" of a back end is a general indication about
- the contents of a file. */
- enum bfd_flavour flavour;
-
- /* The order of bytes within the data area of a file. */
- enum bfd_endian byteorder;
-
- /* The order of bytes within the header parts of a file. */
- enum bfd_endian header_byteorder;
-
- /* A mask of all the flags which an executable may have set -
- from the set `BFD_NO_FLAGS', `HAS_RELOC', ...`D_PAGED'. */
- flagword object_flags;
-
- /* A mask of all the flags which a section may have set - from
- the set `SEC_NO_FLAGS', `SEC_ALLOC', ...`SET_NEVER_LOAD'. */
- flagword section_flags;
-
- /* The character normally found at the front of a symbol.
- (if any), perhaps `_'. */
- char symbol_leading_char;
-
- /* The pad character for file names within an archive header. */
- char ar_pad_char;
-
- /* The maximum number of characters in an archive header. */
- unsigned short ar_max_namelen;
-
- /* Entries for byte swapping for data. These are different from the
- other entry points, since they don't take a BFD as the first argument.
- Certain other handlers could do the same. */
- bfd_uint64_t (*bfd_getx64) (const void *);
- bfd_int64_t (*bfd_getx_signed_64) (const void *);
- void (*bfd_putx64) (bfd_uint64_t, void *);
- bfd_vma (*bfd_getx32) (const void *);
- bfd_signed_vma (*bfd_getx_signed_32) (const void *);
- void (*bfd_putx32) (bfd_vma, void *);
- bfd_vma (*bfd_getx16) (const void *);
- bfd_signed_vma (*bfd_getx_signed_16) (const void *);
- void (*bfd_putx16) (bfd_vma, void *);
-
- /* Byte swapping for the headers. */
- bfd_uint64_t (*bfd_h_getx64) (const void *);
- bfd_int64_t (*bfd_h_getx_signed_64) (const void *);
- void (*bfd_h_putx64) (bfd_uint64_t, void *);
- bfd_vma (*bfd_h_getx32) (const void *);
- bfd_signed_vma (*bfd_h_getx_signed_32) (const void *);
- void (*bfd_h_putx32) (bfd_vma, void *);
- bfd_vma (*bfd_h_getx16) (const void *);
- bfd_signed_vma (*bfd_h_getx_signed_16) (const void *);
- void (*bfd_h_putx16) (bfd_vma, void *);
-
- /* Format dependent routines: these are vectors of entry points
- within the target vector structure, one for each format to check. */
-
- /* Check the format of a file being read. Return a `bfd_target *' or zero. */
- const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *);
-
- /* Set the format of a file being written. */
- bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);
-
- /* Write cached information into a file being written, at `bfd_close'. */
- bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *);
- The general target vector. These vectors are initialized using the
-BFD_JUMP_TABLE macros.
-
- /* Generic entry points. */
- #define BFD_JUMP_TABLE_GENERIC(NAME) \
- NAME##_close_and_cleanup, \
- NAME##_bfd_free_cached_info, \
- NAME##_new_section_hook, \
- NAME##_get_section_contents, \
- NAME##_get_section_contents_in_window
-
- /* Called when the BFD is being closed to do any necessary cleanup. */
- bfd_boolean (*_close_and_cleanup) (bfd *);
- /* Ask the BFD to free all cached information. */
- bfd_boolean (*_bfd_free_cached_info) (bfd *);
- /* Called when a new section is created. */
- bfd_boolean (*_new_section_hook) (bfd *, sec_ptr);
- /* Read the contents of a section. */
- bfd_boolean (*_bfd_get_section_contents)
- (bfd *, sec_ptr, void *, file_ptr, bfd_size_type);
- bfd_boolean (*_bfd_get_section_contents_in_window)
- (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type);
-
- /* Entry points to copy private data. */
- #define BFD_JUMP_TABLE_COPY(NAME) \
- NAME##_bfd_copy_private_bfd_data, \
- NAME##_bfd_merge_private_bfd_data, \
- _bfd_generic_init_private_section_data, \
- NAME##_bfd_copy_private_section_data, \
- NAME##_bfd_copy_private_symbol_data, \
- NAME##_bfd_copy_private_header_data, \
- NAME##_bfd_set_private_flags, \
- NAME##_bfd_print_private_bfd_data
-
- /* Called to copy BFD general private data from one object file
- to another. */
- bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
- /* Called to merge BFD general private data from one object file
- to a common output file when linking. */
- bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, bfd *);
- /* Called to initialize BFD private section data from one object file
- to another. */
- #define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
- BFD_SEND (obfd, _bfd_init_private_section_data, (ibfd, isec, obfd, osec, link_info))
- bfd_boolean (*_bfd_init_private_section_data)
- (bfd *, sec_ptr, bfd *, sec_ptr, struct bfd_link_info *);
- /* Called to copy BFD private section data from one object file
- to another. */
- bfd_boolean (*_bfd_copy_private_section_data)
- (bfd *, sec_ptr, bfd *, sec_ptr);
- /* Called to copy BFD private symbol data from one symbol
- to another. */
- bfd_boolean (*_bfd_copy_private_symbol_data)
- (bfd *, asymbol *, bfd *, asymbol *);
- /* Called to copy BFD private header data from one object file
- to another. */
- bfd_boolean (*_bfd_copy_private_header_data)
- (bfd *, bfd *);
- /* Called to set private backend flags. */
- bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword);
-
- /* Called to print private BFD data. */
- bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *);
-
- /* Core file entry points. */
- #define BFD_JUMP_TABLE_CORE(NAME) \
- NAME##_core_file_failing_command, \
- NAME##_core_file_failing_signal, \
- NAME##_core_file_matches_executable_p
-
- char * (*_core_file_failing_command) (bfd *);
- int (*_core_file_failing_signal) (bfd *);
- bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *);
-
- /* Archive entry points. */
- #define BFD_JUMP_TABLE_ARCHIVE(NAME) \
- NAME##_slurp_armap, \
- NAME##_slurp_extended_name_table, \
- NAME##_construct_extended_name_table, \
- NAME##_truncate_arname, \
- NAME##_write_armap, \
- NAME##_read_ar_hdr, \
- NAME##_openr_next_archived_file, \
- NAME##_get_elt_at_index, \
- NAME##_generic_stat_arch_elt, \
- NAME##_update_armap_timestamp
-
- bfd_boolean (*_bfd_slurp_armap) (bfd *);
- bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *);
- bfd_boolean (*_bfd_construct_extended_name_table)
- (bfd *, char **, bfd_size_type *, const char **);
- void (*_bfd_truncate_arname) (bfd *, const char *, char *);
- bfd_boolean (*write_armap)
- (bfd *, unsigned int, struct orl *, unsigned int, int);
- void * (*_bfd_read_ar_hdr_fn) (bfd *);
- bfd * (*openr_next_archived_file) (bfd *, bfd *);
- #define bfd_get_elt_at_index(b,i) BFD_SEND (b, _bfd_get_elt_at_index, (b,i))
- bfd * (*_bfd_get_elt_at_index) (bfd *, symindex);
- int (*_bfd_stat_arch_elt) (bfd *, struct stat *);
- bfd_boolean (*_bfd_update_armap_timestamp) (bfd *);
-
- /* Entry points used for symbols. */
- #define BFD_JUMP_TABLE_SYMBOLS(NAME) \
- NAME##_get_symtab_upper_bound, \
- NAME##_canonicalize_symtab, \
- NAME##_make_empty_symbol, \
- NAME##_print_symbol, \
- NAME##_get_symbol_info, \
- NAME##_bfd_is_local_label_name, \
- NAME##_bfd_is_target_special_symbol, \
- NAME##_get_lineno, \
- NAME##_find_nearest_line, \
- _bfd_generic_find_line, \
- NAME##_find_inliner_info, \
- NAME##_bfd_make_debug_symbol, \
- NAME##_read_minisymbols, \
- NAME##_minisymbol_to_symbol
-
- long (*_bfd_get_symtab_upper_bound) (bfd *);
- long (*_bfd_canonicalize_symtab)
- (bfd *, struct bfd_symbol **);
- struct bfd_symbol *
- (*_bfd_make_empty_symbol) (bfd *);
- void (*_bfd_print_symbol)
- (bfd *, void *, struct bfd_symbol *, bfd_print_symbol_type);
- #define bfd_print_symbol(b,p,s,e) BFD_SEND (b, _bfd_print_symbol, (b,p,s,e))
- void (*_bfd_get_symbol_info)
- (bfd *, struct bfd_symbol *, symbol_info *);
- #define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
- bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
- bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
- alent * (*_get_lineno) (bfd *, struct bfd_symbol *);
- bfd_boolean (*_bfd_find_nearest_line)
- (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma,
- const char **, const char **, unsigned int *);
- bfd_boolean (*_bfd_find_line)
- (bfd *, struct bfd_symbol **, struct bfd_symbol *,
- const char **, unsigned int *);
- bfd_boolean (*_bfd_find_inliner_info)
- (bfd *, const char **, const char **, unsigned int *);
- /* Back-door to allow format-aware applications to create debug symbols
- while using BFD for everything else. Currently used by the assembler
- when creating COFF files. */
- asymbol * (*_bfd_make_debug_symbol)
- (bfd *, void *, unsigned long size);
- #define bfd_read_minisymbols(b, d, m, s) \
- BFD_SEND (b, _read_minisymbols, (b, d, m, s))
- long (*_read_minisymbols)
- (bfd *, bfd_boolean, void **, unsigned int *);
- #define bfd_minisymbol_to_symbol(b, d, m, f) \
- BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
- asymbol * (*_minisymbol_to_symbol)
- (bfd *, bfd_boolean, const void *, asymbol *);
-
- /* Routines for relocs. */
- #define BFD_JUMP_TABLE_RELOCS(NAME) \
- NAME##_get_reloc_upper_bound, \
- NAME##_canonicalize_reloc, \
- NAME##_bfd_reloc_type_lookup
-
- long (*_get_reloc_upper_bound) (bfd *, sec_ptr);
- long (*_bfd_canonicalize_reloc)
- (bfd *, sec_ptr, arelent **, struct bfd_symbol **);
- /* See documentation on reloc types. */
- reloc_howto_type *
- (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
-
- /* Routines used when writing an object file. */
- #define BFD_JUMP_TABLE_WRITE(NAME) \
- NAME##_set_arch_mach, \
- NAME##_set_section_contents
-
- bfd_boolean (*_bfd_set_arch_mach)
- (bfd *, enum bfd_architecture, unsigned long);
- bfd_boolean (*_bfd_set_section_contents)
- (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type);
-
- /* Routines used by the linker. */
- #define BFD_JUMP_TABLE_LINK(NAME) \
- NAME##_sizeof_headers, \
- NAME##_bfd_get_relocated_section_contents, \
- NAME##_bfd_relax_section, \
- NAME##_bfd_link_hash_table_create, \
- NAME##_bfd_link_hash_table_free, \
- NAME##_bfd_link_add_symbols, \
- NAME##_bfd_link_just_syms, \
- NAME##_bfd_final_link, \
- NAME##_bfd_link_split_section, \
- NAME##_bfd_gc_sections, \
- NAME##_bfd_merge_sections, \
- NAME##_bfd_is_group_section, \
- NAME##_bfd_discard_group, \
- NAME##_section_already_linked \
-
- int (*_bfd_sizeof_headers) (bfd *, bfd_boolean);
- bfd_byte * (*_bfd_get_relocated_section_contents)
- (bfd *, struct bfd_link_info *, struct bfd_link_order *,
- bfd_byte *, bfd_boolean, struct bfd_symbol **);
-
- bfd_boolean (*_bfd_relax_section)
- (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *);
-
- /* Create a hash table for the linker. Different backends store
- different information in this table. */
- struct bfd_link_hash_table *
- (*_bfd_link_hash_table_create) (bfd *);
-
- /* Release the memory associated with the linker hash table. */
- void (*_bfd_link_hash_table_free) (struct bfd_link_hash_table *);
-
- /* Add symbols from this object file into the hash table. */
- bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
-
- /* Indicate that we are only retrieving symbol values from this section. */
- void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
-
- /* Do a link based on the link_order structures attached to each
- section of the BFD. */
- bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);
-
- /* Should this section be split up into smaller pieces during linking. */
- bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *);
-
- /* Remove sections that are not referenced from the output. */
- bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
-
- /* Attempt to merge SEC_MERGE sections. */
- bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
-
- /* Is this section a member of a group? */
- bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
-
- /* Discard members of a group. */
- bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *);
-
- /* Check if SEC has been already linked during a reloceatable or
- final link. */
- void (*_section_already_linked) (bfd *, struct bfd_section *);
-
- /* Routines to handle dynamic symbols and relocs. */
- #define BFD_JUMP_TABLE_DYNAMIC(NAME) \
- NAME##_get_dynamic_symtab_upper_bound, \
- NAME##_canonicalize_dynamic_symtab, \
- NAME##_get_synthetic_symtab, \
- NAME##_get_dynamic_reloc_upper_bound, \
- NAME##_canonicalize_dynamic_reloc
-
- /* Get the amount of memory required to hold the dynamic symbols. */
- long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
- /* Read in the dynamic symbols. */
- long (*_bfd_canonicalize_dynamic_symtab)
- (bfd *, struct bfd_symbol **);
- /* Create synthetized symbols. */
- long (*_bfd_get_synthetic_symtab)
- (bfd *, long, struct bfd_symbol **, long, struct bfd_symbol **,
- struct bfd_symbol **);
- /* Get the amount of memory required to hold the dynamic relocs. */
- long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
- /* Read in the dynamic relocs. */
- long (*_bfd_canonicalize_dynamic_reloc)
- (bfd *, arelent **, struct bfd_symbol **);
- A pointer to an alternative bfd_target in case the current one is not
-satisfactory. This can happen when the target cpu supports both big
-and little endian code, and target chosen by the linker has the wrong
-endianness. The function open_output() in ld/ldlang.c uses this field
-to find an alternative output format that is suitable.
- /* Opposite endian version of this target. */
- const struct bfd_target * alternative_target;
-
- /* Data for use by back-end routines, which isn't
- generic enough to belong in this structure. */
- const void *backend_data;
-
- } bfd_target;
-
-2.12.1.1 `bfd_set_default_target'
-.................................
-
-*Synopsis*
- bfd_boolean bfd_set_default_target (const char *name);
- *Description*
-Set the default target vector to use when recognizing a BFD. This
-takes the name of the target, which may be a BFD target name or a
-configuration triplet.
-
-2.12.1.2 `bfd_find_target'
-..........................
-
-*Synopsis*
- const bfd_target *bfd_find_target (const char *target_name, bfd *abfd);
- *Description*
-Return a pointer to the transfer vector for the object target named
-TARGET_NAME. If TARGET_NAME is `NULL', choose the one in the
-environment variable `GNUTARGET'; if that is null or not defined, then
-choose the first entry in the target list. Passing in the string
-"default" or setting the environment variable to "default" will cause
-the first entry in the target list to be returned, and
-"target_defaulted" will be set in the BFD. This causes
-`bfd_check_format' to loop over all the targets to find the one that
-matches the file being read.
-
-2.12.1.3 `bfd_target_list'
-..........................
-
-*Synopsis*
- const char ** bfd_target_list (void);
- *Description*
-Return a freshly malloced NULL-terminated vector of the names of all
-the valid BFD targets. Do not modify the names.
-
-2.12.1.4 `bfd_seach_for_target'
-...............................
-
-*Synopsis*
- const bfd_target *bfd_search_for_target
- (int (*search_func) (const bfd_target *, void *),
- void *);
- *Description*
-Return a pointer to the first transfer vector in the list of transfer
-vectors maintained by BFD that produces a non-zero result when passed
-to the function SEARCH_FUNC. The parameter DATA is passed, unexamined,
-to the search function.
-
-
-File: bfd.info, Node: Architectures, Next: Opening and Closing, Prev: Targets, Up: BFD front end
-
-2.13 Architectures
-==================
-
-BFD keeps one atom in a BFD describing the architecture of the data
-attached to the BFD: a pointer to a `bfd_arch_info_type'.
-
- Pointers to structures can be requested independently of a BFD so
-that an architecture's information can be interrogated without access
-to an open BFD.
-
- The architecture information is provided by each architecture
-package. The set of default architectures is selected by the macro
-`SELECT_ARCHITECTURES'. This is normally set up in the
-`config/TARGET.mt' file of your choice. If the name is not defined,
-then all the architectures supported are included.
-
- When BFD starts up, all the architectures are called with an
-initialize method. It is up to the architecture back end to insert as
-many items into the list of architectures as it wants to; generally
-this would be one for each machine and one for the default case (an
-item with a machine field of 0).
-
- BFD's idea of an architecture is implemented in `archures.c'.
-
-2.13.1 bfd_architecture
------------------------
-
-*Description*
-This enum gives the object file's CPU architecture, in a global
-sense--i.e., what processor family does it belong to? Another field
-indicates which processor within the family is in use. The machine
-gives a number which distinguishes different versions of the
-architecture, containing, for example, 2 and 3 for Intel i960 KA and
-i960 KB, and 68020 and 68030 for Motorola 68020 and 68030.
- enum bfd_architecture
- {
- bfd_arch_unknown, /* File arch not known. */
- bfd_arch_obscure, /* Arch known, not one of these. */
- bfd_arch_m68k, /* Motorola 68xxx */
- #define bfd_mach_m68000 1
- #define bfd_mach_m68008 2
- #define bfd_mach_m68010 3
- #define bfd_mach_m68020 4
- #define bfd_mach_m68030 5
- #define bfd_mach_m68040 6
- #define bfd_mach_m68060 7
- #define bfd_mach_cpu32 8
- #define bfd_mach_mcf_isa_a_nodiv 9
- #define bfd_mach_mcf_isa_a 10
- #define bfd_mach_mcf_isa_a_mac 11
- #define bfd_mach_mcf_isa_a_emac 12
- #define bfd_mach_mcf_isa_aplus 13
- #define bfd_mach_mcf_isa_aplus_mac 14
- #define bfd_mach_mcf_isa_aplus_emac 15
- #define bfd_mach_mcf_isa_b_nousp 16
- #define bfd_mach_mcf_isa_b_nousp_mac 17
- #define bfd_mach_mcf_isa_b_nousp_emac 18
- #define bfd_mach_mcf_isa_b 19
- #define bfd_mach_mcf_isa_b_mac 20
- #define bfd_mach_mcf_isa_b_emac 21
- #define bfd_mach_mcf_isa_b_float 22
- #define bfd_mach_mcf_isa_b_float_mac 23
- #define bfd_mach_mcf_isa_b_float_emac 24
- bfd_arch_vax, /* DEC Vax */
- bfd_arch_i960, /* Intel 960 */
- /* The order of the following is important.
- lower number indicates a machine type that
- only accepts a subset of the instructions
- available to machines with higher numbers.
- The exception is the "ca", which is
- incompatible with all other machines except
- "core". */
-
- #define bfd_mach_i960_core 1
- #define bfd_mach_i960_ka_sa 2
- #define bfd_mach_i960_kb_sb 3
- #define bfd_mach_i960_mc 4
- #define bfd_mach_i960_xa 5
- #define bfd_mach_i960_ca 6
- #define bfd_mach_i960_jx 7
- #define bfd_mach_i960_hx 8
-
- bfd_arch_or32, /* OpenRISC 32 */
-
- bfd_arch_sparc, /* SPARC */
- #define bfd_mach_sparc 1
- /* The difference between v8plus and v9 is that v9 is a true 64 bit env. */
- #define bfd_mach_sparc_sparclet 2
- #define bfd_mach_sparc_sparclite 3
- #define bfd_mach_sparc_v8plus 4
- #define bfd_mach_sparc_v8plusa 5 /* with ultrasparc add'ns. */
- #define bfd_mach_sparc_sparclite_le 6
- #define bfd_mach_sparc_v9 7
- #define bfd_mach_sparc_v9a 8 /* with ultrasparc add'ns. */
- #define bfd_mach_sparc_v8plusb 9 /* with cheetah add'ns. */
- #define bfd_mach_sparc_v9b 10 /* with cheetah add'ns. */
- /* Nonzero if MACH has the v9 instruction set. */
- #define bfd_mach_sparc_v9_p(mach) \
- ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \
- && (mach) != bfd_mach_sparc_sparclite_le)
- /* Nonzero if MACH is a 64 bit sparc architecture. */
- #define bfd_mach_sparc_64bit_p(mach) \
- ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb)
- bfd_arch_mips, /* MIPS Rxxxx */
- #define bfd_mach_mips3000 3000
- #define bfd_mach_mips3900 3900
- #define bfd_mach_mips4000 4000
- #define bfd_mach_mips4010 4010
- #define bfd_mach_mips4100 4100
- #define bfd_mach_mips4111 4111
- #define bfd_mach_mips4120 4120
- #define bfd_mach_mips4300 4300
- #define bfd_mach_mips4400 4400
- #define bfd_mach_mips4600 4600
- #define bfd_mach_mips4650 4650
- #define bfd_mach_mips5000 5000
- #define bfd_mach_mips5400 5400
- #define bfd_mach_mips5500 5500
- #define bfd_mach_mips6000 6000
- #define bfd_mach_mips7000 7000
- #define bfd_mach_mips8000 8000
- #define bfd_mach_mips9000 9000
- #define bfd_mach_mips10000 10000
- #define bfd_mach_mips12000 12000
- #define bfd_mach_mips16 16
- #define bfd_mach_mips5 5
- #define bfd_mach_mips_sb1 12310201 /* octal 'SB', 01 */
- #define bfd_mach_mipsisa32 32
- #define bfd_mach_mipsisa32r2 33
- #define bfd_mach_mipsisa64 64
- #define bfd_mach_mipsisa64r2 65
- bfd_arch_i386, /* Intel 386 */
- #define bfd_mach_i386_i386 1
- #define bfd_mach_i386_i8086 2
- #define bfd_mach_i386_i386_intel_syntax 3
- #define bfd_mach_x86_64 64
- #define bfd_mach_x86_64_intel_syntax 65
- bfd_arch_we32k, /* AT&T WE32xxx */
- bfd_arch_tahoe, /* CCI/Harris Tahoe */
- bfd_arch_i860, /* Intel 860 */
- bfd_arch_i370, /* IBM 360/370 Mainframes */
- bfd_arch_romp, /* IBM ROMP PC/RT */
- bfd_arch_convex, /* Convex */
- bfd_arch_m88k, /* Motorola 88xxx */
- bfd_arch_m98k, /* Motorola 98xxx */
- bfd_arch_pyramid, /* Pyramid Technology */
- bfd_arch_h8300, /* Renesas H8/300 (formerly Hitachi H8/300) */
- #define bfd_mach_h8300 1
- #define bfd_mach_h8300h 2
- #define bfd_mach_h8300s 3
- #define bfd_mach_h8300hn 4
- #define bfd_mach_h8300sn 5
- #define bfd_mach_h8300sx 6
- #define bfd_mach_h8300sxn 7
- bfd_arch_pdp11, /* DEC PDP-11 */
- bfd_arch_powerpc, /* PowerPC */
- #define bfd_mach_ppc 32
- #define bfd_mach_ppc64 64
- #define bfd_mach_ppc_403 403
- #define bfd_mach_ppc_403gc 4030
- #define bfd_mach_ppc_505 505
- #define bfd_mach_ppc_601 601
- #define bfd_mach_ppc_602 602
- #define bfd_mach_ppc_603 603
- #define bfd_mach_ppc_ec603e 6031
- #define bfd_mach_ppc_604 604
- #define bfd_mach_ppc_620 620
- #define bfd_mach_ppc_630 630
- #define bfd_mach_ppc_750 750
- #define bfd_mach_ppc_860 860
- #define bfd_mach_ppc_a35 35
- #define bfd_mach_ppc_rs64ii 642
- #define bfd_mach_ppc_rs64iii 643
- #define bfd_mach_ppc_7400 7400
- #define bfd_mach_ppc_e500 500
- bfd_arch_rs6000, /* IBM RS/6000 */
- #define bfd_mach_rs6k 6000
- #define bfd_mach_rs6k_rs1 6001
- #define bfd_mach_rs6k_rsc 6003
- #define bfd_mach_rs6k_rs2 6002
- bfd_arch_hppa, /* HP PA RISC */
- #define bfd_mach_hppa10 10
- #define bfd_mach_hppa11 11
- #define bfd_mach_hppa20 20
- #define bfd_mach_hppa20w 25
- bfd_arch_d10v, /* Mitsubishi D10V */
- #define bfd_mach_d10v 1
- #define bfd_mach_d10v_ts2 2
- #define bfd_mach_d10v_ts3 3
- bfd_arch_d30v, /* Mitsubishi D30V */
- bfd_arch_dlx, /* DLX */
- bfd_arch_m68hc11, /* Motorola 68HC11 */
- bfd_arch_m68hc12, /* Motorola 68HC12 */
- #define bfd_mach_m6812_default 0
- #define bfd_mach_m6812 1
- #define bfd_mach_m6812s 2
- bfd_arch_z8k, /* Zilog Z8000 */
- #define bfd_mach_z8001 1
- #define bfd_mach_z8002 2
- bfd_arch_h8500, /* Renesas H8/500 (formerly Hitachi H8/500) */
- bfd_arch_sh, /* Renesas / SuperH SH (formerly Hitachi SH) */
- #define bfd_mach_sh 1
- #define bfd_mach_sh2 0x20
- #define bfd_mach_sh_dsp 0x2d
- #define bfd_mach_sh2a 0x2a
- #define bfd_mach_sh2a_nofpu 0x2b
- #define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1
- #define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2
- #define bfd_mach_sh2a_or_sh4 0x2a3
- #define bfd_mach_sh2a_or_sh3e 0x2a4
- #define bfd_mach_sh2e 0x2e
- #define bfd_mach_sh3 0x30
- #define bfd_mach_sh3_nommu 0x31
- #define bfd_mach_sh3_dsp 0x3d
- #define bfd_mach_sh3e 0x3e
- #define bfd_mach_sh4 0x40
- #define bfd_mach_sh4_nofpu 0x41
- #define bfd_mach_sh4_nommu_nofpu 0x42
- #define bfd_mach_sh4a 0x4a
- #define bfd_mach_sh4a_nofpu 0x4b
- #define bfd_mach_sh4al_dsp 0x4d
- #define bfd_mach_sh5 0x50
- bfd_arch_alpha, /* Dec Alpha */
- #define bfd_mach_alpha_ev4 0x10
- #define bfd_mach_alpha_ev5 0x20
- #define bfd_mach_alpha_ev6 0x30
- bfd_arch_arm, /* Advanced Risc Machines ARM. */
- #define bfd_mach_arm_unknown 0
- #define bfd_mach_arm_2 1
- #define bfd_mach_arm_2a 2
- #define bfd_mach_arm_3 3
- #define bfd_mach_arm_3M 4
- #define bfd_mach_arm_4 5
- #define bfd_mach_arm_4T 6
- #define bfd_mach_arm_5 7
- #define bfd_mach_arm_5T 8
- #define bfd_mach_arm_5TE 9
- #define bfd_mach_arm_XScale 10
- #define bfd_mach_arm_ep9312 11
- #define bfd_mach_arm_iWMMXt 12
- bfd_arch_ns32k, /* National Semiconductors ns32000 */
- bfd_arch_w65, /* WDC 65816 */
- bfd_arch_tic30, /* Texas Instruments TMS320C30 */
- bfd_arch_tic4x, /* Texas Instruments TMS320C3X/4X */
- #define bfd_mach_tic3x 30
- #define bfd_mach_tic4x 40
- bfd_arch_tic54x, /* Texas Instruments TMS320C54X */
- bfd_arch_tic80, /* TI TMS320c80 (MVP) */
- bfd_arch_v850, /* NEC V850 */
- #define bfd_mach_v850 1
- #define bfd_mach_v850e 'E'
- #define bfd_mach_v850e1 '1'
- bfd_arch_arc, /* ARC Cores */
- #define bfd_mach_arc_5 5
- #define bfd_mach_arc_6 6
- #define bfd_mach_arc_7 7
- #define bfd_mach_arc_8 8
- bfd_arch_m32c, /* Renesas M16C/M32C. */
- #define bfd_mach_m16c 0x75
- #define bfd_mach_m32c 0x78
- bfd_arch_m32r, /* Renesas M32R (formerly Mitsubishi M32R/D) */
- #define bfd_mach_m32r 1 /* For backwards compatibility. */
- #define bfd_mach_m32rx 'x'
- #define bfd_mach_m32r2 '2'
- bfd_arch_mn10200, /* Matsushita MN10200 */
- bfd_arch_mn10300, /* Matsushita MN10300 */
- #define bfd_mach_mn10300 300
- #define bfd_mach_am33 330
- #define bfd_mach_am33_2 332
- bfd_arch_fr30,
- #define bfd_mach_fr30 0x46523330
- bfd_arch_frv,
- #define bfd_mach_frv 1
- #define bfd_mach_frvsimple 2
- #define bfd_mach_fr300 300
- #define bfd_mach_fr400 400
- #define bfd_mach_fr450 450
- #define bfd_mach_frvtomcat 499 /* fr500 prototype */
- #define bfd_mach_fr500 500
- #define bfd_mach_fr550 550
- bfd_arch_mcore,
- bfd_arch_ia64, /* HP/Intel ia64 */
- #define bfd_mach_ia64_elf64 64
- #define bfd_mach_ia64_elf32 32
- bfd_arch_ip2k, /* Ubicom IP2K microcontrollers. */
- #define bfd_mach_ip2022 1
- #define bfd_mach_ip2022ext 2
- bfd_arch_iq2000, /* Vitesse IQ2000. */
- #define bfd_mach_iq2000 1
- #define bfd_mach_iq10 2
- bfd_arch_mt,
- #define bfd_mach_ms1 1
- #define bfd_mach_mrisc2 2
- #define bfd_mach_ms2 3
- bfd_arch_pj,
- bfd_arch_avr, /* Atmel AVR microcontrollers. */
- #define bfd_mach_avr1 1
- #define bfd_mach_avr2 2
- #define bfd_mach_avr3 3
- #define bfd_mach_avr4 4
- #define bfd_mach_avr5 5
- bfd_arch_bfin, /* ADI Blackfin */
- #define bfd_mach_bfin 1
- bfd_arch_cr16c, /* National Semiconductor CompactRISC. */
- #define bfd_mach_cr16c 1
- bfd_arch_crx, /* National Semiconductor CRX. */
- #define bfd_mach_crx 1
- bfd_arch_cris, /* Axis CRIS */
- #define bfd_mach_cris_v0_v10 255
- #define bfd_mach_cris_v32 32
- #define bfd_mach_cris_v10_v32 1032
- bfd_arch_s390, /* IBM s390 */
- #define bfd_mach_s390_31 31
- #define bfd_mach_s390_64 64
- bfd_arch_openrisc, /* OpenRISC */
- bfd_arch_mmix, /* Donald Knuth's educational processor. */
- bfd_arch_xstormy16,
- #define bfd_mach_xstormy16 1
- bfd_arch_msp430, /* Texas Instruments MSP430 architecture. */
- #define bfd_mach_msp11 11
- #define bfd_mach_msp110 110
- #define bfd_mach_msp12 12
- #define bfd_mach_msp13 13
- #define bfd_mach_msp14 14
- #define bfd_mach_msp15 15
- #define bfd_mach_msp16 16
- #define bfd_mach_msp21 21
- #define bfd_mach_msp31 31
- #define bfd_mach_msp32 32
- #define bfd_mach_msp33 33
- #define bfd_mach_msp41 41
- #define bfd_mach_msp42 42
- #define bfd_mach_msp43 43
- #define bfd_mach_msp44 44
- bfd_arch_xc16x, /* Infineon's XC16X Series. */
- #define bfd_mach_xc16x 1
- #define bfd_mach_xc16xl 2
- #define bfd_mach_xc16xs 3
- bfd_arch_xtensa, /* Tensilica's Xtensa cores. */
- #define bfd_mach_xtensa 1
- bfd_arch_maxq, /* Dallas MAXQ 10/20 */
- #define bfd_mach_maxq10 10
- #define bfd_mach_maxq20 20
- bfd_arch_z80,
- #define bfd_mach_z80strict 1 /* No undocumented opcodes. */
- #define bfd_mach_z80 3 /* With ixl, ixh, iyl, and iyh. */
- #define bfd_mach_z80full 7 /* All undocumented instructions. */
- #define bfd_mach_r800 11 /* R800: successor with multiplication. */
- bfd_arch_last
- };
-
-2.13.2 bfd_arch_info
---------------------
-
-*Description*
-This structure contains information on architectures for use within BFD.
-
- typedef struct bfd_arch_info
- {
- int bits_per_word;
- int bits_per_address;
- int bits_per_byte;
- enum bfd_architecture arch;
- unsigned long mach;
- const char *arch_name;
- const char *printable_name;
- unsigned int section_align_power;
- /* TRUE if this is the default machine for the architecture.
- The default arch should be the first entry for an arch so that
- all the entries for that arch can be accessed via `next'. */
- bfd_boolean the_default;
- const struct bfd_arch_info * (*compatible)
- (const struct bfd_arch_info *a, const struct bfd_arch_info *b);
-
- bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
-
- const struct bfd_arch_info *next;
- }
- bfd_arch_info_type;
-
-2.13.2.1 `bfd_printable_name'
-.............................
-
-*Synopsis*
- const char *bfd_printable_name (bfd *abfd);
- *Description*
-Return a printable string representing the architecture and machine
-from the pointer to the architecture info structure.
-
-2.13.2.2 `bfd_scan_arch'
-........................
-
-*Synopsis*
- const bfd_arch_info_type *bfd_scan_arch (const char *string);
- *Description*
-Figure out if BFD supports any cpu which could be described with the
-name STRING. Return a pointer to an `arch_info' structure if a machine
-is found, otherwise NULL.
-
-2.13.2.3 `bfd_arch_list'
-........................
-
-*Synopsis*
- const char **bfd_arch_list (void);
- *Description*
-Return a freshly malloced NULL-terminated vector of the names of all
-the valid BFD architectures. Do not modify the names.
-
-2.13.2.4 `bfd_arch_get_compatible'
-..................................
-
-*Synopsis*
- const bfd_arch_info_type *bfd_arch_get_compatible
- (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
- *Description*
-Determine whether two BFDs' architectures and machine types are
-compatible. Calculates the lowest common denominator between the two
-architectures and machine types implied by the BFDs and returns a
-pointer to an `arch_info' structure describing the compatible machine.
-
-2.13.2.5 `bfd_default_arch_struct'
-..................................
-
-*Description*
-The `bfd_default_arch_struct' is an item of `bfd_arch_info_type' which
-has been initialized to a fairly generic state. A BFD starts life by
-pointing to this structure, until the correct back end has determined
-the real architecture of the file.
- extern const bfd_arch_info_type bfd_default_arch_struct;
-
-2.13.2.6 `bfd_set_arch_info'
-............................
-
-*Synopsis*
- void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
- *Description*
-Set the architecture info of ABFD to ARG.
-
-2.13.2.7 `bfd_default_set_arch_mach'
-....................................
-
-*Synopsis*
- bfd_boolean bfd_default_set_arch_mach
- (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
- *Description*
-Set the architecture and machine type in BFD ABFD to ARCH and MACH.
-Find the correct pointer to a structure and insert it into the
-`arch_info' pointer.
-
-2.13.2.8 `bfd_get_arch'
-.......................
-
-*Synopsis*
- enum bfd_architecture bfd_get_arch (bfd *abfd);
- *Description*
-Return the enumerated type which describes the BFD ABFD's architecture.
-
-2.13.2.9 `bfd_get_mach'
-.......................
-
-*Synopsis*
- unsigned long bfd_get_mach (bfd *abfd);
- *Description*
-Return the long type which describes the BFD ABFD's machine.
-
-2.13.2.10 `bfd_arch_bits_per_byte'
-..................................
-
-*Synopsis*
- unsigned int bfd_arch_bits_per_byte (bfd *abfd);
- *Description*
-Return the number of bits in one of the BFD ABFD's architecture's bytes.
-
-2.13.2.11 `bfd_arch_bits_per_address'
-.....................................
-
-*Synopsis*
- unsigned int bfd_arch_bits_per_address (bfd *abfd);
- *Description*
-Return the number of bits in one of the BFD ABFD's architecture's
-addresses.
-
-2.13.2.12 `bfd_default_compatible'
-..................................
-
-*Synopsis*
- const bfd_arch_info_type *bfd_default_compatible
- (const bfd_arch_info_type *a, const bfd_arch_info_type *b);
- *Description*
-The default function for testing for compatibility.
-
-2.13.2.13 `bfd_default_scan'
-............................
-
-*Synopsis*
- bfd_boolean bfd_default_scan
- (const struct bfd_arch_info *info, const char *string);
- *Description*
-The default function for working out whether this is an architecture
-hit and a machine hit.
-
-2.13.2.14 `bfd_get_arch_info'
-.............................
-
-*Synopsis*
- const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
- *Description*
-Return the architecture info struct in ABFD.
-
-2.13.2.15 `bfd_lookup_arch'
-...........................
-
-*Synopsis*
- const bfd_arch_info_type *bfd_lookup_arch
- (enum bfd_architecture arch, unsigned long machine);
- *Description*
-Look for the architecture info structure which matches the arguments
-ARCH and MACHINE. A machine of 0 matches the machine/architecture
-structure which marks itself as the default.
-
-2.13.2.16 `bfd_printable_arch_mach'
-...................................
-
-*Synopsis*
- const char *bfd_printable_arch_mach
- (enum bfd_architecture arch, unsigned long machine);
- *Description*
-Return a printable string representing the architecture and machine
-type.
-
- This routine is depreciated.
-
-2.13.2.17 `bfd_octets_per_byte'
-...............................
-
-*Synopsis*
- unsigned int bfd_octets_per_byte (bfd *abfd);
- *Description*
-Return the number of octets (8-bit quantities) per target byte (minimum
-addressable unit). In most cases, this will be one, but some DSP
-targets have 16, 32, or even 48 bits per byte.
-
-2.13.2.18 `bfd_arch_mach_octets_per_byte'
-.........................................
-
-*Synopsis*
- unsigned int bfd_arch_mach_octets_per_byte
- (enum bfd_architecture arch, unsigned long machine);
- *Description*
-See bfd_octets_per_byte.
-
- This routine is provided for those cases where a bfd * is not
-available
-
-
-File: bfd.info, Node: Opening and Closing, Next: Internal, Prev: Architectures, Up: BFD front end
-
-2.14 Opening and closing BFDs
-=============================
-
-2.14.1 Functions for opening and closing
-----------------------------------------
-
-2.14.1.1 `bfd_fopen'
-....................
-
-*Synopsis*
- bfd *bfd_fopen (const char *filename, const char *target,
- const char *mode, int fd);
- *Description*
-Open the file FILENAME with the target TARGET. Return a pointer to the
-created BFD. If FD is not -1, then `fdopen' is used to open the file;
-otherwise, `fopen' is used. MODE is passed directly to `fopen' or
-`fdopen'.
-
- Calls `bfd_find_target', so TARGET is interpreted as by that
-function.
-
- The new BFD is marked as cacheable iff FD is -1.
-
- If `NULL' is returned then an error has occured. Possible errors
-are `bfd_error_no_memory', `bfd_error_invalid_target' or `system_call'
-error.
-
-2.14.1.2 `bfd_openr'
-....................
-
-*Synopsis*
- bfd *bfd_openr (const char *filename, const char *target);
- *Description*
-Open the file FILENAME (using `fopen') with the target TARGET. Return
-a pointer to the created BFD.
-
- Calls `bfd_find_target', so TARGET is interpreted as by that
-function.
-
- If `NULL' is returned then an error has occured. Possible errors
-are `bfd_error_no_memory', `bfd_error_invalid_target' or `system_call'
-error.
-
-2.14.1.3 `bfd_fdopenr'
-......................
-
-*Synopsis*
- bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
- *Description*
-`bfd_fdopenr' is to `bfd_fopenr' much like `fdopen' is to `fopen'. It
-opens a BFD on a file already described by the FD supplied.
-
- When the file is later `bfd_close'd, the file descriptor will be
-closed. If the caller desires that this file descriptor be cached by
-BFD (opened as needed, closed as needed to free descriptors for other
-opens), with the supplied FD used as an initial file descriptor (but
-subject to closure at any time), call bfd_set_cacheable(bfd, 1) on the
-returned BFD. The default is to assume no caching; the file descriptor
-will remain open until `bfd_close', and will not be affected by BFD
-operations on other files.
-
- Possible errors are `bfd_error_no_memory',
-`bfd_error_invalid_target' and `bfd_error_system_call'.
-
-2.14.1.4 `bfd_openstreamr'
-..........................
-
-*Synopsis*
- bfd *bfd_openstreamr (const char *, const char *, void *);
- *Description*
-Open a BFD for read access on an existing stdio stream. When the BFD
-is passed to `bfd_close', the stream will be closed.
-
-2.14.1.5 `bfd_openr_iovec'
-..........................
-
-*Synopsis*
- bfd *bfd_openr_iovec (const char *filename, const char *target,
- void *(*open) (struct bfd *nbfd,
- void *open_closure),
- void *open_closure,
- file_ptr (*pread) (struct bfd *nbfd,
- void *stream,
- void *buf,
- file_ptr nbytes,
- file_ptr offset),
- int (*close) (struct bfd *nbfd,
- void *stream));
- *Description*
-Create and return a BFD backed by a read-only STREAM. The STREAM is
-created using OPEN, accessed using PREAD and destroyed using CLOSE.
-
- Calls `bfd_find_target', so TARGET is interpreted as by that
-function.
-
- Calls OPEN (which can call `bfd_zalloc' and `bfd_get_filename') to
-obtain the read-only stream backing the BFD. OPEN either succeeds
-returning the non-`NULL' STREAM, or fails returning `NULL' (setting
-`bfd_error').
-
- Calls PREAD to request NBYTES of data from STREAM starting at OFFSET
-(e.g., via a call to `bfd_read'). PREAD either succeeds returning the
-number of bytes read (which can be less than NBYTES when end-of-file),
-or fails returning -1 (setting `bfd_error').
-
- Calls CLOSE when the BFD is later closed using `bfd_close'. CLOSE
-either succeeds returning 0, or fails returning -1 (setting
-`bfd_error').
-
- If `bfd_openr_iovec' returns `NULL' then an error has occurred.
-Possible errors are `bfd_error_no_memory', `bfd_error_invalid_target'
-and `bfd_error_system_call'.
-
-2.14.1.6 `bfd_openw'
-....................
-
-*Synopsis*
- bfd *bfd_openw (const char *filename, const char *target);
- *Description*
-Create a BFD, associated with file FILENAME, using the file format
-TARGET, and return a pointer to it.
-
- Possible errors are `bfd_error_system_call', `bfd_error_no_memory',
-`bfd_error_invalid_target'.
-
-2.14.1.7 `bfd_close'
-....................
-
-*Synopsis*
- bfd_boolean bfd_close (bfd *abfd);
- *Description*
-Close a BFD. If the BFD was open for writing, then pending operations
-are completed and the file written out and closed. If the created file
-is executable, then `chmod' is called to mark it as such.
-
- All memory attached to the BFD is released.
-
- The file descriptor associated with the BFD is closed (even if it
-was passed in to BFD by `bfd_fdopenr').
-
- *Returns*
-`TRUE' is returned if all is ok, otherwise `FALSE'.
-
-2.14.1.8 `bfd_close_all_done'
-.............................
-
-*Synopsis*
- bfd_boolean bfd_close_all_done (bfd *);
- *Description*
-Close a BFD. Differs from `bfd_close' since it does not complete any
-pending operations. This routine would be used if the application had
-just used BFD for swapping and didn't want to use any of the writing
-code.
-
- If the created file is executable, then `chmod' is called to mark it
-as such.
-
- All memory attached to the BFD is released.
-
- *Returns*
-`TRUE' is returned if all is ok, otherwise `FALSE'.
-
-2.14.1.9 `bfd_create'
-.....................
-
-*Synopsis*
- bfd *bfd_create (const char *filename, bfd *templ);
- *Description*
-Create a new BFD in the manner of `bfd_openw', but without opening a
-file. The new BFD takes the target from the target used by TEMPLATE.
-The format is always set to `bfd_object'.
-
-2.14.1.10 `bfd_make_writable'
-.............................
-
-*Synopsis*
- bfd_boolean bfd_make_writable (bfd *abfd);
- *Description*
-Takes a BFD as created by `bfd_create' and converts it into one like as
-returned by `bfd_openw'. It does this by converting the BFD to
-BFD_IN_MEMORY. It's assumed that you will call `bfd_make_readable' on
-this bfd later.
-
- *Returns*
-`TRUE' is returned if all is ok, otherwise `FALSE'.
-
-2.14.1.11 `bfd_make_readable'
-.............................
-
-*Synopsis*
- bfd_boolean bfd_make_readable (bfd *abfd);
- *Description*
-Takes a BFD as created by `bfd_create' and `bfd_make_writable' and
-converts it into one like as returned by `bfd_openr'. It does this by
-writing the contents out to the memory buffer, then reversing the
-direction.
-
- *Returns*
-`TRUE' is returned if all is ok, otherwise `FALSE'.
-
-2.14.1.12 `bfd_alloc'
-.....................
-
-*Synopsis*
- void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
- *Description*
-Allocate a block of WANTED bytes of memory attached to `abfd' and
-return a pointer to it.
-
-2.14.1.13 `bfd_alloc2'
-......................
-
-*Synopsis*
- void *bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
- *Description*
-Allocate a block of NMEMB elements of SIZE bytes each of memory
-attached to `abfd' and return a pointer to it.
-
-2.14.1.14 `bfd_zalloc'
-......................
-
-*Synopsis*
- void *bfd_zalloc (bfd *abfd, bfd_size_type wanted);
- *Description*
-Allocate a block of WANTED bytes of zeroed memory attached to `abfd'
-and return a pointer to it.
-
-2.14.1.15 `bfd_zalloc2'
-.......................
-
-*Synopsis*
- void *bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
- *Description*
-Allocate a block of NMEMB elements of SIZE bytes each of zeroed memory
-attached to `abfd' and return a pointer to it.
-
-2.14.1.16 `bfd_calc_gnu_debuglink_crc32'
-........................................
-
-*Synopsis*
- unsigned long bfd_calc_gnu_debuglink_crc32
- (unsigned long crc, const unsigned char *buf, bfd_size_type len);
- *Description*
-Computes a CRC value as used in the .gnu_debuglink section. Advances
-the previously computed CRC value by computing and adding in the crc32
-for LEN bytes of BUF.
-
- *Returns*
-Return the updated CRC32 value.
-
-2.14.1.17 `get_debug_link_info'
-...............................
-
-*Synopsis*
- char *get_debug_link_info (bfd *abfd, unsigned long *crc32_out);
- *Description*
-fetch the filename and CRC32 value for any separate debuginfo
-associated with ABFD. Return NULL if no such info found, otherwise
-return filename and update CRC32_OUT.
-
-2.14.1.18 `separate_debug_file_exists'
-......................................
-
-*Synopsis*
- bfd_boolean separate_debug_file_exists
- (char *name, unsigned long crc32);
- *Description*
-Checks to see if NAME is a file and if its contents match CRC32.
-
-2.14.1.19 `find_separate_debug_file'
-....................................
-
-*Synopsis*
- char *find_separate_debug_file (bfd *abfd);
- *Description*
-Searches ABFD for a reference to separate debugging information, scans
-various locations in the filesystem, including the file tree rooted at
-DEBUG_FILE_DIRECTORY, and returns a filename of such debugging
-information if the file is found and has matching CRC32. Returns NULL
-if no reference to debugging file exists, or file cannot be found.
-
-2.14.1.20 `bfd_follow_gnu_debuglink'
-....................................
-
-*Synopsis*
- char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
- *Description*
-Takes a BFD and searches it for a .gnu_debuglink section. If this
-section is found, it examines the section for the name and checksum of
-a '.debug' file containing auxiliary debugging information. It then
-searches the filesystem for this .debug file in some standard
-locations, including the directory tree rooted at DIR, and if found
-returns the full filename.
-
- If DIR is NULL, it will search a default path configured into libbfd
-at build time. [XXX this feature is not currently implemented].
-
- *Returns*
-`NULL' on any errors or failure to locate the .debug file, otherwise a
-pointer to a heap-allocated string containing the filename. The caller
-is responsible for freeing this string.
-
-2.14.1.21 `bfd_create_gnu_debuglink_section'
-............................................
-
-*Synopsis*
- struct bfd_section *bfd_create_gnu_debuglink_section
- (bfd *abfd, const char *filename);
- *Description*
-Takes a BFD and adds a .gnu_debuglink section to it. The section is
-sized to be big enough to contain a link to the specified FILENAME.
-
- *Returns*
-A pointer to the new section is returned if all is ok. Otherwise
-`NULL' is returned and bfd_error is set.
-
-2.14.1.22 `bfd_fill_in_gnu_debuglink_section'
-.............................................
-
-*Synopsis*
- bfd_boolean bfd_fill_in_gnu_debuglink_section
- (bfd *abfd, struct bfd_section *sect, const char *filename);
- *Description*
-Takes a BFD and containing a .gnu_debuglink section SECT and fills in
-the contents of the section to contain a link to the specified
-FILENAME. The filename should be relative to the current directory.
-
- *Returns*
-`TRUE' is returned if all is ok. Otherwise `FALSE' is returned and
-bfd_error is set.
-
-
-File: bfd.info, Node: Internal, Next: File Caching, Prev: Opening and Closing, Up: BFD front end
-
-2.15 Implementation details
-===========================
-
-2.15.1 Internal functions
--------------------------
-
-*Description*
-These routines are used within BFD. They are not intended for export,
-but are documented here for completeness.
-
-2.15.1.1 `bfd_write_bigendian_4byte_int'
-........................................
-
-*Synopsis*
- bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int);
- *Description*
-Write a 4 byte integer I to the output BFD ABFD, in big endian order
-regardless of what else is going on. This is useful in archives.
-
-2.15.1.2 `bfd_put_size'
-.......................
-
-2.15.1.3 `bfd_get_size'
-.......................
-
-*Description*
-These macros as used for reading and writing raw data in sections; each
-access (except for bytes) is vectored through the target format of the
-BFD and mangled accordingly. The mangling performs any necessary endian
-translations and removes alignment restrictions. Note that types
-accepted and returned by these macros are identical so they can be
-swapped around in macros--for example, `libaout.h' defines `GET_WORD'
-to either `bfd_get_32' or `bfd_get_64'.
-
- In the put routines, VAL must be a `bfd_vma'. If we are on a system
-without prototypes, the caller is responsible for making sure that is
-true, with a cast if necessary. We don't cast them in the macro
-definitions because that would prevent `lint' or `gcc -Wall' from
-detecting sins such as passing a pointer. To detect calling these with
-less than a `bfd_vma', use `gcc -Wconversion' on a host with 64 bit
-`bfd_vma''s.
-
- /* Byte swapping macros for user section data. */
-
- #define bfd_put_8(abfd, val, ptr) \
- ((void) (*((unsigned char *) (ptr)) = (val) & 0xff))
- #define bfd_put_signed_8 \
- bfd_put_8
- #define bfd_get_8(abfd, ptr) \
- (*(unsigned char *) (ptr) & 0xff)
- #define bfd_get_signed_8(abfd, ptr) \
- (((*(unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
-
- #define bfd_put_16(abfd, val, ptr) \
- BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
- #define bfd_put_signed_16 \
- bfd_put_16
- #define bfd_get_16(abfd, ptr) \
- BFD_SEND (abfd, bfd_getx16, (ptr))
- #define bfd_get_signed_16(abfd, ptr) \
- BFD_SEND (abfd, bfd_getx_signed_16, (ptr))
-
- #define bfd_put_32(abfd, val, ptr) \
- BFD_SEND (abfd, bfd_putx32, ((val),(ptr)))
- #define bfd_put_signed_32 \
- bfd_put_32
- #define bfd_get_32(abfd, ptr) \
- BFD_SEND (abfd, bfd_getx32, (ptr))
- #define bfd_get_signed_32(abfd, ptr) \
- BFD_SEND (abfd, bfd_getx_signed_32, (ptr))
-
- #define bfd_put_64(abfd, val, ptr) \
- BFD_SEND (abfd, bfd_putx64, ((val), (ptr)))
- #define bfd_put_signed_64 \
- bfd_put_64
- #define bfd_get_64(abfd, ptr) \
- BFD_SEND (abfd, bfd_getx64, (ptr))
- #define bfd_get_signed_64(abfd, ptr) \
- BFD_SEND (abfd, bfd_getx_signed_64, (ptr))
-
- #define bfd_get(bits, abfd, ptr) \
- ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr) \
- : (bits) == 16 ? bfd_get_16 (abfd, ptr) \
- : (bits) == 32 ? bfd_get_32 (abfd, ptr) \
- : (bits) == 64 ? bfd_get_64 (abfd, ptr) \
- : (abort (), (bfd_vma) - 1))
-
- #define bfd_put(bits, abfd, val, ptr) \
- ((bits) == 8 ? bfd_put_8 (abfd, val, ptr) \
- : (bits) == 16 ? bfd_put_16 (abfd, val, ptr) \
- : (bits) == 32 ? bfd_put_32 (abfd, val, ptr) \
- : (bits) == 64 ? bfd_put_64 (abfd, val, ptr) \
- : (abort (), (void) 0))
-
-2.15.1.4 `bfd_h_put_size'
-.........................
-
-*Description*
-These macros have the same function as their `bfd_get_x' brethren,
-except that they are used for removing information for the header
-records of object files. Believe it or not, some object files keep
-their header records in big endian order and their data in little
-endian order.
-
- /* Byte swapping macros for file header data. */
-
- #define bfd_h_put_8(abfd, val, ptr) \
- bfd_put_8 (abfd, val, ptr)
- #define bfd_h_put_signed_8(abfd, val, ptr) \
- bfd_put_8 (abfd, val, ptr)
- #define bfd_h_get_8(abfd, ptr) \
- bfd_get_8 (abfd, ptr)
- #define bfd_h_get_signed_8(abfd, ptr) \
- bfd_get_signed_8 (abfd, ptr)
-
- #define bfd_h_put_16(abfd, val, ptr) \
- BFD_SEND (abfd, bfd_h_putx16, (val, ptr))
- #define bfd_h_put_signed_16 \
- bfd_h_put_16
- #define bfd_h_get_16(abfd, ptr) \
- BFD_SEND (abfd, bfd_h_getx16, (ptr))
- #define bfd_h_get_signed_16(abfd, ptr) \
- BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr))
-
- #define bfd_h_put_32(abfd, val, ptr) \
- BFD_SEND (abfd, bfd_h_putx32, (val, ptr))
- #define bfd_h_put_signed_32 \
- bfd_h_put_32
- #define bfd_h_get_32(abfd, ptr) \
- BFD_SEND (abfd, bfd_h_getx32, (ptr))
- #define bfd_h_get_signed_32(abfd, ptr) \
- BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr))
-
- #define bfd_h_put_64(abfd, val, ptr) \
- BFD_SEND (abfd, bfd_h_putx64, (val, ptr))
- #define bfd_h_put_signed_64 \
- bfd_h_put_64
- #define bfd_h_get_64(abfd, ptr) \
- BFD_SEND (abfd, bfd_h_getx64, (ptr))
- #define bfd_h_get_signed_64(abfd, ptr) \
- BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr))
-
- /* Aliases for the above, which should eventually go away. */
-
- #define H_PUT_64 bfd_h_put_64
- #define H_PUT_32 bfd_h_put_32
- #define H_PUT_16 bfd_h_put_16
- #define H_PUT_8 bfd_h_put_8
- #define H_PUT_S64 bfd_h_put_signed_64
- #define H_PUT_S32 bfd_h_put_signed_32
- #define H_PUT_S16 bfd_h_put_signed_16
- #define H_PUT_S8 bfd_h_put_signed_8
- #define H_GET_64 bfd_h_get_64
- #define H_GET_32 bfd_h_get_32
- #define H_GET_16 bfd_h_get_16
- #define H_GET_8 bfd_h_get_8
- #define H_GET_S64 bfd_h_get_signed_64
- #define H_GET_S32 bfd_h_get_signed_32
- #define H_GET_S16 bfd_h_get_signed_16
- #define H_GET_S8 bfd_h_get_signed_8
-
-2.15.1.5 `bfd_log2'
-...................
-
-*Synopsis*
- unsigned int bfd_log2 (bfd_vma x);
- *Description*
-Return the log base 2 of the value supplied, rounded up. E.g., an X of
-1025 returns 11. A X of 0 returns 0.
-
-
-File: bfd.info, Node: File Caching, Next: Linker Functions, Prev: Internal, Up: BFD front end
-
-2.16 File caching
-=================
-
-The file caching mechanism is embedded within BFD and allows the
-application to open as many BFDs as it wants without regard to the
-underlying operating system's file descriptor limit (often as low as 20
-open files). The module in `cache.c' maintains a least recently used
-list of `BFD_CACHE_MAX_OPEN' files, and exports the name
-`bfd_cache_lookup', which runs around and makes sure that the required
-BFD is open. If not, then it chooses a file to close, closes it and
-opens the one wanted, returning its file handle.
-
-2.16.1 Caching functions
-------------------------
-
-2.16.1.1 `bfd_cache_init'
-.........................
-
-*Synopsis*
- bfd_boolean bfd_cache_init (bfd *abfd);
- *Description*
-Add a newly opened BFD to the cache.
-
-2.16.1.2 `bfd_cache_close'
-..........................
-
-*Synopsis*
- bfd_boolean bfd_cache_close (bfd *abfd);
- *Description*
-Remove the BFD ABFD from the cache. If the attached file is open, then
-close it too.
-
- *Returns*
-`FALSE' is returned if closing the file fails, `TRUE' is returned if
-all is well.
-
-2.16.1.3 `bfd_cache_close_all'
-..............................
-
-*Synopsis*
- bfd_boolean bfd_cache_close_all (void);
- *Description*
-Remove all BFDs from the cache. If the attached file is open, then
-close it too.
-
- *Returns*
-`FALSE' is returned if closing one of the file fails, `TRUE' is
-returned if all is well.
-
-2.16.1.4 `bfd_open_file'
-........................
-
-*Synopsis*
- FILE* bfd_open_file (bfd *abfd);
- *Description*
-Call the OS to open a file for ABFD. Return the `FILE *' (possibly
-`NULL') that results from this operation. Set up the BFD so that
-future accesses know the file is open. If the `FILE *' returned is
-`NULL', then it won't have been put in the cache, so it won't have to
-be removed from it.
-
-
-File: bfd.info, Node: Linker Functions, Next: Hash Tables, Prev: File Caching, Up: BFD front end
-
-2.17 Linker Functions
-=====================
-
-The linker uses three special entry points in the BFD target vector.
-It is not necessary to write special routines for these entry points
-when creating a new BFD back end, since generic versions are provided.
-However, writing them can speed up linking and make it use
-significantly less runtime memory.
-
- The first routine creates a hash table used by the other routines.
-The second routine adds the symbols from an object file to the hash
-table. The third routine takes all the object files and links them
-together to create the output file. These routines are designed so
-that the linker proper does not need to know anything about the symbols
-in the object files that it is linking. The linker merely arranges the
-sections as directed by the linker script and lets BFD handle the
-details of symbols and relocs.
-
- The second routine and third routines are passed a pointer to a
-`struct bfd_link_info' structure (defined in `bfdlink.h') which holds
-information relevant to the link, including the linker hash table
-(which was created by the first routine) and a set of callback
-functions to the linker proper.
-
- The generic linker routines are in `linker.c', and use the header
-file `genlink.h'. As of this writing, the only back ends which have
-implemented versions of these routines are a.out (in `aoutx.h') and
-ECOFF (in `ecoff.c'). The a.out routines are used as examples
-throughout this section.
-
-* Menu:
-
-* Creating a Linker Hash Table::
-* Adding Symbols to the Hash Table::
-* Performing the Final Link::
-
-
-File: bfd.info, Node: Creating a Linker Hash Table, Next: Adding Symbols to the Hash Table, Prev: Linker Functions, Up: Linker Functions
-
-2.17.1 Creating a linker hash table
------------------------------------
-
-The linker routines must create a hash table, which must be derived
-from `struct bfd_link_hash_table' described in `bfdlink.c'. *Note Hash
-Tables::, for information on how to create a derived hash table. This
-entry point is called using the target vector of the linker output file.
-
- The `_bfd_link_hash_table_create' entry point must allocate and
-initialize an instance of the desired hash table. If the back end does
-not require any additional information to be stored with the entries in
-the hash table, the entry point may simply create a `struct
-bfd_link_hash_table'. Most likely, however, some additional
-information will be needed.
-
- For example, with each entry in the hash table the a.out linker
-keeps the index the symbol has in the final output file (this index
-number is used so that when doing a relocatable link the symbol index
-used in the output file can be quickly filled in when copying over a
-reloc). The a.out linker code defines the required structures and
-functions for a hash table derived from `struct bfd_link_hash_table'.
-The a.out linker hash table is created by the function
-`NAME(aout,link_hash_table_create)'; it simply allocates space for the
-hash table, initializes it, and returns a pointer to it.
-
- When writing the linker routines for a new back end, you will
-generally not know exactly which fields will be required until you have
-finished. You should simply create a new hash table which defines no
-additional fields, and then simply add fields as they become necessary.
-
-
-File: bfd.info, Node: Adding Symbols to the Hash Table, Next: Performing the Final Link, Prev: Creating a Linker Hash Table, Up: Linker Functions
-
-2.17.2 Adding symbols to the hash table
----------------------------------------
-
-The linker proper will call the `_bfd_link_add_symbols' entry point for
-each object file or archive which is to be linked (typically these are
-the files named on the command line, but some may also come from the
-linker script). The entry point is responsible for examining the file.
-For an object file, BFD must add any relevant symbol information to
-the hash table. For an archive, BFD must determine which elements of
-the archive should be used and adding them to the link.
-
- The a.out version of this entry point is
-`NAME(aout,link_add_symbols)'.
-
-* Menu:
-
-* Differing file formats::
-* Adding symbols from an object file::
-* Adding symbols from an archive::
-
-
-File: bfd.info, Node: Differing file formats, Next: Adding symbols from an object file, Prev: Adding Symbols to the Hash Table, Up: Adding Symbols to the Hash Table
-
-2.17.2.1 Differing file formats
-...............................
-
-Normally all the files involved in a link will be of the same format,
-but it is also possible to link together different format object files,
-and the back end must support that. The `_bfd_link_add_symbols' entry
-point is called via the target vector of the file to be added. This
-has an important consequence: the function may not assume that the hash
-table is the type created by the corresponding
-`_bfd_link_hash_table_create' vector. All the `_bfd_link_add_symbols'
-function can assume about the hash table is that it is derived from
-`struct bfd_link_hash_table'.
-
- Sometimes the `_bfd_link_add_symbols' function must store some
-information in the hash table entry to be used by the `_bfd_final_link'
-function. In such a case the `creator' field of the hash table must be
-checked to make sure that the hash table was created by an object file
-of the same format.
-
- The `_bfd_final_link' routine must be prepared to handle a hash
-entry without any extra information added by the
-`_bfd_link_add_symbols' function. A hash entry without extra
-information will also occur when the linker script directs the linker
-to create a symbol. Note that, regardless of how a hash table entry is
-added, all the fields will be initialized to some sort of null value by
-the hash table entry initialization function.
-
- See `ecoff_link_add_externals' for an example of how to check the
-`creator' field before saving information (in this case, the ECOFF
-external symbol debugging information) in a hash table entry.
-
-
-File: bfd.info, Node: Adding symbols from an object file, Next: Adding symbols from an archive, Prev: Differing file formats, Up: Adding Symbols to the Hash Table
-
-2.17.2.2 Adding symbols from an object file
-...........................................
-
-When the `_bfd_link_add_symbols' routine is passed an object file, it
-must add all externally visible symbols in that object file to the hash
-table. The actual work of adding the symbol to the hash table is
-normally handled by the function `_bfd_generic_link_add_one_symbol'.
-The `_bfd_link_add_symbols' routine is responsible for reading all the
-symbols from the object file and passing the correct information to
-`_bfd_generic_link_add_one_symbol'.
-
- The `_bfd_link_add_symbols' routine should not use
-`bfd_canonicalize_symtab' to read the symbols. The point of providing
-this routine is to avoid the overhead of converting the symbols into
-generic `asymbol' structures.
-
- `_bfd_generic_link_add_one_symbol' handles the details of combining
-common symbols, warning about multiple definitions, and so forth. It
-takes arguments which describe the symbol to add, notably symbol flags,
-a section, and an offset. The symbol flags include such things as
-`BSF_WEAK' or `BSF_INDIRECT'. The section is a section in the object
-file, or something like `bfd_und_section_ptr' for an undefined symbol
-or `bfd_com_section_ptr' for a common symbol.
-
- If the `_bfd_final_link' routine is also going to need to read the
-symbol information, the `_bfd_link_add_symbols' routine should save it
-somewhere attached to the object file BFD. However, the information
-should only be saved if the `keep_memory' field of the `info' argument
-is TRUE, so that the `-no-keep-memory' linker switch is effective.
-
- The a.out function which adds symbols from an object file is
-`aout_link_add_object_symbols', and most of the interesting work is in
-`aout_link_add_symbols'. The latter saves pointers to the hash tables
-entries created by `_bfd_generic_link_add_one_symbol' indexed by symbol
-number, so that the `_bfd_final_link' routine does not have to call the
-hash table lookup routine to locate the entry.
-
-
-File: bfd.info, Node: Adding symbols from an archive, Prev: Adding symbols from an object file, Up: Adding Symbols to the Hash Table
-
-2.17.2.3 Adding symbols from an archive
-.......................................
-
-When the `_bfd_link_add_symbols' routine is passed an archive, it must
-look through the symbols defined by the archive and decide which
-elements of the archive should be included in the link. For each such
-element it must call the `add_archive_element' linker callback, and it
-must add the symbols from the object file to the linker hash table.
-
- In most cases the work of looking through the symbols in the archive
-should be done by the `_bfd_generic_link_add_archive_symbols' function.
-This function builds a hash table from the archive symbol table and
-looks through the list of undefined symbols to see which elements
-should be included. `_bfd_generic_link_add_archive_symbols' is passed
-a function to call to make the final decision about adding an archive
-element to the link and to do the actual work of adding the symbols to
-the linker hash table.
-
- The function passed to `_bfd_generic_link_add_archive_symbols' must
-read the symbols of the archive element and decide whether the archive
-element should be included in the link. If the element is to be
-included, the `add_archive_element' linker callback routine must be
-called with the element as an argument, and the elements symbols must
-be added to the linker hash table just as though the element had itself
-been passed to the `_bfd_link_add_symbols' function.
-
- When the a.out `_bfd_link_add_symbols' function receives an archive,
-it calls `_bfd_generic_link_add_archive_symbols' passing
-`aout_link_check_archive_element' as the function argument.
-`aout_link_check_archive_element' calls `aout_link_check_ar_symbols'.
-If the latter decides to add the element (an element is only added if
-it provides a real, non-common, definition for a previously undefined
-or common symbol) it calls the `add_archive_element' callback and then
-`aout_link_check_archive_element' calls `aout_link_add_symbols' to
-actually add the symbols to the linker hash table.
-
- The ECOFF back end is unusual in that it does not normally call
-`_bfd_generic_link_add_archive_symbols', because ECOFF archives already
-contain a hash table of symbols. The ECOFF back end searches the
-archive itself to avoid the overhead of creating a new hash table.
-
-
-File: bfd.info, Node: Performing the Final Link, Prev: Adding Symbols to the Hash Table, Up: Linker Functions
-
-2.17.3 Performing the final link
---------------------------------
-
-When all the input files have been processed, the linker calls the
-`_bfd_final_link' entry point of the output BFD. This routine is
-responsible for producing the final output file, which has several
-aspects. It must relocate the contents of the input sections and copy
-the data into the output sections. It must build an output symbol
-table including any local symbols from the input files and the global
-symbols from the hash table. When producing relocatable output, it must
-modify the input relocs and write them into the output file. There may
-also be object format dependent work to be done.
-
- The linker will also call the `write_object_contents' entry point
-when the BFD is closed. The two entry points must work together in
-order to produce the correct output file.
-
- The details of how this works are inevitably dependent upon the
-specific object file format. The a.out `_bfd_final_link' routine is
-`NAME(aout,final_link)'.
-
-* Menu:
-
-* Information provided by the linker::
-* Relocating the section contents::
-* Writing the symbol table::
-
-
-File: bfd.info, Node: Information provided by the linker, Next: Relocating the section contents, Prev: Performing the Final Link, Up: Performing the Final Link
-
-2.17.3.1 Information provided by the linker
-...........................................
-
-Before the linker calls the `_bfd_final_link' entry point, it sets up
-some data structures for the function to use.
-
- The `input_bfds' field of the `bfd_link_info' structure will point
-to a list of all the input files included in the link. These files are
-linked through the `link_next' field of the `bfd' structure.
-
- Each section in the output file will have a list of `link_order'
-structures attached to the `map_head.link_order' field (the
-`link_order' structure is defined in `bfdlink.h'). These structures
-describe how to create the contents of the output section in terms of
-the contents of various input sections, fill constants, and,
-eventually, other types of information. They also describe relocs that
-must be created by the BFD backend, but do not correspond to any input
-file; this is used to support -Ur, which builds constructors while
-generating a relocatable object file.
-
-
-File: bfd.info, Node: Relocating the section contents, Next: Writing the symbol table, Prev: Information provided by the linker, Up: Performing the Final Link
-
-2.17.3.2 Relocating the section contents
-........................................
-
-The `_bfd_final_link' function should look through the `link_order'
-structures attached to each section of the output file. Each
-`link_order' structure should either be handled specially, or it should
-be passed to the function `_bfd_default_link_order' which will do the
-right thing (`_bfd_default_link_order' is defined in `linker.c').
-
- For efficiency, a `link_order' of type `bfd_indirect_link_order'
-whose associated section belongs to a BFD of the same format as the
-output BFD must be handled specially. This type of `link_order'
-describes part of an output section in terms of a section belonging to
-one of the input files. The `_bfd_final_link' function should read the
-contents of the section and any associated relocs, apply the relocs to
-the section contents, and write out the modified section contents. If
-performing a relocatable link, the relocs themselves must also be
-modified and written out.
-
- The functions `_bfd_relocate_contents' and
-`_bfd_final_link_relocate' provide some general support for performing
-the actual relocations, notably overflow checking. Their arguments
-include information about the symbol the relocation is against and a
-`reloc_howto_type' argument which describes the relocation to perform.
-These functions are defined in `reloc.c'.
-
- The a.out function which handles reading, relocating, and writing
-section contents is `aout_link_input_section'. The actual relocation
-is done in `aout_link_input_section_std' and
-`aout_link_input_section_ext'.
-
-
-File: bfd.info, Node: Writing the symbol table, Prev: Relocating the section contents, Up: Performing the Final Link
-
-2.17.3.3 Writing the symbol table
-.................................
-
-The `_bfd_final_link' function must gather all the symbols in the input
-files and write them out. It must also write out all the symbols in
-the global hash table. This must be controlled by the `strip' and
-`discard' fields of the `bfd_link_info' structure.
-
- The local symbols of the input files will not have been entered into
-the linker hash table. The `_bfd_final_link' routine must consider
-each input file and include the symbols in the output file. It may be
-convenient to do this when looking through the `link_order' structures,
-or it may be done by stepping through the `input_bfds' list.
-
- The `_bfd_final_link' routine must also traverse the global hash
-table to gather all the externally visible symbols. It is possible
-that most of the externally visible symbols may be written out when
-considering the symbols of each input file, but it is still necessary
-to traverse the hash table since the linker script may have defined
-some symbols that are not in any of the input files.
-
- The `strip' field of the `bfd_link_info' structure controls which
-symbols are written out. The possible values are listed in
-`bfdlink.h'. If the value is `strip_some', then the `keep_hash' field
-of the `bfd_link_info' structure is a hash table of symbols to keep;
-each symbol should be looked up in this hash table, and only symbols
-which are present should be included in the output file.
-
- If the `strip' field of the `bfd_link_info' structure permits local
-symbols to be written out, the `discard' field is used to further
-controls which local symbols are included in the output file. If the
-value is `discard_l', then all local symbols which begin with a certain
-prefix are discarded; this is controlled by the
-`bfd_is_local_label_name' entry point.
-
- The a.out backend handles symbols by calling
-`aout_link_write_symbols' on each input BFD and then traversing the
-global hash table with the function `aout_link_write_other_symbol'. It
-builds a string table while writing out the symbols, which is written
-to the output file at the end of `NAME(aout,final_link)'.
-
-2.17.3.4 `bfd_link_split_section'
-.................................
-
-*Synopsis*
- bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
- *Description*
-Return nonzero if SEC should be split during a reloceatable or final
-link.
- #define bfd_link_split_section(abfd, sec) \
- BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
-
-2.17.3.5 `bfd_section_already_linked'
-.....................................
-
-*Synopsis*
- void bfd_section_already_linked (bfd *abfd, asection *sec);
- *Description*
-Check if SEC has been already linked during a reloceatable or final
-link.
- #define bfd_section_already_linked(abfd, sec) \
- BFD_SEND (abfd, _section_already_linked, (abfd, sec))
-
-
-File: bfd.info, Node: Hash Tables, Prev: Linker Functions, Up: BFD front end
-
-2.18 Hash Tables
-================
-
-BFD provides a simple set of hash table functions. Routines are
-provided to initialize a hash table, to free a hash table, to look up a
-string in a hash table and optionally create an entry for it, and to
-traverse a hash table. There is currently no routine to delete an
-string from a hash table.
-
- The basic hash table does not permit any data to be stored with a
-string. However, a hash table is designed to present a base class from
-which other types of hash tables may be derived. These derived types
-may store additional information with the string. Hash tables were
-implemented in this way, rather than simply providing a data pointer in
-a hash table entry, because they were designed for use by the linker
-back ends. The linker may create thousands of hash table entries, and
-the overhead of allocating private data and storing and following
-pointers becomes noticeable.
-
- The basic hash table code is in `hash.c'.
-
-* Menu:
-
-* Creating and Freeing a Hash Table::
-* Looking Up or Entering a String::
-* Traversing a Hash Table::
-* Deriving a New Hash Table Type::
-
-
-File: bfd.info, Node: Creating and Freeing a Hash Table, Next: Looking Up or Entering a String, Prev: Hash Tables, Up: Hash Tables
-
-2.18.1 Creating and freeing a hash table
-----------------------------------------
-
-To create a hash table, create an instance of a `struct bfd_hash_table'
-(defined in `bfd.h') and call `bfd_hash_table_init' (if you know
-approximately how many entries you will need, the function
-`bfd_hash_table_init_n', which takes a SIZE argument, may be used).
-`bfd_hash_table_init' returns `FALSE' if some sort of error occurs.
-
- The function `bfd_hash_table_init' take as an argument a function to
-use to create new entries. For a basic hash table, use the function
-`bfd_hash_newfunc'. *Note Deriving a New Hash Table Type::, for why
-you would want to use a different value for this argument.
-
- `bfd_hash_table_init' will create an objalloc which will be used to
-allocate new entries. You may allocate memory on this objalloc using
-`bfd_hash_allocate'.
-
- Use `bfd_hash_table_free' to free up all the memory that has been
-allocated for a hash table. This will not free up the `struct
-bfd_hash_table' itself, which you must provide.
-
- Use `bfd_hash_set_default_size' to set the default size of hash
-table to use.
-
-
-File: bfd.info, Node: Looking Up or Entering a String, Next: Traversing a Hash Table, Prev: Creating and Freeing a Hash Table, Up: Hash Tables
-
-2.18.2 Looking up or entering a string
---------------------------------------
-
-The function `bfd_hash_lookup' is used both to look up a string in the
-hash table and to create a new entry.
-
- If the CREATE argument is `FALSE', `bfd_hash_lookup' will look up a
-string. If the string is found, it will returns a pointer to a `struct
-bfd_hash_entry'. If the string is not found in the table
-`bfd_hash_lookup' will return `NULL'. You should not modify any of the
-fields in the returns `struct bfd_hash_entry'.
-
- If the CREATE argument is `TRUE', the string will be entered into
-the hash table if it is not already there. Either way a pointer to a
-`struct bfd_hash_entry' will be returned, either to the existing
-structure or to a newly created one. In this case, a `NULL' return
-means that an error occurred.
-
- If the CREATE argument is `TRUE', and a new entry is created, the
-COPY argument is used to decide whether to copy the string onto the
-hash table objalloc or not. If COPY is passed as `FALSE', you must be
-careful not to deallocate or modify the string as long as the hash table
-exists.
-
-
-File: bfd.info, Node: Traversing a Hash Table, Next: Deriving a New Hash Table Type, Prev: Looking Up or Entering a String, Up: Hash Tables
-
-2.18.3 Traversing a hash table
-------------------------------
-
-The function `bfd_hash_traverse' may be used to traverse a hash table,
-calling a function on each element. The traversal is done in a random
-order.
-
- `bfd_hash_traverse' takes as arguments a function and a generic
-`void *' pointer. The function is called with a hash table entry (a
-`struct bfd_hash_entry *') and the generic pointer passed to
-`bfd_hash_traverse'. The function must return a `boolean' value, which
-indicates whether to continue traversing the hash table. If the
-function returns `FALSE', `bfd_hash_traverse' will stop the traversal
-and return immediately.
-
-
-File: bfd.info, Node: Deriving a New Hash Table Type, Prev: Traversing a Hash Table, Up: Hash Tables
-
-2.18.4 Deriving a new hash table type
--------------------------------------
-
-Many uses of hash tables want to store additional information which
-each entry in the hash table. Some also find it convenient to store
-additional information with the hash table itself. This may be done
-using a derived hash table.
-
- Since C is not an object oriented language, creating a derived hash
-table requires sticking together some boilerplate routines with a few
-differences specific to the type of hash table you want to create.
-
- An example of a derived hash table is the linker hash table. The
-structures for this are defined in `bfdlink.h'. The functions are in
-`linker.c'.
-
- You may also derive a hash table from an already derived hash table.
-For example, the a.out linker backend code uses a hash table derived
-from the linker hash table.
-
-* Menu:
-
-* Define the Derived Structures::
-* Write the Derived Creation Routine::
-* Write Other Derived Routines::
-
-
-File: bfd.info, Node: Define the Derived Structures, Next: Write the Derived Creation Routine, Prev: Deriving a New Hash Table Type, Up: Deriving a New Hash Table Type
-
-2.18.4.1 Define the derived structures
-......................................
-
-You must define a structure for an entry in the hash table, and a
-structure for the hash table itself.
-
- The first field in the structure for an entry in the hash table must
-be of the type used for an entry in the hash table you are deriving
-from. If you are deriving from a basic hash table this is `struct
-bfd_hash_entry', which is defined in `bfd.h'. The first field in the
-structure for the hash table itself must be of the type of the hash
-table you are deriving from itself. If you are deriving from a basic
-hash table, this is `struct bfd_hash_table'.
-
- For example, the linker hash table defines `struct
-bfd_link_hash_entry' (in `bfdlink.h'). The first field, `root', is of
-type `struct bfd_hash_entry'. Similarly, the first field in `struct
-bfd_link_hash_table', `table', is of type `struct bfd_hash_table'.
-
-
-File: bfd.info, Node: Write the Derived Creation Routine, Next: Write Other Derived Routines, Prev: Define the Derived Structures, Up: Deriving a New Hash Table Type
-
-2.18.4.2 Write the derived creation routine
-...........................................
-
-You must write a routine which will create and initialize an entry in
-the hash table. This routine is passed as the function argument to
-`bfd_hash_table_init'.
-
- In order to permit other hash tables to be derived from the hash
-table you are creating, this routine must be written in a standard way.
-
- The first argument to the creation routine is a pointer to a hash
-table entry. This may be `NULL', in which case the routine should
-allocate the right amount of space. Otherwise the space has already
-been allocated by a hash table type derived from this one.
-
- After allocating space, the creation routine must call the creation
-routine of the hash table type it is derived from, passing in a pointer
-to the space it just allocated. This will initialize any fields used
-by the base hash table.
-
- Finally the creation routine must initialize any local fields for
-the new hash table type.
-
- Here is a boilerplate example of a creation routine. FUNCTION_NAME
-is the name of the routine. ENTRY_TYPE is the type of an entry in the
-hash table you are creating. BASE_NEWFUNC is the name of the creation
-routine of the hash table type your hash table is derived from.
-
- struct bfd_hash_entry *
- FUNCTION_NAME (struct bfd_hash_entry *entry,
- struct bfd_hash_table *table,
- const char *string)
- {
- struct ENTRY_TYPE *ret = (ENTRY_TYPE *) entry;
-
- /* Allocate the structure if it has not already been allocated by a
- derived class. */
- if (ret == NULL)
- {
- ret = bfd_hash_allocate (table, sizeof (* ret));
- if (ret == NULL)
- return NULL;
- }
-
- /* Call the allocation method of the base class. */
- ret = ((ENTRY_TYPE *)
- BASE_NEWFUNC ((struct bfd_hash_entry *) ret, table, string));
-
- /* Initialize the local fields here. */
-
- return (struct bfd_hash_entry *) ret;
- }
- *Description*
-The creation routine for the linker hash table, which is in `linker.c',
-looks just like this example. FUNCTION_NAME is
-`_bfd_link_hash_newfunc'. ENTRY_TYPE is `struct bfd_link_hash_entry'.
-BASE_NEWFUNC is `bfd_hash_newfunc', the creation routine for a basic
-hash table.
-
- `_bfd_link_hash_newfunc' also initializes the local fields in a
-linker hash table entry: `type', `written' and `next'.
-
-
-File: bfd.info, Node: Write Other Derived Routines, Prev: Write the Derived Creation Routine, Up: Deriving a New Hash Table Type
-
-2.18.4.3 Write other derived routines
-.....................................
-
-You will want to write other routines for your new hash table, as well.
-
- You will want an initialization routine which calls the
-initialization routine of the hash table you are deriving from and
-initializes any other local fields. For the linker hash table, this is
-`_bfd_link_hash_table_init' in `linker.c'.
-
- You will want a lookup routine which calls the lookup routine of the
-hash table you are deriving from and casts the result. The linker hash
-table uses `bfd_link_hash_lookup' in `linker.c' (this actually takes an
-additional argument which it uses to decide how to return the looked up
-value).
-
- You may want a traversal routine. This should just call the
-traversal routine of the hash table you are deriving from with
-appropriate casts. The linker hash table uses `bfd_link_hash_traverse'
-in `linker.c'.
-
- These routines may simply be defined as macros. For example, the
-a.out backend linker hash table, which is derived from the linker hash
-table, uses macros for the lookup and traversal routines. These are
-`aout_link_hash_lookup' and `aout_link_hash_traverse' in aoutx.h.
-
-
-File: bfd.info, Node: BFD back ends, Next: GNU Free Documentation License, Prev: BFD front end, Up: Top
-
-3 BFD back ends
-***************
-
-* Menu:
-
-* What to Put Where::
-* aout :: a.out backends
-* coff :: coff backends
-* elf :: elf backends
-* mmo :: mmo backend
-
-
-File: bfd.info, Node: What to Put Where, Next: aout, Prev: BFD back ends, Up: BFD back ends
-
- All of BFD lives in one directory.
-
-
-File: bfd.info, Node: aout, Next: coff, Prev: What to Put Where, Up: BFD back ends
-
-3.1 a.out backends
-==================
-
-*Description*
-BFD supports a number of different flavours of a.out format, though the
-major differences are only the sizes of the structures on disk, and the
-shape of the relocation information.
-
- The support is split into a basic support file `aoutx.h' and other
-files which derive functions from the base. One derivation file is
-`aoutf1.h' (for a.out flavour 1), and adds to the basic a.out functions
-support for sun3, sun4, 386 and 29k a.out files, to create a target
-jump vector for a specific target.
-
- This information is further split out into more specific files for
-each machine, including `sunos.c' for sun3 and sun4, `newsos3.c' for
-the Sony NEWS, and `demo64.c' for a demonstration of a 64 bit a.out
-format.
-
- The base file `aoutx.h' defines general mechanisms for reading and
-writing records to and from disk and various other methods which BFD
-requires. It is included by `aout32.c' and `aout64.c' to form the names
-`aout_32_swap_exec_header_in', `aout_64_swap_exec_header_in', etc.
-
- As an example, this is what goes on to make the back end for a sun4,
-from `aout32.c':
-
- #define ARCH_SIZE 32
- #include "aoutx.h"
-
- Which exports names:
-
- ...
- aout_32_canonicalize_reloc
- aout_32_find_nearest_line
- aout_32_get_lineno
- aout_32_get_reloc_upper_bound
- ...
-
- from `sunos.c':
-
- #define TARGET_NAME "a.out-sunos-big"
- #define VECNAME sunos_big_vec
- #include "aoutf1.h"
-
- requires all the names from `aout32.c', and produces the jump vector
-
- sunos_big_vec
-
- The file `host-aout.c' is a special case. It is for a large set of
-hosts that use "more or less standard" a.out files, and for which
-cross-debugging is not interesting. It uses the standard 32-bit a.out
-support routines, but determines the file offsets and addresses of the
-text, data, and BSS sections, the machine architecture and machine
-type, and the entry point address, in a host-dependent manner. Once
-these values have been determined, generic code is used to handle the
-object file.
-
- When porting it to run on a new system, you must supply:
-
- HOST_PAGE_SIZE
- HOST_SEGMENT_SIZE
- HOST_MACHINE_ARCH (optional)
- HOST_MACHINE_MACHINE (optional)
- HOST_TEXT_START_ADDR
- HOST_STACK_END_ADDR
-
- in the file `../include/sys/h-XXX.h' (for your host). These values,
-plus the structures and macros defined in `a.out.h' on your host
-system, will produce a BFD target that will access ordinary a.out files
-on your host. To configure a new machine to use `host-aout.c', specify:
-
- TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec
- TDEPFILES= host-aout.o trad-core.o
-
- in the `config/XXX.mt' file, and modify `configure.in' to use the
-`XXX.mt' file (by setting "`bfd_target=XXX'") when your configuration
-is selected.
-
-3.1.1 Relocations
------------------
-
-*Description*
-The file `aoutx.h' provides for both the _standard_ and _extended_
-forms of a.out relocation records.
-
- The standard records contain only an address, a symbol index, and a
-type field. The extended records (used on 29ks and sparcs) also have a
-full integer for an addend.
-
-3.1.2 Internal entry points
----------------------------
-
-*Description*
-`aoutx.h' exports several routines for accessing the contents of an
-a.out file, which are gathered and exported in turn by various format
-specific files (eg sunos.c).
-
-3.1.2.1 `aout_SIZE_swap_exec_header_in'
-.......................................
-
-*Synopsis*
- void aout_SIZE_swap_exec_header_in,
- (bfd *abfd,
- struct external_exec *bytes,
- struct internal_exec *execp);
- *Description*
-Swap the information in an executable header RAW_BYTES taken from a raw
-byte stream memory image into the internal exec header structure EXECP.
-
-3.1.2.2 `aout_SIZE_swap_exec_header_out'
-........................................
-
-*Synopsis*
- void aout_SIZE_swap_exec_header_out
- (bfd *abfd,
- struct internal_exec *execp,
- struct external_exec *raw_bytes);
- *Description*
-Swap the information in an internal exec header structure EXECP into
-the buffer RAW_BYTES ready for writing to disk.
-
-3.1.2.3 `aout_SIZE_some_aout_object_p'
-......................................
-
-*Synopsis*
- const bfd_target *aout_SIZE_some_aout_object_p
- (bfd *abfd,
- struct internal_exec *execp,
- const bfd_target *(*callback_to_real_object_p) (bfd *));
- *Description*
-Some a.out variant thinks that the file open in ABFD checking is an
-a.out file. Do some more checking, and set up for access if it really
-is. Call back to the calling environment's "finish up" function just
-before returning, to handle any last-minute setup.
-
-3.1.2.4 `aout_SIZE_mkobject'
-............................
-
-*Synopsis*
- bfd_boolean aout_SIZE_mkobject, (bfd *abfd);
- *Description*
-Initialize BFD ABFD for use with a.out files.
-
-3.1.2.5 `aout_SIZE_machine_type'
-................................
-
-*Synopsis*
- enum machine_type aout_SIZE_machine_type
- (enum bfd_architecture arch,
- unsigned long machine,
- bfd_boolean *unknown);
- *Description*
-Keep track of machine architecture and machine type for a.out's. Return
-the `machine_type' for a particular architecture and machine, or
-`M_UNKNOWN' if that exact architecture and machine can't be represented
-in a.out format.
-
- If the architecture is understood, machine type 0 (default) is
-always understood.
-
-3.1.2.6 `aout_SIZE_set_arch_mach'
-.................................
-
-*Synopsis*
- bfd_boolean aout_SIZE_set_arch_mach,
- (bfd *,
- enum bfd_architecture arch,
- unsigned long machine);
- *Description*
-Set the architecture and the machine of the BFD ABFD to the values ARCH
-and MACHINE. Verify that ABFD's format can support the architecture
-required.
-
-3.1.2.7 `aout_SIZE_new_section_hook'
-....................................
-
-*Synopsis*
- bfd_boolean aout_SIZE_new_section_hook,
- (bfd *abfd,
- asection *newsect);
- *Description*
-Called by the BFD in response to a `bfd_make_section' request.
-
-
-File: bfd.info, Node: coff, Next: elf, Prev: aout, Up: BFD back ends
-
-3.2 coff backends
-=================
-
-BFD supports a number of different flavours of coff format. The major
-differences between formats are the sizes and alignments of fields in
-structures on disk, and the occasional extra field.
-
- Coff in all its varieties is implemented with a few common files and
-a number of implementation specific files. For example, The 88k bcs
-coff format is implemented in the file `coff-m88k.c'. This file
-`#include's `coff/m88k.h' which defines the external structure of the
-coff format for the 88k, and `coff/internal.h' which defines the
-internal structure. `coff-m88k.c' also defines the relocations used by
-the 88k format *Note Relocations::.
-
- The Intel i960 processor version of coff is implemented in
-`coff-i960.c'. This file has the same structure as `coff-m88k.c',
-except that it includes `coff/i960.h' rather than `coff-m88k.h'.
-
-3.2.1 Porting to a new version of coff
---------------------------------------
-
-The recommended method is to select from the existing implementations
-the version of coff which is most like the one you want to use. For
-example, we'll say that i386 coff is the one you select, and that your
-coff flavour is called foo. Copy `i386coff.c' to `foocoff.c', copy
-`../include/coff/i386.h' to `../include/coff/foo.h', and add the lines
-to `targets.c' and `Makefile.in' so that your new back end is used.
-Alter the shapes of the structures in `../include/coff/foo.h' so that
-they match what you need. You will probably also have to add `#ifdef's
-to the code in `coff/internal.h' and `coffcode.h' if your version of
-coff is too wild.
-
- You can verify that your new BFD backend works quite simply by
-building `objdump' from the `binutils' directory, and making sure that
-its version of what's going on and your host system's idea (assuming it
-has the pretty standard coff dump utility, usually called `att-dump' or
-just `dump') are the same. Then clean up your code, and send what
-you've done to Cygnus. Then your stuff will be in the next release, and
-you won't have to keep integrating it.
-
-3.2.2 How the coff backend works
---------------------------------
-
-3.2.2.1 File layout
-...................
-
-The Coff backend is split into generic routines that are applicable to
-any Coff target and routines that are specific to a particular target.
-The target-specific routines are further split into ones which are
-basically the same for all Coff targets except that they use the
-external symbol format or use different values for certain constants.
-
- The generic routines are in `coffgen.c'. These routines work for
-any Coff target. They use some hooks into the target specific code;
-the hooks are in a `bfd_coff_backend_data' structure, one of which
-exists for each target.
-
- The essentially similar target-specific routines are in
-`coffcode.h'. This header file includes executable C code. The
-various Coff targets first include the appropriate Coff header file,
-make any special defines that are needed, and then include `coffcode.h'.
-
- Some of the Coff targets then also have additional routines in the
-target source file itself.
-
- For example, `coff-i960.c' includes `coff/internal.h' and
-`coff/i960.h'. It then defines a few constants, such as `I960', and
-includes `coffcode.h'. Since the i960 has complex relocation types,
-`coff-i960.c' also includes some code to manipulate the i960 relocs.
-This code is not in `coffcode.h' because it would not be used by any
-other target.
-
-3.2.2.2 Bit twiddling
-.....................
-
-Each flavour of coff supported in BFD has its own header file
-describing the external layout of the structures. There is also an
-internal description of the coff layout, in `coff/internal.h'. A major
-function of the coff backend is swapping the bytes and twiddling the
-bits to translate the external form of the structures into the normal
-internal form. This is all performed in the `bfd_swap'_thing_direction
-routines. Some elements are different sizes between different versions
-of coff; it is the duty of the coff version specific include file to
-override the definitions of various packing routines in `coffcode.h'.
-E.g., the size of line number entry in coff is sometimes 16 bits, and
-sometimes 32 bits. `#define'ing `PUT_LNSZ_LNNO' and `GET_LNSZ_LNNO'
-will select the correct one. No doubt, some day someone will find a
-version of coff which has a varying field size not catered to at the
-moment. To port BFD, that person will have to add more `#defines'.
-Three of the bit twiddling routines are exported to `gdb';
-`coff_swap_aux_in', `coff_swap_sym_in' and `coff_swap_lineno_in'. `GDB'
-reads the symbol table on its own, but uses BFD to fix things up. More
-of the bit twiddlers are exported for `gas'; `coff_swap_aux_out',
-`coff_swap_sym_out', `coff_swap_lineno_out', `coff_swap_reloc_out',
-`coff_swap_filehdr_out', `coff_swap_aouthdr_out',
-`coff_swap_scnhdr_out'. `Gas' currently keeps track of all the symbol
-table and reloc drudgery itself, thereby saving the internal BFD
-overhead, but uses BFD to swap things on the way out, making cross
-ports much safer. Doing so also allows BFD (and thus the linker) to
-use the same header files as `gas', which makes one avenue to disaster
-disappear.
-
-3.2.2.3 Symbol reading
-......................
-
-The simple canonical form for symbols used by BFD is not rich enough to
-keep all the information available in a coff symbol table. The back end
-gets around this problem by keeping the original symbol table around,
-"behind the scenes".
-
- When a symbol table is requested (through a call to
-`bfd_canonicalize_symtab'), a request gets through to
-`coff_get_normalized_symtab'. This reads the symbol table from the coff
-file and swaps all the structures inside into the internal form. It
-also fixes up all the pointers in the table (represented in the file by
-offsets from the first symbol in the table) into physical pointers to
-elements in the new internal table. This involves some work since the
-meanings of fields change depending upon context: a field that is a
-pointer to another structure in the symbol table at one moment may be
-the size in bytes of a structure at the next. Another pass is made
-over the table. All symbols which mark file names (`C_FILE' symbols)
-are modified so that the internal string points to the value in the
-auxent (the real filename) rather than the normal text associated with
-the symbol (`".file"').
-
- At this time the symbol names are moved around. Coff stores all
-symbols less than nine characters long physically within the symbol
-table; longer strings are kept at the end of the file in the string
-table. This pass moves all strings into memory and replaces them with
-pointers to the strings.
-
- The symbol table is massaged once again, this time to create the
-canonical table used by the BFD application. Each symbol is inspected
-in turn, and a decision made (using the `sclass' field) about the
-various flags to set in the `asymbol'. *Note Symbols::. The generated
-canonical table shares strings with the hidden internal symbol table.
-
- Any linenumbers are read from the coff file too, and attached to the
-symbols which own the functions the linenumbers belong to.
-
-3.2.2.4 Symbol writing
-......................
-
-Writing a symbol to a coff file which didn't come from a coff file will
-lose any debugging information. The `asymbol' structure remembers the
-BFD from which the symbol was taken, and on output the back end makes
-sure that the same destination target as source target is present.
-
- When the symbols have come from a coff file then all the debugging
-information is preserved.
-
- Symbol tables are provided for writing to the back end in a vector
-of pointers to pointers. This allows applications like the linker to
-accumulate and output large symbol tables without having to do too much
-byte copying.
-
- This function runs through the provided symbol table and patches
-each symbol marked as a file place holder (`C_FILE') to point to the
-next file place holder in the list. It also marks each `offset' field
-in the list with the offset from the first symbol of the current symbol.
-
- Another function of this procedure is to turn the canonical value
-form of BFD into the form used by coff. Internally, BFD expects symbol
-values to be offsets from a section base; so a symbol physically at
-0x120, but in a section starting at 0x100, would have the value 0x20.
-Coff expects symbols to contain their final value, so symbols have
-their values changed at this point to reflect their sum with their
-owning section. This transformation uses the `output_section' field of
-the `asymbol''s `asection' *Note Sections::.
-
- * `coff_mangle_symbols'
- This routine runs though the provided symbol table and uses the
-offsets generated by the previous pass and the pointers generated when
-the symbol table was read in to create the structured hierarchy
-required by coff. It changes each pointer to a symbol into the index
-into the symbol table of the asymbol.
-
- * `coff_write_symbols'
- This routine runs through the symbol table and patches up the
-symbols from their internal form into the coff way, calls the bit
-twiddlers, and writes out the table to the file.
-
-3.2.2.5 `coff_symbol_type'
-..........................
-
-*Description*
-The hidden information for an `asymbol' is described in a
-`combined_entry_type':
-
-
- typedef struct coff_ptr_struct
- {
- /* Remembers the offset from the first symbol in the file for
- this symbol. Generated by coff_renumber_symbols. */
- unsigned int offset;
-
- /* Should the value of this symbol be renumbered. Used for
- XCOFF C_BSTAT symbols. Set by coff_slurp_symbol_table. */
- unsigned int fix_value : 1;
-
- /* Should the tag field of this symbol be renumbered.
- Created by coff_pointerize_aux. */
- unsigned int fix_tag : 1;
-
- /* Should the endidx field of this symbol be renumbered.
- Created by coff_pointerize_aux. */
- unsigned int fix_end : 1;
-
- /* Should the x_csect.x_scnlen field be renumbered.
- Created by coff_pointerize_aux. */
- unsigned int fix_scnlen : 1;
-
- /* Fix up an XCOFF C_BINCL/C_EINCL symbol. The value is the
- index into the line number entries. Set by coff_slurp_symbol_table. */
- unsigned int fix_line : 1;
-
- /* The container for the symbol structure as read and translated
- from the file. */
- union
- {
- union internal_auxent auxent;
- struct internal_syment syment;
- } u;
- } combined_entry_type;
-
-
- /* Each canonical asymbol really looks like this: */
-
- typedef struct coff_symbol_struct
- {
- /* The actual symbol which the rest of BFD works with */
- asymbol symbol;
-
- /* A pointer to the hidden information for this symbol */
- combined_entry_type *native;
-
- /* A pointer to the linenumber information for this symbol */
- struct lineno_cache_entry *lineno;
-
- /* Have the line numbers been relocated yet ? */
- bfd_boolean done_lineno;
- } coff_symbol_type;
-
-3.2.2.6 `bfd_coff_backend_data'
-...............................
-
- /* COFF symbol classifications. */
-
- enum coff_symbol_classification
- {
- /* Global symbol. */
- COFF_SYMBOL_GLOBAL,
- /* Common symbol. */
- COFF_SYMBOL_COMMON,
- /* Undefined symbol. */
- COFF_SYMBOL_UNDEFINED,
- /* Local symbol. */
- COFF_SYMBOL_LOCAL,
- /* PE section symbol. */
- COFF_SYMBOL_PE_SECTION
- };
-Special entry points for gdb to swap in coff symbol table parts:
- typedef struct
- {
- void (*_bfd_coff_swap_aux_in)
- (bfd *, void *, int, int, int, int, void *);
-
- void (*_bfd_coff_swap_sym_in)
- (bfd *, void *, void *);
-
- void (*_bfd_coff_swap_lineno_in)
- (bfd *, void *, void *);
-
- unsigned int (*_bfd_coff_swap_aux_out)
- (bfd *, void *, int, int, int, int, void *);
-
- unsigned int (*_bfd_coff_swap_sym_out)
- (bfd *, void *, void *);
-
- unsigned int (*_bfd_coff_swap_lineno_out)
- (bfd *, void *, void *);
-
- unsigned int (*_bfd_coff_swap_reloc_out)
- (bfd *, void *, void *);
-
- unsigned int (*_bfd_coff_swap_filehdr_out)
- (bfd *, void *, void *);
-
- unsigned int (*_bfd_coff_swap_aouthdr_out)
- (bfd *, void *, void *);
-
- unsigned int (*_bfd_coff_swap_scnhdr_out)
- (bfd *, void *, void *);
-
- unsigned int _bfd_filhsz;
- unsigned int _bfd_aoutsz;
- unsigned int _bfd_scnhsz;
- unsigned int _bfd_symesz;
- unsigned int _bfd_auxesz;
- unsigned int _bfd_relsz;
- unsigned int _bfd_linesz;
- unsigned int _bfd_filnmlen;
- bfd_boolean _bfd_coff_long_filenames;
- bfd_boolean _bfd_coff_long_section_names;
- unsigned int _bfd_coff_default_section_alignment_power;
- bfd_boolean _bfd_coff_force_symnames_in_strings;
- unsigned int _bfd_coff_debug_string_prefix_length;
-
- void (*_bfd_coff_swap_filehdr_in)
- (bfd *, void *, void *);
-
- void (*_bfd_coff_swap_aouthdr_in)
- (bfd *, void *, void *);
-
- void (*_bfd_coff_swap_scnhdr_in)
- (bfd *, void *, void *);
-
- void (*_bfd_coff_swap_reloc_in)
- (bfd *abfd, void *, void *);
-
- bfd_boolean (*_bfd_coff_bad_format_hook)
- (bfd *, void *);
-
- bfd_boolean (*_bfd_coff_set_arch_mach_hook)
- (bfd *, void *);
-
- void * (*_bfd_coff_mkobject_hook)
- (bfd *, void *, void *);
-
- bfd_boolean (*_bfd_styp_to_sec_flags_hook)
- (bfd *, void *, const char *, asection *, flagword *);
-
- void (*_bfd_set_alignment_hook)
- (bfd *, asection *, void *);
-
- bfd_boolean (*_bfd_coff_slurp_symbol_table)
- (bfd *);
-
- bfd_boolean (*_bfd_coff_symname_in_debug)
- (bfd *, struct internal_syment *);
-
- bfd_boolean (*_bfd_coff_pointerize_aux_hook)
- (bfd *, combined_entry_type *, combined_entry_type *,
- unsigned int, combined_entry_type *);
-
- bfd_boolean (*_bfd_coff_print_aux)
- (bfd *, FILE *, combined_entry_type *, combined_entry_type *,
- combined_entry_type *, unsigned int);
-
- void (*_bfd_coff_reloc16_extra_cases)
- (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
- bfd_byte *, unsigned int *, unsigned int *);
-
- int (*_bfd_coff_reloc16_estimate)
- (bfd *, asection *, arelent *, unsigned int,
- struct bfd_link_info *);
-
- enum coff_symbol_classification (*_bfd_coff_classify_symbol)
- (bfd *, struct internal_syment *);
-
- bfd_boolean (*_bfd_coff_compute_section_file_positions)
- (bfd *);
-
- bfd_boolean (*_bfd_coff_start_final_link)
- (bfd *, struct bfd_link_info *);
-
- bfd_boolean (*_bfd_coff_relocate_section)
- (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
- struct internal_reloc *, struct internal_syment *, asection **);
-
- reloc_howto_type *(*_bfd_coff_rtype_to_howto)
- (bfd *, asection *, struct internal_reloc *,
- struct coff_link_hash_entry *, struct internal_syment *,
- bfd_vma *);
-
- bfd_boolean (*_bfd_coff_adjust_symndx)
- (bfd *, struct bfd_link_info *, bfd *, asection *,
- struct internal_reloc *, bfd_boolean *);
-
- bfd_boolean (*_bfd_coff_link_add_one_symbol)
- (struct bfd_link_info *, bfd *, const char *, flagword,
- asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean,
- struct bfd_link_hash_entry **);
-
- bfd_boolean (*_bfd_coff_link_output_has_begun)
- (bfd *, struct coff_final_link_info *);
-
- bfd_boolean (*_bfd_coff_final_link_postscript)
- (bfd *, struct coff_final_link_info *);
-
- } bfd_coff_backend_data;
-
- #define coff_backend_info(abfd) \
- ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)
-
- #define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
- ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))
-
- #define bfd_coff_swap_sym_in(a,e,i) \
- ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i))
-
- #define bfd_coff_swap_lineno_in(a,e,i) \
- ((coff_backend_info ( a)->_bfd_coff_swap_lineno_in) (a,e,i))
-
- #define bfd_coff_swap_reloc_out(abfd, i, o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_out) (abfd, i, o))
-
- #define bfd_coff_swap_lineno_out(abfd, i, o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o))
-
- #define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \
- ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o))
-
- #define bfd_coff_swap_sym_out(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o))
-
- #define bfd_coff_swap_scnhdr_out(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_out) (abfd, i, o))
-
- #define bfd_coff_swap_filehdr_out(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_out) (abfd, i, o))
-
- #define bfd_coff_swap_aouthdr_out(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_out) (abfd, i, o))
-
- #define bfd_coff_filhsz(abfd) (coff_backend_info (abfd)->_bfd_filhsz)
- #define bfd_coff_aoutsz(abfd) (coff_backend_info (abfd)->_bfd_aoutsz)
- #define bfd_coff_scnhsz(abfd) (coff_backend_info (abfd)->_bfd_scnhsz)
- #define bfd_coff_symesz(abfd) (coff_backend_info (abfd)->_bfd_symesz)
- #define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz)
- #define bfd_coff_relsz(abfd) (coff_backend_info (abfd)->_bfd_relsz)
- #define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz)
- #define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen)
- #define bfd_coff_long_filenames(abfd) \
- (coff_backend_info (abfd)->_bfd_coff_long_filenames)
- #define bfd_coff_long_section_names(abfd) \
- (coff_backend_info (abfd)->_bfd_coff_long_section_names)
- #define bfd_coff_default_section_alignment_power(abfd) \
- (coff_backend_info (abfd)->_bfd_coff_default_section_alignment_power)
- #define bfd_coff_swap_filehdr_in(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_in) (abfd, i, o))
-
- #define bfd_coff_swap_aouthdr_in(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_in) (abfd, i, o))
-
- #define bfd_coff_swap_scnhdr_in(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_in) (abfd, i, o))
-
- #define bfd_coff_swap_reloc_in(abfd, i, o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_in) (abfd, i, o))
-
- #define bfd_coff_bad_format_hook(abfd, filehdr) \
- ((coff_backend_info (abfd)->_bfd_coff_bad_format_hook) (abfd, filehdr))
-
- #define bfd_coff_set_arch_mach_hook(abfd, filehdr)\
- ((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr))
- #define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\
- ((coff_backend_info (abfd)->_bfd_coff_mkobject_hook)\
- (abfd, filehdr, aouthdr))
-
- #define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section, flags_ptr)\
- ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\
- (abfd, scnhdr, name, section, flags_ptr))
-
- #define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\
- ((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr))
-
- #define bfd_coff_slurp_symbol_table(abfd)\
- ((coff_backend_info (abfd)->_bfd_coff_slurp_symbol_table) (abfd))
-
- #define bfd_coff_symname_in_debug(abfd, sym)\
- ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym))
-
- #define bfd_coff_force_symnames_in_strings(abfd)\
- (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings)
-
- #define bfd_coff_debug_string_prefix_length(abfd)\
- (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length)
-
- #define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\
- ((coff_backend_info (abfd)->_bfd_coff_print_aux)\
- (abfd, file, base, symbol, aux, indaux))
-
- #define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\
- reloc, data, src_ptr, dst_ptr)\
- ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\
- (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))
-
- #define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\
- ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\
- (abfd, section, reloc, shrink, link_info))
-
- #define bfd_coff_classify_symbol(abfd, sym)\
- ((coff_backend_info (abfd)->_bfd_coff_classify_symbol)\
- (abfd, sym))
-
- #define bfd_coff_compute_section_file_positions(abfd)\
- ((coff_backend_info (abfd)->_bfd_coff_compute_section_file_positions)\
- (abfd))
-
- #define bfd_coff_start_final_link(obfd, info)\
- ((coff_backend_info (obfd)->_bfd_coff_start_final_link)\
- (obfd, info))
- #define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\
- ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\
- (obfd, info, ibfd, o, con, rel, isyms, secs))
- #define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\
- ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\
- (abfd, sec, rel, h, sym, addendp))
- #define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\
- ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\
- (obfd, info, ibfd, sec, rel, adjustedp))
- #define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\
- value, string, cp, coll, hashp)\
- ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\
- (info, abfd, name, flags, section, value, string, cp, coll, hashp))
-
- #define bfd_coff_link_output_has_begun(a,p) \
- ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p))
- #define bfd_coff_final_link_postscript(a,p) \
- ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p))
-
-3.2.2.7 Writing relocations
-...........................
-
-To write relocations, the back end steps though the canonical
-relocation table and create an `internal_reloc'. The symbol index to
-use is removed from the `offset' field in the symbol table supplied.
-The address comes directly from the sum of the section base address and
-the relocation offset; the type is dug directly from the howto field.
-Then the `internal_reloc' is swapped into the shape of an
-`external_reloc' and written out to disk.
-
-3.2.2.8 Reading linenumbers
-...........................
-
-Creating the linenumber table is done by reading in the entire coff
-linenumber table, and creating another table for internal use.
-
- A coff linenumber table is structured so that each function is
-marked as having a line number of 0. Each line within the function is
-an offset from the first line in the function. The base of the line
-number information for the table is stored in the symbol associated
-with the function.
-
- Note: The PE format uses line number 0 for a flag indicating a new
-source file.
-
- The information is copied from the external to the internal table,
-and each symbol which marks a function is marked by pointing its...
-
- How does this work ?
-
-3.2.2.9 Reading relocations
-...........................
-
-Coff relocations are easily transformed into the internal BFD form
-(`arelent').
-
- Reading a coff relocation table is done in the following stages:
-
- * Read the entire coff relocation table into memory.
-
- * Process each relocation in turn; first swap it from the external
- to the internal form.
-
- * Turn the symbol referenced in the relocation's symbol index into a
- pointer into the canonical symbol table. This table is the same
- as the one returned by a call to `bfd_canonicalize_symtab'. The
- back end will call that routine and save the result if a
- canonicalization hasn't been done.
-
- * The reloc index is turned into a pointer to a howto structure, in
- a back end specific way. For instance, the 386 and 960 use the
- `r_type' to directly produce an index into a howto table vector;
- the 88k subtracts a number from the `r_type' field and creates an
- addend field.
-
-
-File: bfd.info, Node: elf, Next: mmo, Prev: coff, Up: BFD back ends
-
-3.3 ELF backends
-================
-
-BFD support for ELF formats is being worked on. Currently, the best
-supported back ends are for sparc and i386 (running svr4 or Solaris 2).
-
- Documentation of the internals of the support code still needs to be
-written. The code is changing quickly enough that we haven't bothered
-yet.
-
-3.3.0.1 `bfd_elf_find_section'
-..............................
-
-*Synopsis*
- struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name);
- *Description*
-Helper functions for GDB to locate the string tables. Since BFD hides
-string tables from callers, GDB needs to use an internal hook to find
-them. Sun's .stabstr, in particular, isn't even pointed to by the
-.stab section, so ordinary mechanisms wouldn't work to find it, even if
-we had some.
-
-
-File: bfd.info, Node: mmo, Prev: elf, Up: BFD back ends
-
-3.4 mmo backend
-===============
-
-The mmo object format is used exclusively together with Professor
-Donald E. Knuth's educational 64-bit processor MMIX. The simulator
-`mmix' which is available at
-`http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz'
-understands this format. That package also includes a combined
-assembler and linker called `mmixal'. The mmo format has no advantages
-feature-wise compared to e.g. ELF. It is a simple non-relocatable
-object format with no support for archives or debugging information,
-except for symbol value information and line numbers (which is not yet
-implemented in BFD). See
-`http://www-cs-faculty.stanford.edu/~knuth/mmix.html' for more
-information about MMIX. The ELF format is used for intermediate object
-files in the BFD implementation.
-
-* Menu:
-
-* File layout::
-* Symbol-table::
-* mmo section mapping::
-
-
-File: bfd.info, Node: File layout, Next: Symbol-table, Prev: mmo, Up: mmo
-
-3.4.1 File layout
------------------
-
-The mmo file contents is not partitioned into named sections as with
-e.g. ELF. Memory areas is formed by specifying the location of the
-data that follows. Only the memory area `0x0000...00' to `0x01ff...ff'
-is executable, so it is used for code (and constants) and the area
-`0x2000...00' to `0x20ff...ff' is used for writable data. *Note mmo
-section mapping::.
-
- There is provision for specifying "special data" of 65536 different
-types. We use type 80 (decimal), arbitrarily chosen the same as the
-ELF `e_machine' number for MMIX, filling it with section information
-normally found in ELF objects. *Note mmo section mapping::.
-
- Contents is entered as 32-bit words, xor:ed over previous contents,
-always zero-initialized. A word that starts with the byte `0x98' forms
-a command called a `lopcode', where the next byte distinguished between
-the thirteen lopcodes. The two remaining bytes, called the `Y' and `Z'
-fields, or the `YZ' field (a 16-bit big-endian number), are used for
-various purposes different for each lopcode. As documented in
-`http://www-cs-faculty.stanford.edu/~knuth/mmixal-intro.ps.gz', the
-lopcodes are:
-
-`lop_quote'
- 0x98000001. The next word is contents, regardless of whether it
- starts with 0x98 or not.
-
-`lop_loc'
- 0x9801YYZZ, where `Z' is 1 or 2. This is a location directive,
- setting the location for the next data to the next 32-bit word
- (for Z = 1) or 64-bit word (for Z = 2), plus Y * 2^56. Normally
- `Y' is 0 for the text segment and 2 for the data segment.
-
-`lop_skip'
- 0x9802YYZZ. Increase the current location by `YZ' bytes.
-
-`lop_fixo'
- 0x9803YYZZ, where `Z' is 1 or 2. Store the current location as 64
- bits into the location pointed to by the next 32-bit (Z = 1) or
- 64-bit (Z = 2) word, plus Y * 2^56.
-
-`lop_fixr'
- 0x9804YYZZ. `YZ' is stored into the current location plus 2 - 4 *
- YZ.
-
-`lop_fixrx'
- 0x980500ZZ. `Z' is 16 or 24. A value `L' derived from the
- following 32-bit word are used in a manner similar to `YZ' in
- lop_fixr: it is xor:ed into the current location minus 4 * L. The
- first byte of the word is 0 or 1. If it is 1, then L = (LOWEST 24
- BITS OF WORD) - 2^Z, if 0, then L = (LOWEST 24 BITS OF WORD).
-
-`lop_file'
- 0x9806YYZZ. `Y' is the file number, `Z' is count of 32-bit words.
- Set the file number to `Y' and the line counter to 0. The next Z
- * 4 bytes contain the file name, padded with zeros if the count is
- not a multiple of four. The same `Y' may occur multiple times,
- but `Z' must be 0 for all but the first occurrence.
-
-`lop_line'
- 0x9807YYZZ. `YZ' is the line number. Together with lop_file, it
- forms the source location for the next 32-bit word. Note that for
- each non-lopcode 32-bit word, line numbers are assumed incremented
- by one.
-
-`lop_spec'
- 0x9808YYZZ. `YZ' is the type number. Data until the next lopcode
- other than lop_quote forms special data of type `YZ'. *Note mmo
- section mapping::.
-
- Other types than 80, (or type 80 with a content that does not
- parse) is stored in sections named `.MMIX.spec_data.N' where N is
- the `YZ'-type. The flags for such a sections say not to allocate
- or load the data. The vma is 0. Contents of multiple occurrences
- of special data N is concatenated to the data of the previous
- lop_spec Ns. The location in data or code at which the lop_spec
- occurred is lost.
-
-`lop_pre'
- 0x980901ZZ. The first lopcode in a file. The `Z' field forms the
- length of header information in 32-bit words, where the first word
- tells the time in seconds since `00:00:00 GMT Jan 1 1970'.
-
-`lop_post'
- 0x980a00ZZ. Z > 32. This lopcode follows after all
- content-generating lopcodes in a program. The `Z' field denotes
- the value of `rG' at the beginning of the program. The following
- 256 - Z big-endian 64-bit words are loaded into global registers
- `$G' ... `$255'.
-
-`lop_stab'
- 0x980b0000. The next-to-last lopcode in a program. Must follow
- immediately after the lop_post lopcode and its data. After this
- lopcode follows all symbols in a compressed format (*note
- Symbol-table::).
-
-`lop_end'
- 0x980cYYZZ. The last lopcode in a program. It must follow the
- lop_stab lopcode and its data. The `YZ' field contains the number
- of 32-bit words of symbol table information after the preceding
- lop_stab lopcode.
-
- Note that the lopcode "fixups"; `lop_fixr', `lop_fixrx' and
-`lop_fixo' are not generated by BFD, but are handled. They are
-generated by `mmixal'.
-
- This trivial one-label, one-instruction file:
-
- :Main TRAP 1,2,3
-
- can be represented this way in mmo:
-
- 0x98090101 - lop_pre, one 32-bit word with timestamp.
- <timestamp>
- 0x98010002 - lop_loc, text segment, using a 64-bit address.
- Note that mmixal does not emit this for the file above.
- 0x00000000 - Address, high 32 bits.
- 0x00000000 - Address, low 32 bits.
- 0x98060002 - lop_file, 2 32-bit words for file-name.
- 0x74657374 - "test"
- 0x2e730000 - ".s\0\0"
- 0x98070001 - lop_line, line 1.
- 0x00010203 - TRAP 1,2,3
- 0x980a00ff - lop_post, setting $255 to 0.
- 0x00000000
- 0x00000000
- 0x980b0000 - lop_stab for ":Main" = 0, serial 1.
- 0x203a4040 *Note Symbol-table::.
- 0x10404020
- 0x4d206120
- 0x69016e00
- 0x81000000
- 0x980c0005 - lop_end; symbol table contained five 32-bit words.
-
-
-File: bfd.info, Node: Symbol-table, Next: mmo section mapping, Prev: File layout, Up: mmo
-
-3.4.2 Symbol table format
--------------------------
-
-From mmixal.w (or really, the generated mmixal.tex) in
-`http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz'):
-"Symbols are stored and retrieved by means of a `ternary search trie',
-following ideas of Bentley and Sedgewick. (See ACM-SIAM Symp. on
-Discrete Algorithms `8' (1997), 360-369; R.Sedgewick, `Algorithms in C'
-(Reading, Mass. Addison-Wesley, 1998), `15.4'.) Each trie node stores
-a character, and there are branches to subtries for the cases where a
-given character is less than, equal to, or greater than the character
-in the trie. There also is a pointer to a symbol table entry if a
-symbol ends at the current node."
-
- So it's a tree encoded as a stream of bytes. The stream of bytes
-acts on a single virtual global symbol, adding and removing characters
-and signalling complete symbol points. Here, we read the stream and
-create symbols at the completion points.
-
- First, there's a control byte `m'. If any of the listed bits in `m'
-is nonzero, we execute what stands at the right, in the listed order:
-
- (MMO3_LEFT)
- 0x40 - Traverse left trie.
- (Read a new command byte and recurse.)
-
- (MMO3_SYMBITS)
- 0x2f - Read the next byte as a character and store it in the
- current character position; increment character position.
- Test the bits of `m':
-
- (MMO3_WCHAR)
- 0x80 - The character is 16-bit (so read another byte,
- merge into current character.
-
- (MMO3_TYPEBITS)
- 0xf - We have a complete symbol; parse the type, value
- and serial number and do what should be done
- with a symbol. The type and length information
- is in j = (m & 0xf).
-
- (MMO3_REGQUAL_BITS)
- j == 0xf: A register variable. The following
- byte tells which register.
- j <= 8: An absolute symbol. Read j bytes as the
- big-endian number the symbol equals.
- A j = 2 with two zero bytes denotes an
- unknown symbol.
- j > 8: As with j <= 8, but add (0x20 << 56)
- to the value in the following j - 8
- bytes.
-
- Then comes the serial number, as a variant of
- uleb128, but better named ubeb128:
- Read bytes and shift the previous value left 7
- (multiply by 128). Add in the new byte, repeat
- until a byte has bit 7 set. The serial number
- is the computed value minus 128.
-
- (MMO3_MIDDLE)
- 0x20 - Traverse middle trie. (Read a new command byte
- and recurse.) Decrement character position.
-
- (MMO3_RIGHT)
- 0x10 - Traverse right trie. (Read a new command byte and
- recurse.)
-
- Let's look again at the `lop_stab' for the trivial file (*note File
-layout::).
-
- 0x980b0000 - lop_stab for ":Main" = 0, serial 1.
- 0x203a4040
- 0x10404020
- 0x4d206120
- 0x69016e00
- 0x81000000
-
- This forms the trivial trie (note that the path between ":" and "M"
-is redundant):
-
- 203a ":"
- 40 /
- 40 /
- 10 \
- 40 /
- 40 /
- 204d "M"
- 2061 "a"
- 2069 "i"
- 016e "n" is the last character in a full symbol, and
- with a value represented in one byte.
- 00 The value is 0.
- 81 The serial number is 1.
-
-
-File: bfd.info, Node: mmo section mapping, Prev: Symbol-table, Up: mmo
-
-3.4.3 mmo section mapping
--------------------------
-
-The implementation in BFD uses special data type 80 (decimal) to
-encapsulate and describe named sections, containing e.g. debug
-information. If needed, any datum in the encapsulation will be quoted
-using lop_quote. First comes a 32-bit word holding the number of
-32-bit words containing the zero-terminated zero-padded segment name.
-After the name there's a 32-bit word holding flags describing the
-section type. Then comes a 64-bit big-endian word with the section
-length (in bytes), then another with the section start address.
-Depending on the type of section, the contents might follow,
-zero-padded to 32-bit boundary. For a loadable section (such as data
-or code), the contents might follow at some later point, not
-necessarily immediately, as a lop_loc with the same start address as in
-the section description, followed by the contents. This in effect
-forms a descriptor that must be emitted before the actual contents.
-Sections described this way must not overlap.
-
- For areas that don't have such descriptors, synthetic sections are
-formed by BFD. Consecutive contents in the two memory areas
-`0x0000...00' to `0x01ff...ff' and `0x2000...00' to `0x20ff...ff' are
-entered in sections named `.text' and `.data' respectively. If an area
-is not otherwise described, but would together with a neighboring lower
-area be less than `0x40000000' bytes long, it is joined with the lower
-area and the gap is zero-filled. For other cases, a new section is
-formed, named `.MMIX.sec.N'. Here, N is a number, a running count
-through the mmo file, starting at 0.
-
- A loadable section specified as:
-
- .section secname,"ax"
- TETRA 1,2,3,4,-1,-2009
- BYTE 80
-
- and linked to address `0x4', is represented by the sequence:
-
- 0x98080050 - lop_spec 80
- 0x00000002 - two 32-bit words for the section name
- 0x7365636e - "secn"
- 0x616d6500 - "ame\0"
- 0x00000033 - flags CODE, READONLY, LOAD, ALLOC
- 0x00000000 - high 32 bits of section length
- 0x0000001c - section length is 28 bytes; 6 * 4 + 1 + alignment to 32 bits
- 0x00000000 - high 32 bits of section address
- 0x00000004 - section address is 4
- 0x98010002 - 64 bits with address of following data
- 0x00000000 - high 32 bits of address
- 0x00000004 - low 32 bits: data starts at address 4
- 0x00000001 - 1
- 0x00000002 - 2
- 0x00000003 - 3
- 0x00000004 - 4
- 0xffffffff - -1
- 0xfffff827 - -2009
- 0x50000000 - 80 as a byte, padded with zeros.
-
- Note that the lop_spec wrapping does not include the section
-contents. Compare this to a non-loaded section specified as:
-
- .section thirdsec
- TETRA 200001,100002
- BYTE 38,40
-
- This, when linked to address `0x200000000000001c', is represented by:
-
- 0x98080050 - lop_spec 80
- 0x00000002 - two 32-bit words for the section name
- 0x7365636e - "thir"
- 0x616d6500 - "dsec"
- 0x00000010 - flag READONLY
- 0x00000000 - high 32 bits of section length
- 0x0000000c - section length is 12 bytes; 2 * 4 + 2 + alignment to 32 bits
- 0x20000000 - high 32 bits of address
- 0x0000001c - low 32 bits of address 0x200000000000001c
- 0x00030d41 - 200001
- 0x000186a2 - 100002
- 0x26280000 - 38, 40 as bytes, padded with zeros
-
- For the latter example, the section contents must not be loaded in
-memory, and is therefore specified as part of the special data. The
-address is usually unimportant but might provide information for e.g.
-the DWARF 2 debugging format.
-
-
-File: bfd.info, Node: GNU Free Documentation License, Next: Index, Prev: BFD back ends, Up: Top
-
-Appendix A 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: bfd.info, Node: Index, Prev: GNU Free Documentation License, Up: Top
-
-Index
-*****
-
-
-* Menu:
-
-* _bfd_final_link_relocate: Relocating the section contents.
- (line 22)
-* _bfd_generic_link_add_archive_symbols: Adding symbols from an archive.
- (line 12)
-* _bfd_generic_link_add_one_symbol: Adding symbols from an object file.
- (line 19)
-* _bfd_generic_make_empty_symbol: symbol handling functions.
- (line 92)
-* _bfd_link_add_symbols in target vector: Adding Symbols to the Hash Table.
- (line 6)
-* _bfd_link_final_link in target vector: Performing the Final Link.
- (line 6)
-* _bfd_link_hash_table_create in target vector: Creating a Linker Hash Table.
- (line 6)
-* _bfd_relocate_contents: Relocating the section contents.
- (line 22)
-* aout_SIZE_machine_type: aout. (line 147)
-* aout_SIZE_mkobject: aout. (line 139)
-* aout_SIZE_new_section_hook: aout. (line 177)
-* aout_SIZE_set_arch_mach: aout. (line 164)
-* aout_SIZE_some_aout_object_p: aout. (line 125)
-* aout_SIZE_swap_exec_header_in: aout. (line 101)
-* aout_SIZE_swap_exec_header_out: aout. (line 113)
-* arelent_chain: typedef arelent. (line 339)
-* BFD: Overview. (line 6)
-* BFD canonical format: Canonical format. (line 11)
-* bfd_alloc: Opening and Closing.
- (line 203)
-* bfd_alloc2: Opening and Closing.
- (line 212)
-* bfd_alt_mach_code: BFD front end. (line 599)
-* bfd_arch_bits_per_address: Architectures. (line 476)
-* bfd_arch_bits_per_byte: Architectures. (line 468)
-* bfd_arch_get_compatible: Architectures. (line 411)
-* bfd_arch_list: Architectures. (line 402)
-* bfd_arch_mach_octets_per_byte: Architectures. (line 545)
-* BFD_ARELOC_BFIN_ADD: howto manager. (line 887)
-* BFD_ARELOC_BFIN_ADDR: howto manager. (line 938)
-* BFD_ARELOC_BFIN_AND: howto manager. (line 908)
-* BFD_ARELOC_BFIN_COMP: howto manager. (line 929)
-* BFD_ARELOC_BFIN_CONST: howto manager. (line 884)
-* BFD_ARELOC_BFIN_DIV: howto manager. (line 896)
-* BFD_ARELOC_BFIN_HWPAGE: howto manager. (line 935)
-* BFD_ARELOC_BFIN_LAND: howto manager. (line 917)
-* BFD_ARELOC_BFIN_LEN: howto manager. (line 923)
-* BFD_ARELOC_BFIN_LOR: howto manager. (line 920)
-* BFD_ARELOC_BFIN_LSHIFT: howto manager. (line 902)
-* BFD_ARELOC_BFIN_MOD: howto manager. (line 899)
-* BFD_ARELOC_BFIN_MULT: howto manager. (line 893)
-* BFD_ARELOC_BFIN_NEG: howto manager. (line 926)
-* BFD_ARELOC_BFIN_OR: howto manager. (line 911)
-* BFD_ARELOC_BFIN_PAGE: howto manager. (line 932)
-* BFD_ARELOC_BFIN_PUSH: howto manager. (line 881)
-* BFD_ARELOC_BFIN_RSHIFT: howto manager. (line 905)
-* BFD_ARELOC_BFIN_SUB: howto manager. (line 890)
-* BFD_ARELOC_BFIN_XOR: howto manager. (line 914)
-* bfd_cache_close: File Caching. (line 26)
-* bfd_cache_close_all: File Caching. (line 39)
-* bfd_cache_init: File Caching. (line 18)
-* bfd_calc_gnu_debuglink_crc32: Opening and Closing.
- (line 239)
-* bfd_canonicalize_reloc: BFD front end. (line 318)
-* bfd_canonicalize_symtab: symbol handling functions.
- (line 50)
-* bfd_check_format: Formats. (line 21)
-* bfd_check_format_matches: Formats. (line 52)
-* bfd_check_overflow: typedef arelent. (line 351)
-* bfd_close: Opening and Closing.
- (line 128)
-* bfd_close_all_done: Opening and Closing.
- (line 146)
-* bfd_coff_backend_data: coff. (line 246)
-* bfd_copy_private_bfd_data: BFD front end. (line 457)
-* bfd_copy_private_header_data: BFD front end. (line 439)
-* bfd_copy_private_section_data: section prototypes. (line 255)
-* bfd_copy_private_symbol_data: symbol handling functions.
- (line 140)
-* bfd_core_file_failing_command: Core Files. (line 12)
-* bfd_core_file_failing_signal: Core Files. (line 21)
-* bfd_create: Opening and Closing.
- (line 165)
-* bfd_create_gnu_debuglink_section: Opening and Closing.
- (line 305)
-* bfd_decode_symclass: symbol handling functions.
- (line 111)
-* bfd_default_arch_struct: Architectures. (line 423)
-* bfd_default_compatible: Architectures. (line 485)
-* bfd_default_reloc_type_lookup: howto manager. (line 1931)
-* bfd_default_scan: Architectures. (line 494)
-* bfd_default_set_arch_mach: Architectures. (line 441)
-* bfd_elf_find_section: elf. (line 13)
-* bfd_errmsg: BFD front end. (line 243)
-* bfd_fdopenr: Opening and Closing.
- (line 46)
-* bfd_fill_in_gnu_debuglink_section: Opening and Closing.
- (line 319)
-* bfd_find_target: bfd_target. (line 434)
-* bfd_follow_gnu_debuglink: Opening and Closing.
- (line 284)
-* bfd_fopen: Opening and Closing.
- (line 9)
-* bfd_format_string: Formats. (line 79)
-* bfd_generic_discard_group: section prototypes. (line 281)
-* bfd_generic_gc_sections: howto manager. (line 1962)
-* bfd_generic_get_relocated_section_contents: howto manager. (line 1982)
-* bfd_generic_is_group_section: section prototypes. (line 273)
-* bfd_generic_merge_sections: howto manager. (line 1972)
-* bfd_generic_relax_section: howto manager. (line 1949)
-* bfd_get_arch: Architectures. (line 452)
-* bfd_get_arch_info: Architectures. (line 504)
-* bfd_get_arch_size: BFD front end. (line 362)
-* bfd_get_error: BFD front end. (line 226)
-* bfd_get_error_handler: BFD front end. (line 294)
-* bfd_get_gp_size: BFD front end. (line 403)
-* bfd_get_mach: Architectures. (line 460)
-* bfd_get_mtime: BFD front end. (line 687)
-* bfd_get_next_mapent: Archives. (line 52)
-* bfd_get_reloc_code_name: howto manager. (line 1940)
-* bfd_get_reloc_size: typedef arelent. (line 330)
-* bfd_get_reloc_upper_bound: BFD front end. (line 308)
-* bfd_get_section_by_name: section prototypes. (line 17)
-* bfd_get_section_by_name_if: section prototypes. (line 31)
-* bfd_get_section_contents: section prototypes. (line 228)
-* bfd_get_sign_extend_vma: BFD front end. (line 375)
-* bfd_get_size <1>: Internal. (line 25)
-* bfd_get_size: BFD front end. (line 696)
-* bfd_get_symtab_upper_bound: symbol handling functions.
- (line 6)
-* bfd_get_unique_section_name: section prototypes. (line 50)
-* bfd_h_put_size: Internal. (line 97)
-* bfd_hash_allocate: Creating and Freeing a Hash Table.
- (line 17)
-* bfd_hash_lookup: Looking Up or Entering a String.
- (line 6)
-* bfd_hash_newfunc: Creating and Freeing a Hash Table.
- (line 12)
-* bfd_hash_set_default_size: Creating and Freeing a Hash Table.
- (line 25)
-* bfd_hash_table_free: Creating and Freeing a Hash Table.
- (line 21)
-* bfd_hash_table_init: Creating and Freeing a Hash Table.
- (line 6)
-* bfd_hash_table_init_n: Creating and Freeing a Hash Table.
- (line 6)
-* bfd_hash_traverse: Traversing a Hash Table.
- (line 6)
-* bfd_init: Initialization. (line 11)
-* bfd_install_relocation: typedef arelent. (line 392)
-* bfd_is_local_label: symbol handling functions.
- (line 17)
-* bfd_is_local_label_name: symbol handling functions.
- (line 26)
-* bfd_is_target_special_symbol: symbol handling functions.
- (line 38)
-* bfd_is_undefined_symclass: symbol handling functions.
- (line 120)
-* bfd_link_split_section: Writing the symbol table.
- (line 44)
-* bfd_log2: Internal. (line 164)
-* bfd_lookup_arch: Architectures. (line 512)
-* bfd_make_debug_symbol: symbol handling functions.
- (line 102)
-* bfd_make_empty_symbol: symbol handling functions.
- (line 78)
-* bfd_make_readable: Opening and Closing.
- (line 189)
-* bfd_make_section: section prototypes. (line 129)
-* bfd_make_section_anyway: section prototypes. (line 100)
-* bfd_make_section_anyway_with_flags: section prototypes. (line 82)
-* bfd_make_section_old_way: section prototypes. (line 62)
-* bfd_make_section_with_flags: section prototypes. (line 116)
-* bfd_make_writable: Opening and Closing.
- (line 175)
-* bfd_malloc_and_get_section: section prototypes. (line 245)
-* bfd_map_over_sections: section prototypes. (line 155)
-* bfd_merge_private_bfd_data: BFD front end. (line 473)
-* bfd_octets_per_byte: Architectures. (line 535)
-* bfd_open_file: File Caching. (line 52)
-* bfd_openr: Opening and Closing.
- (line 30)
-* bfd_openr_iovec: Opening and Closing.
- (line 76)
-* bfd_openr_next_archived_file: Archives. (line 78)
-* bfd_openstreamr: Opening and Closing.
- (line 67)
-* bfd_openw: Opening and Closing.
- (line 116)
-* bfd_perform_relocation: typedef arelent. (line 367)
-* bfd_perror: BFD front end. (line 252)
-* bfd_preserve_finish: BFD front end. (line 647)
-* bfd_preserve_restore: BFD front end. (line 637)
-* bfd_preserve_save: BFD front end. (line 621)
-* bfd_print_symbol_vandf: symbol handling functions.
- (line 70)
-* bfd_printable_arch_mach: Architectures. (line 523)
-* bfd_printable_name: Architectures. (line 383)
-* bfd_put_size: Internal. (line 22)
-* BFD_RELOC_12_PCREL: howto manager. (line 39)
-* BFD_RELOC_14: howto manager. (line 31)
-* BFD_RELOC_16: howto manager. (line 30)
-* BFD_RELOC_16_BASEREL: howto manager. (line 80)
-* BFD_RELOC_16_GOT_PCREL: howto manager. (line 52)
-* BFD_RELOC_16_GOTOFF: howto manager. (line 55)
-* BFD_RELOC_16_PCREL: howto manager. (line 38)
-* BFD_RELOC_16_PCREL_S2: howto manager. (line 92)
-* BFD_RELOC_16_PLT_PCREL: howto manager. (line 63)
-* BFD_RELOC_16_PLTOFF: howto manager. (line 67)
-* BFD_RELOC_16C_ABS20: howto manager. (line 1655)
-* BFD_RELOC_16C_ABS20_C: howto manager. (line 1656)
-* BFD_RELOC_16C_ABS24: howto manager. (line 1657)
-* BFD_RELOC_16C_ABS24_C: howto manager. (line 1658)
-* BFD_RELOC_16C_DISP04: howto manager. (line 1635)
-* BFD_RELOC_16C_DISP04_C: howto manager. (line 1636)
-* BFD_RELOC_16C_DISP08: howto manager. (line 1637)
-* BFD_RELOC_16C_DISP08_C: howto manager. (line 1638)
-* BFD_RELOC_16C_DISP16: howto manager. (line 1639)
-* BFD_RELOC_16C_DISP16_C: howto manager. (line 1640)
-* BFD_RELOC_16C_DISP24: howto manager. (line 1641)
-* BFD_RELOC_16C_DISP24_C: howto manager. (line 1642)
-* BFD_RELOC_16C_DISP24a: howto manager. (line 1643)
-* BFD_RELOC_16C_DISP24a_C: howto manager. (line 1644)
-* BFD_RELOC_16C_IMM04: howto manager. (line 1659)
-* BFD_RELOC_16C_IMM04_C: howto manager. (line 1660)
-* BFD_RELOC_16C_IMM16: howto manager. (line 1661)
-* BFD_RELOC_16C_IMM16_C: howto manager. (line 1662)
-* BFD_RELOC_16C_IMM20: howto manager. (line 1663)
-* BFD_RELOC_16C_IMM20_C: howto manager. (line 1664)
-* BFD_RELOC_16C_IMM24: howto manager. (line 1665)
-* BFD_RELOC_16C_IMM24_C: howto manager. (line 1666)
-* BFD_RELOC_16C_IMM32: howto manager. (line 1667)
-* BFD_RELOC_16C_IMM32_C: howto manager. (line 1668)
-* BFD_RELOC_16C_NUM08: howto manager. (line 1629)
-* BFD_RELOC_16C_NUM08_C: howto manager. (line 1630)
-* BFD_RELOC_16C_NUM16: howto manager. (line 1631)
-* BFD_RELOC_16C_NUM16_C: howto manager. (line 1632)
-* BFD_RELOC_16C_NUM32: howto manager. (line 1633)
-* BFD_RELOC_16C_NUM32_C: howto manager. (line 1634)
-* BFD_RELOC_16C_REG04: howto manager. (line 1645)
-* BFD_RELOC_16C_REG04_C: howto manager. (line 1646)
-* BFD_RELOC_16C_REG04a: howto manager. (line 1647)
-* BFD_RELOC_16C_REG04a_C: howto manager. (line 1648)
-* BFD_RELOC_16C_REG14: howto manager. (line 1649)
-* BFD_RELOC_16C_REG14_C: howto manager. (line 1650)
-* BFD_RELOC_16C_REG16: howto manager. (line 1651)
-* BFD_RELOC_16C_REG16_C: howto manager. (line 1652)
-* BFD_RELOC_16C_REG20: howto manager. (line 1653)
-* BFD_RELOC_16C_REG20_C: howto manager. (line 1654)
-* BFD_RELOC_23_PCREL_S2: howto manager. (line 93)
-* BFD_RELOC_24: howto manager. (line 29)
-* BFD_RELOC_24_PCREL: howto manager. (line 37)
-* BFD_RELOC_24_PLT_PCREL: howto manager. (line 62)
-* BFD_RELOC_26: howto manager. (line 28)
-* BFD_RELOC_32: howto manager. (line 27)
-* BFD_RELOC_32_BASEREL: howto manager. (line 79)
-* BFD_RELOC_32_GOT_PCREL: howto manager. (line 51)
-* BFD_RELOC_32_GOTOFF: howto manager. (line 54)
-* BFD_RELOC_32_PCREL: howto manager. (line 36)
-* BFD_RELOC_32_PCREL_S2: howto manager. (line 91)
-* BFD_RELOC_32_PLT_PCREL: howto manager. (line 61)
-* BFD_RELOC_32_PLTOFF: howto manager. (line 66)
-* BFD_RELOC_32_SECREL: howto manager. (line 48)
-* BFD_RELOC_386_COPY: howto manager. (line 435)
-* BFD_RELOC_386_GLOB_DAT: howto manager. (line 436)
-* BFD_RELOC_386_GOT32: howto manager. (line 433)
-* BFD_RELOC_386_GOTOFF: howto manager. (line 439)
-* BFD_RELOC_386_GOTPC: howto manager. (line 440)
-* BFD_RELOC_386_JUMP_SLOT: howto manager. (line 437)
-* BFD_RELOC_386_PLT32: howto manager. (line 434)
-* BFD_RELOC_386_RELATIVE: howto manager. (line 438)
-* BFD_RELOC_386_TLS_DESC: howto manager. (line 455)
-* BFD_RELOC_386_TLS_DESC_CALL: howto manager. (line 454)
-* BFD_RELOC_386_TLS_DTPMOD32: howto manager. (line 450)
-* BFD_RELOC_386_TLS_DTPOFF32: howto manager. (line 451)
-* BFD_RELOC_386_TLS_GD: howto manager. (line 445)
-* BFD_RELOC_386_TLS_GOTDESC: howto manager. (line 453)
-* BFD_RELOC_386_TLS_GOTIE: howto manager. (line 443)
-* BFD_RELOC_386_TLS_IE: howto manager. (line 442)
-* BFD_RELOC_386_TLS_IE_32: howto manager. (line 448)
-* BFD_RELOC_386_TLS_LDM: howto manager. (line 446)
-* BFD_RELOC_386_TLS_LDO_32: howto manager. (line 447)
-* BFD_RELOC_386_TLS_LE: howto manager. (line 444)
-* BFD_RELOC_386_TLS_LE_32: howto manager. (line 449)
-* BFD_RELOC_386_TLS_TPOFF: howto manager. (line 441)
-* BFD_RELOC_386_TLS_TPOFF32: howto manager. (line 452)
-* BFD_RELOC_390_12: howto manager. (line 1346)
-* BFD_RELOC_390_20: howto manager. (line 1446)
-* BFD_RELOC_390_COPY: howto manager. (line 1355)
-* BFD_RELOC_390_GLOB_DAT: howto manager. (line 1358)
-* BFD_RELOC_390_GOT12: howto manager. (line 1349)
-* BFD_RELOC_390_GOT16: howto manager. (line 1370)
-* BFD_RELOC_390_GOT20: howto manager. (line 1447)
-* BFD_RELOC_390_GOT64: howto manager. (line 1388)
-* BFD_RELOC_390_GOTENT: howto manager. (line 1394)
-* BFD_RELOC_390_GOTOFF64: howto manager. (line 1397)
-* BFD_RELOC_390_GOTPC: howto manager. (line 1367)
-* BFD_RELOC_390_GOTPCDBL: howto manager. (line 1385)
-* BFD_RELOC_390_GOTPLT12: howto manager. (line 1400)
-* BFD_RELOC_390_GOTPLT16: howto manager. (line 1403)
-* BFD_RELOC_390_GOTPLT20: howto manager. (line 1448)
-* BFD_RELOC_390_GOTPLT32: howto manager. (line 1406)
-* BFD_RELOC_390_GOTPLT64: howto manager. (line 1409)
-* BFD_RELOC_390_GOTPLTENT: howto manager. (line 1412)
-* BFD_RELOC_390_JMP_SLOT: howto manager. (line 1361)
-* BFD_RELOC_390_PC16DBL: howto manager. (line 1373)
-* BFD_RELOC_390_PC32DBL: howto manager. (line 1379)
-* BFD_RELOC_390_PLT16DBL: howto manager. (line 1376)
-* BFD_RELOC_390_PLT32: howto manager. (line 1352)
-* BFD_RELOC_390_PLT32DBL: howto manager. (line 1382)
-* BFD_RELOC_390_PLT64: howto manager. (line 1391)
-* BFD_RELOC_390_PLTOFF16: howto manager. (line 1415)
-* BFD_RELOC_390_PLTOFF32: howto manager. (line 1418)
-* BFD_RELOC_390_PLTOFF64: howto manager. (line 1421)
-* BFD_RELOC_390_RELATIVE: howto manager. (line 1364)
-* BFD_RELOC_390_TLS_DTPMOD: howto manager. (line 1441)
-* BFD_RELOC_390_TLS_DTPOFF: howto manager. (line 1442)
-* BFD_RELOC_390_TLS_GD32: howto manager. (line 1427)
-* BFD_RELOC_390_TLS_GD64: howto manager. (line 1428)
-* BFD_RELOC_390_TLS_GDCALL: howto manager. (line 1425)
-* BFD_RELOC_390_TLS_GOTIE12: howto manager. (line 1429)
-* BFD_RELOC_390_TLS_GOTIE20: howto manager. (line 1449)
-* BFD_RELOC_390_TLS_GOTIE32: howto manager. (line 1430)
-* BFD_RELOC_390_TLS_GOTIE64: howto manager. (line 1431)
-* BFD_RELOC_390_TLS_IE32: howto manager. (line 1434)
-* BFD_RELOC_390_TLS_IE64: howto manager. (line 1435)
-* BFD_RELOC_390_TLS_IEENT: howto manager. (line 1436)
-* BFD_RELOC_390_TLS_LDCALL: howto manager. (line 1426)
-* BFD_RELOC_390_TLS_LDM32: howto manager. (line 1432)
-* BFD_RELOC_390_TLS_LDM64: howto manager. (line 1433)
-* BFD_RELOC_390_TLS_LDO32: howto manager. (line 1439)
-* BFD_RELOC_390_TLS_LDO64: howto manager. (line 1440)
-* BFD_RELOC_390_TLS_LE32: howto manager. (line 1437)
-* BFD_RELOC_390_TLS_LE64: howto manager. (line 1438)
-* BFD_RELOC_390_TLS_LOAD: howto manager. (line 1424)
-* BFD_RELOC_390_TLS_TPOFF: howto manager. (line 1443)
-* BFD_RELOC_64: howto manager. (line 26)
-* BFD_RELOC_64_PCREL: howto manager. (line 35)
-* BFD_RELOC_64_PLT_PCREL: howto manager. (line 60)
-* BFD_RELOC_64_PLTOFF: howto manager. (line 65)
-* BFD_RELOC_68K_GLOB_DAT: howto manager. (line 74)
-* BFD_RELOC_68K_JMP_SLOT: howto manager. (line 75)
-* BFD_RELOC_68K_RELATIVE: howto manager. (line 76)
-* BFD_RELOC_8: howto manager. (line 32)
-* BFD_RELOC_860_COPY: howto manager. (line 1734)
-* BFD_RELOC_860_GLOB_DAT: howto manager. (line 1735)
-* BFD_RELOC_860_HAGOT: howto manager. (line 1760)
-* BFD_RELOC_860_HAGOTOFF: howto manager. (line 1761)
-* BFD_RELOC_860_HAPC: howto manager. (line 1762)
-* BFD_RELOC_860_HIGH: howto manager. (line 1763)
-* BFD_RELOC_860_HIGHADJ: howto manager. (line 1759)
-* BFD_RELOC_860_HIGOT: howto manager. (line 1764)
-* BFD_RELOC_860_HIGOTOFF: howto manager. (line 1765)
-* BFD_RELOC_860_JUMP_SLOT: howto manager. (line 1736)
-* BFD_RELOC_860_LOGOT0: howto manager. (line 1748)
-* BFD_RELOC_860_LOGOT1: howto manager. (line 1750)
-* BFD_RELOC_860_LOGOTOFF0: howto manager. (line 1752)
-* BFD_RELOC_860_LOGOTOFF1: howto manager. (line 1754)
-* BFD_RELOC_860_LOGOTOFF2: howto manager. (line 1756)
-* BFD_RELOC_860_LOGOTOFF3: howto manager. (line 1757)
-* BFD_RELOC_860_LOPC: howto manager. (line 1758)
-* BFD_RELOC_860_LOW0: howto manager. (line 1741)
-* BFD_RELOC_860_LOW1: howto manager. (line 1743)
-* BFD_RELOC_860_LOW2: howto manager. (line 1745)
-* BFD_RELOC_860_LOW3: howto manager. (line 1747)
-* BFD_RELOC_860_PC16: howto manager. (line 1740)
-* BFD_RELOC_860_PC26: howto manager. (line 1738)
-* BFD_RELOC_860_PLT26: howto manager. (line 1739)
-* BFD_RELOC_860_RELATIVE: howto manager. (line 1737)
-* BFD_RELOC_860_SPGOT0: howto manager. (line 1749)
-* BFD_RELOC_860_SPGOT1: howto manager. (line 1751)
-* BFD_RELOC_860_SPGOTOFF0: howto manager. (line 1753)
-* BFD_RELOC_860_SPGOTOFF1: howto manager. (line 1755)
-* BFD_RELOC_860_SPLIT0: howto manager. (line 1742)
-* BFD_RELOC_860_SPLIT1: howto manager. (line 1744)
-* BFD_RELOC_860_SPLIT2: howto manager. (line 1746)
-* BFD_RELOC_8_BASEREL: howto manager. (line 84)
-* BFD_RELOC_8_FFnn: howto manager. (line 88)
-* BFD_RELOC_8_GOT_PCREL: howto manager. (line 53)
-* BFD_RELOC_8_GOTOFF: howto manager. (line 59)
-* BFD_RELOC_8_PCREL: howto manager. (line 40)
-* BFD_RELOC_8_PLT_PCREL: howto manager. (line 64)
-* BFD_RELOC_8_PLTOFF: howto manager. (line 71)
-* BFD_RELOC_ALPHA_BRSGP: howto manager. (line 259)
-* BFD_RELOC_ALPHA_CODEADDR: howto manager. (line 250)
-* BFD_RELOC_ALPHA_DTPMOD64: howto manager. (line 266)
-* BFD_RELOC_ALPHA_DTPREL16: howto manager. (line 271)
-* BFD_RELOC_ALPHA_DTPREL64: howto manager. (line 268)
-* BFD_RELOC_ALPHA_DTPREL_HI16: howto manager. (line 269)
-* BFD_RELOC_ALPHA_DTPREL_LO16: howto manager. (line 270)
-* BFD_RELOC_ALPHA_ELF_LITERAL: howto manager. (line 215)
-* BFD_RELOC_ALPHA_GOTDTPREL16: howto manager. (line 267)
-* BFD_RELOC_ALPHA_GOTTPREL16: howto manager. (line 272)
-* BFD_RELOC_ALPHA_GPDISP: howto manager. (line 209)
-* BFD_RELOC_ALPHA_GPDISP_HI16: howto manager. (line 195)
-* BFD_RELOC_ALPHA_GPDISP_LO16: howto manager. (line 203)
-* BFD_RELOC_ALPHA_GPREL_HI16: howto manager. (line 254)
-* BFD_RELOC_ALPHA_GPREL_LO16: howto manager. (line 255)
-* BFD_RELOC_ALPHA_HINT: howto manager. (line 241)
-* BFD_RELOC_ALPHA_LINKAGE: howto manager. (line 246)
-* BFD_RELOC_ALPHA_LITERAL: howto manager. (line 214)
-* BFD_RELOC_ALPHA_LITUSE: howto manager. (line 216)
-* BFD_RELOC_ALPHA_TLSGD: howto manager. (line 264)
-* BFD_RELOC_ALPHA_TLSLDM: howto manager. (line 265)
-* BFD_RELOC_ALPHA_TPREL16: howto manager. (line 276)
-* BFD_RELOC_ALPHA_TPREL64: howto manager. (line 273)
-* BFD_RELOC_ALPHA_TPREL_HI16: howto manager. (line 274)
-* BFD_RELOC_ALPHA_TPREL_LO16: howto manager. (line 275)
-* BFD_RELOC_ARC_B22_PCREL: howto manager. (line 816)
-* BFD_RELOC_ARC_B26: howto manager. (line 821)
-* BFD_RELOC_ARM_ADR_IMM: howto manager. (line 709)
-* BFD_RELOC_ARM_ADRL_IMMEDIATE: howto manager. (line 697)
-* BFD_RELOC_ARM_CP_OFF_IMM: howto manager. (line 705)
-* BFD_RELOC_ARM_CP_OFF_IMM_S2: howto manager. (line 706)
-* BFD_RELOC_ARM_GLOB_DAT: howto manager. (line 678)
-* BFD_RELOC_ARM_GOT32: howto manager. (line 679)
-* BFD_RELOC_ARM_GOTOFF: howto manager. (line 682)
-* BFD_RELOC_ARM_GOTPC: howto manager. (line 683)
-* BFD_RELOC_ARM_HWLITERAL: howto manager. (line 716)
-* BFD_RELOC_ARM_IMMEDIATE: howto manager. (line 696)
-* BFD_RELOC_ARM_IN_POOL: howto manager. (line 712)
-* BFD_RELOC_ARM_JUMP_SLOT: howto manager. (line 677)
-* BFD_RELOC_ARM_LDR_IMM: howto manager. (line 710)
-* BFD_RELOC_ARM_LITERAL: howto manager. (line 711)
-* BFD_RELOC_ARM_MULTI: howto manager. (line 704)
-* BFD_RELOC_ARM_OFFSET_IMM: howto manager. (line 651)
-* BFD_RELOC_ARM_OFFSET_IMM8: howto manager. (line 713)
-* BFD_RELOC_ARM_PCREL_BLX: howto manager. (line 622)
-* BFD_RELOC_ARM_PCREL_BRANCH: howto manager. (line 618)
-* BFD_RELOC_ARM_PCREL_CALL: howto manager. (line 632)
-* BFD_RELOC_ARM_PCREL_JUMP: howto manager. (line 636)
-* BFD_RELOC_ARM_PLT32: howto manager. (line 680)
-* BFD_RELOC_ARM_PREL31: howto manager. (line 674)
-* BFD_RELOC_ARM_RELATIVE: howto manager. (line 681)
-* BFD_RELOC_ARM_ROSEGREL32: howto manager. (line 663)
-* BFD_RELOC_ARM_SBREL32: howto manager. (line 666)
-* BFD_RELOC_ARM_SHIFT_IMM: howto manager. (line 701)
-* BFD_RELOC_ARM_SMC: howto manager. (line 702)
-* BFD_RELOC_ARM_SWI: howto manager. (line 703)
-* BFD_RELOC_ARM_T32_ADD_PC12: howto manager. (line 700)
-* BFD_RELOC_ARM_T32_CP_OFF_IMM: howto manager. (line 707)
-* BFD_RELOC_ARM_T32_CP_OFF_IMM_S2: howto manager. (line 708)
-* BFD_RELOC_ARM_T32_IMM12: howto manager. (line 699)
-* BFD_RELOC_ARM_T32_IMMEDIATE: howto manager. (line 698)
-* BFD_RELOC_ARM_T32_OFFSET_IMM: howto manager. (line 715)
-* BFD_RELOC_ARM_T32_OFFSET_U8: howto manager. (line 714)
-* BFD_RELOC_ARM_TARGET1: howto manager. (line 659)
-* BFD_RELOC_ARM_TARGET2: howto manager. (line 669)
-* BFD_RELOC_ARM_THUMB_ADD: howto manager. (line 717)
-* BFD_RELOC_ARM_THUMB_IMM: howto manager. (line 718)
-* BFD_RELOC_ARM_THUMB_OFFSET: howto manager. (line 655)
-* BFD_RELOC_ARM_THUMB_SHIFT: howto manager. (line 719)
-* BFD_RELOC_ARM_TLS_DTPMOD32: howto manager. (line 690)
-* BFD_RELOC_ARM_TLS_DTPOFF32: howto manager. (line 689)
-* BFD_RELOC_ARM_TLS_GD32: howto manager. (line 686)
-* BFD_RELOC_ARM_TLS_IE32: howto manager. (line 692)
-* BFD_RELOC_ARM_TLS_LDM32: howto manager. (line 688)
-* BFD_RELOC_ARM_TLS_LDO32: howto manager. (line 687)
-* BFD_RELOC_ARM_TLS_LE32: howto manager. (line 693)
-* BFD_RELOC_ARM_TLS_TPOFF32: howto manager. (line 691)
-* BFD_RELOC_AVR_13_PCREL: howto manager. (line 1259)
-* BFD_RELOC_AVR_16_PM: howto manager. (line 1263)
-* BFD_RELOC_AVR_6: howto manager. (line 1338)
-* BFD_RELOC_AVR_6_ADIW: howto manager. (line 1342)
-* BFD_RELOC_AVR_7_PCREL: howto manager. (line 1255)
-* BFD_RELOC_AVR_CALL: howto manager. (line 1330)
-* BFD_RELOC_AVR_HH8_LDI: howto manager. (line 1275)
-* BFD_RELOC_AVR_HH8_LDI_NEG: howto manager. (line 1294)
-* BFD_RELOC_AVR_HH8_LDI_PM: howto manager. (line 1311)
-* BFD_RELOC_AVR_HH8_LDI_PM_NEG: howto manager. (line 1325)
-* BFD_RELOC_AVR_HI8_LDI: howto manager. (line 1271)
-* BFD_RELOC_AVR_HI8_LDI_NEG: howto manager. (line 1289)
-* BFD_RELOC_AVR_HI8_LDI_PM: howto manager. (line 1307)
-* BFD_RELOC_AVR_HI8_LDI_PM_NEG: howto manager. (line 1320)
-* BFD_RELOC_AVR_LDI: howto manager. (line 1334)
-* BFD_RELOC_AVR_LO8_LDI: howto manager. (line 1267)
-* BFD_RELOC_AVR_LO8_LDI_NEG: howto manager. (line 1284)
-* BFD_RELOC_AVR_LO8_LDI_PM: howto manager. (line 1303)
-* BFD_RELOC_AVR_LO8_LDI_PM_NEG: howto manager. (line 1316)
-* BFD_RELOC_AVR_MS8_LDI: howto manager. (line 1280)
-* BFD_RELOC_AVR_MS8_LDI_NEG: howto manager. (line 1299)
-* BFD_RELOC_BFIN_10_PCREL: howto manager. (line 841)
-* BFD_RELOC_BFIN_11_PCREL: howto manager. (line 844)
-* BFD_RELOC_BFIN_12_PCREL_JUMP: howto manager. (line 847)
-* BFD_RELOC_BFIN_12_PCREL_JUMP_S: howto manager. (line 850)
-* BFD_RELOC_BFIN_16_HIGH: howto manager. (line 829)
-* BFD_RELOC_BFIN_16_IMM: howto manager. (line 826)
-* BFD_RELOC_BFIN_16_LOW: howto manager. (line 838)
-* BFD_RELOC_BFIN_24_PCREL_CALL_X: howto manager. (line 853)
-* BFD_RELOC_BFIN_24_PCREL_JUMP_L: howto manager. (line 856)
-* BFD_RELOC_BFIN_4_PCREL: howto manager. (line 832)
-* BFD_RELOC_BFIN_5_PCREL: howto manager. (line 835)
-* BFD_RELOC_BFIN_FUNCDESC: howto manager. (line 862)
-* BFD_RELOC_BFIN_FUNCDESC_GOT17M4: howto manager. (line 863)
-* BFD_RELOC_BFIN_FUNCDESC_GOTHI: howto manager. (line 864)
-* BFD_RELOC_BFIN_FUNCDESC_GOTLO: howto manager. (line 865)
-* BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4: howto manager. (line 867)
-* BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI: howto manager. (line 868)
-* BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO: howto manager. (line 869)
-* BFD_RELOC_BFIN_FUNCDESC_VALUE: howto manager. (line 866)
-* BFD_RELOC_BFIN_GOT: howto manager. (line 875)
-* BFD_RELOC_BFIN_GOT17M4: howto manager. (line 859)
-* BFD_RELOC_BFIN_GOTHI: howto manager. (line 860)
-* BFD_RELOC_BFIN_GOTLO: howto manager. (line 861)
-* BFD_RELOC_BFIN_GOTOFF17M4: howto manager. (line 870)
-* BFD_RELOC_BFIN_GOTOFFHI: howto manager. (line 871)
-* BFD_RELOC_BFIN_GOTOFFLO: howto manager. (line 872)
-* BFD_RELOC_BFIN_PLTPC: howto manager. (line 878)
-* bfd_reloc_code_type: howto manager. (line 10)
-* BFD_RELOC_CRIS_16_GOT: howto manager. (line 1715)
-* BFD_RELOC_CRIS_16_GOTPLT: howto manager. (line 1721)
-* BFD_RELOC_CRIS_32_GOT: howto manager. (line 1712)
-* BFD_RELOC_CRIS_32_GOTPLT: howto manager. (line 1718)
-* BFD_RELOC_CRIS_32_GOTREL: howto manager. (line 1724)
-* BFD_RELOC_CRIS_32_PLT_GOTREL: howto manager. (line 1727)
-* BFD_RELOC_CRIS_32_PLT_PCREL: howto manager. (line 1730)
-* BFD_RELOC_CRIS_BDISP8: howto manager. (line 1693)
-* BFD_RELOC_CRIS_COPY: howto manager. (line 1706)
-* BFD_RELOC_CRIS_GLOB_DAT: howto manager. (line 1707)
-* BFD_RELOC_CRIS_JUMP_SLOT: howto manager. (line 1708)
-* BFD_RELOC_CRIS_LAPCQ_OFFSET: howto manager. (line 1701)
-* BFD_RELOC_CRIS_RELATIVE: howto manager. (line 1709)
-* BFD_RELOC_CRIS_SIGNED_16: howto manager. (line 1699)
-* BFD_RELOC_CRIS_SIGNED_6: howto manager. (line 1695)
-* BFD_RELOC_CRIS_SIGNED_8: howto manager. (line 1697)
-* BFD_RELOC_CRIS_UNSIGNED_16: howto manager. (line 1700)
-* BFD_RELOC_CRIS_UNSIGNED_4: howto manager. (line 1702)
-* BFD_RELOC_CRIS_UNSIGNED_5: howto manager. (line 1694)
-* BFD_RELOC_CRIS_UNSIGNED_6: howto manager. (line 1696)
-* BFD_RELOC_CRIS_UNSIGNED_8: howto manager. (line 1698)
-* BFD_RELOC_CRX_ABS16: howto manager. (line 1681)
-* BFD_RELOC_CRX_ABS32: howto manager. (line 1682)
-* BFD_RELOC_CRX_IMM16: howto manager. (line 1686)
-* BFD_RELOC_CRX_IMM32: howto manager. (line 1687)
-* BFD_RELOC_CRX_NUM16: howto manager. (line 1684)
-* BFD_RELOC_CRX_NUM32: howto manager. (line 1685)
-* BFD_RELOC_CRX_NUM8: howto manager. (line 1683)
-* BFD_RELOC_CRX_REGREL12: howto manager. (line 1677)
-* BFD_RELOC_CRX_REGREL22: howto manager. (line 1678)
-* BFD_RELOC_CRX_REGREL28: howto manager. (line 1679)
-* BFD_RELOC_CRX_REGREL32: howto manager. (line 1680)
-* BFD_RELOC_CRX_REL16: howto manager. (line 1674)
-* BFD_RELOC_CRX_REL24: howto manager. (line 1675)
-* BFD_RELOC_CRX_REL32: howto manager. (line 1676)
-* BFD_RELOC_CRX_REL4: howto manager. (line 1671)
-* BFD_RELOC_CRX_REL8: howto manager. (line 1672)
-* BFD_RELOC_CRX_REL8_CMP: howto manager. (line 1673)
-* BFD_RELOC_CRX_SWITCH16: howto manager. (line 1689)
-* BFD_RELOC_CRX_SWITCH32: howto manager. (line 1690)
-* BFD_RELOC_CRX_SWITCH8: howto manager. (line 1688)
-* BFD_RELOC_CTOR: howto manager. (line 612)
-* BFD_RELOC_D10V_10_PCREL_L: howto manager. (line 945)
-* BFD_RELOC_D10V_10_PCREL_R: howto manager. (line 941)
-* BFD_RELOC_D10V_18: howto manager. (line 950)
-* BFD_RELOC_D10V_18_PCREL: howto manager. (line 953)
-* BFD_RELOC_D30V_15: howto manager. (line 968)
-* BFD_RELOC_D30V_15_PCREL: howto manager. (line 972)
-* BFD_RELOC_D30V_15_PCREL_R: howto manager. (line 976)
-* BFD_RELOC_D30V_21: howto manager. (line 981)
-* BFD_RELOC_D30V_21_PCREL: howto manager. (line 985)
-* BFD_RELOC_D30V_21_PCREL_R: howto manager. (line 989)
-* BFD_RELOC_D30V_32: howto manager. (line 994)
-* BFD_RELOC_D30V_32_PCREL: howto manager. (line 997)
-* BFD_RELOC_D30V_6: howto manager. (line 956)
-* BFD_RELOC_D30V_9_PCREL: howto manager. (line 959)
-* BFD_RELOC_D30V_9_PCREL_R: howto manager. (line 963)
-* BFD_RELOC_DLX_HI16_S: howto manager. (line 1000)
-* BFD_RELOC_DLX_JMP26: howto manager. (line 1006)
-* BFD_RELOC_DLX_LO16: howto manager. (line 1003)
-* BFD_RELOC_FR30_10_IN_8: howto manager. (line 1185)
-* BFD_RELOC_FR30_12_PCREL: howto manager. (line 1193)
-* BFD_RELOC_FR30_20: howto manager. (line 1169)
-* BFD_RELOC_FR30_48: howto manager. (line 1166)
-* BFD_RELOC_FR30_6_IN_4: howto manager. (line 1173)
-* BFD_RELOC_FR30_8_IN_8: howto manager. (line 1177)
-* BFD_RELOC_FR30_9_IN_8: howto manager. (line 1181)
-* BFD_RELOC_FR30_9_PCREL: howto manager. (line 1189)
-* BFD_RELOC_FRV_FUNCDESC: howto manager. (line 377)
-* BFD_RELOC_FRV_FUNCDESC_GOT12: howto manager. (line 378)
-* BFD_RELOC_FRV_FUNCDESC_GOTHI: howto manager. (line 379)
-* BFD_RELOC_FRV_FUNCDESC_GOTLO: howto manager. (line 380)
-* BFD_RELOC_FRV_FUNCDESC_GOTOFF12: howto manager. (line 382)
-* BFD_RELOC_FRV_FUNCDESC_GOTOFFHI: howto manager. (line 383)
-* BFD_RELOC_FRV_FUNCDESC_GOTOFFLO: howto manager. (line 384)
-* BFD_RELOC_FRV_FUNCDESC_VALUE: howto manager. (line 381)
-* BFD_RELOC_FRV_GETTLSOFF: howto manager. (line 388)
-* BFD_RELOC_FRV_GETTLSOFF_RELAX: howto manager. (line 401)
-* BFD_RELOC_FRV_GOT12: howto manager. (line 374)
-* BFD_RELOC_FRV_GOTHI: howto manager. (line 375)
-* BFD_RELOC_FRV_GOTLO: howto manager. (line 376)
-* BFD_RELOC_FRV_GOTOFF12: howto manager. (line 385)
-* BFD_RELOC_FRV_GOTOFFHI: howto manager. (line 386)
-* BFD_RELOC_FRV_GOTOFFLO: howto manager. (line 387)
-* BFD_RELOC_FRV_GOTTLSDESC12: howto manager. (line 390)
-* BFD_RELOC_FRV_GOTTLSDESCHI: howto manager. (line 391)
-* BFD_RELOC_FRV_GOTTLSDESCLO: howto manager. (line 392)
-* BFD_RELOC_FRV_GOTTLSOFF12: howto manager. (line 396)
-* BFD_RELOC_FRV_GOTTLSOFFHI: howto manager. (line 397)
-* BFD_RELOC_FRV_GOTTLSOFFLO: howto manager. (line 398)
-* BFD_RELOC_FRV_GPREL12: howto manager. (line 369)
-* BFD_RELOC_FRV_GPREL32: howto manager. (line 371)
-* BFD_RELOC_FRV_GPRELHI: howto manager. (line 372)
-* BFD_RELOC_FRV_GPRELLO: howto manager. (line 373)
-* BFD_RELOC_FRV_GPRELU12: howto manager. (line 370)
-* BFD_RELOC_FRV_HI16: howto manager. (line 368)
-* BFD_RELOC_FRV_LABEL16: howto manager. (line 365)
-* BFD_RELOC_FRV_LABEL24: howto manager. (line 366)
-* BFD_RELOC_FRV_LO16: howto manager. (line 367)
-* BFD_RELOC_FRV_TLSDESC_RELAX: howto manager. (line 400)
-* BFD_RELOC_FRV_TLSDESC_VALUE: howto manager. (line 389)
-* BFD_RELOC_FRV_TLSMOFF: howto manager. (line 403)
-* BFD_RELOC_FRV_TLSMOFF12: howto manager. (line 393)
-* BFD_RELOC_FRV_TLSMOFFHI: howto manager. (line 394)
-* BFD_RELOC_FRV_TLSMOFFLO: howto manager. (line 395)
-* BFD_RELOC_FRV_TLSOFF: howto manager. (line 399)
-* BFD_RELOC_FRV_TLSOFF_RELAX: howto manager. (line 402)
-* BFD_RELOC_GPREL16: howto manager. (line 106)
-* BFD_RELOC_GPREL32: howto manager. (line 107)
-* BFD_RELOC_H8_DIR16A8: howto manager. (line 1772)
-* BFD_RELOC_H8_DIR16R8: howto manager. (line 1773)
-* BFD_RELOC_H8_DIR24A8: howto manager. (line 1774)
-* BFD_RELOC_H8_DIR24R8: howto manager. (line 1775)
-* BFD_RELOC_H8_DIR32A16: howto manager. (line 1776)
-* BFD_RELOC_HI16: howto manager. (line 289)
-* BFD_RELOC_HI16_BASEREL: howto manager. (line 82)
-* BFD_RELOC_HI16_GOTOFF: howto manager. (line 57)
-* BFD_RELOC_HI16_PCREL: howto manager. (line 301)
-* BFD_RELOC_HI16_PLTOFF: howto manager. (line 69)
-* BFD_RELOC_HI16_S: howto manager. (line 292)
-* BFD_RELOC_HI16_S_BASEREL: howto manager. (line 83)
-* BFD_RELOC_HI16_S_GOTOFF: howto manager. (line 58)
-* BFD_RELOC_HI16_S_PCREL: howto manager. (line 304)
-* BFD_RELOC_HI16_S_PLTOFF: howto manager. (line 70)
-* BFD_RELOC_HI22: howto manager. (line 101)
-* BFD_RELOC_I370_D12: howto manager. (line 609)
-* BFD_RELOC_I960_CALLJ: howto manager. (line 113)
-* BFD_RELOC_IA64_COPY: howto manager. (line 1565)
-* BFD_RELOC_IA64_DIR32LSB: howto manager. (line 1510)
-* BFD_RELOC_IA64_DIR32MSB: howto manager. (line 1509)
-* BFD_RELOC_IA64_DIR64LSB: howto manager. (line 1512)
-* BFD_RELOC_IA64_DIR64MSB: howto manager. (line 1511)
-* BFD_RELOC_IA64_DTPMOD64LSB: howto manager. (line 1575)
-* BFD_RELOC_IA64_DTPMOD64MSB: howto manager. (line 1574)
-* BFD_RELOC_IA64_DTPREL14: howto manager. (line 1577)
-* BFD_RELOC_IA64_DTPREL22: howto manager. (line 1578)
-* BFD_RELOC_IA64_DTPREL32LSB: howto manager. (line 1581)
-* BFD_RELOC_IA64_DTPREL32MSB: howto manager. (line 1580)
-* BFD_RELOC_IA64_DTPREL64I: howto manager. (line 1579)
-* BFD_RELOC_IA64_DTPREL64LSB: howto manager. (line 1583)
-* BFD_RELOC_IA64_DTPREL64MSB: howto manager. (line 1582)
-* BFD_RELOC_IA64_FPTR32LSB: howto manager. (line 1527)
-* BFD_RELOC_IA64_FPTR32MSB: howto manager. (line 1526)
-* BFD_RELOC_IA64_FPTR64I: howto manager. (line 1525)
-* BFD_RELOC_IA64_FPTR64LSB: howto manager. (line 1529)
-* BFD_RELOC_IA64_FPTR64MSB: howto manager. (line 1528)
-* BFD_RELOC_IA64_GPREL22: howto manager. (line 1513)
-* BFD_RELOC_IA64_GPREL32LSB: howto manager. (line 1516)
-* BFD_RELOC_IA64_GPREL32MSB: howto manager. (line 1515)
-* BFD_RELOC_IA64_GPREL64I: howto manager. (line 1514)
-* BFD_RELOC_IA64_GPREL64LSB: howto manager. (line 1518)
-* BFD_RELOC_IA64_GPREL64MSB: howto manager. (line 1517)
-* BFD_RELOC_IA64_IMM14: howto manager. (line 1506)
-* BFD_RELOC_IA64_IMM22: howto manager. (line 1507)
-* BFD_RELOC_IA64_IMM64: howto manager. (line 1508)
-* BFD_RELOC_IA64_IPLTLSB: howto manager. (line 1564)
-* BFD_RELOC_IA64_IPLTMSB: howto manager. (line 1563)
-* BFD_RELOC_IA64_LDXMOV: howto manager. (line 1567)
-* BFD_RELOC_IA64_LTOFF22: howto manager. (line 1519)
-* BFD_RELOC_IA64_LTOFF22X: howto manager. (line 1566)
-* BFD_RELOC_IA64_LTOFF64I: howto manager. (line 1520)
-* BFD_RELOC_IA64_LTOFF_DTPMOD22: howto manager. (line 1576)
-* BFD_RELOC_IA64_LTOFF_DTPREL22: howto manager. (line 1584)
-* BFD_RELOC_IA64_LTOFF_FPTR22: howto manager. (line 1541)
-* BFD_RELOC_IA64_LTOFF_FPTR32LSB: howto manager. (line 1544)
-* BFD_RELOC_IA64_LTOFF_FPTR32MSB: howto manager. (line 1543)
-* BFD_RELOC_IA64_LTOFF_FPTR64I: howto manager. (line 1542)
-* BFD_RELOC_IA64_LTOFF_FPTR64LSB: howto manager. (line 1546)
-* BFD_RELOC_IA64_LTOFF_FPTR64MSB: howto manager. (line 1545)
-* BFD_RELOC_IA64_LTOFF_TPREL22: howto manager. (line 1573)
-* BFD_RELOC_IA64_LTV32LSB: howto manager. (line 1560)
-* BFD_RELOC_IA64_LTV32MSB: howto manager. (line 1559)
-* BFD_RELOC_IA64_LTV64LSB: howto manager. (line 1562)
-* BFD_RELOC_IA64_LTV64MSB: howto manager. (line 1561)
-* BFD_RELOC_IA64_PCREL21B: howto manager. (line 1530)
-* BFD_RELOC_IA64_PCREL21BI: howto manager. (line 1531)
-* BFD_RELOC_IA64_PCREL21F: howto manager. (line 1533)
-* BFD_RELOC_IA64_PCREL21M: howto manager. (line 1532)
-* BFD_RELOC_IA64_PCREL22: howto manager. (line 1534)
-* BFD_RELOC_IA64_PCREL32LSB: howto manager. (line 1538)
-* BFD_RELOC_IA64_PCREL32MSB: howto manager. (line 1537)
-* BFD_RELOC_IA64_PCREL60B: howto manager. (line 1535)
-* BFD_RELOC_IA64_PCREL64I: howto manager. (line 1536)
-* BFD_RELOC_IA64_PCREL64LSB: howto manager. (line 1540)
-* BFD_RELOC_IA64_PCREL64MSB: howto manager. (line 1539)
-* BFD_RELOC_IA64_PLTOFF22: howto manager. (line 1521)
-* BFD_RELOC_IA64_PLTOFF64I: howto manager. (line 1522)
-* BFD_RELOC_IA64_PLTOFF64LSB: howto manager. (line 1524)
-* BFD_RELOC_IA64_PLTOFF64MSB: howto manager. (line 1523)
-* BFD_RELOC_IA64_REL32LSB: howto manager. (line 1556)
-* BFD_RELOC_IA64_REL32MSB: howto manager. (line 1555)
-* BFD_RELOC_IA64_REL64LSB: howto manager. (line 1558)
-* BFD_RELOC_IA64_REL64MSB: howto manager. (line 1557)
-* BFD_RELOC_IA64_SECREL32LSB: howto manager. (line 1552)
-* BFD_RELOC_IA64_SECREL32MSB: howto manager. (line 1551)
-* BFD_RELOC_IA64_SECREL64LSB: howto manager. (line 1554)
-* BFD_RELOC_IA64_SECREL64MSB: howto manager. (line 1553)
-* BFD_RELOC_IA64_SEGREL32LSB: howto manager. (line 1548)
-* BFD_RELOC_IA64_SEGREL32MSB: howto manager. (line 1547)
-* BFD_RELOC_IA64_SEGREL64LSB: howto manager. (line 1550)
-* BFD_RELOC_IA64_SEGREL64MSB: howto manager. (line 1549)
-* BFD_RELOC_IA64_TPREL14: howto manager. (line 1568)
-* BFD_RELOC_IA64_TPREL22: howto manager. (line 1569)
-* BFD_RELOC_IA64_TPREL64I: howto manager. (line 1570)
-* BFD_RELOC_IA64_TPREL64LSB: howto manager. (line 1572)
-* BFD_RELOC_IA64_TPREL64MSB: howto manager. (line 1571)
-* BFD_RELOC_IP2K_ADDR16CJP: howto manager. (line 1458)
-* BFD_RELOC_IP2K_BANK: howto manager. (line 1455)
-* BFD_RELOC_IP2K_EX8DATA: howto manager. (line 1466)
-* BFD_RELOC_IP2K_FR9: howto manager. (line 1452)
-* BFD_RELOC_IP2K_FR_OFFSET: howto manager. (line 1479)
-* BFD_RELOC_IP2K_HI8DATA: howto manager. (line 1465)
-* BFD_RELOC_IP2K_HI8INSN: howto manager. (line 1470)
-* BFD_RELOC_IP2K_LO8DATA: howto manager. (line 1464)
-* BFD_RELOC_IP2K_LO8INSN: howto manager. (line 1469)
-* BFD_RELOC_IP2K_PAGE3: howto manager. (line 1461)
-* BFD_RELOC_IP2K_PC_SKIP: howto manager. (line 1473)
-* BFD_RELOC_IP2K_TEXT: howto manager. (line 1476)
-* BFD_RELOC_IQ2000_OFFSET_16: howto manager. (line 1823)
-* BFD_RELOC_IQ2000_OFFSET_21: howto manager. (line 1824)
-* BFD_RELOC_IQ2000_UHI16: howto manager. (line 1825)
-* BFD_RELOC_LO10: howto manager. (line 102)
-* BFD_RELOC_LO16: howto manager. (line 298)
-* BFD_RELOC_LO16_BASEREL: howto manager. (line 81)
-* BFD_RELOC_LO16_GOTOFF: howto manager. (line 56)
-* BFD_RELOC_LO16_PCREL: howto manager. (line 307)
-* BFD_RELOC_LO16_PLTOFF: howto manager. (line 68)
-* BFD_RELOC_M32C_HI8: howto manager. (line 1009)
-* BFD_RELOC_M32C_RL_1ADDR: howto manager. (line 1011)
-* BFD_RELOC_M32C_RL_2ADDR: howto manager. (line 1012)
-* BFD_RELOC_M32C_RL_JUMP: howto manager. (line 1010)
-* BFD_RELOC_M32R_10_PCREL: howto manager. (line 1019)
-* BFD_RELOC_M32R_18_PCREL: howto manager. (line 1023)
-* BFD_RELOC_M32R_24: howto manager. (line 1015)
-* BFD_RELOC_M32R_26_PCREL: howto manager. (line 1026)
-* BFD_RELOC_M32R_26_PLTREL: howto manager. (line 1045)
-* BFD_RELOC_M32R_COPY: howto manager. (line 1046)
-* BFD_RELOC_M32R_GLOB_DAT: howto manager. (line 1047)
-* BFD_RELOC_M32R_GOT16_HI_SLO: howto manager. (line 1056)
-* BFD_RELOC_M32R_GOT16_HI_ULO: howto manager. (line 1055)
-* BFD_RELOC_M32R_GOT16_LO: howto manager. (line 1057)
-* BFD_RELOC_M32R_GOT24: howto manager. (line 1044)
-* BFD_RELOC_M32R_GOTOFF: howto manager. (line 1050)
-* BFD_RELOC_M32R_GOTOFF_HI_SLO: howto manager. (line 1052)
-* BFD_RELOC_M32R_GOTOFF_HI_ULO: howto manager. (line 1051)
-* BFD_RELOC_M32R_GOTOFF_LO: howto manager. (line 1053)
-* BFD_RELOC_M32R_GOTPC24: howto manager. (line 1054)
-* BFD_RELOC_M32R_GOTPC_HI_SLO: howto manager. (line 1059)
-* BFD_RELOC_M32R_GOTPC_HI_ULO: howto manager. (line 1058)
-* BFD_RELOC_M32R_GOTPC_LO: howto manager. (line 1060)
-* BFD_RELOC_M32R_HI16_SLO: howto manager. (line 1033)
-* BFD_RELOC_M32R_HI16_ULO: howto manager. (line 1029)
-* BFD_RELOC_M32R_JMP_SLOT: howto manager. (line 1048)
-* BFD_RELOC_M32R_LO16: howto manager. (line 1037)
-* BFD_RELOC_M32R_RELATIVE: howto manager. (line 1049)
-* BFD_RELOC_M32R_SDA16: howto manager. (line 1040)
-* BFD_RELOC_M68HC11_24: howto manager. (line 1620)
-* BFD_RELOC_M68HC11_3B: howto manager. (line 1595)
-* BFD_RELOC_M68HC11_HI8: howto manager. (line 1587)
-* BFD_RELOC_M68HC11_LO16: howto manager. (line 1609)
-* BFD_RELOC_M68HC11_LO8: howto manager. (line 1591)
-* BFD_RELOC_M68HC11_PAGE: howto manager. (line 1615)
-* BFD_RELOC_M68HC11_RL_GROUP: howto manager. (line 1604)
-* BFD_RELOC_M68HC11_RL_JUMP: howto manager. (line 1598)
-* BFD_RELOC_M68HC12_5B: howto manager. (line 1626)
-* BFD_RELOC_MCORE_PCREL_32: howto manager. (line 1200)
-* BFD_RELOC_MCORE_PCREL_IMM11BY2: howto manager. (line 1198)
-* BFD_RELOC_MCORE_PCREL_IMM4BY2: howto manager. (line 1199)
-* BFD_RELOC_MCORE_PCREL_IMM8BY4: howto manager. (line 1197)
-* BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2: howto manager. (line 1201)
-* BFD_RELOC_MCORE_RVA: howto manager. (line 1202)
-* BFD_RELOC_MIPS16_GPREL: howto manager. (line 286)
-* BFD_RELOC_MIPS16_HI16: howto manager. (line 310)
-* BFD_RELOC_MIPS16_HI16_S: howto manager. (line 313)
-* BFD_RELOC_MIPS16_JMP: howto manager. (line 283)
-* BFD_RELOC_MIPS16_LO16: howto manager. (line 319)
-* BFD_RELOC_MIPS_CALL16: howto manager. (line 326)
-* BFD_RELOC_MIPS_CALL_HI16: howto manager. (line 329)
-* BFD_RELOC_MIPS_CALL_LO16: howto manager. (line 330)
-* BFD_RELOC_MIPS_COPY: howto manager. (line 361)
-* BFD_RELOC_MIPS_DELETE: howto manager. (line 339)
-* BFD_RELOC_MIPS_GOT16: howto manager. (line 325)
-* BFD_RELOC_MIPS_GOT_DISP: howto manager. (line 334)
-* BFD_RELOC_MIPS_GOT_HI16: howto manager. (line 327)
-* BFD_RELOC_MIPS_GOT_LO16: howto manager. (line 328)
-* BFD_RELOC_MIPS_GOT_OFST: howto manager. (line 333)
-* BFD_RELOC_MIPS_GOT_PAGE: howto manager. (line 332)
-* BFD_RELOC_MIPS_HIGHER: howto manager. (line 341)
-* BFD_RELOC_MIPS_HIGHEST: howto manager. (line 340)
-* BFD_RELOC_MIPS_INSERT_A: howto manager. (line 337)
-* BFD_RELOC_MIPS_INSERT_B: howto manager. (line 338)
-* BFD_RELOC_MIPS_JALR: howto manager. (line 345)
-* BFD_RELOC_MIPS_JMP: howto manager. (line 279)
-* BFD_RELOC_MIPS_JUMP_SLOT: howto manager. (line 362)
-* BFD_RELOC_MIPS_LITERAL: howto manager. (line 322)
-* BFD_RELOC_MIPS_REL16: howto manager. (line 343)
-* BFD_RELOC_MIPS_RELGOT: howto manager. (line 344)
-* BFD_RELOC_MIPS_SCN_DISP: howto manager. (line 342)
-* BFD_RELOC_MIPS_SHIFT5: howto manager. (line 335)
-* BFD_RELOC_MIPS_SHIFT6: howto manager. (line 336)
-* BFD_RELOC_MIPS_SUB: howto manager. (line 331)
-* BFD_RELOC_MIPS_TLS_DTPMOD32: howto manager. (line 346)
-* BFD_RELOC_MIPS_TLS_DTPMOD64: howto manager. (line 348)
-* BFD_RELOC_MIPS_TLS_DTPREL32: howto manager. (line 347)
-* BFD_RELOC_MIPS_TLS_DTPREL64: howto manager. (line 349)
-* BFD_RELOC_MIPS_TLS_DTPREL_HI16: howto manager. (line 352)
-* BFD_RELOC_MIPS_TLS_DTPREL_LO16: howto manager. (line 353)
-* BFD_RELOC_MIPS_TLS_GD: howto manager. (line 350)
-* BFD_RELOC_MIPS_TLS_GOTTPREL: howto manager. (line 354)
-* BFD_RELOC_MIPS_TLS_LDM: howto manager. (line 351)
-* BFD_RELOC_MIPS_TLS_TPREL32: howto manager. (line 355)
-* BFD_RELOC_MIPS_TLS_TPREL64: howto manager. (line 356)
-* BFD_RELOC_MIPS_TLS_TPREL_HI16: howto manager. (line 357)
-* BFD_RELOC_MIPS_TLS_TPREL_LO16: howto manager. (line 358)
-* BFD_RELOC_MMIX_ADDR19: howto manager. (line 1231)
-* BFD_RELOC_MMIX_ADDR27: howto manager. (line 1235)
-* BFD_RELOC_MMIX_BASE_PLUS_OFFSET: howto manager. (line 1247)
-* BFD_RELOC_MMIX_CBRANCH: howto manager. (line 1211)
-* BFD_RELOC_MMIX_CBRANCH_1: howto manager. (line 1213)
-* BFD_RELOC_MMIX_CBRANCH_2: howto manager. (line 1214)
-* BFD_RELOC_MMIX_CBRANCH_3: howto manager. (line 1215)
-* BFD_RELOC_MMIX_CBRANCH_J: howto manager. (line 1212)
-* BFD_RELOC_MMIX_GETA: howto manager. (line 1205)
-* BFD_RELOC_MMIX_GETA_1: howto manager. (line 1206)
-* BFD_RELOC_MMIX_GETA_2: howto manager. (line 1207)
-* BFD_RELOC_MMIX_GETA_3: howto manager. (line 1208)
-* BFD_RELOC_MMIX_JMP: howto manager. (line 1225)
-* BFD_RELOC_MMIX_JMP_1: howto manager. (line 1226)
-* BFD_RELOC_MMIX_JMP_2: howto manager. (line 1227)
-* BFD_RELOC_MMIX_JMP_3: howto manager. (line 1228)
-* BFD_RELOC_MMIX_LOCAL: howto manager. (line 1251)
-* BFD_RELOC_MMIX_PUSHJ: howto manager. (line 1218)
-* BFD_RELOC_MMIX_PUSHJ_1: howto manager. (line 1219)
-* BFD_RELOC_MMIX_PUSHJ_2: howto manager. (line 1220)
-* BFD_RELOC_MMIX_PUSHJ_3: howto manager. (line 1221)
-* BFD_RELOC_MMIX_PUSHJ_STUBBABLE: howto manager. (line 1222)
-* BFD_RELOC_MMIX_REG: howto manager. (line 1243)
-* BFD_RELOC_MMIX_REG_OR_BYTE: howto manager. (line 1239)
-* BFD_RELOC_MN10300_16_PCREL: howto manager. (line 1135)
-* BFD_RELOC_MN10300_32_PCREL: howto manager. (line 1131)
-* BFD_RELOC_MN10300_COPY: howto manager. (line 421)
-* BFD_RELOC_MN10300_GLOB_DAT: howto manager. (line 424)
-* BFD_RELOC_MN10300_GOT16: howto manager. (line 417)
-* BFD_RELOC_MN10300_GOT24: howto manager. (line 413)
-* BFD_RELOC_MN10300_GOT32: howto manager. (line 409)
-* BFD_RELOC_MN10300_GOTOFF24: howto manager. (line 406)
-* BFD_RELOC_MN10300_JMP_SLOT: howto manager. (line 427)
-* BFD_RELOC_MN10300_RELATIVE: howto manager. (line 430)
-* BFD_RELOC_MSP430_10_PCREL: howto manager. (line 1814)
-* BFD_RELOC_MSP430_16: howto manager. (line 1816)
-* BFD_RELOC_MSP430_16_BYTE: howto manager. (line 1818)
-* BFD_RELOC_MSP430_16_PCREL: howto manager. (line 1815)
-* BFD_RELOC_MSP430_16_PCREL_BYTE: howto manager. (line 1817)
-* BFD_RELOC_MSP430_2X_PCREL: howto manager. (line 1819)
-* BFD_RELOC_MSP430_RL_PCREL: howto manager. (line 1820)
-* BFD_RELOC_MT_GNU_VTENTRY: howto manager. (line 1808)
-* BFD_RELOC_MT_GNU_VTINHERIT: howto manager. (line 1805)
-* BFD_RELOC_MT_HI16: howto manager. (line 1799)
-* BFD_RELOC_MT_LO16: howto manager. (line 1802)
-* BFD_RELOC_MT_PC16: howto manager. (line 1796)
-* BFD_RELOC_MT_PCINSN8: howto manager. (line 1811)
-* BFD_RELOC_NONE: howto manager. (line 116)
-* BFD_RELOC_NS32K_DISP_16: howto manager. (line 493)
-* BFD_RELOC_NS32K_DISP_16_PCREL: howto manager. (line 496)
-* BFD_RELOC_NS32K_DISP_32: howto manager. (line 494)
-* BFD_RELOC_NS32K_DISP_32_PCREL: howto manager. (line 497)
-* BFD_RELOC_NS32K_DISP_8: howto manager. (line 492)
-* BFD_RELOC_NS32K_DISP_8_PCREL: howto manager. (line 495)
-* BFD_RELOC_NS32K_IMM_16: howto manager. (line 487)
-* BFD_RELOC_NS32K_IMM_16_PCREL: howto manager. (line 490)
-* BFD_RELOC_NS32K_IMM_32: howto manager. (line 488)
-* BFD_RELOC_NS32K_IMM_32_PCREL: howto manager. (line 491)
-* BFD_RELOC_NS32K_IMM_8: howto manager. (line 486)
-* BFD_RELOC_NS32K_IMM_8_PCREL: howto manager. (line 489)
-* BFD_RELOC_OPENRISC_ABS_26: howto manager. (line 1768)
-* BFD_RELOC_OPENRISC_REL_26: howto manager. (line 1769)
-* BFD_RELOC_PDP11_DISP_6_PCREL: howto manager. (line 501)
-* BFD_RELOC_PDP11_DISP_8_PCREL: howto manager. (line 500)
-* BFD_RELOC_PJ_CODE_DIR16: howto manager. (line 506)
-* BFD_RELOC_PJ_CODE_DIR32: howto manager. (line 507)
-* BFD_RELOC_PJ_CODE_HI16: howto manager. (line 504)
-* BFD_RELOC_PJ_CODE_LO16: howto manager. (line 505)
-* BFD_RELOC_PJ_CODE_REL16: howto manager. (line 508)
-* BFD_RELOC_PJ_CODE_REL32: howto manager. (line 509)
-* BFD_RELOC_PPC64_ADDR16_DS: howto manager. (line 554)
-* BFD_RELOC_PPC64_ADDR16_LO_DS: howto manager. (line 555)
-* BFD_RELOC_PPC64_DTPREL16_DS: howto manager. (line 601)
-* BFD_RELOC_PPC64_DTPREL16_HIGHER: howto manager. (line 603)
-* BFD_RELOC_PPC64_DTPREL16_HIGHERA: howto manager. (line 604)
-* BFD_RELOC_PPC64_DTPREL16_HIGHEST: howto manager. (line 605)
-* BFD_RELOC_PPC64_DTPREL16_HIGHESTA: howto manager. (line 606)
-* BFD_RELOC_PPC64_DTPREL16_LO_DS: howto manager. (line 602)
-* BFD_RELOC_PPC64_GOT16_DS: howto manager. (line 556)
-* BFD_RELOC_PPC64_GOT16_LO_DS: howto manager. (line 557)
-* BFD_RELOC_PPC64_HIGHER: howto manager. (line 542)
-* BFD_RELOC_PPC64_HIGHER_S: howto manager. (line 543)
-* BFD_RELOC_PPC64_HIGHEST: howto manager. (line 544)
-* BFD_RELOC_PPC64_HIGHEST_S: howto manager. (line 545)
-* BFD_RELOC_PPC64_PLT16_LO_DS: howto manager. (line 558)
-* BFD_RELOC_PPC64_PLTGOT16: howto manager. (line 550)
-* BFD_RELOC_PPC64_PLTGOT16_DS: howto manager. (line 563)
-* BFD_RELOC_PPC64_PLTGOT16_HA: howto manager. (line 553)
-* BFD_RELOC_PPC64_PLTGOT16_HI: howto manager. (line 552)
-* BFD_RELOC_PPC64_PLTGOT16_LO: howto manager. (line 551)
-* BFD_RELOC_PPC64_PLTGOT16_LO_DS: howto manager. (line 564)
-* BFD_RELOC_PPC64_SECTOFF_DS: howto manager. (line 559)
-* BFD_RELOC_PPC64_SECTOFF_LO_DS: howto manager. (line 560)
-* BFD_RELOC_PPC64_TOC: howto manager. (line 549)
-* BFD_RELOC_PPC64_TOC16_DS: howto manager. (line 561)
-* BFD_RELOC_PPC64_TOC16_HA: howto manager. (line 548)
-* BFD_RELOC_PPC64_TOC16_HI: howto manager. (line 547)
-* BFD_RELOC_PPC64_TOC16_LO: howto manager. (line 546)
-* BFD_RELOC_PPC64_TOC16_LO_DS: howto manager. (line 562)
-* BFD_RELOC_PPC64_TPREL16_DS: howto manager. (line 595)
-* BFD_RELOC_PPC64_TPREL16_HIGHER: howto manager. (line 597)
-* BFD_RELOC_PPC64_TPREL16_HIGHERA: howto manager. (line 598)
-* BFD_RELOC_PPC64_TPREL16_HIGHEST: howto manager. (line 599)
-* BFD_RELOC_PPC64_TPREL16_HIGHESTA: howto manager. (line 600)
-* BFD_RELOC_PPC64_TPREL16_LO_DS: howto manager. (line 596)
-* BFD_RELOC_PPC_B16: howto manager. (line 515)
-* BFD_RELOC_PPC_B16_BRNTAKEN: howto manager. (line 517)
-* BFD_RELOC_PPC_B16_BRTAKEN: howto manager. (line 516)
-* BFD_RELOC_PPC_B26: howto manager. (line 512)
-* BFD_RELOC_PPC_BA16: howto manager. (line 518)
-* BFD_RELOC_PPC_BA16_BRNTAKEN: howto manager. (line 520)
-* BFD_RELOC_PPC_BA16_BRTAKEN: howto manager. (line 519)
-* BFD_RELOC_PPC_BA26: howto manager. (line 513)
-* BFD_RELOC_PPC_COPY: howto manager. (line 521)
-* BFD_RELOC_PPC_DTPMOD: howto manager. (line 568)
-* BFD_RELOC_PPC_DTPREL: howto manager. (line 578)
-* BFD_RELOC_PPC_DTPREL16: howto manager. (line 574)
-* BFD_RELOC_PPC_DTPREL16_HA: howto manager. (line 577)
-* BFD_RELOC_PPC_DTPREL16_HI: howto manager. (line 576)
-* BFD_RELOC_PPC_DTPREL16_LO: howto manager. (line 575)
-* BFD_RELOC_PPC_EMB_BIT_FLD: howto manager. (line 540)
-* BFD_RELOC_PPC_EMB_MRKREF: howto manager. (line 535)
-* BFD_RELOC_PPC_EMB_NADDR16: howto manager. (line 527)
-* BFD_RELOC_PPC_EMB_NADDR16_HA: howto manager. (line 530)
-* BFD_RELOC_PPC_EMB_NADDR16_HI: howto manager. (line 529)
-* BFD_RELOC_PPC_EMB_NADDR16_LO: howto manager. (line 528)
-* BFD_RELOC_PPC_EMB_NADDR32: howto manager. (line 526)
-* BFD_RELOC_PPC_EMB_RELSDA: howto manager. (line 541)
-* BFD_RELOC_PPC_EMB_RELSEC16: howto manager. (line 536)
-* BFD_RELOC_PPC_EMB_RELST_HA: howto manager. (line 539)
-* BFD_RELOC_PPC_EMB_RELST_HI: howto manager. (line 538)
-* BFD_RELOC_PPC_EMB_RELST_LO: howto manager. (line 537)
-* BFD_RELOC_PPC_EMB_SDA21: howto manager. (line 534)
-* BFD_RELOC_PPC_EMB_SDA2I16: howto manager. (line 532)
-* BFD_RELOC_PPC_EMB_SDA2REL: howto manager. (line 533)
-* BFD_RELOC_PPC_EMB_SDAI16: howto manager. (line 531)
-* BFD_RELOC_PPC_GLOB_DAT: howto manager. (line 522)
-* BFD_RELOC_PPC_GOT_DTPREL16: howto manager. (line 591)
-* BFD_RELOC_PPC_GOT_DTPREL16_HA: howto manager. (line 594)
-* BFD_RELOC_PPC_GOT_DTPREL16_HI: howto manager. (line 593)
-* BFD_RELOC_PPC_GOT_DTPREL16_LO: howto manager. (line 592)
-* BFD_RELOC_PPC_GOT_TLSGD16: howto manager. (line 579)
-* BFD_RELOC_PPC_GOT_TLSGD16_HA: howto manager. (line 582)
-* BFD_RELOC_PPC_GOT_TLSGD16_HI: howto manager. (line 581)
-* BFD_RELOC_PPC_GOT_TLSGD16_LO: howto manager. (line 580)
-* BFD_RELOC_PPC_GOT_TLSLD16: howto manager. (line 583)
-* BFD_RELOC_PPC_GOT_TLSLD16_HA: howto manager. (line 586)
-* BFD_RELOC_PPC_GOT_TLSLD16_HI: howto manager. (line 585)
-* BFD_RELOC_PPC_GOT_TLSLD16_LO: howto manager. (line 584)
-* BFD_RELOC_PPC_GOT_TPREL16: howto manager. (line 587)
-* BFD_RELOC_PPC_GOT_TPREL16_HA: howto manager. (line 590)
-* BFD_RELOC_PPC_GOT_TPREL16_HI: howto manager. (line 589)
-* BFD_RELOC_PPC_GOT_TPREL16_LO: howto manager. (line 588)
-* BFD_RELOC_PPC_JMP_SLOT: howto manager. (line 523)
-* BFD_RELOC_PPC_LOCAL24PC: howto manager. (line 525)
-* BFD_RELOC_PPC_RELATIVE: howto manager. (line 524)
-* BFD_RELOC_PPC_TLS: howto manager. (line 567)
-* BFD_RELOC_PPC_TOC16: howto manager. (line 514)
-* BFD_RELOC_PPC_TPREL: howto manager. (line 573)
-* BFD_RELOC_PPC_TPREL16: howto manager. (line 569)
-* BFD_RELOC_PPC_TPREL16_HA: howto manager. (line 572)
-* BFD_RELOC_PPC_TPREL16_HI: howto manager. (line 571)
-* BFD_RELOC_PPC_TPREL16_LO: howto manager. (line 570)
-* BFD_RELOC_RVA: howto manager. (line 85)
-* BFD_RELOC_SH_ALIGN: howto manager. (line 745)
-* BFD_RELOC_SH_CODE: howto manager. (line 746)
-* BFD_RELOC_SH_COPY: howto manager. (line 751)
-* BFD_RELOC_SH_COPY64: howto manager. (line 776)
-* BFD_RELOC_SH_COUNT: howto manager. (line 744)
-* BFD_RELOC_SH_DATA: howto manager. (line 747)
-* BFD_RELOC_SH_DISP12: howto manager. (line 727)
-* BFD_RELOC_SH_DISP12BY2: howto manager. (line 728)
-* BFD_RELOC_SH_DISP12BY4: howto manager. (line 729)
-* BFD_RELOC_SH_DISP12BY8: howto manager. (line 730)
-* BFD_RELOC_SH_DISP20: howto manager. (line 731)
-* BFD_RELOC_SH_DISP20BY8: howto manager. (line 732)
-* BFD_RELOC_SH_GLOB_DAT: howto manager. (line 752)
-* BFD_RELOC_SH_GLOB_DAT64: howto manager. (line 777)
-* BFD_RELOC_SH_GOT10BY4: howto manager. (line 780)
-* BFD_RELOC_SH_GOT10BY8: howto manager. (line 781)
-* BFD_RELOC_SH_GOT_HI16: howto manager. (line 759)
-* BFD_RELOC_SH_GOT_LOW16: howto manager. (line 756)
-* BFD_RELOC_SH_GOT_MEDHI16: howto manager. (line 758)
-* BFD_RELOC_SH_GOT_MEDLOW16: howto manager. (line 757)
-* BFD_RELOC_SH_GOTOFF_HI16: howto manager. (line 771)
-* BFD_RELOC_SH_GOTOFF_LOW16: howto manager. (line 768)
-* BFD_RELOC_SH_GOTOFF_MEDHI16: howto manager. (line 770)
-* BFD_RELOC_SH_GOTOFF_MEDLOW16: howto manager. (line 769)
-* BFD_RELOC_SH_GOTPC: howto manager. (line 755)
-* BFD_RELOC_SH_GOTPC_HI16: howto manager. (line 775)
-* BFD_RELOC_SH_GOTPC_LOW16: howto manager. (line 772)
-* BFD_RELOC_SH_GOTPC_MEDHI16: howto manager. (line 774)
-* BFD_RELOC_SH_GOTPC_MEDLOW16: howto manager. (line 773)
-* BFD_RELOC_SH_GOTPLT10BY4: howto manager. (line 782)
-* BFD_RELOC_SH_GOTPLT10BY8: howto manager. (line 783)
-* BFD_RELOC_SH_GOTPLT32: howto manager. (line 784)
-* BFD_RELOC_SH_GOTPLT_HI16: howto manager. (line 763)
-* BFD_RELOC_SH_GOTPLT_LOW16: howto manager. (line 760)
-* BFD_RELOC_SH_GOTPLT_MEDHI16: howto manager. (line 762)
-* BFD_RELOC_SH_GOTPLT_MEDLOW16: howto manager. (line 761)
-* BFD_RELOC_SH_IMM3: howto manager. (line 725)
-* BFD_RELOC_SH_IMM3U: howto manager. (line 726)
-* BFD_RELOC_SH_IMM4: howto manager. (line 733)
-* BFD_RELOC_SH_IMM4BY2: howto manager. (line 734)
-* BFD_RELOC_SH_IMM4BY4: howto manager. (line 735)
-* BFD_RELOC_SH_IMM8: howto manager. (line 736)
-* BFD_RELOC_SH_IMM8BY2: howto manager. (line 737)
-* BFD_RELOC_SH_IMM8BY4: howto manager. (line 738)
-* BFD_RELOC_SH_IMM_HI16: howto manager. (line 802)
-* BFD_RELOC_SH_IMM_HI16_PCREL: howto manager. (line 803)
-* BFD_RELOC_SH_IMM_LOW16: howto manager. (line 796)
-* BFD_RELOC_SH_IMM_LOW16_PCREL: howto manager. (line 797)
-* BFD_RELOC_SH_IMM_MEDHI16: howto manager. (line 800)
-* BFD_RELOC_SH_IMM_MEDHI16_PCREL: howto manager. (line 801)
-* BFD_RELOC_SH_IMM_MEDLOW16: howto manager. (line 798)
-* BFD_RELOC_SH_IMM_MEDLOW16_PCREL: howto manager. (line 799)
-* BFD_RELOC_SH_IMMS10: howto manager. (line 790)
-* BFD_RELOC_SH_IMMS10BY2: howto manager. (line 791)
-* BFD_RELOC_SH_IMMS10BY4: howto manager. (line 792)
-* BFD_RELOC_SH_IMMS10BY8: howto manager. (line 793)
-* BFD_RELOC_SH_IMMS16: howto manager. (line 794)
-* BFD_RELOC_SH_IMMS6: howto manager. (line 787)
-* BFD_RELOC_SH_IMMS6BY32: howto manager. (line 788)
-* BFD_RELOC_SH_IMMU16: howto manager. (line 795)
-* BFD_RELOC_SH_IMMU5: howto manager. (line 786)
-* BFD_RELOC_SH_IMMU6: howto manager. (line 789)
-* BFD_RELOC_SH_JMP_SLOT: howto manager. (line 753)
-* BFD_RELOC_SH_JMP_SLOT64: howto manager. (line 778)
-* BFD_RELOC_SH_LABEL: howto manager. (line 748)
-* BFD_RELOC_SH_LOOP_END: howto manager. (line 750)
-* BFD_RELOC_SH_LOOP_START: howto manager. (line 749)
-* BFD_RELOC_SH_PCDISP12BY2: howto manager. (line 724)
-* BFD_RELOC_SH_PCDISP8BY2: howto manager. (line 723)
-* BFD_RELOC_SH_PCRELIMM8BY2: howto manager. (line 739)
-* BFD_RELOC_SH_PCRELIMM8BY4: howto manager. (line 740)
-* BFD_RELOC_SH_PLT_HI16: howto manager. (line 767)
-* BFD_RELOC_SH_PLT_LOW16: howto manager. (line 764)
-* BFD_RELOC_SH_PLT_MEDHI16: howto manager. (line 766)
-* BFD_RELOC_SH_PLT_MEDLOW16: howto manager. (line 765)
-* BFD_RELOC_SH_PT_16: howto manager. (line 804)
-* BFD_RELOC_SH_RELATIVE: howto manager. (line 754)
-* BFD_RELOC_SH_RELATIVE64: howto manager. (line 779)
-* BFD_RELOC_SH_SHMEDIA_CODE: howto manager. (line 785)
-* BFD_RELOC_SH_SWITCH16: howto manager. (line 741)
-* BFD_RELOC_SH_SWITCH32: howto manager. (line 742)
-* BFD_RELOC_SH_TLS_DTPMOD32: howto manager. (line 810)
-* BFD_RELOC_SH_TLS_DTPOFF32: howto manager. (line 811)
-* BFD_RELOC_SH_TLS_GD_32: howto manager. (line 805)
-* BFD_RELOC_SH_TLS_IE_32: howto manager. (line 808)
-* BFD_RELOC_SH_TLS_LD_32: howto manager. (line 806)
-* BFD_RELOC_SH_TLS_LDO_32: howto manager. (line 807)
-* BFD_RELOC_SH_TLS_LE_32: howto manager. (line 809)
-* BFD_RELOC_SH_TLS_TPOFF32: howto manager. (line 812)
-* BFD_RELOC_SH_USES: howto manager. (line 743)
-* BFD_RELOC_SPARC13: howto manager. (line 119)
-* BFD_RELOC_SPARC22: howto manager. (line 118)
-* BFD_RELOC_SPARC_10: howto manager. (line 141)
-* BFD_RELOC_SPARC_11: howto manager. (line 142)
-* BFD_RELOC_SPARC_5: howto manager. (line 154)
-* BFD_RELOC_SPARC_6: howto manager. (line 153)
-* BFD_RELOC_SPARC_64: howto manager. (line 140)
-* BFD_RELOC_SPARC_7: howto manager. (line 152)
-* BFD_RELOC_SPARC_BASE13: howto manager. (line 136)
-* BFD_RELOC_SPARC_BASE22: howto manager. (line 137)
-* BFD_RELOC_SPARC_COPY: howto manager. (line 126)
-* BFD_RELOC_SPARC_DISP64: howto manager. (line 155)
-* BFD_RELOC_SPARC_GLOB_DAT: howto manager. (line 127)
-* BFD_RELOC_SPARC_GOT10: howto manager. (line 120)
-* BFD_RELOC_SPARC_GOT13: howto manager. (line 121)
-* BFD_RELOC_SPARC_GOT22: howto manager. (line 122)
-* BFD_RELOC_SPARC_H44: howto manager. (line 160)
-* BFD_RELOC_SPARC_HH22: howto manager. (line 144)
-* BFD_RELOC_SPARC_HIX22: howto manager. (line 158)
-* BFD_RELOC_SPARC_HM10: howto manager. (line 145)
-* BFD_RELOC_SPARC_JMP_SLOT: howto manager. (line 128)
-* BFD_RELOC_SPARC_L44: howto manager. (line 162)
-* BFD_RELOC_SPARC_LM22: howto manager. (line 146)
-* BFD_RELOC_SPARC_LOX10: howto manager. (line 159)
-* BFD_RELOC_SPARC_M44: howto manager. (line 161)
-* BFD_RELOC_SPARC_OLO10: howto manager. (line 143)
-* BFD_RELOC_SPARC_PC10: howto manager. (line 123)
-* BFD_RELOC_SPARC_PC22: howto manager. (line 124)
-* BFD_RELOC_SPARC_PC_HH22: howto manager. (line 147)
-* BFD_RELOC_SPARC_PC_HM10: howto manager. (line 148)
-* BFD_RELOC_SPARC_PC_LM22: howto manager. (line 149)
-* BFD_RELOC_SPARC_PLT32: howto manager. (line 156)
-* BFD_RELOC_SPARC_PLT64: howto manager. (line 157)
-* BFD_RELOC_SPARC_REGISTER: howto manager. (line 163)
-* BFD_RELOC_SPARC_RELATIVE: howto manager. (line 129)
-* BFD_RELOC_SPARC_REV32: howto manager. (line 166)
-* BFD_RELOC_SPARC_TLS_DTPMOD32: howto manager. (line 187)
-* BFD_RELOC_SPARC_TLS_DTPMOD64: howto manager. (line 188)
-* BFD_RELOC_SPARC_TLS_DTPOFF32: howto manager. (line 189)
-* BFD_RELOC_SPARC_TLS_DTPOFF64: howto manager. (line 190)
-* BFD_RELOC_SPARC_TLS_GD_ADD: howto manager. (line 171)
-* BFD_RELOC_SPARC_TLS_GD_CALL: howto manager. (line 172)
-* BFD_RELOC_SPARC_TLS_GD_HI22: howto manager. (line 169)
-* BFD_RELOC_SPARC_TLS_GD_LO10: howto manager. (line 170)
-* BFD_RELOC_SPARC_TLS_IE_ADD: howto manager. (line 184)
-* BFD_RELOC_SPARC_TLS_IE_HI22: howto manager. (line 180)
-* BFD_RELOC_SPARC_TLS_IE_LD: howto manager. (line 182)
-* BFD_RELOC_SPARC_TLS_IE_LDX: howto manager. (line 183)
-* BFD_RELOC_SPARC_TLS_IE_LO10: howto manager. (line 181)
-* BFD_RELOC_SPARC_TLS_LDM_ADD: howto manager. (line 175)
-* BFD_RELOC_SPARC_TLS_LDM_CALL: howto manager. (line 176)
-* BFD_RELOC_SPARC_TLS_LDM_HI22: howto manager. (line 173)
-* BFD_RELOC_SPARC_TLS_LDM_LO10: howto manager. (line 174)
-* BFD_RELOC_SPARC_TLS_LDO_ADD: howto manager. (line 179)
-* BFD_RELOC_SPARC_TLS_LDO_HIX22: howto manager. (line 177)
-* BFD_RELOC_SPARC_TLS_LDO_LOX10: howto manager. (line 178)
-* BFD_RELOC_SPARC_TLS_LE_HIX22: howto manager. (line 185)
-* BFD_RELOC_SPARC_TLS_LE_LOX10: howto manager. (line 186)
-* BFD_RELOC_SPARC_TLS_TPOFF32: howto manager. (line 191)
-* BFD_RELOC_SPARC_TLS_TPOFF64: howto manager. (line 192)
-* BFD_RELOC_SPARC_UA16: howto manager. (line 130)
-* BFD_RELOC_SPARC_UA32: howto manager. (line 131)
-* BFD_RELOC_SPARC_UA64: howto manager. (line 132)
-* BFD_RELOC_SPARC_WDISP16: howto manager. (line 150)
-* BFD_RELOC_SPARC_WDISP19: howto manager. (line 151)
-* BFD_RELOC_SPARC_WDISP22: howto manager. (line 117)
-* BFD_RELOC_SPARC_WPLT30: howto manager. (line 125)
-* BFD_RELOC_THUMB_PCREL_BLX: howto manager. (line 627)
-* BFD_RELOC_THUMB_PCREL_BRANCH12: howto manager. (line 641)
-* BFD_RELOC_THUMB_PCREL_BRANCH20: howto manager. (line 642)
-* BFD_RELOC_THUMB_PCREL_BRANCH23: howto manager. (line 643)
-* BFD_RELOC_THUMB_PCREL_BRANCH25: howto manager. (line 644)
-* BFD_RELOC_THUMB_PCREL_BRANCH7: howto manager. (line 639)
-* BFD_RELOC_THUMB_PCREL_BRANCH9: howto manager. (line 640)
-* BFD_RELOC_TIC30_LDP: howto manager. (line 1139)
-* BFD_RELOC_TIC54X_16_OF_23: howto manager. (line 1157)
-* BFD_RELOC_TIC54X_23: howto manager. (line 1154)
-* BFD_RELOC_TIC54X_MS7_OF_23: howto manager. (line 1162)
-* BFD_RELOC_TIC54X_PARTLS7: howto manager. (line 1144)
-* BFD_RELOC_TIC54X_PARTMS9: howto manager. (line 1149)
-* bfd_reloc_type_lookup: howto manager. (line 1920)
-* BFD_RELOC_V850_22_PCREL: howto manager. (line 1066)
-* BFD_RELOC_V850_9_PCREL: howto manager. (line 1063)
-* BFD_RELOC_V850_ALIGN: howto manager. (line 1124)
-* BFD_RELOC_V850_CALLT_16_16_OFFSET: howto manager. (line 1115)
-* BFD_RELOC_V850_CALLT_6_7_OFFSET: howto manager. (line 1112)
-* BFD_RELOC_V850_LO16_SPLIT_OFFSET: howto manager. (line 1127)
-* BFD_RELOC_V850_LONGCALL: howto manager. (line 1118)
-* BFD_RELOC_V850_LONGJUMP: howto manager. (line 1121)
-* BFD_RELOC_V850_SDA_15_16_OFFSET: howto manager. (line 1072)
-* BFD_RELOC_V850_SDA_16_16_OFFSET: howto manager. (line 1069)
-* BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET: howto manager. (line 1104)
-* BFD_RELOC_V850_TDA_16_16_OFFSET: howto manager. (line 1094)
-* BFD_RELOC_V850_TDA_4_4_OFFSET: howto manager. (line 1101)
-* BFD_RELOC_V850_TDA_4_5_OFFSET: howto manager. (line 1097)
-* BFD_RELOC_V850_TDA_6_8_OFFSET: howto manager. (line 1083)
-* BFD_RELOC_V850_TDA_7_7_OFFSET: howto manager. (line 1091)
-* BFD_RELOC_V850_TDA_7_8_OFFSET: howto manager. (line 1087)
-* BFD_RELOC_V850_ZDA_15_16_OFFSET: howto manager. (line 1079)
-* BFD_RELOC_V850_ZDA_16_16_OFFSET: howto manager. (line 1076)
-* BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET: howto manager. (line 1108)
-* BFD_RELOC_VAX_GLOB_DAT: howto manager. (line 1791)
-* BFD_RELOC_VAX_JMP_SLOT: howto manager. (line 1792)
-* BFD_RELOC_VAX_RELATIVE: howto manager. (line 1793)
-* BFD_RELOC_VPE4KMATH_DATA: howto manager. (line 1482)
-* BFD_RELOC_VPE4KMATH_INSN: howto manager. (line 1483)
-* BFD_RELOC_VTABLE_ENTRY: howto manager. (line 1487)
-* BFD_RELOC_VTABLE_INHERIT: howto manager. (line 1486)
-* BFD_RELOC_X86_64_32S: howto manager. (line 465)
-* BFD_RELOC_X86_64_COPY: howto manager. (line 460)
-* BFD_RELOC_X86_64_DTPMOD64: howto manager. (line 466)
-* BFD_RELOC_X86_64_DTPOFF32: howto manager. (line 471)
-* BFD_RELOC_X86_64_DTPOFF64: howto manager. (line 467)
-* BFD_RELOC_X86_64_GLOB_DAT: howto manager. (line 461)
-* BFD_RELOC_X86_64_GOT32: howto manager. (line 458)
-* BFD_RELOC_X86_64_GOT64: howto manager. (line 476)
-* BFD_RELOC_X86_64_GOTOFF64: howto manager. (line 474)
-* BFD_RELOC_X86_64_GOTPC32: howto manager. (line 475)
-* BFD_RELOC_X86_64_GOTPC32_TLSDESC: howto manager. (line 481)
-* BFD_RELOC_X86_64_GOTPC64: howto manager. (line 478)
-* BFD_RELOC_X86_64_GOTPCREL: howto manager. (line 464)
-* BFD_RELOC_X86_64_GOTPCREL64: howto manager. (line 477)
-* BFD_RELOC_X86_64_GOTPLT64: howto manager. (line 479)
-* BFD_RELOC_X86_64_GOTTPOFF: howto manager. (line 472)
-* BFD_RELOC_X86_64_JUMP_SLOT: howto manager. (line 462)
-* BFD_RELOC_X86_64_PLT32: howto manager. (line 459)
-* BFD_RELOC_X86_64_PLTOFF64: howto manager. (line 480)
-* BFD_RELOC_X86_64_RELATIVE: howto manager. (line 463)
-* BFD_RELOC_X86_64_TLSDESC: howto manager. (line 483)
-* BFD_RELOC_X86_64_TLSDESC_CALL: howto manager. (line 482)
-* BFD_RELOC_X86_64_TLSGD: howto manager. (line 469)
-* BFD_RELOC_X86_64_TLSLD: howto manager. (line 470)
-* BFD_RELOC_X86_64_TPOFF32: howto manager. (line 473)
-* BFD_RELOC_X86_64_TPOFF64: howto manager. (line 468)
-* BFD_RELOC_XC16X_PAG: howto manager. (line 1785)
-* BFD_RELOC_XC16X_POF: howto manager. (line 1786)
-* BFD_RELOC_XC16X_SEG: howto manager. (line 1787)
-* BFD_RELOC_XC16X_SOF: howto manager. (line 1788)
-* BFD_RELOC_XSTORMY16_12: howto manager. (line 1780)
-* BFD_RELOC_XSTORMY16_24: howto manager. (line 1781)
-* BFD_RELOC_XSTORMY16_FPTR16: howto manager. (line 1782)
-* BFD_RELOC_XSTORMY16_REL_12: howto manager. (line 1779)
-* BFD_RELOC_XTENSA_ASM_EXPAND: howto manager. (line 1897)
-* BFD_RELOC_XTENSA_ASM_SIMPLIFY: howto manager. (line 1902)
-* BFD_RELOC_XTENSA_DIFF16: howto manager. (line 1844)
-* BFD_RELOC_XTENSA_DIFF32: howto manager. (line 1845)
-* BFD_RELOC_XTENSA_DIFF8: howto manager. (line 1843)
-* BFD_RELOC_XTENSA_GLOB_DAT: howto manager. (line 1833)
-* BFD_RELOC_XTENSA_JMP_SLOT: howto manager. (line 1834)
-* BFD_RELOC_XTENSA_OP0: howto manager. (line 1891)
-* BFD_RELOC_XTENSA_OP1: howto manager. (line 1892)
-* BFD_RELOC_XTENSA_OP2: howto manager. (line 1893)
-* BFD_RELOC_XTENSA_PLT: howto manager. (line 1838)
-* BFD_RELOC_XTENSA_RELATIVE: howto manager. (line 1835)
-* BFD_RELOC_XTENSA_RTLD: howto manager. (line 1828)
-* BFD_RELOC_XTENSA_SLOT0_ALT: howto manager. (line 1873)
-* BFD_RELOC_XTENSA_SLOT0_OP: howto manager. (line 1853)
-* BFD_RELOC_XTENSA_SLOT10_ALT: howto manager. (line 1883)
-* BFD_RELOC_XTENSA_SLOT10_OP: howto manager. (line 1863)
-* BFD_RELOC_XTENSA_SLOT11_ALT: howto manager. (line 1884)
-* BFD_RELOC_XTENSA_SLOT11_OP: howto manager. (line 1864)
-* BFD_RELOC_XTENSA_SLOT12_ALT: howto manager. (line 1885)
-* BFD_RELOC_XTENSA_SLOT12_OP: howto manager. (line 1865)
-* BFD_RELOC_XTENSA_SLOT13_ALT: howto manager. (line 1886)
-* BFD_RELOC_XTENSA_SLOT13_OP: howto manager. (line 1866)
-* BFD_RELOC_XTENSA_SLOT14_ALT: howto manager. (line 1887)
-* BFD_RELOC_XTENSA_SLOT14_OP: howto manager. (line 1867)
-* BFD_RELOC_XTENSA_SLOT1_ALT: howto manager. (line 1874)
-* BFD_RELOC_XTENSA_SLOT1_OP: howto manager. (line 1854)
-* BFD_RELOC_XTENSA_SLOT2_ALT: howto manager. (line 1875)
-* BFD_RELOC_XTENSA_SLOT2_OP: howto manager. (line 1855)
-* BFD_RELOC_XTENSA_SLOT3_ALT: howto manager. (line 1876)
-* BFD_RELOC_XTENSA_SLOT3_OP: howto manager. (line 1856)
-* BFD_RELOC_XTENSA_SLOT4_ALT: howto manager. (line 1877)
-* BFD_RELOC_XTENSA_SLOT4_OP: howto manager. (line 1857)
-* BFD_RELOC_XTENSA_SLOT5_ALT: howto manager. (line 1878)
-* BFD_RELOC_XTENSA_SLOT5_OP: howto manager. (line 1858)
-* BFD_RELOC_XTENSA_SLOT6_ALT: howto manager. (line 1879)
-* BFD_RELOC_XTENSA_SLOT6_OP: howto manager. (line 1859)
-* BFD_RELOC_XTENSA_SLOT7_ALT: howto manager. (line 1880)
-* BFD_RELOC_XTENSA_SLOT7_OP: howto manager. (line 1860)
-* BFD_RELOC_XTENSA_SLOT8_ALT: howto manager. (line 1881)
-* BFD_RELOC_XTENSA_SLOT8_OP: howto manager. (line 1861)
-* BFD_RELOC_XTENSA_SLOT9_ALT: howto manager. (line 1882)
-* BFD_RELOC_XTENSA_SLOT9_OP: howto manager. (line 1862)
-* BFD_RELOC_Z80_DISP8: howto manager. (line 1907)
-* BFD_RELOC_Z8K_CALLR: howto manager. (line 1913)
-* BFD_RELOC_Z8K_DISP7: howto manager. (line 1910)
-* BFD_RELOC_Z8K_IMM4L: howto manager. (line 1916)
-* bfd_scan_arch: Architectures. (line 392)
-* bfd_scan_vma: BFD front end. (line 423)
-* bfd_seach_for_target: bfd_target. (line 459)
-* bfd_section_already_linked: Writing the symbol table.
- (line 55)
-* bfd_section_list_clear: section prototypes. (line 8)
-* bfd_sections_find_if: section prototypes. (line 176)
-* bfd_set_arch_info: Architectures. (line 433)
-* bfd_set_archive_head: Archives. (line 69)
-* bfd_set_default_target: bfd_target. (line 424)
-* bfd_set_error: BFD front end. (line 235)
-* bfd_set_error_handler: BFD front end. (line 275)
-* bfd_set_error_program_name: BFD front end. (line 284)
-* bfd_set_file_flags: BFD front end. (line 343)
-* bfd_set_format: Formats. (line 68)
-* bfd_set_gp_size: BFD front end. (line 413)
-* bfd_set_private_flags: BFD front end. (line 490)
-* bfd_set_reloc: BFD front end. (line 333)
-* bfd_set_section_contents: section prototypes. (line 207)
-* bfd_set_section_flags: section prototypes. (line 140)
-* bfd_set_section_size: section prototypes. (line 193)
-* bfd_set_start_address: BFD front end. (line 392)
-* bfd_set_symtab: symbol handling functions.
- (line 60)
-* bfd_symbol_info: symbol handling functions.
- (line 130)
-* bfd_target_list: bfd_target. (line 450)
-* bfd_write_bigendian_4byte_int: Internal. (line 13)
-* bfd_zalloc: Opening and Closing.
- (line 221)
-* bfd_zalloc2: Opening and Closing.
- (line 230)
-* coff_symbol_type: coff. (line 186)
-* core_file_matches_executable_p: Core Files. (line 30)
-* find_separate_debug_file: Opening and Closing.
- (line 272)
-* generic_core_file_matches_executable_p: Core Files. (line 40)
-* get_debug_link_info: Opening and Closing.
- (line 253)
-* Hash tables: Hash Tables. (line 6)
-* internal object-file format: Canonical format. (line 11)
-* Linker: Linker Functions. (line 6)
-* Other functions: BFD front end. (line 505)
-* separate_debug_file_exists: Opening and Closing.
- (line 263)
-* struct bfd_iovec: BFD front end. (line 657)
-* target vector (_bfd_final_link): Performing the Final Link.
- (line 6)
-* target vector (_bfd_link_add_symbols): Adding Symbols to the Hash Table.
- (line 6)
-* target vector (_bfd_link_hash_table_create): Creating a Linker Hash Table.
- (line 6)
-* The HOWTO Macro: typedef arelent. (line 291)
-* what is it?: Overview. (line 6)
-
-
-
-Tag Table:
-Node: Top724
-Node: Overview1056
-Node: History2107
-Node: How It Works3053
-Node: What BFD Version 2 Can Do4595
-Node: BFD information loss5910
-Node: Canonical format8442
-Node: BFD front end12814
-Node: Memory Usage38428
-Node: Initialization39656
-Node: Sections40115
-Node: Section Input40598
-Node: Section Output41963
-Node: typedef asection44449
-Node: section prototypes69406
-Node: Symbols79086
-Node: Reading Symbols80681
-Node: Writing Symbols81788
-Node: Mini Symbols83497
-Node: typedef asymbol84471
-Node: symbol handling functions89389
-Node: Archives94731
-Node: Formats98457
-Node: Relocations101405
-Node: typedef arelent102132
-Node: howto manager117943
-Node: Core Files180223
-Node: Targets182040
-Node: bfd_target184010
-Node: Architectures204090
-Node: Opening and Closing225522
-Node: Internal236524
-Node: File Caching242857
-Node: Linker Functions244771
-Node: Creating a Linker Hash Table246444
-Node: Adding Symbols to the Hash Table248182
-Node: Differing file formats249082
-Node: Adding symbols from an object file250830
-Node: Adding symbols from an archive252981
-Node: Performing the Final Link255395
-Node: Information provided by the linker256637
-Node: Relocating the section contents257791
-Node: Writing the symbol table259542
-Node: Hash Tables262535
-Node: Creating and Freeing a Hash Table263733
-Node: Looking Up or Entering a String264983
-Node: Traversing a Hash Table266236
-Node: Deriving a New Hash Table Type267025
-Node: Define the Derived Structures268091
-Node: Write the Derived Creation Routine269172
-Node: Write Other Derived Routines271796
-Node: BFD back ends273111
-Node: What to Put Where273381
-Node: aout273519
-Node: coff279837
-Node: elf304314
-Node: mmo305177
-Node: File layout306105
-Node: Symbol-table311752
-Node: mmo section mapping315521
-Node: GNU Free Documentation License319173
-Node: Index338898
-
-End Tag Table
diff --git a/bfd/doc/bfd.texinfo b/bfd/doc/bfd.texinfo
index 432e05264491..04b4266e651f 100644
--- a/bfd/doc/bfd.texinfo
+++ b/bfd/doc/bfd.texinfo
@@ -1,7 +1,7 @@
\input texinfo.tex
@setfilename bfd.info
@c Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1997, 2000,
-@c 2001, 2002, 2003
+@c 2001, 2002, 2003, 2006, 2007
@c Free Software Foundation, Inc.
@c
@synindex fn cp
@@ -14,26 +14,29 @@ END-INFO-DIR-ENTRY
@end format
@end ifinfo
-@ifinfo
+@copying
This file documents the BFD library.
-Copyright (C) 1991, 2000, 2001, 2003 Free Software Foundation, Inc.
+Copyright @copyright{} 1991, 2000, 2001, 2003, 2006, 2007 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''.
+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 ``GNU General Public License'' and ``Funding
+Free Software'', the Front-Cover texts being (a) (see below), and with
+the Back-Cover Texts being (b) (see below). A copy of the license is
+included in the section entitled ``GNU Free Documentation License''.
-@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).
+(a) The FSF's Front-Cover Text is:
-@end ignore
-@end ifinfo
+ A GNU Manual
+
+(b) The FSF's Back-Cover Text is:
+
+ You have freedom to copy and modify this GNU Manual, like GNU
+ software. Copies published by the Free Software Foundation raise
+ funds for GNU development.
+@end copying
@iftex
@c@finalout
@setchapternewpage on
@@ -43,7 +46,7 @@ notice identical to this one except for the removal of this paragraph
@title{libbfd}
@subtitle{The Binary File Descriptor Library}
@sp 1
-@subtitle First Edition---BFD version < 3.0 % Since no product is stable berfore version 3.0 :-)
+@subtitle First Edition---BFD version < 3.0 % Since no product is stable before version 3.0 :-)
@subtitle Original Document Created: April 1991
@author {Steve Chamberlain}
@author {Cygnus Support}
@@ -62,7 +65,7 @@ notice identical to this one except for the removal of this paragraph
@end tex
@vskip 0pt plus 1filll
-Copyright @copyright{} 1991, 2001, 2003 Free Software Foundation, Inc.
+Copyright @copyright{} 1991, 2001, 2003, 2006 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
@@ -73,6 +76,7 @@ Copyright @copyright{} 1991, 2001, 2003 Free Software Foundation, Inc.
@end titlepage
@end iftex
+@contents
@node Top, Overview, (dir), (dir)
@ifinfo
@@ -84,7 +88,7 @@ This file documents the binary file descriptor library libbfd.
* BFD front end:: BFD front end
* BFD back ends:: BFD back ends
* GNU Free Documentation License:: GNU Free Documentation License
-* Index:: Index
+* BFD Index:: BFD Index
@end menu
@node Overview, BFD front end, Top, Top
@@ -144,7 +148,7 @@ To use the library, include @file{bfd.h} and link with @file{libbfd.a}.
BFD provides a common interface to the parts of an object file
for a calling application.
-When an application sucessfully opens a target file (object, archive, or
+When an application successfully opens a target file (object, archive, or
whatever), a pointer to an internal structure is returned. This pointer
points to a structure called @code{bfd}, described in
@file{bfd.h}. Our convention is to call this pointer a BFD, and
@@ -294,6 +298,7 @@ structures.
@end ignore
@end menu
@node What to Put Where, aout, BFD back ends, BFD back ends
+@section What to Put Where
All of BFD lives in one directory.
@node aout, coff, What to Put Where, BFD back ends
@@ -310,11 +315,11 @@ All of BFD lives in one directory.
@node mmo, , elf, BFD back ends
@include mmo.texi
-@node GNU Free Documentation License, Index, BFD back ends, Top
+@node GNU Free Documentation License, BFD Index, BFD back ends, Top
@include fdl.texi
-@node Index, , GNU Free Documentation License, Top
-@unnumbered Index
+@node BFD Index, , GNU Free Documentation License, Top
+@unnumbered BFD Index
@printindex cp
@tex
@@ -332,5 +337,4 @@ All of BFD lives in one directory.
% Blame: doc@cygnus.com, 28mar91.
@end tex
-@contents
@bye
diff --git a/bfd/doc/bfdint.texi b/bfd/doc/bfdint.texi
index 98826fd52062..b7e7c548e6ad 100644
--- a/bfd/doc/bfdint.texi
+++ b/bfd/doc/bfdint.texi
@@ -1,6 +1,6 @@
\input texinfo
@c Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998,
-@c 2000, 2001, 2002, 2003, 2004
+@c 2000, 2001, 2002, 2003, 2004, 2006, 2007
@c Free Software Foundation, Inc.
@setfilename bfdint.info
@@ -13,6 +13,33 @@
@page
@end iftex
+@copying
+This file documents the internals of the BFD library.
+
+Copyright @copyright{} 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+1996, 1998, 2000, 2001, 2002, 2003, 2004, 2006, 2007
+Free Software Foundation, Inc.
+Contributed by Cygnus Support.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being ``GNU General Public License'' and ``Funding
+Free Software'', the Front-Cover texts being (a) (see below), and with
+the Back-Cover Texts being (b) (see below). A copy of the license is
+included in the section entitled ``GNU Free Documentation License''.
+
+(a) The FSF's Front-Cover Text is:
+
+ A GNU Manual
+
+(b) The FSF's Back-Cover Text is:
+
+ You have freedom to copy and modify this GNU Manual, like GNU
+ software. Copies published by the Free Software Foundation raise
+ funds for GNU development.
+@end copying
+
@node Top
@top BFD Internals
@raisesections
@@ -189,7 +216,7 @@ and handle it using the special hooks.
In some cases there is also implicit information which BFD can not
represent. For example, the MIPS processor distinguishes small and
-large symbols, and requires that all small symbls be within 32K of the
+large symbols, and requires that all small symbols be within 32K of the
GP register. This means that the MIPS assembler must be able to mark
variables as either small or large, and the MIPS linker must know to put
small symbols within range of the GP register. Since BFD can not
@@ -230,7 +257,7 @@ Follow the GNU coding standards.
Avoid global variables. We ideally want BFD to be fully reentrant, so
that it can be used in multiple threads. All uses of global or static
variables interfere with that. Initialized constant variables are OK,
-and they should be explicitly marked with const. Instead of global
+and they should be explicitly marked with @samp{const}. Instead of global
variables, use data attached to a BFD or to a linker hash table.
@item
@@ -1391,7 +1418,7 @@ constants used by the generic support.
@subsection ELF sections and segments
The ELF ABI permits a file to have either sections or segments or both.
-Relocateable object files conventionally have only sections.
+Relocatable object files conventionally have only sections.
Executables conventionally have both. Core files conventionally have
only program segments.
@@ -1744,23 +1771,6 @@ support.
The processor function hooks and constants are ad hoc and need better
documentation.
-When a linker script uses @samp{SIZEOF_HEADERS}, the ELF backend must
-guess at the number of program segments which will be required, in
-@samp{get_program_header_size}. This is because the linker calls
-@samp{bfd_sizeof_headers} before it knows all the section addresses and
-sizes. The ELF backend may later discover, when creating program
-segments, that more program segments are required. This is currently
-reported as an error in @samp{assign_file_positions_for_segments}.
-
-In practice this makes it difficult to use @samp{SIZEOF_HEADERS} except
-with a carefully defined linker script. Unfortunately,
-@samp{SIZEOF_HEADERS} is required for fast program loading on a native
-system, since it permits the initial code section to appear on the same
-page as the program segments, saving a page read when the program starts
-running. Fortunately, native systems permit careful definition of the
-linker script. Still, ideally it would be possible to use relaxation to
-compute the number of program segments.
-
@node BFD glossary
@section BFD glossary
@cindex glossary for bfd
diff --git a/bfd/doc/bfdio.texi b/bfd/doc/bfdio.texi
deleted file mode 100644
index eb7e31df9d08..000000000000
--- a/bfd/doc/bfdio.texi
+++ /dev/null
@@ -1,72 +0,0 @@
-@findex struct bfd_iovec
-@subsubsection @code{struct bfd_iovec}
-@strong{Description}@*
-The @code{struct bfd_iovec} contains the internal file I/O class.
-Each @code{BFD} has an instance of this class and all file I/O is
-routed through it (it is assumed that the instance implements
-all methods listed below).
-@example
-struct bfd_iovec
-@{
- /* To avoid problems with macros, a "b" rather than "f"
- prefix is prepended to each method name. */
- /* Attempt to read/write NBYTES on ABFD's IOSTREAM storing/fetching
- bytes starting at PTR. Return the number of bytes actually
- transfered (a read past end-of-file returns less than NBYTES),
- or -1 (setting @code{bfd_error}) if an error occurs. */
- file_ptr (*bread) (struct bfd *abfd, void *ptr, file_ptr nbytes);
- file_ptr (*bwrite) (struct bfd *abfd, const void *ptr,
- file_ptr nbytes);
- /* Return the current IOSTREAM file offset, or -1 (setting @code{bfd_error}
- if an error occurs. */
- file_ptr (*btell) (struct bfd *abfd);
- /* For the following, on successful completion a value of 0 is returned.
- Otherwise, a value of -1 is returned (and @code{bfd_error} is set). */
- int (*bseek) (struct bfd *abfd, file_ptr offset, int whence);
- int (*bclose) (struct bfd *abfd);
- int (*bflush) (struct bfd *abfd);
- int (*bstat) (struct bfd *abfd, struct stat *sb);
-@};
-@end example
-
-@findex bfd_get_mtime
-@subsubsection @code{bfd_get_mtime}
-@strong{Synopsis}
-@example
-long bfd_get_mtime (bfd *abfd);
-@end example
-@strong{Description}@*
-Return the file modification time (as read from the file system, or
-from the archive header for archive members).
-
-@findex bfd_get_size
-@subsubsection @code{bfd_get_size}
-@strong{Synopsis}
-@example
-long bfd_get_size (bfd *abfd);
-@end example
-@strong{Description}@*
-Return the file size (as read from file system) for the file
-associated with BFD @var{abfd}.
-
-The initial motivation for, and use of, this routine is not
-so we can get the exact size of the object the BFD applies to, since
-that might not be generally possible (archive members for example).
-It would be ideal if someone could eventually modify
-it so that such results were guaranteed.
-
-Instead, we want to ask questions like "is this NNN byte sized
-object I'm about to try read from file offset YYY reasonable?"
-As as example of where we might do this, some object formats
-use string tables for which the first @code{sizeof (long)} bytes of the
-table contain the size of the table itself, including the size bytes.
-If an application tries to read what it thinks is one of these
-string tables, without some way to validate the size, and for
-some reason the size is wrong (byte swapping error, wrong location
-for the string table, etc.), the only clue is likely to be a read
-error when it tries to read the table, or a "virtual memory
-exhausted" error when it tries to allocate 15 bazillon bytes
-of space for the 15 bazillon byte table it is about to read.
-This function at least allows us to answer the question, "is the
-size reasonable?".
-
diff --git a/bfd/doc/bfdt.texi b/bfd/doc/bfdt.texi
deleted file mode 100644
index a22fe3861d96..000000000000
--- a/bfd/doc/bfdt.texi
+++ /dev/null
@@ -1,721 +0,0 @@
-@section @code{typedef bfd}
-A BFD has type @code{bfd}; objects of this type are the
-cornerstone of any application using BFD. Using BFD
-consists of making references though the BFD and to data in the BFD.
-
-Here is the structure that defines the type @code{bfd}. It
-contains the major data about the file and pointers
-to the rest of the data.
-
-
-@example
-
-struct bfd
-@{
- /* A unique identifier of the BFD */
- unsigned int id;
-
- /* The filename the application opened the BFD with. */
- const char *filename;
-
- /* A pointer to the target jump table. */
- const struct bfd_target *xvec;
-
- /* The IOSTREAM, and corresponding IO vector that provide access
- to the file backing the BFD. */
- void *iostream;
- const struct bfd_iovec *iovec;
-
- /* Is the file descriptor being cached? That is, can it be closed as
- needed, and re-opened when accessed later? */
- bfd_boolean cacheable;
-
- /* Marks whether there was a default target specified when the
- BFD was opened. This is used to select which matching algorithm
- to use to choose the back end. */
- bfd_boolean target_defaulted;
-
- /* The caching routines use these to maintain a
- least-recently-used list of BFDs. */
- struct bfd *lru_prev, *lru_next;
-
- /* When a file is closed by the caching routines, BFD retains
- state information on the file here... */
- ufile_ptr where;
-
- /* ... and here: (``once'' means at least once). */
- bfd_boolean opened_once;
-
- /* Set if we have a locally maintained mtime value, rather than
- getting it from the file each time. */
- bfd_boolean mtime_set;
-
- /* File modified time, if mtime_set is TRUE. */
- long mtime;
-
- /* Reserved for an unimplemented file locking extension. */
- int ifd;
-
- /* The format which belongs to the BFD. (object, core, etc.) */
- bfd_format format;
-
- /* The direction with which the BFD was opened. */
- enum bfd_direction
- @{
- no_direction = 0,
- read_direction = 1,
- write_direction = 2,
- both_direction = 3
- @}
- direction;
-
- /* Format_specific flags. */
- flagword flags;
-
- /* Currently my_archive is tested before adding origin to
- anything. I believe that this can become always an add of
- origin, with origin set to 0 for non archive files. */
- ufile_ptr origin;
-
- /* Remember when output has begun, to stop strange things
- from happening. */
- bfd_boolean output_has_begun;
-
- /* A hash table for section names. */
- struct bfd_hash_table section_htab;
-
- /* Pointer to linked list of sections. */
- struct bfd_section *sections;
-
- /* The last section on the section list. */
- struct bfd_section *section_last;
-
- /* The number of sections. */
- unsigned int section_count;
-
- /* Stuff only useful for object files:
- The start address. */
- bfd_vma start_address;
-
- /* Used for input and output. */
- unsigned int symcount;
-
- /* Symbol table for output BFD (with symcount entries). */
- struct bfd_symbol **outsymbols;
-
- /* Used for slurped dynamic symbol tables. */
- unsigned int dynsymcount;
-
- /* Pointer to structure which contains architecture information. */
- const struct bfd_arch_info *arch_info;
-
- /* Flag set if symbols from this BFD should not be exported. */
- bfd_boolean no_export;
-
- /* Stuff only useful for archives. */
- void *arelt_data;
- struct bfd *my_archive; /* The containing archive BFD. */
- struct bfd *next; /* The next BFD in the archive. */
- struct bfd *archive_head; /* The first BFD in the archive. */
- bfd_boolean has_armap;
-
- /* A chain of BFD structures involved in a link. */
- struct bfd *link_next;
-
- /* A field used by _bfd_generic_link_add_archive_symbols. This will
- be used only for archive elements. */
- int archive_pass;
-
- /* Used by the back end to hold private data. */
- union
- @{
- struct aout_data_struct *aout_data;
- struct artdata *aout_ar_data;
- struct _oasys_data *oasys_obj_data;
- struct _oasys_ar_data *oasys_ar_data;
- struct coff_tdata *coff_obj_data;
- struct pe_tdata *pe_obj_data;
- struct xcoff_tdata *xcoff_obj_data;
- struct ecoff_tdata *ecoff_obj_data;
- struct ieee_data_struct *ieee_data;
- struct ieee_ar_data_struct *ieee_ar_data;
- struct srec_data_struct *srec_data;
- struct ihex_data_struct *ihex_data;
- struct tekhex_data_struct *tekhex_data;
- struct elf_obj_tdata *elf_obj_data;
- struct nlm_obj_tdata *nlm_obj_data;
- struct bout_data_struct *bout_data;
- struct mmo_data_struct *mmo_data;
- struct sun_core_struct *sun_core_data;
- struct sco5_core_struct *sco5_core_data;
- struct trad_core_struct *trad_core_data;
- struct som_data_struct *som_data;
- struct hpux_core_struct *hpux_core_data;
- struct hppabsd_core_struct *hppabsd_core_data;
- struct sgi_core_struct *sgi_core_data;
- struct lynx_core_struct *lynx_core_data;
- struct osf_core_struct *osf_core_data;
- struct cisco_core_struct *cisco_core_data;
- struct versados_data_struct *versados_data;
- struct netbsd_core_struct *netbsd_core_data;
- struct mach_o_data_struct *mach_o_data;
- struct mach_o_fat_data_struct *mach_o_fat_data;
- struct bfd_pef_data_struct *pef_data;
- struct bfd_pef_xlib_data_struct *pef_xlib_data;
- struct bfd_sym_data_struct *sym_data;
- void *any;
- @}
- tdata;
-
- /* Used by the application to hold private data. */
- void *usrdata;
-
- /* Where all the allocated stuff under this BFD goes. This is a
- struct objalloc *, but we use void * to avoid requiring the inclusion
- of objalloc.h. */
- void *memory;
-@};
-
-@end example
-@section Error reporting
-Most BFD functions return nonzero on success (check their
-individual documentation for precise semantics). On an error,
-they call @code{bfd_set_error} to set an error condition that callers
-can check by calling @code{bfd_get_error}.
-If that returns @code{bfd_error_system_call}, then check
-@code{errno}.
-
-The easiest way to report a BFD error to the user is to
-use @code{bfd_perror}.
-
-@subsection Type @code{bfd_error_type}
-The values returned by @code{bfd_get_error} are defined by the
-enumerated type @code{bfd_error_type}.
-
-
-@example
-
-typedef enum bfd_error
-@{
- bfd_error_no_error = 0,
- bfd_error_system_call,
- bfd_error_invalid_target,
- bfd_error_wrong_format,
- bfd_error_wrong_object_format,
- bfd_error_invalid_operation,
- bfd_error_no_memory,
- bfd_error_no_symbols,
- bfd_error_no_armap,
- bfd_error_no_more_archived_files,
- bfd_error_malformed_archive,
- bfd_error_file_not_recognized,
- bfd_error_file_ambiguously_recognized,
- bfd_error_no_contents,
- bfd_error_nonrepresentable_section,
- bfd_error_no_debug_section,
- bfd_error_bad_value,
- bfd_error_file_truncated,
- bfd_error_file_too_big,
- bfd_error_invalid_error_code
-@}
-bfd_error_type;
-
-@end example
-@findex bfd_get_error
-@subsubsection @code{bfd_get_error}
-@strong{Synopsis}
-@example
-bfd_error_type bfd_get_error (void);
-@end example
-@strong{Description}@*
-Return the current BFD error condition.
-
-@findex bfd_set_error
-@subsubsection @code{bfd_set_error}
-@strong{Synopsis}
-@example
-void bfd_set_error (bfd_error_type error_tag);
-@end example
-@strong{Description}@*
-Set the BFD error condition to be @var{error_tag}.
-
-@findex bfd_errmsg
-@subsubsection @code{bfd_errmsg}
-@strong{Synopsis}
-@example
-const char *bfd_errmsg (bfd_error_type error_tag);
-@end example
-@strong{Description}@*
-Return a string describing the error @var{error_tag}, or
-the system error if @var{error_tag} is @code{bfd_error_system_call}.
-
-@findex bfd_perror
-@subsubsection @code{bfd_perror}
-@strong{Synopsis}
-@example
-void bfd_perror (const char *message);
-@end example
-@strong{Description}@*
-Print to the standard error stream a string describing the
-last BFD error that occurred, or the last system error if
-the last BFD error was a system call failure. If @var{message}
-is non-NULL and non-empty, the error string printed is preceded
-by @var{message}, a colon, and a space. It is followed by a newline.
-
-@subsection BFD error handler
-Some BFD functions want to print messages describing the
-problem. They call a BFD error handler function. This
-function may be overridden by the program.
-
-The BFD error handler acts like printf.
-
-
-@example
-
-typedef void (*bfd_error_handler_type) (const char *, ...);
-
-@end example
-@findex bfd_set_error_handler
-@subsubsection @code{bfd_set_error_handler}
-@strong{Synopsis}
-@example
-bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
-@end example
-@strong{Description}@*
-Set the BFD error handler function. Returns the previous
-function.
-
-@findex bfd_set_error_program_name
-@subsubsection @code{bfd_set_error_program_name}
-@strong{Synopsis}
-@example
-void bfd_set_error_program_name (const char *);
-@end example
-@strong{Description}@*
-Set the program name to use when printing a BFD error. This
-is printed before the error message followed by a colon and
-space. The string must not be changed after it is passed to
-this function.
-
-@findex bfd_get_error_handler
-@subsubsection @code{bfd_get_error_handler}
-@strong{Synopsis}
-@example
-bfd_error_handler_type bfd_get_error_handler (void);
-@end example
-@strong{Description}@*
-Return the BFD error handler function.
-
-@section Miscellaneous
-
-
-@subsection Miscellaneous functions
-
-
-@findex bfd_get_reloc_upper_bound
-@subsubsection @code{bfd_get_reloc_upper_bound}
-@strong{Synopsis}
-@example
-long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
-@end example
-@strong{Description}@*
-Return the number of bytes required to store the
-relocation information associated with section @var{sect}
-attached to bfd @var{abfd}. If an error occurs, return -1.
-
-@findex bfd_canonicalize_reloc
-@subsubsection @code{bfd_canonicalize_reloc}
-@strong{Synopsis}
-@example
-long bfd_canonicalize_reloc
- (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
-@end example
-@strong{Description}@*
-Call the back end associated with the open BFD
-@var{abfd} and translate the external form of the relocation
-information attached to @var{sec} into the internal canonical
-form. Place the table into memory at @var{loc}, which has
-been preallocated, usually by a call to
-@code{bfd_get_reloc_upper_bound}. Returns the number of relocs, or
--1 on error.
-
-The @var{syms} table is also needed for horrible internal magic
-reasons.
-
-@findex bfd_set_reloc
-@subsubsection @code{bfd_set_reloc}
-@strong{Synopsis}
-@example
-void bfd_set_reloc
- (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
-@end example
-@strong{Description}@*
-Set the relocation pointer and count within
-section @var{sec} to the values @var{rel} and @var{count}.
-The argument @var{abfd} is ignored.
-
-@findex bfd_set_file_flags
-@subsubsection @code{bfd_set_file_flags}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
-@end example
-@strong{Description}@*
-Set the flag word in the BFD @var{abfd} to the value @var{flags}.
-
-Possible errors are:
-@itemize @bullet
-
-@item
-@code{bfd_error_wrong_format} - The target bfd was not of object format.
-@item
-@code{bfd_error_invalid_operation} - The target bfd was open for reading.
-@item
-@code{bfd_error_invalid_operation} -
-The flag word contained a bit which was not applicable to the
-type of file. E.g., an attempt was made to set the @code{D_PAGED} bit
-on a BFD format which does not support demand paging.
-@end itemize
-
-@findex bfd_get_arch_size
-@subsubsection @code{bfd_get_arch_size}
-@strong{Synopsis}
-@example
-int bfd_get_arch_size (bfd *abfd);
-@end example
-@strong{Description}@*
-Returns the architecture address size, in bits, as determined
-by the object file's format. For ELF, this information is
-included in the header.
-
-@strong{Returns}@*
-Returns the arch size in bits if known, @code{-1} otherwise.
-
-@findex bfd_get_sign_extend_vma
-@subsubsection @code{bfd_get_sign_extend_vma}
-@strong{Synopsis}
-@example
-int bfd_get_sign_extend_vma (bfd *abfd);
-@end example
-@strong{Description}@*
-Indicates if the target architecture "naturally" sign extends
-an address. Some architectures implicitly sign extend address
-values when they are converted to types larger than the size
-of an address. For instance, bfd_get_start_address() will
-return an address sign extended to fill a bfd_vma when this is
-the case.
-
-@strong{Returns}@*
-Returns @code{1} if the target architecture is known to sign
-extend addresses, @code{0} if the target architecture is known to
-not sign extend addresses, and @code{-1} otherwise.
-
-@findex bfd_set_start_address
-@subsubsection @code{bfd_set_start_address}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
-@end example
-@strong{Description}@*
-Make @var{vma} the entry point of output BFD @var{abfd}.
-
-@strong{Returns}@*
-Returns @code{TRUE} on success, @code{FALSE} otherwise.
-
-@findex bfd_get_gp_size
-@subsubsection @code{bfd_get_gp_size}
-@strong{Synopsis}
-@example
-unsigned int bfd_get_gp_size (bfd *abfd);
-@end example
-@strong{Description}@*
-Return the maximum size of objects to be optimized using the GP
-register under MIPS ECOFF. This is typically set by the @code{-G}
-argument to the compiler, assembler or linker.
-
-@findex bfd_set_gp_size
-@subsubsection @code{bfd_set_gp_size}
-@strong{Synopsis}
-@example
-void bfd_set_gp_size (bfd *abfd, unsigned int i);
-@end example
-@strong{Description}@*
-Set the maximum size of objects to be optimized using the GP
-register under ECOFF or MIPS ELF. This is typically set by
-the @code{-G} argument to the compiler, assembler or linker.
-
-@findex bfd_scan_vma
-@subsubsection @code{bfd_scan_vma}
-@strong{Synopsis}
-@example
-bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
-@end example
-@strong{Description}@*
-Convert, like @code{strtoul}, a numerical expression
-@var{string} into a @code{bfd_vma} integer, and return that integer.
-(Though without as many bells and whistles as @code{strtoul}.)
-The expression is assumed to be unsigned (i.e., positive).
-If given a @var{base}, it is used as the base for conversion.
-A base of 0 causes the function to interpret the string
-in hex if a leading "0x" or "0X" is found, otherwise
-in octal if a leading zero is found, otherwise in decimal.
-
-If the value would overflow, the maximum @code{bfd_vma} value is
-returned.
-
-@findex bfd_copy_private_header_data
-@subsubsection @code{bfd_copy_private_header_data}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
-@end example
-@strong{Description}@*
-Copy private BFD header information from the BFD @var{ibfd} to the
-the BFD @var{obfd}. This copies information that may require
-sections to exist, but does not require symbol tables. Return
-@code{true} on success, @code{false} on error.
-Possible error returns are:
-
-@itemize @bullet
-
-@item
-@code{bfd_error_no_memory} -
-Not enough memory exists to create private data for @var{obfd}.
-@end itemize
-@example
-#define bfd_copy_private_header_data(ibfd, obfd) \
- BFD_SEND (obfd, _bfd_copy_private_header_data, \
- (ibfd, obfd))
-@end example
-
-@findex bfd_copy_private_bfd_data
-@subsubsection @code{bfd_copy_private_bfd_data}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
-@end example
-@strong{Description}@*
-Copy private BFD information from the BFD @var{ibfd} to the
-the BFD @var{obfd}. Return @code{TRUE} on success, @code{FALSE} on error.
-Possible error returns are:
-
-@itemize @bullet
-
-@item
-@code{bfd_error_no_memory} -
-Not enough memory exists to create private data for @var{obfd}.
-@end itemize
-@example
-#define bfd_copy_private_bfd_data(ibfd, obfd) \
- BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
- (ibfd, obfd))
-@end example
-
-@findex bfd_merge_private_bfd_data
-@subsubsection @code{bfd_merge_private_bfd_data}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd);
-@end example
-@strong{Description}@*
-Merge private BFD information from the BFD @var{ibfd} to the
-the output file BFD @var{obfd} when linking. Return @code{TRUE}
-on success, @code{FALSE} on error. Possible error returns are:
-
-@itemize @bullet
-
-@item
-@code{bfd_error_no_memory} -
-Not enough memory exists to create private data for @var{obfd}.
-@end itemize
-@example
-#define bfd_merge_private_bfd_data(ibfd, obfd) \
- BFD_SEND (obfd, _bfd_merge_private_bfd_data, \
- (ibfd, obfd))
-@end example
-
-@findex bfd_set_private_flags
-@subsubsection @code{bfd_set_private_flags}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
-@end example
-@strong{Description}@*
-Set private BFD flag information in the BFD @var{abfd}.
-Return @code{TRUE} on success, @code{FALSE} on error. Possible error
-returns are:
-
-@itemize @bullet
-
-@item
-@code{bfd_error_no_memory} -
-Not enough memory exists to create private data for @var{obfd}.
-@end itemize
-@example
-#define bfd_set_private_flags(abfd, flags) \
- BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
-@end example
-
-@findex Other functions
-@subsubsection @code{Other functions}
-@strong{Description}@*
-The following functions exist but have not yet been documented.
-@example
-#define bfd_sizeof_headers(abfd, reloc) \
- BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, reloc))
-
-#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
- BFD_SEND (abfd, _bfd_find_nearest_line, \
- (abfd, sec, syms, off, file, func, line))
-
-#define bfd_find_line(abfd, syms, sym, file, line) \
- BFD_SEND (abfd, _bfd_find_line, \
- (abfd, syms, sym, file, line))
-
-#define bfd_find_inliner_info(abfd, file, func, line) \
- BFD_SEND (abfd, _bfd_find_inliner_info, \
- (abfd, file, func, line))
-
-#define bfd_debug_info_start(abfd) \
- BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
-
-#define bfd_debug_info_end(abfd) \
- BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
-
-#define bfd_debug_info_accumulate(abfd, section) \
- BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
-
-#define bfd_stat_arch_elt(abfd, stat) \
- BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
-
-#define bfd_update_armap_timestamp(abfd) \
- BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
-
-#define bfd_set_arch_mach(abfd, arch, mach)\
- BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
-
-#define bfd_relax_section(abfd, section, link_info, again) \
- BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
-
-#define bfd_gc_sections(abfd, link_info) \
- BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
-
-#define bfd_merge_sections(abfd, link_info) \
- BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
-
-#define bfd_is_group_section(abfd, sec) \
- BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
-
-#define bfd_discard_group(abfd, sec) \
- BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
-
-#define bfd_link_hash_table_create(abfd) \
- BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
-
-#define bfd_link_hash_table_free(abfd, hash) \
- BFD_SEND (abfd, _bfd_link_hash_table_free, (hash))
-
-#define bfd_link_add_symbols(abfd, info) \
- BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
-
-#define bfd_link_just_syms(abfd, sec, info) \
- BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
-
-#define bfd_final_link(abfd, info) \
- BFD_SEND (abfd, _bfd_final_link, (abfd, info))
-
-#define bfd_free_cached_info(abfd) \
- BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
-
-#define bfd_get_dynamic_symtab_upper_bound(abfd) \
- BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
-
-#define bfd_print_private_bfd_data(abfd, file)\
- BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
-
-#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
- BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
-
-#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
- BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
- dyncount, dynsyms, ret))
-
-#define bfd_get_dynamic_reloc_upper_bound(abfd) \
- BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
-
-#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
- BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
-
-extern bfd_byte *bfd_get_relocated_section_contents
- (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
- bfd_boolean, asymbol **);
-
-@end example
-
-@findex bfd_alt_mach_code
-@subsubsection @code{bfd_alt_mach_code}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
-@end example
-@strong{Description}@*
-When more than one machine code number is available for the
-same machine type, this function can be used to switch between
-the preferred one (alternative == 0) and any others. Currently,
-only ELF supports this feature, with up to two alternate
-machine codes.
-
-
-@example
-struct bfd_preserve
-@{
- void *marker;
- void *tdata;
- flagword flags;
- const struct bfd_arch_info *arch_info;
- struct bfd_section *sections;
- struct bfd_section *section_last;
- unsigned int section_count;
- struct bfd_hash_table section_htab;
-@};
-
-@end example
-@findex bfd_preserve_save
-@subsubsection @code{bfd_preserve_save}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_preserve_save (bfd *, struct bfd_preserve *);
-@end example
-@strong{Description}@*
-When testing an object for compatibility with a particular
-target back-end, the back-end object_p function needs to set
-up certain fields in the bfd on successfully recognizing the
-object. This typically happens in a piecemeal fashion, with
-failures possible at many points. On failure, the bfd is
-supposed to be restored to its initial state, which is
-virtually impossible. However, restoring a subset of the bfd
-state works in practice. This function stores the subset and
-reinitializes the bfd.
-
-@findex bfd_preserve_restore
-@subsubsection @code{bfd_preserve_restore}
-@strong{Synopsis}
-@example
-void bfd_preserve_restore (bfd *, struct bfd_preserve *);
-@end example
-@strong{Description}@*
-This function restores bfd state saved by bfd_preserve_save.
-If MARKER is non-NULL in struct bfd_preserve then that block
-and all subsequently bfd_alloc'd memory is freed.
-
-@findex bfd_preserve_finish
-@subsubsection @code{bfd_preserve_finish}
-@strong{Synopsis}
-@example
-void bfd_preserve_finish (bfd *, struct bfd_preserve *);
-@end example
-@strong{Description}@*
-This function should be called when the bfd state saved by
-bfd_preserve_save is no longer needed. ie. when the back-end
-object_p function returns with success.
-
diff --git a/bfd/doc/bfdwin.texi b/bfd/doc/bfdwin.texi
deleted file mode 100644
index b1fd7d5bed69..000000000000
--- a/bfd/doc/bfdwin.texi
+++ /dev/null
@@ -1,2 +0,0 @@
-@findex
-@subsubsection @code{}
diff --git a/bfd/doc/cache.texi b/bfd/doc/cache.texi
deleted file mode 100644
index 5820a2a6a1d3..000000000000
--- a/bfd/doc/cache.texi
+++ /dev/null
@@ -1,65 +0,0 @@
-@section File caching
-The file caching mechanism is embedded within BFD and allows
-the application to open as many BFDs as it wants without
-regard to the underlying operating system's file descriptor
-limit (often as low as 20 open files). The module in
-@code{cache.c} maintains a least recently used list of
-@code{BFD_CACHE_MAX_OPEN} files, and exports the name
-@code{bfd_cache_lookup}, which runs around and makes sure that
-the required BFD is open. If not, then it chooses a file to
-close, closes it and opens the one wanted, returning its file
-handle.
-
-@subsection Caching functions
-
-
-@findex bfd_cache_init
-@subsubsection @code{bfd_cache_init}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_cache_init (bfd *abfd);
-@end example
-@strong{Description}@*
-Add a newly opened BFD to the cache.
-
-@findex bfd_cache_close
-@subsubsection @code{bfd_cache_close}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_cache_close (bfd *abfd);
-@end example
-@strong{Description}@*
-Remove the BFD @var{abfd} from the cache. If the attached file is open,
-then close it too.
-
-@strong{Returns}@*
-@code{FALSE} is returned if closing the file fails, @code{TRUE} is
-returned if all is well.
-
-@findex bfd_cache_close_all
-@subsubsection @code{bfd_cache_close_all}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_cache_close_all (void);
-@end example
-@strong{Description}@*
-Remove all BFDs from the cache. If the attached file is open,
-then close it too.
-
-@strong{Returns}@*
-@code{FALSE} is returned if closing one of the file fails, @code{TRUE} is
-returned if all is well.
-
-@findex bfd_open_file
-@subsubsection @code{bfd_open_file}
-@strong{Synopsis}
-@example
-FILE* bfd_open_file (bfd *abfd);
-@end example
-@strong{Description}@*
-Call the OS to open a file for @var{abfd}. Return the @code{FILE *}
-(possibly @code{NULL}) that results from this operation. Set up the
-BFD so that future accesses know the file is open. If the @code{FILE *}
-returned is @code{NULL}, then it won't have been put in the
-cache, so it won't have to be removed from it.
-
diff --git a/bfd/doc/coffcode.texi b/bfd/doc/coffcode.texi
deleted file mode 100644
index 6689009c0817..000000000000
--- a/bfd/doc/coffcode.texi
+++ /dev/null
@@ -1,608 +0,0 @@
-@section coff backends
-BFD supports a number of different flavours of coff format.
-The major differences between formats are the sizes and
-alignments of fields in structures on disk, and the occasional
-extra field.
-
-Coff in all its varieties is implemented with a few common
-files and a number of implementation specific files. For
-example, The 88k bcs coff format is implemented in the file
-@file{coff-m88k.c}. This file @code{#include}s
-@file{coff/m88k.h} which defines the external structure of the
-coff format for the 88k, and @file{coff/internal.h} which
-defines the internal structure. @file{coff-m88k.c} also
-defines the relocations used by the 88k format
-@xref{Relocations}.
-
-The Intel i960 processor version of coff is implemented in
-@file{coff-i960.c}. This file has the same structure as
-@file{coff-m88k.c}, except that it includes @file{coff/i960.h}
-rather than @file{coff-m88k.h}.
-
-@subsection Porting to a new version of coff
-The recommended method is to select from the existing
-implementations the version of coff which is most like the one
-you want to use. For example, we'll say that i386 coff is
-the one you select, and that your coff flavour is called foo.
-Copy @file{i386coff.c} to @file{foocoff.c}, copy
-@file{../include/coff/i386.h} to @file{../include/coff/foo.h},
-and add the lines to @file{targets.c} and @file{Makefile.in}
-so that your new back end is used. Alter the shapes of the
-structures in @file{../include/coff/foo.h} so that they match
-what you need. You will probably also have to add
-@code{#ifdef}s to the code in @file{coff/internal.h} and
-@file{coffcode.h} if your version of coff is too wild.
-
-You can verify that your new BFD backend works quite simply by
-building @file{objdump} from the @file{binutils} directory,
-and making sure that its version of what's going on and your
-host system's idea (assuming it has the pretty standard coff
-dump utility, usually called @code{att-dump} or just
-@code{dump}) are the same. Then clean up your code, and send
-what you've done to Cygnus. Then your stuff will be in the
-next release, and you won't have to keep integrating it.
-
-@subsection How the coff backend works
-
-
-@subsubsection File layout
-The Coff backend is split into generic routines that are
-applicable to any Coff target and routines that are specific
-to a particular target. The target-specific routines are
-further split into ones which are basically the same for all
-Coff targets except that they use the external symbol format
-or use different values for certain constants.
-
-The generic routines are in @file{coffgen.c}. These routines
-work for any Coff target. They use some hooks into the target
-specific code; the hooks are in a @code{bfd_coff_backend_data}
-structure, one of which exists for each target.
-
-The essentially similar target-specific routines are in
-@file{coffcode.h}. This header file includes executable C code.
-The various Coff targets first include the appropriate Coff
-header file, make any special defines that are needed, and
-then include @file{coffcode.h}.
-
-Some of the Coff targets then also have additional routines in
-the target source file itself.
-
-For example, @file{coff-i960.c} includes
-@file{coff/internal.h} and @file{coff/i960.h}. It then
-defines a few constants, such as @code{I960}, and includes
-@file{coffcode.h}. Since the i960 has complex relocation
-types, @file{coff-i960.c} also includes some code to
-manipulate the i960 relocs. This code is not in
-@file{coffcode.h} because it would not be used by any other
-target.
-
-@subsubsection Bit twiddling
-Each flavour of coff supported in BFD has its own header file
-describing the external layout of the structures. There is also
-an internal description of the coff layout, in
-@file{coff/internal.h}. A major function of the
-coff backend is swapping the bytes and twiddling the bits to
-translate the external form of the structures into the normal
-internal form. This is all performed in the
-@code{bfd_swap}_@i{thing}_@i{direction} routines. Some
-elements are different sizes between different versions of
-coff; it is the duty of the coff version specific include file
-to override the definitions of various packing routines in
-@file{coffcode.h}. E.g., the size of line number entry in coff is
-sometimes 16 bits, and sometimes 32 bits. @code{#define}ing
-@code{PUT_LNSZ_LNNO} and @code{GET_LNSZ_LNNO} will select the
-correct one. No doubt, some day someone will find a version of
-coff which has a varying field size not catered to at the
-moment. To port BFD, that person will have to add more @code{#defines}.
-Three of the bit twiddling routines are exported to
-@code{gdb}; @code{coff_swap_aux_in}, @code{coff_swap_sym_in}
-and @code{coff_swap_lineno_in}. @code{GDB} reads the symbol
-table on its own, but uses BFD to fix things up. More of the
-bit twiddlers are exported for @code{gas};
-@code{coff_swap_aux_out}, @code{coff_swap_sym_out},
-@code{coff_swap_lineno_out}, @code{coff_swap_reloc_out},
-@code{coff_swap_filehdr_out}, @code{coff_swap_aouthdr_out},
-@code{coff_swap_scnhdr_out}. @code{Gas} currently keeps track
-of all the symbol table and reloc drudgery itself, thereby
-saving the internal BFD overhead, but uses BFD to swap things
-on the way out, making cross ports much safer. Doing so also
-allows BFD (and thus the linker) to use the same header files
-as @code{gas}, which makes one avenue to disaster disappear.
-
-@subsubsection Symbol reading
-The simple canonical form for symbols used by BFD is not rich
-enough to keep all the information available in a coff symbol
-table. The back end gets around this problem by keeping the original
-symbol table around, "behind the scenes".
-
-When a symbol table is requested (through a call to
-@code{bfd_canonicalize_symtab}), a request gets through to
-@code{coff_get_normalized_symtab}. This reads the symbol table from
-the coff file and swaps all the structures inside into the
-internal form. It also fixes up all the pointers in the table
-(represented in the file by offsets from the first symbol in
-the table) into physical pointers to elements in the new
-internal table. This involves some work since the meanings of
-fields change depending upon context: a field that is a
-pointer to another structure in the symbol table at one moment
-may be the size in bytes of a structure at the next. Another
-pass is made over the table. All symbols which mark file names
-(@code{C_FILE} symbols) are modified so that the internal
-string points to the value in the auxent (the real filename)
-rather than the normal text associated with the symbol
-(@code{".file"}).
-
-At this time the symbol names are moved around. Coff stores
-all symbols less than nine characters long physically
-within the symbol table; longer strings are kept at the end of
-the file in the string table. This pass moves all strings
-into memory and replaces them with pointers to the strings.
-
-The symbol table is massaged once again, this time to create
-the canonical table used by the BFD application. Each symbol
-is inspected in turn, and a decision made (using the
-@code{sclass} field) about the various flags to set in the
-@code{asymbol}. @xref{Symbols}. The generated canonical table
-shares strings with the hidden internal symbol table.
-
-Any linenumbers are read from the coff file too, and attached
-to the symbols which own the functions the linenumbers belong to.
-
-@subsubsection Symbol writing
-Writing a symbol to a coff file which didn't come from a coff
-file will lose any debugging information. The @code{asymbol}
-structure remembers the BFD from which the symbol was taken, and on
-output the back end makes sure that the same destination target as
-source target is present.
-
-When the symbols have come from a coff file then all the
-debugging information is preserved.
-
-Symbol tables are provided for writing to the back end in a
-vector of pointers to pointers. This allows applications like
-the linker to accumulate and output large symbol tables
-without having to do too much byte copying.
-
-This function runs through the provided symbol table and
-patches each symbol marked as a file place holder
-(@code{C_FILE}) to point to the next file place holder in the
-list. It also marks each @code{offset} field in the list with
-the offset from the first symbol of the current symbol.
-
-Another function of this procedure is to turn the canonical
-value form of BFD into the form used by coff. Internally, BFD
-expects symbol values to be offsets from a section base; so a
-symbol physically at 0x120, but in a section starting at
-0x100, would have the value 0x20. Coff expects symbols to
-contain their final value, so symbols have their values
-changed at this point to reflect their sum with their owning
-section. This transformation uses the
-@code{output_section} field of the @code{asymbol}'s
-@code{asection} @xref{Sections}.
-
-@itemize @bullet
-
-@item
-@code{coff_mangle_symbols}
-@end itemize
-This routine runs though the provided symbol table and uses
-the offsets generated by the previous pass and the pointers
-generated when the symbol table was read in to create the
-structured hierarchy required by coff. It changes each pointer
-to a symbol into the index into the symbol table of the asymbol.
-
-@itemize @bullet
-
-@item
-@code{coff_write_symbols}
-@end itemize
-This routine runs through the symbol table and patches up the
-symbols from their internal form into the coff way, calls the
-bit twiddlers, and writes out the table to the file.
-
-@findex coff_symbol_type
-@subsubsection @code{coff_symbol_type}
-@strong{Description}@*
-The hidden information for an @code{asymbol} is described in a
-@code{combined_entry_type}:
-
-
-@example
-
-typedef struct coff_ptr_struct
-@{
- /* Remembers the offset from the first symbol in the file for
- this symbol. Generated by coff_renumber_symbols. */
- unsigned int offset;
-
- /* Should the value of this symbol be renumbered. Used for
- XCOFF C_BSTAT symbols. Set by coff_slurp_symbol_table. */
- unsigned int fix_value : 1;
-
- /* Should the tag field of this symbol be renumbered.
- Created by coff_pointerize_aux. */
- unsigned int fix_tag : 1;
-
- /* Should the endidx field of this symbol be renumbered.
- Created by coff_pointerize_aux. */
- unsigned int fix_end : 1;
-
- /* Should the x_csect.x_scnlen field be renumbered.
- Created by coff_pointerize_aux. */
- unsigned int fix_scnlen : 1;
-
- /* Fix up an XCOFF C_BINCL/C_EINCL symbol. The value is the
- index into the line number entries. Set by coff_slurp_symbol_table. */
- unsigned int fix_line : 1;
-
- /* The container for the symbol structure as read and translated
- from the file. */
- union
- @{
- union internal_auxent auxent;
- struct internal_syment syment;
- @} u;
-@} combined_entry_type;
-
-
-/* Each canonical asymbol really looks like this: */
-
-typedef struct coff_symbol_struct
-@{
- /* The actual symbol which the rest of BFD works with */
- asymbol symbol;
-
- /* A pointer to the hidden information for this symbol */
- combined_entry_type *native;
-
- /* A pointer to the linenumber information for this symbol */
- struct lineno_cache_entry *lineno;
-
- /* Have the line numbers been relocated yet ? */
- bfd_boolean done_lineno;
-@} coff_symbol_type;
-@end example
-@findex bfd_coff_backend_data
-@subsubsection @code{bfd_coff_backend_data}
-
-@example
-/* COFF symbol classifications. */
-
-enum coff_symbol_classification
-@{
- /* Global symbol. */
- COFF_SYMBOL_GLOBAL,
- /* Common symbol. */
- COFF_SYMBOL_COMMON,
- /* Undefined symbol. */
- COFF_SYMBOL_UNDEFINED,
- /* Local symbol. */
- COFF_SYMBOL_LOCAL,
- /* PE section symbol. */
- COFF_SYMBOL_PE_SECTION
-@};
-
-@end example
-Special entry points for gdb to swap in coff symbol table parts:
-@example
-typedef struct
-@{
- void (*_bfd_coff_swap_aux_in)
- (bfd *, void *, int, int, int, int, void *);
-
- void (*_bfd_coff_swap_sym_in)
- (bfd *, void *, void *);
-
- void (*_bfd_coff_swap_lineno_in)
- (bfd *, void *, void *);
-
- unsigned int (*_bfd_coff_swap_aux_out)
- (bfd *, void *, int, int, int, int, void *);
-
- unsigned int (*_bfd_coff_swap_sym_out)
- (bfd *, void *, void *);
-
- unsigned int (*_bfd_coff_swap_lineno_out)
- (bfd *, void *, void *);
-
- unsigned int (*_bfd_coff_swap_reloc_out)
- (bfd *, void *, void *);
-
- unsigned int (*_bfd_coff_swap_filehdr_out)
- (bfd *, void *, void *);
-
- unsigned int (*_bfd_coff_swap_aouthdr_out)
- (bfd *, void *, void *);
-
- unsigned int (*_bfd_coff_swap_scnhdr_out)
- (bfd *, void *, void *);
-
- unsigned int _bfd_filhsz;
- unsigned int _bfd_aoutsz;
- unsigned int _bfd_scnhsz;
- unsigned int _bfd_symesz;
- unsigned int _bfd_auxesz;
- unsigned int _bfd_relsz;
- unsigned int _bfd_linesz;
- unsigned int _bfd_filnmlen;
- bfd_boolean _bfd_coff_long_filenames;
- bfd_boolean _bfd_coff_long_section_names;
- unsigned int _bfd_coff_default_section_alignment_power;
- bfd_boolean _bfd_coff_force_symnames_in_strings;
- unsigned int _bfd_coff_debug_string_prefix_length;
-
- void (*_bfd_coff_swap_filehdr_in)
- (bfd *, void *, void *);
-
- void (*_bfd_coff_swap_aouthdr_in)
- (bfd *, void *, void *);
-
- void (*_bfd_coff_swap_scnhdr_in)
- (bfd *, void *, void *);
-
- void (*_bfd_coff_swap_reloc_in)
- (bfd *abfd, void *, void *);
-
- bfd_boolean (*_bfd_coff_bad_format_hook)
- (bfd *, void *);
-
- bfd_boolean (*_bfd_coff_set_arch_mach_hook)
- (bfd *, void *);
-
- void * (*_bfd_coff_mkobject_hook)
- (bfd *, void *, void *);
-
- bfd_boolean (*_bfd_styp_to_sec_flags_hook)
- (bfd *, void *, const char *, asection *, flagword *);
-
- void (*_bfd_set_alignment_hook)
- (bfd *, asection *, void *);
-
- bfd_boolean (*_bfd_coff_slurp_symbol_table)
- (bfd *);
-
- bfd_boolean (*_bfd_coff_symname_in_debug)
- (bfd *, struct internal_syment *);
-
- bfd_boolean (*_bfd_coff_pointerize_aux_hook)
- (bfd *, combined_entry_type *, combined_entry_type *,
- unsigned int, combined_entry_type *);
-
- bfd_boolean (*_bfd_coff_print_aux)
- (bfd *, FILE *, combined_entry_type *, combined_entry_type *,
- combined_entry_type *, unsigned int);
-
- void (*_bfd_coff_reloc16_extra_cases)
- (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
- bfd_byte *, unsigned int *, unsigned int *);
-
- int (*_bfd_coff_reloc16_estimate)
- (bfd *, asection *, arelent *, unsigned int,
- struct bfd_link_info *);
-
- enum coff_symbol_classification (*_bfd_coff_classify_symbol)
- (bfd *, struct internal_syment *);
-
- bfd_boolean (*_bfd_coff_compute_section_file_positions)
- (bfd *);
-
- bfd_boolean (*_bfd_coff_start_final_link)
- (bfd *, struct bfd_link_info *);
-
- bfd_boolean (*_bfd_coff_relocate_section)
- (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
- struct internal_reloc *, struct internal_syment *, asection **);
-
- reloc_howto_type *(*_bfd_coff_rtype_to_howto)
- (bfd *, asection *, struct internal_reloc *,
- struct coff_link_hash_entry *, struct internal_syment *,
- bfd_vma *);
-
- bfd_boolean (*_bfd_coff_adjust_symndx)
- (bfd *, struct bfd_link_info *, bfd *, asection *,
- struct internal_reloc *, bfd_boolean *);
-
- bfd_boolean (*_bfd_coff_link_add_one_symbol)
- (struct bfd_link_info *, bfd *, const char *, flagword,
- asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean,
- struct bfd_link_hash_entry **);
-
- bfd_boolean (*_bfd_coff_link_output_has_begun)
- (bfd *, struct coff_final_link_info *);
-
- bfd_boolean (*_bfd_coff_final_link_postscript)
- (bfd *, struct coff_final_link_info *);
-
-@} bfd_coff_backend_data;
-
-#define coff_backend_info(abfd) \
- ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)
-
-#define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
- ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))
-
-#define bfd_coff_swap_sym_in(a,e,i) \
- ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i))
-
-#define bfd_coff_swap_lineno_in(a,e,i) \
- ((coff_backend_info ( a)->_bfd_coff_swap_lineno_in) (a,e,i))
-
-#define bfd_coff_swap_reloc_out(abfd, i, o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_out) (abfd, i, o))
-
-#define bfd_coff_swap_lineno_out(abfd, i, o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o))
-
-#define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \
- ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o))
-
-#define bfd_coff_swap_sym_out(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o))
-
-#define bfd_coff_swap_scnhdr_out(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_out) (abfd, i, o))
-
-#define bfd_coff_swap_filehdr_out(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_out) (abfd, i, o))
-
-#define bfd_coff_swap_aouthdr_out(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_out) (abfd, i, o))
-
-#define bfd_coff_filhsz(abfd) (coff_backend_info (abfd)->_bfd_filhsz)
-#define bfd_coff_aoutsz(abfd) (coff_backend_info (abfd)->_bfd_aoutsz)
-#define bfd_coff_scnhsz(abfd) (coff_backend_info (abfd)->_bfd_scnhsz)
-#define bfd_coff_symesz(abfd) (coff_backend_info (abfd)->_bfd_symesz)
-#define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz)
-#define bfd_coff_relsz(abfd) (coff_backend_info (abfd)->_bfd_relsz)
-#define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz)
-#define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen)
-#define bfd_coff_long_filenames(abfd) \
- (coff_backend_info (abfd)->_bfd_coff_long_filenames)
-#define bfd_coff_long_section_names(abfd) \
- (coff_backend_info (abfd)->_bfd_coff_long_section_names)
-#define bfd_coff_default_section_alignment_power(abfd) \
- (coff_backend_info (abfd)->_bfd_coff_default_section_alignment_power)
-#define bfd_coff_swap_filehdr_in(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_in) (abfd, i, o))
-
-#define bfd_coff_swap_aouthdr_in(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_in) (abfd, i, o))
-
-#define bfd_coff_swap_scnhdr_in(abfd, i,o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_in) (abfd, i, o))
-
-#define bfd_coff_swap_reloc_in(abfd, i, o) \
- ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_in) (abfd, i, o))
-
-#define bfd_coff_bad_format_hook(abfd, filehdr) \
- ((coff_backend_info (abfd)->_bfd_coff_bad_format_hook) (abfd, filehdr))
-
-#define bfd_coff_set_arch_mach_hook(abfd, filehdr)\
- ((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr))
-#define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\
- ((coff_backend_info (abfd)->_bfd_coff_mkobject_hook)\
- (abfd, filehdr, aouthdr))
-
-#define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section, flags_ptr)\
- ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\
- (abfd, scnhdr, name, section, flags_ptr))
-
-#define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\
- ((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr))
-
-#define bfd_coff_slurp_symbol_table(abfd)\
- ((coff_backend_info (abfd)->_bfd_coff_slurp_symbol_table) (abfd))
-
-#define bfd_coff_symname_in_debug(abfd, sym)\
- ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym))
-
-#define bfd_coff_force_symnames_in_strings(abfd)\
- (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings)
-
-#define bfd_coff_debug_string_prefix_length(abfd)\
- (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length)
-
-#define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\
- ((coff_backend_info (abfd)->_bfd_coff_print_aux)\
- (abfd, file, base, symbol, aux, indaux))
-
-#define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\
- reloc, data, src_ptr, dst_ptr)\
- ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\
- (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))
-
-#define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\
- ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\
- (abfd, section, reloc, shrink, link_info))
-
-#define bfd_coff_classify_symbol(abfd, sym)\
- ((coff_backend_info (abfd)->_bfd_coff_classify_symbol)\
- (abfd, sym))
-
-#define bfd_coff_compute_section_file_positions(abfd)\
- ((coff_backend_info (abfd)->_bfd_coff_compute_section_file_positions)\
- (abfd))
-
-#define bfd_coff_start_final_link(obfd, info)\
- ((coff_backend_info (obfd)->_bfd_coff_start_final_link)\
- (obfd, info))
-#define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\
- ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\
- (obfd, info, ibfd, o, con, rel, isyms, secs))
-#define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\
- ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\
- (abfd, sec, rel, h, sym, addendp))
-#define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\
- ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\
- (obfd, info, ibfd, sec, rel, adjustedp))
-#define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\
- value, string, cp, coll, hashp)\
- ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\
- (info, abfd, name, flags, section, value, string, cp, coll, hashp))
-
-#define bfd_coff_link_output_has_begun(a,p) \
- ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p))
-#define bfd_coff_final_link_postscript(a,p) \
- ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p))
-
-@end example
-@subsubsection Writing relocations
-To write relocations, the back end steps though the
-canonical relocation table and create an
-@code{internal_reloc}. The symbol index to use is removed from
-the @code{offset} field in the symbol table supplied. The
-address comes directly from the sum of the section base
-address and the relocation offset; the type is dug directly
-from the howto field. Then the @code{internal_reloc} is
-swapped into the shape of an @code{external_reloc} and written
-out to disk.
-
-@subsubsection Reading linenumbers
-Creating the linenumber table is done by reading in the entire
-coff linenumber table, and creating another table for internal use.
-
-A coff linenumber table is structured so that each function
-is marked as having a line number of 0. Each line within the
-function is an offset from the first line in the function. The
-base of the line number information for the table is stored in
-the symbol associated with the function.
-
-Note: The PE format uses line number 0 for a flag indicating a
-new source file.
-
-The information is copied from the external to the internal
-table, and each symbol which marks a function is marked by
-pointing its...
-
-How does this work ?
-
-@subsubsection Reading relocations
-Coff relocations are easily transformed into the internal BFD form
-(@code{arelent}).
-
-Reading a coff relocation table is done in the following stages:
-
-@itemize @bullet
-
-@item
-Read the entire coff relocation table into memory.
-
-@item
-Process each relocation in turn; first swap it from the
-external to the internal form.
-
-@item
-Turn the symbol referenced in the relocation's symbol index
-into a pointer into the canonical symbol table.
-This table is the same as the one returned by a call to
-@code{bfd_canonicalize_symtab}. The back end will call that
-routine and save the result if a canonicalization hasn't been done.
-
-@item
-The reloc index is turned into a pointer to a howto
-structure, in a back end specific way. For instance, the 386
-and 960 use the @code{r_type} to directly produce an index
-into a howto table vector; the 88k subtracts a number from the
-@code{r_type} field and creates an addend field.
-@end itemize
-
diff --git a/bfd/doc/core.texi b/bfd/doc/core.texi
deleted file mode 100644
index 1f09445ef76d..000000000000
--- a/bfd/doc/core.texi
+++ /dev/null
@@ -1,60 +0,0 @@
-@section Core files
-
-
-@subsection Core file functions
-
-
-@strong{Description}@*
-These are functions pertaining to core files.
-
-@findex bfd_core_file_failing_command
-@subsubsection @code{bfd_core_file_failing_command}
-@strong{Synopsis}
-@example
-const char *bfd_core_file_failing_command (bfd *abfd);
-@end example
-@strong{Description}@*
-Return a read-only string explaining which program was running
-when it failed and produced the core file @var{abfd}.
-
-@findex bfd_core_file_failing_signal
-@subsubsection @code{bfd_core_file_failing_signal}
-@strong{Synopsis}
-@example
-int bfd_core_file_failing_signal (bfd *abfd);
-@end example
-@strong{Description}@*
-Returns the signal number which caused the core dump which
-generated the file the BFD @var{abfd} is attached to.
-
-@findex core_file_matches_executable_p
-@subsubsection @code{core_file_matches_executable_p}
-@strong{Synopsis}
-@example
-bfd_boolean core_file_matches_executable_p
- (bfd *core_bfd, bfd *exec_bfd);
-@end example
-@strong{Description}@*
-Return @code{TRUE} if the core file attached to @var{core_bfd}
-was generated by a run of the executable file attached to
-@var{exec_bfd}, @code{FALSE} otherwise.
-
-@findex generic_core_file_matches_executable_p
-@subsubsection @code{generic_core_file_matches_executable_p}
-@strong{Synopsis}
-@example
-bfd_boolean generic_core_file_matches_executable_p
- (bfd *core_bfd, bfd *exec_bfd);
-@end example
-@strong{Description}@*
-Return TRUE if the core file attached to @var{core_bfd}
-was generated by a run of the executable file attached
-to @var{exec_bfd}. The match is based on executable
-basenames only.
-
-Note: When not able to determine the core file failing
-command or the executable name, we still return TRUE even
-though we're not sure that core file and executable match.
-This is to avoid generating a false warning in situations
-where we really don't know whether they match or not.
-
diff --git a/bfd/doc/elf.texi b/bfd/doc/elf.texi
deleted file mode 100644
index 4f9434cf69d4..000000000000
--- a/bfd/doc/elf.texi
+++ /dev/null
@@ -1,22 +0,0 @@
-@section ELF backends
-BFD support for ELF formats is being worked on.
-Currently, the best supported back ends are for sparc and i386
-(running svr4 or Solaris 2).
-
-Documentation of the internals of the support code still needs
-to be written. The code is changing quickly enough that we
-haven't bothered yet.
-
-@findex bfd_elf_find_section
-@subsubsection @code{bfd_elf_find_section}
-@strong{Synopsis}
-@example
-struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name);
-@end example
-@strong{Description}@*
-Helper functions for GDB to locate the string tables.
-Since BFD hides string tables from callers, GDB needs to use an
-internal hook to find them. Sun's .stabstr, in particular,
-isn't even pointed to by the .stab section, so ordinary
-mechanisms wouldn't work to find it, even if we had some.
-
diff --git a/bfd/doc/format.texi b/bfd/doc/format.texi
deleted file mode 100644
index 9674acff440b..000000000000
--- a/bfd/doc/format.texi
+++ /dev/null
@@ -1,112 +0,0 @@
-@section File formats
-A format is a BFD concept of high level file contents type. The
-formats supported by BFD are:
-
-@itemize @bullet
-
-@item
-@code{bfd_object}
-@end itemize
-The BFD may contain data, symbols, relocations and debug info.
-
-@itemize @bullet
-
-@item
-@code{bfd_archive}
-@end itemize
-The BFD contains other BFDs and an optional index.
-
-@itemize @bullet
-
-@item
-@code{bfd_core}
-@end itemize
-The BFD contains the result of an executable core dump.
-
-@subsection File format functions
-
-
-@findex bfd_check_format
-@subsubsection @code{bfd_check_format}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);
-@end example
-@strong{Description}@*
-Verify if the file attached to the BFD @var{abfd} is compatible
-with the format @var{format} (i.e., one of @code{bfd_object},
-@code{bfd_archive} or @code{bfd_core}).
-
-If the BFD has been set to a specific target before the
-call, only the named target and format combination is
-checked. If the target has not been set, or has been set to
-@code{default}, then all the known target backends is
-interrogated to determine a match. If the default target
-matches, it is used. If not, exactly one target must recognize
-the file, or an error results.
-
-The function returns @code{TRUE} on success, otherwise @code{FALSE}
-with one of the following error codes:
-
-@itemize @bullet
-
-@item
-@code{bfd_error_invalid_operation} -
-if @code{format} is not one of @code{bfd_object}, @code{bfd_archive} or
-@code{bfd_core}.
-
-@item
-@code{bfd_error_system_call} -
-if an error occured during a read - even some file mismatches
-can cause bfd_error_system_calls.
-
-@item
-@code{file_not_recognised} -
-none of the backends recognised the file format.
-
-@item
-@code{bfd_error_file_ambiguously_recognized} -
-more than one backend recognised the file format.
-@end itemize
-
-@findex bfd_check_format_matches
-@subsubsection @code{bfd_check_format_matches}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_check_format_matches
- (bfd *abfd, bfd_format format, char ***matching);
-@end example
-@strong{Description}@*
-Like @code{bfd_check_format}, except when it returns FALSE with
-@code{bfd_errno} set to @code{bfd_error_file_ambiguously_recognized}. In that
-case, if @var{matching} is not NULL, it will be filled in with
-a NULL-terminated list of the names of the formats that matched,
-allocated with @code{malloc}.
-Then the user may choose a format and try again.
-
-When done with the list that @var{matching} points to, the caller
-should free it.
-
-@findex bfd_set_format
-@subsubsection @code{bfd_set_format}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
-@end example
-@strong{Description}@*
-This function sets the file format of the BFD @var{abfd} to the
-format @var{format}. If the target set in the BFD does not
-support the format requested, the format is invalid, or the BFD
-is not open for writing, then an error occurs.
-
-@findex bfd_format_string
-@subsubsection @code{bfd_format_string}
-@strong{Synopsis}
-@example
-const char *bfd_format_string (bfd_format format);
-@end example
-@strong{Description}@*
-Return a pointer to a const string
-@code{invalid}, @code{object}, @code{archive}, @code{core}, or @code{unknown},
-depending upon the value of @var{format}.
-
diff --git a/bfd/doc/hash.texi b/bfd/doc/hash.texi
deleted file mode 100644
index 88d9585cc405..000000000000
--- a/bfd/doc/hash.texi
+++ /dev/null
@@ -1,247 +0,0 @@
-@section Hash Tables
-@cindex Hash tables
-BFD provides a simple set of hash table functions. Routines
-are provided to initialize a hash table, to free a hash table,
-to look up a string in a hash table and optionally create an
-entry for it, and to traverse a hash table. There is
-currently no routine to delete an string from a hash table.
-
-The basic hash table does not permit any data to be stored
-with a string. However, a hash table is designed to present a
-base class from which other types of hash tables may be
-derived. These derived types may store additional information
-with the string. Hash tables were implemented in this way,
-rather than simply providing a data pointer in a hash table
-entry, because they were designed for use by the linker back
-ends. The linker may create thousands of hash table entries,
-and the overhead of allocating private data and storing and
-following pointers becomes noticeable.
-
-The basic hash table code is in @code{hash.c}.
-
-@menu
-* Creating and Freeing a Hash Table::
-* Looking Up or Entering a String::
-* Traversing a Hash Table::
-* Deriving a New Hash Table Type::
-@end menu
-
-@node Creating and Freeing a Hash Table, Looking Up or Entering a String, Hash Tables, Hash Tables
-@subsection Creating and freeing a hash table
-@findex bfd_hash_table_init
-@findex bfd_hash_table_init_n
-To create a hash table, create an instance of a @code{struct
-bfd_hash_table} (defined in @code{bfd.h}) and call
-@code{bfd_hash_table_init} (if you know approximately how many
-entries you will need, the function @code{bfd_hash_table_init_n},
-which takes a @var{size} argument, may be used).
-@code{bfd_hash_table_init} returns @code{FALSE} if some sort of
-error occurs.
-
-@findex bfd_hash_newfunc
-The function @code{bfd_hash_table_init} take as an argument a
-function to use to create new entries. For a basic hash
-table, use the function @code{bfd_hash_newfunc}. @xref{Deriving
-a New Hash Table Type}, for why you would want to use a
-different value for this argument.
-
-@findex bfd_hash_allocate
-@code{bfd_hash_table_init} will create an objalloc which will be
-used to allocate new entries. You may allocate memory on this
-objalloc using @code{bfd_hash_allocate}.
-
-@findex bfd_hash_table_free
-Use @code{bfd_hash_table_free} to free up all the memory that has
-been allocated for a hash table. This will not free up the
-@code{struct bfd_hash_table} itself, which you must provide.
-
-@findex bfd_hash_set_default_size
-Use @code{bfd_hash_set_default_size} to set the default size of
-hash table to use.
-
-@node Looking Up or Entering a String, Traversing a Hash Table, Creating and Freeing a Hash Table, Hash Tables
-@subsection Looking up or entering a string
-@findex bfd_hash_lookup
-The function @code{bfd_hash_lookup} is used both to look up a
-string in the hash table and to create a new entry.
-
-If the @var{create} argument is @code{FALSE}, @code{bfd_hash_lookup}
-will look up a string. If the string is found, it will
-returns a pointer to a @code{struct bfd_hash_entry}. If the
-string is not found in the table @code{bfd_hash_lookup} will
-return @code{NULL}. You should not modify any of the fields in
-the returns @code{struct bfd_hash_entry}.
-
-If the @var{create} argument is @code{TRUE}, the string will be
-entered into the hash table if it is not already there.
-Either way a pointer to a @code{struct bfd_hash_entry} will be
-returned, either to the existing structure or to a newly
-created one. In this case, a @code{NULL} return means that an
-error occurred.
-
-If the @var{create} argument is @code{TRUE}, and a new entry is
-created, the @var{copy} argument is used to decide whether to
-copy the string onto the hash table objalloc or not. If
-@var{copy} is passed as @code{FALSE}, you must be careful not to
-deallocate or modify the string as long as the hash table
-exists.
-
-@node Traversing a Hash Table, Deriving a New Hash Table Type, Looking Up or Entering a String, Hash Tables
-@subsection Traversing a hash table
-@findex bfd_hash_traverse
-The function @code{bfd_hash_traverse} may be used to traverse a
-hash table, calling a function on each element. The traversal
-is done in a random order.
-
-@code{bfd_hash_traverse} takes as arguments a function and a
-generic @code{void *} pointer. The function is called with a
-hash table entry (a @code{struct bfd_hash_entry *}) and the
-generic pointer passed to @code{bfd_hash_traverse}. The function
-must return a @code{boolean} value, which indicates whether to
-continue traversing the hash table. If the function returns
-@code{FALSE}, @code{bfd_hash_traverse} will stop the traversal and
-return immediately.
-
-@node Deriving a New Hash Table Type, , Traversing a Hash Table, Hash Tables
-@subsection Deriving a new hash table type
-Many uses of hash tables want to store additional information
-which each entry in the hash table. Some also find it
-convenient to store additional information with the hash table
-itself. This may be done using a derived hash table.
-
-Since C is not an object oriented language, creating a derived
-hash table requires sticking together some boilerplate
-routines with a few differences specific to the type of hash
-table you want to create.
-
-An example of a derived hash table is the linker hash table.
-The structures for this are defined in @code{bfdlink.h}. The
-functions are in @code{linker.c}.
-
-You may also derive a hash table from an already derived hash
-table. For example, the a.out linker backend code uses a hash
-table derived from the linker hash table.
-
-@menu
-* Define the Derived Structures::
-* Write the Derived Creation Routine::
-* Write Other Derived Routines::
-@end menu
-
-@node Define the Derived Structures, Write the Derived Creation Routine, Deriving a New Hash Table Type, Deriving a New Hash Table Type
-@subsubsection Define the derived structures
-You must define a structure for an entry in the hash table,
-and a structure for the hash table itself.
-
-The first field in the structure for an entry in the hash
-table must be of the type used for an entry in the hash table
-you are deriving from. If you are deriving from a basic hash
-table this is @code{struct bfd_hash_entry}, which is defined in
-@code{bfd.h}. The first field in the structure for the hash
-table itself must be of the type of the hash table you are
-deriving from itself. If you are deriving from a basic hash
-table, this is @code{struct bfd_hash_table}.
-
-For example, the linker hash table defines @code{struct
-bfd_link_hash_entry} (in @code{bfdlink.h}). The first field,
-@code{root}, is of type @code{struct bfd_hash_entry}. Similarly,
-the first field in @code{struct bfd_link_hash_table}, @code{table},
-is of type @code{struct bfd_hash_table}.
-
-@node Write the Derived Creation Routine, Write Other Derived Routines, Define the Derived Structures, Deriving a New Hash Table Type
-@subsubsection Write the derived creation routine
-You must write a routine which will create and initialize an
-entry in the hash table. This routine is passed as the
-function argument to @code{bfd_hash_table_init}.
-
-In order to permit other hash tables to be derived from the
-hash table you are creating, this routine must be written in a
-standard way.
-
-The first argument to the creation routine is a pointer to a
-hash table entry. This may be @code{NULL}, in which case the
-routine should allocate the right amount of space. Otherwise
-the space has already been allocated by a hash table type
-derived from this one.
-
-After allocating space, the creation routine must call the
-creation routine of the hash table type it is derived from,
-passing in a pointer to the space it just allocated. This
-will initialize any fields used by the base hash table.
-
-Finally the creation routine must initialize any local fields
-for the new hash table type.
-
-Here is a boilerplate example of a creation routine.
-@var{function_name} is the name of the routine.
-@var{entry_type} is the type of an entry in the hash table you
-are creating. @var{base_newfunc} is the name of the creation
-routine of the hash table type your hash table is derived
-from.
-
-
-@example
-struct bfd_hash_entry *
-@var{function_name} (struct bfd_hash_entry *entry,
- struct bfd_hash_table *table,
- const char *string)
-@{
- struct @var{entry_type} *ret = (@var{entry_type} *) entry;
-
- /* Allocate the structure if it has not already been allocated by a
- derived class. */
- if (ret == NULL)
- @{
- ret = bfd_hash_allocate (table, sizeof (* ret));
- if (ret == NULL)
- return NULL;
- @}
-
- /* Call the allocation method of the base class. */
- ret = ((@var{entry_type} *)
- @var{base_newfunc} ((struct bfd_hash_entry *) ret, table, string));
-
- /* Initialize the local fields here. */
-
- return (struct bfd_hash_entry *) ret;
-@}
-@end example
-@strong{Description}@*
-The creation routine for the linker hash table, which is in
-@code{linker.c}, looks just like this example.
-@var{function_name} is @code{_bfd_link_hash_newfunc}.
-@var{entry_type} is @code{struct bfd_link_hash_entry}.
-@var{base_newfunc} is @code{bfd_hash_newfunc}, the creation
-routine for a basic hash table.
-
-@code{_bfd_link_hash_newfunc} also initializes the local fields
-in a linker hash table entry: @code{type}, @code{written} and
-@code{next}.
-
-@node Write Other Derived Routines, , Write the Derived Creation Routine, Deriving a New Hash Table Type
-@subsubsection Write other derived routines
-You will want to write other routines for your new hash table,
-as well.
-
-You will want an initialization routine which calls the
-initialization routine of the hash table you are deriving from
-and initializes any other local fields. For the linker hash
-table, this is @code{_bfd_link_hash_table_init} in @code{linker.c}.
-
-You will want a lookup routine which calls the lookup routine
-of the hash table you are deriving from and casts the result.
-The linker hash table uses @code{bfd_link_hash_lookup} in
-@code{linker.c} (this actually takes an additional argument which
-it uses to decide how to return the looked up value).
-
-You may want a traversal routine. This should just call the
-traversal routine of the hash table you are deriving from with
-appropriate casts. The linker hash table uses
-@code{bfd_link_hash_traverse} in @code{linker.c}.
-
-These routines may simply be defined as macros. For example,
-the a.out backend linker hash table, which is derived from the
-linker hash table, uses macros for the lookup and traversal
-routines. These are @code{aout_link_hash_lookup} and
-@code{aout_link_hash_traverse} in aoutx.h.
-
diff --git a/bfd/doc/init.texi b/bfd/doc/init.texi
deleted file mode 100644
index ab735f8e986c..000000000000
--- a/bfd/doc/init.texi
+++ /dev/null
@@ -1,16 +0,0 @@
-@section Initialization
-
-
-@subsection Initialization functions
-These are the functions that handle initializing a BFD.
-
-@findex bfd_init
-@subsubsection @code{bfd_init}
-@strong{Synopsis}
-@example
-void bfd_init (void);
-@end example
-@strong{Description}@*
-This routine must be called before any other BFD function to
-initialize magical internal data structures.
-
diff --git a/bfd/doc/libbfd.texi b/bfd/doc/libbfd.texi
deleted file mode 100644
index fef6e0e842ec..000000000000
--- a/bfd/doc/libbfd.texi
+++ /dev/null
@@ -1,179 +0,0 @@
-@section Implementation details
-
-
-@subsection Internal functions
-
-
-@strong{Description}@*
-These routines are used within BFD.
-They are not intended for export, but are documented here for
-completeness.
-
-@findex bfd_write_bigendian_4byte_int
-@subsubsection @code{bfd_write_bigendian_4byte_int}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int);
-@end example
-@strong{Description}@*
-Write a 4 byte integer @var{i} to the output BFD @var{abfd}, in big
-endian order regardless of what else is going on. This is useful in
-archives.
-
-@findex bfd_put_size
-@subsubsection @code{bfd_put_size}
-@findex bfd_get_size
-@subsubsection @code{bfd_get_size}
-@strong{Description}@*
-These macros as used for reading and writing raw data in
-sections; each access (except for bytes) is vectored through
-the target format of the BFD and mangled accordingly. The
-mangling performs any necessary endian translations and
-removes alignment restrictions. Note that types accepted and
-returned by these macros are identical so they can be swapped
-around in macros---for example, @file{libaout.h} defines @code{GET_WORD}
-to either @code{bfd_get_32} or @code{bfd_get_64}.
-
-In the put routines, @var{val} must be a @code{bfd_vma}. If we are on a
-system without prototypes, the caller is responsible for making
-sure that is true, with a cast if necessary. We don't cast
-them in the macro definitions because that would prevent @code{lint}
-or @code{gcc -Wall} from detecting sins such as passing a pointer.
-To detect calling these with less than a @code{bfd_vma}, use
-@code{gcc -Wconversion} on a host with 64 bit @code{bfd_vma}'s.
-@example
-
-/* Byte swapping macros for user section data. */
-
-#define bfd_put_8(abfd, val, ptr) \
- ((void) (*((unsigned char *) (ptr)) = (val) & 0xff))
-#define bfd_put_signed_8 \
- bfd_put_8
-#define bfd_get_8(abfd, ptr) \
- (*(unsigned char *) (ptr) & 0xff)
-#define bfd_get_signed_8(abfd, ptr) \
- (((*(unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
-
-#define bfd_put_16(abfd, val, ptr) \
- BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
-#define bfd_put_signed_16 \
- bfd_put_16
-#define bfd_get_16(abfd, ptr) \
- BFD_SEND (abfd, bfd_getx16, (ptr))
-#define bfd_get_signed_16(abfd, ptr) \
- BFD_SEND (abfd, bfd_getx_signed_16, (ptr))
-
-#define bfd_put_32(abfd, val, ptr) \
- BFD_SEND (abfd, bfd_putx32, ((val),(ptr)))
-#define bfd_put_signed_32 \
- bfd_put_32
-#define bfd_get_32(abfd, ptr) \
- BFD_SEND (abfd, bfd_getx32, (ptr))
-#define bfd_get_signed_32(abfd, ptr) \
- BFD_SEND (abfd, bfd_getx_signed_32, (ptr))
-
-#define bfd_put_64(abfd, val, ptr) \
- BFD_SEND (abfd, bfd_putx64, ((val), (ptr)))
-#define bfd_put_signed_64 \
- bfd_put_64
-#define bfd_get_64(abfd, ptr) \
- BFD_SEND (abfd, bfd_getx64, (ptr))
-#define bfd_get_signed_64(abfd, ptr) \
- BFD_SEND (abfd, bfd_getx_signed_64, (ptr))
-
-#define bfd_get(bits, abfd, ptr) \
- ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr) \
- : (bits) == 16 ? bfd_get_16 (abfd, ptr) \
- : (bits) == 32 ? bfd_get_32 (abfd, ptr) \
- : (bits) == 64 ? bfd_get_64 (abfd, ptr) \
- : (abort (), (bfd_vma) - 1))
-
-#define bfd_put(bits, abfd, val, ptr) \
- ((bits) == 8 ? bfd_put_8 (abfd, val, ptr) \
- : (bits) == 16 ? bfd_put_16 (abfd, val, ptr) \
- : (bits) == 32 ? bfd_put_32 (abfd, val, ptr) \
- : (bits) == 64 ? bfd_put_64 (abfd, val, ptr) \
- : (abort (), (void) 0))
-
-@end example
-
-@findex bfd_h_put_size
-@subsubsection @code{bfd_h_put_size}
-@strong{Description}@*
-These macros have the same function as their @code{bfd_get_x}
-brethren, except that they are used for removing information
-for the header records of object files. Believe it or not,
-some object files keep their header records in big endian
-order and their data in little endian order.
-@example
-
-/* Byte swapping macros for file header data. */
-
-#define bfd_h_put_8(abfd, val, ptr) \
- bfd_put_8 (abfd, val, ptr)
-#define bfd_h_put_signed_8(abfd, val, ptr) \
- bfd_put_8 (abfd, val, ptr)
-#define bfd_h_get_8(abfd, ptr) \
- bfd_get_8 (abfd, ptr)
-#define bfd_h_get_signed_8(abfd, ptr) \
- bfd_get_signed_8 (abfd, ptr)
-
-#define bfd_h_put_16(abfd, val, ptr) \
- BFD_SEND (abfd, bfd_h_putx16, (val, ptr))
-#define bfd_h_put_signed_16 \
- bfd_h_put_16
-#define bfd_h_get_16(abfd, ptr) \
- BFD_SEND (abfd, bfd_h_getx16, (ptr))
-#define bfd_h_get_signed_16(abfd, ptr) \
- BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr))
-
-#define bfd_h_put_32(abfd, val, ptr) \
- BFD_SEND (abfd, bfd_h_putx32, (val, ptr))
-#define bfd_h_put_signed_32 \
- bfd_h_put_32
-#define bfd_h_get_32(abfd, ptr) \
- BFD_SEND (abfd, bfd_h_getx32, (ptr))
-#define bfd_h_get_signed_32(abfd, ptr) \
- BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr))
-
-#define bfd_h_put_64(abfd, val, ptr) \
- BFD_SEND (abfd, bfd_h_putx64, (val, ptr))
-#define bfd_h_put_signed_64 \
- bfd_h_put_64
-#define bfd_h_get_64(abfd, ptr) \
- BFD_SEND (abfd, bfd_h_getx64, (ptr))
-#define bfd_h_get_signed_64(abfd, ptr) \
- BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr))
-
-/* Aliases for the above, which should eventually go away. */
-
-#define H_PUT_64 bfd_h_put_64
-#define H_PUT_32 bfd_h_put_32
-#define H_PUT_16 bfd_h_put_16
-#define H_PUT_8 bfd_h_put_8
-#define H_PUT_S64 bfd_h_put_signed_64
-#define H_PUT_S32 bfd_h_put_signed_32
-#define H_PUT_S16 bfd_h_put_signed_16
-#define H_PUT_S8 bfd_h_put_signed_8
-#define H_GET_64 bfd_h_get_64
-#define H_GET_32 bfd_h_get_32
-#define H_GET_16 bfd_h_get_16
-#define H_GET_8 bfd_h_get_8
-#define H_GET_S64 bfd_h_get_signed_64
-#define H_GET_S32 bfd_h_get_signed_32
-#define H_GET_S16 bfd_h_get_signed_16
-#define H_GET_S8 bfd_h_get_signed_8
-
-
-@end example
-
-@findex bfd_log2
-@subsubsection @code{bfd_log2}
-@strong{Synopsis}
-@example
-unsigned int bfd_log2 (bfd_vma x);
-@end example
-@strong{Description}@*
-Return the log base 2 of the value supplied, rounded up. E.g., an
-@var{x} of 1025 returns 11. A @var{x} of 0 returns 0.
-
diff --git a/bfd/doc/linker.texi b/bfd/doc/linker.texi
deleted file mode 100644
index 8a55006a187c..000000000000
--- a/bfd/doc/linker.texi
+++ /dev/null
@@ -1,380 +0,0 @@
-@section Linker Functions
-@cindex Linker
-The linker uses three special entry points in the BFD target
-vector. It is not necessary to write special routines for
-these entry points when creating a new BFD back end, since
-generic versions are provided. However, writing them can
-speed up linking and make it use significantly less runtime
-memory.
-
-The first routine creates a hash table used by the other
-routines. The second routine adds the symbols from an object
-file to the hash table. The third routine takes all the
-object files and links them together to create the output
-file. These routines are designed so that the linker proper
-does not need to know anything about the symbols in the object
-files that it is linking. The linker merely arranges the
-sections as directed by the linker script and lets BFD handle
-the details of symbols and relocs.
-
-The second routine and third routines are passed a pointer to
-a @code{struct bfd_link_info} structure (defined in
-@code{bfdlink.h}) which holds information relevant to the link,
-including the linker hash table (which was created by the
-first routine) and a set of callback functions to the linker
-proper.
-
-The generic linker routines are in @code{linker.c}, and use the
-header file @code{genlink.h}. As of this writing, the only back
-ends which have implemented versions of these routines are
-a.out (in @code{aoutx.h}) and ECOFF (in @code{ecoff.c}). The a.out
-routines are used as examples throughout this section.
-
-@menu
-* Creating a Linker Hash Table::
-* Adding Symbols to the Hash Table::
-* Performing the Final Link::
-@end menu
-
-@node Creating a Linker Hash Table, Adding Symbols to the Hash Table, Linker Functions, Linker Functions
-@subsection Creating a linker hash table
-@cindex _bfd_link_hash_table_create in target vector
-@cindex target vector (_bfd_link_hash_table_create)
-The linker routines must create a hash table, which must be
-derived from @code{struct bfd_link_hash_table} described in
-@code{bfdlink.c}. @xref{Hash Tables}, for information on how to
-create a derived hash table. This entry point is called using
-the target vector of the linker output file.
-
-The @code{_bfd_link_hash_table_create} entry point must allocate
-and initialize an instance of the desired hash table. If the
-back end does not require any additional information to be
-stored with the entries in the hash table, the entry point may
-simply create a @code{struct bfd_link_hash_table}. Most likely,
-however, some additional information will be needed.
-
-For example, with each entry in the hash table the a.out
-linker keeps the index the symbol has in the final output file
-(this index number is used so that when doing a relocatable
-link the symbol index used in the output file can be quickly
-filled in when copying over a reloc). The a.out linker code
-defines the required structures and functions for a hash table
-derived from @code{struct bfd_link_hash_table}. The a.out linker
-hash table is created by the function
-@code{NAME(aout,link_hash_table_create)}; it simply allocates
-space for the hash table, initializes it, and returns a
-pointer to it.
-
-When writing the linker routines for a new back end, you will
-generally not know exactly which fields will be required until
-you have finished. You should simply create a new hash table
-which defines no additional fields, and then simply add fields
-as they become necessary.
-
-@node Adding Symbols to the Hash Table, Performing the Final Link, Creating a Linker Hash Table, Linker Functions
-@subsection Adding symbols to the hash table
-@cindex _bfd_link_add_symbols in target vector
-@cindex target vector (_bfd_link_add_symbols)
-The linker proper will call the @code{_bfd_link_add_symbols}
-entry point for each object file or archive which is to be
-linked (typically these are the files named on the command
-line, but some may also come from the linker script). The
-entry point is responsible for examining the file. For an
-object file, BFD must add any relevant symbol information to
-the hash table. For an archive, BFD must determine which
-elements of the archive should be used and adding them to the
-link.
-
-The a.out version of this entry point is
-@code{NAME(aout,link_add_symbols)}.
-
-@menu
-* Differing file formats::
-* Adding symbols from an object file::
-* Adding symbols from an archive::
-@end menu
-
-@node Differing file formats, Adding symbols from an object file, Adding Symbols to the Hash Table, Adding Symbols to the Hash Table
-@subsubsection Differing file formats
-Normally all the files involved in a link will be of the same
-format, but it is also possible to link together different
-format object files, and the back end must support that. The
-@code{_bfd_link_add_symbols} entry point is called via the target
-vector of the file to be added. This has an important
-consequence: the function may not assume that the hash table
-is the type created by the corresponding
-@code{_bfd_link_hash_table_create} vector. All the
-@code{_bfd_link_add_symbols} function can assume about the hash
-table is that it is derived from @code{struct
-bfd_link_hash_table}.
-
-Sometimes the @code{_bfd_link_add_symbols} function must store
-some information in the hash table entry to be used by the
-@code{_bfd_final_link} function. In such a case the @code{creator}
-field of the hash table must be checked to make sure that the
-hash table was created by an object file of the same format.
-
-The @code{_bfd_final_link} routine must be prepared to handle a
-hash entry without any extra information added by the
-@code{_bfd_link_add_symbols} function. A hash entry without
-extra information will also occur when the linker script
-directs the linker to create a symbol. Note that, regardless
-of how a hash table entry is added, all the fields will be
-initialized to some sort of null value by the hash table entry
-initialization function.
-
-See @code{ecoff_link_add_externals} for an example of how to
-check the @code{creator} field before saving information (in this
-case, the ECOFF external symbol debugging information) in a
-hash table entry.
-
-@node Adding symbols from an object file, Adding symbols from an archive, Differing file formats, Adding Symbols to the Hash Table
-@subsubsection Adding symbols from an object file
-When the @code{_bfd_link_add_symbols} routine is passed an object
-file, it must add all externally visible symbols in that
-object file to the hash table. The actual work of adding the
-symbol to the hash table is normally handled by the function
-@code{_bfd_generic_link_add_one_symbol}. The
-@code{_bfd_link_add_symbols} routine is responsible for reading
-all the symbols from the object file and passing the correct
-information to @code{_bfd_generic_link_add_one_symbol}.
-
-The @code{_bfd_link_add_symbols} routine should not use
-@code{bfd_canonicalize_symtab} to read the symbols. The point of
-providing this routine is to avoid the overhead of converting
-the symbols into generic @code{asymbol} structures.
-
-@findex _bfd_generic_link_add_one_symbol
-@code{_bfd_generic_link_add_one_symbol} handles the details of
-combining common symbols, warning about multiple definitions,
-and so forth. It takes arguments which describe the symbol to
-add, notably symbol flags, a section, and an offset. The
-symbol flags include such things as @code{BSF_WEAK} or
-@code{BSF_INDIRECT}. The section is a section in the object
-file, or something like @code{bfd_und_section_ptr} for an undefined
-symbol or @code{bfd_com_section_ptr} for a common symbol.
-
-If the @code{_bfd_final_link} routine is also going to need to
-read the symbol information, the @code{_bfd_link_add_symbols}
-routine should save it somewhere attached to the object file
-BFD. However, the information should only be saved if the
-@code{keep_memory} field of the @code{info} argument is TRUE, so
-that the @code{-no-keep-memory} linker switch is effective.
-
-The a.out function which adds symbols from an object file is
-@code{aout_link_add_object_symbols}, and most of the interesting
-work is in @code{aout_link_add_symbols}. The latter saves
-pointers to the hash tables entries created by
-@code{_bfd_generic_link_add_one_symbol} indexed by symbol number,
-so that the @code{_bfd_final_link} routine does not have to call
-the hash table lookup routine to locate the entry.
-
-@node Adding symbols from an archive, , Adding symbols from an object file, Adding Symbols to the Hash Table
-@subsubsection Adding symbols from an archive
-When the @code{_bfd_link_add_symbols} routine is passed an
-archive, it must look through the symbols defined by the
-archive and decide which elements of the archive should be
-included in the link. For each such element it must call the
-@code{add_archive_element} linker callback, and it must add the
-symbols from the object file to the linker hash table.
-
-@findex _bfd_generic_link_add_archive_symbols
-In most cases the work of looking through the symbols in the
-archive should be done by the
-@code{_bfd_generic_link_add_archive_symbols} function. This
-function builds a hash table from the archive symbol table and
-looks through the list of undefined symbols to see which
-elements should be included.
-@code{_bfd_generic_link_add_archive_symbols} is passed a function
-to call to make the final decision about adding an archive
-element to the link and to do the actual work of adding the
-symbols to the linker hash table.
-
-The function passed to
-@code{_bfd_generic_link_add_archive_symbols} must read the
-symbols of the archive element and decide whether the archive
-element should be included in the link. If the element is to
-be included, the @code{add_archive_element} linker callback
-routine must be called with the element as an argument, and
-the elements symbols must be added to the linker hash table
-just as though the element had itself been passed to the
-@code{_bfd_link_add_symbols} function.
-
-When the a.out @code{_bfd_link_add_symbols} function receives an
-archive, it calls @code{_bfd_generic_link_add_archive_symbols}
-passing @code{aout_link_check_archive_element} as the function
-argument. @code{aout_link_check_archive_element} calls
-@code{aout_link_check_ar_symbols}. If the latter decides to add
-the element (an element is only added if it provides a real,
-non-common, definition for a previously undefined or common
-symbol) it calls the @code{add_archive_element} callback and then
-@code{aout_link_check_archive_element} calls
-@code{aout_link_add_symbols} to actually add the symbols to the
-linker hash table.
-
-The ECOFF back end is unusual in that it does not normally
-call @code{_bfd_generic_link_add_archive_symbols}, because ECOFF
-archives already contain a hash table of symbols. The ECOFF
-back end searches the archive itself to avoid the overhead of
-creating a new hash table.
-
-@node Performing the Final Link, , Adding Symbols to the Hash Table, Linker Functions
-@subsection Performing the final link
-@cindex _bfd_link_final_link in target vector
-@cindex target vector (_bfd_final_link)
-When all the input files have been processed, the linker calls
-the @code{_bfd_final_link} entry point of the output BFD. This
-routine is responsible for producing the final output file,
-which has several aspects. It must relocate the contents of
-the input sections and copy the data into the output sections.
-It must build an output symbol table including any local
-symbols from the input files and the global symbols from the
-hash table. When producing relocatable output, it must
-modify the input relocs and write them into the output file.
-There may also be object format dependent work to be done.
-
-The linker will also call the @code{write_object_contents} entry
-point when the BFD is closed. The two entry points must work
-together in order to produce the correct output file.
-
-The details of how this works are inevitably dependent upon
-the specific object file format. The a.out
-@code{_bfd_final_link} routine is @code{NAME(aout,final_link)}.
-
-@menu
-* Information provided by the linker::
-* Relocating the section contents::
-* Writing the symbol table::
-@end menu
-
-@node Information provided by the linker, Relocating the section contents, Performing the Final Link, Performing the Final Link
-@subsubsection Information provided by the linker
-Before the linker calls the @code{_bfd_final_link} entry point,
-it sets up some data structures for the function to use.
-
-The @code{input_bfds} field of the @code{bfd_link_info} structure
-will point to a list of all the input files included in the
-link. These files are linked through the @code{link_next} field
-of the @code{bfd} structure.
-
-Each section in the output file will have a list of
-@code{link_order} structures attached to the @code{map_head.link_order}
-field (the @code{link_order} structure is defined in
-@code{bfdlink.h}). These structures describe how to create the
-contents of the output section in terms of the contents of
-various input sections, fill constants, and, eventually, other
-types of information. They also describe relocs that must be
-created by the BFD backend, but do not correspond to any input
-file; this is used to support -Ur, which builds constructors
-while generating a relocatable object file.
-
-@node Relocating the section contents, Writing the symbol table, Information provided by the linker, Performing the Final Link
-@subsubsection Relocating the section contents
-The @code{_bfd_final_link} function should look through the
-@code{link_order} structures attached to each section of the
-output file. Each @code{link_order} structure should either be
-handled specially, or it should be passed to the function
-@code{_bfd_default_link_order} which will do the right thing
-(@code{_bfd_default_link_order} is defined in @code{linker.c}).
-
-For efficiency, a @code{link_order} of type
-@code{bfd_indirect_link_order} whose associated section belongs
-to a BFD of the same format as the output BFD must be handled
-specially. This type of @code{link_order} describes part of an
-output section in terms of a section belonging to one of the
-input files. The @code{_bfd_final_link} function should read the
-contents of the section and any associated relocs, apply the
-relocs to the section contents, and write out the modified
-section contents. If performing a relocatable link, the
-relocs themselves must also be modified and written out.
-
-@findex _bfd_relocate_contents
-@findex _bfd_final_link_relocate
-The functions @code{_bfd_relocate_contents} and
-@code{_bfd_final_link_relocate} provide some general support for
-performing the actual relocations, notably overflow checking.
-Their arguments include information about the symbol the
-relocation is against and a @code{reloc_howto_type} argument
-which describes the relocation to perform. These functions
-are defined in @code{reloc.c}.
-
-The a.out function which handles reading, relocating, and
-writing section contents is @code{aout_link_input_section}. The
-actual relocation is done in @code{aout_link_input_section_std}
-and @code{aout_link_input_section_ext}.
-
-@node Writing the symbol table, , Relocating the section contents, Performing the Final Link
-@subsubsection Writing the symbol table
-The @code{_bfd_final_link} function must gather all the symbols
-in the input files and write them out. It must also write out
-all the symbols in the global hash table. This must be
-controlled by the @code{strip} and @code{discard} fields of the
-@code{bfd_link_info} structure.
-
-The local symbols of the input files will not have been
-entered into the linker hash table. The @code{_bfd_final_link}
-routine must consider each input file and include the symbols
-in the output file. It may be convenient to do this when
-looking through the @code{link_order} structures, or it may be
-done by stepping through the @code{input_bfds} list.
-
-The @code{_bfd_final_link} routine must also traverse the global
-hash table to gather all the externally visible symbols. It
-is possible that most of the externally visible symbols may be
-written out when considering the symbols of each input file,
-but it is still necessary to traverse the hash table since the
-linker script may have defined some symbols that are not in
-any of the input files.
-
-The @code{strip} field of the @code{bfd_link_info} structure
-controls which symbols are written out. The possible values
-are listed in @code{bfdlink.h}. If the value is @code{strip_some},
-then the @code{keep_hash} field of the @code{bfd_link_info}
-structure is a hash table of symbols to keep; each symbol
-should be looked up in this hash table, and only symbols which
-are present should be included in the output file.
-
-If the @code{strip} field of the @code{bfd_link_info} structure
-permits local symbols to be written out, the @code{discard} field
-is used to further controls which local symbols are included
-in the output file. If the value is @code{discard_l}, then all
-local symbols which begin with a certain prefix are discarded;
-this is controlled by the @code{bfd_is_local_label_name} entry point.
-
-The a.out backend handles symbols by calling
-@code{aout_link_write_symbols} on each input BFD and then
-traversing the global hash table with the function
-@code{aout_link_write_other_symbol}. It builds a string table
-while writing out the symbols, which is written to the output
-file at the end of @code{NAME(aout,final_link)}.
-
-@findex bfd_link_split_section
-@subsubsection @code{bfd_link_split_section}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
-@end example
-@strong{Description}@*
-Return nonzero if @var{sec} should be split during a
-reloceatable or final link.
-@example
-#define bfd_link_split_section(abfd, sec) \
- BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
-
-@end example
-
-@findex bfd_section_already_linked
-@subsubsection @code{bfd_section_already_linked}
-@strong{Synopsis}
-@example
-void bfd_section_already_linked (bfd *abfd, asection *sec);
-@end example
-@strong{Description}@*
-Check if @var{sec} has been already linked during a reloceatable
-or final link.
-@example
-#define bfd_section_already_linked(abfd, sec) \
- BFD_SEND (abfd, _section_already_linked, (abfd, sec))
-
-@end example
-
diff --git a/bfd/doc/mmo.texi b/bfd/doc/mmo.texi
deleted file mode 100644
index b0d726aad9c1..000000000000
--- a/bfd/doc/mmo.texi
+++ /dev/null
@@ -1,365 +0,0 @@
-@section mmo backend
-The mmo object format is used exclusively together with Professor
-Donald E.@: Knuth's educational 64-bit processor MMIX. The simulator
-@command{mmix} which is available at
-@url{http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz}
-understands this format. That package also includes a combined
-assembler and linker called @command{mmixal}. The mmo format has
-no advantages feature-wise compared to e.g. ELF. It is a simple
-non-relocatable object format with no support for archives or
-debugging information, except for symbol value information and
-line numbers (which is not yet implemented in BFD). See
-@url{http://www-cs-faculty.stanford.edu/~knuth/mmix.html} for more
-information about MMIX. The ELF format is used for intermediate
-object files in the BFD implementation.
-
-@c We want to xref the symbol table node. A feature in "chew"
-@c requires that "commands" do not contain spaces in the
-@c arguments. Hence the hyphen in "Symbol-table".
-@menu
-* File layout::
-* Symbol-table::
-* mmo section mapping::
-@end menu
-
-@node File layout, Symbol-table, mmo, mmo
-@subsection File layout
-The mmo file contents is not partitioned into named sections as
-with e.g.@: ELF. Memory areas is formed by specifying the
-location of the data that follows. Only the memory area
-@samp{0x0000@dots{}00} to @samp{0x01ff@dots{}ff} is executable, so
-it is used for code (and constants) and the area
-@samp{0x2000@dots{}00} to @samp{0x20ff@dots{}ff} is used for
-writable data. @xref{mmo section mapping}.
-
-There is provision for specifying ``special data'' of 65536
-different types. We use type 80 (decimal), arbitrarily chosen the
-same as the ELF @code{e_machine} number for MMIX, filling it with
-section information normally found in ELF objects. @xref{mmo
-section mapping}.
-
-Contents is entered as 32-bit words, xor:ed over previous
-contents, always zero-initialized. A word that starts with the
-byte @samp{0x98} forms a command called a @samp{lopcode}, where
-the next byte distinguished between the thirteen lopcodes. The
-two remaining bytes, called the @samp{Y} and @samp{Z} fields, or
-the @samp{YZ} field (a 16-bit big-endian number), are used for
-various purposes different for each lopcode. As documented in
-@url{http://www-cs-faculty.stanford.edu/~knuth/mmixal-intro.ps.gz},
-the lopcodes are:
-
-@table @code
-@item lop_quote
-0x98000001. The next word is contents, regardless of whether it
-starts with 0x98 or not.
-
-@item lop_loc
-0x9801YYZZ, where @samp{Z} is 1 or 2. This is a location
-directive, setting the location for the next data to the next
-32-bit word (for @math{Z = 1}) or 64-bit word (for @math{Z = 2}),
-plus @math{Y * 2^56}. Normally @samp{Y} is 0 for the text segment
-and 2 for the data segment.
-
-@item lop_skip
-0x9802YYZZ. Increase the current location by @samp{YZ} bytes.
-
-@item lop_fixo
-0x9803YYZZ, where @samp{Z} is 1 or 2. Store the current location
-as 64 bits into the location pointed to by the next 32-bit
-(@math{Z = 1}) or 64-bit (@math{Z = 2}) word, plus @math{Y *
-2^56}.
-
-@item lop_fixr
-0x9804YYZZ. @samp{YZ} is stored into the current location plus
-@math{2 - 4 * YZ}.
-
-@item lop_fixrx
-0x980500ZZ. @samp{Z} is 16 or 24. A value @samp{L} derived from
-the following 32-bit word are used in a manner similar to
-@samp{YZ} in lop_fixr: it is xor:ed into the current location
-minus @math{4 * L}. The first byte of the word is 0 or 1. If it
-is 1, then @math{L = (@var{lowest 24 bits of word}) - 2^Z}, if 0,
-then @math{L = (@var{lowest 24 bits of word})}.
-
-@item lop_file
-0x9806YYZZ. @samp{Y} is the file number, @samp{Z} is count of
-32-bit words. Set the file number to @samp{Y} and the line
-counter to 0. The next @math{Z * 4} bytes contain the file name,
-padded with zeros if the count is not a multiple of four. The
-same @samp{Y} may occur multiple times, but @samp{Z} must be 0 for
-all but the first occurrence.
-
-@item lop_line
-0x9807YYZZ. @samp{YZ} is the line number. Together with
-lop_file, it forms the source location for the next 32-bit word.
-Note that for each non-lopcode 32-bit word, line numbers are
-assumed incremented by one.
-
-@item lop_spec
-0x9808YYZZ. @samp{YZ} is the type number. Data until the next
-lopcode other than lop_quote forms special data of type @samp{YZ}.
-@xref{mmo section mapping}.
-
-Other types than 80, (or type 80 with a content that does not
-parse) is stored in sections named @code{.MMIX.spec_data.@var{n}}
-where @var{n} is the @samp{YZ}-type. The flags for such a
-sections say not to allocate or load the data. The vma is 0.
-Contents of multiple occurrences of special data @var{n} is
-concatenated to the data of the previous lop_spec @var{n}s. The
-location in data or code at which the lop_spec occurred is lost.
-
-@item lop_pre
-0x980901ZZ. The first lopcode in a file. The @samp{Z} field forms the
-length of header information in 32-bit words, where the first word
-tells the time in seconds since @samp{00:00:00 GMT Jan 1 1970}.
-
-@item lop_post
-0x980a00ZZ. @math{Z > 32}. This lopcode follows after all
-content-generating lopcodes in a program. The @samp{Z} field
-denotes the value of @samp{rG} at the beginning of the program.
-The following @math{256 - Z} big-endian 64-bit words are loaded
-into global registers @samp{$G} @dots{} @samp{$255}.
-
-@item lop_stab
-0x980b0000. The next-to-last lopcode in a program. Must follow
-immediately after the lop_post lopcode and its data. After this
-lopcode follows all symbols in a compressed format
-(@pxref{Symbol-table}).
-
-@item lop_end
-0x980cYYZZ. The last lopcode in a program. It must follow the
-lop_stab lopcode and its data. The @samp{YZ} field contains the
-number of 32-bit words of symbol table information after the
-preceding lop_stab lopcode.
-@end table
-
-Note that the lopcode "fixups"; @code{lop_fixr}, @code{lop_fixrx} and
-@code{lop_fixo} are not generated by BFD, but are handled. They are
-generated by @code{mmixal}.
-
-This trivial one-label, one-instruction file:
-
-@example
- :Main TRAP 1,2,3
-@end example
-
-can be represented this way in mmo:
-
-@example
- 0x98090101 - lop_pre, one 32-bit word with timestamp.
- <timestamp>
- 0x98010002 - lop_loc, text segment, using a 64-bit address.
- Note that mmixal does not emit this for the file above.
- 0x00000000 - Address, high 32 bits.
- 0x00000000 - Address, low 32 bits.
- 0x98060002 - lop_file, 2 32-bit words for file-name.
- 0x74657374 - "test"
- 0x2e730000 - ".s\0\0"
- 0x98070001 - lop_line, line 1.
- 0x00010203 - TRAP 1,2,3
- 0x980a00ff - lop_post, setting $255 to 0.
- 0x00000000
- 0x00000000
- 0x980b0000 - lop_stab for ":Main" = 0, serial 1.
- 0x203a4040 @xref{Symbol-table}.
- 0x10404020
- 0x4d206120
- 0x69016e00
- 0x81000000
- 0x980c0005 - lop_end; symbol table contained five 32-bit words.
-@end example
-@node Symbol-table, mmo section mapping, File layout, mmo
-@subsection Symbol table format
-From mmixal.w (or really, the generated mmixal.tex) in
-@url{http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz}):
-``Symbols are stored and retrieved by means of a @samp{ternary
-search trie}, following ideas of Bentley and Sedgewick. (See
-ACM--SIAM Symp.@: on Discrete Algorithms @samp{8} (1997), 360--369;
-R.@:Sedgewick, @samp{Algorithms in C} (Reading, Mass.@:
-Addison--Wesley, 1998), @samp{15.4}.) Each trie node stores a
-character, and there are branches to subtries for the cases where
-a given character is less than, equal to, or greater than the
-character in the trie. There also is a pointer to a symbol table
-entry if a symbol ends at the current node.''
-
-So it's a tree encoded as a stream of bytes. The stream of bytes
-acts on a single virtual global symbol, adding and removing
-characters and signalling complete symbol points. Here, we read
-the stream and create symbols at the completion points.
-
-First, there's a control byte @code{m}. If any of the listed bits
-in @code{m} is nonzero, we execute what stands at the right, in
-the listed order:
-
-@example
- (MMO3_LEFT)
- 0x40 - Traverse left trie.
- (Read a new command byte and recurse.)
-
- (MMO3_SYMBITS)
- 0x2f - Read the next byte as a character and store it in the
- current character position; increment character position.
- Test the bits of @code{m}:
-
- (MMO3_WCHAR)
- 0x80 - The character is 16-bit (so read another byte,
- merge into current character.
-
- (MMO3_TYPEBITS)
- 0xf - We have a complete symbol; parse the type, value
- and serial number and do what should be done
- with a symbol. The type and length information
- is in j = (m & 0xf).
-
- (MMO3_REGQUAL_BITS)
- j == 0xf: A register variable. The following
- byte tells which register.
- j <= 8: An absolute symbol. Read j bytes as the
- big-endian number the symbol equals.
- A j = 2 with two zero bytes denotes an
- unknown symbol.
- j > 8: As with j <= 8, but add (0x20 << 56)
- to the value in the following j - 8
- bytes.
-
- Then comes the serial number, as a variant of
- uleb128, but better named ubeb128:
- Read bytes and shift the previous value left 7
- (multiply by 128). Add in the new byte, repeat
- until a byte has bit 7 set. The serial number
- is the computed value minus 128.
-
- (MMO3_MIDDLE)
- 0x20 - Traverse middle trie. (Read a new command byte
- and recurse.) Decrement character position.
-
- (MMO3_RIGHT)
- 0x10 - Traverse right trie. (Read a new command byte and
- recurse.)
-@end example
-
-Let's look again at the @code{lop_stab} for the trivial file
-(@pxref{File layout}).
-
-@example
- 0x980b0000 - lop_stab for ":Main" = 0, serial 1.
- 0x203a4040
- 0x10404020
- 0x4d206120
- 0x69016e00
- 0x81000000
-@end example
-
-This forms the trivial trie (note that the path between ``:'' and
-``M'' is redundant):
-
-@example
- 203a ":"
- 40 /
- 40 /
- 10 \
- 40 /
- 40 /
- 204d "M"
- 2061 "a"
- 2069 "i"
- 016e "n" is the last character in a full symbol, and
- with a value represented in one byte.
- 00 The value is 0.
- 81 The serial number is 1.
-@end example
-
-@node mmo section mapping, , Symbol-table, mmo
-@subsection mmo section mapping
-The implementation in BFD uses special data type 80 (decimal) to
-encapsulate and describe named sections, containing e.g.@: debug
-information. If needed, any datum in the encapsulation will be
-quoted using lop_quote. First comes a 32-bit word holding the
-number of 32-bit words containing the zero-terminated zero-padded
-segment name. After the name there's a 32-bit word holding flags
-describing the section type. Then comes a 64-bit big-endian word
-with the section length (in bytes), then another with the section
-start address. Depending on the type of section, the contents
-might follow, zero-padded to 32-bit boundary. For a loadable
-section (such as data or code), the contents might follow at some
-later point, not necessarily immediately, as a lop_loc with the
-same start address as in the section description, followed by the
-contents. This in effect forms a descriptor that must be emitted
-before the actual contents. Sections described this way must not
-overlap.
-
-For areas that don't have such descriptors, synthetic sections are
-formed by BFD. Consecutive contents in the two memory areas
-@samp{0x0000@dots{}00} to @samp{0x01ff@dots{}ff} and
-@samp{0x2000@dots{}00} to @samp{0x20ff@dots{}ff} are entered in
-sections named @code{.text} and @code{.data} respectively. If an area
-is not otherwise described, but would together with a neighboring
-lower area be less than @samp{0x40000000} bytes long, it is joined
-with the lower area and the gap is zero-filled. For other cases,
-a new section is formed, named @code{.MMIX.sec.@var{n}}. Here,
-@var{n} is a number, a running count through the mmo file,
-starting at 0.
-
-A loadable section specified as:
-
-@example
- .section secname,"ax"
- TETRA 1,2,3,4,-1,-2009
- BYTE 80
-@end example
-
-and linked to address @samp{0x4}, is represented by the sequence:
-
-@example
- 0x98080050 - lop_spec 80
- 0x00000002 - two 32-bit words for the section name
- 0x7365636e - "secn"
- 0x616d6500 - "ame\0"
- 0x00000033 - flags CODE, READONLY, LOAD, ALLOC
- 0x00000000 - high 32 bits of section length
- 0x0000001c - section length is 28 bytes; 6 * 4 + 1 + alignment to 32 bits
- 0x00000000 - high 32 bits of section address
- 0x00000004 - section address is 4
- 0x98010002 - 64 bits with address of following data
- 0x00000000 - high 32 bits of address
- 0x00000004 - low 32 bits: data starts at address 4
- 0x00000001 - 1
- 0x00000002 - 2
- 0x00000003 - 3
- 0x00000004 - 4
- 0xffffffff - -1
- 0xfffff827 - -2009
- 0x50000000 - 80 as a byte, padded with zeros.
-@end example
-
-Note that the lop_spec wrapping does not include the section
-contents. Compare this to a non-loaded section specified as:
-
-@example
- .section thirdsec
- TETRA 200001,100002
- BYTE 38,40
-@end example
-
-This, when linked to address @samp{0x200000000000001c}, is
-represented by:
-
-@example
- 0x98080050 - lop_spec 80
- 0x00000002 - two 32-bit words for the section name
- 0x7365636e - "thir"
- 0x616d6500 - "dsec"
- 0x00000010 - flag READONLY
- 0x00000000 - high 32 bits of section length
- 0x0000000c - section length is 12 bytes; 2 * 4 + 2 + alignment to 32 bits
- 0x20000000 - high 32 bits of address
- 0x0000001c - low 32 bits of address 0x200000000000001c
- 0x00030d41 - 200001
- 0x000186a2 - 100002
- 0x26280000 - 38, 40 as bytes, padded with zeros
-@end example
-
-For the latter example, the section contents must not be
-loaded in memory, and is therefore specified as part of the
-special data. The address is usually unimportant but might
-provide information for e.g.@: the DWARF 2 debugging format.
diff --git a/bfd/doc/opncls.texi b/bfd/doc/opncls.texi
deleted file mode 100644
index 6b47adfbb45d..000000000000
--- a/bfd/doc/opncls.texi
+++ /dev/null
@@ -1,365 +0,0 @@
-@section Opening and closing BFDs
-
-
-@subsection Functions for opening and closing
-
-
-@findex bfd_fopen
-@subsubsection @code{bfd_fopen}
-@strong{Synopsis}
-@example
-bfd *bfd_fopen (const char *filename, const char *target,
- const char *mode, int fd);
-@end example
-@strong{Description}@*
-Open the file @var{filename} with the target @var{target}.
-Return a pointer to the created BFD. If @var{fd} is not -1,
-then @code{fdopen} is used to open the file; otherwise, @code{fopen}
-is used. @var{mode} is passed directly to @code{fopen} or
-@code{fdopen}.
-
-Calls @code{bfd_find_target}, so @var{target} is interpreted as by
-that function.
-
-The new BFD is marked as cacheable iff @var{fd} is -1.
-
-If @code{NULL} is returned then an error has occured. Possible errors
-are @code{bfd_error_no_memory}, @code{bfd_error_invalid_target} or
-@code{system_call} error.
-
-@findex bfd_openr
-@subsubsection @code{bfd_openr}
-@strong{Synopsis}
-@example
-bfd *bfd_openr (const char *filename, const char *target);
-@end example
-@strong{Description}@*
-Open the file @var{filename} (using @code{fopen}) with the target
-@var{target}. Return a pointer to the created BFD.
-
-Calls @code{bfd_find_target}, so @var{target} is interpreted as by
-that function.
-
-If @code{NULL} is returned then an error has occured. Possible errors
-are @code{bfd_error_no_memory}, @code{bfd_error_invalid_target} or
-@code{system_call} error.
-
-@findex bfd_fdopenr
-@subsubsection @code{bfd_fdopenr}
-@strong{Synopsis}
-@example
-bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
-@end example
-@strong{Description}@*
-@code{bfd_fdopenr} is to @code{bfd_fopenr} much like @code{fdopen} is to
-@code{fopen}. It opens a BFD on a file already described by the
-@var{fd} supplied.
-
-When the file is later @code{bfd_close}d, the file descriptor will
-be closed. If the caller desires that this file descriptor be
-cached by BFD (opened as needed, closed as needed to free
-descriptors for other opens), with the supplied @var{fd} used as
-an initial file descriptor (but subject to closure at any time),
-call bfd_set_cacheable(bfd, 1) on the returned BFD. The default
-is to assume no caching; the file descriptor will remain open
-until @code{bfd_close}, and will not be affected by BFD operations
-on other files.
-
-Possible errors are @code{bfd_error_no_memory},
-@code{bfd_error_invalid_target} and @code{bfd_error_system_call}.
-
-@findex bfd_openstreamr
-@subsubsection @code{bfd_openstreamr}
-@strong{Synopsis}
-@example
-bfd *bfd_openstreamr (const char *, const char *, void *);
-@end example
-@strong{Description}@*
-Open a BFD for read access on an existing stdio stream. When
-the BFD is passed to @code{bfd_close}, the stream will be closed.
-
-@findex bfd_openr_iovec
-@subsubsection @code{bfd_openr_iovec}
-@strong{Synopsis}
-@example
-bfd *bfd_openr_iovec (const char *filename, const char *target,
- void *(*open) (struct bfd *nbfd,
- void *open_closure),
- void *open_closure,
- file_ptr (*pread) (struct bfd *nbfd,
- void *stream,
- void *buf,
- file_ptr nbytes,
- file_ptr offset),
- int (*close) (struct bfd *nbfd,
- void *stream));
-@end example
-@strong{Description}@*
-Create and return a BFD backed by a read-only @var{stream}.
-The @var{stream} is created using @var{open}, accessed using
-@var{pread} and destroyed using @var{close}.
-
-Calls @code{bfd_find_target}, so @var{target} is interpreted as by
-that function.
-
-Calls @var{open} (which can call @code{bfd_zalloc} and
-@code{bfd_get_filename}) to obtain the read-only stream backing
-the BFD. @var{open} either succeeds returning the
-non-@code{NULL} @var{stream}, or fails returning @code{NULL}
-(setting @code{bfd_error}).
-
-Calls @var{pread} to request @var{nbytes} of data from
-@var{stream} starting at @var{offset} (e.g., via a call to
-@code{bfd_read}). @var{pread} either succeeds returning the
-number of bytes read (which can be less than @var{nbytes} when
-end-of-file), or fails returning -1 (setting @code{bfd_error}).
-
-Calls @var{close} when the BFD is later closed using
-@code{bfd_close}. @var{close} either succeeds returning 0, or
-fails returning -1 (setting @code{bfd_error}).
-
-If @code{bfd_openr_iovec} returns @code{NULL} then an error has
-occurred. Possible errors are @code{bfd_error_no_memory},
-@code{bfd_error_invalid_target} and @code{bfd_error_system_call}.
-
-@findex bfd_openw
-@subsubsection @code{bfd_openw}
-@strong{Synopsis}
-@example
-bfd *bfd_openw (const char *filename, const char *target);
-@end example
-@strong{Description}@*
-Create a BFD, associated with file @var{filename}, using the
-file format @var{target}, and return a pointer to it.
-
-Possible errors are @code{bfd_error_system_call}, @code{bfd_error_no_memory},
-@code{bfd_error_invalid_target}.
-
-@findex bfd_close
-@subsubsection @code{bfd_close}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_close (bfd *abfd);
-@end example
-@strong{Description}@*
-Close a BFD. If the BFD was open for writing, then pending
-operations are completed and the file written out and closed.
-If the created file is executable, then @code{chmod} is called
-to mark it as such.
-
-All memory attached to the BFD is released.
-
-The file descriptor associated with the BFD is closed (even
-if it was passed in to BFD by @code{bfd_fdopenr}).
-
-@strong{Returns}@*
-@code{TRUE} is returned if all is ok, otherwise @code{FALSE}.
-
-@findex bfd_close_all_done
-@subsubsection @code{bfd_close_all_done}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_close_all_done (bfd *);
-@end example
-@strong{Description}@*
-Close a BFD. Differs from @code{bfd_close} since it does not
-complete any pending operations. This routine would be used
-if the application had just used BFD for swapping and didn't
-want to use any of the writing code.
-
-If the created file is executable, then @code{chmod} is called
-to mark it as such.
-
-All memory attached to the BFD is released.
-
-@strong{Returns}@*
-@code{TRUE} is returned if all is ok, otherwise @code{FALSE}.
-
-@findex bfd_create
-@subsubsection @code{bfd_create}
-@strong{Synopsis}
-@example
-bfd *bfd_create (const char *filename, bfd *templ);
-@end example
-@strong{Description}@*
-Create a new BFD in the manner of @code{bfd_openw}, but without
-opening a file. The new BFD takes the target from the target
-used by @var{template}. The format is always set to @code{bfd_object}.
-
-@findex bfd_make_writable
-@subsubsection @code{bfd_make_writable}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_make_writable (bfd *abfd);
-@end example
-@strong{Description}@*
-Takes a BFD as created by @code{bfd_create} and converts it
-into one like as returned by @code{bfd_openw}. It does this
-by converting the BFD to BFD_IN_MEMORY. It's assumed that
-you will call @code{bfd_make_readable} on this bfd later.
-
-@strong{Returns}@*
-@code{TRUE} is returned if all is ok, otherwise @code{FALSE}.
-
-@findex bfd_make_readable
-@subsubsection @code{bfd_make_readable}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_make_readable (bfd *abfd);
-@end example
-@strong{Description}@*
-Takes a BFD as created by @code{bfd_create} and
-@code{bfd_make_writable} and converts it into one like as
-returned by @code{bfd_openr}. It does this by writing the
-contents out to the memory buffer, then reversing the
-direction.
-
-@strong{Returns}@*
-@code{TRUE} is returned if all is ok, otherwise @code{FALSE}.
-
-@findex bfd_alloc
-@subsubsection @code{bfd_alloc}
-@strong{Synopsis}
-@example
-void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
-@end example
-@strong{Description}@*
-Allocate a block of @var{wanted} bytes of memory attached to
-@code{abfd} and return a pointer to it.
-
-@findex bfd_alloc2
-@subsubsection @code{bfd_alloc2}
-@strong{Synopsis}
-@example
-void *bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
-@end example
-@strong{Description}@*
-Allocate a block of @var{nmemb} elements of @var{size} bytes each
-of memory attached to @code{abfd} and return a pointer to it.
-
-@findex bfd_zalloc
-@subsubsection @code{bfd_zalloc}
-@strong{Synopsis}
-@example
-void *bfd_zalloc (bfd *abfd, bfd_size_type wanted);
-@end example
-@strong{Description}@*
-Allocate a block of @var{wanted} bytes of zeroed memory
-attached to @code{abfd} and return a pointer to it.
-
-@findex bfd_zalloc2
-@subsubsection @code{bfd_zalloc2}
-@strong{Synopsis}
-@example
-void *bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
-@end example
-@strong{Description}@*
-Allocate a block of @var{nmemb} elements of @var{size} bytes each
-of zeroed memory attached to @code{abfd} and return a pointer to it.
-
-@findex bfd_calc_gnu_debuglink_crc32
-@subsubsection @code{bfd_calc_gnu_debuglink_crc32}
-@strong{Synopsis}
-@example
-unsigned long bfd_calc_gnu_debuglink_crc32
- (unsigned long crc, const unsigned char *buf, bfd_size_type len);
-@end example
-@strong{Description}@*
-Computes a CRC value as used in the .gnu_debuglink section.
-Advances the previously computed @var{crc} value by computing
-and adding in the crc32 for @var{len} bytes of @var{buf}.
-
-@strong{Returns}@*
-Return the updated CRC32 value.
-
-@findex get_debug_link_info
-@subsubsection @code{get_debug_link_info}
-@strong{Synopsis}
-@example
-char *get_debug_link_info (bfd *abfd, unsigned long *crc32_out);
-@end example
-@strong{Description}@*
-fetch the filename and CRC32 value for any separate debuginfo
-associated with @var{abfd}. Return NULL if no such info found,
-otherwise return filename and update @var{crc32_out}.
-
-@findex separate_debug_file_exists
-@subsubsection @code{separate_debug_file_exists}
-@strong{Synopsis}
-@example
-bfd_boolean separate_debug_file_exists
- (char *name, unsigned long crc32);
-@end example
-@strong{Description}@*
-Checks to see if @var{name} is a file and if its contents
-match @var{crc32}.
-
-@findex find_separate_debug_file
-@subsubsection @code{find_separate_debug_file}
-@strong{Synopsis}
-@example
-char *find_separate_debug_file (bfd *abfd);
-@end example
-@strong{Description}@*
-Searches @var{abfd} for a reference to separate debugging
-information, scans various locations in the filesystem, including
-the file tree rooted at @var{debug_file_directory}, and returns a
-filename of such debugging information if the file is found and has
-matching CRC32. Returns NULL if no reference to debugging file
-exists, or file cannot be found.
-
-@findex bfd_follow_gnu_debuglink
-@subsubsection @code{bfd_follow_gnu_debuglink}
-@strong{Synopsis}
-@example
-char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
-@end example
-@strong{Description}@*
-Takes a BFD and searches it for a .gnu_debuglink section. If this
-section is found, it examines the section for the name and checksum
-of a '.debug' file containing auxiliary debugging information. It
-then searches the filesystem for this .debug file in some standard
-locations, including the directory tree rooted at @var{dir}, and if
-found returns the full filename.
-
-If @var{dir} is NULL, it will search a default path configured into
-libbfd at build time. [XXX this feature is not currently
-implemented].
-
-@strong{Returns}@*
-@code{NULL} on any errors or failure to locate the .debug file,
-otherwise a pointer to a heap-allocated string containing the
-filename. The caller is responsible for freeing this string.
-
-@findex bfd_create_gnu_debuglink_section
-@subsubsection @code{bfd_create_gnu_debuglink_section}
-@strong{Synopsis}
-@example
-struct bfd_section *bfd_create_gnu_debuglink_section
- (bfd *abfd, const char *filename);
-@end example
-@strong{Description}@*
-Takes a @var{BFD} and adds a .gnu_debuglink section to it. The section is sized
-to be big enough to contain a link to the specified @var{filename}.
-
-@strong{Returns}@*
-A pointer to the new section is returned if all is ok. Otherwise @code{NULL} is
-returned and bfd_error is set.
-
-@findex bfd_fill_in_gnu_debuglink_section
-@subsubsection @code{bfd_fill_in_gnu_debuglink_section}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_fill_in_gnu_debuglink_section
- (bfd *abfd, struct bfd_section *sect, const char *filename);
-@end example
-@strong{Description}@*
-Takes a @var{BFD} and containing a .gnu_debuglink section @var{SECT}
-and fills in the contents of the section to contain a link to the
-specified @var{filename}. The filename should be relative to the
-current directory.
-
-@strong{Returns}@*
-@code{TRUE} is returned if all is ok. Otherwise @code{FALSE} is returned
-and bfd_error is set.
-
diff --git a/bfd/doc/reloc.texi b/bfd/doc/reloc.texi
deleted file mode 100644
index 0540be862551..000000000000
--- a/bfd/doc/reloc.texi
+++ /dev/null
@@ -1,2494 +0,0 @@
-@section Relocations
-BFD maintains relocations in much the same way it maintains
-symbols: they are left alone until required, then read in
-en-masse and translated into an internal form. A common
-routine @code{bfd_perform_relocation} acts upon the
-canonical form to do the fixup.
-
-Relocations are maintained on a per section basis,
-while symbols are maintained on a per BFD basis.
-
-All that a back end has to do to fit the BFD interface is to create
-a @code{struct reloc_cache_entry} for each relocation
-in a particular section, and fill in the right bits of the structures.
-
-@menu
-* typedef arelent::
-* howto manager::
-@end menu
-
-
-@node typedef arelent, howto manager, Relocations, Relocations
-@subsection typedef arelent
-This is the structure of a relocation entry:
-
-
-@example
-
-typedef enum bfd_reloc_status
-@{
- /* No errors detected. */
- bfd_reloc_ok,
-
- /* The relocation was performed, but there was an overflow. */
- bfd_reloc_overflow,
-
- /* The address to relocate was not within the section supplied. */
- bfd_reloc_outofrange,
-
- /* Used by special functions. */
- bfd_reloc_continue,
-
- /* Unsupported relocation size requested. */
- bfd_reloc_notsupported,
-
- /* Unused. */
- bfd_reloc_other,
-
- /* The symbol to relocate against was undefined. */
- bfd_reloc_undefined,
-
- /* The relocation was performed, but may not be ok - presently
- generated only when linking i960 coff files with i960 b.out
- symbols. If this type is returned, the error_message argument
- to bfd_perform_relocation will be set. */
- bfd_reloc_dangerous
- @}
- bfd_reloc_status_type;
-
-
-typedef struct reloc_cache_entry
-@{
- /* A pointer into the canonical table of pointers. */
- struct bfd_symbol **sym_ptr_ptr;
-
- /* offset in section. */
- bfd_size_type address;
-
- /* addend for relocation value. */
- bfd_vma addend;
-
- /* Pointer to how to perform the required relocation. */
- reloc_howto_type *howto;
-
-@}
-arelent;
-
-@end example
-@strong{Description}@*
-Here is a description of each of the fields within an @code{arelent}:
-
-@itemize @bullet
-
-@item
-@code{sym_ptr_ptr}
-@end itemize
-The symbol table pointer points to a pointer to the symbol
-associated with the relocation request. It is the pointer
-into the table returned by the back end's
-@code{canonicalize_symtab} action. @xref{Symbols}. The symbol is
-referenced through a pointer to a pointer so that tools like
-the linker can fix up all the symbols of the same name by
-modifying only one pointer. The relocation routine looks in
-the symbol and uses the base of the section the symbol is
-attached to and the value of the symbol as the initial
-relocation offset. If the symbol pointer is zero, then the
-section provided is looked up.
-
-@itemize @bullet
-
-@item
-@code{address}
-@end itemize
-The @code{address} field gives the offset in bytes from the base of
-the section data which owns the relocation record to the first
-byte of relocatable information. The actual data relocated
-will be relative to this point; for example, a relocation
-type which modifies the bottom two bytes of a four byte word
-would not touch the first byte pointed to in a big endian
-world.
-
-@itemize @bullet
-
-@item
-@code{addend}
-@end itemize
-The @code{addend} is a value provided by the back end to be added (!)
-to the relocation offset. Its interpretation is dependent upon
-the howto. For example, on the 68k the code:
-
-@example
- char foo[];
- main()
- @{
- return foo[0x12345678];
- @}
-@end example
-
-Could be compiled into:
-
-@example
- linkw fp,#-4
- moveb @@#12345678,d0
- extbl d0
- unlk fp
- rts
-@end example
-
-This could create a reloc pointing to @code{foo}, but leave the
-offset in the data, something like:
-
-@example
-RELOCATION RECORDS FOR [.text]:
-offset type value
-00000006 32 _foo
-
-00000000 4e56 fffc ; linkw fp,#-4
-00000004 1039 1234 5678 ; moveb @@#12345678,d0
-0000000a 49c0 ; extbl d0
-0000000c 4e5e ; unlk fp
-0000000e 4e75 ; rts
-@end example
-
-Using coff and an 88k, some instructions don't have enough
-space in them to represent the full address range, and
-pointers have to be loaded in two parts. So you'd get something like:
-
-@example
- or.u r13,r0,hi16(_foo+0x12345678)
- ld.b r2,r13,lo16(_foo+0x12345678)
- jmp r1
-@end example
-
-This should create two relocs, both pointing to @code{_foo}, and with
-0x12340000 in their addend field. The data would consist of:
-
-@example
-RELOCATION RECORDS FOR [.text]:
-offset type value
-00000002 HVRT16 _foo+0x12340000
-00000006 LVRT16 _foo+0x12340000
-
-00000000 5da05678 ; or.u r13,r0,0x5678
-00000004 1c4d5678 ; ld.b r2,r13,0x5678
-00000008 f400c001 ; jmp r1
-@end example
-
-The relocation routine digs out the value from the data, adds
-it to the addend to get the original offset, and then adds the
-value of @code{_foo}. Note that all 32 bits have to be kept around
-somewhere, to cope with carry from bit 15 to bit 16.
-
-One further example is the sparc and the a.out format. The
-sparc has a similar problem to the 88k, in that some
-instructions don't have room for an entire offset, but on the
-sparc the parts are created in odd sized lumps. The designers of
-the a.out format chose to not use the data within the section
-for storing part of the offset; all the offset is kept within
-the reloc. Anything in the data should be ignored.
-
-@example
- save %sp,-112,%sp
- sethi %hi(_foo+0x12345678),%g2
- ldsb [%g2+%lo(_foo+0x12345678)],%i0
- ret
- restore
-@end example
-
-Both relocs contain a pointer to @code{foo}, and the offsets
-contain junk.
-
-@example
-RELOCATION RECORDS FOR [.text]:
-offset type value
-00000004 HI22 _foo+0x12345678
-00000008 LO10 _foo+0x12345678
-
-00000000 9de3bf90 ; save %sp,-112,%sp
-00000004 05000000 ; sethi %hi(_foo+0),%g2
-00000008 f048a000 ; ldsb [%g2+%lo(_foo+0)],%i0
-0000000c 81c7e008 ; ret
-00000010 81e80000 ; restore
-@end example
-
-@itemize @bullet
-
-@item
-@code{howto}
-@end itemize
-The @code{howto} field can be imagined as a
-relocation instruction. It is a pointer to a structure which
-contains information on what to do with all of the other
-information in the reloc record and data section. A back end
-would normally have a relocation instruction set and turn
-relocations into pointers to the correct structure on input -
-but it would be possible to create each howto field on demand.
-
-@subsubsection @code{enum complain_overflow}
-Indicates what sort of overflow checking should be done when
-performing a relocation.
-
-
-@example
-
-enum complain_overflow
-@{
- /* Do not complain on overflow. */
- complain_overflow_dont,
-
- /* Complain if the value overflows when considered as a signed
- number one bit larger than the field. ie. A bitfield of N bits
- is allowed to represent -2**n to 2**n-1. */
- complain_overflow_bitfield,
-
- /* Complain if the value overflows when considered as a signed
- number. */
- complain_overflow_signed,
-
- /* Complain if the value overflows when considered as an
- unsigned number. */
- complain_overflow_unsigned
-@};
-@end example
-@subsubsection @code{reloc_howto_type}
-The @code{reloc_howto_type} is a structure which contains all the
-information that libbfd needs to know to tie up a back end's data.
-
-
-@example
-struct bfd_symbol; /* Forward declaration. */
-
-struct reloc_howto_struct
-@{
- /* The type field has mainly a documentary use - the back end can
- do what it wants with it, though normally the back end's
- external idea of what a reloc number is stored
- in this field. For example, a PC relative word relocation
- in a coff environment has the type 023 - because that's
- what the outside world calls a R_PCRWORD reloc. */
- unsigned int type;
-
- /* The value the final relocation is shifted right by. This drops
- unwanted data from the relocation. */
- unsigned int rightshift;
-
- /* The size of the item to be relocated. This is *not* a
- power-of-two measure. To get the number of bytes operated
- on by a type of relocation, use bfd_get_reloc_size. */
- int size;
-
- /* The number of bits in the item to be relocated. This is used
- when doing overflow checking. */
- unsigned int bitsize;
-
- /* Notes that the relocation is relative to the location in the
- data section of the addend. The relocation function will
- subtract from the relocation value the address of the location
- being relocated. */
- bfd_boolean pc_relative;
-
- /* The bit position of the reloc value in the destination.
- The relocated value is left shifted by this amount. */
- unsigned int bitpos;
-
- /* What type of overflow error should be checked for when
- relocating. */
- enum complain_overflow complain_on_overflow;
-
- /* If this field is non null, then the supplied function is
- called rather than the normal function. This allows really
- strange relocation methods to be accommodated (e.g., i960 callj
- instructions). */
- bfd_reloc_status_type (*special_function)
- (bfd *, arelent *, struct bfd_symbol *, void *, asection *,
- bfd *, char **);
-
- /* The textual name of the relocation type. */
- char *name;
-
- /* Some formats record a relocation addend in the section contents
- rather than with the relocation. For ELF formats this is the
- distinction between USE_REL and USE_RELA (though the code checks
- for USE_REL == 1/0). The value of this field is TRUE if the
- addend is recorded with the section contents; when performing a
- partial link (ld -r) the section contents (the data) will be
- modified. The value of this field is FALSE if addends are
- recorded with the relocation (in arelent.addend); when performing
- a partial link the relocation will be modified.
- All relocations for all ELF USE_RELA targets should set this field
- to FALSE (values of TRUE should be looked on with suspicion).
- However, the converse is not true: not all relocations of all ELF
- USE_REL targets set this field to TRUE. Why this is so is peculiar
- to each particular target. For relocs that aren't used in partial
- links (e.g. GOT stuff) it doesn't matter what this is set to. */
- bfd_boolean partial_inplace;
-
- /* src_mask selects the part of the instruction (or data) to be used
- in the relocation sum. If the target relocations don't have an
- addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
- dst_mask to extract the addend from the section contents. If
- relocations do have an addend in the reloc, eg. ELF USE_RELA, this
- field should be zero. Non-zero values for ELF USE_RELA targets are
- bogus as in those cases the value in the dst_mask part of the
- section contents should be treated as garbage. */
- bfd_vma src_mask;
-
- /* dst_mask selects which parts of the instruction (or data) are
- replaced with a relocated value. */
- bfd_vma dst_mask;
-
- /* When some formats create PC relative instructions, they leave
- the value of the pc of the place being relocated in the offset
- slot of the instruction, so that a PC relative relocation can
- be made just by adding in an ordinary offset (e.g., sun3 a.out).
- Some formats leave the displacement part of an instruction
- empty (e.g., m88k bcs); this flag signals the fact. */
- bfd_boolean pcrel_offset;
-@};
-
-@end example
-@findex The HOWTO Macro
-@subsubsection @code{The HOWTO Macro}
-@strong{Description}@*
-The HOWTO define is horrible and will go away.
-@example
-#define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
- @{ (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC @}
-@end example
-
-@strong{Description}@*
-And will be replaced with the totally magic way. But for the
-moment, we are compatible, so do it this way.
-@example
-#define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \
- HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \
- NAME, FALSE, 0, 0, IN)
-
-@end example
-
-@strong{Description}@*
-This is used to fill in an empty howto entry in an array.
-@example
-#define EMPTY_HOWTO(C) \
- HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
- NULL, FALSE, 0, 0, FALSE)
-
-@end example
-
-@strong{Description}@*
-Helper routine to turn a symbol into a relocation value.
-@example
-#define HOWTO_PREPARE(relocation, symbol) \
- @{ \
- if (symbol != NULL) \
- @{ \
- if (bfd_is_com_section (symbol->section)) \
- @{ \
- relocation = 0; \
- @} \
- else \
- @{ \
- relocation = symbol->value; \
- @} \
- @} \
- @}
-
-@end example
-
-@findex bfd_get_reloc_size
-@subsubsection @code{bfd_get_reloc_size}
-@strong{Synopsis}
-@example
-unsigned int bfd_get_reloc_size (reloc_howto_type *);
-@end example
-@strong{Description}@*
-For a reloc_howto_type that operates on a fixed number of bytes,
-this returns the number of bytes operated on.
-
-@findex arelent_chain
-@subsubsection @code{arelent_chain}
-@strong{Description}@*
-How relocs are tied together in an @code{asection}:
-@example
-typedef struct relent_chain
-@{
- arelent relent;
- struct relent_chain *next;
-@}
-arelent_chain;
-
-@end example
-
-@findex bfd_check_overflow
-@subsubsection @code{bfd_check_overflow}
-@strong{Synopsis}
-@example
-bfd_reloc_status_type bfd_check_overflow
- (enum complain_overflow how,
- unsigned int bitsize,
- unsigned int rightshift,
- unsigned int addrsize,
- bfd_vma relocation);
-@end example
-@strong{Description}@*
-Perform overflow checking on @var{relocation} which has
-@var{bitsize} significant bits and will be shifted right by
-@var{rightshift} bits, on a machine with addresses containing
-@var{addrsize} significant bits. The result is either of
-@code{bfd_reloc_ok} or @code{bfd_reloc_overflow}.
-
-@findex bfd_perform_relocation
-@subsubsection @code{bfd_perform_relocation}
-@strong{Synopsis}
-@example
-bfd_reloc_status_type bfd_perform_relocation
- (bfd *abfd,
- arelent *reloc_entry,
- void *data,
- asection *input_section,
- bfd *output_bfd,
- char **error_message);
-@end example
-@strong{Description}@*
-If @var{output_bfd} is supplied to this function, the
-generated image will be relocatable; the relocations are
-copied to the output file after they have been changed to
-reflect the new state of the world. There are two ways of
-reflecting the results of partial linkage in an output file:
-by modifying the output data in place, and by modifying the
-relocation record. Some native formats (e.g., basic a.out and
-basic coff) have no way of specifying an addend in the
-relocation type, so the addend has to go in the output data.
-This is no big deal since in these formats the output data
-slot will always be big enough for the addend. Complex reloc
-types with addends were invented to solve just this problem.
-The @var{error_message} argument is set to an error message if
-this return @code{bfd_reloc_dangerous}.
-
-@findex bfd_install_relocation
-@subsubsection @code{bfd_install_relocation}
-@strong{Synopsis}
-@example
-bfd_reloc_status_type bfd_install_relocation
- (bfd *abfd,
- arelent *reloc_entry,
- void *data, bfd_vma data_start,
- asection *input_section,
- char **error_message);
-@end example
-@strong{Description}@*
-This looks remarkably like @code{bfd_perform_relocation}, except it
-does not expect that the section contents have been filled in.
-I.e., it's suitable for use when creating, rather than applying
-a relocation.
-
-For now, this function should be considered reserved for the
-assembler.
-
-
-@node howto manager, , typedef arelent, Relocations
-@subsection The howto manager
-When an application wants to create a relocation, but doesn't
-know what the target machine might call it, it can find out by
-using this bit of code.
-
-@findex bfd_reloc_code_type
-@subsubsection @code{bfd_reloc_code_type}
-@strong{Description}@*
-The insides of a reloc code. The idea is that, eventually, there
-will be one enumerator for every type of relocation we ever do.
-Pass one of these values to @code{bfd_reloc_type_lookup}, and it'll
-return a howto pointer.
-
-This does mean that the application must determine the correct
-enumerator value; you can't get a howto pointer from a random set
-of attributes.
-
-Here are the possible values for @code{enum bfd_reloc_code_real}:
-
-@deffn {} BFD_RELOC_64
-@deffnx {} BFD_RELOC_32
-@deffnx {} BFD_RELOC_26
-@deffnx {} BFD_RELOC_24
-@deffnx {} BFD_RELOC_16
-@deffnx {} BFD_RELOC_14
-@deffnx {} BFD_RELOC_8
-Basic absolute relocations of N bits.
-@end deffn
-@deffn {} BFD_RELOC_64_PCREL
-@deffnx {} BFD_RELOC_32_PCREL
-@deffnx {} BFD_RELOC_24_PCREL
-@deffnx {} BFD_RELOC_16_PCREL
-@deffnx {} BFD_RELOC_12_PCREL
-@deffnx {} BFD_RELOC_8_PCREL
-PC-relative relocations. Sometimes these are relative to the address
-of the relocation itself; sometimes they are relative to the start of
-the section containing the relocation. It depends on the specific target.
-
-The 24-bit relocation is used in some Intel 960 configurations.
-@end deffn
-@deffn {} BFD_RELOC_32_SECREL
-Section relative relocations. Some targets need this for DWARF2.
-@end deffn
-@deffn {} BFD_RELOC_32_GOT_PCREL
-@deffnx {} BFD_RELOC_16_GOT_PCREL
-@deffnx {} BFD_RELOC_8_GOT_PCREL
-@deffnx {} BFD_RELOC_32_GOTOFF
-@deffnx {} BFD_RELOC_16_GOTOFF
-@deffnx {} BFD_RELOC_LO16_GOTOFF
-@deffnx {} BFD_RELOC_HI16_GOTOFF
-@deffnx {} BFD_RELOC_HI16_S_GOTOFF
-@deffnx {} BFD_RELOC_8_GOTOFF
-@deffnx {} BFD_RELOC_64_PLT_PCREL
-@deffnx {} BFD_RELOC_32_PLT_PCREL
-@deffnx {} BFD_RELOC_24_PLT_PCREL
-@deffnx {} BFD_RELOC_16_PLT_PCREL
-@deffnx {} BFD_RELOC_8_PLT_PCREL
-@deffnx {} BFD_RELOC_64_PLTOFF
-@deffnx {} BFD_RELOC_32_PLTOFF
-@deffnx {} BFD_RELOC_16_PLTOFF
-@deffnx {} BFD_RELOC_LO16_PLTOFF
-@deffnx {} BFD_RELOC_HI16_PLTOFF
-@deffnx {} BFD_RELOC_HI16_S_PLTOFF
-@deffnx {} BFD_RELOC_8_PLTOFF
-For ELF.
-@end deffn
-@deffn {} BFD_RELOC_68K_GLOB_DAT
-@deffnx {} BFD_RELOC_68K_JMP_SLOT
-@deffnx {} BFD_RELOC_68K_RELATIVE
-Relocations used by 68K ELF.
-@end deffn
-@deffn {} BFD_RELOC_32_BASEREL
-@deffnx {} BFD_RELOC_16_BASEREL
-@deffnx {} BFD_RELOC_LO16_BASEREL
-@deffnx {} BFD_RELOC_HI16_BASEREL
-@deffnx {} BFD_RELOC_HI16_S_BASEREL
-@deffnx {} BFD_RELOC_8_BASEREL
-@deffnx {} BFD_RELOC_RVA
-Linkage-table relative.
-@end deffn
-@deffn {} BFD_RELOC_8_FFnn
-Absolute 8-bit relocation, but used to form an address like 0xFFnn.
-@end deffn
-@deffn {} BFD_RELOC_32_PCREL_S2
-@deffnx {} BFD_RELOC_16_PCREL_S2
-@deffnx {} BFD_RELOC_23_PCREL_S2
-These PC-relative relocations are stored as word displacements --
-i.e., byte displacements shifted right two bits. The 30-bit word
-displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
-SPARC. (SPARC tools generally refer to this as <<WDISP30>>.) The
-signed 16-bit displacement is used on the MIPS, and the 23-bit
-displacement is used on the Alpha.
-@end deffn
-@deffn {} BFD_RELOC_HI22
-@deffnx {} BFD_RELOC_LO10
-High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
-the target word. These are used on the SPARC.
-@end deffn
-@deffn {} BFD_RELOC_GPREL16
-@deffnx {} BFD_RELOC_GPREL32
-For systems that allocate a Global Pointer register, these are
-displacements off that register. These relocation types are
-handled specially, because the value the register will have is
-decided relatively late.
-@end deffn
-@deffn {} BFD_RELOC_I960_CALLJ
-Reloc types used for i960/b.out.
-@end deffn
-@deffn {} BFD_RELOC_NONE
-@deffnx {} BFD_RELOC_SPARC_WDISP22
-@deffnx {} BFD_RELOC_SPARC22
-@deffnx {} BFD_RELOC_SPARC13
-@deffnx {} BFD_RELOC_SPARC_GOT10
-@deffnx {} BFD_RELOC_SPARC_GOT13
-@deffnx {} BFD_RELOC_SPARC_GOT22
-@deffnx {} BFD_RELOC_SPARC_PC10
-@deffnx {} BFD_RELOC_SPARC_PC22
-@deffnx {} BFD_RELOC_SPARC_WPLT30
-@deffnx {} BFD_RELOC_SPARC_COPY
-@deffnx {} BFD_RELOC_SPARC_GLOB_DAT
-@deffnx {} BFD_RELOC_SPARC_JMP_SLOT
-@deffnx {} BFD_RELOC_SPARC_RELATIVE
-@deffnx {} BFD_RELOC_SPARC_UA16
-@deffnx {} BFD_RELOC_SPARC_UA32
-@deffnx {} BFD_RELOC_SPARC_UA64
-SPARC ELF relocations. There is probably some overlap with other
-relocation types already defined.
-@end deffn
-@deffn {} BFD_RELOC_SPARC_BASE13
-@deffnx {} BFD_RELOC_SPARC_BASE22
-I think these are specific to SPARC a.out (e.g., Sun 4).
-@end deffn
-@deffn {} BFD_RELOC_SPARC_64
-@deffnx {} BFD_RELOC_SPARC_10
-@deffnx {} BFD_RELOC_SPARC_11
-@deffnx {} BFD_RELOC_SPARC_OLO10
-@deffnx {} BFD_RELOC_SPARC_HH22
-@deffnx {} BFD_RELOC_SPARC_HM10
-@deffnx {} BFD_RELOC_SPARC_LM22
-@deffnx {} BFD_RELOC_SPARC_PC_HH22
-@deffnx {} BFD_RELOC_SPARC_PC_HM10
-@deffnx {} BFD_RELOC_SPARC_PC_LM22
-@deffnx {} BFD_RELOC_SPARC_WDISP16
-@deffnx {} BFD_RELOC_SPARC_WDISP19
-@deffnx {} BFD_RELOC_SPARC_7
-@deffnx {} BFD_RELOC_SPARC_6
-@deffnx {} BFD_RELOC_SPARC_5
-@deffnx {} BFD_RELOC_SPARC_DISP64
-@deffnx {} BFD_RELOC_SPARC_PLT32
-@deffnx {} BFD_RELOC_SPARC_PLT64
-@deffnx {} BFD_RELOC_SPARC_HIX22
-@deffnx {} BFD_RELOC_SPARC_LOX10
-@deffnx {} BFD_RELOC_SPARC_H44
-@deffnx {} BFD_RELOC_SPARC_M44
-@deffnx {} BFD_RELOC_SPARC_L44
-@deffnx {} BFD_RELOC_SPARC_REGISTER
-SPARC64 relocations
-@end deffn
-@deffn {} BFD_RELOC_SPARC_REV32
-SPARC little endian relocation
-@end deffn
-@deffn {} BFD_RELOC_SPARC_TLS_GD_HI22
-@deffnx {} BFD_RELOC_SPARC_TLS_GD_LO10
-@deffnx {} BFD_RELOC_SPARC_TLS_GD_ADD
-@deffnx {} BFD_RELOC_SPARC_TLS_GD_CALL
-@deffnx {} BFD_RELOC_SPARC_TLS_LDM_HI22
-@deffnx {} BFD_RELOC_SPARC_TLS_LDM_LO10
-@deffnx {} BFD_RELOC_SPARC_TLS_LDM_ADD
-@deffnx {} BFD_RELOC_SPARC_TLS_LDM_CALL
-@deffnx {} BFD_RELOC_SPARC_TLS_LDO_HIX22
-@deffnx {} BFD_RELOC_SPARC_TLS_LDO_LOX10
-@deffnx {} BFD_RELOC_SPARC_TLS_LDO_ADD
-@deffnx {} BFD_RELOC_SPARC_TLS_IE_HI22
-@deffnx {} BFD_RELOC_SPARC_TLS_IE_LO10
-@deffnx {} BFD_RELOC_SPARC_TLS_IE_LD
-@deffnx {} BFD_RELOC_SPARC_TLS_IE_LDX
-@deffnx {} BFD_RELOC_SPARC_TLS_IE_ADD
-@deffnx {} BFD_RELOC_SPARC_TLS_LE_HIX22
-@deffnx {} BFD_RELOC_SPARC_TLS_LE_LOX10
-@deffnx {} BFD_RELOC_SPARC_TLS_DTPMOD32
-@deffnx {} BFD_RELOC_SPARC_TLS_DTPMOD64
-@deffnx {} BFD_RELOC_SPARC_TLS_DTPOFF32
-@deffnx {} BFD_RELOC_SPARC_TLS_DTPOFF64
-@deffnx {} BFD_RELOC_SPARC_TLS_TPOFF32
-@deffnx {} BFD_RELOC_SPARC_TLS_TPOFF64
-SPARC TLS relocations
-@end deffn
-@deffn {} BFD_RELOC_ALPHA_GPDISP_HI16
-Alpha ECOFF and ELF relocations. Some of these treat the symbol or
-"addend" in some special way.
-For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
-writing; when reading, it will be the absolute section symbol. The
-addend is the displacement in bytes of the "lda" instruction from
-the "ldah" instruction (which is at the address of this reloc).
-@end deffn
-@deffn {} BFD_RELOC_ALPHA_GPDISP_LO16
-For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
-with GPDISP_HI16 relocs. The addend is ignored when writing the
-relocations out, and is filled in with the file's GP value on
-reading, for convenience.
-@end deffn
-@deffn {} BFD_RELOC_ALPHA_GPDISP
-The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
-relocation except that there is no accompanying GPDISP_LO16
-relocation.
-@end deffn
-@deffn {} BFD_RELOC_ALPHA_LITERAL
-@deffnx {} BFD_RELOC_ALPHA_ELF_LITERAL
-@deffnx {} BFD_RELOC_ALPHA_LITUSE
-The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
-the assembler turns it into a LDQ instruction to load the address of
-the symbol, and then fills in a register in the real instruction.
-
-The LITERAL reloc, at the LDQ instruction, refers to the .lita
-section symbol. The addend is ignored when writing, but is filled
-in with the file's GP value on reading, for convenience, as with the
-GPDISP_LO16 reloc.
-
-The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
-It should refer to the symbol to be referenced, as with 16_GOTOFF,
-but it generates output not based on the position within the .got
-section, but relative to the GP value chosen for the file during the
-final link stage.
-
-The LITUSE reloc, on the instruction using the loaded address, gives
-information to the linker that it might be able to use to optimize
-away some literal section references. The symbol is ignored (read
-as the absolute section symbol), and the "addend" indicates the type
-of instruction using the register:
-1 - "memory" fmt insn
-2 - byte-manipulation (byte offset reg)
-3 - jsr (target of branch)
-@end deffn
-@deffn {} BFD_RELOC_ALPHA_HINT
-The HINT relocation indicates a value that should be filled into the
-"hint" field of a jmp/jsr/ret instruction, for possible branch-
-prediction logic which may be provided on some processors.
-@end deffn
-@deffn {} BFD_RELOC_ALPHA_LINKAGE
-The LINKAGE relocation outputs a linkage pair in the object file,
-which is filled by the linker.
-@end deffn
-@deffn {} BFD_RELOC_ALPHA_CODEADDR
-The CODEADDR relocation outputs a STO_CA in the object file,
-which is filled by the linker.
-@end deffn
-@deffn {} BFD_RELOC_ALPHA_GPREL_HI16
-@deffnx {} BFD_RELOC_ALPHA_GPREL_LO16
-The GPREL_HI/LO relocations together form a 32-bit offset from the
-GP register.
-@end deffn
-@deffn {} BFD_RELOC_ALPHA_BRSGP
-Like BFD_RELOC_23_PCREL_S2, except that the source and target must
-share a common GP, and the target address is adjusted for
-STO_ALPHA_STD_GPLOAD.
-@end deffn
-@deffn {} BFD_RELOC_ALPHA_TLSGD
-@deffnx {} BFD_RELOC_ALPHA_TLSLDM
-@deffnx {} BFD_RELOC_ALPHA_DTPMOD64
-@deffnx {} BFD_RELOC_ALPHA_GOTDTPREL16
-@deffnx {} BFD_RELOC_ALPHA_DTPREL64
-@deffnx {} BFD_RELOC_ALPHA_DTPREL_HI16
-@deffnx {} BFD_RELOC_ALPHA_DTPREL_LO16
-@deffnx {} BFD_RELOC_ALPHA_DTPREL16
-@deffnx {} BFD_RELOC_ALPHA_GOTTPREL16
-@deffnx {} BFD_RELOC_ALPHA_TPREL64
-@deffnx {} BFD_RELOC_ALPHA_TPREL_HI16
-@deffnx {} BFD_RELOC_ALPHA_TPREL_LO16
-@deffnx {} BFD_RELOC_ALPHA_TPREL16
-Alpha thread-local storage relocations.
-@end deffn
-@deffn {} BFD_RELOC_MIPS_JMP
-Bits 27..2 of the relocation address shifted right 2 bits;
-simple reloc otherwise.
-@end deffn
-@deffn {} BFD_RELOC_MIPS16_JMP
-The MIPS16 jump instruction.
-@end deffn
-@deffn {} BFD_RELOC_MIPS16_GPREL
-MIPS16 GP relative reloc.
-@end deffn
-@deffn {} BFD_RELOC_HI16
-High 16 bits of 32-bit value; simple reloc.
-@end deffn
-@deffn {} BFD_RELOC_HI16_S
-High 16 bits of 32-bit value but the low 16 bits will be sign
-extended and added to form the final result. If the low 16
-bits form a negative number, we need to add one to the high value
-to compensate for the borrow when the low bits are added.
-@end deffn
-@deffn {} BFD_RELOC_LO16
-Low 16 bits.
-@end deffn
-@deffn {} BFD_RELOC_HI16_PCREL
-High 16 bits of 32-bit pc-relative value
-@end deffn
-@deffn {} BFD_RELOC_HI16_S_PCREL
-High 16 bits of 32-bit pc-relative value, adjusted
-@end deffn
-@deffn {} BFD_RELOC_LO16_PCREL
-Low 16 bits of pc-relative value
-@end deffn
-@deffn {} BFD_RELOC_MIPS16_HI16
-MIPS16 high 16 bits of 32-bit value.
-@end deffn
-@deffn {} BFD_RELOC_MIPS16_HI16_S
-MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign
-extended and added to form the final result. If the low 16
-bits form a negative number, we need to add one to the high value
-to compensate for the borrow when the low bits are added.
-@end deffn
-@deffn {} BFD_RELOC_MIPS16_LO16
-MIPS16 low 16 bits.
-@end deffn
-@deffn {} BFD_RELOC_MIPS_LITERAL
-Relocation against a MIPS literal section.
-@end deffn
-@deffn {} BFD_RELOC_MIPS_GOT16
-@deffnx {} BFD_RELOC_MIPS_CALL16
-@deffnx {} BFD_RELOC_MIPS_GOT_HI16
-@deffnx {} BFD_RELOC_MIPS_GOT_LO16
-@deffnx {} BFD_RELOC_MIPS_CALL_HI16
-@deffnx {} BFD_RELOC_MIPS_CALL_LO16
-@deffnx {} BFD_RELOC_MIPS_SUB
-@deffnx {} BFD_RELOC_MIPS_GOT_PAGE
-@deffnx {} BFD_RELOC_MIPS_GOT_OFST
-@deffnx {} BFD_RELOC_MIPS_GOT_DISP
-@deffnx {} BFD_RELOC_MIPS_SHIFT5
-@deffnx {} BFD_RELOC_MIPS_SHIFT6
-@deffnx {} BFD_RELOC_MIPS_INSERT_A
-@deffnx {} BFD_RELOC_MIPS_INSERT_B
-@deffnx {} BFD_RELOC_MIPS_DELETE
-@deffnx {} BFD_RELOC_MIPS_HIGHEST
-@deffnx {} BFD_RELOC_MIPS_HIGHER
-@deffnx {} BFD_RELOC_MIPS_SCN_DISP
-@deffnx {} BFD_RELOC_MIPS_REL16
-@deffnx {} BFD_RELOC_MIPS_RELGOT
-@deffnx {} BFD_RELOC_MIPS_JALR
-@deffnx {} BFD_RELOC_MIPS_TLS_DTPMOD32
-@deffnx {} BFD_RELOC_MIPS_TLS_DTPREL32
-@deffnx {} BFD_RELOC_MIPS_TLS_DTPMOD64
-@deffnx {} BFD_RELOC_MIPS_TLS_DTPREL64
-@deffnx {} BFD_RELOC_MIPS_TLS_GD
-@deffnx {} BFD_RELOC_MIPS_TLS_LDM
-@deffnx {} BFD_RELOC_MIPS_TLS_DTPREL_HI16
-@deffnx {} BFD_RELOC_MIPS_TLS_DTPREL_LO16
-@deffnx {} BFD_RELOC_MIPS_TLS_GOTTPREL
-@deffnx {} BFD_RELOC_MIPS_TLS_TPREL32
-@deffnx {} BFD_RELOC_MIPS_TLS_TPREL64
-@deffnx {} BFD_RELOC_MIPS_TLS_TPREL_HI16
-@deffnx {} BFD_RELOC_MIPS_TLS_TPREL_LO16
-MIPS ELF relocations.
-@end deffn
-@deffn {} BFD_RELOC_MIPS_COPY
-@deffnx {} BFD_RELOC_MIPS_JUMP_SLOT
-MIPS ELF relocations (VxWorks extensions).
-@end deffn
-@deffn {} BFD_RELOC_FRV_LABEL16
-@deffnx {} BFD_RELOC_FRV_LABEL24
-@deffnx {} BFD_RELOC_FRV_LO16
-@deffnx {} BFD_RELOC_FRV_HI16
-@deffnx {} BFD_RELOC_FRV_GPREL12
-@deffnx {} BFD_RELOC_FRV_GPRELU12
-@deffnx {} BFD_RELOC_FRV_GPREL32
-@deffnx {} BFD_RELOC_FRV_GPRELHI
-@deffnx {} BFD_RELOC_FRV_GPRELLO
-@deffnx {} BFD_RELOC_FRV_GOT12
-@deffnx {} BFD_RELOC_FRV_GOTHI
-@deffnx {} BFD_RELOC_FRV_GOTLO
-@deffnx {} BFD_RELOC_FRV_FUNCDESC
-@deffnx {} BFD_RELOC_FRV_FUNCDESC_GOT12
-@deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTHI
-@deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTLO
-@deffnx {} BFD_RELOC_FRV_FUNCDESC_VALUE
-@deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTOFF12
-@deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTOFFHI
-@deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTOFFLO
-@deffnx {} BFD_RELOC_FRV_GOTOFF12
-@deffnx {} BFD_RELOC_FRV_GOTOFFHI
-@deffnx {} BFD_RELOC_FRV_GOTOFFLO
-@deffnx {} BFD_RELOC_FRV_GETTLSOFF
-@deffnx {} BFD_RELOC_FRV_TLSDESC_VALUE
-@deffnx {} BFD_RELOC_FRV_GOTTLSDESC12
-@deffnx {} BFD_RELOC_FRV_GOTTLSDESCHI
-@deffnx {} BFD_RELOC_FRV_GOTTLSDESCLO
-@deffnx {} BFD_RELOC_FRV_TLSMOFF12
-@deffnx {} BFD_RELOC_FRV_TLSMOFFHI
-@deffnx {} BFD_RELOC_FRV_TLSMOFFLO
-@deffnx {} BFD_RELOC_FRV_GOTTLSOFF12
-@deffnx {} BFD_RELOC_FRV_GOTTLSOFFHI
-@deffnx {} BFD_RELOC_FRV_GOTTLSOFFLO
-@deffnx {} BFD_RELOC_FRV_TLSOFF
-@deffnx {} BFD_RELOC_FRV_TLSDESC_RELAX
-@deffnx {} BFD_RELOC_FRV_GETTLSOFF_RELAX
-@deffnx {} BFD_RELOC_FRV_TLSOFF_RELAX
-@deffnx {} BFD_RELOC_FRV_TLSMOFF
-Fujitsu Frv Relocations.
-@end deffn
-@deffn {} BFD_RELOC_MN10300_GOTOFF24
-This is a 24bit GOT-relative reloc for the mn10300.
-@end deffn
-@deffn {} BFD_RELOC_MN10300_GOT32
-This is a 32bit GOT-relative reloc for the mn10300, offset by two bytes
-in the instruction.
-@end deffn
-@deffn {} BFD_RELOC_MN10300_GOT24
-This is a 24bit GOT-relative reloc for the mn10300, offset by two bytes
-in the instruction.
-@end deffn
-@deffn {} BFD_RELOC_MN10300_GOT16
-This is a 16bit GOT-relative reloc for the mn10300, offset by two bytes
-in the instruction.
-@end deffn
-@deffn {} BFD_RELOC_MN10300_COPY
-Copy symbol at runtime.
-@end deffn
-@deffn {} BFD_RELOC_MN10300_GLOB_DAT
-Create GOT entry.
-@end deffn
-@deffn {} BFD_RELOC_MN10300_JMP_SLOT
-Create PLT entry.
-@end deffn
-@deffn {} BFD_RELOC_MN10300_RELATIVE
-Adjust by program base.
-@end deffn
-@deffn {} BFD_RELOC_386_GOT32
-@deffnx {} BFD_RELOC_386_PLT32
-@deffnx {} BFD_RELOC_386_COPY
-@deffnx {} BFD_RELOC_386_GLOB_DAT
-@deffnx {} BFD_RELOC_386_JUMP_SLOT
-@deffnx {} BFD_RELOC_386_RELATIVE
-@deffnx {} BFD_RELOC_386_GOTOFF
-@deffnx {} BFD_RELOC_386_GOTPC
-@deffnx {} BFD_RELOC_386_TLS_TPOFF
-@deffnx {} BFD_RELOC_386_TLS_IE
-@deffnx {} BFD_RELOC_386_TLS_GOTIE
-@deffnx {} BFD_RELOC_386_TLS_LE
-@deffnx {} BFD_RELOC_386_TLS_GD
-@deffnx {} BFD_RELOC_386_TLS_LDM
-@deffnx {} BFD_RELOC_386_TLS_LDO_32
-@deffnx {} BFD_RELOC_386_TLS_IE_32
-@deffnx {} BFD_RELOC_386_TLS_LE_32
-@deffnx {} BFD_RELOC_386_TLS_DTPMOD32
-@deffnx {} BFD_RELOC_386_TLS_DTPOFF32
-@deffnx {} BFD_RELOC_386_TLS_TPOFF32
-@deffnx {} BFD_RELOC_386_TLS_GOTDESC
-@deffnx {} BFD_RELOC_386_TLS_DESC_CALL
-@deffnx {} BFD_RELOC_386_TLS_DESC
-i386/elf relocations
-@end deffn
-@deffn {} BFD_RELOC_X86_64_GOT32
-@deffnx {} BFD_RELOC_X86_64_PLT32
-@deffnx {} BFD_RELOC_X86_64_COPY
-@deffnx {} BFD_RELOC_X86_64_GLOB_DAT
-@deffnx {} BFD_RELOC_X86_64_JUMP_SLOT
-@deffnx {} BFD_RELOC_X86_64_RELATIVE
-@deffnx {} BFD_RELOC_X86_64_GOTPCREL
-@deffnx {} BFD_RELOC_X86_64_32S
-@deffnx {} BFD_RELOC_X86_64_DTPMOD64
-@deffnx {} BFD_RELOC_X86_64_DTPOFF64
-@deffnx {} BFD_RELOC_X86_64_TPOFF64
-@deffnx {} BFD_RELOC_X86_64_TLSGD
-@deffnx {} BFD_RELOC_X86_64_TLSLD
-@deffnx {} BFD_RELOC_X86_64_DTPOFF32
-@deffnx {} BFD_RELOC_X86_64_GOTTPOFF
-@deffnx {} BFD_RELOC_X86_64_TPOFF32
-@deffnx {} BFD_RELOC_X86_64_GOTOFF64
-@deffnx {} BFD_RELOC_X86_64_GOTPC32
-@deffnx {} BFD_RELOC_X86_64_GOT64
-@deffnx {} BFD_RELOC_X86_64_GOTPCREL64
-@deffnx {} BFD_RELOC_X86_64_GOTPC64
-@deffnx {} BFD_RELOC_X86_64_GOTPLT64
-@deffnx {} BFD_RELOC_X86_64_PLTOFF64
-@deffnx {} BFD_RELOC_X86_64_GOTPC32_TLSDESC
-@deffnx {} BFD_RELOC_X86_64_TLSDESC_CALL
-@deffnx {} BFD_RELOC_X86_64_TLSDESC
-x86-64/elf relocations
-@end deffn
-@deffn {} BFD_RELOC_NS32K_IMM_8
-@deffnx {} BFD_RELOC_NS32K_IMM_16
-@deffnx {} BFD_RELOC_NS32K_IMM_32
-@deffnx {} BFD_RELOC_NS32K_IMM_8_PCREL
-@deffnx {} BFD_RELOC_NS32K_IMM_16_PCREL
-@deffnx {} BFD_RELOC_NS32K_IMM_32_PCREL
-@deffnx {} BFD_RELOC_NS32K_DISP_8
-@deffnx {} BFD_RELOC_NS32K_DISP_16
-@deffnx {} BFD_RELOC_NS32K_DISP_32
-@deffnx {} BFD_RELOC_NS32K_DISP_8_PCREL
-@deffnx {} BFD_RELOC_NS32K_DISP_16_PCREL
-@deffnx {} BFD_RELOC_NS32K_DISP_32_PCREL
-ns32k relocations
-@end deffn
-@deffn {} BFD_RELOC_PDP11_DISP_8_PCREL
-@deffnx {} BFD_RELOC_PDP11_DISP_6_PCREL
-PDP11 relocations
-@end deffn
-@deffn {} BFD_RELOC_PJ_CODE_HI16
-@deffnx {} BFD_RELOC_PJ_CODE_LO16
-@deffnx {} BFD_RELOC_PJ_CODE_DIR16
-@deffnx {} BFD_RELOC_PJ_CODE_DIR32
-@deffnx {} BFD_RELOC_PJ_CODE_REL16
-@deffnx {} BFD_RELOC_PJ_CODE_REL32
-Picojava relocs. Not all of these appear in object files.
-@end deffn
-@deffn {} BFD_RELOC_PPC_B26
-@deffnx {} BFD_RELOC_PPC_BA26
-@deffnx {} BFD_RELOC_PPC_TOC16
-@deffnx {} BFD_RELOC_PPC_B16
-@deffnx {} BFD_RELOC_PPC_B16_BRTAKEN
-@deffnx {} BFD_RELOC_PPC_B16_BRNTAKEN
-@deffnx {} BFD_RELOC_PPC_BA16
-@deffnx {} BFD_RELOC_PPC_BA16_BRTAKEN
-@deffnx {} BFD_RELOC_PPC_BA16_BRNTAKEN
-@deffnx {} BFD_RELOC_PPC_COPY
-@deffnx {} BFD_RELOC_PPC_GLOB_DAT
-@deffnx {} BFD_RELOC_PPC_JMP_SLOT
-@deffnx {} BFD_RELOC_PPC_RELATIVE
-@deffnx {} BFD_RELOC_PPC_LOCAL24PC
-@deffnx {} BFD_RELOC_PPC_EMB_NADDR32
-@deffnx {} BFD_RELOC_PPC_EMB_NADDR16
-@deffnx {} BFD_RELOC_PPC_EMB_NADDR16_LO
-@deffnx {} BFD_RELOC_PPC_EMB_NADDR16_HI
-@deffnx {} BFD_RELOC_PPC_EMB_NADDR16_HA
-@deffnx {} BFD_RELOC_PPC_EMB_SDAI16
-@deffnx {} BFD_RELOC_PPC_EMB_SDA2I16
-@deffnx {} BFD_RELOC_PPC_EMB_SDA2REL
-@deffnx {} BFD_RELOC_PPC_EMB_SDA21
-@deffnx {} BFD_RELOC_PPC_EMB_MRKREF
-@deffnx {} BFD_RELOC_PPC_EMB_RELSEC16
-@deffnx {} BFD_RELOC_PPC_EMB_RELST_LO
-@deffnx {} BFD_RELOC_PPC_EMB_RELST_HI
-@deffnx {} BFD_RELOC_PPC_EMB_RELST_HA
-@deffnx {} BFD_RELOC_PPC_EMB_BIT_FLD
-@deffnx {} BFD_RELOC_PPC_EMB_RELSDA
-@deffnx {} BFD_RELOC_PPC64_HIGHER
-@deffnx {} BFD_RELOC_PPC64_HIGHER_S
-@deffnx {} BFD_RELOC_PPC64_HIGHEST
-@deffnx {} BFD_RELOC_PPC64_HIGHEST_S
-@deffnx {} BFD_RELOC_PPC64_TOC16_LO
-@deffnx {} BFD_RELOC_PPC64_TOC16_HI
-@deffnx {} BFD_RELOC_PPC64_TOC16_HA
-@deffnx {} BFD_RELOC_PPC64_TOC
-@deffnx {} BFD_RELOC_PPC64_PLTGOT16
-@deffnx {} BFD_RELOC_PPC64_PLTGOT16_LO
-@deffnx {} BFD_RELOC_PPC64_PLTGOT16_HI
-@deffnx {} BFD_RELOC_PPC64_PLTGOT16_HA
-@deffnx {} BFD_RELOC_PPC64_ADDR16_DS
-@deffnx {} BFD_RELOC_PPC64_ADDR16_LO_DS
-@deffnx {} BFD_RELOC_PPC64_GOT16_DS
-@deffnx {} BFD_RELOC_PPC64_GOT16_LO_DS
-@deffnx {} BFD_RELOC_PPC64_PLT16_LO_DS
-@deffnx {} BFD_RELOC_PPC64_SECTOFF_DS
-@deffnx {} BFD_RELOC_PPC64_SECTOFF_LO_DS
-@deffnx {} BFD_RELOC_PPC64_TOC16_DS
-@deffnx {} BFD_RELOC_PPC64_TOC16_LO_DS
-@deffnx {} BFD_RELOC_PPC64_PLTGOT16_DS
-@deffnx {} BFD_RELOC_PPC64_PLTGOT16_LO_DS
-Power(rs6000) and PowerPC relocations.
-@end deffn
-@deffn {} BFD_RELOC_PPC_TLS
-@deffnx {} BFD_RELOC_PPC_DTPMOD
-@deffnx {} BFD_RELOC_PPC_TPREL16
-@deffnx {} BFD_RELOC_PPC_TPREL16_LO
-@deffnx {} BFD_RELOC_PPC_TPREL16_HI
-@deffnx {} BFD_RELOC_PPC_TPREL16_HA
-@deffnx {} BFD_RELOC_PPC_TPREL
-@deffnx {} BFD_RELOC_PPC_DTPREL16
-@deffnx {} BFD_RELOC_PPC_DTPREL16_LO
-@deffnx {} BFD_RELOC_PPC_DTPREL16_HI
-@deffnx {} BFD_RELOC_PPC_DTPREL16_HA
-@deffnx {} BFD_RELOC_PPC_DTPREL
-@deffnx {} BFD_RELOC_PPC_GOT_TLSGD16
-@deffnx {} BFD_RELOC_PPC_GOT_TLSGD16_LO
-@deffnx {} BFD_RELOC_PPC_GOT_TLSGD16_HI
-@deffnx {} BFD_RELOC_PPC_GOT_TLSGD16_HA
-@deffnx {} BFD_RELOC_PPC_GOT_TLSLD16
-@deffnx {} BFD_RELOC_PPC_GOT_TLSLD16_LO
-@deffnx {} BFD_RELOC_PPC_GOT_TLSLD16_HI
-@deffnx {} BFD_RELOC_PPC_GOT_TLSLD16_HA
-@deffnx {} BFD_RELOC_PPC_GOT_TPREL16
-@deffnx {} BFD_RELOC_PPC_GOT_TPREL16_LO
-@deffnx {} BFD_RELOC_PPC_GOT_TPREL16_HI
-@deffnx {} BFD_RELOC_PPC_GOT_TPREL16_HA
-@deffnx {} BFD_RELOC_PPC_GOT_DTPREL16
-@deffnx {} BFD_RELOC_PPC_GOT_DTPREL16_LO
-@deffnx {} BFD_RELOC_PPC_GOT_DTPREL16_HI
-@deffnx {} BFD_RELOC_PPC_GOT_DTPREL16_HA
-@deffnx {} BFD_RELOC_PPC64_TPREL16_DS
-@deffnx {} BFD_RELOC_PPC64_TPREL16_LO_DS
-@deffnx {} BFD_RELOC_PPC64_TPREL16_HIGHER
-@deffnx {} BFD_RELOC_PPC64_TPREL16_HIGHERA
-@deffnx {} BFD_RELOC_PPC64_TPREL16_HIGHEST
-@deffnx {} BFD_RELOC_PPC64_TPREL16_HIGHESTA
-@deffnx {} BFD_RELOC_PPC64_DTPREL16_DS
-@deffnx {} BFD_RELOC_PPC64_DTPREL16_LO_DS
-@deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHER
-@deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHERA
-@deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHEST
-@deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHESTA
-PowerPC and PowerPC64 thread-local storage relocations.
-@end deffn
-@deffn {} BFD_RELOC_I370_D12
-IBM 370/390 relocations
-@end deffn
-@deffn {} BFD_RELOC_CTOR
-The type of reloc used to build a constructor table - at the moment
-probably a 32 bit wide absolute relocation, but the target can choose.
-It generally does map to one of the other relocation types.
-@end deffn
-@deffn {} BFD_RELOC_ARM_PCREL_BRANCH
-ARM 26 bit pc-relative branch. The lowest two bits must be zero and are
-not stored in the instruction.
-@end deffn
-@deffn {} BFD_RELOC_ARM_PCREL_BLX
-ARM 26 bit pc-relative branch. The lowest bit must be zero and is
-not stored in the instruction. The 2nd lowest bit comes from a 1 bit
-field in the instruction.
-@end deffn
-@deffn {} BFD_RELOC_THUMB_PCREL_BLX
-Thumb 22 bit pc-relative branch. The lowest bit must be zero and is
-not stored in the instruction. The 2nd lowest bit comes from a 1 bit
-field in the instruction.
-@end deffn
-@deffn {} BFD_RELOC_ARM_PCREL_CALL
-ARM 26-bit pc-relative branch for an unconditional BL or BLX instruction.
-@end deffn
-@deffn {} BFD_RELOC_ARM_PCREL_JUMP
-ARM 26-bit pc-relative branch for B or conditional BL instruction.
-@end deffn
-@deffn {} BFD_RELOC_THUMB_PCREL_BRANCH7
-@deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH9
-@deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH12
-@deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH20
-@deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH23
-@deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH25
-Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches.
-The lowest bit must be zero and is not stored in the instruction.
-Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an
-"nn" one smaller in all cases. Note further that BRANCH23
-corresponds to R_ARM_THM_CALL.
-@end deffn
-@deffn {} BFD_RELOC_ARM_OFFSET_IMM
-12-bit immediate offset, used in ARM-format ldr and str instructions.
-@end deffn
-@deffn {} BFD_RELOC_ARM_THUMB_OFFSET
-5-bit immediate offset, used in Thumb-format ldr and str instructions.
-@end deffn
-@deffn {} BFD_RELOC_ARM_TARGET1
-Pc-relative or absolute relocation depending on target. Used for
-entries in .init_array sections.
-@end deffn
-@deffn {} BFD_RELOC_ARM_ROSEGREL32
-Read-only segment base relative address.
-@end deffn
-@deffn {} BFD_RELOC_ARM_SBREL32
-Data segment base relative address.
-@end deffn
-@deffn {} BFD_RELOC_ARM_TARGET2
-This reloc is used for references to RTTI data from exception handling
-tables. The actual definition depends on the target. It may be a
-pc-relative or some form of GOT-indirect relocation.
-@end deffn
-@deffn {} BFD_RELOC_ARM_PREL31
-31-bit PC relative address.
-@end deffn
-@deffn {} BFD_RELOC_ARM_JUMP_SLOT
-@deffnx {} BFD_RELOC_ARM_GLOB_DAT
-@deffnx {} BFD_RELOC_ARM_GOT32
-@deffnx {} BFD_RELOC_ARM_PLT32
-@deffnx {} BFD_RELOC_ARM_RELATIVE
-@deffnx {} BFD_RELOC_ARM_GOTOFF
-@deffnx {} BFD_RELOC_ARM_GOTPC
-Relocations for setting up GOTs and PLTs for shared libraries.
-@end deffn
-@deffn {} BFD_RELOC_ARM_TLS_GD32
-@deffnx {} BFD_RELOC_ARM_TLS_LDO32
-@deffnx {} BFD_RELOC_ARM_TLS_LDM32
-@deffnx {} BFD_RELOC_ARM_TLS_DTPOFF32
-@deffnx {} BFD_RELOC_ARM_TLS_DTPMOD32
-@deffnx {} BFD_RELOC_ARM_TLS_TPOFF32
-@deffnx {} BFD_RELOC_ARM_TLS_IE32
-@deffnx {} BFD_RELOC_ARM_TLS_LE32
-ARM thread-local storage relocations.
-@end deffn
-@deffn {} BFD_RELOC_ARM_IMMEDIATE
-@deffnx {} BFD_RELOC_ARM_ADRL_IMMEDIATE
-@deffnx {} BFD_RELOC_ARM_T32_IMMEDIATE
-@deffnx {} BFD_RELOC_ARM_T32_IMM12
-@deffnx {} BFD_RELOC_ARM_T32_ADD_PC12
-@deffnx {} BFD_RELOC_ARM_SHIFT_IMM
-@deffnx {} BFD_RELOC_ARM_SMC
-@deffnx {} BFD_RELOC_ARM_SWI
-@deffnx {} BFD_RELOC_ARM_MULTI
-@deffnx {} BFD_RELOC_ARM_CP_OFF_IMM
-@deffnx {} BFD_RELOC_ARM_CP_OFF_IMM_S2
-@deffnx {} BFD_RELOC_ARM_T32_CP_OFF_IMM
-@deffnx {} BFD_RELOC_ARM_T32_CP_OFF_IMM_S2
-@deffnx {} BFD_RELOC_ARM_ADR_IMM
-@deffnx {} BFD_RELOC_ARM_LDR_IMM
-@deffnx {} BFD_RELOC_ARM_LITERAL
-@deffnx {} BFD_RELOC_ARM_IN_POOL
-@deffnx {} BFD_RELOC_ARM_OFFSET_IMM8
-@deffnx {} BFD_RELOC_ARM_T32_OFFSET_U8
-@deffnx {} BFD_RELOC_ARM_T32_OFFSET_IMM
-@deffnx {} BFD_RELOC_ARM_HWLITERAL
-@deffnx {} BFD_RELOC_ARM_THUMB_ADD
-@deffnx {} BFD_RELOC_ARM_THUMB_IMM
-@deffnx {} BFD_RELOC_ARM_THUMB_SHIFT
-These relocs are only used within the ARM assembler. They are not
-(at present) written to any object files.
-@end deffn
-@deffn {} BFD_RELOC_SH_PCDISP8BY2
-@deffnx {} BFD_RELOC_SH_PCDISP12BY2
-@deffnx {} BFD_RELOC_SH_IMM3
-@deffnx {} BFD_RELOC_SH_IMM3U
-@deffnx {} BFD_RELOC_SH_DISP12
-@deffnx {} BFD_RELOC_SH_DISP12BY2
-@deffnx {} BFD_RELOC_SH_DISP12BY4
-@deffnx {} BFD_RELOC_SH_DISP12BY8
-@deffnx {} BFD_RELOC_SH_DISP20
-@deffnx {} BFD_RELOC_SH_DISP20BY8
-@deffnx {} BFD_RELOC_SH_IMM4
-@deffnx {} BFD_RELOC_SH_IMM4BY2
-@deffnx {} BFD_RELOC_SH_IMM4BY4
-@deffnx {} BFD_RELOC_SH_IMM8
-@deffnx {} BFD_RELOC_SH_IMM8BY2
-@deffnx {} BFD_RELOC_SH_IMM8BY4
-@deffnx {} BFD_RELOC_SH_PCRELIMM8BY2
-@deffnx {} BFD_RELOC_SH_PCRELIMM8BY4
-@deffnx {} BFD_RELOC_SH_SWITCH16
-@deffnx {} BFD_RELOC_SH_SWITCH32
-@deffnx {} BFD_RELOC_SH_USES
-@deffnx {} BFD_RELOC_SH_COUNT
-@deffnx {} BFD_RELOC_SH_ALIGN
-@deffnx {} BFD_RELOC_SH_CODE
-@deffnx {} BFD_RELOC_SH_DATA
-@deffnx {} BFD_RELOC_SH_LABEL
-@deffnx {} BFD_RELOC_SH_LOOP_START
-@deffnx {} BFD_RELOC_SH_LOOP_END
-@deffnx {} BFD_RELOC_SH_COPY
-@deffnx {} BFD_RELOC_SH_GLOB_DAT
-@deffnx {} BFD_RELOC_SH_JMP_SLOT
-@deffnx {} BFD_RELOC_SH_RELATIVE
-@deffnx {} BFD_RELOC_SH_GOTPC
-@deffnx {} BFD_RELOC_SH_GOT_LOW16
-@deffnx {} BFD_RELOC_SH_GOT_MEDLOW16
-@deffnx {} BFD_RELOC_SH_GOT_MEDHI16
-@deffnx {} BFD_RELOC_SH_GOT_HI16
-@deffnx {} BFD_RELOC_SH_GOTPLT_LOW16
-@deffnx {} BFD_RELOC_SH_GOTPLT_MEDLOW16
-@deffnx {} BFD_RELOC_SH_GOTPLT_MEDHI16
-@deffnx {} BFD_RELOC_SH_GOTPLT_HI16
-@deffnx {} BFD_RELOC_SH_PLT_LOW16
-@deffnx {} BFD_RELOC_SH_PLT_MEDLOW16
-@deffnx {} BFD_RELOC_SH_PLT_MEDHI16
-@deffnx {} BFD_RELOC_SH_PLT_HI16
-@deffnx {} BFD_RELOC_SH_GOTOFF_LOW16
-@deffnx {} BFD_RELOC_SH_GOTOFF_MEDLOW16
-@deffnx {} BFD_RELOC_SH_GOTOFF_MEDHI16
-@deffnx {} BFD_RELOC_SH_GOTOFF_HI16
-@deffnx {} BFD_RELOC_SH_GOTPC_LOW16
-@deffnx {} BFD_RELOC_SH_GOTPC_MEDLOW16
-@deffnx {} BFD_RELOC_SH_GOTPC_MEDHI16
-@deffnx {} BFD_RELOC_SH_GOTPC_HI16
-@deffnx {} BFD_RELOC_SH_COPY64
-@deffnx {} BFD_RELOC_SH_GLOB_DAT64
-@deffnx {} BFD_RELOC_SH_JMP_SLOT64
-@deffnx {} BFD_RELOC_SH_RELATIVE64
-@deffnx {} BFD_RELOC_SH_GOT10BY4
-@deffnx {} BFD_RELOC_SH_GOT10BY8
-@deffnx {} BFD_RELOC_SH_GOTPLT10BY4
-@deffnx {} BFD_RELOC_SH_GOTPLT10BY8
-@deffnx {} BFD_RELOC_SH_GOTPLT32
-@deffnx {} BFD_RELOC_SH_SHMEDIA_CODE
-@deffnx {} BFD_RELOC_SH_IMMU5
-@deffnx {} BFD_RELOC_SH_IMMS6
-@deffnx {} BFD_RELOC_SH_IMMS6BY32
-@deffnx {} BFD_RELOC_SH_IMMU6
-@deffnx {} BFD_RELOC_SH_IMMS10
-@deffnx {} BFD_RELOC_SH_IMMS10BY2
-@deffnx {} BFD_RELOC_SH_IMMS10BY4
-@deffnx {} BFD_RELOC_SH_IMMS10BY8
-@deffnx {} BFD_RELOC_SH_IMMS16
-@deffnx {} BFD_RELOC_SH_IMMU16
-@deffnx {} BFD_RELOC_SH_IMM_LOW16
-@deffnx {} BFD_RELOC_SH_IMM_LOW16_PCREL
-@deffnx {} BFD_RELOC_SH_IMM_MEDLOW16
-@deffnx {} BFD_RELOC_SH_IMM_MEDLOW16_PCREL
-@deffnx {} BFD_RELOC_SH_IMM_MEDHI16
-@deffnx {} BFD_RELOC_SH_IMM_MEDHI16_PCREL
-@deffnx {} BFD_RELOC_SH_IMM_HI16
-@deffnx {} BFD_RELOC_SH_IMM_HI16_PCREL
-@deffnx {} BFD_RELOC_SH_PT_16
-@deffnx {} BFD_RELOC_SH_TLS_GD_32
-@deffnx {} BFD_RELOC_SH_TLS_LD_32
-@deffnx {} BFD_RELOC_SH_TLS_LDO_32
-@deffnx {} BFD_RELOC_SH_TLS_IE_32
-@deffnx {} BFD_RELOC_SH_TLS_LE_32
-@deffnx {} BFD_RELOC_SH_TLS_DTPMOD32
-@deffnx {} BFD_RELOC_SH_TLS_DTPOFF32
-@deffnx {} BFD_RELOC_SH_TLS_TPOFF32
-Renesas / SuperH SH relocs. Not all of these appear in object files.
-@end deffn
-@deffn {} BFD_RELOC_ARC_B22_PCREL
-ARC Cores relocs.
-ARC 22 bit pc-relative branch. The lowest two bits must be zero and are
-not stored in the instruction. The high 20 bits are installed in bits 26
-through 7 of the instruction.
-@end deffn
-@deffn {} BFD_RELOC_ARC_B26
-ARC 26 bit absolute branch. The lowest two bits must be zero and are not
-stored in the instruction. The high 24 bits are installed in bits 23
-through 0.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_16_IMM
-ADI Blackfin 16 bit immediate absolute reloc.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_16_HIGH
-ADI Blackfin 16 bit immediate absolute reloc higher 16 bits.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_4_PCREL
-ADI Blackfin 'a' part of LSETUP.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_5_PCREL
-ADI Blackfin.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_16_LOW
-ADI Blackfin 16 bit immediate absolute reloc lower 16 bits.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_10_PCREL
-ADI Blackfin.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_11_PCREL
-ADI Blackfin 'b' part of LSETUP.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_12_PCREL_JUMP
-ADI Blackfin.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_12_PCREL_JUMP_S
-ADI Blackfin Short jump, pcrel.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_24_PCREL_CALL_X
-ADI Blackfin Call.x not implemented.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_24_PCREL_JUMP_L
-ADI Blackfin Long Jump pcrel.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_GOT17M4
-@deffnx {} BFD_RELOC_BFIN_GOTHI
-@deffnx {} BFD_RELOC_BFIN_GOTLO
-@deffnx {} BFD_RELOC_BFIN_FUNCDESC
-@deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOT17M4
-@deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTHI
-@deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTLO
-@deffnx {} BFD_RELOC_BFIN_FUNCDESC_VALUE
-@deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4
-@deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI
-@deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO
-@deffnx {} BFD_RELOC_BFIN_GOTOFF17M4
-@deffnx {} BFD_RELOC_BFIN_GOTOFFHI
-@deffnx {} BFD_RELOC_BFIN_GOTOFFLO
-ADI Blackfin FD-PIC relocations.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_GOT
-ADI Blackfin GOT relocation.
-@end deffn
-@deffn {} BFD_RELOC_BFIN_PLTPC
-ADI Blackfin PLTPC relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_PUSH
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_CONST
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_ADD
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_SUB
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_MULT
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_DIV
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_MOD
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_LSHIFT
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_RSHIFT
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_AND
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_OR
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_XOR
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_LAND
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_LOR
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_LEN
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_NEG
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_COMP
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_PAGE
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_HWPAGE
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_ARELOC_BFIN_ADDR
-ADI Blackfin arithmetic relocation.
-@end deffn
-@deffn {} BFD_RELOC_D10V_10_PCREL_R
-Mitsubishi D10V relocs.
-This is a 10-bit reloc with the right 2 bits
-assumed to be 0.
-@end deffn
-@deffn {} BFD_RELOC_D10V_10_PCREL_L
-Mitsubishi D10V relocs.
-This is a 10-bit reloc with the right 2 bits
-assumed to be 0. This is the same as the previous reloc
-except it is in the left container, i.e.,
-shifted left 15 bits.
-@end deffn
-@deffn {} BFD_RELOC_D10V_18
-This is an 18-bit reloc with the right 2 bits
-assumed to be 0.
-@end deffn
-@deffn {} BFD_RELOC_D10V_18_PCREL
-This is an 18-bit reloc with the right 2 bits
-assumed to be 0.
-@end deffn
-@deffn {} BFD_RELOC_D30V_6
-Mitsubishi D30V relocs.
-This is a 6-bit absolute reloc.
-@end deffn
-@deffn {} BFD_RELOC_D30V_9_PCREL
-This is a 6-bit pc-relative reloc with
-the right 3 bits assumed to be 0.
-@end deffn
-@deffn {} BFD_RELOC_D30V_9_PCREL_R
-This is a 6-bit pc-relative reloc with
-the right 3 bits assumed to be 0. Same
-as the previous reloc but on the right side
-of the container.
-@end deffn
-@deffn {} BFD_RELOC_D30V_15
-This is a 12-bit absolute reloc with the
-right 3 bitsassumed to be 0.
-@end deffn
-@deffn {} BFD_RELOC_D30V_15_PCREL
-This is a 12-bit pc-relative reloc with
-the right 3 bits assumed to be 0.
-@end deffn
-@deffn {} BFD_RELOC_D30V_15_PCREL_R
-This is a 12-bit pc-relative reloc with
-the right 3 bits assumed to be 0. Same
-as the previous reloc but on the right side
-of the container.
-@end deffn
-@deffn {} BFD_RELOC_D30V_21
-This is an 18-bit absolute reloc with
-the right 3 bits assumed to be 0.
-@end deffn
-@deffn {} BFD_RELOC_D30V_21_PCREL
-This is an 18-bit pc-relative reloc with
-the right 3 bits assumed to be 0.
-@end deffn
-@deffn {} BFD_RELOC_D30V_21_PCREL_R
-This is an 18-bit pc-relative reloc with
-the right 3 bits assumed to be 0. Same
-as the previous reloc but on the right side
-of the container.
-@end deffn
-@deffn {} BFD_RELOC_D30V_32
-This is a 32-bit absolute reloc.
-@end deffn
-@deffn {} BFD_RELOC_D30V_32_PCREL
-This is a 32-bit pc-relative reloc.
-@end deffn
-@deffn {} BFD_RELOC_DLX_HI16_S
-DLX relocs
-@end deffn
-@deffn {} BFD_RELOC_DLX_LO16
-DLX relocs
-@end deffn
-@deffn {} BFD_RELOC_DLX_JMP26
-DLX relocs
-@end deffn
-@deffn {} BFD_RELOC_M32C_HI8
-@deffnx {} BFD_RELOC_M32C_RL_JUMP
-@deffnx {} BFD_RELOC_M32C_RL_1ADDR
-@deffnx {} BFD_RELOC_M32C_RL_2ADDR
-Renesas M16C/M32C Relocations.
-@end deffn
-@deffn {} BFD_RELOC_M32R_24
-Renesas M32R (formerly Mitsubishi M32R) relocs.
-This is a 24 bit absolute address.
-@end deffn
-@deffn {} BFD_RELOC_M32R_10_PCREL
-This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0.
-@end deffn
-@deffn {} BFD_RELOC_M32R_18_PCREL
-This is an 18-bit reloc with the right 2 bits assumed to be 0.
-@end deffn
-@deffn {} BFD_RELOC_M32R_26_PCREL
-This is a 26-bit reloc with the right 2 bits assumed to be 0.
-@end deffn
-@deffn {} BFD_RELOC_M32R_HI16_ULO
-This is a 16-bit reloc containing the high 16 bits of an address
-used when the lower 16 bits are treated as unsigned.
-@end deffn
-@deffn {} BFD_RELOC_M32R_HI16_SLO
-This is a 16-bit reloc containing the high 16 bits of an address
-used when the lower 16 bits are treated as signed.
-@end deffn
-@deffn {} BFD_RELOC_M32R_LO16
-This is a 16-bit reloc containing the lower 16 bits of an address.
-@end deffn
-@deffn {} BFD_RELOC_M32R_SDA16
-This is a 16-bit reloc containing the small data area offset for use in
-add3, load, and store instructions.
-@end deffn
-@deffn {} BFD_RELOC_M32R_GOT24
-@deffnx {} BFD_RELOC_M32R_26_PLTREL
-@deffnx {} BFD_RELOC_M32R_COPY
-@deffnx {} BFD_RELOC_M32R_GLOB_DAT
-@deffnx {} BFD_RELOC_M32R_JMP_SLOT
-@deffnx {} BFD_RELOC_M32R_RELATIVE
-@deffnx {} BFD_RELOC_M32R_GOTOFF
-@deffnx {} BFD_RELOC_M32R_GOTOFF_HI_ULO
-@deffnx {} BFD_RELOC_M32R_GOTOFF_HI_SLO
-@deffnx {} BFD_RELOC_M32R_GOTOFF_LO
-@deffnx {} BFD_RELOC_M32R_GOTPC24
-@deffnx {} BFD_RELOC_M32R_GOT16_HI_ULO
-@deffnx {} BFD_RELOC_M32R_GOT16_HI_SLO
-@deffnx {} BFD_RELOC_M32R_GOT16_LO
-@deffnx {} BFD_RELOC_M32R_GOTPC_HI_ULO
-@deffnx {} BFD_RELOC_M32R_GOTPC_HI_SLO
-@deffnx {} BFD_RELOC_M32R_GOTPC_LO
-For PIC.
-@end deffn
-@deffn {} BFD_RELOC_V850_9_PCREL
-This is a 9-bit reloc
-@end deffn
-@deffn {} BFD_RELOC_V850_22_PCREL
-This is a 22-bit reloc
-@end deffn
-@deffn {} BFD_RELOC_V850_SDA_16_16_OFFSET
-This is a 16 bit offset from the short data area pointer.
-@end deffn
-@deffn {} BFD_RELOC_V850_SDA_15_16_OFFSET
-This is a 16 bit offset (of which only 15 bits are used) from the
-short data area pointer.
-@end deffn
-@deffn {} BFD_RELOC_V850_ZDA_16_16_OFFSET
-This is a 16 bit offset from the zero data area pointer.
-@end deffn
-@deffn {} BFD_RELOC_V850_ZDA_15_16_OFFSET
-This is a 16 bit offset (of which only 15 bits are used) from the
-zero data area pointer.
-@end deffn
-@deffn {} BFD_RELOC_V850_TDA_6_8_OFFSET
-This is an 8 bit offset (of which only 6 bits are used) from the
-tiny data area pointer.
-@end deffn
-@deffn {} BFD_RELOC_V850_TDA_7_8_OFFSET
-This is an 8bit offset (of which only 7 bits are used) from the tiny
-data area pointer.
-@end deffn
-@deffn {} BFD_RELOC_V850_TDA_7_7_OFFSET
-This is a 7 bit offset from the tiny data area pointer.
-@end deffn
-@deffn {} BFD_RELOC_V850_TDA_16_16_OFFSET
-This is a 16 bit offset from the tiny data area pointer.
-@end deffn
-@deffn {} BFD_RELOC_V850_TDA_4_5_OFFSET
-This is a 5 bit offset (of which only 4 bits are used) from the tiny
-data area pointer.
-@end deffn
-@deffn {} BFD_RELOC_V850_TDA_4_4_OFFSET
-This is a 4 bit offset from the tiny data area pointer.
-@end deffn
-@deffn {} BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET
-This is a 16 bit offset from the short data area pointer, with the
-bits placed non-contiguously in the instruction.
-@end deffn
-@deffn {} BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET
-This is a 16 bit offset from the zero data area pointer, with the
-bits placed non-contiguously in the instruction.
-@end deffn
-@deffn {} BFD_RELOC_V850_CALLT_6_7_OFFSET
-This is a 6 bit offset from the call table base pointer.
-@end deffn
-@deffn {} BFD_RELOC_V850_CALLT_16_16_OFFSET
-This is a 16 bit offset from the call table base pointer.
-@end deffn
-@deffn {} BFD_RELOC_V850_LONGCALL
-Used for relaxing indirect function calls.
-@end deffn
-@deffn {} BFD_RELOC_V850_LONGJUMP
-Used for relaxing indirect jumps.
-@end deffn
-@deffn {} BFD_RELOC_V850_ALIGN
-Used to maintain alignment whilst relaxing.
-@end deffn
-@deffn {} BFD_RELOC_V850_LO16_SPLIT_OFFSET
-This is a variation of BFD_RELOC_LO16 that can be used in v850e ld.bu
-instructions.
-@end deffn
-@deffn {} BFD_RELOC_MN10300_32_PCREL
-This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
-instruction.
-@end deffn
-@deffn {} BFD_RELOC_MN10300_16_PCREL
-This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
-instruction.
-@end deffn
-@deffn {} BFD_RELOC_TIC30_LDP
-This is a 8bit DP reloc for the tms320c30, where the most
-significant 8 bits of a 24 bit word are placed into the least
-significant 8 bits of the opcode.
-@end deffn
-@deffn {} BFD_RELOC_TIC54X_PARTLS7
-This is a 7bit reloc for the tms320c54x, where the least
-significant 7 bits of a 16 bit word are placed into the least
-significant 7 bits of the opcode.
-@end deffn
-@deffn {} BFD_RELOC_TIC54X_PARTMS9
-This is a 9bit DP reloc for the tms320c54x, where the most
-significant 9 bits of a 16 bit word are placed into the least
-significant 9 bits of the opcode.
-@end deffn
-@deffn {} BFD_RELOC_TIC54X_23
-This is an extended address 23-bit reloc for the tms320c54x.
-@end deffn
-@deffn {} BFD_RELOC_TIC54X_16_OF_23
-This is a 16-bit reloc for the tms320c54x, where the least
-significant 16 bits of a 23-bit extended address are placed into
-the opcode.
-@end deffn
-@deffn {} BFD_RELOC_TIC54X_MS7_OF_23
-This is a reloc for the tms320c54x, where the most
-significant 7 bits of a 23-bit extended address are placed into
-the opcode.
-@end deffn
-@deffn {} BFD_RELOC_FR30_48
-This is a 48 bit reloc for the FR30 that stores 32 bits.
-@end deffn
-@deffn {} BFD_RELOC_FR30_20
-This is a 32 bit reloc for the FR30 that stores 20 bits split up into
-two sections.
-@end deffn
-@deffn {} BFD_RELOC_FR30_6_IN_4
-This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in
-4 bits.
-@end deffn
-@deffn {} BFD_RELOC_FR30_8_IN_8
-This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset
-into 8 bits.
-@end deffn
-@deffn {} BFD_RELOC_FR30_9_IN_8
-This is a 16 bit reloc for the FR30 that stores a 9 bit short offset
-into 8 bits.
-@end deffn
-@deffn {} BFD_RELOC_FR30_10_IN_8
-This is a 16 bit reloc for the FR30 that stores a 10 bit word offset
-into 8 bits.
-@end deffn
-@deffn {} BFD_RELOC_FR30_9_PCREL
-This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
-short offset into 8 bits.
-@end deffn
-@deffn {} BFD_RELOC_FR30_12_PCREL
-This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative
-short offset into 11 bits.
-@end deffn
-@deffn {} BFD_RELOC_MCORE_PCREL_IMM8BY4
-@deffnx {} BFD_RELOC_MCORE_PCREL_IMM11BY2
-@deffnx {} BFD_RELOC_MCORE_PCREL_IMM4BY2
-@deffnx {} BFD_RELOC_MCORE_PCREL_32
-@deffnx {} BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2
-@deffnx {} BFD_RELOC_MCORE_RVA
-Motorola Mcore relocations.
-@end deffn
-@deffn {} BFD_RELOC_MMIX_GETA
-@deffnx {} BFD_RELOC_MMIX_GETA_1
-@deffnx {} BFD_RELOC_MMIX_GETA_2
-@deffnx {} BFD_RELOC_MMIX_GETA_3
-These are relocations for the GETA instruction.
-@end deffn
-@deffn {} BFD_RELOC_MMIX_CBRANCH
-@deffnx {} BFD_RELOC_MMIX_CBRANCH_J
-@deffnx {} BFD_RELOC_MMIX_CBRANCH_1
-@deffnx {} BFD_RELOC_MMIX_CBRANCH_2
-@deffnx {} BFD_RELOC_MMIX_CBRANCH_3
-These are relocations for a conditional branch instruction.
-@end deffn
-@deffn {} BFD_RELOC_MMIX_PUSHJ
-@deffnx {} BFD_RELOC_MMIX_PUSHJ_1
-@deffnx {} BFD_RELOC_MMIX_PUSHJ_2
-@deffnx {} BFD_RELOC_MMIX_PUSHJ_3
-@deffnx {} BFD_RELOC_MMIX_PUSHJ_STUBBABLE
-These are relocations for the PUSHJ instruction.
-@end deffn
-@deffn {} BFD_RELOC_MMIX_JMP
-@deffnx {} BFD_RELOC_MMIX_JMP_1
-@deffnx {} BFD_RELOC_MMIX_JMP_2
-@deffnx {} BFD_RELOC_MMIX_JMP_3
-These are relocations for the JMP instruction.
-@end deffn
-@deffn {} BFD_RELOC_MMIX_ADDR19
-This is a relocation for a relative address as in a GETA instruction or
-a branch.
-@end deffn
-@deffn {} BFD_RELOC_MMIX_ADDR27
-This is a relocation for a relative address as in a JMP instruction.
-@end deffn
-@deffn {} BFD_RELOC_MMIX_REG_OR_BYTE
-This is a relocation for an instruction field that may be a general
-register or a value 0..255.
-@end deffn
-@deffn {} BFD_RELOC_MMIX_REG
-This is a relocation for an instruction field that may be a general
-register.
-@end deffn
-@deffn {} BFD_RELOC_MMIX_BASE_PLUS_OFFSET
-This is a relocation for two instruction fields holding a register and
-an offset, the equivalent of the relocation.
-@end deffn
-@deffn {} BFD_RELOC_MMIX_LOCAL
-This relocation is an assertion that the expression is not allocated as
-a global register. It does not modify contents.
-@end deffn
-@deffn {} BFD_RELOC_AVR_7_PCREL
-This is a 16 bit reloc for the AVR that stores 8 bit pc relative
-short offset into 7 bits.
-@end deffn
-@deffn {} BFD_RELOC_AVR_13_PCREL
-This is a 16 bit reloc for the AVR that stores 13 bit pc relative
-short offset into 12 bits.
-@end deffn
-@deffn {} BFD_RELOC_AVR_16_PM
-This is a 16 bit reloc for the AVR that stores 17 bit value (usually
-program memory address) into 16 bits.
-@end deffn
-@deffn {} BFD_RELOC_AVR_LO8_LDI
-This is a 16 bit reloc for the AVR that stores 8 bit value (usually
-data memory address) into 8 bit immediate value of LDI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_HI8_LDI
-This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
-of data memory address) into 8 bit immediate value of LDI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_HH8_LDI
-This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-of program memory address) into 8 bit immediate value of LDI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_MS8_LDI
-This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-of 32 bit value) into 8 bit immediate value of LDI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_LO8_LDI_NEG
-This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(usually data memory address) into 8 bit immediate value of SUBI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_HI8_LDI_NEG
-This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(high 8 bit of data memory address) into 8 bit immediate value of
-SUBI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_HH8_LDI_NEG
-This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(most high 8 bit of program memory address) into 8 bit immediate value
-of LDI or SUBI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_MS8_LDI_NEG
-This is a 16 bit reloc for the AVR that stores negated 8 bit value (msb
-of 32 bit value) into 8 bit immediate value of LDI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_LO8_LDI_PM
-This is a 16 bit reloc for the AVR that stores 8 bit value (usually
-command address) into 8 bit immediate value of LDI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_HI8_LDI_PM
-This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
-of command address) into 8 bit immediate value of LDI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_HH8_LDI_PM
-This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-of command address) into 8 bit immediate value of LDI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_LO8_LDI_PM_NEG
-This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(usually command address) into 8 bit immediate value of SUBI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_HI8_LDI_PM_NEG
-This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(high 8 bit of 16 bit command address) into 8 bit immediate value
-of SUBI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_HH8_LDI_PM_NEG
-This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(high 6 bit of 22 bit command address) into 8 bit immediate
-value of SUBI insn.
-@end deffn
-@deffn {} BFD_RELOC_AVR_CALL
-This is a 32 bit reloc for the AVR that stores 23 bit value
-into 22 bits.
-@end deffn
-@deffn {} BFD_RELOC_AVR_LDI
-This is a 16 bit reloc for the AVR that stores all needed bits
-for absolute addressing with ldi with overflow check to linktime
-@end deffn
-@deffn {} BFD_RELOC_AVR_6
-This is a 6 bit reloc for the AVR that stores offset for ldd/std
-instructions
-@end deffn
-@deffn {} BFD_RELOC_AVR_6_ADIW
-This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
-instructions
-@end deffn
-@deffn {} BFD_RELOC_390_12
-Direct 12 bit.
-@end deffn
-@deffn {} BFD_RELOC_390_GOT12
-12 bit GOT offset.
-@end deffn
-@deffn {} BFD_RELOC_390_PLT32
-32 bit PC relative PLT address.
-@end deffn
-@deffn {} BFD_RELOC_390_COPY
-Copy symbol at runtime.
-@end deffn
-@deffn {} BFD_RELOC_390_GLOB_DAT
-Create GOT entry.
-@end deffn
-@deffn {} BFD_RELOC_390_JMP_SLOT
-Create PLT entry.
-@end deffn
-@deffn {} BFD_RELOC_390_RELATIVE
-Adjust by program base.
-@end deffn
-@deffn {} BFD_RELOC_390_GOTPC
-32 bit PC relative offset to GOT.
-@end deffn
-@deffn {} BFD_RELOC_390_GOT16
-16 bit GOT offset.
-@end deffn
-@deffn {} BFD_RELOC_390_PC16DBL
-PC relative 16 bit shifted by 1.
-@end deffn
-@deffn {} BFD_RELOC_390_PLT16DBL
-16 bit PC rel. PLT shifted by 1.
-@end deffn
-@deffn {} BFD_RELOC_390_PC32DBL
-PC relative 32 bit shifted by 1.
-@end deffn
-@deffn {} BFD_RELOC_390_PLT32DBL
-32 bit PC rel. PLT shifted by 1.
-@end deffn
-@deffn {} BFD_RELOC_390_GOTPCDBL
-32 bit PC rel. GOT shifted by 1.
-@end deffn
-@deffn {} BFD_RELOC_390_GOT64
-64 bit GOT offset.
-@end deffn
-@deffn {} BFD_RELOC_390_PLT64
-64 bit PC relative PLT address.
-@end deffn
-@deffn {} BFD_RELOC_390_GOTENT
-32 bit rel. offset to GOT entry.
-@end deffn
-@deffn {} BFD_RELOC_390_GOTOFF64
-64 bit offset to GOT.
-@end deffn
-@deffn {} BFD_RELOC_390_GOTPLT12
-12-bit offset to symbol-entry within GOT, with PLT handling.
-@end deffn
-@deffn {} BFD_RELOC_390_GOTPLT16
-16-bit offset to symbol-entry within GOT, with PLT handling.
-@end deffn
-@deffn {} BFD_RELOC_390_GOTPLT32
-32-bit offset to symbol-entry within GOT, with PLT handling.
-@end deffn
-@deffn {} BFD_RELOC_390_GOTPLT64
-64-bit offset to symbol-entry within GOT, with PLT handling.
-@end deffn
-@deffn {} BFD_RELOC_390_GOTPLTENT
-32-bit rel. offset to symbol-entry within GOT, with PLT handling.
-@end deffn
-@deffn {} BFD_RELOC_390_PLTOFF16
-16-bit rel. offset from the GOT to a PLT entry.
-@end deffn
-@deffn {} BFD_RELOC_390_PLTOFF32
-32-bit rel. offset from the GOT to a PLT entry.
-@end deffn
-@deffn {} BFD_RELOC_390_PLTOFF64
-64-bit rel. offset from the GOT to a PLT entry.
-@end deffn
-@deffn {} BFD_RELOC_390_TLS_LOAD
-@deffnx {} BFD_RELOC_390_TLS_GDCALL
-@deffnx {} BFD_RELOC_390_TLS_LDCALL
-@deffnx {} BFD_RELOC_390_TLS_GD32
-@deffnx {} BFD_RELOC_390_TLS_GD64
-@deffnx {} BFD_RELOC_390_TLS_GOTIE12
-@deffnx {} BFD_RELOC_390_TLS_GOTIE32
-@deffnx {} BFD_RELOC_390_TLS_GOTIE64
-@deffnx {} BFD_RELOC_390_TLS_LDM32
-@deffnx {} BFD_RELOC_390_TLS_LDM64
-@deffnx {} BFD_RELOC_390_TLS_IE32
-@deffnx {} BFD_RELOC_390_TLS_IE64
-@deffnx {} BFD_RELOC_390_TLS_IEENT
-@deffnx {} BFD_RELOC_390_TLS_LE32
-@deffnx {} BFD_RELOC_390_TLS_LE64
-@deffnx {} BFD_RELOC_390_TLS_LDO32
-@deffnx {} BFD_RELOC_390_TLS_LDO64
-@deffnx {} BFD_RELOC_390_TLS_DTPMOD
-@deffnx {} BFD_RELOC_390_TLS_DTPOFF
-@deffnx {} BFD_RELOC_390_TLS_TPOFF
-s390 tls relocations.
-@end deffn
-@deffn {} BFD_RELOC_390_20
-@deffnx {} BFD_RELOC_390_GOT20
-@deffnx {} BFD_RELOC_390_GOTPLT20
-@deffnx {} BFD_RELOC_390_TLS_GOTIE20
-Long displacement extension.
-@end deffn
-@deffn {} BFD_RELOC_IP2K_FR9
-Scenix IP2K - 9-bit register number / data address
-@end deffn
-@deffn {} BFD_RELOC_IP2K_BANK
-Scenix IP2K - 4-bit register/data bank number
-@end deffn
-@deffn {} BFD_RELOC_IP2K_ADDR16CJP
-Scenix IP2K - low 13 bits of instruction word address
-@end deffn
-@deffn {} BFD_RELOC_IP2K_PAGE3
-Scenix IP2K - high 3 bits of instruction word address
-@end deffn
-@deffn {} BFD_RELOC_IP2K_LO8DATA
-@deffnx {} BFD_RELOC_IP2K_HI8DATA
-@deffnx {} BFD_RELOC_IP2K_EX8DATA
-Scenix IP2K - ext/low/high 8 bits of data address
-@end deffn
-@deffn {} BFD_RELOC_IP2K_LO8INSN
-@deffnx {} BFD_RELOC_IP2K_HI8INSN
-Scenix IP2K - low/high 8 bits of instruction word address
-@end deffn
-@deffn {} BFD_RELOC_IP2K_PC_SKIP
-Scenix IP2K - even/odd PC modifier to modify snb pcl.0
-@end deffn
-@deffn {} BFD_RELOC_IP2K_TEXT
-Scenix IP2K - 16 bit word address in text section.
-@end deffn
-@deffn {} BFD_RELOC_IP2K_FR_OFFSET
-Scenix IP2K - 7-bit sp or dp offset
-@end deffn
-@deffn {} BFD_RELOC_VPE4KMATH_DATA
-@deffnx {} BFD_RELOC_VPE4KMATH_INSN
-Scenix VPE4K coprocessor - data/insn-space addressing
-@end deffn
-@deffn {} BFD_RELOC_VTABLE_INHERIT
-@deffnx {} BFD_RELOC_VTABLE_ENTRY
-These two relocations are used by the linker to determine which of
-the entries in a C++ virtual function table are actually used. When
-the --gc-sections option is given, the linker will zero out the entries
-that are not used, so that the code for those functions need not be
-included in the output.
-
-VTABLE_INHERIT is a zero-space relocation used to describe to the
-linker the inheritance tree of a C++ virtual function table. The
-relocation's symbol should be the parent class' vtable, and the
-relocation should be located at the child vtable.
-
-VTABLE_ENTRY is a zero-space relocation that describes the use of a
-virtual function table entry. The reloc's symbol should refer to the
-table of the class mentioned in the code. Off of that base, an offset
-describes the entry that is being used. For Rela hosts, this offset
-is stored in the reloc's addend. For Rel hosts, we are forced to put
-this offset in the reloc's section offset.
-@end deffn
-@deffn {} BFD_RELOC_IA64_IMM14
-@deffnx {} BFD_RELOC_IA64_IMM22
-@deffnx {} BFD_RELOC_IA64_IMM64
-@deffnx {} BFD_RELOC_IA64_DIR32MSB
-@deffnx {} BFD_RELOC_IA64_DIR32LSB
-@deffnx {} BFD_RELOC_IA64_DIR64MSB
-@deffnx {} BFD_RELOC_IA64_DIR64LSB
-@deffnx {} BFD_RELOC_IA64_GPREL22
-@deffnx {} BFD_RELOC_IA64_GPREL64I
-@deffnx {} BFD_RELOC_IA64_GPREL32MSB
-@deffnx {} BFD_RELOC_IA64_GPREL32LSB
-@deffnx {} BFD_RELOC_IA64_GPREL64MSB
-@deffnx {} BFD_RELOC_IA64_GPREL64LSB
-@deffnx {} BFD_RELOC_IA64_LTOFF22
-@deffnx {} BFD_RELOC_IA64_LTOFF64I
-@deffnx {} BFD_RELOC_IA64_PLTOFF22
-@deffnx {} BFD_RELOC_IA64_PLTOFF64I
-@deffnx {} BFD_RELOC_IA64_PLTOFF64MSB
-@deffnx {} BFD_RELOC_IA64_PLTOFF64LSB
-@deffnx {} BFD_RELOC_IA64_FPTR64I
-@deffnx {} BFD_RELOC_IA64_FPTR32MSB
-@deffnx {} BFD_RELOC_IA64_FPTR32LSB
-@deffnx {} BFD_RELOC_IA64_FPTR64MSB
-@deffnx {} BFD_RELOC_IA64_FPTR64LSB
-@deffnx {} BFD_RELOC_IA64_PCREL21B
-@deffnx {} BFD_RELOC_IA64_PCREL21BI
-@deffnx {} BFD_RELOC_IA64_PCREL21M
-@deffnx {} BFD_RELOC_IA64_PCREL21F
-@deffnx {} BFD_RELOC_IA64_PCREL22
-@deffnx {} BFD_RELOC_IA64_PCREL60B
-@deffnx {} BFD_RELOC_IA64_PCREL64I
-@deffnx {} BFD_RELOC_IA64_PCREL32MSB
-@deffnx {} BFD_RELOC_IA64_PCREL32LSB
-@deffnx {} BFD_RELOC_IA64_PCREL64MSB
-@deffnx {} BFD_RELOC_IA64_PCREL64LSB
-@deffnx {} BFD_RELOC_IA64_LTOFF_FPTR22
-@deffnx {} BFD_RELOC_IA64_LTOFF_FPTR64I
-@deffnx {} BFD_RELOC_IA64_LTOFF_FPTR32MSB
-@deffnx {} BFD_RELOC_IA64_LTOFF_FPTR32LSB
-@deffnx {} BFD_RELOC_IA64_LTOFF_FPTR64MSB
-@deffnx {} BFD_RELOC_IA64_LTOFF_FPTR64LSB
-@deffnx {} BFD_RELOC_IA64_SEGREL32MSB
-@deffnx {} BFD_RELOC_IA64_SEGREL32LSB
-@deffnx {} BFD_RELOC_IA64_SEGREL64MSB
-@deffnx {} BFD_RELOC_IA64_SEGREL64LSB
-@deffnx {} BFD_RELOC_IA64_SECREL32MSB
-@deffnx {} BFD_RELOC_IA64_SECREL32LSB
-@deffnx {} BFD_RELOC_IA64_SECREL64MSB
-@deffnx {} BFD_RELOC_IA64_SECREL64LSB
-@deffnx {} BFD_RELOC_IA64_REL32MSB
-@deffnx {} BFD_RELOC_IA64_REL32LSB
-@deffnx {} BFD_RELOC_IA64_REL64MSB
-@deffnx {} BFD_RELOC_IA64_REL64LSB
-@deffnx {} BFD_RELOC_IA64_LTV32MSB
-@deffnx {} BFD_RELOC_IA64_LTV32LSB
-@deffnx {} BFD_RELOC_IA64_LTV64MSB
-@deffnx {} BFD_RELOC_IA64_LTV64LSB
-@deffnx {} BFD_RELOC_IA64_IPLTMSB
-@deffnx {} BFD_RELOC_IA64_IPLTLSB
-@deffnx {} BFD_RELOC_IA64_COPY
-@deffnx {} BFD_RELOC_IA64_LTOFF22X
-@deffnx {} BFD_RELOC_IA64_LDXMOV
-@deffnx {} BFD_RELOC_IA64_TPREL14
-@deffnx {} BFD_RELOC_IA64_TPREL22
-@deffnx {} BFD_RELOC_IA64_TPREL64I
-@deffnx {} BFD_RELOC_IA64_TPREL64MSB
-@deffnx {} BFD_RELOC_IA64_TPREL64LSB
-@deffnx {} BFD_RELOC_IA64_LTOFF_TPREL22
-@deffnx {} BFD_RELOC_IA64_DTPMOD64MSB
-@deffnx {} BFD_RELOC_IA64_DTPMOD64LSB
-@deffnx {} BFD_RELOC_IA64_LTOFF_DTPMOD22
-@deffnx {} BFD_RELOC_IA64_DTPREL14
-@deffnx {} BFD_RELOC_IA64_DTPREL22
-@deffnx {} BFD_RELOC_IA64_DTPREL64I
-@deffnx {} BFD_RELOC_IA64_DTPREL32MSB
-@deffnx {} BFD_RELOC_IA64_DTPREL32LSB
-@deffnx {} BFD_RELOC_IA64_DTPREL64MSB
-@deffnx {} BFD_RELOC_IA64_DTPREL64LSB
-@deffnx {} BFD_RELOC_IA64_LTOFF_DTPREL22
-Intel IA64 Relocations.
-@end deffn
-@deffn {} BFD_RELOC_M68HC11_HI8
-Motorola 68HC11 reloc.
-This is the 8 bit high part of an absolute address.
-@end deffn
-@deffn {} BFD_RELOC_M68HC11_LO8
-Motorola 68HC11 reloc.
-This is the 8 bit low part of an absolute address.
-@end deffn
-@deffn {} BFD_RELOC_M68HC11_3B
-Motorola 68HC11 reloc.
-This is the 3 bit of a value.
-@end deffn
-@deffn {} BFD_RELOC_M68HC11_RL_JUMP
-Motorola 68HC11 reloc.
-This reloc marks the beginning of a jump/call instruction.
-It is used for linker relaxation to correctly identify beginning
-of instruction and change some branches to use PC-relative
-addressing mode.
-@end deffn
-@deffn {} BFD_RELOC_M68HC11_RL_GROUP
-Motorola 68HC11 reloc.
-This reloc marks a group of several instructions that gcc generates
-and for which the linker relaxation pass can modify and/or remove
-some of them.
-@end deffn
-@deffn {} BFD_RELOC_M68HC11_LO16
-Motorola 68HC11 reloc.
-This is the 16-bit lower part of an address. It is used for 'call'
-instruction to specify the symbol address without any special
-transformation (due to memory bank window).
-@end deffn
-@deffn {} BFD_RELOC_M68HC11_PAGE
-Motorola 68HC11 reloc.
-This is a 8-bit reloc that specifies the page number of an address.
-It is used by 'call' instruction to specify the page number of
-the symbol.
-@end deffn
-@deffn {} BFD_RELOC_M68HC11_24
-Motorola 68HC11 reloc.
-This is a 24-bit reloc that represents the address with a 16-bit
-value and a 8-bit page number. The symbol address is transformed
-to follow the 16K memory bank of 68HC12 (seen as mapped in the window).
-@end deffn
-@deffn {} BFD_RELOC_M68HC12_5B
-Motorola 68HC12 reloc.
-This is the 5 bits of a value.
-@end deffn
-@deffn {} BFD_RELOC_16C_NUM08
-@deffnx {} BFD_RELOC_16C_NUM08_C
-@deffnx {} BFD_RELOC_16C_NUM16
-@deffnx {} BFD_RELOC_16C_NUM16_C
-@deffnx {} BFD_RELOC_16C_NUM32
-@deffnx {} BFD_RELOC_16C_NUM32_C
-@deffnx {} BFD_RELOC_16C_DISP04
-@deffnx {} BFD_RELOC_16C_DISP04_C
-@deffnx {} BFD_RELOC_16C_DISP08
-@deffnx {} BFD_RELOC_16C_DISP08_C
-@deffnx {} BFD_RELOC_16C_DISP16
-@deffnx {} BFD_RELOC_16C_DISP16_C
-@deffnx {} BFD_RELOC_16C_DISP24
-@deffnx {} BFD_RELOC_16C_DISP24_C
-@deffnx {} BFD_RELOC_16C_DISP24a
-@deffnx {} BFD_RELOC_16C_DISP24a_C
-@deffnx {} BFD_RELOC_16C_REG04
-@deffnx {} BFD_RELOC_16C_REG04_C
-@deffnx {} BFD_RELOC_16C_REG04a
-@deffnx {} BFD_RELOC_16C_REG04a_C
-@deffnx {} BFD_RELOC_16C_REG14
-@deffnx {} BFD_RELOC_16C_REG14_C
-@deffnx {} BFD_RELOC_16C_REG16
-@deffnx {} BFD_RELOC_16C_REG16_C
-@deffnx {} BFD_RELOC_16C_REG20
-@deffnx {} BFD_RELOC_16C_REG20_C
-@deffnx {} BFD_RELOC_16C_ABS20
-@deffnx {} BFD_RELOC_16C_ABS20_C
-@deffnx {} BFD_RELOC_16C_ABS24
-@deffnx {} BFD_RELOC_16C_ABS24_C
-@deffnx {} BFD_RELOC_16C_IMM04
-@deffnx {} BFD_RELOC_16C_IMM04_C
-@deffnx {} BFD_RELOC_16C_IMM16
-@deffnx {} BFD_RELOC_16C_IMM16_C
-@deffnx {} BFD_RELOC_16C_IMM20
-@deffnx {} BFD_RELOC_16C_IMM20_C
-@deffnx {} BFD_RELOC_16C_IMM24
-@deffnx {} BFD_RELOC_16C_IMM24_C
-@deffnx {} BFD_RELOC_16C_IMM32
-@deffnx {} BFD_RELOC_16C_IMM32_C
-NS CR16C Relocations.
-@end deffn
-@deffn {} BFD_RELOC_CRX_REL4
-@deffnx {} BFD_RELOC_CRX_REL8
-@deffnx {} BFD_RELOC_CRX_REL8_CMP
-@deffnx {} BFD_RELOC_CRX_REL16
-@deffnx {} BFD_RELOC_CRX_REL24
-@deffnx {} BFD_RELOC_CRX_REL32
-@deffnx {} BFD_RELOC_CRX_REGREL12
-@deffnx {} BFD_RELOC_CRX_REGREL22
-@deffnx {} BFD_RELOC_CRX_REGREL28
-@deffnx {} BFD_RELOC_CRX_REGREL32
-@deffnx {} BFD_RELOC_CRX_ABS16
-@deffnx {} BFD_RELOC_CRX_ABS32
-@deffnx {} BFD_RELOC_CRX_NUM8
-@deffnx {} BFD_RELOC_CRX_NUM16
-@deffnx {} BFD_RELOC_CRX_NUM32
-@deffnx {} BFD_RELOC_CRX_IMM16
-@deffnx {} BFD_RELOC_CRX_IMM32
-@deffnx {} BFD_RELOC_CRX_SWITCH8
-@deffnx {} BFD_RELOC_CRX_SWITCH16
-@deffnx {} BFD_RELOC_CRX_SWITCH32
-NS CRX Relocations.
-@end deffn
-@deffn {} BFD_RELOC_CRIS_BDISP8
-@deffnx {} BFD_RELOC_CRIS_UNSIGNED_5
-@deffnx {} BFD_RELOC_CRIS_SIGNED_6
-@deffnx {} BFD_RELOC_CRIS_UNSIGNED_6
-@deffnx {} BFD_RELOC_CRIS_SIGNED_8
-@deffnx {} BFD_RELOC_CRIS_UNSIGNED_8
-@deffnx {} BFD_RELOC_CRIS_SIGNED_16
-@deffnx {} BFD_RELOC_CRIS_UNSIGNED_16
-@deffnx {} BFD_RELOC_CRIS_LAPCQ_OFFSET
-@deffnx {} BFD_RELOC_CRIS_UNSIGNED_4
-These relocs are only used within the CRIS assembler. They are not
-(at present) written to any object files.
-@end deffn
-@deffn {} BFD_RELOC_CRIS_COPY
-@deffnx {} BFD_RELOC_CRIS_GLOB_DAT
-@deffnx {} BFD_RELOC_CRIS_JUMP_SLOT
-@deffnx {} BFD_RELOC_CRIS_RELATIVE
-Relocs used in ELF shared libraries for CRIS.
-@end deffn
-@deffn {} BFD_RELOC_CRIS_32_GOT
-32-bit offset to symbol-entry within GOT.
-@end deffn
-@deffn {} BFD_RELOC_CRIS_16_GOT
-16-bit offset to symbol-entry within GOT.
-@end deffn
-@deffn {} BFD_RELOC_CRIS_32_GOTPLT
-32-bit offset to symbol-entry within GOT, with PLT handling.
-@end deffn
-@deffn {} BFD_RELOC_CRIS_16_GOTPLT
-16-bit offset to symbol-entry within GOT, with PLT handling.
-@end deffn
-@deffn {} BFD_RELOC_CRIS_32_GOTREL
-32-bit offset to symbol, relative to GOT.
-@end deffn
-@deffn {} BFD_RELOC_CRIS_32_PLT_GOTREL
-32-bit offset to symbol with PLT entry, relative to GOT.
-@end deffn
-@deffn {} BFD_RELOC_CRIS_32_PLT_PCREL
-32-bit offset to symbol with PLT entry, relative to this relocation.
-@end deffn
-@deffn {} BFD_RELOC_860_COPY
-@deffnx {} BFD_RELOC_860_GLOB_DAT
-@deffnx {} BFD_RELOC_860_JUMP_SLOT
-@deffnx {} BFD_RELOC_860_RELATIVE
-@deffnx {} BFD_RELOC_860_PC26
-@deffnx {} BFD_RELOC_860_PLT26
-@deffnx {} BFD_RELOC_860_PC16
-@deffnx {} BFD_RELOC_860_LOW0
-@deffnx {} BFD_RELOC_860_SPLIT0
-@deffnx {} BFD_RELOC_860_LOW1
-@deffnx {} BFD_RELOC_860_SPLIT1
-@deffnx {} BFD_RELOC_860_LOW2
-@deffnx {} BFD_RELOC_860_SPLIT2
-@deffnx {} BFD_RELOC_860_LOW3
-@deffnx {} BFD_RELOC_860_LOGOT0
-@deffnx {} BFD_RELOC_860_SPGOT0
-@deffnx {} BFD_RELOC_860_LOGOT1
-@deffnx {} BFD_RELOC_860_SPGOT1
-@deffnx {} BFD_RELOC_860_LOGOTOFF0
-@deffnx {} BFD_RELOC_860_SPGOTOFF0
-@deffnx {} BFD_RELOC_860_LOGOTOFF1
-@deffnx {} BFD_RELOC_860_SPGOTOFF1
-@deffnx {} BFD_RELOC_860_LOGOTOFF2
-@deffnx {} BFD_RELOC_860_LOGOTOFF3
-@deffnx {} BFD_RELOC_860_LOPC
-@deffnx {} BFD_RELOC_860_HIGHADJ
-@deffnx {} BFD_RELOC_860_HAGOT
-@deffnx {} BFD_RELOC_860_HAGOTOFF
-@deffnx {} BFD_RELOC_860_HAPC
-@deffnx {} BFD_RELOC_860_HIGH
-@deffnx {} BFD_RELOC_860_HIGOT
-@deffnx {} BFD_RELOC_860_HIGOTOFF
-Intel i860 Relocations.
-@end deffn
-@deffn {} BFD_RELOC_OPENRISC_ABS_26
-@deffnx {} BFD_RELOC_OPENRISC_REL_26
-OpenRISC Relocations.
-@end deffn
-@deffn {} BFD_RELOC_H8_DIR16A8
-@deffnx {} BFD_RELOC_H8_DIR16R8
-@deffnx {} BFD_RELOC_H8_DIR24A8
-@deffnx {} BFD_RELOC_H8_DIR24R8
-@deffnx {} BFD_RELOC_H8_DIR32A16
-H8 elf Relocations.
-@end deffn
-@deffn {} BFD_RELOC_XSTORMY16_REL_12
-@deffnx {} BFD_RELOC_XSTORMY16_12
-@deffnx {} BFD_RELOC_XSTORMY16_24
-@deffnx {} BFD_RELOC_XSTORMY16_FPTR16
-Sony Xstormy16 Relocations.
-@end deffn
-@deffn {} BFD_RELOC_XC16X_PAG
-@deffnx {} BFD_RELOC_XC16X_POF
-@deffnx {} BFD_RELOC_XC16X_SEG
-@deffnx {} BFD_RELOC_XC16X_SOF
-Infineon Relocations.
-@end deffn
-@deffn {} BFD_RELOC_VAX_GLOB_DAT
-@deffnx {} BFD_RELOC_VAX_JMP_SLOT
-@deffnx {} BFD_RELOC_VAX_RELATIVE
-Relocations used by VAX ELF.
-@end deffn
-@deffn {} BFD_RELOC_MT_PC16
-Morpho MT - 16 bit immediate relocation.
-@end deffn
-@deffn {} BFD_RELOC_MT_HI16
-Morpho MT - Hi 16 bits of an address.
-@end deffn
-@deffn {} BFD_RELOC_MT_LO16
-Morpho MT - Low 16 bits of an address.
-@end deffn
-@deffn {} BFD_RELOC_MT_GNU_VTINHERIT
-Morpho MT - Used to tell the linker which vtable entries are used.
-@end deffn
-@deffn {} BFD_RELOC_MT_GNU_VTENTRY
-Morpho MT - Used to tell the linker which vtable entries are used.
-@end deffn
-@deffn {} BFD_RELOC_MT_PCINSN8
-Morpho MT - 8 bit immediate relocation.
-@end deffn
-@deffn {} BFD_RELOC_MSP430_10_PCREL
-@deffnx {} BFD_RELOC_MSP430_16_PCREL
-@deffnx {} BFD_RELOC_MSP430_16
-@deffnx {} BFD_RELOC_MSP430_16_PCREL_BYTE
-@deffnx {} BFD_RELOC_MSP430_16_BYTE
-@deffnx {} BFD_RELOC_MSP430_2X_PCREL
-@deffnx {} BFD_RELOC_MSP430_RL_PCREL
-msp430 specific relocation codes
-@end deffn
-@deffn {} BFD_RELOC_IQ2000_OFFSET_16
-@deffnx {} BFD_RELOC_IQ2000_OFFSET_21
-@deffnx {} BFD_RELOC_IQ2000_UHI16
-IQ2000 Relocations.
-@end deffn
-@deffn {} BFD_RELOC_XTENSA_RTLD
-Special Xtensa relocation used only by PLT entries in ELF shared
-objects to indicate that the runtime linker should set the value
-to one of its own internal functions or data structures.
-@end deffn
-@deffn {} BFD_RELOC_XTENSA_GLOB_DAT
-@deffnx {} BFD_RELOC_XTENSA_JMP_SLOT
-@deffnx {} BFD_RELOC_XTENSA_RELATIVE
-Xtensa relocations for ELF shared objects.
-@end deffn
-@deffn {} BFD_RELOC_XTENSA_PLT
-Xtensa relocation used in ELF object files for symbols that may require
-PLT entries. Otherwise, this is just a generic 32-bit relocation.
-@end deffn
-@deffn {} BFD_RELOC_XTENSA_DIFF8
-@deffnx {} BFD_RELOC_XTENSA_DIFF16
-@deffnx {} BFD_RELOC_XTENSA_DIFF32
-Xtensa relocations to mark the difference of two local symbols.
-These are only needed to support linker relaxation and can be ignored
-when not relaxing. The field is set to the value of the difference
-assuming no relaxation. The relocation encodes the position of the
-first symbol so the linker can determine whether to adjust the field
-value.
-@end deffn
-@deffn {} BFD_RELOC_XTENSA_SLOT0_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT1_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT2_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT3_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT4_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT5_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT6_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT7_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT8_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT9_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT10_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT11_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT12_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT13_OP
-@deffnx {} BFD_RELOC_XTENSA_SLOT14_OP
-Generic Xtensa relocations for instruction operands. Only the slot
-number is encoded in the relocation. The relocation applies to the
-last PC-relative immediate operand, or if there are no PC-relative
-immediates, to the last immediate operand.
-@end deffn
-@deffn {} BFD_RELOC_XTENSA_SLOT0_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT1_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT2_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT3_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT4_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT5_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT6_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT7_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT8_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT9_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT10_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT11_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT12_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT13_ALT
-@deffnx {} BFD_RELOC_XTENSA_SLOT14_ALT
-Alternate Xtensa relocations. Only the slot is encoded in the
-relocation. The meaning of these relocations is opcode-specific.
-@end deffn
-@deffn {} BFD_RELOC_XTENSA_OP0
-@deffnx {} BFD_RELOC_XTENSA_OP1
-@deffnx {} BFD_RELOC_XTENSA_OP2
-Xtensa relocations for backward compatibility. These have all been
-replaced by BFD_RELOC_XTENSA_SLOT0_OP.
-@end deffn
-@deffn {} BFD_RELOC_XTENSA_ASM_EXPAND
-Xtensa relocation to mark that the assembler expanded the
-instructions from an original target. The expansion size is
-encoded in the reloc size.
-@end deffn
-@deffn {} BFD_RELOC_XTENSA_ASM_SIMPLIFY
-Xtensa relocation to mark that the linker should simplify
-assembler-expanded instructions. This is commonly used
-internally by the linker after analysis of a
-BFD_RELOC_XTENSA_ASM_EXPAND.
-@end deffn
-@deffn {} BFD_RELOC_Z80_DISP8
-8 bit signed offset in (ix+d) or (iy+d).
-@end deffn
-@deffn {} BFD_RELOC_Z8K_DISP7
-DJNZ offset.
-@end deffn
-@deffn {} BFD_RELOC_Z8K_CALLR
-CALR offset.
-@end deffn
-@deffn {} BFD_RELOC_Z8K_IMM4L
-4 bit value.
-@end deffn
-
-@example
-
-typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
-@end example
-@findex bfd_reloc_type_lookup
-@subsubsection @code{bfd_reloc_type_lookup}
-@strong{Synopsis}
-@example
-reloc_howto_type *bfd_reloc_type_lookup
- (bfd *abfd, bfd_reloc_code_real_type code);
-@end example
-@strong{Description}@*
-Return a pointer to a howto structure which, when
-invoked, will perform the relocation @var{code} on data from the
-architecture noted.
-
-@findex bfd_default_reloc_type_lookup
-@subsubsection @code{bfd_default_reloc_type_lookup}
-@strong{Synopsis}
-@example
-reloc_howto_type *bfd_default_reloc_type_lookup
- (bfd *abfd, bfd_reloc_code_real_type code);
-@end example
-@strong{Description}@*
-Provides a default relocation lookup routine for any architecture.
-
-@findex bfd_get_reloc_code_name
-@subsubsection @code{bfd_get_reloc_code_name}
-@strong{Synopsis}
-@example
-const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
-@end example
-@strong{Description}@*
-Provides a printable name for the supplied relocation code.
-Useful mainly for printing error messages.
-
-@findex bfd_generic_relax_section
-@subsubsection @code{bfd_generic_relax_section}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_generic_relax_section
- (bfd *abfd,
- asection *section,
- struct bfd_link_info *,
- bfd_boolean *);
-@end example
-@strong{Description}@*
-Provides default handling for relaxing for back ends which
-don't do relaxing.
-
-@findex bfd_generic_gc_sections
-@subsubsection @code{bfd_generic_gc_sections}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_generic_gc_sections
- (bfd *, struct bfd_link_info *);
-@end example
-@strong{Description}@*
-Provides default handling for relaxing for back ends which
-don't do section gc -- i.e., does nothing.
-
-@findex bfd_generic_merge_sections
-@subsubsection @code{bfd_generic_merge_sections}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_generic_merge_sections
- (bfd *, struct bfd_link_info *);
-@end example
-@strong{Description}@*
-Provides default handling for SEC_MERGE section merging for back ends
-which don't have SEC_MERGE support -- i.e., does nothing.
-
-@findex bfd_generic_get_relocated_section_contents
-@subsubsection @code{bfd_generic_get_relocated_section_contents}
-@strong{Synopsis}
-@example
-bfd_byte *bfd_generic_get_relocated_section_contents
- (bfd *abfd,
- struct bfd_link_info *link_info,
- struct bfd_link_order *link_order,
- bfd_byte *data,
- bfd_boolean relocatable,
- asymbol **symbols);
-@end example
-@strong{Description}@*
-Provides default handling of relocation effort for back ends
-which can't be bothered to do it efficiently.
-
diff --git a/bfd/doc/section.texi b/bfd/doc/section.texi
deleted file mode 100644
index 4347679ef49c..000000000000
--- a/bfd/doc/section.texi
+++ /dev/null
@@ -1,989 +0,0 @@
-@section Sections
-The raw data contained within a BFD is maintained through the
-section abstraction. A single BFD may have any number of
-sections. It keeps hold of them by pointing to the first;
-each one points to the next in the list.
-
-Sections are supported in BFD in @code{section.c}.
-
-@menu
-* Section Input::
-* Section Output::
-* typedef asection::
-* section prototypes::
-@end menu
-
-@node Section Input, Section Output, Sections, Sections
-@subsection Section input
-When a BFD is opened for reading, the section structures are
-created and attached to the BFD.
-
-Each section has a name which describes the section in the
-outside world---for example, @code{a.out} would contain at least
-three sections, called @code{.text}, @code{.data} and @code{.bss}.
-
-Names need not be unique; for example a COFF file may have several
-sections named @code{.data}.
-
-Sometimes a BFD will contain more than the ``natural'' number of
-sections. A back end may attach other sections containing
-constructor data, or an application may add a section (using
-@code{bfd_make_section}) to the sections attached to an already open
-BFD. For example, the linker creates an extra section
-@code{COMMON} for each input file's BFD to hold information about
-common storage.
-
-The raw data is not necessarily read in when
-the section descriptor is created. Some targets may leave the
-data in place until a @code{bfd_get_section_contents} call is
-made. Other back ends may read in all the data at once. For
-example, an S-record file has to be read once to determine the
-size of the data. An IEEE-695 file doesn't contain raw data in
-sections, but data and relocation expressions intermixed, so
-the data area has to be parsed to get out the data and
-relocations.
-
-@node Section Output, typedef asection, Section Input, Sections
-@subsection Section output
-To write a new object style BFD, the various sections to be
-written have to be created. They are attached to the BFD in
-the same way as input sections; data is written to the
-sections using @code{bfd_set_section_contents}.
-
-Any program that creates or combines sections (e.g., the assembler
-and linker) must use the @code{asection} fields @code{output_section} and
-@code{output_offset} to indicate the file sections to which each
-section must be written. (If the section is being created from
-scratch, @code{output_section} should probably point to the section
-itself and @code{output_offset} should probably be zero.)
-
-The data to be written comes from input sections attached
-(via @code{output_section} pointers) to
-the output sections. The output section structure can be
-considered a filter for the input section: the output section
-determines the vma of the output data and the name, but the
-input section determines the offset into the output section of
-the data to be written.
-
-E.g., to create a section "O", starting at 0x100, 0x123 long,
-containing two subsections, "A" at offset 0x0 (i.e., at vma
-0x100) and "B" at offset 0x20 (i.e., at vma 0x120) the @code{asection}
-structures would look like:
-
-@example
- section name "A"
- output_offset 0x00
- size 0x20
- output_section -----------> section name "O"
- | vma 0x100
- section name "B" | size 0x123
- output_offset 0x20 |
- size 0x103 |
- output_section --------|
-@end example
-
-@subsection Link orders
-The data within a section is stored in a @dfn{link_order}.
-These are much like the fixups in @code{gas}. The link_order
-abstraction allows a section to grow and shrink within itself.
-
-A link_order knows how big it is, and which is the next
-link_order and where the raw data for it is; it also points to
-a list of relocations which apply to it.
-
-The link_order is used by the linker to perform relaxing on
-final code. The compiler creates code which is as big as
-necessary to make it work without relaxing, and the user can
-select whether to relax. Sometimes relaxing takes a lot of
-time. The linker runs around the relocations to see if any
-are attached to data which can be shrunk, if so it does it on
-a link_order by link_order basis.
-
-
-@node typedef asection, section prototypes, Section Output, Sections
-@subsection typedef asection
-Here is the section structure:
-
-
-@example
-
-typedef struct bfd_section
-@{
- /* The name of the section; the name isn't a copy, the pointer is
- the same as that passed to bfd_make_section. */
- const char *name;
-
- /* A unique sequence number. */
- int id;
-
- /* Which section in the bfd; 0..n-1 as sections are created in a bfd. */
- int index;
-
- /* The next section in the list belonging to the BFD, or NULL. */
- struct bfd_section *next;
-
- /* The previous section in the list belonging to the BFD, or NULL. */
- struct bfd_section *prev;
-
- /* The field flags contains attributes of the section. Some
- flags are read in from the object file, and some are
- synthesized from other information. */
- flagword flags;
-
-#define SEC_NO_FLAGS 0x000
-
- /* Tells the OS to allocate space for this section when loading.
- This is clear for a section containing debug information only. */
-#define SEC_ALLOC 0x001
-
- /* Tells the OS to load the section from the file when loading.
- This is clear for a .bss section. */
-#define SEC_LOAD 0x002
-
- /* The section contains data still to be relocated, so there is
- some relocation information too. */
-#define SEC_RELOC 0x004
-
- /* A signal to the OS that the section contains read only data. */
-#define SEC_READONLY 0x008
-
- /* The section contains code only. */
-#define SEC_CODE 0x010
-
- /* The section contains data only. */
-#define SEC_DATA 0x020
-
- /* The section will reside in ROM. */
-#define SEC_ROM 0x040
-
- /* The section contains constructor information. This section
- type is used by the linker to create lists of constructors and
- destructors used by @code{g++}. When a back end sees a symbol
- which should be used in a constructor list, it creates a new
- section for the type of name (e.g., @code{__CTOR_LIST__}), attaches
- the symbol to it, and builds a relocation. To build the lists
- of constructors, all the linker has to do is catenate all the
- sections called @code{__CTOR_LIST__} and relocate the data
- contained within - exactly the operations it would peform on
- standard data. */
-#define SEC_CONSTRUCTOR 0x080
-
- /* The section has contents - a data section could be
- @code{SEC_ALLOC} | @code{SEC_HAS_CONTENTS}; a debug section could be
- @code{SEC_HAS_CONTENTS} */
-#define SEC_HAS_CONTENTS 0x100
-
- /* An instruction to the linker to not output the section
- even if it has information which would normally be written. */
-#define SEC_NEVER_LOAD 0x200
-
- /* The section contains thread local data. */
-#define SEC_THREAD_LOCAL 0x400
-
- /* The section has GOT references. This flag is only for the
- linker, and is currently only used by the elf32-hppa back end.
- It will be set if global offset table references were detected
- in this section, which indicate to the linker that the section
- contains PIC code, and must be handled specially when doing a
- static link. */
-#define SEC_HAS_GOT_REF 0x800
-
- /* The section contains common symbols (symbols may be defined
- multiple times, the value of a symbol is the amount of
- space it requires, and the largest symbol value is the one
- used). Most targets have exactly one of these (which we
- translate to bfd_com_section_ptr), but ECOFF has two. */
-#define SEC_IS_COMMON 0x1000
-
- /* The section contains only debugging information. For
- example, this is set for ELF .debug and .stab sections.
- strip tests this flag to see if a section can be
- discarded. */
-#define SEC_DEBUGGING 0x2000
-
- /* The contents of this section are held in memory pointed to
- by the contents field. This is checked by bfd_get_section_contents,
- and the data is retrieved from memory if appropriate. */
-#define SEC_IN_MEMORY 0x4000
-
- /* The contents of this section are to be excluded by the
- linker for executable and shared objects unless those
- objects are to be further relocated. */
-#define SEC_EXCLUDE 0x8000
-
- /* The contents of this section are to be sorted based on the sum of
- the symbol and addend values specified by the associated relocation
- entries. Entries without associated relocation entries will be
- appended to the end of the section in an unspecified order. */
-#define SEC_SORT_ENTRIES 0x10000
-
- /* When linking, duplicate sections of the same name should be
- discarded, rather than being combined into a single section as
- is usually done. This is similar to how common symbols are
- handled. See SEC_LINK_DUPLICATES below. */
-#define SEC_LINK_ONCE 0x20000
-
- /* If SEC_LINK_ONCE is set, this bitfield describes how the linker
- should handle duplicate sections. */
-#define SEC_LINK_DUPLICATES 0x40000
-
- /* This value for SEC_LINK_DUPLICATES means that duplicate
- sections with the same name should simply be discarded. */
-#define SEC_LINK_DUPLICATES_DISCARD 0x0
-
- /* This value for SEC_LINK_DUPLICATES means that the linker
- should warn if there are any duplicate sections, although
- it should still only link one copy. */
-#define SEC_LINK_DUPLICATES_ONE_ONLY 0x80000
-
- /* This value for SEC_LINK_DUPLICATES means that the linker
- should warn if any duplicate sections are a different size. */
-#define SEC_LINK_DUPLICATES_SAME_SIZE 0x100000
-
- /* This value for SEC_LINK_DUPLICATES means that the linker
- should warn if any duplicate sections contain different
- contents. */
-#define SEC_LINK_DUPLICATES_SAME_CONTENTS \
- (SEC_LINK_DUPLICATES_ONE_ONLY | SEC_LINK_DUPLICATES_SAME_SIZE)
-
- /* This section was created by the linker as part of dynamic
- relocation or other arcane processing. It is skipped when
- going through the first-pass output, trusting that someone
- else up the line will take care of it later. */
-#define SEC_LINKER_CREATED 0x200000
-
- /* This section should not be subject to garbage collection. */
-#define SEC_KEEP 0x400000
-
- /* This section contains "short" data, and should be placed
- "near" the GP. */
-#define SEC_SMALL_DATA 0x800000
-
- /* Attempt to merge identical entities in the section.
- Entity size is given in the entsize field. */
-#define SEC_MERGE 0x1000000
-
- /* If given with SEC_MERGE, entities to merge are zero terminated
- strings where entsize specifies character size instead of fixed
- size entries. */
-#define SEC_STRINGS 0x2000000
-
- /* This section contains data about section groups. */
-#define SEC_GROUP 0x4000000
-
- /* The section is a COFF shared library section. This flag is
- only for the linker. If this type of section appears in
- the input file, the linker must copy it to the output file
- without changing the vma or size. FIXME: Although this
- was originally intended to be general, it really is COFF
- specific (and the flag was renamed to indicate this). It
- might be cleaner to have some more general mechanism to
- allow the back end to control what the linker does with
- sections. */
-#define SEC_COFF_SHARED_LIBRARY 0x10000000
-
- /* This section contains data which may be shared with other
- executables or shared objects. This is for COFF only. */
-#define SEC_COFF_SHARED 0x20000000
-
- /* When a section with this flag is being linked, then if the size of
- the input section is less than a page, it should not cross a page
- boundary. If the size of the input section is one page or more,
- it should be aligned on a page boundary. This is for TI
- TMS320C54X only. */
-#define SEC_TIC54X_BLOCK 0x40000000
-
- /* Conditionally link this section; do not link if there are no
- references found to any symbol in the section. This is for TI
- TMS320C54X only. */
-#define SEC_TIC54X_CLINK 0x80000000
-
- /* End of section flags. */
-
- /* Some internal packed boolean fields. */
-
- /* See the vma field. */
- unsigned int user_set_vma : 1;
-
- /* A mark flag used by some of the linker backends. */
- unsigned int linker_mark : 1;
-
- /* Another mark flag used by some of the linker backends. Set for
- output sections that have an input section. */
- unsigned int linker_has_input : 1;
-
- /* Mark flags used by some linker backends for garbage collection. */
- unsigned int gc_mark : 1;
- unsigned int gc_mark_from_eh : 1;
-
- /* The following flags are used by the ELF linker. */
-
- /* Mark sections which have been allocated to segments. */
- unsigned int segment_mark : 1;
-
- /* Type of sec_info information. */
- unsigned int sec_info_type:3;
-#define ELF_INFO_TYPE_NONE 0
-#define ELF_INFO_TYPE_STABS 1
-#define ELF_INFO_TYPE_MERGE 2
-#define ELF_INFO_TYPE_EH_FRAME 3
-#define ELF_INFO_TYPE_JUST_SYMS 4
-
- /* Nonzero if this section uses RELA relocations, rather than REL. */
- unsigned int use_rela_p:1;
-
- /* Bits used by various backends. The generic code doesn't touch
- these fields. */
-
- /* Nonzero if this section has TLS related relocations. */
- unsigned int has_tls_reloc:1;
-
- /* Nonzero if this section has a gp reloc. */
- unsigned int has_gp_reloc:1;
-
- /* Nonzero if this section needs the relax finalize pass. */
- unsigned int need_finalize_relax:1;
-
- /* Whether relocations have been processed. */
- unsigned int reloc_done : 1;
-
- /* End of internal packed boolean fields. */
-
- /* The virtual memory address of the section - where it will be
- at run time. The symbols are relocated against this. The
- user_set_vma flag is maintained by bfd; if it's not set, the
- backend can assign addresses (for example, in @code{a.out}, where
- the default address for @code{.data} is dependent on the specific
- target and various flags). */
- bfd_vma vma;
-
- /* The load address of the section - where it would be in a
- rom image; really only used for writing section header
- information. */
- bfd_vma lma;
-
- /* The size of the section in octets, as it will be output.
- Contains a value even if the section has no contents (e.g., the
- size of @code{.bss}). */
- bfd_size_type size;
-
- /* For input sections, the original size on disk of the section, in
- octets. This field is used by the linker relaxation code. It is
- currently only set for sections where the linker relaxation scheme
- doesn't cache altered section and reloc contents (stabs, eh_frame,
- SEC_MERGE, some coff relaxing targets), and thus the original size
- needs to be kept to read the section multiple times.
- For output sections, rawsize holds the section size calculated on
- a previous linker relaxation pass. */
- bfd_size_type rawsize;
-
- /* If this section is going to be output, then this value is the
- offset in *bytes* into the output section of the first byte in the
- input section (byte ==> smallest addressable unit on the
- target). In most cases, if this was going to start at the
- 100th octet (8-bit quantity) in the output section, this value
- would be 100. However, if the target byte size is 16 bits
- (bfd_octets_per_byte is "2"), this value would be 50. */
- bfd_vma output_offset;
-
- /* The output section through which to map on output. */
- struct bfd_section *output_section;
-
- /* The alignment requirement of the section, as an exponent of 2 -
- e.g., 3 aligns to 2^3 (or 8). */
- unsigned int alignment_power;
-
- /* If an input section, a pointer to a vector of relocation
- records for the data in this section. */
- struct reloc_cache_entry *relocation;
-
- /* If an output section, a pointer to a vector of pointers to
- relocation records for the data in this section. */
- struct reloc_cache_entry **orelocation;
-
- /* The number of relocation records in one of the above. */
- unsigned reloc_count;
-
- /* Information below is back end specific - and not always used
- or updated. */
-
- /* File position of section data. */
- file_ptr filepos;
-
- /* File position of relocation info. */
- file_ptr rel_filepos;
-
- /* File position of line data. */
- file_ptr line_filepos;
-
- /* Pointer to data for applications. */
- void *userdata;
-
- /* If the SEC_IN_MEMORY flag is set, this points to the actual
- contents. */
- unsigned char *contents;
-
- /* Attached line number information. */
- alent *lineno;
-
- /* Number of line number records. */
- unsigned int lineno_count;
-
- /* Entity size for merging purposes. */
- unsigned int entsize;
-
- /* Points to the kept section if this section is a link-once section,
- and is discarded. */
- struct bfd_section *kept_section;
-
- /* When a section is being output, this value changes as more
- linenumbers are written out. */
- file_ptr moving_line_filepos;
-
- /* What the section number is in the target world. */
- int target_index;
-
- void *used_by_bfd;
-
- /* If this is a constructor section then here is a list of the
- relocations created to relocate items within it. */
- struct relent_chain *constructor_chain;
-
- /* The BFD which owns the section. */
- bfd *owner;
-
- /* A symbol which points at this section only. */
- struct bfd_symbol *symbol;
- struct bfd_symbol **symbol_ptr_ptr;
-
- /* Early in the link process, map_head and map_tail are used to build
- a list of input sections attached to an output section. Later,
- output sections use these fields for a list of bfd_link_order
- structs. */
- union @{
- struct bfd_link_order *link_order;
- struct bfd_section *s;
- @} map_head, map_tail;
-@} asection;
-
-/* These sections are global, and are managed by BFD. The application
- and target back end are not permitted to change the values in
- these sections. New code should use the section_ptr macros rather
- than referring directly to the const sections. The const sections
- may eventually vanish. */
-#define BFD_ABS_SECTION_NAME "*ABS*"
-#define BFD_UND_SECTION_NAME "*UND*"
-#define BFD_COM_SECTION_NAME "*COM*"
-#define BFD_IND_SECTION_NAME "*IND*"
-
-/* The absolute section. */
-extern asection bfd_abs_section;
-#define bfd_abs_section_ptr ((asection *) &bfd_abs_section)
-#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
-/* Pointer to the undefined section. */
-extern asection bfd_und_section;
-#define bfd_und_section_ptr ((asection *) &bfd_und_section)
-#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
-/* Pointer to the common section. */
-extern asection bfd_com_section;
-#define bfd_com_section_ptr ((asection *) &bfd_com_section)
-/* Pointer to the indirect section. */
-extern asection bfd_ind_section;
-#define bfd_ind_section_ptr ((asection *) &bfd_ind_section)
-#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
-
-#define bfd_is_const_section(SEC) \
- ( ((SEC) == bfd_abs_section_ptr) \
- || ((SEC) == bfd_und_section_ptr) \
- || ((SEC) == bfd_com_section_ptr) \
- || ((SEC) == bfd_ind_section_ptr))
-
-extern const struct bfd_symbol * const bfd_abs_symbol;
-extern const struct bfd_symbol * const bfd_com_symbol;
-extern const struct bfd_symbol * const bfd_und_symbol;
-extern const struct bfd_symbol * const bfd_ind_symbol;
-
-/* Macros to handle insertion and deletion of a bfd's sections. These
- only handle the list pointers, ie. do not adjust section_count,
- target_index etc. */
-#define bfd_section_list_remove(ABFD, S) \
- do \
- @{ \
- asection *_s = S; \
- asection *_next = _s->next; \
- asection *_prev = _s->prev; \
- if (_prev) \
- _prev->next = _next; \
- else \
- (ABFD)->sections = _next; \
- if (_next) \
- _next->prev = _prev; \
- else \
- (ABFD)->section_last = _prev; \
- @} \
- while (0)
-#define bfd_section_list_append(ABFD, S) \
- do \
- @{ \
- asection *_s = S; \
- bfd *_abfd = ABFD; \
- _s->next = NULL; \
- if (_abfd->section_last) \
- @{ \
- _s->prev = _abfd->section_last; \
- _abfd->section_last->next = _s; \
- @} \
- else \
- @{ \
- _s->prev = NULL; \
- _abfd->sections = _s; \
- @} \
- _abfd->section_last = _s; \
- @} \
- while (0)
-#define bfd_section_list_prepend(ABFD, S) \
- do \
- @{ \
- asection *_s = S; \
- bfd *_abfd = ABFD; \
- _s->prev = NULL; \
- if (_abfd->sections) \
- @{ \
- _s->next = _abfd->sections; \
- _abfd->sections->prev = _s; \
- @} \
- else \
- @{ \
- _s->next = NULL; \
- _abfd->section_last = _s; \
- @} \
- _abfd->sections = _s; \
- @} \
- while (0)
-#define bfd_section_list_insert_after(ABFD, A, S) \
- do \
- @{ \
- asection *_a = A; \
- asection *_s = S; \
- asection *_next = _a->next; \
- _s->next = _next; \
- _s->prev = _a; \
- _a->next = _s; \
- if (_next) \
- _next->prev = _s; \
- else \
- (ABFD)->section_last = _s; \
- @} \
- while (0)
-#define bfd_section_list_insert_before(ABFD, B, S) \
- do \
- @{ \
- asection *_b = B; \
- asection *_s = S; \
- asection *_prev = _b->prev; \
- _s->prev = _prev; \
- _s->next = _b; \
- _b->prev = _s; \
- if (_prev) \
- _prev->next = _s; \
- else \
- (ABFD)->sections = _s; \
- @} \
- while (0)
-#define bfd_section_removed_from_list(ABFD, S) \
- ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
-
-#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, SYM_PTR, NAME, IDX) \
- /* name, id, index, next, prev, flags, user_set_vma, */ \
- @{ NAME, IDX, 0, NULL, NULL, FLAGS, 0, \
- \
- /* linker_mark, linker_has_input, gc_mark, gc_mark_from_eh, */ \
- 0, 0, 1, 0, \
- \
- /* segment_mark, sec_info_type, use_rela_p, has_tls_reloc, */ \
- 0, 0, 0, 0, \
- \
- /* has_gp_reloc, need_finalize_relax, reloc_done, */ \
- 0, 0, 0, \
- \
- /* vma, lma, size, rawsize */ \
- 0, 0, 0, 0, \
- \
- /* output_offset, output_section, alignment_power, */ \
- 0, (struct bfd_section *) &SEC, 0, \
- \
- /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \
- NULL, NULL, 0, 0, 0, \
- \
- /* line_filepos, userdata, contents, lineno, lineno_count, */ \
- 0, NULL, NULL, NULL, 0, \
- \
- /* entsize, kept_section, moving_line_filepos, */ \
- 0, NULL, 0, \
- \
- /* target_index, used_by_bfd, constructor_chain, owner, */ \
- 0, NULL, NULL, NULL, \
- \
- /* symbol, */ \
- (struct bfd_symbol *) SYM, \
- \
- /* symbol_ptr_ptr, */ \
- (struct bfd_symbol **) SYM_PTR, \
- \
- /* map_head, map_tail */ \
- @{ NULL @}, @{ NULL @} \
- @}
-
-@end example
-
-@node section prototypes, , typedef asection, Sections
-@subsection Section prototypes
-These are the functions exported by the section handling part of BFD.
-
-@findex bfd_section_list_clear
-@subsubsection @code{bfd_section_list_clear}
-@strong{Synopsis}
-@example
-void bfd_section_list_clear (bfd *);
-@end example
-@strong{Description}@*
-Clears the section list, and also resets the section count and
-hash table entries.
-
-@findex bfd_get_section_by_name
-@subsubsection @code{bfd_get_section_by_name}
-@strong{Synopsis}
-@example
-asection *bfd_get_section_by_name (bfd *abfd, const char *name);
-@end example
-@strong{Description}@*
-Run through @var{abfd} and return the one of the
-@code{asection}s whose name matches @var{name}, otherwise @code{NULL}.
-@xref{Sections}, for more information.
-
-This should only be used in special cases; the normal way to process
-all sections of a given name is to use @code{bfd_map_over_sections} and
-@code{strcmp} on the name (or better yet, base it on the section flags
-or something else) for each section.
-
-@findex bfd_get_section_by_name_if
-@subsubsection @code{bfd_get_section_by_name_if}
-@strong{Synopsis}
-@example
-asection *bfd_get_section_by_name_if
- (bfd *abfd,
- const char *name,
- bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
- void *obj);
-@end example
-@strong{Description}@*
-Call the provided function @var{func} for each section
-attached to the BFD @var{abfd} whose name matches @var{name},
-passing @var{obj} as an argument. The function will be called
-as if by
-
-@example
- func (abfd, the_section, obj);
-@end example
-
-It returns the first section for which @var{func} returns true,
-otherwise @code{NULL}.
-
-@findex bfd_get_unique_section_name
-@subsubsection @code{bfd_get_unique_section_name}
-@strong{Synopsis}
-@example
-char *bfd_get_unique_section_name
- (bfd *abfd, const char *templat, int *count);
-@end example
-@strong{Description}@*
-Invent a section name that is unique in @var{abfd} by tacking
-a dot and a digit suffix onto the original @var{templat}. If
-@var{count} is non-NULL, then it specifies the first number
-tried as a suffix to generate a unique name. The value
-pointed to by @var{count} will be incremented in this case.
-
-@findex bfd_make_section_old_way
-@subsubsection @code{bfd_make_section_old_way}
-@strong{Synopsis}
-@example
-asection *bfd_make_section_old_way (bfd *abfd, const char *name);
-@end example
-@strong{Description}@*
-Create a new empty section called @var{name}
-and attach it to the end of the chain of sections for the
-BFD @var{abfd}. An attempt to create a section with a name which
-is already in use returns its pointer without changing the
-section chain.
-
-It has the funny name since this is the way it used to be
-before it was rewritten....
-
-Possible errors are:
-@itemize @bullet
-
-@item
-@code{bfd_error_invalid_operation} -
-If output has already started for this BFD.
-@item
-@code{bfd_error_no_memory} -
-If memory allocation fails.
-@end itemize
-
-@findex bfd_make_section_anyway_with_flags
-@subsubsection @code{bfd_make_section_anyway_with_flags}
-@strong{Synopsis}
-@example
-asection *bfd_make_section_anyway_with_flags
- (bfd *abfd, const char *name, flagword flags);
-@end example
-@strong{Description}@*
-Create a new empty section called @var{name} and attach it to the end of
-the chain of sections for @var{abfd}. Create a new section even if there
-is already a section with that name. Also set the attributes of the
-new section to the value @var{flags}.
-
-Return @code{NULL} and set @code{bfd_error} on error; possible errors are:
-@itemize @bullet
-
-@item
-@code{bfd_error_invalid_operation} - If output has already started for @var{abfd}.
-@item
-@code{bfd_error_no_memory} - If memory allocation fails.
-@end itemize
-
-@findex bfd_make_section_anyway
-@subsubsection @code{bfd_make_section_anyway}
-@strong{Synopsis}
-@example
-asection *bfd_make_section_anyway (bfd *abfd, const char *name);
-@end example
-@strong{Description}@*
-Create a new empty section called @var{name} and attach it to the end of
-the chain of sections for @var{abfd}. Create a new section even if there
-is already a section with that name.
-
-Return @code{NULL} and set @code{bfd_error} on error; possible errors are:
-@itemize @bullet
-
-@item
-@code{bfd_error_invalid_operation} - If output has already started for @var{abfd}.
-@item
-@code{bfd_error_no_memory} - If memory allocation fails.
-@end itemize
-
-@findex bfd_make_section_with_flags
-@subsubsection @code{bfd_make_section_with_flags}
-@strong{Synopsis}
-@example
-asection *bfd_make_section_with_flags
- (bfd *, const char *name, flagword flags);
-@end example
-@strong{Description}@*
-Like @code{bfd_make_section_anyway}, but return @code{NULL} (without calling
-bfd_set_error ()) without changing the section chain if there is already a
-section named @var{name}. Also set the attributes of the new section to
-the value @var{flags}. If there is an error, return @code{NULL} and set
-@code{bfd_error}.
-
-@findex bfd_make_section
-@subsubsection @code{bfd_make_section}
-@strong{Synopsis}
-@example
-asection *bfd_make_section (bfd *, const char *name);
-@end example
-@strong{Description}@*
-Like @code{bfd_make_section_anyway}, but return @code{NULL} (without calling
-bfd_set_error ()) without changing the section chain if there is already a
-section named @var{name}. If there is an error, return @code{NULL} and set
-@code{bfd_error}.
-
-@findex bfd_set_section_flags
-@subsubsection @code{bfd_set_section_flags}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_section_flags
- (bfd *abfd, asection *sec, flagword flags);
-@end example
-@strong{Description}@*
-Set the attributes of the section @var{sec} in the BFD
-@var{abfd} to the value @var{flags}. Return @code{TRUE} on success,
-@code{FALSE} on error. Possible error returns are:
-
-@itemize @bullet
-
-@item
-@code{bfd_error_invalid_operation} -
-The section cannot have one or more of the attributes
-requested. For example, a .bss section in @code{a.out} may not
-have the @code{SEC_HAS_CONTENTS} field set.
-@end itemize
-
-@findex bfd_map_over_sections
-@subsubsection @code{bfd_map_over_sections}
-@strong{Synopsis}
-@example
-void bfd_map_over_sections
- (bfd *abfd,
- void (*func) (bfd *abfd, asection *sect, void *obj),
- void *obj);
-@end example
-@strong{Description}@*
-Call the provided function @var{func} for each section
-attached to the BFD @var{abfd}, passing @var{obj} as an
-argument. The function will be called as if by
-
-@example
- func (abfd, the_section, obj);
-@end example
-
-This is the preferred method for iterating over sections; an
-alternative would be to use a loop:
-
-@example
- section *p;
- for (p = abfd->sections; p != NULL; p = p->next)
- func (abfd, p, ...)
-@end example
-
-@findex bfd_sections_find_if
-@subsubsection @code{bfd_sections_find_if}
-@strong{Synopsis}
-@example
-asection *bfd_sections_find_if
- (bfd *abfd,
- bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj),
- void *obj);
-@end example
-@strong{Description}@*
-Call the provided function @var{operation} for each section
-attached to the BFD @var{abfd}, passing @var{obj} as an
-argument. The function will be called as if by
-
-@example
- operation (abfd, the_section, obj);
-@end example
-
-It returns the first section for which @var{operation} returns true.
-
-@findex bfd_set_section_size
-@subsubsection @code{bfd_set_section_size}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_section_size
- (bfd *abfd, asection *sec, bfd_size_type val);
-@end example
-@strong{Description}@*
-Set @var{sec} to the size @var{val}. If the operation is
-ok, then @code{TRUE} is returned, else @code{FALSE}.
-
-Possible error returns:
-@itemize @bullet
-
-@item
-@code{bfd_error_invalid_operation} -
-Writing has started to the BFD, so setting the size is invalid.
-@end itemize
-
-@findex bfd_set_section_contents
-@subsubsection @code{bfd_set_section_contents}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_section_contents
- (bfd *abfd, asection *section, const void *data,
- file_ptr offset, bfd_size_type count);
-@end example
-@strong{Description}@*
-Sets the contents of the section @var{section} in BFD
-@var{abfd} to the data starting in memory at @var{data}. The
-data is written to the output section starting at offset
-@var{offset} for @var{count} octets.
-
-Normally @code{TRUE} is returned, else @code{FALSE}. Possible error
-returns are:
-@itemize @bullet
-
-@item
-@code{bfd_error_no_contents} -
-The output section does not have the @code{SEC_HAS_CONTENTS}
-attribute, so nothing can be written to it.
-@item
-and some more too
-@end itemize
-This routine is front end to the back end function
-@code{_bfd_set_section_contents}.
-
-@findex bfd_get_section_contents
-@subsubsection @code{bfd_get_section_contents}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_get_section_contents
- (bfd *abfd, asection *section, void *location, file_ptr offset,
- bfd_size_type count);
-@end example
-@strong{Description}@*
-Read data from @var{section} in BFD @var{abfd}
-into memory starting at @var{location}. The data is read at an
-offset of @var{offset} from the start of the input section,
-and is read for @var{count} bytes.
-
-If the contents of a constructor with the @code{SEC_CONSTRUCTOR}
-flag set are requested or if the section does not have the
-@code{SEC_HAS_CONTENTS} flag set, then the @var{location} is filled
-with zeroes. If no errors occur, @code{TRUE} is returned, else
-@code{FALSE}.
-
-@findex bfd_malloc_and_get_section
-@subsubsection @code{bfd_malloc_and_get_section}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_malloc_and_get_section
- (bfd *abfd, asection *section, bfd_byte **buf);
-@end example
-@strong{Description}@*
-Read all data from @var{section} in BFD @var{abfd}
-into a buffer, *@var{buf}, malloc'd by this function.
-
-@findex bfd_copy_private_section_data
-@subsubsection @code{bfd_copy_private_section_data}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_copy_private_section_data
- (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
-@end example
-@strong{Description}@*
-Copy private section information from @var{isec} in the BFD
-@var{ibfd} to the section @var{osec} in the BFD @var{obfd}.
-Return @code{TRUE} on success, @code{FALSE} on error. Possible error
-returns are:
-
-@itemize @bullet
-
-@item
-@code{bfd_error_no_memory} -
-Not enough memory exists to create private data for @var{osec}.
-@end itemize
-@example
-#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
- BFD_SEND (obfd, _bfd_copy_private_section_data, \
- (ibfd, isection, obfd, osection))
-@end example
-
-@findex bfd_generic_is_group_section
-@subsubsection @code{bfd_generic_is_group_section}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
-@end example
-@strong{Description}@*
-Returns TRUE if @var{sec} is a member of a group.
-
-@findex bfd_generic_discard_group
-@subsubsection @code{bfd_generic_discard_group}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
-@end example
-@strong{Description}@*
-Remove all members of @var{group} from the output.
-
diff --git a/bfd/doc/syms.texi b/bfd/doc/syms.texi
deleted file mode 100644
index dc56bbc7e1b5..000000000000
--- a/bfd/doc/syms.texi
+++ /dev/null
@@ -1,461 +0,0 @@
-@section Symbols
-BFD tries to maintain as much symbol information as it can when
-it moves information from file to file. BFD passes information
-to applications though the @code{asymbol} structure. When the
-application requests the symbol table, BFD reads the table in
-the native form and translates parts of it into the internal
-format. To maintain more than the information passed to
-applications, some targets keep some information ``behind the
-scenes'' in a structure only the particular back end knows
-about. For example, the coff back end keeps the original
-symbol table structure as well as the canonical structure when
-a BFD is read in. On output, the coff back end can reconstruct
-the output symbol table so that no information is lost, even
-information unique to coff which BFD doesn't know or
-understand. If a coff symbol table were read, but were written
-through an a.out back end, all the coff specific information
-would be lost. The symbol table of a BFD
-is not necessarily read in until a canonicalize request is
-made. Then the BFD back end fills in a table provided by the
-application with pointers to the canonical information. To
-output symbols, the application provides BFD with a table of
-pointers to pointers to @code{asymbol}s. This allows applications
-like the linker to output a symbol as it was read, since the ``behind
-the scenes'' information will be still available.
-@menu
-* Reading Symbols::
-* Writing Symbols::
-* Mini Symbols::
-* typedef asymbol::
-* symbol handling functions::
-@end menu
-
-@node Reading Symbols, Writing Symbols, Symbols, Symbols
-@subsection Reading symbols
-There are two stages to reading a symbol table from a BFD:
-allocating storage, and the actual reading process. This is an
-excerpt from an application which reads the symbol table:
-
-@example
- long storage_needed;
- asymbol **symbol_table;
- long number_of_symbols;
- long i;
-
- storage_needed = bfd_get_symtab_upper_bound (abfd);
-
- if (storage_needed < 0)
- FAIL
-
- if (storage_needed == 0)
- return;
-
- symbol_table = xmalloc (storage_needed);
- ...
- number_of_symbols =
- bfd_canonicalize_symtab (abfd, symbol_table);
-
- if (number_of_symbols < 0)
- FAIL
-
- for (i = 0; i < number_of_symbols; i++)
- process_symbol (symbol_table[i]);
-@end example
-
-All storage for the symbols themselves is in an objalloc
-connected to the BFD; it is freed when the BFD is closed.
-
-@node Writing Symbols, Mini Symbols, Reading Symbols, Symbols
-@subsection Writing symbols
-Writing of a symbol table is automatic when a BFD open for
-writing is closed. The application attaches a vector of
-pointers to pointers to symbols to the BFD being written, and
-fills in the symbol count. The close and cleanup code reads
-through the table provided and performs all the necessary
-operations. The BFD output code must always be provided with an
-``owned'' symbol: one which has come from another BFD, or one
-which has been created using @code{bfd_make_empty_symbol}. Here is an
-example showing the creation of a symbol table with only one element:
-
-@example
- #include "bfd.h"
- int main (void)
- @{
- bfd *abfd;
- asymbol *ptrs[2];
- asymbol *new;
-
- abfd = bfd_openw ("foo","a.out-sunos-big");
- bfd_set_format (abfd, bfd_object);
- new = bfd_make_empty_symbol (abfd);
- new->name = "dummy_symbol";
- new->section = bfd_make_section_old_way (abfd, ".text");
- new->flags = BSF_GLOBAL;
- new->value = 0x12345;
-
- ptrs[0] = new;
- ptrs[1] = 0;
-
- bfd_set_symtab (abfd, ptrs, 1);
- bfd_close (abfd);
- return 0;
- @}
-
- ./makesym
- nm foo
- 00012345 A dummy_symbol
-@end example
-
-Many formats cannot represent arbitrary symbol information; for
-instance, the @code{a.out} object format does not allow an
-arbitrary number of sections. A symbol pointing to a section
-which is not one of @code{.text}, @code{.data} or @code{.bss} cannot
-be described.
-
-@node Mini Symbols, typedef asymbol, Writing Symbols, Symbols
-@subsection Mini Symbols
-Mini symbols provide read-only access to the symbol table.
-They use less memory space, but require more time to access.
-They can be useful for tools like nm or objdump, which may
-have to handle symbol tables of extremely large executables.
-
-The @code{bfd_read_minisymbols} function will read the symbols
-into memory in an internal form. It will return a @code{void *}
-pointer to a block of memory, a symbol count, and the size of
-each symbol. The pointer is allocated using @code{malloc}, and
-should be freed by the caller when it is no longer needed.
-
-The function @code{bfd_minisymbol_to_symbol} will take a pointer
-to a minisymbol, and a pointer to a structure returned by
-@code{bfd_make_empty_symbol}, and return a @code{asymbol} structure.
-The return value may or may not be the same as the value from
-@code{bfd_make_empty_symbol} which was passed in.
-
-
-@node typedef asymbol, symbol handling functions, Mini Symbols, Symbols
-@subsection typedef asymbol
-An @code{asymbol} has the form:
-
-
-@example
-
-typedef struct bfd_symbol
-@{
- /* A pointer to the BFD which owns the symbol. This information
- is necessary so that a back end can work out what additional
- information (invisible to the application writer) is carried
- with the symbol.
-
- This field is *almost* redundant, since you can use section->owner
- instead, except that some symbols point to the global sections
- bfd_@{abs,com,und@}_section. This could be fixed by making
- these globals be per-bfd (or per-target-flavor). FIXME. */
- struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field. */
-
- /* The text of the symbol. The name is left alone, and not copied; the
- application may not alter it. */
- const char *name;
-
- /* The value of the symbol. This really should be a union of a
- numeric value with a pointer, since some flags indicate that
- a pointer to another symbol is stored here. */
- symvalue value;
-
- /* Attributes of a symbol. */
-#define BSF_NO_FLAGS 0x00
-
- /* The symbol has local scope; @code{static} in @code{C}. The value
- is the offset into the section of the data. */
-#define BSF_LOCAL 0x01
-
- /* The symbol has global scope; initialized data in @code{C}. The
- value is the offset into the section of the data. */
-#define BSF_GLOBAL 0x02
-
- /* The symbol has global scope and is exported. The value is
- the offset into the section of the data. */
-#define BSF_EXPORT BSF_GLOBAL /* No real difference. */
-
- /* A normal C symbol would be one of:
- @code{BSF_LOCAL}, @code{BSF_FORT_COMM}, @code{BSF_UNDEFINED} or
- @code{BSF_GLOBAL}. */
-
- /* The symbol is a debugging record. The value has an arbitrary
- meaning, unless BSF_DEBUGGING_RELOC is also set. */
-#define BSF_DEBUGGING 0x08
-
- /* The symbol denotes a function entry point. Used in ELF,
- perhaps others someday. */
-#define BSF_FUNCTION 0x10
-
- /* Used by the linker. */
-#define BSF_KEEP 0x20
-#define BSF_KEEP_G 0x40
-
- /* A weak global symbol, overridable without warnings by
- a regular global symbol of the same name. */
-#define BSF_WEAK 0x80
-
- /* This symbol was created to point to a section, e.g. ELF's
- STT_SECTION symbols. */
-#define BSF_SECTION_SYM 0x100
-
- /* The symbol used to be a common symbol, but now it is
- allocated. */
-#define BSF_OLD_COMMON 0x200
-
- /* The default value for common data. */
-#define BFD_FORT_COMM_DEFAULT_VALUE 0
-
- /* In some files the type of a symbol sometimes alters its
- location in an output file - ie in coff a @code{ISFCN} symbol
- which is also @code{C_EXT} symbol appears where it was
- declared and not at the end of a section. This bit is set
- by the target BFD part to convey this information. */
-#define BSF_NOT_AT_END 0x400
-
- /* Signal that the symbol is the label of constructor section. */
-#define BSF_CONSTRUCTOR 0x800
-
- /* Signal that the symbol is a warning symbol. The name is a
- warning. The name of the next symbol is the one to warn about;
- if a reference is made to a symbol with the same name as the next
- symbol, a warning is issued by the linker. */
-#define BSF_WARNING 0x1000
-
- /* Signal that the symbol is indirect. This symbol is an indirect
- pointer to the symbol with the same name as the next symbol. */
-#define BSF_INDIRECT 0x2000
-
- /* BSF_FILE marks symbols that contain a file name. This is used
- for ELF STT_FILE symbols. */
-#define BSF_FILE 0x4000
-
- /* Symbol is from dynamic linking information. */
-#define BSF_DYNAMIC 0x8000
-
- /* The symbol denotes a data object. Used in ELF, and perhaps
- others someday. */
-#define BSF_OBJECT 0x10000
-
- /* This symbol is a debugging symbol. The value is the offset
- into the section of the data. BSF_DEBUGGING should be set
- as well. */
-#define BSF_DEBUGGING_RELOC 0x20000
-
- /* This symbol is thread local. Used in ELF. */
-#define BSF_THREAD_LOCAL 0x40000
-
- flagword flags;
-
- /* A pointer to the section to which this symbol is
- relative. This will always be non NULL, there are special
- sections for undefined and absolute symbols. */
- struct bfd_section *section;
-
- /* Back end special data. */
- union
- @{
- void *p;
- bfd_vma i;
- @}
- udata;
-@}
-asymbol;
-
-@end example
-
-@node symbol handling functions, , typedef asymbol, Symbols
-@subsection Symbol handling functions
-
-
-@findex bfd_get_symtab_upper_bound
-@subsubsection @code{bfd_get_symtab_upper_bound}
-@strong{Description}@*
-Return the number of bytes required to store a vector of pointers
-to @code{asymbols} for all the symbols in the BFD @var{abfd},
-including a terminal NULL pointer. If there are no symbols in
-the BFD, then return 0. If an error occurs, return -1.
-@example
-#define bfd_get_symtab_upper_bound(abfd) \
- BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
-
-@end example
-
-@findex bfd_is_local_label
-@subsubsection @code{bfd_is_local_label}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);
-@end example
-@strong{Description}@*
-Return TRUE if the given symbol @var{sym} in the BFD @var{abfd} is
-a compiler generated local label, else return FALSE.
-
-@findex bfd_is_local_label_name
-@subsubsection @code{bfd_is_local_label_name}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
-@end example
-@strong{Description}@*
-Return TRUE if a symbol with the name @var{name} in the BFD
-@var{abfd} is a compiler generated local label, else return
-FALSE. This just checks whether the name has the form of a
-local label.
-@example
-#define bfd_is_local_label_name(abfd, name) \
- BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
-
-@end example
-
-@findex bfd_is_target_special_symbol
-@subsubsection @code{bfd_is_target_special_symbol}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
-@end example
-@strong{Description}@*
-Return TRUE iff a symbol @var{sym} in the BFD @var{abfd} is something
-special to the particular target represented by the BFD. Such symbols
-should normally not be mentioned to the user.
-@example
-#define bfd_is_target_special_symbol(abfd, sym) \
- BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))
-
-@end example
-
-@findex bfd_canonicalize_symtab
-@subsubsection @code{bfd_canonicalize_symtab}
-@strong{Description}@*
-Read the symbols from the BFD @var{abfd}, and fills in
-the vector @var{location} with pointers to the symbols and
-a trailing NULL.
-Return the actual number of symbol pointers, not
-including the NULL.
-@example
-#define bfd_canonicalize_symtab(abfd, location) \
- BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location))
-
-@end example
-
-@findex bfd_set_symtab
-@subsubsection @code{bfd_set_symtab}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_symtab
- (bfd *abfd, asymbol **location, unsigned int count);
-@end example
-@strong{Description}@*
-Arrange that when the output BFD @var{abfd} is closed,
-the table @var{location} of @var{count} pointers to symbols
-will be written.
-
-@findex bfd_print_symbol_vandf
-@subsubsection @code{bfd_print_symbol_vandf}
-@strong{Synopsis}
-@example
-void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
-@end example
-@strong{Description}@*
-Print the value and flags of the @var{symbol} supplied to the
-stream @var{file}.
-
-@findex bfd_make_empty_symbol
-@subsubsection @code{bfd_make_empty_symbol}
-@strong{Description}@*
-Create a new @code{asymbol} structure for the BFD @var{abfd}
-and return a pointer to it.
-
-This routine is necessary because each back end has private
-information surrounding the @code{asymbol}. Building your own
-@code{asymbol} and pointing to it will not create the private
-information, and will cause problems later on.
-@example
-#define bfd_make_empty_symbol(abfd) \
- BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
-
-@end example
-
-@findex _bfd_generic_make_empty_symbol
-@subsubsection @code{_bfd_generic_make_empty_symbol}
-@strong{Synopsis}
-@example
-asymbol *_bfd_generic_make_empty_symbol (bfd *);
-@end example
-@strong{Description}@*
-Create a new @code{asymbol} structure for the BFD @var{abfd}
-and return a pointer to it. Used by core file routines,
-binary back-end and anywhere else where no private info
-is needed.
-
-@findex bfd_make_debug_symbol
-@subsubsection @code{bfd_make_debug_symbol}
-@strong{Description}@*
-Create a new @code{asymbol} structure for the BFD @var{abfd},
-to be used as a debugging symbol. Further details of its use have
-yet to be worked out.
-@example
-#define bfd_make_debug_symbol(abfd,ptr,size) \
- BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
-
-@end example
-
-@findex bfd_decode_symclass
-@subsubsection @code{bfd_decode_symclass}
-@strong{Description}@*
-Return a character corresponding to the symbol
-class of @var{symbol}, or '?' for an unknown class.
-
-@strong{Synopsis}
-@example
-int bfd_decode_symclass (asymbol *symbol);
-@end example
-@findex bfd_is_undefined_symclass
-@subsubsection @code{bfd_is_undefined_symclass}
-@strong{Description}@*
-Returns non-zero if the class symbol returned by
-bfd_decode_symclass represents an undefined symbol.
-Returns zero otherwise.
-
-@strong{Synopsis}
-@example
-bfd_boolean bfd_is_undefined_symclass (int symclass);
-@end example
-@findex bfd_symbol_info
-@subsubsection @code{bfd_symbol_info}
-@strong{Description}@*
-Fill in the basic info about symbol that nm needs.
-Additional info may be added by the back-ends after
-calling this function.
-
-@strong{Synopsis}
-@example
-void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
-@end example
-@findex bfd_copy_private_symbol_data
-@subsubsection @code{bfd_copy_private_symbol_data}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_copy_private_symbol_data
- (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
-@end example
-@strong{Description}@*
-Copy private symbol information from @var{isym} in the BFD
-@var{ibfd} to the symbol @var{osym} in the BFD @var{obfd}.
-Return @code{TRUE} on success, @code{FALSE} on error. Possible error
-returns are:
-
-@itemize @bullet
-
-@item
-@code{bfd_error_no_memory} -
-Not enough memory exists to create private data for @var{osec}.
-@end itemize
-@example
-#define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
- BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
- (ibfd, isymbol, obfd, osymbol))
-
-@end example
-
diff --git a/bfd/doc/targets.texi b/bfd/doc/targets.texi
deleted file mode 100644
index a85c84911080..000000000000
--- a/bfd/doc/targets.texi
+++ /dev/null
@@ -1,551 +0,0 @@
-@section Targets
-
-
-@strong{Description}@*
-Each port of BFD to a different machine requires the creation
-of a target back end. All the back end provides to the root
-part of BFD is a structure containing pointers to functions
-which perform certain low level operations on files. BFD
-translates the applications's requests through a pointer into
-calls to the back end routines.
-
-When a file is opened with @code{bfd_openr}, its format and
-target are unknown. BFD uses various mechanisms to determine
-how to interpret the file. The operations performed are:
-
-@itemize @bullet
-
-@item
-Create a BFD by calling the internal routine
-@code{_bfd_new_bfd}, then call @code{bfd_find_target} with the
-target string supplied to @code{bfd_openr} and the new BFD pointer.
-
-@item
-If a null target string was provided to @code{bfd_find_target},
-look up the environment variable @code{GNUTARGET} and use
-that as the target string.
-
-@item
-If the target string is still @code{NULL}, or the target string is
-@code{default}, then use the first item in the target vector
-as the target type, and set @code{target_defaulted} in the BFD to
-cause @code{bfd_check_format} to loop through all the targets.
-@xref{bfd_target}. @xref{Formats}.
-
-@item
-Otherwise, inspect the elements in the target vector
-one by one, until a match on target name is found. When found,
-use it.
-
-@item
-Otherwise return the error @code{bfd_error_invalid_target} to
-@code{bfd_openr}.
-
-@item
-@code{bfd_openr} attempts to open the file using
-@code{bfd_open_file}, and returns the BFD.
-@end itemize
-Once the BFD has been opened and the target selected, the file
-format may be determined. This is done by calling
-@code{bfd_check_format} on the BFD with a suggested format.
-If @code{target_defaulted} has been set, each possible target
-type is tried to see if it recognizes the specified format.
-@code{bfd_check_format} returns @code{TRUE} when the caller guesses right.
-@menu
-* bfd_target::
-@end menu
-
-@node bfd_target, , Targets, Targets
-
-@subsection bfd_target
-
-
-@strong{Description}@*
-This structure contains everything that BFD knows about a
-target. It includes things like its byte order, name, and which
-routines to call to do various operations.
-
-Every BFD points to a target structure with its @code{xvec}
-member.
-
-The macros below are used to dispatch to functions through the
-@code{bfd_target} vector. They are used in a number of macros further
-down in @file{bfd.h}, and are also used when calling various
-routines by hand inside the BFD implementation. The @var{arglist}
-argument must be parenthesized; it contains all the arguments
-to the called function.
-
-They make the documentation (more) unpleasant to read, so if
-someone wants to fix this and not break the above, please do.
-@example
-#define BFD_SEND(bfd, message, arglist) \
- ((*((bfd)->xvec->message)) arglist)
-
-#ifdef DEBUG_BFD_SEND
-#undef BFD_SEND
-#define BFD_SEND(bfd, message, arglist) \
- (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
- ((*((bfd)->xvec->message)) arglist) : \
- (bfd_assert (__FILE__,__LINE__), NULL))
-#endif
-@end example
-For operations which index on the BFD format:
-@example
-#define BFD_SEND_FMT(bfd, message, arglist) \
- (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist)
-
-#ifdef DEBUG_BFD_SEND
-#undef BFD_SEND_FMT
-#define BFD_SEND_FMT(bfd, message, arglist) \
- (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
- (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \
- (bfd_assert (__FILE__,__LINE__), NULL))
-#endif
-
-@end example
-This is the structure which defines the type of BFD this is. The
-@code{xvec} member of the struct @code{bfd} itself points here. Each
-module that implements access to a different target under BFD,
-defines one of these.
-
-FIXME, these names should be rationalised with the names of
-the entry points which call them. Too bad we can't have one
-macro to define them both!
-@example
-enum bfd_flavour
-@{
- bfd_target_unknown_flavour,
- bfd_target_aout_flavour,
- bfd_target_coff_flavour,
- bfd_target_ecoff_flavour,
- bfd_target_xcoff_flavour,
- bfd_target_elf_flavour,
- bfd_target_ieee_flavour,
- bfd_target_nlm_flavour,
- bfd_target_oasys_flavour,
- bfd_target_tekhex_flavour,
- bfd_target_srec_flavour,
- bfd_target_ihex_flavour,
- bfd_target_som_flavour,
- bfd_target_os9k_flavour,
- bfd_target_versados_flavour,
- bfd_target_msdos_flavour,
- bfd_target_ovax_flavour,
- bfd_target_evax_flavour,
- bfd_target_mmo_flavour,
- bfd_target_mach_o_flavour,
- bfd_target_pef_flavour,
- bfd_target_pef_xlib_flavour,
- bfd_target_sym_flavour
-@};
-
-enum bfd_endian @{ BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN @};
-
-/* Forward declaration. */
-typedef struct bfd_link_info _bfd_link_info;
-
-typedef struct bfd_target
-@{
- /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. */
- char *name;
-
- /* The "flavour" of a back end is a general indication about
- the contents of a file. */
- enum bfd_flavour flavour;
-
- /* The order of bytes within the data area of a file. */
- enum bfd_endian byteorder;
-
- /* The order of bytes within the header parts of a file. */
- enum bfd_endian header_byteorder;
-
- /* A mask of all the flags which an executable may have set -
- from the set @code{BFD_NO_FLAGS}, @code{HAS_RELOC}, ...@code{D_PAGED}. */
- flagword object_flags;
-
- /* A mask of all the flags which a section may have set - from
- the set @code{SEC_NO_FLAGS}, @code{SEC_ALLOC}, ...@code{SET_NEVER_LOAD}. */
- flagword section_flags;
-
- /* The character normally found at the front of a symbol.
- (if any), perhaps `_'. */
- char symbol_leading_char;
-
- /* The pad character for file names within an archive header. */
- char ar_pad_char;
-
- /* The maximum number of characters in an archive header. */
- unsigned short ar_max_namelen;
-
- /* Entries for byte swapping for data. These are different from the
- other entry points, since they don't take a BFD as the first argument.
- Certain other handlers could do the same. */
- bfd_uint64_t (*bfd_getx64) (const void *);
- bfd_int64_t (*bfd_getx_signed_64) (const void *);
- void (*bfd_putx64) (bfd_uint64_t, void *);
- bfd_vma (*bfd_getx32) (const void *);
- bfd_signed_vma (*bfd_getx_signed_32) (const void *);
- void (*bfd_putx32) (bfd_vma, void *);
- bfd_vma (*bfd_getx16) (const void *);
- bfd_signed_vma (*bfd_getx_signed_16) (const void *);
- void (*bfd_putx16) (bfd_vma, void *);
-
- /* Byte swapping for the headers. */
- bfd_uint64_t (*bfd_h_getx64) (const void *);
- bfd_int64_t (*bfd_h_getx_signed_64) (const void *);
- void (*bfd_h_putx64) (bfd_uint64_t, void *);
- bfd_vma (*bfd_h_getx32) (const void *);
- bfd_signed_vma (*bfd_h_getx_signed_32) (const void *);
- void (*bfd_h_putx32) (bfd_vma, void *);
- bfd_vma (*bfd_h_getx16) (const void *);
- bfd_signed_vma (*bfd_h_getx_signed_16) (const void *);
- void (*bfd_h_putx16) (bfd_vma, void *);
-
- /* Format dependent routines: these are vectors of entry points
- within the target vector structure, one for each format to check. */
-
- /* Check the format of a file being read. Return a @code{bfd_target *} or zero. */
- const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *);
-
- /* Set the format of a file being written. */
- bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);
-
- /* Write cached information into a file being written, at @code{bfd_close}. */
- bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *);
-
-@end example
-The general target vector. These vectors are initialized using the
-BFD_JUMP_TABLE macros.
-@example
-
- /* Generic entry points. */
-#define BFD_JUMP_TABLE_GENERIC(NAME) \
- NAME##_close_and_cleanup, \
- NAME##_bfd_free_cached_info, \
- NAME##_new_section_hook, \
- NAME##_get_section_contents, \
- NAME##_get_section_contents_in_window
-
- /* Called when the BFD is being closed to do any necessary cleanup. */
- bfd_boolean (*_close_and_cleanup) (bfd *);
- /* Ask the BFD to free all cached information. */
- bfd_boolean (*_bfd_free_cached_info) (bfd *);
- /* Called when a new section is created. */
- bfd_boolean (*_new_section_hook) (bfd *, sec_ptr);
- /* Read the contents of a section. */
- bfd_boolean (*_bfd_get_section_contents)
- (bfd *, sec_ptr, void *, file_ptr, bfd_size_type);
- bfd_boolean (*_bfd_get_section_contents_in_window)
- (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type);
-
- /* Entry points to copy private data. */
-#define BFD_JUMP_TABLE_COPY(NAME) \
- NAME##_bfd_copy_private_bfd_data, \
- NAME##_bfd_merge_private_bfd_data, \
- _bfd_generic_init_private_section_data, \
- NAME##_bfd_copy_private_section_data, \
- NAME##_bfd_copy_private_symbol_data, \
- NAME##_bfd_copy_private_header_data, \
- NAME##_bfd_set_private_flags, \
- NAME##_bfd_print_private_bfd_data
-
- /* Called to copy BFD general private data from one object file
- to another. */
- bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
- /* Called to merge BFD general private data from one object file
- to a common output file when linking. */
- bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, bfd *);
- /* Called to initialize BFD private section data from one object file
- to another. */
-#define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
- BFD_SEND (obfd, _bfd_init_private_section_data, (ibfd, isec, obfd, osec, link_info))
- bfd_boolean (*_bfd_init_private_section_data)
- (bfd *, sec_ptr, bfd *, sec_ptr, struct bfd_link_info *);
- /* Called to copy BFD private section data from one object file
- to another. */
- bfd_boolean (*_bfd_copy_private_section_data)
- (bfd *, sec_ptr, bfd *, sec_ptr);
- /* Called to copy BFD private symbol data from one symbol
- to another. */
- bfd_boolean (*_bfd_copy_private_symbol_data)
- (bfd *, asymbol *, bfd *, asymbol *);
- /* Called to copy BFD private header data from one object file
- to another. */
- bfd_boolean (*_bfd_copy_private_header_data)
- (bfd *, bfd *);
- /* Called to set private backend flags. */
- bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword);
-
- /* Called to print private BFD data. */
- bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *);
-
- /* Core file entry points. */
-#define BFD_JUMP_TABLE_CORE(NAME) \
- NAME##_core_file_failing_command, \
- NAME##_core_file_failing_signal, \
- NAME##_core_file_matches_executable_p
-
- char * (*_core_file_failing_command) (bfd *);
- int (*_core_file_failing_signal) (bfd *);
- bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *);
-
- /* Archive entry points. */
-#define BFD_JUMP_TABLE_ARCHIVE(NAME) \
- NAME##_slurp_armap, \
- NAME##_slurp_extended_name_table, \
- NAME##_construct_extended_name_table, \
- NAME##_truncate_arname, \
- NAME##_write_armap, \
- NAME##_read_ar_hdr, \
- NAME##_openr_next_archived_file, \
- NAME##_get_elt_at_index, \
- NAME##_generic_stat_arch_elt, \
- NAME##_update_armap_timestamp
-
- bfd_boolean (*_bfd_slurp_armap) (bfd *);
- bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *);
- bfd_boolean (*_bfd_construct_extended_name_table)
- (bfd *, char **, bfd_size_type *, const char **);
- void (*_bfd_truncate_arname) (bfd *, const char *, char *);
- bfd_boolean (*write_armap)
- (bfd *, unsigned int, struct orl *, unsigned int, int);
- void * (*_bfd_read_ar_hdr_fn) (bfd *);
- bfd * (*openr_next_archived_file) (bfd *, bfd *);
-#define bfd_get_elt_at_index(b,i) BFD_SEND (b, _bfd_get_elt_at_index, (b,i))
- bfd * (*_bfd_get_elt_at_index) (bfd *, symindex);
- int (*_bfd_stat_arch_elt) (bfd *, struct stat *);
- bfd_boolean (*_bfd_update_armap_timestamp) (bfd *);
-
- /* Entry points used for symbols. */
-#define BFD_JUMP_TABLE_SYMBOLS(NAME) \
- NAME##_get_symtab_upper_bound, \
- NAME##_canonicalize_symtab, \
- NAME##_make_empty_symbol, \
- NAME##_print_symbol, \
- NAME##_get_symbol_info, \
- NAME##_bfd_is_local_label_name, \
- NAME##_bfd_is_target_special_symbol, \
- NAME##_get_lineno, \
- NAME##_find_nearest_line, \
- _bfd_generic_find_line, \
- NAME##_find_inliner_info, \
- NAME##_bfd_make_debug_symbol, \
- NAME##_read_minisymbols, \
- NAME##_minisymbol_to_symbol
-
- long (*_bfd_get_symtab_upper_bound) (bfd *);
- long (*_bfd_canonicalize_symtab)
- (bfd *, struct bfd_symbol **);
- struct bfd_symbol *
- (*_bfd_make_empty_symbol) (bfd *);
- void (*_bfd_print_symbol)
- (bfd *, void *, struct bfd_symbol *, bfd_print_symbol_type);
-#define bfd_print_symbol(b,p,s,e) BFD_SEND (b, _bfd_print_symbol, (b,p,s,e))
- void (*_bfd_get_symbol_info)
- (bfd *, struct bfd_symbol *, symbol_info *);
-#define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
- bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
- bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
- alent * (*_get_lineno) (bfd *, struct bfd_symbol *);
- bfd_boolean (*_bfd_find_nearest_line)
- (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma,
- const char **, const char **, unsigned int *);
- bfd_boolean (*_bfd_find_line)
- (bfd *, struct bfd_symbol **, struct bfd_symbol *,
- const char **, unsigned int *);
- bfd_boolean (*_bfd_find_inliner_info)
- (bfd *, const char **, const char **, unsigned int *);
- /* Back-door to allow format-aware applications to create debug symbols
- while using BFD for everything else. Currently used by the assembler
- when creating COFF files. */
- asymbol * (*_bfd_make_debug_symbol)
- (bfd *, void *, unsigned long size);
-#define bfd_read_minisymbols(b, d, m, s) \
- BFD_SEND (b, _read_minisymbols, (b, d, m, s))
- long (*_read_minisymbols)
- (bfd *, bfd_boolean, void **, unsigned int *);
-#define bfd_minisymbol_to_symbol(b, d, m, f) \
- BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
- asymbol * (*_minisymbol_to_symbol)
- (bfd *, bfd_boolean, const void *, asymbol *);
-
- /* Routines for relocs. */
-#define BFD_JUMP_TABLE_RELOCS(NAME) \
- NAME##_get_reloc_upper_bound, \
- NAME##_canonicalize_reloc, \
- NAME##_bfd_reloc_type_lookup
-
- long (*_get_reloc_upper_bound) (bfd *, sec_ptr);
- long (*_bfd_canonicalize_reloc)
- (bfd *, sec_ptr, arelent **, struct bfd_symbol **);
- /* See documentation on reloc types. */
- reloc_howto_type *
- (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
-
- /* Routines used when writing an object file. */
-#define BFD_JUMP_TABLE_WRITE(NAME) \
- NAME##_set_arch_mach, \
- NAME##_set_section_contents
-
- bfd_boolean (*_bfd_set_arch_mach)
- (bfd *, enum bfd_architecture, unsigned long);
- bfd_boolean (*_bfd_set_section_contents)
- (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type);
-
- /* Routines used by the linker. */
-#define BFD_JUMP_TABLE_LINK(NAME) \
- NAME##_sizeof_headers, \
- NAME##_bfd_get_relocated_section_contents, \
- NAME##_bfd_relax_section, \
- NAME##_bfd_link_hash_table_create, \
- NAME##_bfd_link_hash_table_free, \
- NAME##_bfd_link_add_symbols, \
- NAME##_bfd_link_just_syms, \
- NAME##_bfd_final_link, \
- NAME##_bfd_link_split_section, \
- NAME##_bfd_gc_sections, \
- NAME##_bfd_merge_sections, \
- NAME##_bfd_is_group_section, \
- NAME##_bfd_discard_group, \
- NAME##_section_already_linked \
-
- int (*_bfd_sizeof_headers) (bfd *, bfd_boolean);
- bfd_byte * (*_bfd_get_relocated_section_contents)
- (bfd *, struct bfd_link_info *, struct bfd_link_order *,
- bfd_byte *, bfd_boolean, struct bfd_symbol **);
-
- bfd_boolean (*_bfd_relax_section)
- (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *);
-
- /* Create a hash table for the linker. Different backends store
- different information in this table. */
- struct bfd_link_hash_table *
- (*_bfd_link_hash_table_create) (bfd *);
-
- /* Release the memory associated with the linker hash table. */
- void (*_bfd_link_hash_table_free) (struct bfd_link_hash_table *);
-
- /* Add symbols from this object file into the hash table. */
- bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
-
- /* Indicate that we are only retrieving symbol values from this section. */
- void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
-
- /* Do a link based on the link_order structures attached to each
- section of the BFD. */
- bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);
-
- /* Should this section be split up into smaller pieces during linking. */
- bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *);
-
- /* Remove sections that are not referenced from the output. */
- bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
-
- /* Attempt to merge SEC_MERGE sections. */
- bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
-
- /* Is this section a member of a group? */
- bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
-
- /* Discard members of a group. */
- bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *);
-
- /* Check if SEC has been already linked during a reloceatable or
- final link. */
- void (*_section_already_linked) (bfd *, struct bfd_section *);
-
- /* Routines to handle dynamic symbols and relocs. */
-#define BFD_JUMP_TABLE_DYNAMIC(NAME) \
- NAME##_get_dynamic_symtab_upper_bound, \
- NAME##_canonicalize_dynamic_symtab, \
- NAME##_get_synthetic_symtab, \
- NAME##_get_dynamic_reloc_upper_bound, \
- NAME##_canonicalize_dynamic_reloc
-
- /* Get the amount of memory required to hold the dynamic symbols. */
- long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
- /* Read in the dynamic symbols. */
- long (*_bfd_canonicalize_dynamic_symtab)
- (bfd *, struct bfd_symbol **);
- /* Create synthetized symbols. */
- long (*_bfd_get_synthetic_symtab)
- (bfd *, long, struct bfd_symbol **, long, struct bfd_symbol **,
- struct bfd_symbol **);
- /* Get the amount of memory required to hold the dynamic relocs. */
- long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
- /* Read in the dynamic relocs. */
- long (*_bfd_canonicalize_dynamic_reloc)
- (bfd *, arelent **, struct bfd_symbol **);
-
-@end example
-A pointer to an alternative bfd_target in case the current one is not
-satisfactory. This can happen when the target cpu supports both big
-and little endian code, and target chosen by the linker has the wrong
-endianness. The function open_output() in ld/ldlang.c uses this field
-to find an alternative output format that is suitable.
-@example
- /* Opposite endian version of this target. */
- const struct bfd_target * alternative_target;
-
- /* Data for use by back-end routines, which isn't
- generic enough to belong in this structure. */
- const void *backend_data;
-
-@} bfd_target;
-
-@end example
-
-@findex bfd_set_default_target
-@subsubsection @code{bfd_set_default_target}
-@strong{Synopsis}
-@example
-bfd_boolean bfd_set_default_target (const char *name);
-@end example
-@strong{Description}@*
-Set the default target vector to use when recognizing a BFD.
-This takes the name of the target, which may be a BFD target
-name or a configuration triplet.
-
-@findex bfd_find_target
-@subsubsection @code{bfd_find_target}
-@strong{Synopsis}
-@example
-const bfd_target *bfd_find_target (const char *target_name, bfd *abfd);
-@end example
-@strong{Description}@*
-Return a pointer to the transfer vector for the object target
-named @var{target_name}. If @var{target_name} is @code{NULL}, choose the
-one in the environment variable @code{GNUTARGET}; if that is null or not
-defined, then choose the first entry in the target list.
-Passing in the string "default" or setting the environment
-variable to "default" will cause the first entry in the target
-list to be returned, and "target_defaulted" will be set in the
-BFD. This causes @code{bfd_check_format} to loop over all the
-targets to find the one that matches the file being read.
-
-@findex bfd_target_list
-@subsubsection @code{bfd_target_list}
-@strong{Synopsis}
-@example
-const char ** bfd_target_list (void);
-@end example
-@strong{Description}@*
-Return a freshly malloced NULL-terminated
-vector of the names of all the valid BFD targets. Do not
-modify the names.
-
-@findex bfd_seach_for_target
-@subsubsection @code{bfd_seach_for_target}
-@strong{Synopsis}
-@example
-const bfd_target *bfd_search_for_target
- (int (*search_func) (const bfd_target *, void *),
- void *);
-@end example
-@strong{Description}@*
-Return a pointer to the first transfer vector in the list of
-transfer vectors maintained by BFD that produces a non-zero
-result when passed to the function @var{search_func}. The
-parameter @var{data} is passed, unexamined, to the search
-function.
-
diff --git a/bfd/dwarf1.c b/bfd/dwarf1.c
index 5d6c1e359e51..d722df37152e 100644
--- a/bfd/dwarf1.c
+++ b/bfd/dwarf1.c
@@ -1,5 +1,5 @@
/* DWARF 1 find nearest line (_bfd_dwarf1_find_nearest_line).
- Copyright 1998, 1999, 2000, 2001, 2002, 2004, 2005
+ Copyright 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2007
Free Software Foundation, Inc.
Written by Gavin Romig-Koch of Cygnus Solutions (gavin@cygnus.com).
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libiberty.h"
#include "libbfd.h"
#include "elf-bfd.h"
diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
index ae68d1886818..411a7154b5eb 100644
--- a/bfd/dwarf2.c
+++ b/bfd/dwarf2.c
@@ -1,6 +1,6 @@
/* DWARF 2 support.
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
(gavin@cygnus.com).
@@ -29,8 +29,8 @@
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 "bfd.h"
#include "libiberty.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -93,8 +93,10 @@ struct dwarf2_debug
/* Pointer to the end of the .debug_info section memory buffer. */
bfd_byte *info_ptr_end;
- /* Pointer to the section and address of the beginning of the
- section. */
+ /* Pointer to the bfd, section and address of the beginning of the
+ section. The bfd might be different than expected because of
+ gnu_debuglink sections. */
+ bfd * bfd;
asection *sec;
bfd_byte *sec_info_ptr;
@@ -874,24 +876,45 @@ concat_filename (struct line_info_table *table, unsigned int file)
filename = table->files[file - 1].name;
- if (! IS_ABSOLUTE_PATH (filename))
+ if (!IS_ABSOLUTE_PATH (filename))
{
- char *dirname = (table->files[file - 1].dir
- ? table->dirs[table->files[file - 1].dir - 1]
- : table->comp_dir);
+ char *dirname = NULL;
+ char *subdirname = NULL;
+ char *name;
+ size_t len;
+
+ if (table->files[file - 1].dir)
+ subdirname = table->dirs[table->files[file - 1].dir - 1];
+
+ if (!subdirname || !IS_ABSOLUTE_PATH (subdirname))
+ dirname = table->comp_dir;
- /* Not all tools set DW_AT_comp_dir, so dirname may be unknown.
- The best we can do is return the filename part. */
- if (dirname != NULL)
+ if (!dirname)
{
- unsigned int len = strlen (dirname) + strlen (filename) + 2;
- char * name;
+ dirname = subdirname;
+ subdirname = NULL;
+ }
+
+ if (!dirname)
+ return strdup (filename);
+ len = strlen (dirname) + strlen (filename) + 2;
+
+ if (subdirname)
+ {
+ len += strlen (subdirname) + 1;
+ name = bfd_malloc (len);
+ if (name)
+ sprintf (name, "%s/%s/%s", dirname, subdirname, filename);
+ }
+ else
+ {
name = bfd_malloc (len);
if (name)
sprintf (name, "%s/%s", dirname, filename);
- return name;
}
+
+ return name;
}
return strdup (filename);
@@ -1117,7 +1140,6 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
unsigned int line = 1;
unsigned int column = 0;
int is_stmt = lh.default_is_stmt;
- int basic_block = 0;
int end_sequence = 0;
/* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
compilers generate address sequences that are wildly out of
@@ -1142,7 +1164,6 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
line += lh.line_base + (adj_opcode % lh.line_range);
/* Append row to matrix using current values. */
add_line_info (table, address, filename, line, column, 0);
- basic_block = 1;
if (address < low_pc)
low_pc = address;
if (address > high_pc)
@@ -1214,7 +1235,6 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
break;
case DW_LNS_copy:
add_line_info (table, address, filename, line, column, 0);
- basic_block = 0;
if (address < low_pc)
low_pc = address;
if (address > high_pc)
@@ -1250,7 +1270,6 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
is_stmt = (!is_stmt);
break;
case DW_LNS_set_basic_block:
- basic_block = 1;
break;
case DW_LNS_const_add_pc:
address += lh.minimum_instruction_length
@@ -1625,7 +1644,7 @@ read_rangelist (struct comp_unit *unit, struct arange *arange, bfd_uint64_t offs
if (low_pc == -1UL && high_pc != -1UL)
base_address = high_pc;
else
- arange_add (unit->abfd, arange, base_address + low_pc, base_address + high_pc);
+ arange_add (unit->abfd, arange, base_address + low_pc, base_address + high_pc);
}
}
@@ -1871,8 +1890,7 @@ scan_unit_for_symbols (struct comp_unit *unit)
to get to the line number information for the compilation unit. */
static struct comp_unit *
-parse_comp_unit (bfd *abfd,
- struct dwarf2_debug *stash,
+parse_comp_unit (struct dwarf2_debug *stash,
bfd_vma unit_length,
bfd_byte *info_ptr_unit,
unsigned int offset_size)
@@ -1890,6 +1908,7 @@ parse_comp_unit (bfd *abfd,
bfd_size_type amt;
bfd_vma low_pc = 0;
bfd_vma high_pc = 0;
+ bfd *abfd = stash->bfd;
version = read_2_bytes (abfd, info_ptr);
info_ptr += 2;
@@ -2175,17 +2194,14 @@ find_debug_info (bfd *abfd, asection *after_sec)
{
asection * msec;
- if (after_sec)
- msec = after_sec->next;
- else
- msec = abfd->sections;
+ msec = after_sec != NULL ? after_sec->next : abfd->sections;
while (msec)
{
if (strcmp (msec->name, DWARF2_DEBUG_INFO) == 0)
return msec;
- if (strncmp (msec->name, GNU_LINKONCE_INFO, strlen (GNU_LINKONCE_INFO)) == 0)
+ if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
return msec;
msec = msec->next;
@@ -2285,22 +2301,28 @@ place_sections (bfd *abfd, struct dwarf2_debug *stash)
return TRUE;
}
-/* The DWARF2 version of find_nearest_line. Return TRUE if the line
- is found without error. ADDR_SIZE is the number of bytes in the
- initial .debug_info length field and in the abbreviation offset.
- You may use zero to indicate that the default value should be
- used. */
+/* Find the source code location of SYMBOL. If SYMBOL is NULL
+ then find the nearest source code location corresponding to
+ the address SECTION + OFFSET.
+ Returns TRUE if the line is found without error and fills in
+ FILENAME_PTR and LINENUMBER_PTR. In the case where SYMBOL was
+ NULL the FUNCTIONNAME_PTR is also filled in.
+ SYMBOLS contains the symbol table for ABFD.
+ ADDR_SIZE is the number of bytes in the initial .debug_info length
+ field and in the abbreviation offset, or zero to indicate that the
+ default value should be used. */
-bfd_boolean
-_bfd_dwarf2_find_nearest_line (bfd *abfd,
- asection *section,
- asymbol **symbols,
- bfd_vma offset,
- const char **filename_ptr,
- const char **functionname_ptr,
- unsigned int *linenumber_ptr,
- unsigned int addr_size,
- void **pinfo)
+static bfd_boolean
+find_line (bfd *abfd,
+ asection *section,
+ bfd_vma offset,
+ asymbol *symbol,
+ asymbol **symbols,
+ const char **filename_ptr,
+ const char **functionname_ptr,
+ unsigned int *linenumber_ptr,
+ unsigned int addr_size,
+ void **pinfo)
{
/* Read each compilation unit from the section .debug_info, and check
to see if it contains the address we are searching for. If yes,
@@ -2311,13 +2333,11 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
a pointer to the next un-read compilation unit. Check the
previously read units before reading more. */
struct dwarf2_debug *stash;
-
/* What address are we looking for? */
bfd_vma addr;
-
struct comp_unit* each;
-
bfd_vma found = FALSE;
+ bfd_boolean do_line;
stash = *pinfo;
@@ -2338,7 +2358,22 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
return FALSE;
}
- addr = offset;
+ do_line = (section == NULL
+ && offset == 0
+ && functionname_ptr == NULL
+ && symbol != NULL);
+ if (do_line)
+ {
+ addr = symbol->value;
+ section = bfd_get_section (symbol);
+ }
+ else if (section != NULL
+ && functionname_ptr != NULL
+ && symbol == NULL)
+ addr = offset;
+ else
+ abort ();
+
if (section->output_section)
addr += section->output_section->vma + section->output_offset;
else
@@ -2347,260 +2382,57 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
*functionname_ptr = NULL;
*linenumber_ptr = 0;
- /* The DWARF2 spec says that the initial length field, and the
- offset of the abbreviation table, should both be 4-byte values.
- However, some compilers do things differently. */
- if (addr_size == 0)
- addr_size = 4;
- BFD_ASSERT (addr_size == 4 || addr_size == 8);
-
if (! *pinfo)
{
+ bfd *debug_bfd;
bfd_size_type total_size;
asection *msec;
*pinfo = stash;
msec = find_debug_info (abfd, NULL);
- if (! msec)
- /* No dwarf2 info. Note that at this point the stash
- has been allocated, but contains zeros, this lets
- future calls to this function fail quicker. */
- goto done;
-
- /* There can be more than one DWARF2 info section in a BFD these days.
- Read them all in and produce one large stash. We do this in two
- passes - in the first pass we just accumulate the section sizes.
- In the second pass we read in the section's contents. The allows
- us to avoid reallocing the data as we add sections to the stash. */
- for (total_size = 0; msec; msec = find_debug_info (abfd, msec))
- total_size += msec->size;
-
- stash->info_ptr = bfd_alloc (abfd, total_size);
- if (stash->info_ptr == NULL)
- goto done;
-
- stash->info_ptr_end = stash->info_ptr;
-
- for (msec = find_debug_info (abfd, NULL);
- msec;
- msec = find_debug_info (abfd, msec))
- {
- bfd_size_type size;
- bfd_size_type start;
-
- size = msec->size;
- if (size == 0)
- continue;
-
- start = stash->info_ptr_end - stash->info_ptr;
-
- if ((bfd_simple_get_relocated_section_contents
- (abfd, msec, stash->info_ptr + start, symbols)) == NULL)
- continue;
-
- stash->info_ptr_end = stash->info_ptr + start + size;
- }
-
- BFD_ASSERT (stash->info_ptr_end == stash->info_ptr + total_size);
-
- stash->sec = find_debug_info (abfd, NULL);
- stash->sec_info_ptr = stash->info_ptr;
- stash->syms = symbols;
- }
-
- /* A null info_ptr indicates that there is no dwarf2 info
- (or that an error occured while setting up the stash). */
- if (! stash->info_ptr)
- goto done;
-
- stash->inliner_chain = NULL;
-
- /* Check the previously read comp. units first. */
- for (each = stash->all_comp_units; each; each = each->next_unit)
- if (comp_unit_contains_address (each, addr)
- && comp_unit_find_nearest_line (each, addr, filename_ptr,
- functionname_ptr,
- linenumber_ptr, stash))
- {
- found = TRUE;
- goto done;
- }
-
- /* Read each remaining comp. units checking each as they are read. */
- while (stash->info_ptr < stash->info_ptr_end)
- {
- bfd_vma length;
- unsigned int offset_size = addr_size;
- bfd_byte *info_ptr_unit = stash->info_ptr;
-
- length = read_4_bytes (abfd, stash->info_ptr);
- /* A 0xffffff length is the DWARF3 way of indicating we use
- 64-bit offsets, instead of 32-bit offsets. */
- if (length == 0xffffffff)
- {
- offset_size = 8;
- length = read_8_bytes (abfd, stash->info_ptr + 4);
- stash->info_ptr += 12;
- }
- /* A zero length is the IRIX way of indicating 64-bit offsets,
- mostly because the 64-bit length will generally fit in 32
- bits, and the endianness helps. */
- else if (length == 0)
+ if (msec == NULL)
{
- offset_size = 8;
- length = read_4_bytes (abfd, stash->info_ptr + 4);
- stash->info_ptr += 8;
- }
- /* In the absence of the hints above, we assume addr_size-sized
- offsets, for backward-compatibility with pre-DWARF3 64-bit
- platforms. */
- else if (addr_size == 8)
- {
- length = read_8_bytes (abfd, stash->info_ptr);
- stash->info_ptr += 8;
- }
- else
- stash->info_ptr += 4;
-
- if (length > 0)
- {
- each = parse_comp_unit (abfd, stash, length, info_ptr_unit,
- offset_size);
- stash->info_ptr += length;
-
- if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
- == stash->sec->size)
+ char * debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR);
+
+ if (debug_filename == NULL)
+ /* No dwarf2 info, and no gnu_debuglink to follow.
+ Note that at this point the stash has been allocated, but
+ contains zeros. This lets future calls to this function
+ fail more quickly. */
+ goto done;
+
+ if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
+ || ! bfd_check_format (debug_bfd, bfd_object)
+ || (msec = find_debug_info (debug_bfd, NULL)) == NULL)
{
- stash->sec = find_debug_info (abfd, stash->sec);
- stash->sec_info_ptr = stash->info_ptr;
- }
-
- if (each)
- {
- each->next_unit = stash->all_comp_units;
- stash->all_comp_units = each;
-
- /* DW_AT_low_pc and DW_AT_high_pc are optional for
- compilation units. If we don't have them (i.e.,
- unit->high == 0), we need to consult the line info
- table to see if a compilation unit contains the given
- address. */
- if ((each->arange.high == 0
- || comp_unit_contains_address (each, addr))
- && comp_unit_find_nearest_line (each, addr,
- filename_ptr,
- functionname_ptr,
- linenumber_ptr,
- stash))
- {
- found = TRUE;
- goto done;
- }
+ if (debug_bfd)
+ bfd_close (debug_bfd);
+ /* FIXME: Should we report our failure to follow the debuglink ? */
+ free (debug_filename);
+ goto done;
}
}
- }
-
-done:
- if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
- unset_sections (stash);
-
- return found;
-}
-
-/* The DWARF2 version of find_line. Return TRUE if the line is found
- without error. */
-
-bfd_boolean
-_bfd_dwarf2_find_line (bfd *abfd,
- asymbol **symbols,
- asymbol *symbol,
- const char **filename_ptr,
- unsigned int *linenumber_ptr,
- unsigned int addr_size,
- void **pinfo)
-{
- /* Read each compilation unit from the section .debug_info, and check
- to see if it contains the address we are searching for. If yes,
- lookup the address, and return the line number info. If no, go
- on to the next compilation unit.
-
- We keep a list of all the previously read compilation units, and
- a pointer to the next un-read compilation unit. Check the
- previously read units before reading more. */
- struct dwarf2_debug *stash;
-
- /* What address are we looking for? */
- bfd_vma addr;
-
- struct comp_unit* each;
-
- asection *section;
-
- bfd_boolean found = FALSE;
-
- section = bfd_get_section (symbol);
-
- stash = *pinfo;
-
- if (! stash)
- {
- bfd_size_type amt = sizeof (struct dwarf2_debug);
-
- stash = bfd_zalloc (abfd, amt);
- if (! stash)
- return FALSE;
- }
-
- /* In a relocatable file, 2 functions may have the same address.
- We change the section vma so that they won't overlap. */
- if (!stash && (abfd->flags & (EXEC_P | DYNAMIC)) == 0)
- {
- if (! place_sections (abfd, stash))
- return FALSE;
- }
-
- addr = symbol->value;
- if (section->output_section)
- addr += section->output_section->vma + section->output_offset;
- else
- addr += section->vma;
-
- *filename_ptr = NULL;
- *filename_ptr = NULL;
- *linenumber_ptr = 0;
-
- if (! *pinfo)
- {
- bfd_size_type total_size;
- asection *msec;
-
- *pinfo = stash;
-
- msec = find_debug_info (abfd, NULL);
- if (! msec)
- /* No dwarf2 info. Note that at this point the stash
- has been allocated, but contains zeros, this lets
- future calls to this function fail quicker. */
- goto done;
+ else
+ debug_bfd = abfd;
/* There can be more than one DWARF2 info section in a BFD these days.
Read them all in and produce one large stash. We do this in two
passes - in the first pass we just accumulate the section sizes.
In the second pass we read in the section's contents. The allows
us to avoid reallocing the data as we add sections to the stash. */
- for (total_size = 0; msec; msec = find_debug_info (abfd, msec))
+ for (total_size = 0; msec; msec = find_debug_info (debug_bfd, msec))
total_size += msec->size;
- stash->info_ptr = bfd_alloc (abfd, total_size);
+ stash->info_ptr = bfd_alloc (debug_bfd, total_size);
if (stash->info_ptr == NULL)
goto done;
stash->info_ptr_end = stash->info_ptr;
- for (msec = find_debug_info (abfd, NULL);
+ for (msec = find_debug_info (debug_bfd, NULL);
msec;
- msec = find_debug_info (abfd, msec))
+ msec = find_debug_info (debug_bfd, msec))
{
bfd_size_type size;
bfd_size_type start;
@@ -2612,7 +2444,7 @@ _bfd_dwarf2_find_line (bfd *abfd,
start = stash->info_ptr_end - stash->info_ptr;
if ((bfd_simple_get_relocated_section_contents
- (abfd, msec, stash->info_ptr + start, symbols)) == NULL)
+ (debug_bfd, msec, stash->info_ptr + start, symbols)) == NULL)
continue;
stash->info_ptr_end = stash->info_ptr + start + size;
@@ -2620,9 +2452,10 @@ _bfd_dwarf2_find_line (bfd *abfd,
BFD_ASSERT (stash->info_ptr_end == stash->info_ptr + total_size);
- stash->sec = find_debug_info (abfd, NULL);
+ stash->sec = find_debug_info (debug_bfd, NULL);
stash->sec_info_ptr = stash->info_ptr;
stash->syms = symbols;
+ stash->bfd = debug_bfd;
}
/* A null info_ptr indicates that there is no dwarf2 info
@@ -2634,14 +2467,23 @@ _bfd_dwarf2_find_line (bfd *abfd,
/* Check the previously read comp. units first. */
for (each = stash->all_comp_units; each; each = each->next_unit)
- if ((symbol->flags & BSF_FUNCTION) == 0
- || comp_unit_contains_address (each, addr))
- {
- found = comp_unit_find_line (each, symbol, addr, filename_ptr,
- linenumber_ptr, stash);
- if (found)
- goto done;
- }
+ {
+ if (do_line)
+ found = (((symbol->flags & BSF_FUNCTION) == 0
+ || comp_unit_contains_address (each, addr))
+ && comp_unit_find_line (each, symbol, addr,
+ filename_ptr, linenumber_ptr,
+ stash));
+ else
+ found = (comp_unit_contains_address (each, addr)
+ && comp_unit_find_nearest_line (each, addr,
+ filename_ptr,
+ functionname_ptr,
+ linenumber_ptr,
+ stash));
+ if (found)
+ goto done;
+ }
/* The DWARF2 spec says that the initial length field, and the
offset of the abbreviation table, should both be 4-byte values.
@@ -2657,13 +2499,13 @@ _bfd_dwarf2_find_line (bfd *abfd,
unsigned int offset_size = addr_size;
bfd_byte *info_ptr_unit = stash->info_ptr;
- length = read_4_bytes (abfd, stash->info_ptr);
- /* A 0xffffff length is the DWARF3 way of indicating we use
- 64-bit offsets, instead of 32-bit offsets. */
+ length = read_4_bytes (stash->bfd, stash->info_ptr);
+ /* A 0xffffff length is the DWARF3 way of indicating
+ we use 64-bit offsets, instead of 32-bit offsets. */
if (length == 0xffffffff)
{
offset_size = 8;
- length = read_8_bytes (abfd, stash->info_ptr + 4);
+ length = read_8_bytes (stash->bfd, stash->info_ptr + 4);
stash->info_ptr += 12;
}
/* A zero length is the IRIX way of indicating 64-bit offsets,
@@ -2672,30 +2514,36 @@ _bfd_dwarf2_find_line (bfd *abfd,
else if (length == 0)
{
offset_size = 8;
- length = read_4_bytes (abfd, stash->info_ptr + 4);
+ length = read_4_bytes (stash->bfd, stash->info_ptr + 4);
stash->info_ptr += 8;
}
- /* In the absence of the hints above, we assume addr_size-sized
- offsets, for backward-compatibility with pre-DWARF3 64-bit
- platforms. */
+ /* In the absence of the hints above, we assume 32-bit DWARF2
+ offsets even for targets with 64-bit addresses, because:
+ a) most of the time these targets will not have generated
+ more than 2Gb of debug info and so will not need 64-bit
+ offsets,
+ and
+ b) if they do use 64-bit offsets but they are not using
+ the size hints that are tested for above then they are
+ not conforming to the DWARF3 standard anyway. */
else if (addr_size == 8)
{
- length = read_8_bytes (abfd, stash->info_ptr);
- stash->info_ptr += 8;
+ offset_size = 4;
+ stash->info_ptr += 4;
}
else
stash->info_ptr += 4;
if (length > 0)
{
- each = parse_comp_unit (abfd, stash, length, info_ptr_unit,
+ each = parse_comp_unit (stash, length, info_ptr_unit,
offset_size);
stash->info_ptr += length;
if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
== stash->sec->size)
{
- stash->sec = find_debug_info (abfd, stash->sec);
+ stash->sec = find_debug_info (stash->bfd, stash->sec);
stash->sec_info_ptr = stash->info_ptr;
}
@@ -2709,13 +2557,22 @@ _bfd_dwarf2_find_line (bfd *abfd,
unit->high == 0), we need to consult the line info
table to see if a compilation unit contains the given
address. */
- found = (((symbol->flags & BSF_FUNCTION) == 0
- || each->arange.high <= 0
- || comp_unit_contains_address (each, addr))
- && comp_unit_find_line (each, symbol, addr,
- filename_ptr,
- linenumber_ptr,
- stash));
+ if (do_line)
+ found = (((symbol->flags & BSF_FUNCTION) == 0
+ || each->arange.high == 0
+ || comp_unit_contains_address (each, addr))
+ && comp_unit_find_line (each, symbol, addr,
+ filename_ptr,
+ linenumber_ptr,
+ stash));
+ else
+ found = ((each->arange.high == 0
+ || comp_unit_contains_address (each, addr))
+ && comp_unit_find_nearest_line (each, addr,
+ filename_ptr,
+ functionname_ptr,
+ linenumber_ptr,
+ stash));
if (found)
goto done;
}
@@ -2729,6 +2586,42 @@ done:
return found;
}
+/* The DWARF2 version of find_nearest_line.
+ Return TRUE if the line is found without error. */
+
+bfd_boolean
+_bfd_dwarf2_find_nearest_line (bfd *abfd,
+ asection *section,
+ asymbol **symbols,
+ bfd_vma offset,
+ const char **filename_ptr,
+ const char **functionname_ptr,
+ unsigned int *linenumber_ptr,
+ unsigned int addr_size,
+ void **pinfo)
+{
+ return find_line (abfd, section, offset, NULL, symbols, filename_ptr,
+ functionname_ptr, linenumber_ptr, addr_size,
+ pinfo);
+}
+
+/* The DWARF2 version of find_line.
+ Return TRUE if the line is found without error. */
+
+bfd_boolean
+_bfd_dwarf2_find_line (bfd *abfd,
+ asymbol **symbols,
+ asymbol *symbol,
+ const char **filename_ptr,
+ unsigned int *linenumber_ptr,
+ unsigned int addr_size,
+ void **pinfo)
+{
+ return find_line (abfd, NULL, 0, symbol, symbols, filename_ptr,
+ NULL, linenumber_ptr, addr_size,
+ pinfo);
+}
+
bfd_boolean
_bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
const char **filename_ptr,
@@ -2742,17 +2635,18 @@ _bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
if (stash)
{
struct funcinfo *func = stash->inliner_chain;
+
if (func && func->caller_func)
{
*filename_ptr = func->caller_file;
*functionname_ptr = func->caller_func->name;
*linenumber_ptr = func->caller_line;
stash->inliner_chain = func->caller_func;
- return (TRUE);
+ return TRUE;
}
}
- return (FALSE);
+ return FALSE;
}
void
diff --git a/bfd/ecoff.c b/bfd/ecoff.c
index 75e1cc2a398d..45cdb1ddb43f 100644
--- a/bfd/ecoff.c
+++ b/bfd/ecoff.c
@@ -1,6 +1,6 @@
/* Generic ECOFF (Extended-COFF) routines.
Copyright 1990, 1991, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Original version by Per Bothner.
Full support added by Ian Lance Taylor, ian@cygnus.com.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "aout/ar.h"
@@ -140,8 +140,7 @@ _bfd_ecoff_mkobject_hook (bfd *abfd, void * filehdr, void * aouthdr)
/* Initialize a new section. */
bfd_boolean
-_bfd_ecoff_new_section_hook (bfd *abfd ATTRIBUTE_UNUSED,
- asection *section)
+_bfd_ecoff_new_section_hook (bfd *abfd, asection *section)
{
unsigned int i;
static struct
@@ -181,7 +180,7 @@ _bfd_ecoff_new_section_hook (bfd *abfd ATTRIBUTE_UNUSED,
uncertain about .init on some systems and I don't know how shared
libraries work. */
- return TRUE;
+ return _bfd_generic_new_section_hook (abfd, section);
}
/* Determine the machine architecture and type. This is called from
@@ -1863,7 +1862,8 @@ _bfd_ecoff_set_arch_mach (bfd *abfd,
/* Get the size of the section headers. */
int
-_bfd_ecoff_sizeof_headers (bfd *abfd, bfd_boolean reloc ATTRIBUTE_UNUSED)
+_bfd_ecoff_sizeof_headers (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
asection *current;
int c;
@@ -1937,7 +1937,7 @@ ecoff_compute_section_file_positions (bfd *abfd)
const bfd_vma round = ecoff_backend (abfd)->round;
bfd_size_type amt;
- sofar = _bfd_ecoff_sizeof_headers (abfd, FALSE);
+ sofar = _bfd_ecoff_sizeof_headers (abfd, NULL);
file_sofar = sofar;
/* Sort the sections by VMA. */
@@ -2358,7 +2358,7 @@ _bfd_ecoff_write_object_contents (bfd *abfd)
}
if ((abfd->flags & D_PAGED) != 0)
- text_size = _bfd_ecoff_sizeof_headers (abfd, FALSE);
+ text_size = _bfd_ecoff_sizeof_headers (abfd, NULL);
else
text_size = 0;
text_start = 0;
@@ -2861,7 +2861,7 @@ _bfd_ecoff_slurp_armap (bfd *abfd)
bfd_slurp_armap, but that seems inappropriate since no other
target uses this format. Instead, we check directly for a COFF
armap. */
- if (strneq (nextname, "/ ", 16))
+ if (CONST_STRNEQ (nextname, "/ "))
return bfd_slurp_armap (abfd);
/* See if the first element is an armap. */
@@ -3087,7 +3087,7 @@ _bfd_ecoff_write_armap (bfd *abfd,
last_elt = current;
for (i = 0; i < orl_count; i++)
{
- unsigned int hash, rehash;
+ unsigned int hash, rehash = 0;
/* Advance firstreal to the file position of this archive
element. */
@@ -3097,7 +3097,7 @@ _bfd_ecoff_write_armap (bfd *abfd,
{
firstreal += arelt_size (current) + sizeof (struct ar_hdr);
firstreal += firstreal % 2;
- current = current->next;
+ current = current->archive_next;
}
while (current != map[i].u.abfd);
}
@@ -3757,7 +3757,7 @@ ecoff_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
while (*pundef != NULL)
{
struct bfd_link_hash_entry *h;
- unsigned int hash, rehash;
+ unsigned int hash, rehash = 0;
unsigned int file_offset;
const char *name;
bfd *element;
diff --git a/bfd/ecofflink.c b/bfd/ecofflink.c
index 4246e94f3937..8ee68e066258 100644
--- a/bfd/ecofflink.c
+++ b/bfd/ecofflink.c
@@ -1,6 +1,6 @@
/* Routines to link ECOFF debugging information.
Copyright 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "objalloc.h"
@@ -782,7 +782,6 @@ bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap,
fdr_ptr += fdr_add, i++)
{
FDR fdr;
- bfd_vma fdr_adr;
bfd_byte *sym_out;
bfd_byte *lraw_src;
bfd_byte *lraw_end;
@@ -799,8 +798,6 @@ bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap,
else
(*input_swap->swap_fdr_in) (input_bfd, (PTR) fdr_ptr, &fdr);
- fdr_adr = fdr.adr;
-
/* FIXME: It is conceivable that this FDR points to the .init or
.fini section, in which case this will not do the right
thing. */
diff --git a/bfd/efi-app-ia32.c b/bfd/efi-app-ia32.c
index b186f907ce68..06ed80598709 100644
--- a/bfd/efi-app-ia32.c
+++ b/bfd/efi-app-ia32.c
@@ -1,5 +1,5 @@
/* BFD back-end for Intel IA-32 EFI application files.
- Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
Contributed by David Mosberger <davidm@hpl.hp.com>
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#define TARGET_SYM bfd_efi_app_ia32_vec
#define TARGET_NAME "efi-app-ia32"
diff --git a/bfd/efi-app-ia64.c b/bfd/efi-app-ia64.c
index c2a77aca55b2..b60ca738eda6 100644
--- a/bfd/efi-app-ia64.c
+++ b/bfd/efi-app-ia64.c
@@ -1,5 +1,5 @@
/* BFD back-end for HP/Intel IA-64 EFI application files.
- Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
Contributed by David Mosberger <davidm@hpl.hp.com>
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#define TARGET_SYM bfd_efi_app_ia64_vec
#define TARGET_NAME "efi-app-ia64"
diff --git a/bfd/efi-app-x86_64.c b/bfd/efi-app-x86_64.c
new file mode 100644
index 000000000000..130ba5409970
--- /dev/null
+++ b/bfd/efi-app-x86_64.c
@@ -0,0 +1,34 @@
+/* BFD back-end for Intel64 UEFI application files.
+ Copyright 2007 Free Software Foundation, Inc.
+
+This file is part of BFD, the Binary File Descriptor library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+
+#define TARGET_SYM bfd_efi_app_x86_64_vec
+#define TARGET_NAME "efi-app-x86_64"
+#define COFF_IMAGE_WITH_PE
+#define COFF_WITH_PE
+#define COFF_WITH_pep
+#define PCRELOFFSET TRUE
+#define TARGET_UNDERSCORE '_'
+#define COFF_LONG_SECTION_NAMES
+#define PEI_TARGET_SUBSYSTEM IMAGE_SUBSYSTEM_EFI_APPLICATION
+#define PEI_FORCE_MINIMUM_ALIGNMENT
+
+#include "coff-x86_64.c"
diff --git a/bfd/elf-attrs.c b/bfd/elf-attrs.c
new file mode 100644
index 000000000000..d1a64f4bed93
--- /dev/null
+++ b/bfd/elf-attrs.c
@@ -0,0 +1,628 @@
+/* ELF attributes support (based on ARM EABI attributes).
+ Copyright 2005, 2006, 2007
+ Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libiberty.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+
+/* Return the number of bytes needed by I in uleb128 format. */
+static int
+uleb128_size (unsigned int i)
+{
+ int size;
+ size = 1;
+ while (i >= 0x80)
+ {
+ i >>= 7;
+ size++;
+ }
+ return size;
+}
+
+/* Return TRUE if the attribute has the default value (0/""). */
+static bfd_boolean
+is_default_attr (obj_attribute *attr)
+{
+ if ((attr->type & 1) && attr->i != 0)
+ return FALSE;
+ if ((attr->type & 2) && attr->s && *attr->s)
+ return FALSE;
+
+ return TRUE;
+}
+
+/* Return the size of a single attribute. */
+static bfd_vma
+obj_attr_size (int tag, obj_attribute *attr)
+{
+ bfd_vma size;
+
+ if (is_default_attr (attr))
+ return 0;
+
+ size = uleb128_size (tag);
+ if (attr->type & 1)
+ size += uleb128_size (attr->i);
+ if (attr->type & 2)
+ size += strlen ((char *)attr->s) + 1;
+ return size;
+}
+
+/* Return the vendor name for a given object attributes section. */
+static const char *
+vendor_obj_attr_name (bfd *abfd, int vendor)
+{
+ return (vendor == OBJ_ATTR_PROC
+ ? get_elf_backend_data (abfd)->obj_attrs_vendor
+ : "gnu");
+}
+
+/* Return the size of the object attributes section for VENDOR
+ (OBJ_ATTR_PROC or OBJ_ATTR_GNU), or 0 if there are no attributes
+ for that vendor to record and the vendor is OBJ_ATTR_GNU. */
+static bfd_vma
+vendor_obj_attr_size (bfd *abfd, int vendor)
+{
+ bfd_vma size;
+ obj_attribute *attr;
+ obj_attribute_list *list;
+ int i;
+ const char *vendor_name = vendor_obj_attr_name (abfd, vendor);
+
+ if (!vendor_name)
+ return 0;
+
+ attr = elf_known_obj_attributes (abfd)[vendor];
+ size = 0;
+ for (i = 4; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
+ size += obj_attr_size (i, &attr[i]);
+
+ for (list = elf_other_obj_attributes (abfd)[vendor];
+ list;
+ list = list->next)
+ size += obj_attr_size (list->tag, &list->attr);
+
+ /* <size> <vendor_name> NUL 0x1 <size> */
+ return ((size || vendor == OBJ_ATTR_PROC)
+ ? size + 10 + strlen (vendor_name)
+ : 0);
+}
+
+/* Return the size of the object attributes section. */
+bfd_vma
+bfd_elf_obj_attr_size (bfd *abfd)
+{
+ bfd_vma size;
+
+ size = vendor_obj_attr_size (abfd, OBJ_ATTR_PROC);
+ size += vendor_obj_attr_size (abfd, OBJ_ATTR_GNU);
+
+ /* 'A' <sections for each vendor> */
+ return (size ? size + 1 : 0);
+}
+
+/* Write VAL in uleb128 format to P, returning a pointer to the
+ following byte. */
+static bfd_byte *
+write_uleb128 (bfd_byte *p, unsigned int val)
+{
+ bfd_byte c;
+ do
+ {
+ c = val & 0x7f;
+ val >>= 7;
+ if (val)
+ c |= 0x80;
+ *(p++) = c;
+ }
+ while (val);
+ return p;
+}
+
+/* Write attribute ATTR to butter P, and return a pointer to the following
+ byte. */
+static bfd_byte *
+write_obj_attribute (bfd_byte *p, int tag, obj_attribute *attr)
+{
+ /* Suppress default entries. */
+ if (is_default_attr (attr))
+ return p;
+
+ p = write_uleb128 (p, tag);
+ if (attr->type & 1)
+ p = write_uleb128 (p, attr->i);
+ if (attr->type & 2)
+ {
+ int len;
+
+ len = strlen (attr->s) + 1;
+ memcpy (p, attr->s, len);
+ p += len;
+ }
+
+ return p;
+}
+
+/* Write the contents of the object attributes section (length SIZE)
+ for VENDOR to CONTENTS. */
+static void
+vendor_set_obj_attr_contents (bfd *abfd, bfd_byte *contents, bfd_vma size,
+ int vendor)
+{
+ bfd_byte *p;
+ obj_attribute *attr;
+ obj_attribute_list *list;
+ int i;
+ const char *vendor_name = vendor_obj_attr_name (abfd, vendor);
+ size_t vendor_length = strlen (vendor_name) + 1;
+
+ p = contents;
+ bfd_put_32 (abfd, size, p);
+ p += 4;
+ memcpy (p, vendor_name, vendor_length);
+ p += vendor_length;
+ *(p++) = Tag_File;
+ bfd_put_32 (abfd, size - 4 - vendor_length, p);
+ p += 4;
+
+ attr = elf_known_obj_attributes (abfd)[vendor];
+ for (i = 4; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
+ p = write_obj_attribute (p, i, &attr[i]);
+
+ for (list = elf_other_obj_attributes (abfd)[vendor];
+ list;
+ list = list->next)
+ p = write_obj_attribute (p, list->tag, &list->attr);
+}
+
+/* Write the contents of the object attributes section to CONTENTS. */
+void
+bfd_elf_set_obj_attr_contents (bfd *abfd, bfd_byte *contents, bfd_vma size)
+{
+ bfd_byte *p;
+ int vendor;
+ bfd_vma my_size;
+
+ p = contents;
+ *(p++) = 'A';
+ my_size = 1;
+ for (vendor = OBJ_ATTR_FIRST; vendor <= OBJ_ATTR_LAST; vendor++)
+ {
+ bfd_vma vendor_size = vendor_obj_attr_size (abfd, vendor);
+ if (vendor_size)
+ vendor_set_obj_attr_contents (abfd, p, vendor_size, vendor);
+ p += vendor_size;
+ my_size += vendor_size;
+ }
+
+ if (size != my_size)
+ abort ();
+}
+
+/* Allocate/find an object attribute. */
+static obj_attribute *
+elf_new_obj_attr (bfd *abfd, int vendor, int tag)
+{
+ obj_attribute *attr;
+ obj_attribute_list *list;
+ obj_attribute_list *p;
+ obj_attribute_list **lastp;
+
+
+ if (tag < NUM_KNOWN_OBJ_ATTRIBUTES)
+ {
+ /* Knwon tags are preallocated. */
+ attr = &elf_known_obj_attributes (abfd)[vendor][tag];
+ }
+ else
+ {
+ /* Create a new tag. */
+ list = (obj_attribute_list *)
+ bfd_alloc (abfd, sizeof (obj_attribute_list));
+ memset (list, 0, sizeof (obj_attribute_list));
+ list->tag = tag;
+ /* Keep the tag list in order. */
+ lastp = &elf_other_obj_attributes (abfd)[vendor];
+ for (p = *lastp; p; p = p->next)
+ {
+ if (tag < p->tag)
+ break;
+ lastp = &p->next;
+ }
+ list->next = *lastp;
+ *lastp = list;
+ attr = &list->attr;
+ }
+
+ return attr;
+}
+
+/* Return the value of an integer object attribute. */
+int
+bfd_elf_get_obj_attr_int (bfd *abfd, int vendor, int tag)
+{
+ obj_attribute_list *p;
+
+ if (tag < NUM_KNOWN_OBJ_ATTRIBUTES)
+ {
+ /* Knwon tags are preallocated. */
+ return elf_known_obj_attributes (abfd)[vendor][tag].i;
+ }
+ else
+ {
+ for (p = elf_other_obj_attributes (abfd)[vendor];
+ p;
+ p = p->next)
+ {
+ if (tag == p->tag)
+ return p->attr.i;
+ if (tag < p->tag)
+ break;
+ }
+ return 0;
+ }
+}
+
+/* Add an integer object attribute. */
+void
+bfd_elf_add_obj_attr_int (bfd *abfd, int vendor, int tag, unsigned int i)
+{
+ obj_attribute *attr;
+
+ attr = elf_new_obj_attr (abfd, vendor, tag);
+ attr->type = 1;
+ attr->i = i;
+}
+
+/* Duplicate an object attribute string value. */
+char *
+_bfd_elf_attr_strdup (bfd *abfd, const char * s)
+{
+ char * p;
+ int len;
+
+ len = strlen (s) + 1;
+ p = (char *) bfd_alloc (abfd, len);
+ return memcpy (p, s, len);
+}
+
+/* Add a string object attribute. */
+void
+bfd_elf_add_obj_attr_string (bfd *abfd, int vendor, int tag, const char *s)
+{
+ obj_attribute *attr;
+
+ attr = elf_new_obj_attr (abfd, vendor, tag);
+ attr->type = 2;
+ attr->s = _bfd_elf_attr_strdup (abfd, s);
+}
+
+/* Add a Tag_compatibility object attribute. */
+void
+bfd_elf_add_obj_attr_compat (bfd *abfd, int vendor, unsigned int i,
+ const char *s)
+{
+ obj_attribute_list *list;
+ obj_attribute_list *p;
+ obj_attribute_list **lastp;
+
+ list = (obj_attribute_list *)
+ bfd_alloc (abfd, sizeof (obj_attribute_list));
+ memset (list, 0, sizeof (obj_attribute_list));
+ list->tag = Tag_compatibility;
+ list->attr.type = 3;
+ list->attr.i = i;
+ list->attr.s = _bfd_elf_attr_strdup (abfd, s);
+
+ lastp = &elf_other_obj_attributes (abfd)[vendor];
+ for (p = *lastp; p; p = p->next)
+ {
+ int cmp;
+ if (p->tag != Tag_compatibility)
+ break;
+ cmp = strcmp(s, p->attr.s);
+ if (cmp < 0 || (cmp == 0 && i < p->attr.i))
+ break;
+ lastp = &p->next;
+ }
+ list->next = *lastp;
+ *lastp = list;
+}
+
+/* Copy the object attributes from IBFD to OBFD. */
+void
+_bfd_elf_copy_obj_attributes (bfd *ibfd, bfd *obfd)
+{
+ obj_attribute *in_attr;
+ obj_attribute *out_attr;
+ obj_attribute_list *list;
+ int i;
+ int vendor;
+
+ for (vendor = OBJ_ATTR_FIRST; vendor <= OBJ_ATTR_LAST; vendor++)
+ {
+ in_attr = &elf_known_obj_attributes (ibfd)[vendor][4];
+ out_attr = &elf_known_obj_attributes (obfd)[vendor][4];
+ for (i = 4; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
+ {
+ out_attr->type = in_attr->type;
+ out_attr->i = in_attr->i;
+ if (in_attr->s && *in_attr->s)
+ out_attr->s = _bfd_elf_attr_strdup (obfd, in_attr->s);
+ in_attr++;
+ out_attr++;
+ }
+
+ for (list = elf_other_obj_attributes (ibfd)[vendor];
+ list;
+ list = list->next)
+ {
+ in_attr = &list->attr;
+ switch (in_attr->type)
+ {
+ case 1:
+ bfd_elf_add_obj_attr_int (obfd, vendor, list->tag, in_attr->i);
+ break;
+ case 2:
+ bfd_elf_add_obj_attr_string (obfd, vendor, list->tag,
+ in_attr->s);
+ break;
+ case 3:
+ bfd_elf_add_obj_attr_compat (obfd, vendor, in_attr->i,
+ in_attr->s);
+ break;
+ default:
+ abort ();
+ }
+ }
+ }
+}
+
+/* Determine whether a GNU object attribute tag takes an integer, a
+ string or both. */
+static int
+gnu_obj_attrs_arg_type (int tag)
+{
+ /* Except for Tag_compatibility, for GNU attributes we follow the
+ same rule ARM ones > 32 follow: odd-numbered tags take strings
+ and even-numbered tags take integers. In addition, tag & 2 is
+ nonzero for architecture-independent tags and zero for
+ architecture-dependent ones. */
+ if (tag == Tag_compatibility)
+ return 3;
+ else
+ return (tag & 1) != 0 ? 2 : 1;
+}
+
+/* Determine what arguments an attribute tag takes. */
+int
+_bfd_elf_obj_attrs_arg_type (bfd *abfd, int vendor, int tag)
+{
+ switch (vendor)
+ {
+ case OBJ_ATTR_PROC:
+ return get_elf_backend_data (abfd)->obj_attrs_arg_type (tag);
+ break;
+ case OBJ_ATTR_GNU:
+ return gnu_obj_attrs_arg_type (tag);
+ break;
+ default:
+ abort ();
+ }
+}
+
+/* Parse an object attributes section. */
+void
+_bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
+{
+ bfd_byte *contents;
+ bfd_byte *p;
+ bfd_vma len;
+ const char *std_section;
+
+ contents = bfd_malloc (hdr->sh_size);
+ if (!contents)
+ return;
+ if (!bfd_get_section_contents (abfd, hdr->bfd_section, contents, 0,
+ hdr->sh_size))
+ {
+ free (contents);
+ return;
+ }
+ p = contents;
+ std_section = get_elf_backend_data (abfd)->obj_attrs_vendor;
+ if (*(p++) == 'A')
+ {
+ len = hdr->sh_size - 1;
+ while (len > 0)
+ {
+ int namelen;
+ bfd_vma section_len;
+ int vendor;
+
+ section_len = bfd_get_32 (abfd, p);
+ p += 4;
+ if (section_len > len)
+ section_len = len;
+ len -= section_len;
+ namelen = strlen ((char *)p) + 1;
+ section_len -= namelen + 4;
+ if (std_section && strcmp ((char *)p, std_section) == 0)
+ vendor = OBJ_ATTR_PROC;
+ else if (strcmp ((char *)p, "gnu") == 0)
+ vendor = OBJ_ATTR_GNU;
+ else
+ {
+ /* Other vendor section. Ignore it. */
+ p += namelen + section_len;
+ continue;
+ }
+
+ p += namelen;
+ while (section_len > 0)
+ {
+ int tag;
+ unsigned int n;
+ unsigned int val;
+ bfd_vma subsection_len;
+ bfd_byte *end;
+
+ tag = read_unsigned_leb128 (abfd, p, &n);
+ p += n;
+ subsection_len = bfd_get_32 (abfd, p);
+ p += 4;
+ if (subsection_len > section_len)
+ subsection_len = section_len;
+ section_len -= subsection_len;
+ subsection_len -= n + 4;
+ end = p + subsection_len;
+ switch (tag)
+ {
+ case Tag_File:
+ while (p < end)
+ {
+ int type;
+
+ tag = read_unsigned_leb128 (abfd, p, &n);
+ p += n;
+ type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag);
+ switch (type)
+ {
+ case 3:
+ val = read_unsigned_leb128 (abfd, p, &n);
+ p += n;
+ bfd_elf_add_obj_attr_compat (abfd, vendor, val,
+ (char *)p);
+ p += strlen ((char *)p) + 1;
+ break;
+ case 2:
+ bfd_elf_add_obj_attr_string (abfd, vendor, tag,
+ (char *)p);
+ p += strlen ((char *)p) + 1;
+ break;
+ case 1:
+ val = read_unsigned_leb128 (abfd, p, &n);
+ p += n;
+ bfd_elf_add_obj_attr_int (abfd, vendor, tag, val);
+ break;
+ default:
+ abort ();
+ }
+ }
+ break;
+ case Tag_Section:
+ case Tag_Symbol:
+ /* Don't have anywhere convenient to attach these.
+ Fall through for now. */
+ default:
+ /* Ignore things we don't kow about. */
+ p += subsection_len;
+ subsection_len = 0;
+ break;
+ }
+ }
+ }
+ }
+ free (contents);
+}
+
+/* Merge common object attributes from IBFD into OBFD. Raise an error
+ if there are conflicting attributes. Any processor-specific
+ attributes have already been merged. This must be called from the
+ bfd_elfNN_bfd_merge_private_bfd_data hook for each individual
+ target, along with any target-specific merging. Because there are
+ no common attributes other than Tag_compatibility at present, and
+ non-"gnu" Tag_compatibility is not expected in "gnu" sections, this
+ is not presently called for targets without their own
+ attributes. */
+
+bfd_boolean
+_bfd_elf_merge_object_attributes (bfd *ibfd, bfd *obfd)
+{
+ obj_attribute *in_attr;
+ obj_attribute *out_attr;
+ obj_attribute_list *in_list;
+ obj_attribute_list *out_list;
+ int vendor;
+
+ /* The only common attribute is currently Tag_compatibility,
+ accepted in both processor and "gnu" sections. */
+ for (vendor = OBJ_ATTR_FIRST; vendor <= OBJ_ATTR_LAST; vendor++)
+ {
+ in_list = elf_other_obj_attributes (ibfd)[vendor];
+ out_list = elf_other_obj_attributes (ibfd)[vendor];
+ while (in_list && in_list->tag == Tag_compatibility)
+ {
+ in_attr = &in_list->attr;
+ if (in_attr->i == 0)
+ continue;
+ if (in_attr->i == 1 && strcmp (in_attr->s, "gnu") != 0)
+ {
+ _bfd_error_handler
+ (_("ERROR: %B: Must be processed by '%s' toolchain"),
+ ibfd, in_attr->s);
+ return FALSE;
+ }
+ if (!out_list || out_list->tag != Tag_compatibility
+ || strcmp (in_attr->s, out_list->attr.s) != 0)
+ {
+ /* Add this compatibility tag to the output. */
+ bfd_elf_add_proc_attr_compat (obfd, in_attr->i, in_attr->s);
+ continue;
+ }
+ out_attr = &out_list->attr;
+ /* Check all the input tags with the same identifier. */
+ for (;;)
+ {
+ if (out_list->tag != Tag_compatibility
+ || in_attr->i != out_attr->i
+ || strcmp (in_attr->s, out_attr->s) != 0)
+ {
+ _bfd_error_handler
+ (_("ERROR: %B: Incompatible object tag '%s':%d"),
+ ibfd, in_attr->s, in_attr->i);
+ return FALSE;
+ }
+ in_list = in_list->next;
+ if (in_list->tag != Tag_compatibility
+ || strcmp (in_attr->s, in_list->attr.s) != 0)
+ break;
+ in_attr = &in_list->attr;
+ out_list = out_list->next;
+ if (out_list)
+ out_attr = &out_list->attr;
+ }
+
+ /* Check the output doesn't have extra tags with this identifier. */
+ if (out_list && out_list->tag == Tag_compatibility
+ && strcmp (in_attr->s, out_list->attr.s) == 0)
+ {
+ _bfd_error_handler
+ (_("ERROR: %B: Incompatible object tag '%s':%d"),
+ ibfd, in_attr->s, out_list->attr.i);
+ return FALSE;
+ }
+ }
+ }
+
+ return TRUE;
+}
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 3fba1c228f0a..f4c3a0a3203b 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1,6 +1,6 @@
/* BFD back-end data structures for ELF files.
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -155,6 +155,8 @@ struct elf_link_hash_entry
unsigned int hidden : 1;
/* Symbol was forced to local scope due to a version script file. */
unsigned int forced_local : 1;
+ /* Symbol was forced to be dynamic due to a version script file. */
+ unsigned int dynamic : 1;
/* Symbol was marked during garbage collection. */
unsigned int mark : 1;
/* Symbol is referenced by a non-GOT/non-PLT relocation. This is
@@ -259,31 +261,6 @@ struct elf_link_loaded_list
};
/* Structures used by the eh_frame optimization code. */
-struct cie_header
-{
- unsigned int length;
- unsigned int id;
-};
-
-struct cie
-{
- struct cie_header hdr;
- unsigned char version;
- char augmentation[20];
- bfd_vma code_align;
- bfd_signed_vma data_align;
- bfd_vma ra_column;
- bfd_vma augmentation_size;
- struct elf_link_hash_entry *personality;
- unsigned char per_encoding;
- unsigned char lsda_encoding;
- unsigned char fde_encoding;
- unsigned char initial_insn_length;
- unsigned char make_relative;
- unsigned char make_lsda_relative;
- unsigned char initial_instructions[50];
-};
-
struct eh_cie_fde
{
/* For FDEs, this points to the CIE used. */
@@ -302,12 +279,12 @@ struct eh_cie_fde
unsigned int make_lsda_relative : 1;
unsigned int need_lsda_relative : 1;
unsigned int per_encoding_relative : 1;
+ unsigned int *set_loc;
};
struct eh_frame_sec_info
{
unsigned int count;
- unsigned int alloced;
struct eh_cie_fde entry[1];
};
@@ -317,11 +294,11 @@ struct eh_frame_array_ent
bfd_vma fde;
};
+struct htab;
+
struct eh_frame_hdr_info
{
- struct cie last_cie;
- asection *last_cie_sec;
- struct eh_cie_fde *last_cie_inf;
+ struct htab *cies;
asection *hdr_sec;
unsigned int fde_count, array_count;
struct eh_frame_array_ent *array;
@@ -342,6 +319,10 @@ struct elf_link_hash_table
when linking against or generating a shared object. */
bfd_boolean dynamic_sections_created;
+ /* True if this target has relocatable executables, so needs dynamic
+ section symbols. */
+ bfd_boolean is_relocatable_executable;
+
/* The BFD used to hold special sections created by the linker.
This will be the first BFD found which requires these sections to
be created. */
@@ -375,6 +356,12 @@ struct elf_link_hash_table
included in the link. */
struct bfd_link_needed_list *needed;
+ /* Sections in the output bfd that provides a section symbol
+ to be used by relocations emitted against local symbols.
+ Most targets will not use data_index_section. */
+ asection *text_index_section;
+ asection *data_index_section;
+
/* The _GLOBAL_OFFSET_TABLE_ symbol. */
struct elf_link_hash_entry *hgot;
@@ -403,10 +390,6 @@ struct elf_link_hash_table
/* A linked list of BFD's loaded in the link. */
struct elf_link_loaded_list *loaded;
-
- /* True if this target has relocatable executables, so needs dynamic
- section symbols. */
- bfd_boolean is_relocatable_executable;
};
/* Look up an entry in an ELF linker hash table. */
@@ -466,7 +449,7 @@ struct elf_size_info {
(*write_shdrs_and_ehdr) (bfd *);
void (*write_relocs)
(bfd *, asection *, void *);
- void (*swap_symbol_in)
+ bfd_boolean (*swap_symbol_in)
(bfd *, const void *, const void *, Elf_Internal_Sym *);
void (*swap_symbol_out)
(bfd *, const Elf_Internal_Sym *, void *, void *);
@@ -555,6 +538,10 @@ enum action_discarded
PRETEND = 2
};
+typedef asection * (*elf_gc_mark_hook_fn)
+ (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
+ struct elf_link_hash_entry *, Elf_Internal_Sym *);
+
struct elf_backend_data
{
/* The architecture for this backend. */
@@ -563,6 +550,9 @@ struct elf_backend_data
/* The ELF machine code (EM_xxxx) for this backend. */
int elf_machine_code;
+ /* EI_OSABI. */
+ int elf_osabi;
+
/* The maximum page size for this backend. */
bfd_vma maxpagesize;
@@ -571,6 +561,9 @@ struct elf_backend_data
pages at least this large. May be smaller than maxpagesize. */
bfd_vma minpagesize;
+ /* The common page size for this backend. */
+ bfd_vma commonpagesize;
+
/* The BFD flags applied to sections created for dynamic linking. */
flagword dynamic_sec_flags;
@@ -725,6 +718,13 @@ struct elf_backend_data
bfd_boolean (*check_directives)
(bfd *abfd, struct bfd_link_info *info);
+ /* The AS_NEEDED_CLEANUP function is called once per --as-needed
+ input file that was not needed by the add_symbols phase of the
+ ELF backend linker. The function must undo any target specific
+ changes in the symbol hash table. */
+ bfd_boolean (*as_needed_cleanup)
+ (bfd *abfd, struct bfd_link_info *info);
+
/* The ADJUST_DYNAMIC_SYMBOL function is called by the ELF backend
linker for every symbol which is defined by a dynamic object and
referenced by a regular object. This is called after all the
@@ -760,6 +760,11 @@ struct elf_backend_data
bfd_boolean (*elf_backend_size_dynamic_sections)
(bfd *output_bfd, struct bfd_link_info *info);
+ /* Set TEXT_INDEX_SECTION and DATA_INDEX_SECTION, the output sections
+ we keep to use as a base for relocs and symbols. */
+ void (*elf_backend_init_index_section)
+ (bfd *output_bfd, struct bfd_link_info *info);
+
/* The RELOCATE_SECTION function is called by the ELF backend linker
to handle the relocations for a section.
@@ -787,8 +792,11 @@ struct elf_backend_data
STB_LOCAL/STT_SECTION symbols specially. The output symbol is
going to be the section symbol corresponding to the output
section, which means that the addend must be adjusted
- accordingly. */
- bfd_boolean (*elf_backend_relocate_section)
+ accordingly.
+
+ Returns FALSE on error, TRUE on success, 2 if successful and
+ relocations should be written for this section. */
+ int (*elf_backend_relocate_section)
(bfd *output_bfd, struct bfd_link_info *info, bfd *input_bfd,
asection *input_section, bfd_byte *contents, Elf_Internal_Rela *relocs,
Elf_Internal_Sym *local_syms, asection **local_sections);
@@ -826,13 +834,18 @@ struct elf_backend_data
return the number of additional program segments which this BFD
will need. It should return -1 on error. */
int (*elf_backend_additional_program_headers)
- (bfd *);
+ (bfd *, struct bfd_link_info *);
/* This function is called to modify an existing segment map in a
backend specific fashion. */
bfd_boolean (*elf_backend_modify_segment_map)
(bfd *, struct bfd_link_info *);
+ /* This function is called to modify program headers just before
+ they are written. */
+ bfd_boolean (*elf_backend_modify_program_headers)
+ (bfd *, struct bfd_link_info *);
+
/* This function is called during section garbage collection to
mark sections that define global symbols. */
bfd_boolean (*gc_mark_dynamic_ref)
@@ -840,9 +853,12 @@ struct elf_backend_data
/* This function is called during section gc to discover the section a
particular relocation refers to. */
- asection * (*gc_mark_hook)
- (asection *sec, struct bfd_link_info *, Elf_Internal_Rela *,
- struct elf_link_hash_entry *h, Elf_Internal_Sym *);
+ elf_gc_mark_hook_fn gc_mark_hook;
+
+ /* This function, if defined, is called after the first gc marking pass
+ to allow the backend to mark additional sections. */
+ bfd_boolean (*gc_mark_extra_sections)
+ (struct bfd_link_info *info, elf_gc_mark_hook_fn gc_mark_hook);
/* This function, if defined, is called during the sweep phase of gc
in order that a backend might update any data structures it might
@@ -865,8 +881,16 @@ struct elf_backend_data
/* This function, if defined, is called after all local symbols and
global symbols converted to locals are emitted into the symtab
- section. It allows the backend to emit special global symbols
+ section. It allows the backend to emit special local symbols
not handled in the hash table. */
+ bfd_boolean (*elf_backend_output_arch_local_syms)
+ (bfd *, struct bfd_link_info *, void *,
+ bfd_boolean (*) (void *, const char *, Elf_Internal_Sym *, asection *,
+ struct elf_link_hash_entry *));
+
+ /* This function, if defined, is called after all symbols are emitted
+ into the symtab section. It allows the backend to emit special
+ global symbols not handled in the hash table. */
bfd_boolean (*elf_backend_output_arch_syms)
(bfd *, struct bfd_link_info *, void *,
bfd_boolean (*) (void *, const char *, Elf_Internal_Sym *, asection *,
@@ -913,15 +937,19 @@ struct elf_backend_data
(asection *, Elf_Internal_Rela *);
/* This function, if defined, is called when an NT_PRSTATUS note is found
- in a core file. */
+ in a core file. */
bfd_boolean (*elf_backend_grok_prstatus)
(bfd *, Elf_Internal_Note *);
/* This function, if defined, is called when an NT_PSINFO or NT_PRPSINFO
- note is found in a core file. */
+ note is found in a core file. */
bfd_boolean (*elf_backend_grok_psinfo)
(bfd *, Elf_Internal_Note *);
+ /* This function, if defined, is called to write a note to a corefile. */
+ char *(*elf_backend_write_core_note)
+ (bfd *abfd, char *buf, int *bufsiz, int note_type, ...);
+
/* Functions to print VMAs. Special code to handle 64 bit ELF files. */
void (* elf_backend_sprintf_vma)
(bfd *, char *, bfd_vma);
@@ -974,7 +1002,7 @@ struct elf_backend_data
/* This function, if defined, may write out the given section.
Returns TRUE if it did so and FALSE if the caller should. */
bfd_boolean (*elf_backend_write_section)
- (bfd *, asection *, bfd_byte *);
+ (bfd *, struct bfd_link_info *, asection *, bfd_byte *);
/* The level of IRIX compatibility we're striving for.
MIPS ELF specific function. */
@@ -1022,6 +1050,12 @@ struct elf_backend_data
bfd_boolean *, bfd_boolean *,
bfd *, asection **);
+ /* Return TRUE if symbol should be hashed in the `.gnu.hash' section. */
+ bfd_boolean (*elf_hash_symbol) (struct elf_link_hash_entry *);
+
+ /* Return TRUE if type is a function symbol type. */
+ bfd_boolean (*is_function_type) (unsigned int type);
+
/* Used to handle bad SHF_LINK_ORDER input. */
bfd_error_handler_type link_order_error_handler;
@@ -1041,6 +1075,19 @@ struct elf_backend_data
so-called reserved entries on some systems. */
bfd_vma got_header_size;
+ /* The vendor name to use for a processor-standard attributes section. */
+ const char *obj_attrs_vendor;
+
+ /* The section name to use for a processor-standard attributes section. */
+ const char *obj_attrs_section;
+
+ /* Return 1, 2 or 3 to indicate what type of arguments a
+ processor-specific tag takes. */
+ int (*obj_attrs_arg_type) (int);
+
+ /* The section type to use for an attributes section. */
+ unsigned int obj_attrs_section_type;
+
/* This is TRUE if the linker should act like collect and gather
global constructors and destructors by name. This is TRUE for
MIPS ELF because the Irix 5 tools can not handle the .init
@@ -1088,10 +1135,17 @@ struct elf_backend_data
unsigned can_refcount : 1;
unsigned want_got_sym : 1;
unsigned want_dynbss : 1;
- /* Targets which do not support physical addressing often require
- that the p_paddr field in the section header to be set to zero.
- This field indicates whether this behavior is required. */
+
+ /* Targets which do not support physical addressing often require
+ that the p_paddr field in the section header to be set to zero.
+ This field indicates whether this behavior is required. */
unsigned want_p_paddr_set_to_zero : 1;
+
+ /* True if an object file lacking a .note.GNU-stack section
+ should be assumed to be requesting exec stack. At least one
+ other file in the link needs to have a .note.GNU-stack section
+ for a PT_GNU_STACK segment to be created. */
+ unsigned default_execstack : 1;
};
/* Information stored for each BFD section in an ELF file. This
@@ -1160,12 +1214,12 @@ struct bfd_elf_section_data
struct bfd_symbol *id;
} group;
- /* Optional information about section group; NULL if it doesn't
- belongs to any section group. */
+ /* For a member of a group, points to the SHT_GROUP section.
+ NULL for the SHT_GROUP section itself and non-group sections. */
asection *sec_group;
- /* A linked list of sections in the group. Circular when used by
- the linker. */
+ /* A linked list of member sections in the group. Circular when used by
+ the linker. For the SHT_GROUP section, points at first member. */
asection *next_in_group;
/* A pointer used for various section optimizations. */
@@ -1181,15 +1235,11 @@ struct bfd_elf_section_data
#define elf_next_in_group(sec) (elf_section_data(sec)->next_in_group)
#define elf_sec_group(sec) (elf_section_data(sec)->sec_group)
-/* Return TRUE if section has been discarded. */
-#define elf_discarded_section(sec) \
- (!bfd_is_abs_section (sec) \
- && bfd_is_abs_section ((sec)->output_section) \
- && (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
- && (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
+#define xvec_get_elf_backend_data(xvec) \
+ ((struct elf_backend_data *) (xvec)->backend_data)
#define get_elf_backend_data(abfd) \
- ((const struct elf_backend_data *) (abfd)->xvec->backend_data)
+ xvec_get_elf_backend_data ((abfd)->xvec)
/* This struct is used to pass information to routines called via
elf_link_hash_traverse which must return failure. */
@@ -1231,6 +1281,46 @@ struct elf_find_verdep_info
bfd_boolean failed;
};
+/* The maximum number of known object attributes for any target. */
+#define NUM_KNOWN_OBJ_ATTRIBUTES 32
+
+/* The value of an object attribute. type & 1 indicates whether there
+ is an integer value; type & 2 indicates whether there is a string
+ value. */
+
+typedef struct obj_attribute
+{
+ int type;
+ unsigned int i;
+ char *s;
+} obj_attribute;
+
+typedef struct obj_attribute_list
+{
+ struct obj_attribute_list *next;
+ int tag;
+ obj_attribute attr;
+} obj_attribute_list;
+
+/* Object attributes may either be defined by the processor ABI, index
+ OBJ_ATTR_PROC in the *_obj_attributes arrays, or be GNU-specific
+ (and possibly also processor-specific), index OBJ_ATTR_GNU. */
+#define OBJ_ATTR_PROC 0
+#define OBJ_ATTR_GNU 1
+#define OBJ_ATTR_FIRST OBJ_ATTR_PROC
+#define OBJ_ATTR_LAST OBJ_ATTR_GNU
+
+/* The following object attribute tags are taken as generic, for all
+ targets and for "gnu" where there is no target standard. */
+enum
+{
+ Tag_NULL = 0,
+ Tag_File = 1,
+ Tag_Section = 2,
+ Tag_Symbol = 3,
+ Tag_compatibility = 32
+};
+
/* Some private data is stashed away for future use using the tdata pointer
in the bfd structure. */
@@ -1317,6 +1407,7 @@ struct elf_obj_tdata
MIPS ELF linker. FIXME: We should figure out some way to only
include this field for a MIPS ELF target. */
asection **local_stubs;
+ asection **local_call_stubs;
/* Used to determine if PT_GNU_EH_FRAME segment header should be
created. */
@@ -1368,6 +1459,12 @@ struct elf_obj_tdata
/* Used to determine if the e_flags field has been initialized */
bfd_boolean flags_init;
+
+ /* Symbol buffer. */
+ void *symbuf;
+
+ obj_attribute known_obj_attributes[2][NUM_KNOWN_OBJ_ATTRIBUTES];
+ obj_attribute_list *other_obj_attributes[2];
};
#define elf_tdata(bfd) ((bfd) -> tdata.elf_obj_data)
@@ -1397,6 +1494,12 @@ struct elf_obj_tdata
#define elf_dyn_lib_class(bfd) (elf_tdata(bfd) -> dyn_lib_class)
#define elf_bad_symtab(bfd) (elf_tdata(bfd) -> bad_symtab)
#define elf_flags_init(bfd) (elf_tdata(bfd) -> flags_init)
+#define elf_known_obj_attributes(bfd) (elf_tdata (bfd) -> known_obj_attributes)
+#define elf_other_obj_attributes(bfd) (elf_tdata (bfd) -> other_obj_attributes)
+#define elf_known_obj_attributes_proc(bfd) \
+ (elf_known_obj_attributes (bfd) [OBJ_ATTR_PROC])
+#define elf_other_obj_attributes_proc(bfd) \
+ (elf_other_obj_attributes (bfd) [OBJ_ATTR_PROC])
extern void _bfd_elf_swap_verdef_in
(bfd *, const Elf_External_Verdef *, Elf_Internal_Verdef *);
@@ -1462,6 +1565,8 @@ extern bfd_vma _bfd_elf_section_offset
extern unsigned long bfd_elf_hash
(const char *);
+extern unsigned long bfd_elf_gnu_hash
+ (const char *);
extern bfd_reloc_status_type bfd_elf_generic_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
@@ -1500,11 +1605,11 @@ extern bfd_boolean _bfd_elf_match_sections_by_type
extern bfd_boolean bfd_elf_is_group_section
(bfd *, const struct bfd_section *);
extern void _bfd_elf_section_already_linked
- (bfd *, struct bfd_section *);
+ (bfd *, struct bfd_section *, struct bfd_link_info *);
extern void bfd_elf_set_group_contents
(bfd *, asection *, void *);
extern asection *_bfd_elf_check_kept_section
- (asection *);
+ (asection *, struct bfd_link_info *);
extern void _bfd_elf_link_just_syms
(asection *, struct bfd_link_info *);
extern bfd_boolean _bfd_elf_copy_private_header_data
@@ -1562,7 +1667,7 @@ extern bfd_boolean _bfd_elf_find_inliner_info
#define _bfd_elf_read_minisymbols _bfd_generic_read_minisymbols
#define _bfd_elf_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
extern int _bfd_elf_sizeof_headers
- (bfd *, bfd_boolean);
+ (bfd *, struct bfd_link_info *);
extern bfd_boolean _bfd_elf_new_section_hook
(bfd *, asection *);
extern bfd_boolean _bfd_elf_init_reloc_shdr
@@ -1632,6 +1737,8 @@ extern bfd_boolean _bfd_elf_merge_symbol
struct elf_link_hash_entry **, bfd_boolean *,
bfd_boolean *, bfd_boolean *, bfd_boolean *);
+extern bfd_boolean _bfd_elf_hash_symbol (struct elf_link_hash_entry *);
+
extern bfd_boolean _bfd_elf_add_default_symbol
(bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
const char *, Elf_Internal_Sym *, asection **, bfd_vma *,
@@ -1668,6 +1775,10 @@ extern bfd_boolean _bfd_elf_create_got_section
(bfd *, struct bfd_link_info *);
extern struct elf_link_hash_entry *_bfd_elf_define_linkage_sym
(bfd *, struct bfd_link_info *, asection *, const char *);
+extern void _bfd_elf_init_1_index_section
+ (bfd *, struct bfd_link_info *);
+extern void _bfd_elf_init_2_index_sections
+ (bfd *, struct bfd_link_info *);
extern bfd_boolean _bfd_elfcore_make_pseudosection
(bfd *, char *, size_t, ufile_ptr);
@@ -1690,6 +1801,9 @@ extern bfd_boolean _bfd_elf_fix_symbol_flags
extern bfd_boolean _bfd_elf_adjust_dynamic_symbol
(struct elf_link_hash_entry *, void *);
+extern bfd_boolean _bfd_elf_adjust_dynamic_copy
+ (struct elf_link_hash_entry *, asection *);
+
extern bfd_boolean _bfd_elf_link_sec_merge_syms
(struct elf_link_hash_entry *, void *);
@@ -1700,11 +1814,23 @@ extern bfd_boolean _bfd_elf_symbol_refs_local_p
(struct elf_link_hash_entry *, struct bfd_link_info *, bfd_boolean);
extern bfd_boolean bfd_elf_match_symbols_in_sections
- (asection *sec1, asection *sec2);
+ (asection *, asection *, struct bfd_link_info *);
+
+extern void bfd_elf_perform_complex_relocation
+ (bfd * output_bfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info * info,
+ bfd * input_bfd,
+ asection * input_section,
+ bfd_byte * contents,
+ Elf_Internal_Rela * rel,
+ Elf_Internal_Sym * local_syms,
+ asection ** local_sections);
extern bfd_boolean _bfd_elf_setup_sections
(bfd *);
+extern void _bfd_elf_set_osabi (bfd * , struct bfd_link_info *);
+
extern const bfd_target *bfd_elf32_object_p
(bfd *);
extern const bfd_target *bfd_elf32_core_file_p
@@ -1716,7 +1842,7 @@ extern int bfd_elf32_core_file_failing_signal
extern bfd_boolean bfd_elf32_core_file_matches_executable_p
(bfd *, bfd *);
-extern void bfd_elf32_swap_symbol_in
+extern bfd_boolean bfd_elf32_swap_symbol_in
(bfd *, const void *, const void *, Elf_Internal_Sym *);
extern void bfd_elf32_swap_symbol_out
(bfd *, const Elf_Internal_Sym *, void *, void *);
@@ -1758,7 +1884,7 @@ extern int bfd_elf64_core_file_failing_signal
extern bfd_boolean bfd_elf64_core_file_matches_executable_p
(bfd *, bfd *);
-extern void bfd_elf64_swap_symbol_in
+extern bfd_boolean bfd_elf64_swap_symbol_in
(bfd *, const void *, const void *, Elf_Internal_Sym *);
extern void bfd_elf64_swap_symbol_out
(bfd *, const Elf_Internal_Sym *, void *, void *);
@@ -1802,6 +1928,10 @@ extern bfd_boolean bfd_elf_link_record_dynamic_symbol
extern int bfd_elf_link_record_local_dynamic_symbol
(struct bfd_link_info *, bfd *, long);
+extern void bfd_elf_link_mark_dynamic_symbol
+ (struct bfd_link_info *, struct elf_link_hash_entry *,
+ Elf_Internal_Sym *);
+
extern bfd_boolean _bfd_elf_close_and_cleanup
(bfd *);
@@ -1836,6 +1966,10 @@ extern bfd_boolean bfd_elf_gc_record_vtinherit
extern bfd_boolean bfd_elf_gc_record_vtentry
(bfd *, asection *, struct elf_link_hash_entry *, bfd_vma);
+extern asection *_bfd_elf_gc_mark_hook
+ (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
+ struct elf_link_hash_entry *, Elf_Internal_Sym *);
+
extern bfd_boolean _bfd_elf_gc_mark
(struct bfd_link_info *, asection *,
asection * (*) (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
@@ -1850,10 +1984,14 @@ extern bfd_boolean bfd_elf_gc_common_final_link
extern bfd_boolean bfd_elf_reloc_symbol_deleted_p
(bfd_vma, void *);
-extern struct elf_segment_map *
-_bfd_elf_make_dynamic_segment
+extern struct elf_segment_map * _bfd_elf_make_dynamic_segment
(bfd *, asection *);
+extern bfd_boolean _bfd_elf_map_sections_to_segments
+ (bfd *, struct bfd_link_info *);
+
+extern bfd_boolean _bfd_elf_is_function_type (unsigned int);
+
/* Exported interface for writing elf corefile notes. */
extern char *elfcore_write_note
(bfd *, char *, int *, const char *, int, const void *, int);
@@ -1877,6 +2015,26 @@ extern bfd *_bfd_elf64_bfd_from_remote_memory
(bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
int (*target_read_memory) (bfd_vma, bfd_byte *, int));
+extern bfd_vma bfd_elf_obj_attr_size (bfd *);
+extern void bfd_elf_set_obj_attr_contents (bfd *, bfd_byte *, bfd_vma);
+extern int bfd_elf_get_obj_attr_int (bfd *, int, int);
+extern void bfd_elf_add_obj_attr_int (bfd *, int, int, unsigned int);
+#define bfd_elf_add_proc_attr_int(BFD, TAG, VALUE) \
+ bfd_elf_add_obj_attr_int ((BFD), OBJ_ATTR_PROC, (TAG), (VALUE))
+extern void bfd_elf_add_obj_attr_string (bfd *, int, int, const char *);
+#define bfd_elf_add_proc_attr_string(BFD, TAG, VALUE) \
+ bfd_elf_add_obj_attr_string ((BFD), OBJ_ATTR_PROC, (TAG), (VALUE))
+extern void bfd_elf_add_obj_attr_compat (bfd *, int, unsigned int,
+ const char *);
+#define bfd_elf_add_proc_attr_compat(BFD, INTVAL, STRVAL) \
+ bfd_elf_add_obj_attr_compat ((BFD), OBJ_ATTR_PROC, (INTVAL), (STRVAL))
+
+extern char *_bfd_elf_attr_strdup (bfd *, const char *);
+extern void _bfd_elf_copy_obj_attributes (bfd *, bfd *);
+extern int _bfd_elf_obj_attrs_arg_type (bfd *, int, int);
+extern void _bfd_elf_parse_attributes (bfd *, Elf_Internal_Shdr *);
+extern bfd_boolean _bfd_elf_merge_object_attributes (bfd *, bfd *);
+
/* Large common section. */
extern asection _bfd_elf_large_com_section;
@@ -1936,7 +2094,7 @@ extern bfd_boolean _sh_elf_set_mach_from_flags
else if (info->unresolved_syms_in_objects == RM_IGNORE \
&& ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) \
; \
- else \
+ else if (!info->relocatable) \
{ \
bfd_boolean err; \
err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR \
@@ -1952,4 +2110,9 @@ extern bfd_boolean _sh_elf_set_mach_from_flags
} \
while (0)
+/* Will a symbol be bound to the the definition within the shared
+ library, if any. */
+#define SYMBOLIC_BIND(INFO, H) \
+ ((INFO)->symbolic || ((INFO)->dynamic && !(H)->dynamic))
+
#endif /* _LIBELF_H_ */
diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c
index 5100e72938d9..092c2c57ec34 100644
--- a/bfd/elf-eh-frame.c
+++ b/bfd/elf-eh-frame.c
@@ -1,5 +1,6 @@
/* .eh_frame section optimization.
- Copyright 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Written by Jakub Jelinek <jakub@redhat.com>.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,14 +19,42 @@
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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/dwarf2.h"
#define EH_FRAME_HDR_SIZE 8
+struct cie
+{
+ unsigned int length;
+ unsigned int hash;
+ unsigned char version;
+ unsigned char local_personality;
+ char augmentation[20];
+ bfd_vma code_align;
+ bfd_signed_vma data_align;
+ bfd_vma ra_column;
+ bfd_vma augmentation_size;
+ union {
+ struct elf_link_hash_entry *h;
+ bfd_vma val;
+ } personality;
+ asection *output_sec;
+ struct eh_cie_fde *cie_inf;
+ unsigned char per_encoding;
+ unsigned char lsda_encoding;
+ unsigned char fde_encoding;
+ unsigned char initial_insn_length;
+ unsigned char make_relative;
+ unsigned char make_lsda_relative;
+ unsigned char initial_instructions[50];
+};
+
+
+
/* If *ITER hasn't reached END yet, read the next byte into *RESULT and
move onto the next byte. Return true on success. */
@@ -180,20 +209,27 @@ write_value (bfd *abfd, bfd_byte *buf, bfd_vma value, int width)
}
}
-/* Return zero if C1 and C2 CIEs can be merged. */
+/* Return one if C1 and C2 CIEs can be merged. */
-static
-int cie_compare (struct cie *c1, struct cie *c2)
+static int
+cie_eq (const void *e1, const void *e2)
{
- if (c1->hdr.length == c2->hdr.length
+ const struct cie *c1 = e1;
+ const struct cie *c2 = e2;
+
+ if (c1->hash == c2->hash
+ && c1->length == c2->length
&& c1->version == c2->version
+ && c1->local_personality == c2->local_personality
&& strcmp (c1->augmentation, c2->augmentation) == 0
&& strcmp (c1->augmentation, "eh") != 0
&& c1->code_align == c2->code_align
&& c1->data_align == c2->data_align
&& c1->ra_column == c2->ra_column
&& c1->augmentation_size == c2->augmentation_size
- && c1->personality == c2->personality
+ && memcmp (&c1->personality, &c2->personality,
+ sizeof (c1->personality)) == 0
+ && c1->output_sec == c2->output_sec
&& c1->per_encoding == c2->per_encoding
&& c1->lsda_encoding == c2->lsda_encoding
&& c1->fde_encoding == c2->fde_encoding
@@ -201,9 +237,38 @@ int cie_compare (struct cie *c1, struct cie *c2)
&& memcmp (c1->initial_instructions,
c2->initial_instructions,
c1->initial_insn_length) == 0)
- return 0;
+ return 1;
+
+ return 0;
+}
+
+static hashval_t
+cie_hash (const void *e)
+{
+ const struct cie *c = e;
+ return c->hash;
+}
- return 1;
+static hashval_t
+cie_compute_hash (struct cie *c)
+{
+ hashval_t h = 0;
+ h = iterative_hash_object (c->length, h);
+ h = iterative_hash_object (c->version, h);
+ h = iterative_hash (c->augmentation, strlen (c->augmentation) + 1, h);
+ h = iterative_hash_object (c->code_align, h);
+ h = iterative_hash_object (c->data_align, h);
+ h = iterative_hash_object (c->ra_column, h);
+ h = iterative_hash_object (c->augmentation_size, h);
+ h = iterative_hash_object (c->personality, h);
+ h = iterative_hash_object (c->output_sec, h);
+ h = iterative_hash_object (c->per_encoding, h);
+ h = iterative_hash_object (c->lsda_encoding, h);
+ h = iterative_hash_object (c->fde_encoding, h);
+ h = iterative_hash_object (c->initial_insn_length, h);
+ h = iterative_hash (c->initial_instructions, c->initial_insn_length, h);
+ c->hash = h;
+ return h;
}
/* Return the number of extra bytes that we'll be inserting into
@@ -273,11 +338,14 @@ skip_cfa_op (bfd_byte **iter, bfd_byte *end, unsigned int encoded_ptr_width)
if (!read_byte (iter, end, &op))
return FALSE;
- switch (op & 0x80 ? op & 0xc0 : op)
+ switch (op & 0xc0 ? op & 0xc0 : op)
{
case DW_CFA_nop:
case DW_CFA_advance_loc:
case DW_CFA_restore:
+ case DW_CFA_remember_state:
+ case DW_CFA_restore_state:
+ case DW_CFA_GNU_window_save:
/* No arguments. */
return TRUE;
@@ -292,6 +360,8 @@ skip_cfa_op (bfd_byte **iter, bfd_byte *end, unsigned int encoded_ptr_width)
/* One leb128 argument. */
return skip_leb128 (iter, end);
+ case DW_CFA_val_offset:
+ case DW_CFA_val_offset_sf:
case DW_CFA_offset_extended:
case DW_CFA_register:
case DW_CFA_def_cfa:
@@ -308,6 +378,7 @@ skip_cfa_op (bfd_byte **iter, bfd_byte *end, unsigned int encoded_ptr_width)
&& skip_bytes (iter, end, length));
case DW_CFA_expression:
+ case DW_CFA_val_expression:
/* A leb128 followed by a variable-length argument. */
return (skip_leb128 (iter, end)
&& read_uleb128 (iter, end, &length)
@@ -339,7 +410,8 @@ skip_cfa_op (bfd_byte **iter, bfd_byte *end, unsigned int encoded_ptr_width)
ENCODED_PTR_WIDTH is as for skip_cfa_op. */
static bfd_byte *
-skip_non_nops (bfd_byte *buf, bfd_byte *end, unsigned int encoded_ptr_width)
+skip_non_nops (bfd_byte *buf, bfd_byte *end, unsigned int encoded_ptr_width,
+ unsigned int *set_loc_count)
{
bfd_byte *last;
@@ -349,6 +421,8 @@ skip_non_nops (bfd_byte *buf, bfd_byte *end, unsigned int encoded_ptr_width)
buf++;
else
{
+ if (*buf == DW_CFA_set_loc)
+ ++*set_loc_count;
if (!skip_cfa_op (&buf, end, encoded_ptr_width))
return 0;
last = buf;
@@ -374,15 +448,24 @@ _bfd_elf_discard_section_eh_frame
while (0)
bfd_byte *ehbuf = NULL, *buf;
- bfd_byte *last_cie, *last_fde;
- struct eh_cie_fde *ent, *last_cie_inf, *this_inf;
- struct cie_header hdr;
- struct cie cie;
+ bfd_byte *last_fde;
+ struct eh_cie_fde *ent, *this_inf;
+ unsigned int hdr_length, hdr_id;
+ struct extended_cie
+ {
+ struct cie cie;
+ unsigned int offset;
+ unsigned int usage_count;
+ unsigned int entry;
+ } *ecies = NULL, *ecie;
+ unsigned int ecie_count = 0, ecie_alloced = 0;
+ struct cie *cie;
struct elf_link_hash_table *htab;
struct eh_frame_hdr_info *hdr_info;
struct eh_frame_sec_info *sec_info = NULL;
- unsigned int cie_usage_count, offset;
+ unsigned int offset;
unsigned int ptr_size;
+ unsigned int entry_alloced;
if (sec->size == 0)
{
@@ -390,8 +473,7 @@ _bfd_elf_discard_section_eh_frame
return FALSE;
}
- if ((sec->output_section != NULL
- && bfd_is_abs_section (sec->output_section)))
+ if (bfd_is_abs_section (sec->output_section))
{
/* At least one of the sections is being discarded from the
link, so we should just ignore them. */
@@ -401,6 +483,9 @@ _bfd_elf_discard_section_eh_frame
htab = elf_hash_table (info);
hdr_info = &htab->eh_info;
+ if (hdr_info->cies == NULL && !info->relocatable)
+ hdr_info->cies = htab_try_create (1, cie_hash, cie_eq, free);
+
/* Read the frame unwind information from abfd. */
REQUIRE (bfd_malloc_and_get_section (abfd, sec, &ehbuf));
@@ -423,15 +508,11 @@ _bfd_elf_discard_section_eh_frame
REQUIRE (ptr_size != 0);
buf = ehbuf;
- last_cie = NULL;
- last_cie_inf = NULL;
- memset (&cie, 0, sizeof (cie));
- cie_usage_count = 0;
sec_info = bfd_zmalloc (sizeof (struct eh_frame_sec_info)
+ 99 * sizeof (struct eh_cie_fde));
REQUIRE (sec_info);
- sec_info->alloced = 100;
+ entry_alloced = 100;
#define ENSURE_NO_RELOCS(buf) \
REQUIRE (!(cookie->rel < cookie->relend \
@@ -454,118 +535,84 @@ _bfd_elf_discard_section_eh_frame
for (;;)
{
char *aug;
- bfd_byte *start, *end, *insns;
+ bfd_byte *start, *end, *insns, *insns_end;
bfd_size_type length;
+ unsigned int set_loc_count;
- if (sec_info->count == sec_info->alloced)
+ if (sec_info->count == entry_alloced)
{
- struct eh_cie_fde *old_entry = sec_info->entry;
sec_info = bfd_realloc (sec_info,
sizeof (struct eh_frame_sec_info)
- + ((sec_info->alloced + 99)
+ + ((entry_alloced + 99)
* sizeof (struct eh_cie_fde)));
REQUIRE (sec_info);
- memset (&sec_info->entry[sec_info->alloced], 0,
+ memset (&sec_info->entry[entry_alloced], 0,
100 * sizeof (struct eh_cie_fde));
- sec_info->alloced += 100;
-
- /* Now fix any pointers into the array. */
- if (last_cie_inf >= old_entry
- && last_cie_inf < old_entry + sec_info->count)
- last_cie_inf = sec_info->entry + (last_cie_inf - old_entry);
+ entry_alloced += 100;
}
this_inf = sec_info->entry + sec_info->count;
last_fde = buf;
- /* If we are at the end of the section, we still need to decide
- on whether to output or discard last encountered CIE (if any). */
+
if ((bfd_size_type) (buf - ehbuf) == sec->size)
- {
- hdr.length = 0;
- hdr.id = (unsigned int) -1;
- end = buf;
- }
- else
- {
- /* Read the length of the entry. */
- REQUIRE (skip_bytes (&buf, ehbuf + sec->size, 4));
- hdr.length = bfd_get_32 (abfd, buf - 4);
+ break;
- /* 64-bit .eh_frame is not supported. */
- REQUIRE (hdr.length != 0xffffffff);
+ /* Read the length of the entry. */
+ REQUIRE (skip_bytes (&buf, ehbuf + sec->size, 4));
+ hdr_length = bfd_get_32 (abfd, buf - 4);
- /* The CIE/FDE must be fully contained in this input section. */
- REQUIRE ((bfd_size_type) (buf - ehbuf) + hdr.length <= sec->size);
- end = buf + hdr.length;
+ /* 64-bit .eh_frame is not supported. */
+ REQUIRE (hdr_length != 0xffffffff);
- this_inf->offset = last_fde - ehbuf;
- this_inf->size = 4 + hdr.length;
+ /* The CIE/FDE must be fully contained in this input section. */
+ REQUIRE ((bfd_size_type) (buf - ehbuf) + hdr_length <= sec->size);
+ end = buf + hdr_length;
- if (hdr.length == 0)
- {
- /* A zero-length CIE should only be found at the end of
- the section. */
- REQUIRE ((bfd_size_type) (buf - ehbuf) == sec->size);
- ENSURE_NO_RELOCS (buf);
- sec_info->count++;
- /* Now just finish last encountered CIE processing and break
- the loop. */
- hdr.id = (unsigned int) -1;
- }
- else
- {
- REQUIRE (skip_bytes (&buf, end, 4));
- hdr.id = bfd_get_32 (abfd, buf - 4);
- REQUIRE (hdr.id != (unsigned int) -1);
- }
+ this_inf->offset = last_fde - ehbuf;
+ this_inf->size = 4 + hdr_length;
+
+ if (hdr_length == 0)
+ {
+ /* A zero-length CIE should only be found at the end of
+ the section. */
+ REQUIRE ((bfd_size_type) (buf - ehbuf) == sec->size);
+ ENSURE_NO_RELOCS (buf);
+ sec_info->count++;
+ break;
}
- if (hdr.id == 0 || hdr.id == (unsigned int) -1)
+ REQUIRE (skip_bytes (&buf, end, 4));
+ hdr_id = bfd_get_32 (abfd, buf - 4);
+
+ if (hdr_id == 0)
{
unsigned int initial_insn_length;
/* CIE */
- if (last_cie != NULL)
+ this_inf->cie = 1;
+
+ if (ecie_count == ecie_alloced)
{
- /* Now check if this CIE is identical to the last CIE,
- in which case we can remove it provided we adjust
- all FDEs. Also, it can be removed if we have removed
- all FDEs using it. */
- if ((!info->relocatable
- && hdr_info->last_cie_sec
- && (sec->output_section
- == hdr_info->last_cie_sec->output_section)
- && cie_compare (&cie, &hdr_info->last_cie) == 0)
- || cie_usage_count == 0)
- last_cie_inf->removed = 1;
- else
- {
- hdr_info->last_cie = cie;
- hdr_info->last_cie_sec = sec;
- last_cie_inf->make_relative = cie.make_relative;
- last_cie_inf->make_lsda_relative = cie.make_lsda_relative;
- last_cie_inf->per_encoding_relative
- = (cie.per_encoding & 0x70) == DW_EH_PE_pcrel;
- }
+ ecies = bfd_realloc (ecies,
+ (ecie_alloced + 20) * sizeof (*ecies));
+ REQUIRE (ecies);
+ memset (&ecies[ecie_alloced], 0, 20 * sizeof (*ecies));
+ ecie_alloced += 20;
}
- if (hdr.id == (unsigned int) -1)
- break;
-
- last_cie_inf = this_inf;
- this_inf->cie = 1;
-
- cie_usage_count = 0;
- memset (&cie, 0, sizeof (cie));
- cie.hdr = hdr;
- REQUIRE (read_byte (&buf, end, &cie.version));
+ cie = &ecies[ecie_count].cie;
+ ecies[ecie_count].offset = this_inf->offset;
+ ecies[ecie_count++].entry = sec_info->count;
+ cie->length = hdr_length;
+ start = buf;
+ REQUIRE (read_byte (&buf, end, &cie->version));
/* Cannot handle unknown versions. */
- REQUIRE (cie.version == 1 || cie.version == 3);
- REQUIRE (strlen ((char *) buf) < sizeof (cie.augmentation));
+ REQUIRE (cie->version == 1 || cie->version == 3);
+ REQUIRE (strlen ((char *) buf) < sizeof (cie->augmentation));
- strcpy (cie.augmentation, (char *) buf);
+ strcpy (cie->augmentation, (char *) buf);
buf = (bfd_byte *) strchr ((char *) buf, '\0') + 1;
ENSURE_NO_RELOCS (buf);
if (buf[0] == 'e' && buf[1] == 'h')
@@ -577,26 +624,26 @@ _bfd_elf_discard_section_eh_frame
REQUIRE (skip_bytes (&buf, end, ptr_size));
SKIP_RELOCS (buf);
}
- REQUIRE (read_uleb128 (&buf, end, &cie.code_align));
- REQUIRE (read_sleb128 (&buf, end, &cie.data_align));
- if (cie.version == 1)
+ REQUIRE (read_uleb128 (&buf, end, &cie->code_align));
+ REQUIRE (read_sleb128 (&buf, end, &cie->data_align));
+ if (cie->version == 1)
{
REQUIRE (buf < end);
- cie.ra_column = *buf++;
+ cie->ra_column = *buf++;
}
else
- REQUIRE (read_uleb128 (&buf, end, &cie.ra_column));
+ REQUIRE (read_uleb128 (&buf, end, &cie->ra_column));
ENSURE_NO_RELOCS (buf);
- cie.lsda_encoding = DW_EH_PE_omit;
- cie.fde_encoding = DW_EH_PE_omit;
- cie.per_encoding = DW_EH_PE_omit;
- aug = cie.augmentation;
+ cie->lsda_encoding = DW_EH_PE_omit;
+ cie->fde_encoding = DW_EH_PE_omit;
+ cie->per_encoding = DW_EH_PE_omit;
+ aug = cie->augmentation;
if (aug[0] != 'e' || aug[1] != 'h')
{
if (*aug == 'z')
{
aug++;
- REQUIRE (read_uleb128 (&buf, end, &cie.augmentation_size));
+ REQUIRE (read_uleb128 (&buf, end, &cie->augmentation_size));
ENSURE_NO_RELOCS (buf);
}
@@ -604,14 +651,14 @@ _bfd_elf_discard_section_eh_frame
switch (*aug++)
{
case 'L':
- REQUIRE (read_byte (&buf, end, &cie.lsda_encoding));
+ REQUIRE (read_byte (&buf, end, &cie->lsda_encoding));
ENSURE_NO_RELOCS (buf);
- REQUIRE (get_DW_EH_PE_width (cie.lsda_encoding, ptr_size));
+ REQUIRE (get_DW_EH_PE_width (cie->lsda_encoding, ptr_size));
break;
case 'R':
- REQUIRE (read_byte (&buf, end, &cie.fde_encoding));
+ REQUIRE (read_byte (&buf, end, &cie->fde_encoding));
ENSURE_NO_RELOCS (buf);
- REQUIRE (get_DW_EH_PE_width (cie.fde_encoding, ptr_size));
+ REQUIRE (get_DW_EH_PE_width (cie->fde_encoding, ptr_size));
break;
case 'S':
break;
@@ -619,18 +666,17 @@ _bfd_elf_discard_section_eh_frame
{
int per_width;
- REQUIRE (read_byte (&buf, end, &cie.per_encoding));
- per_width = get_DW_EH_PE_width (cie.per_encoding,
+ REQUIRE (read_byte (&buf, end, &cie->per_encoding));
+ per_width = get_DW_EH_PE_width (cie->per_encoding,
ptr_size);
REQUIRE (per_width);
- if ((cie.per_encoding & 0xf0) == DW_EH_PE_aligned)
+ if ((cie->per_encoding & 0xf0) == DW_EH_PE_aligned)
{
length = -(buf - ehbuf) & (per_width - 1);
REQUIRE (skip_bytes (&buf, end, length));
}
ENSURE_NO_RELOCS (buf);
- /* Ensure we have a reloc here, against
- a global symbol. */
+ /* Ensure we have a reloc here. */
if (GET_RELOC (buf) != NULL)
{
unsigned long r_symndx;
@@ -641,7 +687,9 @@ _bfd_elf_discard_section_eh_frame
else
#endif
r_symndx = ELF32_R_SYM (cookie->rel->r_info);
- if (r_symndx >= cookie->locsymcount)
+ if (r_symndx >= cookie->locsymcount
+ || ELF_ST_BIND (cookie->locsyms[r_symndx]
+ .st_info) != STB_LOCAL)
{
struct elf_link_hash_entry *h;
@@ -653,14 +701,39 @@ _bfd_elf_discard_section_eh_frame
h = (struct elf_link_hash_entry *)
h->root.u.i.link;
- cie.personality = h;
+ cie->personality.h = h;
}
+ else
+ {
+ Elf_Internal_Sym *sym;
+ asection *sym_sec;
+ bfd_vma val;
+
+ sym = &cookie->locsyms[r_symndx];
+ sym_sec = (bfd_section_from_elf_index
+ (abfd, sym->st_shndx));
+ if (sym_sec != NULL)
+ {
+ if (sym_sec->kept_section != NULL)
+ sym_sec = sym_sec->kept_section;
+ if (sym_sec->output_section != NULL)
+ {
+ val = (sym->st_value
+ + sym_sec->output_offset
+ + sym_sec->output_section->vma);
+ cie->personality.val = val;
+ cie->local_personality = 1;
+ }
+ }
+ }
+
/* Cope with MIPS-style composite relocations. */
do
cookie->rel++;
while (GET_RELOC (buf) != NULL);
}
REQUIRE (skip_bytes (&buf, end, per_width));
+ REQUIRE (cie->local_personality || cie->personality.h);
}
break;
default:
@@ -676,18 +749,18 @@ _bfd_elf_discard_section_eh_frame
->elf_backend_can_make_relative_eh_frame
(abfd, info, sec)))
{
- if ((cie.fde_encoding & 0xf0) == DW_EH_PE_absptr)
- cie.make_relative = 1;
+ if ((cie->fde_encoding & 0xf0) == DW_EH_PE_absptr)
+ cie->make_relative = 1;
/* If the CIE doesn't already have an 'R' entry, it's fairly
easy to add one, provided that there's no aligned data
after the augmentation string. */
- else if (cie.fde_encoding == DW_EH_PE_omit
- && (cie.per_encoding & 0xf0) != DW_EH_PE_aligned)
+ else if (cie->fde_encoding == DW_EH_PE_omit
+ && (cie->per_encoding & 0xf0) != DW_EH_PE_aligned)
{
- if (*cie.augmentation == 0)
+ if (*cie->augmentation == 0)
this_inf->add_augmentation_size = 1;
this_inf->add_fde_encoding = 1;
- cie.make_relative = 1;
+ cie->make_relative = 1;
}
}
@@ -695,30 +768,36 @@ _bfd_elf_discard_section_eh_frame
&& (get_elf_backend_data (abfd)
->elf_backend_can_make_lsda_relative_eh_frame
(abfd, info, sec))
- && (cie.lsda_encoding & 0xf0) == DW_EH_PE_absptr)
- cie.make_lsda_relative = 1;
+ && (cie->lsda_encoding & 0xf0) == DW_EH_PE_absptr)
+ cie->make_lsda_relative = 1;
/* If FDE encoding was not specified, it defaults to
DW_EH_absptr. */
- if (cie.fde_encoding == DW_EH_PE_omit)
- cie.fde_encoding = DW_EH_PE_absptr;
+ if (cie->fde_encoding == DW_EH_PE_omit)
+ cie->fde_encoding = DW_EH_PE_absptr;
initial_insn_length = end - buf;
- if (initial_insn_length <= 50)
+ if (initial_insn_length <= sizeof (cie->initial_instructions))
{
- cie.initial_insn_length = initial_insn_length;
- memcpy (cie.initial_instructions, buf, initial_insn_length);
+ cie->initial_insn_length = initial_insn_length;
+ memcpy (cie->initial_instructions, buf, initial_insn_length);
}
insns = buf;
buf += initial_insn_length;
ENSURE_NO_RELOCS (buf);
- last_cie = last_fde;
}
else
{
- /* Ensure this FDE uses the last CIE encountered. */
- REQUIRE (last_cie);
- REQUIRE (hdr.id == (unsigned int) (buf - 4 - last_cie));
+ /* Find the corresponding CIE. */
+ unsigned int cie_offset = this_inf->offset + 4 - hdr_id;
+ for (ecie = ecies; ecie < ecies + ecie_count; ++ecie)
+ if (cie_offset == ecie->offset)
+ break;
+
+ /* Ensure this FDE references one of the CIEs in this input
+ section. */
+ REQUIRE (ecie != ecies + ecie_count);
+ cie = &ecie->cie;
ENSURE_NO_RELOCS (buf);
REQUIRE (GET_RELOC (buf));
@@ -730,26 +809,31 @@ _bfd_elf_discard_section_eh_frame
else
{
if (info->shared
- && (((cie.fde_encoding & 0xf0) == DW_EH_PE_absptr
- && cie.make_relative == 0)
- || (cie.fde_encoding & 0xf0) == DW_EH_PE_aligned))
+ && (((cie->fde_encoding & 0xf0) == DW_EH_PE_absptr
+ && cie->make_relative == 0)
+ || (cie->fde_encoding & 0xf0) == DW_EH_PE_aligned))
{
/* If a shared library uses absolute pointers
which we cannot turn into PC relative,
don't create the binary search table,
since it is affected by runtime relocations. */
hdr_info->table = FALSE;
+ (*info->callbacks->einfo)
+ (_("%P: fde encoding in %B(%A) prevents .eh_frame_hdr"
+ " table being created.\n"), abfd, sec);
}
- cie_usage_count++;
+ ecie->usage_count++;
hdr_info->fde_count++;
+ this_inf->cie_inf = (void *) (ecie - ecies);
}
+
/* Skip the initial location and address range. */
start = buf;
- length = get_DW_EH_PE_width (cie.fde_encoding, ptr_size);
+ length = get_DW_EH_PE_width (cie->fde_encoding, ptr_size);
REQUIRE (skip_bytes (&buf, end, 2 * length));
/* Skip the augmentation size, if present. */
- if (cie.augmentation[0] == 'z')
+ if (cie->augmentation[0] == 'z')
REQUIRE (read_uleb128 (&buf, end, &length));
else
length = 0;
@@ -757,12 +841,12 @@ _bfd_elf_discard_section_eh_frame
/* Of the supported augmentation characters above, only 'L'
adds augmentation data to the FDE. This code would need to
be adjusted if any future augmentations do the same thing. */
- if (cie.lsda_encoding != DW_EH_PE_omit)
+ if (cie->lsda_encoding != DW_EH_PE_omit)
{
this_inf->lsda_offset = buf - start;
/* If there's no 'z' augmentation, we don't know where the
CFA insns begin. Assume no padding. */
- if (cie.augmentation[0] != 'z')
+ if (cie->augmentation[0] != 'z')
length = end - buf;
}
@@ -770,57 +854,131 @@ _bfd_elf_discard_section_eh_frame
REQUIRE (skip_bytes (&buf, end, length));
insns = buf;
- buf = last_fde + 4 + hdr.length;
+ buf = last_fde + 4 + hdr_length;
SKIP_RELOCS (buf);
}
/* Try to interpret the CFA instructions and find the first
padding nop. Shrink this_inf's size so that it doesn't
- including the padding. */
- length = get_DW_EH_PE_width (cie.fde_encoding, ptr_size);
- insns = skip_non_nops (insns, end, length);
- if (insns != 0)
- this_inf->size -= end - insns;
-
- this_inf->fde_encoding = cie.fde_encoding;
- this_inf->lsda_encoding = cie.lsda_encoding;
+ include the padding. */
+ length = get_DW_EH_PE_width (cie->fde_encoding, ptr_size);
+ set_loc_count = 0;
+ insns_end = skip_non_nops (insns, end, length, &set_loc_count);
+ /* If we don't understand the CFA instructions, we can't know
+ what needs to be adjusted there. */
+ if (insns_end == NULL
+ /* For the time being we don't support DW_CFA_set_loc in
+ CIE instructions. */
+ || (set_loc_count && this_inf->cie))
+ goto free_no_table;
+ this_inf->size -= end - insns_end;
+ if (insns_end != end && this_inf->cie)
+ {
+ cie->initial_insn_length -= end - insns_end;
+ cie->length -= end - insns_end;
+ }
+ if (set_loc_count
+ && ((cie->fde_encoding & 0xf0) == DW_EH_PE_pcrel
+ || cie->make_relative))
+ {
+ unsigned int cnt;
+ bfd_byte *p;
+
+ this_inf->set_loc = bfd_malloc ((set_loc_count + 1)
+ * sizeof (unsigned int));
+ REQUIRE (this_inf->set_loc);
+ this_inf->set_loc[0] = set_loc_count;
+ p = insns;
+ cnt = 0;
+ while (p < end)
+ {
+ if (*p == DW_CFA_set_loc)
+ this_inf->set_loc[++cnt] = p + 1 - start;
+ REQUIRE (skip_cfa_op (&p, end, length));
+ }
+ }
+
+ this_inf->fde_encoding = cie->fde_encoding;
+ this_inf->lsda_encoding = cie->lsda_encoding;
sec_info->count++;
}
elf_section_data (sec)->sec_info = sec_info;
sec->sec_info_type = ELF_INFO_TYPE_EH_FRAME;
+ /* Look at all CIEs in this section and determine which can be
+ removed as unused, which can be merged with previous duplicate
+ CIEs and which need to be kept. */
+ for (ecie = ecies; ecie < ecies + ecie_count; ++ecie)
+ {
+ if (ecie->usage_count == 0)
+ {
+ sec_info->entry[ecie->entry].removed = 1;
+ continue;
+ }
+ ecie->cie.output_sec = sec->output_section;
+ ecie->cie.cie_inf = sec_info->entry + ecie->entry;
+ cie_compute_hash (&ecie->cie);
+ if (hdr_info->cies != NULL)
+ {
+ void **loc = htab_find_slot_with_hash (hdr_info->cies, &ecie->cie,
+ ecie->cie.hash, INSERT);
+ if (loc != NULL)
+ {
+ if (*loc != HTAB_EMPTY_ENTRY)
+ {
+ sec_info->entry[ecie->entry].removed = 1;
+ ecie->cie.cie_inf = ((struct cie *) *loc)->cie_inf;
+ continue;
+ }
+
+ *loc = malloc (sizeof (struct cie));
+ if (*loc == NULL)
+ *loc = HTAB_DELETED_ENTRY;
+ else
+ memcpy (*loc, &ecie->cie, sizeof (struct cie));
+ }
+ }
+ ecie->cie.cie_inf->make_relative = ecie->cie.make_relative;
+ ecie->cie.cie_inf->make_lsda_relative = ecie->cie.make_lsda_relative;
+ ecie->cie.cie_inf->per_encoding_relative
+ = (ecie->cie.per_encoding & 0x70) == DW_EH_PE_pcrel;
+ }
+
/* Ok, now we can assign new offsets. */
offset = 0;
- last_cie_inf = hdr_info->last_cie_inf;
for (ent = sec_info->entry; ent < sec_info->entry + sec_info->count; ++ent)
if (!ent->removed)
{
- if (ent->cie)
- last_cie_inf = ent;
- else
- ent->cie_inf = last_cie_inf;
+ if (!ent->cie)
+ {
+ ecie = ecies + (unsigned long) ent->cie_inf;
+ ent->cie_inf = ecie->cie.cie_inf;
+ }
ent->new_offset = offset;
offset += size_of_output_cie_fde (ent, ptr_size);
}
- hdr_info->last_cie_inf = last_cie_inf;
/* Resize the sec as needed. */
sec->rawsize = sec->size;
sec->size = offset;
- if (sec->size == 0)
- sec->flags |= SEC_EXCLUDE;
free (ehbuf);
+ if (ecies)
+ free (ecies);
return offset != sec->rawsize;
free_no_table:
+ (*info->callbacks->einfo)
+ (_("%P: error in %B(%A); no .eh_frame_hdr table will be created.\n"),
+ abfd, sec);
if (ehbuf)
free (ehbuf);
if (sec_info)
free (sec_info);
+ if (ecies)
+ free (ecies);
hdr_info->table = FALSE;
- hdr_info->last_cie.hdr.length = 0;
return FALSE;
#undef REQUIRE
@@ -839,6 +997,13 @@ _bfd_elf_discard_section_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info)
htab = elf_hash_table (info);
hdr_info = &htab->eh_info;
+
+ if (hdr_info->cies != NULL)
+ {
+ htab_delete (hdr_info->cies);
+ hdr_info->cies = NULL;
+ }
+
sec = hdr_info->hdr_sec;
if (sec == NULL)
return FALSE;
@@ -847,8 +1012,6 @@ _bfd_elf_discard_section_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info)
if (hdr_info->table)
sec->size += 4 + hdr_info->fde_count * 8;
- /* Request program headers to be recalculated. */
- elf_tdata (abfd)->program_header_size = 0;
elf_tdata (abfd)->eh_frame_hdr = sec;
return TRUE;
}
@@ -968,6 +1131,23 @@ _bfd_elf_eh_frame_section_offset (bfd *output_bfd ATTRIBUTE_UNUSED,
return (bfd_vma) -2;
}
+ /* If converting to DW_EH_PE_pcrel, there will be no need for run-time
+ relocation against DW_CFA_set_loc's arguments. */
+ if (sec_info->entry[mid].set_loc
+ && (sec_info->entry[mid].cie
+ ? sec_info->entry[mid].make_relative
+ : sec_info->entry[mid].cie_inf->make_relative)
+ && (offset >= sec_info->entry[mid].offset + 8
+ + sec_info->entry[mid].set_loc[1]))
+ {
+ unsigned int cnt;
+
+ for (cnt = 1; cnt <= sec_info->entry[mid].set_loc[0]; cnt++)
+ if (offset == sec_info->entry[mid].offset + 8
+ + sec_info->entry[mid].set_loc[cnt])
+ return (bfd_vma) -2;
+ }
+
if (hdr_info->offsets_adjusted)
offset -= sec->output_offset;
/* Any new augmentation bytes go before the first relocation. */
@@ -1192,6 +1372,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd,
/* FDE */
bfd_vma value, address;
unsigned int width;
+ bfd_byte *start;
/* Skip length. */
buf += 4;
@@ -1228,6 +1409,8 @@ _bfd_elf_write_section_eh_frame (bfd *abfd,
write_value (abfd, buf, value, width);
}
+ start = buf;
+
if (hdr_info)
{
hdr_info->array[hdr_info->array_count].initial_loc = address;
@@ -1260,12 +1443,42 @@ _bfd_elf_write_section_eh_frame (bfd *abfd,
memmove (buf + 1, buf, end - buf);
*buf = 0;
}
+
+ if (ent->set_loc)
+ {
+ /* Adjust DW_CFA_set_loc. */
+ unsigned int cnt, width;
+ bfd_vma new_offset;
+
+ width = get_DW_EH_PE_width (ent->fde_encoding, ptr_size);
+ new_offset = ent->new_offset + 8
+ + extra_augmentation_string_bytes (ent)
+ + extra_augmentation_data_bytes (ent);
+
+ for (cnt = 1; cnt <= ent->set_loc[0]; cnt++)
+ {
+ bfd_vma value;
+ buf = start + ent->set_loc[cnt];
+
+ value = read_value (abfd, buf, width,
+ get_DW_EH_PE_signed (ent->fde_encoding));
+ if (!value)
+ continue;
+
+ if ((ent->fde_encoding & 0xf0) == DW_EH_PE_pcrel)
+ value += ent->offset + 8 - new_offset;
+ if (ent->cie_inf->make_relative)
+ value -= sec->output_section->vma + new_offset
+ + ent->set_loc[cnt];
+ write_value (abfd, buf, value, width);
+ }
+ }
}
}
/* We don't align the section to its section alignment since the
runtime library only expects all CIE/FDE records aligned at
- the pointer size. _bfd_elf_discard_section_eh_frame should
+ the pointer size. _bfd_elf_discard_section_eh_frame should
have padded CIE/FDE records to multiple of pointer size with
size_of_output_cie_fde. */
if ((sec->size % ptr_size) != 0)
diff --git a/bfd/elf-hppa.h b/bfd/elf-hppa.h
index c4ad5ad712e1..e676e27fef35 100644
--- a/bfd/elf-hppa.h
+++ b/bfd/elf-hppa.h
@@ -1,22 +1,22 @@
/* Common code for PA ELF implementations.
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
-This file is part of BFD, the Binary File Descriptor library.
+ This file is part of BFD, the Binary File Descriptor library.
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+ This program is free software; you can 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.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU General Public 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 ELF_HOWTO_TABLE_SIZE R_PARISC_UNIMPLEMENTED + 1
@@ -27,30 +27,20 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
external constraints require 32 or 64 bit specific code. We remap
the definitions/functions as necessary here. */
#if ARCH_SIZE == 64
-#define ELF_R_TYPE(X) ELF64_R_TYPE(X)
-#define ELF_R_SYM(X) ELF64_R_SYM(X)
-#define elf_hppa_reloc_final_type elf64_hppa_reloc_final_type
-#define _bfd_elf_hppa_gen_reloc_type _bfd_elf64_hppa_gen_reloc_type
-#define elf_hppa_relocate_section elf64_hppa_relocate_section
-#define elf_hppa_final_link elf64_hppa_final_link
+#define ELF_R_TYPE(X) ELF64_R_TYPE(X)
+#define ELF_R_SYM(X) ELF64_R_SYM(X)
+#define elf_hppa_reloc_final_type elf64_hppa_reloc_final_type
+#define _bfd_elf_hppa_gen_reloc_type _bfd_elf64_hppa_gen_reloc_type
+#define elf_hppa_relocate_section elf64_hppa_relocate_section
+#define elf_hppa_final_link elf64_hppa_final_link
#endif
#if ARCH_SIZE == 32
-#define ELF_R_TYPE(X) ELF32_R_TYPE(X)
-#define ELF_R_SYM(X) ELF32_R_SYM(X)
-#define elf_hppa_reloc_final_type elf32_hppa_reloc_final_type
-#define _bfd_elf_hppa_gen_reloc_type _bfd_elf32_hppa_gen_reloc_type
-#define elf_hppa_relocate_section elf32_hppa_relocate_section
-#define elf_hppa_final_link elf32_hppa_final_link
-#endif
-
-#if ARCH_SIZE == 64
-static bfd_reloc_status_type elf_hppa_final_link_relocate
- (Elf_Internal_Rela *, bfd *, bfd *, asection *, bfd_byte *, bfd_vma,
- struct bfd_link_info *, asection *, struct elf_link_hash_entry *,
- struct elf64_hppa_dyn_hash_entry *);
-
-static int elf_hppa_relocate_insn
- (int, int, unsigned int);
+#define ELF_R_TYPE(X) ELF32_R_TYPE(X)
+#define ELF_R_SYM(X) ELF32_R_SYM(X)
+#define elf_hppa_reloc_final_type elf32_hppa_reloc_final_type
+#define _bfd_elf_hppa_gen_reloc_type _bfd_elf32_hppa_gen_reloc_type
+#define elf_hppa_relocate_section elf32_hppa_relocate_section
+#define elf_hppa_final_link elf32_hppa_final_link
#endif
/* ELF/PA relocation howto entries. */
@@ -64,58 +54,58 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
_bfd_stab_section_find_nearest_line. */
{ R_PARISC_DIR32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR32", FALSE, 0, 0xffffffff, FALSE },
- { R_PARISC_DIR21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR21L", FALSE, 0, 0, FALSE },
- { R_PARISC_DIR17R, 0, 0, 17, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR17R, 0, 2, 17, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR17R", FALSE, 0, 0, FALSE },
- { R_PARISC_DIR17F, 0, 0, 17, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR17F, 0, 2, 17, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR17F", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_DIR14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR14R", FALSE, 0, 0, FALSE },
- { R_PARISC_DIR14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR14F", FALSE, 0, 0, FALSE },
/* 8 */
- { R_PARISC_PCREL12F, 0, 0, 12, TRUE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL12F, 0, 2, 12, TRUE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL12F", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL32, 0, 0, 32, TRUE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL32, 0, 2, 32, TRUE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL32", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL21L, 0, 0, 21, TRUE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL21L, 0, 2, 21, TRUE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL21L", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL17R, 0, 0, 17, TRUE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL17R, 0, 2, 17, TRUE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL17R", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL17F, 0, 0, 17, TRUE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL17F, 0, 2, 17, TRUE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL17F", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL17C, 0, 0, 17, TRUE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL17C, 0, 2, 17, TRUE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL17C", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL14R, 0, 0, 14, TRUE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL14R, 0, 2, 14, TRUE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL14R", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL14F, 0, 0, 14, TRUE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL14F, 0, 2, 14, TRUE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL14F", FALSE, 0, 0, FALSE },
/* 16 */
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_DPREL21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DPREL21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DPREL21L", FALSE, 0, 0, FALSE },
- { R_PARISC_DPREL14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DPREL14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DPREL14WR", FALSE, 0, 0, FALSE },
- { R_PARISC_DPREL14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DPREL14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DPREL14DR", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_DPREL14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DPREL14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DPREL14R", FALSE, 0, 0, FALSE },
- { R_PARISC_DPREL14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DPREL14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DPREL14F", FALSE, 0, 0, FALSE },
/* 24 */
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_DLTREL21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTREL21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTREL21L", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
@@ -123,16 +113,16 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_DLTREL14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTREL14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTREL14R", FALSE, 0, 0, FALSE },
- { R_PARISC_DLTREL14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTREL14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTREL14F", FALSE, 0, 0, FALSE },
/* 32 */
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_DLTIND21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTIND21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTIND21L", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
@@ -140,33 +130,33 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_DLTIND14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTIND14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTIND14R", FALSE, 0, 0, FALSE },
- { R_PARISC_DLTIND14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTIND14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTIND14F", FALSE, 0, 0, FALSE },
/* 40 */
{ R_PARISC_SETBASE, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_SETBASE", FALSE, 0, 0, FALSE },
- { R_PARISC_SECREL32, 0, 0, 32, FALSE, 0, complain_overflow_bitfield,
- bfd_elf_generic_reloc, "R_PARISC_SECREL32", FALSE, 0, 0, FALSE },
- { R_PARISC_BASEREL21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_SECREL32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_SECREL32", FALSE, 0, 0xffffffff, FALSE },
+ { R_PARISC_BASEREL21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_BASEREL21L", FALSE, 0, 0, FALSE },
- { R_PARISC_BASEREL17R, 0, 0, 17, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_BASEREL17R, 0, 2, 17, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_BASEREL17R", FALSE, 0, 0, FALSE },
- { R_PARISC_BASEREL17F, 0, 0, 17, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_BASEREL17F, 0, 2, 17, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_BASEREL17F", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_BASEREL14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_BASEREL14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_BASEREL14R", FALSE, 0, 0, FALSE },
- { R_PARISC_BASEREL14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_BASEREL14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_BASEREL14F", FALSE, 0, 0, FALSE },
/* 48 */
{ R_PARISC_SEGBASE, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_SEGBASE", FALSE, 0, 0, FALSE },
- { R_PARISC_SEGREL32, 0, 0, 32, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_SEGREL32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_SEGREL32", FALSE, 0, 0, FALSE },
- { R_PARISC_PLTOFF21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF21L", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
@@ -174,16 +164,16 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_PLTOFF14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF14R", FALSE, 0, 0, FALSE },
- { R_PARISC_PLTOFF14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF14F", FALSE, 0, 0, FALSE },
/* 56 */
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_FPTR32, 0, 0, 32, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR32", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_FPTR21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR21L", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
@@ -191,16 +181,16 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_FPTR14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR14R", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
/* 64 */
- { R_PARISC_FPTR64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_FPTR64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_FPTR64", FALSE, 0, 0, FALSE },
- { R_PARISC_PLABEL32, 0, 0, 32, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PLABEL32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLABEL32", FALSE, 0, 0, FALSE },
- { R_PARISC_PLABEL21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PLABEL21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLABEL21L", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
@@ -208,86 +198,86 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_PLABEL14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PLABEL14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLABEL14R", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
/* 72 */
- { R_PARISC_PCREL64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL64", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL22C, 0, 0, 22, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL22C, 0, 2, 22, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL22C", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL22F, 0, 0, 22, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL22F, 0, 2, 22, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL22F", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL14WR", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL14DR", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL16F", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL16WF", FALSE, 0, 0, FALSE },
- { R_PARISC_PCREL16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PCREL16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PCREL16DF", FALSE, 0, 0, FALSE },
/* 80 */
- { R_PARISC_DIR64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR64", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_DIR14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR14WR", FALSE, 0, 0, FALSE },
- { R_PARISC_DIR14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR14DR", FALSE, 0, 0, FALSE },
- { R_PARISC_DIR16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR16F", FALSE, 0, 0, FALSE },
- { R_PARISC_DIR16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR16WF", FALSE, 0, 0, FALSE },
- { R_PARISC_DIR16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DIR16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DIR16DF", FALSE, 0, 0, FALSE },
/* 88 */
- { R_PARISC_GPREL64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_GPREL64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_GPREL64", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_DLTREL14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTREL14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTREL14WR", FALSE, 0, 0, FALSE },
- { R_PARISC_DLTREL14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTREL14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTREL14DR", FALSE, 0, 0, FALSE },
- { R_PARISC_GPREL16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_GPREL16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_GPREL16F", FALSE, 0, 0, FALSE },
- { R_PARISC_GPREL16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_GPREL16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_GPREL16WF", FALSE, 0, 0, FALSE },
- { R_PARISC_GPREL16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_GPREL16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_GPREL16DF", FALSE, 0, 0, FALSE },
/* 96 */
- { R_PARISC_LTOFF64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF64", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_DLTIND14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTIND14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTIND14WR", FALSE, 0, 0, FALSE },
- { R_PARISC_DLTIND14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_DLTIND14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_DLTIND14DR", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF16F", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF16DF", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF16DF", FALSE, 0, 0, FALSE },
/* 104 */
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_BASEREL14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_BASEREL14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_BASEREL14WR", FALSE, 0, 0, FALSE },
- { R_PARISC_BASEREL14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_BASEREL14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_BASEREL14DR", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
@@ -298,38 +288,38 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
/* 112 */
- { R_PARISC_SEGREL64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_SEGREL64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_SEGREL64", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_PLTOFF14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF14WR", FALSE, 0, 0, FALSE },
- { R_PARISC_PLTOFF14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF14DR", FALSE, 0, 0, FALSE },
- { R_PARISC_PLTOFF16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF16F", FALSE, 0, 0, FALSE },
- { R_PARISC_PLTOFF16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF16WF", FALSE, 0, 0, FALSE },
- { R_PARISC_PLTOFF16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_PLTOFF16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_PLTOFF16DF", FALSE, 0, 0, FALSE },
/* 120 */
- { R_PARISC_LTOFF_FPTR64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_FPTR14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR14WR", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_FPTR14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR14DR", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_FPTR16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR16F", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_FPTR16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR16WF", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_FPTR16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_FPTR16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
/* 128 */
{ R_PARISC_COPY, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
@@ -385,9 +375,9 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
/* 152 */
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_TPREL32, 0, 0, 32, FALSE, 0, complain_overflow_dont,
+ { R_PARISC_TPREL32, 0, 2, 32, FALSE, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_TPREL32", FALSE, 0, 0, FALSE },
- { R_PARISC_TPREL21L, 0, 0, 21, FALSE, 0, complain_overflow_dont,
+ { R_PARISC_TPREL21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_TPREL21L", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
@@ -395,7 +385,7 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_TPREL14R, 0, 0, 14, FALSE, 0, complain_overflow_dont,
+ { R_PARISC_TPREL14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_TPREL14R", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
@@ -404,7 +394,7 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_TP21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP21L", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
@@ -412,9 +402,9 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_TP14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
- bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_TP14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14R", FALSE, 0, 0, FALSE },
+ { R_PARISC_LTOFF_TP14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14F", FALSE, 0, 0, FALSE },
/* 168 */
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
@@ -519,44 +509,69 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
/* 216 */
- { R_PARISC_TPREL64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_TPREL64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_TPREL64", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_TPREL14WR, 0, 0, 14, FALSE, 0, complain_overflow_dont,
+ { R_PARISC_TPREL14WR, 0, 2, 14, FALSE, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_TPREL14WR", FALSE, 0, 0, FALSE },
- { R_PARISC_TPREL14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_TPREL14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_TPREL14DR", FALSE, 0, 0, FALSE },
- { R_PARISC_TPREL16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_TPREL16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_TPREL16F", FALSE, 0, 0, FALSE },
- { R_PARISC_TPREL16WF, 0, 0, 16, FALSE, 0, complain_overflow_dont,
+ { R_PARISC_TPREL16WF, 0, 2, 16, FALSE, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_TPREL16WF", FALSE, 0, 0, FALSE },
- { R_PARISC_TPREL16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_TPREL16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_TPREL16DF", FALSE, 0, 0, FALSE },
/* 224 */
- { R_PARISC_LTOFF_TP64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP64", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
{ R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_TP14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14WR", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_TP14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14DR", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_TP16F, 0, 0, 16, FALSE, 0, complain_overflow_dont,
+ { R_PARISC_LTOFF_TP16F, 0, 2, 16, FALSE, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16F", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_TP16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16WF", FALSE, 0, 0, FALSE },
- { R_PARISC_LTOFF_TP16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
+ { R_PARISC_LTOFF_TP16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16DF", FALSE, 0, 0, FALSE },
/* 232 */
{ R_PARISC_GNU_VTENTRY, 0, 0, 0, FALSE, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_GNU_VTENTRY", FALSE, 0, 0, FALSE },
{ R_PARISC_GNU_VTINHERIT, 0, 0, 0, FALSE, 0, complain_overflow_dont,
bfd_elf_generic_reloc, "R_PARISC_GNU_VTINHERIT", FALSE, 0, 0, FALSE },
+ { R_PARISC_TLS_GD21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_TLS_GD21L", FALSE, 0, 0, FALSE },
+ { R_PARISC_TLS_GD14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_TLS_GD14R", FALSE, 0, 0, FALSE },
+ { R_PARISC_TLS_GDCALL, 0, 0, 0, FALSE, 0, complain_overflow_dont,
+ bfd_elf_generic_reloc, "R_PARISC_TLS_GDCALL", FALSE, 0, 0, FALSE },
+ { R_PARISC_TLS_LDM21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_TLS_LDM21L", FALSE, 0, 0, FALSE },
+ { R_PARISC_TLS_LDM14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_TLS_LDM14R", FALSE, 0, 0, FALSE },
+ { R_PARISC_TLS_LDMCALL, 0, 0, 0, FALSE, 0, complain_overflow_dont,
+ bfd_elf_generic_reloc, "R_PARISC_TLS_LDMCALL", FALSE, 0, 0, FALSE },
+ /* 240 */
+ { R_PARISC_TLS_LDO21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_TLS_LDO21L", FALSE, 0, 0, FALSE },
+ { R_PARISC_TLS_LDO14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_TLS_LDO14R", FALSE, 0, 0, FALSE },
+ { R_PARISC_TLS_DTPMOD32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_TLS_DTPMOD32", FALSE, 0, 0, FALSE },
+ { R_PARISC_TLS_DTPMOD64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_TLS_DTPMOD64", FALSE, 0, 0, FALSE },
+ { R_PARISC_TLS_DTPOFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_TLS_DTPOFF32", FALSE, 0, 0, FALSE },
+ { R_PARISC_TLS_DTPOFF64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "R_PARISC_TLS_DTPOFF64", FALSE, 0, 0, FALSE },
};
#define OFFSET_14R_FROM_21L 4
@@ -578,9 +593,9 @@ elf_hppa_reloc_final_type (bfd *abfd,
for PA ELF. */
switch (base_type)
{
- /* We have been using generic relocation types. However, that may not
- really make sense. Anyway, we need to support both R_PARISC_DIR64
- and R_PARISC_DIR32 here. */
+ /* We have been using generic relocation types. However, that may not
+ really make sense. Anyway, we need to support both R_PARISC_DIR64
+ and R_PARISC_DIR32 here. */
case R_PARISC_DIR32:
case R_PARISC_DIR64:
case R_HPPA_ABS_CALL:
@@ -701,11 +716,11 @@ elf_hppa_reloc_final_type (bfd *abfd,
case e_rsel:
case e_rrsel:
case e_rdsel:
- /* R_PARISC_DLTREL14R for elf64, R_PARISC_DPREL14R for elf32 */
+ /* R_PARISC_DLTREL14R for elf64, R_PARISC_DPREL14R for elf32. */
final_type = base_type + OFFSET_14R_FROM_21L;
break;
case e_fsel:
- /* R_PARISC_DLTREL14F for elf64, R_PARISC_DPREL14F for elf32 */
+ /* R_PARISC_DLTREL14F for elf64, R_PARISC_DPREL14F for elf32. */
final_type = base_type + OFFSET_14F_FROM_21L;
break;
default:
@@ -721,7 +736,7 @@ elf_hppa_reloc_final_type (bfd *abfd,
case e_ldsel:
case e_nlsel:
case e_nlrsel:
- /* R_PARISC_DLTREL21L for elf64, R_PARISC_DPREL21L for elf32 */
+ /* R_PARISC_DLTREL21L for elf64, R_PARISC_DPREL21L for elf32. */
final_type = base_type;
break;
default:
@@ -838,6 +853,82 @@ elf_hppa_reloc_final_type (bfd *abfd,
}
break;
+ case R_PARISC_TLS_GD21L:
+ switch (field)
+ {
+ case e_ltsel:
+ case e_lrsel:
+ final_type = R_PARISC_TLS_GD21L;
+ break;
+ case e_rtsel:
+ case e_rrsel:
+ final_type = R_PARISC_TLS_GD14R;
+ break;
+ default:
+ return R_PARISC_NONE;
+ }
+ break;
+
+ case R_PARISC_TLS_LDM21L:
+ switch (field)
+ {
+ case e_ltsel:
+ case e_lrsel:
+ final_type = R_PARISC_TLS_LDM21L;
+ break;
+ case e_rtsel:
+ case e_rrsel:
+ final_type = R_PARISC_TLS_LDM14R;
+ break;
+ default:
+ return R_PARISC_NONE;
+ }
+ break;
+
+ case R_PARISC_TLS_LDO21L:
+ switch (field)
+ {
+ case e_lrsel:
+ final_type = R_PARISC_TLS_LDO21L;
+ break;
+ case e_rrsel:
+ final_type = R_PARISC_TLS_LDO14R;
+ break;
+ default:
+ return R_PARISC_NONE;
+ }
+ break;
+
+ case R_PARISC_TLS_IE21L:
+ switch (field)
+ {
+ case e_ltsel:
+ case e_lrsel:
+ final_type = R_PARISC_TLS_IE21L;
+ break;
+ case e_rtsel:
+ case e_rrsel:
+ final_type = R_PARISC_TLS_IE14R;
+ break;
+ default:
+ return R_PARISC_NONE;
+ }
+ break;
+
+ case R_PARISC_TLS_LE21L:
+ switch (field)
+ {
+ case e_lrsel:
+ final_type = R_PARISC_TLS_LE21L;
+ break;
+ case e_rrsel:
+ final_type = R_PARISC_TLS_LE14R;
+ break;
+ default:
+ return R_PARISC_NONE;
+ }
+ break;
+
case R_PARISC_GNU_VTENTRY:
case R_PARISC_GNU_VTINHERIT:
case R_PARISC_SEGREL32:
@@ -906,7 +997,7 @@ elf_hppa_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
arelent *bfd_reloc,
Elf_Internal_Rela *elf_reloc)
{
- BFD_ASSERT (ELF_R_TYPE(elf_reloc->r_info)
+ BFD_ASSERT (ELF_R_TYPE (elf_reloc->r_info)
< (unsigned int) R_PARISC_UNIMPLEMENTED);
bfd_reloc->howto = &elf_hppa_howto_table[ELF_R_TYPE (elf_reloc->r_info)];
}
@@ -926,13 +1017,29 @@ elf_hppa_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+elf_hppa_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (elf_hppa_howto_table) / sizeof (elf_hppa_howto_table[0]);
+ i++)
+ if (elf_hppa_howto_table[i].name != NULL
+ && strcasecmp (elf_hppa_howto_table[i].name, r_name) == 0)
+ return &elf_hppa_howto_table[i];
+
+ return NULL;
+}
+
/* Return TRUE if SYM represents a local label symbol. */
static bfd_boolean
elf_hppa_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
{
if (name[0] == 'L' && name[1] == '$')
- return 1;
+ return TRUE;
return _bfd_elf_is_local_label_name (abfd, name);
}
@@ -950,6 +1057,7 @@ elf_hppa_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
{
int indx;
asection *asec;
+
#if ARCH_SIZE == 64
hdr->sh_type = SHT_LOPROC + 1;
#else
@@ -1030,7 +1138,8 @@ hppa_unwind_entry_compare (const void *a, const void *b)
return av < bv ? -1 : av > bv ? 1 : 0;
}
-static bfd_boolean elf_hppa_sort_unwind (bfd *abfd)
+static bfd_boolean
+elf_hppa_sort_unwind (bfd *abfd)
{
asection *s;
@@ -1315,208 +1424,116 @@ elf_hppa_final_link (bfd *abfd, struct bfd_link_info *info)
return retval;
}
-/* Relocate an HPPA ELF section. */
+/* Relocate the given INSN. VALUE should be the actual value we want
+ to insert into the instruction, ie by this point we should not be
+ concerned with computing an offset relative to the DLT, PC, etc.
+ Instead this routine is meant to handle the bit manipulations needed
+ to insert the relocation into the given instruction. */
-static bfd_boolean
-elf_hppa_relocate_section (bfd *output_bfd,
- struct bfd_link_info *info,
- bfd *input_bfd,
- asection *input_section,
- bfd_byte *contents,
- Elf_Internal_Rela *relocs,
- Elf_Internal_Sym *local_syms,
- asection **local_sections)
+static int
+elf_hppa_relocate_insn (int insn, int sym_value, unsigned int r_type)
{
- Elf_Internal_Shdr *symtab_hdr;
- Elf_Internal_Rela *rel;
- Elf_Internal_Rela *relend;
- struct elf64_hppa_link_hash_table *hppa_info;
-
- if (info->relocatable)
- return TRUE;
-
- hppa_info = elf64_hppa_hash_table (info);
- symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
-
- rel = relocs;
- relend = relocs + input_section->reloc_count;
- for (; rel < relend; rel++)
+ switch (r_type)
{
- int r_type;
- reloc_howto_type *howto = elf_hppa_howto_table + ELF_R_TYPE (rel->r_info);
- unsigned long r_symndx;
- struct elf_link_hash_entry *h;
- Elf_Internal_Sym *sym;
- asection *sym_sec;
- bfd_vma relocation;
- bfd_reloc_status_type r;
- const char *dyn_name;
- char *dynh_buf = NULL;
- size_t dynh_buflen = 0;
- struct elf64_hppa_dyn_hash_entry *dyn_h = NULL;
-
- r_type = ELF_R_TYPE (rel->r_info);
- if (r_type < 0 || r_type >= (int) R_PARISC_UNIMPLEMENTED)
- {
- bfd_set_error (bfd_error_bad_value);
- return FALSE;
- }
-
- /* This is a final link. */
- r_symndx = ELF_R_SYM (rel->r_info);
- h = NULL;
- sym = NULL;
- sym_sec = NULL;
- if (r_symndx < symtab_hdr->sh_info)
- {
- /* This is a local symbol. */
- sym = local_syms + r_symndx;
- sym_sec = local_sections[r_symndx];
- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sym_sec, rel);
-
- /* If this symbol has an entry in the PA64 dynamic hash
- table, then get it. */
- dyn_name = get_dyn_name (input_bfd, h, rel,
- &dynh_buf, &dynh_buflen);
- dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
- dyn_name, FALSE, FALSE);
-
- }
- else
- {
- /* This is not a local symbol. */
- long indx;
+ /* This is any 22 bit branch. In PA2.0 syntax it corresponds to
+ the "B" instruction. */
+ case R_PARISC_PCREL22F:
+ case R_PARISC_PCREL22C:
+ return (insn & ~0x3ff1ffd) | re_assemble_22 (sym_value);
- indx = r_symndx - symtab_hdr->sh_info;
- h = elf_sym_hashes (input_bfd)[indx];
- while (h->root.type == bfd_link_hash_indirect
- || h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
- if (h->root.type == bfd_link_hash_defined
- || h->root.type == bfd_link_hash_defweak)
- {
- sym_sec = h->root.u.def.section;
+ /* This is any 12 bit branch. */
+ case R_PARISC_PCREL12F:
+ return (insn & ~0x1ffd) | re_assemble_12 (sym_value);
- /* If this symbol has an entry in the PA64 dynamic hash
- table, then get it. */
- dyn_name = get_dyn_name (input_bfd, h, rel,
- &dynh_buf, &dynh_buflen);
- dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
- dyn_name, FALSE, FALSE);
+ /* This is any 17 bit branch. In PA2.0 syntax it also corresponds
+ to the "B" instruction as well as BE. */
+ case R_PARISC_PCREL17F:
+ case R_PARISC_DIR17F:
+ case R_PARISC_DIR17R:
+ case R_PARISC_PCREL17C:
+ case R_PARISC_PCREL17R:
+ return (insn & ~0x1f1ffd) | re_assemble_17 (sym_value);
- /* If we have a relocation against a symbol defined in a
- shared library and we have not created an entry in the
- PA64 dynamic symbol hash table for it, then we lose. */
- if (sym_sec->output_section == NULL && dyn_h == NULL)
- {
- (*_bfd_error_handler)
- (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
- input_bfd,
- input_section,
- (long) rel->r_offset,
- howto->name,
- h->root.root.string);
- relocation = 0;
- }
- else if (sym_sec->output_section)
- relocation = (h->root.u.def.value
- + sym_sec->output_offset
- + sym_sec->output_section->vma);
- /* Value will be provided via one of the offsets in the
- dyn_h hash table entry. */
- else
- relocation = 0;
- }
- else if (info->unresolved_syms_in_objects == RM_IGNORE
- && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
- {
- /* If this symbol has an entry in the PA64 dynamic hash
- table, then get it. */
- dyn_name = get_dyn_name (input_bfd, h, rel,
- &dynh_buf, &dynh_buflen);
- dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
- dyn_name, FALSE, FALSE);
+ /* ADDIL or LDIL instructions. */
+ case R_PARISC_DLTREL21L:
+ case R_PARISC_DLTIND21L:
+ case R_PARISC_LTOFF_FPTR21L:
+ case R_PARISC_PCREL21L:
+ case R_PARISC_LTOFF_TP21L:
+ case R_PARISC_DPREL21L:
+ case R_PARISC_PLTOFF21L:
+ case R_PARISC_DIR21L:
+ return (insn & ~0x1fffff) | re_assemble_21 (sym_value);
- if (dyn_h == NULL)
- {
- (*_bfd_error_handler)
- (_("%B(%A): warning: unresolvable relocation against symbol `%s'"),
- input_bfd, input_section, h->root.root.string);
- }
- relocation = 0;
- }
- else if (h->root.type == bfd_link_hash_undefweak)
- {
- dyn_name = get_dyn_name (input_bfd, h, rel,
- &dynh_buf, &dynh_buflen);
- dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
- dyn_name, FALSE, FALSE);
+ /* LDO and integer loads/stores with 14 bit displacements. */
+ case R_PARISC_DLTREL14R:
+ case R_PARISC_DLTREL14F:
+ case R_PARISC_DLTIND14R:
+ case R_PARISC_DLTIND14F:
+ case R_PARISC_LTOFF_FPTR14R:
+ case R_PARISC_PCREL14R:
+ case R_PARISC_PCREL14F:
+ case R_PARISC_LTOFF_TP14R:
+ case R_PARISC_LTOFF_TP14F:
+ case R_PARISC_DPREL14R:
+ case R_PARISC_DPREL14F:
+ case R_PARISC_PLTOFF14R:
+ case R_PARISC_PLTOFF14F:
+ case R_PARISC_DIR14R:
+ case R_PARISC_DIR14F:
+ return (insn & ~0x3fff) | low_sign_unext (sym_value, 14);
- if (dyn_h == NULL)
- {
- (*_bfd_error_handler)
- (_("%B(%A): warning: unresolvable relocation against symbol `%s'"),
- input_bfd, input_section, h->root.root.string);
- }
- relocation = 0;
- }
- else
- {
- /* Ignore dynamic loader defined symbols. */
- if (elf_hppa_is_dynamic_loader_symbol (h->root.root.string))
- relocation = 0;
- else
- {
- if (!((*info->callbacks->undefined_symbol)
- (info, h->root.root.string, input_bfd,
- input_section, rel->r_offset,
- (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
- || ELF_ST_VISIBILITY (h->other)))))
- return FALSE;
- break;
- }
- }
- }
+ /* PA2.0W LDO and integer loads/stores with 16 bit displacements. */
+ case R_PARISC_LTOFF_FPTR16F:
+ case R_PARISC_PCREL16F:
+ case R_PARISC_LTOFF_TP16F:
+ case R_PARISC_GPREL16F:
+ case R_PARISC_PLTOFF16F:
+ case R_PARISC_DIR16F:
+ case R_PARISC_LTOFF16F:
+ return (insn & ~0xffff) | re_assemble_16 (sym_value);
- r = elf_hppa_final_link_relocate (rel, input_bfd, output_bfd,
- input_section, contents,
- relocation, info, sym_sec,
- h, dyn_h);
+ /* Doubleword loads and stores with a 14 bit displacement. */
+ case R_PARISC_DLTREL14DR:
+ case R_PARISC_DLTIND14DR:
+ case R_PARISC_LTOFF_FPTR14DR:
+ case R_PARISC_LTOFF_FPTR16DF:
+ case R_PARISC_PCREL14DR:
+ case R_PARISC_PCREL16DF:
+ case R_PARISC_LTOFF_TP14DR:
+ case R_PARISC_LTOFF_TP16DF:
+ case R_PARISC_DPREL14DR:
+ case R_PARISC_GPREL16DF:
+ case R_PARISC_PLTOFF14DR:
+ case R_PARISC_PLTOFF16DF:
+ case R_PARISC_DIR14DR:
+ case R_PARISC_DIR16DF:
+ case R_PARISC_LTOFF16DF:
+ return (insn & ~0x3ff1) | (((sym_value & 0x2000) >> 13)
+ | ((sym_value & 0x1ff8) << 1));
- if (r != bfd_reloc_ok)
- {
- switch (r)
- {
- default:
- abort ();
- case bfd_reloc_overflow:
- {
- const char *sym_name;
-
- if (h != NULL)
- sym_name = NULL;
- else
- {
- sym_name = bfd_elf_string_from_elf_section (input_bfd,
- symtab_hdr->sh_link,
- sym->st_name);
- if (sym_name == NULL)
- return FALSE;
- if (*sym_name == '\0')
- sym_name = bfd_section_name (input_bfd, sym_sec);
- }
+ /* Floating point single word load/store instructions. */
+ case R_PARISC_DLTREL14WR:
+ case R_PARISC_DLTIND14WR:
+ case R_PARISC_LTOFF_FPTR14WR:
+ case R_PARISC_LTOFF_FPTR16WF:
+ case R_PARISC_PCREL14WR:
+ case R_PARISC_PCREL16WF:
+ case R_PARISC_LTOFF_TP14WR:
+ case R_PARISC_LTOFF_TP16WF:
+ case R_PARISC_DPREL14WR:
+ case R_PARISC_GPREL16WF:
+ case R_PARISC_PLTOFF14WR:
+ case R_PARISC_PLTOFF16WF:
+ case R_PARISC_DIR16WF:
+ case R_PARISC_DIR14WR:
+ case R_PARISC_LTOFF16WF:
+ return (insn & ~0x3ff9) | (((sym_value & 0x2000) >> 13)
+ | ((sym_value & 0x1ffc) << 1));
- if (!((*info->callbacks->reloc_overflow)
- (info, (h ? &h->root : NULL), sym_name,
- howto->name, (bfd_vma) 0, input_bfd,
- input_section, rel->r_offset)))
- return FALSE;
- }
- break;
- }
- }
+ default:
+ return insn;
}
- return TRUE;
}
/* Compute the value for a relocation (REL) during a final link stage,
@@ -1806,10 +1823,8 @@ elf_hppa_final_link_relocate (Elf_Internal_Rela *rel,
value = hppa_field_adjust (value, addend, e_rrsel);
if (r_type == R_PARISC_DIR17R || r_type == R_PARISC_DIR17F)
- {
- /* All branches are implicitly shifted by 2 places. */
- value >>= 2;
- }
+ /* All branches are implicitly shifted by 2 places. */
+ value >>= 2;
insn = elf_hppa_relocate_insn (insn, (int) value, r_type);
break;
@@ -2081,115 +2096,212 @@ elf_hppa_final_link_relocate (Elf_Internal_Rela *rel,
return bfd_reloc_ok;
}
-/* Relocate the given INSN. VALUE should be the actual value we want
- to insert into the instruction, ie by this point we should not be
- concerned with computing an offset relative to the DLT, PC, etc.
- Instead this routine is meant to handle the bit manipulations needed
- to insert the relocation into the given instruction. */
+/* Relocate an HPPA ELF section. */
-static int
-elf_hppa_relocate_insn (int insn, int sym_value, unsigned int r_type)
+static bfd_boolean
+elf_hppa_relocate_section (bfd *output_bfd,
+ struct bfd_link_info *info,
+ bfd *input_bfd,
+ asection *input_section,
+ bfd_byte *contents,
+ Elf_Internal_Rela *relocs,
+ Elf_Internal_Sym *local_syms,
+ asection **local_sections)
{
- switch (r_type)
+ Elf_Internal_Shdr *symtab_hdr;
+ Elf_Internal_Rela *rel;
+ Elf_Internal_Rela *relend;
+ struct elf64_hppa_link_hash_table *hppa_info;
+
+ hppa_info = elf64_hppa_hash_table (info);
+ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+
+ rel = relocs;
+ relend = relocs + input_section->reloc_count;
+ for (; rel < relend; rel++)
{
- /* This is any 22 bit branch. In PA2.0 syntax it corresponds to
- the "B" instruction. */
- case R_PARISC_PCREL22F:
- case R_PARISC_PCREL22C:
- return (insn & ~0x3ff1ffd) | re_assemble_22 (sym_value);
+ int r_type;
+ reloc_howto_type *howto = elf_hppa_howto_table + ELF_R_TYPE (rel->r_info);
+ unsigned long r_symndx;
+ struct elf_link_hash_entry *h;
+ Elf_Internal_Sym *sym;
+ asection *sym_sec;
+ bfd_vma relocation;
+ bfd_reloc_status_type r;
+ const char *dyn_name;
+ char *dynh_buf = NULL;
+ size_t dynh_buflen = 0;
+ struct elf64_hppa_dyn_hash_entry *dyn_h = NULL;
- /* This is any 12 bit branch. */
- case R_PARISC_PCREL12F:
- return (insn & ~0x1ffd) | re_assemble_12 (sym_value);
+ r_type = ELF_R_TYPE (rel->r_info);
+ if (r_type < 0 || r_type >= (int) R_PARISC_UNIMPLEMENTED)
+ {
+ bfd_set_error (bfd_error_bad_value);
+ return FALSE;
+ }
- /* This is any 17 bit branch. In PA2.0 syntax it also corresponds
- to the "B" instruction as well as BE. */
- case R_PARISC_PCREL17F:
- case R_PARISC_DIR17F:
- case R_PARISC_DIR17R:
- case R_PARISC_PCREL17C:
- case R_PARISC_PCREL17R:
- return (insn & ~0x1f1ffd) | re_assemble_17 (sym_value);
+ /* This is a final link. */
+ r_symndx = ELF_R_SYM (rel->r_info);
+ h = NULL;
+ sym = NULL;
+ sym_sec = NULL;
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ /* This is a local symbol. */
+ sym = local_syms + r_symndx;
+ sym_sec = local_sections[r_symndx];
+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sym_sec, rel);
- /* ADDIL or LDIL instructions. */
- case R_PARISC_DLTREL21L:
- case R_PARISC_DLTIND21L:
- case R_PARISC_LTOFF_FPTR21L:
- case R_PARISC_PCREL21L:
- case R_PARISC_LTOFF_TP21L:
- case R_PARISC_DPREL21L:
- case R_PARISC_PLTOFF21L:
- case R_PARISC_DIR21L:
- return (insn & ~0x1fffff) | re_assemble_21 (sym_value);
+ /* If this symbol has an entry in the PA64 dynamic hash
+ table, then get it. */
+ dyn_name = get_dyn_name (input_bfd, h, rel,
+ &dynh_buf, &dynh_buflen);
+ dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
+ dyn_name, FALSE, FALSE);
- /* LDO and integer loads/stores with 14 bit displacements. */
- case R_PARISC_DLTREL14R:
- case R_PARISC_DLTREL14F:
- case R_PARISC_DLTIND14R:
- case R_PARISC_DLTIND14F:
- case R_PARISC_LTOFF_FPTR14R:
- case R_PARISC_PCREL14R:
- case R_PARISC_PCREL14F:
- case R_PARISC_LTOFF_TP14R:
- case R_PARISC_LTOFF_TP14F:
- case R_PARISC_DPREL14R:
- case R_PARISC_DPREL14F:
- case R_PARISC_PLTOFF14R:
- case R_PARISC_PLTOFF14F:
- case R_PARISC_DIR14R:
- case R_PARISC_DIR14F:
- return (insn & ~0x3fff) | low_sign_unext (sym_value, 14);
+ }
+ else
+ {
+ /* This is not a local symbol. */
+ long indx;
- /* PA2.0W LDO and integer loads/stores with 16 bit displacements. */
- case R_PARISC_LTOFF_FPTR16F:
- case R_PARISC_PCREL16F:
- case R_PARISC_LTOFF_TP16F:
- case R_PARISC_GPREL16F:
- case R_PARISC_PLTOFF16F:
- case R_PARISC_DIR16F:
- case R_PARISC_LTOFF16F:
- return (insn & ~0xffff) | re_assemble_16 (sym_value);
+ relocation = 0;
+ indx = r_symndx - symtab_hdr->sh_info;
+ h = elf_sym_hashes (input_bfd)[indx];
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ {
+ sym_sec = h->root.u.def.section;
- /* Doubleword loads and stores with a 14 bit displacement. */
- case R_PARISC_DLTREL14DR:
- case R_PARISC_DLTIND14DR:
- case R_PARISC_LTOFF_FPTR14DR:
- case R_PARISC_LTOFF_FPTR16DF:
- case R_PARISC_PCREL14DR:
- case R_PARISC_PCREL16DF:
- case R_PARISC_LTOFF_TP14DR:
- case R_PARISC_LTOFF_TP16DF:
- case R_PARISC_DPREL14DR:
- case R_PARISC_GPREL16DF:
- case R_PARISC_PLTOFF14DR:
- case R_PARISC_PLTOFF16DF:
- case R_PARISC_DIR14DR:
- case R_PARISC_DIR16DF:
- case R_PARISC_LTOFF16DF:
- return (insn & ~0x3ff1) | (((sym_value & 0x2000) >> 13)
- | ((sym_value & 0x1ff8) << 1));
+ /* If this symbol has an entry in the PA64 dynamic hash
+ table, then get it. */
+ dyn_name = get_dyn_name (input_bfd, h, rel,
+ &dynh_buf, &dynh_buflen);
+ dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
+ dyn_name, FALSE, FALSE);
- /* Floating point single word load/store instructions. */
- case R_PARISC_DLTREL14WR:
- case R_PARISC_DLTIND14WR:
- case R_PARISC_LTOFF_FPTR14WR:
- case R_PARISC_LTOFF_FPTR16WF:
- case R_PARISC_PCREL14WR:
- case R_PARISC_PCREL16WF:
- case R_PARISC_LTOFF_TP14WR:
- case R_PARISC_LTOFF_TP16WF:
- case R_PARISC_DPREL14WR:
- case R_PARISC_GPREL16WF:
- case R_PARISC_PLTOFF14WR:
- case R_PARISC_PLTOFF16WF:
- case R_PARISC_DIR16WF:
- case R_PARISC_DIR14WR:
- case R_PARISC_LTOFF16WF:
- return (insn & ~0x3ff9) | (((sym_value & 0x2000) >> 13)
- | ((sym_value & 0x1ffc) << 1));
+ /* If we have a relocation against a symbol defined in a
+ shared library and we have not created an entry in the
+ PA64 dynamic symbol hash table for it, then we lose. */
+ if (!info->relocatable
+ && sym_sec->output_section == NULL && dyn_h == NULL)
+ {
+ (*_bfd_error_handler)
+ (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
+ input_bfd,
+ input_section,
+ (long) rel->r_offset,
+ howto->name,
+ h->root.root.string);
+ }
+ else if (sym_sec->output_section)
+ relocation = (h->root.u.def.value
+ + sym_sec->output_offset
+ + sym_sec->output_section->vma);
+ }
+ else if (info->unresolved_syms_in_objects == RM_IGNORE
+ && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
+ {
+ /* If this symbol has an entry in the PA64 dynamic hash
+ table, then get it. */
+ dyn_name = get_dyn_name (input_bfd, h, rel,
+ &dynh_buf, &dynh_buflen);
+ dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
+ dyn_name, FALSE, FALSE);
- default:
- return insn;
+ if (!info->relocatable && dyn_h == NULL)
+ {
+ (*_bfd_error_handler)
+ (_("%B(%A): warning: unresolvable relocation against symbol `%s'"),
+ input_bfd, input_section, h->root.root.string);
+ }
+ }
+ else if (h->root.type == bfd_link_hash_undefweak)
+ {
+ dyn_name = get_dyn_name (input_bfd, h, rel,
+ &dynh_buf, &dynh_buflen);
+ dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
+ dyn_name, FALSE, FALSE);
+
+ if (!info->relocatable && dyn_h == NULL)
+ {
+ (*_bfd_error_handler)
+ (_("%B(%A): warning: unresolvable relocation against symbol `%s'"),
+ input_bfd, input_section, h->root.root.string);
+ }
+ }
+ else if (!info->relocatable)
+ {
+ /* Ignore dynamic loader defined symbols. */
+ if (!elf_hppa_is_dynamic_loader_symbol (h->root.root.string))
+ {
+ if (!((*info->callbacks->undefined_symbol)
+ (info, h->root.root.string, input_bfd,
+ input_section, rel->r_offset,
+ (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
+ || ELF_ST_VISIBILITY (h->other)))))
+ return FALSE;
+ break;
+ }
+ }
+ }
+
+ if (sym_sec != NULL && elf_discarded_section (sym_sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
+ r = elf_hppa_final_link_relocate (rel, input_bfd, output_bfd,
+ input_section, contents,
+ relocation, info, sym_sec,
+ h, dyn_h);
+
+ if (r != bfd_reloc_ok)
+ {
+ switch (r)
+ {
+ default:
+ abort ();
+ case bfd_reloc_overflow:
+ {
+ const char *sym_name;
+
+ if (h != NULL)
+ sym_name = NULL;
+ else
+ {
+ sym_name = bfd_elf_string_from_elf_section (input_bfd,
+ symtab_hdr->sh_link,
+ sym->st_name);
+ if (sym_name == NULL)
+ return FALSE;
+ if (*sym_name == '\0')
+ sym_name = bfd_section_name (input_bfd, sym_sec);
+ }
+
+ if (!((*info->callbacks->reloc_overflow)
+ (info, (h ? &h->root : NULL), sym_name,
+ howto->name, (bfd_vma) 0, input_bfd,
+ input_section, rel->r_offset)))
+ return FALSE;
+ }
+ break;
+ }
+ }
}
+ return TRUE;
}
-#endif
+
+#endif /* ARCH_SIZE == 64 */
diff --git a/bfd/elf-m10200.c b/bfd/elf-m10200.c
index a39e4389d073..8189239f4631 100644
--- a/bfd/elf-m10200.c
+++ b/bfd/elf-m10200.c
@@ -1,5 +1,5 @@
/* Matsushita 10200 specific support for 32-bit ELF
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -207,6 +207,23 @@ bfd_elf32_bfd_reloc_type_lookup (abfd, code)
return NULL;
}
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (elf_mn10200_howto_table)
+ / sizeof (elf_mn10200_howto_table[0]));
+ i++)
+ if (elf_mn10200_howto_table[i].name != NULL
+ && strcasecmp (elf_mn10200_howto_table[i].name, r_name) == 0)
+ return &elf_mn10200_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an MN10200 ELF reloc. */
static void
@@ -343,9 +360,6 @@ mn10200_elf_relocate_section (output_bfd, info, input_bfd, input_section,
struct elf_link_hash_entry **sym_hashes;
Elf_Internal_Rela *rel, *relend;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -385,6 +399,20 @@ mn10200_elf_relocate_section (output_bfd, info, input_bfd, input_section,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
r = mn10200_elf_final_link_relocate (howto, input_bfd, output_bfd,
input_section,
contents, rel->r_offset,
diff --git a/bfd/elf-m10300.c b/bfd/elf-m10300.c
index 509f2a102e38..992b2a4961f6 100644
--- a/bfd/elf-m10300.c
+++ b/bfd/elf-m10300.c
@@ -1,25 +1,25 @@
/* Matsushita 10300 specific support for 32-bit ELF
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- 2006 Free Software Foundation, Inc.
+ 2006, 2007 Free Software Foundation, Inc.
-This file is part of BFD, the Binary File Descriptor library.
+ This file is part of BFD, the Binary File Descriptor library.
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+ This program is free software; you can 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.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/mn10300.h"
@@ -85,6 +85,9 @@ struct elf32_mn10300_link_hash_entry {
prologue deleted. */
#define MN10300_DELETED_PROLOGUE_BYTES 0x2
unsigned char flags;
+
+ /* Calculated value. */
+ bfd_vma value;
};
/* We derive a hash table from the main elf linker hash table so
@@ -131,9 +134,6 @@ static void mn10300_info_to_howto
static bfd_boolean mn10300_elf_check_relocs
PARAMS ((bfd *, struct bfd_link_info *, asection *,
const Elf_Internal_Rela *));
-static asection *mn10300_elf_gc_mark_hook
- PARAMS ((asection *, struct bfd_link_info *info, Elf_Internal_Rela *,
- struct elf_link_hash_entry *, Elf_Internal_Sym *));
static bfd_boolean mn10300_elf_relax_delete_bytes
PARAMS ((bfd *, asection *, bfd_vma, int));
static bfd_boolean mn10300_elf_symbol_address_p
@@ -637,6 +637,23 @@ bfd_elf32_bfd_reloc_type_lookup (abfd, code)
return NULL;
}
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (elf_mn10300_howto_table)
+ / sizeof (elf_mn10300_howto_table[0]));
+ i++)
+ if (elf_mn10300_howto_table[i].name != NULL
+ && strcasecmp (elf_mn10300_howto_table[i].name, r_name) == 0)
+ return &elf_mn10300_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an MN10300 ELF reloc. */
static void
@@ -883,7 +900,7 @@ mn10300_elf_check_relocs (abfd, info, sec, relocs)
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
name + 5) == 0);
@@ -919,40 +936,21 @@ mn10300_elf_check_relocs (abfd, info, sec, relocs)
relocation. */
static asection *
-mn10300_elf_gc_mark_hook (sec, info, rel, h, sym)
- asection *sec;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
- Elf_Internal_Rela *rel;
- struct elf_link_hash_entry *h;
- Elf_Internal_Sym *sym;
+mn10300_elf_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_MN10300_GNU_VTINHERIT:
- case R_MN10300_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_MN10300_GNU_VTINHERIT:
+ case R_MN10300_GNU_VTENTRY:
+ return NULL;
+ }
- return NULL;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Perform a relocation as part of a final link. */
@@ -1033,7 +1031,7 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (input_bfd,
input_section),
name + 5) == 0);
@@ -1381,9 +1379,6 @@ mn10300_elf_relocate_section (output_bfd, info, input_bfd, input_section,
struct elf_link_hash_entry **sym_hashes;
Elf_Internal_Rela *rel, *relend;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -1459,7 +1454,7 @@ mn10300_elf_relocate_section (output_bfd, info, input_bfd, input_section,
obscure cases sec->output_section will be NULL. */
relocation = 0;
- else if (unresolved_reloc)
+ else if (!info->relocatable && unresolved_reloc)
(*_bfd_error_handler)
(_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
input_bfd,
@@ -1469,6 +1464,20 @@ mn10300_elf_relocate_section (output_bfd, info, input_bfd, input_section,
h->root.root.root.string);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
r = mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
input_section,
contents, rel->r_offset,
@@ -1518,7 +1527,12 @@ mn10300_elf_relocate_section (output_bfd, info, input_bfd, input_section,
goto common_error;
case bfd_reloc_dangerous:
- msg = _("internal error: dangerous error");
+ if (r_type == R_MN10300_PCREL32)
+ msg = _("error: inappropriate relocation type for shared"
+ " library (did you forget -fpic?)");
+ else
+ msg = _("internal error: suspicious relocation type used"
+ " in shared library");
goto common_error;
default:
@@ -1602,6 +1616,42 @@ elf32_mn10300_finish_hash_table_entry (gen_entry, in_args)
return TRUE;
}
+/* Used to count hash table entries. */
+static bfd_boolean
+elf32_mn10300_count_hash_table_entries (struct bfd_hash_entry *gen_entry ATTRIBUTE_UNUSED,
+ PTR in_args)
+{
+ int *count = (int *)in_args;
+
+ (*count) ++;
+ return TRUE;
+}
+
+/* Used to enumerate hash table entries into a linear array. */
+static bfd_boolean
+elf32_mn10300_list_hash_table_entries (struct bfd_hash_entry *gen_entry,
+ PTR in_args)
+{
+ struct bfd_hash_entry ***ptr = (struct bfd_hash_entry ***) in_args;
+
+ **ptr = gen_entry;
+ (*ptr) ++;
+ return TRUE;
+}
+
+/* Used to sort the array created by the above. */
+static int
+sort_by_value (const void *va, const void *vb)
+{
+ struct elf32_mn10300_link_hash_entry *a
+ = *(struct elf32_mn10300_link_hash_entry **)va;
+ struct elf32_mn10300_link_hash_entry *b
+ = *(struct elf32_mn10300_link_hash_entry **)vb;
+
+ return a->value - b->value;
+}
+
+
/* This function handles relaxing for the mn10300.
There are quite a few relaxing opportunities available on the mn10300:
@@ -1697,9 +1747,10 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
char *new_name;
/* If there's nothing to do in this section, skip it. */
- if (! (((section->flags & SEC_RELOC) != 0
- && section->reloc_count != 0)
- || (section->flags & SEC_CODE) != 0))
+ if (! ((section->flags & SEC_RELOC) != 0
+ && section->reloc_count != 0))
+ continue;
+ if ((section->flags & SEC_ALLOC) == 0)
continue;
/* Get cached copy of section contents if it exists. */
@@ -1802,13 +1853,17 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
elf_sym_hashes (input_bfd)[r_index];
}
- /* If this is not a "call" instruction, then we
- should convert "call" instructions to "calls"
- instructions. */
- code = bfd_get_8 (input_bfd,
- contents + irel->r_offset - 1);
- if (code != 0xdd && code != 0xcd)
- hash->flags |= MN10300_CONVERT_CALL_TO_CALLS;
+ sym_name = hash->root.root.root.string;
+ if ((section->flags & SEC_CODE) != 0)
+ {
+ /* If this is not a "call" instruction, then we
+ should convert "call" instructions to "calls"
+ instructions. */
+ code = bfd_get_8 (input_bfd,
+ contents + irel->r_offset - 1);
+ if (code != 0xdd && code != 0xcd)
+ hash->flags |= MN10300_CONVERT_CALL_TO_CALLS;
+ }
/* If this is a jump/call, then bump the
direct_calls counter. Else force "call" to
@@ -1901,6 +1956,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
free (new_name);
compute_function_info (input_bfd, hash,
isym->st_value, contents);
+ hash->value = isym->st_value;
}
}
@@ -1962,6 +2018,44 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
elf32_mn10300_finish_hash_table_entry,
link_info);
+ {
+ /* This section of code collects all our local symbols, sorts
+ them by value, and looks for multiple symbols referring to
+ the same address. For those symbols, the flags are merged.
+ At this point, the only flag that can be set is
+ MN10300_CONVERT_CALL_TO_CALLS, so we simply OR the flags
+ together. */
+ int static_count = 0, i;
+ struct elf32_mn10300_link_hash_entry **entries;
+ struct elf32_mn10300_link_hash_entry **ptr;
+
+ elf32_mn10300_link_hash_traverse (hash_table->static_hash_table,
+ elf32_mn10300_count_hash_table_entries,
+ &static_count);
+
+ entries = (struct elf32_mn10300_link_hash_entry **)
+ bfd_malloc (static_count * sizeof (struct elf32_mn10300_link_hash_entry *));
+
+ ptr = entries;
+ elf32_mn10300_link_hash_traverse (hash_table->static_hash_table,
+ elf32_mn10300_list_hash_table_entries,
+ &ptr);
+
+ qsort (entries, static_count, sizeof(entries[0]), sort_by_value);
+
+ for (i=0; i<static_count-1; i++)
+ if (entries[i]->value && entries[i]->value == entries[i+1]->value)
+ {
+ int v = entries[i]->flags;
+ int j;
+ for (j=i+1; j<static_count && entries[j]->value == entries[i]->value; j++)
+ v |= entries[j]->flags;
+ for (j=i; j<static_count && entries[j]->value == entries[i]->value; j++)
+ entries[j]->flags = v;
+ i = j-1;
+ }
+ }
+
/* All entries in the hash table are fully initialized. */
hash_table->flags |= MN10300_HASH_ENTRIES_INITIALIZED;
@@ -2795,8 +2889,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
into a 16bit immediate, displacement or absolute address. */
if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_32
|| ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOT32
- || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOTOFF32
- || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOTPC32)
+ || ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOTOFF32)
{
bfd_vma value = symval;
@@ -3677,6 +3770,7 @@ elf32_mn10300_link_hash_newfunc (entry, table, string)
ret->movm_args = 0;
ret->movm_stack_size = 0;
ret->flags = 0;
+ ret->value = 0;
}
return (struct bfd_hash_entry *) ret;
@@ -4002,7 +4096,6 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (info, h)
{
bfd * dynobj;
asection * s;
- unsigned int power_of_two;
dynobj = elf_hash_table (info)->dynobj;
@@ -4142,28 +4235,7 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (info, h)
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 3)
- power_of_two = 3;
-
- /* Apply the required alignment. */
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (dynobj, s))
- {
- if (! bfd_set_section_alignment (dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Set the sizes of the dynamic sections. */
@@ -4227,7 +4299,7 @@ _bfd_mn10300_elf_size_dynamic_sections (output_bfd, info)
/* Remember whether there is a PLT. */
plt = s->size != 0;
}
- else if (strncmp (name, ".rela", 5) == 0)
+ else if (CONST_STRNEQ (name, ".rela"))
{
if (s->size != 0)
{
@@ -4260,7 +4332,7 @@ _bfd_mn10300_elf_size_dynamic_sections (output_bfd, info)
s->reloc_count = 0;
}
}
- else if (strncmp (name, ".got", 4) != 0
+ else if (! CONST_STRNEQ (name, ".got")
&& strcmp (name, ".dynbss") != 0)
/* It's not one of our sections, so don't allocate space. */
continue;
@@ -4695,6 +4767,8 @@ _bfd_mn10300_elf_reloc_type_class (const Elf_Internal_Rela *rela)
_bfd_mn10300_elf_adjust_dynamic_symbol
#define elf_backend_size_dynamic_sections \
_bfd_mn10300_elf_size_dynamic_sections
+#define elf_backend_omit_section_dynsym \
+ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
#define elf_backend_finish_dynamic_symbol \
_bfd_mn10300_elf_finish_dynamic_symbol
#define elf_backend_finish_dynamic_sections \
diff --git a/bfd/elf-strtab.c b/bfd/elf-strtab.c
index a0ce1d79ea8e..f5d6db1c10c0 100644
--- a/bfd/elf-strtab.c
+++ b/bfd/elf-strtab.c
@@ -1,5 +1,6 @@
/* ELF strtab with GC and suffix merging support.
- Copyright 2001, 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+ Copyright 2001, 2002, 2003, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Written by Jakub Jelinek <jakub@redhat.com>.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +19,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "hashtab.h"
diff --git a/bfd/elf-vxworks.c b/bfd/elf-vxworks.c
index 90e620a90559..7b0d59090973 100644
--- a/bfd/elf-vxworks.c
+++ b/bfd/elf-vxworks.c
@@ -1,5 +1,5 @@
/* VxWorks support for ELF
- Copyright 2005 Free Software Foundation, Inc.
+ Copyright 2005, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -20,15 +20,34 @@
/* This file provides routines used by all VxWorks targets. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf-vxworks.h"
+/* Return true if symbol NAME, as defined by ABFD, is one of the special
+ __GOTT_BASE__ or __GOTT_INDEX__ symbols. */
+
+static bfd_boolean
+elf_vxworks_gott_symbol_p (bfd *abfd, const char *name)
+{
+ char leading;
+
+ leading = bfd_get_symbol_leading_char (abfd);
+ if (leading)
+ {
+ if (*name != leading)
+ return FALSE;
+ name++;
+ }
+ return (strcmp (name, "__GOTT_BASE__") == 0
+ || strcmp (name, "__GOTT_INDEX__") == 0);
+}
+
/* Tweak magic VxWorks symbols as they are loaded. */
bfd_boolean
-elf_vxworks_add_symbol_hook (bfd *abfd ATTRIBUTE_UNUSED,
+elf_vxworks_add_symbol_hook (bfd *abfd,
struct bfd_link_info *info,
Elf_Internal_Sym *sym,
const char **namep,
@@ -45,8 +64,7 @@ elf_vxworks_add_symbol_hook (bfd *abfd ATTRIBUTE_UNUSED,
This transformation will be undone in
elf_i386_vxworks_link_output_symbol_hook. */
if ((info->shared || abfd->flags & DYNAMIC)
- && (strcmp (*namep, "__GOTT_INDEX__") == 0
- || strcmp (*namep, "__GOTT_BASE__") == 0))
+ && elf_vxworks_gott_symbol_p (abfd, *namep))
{
sym->st_info = ELF_ST_INFO (STB_WEAK, ELF_ST_TYPE (sym->st_info));
*flagsp |= BSF_WEAK;
@@ -114,16 +132,12 @@ elf_vxworks_link_output_symbol_hook (struct bfd_link_info *info
const char *name,
Elf_Internal_Sym *sym,
asection *input_sec ATTRIBUTE_UNUSED,
- struct elf_link_hash_entry *h
- ATTRIBUTE_UNUSED)
+ struct elf_link_hash_entry *h)
{
- /* Ignore the first dummy symbol. */
- if (!name)
- return TRUE;
-
/* Reverse the effects of the hack in elf_vxworks_add_symbol_hook. */
- if (strcmp (name, "__GOTT_INDEX__") == 0
- || strcmp (name, "__GOTT_BASE__") == 0)
+ if (h
+ && h->root.type == bfd_link_hash_undefweak
+ && elf_vxworks_gott_symbol_p (h->root.u.undef.abfd, name))
sym->st_info = ELF_ST_INFO (STB_GLOBAL, ELF_ST_TYPE (sym->st_info));
return TRUE;
@@ -156,7 +170,8 @@ elf_vxworks_emit_relocs (bfd *output_bfd,
&& *rel_hash
&& (*rel_hash)->def_dynamic
&& !(*rel_hash)->def_regular
- && (*rel_hash)->root.type == bfd_link_hash_defined
+ && ((*rel_hash)->root.type == bfd_link_hash_defined
+ || (*rel_hash)->root.type == bfd_link_hash_defweak)
&& (*rel_hash)->root.u.def.section->output_section != NULL)
{
/* This is a relocation from an executable or shared library
@@ -171,8 +186,7 @@ elf_vxworks_emit_relocs (bfd *output_bfd,
for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
{
asection *sec = (*rel_hash)->root.u.def.section;
- int this_idx =
- elf_section_data (sec->output_section)->this_idx;
+ int this_idx = sec->output_section->target_index;
irela[j].r_info = ELF32_R_INFO (this_idx,
ELF32_R_TYPE (irela[j].r_info));
diff --git a/bfd/elf.c b/bfd/elf.c
index 9e48f66e90fa..ab5c23f711a4 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1,7 +1,7 @@
/* ELF executable support for BFD.
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -33,8 +33,8 @@ SECTION
/* For sparc64-cross-sparc32. */
#define _SYSCALL32
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#define ARCH_SIZE 0
@@ -206,16 +206,32 @@ bfd_elf_hash (const char *namearg)
return h & 0xffffffff;
}
+/* DT_GNU_HASH hash function. Do not change this function; you will
+ cause invalid hash tables to be generated. */
+
+unsigned long
+bfd_elf_gnu_hash (const char *namearg)
+{
+ const unsigned char *name = (const unsigned char *) namearg;
+ unsigned long h = 5381;
+ unsigned char ch;
+
+ while ((ch = *name++) != '\0')
+ h = (h << 5) + h + ch;
+ return h & 0xffffffff;
+}
+
bfd_boolean
bfd_elf_mkobject (bfd *abfd)
{
- /* This just does initialization. */
- /* coff_mkobject zalloc's space for tdata.coff_obj_data ... */
- elf_tdata (abfd) = bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
- if (elf_tdata (abfd) == 0)
- return FALSE;
- /* Since everything is done at close time, do we need any
- initialization? */
+ if (abfd->tdata.any == NULL)
+ {
+ abfd->tdata.any = bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
+ if (abfd->tdata.any == NULL)
+ return FALSE;
+ }
+
+ elf_tdata (abfd)->program_header_size = (bfd_size_type) -1;
return TRUE;
}
@@ -236,7 +252,9 @@ bfd_elf_get_str_section (bfd *abfd, unsigned int shindex)
bfd_size_type shstrtabsize;
i_shdrp = elf_elfsections (abfd);
- if (i_shdrp == 0 || i_shdrp[shindex] == 0)
+ if (i_shdrp == 0
+ || shindex >= elf_numsections (abfd)
+ || i_shdrp[shindex] == 0)
return NULL;
shstrtab = i_shdrp[shindex]->contents;
@@ -275,6 +293,9 @@ bfd_elf_string_from_elf_section (bfd *abfd,
if (strindex == 0)
return "";
+ if (elf_elfsections (abfd) == NULL || shindex >= elf_numsections (abfd))
+ return NULL;
+
hdr = elf_elfsections (abfd)[shindex];
if (hdr->contents == NULL
@@ -384,7 +405,15 @@ bfd_elf_get_elf_syms (bfd *ibfd,
for (esym = extsym_buf, isym = intsym_buf, shndx = extshndx_buf;
isym < isymend;
esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL)
- (*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym);
+ if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym))
+ {
+ symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size;
+ (*_bfd_error_handler) (_("%B symbol number %lu references "
+ "nonexistent SHT_SYMTAB_SHNDX section"),
+ ibfd, (unsigned long) symoffset);
+ intsym_buf = NULL;
+ goto out;
+ }
out:
if (alloc_ext != NULL)
@@ -477,10 +506,18 @@ setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
section with just a flag word (ie. sh_size is 4), ignore it. */
shnum = elf_numsections (abfd);
num_group = 0;
+
+#define IS_VALID_GROUP_SECTION_HEADER(shdr) \
+ ( (shdr)->sh_type == SHT_GROUP \
+ && (shdr)->sh_size >= (2 * GRP_ENTRY_SIZE) \
+ && (shdr)->sh_entsize == GRP_ENTRY_SIZE \
+ && ((shdr)->sh_size % GRP_ENTRY_SIZE) == 0)
+
for (i = 0; i < shnum; i++)
{
Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
- if (shdr->sh_type == SHT_GROUP && shdr->sh_size >= 8)
+
+ if (IS_VALID_GROUP_SECTION_HEADER (shdr))
num_group += 1;
}
@@ -505,7 +542,8 @@ setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
for (i = 0; i < shnum; i++)
{
Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
- if (shdr->sh_type == SHT_GROUP && shdr->sh_size >= 8)
+
+ if (IS_VALID_GROUP_SECTION_HEADER (shdr))
{
unsigned char *src;
Elf_Internal_Group *dest;
@@ -519,8 +557,18 @@ setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
amt = shdr->sh_size * sizeof (*dest) / 4;
shdr->contents = bfd_alloc2 (abfd, shdr->sh_size,
sizeof (*dest) / 4);
- if (shdr->contents == NULL
- || bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
+ /* PR binutils/4110: Handle corrupt group headers. */
+ if (shdr->contents == NULL)
+ {
+ _bfd_error_handler
+ (_("%B: Corrupt size field in group section header: 0x%lx"), abfd, shdr->sh_size);
+ bfd_set_error (bfd_error_bad_value);
+ return FALSE;
+ }
+
+ memset (shdr->contents, 0, amt);
+
+ if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
|| (bfd_bread (shdr->contents, shdr->sh_size, abfd)
!= shdr->sh_size))
return FALSE;
@@ -800,24 +848,24 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
int len;
} debug_sections [] =
{
- { "debug", 5 }, /* 'd' */
+ { STRING_COMMA_LEN ("debug") }, /* 'd' */
{ NULL, 0 }, /* 'e' */
{ NULL, 0 }, /* 'f' */
- { "gnu.linkonce.wi.", 17 }, /* 'g' */
+ { STRING_COMMA_LEN ("gnu.linkonce.wi.") }, /* 'g' */
{ NULL, 0 }, /* 'h' */
{ NULL, 0 }, /* 'i' */
{ NULL, 0 }, /* 'j' */
{ NULL, 0 }, /* 'k' */
- { "line", 4 }, /* 'l' */
+ { STRING_COMMA_LEN ("line") }, /* 'l' */
{ NULL, 0 }, /* 'm' */
{ NULL, 0 }, /* 'n' */
{ NULL, 0 }, /* 'o' */
{ NULL, 0 }, /* 'p' */
{ NULL, 0 }, /* 'q' */
{ NULL, 0 }, /* 'r' */
- { "stab", 4 } /* 's' */
+ { STRING_COMMA_LEN ("stab") } /* 's' */
};
-
+
if (name [0] == '.')
{
int i = name [1] - 'd';
@@ -836,7 +884,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
The symbols will be defined as weak, so that multiple definitions
are permitted. The GNU linker extension is to actually discard
all but one of the sections. */
- if (strncmp (name, ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) == 0
+ if (CONST_STRNEQ (name, ".gnu.linkonce")
&& elf_next_in_group (newsect) == NULL)
flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
@@ -854,8 +902,8 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
unsigned int i;
/* Look through the phdrs to see if we need to adjust the lma.
- If all the p_paddr fields are zero, we ignore them, since
- some ELF linkers produce such output. */
+ If all the p_paddr fields are zero, we ignore them, since
+ some ELF linkers produce such output. */
phdr = elf_tdata (abfd)->phdr;
for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
{
@@ -876,9 +924,9 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
refuse to set the LMA if it was 0. This is wrong
though, as a perfectly valid initialised segment can
have a p_paddr of zero. Some architectures, eg ARM,
- place special significance on the address 0 and
- executables need to be able to have a segment which
- covers this address. */
+ place special significance on the address 0 and
+ executables need to be able to have a segment which
+ covers this address. */
if (phdr->p_type == PT_LOAD
&& (bfd_vma) hdr->sh_offset >= phdr->p_offset
&& (hdr->sh_offset + hdr->sh_size
@@ -1065,6 +1113,10 @@ _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
elf_gp (obfd) = elf_gp (ibfd);
elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
elf_flags_init (obfd) = TRUE;
+
+ /* Copy object attributes. */
+ _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
return TRUE;
}
@@ -1239,6 +1291,7 @@ _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
case DT_AUXILIARY: name = "AUXILIARY"; stringp = TRUE; break;
case DT_USED: name = "USED"; break;
case DT_FILTER: name = "FILTER"; stringp = TRUE; break;
+ case DT_GNU_HASH: name = "GNU_HASH"; break;
}
fprintf (f, " %-11s ", name);
@@ -1472,9 +1525,9 @@ _bfd_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
memset (&ret->size, 0, (sizeof (struct elf_link_hash_entry)
- offsetof (struct elf_link_hash_entry, size)));
/* Assume that we have been called by a non-ELF symbol reader.
- This flag is then reset by the code which reads an ELF input
- file. This ensures that a symbol created by a non-ELF symbol
- reader will have the flag set correctly. */
+ This flag is then reset by the code which reads an ELF input
+ file. This ensures that a symbol created by a non-ELF symbol
+ reader will have the flag set correctly. */
ret->non_elf = 1;
}
@@ -1567,27 +1620,13 @@ _bfd_elf_link_hash_table_init
bfd_boolean ret;
int can_refcount = get_elf_backend_data (abfd)->can_refcount;
- table->dynamic_sections_created = FALSE;
- table->dynobj = NULL;
+ memset (table, 0, sizeof * table);
table->init_got_refcount.refcount = can_refcount - 1;
table->init_plt_refcount.refcount = can_refcount - 1;
table->init_got_offset.offset = -(bfd_vma) 1;
table->init_plt_offset.offset = -(bfd_vma) 1;
/* The first dynamic symbol is a dummy. */
table->dynsymcount = 1;
- table->dynstr = NULL;
- table->bucketcount = 0;
- table->needed = NULL;
- table->hgot = NULL;
- table->merge_info = NULL;
- memset (&table->stab_info, 0, sizeof (table->stab_info));
- memset (&table->eh_info, 0, sizeof (table->eh_info));
- table->dynlocal = NULL;
- table->runpath = NULL;
- table->tls_sec = NULL;
- table->tls_size = 0;
- table->loaded = NULL;
- table->is_relocatable_executable = FALSE;
ret = _bfd_link_hash_table_init (&table->root, abfd, newfunc, entsize);
table->root.type = bfd_link_elf_hash_table;
@@ -1642,7 +1681,7 @@ bfd_elf_get_dyn_lib_class (bfd *abfd)
}
void
-bfd_elf_set_dyn_lib_class (bfd *abfd, int lib_class)
+bfd_elf_set_dyn_lib_class (bfd *abfd, enum dynamic_lib_link_class lib_class)
{
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
&& bfd_get_format (abfd) == bfd_object)
@@ -1822,6 +1861,7 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
case SHT_FINI_ARRAY: /* .fini_array section. */
case SHT_PREINIT_ARRAY: /* .preinit_array section. */
case SHT_GNU_LIBLIST: /* .gnu.liblist section. */
+ case SHT_GNU_HASH: /* .gnu.hash section. */
return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
case SHT_DYNAMIC: /* Dynamic linking information. */
@@ -1873,11 +1913,11 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
abfd->flags |= HAS_SYMS;
/* Sometimes a shared object will map in the symbol table. If
- SHF_ALLOC is set, and this is a shared object, then we also
- treat this section as a BFD section. We can not base the
- decision purely on SHF_ALLOC, because that flag is sometimes
- set in a relocatable object file, which would confuse the
- linker. */
+ SHF_ALLOC is set, and this is a shared object, then we also
+ treat this section as a BFD section. We can not base the
+ decision purely on SHF_ALLOC, because that flag is sometimes
+ set in a relocatable object file, which would confuse the
+ linker. */
if ((hdr->sh_flags & SHF_ALLOC) != 0
&& (abfd->flags & DYNAMIC) != 0
&& ! _bfd_elf_make_section_from_shdr (abfd, hdr, name,
@@ -2099,13 +2139,11 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
abfd->flags |= HAS_RELOC;
return TRUE;
}
- break;
case SHT_GNU_verdef:
elf_dynverdef (abfd) = shindex;
elf_tdata (abfd)->dynverdef_hdr = *hdr;
return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
- break;
case SHT_GNU_versym:
if (hdr->sh_entsize != sizeof (Elf_External_Versym))
@@ -2113,13 +2151,11 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
elf_dynversym (abfd) = shindex;
elf_tdata (abfd)->dynversym_hdr = *hdr;
return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
- break;
case SHT_GNU_verneed:
elf_dynverref (abfd) = shindex;
elf_tdata (abfd)->dynverref_hdr = *hdr;
return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
- break;
case SHT_SHLIB:
return TRUE;
@@ -2128,7 +2164,7 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
/* We need a BFD section for objcopy and relocatable linking,
and it's handy to have the signature available as the section
name. */
- if (hdr->sh_entsize != GRP_ENTRY_SIZE)
+ if (! IS_VALID_GROUP_SECTION_HEADER (hdr))
return FALSE;
name = group_signature (abfd, hdr);
if (name == NULL)
@@ -2138,7 +2174,7 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
if (hdr->contents != NULL)
{
Elf_Internal_Group *idx = (Elf_Internal_Group *) hdr->contents;
- unsigned int n_elt = hdr->sh_size / 4;
+ unsigned int n_elt = hdr->sh_size / GRP_ENTRY_SIZE;
asection *s;
if (idx->flags & GRP_COMDAT)
@@ -2148,19 +2184,78 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
/* We try to keep the same section order as it comes in. */
idx += n_elt;
while (--n_elt != 0)
- if ((s = (--idx)->shdr->bfd_section) != NULL
- && elf_next_in_group (s) != NULL)
- {
- elf_next_in_group (hdr->bfd_section) = s;
- break;
- }
+ {
+ --idx;
+
+ if (idx->shdr != NULL
+ && (s = idx->shdr->bfd_section) != NULL
+ && elf_next_in_group (s) != NULL)
+ {
+ elf_next_in_group (hdr->bfd_section) = s;
+ break;
+ }
+ }
}
break;
default:
+ /* Possibly an attributes section. */
+ if (hdr->sh_type == SHT_GNU_ATTRIBUTES
+ || hdr->sh_type == bed->obj_attrs_section_type)
+ {
+ if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
+ return FALSE;
+ _bfd_elf_parse_attributes (abfd, hdr);
+ return TRUE;
+ }
+
/* Check for any processor-specific section types. */
- return bed->elf_backend_section_from_shdr (abfd, hdr, name,
- shindex);
+ if (bed->elf_backend_section_from_shdr (abfd, hdr, name, shindex))
+ return TRUE;
+
+ if (hdr->sh_type >= SHT_LOUSER && hdr->sh_type <= SHT_HIUSER)
+ {
+ if ((hdr->sh_flags & SHF_ALLOC) != 0)
+ /* FIXME: How to properly handle allocated section reserved
+ for applications? */
+ (*_bfd_error_handler)
+ (_("%B: don't know how to handle allocated, application "
+ "specific section `%s' [0x%8x]"),
+ abfd, name, hdr->sh_type);
+ else
+ /* Allow sections reserved for applications. */
+ return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
+ shindex);
+ }
+ else if (hdr->sh_type >= SHT_LOPROC
+ && hdr->sh_type <= SHT_HIPROC)
+ /* FIXME: We should handle this section. */
+ (*_bfd_error_handler)
+ (_("%B: don't know how to handle processor specific section "
+ "`%s' [0x%8x]"),
+ abfd, name, hdr->sh_type);
+ else if (hdr->sh_type >= SHT_LOOS && hdr->sh_type <= SHT_HIOS)
+ {
+ /* Unrecognised OS-specific sections. */
+ if ((hdr->sh_flags & SHF_OS_NONCONFORMING) != 0)
+ /* SHF_OS_NONCONFORMING indicates that special knowledge is
+ required to correctly process the section and the file should
+ be rejected with an error message. */
+ (*_bfd_error_handler)
+ (_("%B: don't know how to handle OS specific section "
+ "`%s' [0x%8x]"),
+ abfd, name, hdr->sh_type);
+ else
+ /* Otherwise it should be processed. */
+ return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
+ }
+ else
+ /* FIXME: We should handle this section. */
+ (*_bfd_error_handler)
+ (_("%B: don't know how to handle section `%s' [0x%8x]"),
+ abfd, name, hdr->sh_type);
+
+ return FALSE;
}
return TRUE;
@@ -2220,108 +2315,111 @@ bfd_section_from_elf_index (bfd *abfd, unsigned int index)
static const struct bfd_elf_special_section special_sections_b[] =
{
- { ".bss", 4, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".bss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
+ { NULL, 0, 0, 0, 0 }
};
static const struct bfd_elf_special_section special_sections_c[] =
{
- { ".comment", 8, 0, SHT_PROGBITS, 0 },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".comment"), 0, SHT_PROGBITS, 0 },
+ { NULL, 0, 0, 0, 0 }
};
static const struct bfd_elf_special_section special_sections_d[] =
{
- { ".data", 5, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".data1", 6, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".debug", 6, 0, SHT_PROGBITS, 0 },
- { ".debug_line", 11, 0, SHT_PROGBITS, 0 },
- { ".debug_info", 11, 0, SHT_PROGBITS, 0 },
- { ".debug_abbrev", 13, 0, SHT_PROGBITS, 0 },
- { ".debug_aranges", 14, 0, SHT_PROGBITS, 0 },
- { ".dynamic", 8, 0, SHT_DYNAMIC, SHF_ALLOC },
- { ".dynstr", 7, 0, SHT_STRTAB, SHF_ALLOC },
- { ".dynsym", 7, 0, SHT_DYNSYM, SHF_ALLOC },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".data"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".data1"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".debug"), 0, SHT_PROGBITS, 0 },
+ { STRING_COMMA_LEN (".debug_line"), 0, SHT_PROGBITS, 0 },
+ { STRING_COMMA_LEN (".debug_info"), 0, SHT_PROGBITS, 0 },
+ { STRING_COMMA_LEN (".debug_abbrev"), 0, SHT_PROGBITS, 0 },
+ { STRING_COMMA_LEN (".debug_aranges"), 0, SHT_PROGBITS, 0 },
+ { STRING_COMMA_LEN (".dynamic"), 0, SHT_DYNAMIC, SHF_ALLOC },
+ { STRING_COMMA_LEN (".dynstr"), 0, SHT_STRTAB, SHF_ALLOC },
+ { STRING_COMMA_LEN (".dynsym"), 0, SHT_DYNSYM, SHF_ALLOC },
+ { NULL, 0, 0, 0, 0 }
};
static const struct bfd_elf_special_section special_sections_f[] =
{
- { ".fini", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
- { ".fini_array", 11, 0, SHT_FINI_ARRAY, SHF_ALLOC + SHF_WRITE },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".fini"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
+ { STRING_COMMA_LEN (".fini_array"), 0, SHT_FINI_ARRAY, SHF_ALLOC + SHF_WRITE },
+ { NULL, 0, 0, 0, 0 }
};
static const struct bfd_elf_special_section special_sections_g[] =
{
- { ".gnu.linkonce.b",15, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
- { ".got", 4, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".gnu.version", 12, 0, SHT_GNU_versym, 0 },
- { ".gnu.version_d", 14, 0, SHT_GNU_verdef, 0 },
- { ".gnu.version_r", 14, 0, SHT_GNU_verneed, 0 },
- { ".gnu.liblist", 12, 0, SHT_GNU_LIBLIST, SHF_ALLOC },
- { ".gnu.conflict", 13, 0, SHT_RELA, SHF_ALLOC },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".gnu.linkonce.b"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".got"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".gnu.version"), 0, SHT_GNU_versym, 0 },
+ { STRING_COMMA_LEN (".gnu.version_d"), 0, SHT_GNU_verdef, 0 },
+ { STRING_COMMA_LEN (".gnu.version_r"), 0, SHT_GNU_verneed, 0 },
+ { STRING_COMMA_LEN (".gnu.liblist"), 0, SHT_GNU_LIBLIST, SHF_ALLOC },
+ { STRING_COMMA_LEN (".gnu.conflict"), 0, SHT_RELA, SHF_ALLOC },
+ { STRING_COMMA_LEN (".gnu.hash"), 0, SHT_GNU_HASH, SHF_ALLOC },
+ { NULL, 0, 0, 0, 0 }
};
static const struct bfd_elf_special_section special_sections_h[] =
{
- { ".hash", 5, 0, SHT_HASH, SHF_ALLOC },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".hash"), 0, SHT_HASH, SHF_ALLOC },
+ { NULL, 0, 0, 0, 0 }
};
static const struct bfd_elf_special_section special_sections_i[] =
{
- { ".init", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
- { ".init_array", 11, 0, SHT_INIT_ARRAY, SHF_ALLOC + SHF_WRITE },
- { ".interp", 7, 0, SHT_PROGBITS, 0 },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".init"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
+ { STRING_COMMA_LEN (".init_array"), 0, SHT_INIT_ARRAY, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".interp"), 0, SHT_PROGBITS, 0 },
+ { NULL, 0, 0, 0, 0 }
};
static const struct bfd_elf_special_section special_sections_l[] =
{
- { ".line", 5, 0, SHT_PROGBITS, 0 },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".line"), 0, SHT_PROGBITS, 0 },
+ { NULL, 0, 0, 0, 0 }
};
static const struct bfd_elf_special_section special_sections_n[] =
{
- { ".note.GNU-stack",15, 0, SHT_PROGBITS, 0 },
- { ".note", 5, -1, SHT_NOTE, 0 },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".note.GNU-stack"), 0, SHT_PROGBITS, 0 },
+ { STRING_COMMA_LEN (".note"), -1, SHT_NOTE, 0 },
+ { NULL, 0, 0, 0, 0 }
};
static const struct bfd_elf_special_section special_sections_p[] =
{
- { ".preinit_array", 14, 0, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE },
- { ".plt", 4, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".preinit_array"), 0, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".plt"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
+ { NULL, 0, 0, 0, 0 }
};
static const struct bfd_elf_special_section special_sections_r[] =
{
- { ".rodata", 7, -2, SHT_PROGBITS, SHF_ALLOC },
- { ".rodata1", 8, 0, SHT_PROGBITS, SHF_ALLOC },
- { ".rela", 5, -1, SHT_RELA, 0 },
- { ".rel", 4, -1, SHT_REL, 0 },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".rodata"), -2, SHT_PROGBITS, SHF_ALLOC },
+ { STRING_COMMA_LEN (".rodata1"), 0, SHT_PROGBITS, SHF_ALLOC },
+ { STRING_COMMA_LEN (".rela"), -1, SHT_RELA, 0 },
+ { STRING_COMMA_LEN (".rel"), -1, SHT_REL, 0 },
+ { NULL, 0, 0, 0, 0 }
};
static const struct bfd_elf_special_section special_sections_s[] =
{
- { ".shstrtab", 9, 0, SHT_STRTAB, 0 },
- { ".strtab", 7, 0, SHT_STRTAB, 0 },
- { ".symtab", 7, 0, SHT_SYMTAB, 0 },
- { ".stabstr", 5, 3, SHT_STRTAB, 0 },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".shstrtab"), 0, SHT_STRTAB, 0 },
+ { STRING_COMMA_LEN (".strtab"), 0, SHT_STRTAB, 0 },
+ { STRING_COMMA_LEN (".symtab"), 0, SHT_SYMTAB, 0 },
+ /* See struct bfd_elf_special_section declaration for the semantics of
+ this special case where .prefix_length != strlen (.prefix). */
+ { ".stabstr", 5, 3, SHT_STRTAB, 0 },
+ { NULL, 0, 0, 0, 0 }
};
static const struct bfd_elf_special_section special_sections_t[] =
{
- { ".text", 5, -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
- { ".tbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
- { ".tdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".text"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
+ { STRING_COMMA_LEN (".tbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
+ { STRING_COMMA_LEN (".tdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
+ { NULL, 0, 0, 0, 0 }
};
static const struct bfd_elf_special_section *special_sections[] =
@@ -2452,10 +2550,13 @@ _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
bed = get_elf_backend_data (abfd);
sec->use_rela_p = bed->default_use_rela_p;
- /* When we read a file, we don't need section type and flags unless
- it is a linker created section. They will be overridden in
- _bfd_elf_make_section_from_shdr anyway. */
- if (abfd->direction != read_direction
+ /* When we read a file, we don't need to set ELF section type and
+ flags. They will be overridden in _bfd_elf_make_section_from_shdr
+ anyway. We will set ELF section type and flags for all linker
+ created sections. If user specifies BFD section flags, we will
+ set ELF section type and flags based on BFD section flags in
+ elf_fake_sections. */
+ if ((!sec->flags && abfd->direction != read_direction)
|| (sec->flags & SEC_LINKER_CREATED) != 0)
{
ssect = (*bed->get_sec_type_attr) (abfd, sec);
@@ -2466,7 +2567,7 @@ _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
}
}
- return TRUE;
+ return _bfd_generic_new_section_hook (abfd, sec);
}
/* Create a new bfd section from an ELF program header.
@@ -2657,11 +2758,12 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg)
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
bfd_boolean *failedptr = failedptrarg;
Elf_Internal_Shdr *this_hdr;
+ unsigned int sh_type;
if (*failedptr)
{
/* We already failed; just get out of the bfd_map_over_sections
- loop. */
+ loop. */
return;
}
@@ -2700,8 +2802,8 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg)
if ((asect->flags & SEC_GROUP) != 0)
this_hdr->sh_type = SHT_GROUP;
else if ((asect->flags & SEC_ALLOC) != 0
- && (((asect->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
- || (asect->flags & SEC_NEVER_LOAD) != 0))
+ && (((asect->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
+ || (asect->flags & SEC_NEVER_LOAD) != 0))
this_hdr->sh_type = SHT_NOBITS;
else
this_hdr->sh_type = SHT_PROGBITS;
@@ -2750,8 +2852,8 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg)
case SHT_GNU_verdef:
this_hdr->sh_entsize = 0;
/* objcopy or strip will copy over sh_info, but may not set
- cverdefs. The linker will set cverdefs, but sh_info will be
- zero. */
+ cverdefs. The linker will set cverdefs, but sh_info will be
+ zero. */
if (this_hdr->sh_info == 0)
this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
else
@@ -2762,8 +2864,8 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg)
case SHT_GNU_verneed:
this_hdr->sh_entsize = 0;
/* objcopy or strip will copy over sh_info, but may not set
- cverrefs. The linker will set cverrefs, but sh_info will be
- zero. */
+ cverrefs. The linker will set cverrefs, but sh_info will be
+ zero. */
if (this_hdr->sh_info == 0)
this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
else
@@ -2772,7 +2874,11 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg)
break;
case SHT_GROUP:
- this_hdr->sh_entsize = 4;
+ this_hdr->sh_entsize = GRP_ENTRY_SIZE;
+ break;
+
+ case SHT_GNU_HASH:
+ this_hdr->sh_entsize = bed->s->arch_size == 64 ? 0 : 4;
break;
}
@@ -2810,10 +2916,18 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg)
}
/* Check for processor-specific section types. */
+ sh_type = this_hdr->sh_type;
if (bed->elf_backend_fake_sections
&& !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
*failedptr = TRUE;
+ if (sh_type == SHT_NOBITS && asect->size != 0)
+ {
+ /* Don't change the header type from NOBITS if we are being
+ called for objcopy --only-keep-debug. */
+ this_hdr->sh_type = sh_type;
+ }
+
/* If the section has relocs, set up a section header for the
SHT_REL[A] section. If two relocation sections are required for
this section, it is up to the processor-specific back-end to
@@ -2935,14 +3049,14 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
d = elf_section_data (sec);
if (d->this_hdr.sh_type == SHT_GROUP)
- {
+ {
if (sec->flags & SEC_LINKER_CREATED)
{
/* Remove the linker created SHT_GROUP sections. */
bfd_section_list_remove (abfd, sec);
abfd->section_count--;
}
- else
+ else
{
if (section_number == SHN_LORESERVE)
section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
@@ -3096,7 +3210,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
s, s->owner);
/* Point to the kept section if it has the same
size as the discarded one. */
- kept = _bfd_elf_check_kept_section (s);
+ kept = _bfd_elf_check_kept_section (s, link_info);
if (kept == NULL)
{
bfd_set_error (bfd_error_bad_value);
@@ -3129,7 +3243,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
The Intel C compiler generates SHT_IA_64_UNWIND with
SHF_LINK_ORDER. But it doesn't set the sh_link or
sh_info fields. Hence we could get the situation
- where s is NULL. */
+ where s is NULL. */
const struct elf_backend_data *bed
= get_elf_backend_data (abfd);
if (bed->link_order_error_handler)
@@ -3169,7 +3283,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
string section. We look for a section with the same name
but without the trailing ``str'', and set its sh_link
field to point to this section. */
- if (strncmp (sec->name, ".stab", sizeof ".stab" - 1) == 0
+ if (CONST_STRNEQ (sec->name, ".stab")
&& strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
{
size_t len;
@@ -3209,9 +3323,8 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
case SHT_GNU_LIBLIST:
/* sh_link is the section header index of the prelink library
- list
- used for the dynamic entries, or the symbol table, or the
- version strings. */
+ list used for the dynamic entries, or the symbol table, or
+ the version strings. */
s = bfd_get_section_by_name (abfd, (sec->flags & SEC_ALLOC)
? ".dynstr" : ".gnu.libstr");
if (s != NULL)
@@ -3219,6 +3332,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
break;
case SHT_HASH:
+ case SHT_GNU_HASH:
case SHT_GNU_versym:
/* sh_link is the section header index of the symbol table
this hash table or version table is for. */
@@ -3244,7 +3358,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
/* Map symbol from it's internal number to the external number, moving
all local symbols to be at the head of the list. */
-static int
+static bfd_boolean
sym_is_global (bfd *abfd, asymbol *sym)
{
/* If the backend has a special mapping, use it. */
@@ -3257,6 +3371,20 @@ sym_is_global (bfd *abfd, asymbol *sym)
|| bfd_is_com_section (bfd_get_section (sym)));
}
+/* Don't output section symbols for sections that are not going to be
+ output. Also, don't output section symbols for reloc and other
+ special sections. */
+
+static bfd_boolean
+ignore_section_sym (bfd *abfd, asymbol *sym)
+{
+ return ((sym->flags & BSF_SECTION_SYM) != 0
+ && (sym->value != 0
+ || (sym->section->owner != abfd
+ && (sym->section->output_section->owner != abfd
+ || sym->section->output_offset != 0))));
+}
+
static bfd_boolean
elf_map_symbols (bfd *abfd)
{
@@ -3297,51 +3425,29 @@ elf_map_symbols (bfd *abfd)
asymbol *sym = syms[idx];
if ((sym->flags & BSF_SECTION_SYM) != 0
- && sym->value == 0)
+ && !ignore_section_sym (abfd, sym))
{
- asection *sec;
+ asection *sec = sym->section;
- sec = sym->section;
+ if (sec->owner != abfd)
+ sec = sec->output_section;
- if (sec->owner != NULL)
- {
- if (sec->owner != abfd)
- {
- if (sec->output_offset != 0)
- continue;
-
- sec = sec->output_section;
-
- /* Empty sections in the input files may have had a
- section symbol created for them. (See the comment
- near the end of _bfd_generic_link_output_symbols in
- linker.c). If the linker script discards such
- sections then we will reach this point. Since we know
- that we cannot avoid this case, we detect it and skip
- the abort and the assignment to the sect_syms array.
- To reproduce this particular case try running the
- linker testsuite test ld-scripts/weak.exp for an ELF
- port that uses the generic linker. */
- if (sec->owner == NULL)
- continue;
-
- BFD_ASSERT (sec->owner == abfd);
- }
- sect_syms[sec->index] = syms[idx];
- }
+ sect_syms[sec->index] = syms[idx];
}
}
/* Classify all of the symbols. */
for (idx = 0; idx < symcount; idx++)
{
+ if (ignore_section_sym (abfd, syms[idx]))
+ continue;
if (!sym_is_global (abfd, syms[idx]))
num_locals++;
else
num_globals++;
}
- /* We will be adding a section symbol for each BFD section. Most normal
+ /* We will be adding a section symbol for each normal BFD section. Most
sections will already have a section symbol in outsymbols, but
eg. SHT_GROUP sections will not, and we need the section symbol mapped
at least in that case. */
@@ -3367,6 +3473,8 @@ elf_map_symbols (bfd *abfd)
asymbol *sym = syms[idx];
unsigned int i;
+ if (ignore_section_sym (abfd, sym))
+ continue;
if (!sym_is_global (abfd, sym))
i = num_locals2++;
else
@@ -3518,7 +3626,7 @@ _bfd_elf_compute_section_file_positions (bfd *abfd,
elf_tdata (abfd)->next_file_pos = off;
/* Now that we know where the .strtab section goes, write it
- out. */
+ out. */
if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
|| ! _bfd_stringtab_emit (abfd, strtab))
return FALSE;
@@ -3530,6 +3638,90 @@ _bfd_elf_compute_section_file_positions (bfd *abfd,
return TRUE;
}
+/* Make an initial estimate of the size of the program header. If we
+ get the number wrong here, we'll redo section placement. */
+
+static bfd_size_type
+get_program_header_size (bfd *abfd, struct bfd_link_info *info)
+{
+ size_t segs;
+ asection *s;
+ const struct elf_backend_data *bed;
+
+ /* Assume we will need exactly two PT_LOAD segments: one for text
+ and one for data. */
+ segs = 2;
+
+ s = bfd_get_section_by_name (abfd, ".interp");
+ if (s != NULL && (s->flags & SEC_LOAD) != 0)
+ {
+ /* If we have a loadable interpreter section, we need a
+ PT_INTERP segment. In this case, assume we also need a
+ PT_PHDR segment, although that may not be true for all
+ targets. */
+ segs += 2;
+ }
+
+ if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
+ {
+ /* We need a PT_DYNAMIC segment. */
+ ++segs;
+
+ if (elf_tdata (abfd)->relro)
+ {
+ /* We need a PT_GNU_RELRO segment only when there is a
+ PT_DYNAMIC segment. */
+ ++segs;
+ }
+ }
+
+ if (elf_tdata (abfd)->eh_frame_hdr)
+ {
+ /* We need a PT_GNU_EH_FRAME segment. */
+ ++segs;
+ }
+
+ if (elf_tdata (abfd)->stack_flags)
+ {
+ /* We need a PT_GNU_STACK segment. */
+ ++segs;
+ }
+
+ for (s = abfd->sections; s != NULL; s = s->next)
+ {
+ if ((s->flags & SEC_LOAD) != 0
+ && CONST_STRNEQ (s->name, ".note"))
+ {
+ /* We need a PT_NOTE segment. */
+ ++segs;
+ }
+ }
+
+ for (s = abfd->sections; s != NULL; s = s->next)
+ {
+ if (s->flags & SEC_THREAD_LOCAL)
+ {
+ /* We need a PT_TLS segment. */
+ ++segs;
+ break;
+ }
+ }
+
+ /* Let the backend count up any program headers it might need. */
+ bed = get_elf_backend_data (abfd);
+ if (bed->elf_backend_additional_program_headers)
+ {
+ int a;
+
+ a = (*bed->elf_backend_additional_program_headers) (abfd, info);
+ if (a == -1)
+ abort ();
+ segs += a;
+ }
+
+ return segs * bed->s->sizeof_phdr;
+}
+
/* Create a mapping from a set of sections to a program segment. */
static struct elf_segment_map *
@@ -3580,363 +3772,421 @@ _bfd_elf_make_dynamic_segment (bfd *abfd, asection *dynsec)
m->p_type = PT_DYNAMIC;
m->count = 1;
m->sections[0] = dynsec;
-
+
return m;
}
-/* Set up a mapping from BFD sections to program segments. */
+/* Possibly add or remove segments from the segment map. */
static bfd_boolean
-map_sections_to_segments (bfd *abfd)
+elf_modify_segment_map (bfd *abfd, struct bfd_link_info *info)
{
- asection **sections = NULL;
- asection *s;
- unsigned int i;
- unsigned int count;
- struct elf_segment_map *mfirst;
- struct elf_segment_map **pm;
- struct elf_segment_map *m;
- asection *last_hdr;
- bfd_vma last_size;
- unsigned int phdr_index;
- bfd_vma maxpagesize;
- asection **hdrpp;
- bfd_boolean phdr_in_segment = TRUE;
- bfd_boolean writable;
- int tls_count = 0;
- asection *first_tls = NULL;
- asection *dynsec, *eh_frame_hdr;
- bfd_size_type amt;
-
- if (elf_tdata (abfd)->segment_map != NULL)
- return TRUE;
+ struct elf_segment_map **m;
+ const struct elf_backend_data *bed;
- if (bfd_count_sections (abfd) == 0)
- return TRUE;
+ /* The placement algorithm assumes that non allocated sections are
+ not in PT_LOAD segments. We ensure this here by removing such
+ sections from the segment map. We also remove excluded
+ sections. Finally, any PT_LOAD segment without sections is
+ removed. */
+ m = &elf_tdata (abfd)->segment_map;
+ while (*m)
+ {
+ unsigned int i, new_count;
- /* Select the allocated sections, and sort them. */
+ for (new_count = 0, i = 0; i < (*m)->count; i++)
+ {
+ if (((*m)->sections[i]->flags & SEC_EXCLUDE) == 0
+ && (((*m)->sections[i]->flags & SEC_ALLOC) != 0
+ || (*m)->p_type != PT_LOAD))
+ {
+ (*m)->sections[new_count] = (*m)->sections[i];
+ new_count++;
+ }
+ }
+ (*m)->count = new_count;
- sections = bfd_malloc2 (bfd_count_sections (abfd), sizeof (asection *));
- if (sections == NULL)
- goto error_return;
+ if ((*m)->p_type == PT_LOAD && (*m)->count == 0)
+ *m = (*m)->next;
+ else
+ m = &(*m)->next;
+ }
- i = 0;
- for (s = abfd->sections; s != NULL; s = s->next)
+ bed = get_elf_backend_data (abfd);
+ if (bed->elf_backend_modify_segment_map != NULL)
{
- if ((s->flags & SEC_ALLOC) != 0)
- {
- sections[i] = s;
- ++i;
- }
+ if (!(*bed->elf_backend_modify_segment_map) (abfd, info))
+ return FALSE;
}
- BFD_ASSERT (i <= bfd_count_sections (abfd));
- count = i;
- qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
+ return TRUE;
+}
- /* Build the mapping. */
+/* Set up a mapping from BFD sections to program segments. */
- mfirst = NULL;
- pm = &mfirst;
+bfd_boolean
+_bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
+{
+ unsigned int count;
+ struct elf_segment_map *m;
+ asection **sections = NULL;
+ const struct elf_backend_data *bed = get_elf_backend_data (abfd);
- /* If we have a .interp section, then create a PT_PHDR segment for
- the program headers and a PT_INTERP segment for the .interp
- section. */
- s = bfd_get_section_by_name (abfd, ".interp");
- if (s != NULL && (s->flags & SEC_LOAD) != 0)
+ if (elf_tdata (abfd)->segment_map == NULL
+ && bfd_count_sections (abfd) != 0)
{
- amt = sizeof (struct elf_segment_map);
- m = bfd_zalloc (abfd, amt);
- if (m == NULL)
- goto error_return;
- m->next = NULL;
- m->p_type = PT_PHDR;
- /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */
- m->p_flags = PF_R | PF_X;
- m->p_flags_valid = 1;
- m->includes_phdrs = 1;
+ asection *s;
+ unsigned int i;
+ struct elf_segment_map *mfirst;
+ struct elf_segment_map **pm;
+ asection *last_hdr;
+ bfd_vma last_size;
+ unsigned int phdr_index;
+ bfd_vma maxpagesize;
+ asection **hdrpp;
+ bfd_boolean phdr_in_segment = TRUE;
+ bfd_boolean writable;
+ int tls_count = 0;
+ asection *first_tls = NULL;
+ asection *dynsec, *eh_frame_hdr;
+ bfd_size_type amt;
- *pm = m;
- pm = &m->next;
+ /* Select the allocated sections, and sort them. */
- amt = sizeof (struct elf_segment_map);
- m = bfd_zalloc (abfd, amt);
- if (m == NULL)
+ sections = bfd_malloc2 (bfd_count_sections (abfd), sizeof (asection *));
+ if (sections == NULL)
goto error_return;
- m->next = NULL;
- m->p_type = PT_INTERP;
- m->count = 1;
- m->sections[0] = s;
-
- *pm = m;
- pm = &m->next;
- }
-
- /* Look through the sections. We put sections in the same program
- segment when the start of the second section can be placed within
- a few bytes of the end of the first section. */
- last_hdr = NULL;
- last_size = 0;
- phdr_index = 0;
- maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
- writable = FALSE;
- dynsec = bfd_get_section_by_name (abfd, ".dynamic");
- if (dynsec != NULL
- && (dynsec->flags & SEC_LOAD) == 0)
- dynsec = NULL;
-
- /* Deal with -Ttext or something similar such that the first section
- is not adjacent to the program headers. This is an
- approximation, since at this point we don't know exactly how many
- program headers we will need. */
- if (count > 0)
- {
- bfd_size_type phdr_size;
-
- phdr_size = elf_tdata (abfd)->program_header_size;
- if (phdr_size == 0)
- phdr_size = get_elf_backend_data (abfd)->s->sizeof_phdr;
- if ((abfd->flags & D_PAGED) == 0
- || sections[0]->lma < phdr_size
- || sections[0]->lma % maxpagesize < phdr_size % maxpagesize)
- phdr_in_segment = FALSE;
- }
-
- for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
- {
- asection *hdr;
- bfd_boolean new_segment;
-
- hdr = *hdrpp;
-
- /* See if this section and the last one will fit in the same
- segment. */
- if (last_hdr == NULL)
- {
- /* If we don't have a segment yet, then we don't need a new
- one (we build the last one after this loop). */
- new_segment = FALSE;
- }
- else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
- {
- /* If this section has a different relation between the
- virtual address and the load address, then we need a new
- segment. */
- new_segment = TRUE;
- }
- else if (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
- < BFD_ALIGN (hdr->lma, maxpagesize))
- {
- /* If putting this section in this segment would force us to
- skip a page in the segment, then we need a new segment. */
- new_segment = TRUE;
- }
- else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
- && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
+ i = 0;
+ for (s = abfd->sections; s != NULL; s = s->next)
{
- /* We don't want to put a loadable section after a
- nonloadable section in the same segment.
- Consider .tbss sections as loadable for this purpose. */
- new_segment = TRUE;
- }
- else if ((abfd->flags & D_PAGED) == 0)
- {
- /* If the file is not demand paged, which means that we
- don't require the sections to be correctly aligned in the
- file, then there is no other reason for a new segment. */
- new_segment = FALSE;
+ if ((s->flags & SEC_ALLOC) != 0)
+ {
+ sections[i] = s;
+ ++i;
+ }
}
- else if (! writable
- && (hdr->flags & SEC_READONLY) == 0
- && (((last_hdr->lma + last_size - 1)
- & ~(maxpagesize - 1))
- != (hdr->lma & ~(maxpagesize - 1))))
+ BFD_ASSERT (i <= bfd_count_sections (abfd));
+ count = i;
+
+ qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
+
+ /* Build the mapping. */
+
+ mfirst = NULL;
+ pm = &mfirst;
+
+ /* If we have a .interp section, then create a PT_PHDR segment for
+ the program headers and a PT_INTERP segment for the .interp
+ section. */
+ s = bfd_get_section_by_name (abfd, ".interp");
+ if (s != NULL && (s->flags & SEC_LOAD) != 0)
{
- /* We don't want to put a writable section in a read only
- segment, unless they are on the same page in memory
- anyhow. We already know that the last section does not
- bring us past the current section on the page, so the
- only case in which the new section is not on the same
- page as the previous section is when the previous section
- ends precisely on a page boundary. */
- new_segment = TRUE;
+ amt = sizeof (struct elf_segment_map);
+ m = bfd_zalloc (abfd, amt);
+ if (m == NULL)
+ goto error_return;
+ m->next = NULL;
+ m->p_type = PT_PHDR;
+ /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */
+ m->p_flags = PF_R | PF_X;
+ m->p_flags_valid = 1;
+ m->includes_phdrs = 1;
+
+ *pm = m;
+ pm = &m->next;
+
+ amt = sizeof (struct elf_segment_map);
+ m = bfd_zalloc (abfd, amt);
+ if (m == NULL)
+ goto error_return;
+ m->next = NULL;
+ m->p_type = PT_INTERP;
+ m->count = 1;
+ m->sections[0] = s;
+
+ *pm = m;
+ pm = &m->next;
}
- else
+
+ /* Look through the sections. We put sections in the same program
+ segment when the start of the second section can be placed within
+ a few bytes of the end of the first section. */
+ last_hdr = NULL;
+ last_size = 0;
+ phdr_index = 0;
+ maxpagesize = bed->maxpagesize;
+ writable = FALSE;
+ dynsec = bfd_get_section_by_name (abfd, ".dynamic");
+ if (dynsec != NULL
+ && (dynsec->flags & SEC_LOAD) == 0)
+ dynsec = NULL;
+
+ /* Deal with -Ttext or something similar such that the first section
+ is not adjacent to the program headers. This is an
+ approximation, since at this point we don't know exactly how many
+ program headers we will need. */
+ if (count > 0)
{
- /* Otherwise, we can use the same segment. */
- new_segment = FALSE;
+ bfd_size_type phdr_size = elf_tdata (abfd)->program_header_size;
+
+ if (phdr_size == (bfd_size_type) -1)
+ phdr_size = get_program_header_size (abfd, info);
+ if ((abfd->flags & D_PAGED) == 0
+ || sections[0]->lma < phdr_size
+ || sections[0]->lma % maxpagesize < phdr_size % maxpagesize)
+ phdr_in_segment = FALSE;
}
- if (! new_segment)
+ for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
{
+ asection *hdr;
+ bfd_boolean new_segment;
+
+ hdr = *hdrpp;
+
+ /* See if this section and the last one will fit in the same
+ segment. */
+
+ if (last_hdr == NULL)
+ {
+ /* If we don't have a segment yet, then we don't need a new
+ one (we build the last one after this loop). */
+ new_segment = FALSE;
+ }
+ else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
+ {
+ /* If this section has a different relation between the
+ virtual address and the load address, then we need a new
+ segment. */
+ new_segment = TRUE;
+ }
+ else if (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
+ < BFD_ALIGN (hdr->lma, maxpagesize))
+ {
+ /* If putting this section in this segment would force us to
+ skip a page in the segment, then we need a new segment. */
+ new_segment = TRUE;
+ }
+ else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
+ && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
+ {
+ /* We don't want to put a loadable section after a
+ nonloadable section in the same segment.
+ Consider .tbss sections as loadable for this purpose. */
+ new_segment = TRUE;
+ }
+ else if ((abfd->flags & D_PAGED) == 0)
+ {
+ /* If the file is not demand paged, which means that we
+ don't require the sections to be correctly aligned in the
+ file, then there is no other reason for a new segment. */
+ new_segment = FALSE;
+ }
+ else if (! writable
+ && (hdr->flags & SEC_READONLY) == 0
+ && (((last_hdr->lma + last_size - 1)
+ & ~(maxpagesize - 1))
+ != (hdr->lma & ~(maxpagesize - 1))))
+ {
+ /* We don't want to put a writable section in a read only
+ segment, unless they are on the same page in memory
+ anyhow. We already know that the last section does not
+ bring us past the current section on the page, so the
+ only case in which the new section is not on the same
+ page as the previous section is when the previous section
+ ends precisely on a page boundary. */
+ new_segment = TRUE;
+ }
+ else
+ {
+ /* Otherwise, we can use the same segment. */
+ new_segment = FALSE;
+ }
+
+ /* Allow interested parties a chance to override our decision. */
+ if (last_hdr && info->callbacks->override_segment_assignment)
+ new_segment = info->callbacks->override_segment_assignment (info, abfd, hdr, last_hdr, new_segment);
+
+ if (! new_segment)
+ {
+ if ((hdr->flags & SEC_READONLY) == 0)
+ writable = TRUE;
+ last_hdr = hdr;
+ /* .tbss sections effectively have zero size. */
+ if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD))
+ != SEC_THREAD_LOCAL)
+ last_size = hdr->size;
+ else
+ last_size = 0;
+ continue;
+ }
+
+ /* We need a new program segment. We must create a new program
+ header holding all the sections from phdr_index until hdr. */
+
+ m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
+ if (m == NULL)
+ goto error_return;
+
+ *pm = m;
+ pm = &m->next;
+
if ((hdr->flags & SEC_READONLY) == 0)
writable = TRUE;
+ else
+ writable = FALSE;
+
last_hdr = hdr;
/* .tbss sections effectively have zero size. */
if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) != SEC_THREAD_LOCAL)
last_size = hdr->size;
else
last_size = 0;
- continue;
+ phdr_index = i;
+ phdr_in_segment = FALSE;
}
- /* We need a new program segment. We must create a new program
- header holding all the sections from phdr_index until hdr. */
+ /* Create a final PT_LOAD program segment. */
+ if (last_hdr != NULL)
+ {
+ m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
+ if (m == NULL)
+ goto error_return;
- m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
- if (m == NULL)
- goto error_return;
+ *pm = m;
+ pm = &m->next;
+ }
- *pm = m;
- pm = &m->next;
+ /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
+ if (dynsec != NULL)
+ {
+ m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
+ if (m == NULL)
+ goto error_return;
+ *pm = m;
+ pm = &m->next;
+ }
- if ((hdr->flags & SEC_READONLY) == 0)
- writable = TRUE;
- else
- writable = FALSE;
+ /* For each loadable .note section, add a PT_NOTE segment. We don't
+ use bfd_get_section_by_name, because if we link together
+ nonloadable .note sections and loadable .note sections, we will
+ generate two .note sections in the output file. FIXME: Using
+ names for section types is bogus anyhow. */
+ for (s = abfd->sections; s != NULL; s = s->next)
+ {
+ if ((s->flags & SEC_LOAD) != 0
+ && CONST_STRNEQ (s->name, ".note"))
+ {
+ amt = sizeof (struct elf_segment_map);
+ m = bfd_zalloc (abfd, amt);
+ if (m == NULL)
+ goto error_return;
+ m->next = NULL;
+ m->p_type = PT_NOTE;
+ m->count = 1;
+ m->sections[0] = s;
- last_hdr = hdr;
- /* .tbss sections effectively have zero size. */
- if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) != SEC_THREAD_LOCAL)
- last_size = hdr->size;
- else
- last_size = 0;
- phdr_index = i;
- phdr_in_segment = FALSE;
- }
+ *pm = m;
+ pm = &m->next;
+ }
+ if (s->flags & SEC_THREAD_LOCAL)
+ {
+ if (! tls_count)
+ first_tls = s;
+ tls_count++;
+ }
+ }
- /* Create a final PT_LOAD program segment. */
- if (last_hdr != NULL)
- {
- m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
- if (m == NULL)
- goto error_return;
+ /* If there are any SHF_TLS output sections, add PT_TLS segment. */
+ if (tls_count > 0)
+ {
+ int i;
- *pm = m;
- pm = &m->next;
- }
+ amt = sizeof (struct elf_segment_map);
+ amt += (tls_count - 1) * sizeof (asection *);
+ m = bfd_zalloc (abfd, amt);
+ if (m == NULL)
+ goto error_return;
+ m->next = NULL;
+ m->p_type = PT_TLS;
+ m->count = tls_count;
+ /* Mandated PF_R. */
+ m->p_flags = PF_R;
+ m->p_flags_valid = 1;
+ for (i = 0; i < tls_count; ++i)
+ {
+ BFD_ASSERT (first_tls->flags & SEC_THREAD_LOCAL);
+ m->sections[i] = first_tls;
+ first_tls = first_tls->next;
+ }
- /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
- if (dynsec != NULL)
- {
- m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
- if (m == NULL)
- goto error_return;
- *pm = m;
- pm = &m->next;
- }
+ *pm = m;
+ pm = &m->next;
+ }
- /* For each loadable .note section, add a PT_NOTE segment. We don't
- use bfd_get_section_by_name, because if we link together
- nonloadable .note sections and loadable .note sections, we will
- generate two .note sections in the output file. FIXME: Using
- names for section types is bogus anyhow. */
- for (s = abfd->sections; s != NULL; s = s->next)
- {
- if ((s->flags & SEC_LOAD) != 0
- && strncmp (s->name, ".note", 5) == 0)
+ /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
+ segment. */
+ eh_frame_hdr = elf_tdata (abfd)->eh_frame_hdr;
+ if (eh_frame_hdr != NULL
+ && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
{
amt = sizeof (struct elf_segment_map);
m = bfd_zalloc (abfd, amt);
if (m == NULL)
goto error_return;
m->next = NULL;
- m->p_type = PT_NOTE;
+ m->p_type = PT_GNU_EH_FRAME;
m->count = 1;
- m->sections[0] = s;
+ m->sections[0] = eh_frame_hdr->output_section;
*pm = m;
pm = &m->next;
}
- if (s->flags & SEC_THREAD_LOCAL)
- {
- if (! tls_count)
- first_tls = s;
- tls_count++;
- }
- }
- /* If there are any SHF_TLS output sections, add PT_TLS segment. */
- if (tls_count > 0)
- {
- int i;
-
- amt = sizeof (struct elf_segment_map);
- amt += (tls_count - 1) * sizeof (asection *);
- m = bfd_zalloc (abfd, amt);
- if (m == NULL)
- goto error_return;
- m->next = NULL;
- m->p_type = PT_TLS;
- m->count = tls_count;
- /* Mandated PF_R. */
- m->p_flags = PF_R;
- m->p_flags_valid = 1;
- for (i = 0; i < tls_count; ++i)
+ if (elf_tdata (abfd)->stack_flags)
{
- BFD_ASSERT (first_tls->flags & SEC_THREAD_LOCAL);
- m->sections[i] = first_tls;
- first_tls = first_tls->next;
- }
-
- *pm = m;
- pm = &m->next;
- }
+ amt = sizeof (struct elf_segment_map);
+ m = bfd_zalloc (abfd, amt);
+ if (m == NULL)
+ goto error_return;
+ m->next = NULL;
+ m->p_type = PT_GNU_STACK;
+ m->p_flags = elf_tdata (abfd)->stack_flags;
+ m->p_flags_valid = 1;
- /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
- segment. */
- eh_frame_hdr = elf_tdata (abfd)->eh_frame_hdr;
- if (eh_frame_hdr != NULL
- && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
- {
- amt = sizeof (struct elf_segment_map);
- m = bfd_zalloc (abfd, amt);
- if (m == NULL)
- goto error_return;
- m->next = NULL;
- m->p_type = PT_GNU_EH_FRAME;
- m->count = 1;
- m->sections[0] = eh_frame_hdr->output_section;
+ *pm = m;
+ pm = &m->next;
+ }
- *pm = m;
- pm = &m->next;
- }
+ if (dynsec != NULL && elf_tdata (abfd)->relro)
+ {
+ /* We make a PT_GNU_RELRO segment only when there is a
+ PT_DYNAMIC segment. */
+ amt = sizeof (struct elf_segment_map);
+ m = bfd_zalloc (abfd, amt);
+ if (m == NULL)
+ goto error_return;
+ m->next = NULL;
+ m->p_type = PT_GNU_RELRO;
+ m->p_flags = PF_R;
+ m->p_flags_valid = 1;
- if (elf_tdata (abfd)->stack_flags)
- {
- amt = sizeof (struct elf_segment_map);
- m = bfd_zalloc (abfd, amt);
- if (m == NULL)
- goto error_return;
- m->next = NULL;
- m->p_type = PT_GNU_STACK;
- m->p_flags = elf_tdata (abfd)->stack_flags;
- m->p_flags_valid = 1;
+ *pm = m;
+ pm = &m->next;
+ }
- *pm = m;
- pm = &m->next;
+ free (sections);
+ elf_tdata (abfd)->segment_map = mfirst;
}
- if (elf_tdata (abfd)->relro)
- {
- amt = sizeof (struct elf_segment_map);
- m = bfd_zalloc (abfd, amt);
- if (m == NULL)
- goto error_return;
- m->next = NULL;
- m->p_type = PT_GNU_RELRO;
- m->p_flags = PF_R;
- m->p_flags_valid = 1;
-
- *pm = m;
- pm = &m->next;
- }
+ if (!elf_modify_segment_map (abfd, info))
+ return FALSE;
- free (sections);
- sections = NULL;
+ for (count = 0, m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
+ ++count;
+ elf_tdata (abfd)->program_header_size = count * bed->s->sizeof_phdr;
- elf_tdata (abfd)->segment_map = mfirst;
return TRUE;
error_return:
@@ -4023,7 +4273,7 @@ elf_sort_sections (const void *arg1, const void *arg2)
adjustment = vma_offset + bed->maxpagesize - off_offset;
else
adjustment = vma_offset - off_offset;
-
+
which can can be collapsed into the expression below. */
static file_ptr
@@ -4032,154 +4282,69 @@ vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize)
return ((vma - off) % maxpagesize);
}
-static void
-print_segment_map (bfd *abfd)
-{
- struct elf_segment_map *m;
- unsigned int i, j;
-
- fprintf (stderr, _(" Section to Segment mapping:\n"));
- fprintf (stderr, _(" Segment Sections...\n"));
-
- for (i= 0, m = elf_tdata (abfd)->segment_map;
- m != NULL;
- i++, m = m->next)
- {
- const char *pt = get_segment_type (m->p_type);
- char buf[32];
-
- if (pt == NULL)
- {
- if (m->p_type >= PT_LOPROC && m->p_type <= PT_HIPROC)
- sprintf (buf, "LOPROC+%7.7x",
- (unsigned int) (m->p_type - PT_LOPROC));
- else if (m->p_type >= PT_LOOS && m->p_type <= PT_HIOS)
- sprintf (buf, "LOOS+%7.7x",
- (unsigned int) (m->p_type - PT_LOOS));
- else
- snprintf (buf, sizeof (buf), "%8.8x",
- (unsigned int) m->p_type);
- pt = buf;
- }
- fprintf (stderr, " %2.2d: %14.14s: ", i, pt);
- for (j = 0; j < m->count; j++)
- fprintf (stderr, "%s ", m->sections [j]->name);
- putc ('\n',stderr);
- }
-}
-
/* Assign file positions to the sections based on the mapping from
sections to segments. This function also sets up some fields in
- the file header, and writes out the program headers. */
+ the file header. */
static bfd_boolean
-assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
+assign_file_positions_for_load_sections (bfd *abfd,
+ struct bfd_link_info *link_info)
{
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
- unsigned int count;
struct elf_segment_map *m;
- unsigned int alloc;
Elf_Internal_Phdr *phdrs;
- file_ptr off, voff;
- bfd_vma filehdr_vaddr, filehdr_paddr;
- bfd_vma phdrs_vaddr, phdrs_paddr;
Elf_Internal_Phdr *p;
+ file_ptr off;
+ bfd_size_type maxpagesize;
+ unsigned int alloc;
+ unsigned int i, j;
- if (elf_tdata (abfd)->segment_map == NULL)
- {
- if (! map_sections_to_segments (abfd))
- return FALSE;
- }
- else
- {
- /* The placement algorithm assumes that non allocated sections are
- not in PT_LOAD segments. We ensure this here by removing such
- sections from the segment map. We also remove excluded
- sections. */
- for (m = elf_tdata (abfd)->segment_map;
- m != NULL;
- m = m->next)
- {
- unsigned int new_count;
- unsigned int i;
-
- new_count = 0;
- for (i = 0; i < m->count; i ++)
- {
- if ((m->sections[i]->flags & SEC_EXCLUDE) == 0
- && ((m->sections[i]->flags & SEC_ALLOC) != 0
- || m->p_type != PT_LOAD))
- {
- if (i != new_count)
- m->sections[new_count] = m->sections[i];
-
- new_count ++;
- }
- }
-
- if (new_count != m->count)
- m->count = new_count;
- }
- }
-
- if (bed->elf_backend_modify_segment_map)
- {
- if (! (*bed->elf_backend_modify_segment_map) (abfd, link_info))
- return FALSE;
- }
+ if (link_info == NULL
+ && !elf_modify_segment_map (abfd, link_info))
+ return FALSE;
- count = 0;
+ alloc = 0;
for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
- ++count;
+ ++alloc;
elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
- elf_elfheader (abfd)->e_phnum = count;
+ elf_elfheader (abfd)->e_phnum = alloc;
+
+ if (elf_tdata (abfd)->program_header_size == (bfd_size_type) -1)
+ elf_tdata (abfd)->program_header_size = alloc * bed->s->sizeof_phdr;
+ else
+ BFD_ASSERT (elf_tdata (abfd)->program_header_size
+ >= alloc * bed->s->sizeof_phdr);
- if (count == 0)
+ if (alloc == 0)
{
elf_tdata (abfd)->next_file_pos = bed->s->sizeof_ehdr;
return TRUE;
}
- /* If we already counted the number of program segments, make sure
- that we allocated enough space. This happens when SIZEOF_HEADERS
- is used in a linker script. */
- alloc = elf_tdata (abfd)->program_header_size / bed->s->sizeof_phdr;
- if (alloc != 0 && count > alloc)
- {
- ((*_bfd_error_handler)
- (_("%B: Not enough room for program headers (allocated %u, need %u)"),
- abfd, alloc, count));
- print_segment_map (abfd);
- bfd_set_error (bfd_error_bad_value);
- return FALSE;
- }
-
- if (alloc == 0)
- alloc = count;
-
phdrs = bfd_alloc2 (abfd, alloc, sizeof (Elf_Internal_Phdr));
+ elf_tdata (abfd)->phdr = phdrs;
if (phdrs == NULL)
return FALSE;
+ maxpagesize = 1;
+ if ((abfd->flags & D_PAGED) != 0)
+ maxpagesize = bed->maxpagesize;
+
off = bed->s->sizeof_ehdr;
off += alloc * bed->s->sizeof_phdr;
- filehdr_vaddr = 0;
- filehdr_paddr = 0;
- phdrs_vaddr = 0;
- phdrs_paddr = 0;
-
- for (m = elf_tdata (abfd)->segment_map, p = phdrs;
+ for (m = elf_tdata (abfd)->segment_map, p = phdrs, j = 0;
m != NULL;
- m = m->next, p++)
+ m = m->next, p++, j++)
{
- unsigned int i;
asection **secpp;
+ bfd_vma off_adjust;
+ bfd_boolean no_contents;
/* If elf_segment_map is not from map_sections_to_segments, the
- sections may not be correctly ordered. NOTE: sorting should
+ sections may not be correctly ordered. NOTE: sorting should
not be done to the PT_NOTE section of a corefile, which may
contain several pseudo-sections artificially created by bfd.
Sorting these pseudo-sections breaks things badly. */
@@ -4193,58 +4358,109 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
number of sections with contents contributing to both p_filesz
and p_memsz, followed by a number of sections with no contents
that just contribute to p_memsz. In this loop, OFF tracks next
- available file offset for PT_LOAD and PT_NOTE segments. VOFF is
- an adjustment we use for segments that have no file contents
- but need zero filled memory allocation. */
- voff = 0;
+ available file offset for PT_LOAD and PT_NOTE segments. */
p->p_type = m->p_type;
p->p_flags = m->p_flags;
+ if (m->count == 0)
+ p->p_vaddr = 0;
+ else
+ p->p_vaddr = m->sections[0]->vma - m->p_vaddr_offset;
+
+ if (m->p_paddr_valid)
+ p->p_paddr = m->p_paddr;
+ else if (m->count == 0)
+ p->p_paddr = 0;
+ else
+ p->p_paddr = m->sections[0]->lma - m->p_vaddr_offset;
+
+ if (p->p_type == PT_LOAD
+ && (abfd->flags & D_PAGED) != 0)
+ {
+ /* p_align in demand paged PT_LOAD segments effectively stores
+ the maximum page size. When copying an executable with
+ objcopy, we set m->p_align from the input file. Use this
+ value for maxpagesize rather than bed->maxpagesize, which
+ may be different. Note that we use maxpagesize for PT_TLS
+ segment alignment later in this function, so we are relying
+ on at least one PT_LOAD segment appearing before a PT_TLS
+ segment. */
+ if (m->p_align_valid)
+ maxpagesize = m->p_align;
+
+ p->p_align = maxpagesize;
+ }
+ else if (m->count == 0)
+ p->p_align = 1 << bed->s->log_file_align;
+ else if (m->p_align_valid)
+ p->p_align = m->p_align;
+ else
+ p->p_align = 0;
+
+ no_contents = FALSE;
+ off_adjust = 0;
if (p->p_type == PT_LOAD
&& m->count > 0)
{
bfd_size_type align;
- bfd_vma adjust;
unsigned int align_power = 0;
- for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
+ if (m->p_align_valid)
+ align = p->p_align;
+ else
{
- unsigned int secalign;
+ for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
+ {
+ unsigned int secalign;
- secalign = bfd_get_section_alignment (abfd, *secpp);
- if (secalign > align_power)
- align_power = secalign;
+ secalign = bfd_get_section_alignment (abfd, *secpp);
+ if (secalign > align_power)
+ align_power = secalign;
+ }
+ align = (bfd_size_type) 1 << align_power;
+ if (align < maxpagesize)
+ align = maxpagesize;
}
- align = (bfd_size_type) 1 << align_power;
-
- if ((abfd->flags & D_PAGED) != 0 && bed->maxpagesize > align)
- align = bed->maxpagesize;
- adjust = vma_page_aligned_bias (m->sections[0]->vma, off, align);
- off += adjust;
- if (adjust != 0
- && !m->includes_filehdr
- && !m->includes_phdrs
- && (ufile_ptr) off >= align)
+ for (i = 0; i < m->count; i++)
+ if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
+ /* If we aren't making room for this section, then
+ it must be SHT_NOBITS regardless of what we've
+ set via struct bfd_elf_special_section. */
+ elf_section_type (m->sections[i]) = SHT_NOBITS;
+
+ /* Find out whether this segment contains any loadable
+ sections. If the first section isn't loadable, the same
+ holds for any other sections. */
+ i = 0;
+ while (elf_section_type (m->sections[i]) == SHT_NOBITS)
{
- /* If the first section isn't loadable, the same holds for
- any other sections. Since the segment won't need file
- space, we can make p_offset overlap some prior segment.
- However, .tbss is special. If a segment starts with
- .tbss, we need to look at the next section to decide
- whether the segment has any loadable sections. */
- i = 0;
- while ((m->sections[i]->flags & SEC_LOAD) == 0)
+ /* If a segment starts with .tbss, we need to look
+ at the next section to decide whether the segment
+ has any loadable sections. */
+ if ((elf_section_flags (m->sections[i]) & SHF_TLS) == 0
+ || ++i >= m->count)
{
- if ((m->sections[i]->flags & SEC_THREAD_LOCAL) == 0
- || ++i >= m->count)
- {
- off -= adjust;
- voff = adjust - align;
- break;
- }
+ no_contents = TRUE;
+ break;
}
}
+
+ off_adjust = vma_page_aligned_bias (m->sections[0]->vma, off, align);
+ off += off_adjust;
+ if (no_contents)
+ {
+ /* We shouldn't need to align the segment on disk since
+ the segment doesn't need file space, but the gABI
+ arguably requires the alignment and glibc ld.so
+ checks it. So to comply with the alignment
+ requirement but not waste file space, we adjust
+ p_offset for just this segment. (OFF_ADJUST is
+ subtracted from OFF later.) This may put p_offset
+ past the end of file, but that shouldn't matter. */
+ }
+ else
+ off_adjust = 0;
}
/* Make sure the .dynamic section is the first section in the
PT_DYNAMIC segment. */
@@ -4259,35 +4475,14 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
return FALSE;
}
- if (m->count == 0)
- p->p_vaddr = 0;
- else
- p->p_vaddr = m->sections[0]->vma;
-
- if (m->p_paddr_valid)
- p->p_paddr = m->p_paddr;
- else if (m->count == 0)
- p->p_paddr = 0;
- else
- p->p_paddr = m->sections[0]->lma;
-
- if (p->p_type == PT_LOAD
- && (abfd->flags & D_PAGED) != 0)
- p->p_align = bed->maxpagesize;
- else if (m->count == 0)
- p->p_align = 1 << bed->s->log_file_align;
- else
- p->p_align = 0;
-
p->p_offset = 0;
p->p_filesz = 0;
p->p_memsz = 0;
if (m->includes_filehdr)
{
- if (! m->p_flags_valid)
+ if (!m->p_flags_valid)
p->p_flags |= PF_R;
- p->p_offset = 0;
p->p_filesz = bed->s->sizeof_ehdr;
p->p_memsz = bed->s->sizeof_ehdr;
if (m->count > 0)
@@ -4304,30 +4499,17 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
}
p->p_vaddr -= off;
- if (! m->p_paddr_valid)
+ if (!m->p_paddr_valid)
p->p_paddr -= off;
}
- if (p->p_type == PT_LOAD)
- {
- filehdr_vaddr = p->p_vaddr;
- filehdr_paddr = p->p_paddr;
- }
}
if (m->includes_phdrs)
{
- if (! m->p_flags_valid)
+ if (!m->p_flags_valid)
p->p_flags |= PF_R;
- if (m->includes_filehdr)
- {
- if (p->p_type == PT_LOAD)
- {
- phdrs_vaddr = p->p_vaddr + bed->s->sizeof_ehdr;
- phdrs_paddr = p->p_paddr + bed->s->sizeof_ehdr;
- }
- }
- else
+ if (!m->includes_filehdr)
{
p->p_offset = bed->s->sizeof_ehdr;
@@ -4335,17 +4517,9 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
{
BFD_ASSERT (p->p_type == PT_LOAD);
p->p_vaddr -= off - p->p_offset;
- if (! m->p_paddr_valid)
+ if (!m->p_paddr_valid)
p->p_paddr -= off - p->p_offset;
}
-
- if (p->p_type == PT_LOAD)
- {
- phdrs_vaddr = p->p_vaddr;
- phdrs_paddr = p->p_paddr;
- }
- else
- phdrs_vaddr = bed->maxpagesize + bed->s->sizeof_ehdr;
}
p->p_filesz += alloc * bed->s->sizeof_phdr;
@@ -4355,36 +4529,44 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
if (p->p_type == PT_LOAD
|| (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
{
- if (! m->includes_filehdr && ! m->includes_phdrs)
- p->p_offset = off + voff;
+ if (!m->includes_filehdr && !m->includes_phdrs)
+ p->p_offset = off;
else
{
file_ptr adjust;
adjust = off - (p->p_offset + p->p_filesz);
- p->p_filesz += adjust;
+ if (!no_contents)
+ p->p_filesz += adjust;
p->p_memsz += adjust;
}
}
+ /* Set up p_filesz, p_memsz, p_align and p_flags from the section
+ maps. Set filepos for sections in PT_LOAD segments, and in
+ core files, for sections in PT_NOTE segments.
+ assign_file_positions_for_non_load_sections will set filepos
+ for other sections and update p_filesz for other segments. */
for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
{
asection *sec;
- flagword flags;
bfd_size_type align;
+ Elf_Internal_Shdr *this_hdr;
sec = *secpp;
- flags = sec->flags;
- align = 1 << bfd_get_section_alignment (abfd, sec);
+ this_hdr = &elf_section_data (sec)->this_hdr;
+ align = (bfd_size_type) 1 << bfd_get_section_alignment (abfd, sec);
if (p->p_type == PT_LOAD
|| p->p_type == PT_TLS)
{
- bfd_signed_vma adjust;
+ bfd_signed_vma adjust = sec->lma - (p->p_paddr + p->p_memsz);
- if ((flags & SEC_LOAD) != 0)
+ if (this_hdr->sh_type != SHT_NOBITS
+ || ((this_hdr->sh_flags & SHF_ALLOC) != 0
+ && ((this_hdr->sh_flags & SHF_TLS) == 0
+ || p->p_type == PT_TLS)))
{
- adjust = sec->lma - (p->p_paddr + p->p_filesz);
if (adjust < 0)
{
(*_bfd_error_handler)
@@ -4392,24 +4574,13 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
abfd, sec, (unsigned long) sec->lma);
adjust = 0;
}
- off += adjust;
- p->p_filesz += adjust;
- p->p_memsz += adjust;
- }
- /* .tbss is special. It doesn't contribute to p_memsz of
- normal segments. */
- else if ((flags & SEC_THREAD_LOCAL) == 0
- || p->p_type == PT_TLS)
- {
- /* The section VMA must equal the file position
- modulo the page size. */
- bfd_size_type page = align;
- if ((abfd->flags & D_PAGED) != 0 && bed->maxpagesize > page)
- page = bed->maxpagesize;
- adjust = vma_page_aligned_bias (sec->vma,
- p->p_vaddr + p->p_memsz,
- page);
p->p_memsz += adjust;
+
+ if (this_hdr->sh_type != SHT_NOBITS)
+ {
+ off += adjust;
+ p->p_filesz += adjust;
+ }
}
}
@@ -4419,9 +4590,9 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
everything. */
if (i == 0)
{
- sec->filepos = off;
- off += sec->size;
- p->p_filesz = sec->size;
+ this_hdr->sh_offset = sec->filepos = off;
+ off += this_hdr->sh_size;
+ p->p_filesz = this_hdr->sh_size;
p->p_memsz = 0;
p->p_align = 1;
}
@@ -4438,96 +4609,200 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
{
if (p->p_type == PT_LOAD)
{
- sec->filepos = off;
- /* FIXME: The SEC_HAS_CONTENTS test here dates back to
- 1997, and the exact reason for it isn't clear. One
- plausible explanation is that it is to work around
- a problem we have with linker scripts using data
- statements in NOLOAD sections. I don't think it
- makes a great deal of sense to have such a section
- assigned to a PT_LOAD segment, but apparently
- people do this. The data statement results in a
- bfd_data_link_order being built, and these need
- section contents to write into. Eventually, we get
- to _bfd_elf_write_object_contents which writes any
- section with contents to the output. Make room
- here for the write, so that following segments are
- not trashed. */
- if ((flags & SEC_LOAD) != 0
- || (flags & SEC_HAS_CONTENTS) != 0)
- off += sec->size;
+ this_hdr->sh_offset = sec->filepos = off;
+ if (this_hdr->sh_type != SHT_NOBITS)
+ off += this_hdr->sh_size;
}
- if ((flags & SEC_LOAD) != 0)
+ if (this_hdr->sh_type != SHT_NOBITS)
{
- p->p_filesz += sec->size;
- p->p_memsz += sec->size;
+ p->p_filesz += this_hdr->sh_size;
+ /* A load section without SHF_ALLOC is something like
+ a note section in a PT_NOTE segment. These take
+ file space but are not loaded into memory. */
+ if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
+ p->p_memsz += this_hdr->sh_size;
}
- /* PR ld/594: Sections in note segments which are not loaded
- contribute to the file size but not the in-memory size. */
- else if (p->p_type == PT_NOTE
- && (flags & SEC_HAS_CONTENTS) != 0)
- p->p_filesz += sec->size;
-
- /* .tbss is special. It doesn't contribute to p_memsz of
- normal segments. */
- else if ((flags & SEC_THREAD_LOCAL) == 0
- || p->p_type == PT_TLS)
- p->p_memsz += sec->size;
-
- if (p->p_type == PT_TLS
- && sec->size == 0
- && (sec->flags & SEC_HAS_CONTENTS) == 0)
+ else if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
{
- struct bfd_link_order *o = sec->map_tail.link_order;
- if (o != NULL)
- p->p_memsz += o->offset + o->size;
+ if (p->p_type == PT_TLS)
+ p->p_memsz += this_hdr->sh_size;
+
+ /* .tbss is special. It doesn't contribute to p_memsz of
+ normal segments. */
+ else if ((this_hdr->sh_flags & SHF_TLS) == 0)
+ p->p_memsz += this_hdr->sh_size;
}
- if (align > p->p_align
- && (p->p_type != PT_LOAD || (abfd->flags & D_PAGED) == 0))
+ if (p->p_type == PT_GNU_RELRO)
+ p->p_align = 1;
+ else if (align > p->p_align
+ && !m->p_align_valid
+ && (p->p_type != PT_LOAD
+ || (abfd->flags & D_PAGED) == 0))
p->p_align = align;
}
- if (! m->p_flags_valid)
+ if (!m->p_flags_valid)
{
p->p_flags |= PF_R;
- if ((flags & SEC_CODE) != 0)
+ if ((this_hdr->sh_flags & SHF_EXECINSTR) != 0)
p->p_flags |= PF_X;
- if ((flags & SEC_READONLY) == 0)
+ if ((this_hdr->sh_flags & SHF_WRITE) != 0)
p->p_flags |= PF_W;
}
}
+ off -= off_adjust;
+
+ /* Check that all sections are in a PT_LOAD segment.
+ Don't check funky gdb generated core files. */
+ if (p->p_type == PT_LOAD && bfd_get_format (abfd) != bfd_core)
+ for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
+ {
+ Elf_Internal_Shdr *this_hdr;
+ asection *sec;
+
+ sec = *secpp;
+ this_hdr = &(elf_section_data(sec)->this_hdr);
+ if (this_hdr->sh_size != 0
+ && !ELF_IS_SECTION_IN_SEGMENT_FILE (this_hdr, p))
+ {
+ (*_bfd_error_handler)
+ (_("%B: section `%A' can't be allocated in segment %d"),
+ abfd, sec, j);
+ bfd_set_error (bfd_error_bad_value);
+ return FALSE;
+ }
+ }
+ }
+
+ elf_tdata (abfd)->next_file_pos = off;
+ return TRUE;
+}
+
+/* Assign file positions for the other sections. */
+
+static bfd_boolean
+assign_file_positions_for_non_load_sections (bfd *abfd,
+ struct bfd_link_info *link_info)
+{
+ const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+ Elf_Internal_Shdr **i_shdrpp;
+ Elf_Internal_Shdr **hdrpp;
+ Elf_Internal_Phdr *phdrs;
+ Elf_Internal_Phdr *p;
+ struct elf_segment_map *m;
+ bfd_vma filehdr_vaddr, filehdr_paddr;
+ bfd_vma phdrs_vaddr, phdrs_paddr;
+ file_ptr off;
+ unsigned int num_sec;
+ unsigned int i;
+ unsigned int count;
+
+ i_shdrpp = elf_elfsections (abfd);
+ num_sec = elf_numsections (abfd);
+ off = elf_tdata (abfd)->next_file_pos;
+ for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
+ {
+ struct elf_obj_tdata *tdata = elf_tdata (abfd);
+ Elf_Internal_Shdr *hdr;
+
+ hdr = *hdrpp;
+ if (hdr->bfd_section != NULL
+ && (hdr->bfd_section->filepos != 0
+ || (hdr->sh_type == SHT_NOBITS
+ && hdr->contents == NULL)))
+ BFD_ASSERT (hdr->sh_offset == hdr->bfd_section->filepos);
+ else if ((hdr->sh_flags & SHF_ALLOC) != 0)
+ {
+ if (hdr->sh_size != 0)
+ ((*_bfd_error_handler)
+ (_("%B: warning: allocated section `%s' not in segment"),
+ abfd,
+ (hdr->bfd_section == NULL
+ ? "*unknown*"
+ : hdr->bfd_section->name)));
+ /* We don't need to page align empty sections. */
+ if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0)
+ off += vma_page_aligned_bias (hdr->sh_addr, off,
+ bed->maxpagesize);
+ else
+ off += vma_page_aligned_bias (hdr->sh_addr, off,
+ hdr->sh_addralign);
+ off = _bfd_elf_assign_file_position_for_section (hdr, off,
+ FALSE);
+ }
+ else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
+ && hdr->bfd_section == NULL)
+ || hdr == i_shdrpp[tdata->symtab_section]
+ || hdr == i_shdrpp[tdata->symtab_shndx_section]
+ || hdr == i_shdrpp[tdata->strtab_section])
+ hdr->sh_offset = -1;
+ else
+ off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
+
+ if (i == SHN_LORESERVE - 1)
+ {
+ i += SHN_HIRESERVE + 1 - SHN_LORESERVE;
+ hdrpp += SHN_HIRESERVE + 1 - SHN_LORESERVE;
+ }
}
/* Now that we have set the section file positions, we can set up
the file positions for the non PT_LOAD segments. */
+ count = 0;
+ filehdr_vaddr = 0;
+ filehdr_paddr = 0;
+ phdrs_vaddr = bed->maxpagesize + bed->s->sizeof_ehdr;
+ phdrs_paddr = 0;
+ phdrs = elf_tdata (abfd)->phdr;
for (m = elf_tdata (abfd)->segment_map, p = phdrs;
m != NULL;
m = m->next, p++)
{
- if (p->p_type != PT_LOAD && m->count > 0)
+ ++count;
+ if (p->p_type != PT_LOAD)
+ continue;
+
+ if (m->includes_filehdr)
{
- BFD_ASSERT (! m->includes_filehdr && ! m->includes_phdrs);
- /* If the section has not yet been assigned a file position,
- do so now. The ARM BPABI requires that .dynamic section
- not be marked SEC_ALLOC because it is not part of any
- PT_LOAD segment, so it will not be processed above. */
- if (p->p_type == PT_DYNAMIC && m->sections[0]->filepos == 0)
+ filehdr_vaddr = p->p_vaddr;
+ filehdr_paddr = p->p_paddr;
+ }
+ if (m->includes_phdrs)
+ {
+ phdrs_vaddr = p->p_vaddr;
+ phdrs_paddr = p->p_paddr;
+ if (m->includes_filehdr)
{
- unsigned int i;
- Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
-
- i = 1;
- while (i_shdrpp[i]->bfd_section != m->sections[0])
- ++i;
- off = (_bfd_elf_assign_file_position_for_section
- (i_shdrpp[i], off, TRUE));
- p->p_filesz = m->sections[0]->size;
+ phdrs_vaddr += bed->s->sizeof_ehdr;
+ phdrs_paddr += bed->s->sizeof_ehdr;
}
- p->p_offset = m->sections[0]->filepos;
}
- if (m->count == 0)
+ }
+
+ for (m = elf_tdata (abfd)->segment_map, p = phdrs;
+ m != NULL;
+ m = m->next, p++)
+ {
+ if (m->count != 0)
+ {
+ if (p->p_type != PT_LOAD
+ && (p->p_type != PT_NOTE || bfd_get_format (abfd) != bfd_core))
+ {
+ Elf_Internal_Shdr *hdr;
+ BFD_ASSERT (!m->includes_filehdr && !m->includes_phdrs);
+
+ hdr = &elf_section_data (m->sections[m->count - 1])->this_hdr;
+ p->p_filesz = (m->sections[m->count - 1]->filepos
+ - m->sections[0]->filepos);
+ if (hdr->sh_type != SHT_NOBITS)
+ p->p_filesz += hdr->sh_size;
+
+ p->p_offset = m->sections[0]->filepos;
+ }
+ }
+ else
{
if (m->includes_filehdr)
{
@@ -4550,8 +4825,8 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
if (lp->p_type == PT_LOAD
&& lp->p_vaddr <= link_info->relro_end
&& lp->p_vaddr >= link_info->relro_start
- && lp->p_vaddr + lp->p_filesz
- >= link_info->relro_end)
+ && (lp->p_vaddr + lp->p_filesz
+ >= link_info->relro_end))
break;
}
@@ -4575,131 +4850,11 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
}
}
- /* Clear out any program headers we allocated but did not use. */
- for (; count < alloc; count++, p++)
- {
- memset (p, 0, sizeof *p);
- p->p_type = PT_NULL;
- }
-
- elf_tdata (abfd)->phdr = phdrs;
-
elf_tdata (abfd)->next_file_pos = off;
- /* Write out the program headers. */
- if (bfd_seek (abfd, (bfd_signed_vma) bed->s->sizeof_ehdr, SEEK_SET) != 0
- || bed->s->write_out_phdrs (abfd, phdrs, alloc) != 0)
- return FALSE;
-
return TRUE;
}
-/* Get the size of the program header.
-
- If this is called by the linker before any of the section VMA's are set, it
- can't calculate the correct value for a strange memory layout. This only
- happens when SIZEOF_HEADERS is used in a linker script. In this case,
- SORTED_HDRS is NULL and we assume the normal scenario of one text and one
- data segment (exclusive of .interp and .dynamic).
-
- ??? User written scripts must either not use SIZEOF_HEADERS, or assume there
- will be two segments. */
-
-static bfd_size_type
-get_program_header_size (bfd *abfd)
-{
- size_t segs;
- asection *s;
- const struct elf_backend_data *bed = get_elf_backend_data (abfd);
-
- /* We can't return a different result each time we're called. */
- if (elf_tdata (abfd)->program_header_size != 0)
- return elf_tdata (abfd)->program_header_size;
-
- if (elf_tdata (abfd)->segment_map != NULL)
- {
- struct elf_segment_map *m;
-
- segs = 0;
- for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
- ++segs;
- elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
- return elf_tdata (abfd)->program_header_size;
- }
-
- /* Assume we will need exactly two PT_LOAD segments: one for text
- and one for data. */
- segs = 2;
-
- s = bfd_get_section_by_name (abfd, ".interp");
- if (s != NULL && (s->flags & SEC_LOAD) != 0)
- {
- /* If we have a loadable interpreter section, we need a
- PT_INTERP segment. In this case, assume we also need a
- PT_PHDR segment, although that may not be true for all
- targets. */
- segs += 2;
- }
-
- if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
- {
- /* We need a PT_DYNAMIC segment. */
- ++segs;
- }
-
- if (elf_tdata (abfd)->eh_frame_hdr)
- {
- /* We need a PT_GNU_EH_FRAME segment. */
- ++segs;
- }
-
- if (elf_tdata (abfd)->stack_flags)
- {
- /* We need a PT_GNU_STACK segment. */
- ++segs;
- }
-
- if (elf_tdata (abfd)->relro)
- {
- /* We need a PT_GNU_RELRO segment. */
- ++segs;
- }
-
- for (s = abfd->sections; s != NULL; s = s->next)
- {
- if ((s->flags & SEC_LOAD) != 0
- && strncmp (s->name, ".note", 5) == 0)
- {
- /* We need a PT_NOTE segment. */
- ++segs;
- }
- }
-
- for (s = abfd->sections; s != NULL; s = s->next)
- {
- if (s->flags & SEC_THREAD_LOCAL)
- {
- /* We need a PT_TLS segment. */
- ++segs;
- break;
- }
- }
-
- /* Let the backend count up any program headers it might need. */
- if (bed->elf_backend_additional_program_headers)
- {
- int a;
-
- a = (*bed->elf_backend_additional_program_headers) (abfd);
- if (a == -1)
- abort ();
- segs += a;
- }
-
- elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
- return elf_tdata (abfd)->program_header_size;
-}
-
/* Work out the file positions of all the sections. This is called by
_bfd_elf_compute_section_file_positions. All the section sizes and
VMAs must be known before this is called.
@@ -4718,16 +4873,16 @@ static bfd_boolean
assign_file_positions_except_relocs (bfd *abfd,
struct bfd_link_info *link_info)
{
- struct elf_obj_tdata * const tdata = elf_tdata (abfd);
- Elf_Internal_Ehdr * const i_ehdrp = elf_elfheader (abfd);
- Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
- unsigned int num_sec = elf_numsections (abfd);
+ struct elf_obj_tdata *tdata = elf_tdata (abfd);
+ Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
file_ptr off;
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
&& bfd_get_format (abfd) != bfd_core)
{
+ Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
+ unsigned int num_sec = elf_numsections (abfd);
Elf_Internal_Shdr **hdrpp;
unsigned int i;
@@ -4762,57 +4917,30 @@ assign_file_positions_except_relocs (bfd *abfd,
}
else
{
- unsigned int i;
- Elf_Internal_Shdr **hdrpp;
+ unsigned int alloc;
/* Assign file positions for the loaded sections based on the
- assignment of sections to segments. */
- if (! assign_file_positions_for_segments (abfd, link_info))
+ assignment of sections to segments. */
+ if (!assign_file_positions_for_load_sections (abfd, link_info))
return FALSE;
- /* Assign file positions for the other sections. */
+ /* And for non-load sections. */
+ if (!assign_file_positions_for_non_load_sections (abfd, link_info))
+ return FALSE;
- off = elf_tdata (abfd)->next_file_pos;
- for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
+ if (bed->elf_backend_modify_program_headers != NULL)
{
- Elf_Internal_Shdr *hdr;
+ if (!(*bed->elf_backend_modify_program_headers) (abfd, link_info))
+ return FALSE;
+ }
- hdr = *hdrpp;
- if (hdr->bfd_section != NULL
- && hdr->bfd_section->filepos != 0)
- hdr->sh_offset = hdr->bfd_section->filepos;
- else if ((hdr->sh_flags & SHF_ALLOC) != 0)
- {
- ((*_bfd_error_handler)
- (_("%B: warning: allocated section `%s' not in segment"),
- abfd,
- (hdr->bfd_section == NULL
- ? "*unknown*"
- : hdr->bfd_section->name)));
- if ((abfd->flags & D_PAGED) != 0)
- off += vma_page_aligned_bias (hdr->sh_addr, off,
- bed->maxpagesize);
- else
- off += vma_page_aligned_bias (hdr->sh_addr, off,
- hdr->sh_addralign);
- off = _bfd_elf_assign_file_position_for_section (hdr, off,
- FALSE);
- }
- else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
- && hdr->bfd_section == NULL)
- || hdr == i_shdrpp[tdata->symtab_section]
- || hdr == i_shdrpp[tdata->symtab_shndx_section]
- || hdr == i_shdrpp[tdata->strtab_section])
- hdr->sh_offset = -1;
- else
- off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
+ /* Write out the program headers. */
+ alloc = tdata->program_header_size / bed->s->sizeof_phdr;
+ if (bfd_seek (abfd, (bfd_signed_vma) bed->s->sizeof_ehdr, SEEK_SET) != 0
+ || bed->s->write_out_phdrs (abfd, tdata->phdr, alloc) != 0)
+ return FALSE;
- if (i == SHN_LORESERVE - 1)
- {
- i += SHN_HIRESERVE + 1 - SHN_LORESERVE;
- hdrpp += SHN_HIRESERVE + 1 - SHN_LORESERVE;
- }
- }
+ off = tdata->next_file_pos;
}
/* Place the section headers. */
@@ -4820,7 +4948,7 @@ assign_file_positions_except_relocs (bfd *abfd,
i_ehdrp->e_shoff = off;
off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
- elf_tdata (abfd)->next_file_pos = off;
+ tdata->next_file_pos = off;
return TRUE;
}
@@ -4987,7 +5115,7 @@ _bfd_elf_write_object_contents (bfd *abfd)
/* Write out the section header names. */
if (elf_shstrtab (abfd) != NULL
&& (bfd_seek (abfd, elf_tdata (abfd)->shstrtab_hdr.sh_offset, SEEK_SET) != 0
- || ! _bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd))))
+ || !_bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd))))
return FALSE;
if (bed->elf_backend_final_write_processing)
@@ -5059,13 +5187,14 @@ _bfd_elf_symbol_from_bfd_symbol (bfd *abfd, asymbol **asym_ptr_ptr)
&& (flags & BSF_SECTION_SYM)
&& asym_ptr->section)
{
+ asection *sec;
int indx;
- if (asym_ptr->section->output_section != NULL)
- indx = asym_ptr->section->output_section->index;
- else
- indx = asym_ptr->section->index;
- if (indx < elf_num_section_syms (abfd)
+ sec = asym_ptr->section;
+ if (sec->owner != abfd && sec->output_section != NULL)
+ sec = sec->output_section;
+ if (sec->owner == abfd
+ && (indx = sec->index) < elf_num_section_syms (abfd)
&& elf_section_syms (abfd)[indx] != NULL)
asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
}
@@ -5075,7 +5204,7 @@ _bfd_elf_symbol_from_bfd_symbol (bfd *abfd, asymbol **asym_ptr_ptr)
if (idx == 0)
{
/* This case can occur when using --strip-symbol on a symbol
- which is used in a relocation entry. */
+ which is used in a relocation entry. */
(*_bfd_error_handler)
(_("%B: symbol `%s' required but not present"),
abfd, bfd_asymbol_name (asym_ptr));
@@ -5154,7 +5283,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
&& bfd_get_format (ibfd) == bfd_core \
&& s->vma == 0 && s->lma == 0 \
&& (bfd_vma) s->filepos >= p->p_offset \
- && ((bfd_vma) s->filepos + s->size \
+ && ((bfd_vma) s->filepos + s->size \
<= p->p_offset + p->p_filesz))
/* The complicated case when p_vaddr is 0 is to handle the Solaris
@@ -5168,13 +5297,13 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
&& (s->flags & SEC_HAS_CONTENTS) != 0 \
&& s->size > 0 \
&& (bfd_vma) s->filepos >= p->p_offset \
- && ((bfd_vma) s->filepos + s->size \
+ && ((bfd_vma) s->filepos + s->size \
<= p->p_offset + p->p_filesz))
/* Decide if the given section should be included in the given segment.
A section will be included if:
1. It is within the address space of the segment -- we use the LMA
- if that is set for the segment and the VMA otherwise,
+ if that is set for the segment and the VMA otherwise,
2. It is an allocated segment,
3. There is an output section associated with it,
4. The section has not already been allocated to a previous segment.
@@ -5182,14 +5311,13 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
6. PT_TLS segment includes only SHF_TLS sections.
7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
8. PT_DYNAMIC should not contain empty sections at the beginning
- (with the possible exception of .dynamic). */
-#define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed) \
+ (with the possible exception of .dynamic). */
+#define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed) \
((((segment->p_paddr \
? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr) \
: IS_CONTAINED_BY_VMA (section, segment)) \
&& (section->flags & SEC_ALLOC) != 0) \
|| IS_COREFILE_NOTE (segment, section)) \
- && section->output_section != NULL \
&& segment->p_type != PT_GNU_STACK \
&& (segment->p_type != PT_TLS \
|| (section->flags & SEC_THREAD_LOCAL)) \
@@ -5199,12 +5327,18 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
&& (segment->p_type != PT_DYNAMIC \
|| SECTION_SIZE (section, segment) > 0 \
|| (segment->p_paddr \
- ? segment->p_paddr != section->lma \
- : segment->p_vaddr != section->vma) \
+ ? segment->p_paddr != section->lma \
+ : segment->p_vaddr != section->vma) \
|| (strcmp (bfd_get_section_name (ibfd, section), ".dynamic") \
- == 0)) \
+ == 0)) \
&& ! section->segment_mark)
+/* If the output section of a section in the input segment is NULL,
+ it is removed from the corresponding output segment. */
+#define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed) \
+ (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed) \
+ && section->output_section != NULL)
+
/* Returns TRUE iff seg1 starts after the end of seg2. */
#define SEGMENT_AFTER_SEGMENT(seg1, seg2, field) \
(seg1->field >= SEGMENT_END (seg2, seg2->field))
@@ -5217,9 +5351,9 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
LMA. */
#define SEGMENT_OVERLAPS(seg1, seg2) \
( !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_vaddr) \
- || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr)) \
+ || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr)) \
&& !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr) \
- || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
+ || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
/* Initialise the segment mark field. */
for (section = ibfd->sections; section != NULL; section = section->next)
@@ -5262,7 +5396,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
if (segment2->p_vaddr < segment->p_vaddr)
{
/* Extend SEGMENT2 to include SEGMENT and then delete
- SEGMENT. */
+ SEGMENT. */
extra_length =
SEGMENT_END (segment, segment->p_vaddr)
- SEGMENT_END (segment2, segment2->p_vaddr);
@@ -5283,7 +5417,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
else
{
/* Extend SEGMENT to include SEGMENT2 and then delete
- SEGMENT2. */
+ SEGMENT2. */
extra_length =
SEGMENT_END (segment2, segment2->p_vaddr)
- SEGMENT_END (segment, segment->p_vaddr);
@@ -5312,22 +5446,33 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
bfd_vma suggested_lma;
unsigned int j;
bfd_size_type amt;
+ asection * first_section;
if (segment->p_type == PT_NULL)
continue;
+ first_section = NULL;
/* Compute how many sections might be placed into this segment. */
for (section = ibfd->sections, section_count = 0;
section != NULL;
section = section->next)
- if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed))
- ++section_count;
+ {
+ /* Find the first section in the input segment, which may be
+ removed from the corresponding output segment. */
+ if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed))
+ {
+ if (first_section == NULL)
+ first_section = section;
+ if (section->output_section != NULL)
+ ++section_count;
+ }
+ }
/* Allocate a segment map big enough to contain
all of the sections we have selected. */
amt = sizeof (struct elf_segment_map);
amt += ((bfd_size_type) section_count - 1) * sizeof (asection *);
- map = bfd_alloc (obfd, amt);
+ map = bfd_zalloc (obfd, amt);
if (map == NULL)
return FALSE;
@@ -5337,8 +5482,15 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
map->p_type = segment->p_type;
map->p_flags = segment->p_flags;
map->p_flags_valid = 1;
- map->p_paddr = segment->p_paddr;
- map->p_paddr_valid = 1;
+
+ /* If the first section in the input segment is removed, there is
+ no need to preserve segment physical address in the corresponding
+ output segment. */
+ if (!first_section || first_section->output_section != NULL)
+ {
+ map->p_paddr = segment->p_paddr;
+ map->p_paddr_valid = 1;
+ }
/* Determine if this segment contains the ELF file header
and if it contains the program headers themselves. */
@@ -5455,8 +5607,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
|| IS_COREFILE_NOTE (segment, section)
|| (bed->want_p_paddr_set_to_zero &&
- IS_CONTAINED_BY_VMA (output_section, segment))
- )
+ IS_CONTAINED_BY_VMA (output_section, segment)))
{
if (matching_lma == 0)
matching_lma = output_section->lma;
@@ -5485,6 +5636,13 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
*pointer_to_map = map;
pointer_to_map = &map->next;
+ if (matching_lma != map->p_paddr
+ && !map->includes_filehdr && !map->includes_phdrs)
+ /* There is some padding before the first section in the
+ segment. So, we must account for that in the output
+ segment's vma. */
+ map->p_vaddr_offset = matching_lma - map->p_paddr;
+
free (sections);
continue;
}
@@ -5668,6 +5826,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
#undef IS_CONTAINED_BY_LMA
#undef IS_COREFILE_NOTE
#undef IS_SOLARIS_PT_INTERP
+#undef IS_SECTION_IN_INPUT_SEGMENT
#undef INCLUDE_SECTION_IN_SEGMENT
#undef SEGMENT_AFTER_SEGMENT
#undef SEGMENT_OVERLAPS
@@ -5702,6 +5861,7 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd)
unsigned int section_count;
bfd_size_type amt;
Elf_Internal_Shdr *this_hdr;
+ asection *first_section = NULL;
/* FIXME: Do we need to copy PT_NULL segment? */
if (segment->p_type == PT_NULL)
@@ -5714,7 +5874,11 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd)
{
this_hdr = &(elf_section_data(section)->this_hdr);
if (ELF_IS_SECTION_IN_SEGMENT_FILE (this_hdr, segment))
- section_count++;
+ {
+ if (!first_section)
+ first_section = section;
+ section_count++;
+ }
}
/* Allocate a segment map big enough to contain
@@ -5722,7 +5886,7 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd)
amt = sizeof (struct elf_segment_map);
if (section_count != 0)
amt += ((bfd_size_type) section_count - 1) * sizeof (asection *);
- map = bfd_alloc (obfd, amt);
+ map = bfd_zalloc (obfd, amt);
if (map == NULL)
return FALSE;
@@ -5734,6 +5898,9 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd)
map->p_flags_valid = 1;
map->p_paddr = segment->p_paddr;
map->p_paddr_valid = 1;
+ map->p_align = segment->p_align;
+ map->p_align_valid = 1;
+ map->p_vaddr_offset = 0;
/* Determine if this segment contains the ELF file header
and if it contains the program headers themselves. */
@@ -5753,17 +5920,26 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd)
phdr_included = TRUE;
}
+ if (!map->includes_phdrs && !map->includes_filehdr)
+ /* There is some other padding before the first section. */
+ map->p_vaddr_offset = ((first_section ? first_section->lma : 0)
+ - segment->p_paddr);
+
if (section_count != 0)
{
unsigned int isec = 0;
- for (section = ibfd->sections;
+ for (section = first_section;
section != NULL;
section = section->next)
{
this_hdr = &(elf_section_data(section)->this_hdr);
if (ELF_IS_SECTION_IN_SEGMENT_FILE (this_hdr, segment))
- map->sections[isec++] = section->output_section;
+ {
+ map->sections[isec++] = section->output_section;
+ if (isec == section_count)
+ break;
+ }
}
}
@@ -5791,8 +5967,8 @@ copy_private_bfd_data (bfd *ibfd, bfd *obfd)
if (ibfd->xvec == obfd->xvec)
{
- /* Check if any sections in the input BFD covered by ELF program
- header are changed. */
+ /* Check to see if any sections in the input BFD
+ covered by ELF program header have changed. */
Elf_Internal_Phdr *segment;
asection *section, *osec;
unsigned int i, num_segments;
@@ -5808,6 +5984,15 @@ copy_private_bfd_data (bfd *ibfd, bfd *obfd)
i < num_segments;
i++, segment++)
{
+ /* PR binutils/3535. The Solaris linker always sets the p_paddr
+ and p_memsz fields of special segments (DYNAMIC, INTERP) to 0
+ which severly confuses things, so always regenerate the segment
+ map in this case. */
+ if (segment->p_paddr == 0
+ && segment->p_memsz == 0
+ && (segment->p_type == PT_INTERP || segment->p_type == PT_DYNAMIC))
+ goto rewrite;
+
for (section = ibfd->sections;
section != NULL; section = section->next)
{
@@ -5835,7 +6020,7 @@ copy_private_bfd_data (bfd *ibfd, bfd *obfd)
}
}
- /* Check to see if any output section doesn't come from the
+ /* Check to see if any output section do not come from the
input BFD. */
for (section = obfd->sections; section != NULL;
section = section->next)
@@ -5870,16 +6055,22 @@ _bfd_elf_init_private_section_data (bfd *ibfd,
|| obfd->xvec->flavour != bfd_target_elf_flavour)
return TRUE;
- /* FIXME: What if the output ELF section type has been set to
- something different? */
- if (elf_section_type (osec) == SHT_NULL)
+ /* Don't copy the output ELF section type from input if the
+ output BFD section flags have been set to something different.
+ elf_fake_sections will set ELF section type based on BFD
+ section flags. */
+ if (elf_section_type (osec) == SHT_NULL
+ && (osec->flags == isec->flags || !osec->flags))
elf_section_type (osec) = elf_section_type (isec);
+ /* FIXME: Is this correct for all OS/PROC specific flags? */
+ elf_section_flags (osec) |= (elf_section_flags (isec)
+ & (SHF_MASKOS | SHF_MASKPROC));
+
/* Set things up for objcopy and relocatable link. The output
SHT_GROUP section will have its elf_next_in_group pointing back
to the input group members. Ignore linker created group section.
See elfNN_ia64_object_p in elfxx-ia64.c. */
-
if (need_group)
{
if (elf_sec_group (isec) == NULL
@@ -5944,6 +6135,8 @@ _bfd_elf_copy_private_section_data (bfd *ibfd,
bfd_boolean
_bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
{
+ asection *isec;
+
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
return TRUE;
@@ -5959,6 +6152,27 @@ _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
return FALSE;
}
+ /* _bfd_elf_copy_private_section_data copied over the SHF_GROUP flag
+ but this might be wrong if we deleted the group section. */
+ for (isec = ibfd->sections; isec != NULL; isec = isec->next)
+ if (elf_section_type (isec) == SHT_GROUP
+ && isec->output_section == NULL)
+ {
+ asection *first = elf_next_in_group (isec);
+ asection *s = first;
+ while (s != NULL)
+ {
+ if (s->output_section != NULL)
+ {
+ elf_section_flags (s->output_section) &= ~SHF_GROUP;
+ elf_group_name (s->output_section) = NULL;
+ }
+ s = elf_next_in_group (s);
+ if (s == first)
+ break;
+ }
+ }
+
return TRUE;
}
@@ -6231,6 +6445,10 @@ Unable to find equivalent output section for symbol '%s' from section '%s'"),
type = STT_FUNC;
else if ((flags & BSF_OBJECT) != 0)
type = STT_OBJECT;
+ else if ((flags & BSF_RELC) != 0)
+ type = STT_RELC;
+ else if ((flags & BSF_SRELC) != 0)
+ type = STT_SRELC;
else
type = STT_NOTYPE;
@@ -7029,13 +7247,31 @@ _bfd_elf_find_inliner_info (bfd *abfd,
}
int
-_bfd_elf_sizeof_headers (bfd *abfd, bfd_boolean reloc)
+_bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info)
{
- int ret;
+ const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+ int ret = bed->s->sizeof_ehdr;
+
+ if (!info->relocatable)
+ {
+ bfd_size_type phdr_size = elf_tdata (abfd)->program_header_size;
+
+ if (phdr_size == (bfd_size_type) -1)
+ {
+ struct elf_segment_map *m;
+
+ phdr_size = 0;
+ for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
+ phdr_size += bed->s->sizeof_phdr;
+
+ if (phdr_size == 0)
+ phdr_size = get_program_header_size (abfd, info);
+ }
+
+ elf_tdata (abfd)->program_header_size = phdr_size;
+ ret += phdr_size;
+ }
- ret = get_elf_backend_data (abfd)->s->sizeof_ehdr;
- if (! reloc)
- ret += get_program_header_size (abfd);
return ret;
}
@@ -7171,7 +7407,7 @@ _bfd_elf_close_and_cleanup (bfd *abfd)
{
if (bfd_get_format (abfd) == bfd_object)
{
- if (elf_shstrtab (abfd) != NULL)
+ if (elf_tdata (abfd) != NULL && elf_shstrtab (abfd) != NULL)
_bfd_elf_strtab_free (elf_shstrtab (abfd));
_bfd_dwarf2_cleanup_debug_info (abfd);
}
@@ -7225,13 +7461,12 @@ elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
if (bfd_get_section_by_name (abfd, name) != NULL)
return TRUE;
- sect2 = bfd_make_section (abfd, name);
+ sect2 = bfd_make_section_with_flags (abfd, name, sect->flags);
if (sect2 == NULL)
return FALSE;
sect2->size = sect->size;
sect2->filepos = sect->filepos;
- sect2->flags = sect->flags;
sect2->alignment_power = sect->alignment_power;
return TRUE;
}
@@ -7263,12 +7498,12 @@ _bfd_elfcore_make_pseudosection (bfd *abfd,
return FALSE;
memcpy (threaded_name, buf, len);
- sect = bfd_make_section_anyway (abfd, threaded_name);
+ sect = bfd_make_section_anyway_with_flags (abfd, threaded_name,
+ SEC_HAS_CONTENTS);
if (sect == NULL)
return FALSE;
sect->size = size;
sect->filepos = filepos;
- sect->flags = SEC_HAS_CONTENTS;
sect->alignment_power = 2;
return elfcore_maybe_make_sect (abfd, name, sect);
@@ -7547,7 +7782,7 @@ elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
return FALSE;
memcpy (name, buf, len);
- sect = bfd_make_section_anyway (abfd, name);
+ sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
if (sect == NULL)
return FALSE;
@@ -7562,7 +7797,6 @@ elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
#endif
- sect->flags = SEC_HAS_CONTENTS;
sect->alignment_power = 2;
if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
@@ -7577,7 +7811,7 @@ elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
return FALSE;
memcpy (name, buf, len);
- sect = bfd_make_section_anyway (abfd, name);
+ sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
if (sect == NULL)
return FALSE;
@@ -7592,7 +7826,6 @@ elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
#endif
- sect->flags = SEC_HAS_CONTENTS;
sect->alignment_power = 2;
return elfcore_maybe_make_sect (abfd, ".reg2", sect);
@@ -7633,7 +7866,7 @@ elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
memcpy (name, buf, len);
- sect = bfd_make_section_anyway (abfd, name);
+ sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
if (sect == NULL)
return FALSE;
@@ -7641,7 +7874,6 @@ elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
sect->filepos = (note->descpos
+ offsetof (struct win32_pstatus,
data.thread_info.thread_context));
- sect->flags = SEC_HAS_CONTENTS;
sect->alignment_power = 2;
if (pstatus.data.thread_info.is_active_thread)
@@ -7661,14 +7893,13 @@ elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
memcpy (name, buf, len);
- sect = bfd_make_section_anyway (abfd, name);
+ sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
if (sect == NULL)
return FALSE;
sect->size = note->descsz;
sect->filepos = note->descpos;
- sect->flags = SEC_HAS_CONTENTS;
sect->alignment_power = 2;
break;
@@ -7738,13 +7969,13 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
case NT_AUXV:
{
- asection *sect = bfd_make_section_anyway (abfd, ".auxv");
+ asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
+ SEC_HAS_CONTENTS);
if (sect == NULL)
return FALSE;
sect->size = note->descsz;
sect->filepos = note->descpos;
- sect->flags = SEC_HAS_CONTENTS;
sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
return TRUE;
@@ -7769,7 +8000,6 @@ elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
static bfd_boolean
elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
{
-
/* Signal number at offset 0x08. */
elf_tdata (abfd)->core_signal
= bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
@@ -7797,9 +8027,9 @@ elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
if (note->type == NT_NETBSDCORE_PROCINFO)
{
/* NetBSD-specific core "procinfo". Note that we expect to
- find this note before any of the others, which is fine,
- since the kernel writes this note out first when it
- creates a core file. */
+ find this note before any of the others, which is fine,
+ since the kernel writes this note out first when it
+ creates a core file. */
return elfcore_grok_netbsd_procinfo (abfd, note);
}
@@ -7815,44 +8045,44 @@ elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
switch (bfd_get_arch (abfd))
{
- /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
- PT_GETFPREGS == mach+2. */
+ /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
+ PT_GETFPREGS == mach+2. */
case bfd_arch_alpha:
case bfd_arch_sparc:
switch (note->type)
- {
- case NT_NETBSDCORE_FIRSTMACH+0:
- return elfcore_make_note_pseudosection (abfd, ".reg", note);
+ {
+ case NT_NETBSDCORE_FIRSTMACH+0:
+ return elfcore_make_note_pseudosection (abfd, ".reg", note);
- case NT_NETBSDCORE_FIRSTMACH+2:
- return elfcore_make_note_pseudosection (abfd, ".reg2", note);
+ case NT_NETBSDCORE_FIRSTMACH+2:
+ return elfcore_make_note_pseudosection (abfd, ".reg2", note);
- default:
- return TRUE;
- }
+ default:
+ return TRUE;
+ }
- /* On all other arch's, PT_GETREGS == mach+1 and
- PT_GETFPREGS == mach+3. */
+ /* On all other arch's, PT_GETREGS == mach+1 and
+ PT_GETFPREGS == mach+3. */
default:
switch (note->type)
- {
- case NT_NETBSDCORE_FIRSTMACH+1:
- return elfcore_make_note_pseudosection (abfd, ".reg", note);
+ {
+ case NT_NETBSDCORE_FIRSTMACH+1:
+ return elfcore_make_note_pseudosection (abfd, ".reg", note);
- case NT_NETBSDCORE_FIRSTMACH+3:
- return elfcore_make_note_pseudosection (abfd, ".reg2", note);
+ case NT_NETBSDCORE_FIRSTMACH+3:
+ return elfcore_make_note_pseudosection (abfd, ".reg2", note);
- default:
- return TRUE;
- }
+ default:
+ return TRUE;
+ }
}
/* NOTREACHED */
}
static bfd_boolean
-elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, pid_t *tid)
+elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
{
void *ddata = note->descdata;
char buf[100];
@@ -7884,20 +8114,19 @@ elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, pid_t *tid)
elf_tdata (abfd)->core_lwpid = *tid;
/* Make a ".qnx_core_status/%d" section. */
- sprintf (buf, ".qnx_core_status/%ld", (long) *tid);
+ sprintf (buf, ".qnx_core_status/%ld", *tid);
name = bfd_alloc (abfd, strlen (buf) + 1);
if (name == NULL)
return FALSE;
strcpy (name, buf);
- sect = bfd_make_section_anyway (abfd, name);
+ sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
if (sect == NULL)
return FALSE;
sect->size = note->descsz;
sect->filepos = note->descpos;
- sect->flags = SEC_HAS_CONTENTS;
sect->alignment_power = 2;
return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
@@ -7906,7 +8135,7 @@ elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, pid_t *tid)
static bfd_boolean
elfcore_grok_nto_regs (bfd *abfd,
Elf_Internal_Note *note,
- pid_t tid,
+ long tid,
char *base)
{
char buf[100];
@@ -7914,20 +8143,19 @@ elfcore_grok_nto_regs (bfd *abfd,
asection *sect;
/* Make a "(base)/%d" section. */
- sprintf (buf, "%s/%ld", base, (long) tid);
+ sprintf (buf, "%s/%ld", base, tid);
name = bfd_alloc (abfd, strlen (buf) + 1);
if (name == NULL)
return FALSE;
strcpy (name, buf);
- sect = bfd_make_section_anyway (abfd, name);
+ sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
if (sect == NULL)
return FALSE;
sect->size = note->descsz;
sect->filepos = note->descpos;
- sect->flags = SEC_HAS_CONTENTS;
sect->alignment_power = 2;
/* This is the current thread. */
@@ -7948,7 +8176,7 @@ elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
/* Every GREG section has a STATUS section before it. Store the
tid from the previous call to pass down to the next gregs
function. */
- static pid_t tid = 1;
+ static long tid = 1;
switch (note->type)
{
@@ -7968,45 +8196,42 @@ elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
/* Function: elfcore_write_note
Inputs:
- buffer to hold note
+ buffer to hold note, and current size of buffer
name of note
type of note
data for note
size of data for note
+ Writes note to end of buffer. ELF64 notes are written exactly as
+ for ELF32, despite the current (as of 2006) ELF gabi specifying
+ that they ought to have 8-byte namesz and descsz field, and have
+ 8-byte alignment. Other writers, eg. Linux kernel, do the same.
+
Return:
- End of buffer containing note. */
+ Pointer to realloc'd buffer, *BUFSIZ updated. */
char *
-elfcore_write_note (bfd *abfd,
+elfcore_write_note (bfd *abfd,
char *buf,
- int *bufsiz,
+ int *bufsiz,
const char *name,
- int type,
+ int type,
const void *input,
- int size)
+ int size)
{
Elf_External_Note *xnp;
size_t namesz;
- size_t pad;
size_t newspace;
- char *p, *dest;
+ char *dest;
namesz = 0;
- pad = 0;
if (name != NULL)
- {
- const struct elf_backend_data *bed;
-
- namesz = strlen (name) + 1;
- bed = get_elf_backend_data (abfd);
- pad = -namesz & ((1 << bed->s->log_file_align) - 1);
- }
+ namesz = strlen (name) + 1;
- newspace = 12 + namesz + pad + size;
+ newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4);
- p = realloc (buf, *bufsiz + newspace);
- dest = p + *bufsiz;
+ buf = realloc (buf, *bufsiz + newspace);
+ dest = buf + *bufsiz;
*bufsiz += newspace;
xnp = (Elf_External_Note *) dest;
H_PUT_32 (abfd, namesz, xnp->namesz);
@@ -8017,14 +8242,20 @@ elfcore_write_note (bfd *abfd,
{
memcpy (dest, name, namesz);
dest += namesz;
- while (pad != 0)
+ while (namesz & 3)
{
*dest++ = '\0';
- --pad;
+ ++namesz;
}
}
memcpy (dest, input, size);
- return p;
+ dest += size;
+ while (size & 3)
+ {
+ *dest++ = '\0';
+ ++size;
+ }
+ return buf;
}
#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
@@ -8035,22 +8266,52 @@ elfcore_write_prpsinfo (bfd *abfd,
const char *fname,
const char *psargs)
{
- int note_type;
- char *note_name = "CORE";
+ const char *note_name = "CORE";
+ const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+
+ if (bed->elf_backend_write_core_note != NULL)
+ {
+ char *ret;
+ ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
+ NT_PRPSINFO, fname, psargs);
+ if (ret != NULL)
+ return ret;
+ }
+
+#if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
+ if (bed->s->elfclass == ELFCLASS32)
+ {
+#if defined (HAVE_PSINFO32_T)
+ psinfo32_t data;
+ int note_type = NT_PSINFO;
+#else
+ prpsinfo32_t data;
+ int note_type = NT_PRPSINFO;
+#endif
+ memset (&data, 0, sizeof (data));
+ strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
+ strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
+ return elfcore_write_note (abfd, buf, bufsiz,
+ note_name, note_type, &data, sizeof (data));
+ }
+ else
+#endif
+ {
#if defined (HAVE_PSINFO_T)
- psinfo_t data;
- note_type = NT_PSINFO;
+ psinfo_t data;
+ int note_type = NT_PSINFO;
#else
- prpsinfo_t data;
- note_type = NT_PRPSINFO;
+ prpsinfo_t data;
+ int note_type = NT_PRPSINFO;
#endif
- memset (&data, 0, sizeof (data));
- strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
- strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
- return elfcore_write_note (abfd, buf, bufsiz,
- note_name, note_type, &data, sizeof (data));
+ memset (&data, 0, sizeof (data));
+ strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
+ strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
+ return elfcore_write_note (abfd, buf, bufsiz,
+ note_name, note_type, &data, sizeof (data));
+ }
}
#endif /* PSINFO_T or PRPSINFO_T */
@@ -8063,15 +8324,43 @@ elfcore_write_prstatus (bfd *abfd,
int cursig,
const void *gregs)
{
- prstatus_t prstat;
- char *note_name = "CORE";
+ const char *note_name = "CORE";
+ const struct elf_backend_data *bed = get_elf_backend_data (abfd);
- memset (&prstat, 0, sizeof (prstat));
- prstat.pr_pid = pid;
- prstat.pr_cursig = cursig;
- memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
- return elfcore_write_note (abfd, buf, bufsiz,
- note_name, NT_PRSTATUS, &prstat, sizeof (prstat));
+ if (bed->elf_backend_write_core_note != NULL)
+ {
+ char *ret;
+ ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
+ NT_PRSTATUS,
+ pid, cursig, gregs);
+ if (ret != NULL)
+ return ret;
+ }
+
+#if defined (HAVE_PRSTATUS32_T)
+ if (bed->s->elfclass == ELFCLASS32)
+ {
+ prstatus32_t prstat;
+
+ memset (&prstat, 0, sizeof (prstat));
+ prstat.pr_pid = pid;
+ prstat.pr_cursig = cursig;
+ memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
+ return elfcore_write_note (abfd, buf, bufsiz, note_name,
+ NT_PRSTATUS, &prstat, sizeof (prstat));
+ }
+ else
+#endif
+ {
+ prstatus_t prstat;
+
+ memset (&prstat, 0, sizeof (prstat));
+ prstat.pr_pid = pid;
+ prstat.pr_cursig = cursig;
+ memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
+ return elfcore_write_note (abfd, buf, bufsiz, note_name,
+ NT_PRSTATUS, &prstat, sizeof (prstat));
+ }
}
#endif /* HAVE_PRSTATUS_T */
@@ -8085,7 +8374,7 @@ elfcore_write_lwpstatus (bfd *abfd,
const void *gregs)
{
lwpstatus_t lwpstat;
- char *note_name = "CORE";
+ const char *note_name = "CORE";
memset (&lwpstat, 0, sizeof (lwpstat));
lwpstat.pr_lwpid = pid >> 16;
@@ -8115,14 +8404,31 @@ elfcore_write_pstatus (bfd *abfd,
int cursig ATTRIBUTE_UNUSED,
const void *gregs ATTRIBUTE_UNUSED)
{
- pstatus_t pstat;
- char *note_name = "CORE";
+ const char *note_name = "CORE";
+#if defined (HAVE_PSTATUS32_T)
+ const struct elf_backend_data *bed = get_elf_backend_data (abfd);
- memset (&pstat, 0, sizeof (pstat));
- pstat.pr_pid = pid & 0xffff;
- buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
- NT_PSTATUS, &pstat, sizeof (pstat));
- return buf;
+ if (bed->s->elfclass == ELFCLASS32)
+ {
+ pstatus32_t pstat;
+
+ memset (&pstat, 0, sizeof (pstat));
+ pstat.pr_pid = pid & 0xffff;
+ buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
+ NT_PSTATUS, &pstat, sizeof (pstat));
+ return buf;
+ }
+ else
+#endif
+ {
+ pstatus_t pstat;
+
+ memset (&pstat, 0, sizeof (pstat));
+ pstat.pr_pid = pid & 0xffff;
+ buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
+ NT_PSTATUS, &pstat, sizeof (pstat));
+ return buf;
+ }
}
#endif /* HAVE_PSTATUS_T */
@@ -8133,7 +8439,7 @@ elfcore_write_prfpreg (bfd *abfd,
const void *fpregs,
int size)
{
- char *note_name = "CORE";
+ const char *note_name = "CORE";
return elfcore_write_note (abfd, buf, bufsiz,
note_name, NT_FPREGSET, fpregs, size);
}
@@ -8189,21 +8495,21 @@ elfcore_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size)
in.descdata = in.namedata + BFD_ALIGN (in.namesz, 4);
in.descpos = offset + (in.descdata - buf);
- if (strncmp (in.namedata, "NetBSD-CORE", 11) == 0)
- {
- if (! elfcore_grok_netbsd_note (abfd, &in))
- goto error;
- }
- else if (strncmp (in.namedata, "QNX", 3) == 0)
+ if (CONST_STRNEQ (in.namedata, "NetBSD-CORE"))
+ {
+ if (! elfcore_grok_netbsd_note (abfd, &in))
+ goto error;
+ }
+ else if (CONST_STRNEQ (in.namedata, "QNX"))
{
if (! elfcore_grok_nto_note (abfd, &in))
goto error;
}
else
- {
- if (! elfcore_grok_note (abfd, &in))
- goto error;
- }
+ {
+ if (! elfcore_grok_note (abfd, &in))
+ goto error;
+ }
p = in.descdata + BFD_ALIGN (in.descsz, 4);
}
@@ -8509,39 +8815,41 @@ _bfd_elf_get_synthetic_symtab (bfd *abfd,
return n;
}
-/* Sort symbol by binding and section. We want to put definitions
- sorted by section at the beginning. */
-
-static int
-elf_sort_elf_symbol (const void *arg1, const void *arg2)
+struct elf_symbuf_symbol
{
- const Elf_Internal_Sym *s1;
- const Elf_Internal_Sym *s2;
- int shndx;
-
- /* Make sure that undefined symbols are at the end. */
- s1 = (const Elf_Internal_Sym *) arg1;
- if (s1->st_shndx == SHN_UNDEF)
- return 1;
- s2 = (const Elf_Internal_Sym *) arg2;
- if (s2->st_shndx == SHN_UNDEF)
- return -1;
-
- /* Sorted by section index. */
- shndx = s1->st_shndx - s2->st_shndx;
- if (shndx != 0)
- return shndx;
+ unsigned long st_name; /* Symbol name, index in string tbl */
+ unsigned char st_info; /* Type and binding attributes */
+ unsigned char st_other; /* Visibilty, and target specific */
+};
- /* Sorted by binding. */
- return ELF_ST_BIND (s1->st_info) - ELF_ST_BIND (s2->st_info);
-}
+struct elf_symbuf_head
+{
+ struct elf_symbuf_symbol *ssym;
+ bfd_size_type count;
+ unsigned int st_shndx;
+};
struct elf_symbol
{
- Elf_Internal_Sym *sym;
+ union
+ {
+ Elf_Internal_Sym *isym;
+ struct elf_symbuf_symbol *ssym;
+ } u;
const char *name;
};
+/* Sort references to symbols by ascending section number. */
+
+static int
+elf_sort_elf_symbol (const void *arg1, const void *arg2)
+{
+ const Elf_Internal_Sym *s1 = *(const Elf_Internal_Sym **) arg1;
+ const Elf_Internal_Sym *s2 = *(const Elf_Internal_Sym **) arg2;
+
+ return s1->st_shndx - s2->st_shndx;
+}
+
static int
elf_sym_name_compare (const void *arg1, const void *arg2)
{
@@ -8550,20 +8858,79 @@ elf_sym_name_compare (const void *arg1, const void *arg2)
return strcmp (s1->name, s2->name);
}
+static struct elf_symbuf_head *
+elf_create_symbuf (bfd_size_type symcount, Elf_Internal_Sym *isymbuf)
+{
+ Elf_Internal_Sym **ind, **indbufend, **indbuf
+ = bfd_malloc2 (symcount, sizeof (*indbuf));
+ struct elf_symbuf_symbol *ssym;
+ struct elf_symbuf_head *ssymbuf, *ssymhead;
+ bfd_size_type i, shndx_count;
+
+ if (indbuf == NULL)
+ return NULL;
+
+ for (ind = indbuf, i = 0; i < symcount; i++)
+ if (isymbuf[i].st_shndx != SHN_UNDEF)
+ *ind++ = &isymbuf[i];
+ indbufend = ind;
+
+ qsort (indbuf, indbufend - indbuf, sizeof (Elf_Internal_Sym *),
+ elf_sort_elf_symbol);
+
+ shndx_count = 0;
+ if (indbufend > indbuf)
+ for (ind = indbuf, shndx_count++; ind < indbufend - 1; ind++)
+ if (ind[0]->st_shndx != ind[1]->st_shndx)
+ shndx_count++;
+
+ ssymbuf = bfd_malloc ((shndx_count + 1) * sizeof (*ssymbuf)
+ + (indbufend - indbuf) * sizeof (*ssymbuf));
+ if (ssymbuf == NULL)
+ {
+ free (indbuf);
+ return NULL;
+ }
+
+ ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count);
+ ssymbuf->ssym = NULL;
+ ssymbuf->count = shndx_count;
+ ssymbuf->st_shndx = 0;
+ for (ssymhead = ssymbuf, ind = indbuf; ind < indbufend; ssym++, ind++)
+ {
+ if (ind == indbuf || ssymhead->st_shndx != (*ind)->st_shndx)
+ {
+ ssymhead++;
+ ssymhead->ssym = ssym;
+ ssymhead->count = 0;
+ ssymhead->st_shndx = (*ind)->st_shndx;
+ }
+ ssym->st_name = (*ind)->st_name;
+ ssym->st_info = (*ind)->st_info;
+ ssym->st_other = (*ind)->st_other;
+ ssymhead->count++;
+ }
+ BFD_ASSERT ((bfd_size_type) (ssymhead - ssymbuf) == shndx_count);
+
+ free (indbuf);
+ return ssymbuf;
+}
+
/* Check if 2 sections define the same set of local and global
symbols. */
bfd_boolean
-bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2)
+bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2,
+ struct bfd_link_info *info)
{
bfd *bfd1, *bfd2;
const struct elf_backend_data *bed1, *bed2;
Elf_Internal_Shdr *hdr1, *hdr2;
bfd_size_type symcount1, symcount2;
Elf_Internal_Sym *isymbuf1, *isymbuf2;
- Elf_Internal_Sym *isymstart1 = NULL, *isymstart2 = NULL, *isym;
- Elf_Internal_Sym *isymend;
- struct elf_symbol *symp, *symtable1 = NULL, *symtable2 = NULL;
+ struct elf_symbuf_head *ssymbuf1, *ssymbuf2;
+ Elf_Internal_Sym *isym, *isymend;
+ struct elf_symbol *symtable1 = NULL, *symtable2 = NULL;
bfd_size_type count1, count2, i;
int shndx1, shndx2;
bfd_boolean result;
@@ -8573,10 +8940,8 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2)
/* If both are .gnu.linkonce sections, they have to have the same
section name. */
- if (strncmp (sec1->name, ".gnu.linkonce",
- sizeof ".gnu.linkonce" - 1) == 0
- && strncmp (sec2->name, ".gnu.linkonce",
- sizeof ".gnu.linkonce" - 1) == 0)
+ if (CONST_STRNEQ (sec1->name, ".gnu.linkonce")
+ && CONST_STRNEQ (sec2->name, ".gnu.linkonce"))
return strcmp (sec1->name + sizeof ".gnu.linkonce",
sec2->name + sizeof ".gnu.linkonce") == 0;
@@ -8612,84 +8977,155 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2)
if (symcount1 == 0 || symcount2 == 0)
return FALSE;
- isymbuf1 = bfd_elf_get_elf_syms (bfd1, hdr1, symcount1, 0,
- NULL, NULL, NULL);
- isymbuf2 = bfd_elf_get_elf_syms (bfd2, hdr2, symcount2, 0,
- NULL, NULL, NULL);
-
result = FALSE;
- if (isymbuf1 == NULL || isymbuf2 == NULL)
- goto done;
+ isymbuf1 = NULL;
+ isymbuf2 = NULL;
+ ssymbuf1 = elf_tdata (bfd1)->symbuf;
+ ssymbuf2 = elf_tdata (bfd2)->symbuf;
- /* Sort symbols by binding and section. Global definitions are at
- the beginning. */
- qsort (isymbuf1, symcount1, sizeof (Elf_Internal_Sym),
- elf_sort_elf_symbol);
- qsort (isymbuf2, symcount2, sizeof (Elf_Internal_Sym),
- elf_sort_elf_symbol);
+ if (ssymbuf1 == NULL)
+ {
+ isymbuf1 = bfd_elf_get_elf_syms (bfd1, hdr1, symcount1, 0,
+ NULL, NULL, NULL);
+ if (isymbuf1 == NULL)
+ goto done;
- /* Count definitions in the section. */
- count1 = 0;
- for (isym = isymbuf1, isymend = isym + symcount1;
- isym < isymend; isym++)
+ if (!info->reduce_memory_overheads)
+ elf_tdata (bfd1)->symbuf = ssymbuf1
+ = elf_create_symbuf (symcount1, isymbuf1);
+ }
+
+ if (ssymbuf1 == NULL || ssymbuf2 == NULL)
{
- if (isym->st_shndx == (unsigned int) shndx1)
- {
- if (count1 == 0)
- isymstart1 = isym;
- count1++;
- }
+ isymbuf2 = bfd_elf_get_elf_syms (bfd2, hdr2, symcount2, 0,
+ NULL, NULL, NULL);
+ if (isymbuf2 == NULL)
+ goto done;
- if (count1 && isym->st_shndx != (unsigned int) shndx1)
- break;
+ if (ssymbuf1 != NULL && !info->reduce_memory_overheads)
+ elf_tdata (bfd2)->symbuf = ssymbuf2
+ = elf_create_symbuf (symcount2, isymbuf2);
}
- count2 = 0;
- for (isym = isymbuf2, isymend = isym + symcount2;
- isym < isymend; isym++)
+ if (ssymbuf1 != NULL && ssymbuf2 != NULL)
{
- if (isym->st_shndx == (unsigned int) shndx2)
+ /* Optimized faster version. */
+ bfd_size_type lo, hi, mid;
+ struct elf_symbol *symp;
+ struct elf_symbuf_symbol *ssym, *ssymend;
+
+ lo = 0;
+ hi = ssymbuf1->count;
+ ssymbuf1++;
+ count1 = 0;
+ while (lo < hi)
{
- if (count2 == 0)
- isymstart2 = isym;
- count2++;
+ mid = (lo + hi) / 2;
+ if ((unsigned int) shndx1 < ssymbuf1[mid].st_shndx)
+ hi = mid;
+ else if ((unsigned int) shndx1 > ssymbuf1[mid].st_shndx)
+ lo = mid + 1;
+ else
+ {
+ count1 = ssymbuf1[mid].count;
+ ssymbuf1 += mid;
+ break;
+ }
}
- if (count2 && isym->st_shndx != (unsigned int) shndx2)
- break;
+ lo = 0;
+ hi = ssymbuf2->count;
+ ssymbuf2++;
+ count2 = 0;
+ while (lo < hi)
+ {
+ mid = (lo + hi) / 2;
+ if ((unsigned int) shndx2 < ssymbuf2[mid].st_shndx)
+ hi = mid;
+ else if ((unsigned int) shndx2 > ssymbuf2[mid].st_shndx)
+ lo = mid + 1;
+ else
+ {
+ count2 = ssymbuf2[mid].count;
+ ssymbuf2 += mid;
+ break;
+ }
+ }
+
+ if (count1 == 0 || count2 == 0 || count1 != count2)
+ goto done;
+
+ symtable1 = bfd_malloc (count1 * sizeof (struct elf_symbol));
+ symtable2 = bfd_malloc (count2 * sizeof (struct elf_symbol));
+ if (symtable1 == NULL || symtable2 == NULL)
+ goto done;
+
+ symp = symtable1;
+ for (ssym = ssymbuf1->ssym, ssymend = ssym + count1;
+ ssym < ssymend; ssym++, symp++)
+ {
+ symp->u.ssym = ssym;
+ symp->name = bfd_elf_string_from_elf_section (bfd1,
+ hdr1->sh_link,
+ ssym->st_name);
+ }
+
+ symp = symtable2;
+ for (ssym = ssymbuf2->ssym, ssymend = ssym + count2;
+ ssym < ssymend; ssym++, symp++)
+ {
+ symp->u.ssym = ssym;
+ symp->name = bfd_elf_string_from_elf_section (bfd2,
+ hdr2->sh_link,
+ ssym->st_name);
+ }
+
+ /* Sort symbol by name. */
+ qsort (symtable1, count1, sizeof (struct elf_symbol),
+ elf_sym_name_compare);
+ qsort (symtable2, count1, sizeof (struct elf_symbol),
+ elf_sym_name_compare);
+
+ for (i = 0; i < count1; i++)
+ /* Two symbols must have the same binding, type and name. */
+ if (symtable1 [i].u.ssym->st_info != symtable2 [i].u.ssym->st_info
+ || symtable1 [i].u.ssym->st_other != symtable2 [i].u.ssym->st_other
+ || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
+ goto done;
+
+ result = TRUE;
+ goto done;
}
- if (count1 == 0 || count2 == 0 || count1 != count2)
+ symtable1 = bfd_malloc (symcount1 * sizeof (struct elf_symbol));
+ symtable2 = bfd_malloc (symcount2 * sizeof (struct elf_symbol));
+ if (symtable1 == NULL || symtable2 == NULL)
goto done;
- symtable1 = bfd_malloc (count1 * sizeof (struct elf_symbol));
- symtable2 = bfd_malloc (count1 * sizeof (struct elf_symbol));
+ /* Count definitions in the section. */
+ count1 = 0;
+ for (isym = isymbuf1, isymend = isym + symcount1; isym < isymend; isym++)
+ if (isym->st_shndx == (unsigned int) shndx1)
+ symtable1[count1++].u.isym = isym;
- if (symtable1 == NULL || symtable2 == NULL)
+ count2 = 0;
+ for (isym = isymbuf2, isymend = isym + symcount2; isym < isymend; isym++)
+ if (isym->st_shndx == (unsigned int) shndx2)
+ symtable2[count2++].u.isym = isym;
+
+ if (count1 == 0 || count2 == 0 || count1 != count2)
goto done;
- symp = symtable1;
- for (isym = isymstart1, isymend = isym + count1;
- isym < isymend; isym++)
- {
- symp->sym = isym;
- symp->name = bfd_elf_string_from_elf_section (bfd1,
- hdr1->sh_link,
- isym->st_name);
- symp++;
- }
-
- symp = symtable2;
- for (isym = isymstart2, isymend = isym + count1;
- isym < isymend; isym++)
- {
- symp->sym = isym;
- symp->name = bfd_elf_string_from_elf_section (bfd2,
- hdr2->sh_link,
- isym->st_name);
- symp++;
- }
-
+ for (i = 0; i < count1; i++)
+ symtable1[i].name
+ = bfd_elf_string_from_elf_section (bfd1, hdr1->sh_link,
+ symtable1[i].u.isym->st_name);
+
+ for (i = 0; i < count2; i++)
+ symtable2[i].name
+ = bfd_elf_string_from_elf_section (bfd2, hdr2->sh_link,
+ symtable2[i].u.isym->st_name);
+
/* Sort symbol by name. */
qsort (symtable1, count1, sizeof (struct elf_symbol),
elf_sym_name_compare);
@@ -8698,8 +9134,8 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2)
for (i = 0; i < count1; i++)
/* Two symbols must have the same binding, type and name. */
- if (symtable1 [i].sym->st_info != symtable2 [i].sym->st_info
- || symtable1 [i].sym->st_other != symtable2 [i].sym->st_other
+ if (symtable1 [i].u.isym->st_info != symtable2 [i].u.isym->st_info
+ || symtable1 [i].u.isym->st_other != symtable2 [i].u.isym->st_other
|| strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
goto done;
@@ -8721,8 +9157,7 @@ done:
/* It is only used by x86-64 so far. */
asection _bfd_elf_large_com_section
= BFD_FAKE_SECTION (_bfd_elf_large_com_section,
- SEC_IS_COMMON, NULL, NULL, "LARGE_COMMON",
- 0);
+ SEC_IS_COMMON, NULL, "LARGE_COMMON", 0);
/* Return TRUE if 2 section types are compatible. */
@@ -8738,3 +9173,25 @@ _bfd_elf_match_sections_by_type (bfd *abfd, const asection *asec,
return elf_section_type (asec) == elf_section_type (bsec);
}
+
+void
+_bfd_elf_set_osabi (bfd * abfd,
+ struct bfd_link_info * link_info ATTRIBUTE_UNUSED)
+{
+ Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form. */
+
+ i_ehdrp = elf_elfheader (abfd);
+
+ i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
+}
+
+
+/* Return TRUE for ELF symbol types that represent functions.
+ This is the default version of this function, which is sufficient for
+ most targets. It returns true if TYPE is STT_FUNC. */
+
+bfd_boolean
+_bfd_elf_is_function_type (unsigned int type)
+{
+ return (type == STT_FUNC);
+}
diff --git a/bfd/elf32-am33lin.c b/bfd/elf32-am33lin.c
index 81f1975f3fee..781e9526bb9e 100644
--- a/bfd/elf32-am33lin.c
+++ b/bfd/elf32-am33lin.c
@@ -1,5 +1,5 @@
/* Matsushita AM33/2.0 support for 32-bit GNU/Linux ELF
- Copyright 2003, 2005
+ Copyright 2003, 2005, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "elf-bfd.h"
#include "elf/mn10300.h"
diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c
index a6011bdb32dd..58d63010783f 100644
--- a/bfd/elf32-arc.c
+++ b/bfd/elf32-arc.c
@@ -1,5 +1,5 @@
/* ARC-specific support for 32-bit ELF
- Copyright 1994, 1995, 1997, 1999, 2001, 2002, 2005
+ Copyright 1994, 1995, 1997, 1999, 2001, 2002, 2005, 2007
Free Software Foundation, Inc.
Contributed by Doug Evans (dje@cygnus.com).
@@ -20,8 +20,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/arc.h"
@@ -147,6 +147,22 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (elf_arc_howto_table) / sizeof (elf_arc_howto_table[0]);
+ i++)
+ if (elf_arc_howto_table[i].name != NULL
+ && strcasecmp (elf_arc_howto_table[i].name, r_name) == 0)
+ return &elf_arc_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an ARC ELF reloc. */
static void
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index f64f5d6feee5..85ed8d7d6fb1 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -1,5 +1,5 @@
/* 32-bit ELF support for ARM
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libiberty.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -62,7 +62,7 @@
#define ARM_ELF_ABI_VERSION 0
#define ARM_ELF_OS_ABI_VERSION ELFOSABI_ARM
-static const struct elf_backend_data elf32_arm_vxworks_bed;
+static struct elf_backend_data elf32_arm_vxworks_bed;
/* Note: code such as elf32_arm_reloc_type_lookup expect to use e.g.
R_ARM_PC24 as an index into this, and find the R_ARM_PC24 HOWTO
@@ -130,19 +130,19 @@ static reloc_howto_type elf32_arm_howto_table_1[] =
TRUE), /* pcrel_offset */
/* 8 bit absolute - R_ARM_LDR_PC_G0 in AAELF */
- HOWTO (R_ARM_PC13, /* type */
+ HOWTO (R_ARM_LDR_PC_G0, /* type */
0, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- FALSE, /* pc_relative */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
0, /* bitpos */
- complain_overflow_bitfield,/* complain_on_overflow */
+ complain_overflow_dont,/* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
- "R_ARM_PC13", /* name */
+ "R_ARM_LDR_PC_G0", /* name */
FALSE, /* partial_inplace */
- 0x000000ff, /* src_mask */
- 0x000000ff, /* dst_mask */
- FALSE), /* pcrel_offset */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
/* 16 bit absolute */
HOWTO (R_ARM_ABS16, /* type */
@@ -217,11 +217,10 @@ static reloc_howto_type elf32_arm_howto_table_1[] =
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
- /* FIXME: Has two more bits of offset in Thumb32. */
HOWTO (R_ARM_THM_CALL, /* type */
1, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
- 23, /* bitsize */
+ 25, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed,/* complain_on_overflow */
@@ -835,12 +834,12 @@ static reloc_howto_type elf32_arm_howto_table_1[] =
13, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
- complain_overflow_signed,/* complain_on_overflow */
+ complain_overflow_dont,/* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_ARM_THM_ALU_PREL_11_0",/* name */
FALSE, /* partial_inplace */
- 0x040070ff, /* src_mask */
- 0x040070ff, /* dst_mask */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
TRUE), /* pcrel_offset */
HOWTO (R_ARM_THM_PC12, /* type */
@@ -849,12 +848,12 @@ static reloc_howto_type elf32_arm_howto_table_1[] =
13, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
- complain_overflow_signed,/* complain_on_overflow */
+ complain_overflow_dont,/* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_ARM_THM_PC12", /* name */
FALSE, /* partial_inplace */
- 0x040070ff, /* src_mask */
- 0x040070ff, /* dst_mask */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
TRUE), /* pcrel_offset */
HOWTO (R_ARM_ABS32_NOI, /* type */
@@ -884,13 +883,389 @@ static reloc_howto_type elf32_arm_howto_table_1[] =
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
-};
-/* Relocations 57 .. 83 are the "group relocations" which we do not
- support. */
+ /* Group relocations. */
+
+ HOWTO (R_ARM_ALU_PC_G0_NC, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_ALU_PC_G0_NC", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_ALU_PC_G0, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_ALU_PC_G0", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_ALU_PC_G1_NC, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_ALU_PC_G1_NC", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_ALU_PC_G1, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_ALU_PC_G1", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_ALU_PC_G2, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_ALU_PC_G2", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDR_PC_G1, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDR_PC_G1", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDR_PC_G2, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDR_PC_G2", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDRS_PC_G0, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDRS_PC_G0", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDRS_PC_G1, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDRS_PC_G1", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDRS_PC_G2, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDRS_PC_G2", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDC_PC_G0, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDC_PC_G0", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDC_PC_G1, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDC_PC_G1", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDC_PC_G2, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDC_PC_G2", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_ALU_SB_G0_NC, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_ALU_SB_G0_NC", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_ALU_SB_G0, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_ALU_SB_G0", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_ALU_SB_G1_NC, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_ALU_SB_G1_NC", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_ALU_SB_G1, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_ALU_SB_G1", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_ALU_SB_G2, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_ALU_SB_G2", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDR_SB_G0, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDR_SB_G0", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDR_SB_G1, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDR_SB_G1", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDR_SB_G2, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDR_SB_G2", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDRS_SB_G0, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDRS_SB_G0", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDRS_SB_G1, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDRS_SB_G1", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDRS_SB_G2, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDRS_SB_G2", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDC_SB_G0, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDC_SB_G0", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDC_SB_G1, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDC_SB_G1", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_ARM_LDC_SB_G2, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_ARM_LDC_SB_G2", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* End of group relocations. */
-static reloc_howto_type elf32_arm_howto_table_2[] =
-{
HOWTO (R_ARM_MOVW_BREL_NC, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@@ -1230,7 +1605,7 @@ static reloc_howto_type elf32_arm_howto_table_2[] =
249-255 extended, currently unused, relocations: */
-static reloc_howto_type elf32_arm_howto_table_3[4] =
+static reloc_howto_type elf32_arm_howto_table_2[4] =
{
HOWTO (R_ARM_RREL32, /* type */
0, /* rightshift */
@@ -1295,13 +1670,9 @@ elf32_arm_howto_from_type (unsigned int r_type)
if (r_type < NUM_ELEM (elf32_arm_howto_table_1))
return &elf32_arm_howto_table_1[r_type];
- if (r_type >= R_ARM_MOVW_BREL_NC
- && r_type < R_ARM_MOVW_BREL_NC + NUM_ELEM (elf32_arm_howto_table_2))
- return &elf32_arm_howto_table_2[r_type - R_ARM_MOVW_BREL_NC];
-
if (r_type >= R_ARM_RREL32
&& r_type < R_ARM_RREL32 + NUM_ELEM (elf32_arm_howto_table_2))
- return &elf32_arm_howto_table_3[r_type - R_ARM_RREL32];
+ return &elf32_arm_howto_table_2[r_type - R_ARM_RREL32];
return NULL;
}
@@ -1366,6 +1737,42 @@ static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] =
{BFD_RELOC_ARM_TLS_LE32, R_ARM_TLS_LE32},
{BFD_RELOC_VTABLE_INHERIT, R_ARM_GNU_VTINHERIT},
{BFD_RELOC_VTABLE_ENTRY, R_ARM_GNU_VTENTRY},
+ {BFD_RELOC_ARM_MOVW, R_ARM_MOVW_ABS_NC},
+ {BFD_RELOC_ARM_MOVT, R_ARM_MOVT_ABS},
+ {BFD_RELOC_ARM_MOVW_PCREL, R_ARM_MOVW_PREL_NC},
+ {BFD_RELOC_ARM_MOVT_PCREL, R_ARM_MOVT_PREL},
+ {BFD_RELOC_ARM_THUMB_MOVW, R_ARM_THM_MOVW_ABS_NC},
+ {BFD_RELOC_ARM_THUMB_MOVT, R_ARM_THM_MOVT_ABS},
+ {BFD_RELOC_ARM_THUMB_MOVW_PCREL, R_ARM_THM_MOVW_PREL_NC},
+ {BFD_RELOC_ARM_THUMB_MOVT_PCREL, R_ARM_THM_MOVT_PREL},
+ {BFD_RELOC_ARM_ALU_PC_G0_NC, R_ARM_ALU_PC_G0_NC},
+ {BFD_RELOC_ARM_ALU_PC_G0, R_ARM_ALU_PC_G0},
+ {BFD_RELOC_ARM_ALU_PC_G1_NC, R_ARM_ALU_PC_G1_NC},
+ {BFD_RELOC_ARM_ALU_PC_G1, R_ARM_ALU_PC_G1},
+ {BFD_RELOC_ARM_ALU_PC_G2, R_ARM_ALU_PC_G2},
+ {BFD_RELOC_ARM_LDR_PC_G0, R_ARM_LDR_PC_G0},
+ {BFD_RELOC_ARM_LDR_PC_G1, R_ARM_LDR_PC_G1},
+ {BFD_RELOC_ARM_LDR_PC_G2, R_ARM_LDR_PC_G2},
+ {BFD_RELOC_ARM_LDRS_PC_G0, R_ARM_LDRS_PC_G0},
+ {BFD_RELOC_ARM_LDRS_PC_G1, R_ARM_LDRS_PC_G1},
+ {BFD_RELOC_ARM_LDRS_PC_G2, R_ARM_LDRS_PC_G2},
+ {BFD_RELOC_ARM_LDC_PC_G0, R_ARM_LDC_PC_G0},
+ {BFD_RELOC_ARM_LDC_PC_G1, R_ARM_LDC_PC_G1},
+ {BFD_RELOC_ARM_LDC_PC_G2, R_ARM_LDC_PC_G2},
+ {BFD_RELOC_ARM_ALU_SB_G0_NC, R_ARM_ALU_SB_G0_NC},
+ {BFD_RELOC_ARM_ALU_SB_G0, R_ARM_ALU_SB_G0},
+ {BFD_RELOC_ARM_ALU_SB_G1_NC, R_ARM_ALU_SB_G1_NC},
+ {BFD_RELOC_ARM_ALU_SB_G1, R_ARM_ALU_SB_G1},
+ {BFD_RELOC_ARM_ALU_SB_G2, R_ARM_ALU_SB_G2},
+ {BFD_RELOC_ARM_LDR_SB_G0, R_ARM_LDR_SB_G0},
+ {BFD_RELOC_ARM_LDR_SB_G1, R_ARM_LDR_SB_G1},
+ {BFD_RELOC_ARM_LDR_SB_G2, R_ARM_LDR_SB_G2},
+ {BFD_RELOC_ARM_LDRS_SB_G0, R_ARM_LDRS_SB_G0},
+ {BFD_RELOC_ARM_LDRS_SB_G1, R_ARM_LDRS_SB_G1},
+ {BFD_RELOC_ARM_LDRS_SB_G2, R_ARM_LDRS_SB_G2},
+ {BFD_RELOC_ARM_LDC_SB_G0, R_ARM_LDC_SB_G0},
+ {BFD_RELOC_ARM_LDC_SB_G1, R_ARM_LDC_SB_G1},
+ {BFD_RELOC_ARM_LDC_SB_G2, R_ARM_LDC_SB_G2}
};
static reloc_howto_type *
@@ -1380,6 +1787,31 @@ elf32_arm_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+elf32_arm_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (elf32_arm_howto_table_1)
+ / sizeof (elf32_arm_howto_table_1[0]));
+ i++)
+ if (elf32_arm_howto_table_1[i].name != NULL
+ && strcasecmp (elf32_arm_howto_table_1[i].name, r_name) == 0)
+ return &elf32_arm_howto_table_1[i];
+
+ for (i = 0;
+ i < (sizeof (elf32_arm_howto_table_2)
+ / sizeof (elf32_arm_howto_table_2[0]));
+ i++)
+ if (elf32_arm_howto_table_2[i].name != NULL
+ && strcasecmp (elf32_arm_howto_table_2[i].name, r_name) == 0)
+ return &elf32_arm_howto_table_2[i];
+
+ return NULL;
+}
+
/* Support for core dump NOTE sections */
static bfd_boolean
elf32_arm_nabi_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
@@ -1468,6 +1900,9 @@ typedef unsigned short int insn16;
#define ARM2THUMB_GLUE_SECTION_NAME ".glue_7"
#define ARM2THUMB_GLUE_ENTRY_NAME "__%s_from_arm"
+#define VFP11_ERRATUM_VENEER_SECTION_NAME ".vfp11_veneer"
+#define VFP11_ERRATUM_VENEER_ENTRY_NAME "__vfp11_veneer_%x"
+
/* The name of the dynamic interpreter. This is put in the .interp
section. */
#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
@@ -1580,11 +2015,46 @@ typedef struct elf32_elf_section_map
}
elf32_arm_section_map;
+/* Information about a VFP11 erratum veneer, or a branch to such a veneer. */
+
+typedef enum
+{
+ VFP11_ERRATUM_BRANCH_TO_ARM_VENEER,
+ VFP11_ERRATUM_BRANCH_TO_THUMB_VENEER,
+ VFP11_ERRATUM_ARM_VENEER,
+ VFP11_ERRATUM_THUMB_VENEER
+}
+elf32_vfp11_erratum_type;
+
+typedef struct elf32_vfp11_erratum_list
+{
+ struct elf32_vfp11_erratum_list *next;
+ bfd_vma vma;
+ union
+ {
+ struct
+ {
+ struct elf32_vfp11_erratum_list *veneer;
+ unsigned int vfp_insn;
+ } b;
+ struct
+ {
+ struct elf32_vfp11_erratum_list *branch;
+ unsigned int id;
+ } v;
+ } u;
+ elf32_vfp11_erratum_type type;
+}
+elf32_vfp11_erratum_list;
+
typedef struct _arm_elf_section_data
{
struct bfd_elf_section_data elf;
unsigned int mapcount;
+ unsigned int mapsize;
elf32_arm_section_map *map;
+ unsigned int erratumcount;
+ elf32_vfp11_erratum_list *erratumlist;
}
_arm_elf_section_data;
@@ -1594,22 +2064,6 @@ _arm_elf_section_data;
/* The size of the thread control block. */
#define TCB_SIZE 8
-#define NUM_KNOWN_ATTRIBUTES 32
-
-typedef struct aeabi_attribute
-{
- int type;
- unsigned int i;
- char *s;
-} aeabi_attribute;
-
-typedef struct aeabi_attribute_list
-{
- struct aeabi_attribute_list *next;
- int tag;
- aeabi_attribute attr;
-} aeabi_attribute_list;
-
struct elf32_arm_obj_tdata
{
struct elf_obj_tdata root;
@@ -1617,8 +2071,8 @@ struct elf32_arm_obj_tdata
/* tls_type for each local got entry. */
char *local_got_tls_type;
- aeabi_attribute known_eabi_attributes[NUM_KNOWN_ATTRIBUTES];
- aeabi_attribute_list *other_eabi_attributes;
+ /* Zero to warn when linking objects with incompatible enum sizes. */
+ int no_enum_size_warning;
};
#define elf32_arm_tdata(abfd) \
@@ -1630,11 +2084,14 @@ struct elf32_arm_obj_tdata
static bfd_boolean
elf32_arm_mkobject (bfd *abfd)
{
- bfd_size_type amt = sizeof (struct elf32_arm_obj_tdata);
- abfd->tdata.any = bfd_zalloc (abfd, amt);
if (abfd->tdata.any == NULL)
- return FALSE;
- return TRUE;
+ {
+ bfd_size_type amt = sizeof (struct elf32_arm_obj_tdata);
+ abfd->tdata.any = bfd_zalloc (abfd, amt);
+ if (abfd->tdata.any == NULL)
+ return FALSE;
+ }
+ return bfd_elf_mkobject (abfd);
}
/* The ARM linker needs to keep track of the number of relocs that it
@@ -1681,6 +2138,10 @@ struct elf32_arm_link_hash_entry
#define GOT_TLS_GD 2
#define GOT_TLS_IE 4
unsigned char tls_type;
+
+ /* The symbol marking the real symbol location for exported thumb
+ symbols with Arm stubs. */
+ struct elf_link_hash_entry *export_glue;
};
/* Traverse an arm ELF linker hash table. */
@@ -1706,6 +2167,10 @@ struct elf32_arm_link_hash_table
/* The size in bytes of the section containing the ARM-to-Thumb glue. */
bfd_size_type arm_glue_size;
+ /* The size in bytes of the section containing glue for VFP11 erratum
+ veneers. */
+ bfd_size_type vfp11_erratum_glue_size;
+
/* An arbitrary input BFD chosen to hold the glue sections. */
bfd * bfd_of_glue_owner;
@@ -1713,7 +2178,7 @@ struct elf32_arm_link_hash_table
int byteswap_code;
/* Zero if R_ARM_TARGET1 means R_ARM_ABS32.
- Nonzero if R_ARM_TARGET1 means R_ARM_ABS32. */
+ Nonzero if R_ARM_TARGET1 means R_ARM_REL32. */
int target1_is_rel;
/* The relocation to use for R_ARM_TARGET2 relocations. */
@@ -1725,6 +2190,16 @@ struct elf32_arm_link_hash_table
/* Nonzero if the ARM/Thumb BLX instructions are available for use. */
int use_blx;
+ /* What sort of code sequences we should look for which may trigger the
+ VFP11 denorm erratum. */
+ bfd_arm_vfp11_fix vfp11_fix;
+
+ /* Global counter for the number of fixes we have emitted. */
+ int num_vfp11_fixes;
+
+ /* Nonzero to force PIC branch veneers. */
+ int pic_veneer;
+
/* The number of bytes in the initial entry in the PLT. */
bfd_size_type plt_header_size;
@@ -1792,6 +2267,7 @@ elf32_arm_link_hash_newfunc (struct bfd_hash_entry * entry,
ret->tls_type = GOT_UNKNOWN;
ret->plt_thumb_refcount = 0;
ret->plt_got_offset = -1;
+ ret->export_glue = NULL;
}
return (struct bfd_hash_entry *) ret;
@@ -1805,9 +2281,9 @@ reloc_section_p (struct elf32_arm_link_hash_table *htab,
const char *name, asection *s)
{
if (htab->use_rel)
- return strncmp (name, ".rel", 4) == 0 && strcmp (s->name, name + 4) == 0;
+ return CONST_STRNEQ (name, ".rel") && strcmp (s->name, name + 4) == 0;
else
- return strncmp (name, ".rela", 5) == 0 && strcmp (s->name, name + 5) == 0;
+ return CONST_STRNEQ (name, ".rela") && strcmp (s->name, name + 5) == 0;
}
/* Create .got, .gotplt, and .rel(a).got sections in DYNOBJ, and set up
@@ -1940,15 +2416,17 @@ elf32_arm_copy_indirect_symbol (struct bfd_link_info *info,
eind->relocs_copied = NULL;
}
- /* Copy over PLT info. */
- edir->plt_thumb_refcount += eind->plt_thumb_refcount;
- eind->plt_thumb_refcount = 0;
-
- if (ind->root.type == bfd_link_hash_indirect
- && dir->got.refcount <= 0)
+ if (ind->root.type == bfd_link_hash_indirect)
{
- edir->tls_type = eind->tls_type;
- eind->tls_type = GOT_UNKNOWN;
+ /* Copy over PLT info. */
+ edir->plt_thumb_refcount += eind->plt_thumb_refcount;
+ eind->plt_thumb_refcount = 0;
+
+ if (dir->got.refcount <= 0)
+ {
+ edir->tls_type = eind->tls_type;
+ eind->tls_type = GOT_UNKNOWN;
+ }
}
_bfd_elf_link_hash_copy_indirect (info, dir, ind);
@@ -1984,6 +2462,9 @@ elf32_arm_link_hash_table_create (bfd *abfd)
ret->srelplt2 = NULL;
ret->thumb_glue_size = 0;
ret->arm_glue_size = 0;
+ ret->vfp11_fix = BFD_ARM_VFP11_FIX_NONE;
+ ret->vfp11_erratum_glue_size = 0;
+ ret->num_vfp11_fixes = 0;
ret->bfd_of_glue_owner = NULL;
ret->byteswap_code = 0;
ret->target1_is_rel = 0;
@@ -2012,7 +2493,7 @@ elf32_arm_link_hash_table_create (bfd *abfd)
static struct elf_link_hash_entry *
find_thumb_glue (struct bfd_link_info *link_info,
const char *name,
- bfd *input_bfd)
+ char **error_message)
{
char *tmp_name;
struct elf_link_hash_entry *hash;
@@ -2032,9 +2513,8 @@ find_thumb_glue (struct bfd_link_info *link_info,
(&(hash_table)->root, tmp_name, FALSE, FALSE, TRUE);
if (hash == NULL)
- /* xgettext:c-format */
- (*_bfd_error_handler) (_("%B: unable to find THUMB glue '%s' for `%s'"),
- input_bfd, tmp_name, name);
+ asprintf (error_message, _("unable to find THUMB glue '%s' for '%s'"),
+ tmp_name, name);
free (tmp_name);
@@ -2046,7 +2526,7 @@ find_thumb_glue (struct bfd_link_info *link_info,
static struct elf_link_hash_entry *
find_arm_glue (struct bfd_link_info *link_info,
const char *name,
- bfd *input_bfd)
+ char **error_message)
{
char *tmp_name;
struct elf_link_hash_entry *myh;
@@ -2066,9 +2546,8 @@ find_arm_glue (struct bfd_link_info *link_info,
(&(hash_table)->root, tmp_name, FALSE, FALSE, TRUE);
if (myh == NULL)
- /* xgettext:c-format */
- (*_bfd_error_handler) (_("%B: unable to find ARM glue '%s' for `%s'"),
- input_bfd, tmp_name, name);
+ asprintf (error_message, _("unable to find ARM glue '%s' for '%s'"),
+ tmp_name, name);
free (tmp_name);
@@ -2084,6 +2563,13 @@ find_arm_glue (struct bfd_link_info *link_info,
__func_addr:
.word func @ behave as if you saw a ARM_32 reloc.
+ (v5t static images)
+ .arm
+ __func_from_arm:
+ ldr pc, __func_addr
+ __func_addr:
+ .word func @ behave as if you saw a ARM_32 reloc.
+
(relocatable images)
.arm
__func_from_arm:
@@ -2099,6 +2585,10 @@ static const insn32 a2t1_ldr_insn = 0xe59fc000;
static const insn32 a2t2_bx_r12_insn = 0xe12fff1c;
static const insn32 a2t3_func_addr_insn = 0x00000001;
+#define ARM2THUMB_V5_STATIC_GLUE_SIZE 8
+static const insn32 a2t1v5_ldr_insn = 0xe51ff004;
+static const insn32 a2t2v5_func_addr_insn = 0x00000001;
+
#define ARM2THUMB_PIC_GLUE_SIZE 16
static const insn32 a2t1p_ldr_insn = 0xe59fc004;
static const insn32 a2t2p_add_pc_insn = 0xe08cc00f;
@@ -2125,6 +2615,8 @@ static const insn16 t2a1_bx_pc_insn = 0x4778;
static const insn16 t2a2_noop_insn = 0x46c0;
static const insn32 t2a3_b_insn = 0xea000000;
+#define VFP11_ERRATUM_VENEER_SIZE 8
+
#ifndef ELFARM_NABI_C_INCLUDED
bfd_boolean
bfd_elf32_arm_allocate_interworking_sections (struct bfd_link_info * info)
@@ -2148,7 +2640,7 @@ bfd_elf32_arm_allocate_interworking_sections (struct bfd_link_info * info)
foo = bfd_alloc (globals->bfd_of_glue_owner, globals->arm_glue_size);
- s->size = globals->arm_glue_size;
+ BFD_ASSERT (s->size == globals->arm_glue_size);
s->contents = foo;
}
@@ -2163,14 +2655,32 @@ bfd_elf32_arm_allocate_interworking_sections (struct bfd_link_info * info)
foo = bfd_alloc (globals->bfd_of_glue_owner, globals->thumb_glue_size);
- s->size = globals->thumb_glue_size;
+ BFD_ASSERT (s->size == globals->thumb_glue_size);
+ s->contents = foo;
+ }
+
+ if (globals->vfp11_erratum_glue_size != 0)
+ {
+ BFD_ASSERT (globals->bfd_of_glue_owner != NULL);
+
+ s = bfd_get_section_by_name
+ (globals->bfd_of_glue_owner, VFP11_ERRATUM_VENEER_SECTION_NAME);
+
+ BFD_ASSERT (s != NULL);
+
+ foo = bfd_alloc (globals->bfd_of_glue_owner,
+ globals->vfp11_erratum_glue_size);
+
+ BFD_ASSERT (s->size == globals->vfp11_erratum_glue_size);
s->contents = foo;
}
return TRUE;
}
-static void
+/* Allocate space and symbols for calling a Thumb function from Arm mode.
+ returns the symbol identifying teh stub. */
+static struct elf_link_hash_entry *
record_arm_to_thumb_glue (struct bfd_link_info * link_info,
struct elf_link_hash_entry * h)
{
@@ -2181,6 +2691,7 @@ record_arm_to_thumb_glue (struct bfd_link_info * link_info,
struct bfd_link_hash_entry * bh;
struct elf32_arm_link_hash_table * globals;
bfd_vma val;
+ bfd_size_type size;
globals = elf32_arm_hash_table (link_info);
@@ -2205,7 +2716,7 @@ record_arm_to_thumb_glue (struct bfd_link_info * link_info,
{
/* We've already seen this guy. */
free (tmp_name);
- return;
+ return myh;
}
/* The only trick here is using hash_table->arm_glue_size as the value.
@@ -2223,12 +2734,18 @@ record_arm_to_thumb_glue (struct bfd_link_info * link_info,
free (tmp_name);
- if ((link_info->shared || globals->root.is_relocatable_executable))
- globals->arm_glue_size += ARM2THUMB_PIC_GLUE_SIZE;
+ if (link_info->shared || globals->root.is_relocatable_executable
+ || globals->pic_veneer)
+ size = ARM2THUMB_PIC_GLUE_SIZE;
+ else if (globals->use_blx)
+ size = ARM2THUMB_V5_STATIC_GLUE_SIZE;
else
- globals->arm_glue_size += ARM2THUMB_STATIC_GLUE_SIZE;
+ size = ARM2THUMB_STATIC_GLUE_SIZE;
- return;
+ s->size += size;
+ globals->arm_glue_size += size;
+
+ return myh;
}
static void
@@ -2302,11 +2819,162 @@ record_thumb_to_arm_glue (struct bfd_link_info *link_info,
free (tmp_name);
+ s->size += THUMB2ARM_GLUE_SIZE;
hash_table->thumb_glue_size += THUMB2ARM_GLUE_SIZE;
return;
}
+
+/* Add an entry to the code/data map for section SEC. */
+
+static void
+elf32_arm_section_map_add (asection *sec, char type, bfd_vma vma)
+{
+ struct _arm_elf_section_data *sec_data = elf32_arm_section_data (sec);
+ unsigned int newidx;
+
+ if (sec_data->map == NULL)
+ {
+ sec_data->map = bfd_malloc (sizeof (elf32_arm_section_map));
+ sec_data->mapcount = 0;
+ sec_data->mapsize = 1;
+ }
+
+ newidx = sec_data->mapcount++;
+
+ if (sec_data->mapcount > sec_data->mapsize)
+ {
+ sec_data->mapsize *= 2;
+ sec_data->map = bfd_realloc (sec_data->map, sec_data->mapsize
+ * sizeof (elf32_arm_section_map));
+ }
+
+ sec_data->map[newidx].vma = vma;
+ sec_data->map[newidx].type = type;
+}
+
+
+/* Record information about a VFP11 denorm-erratum veneer. Only ARM-mode
+ veneers are handled for now. */
+
+static bfd_vma
+record_vfp11_erratum_veneer (struct bfd_link_info *link_info,
+ elf32_vfp11_erratum_list *branch,
+ bfd *branch_bfd,
+ asection *branch_sec,
+ unsigned int offset)
+{
+ asection *s;
+ struct elf32_arm_link_hash_table *hash_table;
+ char *tmp_name;
+ struct elf_link_hash_entry *myh;
+ struct bfd_link_hash_entry *bh;
+ bfd_vma val;
+ struct _arm_elf_section_data *sec_data;
+ int errcount;
+ elf32_vfp11_erratum_list *newerr;
+
+ hash_table = elf32_arm_hash_table (link_info);
+
+ BFD_ASSERT (hash_table != NULL);
+ BFD_ASSERT (hash_table->bfd_of_glue_owner != NULL);
+
+ s = bfd_get_section_by_name
+ (hash_table->bfd_of_glue_owner, VFP11_ERRATUM_VENEER_SECTION_NAME);
+
+ sec_data = elf32_arm_section_data (s);
+
+ BFD_ASSERT (s != NULL);
+
+ tmp_name = bfd_malloc ((bfd_size_type) strlen
+ (VFP11_ERRATUM_VENEER_ENTRY_NAME) + 10);
+
+ BFD_ASSERT (tmp_name);
+
+ sprintf (tmp_name, VFP11_ERRATUM_VENEER_ENTRY_NAME,
+ hash_table->num_vfp11_fixes);
+
+ myh = elf_link_hash_lookup
+ (&(hash_table)->root, tmp_name, FALSE, FALSE, FALSE);
+
+ BFD_ASSERT (myh == NULL);
+
+ bh = NULL;
+ val = hash_table->vfp11_erratum_glue_size;
+ _bfd_generic_link_add_one_symbol (link_info, hash_table->bfd_of_glue_owner,
+ tmp_name, BSF_FUNCTION | BSF_LOCAL, s, val,
+ NULL, TRUE, FALSE, &bh);
+
+ myh = (struct elf_link_hash_entry *) bh;
+ myh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
+ myh->forced_local = 1;
+
+ /* Link veneer back to calling location. */
+ errcount = ++(sec_data->erratumcount);
+ newerr = bfd_zmalloc (sizeof (elf32_vfp11_erratum_list));
+
+ newerr->type = VFP11_ERRATUM_ARM_VENEER;
+ newerr->vma = -1;
+ newerr->u.v.branch = branch;
+ newerr->u.v.id = hash_table->num_vfp11_fixes;
+ branch->u.b.veneer = newerr;
+
+ newerr->next = sec_data->erratumlist;
+ sec_data->erratumlist = newerr;
+
+ /* A symbol for the return from the veneer. */
+ sprintf (tmp_name, VFP11_ERRATUM_VENEER_ENTRY_NAME "_r",
+ hash_table->num_vfp11_fixes);
+
+ myh = elf_link_hash_lookup
+ (&(hash_table)->root, tmp_name, FALSE, FALSE, FALSE);
+
+ if (myh != NULL)
+ abort ();
+
+ bh = NULL;
+ val = offset + 4;
+ _bfd_generic_link_add_one_symbol (link_info, branch_bfd, tmp_name, BSF_LOCAL,
+ branch_sec, val, NULL, TRUE, FALSE, &bh);
+
+ myh = (struct elf_link_hash_entry *) bh;
+ myh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
+ myh->forced_local = 1;
+
+ free (tmp_name);
+
+ /* Generate a mapping symbol for the veneer section, and explicitly add an
+ entry for that symbol to the code/data map for the section. */
+ if (hash_table->vfp11_erratum_glue_size == 0)
+ {
+ bh = NULL;
+ /* FIXME: Creates an ARM symbol. Thumb mode will need attention if it
+ ever requires this erratum fix. */
+ _bfd_generic_link_add_one_symbol (link_info,
+ hash_table->bfd_of_glue_owner, "$a",
+ BSF_LOCAL, s, 0, NULL,
+ TRUE, FALSE, &bh);
+
+ myh = (struct elf_link_hash_entry *) bh;
+ myh->type = ELF_ST_INFO (STB_LOCAL, STT_NOTYPE);
+ myh->forced_local = 1;
+
+ /* The elf32_arm_init_maps function only cares about symbols from input
+ BFDs. We must make a note of this generated mapping symbol
+ ourselves so that code byteswapping works properly in
+ elf32_arm_write_section. */
+ elf32_arm_section_map_add (s, 'a', 0);
+ }
+
+ s->size += VFP11_ERRATUM_VENEER_SIZE;
+ hash_table->vfp11_erratum_glue_size += VFP11_ERRATUM_VENEER_SIZE;
+ hash_table->num_vfp11_fixes++;
+
+ /* The offset of the veneer. */
+ return val;
+}
+
/* Add the glue sections to ABFD. This function is called from the
linker scripts in ld/emultempl/{armelf}.em. */
@@ -2329,7 +2997,8 @@ bfd_elf32_arm_add_glue_sections_to_bfd (bfd *abfd,
/* Note: we do not include the flag SEC_LINKER_CREATED, as this
will prevent elf_link_input_bfd() from processing the contents
of this section. */
- flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_CODE | SEC_READONLY;
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
+ | SEC_CODE | SEC_READONLY);
sec = bfd_make_section_with_flags (abfd,
ARM2THUMB_GLUE_SECTION_NAME,
@@ -2348,8 +3017,8 @@ bfd_elf32_arm_add_glue_sections_to_bfd (bfd *abfd,
if (sec == NULL)
{
- flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
- | SEC_CODE | SEC_READONLY;
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
+ | SEC_CODE | SEC_READONLY);
sec = bfd_make_section_with_flags (abfd,
THUMB2ARM_GLUE_SECTION_NAME,
@@ -2362,6 +3031,24 @@ bfd_elf32_arm_add_glue_sections_to_bfd (bfd *abfd,
sec->gc_mark = 1;
}
+ sec = bfd_get_section_by_name (abfd, VFP11_ERRATUM_VENEER_SECTION_NAME);
+
+ if (sec == NULL)
+ {
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
+ | SEC_CODE | SEC_READONLY);
+
+ sec = bfd_make_section_with_flags (abfd,
+ VFP11_ERRATUM_VENEER_SECTION_NAME,
+ flags);
+
+ if (sec == NULL
+ || !bfd_set_section_alignment (abfd, sec, 2))
+ return FALSE;
+
+ sec->gc_mark = 1;
+ }
+
return TRUE;
}
@@ -2397,14 +3084,14 @@ bfd_elf32_arm_get_bfd_for_interworking (bfd *abfd, struct bfd_link_info *info)
static void check_use_blx(struct elf32_arm_link_hash_table *globals)
{
- if (elf32_arm_get_eabi_attr_int (globals->obfd, Tag_CPU_arch) > 2)
+ if (bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC,
+ Tag_CPU_arch) > 2)
globals->use_blx = 1;
}
bfd_boolean
bfd_elf32_arm_process_before_allocation (bfd *abfd,
- struct bfd_link_info *link_info,
- int byteswap_code)
+ struct bfd_link_info *link_info)
{
Elf_Internal_Shdr *symtab_hdr;
Elf_Internal_Rela *internal_relocs = NULL;
@@ -2427,13 +3114,12 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd,
BFD_ASSERT (globals != NULL);
BFD_ASSERT (globals->bfd_of_glue_owner != NULL);
- if (byteswap_code && !bfd_big_endian (abfd))
+ if (globals->byteswap_code && !bfd_big_endian (abfd))
{
_bfd_error_handler (_("%B: BE8 images only valid in big-endian mode."),
abfd);
return FALSE;
}
- globals->byteswap_code = byteswap_code;
/* Rummage around all the relocs and map the glue vectors. */
sec = abfd->sections;
@@ -2446,6 +3132,9 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd,
if (sec->reloc_count == 0)
continue;
+ if ((sec->flags & SEC_EXCLUDE) != 0)
+ continue;
+
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
/* Load the relocs. */
@@ -2529,7 +3218,8 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd,
/* This one is a call from thumb code. We look
up the target of the call. If it is not a thumb
target, we insert glue. */
- if (ELF_ST_TYPE (h->type) != STT_ARM_TFUNC && !globals->use_blx)
+ if (ELF_ST_TYPE (h->type) != STT_ARM_TFUNC && !globals->use_blx
+ && h->root.type != bfd_link_hash_undefweak)
record_thumb_to_arm_glue (link_info, h);
break;
@@ -2564,14 +3254,654 @@ error_return:
#endif
+/* Initialise maps of ARM/Thumb/data for input BFDs. */
+
+void
+bfd_elf32_arm_init_maps (bfd *abfd)
+{
+ Elf_Internal_Sym *isymbuf;
+ Elf_Internal_Shdr *hdr;
+ unsigned int i, localsyms;
+
+ if ((abfd->flags & DYNAMIC) != 0)
+ return;
+
+ hdr = &elf_tdata (abfd)->symtab_hdr;
+ localsyms = hdr->sh_info;
+
+ /* Obtain a buffer full of symbols for this BFD. The hdr->sh_info field
+ should contain the number of local symbols, which should come before any
+ global symbols. Mapping symbols are always local. */
+ isymbuf = bfd_elf_get_elf_syms (abfd, hdr, localsyms, 0, NULL, NULL,
+ NULL);
+
+ /* No internal symbols read? Skip this BFD. */
+ if (isymbuf == NULL)
+ return;
+
+ for (i = 0; i < localsyms; i++)
+ {
+ Elf_Internal_Sym *isym = &isymbuf[i];
+ asection *sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
+ const char *name;
+
+ if (sec != NULL
+ && ELF_ST_BIND (isym->st_info) == STB_LOCAL)
+ {
+ name = bfd_elf_string_from_elf_section (abfd,
+ hdr->sh_link, isym->st_name);
+
+ if (bfd_is_arm_special_symbol_name (name,
+ BFD_ARM_SPECIAL_SYM_TYPE_MAP))
+ elf32_arm_section_map_add (sec, name[1], isym->st_value);
+ }
+ }
+}
+
+
+void
+bfd_elf32_arm_set_vfp11_fix (bfd *obfd, struct bfd_link_info *link_info)
+{
+ struct elf32_arm_link_hash_table *globals = elf32_arm_hash_table (link_info);
+ obj_attribute *out_attr = elf_known_obj_attributes_proc (obfd);
+
+ /* We assume that ARMv7+ does not need the VFP11 denorm erratum fix. */
+ if (out_attr[Tag_CPU_arch].i >= TAG_CPU_ARCH_V7)
+ {
+ switch (globals->vfp11_fix)
+ {
+ case BFD_ARM_VFP11_FIX_DEFAULT:
+ case BFD_ARM_VFP11_FIX_NONE:
+ globals->vfp11_fix = BFD_ARM_VFP11_FIX_NONE;
+ break;
+
+ default:
+ /* Give a warning, but do as the user requests anyway. */
+ (*_bfd_error_handler) (_("%B: warning: selected VFP11 erratum "
+ "workaround is not necessary for target architecture"), obfd);
+ }
+ }
+ else if (globals->vfp11_fix == BFD_ARM_VFP11_FIX_DEFAULT)
+ /* For earlier architectures, we might need the workaround, but do not
+ enable it by default. If users is running with broken hardware, they
+ must enable the erratum fix explicitly. */
+ globals->vfp11_fix = BFD_ARM_VFP11_FIX_NONE;
+}
+
+
+enum bfd_arm_vfp11_pipe {
+ VFP11_FMAC,
+ VFP11_LS,
+ VFP11_DS,
+ VFP11_BAD
+};
+
+/* Return a VFP register number. This is encoded as RX:X for single-precision
+ registers, or X:RX for double-precision registers, where RX is the group of
+ four bits in the instruction encoding and X is the single extension bit.
+ RX and X fields are specified using their lowest (starting) bit. The return
+ value is:
+
+ 0...31: single-precision registers s0...s31
+ 32...63: double-precision registers d0...d31.
+
+ Although X should be zero for VFP11 (encoding d0...d15 only), we might
+ encounter VFP3 instructions, so we allow the full range for DP registers. */
+
+static unsigned int
+bfd_arm_vfp11_regno (unsigned int insn, bfd_boolean is_double, unsigned int rx,
+ unsigned int x)
+{
+ if (is_double)
+ return (((insn >> rx) & 0xf) | (((insn >> x) & 1) << 4)) + 32;
+ else
+ return (((insn >> rx) & 0xf) << 1) | ((insn >> x) & 1);
+}
+
+/* Set bits in *WMASK according to a register number REG as encoded by
+ bfd_arm_vfp11_regno(). Ignore d16-d31. */
+
+static void
+bfd_arm_vfp11_write_mask (unsigned int *wmask, unsigned int reg)
+{
+ if (reg < 32)
+ *wmask |= 1 << reg;
+ else if (reg < 48)
+ *wmask |= 3 << ((reg - 32) * 2);
+}
+
+/* Return TRUE if WMASK overwrites anything in REGS. */
+
+static bfd_boolean
+bfd_arm_vfp11_antidependency (unsigned int wmask, int *regs, int numregs)
+{
+ int i;
+
+ for (i = 0; i < numregs; i++)
+ {
+ unsigned int reg = regs[i];
+
+ if (reg < 32 && (wmask & (1 << reg)) != 0)
+ return TRUE;
+
+ reg -= 32;
+
+ if (reg >= 16)
+ continue;
+
+ if ((wmask & (3 << (reg * 2))) != 0)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/* In this function, we're interested in two things: finding input registers
+ for VFP data-processing instructions, and finding the set of registers which
+ arbitrary VFP instructions may write to. We use a 32-bit unsigned int to
+ hold the written set, so FLDM etc. are easy to deal with (we're only
+ interested in 32 SP registers or 16 dp registers, due to the VFP version
+ implemented by the chip in question). DP registers are marked by setting
+ both SP registers in the write mask). */
+
+static enum bfd_arm_vfp11_pipe
+bfd_arm_vfp11_insn_decode (unsigned int insn, unsigned int *destmask, int *regs,
+ int *numregs)
+{
+ enum bfd_arm_vfp11_pipe pipe = VFP11_BAD;
+ bfd_boolean is_double = ((insn & 0xf00) == 0xb00) ? 1 : 0;
+
+ if ((insn & 0x0f000e10) == 0x0e000a00) /* A data-processing insn. */
+ {
+ unsigned int pqrs;
+ unsigned int fd = bfd_arm_vfp11_regno (insn, is_double, 12, 22);
+ unsigned int fm = bfd_arm_vfp11_regno (insn, is_double, 0, 5);
+
+ pqrs = ((insn & 0x00800000) >> 20)
+ | ((insn & 0x00300000) >> 19)
+ | ((insn & 0x00000040) >> 6);
+
+ switch (pqrs)
+ {
+ case 0: /* fmac[sd]. */
+ case 1: /* fnmac[sd]. */
+ case 2: /* fmsc[sd]. */
+ case 3: /* fnmsc[sd]. */
+ pipe = VFP11_FMAC;
+ bfd_arm_vfp11_write_mask (destmask, fd);
+ regs[0] = fd;
+ regs[1] = bfd_arm_vfp11_regno (insn, is_double, 16, 7); /* Fn. */
+ regs[2] = fm;
+ *numregs = 3;
+ break;
+
+ case 4: /* fmul[sd]. */
+ case 5: /* fnmul[sd]. */
+ case 6: /* fadd[sd]. */
+ case 7: /* fsub[sd]. */
+ pipe = VFP11_FMAC;
+ goto vfp_binop;
+
+ case 8: /* fdiv[sd]. */
+ pipe = VFP11_DS;
+ vfp_binop:
+ bfd_arm_vfp11_write_mask (destmask, fd);
+ regs[0] = bfd_arm_vfp11_regno (insn, is_double, 16, 7); /* Fn. */
+ regs[1] = fm;
+ *numregs = 2;
+ break;
+
+ case 15: /* extended opcode. */
+ {
+ unsigned int extn = ((insn >> 15) & 0x1e)
+ | ((insn >> 7) & 1);
+
+ switch (extn)
+ {
+ case 0: /* fcpy[sd]. */
+ case 1: /* fabs[sd]. */
+ case 2: /* fneg[sd]. */
+ case 8: /* fcmp[sd]. */
+ case 9: /* fcmpe[sd]. */
+ case 10: /* fcmpz[sd]. */
+ case 11: /* fcmpez[sd]. */
+ case 16: /* fuito[sd]. */
+ case 17: /* fsito[sd]. */
+ case 24: /* ftoui[sd]. */
+ case 25: /* ftouiz[sd]. */
+ case 26: /* ftosi[sd]. */
+ case 27: /* ftosiz[sd]. */
+ /* These instructions will not bounce due to underflow. */
+ *numregs = 0;
+ pipe = VFP11_FMAC;
+ break;
+
+ case 3: /* fsqrt[sd]. */
+ /* fsqrt cannot underflow, but it can (perhaps) overwrite
+ registers to cause the erratum in previous instructions. */
+ bfd_arm_vfp11_write_mask (destmask, fd);
+ pipe = VFP11_DS;
+ break;
+
+ case 15: /* fcvt{ds,sd}. */
+ {
+ int rnum = 0;
+
+ bfd_arm_vfp11_write_mask (destmask, fd);
+
+ /* Only FCVTSD can underflow. */
+ if ((insn & 0x100) != 0)
+ regs[rnum++] = fm;
+
+ *numregs = rnum;
+
+ pipe = VFP11_FMAC;
+ }
+ break;
+
+ default:
+ return VFP11_BAD;
+ }
+ }
+ break;
+
+ default:
+ return VFP11_BAD;
+ }
+ }
+ /* Two-register transfer. */
+ else if ((insn & 0x0fe00ed0) == 0x0c400a10)
+ {
+ unsigned int fm = bfd_arm_vfp11_regno (insn, is_double, 0, 5);
+
+ if ((insn & 0x100000) == 0)
+ {
+ if (is_double)
+ bfd_arm_vfp11_write_mask (destmask, fm);
+ else
+ {
+ bfd_arm_vfp11_write_mask (destmask, fm);
+ bfd_arm_vfp11_write_mask (destmask, fm + 1);
+ }
+ }
+
+ pipe = VFP11_LS;
+ }
+ else if ((insn & 0x0e100e00) == 0x0c100a00) /* A load insn. */
+ {
+ int fd = bfd_arm_vfp11_regno (insn, is_double, 12, 22);
+ unsigned int puw = ((insn >> 21) & 0x1) | (((insn >> 23) & 3) << 1);
+
+ switch (puw)
+ {
+ case 0: /* Two-reg transfer. We should catch these above. */
+ abort ();
+
+ case 2: /* fldm[sdx]. */
+ case 3:
+ case 5:
+ {
+ unsigned int i, offset = insn & 0xff;
+
+ if (is_double)
+ offset >>= 1;
+
+ for (i = fd; i < fd + offset; i++)
+ bfd_arm_vfp11_write_mask (destmask, i);
+ }
+ break;
+
+ case 4: /* fld[sd]. */
+ case 6:
+ bfd_arm_vfp11_write_mask (destmask, fd);
+ break;
+
+ default:
+ return VFP11_BAD;
+ }
+
+ pipe = VFP11_LS;
+ }
+ /* Single-register transfer. Note L==0. */
+ else if ((insn & 0x0f100e10) == 0x0e000a10)
+ {
+ unsigned int opcode = (insn >> 21) & 7;
+ unsigned int fn = bfd_arm_vfp11_regno (insn, is_double, 16, 7);
+
+ switch (opcode)
+ {
+ case 0: /* fmsr/fmdlr. */
+ case 1: /* fmdhr. */
+ /* Mark fmdhr and fmdlr as writing to the whole of the DP
+ destination register. I don't know if this is exactly right,
+ but it is the conservative choice. */
+ bfd_arm_vfp11_write_mask (destmask, fn);
+ break;
+
+ case 7: /* fmxr. */
+ break;
+ }
+
+ pipe = VFP11_LS;
+ }
+
+ return pipe;
+}
+
+
+static int elf32_arm_compare_mapping (const void * a, const void * b);
+
+
+/* Look for potentially-troublesome code sequences which might trigger the
+ VFP11 denormal/antidependency erratum. See, e.g., the ARM1136 errata sheet
+ (available from ARM) for details of the erratum. A short version is
+ described in ld.texinfo. */
+
+bfd_boolean
+bfd_elf32_arm_vfp11_erratum_scan (bfd *abfd, struct bfd_link_info *link_info)
+{
+ asection *sec;
+ bfd_byte *contents = NULL;
+ int state = 0;
+ int regs[3], numregs = 0;
+ struct elf32_arm_link_hash_table *globals = elf32_arm_hash_table (link_info);
+ int use_vector = (globals->vfp11_fix == BFD_ARM_VFP11_FIX_VECTOR);
+
+ /* We use a simple FSM to match troublesome VFP11 instruction sequences.
+ The states transition as follows:
+
+ 0 -> 1 (vector) or 0 -> 2 (scalar)
+ A VFP FMAC-pipeline instruction has been seen. Fill
+ regs[0]..regs[numregs-1] with its input operands. Remember this
+ instruction in 'first_fmac'.
+
+ 1 -> 2
+ Any instruction, except for a VFP instruction which overwrites
+ regs[*].
+
+ 1 -> 3 [ -> 0 ] or
+ 2 -> 3 [ -> 0 ]
+ A VFP instruction has been seen which overwrites any of regs[*].
+ We must make a veneer! Reset state to 0 before examining next
+ instruction.
+
+ 2 -> 0
+ If we fail to match anything in state 2, reset to state 0 and reset
+ the instruction pointer to the instruction after 'first_fmac'.
+
+ If the VFP11 vector mode is in use, there must be at least two unrelated
+ instructions between anti-dependent VFP11 instructions to properly avoid
+ triggering the erratum, hence the use of the extra state 1.
+ */
+
+ /* If we are only performing a partial link do not bother
+ to construct any glue. */
+ if (link_info->relocatable)
+ return TRUE;
+
+ /* We should have chosen a fix type by the time we get here. */
+ BFD_ASSERT (globals->vfp11_fix != BFD_ARM_VFP11_FIX_DEFAULT);
+
+ if (globals->vfp11_fix == BFD_ARM_VFP11_FIX_NONE)
+ return TRUE;
+
+ /* Skip if this bfd does not correspond to an ELF image. */
+ if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
+ return TRUE;
+
+ for (sec = abfd->sections; sec != NULL; sec = sec->next)
+ {
+ unsigned int i, span, first_fmac = 0, veneer_of_insn = 0;
+ struct _arm_elf_section_data *sec_data;
+
+ /* If we don't have executable progbits, we're not interested in this
+ section. Also skip if section is to be excluded. */
+ if (elf_section_type (sec) != SHT_PROGBITS
+ || (elf_section_flags (sec) & SHF_EXECINSTR) == 0
+ || (sec->flags & SEC_EXCLUDE) != 0
+ || strcmp (sec->name, VFP11_ERRATUM_VENEER_SECTION_NAME) == 0)
+ continue;
+
+ sec_data = elf32_arm_section_data (sec);
+
+ if (sec_data->mapcount == 0)
+ continue;
+
+ if (elf_section_data (sec)->this_hdr.contents != NULL)
+ contents = elf_section_data (sec)->this_hdr.contents;
+ else if (! bfd_malloc_and_get_section (abfd, sec, &contents))
+ goto error_return;
+
+ qsort (sec_data->map, sec_data->mapcount, sizeof (elf32_arm_section_map),
+ elf32_arm_compare_mapping);
+
+ for (span = 0; span < sec_data->mapcount; span++)
+ {
+ unsigned int span_start = sec_data->map[span].vma;
+ unsigned int span_end = (span == sec_data->mapcount - 1)
+ ? sec->size : sec_data->map[span + 1].vma;
+ char span_type = sec_data->map[span].type;
+
+ /* FIXME: Only ARM mode is supported at present. We may need to
+ support Thumb-2 mode also at some point. */
+ if (span_type != 'a')
+ continue;
+
+ for (i = span_start; i < span_end;)
+ {
+ unsigned int next_i = i + 4;
+ unsigned int insn = bfd_big_endian (abfd)
+ ? (contents[i] << 24)
+ | (contents[i + 1] << 16)
+ | (contents[i + 2] << 8)
+ | contents[i + 3]
+ : (contents[i + 3] << 24)
+ | (contents[i + 2] << 16)
+ | (contents[i + 1] << 8)
+ | contents[i];
+ unsigned int writemask = 0;
+ enum bfd_arm_vfp11_pipe pipe;
+
+ switch (state)
+ {
+ case 0:
+ pipe = bfd_arm_vfp11_insn_decode (insn, &writemask, regs,
+ &numregs);
+ /* I'm assuming the VFP11 erratum can trigger with denorm
+ operands on either the FMAC or the DS pipeline. This might
+ lead to slightly overenthusiastic veneer insertion. */
+ if (pipe == VFP11_FMAC || pipe == VFP11_DS)
+ {
+ state = use_vector ? 1 : 2;
+ first_fmac = i;
+ veneer_of_insn = insn;
+ }
+ break;
+
+ case 1:
+ {
+ int other_regs[3], other_numregs;
+ pipe = bfd_arm_vfp11_insn_decode (insn, &writemask,
+ other_regs,
+ &other_numregs);
+ if (pipe != VFP11_BAD
+ && bfd_arm_vfp11_antidependency (writemask, regs,
+ numregs))
+ state = 3;
+ else
+ state = 2;
+ }
+ break;
+
+ case 2:
+ {
+ int other_regs[3], other_numregs;
+ pipe = bfd_arm_vfp11_insn_decode (insn, &writemask,
+ other_regs,
+ &other_numregs);
+ if (pipe != VFP11_BAD
+ && bfd_arm_vfp11_antidependency (writemask, regs,
+ numregs))
+ state = 3;
+ else
+ {
+ state = 0;
+ next_i = first_fmac + 4;
+ }
+ }
+ break;
+
+ case 3:
+ abort (); /* Should be unreachable. */
+ }
+
+ if (state == 3)
+ {
+ elf32_vfp11_erratum_list *newerr
+ = bfd_zmalloc (sizeof (elf32_vfp11_erratum_list));
+ int errcount;
+
+ errcount = ++(elf32_arm_section_data (sec)->erratumcount);
+
+ newerr->u.b.vfp_insn = veneer_of_insn;
+
+ switch (span_type)
+ {
+ case 'a':
+ newerr->type = VFP11_ERRATUM_BRANCH_TO_ARM_VENEER;
+ break;
+
+ default:
+ abort ();
+ }
+
+ record_vfp11_erratum_veneer (link_info, newerr, abfd, sec,
+ first_fmac);
+
+ newerr->vma = -1;
+
+ newerr->next = sec_data->erratumlist;
+ sec_data->erratumlist = newerr;
+
+ state = 0;
+ }
+
+ i = next_i;
+ }
+ }
+
+ if (contents != NULL
+ && elf_section_data (sec)->this_hdr.contents != contents)
+ free (contents);
+ contents = NULL;
+ }
+
+ return TRUE;
+
+error_return:
+ if (contents != NULL
+ && elf_section_data (sec)->this_hdr.contents != contents)
+ free (contents);
+
+ return FALSE;
+}
+
+/* Find virtual-memory addresses for VFP11 erratum veneers and return locations
+ after sections have been laid out, using specially-named symbols. */
+
+void
+bfd_elf32_arm_vfp11_fix_veneer_locations (bfd *abfd,
+ struct bfd_link_info *link_info)
+{
+ asection *sec;
+ struct elf32_arm_link_hash_table *globals;
+ char *tmp_name;
+
+ if (link_info->relocatable)
+ return;
+
+ /* Skip if this bfd does not correspond to an ELF image. */
+ if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
+ return;
+
+ globals = elf32_arm_hash_table (link_info);
+
+ tmp_name = bfd_malloc ((bfd_size_type) strlen
+ (VFP11_ERRATUM_VENEER_ENTRY_NAME) + 10);
+
+ for (sec = abfd->sections; sec != NULL; sec = sec->next)
+ {
+ struct _arm_elf_section_data *sec_data = elf32_arm_section_data (sec);
+ elf32_vfp11_erratum_list *errnode = sec_data->erratumlist;
+
+ for (; errnode != NULL; errnode = errnode->next)
+ {
+ struct elf_link_hash_entry *myh;
+ bfd_vma vma;
+
+ switch (errnode->type)
+ {
+ case VFP11_ERRATUM_BRANCH_TO_ARM_VENEER:
+ case VFP11_ERRATUM_BRANCH_TO_THUMB_VENEER:
+ /* Find veneer symbol. */
+ sprintf (tmp_name, VFP11_ERRATUM_VENEER_ENTRY_NAME,
+ errnode->u.b.veneer->u.v.id);
+
+ myh = elf_link_hash_lookup
+ (&(globals)->root, tmp_name, FALSE, FALSE, TRUE);
+
+ if (myh == NULL)
+ (*_bfd_error_handler) (_("%B: unable to find VFP11 veneer "
+ "`%s'"), abfd, tmp_name);
+
+ vma = myh->root.u.def.section->output_section->vma
+ + myh->root.u.def.section->output_offset
+ + myh->root.u.def.value;
+
+ errnode->u.b.veneer->vma = vma;
+ break;
+
+ case VFP11_ERRATUM_ARM_VENEER:
+ case VFP11_ERRATUM_THUMB_VENEER:
+ /* Find return location. */
+ sprintf (tmp_name, VFP11_ERRATUM_VENEER_ENTRY_NAME "_r",
+ errnode->u.v.id);
+
+ myh = elf_link_hash_lookup
+ (&(globals)->root, tmp_name, FALSE, FALSE, TRUE);
+
+ if (myh == NULL)
+ (*_bfd_error_handler) (_("%B: unable to find VFP11 veneer "
+ "`%s'"), abfd, tmp_name);
+
+ vma = myh->root.u.def.section->output_section->vma
+ + myh->root.u.def.section->output_offset
+ + myh->root.u.def.value;
+
+ errnode->u.v.branch->vma = vma;
+ break;
+
+ default:
+ abort ();
+ }
+ }
+ }
+
+ free (tmp_name);
+}
+
+
/* Set target relocation values needed during linking. */
void
-bfd_elf32_arm_set_target_relocs (struct bfd_link_info *link_info,
+bfd_elf32_arm_set_target_relocs (struct bfd *output_bfd,
+ struct bfd_link_info *link_info,
int target1_is_rel,
char * target2_type,
int fix_v4bx,
- int use_blx)
+ int use_blx,
+ bfd_arm_vfp11_fix vfp11_fix,
+ int no_enum_warn, int pic_veneer)
{
struct elf32_arm_link_hash_table *globals;
@@ -2591,6 +3921,10 @@ bfd_elf32_arm_set_target_relocs (struct bfd_link_info *link_info,
}
globals->fix_v4bx = fix_v4bx;
globals->use_blx |= use_blx;
+ globals->vfp11_fix = vfp11_fix;
+ globals->pic_veneer = pic_veneer;
+
+ elf32_arm_tdata (output_bfd)->no_enum_size_warning = no_enum_warn;
}
/* The thumb form of a long branch is a bit finicky, because the offset
@@ -2647,6 +3981,35 @@ insert_thumb_branch (insn32 br_insn, int rel_off)
return br_insn;
}
+
+/* Store an Arm insn into an output section not processed by
+ elf32_arm_write_section. */
+
+static void
+put_arm_insn (struct elf32_arm_link_hash_table *htab,
+ bfd * output_bfd, bfd_vma val, void * ptr)
+{
+ if (htab->byteswap_code != bfd_little_endian (output_bfd))
+ bfd_putl32 (val, ptr);
+ else
+ bfd_putb32 (val, ptr);
+}
+
+
+/* Store a 16-bit Thumb insn into an output section not processed by
+ elf32_arm_write_section. */
+
+static void
+put_thumb_insn (struct elf32_arm_link_hash_table *htab,
+ bfd * output_bfd, bfd_vma val, void * ptr)
+{
+ if (htab->byteswap_code != bfd_little_endian (output_bfd))
+ bfd_putl16 (val, ptr);
+ else
+ bfd_putb16 (val, ptr);
+}
+
+
/* Thumb code calling an ARM function. */
static int
@@ -2659,7 +4022,8 @@ elf32_thumb_to_arm_stub (struct bfd_link_info * info,
asection * sym_sec,
bfd_vma offset,
bfd_signed_vma addend,
- bfd_vma val)
+ bfd_vma val,
+ char **error_message)
{
asection * s = 0;
bfd_vma my_offset;
@@ -2668,7 +4032,7 @@ elf32_thumb_to_arm_stub (struct bfd_link_info * info,
struct elf_link_hash_entry * myh;
struct elf32_arm_link_hash_table * globals;
- myh = find_thumb_glue (info, name, input_bfd);
+ myh = find_thumb_glue (info, name, error_message);
if (myh == NULL)
return FALSE;
@@ -2703,11 +4067,11 @@ elf32_thumb_to_arm_stub (struct bfd_link_info * info,
--my_offset;
myh->root.u.def.value = my_offset;
- bfd_put_16 (output_bfd, (bfd_vma) t2a1_bx_pc_insn,
- s->contents + my_offset);
+ put_thumb_insn (globals, output_bfd, (bfd_vma) t2a1_bx_pc_insn,
+ s->contents + my_offset);
- bfd_put_16 (output_bfd, (bfd_vma) t2a2_noop_insn,
- s->contents + my_offset + 2);
+ put_thumb_insn (globals, output_bfd, (bfd_vma) t2a2_noop_insn,
+ s->contents + my_offset + 2);
ret_offset =
/* Address of destination of the stub. */
@@ -2725,9 +4089,9 @@ elf32_thumb_to_arm_stub (struct bfd_link_info * info,
/* ARM branches work from the pc of the instruction + 8. */
+ 8);
- bfd_put_32 (output_bfd,
- (bfd_vma) t2a3_b_insn | ((ret_offset >> 2) & 0x00FFFFFF),
- s->contents + my_offset + 4);
+ put_arm_insn (globals, output_bfd,
+ (bfd_vma) t2a3_b_insn | ((ret_offset >> 2) & 0x00FFFFFF),
+ s->contents + my_offset + 4);
}
BFD_ASSERT (my_offset <= globals->thumb_glue_size);
@@ -2754,30 +4118,26 @@ elf32_thumb_to_arm_stub (struct bfd_link_info * info,
return TRUE;
}
-/* Arm code calling a Thumb function. */
+/* Populate an Arm to Thumb stub. Returns the stub symbol. */
-static int
-elf32_arm_to_thumb_stub (struct bfd_link_info * info,
- const char * name,
- bfd * input_bfd,
- bfd * output_bfd,
- asection * input_section,
- bfd_byte * hit_data,
- asection * sym_sec,
- bfd_vma offset,
- bfd_signed_vma addend,
- bfd_vma val)
+static struct elf_link_hash_entry *
+elf32_arm_create_thumb_stub (struct bfd_link_info * info,
+ const char * name,
+ bfd * input_bfd,
+ bfd * output_bfd,
+ asection * sym_sec,
+ bfd_vma val,
+ asection *s,
+ char **error_message)
{
- unsigned long int tmp;
bfd_vma my_offset;
- asection * s;
long int ret_offset;
struct elf_link_hash_entry * myh;
struct elf32_arm_link_hash_table * globals;
- myh = find_arm_glue (info, name, input_bfd);
+ myh = find_arm_glue (info, name, error_message);
if (myh == NULL)
- return FALSE;
+ return NULL;
globals = elf32_arm_hash_table (info);
@@ -2785,11 +4145,6 @@ elf32_arm_to_thumb_stub (struct bfd_link_info * info,
BFD_ASSERT (globals->bfd_of_glue_owner != NULL);
my_offset = myh->root.u.def.value;
- s = bfd_get_section_by_name (globals->bfd_of_glue_owner,
- ARM2THUMB_GLUE_SECTION_NAME);
- BFD_ASSERT (s != NULL);
- BFD_ASSERT (s->contents != NULL);
- BFD_ASSERT (s->output_section != NULL);
if ((my_offset & 0x01) == 0x01)
{
@@ -2806,18 +4161,19 @@ elf32_arm_to_thumb_stub (struct bfd_link_info * info,
--my_offset;
myh->root.u.def.value = my_offset;
- if ((info->shared || globals->root.is_relocatable_executable))
+ if (info->shared || globals->root.is_relocatable_executable
+ || globals->pic_veneer)
{
/* For relocatable objects we can't use absolute addresses,
so construct the address from a relative offset. */
/* TODO: If the offset is small it's probably worth
constructing the address with adds. */
- bfd_put_32 (output_bfd, (bfd_vma) a2t1p_ldr_insn,
- s->contents + my_offset);
- bfd_put_32 (output_bfd, (bfd_vma) a2t2p_add_pc_insn,
- s->contents + my_offset + 4);
- bfd_put_32 (output_bfd, (bfd_vma) a2t3p_bx_r12_insn,
- s->contents + my_offset + 8);
+ put_arm_insn (globals, output_bfd, (bfd_vma) a2t1p_ldr_insn,
+ s->contents + my_offset);
+ put_arm_insn (globals, output_bfd, (bfd_vma) a2t2p_add_pc_insn,
+ s->contents + my_offset + 4);
+ put_arm_insn (globals, output_bfd, (bfd_vma) a2t3p_bx_r12_insn,
+ s->contents + my_offset + 8);
/* Adjust the offset by 4 for the position of the add,
and 8 for the pipeline offset. */
ret_offset = (val - (s->output_offset
@@ -2827,13 +4183,22 @@ elf32_arm_to_thumb_stub (struct bfd_link_info * info,
bfd_put_32 (output_bfd, ret_offset,
s->contents + my_offset + 12);
}
- else
+ else if (globals->use_blx)
{
- bfd_put_32 (output_bfd, (bfd_vma) a2t1_ldr_insn,
- s->contents + my_offset);
+ put_arm_insn (globals, output_bfd, (bfd_vma) a2t1v5_ldr_insn,
+ s->contents + my_offset);
- bfd_put_32 (output_bfd, (bfd_vma) a2t2_bx_r12_insn,
+ /* It's a thumb address. Add the low order bit. */
+ bfd_put_32 (output_bfd, val | a2t2v5_func_addr_insn,
s->contents + my_offset + 4);
+ }
+ else
+ {
+ put_arm_insn (globals, output_bfd, (bfd_vma) a2t1_ldr_insn,
+ s->contents + my_offset);
+
+ put_arm_insn (globals, output_bfd, (bfd_vma) a2t2_bx_r12_insn,
+ s->contents + my_offset + 4);
/* It's a thumb address. Add the low order bit. */
bfd_put_32 (output_bfd, val | a2t3_func_addr_insn,
@@ -2843,6 +4208,48 @@ elf32_arm_to_thumb_stub (struct bfd_link_info * info,
BFD_ASSERT (my_offset <= globals->arm_glue_size);
+ return myh;
+}
+
+/* Arm code calling a Thumb function. */
+
+static int
+elf32_arm_to_thumb_stub (struct bfd_link_info * info,
+ const char * name,
+ bfd * input_bfd,
+ bfd * output_bfd,
+ asection * input_section,
+ bfd_byte * hit_data,
+ asection * sym_sec,
+ bfd_vma offset,
+ bfd_signed_vma addend,
+ bfd_vma val,
+ char **error_message)
+{
+ unsigned long int tmp;
+ bfd_vma my_offset;
+ asection * s;
+ long int ret_offset;
+ struct elf_link_hash_entry * myh;
+ struct elf32_arm_link_hash_table * globals;
+
+ globals = elf32_arm_hash_table (info);
+
+ BFD_ASSERT (globals != NULL);
+ BFD_ASSERT (globals->bfd_of_glue_owner != NULL);
+
+ s = bfd_get_section_by_name (globals->bfd_of_glue_owner,
+ ARM2THUMB_GLUE_SECTION_NAME);
+ BFD_ASSERT (s != NULL);
+ BFD_ASSERT (s->contents != NULL);
+ BFD_ASSERT (s->output_section != NULL);
+
+ myh = elf32_arm_create_thumb_stub (info, name, input_bfd, output_bfd,
+ sym_sec, val, s, error_message);
+ if (!myh)
+ return FALSE;
+
+ my_offset = myh->root.u.def.value;
tmp = bfd_get_32 (input_bfd, hit_data);
tmp = tmp & 0xFF000000;
@@ -2862,6 +4269,70 @@ elf32_arm_to_thumb_stub (struct bfd_link_info * info,
return TRUE;
}
+/* Populate Arm stub for an exported Thumb function. */
+
+static bfd_boolean
+elf32_arm_to_thumb_export_stub (struct elf_link_hash_entry *h, void * inf)
+{
+ struct bfd_link_info * info = (struct bfd_link_info *) inf;
+ asection * s;
+ struct elf_link_hash_entry * myh;
+ struct elf32_arm_link_hash_entry *eh;
+ struct elf32_arm_link_hash_table * globals;
+ asection *sec;
+ bfd_vma val;
+ char *error_message;
+
+ eh = elf32_arm_hash_entry(h);
+ /* Allocate stubs for exported Thumb functions on v4t. */
+ if (eh->export_glue == NULL)
+ return TRUE;
+
+ globals = elf32_arm_hash_table (info);
+
+ BFD_ASSERT (globals != NULL);
+ BFD_ASSERT (globals->bfd_of_glue_owner != NULL);
+
+ s = bfd_get_section_by_name (globals->bfd_of_glue_owner,
+ ARM2THUMB_GLUE_SECTION_NAME);
+ BFD_ASSERT (s != NULL);
+ BFD_ASSERT (s->contents != NULL);
+ BFD_ASSERT (s->output_section != NULL);
+
+ sec = eh->export_glue->root.u.def.section;
+
+ BFD_ASSERT (sec->output_section != NULL);
+
+ val = eh->export_glue->root.u.def.value + sec->output_offset
+ + sec->output_section->vma;
+ myh = elf32_arm_create_thumb_stub (info, h->root.root.string,
+ h->root.u.def.section->owner,
+ globals->obfd, sec, val, s,
+ &error_message);
+ BFD_ASSERT (myh);
+ return TRUE;
+}
+
+/* Generate Arm stubs for exported Thumb symbols. */
+static void
+elf32_arm_begin_write_processing (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *link_info)
+{
+ struct elf32_arm_link_hash_table * globals;
+
+ if (!link_info)
+ return;
+
+ globals = elf32_arm_hash_table (link_info);
+ /* If blx is available then exported Thumb symbols are OK and there is
+ nothing to do. */
+ if (globals->use_blx)
+ return;
+
+ elf_link_hash_traverse (&globals->root, elf32_arm_to_thumb_export_stub,
+ link_info);
+}
+
/* Some relocations map to different relocations depending on the
target. Return the real relocation. */
static int
@@ -2927,6 +4398,83 @@ elf32_arm_abs12_reloc (bfd *abfd, void *data, bfd_vma value)
return bfd_reloc_ok;
}
+/* For a given value of n, calculate the value of G_n as required to
+ deal with group relocations. We return it in the form of an
+ encoded constant-and-rotation, together with the final residual. If n is
+ specified as less than zero, then final_residual is filled with the
+ input value and no further action is performed. */
+
+static bfd_vma
+calculate_group_reloc_mask (bfd_vma value, int n, bfd_vma *final_residual)
+{
+ int current_n;
+ bfd_vma g_n;
+ bfd_vma encoded_g_n = 0;
+ bfd_vma residual = value; /* Also known as Y_n. */
+
+ for (current_n = 0; current_n <= n; current_n++)
+ {
+ int shift;
+
+ /* Calculate which part of the value to mask. */
+ if (residual == 0)
+ shift = 0;
+ else
+ {
+ int msb;
+
+ /* Determine the most significant bit in the residual and
+ align the resulting value to a 2-bit boundary. */
+ for (msb = 30; msb >= 0; msb -= 2)
+ if (residual & (3 << msb))
+ break;
+
+ /* The desired shift is now (msb - 6), or zero, whichever
+ is the greater. */
+ shift = msb - 6;
+ if (shift < 0)
+ shift = 0;
+ }
+
+ /* Calculate g_n in 32-bit as well as encoded constant+rotation form. */
+ g_n = residual & (0xff << shift);
+ encoded_g_n = (g_n >> shift)
+ | ((g_n <= 0xff ? 0 : (32 - shift) / 2) << 8);
+
+ /* Calculate the residual for the next time around. */
+ residual &= ~g_n;
+ }
+
+ *final_residual = residual;
+
+ return encoded_g_n;
+}
+
+/* Given an ARM instruction, determine whether it is an ADD or a SUB.
+ Returns 1 if it is an ADD, -1 if it is a SUB, and 0 otherwise. */
+static int
+identify_add_or_sub(bfd_vma insn)
+{
+ int opcode = insn & 0x1e00000;
+
+ if (opcode == 1 << 23) /* ADD */
+ return 1;
+
+ if (opcode == 1 << 22) /* SUB */
+ return -1;
+
+ return 0;
+}
+
+/* Determine if we're dealing with a Thumb-2 object. */
+
+static int using_thumb2 (struct elf32_arm_link_hash_table *globals)
+{
+ int arch = bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC,
+ Tag_CPU_arch);
+ return arch == TAG_CPU_ARCH_V6T2 || arch >= TAG_CPU_ARCH_V7;
+}
+
/* Perform a relocation as part of a final link. */
static bfd_reloc_status_type
@@ -2942,7 +4490,8 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
const char * sym_name,
int sym_flags,
struct elf_link_hash_entry * h,
- bfd_boolean * unresolved_reloc_p)
+ bfd_boolean * unresolved_reloc_p,
+ char **error_message)
{
unsigned long r_type = howto->type;
unsigned long r_symndx;
@@ -3019,23 +4568,20 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
case R_ARM_PC24:
case R_ARM_ABS32:
+ case R_ARM_ABS32_NOI:
case R_ARM_REL32:
+ case R_ARM_REL32_NOI:
case R_ARM_CALL:
case R_ARM_JUMP24:
case R_ARM_XPC25:
case R_ARM_PREL31:
case R_ARM_PLT32:
- /* r_symndx will be zero only for relocs against symbols
- from removed linkonce sections, or sections discarded by
- a linker script. */
- if (r_symndx == 0)
- return bfd_reloc_ok;
-
/* Handle relocations which should use the PLT entry. ABS32/REL32
will use the symbol's value, which may point to a PLT entry, but we
don't need to handle that here. If we created a PLT entry, all
branches in this object should go to it. */
- if ((r_type != R_ARM_ABS32 && r_type != R_ARM_REL32)
+ if ((r_type != R_ARM_ABS32 && r_type != R_ARM_REL32
+ && r_type != R_ARM_ABS32_NOI && r_type != R_ARM_REL32_NOI)
&& h != NULL
&& splt != NULL
&& h->plt.offset != (bfd_vma) -1)
@@ -3059,7 +4605,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
run time. */
if ((info->shared || globals->root.is_relocatable_executable)
&& (input_section->flags & SEC_ALLOC)
- && (r_type != R_ARM_REL32
+ && ((r_type != R_ARM_REL32 && r_type != R_ARM_REL32_NOI)
|| !SYMBOL_CALLS_LOCAL (info, h))
&& (h == NULL
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
@@ -3124,6 +4670,8 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
value |= 1;
if (globals->symbian_p)
{
+ asection *osec;
+
/* On Symbian OS, the data segment and text segement
can be relocated independently. Therefore, we
must indicate the segment to which this
@@ -3131,11 +4679,27 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
use any symbol in the right segment; we just use
the section symbol as it is convenient. (We
cannot use the symbol given by "h" directly as it
- will not appear in the dynamic symbol table.) */
+ will not appear in the dynamic symbol table.)
+
+ Note that the dynamic linker ignores the section
+ symbol value, so we don't subtract osec->vma
+ from the emitted reloc addend. */
if (sym_sec)
- symbol = elf_section_data (sym_sec->output_section)->dynindx;
+ osec = sym_sec->output_section;
else
- symbol = elf_section_data (input_section->output_section)->dynindx;
+ osec = input_section->output_section;
+ symbol = elf_section_data (osec)->dynindx;
+ if (symbol == 0)
+ {
+ struct elf_link_hash_table *htab = elf_hash_table (info);
+
+ if ((osec->flags & SEC_READONLY) == 0
+ && htab->data_index_section != NULL)
+ osec = htab->data_index_section;
+ else
+ osec = htab->text_index_section;
+ symbol = elf_section_data (osec)->dynindx;
+ }
BFD_ASSERT (symbol != 0);
}
else
@@ -3190,11 +4754,14 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
/* Check for Arm calling Thumb function. */
if (sym_flags == STT_ARM_TFUNC)
{
- elf32_arm_to_thumb_stub (info, sym_name, input_bfd,
- output_bfd, input_section,
- hit_data, sym_sec, rel->r_offset,
- signed_addend, value);
- return bfd_reloc_ok;
+ if (elf32_arm_to_thumb_stub (info, sym_name, input_bfd,
+ output_bfd, input_section,
+ hit_data, sym_sec, rel->r_offset,
+ signed_addend, value,
+ error_message))
+ return bfd_reloc_ok;
+ else
+ return bfd_reloc_dangerous;
}
}
@@ -3229,40 +4796,43 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
signed_addend = value;
signed_addend >>= howto->rightshift;
- /* It is not an error for an undefined weak reference to be
- out of range. Any program that branches to such a symbol
- is going to crash anyway, so there is no point worrying
- about getting the destination exactly right. */
- if (! h || h->root.type != bfd_link_hash_undefweak)
+ /* A branch to an undefined weak symbol is turned into a jump to
+ the next instruction. */
+ if (h && h->root.type == bfd_link_hash_undefweak)
+ {
+ value = (bfd_get_32 (input_bfd, hit_data) & 0xf0000000)
+ | 0x0affffff;
+ }
+ else
{
/* Perform a signed range check. */
if ( signed_addend > ((bfd_signed_vma) (howto->dst_mask >> 1))
|| signed_addend < - ((bfd_signed_vma) ((howto->dst_mask + 1) >> 1)))
return bfd_reloc_overflow;
- }
- addend = (value & 2);
+ addend = (value & 2);
- value = (signed_addend & howto->dst_mask)
- | (bfd_get_32 (input_bfd, hit_data) & (~ howto->dst_mask));
+ value = (signed_addend & howto->dst_mask)
+ | (bfd_get_32 (input_bfd, hit_data) & (~ howto->dst_mask));
- /* Set the H bit in the BLX instruction. */
- if (sym_flags == STT_ARM_TFUNC)
- {
- if (addend)
- value |= (1 << 24);
- else
- value &= ~(bfd_vma)(1 << 24);
- }
- if (r_type == R_ARM_CALL)
- {
- /* Select the correct instruction (BL or BLX). */
+ /* Set the H bit in the BLX instruction. */
if (sym_flags == STT_ARM_TFUNC)
- value |= (1 << 28);
- else
{
- value &= ~(bfd_vma)(1 << 28);
- value |= (1 << 24);
+ if (addend)
+ value |= (1 << 24);
+ else
+ value &= ~(bfd_vma)(1 << 24);
+ }
+ if (r_type == R_ARM_CALL)
+ {
+ /* Select the correct instruction (BL or BLX). */
+ if (sym_flags == STT_ARM_TFUNC)
+ value |= (1 << 28);
+ else
+ {
+ value &= ~(bfd_vma)(1 << 28);
+ value |= (1 << 24);
+ }
}
}
break;
@@ -3273,6 +4843,10 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
value |= 1;
break;
+ case R_ARM_ABS32_NOI:
+ value += addend;
+ break;
+
case R_ARM_REL32:
value += addend;
if (sym_flags == STT_ARM_TFUNC)
@@ -3281,6 +4855,12 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
+ input_section->output_offset + rel->r_offset);
break;
+ case R_ARM_REL32_NOI:
+ value += addend;
+ value -= (input_section->output_section->vma
+ + input_section->output_offset + rel->r_offset);
+ break;
+
case R_ARM_PREL31:
value -= (input_section->output_section->vma
+ input_section->output_offset + rel->r_offset);
@@ -3338,27 +4918,122 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
bfd_put_16 (input_bfd, value, hit_data);
return bfd_reloc_ok;
+ case R_ARM_THM_ALU_PREL_11_0:
+ /* Corresponds to: addw.w reg, pc, #offset (and similarly for subw). */
+ {
+ bfd_vma insn;
+ bfd_signed_vma relocation;
+
+ insn = (bfd_get_16 (input_bfd, hit_data) << 16)
+ | bfd_get_16 (input_bfd, hit_data + 2);
+
+ if (globals->use_rel)
+ {
+ signed_addend = (insn & 0xff) | ((insn & 0x7000) >> 4)
+ | ((insn & (1 << 26)) >> 15);
+ if (insn & 0xf00000)
+ signed_addend = -signed_addend;
+ }
+
+ relocation = value + signed_addend;
+ relocation -= (input_section->output_section->vma
+ + input_section->output_offset
+ + rel->r_offset);
+
+ value = abs (relocation);
+
+ if (value >= 0x1000)
+ return bfd_reloc_overflow;
+
+ insn = (insn & 0xfb0f8f00) | (value & 0xff)
+ | ((value & 0x700) << 4)
+ | ((value & 0x800) << 15);
+ if (relocation < 0)
+ insn |= 0xa00000;
+
+ bfd_put_16 (input_bfd, insn >> 16, hit_data);
+ bfd_put_16 (input_bfd, insn & 0xffff, hit_data + 2);
+
+ return bfd_reloc_ok;
+ }
+
+ case R_ARM_THM_PC12:
+ /* Corresponds to: ldr.w reg, [pc, #offset]. */
+ {
+ bfd_vma insn;
+ bfd_signed_vma relocation;
+
+ insn = (bfd_get_16 (input_bfd, hit_data) << 16)
+ | bfd_get_16 (input_bfd, hit_data + 2);
+
+ if (globals->use_rel)
+ {
+ signed_addend = insn & 0xfff;
+ if (!(insn & (1 << 23)))
+ signed_addend = -signed_addend;
+ }
+
+ relocation = value + signed_addend;
+ relocation -= (input_section->output_section->vma
+ + input_section->output_offset
+ + rel->r_offset);
+
+ value = abs (relocation);
+
+ if (value >= 0x1000)
+ return bfd_reloc_overflow;
+
+ insn = (insn & 0xff7ff000) | value;
+ if (relocation >= 0)
+ insn |= (1 << 23);
+
+ bfd_put_16 (input_bfd, insn >> 16, hit_data);
+ bfd_put_16 (input_bfd, insn & 0xffff, hit_data + 2);
+
+ return bfd_reloc_ok;
+ }
+
case R_ARM_THM_XPC22:
case R_ARM_THM_CALL:
/* Thumb BL (branch long instruction). */
{
bfd_vma relocation;
+ bfd_vma reloc_sign;
bfd_boolean overflow = FALSE;
bfd_vma upper_insn = bfd_get_16 (input_bfd, hit_data);
bfd_vma lower_insn = bfd_get_16 (input_bfd, hit_data + 2);
- bfd_signed_vma reloc_signed_max = ((1 << (howto->bitsize - 1)) - 1) >> howto->rightshift;
- bfd_signed_vma reloc_signed_min = ~ reloc_signed_max;
+ bfd_signed_vma reloc_signed_max;
+ bfd_signed_vma reloc_signed_min;
bfd_vma check;
bfd_signed_vma signed_check;
+ int bitsize;
+ int thumb2 = using_thumb2 (globals);
+
+ /* A branch to an undefined weak symbol is turned into a jump to
+ the next instruction. */
+ if (h && h->root.type == bfd_link_hash_undefweak)
+ {
+ bfd_put_16 (input_bfd, 0xe000, hit_data);
+ bfd_put_16 (input_bfd, 0xbf00, hit_data + 2);
+ return bfd_reloc_ok;
+ }
- /* Need to refetch the addend and squish the two 11 bit pieces
- together. */
+ /* Fetch the addend. We use the Thumb-2 encoding (backwards compatible
+ with Thumb-1) involving the J1 and J2 bits. */
if (globals->use_rel)
{
- bfd_vma upper = upper_insn & 0x7ff;
- bfd_vma lower = lower_insn & 0x7ff;
- upper = (upper ^ 0x400) - 0x400; /* Sign extend. */
- addend = (upper << 12) | (lower << 1);
+ bfd_vma s = (upper_insn & (1 << 10)) >> 10;
+ bfd_vma upper = upper_insn & 0x3ff;
+ bfd_vma lower = lower_insn & 0x7ff;
+ bfd_vma j1 = (lower_insn & (1 << 13)) >> 13;
+ bfd_vma j2 = (lower_insn & (1 << 11)) >> 11;
+ bfd_vma i1 = j1 ^ s ? 0 : 1;
+ bfd_vma i2 = j2 ^ s ? 0 : 1;
+
+ addend = (i1 << 23) | (i2 << 22) | (upper << 12) | (lower << 1);
+ /* Sign extend. */
+ addend = (addend | ((s ? 0 : 1) << 24)) - (1 << 24);
+
signed_addend = addend;
}
@@ -3390,7 +5065,8 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
}
else if (elf32_thumb_to_arm_stub
(info, sym_name, input_bfd, output_bfd, input_section,
- hit_data, sym_sec, rel->r_offset, signed_addend, value))
+ hit_data, sym_sec, rel->r_offset, signed_addend, value,
+ error_message))
return bfd_reloc_ok;
else
return bfd_reloc_dangerous;
@@ -3435,6 +5111,15 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
else
signed_check = check | ~((bfd_vma) -1 >> howto->rightshift);
+ /* Calculate the permissable maximum and minimum values for
+ this relocation according to whether we're relocating for
+ Thumb-2 or not. */
+ bitsize = howto->bitsize;
+ if (!thumb2)
+ bitsize -= 2;
+ reloc_signed_max = ((1 << (bitsize - 1)) - 1) >> howto->rightshift;
+ reloc_signed_min = ~reloc_signed_max;
+
/* Assumes two's complement. */
if (signed_check > reloc_signed_max || signed_check < reloc_signed_min)
overflow = TRUE;
@@ -3446,9 +5131,17 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
1 of the base address. */
relocation = (relocation + 2) & ~ 3;
- /* Put RELOCATION back into the insn. */
- upper_insn = (upper_insn & ~(bfd_vma) 0x7ff) | ((relocation >> 12) & 0x7ff);
- lower_insn = (lower_insn & ~(bfd_vma) 0x7ff) | ((relocation >> 1) & 0x7ff);
+ /* Put RELOCATION back into the insn. Assumes two's complement.
+ We use the Thumb-2 encoding, which is safe even if dealing with
+ a Thumb-1 instruction by virtue of our overflow check above. */
+ reloc_sign = (signed_check < 0) ? 1 : 0;
+ upper_insn = (upper_insn & ~(bfd_vma) 0x7ff)
+ | ((relocation >> 12) & 0x3ff)
+ | (reloc_sign << 10);
+ lower_insn = (lower_insn & ~(bfd_vma) 0x2fff)
+ | (((!((relocation >> 23) & 1)) ^ reloc_sign) << 13)
+ | (((!((relocation >> 22) & 1)) ^ reloc_sign) << 11)
+ | ((relocation >> 1) & 0x7ff);
/* Put the relocated value back in the object file: */
bfd_put_16 (input_bfd, upper_insn, hit_data);
@@ -3538,9 +5231,8 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
bfd_boolean overflow = FALSE;
bfd_vma upper_insn = bfd_get_16 (input_bfd, hit_data);
bfd_vma lower_insn = bfd_get_16 (input_bfd, hit_data + 2);
- bfd_signed_vma reloc_signed_max = ((1 << (howto->bitsize - 1)) - 1) >> howto->rightshift;
- bfd_signed_vma reloc_signed_min = ~ reloc_signed_max;
- bfd_vma check;
+ bfd_signed_vma reloc_signed_max = 0xffffe;
+ bfd_signed_vma reloc_signed_min = -0x100000;
bfd_signed_vma signed_check;
/* Need to refetch the addend, reconstruct the top three bits,
@@ -3548,14 +5240,14 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
if (globals->use_rel)
{
bfd_vma S = (upper_insn & 0x0400) >> 10;
- bfd_vma upper = (upper_insn & 0x001f);
+ bfd_vma upper = (upper_insn & 0x003f);
bfd_vma J1 = (lower_insn & 0x2000) >> 13;
bfd_vma J2 = (lower_insn & 0x0800) >> 11;
bfd_vma lower = (lower_insn & 0x07ff);
- upper |= J2 << 6;
- upper |= J1 << 7;
- upper |= ~S << 8;
+ upper |= J1 << 6;
+ upper |= J2 << 7;
+ upper |= (!S) << 8;
upper -= 0x0100; /* Sign extend. */
addend = (upper << 12) | (lower << 1);
@@ -3569,17 +5261,8 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
relocation -= (input_section->output_section->vma
+ input_section->output_offset
+ rel->r_offset);
+ signed_check = (bfd_signed_vma) relocation;
- check = relocation >> howto->rightshift;
-
- /* If this is a signed value, the rightshift just dropped
- leading 1 bits (assuming twos complement). */
- if ((bfd_signed_vma) relocation >= 0)
- signed_check = check;
- else
- signed_check = check | ~((bfd_vma) -1 >> howto->rightshift);
-
- /* Assumes two's complement. */
if (signed_check > reloc_signed_max || signed_check < reloc_signed_min)
overflow = TRUE;
@@ -3591,7 +5274,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
bfd_vma hi = (relocation & 0x0003f000) >> 12;
bfd_vma lo = (relocation & 0x00000ffe) >> 1;
- upper_insn = (upper_insn & 0xfb30) | (S << 10) | hi;
+ upper_insn = (upper_insn & 0xfbc0) | (S << 10) | hi;
lower_insn = (lower_insn & 0xd000) | (J1 << 13) | (J2 << 11) | lo;
}
@@ -4080,199 +5763,499 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
}
return bfd_reloc_ok;
- default:
- return bfd_reloc_notsupported;
- }
-}
+ case R_ARM_MOVW_ABS_NC:
+ case R_ARM_MOVT_ABS:
+ case R_ARM_MOVW_PREL_NC:
+ case R_ARM_MOVT_PREL:
+ /* Until we properly support segment-base-relative addressing then
+ we assume the segment base to be zero, as for the group relocations.
+ Thus R_ARM_MOVW_BREL_NC has the same semantics as R_ARM_MOVW_ABS_NC
+ and R_ARM_MOVT_BREL has the same semantics as R_ARM_MOVT_ABS. */
+ case R_ARM_MOVW_BREL_NC:
+ case R_ARM_MOVW_BREL:
+ case R_ARM_MOVT_BREL:
+ {
+ bfd_vma insn = bfd_get_32 (input_bfd, hit_data);
+ if (globals->use_rel)
+ {
+ addend = ((insn >> 4) & 0xf000) | (insn & 0xfff);
+ signed_addend = (addend ^ 0x10000) - 0x10000;
+ }
-static int
-uleb128_size (unsigned int i)
-{
- int size;
- size = 1;
- while (i >= 0x80)
- {
- i >>= 7;
- size++;
- }
- return size;
-}
+ value += signed_addend;
-/* Return TRUE if the attribute has the default value (0/""). */
-static bfd_boolean
-is_default_attr (aeabi_attribute *attr)
-{
- if ((attr->type & 1) && attr->i != 0)
- return FALSE;
- if ((attr->type & 2) && attr->s && *attr->s)
- return FALSE;
+ if (r_type == R_ARM_MOVW_PREL_NC || r_type == R_ARM_MOVT_PREL)
+ value -= (input_section->output_section->vma
+ + input_section->output_offset + rel->r_offset);
- return TRUE;
-}
+ if (r_type == R_ARM_MOVW_BREL && value >= 0x10000)
+ return bfd_reloc_overflow;
-/* Return the size of a single attribute. */
-static bfd_vma
-eabi_attr_size(int tag, aeabi_attribute *attr)
-{
- bfd_vma size;
+ if (sym_flags == STT_ARM_TFUNC)
+ value |= 1;
- if (is_default_attr (attr))
- return 0;
+ if (r_type == R_ARM_MOVT_ABS || r_type == R_ARM_MOVT_PREL
+ || r_type == R_ARM_MOVT_BREL)
+ value >>= 16;
- size = uleb128_size (tag);
- if (attr->type & 1)
- size += uleb128_size (attr->i);
- if (attr->type & 2)
- size += strlen ((char *)attr->s) + 1;
- return size;
-}
-
-/* Returns the size of the eabi object attributess section. */
-bfd_vma
-elf32_arm_eabi_attr_size (bfd *abfd)
-{
- bfd_vma size;
- aeabi_attribute *attr;
- aeabi_attribute_list *list;
- int i;
+ insn &= 0xfff0f000;
+ insn |= value & 0xfff;
+ insn |= (value & 0xf000) << 4;
+ bfd_put_32 (input_bfd, insn, hit_data);
+ }
+ return bfd_reloc_ok;
+
+ case R_ARM_THM_MOVW_ABS_NC:
+ case R_ARM_THM_MOVT_ABS:
+ case R_ARM_THM_MOVW_PREL_NC:
+ case R_ARM_THM_MOVT_PREL:
+ /* Until we properly support segment-base-relative addressing then
+ we assume the segment base to be zero, as for the above relocations.
+ Thus R_ARM_THM_MOVW_BREL_NC has the same semantics as
+ R_ARM_THM_MOVW_ABS_NC and R_ARM_THM_MOVT_BREL has the same semantics
+ as R_ARM_THM_MOVT_ABS. */
+ case R_ARM_THM_MOVW_BREL_NC:
+ case R_ARM_THM_MOVW_BREL:
+ case R_ARM_THM_MOVT_BREL:
+ {
+ bfd_vma insn;
+
+ insn = bfd_get_16 (input_bfd, hit_data) << 16;
+ insn |= bfd_get_16 (input_bfd, hit_data + 2);
- attr = elf32_arm_tdata (abfd)->known_eabi_attributes;
- size = 16; /* 'A' <size> "aeabi" 0x1 <size>. */
- for (i = 4; i < NUM_KNOWN_ATTRIBUTES; i++)
- size += eabi_attr_size (i, &attr[i]);
+ if (globals->use_rel)
+ {
+ addend = ((insn >> 4) & 0xf000)
+ | ((insn >> 15) & 0x0800)
+ | ((insn >> 4) & 0x0700)
+ | (insn & 0x00ff);
+ signed_addend = (addend ^ 0x10000) - 0x10000;
+ }
- for (list = elf32_arm_tdata (abfd)->other_eabi_attributes;
- list;
- list = list->next)
- size += eabi_attr_size (list->tag, &list->attr);
+ value += signed_addend;
- return size;
-}
+ if (r_type == R_ARM_THM_MOVW_PREL_NC || r_type == R_ARM_THM_MOVT_PREL)
+ value -= (input_section->output_section->vma
+ + input_section->output_offset + rel->r_offset);
-static bfd_byte *
-write_uleb128 (bfd_byte *p, unsigned int val)
-{
- bfd_byte c;
- do
- {
- c = val & 0x7f;
- val >>= 7;
- if (val)
- c |= 0x80;
- *(p++) = c;
- }
- while (val);
- return p;
-}
+ if (r_type == R_ARM_THM_MOVW_BREL && value >= 0x10000)
+ return bfd_reloc_overflow;
-/* Write attribute ATTR to butter P, and return a pointer to the following
- byte. */
-static bfd_byte *
-write_eabi_attribute (bfd_byte *p, int tag, aeabi_attribute *attr)
-{
- /* Suppress default entries. */
- if (is_default_attr(attr))
- return p;
-
- p = write_uleb128 (p, tag);
- if (attr->type & 1)
- p = write_uleb128 (p, attr->i);
- if (attr->type & 2)
- {
- int len;
+ if (sym_flags == STT_ARM_TFUNC)
+ value |= 1;
- len = strlen (attr->s) + 1;
- memcpy (p, attr->s, len);
- p += len;
- }
+ if (r_type == R_ARM_THM_MOVT_ABS || r_type == R_ARM_THM_MOVT_PREL
+ || r_type == R_ARM_THM_MOVT_BREL)
+ value >>= 16;
- return p;
-}
+ insn &= 0xfbf08f00;
+ insn |= (value & 0xf000) << 4;
+ insn |= (value & 0x0800) << 15;
+ insn |= (value & 0x0700) << 4;
+ insn |= (value & 0x00ff);
-/* Write the contents of the eabi attributes section to p. */
-void
-elf32_arm_set_eabi_attr_contents (bfd *abfd, bfd_byte *contents, bfd_vma size)
-{
- bfd_byte *p;
- aeabi_attribute *attr;
- aeabi_attribute_list *list;
- int i;
+ bfd_put_16 (input_bfd, insn >> 16, hit_data);
+ bfd_put_16 (input_bfd, insn & 0xffff, hit_data + 2);
+ }
+ return bfd_reloc_ok;
- p = contents;
- *(p++) = 'A';
- bfd_put_32 (abfd, size - 1, p);
- p += 4;
- memcpy (p, "aeabi", 6);
- p += 6;
- *(p++) = Tag_File;
- bfd_put_32 (abfd, size - 11, p);
- p += 4;
-
- attr = elf32_arm_tdata (abfd)->known_eabi_attributes;
- for (i = 4; i < NUM_KNOWN_ATTRIBUTES; i++)
- p = write_eabi_attribute (p, i, &attr[i]);
-
- for (list = elf32_arm_tdata (abfd)->other_eabi_attributes;
- list;
- list = list->next)
- p = write_eabi_attribute (p, list->tag, &list->attr);
-}
+ case R_ARM_ALU_PC_G0_NC:
+ case R_ARM_ALU_PC_G1_NC:
+ case R_ARM_ALU_PC_G0:
+ case R_ARM_ALU_PC_G1:
+ case R_ARM_ALU_PC_G2:
+ case R_ARM_ALU_SB_G0_NC:
+ case R_ARM_ALU_SB_G1_NC:
+ case R_ARM_ALU_SB_G0:
+ case R_ARM_ALU_SB_G1:
+ case R_ARM_ALU_SB_G2:
+ {
+ bfd_vma insn = bfd_get_32 (input_bfd, hit_data);
+ bfd_vma pc = input_section->output_section->vma
+ + input_section->output_offset + rel->r_offset;
+ /* sb should be the origin of the *segment* containing the symbol.
+ It is not clear how to obtain this OS-dependent value, so we
+ make an arbitrary choice of zero. */
+ bfd_vma sb = 0;
+ bfd_vma residual;
+ bfd_vma g_n;
+ bfd_signed_vma signed_value;
+ int group = 0;
+
+ /* Determine which group of bits to select. */
+ switch (r_type)
+ {
+ case R_ARM_ALU_PC_G0_NC:
+ case R_ARM_ALU_PC_G0:
+ case R_ARM_ALU_SB_G0_NC:
+ case R_ARM_ALU_SB_G0:
+ group = 0;
+ break;
+
+ case R_ARM_ALU_PC_G1_NC:
+ case R_ARM_ALU_PC_G1:
+ case R_ARM_ALU_SB_G1_NC:
+ case R_ARM_ALU_SB_G1:
+ group = 1;
+ break;
+
+ case R_ARM_ALU_PC_G2:
+ case R_ARM_ALU_SB_G2:
+ group = 2;
+ break;
+
+ default:
+ abort();
+ }
-/* Override final_link to handle EABI object attribute sections. */
+ /* If REL, extract the addend from the insn. If RELA, it will
+ have already been fetched for us. */
+ if (globals->use_rel)
+ {
+ int negative;
+ bfd_vma constant = insn & 0xff;
+ bfd_vma rotation = (insn & 0xf00) >> 8;
+
+ if (rotation == 0)
+ signed_addend = constant;
+ else
+ {
+ /* Compensate for the fact that in the instruction, the
+ rotation is stored in multiples of 2 bits. */
+ rotation *= 2;
+
+ /* Rotate "constant" right by "rotation" bits. */
+ signed_addend = (constant >> rotation) |
+ (constant << (8 * sizeof (bfd_vma) - rotation));
+ }
+
+ /* Determine if the instruction is an ADD or a SUB.
+ (For REL, this determines the sign of the addend.) */
+ negative = identify_add_or_sub (insn);
+ if (negative == 0)
+ {
+ (*_bfd_error_handler)
+ (_("%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group relocations"),
+ input_bfd, input_section,
+ (long) rel->r_offset, howto->name);
+ return bfd_reloc_overflow;
+ }
+
+ signed_addend *= negative;
+ }
-static bfd_boolean
-elf32_arm_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
-{
- asection *o;
- struct bfd_link_order *p;
- asection *attr_section = NULL;
- bfd_byte *contents;
- bfd_vma size = 0;
-
- /* elf32_arm_merge_private_bfd_data will already have merged the
- object attributes. Remove the input sections from the link, and set
- the contents of the output secton. */
- for (o = abfd->sections; o != NULL; o = o->next)
- {
- if (strcmp (o->name, ".ARM.attributes") == 0)
- {
- for (p = o->map_head.link_order; p != NULL; p = p->next)
- {
- asection *input_section;
-
- if (p->type != bfd_indirect_link_order)
- continue;
- input_section = p->u.indirect.section;
- /* Hack: reset the SEC_HAS_CONTENTS flag so that
- elf_link_input_bfd ignores this section. */
- input_section->flags &= ~SEC_HAS_CONTENTS;
- }
-
- size = elf32_arm_eabi_attr_size (abfd);
- bfd_set_section_size (abfd, o, size);
- attr_section = o;
- /* Skip this section later on. */
- o->map_head.link_order = NULL;
- }
- }
- /* Invoke the ELF linker to do all the work. */
- if (!bfd_elf_final_link (abfd, info))
- return FALSE;
+ /* Compute the value (X) to go in the place. */
+ if (r_type == R_ARM_ALU_PC_G0_NC
+ || r_type == R_ARM_ALU_PC_G1_NC
+ || r_type == R_ARM_ALU_PC_G0
+ || r_type == R_ARM_ALU_PC_G1
+ || r_type == R_ARM_ALU_PC_G2)
+ /* PC relative. */
+ signed_value = value - pc + signed_addend;
+ else
+ /* Section base relative. */
+ signed_value = value - sb + signed_addend;
+
+ /* If the target symbol is a Thumb function, then set the
+ Thumb bit in the address. */
+ if (sym_flags == STT_ARM_TFUNC)
+ signed_value |= 1;
+
+ /* Calculate the value of the relevant G_n, in encoded
+ constant-with-rotation format. */
+ g_n = calculate_group_reloc_mask (abs (signed_value), group,
+ &residual);
+
+ /* Check for overflow if required. */
+ if ((r_type == R_ARM_ALU_PC_G0
+ || r_type == R_ARM_ALU_PC_G1
+ || r_type == R_ARM_ALU_PC_G2
+ || r_type == R_ARM_ALU_SB_G0
+ || r_type == R_ARM_ALU_SB_G1
+ || r_type == R_ARM_ALU_SB_G2) && residual != 0)
+ {
+ (*_bfd_error_handler)
+ (_("%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s"),
+ input_bfd, input_section,
+ (long) rel->r_offset, abs (signed_value), howto->name);
+ return bfd_reloc_overflow;
+ }
- if (attr_section)
- {
- contents = bfd_malloc(size);
- if (contents == NULL)
- return FALSE;
- elf32_arm_set_eabi_attr_contents (abfd, contents, size);
- bfd_set_section_contents (abfd, attr_section, contents, 0, size);
- free (contents);
+ /* Mask out the value and the ADD/SUB part of the opcode; take care
+ not to destroy the S bit. */
+ insn &= 0xff1ff000;
+
+ /* Set the opcode according to whether the value to go in the
+ place is negative. */
+ if (signed_value < 0)
+ insn |= 1 << 22;
+ else
+ insn |= 1 << 23;
+
+ /* Encode the offset. */
+ insn |= g_n;
+
+ bfd_put_32 (input_bfd, insn, hit_data);
+ }
+ return bfd_reloc_ok;
+
+ case R_ARM_LDR_PC_G0:
+ case R_ARM_LDR_PC_G1:
+ case R_ARM_LDR_PC_G2:
+ case R_ARM_LDR_SB_G0:
+ case R_ARM_LDR_SB_G1:
+ case R_ARM_LDR_SB_G2:
+ {
+ bfd_vma insn = bfd_get_32 (input_bfd, hit_data);
+ bfd_vma pc = input_section->output_section->vma
+ + input_section->output_offset + rel->r_offset;
+ bfd_vma sb = 0; /* See note above. */
+ bfd_vma residual;
+ bfd_signed_vma signed_value;
+ int group = 0;
+
+ /* Determine which groups of bits to calculate. */
+ switch (r_type)
+ {
+ case R_ARM_LDR_PC_G0:
+ case R_ARM_LDR_SB_G0:
+ group = 0;
+ break;
+
+ case R_ARM_LDR_PC_G1:
+ case R_ARM_LDR_SB_G1:
+ group = 1;
+ break;
+
+ case R_ARM_LDR_PC_G2:
+ case R_ARM_LDR_SB_G2:
+ group = 2;
+ break;
+
+ default:
+ abort();
+ }
+
+ /* If REL, extract the addend from the insn. If RELA, it will
+ have already been fetched for us. */
+ if (globals->use_rel)
+ {
+ int negative = (insn & (1 << 23)) ? 1 : -1;
+ signed_addend = negative * (insn & 0xfff);
+ }
+
+ /* Compute the value (X) to go in the place. */
+ if (r_type == R_ARM_LDR_PC_G0
+ || r_type == R_ARM_LDR_PC_G1
+ || r_type == R_ARM_LDR_PC_G2)
+ /* PC relative. */
+ signed_value = value - pc + signed_addend;
+ else
+ /* Section base relative. */
+ signed_value = value - sb + signed_addend;
+
+ /* Calculate the value of the relevant G_{n-1} to obtain
+ the residual at that stage. */
+ calculate_group_reloc_mask (abs (signed_value), group - 1, &residual);
+
+ /* Check for overflow. */
+ if (residual >= 0x1000)
+ {
+ (*_bfd_error_handler)
+ (_("%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s"),
+ input_bfd, input_section,
+ (long) rel->r_offset, abs (signed_value), howto->name);
+ return bfd_reloc_overflow;
+ }
+
+ /* Mask out the value and U bit. */
+ insn &= 0xff7ff000;
+
+ /* Set the U bit if the value to go in the place is non-negative. */
+ if (signed_value >= 0)
+ insn |= 1 << 23;
+
+ /* Encode the offset. */
+ insn |= residual;
+
+ bfd_put_32 (input_bfd, insn, hit_data);
+ }
+ return bfd_reloc_ok;
+
+ case R_ARM_LDRS_PC_G0:
+ case R_ARM_LDRS_PC_G1:
+ case R_ARM_LDRS_PC_G2:
+ case R_ARM_LDRS_SB_G0:
+ case R_ARM_LDRS_SB_G1:
+ case R_ARM_LDRS_SB_G2:
+ {
+ bfd_vma insn = bfd_get_32 (input_bfd, hit_data);
+ bfd_vma pc = input_section->output_section->vma
+ + input_section->output_offset + rel->r_offset;
+ bfd_vma sb = 0; /* See note above. */
+ bfd_vma residual;
+ bfd_signed_vma signed_value;
+ int group = 0;
+
+ /* Determine which groups of bits to calculate. */
+ switch (r_type)
+ {
+ case R_ARM_LDRS_PC_G0:
+ case R_ARM_LDRS_SB_G0:
+ group = 0;
+ break;
+
+ case R_ARM_LDRS_PC_G1:
+ case R_ARM_LDRS_SB_G1:
+ group = 1;
+ break;
+
+ case R_ARM_LDRS_PC_G2:
+ case R_ARM_LDRS_SB_G2:
+ group = 2;
+ break;
+
+ default:
+ abort();
+ }
+
+ /* If REL, extract the addend from the insn. If RELA, it will
+ have already been fetched for us. */
+ if (globals->use_rel)
+ {
+ int negative = (insn & (1 << 23)) ? 1 : -1;
+ signed_addend = negative * (((insn & 0xf00) >> 4) + (insn & 0xf));
+ }
+
+ /* Compute the value (X) to go in the place. */
+ if (r_type == R_ARM_LDRS_PC_G0
+ || r_type == R_ARM_LDRS_PC_G1
+ || r_type == R_ARM_LDRS_PC_G2)
+ /* PC relative. */
+ signed_value = value - pc + signed_addend;
+ else
+ /* Section base relative. */
+ signed_value = value - sb + signed_addend;
+
+ /* Calculate the value of the relevant G_{n-1} to obtain
+ the residual at that stage. */
+ calculate_group_reloc_mask (abs (signed_value), group - 1, &residual);
+
+ /* Check for overflow. */
+ if (residual >= 0x100)
+ {
+ (*_bfd_error_handler)
+ (_("%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s"),
+ input_bfd, input_section,
+ (long) rel->r_offset, abs (signed_value), howto->name);
+ return bfd_reloc_overflow;
+ }
+
+ /* Mask out the value and U bit. */
+ insn &= 0xff7ff0f0;
+
+ /* Set the U bit if the value to go in the place is non-negative. */
+ if (signed_value >= 0)
+ insn |= 1 << 23;
+
+ /* Encode the offset. */
+ insn |= ((residual & 0xf0) << 4) | (residual & 0xf);
+
+ bfd_put_32 (input_bfd, insn, hit_data);
+ }
+ return bfd_reloc_ok;
+
+ case R_ARM_LDC_PC_G0:
+ case R_ARM_LDC_PC_G1:
+ case R_ARM_LDC_PC_G2:
+ case R_ARM_LDC_SB_G0:
+ case R_ARM_LDC_SB_G1:
+ case R_ARM_LDC_SB_G2:
+ {
+ bfd_vma insn = bfd_get_32 (input_bfd, hit_data);
+ bfd_vma pc = input_section->output_section->vma
+ + input_section->output_offset + rel->r_offset;
+ bfd_vma sb = 0; /* See note above. */
+ bfd_vma residual;
+ bfd_signed_vma signed_value;
+ int group = 0;
+
+ /* Determine which groups of bits to calculate. */
+ switch (r_type)
+ {
+ case R_ARM_LDC_PC_G0:
+ case R_ARM_LDC_SB_G0:
+ group = 0;
+ break;
+
+ case R_ARM_LDC_PC_G1:
+ case R_ARM_LDC_SB_G1:
+ group = 1;
+ break;
+
+ case R_ARM_LDC_PC_G2:
+ case R_ARM_LDC_SB_G2:
+ group = 2;
+ break;
+
+ default:
+ abort();
+ }
+
+ /* If REL, extract the addend from the insn. If RELA, it will
+ have already been fetched for us. */
+ if (globals->use_rel)
+ {
+ int negative = (insn & (1 << 23)) ? 1 : -1;
+ signed_addend = negative * ((insn & 0xff) << 2);
+ }
+
+ /* Compute the value (X) to go in the place. */
+ if (r_type == R_ARM_LDC_PC_G0
+ || r_type == R_ARM_LDC_PC_G1
+ || r_type == R_ARM_LDC_PC_G2)
+ /* PC relative. */
+ signed_value = value - pc + signed_addend;
+ else
+ /* Section base relative. */
+ signed_value = value - sb + signed_addend;
+
+ /* Calculate the value of the relevant G_{n-1} to obtain
+ the residual at that stage. */
+ calculate_group_reloc_mask (abs (signed_value), group - 1, &residual);
+
+ /* Check for overflow. (The absolute value to go in the place must be
+ divisible by four and, after having been divided by four, must
+ fit in eight bits.) */
+ if ((residual & 0x3) != 0 || residual >= 0x400)
+ {
+ (*_bfd_error_handler)
+ (_("%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s"),
+ input_bfd, input_section,
+ (long) rel->r_offset, abs (signed_value), howto->name);
+ return bfd_reloc_overflow;
+ }
+
+ /* Mask out the value and U bit. */
+ insn &= 0xff7fff00;
+
+ /* Set the U bit if the value to go in the place is non-negative. */
+ if (signed_value >= 0)
+ insn |= 1 << 23;
+
+ /* Encode the offset. */
+ insn |= residual >> 2;
+
+ bfd_put_32 (input_bfd, insn, hit_data);
+ }
+ return bfd_reloc_ok;
+
+ default:
+ return bfd_reloc_notsupported;
}
- return TRUE;
}
-
/* Add INCREMENT to the reloc (of type HOWTO) at ADDRESS. */
static void
arm_add_to_rel (bfd * abfd,
@@ -4375,8 +6358,6 @@ elf32_arm_relocate_section (bfd * output_bfd,
struct elf32_arm_link_hash_table * globals;
globals = elf32_arm_hash_table (info);
- if (info->relocatable && !globals->use_rel)
- return TRUE;
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -4396,6 +6377,7 @@ elf32_arm_relocate_section (bfd * output_bfd,
arelent bfd_reloc;
char sym_type;
bfd_boolean unresolved_reloc = FALSE;
+ char *error_message = NULL;
r_symndx = ELF32_R_SYM (rel->r_info);
r_type = ELF32_R_TYPE (rel->r_info);
@@ -4408,29 +6390,6 @@ elf32_arm_relocate_section (bfd * output_bfd,
bfd_reloc.howto = elf32_arm_howto_from_type (r_type);
howto = bfd_reloc.howto;
- if (info->relocatable && globals->use_rel)
- {
- /* This is a relocatable link. We don't have to change
- anything, unless the reloc is against a section symbol,
- in which case we have to adjust according to where the
- section symbol winds up in the output section. */
- if (r_symndx < symtab_hdr->sh_info)
- {
- sym = local_syms + r_symndx;
- if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
- {
- sec = local_sections[r_symndx];
- arm_add_to_rel (input_bfd, contents + rel->r_offset,
- howto,
- (bfd_signed_vma) (sec->output_offset
- + sym->st_value));
- }
- }
-
- continue;
- }
-
- /* This is a final link. */
h = NULL;
sym = NULL;
sec = NULL;
@@ -4445,8 +6404,9 @@ elf32_arm_relocate_section (bfd * output_bfd,
relocation = (sec->output_section->vma
+ sec->output_offset
+ sym->st_value);
- if ((sec->flags & SEC_MERGE)
- && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ if (!info->relocatable
+ && (sec->flags & SEC_MERGE)
+ && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
{
asection *msec;
bfd_vma addend, value;
@@ -4496,6 +6456,34 @@ elf32_arm_relocate_section (bfd * output_bfd,
sym_type = h->type;
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ {
+ /* This is a relocatable link. We don't have to change
+ anything, unless the reloc is against a section symbol,
+ in which case we have to adjust according to where the
+ section symbol winds up in the output section. */
+ if (sym != NULL && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ {
+ if (globals->use_rel)
+ arm_add_to_rel (input_bfd, contents + rel->r_offset,
+ howto, (bfd_signed_vma) sec->output_offset);
+ else
+ rel->r_addend += sec->output_offset;
+ }
+ continue;
+ }
+
if (h != NULL)
name = h->root.root.string;
else
@@ -4529,7 +6517,7 @@ elf32_arm_relocate_section (bfd * output_bfd,
relocation, info, sec, name,
(h ? ELF_ST_TYPE (h->type) :
ELF_ST_TYPE (sym->st_info)), h,
- &unresolved_reloc);
+ &unresolved_reloc, &error_message);
/* Dynamic relocs are not propagated for SEC_DEBUGGING sections
because such sections are not SEC_ALLOC and thus ld.so will
@@ -4550,8 +6538,6 @@ elf32_arm_relocate_section (bfd * output_bfd,
if (r != bfd_reloc_ok)
{
- const char * msg = (const char *) 0;
-
switch (r)
{
case bfd_reloc_overflow:
@@ -4575,24 +6561,25 @@ elf32_arm_relocate_section (bfd * output_bfd,
break;
case bfd_reloc_outofrange:
- msg = _("internal error: out of range error");
+ error_message = _("out of range");
goto common_error;
case bfd_reloc_notsupported:
- msg = _("internal error: unsupported relocation error");
+ error_message = _("unsupported relocation");
goto common_error;
case bfd_reloc_dangerous:
- msg = _("internal error: dangerous error");
+ /* error_message should already be set. */
goto common_error;
default:
- msg = _("internal error: unknown error");
+ error_message = _("unknown error");
/* fall through */
common_error:
- if (!((*info->callbacks->warning)
- (info, msg, name, input_bfd, input_section,
+ BFD_ASSERT (error_message != NULL);
+ if (!((*info->callbacks->reloc_dangerous)
+ (info, error_message, input_bfd, input_section,
rel->r_offset)))
return FALSE;
break;
@@ -4603,130 +6590,6 @@ elf32_arm_relocate_section (bfd * output_bfd,
return TRUE;
}
-/* Allocate/find an object attribute. */
-static aeabi_attribute *
-elf32_arm_new_eabi_attr (bfd *abfd, int tag)
-{
- aeabi_attribute *attr;
- aeabi_attribute_list *list;
- aeabi_attribute_list *p;
- aeabi_attribute_list **lastp;
-
-
- if (tag < NUM_KNOWN_ATTRIBUTES)
- {
- /* Knwon tags are preallocated. */
- attr = &elf32_arm_tdata (abfd)->known_eabi_attributes[tag];
- }
- else
- {
- /* Create a new tag. */
- list = (aeabi_attribute_list *)
- bfd_alloc (abfd, sizeof (aeabi_attribute_list));
- memset (list, 0, sizeof (aeabi_attribute_list));
- list->tag = tag;
- /* Keep the tag list in order. */
- lastp = &elf32_arm_tdata (abfd)->other_eabi_attributes;
- for (p = *lastp; p; p = p->next)
- {
- if (tag < p->tag)
- break;
- lastp = &p->next;
- }
- list->next = *lastp;
- *lastp = list;
- attr = &list->attr;
- }
-
- return attr;
-}
-
-int
-elf32_arm_get_eabi_attr_int (bfd *abfd, int tag)
-{
- aeabi_attribute_list *p;
-
- if (tag < NUM_KNOWN_ATTRIBUTES)
- {
- /* Knwon tags are preallocated. */
- return elf32_arm_tdata (abfd)->known_eabi_attributes[tag].i;
- }
- else
- {
- for (p = elf32_arm_tdata (abfd)->other_eabi_attributes;
- p;
- p = p->next)
- {
- if (tag == p->tag)
- return p->attr.i;
- if (tag < p->tag)
- break;
- }
- return 0;
- }
-}
-
-void
-elf32_arm_add_eabi_attr_int (bfd *abfd, int tag, unsigned int i)
-{
- aeabi_attribute *attr;
-
- attr = elf32_arm_new_eabi_attr (abfd, tag);
- attr->type = 1;
- attr->i = i;
-}
-
-static char *
-attr_strdup (bfd *abfd, const char * s)
-{
- char * p;
- int len;
-
- len = strlen (s) + 1;
- p = (char *)bfd_alloc(abfd, len);
- return memcpy (p, s, len);
-}
-
-void
-elf32_arm_add_eabi_attr_string (bfd *abfd, int tag, const char *s)
-{
- aeabi_attribute *attr;
-
- attr = elf32_arm_new_eabi_attr (abfd, tag);
- attr->type = 2;
- attr->s = attr_strdup (abfd, s);
-}
-
-void
-elf32_arm_add_eabi_attr_compat (bfd *abfd, unsigned int i, const char *s)
-{
- aeabi_attribute_list *list;
- aeabi_attribute_list *p;
- aeabi_attribute_list **lastp;
-
- list = (aeabi_attribute_list *)
- bfd_alloc (abfd, sizeof (aeabi_attribute_list));
- memset (list, 0, sizeof (aeabi_attribute_list));
- list->tag = Tag_compatibility;
- list->attr.type = 3;
- list->attr.i = i;
- list->attr.s = attr_strdup (abfd, s);
-
- lastp = &elf32_arm_tdata (abfd)->other_eabi_attributes;
- for (p = *lastp; p; p = p->next)
- {
- int cmp;
- if (p->tag != Tag_compatibility)
- break;
- cmp = strcmp(s, p->attr.s);
- if (cmp < 0 || (cmp == 0 && i < p->attr.i))
- break;
- lastp = &p->next;
- }
- list->next = *lastp;
- *lastp = list;
-}
-
/* Set the right machine number. */
static bfd_boolean
@@ -4777,49 +6640,6 @@ elf32_arm_set_private_flags (bfd *abfd, flagword flags)
return TRUE;
}
-/* Copy the eabi object attribute from IBFD to OBFD. */
-static void
-copy_eabi_attributes (bfd *ibfd, bfd *obfd)
-{
- aeabi_attribute *in_attr;
- aeabi_attribute *out_attr;
- aeabi_attribute_list *list;
- int i;
-
- in_attr = elf32_arm_tdata (ibfd)->known_eabi_attributes;
- out_attr = elf32_arm_tdata (obfd)->known_eabi_attributes;
- for (i = 4; i < NUM_KNOWN_ATTRIBUTES; i++)
- {
- out_attr->i = in_attr->i;
- if (in_attr->s && *in_attr->s)
- out_attr->s = attr_strdup (obfd, in_attr->s);
- in_attr++;
- out_attr++;
- }
-
- for (list = elf32_arm_tdata (ibfd)->other_eabi_attributes;
- list;
- list = list->next)
- {
- in_attr = &list->attr;
- switch (in_attr->type)
- {
- case 1:
- elf32_arm_add_eabi_attr_int (obfd, list->tag, in_attr->i);
- break;
- case 2:
- elf32_arm_add_eabi_attr_string (obfd, list->tag, in_attr->s);
- break;
- case 3:
- elf32_arm_add_eabi_attr_compat (obfd, in_attr->i, in_attr->s);
- break;
- default:
- abort();
- }
- }
-}
-
-
/* Copy backend specific data from one object module to another. */
static bfd_boolean
@@ -4871,8 +6691,8 @@ elf32_arm_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
elf_elfheader (obfd)->e_ident[EI_OSABI] =
elf_elfheader (ibfd)->e_ident[EI_OSABI];
- /* Copy EABI object attributes. */
- copy_eabi_attributes (ibfd, obfd);
+ /* Copy object attributes. */
+ _bfd_elf_copy_obj_attributes (ibfd, obfd);
return TRUE;
}
@@ -4904,33 +6724,48 @@ enum
AEABI_enum_forced_wide
};
+/* Determine whether an object attribute tag takes an integer, a
+ string or both. */
+static int
+elf32_arm_obj_attrs_arg_type (int tag)
+{
+ if (tag == Tag_compatibility)
+ return 3;
+ else if (tag == 4 || tag == 5)
+ return 2;
+ else if (tag < 32)
+ return 1;
+ else
+ return (tag & 1) != 0 ? 2 : 1;
+}
+
/* Merge EABI object attributes from IBFD into OBFD. Raise an error if there
are conflicting attributes. */
static bfd_boolean
elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
{
- aeabi_attribute *in_attr;
- aeabi_attribute *out_attr;
- aeabi_attribute_list *in_list;
- aeabi_attribute_list *out_list;
+ obj_attribute *in_attr;
+ obj_attribute *out_attr;
+ obj_attribute_list *in_list;
/* Some tags have 0 = don't care, 1 = strong requirement,
2 = weak requirement. */
static const int order_312[3] = {3, 1, 2};
int i;
- if (!elf32_arm_tdata (ibfd)->known_eabi_attributes[0].i)
+ if (!elf_known_obj_attributes_proc (obfd)[0].i)
{
/* This is the first object. Copy the attributes. */
- copy_eabi_attributes (ibfd, obfd);
+ _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
+ /* Use the Tag_null value to indicate the attributes have been
+ initialized. */
+ elf_known_obj_attributes_proc (obfd)[0].i = 1;
+
return TRUE;
}
- /* Use the Tag_null value to indicate the attributes have been
- initialized. */
- elf32_arm_tdata (ibfd)->known_eabi_attributes[0].i = 1;
-
- in_attr = elf32_arm_tdata (ibfd)->known_eabi_attributes;
- out_attr = elf32_arm_tdata (obfd)->known_eabi_attributes;
+ in_attr = elf_known_obj_attributes_proc (ibfd);
+ out_attr = elf_known_obj_attributes_proc (obfd);
/* This needs to happen before Tag_ABI_FP_number_model is merged. */
if (in_attr[Tag_ABI_VFP_args].i != out_attr[Tag_ABI_VFP_args].i)
{
@@ -4946,16 +6781,19 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
}
}
- for (i = 4; i < NUM_KNOWN_ATTRIBUTES; i++)
+ for (i = 4; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
{
/* Merge this attribute with existing attributes. */
switch (i)
{
case Tag_CPU_raw_name:
case Tag_CPU_name:
- /* Use whichever has the greatest architecture requirements. */
- if (in_attr[Tag_CPU_arch].i > out_attr[Tag_CPU_arch].i)
- out_attr[i].s = attr_strdup(obfd, in_attr[i].s);
+ /* Use whichever has the greatest architecture requirements. We
+ won't necessarily have both the above tags, so make sure input
+ name is non-NULL. */
+ if (in_attr[Tag_CPU_arch].i > out_attr[Tag_CPU_arch].i
+ && in_attr[i].s)
+ out_attr[i].s = _bfd_elf_attr_strdup (obfd, in_attr[i].s);
break;
case Tag_ABI_optimization_goals:
@@ -5006,7 +6844,8 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
}
break;
case Tag_ABI_PCS_R9_use:
- if (out_attr[i].i != AEABI_R9_unused
+ if (in_attr[i].i != out_attr[i].i
+ && out_attr[i].i != AEABI_R9_unused
&& in_attr[i].i != AEABI_R9_unused)
{
_bfd_error_handler
@@ -5067,10 +6906,15 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
out_attr[i].i = in_attr[i].i;
}
else if (in_attr[i].i != AEABI_enum_forced_wide
- && out_attr[i].i != in_attr[i].i)
+ && out_attr[i].i != in_attr[i].i
+ && !elf32_arm_tdata (obfd)->no_enum_size_warning)
{
+ const char *aeabi_enum_names[] =
+ { "", "variable-size", "32-bit", "" };
_bfd_error_handler
- (_("ERROR: %B: Conflicting enum sizes"), ibfd);
+ (_("warning: %B uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"),
+ ibfd, aeabi_enum_names[in_attr[i].i],
+ aeabi_enum_names[out_attr[i].i]);
}
}
break;
@@ -5091,60 +6935,13 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
}
}
- in_list = elf32_arm_tdata (ibfd)->other_eabi_attributes;
- out_list = elf32_arm_tdata (ibfd)->other_eabi_attributes;
- while (in_list && in_list->tag == Tag_compatibility)
- {
- in_attr = &in_list->attr;
- if (in_attr->i == 0)
- continue;
- if (in_attr->i == 1)
- {
- _bfd_error_handler
- (_("ERROR: %B: Must be processed by '%s' toolchain"),
- ibfd, in_attr->s);
- return FALSE;
- }
- if (!out_list || out_list->tag != Tag_compatibility
- || strcmp (in_attr->s, out_list->attr.s) != 0)
- {
- /* Add this compatibility tag to the output. */
- elf32_arm_add_eabi_attr_compat (obfd, in_attr->i, in_attr->s);
- continue;
- }
- out_attr = &out_list->attr;
- /* Check all the input tags with the same identifier. */
- for (;;)
- {
- if (out_list->tag != Tag_compatibility
- || in_attr->i != out_attr->i
- || strcmp (in_attr->s, out_attr->s) != 0)
- {
- _bfd_error_handler
- (_("ERROR: %B: Incompatible object tag '%s':%d"),
- ibfd, in_attr->s, in_attr->i);
- return FALSE;
- }
- in_list = in_list->next;
- if (in_list->tag != Tag_compatibility
- || strcmp (in_attr->s, in_list->attr.s) != 0)
- break;
- in_attr = &in_list->attr;
- out_list = out_list->next;
- if (out_list)
- out_attr = &out_list->attr;
- }
+ /* Merge Tag_compatibility attributes and any common GNU ones. */
+ _bfd_elf_merge_object_attributes (ibfd, obfd);
- /* Check the output doesn't have extra tags with this identifier. */
- if (out_list && out_list->tag == Tag_compatibility
- && strcmp (in_attr->s, out_list->attr.s) == 0)
- {
- _bfd_error_handler
- (_("ERROR: %B: Incompatible object tag '%s':%d"),
- ibfd, in_attr->s, out_list->attr.i);
- return FALSE;
- }
- }
+ /* Check for any attributes not known on ARM. */
+ in_list = elf_other_obj_attributes_proc (ibfd);
+ while (in_list && in_list->tag == Tag_compatibility)
+ in_list = in_list->next;
for (; in_list; in_list = in_list->next)
{
@@ -5546,39 +7343,21 @@ elf32_arm_get_symbol_type (Elf_Internal_Sym * elf_sym, int type)
}
static asection *
-elf32_arm_gc_mark_hook (asection * sec,
- struct bfd_link_info * info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela * rel,
- struct elf_link_hash_entry * h,
- Elf_Internal_Sym * sym)
+elf32_arm_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
+ switch (ELF32_R_TYPE (rel->r_info))
{
case R_ARM_GNU_VTINHERIT:
case R_ARM_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ return NULL;
+ }
- return NULL;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update the got entry reference counts for the section being removed. */
@@ -5644,13 +7423,23 @@ elf32_arm_gc_sweep_hook (bfd * abfd,
break;
case R_ARM_ABS32:
+ case R_ARM_ABS32_NOI:
case R_ARM_REL32:
+ case R_ARM_REL32_NOI:
case R_ARM_PC24:
case R_ARM_PLT32:
case R_ARM_CALL:
case R_ARM_JUMP24:
case R_ARM_PREL31:
case R_ARM_THM_CALL:
+ case R_ARM_MOVW_ABS_NC:
+ case R_ARM_MOVT_ABS:
+ case R_ARM_MOVW_PREL_NC:
+ case R_ARM_MOVT_PREL:
+ case R_ARM_THM_MOVW_ABS_NC:
+ case R_ARM_THM_MOVT_ABS:
+ case R_ARM_THM_MOVW_PREL_NC:
+ case R_ARM_THM_MOVT_PREL:
/* Should the interworking branches be here also? */
if (h != NULL)
@@ -5669,14 +7458,17 @@ elf32_arm_gc_sweep_hook (bfd * abfd,
}
if (r_type == R_ARM_ABS32
- || r_type == R_ARM_REL32)
+ || r_type == R_ARM_REL32
+ || r_type == R_ARM_ABS32_NOI
+ || r_type == R_ARM_REL32_NOI)
{
for (pp = &eh->relocs_copied; (p = *pp) != NULL;
pp = &p->next)
if (p->section == sec)
{
p->count -= 1;
- if (ELF32_R_TYPE (rel->r_info) == R_ARM_REL32)
+ if (ELF32_R_TYPE (rel->r_info) == R_ARM_REL32
+ || ELF32_R_TYPE (rel->r_info) == R_ARM_REL32_NOI)
p->pc_count -= 1;
if (p->count == 0)
*pp = p->next;
@@ -5854,13 +7646,23 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
/* Fall through */
case R_ARM_ABS32:
+ case R_ARM_ABS32_NOI:
case R_ARM_REL32:
+ case R_ARM_REL32_NOI:
case R_ARM_PC24:
case R_ARM_PLT32:
case R_ARM_CALL:
case R_ARM_JUMP24:
case R_ARM_PREL31:
case R_ARM_THM_CALL:
+ case R_ARM_MOVW_ABS_NC:
+ case R_ARM_MOVT_ABS:
+ case R_ARM_MOVW_PREL_NC:
+ case R_ARM_MOVT_PREL:
+ case R_ARM_THM_MOVW_ABS_NC:
+ case R_ARM_THM_MOVT_ABS:
+ case R_ARM_THM_MOVW_PREL_NC:
+ case R_ARM_THM_MOVT_PREL:
/* Should the interworking branches be listed here? */
if (h != NULL)
{
@@ -5877,12 +7679,11 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
refers to is in a different object. We can't tell for
sure yet, because something later might force the
symbol local. */
- if (r_type == R_ARM_PC24
- || r_type == R_ARM_CALL
- || r_type == R_ARM_JUMP24
- || r_type == R_ARM_PREL31
- || r_type == R_ARM_PLT32
- || r_type == R_ARM_THM_CALL)
+ if (r_type != R_ARM_ABS32
+ && r_type != R_ARM_REL32
+ && r_type != R_ARM_ABS32_NOI
+ && r_type != R_ARM_REL32_NOI
+ && r_type != R_ARM_ABS12)
h->needs_plt = 1;
/* If we create a PLT entry, this relocation will reference
@@ -5907,7 +7708,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
relocs_copied field of the hash table entry. */
if ((info->shared || htab->root.is_relocatable_executable)
&& (sec->flags & SEC_ALLOC) != 0
- && (r_type == R_ARM_ABS32
+ && ((r_type == R_ARM_ABS32 || r_type == R_ARM_ABS32_NOI)
|| (h != NULL && ! h->needs_plt
&& (! info->symbolic || ! h->def_regular))))
{
@@ -5991,7 +7792,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
p->pc_count = 0;
}
- if (r_type == R_ARM_REL32)
+ if (r_type == R_ARM_REL32 || r_type == R_ARM_REL32_NOI)
p->pc_count += 1;
p->count += 1;
}
@@ -6016,12 +7817,57 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
return TRUE;
}
+/* Unwinding tables are not referenced directly. This pass marks them as
+ required if the corresponding code section is marked. */
+
+static bfd_boolean
+elf32_arm_gc_mark_extra_sections(struct bfd_link_info *info,
+ elf_gc_mark_hook_fn gc_mark_hook)
+{
+ bfd *sub;
+ Elf_Internal_Shdr **elf_shdrp;
+ bfd_boolean again;
+
+ /* Marking EH data may cause additional code sections to be marked,
+ requiring multiple passes. */
+ again = TRUE;
+ while (again)
+ {
+ again = FALSE;
+ for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
+ {
+ asection *o;
+
+ if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
+ continue;
+
+ elf_shdrp = elf_elfsections (sub);
+ for (o = sub->sections; o != NULL; o = o->next)
+ {
+ Elf_Internal_Shdr *hdr;
+ hdr = &elf_section_data (o)->this_hdr;
+ if (hdr->sh_type == SHT_ARM_EXIDX && hdr->sh_link
+ && !o->gc_mark
+ && elf_shdrp[hdr->sh_link]->bfd_section->gc_mark)
+ {
+ again = TRUE;
+ if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
+ return FALSE;
+ }
+ }
+ }
+ }
+
+ return TRUE;
+}
+
/* Treat mapping symbols as special target symbols. */
static bfd_boolean
elf32_arm_is_target_special_symbol (bfd * abfd ATTRIBUTE_UNUSED, asymbol * sym)
{
- return bfd_is_arm_mapping_symbol_name (sym->name);
+ return bfd_is_arm_special_symbol_name (sym->name,
+ BFD_ARM_SPECIAL_SYM_TYPE_ANY);
}
/* This is a copy of elf_find_function() from elf.c except that
@@ -6057,9 +7903,10 @@ arm_elf_find_function (bfd * abfd ATTRIBUTE_UNUSED,
case STT_FUNC:
case STT_ARM_TFUNC:
case STT_NOTYPE:
- /* Skip $a and $t symbols. */
+ /* Skip mapping symbols. */
if ((q->symbol.flags & BSF_LOCAL)
- && bfd_is_arm_mapping_symbol_name (q->symbol.name))
+ && bfd_is_arm_special_symbol_name (q->symbol.name,
+ BFD_ARM_SPECIAL_SYM_TYPE_ANY))
continue;
/* Fall through. */
if (bfd_get_section (&q->symbol) == section
@@ -6160,7 +8007,6 @@ elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info,
{
bfd * dynobj;
asection * s;
- unsigned int power_of_two;
struct elf32_arm_link_hash_entry * eh;
struct elf32_arm_link_hash_table *globals;
@@ -6273,28 +8119,7 @@ elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info,
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 3)
- power_of_two = 3;
-
- /* Apply the required alignment. */
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (dynobj, s))
- {
- if (! bfd_set_section_alignment (dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Allocate space in .plt, .got and associated reloc sections for
@@ -6483,6 +8308,37 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
else
h->got.offset = (bfd_vma) -1;
+ /* Allocate stubs for exported Thumb functions on v4t. */
+ if (!htab->use_blx && h->dynindx != -1
+ && h->def_regular
+ && ELF_ST_TYPE (h->type) == STT_ARM_TFUNC
+ && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
+ {
+ struct elf_link_hash_entry * th;
+ struct bfd_link_hash_entry * bh;
+ struct elf_link_hash_entry * myh;
+ char name[1024];
+ asection *s;
+ bh = NULL;
+ /* Create a new symbol to regist the real location of the function. */
+ s = h->root.u.def.section;
+ sprintf(name, "__real_%s", h->root.root.string);
+ _bfd_generic_link_add_one_symbol (info, s->owner,
+ name, BSF_GLOBAL, s,
+ h->root.u.def.value,
+ NULL, TRUE, FALSE, &bh);
+
+ myh = (struct elf_link_hash_entry *) bh;
+ myh->type = ELF_ST_INFO (STB_LOCAL, STT_ARM_TFUNC);
+ myh->forced_local = 1;
+ eh->export_glue = myh;
+ th = record_arm_to_thumb_glue (info, h);
+ /* Point the symbol at the stub. */
+ h->type = ELF_ST_INFO (ELF_ST_BIND (h->type), STT_FUNC);
+ h->root.u.def.section = th->root.u.def.section;
+ h->root.u.def.value = th->root.u.def.value & ~1;
+ }
+
if (eh->relocs_copied == NULL)
return TRUE;
@@ -6494,12 +8350,12 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
if (info->shared || htab->root.is_relocatable_executable)
{
- /* The only reloc that uses pc_count is R_ARM_REL32, which will
- appear on something like ".long foo - .". We want calls to
- protected symbols to resolve directly to the function rather
- than going via the plt. If people want function pointer
- comparisons to work as expected then they should avoid
- writing assembly like ".long foo - .". */
+ /* The only relocs that use pc_count are R_ARM_REL32 and
+ R_ARM_REL32_NOI, which will appear on something like
+ ".long foo - .". We want calls to protected symbols to resolve
+ directly to the function rather than going via the plt. If people
+ want function pointer comparisons to work as expected then they
+ should avoid writing assembly like ".long foo - .". */
if (SYMBOL_CALLS_LOCAL (info, h))
{
struct elf32_arm_relocs_copied **pp;
@@ -6616,6 +8472,16 @@ elf32_arm_readonly_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
return TRUE;
}
+void
+bfd_elf32_arm_set_byteswap_code (struct bfd_link_info *info,
+ int byteswap_code)
+{
+ struct elf32_arm_link_hash_table *globals;
+
+ globals = elf32_arm_hash_table (info);
+ globals->byteswap_code = byteswap_code;
+}
+
/* Set the sizes of the dynamic sections. */
static bfd_boolean
@@ -6731,6 +8597,19 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
sym dynamic relocs. */
elf_link_hash_traverse (& htab->root, allocate_dynrelocs, info);
+ /* Here we rummage through the found bfds to collect glue information. */
+ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+ {
+ /* Initialise mapping tables for code/data. */
+ bfd_elf32_arm_init_maps (ibfd);
+
+ if (!bfd_elf32_arm_process_before_allocation (ibfd, info)
+ || !bfd_elf32_arm_vfp11_erratum_scan (ibfd, info))
+ /* xgettext:c-format */
+ _bfd_error_handler (_("Errors encountered processing file %s"),
+ ibfd->filename);
+ }
+
/* The check_relocs and adjust_dynamic_symbol entry points have
determined the sizes of the various dynamic sections. Allocate
memory for them. */
@@ -6752,7 +8631,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
/* Remember whether there is a PLT. */
plt = s->size != 0;
}
- else if (strncmp (name, ".rel", 4) == 0)
+ else if (CONST_STRNEQ (name, ".rel"))
{
if (s->size != 0)
{
@@ -6766,7 +8645,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
s->reloc_count = 0;
}
}
- else if (strncmp (name, ".got", 4) != 0
+ else if (! CONST_STRNEQ (name, ".got")
&& strcmp (name, ".dynbss") != 0)
{
/* It's not one of our sections, so don't allocate space. */
@@ -6893,16 +8772,17 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd, struct bfd_link_info * info,
/* Fill in the entry in the procedure linkage table. */
if (htab->symbian_p)
{
- unsigned i;
- for (i = 0; i < htab->plt_entry_size / 4; ++i)
- bfd_put_32 (output_bfd,
- elf32_arm_symbian_plt_entry[i],
- splt->contents + h->plt.offset + 4 * i);
+ put_arm_insn (htab, output_bfd,
+ elf32_arm_symbian_plt_entry[0],
+ splt->contents + h->plt.offset);
+ bfd_put_32 (output_bfd,
+ elf32_arm_symbian_plt_entry[1],
+ splt->contents + h->plt.offset + 4);
/* Fill in the entry in the .rel.plt section. */
rel.r_offset = (splt->output_section->vma
+ splt->output_offset
- + h->plt.offset + 4 * (i - 1));
+ + h->plt.offset + 4);
rel.r_info = ELF32_R_INFO (h->dynindx, R_ARM_GLOB_DAT);
/* Get the index in the procedure linkage table which
@@ -6917,6 +8797,7 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd, struct bfd_link_info * info,
bfd_vma got_offset, got_address, plt_address;
bfd_vma got_displacement;
asection * sgot;
+ bfd_byte * ptr;
sgot = bfd_get_section_by_name (dynobj, ".got.plt");
BFD_ASSERT (sgot != NULL);
@@ -6942,20 +8823,23 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd, struct bfd_link_info * info,
+ splt->output_offset
+ h->plt.offset);
+ ptr = htab->splt->contents + h->plt.offset;
if (htab->vxworks_p && info->shared)
{
unsigned int i;
bfd_vma val;
- for (i = 0; i != htab->plt_entry_size / 4; i++)
+ for (i = 0; i != htab->plt_entry_size / 4; i++, ptr += 4)
{
val = elf32_arm_vxworks_shared_plt_entry[i];
if (i == 2)
val |= got_address - sgot->output_section->vma;
if (i == 5)
val |= plt_index * RELOC_SIZE (htab);
- bfd_put_32 (output_bfd, val,
- htab->splt->contents + h->plt.offset + i * 4);
+ if (i == 2 || i == 5)
+ bfd_put_32 (output_bfd, val, ptr);
+ else
+ put_arm_insn (htab, output_bfd, val, ptr);
}
}
else if (htab->vxworks_p)
@@ -6963,7 +8847,7 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd, struct bfd_link_info * info,
unsigned int i;
bfd_vma val;
- for (i = 0; i != htab->plt_entry_size / 4; i++)
+ for (i = 0; i != htab->plt_entry_size / 4; i++, ptr += 4)
{
val = elf32_arm_vxworks_exec_plt_entry[i];
if (i == 2)
@@ -6972,8 +8856,10 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd, struct bfd_link_info * info,
val |= 0xffffff & -((h->plt.offset + i * 4 + 8) >> 2);
if (i == 5)
val |= plt_index * RELOC_SIZE (htab);
- bfd_put_32 (output_bfd, val,
- htab->splt->contents + h->plt.offset + i * 4);
+ if (i == 2 || i == 5)
+ bfd_put_32 (output_bfd, val, ptr);
+ else
+ put_arm_insn (htab, output_bfd, val, ptr);
}
loc = (htab->srelplt2->contents
@@ -7006,27 +8892,26 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd, struct bfd_link_info * info,
if (!htab->use_blx && eh->plt_thumb_refcount > 0)
{
- bfd_put_16 (output_bfd, elf32_arm_plt_thumb_stub[0],
- splt->contents + h->plt.offset - 4);
- bfd_put_16 (output_bfd, elf32_arm_plt_thumb_stub[1],
- splt->contents + h->plt.offset - 2);
+ put_thumb_insn (htab, output_bfd,
+ elf32_arm_plt_thumb_stub[0], ptr - 4);
+ put_thumb_insn (htab, output_bfd,
+ elf32_arm_plt_thumb_stub[1], ptr - 2);
}
- bfd_put_32 (output_bfd,
- elf32_arm_plt_entry[0]
- | ((got_displacement & 0x0ff00000) >> 20),
- splt->contents + h->plt.offset + 0);
- bfd_put_32 (output_bfd,
- elf32_arm_plt_entry[1]
- | ((got_displacement & 0x000ff000) >> 12),
- splt->contents + h->plt.offset + 4);
- bfd_put_32 (output_bfd,
- elf32_arm_plt_entry[2]
- | (got_displacement & 0x00000fff),
- splt->contents + h->plt.offset + 8);
+ put_arm_insn (htab, output_bfd,
+ elf32_arm_plt_entry[0]
+ | ((got_displacement & 0x0ff00000) >> 20),
+ ptr + 0);
+ put_arm_insn (htab, output_bfd,
+ elf32_arm_plt_entry[1]
+ | ((got_displacement & 0x000ff000) >> 12),
+ ptr+ 4);
+ put_arm_insn (htab, output_bfd,
+ elf32_arm_plt_entry[2]
+ | (got_displacement & 0x00000fff),
+ ptr + 8);
#ifdef FOUR_WORD_PLT
- bfd_put_32 (output_bfd, elf32_arm_plt_entry[3],
- splt->contents + h->plt.offset + 12);
+ bfd_put_32 (output_bfd, elf32_arm_plt_entry[3], ptr + 12);
#endif
}
@@ -7336,9 +9221,12 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
Elf_Internal_Rela rel;
plt0_entry = elf32_arm_vxworks_exec_plt0_entry;
- bfd_put_32 (output_bfd, plt0_entry[0], splt->contents + 0);
- bfd_put_32 (output_bfd, plt0_entry[1], splt->contents + 4);
- bfd_put_32 (output_bfd, plt0_entry[2], splt->contents + 8);
+ put_arm_insn (htab, output_bfd, plt0_entry[0],
+ splt->contents + 0);
+ put_arm_insn (htab, output_bfd, plt0_entry[1],
+ splt->contents + 4);
+ put_arm_insn (htab, output_bfd, plt0_entry[2],
+ splt->contents + 8);
bfd_put_32 (output_bfd, got_address, splt->contents + 12);
/* Generate a relocation for _GLOBAL_OFFSET_TABLE_. */
@@ -7353,10 +9241,14 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
got_displacement = got_address - (plt_address + 16);
plt0_entry = elf32_arm_plt0_entry;
- bfd_put_32 (output_bfd, plt0_entry[0], splt->contents + 0);
- bfd_put_32 (output_bfd, plt0_entry[1], splt->contents + 4);
- bfd_put_32 (output_bfd, plt0_entry[2], splt->contents + 8);
- bfd_put_32 (output_bfd, plt0_entry[3], splt->contents + 12);
+ put_arm_insn (htab, output_bfd, plt0_entry[0],
+ splt->contents + 0);
+ put_arm_insn (htab, output_bfd, plt0_entry[1],
+ splt->contents + 4);
+ put_arm_insn (htab, output_bfd, plt0_entry[2],
+ splt->contents + 8);
+ put_arm_insn (htab, output_bfd, plt0_entry[3],
+ splt->contents + 12);
#ifdef FOUR_WORD_PLT
/* The displacement value goes in the otherwise-unused
@@ -7370,7 +9262,8 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
/* UnixWare sets the entsize of .plt to 4, although that doesn't
really seem like the right value. */
- elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4;
+ if (splt->output_section->owner == output_bfd)
+ elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4;
if (htab->vxworks_p && !info->shared && htab->splt->size > 0)
{
@@ -7481,12 +9374,8 @@ elf32_arm_final_write_processing (bfd *abfd, bfd_boolean linker ATTRIBUTE_UNUSED
static bfd_boolean
is_arm_elf_unwind_section_name (bfd * abfd ATTRIBUTE_UNUSED, const char * name)
{
- size_t len1, len2;
-
- len1 = sizeof (ELF_STRING_ARM_unwind) - 1;
- len2 = sizeof (ELF_STRING_ARM_unwind_once) - 1;
- return (strncmp (name, ELF_STRING_ARM_unwind, len1) == 0
- || strncmp (name, ELF_STRING_ARM_unwind_once, len2) == 0);
+ return (CONST_STRNEQ (name, ELF_STRING_ARM_unwind)
+ || CONST_STRNEQ (name, ELF_STRING_ARM_unwind_once));
}
@@ -7505,125 +9394,9 @@ elf32_arm_fake_sections (bfd * abfd, Elf_Internal_Shdr * hdr, asection * sec)
hdr->sh_type = SHT_ARM_EXIDX;
hdr->sh_flags |= SHF_LINK_ORDER;
}
- else if (strcmp(name, ".ARM.attributes") == 0)
- {
- hdr->sh_type = SHT_ARM_ATTRIBUTES;
- }
return TRUE;
}
-/* Parse an Arm EABI attributes section. */
-static void
-elf32_arm_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
-{
- bfd_byte *contents;
- bfd_byte *p;
- bfd_vma len;
-
- contents = bfd_malloc (hdr->sh_size);
- if (!contents)
- return;
- if (!bfd_get_section_contents (abfd, hdr->bfd_section, contents, 0,
- hdr->sh_size))
- {
- free (contents);
- return;
- }
- p = contents;
- if (*(p++) == 'A')
- {
- len = hdr->sh_size - 1;
- while (len > 0)
- {
- int namelen;
- bfd_vma section_len;
-
- section_len = bfd_get_32 (abfd, p);
- p += 4;
- if (section_len > len)
- section_len = len;
- len -= section_len;
- namelen = strlen ((char *)p) + 1;
- section_len -= namelen + 4;
- if (strcmp((char *)p, "aeabi") != 0)
- {
- /* Vendor section. Ignore it. */
- p += namelen + section_len;
- }
- else
- {
- p += namelen;
- while (section_len > 0)
- {
- int tag;
- unsigned int n;
- unsigned int val;
- bfd_vma subsection_len;
- bfd_byte *end;
-
- tag = read_unsigned_leb128 (abfd, p, &n);
- p += n;
- subsection_len = bfd_get_32 (abfd, p);
- p += 4;
- if (subsection_len > section_len)
- subsection_len = section_len;
- section_len -= subsection_len;
- subsection_len -= n + 4;
- end = p + subsection_len;
- switch (tag)
- {
- case Tag_File:
- while (p < end)
- {
- bfd_boolean is_string;
-
- tag = read_unsigned_leb128 (abfd, p, &n);
- p += n;
- if (tag == 4 || tag == 5)
- is_string = 1;
- else if (tag < 32)
- is_string = 0;
- else
- is_string = (tag & 1) != 0;
- if (tag == Tag_compatibility)
- {
- val = read_unsigned_leb128 (abfd, p, &n);
- p += n;
- elf32_arm_add_eabi_attr_compat (abfd, val,
- (char *)p);
- p += strlen ((char *)p) + 1;
- }
- else if (is_string)
- {
- elf32_arm_add_eabi_attr_string (abfd, tag,
- (char *)p);
- p += strlen ((char *)p) + 1;
- }
- else
- {
- val = read_unsigned_leb128 (abfd, p, &n);
- p += n;
- elf32_arm_add_eabi_attr_int (abfd, tag, val);
- }
- }
- break;
- case Tag_Section:
- case Tag_Symbol:
- /* Don't have anywhere convenient to attach these.
- Fall through for now. */
- default:
- /* Ignore things we don't kow about. */
- p += subsection_len;
- subsection_len = 0;
- break;
- }
- }
- }
- }
- }
- free (contents);
-}
-
/* Handle an ARM specific section when reading an object file. This is
called when bfd_section_from_shdr finds a section with an unknown
type. */
@@ -7653,8 +9426,6 @@ elf32_arm_section_from_shdr (bfd *abfd,
if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
return FALSE;
- if (hdr->sh_type == SHT_ARM_ATTRIBUTES)
- elf32_arm_parse_attributes(abfd, hdr);
return TRUE;
}
@@ -7759,61 +9530,218 @@ unrecord_section_with_arm_elf_section_data (asection * sec)
}
}
-/* Called for each symbol. Builds a section map based on mapping symbols.
- Does not alter any of the symbols. */
-static bfd_boolean
-elf32_arm_output_symbol_hook (struct bfd_link_info *info,
- const char *name,
- Elf_Internal_Sym *elfsym,
- asection *input_sec,
- struct elf_link_hash_entry *h)
+typedef struct
{
- int mapcount;
- elf32_arm_section_map *map;
- elf32_arm_section_map *newmap;
- _arm_elf_section_data *arm_data;
- struct elf32_arm_link_hash_table *globals;
+ void *finfo;
+ struct bfd_link_info *info;
+ asection *sec;
+ int sec_shndx;
+ bfd_boolean (*func) (void *, const char *, Elf_Internal_Sym *,
+ asection *, struct elf_link_hash_entry *);
+} output_arch_syminfo;
- globals = elf32_arm_hash_table (info);
- if (globals->vxworks_p
- && !elf_vxworks_link_output_symbol_hook (info, name, elfsym,
- input_sec, h))
+enum map_symbol_type
+{
+ ARM_MAP_ARM,
+ ARM_MAP_THUMB,
+ ARM_MAP_DATA
+};
+
+
+/* Output a single PLT mapping symbol. */
+
+static bfd_boolean
+elf32_arm_ouput_plt_map_sym (output_arch_syminfo *osi,
+ enum map_symbol_type type,
+ bfd_vma offset)
+{
+ static const char *names[3] = {"$a", "$t", "$d"};
+ struct elf32_arm_link_hash_table *htab;
+ Elf_Internal_Sym sym;
+
+ htab = elf32_arm_hash_table (osi->info);
+ sym.st_value = osi->sec->output_section->vma
+ + osi->sec->output_offset
+ + offset;
+ sym.st_size = 0;
+ sym.st_other = 0;
+ sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_NOTYPE);
+ sym.st_shndx = osi->sec_shndx;
+ if (!osi->func (osi->finfo, names[type], &sym, osi->sec, NULL))
return FALSE;
+ return TRUE;
+}
- /* Only do this on final link. */
- if (info->relocatable)
- return TRUE;
- /* Only build a map if we need to byteswap code. */
- if (!globals->byteswap_code)
- return TRUE;
+/* Output mapping symbols for PLT entries associated with H. */
- /* We only want mapping symbols. */
- if (! bfd_is_arm_mapping_symbol_name (name))
+static bfd_boolean
+elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf)
+{
+ output_arch_syminfo *osi = (output_arch_syminfo *) inf;
+ struct elf32_arm_link_hash_table *htab;
+ struct elf32_arm_link_hash_entry *eh;
+ bfd_vma addr;
+
+ htab = elf32_arm_hash_table (osi->info);
+
+ if (h->root.type == bfd_link_hash_indirect)
return TRUE;
- /* If this section has not been allocated an _arm_elf_section_data
- structure then we cannot record anything. */
- arm_data = get_arm_elf_section_data (input_sec);
- if (arm_data == NULL)
+ if (h->root.type == bfd_link_hash_warning)
+ /* When warning symbols are created, they **replace** the "real"
+ entry in the hash table, thus we never get to see the real
+ symbol in a hash traversal. So look at it now. */
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ if (h->plt.offset == (bfd_vma) -1)
return TRUE;
- mapcount = arm_data->mapcount + 1;
- map = arm_data->map;
+ eh = (struct elf32_arm_link_hash_entry *) h;
+ addr = h->plt.offset;
+ if (htab->symbian_p)
+ {
+ if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
+ return FALSE;
+ if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 4))
+ return FALSE;
+ }
+ else if (htab->vxworks_p)
+ {
+ if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
+ return FALSE;
+ if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 8))
+ return FALSE;
+ if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr + 12))
+ return FALSE;
+ if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 20))
+ return FALSE;
+ }
+ else
+ {
+ bfd_boolean thumb_stub;
+
+ thumb_stub = eh->plt_thumb_refcount > 0 && !htab->use_blx;
+ if (thumb_stub)
+ {
+ if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_THUMB, addr - 4))
+ return FALSE;
+ }
+#ifdef FOUR_WORD_PLT
+ if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
+ return FALSE;
+ if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 12))
+ return FALSE;
+#else
+ /* A three-word PLT with no Thumb thunk contains only Arm code,
+ so only need to output a mapping symbol for the first PLT entry and
+ entries with thumb thunks. */
+ if (thumb_stub || addr == 20)
+ {
+ if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
+ return FALSE;
+ }
+#endif
+ }
- /* TODO: This may be inefficient, but we probably don't usually have many
- mapping symbols per section. */
- newmap = bfd_realloc (map, mapcount * sizeof (* map));
- if (newmap != NULL)
+ return TRUE;
+}
+
+
+/* Output mapping symbols for linker generated sections. */
+
+static bfd_boolean
+elf32_arm_output_arch_local_syms (bfd *output_bfd,
+ struct bfd_link_info *info,
+ void *finfo, bfd_boolean (*func) (void *, const char *,
+ Elf_Internal_Sym *,
+ asection *,
+ struct elf_link_hash_entry *))
+{
+ output_arch_syminfo osi;
+ struct elf32_arm_link_hash_table *htab;
+ bfd_vma offset;
+ bfd_size_type size;
+
+ htab = elf32_arm_hash_table (info);
+ check_use_blx(htab);
+
+ osi.finfo = finfo;
+ osi.info = info;
+ osi.func = func;
+
+ /* ARM->Thumb glue. */
+ if (htab->arm_glue_size > 0)
{
- arm_data->map = newmap;
- arm_data->mapcount = mapcount;
+ osi.sec = bfd_get_section_by_name (htab->bfd_of_glue_owner,
+ ARM2THUMB_GLUE_SECTION_NAME);
+
+ osi.sec_shndx = _bfd_elf_section_from_bfd_section
+ (output_bfd, osi.sec->output_section);
+ if (info->shared || htab->root.is_relocatable_executable
+ || htab->pic_veneer)
+ size = ARM2THUMB_PIC_GLUE_SIZE;
+ else if (htab->use_blx)
+ size = ARM2THUMB_V5_STATIC_GLUE_SIZE;
+ else
+ size = ARM2THUMB_STATIC_GLUE_SIZE;
+
+ for (offset = 0; offset < htab->arm_glue_size; offset += size)
+ {
+ elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, offset);
+ elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_DATA, offset + size - 4);
+ }
+ }
+
+ /* Thumb->ARM glue. */
+ if (htab->thumb_glue_size > 0)
+ {
+ osi.sec = bfd_get_section_by_name (htab->bfd_of_glue_owner,
+ THUMB2ARM_GLUE_SECTION_NAME);
+
+ osi.sec_shndx = _bfd_elf_section_from_bfd_section
+ (output_bfd, osi.sec->output_section);
+ size = THUMB2ARM_GLUE_SIZE;
+
+ for (offset = 0; offset < htab->thumb_glue_size; offset += size)
+ {
+ elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_THUMB, offset);
+ elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, offset + 4);
+ }
+ }
+
+ /* Finally, output mapping symbols for the PLT. */
+ if (!htab->splt || htab->splt->size == 0)
+ return TRUE;
- newmap[mapcount - 1].vma = elfsym->st_value;
- newmap[mapcount - 1].type = name[1];
+ osi.sec_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
+ htab->splt->output_section);
+ osi.sec = htab->splt;
+ /* Output mapping symbols for the plt header. SymbianOS does not have a
+ plt header. */
+ if (htab->vxworks_p)
+ {
+ /* VxWorks shared libraries have no PLT header. */
+ if (!info->shared)
+ {
+ if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, 0))
+ return FALSE;
+ if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_DATA, 12))
+ return FALSE;
+ }
+ }
+ else if (!htab->symbian_p)
+ {
+ if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, 0))
+ return FALSE;
+#ifndef FOUR_WORD_PLT
+ if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_DATA, 16))
+ return FALSE;
+#endif
}
+ elf_link_hash_traverse (&htab->root, elf32_arm_output_plt_map, (void *) &osi);
return TRUE;
}
@@ -7822,13 +9750,16 @@ elf32_arm_output_symbol_hook (struct bfd_link_info *info,
static bfd_boolean
elf32_arm_new_section_hook (bfd *abfd, asection *sec)
{
- _arm_elf_section_data *sdata;
- bfd_size_type amt = sizeof (*sdata);
+ if (!sec->used_by_bfd)
+ {
+ _arm_elf_section_data *sdata;
+ bfd_size_type amt = sizeof (*sdata);
- sdata = bfd_zalloc (abfd, amt);
- if (sdata == NULL)
- return FALSE;
- sec->used_by_bfd = sdata;
+ sdata = bfd_zalloc (abfd, amt);
+ if (sdata == NULL)
+ return FALSE;
+ sec->used_by_bfd = sdata;
+ }
record_section_with_arm_elf_section_data (sec);
@@ -7850,15 +9781,18 @@ elf32_arm_compare_mapping (const void * a, const void * b)
written out as normal. */
static bfd_boolean
-elf32_arm_write_section (bfd *output_bfd ATTRIBUTE_UNUSED, asection *sec,
+elf32_arm_write_section (bfd *output_bfd,
+ struct bfd_link_info *link_info, asection *sec,
bfd_byte *contents)
{
- int mapcount;
+ int mapcount, errcount;
_arm_elf_section_data *arm_data;
+ struct elf32_arm_link_hash_table *globals = elf32_arm_hash_table (link_info);
elf32_arm_section_map *map;
+ elf32_vfp11_erratum_list *errnode;
bfd_vma ptr;
bfd_vma end;
- bfd_vma offset;
+ bfd_vma offset = sec->output_section->vma + sec->output_offset;
bfd_byte tmp;
int i;
@@ -7870,57 +9804,136 @@ elf32_arm_write_section (bfd *output_bfd ATTRIBUTE_UNUSED, asection *sec,
mapcount = arm_data->mapcount;
map = arm_data->map;
+ errcount = arm_data->erratumcount;
+
+ if (errcount != 0)
+ {
+ unsigned int endianflip = bfd_big_endian (output_bfd) ? 3 : 0;
+
+ for (errnode = arm_data->erratumlist; errnode != 0;
+ errnode = errnode->next)
+ {
+ bfd_vma index = errnode->vma - offset;
+
+ switch (errnode->type)
+ {
+ case VFP11_ERRATUM_BRANCH_TO_ARM_VENEER:
+ {
+ bfd_vma branch_to_veneer;
+ /* Original condition code of instruction, plus bit mask for
+ ARM B instruction. */
+ unsigned int insn = (errnode->u.b.vfp_insn & 0xf0000000)
+ | 0x0a000000;
+
+ /* The instruction is before the label. */
+ index -= 4;
+
+ /* Above offset included in -4 below. */
+ branch_to_veneer = errnode->u.b.veneer->vma
+ - errnode->vma - 4;
+
+ if ((signed) branch_to_veneer < -(1 << 25)
+ || (signed) branch_to_veneer >= (1 << 25))
+ (*_bfd_error_handler) (_("%B: error: VFP11 veneer out of "
+ "range"), output_bfd);
+
+ insn |= (branch_to_veneer >> 2) & 0xffffff;
+ contents[endianflip ^ index] = insn & 0xff;
+ contents[endianflip ^ (index + 1)] = (insn >> 8) & 0xff;
+ contents[endianflip ^ (index + 2)] = (insn >> 16) & 0xff;
+ contents[endianflip ^ (index + 3)] = (insn >> 24) & 0xff;
+ }
+ break;
+
+ case VFP11_ERRATUM_ARM_VENEER:
+ {
+ bfd_vma branch_from_veneer;
+ unsigned int insn;
+
+ /* Take size of veneer into account. */
+ branch_from_veneer = errnode->u.v.branch->vma
+ - errnode->vma - 12;
+
+ if ((signed) branch_from_veneer < -(1 << 25)
+ || (signed) branch_from_veneer >= (1 << 25))
+ (*_bfd_error_handler) (_("%B: error: VFP11 veneer out of "
+ "range"), output_bfd);
+
+ /* Original instruction. */
+ insn = errnode->u.v.branch->u.b.vfp_insn;
+ contents[endianflip ^ index] = insn & 0xff;
+ contents[endianflip ^ (index + 1)] = (insn >> 8) & 0xff;
+ contents[endianflip ^ (index + 2)] = (insn >> 16) & 0xff;
+ contents[endianflip ^ (index + 3)] = (insn >> 24) & 0xff;
+
+ /* Branch back to insn after original insn. */
+ insn = 0xea000000 | ((branch_from_veneer >> 2) & 0xffffff);
+ contents[endianflip ^ (index + 4)] = insn & 0xff;
+ contents[endianflip ^ (index + 5)] = (insn >> 8) & 0xff;
+ contents[endianflip ^ (index + 6)] = (insn >> 16) & 0xff;
+ contents[endianflip ^ (index + 7)] = (insn >> 24) & 0xff;
+ }
+ break;
+
+ default:
+ abort ();
+ }
+ }
+ }
if (mapcount == 0)
return FALSE;
- qsort (map, mapcount, sizeof (* map), elf32_arm_compare_mapping);
-
- offset = sec->output_section->vma + sec->output_offset;
- ptr = map[0].vma - offset;
- for (i = 0; i < mapcount; i++)
+ if (globals->byteswap_code)
{
- if (i == mapcount - 1)
- end = sec->size;
- else
- end = map[i + 1].vma - offset;
+ qsort (map, mapcount, sizeof (* map), elf32_arm_compare_mapping);
- switch (map[i].type)
- {
- case 'a':
- /* Byte swap code words. */
- while (ptr + 3 < end)
- {
- tmp = contents[ptr];
- contents[ptr] = contents[ptr + 3];
- contents[ptr + 3] = tmp;
- tmp = contents[ptr + 1];
- contents[ptr + 1] = contents[ptr + 2];
- contents[ptr + 2] = tmp;
- ptr += 4;
- }
- break;
+ ptr = map[0].vma;
+ for (i = 0; i < mapcount; i++)
+ {
+ if (i == mapcount - 1)
+ end = sec->size;
+ else
+ end = map[i + 1].vma;
- case 't':
- /* Byte swap code halfwords. */
- while (ptr + 1 < end)
+ switch (map[i].type)
{
- tmp = contents[ptr];
- contents[ptr] = contents[ptr + 1];
- contents[ptr + 1] = tmp;
- ptr += 2;
- }
- break;
+ case 'a':
+ /* Byte swap code words. */
+ while (ptr + 3 < end)
+ {
+ tmp = contents[ptr];
+ contents[ptr] = contents[ptr + 3];
+ contents[ptr + 3] = tmp;
+ tmp = contents[ptr + 1];
+ contents[ptr + 1] = contents[ptr + 2];
+ contents[ptr + 2] = tmp;
+ ptr += 4;
+ }
+ break;
- case 'd':
- /* Leave data alone. */
- break;
- }
- ptr = end;
+ case 't':
+ /* Byte swap code halfwords. */
+ while (ptr + 1 < end)
+ {
+ tmp = contents[ptr];
+ contents[ptr] = contents[ptr + 1];
+ contents[ptr + 1] = tmp;
+ ptr += 2;
+ }
+ break;
+
+ case 'd':
+ /* Leave data alone. */
+ break;
+ }
+ ptr = end;
+ }
}
free (map);
arm_data->mapcount = 0;
+ arm_data->mapsize = 0;
arm_data->map = NULL;
unrecord_section_with_arm_elf_section_data (sec);
@@ -7938,11 +9951,25 @@ unrecord_section_via_map_over_sections (bfd * abfd ATTRIBUTE_UNUSED,
static bfd_boolean
elf32_arm_close_and_cleanup (bfd * abfd)
{
- bfd_map_over_sections (abfd, unrecord_section_via_map_over_sections, NULL);
+ if (abfd->sections)
+ bfd_map_over_sections (abfd,
+ unrecord_section_via_map_over_sections,
+ NULL);
return _bfd_elf_close_and_cleanup (abfd);
}
+static bfd_boolean
+elf32_arm_bfd_free_cached_info (bfd * abfd)
+{
+ if (abfd->sections)
+ bfd_map_over_sections (abfd,
+ unrecord_section_via_map_over_sections,
+ NULL);
+
+ return _bfd_free_cached_info (abfd);
+}
+
/* Display STT_ARM_TFUNC symbols as functions. */
static void
@@ -7958,13 +9985,14 @@ elf32_arm_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
/* Mangle thumb function symbols as we read them in. */
-static void
+static bfd_boolean
elf32_arm_swap_symbol_in (bfd * abfd,
const void *psrc,
const void *pshn,
Elf_Internal_Sym *dst)
{
- bfd_elf32_swap_symbol_in (abfd, psrc, pshn, dst);
+ if (!bfd_elf32_swap_symbol_in (abfd, psrc, pshn, dst))
+ return FALSE;
/* New EABI objects mark thumb function symbols by setting the low bit of
the address. Turn these into STT_ARM_TFUNC. */
@@ -7974,6 +10002,7 @@ elf32_arm_swap_symbol_in (bfd * abfd,
dst->st_info = ELF_ST_INFO (ELF_ST_BIND (dst->st_info), STT_ARM_TFUNC);
dst->st_value &= ~(bfd_vma) 1;
}
+ return TRUE;
}
@@ -7995,7 +10024,18 @@ elf32_arm_swap_symbol_out (bfd *abfd,
{
newsym = *src;
newsym.st_info = ELF_ST_INFO (ELF_ST_BIND (src->st_info), STT_FUNC);
- newsym.st_value |= 1;
+ if (newsym.st_shndx != SHN_UNDEF)
+ {
+ /* Do this only for defined symbols. At link type, the static
+ linker will simulate the work of dynamic linker of resolving
+ symbols and will carry over the thumbness of found symbols to
+ the output symbol table. It's not clear how it happens, but
+ the thumbness of undefined symbols can well be different at
+ runtime, and writing '1' for them will be confusing for users
+ and possibly for dynamic linker itself.
+ */
+ newsym.st_value |= 1;
+ }
src = &newsym;
}
@@ -8040,7 +10080,8 @@ elf32_arm_modify_segment_map (bfd *abfd,
/* We may add a PT_ARM_EXIDX program header. */
static int
-elf32_arm_additional_program_headers (bfd *abfd)
+elf32_arm_additional_program_headers (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
asection *sec;
@@ -8051,6 +10092,13 @@ elf32_arm_additional_program_headers (bfd *abfd)
return 0;
}
+/* We have two function types: STT_FUNC and STT_ARM_TFUNC. */
+static bfd_boolean
+elf32_arm_is_function_type (unsigned int type)
+{
+ return (type == STT_FUNC) || (type == STT_ARM_TFUNC);
+}
+
/* We use this to override swap_symbol_in and swap_symbol_out. */
const struct elf_size_info elf32_arm_size_info = {
sizeof (Elf32_External_Ehdr),
@@ -8088,6 +10136,7 @@ const struct elf_size_info elf32_arm_size_info = {
#define ELF_MAXPAGESIZE 0x8000
#endif
#define ELF_MINPAGESIZE 0x1000
+#define ELF_COMMONPAGESIZE 0x1000
#define bfd_elf32_mkobject elf32_arm_mkobject
@@ -8097,15 +10146,17 @@ const struct elf_size_info elf32_arm_size_info = {
#define bfd_elf32_bfd_print_private_bfd_data elf32_arm_print_private_bfd_data
#define bfd_elf32_bfd_link_hash_table_create elf32_arm_link_hash_table_create
#define bfd_elf32_bfd_reloc_type_lookup elf32_arm_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup elf32_arm_reloc_name_lookup
#define bfd_elf32_find_nearest_line elf32_arm_find_nearest_line
#define bfd_elf32_find_inliner_info elf32_arm_find_inliner_info
#define bfd_elf32_new_section_hook elf32_arm_new_section_hook
#define bfd_elf32_bfd_is_target_special_symbol elf32_arm_is_target_special_symbol
#define bfd_elf32_close_and_cleanup elf32_arm_close_and_cleanup
-#define bfd_elf32_bfd_final_link elf32_arm_bfd_final_link
+#define bfd_elf32_bfd_free_cached_info elf32_arm_bfd_free_cached_info
#define elf_backend_get_symbol_type elf32_arm_get_symbol_type
#define elf_backend_gc_mark_hook elf32_arm_gc_mark_hook
+#define elf_backend_gc_mark_extra_sections elf32_arm_gc_mark_extra_sections
#define elf_backend_gc_sweep_hook elf32_arm_gc_sweep_hook
#define elf_backend_check_relocs elf32_arm_check_relocs
#define elf_backend_relocate_section elf32_arm_relocate_section
@@ -8114,8 +10165,8 @@ const struct elf_size_info elf32_arm_size_info = {
#define elf_backend_create_dynamic_sections elf32_arm_create_dynamic_sections
#define elf_backend_finish_dynamic_symbol elf32_arm_finish_dynamic_symbol
#define elf_backend_finish_dynamic_sections elf32_arm_finish_dynamic_sections
-#define elf_backend_link_output_symbol_hook elf32_arm_output_symbol_hook
#define elf_backend_size_dynamic_sections elf32_arm_size_dynamic_sections
+#define elf_backend_init_index_section _bfd_elf_init_2_index_sections
#define elf_backend_post_process_headers elf32_arm_post_process_headers
#define elf_backend_reloc_type_class elf32_arm_reloc_type_class
#define elf_backend_object_p elf32_arm_object_p
@@ -8129,6 +10180,11 @@ const struct elf_size_info elf32_arm_size_info = {
#define elf_backend_modify_segment_map elf32_arm_modify_segment_map
#define elf_backend_additional_program_headers \
elf32_arm_additional_program_headers
+#define elf_backend_output_arch_local_syms \
+ elf32_arm_output_arch_local_syms
+#define elf_backend_begin_write_processing \
+ elf32_arm_begin_write_processing
+#define elf_backend_is_function_type elf32_arm_is_function_type
#define elf_backend_can_refcount 1
#define elf_backend_can_gc_sections 1
@@ -8138,10 +10194,18 @@ const struct elf_size_info elf32_arm_size_info = {
#define elf_backend_may_use_rel_p 1
#define elf_backend_may_use_rela_p 0
#define elf_backend_default_use_rela_p 0
-#define elf_backend_rela_normal 0
#define elf_backend_got_header_size 12
+#undef elf_backend_obj_attrs_vendor
+#define elf_backend_obj_attrs_vendor "aeabi"
+#undef elf_backend_obj_attrs_section
+#define elf_backend_obj_attrs_section ".ARM.attributes"
+#undef elf_backend_obj_attrs_arg_type
+#define elf_backend_obj_attrs_arg_type elf32_arm_obj_attrs_arg_type
+#undef elf_backend_obj_attrs_section_type
+#define elf_backend_obj_attrs_section_type SHT_ARM_ATTRIBUTES
+
#include "elf32-target.h"
/* VxWorks Targets */
@@ -8202,8 +10266,6 @@ elf32_arm_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker)
#define elf_backend_may_use_rela_p 1
#undef elf_backend_default_use_rela_p
#define elf_backend_default_use_rela_p 1
-#undef elf_backend_rela_normal
-#define elf_backend_rela_normal 1
#undef elf_backend_want_plt_sym
#define elf_backend_want_plt_sym 1
#undef ELF_MAXPAGESIZE
@@ -8254,24 +10316,23 @@ elf32_arm_symbian_special_sections[] =
the loadable read-only segment. The post-linker may wish to
refer to these sections, but they are not part of the final
program image. */
- { ".dynamic", 8, 0, SHT_DYNAMIC, 0 },
- { ".dynstr", 7, 0, SHT_STRTAB, 0 },
- { ".dynsym", 7, 0, SHT_DYNSYM, 0 },
- { ".got", 4, 0, SHT_PROGBITS, 0 },
- { ".hash", 5, 0, SHT_HASH, 0 },
+ { STRING_COMMA_LEN (".dynamic"), 0, SHT_DYNAMIC, 0 },
+ { STRING_COMMA_LEN (".dynstr"), 0, SHT_STRTAB, 0 },
+ { STRING_COMMA_LEN (".dynsym"), 0, SHT_DYNSYM, 0 },
+ { STRING_COMMA_LEN (".got"), 0, SHT_PROGBITS, 0 },
+ { STRING_COMMA_LEN (".hash"), 0, SHT_HASH, 0 },
/* These sections do not need to be writable as the SymbianOS
postlinker will arrange things so that no dynamic relocation is
required. */
- { ".init_array", 11, 0, SHT_INIT_ARRAY, SHF_ALLOC },
- { ".fini_array", 11, 0, SHT_FINI_ARRAY, SHF_ALLOC },
- { ".preinit_array", 14, 0, SHT_PREINIT_ARRAY, SHF_ALLOC },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".init_array"), 0, SHT_INIT_ARRAY, SHF_ALLOC },
+ { STRING_COMMA_LEN (".fini_array"), 0, SHT_FINI_ARRAY, SHF_ALLOC },
+ { STRING_COMMA_LEN (".preinit_array"), 0, SHT_PREINIT_ARRAY, SHF_ALLOC },
+ { NULL, 0, 0, 0, 0 }
};
static void
elf32_arm_symbian_begin_write_processing (bfd *abfd,
- struct bfd_link_info *link_info
- ATTRIBUTE_UNUSED)
+ struct bfd_link_info *link_info)
{
/* BPABI objects are never loaded directly by an OS kernel; they are
processed by a postlinker first, into an OS-specific format. If
@@ -8282,6 +10343,7 @@ elf32_arm_symbian_begin_write_processing (bfd *abfd,
recognize that the program headers should not be mapped into any
loadable segment. */
abfd->flags &= ~D_PAGED;
+ elf32_arm_begin_write_processing(abfd, link_info);
}
static bfd_boolean
@@ -8298,9 +10360,16 @@ elf32_arm_symbian_modify_segment_map (bfd *abfd,
dynsec = bfd_get_section_by_name (abfd, ".dynamic");
if (dynsec)
{
- m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
- m->next = elf_tdata (abfd)->segment_map;
- elf_tdata (abfd)->segment_map = m;
+ for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
+ if (m->p_type == PT_DYNAMIC)
+ break;
+
+ if (m == NULL)
+ {
+ m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
+ m->next = elf_tdata (abfd)->segment_map;
+ elf_tdata (abfd)->segment_map = m;
+ }
}
/* Also call the generic arm routine. */
@@ -8349,8 +10418,6 @@ elf32_arm_symbian_modify_segment_map (bfd *abfd,
#define elf_backend_may_use_rela_p 0
#undef elf_backend_default_use_rela_p
#define elf_backend_default_use_rela_p 0
-#undef elf_backend_rela_normal
-#define elf_backend_rela_normal 0
#undef elf_backend_want_plt_sym
#define elf_backend_want_plt_sym 0
#undef ELF_MAXPAGESIZE
diff --git a/bfd/elf32-avr.c b/bfd/elf32-avr.c
index ec42bb335d1a..9169a8b88c38 100644
--- a/bfd/elf32-avr.c
+++ b/bfd/elf32-avr.c
@@ -1,5 +1,5 @@
/* AVR-specific support for 32-bit ELF
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2006
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2006, 2007
Free Software Foundation, Inc.
Contributed by Denis Chertykov <denisc@overta.ru>
@@ -20,11 +20,99 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/avr.h"
+#include "elf32-avr.h"
+
+/* Enable debugging printout at stdout with this variable. */
+static bfd_boolean debug_relax = FALSE;
+
+/* Enable debugging printout at stdout with this variable. */
+static bfd_boolean debug_stubs = FALSE;
+
+/* Hash table initialization and handling. Code is taken from the hppa port
+ and adapted to the needs of AVR. */
+
+/* We use two hash tables to hold information for linking avr objects.
+
+ The first is the elf32_avr_link_hash_tablse which is derived from the
+ stanard ELF linker hash table. We use this as a place to attach the other
+ hash table and some static information.
+
+ The second is the stub hash table which is derived from the base BFD
+ hash table. The stub hash table holds the information on the linker
+ stubs. */
+
+struct elf32_avr_stub_hash_entry
+{
+ /* Base hash table entry structure. */
+ struct bfd_hash_entry bh_root;
+
+ /* Offset within stub_sec of the beginning of this stub. */
+ bfd_vma stub_offset;
+
+ /* Given the symbol's value and its section we can determine its final
+ value when building the stubs (so the stub knows where to jump). */
+ bfd_vma target_value;
+
+ /* This way we could mark stubs to be no longer necessary. */
+ bfd_boolean is_actually_needed;
+};
+
+struct elf32_avr_link_hash_table
+{
+ /* The main hash table. */
+ struct elf_link_hash_table etab;
+
+ /* The stub hash table. */
+ struct bfd_hash_table bstab;
+
+ bfd_boolean no_stubs;
+
+ /* Linker stub bfd. */
+ bfd *stub_bfd;
+
+ /* The stub section. */
+ asection *stub_sec;
+
+ /* Usually 0, unless we are generating code for a bootloader. Will
+ be initialized by elf32_avr_size_stubs to the vma offset of the
+ output section associated with the stub section. */
+ bfd_vma vector_base;
+
+ /* Assorted information used by elf32_avr_size_stubs. */
+ unsigned int bfd_count;
+ int top_index;
+ asection ** input_list;
+ Elf_Internal_Sym ** all_local_syms;
+
+ /* Tables for mapping vma beyond the 128k boundary to the address of the
+ corresponding stub. (AMT)
+ "amt_max_entry_cnt" reflects the number of entries that memory is allocated
+ for in the "amt_stub_offsets" and "amt_destination_addr" arrays.
+ "amt_entry_cnt" informs how many of these entries actually contain
+ useful data. */
+ unsigned int amt_entry_cnt;
+ unsigned int amt_max_entry_cnt;
+ bfd_vma * amt_stub_offsets;
+ bfd_vma * amt_destination_addr;
+};
+
+/* Various hash macros and functions. */
+#define avr_link_hash_table(p) \
+ /* PR 3874: Check that we have an AVR style hash table before using it. */\
+ ((p)->hash->table.newfunc != elf32_avr_link_hash_newfunc ? NULL : \
+ ((struct elf32_avr_link_hash_table *) ((p)->hash)))
+
+#define avr_stub_hash_entry(ent) \
+ ((struct elf32_avr_stub_hash_entry *)(ent))
+
+#define avr_stub_hash_lookup(table, string, create, copy) \
+ ((struct elf32_avr_stub_hash_entry *) \
+ bfd_hash_lookup ((table), (string), (create), (copy)))
static reloc_howto_type elf_avr_howto_table[] =
{
@@ -101,7 +189,8 @@ static reloc_howto_type elf_avr_howto_table[] =
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
- /* A 16 bit absolute relocation for command address. */
+ /* A 16 bit absolute relocation for command address
+ Will be changed when linker stubs are needed. */
HOWTO (R_AVR_16_PM, /* type */
1, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
@@ -207,7 +296,7 @@ static reloc_howto_type elf_avr_howto_table[] =
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* A low 8 bit absolute relocation of 24 bit program memory address.
- For LDI command. */
+ For LDI command. Will not be changed when linker stubs are needed. */
HOWTO (R_AVR_LO8_LDI_PM, /* type */
1, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
@@ -221,8 +310,8 @@ static reloc_howto_type elf_avr_howto_table[] =
0xffff, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
- /* A high 8 bit absolute relocation of 16 bit program memory address.
- For LDI command. */
+ /* A low 8 bit absolute relocation of 24 bit program memory address.
+ For LDI command. Will not be changed when linker stubs are needed. */
HOWTO (R_AVR_HI8_LDI_PM, /* type */
9, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
@@ -236,8 +325,8 @@ static reloc_howto_type elf_avr_howto_table[] =
0xffff, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
- /* A high 8 bit absolute relocation of 24 bit program memory address.
- For LDI command. */
+ /* A low 8 bit absolute relocation of 24 bit program memory address.
+ For LDI command. Will not be changed when linker stubs are needed. */
HOWTO (R_AVR_HH8_LDI_PM, /* type */
17, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
@@ -251,8 +340,8 @@ static reloc_howto_type elf_avr_howto_table[] =
0xffff, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
- /* A low 8 bit absolute relocation of a negative 24 bit
- program memory address. For LDI command. */
+ /* A low 8 bit absolute relocation of 24 bit program memory address.
+ For LDI command. Will not be changed when linker stubs are needed. */
HOWTO (R_AVR_LO8_LDI_PM_NEG, /* type */
1, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
@@ -266,8 +355,8 @@ static reloc_howto_type elf_avr_howto_table[] =
0xffff, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
- /* A high 8 bit absolute relocation of a negative 16 bit
- program memory address. For LDI command. */
+ /* A low 8 bit absolute relocation of 24 bit program memory address.
+ For LDI command. Will not be changed when linker stubs are needed. */
HOWTO (R_AVR_HI8_LDI_PM_NEG, /* type */
9, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
@@ -281,8 +370,8 @@ static reloc_howto_type elf_avr_howto_table[] =
0xffff, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
- /* A high 8 bit absolute relocation of a negative 24 bit
- program memory address. For LDI command. */
+ /* A low 8 bit absolute relocation of 24 bit program memory address.
+ For LDI command. Will not be changed when linker stubs are needed. */
HOWTO (R_AVR_HH8_LDI_PM_NEG, /* type */
17, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
@@ -382,7 +471,37 @@ static reloc_howto_type elf_avr_howto_table[] =
FALSE, /* partial_inplace */
0xffff, /* src_mask */
0xffff, /* dst_mask */
- FALSE) /* pcrel_offset */
+ FALSE), /* pcrel_offset */
+ /* A low 8 bit absolute relocation of 24 bit program memory address.
+ For LDI command. Will be changed when linker stubs are needed. */
+ HOWTO (R_AVR_LO8_LDI_GS, /* type */
+ 1, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_AVR_LO8_LDI_GS", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+ /* A low 8 bit absolute relocation of 24 bit program memory address.
+ For LDI command. Will be changed when linker stubs are needed. */
+ HOWTO (R_AVR_HI8_LDI_GS, /* type */
+ 9, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_AVR_HI8_LDI_GS", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE) /* pcrel_offset */
};
/* Map BFD reloc types to AVR ELF reloc types. */
@@ -393,7 +512,7 @@ struct avr_reloc_map
unsigned int elf_reloc_val;
};
- static const struct avr_reloc_map avr_reloc_map[] =
+static const struct avr_reloc_map avr_reloc_map[] =
{
{ BFD_RELOC_NONE, R_AVR_NONE },
{ BFD_RELOC_32, R_AVR_32 },
@@ -410,7 +529,9 @@ struct avr_reloc_map
{ BFD_RELOC_AVR_HH8_LDI_NEG, R_AVR_HH8_LDI_NEG },
{ BFD_RELOC_AVR_MS8_LDI_NEG, R_AVR_MS8_LDI_NEG },
{ BFD_RELOC_AVR_LO8_LDI_PM, R_AVR_LO8_LDI_PM },
+ { BFD_RELOC_AVR_LO8_LDI_GS, R_AVR_LO8_LDI_GS },
{ BFD_RELOC_AVR_HI8_LDI_PM, R_AVR_HI8_LDI_PM },
+ { BFD_RELOC_AVR_HI8_LDI_GS, R_AVR_HI8_LDI_GS },
{ BFD_RELOC_AVR_HH8_LDI_PM, R_AVR_HH8_LDI_PM },
{ BFD_RELOC_AVR_LO8_LDI_PM_NEG, R_AVR_LO8_LDI_PM_NEG },
{ BFD_RELOC_AVR_HI8_LDI_PM_NEG, R_AVR_HI8_LDI_PM_NEG },
@@ -429,10 +550,116 @@ struct avr_reloc_map
that we will never suggest a wrap-around jump during relaxation.
The logic of the source code later on assumes that in
avr_pc_wrap_around one single bit is set. */
+static bfd_vma avr_pc_wrap_around = 0x10000000;
+
+/* If this variable holds a value different from zero, the linker relaxation
+ machine will try to optimize call/ret sequences by a single jump
+ instruction. This option could be switched off by a linker switch. */
+static int avr_replace_call_ret_sequences = 1;
+
+/* Initialize an entry in the stub hash table. */
+
+static struct bfd_hash_entry *
+stub_hash_newfunc (struct bfd_hash_entry *entry,
+ struct bfd_hash_table *table,
+ const char *string)
+{
+ /* Allocate the structure if it has not already been allocated by a
+ subclass. */
+ if (entry == NULL)
+ {
+ entry = bfd_hash_allocate (table,
+ sizeof (struct elf32_avr_stub_hash_entry));
+ if (entry == NULL)
+ return entry;
+ }
+
+ /* Call the allocation method of the superclass. */
+ entry = bfd_hash_newfunc (entry, table, string);
+ if (entry != NULL)
+ {
+ struct elf32_avr_stub_hash_entry *hsh;
+
+ /* Initialize the local fields. */
+ hsh = avr_stub_hash_entry (entry);
+ hsh->stub_offset = 0;
+ hsh->target_value = 0;
+ }
+
+ return entry;
+}
-unsigned int avr_pc_wrap_around = 0x10000000;
+/* This function is just a straight passthrough to the real
+ function in linker.c. Its prupose is so that its address
+ can be compared inside the avr_link_hash_table macro. */
+
+static struct bfd_hash_entry *
+elf32_avr_link_hash_newfunc (struct bfd_hash_entry * entry,
+ struct bfd_hash_table * table,
+ const char * string)
+{
+ return _bfd_elf_link_hash_newfunc (entry, table, string);
+}
+
+/* Create the derived linker hash table. The AVR ELF port uses the derived
+ hash table to keep information specific to the AVR ELF linker (without
+ using static variables). */
+
+static struct bfd_link_hash_table *
+elf32_avr_link_hash_table_create (bfd *abfd)
+{
+ struct elf32_avr_link_hash_table *htab;
+ bfd_size_type amt = sizeof (*htab);
+
+ htab = bfd_malloc (amt);
+ if (htab == NULL)
+ return NULL;
+
+ if (!_bfd_elf_link_hash_table_init (&htab->etab, abfd,
+ elf32_avr_link_hash_newfunc,
+ sizeof (struct elf_link_hash_entry)))
+ {
+ free (htab);
+ return NULL;
+ }
+
+ /* Init the stub hash table too. */
+ if (!bfd_hash_table_init (&htab->bstab, stub_hash_newfunc,
+ sizeof (struct elf32_avr_stub_hash_entry)))
+ return NULL;
+
+ htab->stub_bfd = NULL;
+ htab->stub_sec = NULL;
+
+ /* Initialize the address mapping table. */
+ htab->amt_stub_offsets = NULL;
+ htab->amt_destination_addr = NULL;
+ htab->amt_entry_cnt = 0;
+ htab->amt_max_entry_cnt = 0;
+
+ return &htab->etab.root;
+}
+
+/* Free the derived linker hash table. */
+
+static void
+elf32_avr_link_hash_table_free (struct bfd_link_hash_table *btab)
+{
+ struct elf32_avr_link_hash_table *htab
+ = (struct elf32_avr_link_hash_table *) btab;
+
+ /* Free the address mapping table. */
+ if (htab->amt_stub_offsets != NULL)
+ free (htab->amt_stub_offsets);
+ if (htab->amt_destination_addr != NULL)
+ free (htab->amt_destination_addr);
+
+ bfd_hash_table_free (&htab->bstab);
+ _bfd_generic_link_hash_table_free (btab);
+}
/* Calculates the effective distance of a pc relative jump/call. */
+
static int
avr_relative_distance_considering_wrap_around (unsigned int distance)
{
@@ -455,10 +682,24 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
for (i = 0;
i < sizeof (avr_reloc_map) / sizeof (struct avr_reloc_map);
i++)
- {
- if (avr_reloc_map[i].bfd_reloc_val == code)
- return &elf_avr_howto_table[avr_reloc_map[i].elf_reloc_val];
- }
+ if (avr_reloc_map[i].bfd_reloc_val == code)
+ return &elf_avr_howto_table[avr_reloc_map[i].elf_reloc_val];
+
+ return NULL;
+}
+
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (elf_avr_howto_table) / sizeof (elf_avr_howto_table[0]);
+ i++)
+ if (elf_avr_howto_table[i].name != NULL
+ && strcasecmp (elf_avr_howto_table[i].name, r_name) == 0)
+ return &elf_avr_howto_table[i];
return NULL;
}
@@ -477,48 +718,6 @@ avr_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
cache_ptr->howto = &elf_avr_howto_table[r_type];
}
-static asection *
-elf32_avr_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela *rel,
- struct elf_link_hash_entry *h,
- Elf_Internal_Sym *sym)
-{
- if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
-}
-
-static bfd_boolean
-elf32_avr_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- asection *sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
-{
- /* We don't use got and plt entries for avr. */
- return TRUE;
-}
-
/* Look through the relocs for a section during the first phase.
Since we don't do .gots or .plts, we just need to consider the
virtual table relocs for gc. */
@@ -564,20 +763,57 @@ elf32_avr_check_relocs (bfd *abfd,
return TRUE;
}
+static bfd_boolean
+avr_stub_is_required_for_16_bit_reloc (bfd_vma relocation)
+{
+ return (relocation >= 0x020000);
+}
+
+/* Returns the address of the corresponding stub if there is one.
+ Returns otherwise an address above 0x020000. This function
+ could also be used, if there is no knowledge on the section where
+ the destination is found. */
+
+static bfd_vma
+avr_get_stub_addr (bfd_vma srel,
+ struct elf32_avr_link_hash_table *htab)
+{
+ unsigned int index;
+ bfd_vma stub_sec_addr =
+ (htab->stub_sec->output_section->vma +
+ htab->stub_sec->output_offset);
+
+ for (index = 0; index < htab->amt_max_entry_cnt; index ++)
+ if (htab->amt_destination_addr[index] == srel)
+ return htab->amt_stub_offsets[index] + stub_sec_addr;
+
+ /* Return an address that could not be reached by 16 bit relocs. */
+ return 0x020000;
+}
+
/* Perform a single relocation. By default we use the standard BFD
routines, but a few relocs, we have to do them ourselves. */
static bfd_reloc_status_type
-avr_final_link_relocate (reloc_howto_type * howto,
- bfd * input_bfd,
- asection * input_section,
- bfd_byte * contents,
- Elf_Internal_Rela * rel,
- bfd_vma relocation)
+avr_final_link_relocate (reloc_howto_type * howto,
+ bfd * input_bfd,
+ asection * input_section,
+ bfd_byte * contents,
+ Elf_Internal_Rela * rel,
+ bfd_vma relocation,
+ struct elf32_avr_link_hash_table * htab)
{
bfd_reloc_status_type r = bfd_reloc_ok;
bfd_vma x;
bfd_signed_vma srel;
+ bfd_signed_vma reloc_addr;
+ bfd_boolean use_stubs = FALSE;
+ /* Usually is 0, unless we are generating code for a bootloader. */
+ bfd_signed_vma base_addr = htab->vector_base;
+
+ /* Absolute addr of the reloc in the final excecutable. */
+ reloc_addr = rel->r_offset + input_section->output_section->vma
+ + input_section->output_offset;
switch (howto->type)
{
@@ -748,9 +984,31 @@ avr_final_link_relocate (reloc_howto_type * howto,
bfd_put_16 (input_bfd, x, contents);
break;
+ case R_AVR_LO8_LDI_GS:
+ use_stubs = (!htab->no_stubs);
+ /* Fall through. */
case R_AVR_LO8_LDI_PM:
contents += rel->r_offset;
srel = (bfd_signed_vma) relocation + rel->r_addend;
+
+ if (use_stubs
+ && avr_stub_is_required_for_16_bit_reloc (srel - base_addr))
+ {
+ bfd_vma old_srel = srel;
+
+ /* We need to use the address of the stub instead. */
+ srel = avr_get_stub_addr (srel, htab);
+ if (debug_stubs)
+ printf ("LD: Using jump stub (at 0x%x) with destination 0x%x for "
+ "reloc at address 0x%x.\n",
+ (unsigned int) srel,
+ (unsigned int) old_srel,
+ (unsigned int) reloc_addr);
+
+ if (avr_stub_is_required_for_16_bit_reloc (srel - base_addr))
+ return bfd_reloc_outofrange;
+ }
+
if (srel & 1)
return bfd_reloc_outofrange;
srel = srel >> 1;
@@ -759,9 +1017,31 @@ avr_final_link_relocate (reloc_howto_type * howto,
bfd_put_16 (input_bfd, x, contents);
break;
+ case R_AVR_HI8_LDI_GS:
+ use_stubs = (!htab->no_stubs);
+ /* Fall through. */
case R_AVR_HI8_LDI_PM:
contents += rel->r_offset;
srel = (bfd_signed_vma) relocation + rel->r_addend;
+
+ if (use_stubs
+ && avr_stub_is_required_for_16_bit_reloc (srel - base_addr))
+ {
+ bfd_vma old_srel = srel;
+
+ /* We need to use the address of the stub instead. */
+ srel = avr_get_stub_addr (srel, htab);
+ if (debug_stubs)
+ printf ("LD: Using jump stub (at 0x%x) with destination 0x%x for "
+ "reloc at address 0x%x.\n",
+ (unsigned int) srel,
+ (unsigned int) old_srel,
+ (unsigned int) reloc_addr);
+
+ if (avr_stub_is_required_for_16_bit_reloc (srel - base_addr))
+ return bfd_reloc_outofrange;
+ }
+
if (srel & 1)
return bfd_reloc_outofrange;
srel = srel >> 1;
@@ -833,6 +1113,35 @@ avr_final_link_relocate (reloc_howto_type * howto,
bfd_put_16 (input_bfd, (bfd_vma) srel & 0xffff, contents+2);
break;
+ case R_AVR_16_PM:
+ use_stubs = (!htab->no_stubs);
+ contents += rel->r_offset;
+ srel = (bfd_signed_vma) relocation + rel->r_addend;
+
+ if (use_stubs
+ && avr_stub_is_required_for_16_bit_reloc (srel - base_addr))
+ {
+ bfd_vma old_srel = srel;
+
+ /* We need to use the address of the stub instead. */
+ srel = avr_get_stub_addr (srel,htab);
+ if (debug_stubs)
+ printf ("LD: Using jump stub (at 0x%x) with destination 0x%x for "
+ "reloc at address 0x%x.\n",
+ (unsigned int) srel,
+ (unsigned int) old_srel,
+ (unsigned int) reloc_addr);
+
+ if (avr_stub_is_required_for_16_bit_reloc (srel - base_addr))
+ return bfd_reloc_outofrange;
+ }
+
+ if (srel & 1)
+ return bfd_reloc_outofrange;
+ srel = srel >> 1;
+ bfd_put_16 (input_bfd, (bfd_vma) srel &0x00ffff, contents);
+ break;
+
default:
r = _bfd_final_link_relocate (howto, input_bfd, input_section,
contents, rel->r_offset,
@@ -858,9 +1167,7 @@ elf32_avr_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
struct elf_link_hash_entry ** sym_hashes;
Elf_Internal_Rela * rel;
Elf_Internal_Rela * relend;
-
- if (info->relocatable)
- return TRUE;
+ struct elf32_avr_link_hash_table * htab = avr_link_hash_table (info);
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -878,7 +1185,6 @@ elf32_avr_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
const char * name;
int r_type;
- /* This is a final link. */
r_type = ELF32_R_TYPE (rel->r_info);
r_symndx = ELF32_R_SYM (rel->r_info);
howto = elf_avr_howto_table + ELF32_R_TYPE (rel->r_info);
@@ -908,8 +1214,22 @@ elf32_avr_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
name = h->root.root.string;
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
r = avr_final_link_relocate (howto, input_bfd, input_section,
- contents, rel, relocation);
+ contents, rel, relocation, htab);
if (r != bfd_reloc_ok)
{
@@ -990,6 +1310,10 @@ bfd_elf_avr_final_write_processing (bfd *abfd,
case bfd_mach_avr5:
val = E_AVR_MACH_AVR5;
break;
+
+ case bfd_mach_avr6:
+ val = E_AVR_MACH_AVR6;
+ break;
}
elf_elfheader (abfd)->e_machine = EM_AVR;
@@ -1032,6 +1356,10 @@ elf32_avr_object_p (bfd *abfd)
case E_AVR_MACH_AVR5:
e_set = bfd_mach_avr5;
break;
+
+ case E_AVR_MACH_AVR6:
+ e_set = bfd_mach_avr6;
+ break;
}
}
return bfd_default_set_arch_mach (abfd, bfd_arch_avr,
@@ -1039,9 +1367,6 @@ elf32_avr_object_p (bfd *abfd)
}
-/* Enable debugging printout at stdout with a value of 1. */
-#define DEBUG_RELAX 0
-
/* Delete some bytes from a section while changing the size of an instruction.
The parameter "addr" denotes the section-relative offset pointing just
behind the shrinked instruction. "addr+count" point at the first
@@ -1049,9 +1374,9 @@ elf32_avr_object_p (bfd *abfd)
static bfd_boolean
elf32_avr_relax_delete_bytes (bfd *abfd,
- asection *sec,
+ asection *sec,
bfd_vma addr,
- int count)
+ int count)
{
Elf_Internal_Shdr *symtab_hdr;
unsigned int sec_shndx;
@@ -1085,10 +1410,9 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
(size_t) (toaddr - addr - count));
sec->size -= count;
- /* Adjust all the relocs. */
+ /* Adjust all the reloc addresses. */
for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
{
- bfd_vma symval;
bfd_vma old_reloc_address;
bfd_vma shrinked_insn_address;
@@ -1101,7 +1425,7 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
if ((irel->r_offset > addr
&& irel->r_offset < toaddr))
{
- if (DEBUG_RELAX)
+ if (debug_relax)
printf ("Relocation at address 0x%x needs to be moved.\n"
"Old section offset: 0x%x, New section offset: 0x%x \n",
(unsigned int) old_reloc_address,
@@ -1111,69 +1435,91 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
irel->r_offset -= count;
}
- /* The reloc's own addresses are now ok. However, we need to readjust
- the reloc's addend if two conditions are met:
- 1.) the reloc is relative to a symbol in this section that
- is located in front of the shrinked instruction
- 2.) symbol plus addend end up behind the shrinked instruction.
-
- This should happen only for local symbols that are progmem related. */
-
- /* Read this BFD's local symbols if we haven't done so already. */
- if (isymbuf == NULL && symtab_hdr->sh_info != 0)
- {
- isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
- if (isymbuf == NULL)
- isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
- symtab_hdr->sh_info, 0,
- NULL, NULL, NULL);
- if (isymbuf == NULL)
- return FALSE;
- }
-
- /* Get the value of the symbol referred to by the reloc. */
- if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info)
- {
- /* A local symbol. */
- Elf_Internal_Sym *isym;
- asection *sym_sec;
+ }
- isym = isymbuf + ELF32_R_SYM (irel->r_info);
- sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
- symval = isym->st_value;
- /* If the reloc is absolute, it will not have
- a symbol or section associated with it. */
- if (sym_sec)
- {
- symval += sym_sec->output_section->vma
- + sym_sec->output_offset;
-
- if (DEBUG_RELAX)
- printf ("Checking if the relocation's "
- "addend needs corrections.\n"
- "Address of anchor symbol: 0x%x \n"
- "Address of relocation target: 0x%x \n"
- "Address of relaxed insn: 0x%x \n",
- (unsigned int) symval,
- (unsigned int) (symval + irel->r_addend),
- (unsigned int) shrinked_insn_address);
-
- if (symval <= shrinked_insn_address
- && (symval + irel->r_addend) > shrinked_insn_address)
+ /* The reloc's own addresses are now ok. However, we need to readjust
+ the reloc's addend, i.e. the reloc's value if two conditions are met:
+ 1.) the reloc is relative to a symbol in this section that
+ is located in front of the shrinked instruction
+ 2.) symbol plus addend end up behind the shrinked instruction.
+
+ The most common case where this happens are relocs relative to
+ the section-start symbol.
+
+ This step needs to be done for all of the sections of the bfd. */
+
+ {
+ struct bfd_section *isec;
+
+ for (isec = abfd->sections; isec; isec = isec->next)
+ {
+ bfd_vma symval;
+ bfd_vma shrinked_insn_address;
+
+ shrinked_insn_address = (sec->output_section->vma
+ + sec->output_offset + addr - count);
+
+ irelend = elf_section_data (isec)->relocs + isec->reloc_count;
+ for (irel = elf_section_data (isec)->relocs;
+ irel < irelend;
+ irel++)
+ {
+ /* Read this BFD's local symbols if we haven't done
+ so already. */
+ if (isymbuf == NULL && symtab_hdr->sh_info != 0)
+ {
+ isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
+ if (isymbuf == NULL)
+ isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
+ symtab_hdr->sh_info, 0,
+ NULL, NULL, NULL);
+ if (isymbuf == NULL)
+ return FALSE;
+ }
+
+ /* Get the value of the symbol referred to by the reloc. */
+ if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info)
+ {
+ /* A local symbol. */
+ Elf_Internal_Sym *isym;
+ asection *sym_sec;
+
+ isym = isymbuf + ELF32_R_SYM (irel->r_info);
+ sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
+ symval = isym->st_value;
+ /* If the reloc is absolute, it will not have
+ a symbol or section associated with it. */
+ if (sym_sec == sec)
{
- irel->r_addend -= count;
-
- if (DEBUG_RELAX)
- printf ("Anchor symbol and relocation target bracket "
- "shrinked insn address.\n"
- "Need for new addend : 0x%x\n",
- (unsigned int) irel->r_addend);
+ symval += sym_sec->output_section->vma
+ + sym_sec->output_offset;
+
+ if (debug_relax)
+ printf ("Checking if the relocation's "
+ "addend needs corrections.\n"
+ "Address of anchor symbol: 0x%x \n"
+ "Address of relocation target: 0x%x \n"
+ "Address of relaxed insn: 0x%x \n",
+ (unsigned int) symval,
+ (unsigned int) (symval + irel->r_addend),
+ (unsigned int) shrinked_insn_address);
+
+ if (symval <= shrinked_insn_address
+ && (symval + irel->r_addend) > shrinked_insn_address)
+ {
+ irel->r_addend -= count;
+
+ if (debug_relax)
+ printf ("Relocation's addend needed to be fixed \n");
+ }
}
- }
- /* else ... Reference symbol is absolute. No adjustment needed. */
- }
- /* else ... Reference symbol is extern. No need for adjusting the addend. */
- }
+ /* else...Reference symbol is absolute. No adjustment needed. */
+ }
+ /* else...Reference symbol is extern. No need for adjusting
+ the addend. */
+ }
+ }
+ }
/* Adjust the local symbols defined in this section. */
isym = (Elf_Internal_Sym *) symtab_hdr->contents;
@@ -1238,7 +1584,7 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
contains 4-byte jump instructions whose relative offset must not
be changed. */
-static bfd_boolean
+static bfd_boolean
elf32_avr_relax_section (bfd *abfd,
asection *sec,
struct bfd_link_info *link_info,
@@ -1251,10 +1597,39 @@ elf32_avr_relax_section (bfd *abfd,
Elf_Internal_Sym *isymbuf = NULL;
static asection *last_input_section = NULL;
static Elf_Internal_Rela *last_reloc = NULL;
+ struct elf32_avr_link_hash_table *htab;
+
+ htab = avr_link_hash_table (link_info);
+ if (htab == NULL)
+ return FALSE;
/* Assume nothing changes. */
*again = FALSE;
+ if ((!htab->no_stubs) && (sec == htab->stub_sec))
+ {
+ /* We are just relaxing the stub section.
+ Let's calculate the size needed again. */
+ bfd_size_type last_estimated_stub_section_size = htab->stub_sec->size;
+
+ if (debug_relax)
+ printf ("Relaxing the stub section. Size prior to this pass: %i\n",
+ (int) last_estimated_stub_section_size);
+
+ elf32_avr_size_stubs (htab->stub_sec->output_section->owner,
+ link_info, FALSE);
+
+ /* Check if the number of trampolines changed. */
+ if (last_estimated_stub_section_size != htab->stub_sec->size)
+ *again = TRUE;
+
+ if (debug_relax)
+ printf ("Size of stub section after this pass: %i\n",
+ (int) htab->stub_sec->size);
+
+ return TRUE;
+ }
+
/* We don't have to do anything for a relocatable link, if
this section does not have relocs, or if this is not a
code section. */
@@ -1421,7 +1796,7 @@ elf32_avr_relax_section (bfd *abfd,
unsigned char code_msb;
unsigned char code_lsb;
- if (DEBUG_RELAX)
+ if (debug_relax)
printf ("shrinking jump/call instruction at address 0x%x"
" in section %s\n\n",
(int) dot, sec->name);
@@ -1496,8 +1871,9 @@ elf32_avr_relax_section (bfd *abfd,
+ sec->output_offset + irel->r_offset);
/* Here we look for rcall/ret or call/ret sequences that could be
- safely replaced by rjmp/ret or jmp/ret */
- if (0xd0 == (code_msb & 0xf0))
+ safely replaced by rjmp/ret or jmp/ret. */
+ if (((code_msb & 0xf0) == 0xd0)
+ && avr_replace_call_ret_sequences)
{
/* This insn is a rcall. */
unsigned char next_insn_msb = 0;
@@ -1517,7 +1893,7 @@ elf32_avr_relax_section (bfd *abfd,
into a rjmp instruction. */
code_msb &= 0xef;
bfd_put_8 (abfd, code_msb, contents + irel->r_offset + 1);
- if (DEBUG_RELAX)
+ if (debug_relax)
printf ("converted rcall/ret sequence at address 0x%x"
" into rjmp/ret sequence. Section is %s\n\n",
(int) dot, sec->name);
@@ -1526,7 +1902,8 @@ elf32_avr_relax_section (bfd *abfd,
}
}
else if ((0x94 == (code_msb & 0xfe))
- && (0x0e == (code_lsb & 0x0e)))
+ && (0x0e == (code_lsb & 0x0e))
+ && avr_replace_call_ret_sequences)
{
/* This insn is a call. */
unsigned char next_insn_msb = 0;
@@ -1547,7 +1924,7 @@ elf32_avr_relax_section (bfd *abfd,
code_lsb &= 0xfd;
bfd_put_8 (abfd, code_lsb, contents + irel->r_offset);
- if (DEBUG_RELAX)
+ if (debug_relax)
printf ("converted call/ret sequence at address 0x%x"
" into jmp/ret sequence. Section is %s\n\n",
(int) dot, sec->name);
@@ -1590,10 +1967,10 @@ elf32_avr_relax_section (bfd *abfd,
address_of_ret = dot + insn_size;
- if (DEBUG_RELAX && (insn_size == 2))
+ if (debug_relax && (insn_size == 2))
printf ("found rjmp / ret sequence at address 0x%x\n",
(int) dot);
- if (DEBUG_RELAX && (insn_size == 4))
+ if (debug_relax && (insn_size == 4))
printf ("found jmp / ret sequence at address 0x%x\n",
(int) dot);
@@ -1630,7 +2007,7 @@ elf32_avr_relax_section (bfd *abfd,
there_is_preceeding_non_skip_insn = 0;
if (there_is_preceeding_non_skip_insn == 0)
- if (DEBUG_RELAX)
+ if (debug_relax)
printf ("preceeding skip insn prevents deletion of"
" ret insn at addr 0x%x in section %s\n",
(int) dot + 2, sec->name);
@@ -1666,7 +2043,7 @@ elf32_avr_relax_section (bfd *abfd,
&& isym->st_shndx == sec_shndx)
{
deleting_ret_is_safe = 0;
- if (DEBUG_RELAX)
+ if (debug_relax)
printf ("local label prevents deletion of ret "
"insn at address 0x%x\n",
(int) dot + insn_size);
@@ -1695,7 +2072,7 @@ elf32_avr_relax_section (bfd *abfd,
&& sym_hash->root.u.def.value == section_offset_of_ret_insn)
{
deleting_ret_is_safe = 0;
- if (DEBUG_RELAX)
+ if (debug_relax)
printf ("global label prevents deletion of "
"ret insn at address 0x%x\n",
(int) dot + insn_size);
@@ -1772,7 +2149,7 @@ elf32_avr_relax_section (bfd *abfd,
if (address_of_ret == reloc_target)
{
deleting_ret_is_safe = 0;
- if (DEBUG_RELAX)
+ if (debug_relax)
printf ("ret from "
"rjmp/jmp ret sequence at address"
" 0x%x could not be deleted. ret"
@@ -1784,7 +2161,7 @@ elf32_avr_relax_section (bfd *abfd,
if (deleting_ret_is_safe)
{
- if (DEBUG_RELAX)
+ if (debug_relax)
printf ("unreachable ret instruction "
"at address 0x%x deleted.\n",
(int) dot + insn_size);
@@ -1952,6 +2329,625 @@ elf32_avr_get_relocated_section_contents (bfd *output_bfd,
}
+/* Determines the hash entry name for a particular reloc. It consists of
+ the identifier of the symbol section and the added reloc addend and
+ symbol offset relative to the section the symbol is attached to. */
+
+static char *
+avr_stub_name (const asection *symbol_section,
+ const bfd_vma symbol_offset,
+ const Elf_Internal_Rela *rela)
+{
+ char *stub_name;
+ bfd_size_type len;
+
+ len = 8 + 1 + 8 + 1 + 1;
+ stub_name = bfd_malloc (len);
+
+ sprintf (stub_name, "%08x+%08x",
+ symbol_section->id & 0xffffffff,
+ (unsigned int) ((rela->r_addend & 0xffffffff) + symbol_offset));
+
+ return stub_name;
+}
+
+
+/* Add a new stub entry to the stub hash. Not all fields of the new
+ stub entry are initialised. */
+
+static struct elf32_avr_stub_hash_entry *
+avr_add_stub (const char *stub_name,
+ struct elf32_avr_link_hash_table *htab)
+{
+ struct elf32_avr_stub_hash_entry *hsh;
+
+ /* Enter this entry into the linker stub hash table. */
+ hsh = avr_stub_hash_lookup (&htab->bstab, stub_name, TRUE, FALSE);
+
+ if (hsh == NULL)
+ {
+ (*_bfd_error_handler) (_("%B: cannot create stub entry %s"),
+ NULL, stub_name);
+ return NULL;
+ }
+
+ hsh->stub_offset = 0;
+ return hsh;
+}
+
+/* We assume that there is already space allocated for the stub section
+ contents and that before building the stubs the section size is
+ initialized to 0. We assume that within the stub hash table entry,
+ the absolute position of the jmp target has been written in the
+ target_value field. We write here the offset of the generated jmp insn
+ relative to the trampoline section start to the stub_offset entry in
+ the stub hash table entry. */
+
+static bfd_boolean
+avr_build_one_stub (struct bfd_hash_entry *bh, void *in_arg)
+{
+ struct elf32_avr_stub_hash_entry *hsh;
+ struct bfd_link_info *info;
+ struct elf32_avr_link_hash_table *htab;
+ bfd *stub_bfd;
+ bfd_byte *loc;
+ bfd_vma target;
+ bfd_vma starget;
+
+ /* Basic opcode */
+ bfd_vma jmp_insn = 0x0000940c;
+
+ /* Massage our args to the form they really have. */
+ hsh = avr_stub_hash_entry (bh);
+
+ if (!hsh->is_actually_needed)
+ return TRUE;
+
+ info = (struct bfd_link_info *) in_arg;
+
+ htab = avr_link_hash_table (info);
+ if (htab == NULL)
+ return FALSE;
+
+ target = hsh->target_value;
+
+ /* Make a note of the offset within the stubs for this entry. */
+ hsh->stub_offset = htab->stub_sec->size;
+ loc = htab->stub_sec->contents + hsh->stub_offset;
+
+ stub_bfd = htab->stub_sec->owner;
+
+ if (debug_stubs)
+ printf ("Building one Stub. Address: 0x%x, Offset: 0x%x\n",
+ (unsigned int) target,
+ (unsigned int) hsh->stub_offset);
+
+ /* We now have to add the information on the jump target to the bare
+ opcode bits already set in jmp_insn. */
+
+ /* Check for the alignment of the address. */
+ if (target & 1)
+ return FALSE;
+
+ starget = target >> 1;
+ jmp_insn |= ((starget & 0x10000) | ((starget << 3) & 0x1f00000)) >> 16;
+ bfd_put_16 (stub_bfd, jmp_insn, loc);
+ bfd_put_16 (stub_bfd, (bfd_vma) starget & 0xffff, loc + 2);
+
+ htab->stub_sec->size += 4;
+
+ /* Now add the entries in the address mapping table if there is still
+ space left. */
+ {
+ unsigned int nr;
+
+ nr = htab->amt_entry_cnt + 1;
+ if (nr <= htab->amt_max_entry_cnt)
+ {
+ htab->amt_entry_cnt = nr;
+
+ htab->amt_stub_offsets[nr - 1] = hsh->stub_offset;
+ htab->amt_destination_addr[nr - 1] = target;
+ }
+ }
+
+ return TRUE;
+}
+
+static bfd_boolean
+avr_mark_stub_not_to_be_necessary (struct bfd_hash_entry *bh,
+ void *in_arg)
+{
+ struct elf32_avr_stub_hash_entry *hsh;
+ struct elf32_avr_link_hash_table *htab;
+
+ htab = in_arg;
+ hsh = avr_stub_hash_entry (bh);
+ hsh->is_actually_needed = FALSE;
+
+ return TRUE;
+}
+
+static bfd_boolean
+avr_size_one_stub (struct bfd_hash_entry *bh, void *in_arg)
+{
+ struct elf32_avr_stub_hash_entry *hsh;
+ struct elf32_avr_link_hash_table *htab;
+ int size;
+
+ /* Massage our args to the form they really have. */
+ hsh = avr_stub_hash_entry (bh);
+ htab = in_arg;
+
+ if (hsh->is_actually_needed)
+ size = 4;
+ else
+ size = 0;
+
+ htab->stub_sec->size += size;
+ return TRUE;
+}
+
+void
+elf32_avr_setup_params (struct bfd_link_info *info,
+ bfd *avr_stub_bfd,
+ asection *avr_stub_section,
+ bfd_boolean no_stubs,
+ bfd_boolean deb_stubs,
+ bfd_boolean deb_relax,
+ bfd_vma pc_wrap_around,
+ bfd_boolean call_ret_replacement)
+{
+ struct elf32_avr_link_hash_table *htab = avr_link_hash_table (info);
+
+ if (htab == NULL)
+ return;
+ htab->stub_sec = avr_stub_section;
+ htab->stub_bfd = avr_stub_bfd;
+ htab->no_stubs = no_stubs;
+
+ debug_relax = deb_relax;
+ debug_stubs = deb_stubs;
+ avr_pc_wrap_around = pc_wrap_around;
+ avr_replace_call_ret_sequences = call_ret_replacement;
+}
+
+
+/* Set up various things so that we can make a list of input sections
+ for each output section included in the link. Returns -1 on error,
+ 0 when no stubs will be needed, and 1 on success. It also sets
+ information on the stubs bfd and the stub section in the info
+ struct. */
+
+int
+elf32_avr_setup_section_lists (bfd *output_bfd,
+ struct bfd_link_info *info)
+{
+ bfd *input_bfd;
+ unsigned int bfd_count;
+ int top_id, top_index;
+ asection *section;
+ asection **input_list, **list;
+ bfd_size_type amt;
+ struct elf32_avr_link_hash_table *htab = avr_link_hash_table(info);
+
+ if (htab == NULL || htab->no_stubs)
+ return 0;
+
+ /* Count the number of input BFDs and find the top input section id. */
+ for (input_bfd = info->input_bfds, bfd_count = 0, top_id = 0;
+ input_bfd != NULL;
+ input_bfd = input_bfd->link_next)
+ {
+ bfd_count += 1;
+ for (section = input_bfd->sections;
+ section != NULL;
+ section = section->next)
+ if (top_id < section->id)
+ top_id = section->id;
+ }
+
+ htab->bfd_count = bfd_count;
+
+ /* We can't use output_bfd->section_count here to find the top output
+ section index as some sections may have been removed, and
+ strip_excluded_output_sections doesn't renumber the indices. */
+ for (section = output_bfd->sections, top_index = 0;
+ section != NULL;
+ section = section->next)
+ if (top_index < section->index)
+ top_index = section->index;
+
+ htab->top_index = top_index;
+ amt = sizeof (asection *) * (top_index + 1);
+ input_list = bfd_malloc (amt);
+ htab->input_list = input_list;
+ if (input_list == NULL)
+ return -1;
+
+ /* For sections we aren't interested in, mark their entries with a
+ value we can check later. */
+ list = input_list + top_index;
+ do
+ *list = bfd_abs_section_ptr;
+ while (list-- != input_list);
+
+ for (section = output_bfd->sections;
+ section != NULL;
+ section = section->next)
+ if ((section->flags & SEC_CODE) != 0)
+ input_list[section->index] = NULL;
+
+ return 1;
+}
+
+
+/* Read in all local syms for all input bfds, and create hash entries
+ for export stubs if we are building a multi-subspace shared lib.
+ Returns -1 on error, 0 otherwise. */
+
+static int
+get_local_syms (bfd *input_bfd, struct bfd_link_info *info)
+{
+ unsigned int bfd_indx;
+ Elf_Internal_Sym *local_syms, **all_local_syms;
+ struct elf32_avr_link_hash_table *htab = avr_link_hash_table (info);
+
+ if (htab == NULL)
+ return -1;
+
+ /* We want to read in symbol extension records only once. To do this
+ we need to read in the local symbols in parallel and save them for
+ later use; so hold pointers to the local symbols in an array. */
+ bfd_size_type amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count;
+ all_local_syms = bfd_zmalloc (amt);
+ htab->all_local_syms = all_local_syms;
+ if (all_local_syms == NULL)
+ return -1;
+
+ /* Walk over all the input BFDs, swapping in local symbols.
+ If we are creating a shared library, create hash entries for the
+ export stubs. */
+ for (bfd_indx = 0;
+ input_bfd != NULL;
+ input_bfd = input_bfd->link_next, bfd_indx++)
+ {
+ Elf_Internal_Shdr *symtab_hdr;
+
+ /* We'll need the symbol table in a second. */
+ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+ if (symtab_hdr->sh_info == 0)
+ continue;
+
+ /* We need an array of the local symbols attached to the input bfd. */
+ local_syms = (Elf_Internal_Sym *) symtab_hdr->contents;
+ if (local_syms == NULL)
+ {
+ local_syms = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
+ symtab_hdr->sh_info, 0,
+ NULL, NULL, NULL);
+ /* Cache them for elf_link_input_bfd. */
+ symtab_hdr->contents = (unsigned char *) local_syms;
+ }
+ if (local_syms == NULL)
+ return -1;
+
+ all_local_syms[bfd_indx] = local_syms;
+ }
+
+ return 0;
+}
+
+#define ADD_DUMMY_STUBS_FOR_DEBUGGING 0
+
+bfd_boolean
+elf32_avr_size_stubs (bfd *output_bfd,
+ struct bfd_link_info *info,
+ bfd_boolean is_prealloc_run)
+{
+ struct elf32_avr_link_hash_table *htab;
+ int stub_changed = 0;
+
+ htab = avr_link_hash_table (info);
+ if (htab == NULL)
+ return FALSE;
+
+ /* At this point we initialize htab->vector_base
+ To the start of the text output section. */
+ htab->vector_base = htab->stub_sec->output_section->vma;
+
+ if (get_local_syms (info->input_bfds, info))
+ {
+ if (htab->all_local_syms)
+ goto error_ret_free_local;
+ return FALSE;
+ }
+
+ if (ADD_DUMMY_STUBS_FOR_DEBUGGING)
+ {
+ struct elf32_avr_stub_hash_entry *test;
+
+ test = avr_add_stub ("Hugo",htab);
+ test->target_value = 0x123456;
+ test->stub_offset = 13;
+
+ test = avr_add_stub ("Hugo2",htab);
+ test->target_value = 0x84210;
+ test->stub_offset = 14;
+ }
+
+ while (1)
+ {
+ bfd *input_bfd;
+ unsigned int bfd_indx;
+
+ /* We will have to re-generate the stub hash table each time anything
+ in memory has changed. */
+
+ bfd_hash_traverse (&htab->bstab, avr_mark_stub_not_to_be_necessary, htab);
+ for (input_bfd = info->input_bfds, bfd_indx = 0;
+ input_bfd != NULL;
+ input_bfd = input_bfd->link_next, bfd_indx++)
+ {
+ Elf_Internal_Shdr *symtab_hdr;
+ asection *section;
+ Elf_Internal_Sym *local_syms;
+
+ /* We'll need the symbol table in a second. */
+ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+ if (symtab_hdr->sh_info == 0)
+ continue;
+
+ local_syms = htab->all_local_syms[bfd_indx];
+
+ /* Walk over each section attached to the input bfd. */
+ for (section = input_bfd->sections;
+ section != NULL;
+ section = section->next)
+ {
+ Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
+
+ /* If there aren't any relocs, then there's nothing more
+ to do. */
+ if ((section->flags & SEC_RELOC) == 0
+ || section->reloc_count == 0)
+ continue;
+
+ /* If this section is a link-once section that will be
+ discarded, then don't create any stubs. */
+ if (section->output_section == NULL
+ || section->output_section->owner != output_bfd)
+ continue;
+
+ /* Get the relocs. */
+ internal_relocs
+ = _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
+ info->keep_memory);
+ if (internal_relocs == NULL)
+ goto error_ret_free_local;
+
+ /* Now examine each relocation. */
+ irela = internal_relocs;
+ irelaend = irela + section->reloc_count;
+ for (; irela < irelaend; irela++)
+ {
+ unsigned int r_type, r_indx;
+ struct elf32_avr_stub_hash_entry *hsh;
+ asection *sym_sec;
+ bfd_vma sym_value;
+ bfd_vma destination;
+ struct elf_link_hash_entry *hh;
+ char *stub_name;
+
+ r_type = ELF32_R_TYPE (irela->r_info);
+ r_indx = ELF32_R_SYM (irela->r_info);
+
+ /* Only look for 16 bit GS relocs. No other reloc will need a
+ stub. */
+ if (!((r_type == R_AVR_16_PM)
+ || (r_type == R_AVR_LO8_LDI_GS)
+ || (r_type == R_AVR_HI8_LDI_GS)))
+ continue;
+
+ /* Now determine the call target, its name, value,
+ section. */
+ sym_sec = NULL;
+ sym_value = 0;
+ destination = 0;
+ hh = NULL;
+ if (r_indx < symtab_hdr->sh_info)
+ {
+ /* It's a local symbol. */
+ Elf_Internal_Sym *sym;
+ Elf_Internal_Shdr *hdr;
+
+ sym = local_syms + r_indx;
+ hdr = elf_elfsections (input_bfd)[sym->st_shndx];
+ sym_sec = hdr->bfd_section;
+ if (ELF_ST_TYPE (sym->st_info) != STT_SECTION)
+ sym_value = sym->st_value;
+ destination = (sym_value + irela->r_addend
+ + sym_sec->output_offset
+ + sym_sec->output_section->vma);
+ }
+ else
+ {
+ /* It's an external symbol. */
+ int e_indx;
+
+ e_indx = r_indx - symtab_hdr->sh_info;
+ hh = elf_sym_hashes (input_bfd)[e_indx];
+
+ while (hh->root.type == bfd_link_hash_indirect
+ || hh->root.type == bfd_link_hash_warning)
+ hh = (struct elf_link_hash_entry *)
+ (hh->root.u.i.link);
+
+ if (hh->root.type == bfd_link_hash_defined
+ || hh->root.type == bfd_link_hash_defweak)
+ {
+ sym_sec = hh->root.u.def.section;
+ sym_value = hh->root.u.def.value;
+ if (sym_sec->output_section != NULL)
+ destination = (sym_value + irela->r_addend
+ + sym_sec->output_offset
+ + sym_sec->output_section->vma);
+ }
+ else if (hh->root.type == bfd_link_hash_undefweak)
+ {
+ if (! info->shared)
+ continue;
+ }
+ else if (hh->root.type == bfd_link_hash_undefined)
+ {
+ if (! (info->unresolved_syms_in_objects == RM_IGNORE
+ && (ELF_ST_VISIBILITY (hh->other)
+ == STV_DEFAULT)))
+ continue;
+ }
+ else
+ {
+ bfd_set_error (bfd_error_bad_value);
+
+ error_ret_free_internal:
+ if (elf_section_data (section)->relocs == NULL)
+ free (internal_relocs);
+ goto error_ret_free_local;
+ }
+ }
+
+ if (! avr_stub_is_required_for_16_bit_reloc
+ (destination - htab->vector_base))
+ {
+ if (!is_prealloc_run)
+ /* We are having a reloc that does't need a stub. */
+ continue;
+
+ /* We don't right now know if a stub will be needed.
+ Let's rather be on the safe side. */
+ }
+
+ /* Get the name of this stub. */
+ stub_name = avr_stub_name (sym_sec, sym_value, irela);
+
+ if (!stub_name)
+ goto error_ret_free_internal;
+
+
+ hsh = avr_stub_hash_lookup (&htab->bstab,
+ stub_name,
+ FALSE, FALSE);
+ if (hsh != NULL)
+ {
+ /* The proper stub has already been created. Mark it
+ to be used and write the possibly changed destination
+ value. */
+ hsh->is_actually_needed = TRUE;
+ hsh->target_value = destination;
+ free (stub_name);
+ continue;
+ }
+
+ hsh = avr_add_stub (stub_name, htab);
+ if (hsh == NULL)
+ {
+ free (stub_name);
+ goto error_ret_free_internal;
+ }
+
+ hsh->is_actually_needed = TRUE;
+ hsh->target_value = destination;
+
+ if (debug_stubs)
+ printf ("Adding stub with destination 0x%x to the"
+ " hash table.\n", (unsigned int) destination);
+ if (debug_stubs)
+ printf ("(Pre-Alloc run: %i)\n", is_prealloc_run);
+
+ stub_changed = TRUE;
+ }
+
+ /* We're done with the internal relocs, free them. */
+ if (elf_section_data (section)->relocs == NULL)
+ free (internal_relocs);
+ }
+ }
+
+ /* Re-Calculate the number of needed stubs. */
+ htab->stub_sec->size = 0;
+ bfd_hash_traverse (&htab->bstab, avr_size_one_stub, htab);
+
+ if (!stub_changed)
+ break;
+
+ stub_changed = FALSE;
+ }
+
+ free (htab->all_local_syms);
+ return TRUE;
+
+ error_ret_free_local:
+ free (htab->all_local_syms);
+ return FALSE;
+}
+
+
+/* Build all the stubs associated with the current output file. The
+ stubs are kept in a hash table attached to the main linker hash
+ table. We also set up the .plt entries for statically linked PIC
+ functions here. This function is called via hppaelf_finish in the
+ linker. */
+
+bfd_boolean
+elf32_avr_build_stubs (struct bfd_link_info *info)
+{
+ asection *stub_sec;
+ struct bfd_hash_table *table;
+ struct elf32_avr_link_hash_table *htab;
+ bfd_size_type total_size = 0;
+
+ htab = avr_link_hash_table (info);
+ if (htab == NULL)
+ return FALSE;
+
+ /* In case that there were several stub sections: */
+ for (stub_sec = htab->stub_bfd->sections;
+ stub_sec != NULL;
+ stub_sec = stub_sec->next)
+ {
+ bfd_size_type size;
+
+ /* Allocate memory to hold the linker stubs. */
+ size = stub_sec->size;
+ total_size += size;
+
+ stub_sec->contents = bfd_zalloc (htab->stub_bfd, size);
+ if (stub_sec->contents == NULL && size != 0)
+ return FALSE;
+ stub_sec->size = 0;
+ }
+
+ /* Allocate memory for the adress mapping table. */
+ htab->amt_entry_cnt = 0;
+ htab->amt_max_entry_cnt = total_size / 4;
+ htab->amt_stub_offsets = bfd_malloc (sizeof (bfd_vma)
+ * htab->amt_max_entry_cnt);
+ htab->amt_destination_addr = bfd_malloc (sizeof (bfd_vma)
+ * htab->amt_max_entry_cnt );
+
+ if (debug_stubs)
+ printf ("Allocating %i entries in the AMT\n", htab->amt_max_entry_cnt);
+
+ /* Build the stubs as directed by the stub hash table. */
+ table = &htab->bstab;
+ bfd_hash_traverse (table, avr_build_one_stub, info);
+
+ if (debug_stubs)
+ printf ("Final Stub section Size: %i\n", (int) htab->stub_sec->size);
+
+ return TRUE;
+}
+
#define ELF_ARCH bfd_arch_avr
#define ELF_MACHINE_CODE EM_AVR
#define ELF_MACHINE_ALT1 EM_AVR_OLD
@@ -1960,11 +2956,12 @@ elf32_avr_get_relocated_section_contents (bfd *output_bfd,
#define TARGET_LITTLE_SYM bfd_elf32_avr_vec
#define TARGET_LITTLE_NAME "elf32-avr"
+#define bfd_elf32_bfd_link_hash_table_create elf32_avr_link_hash_table_create
+#define bfd_elf32_bfd_link_hash_table_free elf32_avr_link_hash_table_free
+
#define elf_info_to_howto avr_info_to_howto_rela
#define elf_info_to_howto_rel NULL
#define elf_backend_relocate_section elf32_avr_relocate_section
-#define elf_backend_gc_mark_hook elf32_avr_gc_mark_hook
-#define elf_backend_gc_sweep_hook elf32_avr_gc_sweep_hook
#define elf_backend_check_relocs elf32_avr_check_relocs
#define elf_backend_can_gc_sections 1
#define elf_backend_rela_normal 1
diff --git a/bfd/elf32-avr.h b/bfd/elf32-avr.h
new file mode 100644
index 000000000000..4b9035fa4753
--- /dev/null
+++ b/bfd/elf32-avr.h
@@ -0,0 +1,38 @@
+/* AVR-specific support for 32-bit ELF.
+ Copyright 2006 Free Software Foundation, Inc.
+
+ Written by Bjoern Haase <bjoern.m.haase@web.de>
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+
+/* These four functions will be called from the ld back-end. */
+
+extern void
+elf32_avr_setup_params (struct bfd_link_info *, bfd *, asection *,
+ bfd_boolean, bfd_boolean, bfd_boolean,
+ bfd_vma, bfd_boolean);
+
+extern int
+elf32_avr_setup_section_lists (bfd *, struct bfd_link_info *);
+
+extern bfd_boolean
+elf32_avr_size_stubs (bfd *, struct bfd_link_info *, bfd_boolean);
+
+extern bfd_boolean
+elf32_avr_build_stubs (struct bfd_link_info *);
diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c
index d5a81dbc6057..bf8ed86882e2 100644
--- a/bfd/elf32-bfin.c
+++ b/bfd/elf32-bfin.c
@@ -1,5 +1,5 @@
/* ADI Blackfin BFD support for 32-bit ELF.
- Copyright 2005, 2006 Free Software Foundation, Inc.
+ Copyright 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/bfin.h"
@@ -1057,8 +1057,8 @@ bfin_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
else
cache_ptr->howto = (reloc_howto_type *) NULL;
-
}
+
/* Given a BFD reloc type, return the howto. */
static reloc_howto_type *
bfin_bfd_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
@@ -1078,8 +1078,33 @@ bfin_bfd_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
return &bfin_gnuext_howto_table [r_type - BFIN_GNUEXT_RELOC_MIN];
return (reloc_howto_type *) NULL;
+}
+
+static reloc_howto_type *
+bfin_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+ for (i = 0;
+ i < (sizeof (bfin_howto_table)
+ / sizeof (bfin_howto_table[0]));
+ i++)
+ if (bfin_howto_table[i].name != NULL
+ && strcasecmp (bfin_howto_table[i].name, r_name) == 0)
+ return &bfin_howto_table[i];
+
+ for (i = 0;
+ i < (sizeof (bfin_gnuext_howto_table)
+ / sizeof (bfin_gnuext_howto_table[0]));
+ i++)
+ if (bfin_gnuext_howto_table[i].name != NULL
+ && strcasecmp (bfin_gnuext_howto_table[i].name, r_name) == 0)
+ return &bfin_gnuext_howto_table[i];
+
+ return NULL;
}
+
/* Given a bfin relocation type, return the howto. */
static reloc_howto_type *
bfin_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
@@ -1092,7 +1117,6 @@ bfin_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
return &bfin_gnuext_howto_table [r_type - BFIN_GNUEXT_RELOC_MIN];
return (reloc_howto_type *) NULL;
-
}
/* Return TRUE if the name is a local label.
@@ -1961,7 +1985,7 @@ bfin_check_relocs (bfd * abfd,
case R_got:
if (h != NULL
- && strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0)
+ && strcmp (h->root.root.string, "__GLOBAL_OFFSET_TABLE_") == 0)
break;
/* Fall through. */
@@ -1984,15 +2008,12 @@ bfin_check_relocs (bfd * abfd,
srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
if (srelgot == NULL)
{
- srelgot = bfd_make_section (dynobj, ".rela.got");
+ flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+ | SEC_IN_MEMORY | SEC_LINKER_CREATED
+ | SEC_READONLY);
+ srelgot = bfd_make_section_with_flags (dynobj, ".rela.got",
+ flags);
if (srelgot == NULL
- || !bfd_set_section_flags (dynobj, srelgot,
- (SEC_ALLOC
- | SEC_LOAD
- | SEC_HAS_CONTENTS
- | SEC_IN_MEMORY
- | SEC_LINKER_CREATED
- | SEC_READONLY))
|| !bfd_set_section_alignment (dynobj, srelgot, 2))
return FALSE;
}
@@ -2112,9 +2133,6 @@ bfinfdpic_relocate_section (bfd * output_bfd,
check_segment[2];
int silence_segment_error = !(info->shared || info->pie);
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
relend = relocs + input_section->reloc_count;
@@ -2155,7 +2173,6 @@ bfinfdpic_relocate_section (bfd * output_bfd,
|| r_type == R_BFIN_GNU_VTENTRY)
continue;
- /* This is a final link. */
r_symndx = ELF32_R_SYM (rel->r_info);
howto = bfin_reloc_type_lookup (input_bfd, r_type);
if (howto == NULL)
@@ -2180,48 +2197,37 @@ bfinfdpic_relocate_section (bfd * output_bfd,
}
else
{
- h = sym_hashes [r_symndx - symtab_hdr->sh_info];
+ bfd_boolean warned;
+ bfd_boolean unresolved_reloc;
- while (h->root.type == bfd_link_hash_indirect
- || h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
+ r_symndx, symtab_hdr, sym_hashes,
+ h, sec, relocation,
+ unresolved_reloc, warned);
+ osec = sec;
+ }
+
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
- name = h->root.root.string;
+ if (info->relocatable)
+ continue;
- if ((h->root.type == bfd_link_hash_defined
- || h->root.type == bfd_link_hash_defweak)
- && ! BFINFDPIC_SYM_LOCAL (info, h))
- {
- sec = NULL;
- relocation = 0;
- }
- else
- if (h->root.type == bfd_link_hash_defined
- || h->root.type == bfd_link_hash_defweak)
- {
- sec = h->root.u.def.section;
- relocation = (h->root.u.def.value
- + sec->output_section->vma
- + sec->output_offset);
- }
- else if (h->root.type == bfd_link_hash_undefweak)
- {
- relocation = 0;
- }
- else if (info->unresolved_syms_in_objects == RM_IGNORE
- && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
- relocation = 0;
- else
- {
- if (! ((*info->callbacks->undefined_symbol)
- (info, h->root.root.string, input_bfd,
- input_section, rel->r_offset,
- (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
- || ELF_ST_VISIBILITY (h->other)))))
- return FALSE;
- relocation = 0;
- }
- osec = sec;
+ if (h != NULL
+ && (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ && !BFINFDPIC_SYM_LOCAL (info, h))
+ {
+ osec = sec = NULL;
+ relocation = 0;
}
switch (r_type)
@@ -2435,6 +2441,8 @@ bfinfdpic_relocate_section (bfd * output_bfd,
input_section->output_section)
& (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
{
+ bfd_vma offset;
+
if (_bfinfdpic_osec_readonly_p (output_bfd,
input_section
->output_section))
@@ -2445,15 +2453,23 @@ bfinfdpic_relocate_section (bfd * output_bfd,
name, input_bfd, input_section, rel->r_offset);
return FALSE;
}
- _bfinfdpic_add_dyn_reloc (output_bfd,
- bfinfdpic_gotrel_section (info),
- _bfd_elf_section_offset
- (output_bfd, info,
- input_section, rel->r_offset)
- + input_section
- ->output_section->vma
- + input_section->output_offset,
- r_type, dynindx, addend, picrel);
+ offset = _bfd_elf_section_offset (output_bfd, info,
+ input_section, rel->r_offset);
+ /* Only output a reloc for a not deleted entry. */
+ if (offset >= (bfd_vma) -2)
+ _bfinfdpic_add_dyn_reloc (output_bfd,
+ bfinfdpic_gotrel_section (info),
+ 0,
+ R_unused0,
+ dynindx, addend, picrel);
+ else
+ _bfinfdpic_add_dyn_reloc (output_bfd,
+ bfinfdpic_gotrel_section (info),
+ offset + input_section
+ ->output_section->vma
+ + input_section->output_offset,
+ r_type,
+ dynindx, addend, picrel);
}
else
addend += bfinfdpic_got_section (info)->output_section->vma;
@@ -2824,9 +2840,6 @@ bfin_relocate_section (bfd * output_bfd,
Elf_Internal_Rela *relend;
int i = 0;
- if (info->relocatable)
- return TRUE;
-
dynobj = elf_hash_table (info)->dynobj;
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -2883,13 +2896,27 @@ bfin_relocate_section (bfd * output_bfd,
else
{
bfd_boolean warned;
- h = NULL;
+
RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
r_symndx, symtab_hdr, sym_hashes,
h, sec, relocation,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
address = rel->r_offset;
/* Then, process normally. */
@@ -2903,7 +2930,7 @@ bfin_relocate_section (bfd * output_bfd,
/* Relocation is to the address of the entry for this symbol
in the global offset table. */
if (h != NULL
- && strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0)
+ && strcmp (h->root.root.string, "__GLOBAL_OFFSET_TABLE_") == 0)
goto do_default;
/* Fall through. */
/* Relocation is the offset of the entry for this symbol in
@@ -3099,51 +3126,20 @@ bfin_relocate_section (bfd * output_bfd,
static asection *
bfin_gc_mark_hook (asection * sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
Elf_Internal_Rela * rel,
struct elf_link_hash_entry *h,
Elf_Internal_Sym * sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
-
- case R_BFIN_GNU_VTINHERIT:
- case R_BFIN_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- default:
- break;
-
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
-}
-
-
-/* Update the got entry reference counts for the section being removed. */
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_BFIN_GNU_VTINHERIT:
+ case R_BFIN_GNU_VTENTRY:
+ return NULL;
+ }
-static bfd_boolean
-bfinfdpic_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- asection *sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
-{
- return TRUE;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update the got entry reference counts for the section being removed. */
@@ -3291,7 +3287,7 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
(or .got.plt) section. We don't do this in the linker script
because we don't want to define the symbol if we are not creating
a global offset table. */
- h = _bfd_elf_define_linkage_sym (abfd, info, s, "_GLOBAL_OFFSET_TABLE_");
+ h = _bfd_elf_define_linkage_sym (abfd, info, s, "__GLOBAL_OFFSET_TABLE_");
elf_hash_table (info)->hgot = h;
if (h == NULL)
return FALSE;
@@ -3370,9 +3366,8 @@ elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
if (bed->plt_readonly)
pltflags |= SEC_READONLY;
- s = bfd_make_section (abfd, ".plt");
+ s = bfd_make_section_with_flags (abfd, ".plt", pltflags);
if (s == NULL
- || ! bfd_set_section_flags (abfd, s, pltflags)
|| ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
return FALSE;
/* Blackfin-specific: remember it. */
@@ -3386,7 +3381,7 @@ elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
struct bfd_link_hash_entry *bh = NULL;
if (! (_bfd_generic_link_add_one_symbol
- (info, abfd, "_PROCEDURE_LINKAGE_TABLE_", BSF_GLOBAL, s, 0, NULL,
+ (info, abfd, "__PROCEDURE_LINKAGE_TABLE_", BSF_GLOBAL, s, 0, NULL,
FALSE, get_elf_backend_data (abfd)->collect, &bh)))
return FALSE;
h = (struct elf_link_hash_entry *) bh;
@@ -3399,9 +3394,8 @@ elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
}
/* Blackfin-specific: we want rel relocations for the plt. */
- s = bfd_make_section (abfd, ".rel.plt");
+ s = bfd_make_section_with_flags (abfd, ".rel.plt", flags | SEC_READONLY);
if (s == NULL
- || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
|| ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
return FALSE;
/* Blackfin-specific: remember it. */
@@ -3425,9 +3419,9 @@ elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
image and use a R_*_COPY reloc to tell the dynamic linker to
initialize them at run time. The linker script puts the .dynbss
section into the .bss section of the final image. */
- s = bfd_make_section (abfd, ".dynbss");
- if (s == NULL
- || ! bfd_set_section_flags (abfd, s, SEC_ALLOC | SEC_LINKER_CREATED))
+ s = bfd_make_section_with_flags (abfd, ".dynbss",
+ SEC_ALLOC | SEC_LINKER_CREATED);
+ if (s == NULL)
return FALSE;
/* The .rel[a].bss section holds copy relocs. This section is not
@@ -3443,11 +3437,11 @@ elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
copy relocs. */
if (! info->shared)
{
- s = bfd_make_section (abfd,
- (bed->default_use_rela_p
- ? ".rela.bss" : ".rel.bss"));
+ s = bfd_make_section_with_flags (abfd,
+ (bed->default_use_rela_p
+ ? ".rela.bss" : ".rel.bss"),
+ flags | SEC_READONLY);
if (s == NULL
- || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
|| ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
return FALSE;
}
@@ -4151,7 +4145,6 @@ elf32_bfinfdpic_always_size_sections (bfd *output_bfd,
if (!info->relocatable)
{
struct elf_link_hash_entry *h;
- asection *sec;
/* Force a PT_GNU_STACK segment to be created. */
if (! elf_tdata (output_bfd)->stack_flags)
@@ -4177,61 +4170,51 @@ elf32_bfinfdpic_always_size_sections (bfd *output_bfd,
h->def_regular = 1;
h->type = STT_OBJECT;
}
-
- /* Create a stack section, and set its alignment. */
- sec = bfd_make_section (output_bfd, ".stack");
-
- if (sec == NULL
- || ! bfd_set_section_alignment (output_bfd, sec, 3))
- return FALSE;
}
return TRUE;
}
static bfd_boolean
-elf32_bfinfdpic_modify_segment_map (bfd *output_bfd,
- struct bfd_link_info *info)
+elf32_bfinfdpic_modify_program_headers (bfd *output_bfd,
+ struct bfd_link_info *info)
{
+ struct elf_obj_tdata *tdata = elf_tdata (output_bfd);
struct elf_segment_map *m;
+ Elf_Internal_Phdr *p;
/* objcopy and strip preserve what's already there using
elf32_bfinfdpic_copy_private_bfd_data (). */
if (! info)
return TRUE;
- for (m = elf_tdata (output_bfd)->segment_map; m != NULL; m = m->next)
+ for (p = tdata->phdr, m = tdata->segment_map; m != NULL; m = m->next, p++)
if (m->p_type == PT_GNU_STACK)
break;
if (m)
{
- asection *sec = bfd_get_section_by_name (output_bfd, ".stack");
struct elf_link_hash_entry *h;
- if (sec)
+ /* Obtain the pointer to the __stacksize symbol. */
+ h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize",
+ FALSE, FALSE, FALSE);
+ if (h)
{
- /* Obtain the pointer to the __stacksize symbol. */
- h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize",
- FALSE, FALSE, FALSE);
while (h->root.type == bfd_link_hash_indirect
|| h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *)h->root.u.i.link;
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
BFD_ASSERT (h->root.type == bfd_link_hash_defined);
+ }
- /* Set the section size from the symbol value. We
- intentionally ignore the symbol section. */
- if (h->root.type == bfd_link_hash_defined)
- sec->size = h->root.u.def.value;
- else
- sec->size = DEFAULT_STACK_SIZE;
+ /* Set the header p_memsz from the symbol value. We
+ intentionally ignore the symbol section. */
+ if (h && h->root.type == bfd_link_hash_defined)
+ p->p_memsz = h->root.u.def.value;
+ else
+ p->p_memsz = DEFAULT_STACK_SIZE;
- /* Add the stack section to the PT_GNU_STACK segment,
- such that its size and alignment requirements make it
- to the segment. */
- m->sections[m->count] = sec;
- m->count++;
- }
+ p->p_align = 8;
}
return TRUE;
@@ -4742,6 +4725,10 @@ bfin_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
elf_flags_init (obfd) = TRUE;
+
+ /* Copy object attributes. */
+ _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
return TRUE;
}
@@ -5035,7 +5022,7 @@ bfin_finish_dynamic_symbol (bfd * output_bfd,
&& (info->symbolic
|| h->dynindx == -1 || h->forced_local) && h->def_regular)
{
-fprintf(stderr, "*** check this relocation %s\n", __FUNCTION__);
+ fprintf(stderr, "*** check this relocation %s\n", __FUNCTION__);
rela.r_info = ELF32_R_INFO (0, R_pcrel24);
rela.r_addend = bfd_get_signed_32 (output_bfd,
(sgot->contents
@@ -5061,7 +5048,7 @@ fprintf(stderr, "*** check this relocation %s\n", __FUNCTION__);
BFD_ASSERT (0);
}
/* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
- if (strcmp (h->root.root.string, "_DYNAMIC") == 0
+ if (strcmp (h->root.root.string, "__DYNAMIC") == 0
|| h == elf_hash_table (info)->hgot)
sym->st_shndx = SHN_ABS;
@@ -5298,7 +5285,7 @@ bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
strip = FALSE;
- if (strncmp (name, ".rela", 5) == 0)
+ if (CONST_STRNEQ (name, ".rela"))
{
if (s->size == 0)
{
@@ -5322,7 +5309,7 @@ bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
s->reloc_count = 0;
}
}
- else if (strncmp (name, ".got", 4) != 0)
+ else if (! CONST_STRNEQ (name, ".got"))
{
/* It's not one of our sections, so don't allocate space. */
continue;
@@ -5516,6 +5503,8 @@ error_return:
#define elf_symbol_leading_char '_'
#define bfd_elf32_bfd_reloc_type_lookup bfin_bfd_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup \
+ bfin_bfd_reloc_name_lookup
#define elf_info_to_howto bfin_info_to_howto
#define elf_info_to_howto_rel 0
#define elf_backend_object_p elf32_bfin_object_p
@@ -5570,7 +5559,6 @@ error_return:
#define elf32_bed elf32_bfinfdpic_bed
#undef elf_backend_gc_sweep_hook
-#define elf_backend_gc_sweep_hook bfinfdpic_gc_sweep_hook
#undef elf_backend_got_header_size
#define elf_backend_got_header_size 0
@@ -5586,9 +5574,9 @@ error_return:
#undef elf_backend_always_size_sections
#define elf_backend_always_size_sections \
elf32_bfinfdpic_always_size_sections
-#undef elf_backend_modify_segment_map
-#define elf_backend_modify_segment_map \
- elf32_bfinfdpic_modify_segment_map
+#undef elf_backend_modify_program_headers
+#define elf_backend_modify_program_headers \
+ elf32_bfinfdpic_modify_program_headers
#undef bfd_elf32_bfd_copy_private_bfd_data
#define bfd_elf32_bfd_copy_private_bfd_data \
elf32_bfinfdpic_copy_private_bfd_data
diff --git a/bfd/elf32-cr16.c b/bfd/elf32-cr16.c
new file mode 100644
index 000000000000..197bff720085
--- /dev/null
+++ b/bfd/elf32-cr16.c
@@ -0,0 +1,1433 @@
+/* BFD back-end for National Semiconductor's CR16 ELF
+ Copyright 2007 Free Software Foundation, Inc.
+ Written by M R Swami Reddy.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "libbfd.h"
+#include "libiberty.h"
+#include "elf-bfd.h"
+#include "elf/cr16.h"
+
+/* cr16_reloc_map array maps BFD relocation enum into a CRGAS relocation type. */
+
+struct cr16_reloc_map
+{
+ bfd_reloc_code_real_type bfd_reloc_enum; /* BFD relocation enum. */
+ unsigned short cr16_reloc_type; /* CR16 relocation type. */
+};
+
+static const struct cr16_reloc_map cr16_reloc_map[R_CR16_MAX] =
+{
+ {BFD_RELOC_NONE, R_CR16_NONE},
+ {BFD_RELOC_CR16_NUM8, R_CR16_NUM8},
+ {BFD_RELOC_CR16_NUM16, R_CR16_NUM16},
+ {BFD_RELOC_CR16_NUM32, R_CR16_NUM32},
+ {BFD_RELOC_CR16_NUM32a, R_CR16_NUM32a},
+ {BFD_RELOC_CR16_REGREL4, R_CR16_REGREL4},
+ {BFD_RELOC_CR16_REGREL4a, R_CR16_REGREL4a},
+ {BFD_RELOC_CR16_REGREL14, R_CR16_REGREL14},
+ {BFD_RELOC_CR16_REGREL14a, R_CR16_REGREL14a},
+ {BFD_RELOC_CR16_REGREL16, R_CR16_REGREL16},
+ {BFD_RELOC_CR16_REGREL20, R_CR16_REGREL20},
+ {BFD_RELOC_CR16_REGREL20a, R_CR16_REGREL20a},
+ {BFD_RELOC_CR16_ABS20, R_CR16_ABS20},
+ {BFD_RELOC_CR16_ABS24, R_CR16_ABS24},
+ {BFD_RELOC_CR16_IMM4, R_CR16_IMM4},
+ {BFD_RELOC_CR16_IMM8, R_CR16_IMM8},
+ {BFD_RELOC_CR16_IMM16, R_CR16_IMM16},
+ {BFD_RELOC_CR16_IMM20, R_CR16_IMM20},
+ {BFD_RELOC_CR16_IMM24, R_CR16_IMM24},
+ {BFD_RELOC_CR16_IMM32, R_CR16_IMM32},
+ {BFD_RELOC_CR16_IMM32a, R_CR16_IMM32a},
+ {BFD_RELOC_CR16_DISP4, R_CR16_DISP4},
+ {BFD_RELOC_CR16_DISP8, R_CR16_DISP8},
+ {BFD_RELOC_CR16_DISP16, R_CR16_DISP16},
+ {BFD_RELOC_CR16_DISP24, R_CR16_DISP24},
+ {BFD_RELOC_CR16_DISP24a, R_CR16_DISP24a}
+};
+
+static reloc_howto_type cr16_elf_howto_table[] =
+{
+ HOWTO (R_CR16_NONE, /* type */
+ 0, /* rightshift */
+ 2, /* size */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_NONE", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_NUM8, /* type */
+ 0, /* rightshift */
+ 0, /* size */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_NUM8", /* name */
+ FALSE, /* partial_inplace */
+ 0xff, /* src_mask */
+ 0xff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_NUM16, /* type */
+ 0, /* rightshift */
+ 1, /* size */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_NUM16", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_NUM32, /* type */
+ 0, /* rightshift */
+ 2, /* size */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_NUM32", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_NUM32a, /* type */
+ 1, /* rightshift */
+ 2, /* size */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_NUM32a", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_REGREL4, /* type */
+ 0, /* rightshift */
+ 0, /* size */
+ 4, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_REGREL4", /* name */
+ FALSE, /* partial_inplace */
+ 0xf, /* src_mask */
+ 0xf, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_REGREL4a, /* type */
+ 0, /* rightshift */
+ 0, /* size */
+ 4, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_REGREL4a", /* name */
+ FALSE, /* partial_inplace */
+ 0xf, /* src_mask */
+ 0xf, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_REGREL14, /* type */
+ 0, /* rightshift */
+ 1, /* size */
+ 14, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_REGREL14", /* name */
+ FALSE, /* partial_inplace */
+ 0x3fff, /* src_mask */
+ 0x3fff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_REGREL14a, /* type */
+ 0, /* rightshift */
+ 1, /* size */
+ 14, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_REGREL14a", /* name */
+ FALSE, /* partial_inplace */
+ 0x3fff, /* src_mask */
+ 0x3fff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_REGREL16, /* type */
+ 0, /* rightshift */
+ 1, /* size */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_REGREL16", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_REGREL20, /* type */
+ 0, /* rightshift */
+ 2, /* size */
+ 20, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_REGREL20", /* name */
+ FALSE, /* partial_inplace */
+ 0xfffff, /* src_mask */
+ 0xfffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_REGREL20a, /* type */
+ 0, /* rightshift */
+ 2, /* size */
+ 20, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_REGREL20a", /* name */
+ FALSE, /* partial_inplace */
+ 0xfffff, /* src_mask */
+ 0xfffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_ABS20, /* type */
+ 0, /* rightshift */
+ 2, /* size */
+ 20, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_ABS20", /* name */
+ FALSE, /* partial_inplace */
+ 0xfffff, /* src_mask */
+ 0xfffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_ABS24, /* type */
+ 0, /* rightshift */
+ 2, /* size */
+ 24, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_ABS24", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffff, /* src_mask */
+ 0xffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_IMM4, /* type */
+ 0, /* rightshift */
+ 0, /* size */
+ 4, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_IMM4", /* name */
+ FALSE, /* partial_inplace */
+ 0xf, /* src_mask */
+ 0xf, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_IMM8, /* type */
+ 0, /* rightshift */
+ 0, /* size */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_IMM8", /* name */
+ FALSE, /* partial_inplace */
+ 0xff, /* src_mask */
+ 0xff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_IMM16, /* type */
+ 0, /* rightshift */
+ 1, /* size */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_IMM16", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_IMM20, /* type */
+ 0, /* rightshift */
+ 2, /* size */
+ 20, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_IMM20", /* name */
+ FALSE, /* partial_inplace */
+ 0xfffff, /* src_mask */
+ 0xfffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_IMM24, /* type */
+ 0, /* rightshift */
+ 2, /* size */
+ 24, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_IMM24", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffff, /* src_mask */
+ 0xffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_IMM32, /* type */
+ 0, /* rightshift */
+ 2, /* size */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_IMM32", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_IMM32a, /* type */
+ 1, /* rightshift */
+ 2, /* size */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_IMM32a", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_DISP4, /* type */
+ 1, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 4, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_DISP4", /* name */
+ FALSE, /* partial_inplace */
+ 0xf, /* src_mask */
+ 0xf, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_DISP8, /* type */
+ 1, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_DISP8", /* name */
+ FALSE, /* partial_inplace */
+ 0x1ff, /* src_mask */
+ 0x1ff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_DISP16, /* type */
+ 0, /* rightshift REVIITS: To sync with WinIDEA*/
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_DISP16", /* name */
+ FALSE, /* partial_inplace */
+ 0x1ffff, /* src_mask */
+ 0x1ffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+ /* REVISIT: DISP24 should be left-shift by 2 as per ISA doc
+ but its not done, to sync with WinIDEA and CR16 4.1 tools */
+ HOWTO (R_CR16_DISP24, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 24, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_DISP24", /* name */
+ FALSE, /* partial_inplace */
+ 0x1ffffff, /* src_mask */
+ 0x1ffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_CR16_DISP24a, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 24, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_CR16_DISP24a", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffff, /* src_mask */
+ 0xffffff, /* dst_mask */
+ FALSE) /* pcrel_offset */
+};
+
+/* Retrieve a howto ptr using a BFD reloc_code. */
+
+static reloc_howto_type *
+elf_cr16_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ bfd_reloc_code_real_type code)
+{
+ unsigned int i;
+
+ for (i = 0; i < R_CR16_MAX; i++)
+ if (code == cr16_reloc_map[i].bfd_reloc_enum)
+ return &cr16_elf_howto_table[cr16_reloc_map[i].cr16_reloc_type];
+
+ _bfd_error_handler ("Unsupported CR16 relocation type: 0x%x\n", code);
+ return NULL;
+}
+
+static reloc_howto_type *
+elf_cr16_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0; ARRAY_SIZE (cr16_elf_howto_table); i++)
+ if (cr16_elf_howto_table[i].name != NULL
+ && strcasecmp (cr16_elf_howto_table[i].name, r_name) == 0)
+ return cr16_elf_howto_table + i;
+
+ return NULL;
+}
+
+/* Retrieve a howto ptr using an internal relocation entry. */
+
+static void
+elf_cr16_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr,
+ Elf_Internal_Rela *dst)
+{
+ unsigned int r_type = ELF32_R_TYPE (dst->r_info);
+
+ BFD_ASSERT (r_type < (unsigned int) R_CR16_MAX);
+ cache_ptr->howto = &cr16_elf_howto_table[r_type];
+}
+
+/* Perform a relocation as part of a final link. */
+
+static bfd_reloc_status_type
+cr16_elf_final_link_relocate (reloc_howto_type *howto,
+ bfd *input_bfd,
+ bfd *output_bfd ATTRIBUTE_UNUSED,
+ asection *input_section,
+ bfd_byte *contents,
+ bfd_vma offset,
+ bfd_vma Rvalue,
+ bfd_vma addend,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ asection *sec ATTRIBUTE_UNUSED,
+ int is_local ATTRIBUTE_UNUSED)
+{
+ unsigned short r_type = howto->type;
+ bfd_byte *hit_data = contents + offset;
+ bfd_vma reloc_bits, check, Rvalue1;
+
+ switch (r_type)
+ {
+ case R_CR16_IMM4:
+ case R_CR16_IMM8:
+ case R_CR16_IMM16:
+ case R_CR16_IMM20:
+ case R_CR16_IMM32:
+ case R_CR16_IMM32a:
+ case R_CR16_REGREL4:
+ case R_CR16_REGREL4a:
+ case R_CR16_REGREL14:
+ case R_CR16_REGREL14a:
+ case R_CR16_REGREL16:
+ case R_CR16_REGREL20:
+ case R_CR16_ABS20:
+ case R_CR16_ABS24:
+ case R_CR16_DISP16:
+ case R_CR16_DISP24:
+ /* 'hit_data' is relative to the start of the instruction, not the
+ relocation offset. Advance it to account for the exact offset. */
+ hit_data += 2;
+ break;
+
+ case R_CR16_NONE:
+ return bfd_reloc_ok;
+ break;
+
+ case R_CR16_DISP4:
+ case R_CR16_DISP8:
+ case R_CR16_DISP24a:
+ /* We only care about the addend, where the difference between
+ expressions is kept. */
+ if (is_local) Rvalue -= -1;
+
+ default:
+ break;
+ }
+
+ if (howto->pc_relative)
+ {
+ /* Subtract the address of the section containing the location. */
+ Rvalue -= (input_section->output_section->vma
+ + input_section->output_offset);
+ /* Subtract the position of the location within the section. */
+ Rvalue -= offset;
+ }
+
+ /* Add in supplied addend. */
+ Rvalue += addend;
+
+ /* Complain if the bitfield overflows, whether it is considered
+ as signed or unsigned. */
+ check = Rvalue >> howto->rightshift;
+
+ /* Assumes two's complement. This expression avoids
+ overflow if howto->bitsize is the number of bits in
+ bfd_vma. */
+ reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
+
+ if (((bfd_vma) check & ~reloc_bits) != 0
+ && (((bfd_vma) check & ~reloc_bits)
+ != (-(bfd_vma) 1 & ~reloc_bits)))
+ {
+ /* The above right shift is incorrect for a signed
+ value. See if turning on the upper bits fixes the
+ overflow. */
+ if (howto->rightshift && (bfd_signed_vma) Rvalue < 0)
+ {
+ check |= ((bfd_vma) - 1
+ & ~((bfd_vma) - 1
+ >> howto->rightshift));
+
+ if (((bfd_vma) check & ~reloc_bits)
+ != (-(bfd_vma) 1 & ~reloc_bits))
+ return bfd_reloc_overflow;
+ }
+ else
+ return bfd_reloc_overflow;
+ }
+
+ /* Drop unwanted bits from the value we are relocating to. */
+ Rvalue >>= (bfd_vma) howto->rightshift;
+
+ /* Apply dst_mask to select only relocatable part of the insn. */
+ Rvalue &= howto->dst_mask;
+
+ switch (howto->size)
+ {
+ case 0:
+ if ((r_type == R_CR16_IMM4)
+ || (r_type == R_CR16_DISP4)
+ || (r_type == R_CR16_DISP8))
+ {
+ Rvalue1 = bfd_get_16 (input_bfd, hit_data);
+ Rvalue = ((Rvalue1 & 0xf000) | ((Rvalue << 4) & 0xf00)
+ | (Rvalue1 & 0x00f0) | (Rvalue & 0xf));
+ bfd_put_16 (input_bfd, Rvalue, hit_data);
+ }
+ break;
+
+ case 1:
+ if (r_type == R_CR16_DISP16)
+ {
+ Rvalue |= (bfd_get_16 (input_bfd, hit_data));
+ Rvalue = ((Rvalue & 0xfffe) | ((Rvalue >> 16) & 0x1));
+
+ bfd_put_16 (input_bfd, Rvalue, hit_data);
+ }
+ break;
+
+ case 2:
+ if (r_type == R_CR16_ABS20)
+ {
+ Rvalue |= (((bfd_get_16 (input_bfd, hit_data) << 16)
+ | (bfd_get_16 (input_bfd, hit_data + 2)))
+ & ~howto->dst_mask);
+ Rvalue |= (bfd_get_16 (input_bfd, hit_data + 2) << 16);
+
+ /* Relocation on INSTRUCTIONS is different : Instructions are
+ word-addressable, that is, each word itself is arranged according
+ to little-endian convention, whereas the words are arranged with
+ respect to one another in BIG ENDIAN fashion.
+ When there is an immediate value that spans a word boundary,
+ it is split in a big-endian way with respect to the words. */
+ bfd_put_16 (input_bfd, (Rvalue) & 0xffff, hit_data);
+ bfd_put_16 (input_bfd, (Rvalue >> 16)& 0xffff, hit_data + 2);
+ }
+ else if (r_type == R_CR16_ABS24)
+ {
+ Rvalue = ((((Rvalue >> 20)& 0xf)
+ | (((Rvalue >> 16) & 0xf) << 8)
+ | (bfd_get_16 (input_bfd, hit_data)))
+ | ((Rvalue & 0xffff) << 16));
+
+ bfd_put_32 (input_bfd, Rvalue, hit_data);
+ }
+ else if (r_type == R_CR16_DISP24)
+ {
+ Rvalue = ((((Rvalue >> 20)& 0xf) | (((Rvalue >> 16) & 0xf)<<8)
+ | (bfd_get_16 (input_bfd, hit_data)))
+ | (((Rvalue & 0xfffE) | ((Rvalue >> 24) & 0x1)) << 16));
+
+ bfd_put_32 (input_bfd, Rvalue, hit_data);
+ }
+ else if ((r_type == R_CR16_IMM32) || (r_type == R_CR16_IMM32a))
+ {
+ Rvalue = (((Rvalue >> 16)& 0xffff)
+ | (bfd_get_16 (input_bfd, hit_data)))
+ | ((Rvalue & 0xffff) << 16);
+ bfd_put_32 (input_bfd, Rvalue, hit_data);
+ }
+ else if (r_type == R_CR16_DISP24a)
+ {
+ Rvalue = (((Rvalue & 0xfffffe) | (Rvalue >> 23)));
+ Rvalue = ((Rvalue >> 16) & 0xff) | ((Rvalue & 0xffff) << 16)
+ | (bfd_get_32 (input_bfd, hit_data));
+
+ bfd_put_32 (input_bfd, Rvalue, hit_data);
+ }
+ else if ((r_type == R_CR16_NUM32) || (r_type == R_CR16_NUM32a))
+ {
+ bfd_put_32 (input_bfd, Rvalue, hit_data);
+ }
+ break;
+
+ default:
+ return bfd_reloc_notsupported;
+ }
+
+ return bfd_reloc_ok;
+}
+
+/* Delete some bytes from a section while relaxing. */
+
+static bfd_boolean
+elf32_cr16_relax_delete_bytes (struct bfd_link_info *link_info, bfd *abfd,
+ asection *sec, bfd_vma addr, int count)
+{
+ Elf_Internal_Shdr *symtab_hdr;
+ unsigned int sec_shndx;
+ bfd_byte *contents;
+ Elf_Internal_Rela *irel, *irelend;
+ Elf_Internal_Rela *irelalign;
+ bfd_vma toaddr;
+ Elf_Internal_Sym *isym;
+ Elf_Internal_Sym *isymend;
+ struct elf_link_hash_entry **sym_hashes;
+ struct elf_link_hash_entry **end_hashes;
+ struct elf_link_hash_entry **start_hashes;
+ unsigned int symcount;
+
+ sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
+
+ contents = elf_section_data (sec)->this_hdr.contents;
+
+ /* The deletion must stop at the next ALIGN reloc for an aligment
+ power larger than the number of bytes we are deleting. */
+ irelalign = NULL;
+ toaddr = sec->size;
+
+ irel = elf_section_data (sec)->relocs;
+ irelend = irel + sec->reloc_count;
+
+ /* Actually delete the bytes. */
+ memmove (contents + addr, contents + addr + count,
+ (size_t) (toaddr - addr - count));
+ sec->size -= count;
+
+ /* Adjust all the relocs. */
+ for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
+ /* Get the new reloc address. */
+ if ((irel->r_offset > addr && irel->r_offset < toaddr))
+ irel->r_offset -= count;
+
+ /* Adjust the local symbols defined in this section. */
+ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+ isym = (Elf_Internal_Sym *) symtab_hdr->contents;
+ for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
+ {
+ if (isym->st_shndx == sec_shndx
+ && isym->st_value > addr
+ && isym->st_value < toaddr)
+ {
+ /* Adjust the addend of SWITCH relocations in this section,
+ which reference this local symbol. */
+ for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
+ {
+ unsigned long r_symndx;
+ Elf_Internal_Sym *rsym;
+ bfd_vma addsym, subsym;
+
+ r_symndx = ELF32_R_SYM (irel->r_info);
+ rsym = (Elf_Internal_Sym *) symtab_hdr->contents + r_symndx;
+
+ /* Skip if not the local adjusted symbol. */
+ if (rsym != isym)
+ continue;
+
+ addsym = isym->st_value;
+ subsym = addsym - irel->r_addend;
+
+ /* Fix the addend only when -->> (addsym > addr >= subsym). */
+ if (subsym <= addr)
+ irel->r_addend -= count;
+ else
+ continue;
+ }
+
+ isym->st_value -= count;
+ }
+ }
+
+ /* Now adjust the global symbols defined in this section. */
+ symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
+ - symtab_hdr->sh_info);
+ sym_hashes = start_hashes = elf_sym_hashes (abfd);
+ end_hashes = sym_hashes + symcount;
+
+ for (; sym_hashes < end_hashes; sym_hashes++)
+ {
+ struct elf_link_hash_entry *sym_hash = *sym_hashes;
+
+ /* The '--wrap SYMBOL' option is causing a pain when the object file,
+ containing the definition of __wrap_SYMBOL, includes a direct
+ call to SYMBOL as well. Since both __wrap_SYMBOL and SYMBOL reference
+ the same symbol (which is __wrap_SYMBOL), but still exist as two
+ different symbols in 'sym_hashes', we don't want to adjust
+ the global symbol __wrap_SYMBOL twice.
+ This check is only relevant when symbols are being wrapped. */
+ if (link_info->wrap_hash != NULL)
+ {
+ struct elf_link_hash_entry **cur_sym_hashes;
+
+ /* Loop only over the symbols whom been already checked. */
+ for (cur_sym_hashes = start_hashes; cur_sym_hashes < sym_hashes;
+ cur_sym_hashes++)
+ /* If the current symbol is identical to 'sym_hash', that means
+ the symbol was already adjusted (or at least checked). */
+ if (*cur_sym_hashes == sym_hash)
+ break;
+
+ /* Don't adjust the symbol again. */
+ if (cur_sym_hashes < sym_hashes)
+ continue;
+ }
+
+ if ((sym_hash->root.type == bfd_link_hash_defined
+ || sym_hash->root.type == bfd_link_hash_defweak)
+ && sym_hash->root.u.def.section == sec
+ && sym_hash->root.u.def.value > addr
+ && sym_hash->root.u.def.value < toaddr)
+ sym_hash->root.u.def.value -= count;
+ }
+
+ return TRUE;
+}
+
+/* Relocate a CR16 ELF section. */
+
+static bfd_boolean
+elf32_cr16_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+ bfd *input_bfd, asection *input_section,
+ bfd_byte *contents, Elf_Internal_Rela *relocs,
+ Elf_Internal_Sym *local_syms,
+ asection **local_sections)
+{
+ Elf_Internal_Shdr *symtab_hdr;
+ struct elf_link_hash_entry **sym_hashes;
+ Elf_Internal_Rela *rel, *relend;
+
+ if (info->relocatable)
+ return TRUE;
+
+ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (input_bfd);
+
+ rel = relocs;
+ relend = relocs + input_section->reloc_count;
+ for (; rel < relend; rel++)
+ {
+ int r_type;
+ reloc_howto_type *howto;
+ unsigned long r_symndx;
+ Elf_Internal_Sym *sym;
+ asection *sec;
+ struct elf_link_hash_entry *h;
+ bfd_vma relocation;
+ bfd_reloc_status_type r;
+
+ r_symndx = ELF32_R_SYM (rel->r_info);
+ r_type = ELF32_R_TYPE (rel->r_info);
+ howto = cr16_elf_howto_table + (r_type);
+
+ h = NULL;
+ sym = NULL;
+ sec = NULL;
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ sym = local_syms + r_symndx;
+ sec = local_sections[r_symndx];
+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ }
+ else
+ {
+ bfd_boolean unresolved_reloc, warned;
+
+ RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
+ r_symndx, symtab_hdr, sym_hashes,
+ h, sec, relocation,
+ unresolved_reloc, warned);
+ }
+
+ r = cr16_elf_final_link_relocate (howto, input_bfd, output_bfd,
+ input_section,
+ contents, rel->r_offset,
+ relocation, rel->r_addend,
+ info, sec, h == NULL);
+
+ if (r != bfd_reloc_ok)
+ {
+ const char *name;
+ const char *msg = NULL;
+
+ if (h != NULL)
+ name = h->root.root.string;
+ else
+ {
+ name = (bfd_elf_string_from_elf_section
+ (input_bfd, symtab_hdr->sh_link, sym->st_name));
+ if (name == NULL || *name == '\0')
+ name = bfd_section_name (input_bfd, sec);
+ }
+
+ switch (r)
+ {
+ case bfd_reloc_overflow:
+ if (!((*info->callbacks->reloc_overflow)
+ (info, (h ? &h->root : NULL), name, howto->name,
+ (bfd_vma) 0, input_bfd, input_section,
+ rel->r_offset)))
+ return FALSE;
+ break;
+
+ case bfd_reloc_undefined:
+ if (!((*info->callbacks->undefined_symbol)
+ (info, name, input_bfd, input_section,
+ rel->r_offset, TRUE)))
+ return FALSE;
+ break;
+
+ case bfd_reloc_outofrange:
+ msg = _("internal error: out of range error");
+ goto common_error;
+
+ case bfd_reloc_notsupported:
+ msg = _("internal error: unsupported relocation error");
+ goto common_error;
+
+ case bfd_reloc_dangerous:
+ msg = _("internal error: dangerous error");
+ goto common_error;
+
+ default:
+ msg = _("internal error: unknown error");
+ /* Fall through. */
+
+ common_error:
+ if (!((*info->callbacks->warning)
+ (info, msg, name, input_bfd, input_section,
+ rel->r_offset)))
+ return FALSE;
+ break;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+/* This is a version of bfd_generic_get_relocated_section_contents
+ which uses elf32_cr16_relocate_section. */
+
+static bfd_byte *
+elf32_cr16_get_relocated_section_contents (bfd *output_bfd,
+ struct bfd_link_info *link_info,
+ struct bfd_link_order *link_order,
+ bfd_byte *data,
+ bfd_boolean relocatable,
+ asymbol **symbols)
+{
+ Elf_Internal_Shdr *symtab_hdr;
+ asection *input_section = link_order->u.indirect.section;
+ bfd *input_bfd = input_section->owner;
+ asection **sections = NULL;
+ Elf_Internal_Rela *internal_relocs = NULL;
+ Elf_Internal_Sym *isymbuf = NULL;
+
+ /* We only need to handle the case of relaxing, or of having a
+ particular set of section contents, specially. */
+ if (relocatable
+ || elf_section_data (input_section)->this_hdr.contents == NULL)
+ return bfd_generic_get_relocated_section_contents (output_bfd, link_info,
+ link_order, data,
+ relocatable,
+ symbols);
+
+ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+
+ memcpy (data, elf_section_data (input_section)->this_hdr.contents,
+ (size_t) input_section->size);
+
+ if ((input_section->flags & SEC_RELOC) != 0
+ && input_section->reloc_count > 0)
+ {
+ Elf_Internal_Sym *isym;
+ Elf_Internal_Sym *isymend;
+ asection **secpp;
+ bfd_size_type amt;
+
+ internal_relocs = _bfd_elf_link_read_relocs (input_bfd, input_section,
+ NULL, NULL, FALSE);
+ if (internal_relocs == NULL)
+ goto error_return;
+
+ if (symtab_hdr->sh_info != 0)
+ {
+ isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
+ if (isymbuf == NULL)
+ isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
+ symtab_hdr->sh_info, 0,
+ NULL, NULL, NULL);
+ if (isymbuf == NULL)
+ goto error_return;
+ }
+
+ amt = symtab_hdr->sh_info;
+ amt *= sizeof (asection *);
+ sections = bfd_malloc (amt);
+ if (sections == NULL && amt != 0)
+ goto error_return;
+
+ isymend = isymbuf + symtab_hdr->sh_info;
+ for (isym = isymbuf, secpp = sections; isym < isymend; ++isym, ++secpp)
+ {
+ asection *isec;
+
+ if (isym->st_shndx == SHN_UNDEF)
+ isec = bfd_und_section_ptr;
+ else if (isym->st_shndx == SHN_ABS)
+ isec = bfd_abs_section_ptr;
+ else if (isym->st_shndx == SHN_COMMON)
+ isec = bfd_com_section_ptr;
+ else
+ isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
+
+ *secpp = isec;
+ }
+
+ if (! elf32_cr16_relocate_section (output_bfd, link_info, input_bfd,
+ input_section, data, internal_relocs,
+ isymbuf, sections))
+ goto error_return;
+
+ if (sections != NULL)
+ free (sections);
+ if (isymbuf != NULL
+ && symtab_hdr->contents != (unsigned char *) isymbuf)
+ free (isymbuf);
+ if (elf_section_data (input_section)->relocs != internal_relocs)
+ free (internal_relocs);
+ }
+
+ return data;
+
+ error_return:
+ if (sections != NULL)
+ free (sections);
+ if (isymbuf != NULL
+ && symtab_hdr->contents != (unsigned char *) isymbuf)
+ free (isymbuf);
+ if (internal_relocs != NULL
+ && elf_section_data (input_section)->relocs != internal_relocs)
+ free (internal_relocs);
+ return NULL;
+}
+
+/* This function handles relaxing for the CR16.
+
+ There's quite a few relaxing opportunites available on the CR16:
+
+ * bcond:24 -> bcond:16 2 bytes
+ * bcond:16 -> bcond:8 2 bytes
+ * arithmetic imm32 -> arithmetic imm16 2 bytes
+
+ Symbol- and reloc-reading infrastructure copied from elf-m10200.c. */
+
+static bfd_boolean
+elf32_cr16_relax_section (bfd *abfd, asection *sec,
+ struct bfd_link_info *link_info, bfd_boolean *again)
+{
+ Elf_Internal_Shdr *symtab_hdr;
+ Elf_Internal_Rela *internal_relocs;
+ Elf_Internal_Rela *irel, *irelend;
+ bfd_byte *contents = NULL;
+ Elf_Internal_Sym *isymbuf = NULL;
+
+ /* Assume nothing changes. */
+ *again = FALSE;
+
+ /* We don't have to do anything for a relocatable link, if
+ this section does not have relocs, or if this is not a
+ code section. */
+ if (link_info->relocatable
+ || (sec->flags & SEC_RELOC) == 0
+ || sec->reloc_count == 0
+ || (sec->flags & SEC_CODE) == 0)
+ return TRUE;
+
+ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+
+ /* Get a copy of the native relocations. */
+ internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
+ link_info->keep_memory);
+ if (internal_relocs == NULL)
+ goto error_return;
+
+ /* Walk through them looking for relaxing opportunities. */
+ irelend = internal_relocs + sec->reloc_count;
+ for (irel = internal_relocs; irel < irelend; irel++)
+ {
+ bfd_vma symval;
+
+ /* If this isn't something that can be relaxed, then ignore
+ this reloc. */
+ if (ELF32_R_TYPE (irel->r_info) != (int) R_CR16_DISP16
+ && ELF32_R_TYPE (irel->r_info) != (int) R_CR16_DISP24)
+ continue;
+
+ /* Get the section contents if we haven't done so already. */
+ if (contents == NULL)
+ {
+ /* Get cached copy if it exists. */
+ if (elf_section_data (sec)->this_hdr.contents != NULL)
+ contents = elf_section_data (sec)->this_hdr.contents;
+ /* Go get them off disk. */
+ else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
+ goto error_return;
+ }
+
+ /* Read this BFD's local symbols if we haven't done so already. */
+ if (isymbuf == NULL && symtab_hdr->sh_info != 0)
+ {
+ isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
+ if (isymbuf == NULL)
+ isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
+ symtab_hdr->sh_info, 0,
+ NULL, NULL, NULL);
+ if (isymbuf == NULL)
+ goto error_return;
+ }
+
+ /* Get the value of the symbol referred to by the reloc. */
+ if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info)
+ {
+ /* A local symbol. */
+ Elf_Internal_Sym *isym;
+ asection *sym_sec;
+
+ isym = isymbuf + ELF32_R_SYM (irel->r_info);
+ if (isym->st_shndx == SHN_UNDEF)
+ sym_sec = bfd_und_section_ptr;
+ else if (isym->st_shndx == SHN_ABS)
+ sym_sec = bfd_abs_section_ptr;
+ else if (isym->st_shndx == SHN_COMMON)
+ sym_sec = bfd_com_section_ptr;
+ else
+ sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
+ symval = (isym->st_value
+ + sym_sec->output_section->vma
+ + sym_sec->output_offset);
+ }
+ else
+ {
+ unsigned long indx;
+ struct elf_link_hash_entry *h;
+
+ /* An external symbol. */
+ indx = ELF32_R_SYM (irel->r_info) - symtab_hdr->sh_info;
+ h = elf_sym_hashes (abfd)[indx];
+ BFD_ASSERT (h != NULL);
+
+ if (h->root.type != bfd_link_hash_defined
+ && h->root.type != bfd_link_hash_defweak)
+ /* This appears to be a reference to an undefined
+ symbol. Just ignore it--it will be caught by the
+ regular reloc processing. */
+ continue;
+
+ symval = (h->root.u.def.value
+ + h->root.u.def.section->output_section->vma
+ + h->root.u.def.section->output_offset);
+ }
+
+ /* For simplicity of coding, we are going to modify the section
+ contents, the section relocs, and the BFD symbol table. We
+ must tell the rest of the code not to free up this
+ information. It would be possible to instead create a table
+ of changes which have to be made, as is done in coff-mips.c;
+ that would be more work, but would require less memory when
+ the linker is run. */
+
+ /* Try to turn a 24 branch/call into a 16bit relative
+ * branch/call. */
+ if (ELF32_R_TYPE (irel->r_info) == (int) R_CR16_DISP24)
+ {
+ bfd_vma value = symval;
+
+ /* Deal with pc-relative gunk. */
+ value -= (sec->output_section->vma + sec->output_offset);
+ value -= irel->r_offset;
+ value += irel->r_addend;
+
+ /* See if the value will fit in 16 bits, note the high value is
+ 0xfffe + 2 as the target will be two bytes closer if we are
+ able to relax. */
+ if ((long) value < 0x10000 && (long) value > -0x10002)
+ {
+ unsigned int code;
+
+ /* Get the opcode. */
+ code = (unsigned int) bfd_get_32 (abfd, contents + irel->r_offset);
+
+ /* Verify it's a 'bcond' and fix the opcode. */
+ if ((code & 0xffff) == 0x0010)
+ {
+ bfd_put_16 (abfd, 0x1800 | ((0xf & (code >>20))<<4), contents + irel->r_offset);
+ bfd_put_16 (abfd, value, contents + irel->r_offset+2);
+ }
+ else
+ continue;
+
+ /* Note that we've changed the relocs, section contents, etc. */
+ elf_section_data (sec)->relocs = internal_relocs;
+ elf_section_data (sec)->this_hdr.contents = contents;
+ symtab_hdr->contents = (unsigned char *) isymbuf;
+
+ /* Fix the relocation's type. */
+ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
+ R_CR16_DISP16);
+
+ /* Delete two bytes of data. */
+ if (!elf32_cr16_relax_delete_bytes (link_info, abfd, sec,
+ irel->r_offset + 2, 2))
+ goto error_return;
+
+ /* That will change things, so, we should relax again.
+ Note that this is not required, and it may be slow. */
+ *again = TRUE;
+ }
+ }
+
+ /* Try to turn a 16bit pc-relative branch into an
+ 8bit pc-relative branch. */
+ if (ELF32_R_TYPE (irel->r_info) == (int) R_CR16_DISP16)
+ {
+ bfd_vma value = symval;
+
+ /* Deal with pc-relative gunk. */
+ value -= (sec->output_section->vma + sec->output_offset);
+ value -= irel->r_offset;
+ value += irel->r_addend;
+
+ /* See if the value will fit in 8 bits, note the high value is
+ 0xfc + 2 as the target will be two bytes closer if we are
+ able to relax. */
+ if ((long) value < 0xfe && (long) value > -0x100)
+ {
+ unsigned short code;
+
+ /* Get the opcode. */
+ code = (unsigned short) bfd_get_16 (abfd, contents + irel->r_offset);
+
+ /* Verify it's a 'bcond' opcode. */
+ if ((code & 0xff00) == 0x1800)
+ {
+ bfd_put_8 (abfd, 0x1 | ((0xf & (code>>4))<<4), contents + irel->r_offset);
+ bfd_put_8 (abfd, value, contents + irel->r_offset+2);
+ }
+ else
+ continue;
+
+ /* Note that we've changed the relocs, section contents, etc. */
+ elf_section_data (sec)->relocs = internal_relocs;
+ elf_section_data (sec)->this_hdr.contents = contents;
+ symtab_hdr->contents = (unsigned char *) isymbuf;
+
+ /* Fix the relocation's type. */
+ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
+ R_CR16_DISP8);
+
+ /* Delete two bytes of data. */
+ if (!elf32_cr16_relax_delete_bytes (link_info, abfd, sec,
+ irel->r_offset + 2, 2))
+ goto error_return;
+
+ /* That will change things, so, we should relax again.
+ Note that this is not required, and it may be slow. */
+ *again = TRUE;
+ }
+ }
+
+#if 0 // REVISIT: To support IMM relaxation in CR16 target
+ /* Try to turn a 32bit immediate address into
+ a 20bit immediate address. */
+ if (ELF32_R_TYPE (irel->r_info) == (int) R_CR16_IMM32)
+ {
+ bfd_vma value = symval;
+
+ /* See if the value will fit in 20 bits. */
+ if ((long) value < 0x7ffff && (long) value > -0x80000)
+ {
+ unsigned short code;
+
+ /* Get the opcode. */
+ code = (unsigned short) bfd_get_16 (abfd, contents + irel->r_offset);
+
+ /* Verify it's a 'arithmetic double'. */
+ if ((code & 0xfff0) != 0x0070)
+ continue;
+
+ /* Note that we've changed the relocs, section contents, etc. */
+ elf_section_data (sec)->relocs = internal_relocs;
+ elf_section_data (sec)->this_hdr.contents = contents;
+ symtab_hdr->contents = (unsigned char *) isymbuf;
+
+ /* Fix the opcode. */
+ bfd_put_8 (abfd, (code & 0xff) - 0x10, contents + irel->r_offset);
+
+ /* Fix the relocation's type. */
+ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
+ R_CR16_IMM20);
+
+ /* Delete two bytes of data. */
+ if (!elf32_cr16_relax_delete_bytes (link_info, abfd, sec,
+ irel->r_offset + 2, 2))
+ goto error_return;
+
+ /* That will change things, so, we should relax again.
+ Note that this is not required, and it may be slow. */
+ *again = TRUE;
+ }
+ }
+ /* Try to turn a 20bit/16bit immediate address into
+ a 4bit immediate address. */
+ if ((ELF32_R_TYPE (irel->r_info) == (int) R_CR16_IMM20)
+ || (ELF32_R_TYPE (irel->r_info) == (int) R_CR16_IMM16))
+ {
+ bfd_vma value = symval;
+
+ /* See if the value will fit in 4 bits. */
+ if ((long) value < 0x7 && (long) value > -0x8)
+ {
+ unsigned short code;
+
+ /* Get the opcode. */
+ code = (unsigned short) bfd_get_8 (abfd, contents + irel->r_offset);
+
+ /* Verify it's a 'arithmetic double'. */
+ if (((code & 0xff) != 0x50) || ((code & 0xff) != 0x45))
+ continue;
+
+ /* Note that we've changed the relocs, section contents, etc. */
+ elf_section_data (sec)->relocs = internal_relocs;
+ elf_section_data (sec)->this_hdr.contents = contents;
+ symtab_hdr->contents = (unsigned char *) isymbuf;
+
+ /* Fix the opcode. */
+ bfd_put_8 (abfd, (code & 0xff) - 0x10, contents + irel->r_offset);
+
+ /* Fix the relocation's type. */
+ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
+ R_CR16_IMM4);
+
+ /* Delete two bytes of data. */
+ if (!elf32_cr16_relax_delete_bytes (link_info, abfd, sec,
+ irel->r_offset + 2, 2))
+ goto error_return;
+
+ /* That will change things, so, we should relax again.
+ Note that this is not required, and it may be slow. */
+ *again = TRUE;
+ }
+ }
+#endif
+ }
+
+ if (isymbuf != NULL
+ && symtab_hdr->contents != (unsigned char *) isymbuf)
+ {
+ if (! link_info->keep_memory)
+ free (isymbuf);
+ else
+ {
+ /* Cache the symbols for elf_link_input_bfd. */
+ symtab_hdr->contents = (unsigned char *) isymbuf;
+ }
+ }
+
+ if (contents != NULL
+ && elf_section_data (sec)->this_hdr.contents != contents)
+ {
+ if (! link_info->keep_memory)
+ free (contents);
+ else
+ {
+ /* Cache the section contents for elf_link_input_bfd. */
+ elf_section_data (sec)->this_hdr.contents = contents;
+ }
+ }
+
+ if (internal_relocs != NULL
+ && elf_section_data (sec)->relocs != internal_relocs)
+ free (internal_relocs);
+
+ return TRUE;
+
+ error_return:
+ if (isymbuf != NULL
+ && symtab_hdr->contents != (unsigned char *) isymbuf)
+ free (isymbuf);
+ if (contents != NULL
+ && elf_section_data (sec)->this_hdr.contents != contents)
+ free (contents);
+ if (internal_relocs != NULL
+ && elf_section_data (sec)->relocs != internal_relocs)
+ free (internal_relocs);
+
+ return FALSE;
+}
+
+static asection *
+elf32_cr16_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
+{
+ if (h == NULL)
+ return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+
+ switch (h->root.type)
+ {
+ case bfd_link_hash_defined:
+ case bfd_link_hash_defweak:
+ return h->root.u.def.section;
+
+ case bfd_link_hash_common:
+ return h->root.u.c.p->section;
+
+ default:
+ return NULL;
+ }
+}
+
+/* Update the got entry reference counts for the section being removed. */
+
+static bfd_boolean
+elf32_cr16_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ asection *sec ATTRIBUTE_UNUSED,
+ const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
+{
+ /* We don't support garbage collection of GOT and PLT relocs yet. */
+ return TRUE;
+}
+
+/* Definitions for setting CR16 target vector. */
+#define TARGET_LITTLE_SYM bfd_elf32_cr16_vec
+#define TARGET_LITTLE_NAME "elf32-cr16"
+#define ELF_ARCH bfd_arch_cr16
+#define ELF_MACHINE_CODE EM_CR16
+#define ELF_MAXPAGESIZE 0x1
+#define elf_symbol_leading_char '_'
+
+#define bfd_elf32_bfd_reloc_type_lookup elf_cr16_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup elf_cr16_reloc_name_lookup
+#define elf_info_to_howto elf_cr16_info_to_howto
+#define elf_info_to_howto_rel 0
+#define elf_backend_relocate_section elf32_cr16_relocate_section
+#define bfd_elf32_bfd_relax_section elf32_cr16_relax_section
+#define bfd_elf32_bfd_get_relocated_section_contents \
+ elf32_cr16_get_relocated_section_contents
+#define elf_backend_gc_mark_hook elf32_cr16_gc_mark_hook
+#define elf_backend_gc_sweep_hook elf32_cr16_gc_sweep_hook
+#define elf_backend_can_gc_sections 1
+#define elf_backend_rela_normal 1
+
+#include "elf32-target.h"
diff --git a/bfd/elf32-cr16c.c b/bfd/elf32-cr16c.c
index ec7199b26943..3a1db7e87647 100644
--- a/bfd/elf32-cr16c.c
+++ b/bfd/elf32-cr16c.c
@@ -1,5 +1,5 @@
/* BFD back-end for National Semiconductor's CR16C ELF
- Copyright 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "elf/cr16c.h"
@@ -150,6 +150,20 @@ elf_cr16c_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return 0;
}
+static reloc_howto_type *
+elf_cr16c_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof (elf_howto_table) / sizeof (elf_howto_table[0]); i++)
+ if (elf_howto_table[i].name != NULL
+ && strcasecmp (elf_howto_table[i].name, r_name) == 0)
+ return &elf_howto_table[i];
+
+ return NULL;
+}
+
static void
elf_cr16c_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
arelent *cache_ptr ATTRIBUTE_UNUSED,
@@ -692,26 +706,6 @@ elf32_cr16c_relocate_section (bfd *output_bfd,
r_type = ELF32_R_TYPE (rel->r_info);
howto = elf_howto_table + r_type;
- if (info->relocatable)
- {
- /* This is a relocatable link. We don't have to change
- anything, unless the reloc is against a section symbol,
- in which case we have to adjust according to where the
- section symbol winds up in the output section. */
- if (r_symndx < symtab_hdr->sh_info)
- {
- sym = local_syms + r_symndx;
- if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
- {
- sec = local_sections[r_symndx];
- rel->r_addend += sec->output_offset + sym->st_value;
- }
- }
-
- continue;
- }
-
- /* This is a final link. */
h = NULL;
sym = NULL;
sec = NULL;
@@ -731,6 +725,28 @@ elf32_cr16c_relocate_section (bfd *output_bfd,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ {
+ /* This is a relocatable link. We don't have to change
+ anything, unless the reloc is against a section symbol,
+ in which case we have to adjust according to where the
+ section symbol winds up in the output section. */
+ if (sym != NULL && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ rel->r_addend += sec->output_offset;
+ continue;
+ }
+
r = cr16c_elf_final_link_relocate (howto, input_bfd, output_bfd,
input_section,
contents, rel->r_offset,
@@ -798,53 +814,6 @@ elf32_cr16c_relocate_section (bfd *output_bfd,
return TRUE;
}
-static asection *
-elf32_cr16c_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela *rel,
- struct elf_link_hash_entry *h,
- Elf_Internal_Sym *sym)
-{
- if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- {
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
- }
-
- return NULL;
-}
-
-/* Update the got entry reference counts for the section being removed. */
-
-static bfd_boolean
-elf32_cr16c_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- asection *sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
-{
- /* We don't support garbage collection of GOT and PLT relocs yet. */
- return TRUE;
-}
-
/* CR16C ELF uses three common sections:
One is for default common symbols (placed in usual common section).
Second is for near common symbols (placed in "ncommon" section).
@@ -988,11 +957,10 @@ elf32_cr16c_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED
#define elf_symbol_leading_char '_'
#define bfd_elf32_bfd_reloc_type_lookup elf_cr16c_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup elf_cr16c_reloc_name_lookup
#define elf_info_to_howto elf_cr16c_info_to_howto
#define elf_info_to_howto_rel elf_cr16c_info_to_howto_rel
#define elf_backend_relocate_section elf32_cr16c_relocate_section
-#define elf_backend_gc_mark_hook elf32_cr16c_gc_mark_hook
-#define elf_backend_gc_sweep_hook elf32_cr16c_gc_sweep_hook
#define elf_backend_symbol_processing elf32_cr16c_symbol_processing
#define elf_backend_section_from_bfd_section elf32_cr16c_section_from_bfd_section
#define elf_backend_add_symbol_hook elf32_cr16c_add_symbol_hook
diff --git a/bfd/elf32-cris.c b/bfd/elf32-cris.c
index 4019e34e26b4..04f563bd7bcd 100644
--- a/bfd/elf32-cris.c
+++ b/bfd/elf32-cris.c
@@ -1,5 +1,5 @@
/* CRIS-specific support for 32-bit ELF.
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by Axis Communications AB.
Written by Hans-Peter Nilsson, based on elf32-fr30.c
@@ -21,8 +21,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/cris.h"
@@ -51,14 +51,6 @@ static bfd_reloc_status_type cris_final_link_relocate
PARAMS ((reloc_howto_type *, bfd *, asection *, bfd_byte *,
Elf_Internal_Rela *, bfd_vma));
-static bfd_boolean cris_elf_gc_sweep_hook
- PARAMS ((bfd *, struct bfd_link_info *, asection *,
- const Elf_Internal_Rela *));
-
-static asection * cris_elf_gc_mark_hook
- PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *,
- struct elf_link_hash_entry *, Elf_Internal_Sym *));
-
static bfd_boolean cris_elf_object_p PARAMS ((bfd *));
static void cris_elf_final_write_processing PARAMS ((bfd *, bfd_boolean));
@@ -465,6 +457,21 @@ cris_reloc_type_lookup (abfd, code)
return NULL;
}
+static reloc_howto_type *
+cris_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (cris_elf_howto_table) / sizeof (cris_elf_howto_table[0]);
+ i++)
+ if (cris_elf_howto_table[i].name != NULL
+ && strcasecmp (cris_elf_howto_table[i].name, r_name) == 0)
+ return &cris_elf_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an CRIS ELF reloc. */
static void
@@ -935,9 +942,6 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section,
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
- if (info->relocatable)
- return TRUE;
-
dynobj = elf_hash_table (info)->dynobj;
local_got_offsets = elf_local_got_offsets (input_bfd);
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
@@ -972,7 +976,6 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section,
|| r_type == R_CRIS_GNU_VTENTRY)
continue;
- /* This is a final link. */
r_symndx = ELF32_R_SYM (rel->r_info);
howto = cris_elf_howto_table + r_type;
h = NULL;
@@ -1050,7 +1053,7 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section,
|| r_type == R_CRIS_16_PCREL
|| r_type == R_CRIS_32_PCREL))
relocation = 0;
- else if (unresolved_reloc)
+ else if (!info->relocatable && unresolved_reloc)
{
_bfd_error_handler
(_("%B, section %A: unresolvable relocation %s against symbol `%s'"),
@@ -1064,6 +1067,20 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section,
}
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
switch (r_type)
{
case R_CRIS_16_GOTPLT:
@@ -1388,7 +1405,7 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (input_bfd,
input_section),
name + 5) == 0);
@@ -1438,11 +1455,12 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section,
}
else
{
+ outrel.r_addend = relocation + rel->r_addend;
+
if (r_type == R_CRIS_32)
{
relocate = TRUE;
outrel.r_info = ELF32_R_INFO (0, R_CRIS_RELATIVE);
- outrel.r_addend = relocation + rel->r_addend;
}
else
{
@@ -1459,13 +1477,24 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section,
{
asection *osec;
+ /* We are turning this relocation into one
+ against a section symbol. It would be
+ proper to subtract the symbol's value,
+ osec->vma, from the emitted reloc addend,
+ but ld.so expects buggy relocs. */
osec = sec->output_section;
indx = elf_section_data (osec)->dynindx;
- BFD_ASSERT (indx > 0);
+ if (indx == 0)
+ {
+ struct elf_cris_link_hash_table *htab;
+ htab = elf_cris_hash_table (info);
+ osec = htab->root.text_index_section;
+ indx = elf_section_data (osec)->dynindx;
+ }
+ BFD_ASSERT (indx != 0);
}
outrel.r_info = ELF32_R_INFO (indx, r_type);
- outrel.r_addend = relocation + rel->r_addend;
}
}
@@ -1923,50 +1952,30 @@ elf_cris_finish_dynamic_sections (output_bfd, info)
relocation. */
static asection *
-cris_elf_gc_mark_hook (sec, info, rel, h, sym)
- asection *sec;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
- Elf_Internal_Rela *rel;
- struct elf_link_hash_entry *h;
- Elf_Internal_Sym *sym;
+cris_elf_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_CRIS_GNU_VTINHERIT:
- case R_CRIS_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_CRIS_GNU_VTINHERIT:
+ case R_CRIS_GNU_VTENTRY:
+ return NULL;
+ }
- return NULL;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update the got entry reference counts for the section being removed. */
static bfd_boolean
-cris_elf_gc_sweep_hook (abfd, info, sec, relocs)
- bfd *abfd ATTRIBUTE_UNUSED;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
- asection *sec ATTRIBUTE_UNUSED;
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED;
+cris_elf_gc_sweep_hook (bfd *abfd,
+ struct bfd_link_info *info,
+ asection *sec,
+ const Elf_Internal_Rela *relocs)
{
Elf_Internal_Shdr *symtab_hdr;
struct elf_link_hash_entry **sym_hashes;
@@ -2212,7 +2221,6 @@ elf_cris_adjust_dynamic_symbol (info, h)
{
bfd *dynobj;
asection *s;
- unsigned int power_of_two;
bfd_size_type plt_entry_size;
dynobj = elf_hash_table (info)->dynobj;
@@ -2420,31 +2428,7 @@ elf_cris_adjust_dynamic_symbol (info, h)
h->needs_copy = 1;
}
- /* Historic precedent: m68k and i386 allow max 8-byte alignment for the
- thing to copy; so do we. */
-
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 3)
- power_of_two = 3;
-
- /* Apply the required alignment. */
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (dynobj, s))
- {
- if (!bfd_set_section_alignment (dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Look through the relocs for a section during the first phase. */
@@ -2799,7 +2783,7 @@ cris_elf_check_relocs (abfd, info, sec, relocs)
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
name + 5) == 0);
@@ -2962,7 +2946,7 @@ elf_cris_size_dynamic_sections (output_bfd, info)
/* Remember whether there is a PLT. */
plt = s->size != 0;
}
- else if (strncmp (name, ".rela", 5) == 0)
+ else if (CONST_STRNEQ (name, ".rela"))
{
if (s->size != 0)
{
@@ -2976,7 +2960,7 @@ elf_cris_size_dynamic_sections (output_bfd, info)
s->reloc_count = 0;
}
}
- else if (strncmp (name, ".got", 4) != 0
+ else if (! CONST_STRNEQ (name, ".got")
&& strcmp (name, ".dynbss") != 0)
{
/* It's not one of our sections, so don't allocate space. */
@@ -3411,6 +3395,7 @@ elf_cris_reloc_type_class (rela)
cris_elf_copy_private_bfd_data
#define bfd_elf32_bfd_reloc_type_lookup cris_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup cris_reloc_name_lookup
#define bfd_elf32_bfd_link_hash_table_create \
elf_cris_link_hash_table_create
@@ -3418,6 +3403,7 @@ elf_cris_reloc_type_class (rela)
elf_cris_adjust_dynamic_symbol
#define elf_backend_size_dynamic_sections \
elf_cris_size_dynamic_sections
+#define elf_backend_init_index_section _bfd_elf_init_1_index_section
#define elf_backend_finish_dynamic_symbol \
elf_cris_finish_dynamic_symbol
#define elf_backend_finish_dynamic_sections \
@@ -3443,8 +3429,6 @@ elf_cris_reloc_type_class (rela)
#include "elf32-target.h"
-#define INCLUDED_TARGET_FILE
-
#undef TARGET_LITTLE_SYM
#undef TARGET_LITTLE_NAME
#undef elf_symbol_leading_char
@@ -3452,5 +3436,7 @@ elf_cris_reloc_type_class (rela)
#define TARGET_LITTLE_SYM bfd_elf32_us_cris_vec
#define TARGET_LITTLE_NAME "elf32-us-cris"
#define elf_symbol_leading_char '_'
+#undef elf32_bed
+#define elf32_bed elf32_us_cris_bed
#include "elf32-target.h"
diff --git a/bfd/elf32-crx.c b/bfd/elf32-crx.c
index 0a49885a7674..f4fe1fa9fc38 100644
--- a/bfd/elf32-crx.c
+++ b/bfd/elf32-crx.c
@@ -1,5 +1,5 @@
/* BFD back-end for National Semiconductor's CRX ELF
- Copyright 2004 Free Software Foundation, Inc.
+ Copyright 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Tomer Levi, NSC, Israel.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -38,12 +38,6 @@ static bfd_reloc_status_type crx_elf_final_link_relocate
static bfd_boolean elf32_crx_relocate_section
(bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
-static asection * elf32_crx_gc_mark_hook
- (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
- struct elf_link_hash_entry *, Elf_Internal_Sym *);
-static bfd_boolean elf32_crx_gc_sweep_hook
- (bfd *, struct bfd_link_info *, asection *,
- const Elf_Internal_Rela *);
static bfd_boolean elf32_crx_relax_section
(bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
static bfd_byte * elf32_crx_get_relocated_section_contents
@@ -405,6 +399,22 @@ elf_crx_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return 0;
}
+static reloc_howto_type *
+elf_crx_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (crx_elf_howto_table) / sizeof (crx_elf_howto_table[0]);
+ i++)
+ if (crx_elf_howto_table[i].name != NULL
+ && strcasecmp (crx_elf_howto_table[i].name, r_name) == 0)
+ return &crx_elf_howto_table[i];
+
+ return NULL;
+}
+
/* Retrieve a howto ptr using an internal relocation entry. */
static void
@@ -827,9 +837,6 @@ elf32_crx_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
struct elf_link_hash_entry **sym_hashes;
Elf_Internal_Rela *rel, *relend;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -869,6 +876,20 @@ elf32_crx_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
r = crx_elf_final_link_relocate (howto, input_bfd, output_bfd,
input_section,
contents, rel->r_offset,
@@ -1297,42 +1318,6 @@ elf32_crx_relax_section (bfd *abfd, asection *sec,
return FALSE;
}
-static asection *
-elf32_crx_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
- struct elf_link_hash_entry *h,
- Elf_Internal_Sym *sym)
-{
- if (h == NULL)
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- return NULL;
- }
-}
-
-/* Update the got entry reference counts for the section being removed. */
-
-static bfd_boolean
-elf32_crx_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- asection *sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
-{
- /* We don't support garbage collection of GOT and PLT relocs yet. */
- return TRUE;
-}
-
/* Definitions for setting CRX target vector. */
#define TARGET_LITTLE_SYM bfd_elf32_crx_vec
#define TARGET_LITTLE_NAME "elf32-crx"
@@ -1342,14 +1327,14 @@ elf32_crx_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
#define elf_symbol_leading_char '_'
#define bfd_elf32_bfd_reloc_type_lookup elf_crx_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup \
+ elf_crx_reloc_name_lookup
#define elf_info_to_howto elf_crx_info_to_howto
#define elf_info_to_howto_rel 0
#define elf_backend_relocate_section elf32_crx_relocate_section
#define bfd_elf32_bfd_relax_section elf32_crx_relax_section
#define bfd_elf32_bfd_get_relocated_section_contents \
elf32_crx_get_relocated_section_contents
-#define elf_backend_gc_mark_hook elf32_crx_gc_mark_hook
-#define elf_backend_gc_sweep_hook elf32_crx_gc_sweep_hook
#define elf_backend_can_gc_sections 1
#define elf_backend_rela_normal 1
diff --git a/bfd/elf32-d10v.c b/bfd/elf32-d10v.c
index 293b1419de7c..f6a1d926c85a 100644
--- a/bfd/elf32-d10v.c
+++ b/bfd/elf32-d10v.c
@@ -1,6 +1,6 @@
/* D10V-specific support for 32-bit ELF
- Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2007 Free Software Foundation, Inc.
Contributed by Martin Hunt (hunt@cygnus.com).
This file is part of BFD, the Binary File Descriptor library.
@@ -20,8 +20,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/d10v.h"
@@ -203,6 +203,22 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (elf_d10v_howto_table) / sizeof (elf_d10v_howto_table[0]);
+ i++)
+ if (elf_d10v_howto_table[i].name != NULL
+ && strcasecmp (elf_d10v_howto_table[i].name, r_name) == 0)
+ return &elf_d10v_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an D10V ELF reloc. */
static void
@@ -219,48 +235,20 @@ d10v_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
static asection *
elf32_d10v_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
Elf_Internal_Rela *rel,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
+ switch (ELF32_R_TYPE (rel->r_info))
{
case R_D10V_GNU_VTINHERIT:
case R_D10V_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ return NULL;
+ }
- return NULL;
-}
-
-static bfd_boolean
-elf32_d10v_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- asection *sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
-{
- /* We don't use got and plt entries for d10v. */
- return TRUE;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Look through the relocs for a section during the first phase.
@@ -433,35 +421,6 @@ elf32_d10v_relocate_section (bfd *output_bfd,
continue;
howto = elf_d10v_howto_table + r_type;
-
- if (info->relocatable)
- {
- bfd_vma val;
- bfd_byte *where;
-
- /* This is a relocatable link. We don't have to change
- anything, unless the reloc is against a section symbol,
- in which case we have to adjust according to where the
- section symbol winds up in the output section. */
- if (r_symndx >= symtab_hdr->sh_info)
- continue;
-
- sym = local_syms + r_symndx;
- if (ELF_ST_TYPE (sym->st_info) != STT_SECTION)
- continue;
-
- sec = local_sections[r_symndx];
- val = sec->output_offset;
- if (val == 0)
- continue;
-
- where = contents + rel->r_offset;
- val += extract_rel_addend (input_bfd, where, howto);
- insert_rel_addend (input_bfd, where, howto, val);
- continue;
- }
-
- /* This is a final link. */
h = NULL;
sym = NULL;
sec = NULL;
@@ -472,18 +431,26 @@ elf32_d10v_relocate_section (bfd *output_bfd,
relocation = (sec->output_section->vma
+ sec->output_offset
+ sym->st_value);
- if ((sec->flags & SEC_MERGE)
- && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ if (ELF_ST_TYPE (sym->st_info) == STT_SECTION
+ && ((sec->flags & SEC_MERGE) != 0
+ || (info->relocatable
+ && sec->output_offset != 0)))
{
- asection *msec;
bfd_vma addend;
bfd_byte *where = contents + rel->r_offset;
addend = extract_rel_addend (input_bfd, where, howto);
- msec = sec;
- addend = _bfd_elf_rel_local_sym (output_bfd, sym, &msec, addend);
- addend -= relocation;
- addend += msec->output_section->vma + msec->output_offset;
+
+ if (info->relocatable)
+ addend += sec->output_offset;
+ else
+ {
+ asection *msec = sec;
+ addend = _bfd_elf_rel_local_sym (output_bfd, sym, &msec,
+ addend);
+ addend -= relocation;
+ addend += msec->output_section->vma + msec->output_offset;
+ }
insert_rel_addend (input_bfd, where, howto, addend);
}
}
@@ -497,6 +464,20 @@ elf32_d10v_relocate_section (bfd *output_bfd,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
if (h != NULL)
name = h->root.root.string;
else
@@ -573,7 +554,6 @@ elf32_d10v_relocate_section (bfd *output_bfd,
#define elf_backend_object_p 0
#define elf_backend_final_write_processing 0
#define elf_backend_gc_mark_hook elf32_d10v_gc_mark_hook
-#define elf_backend_gc_sweep_hook elf32_d10v_gc_sweep_hook
#define elf_backend_check_relocs elf32_d10v_check_relocs
#define elf_backend_relocate_section elf32_d10v_relocate_section
#define elf_backend_can_gc_sections 1
diff --git a/bfd/elf32-d30v.c b/bfd/elf32-d30v.c
index c96937d5da06..6bcec43990f4 100644
--- a/bfd/elf32-d30v.c
+++ b/bfd/elf32-d30v.c
@@ -1,5 +1,5 @@
/* D30V-specific support for 32-bit ELF
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Contributed by Martin Hunt (hunt@cygnus.com).
@@ -20,8 +20,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/d30v.h"
@@ -491,6 +491,22 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (elf_d30v_howto_table) / sizeof (elf_d30v_howto_table[0]);
+ i++)
+ if (elf_d30v_howto_table[i].name != NULL
+ && strcasecmp (elf_d30v_howto_table[i].name, r_name) == 0)
+ return &elf_d30v_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an D30V ELF reloc (type REL). */
static void
diff --git a/bfd/elf32-dlx.c b/bfd/elf32-dlx.c
index ae42baf3a632..f57387bf5d6f 100644
--- a/bfd/elf32-dlx.c
+++ b/bfd/elf32-dlx.c
@@ -1,5 +1,6 @@
/* DLX specific support for 32-bit ELF
- Copyright 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2002, 2003, 2004, 2005, 2007
+ Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +19,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/dlx.h"
@@ -27,6 +28,7 @@
#define USE_REL 1
#define bfd_elf32_bfd_reloc_type_lookup elf32_dlx_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup elf32_dlx_reloc_name_lookup
#define elf_info_to_howto elf32_dlx_info_to_howto
#define elf_info_to_howto_rel elf32_dlx_info_to_howto_rel
#define elf_backend_check_relocs elf32_dlx_check_relocs
@@ -506,27 +508,46 @@ elf32_dlx_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
}
static reloc_howto_type *
+elf32_dlx_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (dlx_elf_howto_table) / sizeof (dlx_elf_howto_table[0]);
+ i++)
+ if (dlx_elf_howto_table[i].name != NULL
+ && strcasecmp (dlx_elf_howto_table[i].name, r_name) == 0)
+ return &dlx_elf_howto_table[i];
+
+ if (strcasecmp (elf_dlx_gnu_rel16_s2.name, r_name) == 0)
+ return &elf_dlx_gnu_rel16_s2;
+ if (strcasecmp (elf_dlx_gnu_rel26_s2.name, r_name) == 0)
+ return &elf_dlx_gnu_rel26_s2;
+ if (strcasecmp (elf_dlx_reloc_16_hi.name, r_name) == 0)
+ return &elf_dlx_reloc_16_hi;
+ if (strcasecmp (elf_dlx_reloc_16_lo.name, r_name) == 0)
+ return &elf_dlx_reloc_16_lo;
+
+ return NULL;
+}
+
+static reloc_howto_type *
dlx_rtype_to_howto (unsigned int r_type)
{
switch (r_type)
{
case R_DLX_RELOC_16_PCREL:
return & elf_dlx_gnu_rel16_s2;
- break;
case R_DLX_RELOC_26_PCREL:
return & elf_dlx_gnu_rel26_s2;
- break;
case R_DLX_RELOC_16_HI:
return & elf_dlx_reloc_16_hi;
- break;
case R_DLX_RELOC_16_LO:
return & elf_dlx_reloc_16_lo;
- break;
-
default:
BFD_ASSERT (r_type < (unsigned int) R_DLX_max);
return & dlx_elf_howto_table[r_type];
- break;
}
}
diff --git a/bfd/elf32-fr30.c b/bfd/elf32-fr30.c
index e17207960875..df2ebfcb8fc0 100644
--- a/bfd/elf32-fr30.c
+++ b/bfd/elf32-fr30.c
@@ -1,5 +1,5 @@
/* FR30-specific support for 32-bit ELF.
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/fr30.h"
@@ -39,12 +39,6 @@ static bfd_boolean fr30_elf_relocate_section
static bfd_reloc_status_type fr30_final_link_relocate
PARAMS ((reloc_howto_type *, bfd *, asection *, bfd_byte *,
Elf_Internal_Rela *, bfd_vma));
-static bfd_boolean fr30_elf_gc_sweep_hook
- PARAMS ((bfd *, struct bfd_link_info *, asection *,
- const Elf_Internal_Rela *));
-static asection * fr30_elf_gc_mark_hook
- PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *,
- struct elf_link_hash_entry *, Elf_Internal_Sym *));
static bfd_boolean fr30_elf_check_relocs
PARAMS ((bfd *, struct bfd_link_info *, asection *,
const Elf_Internal_Rela *));
@@ -372,6 +366,21 @@ fr30_reloc_type_lookup (abfd, code)
return NULL;
}
+static reloc_howto_type *
+fr30_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (fr30_elf_howto_table) / sizeof (fr30_elf_howto_table[0]);
+ i++)
+ if (fr30_elf_howto_table[i].name != NULL
+ && strcasecmp (fr30_elf_howto_table[i].name, r_name) == 0)
+ return &fr30_elf_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an FR30 ELF reloc. */
static void
@@ -516,9 +525,6 @@ fr30_elf_relocate_section (output_bfd, info, input_bfd, input_section,
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
relend = relocs + input_section->reloc_count;
@@ -570,6 +576,20 @@ fr30_elf_relocate_section (output_bfd, info, input_bfd, input_section,
name = h->root.root.string;
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
r = fr30_final_link_relocate (howto, input_bfd, input_section,
contents, rel, relocation);
@@ -624,52 +644,21 @@ fr30_elf_relocate_section (output_bfd, info, input_bfd, input_section,
relocation. */
static asection *
-fr30_elf_gc_mark_hook (sec, info, rel, h, sym)
- asection *sec;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
- Elf_Internal_Rela *rel;
- struct elf_link_hash_entry *h;
- Elf_Internal_Sym * sym;
+fr30_elf_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_FR30_GNU_VTINHERIT:
- case R_FR30_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
-}
-
-/* Update the got entry reference counts for the section being removed. */
-
-static bfd_boolean
-fr30_elf_gc_sweep_hook (abfd, info, sec, relocs)
- bfd *abfd ATTRIBUTE_UNUSED;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
- asection *sec ATTRIBUTE_UNUSED;
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED;
-{
- return TRUE;
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_FR30_GNU_VTINHERIT:
+ case R_FR30_GNU_VTENTRY:
+ return NULL;
+ }
+
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Look through the relocs for a section during the first phase.
@@ -747,12 +736,12 @@ fr30_elf_check_relocs (abfd, info, sec, relocs)
#define elf_info_to_howto fr30_info_to_howto_rela
#define elf_backend_relocate_section fr30_elf_relocate_section
#define elf_backend_gc_mark_hook fr30_elf_gc_mark_hook
-#define elf_backend_gc_sweep_hook fr30_elf_gc_sweep_hook
#define elf_backend_check_relocs fr30_elf_check_relocs
#define elf_backend_can_gc_sections 1
#define elf_backend_rela_normal 1
#define bfd_elf32_bfd_reloc_type_lookup fr30_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup fr30_reloc_name_lookup
#include "elf32-target.h"
diff --git a/bfd/elf32-frv.c b/bfd/elf32-frv.c
index 1758e27591fa..97cce0b7629e 100644
--- a/bfd/elf32-frv.c
+++ b/bfd/elf32-frv.c
@@ -1,5 +1,6 @@
/* FRV-specific support for 32-bit ELF.
- Copyright 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +18,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/frv.h"
@@ -57,12 +58,6 @@ static bfd_boolean elf32_frv_add_symbol_hook
static bfd_reloc_status_type frv_final_link_relocate
PARAMS ((reloc_howto_type *, bfd *, asection *, bfd_byte *,
Elf_Internal_Rela *, bfd_vma));
-static bfd_boolean elf32_frv_gc_sweep_hook
- PARAMS ((bfd *, struct bfd_link_info *, asection *, const
- Elf_Internal_Rela *));
-static asection * elf32_frv_gc_mark_hook
- PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *,
- struct elf_link_hash_entry *, Elf_Internal_Sym *));
static bfd_boolean elf32_frv_check_relocs
PARAMS ((bfd *, struct bfd_link_info *, asection *,
const Elf_Internal_Rela *));
@@ -2595,6 +2590,26 @@ frv_reloc_type_lookup (abfd, code)
return NULL;
}
+static reloc_howto_type *
+frv_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (elf32_frv_howto_table) / sizeof (elf32_frv_howto_table[0]);
+ i++)
+ if (elf32_frv_howto_table[i].name != NULL
+ && strcasecmp (elf32_frv_howto_table[i].name, r_name) == 0)
+ return &elf32_frv_howto_table[i];
+
+ if (strcasecmp (elf32_frv_vtinherit_howto.name, r_name) == 0)
+ return &elf32_frv_vtinherit_howto;
+ if (strcasecmp (elf32_frv_vtentry_howto.name, r_name) == 0)
+ return &elf32_frv_vtentry_howto;
+
+ return NULL;
+}
+
/* Set the howto pointer for an FRV ELF reloc. */
static void
@@ -2728,9 +2743,6 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
int silence_segment_error = !(info->shared || info->pie);
unsigned long insn;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
relend = relocs + input_section->reloc_count;
@@ -2782,7 +2794,6 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
|| r_type == R_FRV_GNU_VTENTRY)
continue;
- /* This is a final link. */
r_symndx = ELF32_R_SYM (rel->r_info);
howto = elf32_frv_howto_table + ELF32_R_TYPE (rel->r_info);
h = NULL;
@@ -2801,50 +2812,38 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
}
else
{
- h = sym_hashes [r_symndx - symtab_hdr->sh_info];
+ bfd_boolean warned;
+ bfd_boolean unresolved_reloc;
- while (h->root.type == bfd_link_hash_indirect
- || h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
+ r_symndx, symtab_hdr, sym_hashes,
+ h, sec, relocation,
+ unresolved_reloc, warned);
+ osec = sec;
+ }
- name = h->root.root.string;
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
- if ((h->root.type == bfd_link_hash_defined
- || h->root.type == bfd_link_hash_defweak))
- {
- if (/* TLSMOFF forces local binding. */
- r_type != R_FRV_TLSMOFF
- && ! FRVFDPIC_SYM_LOCAL (info, h))
- {
- sec = NULL;
- relocation = 0;
- }
- else
- {
- sec = h->root.u.def.section;
- relocation = (h->root.u.def.value
- + sec->output_section->vma
- + sec->output_offset);
- }
- }
- else if (h->root.type == bfd_link_hash_undefweak)
- {
- relocation = 0;
- }
- else if (info->unresolved_syms_in_objects == RM_IGNORE
- && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
- relocation = 0;
- else
- {
- if (! ((*info->callbacks->undefined_symbol)
- (info, h->root.root.string, input_bfd,
- input_section, rel->r_offset,
- (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
- || ELF_ST_VISIBILITY (h->other)))))
- return FALSE;
- relocation = 0;
- }
- osec = sec;
+ if (info->relocatable)
+ continue;
+
+ if (r_type != R_FRV_TLSMOFF
+ && h != NULL
+ && (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ && !FRVFDPIC_SYM_LOCAL (info, h))
+ {
+ osec = sec = NULL;
+ relocation = 0;
}
switch (r_type)
@@ -3645,6 +3644,8 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
input_section->output_section)
& (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
{
+ bfd_vma offset;
+
if (_frvfdpic_osec_readonly_p (output_bfd,
input_section
->output_section))
@@ -3655,22 +3656,27 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
name, input_bfd, input_section, rel->r_offset);
return FALSE;
}
- _frvfdpic_add_rofixup (output_bfd,
- frvfdpic_gotfixup_section
- (info),
- _bfd_elf_section_offset
- (output_bfd, info,
- input_section, rel->r_offset)
- + input_section
- ->output_section->vma
- + input_section->output_offset,
- picrel);
+
+ offset = _bfd_elf_section_offset
+ (output_bfd, info,
+ input_section, rel->r_offset);
+
+ if (offset != (bfd_vma)-1)
+ _frvfdpic_add_rofixup (output_bfd,
+ frvfdpic_gotfixup_section
+ (info),
+ offset + input_section
+ ->output_section->vma
+ + input_section->output_offset,
+ picrel);
}
}
else if ((bfd_get_section_flags (output_bfd,
input_section->output_section)
& (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
{
+ bfd_vma offset;
+
if (_frvfdpic_osec_readonly_p (output_bfd,
input_section
->output_section))
@@ -3681,15 +3687,18 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
name, input_bfd, input_section, rel->r_offset);
return FALSE;
}
- _frvfdpic_add_dyn_reloc (output_bfd,
- frvfdpic_gotrel_section (info),
- _bfd_elf_section_offset
- (output_bfd, info,
- input_section, rel->r_offset)
- + input_section
- ->output_section->vma
- + input_section->output_offset,
- r_type, dynindx, addend, picrel);
+
+ offset = _bfd_elf_section_offset
+ (output_bfd, info,
+ input_section, rel->r_offset);
+
+ if (offset != (bfd_vma)-1)
+ _frvfdpic_add_dyn_reloc (output_bfd,
+ frvfdpic_gotrel_section (info),
+ offset + input_section
+ ->output_section->vma
+ + input_section->output_offset,
+ r_type, dynindx, addend, picrel);
}
else
addend += frvfdpic_got_section (info)->output_section->vma;
@@ -3770,25 +3779,27 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
}
if (!h || h->root.type != bfd_link_hash_undefweak)
{
- _frvfdpic_add_rofixup (output_bfd,
- frvfdpic_gotfixup_section
- (info),
- _bfd_elf_section_offset
- (output_bfd, info,
- input_section, rel->r_offset)
- + input_section
- ->output_section->vma
- + input_section->output_offset,
- picrel);
- if (r_type == R_FRV_FUNCDESC_VALUE)
- _frvfdpic_add_rofixup
- (output_bfd,
- frvfdpic_gotfixup_section (info),
- _bfd_elf_section_offset
- (output_bfd, info,
- input_section, rel->r_offset)
- + input_section->output_section->vma
- + input_section->output_offset + 4, picrel);
+ bfd_vma offset = _bfd_elf_section_offset
+ (output_bfd, info,
+ input_section, rel->r_offset);
+
+ if (offset != (bfd_vma)-1)
+ {
+ _frvfdpic_add_rofixup (output_bfd,
+ frvfdpic_gotfixup_section
+ (info),
+ offset + input_section
+ ->output_section->vma
+ + input_section->output_offset,
+ picrel);
+ if (r_type == R_FRV_FUNCDESC_VALUE)
+ _frvfdpic_add_rofixup
+ (output_bfd,
+ frvfdpic_gotfixup_section (info),
+ offset
+ + input_section->output_section->vma
+ + input_section->output_offset + 4, picrel);
+ }
}
}
}
@@ -3798,6 +3809,8 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
input_section->output_section)
& (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
{
+ bfd_vma offset;
+
if (_frvfdpic_osec_readonly_p (output_bfd,
input_section
->output_section))
@@ -3808,15 +3821,18 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
name, input_bfd, input_section, rel->r_offset);
return FALSE;
}
- _frvfdpic_add_dyn_reloc (output_bfd,
- frvfdpic_gotrel_section (info),
- _bfd_elf_section_offset
- (output_bfd, info,
- input_section, rel->r_offset)
- + input_section
- ->output_section->vma
- + input_section->output_offset,
- r_type, dynindx, addend, picrel);
+
+ offset = _bfd_elf_section_offset
+ (output_bfd, info,
+ input_section, rel->r_offset);
+
+ if (offset != (bfd_vma)-1)
+ _frvfdpic_add_dyn_reloc (output_bfd,
+ frvfdpic_gotrel_section (info),
+ offset + input_section
+ ->output_section->vma
+ + input_section->output_offset,
+ r_type, dynindx, addend, picrel);
}
else if (osec)
addend += osec->output_section->vma;
@@ -4145,54 +4161,22 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
relocation. */
static asection *
-elf32_frv_gc_mark_hook (sec, info, rel, h, sym)
- asection *sec;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
- Elf_Internal_Rela *rel;
- struct elf_link_hash_entry *h;
- Elf_Internal_Sym *sym;
+elf32_frv_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_FRV_GNU_VTINHERIT:
- case R_FRV_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- default:
- break;
-
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
-}
-
-/* Update the got entry reference counts for the section being removed. */
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_FRV_GNU_VTINHERIT:
+ case R_FRV_GNU_VTENTRY:
+ return NULL;
+ }
-static bfd_boolean
-elf32_frv_gc_sweep_hook (abfd, info, sec, relocs)
- bfd *abfd ATTRIBUTE_UNUSED;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
- asection *sec ATTRIBUTE_UNUSED;
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED;
-{
- return TRUE;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
-
/* Hook called by the linker routine which adds symbols from an object
file. We use it to put .comm items in .scomm, and not .comm. */
@@ -5603,7 +5587,6 @@ elf32_frvfdpic_always_size_sections (bfd *output_bfd,
if (!info->relocatable)
{
struct elf_link_hash_entry *h;
- asection *sec;
/* Force a PT_GNU_STACK segment to be created. */
if (! elf_tdata (output_bfd)->stack_flags)
@@ -5630,12 +5613,121 @@ elf32_frvfdpic_always_size_sections (bfd *output_bfd,
h->type = STT_OBJECT;
/* This one must NOT be hidden. */
}
+ }
+
+ return TRUE;
+}
+
+/* Check whether any of the relocations was optimized away, and
+ subtract it from the relocation or fixup count. */
+static bfd_boolean
+_frvfdpic_check_discarded_relocs (bfd *abfd, asection *sec,
+ struct bfd_link_info *info,
+
+ bfd_boolean *changed)
+{
+ Elf_Internal_Shdr *symtab_hdr;
+ struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
+ Elf_Internal_Rela *rel, *erel;
+
+ if ((sec->flags & SEC_RELOC) == 0
+ || sec->reloc_count == 0)
+ return TRUE;
+
+ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (abfd);
+ sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof(Elf32_External_Sym);
+ if (!elf_bad_symtab (abfd))
+ sym_hashes_end -= symtab_hdr->sh_info;
+
+ rel = elf_section_data (sec)->relocs;
+
+ /* Now examine each relocation. */
+ for (erel = rel + sec->reloc_count; rel < erel; rel++)
+ {
+ struct elf_link_hash_entry *h;
+ unsigned long r_symndx;
+ struct frvfdpic_relocs_info *picrel;
+ struct _frvfdpic_dynamic_got_info *dinfo;
+
+ if (ELF32_R_TYPE (rel->r_info) != R_FRV_32
+ && ELF32_R_TYPE (rel->r_info) != R_FRV_FUNCDESC)
+ continue;
+
+ if (_bfd_elf_section_offset (sec->output_section->owner,
+ info, sec, rel->r_offset)
+ != (bfd_vma)-1)
+ continue;
+
+ r_symndx = ELF32_R_SYM (rel->r_info);
+ if (r_symndx < symtab_hdr->sh_info)
+ h = NULL;
+ else
+ {
+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *)h->root.u.i.link;
+ }
- /* Create a stack section, and set its alignment. */
- sec = bfd_make_section (output_bfd, ".stack");
+ if (h != NULL)
+ picrel = frvfdpic_relocs_info_for_global (frvfdpic_relocs_info (info),
+ abfd, h,
+ rel->r_addend, NO_INSERT);
+ else
+ picrel = frvfdpic_relocs_info_for_local (frvfdpic_relocs_info (info),
+ abfd, r_symndx,
+ rel->r_addend, NO_INSERT);
- if (sec == NULL
- || ! bfd_set_section_alignment (output_bfd, sec, 3))
+ if (! picrel)
+ return FALSE;
+
+ *changed = TRUE;
+ dinfo = frvfdpic_dynamic_got_plt_info (info);
+
+ _frvfdpic_count_relocs_fixups (picrel, dinfo, TRUE);
+ if (ELF32_R_TYPE (rel->r_info) == R_FRV_32)
+ picrel->relocs32--;
+ else /* we know (ELF32_R_TYPE (rel->r_info) == R_FRV_FUNCDESC) */
+ picrel->relocsfd--;
+ _frvfdpic_count_relocs_fixups (picrel, dinfo, FALSE);
+ }
+
+ return TRUE;
+}
+
+static bfd_boolean
+frvfdpic_elf_discard_info (bfd *ibfd,
+ struct elf_reloc_cookie *cookie ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info)
+{
+ bfd_boolean changed = FALSE;
+ asection *s;
+ bfd *obfd = NULL;
+
+ /* Account for relaxation of .eh_frame section. */
+ for (s = ibfd->sections; s; s = s->next)
+ if (s->sec_info_type == ELF_INFO_TYPE_EH_FRAME)
+ {
+ if (!_frvfdpic_check_discarded_relocs (ibfd, s, info, &changed))
+ return FALSE;
+ obfd = s->output_section->owner;
+ }
+
+ if (changed)
+ {
+ struct _frvfdpic_dynamic_got_plt_info gpinfo;
+
+ memset (&gpinfo, 0, sizeof (gpinfo));
+ memcpy (&gpinfo.g, frvfdpic_dynamic_got_plt_info (info),
+ sizeof (gpinfo.g));
+
+ /* Clear GOT and PLT assignments. */
+ htab_traverse (frvfdpic_relocs_info (info),
+ _frvfdpic_reset_got_plt_entries,
+ NULL);
+
+ if (!_frvfdpic_size_got_plt (obfd, &gpinfo))
return FALSE;
}
@@ -5718,48 +5810,45 @@ elf32_frvfdpic_relax_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec,
}
static bfd_boolean
-elf32_frvfdpic_modify_segment_map (bfd *output_bfd,
- struct bfd_link_info *info)
+elf32_frvfdpic_modify_program_headers (bfd *output_bfd,
+ struct bfd_link_info *info)
{
+ struct elf_obj_tdata *tdata = elf_tdata (output_bfd);
struct elf_segment_map *m;
+ Elf_Internal_Phdr *p;
/* objcopy and strip preserve what's already there using
elf32_frvfdpic_copy_private_bfd_data (). */
if (! info)
return TRUE;
- for (m = elf_tdata (output_bfd)->segment_map; m != NULL; m = m->next)
+ for (p = tdata->phdr, m = tdata->segment_map; m != NULL; m = m->next, p++)
if (m->p_type == PT_GNU_STACK)
break;
if (m)
{
- asection *sec = bfd_get_section_by_name (output_bfd, ".stack");
struct elf_link_hash_entry *h;
- if (sec)
+ /* Obtain the pointer to the __stacksize symbol. */
+ h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize",
+ FALSE, FALSE, FALSE);
+ if (h)
{
- /* Obtain the pointer to the __stacksize symbol. */
- h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize",
- FALSE, FALSE, FALSE);
while (h->root.type == bfd_link_hash_indirect
|| h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *)h->root.u.i.link;
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
BFD_ASSERT (h->root.type == bfd_link_hash_defined);
+ }
- /* Set the section size from the symbol value. We
- intentionally ignore the symbol section. */
- if (h->root.type == bfd_link_hash_defined)
- sec->size = h->root.u.def.value;
- else
- sec->size = DEFAULT_STACK_SIZE;
+ /* Set the header p_memsz from the symbol value. We
+ intentionally ignore the symbol section. */
+ if (h && h->root.type == bfd_link_hash_defined)
+ p->p_memsz = h->root.u.def.value;
+ else
+ p->p_memsz = DEFAULT_STACK_SIZE;
- /* Add the stack section to the PT_GNU_STACK segment,
- such that its size and alignment requirements make it
- to the segment. */
- m->sections[m->count] = sec;
- m->count++;
- }
+ p->p_align = 8;
}
return TRUE;
@@ -6401,6 +6490,10 @@ frv_elf_copy_private_bfd_data (ibfd, obfd)
elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
elf_flags_init (obfd) = TRUE;
+
+ /* Copy object attributes. */
+ _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
return TRUE;
}
@@ -6922,7 +7015,6 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
#define elf_info_to_howto frv_info_to_howto_rela
#define elf_backend_relocate_section elf32_frv_relocate_section
#define elf_backend_gc_mark_hook elf32_frv_gc_mark_hook
-#define elf_backend_gc_sweep_hook elf32_frv_gc_sweep_hook
#define elf_backend_check_relocs elf32_frv_check_relocs
#define elf_backend_object_p elf32_frv_object_p
#define elf_backend_add_symbol_hook elf32_frv_add_symbol_hook
@@ -6931,6 +7023,7 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
#define elf_backend_rela_normal 1
#define bfd_elf32_bfd_reloc_type_lookup frv_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup frv_reloc_name_lookup
#define bfd_elf32_bfd_set_private_flags frv_elf_set_private_flags
#define bfd_elf32_bfd_copy_private_bfd_data frv_elf_copy_private_bfd_data
#define bfd_elf32_bfd_merge_private_bfd_data frv_elf_merge_private_bfd_data
@@ -6970,9 +7063,9 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
#undef elf_backend_always_size_sections
#define elf_backend_always_size_sections \
elf32_frvfdpic_always_size_sections
-#undef elf_backend_modify_segment_map
-#define elf_backend_modify_segment_map \
- elf32_frvfdpic_modify_segment_map
+#undef elf_backend_modify_program_headers
+#define elf_backend_modify_program_headers \
+ elf32_frvfdpic_modify_program_headers
#undef bfd_elf32_bfd_copy_private_bfd_data
#define bfd_elf32_bfd_copy_private_bfd_data \
elf32_frvfdpic_copy_private_bfd_data
@@ -6996,6 +7089,9 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
#define elf_backend_finish_dynamic_sections \
elf32_frvfdpic_finish_dynamic_sections
+#undef elf_backend_discard_info
+#define elf_backend_discard_info \
+ frvfdpic_elf_discard_info
#undef elf_backend_can_make_relative_eh_frame
#define elf_backend_can_make_relative_eh_frame \
frvfdpic_elf_use_relative_eh_frame
diff --git a/bfd/elf32-gen.c b/bfd/elf32-gen.c
index 23c74767799e..ef7d4e2308d7 100644
--- a/bfd/elf32-gen.c
+++ b/bfd/elf32-gen.c
@@ -1,5 +1,5 @@
/* Generic support for 32-bit ELF
- Copyright 1993, 1995, 1998, 1999, 2001, 2002, 2004, 2005
+ Copyright 1993, 1995, 1998, 1999, 2001, 2002, 2004, 2005, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -94,6 +94,7 @@ elf32_generic_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
#define ELF_MACHINE_CODE EM_NONE
#define ELF_MAXPAGESIZE 0x1
#define bfd_elf32_bfd_reloc_type_lookup bfd_default_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
#define bfd_elf32_bfd_link_add_symbols elf32_generic_link_add_symbols
#define elf_info_to_howto elf_generic_info_to_howto
#define elf_info_to_howto_rel elf_generic_info_to_howto_rel
diff --git a/bfd/elf32-h8300.c b/bfd/elf32-h8300.c
index 4cdf2defb588..17e8e30f68df 100644
--- a/bfd/elf32-h8300.c
+++ b/bfd/elf32-h8300.c
@@ -1,6 +1,6 @@
/* BFD back-end for Renesas H8/300 ELF binaries.
- Copyright 1993, 1995, 1998, 1999, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
+ Copyright 1993, 1995, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/h8.h"
@@ -42,11 +42,6 @@ static bfd_boolean elf32_h8_symbol_address_p (bfd *, asection *, bfd_vma);
static bfd_byte *elf32_h8_get_relocated_section_contents
(bfd *, struct bfd_link_info *, struct bfd_link_order *,
bfd_byte *, bfd_boolean, asymbol **);
-static asection *elf32_h8_gc_mark_hook
- (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
- struct elf_link_hash_entry *, Elf_Internal_Sym *);
-static bfd_boolean elf32_h8_gc_sweep_hook
- (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
static bfd_reloc_status_type elf32_h8_final_link_relocate
(unsigned long, bfd *, bfd *, asection *,
bfd_byte *, bfd_vma, bfd_vma, bfd_vma,
@@ -256,6 +251,22 @@ elf32_h8_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+elf32_h8_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (h8_elf_howto_table) / sizeof (h8_elf_howto_table[0]);
+ i++)
+ if (h8_elf_howto_table[i].name != NULL
+ && strcasecmp (h8_elf_howto_table[i].name, r_name) == 0)
+ return &h8_elf_howto_table[i];
+
+ return NULL;
+}
+
static void
elf32_h8_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *bfd_reloc,
Elf_Internal_Rela *elf_reloc)
@@ -407,9 +418,6 @@ elf32_h8_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
struct elf_link_hash_entry **sym_hashes;
Elf_Internal_Rela *rel, *relend;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -424,8 +432,12 @@ elf32_h8_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
struct elf_link_hash_entry *h;
bfd_vma relocation;
bfd_reloc_status_type r;
+ arelent bfd_reloc;
+ reloc_howto_type *howto;
+
+ elf32_h8_info_to_howto (input_bfd, &bfd_reloc, rel);
+ howto = bfd_reloc.howto;
- /* This is a final link. */
r_symndx = ELF32_R_SYM (rel->r_info);
r_type = ELF32_R_TYPE (rel->r_info);
h = NULL;
@@ -447,6 +459,20 @@ elf32_h8_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
r = elf32_h8_final_link_relocate (r_type, input_bfd, output_bfd,
input_section,
contents, rel->r_offset,
@@ -457,11 +483,6 @@ elf32_h8_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
{
const char *name;
const char *msg = (const char *) 0;
- arelent bfd_reloc;
- reloc_howto_type *howto;
-
- elf32_h8_info_to_howto (input_bfd, &bfd_reloc, rel);
- howto = bfd_reloc.howto;
if (h != NULL)
name = h->root.root.string;
@@ -1490,42 +1511,6 @@ elf32_h8_get_relocated_section_contents (bfd *output_bfd,
return NULL;
}
-static asection *
-elf32_h8_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
- struct elf_link_hash_entry *h,
- Elf_Internal_Sym *sym)
-{
- if (h != NULL)
- {
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
- return NULL;
-}
-
-static bfd_boolean
-elf32_h8_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- asection *sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
-{
- return TRUE;
-}
-
#define TARGET_BIG_SYM bfd_elf32_h8300_vec
#define TARGET_BIG_NAME "elf32-h8300"
@@ -1533,6 +1518,7 @@ elf32_h8_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
#define ELF_MACHINE_CODE EM_H8_300
#define ELF_MAXPAGESIZE 0x1
#define bfd_elf32_bfd_reloc_type_lookup elf32_h8_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup elf32_h8_reloc_name_lookup
#define elf_info_to_howto elf32_h8_info_to_howto
#define elf_info_to_howto_rel elf32_h8_info_to_howto_rel
@@ -1544,8 +1530,6 @@ elf32_h8_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
elf32_h8_object_p
#define bfd_elf32_bfd_merge_private_bfd_data \
elf32_h8_merge_private_bfd_data
-#define elf_backend_gc_mark_hook elf32_h8_gc_mark_hook
-#define elf_backend_gc_sweep_hook elf32_h8_gc_sweep_hook
/* ??? when elf_backend_relocate_section is not defined, elf32-target.h
defaults to using _bfd_generic_link_hash_table_create, but
diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c
index 51c210e5b1c3..49529210c53d 100644
--- a/bfd/elf32-hppa.c
+++ b/bfd/elf32-hppa.c
@@ -1,13 +1,15 @@
/* BFD back-end for HP PA-RISC ELF files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Original code by
Center for Software Science
Department of Computer Science
University of Utah
Largely rewritten by Alan Modra <alan@linuxcare.com.au>
-
+ Naming cleanup by Carlos O'Donell <carlos@systemhalted.org>
+ TLS support written by Randolph Chung <tausq@debian.org>
+
This file is part of BFD, the Binary File Descriptor library.
This program is free software; you can redistribute it and/or modify
@@ -24,8 +26,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/hppa.h"
@@ -168,7 +170,8 @@ static const bfd_byte plt_stub[] =
shared lib. */
#define ELIMINATE_COPY_RELOCS 1
-enum elf32_hppa_stub_type {
+enum elf32_hppa_stub_type
+{
hppa_stub_long_branch,
hppa_stub_long_branch_shared,
hppa_stub_import,
@@ -177,8 +180,8 @@ enum elf32_hppa_stub_type {
hppa_stub_none
};
-struct elf32_hppa_stub_hash_entry {
-
+struct elf32_hppa_stub_hash_entry
+{
/* Base hash table entry structure. */
struct bfd_hash_entry bh_root;
@@ -203,8 +206,8 @@ struct elf32_hppa_stub_hash_entry {
asection *id_sec;
};
-struct elf32_hppa_link_hash_entry {
-
+struct elf32_hppa_link_hash_entry
+{
struct elf_link_hash_entry eh;
/* A pointer to the most recently used stub hash entry against this
@@ -213,8 +216,8 @@ struct elf32_hppa_link_hash_entry {
/* Used to count relocations for delayed sizing of relocation
sections. */
- struct elf32_hppa_dyn_reloc_entry {
-
+ struct elf32_hppa_dyn_reloc_entry
+ {
/* Next relocation in the chain. */
struct elf32_hppa_dyn_reloc_entry *hdh_next;
@@ -230,12 +233,17 @@ struct elf32_hppa_link_hash_entry {
#endif
} *dyn_relocs;
+ enum
+ {
+ GOT_UNKNOWN = 0, GOT_NORMAL = 1, GOT_TLS_GD = 2, GOT_TLS_LDM = 4, GOT_TLS_IE = 8
+ } tls_type;
+
/* Set if this symbol is used by a plabel reloc. */
unsigned int plabel:1;
};
-struct elf32_hppa_link_hash_table {
-
+struct elf32_hppa_link_hash_table
+{
/* The main hash table. */
struct elf_link_hash_table etab;
@@ -251,7 +259,8 @@ struct elf32_hppa_link_hash_table {
/* Array to keep track of which stub sections have been created, and
information on stub grouping. */
- struct map_stub {
+ struct map_stub
+ {
/* This is the section to which stubs in the group will be
attached. */
asection *link_sec;
@@ -292,6 +301,13 @@ struct elf32_hppa_link_hash_table {
/* Small local sym to section mapping cache. */
struct sym_sec_cache sym_sec;
+
+ /* Data for LDM relocations. */
+ union
+ {
+ bfd_signed_vma refcount;
+ bfd_vma offset;
+ } tls_ldm_got;
};
/* Various hash macros and functions. */
@@ -308,6 +324,15 @@ struct elf32_hppa_link_hash_table {
((struct elf32_hppa_stub_hash_entry *) \
bfd_hash_lookup ((table), (string), (create), (copy)))
+#define hppa_elf_local_got_tls_type(abfd) \
+ ((char *)(elf_local_got_offsets (abfd) + (elf_tdata (abfd)->symtab_hdr.sh_info * 2)))
+
+#define hh_name(hh) \
+ (hh ? hh->eh.root.root.string : "<undef>")
+
+#define eh_name(eh) \
+ (eh ? eh->root.root.string : "<undef>")
+
/* Assorted hash table functions. */
/* Initialize an entry in the stub hash table. */
@@ -375,6 +400,7 @@ hppa_link_hash_newfunc (struct bfd_hash_entry *entry,
hh->hsh_cache = NULL;
hh->dyn_relocs = NULL;
hh->plabel = 0;
+ hh->tls_type = GOT_UNKNOWN;
}
return entry;
@@ -390,7 +416,7 @@ elf32_hppa_link_hash_table_create (bfd *abfd)
struct elf32_hppa_link_hash_table *htab;
bfd_size_type amt = sizeof (*htab);
- htab = (struct elf32_hppa_link_hash_table *) bfd_malloc (amt);
+ htab = bfd_malloc (amt);
if (htab == NULL)
return NULL;
@@ -424,6 +450,7 @@ elf32_hppa_link_hash_table_create (bfd *abfd)
htab->has_22bit_branch = 0;
htab->need_plt_stub = 0;
htab->sym_sec.abfd = NULL;
+ htab->tls_ldm_got.refcount = 0;
return &htab->etab.root;
}
@@ -453,28 +480,24 @@ hppa_stub_name (const asection *input_section,
if (hh)
{
- len = 8 + 1 + strlen (hh->eh.root.root.string) + 1 + 8 + 1;
+ len = 8 + 1 + strlen (hh_name (hh)) + 1 + 8 + 1;
stub_name = bfd_malloc (len);
if (stub_name != NULL)
- {
- sprintf (stub_name, "%08x_%s+%x",
- input_section->id & 0xffffffff,
- hh->eh.root.root.string,
- (int) rela->r_addend & 0xffffffff);
- }
+ sprintf (stub_name, "%08x_%s+%x",
+ input_section->id & 0xffffffff,
+ hh_name (hh),
+ (int) rela->r_addend & 0xffffffff);
}
else
{
len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
stub_name = bfd_malloc (len);
if (stub_name != NULL)
- {
- sprintf (stub_name, "%08x_%x:%x+%x",
- input_section->id & 0xffffffff,
- sym_sec->id & 0xffffffff,
- (int) ELF32_R_SYM (rela->r_info) & 0xffffffff,
- (int) rela->r_addend & 0xffffffff);
- }
+ sprintf (stub_name, "%08x_%x:%x+%x",
+ input_section->id & 0xffffffff,
+ sym_sec->id & 0xffffffff,
+ (int) ELF32_R_SYM (rela->r_info) & 0xffffffff,
+ (int) rela->r_addend & 0xffffffff);
}
return stub_name;
}
@@ -620,17 +643,13 @@ hppa_type_of_stub (asection *input_sec,
bytes on from the branch instruction location. The offset is
signed and counts in units of 4 bytes. */
if (r_type == (unsigned int) R_PARISC_PCREL17F)
- {
- max_branch_offset = (1 << (17-1)) << 2;
- }
+ max_branch_offset = (1 << (17 - 1)) << 2;
+
else if (r_type == (unsigned int) R_PARISC_PCREL12F)
- {
- max_branch_offset = (1 << (12-1)) << 2;
- }
+ max_branch_offset = (1 << (12 - 1)) << 2;
+
else /* R_PARISC_PCREL22F. */
- {
- max_branch_offset = (1 << (22-1)) << 2;
- }
+ max_branch_offset = (1 << (22 - 1)) << 2;
if (branch_offset + max_branch_offset >= 2*max_branch_offset)
return hppa_stub_long_branch;
@@ -1063,7 +1082,24 @@ elf32_hppa_copy_indirect_symbol (struct bfd_link_info *info,
eh_dir->needs_plt |= eh_ind->needs_plt;
}
else
- _bfd_elf_link_hash_copy_indirect (info, eh_dir, eh_ind);
+ {
+ if (eh_ind->root.type == bfd_link_hash_indirect
+ && eh_dir->got.refcount <= 0)
+ {
+ hh_dir->tls_type = hh_ind->tls_type;
+ hh_ind->tls_type = GOT_UNKNOWN;
+ }
+
+ _bfd_elf_link_hash_copy_indirect (info, eh_dir, eh_ind);
+ }
+}
+
+static int
+elf32_hppa_optimized_tls_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ int r_type, int is_local ATTRIBUTE_UNUSED)
+{
+ /* For now we don't support linker optimizations. */
+ return r_type;
}
/* Look through the relocs for a section during the first phase, and
@@ -1084,6 +1120,7 @@ elf32_hppa_check_relocs (bfd *abfd,
struct elf32_hppa_link_hash_table *htab;
asection *sreloc;
asection *stubreloc;
+ int tls_type = GOT_UNKNOWN, old_tls_type = GOT_UNKNOWN;
if (info->relocatable)
return TRUE;
@@ -1121,6 +1158,7 @@ elf32_hppa_check_relocs (bfd *abfd,
}
r_type = ELF32_R_TYPE (rela->r_info);
+ r_type = elf32_hppa_optimized_tls_reloc (info, r_type, hh == NULL);
switch (r_type)
{
@@ -1243,6 +1281,20 @@ elf32_hppa_check_relocs (bfd *abfd,
return FALSE;
continue;
+ case R_PARISC_TLS_GD21L:
+ case R_PARISC_TLS_GD14R:
+ case R_PARISC_TLS_LDM21L:
+ case R_PARISC_TLS_LDM14R:
+ need_entry = NEED_GOT;
+ break;
+
+ case R_PARISC_TLS_IE21L:
+ case R_PARISC_TLS_IE14R:
+ if (info->shared)
+ info->flags |= DF_STATIC_TLS;
+ need_entry = NEED_GOT;
+ break;
+
default:
continue;
}
@@ -1250,6 +1302,25 @@ elf32_hppa_check_relocs (bfd *abfd,
/* Now carry out our orders. */
if (need_entry & NEED_GOT)
{
+ switch (r_type)
+ {
+ default:
+ tls_type = GOT_NORMAL;
+ break;
+ case R_PARISC_TLS_GD21L:
+ case R_PARISC_TLS_GD14R:
+ tls_type |= GOT_TLS_GD;
+ break;
+ case R_PARISC_TLS_LDM21L:
+ case R_PARISC_TLS_LDM14R:
+ tls_type |= GOT_TLS_LDM;
+ break;
+ case R_PARISC_TLS_IE21L:
+ case R_PARISC_TLS_IE14R:
+ tls_type |= GOT_TLS_IE;
+ break;
+ }
+
/* Allocate space for a GOT entry, as well as a dynamic
relocation for this entry. */
if (htab->sgot == NULL)
@@ -1260,31 +1331,56 @@ elf32_hppa_check_relocs (bfd *abfd,
return FALSE;
}
- if (hh != NULL)
- {
- hh->eh.got.refcount += 1;
- }
+ if (r_type == R_PARISC_TLS_LDM21L
+ || r_type == R_PARISC_TLS_LDM14R)
+ hppa_link_hash_table (info)->tls_ldm_got.refcount += 1;
else
{
- bfd_signed_vma *local_got_refcounts;
- /* This is a global offset table entry for a local symbol. */
- local_got_refcounts = elf_local_got_refcounts (abfd);
- if (local_got_refcounts == NULL)
- {
- bfd_size_type size;
-
- /* Allocate space for local got offsets and local
- plt offsets. Done this way to save polluting
- elf_obj_tdata with another target specific
- pointer. */
- size = symtab_hdr->sh_info;
- size *= 2 * sizeof (bfd_signed_vma);
- local_got_refcounts = bfd_zalloc (abfd, size);
- if (local_got_refcounts == NULL)
- return FALSE;
- elf_local_got_refcounts (abfd) = local_got_refcounts;
- }
- local_got_refcounts[r_symndx] += 1;
+ if (hh != NULL)
+ {
+ hh->eh.got.refcount += 1;
+ old_tls_type = hh->tls_type;
+ }
+ else
+ {
+ bfd_signed_vma *local_got_refcounts;
+
+ /* This is a global offset table entry for a local symbol. */
+ local_got_refcounts = elf_local_got_refcounts (abfd);
+ if (local_got_refcounts == NULL)
+ {
+ bfd_size_type size;
+
+ /* Allocate space for local got offsets and local
+ plt offsets. Done this way to save polluting
+ elf_obj_tdata with another target specific
+ pointer. */
+ size = symtab_hdr->sh_info;
+ size *= 2 * sizeof (bfd_signed_vma);
+ /* Add in space to store the local GOT TLS types. */
+ size += symtab_hdr->sh_info;
+ local_got_refcounts = bfd_zalloc (abfd, size);
+ if (local_got_refcounts == NULL)
+ return FALSE;
+ elf_local_got_refcounts (abfd) = local_got_refcounts;
+ memset (hppa_elf_local_got_tls_type (abfd),
+ GOT_UNKNOWN, symtab_hdr->sh_info);
+ }
+ local_got_refcounts[r_symndx] += 1;
+
+ old_tls_type = hppa_elf_local_got_tls_type (abfd) [r_symndx];
+ }
+
+ tls_type |= old_tls_type;
+
+ if (old_tls_type != tls_type)
+ {
+ if (hh != NULL)
+ hh->tls_type = tls_type;
+ else
+ hppa_elf_local_got_tls_type (abfd) [r_symndx] = tls_type;
+ }
+
}
}
@@ -1325,6 +1421,8 @@ elf32_hppa_check_relocs (bfd *abfd,
plt offsets. */
size = symtab_hdr->sh_info;
size *= 2 * sizeof (bfd_signed_vma);
+ /* Add in space to store the local GOT TLS types. */
+ size += symtab_hdr->sh_info;
local_got_refcounts = bfd_zalloc (abfd, size);
if (local_got_refcounts == NULL)
return FALSE;
@@ -1490,38 +1588,20 @@ elf32_hppa_check_relocs (bfd *abfd,
static asection *
elf32_hppa_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
Elf_Internal_Rela *rela,
struct elf_link_hash_entry *hh,
Elf_Internal_Sym *sym)
{
if (hh != NULL)
- {
- switch ((unsigned int) ELF32_R_TYPE (rela->r_info))
- {
- case R_PARISC_GNU_VTINHERIT:
- case R_PARISC_GNU_VTENTRY:
- break;
-
- default:
- switch (hh->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return hh->root.u.def.section;
-
- case bfd_link_hash_common:
- return hh->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ switch ((unsigned int) ELF32_R_TYPE (rela->r_info))
+ {
+ case R_PARISC_GNU_VTINHERIT:
+ case R_PARISC_GNU_VTENTRY:
+ return NULL;
+ }
- return NULL;
+ return _bfd_elf_gc_mark_hook (sec, info, rela, hh, sym);
}
/* Update the got and plt entry reference counts for the section being
@@ -1578,11 +1658,17 @@ elf32_hppa_gc_sweep_hook (bfd *abfd,
}
r_type = ELF32_R_TYPE (rela->r_info);
+ r_type = elf32_hppa_optimized_tls_reloc (info, r_type, eh != NULL);
+
switch (r_type)
{
case R_PARISC_DLTIND14F:
case R_PARISC_DLTIND14R:
case R_PARISC_DLTIND21L:
+ case R_PARISC_TLS_GD21L:
+ case R_PARISC_TLS_GD14R:
+ case R_PARISC_TLS_IE21L:
+ case R_PARISC_TLS_IE14R:
if (eh != NULL)
{
if (eh->got.refcount > 0)
@@ -1595,6 +1681,11 @@ elf32_hppa_gc_sweep_hook (bfd *abfd,
}
break;
+ case R_PARISC_TLS_LDM21L:
+ case R_PARISC_TLS_LDM14R:
+ hppa_link_hash_table (info)->tls_ldm_got.refcount -= 1;
+ break;
+
case R_PARISC_PCREL12F:
case R_PARISC_PCREL17C:
case R_PARISC_PCREL17F:
@@ -1709,7 +1800,7 @@ elf32_hppa_hide_symbol (struct bfd_link_info *info,
}
}
- if (! hppa_elf_hash_entry(eh)->plabel)
+ if (! hppa_elf_hash_entry (eh)->plabel)
{
eh->needs_plt = 0;
eh->plt = elf_hash_table (info)->init_plt_refcount;
@@ -1728,7 +1819,6 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
{
struct elf32_hppa_link_hash_table *htab;
asection *sec;
- unsigned int power_of_two;
/* If this is a function, put it in the procedure linkage table. We
will fill in the contents of the procedure linkage table later. */
@@ -1838,30 +1928,9 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
eh->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how other ELF linkers handle this. */
-
- power_of_two = bfd_log2 (eh->size);
- if (power_of_two > 3)
- power_of_two = 3;
-
- /* Apply the required alignment. */
sec = htab->sdynbss;
- sec->size = BFD_ALIGN (sec->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (htab->etab.dynobj, sec))
- {
- if (! bfd_set_section_alignment (htab->etab.dynobj, sec, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- eh->root.u.def.section = sec;
- eh->root.u.def.value = sec->size;
-
- /* Increment the section size to make room for the symbol. */
- sec->size += eh->size;
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (eh, sec);
}
/* Allocate space in the .plt for entries that won't have relocations.
@@ -1882,7 +1951,7 @@ allocate_plt_static (struct elf_link_hash_entry *eh, void *inf)
eh = (struct elf_link_hash_entry *) eh->root.u.i.link;
info = (struct bfd_link_info *) inf;
- hh = hppa_elf_hash_entry(eh);
+ hh = hppa_elf_hash_entry (eh);
htab = hppa_link_hash_table (info);
if (htab->etab.dynamic_sections_created
&& eh->plt.refcount > 0)
@@ -1982,12 +2051,21 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf)
sec = htab->sgot;
eh->got.offset = sec->size;
sec->size += GOT_ENTRY_SIZE;
+ /* R_PARISC_TLS_GD* needs two GOT entries */
+ if ((hh->tls_type & (GOT_TLS_GD | GOT_TLS_IE)) == (GOT_TLS_GD | GOT_TLS_IE))
+ sec->size += GOT_ENTRY_SIZE * 2;
+ else if ((hh->tls_type & GOT_TLS_GD) == GOT_TLS_GD)
+ sec->size += GOT_ENTRY_SIZE;
if (htab->etab.dynamic_sections_created
&& (info->shared
|| (eh->dynindx != -1
&& !eh->forced_local)))
{
htab->srelgot->size += sizeof (Elf32_External_Rela);
+ if ((hh->tls_type & (GOT_TLS_GD | GOT_TLS_IE)) == (GOT_TLS_GD | GOT_TLS_IE))
+ htab->srelgot->size += 2 * sizeof (Elf32_External_Rela);
+ else if ((hh->tls_type & GOT_TLS_GD) == GOT_TLS_GD)
+ htab->srelgot->size += sizeof (Elf32_External_Rela);
}
}
else
@@ -2181,6 +2259,7 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
bfd_size_type locsymcount;
Elf_Internal_Shdr *symtab_hdr;
asection *srel;
+ char *local_tls_type;
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
continue;
@@ -2219,6 +2298,7 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
locsymcount = symtab_hdr->sh_info;
end_local_got = local_got + locsymcount;
+ local_tls_type = hppa_elf_local_got_tls_type (ibfd);
sec = htab->sgot;
srel = htab->srelgot;
for (; local_got < end_local_got; ++local_got)
@@ -2227,11 +2307,23 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
{
*local_got = sec->size;
sec->size += GOT_ENTRY_SIZE;
+ if ((*local_tls_type & (GOT_TLS_GD | GOT_TLS_IE)) == (GOT_TLS_GD | GOT_TLS_IE))
+ sec->size += 2 * GOT_ENTRY_SIZE;
+ else if ((*local_tls_type & GOT_TLS_GD) == GOT_TLS_GD)
+ sec->size += GOT_ENTRY_SIZE;
if (info->shared)
- srel->size += sizeof (Elf32_External_Rela);
+ {
+ srel->size += sizeof (Elf32_External_Rela);
+ if ((*local_tls_type & (GOT_TLS_GD | GOT_TLS_IE)) == (GOT_TLS_GD | GOT_TLS_IE))
+ srel->size += 2 * sizeof (Elf32_External_Rela);
+ else if ((*local_tls_type & GOT_TLS_GD) == GOT_TLS_GD)
+ srel->size += sizeof (Elf32_External_Rela);
+ }
}
else
*local_got = (bfd_vma) -1;
+
+ ++local_tls_type;
}
local_plt = end_local_got;
@@ -2260,6 +2352,17 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
}
}
}
+
+ if (htab->tls_ldm_got.refcount > 0)
+ {
+ /* Allocate 2 got entries and 1 dynamic reloc for
+ R_PARISC_TLS_DTPMOD32 relocs. */
+ htab->tls_ldm_got.offset = htab->sgot->size;
+ htab->sgot->size += (GOT_ENTRY_SIZE * 2);
+ htab->srelgot->size += sizeof (Elf32_External_Rela);
+ }
+ else
+ htab->tls_ldm_got.offset = -1;
/* Do all the .plt entries without relocs first. The dynamic linker
uses the last .plt reloc to find the end of the .plt (and hence
@@ -2299,7 +2402,7 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
else if (sec == htab->sgot
|| sec == htab->sdynbss)
;
- else if (strncmp (bfd_get_section_name (dynobj, sec), ".rela", 5) == 0)
+ else if (CONST_STRNEQ (bfd_get_section_name (dynobj, sec), ".rela"))
{
if (sec->size != 0)
{
@@ -2670,7 +2773,7 @@ get_local_syms (bfd *output_bfd, bfd *input_bfd, struct bfd_link_info *info)
struct elf32_hppa_stub_hash_entry *hsh;
sec = hh->eh.root.u.def.section;
- stub_name = hh->eh.root.root.string;
+ stub_name = hh_name (hh);
hsh = hppa_stub_hash_lookup (&htab->bstab,
stub_name,
FALSE, FALSE);
@@ -3104,6 +3207,35 @@ elf32_hppa_build_stubs (struct bfd_link_info *info)
return TRUE;
}
+/* Return the base vma address which should be subtracted from the real
+ address when resolving a dtpoff relocation.
+ This is PT_TLS segment p_vaddr. */
+
+static bfd_vma
+dtpoff_base (struct bfd_link_info *info)
+{
+ /* If tls_sec is NULL, we should have signalled an error already. */
+ if (elf_hash_table (info)->tls_sec == NULL)
+ return 0;
+ return elf_hash_table (info)->tls_sec->vma;
+}
+
+/* Return the relocation value for R_PARISC_TLS_TPOFF*.. */
+
+static bfd_vma
+tpoff (struct bfd_link_info *info, bfd_vma address)
+{
+ struct elf_link_hash_table *htab = elf_hash_table (info);
+
+ /* If tls_sec is NULL, we should have signalled an error already. */
+ if (htab->tls_sec == NULL)
+ return 0;
+ /* hppa TLS ABI is variant I and static TLS block start just after
+ tcbhead structure which has 2 pointer fields. */
+ return (address - htab->tls_sec->vma
+ + align_power ((bfd_vma) 8, htab->tls_sec->alignment_power));
+}
+
/* Perform a final link. */
static bfd_boolean
@@ -3315,6 +3447,12 @@ final_link_relocate (asection *input_section,
case R_PARISC_DLTIND21L:
case R_PARISC_DLTIND14R:
case R_PARISC_DLTIND14F:
+ case R_PARISC_TLS_GD21L:
+ case R_PARISC_TLS_GD14R:
+ case R_PARISC_TLS_LDM21L:
+ case R_PARISC_TLS_LDM14R:
+ case R_PARISC_TLS_IE21L:
+ case R_PARISC_TLS_IE14R:
value -= elf_gp (input_section->output_section->owner);
break;
@@ -3342,6 +3480,9 @@ final_link_relocate (asection *input_section,
case R_PARISC_DLTIND14F:
case R_PARISC_SEGBASE:
case R_PARISC_SEGREL32:
+ case R_PARISC_TLS_DTPMOD32:
+ case R_PARISC_TLS_DTPOFF32:
+ case R_PARISC_TLS_TPREL32:
r_field = e_fsel;
break;
@@ -3353,6 +3494,11 @@ final_link_relocate (asection *input_section,
case R_PARISC_DIR21L:
case R_PARISC_DPREL21L:
+ case R_PARISC_TLS_GD21L:
+ case R_PARISC_TLS_LDM21L:
+ case R_PARISC_TLS_LDO21L:
+ case R_PARISC_TLS_IE21L:
+ case R_PARISC_TLS_LE21L:
r_field = e_lrsel;
break;
@@ -3366,6 +3512,11 @@ final_link_relocate (asection *input_section,
case R_PARISC_DIR17R:
case R_PARISC_DIR14R:
case R_PARISC_DPREL14R:
+ case R_PARISC_TLS_GD14R:
+ case R_PARISC_TLS_LDM14R:
+ case R_PARISC_TLS_LDO14R:
+ case R_PARISC_TLS_IE14R:
+ case R_PARISC_TLS_LE14R:
r_field = e_rrsel;
break;
@@ -3478,9 +3629,6 @@ elf32_hppa_relocate_section (bfd *output_bfd,
Elf_Internal_Rela *rela;
Elf_Internal_Rela *relend;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
htab = hppa_link_hash_table (info);
@@ -3512,7 +3660,6 @@ elf32_hppa_relocate_section (bfd *output_bfd,
|| r_type == (unsigned int) R_PARISC_GNU_VTINHERIT)
continue;
- /* This is a final link. */
r_symndx = ELF32_R_SYM (rela->r_info);
hh = NULL;
sym = NULL;
@@ -3536,7 +3683,8 @@ elf32_hppa_relocate_section (bfd *output_bfd,
eh, sym_sec, relocation,
unresolved_reloc, warned_undef);
- if (relocation == 0
+ if (!info->relocatable
+ && relocation == 0
&& eh->root.type != bfd_link_hash_defined
&& eh->root.type != bfd_link_hash_defweak
&& eh->root.type != bfd_link_hash_undefweak)
@@ -3546,7 +3694,7 @@ elf32_hppa_relocate_section (bfd *output_bfd,
&& eh->type == STT_PARISC_MILLI)
{
if (! info->callbacks->undefined_symbol
- (info, eh->root.root.string, input_bfd,
+ (info, eh_name (eh), input_bfd,
input_section, rela->r_offset, FALSE))
return FALSE;
warned_undef = TRUE;
@@ -3555,6 +3703,22 @@ elf32_hppa_relocate_section (bfd *output_bfd,
hh = hppa_elf_hash_entry (eh);
}
+ if (sym_sec != NULL && elf_discarded_section (sym_sec))
+ {
+ /* For relocs against symbols from removed linkonce
+ sections, or sections discarded by a linker script,
+ we just want the section contents zeroed. Avoid any
+ special processing. */
+ _bfd_clear_contents (elf_hppa_howto_table + r_type, input_bfd,
+ contents + rela->r_offset);
+ rela->r_info = 0;
+ rela->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
/* Do any required modifications to the relocation value, and
determine what types of dynamic info we need to output, if
any. */
@@ -3766,11 +3930,7 @@ elf32_hppa_relocate_section (bfd *output_bfd,
case R_PARISC_DPREL14R:
case R_PARISC_DPREL21L:
case R_PARISC_DIR32:
- /* r_symndx will be zero only for relocs against symbols
- from removed linkonce sections, or sections discarded by
- a linker script. */
- if (r_symndx == 0
- || (input_section->flags & SEC_ALLOC) == 0)
+ if ((input_section->flags & SEC_ALLOC) == 0)
break;
/* The reloc types handled here and this conditional
@@ -3851,17 +4011,22 @@ elf32_hppa_relocate_section (bfd *output_bfd,
&& sym_sec->output_section != NULL
&& ! bfd_is_abs_section (sym_sec))
{
- /* Skip this relocation if the output section has
- been discarded. */
- if (bfd_is_abs_section (sym_sec->output_section))
- break;
+ asection *osec;
+
+ osec = sym_sec->output_section;
+ indx = elf_section_data (osec)->dynindx;
+ if (indx == 0)
+ {
+ osec = htab->etab.text_index_section;
+ indx = elf_section_data (osec)->dynindx;
+ }
+ BFD_ASSERT (indx != 0);
- indx = elf_section_data (sym_sec->output_section)->dynindx;
/* We are turning this relocation into one
against a section symbol, so subtract out the
output section's address but not the offset
of the input section in the output section. */
- outrel.r_addend -= sym_sec->output_section->vma;
+ outrel.r_addend -= osec->vma;
}
outrel.r_info = ELF32_R_INFO (indx, r_type);
@@ -3875,6 +4040,198 @@ elf32_hppa_relocate_section (bfd *output_bfd,
bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
}
break;
+
+ case R_PARISC_TLS_LDM21L:
+ case R_PARISC_TLS_LDM14R:
+ {
+ bfd_vma off;
+
+ off = htab->tls_ldm_got.offset;
+ if (off & 1)
+ off &= ~1;
+ else
+ {
+ Elf_Internal_Rela outrel;
+ bfd_byte *loc;
+
+ outrel.r_offset = (off
+ + htab->sgot->output_section->vma
+ + htab->sgot->output_offset);
+ outrel.r_addend = 0;
+ outrel.r_info = ELF32_R_INFO (0, R_PARISC_TLS_DTPMOD32);
+ loc = htab->srelgot->contents;
+ loc += htab->srelgot->reloc_count++ * sizeof (Elf32_External_Rela);
+
+ bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
+ htab->tls_ldm_got.offset |= 1;
+ }
+
+ /* Add the base of the GOT to the relocation value. */
+ relocation = (off
+ + htab->sgot->output_offset
+ + htab->sgot->output_section->vma);
+
+ break;
+ }
+
+ case R_PARISC_TLS_LDO21L:
+ case R_PARISC_TLS_LDO14R:
+ relocation -= dtpoff_base (info);
+ break;
+
+ case R_PARISC_TLS_GD21L:
+ case R_PARISC_TLS_GD14R:
+ case R_PARISC_TLS_IE21L:
+ case R_PARISC_TLS_IE14R:
+ {
+ bfd_vma off;
+ int indx;
+ char tls_type;
+
+ indx = 0;
+ if (hh != NULL)
+ {
+ bfd_boolean dyn;
+ dyn = htab->etab.dynamic_sections_created;
+
+ if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &hh->eh)
+ && (!info->shared
+ || !SYMBOL_REFERENCES_LOCAL (info, &hh->eh)))
+ {
+ indx = hh->eh.dynindx;
+ }
+ off = hh->eh.got.offset;
+ tls_type = hh->tls_type;
+ }
+ else
+ {
+ off = local_got_offsets[r_symndx];
+ tls_type = hppa_elf_local_got_tls_type (input_bfd)[r_symndx];
+ }
+
+ if (tls_type == GOT_UNKNOWN)
+ abort ();
+
+ if ((off & 1) != 0)
+ off &= ~1;
+ else
+ {
+ bfd_boolean need_relocs = FALSE;
+ Elf_Internal_Rela outrel;
+ bfd_byte *loc = NULL;
+ int cur_off = off;
+
+ /* The GOT entries have not been initialized yet. Do it
+ now, and emit any relocations. If both an IE GOT and a
+ GD GOT are necessary, we emit the GD first. */
+
+ if ((info->shared || indx != 0)
+ && (hh == NULL
+ || ELF_ST_VISIBILITY (hh->eh.other) == STV_DEFAULT
+ || hh->eh.root.type != bfd_link_hash_undefweak))
+ {
+ need_relocs = TRUE;
+ loc = htab->srelgot->contents;
+ /* FIXME (CAO): Should this be reloc_count++ ? */
+ loc += htab->srelgot->reloc_count * sizeof (Elf32_External_Rela);
+ }
+
+ if (tls_type & GOT_TLS_GD)
+ {
+ if (need_relocs)
+ {
+ outrel.r_offset = (cur_off
+ + htab->sgot->output_section->vma
+ + htab->sgot->output_offset);
+ outrel.r_info = ELF32_R_INFO (indx,R_PARISC_TLS_DTPMOD32);
+ outrel.r_addend = 0;
+ bfd_put_32 (output_bfd, 0, htab->sgot->contents + cur_off);
+ bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
+ htab->srelgot->reloc_count++;
+ loc += sizeof (Elf32_External_Rela);
+
+ if (indx == 0)
+ bfd_put_32 (output_bfd, relocation - dtpoff_base (info),
+ htab->sgot->contents + cur_off + 4);
+ else
+ {
+ bfd_put_32 (output_bfd, 0,
+ htab->sgot->contents + cur_off + 4);
+ outrel.r_info = ELF32_R_INFO (indx, R_PARISC_TLS_DTPOFF32);
+ outrel.r_offset += 4;
+ bfd_elf32_swap_reloca_out (output_bfd, &outrel,loc);
+ htab->srelgot->reloc_count++;
+ loc += sizeof (Elf32_External_Rela);
+ }
+ }
+ else
+ {
+ /* If we are not emitting relocations for a
+ general dynamic reference, then we must be in a
+ static link or an executable link with the
+ symbol binding locally. Mark it as belonging
+ to module 1, the executable. */
+ bfd_put_32 (output_bfd, 1,
+ htab->sgot->contents + cur_off);
+ bfd_put_32 (output_bfd, relocation - dtpoff_base (info),
+ htab->sgot->contents + cur_off + 4);
+ }
+
+
+ cur_off += 8;
+ }
+
+ if (tls_type & GOT_TLS_IE)
+ {
+ if (need_relocs)
+ {
+ outrel.r_offset = (cur_off
+ + htab->sgot->output_section->vma
+ + htab->sgot->output_offset);
+ outrel.r_info = ELF32_R_INFO (indx, R_PARISC_TLS_TPREL32);
+
+ if (indx == 0)
+ outrel.r_addend = relocation - dtpoff_base (info);
+ else
+ outrel.r_addend = 0;
+
+ bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
+ htab->srelgot->reloc_count++;
+ loc += sizeof (Elf32_External_Rela);
+ }
+ else
+ bfd_put_32 (output_bfd, tpoff (info, relocation),
+ htab->sgot->contents + cur_off);
+
+ cur_off += 4;
+ }
+
+ if (hh != NULL)
+ hh->eh.got.offset |= 1;
+ else
+ local_got_offsets[r_symndx] |= 1;
+ }
+
+ if ((tls_type & GOT_TLS_GD)
+ && r_type != R_PARISC_TLS_GD21L
+ && r_type != R_PARISC_TLS_GD14R)
+ off += 2 * GOT_ENTRY_SIZE;
+
+ /* Add the base of the GOT to the relocation value. */
+ relocation = (off
+ + htab->sgot->output_offset
+ + htab->sgot->output_section->vma);
+
+ break;
+ }
+
+ case R_PARISC_TLS_LE21L:
+ case R_PARISC_TLS_LE14R:
+ {
+ relocation = tpoff (info, relocation);
+ break;
+ }
+ break;
default:
break;
@@ -3887,7 +4244,7 @@ elf32_hppa_relocate_section (bfd *output_bfd,
continue;
if (hh != NULL)
- sym_name = hh->eh.root.root.string;
+ sym_name = hh_name (hh);
else
{
sym_name = bfd_elf_string_from_elf_section (input_bfd,
@@ -3996,7 +4353,9 @@ elf32_hppa_finish_dynamic_symbol (bfd *output_bfd,
}
}
- if (eh->got.offset != (bfd_vma) -1)
+ if (eh->got.offset != (bfd_vma) -1
+ && (hppa_elf_hash_entry (eh)->tls_type & GOT_TLS_GD) == 0
+ && (hppa_elf_hash_entry (eh)->tls_type & GOT_TLS_IE) == 0)
{
/* This symbol has an entry in the global offset table. Set it
up. */
@@ -4057,8 +4416,8 @@ elf32_hppa_finish_dynamic_symbol (bfd *output_bfd,
}
/* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
- if (eh->root.root.string[0] == '_'
- && (strcmp (eh->root.root.string, "_DYNAMIC") == 0
+ if (eh_name (eh)[0] == '_'
+ && (strcmp (eh_name (eh), "_DYNAMIC") == 0
|| eh == htab->etab.hgot))
{
sym->st_shndx = SHN_ABS;
@@ -4073,6 +4432,17 @@ elf32_hppa_finish_dynamic_symbol (bfd *output_bfd,
static enum elf_reloc_type_class
elf32_hppa_reloc_type_class (const Elf_Internal_Rela *rela)
{
+ /* Handle TLS relocs first; we don't want them to be marked
+ relative by the "if (ELF32_R_SYM (rela->r_info) == 0)"
+ check below. */
+ switch ((int) ELF32_R_TYPE (rela->r_info))
+ {
+ case R_PARISC_TLS_DTPMOD32:
+ case R_PARISC_TLS_DTPOFF32:
+ case R_PARISC_TLS_TPREL32:
+ return reloc_class_normal;
+ }
+
if (ELF32_R_SYM (rela->r_info) == 0)
return reloc_class_relative;
@@ -4209,30 +4579,6 @@ elf32_hppa_finish_dynamic_sections (bfd *output_bfd,
return TRUE;
}
-/* Tweak the OSABI field of the elf header. */
-
-static void
-elf32_hppa_post_process_headers (bfd *abfd,
- struct bfd_link_info *info ATTRIBUTE_UNUSED)
-{
- Elf_Internal_Ehdr * i_ehdrp;
-
- i_ehdrp = elf_elfheader (abfd);
-
- if (strcmp (bfd_get_target (abfd), "elf32-hppa-linux") == 0)
- {
- i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_LINUX;
- }
- else if (strcmp (bfd_get_target (abfd), "elf32-hppa-netbsd") == 0)
- {
- i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_NETBSD;
- }
- else
- {
- i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_HPUX;
- }
-}
-
/* Called when writing out an object file to decide the type of a
symbol. */
static int
@@ -4247,6 +4593,7 @@ elf32_hppa_elf_get_symbol_type (Elf_Internal_Sym *elf_sym, int type)
/* Misc BFD support code. */
#define bfd_elf32_bfd_is_local_label_name elf_hppa_is_local_label_name
#define bfd_elf32_bfd_reloc_type_lookup elf_hppa_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup elf_hppa_reloc_name_lookup
#define elf_info_to_howto elf_hppa_info_to_howto
#define elf_info_to_howto_rel elf_hppa_info_to_howto_rel
@@ -4264,13 +4611,14 @@ elf32_hppa_elf_get_symbol_type (Elf_Internal_Sym *elf_sym, int type)
#define elf_backend_finish_dynamic_symbol elf32_hppa_finish_dynamic_symbol
#define elf_backend_finish_dynamic_sections elf32_hppa_finish_dynamic_sections
#define elf_backend_size_dynamic_sections elf32_hppa_size_dynamic_sections
+#define elf_backend_init_index_section _bfd_elf_init_1_index_section
#define elf_backend_gc_mark_hook elf32_hppa_gc_mark_hook
#define elf_backend_gc_sweep_hook elf32_hppa_gc_sweep_hook
#define elf_backend_grok_prstatus elf32_hppa_grok_prstatus
#define elf_backend_grok_psinfo elf32_hppa_grok_psinfo
#define elf_backend_object_p elf32_hppa_object_p
#define elf_backend_final_write_processing elf_hppa_final_write_processing
-#define elf_backend_post_process_headers elf32_hppa_post_process_headers
+#define elf_backend_post_process_headers _bfd_elf_set_osabi
#define elf_backend_get_symbol_type elf32_hppa_elf_get_symbol_type
#define elf_backend_reloc_type_class elf32_hppa_reloc_type_class
#define elf_backend_action_discarded elf_hppa_action_discarded
@@ -4289,20 +4637,29 @@ elf32_hppa_elf_get_symbol_type (Elf_Internal_Sym *elf_sym, int type)
#define ELF_ARCH bfd_arch_hppa
#define ELF_MACHINE_CODE EM_PARISC
#define ELF_MAXPAGESIZE 0x1000
+#define ELF_OSABI ELFOSABI_HPUX
+#define elf32_bed elf32_hppa_hpux_bed
#include "elf32-target.h"
#undef TARGET_BIG_SYM
-#define TARGET_BIG_SYM bfd_elf32_hppa_linux_vec
+#define TARGET_BIG_SYM bfd_elf32_hppa_linux_vec
#undef TARGET_BIG_NAME
-#define TARGET_BIG_NAME "elf32-hppa-linux"
+#define TARGET_BIG_NAME "elf32-hppa-linux"
+#undef ELF_OSABI
+#define ELF_OSABI ELFOSABI_LINUX
+#undef elf32_bed
+#define elf32_bed elf32_hppa_linux_bed
-#define INCLUDED_TARGET_FILE 1
#include "elf32-target.h"
#undef TARGET_BIG_SYM
-#define TARGET_BIG_SYM bfd_elf32_hppa_nbsd_vec
+#define TARGET_BIG_SYM bfd_elf32_hppa_nbsd_vec
#undef TARGET_BIG_NAME
-#define TARGET_BIG_NAME "elf32-hppa-netbsd"
+#define TARGET_BIG_NAME "elf32-hppa-netbsd"
+#undef ELF_OSABI
+#define ELF_OSABI ELFOSABI_NETBSD
+#undef elf32_bed
+#define elf32_bed elf32_hppa_netbsd_bed
#include "elf32-target.h"
diff --git a/bfd/elf32-i370.c b/bfd/elf32-i370.c
index d9e6fbf52806..0ec34b872e17 100644
--- a/bfd/elf32-i370.c
+++ b/bfd/elf32-i370.c
@@ -1,6 +1,6 @@
/* i370-specific support for 32-bit ELF
- Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
Hacked by Linas Vepstas for i370 linas@linas.org
@@ -27,8 +27,8 @@
else is a wild card. In particular, don't expect shared libs or
dynamic loading to work ... its never been tested. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -267,6 +267,22 @@ i370_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return i370_elf_howto_table[ (int)i370_reloc ];
};
+static reloc_howto_type *
+i370_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (i370_elf_howto_raw) / sizeof (i370_elf_howto_raw[0]);
+ i++)
+ if (i370_elf_howto_raw[i].name != NULL
+ && strcasecmp (i370_elf_howto_raw[i].name, r_name) == 0)
+ return &i370_elf_howto_raw[i];
+
+ return NULL;
+}
+
/* The name of the dynamic interpreter. This is put in the .interp
section. */
@@ -445,7 +461,6 @@ i370_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
{
bfd *dynobj = elf_hash_table (info)->dynobj;
asection *s;
- unsigned int power_of_two;
#ifdef DEBUG
fprintf (stderr, "i370_elf_adjust_dynamic_symbol called for %s\n",
@@ -530,28 +545,7 @@ i370_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 4)
- power_of_two = 4;
-
- /* Apply the required alignment. */
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (dynobj, s))
- {
- if (! bfd_set_section_alignment (dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Increment the index of a dynamic symbol by a given amount. Called
@@ -567,7 +561,7 @@ i370_elf_adjust_dynindx (struct elf_link_hash_entry *h, void * cparg)
#ifdef DEBUG
fprintf (stderr,
- "i370_elf_adjust_dynindx called, h->dynindx = %d, *cp = %d\n",
+ "i370_elf_adjust_dynindx called, h->dynindx = %ld, *cp = %d\n",
h->dynindx, *cp);
#endif
@@ -655,7 +649,7 @@ i370_elf_size_dynamic_sections (bfd *output_bfd,
/* Remember whether there is a PLT. */
plt = s->size != 0;
}
- else if (strncmp (name, ".rela", 5) == 0)
+ else if (CONST_STRNEQ (name, ".rela"))
{
if (s->size != 0)
{
@@ -867,7 +861,7 @@ i370_elf_check_relocs (bfd *abfd,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec), name + 5) == 0);
sreloc = bfd_get_section_by_name (dynobj, name);
@@ -1077,9 +1071,6 @@ i370_elf_relocate_section (bfd *output_bfd,
bfd_vma *local_got_offsets;
bfd_boolean ret = TRUE;
- if (info->relocatable)
- return TRUE;
-
#ifdef DEBUG
_bfd_error_handler ("i370_elf_relocate_section called for %B section %A, %ld relocations%s",
input_bfd, input_section,
@@ -1122,6 +1113,7 @@ i370_elf_relocate_section (bfd *output_bfd,
howto = i370_elf_howto_table[(int) r_type];
r_symndx = ELF32_R_SYM (rel->r_info);
+ relocation = 0;
if (r_symndx < symtab_hdr->sh_info)
{
@@ -1154,18 +1146,18 @@ i370_elf_relocate_section (bfd *output_bfd,
/* In these cases, we don't need the relocation
value. We check specially because in some
obscure cases sec->output_section will be NULL. */
- relocation = 0;
+ ;
else
relocation = (h->root.u.def.value
+ sec->output_section->vma
+ sec->output_offset);
}
else if (h->root.type == bfd_link_hash_undefweak)
- relocation = 0;
+ ;
else if (info->unresolved_syms_in_objects == RM_IGNORE
&& ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
- relocation = 0;
- else
+ ;
+ else if (!info->relocatable)
{
if ((*info->callbacks->undefined_symbol)
(info, h->root.root.string, input_bfd,
@@ -1176,10 +1168,23 @@ i370_elf_relocate_section (bfd *output_bfd,
ret = FALSE;
continue;
}
- relocation = 0;
}
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
switch ((int) r_type)
{
default:
@@ -1236,7 +1241,7 @@ i370_elf_relocate_section (bfd *output_bfd,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (input_bfd,
input_section),
name + 5) == 0);
@@ -1290,13 +1295,25 @@ i370_elf_relocate_section (bfd *output_bfd,
{
asection *osec;
+ /* We are turning this relocation into one
+ against a section symbol. It would be
+ proper to subtract the symbol's value,
+ osec->vma, from the emitted reloc addend,
+ but ld.so expects buggy relocs. */
osec = sec->output_section;
indx = elf_section_data (osec)->dynindx;
- BFD_ASSERT(indx > 0);
+ if (indx == 0)
+ {
+ struct elf_link_hash_table *htab;
+ htab = elf_hash_table (info);
+ osec = htab->text_index_section;
+ indx = elf_section_data (osec)->dynindx;
+ }
+ BFD_ASSERT (indx != 0);
#ifdef DEBUG
if (indx <= 0)
{
- printf ("indx=%d section=%s flags=%08x name=%s\n",
+ printf ("indx=%ld section=%s flags=%08x name=%s\n",
indx, osec->name, osec->flags,
h->root.root.string);
}
@@ -1394,16 +1411,6 @@ i370_elf_relocate_section (bfd *output_bfd,
return ret;
}
-
-static void
-i370_elf_post_process_headers (bfd * abfd,
- struct bfd_link_info * link_info ATTRIBUTE_UNUSED)
-{
- Elf_Internal_Ehdr * i_ehdrp; /* Elf file header, internal form. */
-
- i_ehdrp = elf_elfheader (abfd);
- i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_LINUX;
-}
#define TARGET_BIG_SYM bfd_elf32_i370_vec
#define TARGET_BIG_NAME "elf32-i370"
@@ -1413,12 +1420,15 @@ i370_elf_post_process_headers (bfd * abfd,
#define ELF_MACHINE_ALT1 EM_I370_OLD
#endif
#define ELF_MAXPAGESIZE 0x1000
+#define ELF_OSABI ELFOSABI_LINUX
+
#define elf_info_to_howto i370_elf_info_to_howto
#define elf_backend_plt_not_loaded 1
#define elf_backend_rela_normal 1
#define bfd_elf32_bfd_reloc_type_lookup i370_elf_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup i370_elf_reloc_name_lookup
#define bfd_elf32_bfd_set_private_flags i370_elf_set_private_flags
#define bfd_elf32_bfd_merge_private_bfd_data i370_elf_merge_private_bfd_data
#define elf_backend_relocate_section i370_elf_relocate_section
@@ -1427,12 +1437,13 @@ i370_elf_post_process_headers (bfd * abfd,
link glibc's ld.so without errors. */
#define elf_backend_create_dynamic_sections i370_elf_create_dynamic_sections
#define elf_backend_size_dynamic_sections i370_elf_size_dynamic_sections
+#define elf_backend_init_index_section _bfd_elf_init_1_index_section
#define elf_backend_finish_dynamic_sections i370_elf_finish_dynamic_sections
#define elf_backend_fake_sections i370_elf_fake_sections
#define elf_backend_section_from_shdr i370_elf_section_from_shdr
#define elf_backend_adjust_dynamic_symbol i370_elf_adjust_dynamic_symbol
#define elf_backend_check_relocs i370_elf_check_relocs
-#define elf_backend_post_process_headers i370_elf_post_process_headers
+#define elf_backend_post_process_headers _bfd_elf_set_osabi
static int
i370_noop (void)
@@ -1440,19 +1451,9 @@ i370_noop (void)
return 1;
}
-/* We need to define these at least as no-ops to link glibc ld.so. */
-
-#define elf_backend_add_symbol_hook \
- (bfd_boolean (*) \
- (bfd *, struct bfd_link_info *, Elf_Internal_Sym *, \
- const char **, flagword *, asection **, bfd_vma *)) i370_noop
#define elf_backend_finish_dynamic_symbol \
(bfd_boolean (*) \
(bfd *, struct bfd_link_info *, struct elf_link_hash_entry *, \
Elf_Internal_Sym *)) i370_noop
-#define elf_backend_additional_program_headers \
- (int (*) (bfd *)) i370_noop
-#define elf_backend_modify_segment_map \
- (bfd_boolean (*) (bfd *, struct bfd_link_info *)) i370_noop
#include "elf32-target.h"
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 754aa52254d5..0e023df4ad0d 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -1,6 +1,6 @@
/* Intel 80386/80486-specific support for 32-bit ELF
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -330,6 +330,20 @@ elf_i386_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return 0;
}
+static reloc_howto_type *
+elf_i386_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof (elf_howto_table) / sizeof (elf_howto_table[0]); i++)
+ if (elf_howto_table[i].name != NULL
+ && strcasecmp (elf_howto_table[i].name, r_name) == 0)
+ return &elf_howto_table[i];
+
+ return NULL;
+}
+
static void
elf_i386_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
arelent *cache_ptr,
@@ -582,10 +596,6 @@ struct elf_i386_link_hash_entry
#define GOT_TLS_IE_NEG 6
#define GOT_TLS_IE_BOTH 7
#define GOT_TLS_GDESC 8
-#define GOT_TLS_MASK 0x0f
-#define GOT_TLS_IE_IE 0x10
-#define GOT_TLS_IE_GD 0x20
-#define GOT_TLS_IE_MASK 0x30
#define GOT_TLS_GD_BOTH_P(type) \
((type) == (GOT_TLS_GD | GOT_TLS_GDESC))
#define GOT_TLS_GD_P(type) \
@@ -626,11 +636,14 @@ struct elf_i386_obj_tdata
static bfd_boolean
elf_i386_mkobject (bfd *abfd)
{
- bfd_size_type amt = sizeof (struct elf_i386_obj_tdata);
- abfd->tdata.any = bfd_zalloc (abfd, amt);
if (abfd->tdata.any == NULL)
- return FALSE;
- return TRUE;
+ {
+ bfd_size_type amt = sizeof (struct elf_i386_obj_tdata);
+ abfd->tdata.any = bfd_zalloc (abfd, amt);
+ if (abfd->tdata.any == NULL)
+ return FALSE;
+ }
+ return bfd_elf_mkobject (abfd);
}
/* i386 ELF linker hash table. */
@@ -1011,25 +1024,12 @@ elf_i386_check_relocs (bfd *abfd,
case R_386_TLS_IE_32:
if (ELF32_R_TYPE (rel->r_info) == r_type)
tls_type = GOT_TLS_IE_NEG;
- else if (h
- && ELF32_R_TYPE (rel->r_info) == R_386_TLS_GD)
- /* If this is a GD->IE transition, we may use either
- of R_386_TLS_TPOFF and R_386_TLS_TPOFF32. But if
- we may have both R_386_TLS_IE and R_386_TLS_GD,
- we can't share the same R_386_TLS_TPOFF since
- they require different offsets. So we remember
- it comes from R_386_TLS_GD. */
- tls_type = GOT_TLS_IE | GOT_TLS_IE_GD;
else
+ /* If this is a GD->IE transition, we may use either of
+ R_386_TLS_TPOFF and R_386_TLS_TPOFF32. */
tls_type = GOT_TLS_IE;
break;
case R_386_TLS_IE:
- if (h)
- {
- /* We remember it comes from R_386_TLS_IE. */
- tls_type = GOT_TLS_IE_POS | GOT_TLS_IE_IE;
- break;
- }
case R_386_TLS_GOTIE:
tls_type = GOT_TLS_IE_POS; break;
}
@@ -1069,8 +1069,7 @@ elf_i386_check_relocs (bfd *abfd,
tls_type |= old_tls_type;
/* If a TLS symbol is accessed using IE at least once,
there is no point to use dynamic model for it. */
- else if (old_tls_type != tls_type
- && old_tls_type != GOT_UNKNOWN
+ else if (old_tls_type != tls_type && old_tls_type != GOT_UNKNOWN
&& (! GOT_TLS_GD_ANY_P (old_tls_type)
|| (tls_type & GOT_TLS_IE) == 0))
{
@@ -1165,7 +1164,7 @@ elf_i386_check_relocs (bfd *abfd,
&& (sec->flags & SEC_ALLOC) != 0
&& (r_type != R_386_PC32
|| (h != NULL
- && (! info->symbolic
+ && (! SYMBOLIC_BIND (info, h)
|| h->root.type == bfd_link_hash_defweak
|| !h->def_regular))))
|| (ELIMINATE_COPY_RELOCS
@@ -1192,7 +1191,7 @@ elf_i386_check_relocs (bfd *abfd,
if (name == NULL)
return FALSE;
- if (strncmp (name, ".rel", 4) != 0
+ if (! CONST_STRNEQ (name, ".rel")
|| strcmp (bfd_get_section_name (abfd, sec),
name + 4) != 0)
{
@@ -1294,38 +1293,20 @@ elf_i386_check_relocs (bfd *abfd,
static asection *
elf_i386_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
Elf_Internal_Rela *rel,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_386_GNU_VTINHERIT:
- case R_386_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_386_GNU_VTINHERIT:
+ case R_386_GNU_VTENTRY:
+ return NULL;
+ }
+
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update the got entry reference counts for the section being removed. */
@@ -1438,7 +1419,6 @@ elf_i386_adjust_dynamic_symbol (struct bfd_link_info *info,
{
struct elf_i386_link_hash_table *htab;
asection *s;
- unsigned int power_of_two;
/* If this is a function, put it in the procedure linkage table. We
will fill in the contents of the procedure linkage table later,
@@ -1558,29 +1538,9 @@ elf_i386_adjust_dynamic_symbol (struct bfd_link_info *info,
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 3)
- power_of_two = 3;
-
- /* Apply the required alignment. */
s = htab->sdynbss;
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (htab->elf.dynobj, s))
- {
- if (! bfd_set_section_alignment (htab->elf.dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Allocate space in .plt, .got and associated reloc sections for
@@ -1700,14 +1660,6 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
asection *s;
bfd_boolean dyn;
int tls_type = elf_i386_hash_entry(h)->tls_type;
-
- /* If we have both R_386_TLS_IE and R_386_TLS_GD, GOT_TLS_IE_BOTH
- should be used. */
- if ((tls_type & GOT_TLS_IE_MASK)
- == (GOT_TLS_IE_IE | GOT_TLS_IE_GD))
- tls_type = GOT_TLS_IE_BOTH;
- else
- tls_type &= GOT_TLS_MASK;
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
@@ -2052,7 +2004,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
if (htab->elf.hplt != NULL)
strip_section = FALSE;
}
- else if (strncmp (bfd_get_section_name (dynobj, s), ".rel", 4) == 0)
+ else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rel"))
{
if (s->size != 0 && s != htab->srelplt && s != htab->srelplt2)
relocs = TRUE;
@@ -2305,51 +2257,6 @@ elf_i386_relocate_section (bfd *output_bfd,
howto = elf_howto_table + indx;
r_symndx = ELF32_R_SYM (rel->r_info);
-
- if (info->relocatable)
- {
- bfd_vma val;
- bfd_byte *where;
-
- /* This is a relocatable link. We don't have to change
- anything, unless the reloc is against a section symbol,
- in which case we have to adjust according to where the
- section symbol winds up in the output section. */
- if (r_symndx >= symtab_hdr->sh_info)
- continue;
-
- sym = local_syms + r_symndx;
- if (ELF_ST_TYPE (sym->st_info) != STT_SECTION)
- continue;
-
- sec = local_sections[r_symndx];
- val = sec->output_offset;
- if (val == 0)
- continue;
-
- where = contents + rel->r_offset;
- switch (howto->size)
- {
- /* FIXME: overflow checks. */
- case 0:
- val += bfd_get_8 (input_bfd, where);
- bfd_put_8 (input_bfd, val, where);
- break;
- case 1:
- val += bfd_get_16 (input_bfd, where);
- bfd_put_16 (input_bfd, val, where);
- break;
- case 2:
- val += bfd_get_32 (input_bfd, where);
- bfd_put_32 (input_bfd, val, where);
- break;
- default:
- abort ();
- }
- continue;
- }
-
- /* This is a final link. */
h = NULL;
sym = NULL;
sec = NULL;
@@ -2361,10 +2268,12 @@ elf_i386_relocate_section (bfd *output_bfd,
relocation = (sec->output_section->vma
+ sec->output_offset
+ sym->st_value);
- if ((sec->flags & SEC_MERGE)
- && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+
+ if (ELF_ST_TYPE (sym->st_info) == STT_SECTION
+ && ((sec->flags & SEC_MERGE) != 0
+ || (info->relocatable
+ && sec->output_offset != 0)))
{
- asection *msec;
bfd_vma addend;
bfd_byte *where = contents + rel->r_offset;
@@ -2398,10 +2307,16 @@ elf_i386_relocate_section (bfd *output_bfd,
abort ();
}
- msec = sec;
- addend = _bfd_elf_rel_local_sym (output_bfd, sym, &msec, addend);
- addend -= relocation;
- addend += msec->output_section->vma + msec->output_offset;
+ if (info->relocatable)
+ addend += sec->output_offset;
+ else
+ {
+ asection *msec = sec;
+ addend = _bfd_elf_rel_local_sym (output_bfd, sym, &msec,
+ addend);
+ addend -= relocation;
+ addend += msec->output_section->vma + msec->output_offset;
+ }
switch (howto->size)
{
@@ -2434,21 +2349,20 @@ elf_i386_relocate_section (bfd *output_bfd,
unresolved_reloc, warned);
}
- if (r_symndx == 0)
+ if (sec != NULL && elf_discarded_section (sec))
{
- /* r_symndx will be zero only for relocs against symbols from
- removed linkonce sections, or sections discarded by a linker
- script. For these relocs, we just want the section contents
- zeroed. Avoid any special processing in the switch below. */
- r_type = R_386_NONE;
-
- relocation = 0;
- if (howto->pc_relative)
- relocation = (input_section->output_section->vma
- + input_section->output_offset
- + rel->r_offset);
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
}
+ if (info->relocatable)
+ continue;
+
switch (r_type)
{
case R_386_GOT32:
@@ -2652,7 +2566,7 @@ elf_i386_relocate_section (bfd *output_bfd,
&& h->dynindx != -1
&& (r_type == R_386_PC32
|| !info->shared
- || !info->symbolic
+ || !SYMBOLIC_BIND (info, h)
|| !h->def_regular))
outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
else
@@ -2711,13 +2625,6 @@ elf_i386_relocate_section (bfd *output_bfd,
else if (h != NULL)
{
tls_type = elf_i386_hash_entry(h)->tls_type;
- /* If we have both R_386_TLS_IE and R_386_TLS_GD,
- GOT_TLS_IE_BOTH should be used. */
- if ((tls_type & GOT_TLS_IE_MASK)
- == (GOT_TLS_IE_IE | GOT_TLS_IE_GD))
- tls_type = GOT_TLS_IE_BOTH;
- else
- tls_type &= GOT_TLS_MASK;
if (!info->shared && h->dynindx == -1 && (tls_type & GOT_TLS_IE))
r_type = R_386_TLS_LE_32;
}
@@ -2851,8 +2758,9 @@ elf_i386_relocate_section (bfd *output_bfd,
val = bfd_get_8 (input_bfd, contents + roff + 1);
BFD_ASSERT (val == 0x10);
- /* Now modify the instruction as appropriate. */
- bfd_put_8 (output_bfd, 0x90, contents + roff);
+ /* Now modify the instruction as appropriate. Use
+ xchg %ax,%ax instead of 2 nops. */
+ bfd_put_8 (output_bfd, 0x66, contents + roff);
bfd_put_8 (output_bfd, 0x90, contents + roff + 1);
continue;
}
@@ -3172,12 +3080,8 @@ elf_i386_relocate_section (bfd *output_bfd,
subl $foo@gottpoff(%reg), %eax
into:
addl $foo@gotntpoff(%reg), %eax. */
- if (r_type == R_386_TLS_GOTIE)
- {
- contents[roff + 6] = 0x03;
- if (tls_type == GOT_TLS_IE_BOTH)
- off += 4;
- }
+ if (tls_type == GOT_TLS_IE_POS)
+ contents[roff + 6] = 0x03;
bfd_put_32 (output_bfd,
htab->sgot->output_section->vma
+ htab->sgot->output_offset + off
@@ -3261,8 +3165,8 @@ elf_i386_relocate_section (bfd *output_bfd,
/* Now modify the instruction as appropriate. */
if (tls_type != GOT_TLS_IE_NEG)
{
- /* nop; nop */
- bfd_put_8 (output_bfd, 0x90, contents + roff);
+ /* xchg %ax,%ax */
+ bfd_put_8 (output_bfd, 0x66, contents + roff);
bfd_put_8 (output_bfd, 0x90, contents + roff + 1);
}
else
@@ -3872,6 +3776,18 @@ elf_i386_plt_sym_val (bfd_vma i, const asection *plt,
return plt->vma + (i + 1) * PLT_ENTRY_SIZE;
}
+/* Return TRUE if symbol should be hashed in the `.gnu.hash' section. */
+
+static bfd_boolean
+elf_i386_hash_symbol (struct elf_link_hash_entry *h)
+{
+ if (h->plt.offset != (bfd_vma) -1
+ && !h->def_regular
+ && !h->pointer_equality_needed)
+ return FALSE;
+
+ return _bfd_elf_hash_symbol (h);
+}
#define TARGET_LITTLE_SYM bfd_elf32_i386_vec
#define TARGET_LITTLE_NAME "elf32-i386"
@@ -3895,6 +3811,7 @@ elf_i386_plt_sym_val (bfd_vma i, const asection *plt,
#define bfd_elf32_bfd_is_local_label_name elf_i386_is_local_label_name
#define bfd_elf32_bfd_link_hash_table_create elf_i386_link_hash_table_create
#define bfd_elf32_bfd_reloc_type_lookup elf_i386_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup elf_i386_reloc_name_lookup
#define elf_backend_adjust_dynamic_symbol elf_i386_adjust_dynamic_symbol
#define elf_backend_check_relocs elf_i386_check_relocs
@@ -3911,7 +3828,10 @@ elf_i386_plt_sym_val (bfd_vma i, const asection *plt,
#define elf_backend_relocate_section elf_i386_relocate_section
#define elf_backend_size_dynamic_sections elf_i386_size_dynamic_sections
#define elf_backend_always_size_sections elf_i386_always_size_sections
+#define elf_backend_omit_section_dynsym \
+ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
#define elf_backend_plt_sym_val elf_i386_plt_sym_val
+#define elf_backend_hash_symbol elf_i386_hash_symbol
#include "elf32-target.h"
@@ -3921,6 +3841,8 @@ elf_i386_plt_sym_val (bfd_vma i, const asection *plt,
#define TARGET_LITTLE_SYM bfd_elf32_i386_freebsd_vec
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf32-i386-freebsd"
+#undef ELF_OSABI
+#define ELF_OSABI ELFOSABI_FREEBSD
/* The kernel recognizes executables as valid only if they carry a
"FreeBSD" label in the ELF header. So we put this label on all
@@ -3935,7 +3857,7 @@ elf_i386_post_process_headers (bfd *abfd,
i_ehdrp = elf_elfheader (abfd);
/* Put an ABI label supported by FreeBSD >= 4.1. */
- i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_FREEBSD;
+ i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
#ifdef OLD_FREEBSD_ABI_LABEL
/* The ABI label supported by FreeBSD <= 4.0 is quite nonstandard. */
memcpy (&i_ehdrp->e_ident[EI_ABIVERSION], "FreeBSD", 8);
@@ -3955,7 +3877,7 @@ elf_i386_post_process_headers (bfd *abfd,
#define TARGET_LITTLE_SYM bfd_elf32_i386_vxworks_vec
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf32-i386-vxworks"
-
+#undef ELF_OSABI
/* Like elf_i386_link_hash_table_create but with tweaks for VxWorks. */
diff --git a/bfd/elf32-i860.c b/bfd/elf32-i860.c
index 453256018884..22cebeea6912 100644
--- a/bfd/elf32-i860.c
+++ b/bfd/elf32-i860.c
@@ -1,5 +1,5 @@
/* Intel i860 specific support for 32-bit ELF.
- Copyright 1993, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1993, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Full i860 support contributed by Jason Eckhardt <jle@cygnus.com>.
@@ -20,8 +20,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/i860.h"
@@ -886,6 +886,23 @@ elf32_i860_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return lookup_howto (rtype);
}
+static reloc_howto_type *
+elf32_i860_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (elf32_i860_howto_table)
+ / sizeof (elf32_i860_howto_table[0]));
+ i++)
+ if (elf32_i860_howto_table[i].name != NULL
+ && strcasecmp (elf32_i860_howto_table[i].name, r_name) == 0)
+ return &elf32_i860_howto_table[i];
+
+ return NULL;
+}
+
/* Given a ELF reloc, return the matching HOWTO structure. */
static void
elf32_i860_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
@@ -1066,9 +1083,6 @@ elf32_i860_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
relend = relocs + input_section->reloc_count;
@@ -1113,6 +1127,20 @@ elf32_i860_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
switch (r_type)
{
default:
@@ -1241,6 +1269,7 @@ elf32_i860_is_local_label_name (bfd *abfd, const char *name)
#define elf_info_to_howto elf32_i860_info_to_howto_rela
#define elf_backend_relocate_section elf32_i860_relocate_section
#define bfd_elf32_bfd_reloc_type_lookup elf32_i860_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup elf32_i860_reloc_name_lookup
#define bfd_elf32_bfd_is_local_label_name elf32_i860_is_local_label_name
#include "elf32-target.h"
diff --git a/bfd/elf32-i960.c b/bfd/elf32-i960.c
index f458320655b4..10e6e55aa872 100644
--- a/bfd/elf32-i960.c
+++ b/bfd/elf32-i960.c
@@ -1,5 +1,6 @@
/* Intel 960 specific support for 32-bit ELF
- Copyright 1999, 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007
+ Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +19,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/i960.h"
@@ -27,6 +28,8 @@
#define USE_REL 1
#define bfd_elf32_bfd_reloc_type_lookup elf32_i960_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup \
+ elf32_i960_reloc_name_lookup
#define elf_info_to_howto elf32_i960_info_to_howto
#define elf_info_to_howto_rel elf32_i960_info_to_howto_rel
@@ -142,6 +145,20 @@ elf32_i960_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return elf_howto_table + elf32_i960_bfd_to_reloc_type (code);
}
+static reloc_howto_type *
+elf32_i960_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof (elf_howto_table) / sizeof (elf_howto_table[0]); i++)
+ if (elf_howto_table[i].name != NULL
+ && strcasecmp (elf_howto_table[i].name, r_name) == 0)
+ return &elf_howto_table[i];
+
+ return NULL;
+}
+
#define TARGET_LITTLE_SYM bfd_elf32_i960_vec
#define TARGET_LITTLE_NAME "elf32-i960"
#define ELF_ARCH bfd_arch_i960
diff --git a/bfd/elf32-ip2k.c b/bfd/elf32-ip2k.c
index 135ef1314ba5..1d61aa476797 100644
--- a/bfd/elf32-ip2k.c
+++ b/bfd/elf32-ip2k.c
@@ -1,5 +1,5 @@
/* Ubicom IP2xxx specific support for 32-bit ELF
- Copyright 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/ip2k.h"
@@ -223,6 +223,21 @@ ip2k_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+ip2k_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (ip2k_elf_howto_table) / sizeof (ip2k_elf_howto_table[0]);
+ i++)
+ if (ip2k_elf_howto_table[i].name != NULL
+ && strcasecmp (ip2k_elf_howto_table[i].name, r_name) == 0)
+ return &ip2k_elf_howto_table[i];
+
+ return NULL;
+}
+
static void
ip2k_get_mem (bfd *abfd ATTRIBUTE_UNUSED,
bfd_byte *addr,
@@ -1399,9 +1414,6 @@ ip2k_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
relend = relocs + input_section->reloc_count;
@@ -1418,7 +1430,6 @@ ip2k_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
const char * name = NULL;
int r_type;
- /* This is a final link. */
r_type = ELF32_R_TYPE (rel->r_info);
r_symndx = ELF32_R_SYM (rel->r_info);
howto = ip2k_elf_howto_table + ELF32_R_TYPE (rel->r_info);
@@ -1449,6 +1460,20 @@ ip2k_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
name = h->root.root.string;
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
/* Finally, the sole IP2K-specific part. */
r = ip2k_final_link_relocate (howto, input_bfd, input_section,
contents, rel, relocation);
@@ -1502,53 +1527,6 @@ ip2k_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
return TRUE;
}
-static asection *
-ip2k_elf_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela *rel,
- struct elf_link_hash_entry *h,
- Elf_Internal_Sym *sym)
-{
- if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- {
- if (!(elf_bad_symtab (sec->owner)
- && ELF_ST_BIND (sym->st_info) != STB_LOCAL)
- && ! ((sym->st_shndx <= 0 || sym->st_shndx >= SHN_LORESERVE)
- && sym->st_shndx != SHN_COMMON))
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
- }
- return NULL;
-}
-
-static bfd_boolean
-ip2k_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- asection *sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
-{
- /* We don't use got and plt entries for ip2k. */
- return TRUE;
-}
-
#define TARGET_BIG_SYM bfd_elf32_ip2k_vec
#define TARGET_BIG_NAME "elf32-ip2k"
@@ -1562,12 +1540,11 @@ ip2k_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
#define elf_backend_can_gc_sections 1
#define elf_backend_rela_normal 1
-#define elf_backend_gc_mark_hook ip2k_elf_gc_mark_hook
-#define elf_backend_gc_sweep_hook ip2k_elf_gc_sweep_hook
#define elf_backend_relocate_section ip2k_elf_relocate_section
#define elf_symbol_leading_char '_'
#define bfd_elf32_bfd_reloc_type_lookup ip2k_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup ip2k_reloc_name_lookup
#define bfd_elf32_bfd_relax_section ip2k_elf_relax_section
#include "elf32-target.h"
diff --git a/bfd/elf32-iq2000.c b/bfd/elf32-iq2000.c
index 146dcaaecaf4..160c996e6041 100644
--- a/bfd/elf32-iq2000.c
+++ b/bfd/elf32-iq2000.c
@@ -1,5 +1,6 @@
/* IQ2000-specific support for 32-bit ELF.
- Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/iq2000.h"
@@ -349,6 +350,26 @@ iq2000_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+iq2000_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (iq2000_elf_howto_table)
+ / sizeof (iq2000_elf_howto_table[0]));
+ i++)
+ if (iq2000_elf_howto_table[i].name != NULL
+ && strcasecmp (iq2000_elf_howto_table[i].name, r_name) == 0)
+ return &iq2000_elf_howto_table[i];
+
+ if (strcasecmp (iq2000_elf_vtinherit_howto.name, r_name) == 0)
+ return &iq2000_elf_vtinherit_howto;
+ if (strcasecmp (iq2000_elf_vtentry_howto.name, r_name) == 0)
+ return &iq2000_elf_vtentry_howto;
+
+ return NULL;
+}
/* Perform a single relocation. By default we use the standard BFD
routines. */
@@ -452,9 +473,9 @@ iq2000_elf_check_relocs (bfd *abfd,
case R_IQ2000_32:
/* For debug section, change to special harvard-aware relocations. */
- if (memcmp (sec->name, ".debug", 6) == 0
- || memcmp (sec->name, ".stab", 5) == 0
- || memcmp (sec->name, ".eh_frame", 9) == 0)
+ if (CONST_STRNEQ (sec->name, ".debug")
+ || CONST_STRNEQ (sec->name, ".stab")
+ || CONST_STRNEQ (sec->name, ".eh_frame"))
{
((Elf_Internal_Rela *) rel)->r_info
= ELF32_R_INFO (ELF32_R_SYM (rel->r_info), R_IQ2000_32_DEBUG);
@@ -521,9 +542,6 @@ iq2000_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED,
Elf_Internal_Rela * rel;
Elf_Internal_Rela * relend;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
relend = relocs + input_section->reloc_count;
@@ -548,7 +566,6 @@ iq2000_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED,
r_symndx = ELF32_R_SYM (rel->r_info);
- /* This is a final link. */
howto = iq2000_elf_howto_table + ELF32_R_TYPE (rel->r_info);
h = NULL;
sym = NULL;
@@ -579,6 +596,20 @@ iq2000_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED,
name = h->root.root.string;
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
switch (r_type)
{
case R_IQ2000_HI16:
@@ -642,53 +673,25 @@ iq2000_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED,
}
-/* Update the got entry reference counts for the section being
- removed. */
-
-static bfd_boolean
-iq2000_elf_gc_sweep_hook (bfd * abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info * info ATTRIBUTE_UNUSED,
- asection * sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela * relocs ATTRIBUTE_UNUSED)
-{
- return TRUE;
-}
-
/* Return the section that should be marked against GC for a given
relocation. */
static asection *
-iq2000_elf_gc_mark_hook (asection * sec,
- struct bfd_link_info * info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela * rel,
- struct elf_link_hash_entry * h,
- Elf_Internal_Sym * sym)
+iq2000_elf_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
{
- if (h == NULL)
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_IQ2000_GNU_VTINHERIT:
- case R_IQ2000_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
-
- return NULL;
+ if (h != NULL)
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_IQ2000_GNU_VTINHERIT:
+ case R_IQ2000_GNU_VTENTRY:
+ return NULL;
+ }
+
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
@@ -733,6 +736,10 @@ iq2000_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
elf_flags_init (obfd) = TRUE;
+
+ /* Copy object attributes. */
+ _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
return TRUE;
}
@@ -874,7 +881,6 @@ iq2000_elf_object_p (bfd *abfd)
#define elf_info_to_howto iq2000_info_to_howto_rela
#define elf_backend_relocate_section iq2000_elf_relocate_section
#define elf_backend_gc_mark_hook iq2000_elf_gc_mark_hook
-#define elf_backend_gc_sweep_hook iq2000_elf_gc_sweep_hook
#define elf_backend_check_relocs iq2000_elf_check_relocs
#define elf_backend_object_p iq2000_elf_object_p
#define elf_backend_rela_normal 1
@@ -882,6 +888,7 @@ iq2000_elf_object_p (bfd *abfd)
#define elf_backend_can_gc_sections 1
#define bfd_elf32_bfd_reloc_type_lookup iq2000_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup iq2000_reloc_name_lookup
#define bfd_elf32_bfd_set_private_flags iq2000_elf_set_private_flags
#define bfd_elf32_bfd_copy_private_bfd_data iq2000_elf_copy_private_bfd_data
#define bfd_elf32_bfd_merge_private_bfd_data iq2000_elf_merge_private_bfd_data
diff --git a/bfd/elf32-m32c.c b/bfd/elf32-m32c.c
index 5e9f3ab28a21..43499cec01c2 100644
--- a/bfd/elf32-m32c.c
+++ b/bfd/elf32-m32c.c
@@ -1,5 +1,5 @@
/* M16C/M32C specific support for 32-bit ELF.
- Copyright (C) 2005, 2006
+ Copyright (C) 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/m32c.h"
@@ -32,15 +32,12 @@ static void m32c_info_to_howto_rela
(bfd *, arelent *, Elf_Internal_Rela *);
static bfd_boolean m32c_elf_relocate_section
(bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
-static bfd_boolean m32c_elf_gc_sweep_hook
- (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
-static asection * m32c_elf_gc_mark_hook
- (asection *, struct bfd_link_info *, Elf_Internal_Rela *, struct elf_link_hash_entry *, Elf_Internal_Sym *);
static bfd_boolean m32c_elf_check_relocs
(bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
static bfd_boolean m32c_elf_relax_delete_bytes (bfd *, asection *, bfd_vma, int);
#ifdef DEBUG
-static char * m32c_get_reloc (long reloc);
+char * m32c_get_reloc (long reloc);
+void dump_symtab (bfd *, void *, void *);
#endif
static bfd_boolean m32c_elf_relax_section
(bfd *abfd, asection *sec, struct bfd_link_info *link_info, bfd_boolean *again);
@@ -63,13 +60,16 @@ static reloc_howto_type m32c_elf_howto_table [] =
0, /* dst_mask */
FALSE), /* pcrel_offset */
+ /* GCC intentionally overflows these next two in order to work
+ around limitations in the addressing modes, so don't complain
+ about overflow. */
HOWTO (R_M32C_16, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
+ complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_M32C_16", /* name */
FALSE, /* partial_inplace */
@@ -83,7 +83,7 @@ static reloc_howto_type m32c_elf_howto_table [] =
24, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
+ complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_M32C_24", /* name */
FALSE, /* partial_inplace */
@@ -272,6 +272,21 @@ m32c_reloc_type_lookup
return NULL;
}
+static reloc_howto_type *
+m32c_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (m32c_elf_howto_table) / sizeof (m32c_elf_howto_table[0]);
+ i++)
+ if (m32c_elf_howto_table[i].name != NULL
+ && strcasecmp (m32c_elf_howto_table[i].name, r_name) == 0)
+ return &m32c_elf_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an M32C ELF reloc. */
static void
@@ -372,31 +387,11 @@ m32c_elf_relocate_section
r_symndx = ELF32_R_SYM (rel->r_info);
- if (info->relocatable)
- {
- /* This is a relocatable link. We don't have to change
- anything, unless the reloc is against a section symbol,
- in which case we have to adjust according to where the
- section symbol winds up in the output section. */
- if (r_symndx < symtab_hdr->sh_info)
- {
- sym = local_syms + r_symndx;
-
- if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
- {
- sec = local_sections [r_symndx];
- rel->r_addend += sec->output_offset + sym->st_value;
- }
- }
-
- continue;
- }
-
- /* This is a final link. */
howto = m32c_elf_howto_table + ELF32_R_TYPE (rel->r_info);
h = NULL;
sym = NULL;
sec = NULL;
+ relocation = 0;
if (r_symndx < symtab_hdr->sh_info)
{
@@ -429,19 +424,38 @@ m32c_elf_relocate_section
+ sec->output_offset);
}
else if (h->root.type == bfd_link_hash_undefweak)
- {
- relocation = 0;
- }
- else
+ ;
+ else if (!info->relocatable)
{
if (! ((*info->callbacks->undefined_symbol)
(info, h->root.root.string, input_bfd,
input_section, rel->r_offset, TRUE)))
return FALSE;
- relocation = 0;
}
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ {
+ /* This is a relocatable link. We don't have to change
+ anything, unless the reloc is against a section symbol,
+ in which case we have to adjust according to where the
+ section symbol winds up in the output section. */
+ if (sym != NULL && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ rel->r_addend += sec->output_offset;
+ continue;
+ }
+
switch (ELF32_R_TYPE (rel->r_info))
{
case R_M32C_16:
@@ -571,62 +585,6 @@ m32c_elf_relocate_section
return TRUE;
}
-/* Return the section that should be marked against GC for a given
- relocation. */
-
-static asection *
-m32c_elf_gc_mark_hook
- (asection * sec,
- struct bfd_link_info * info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela * rel,
- struct elf_link_hash_entry * h,
- Elf_Internal_Sym * sym)
-{
- if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- {
- if (!(elf_bad_symtab (sec->owner)
- && ELF_ST_BIND (sym->st_info) != STB_LOCAL)
- && ! ((sym->st_shndx <= 0 || sym->st_shndx >= SHN_LORESERVE)
- && sym->st_shndx != SHN_COMMON))
- {
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
- }
- }
-
- return NULL;
-}
-
-/* Update the got entry reference counts for the section being removed. */
-
-static bfd_boolean
-m32c_elf_gc_sweep_hook
- (bfd * abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info * info ATTRIBUTE_UNUSED,
- asection * sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela * relocs ATTRIBUTE_UNUSED)
-{
- return TRUE;
-}
-
/* We support 16-bit pointers to code above 64k by generating a thunk
below 64k containing a JMP instruction to the final address. */
@@ -690,16 +648,11 @@ m32c_elf_check_relocs
splt = bfd_get_section_by_name (dynobj, ".plt");
if (splt == NULL)
{
- splt = bfd_make_section (dynobj, ".plt");
+ flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+ | SEC_IN_MEMORY | SEC_LINKER_CREATED
+ | SEC_READONLY | SEC_CODE);
+ splt = bfd_make_section_with_flags (dynobj, ".plt", flags);
if (splt == NULL
- || ! bfd_set_section_flags (dynobj, splt,
- (SEC_ALLOC
- | SEC_LOAD
- | SEC_HAS_CONTENTS
- | SEC_IN_MEMORY
- | SEC_LINKER_CREATED
- | SEC_READONLY
- | SEC_CODE))
|| ! bfd_set_section_alignment (dynobj, splt, 1))
return FALSE;
}
@@ -936,7 +889,7 @@ m32c_elf_object_p (bfd *abfd)
#ifdef DEBUG
-static void
+void
dump_symtab (bfd * abfd, void *internal_syms, void *external_syms)
{
size_t locsymcount;
@@ -977,7 +930,6 @@ dump_symtab (bfd * abfd, void *internal_syms, void *external_syms)
{
case STT_FUNC: st_info_str = "STT_FUNC";
case STT_SECTION: st_info_str = "STT_SECTION";
- case STT_SRELC: st_info_str = "STT_SRELC";
case STT_FILE: st_info_str = "STT_FILE";
case STT_OBJECT: st_info_str = "STT_OBJECT";
case STT_TLS: st_info_str = "STT_TLS";
@@ -1022,7 +974,7 @@ dump_symtab (bfd * abfd, void *internal_syms, void *external_syms)
free (external_syms);
}
-static char *
+char *
m32c_get_reloc (long reloc)
{
if (0 <= reloc && reloc < R_M32C_max)
@@ -2055,8 +2007,6 @@ m32c_elf_relax_delete_bytes
#define elf_info_to_howto m32c_info_to_howto_rela
#define elf_backend_object_p m32c_elf_object_p
#define elf_backend_relocate_section m32c_elf_relocate_section
-#define elf_backend_gc_mark_hook m32c_elf_gc_mark_hook
-#define elf_backend_gc_sweep_hook m32c_elf_gc_sweep_hook
#define elf_backend_check_relocs m32c_elf_check_relocs
#define elf_backend_object_p m32c_elf_object_p
#define elf_symbol_leading_char ('_')
@@ -2068,6 +2018,7 @@ m32c_elf_relax_delete_bytes
#define elf_backend_can_gc_sections 1
#define bfd_elf32_bfd_reloc_type_lookup m32c_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup m32c_reloc_name_lookup
#define bfd_elf32_bfd_relax_section m32c_elf_relax_section
#define bfd_elf32_bfd_set_private_flags m32c_elf_set_private_flags
#define bfd_elf32_bfd_merge_private_bfd_data m32c_elf_merge_private_bfd_data
diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c
index 6c42c2f5b60d..31151fc1a47f 100644
--- a/bfd/elf32-m32r.c
+++ b/bfd/elf32-m32r.c
@@ -1,6 +1,6 @@
/* M32R-specific support for 32-bit ELF.
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- 2006 Free Software Foundation, Inc.
+ 2006, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/m32r.h"
@@ -1254,6 +1254,22 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (m32r_elf_howto_table) / sizeof (m32r_elf_howto_table[0]);
+ i++)
+ if (m32r_elf_howto_table[i].name != NULL
+ && strcasecmp (m32r_elf_howto_table[i].name, r_name) == 0)
+ return &m32r_elf_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an M32R ELF reloc. */
static void
@@ -1817,7 +1833,6 @@ m32r_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
struct elf_m32r_dyn_relocs *p;
bfd *dynobj;
asection *s;
- unsigned int power_of_two;
#ifdef DEBUG_PIC
printf ("m32r_elf_adjust_dynamic_symbol()\n");
@@ -1945,28 +1960,7 @@ m32r_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 3)
- power_of_two = 3;
-
- /* Apply the required alignment. */
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (dynobj, s))
- {
- if (! bfd_set_section_alignment (dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Allocate space in .plt, .got and associated reloc sections for
@@ -2309,7 +2303,7 @@ m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
/* Strip this section if we don't need it; see the
comment below. */
}
- else if (strncmp (bfd_get_section_name (dynobj, s), ".rela", 5) == 0)
+ else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
{
if (s->size != 0 && s != htab->srelplt)
relocs = TRUE;
@@ -2477,6 +2471,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
`r_addend'. */
bfd_vma addend = rel->r_addend;
bfd_vma offset = rel->r_offset;
+ bfd_vma relocation;
Elf_Internal_Sym *sym;
asection *sec;
const char *sym_name;
@@ -2509,27 +2504,152 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
howto = m32r_elf_howto_table + r_type;
r_symndx = ELF32_R_SYM (rel->r_info);
- if (info->relocatable && use_rel)
+ sym = NULL;
+ sec = NULL;
+ h = NULL;
+
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ /* Local symbol. */
+ sym = local_syms + r_symndx;
+ sec = local_sections[r_symndx];
+ sym_name = "<local symbol>";
+
+ if (!use_rel)
+ {
+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ addend = rel->r_addend;
+ }
+ else
+ {
+ relocation = (sec->output_section->vma
+ + sec->output_offset
+ + sym->st_value);
+ }
+ }
+ else
+ {
+ /* External symbol. */
+ relocation = 0;
+
+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ sym_name = h->root.root.string;
+
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ {
+ bfd_boolean dyn;
+ sec = h->root.u.def.section;
+
+ dyn = htab->root.dynamic_sections_created;
+ sec = h->root.u.def.section;
+ if (r_type == R_M32R_GOTPC24
+ || (r_type == R_M32R_GOTPC_HI_ULO
+ || r_type == R_M32R_GOTPC_HI_SLO
+ || r_type == R_M32R_GOTPC_LO)
+ || (r_type == R_M32R_26_PLTREL
+ && h->plt.offset != (bfd_vma) -1)
+ || ((r_type == R_M32R_GOT24
+ || r_type == R_M32R_GOT16_HI_ULO
+ || r_type == R_M32R_GOT16_HI_SLO
+ || r_type == R_M32R_GOT16_LO)
+ && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
+ info->shared, h)
+ && (! info->shared
+ || (! info->symbolic && h->dynindx != -1)
+ || !h->def_regular))
+ || (info->shared
+ && ((! info->symbolic && h->dynindx != -1)
+ || !h->def_regular)
+ && (((r_type == R_M32R_16_RELA
+ || r_type == R_M32R_32_RELA
+ || r_type == R_M32R_24_RELA
+ || r_type == R_M32R_HI16_ULO_RELA
+ || r_type == R_M32R_HI16_SLO_RELA
+ || r_type == R_M32R_LO16_RELA)
+ && !h->forced_local)
+ || r_type == R_M32R_REL32
+ || r_type == R_M32R_10_PCREL_RELA
+ || r_type == R_M32R_18_PCREL_RELA
+ || r_type == R_M32R_26_PCREL_RELA)
+ && ((input_section->flags & SEC_ALLOC) != 0
+ /* DWARF will emit R_M32R_16(24,32) relocations
+ in its sections against symbols defined
+ externally in shared libraries. We can't do
+ anything with them here. */
+ || ((input_section->flags & SEC_DEBUGGING) != 0
+ && h->def_dynamic))))
+ {
+ /* In these cases, we don't need the relocation
+ value. We check specially because in some
+ obscure cases sec->output_section will be NULL. */
+ }
+ else if (sec->output_section != NULL)
+ relocation = (h->root.u.def.value
+ + sec->output_section->vma
+ + sec->output_offset);
+ else if (!info->relocatable)
+ {
+ (*_bfd_error_handler)
+ (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
+ input_bfd,
+ input_section,
+ (long) rel->r_offset,
+ howto->name,
+ h->root.root.string);
+ }
+ }
+ else if (h->root.type == bfd_link_hash_undefweak)
+ ;
+ else if (info->unresolved_syms_in_objects == RM_IGNORE
+ && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
+ ;
+ else if (!info->relocatable)
+ {
+ if (! ((*info->callbacks->undefined_symbol)
+ (info, h->root.root.string, input_bfd,
+ input_section, offset,
+ (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
+ || ELF_ST_VISIBILITY (h->other)))))
+ return FALSE;
+ }
+ }
+
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable && !use_rel)
{
/* This is a relocatable link. We don't have to change
anything, unless the reloc is against a section symbol,
in which case we have to adjust according to where the
section symbol winds up in the output section. */
- sec = NULL;
- if (r_symndx >= symtab_hdr->sh_info)
- /* External symbol. */
- continue;
+ if (sym != NULL && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ rel->r_addend += sec->output_offset;
+ continue;
+ }
- /* Local symbol. */
- sym = local_syms + r_symndx;
- sym_name = "<local symbol>";
- /* STT_SECTION: symbol is associated with a section. */
- if (ELF_ST_TYPE (sym->st_info) != STT_SECTION)
- /* Symbol isn't associated with a section. Nothing to do. */
+ if (info->relocatable && use_rel)
+ {
+ /* This is a relocatable link. We don't have to change
+ anything, unless the reloc is against a section symbol,
+ in which case we have to adjust according to where the
+ section symbol winds up in the output section. */
+ if (sym == NULL || ELF_ST_TYPE (sym->st_info) != STT_SECTION)
continue;
- sec = local_sections[r_symndx];
- addend += sec->output_offset + sym->st_value;
+ addend += sec->output_offset;
/* If partial_inplace, we need to store any additional addend
back in the section. */
@@ -2567,140 +2687,6 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
}
else
{
- bfd_vma relocation;
-
- /* This is a final link. */
- sym = NULL;
- sec = NULL;
- h = NULL;
-
- if (r_symndx < symtab_hdr->sh_info)
- {
- /* Local symbol. */
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
- sym_name = "<local symbol>";
-
- if (!use_rel)
- {
- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- addend = rel->r_addend;
-
- if (info->relocatable)
- {
- /* This is a relocatable link. We don't have to change
- anything, unless the reloc is against a section symbol,
- in which case we have to adjust according to where the
- section symbol winds up in the output section. */
- if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
- rel->r_addend += sec->output_offset + sym->st_value;
-
- continue;
- }
- }
- else
- {
- relocation = (sec->output_section->vma
- + sec->output_offset
- + sym->st_value);
- }
- }
- else
- {
- /* External symbol. */
- if (info->relocatable && !use_rel)
- continue;
-
- h = sym_hashes[r_symndx - symtab_hdr->sh_info];
- while (h->root.type == bfd_link_hash_indirect
- || h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
- sym_name = h->root.root.string;
-
- if (h->root.type == bfd_link_hash_defined
- || h->root.type == bfd_link_hash_defweak)
- {
- bfd_boolean dyn;
- sec = h->root.u.def.section;
-
- dyn = htab->root.dynamic_sections_created;
- sec = h->root.u.def.section;
- if (r_type == R_M32R_GOTPC24
- || (r_type == R_M32R_GOTPC_HI_ULO
- || r_type == R_M32R_GOTPC_HI_SLO
- || r_type == R_M32R_GOTPC_LO)
- || (r_type == R_M32R_26_PLTREL
- && h->plt.offset != (bfd_vma) -1)
- || ((r_type == R_M32R_GOT24
- || r_type == R_M32R_GOT16_HI_ULO
- || r_type == R_M32R_GOT16_HI_SLO
- || r_type == R_M32R_GOT16_LO)
- && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
- info->shared, h)
- && (! info->shared
- || (! info->symbolic && h->dynindx != -1)
- || !h->def_regular))
- || (info->shared
- && ((! info->symbolic && h->dynindx != -1)
- || !h->def_regular)
- && (((r_type == R_M32R_16_RELA
- || r_type == R_M32R_32_RELA
- || r_type == R_M32R_24_RELA
- || r_type == R_M32R_HI16_ULO_RELA
- || r_type == R_M32R_HI16_SLO_RELA
- || r_type == R_M32R_LO16_RELA)
- && !h->forced_local)
- || r_type == R_M32R_REL32
- || r_type == R_M32R_10_PCREL_RELA
- || r_type == R_M32R_18_PCREL_RELA
- || r_type == R_M32R_26_PCREL_RELA)
- && ((input_section->flags & SEC_ALLOC) != 0
- /* DWARF will emit R_M32R_16(24,32) relocations
- in its sections against symbols defined
- externally in shared libraries. We can't do
- anything with them here. */
- || ((input_section->flags & SEC_DEBUGGING) != 0
- && h->def_dynamic))))
- {
- /* In these cases, we don't need the relocation
- value. We check specially because in some
- obscure cases sec->output_section will be NULL. */
- relocation = 0;
- }
- else if (sec->output_section == NULL)
- {
- (*_bfd_error_handler)
- (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
- input_bfd,
- input_section,
- (long) rel->r_offset,
- howto->name,
- h->root.root.string);
-
- relocation = 0;
- }
- else
- relocation = (h->root.u.def.value
- + sec->output_section->vma
- + sec->output_offset);
- }
- else if (h->root.type == bfd_link_hash_undefweak)
- relocation = 0;
- else if (info->unresolved_syms_in_objects == RM_IGNORE
- && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
- relocation = 0;
- else
- {
- if (! ((*info->callbacks->undefined_symbol)
- (info, h->root.root.string, input_bfd,
- input_section, offset,
- (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
- || ELF_ST_VISIBILITY (h->other)))))
- return FALSE;
- relocation = 0;
- }
- }
-
/* Sanity check the address. */
if (offset > high_address)
{
@@ -2933,7 +2919,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (input_bfd,
input_section),
name + 5) == 0);
@@ -3637,40 +3623,22 @@ m32r_elf_print_private_bfd_data (bfd *abfd, void * ptr)
static asection *
m32r_elf_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
Elf_Internal_Rela *rel,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
+ switch (ELF32_R_TYPE (rel->r_info))
{
case R_M32R_GNU_VTINHERIT:
case R_M32R_GNU_VTENTRY:
case R_M32R_RELA_GNU_VTINHERIT:
case R_M32R_RELA_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ return NULL;
+ }
- return NULL;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
static bfd_boolean
@@ -3990,7 +3958,7 @@ m32r_elf_check_relocs (bfd *abfd,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
name + 5) == 0);
@@ -4082,9 +4050,9 @@ m32r_elf_check_relocs (bfd *abfd,
static const struct bfd_elf_special_section m32r_elf_special_sections[] =
{
- { ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
- { ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { NULL, 0, 0, 0, 0 }
};
static bfd_boolean
@@ -4159,6 +4127,8 @@ m32r_elf_reloc_type_class (const Elf_Internal_Rela *rela)
#define elf_backend_create_dynamic_sections m32r_elf_create_dynamic_sections
#define bfd_elf32_bfd_link_hash_table_create m32r_elf_link_hash_table_create
#define elf_backend_size_dynamic_sections m32r_elf_size_dynamic_sections
+#define elf_backend_omit_section_dynsym \
+ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
#define elf_backend_finish_dynamic_sections m32r_elf_finish_dynamic_sections
#define elf_backend_adjust_dynamic_symbol m32r_elf_adjust_dynamic_symbol
#define elf_backend_finish_dynamic_symbol m32r_elf_finish_dynamic_symbol
diff --git a/bfd/elf32-m68hc11.c b/bfd/elf32-m68hc11.c
index d61590ff4861..00253978df0b 100644
--- a/bfd/elf32-m68hc11.c
+++ b/bfd/elf32-m68hc11.c
@@ -1,5 +1,5 @@
/* Motorola 68HC11-specific support for 32-bit ELF
- Copyright 1999, 2000, 2001, 2002, 2003, 2004
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by Stephane Carrez (stcarrez@nerim.fr)
(Heavily copied from the D10V port by Martin Hunt (hunt@cygnus.com))
@@ -20,8 +20,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -358,6 +358,23 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (elf_m68hc11_howto_table)
+ / sizeof (elf_m68hc11_howto_table[0]));
+ i++)
+ if (elf_m68hc11_howto_table[i].name != NULL
+ && strcasecmp (elf_m68hc11_howto_table[i].name, r_name) == 0)
+ return &elf_m68hc11_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an M68HC11 ELF reloc. */
static void
@@ -1259,11 +1276,11 @@ m68hc11_elf_relax_delete_bytes (bfd *abfd, asection *sec,
vectors. */
static const struct bfd_elf_special_section elf32_m68hc11_special_sections[] =
{
- { ".eeprom", 7, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".page0", 6, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".softregs", 9, 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
- { ".vectors", 8, 0, SHT_PROGBITS, SHF_ALLOC },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".eeprom"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".page0"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".softregs"), 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".vectors"), 0, SHT_PROGBITS, SHF_ALLOC },
+ { NULL, 0, 0, 0, 0 }
};
#define ELF_ARCH bfd_arch_m68hc11
@@ -1276,8 +1293,6 @@ static const struct bfd_elf_special_section elf32_m68hc11_special_sections[] =
#define elf_info_to_howto 0
#define elf_info_to_howto_rel m68hc11_info_to_howto_rel
#define bfd_elf32_bfd_relax_section m68hc11_elf_relax_section
-#define elf_backend_gc_mark_hook elf32_m68hc11_gc_mark_hook
-#define elf_backend_gc_sweep_hook elf32_m68hc11_gc_sweep_hook
#define elf_backend_check_relocs elf32_m68hc11_check_relocs
#define elf_backend_relocate_section elf32_m68hc11_relocate_section
#define elf_backend_add_symbol_hook elf32_m68hc11_add_symbol_hook
diff --git a/bfd/elf32-m68hc12.c b/bfd/elf32-m68hc12.c
index b52f3fff853f..fca2d659e2a9 100644
--- a/bfd/elf32-m68hc12.c
+++ b/bfd/elf32-m68hc12.c
@@ -1,5 +1,6 @@
/* Motorola 68HC12-specific support for 32-bit ELF
- Copyright 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Contributed by Stephane Carrez (stcarrez@nerim.fr)
(Heavily copied from the D10V port by Martin Hunt (hunt@cygnus.com))
@@ -19,8 +20,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -406,6 +407,23 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (elf_m68hc11_howto_table)
+ / sizeof (elf_m68hc11_howto_table[0]));
+ i++)
+ if (elf_m68hc11_howto_table[i].name != NULL
+ && strcasecmp (elf_m68hc11_howto_table[i].name, r_name) == 0)
+ return &elf_m68hc11_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an M68HC11 ELF reloc. */
static void
@@ -537,11 +555,11 @@ m68hc12_elf_set_mach_from_flags (bfd *abfd)
vectors. */
static const struct bfd_elf_special_section elf32_m68hc12_special_sections[] =
{
- { ".eeprom", 7, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".page0", 6, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".softregs", 9, 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
- { ".vectors", 8, 0, SHT_PROGBITS, SHF_ALLOC },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".eeprom"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".page0"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".softregs"), 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".vectors"), 0, SHT_PROGBITS, SHF_ALLOC },
+ { NULL, 0, 0, 0, 0 }
};
#define ELF_ARCH bfd_arch_m68hc12
@@ -553,8 +571,6 @@ static const struct bfd_elf_special_section elf32_m68hc12_special_sections[] =
#define elf_info_to_howto 0
#define elf_info_to_howto_rel m68hc11_info_to_howto_rel
-#define elf_backend_gc_mark_hook elf32_m68hc11_gc_mark_hook
-#define elf_backend_gc_sweep_hook elf32_m68hc11_gc_sweep_hook
#define elf_backend_check_relocs elf32_m68hc11_check_relocs
#define elf_backend_relocate_section elf32_m68hc11_relocate_section
#define elf_backend_object_p m68hc12_elf_set_mach_from_flags
diff --git a/bfd/elf32-m68hc1x.c b/bfd/elf32-m68hc1x.c
index e7fb944b26b3..84e3b6e43a3c 100644
--- a/bfd/elf32-m68hc1x.c
+++ b/bfd/elf32-m68hc1x.c
@@ -1,5 +1,5 @@
/* Motorola 68HC11/HC12-specific support for 32-bit ELF
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by Stephane Carrez (stcarrez@nerim.fr)
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -810,48 +810,6 @@ m68hc11_elf_special_reloc (bfd *abfd ATTRIBUTE_UNUSED,
abort();
}
-asection *
-elf32_m68hc11_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela *rel,
- struct elf_link_hash_entry *h,
- Elf_Internal_Sym *sym)
-{
- if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
-}
-
-bfd_boolean
-elf32_m68hc11_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- asection *sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
-{
- /* We don't use got and plt entries for 68hc11/68hc12. */
- return TRUE;
-}
-
/* Look through the relocs for a section during the first phase.
Since we don't do .gots or .plts, we just need to consider the
virtual table relocs for gc. */
@@ -915,86 +873,6 @@ elf32_m68hc11_check_relocs (bfd *abfd, struct bfd_link_info *info,
return TRUE;
}
-static bfd_boolean
-m68hc11_get_relocation_value (bfd *input_bfd, struct bfd_link_info *info,
- asection *input_section,
- asection **local_sections,
- Elf_Internal_Sym *local_syms,
- Elf_Internal_Rela *rel,
- const char **name,
- bfd_vma *relocation, bfd_boolean *is_far)
-{
- Elf_Internal_Shdr *symtab_hdr;
- struct elf_link_hash_entry **sym_hashes;
- unsigned long r_symndx;
- asection *sec;
- struct elf_link_hash_entry *h;
- Elf_Internal_Sym *sym;
- const char* stub_name = 0;
-
- symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
- sym_hashes = elf_sym_hashes (input_bfd);
-
- r_symndx = ELF32_R_SYM (rel->r_info);
-
- /* This is a final link. */
- h = NULL;
- sym = NULL;
- sec = NULL;
- if (r_symndx < symtab_hdr->sh_info)
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
- *relocation = (sec->output_section->vma
- + sec->output_offset
- + sym->st_value);
- *is_far = (sym && (sym->st_other & STO_M68HC12_FAR));
- if (*is_far)
- stub_name = (bfd_elf_string_from_elf_section
- (input_bfd, symtab_hdr->sh_link,
- sym->st_name));
- }
- else
- {
- bfd_boolean unresolved_reloc, warned;
-
- RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
- r_symndx, symtab_hdr, sym_hashes,
- h, sec, *relocation, unresolved_reloc, warned);
-
- *is_far = (h && (h->other & STO_M68HC12_FAR));
- stub_name = h->root.root.string;
- }
-
- if (h != NULL)
- *name = h->root.root.string;
- else
- {
- *name = (bfd_elf_string_from_elf_section
- (input_bfd, symtab_hdr->sh_link, sym->st_name));
- if (*name == NULL || **name == '\0')
- *name = bfd_section_name (input_bfd, sec);
- }
-
- if (*is_far && ELF32_R_TYPE (rel->r_info) == R_M68HC11_16)
- {
- struct elf32_m68hc11_stub_hash_entry* stub;
- struct m68hc11_elf_link_hash_table *htab;
-
- htab = m68hc11_elf_hash_table (info);
- stub = m68hc12_stub_hash_lookup (htab->stub_hash_table,
- *name, FALSE, FALSE);
- if (stub)
- {
- *relocation = stub->stub_offset
- + stub->stub_sec->output_section->vma
- + stub->stub_sec->output_offset;
- *is_far = FALSE;
- }
- }
- return TRUE;
-}
-
/* Relocate a 68hc11/68hc12 ELF section. */
bfd_boolean
elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
@@ -1035,6 +913,8 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
bfd_vma insn_addr;
bfd_vma insn_page;
bfd_boolean is_far = FALSE;
+ struct elf_link_hash_entry *h;
+ const char* stub_name = 0;
r_symndx = ELF32_R_SYM (rel->r_info);
r_type = ELF32_R_TYPE (rel->r_info);
@@ -1043,30 +923,86 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
|| r_type == R_M68HC11_GNU_VTINHERIT )
continue;
+ (*ebd->elf_info_to_howto_rel) (input_bfd, &arel, rel);
+ howto = arel.howto;
+
+ h = NULL;
+ sym = NULL;
+ sec = NULL;
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ sym = local_syms + r_symndx;
+ sec = local_sections[r_symndx];
+ relocation = (sec->output_section->vma
+ + sec->output_offset
+ + sym->st_value);
+ is_far = (sym && (sym->st_other & STO_M68HC12_FAR));
+ if (is_far)
+ stub_name = (bfd_elf_string_from_elf_section
+ (input_bfd, symtab_hdr->sh_link,
+ sym->st_name));
+ }
+ else
+ {
+ bfd_boolean unresolved_reloc, warned;
+
+ RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
+ r_symndx, symtab_hdr, sym_hashes,
+ h, sec, relocation, unresolved_reloc,
+ warned);
+
+ is_far = (h && (h->other & STO_M68HC12_FAR));
+ stub_name = h->root.root.string;
+ }
+
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
if (info->relocatable)
{
/* This is a relocatable link. We don't have to change
anything, unless the reloc is against a section symbol,
in which case we have to adjust according to where the
section symbol winds up in the output section. */
- if (r_symndx < symtab_hdr->sh_info)
- {
- sym = local_syms + r_symndx;
- if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
- {
- sec = local_sections[r_symndx];
- rel->r_addend += sec->output_offset + sym->st_value;
- }
- }
-
+ if (sym != NULL && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ rel->r_addend += sec->output_offset;
continue;
}
- (*ebd->elf_info_to_howto_rel) (input_bfd, &arel, rel);
- howto = arel.howto;
- m68hc11_get_relocation_value (input_bfd, info, input_section,
- local_sections, local_syms,
- rel, &name, &relocation, &is_far);
+ if (h != NULL)
+ name = h->root.root.string;
+ else
+ {
+ name = (bfd_elf_string_from_elf_section
+ (input_bfd, symtab_hdr->sh_link, sym->st_name));
+ if (name == NULL || *name == '\0')
+ name = bfd_section_name (input_bfd, sec);
+ }
+
+ if (is_far && ELF32_R_TYPE (rel->r_info) == R_M68HC11_16)
+ {
+ struct elf32_m68hc11_stub_hash_entry* stub;
+ struct m68hc11_elf_link_hash_table *htab;
+
+ htab = m68hc11_elf_hash_table (info);
+ stub = m68hc12_stub_hash_lookup (htab->stub_hash_table,
+ name, FALSE, FALSE);
+ if (stub)
+ {
+ relocation = stub->stub_offset
+ + stub->stub_sec->output_section->vma
+ + stub->stub_sec->output_offset;
+ is_far = FALSE;
+ }
+ }
/* Do the memory bank mapping. */
phys_addr = m68hc11_phys_addr (pinfo, relocation + rel->r_addend);
diff --git a/bfd/elf32-m68hc1x.h b/bfd/elf32-m68hc1x.h
index 402ae3e68b87..7cae2e8db7a3 100644
--- a/bfd/elf32-m68hc1x.h
+++ b/bfd/elf32-m68hc1x.h
@@ -1,5 +1,5 @@
/* Motorola 68HC11/68HC12-specific support for 32-bit ELF
- Copyright 2003, 2004 Free Software Foundation, Inc.
+ Copyright 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
Contributed by Stephane Carrez (stcarrez@nerim.fr)
This file is part of BFD, the Binary File Descriptor library.
@@ -159,14 +159,6 @@ bfd_reloc_status_type m68hc11_elf_special_reloc
asymbol *symbol, void *data, asection *input_section,
bfd *output_bfd, char **error_message);
-/* GC mark and sweep. */
-asection *elf32_m68hc11_gc_mark_hook
- (asection *sec, struct bfd_link_info *info,
- Elf_Internal_Rela *rel, struct elf_link_hash_entry *h,
- Elf_Internal_Sym *sym);
-bfd_boolean elf32_m68hc11_gc_sweep_hook
- (bfd *abfd, struct bfd_link_info *info,
- asection *sec, const Elf_Internal_Rela *relocs);
bfd_boolean elf32_m68hc11_check_relocs
(bfd * abfd, struct bfd_link_info * info,
asection * sec, const Elf_Internal_Rela * relocs);
diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c
index df988a849663..82fad32fdd2a 100644
--- a/bfd/elf32-m68k.c
+++ b/bfd/elf32-m68k.c
@@ -1,6 +1,6 @@
/* Motorola 68k series support for 32-bit ELF
Copyright 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -37,12 +37,6 @@ static struct bfd_link_hash_table *elf_m68k_link_hash_table_create
static bfd_boolean elf_m68k_check_relocs
PARAMS ((bfd *, struct bfd_link_info *, asection *,
const Elf_Internal_Rela *));
-static asection *elf_m68k_gc_mark_hook
- PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *,
- struct elf_link_hash_entry *, Elf_Internal_Sym *));
-static bfd_boolean elf_m68k_gc_sweep_hook
- PARAMS ((bfd *, struct bfd_link_info *, asection *,
- const Elf_Internal_Rela *));
static bfd_boolean elf_m68k_adjust_dynamic_symbol
PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
static bfd_boolean elf_m68k_size_dynamic_sections
@@ -180,7 +174,21 @@ reloc_type_lookup (abfd, code)
return 0;
}
+static reloc_howto_type *
+reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof (howto_table) / sizeof (howto_table[0]); i++)
+ if (howto_table[i].name != NULL
+ && strcasecmp (howto_table[i].name, r_name) == 0)
+ return &howto_table[i];
+
+ return NULL;
+}
+
#define bfd_elf32_bfd_reloc_type_lookup reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup reloc_name_lookup
#define ELF_ARCH bfd_arch_m68k
/* Functions for the m68k ELF linker. */
@@ -190,6 +198,40 @@ reloc_type_lookup (abfd, code)
#define ELF_DYNAMIC_INTERPRETER "/usr/lib/libc.so.1"
+/* Describes one of the various PLT styles. */
+
+struct elf_m68k_plt_info
+{
+ /* The size of each PLT entry. */
+ bfd_vma size;
+
+ /* The template for the first PLT entry. */
+ const bfd_byte *plt0_entry;
+
+ /* Offsets of fields in PLT0_ENTRY that require R_68K_PC32 relocations.
+ The comments by each member indicate the value that the relocation
+ is against. */
+ struct {
+ unsigned int got4; /* .got + 4 */
+ unsigned int got8; /* .got + 8 */
+ } plt0_relocs;
+
+ /* The template for a symbol's PLT entry. */
+ const bfd_byte *symbol_entry;
+
+ /* Offsets of fields in SYMBOL_ENTRY that require R_68K_PC32 relocations.
+ The comments by each member indicate the value that the relocation
+ is against. */
+ struct {
+ unsigned int got; /* the symbol's .got.plt entry */
+ unsigned int plt; /* .plt */
+ } symbol_relocs;
+
+ /* The offset of the resolver stub from the start of SYMBOL_ENTRY.
+ The stub starts with "move.l #relocoffset,%d0". */
+ bfd_vma symbol_resolve_entry;
+};
+
/* The size in bytes of an entry in the procedure linkage table. */
#define PLT_ENTRY_SIZE 20
@@ -200,9 +242,9 @@ reloc_type_lookup (abfd, code)
static const bfd_byte elf_m68k_plt0_entry[PLT_ENTRY_SIZE] =
{
0x2f, 0x3b, 0x01, 0x70, /* move.l (%pc,addr),-(%sp) */
- 0, 0, 0, 0, /* replaced with offset to .got + 4. */
+ 0, 0, 0, 2, /* + (.got + 4) - . */
0x4e, 0xfb, 0x01, 0x71, /* jmp ([%pc,addr]) */
- 0, 0, 0, 0, /* replaced with offset to .got + 8. */
+ 0, 0, 0, 2, /* + (.got + 8) - . */
0, 0, 0, 0 /* pad out to 20 bytes. */
};
@@ -211,71 +253,118 @@ static const bfd_byte elf_m68k_plt0_entry[PLT_ENTRY_SIZE] =
static const bfd_byte elf_m68k_plt_entry[PLT_ENTRY_SIZE] =
{
0x4e, 0xfb, 0x01, 0x71, /* jmp ([%pc,symbol@GOTPC]) */
- 0, 0, 0, 0, /* replaced with offset to symbol's .got entry. */
+ 0, 0, 0, 2, /* + (.got.plt entry) - . */
0x2f, 0x3c, /* move.l #offset,-(%sp) */
- 0, 0, 0, 0, /* replaced with offset into relocation table. */
+ 0, 0, 0, 0, /* + reloc index */
0x60, 0xff, /* bra.l .plt */
- 0, 0, 0, 0 /* replaced with offset to start of .plt. */
+ 0, 0, 0, 0 /* + .plt - . */
};
+static const struct elf_m68k_plt_info elf_m68k_plt_info = {
+ PLT_ENTRY_SIZE,
+ elf_m68k_plt0_entry, { 4, 12 },
+ elf_m68k_plt_entry, { 4, 16 }, 8
+};
-#define CFV4E_PLT_ENTRY_SIZE 24
-
-#define CFV4E_FLAG(abfd) (elf_elfheader (abfd)->e_flags & EF_M68K_CFV4E)
+#define ISAB_PLT_ENTRY_SIZE 24
-static const bfd_byte elf_cfv4e_plt0_entry[CFV4E_PLT_ENTRY_SIZE] =
+static const bfd_byte elf_isab_plt0_entry[ISAB_PLT_ENTRY_SIZE] =
{
- 0x20, 0x3c,
- 0, 0, 0, 0, /* Replaced with offset to .got + 4. */
- 0x2f, 0x3b, 0x08, 0xfa, /* move.l (%pc,addr),-(%sp) */
- 0x20, 0x3c,
- 0, 0, 0, 0, /* Replaced with offset to .got + 8. */
- 0x20, 0x7b, 0x08, 0x00, /* move.l (%pc,%d0:l), %a0 */
+ 0x20, 0x3c, /* move.l #offset,%d0 */
+ 0, 0, 0, 0, /* + (.got + 4) - . */
+ 0x2f, 0x3b, 0x08, 0xfa, /* move.l (-6,%pc,%d0:l),-(%sp) */
+ 0x20, 0x3c, /* move.l #offset,%d0 */
+ 0, 0, 0, 0, /* + (.got + 8) - . */
+ 0x20, 0x7b, 0x08, 0xfa, /* move.l (-6,%pc,%d0:l), %a0 */
0x4e, 0xd0, /* jmp (%a0) */
0x4e, 0x71 /* nop */
};
/* Subsequent entries in a procedure linkage table look like this. */
-static const bfd_byte elf_cfv4e_plt_entry[CFV4E_PLT_ENTRY_SIZE] =
+static const bfd_byte elf_isab_plt_entry[ISAB_PLT_ENTRY_SIZE] =
{
- 0x20, 0x3c,
- 0, 0, 0, 0, /* Replaced with offset to symbol's .got entry. */
- 0x20, 0x7b, 0x08, 0x00, /* move.l (%pc,%d0:l), %a0 */
+ 0x20, 0x3c, /* move.l #offset,%d0 */
+ 0, 0, 0, 0, /* + (.got.plt entry) - . */
+ 0x20, 0x7b, 0x08, 0xfa, /* move.l (-6,%pc,%d0:l), %a0 */
0x4e, 0xd0, /* jmp (%a0) */
0x2f, 0x3c, /* move.l #offset,-(%sp) */
- 0, 0, 0, 0, /* Replaced with offset into relocation table. */
+ 0, 0, 0, 0, /* + reloc index */
0x60, 0xff, /* bra.l .plt */
- 0, 0, 0, 0 /* Replaced with offset to start of .plt. */
+ 0, 0, 0, 0 /* + .plt - . */
};
-#define CPU32_FLAG(abfd) (elf_elfheader (abfd)->e_flags & EF_M68K_CPU32)
+static const struct elf_m68k_plt_info elf_isab_plt_info = {
+ ISAB_PLT_ENTRY_SIZE,
+ elf_isab_plt0_entry, { 2, 12 },
+ elf_isab_plt_entry, { 2, 20 }, 12
+};
-#define PLT_CPU32_ENTRY_SIZE 24
+#define ISAC_PLT_ENTRY_SIZE 24
+
+static const bfd_byte elf_isac_plt0_entry[ISAC_PLT_ENTRY_SIZE] =
+{
+ 0x20, 0x3c, /* move.l #offset,%d0 */
+ 0, 0, 0, 0, /* replaced with .got + 4 - . */
+ 0x2e, 0xbb, 0x08, 0xfa, /* move.l (-6,%pc,%d0:l),(%sp) */
+ 0x20, 0x3c, /* move.l #offset,%d0 */
+ 0, 0, 0, 0, /* replaced with .got + 8 - . */
+ 0x20, 0x7b, 0x08, 0xfa, /* move.l (-6,%pc,%d0:l), %a0 */
+ 0x4e, 0xd0, /* jmp (%a0) */
+ 0x4e, 0x71 /* nop */
+};
+
+/* Subsequent entries in a procedure linkage table look like this. */
+
+static const bfd_byte elf_isac_plt_entry[ISAC_PLT_ENTRY_SIZE] =
+{
+ 0x20, 0x3c, /* move.l #offset,%d0 */
+ 0, 0, 0, 0, /* replaced with (.got entry) - . */
+ 0x20, 0x7b, 0x08, 0xfa, /* move.l (-6,%pc,%d0:l), %a0 */
+ 0x4e, 0xd0, /* jmp (%a0) */
+ 0x2f, 0x3c, /* move.l #offset,-(%sp) */
+ 0, 0, 0, 0, /* replaced with offset into relocation table */
+ 0x61, 0xff, /* bsr.l .plt */
+ 0, 0, 0, 0 /* replaced with .plt - . */
+};
+
+static const struct elf_m68k_plt_info elf_isac_plt_info = {
+ ISAC_PLT_ENTRY_SIZE,
+ elf_isac_plt0_entry, { 2, 12},
+ elf_isac_plt_entry, { 2, 20 }, 12
+};
+
+#define CPU32_PLT_ENTRY_SIZE 24
/* Procedure linkage table entries for the cpu32 */
-static const bfd_byte elf_cpu32_plt0_entry[PLT_CPU32_ENTRY_SIZE] =
+static const bfd_byte elf_cpu32_plt0_entry[CPU32_PLT_ENTRY_SIZE] =
{
0x2f, 0x3b, 0x01, 0x70, /* move.l (%pc,addr),-(%sp) */
- 0, 0, 0, 0, /* replaced with offset to .got + 4. */
+ 0, 0, 0, 2, /* + (.got + 4) - . */
0x22, 0x7b, 0x01, 0x70, /* moveal %pc@(0xc), %a1 */
- 0, 0, 0, 0, /* replace with offset to .got +8. */
+ 0, 0, 0, 2, /* + (.got + 8) - . */
0x4e, 0xd1, /* jmp %a1@ */
0, 0, 0, 0, /* pad out to 24 bytes. */
0, 0
};
-static const bfd_byte elf_cpu32_plt_entry[PLT_CPU32_ENTRY_SIZE] =
+static const bfd_byte elf_cpu32_plt_entry[CPU32_PLT_ENTRY_SIZE] =
{
0x22, 0x7b, 0x01, 0x70, /* moveal %pc@(0xc), %a1 */
- 0, 0, 0, 0, /* replaced with offset to symbol's .got entry. */
+ 0, 0, 0, 2, /* + (.got.plt entry) - . */
0x4e, 0xd1, /* jmp %a1@ */
0x2f, 0x3c, /* move.l #offset,-(%sp) */
- 0, 0, 0, 0, /* replaced with offset into relocation table. */
+ 0, 0, 0, 0, /* + reloc index */
0x60, 0xff, /* bra.l .plt */
- 0, 0, 0, 0, /* replaced with offset to start of .plt. */
+ 0, 0, 0, 0, /* + .plt - . */
0, 0
};
+static const struct elf_m68k_plt_info elf_cpu32_plt_info = {
+ CPU32_PLT_ENTRY_SIZE,
+ elf_cpu32_plt0_entry, { 4, 12 },
+ elf_cpu32_plt_entry, { 4, 18 }, 10
+};
+
/* The m68k linker needs to keep track of the number of relocs that it
decides to copy in check_relocs for each symbol. This is so that it
can discard PC relative relocs if it doesn't need them when linking
@@ -315,6 +404,10 @@ struct elf_m68k_link_hash_table
/* Small local sym to section mapping cache. */
struct sym_sec_cache sym_sec;
+
+ /* The PLT format used by this link, or NULL if the format has not
+ yet been chosen. */
+ const struct elf_m68k_plt_info *plt_info;
};
/* Get the m68k ELF linker hash table from a link_info structure. */
@@ -370,6 +463,7 @@ elf_m68k_link_hash_table_create (abfd)
}
ret->sym_sec.abfd = NULL;
+ ret->plt_info = NULL;
return &ret->root.root;
}
@@ -383,40 +477,45 @@ elf32_m68k_object_p (bfd *abfd)
unsigned features = 0;
flagword eflags = elf_elfheader (abfd)->e_flags;
- if (eflags & EF_M68K_M68000)
+ if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_M68000)
features |= m68000;
- else if (eflags & EF_M68K_CPU32)
+ else if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_CPU32)
features |= cpu32;
- else if (eflags & EF_M68K_ISA_MASK)
+ else if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_FIDO)
+ features |= fido_a;
+ else
{
- switch (eflags & EF_M68K_ISA_MASK)
+ switch (eflags & EF_M68K_CF_ISA_MASK)
{
- case EF_M68K_ISA_A_NODIV:
+ case EF_M68K_CF_ISA_A_NODIV:
features |= mcfisa_a;
break;
- case EF_M68K_ISA_A:
+ case EF_M68K_CF_ISA_A:
features |= mcfisa_a|mcfhwdiv;
break;
- case EF_M68K_ISA_A_PLUS:
+ case EF_M68K_CF_ISA_A_PLUS:
features |= mcfisa_a|mcfisa_aa|mcfhwdiv|mcfusp;
break;
- case EF_M68K_ISA_B_NOUSP:
+ case EF_M68K_CF_ISA_B_NOUSP:
features |= mcfisa_a|mcfisa_b|mcfhwdiv;
break;
- case EF_M68K_ISA_B:
+ case EF_M68K_CF_ISA_B:
features |= mcfisa_a|mcfisa_b|mcfhwdiv|mcfusp;
break;
+ case EF_M68K_CF_ISA_C:
+ features |= mcfisa_a|mcfisa_c|mcfhwdiv|mcfusp;
+ break;
}
- switch (eflags & EF_M68K_MAC_MASK)
+ switch (eflags & EF_M68K_CF_MAC_MASK)
{
- case EF_M68K_MAC:
+ case EF_M68K_CF_MAC:
features |= mcfmac;
break;
- case EF_M68K_EMAC:
+ case EF_M68K_CF_EMAC:
features |= mcfemac;
break;
}
- if (eflags & EF_M68K_FLOAT)
+ if (eflags & EF_M68K_CF_FLOAT)
features |= cfloat;
}
@@ -472,10 +571,27 @@ elf32_m68k_merge_private_bfd_data (ibfd, obfd)
else
{
out_flags = elf_elfheader (obfd)->e_flags;
- in_isa = (in_flags & EF_M68K_ISA_MASK);
- out_isa = (out_flags & EF_M68K_ISA_MASK);
+ unsigned int variant_mask;
+
+ if ((in_flags & EF_M68K_ARCH_MASK) == EF_M68K_M68000)
+ variant_mask = 0;
+ else if ((in_flags & EF_M68K_ARCH_MASK) == EF_M68K_CPU32)
+ variant_mask = 0;
+ else if ((in_flags & EF_M68K_ARCH_MASK) == EF_M68K_FIDO)
+ variant_mask = 0;
+ else
+ variant_mask = EF_M68K_CF_ISA_MASK;
+
+ in_isa = (in_flags & variant_mask);
+ out_isa = (out_flags & variant_mask);
if (in_isa > out_isa)
out_flags ^= in_isa ^ out_isa;
+ if (((in_flags & EF_M68K_ARCH_MASK) == EF_M68K_CPU32
+ && (out_flags & EF_M68K_ARCH_MASK) == EF_M68K_FIDO)
+ || ((in_flags & EF_M68K_ARCH_MASK) == EF_M68K_FIDO
+ && (out_flags & EF_M68K_ARCH_MASK) == EF_M68K_CPU32))
+ out_flags = EF_M68K_FIDO;
+ else
out_flags |= in_flags ^ in_isa;
}
elf_elfheader (obfd)->e_flags = out_flags;
@@ -502,58 +618,64 @@ elf32_m68k_print_private_bfd_data (abfd, ptr)
/* xgettext:c-format */
fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
- if (eflags & EF_M68K_CPU32)
- fprintf (file, " [cpu32]");
-
- if (eflags & EF_M68K_M68000)
+ if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_M68000)
fprintf (file, " [m68000]");
-
- if (eflags & EF_M68K_CFV4E)
- fprintf (file, " [cfv4e]");
-
- if (eflags & EF_M68K_ISA_MASK)
+ else if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_CPU32)
+ fprintf (file, " [cpu32]");
+ else if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_FIDO)
+ fprintf (file, " [fido]");
+ else
{
- char const *isa = _("unknown");
- char const *mac = _("unknown");
- char const *additional = "";
-
- switch (eflags & EF_M68K_ISA_MASK)
- {
- case EF_M68K_ISA_A_NODIV:
- isa = "A";
- additional = " [nodiv]";
- break;
- case EF_M68K_ISA_A:
- isa = "A";
- break;
- case EF_M68K_ISA_A_PLUS:
- isa = "A+";
- break;
- case EF_M68K_ISA_B_NOUSP:
- isa = "B";
- additional = " [nousp]";
- break;
- case EF_M68K_ISA_B:
- isa = "B";
- break;
- }
- fprintf (file, " [isa %s]%s", isa, additional);
- if (eflags & EF_M68K_FLOAT)
- fprintf (file, " [float]");
- switch (eflags & EF_M68K_MAC_MASK)
+ if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_CFV4E)
+ fprintf (file, " [cfv4e]");
+
+ if (eflags & EF_M68K_CF_ISA_MASK)
{
- case 0:
- mac = NULL;
- break;
- case EF_M68K_MAC:
- mac = "mac";
- break;
- case EF_M68K_EMAC:
- mac = "emac";
- break;
+ char const *isa = _("unknown");
+ char const *mac = _("unknown");
+ char const *additional = "";
+
+ switch (eflags & EF_M68K_CF_ISA_MASK)
+ {
+ case EF_M68K_CF_ISA_A_NODIV:
+ isa = "A";
+ additional = " [nodiv]";
+ break;
+ case EF_M68K_CF_ISA_A:
+ isa = "A";
+ break;
+ case EF_M68K_CF_ISA_A_PLUS:
+ isa = "A+";
+ break;
+ case EF_M68K_CF_ISA_B_NOUSP:
+ isa = "B";
+ additional = " [nousp]";
+ break;
+ case EF_M68K_CF_ISA_B:
+ isa = "B";
+ break;
+ case EF_M68K_CF_ISA_C:
+ isa = "C";
+ break;
+ }
+ fprintf (file, " [isa %s]%s", isa, additional);
+ if (eflags & EF_M68K_CF_FLOAT)
+ fprintf (file, " [float]");
+ switch (eflags & EF_M68K_CF_MAC_MASK)
+ {
+ case 0:
+ mac = NULL;
+ break;
+ case EF_M68K_CF_MAC:
+ mac = "mac";
+ break;
+ case EF_M68K_CF_EMAC:
+ mac = "emac";
+ break;
+ }
+ if (mac)
+ fprintf (file, " [%s]", mac);
}
- if (mac)
- fprintf (file, " [%s]", mac);
}
fputc ('\n', file);
@@ -812,7 +934,7 @@ elf_m68k_check_relocs (abfd, info, sec, relocs)
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
name + 5) == 0);
@@ -928,50 +1050,30 @@ elf_m68k_check_relocs (abfd, info, sec, relocs)
relocation. */
static asection *
-elf_m68k_gc_mark_hook (sec, info, rel, h, sym)
- asection *sec;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
- Elf_Internal_Rela *rel;
- struct elf_link_hash_entry *h;
- Elf_Internal_Sym *sym;
+elf_m68k_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_68K_GNU_VTINHERIT:
- case R_68K_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- default:
- break;
-
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_68K_GNU_VTINHERIT:
+ case R_68K_GNU_VTENTRY:
+ return NULL;
+ }
+
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update the got entry reference counts for the section being removed. */
static bfd_boolean
-elf_m68k_gc_sweep_hook (abfd, info, sec, relocs)
- bfd *abfd;
- struct bfd_link_info *info;
- asection *sec;
- const Elf_Internal_Rela *relocs;
+elf_m68k_gc_sweep_hook (bfd *abfd,
+ struct bfd_link_info *info,
+ asection *sec,
+ const Elf_Internal_Rela *relocs)
{
Elf_Internal_Shdr *symtab_hdr;
struct elf_link_hash_entry **sym_hashes;
@@ -1070,6 +1172,34 @@ elf_m68k_gc_sweep_hook (abfd, info, sec, relocs)
return TRUE;
}
+
+/* Return the type of PLT associated with OUTPUT_BFD. */
+
+static const struct elf_m68k_plt_info *
+elf_m68k_get_plt_info (bfd *output_bfd)
+{
+ unsigned int features;
+
+ features = bfd_m68k_mach_to_features (bfd_get_mach (output_bfd));
+ if (features & cpu32)
+ return &elf_cpu32_plt_info;
+ if (features & mcfisa_b)
+ return &elf_isab_plt_info;
+ if (features & mcfisa_c)
+ return &elf_isac_plt_info;
+ return &elf_m68k_plt_info;
+}
+
+/* This function is called after all the input files have been read,
+ and the input sections have been assigned to output sections.
+ It's a convenient place to determine the PLT style. */
+
+static bfd_boolean
+elf_m68k_always_size_sections (bfd *output_bfd, struct bfd_link_info *info)
+{
+ elf_m68k_hash_table (info)->plt_info = elf_m68k_get_plt_info (output_bfd);
+ return TRUE;
+}
/* Adjust a symbol defined by a dynamic object and referenced by a
regular object. The current definition is in some section of the
@@ -1082,10 +1212,11 @@ elf_m68k_adjust_dynamic_symbol (info, h)
struct bfd_link_info *info;
struct elf_link_hash_entry *h;
{
+ struct elf_m68k_link_hash_table *htab;
bfd *dynobj;
asection *s;
- unsigned int power_of_two;
+ htab = elf_m68k_hash_table (info);
dynobj = elf_hash_table (info)->dynobj;
/* Make sure we know what is going on here. */
@@ -1135,14 +1266,7 @@ elf_m68k_adjust_dynamic_symbol (info, h)
/* If this is the first .plt entry, make room for the special
first entry. */
if (s->size == 0)
- {
- if (CPU32_FLAG (dynobj))
- s->size += PLT_CPU32_ENTRY_SIZE;
- else if (CFV4E_FLAG (dynobj))
- s->size += CFV4E_PLT_ENTRY_SIZE;
- else
- s->size += PLT_ENTRY_SIZE;
- }
+ s->size = htab->plt_info->size;
/* If this symbol is not defined in a regular file, and we are
not generating a shared library, then set the symbol to this
@@ -1159,12 +1283,7 @@ elf_m68k_adjust_dynamic_symbol (info, h)
h->plt.offset = s->size;
/* Make room for this entry. */
- if (CPU32_FLAG (dynobj))
- s->size += PLT_CPU32_ENTRY_SIZE;
- else if (CFV4E_FLAG (dynobj))
- s->size += CFV4E_PLT_ENTRY_SIZE;
- else
- s->size += PLT_ENTRY_SIZE;
+ s->size += htab->plt_info->size;
/* We also need to make an entry in the .got.plt section, which
will be placed in the .got section by the linker script. */
@@ -1240,28 +1359,7 @@ elf_m68k_adjust_dynamic_symbol (info, h)
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 3)
- power_of_two = 3;
-
- /* Apply the required alignment. */
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (dynobj, s))
- {
- if (!bfd_set_section_alignment (dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Set the sizes of the dynamic sections. */
@@ -1334,7 +1432,7 @@ elf_m68k_size_dynamic_sections (output_bfd, info)
/* Remember whether there is a PLT. */
plt = s->size != 0;
}
- else if (strncmp (name, ".rela", 5) == 0)
+ else if (CONST_STRNEQ (name, ".rela"))
{
if (s->size != 0)
{
@@ -1345,7 +1443,7 @@ elf_m68k_size_dynamic_sections (output_bfd, info)
s->reloc_count = 0;
}
}
- else if (strncmp (name, ".got", 4) != 0
+ else if (! CONST_STRNEQ (name, ".got")
&& strcmp (name, ".dynbss") != 0)
{
/* It's not one of our sections, so don't allocate space. */
@@ -1501,9 +1599,6 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
- if (info->relocatable)
- return TRUE;
-
dynobj = elf_hash_table (info)->dynobj;
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -1558,6 +1653,20 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
switch (r_type)
{
case R_68K_GOT8:
@@ -1791,11 +1900,12 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
else
{
/* This symbol is local, or marked to become local. */
+ outrel.r_addend = relocation + rel->r_addend;
+
if (r_type == R_68K_32)
{
relocate = TRUE;
outrel.r_info = ELF32_R_INFO (0, R_68K_RELATIVE);
- outrel.r_addend = relocation + rel->r_addend;
}
else
{
@@ -1812,13 +1922,24 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
{
asection *osec;
+ /* We are turning this relocation into one
+ against a section symbol. It would be
+ proper to subtract the symbol's value,
+ osec->vma, from the emitted reloc addend,
+ but ld.so expects buggy relocs. */
osec = sec->output_section;
indx = elf_section_data (osec)->dynindx;
- BFD_ASSERT (indx > 0);
+ if (indx == 0)
+ {
+ struct elf_link_hash_table *htab;
+ htab = elf_hash_table (info);
+ osec = htab->text_index_section;
+ indx = elf_section_data (osec)->dynindx;
+ }
+ BFD_ASSERT (indx != 0);
}
outrel.r_info = ELF32_R_INFO (indx, r_type);
- outrel.r_addend = relocation + rel->r_addend;
}
}
@@ -1909,6 +2030,21 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
return TRUE;
}
+/* Install an M_68K_PC32 relocation against VALUE at offset OFFSET
+ into section SEC. */
+
+static void
+elf_m68k_install_pc32 (asection *sec, bfd_vma offset, bfd_vma value)
+{
+ /* Make VALUE PC-relative. */
+ value -= sec->output_section->vma + offset;
+
+ /* Apply any in-place addend. */
+ value += bfd_get_32 (sec->owner, sec->contents + offset);
+
+ bfd_put_32 (sec->owner, value, sec->contents + offset);
+}
+
/* Finish up dynamic symbol handling. We set the contents of various
dynamic sections here. */
@@ -1920,12 +2056,12 @@ elf_m68k_finish_dynamic_symbol (output_bfd, info, h, sym)
Elf_Internal_Sym *sym;
{
bfd *dynobj;
- int plt_off1, plt_off2, plt_off3;
dynobj = elf_hash_table (info)->dynobj;
if (h->plt.offset != (bfd_vma) -1)
{
+ const struct elf_m68k_plt_info *plt_info;
asection *splt;
asection *sgot;
asection *srela;
@@ -1939,6 +2075,7 @@ elf_m68k_finish_dynamic_symbol (output_bfd, info, h, sym)
BFD_ASSERT (h->dynindx != -1);
+ plt_info = elf_m68k_hash_table (info)->plt_info;
splt = bfd_get_section_by_name (dynobj, ".plt");
sgot = bfd_get_section_by_name (dynobj, ".got.plt");
srela = bfd_get_section_by_name (dynobj, ".rela.plt");
@@ -1948,66 +2085,36 @@ elf_m68k_finish_dynamic_symbol (output_bfd, info, h, sym)
corresponds to this symbol. This is the index of this symbol
in all the symbols for which we are making plt entries. The
first entry in the procedure linkage table is reserved. */
- if (CPU32_FLAG (output_bfd))
- plt_index = (h->plt.offset / PLT_CPU32_ENTRY_SIZE) - 1;
- else if (CFV4E_FLAG (output_bfd))
- plt_index = (h->plt.offset / CFV4E_PLT_ENTRY_SIZE) - 1;
- else
- plt_index = (h->plt.offset / PLT_ENTRY_SIZE) - 1;
+ plt_index = (h->plt.offset / plt_info->size) - 1;
/* Get the offset into the .got table of the entry that
corresponds to this function. Each .got entry is 4 bytes.
The first three are reserved. */
got_offset = (plt_index + 3) * 4;
- if (CPU32_FLAG (output_bfd))
- {
- /* Fill in the entry in the procedure linkage table. */
- memcpy (splt->contents + h->plt.offset, elf_cpu32_plt_entry,
- PLT_CPU32_ENTRY_SIZE);
- plt_off1 = 4;
- plt_off2 = 12;
- plt_off3 = 18;
- }
- else if (CFV4E_FLAG (output_bfd))
- {
- memcpy (splt->contents + h->plt.offset, elf_cfv4e_plt_entry,
- CFV4E_PLT_ENTRY_SIZE);
- plt_off1 = 2;
- plt_off2 = 14;
- plt_off3 = 20;
- }
- else
- {
- /* Fill in the entry in the procedure linkage table. */
- memcpy (splt->contents + h->plt.offset, elf_m68k_plt_entry,
- PLT_ENTRY_SIZE);
- plt_off1 = 4;
- plt_off2 = 10;
- plt_off3 = 16;
- }
-
- /* The offset is relative to the first extension word. */
- bfd_put_32 (output_bfd,
- sgot->output_section->vma
- + sgot->output_offset
- + got_offset
- - (splt->output_section->vma
- + h->plt.offset
- + (CFV4E_FLAG (output_bfd) ? 8 : 2)),
- splt->contents + h->plt.offset + plt_off1);
+ memcpy (splt->contents + h->plt.offset,
+ plt_info->symbol_entry,
+ plt_info->size);
+
+ elf_m68k_install_pc32 (splt, h->plt.offset + plt_info->symbol_relocs.got,
+ (sgot->output_section->vma
+ + sgot->output_offset
+ + got_offset));
bfd_put_32 (output_bfd, plt_index * sizeof (Elf32_External_Rela),
- splt->contents + h->plt.offset + plt_off2);
- bfd_put_32 (output_bfd, - (h->plt.offset + plt_off3),
- splt->contents + h->plt.offset + plt_off3);
+ splt->contents
+ + h->plt.offset
+ + plt_info->symbol_resolve_entry + 2);
+
+ elf_m68k_install_pc32 (splt, h->plt.offset + plt_info->symbol_relocs.plt,
+ splt->output_section->vma);
/* Fill in the entry in the global offset table. */
bfd_put_32 (output_bfd,
(splt->output_section->vma
+ splt->output_offset
+ h->plt.offset
- + (CFV4E_FLAG (output_bfd) ? 12 : 8)),
+ + plt_info->symbol_resolve_entry),
sgot->contents + got_offset);
/* Fill in the entry in the .rela.plt section. */
@@ -2185,54 +2292,23 @@ elf_m68k_finish_dynamic_sections (output_bfd, info)
/* Fill in the first entry in the procedure linkage table. */
if (splt->size > 0)
{
- if (CFV4E_FLAG (output_bfd))
- {
- memcpy (splt->contents, elf_cfv4e_plt0_entry, CFV4E_PLT_ENTRY_SIZE);
- bfd_put_32 (output_bfd,
- (sgot->output_section->vma
- + sgot->output_offset + 4
- - (splt->output_section->vma + 2)),
- splt->contents + 2);
- bfd_put_32 (output_bfd,
- (sgot->output_section->vma
- + sgot->output_offset + 8
- - (splt->output_section->vma + 10) - 8),
- splt->contents + 12);
- elf_section_data (splt->output_section)->this_hdr.sh_entsize
- = CFV4E_PLT_ENTRY_SIZE;
- }
- else if (CPU32_FLAG (output_bfd))
- {
- memcpy (splt->contents, elf_cpu32_plt0_entry, PLT_CPU32_ENTRY_SIZE);
- bfd_put_32 (output_bfd,
- (sgot->output_section->vma
- + sgot->output_offset + 4
- - (splt->output_section->vma + 2)),
- splt->contents + 4);
- bfd_put_32 (output_bfd,
- (sgot->output_section->vma
- + sgot->output_offset + 8
- - (splt->output_section->vma + 10)),
- splt->contents + 12);
- elf_section_data (splt->output_section)->this_hdr.sh_entsize
- = PLT_CPU32_ENTRY_SIZE;
- }
- else
- {
- memcpy (splt->contents, elf_m68k_plt0_entry, PLT_ENTRY_SIZE);
- bfd_put_32 (output_bfd,
- (sgot->output_section->vma
- + sgot->output_offset + 4
- - (splt->output_section->vma + 2)),
- splt->contents + 4);
- bfd_put_32 (output_bfd,
- (sgot->output_section->vma
- + sgot->output_offset + 8
- - (splt->output_section->vma + 10)),
- splt->contents + 12);
- elf_section_data (splt->output_section)->this_hdr.sh_entsize
- = PLT_ENTRY_SIZE;
- }
+ const struct elf_m68k_plt_info *plt_info;
+
+ plt_info = elf_m68k_hash_table (info)->plt_info;
+ memcpy (splt->contents, plt_info->plt0_entry, plt_info->size);
+
+ elf_m68k_install_pc32 (splt, plt_info->plt0_relocs.got4,
+ (sgot->output_section->vma
+ + sgot->output_offset
+ + 4));
+
+ elf_m68k_install_pc32 (splt, plt_info->plt0_relocs.got8,
+ (sgot->output_section->vma
+ + sgot->output_offset
+ + 8));
+
+ elf_section_data (splt->output_section)->this_hdr.sh_entsize
+ = plt_info->size;
}
}
@@ -2401,9 +2477,7 @@ static bfd_vma
elf_m68k_plt_sym_val (bfd_vma i, const asection *plt,
const arelent *rel ATTRIBUTE_UNUSED)
{
- if (CPU32_FLAG (plt->owner))
- return plt->vma + (i + 1) * PLT_CPU32_ENTRY_SIZE;
- return plt->vma + (i + 1) * PLT_ENTRY_SIZE;
+ return plt->vma + (i + 1) * elf_m68k_get_plt_info (plt->owner)->size;
}
#define TARGET_BIG_SYM bfd_elf32_m68k_vec
@@ -2417,10 +2491,13 @@ elf_m68k_plt_sym_val (bfd_vma i, const asection *plt,
#define bfd_elf32_bfd_final_link bfd_elf_gc_common_final_link
#define elf_backend_check_relocs elf_m68k_check_relocs
+#define elf_backend_always_size_sections \
+ elf_m68k_always_size_sections
#define elf_backend_adjust_dynamic_symbol \
elf_m68k_adjust_dynamic_symbol
#define elf_backend_size_dynamic_sections \
elf_m68k_size_dynamic_sections
+#define elf_backend_init_index_section _bfd_elf_init_1_index_section
#define elf_backend_relocate_section elf_m68k_relocate_section
#define elf_backend_finish_dynamic_symbol \
elf_m68k_finish_dynamic_symbol
diff --git a/bfd/elf32-m88k.c b/bfd/elf32-m88k.c
index 1554c23884c7..c6c34a3105c7 100644
--- a/bfd/elf32-m88k.c
+++ b/bfd/elf32-m88k.c
@@ -1,5 +1,5 @@
/* Motorola 88k-specific support for 32-bit ELF
- Copyright 1993, 1995, 1999 Free Software Foundation, Inc.
+ Copyright 1993, 1995, 1999, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -31,6 +31,7 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define ELF_MACHINE_CODE EM_88K
#define ELF_MAXPAGESIZE 1 /* FIXME: This number is wrong, It should be the page size in bytes. */
#define bfd_elf32_bfd_reloc_type_lookup bfd_default_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
#define elf_info_to_howto _bfd_elf_no_info_to_howto
#include "elf32-target.h"
diff --git a/bfd/elf32-mcore.c b/bfd/elf32-mcore.c
index ed0123d553bd..66f4db8b62ab 100644
--- a/bfd/elf32-mcore.c
+++ b/bfd/elf32-mcore.c
@@ -1,6 +1,6 @@
/* Motorola MCore specific support for 32-bit ELF
- Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -22,8 +22,8 @@
/* This file is based on a preliminary RCE ELF ABI. The
information may not match the final RCE ELF ABI. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -317,6 +317,22 @@ mcore_elf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
return mcore_elf_howto_table [(int) mcore_reloc];
};
+static reloc_howto_type *
+mcore_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (mcore_elf_howto_raw) / sizeof (mcore_elf_howto_raw[0]);
+ i++)
+ if (mcore_elf_howto_raw[i].name != NULL
+ && strcasecmp (mcore_elf_howto_raw[i].name, r_name) == 0)
+ return &mcore_elf_howto_raw[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for a RCE ELF reloc. */
static void
@@ -387,9 +403,6 @@ mcore_elf_relocate_section (bfd * output_bfd,
(info->relocatable) ? " (relocatable)" : "");
#endif
- if (info->relocatable)
- return TRUE;
-
if (! mcore_elf_howto_table [R_MCORE_PCRELIMM8BY4]) /* Initialize howto table if needed */
mcore_elf_howto_init ();
@@ -452,6 +465,20 @@ mcore_elf_relocate_section (bfd * output_bfd,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
switch (r_type)
{
default:
@@ -526,37 +553,21 @@ mcore_elf_relocate_section (bfd * output_bfd,
relocation. */
static asection *
-mcore_elf_gc_mark_hook (asection * sec,
- struct bfd_link_info * info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela * rel,
- struct elf_link_hash_entry * h,
- Elf_Internal_Sym * sym)
+mcore_elf_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
{
- if (h == NULL)
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_MCORE_GNU_VTINHERIT:
- case R_MCORE_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
-
- return NULL;
+ if (h != NULL)
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_MCORE_GNU_VTINHERIT:
+ case R_MCORE_GNU_VTENTRY:
+ return NULL;
+ }
+
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update the got entry reference counts for the section being removed. */
@@ -637,9 +648,9 @@ mcore_elf_check_relocs (bfd * abfd,
static const struct bfd_elf_special_section mcore_elf_special_sections[]=
{
- { ".ctors", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".dtors", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".ctors"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".dtors"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { NULL, 0, 0, 0, 0 }
};
#define TARGET_BIG_SYM bfd_elf32_mcore_big_vec
@@ -656,6 +667,7 @@ static const struct bfd_elf_special_section mcore_elf_special_sections[]=
#define bfd_elf32_bfd_merge_private_bfd_data mcore_elf_merge_private_bfd_data
#define bfd_elf32_bfd_set_private_flags mcore_elf_set_private_flags
#define bfd_elf32_bfd_reloc_type_lookup mcore_elf_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup mcore_elf_reloc_name_lookup
#define elf_backend_relocate_section mcore_elf_relocate_section
#define elf_backend_gc_mark_hook mcore_elf_gc_mark_hook
#define elf_backend_gc_sweep_hook mcore_elf_gc_sweep_hook
diff --git a/bfd/elf32-mep.c b/bfd/elf32-mep.c
new file mode 100644
index 000000000000..169da4454bc3
--- /dev/null
+++ b/bfd/elf32-mep.c
@@ -0,0 +1,959 @@
+/* MeP-specific support for 32-bit ELF.
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "elf/mep.h"
+#include "libiberty.h"
+
+/* Forward declarations. */
+
+/* Private relocation functions. */
+
+#define MEPREL(type, size, bits, right, left, pcrel, overflow, mask) \
+ {(unsigned)type, right, size, bits, pcrel, left, overflow, mep_reloc, #type, FALSE, 0, mask, 0 }
+
+#define N complain_overflow_dont
+#define S complain_overflow_signed
+#define U complain_overflow_unsigned
+
+static bfd_reloc_status_type mep_reloc (bfd *, arelent *, struct bfd_symbol *,
+ void *, asection *, bfd *, char **);
+
+static reloc_howto_type mep_elf_howto_table [] =
+{
+ /* type, size, bits, leftshift, rightshift, pcrel, OD/OS/OU, mask. */
+ MEPREL (R_MEP_NONE, 0, 0, 0, 0, 0, N, 0),
+ MEPREL (R_RELC, 0, 0, 0, 0, 0, N, 0),
+ /* MEPRELOC:HOWTO */
+ /* This section generated from bfd/mep-relocs.pl from include/elf/mep.h. */
+ MEPREL (R_MEP_8, 0, 8, 0, 0, 0, U, 0xff),
+ MEPREL (R_MEP_16, 1, 16, 0, 0, 0, U, 0xffff),
+ MEPREL (R_MEP_32, 2, 32, 0, 0, 0, U, 0xffffffff),
+ MEPREL (R_MEP_PCREL8A2, 1, 8, 1, 1, 1, S, 0x00fe),
+ MEPREL (R_MEP_PCREL12A2,1, 12, 1, 1, 1, S, 0x0ffe),
+ MEPREL (R_MEP_PCREL17A2,2, 17, 0, 1, 1, S, 0x0000ffff),
+ MEPREL (R_MEP_PCREL24A2,2, 24, 0, 1, 1, S, 0x07f0ffff),
+ MEPREL (R_MEP_PCABS24A2,2, 24, 0, 1, 0, U, 0x07f0ffff),
+ MEPREL (R_MEP_LOW16, 2, 16, 0, 0, 0, N, 0x0000ffff),
+ MEPREL (R_MEP_HI16U, 2, 32, 0,16, 0, N, 0x0000ffff),
+ MEPREL (R_MEP_HI16S, 2, 32, 0,16, 0, N, 0x0000ffff),
+ MEPREL (R_MEP_GPREL, 2, 16, 0, 0, 0, S, 0x0000ffff),
+ MEPREL (R_MEP_TPREL, 2, 16, 0, 0, 0, S, 0x0000ffff),
+ MEPREL (R_MEP_TPREL7, 1, 7, 0, 0, 0, U, 0x007f),
+ MEPREL (R_MEP_TPREL7A2, 1, 7, 1, 1, 0, U, 0x007e),
+ MEPREL (R_MEP_TPREL7A4, 1, 7, 2, 2, 0, U, 0x007c),
+ MEPREL (R_MEP_UIMM24, 2, 24, 0, 0, 0, U, 0x00ffffff),
+ MEPREL (R_MEP_ADDR24A4, 2, 24, 0, 2, 0, U, 0x00fcffff),
+ MEPREL (R_MEP_GNU_VTINHERIT,1, 0,16,32, 0, N, 0x0000),
+ MEPREL (R_MEP_GNU_VTENTRY,1, 0,16,32, 0, N, 0x0000),
+ /* MEPRELOC:END */
+};
+
+#define VALID_MEP_RELOC(N) ((N) >= 0 \
+ && (N) < ARRAY_SIZE (mep_elf_howto_table)
+
+#undef N
+#undef S
+#undef U
+
+static bfd_reloc_status_type
+mep_reloc
+ (bfd * abfd ATTRIBUTE_UNUSED,
+ arelent * reloc_entry ATTRIBUTE_UNUSED,
+ struct bfd_symbol * symbol ATTRIBUTE_UNUSED,
+ void * data ATTRIBUTE_UNUSED,
+ asection * input_section ATTRIBUTE_UNUSED,
+ bfd * output_bfd ATTRIBUTE_UNUSED,
+ char ** error_message ATTRIBUTE_UNUSED)
+{
+ return bfd_reloc_ok;
+}
+
+
+
+#define BFD_RELOC_MEP_NONE BFD_RELOC_NONE
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define MAP(n) case BFD_RELOC_MEP_##n: type = R_MEP_##n; break
+#else
+#define MAP(n) case BFD_RELOC_MEP_/**/n: type = R_MEP_/**/n; break
+#endif
+
+static reloc_howto_type *
+mep_reloc_type_lookup
+ (bfd * abfd ATTRIBUTE_UNUSED,
+ bfd_reloc_code_real_type code)
+{
+ unsigned int type = 0;
+
+ switch (code)
+ {
+ MAP(NONE);
+ case BFD_RELOC_8:
+ type = R_MEP_8;
+ break;
+ case BFD_RELOC_16:
+ type = R_MEP_16;
+ break;
+ case BFD_RELOC_32:
+ type = R_MEP_32;
+ break;
+ case BFD_RELOC_VTABLE_ENTRY:
+ type = R_MEP_GNU_VTENTRY;
+ break;
+ case BFD_RELOC_VTABLE_INHERIT:
+ type = R_MEP_GNU_VTINHERIT;
+ break;
+ case BFD_RELOC_RELC:
+ type = R_RELC;
+ break;
+
+ /* MEPRELOC:MAP */
+ /* This section generated from bfd/mep-relocs.pl from include/elf/mep.h. */
+ MAP(8);
+ MAP(16);
+ MAP(32);
+ MAP(PCREL8A2);
+ MAP(PCREL12A2);
+ MAP(PCREL17A2);
+ MAP(PCREL24A2);
+ MAP(PCABS24A2);
+ MAP(LOW16);
+ MAP(HI16U);
+ MAP(HI16S);
+ MAP(GPREL);
+ MAP(TPREL);
+ MAP(TPREL7);
+ MAP(TPREL7A2);
+ MAP(TPREL7A4);
+ MAP(UIMM24);
+ MAP(ADDR24A4);
+ MAP(GNU_VTINHERIT);
+ MAP(GNU_VTENTRY);
+ /* MEPRELOC:END */
+
+ default:
+ /* Pacify gcc -Wall. */
+ fprintf (stderr, "mep: no reloc for code %d\n", code);
+ return NULL;
+ }
+
+ if (mep_elf_howto_table[type].type != type)
+ {
+ fprintf (stderr, "MeP: howto %d has type %d\n", type, mep_elf_howto_table[type].type);
+ abort ();
+ }
+
+ return mep_elf_howto_table + type;
+}
+
+#undef MAP
+
+static reloc_howto_type *
+mep_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (mep_elf_howto_table) / sizeof (mep_elf_howto_table[0]);
+ i++)
+ if (mep_elf_howto_table[i].name != NULL
+ && strcasecmp (mep_elf_howto_table[i].name, r_name) == 0)
+ return &mep_elf_howto_table[i];
+
+ return NULL;
+}
+
+/* Perform a single relocation. */
+
+static struct bfd_link_info *mep_info;
+static int warn_tp = 0, warn_sda = 0;
+
+static bfd_vma
+mep_lookup_global
+ (char * name,
+ bfd_vma ofs,
+ bfd_vma * cache,
+ int * warn)
+{
+ struct bfd_link_hash_entry *h;
+
+ if (*cache || *warn)
+ return *cache;
+
+ h = bfd_link_hash_lookup (mep_info->hash, name, FALSE, FALSE, TRUE);
+ if (h == 0 || h->type != bfd_link_hash_defined)
+ {
+ *warn = ofs + 1;
+ return 0;
+ }
+ *cache = (h->u.def.value
+ + h->u.def.section->output_section->vma
+ + h->u.def.section->output_offset);
+ return *cache;
+}
+
+static bfd_vma
+mep_tpoff_base (bfd_vma ofs)
+{
+ static bfd_vma cache = 0;
+ return mep_lookup_global ("__tpbase", ofs, &cache, &warn_tp);
+}
+
+static bfd_vma
+mep_sdaoff_base (bfd_vma ofs)
+{
+ static bfd_vma cache = 0;
+ return mep_lookup_global ("__sdabase", ofs, &cache, &warn_sda);
+}
+
+static bfd_reloc_status_type
+mep_final_link_relocate
+ (reloc_howto_type * howto,
+ bfd * input_bfd,
+ asection * input_section,
+ bfd_byte * contents,
+ Elf_Internal_Rela * rel,
+ bfd_vma relocation)
+{
+ unsigned long u;
+ long s;
+ unsigned char *byte;
+ bfd_vma pc;
+ bfd_reloc_status_type r = bfd_reloc_ok;
+ int e2, e4;
+
+ if (bfd_big_endian (input_bfd))
+ {
+ e2 = 0;
+ e4 = 0;
+ }
+ else
+ {
+ e2 = 1;
+ e4 = 3;
+ }
+
+ pc = (input_section->output_section->vma
+ + input_section->output_offset
+ + rel->r_offset);
+
+ s = relocation + rel->r_addend;
+
+ byte = (unsigned char *)contents + rel->r_offset;
+
+ if (howto->type == R_MEP_PCREL24A2
+ && s == 0
+ && pc >= 0x800000)
+ {
+ /* This is an unreachable branch to an undefined weak function.
+ Silently ignore it, since the opcode can't do that but should
+ never be executed anyway. */
+ return bfd_reloc_ok;
+ }
+
+ if (howto->pc_relative)
+ s -= pc;
+
+ u = (unsigned long) s;
+
+ switch (howto->type)
+ {
+ /* MEPRELOC:APPLY */
+ /* This section generated from bfd/mep-relocs.pl from include/elf/mep.h. */
+ case R_MEP_8: /* 76543210 */
+ if (u > 255) r = bfd_reloc_overflow;
+ byte[0] = (u & 0xff);
+ break;
+ case R_MEP_16: /* fedcba9876543210 */
+ if (u > 65535) r = bfd_reloc_overflow;
+ byte[0^e2] = ((u >> 8) & 0xff);
+ byte[1^e2] = (u & 0xff);
+ break;
+ case R_MEP_32: /* vutsrqponmlkjihgfedcba9876543210 */
+ byte[0^e4] = ((u >> 24) & 0xff);
+ byte[1^e4] = ((u >> 16) & 0xff);
+ byte[2^e4] = ((u >> 8) & 0xff);
+ byte[3^e4] = (u & 0xff);
+ break;
+ case R_MEP_PCREL8A2: /* --------7654321- */
+ if (-128 > s || s > 127) r = bfd_reloc_overflow;
+ byte[1^e2] = (byte[1^e2] & 0x01) | (s & 0xfe);
+ break;
+ case R_MEP_PCREL12A2: /* ----ba987654321- */
+ if (-2048 > s || s > 2047) r = bfd_reloc_overflow;
+ byte[0^e2] = (byte[0^e2] & 0xf0) | ((s >> 8) & 0x0f);
+ byte[1^e2] = (byte[1^e2] & 0x01) | (s & 0xfe);
+ break;
+ case R_MEP_PCREL17A2: /* ----------------gfedcba987654321 */
+ if (-65536 > s || s > 65535) r = bfd_reloc_overflow;
+ byte[2^e2] = ((s >> 9) & 0xff);
+ byte[3^e2] = ((s >> 1) & 0xff);
+ break;
+ case R_MEP_PCREL24A2: /* -----7654321----nmlkjihgfedcba98 */
+ if (-8388608 > s || s > 8388607) r = bfd_reloc_overflow;
+ byte[0^e2] = (byte[0^e2] & 0xf8) | ((s >> 5) & 0x07);
+ byte[1^e2] = (byte[1^e2] & 0x0f) | ((s << 3) & 0xf0);
+ byte[2^e2] = ((s >> 16) & 0xff);
+ byte[3^e2] = ((s >> 8) & 0xff);
+ break;
+ case R_MEP_PCABS24A2: /* -----7654321----nmlkjihgfedcba98 */
+ if (u > 16777215) r = bfd_reloc_overflow;
+ byte[0^e2] = (byte[0^e2] & 0xf8) | ((u >> 5) & 0x07);
+ byte[1^e2] = (byte[1^e2] & 0x0f) | ((u << 3) & 0xf0);
+ byte[2^e2] = ((u >> 16) & 0xff);
+ byte[3^e2] = ((u >> 8) & 0xff);
+ break;
+ case R_MEP_LOW16: /* ----------------fedcba9876543210 */
+ byte[2^e2] = ((u >> 8) & 0xff);
+ byte[3^e2] = (u & 0xff);
+ break;
+ case R_MEP_HI16U: /* ----------------vutsrqponmlkjihg */
+ byte[2^e2] = ((u >> 24) & 0xff);
+ byte[3^e2] = ((u >> 16) & 0xff);
+ break;
+ case R_MEP_HI16S: /* ----------------vutsrqponmlkjihg */
+ byte[2^e2] = ((s >> 24) & 0xff);
+ byte[3^e2] = ((s >> 16) & 0xff);
+ break;
+ case R_MEP_GPREL: /* ----------------fedcba9876543210 */
+ s -= mep_sdaoff_base(rel->r_offset);
+ if (-32768 > s || s > 32767) r = bfd_reloc_overflow;
+ byte[2^e2] = ((s >> 8) & 0xff);
+ byte[3^e2] = (s & 0xff);
+ break;
+ case R_MEP_TPREL: /* ----------------fedcba9876543210 */
+ s -= mep_tpoff_base(rel->r_offset);
+ if (-32768 > s || s > 32767) r = bfd_reloc_overflow;
+ byte[2^e2] = ((s >> 8) & 0xff);
+ byte[3^e2] = (s & 0xff);
+ break;
+ case R_MEP_TPREL7: /* ---------6543210 */
+ u -= mep_tpoff_base(rel->r_offset);
+ if (u > 127) r = bfd_reloc_overflow;
+ byte[1^e2] = (byte[1^e2] & 0x80) | (u & 0x7f);
+ break;
+ case R_MEP_TPREL7A2: /* ---------654321- */
+ u -= mep_tpoff_base(rel->r_offset);
+ if (u > 127) r = bfd_reloc_overflow;
+ byte[1^e2] = (byte[1^e2] & 0x81) | (u & 0x7e);
+ break;
+ case R_MEP_TPREL7A4: /* ---------65432-- */
+ u -= mep_tpoff_base(rel->r_offset);
+ if (u > 127) r = bfd_reloc_overflow;
+ byte[1^e2] = (byte[1^e2] & 0x83) | (u & 0x7c);
+ break;
+ case R_MEP_UIMM24: /* --------76543210nmlkjihgfedcba98 */
+ if (u > 16777215) r = bfd_reloc_overflow;
+ byte[1^e2] = (u & 0xff);
+ byte[2^e2] = ((u >> 16) & 0xff);
+ byte[3^e2] = ((u >> 8) & 0xff);
+ break;
+ case R_MEP_ADDR24A4: /* --------765432--nmlkjihgfedcba98 */
+ if (u > 16777215) r = bfd_reloc_overflow;
+ byte[1^e2] = (byte[1^e2] & 0x03) | (u & 0xfc);
+ byte[2^e2] = ((u >> 16) & 0xff);
+ byte[3^e2] = ((u >> 8) & 0xff);
+ break;
+ case R_MEP_GNU_VTINHERIT: /* ---------------- */
+ break;
+ case R_MEP_GNU_VTENTRY: /* ---------------- */
+ break;
+ /* MEPRELOC:END */
+ default:
+ abort ();
+ }
+
+ return r;
+}
+
+/* Set the howto pointer for a MEP ELF reloc. */
+
+static void
+mep_info_to_howto_rela
+ (bfd * abfd ATTRIBUTE_UNUSED,
+ arelent * cache_ptr,
+ Elf_Internal_Rela * dst)
+{
+ unsigned int r_type;
+
+ r_type = ELF32_R_TYPE (dst->r_info);
+ cache_ptr->howto = & mep_elf_howto_table [r_type];
+}
+
+/* Look through the relocs for a section during the first phase.
+ Since we don't do .gots or .plts, we just need to consider the
+ virtual table relocs for gc. */
+
+static bfd_boolean
+mep_elf_check_relocs
+ (bfd * abfd,
+ struct bfd_link_info * info,
+ asection * sec,
+ const Elf_Internal_Rela * relocs)
+{
+ Elf_Internal_Shdr * symtab_hdr;
+ struct elf_link_hash_entry ** sym_hashes;
+ struct elf_link_hash_entry ** sym_hashes_end;
+ const Elf_Internal_Rela * rel;
+ const Elf_Internal_Rela * rel_end;
+
+ if (info->relocatable)
+ return TRUE;
+
+ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (abfd);
+ sym_hashes_end = sym_hashes + symtab_hdr->sh_size / sizeof (Elf32_External_Sym);
+ if (!elf_bad_symtab (abfd))
+ sym_hashes_end -= symtab_hdr->sh_info;
+
+ rel_end = relocs + sec->reloc_count;
+ for (rel = relocs; rel < rel_end; rel++)
+ {
+ struct elf_link_hash_entry *h;
+ unsigned long r_symndx;
+
+ r_symndx = ELF32_R_SYM (rel->r_info);
+ if (r_symndx < symtab_hdr->sh_info)
+ h = NULL;
+ else
+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+ }
+ return TRUE;
+}
+
+
+/* Relocate a MEP ELF section.
+ There is some attempt to make this function usable for many architectures,
+ both USE_REL and USE_RELA ['twould be nice if such a critter existed],
+ if only to serve as a learning tool.
+
+ The RELOCATE_SECTION function is called by the new ELF backend linker
+ to handle the relocations for a section.
+
+ The relocs are always passed as Rela structures; if the section
+ actually uses Rel structures, the r_addend field will always be
+ zero.
+
+ This function is responsible for adjusting the section contents as
+ necessary, and (if using Rela relocs and generating a relocatable
+ output file) adjusting the reloc addend as necessary.
+
+ This function does not have to worry about setting the reloc
+ address or the reloc symbol index.
+
+ LOCAL_SYMS is a pointer to the swapped in local symbols.
+
+ LOCAL_SECTIONS is an array giving the section in the input file
+ corresponding to the st_shndx field of each local symbol.
+
+ The global hash table entry for the global symbols can be found
+ via elf_sym_hashes (input_bfd).
+
+ When generating relocatable output, this function must handle
+ STB_LOCAL/STT_SECTION symbols specially. The output symbol is
+ going to be the section symbol corresponding to the output
+ section, which means that the addend must be adjusted
+ accordingly. */
+
+static bfd_boolean
+mep_elf_relocate_section
+ (bfd * output_bfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info * info,
+ bfd * input_bfd,
+ asection * input_section,
+ bfd_byte * contents,
+ Elf_Internal_Rela * relocs,
+ Elf_Internal_Sym * local_syms,
+ asection ** local_sections)
+{
+ Elf_Internal_Shdr * symtab_hdr;
+ struct elf_link_hash_entry ** sym_hashes;
+ Elf_Internal_Rela * rel;
+ Elf_Internal_Rela * relend;
+
+ symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (input_bfd);
+ relend = relocs + input_section->reloc_count;
+
+ mep_info = info;
+
+ for (rel = relocs; rel < relend; rel ++)
+ {
+ reloc_howto_type * howto;
+ unsigned long r_symndx;
+ Elf_Internal_Sym * sym;
+ asection * sec;
+ struct elf_link_hash_entry * h;
+ bfd_vma relocation;
+ bfd_reloc_status_type r;
+ const char * name = NULL;
+ int r_type;
+
+ r_type = ELF32_R_TYPE (rel->r_info);
+
+ r_symndx = ELF32_R_SYM (rel->r_info);
+
+ /* Is this a complex relocation? */
+ if (!info->relocatable && ELF32_R_TYPE (rel->r_info) == R_RELC)
+ {
+ bfd_elf_perform_complex_relocation (output_bfd, info,
+ input_bfd, input_section, contents,
+ rel, local_syms, local_sections);
+ continue;
+ }
+
+ howto = mep_elf_howto_table + ELF32_R_TYPE (rel->r_info);
+ h = NULL;
+ sym = NULL;
+ sec = NULL;
+
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ sym = local_syms + r_symndx;
+ sec = local_sections [r_symndx];
+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+
+ name = bfd_elf_string_from_elf_section
+ (input_bfd, symtab_hdr->sh_link, sym->st_name);
+ name = (name == NULL) ? bfd_section_name (input_bfd, sec) : name;
+#if 0
+ fprintf (stderr, "local: sec: %s, sym: %s (%d), value: %x + %x + %x addend %x\n",
+ sec->name, name, sym->st_name,
+ sec->output_section->vma, sec->output_offset,
+ sym->st_value, rel->r_addend);
+#endif
+ }
+ else
+ {
+ relocation = 0;
+ h = sym_hashes [r_symndx];
+
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ name = h->root.root.string;
+
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ {
+ sec = h->root.u.def.section;
+ relocation = (h->root.u.def.value
+ + sec->output_section->vma
+ + sec->output_offset);
+#if 0
+ fprintf (stderr,
+ "defined: sec: %s, name: %s, value: %x + %x + %x gives: %x\n",
+ sec->name, name, h->root.u.def.value,
+ sec->output_section->vma, sec->output_offset, relocation);
+#endif
+ }
+ else if (h->root.type == bfd_link_hash_undefweak)
+ {
+#if 0
+ fprintf (stderr, "undefined: sec: %s, name: %s\n",
+ sec->name, name);
+#endif
+ }
+ else if (!info->relocatable)
+ {
+ if (! ((*info->callbacks->undefined_symbol)
+ (info, h->root.root.string, input_bfd,
+ input_section, rel->r_offset,
+ (!info->shared && info->unresolved_syms_in_objects == RM_GENERATE_ERROR))))
+ return FALSE;
+#if 0
+ fprintf (stderr, "unknown: name: %s\n", name);
+#endif
+ }
+ }
+
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ {
+ /* This is a relocatable link. We don't have to change
+ anything, unless the reloc is against a section symbol,
+ in which case we have to adjust according to where the
+ section symbol winds up in the output section. */
+ if (sym != NULL && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ rel->r_addend += sec->output_offset;
+ continue;
+ }
+
+ switch (r_type)
+ {
+ default:
+ r = mep_final_link_relocate (howto, input_bfd, input_section,
+ contents, rel, relocation);
+ break;
+ }
+
+ if (r != bfd_reloc_ok)
+ {
+ const char * msg = (const char *) NULL;
+
+ switch (r)
+ {
+ case bfd_reloc_overflow:
+ r = info->callbacks->reloc_overflow
+ (info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0,
+ input_bfd, input_section, rel->r_offset);
+ break;
+
+ case bfd_reloc_undefined:
+ r = info->callbacks->undefined_symbol
+ (info, name, input_bfd, input_section, rel->r_offset, TRUE);
+ break;
+
+ case bfd_reloc_outofrange:
+ msg = _("internal error: out of range error");
+ break;
+
+ case bfd_reloc_notsupported:
+ msg = _("internal error: unsupported relocation error");
+ break;
+
+ case bfd_reloc_dangerous:
+ msg = _("internal error: dangerous relocation");
+ break;
+
+ default:
+ msg = _("internal error: unknown error");
+ break;
+ }
+
+ if (msg)
+ r = info->callbacks->warning
+ (info, msg, name, input_bfd, input_section, rel->r_offset);
+
+ if (! r)
+ return FALSE;
+ }
+ }
+
+ if (warn_tp)
+ info->callbacks->undefined_symbol
+ (info, "__tpbase", input_bfd, input_section, warn_tp-1, TRUE);
+ if (warn_sda)
+ info->callbacks->undefined_symbol
+ (info, "__sdabase", input_bfd, input_section, warn_sda-1, TRUE);
+ if (warn_sda || warn_tp)
+ return FALSE;
+
+ return TRUE;
+}
+
+
+/* Update the got entry reference counts for the section being
+ removed. */
+
+static bfd_boolean
+mep_elf_gc_sweep_hook
+ (bfd * abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info * info ATTRIBUTE_UNUSED,
+ asection * sec ATTRIBUTE_UNUSED,
+ const Elf_Internal_Rela * relocs ATTRIBUTE_UNUSED)
+{
+ return TRUE;
+}
+
+/* Return the section that should be marked against GC for a given
+ relocation. */
+
+static asection *
+mep_elf_gc_mark_hook
+ (asection * sec,
+ struct bfd_link_info * info ATTRIBUTE_UNUSED,
+ Elf_Internal_Rela * rel,
+ struct elf_link_hash_entry * h,
+ Elf_Internal_Sym * sym)
+{
+ if (h != NULL)
+ {
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ default:
+ switch (h->root.type)
+ {
+ case bfd_link_hash_defined:
+ case bfd_link_hash_defweak:
+ return h->root.u.def.section;
+
+ case bfd_link_hash_common:
+ return h->root.u.c.p->section;
+
+ default:
+ break;
+ }
+ }
+ }
+ else
+ {
+ if (!(elf_bad_symtab (sec->owner)
+ && ELF_ST_BIND (sym->st_info) != STB_LOCAL)
+ && ! ((sym->st_shndx <= 0 || sym->st_shndx >= SHN_LORESERVE)
+ && sym->st_shndx != SHN_COMMON))
+ return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ }
+
+ return NULL;
+}
+
+
+/* Function to set the ELF flag bits. */
+
+static bfd_boolean
+mep_elf_set_private_flags (bfd * abfd,
+ flagword flags)
+{
+ elf_elfheader (abfd)->e_flags = flags;
+ elf_flags_init (abfd) = TRUE;
+ return TRUE;
+}
+
+static bfd_boolean
+mep_elf_copy_private_bfd_data (bfd * ibfd, bfd * obfd)
+{
+ if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
+ || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
+ return TRUE;
+
+ elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
+ elf_flags_init (obfd) = TRUE;
+
+ /* Copy object attributes. */
+ _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
+ return TRUE;
+}
+
+/* Merge backend specific data from an object file to the output
+ object file when linking. */
+
+static bfd_boolean
+mep_elf_merge_private_bfd_data (bfd * ibfd, bfd * obfd)
+{
+ static bfd *last_ibfd = 0;
+ flagword old_flags, new_flags;
+ flagword old_partial, new_partial;
+
+ /* Check if we have the same endianess. */
+ if (_bfd_generic_verify_endian_match (ibfd, obfd) == FALSE)
+ return FALSE;
+
+ new_flags = elf_elfheader (ibfd)->e_flags;
+ old_flags = elf_elfheader (obfd)->e_flags;
+
+#ifdef DEBUG
+ _bfd_error_handler ("%B: old_flags = 0x%.8lx, new_flags = 0x%.8lx, init = %s",
+ ibfd, old_flags, new_flags, elf_flags_init (obfd) ? "yes" : "no");
+#endif
+
+ /* First call, no flags set. */
+ if (!elf_flags_init (obfd))
+ {
+ elf_flags_init (obfd) = TRUE;
+ old_flags = new_flags;
+ }
+ else if ((new_flags | old_flags) & EF_MEP_LIBRARY)
+ {
+ /* Non-library flags trump library flags. The choice doesn't really
+ matter if both OLD_FLAGS and NEW_FLAGS have EF_MEP_LIBRARY set. */
+ if (old_flags & EF_MEP_LIBRARY)
+ old_flags = new_flags;
+ }
+ else
+ {
+ /* Make sure they're for the same mach. Allow upgrade from the "mep"
+ mach. */
+ new_partial = (new_flags & EF_MEP_CPU_MASK);
+ old_partial = (old_flags & EF_MEP_CPU_MASK);
+ if (new_partial == old_partial)
+ ;
+ else if (new_partial == EF_MEP_CPU_MEP)
+ ;
+ else if (old_partial == EF_MEP_CPU_MEP)
+ old_flags = (old_flags & ~EF_MEP_CPU_MASK) | new_partial;
+ else
+ {
+ _bfd_error_handler (_("%B and %B are for different cores"), last_ibfd, ibfd);
+ bfd_set_error (bfd_error_invalid_target);
+ return FALSE;
+ }
+
+ /* Make sure they're for the same me_module. Allow basic config to
+ mix with any other. */
+ new_partial = (new_flags & EF_MEP_INDEX_MASK);
+ old_partial = (old_flags & EF_MEP_INDEX_MASK);
+ if (new_partial == old_partial)
+ ;
+ else if (new_partial == 0)
+ ;
+ else if (old_partial == 0)
+ old_flags = (old_flags & ~EF_MEP_INDEX_MASK) | new_partial;
+ else
+ {
+ _bfd_error_handler (_("%B and %B are for different configurations"), last_ibfd, ibfd);
+ bfd_set_error (bfd_error_invalid_target);
+ return FALSE;
+ }
+ }
+
+ elf_elfheader (obfd)->e_flags = old_flags;
+ last_ibfd = ibfd;
+ return TRUE;
+}
+
+/* This will be edited by the MeP configration tool. */
+static const char * config_names[] =
+{
+ "basic"
+ /* start-mepcfgtool */
+ ,"simple"
+ ,"fmax"
+ /* end-mepcfgtool */
+};
+
+static const char * core_names[] =
+{
+ "MeP", "MeP-c2", "MeP-c3", "MeP-h1"
+};
+
+static bfd_boolean
+mep_elf_print_private_bfd_data (bfd * abfd, void * ptr)
+{
+ FILE * file = (FILE *) ptr;
+ flagword flags, partial_flags;
+
+ BFD_ASSERT (abfd != NULL && ptr != NULL);
+
+ /* Print normal ELF private data. */
+ _bfd_elf_print_private_bfd_data (abfd, ptr);
+
+ flags = elf_elfheader (abfd)->e_flags;
+ fprintf (file, _("private flags = 0x%lx"), (long)flags);
+
+ partial_flags = (flags & EF_MEP_CPU_MASK) >> 24;
+ if (partial_flags < ARRAY_SIZE (core_names))
+ fprintf (file, " core: %s", core_names[(long)partial_flags]);
+
+ partial_flags = flags & EF_MEP_INDEX_MASK;
+ if (partial_flags < ARRAY_SIZE (config_names))
+ fprintf (file, " me_module: %s", config_names[(long)partial_flags]);
+
+ fputc ('\n', file);
+
+ return TRUE;
+}
+
+/* Return the machine subcode from the ELF e_flags header. */
+
+static int
+elf32_mep_machine (bfd * abfd)
+{
+ switch (elf_elfheader (abfd)->e_flags & EF_MEP_CPU_MASK)
+ {
+ default: break;
+ case EF_MEP_CPU_C2: return bfd_mach_mep;
+ case EF_MEP_CPU_C3: return bfd_mach_mep;
+ case EF_MEP_CPU_C4: return bfd_mach_mep;
+ case EF_MEP_CPU_H1: return bfd_mach_mep_h1;
+ }
+
+ return bfd_mach_mep;
+}
+
+static bfd_boolean
+mep_elf_object_p (bfd * abfd)
+{
+ /* Irix 5 and 6 is broken. Object file symbol tables are not always
+ sorted correctly such that local symbols preceed global symbols,
+ and the sh_info field in the symbol table is not always right. */
+ /* This is needed for the RELC support code. */
+ elf_bad_symtab (abfd) = TRUE;
+ bfd_default_set_arch_mach (abfd, bfd_arch_mep, elf32_mep_machine (abfd));
+ return TRUE;
+}
+
+static bfd_boolean
+mep_elf_section_flags (flagword * flags, const Elf_Internal_Shdr * hdr)
+{
+ if (hdr->sh_flags & SHF_MEP_VLIW)
+ * flags |= SEC_MEP_VLIW;
+ return TRUE;
+}
+
+static bfd_boolean
+mep_elf_fake_sections (bfd * abfd ATTRIBUTE_UNUSED,
+ Elf_Internal_Shdr * hdr,
+ asection * sec)
+{
+ if (sec->flags & SEC_MEP_VLIW)
+ hdr->sh_flags |= SHF_MEP_VLIW;
+ return TRUE;
+}
+
+
+#define ELF_ARCH bfd_arch_mep
+#define ELF_MACHINE_CODE EM_CYGNUS_MEP
+#define ELF_MAXPAGESIZE 0x1000
+
+#define TARGET_BIG_SYM bfd_elf32_mep_vec
+#define TARGET_BIG_NAME "elf32-mep"
+
+#define TARGET_LITTLE_SYM bfd_elf32_mep_little_vec
+#define TARGET_LITTLE_NAME "elf32-mep-little"
+
+#define elf_info_to_howto_rel NULL
+#define elf_info_to_howto mep_info_to_howto_rela
+#define elf_backend_relocate_section mep_elf_relocate_section
+#define elf_backend_gc_mark_hook mep_elf_gc_mark_hook
+#define elf_backend_gc_sweep_hook mep_elf_gc_sweep_hook
+#define elf_backend_check_relocs mep_elf_check_relocs
+#define elf_backend_object_p mep_elf_object_p
+#define elf_backend_section_flags mep_elf_section_flags
+#define elf_backend_fake_sections mep_elf_fake_sections
+
+#define elf_backend_can_gc_sections 1
+
+#define bfd_elf32_bfd_reloc_type_lookup mep_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup mep_reloc_name_lookup
+#define bfd_elf32_bfd_set_private_flags mep_elf_set_private_flags
+#define bfd_elf32_bfd_copy_private_bfd_data mep_elf_copy_private_bfd_data
+#define bfd_elf32_bfd_merge_private_bfd_data mep_elf_merge_private_bfd_data
+#define bfd_elf32_bfd_print_private_bfd_data mep_elf_print_private_bfd_data
+
+/* We use only the RELA entries. */
+#define USE_RELA
+
+#include "elf32-target.h"
diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c
index 6ed4ad35f627..3843b856e16a 100644
--- a/bfd/elf32-mips.c
+++ b/bfd/elf32-mips.c
@@ -1,6 +1,6 @@
/* MIPS-specific support for 32-bit ELF
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
Most of the information added by Ian Lance Taylor, Cygnus Support,
<ian@cygnus.com>.
@@ -29,8 +29,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
different MIPS ELF from other targets. This matters when linking.
This file supports both, switching at runtime. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "genlink.h"
@@ -68,8 +68,6 @@ static bfd_boolean mips_elf32_object_p
(bfd *);
static bfd_boolean mips_elf_is_local_label_name
(bfd *, const char *);
-static bfd_reloc_status_type mips16_jump_reloc
- (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_reloc_status_type mips16_gprel_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_reloc_status_type mips_elf_final_gp
@@ -702,6 +700,21 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
+
+ /* 32 bit relocation with no addend. */
+ HOWTO (R_MIPS_GLOB_DAT, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ _bfd_mips_elf_generic_reloc, /* special_function */
+ "R_MIPS_GLOB_DAT", /* name */
+ FALSE, /* partial_inplace */
+ 0x0, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
};
/* The reloc used for BFD_RELOC_CTOR when doing a 64 bit link. This
@@ -734,7 +747,7 @@ static reloc_howto_type elf_mips16_howto_table_rel[] =
/* This needs complex overflow
detection, because the upper four
bits must match the PC. */
- mips16_jump_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS16_26", /* name */
TRUE, /* partial_inplace */
0x3ffffff, /* src_mask */
@@ -1112,36 +1125,6 @@ mips32_64bit_reloc (bfd *abfd, arelent *reloc_entry,
return r;
}
-/* Handle a mips16 jump. */
-
-static bfd_reloc_status_type
-mips16_jump_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
- asymbol *symbol, void *data ATTRIBUTE_UNUSED,
- asection *input_section, bfd *output_bfd,
- char **error_message ATTRIBUTE_UNUSED)
-{
- if (output_bfd != NULL
- && (symbol->flags & BSF_SECTION_SYM) == 0
- && reloc_entry->addend == 0)
- {
- reloc_entry->address += input_section->output_offset;
- return bfd_reloc_ok;
- }
-
- /* FIXME. */
- {
- static bfd_boolean warned;
-
- if (! warned)
- (*_bfd_error_handler)
- (_("Linking mips16 objects into %s format is not supported"),
- bfd_get_target (input_section->output_section->owner));
- warned = TRUE;
- }
-
- return bfd_reloc_undefined;
-}
-
/* Handle a mips16 GP relative reloc. */
static bfd_reloc_status_type
@@ -1291,6 +1274,40 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
}
}
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (elf_mips_howto_table_rel)
+ / sizeof (elf_mips_howto_table_rel[0]));
+ i++)
+ if (elf_mips_howto_table_rel[i].name != NULL
+ && strcasecmp (elf_mips_howto_table_rel[i].name, r_name) == 0)
+ return &elf_mips_howto_table_rel[i];
+
+ for (i = 0;
+ i < (sizeof (elf_mips16_howto_table_rel)
+ / sizeof (elf_mips16_howto_table_rel[0]));
+ i++)
+ if (elf_mips16_howto_table_rel[i].name != NULL
+ && strcasecmp (elf_mips16_howto_table_rel[i].name, r_name) == 0)
+ return &elf_mips16_howto_table_rel[i];
+
+ if (strcasecmp (elf_mips_gnu_pcrel32.name, r_name) == 0)
+ return &elf_mips_gnu_pcrel32;
+ if (strcasecmp (elf_mips_gnu_rel16_s2.name, r_name) == 0)
+ return &elf_mips_gnu_rel16_s2;
+ if (strcasecmp (elf_mips_gnu_vtinherit_howto.name, r_name) == 0)
+ return &elf_mips_gnu_vtinherit_howto;
+ if (strcasecmp (elf_mips_gnu_vtentry_howto.name, r_name) == 0)
+ return &elf_mips_gnu_vtentry_howto;
+
+ return NULL;
+}
+
/* Given a MIPS Elf_Internal_Rel, fill in an arelent structure. */
static reloc_howto_type *
@@ -1537,12 +1554,15 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
#define elf_backend_create_dynamic_sections \
_bfd_mips_elf_create_dynamic_sections
#define elf_backend_check_relocs _bfd_mips_elf_check_relocs
+#define elf_backend_merge_symbol_attribute \
+ _bfd_mips_elf_merge_symbol_attribute
#define elf_backend_adjust_dynamic_symbol \
_bfd_mips_elf_adjust_dynamic_symbol
#define elf_backend_always_size_sections \
_bfd_mips_elf_always_size_sections
#define elf_backend_size_dynamic_sections \
_bfd_mips_elf_size_dynamic_sections
+#define elf_backend_init_index_section _bfd_elf_init_1_index_section
#define elf_backend_relocate_section _bfd_mips_elf_relocate_section
#define elf_backend_finish_dynamic_symbol \
_bfd_mips_elf_finish_dynamic_symbol
@@ -1599,6 +1619,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
/* The SVR4 MIPS ABI says that this should be 0x10000, but Irix 5 uses
a value of 0x1000, and we are compatible. */
#define ELF_MAXPAGESIZE 0x1000
+#define ELF_COMMONPAGESIZE 0x1000
#include "elf32-target.h"
@@ -1609,15 +1630,20 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
#undef TARGET_BIG_NAME
#undef ELF_MAXPAGESIZE
+#undef ELF_COMMONPAGESIZE
#define TARGET_LITTLE_SYM bfd_elf32_tradlittlemips_vec
#define TARGET_LITTLE_NAME "elf32-tradlittlemips"
#define TARGET_BIG_SYM bfd_elf32_tradbigmips_vec
#define TARGET_BIG_NAME "elf32-tradbigmips"
-/* The SVR4 MIPS ABI says that this should be 0x10000, and Linux uses
- page sizes of up to that limit, so we need to respect it. */
+/* The MIPS ABI says at Page 5-1:
+ Virtual addresses and file offsets for MIPS segments are congruent
+ modulo 64 KByte (0x10000) or larger powers of 2. Because 64 KBytes
+ is the maximum page size, the files are suitable for paging
+ regardless of physical page size. */
#define ELF_MAXPAGESIZE 0x10000
+#define ELF_COMMONPAGESIZE 0x1000
#define elf32_bed elf32_tradbed
/* Include the target file again for this target. */
@@ -1672,6 +1698,17 @@ mips_vxworks_bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
}
}
+static reloc_howto_type *
+mips_vxworks_bfd_reloc_name_lookup (bfd *abfd, const char *r_name)
+{
+ if (strcasecmp (mips_vxworks_copy_howto_rela.name, r_name) == 0)
+ return &mips_vxworks_copy_howto_rela;
+ if (strcasecmp (mips_vxworks_jump_slot_howto_rela.name, r_name) == 0)
+ return &mips_vxworks_jump_slot_howto_rela;
+
+ return bfd_elf32_bfd_reloc_name_lookup (abfd, r_name);
+}
+
/* Implement elf_backend_mips_rtype_to_lookup for VxWorks. */
static reloc_howto_type *
@@ -1702,6 +1739,9 @@ mips_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker)
#undef TARGET_BIG_SYM
#undef TARGET_BIG_NAME
+#undef ELF_MAXPAGESIZE
+#undef ELF_COMMONPAGESIZE
+
#define TARGET_LITTLE_SYM bfd_elf32_littlemips_vxworks_vec
#define TARGET_LITTLE_NAME "elf32-littlemips-vxworks"
#define TARGET_BIG_SYM bfd_elf32_bigmips_vxworks_vec
@@ -1710,8 +1750,8 @@ mips_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker)
#undef elf32_bed
#define elf32_bed elf32_mips_vxworks_bed
-#undef ELF_MAXPAGESIZE
#define ELF_MAXPAGESIZE 0x1000
+#define ELF_COMMONPAGESIZE 0x1000
#undef elf_backend_want_got_plt
#define elf_backend_want_got_plt 1
@@ -1735,6 +1775,9 @@ mips_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker)
#undef bfd_elf32_bfd_reloc_type_lookup
#define bfd_elf32_bfd_reloc_type_lookup \
mips_vxworks_bfd_reloc_type_lookup
+#undef bfd_elf32_bfd_reloc_name_lookup
+#define bfd_elf32_bfd_reloc_name_lookup \
+ mips_vxworks_bfd_reloc_name_lookup
#undef elf_backend_mips_rtype_to_howto
#define elf_backend_mips_rtype_to_howto \
mips_vxworks_rtype_to_howto
diff --git a/bfd/elf32-msp430.c b/bfd/elf32-msp430.c
index af737714de29..bd576c3be899 100644
--- a/bfd/elf32-msp430.c
+++ b/bfd/elf32-msp430.c
@@ -1,5 +1,6 @@
/* MSP430-specific support for 32-bit ELF
- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Contributed by Dmitry Diky <diwil@mail.ru>
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +19,8 @@
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 "bfd.h"
#include "libiberty.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -199,6 +200,23 @@ bfd_elf32_bfd_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (elf_msp430_howto_table)
+ / sizeof (elf_msp430_howto_table[0]));
+ i++)
+ if (elf_msp430_howto_table[i].name != NULL
+ && strcasecmp (elf_msp430_howto_table[i].name, r_name) == 0)
+ return &elf_msp430_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an MSP430 ELF reloc. */
static void
@@ -213,48 +231,6 @@ msp430_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED,
cache_ptr->howto = &elf_msp430_howto_table[r_type];
}
-static asection *
-elf32_msp430_gc_mark_hook (asection * sec,
- struct bfd_link_info * info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela * rel,
- struct elf_link_hash_entry * h,
- Elf_Internal_Sym * sym)
-{
- if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
-}
-
-static bfd_boolean
-elf32_msp430_gc_sweep_hook (bfd * abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info * info ATTRIBUTE_UNUSED,
- asection * sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela * relocs ATTRIBUTE_UNUSED)
-{
- /* We don't use got and plt entries for msp430. */
- return TRUE;
-}
-
/* Look through the relocs for a section during the first phase.
Since we don't do .gots or .plts, we just need to consider the
virtual table relocs for gc. */
@@ -454,8 +430,6 @@ elf32_msp430_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED,
const char *name = NULL;
int r_type;
- /* This is a final link. */
-
r_type = ELF32_R_TYPE (rel->r_info);
r_symndx = ELF32_R_SYM (rel->r_info);
howto = elf_msp430_howto_table + ELF32_R_TYPE (rel->r_info);
@@ -483,6 +457,20 @@ elf32_msp430_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
r = msp430_final_link_relocate (howto, input_bfd, input_section,
contents, rel, relocation);
@@ -685,21 +673,6 @@ elf32_msp430_object_p (bfd * abfd)
return bfd_default_set_arch_mach (abfd, bfd_arch_msp430, e_set);
}
-static void
-elf32_msp430_post_process_headers (bfd * abfd,
- struct bfd_link_info * link_info ATTRIBUTE_UNUSED)
-{
- Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form. */
-
- i_ehdrp = elf_elfheader (abfd);
-
-#ifndef ELFOSABI_STANDALONE
-#define ELFOSABI_STANDALONE 255
-#endif
-
- i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_STANDALONE;
-}
-
/* These functions handle relaxing for the msp430.
Relaxation required only in two cases:
- Bad hand coding like jumps from one section to another or
@@ -1203,6 +1176,7 @@ error_return:
#define ELF_MACHINE_CODE EM_MSP430
#define ELF_MACHINE_ALT1 EM_MSP430_OLD
#define ELF_MAXPAGESIZE 1
+#define ELF_OSABI ELFOSABI_STANDALONE
#define TARGET_LITTLE_SYM bfd_elf32_msp430_vec
#define TARGET_LITTLE_NAME "elf32-msp430"
@@ -1210,13 +1184,11 @@ error_return:
#define elf_info_to_howto msp430_info_to_howto_rela
#define elf_info_to_howto_rel NULL
#define elf_backend_relocate_section elf32_msp430_relocate_section
-#define elf_backend_gc_mark_hook elf32_msp430_gc_mark_hook
-#define elf_backend_gc_sweep_hook elf32_msp430_gc_sweep_hook
#define elf_backend_check_relocs elf32_msp430_check_relocs
#define elf_backend_can_gc_sections 1
#define elf_backend_final_write_processing bfd_elf_msp430_final_write_processing
#define elf_backend_object_p elf32_msp430_object_p
-#define elf_backend_post_process_headers elf32_msp430_post_process_headers
+#define elf_backend_post_process_headers _bfd_elf_set_osabi
#define bfd_elf32_bfd_relax_section msp430_elf_relax_section
#include "elf32-target.h"
diff --git a/bfd/elf32-mt.c b/bfd/elf32-mt.c
index 320ef1e34157..a1d86523b836 100644
--- a/bfd/elf32-mt.c
+++ b/bfd/elf32-mt.c
@@ -1,5 +1,5 @@
/* Morpho Technologies MT specific support for 32-bit ELF
- Copyright 2001, 2002, 2003, 2004, 2005
+ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/mt.h"
@@ -187,6 +187,22 @@ mt_reloc_type_lookup
return NULL;
}
+static reloc_howto_type *
+mt_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (mt_elf_howto_table) / sizeof (mt_elf_howto_table[0]);
+ i++)
+ if (mt_elf_howto_table[i].name != NULL
+ && strcasecmp (mt_elf_howto_table[i].name, r_name) == 0)
+ return &mt_elf_howto_table[i];
+
+ return NULL;
+}
+
bfd_reloc_status_type
mt_elf_relocate_hi16
(bfd * input_bfd,
@@ -309,7 +325,6 @@ mt_elf_relocate_section
r_symndx = ELF32_R_SYM (rel->r_info);
- /* This is a final link. */
howto = mt_elf_howto_table + ELF32_R_TYPE (rel->r_info);
h = NULL;
sym = NULL;
@@ -338,6 +353,19 @@ mt_elf_relocate_section
name = h->root.root.string;
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
/* Finally, the sole MT-specific part. */
switch (r_type)
@@ -394,57 +422,6 @@ mt_elf_relocate_section
return TRUE;
}
-/* Return the section that should be marked against GC for a given
- relocation. */
-
-static asection *
-mt_elf_gc_mark_hook
- (asection * sec,
- struct bfd_link_info * info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela * rel ATTRIBUTE_UNUSED,
- struct elf_link_hash_entry * h,
- Elf_Internal_Sym * sym)
-{
- if (h != NULL)
- {
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- else
- {
- if (!(elf_bad_symtab (sec->owner)
- && ELF_ST_BIND (sym->st_info) != STB_LOCAL)
- && ! ((sym->st_shndx <= 0 || sym->st_shndx >= SHN_LORESERVE)
- && sym->st_shndx != SHN_COMMON))
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
- }
-
- return NULL;
-}
-
-/* Update the got entry reference counts for the section being
- removed. */
-
-static bfd_boolean
-mt_elf_gc_sweep_hook
- (bfd * abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info * info ATTRIBUTE_UNUSED,
- asection * sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela * relocs ATTRIBUTE_UNUSED)
-{
- return TRUE;
-}
-
/* Look through the relocs for a section during the first phase.
Since we don't do .gots or .plts, we just need to consider the
virtual table relocs for gc. */
@@ -538,6 +515,10 @@ mt_elf_copy_private_bfd_data (bfd * ibfd, bfd * obfd)
elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
elf_flags_init (obfd) = TRUE;
+
+ /* Copy object attributes. */
+ _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
return TRUE;
}
@@ -631,9 +612,8 @@ mt_elf_print_private_bfd_data (bfd * abfd, void * ptr)
#define elf_backend_relocate_section mt_elf_relocate_section
#define bfd_elf32_bfd_reloc_type_lookup mt_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup mt_reloc_name_lookup
-#define elf_backend_gc_mark_hook mt_elf_gc_mark_hook
-#define elf_backend_gc_sweep_hook mt_elf_gc_sweep_hook
#define elf_backend_check_relocs mt_elf_check_relocs
#define elf_backend_object_p mt_elf_object_p
#define elf_backend_rela_normal 1
diff --git a/bfd/elf32-openrisc.c b/bfd/elf32-openrisc.c
index b3d67bb82cf2..f0b780b05915 100644
--- a/bfd/elf32-openrisc.c
+++ b/bfd/elf32-openrisc.c
@@ -1,5 +1,6 @@
/* OpenRISC-specific support for 32-bit ELF.
- Copyright 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Contributed by Johan Rydberg, jrydberg@opencores.org
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +20,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/openrisc.h"
@@ -191,9 +192,9 @@ static const struct openrisc_reloc_map openrisc_reloc_map[] =
{ BFD_RELOC_32, R_OPENRISC_32 },
{ BFD_RELOC_16, R_OPENRISC_16 },
{ BFD_RELOC_8, R_OPENRISC_8 },
- { BFD_RELOC_OPENRISC_REL_26,R_OPENRISC_INSN_REL_26 },
- { BFD_RELOC_OPENRISC_ABS_26,R_OPENRISC_INSN_ABS_26 },
- { BFD_RELOC_HI16, R_OPENRISC_HI_16_IN_INSN },
+ { BFD_RELOC_OPENRISC_REL_26, R_OPENRISC_INSN_REL_26 },
+ { BFD_RELOC_OPENRISC_ABS_26, R_OPENRISC_INSN_ABS_26 },
+ { BFD_RELOC_HI16, R_OPENRISC_HI_16_IN_INSN },
{ BFD_RELOC_LO16, R_OPENRISC_LO_16_IN_INSN },
{ BFD_RELOC_VTABLE_INHERIT, R_OPENRISC_GNU_VTINHERIT },
{ BFD_RELOC_VTABLE_ENTRY, R_OPENRISC_GNU_VTENTRY }
@@ -213,6 +214,23 @@ openrisc_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+openrisc_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (openrisc_elf_howto_table)
+ / sizeof (openrisc_elf_howto_table[0]));
+ i++)
+ if (openrisc_elf_howto_table[i].name != NULL
+ && strcasecmp (openrisc_elf_howto_table[i].name, r_name) == 0)
+ return &openrisc_elf_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an OpenRISC ELF reloc. */
static void
@@ -303,9 +321,6 @@ openrisc_elf_relocate_section (bfd *output_bfd,
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
relend = relocs + input_section->reloc_count;
@@ -333,7 +348,6 @@ openrisc_elf_relocate_section (bfd *output_bfd,
(sizeof openrisc_elf_howto_table / sizeof (reloc_howto_type)))
abort ();
- /* This is a final link. */
howto = openrisc_elf_howto_table + ELF32_R_TYPE (rel->r_info);
h = NULL;
sym = NULL;
@@ -359,6 +373,20 @@ openrisc_elf_relocate_section (bfd *output_bfd,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
r = openrisc_final_link_relocate (howto, input_bfd, input_section,
contents, rel, relocation);
@@ -413,47 +441,20 @@ openrisc_elf_relocate_section (bfd *output_bfd,
static asection *
openrisc_elf_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
Elf_Internal_Rela *rel,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
- if (h == NULL)
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_OPENRISC_GNU_VTINHERIT:
- case R_OPENRISC_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
-
- return NULL;
-}
-
-/* Update the got entry reference counts for the section being removed. */
-
-static bfd_boolean
-openrisc_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- asection *sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
-{
- return TRUE;
+ if (h != NULL)
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_OPENRISC_GNU_VTINHERIT:
+ case R_OPENRISC_GNU_VTENTRY:
+ return NULL;
+ }
+
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Look through the relocs for a section during the first phase.
@@ -560,13 +561,13 @@ openrisc_elf_final_write_processing (bfd *abfd,
#define elf_info_to_howto openrisc_info_to_howto_rela
#define elf_backend_relocate_section openrisc_elf_relocate_section
#define elf_backend_gc_mark_hook openrisc_elf_gc_mark_hook
-#define elf_backend_gc_sweep_hook openrisc_elf_gc_sweep_hook
#define elf_backend_check_relocs openrisc_elf_check_relocs
#define elf_backend_can_gc_sections 1
#define elf_backend_rela_normal 1
#define bfd_elf32_bfd_reloc_type_lookup openrisc_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup openrisc_reloc_name_lookup
#define elf_backend_object_p openrisc_elf_object_p
#define elf_backend_final_write_processing openrisc_elf_final_write_processing
diff --git a/bfd/elf32-or32.c b/bfd/elf32-or32.c
index 546aa151f5c8..598c8c5e5702 100644
--- a/bfd/elf32-or32.c
+++ b/bfd/elf32-or32.c
@@ -1,5 +1,5 @@
/* OR32-specific support for 32-bit ELF
- Copyright 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2002, 2004, 2005, 2007 Free Software Foundation, Inc.
Contributed by Ivan Guzvinec <ivang@opencores.org>
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/or32.h"
@@ -466,6 +466,22 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (elf_or32_howto_table) / sizeof (elf_or32_howto_table[0]);
+ i++)
+ if (elf_or32_howto_table[i].name != NULL
+ && strcasecmp (elf_or32_howto_table[i].name, r_name) == 0)
+ return &elf_or32_howto_table[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an OR32 ELF reloc. */
static void
diff --git a/bfd/elf32-pj.c b/bfd/elf32-pj.c
index bd0a5b49ffa8..6b2f1de70b9d 100644
--- a/bfd/elf32-pj.c
+++ b/bfd/elf32-pj.c
@@ -1,5 +1,6 @@
/* picoJava specific support for 32-bit ELF
- Copyright 1999, 2000, 2001, 2002, 2005 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2001, 2002, 2005, 2007
+ Free Software Foundation, Inc.
Contributed by Steve Chamberlan of Transmeta (sac@pobox.com).
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +19,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -291,6 +292,22 @@ pj_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+pj_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (pj_elf_howto_table) / sizeof (pj_elf_howto_table[0]);
+ i++)
+ if (pj_elf_howto_table[i].name != NULL
+ && strcasecmp (pj_elf_howto_table[i].name, r_name) == 0)
+ return &pj_elf_howto_table[i];
+
+ return NULL;
+}
+
/* Given an ELF reloc, fill in the howto field of a relent. */
static void
@@ -326,8 +343,10 @@ pj_elf_final_write_processing (bfd *abfd,
#define ELF_MACHINE_CODE EM_PJ
#define ELF_MACHINE_ALT1 EM_PJ_OLD
#define ELF_MAXPAGESIZE 0x1000
-#define bfd_elf32_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents
-#define bfd_elf32_bfd_reloc_type_lookup pj_elf_reloc_type_lookup
-#define elf_backend_final_write_processing pj_elf_final_write_processing
-#define elf_info_to_howto pj_elf_info_to_howto
+#define bfd_elf32_bfd_get_relocated_section_contents \
+ bfd_generic_get_relocated_section_contents
+#define bfd_elf32_bfd_reloc_type_lookup pj_elf_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup pj_elf_reloc_name_lookup
+#define elf_backend_final_write_processing pj_elf_final_write_processing
+#define elf_info_to_howto pj_elf_info_to_howto
#include "elf32-target.h"
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index 53d1046bb8cb..d67ad866a6f0 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -1,6 +1,6 @@
/* PowerPC-specific support for 32-bit ELF
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -25,8 +25,9 @@
suggestions from the in-progress Embedded PowerPC ABI, and that
information may also not match. */
-#include "bfd.h"
#include "sysdep.h"
+#include <stdarg.h>
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -1577,6 +1578,22 @@ ppc_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return ppc_elf_howto_table[r];
};
+static reloc_howto_type *
+ppc_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (ppc_elf_howto_raw) / sizeof (ppc_elf_howto_raw[0]);
+ i++)
+ if (ppc_elf_howto_raw[i].name != NULL
+ && strcasecmp (ppc_elf_howto_raw[i].name, r_name) == 0)
+ return &ppc_elf_howto_raw[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for a PowerPC ELF reloc. */
static void
@@ -1590,6 +1607,17 @@ ppc_elf_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
BFD_ASSERT (ELF32_R_TYPE (dst->r_info) < (unsigned int) R_PPC_max);
cache_ptr->howto = ppc_elf_howto_table[ELF32_R_TYPE (dst->r_info)];
+
+ /* Just because the above assert didn't trigger doesn't mean that
+ ELF32_R_TYPE (dst->r_info) is necessarily a valid relocation. */
+ if (!cache_ptr->howto)
+ {
+ (*_bfd_error_handler) (_("%B: invalid relocation type %d"),
+ abfd, ELF32_R_TYPE (dst->r_info));
+ bfd_set_error (bfd_error_bad_value);
+
+ cache_ptr->howto = ppc_elf_howto_table[R_PPC_NONE];
+ }
}
/* Handle the R_PPC_ADDR16_HA and R_PPC_REL16_HA relocs. */
@@ -1695,6 +1723,10 @@ struct ppc_elf_obj_tdata
/* A mapping from local symbols to offsets into the various linker
sections added. This is index by the symbol index. */
elf_linker_section_pointers_t **linker_section_pointers;
+
+ /* Flags used to auto-detect plt type. */
+ unsigned int makes_plt_call : 1;
+ unsigned int has_rel16 : 1;
};
#define ppc_elf_tdata(bfd) \
@@ -1708,11 +1740,14 @@ struct ppc_elf_obj_tdata
static bfd_boolean
ppc_elf_mkobject (bfd *abfd)
{
- bfd_size_type amt = sizeof (struct ppc_elf_obj_tdata);
- abfd->tdata.any = bfd_zalloc (abfd, amt);
if (abfd->tdata.any == NULL)
- return FALSE;
- return TRUE;
+ {
+ bfd_size_type amt = sizeof (struct ppc_elf_obj_tdata);
+ abfd->tdata.any = bfd_zalloc (abfd, amt);
+ if (abfd->tdata.any == NULL)
+ return FALSE;
+ }
+ return bfd_elf_mkobject (abfd);
}
/* Fix bad default arch selected for a 32 bit input bfd when the
@@ -1810,6 +1845,52 @@ ppc_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
return TRUE;
}
+static char *
+ppc_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type, ...)
+{
+ switch (note_type)
+ {
+ default:
+ return NULL;
+
+ case NT_PRPSINFO:
+ {
+ char data[128];
+ va_list ap;
+
+ va_start (ap, note_type);
+ memset (data, 0, 32);
+ strncpy (data + 32, va_arg (ap, const char *), 16);
+ strncpy (data + 48, va_arg (ap, const char *), 80);
+ va_end (ap);
+ return elfcore_write_note (abfd, buf, bufsiz,
+ "CORE", note_type, data, sizeof (data));
+ }
+
+ case NT_PRSTATUS:
+ {
+ char data[268];
+ va_list ap;
+ long pid;
+ int cursig;
+ const void *greg;
+
+ va_start (ap, note_type);
+ memset (data, 0, 72);
+ pid = va_arg (ap, long);
+ bfd_put_32 (abfd, pid, data + 24);
+ cursig = va_arg (ap, int);
+ bfd_put_16 (abfd, cursig, data + 12);
+ greg = va_arg (ap, const void *);
+ memcpy (data + 72, greg, 192);
+ memset (data + 264, 0, 4);
+ va_end (ap);
+ return elfcore_write_note (abfd, buf, bufsiz,
+ "CORE", note_type, data, sizeof (data));
+ }
+ }
+}
+
/* Return address for Ith PLT stub in section PLT, for relocation REL
or (bfd_vma) -1 if it should not be included. */
@@ -1869,7 +1950,8 @@ ppc_elf_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
need to bump up the number of section headers. */
static int
-ppc_elf_additional_program_headers (bfd *abfd)
+ppc_elf_additional_program_headers (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
asection *s;
int ret = 0;
@@ -1892,21 +1974,21 @@ ppc_elf_additional_program_headers (bfd *abfd)
static const struct bfd_elf_special_section ppc_elf_special_sections[] =
{
- { ".plt", 4, 0, SHT_NOBITS, SHF_ALLOC + SHF_EXECINSTR },
- { ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
- { ".sbss2", 6, -2, SHT_PROGBITS, SHF_ALLOC },
- { ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".sdata2", 7, -2, SHT_PROGBITS, SHF_ALLOC },
- { ".tags", 5, 0, SHT_ORDERED, SHF_ALLOC },
- { ".PPC.EMB.apuinfo", 16, 0, SHT_NOTE, 0 },
- { ".PPC.EMB.sbss0", 14, 0, SHT_PROGBITS, SHF_ALLOC },
- { ".PPC.EMB.sdata0", 15, 0, SHT_PROGBITS, SHF_ALLOC },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".plt"), 0, SHT_NOBITS, SHF_ALLOC + SHF_EXECINSTR },
+ { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".sbss2"), -2, SHT_PROGBITS, SHF_ALLOC },
+ { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".sdata2"), -2, SHT_PROGBITS, SHF_ALLOC },
+ { STRING_COMMA_LEN (".tags"), 0, SHT_ORDERED, SHF_ALLOC },
+ { STRING_COMMA_LEN (".PPC.EMB.apuinfo"), 0, SHT_NOTE, 0 },
+ { STRING_COMMA_LEN (".PPC.EMB.sbss0"), 0, SHT_PROGBITS, SHF_ALLOC },
+ { STRING_COMMA_LEN (".PPC.EMB.sdata0"), 0, SHT_PROGBITS, SHF_ALLOC },
+ { NULL, 0, 0, 0, 0 }
};
/* This is what we want for new plt/got. */
static struct bfd_elf_special_section ppc_alt_plt =
- { ".plt", 4, 0, SHT_PROGBITS, SHF_ALLOC };
+ { STRING_COMMA_LEN (".plt"), 0, SHT_PROGBITS, SHF_ALLOC };
static const struct bfd_elf_special_section *
ppc_elf_get_sec_type_attr (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
@@ -2147,6 +2229,7 @@ ppc_elf_begin_write_processing (bfd *abfd, struct bfd_link_info *link_info)
static bfd_boolean
ppc_elf_write_section (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
asection *asec,
bfd_byte *contents ATTRIBUTE_UNUSED)
{
@@ -2313,13 +2396,6 @@ struct ppc_elf_link_hash_entry
#define ppc_elf_hash_entry(ent) ((struct ppc_elf_link_hash_entry *) (ent))
-enum ppc_elf_plt_type {
- PLT_UNSET,
- PLT_OLD,
- PLT_NEW,
- PLT_VXWORKS
-};
-
/* PPC ELF linker hash table. */
struct ppc_elf_link_hash_table
@@ -2339,9 +2415,18 @@ struct ppc_elf_link_hash_table
elf_linker_section_t sdata[2];
asection *sbss;
+ /* The (unloaded but important) .rela.plt.unloaded on VxWorks. */
+ asection *srelplt2;
+
+ /* The .got.plt section (VxWorks only)*/
+ asection *sgotplt;
+
/* Shortcut to .__tls_get_addr. */
struct elf_link_hash_entry *tls_get_addr;
+ /* The bfd that forced an old-style PLT. */
+ bfd *old_bfd;
+
/* TLS local dynamic got entry handling. */
union {
bfd_signed_vma refcount;
@@ -2359,23 +2444,11 @@ struct ppc_elf_link_hash_table
/* The type of PLT we have chosen to use. */
enum ppc_elf_plt_type plt_type;
- /* Whether we can use the new PLT layout. */
- unsigned int can_use_new_plt:1;
-
/* Set if we should emit symbols for stubs. */
unsigned int emit_stub_syms:1;
- /* Small local sym to section mapping cache. */
- struct sym_sec_cache sym_sec;
-
- /* The (unloaded but important) .rela.plt.unloaded on VxWorks. */
- asection *srelplt2;
-
- /* The .got.plt section (VxWorks only)*/
- asection *sgotplt;
-
/* True if the target system is VxWorks. */
- int is_vxworks;
+ unsigned int is_vxworks:1;
/* The size of PLT entries. */
int plt_entry_size;
@@ -2383,6 +2456,9 @@ struct ppc_elf_link_hash_table
int plt_slot_size;
/* The size of the first PLT entry. */
int plt_initial_entry_size;
+
+ /* Small local sym to section mapping cache. */
+ struct sym_sec_cache sym_sec;
};
/* Get the PPC ELF linker hash table from a link_info structure. */
@@ -2454,8 +2530,6 @@ ppc_elf_link_hash_table_create (bfd *abfd)
ret->plt_entry_size = 12;
ret->plt_slot_size = 8;
ret->plt_initial_entry_size = 72;
-
- ret->is_vxworks = 0;
return &ret->elf.root;
}
@@ -3225,8 +3299,13 @@ ppc_elf_check_relocs (bfd *abfd,
}
else
{
- bfd_vma addend = r_type == R_PPC_PLTREL24 ? rel->r_addend : 0;
+ bfd_vma addend = 0;
+ if (r_type == R_PPC_PLTREL24)
+ {
+ ppc_elf_tdata (abfd)->makes_plt_call = 1;
+ addend = rel->r_addend;
+ }
h->needs_plt = 1;
if (!update_plt_info (abfd, h, got2, addend))
return FALSE;
@@ -3251,7 +3330,7 @@ ppc_elf_check_relocs (bfd *abfd,
case R_PPC_REL16_LO:
case R_PPC_REL16_HI:
case R_PPC_REL16_HA:
- htab->can_use_new_plt = 1;
+ ppc_elf_tdata (abfd)->has_rel16 = 1;
break;
/* These are just markers. */
@@ -3280,7 +3359,10 @@ ppc_elf_check_relocs (bfd *abfd,
/* This refers only to functions defined in the shared library. */
case R_PPC_LOCAL24PC:
if (h && h == htab->elf.hgot && htab->plt_type == PLT_UNSET)
- htab->plt_type = PLT_OLD;
+ {
+ htab->plt_type = PLT_OLD;
+ htab->old_bfd = abfd;
+ }
break;
/* This relocation describes the C++ object vtable hierarchy.
@@ -3334,7 +3416,10 @@ ppc_elf_check_relocs (bfd *abfd,
s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, sec,
r_symndx);
if (s == got2)
- htab->plt_type = PLT_OLD;
+ {
+ htab->plt_type = PLT_OLD;
+ htab->old_bfd = abfd;
+ }
}
if (h == NULL || h == htab->elf.hgot)
break;
@@ -3349,7 +3434,10 @@ ppc_elf_check_relocs (bfd *abfd,
if (h == htab->elf.hgot)
{
if (htab->plt_type == PLT_UNSET)
- htab->plt_type = PLT_OLD;
+ {
+ htab->plt_type = PLT_OLD;
+ htab->old_bfd = abfd;
+ }
break;
}
/* fall through */
@@ -3432,7 +3520,7 @@ ppc_elf_check_relocs (bfd *abfd,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
name + 5) == 0);
@@ -3506,6 +3594,62 @@ ppc_elf_check_relocs (bfd *abfd,
return TRUE;
}
+
+/* Merge object attributes from IBFD into OBFD. Raise an error if
+ there are conflicting attributes. */
+static bfd_boolean
+ppc_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
+{
+ obj_attribute *in_attr;
+ obj_attribute *out_attr;
+
+ if (!elf_known_obj_attributes_proc (obfd)[0].i)
+ {
+ /* This is the first object. Copy the attributes. */
+ _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
+ /* Use the Tag_null value to indicate the attributes have been
+ initialized. */
+ elf_known_obj_attributes_proc (obfd)[0].i = 1;
+
+ return TRUE;
+ }
+
+ /* Check for conflicting Tag_GNU_Power_ABI_FP attributes and merge
+ non-conflicting ones. */
+ in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
+ out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
+ if (in_attr[Tag_GNU_Power_ABI_FP].i != out_attr[Tag_GNU_Power_ABI_FP].i)
+ {
+ out_attr[Tag_GNU_Power_ABI_FP].type = 1;
+ if (out_attr[Tag_GNU_Power_ABI_FP].i == 0)
+ out_attr[Tag_GNU_Power_ABI_FP].i = in_attr[Tag_GNU_Power_ABI_FP].i;
+ else if (in_attr[Tag_GNU_Power_ABI_FP].i == 0)
+ ;
+ else if (out_attr[Tag_GNU_Power_ABI_FP].i == 1
+ && in_attr[Tag_GNU_Power_ABI_FP].i == 2)
+ _bfd_error_handler
+ (_("Warning: %B uses hard float, %B uses soft float"), obfd, ibfd);
+ else if (out_attr[Tag_GNU_Power_ABI_FP].i == 2
+ && in_attr[Tag_GNU_Power_ABI_FP].i == 1)
+ _bfd_error_handler
+ (_("Warning: %B uses hard float, %B uses soft float"), ibfd, obfd);
+ else if (in_attr[Tag_GNU_Power_ABI_FP].i > 2)
+ _bfd_error_handler
+ (_("Warning: %B uses unknown floating point ABI %d"), ibfd,
+ in_attr[Tag_GNU_Power_ABI_FP].i);
+ else
+ _bfd_error_handler
+ (_("Warning: %B uses unknown floating point ABI %d"), obfd,
+ out_attr[Tag_GNU_Power_ABI_FP].i);
+ }
+
+ /* Merge Tag_compatibility attributes and any common GNU ones. */
+ _bfd_elf_merge_object_attributes (ibfd, obfd);
+
+ return TRUE;
+}
+
/* Merge backend specific data from an object file to the output
object file when linking. */
@@ -3524,6 +3668,9 @@ ppc_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
if (! _bfd_generic_verify_endian_match (ibfd, obfd))
return FALSE;
+ if (!ppc_elf_merge_obj_attributes (ibfd, obfd))
+ return FALSE;
+
new_flags = elf_elfheader (ibfd)->e_flags;
old_flags = elf_elfheader (obfd)->e_flags;
if (!elf_flags_init (obfd))
@@ -3603,7 +3750,7 @@ ppc_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
int
ppc_elf_select_plt_layout (bfd *output_bfd ATTRIBUTE_UNUSED,
struct bfd_link_info *info,
- int force_old_plt,
+ enum ppc_elf_plt_type plt_style,
int emit_stub_syms)
{
struct ppc_elf_link_hash_table *htab;
@@ -3612,8 +3759,37 @@ ppc_elf_select_plt_layout (bfd *output_bfd ATTRIBUTE_UNUSED,
htab = ppc_elf_hash_table (info);
if (htab->plt_type == PLT_UNSET)
- htab->plt_type = (force_old_plt || !htab->can_use_new_plt
- ? PLT_OLD : PLT_NEW);
+ {
+ if (plt_style == PLT_OLD)
+ htab->plt_type = PLT_OLD;
+ else
+ {
+ bfd *ibfd;
+ enum ppc_elf_plt_type plt_type = plt_style;
+
+ /* Look through the reloc flags left by ppc_elf_check_relocs.
+ Use the old style bss plt if a file makes plt calls
+ without using the new relocs, and if ld isn't given
+ --secure-plt and we never see REL16 relocs. */
+ if (plt_type == PLT_UNSET)
+ plt_type = PLT_OLD;
+ for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
+ if (is_ppc_elf_target (ibfd->xvec))
+ {
+ if (ppc_elf_tdata (ibfd)->has_rel16)
+ plt_type = PLT_NEW;
+ else if (ppc_elf_tdata (ibfd)->makes_plt_call)
+ {
+ plt_type = PLT_OLD;
+ htab->old_bfd = ibfd;
+ break;
+ }
+ }
+ htab->plt_type = plt_type;
+ }
+ }
+ if (htab->plt_type == PLT_OLD && plt_style == PLT_NEW)
+ info->callbacks->info (_("Using bss-plt due to %B"), htab->old_bfd);
htab->emit_stub_syms = emit_stub_syms;
@@ -3649,38 +3825,20 @@ ppc_elf_select_plt_layout (bfd *output_bfd ATTRIBUTE_UNUSED,
static asection *
ppc_elf_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
Elf_Internal_Rela *rel,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_PPC_GNU_VTINHERIT:
- case R_PPC_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_PPC_GNU_VTINHERIT:
+ case R_PPC_GNU_VTENTRY:
+ return NULL;
+ }
- return NULL;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update the got, plt and dynamic reloc reference counts for the
@@ -4048,7 +4206,6 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
{
struct ppc_elf_link_hash_table *htab;
asection *s;
- unsigned int power_of_two;
#ifdef DEBUG
fprintf (stderr, "ppc_elf_adjust_dynamic_symbol called for %s\n",
@@ -4190,28 +4347,7 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 4)
- power_of_two = 4;
-
- /* Apply the required alignment. */
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (htab->elf.dynobj, s))
- {
- if (! bfd_set_section_alignment (htab->elf.dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Generate a symbol to mark plt call stubs. For non-PIC code the sym is
@@ -4450,13 +4586,15 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
}
else
ent->plt.offset = (bfd_vma) -1;
-
- if (!doneone)
- {
- h->plt.plist = NULL;
- h->needs_plt = 0;
- }
}
+ else
+ ent->plt.offset = (bfd_vma) -1;
+
+ if (!doneone)
+ {
+ h->plt.plist = NULL;
+ h->needs_plt = 0;
+ }
}
else
{
@@ -4860,7 +4998,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
{
/* Strip these too. */
}
- else if (strncmp (bfd_get_section_name (dynobj, s), ".rela", 5) == 0)
+ else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
{
if (s->size != 0)
{
@@ -5518,6 +5656,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
asection *got2, *sreloc = NULL;
bfd_vma *local_got_offsets;
bfd_boolean ret = TRUE;
+ bfd_vma d_offset = (bfd_big_endian (output_bfd) ? 2 : 0);
#ifdef DEBUG
_bfd_error_handler ("ppc_elf_relocate_section called for %B section %A, "
@@ -5529,29 +5668,6 @@ ppc_elf_relocate_section (bfd *output_bfd,
got2 = bfd_get_section_by_name (input_bfd, ".got2");
- if (info->relocatable)
- {
- if (got2 == NULL)
- return TRUE;
-
- rel = relocs;
- relend = relocs + input_section->reloc_count;
- for (; rel < relend; rel++)
- {
- enum elf_ppc_reloc_type r_type;
-
- r_type = ELF32_R_TYPE (rel->r_info);
- if (r_type == R_PPC_PLTREL24
- && rel->r_addend >= 32768)
- {
- /* R_PPC_PLTREL24 is rather special. If non-zero, the
- addend specifies the GOT pointer offset within .got2. */
- rel->r_addend += got2->output_offset;
- }
- }
- return TRUE;
- }
-
/* Initialize howto table if not already done. */
if (!ppc_elf_howto_table[R_PPC_ADDR32])
ppc_elf_howto_init ();
@@ -5605,6 +5721,33 @@ ppc_elf_relocate_section (bfd *output_bfd,
sym_name = h->root.root.string;
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ howto = NULL;
+ if (r_type < R_PPC_max)
+ howto = ppc_elf_howto_table[r_type];
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ {
+ if (got2 != NULL
+ && r_type == R_PPC_PLTREL24
+ && rel->r_addend >= 32768)
+ {
+ /* R_PPC_PLTREL24 is rather special. If non-zero, the
+ addend specifies the GOT pointer offset within .got2. */
+ rel->r_addend += got2->output_offset;
+ }
+ continue;
+ }
+
/* TLS optimizations. Replace instruction sequences and relocs
based on information we collected in tls_optimize. We edit
RELOCS so that --emit-relocs will output something sensible
@@ -5644,10 +5787,10 @@ ppc_elf_relocate_section (bfd *output_bfd,
&& (tls_mask & TLS_TPREL) == 0)
{
bfd_vma insn;
- insn = bfd_get_32 (output_bfd, contents + rel->r_offset - 2);
+ insn = bfd_get_32 (output_bfd, contents + rel->r_offset - d_offset);
insn &= 31 << 21;
insn |= 0x3c020000; /* addis 0,2,0 */
- bfd_put_32 (output_bfd, insn, contents + rel->r_offset - 2);
+ bfd_put_32 (output_bfd, insn, contents + rel->r_offset - d_offset);
r_type = R_PPC_TPREL16_HA;
rel->r_info = ELF32_R_INFO (r_symndx, r_type);
}
@@ -5691,9 +5834,10 @@ ppc_elf_relocate_section (bfd *output_bfd,
bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
r_type = R_PPC_TPREL16_LO;
rel->r_info = ELF32_R_INFO (r_symndx, r_type);
+
/* Was PPC_TLS which sits on insn boundary, now
- PPC_TPREL16_LO which is at insn+2. */
- rel->r_offset += 2;
+ PPC_TPREL16_LO which is at low-order half-word. */
+ rel->r_offset += d_offset;
}
break;
@@ -5715,7 +5859,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
else
{
bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
- rel->r_offset -= 2;
+ rel->r_offset -= d_offset;
r_type = R_PPC_NONE;
}
rel->r_info = ELF32_R_INFO (r_symndx, r_type);
@@ -5764,7 +5908,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
/* OK, it checks out. Replace the call. */
offset = rel[1].r_offset;
insn1 = bfd_get_32 (output_bfd,
- contents + rel->r_offset - 2);
+ contents + rel->r_offset - d_offset);
if ((tls_mask & tls_gd) != 0)
{
/* IE */
@@ -5792,10 +5936,10 @@ ppc_elf_relocate_section (bfd *output_bfd,
rel->r_info = ELF32_R_INFO (r_symndx, r_type);
rel[1].r_info = ELF32_R_INFO (r_symndx,
R_PPC_TPREL16_LO);
- rel[1].r_offset += 2;
+ rel[1].r_offset += d_offset;
rel[1].r_addend = rel->r_addend;
}
- bfd_put_32 (output_bfd, insn1, contents + rel->r_offset - 2);
+ bfd_put_32 (output_bfd, insn1, contents + rel->r_offset - d_offset);
bfd_put_32 (output_bfd, insn2, contents + offset);
if (tls_gd == 0)
{
@@ -6189,14 +6333,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
case R_PPC_ADDR14_BRNTAKEN:
case R_PPC_UADDR32:
case R_PPC_UADDR16:
- /* r_symndx will be zero only for relocs against symbols
- from removed linkonce sections, or sections discarded by
- a linker script. */
dodyn:
- if (r_symndx == 0)
- break;
- /* Fall thru. */
-
if ((input_section->flags & SEC_ALLOC) == 0)
break;
/* Fall thru. */
@@ -6238,7 +6375,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (input_bfd,
input_section),
name + 5) == 0);
@@ -6294,10 +6431,15 @@ ppc_elf_relocate_section (bfd *output_bfd,
but ld.so expects buggy relocs. */
osec = sec->output_section;
indx = elf_section_data (osec)->dynindx;
- BFD_ASSERT (indx > 0);
+ if (indx == 0)
+ {
+ osec = htab->elf.text_index_section;
+ indx = elf_section_data (osec)->dynindx;
+ }
+ BFD_ASSERT (indx != 0);
#ifdef DEBUG
- if (indx <= 0)
- printf ("indx=%d section=%s flags=%08x name=%s\n",
+ if (indx == 0)
+ printf ("indx=%ld section=%s flags=%08x name=%s\n",
indx, osec->name, osec->flags,
h->root.root.string);
#endif
@@ -6441,9 +6583,9 @@ ppc_elf_relocate_section (bfd *output_bfd,
BFD_ASSERT (sec != NULL);
name = bfd_get_section_name (abfd, sec->output_section);
- if (! ((strncmp (name, ".sdata", 6) == 0
+ if (! ((CONST_STRNEQ (name, ".sdata")
&& (name[6] == 0 || name[6] == '.'))
- || (strncmp (name, ".sbss", 5) == 0
+ || (CONST_STRNEQ (name, ".sbss")
&& (name[5] == 0 || name[5] == '.'))))
{
(*_bfd_error_handler)
@@ -6469,8 +6611,8 @@ ppc_elf_relocate_section (bfd *output_bfd,
BFD_ASSERT (sec != NULL);
name = bfd_get_section_name (abfd, sec->output_section);
- if (! (strncmp (name, ".sdata2", 7) == 0
- || strncmp (name, ".sbss2", 6) == 0))
+ if (! (CONST_STRNEQ (name, ".sdata2")
+ || CONST_STRNEQ (name, ".sbss2")))
{
(*_bfd_error_handler)
(_("%B: the target (%s) of a %s relocation is "
@@ -6501,9 +6643,9 @@ ppc_elf_relocate_section (bfd *output_bfd,
BFD_ASSERT (sec != NULL);
name = bfd_get_section_name (abfd, sec->output_section);
- if (((strncmp (name, ".sdata", 6) == 0
+ if (((CONST_STRNEQ (name, ".sdata")
&& (name[6] == 0 || name[6] == '.'))
- || (strncmp (name, ".sbss", 5) == 0
+ || (CONST_STRNEQ (name, ".sbss")
&& (name[5] == 0 || name[5] == '.'))))
{
reg = 13;
@@ -6513,8 +6655,8 @@ ppc_elf_relocate_section (bfd *output_bfd,
+ sh->root.u.def.section->output_section->vma);
}
- else if (strncmp (name, ".sdata2", 7) == 0
- || strncmp (name, ".sbss2", 6) == 0)
+ else if (CONST_STRNEQ (name, ".sdata2")
+ || CONST_STRNEQ (name, ".sbss2"))
{
reg = 2;
sh = htab->sdata[1].sym;
@@ -6605,25 +6747,28 @@ ppc_elf_relocate_section (bfd *output_bfd,
case R_PPC_ADDR16_HA:
case R_PPC_REL16_HA:
- case R_PPC_GOT16_HA:
- case R_PPC_PLT16_HA:
case R_PPC_SECTOFF_HA:
case R_PPC_TPREL16_HA:
case R_PPC_DTPREL16_HA:
- case R_PPC_GOT_TLSGD16_HA:
- case R_PPC_GOT_TLSLD16_HA:
- case R_PPC_GOT_TPREL16_HA:
- case R_PPC_GOT_DTPREL16_HA:
case R_PPC_EMB_NADDR16_HA:
case R_PPC_EMB_RELST_HA:
/* It's just possible that this symbol is a weak symbol
that's not actually defined anywhere. In that case,
'sec' would be NULL, and we should leave the symbol
alone (it will be set to zero elsewhere in the link). */
- if (sec != NULL)
- /* Add 0x10000 if sign bit in 0:15 is set.
- Bits 0:15 are not used. */
- addend += 0x8000;
+ if (sec == NULL)
+ break;
+ /* Fall thru */
+
+ case R_PPC_PLT16_HA:
+ case R_PPC_GOT16_HA:
+ case R_PPC_GOT_TLSGD16_HA:
+ case R_PPC_GOT_TLSLD16_HA:
+ case R_PPC_GOT_TPREL16_HA:
+ case R_PPC_GOT_DTPREL16_HA:
+ /* Add 0x10000 if sign bit in 0:15 is set.
+ Bits 0:15 are not used. */
+ addend += 0x8000;
break;
}
@@ -7436,6 +7581,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
#define ELF_MAXPAGESIZE 0x10000
#endif
#define ELF_MINPAGESIZE 0x1000
+#define ELF_COMMONPAGESIZE 0x1000
#define elf_info_to_howto ppc_elf_info_to_howto
#ifdef EM_CYGNUS_POWERPC
@@ -7455,6 +7601,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
#define bfd_elf32_bfd_merge_private_bfd_data ppc_elf_merge_private_bfd_data
#define bfd_elf32_bfd_relax_section ppc_elf_relax_section
#define bfd_elf32_bfd_reloc_type_lookup ppc_elf_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup ppc_elf_reloc_name_lookup
#define bfd_elf32_bfd_set_private_flags ppc_elf_set_private_flags
#define bfd_elf32_bfd_link_hash_table_create ppc_elf_link_hash_table_create
@@ -7475,6 +7622,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
#define elf_backend_additional_program_headers ppc_elf_additional_program_headers
#define elf_backend_grok_prstatus ppc_elf_grok_prstatus
#define elf_backend_grok_psinfo ppc_elf_grok_psinfo
+#define elf_backend_write_core_note ppc_elf_write_core_note
#define elf_backend_reloc_type_class ppc_elf_reloc_type_class
#define elf_backend_begin_write_processing ppc_elf_begin_write_processing
#define elf_backend_final_write_processing ppc_elf_final_write_processing
@@ -7482,6 +7630,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
#define elf_backend_get_sec_type_attr ppc_elf_get_sec_type_attr
#define elf_backend_plt_sym_val ppc_elf_plt_sym_val
#define elf_backend_action_discarded ppc_elf_action_discarded
+#define elf_backend_init_index_section _bfd_elf_init_1_index_section
#include "elf32-target.h"
diff --git a/bfd/elf32-ppc.h b/bfd/elf32-ppc.h
index 5f8f63a38a59..f5383a7bb587 100644
--- a/bfd/elf32-ppc.h
+++ b/bfd/elf32-ppc.h
@@ -1,5 +1,5 @@
/* PowerPC-specific support for 64-bit ELF.
- Copyright 2003, 2005 Free Software Foundation, Inc.
+ Copyright 2003, 2005, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,7 +17,15 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-int ppc_elf_select_plt_layout (bfd *, struct bfd_link_info *, int, int);
+enum ppc_elf_plt_type {
+ PLT_UNSET,
+ PLT_OLD,
+ PLT_NEW,
+ PLT_VXWORKS
+};
+
+int ppc_elf_select_plt_layout (bfd *, struct bfd_link_info *,
+ enum ppc_elf_plt_type, int);
asection *ppc_elf_tls_setup (bfd *, struct bfd_link_info *);
bfd_boolean ppc_elf_tls_optimize (bfd *, struct bfd_link_info *);
void ppc_elf_set_sdata_syms (bfd *, struct bfd_link_info *);
diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c
index eb8e1724fc19..9e36a5d57465 100644
--- a/bfd/elf32-s390.c
+++ b/bfd/elf32-s390.c
@@ -1,5 +1,5 @@
/* IBM S/390-specific support for 32-bit ELF
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by Carl B. Pedersen and Martin Schwidefsky.
@@ -20,8 +20,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -46,12 +46,6 @@ static void elf_s390_copy_indirect_symbol
static bfd_boolean elf_s390_check_relocs
PARAMS ((bfd *, struct bfd_link_info *, asection *,
const Elf_Internal_Rela *));
-static asection *elf_s390_gc_mark_hook
- PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *,
- struct elf_link_hash_entry *, Elf_Internal_Sym *));
-static bfd_boolean elf_s390_gc_sweep_hook
- PARAMS ((bfd *, struct bfd_link_info *, asection *,
- const Elf_Internal_Rela *));
struct elf_s390_link_hash_entry;
static void elf_s390_adjust_gotplt
PARAMS ((struct elf_s390_link_hash_entry *));
@@ -73,8 +67,6 @@ static enum elf_reloc_type_class elf_s390_reloc_type_class
PARAMS ((const Elf_Internal_Rela *));
static bfd_boolean elf_s390_finish_dynamic_sections
PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean elf_s390_mkobject
- PARAMS ((bfd *));
static bfd_boolean elf_s390_object_p
PARAMS ((bfd *));
static bfd_boolean elf_s390_grok_prstatus
@@ -342,6 +334,25 @@ elf_s390_reloc_type_lookup (abfd, code)
return 0;
}
+static reloc_howto_type *
+elf_s390_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof (elf_howto_table) / sizeof (elf_howto_table[0]); i++)
+ if (elf_howto_table[i].name != NULL
+ && strcasecmp (elf_howto_table[i].name, r_name) == 0)
+ return &elf_howto_table[i];
+
+ if (strcasecmp (elf32_s390_vtinherit_howto.name, r_name) == 0)
+ return &elf32_s390_vtinherit_howto;
+ if (strcasecmp (elf32_s390_vtentry_howto.name, r_name) == 0)
+ return &elf32_s390_vtentry_howto;
+
+ return NULL;
+}
+
/* We need to use ELF32_R_TYPE so we have our own copy of this function,
and elf32-s390.c has its own copy. */
@@ -678,14 +689,16 @@ struct elf_s390_obj_tdata
(elf_s390_tdata (abfd)->local_got_tls_type)
static bfd_boolean
-elf_s390_mkobject (abfd)
- bfd *abfd;
+elf_s390_mkobject (bfd *abfd)
{
- bfd_size_type amt = sizeof (struct elf_s390_obj_tdata);
- abfd->tdata.any = bfd_zalloc (abfd, amt);
if (abfd->tdata.any == NULL)
- return FALSE;
- return TRUE;
+ {
+ bfd_size_type amt = sizeof (struct elf_s390_obj_tdata);
+ abfd->tdata.any = bfd_zalloc (abfd, amt);
+ if (abfd->tdata.any == NULL)
+ return FALSE;
+ }
+ return bfd_elf_mkobject (abfd);
}
static bfd_boolean
@@ -1273,7 +1286,7 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
if (name == NULL)
return FALSE;
- if (strncmp (name, ".rela", 5) != 0
+ if (! CONST_STRNEQ (name, ".rela")
|| strcmp (bfd_get_section_name (abfd, sec),
name + 5) != 0)
{
@@ -1379,50 +1392,30 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
relocation. */
static asection *
-elf_s390_gc_mark_hook (sec, info, rel, h, sym)
- asection *sec;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
- Elf_Internal_Rela *rel;
- struct elf_link_hash_entry *h;
- Elf_Internal_Sym *sym;
+elf_s390_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_390_GNU_VTINHERIT:
- case R_390_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_390_GNU_VTINHERIT:
+ case R_390_GNU_VTENTRY:
+ return NULL;
+ }
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
}
/* Update the got entry reference counts for the section being removed. */
static bfd_boolean
-elf_s390_gc_sweep_hook (abfd, info, sec, relocs)
- bfd *abfd;
- struct bfd_link_info *info;
- asection *sec;
- const Elf_Internal_Rela *relocs;
+elf_s390_gc_sweep_hook (bfd *abfd,
+ struct bfd_link_info *info,
+ asection *sec,
+ const Elf_Internal_Rela *relocs)
{
Elf_Internal_Shdr *symtab_hdr;
struct elf_link_hash_entry **sym_hashes;
@@ -1589,7 +1582,6 @@ elf_s390_adjust_dynamic_symbol (info, h)
{
struct elf_s390_link_hash_table *htab;
asection *s;
- unsigned int power_of_two;
/* If this is a function, put it in the procedure linkage table. We
will fill in the contents of the procedure linkage table later
@@ -1710,29 +1702,9 @@ elf_s390_adjust_dynamic_symbol (info, h)
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 3)
- power_of_two = 3;
-
- /* Apply the required alignment. */
s = htab->sdynbss;
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (htab->elf.dynobj, s))
- {
- if (! bfd_set_section_alignment (htab->elf.dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Allocate space in .plt, .got and associated reloc sections for
@@ -2126,7 +2098,7 @@ elf_s390_size_dynamic_sections (output_bfd, info)
/* Strip this section if we don't need it; see the
comment below. */
}
- else if (strncmp (bfd_get_section_name (dynobj, s), ".rela", 5) == 0)
+ else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
{
if (s->size != 0)
relocs = TRUE;
@@ -2268,6 +2240,7 @@ invalid_tls_insn (input_bfd, input_section, rel)
input_section,
(long) rel->r_offset,
howto->name);
+ bfd_set_error (bfd_error_bad_value);
}
/* Relocate a 390 ELF section. */
@@ -2291,9 +2264,6 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
- if (info->relocatable)
- return TRUE;
-
htab = elf_s390_hash_table (info);
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -2328,7 +2298,6 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
howto = elf_howto_table + r_type;
r_symndx = ELF32_R_SYM (rel->r_info);
- /* This is a final link. */
h = NULL;
sym = NULL;
sec = NULL;
@@ -2349,6 +2318,20 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
switch (r_type)
{
case R_390_GOTPLT12:
@@ -2565,11 +2548,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
case R_390_PC16DBL:
case R_390_PC32DBL:
case R_390_PC32:
- /* r_symndx will be zero only for relocs against symbols
- from removed linkonce sections, or sections discarded by
- a linker script. */
- if (r_symndx == 0
- || (input_section->flags & SEC_ALLOC) == 0)
+ if ((input_section->flags & SEC_ALLOC) == 0)
break;
if ((info->shared
@@ -2655,14 +2634,18 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
osec = sec->output_section;
sindx = elf_section_data (osec)->dynindx;
- BFD_ASSERT (sindx > 0);
+ if (sindx == 0)
+ {
+ osec = htab->elf.text_index_section;
+ sindx = elf_section_data (osec)->dynindx;
+ }
+ BFD_ASSERT (sindx != 0);
/* We are turning this relocation into one
against a section symbol, so subtract out
the output section's address but not the
offset of the input section in the output
section. */
-
outrel.r_addend -= osec->vma;
}
outrel.r_info = ELF32_R_INFO (sindx, r_type);
@@ -2926,7 +2909,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
continue;
case R_390_TLS_LDO32:
- if (info->shared || (input_section->flags & SEC_CODE) == 0)
+ if (info->shared)
relocation -= dtpoff_base (info);
else
/* When converting LDO to LE, we must negate. */
@@ -2982,16 +2965,44 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
unsigned int insn;
insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
- if ((insn & 0xff000fff) != 0x4d000000)
+ if ((insn & 0xff000fff) != 0x4d000000 &&
+ (insn & 0xffff0000) != 0xc0e50000)
invalid_tls_insn (input_bfd, input_section, rel);
if (!info->shared && (h == NULL || h->dynindx == -1))
- /* GD->LE transition.
- bas %r14,0(%rx,%r13) -> bc 0,0 */
- insn = 0x47000000;
+ {
+ if ((insn & 0xff000000) == 0x4d000000)
+ {
+ /* GD->LE transition.
+ bas %r14,0(%rx,%r13) -> bc 0,0 */
+ insn = 0x47000000;
+ }
+ else
+ {
+ /* GD->LE transition.
+ brasl %r14,_tls_get_addr@plt -> brcl 0,. */
+ insn = 0xc0040000;
+ bfd_put_16 (output_bfd, 0x0000,
+ contents + rel->r_offset + 4);
+ }
+ }
else
- /* GD->IE transition.
- bas %r14,0(%rx,%r13) -> l %r2,0(%r2,%r12) */
- insn = 0x5822c000;
+ {
+ if ((insn & 0xff000000) == 0x4d000000)
+ {
+ /* GD->IE transition.
+ bas %r14,0(%rx,%r13) -> l %r2,0(%r2,%r12) */
+ insn = 0x5822c000;
+ }
+ else
+ {
+ /* GD->IE transition.
+ brasl %r14,__tls_get_addr@plt ->
+ l %r2,0(%r2,%r12) ; bcr 0,0 */
+ insn = 0x5822c000;
+ bfd_put_16 (output_bfd, 0x0700,
+ contents + rel->r_offset + 4);
+ }
+ }
bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
}
else if (r_type == R_390_TLS_LDCALL)
@@ -3001,11 +3012,23 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
unsigned int insn;
insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
- if ((insn & 0xff000fff) != 0x4d000000)
+ if ((insn & 0xff000fff) != 0x4d000000 &&
+ (insn & 0xffff0000) != 0xc0e50000)
invalid_tls_insn (input_bfd, input_section, rel);
- /* LD->LE transition.
- bas %r14,0(%rx,%r13) -> bc 0,0 */
- insn = 0x47000000;
+ if ((insn & 0xff000000) == 0x4d000000)
+ {
+ /* LD->LE transition.
+ bas %r14,0(%rx,%r13) -> bc 0,0 */
+ insn = 0x47000000;
+ }
+ else
+ {
+ /* LD->LE transition.
+ brasl %r14,__tls_get_addr@plt -> brcl 0,. */
+ insn = 0xc0040000;
+ bfd_put_16 (output_bfd, 0x0000,
+ contents + rel->r_offset + 4);
+ }
bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
}
}
@@ -3515,6 +3538,7 @@ elf_s390_plt_sym_val (bfd_vma i, const asection *plt,
#define bfd_elf32_bfd_is_local_label_name elf_s390_is_local_label_name
#define bfd_elf32_bfd_link_hash_table_create elf_s390_link_hash_table_create
#define bfd_elf32_bfd_reloc_type_lookup elf_s390_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup elf_s390_reloc_name_lookup
#define elf_backend_adjust_dynamic_symbol elf_s390_adjust_dynamic_symbol
#define elf_backend_check_relocs elf_s390_check_relocs
@@ -3527,6 +3551,7 @@ elf_s390_plt_sym_val (bfd_vma i, const asection *plt,
#define elf_backend_reloc_type_class elf_s390_reloc_type_class
#define elf_backend_relocate_section elf_s390_relocate_section
#define elf_backend_size_dynamic_sections elf_s390_size_dynamic_sections
+#define elf_backend_init_index_section _bfd_elf_init_1_index_section
#define elf_backend_reloc_type_class elf_s390_reloc_type_class
#define elf_backend_grok_prstatus elf_s390_grok_prstatus
#define elf_backend_plt_sym_val elf_s390_plt_sym_val
diff --git a/bfd/elf32-score.c b/bfd/elf32-score.c
new file mode 100644
index 000000000000..070177b15075
--- /dev/null
+++ b/bfd/elf32-score.c
@@ -0,0 +1,3883 @@
+/* 32-bit ELF support for S+core.
+ Copyright 2006, 2007 Free Software Foundation, Inc.
+ Contributed by
+ Mei Ligang (ligang@sunnorth.com.cn)
+ Pei-Lin Tsai (pltsai@sunplus.com)
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "libiberty.h"
+#include "elf-bfd.h"
+#include "elf/score.h"
+#include "elf/common.h"
+#include "elf/internal.h"
+#include "hashtab.h"
+
+
+/* Score ELF linker hash table. */
+
+struct score_elf_link_hash_table
+{
+ /* The main hash table. */
+ struct elf_link_hash_table root;
+};
+
+/* The SCORE ELF linker needs additional information for each symbol in
+ the global hash table. */
+
+struct score_elf_link_hash_entry
+{
+ struct elf_link_hash_entry root;
+
+ /* Number of R_SCORE_ABS32, R_SCORE_REL32 relocs against this symbol. */
+ unsigned int possibly_dynamic_relocs;
+
+ /* If the R_SCORE_ABS32, R_SCORE_REL32 reloc is against a readonly section. */
+ bfd_boolean readonly_reloc;
+
+ /* We must not create a stub for a symbol that has relocations related to
+ taking the function's address, i.e. any but R_SCORE_CALL15 ones. */
+ bfd_boolean no_fn_stub;
+
+ /* Are we forced local? This will only be set if we have converted
+ the initial global GOT entry to a local GOT entry. */
+ bfd_boolean forced_local;
+};
+
+/* Traverse a score ELF linker hash table. */
+#define score_elf_link_hash_traverse(table, func, info) \
+ (elf_link_hash_traverse \
+ (&(table)->root, \
+ (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func), \
+ (info)))
+
+/* Get the SCORE elf linker hash table from a link_info structure. */
+#define score_elf_hash_table(info) \
+ ((struct score_elf_link_hash_table *) ((info)->hash))
+
+/* This structure is used to hold .got entries while estimating got sizes. */
+struct score_got_entry
+{
+ /* The input bfd in which the symbol is defined. */
+ bfd *abfd;
+ /* The index of the symbol, as stored in the relocation r_info, if
+ we have a local symbol; -1 otherwise. */
+ long symndx;
+ union
+ {
+ /* If abfd == NULL, an address that must be stored in the got. */
+ bfd_vma address;
+ /* If abfd != NULL && symndx != -1, the addend of the relocation
+ that should be added to the symbol value. */
+ bfd_vma addend;
+ /* If abfd != NULL && symndx == -1, the hash table entry
+ corresponding to a global symbol in the got (or, local, if
+ h->forced_local). */
+ struct score_elf_link_hash_entry *h;
+ } d;
+
+ /* The offset from the beginning of the .got section to the entry
+ corresponding to this symbol+addend. If it's a global symbol
+ whose offset is yet to be decided, it's going to be -1. */
+ long gotidx;
+};
+
+/* This structure is passed to score_elf_sort_hash_table_f when sorting
+ the dynamic symbols. */
+
+struct score_elf_hash_sort_data
+{
+ /* The symbol in the global GOT with the lowest dynamic symbol table index. */
+ struct elf_link_hash_entry *low;
+ /* The least dynamic symbol table index corresponding to a symbol with a GOT entry. */
+ long min_got_dynindx;
+ /* The greatest dynamic symbol table index corresponding to a symbol
+ with a GOT entry that is not referenced (e.g., a dynamic symbol
+ with dynamic relocations pointing to it from non-primary GOTs). */
+ long max_unref_got_dynindx;
+ /* The greatest dynamic symbol table index not corresponding to a
+ symbol without a GOT entry. */
+ long max_non_got_dynindx;
+};
+
+struct score_got_info
+{
+ /* The global symbol in the GOT with the lowest index in the dynamic
+ symbol table. */
+ struct elf_link_hash_entry *global_gotsym;
+ /* The number of global .got entries. */
+ unsigned int global_gotno;
+ /* The number of local .got entries. */
+ unsigned int local_gotno;
+ /* The number of local .got entries we have used. */
+ unsigned int assigned_gotno;
+ /* A hash table holding members of the got. */
+ struct htab *got_entries;
+ /* In multi-got links, a pointer to the next got (err, rather, most
+ of the time, it points to the previous got). */
+ struct score_got_info *next;
+};
+
+/* A structure used to count GOT entries, for GOT entry or ELF symbol table traversal. */
+struct _score_elf_section_data
+{
+ struct bfd_elf_section_data elf;
+ union
+ {
+ struct score_got_info *got_info;
+ bfd_byte *tdata;
+ }
+ u;
+};
+
+#define score_elf_section_data(sec) \
+ ((struct _score_elf_section_data *) elf_section_data (sec))
+
+/* The size of a symbol-table entry. */
+#define SCORE_ELF_SYM_SIZE(abfd) \
+ (get_elf_backend_data (abfd)->s->sizeof_sym)
+
+/* In case we're on a 32-bit machine, construct a 64-bit "-1" value
+ from smaller values. Start with zero, widen, *then* decrement. */
+#define MINUS_ONE (((bfd_vma)0) - 1)
+#define MINUS_TWO (((bfd_vma)0) - 2)
+
+#define PDR_SIZE 32
+
+
+/* The number of local .got entries we reserve. */
+#define SCORE_RESERVED_GOTNO (2)
+#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
+
+/* The offset of $gp from the beginning of the .got section. */
+#define ELF_SCORE_GP_OFFSET(abfd) (0x3ff0)
+/* The maximum size of the GOT for it to be addressable using 15-bit offsets from $gp. */
+#define SCORE_ELF_GOT_MAX_SIZE(abfd) (ELF_SCORE_GP_OFFSET(abfd) + 0x3fff)
+
+#define SCORE_ELF_STUB_SECTION_NAME (".SCORE.stub")
+#define SCORE_FUNCTION_STUB_SIZE (16)
+
+#define STUB_LW 0xc3bcc010 /* lw r29, [r28, -0x3ff0] */
+#define STUB_MOVE 0x8363bc56 /* mv r27, r3 */
+#define STUB_LI16 0x87548000 /* ori r26, .dynsym_index */
+#define STUB_BRL 0x801dbc09 /* brl r29 */
+
+#define SCORE_ELF_GOT_SIZE(abfd) \
+ (get_elf_backend_data (abfd)->s->arch_size / 8)
+
+#define SCORE_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \
+ (_bfd_elf_add_dynamic_entry (info, (bfd_vma) tag, (bfd_vma) val))
+
+/* The size of an external dynamic table entry. */
+#define SCORE_ELF_DYN_SIZE(abfd) \
+ (get_elf_backend_data (abfd)->s->sizeof_dyn)
+
+/* The size of an external REL relocation. */
+#define SCORE_ELF_REL_SIZE(abfd) \
+ (get_elf_backend_data (abfd)->s->sizeof_rel)
+
+/* The default alignment for sections, as a power of two. */
+#define SCORE_ELF_LOG_FILE_ALIGN(abfd)\
+ (get_elf_backend_data (abfd)->s->log_file_align)
+
+#ifndef NUM_ELEM
+#define NUM_ELEM(a) (sizeof (a) / (sizeof (a)[0]))
+#endif
+
+static bfd_byte *hi16_rel_addr;
+
+/* This will be used when we sort the dynamic relocation records. */
+static bfd *reldyn_sorting_bfd;
+
+/* SCORE ELF uses two common sections. One is the usual one, and the
+ other is for small objects. All the small objects are kept
+ together, and then referenced via the gp pointer, which yields
+ faster assembler code. This is what we use for the small common
+ section. This approach is copied from ecoff.c. */
+static asection score_elf_scom_section;
+static asymbol score_elf_scom_symbol;
+static asymbol *score_elf_scom_symbol_ptr;
+
+static bfd_reloc_status_type
+score_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+ arelent *reloc_entry,
+ asymbol *symbol ATTRIBUTE_UNUSED,
+ void * data,
+ asection *input_section ATTRIBUTE_UNUSED,
+ bfd *output_bfd ATTRIBUTE_UNUSED,
+ char **error_message ATTRIBUTE_UNUSED)
+{
+ hi16_rel_addr = (bfd_byte *) data + reloc_entry->address;
+ return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+score_elf_lo16_reloc (bfd *abfd,
+ arelent *reloc_entry,
+ asymbol *symbol ATTRIBUTE_UNUSED,
+ void * data,
+ asection *input_section,
+ bfd *output_bfd ATTRIBUTE_UNUSED,
+ char **error_message ATTRIBUTE_UNUSED)
+{
+ bfd_vma addend = 0, offset = 0;
+ unsigned long val;
+ unsigned long hi16_offset, hi16_value, uvalue;
+
+ hi16_value = bfd_get_32 (abfd, hi16_rel_addr);
+ hi16_offset = ((((hi16_value >> 16) & 0x3) << 15) | (hi16_value & 0x7fff)) >> 1;
+ addend = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
+ offset = ((((addend >> 16) & 0x3) << 15) | (addend & 0x7fff)) >> 1;
+ val = reloc_entry->addend;
+ if (reloc_entry->address > input_section->size)
+ return bfd_reloc_outofrange;
+ uvalue = ((hi16_offset << 16) | (offset & 0xffff)) + val;
+ hi16_offset = (uvalue >> 16) << 1;
+ hi16_value = (hi16_value & ~0x37fff) | (hi16_offset & 0x7fff) | ((hi16_offset << 1) & 0x30000);
+ bfd_put_32 (abfd, hi16_value, hi16_rel_addr);
+ offset = (uvalue & 0xffff) << 1;
+ addend = (addend & ~0x37fff) | (offset & 0x7fff) | ((offset << 1) & 0x30000);
+ bfd_put_32 (abfd, addend, (bfd_byte *) data + reloc_entry->address);
+ return bfd_reloc_ok;
+}
+
+/* Set the GP value for OUTPUT_BFD. Returns FALSE if this is a
+ dangerous relocation. */
+
+static bfd_boolean
+score_elf_assign_gp (bfd *output_bfd, bfd_vma *pgp)
+{
+ unsigned int count;
+ asymbol **sym;
+ unsigned int i;
+
+ /* If we've already figured out what GP will be, just return it. */
+ *pgp = _bfd_get_gp_value (output_bfd);
+ if (*pgp)
+ return TRUE;
+
+ count = bfd_get_symcount (output_bfd);
+ sym = bfd_get_outsymbols (output_bfd);
+
+ /* The linker script will have created a symbol named `_gp' with the
+ appropriate value. */
+ if (sym == NULL)
+ i = count;
+ else
+ {
+ for (i = 0; i < count; i++, sym++)
+ {
+ const char *name;
+
+ name = bfd_asymbol_name (*sym);
+ if (*name == '_' && strcmp (name, "_gp") == 0)
+ {
+ *pgp = bfd_asymbol_value (*sym);
+ _bfd_set_gp_value (output_bfd, *pgp);
+ break;
+ }
+ }
+ }
+
+ if (i >= count)
+ {
+ /* Only get the error once. */
+ *pgp = 4;
+ _bfd_set_gp_value (output_bfd, *pgp);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* We have to figure out the gp value, so that we can adjust the
+ symbol value correctly. We look up the symbol _gp in the output
+ BFD. If we can't find it, we're stuck. We cache it in the ELF
+ target data. We don't need to adjust the symbol value for an
+ external symbol if we are producing relocatable output. */
+
+static bfd_reloc_status_type
+score_elf_final_gp (bfd *output_bfd,
+ asymbol *symbol,
+ bfd_boolean relocatable,
+ char **error_message,
+ bfd_vma *pgp)
+{
+ if (bfd_is_und_section (symbol->section)
+ && ! relocatable)
+ {
+ *pgp = 0;
+ return bfd_reloc_undefined;
+ }
+
+ *pgp = _bfd_get_gp_value (output_bfd);
+ if (*pgp == 0
+ && (! relocatable
+ || (symbol->flags & BSF_SECTION_SYM) != 0))
+ {
+ if (relocatable)
+ {
+ /* Make up a value. */
+ *pgp = symbol->section->output_section->vma + 0x4000;
+ _bfd_set_gp_value (output_bfd, *pgp);
+ }
+ else if (!score_elf_assign_gp (output_bfd, pgp))
+ {
+ *error_message =
+ (char *) _("GP relative relocation when _gp not defined");
+ return bfd_reloc_dangerous;
+ }
+ }
+
+ return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+score_elf_gprel15_with_gp (bfd *abfd,
+ asymbol *symbol,
+ arelent *reloc_entry,
+ asection *input_section,
+ bfd_boolean relocateable,
+ void * data,
+ bfd_vma gp ATTRIBUTE_UNUSED)
+{
+ bfd_vma relocation;
+ unsigned long insn;
+
+ if (bfd_is_com_section (symbol->section))
+ relocation = 0;
+ else
+ relocation = symbol->value;
+
+ relocation += symbol->section->output_section->vma;
+ relocation += symbol->section->output_offset;
+ if (reloc_entry->address > input_section->size)
+ return bfd_reloc_outofrange;
+
+ insn = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
+ if (((reloc_entry->addend & 0xffffc000) != 0)
+ && ((reloc_entry->addend & 0xffffc000) != 0xffffc000))
+ return bfd_reloc_overflow;
+
+ insn = (insn & ~0x7fff) | (reloc_entry->addend & 0x7fff);
+ bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address);
+ if (relocateable)
+ reloc_entry->address += input_section->output_offset;
+
+ return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+gprel32_with_gp (bfd *abfd, asymbol *symbol, arelent *reloc_entry,
+ asection *input_section, bfd_boolean relocatable,
+ void *data, bfd_vma gp)
+{
+ bfd_vma relocation;
+ bfd_vma val;
+
+ if (bfd_is_com_section (symbol->section))
+ relocation = 0;
+ else
+ relocation = symbol->value;
+
+ relocation += symbol->section->output_section->vma;
+ relocation += symbol->section->output_offset;
+
+ if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
+ return bfd_reloc_outofrange;
+
+ /* Set val to the offset into the section or symbol. */
+ val = reloc_entry->addend;
+
+ if (reloc_entry->howto->partial_inplace)
+ val += bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
+
+ /* Adjust val for the final section location and GP value. If we
+ are producing relocatable output, we don't want to do this for
+ an external symbol. */
+ if (! relocatable
+ || (symbol->flags & BSF_SECTION_SYM) != 0)
+ val += relocation - gp;
+
+ if (reloc_entry->howto->partial_inplace)
+ bfd_put_32 (abfd, val, (bfd_byte *) data + reloc_entry->address);
+ else
+ reloc_entry->addend = val;
+
+ if (relocatable)
+ reloc_entry->address += input_section->output_offset;
+
+ return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+score_elf_gprel15_reloc (bfd *abfd,
+ arelent *reloc_entry,
+ asymbol *symbol,
+ void * data,
+ asection *input_section,
+ bfd *output_bfd,
+ char **error_message)
+{
+ bfd_boolean relocateable;
+ bfd_reloc_status_type ret;
+ bfd_vma gp;
+
+ if (output_bfd != (bfd *) NULL
+ && (symbol->flags & BSF_SECTION_SYM) == 0 && reloc_entry->addend == 0)
+ {
+ reloc_entry->address += input_section->output_offset;
+ return bfd_reloc_ok;
+ }
+ if (output_bfd != (bfd *) NULL)
+ relocateable = TRUE;
+ else
+ {
+ relocateable = FALSE;
+ output_bfd = symbol->section->output_section->owner;
+ }
+
+ ret = score_elf_final_gp (output_bfd, symbol, relocateable, error_message, &gp);
+ if (ret != bfd_reloc_ok)
+ return ret;
+
+ return score_elf_gprel15_with_gp (abfd, symbol, reloc_entry,
+ input_section, relocateable, data, gp);
+}
+
+/* Do a R_SCORE_GPREL32 relocation. This is a 32 bit value which must
+ become the offset from the gp register. */
+
+static bfd_reloc_status_type
+score_elf_gprel32_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
+ void *data, asection *input_section, bfd *output_bfd,
+ char **error_message)
+{
+ bfd_boolean relocatable;
+ bfd_reloc_status_type ret;
+ bfd_vma gp;
+
+ /* R_SCORE_GPREL32 relocations are defined for local symbols only. */
+ if (output_bfd != NULL
+ && (symbol->flags & BSF_SECTION_SYM) == 0
+ && (symbol->flags & BSF_LOCAL) != 0)
+ {
+ *error_message = (char *)
+ _("32bits gp relative relocation occurs for an external symbol");
+ return bfd_reloc_outofrange;
+ }
+
+ if (output_bfd != NULL)
+ relocatable = TRUE;
+ else
+ {
+ relocatable = FALSE;
+ output_bfd = symbol->section->output_section->owner;
+ }
+
+ ret = score_elf_final_gp (output_bfd, symbol, relocatable, error_message, &gp);
+ if (ret != bfd_reloc_ok)
+ return ret;
+
+ gp = 0; /* FIXME. */
+ return gprel32_with_gp (abfd, symbol, reloc_entry, input_section,
+ relocatable, data, gp);
+}
+
+/* A howto special_function for R_SCORE_GOT15 relocations. This is just
+ like any other 16-bit relocation when applied to global symbols, but is
+ treated in the same as R_SCORE_HI16 when applied to local symbols. */
+
+static bfd_reloc_status_type
+score_elf_got15_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
+ void *data, asection *input_section,
+ bfd *output_bfd, char **error_message)
+{
+ if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
+ || bfd_is_und_section (bfd_get_section (symbol))
+ || bfd_is_com_section (bfd_get_section (symbol)))
+ /* The relocation is against a global symbol. */
+ return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
+ input_section, output_bfd,
+ error_message);
+
+ return score_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
+ input_section, output_bfd, error_message);
+}
+
+static bfd_reloc_status_type
+score_elf_got_lo16_reloc (bfd *abfd,
+ arelent *reloc_entry,
+ asymbol *symbol ATTRIBUTE_UNUSED,
+ void * data,
+ asection *input_section,
+ bfd *output_bfd ATTRIBUTE_UNUSED,
+ char **error_message ATTRIBUTE_UNUSED)
+{
+ bfd_vma addend = 0, offset = 0;
+ signed long val;
+ signed long hi16_offset, hi16_value, uvalue;
+
+ hi16_value = bfd_get_32 (abfd, hi16_rel_addr);
+ hi16_offset = ((((hi16_value >> 16) & 0x3) << 15) | (hi16_value & 0x7fff)) >> 1;
+ addend = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
+ offset = ((((addend >> 16) & 0x3) << 15) | (addend & 0x7fff)) >> 1;
+ val = reloc_entry->addend;
+ if (reloc_entry->address > input_section->size)
+ return bfd_reloc_outofrange;
+ uvalue = ((hi16_offset << 16) | (offset & 0xffff)) + val;
+ if ((uvalue > -0x8000) && (uvalue < 0x7fff))
+ hi16_offset = 0;
+ else
+ hi16_offset = (uvalue >> 16) & 0x7fff;
+ hi16_value = (hi16_value & ~0x37fff) | (hi16_offset & 0x7fff) | ((hi16_offset << 1) & 0x30000);
+ bfd_put_32 (abfd, hi16_value, hi16_rel_addr);
+ offset = (uvalue & 0xffff) << 1;
+ addend = (addend & ~0x37fff) | (offset & 0x7fff) | ((offset << 1) & 0x30000);
+ bfd_put_32 (abfd, addend, (bfd_byte *) data + reloc_entry->address);
+ return bfd_reloc_ok;
+}
+
+static reloc_howto_type elf32_score_howto_table[] =
+{
+ /* No relocation. */
+ HOWTO (R_SCORE_NONE, /* type */
+ 0, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SCORE_NONE", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* R_SCORE_HI16 */
+ HOWTO (R_SCORE_HI16, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 1, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ score_elf_hi16_reloc, /* special_function */
+ "R_SCORE_HI16", /* name */
+ TRUE, /* partial_inplace */
+ 0x37fff, /* src_mask */
+ 0x37fff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* R_SCORE_LO16 */
+ HOWTO (R_SCORE_LO16, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 1, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ score_elf_lo16_reloc, /* special_function */
+ "R_SCORE_LO16", /* name */
+ TRUE, /* partial_inplace */
+ 0x37fff, /* src_mask */
+ 0x37fff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* R_SCORE_DUMMY1 */
+ HOWTO (R_SCORE_DUMMY1, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 1, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SCORE_DUMMY1", /* name */
+ TRUE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /*R_SCORE_24 */
+ HOWTO (R_SCORE_24, /* type */
+ 1, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 24, /* bitsize */
+ FALSE, /* pc_relative */
+ 1, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SCORE_24", /* name */
+ FALSE, /* partial_inplace */
+ 0x3ff7fff, /* src_mask */
+ 0x3ff7fff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /*R_SCORE_PC19 */
+ HOWTO (R_SCORE_PC19, /* type */
+ 1, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 19, /* bitsize */
+ TRUE, /* pc_relative */
+ 1, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SCORE_PC19", /* name */
+ FALSE, /* partial_inplace */
+ 0x3ff03fe, /* src_mask */
+ 0x3ff03fe, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /*R_SCORE16_11 */
+ HOWTO (R_SCORE16_11, /* type */
+ 1, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 11, /* bitsize */
+ FALSE, /* pc_relative */
+ 1, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SCORE16_11", /* name */
+ FALSE, /* partial_inplace */
+ 0x000000ffe, /* src_mask */
+ 0x000000ffe, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* R_SCORE16_PC8 */
+ HOWTO (R_SCORE16_PC8, /* type */
+ 1, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SCORE16_PC8", /* name */
+ FALSE, /* partial_inplace */
+ 0x000000ff, /* src_mask */
+ 0x000000ff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* 32 bit absolute */
+ HOWTO (R_SCORE_ABS32, /* type 8 */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SCORE_ABS32", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* 16 bit absolute */
+ HOWTO (R_SCORE_ABS16, /* type 11 */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SCORE_ABS16", /* name */
+ FALSE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* R_SCORE_DUMMY2 */
+ HOWTO (R_SCORE_DUMMY2, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SCORE_DUMMY2", /* name */
+ TRUE, /* partial_inplace */
+ 0x00007fff, /* src_mask */
+ 0x00007fff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* R_SCORE_GP15 */
+ HOWTO (R_SCORE_GP15, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ score_elf_gprel15_reloc,/* special_function */
+ "R_SCORE_GP15", /* name */
+ TRUE, /* partial_inplace */
+ 0x00007fff, /* src_mask */
+ 0x00007fff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* GNU extension to record C++ vtable hierarchy. */
+ HOWTO (R_SCORE_GNU_VTINHERIT, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ NULL, /* special_function */
+ "R_SCORE_GNU_VTINHERIT", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* GNU extension to record C++ vtable member usage */
+ HOWTO (R_SCORE_GNU_VTENTRY, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ _bfd_elf_rel_vtable_reloc_fn, /* special_function */
+ "R_SCORE_GNU_VTENTRY", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Reference to global offset table. */
+ HOWTO (R_SCORE_GOT15, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ score_elf_got15_reloc, /* special_function */
+ "R_SCORE_GOT15", /* name */
+ TRUE, /* partial_inplace */
+ 0x00007fff, /* src_mask */
+ 0x00007fff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Low 16 bits of displacement in global offset table. */
+ HOWTO (R_SCORE_GOT_LO16, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 1, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ score_elf_got_lo16_reloc, /* special_function */
+ "R_SCORE_GOT_LO16", /* name */
+ TRUE, /* partial_inplace */
+ 0x37ffe, /* src_mask */
+ 0x37ffe, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* 15 bit call through global offset table. */
+ HOWTO (R_SCORE_CALL15, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SCORE_CALL15", /* name */
+ TRUE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* 32 bit GP relative reference. */
+ HOWTO (R_SCORE_GPREL32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ score_elf_gprel32_reloc, /* special_function */
+ "R_SCORE_GPREL32", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* 32 bit symbol relative relocation. */
+ HOWTO (R_SCORE_REL32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SCORE_REL32", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* R_SCORE_DUMMY_HI16 */
+ HOWTO (R_SCORE_DUMMY_HI16, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 1, /* bitpos */
+ complain_overflow_dont,/* complain_on_overflow */
+ score_elf_hi16_reloc, /* special_function */
+ "R_SCORE_DUMMY_HI16", /* name */
+ TRUE, /* partial_inplace */
+ 0x37fff, /* src_mask */
+ 0x37fff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+};
+
+struct score_reloc_map
+{
+ bfd_reloc_code_real_type bfd_reloc_val;
+ unsigned char elf_reloc_val;
+};
+
+static const struct score_reloc_map elf32_score_reloc_map[] =
+{
+ {BFD_RELOC_NONE, R_SCORE_NONE},
+ {BFD_RELOC_HI16_S, R_SCORE_HI16},
+ {BFD_RELOC_LO16, R_SCORE_LO16},
+ {BFD_RELOC_SCORE_DUMMY1, R_SCORE_DUMMY1},
+ {BFD_RELOC_SCORE_JMP, R_SCORE_24},
+ {BFD_RELOC_SCORE_BRANCH, R_SCORE_PC19},
+ {BFD_RELOC_SCORE16_JMP, R_SCORE16_11},
+ {BFD_RELOC_SCORE16_BRANCH, R_SCORE16_PC8},
+ {BFD_RELOC_32, R_SCORE_ABS32},
+ {BFD_RELOC_16, R_SCORE_ABS16},
+ {BFD_RELOC_SCORE_DUMMY2, R_SCORE_DUMMY2},
+ {BFD_RELOC_SCORE_GPREL15, R_SCORE_GP15},
+ {BFD_RELOC_VTABLE_INHERIT, R_SCORE_GNU_VTINHERIT},
+ {BFD_RELOC_VTABLE_ENTRY, R_SCORE_GNU_VTENTRY},
+ {BFD_RELOC_SCORE_GOT15, R_SCORE_GOT15},
+ {BFD_RELOC_SCORE_GOT_LO16, R_SCORE_GOT_LO16},
+ {BFD_RELOC_SCORE_CALL15, R_SCORE_CALL15},
+ {BFD_RELOC_GPREL32, R_SCORE_GPREL32},
+ {BFD_RELOC_32_PCREL, R_SCORE_REL32},
+ {BFD_RELOC_SCORE_DUMMY_HI16, R_SCORE_DUMMY_HI16},
+};
+
+/* got_entries only match if they're identical, except for gotidx, so
+ use all fields to compute the hash, and compare the appropriate
+ union members. */
+
+static hashval_t
+score_elf_got_entry_hash (const void *entry_)
+{
+ const struct score_got_entry *entry = (struct score_got_entry *)entry_;
+
+ return entry->symndx
+ + (!entry->abfd ? entry->d.address : entry->abfd->id);
+}
+
+static int
+score_elf_got_entry_eq (const void *entry1, const void *entry2)
+{
+ const struct score_got_entry *e1 = (struct score_got_entry *)entry1;
+ const struct score_got_entry *e2 = (struct score_got_entry *)entry2;
+
+ return e1->abfd == e2->abfd && e1->symndx == e2->symndx
+ && (! e1->abfd ? e1->d.address == e2->d.address
+ : e1->symndx >= 0 ? e1->d.addend == e2->d.addend
+ : e1->d.h == e2->d.h);
+}
+
+/* If H needs a GOT entry, assign it the highest available dynamic
+ index. Otherwise, assign it the lowest available dynamic
+ index. */
+
+static bfd_boolean
+score_elf_sort_hash_table_f (struct score_elf_link_hash_entry *h, void *data)
+{
+ struct score_elf_hash_sort_data *hsd = data;
+
+ if (h->root.root.type == bfd_link_hash_warning)
+ h = (struct score_elf_link_hash_entry *) h->root.root.u.i.link;
+
+ /* Symbols without dynamic symbol table entries aren't interesting at all. */
+ if (h->root.dynindx == -1)
+ return TRUE;
+
+ /* Global symbols that need GOT entries that are not explicitly
+ referenced are marked with got offset 2. Those that are
+ referenced get a 1, and those that don't need GOT entries get
+ -1. */
+ if (h->root.got.offset == 2)
+ {
+ if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
+ hsd->low = (struct elf_link_hash_entry *) h;
+ h->root.dynindx = hsd->max_unref_got_dynindx++;
+ }
+ else if (h->root.got.offset != 1)
+ h->root.dynindx = hsd->max_non_got_dynindx++;
+ else
+ {
+ h->root.dynindx = --hsd->min_got_dynindx;
+ hsd->low = (struct elf_link_hash_entry *) h;
+ }
+
+ return TRUE;
+}
+
+static asection *
+score_elf_got_section (bfd *abfd, bfd_boolean maybe_excluded)
+{
+ asection *sgot = bfd_get_section_by_name (abfd, ".got");
+
+ if (sgot == NULL || (! maybe_excluded && (sgot->flags & SEC_EXCLUDE) != 0))
+ return NULL;
+ return sgot;
+}
+
+/* Returns the GOT information associated with the link indicated by
+ INFO. If SGOTP is non-NULL, it is filled in with the GOT section. */
+
+static struct score_got_info *
+score_elf_got_info (bfd *abfd, asection **sgotp)
+{
+ asection *sgot;
+ struct score_got_info *g;
+
+ sgot = score_elf_got_section (abfd, TRUE);
+ BFD_ASSERT (sgot != NULL);
+ BFD_ASSERT (elf_section_data (sgot) != NULL);
+ g = score_elf_section_data (sgot)->u.got_info;
+ BFD_ASSERT (g != NULL);
+
+ if (sgotp)
+ *sgotp = sgot;
+ return g;
+}
+
+/* Sort the dynamic symbol table so that symbols that need GOT entries
+ appear towards the end. This reduces the amount of GOT space
+ required. MAX_LOCAL is used to set the number of local symbols
+ known to be in the dynamic symbol table. During
+ _bfd_score_elf_size_dynamic_sections, this value is 1. Afterward, the
+ section symbols are added and the count is higher. */
+
+static bfd_boolean
+score_elf_sort_hash_table (struct bfd_link_info *info,
+ unsigned long max_local)
+{
+ struct score_elf_hash_sort_data hsd;
+ struct score_got_info *g;
+ bfd *dynobj;
+
+ dynobj = elf_hash_table (info)->dynobj;
+
+ g = score_elf_got_info (dynobj, NULL);
+
+ hsd.low = NULL;
+ hsd.max_unref_got_dynindx =
+ hsd.min_got_dynindx = elf_hash_table (info)->dynsymcount
+ /* In the multi-got case, assigned_gotno of the master got_info
+ indicate the number of entries that aren't referenced in the
+ primary GOT, but that must have entries because there are
+ dynamic relocations that reference it. Since they aren't
+ referenced, we move them to the end of the GOT, so that they
+ don't prevent other entries that are referenced from getting
+ too large offsets. */
+ - (g->next ? g->assigned_gotno : 0);
+ hsd.max_non_got_dynindx = max_local;
+ score_elf_link_hash_traverse (((struct score_elf_link_hash_table *)
+ elf_hash_table (info)),
+ score_elf_sort_hash_table_f,
+ &hsd);
+
+ /* There should have been enough room in the symbol table to
+ accommodate both the GOT and non-GOT symbols. */
+ BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
+ BFD_ASSERT ((unsigned long)hsd.max_unref_got_dynindx
+ <= elf_hash_table (info)->dynsymcount);
+
+ /* Now we know which dynamic symbol has the lowest dynamic symbol
+ table index in the GOT. */
+ g->global_gotsym = hsd.low;
+
+ return TRUE;
+}
+
+/* Create an entry in an score ELF linker hash table. */
+
+static struct bfd_hash_entry *
+score_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
+ struct bfd_hash_table *table,
+ const char *string)
+{
+ struct score_elf_link_hash_entry *ret = (struct score_elf_link_hash_entry *)entry;
+
+ /* Allocate the structure if it has not already been allocated by a subclass. */
+ if (ret == NULL)
+ ret = bfd_hash_allocate (table, sizeof (struct score_elf_link_hash_entry));
+ if (ret == NULL)
+ return (struct bfd_hash_entry *)ret;
+
+ /* Call the allocation method of the superclass. */
+ ret = ((struct score_elf_link_hash_entry *)
+ _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *)ret, table, string));
+
+ if (ret != NULL)
+ {
+ ret->possibly_dynamic_relocs = 0;
+ ret->readonly_reloc = FALSE;
+ ret->no_fn_stub = FALSE;
+ ret->forced_local = FALSE;
+ }
+
+ return (struct bfd_hash_entry *)ret;
+}
+
+/* Returns the first relocation of type r_type found, beginning with
+ RELOCATION. RELEND is one-past-the-end of the relocation table. */
+
+static const Elf_Internal_Rela *
+score_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
+ const Elf_Internal_Rela *relocation,
+ const Elf_Internal_Rela *relend)
+{
+ while (relocation < relend)
+ {
+ if (ELF32_R_TYPE (relocation->r_info) == r_type)
+ return relocation;
+
+ ++relocation;
+ }
+
+ /* We didn't find it. */
+ bfd_set_error (bfd_error_bad_value);
+ return NULL;
+}
+
+/* This function is called via qsort() to sort the dynamic relocation
+ entries by increasing r_symndx value. */
+
+static int
+score_elf_sort_dynamic_relocs (const void *arg1, const void *arg2)
+{
+ Elf_Internal_Rela int_reloc1;
+ Elf_Internal_Rela int_reloc2;
+
+ bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
+ bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
+
+ return (ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info));
+}
+
+/* Return whether a relocation is against a local symbol. */
+
+static bfd_boolean
+score_elf_local_relocation_p (bfd *input_bfd,
+ const Elf_Internal_Rela *relocation,
+ asection **local_sections,
+ bfd_boolean check_forced)
+{
+ unsigned long r_symndx;
+ Elf_Internal_Shdr *symtab_hdr;
+ struct score_elf_link_hash_entry *h;
+ size_t extsymoff;
+
+ r_symndx = ELF32_R_SYM (relocation->r_info);
+ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+ extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
+
+ if (r_symndx < extsymoff)
+ return TRUE;
+ if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
+ return TRUE;
+
+ if (check_forced)
+ {
+ /* Look up the hash table to check whether the symbol was forced local. */
+ h = (struct score_elf_link_hash_entry *)
+ elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
+ /* Find the real hash-table entry for this symbol. */
+ while (h->root.root.type == bfd_link_hash_indirect
+ || h->root.root.type == bfd_link_hash_warning)
+ h = (struct score_elf_link_hash_entry *) h->root.root.u.i.link;
+ if (h->root.forced_local)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/* Returns the dynamic relocation section for DYNOBJ. */
+
+static asection *
+score_elf_rel_dyn_section (bfd *dynobj, bfd_boolean create_p)
+{
+ static const char dname[] = ".rel.dyn";
+ asection *sreloc;
+
+ sreloc = bfd_get_section_by_name (dynobj, dname);
+ if (sreloc == NULL && create_p)
+ {
+ sreloc = bfd_make_section_with_flags (dynobj, dname,
+ (SEC_ALLOC
+ | SEC_LOAD
+ | SEC_HAS_CONTENTS
+ | SEC_IN_MEMORY
+ | SEC_LINKER_CREATED
+ | SEC_READONLY));
+ if (sreloc == NULL
+ || ! bfd_set_section_alignment (dynobj, sreloc,
+ SCORE_ELF_LOG_FILE_ALIGN (dynobj)))
+ return NULL;
+ }
+ return sreloc;
+}
+
+static void
+score_elf_allocate_dynamic_relocations (bfd *abfd, unsigned int n)
+{
+ asection *s;
+
+ s = score_elf_rel_dyn_section (abfd, FALSE);
+ BFD_ASSERT (s != NULL);
+
+ if (s->size == 0)
+ {
+ /* Make room for a null element. */
+ s->size += SCORE_ELF_REL_SIZE (abfd);
+ ++s->reloc_count;
+ }
+ s->size += n * SCORE_ELF_REL_SIZE (abfd);
+}
+
+/* Create a rel.dyn relocation for the dynamic linker to resolve. REL
+ is the original relocation, which is now being transformed into a
+ dynamic relocation. The ADDENDP is adjusted if necessary; the
+ caller should store the result in place of the original addend. */
+
+static bfd_boolean
+score_elf_create_dynamic_relocation (bfd *output_bfd,
+ struct bfd_link_info *info,
+ const Elf_Internal_Rela *rel,
+ struct score_elf_link_hash_entry *h,
+ bfd_vma symbol,
+ bfd_vma *addendp, asection *input_section)
+{
+ Elf_Internal_Rela outrel[3];
+ asection *sreloc;
+ bfd *dynobj;
+ int r_type;
+ long indx;
+ bfd_boolean defined_p;
+
+ r_type = ELF32_R_TYPE (rel->r_info);
+ dynobj = elf_hash_table (info)->dynobj;
+ sreloc = score_elf_rel_dyn_section (dynobj, FALSE);
+ BFD_ASSERT (sreloc != NULL);
+ BFD_ASSERT (sreloc->contents != NULL);
+ BFD_ASSERT (sreloc->reloc_count * SCORE_ELF_REL_SIZE (output_bfd) < sreloc->size);
+
+ outrel[0].r_offset =
+ _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
+ outrel[1].r_offset =
+ _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
+ outrel[2].r_offset =
+ _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
+
+ if (outrel[0].r_offset == MINUS_ONE)
+ /* The relocation field has been deleted. */
+ return TRUE;
+
+ if (outrel[0].r_offset == MINUS_TWO)
+ {
+ /* The relocation field has been converted into a relative value of
+ some sort. Functions like _bfd_elf_write_section_eh_frame expect
+ the field to be fully relocated, so add in the symbol's value. */
+ *addendp += symbol;
+ return TRUE;
+ }
+
+ /* We must now calculate the dynamic symbol table index to use
+ in the relocation. */
+ if (h != NULL
+ && (! info->symbolic || !h->root.def_regular)
+ /* h->root.dynindx may be -1 if this symbol was marked to
+ become local. */
+ && h->root.dynindx != -1)
+ {
+ indx = h->root.dynindx;
+ /* ??? glibc's ld.so just adds the final GOT entry to the
+ relocation field. It therefore treats relocs against
+ defined symbols in the same way as relocs against
+ undefined symbols. */
+ defined_p = FALSE;
+ }
+ else
+ {
+ indx = 0;
+ defined_p = TRUE;
+ }
+
+ /* If the relocation was previously an absolute relocation and
+ this symbol will not be referred to by the relocation, we must
+ adjust it by the value we give it in the dynamic symbol table.
+ Otherwise leave the job up to the dynamic linker. */
+ if (defined_p && r_type != R_SCORE_REL32)
+ *addendp += symbol;
+
+ /* The relocation is always an REL32 relocation because we don't
+ know where the shared library will wind up at load-time. */
+ outrel[0].r_info = ELF32_R_INFO ((unsigned long) indx, R_SCORE_REL32);
+
+ /* For strict adherence to the ABI specification, we should
+ generate a R_SCORE_64 relocation record by itself before the
+ _REL32/_64 record as well, such that the addend is read in as
+ a 64-bit value (REL32 is a 32-bit relocation, after all).
+ However, since none of the existing ELF64 SCORE dynamic
+ loaders seems to care, we don't waste space with these
+ artificial relocations. If this turns out to not be true,
+ score_elf_allocate_dynamic_relocations() should be tweaked so
+ as to make room for a pair of dynamic relocations per
+ invocation if ABI_64_P, and here we should generate an
+ additional relocation record with R_SCORE_64 by itself for a
+ NULL symbol before this relocation record. */
+ outrel[1].r_info = ELF32_R_INFO (0, R_SCORE_NONE);
+ outrel[2].r_info = ELF32_R_INFO (0, R_SCORE_NONE);
+
+ /* Adjust the output offset of the relocation to reference the
+ correct location in the output file. */
+ outrel[0].r_offset += (input_section->output_section->vma
+ + input_section->output_offset);
+ outrel[1].r_offset += (input_section->output_section->vma
+ + input_section->output_offset);
+ outrel[2].r_offset += (input_section->output_section->vma
+ + input_section->output_offset);
+
+ /* Put the relocation back out. We have to use the special
+ relocation outputter in the 64-bit case since the 64-bit
+ relocation format is non-standard. */
+ bfd_elf32_swap_reloc_out
+ (output_bfd, &outrel[0],
+ (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
+
+ /* We've now added another relocation. */
+ ++sreloc->reloc_count;
+
+ /* Make sure the output section is writable. The dynamic linker
+ will be writing to it. */
+ elf_section_data (input_section->output_section)->this_hdr.sh_flags |= SHF_WRITE;
+
+ return TRUE;
+}
+
+static bfd_boolean
+score_elf_create_got_section (bfd *abfd,
+ struct bfd_link_info *info,
+ bfd_boolean maybe_exclude)
+{
+ flagword flags;
+ asection *s;
+ struct elf_link_hash_entry *h;
+ struct bfd_link_hash_entry *bh;
+ struct score_got_info *g;
+ bfd_size_type amt;
+
+ /* This function may be called more than once. */
+ s = score_elf_got_section (abfd, TRUE);
+ if (s)
+ {
+ if (! maybe_exclude)
+ s->flags &= ~SEC_EXCLUDE;
+ return TRUE;
+ }
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
+
+ if (maybe_exclude)
+ flags |= SEC_EXCLUDE;
+
+ /* We have to use an alignment of 2**4 here because this is hardcoded
+ in the function stub generation and in the linker script. */
+ s = bfd_make_section_with_flags (abfd, ".got", flags);
+ if (s == NULL
+ || ! bfd_set_section_alignment (abfd, s, 4))
+ return FALSE;
+
+ /* Define the symbol _GLOBAL_OFFSET_TABLE_. We don't do this in the
+ linker script because we don't want to define the symbol if we
+ are not creating a global offset table. */
+ bh = NULL;
+ if (! (_bfd_generic_link_add_one_symbol
+ (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
+ 0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
+ return FALSE;
+
+ h = (struct elf_link_hash_entry *) bh;
+ h->non_elf = 0;
+ h->def_regular = 1;
+ h->type = STT_OBJECT;
+
+ if (info->shared && ! bfd_elf_link_record_dynamic_symbol (info, h))
+ return FALSE;
+
+ amt = sizeof (struct score_got_info);
+ g = bfd_alloc (abfd, amt);
+ if (g == NULL)
+ return FALSE;
+
+ g->global_gotsym = NULL;
+ g->global_gotno = 0;
+
+ g->local_gotno = SCORE_RESERVED_GOTNO;
+ g->assigned_gotno = SCORE_RESERVED_GOTNO;
+ g->next = NULL;
+
+ g->got_entries = htab_try_create (1, score_elf_got_entry_hash,
+ score_elf_got_entry_eq, NULL);
+ if (g->got_entries == NULL)
+ return FALSE;
+ score_elf_section_data (s)->u.got_info = g;
+ score_elf_section_data (s)->elf.this_hdr.sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_SCORE_GPREL;
+
+ return TRUE;
+}
+
+/* Calculate the %high function. */
+
+static bfd_vma
+score_elf_high (bfd_vma value)
+{
+ return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
+}
+
+/* Create a local GOT entry for VALUE. Return the index of the entry,
+ or -1 if it could not be created. */
+
+static struct score_got_entry *
+score_elf_create_local_got_entry (bfd *abfd,
+ bfd *ibfd ATTRIBUTE_UNUSED,
+ struct score_got_info *gg,
+ asection *sgot, bfd_vma value,
+ unsigned long r_symndx ATTRIBUTE_UNUSED,
+ struct score_elf_link_hash_entry *h ATTRIBUTE_UNUSED,
+ int r_type ATTRIBUTE_UNUSED)
+{
+ struct score_got_entry entry, **loc;
+ struct score_got_info *g;
+
+ entry.abfd = NULL;
+ entry.symndx = -1;
+ entry.d.address = value;
+
+ g = gg;
+ loc = (struct score_got_entry **) htab_find_slot (g->got_entries, &entry, INSERT);
+ if (*loc)
+ return *loc;
+
+ entry.gotidx = SCORE_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
+
+ *loc = bfd_alloc (abfd, sizeof entry);
+
+ if (! *loc)
+ return NULL;
+
+ memcpy (*loc, &entry, sizeof entry);
+
+ if (g->assigned_gotno >= g->local_gotno)
+ {
+ (*loc)->gotidx = -1;
+ /* We didn't allocate enough space in the GOT. */
+ (*_bfd_error_handler)
+ (_("not enough GOT space for local GOT entries"));
+ bfd_set_error (bfd_error_bad_value);
+ return NULL;
+ }
+
+ bfd_put_32 (abfd, value, (sgot->contents + entry.gotidx));
+
+ return *loc;
+}
+
+/* Find a GOT entry whose higher-order 16 bits are the same as those
+ for value. Return the index into the GOT for this entry. */
+
+static bfd_vma
+score_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
+ bfd_vma value, bfd_boolean external)
+{
+ asection *sgot;
+ struct score_got_info *g;
+ struct score_got_entry *entry;
+
+ if (!external)
+ {
+ /* Although the ABI says that it is "the high-order 16 bits" that we
+ want, it is really the %high value. The complete value is
+ calculated with a `addiu' of a LO16 relocation, just as with a
+ HI16/LO16 pair. */
+ value = score_elf_high (value) << 16;
+ }
+
+ g = score_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
+
+ entry = score_elf_create_local_got_entry (abfd, ibfd, g, sgot, value, 0, NULL,
+ R_SCORE_GOT15);
+ if (entry)
+ return entry->gotidx;
+ else
+ return MINUS_ONE;
+}
+
+static void
+_bfd_score_elf_hide_symbol (struct bfd_link_info *info,
+ struct elf_link_hash_entry *entry,
+ bfd_boolean force_local)
+{
+ bfd *dynobj;
+ asection *got;
+ struct score_got_info *g;
+ struct score_elf_link_hash_entry *h;
+
+ h = (struct score_elf_link_hash_entry *) entry;
+ if (h->forced_local)
+ return;
+ h->forced_local = TRUE;
+
+ dynobj = elf_hash_table (info)->dynobj;
+ if (dynobj != NULL && force_local)
+ {
+ got = score_elf_got_section (dynobj, FALSE);
+ if (got == NULL)
+ return;
+ g = score_elf_section_data (got)->u.got_info;
+
+ if (g->next)
+ {
+ struct score_got_entry e;
+ struct score_got_info *gg = g;
+
+ /* Since we're turning what used to be a global symbol into a
+ local one, bump up the number of local entries of each GOT
+ that had an entry for it. This will automatically decrease
+ the number of global entries, since global_gotno is actually
+ the upper limit of global entries. */
+ e.abfd = dynobj;
+ e.symndx = -1;
+ e.d.h = h;
+
+ for (g = g->next; g != gg; g = g->next)
+ if (htab_find (g->got_entries, &e))
+ {
+ BFD_ASSERT (g->global_gotno > 0);
+ g->local_gotno++;
+ g->global_gotno--;
+ }
+
+ /* If this was a global symbol forced into the primary GOT, we
+ no longer need an entry for it. We can't release the entry
+ at this point, but we must at least stop counting it as one
+ of the symbols that required a forced got entry. */
+ if (h->root.got.offset == 2)
+ {
+ BFD_ASSERT (gg->assigned_gotno > 0);
+ gg->assigned_gotno--;
+ }
+ }
+ else if (g->global_gotno == 0 && g->global_gotsym == NULL)
+ /* If we haven't got through GOT allocation yet, just bump up the
+ number of local entries, as this symbol won't be counted as
+ global. */
+ g->local_gotno++;
+ else if (h->root.got.offset == 1)
+ {
+ /* If we're past non-multi-GOT allocation and this symbol had
+ been marked for a global got entry, give it a local entry
+ instead. */
+ BFD_ASSERT (g->global_gotno > 0);
+ g->local_gotno++;
+ g->global_gotno--;
+ }
+ }
+
+ _bfd_elf_link_hash_hide_symbol (info, &h->root, force_local);
+}
+
+/* If H is a symbol that needs a global GOT entry, but has a dynamic
+ symbol table index lower than any we've seen to date, record it for
+ posterity. */
+
+static bfd_boolean
+score_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
+ bfd *abfd,
+ struct bfd_link_info *info,
+ struct score_got_info *g)
+{
+ struct score_got_entry entry, **loc;
+
+ /* A global symbol in the GOT must also be in the dynamic symbol table. */
+ if (h->dynindx == -1)
+ {
+ switch (ELF_ST_VISIBILITY (h->other))
+ {
+ case STV_INTERNAL:
+ case STV_HIDDEN:
+ _bfd_score_elf_hide_symbol (info, h, TRUE);
+ break;
+ }
+ if (!bfd_elf_link_record_dynamic_symbol (info, h))
+ return FALSE;
+ }
+
+ entry.abfd = abfd;
+ entry.symndx = -1;
+ entry.d.h = (struct score_elf_link_hash_entry *)h;
+
+ loc = (struct score_got_entry **)htab_find_slot (g->got_entries, &entry, INSERT);
+
+ /* If we've already marked this entry as needing GOT space, we don't
+ need to do it again. */
+ if (*loc)
+ return TRUE;
+
+ *loc = bfd_alloc (abfd, sizeof entry);
+ if (! *loc)
+ return FALSE;
+
+ entry.gotidx = -1;
+
+ memcpy (*loc, &entry, sizeof (entry));
+
+ if (h->got.offset != MINUS_ONE)
+ return TRUE;
+
+ /* By setting this to a value other than -1, we are indicating that
+ there needs to be a GOT entry for H. Avoid using zero, as the
+ generic ELF copy_indirect_symbol tests for <= 0. */
+ h->got.offset = 1;
+
+ return TRUE;
+}
+
+/* Reserve space in G for a GOT entry containing the value of symbol
+ SYMNDX in input bfd ABDF, plus ADDEND. */
+
+static bfd_boolean
+score_elf_record_local_got_symbol (bfd *abfd,
+ long symndx,
+ bfd_vma addend,
+ struct score_got_info *g)
+{
+ struct score_got_entry entry, **loc;
+
+ entry.abfd = abfd;
+ entry.symndx = symndx;
+ entry.d.addend = addend;
+ loc = (struct score_got_entry **)htab_find_slot (g->got_entries, &entry, INSERT);
+
+ if (*loc)
+ return TRUE;
+
+ entry.gotidx = g->local_gotno++;
+
+ *loc = bfd_alloc (abfd, sizeof(entry));
+ if (! *loc)
+ return FALSE;
+
+ memcpy (*loc, &entry, sizeof (entry));
+
+ return TRUE;
+}
+
+/* Returns the GOT offset at which the indicated address can be found.
+ If there is not yet a GOT entry for this value, create one.
+ Returns -1 if no satisfactory GOT offset can be found. */
+
+static bfd_vma
+score_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
+ bfd_vma value, unsigned long r_symndx,
+ struct score_elf_link_hash_entry *h, int r_type)
+{
+ asection *sgot;
+ struct score_got_info *g;
+ struct score_got_entry *entry;
+
+ g = score_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
+
+ entry = score_elf_create_local_got_entry (abfd, ibfd, g, sgot, value,
+ r_symndx, h, r_type);
+ if (!entry)
+ return MINUS_ONE;
+
+ else
+ return entry->gotidx;
+}
+
+/* Returns the GOT index for the global symbol indicated by H. */
+
+static bfd_vma
+score_elf_global_got_index (bfd *abfd, struct elf_link_hash_entry *h)
+{
+ bfd_vma index;
+ asection *sgot;
+ struct score_got_info *g;
+ long global_got_dynindx = 0;
+
+ g = score_elf_got_info (abfd, &sgot);
+ if (g->global_gotsym != NULL)
+ global_got_dynindx = g->global_gotsym->dynindx;
+
+ /* Once we determine the global GOT entry with the lowest dynamic
+ symbol table index, we must put all dynamic symbols with greater
+ indices into the GOT. That makes it easy to calculate the GOT
+ offset. */
+ BFD_ASSERT (h->dynindx >= global_got_dynindx);
+ index = ((h->dynindx - global_got_dynindx + g->local_gotno) * SCORE_ELF_GOT_SIZE (abfd));
+ BFD_ASSERT (index < sgot->size);
+
+ return index;
+}
+
+/* Returns the offset for the entry at the INDEXth position in the GOT. */
+
+static bfd_vma
+score_elf_got_offset_from_index (bfd *dynobj, bfd *output_bfd,
+ bfd *input_bfd ATTRIBUTE_UNUSED, bfd_vma index)
+{
+ asection *sgot;
+ bfd_vma gp;
+ struct score_got_info *g;
+
+ g = score_elf_got_info (dynobj, &sgot);
+ gp = _bfd_get_gp_value (output_bfd);
+
+ return sgot->output_section->vma + sgot->output_offset + index - gp;
+}
+
+/* Follow indirect and warning hash entries so that each got entry
+ points to the final symbol definition. P must point to a pointer
+ to the hash table we're traversing. Since this traversal may
+ modify the hash table, we set this pointer to NULL to indicate
+ we've made a potentially-destructive change to the hash table, so
+ the traversal must be restarted. */
+static int
+score_elf_resolve_final_got_entry (void **entryp, void *p)
+{
+ struct score_got_entry *entry = (struct score_got_entry *)*entryp;
+ htab_t got_entries = *(htab_t *)p;
+
+ if (entry->abfd != NULL && entry->symndx == -1)
+ {
+ struct score_elf_link_hash_entry *h = entry->d.h;
+
+ while (h->root.root.type == bfd_link_hash_indirect
+ || h->root.root.type == bfd_link_hash_warning)
+ h = (struct score_elf_link_hash_entry *) h->root.root.u.i.link;
+
+ if (entry->d.h == h)
+ return 1;
+
+ entry->d.h = h;
+
+ /* If we can't find this entry with the new bfd hash, re-insert
+ it, and get the traversal restarted. */
+ if (! htab_find (got_entries, entry))
+ {
+ htab_clear_slot (got_entries, entryp);
+ entryp = htab_find_slot (got_entries, entry, INSERT);
+ if (! *entryp)
+ *entryp = entry;
+ /* Abort the traversal, since the whole table may have
+ moved, and leave it up to the parent to restart the
+ process. */
+ *(htab_t *)p = NULL;
+ return 0;
+ }
+ /* We might want to decrement the global_gotno count, but it's
+ either too early or too late for that at this point. */
+ }
+
+ return 1;
+}
+
+/* Turn indirect got entries in a got_entries table into their final locations. */
+static void
+score_elf_resolve_final_got_entries (struct score_got_info *g)
+{
+ htab_t got_entries;
+
+ do
+ {
+ got_entries = g->got_entries;
+
+ htab_traverse (got_entries,
+ score_elf_resolve_final_got_entry,
+ &got_entries);
+ }
+ while (got_entries == NULL);
+}
+
+/* Add INCREMENT to the reloc (of type HOWTO) at ADDRESS. for -r */
+
+static void
+score_elf_add_to_rel (bfd *abfd,
+ bfd_byte *address,
+ reloc_howto_type *howto,
+ bfd_signed_vma increment)
+{
+ bfd_signed_vma addend;
+ bfd_vma contents;
+ unsigned long offset;
+ unsigned long r_type = howto->type;
+ unsigned long hi16_addend, hi16_offset, hi16_value, uvalue;
+
+ contents = bfd_get_32 (abfd, address);
+ /* Get the (signed) value from the instruction. */
+ addend = contents & howto->src_mask;
+ if (addend & ((howto->src_mask + 1) >> 1))
+ {
+ bfd_signed_vma mask;
+
+ mask = -1;
+ mask &= ~howto->src_mask;
+ addend |= mask;
+ }
+ /* Add in the increment, (which is a byte value). */
+ switch (r_type)
+ {
+ case R_SCORE_PC19:
+ offset =
+ (((contents & howto->src_mask) & 0x3ff0000) >> 6) | ((contents & howto->src_mask) & 0x3ff);
+ offset += increment;
+ contents =
+ (contents & ~howto->
+ src_mask) | (((offset << 6) & howto->src_mask) & 0x3ff0000) | (offset & 0x3ff);
+ bfd_put_32 (abfd, contents, address);
+ break;
+ case R_SCORE_HI16:
+ break;
+ case R_SCORE_LO16:
+ hi16_addend = bfd_get_32 (abfd, address - 4);
+ hi16_offset = ((((hi16_addend >> 16) & 0x3) << 15) | (hi16_addend & 0x7fff)) >> 1;
+ offset = ((((contents >> 16) & 0x3) << 15) | (contents & 0x7fff)) >> 1;
+ offset = (hi16_offset << 16) | (offset & 0xffff);
+ uvalue = increment + offset;
+ hi16_offset = (uvalue >> 16) << 1;
+ hi16_value = (hi16_addend & (~(howto->dst_mask)))
+ | (hi16_offset & 0x7fff) | ((hi16_offset << 1) & 0x30000);
+ bfd_put_32 (abfd, hi16_value, address - 4);
+ offset = (uvalue & 0xffff) << 1;
+ contents = (contents & (~(howto->dst_mask))) | (offset & 0x7fff) | ((offset << 1) & 0x30000);
+ bfd_put_32 (abfd, contents, address);
+ break;
+ case R_SCORE_24:
+ offset =
+ (((contents & howto->src_mask) >> 1) & 0x1ff8000) | ((contents & howto->src_mask) & 0x7fff);
+ offset += increment;
+ contents =
+ (contents & ~howto->
+ src_mask) | (((offset << 1) & howto->src_mask) & 0x3ff0000) | (offset & 0x7fff);
+ bfd_put_32 (abfd, contents, address);
+ break;
+ case R_SCORE16_11:
+
+ contents = bfd_get_16 (abfd, address);
+ offset = contents & howto->src_mask;
+ offset += increment;
+ contents = (contents & ~howto->src_mask) | (offset & howto->src_mask);
+ bfd_put_16 (abfd, contents, address);
+
+ break;
+ case R_SCORE16_PC8:
+
+ contents = bfd_get_16 (abfd, address);
+ offset = (contents & howto->src_mask) + ((increment >> 1) & 0xff);
+ contents = (contents & (~howto->src_mask)) | (offset & howto->src_mask);
+ bfd_put_16 (abfd, contents, address);
+
+ break;
+ default:
+ addend += increment;
+ contents = (contents & ~howto->dst_mask) | (addend & howto->dst_mask);
+ bfd_put_32 (abfd, contents, address);
+ break;
+ }
+}
+
+/* Perform a relocation as part of a final link. */
+
+static bfd_reloc_status_type
+score_elf_final_link_relocate (reloc_howto_type *howto,
+ bfd *input_bfd,
+ bfd *output_bfd,
+ asection *input_section,
+ bfd_byte *contents,
+ Elf_Internal_Rela *rel,
+ Elf_Internal_Rela *relocs,
+ bfd_vma symbol,
+ struct bfd_link_info *info,
+ const char *sym_name ATTRIBUTE_UNUSED,
+ int sym_flags ATTRIBUTE_UNUSED,
+ struct score_elf_link_hash_entry *h,
+ asection **local_sections,
+ bfd_boolean gp_disp_p)
+{
+ unsigned long r_type;
+ unsigned long r_symndx;
+ bfd_byte *hit_data = contents + rel->r_offset;
+ bfd_vma addend;
+ /* The final GP value to be used for the relocatable, executable, or
+ shared object file being produced. */
+ bfd_vma gp = MINUS_ONE;
+ /* The place (section offset or address) of the storage unit being relocated. */
+ bfd_vma rel_addr;
+ /* The value of GP used to create the relocatable object. */
+ bfd_vma gp0 = MINUS_ONE;
+ /* The offset into the global offset table at which the address of the relocation entry
+ symbol, adjusted by the addend, resides during execution. */
+ bfd_vma g = MINUS_ONE;
+ /* TRUE if the symbol referred to by this relocation is a local symbol. */
+ bfd_boolean local_p;
+ /* The eventual value we will relocate. */
+ bfd_vma value = symbol;
+ unsigned long hi16_addend, hi16_offset, hi16_value, uvalue, offset, abs_value = 0;
+
+ if (elf_gp (output_bfd) == 0)
+ {
+ struct bfd_link_hash_entry *bh;
+ asection *o;
+
+ bh = bfd_link_hash_lookup (info->hash, "_gp", 0, 0, 1);
+ if (bh != (struct bfd_link_hash_entry *)NULL && bh->type == bfd_link_hash_defined)
+ elf_gp (output_bfd) = (bh->u.def.value
+ + bh->u.def.section->output_section->vma
+ + bh->u.def.section->output_offset);
+ else if (info->relocatable)
+ {
+ bfd_vma lo = -1;
+
+ /* Find the GP-relative section with the lowest offset. */
+ for (o = output_bfd->sections; o != (asection *) NULL; o = o->next)
+ if (o->vma < lo)
+ lo = o->vma;
+ /* And calculate GP relative to that. */
+ elf_gp (output_bfd) = lo + ELF_SCORE_GP_OFFSET (input_bfd);
+ }
+ else
+ {
+ /* If the relocate_section function needs to do a reloc
+ involving the GP value, it should make a reloc_dangerous
+ callback to warn that GP is not defined. */
+ }
+ }
+
+ /* Parse the relocation. */
+ r_symndx = ELF32_R_SYM (rel->r_info);
+ r_type = ELF32_R_TYPE (rel->r_info);
+ rel_addr = (input_section->output_section->vma + input_section->output_offset + rel->r_offset);
+ local_p = score_elf_local_relocation_p (input_bfd, rel, local_sections, TRUE);
+
+ if (r_type == R_SCORE_GOT15)
+ {
+ const Elf_Internal_Rela *relend;
+ const Elf_Internal_Rela *lo16_rel;
+ const struct elf_backend_data *bed;
+ bfd_vma lo_value = 0;
+
+ bed = get_elf_backend_data (output_bfd);
+ relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
+ lo16_rel = score_elf_next_relocation (input_bfd, R_SCORE_GOT_LO16, rel, relend);
+ if ((local_p) && (lo16_rel != NULL))
+ {
+ bfd_vma tmp = 0;
+ tmp = bfd_get_32 (input_bfd, contents + lo16_rel->r_offset);
+ lo_value = (((tmp >> 16) & 0x3) << 14) | ((tmp & 0x7fff) >> 1);
+ }
+ addend = lo_value;
+ }
+ else
+ {
+ addend = (bfd_get_32 (input_bfd, hit_data) >> howto->bitpos) & howto->src_mask;
+ }
+
+ /* If we haven't already determined the GOT offset, or the GP value,
+ and we're going to need it, get it now. */
+ switch (r_type)
+ {
+ case R_SCORE_CALL15:
+ case R_SCORE_GOT15:
+ if (!local_p)
+ {
+ g = score_elf_global_got_index (elf_hash_table (info)->dynobj,
+ (struct elf_link_hash_entry *) h);
+ if ((! elf_hash_table(info)->dynamic_sections_created
+ || (info->shared
+ && (info->symbolic || h->root.dynindx == -1)
+ && h->root.def_regular)))
+ {
+ /* This is a static link or a -Bsymbolic link. The
+ symbol is defined locally, or was forced to be local.
+ We must initialize this entry in the GOT. */
+ bfd *tmpbfd = elf_hash_table (info)->dynobj;
+ asection *sgot = score_elf_got_section (tmpbfd, FALSE);
+ bfd_put_32 (tmpbfd, value, sgot->contents + g);
+ }
+ }
+ else if (r_type == R_SCORE_GOT15 || r_type == R_SCORE_CALL15)
+ {
+ /* There's no need to create a local GOT entry here; the
+ calculation for a local GOT15 entry does not involve G. */
+ ;
+ }
+ else
+ {
+ g = score_elf_local_got_index (output_bfd, input_bfd, info,
+ symbol + addend, r_symndx, h, r_type);
+ if (g == MINUS_ONE)
+ return bfd_reloc_outofrange;
+ }
+
+ /* Convert GOT indices to actual offsets. */
+ g = score_elf_got_offset_from_index (elf_hash_table (info)->dynobj,
+ output_bfd, input_bfd, g);
+ break;
+
+ case R_SCORE_HI16:
+ case R_SCORE_LO16:
+ case R_SCORE_GPREL32:
+ gp0 = _bfd_get_gp_value (input_bfd);
+ gp = _bfd_get_gp_value (output_bfd);
+ break;
+
+ case R_SCORE_GP15:
+ gp = _bfd_get_gp_value (output_bfd);
+
+ default:
+ break;
+ }
+
+ switch (r_type)
+ {
+ case R_SCORE_NONE:
+ return bfd_reloc_ok;
+
+ case R_SCORE_ABS32:
+ case R_SCORE_REL32:
+ if ((info->shared
+ || (elf_hash_table (info)->dynamic_sections_created
+ && h != NULL
+ && h->root.def_dynamic
+ && !h->root.def_regular))
+ && r_symndx != 0
+ && (input_section->flags & SEC_ALLOC) != 0)
+ {
+ /* If we're creating a shared library, or this relocation is against a symbol
+ in a shared library, then we can't know where the symbol will end up.
+ So, we create a relocation record in the output, and leave the job up
+ to the dynamic linker. */
+ value = addend;
+ if (!score_elf_create_dynamic_relocation (output_bfd, info, rel, h,
+ symbol, &value,
+ input_section))
+ return bfd_reloc_undefined;
+ }
+ else
+ {
+ if (r_type != R_SCORE_REL32)
+ value = symbol + addend;
+ else
+ value = addend;
+ }
+ value &= howto->dst_mask;
+ bfd_put_32 (input_bfd, value, hit_data);
+ return bfd_reloc_ok;
+
+ case R_SCORE_ABS16:
+ value += addend;
+ if ((long)value > 0x7fff || (long)value < -0x8000)
+ return bfd_reloc_overflow;
+ bfd_put_16 (input_bfd, value, hit_data);
+ return bfd_reloc_ok;
+
+ case R_SCORE_24:
+ addend = bfd_get_32 (input_bfd, hit_data);
+ offset = (((addend & howto->src_mask) >> 1) & 0x1ff8000) | ((addend & howto->src_mask) & 0x7fff);
+ if ((offset & 0x1000000) != 0)
+ offset |= 0xfe000000;
+ value += offset;
+ addend = (addend & ~howto->src_mask)
+ | (((value << 1) & howto->src_mask) & 0x3ff0000) | (value & 0x7fff);
+ bfd_put_32 (input_bfd, addend, hit_data);
+ return bfd_reloc_ok;
+
+ case R_SCORE_PC19:
+ addend = bfd_get_32 (input_bfd, hit_data);
+ offset = (((addend & howto->src_mask) & 0x3ff0000) >> 6) | ((addend & howto->src_mask) & 0x3ff);
+ if ((offset & 0x80000) != 0)
+ offset |= 0xfff00000;
+ abs_value = value = value - rel_addr + offset;
+ /* exceed 20 bit : overflow. */
+ if ((abs_value & 0x80000000) == 0x80000000)
+ abs_value = 0xffffffff - value + 1;
+ if ((abs_value & 0xfff80000) != 0)
+ return bfd_reloc_overflow;
+ addend = (addend & ~howto->src_mask)
+ | (((value << 6) & howto->src_mask) & 0x3ff0000) | (value & 0x3ff);
+ bfd_put_32 (input_bfd, addend, hit_data);
+ return bfd_reloc_ok;
+
+ case R_SCORE16_11:
+ addend = bfd_get_16 (input_bfd, hit_data);
+ offset = addend & howto->src_mask;
+ if ((offset & 0x800) != 0) /* Offset is negative. */
+ offset |= 0xfffff000;
+ value += offset;
+ addend = (addend & ~howto->src_mask) | (value & howto->src_mask);
+ bfd_put_16 (input_bfd, addend, hit_data);
+ return bfd_reloc_ok;
+
+ case R_SCORE16_PC8:
+ addend = bfd_get_16 (input_bfd, hit_data);
+ offset = (addend & howto->src_mask) << 1;
+ if ((offset & 0x100) != 0) /* Offset is negative. */
+ offset |= 0xfffffe00;
+ abs_value = value = value - rel_addr + offset;
+ /* Sign bit + exceed 9 bit. */
+ if (((value & 0xffffff00) != 0) && ((value & 0xffffff00) != 0xffffff00))
+ return bfd_reloc_overflow;
+ value >>= 1;
+ addend = (addend & ~howto->src_mask) | (value & howto->src_mask);
+ bfd_put_16 (input_bfd, addend, hit_data);
+ return bfd_reloc_ok;
+
+ case R_SCORE_HI16:
+ return bfd_reloc_ok;
+
+ case R_SCORE_LO16:
+ hi16_addend = bfd_get_32 (input_bfd, hit_data - 4);
+ hi16_offset = ((((hi16_addend >> 16) & 0x3) << 15) | (hi16_addend & 0x7fff)) >> 1;
+ addend = bfd_get_32 (input_bfd, hit_data);
+ offset = ((((addend >> 16) & 0x3) << 15) | (addend & 0x7fff)) >> 1;
+ offset = (hi16_offset << 16) | (offset & 0xffff);
+
+ if (!gp_disp_p)
+ uvalue = value + offset;
+ else
+ uvalue = offset + gp - rel_addr + 4;
+
+ hi16_offset = (uvalue >> 16) << 1;
+ hi16_value = (hi16_addend & (~(howto->dst_mask)))
+ | (hi16_offset & 0x7fff) | ((hi16_offset << 1) & 0x30000);
+ bfd_put_32 (input_bfd, hi16_value, hit_data - 4);
+ offset = (uvalue & 0xffff) << 1;
+ value = (addend & (~(howto->dst_mask))) | (offset & 0x7fff) | ((offset << 1) & 0x30000);
+ bfd_put_32 (input_bfd, value, hit_data);
+ return bfd_reloc_ok;
+
+ case R_SCORE_GP15:
+ addend = bfd_get_32 (input_bfd, hit_data);
+ offset = addend & 0x7fff;
+ if ((offset & 0x4000) == 0x4000)
+ offset |= 0xffffc000;
+ value = value + offset - gp;
+ if (((value & 0xffffc000) != 0) && ((value & 0xffffc000) != 0xffffc000))
+ return bfd_reloc_overflow;
+ value = (addend & ~howto->src_mask) | (value & howto->src_mask);
+ bfd_put_32 (input_bfd, value, hit_data);
+ return bfd_reloc_ok;
+
+ case R_SCORE_GOT15:
+ case R_SCORE_CALL15:
+ if (local_p)
+ {
+ bfd_boolean forced;
+
+ /* The special case is when the symbol is forced to be local. We need the
+ full address in the GOT since no R_SCORE_GOT_LO16 relocation follows. */
+ forced = ! score_elf_local_relocation_p (input_bfd, rel,
+ local_sections, FALSE);
+ value = score_elf_got16_entry (output_bfd, input_bfd, info,
+ symbol + addend, forced);
+ if (value == MINUS_ONE)
+ return bfd_reloc_outofrange;
+ value = score_elf_got_offset_from_index (elf_hash_table (info)->dynobj,
+ output_bfd, input_bfd, value);
+ }
+ else
+ {
+ value = g;
+ }
+
+ if ((long) value > 0x3fff || (long) value < -0x4000)
+ return bfd_reloc_overflow;
+
+ addend = bfd_get_32 (input_bfd, hit_data);
+ value = (addend & ~howto->dst_mask) | (value & howto->dst_mask);
+ bfd_put_32 (input_bfd, value, hit_data);
+ return bfd_reloc_ok;
+
+ case R_SCORE_GPREL32:
+ value = (addend + symbol - gp);
+ value &= howto->dst_mask;
+ bfd_put_32 (input_bfd, value, hit_data);
+ return bfd_reloc_ok;
+
+ case R_SCORE_GOT_LO16:
+ addend = bfd_get_32 (input_bfd, hit_data);
+ value = (((addend >> 16) & 0x3) << 14) | ((addend & 0x7fff) >> 1);
+ value += symbol;
+ value = (addend & (~(howto->dst_mask))) | ((value & 0x3fff) << 1)
+ | (((value >> 14) & 0x3) << 16);
+
+ bfd_put_32 (input_bfd, value, hit_data);
+ return bfd_reloc_ok;
+
+ case R_SCORE_DUMMY_HI16:
+ return bfd_reloc_ok;
+
+ case R_SCORE_GNU_VTINHERIT:
+ case R_SCORE_GNU_VTENTRY:
+ /* We don't do anything with these at present. */
+ return bfd_reloc_continue;
+
+ default:
+ return bfd_reloc_notsupported;
+ }
+}
+
+/* Score backend functions. */
+
+static void
+_bfd_score_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+ arelent *bfd_reloc,
+ Elf_Internal_Rela *elf_reloc)
+{
+ unsigned int r_type;
+
+ r_type = ELF32_R_TYPE (elf_reloc->r_info);
+ if (r_type >= NUM_ELEM (elf32_score_howto_table))
+ bfd_reloc->howto = NULL;
+ else
+ bfd_reloc->howto = &elf32_score_howto_table[r_type];
+}
+
+/* Relocate an score ELF section. */
+
+static bfd_boolean
+_bfd_score_elf_relocate_section (bfd *output_bfd,
+ struct bfd_link_info *info,
+ bfd *input_bfd,
+ asection *input_section,
+ bfd_byte *contents,
+ Elf_Internal_Rela *relocs,
+ Elf_Internal_Sym *local_syms,
+ asection **local_sections)
+{
+ Elf_Internal_Shdr *symtab_hdr;
+ struct elf_link_hash_entry **sym_hashes;
+ Elf_Internal_Rela *rel;
+ Elf_Internal_Rela *relend;
+ const char *name;
+ unsigned long offset;
+ unsigned long hi16_addend, hi16_offset, hi16_value, uvalue;
+ size_t extsymoff;
+ bfd_boolean gp_disp_p = FALSE;
+
+ /* Sort dynsym. */
+ if (elf_hash_table (info)->dynamic_sections_created)
+ {
+ bfd_size_type dynsecsymcount = 0;
+ if (info->shared)
+ {
+ asection * p;
+ const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
+
+ for (p = output_bfd->sections; p ; p = p->next)
+ if ((p->flags & SEC_EXCLUDE) == 0
+ && (p->flags & SEC_ALLOC) != 0
+ && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
+ ++ dynsecsymcount;
+ }
+
+ if (!score_elf_sort_hash_table (info, dynsecsymcount + 1))
+ return FALSE;
+ }
+
+ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+ extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
+ sym_hashes = elf_sym_hashes (input_bfd);
+ rel = relocs;
+ relend = relocs + input_section->reloc_count;
+ for (; rel < relend; rel++)
+ {
+ int r_type;
+ reloc_howto_type *howto;
+ unsigned long r_symndx;
+ Elf_Internal_Sym *sym;
+ asection *sec;
+ struct score_elf_link_hash_entry *h;
+ bfd_vma relocation = 0;
+ bfd_reloc_status_type r;
+ arelent bfd_reloc;
+
+ r_symndx = ELF32_R_SYM (rel->r_info);
+ r_type = ELF32_R_TYPE (rel->r_info);
+
+ _bfd_score_info_to_howto (input_bfd, &bfd_reloc, (Elf_Internal_Rela *) rel);
+ howto = bfd_reloc.howto;
+
+ h = NULL;
+ sym = NULL;
+ sec = NULL;
+
+ if (r_symndx < extsymoff)
+ {
+ sym = local_syms + r_symndx;
+ sec = local_sections[r_symndx];
+ relocation = (sec->output_section->vma
+ + sec->output_offset
+ + sym->st_value);
+ name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec);
+
+ if (!info->relocatable
+ && (sec->flags & SEC_MERGE) != 0
+ && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ {
+ asection *msec;
+ bfd_vma addend, value;
+
+ switch (r_type)
+ {
+ case R_SCORE_HI16:
+ break;
+ case R_SCORE_LO16:
+ hi16_addend = bfd_get_32 (input_bfd, contents + rel->r_offset - 4);
+ hi16_offset = ((((hi16_addend >> 16) & 0x3) << 15) | (hi16_addend & 0x7fff)) >> 1;
+ value = bfd_get_32 (input_bfd, contents + rel->r_offset);
+ offset = ((((value >> 16) & 0x3) << 15) | (value & 0x7fff)) >> 1;
+ addend = (hi16_offset << 16) | (offset & 0xffff);
+ msec = sec;
+ addend = _bfd_elf_rel_local_sym (output_bfd, sym, &msec, addend);
+ addend -= relocation;
+ addend += msec->output_section->vma + msec->output_offset;
+ uvalue = addend;
+ hi16_offset = (uvalue >> 16) << 1;
+ hi16_value = (hi16_addend & (~(howto->dst_mask)))
+ | (hi16_offset & 0x7fff) | ((hi16_offset << 1) & 0x30000);
+ bfd_put_32 (input_bfd, hi16_value, contents + rel->r_offset - 4);
+ offset = (uvalue & 0xffff) << 1;
+ value = (value & (~(howto->dst_mask)))
+ | (offset & 0x7fff) | ((offset << 1) & 0x30000);
+ bfd_put_32 (input_bfd, value, contents + rel->r_offset);
+ break;
+ case R_SCORE_GOT_LO16:
+ value = bfd_get_32 (input_bfd, contents + rel->r_offset);
+ addend = (((value >> 16) & 0x3) << 14) | ((value & 0x7fff) >> 1);
+ msec = sec;
+ addend = _bfd_elf_rel_local_sym (output_bfd, sym, &msec, addend) - relocation;
+ addend += msec->output_section->vma + msec->output_offset;
+ value = (value & (~(howto->dst_mask))) | ((addend & 0x3fff) << 1)
+ | (((addend >> 14) & 0x3) << 16);
+
+ bfd_put_32 (input_bfd, value, contents + rel->r_offset);
+ break;
+ default:
+ value = bfd_get_32 (input_bfd, contents + rel->r_offset);
+ /* Get the (signed) value from the instruction. */
+ addend = value & howto->src_mask;
+ if (addend & ((howto->src_mask + 1) >> 1))
+ {
+ bfd_signed_vma mask;
+
+ mask = -1;
+ mask &= ~howto->src_mask;
+ addend |= mask;
+ }
+ msec = sec;
+ addend = _bfd_elf_rel_local_sym (output_bfd, sym, &msec, addend) - relocation;
+ addend += msec->output_section->vma + msec->output_offset;
+ value = (value & ~howto->dst_mask) | (addend & howto->dst_mask);
+ bfd_put_32 (input_bfd, value, contents + rel->r_offset);
+ break;
+ }
+ }
+ }
+ else
+ {
+ /* For global symbols we look up the symbol in the hash-table. */
+ h = ((struct score_elf_link_hash_entry *)
+ elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
+ /* Find the real hash-table entry for this symbol. */
+ while (h->root.root.type == bfd_link_hash_indirect
+ || h->root.root.type == bfd_link_hash_warning)
+ h = (struct score_elf_link_hash_entry *) h->root.root.u.i.link;
+
+ /* Record the name of this symbol, for our caller. */
+ name = h->root.root.root.string;
+
+ /* See if this is the special GP_DISP_LABEL symbol. Note that such a
+ symbol must always be a global symbol. */
+ if (strcmp (name, GP_DISP_LABEL) == 0)
+ {
+ /* Relocations against GP_DISP_LABEL are permitted only with
+ R_SCORE_HI16 and R_SCORE_LO16 relocations. */
+ if (r_type != R_SCORE_HI16 && r_type != R_SCORE_LO16)
+ return bfd_reloc_notsupported;
+
+ gp_disp_p = TRUE;
+ }
+
+ /* If this symbol is defined, calculate its address. Note that
+ GP_DISP_LABEL is a magic symbol, always implicitly defined by the
+ linker, so it's inappropriate to check to see whether or not
+ its defined. */
+ else if ((h->root.root.type == bfd_link_hash_defined
+ || h->root.root.type == bfd_link_hash_defweak)
+ && h->root.root.u.def.section)
+ {
+ sec = h->root.root.u.def.section;
+ if (sec->output_section)
+ relocation = (h->root.root.u.def.value
+ + sec->output_section->vma
+ + sec->output_offset);
+ else
+ {
+ relocation = h->root.root.u.def.value;
+ }
+ }
+ else if (h->root.root.type == bfd_link_hash_undefweak)
+ /* We allow relocations against undefined weak symbols, giving
+ it the value zero, so that you can undefined weak functions
+ and check to see if they exist by looking at their addresses. */
+ relocation = 0;
+ else if (info->unresolved_syms_in_objects == RM_IGNORE
+ && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
+ relocation = 0;
+ else if (strcmp (name, "_DYNAMIC_LINK") == 0)
+ {
+ /* If this is a dynamic link, we should have created a _DYNAMIC_LINK symbol
+ in _bfd_score_elf_create_dynamic_sections. Otherwise, we should define
+ the symbol with a value of 0. */
+ BFD_ASSERT (! info->shared);
+ BFD_ASSERT (bfd_get_section_by_name (output_bfd, ".dynamic") == NULL);
+ relocation = 0;
+ }
+ else if (!info->relocatable)
+ {
+ if (! ((*info->callbacks->undefined_symbol)
+ (info, h->root.root.root.string, input_bfd,
+ input_section, rel->r_offset,
+ (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
+ || ELF_ST_VISIBILITY (h->root.other))))
+ return bfd_reloc_undefined;
+ relocation = 0;
+ }
+ }
+
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ {
+ /* This is a relocatable link. We don't have to change
+ anything, unless the reloc is against a section symbol,
+ in which case we have to adjust according to where the
+ section symbol winds up in the output section. */
+ if (sym != NULL && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ score_elf_add_to_rel (input_bfd, contents + rel->r_offset,
+ howto, (bfd_signed_vma) sec->output_offset);
+ continue;
+ }
+
+ r = score_elf_final_link_relocate (howto, input_bfd, output_bfd,
+ input_section, contents, rel, relocs,
+ relocation, info, name,
+ (h ? ELF_ST_TYPE ((unsigned int)h->root.root.type) :
+ ELF_ST_TYPE ((unsigned int)sym->st_info)), h, local_sections,
+ gp_disp_p);
+
+ if (r != bfd_reloc_ok)
+ {
+ const char *msg = (const char *)0;
+
+ switch (r)
+ {
+ case bfd_reloc_overflow:
+ /* If the overflowing reloc was to an undefined symbol,
+ we have already printed one error message and there
+ is no point complaining again. */
+ if (((!h) || (h->root.root.type != bfd_link_hash_undefined))
+ && (!((*info->callbacks->reloc_overflow)
+ (info, NULL, name, howto->name, (bfd_vma) 0,
+ input_bfd, input_section, rel->r_offset))))
+ return FALSE;
+ break;
+ case bfd_reloc_undefined:
+ if (!((*info->callbacks->undefined_symbol)
+ (info, name, input_bfd, input_section, rel->r_offset, TRUE)))
+ return FALSE;
+ break;
+
+ case bfd_reloc_outofrange:
+ msg = _("internal error: out of range error");
+ goto common_error;
+
+ case bfd_reloc_notsupported:
+ msg = _("internal error: unsupported relocation error");
+ goto common_error;
+
+ case bfd_reloc_dangerous:
+ msg = _("internal error: dangerous error");
+ goto common_error;
+
+ default:
+ msg = _("internal error: unknown error");
+ /* fall through */
+
+ common_error:
+ if (!((*info->callbacks->warning)
+ (info, msg, name, input_bfd, input_section, rel->r_offset)))
+ return FALSE;
+ break;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+/* Look through the relocs for a section during the first phase, and
+ allocate space in the global offset table. */
+
+static bfd_boolean
+_bfd_score_elf_check_relocs (bfd *abfd,
+ struct bfd_link_info *info,
+ asection *sec,
+ const Elf_Internal_Rela *relocs)
+{
+ const char *name;
+ bfd *dynobj;
+ Elf_Internal_Shdr *symtab_hdr;
+ struct elf_link_hash_entry **sym_hashes;
+ struct score_got_info *g;
+ size_t extsymoff;
+ const Elf_Internal_Rela *rel;
+ const Elf_Internal_Rela *rel_end;
+ asection *sgot;
+ asection *sreloc;
+ const struct elf_backend_data *bed;
+
+ if (info->relocatable)
+ return TRUE;
+
+ dynobj = elf_hash_table (info)->dynobj;
+ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (abfd);
+ extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
+
+ name = bfd_get_section_name (abfd, sec);
+
+ if (dynobj == NULL)
+ {
+ sgot = NULL;
+ g = NULL;
+ }
+ else
+ {
+ sgot = score_elf_got_section (dynobj, FALSE);
+ if (sgot == NULL)
+ g = NULL;
+ else
+ {
+ BFD_ASSERT (score_elf_section_data (sgot) != NULL);
+ g = score_elf_section_data (sgot)->u.got_info;
+ BFD_ASSERT (g != NULL);
+ }
+ }
+
+ sreloc = NULL;
+ bed = get_elf_backend_data (abfd);
+ rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
+ for (rel = relocs; rel < rel_end; ++rel)
+ {
+ unsigned long r_symndx;
+ unsigned int r_type;
+ struct elf_link_hash_entry *h;
+
+ r_symndx = ELF32_R_SYM (rel->r_info);
+ r_type = ELF32_R_TYPE (rel->r_info);
+
+ if (r_symndx < extsymoff)
+ {
+ h = NULL;
+ }
+ else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
+ {
+ (*_bfd_error_handler) (_("%s: Malformed reloc detected for section %s"), abfd, name);
+ bfd_set_error (bfd_error_bad_value);
+ return FALSE;
+ }
+ else
+ {
+ h = sym_hashes[r_symndx - extsymoff];
+
+ /* This may be an indirect symbol created because of a version. */
+ if (h != NULL)
+ {
+ while (h->root.type == bfd_link_hash_indirect)
+ h = (struct elf_link_hash_entry *)h->root.u.i.link;
+ }
+ }
+
+ /* Some relocs require a global offset table. */
+ if (dynobj == NULL || sgot == NULL)
+ {
+ switch (r_type)
+ {
+ case R_SCORE_GOT15:
+ case R_SCORE_CALL15:
+ if (dynobj == NULL)
+ elf_hash_table (info)->dynobj = dynobj = abfd;
+ if (!score_elf_create_got_section (dynobj, info, FALSE))
+ return FALSE;
+ g = score_elf_got_info (dynobj, &sgot);
+ break;
+ case R_SCORE_ABS32:
+ case R_SCORE_REL32:
+ if (dynobj == NULL && (info->shared || h != NULL) && (sec->flags & SEC_ALLOC) != 0)
+ elf_hash_table (info)->dynobj = dynobj = abfd;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (!h && (r_type == R_SCORE_GOT_LO16))
+ {
+ if (! score_elf_record_local_got_symbol (abfd, r_symndx, rel->r_addend, g))
+ return FALSE;
+ }
+
+ switch (r_type)
+ {
+ case R_SCORE_CALL15:
+ if (h == NULL)
+ {
+ (*_bfd_error_handler)
+ (_("%B: CALL15 reloc at 0x%lx not against global symbol"),
+ abfd, (unsigned long) rel->r_offset);
+ bfd_set_error (bfd_error_bad_value);
+ return FALSE;
+ }
+ else
+ {
+ /* This symbol requires a global offset table entry. */
+ if (! score_elf_record_global_got_symbol (h, abfd, info, g))
+ return FALSE;
+
+ /* We need a stub, not a plt entry for the undefined function. But we record
+ it as if it needs plt. See _bfd_elf_adjust_dynamic_symbol. */
+ h->needs_plt = 1;
+ h->type = STT_FUNC;
+ }
+ break;
+ case R_SCORE_GOT15:
+ if (h && ! score_elf_record_global_got_symbol (h, abfd, info, g))
+ return FALSE;
+ break;
+ case R_SCORE_ABS32:
+ case R_SCORE_REL32:
+ if ((info->shared || h != NULL) && (sec->flags & SEC_ALLOC) != 0)
+ {
+ if (sreloc == NULL)
+ {
+ sreloc = score_elf_rel_dyn_section (dynobj, TRUE);
+ if (sreloc == NULL)
+ return FALSE;
+ }
+#define SCORE_READONLY_SECTION (SEC_ALLOC | SEC_LOAD | SEC_READONLY)
+ if (info->shared)
+ {
+ /* When creating a shared object, we must copy these reloc types into
+ the output file as R_SCORE_REL32 relocs. We make room for this reloc
+ in the .rel.dyn reloc section. */
+ score_elf_allocate_dynamic_relocations (dynobj, 1);
+ if ((sec->flags & SCORE_READONLY_SECTION)
+ == SCORE_READONLY_SECTION)
+ /* We tell the dynamic linker that there are
+ relocations against the text segment. */
+ info->flags |= DF_TEXTREL;
+ }
+ else
+ {
+ struct score_elf_link_hash_entry *hscore;
+
+ /* We only need to copy this reloc if the symbol is
+ defined in a dynamic object. */
+ hscore = (struct score_elf_link_hash_entry *)h;
+ ++hscore->possibly_dynamic_relocs;
+ if ((sec->flags & SCORE_READONLY_SECTION)
+ == SCORE_READONLY_SECTION)
+ /* We need it to tell the dynamic linker if there
+ are relocations against the text segment. */
+ hscore->readonly_reloc = TRUE;
+ }
+
+ /* Even though we don't directly need a GOT entry for this symbol,
+ a symbol must have a dynamic symbol table index greater that
+ DT_SCORE_GOTSYM if there are dynamic relocations against it. */
+ if (h != NULL)
+ {
+ if (dynobj == NULL)
+ elf_hash_table (info)->dynobj = dynobj = abfd;
+ if (! score_elf_create_got_section (dynobj, info, TRUE))
+ return FALSE;
+ g = score_elf_got_info (dynobj, &sgot);
+ if (! score_elf_record_global_got_symbol (h, abfd, info, g))
+ return FALSE;
+ }
+ }
+ break;
+
+ /* This relocation describes the C++ object vtable hierarchy.
+ Reconstruct it for later use during GC. */
+ case R_SCORE_GNU_VTINHERIT:
+ if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
+ return FALSE;
+ break;
+
+ /* This relocation describes which C++ vtable entries are actually
+ used. Record for later use during GC. */
+ case R_SCORE_GNU_VTENTRY:
+ if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
+ return FALSE;
+ break;
+ default:
+ break;
+ }
+
+ /* We must not create a stub for a symbol that has relocations
+ related to taking the function's address. */
+ switch (r_type)
+ {
+ default:
+ if (h != NULL)
+ {
+ struct score_elf_link_hash_entry *sh;
+
+ sh = (struct score_elf_link_hash_entry *) h;
+ sh->no_fn_stub = TRUE;
+ }
+ break;
+ case R_SCORE_CALL15:
+ break;
+ }
+ }
+
+ return TRUE;
+}
+
+static bfd_boolean
+_bfd_score_elf_add_symbol_hook (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ Elf_Internal_Sym *sym,
+ const char **namep ATTRIBUTE_UNUSED,
+ flagword *flagsp ATTRIBUTE_UNUSED,
+ asection **secp,
+ bfd_vma *valp)
+{
+ switch (sym->st_shndx)
+ {
+ case SHN_COMMON:
+ if (sym->st_size > elf_gp_size (abfd))
+ break;
+ /* Fall through. */
+ case SHN_SCORE_SCOMMON:
+ *secp = bfd_make_section_old_way (abfd, ".scommon");
+ (*secp)->flags |= SEC_IS_COMMON;
+ *valp = sym->st_size;
+ break;
+ }
+
+ return TRUE;
+}
+
+static void
+_bfd_score_elf_symbol_processing (bfd *abfd, asymbol *asym)
+{
+ elf_symbol_type *elfsym;
+
+ elfsym = (elf_symbol_type *) asym;
+ switch (elfsym->internal_elf_sym.st_shndx)
+ {
+ case SHN_COMMON:
+ if (asym->value > elf_gp_size (abfd))
+ break;
+ /* Fall through. */
+ case SHN_SCORE_SCOMMON:
+ if (score_elf_scom_section.name == NULL)
+ {
+ /* Initialize the small common section. */
+ score_elf_scom_section.name = ".scommon";
+ score_elf_scom_section.flags = SEC_IS_COMMON;
+ score_elf_scom_section.output_section = &score_elf_scom_section;
+ score_elf_scom_section.symbol = &score_elf_scom_symbol;
+ score_elf_scom_section.symbol_ptr_ptr = &score_elf_scom_symbol_ptr;
+ score_elf_scom_symbol.name = ".scommon";
+ score_elf_scom_symbol.flags = BSF_SECTION_SYM;
+ score_elf_scom_symbol.section = &score_elf_scom_section;
+ score_elf_scom_symbol_ptr = &score_elf_scom_symbol;
+ }
+ asym->section = &score_elf_scom_section;
+ asym->value = elfsym->internal_elf_sym.st_size;
+ break;
+ }
+}
+
+static bfd_boolean
+_bfd_score_elf_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ const char *name ATTRIBUTE_UNUSED,
+ Elf_Internal_Sym *sym,
+ asection *input_sec,
+ struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
+{
+ /* If we see a common symbol, which implies a relocatable link, then
+ if a symbol was small common in an input file, mark it as small
+ common in the output file. */
+ if (sym->st_shndx == SHN_COMMON && strcmp (input_sec->name, ".scommon") == 0)
+ sym->st_shndx = SHN_SCORE_SCOMMON;
+
+ return TRUE;
+}
+
+static bfd_boolean
+_bfd_score_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
+ asection *sec,
+ int *retval)
+{
+ if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
+ {
+ *retval = SHN_SCORE_SCOMMON;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/* Adjust a symbol defined by a dynamic object and referenced by a
+ regular object. The current definition is in some section of the
+ dynamic object, but we're not including those sections. We have to
+ change the definition to something the rest of the link can understand. */
+
+static bfd_boolean
+_bfd_score_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
+ struct elf_link_hash_entry *h)
+{
+ bfd *dynobj;
+ struct score_elf_link_hash_entry *hscore;
+ asection *s;
+
+ dynobj = elf_hash_table (info)->dynobj;
+
+ /* Make sure we know what is going on here. */
+ BFD_ASSERT (dynobj != NULL
+ && (h->needs_plt
+ || h->u.weakdef != NULL
+ || (h->def_dynamic && h->ref_regular && !h->def_regular)));
+
+ /* If this symbol is defined in a dynamic object, we need to copy
+ any R_SCORE_ABS32 or R_SCORE_REL32 relocs against it into the output
+ file. */
+ hscore = (struct score_elf_link_hash_entry *)h;
+ if (!info->relocatable
+ && hscore->possibly_dynamic_relocs != 0
+ && (h->root.type == bfd_link_hash_defweak || !h->def_regular))
+ {
+ score_elf_allocate_dynamic_relocations (dynobj, hscore->possibly_dynamic_relocs);
+ if (hscore->readonly_reloc)
+ /* We tell the dynamic linker that there are relocations
+ against the text segment. */
+ info->flags |= DF_TEXTREL;
+ }
+
+ /* For a function, create a stub, if allowed. */
+ if (!hscore->no_fn_stub && h->needs_plt)
+ {
+ if (!elf_hash_table (info)->dynamic_sections_created)
+ return TRUE;
+
+ /* If this symbol is not defined in a regular file, then set
+ the symbol to the stub location. This is required to make
+ function pointers compare as equal between the normal
+ executable and the shared library. */
+ if (!h->def_regular)
+ {
+ /* We need .stub section. */
+ s = bfd_get_section_by_name (dynobj, SCORE_ELF_STUB_SECTION_NAME);
+ BFD_ASSERT (s != NULL);
+
+ h->root.u.def.section = s;
+ h->root.u.def.value = s->size;
+
+ /* XXX Write this stub address somewhere. */
+ h->plt.offset = s->size;
+
+ /* Make room for this stub code. */
+ s->size += SCORE_FUNCTION_STUB_SIZE;
+
+ /* The last half word of the stub will be filled with the index
+ of this symbol in .dynsym section. */
+ return TRUE;
+ }
+ }
+ else if ((h->type == STT_FUNC) && !h->needs_plt)
+ {
+ /* This will set the entry for this symbol in the GOT to 0, and
+ the dynamic linker will take care of this. */
+ h->root.u.def.value = 0;
+ return TRUE;
+ }
+
+ /* If this is a weak symbol, and there is a real definition, the
+ processor independent code will have arranged for us to see the
+ real definition first, and we can just use the same value. */
+ if (h->u.weakdef != NULL)
+ {
+ BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
+ || h->u.weakdef->root.type == bfd_link_hash_defweak);
+ h->root.u.def.section = h->u.weakdef->root.u.def.section;
+ h->root.u.def.value = h->u.weakdef->root.u.def.value;
+ return TRUE;
+ }
+
+ /* This is a reference to a symbol defined by a dynamic object which
+ is not a function. */
+ return TRUE;
+}
+
+/* This function is called after all the input files have been read,
+ and the input sections have been assigned to output sections. */
+
+static bfd_boolean
+_bfd_score_elf_always_size_sections (bfd *output_bfd,
+ struct bfd_link_info *info)
+{
+ bfd *dynobj;
+ asection *s;
+ struct score_got_info *g;
+ int i;
+ bfd_size_type loadable_size = 0;
+ bfd_size_type local_gotno;
+ bfd *sub;
+
+ dynobj = elf_hash_table (info)->dynobj;
+ if (dynobj == NULL)
+ /* Relocatable links don't have it. */
+ return TRUE;
+
+ g = score_elf_got_info (dynobj, &s);
+ if (s == NULL)
+ return TRUE;
+
+ /* Calculate the total loadable size of the output. That will give us the
+ maximum number of GOT_PAGE entries required. */
+ for (sub = info->input_bfds; sub; sub = sub->link_next)
+ {
+ asection *subsection;
+
+ for (subsection = sub->sections;
+ subsection;
+ subsection = subsection->next)
+ {
+ if ((subsection->flags & SEC_ALLOC) == 0)
+ continue;
+ loadable_size += ((subsection->size + 0xf)
+ &~ (bfd_size_type) 0xf);
+ }
+ }
+
+ /* There has to be a global GOT entry for every symbol with
+ a dynamic symbol table index of DT_SCORE_GOTSYM or
+ higher. Therefore, it make sense to put those symbols
+ that need GOT entries at the end of the symbol table. We
+ do that here. */
+ if (! score_elf_sort_hash_table (info, 1))
+ return FALSE;
+
+ if (g->global_gotsym != NULL)
+ i = elf_hash_table (info)->dynsymcount - g->global_gotsym->dynindx;
+ else
+ /* If there are no global symbols, or none requiring
+ relocations, then GLOBAL_GOTSYM will be NULL. */
+ i = 0;
+
+ /* In the worst case, we'll get one stub per dynamic symbol. */
+ loadable_size += SCORE_FUNCTION_STUB_SIZE * i;
+
+ /* Assume there are two loadable segments consisting of
+ contiguous sections. Is 5 enough? */
+ local_gotno = (loadable_size >> 16) + 5;
+
+ g->local_gotno += local_gotno;
+ s->size += g->local_gotno * SCORE_ELF_GOT_SIZE (output_bfd);
+
+ g->global_gotno = i;
+ s->size += i * SCORE_ELF_GOT_SIZE (output_bfd);
+
+ score_elf_resolve_final_got_entries (g);
+
+ if (s->size > SCORE_ELF_GOT_MAX_SIZE (output_bfd))
+ {
+ /* Fixme. Error message or Warning message should be issued here. */
+ }
+
+ return TRUE;
+}
+
+/* Set the sizes of the dynamic sections. */
+
+static bfd_boolean
+_bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
+{
+ bfd *dynobj;
+ asection *s;
+ bfd_boolean reltext;
+
+ dynobj = elf_hash_table (info)->dynobj;
+ BFD_ASSERT (dynobj != NULL);
+
+ if (elf_hash_table (info)->dynamic_sections_created)
+ {
+ /* Set the contents of the .interp section to the interpreter. */
+ if (!info->shared)
+ {
+ s = bfd_get_section_by_name (dynobj, ".interp");
+ BFD_ASSERT (s != NULL);
+ s->size = strlen (ELF_DYNAMIC_INTERPRETER) + 1;
+ s->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER;
+ }
+ }
+
+ /* The check_relocs and adjust_dynamic_symbol entry points have
+ determined the sizes of the various dynamic sections. Allocate
+ memory for them. */
+ reltext = FALSE;
+ for (s = dynobj->sections; s != NULL; s = s->next)
+ {
+ const char *name;
+
+ if ((s->flags & SEC_LINKER_CREATED) == 0)
+ continue;
+
+ /* It's OK to base decisions on the section name, because none
+ of the dynobj section names depend upon the input files. */
+ name = bfd_get_section_name (dynobj, s);
+
+ if (CONST_STRNEQ (name, ".rel"))
+ {
+ if (s->size == 0)
+ {
+ /* We only strip the section if the output section name
+ has the same name. Otherwise, there might be several
+ input sections for this output section. FIXME: This
+ code is probably not needed these days anyhow, since
+ the linker now does not create empty output sections. */
+ if (s->output_section != NULL
+ && strcmp (name,
+ bfd_get_section_name (s->output_section->owner,
+ s->output_section)) == 0)
+ s->flags |= SEC_EXCLUDE;
+ }
+ else
+ {
+ const char *outname;
+ asection *target;
+
+ /* If this relocation section applies to a read only
+ section, then we probably need a DT_TEXTREL entry.
+ If the relocation section is .rel.dyn, we always
+ assert a DT_TEXTREL entry rather than testing whether
+ there exists a relocation to a read only section or
+ not. */
+ outname = bfd_get_section_name (output_bfd, s->output_section);
+ target = bfd_get_section_by_name (output_bfd, outname + 4);
+ if ((target != NULL
+ && (target->flags & SEC_READONLY) != 0
+ && (target->flags & SEC_ALLOC) != 0) || strcmp (outname, ".rel.dyn") == 0)
+ reltext = TRUE;
+
+ /* We use the reloc_count field as a counter if we need
+ to copy relocs into the output file. */
+ if (strcmp (name, ".rel.dyn") != 0)
+ s->reloc_count = 0;
+ }
+ }
+ else if (CONST_STRNEQ (name, ".got"))
+ {
+ /* _bfd_score_elf_always_size_sections() has already done
+ most of the work, but some symbols may have been mapped
+ to versions that we must now resolve in the got_entries
+ hash tables. */
+ }
+ else if (strcmp (name, SCORE_ELF_STUB_SECTION_NAME) == 0)
+ {
+ /* IRIX rld assumes that the function stub isn't at the end
+ of .text section. So put a dummy. XXX */
+ s->size += SCORE_FUNCTION_STUB_SIZE;
+ }
+ else if (! CONST_STRNEQ (name, ".init"))
+ {
+ /* It's not one of our sections, so don't allocate space. */
+ continue;
+ }
+
+ /* Allocate memory for the section contents. */
+ s->contents = bfd_zalloc (dynobj, s->size);
+ if (s->contents == NULL && s->size != 0)
+ {
+ bfd_set_error (bfd_error_no_memory);
+ return FALSE;
+ }
+ }
+
+ if (elf_hash_table (info)->dynamic_sections_created)
+ {
+ /* Add some entries to the .dynamic section. We fill in the
+ values later, in _bfd_score_elf_finish_dynamic_sections, but we
+ must add the entries now so that we get the correct size for
+ the .dynamic section. The DT_DEBUG entry is filled in by the
+ dynamic linker and used by the debugger. */
+
+ if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
+ return FALSE;
+
+ if (reltext)
+ info->flags |= DF_TEXTREL;
+
+ if ((info->flags & DF_TEXTREL) != 0)
+ {
+ if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
+ return FALSE;
+ }
+
+ if (! SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
+ return FALSE;
+
+ if (score_elf_rel_dyn_section (dynobj, FALSE))
+ {
+ if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
+ return FALSE;
+
+ if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
+ return FALSE;
+
+ if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
+ return FALSE;
+ }
+
+ if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_BASE_ADDRESS, 0))
+ return FALSE;
+
+ if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_LOCAL_GOTNO, 0))
+ return FALSE;
+
+ if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_SYMTABNO, 0))
+ return FALSE;
+
+ if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_UNREFEXTNO, 0))
+ return FALSE;
+
+ if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_GOTSYM, 0))
+ return FALSE;
+
+ if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_HIPAGENO, 0))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bfd_boolean
+_bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
+{
+ struct elf_link_hash_entry *h;
+ struct bfd_link_hash_entry *bh;
+ flagword flags;
+ asection *s;
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
+ | SEC_LINKER_CREATED | SEC_READONLY);
+
+ /* ABI requests the .dynamic section to be read only. */
+ s = bfd_get_section_by_name (abfd, ".dynamic");
+ if (s != NULL)
+ {
+ if (!bfd_set_section_flags (abfd, s, flags))
+ return FALSE;
+ }
+
+ /* We need to create .got section. */
+ if (!score_elf_create_got_section (abfd, info, FALSE))
+ return FALSE;
+
+ if (!score_elf_rel_dyn_section (elf_hash_table (info)->dynobj, TRUE))
+ return FALSE;
+
+ /* Create .stub section. */
+ if (bfd_get_section_by_name (abfd, SCORE_ELF_STUB_SECTION_NAME) == NULL)
+ {
+ s = bfd_make_section_with_flags (abfd, SCORE_ELF_STUB_SECTION_NAME,
+ flags | SEC_CODE);
+ if (s == NULL
+ || !bfd_set_section_alignment (abfd, s, 2))
+
+ return FALSE;
+ }
+
+ if (!info->shared)
+ {
+ const char *name;
+
+ name = "_DYNAMIC_LINK";
+ bh = NULL;
+ if (!(_bfd_generic_link_add_one_symbol
+ (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr,
+ (bfd_vma) 0, (const char *)NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
+ return FALSE;
+
+ h = (struct elf_link_hash_entry *)bh;
+ h->non_elf = 0;
+ h->def_regular = 1;
+ h->type = STT_SECTION;
+
+ if (!bfd_elf_link_record_dynamic_symbol (info, h))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+/* Finish up dynamic symbol handling. We set the contents of various
+ dynamic sections here. */
+
+static bfd_boolean
+_bfd_score_elf_finish_dynamic_symbol (bfd *output_bfd,
+ struct bfd_link_info *info,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
+{
+ bfd *dynobj;
+ asection *sgot;
+ struct score_got_info *g;
+ const char *name;
+
+ dynobj = elf_hash_table (info)->dynobj;
+
+ if (h->plt.offset != MINUS_ONE)
+ {
+ asection *s;
+ bfd_byte stub[SCORE_FUNCTION_STUB_SIZE];
+
+ /* This symbol has a stub. Set it up. */
+ BFD_ASSERT (h->dynindx != -1);
+
+ s = bfd_get_section_by_name (dynobj, SCORE_ELF_STUB_SECTION_NAME);
+ BFD_ASSERT (s != NULL);
+
+ /* FIXME: Can h->dynindex be more than 64K? */
+ if (h->dynindx & 0xffff0000)
+ return FALSE;
+
+ /* Fill the stub. */
+ bfd_put_32 (output_bfd, STUB_LW, stub);
+ bfd_put_32 (output_bfd, STUB_MOVE, stub + 4);
+ bfd_put_32 (output_bfd, STUB_LI16 | (h->dynindx << 1), stub + 8);
+ bfd_put_32 (output_bfd, STUB_BRL, stub + 12);
+
+ BFD_ASSERT (h->plt.offset <= s->size);
+ memcpy (s->contents + h->plt.offset, stub, SCORE_FUNCTION_STUB_SIZE);
+
+ /* Mark the symbol as undefined. plt.offset != -1 occurs
+ only for the referenced symbol. */
+ sym->st_shndx = SHN_UNDEF;
+
+ /* The run-time linker uses the st_value field of the symbol
+ to reset the global offset table entry for this external
+ to its stub address when unlinking a shared object. */
+ sym->st_value = (s->output_section->vma + s->output_offset + h->plt.offset);
+ }
+
+ BFD_ASSERT (h->dynindx != -1 || h->forced_local);
+
+ sgot = score_elf_got_section (dynobj, FALSE);
+ BFD_ASSERT (sgot != NULL);
+ BFD_ASSERT (score_elf_section_data (sgot) != NULL);
+ g = score_elf_section_data (sgot)->u.got_info;
+ BFD_ASSERT (g != NULL);
+
+ /* Run through the global symbol table, creating GOT entries for all
+ the symbols that need them. */
+ if (g->global_gotsym != NULL && h->dynindx >= g->global_gotsym->dynindx)
+ {
+ bfd_vma offset;
+ bfd_vma value;
+
+ value = sym->st_value;
+ offset = score_elf_global_got_index (dynobj, h);
+ bfd_put_32 (output_bfd, value, sgot->contents + offset);
+ }
+
+ /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
+ name = h->root.root.string;
+ if (strcmp (name, "_DYNAMIC") == 0 || strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0)
+ sym->st_shndx = SHN_ABS;
+ else if (strcmp (name, "_DYNAMIC_LINK") == 0)
+ {
+ sym->st_shndx = SHN_ABS;
+ sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
+ sym->st_value = 1;
+ }
+ else if (strcmp (name, GP_DISP_LABEL) == 0)
+ {
+ sym->st_shndx = SHN_ABS;
+ sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
+ sym->st_value = elf_gp (output_bfd);
+ }
+
+ return TRUE;
+}
+
+/* Finish up the dynamic sections. */
+
+static bfd_boolean
+_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd,
+ struct bfd_link_info *info)
+{
+ bfd *dynobj;
+ asection *sdyn;
+ asection *sgot;
+ asection *s;
+ struct score_got_info *g;
+
+ dynobj = elf_hash_table (info)->dynobj;
+
+ sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+
+ sgot = score_elf_got_section (dynobj, FALSE);
+ if (sgot == NULL)
+ g = NULL;
+ else
+ {
+ BFD_ASSERT (score_elf_section_data (sgot) != NULL);
+ g = score_elf_section_data (sgot)->u.got_info;
+ BFD_ASSERT (g != NULL);
+ }
+
+ if (elf_hash_table (info)->dynamic_sections_created)
+ {
+ bfd_byte *b;
+
+ BFD_ASSERT (sdyn != NULL);
+ BFD_ASSERT (g != NULL);
+
+ for (b = sdyn->contents;
+ b < sdyn->contents + sdyn->size;
+ b += SCORE_ELF_DYN_SIZE (dynobj))
+ {
+ Elf_Internal_Dyn dyn;
+ const char *name;
+ size_t elemsize;
+ bfd_boolean swap_out_p;
+
+ /* Read in the current dynamic entry. */
+ (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
+
+ /* Assume that we're going to modify it and write it out. */
+ swap_out_p = TRUE;
+
+ switch (dyn.d_tag)
+ {
+ case DT_RELENT:
+ s = score_elf_rel_dyn_section (dynobj, FALSE);
+ BFD_ASSERT (s != NULL);
+ dyn.d_un.d_val = SCORE_ELF_REL_SIZE (dynobj);
+ break;
+
+ case DT_STRSZ:
+ /* Rewrite DT_STRSZ. */
+ dyn.d_un.d_val = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
+ break;
+
+ case DT_PLTGOT:
+ name = ".got";
+ s = bfd_get_section_by_name (output_bfd, name);
+ BFD_ASSERT (s != NULL);
+ dyn.d_un.d_ptr = s->vma;
+ break;
+
+ case DT_SCORE_BASE_ADDRESS:
+ s = output_bfd->sections;
+ BFD_ASSERT (s != NULL);
+ dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
+ break;
+
+ case DT_SCORE_LOCAL_GOTNO:
+ dyn.d_un.d_val = g->local_gotno;
+ break;
+
+ case DT_SCORE_UNREFEXTNO:
+ /* The index into the dynamic symbol table which is the
+ entry of the first external symbol that is not
+ referenced within the same object. */
+ dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
+ break;
+
+ case DT_SCORE_GOTSYM:
+ if (g->global_gotsym)
+ {
+ dyn.d_un.d_val = g->global_gotsym->dynindx;
+ break;
+ }
+ /* In case if we don't have global got symbols we default
+ to setting DT_SCORE_GOTSYM to the same value as
+ DT_SCORE_SYMTABNO, so we just fall through. */
+
+ case DT_SCORE_SYMTABNO:
+ name = ".dynsym";
+ elemsize = SCORE_ELF_SYM_SIZE (output_bfd);
+ s = bfd_get_section_by_name (output_bfd, name);
+ BFD_ASSERT (s != NULL);
+
+ dyn.d_un.d_val = s->size / elemsize;
+ break;
+
+ case DT_SCORE_HIPAGENO:
+ dyn.d_un.d_val = g->local_gotno - SCORE_RESERVED_GOTNO;
+ break;
+
+ default:
+ swap_out_p = FALSE;
+ break;
+ }
+
+ if (swap_out_p)
+ (*get_elf_backend_data (dynobj)->s->swap_dyn_out) (dynobj, &dyn, b);
+ }
+ }
+
+ /* The first entry of the global offset table will be filled at
+ runtime. The second entry will be used by some runtime loaders.
+ This isn't the case of IRIX rld. */
+ if (sgot != NULL && sgot->size > 0)
+ {
+ bfd_put_32 (output_bfd, 0, sgot->contents);
+ bfd_put_32 (output_bfd, 0x80000000, sgot->contents + SCORE_ELF_GOT_SIZE (output_bfd));
+ }
+
+ if (sgot != NULL)
+ elf_section_data (sgot->output_section)->this_hdr.sh_entsize
+ = SCORE_ELF_GOT_SIZE (output_bfd);
+
+
+ /* We need to sort the entries of the dynamic relocation section. */
+ s = score_elf_rel_dyn_section (dynobj, FALSE);
+
+ if (s != NULL && s->size > (bfd_vma)2 * SCORE_ELF_REL_SIZE (output_bfd))
+ {
+ reldyn_sorting_bfd = output_bfd;
+ qsort ((Elf32_External_Rel *) s->contents + 1, s->reloc_count - 1,
+ sizeof (Elf32_External_Rel), score_elf_sort_dynamic_relocs);
+ }
+
+ return TRUE;
+}
+
+/* This function set up the ELF section header for a BFD section in preparation for writing
+ it out. This is where the flags and type fields are set for unusual sections. */
+
+static bfd_boolean
+_bfd_score_elf_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
+ Elf_Internal_Shdr *hdr,
+ asection *sec)
+{
+ const char *name;
+
+ name = bfd_get_section_name (abfd, sec);
+
+ if (strcmp (name, ".got") == 0
+ || strcmp (name, ".srdata") == 0
+ || strcmp (name, ".sdata") == 0
+ || strcmp (name, ".sbss") == 0)
+ hdr->sh_flags |= SHF_SCORE_GPREL;
+
+ return TRUE;
+}
+
+/* This function do additional processing on the ELF section header before writing
+ it out. This is used to set the flags and type fields for some sections. */
+
+/* assign_file_positions_except_relocs() check section flag and if it is allocatable,
+ warning message will be issued. backend_fake_section is called before
+ assign_file_positions_except_relocs(); backend_section_processing after it. so, we
+ modify section flag there, but not backend_fake_section. */
+
+static bfd_boolean
+_bfd_score_elf_section_processing (bfd *abfd ATTRIBUTE_UNUSED, Elf_Internal_Shdr *hdr)
+{
+ if (hdr->bfd_section != NULL)
+ {
+ const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
+
+ if (strcmp (name, ".sdata") == 0)
+ {
+ hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_SCORE_GPREL;
+ hdr->sh_type = SHT_PROGBITS;
+ }
+ else if (strcmp (name, ".sbss") == 0)
+ {
+ hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_SCORE_GPREL;
+ hdr->sh_type = SHT_NOBITS;
+ }
+ else if (strcmp (name, ".srdata") == 0)
+ {
+ hdr->sh_flags |= SHF_ALLOC | SHF_SCORE_GPREL;
+ hdr->sh_type = SHT_PROGBITS;
+ }
+ }
+
+ return TRUE;
+}
+
+static bfd_boolean
+_bfd_score_elf_write_section (bfd *output_bfd,
+ struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
+ asection *sec, bfd_byte *contents)
+{
+ bfd_byte *to, *from, *end;
+ int i;
+
+ if (strcmp (sec->name, ".pdr") != 0)
+ return FALSE;
+
+ if (score_elf_section_data (sec)->u.tdata == NULL)
+ return FALSE;
+
+ to = contents;
+ end = contents + sec->size;
+ for (from = contents, i = 0; from < end; from += PDR_SIZE, i++)
+ {
+ if ((score_elf_section_data (sec)->u.tdata)[i] == 1)
+ continue;
+
+ if (to != from)
+ memcpy (to, from, PDR_SIZE);
+
+ to += PDR_SIZE;
+ }
+ bfd_set_section_contents (output_bfd, sec->output_section, contents,
+ (file_ptr) sec->output_offset, sec->size);
+
+ return TRUE;
+}
+
+/* Copy data from a SCORE ELF indirect symbol to its direct symbol, hiding the old
+ indirect symbol. Process additional relocation information. */
+
+static void
+_bfd_score_elf_copy_indirect_symbol (struct bfd_link_info *info,
+ struct elf_link_hash_entry *dir,
+ struct elf_link_hash_entry *ind)
+{
+ struct score_elf_link_hash_entry *dirscore, *indscore;
+
+ _bfd_elf_link_hash_copy_indirect (info, dir, ind);
+
+ if (ind->root.type != bfd_link_hash_indirect)
+ return;
+
+ dirscore = (struct score_elf_link_hash_entry *) dir;
+ indscore = (struct score_elf_link_hash_entry *) ind;
+ dirscore->possibly_dynamic_relocs += indscore->possibly_dynamic_relocs;
+
+ if (indscore->readonly_reloc)
+ dirscore->readonly_reloc = TRUE;
+
+ if (indscore->no_fn_stub)
+ dirscore->no_fn_stub = TRUE;
+}
+
+/* Remove information about discarded functions from other sections which mention them. */
+
+static bfd_boolean
+_bfd_score_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
+ struct bfd_link_info *info)
+{
+ asection *o;
+ bfd_boolean ret = FALSE;
+ unsigned char *tdata;
+ size_t i, skip;
+
+ o = bfd_get_section_by_name (abfd, ".pdr");
+ if ((!o) || (o->size == 0) || (o->size % PDR_SIZE != 0)
+ || (o->output_section != NULL && bfd_is_abs_section (o->output_section)))
+ return FALSE;
+
+ tdata = bfd_zmalloc (o->size / PDR_SIZE);
+ if (!tdata)
+ return FALSE;
+
+ cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, info->keep_memory);
+ if (!cookie->rels)
+ {
+ free (tdata);
+ return FALSE;
+ }
+
+ cookie->rel = cookie->rels;
+ cookie->relend = cookie->rels + o->reloc_count;
+
+ for (i = 0, skip = 0; i < o->size; i++)
+ {
+ if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
+ {
+ tdata[i] = 1;
+ skip++;
+ }
+ }
+
+ if (skip != 0)
+ {
+ score_elf_section_data (o)->u.tdata = tdata;
+ o->size -= skip * PDR_SIZE;
+ ret = TRUE;
+ }
+ else
+ free (tdata);
+
+ if (!info->keep_memory)
+ free (cookie->rels);
+
+ return ret;
+}
+
+/* Signal that discard_info() has removed the discarded relocations for this section. */
+
+static bfd_boolean
+_bfd_score_elf_ignore_discarded_relocs (asection *sec)
+{
+ if (strcmp (sec->name, ".pdr") == 0)
+ return TRUE;
+ return FALSE;
+}
+
+/* Return the section that should be marked against GC for a given
+ relocation. */
+
+static asection *
+_bfd_score_elf_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
+{
+ if (h != NULL)
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_SCORE_GNU_VTINHERIT:
+ case R_SCORE_GNU_VTENTRY:
+ return NULL;
+ }
+
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
+}
+
+/* Support for core dump NOTE sections. */
+
+static bfd_boolean
+_bfd_score_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
+{
+ int offset;
+ unsigned int raw_size;
+
+ switch (note->descsz)
+ {
+ default:
+ return FALSE;
+
+ case 148: /* Linux/Score 32-bit. */
+ /* pr_cursig */
+ elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
+
+ /* pr_pid */
+ elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24);
+
+ /* pr_reg */
+ offset = 72;
+ raw_size = 72;
+
+ break;
+ }
+
+ /* Make a ".reg/999" section. */
+ return _bfd_elfcore_make_pseudosection (abfd, ".reg", raw_size, note->descpos + offset);
+}
+
+static bfd_boolean
+_bfd_score_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
+{
+ switch (note->descsz)
+ {
+ default:
+ return FALSE;
+
+ case 124: /* Linux/Score elf_prpsinfo. */
+ elf_tdata (abfd)->core_program = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
+ elf_tdata (abfd)->core_command = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
+ }
+
+ /* Note that for some reason, a spurious space is tacked
+ onto the end of the args in some (at least one anyway)
+ implementations, so strip it off if it exists. */
+
+ {
+ char *command = elf_tdata (abfd)->core_command;
+ int n = strlen (command);
+
+ if (0 < n && command[n - 1] == ' ')
+ command[n - 1] = '\0';
+ }
+
+ return TRUE;
+}
+
+
+/* Score BFD functions. */
+
+static reloc_howto_type *
+elf32_score_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code)
+{
+ unsigned int i;
+
+ for (i = 0; i < NUM_ELEM (elf32_score_reloc_map); i++)
+ if (elf32_score_reloc_map[i].bfd_reloc_val == code)
+ return &elf32_score_howto_table[elf32_score_reloc_map[i].elf_reloc_val];
+
+ return NULL;
+}
+
+static reloc_howto_type *
+elf32_score_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (elf32_score_howto_table)
+ / sizeof (elf32_score_howto_table[0]));
+ i++)
+ if (elf32_score_howto_table[i].name != NULL
+ && strcasecmp (elf32_score_howto_table[i].name, r_name) == 0)
+ return &elf32_score_howto_table[i];
+
+ return NULL;
+}
+
+/* Create a score elf linker hash table. */
+
+static struct bfd_link_hash_table *
+elf32_score_link_hash_table_create (bfd *abfd)
+{
+ struct score_elf_link_hash_table *ret;
+ bfd_size_type amt = sizeof (struct score_elf_link_hash_table);
+
+ ret = bfd_malloc (amt);
+ if (ret == NULL)
+ return NULL;
+
+ if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, score_elf_link_hash_newfunc,
+ sizeof (struct score_elf_link_hash_entry)))
+ {
+ free (ret);
+ return NULL;
+ }
+
+ return &ret->root.root;
+}
+
+static bfd_boolean
+elf32_score_print_private_bfd_data (bfd *abfd, void * ptr)
+{
+ FILE *file = (FILE *) ptr;
+
+ BFD_ASSERT (abfd != NULL && ptr != NULL);
+
+ /* Print normal ELF private data. */
+ _bfd_elf_print_private_bfd_data (abfd, ptr);
+
+ /* xgettext:c-format */
+ fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
+ if (elf_elfheader (abfd)->e_flags & EF_SCORE_PIC)
+ {
+ fprintf (file, _(" [pic]"));
+ }
+ if (elf_elfheader (abfd)->e_flags & EF_SCORE_FIXDEP)
+ {
+ fprintf (file, _(" [fix dep]"));
+ }
+ fputc ('\n', file);
+
+ return TRUE;
+}
+
+static bfd_boolean
+elf32_score_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
+{
+ flagword in_flags;
+ flagword out_flags;
+
+ if (!_bfd_generic_verify_endian_match (ibfd, obfd))
+ return FALSE;
+
+ in_flags = elf_elfheader (ibfd)->e_flags;
+ out_flags = elf_elfheader (obfd)->e_flags;
+
+ if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
+ || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
+ return TRUE;
+
+ in_flags = elf_elfheader (ibfd)->e_flags;
+ out_flags = elf_elfheader (obfd)->e_flags;
+
+ if (! elf_flags_init (obfd))
+ {
+ elf_flags_init (obfd) = TRUE;
+ elf_elfheader (obfd)->e_flags = in_flags;
+
+ if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
+ && bfd_get_arch_info (obfd)->the_default)
+ {
+ return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd), bfd_get_mach (ibfd));
+ }
+
+ return TRUE;
+ }
+
+ if (((in_flags & EF_SCORE_PIC) != 0) != ((out_flags & EF_SCORE_PIC) != 0))
+ {
+ (*_bfd_error_handler) (_("%B: warning: linking PIC files with non-PIC files"), ibfd);
+ }
+
+ /* FIXME: Maybe dependency fix compatibility should be checked here. */
+
+ return TRUE;
+}
+
+static bfd_boolean
+elf32_score_new_section_hook (bfd *abfd, asection *sec)
+{
+ struct _score_elf_section_data *sdata;
+ bfd_size_type amt = sizeof (*sdata);
+
+ sdata = bfd_zalloc (abfd, amt);
+ if (sdata == NULL)
+ return FALSE;
+ sec->used_by_bfd = sdata;
+
+ return _bfd_elf_new_section_hook (abfd, sec);
+}
+
+
+#define USE_REL 1
+#define TARGET_LITTLE_SYM bfd_elf32_littlescore_vec
+#define TARGET_LITTLE_NAME "elf32-littlescore"
+#define TARGET_BIG_SYM bfd_elf32_bigscore_vec
+#define TARGET_BIG_NAME "elf32-bigscore"
+#define ELF_ARCH bfd_arch_score
+#define ELF_MACHINE_CODE EM_SCORE
+#define ELF_MAXPAGESIZE 0x8000
+
+#define elf_info_to_howto 0
+#define elf_info_to_howto_rel _bfd_score_info_to_howto
+#define elf_backend_relocate_section _bfd_score_elf_relocate_section
+#define elf_backend_check_relocs _bfd_score_elf_check_relocs
+#define elf_backend_add_symbol_hook _bfd_score_elf_add_symbol_hook
+#define elf_backend_symbol_processing _bfd_score_elf_symbol_processing
+#define elf_backend_link_output_symbol_hook \
+ _bfd_score_elf_link_output_symbol_hook
+#define elf_backend_section_from_bfd_section \
+ _bfd_score_elf_section_from_bfd_section
+#define elf_backend_adjust_dynamic_symbol \
+ _bfd_score_elf_adjust_dynamic_symbol
+#define elf_backend_always_size_sections \
+ _bfd_score_elf_always_size_sections
+#define elf_backend_size_dynamic_sections \
+ _bfd_score_elf_size_dynamic_sections
+#define elf_backend_omit_section_dynsym \
+ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
+#define elf_backend_create_dynamic_sections \
+ _bfd_score_elf_create_dynamic_sections
+#define elf_backend_finish_dynamic_symbol \
+ _bfd_score_elf_finish_dynamic_symbol
+#define elf_backend_finish_dynamic_sections \
+ _bfd_score_elf_finish_dynamic_sections
+#define elf_backend_fake_sections _bfd_score_elf_fake_sections
+#define elf_backend_section_processing _bfd_score_elf_section_processing
+#define elf_backend_write_section _bfd_score_elf_write_section
+#define elf_backend_copy_indirect_symbol _bfd_score_elf_copy_indirect_symbol
+#define elf_backend_hide_symbol _bfd_score_elf_hide_symbol
+#define elf_backend_discard_info _bfd_score_elf_discard_info
+#define elf_backend_ignore_discarded_relocs \
+ _bfd_score_elf_ignore_discarded_relocs
+#define elf_backend_gc_mark_hook _bfd_score_elf_gc_mark_hook
+#define elf_backend_grok_prstatus _bfd_score_elf_grok_prstatus
+#define elf_backend_grok_psinfo _bfd_score_elf_grok_psinfo
+#define elf_backend_can_gc_sections 1
+#define elf_backend_want_plt_sym 0
+#define elf_backend_got_header_size (4 * SCORE_RESERVED_GOTNO)
+#define elf_backend_plt_header_size 0
+#define elf_backend_collect TRUE
+#define elf_backend_type_change_ok TRUE
+
+#define bfd_elf32_bfd_reloc_type_lookup elf32_score_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup \
+ elf32_score_reloc_name_lookup
+#define bfd_elf32_bfd_link_hash_table_create elf32_score_link_hash_table_create
+#define bfd_elf32_bfd_print_private_bfd_data elf32_score_print_private_bfd_data
+#define bfd_elf32_bfd_merge_private_bfd_data elf32_score_merge_private_bfd_data
+#define bfd_elf32_new_section_hook elf32_score_new_section_hook
+
+#include "elf32-target.h"
diff --git a/bfd/elf32-sh-relocs.h b/bfd/elf32-sh-relocs.h
new file mode 100644
index 000000000000..3488ef4edbe4
--- /dev/null
+++ b/bfd/elf32-sh-relocs.h
@@ -0,0 +1,1716 @@
+ /* No relocation. */
+ HOWTO (R_SH_NONE, /* type */
+ 0, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_NONE", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* 32 bit absolute relocation. Setting partial_inplace to TRUE and
+ src_mask to a non-zero value is similar to the COFF toolchain. */
+ HOWTO (R_SH_DIR32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ SH_ELF_RELOC, /* special_function */
+ "R_SH_DIR32", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* 32 bit PC relative relocation. */
+ HOWTO (R_SH_REL32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_REL32", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* 8 bit PC relative branch divided by 2. */
+ HOWTO (R_SH_DIR8WPN, /* type */
+ 1, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_DIR8WPN", /* name */
+ TRUE, /* partial_inplace */
+ 0xff, /* src_mask */
+ 0xff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* 12 bit PC relative branch divided by 2. */
+ /* This cannot be partial_inplace because relaxation can't know the
+ eventual value of a symbol. */
+ HOWTO (R_SH_IND12W, /* type */
+ 1, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 12, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ NULL, /* special_function */
+ "R_SH_IND12W", /* name */
+ FALSE, /* partial_inplace */
+ 0x0, /* src_mask */
+ 0xfff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* 8 bit unsigned PC relative divided by 4. */
+ HOWTO (R_SH_DIR8WPL, /* type */
+ 2, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_DIR8WPL", /* name */
+ TRUE, /* partial_inplace */
+ 0xff, /* src_mask */
+ 0xff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* 8 bit unsigned PC relative divided by 2. */
+ HOWTO (R_SH_DIR8WPZ, /* type */
+ 1, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_DIR8WPZ", /* name */
+ TRUE, /* partial_inplace */
+ 0xff, /* src_mask */
+ 0xff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* 8 bit GBR relative. FIXME: This only makes sense if we have some
+ special symbol for the GBR relative area, and that is not
+ implemented. */
+ HOWTO (R_SH_DIR8BP, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_DIR8BP", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* 8 bit GBR relative divided by 2. FIXME: This only makes sense if
+ we have some special symbol for the GBR relative area, and that
+ is not implemented. */
+ HOWTO (R_SH_DIR8W, /* type */
+ 1, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_DIR8W", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* 8 bit GBR relative divided by 4. FIXME: This only makes sense if
+ we have some special symbol for the GBR relative area, and that
+ is not implemented. */
+ HOWTO (R_SH_DIR8L, /* type */
+ 2, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_DIR8L", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* 8 bit PC relative divided by 2 - but specified in a very odd way. */
+ HOWTO (R_SH_LOOP_START, /* type */
+ 1, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_LOOP_START", /* name */
+ TRUE, /* partial_inplace */
+ 0xff, /* src_mask */
+ 0xff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* 8 bit PC relative divided by 2 - but specified in a very odd way. */
+ HOWTO (R_SH_LOOP_END, /* type */
+ 1, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_LOOP_END", /* name */
+ TRUE, /* partial_inplace */
+ 0xff, /* src_mask */
+ 0xff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ EMPTY_HOWTO (12),
+ EMPTY_HOWTO (13),
+ EMPTY_HOWTO (14),
+ EMPTY_HOWTO (15),
+ EMPTY_HOWTO (16),
+ EMPTY_HOWTO (17),
+ EMPTY_HOWTO (18),
+ EMPTY_HOWTO (19),
+ EMPTY_HOWTO (20),
+ EMPTY_HOWTO (21),
+
+ /* The remaining relocs are a GNU extension used for relaxing. The
+ final pass of the linker never needs to do anything with any of
+ these relocs. Any required operations are handled by the
+ relaxation code. */
+
+ /* GNU extension to record C++ vtable hierarchy */
+ HOWTO (R_SH_GNU_VTINHERIT, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ NULL, /* special_function */
+ "R_SH_GNU_VTINHERIT", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* GNU extension to record C++ vtable member usage */
+ HOWTO (R_SH_GNU_VTENTRY, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ _bfd_elf_rel_vtable_reloc_fn, /* special_function */
+ "R_SH_GNU_VTENTRY", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* An 8 bit switch table entry. This is generated for an expression
+ such as ``.word L1 - L2''. The offset holds the difference
+ between the reloc address and L2. */
+ HOWTO (R_SH_SWITCH8, /* type */
+ 0, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_SWITCH8", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* A 16 bit switch table entry. This is generated for an expression
+ such as ``.word L1 - L2''. The offset holds the difference
+ between the reloc address and L2. */
+ HOWTO (R_SH_SWITCH16, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_SWITCH16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* A 32 bit switch table entry. This is generated for an expression
+ such as ``.long L1 - L2''. The offset holds the difference
+ between the reloc address and L2. */
+ HOWTO (R_SH_SWITCH32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_SWITCH32", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Indicates a .uses pseudo-op. The compiler will generate .uses
+ pseudo-ops when it finds a function call which can be relaxed.
+ The offset field holds the PC relative offset to the instruction
+ which loads the register used in the function call. */
+ HOWTO (R_SH_USES, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_USES", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* The assembler will generate this reloc for addresses referred to
+ by the register loads associated with USES relocs. The offset
+ field holds the number of times the address is referenced in the
+ object file. */
+ HOWTO (R_SH_COUNT, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_COUNT", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Indicates an alignment statement. The offset field is the power
+ of 2 to which subsequent portions of the object file must be
+ aligned. */
+ HOWTO (R_SH_ALIGN, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_ALIGN", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* The assembler will generate this reloc before a block of
+ instructions. A section should be processed as assuming it
+ contains data, unless this reloc is seen. */
+ HOWTO (R_SH_CODE, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_CODE", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* The assembler will generate this reloc after a block of
+ instructions when it sees data that is not instructions. */
+ HOWTO (R_SH_DATA, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_DATA", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* The assembler generates this reloc for each label within a block
+ of instructions. This permits the linker to avoid swapping
+ instructions which are the targets of branches. */
+ HOWTO (R_SH_LABEL, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_LABEL", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* The next 12 are only supported via linking in SHC-generated objects. */
+ HOWTO (R_SH_DIR16, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_DIR8, /* type */
+ 0, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR8", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_DIR8UL, /* type */
+ 2, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR8UL", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_DIR8UW, /* type */
+ 1, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR8UW", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_DIR8U, /* type */
+ 0, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR8U", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_DIR8SW, /* type */
+ 1, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR8SW", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_DIR8S, /* type */
+ 0, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR8S", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_DIR4UL, /* type */
+ 2, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 4, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR4UL", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x0f, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_DIR4UW, /* type */
+ 1, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 4, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR4UW", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x0f, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_DIR4U, /* type */
+ 0, /* rightshift */
+ 0, /* size (0 = byte, 1 = short, 2 = long) */
+ 4, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR4U", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x0f, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_PSHA, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 7, /* bitsize */
+ FALSE, /* pc_relative */
+ 4, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_PSHA", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x0f, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_PSHL, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 7, /* bitsize */
+ FALSE, /* pc_relative */
+ 4, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_PSHL", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x0f, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+#ifdef INCLUDE_SHMEDIA
+ /* Used in SHLLI.L and SHLRI.L. */
+ HOWTO (R_SH_DIR5U, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 5, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR5U", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xfc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in SHARI, SHLLI et al. */
+ HOWTO (R_SH_DIR6U, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 6, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR6U", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xfc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in BxxI, LDHI.L et al. */
+ HOWTO (R_SH_DIR6S, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 6, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR6S", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xfc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in ADDI, ANDI et al. */
+ HOWTO (R_SH_DIR10S, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 10, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR10S", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in LD.UW, ST.W et al. */
+ HOWTO (R_SH_DIR10SW, /* type */
+ 1, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 11, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR10SW", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in LD.L, FLD.S et al. */
+ HOWTO (R_SH_DIR10SL, /* type */
+ 2, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 12, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR10SL", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in FLD.D, FST.P et al. */
+ HOWTO (R_SH_DIR10SQ, /* type */
+ 3, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 13, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR10SQ", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+#else
+ EMPTY_HOWTO (45),
+ EMPTY_HOWTO (46),
+ EMPTY_HOWTO (47),
+ EMPTY_HOWTO (48),
+ EMPTY_HOWTO (49),
+ EMPTY_HOWTO (50),
+ EMPTY_HOWTO (51),
+#endif
+
+ EMPTY_HOWTO (52),
+
+ HOWTO (R_SH_DIR16S, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_DIR16S", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ EMPTY_HOWTO (54),
+ EMPTY_HOWTO (55),
+ EMPTY_HOWTO (56),
+ EMPTY_HOWTO (57),
+ EMPTY_HOWTO (58),
+ EMPTY_HOWTO (59),
+ EMPTY_HOWTO (60),
+ EMPTY_HOWTO (61),
+ EMPTY_HOWTO (62),
+ EMPTY_HOWTO (63),
+ EMPTY_HOWTO (64),
+ EMPTY_HOWTO (65),
+ EMPTY_HOWTO (66),
+ EMPTY_HOWTO (67),
+ EMPTY_HOWTO (68),
+ EMPTY_HOWTO (69),
+ EMPTY_HOWTO (70),
+ EMPTY_HOWTO (71),
+ EMPTY_HOWTO (72),
+ EMPTY_HOWTO (73),
+ EMPTY_HOWTO (74),
+ EMPTY_HOWTO (75),
+ EMPTY_HOWTO (76),
+ EMPTY_HOWTO (77),
+ EMPTY_HOWTO (78),
+ EMPTY_HOWTO (79),
+ EMPTY_HOWTO (80),
+ EMPTY_HOWTO (81),
+ EMPTY_HOWTO (82),
+ EMPTY_HOWTO (83),
+ EMPTY_HOWTO (84),
+ EMPTY_HOWTO (85),
+ EMPTY_HOWTO (86),
+ EMPTY_HOWTO (87),
+ EMPTY_HOWTO (88),
+ EMPTY_HOWTO (89),
+ EMPTY_HOWTO (90),
+ EMPTY_HOWTO (91),
+ EMPTY_HOWTO (92),
+ EMPTY_HOWTO (93),
+ EMPTY_HOWTO (94),
+ EMPTY_HOWTO (95),
+ EMPTY_HOWTO (96),
+ EMPTY_HOWTO (97),
+ EMPTY_HOWTO (98),
+ EMPTY_HOWTO (99),
+ EMPTY_HOWTO (100),
+ EMPTY_HOWTO (101),
+ EMPTY_HOWTO (102),
+ EMPTY_HOWTO (103),
+ EMPTY_HOWTO (104),
+ EMPTY_HOWTO (105),
+ EMPTY_HOWTO (106),
+ EMPTY_HOWTO (107),
+ EMPTY_HOWTO (108),
+ EMPTY_HOWTO (109),
+ EMPTY_HOWTO (110),
+ EMPTY_HOWTO (111),
+ EMPTY_HOWTO (112),
+ EMPTY_HOWTO (113),
+ EMPTY_HOWTO (114),
+ EMPTY_HOWTO (115),
+ EMPTY_HOWTO (116),
+ EMPTY_HOWTO (117),
+ EMPTY_HOWTO (118),
+ EMPTY_HOWTO (119),
+ EMPTY_HOWTO (120),
+ EMPTY_HOWTO (121),
+ EMPTY_HOWTO (122),
+ EMPTY_HOWTO (123),
+ EMPTY_HOWTO (124),
+ EMPTY_HOWTO (125),
+ EMPTY_HOWTO (126),
+ EMPTY_HOWTO (127),
+ EMPTY_HOWTO (128),
+ EMPTY_HOWTO (129),
+ EMPTY_HOWTO (130),
+ EMPTY_HOWTO (131),
+ EMPTY_HOWTO (132),
+ EMPTY_HOWTO (133),
+ EMPTY_HOWTO (134),
+ EMPTY_HOWTO (135),
+ EMPTY_HOWTO (136),
+ EMPTY_HOWTO (137),
+ EMPTY_HOWTO (138),
+ EMPTY_HOWTO (139),
+ EMPTY_HOWTO (140),
+ EMPTY_HOWTO (141),
+ EMPTY_HOWTO (142),
+ EMPTY_HOWTO (143),
+
+ HOWTO (R_SH_TLS_GD_32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_TLS_GD_32", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_TLS_LD_32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_TLS_LD_32", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_TLS_LDO_32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_TLS_LDO_32", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_TLS_IE_32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_TLS_IE_32", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_TLS_LE_32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_TLS_LE_32", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_TLS_DTPMOD32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_TLS_DTPMOD32", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_TLS_DTPOFF32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_TLS_DTPOFF32", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_TLS_TPOFF32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_TLS_TPOFF32", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ EMPTY_HOWTO (152),
+ EMPTY_HOWTO (153),
+ EMPTY_HOWTO (154),
+ EMPTY_HOWTO (155),
+ EMPTY_HOWTO (156),
+ EMPTY_HOWTO (157),
+ EMPTY_HOWTO (158),
+ EMPTY_HOWTO (159),
+
+ HOWTO (R_SH_GOT32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_GOT32", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_PLT32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_PLT32", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_SH_COPY, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_COPY", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_GLOB_DAT, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_GLOB_DAT", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_JMP_SLOT, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_JMP_SLOT", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_RELATIVE, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_RELATIVE", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_GOTOFF, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_GOTOFF", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_GOTPC, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_GOTPC", /* name */
+ SH_PARTIAL32, /* partial_inplace */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ HOWTO (R_SH_GOTPLT32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* */
+ "R_SH_GOTPLT32", /* name */
+ FALSE, /* partial_inplace */
+ /* ??? Why not 0? */
+ SH_SRC_MASK32, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+#ifdef INCLUDE_SHMEDIA
+ /* Used in MOVI and SHORI (x & 65536). */
+ HOWTO (R_SH_GOT_LOW16, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOT_LOW16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 16) & 65536). */
+ HOWTO (R_SH_GOT_MEDLOW16, /* type */
+ 16, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOT_MEDLOW16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 32) & 65536). */
+ HOWTO (R_SH_GOT_MEDHI16, /* type */
+ 32, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOT_MEDHI16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 48) & 65536). */
+ HOWTO (R_SH_GOT_HI16, /* type */
+ 48, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOT_HI16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI (x & 65536). */
+ HOWTO (R_SH_GOTPLT_LOW16, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTPLT_LOW16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 16) & 65536). */
+ HOWTO (R_SH_GOTPLT_MEDLOW16, /* type */
+ 16, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTPLT_MEDLOW16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 32) & 65536). */
+ HOWTO (R_SH_GOTPLT_MEDHI16, /* type */
+ 32, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTPLT_MEDHI16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 48) & 65536). */
+ HOWTO (R_SH_GOTPLT_HI16, /* type */
+ 48, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTPLT_HI16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI (x & 65536). */
+ HOWTO (R_SH_PLT_LOW16, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_PLT_LOW16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 16) & 65536). */
+ HOWTO (R_SH_PLT_MEDLOW16, /* type */
+ 16, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_PLT_MEDLOW16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 32) & 65536). */
+ HOWTO (R_SH_PLT_MEDHI16, /* type */
+ 32, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_PLT_MEDHI16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 48) & 65536). */
+ HOWTO (R_SH_PLT_HI16, /* type */
+ 48, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_PLT_HI16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI (x & 65536). */
+ HOWTO (R_SH_GOTOFF_LOW16, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTOFF_LOW16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 16) & 65536). */
+ HOWTO (R_SH_GOTOFF_MEDLOW16, /* type */
+ 16, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTOFF_MEDLOW16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 32) & 65536). */
+ HOWTO (R_SH_GOTOFF_MEDHI16, /* type */
+ 32, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTOFF_MEDHI16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 48) & 65536). */
+ HOWTO (R_SH_GOTOFF_HI16, /* type */
+ 48, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTOFF_HI16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI (x & 65536). */
+ HOWTO (R_SH_GOTPC_LOW16, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTPC_LOW16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 16) & 65536). */
+ HOWTO (R_SH_GOTPC_MEDLOW16, /* type */
+ 16, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTPC_MEDLOW16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 32) & 65536). */
+ HOWTO (R_SH_GOTPC_MEDHI16, /* type */
+ 32, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTPC_MEDHI16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 48) & 65536). */
+ HOWTO (R_SH_GOTPC_HI16, /* type */
+ 48, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTPC_HI16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Used in LD.L, FLD.S et al. */
+ HOWTO (R_SH_GOT10BY4, /* type */
+ 2, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 12, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOT10BY4", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in LD.L, FLD.S et al. */
+ HOWTO (R_SH_GOTPLT10BY4, /* type */
+ 2, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 12, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTPLT10BY4", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in FLD.D, FST.P et al. */
+ HOWTO (R_SH_GOT10BY8, /* type */
+ 3, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 13, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOT10BY8", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in FLD.D, FST.P et al. */
+ HOWTO (R_SH_GOTPLT10BY8, /* type */
+ 3, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 13, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GOTPLT10BY8", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0xffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_COPY64, /* type */
+ 0, /* rightshift */
+ 4, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_COPY64", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ ((bfd_vma) 0) - 1, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_GLOB_DAT64, /* type */
+ 0, /* rightshift */
+ 4, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_GLOB_DAT64", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ ((bfd_vma) 0) - 1, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_JMP_SLOT64, /* type */
+ 0, /* rightshift */
+ 4, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_JMP_SLOT64", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ ((bfd_vma) 0) - 1, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_SH_RELATIVE64, /* type */
+ 0, /* rightshift */
+ 4, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_RELATIVE64", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ ((bfd_vma) 0) - 1, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ EMPTY_HOWTO (197),
+ EMPTY_HOWTO (198),
+ EMPTY_HOWTO (199),
+ EMPTY_HOWTO (200),
+ EMPTY_HOWTO (201),
+ EMPTY_HOWTO (202),
+ EMPTY_HOWTO (203),
+ EMPTY_HOWTO (204),
+ EMPTY_HOWTO (205),
+ EMPTY_HOWTO (206),
+ EMPTY_HOWTO (207),
+ EMPTY_HOWTO (208),
+ EMPTY_HOWTO (209),
+ EMPTY_HOWTO (210),
+ EMPTY_HOWTO (211),
+ EMPTY_HOWTO (212),
+ EMPTY_HOWTO (213),
+ EMPTY_HOWTO (214),
+ EMPTY_HOWTO (215),
+ EMPTY_HOWTO (216),
+ EMPTY_HOWTO (217),
+ EMPTY_HOWTO (218),
+ EMPTY_HOWTO (219),
+ EMPTY_HOWTO (220),
+ EMPTY_HOWTO (221),
+ EMPTY_HOWTO (222),
+ EMPTY_HOWTO (223),
+ EMPTY_HOWTO (224),
+ EMPTY_HOWTO (225),
+ EMPTY_HOWTO (226),
+ EMPTY_HOWTO (227),
+ EMPTY_HOWTO (228),
+ EMPTY_HOWTO (229),
+ EMPTY_HOWTO (230),
+ EMPTY_HOWTO (231),
+ EMPTY_HOWTO (232),
+ EMPTY_HOWTO (233),
+ EMPTY_HOWTO (234),
+ EMPTY_HOWTO (235),
+ EMPTY_HOWTO (236),
+ EMPTY_HOWTO (237),
+ EMPTY_HOWTO (238),
+ EMPTY_HOWTO (239),
+ EMPTY_HOWTO (240),
+ EMPTY_HOWTO (241),
+
+ /* Relocations for SHmedia code. None of these are partial_inplace or
+ use the field being relocated (except R_SH_PT_16). */
+
+ /* The assembler will generate this reloc before a block of SHmedia
+ instructions. A section should be processed as assuming it contains
+ data, unless this reloc is seen. Note that a block of SHcompact
+ instructions are instead preceded by R_SH_CODE.
+ This is currently not implemented, but should be used for SHmedia
+ linker relaxation. */
+ HOWTO (R_SH_SHMEDIA_CODE, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ sh_elf_ignore_reloc, /* special_function */
+ "R_SH_SHMEDIA_CODE", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* The assembler will generate this reloc at a PTA or PTB instruction,
+ and the linker checks the right type of target, or changes a PTA to a
+ PTB, if the original insn was PT. */
+ HOWTO (R_SH_PT_16, /* type */
+ 2, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 18, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_PT_16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Used in unexpanded MOVI. */
+ HOWTO (R_SH_IMMS16, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_IMMS16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in SHORI. */
+ HOWTO (R_SH_IMMU16, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_IMMU16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI (x & 65536). */
+ HOWTO (R_SH_IMM_LOW16, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_IMM_LOW16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x - $) & 65536). */
+ HOWTO (R_SH_IMM_LOW16_PCREL, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_IMM_LOW16_PCREL", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 16) & 65536). */
+ HOWTO (R_SH_IMM_MEDLOW16, /* type */
+ 16, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_IMM_MEDLOW16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI (((x - $) >> 16) & 65536). */
+ HOWTO (R_SH_IMM_MEDLOW16_PCREL, /* type */
+ 16, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_IMM_MEDLOW16_PCREL", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 32) & 65536). */
+ HOWTO (R_SH_IMM_MEDHI16, /* type */
+ 32, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_IMM_MEDHI16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI (((x - $) >> 32) & 65536). */
+ HOWTO (R_SH_IMM_MEDHI16_PCREL, /* type */
+ 32, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_IMM_MEDHI16_PCREL", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI ((x >> 48) & 65536). */
+ HOWTO (R_SH_IMM_HI16, /* type */
+ 48, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_IMM_HI16", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used in MOVI and SHORI (((x - $) >> 48) & 65536). */
+ HOWTO (R_SH_IMM_HI16_PCREL, /* type */
+ 48, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_IMM_HI16_PCREL", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0x3fffc00, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* For the .uaquad pseudo. */
+ HOWTO (R_SH_64, /* type */
+ 0, /* rightshift */
+ 4, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_64", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ ((bfd_vma) 0) - 1, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* For the .uaquad pseudo, (x - $). */
+ HOWTO (R_SH_64_PCREL, /* type */
+ 48, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ TRUE, /* pc_relative */
+ 10, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_SH_64_PCREL", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ ((bfd_vma) 0) - 1, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+#endif
+#undef SH_PARTIAL32
+#undef SH_SRC_MASK32
+#undef SH_ELF_RELOC
diff --git a/bfd/elf32-sh-symbian.c b/bfd/elf32-sh-symbian.c
index 477cf243e708..7ea9207009fe 100644
--- a/bfd/elf32-sh-symbian.c
+++ b/bfd/elf32-sh-symbian.c
@@ -1,5 +1,5 @@
/* Renesas / SuperH specific support for Symbian 32-bit ELF files
- Copyright 2004, 2005
+ Copyright 2004, 2005, 2006
Free Software Foundation, Inc.
Contributed by Red Hat
@@ -26,8 +26,8 @@
#include "elf32-sh.c"
-//#define DEBUG 1
-#define DEBUG 0
+//#define SYMBIAN_DEBUG 1
+#define SYMBIAN_DEBUG 0
#define DIRECTIVE_HEADER "#<SYMEDIT>#\n"
#define DIRECTIVE_IMPORT "IMPORT "
@@ -36,7 +36,7 @@
/* Macro to advance 's' until either it reaches 'e' or the
character pointed to by 's' is equal to 'c'. If 'e' is
- reached and DEBUG is enabled then the error message 'm'
+ reached and SYMBIAN_DEBUG is enabled then the error message 'm'
is displayed. */
#define SKIP_UNTIL(s,e,c,m) \
do \
@@ -45,7 +45,7 @@
++ s; \
if (s >= e) \
{ \
- if (DEBUG) \
+ if (SYMBIAN_DEBUG) \
fprintf (stderr, "Corrupt directive: %s\n", m); \
result = FALSE; \
} \
@@ -63,7 +63,7 @@
++ s; \
if (s >= e) \
{ \
- if (DEBUG) \
+ if (SYMBIAN_DEBUG) \
fprintf (stderr, "Corrupt directive: %s\n", m); \
result = FALSE; \
} \
@@ -74,7 +74,7 @@
/* Macro to advance 's' until either it reaches 'e' or the
character pointed to by 's' is not equal to 'c'. If 'e'
- is reached and DEBUG is enabled then the error message
+ is reached and SYMBIAN_DEBUG is enabled then the error message
'm' is displayed. */
#define SKIP_WHILE(s,e,c,m) \
do \
@@ -83,7 +83,7 @@
++ s; \
if (s >= e) \
{ \
- if (DEBUG) \
+ if (SYMBIAN_DEBUG) \
fprintf (stderr, "Corrupt directive: %s\n", m); \
result = FALSE; \
} \
@@ -114,7 +114,7 @@ sh_symbian_import_as (struct bfd_link_info *info, bfd * abfd,
struct elf_link_hash_entry * new_hash;
symbol_rename * node;
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "IMPORT '%s' AS '%s'\n", current_name, new_name);
for (node = rename_list; node; node = node->next)
@@ -132,14 +132,14 @@ sh_symbian_import_as (struct bfd_link_info *info, bfd * abfd,
if ((node = bfd_malloc (sizeof * node)) == NULL)
{
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "IMPORT AS: No mem for new rename node\n");
return FALSE;
}
if ((node->current_name = bfd_malloc (strlen (current_name) + 1)) == NULL)
{
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "IMPORT AS: No mem for current name field in rename node\n");
free (node);
return FALSE;
@@ -149,7 +149,7 @@ sh_symbian_import_as (struct bfd_link_info *info, bfd * abfd,
if ((node->new_name = bfd_malloc (strlen (new_name) + 1)) == NULL)
{
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "IMPORT AS: No mem for new name field in rename node\n");
free (node->current_name);
free (node);
@@ -175,7 +175,7 @@ sh_symbian_import_as (struct bfd_link_info *info, bfd * abfd,
static bfd_boolean
sh_symbian_import (bfd * abfd ATTRIBUTE_UNUSED, char * name)
{
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "IMPORT '%s'\n", name);
/* XXX: Generate an import somehow ? */
@@ -186,7 +186,7 @@ sh_symbian_import (bfd * abfd ATTRIBUTE_UNUSED, char * name)
static bfd_boolean
sh_symbian_export (bfd * abfd ATTRIBUTE_UNUSED, char * name)
{
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "EXPORT '%s'\n", name);
/* XXX: Generate an export somehow ? */
@@ -225,7 +225,7 @@ sh_symbian_process_embedded_commands (struct bfd_link_info *info, bfd * abfd,
break;
case 'I':
- if (strncmp (s, DIRECTIVE_IMPORT, strlen (DIRECTIVE_IMPORT)))
+ if (! CONST_STRNEQ (s, DIRECTIVE_IMPORT))
result = FALSE;
else
{
@@ -261,12 +261,12 @@ sh_symbian_process_embedded_commands (struct bfd_link_info *info, bfd * abfd,
name_end_char = * new_name_end;
* new_name_end = 0;
- /* Check to see if 'AS '... is present. If se we have an IMPORT AS
- directive, otherwise we have an IMPORT directive. */
- if (strncmp (s, DIRECTIVE_AS, strlen (DIRECTIVE_AS)))
+ /* Check to see if 'AS '... is present. If so we have an
+ IMPORT AS directive, otherwise we have an IMPORT directive. */
+ if (! CONST_STRNEQ (s, DIRECTIVE_AS))
{
/* Skip the new-line at the end of the name. */
- if (DEBUG && name_end_char != '\n')
+ if (SYMBIAN_DEBUG && name_end_char != '\n')
fprintf (stderr, "IMPORT: No newline at end of directive\n");
else
s ++;
@@ -276,7 +276,7 @@ sh_symbian_process_embedded_commands (struct bfd_link_info *info, bfd * abfd,
/* Skip past the NUL character. */
if (* s ++ != 0)
{
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "IMPORT: No NUL at end of directive\n");
}
}
@@ -300,7 +300,7 @@ sh_symbian_process_embedded_commands (struct bfd_link_info *info, bfd * abfd,
SKIP_WHILE (s, e, ' ', "IMPORT AS: Current name just followed by spaces");
/* Skip past the newline character. */
if (* s ++ != '\n')
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "IMPORT AS: No newline at end of directive\n");
/* Terminate the current name after having performed the skips. */
@@ -311,7 +311,7 @@ sh_symbian_process_embedded_commands (struct bfd_link_info *info, bfd * abfd,
/* The next character should be a NUL. */
if (* s != 0)
{
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "IMPORT AS: Junk at end of directive\n");
result = FALSE;
}
@@ -327,7 +327,7 @@ sh_symbian_process_embedded_commands (struct bfd_link_info *info, bfd * abfd,
break;
case 'E':
- if (strncmp (s, DIRECTIVE_EXPORT, strlen (DIRECTIVE_EXPORT)))
+ if (! CONST_STRNEQ (s, DIRECTIVE_EXPORT))
result = FALSE;
else
{
@@ -355,7 +355,7 @@ sh_symbian_process_embedded_commands (struct bfd_link_info *info, bfd * abfd,
/* The next character should be a NUL. */
if (* s != 0)
{
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "EXPORT: Junk at end of directive\n");
result = FALSE;
}
@@ -373,7 +373,7 @@ sh_symbian_process_embedded_commands (struct bfd_link_info *info, bfd * abfd,
if (! result)
{
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "offset into .directive section: %ld\n",
(long) (directive - (char *) contents));
@@ -464,7 +464,7 @@ sh_symbian_relocate_section (bfd * output_bfd,
if (ptr->current_hash == NULL)
{
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "IMPORT AS: current symbol '%s' does not exist\n", ptr->current_name);
continue;
}
@@ -511,7 +511,7 @@ sh_symbian_relocate_section (bfd * output_bfd,
if (new_hash->dynindx == -1)
new_hash->def_regular = 1;
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "Created new symbol %s\n", ptr->new_name);
}
@@ -521,7 +521,7 @@ sh_symbian_relocate_section (bfd * output_bfd,
if (* h == new_hash)
{
ptr->new_symndx = h - sym_hashes + num_local_syms;
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "Converted new hash to index of %ld\n", ptr->new_symndx);
break;
}
@@ -539,7 +539,7 @@ sh_symbian_relocate_section (bfd * output_bfd,
new_sym_hashes = bfd_alloc (input_bfd, num_global_syms * sizeof * sym_hashes);
if (new_sym_hashes == NULL)
{
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "Out of memory extending hash table\n");
continue;
}
@@ -551,7 +551,7 @@ sh_symbian_relocate_section (bfd * output_bfd,
ptr->new_symndx = num_global_syms - 1 + num_local_syms;
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "Extended symbol hash table to insert new symbol as index %ld\n",
ptr->new_symndx);
}
@@ -601,7 +601,7 @@ sh_symbian_relocate_section (bfd * output_bfd,
if (h == ptr->current_hash)
{
BFD_ASSERT (ptr->new_symndx);
- if (DEBUG)
+ if (SYMBIAN_DEBUG)
fprintf (stderr, "convert reloc %lx from using index %ld to using index %ld\n",
(long) rel->r_info, (long) ELF32_R_SYM (rel->r_info), ptr->new_symndx);
rel->r_info = ELF32_R_INFO (ptr->new_symndx, r_type);
diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c
index 118690d9a58f..739d2d7b671a 100644
--- a/bfd/elf32-sh.c
+++ b/bfd/elf32-sh.c
@@ -1,6 +1,6 @@
/* Renesas / SuperH SH specific support for 32-bit ELF
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- 2006 Free Software Foundation, Inc.
+ 2006, 2007 Free Software Foundation, Inc.
Contributed by Ian Lance Taylor, Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,11 +19,12 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
+#include "elf-vxworks.h"
#include "elf/sh.h"
#include "libiberty.h"
#include "../opcodes/sh-opc.h"
@@ -52,1721 +53,49 @@ static bfd_vma tpoff
#define ELF_DYNAMIC_INTERPRETER "/usr/lib/libc.so.1"
+#define MINUS_ONE ((bfd_vma) 0 - 1)
+
+#define SH_PARTIAL32 TRUE
+#define SH_SRC_MASK32 0xffffffff
+#define SH_ELF_RELOC sh_elf_reloc
static reloc_howto_type sh_elf_howto_table[] =
{
- /* No relocation. */
- HOWTO (R_SH_NONE, /* type */
- 0, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 0, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_NONE", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* 32 bit absolute relocation. Setting partial_inplace to TRUE and
- src_mask to a non-zero value is similar to the COFF toolchain. */
- HOWTO (R_SH_DIR32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- sh_elf_reloc, /* special_function */
- "R_SH_DIR32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* 32 bit PC relative relocation. */
- HOWTO (R_SH_REL32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- TRUE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_REL32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* 8 bit PC relative branch divided by 2. */
- HOWTO (R_SH_DIR8WPN, /* type */
- 1, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- TRUE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_DIR8WPN", /* name */
- TRUE, /* partial_inplace */
- 0xff, /* src_mask */
- 0xff, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* 12 bit PC relative branch divided by 2. */
- /* This cannot be partial_inplace because relaxation can't know the
- eventual value of a symbol. */
- HOWTO (R_SH_IND12W, /* type */
- 1, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 12, /* bitsize */
- TRUE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- NULL, /* special_function */
- "R_SH_IND12W", /* name */
- FALSE, /* partial_inplace */
- 0x0, /* src_mask */
- 0xfff, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* 8 bit unsigned PC relative divided by 4. */
- HOWTO (R_SH_DIR8WPL, /* type */
- 2, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- TRUE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_DIR8WPL", /* name */
- TRUE, /* partial_inplace */
- 0xff, /* src_mask */
- 0xff, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* 8 bit unsigned PC relative divided by 2. */
- HOWTO (R_SH_DIR8WPZ, /* type */
- 1, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- TRUE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_DIR8WPZ", /* name */
- TRUE, /* partial_inplace */
- 0xff, /* src_mask */
- 0xff, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* 8 bit GBR relative. FIXME: This only makes sense if we have some
- special symbol for the GBR relative area, and that is not
- implemented. */
- HOWTO (R_SH_DIR8BP, /* type */
- 0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_DIR8BP", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xff, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* 8 bit GBR relative divided by 2. FIXME: This only makes sense if
- we have some special symbol for the GBR relative area, and that
- is not implemented. */
- HOWTO (R_SH_DIR8W, /* type */
- 1, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_DIR8W", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xff, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* 8 bit GBR relative divided by 4. FIXME: This only makes sense if
- we have some special symbol for the GBR relative area, and that
- is not implemented. */
- HOWTO (R_SH_DIR8L, /* type */
- 2, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_DIR8L", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xff, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* 8 bit PC relative divided by 2 - but specified in a very odd way. */
- HOWTO (R_SH_LOOP_START, /* type */
- 1, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_LOOP_START", /* name */
- TRUE, /* partial_inplace */
- 0xff, /* src_mask */
- 0xff, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* 8 bit PC relative divided by 2 - but specified in a very odd way. */
- HOWTO (R_SH_LOOP_END, /* type */
- 1, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_LOOP_END", /* name */
- TRUE, /* partial_inplace */
- 0xff, /* src_mask */
- 0xff, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- EMPTY_HOWTO (12),
- EMPTY_HOWTO (13),
- EMPTY_HOWTO (14),
- EMPTY_HOWTO (15),
- EMPTY_HOWTO (16),
- EMPTY_HOWTO (17),
- EMPTY_HOWTO (18),
- EMPTY_HOWTO (19),
- EMPTY_HOWTO (20),
- EMPTY_HOWTO (21),
-
- /* The remaining relocs are a GNU extension used for relaxing. The
- final pass of the linker never needs to do anything with any of
- these relocs. Any required operations are handled by the
- relaxation code. */
-
- /* GNU extension to record C++ vtable hierarchy */
- HOWTO (R_SH_GNU_VTINHERIT, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 0, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- NULL, /* special_function */
- "R_SH_GNU_VTINHERIT", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* GNU extension to record C++ vtable member usage */
- HOWTO (R_SH_GNU_VTENTRY, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 0, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- _bfd_elf_rel_vtable_reloc_fn, /* special_function */
- "R_SH_GNU_VTENTRY", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* An 8 bit switch table entry. This is generated for an expression
- such as ``.word L1 - L2''. The offset holds the difference
- between the reloc address and L2. */
- HOWTO (R_SH_SWITCH8, /* type */
- 0, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_SWITCH8", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* A 16 bit switch table entry. This is generated for an expression
- such as ``.word L1 - L2''. The offset holds the difference
- between the reloc address and L2. */
- HOWTO (R_SH_SWITCH16, /* type */
- 0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 16, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_SWITCH16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* A 32 bit switch table entry. This is generated for an expression
- such as ``.long L1 - L2''. The offset holds the difference
- between the reloc address and L2. */
- HOWTO (R_SH_SWITCH32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_SWITCH32", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Indicates a .uses pseudo-op. The compiler will generate .uses
- pseudo-ops when it finds a function call which can be relaxed.
- The offset field holds the PC relative offset to the instruction
- which loads the register used in the function call. */
- HOWTO (R_SH_USES, /* type */
- 0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 0, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_USES", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* The assembler will generate this reloc for addresses referred to
- by the register loads associated with USES relocs. The offset
- field holds the number of times the address is referenced in the
- object file. */
- HOWTO (R_SH_COUNT, /* type */
- 0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 0, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_COUNT", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Indicates an alignment statement. The offset field is the power
- of 2 to which subsequent portions of the object file must be
- aligned. */
- HOWTO (R_SH_ALIGN, /* type */
- 0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 0, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_ALIGN", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* The assembler will generate this reloc before a block of
- instructions. A section should be processed as assuming it
- contains data, unless this reloc is seen. */
- HOWTO (R_SH_CODE, /* type */
- 0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 0, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_CODE", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* The assembler will generate this reloc after a block of
- instructions when it sees data that is not instructions. */
- HOWTO (R_SH_DATA, /* type */
- 0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 0, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_DATA", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* The assembler generates this reloc for each label within a block
- of instructions. This permits the linker to avoid swapping
- instructions which are the targets of branches. */
- HOWTO (R_SH_LABEL, /* type */
- 0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 0, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_LABEL", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* The next 12 are only supported via linking in SHC-generated objects. */
- HOWTO (R_SH_DIR16, /* type */
- 0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 16, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_DIR8, /* type */
- 0, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR8", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_DIR8UL, /* type */
- 2, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR8UL", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_DIR8UW, /* type */
- 1, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR8UW", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_DIR8U, /* type */
- 0, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR8U", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_DIR8SW, /* type */
- 1, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR8SW", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_DIR8S, /* type */
- 0, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 8, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR8S", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_DIR4UL, /* type */
- 2, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 4, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR4UL", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x0f, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_DIR4UW, /* type */
- 1, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 4, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR4UW", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x0f, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_DIR4U, /* type */
- 0, /* rightshift */
- 0, /* size (0 = byte, 1 = short, 2 = long) */
- 4, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR4U", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x0f, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_PSHA, /* type */
- 0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 7, /* bitsize */
- FALSE, /* pc_relative */
- 4, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_PSHA", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x0f, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_PSHL, /* type */
- 0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 7, /* bitsize */
- FALSE, /* pc_relative */
- 4, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_PSHL", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x0f, /* dst_mask */
- FALSE), /* pcrel_offset */
+#include "elf32-sh-relocs.h"
+};
-#ifdef INCLUDE_SHMEDIA
- /* Used in SHLLI.L and SHLRI.L. */
- HOWTO (R_SH_DIR5U, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 5, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR5U", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xfc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in SHARI, SHLLI et al. */
- HOWTO (R_SH_DIR6U, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 6, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR6U", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xfc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in BxxI, LDHI.L et al. */
- HOWTO (R_SH_DIR6S, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 6, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR6S", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xfc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in ADDI, ANDI et al. */
- HOWTO (R_SH_DIR10S, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 10, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR10S", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in LD.UW, ST.W et al. */
- HOWTO (R_SH_DIR10SW, /* type */
- 1, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 11, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR10SW", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in LD.L, FLD.S et al. */
- HOWTO (R_SH_DIR10SL, /* type */
- 2, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 12, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR10SL", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in FLD.D, FST.P et al. */
- HOWTO (R_SH_DIR10SQ, /* type */
- 3, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 13, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR10SQ", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
+#define SH_PARTIAL32 FALSE
+#define SH_SRC_MASK32 0
+#define SH_ELF_RELOC bfd_elf_generic_reloc
+static reloc_howto_type sh_vxworks_howto_table[] =
+{
+#include "elf32-sh-relocs.h"
+};
+
+/* Return true if OUTPUT_BFD is a VxWorks object. */
+static bfd_boolean
+vxworks_object_p (bfd *abfd ATTRIBUTE_UNUSED)
+{
+#if !defined INCLUDE_SHMEDIA && !defined SH_TARGET_ALREADY_DEFINED
+ extern const bfd_target bfd_elf32_shlvxworks_vec;
+ extern const bfd_target bfd_elf32_shvxworks_vec;
+
+ return (abfd->xvec == &bfd_elf32_shlvxworks_vec
+ || abfd->xvec == &bfd_elf32_shvxworks_vec);
#else
- EMPTY_HOWTO (45),
- EMPTY_HOWTO (46),
- EMPTY_HOWTO (47),
- EMPTY_HOWTO (48),
- EMPTY_HOWTO (49),
- EMPTY_HOWTO (50),
- EMPTY_HOWTO (51),
+ return FALSE;
#endif
+}
- EMPTY_HOWTO (52),
-
- HOWTO (R_SH_DIR16S, /* type */
- 0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 16, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_DIR16S", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- EMPTY_HOWTO (54),
- EMPTY_HOWTO (55),
- EMPTY_HOWTO (56),
- EMPTY_HOWTO (57),
- EMPTY_HOWTO (58),
- EMPTY_HOWTO (59),
- EMPTY_HOWTO (60),
- EMPTY_HOWTO (61),
- EMPTY_HOWTO (62),
- EMPTY_HOWTO (63),
- EMPTY_HOWTO (64),
- EMPTY_HOWTO (65),
- EMPTY_HOWTO (66),
- EMPTY_HOWTO (67),
- EMPTY_HOWTO (68),
- EMPTY_HOWTO (69),
- EMPTY_HOWTO (70),
- EMPTY_HOWTO (71),
- EMPTY_HOWTO (72),
- EMPTY_HOWTO (73),
- EMPTY_HOWTO (74),
- EMPTY_HOWTO (75),
- EMPTY_HOWTO (76),
- EMPTY_HOWTO (77),
- EMPTY_HOWTO (78),
- EMPTY_HOWTO (79),
- EMPTY_HOWTO (80),
- EMPTY_HOWTO (81),
- EMPTY_HOWTO (82),
- EMPTY_HOWTO (83),
- EMPTY_HOWTO (84),
- EMPTY_HOWTO (85),
- EMPTY_HOWTO (86),
- EMPTY_HOWTO (87),
- EMPTY_HOWTO (88),
- EMPTY_HOWTO (89),
- EMPTY_HOWTO (90),
- EMPTY_HOWTO (91),
- EMPTY_HOWTO (92),
- EMPTY_HOWTO (93),
- EMPTY_HOWTO (94),
- EMPTY_HOWTO (95),
- EMPTY_HOWTO (96),
- EMPTY_HOWTO (97),
- EMPTY_HOWTO (98),
- EMPTY_HOWTO (99),
- EMPTY_HOWTO (100),
- EMPTY_HOWTO (101),
- EMPTY_HOWTO (102),
- EMPTY_HOWTO (103),
- EMPTY_HOWTO (104),
- EMPTY_HOWTO (105),
- EMPTY_HOWTO (106),
- EMPTY_HOWTO (107),
- EMPTY_HOWTO (108),
- EMPTY_HOWTO (109),
- EMPTY_HOWTO (110),
- EMPTY_HOWTO (111),
- EMPTY_HOWTO (112),
- EMPTY_HOWTO (113),
- EMPTY_HOWTO (114),
- EMPTY_HOWTO (115),
- EMPTY_HOWTO (116),
- EMPTY_HOWTO (117),
- EMPTY_HOWTO (118),
- EMPTY_HOWTO (119),
- EMPTY_HOWTO (120),
- EMPTY_HOWTO (121),
- EMPTY_HOWTO (122),
- EMPTY_HOWTO (123),
- EMPTY_HOWTO (124),
- EMPTY_HOWTO (125),
- EMPTY_HOWTO (126),
- EMPTY_HOWTO (127),
- EMPTY_HOWTO (128),
- EMPTY_HOWTO (129),
- EMPTY_HOWTO (130),
- EMPTY_HOWTO (131),
- EMPTY_HOWTO (132),
- EMPTY_HOWTO (133),
- EMPTY_HOWTO (134),
- EMPTY_HOWTO (135),
- EMPTY_HOWTO (136),
- EMPTY_HOWTO (137),
- EMPTY_HOWTO (138),
- EMPTY_HOWTO (139),
- EMPTY_HOWTO (140),
- EMPTY_HOWTO (141),
- EMPTY_HOWTO (142),
- EMPTY_HOWTO (143),
-
- HOWTO (R_SH_TLS_GD_32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_TLS_GD_32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_TLS_LD_32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_TLS_LD_32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_TLS_LDO_32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_TLS_LDO_32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_TLS_IE_32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_TLS_IE_32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_TLS_LE_32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_TLS_LE_32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_TLS_DTPMOD32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_TLS_DTPMOD32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_TLS_DTPOFF32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_TLS_DTPOFF32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_TLS_TPOFF32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_TLS_TPOFF32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- EMPTY_HOWTO (152),
- EMPTY_HOWTO (153),
- EMPTY_HOWTO (154),
- EMPTY_HOWTO (155),
- EMPTY_HOWTO (156),
- EMPTY_HOWTO (157),
- EMPTY_HOWTO (158),
- EMPTY_HOWTO (159),
-
- HOWTO (R_SH_GOT32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_GOT32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_PLT32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- TRUE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_PLT32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- HOWTO (R_SH_COPY, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_COPY", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_GLOB_DAT, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_GLOB_DAT", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_JMP_SLOT, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_JMP_SLOT", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_RELATIVE, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_RELATIVE", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_GOTOFF, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_GOTOFF", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_GOTPC, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- TRUE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_GOTPC", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- HOWTO (R_SH_GOTPLT32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* */
- "R_SH_GOTPLT32", /* name */
- FALSE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
-
-#ifdef INCLUDE_SHMEDIA
- /* Used in MOVI and SHORI (x & 65536). */
- HOWTO (R_SH_GOT_LOW16, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOT_LOW16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 16) & 65536). */
- HOWTO (R_SH_GOT_MEDLOW16, /* type */
- 16, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOT_MEDLOW16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 32) & 65536). */
- HOWTO (R_SH_GOT_MEDHI16, /* type */
- 32, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOT_MEDHI16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 48) & 65536). */
- HOWTO (R_SH_GOT_HI16, /* type */
- 48, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOT_HI16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI (x & 65536). */
- HOWTO (R_SH_GOTPLT_LOW16, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTPLT_LOW16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 16) & 65536). */
- HOWTO (R_SH_GOTPLT_MEDLOW16, /* type */
- 16, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTPLT_MEDLOW16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 32) & 65536). */
- HOWTO (R_SH_GOTPLT_MEDHI16, /* type */
- 32, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTPLT_MEDHI16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 48) & 65536). */
- HOWTO (R_SH_GOTPLT_HI16, /* type */
- 48, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTPLT_HI16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI (x & 65536). */
- HOWTO (R_SH_PLT_LOW16, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_PLT_LOW16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 16) & 65536). */
- HOWTO (R_SH_PLT_MEDLOW16, /* type */
- 16, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_PLT_MEDLOW16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 32) & 65536). */
- HOWTO (R_SH_PLT_MEDHI16, /* type */
- 32, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_PLT_MEDHI16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 48) & 65536). */
- HOWTO (R_SH_PLT_HI16, /* type */
- 48, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_PLT_HI16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI (x & 65536). */
- HOWTO (R_SH_GOTOFF_LOW16, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTOFF_LOW16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 16) & 65536). */
- HOWTO (R_SH_GOTOFF_MEDLOW16, /* type */
- 16, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTOFF_MEDLOW16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 32) & 65536). */
- HOWTO (R_SH_GOTOFF_MEDHI16, /* type */
- 32, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTOFF_MEDHI16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 48) & 65536). */
- HOWTO (R_SH_GOTOFF_HI16, /* type */
- 48, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTOFF_HI16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI (x & 65536). */
- HOWTO (R_SH_GOTPC_LOW16, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTPC_LOW16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 16) & 65536). */
- HOWTO (R_SH_GOTPC_MEDLOW16, /* type */
- 16, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTPC_MEDLOW16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 32) & 65536). */
- HOWTO (R_SH_GOTPC_MEDHI16, /* type */
- 32, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTPC_MEDHI16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 48) & 65536). */
- HOWTO (R_SH_GOTPC_HI16, /* type */
- 48, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTPC_HI16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Used in LD.L, FLD.S et al. */
- HOWTO (R_SH_GOT10BY4, /* type */
- 2, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 12, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOT10BY4", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in LD.L, FLD.S et al. */
- HOWTO (R_SH_GOTPLT10BY4, /* type */
- 2, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 12, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTPLT10BY4", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in FLD.D, FST.P et al. */
- HOWTO (R_SH_GOT10BY8, /* type */
- 3, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 13, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOT10BY8", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in FLD.D, FST.P et al. */
- HOWTO (R_SH_GOTPLT10BY8, /* type */
- 3, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 13, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GOTPLT10BY8", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0xffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_COPY64, /* type */
- 0, /* rightshift */
- 4, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_COPY64", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- ((bfd_vma) 0) - 1, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_GLOB_DAT64, /* type */
- 0, /* rightshift */
- 4, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_GLOB_DAT64", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- ((bfd_vma) 0) - 1, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_JMP_SLOT64, /* type */
- 0, /* rightshift */
- 4, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_JMP_SLOT64", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- ((bfd_vma) 0) - 1, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- HOWTO (R_SH_RELATIVE64, /* type */
- 0, /* rightshift */
- 4, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_RELATIVE64", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- ((bfd_vma) 0) - 1, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- EMPTY_HOWTO (197),
- EMPTY_HOWTO (198),
- EMPTY_HOWTO (199),
- EMPTY_HOWTO (200),
- EMPTY_HOWTO (201),
- EMPTY_HOWTO (202),
- EMPTY_HOWTO (203),
- EMPTY_HOWTO (204),
- EMPTY_HOWTO (205),
- EMPTY_HOWTO (206),
- EMPTY_HOWTO (207),
- EMPTY_HOWTO (208),
- EMPTY_HOWTO (209),
- EMPTY_HOWTO (210),
- EMPTY_HOWTO (211),
- EMPTY_HOWTO (212),
- EMPTY_HOWTO (213),
- EMPTY_HOWTO (214),
- EMPTY_HOWTO (215),
- EMPTY_HOWTO (216),
- EMPTY_HOWTO (217),
- EMPTY_HOWTO (218),
- EMPTY_HOWTO (219),
- EMPTY_HOWTO (220),
- EMPTY_HOWTO (221),
- EMPTY_HOWTO (222),
- EMPTY_HOWTO (223),
- EMPTY_HOWTO (224),
- EMPTY_HOWTO (225),
- EMPTY_HOWTO (226),
- EMPTY_HOWTO (227),
- EMPTY_HOWTO (228),
- EMPTY_HOWTO (229),
- EMPTY_HOWTO (230),
- EMPTY_HOWTO (231),
- EMPTY_HOWTO (232),
- EMPTY_HOWTO (233),
- EMPTY_HOWTO (234),
- EMPTY_HOWTO (235),
- EMPTY_HOWTO (236),
- EMPTY_HOWTO (237),
- EMPTY_HOWTO (238),
- EMPTY_HOWTO (239),
- EMPTY_HOWTO (240),
- EMPTY_HOWTO (241),
-
- /* Relocations for SHmedia code. None of these are partial_inplace or
- use the field being relocated (except R_SH_PT_16). */
-
- /* The assembler will generate this reloc before a block of SHmedia
- instructions. A section should be processed as assuming it contains
- data, unless this reloc is seen. Note that a block of SHcompact
- instructions are instead preceded by R_SH_CODE.
- This is currently not implemented, but should be used for SHmedia
- linker relaxation. */
- HOWTO (R_SH_SHMEDIA_CODE, /* type */
- 0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
- 0, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- sh_elf_ignore_reloc, /* special_function */
- "R_SH_SHMEDIA_CODE", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* The assembler will generate this reloc at a PTA or PTB instruction,
- and the linker checks the right type of target, or changes a PTA to a
- PTB, if the original insn was PT. */
- HOWTO (R_SH_PT_16, /* type */
- 2, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 18, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_PT_16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Used in unexpanded MOVI. */
- HOWTO (R_SH_IMMS16, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 16, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_IMMS16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in SHORI. */
- HOWTO (R_SH_IMMU16, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 16, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_unsigned, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_IMMU16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI (x & 65536). */
- HOWTO (R_SH_IMM_LOW16, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_IMM_LOW16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x - $) & 65536). */
- HOWTO (R_SH_IMM_LOW16_PCREL, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_IMM_LOW16_PCREL", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 16) & 65536). */
- HOWTO (R_SH_IMM_MEDLOW16, /* type */
- 16, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_IMM_MEDLOW16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI (((x - $) >> 16) & 65536). */
- HOWTO (R_SH_IMM_MEDLOW16_PCREL, /* type */
- 16, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_IMM_MEDLOW16_PCREL", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 32) & 65536). */
- HOWTO (R_SH_IMM_MEDHI16, /* type */
- 32, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_IMM_MEDHI16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI (((x - $) >> 32) & 65536). */
- HOWTO (R_SH_IMM_MEDHI16_PCREL, /* type */
- 32, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_IMM_MEDHI16_PCREL", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI ((x >> 48) & 65536). */
- HOWTO (R_SH_IMM_HI16, /* type */
- 48, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_IMM_HI16", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* Used in MOVI and SHORI (((x - $) >> 48) & 65536). */
- HOWTO (R_SH_IMM_HI16_PCREL, /* type */
- 48, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_IMM_HI16_PCREL", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- 0x3fffc00, /* dst_mask */
- TRUE), /* pcrel_offset */
-
- /* For the .uaquad pseudo. */
- HOWTO (R_SH_64, /* type */
- 0, /* rightshift */
- 4, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_64", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- ((bfd_vma) 0) - 1, /* dst_mask */
- FALSE), /* pcrel_offset */
-
- /* For the .uaquad pseudo, (x - $). */
- HOWTO (R_SH_64_PCREL, /* type */
- 48, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 64, /* bitsize */
- TRUE, /* pc_relative */
- 10, /* bitpos */
- complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
- "R_SH_64_PCREL", /* name */
- FALSE, /* partial_inplace */
- 0, /* src_mask */
- ((bfd_vma) 0) - 1, /* dst_mask */
- TRUE), /* pcrel_offset */
+/* Return the howto table for ABFD. */
-#endif
-};
+static reloc_howto_type *
+get_howto_table (bfd *abfd)
+{
+ if (vxworks_object_p (abfd))
+ return sh_vxworks_howto_table;
+ return sh_elf_howto_table;
+}
static bfd_reloc_status_type
sh_elf_reloc_loop (int r_type ATTRIBUTE_UNUSED, bfd *input_bfd,
@@ -2057,18 +386,46 @@ static const struct elf_reloc_map sh_reloc_map[] =
};
/* Given a BFD reloc code, return the howto structure for the
- corresponding SH ELf reloc. */
+ corresponding SH ELF reloc. */
static reloc_howto_type *
-sh_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
- bfd_reloc_code_real_type code)
+sh_elf_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
{
unsigned int i;
for (i = 0; i < sizeof (sh_reloc_map) / sizeof (struct elf_reloc_map); i++)
{
if (sh_reloc_map[i].bfd_reloc_val == code)
- return &sh_elf_howto_table[(int) sh_reloc_map[i].elf_reloc_val];
+ return get_howto_table (abfd) + (int) sh_reloc_map[i].elf_reloc_val;
+ }
+
+ return NULL;
+}
+
+static reloc_howto_type *
+sh_elf_reloc_name_lookup (bfd *abfd, const char *r_name)
+{
+ unsigned int i;
+
+ if (vxworks_object_p (abfd))
+ {
+ for (i = 0;
+ i < (sizeof (sh_vxworks_howto_table)
+ / sizeof (sh_vxworks_howto_table[0]));
+ i++)
+ if (sh_vxworks_howto_table[i].name != NULL
+ && strcasecmp (sh_vxworks_howto_table[i].name, r_name) == 0)
+ return &sh_vxworks_howto_table[i];
+ }
+ else
+ {
+ for (i = 0;
+ i < (sizeof (sh_elf_howto_table)
+ / sizeof (sh_elf_howto_table[0]));
+ i++)
+ if (sh_elf_howto_table[i].name != NULL
+ && strcasecmp (sh_elf_howto_table[i].name, r_name) == 0)
+ return &sh_elf_howto_table[i];
}
return NULL;
@@ -2077,8 +434,7 @@ sh_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
/* Given an ELF reloc, fill in the howto field of a relent. */
static void
-sh_elf_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr,
- Elf_Internal_Rela *dst)
+sh_elf_info_to_howto (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)
{
unsigned int r;
@@ -2091,7 +447,7 @@ sh_elf_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr,
BFD_ASSERT (r < R_SH_FIRST_INVALID_RELOC_4 || r > R_SH_LAST_INVALID_RELOC_4);
BFD_ASSERT (r < R_SH_FIRST_INVALID_RELOC_5 || r > R_SH_LAST_INVALID_RELOC_5);
- cache_ptr->howto = &sh_elf_howto_table[r];
+ cache_ptr->howto = get_howto_table (abfd) + r;
}
/* This function handles relaxing for SH ELF. See the corresponding
@@ -2276,7 +632,10 @@ sh_elf_relax_section (bfd *abfd, asection *sec,
+ h->root.u.def.section->output_offset);
}
- symval += bfd_get_32 (abfd, contents + paddr);
+ if (get_howto_table (abfd)[R_SH_DIR32].partial_inplace)
+ symval += bfd_get_32 (abfd, contents + paddr);
+ else
+ symval += irelfn->r_addend;
/* See if this function call can be shortened. */
foff = (symval
@@ -2284,7 +643,11 @@ sh_elf_relax_section (bfd *abfd, asection *sec,
+ sec->output_section->vma
+ sec->output_offset
+ 4));
- if (foff < -0x1000 || foff >= 0x1000)
+ /* A branch to an address beyond ours might be increased by an
+ .align that doesn't move when bytes behind us are deleted.
+ So, we add some slop in this calculation to allow for
+ that. */
+ if (foff < -0x1000 || foff >= 0x1000 - 8)
{
/* After all that work, we can't shorten this function call. */
continue;
@@ -2322,6 +685,12 @@ sh_elf_relax_section (bfd *abfd, asection *sec,
irel->r_addend = -4;
+ /* When we calculated the symbol "value" we had an offset in the
+ DIR32's word in memory (we read and add it above). However,
+ the jsr we create does NOT have this offset encoded, so we
+ have to add it to the addend to preserve it. */
+ irel->r_addend += bfd_get_32 (abfd, contents + paddr);
+
/* See if there is another R_SH_USES reloc referring to the same
register load. */
for (irelscan = internal_relocs; irelscan < irelend; irelscan++)
@@ -2591,10 +960,19 @@ sh_elf_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr,
{
bfd_vma val;
- val = bfd_get_32 (abfd, contents + nraddr);
- val += isym->st_value;
- if (val > addr && val < toaddr)
- bfd_put_32 (abfd, val - count, contents + nraddr);
+ if (get_howto_table (abfd)[R_SH_DIR32].partial_inplace)
+ {
+ val = bfd_get_32 (abfd, contents + nraddr);
+ val += isym->st_value;
+ if (val > addr && val < toaddr)
+ bfd_put_32 (abfd, val - count, contents + nraddr);
+ }
+ else
+ {
+ val = isym->st_value + irel->r_addend;
+ if (val > addr && val < toaddr)
+ irel->r_addend -= count;
+ }
}
}
start = stop = addr;
@@ -3144,15 +1522,50 @@ sh_elf_swap_insns (bfd *abfd, asection *sec, void *relocs,
}
#endif /* defined SH64_ELF */
+/* Describes one of the various PLT styles. */
+
+struct elf_sh_plt_info
+{
+ /* The template for the first PLT entry, or NULL if there is no special
+ first entry. */
+ const bfd_byte *plt0_entry;
+
+ /* The size of PLT0_ENTRY in bytes, or 0 if PLT0_ENTRY is NULL. */
+ bfd_vma plt0_entry_size;
+
+ /* Index I is the offset into PLT0_ENTRY of a pointer to
+ _GLOBAL_OFFSET_TABLE_ + I * 4. The value is MINUS_ONE
+ if there is no such pointer. */
+ bfd_vma plt0_got_fields[3];
+
+ /* The template for a symbol's PLT entry. */
+ const bfd_byte *symbol_entry;
+
+ /* The size of SYMBOL_ENTRY in bytes. */
+ bfd_vma symbol_entry_size;
+
+ /* Byte offsets of fields in SYMBOL_ENTRY. Not all fields are used
+ on all targets. The comments by each member indicate the value
+ that the field must hold. */
+ struct {
+ bfd_vma got_entry; /* the address of the symbol's .got.plt entry */
+ bfd_vma plt; /* .plt (or a branch to .plt on VxWorks) */
+ bfd_vma reloc_offset; /* the offset of the symbol's JMP_SLOT reloc */
+ } symbol_fields;
+
+ /* The offset of the resolver stub from the start of SYMBOL_ENTRY. */
+ bfd_vma symbol_resolve_offset;
+};
+
#ifdef INCLUDE_SHMEDIA
/* The size in bytes of an entry in the procedure linkage table. */
-#define PLT_ENTRY_SIZE 64
+#define ELF_PLT_ENTRY_SIZE 64
/* First entry in an absolute procedure linkage table look like this. */
-static const bfd_byte elf_sh_plt0_entry_be[PLT_ENTRY_SIZE] =
+static const bfd_byte elf_sh_plt0_entry_be[ELF_PLT_ENTRY_SIZE] =
{
0xcc, 0x00, 0x01, 0x10, /* movi .got.plt >> 16, r17 */
0xc8, 0x00, 0x01, 0x10, /* shori .got.plt & 65535, r17 */
@@ -3172,7 +1585,7 @@ static const bfd_byte elf_sh_plt0_entry_be[PLT_ENTRY_SIZE] =
0x6f, 0xf0, 0xff, 0xf0, /* nop */
};
-static const bfd_byte elf_sh_plt0_entry_le[PLT_ENTRY_SIZE] =
+static const bfd_byte elf_sh_plt0_entry_le[ELF_PLT_ENTRY_SIZE] =
{
0x10, 0x01, 0x00, 0xcc, /* movi .got.plt >> 16, r17 */
0x10, 0x01, 0x00, 0xc8, /* shori .got.plt & 65535, r17 */
@@ -3195,7 +1608,7 @@ static const bfd_byte elf_sh_plt0_entry_le[PLT_ENTRY_SIZE] =
/* Sebsequent entries in an absolute procedure linkage table look like
this. */
-static const bfd_byte elf_sh_plt_entry_be[PLT_ENTRY_SIZE] =
+static const bfd_byte elf_sh_plt_entry_be[ELF_PLT_ENTRY_SIZE] =
{
0xcc, 0x00, 0x01, 0x90, /* movi nameN-in-GOT >> 16, r25 */
0xc8, 0x00, 0x01, 0x90, /* shori nameN-in-GOT & 65535, r25 */
@@ -3215,7 +1628,7 @@ static const bfd_byte elf_sh_plt_entry_be[PLT_ENTRY_SIZE] =
0x6f, 0xf0, 0xff, 0xf0, /* nop */
};
-static const bfd_byte elf_sh_plt_entry_le[PLT_ENTRY_SIZE] =
+static const bfd_byte elf_sh_plt_entry_le[ELF_PLT_ENTRY_SIZE] =
{
0x90, 0x01, 0x00, 0xcc, /* movi nameN-in-GOT >> 16, r25 */
0x90, 0x01, 0x00, 0xc8, /* shori nameN-in-GOT & 65535, r25 */
@@ -3237,7 +1650,7 @@ static const bfd_byte elf_sh_plt_entry_le[PLT_ENTRY_SIZE] =
/* Entries in a PIC procedure linkage table look like this. */
-static const bfd_byte elf_sh_pic_plt_entry_be[PLT_ENTRY_SIZE] =
+static const bfd_byte elf_sh_pic_plt_entry_be[ELF_PLT_ENTRY_SIZE] =
{
0xcc, 0x00, 0x01, 0x90, /* movi nameN@GOT >> 16, r25 */
0xc8, 0x00, 0x01, 0x90, /* shori nameN@GOT & 65535, r25 */
@@ -3257,7 +1670,7 @@ static const bfd_byte elf_sh_pic_plt_entry_be[PLT_ENTRY_SIZE] =
0x44, 0x01, 0xff, 0xf0, /* blink tr0, r63 */
};
-static const bfd_byte elf_sh_pic_plt_entry_le[PLT_ENTRY_SIZE] =
+static const bfd_byte elf_sh_pic_plt_entry_le[ELF_PLT_ENTRY_SIZE] =
{
0x90, 0x01, 0x00, 0xcc, /* movi nameN@GOT >> 16, r25 */
0x90, 0x01, 0x00, 0xc8, /* shori nameN@GOT & 65535, r25 */
@@ -3277,31 +1690,67 @@ static const bfd_byte elf_sh_pic_plt_entry_le[PLT_ENTRY_SIZE] =
0xf0, 0xff, 0x01, 0x44, /* blink tr0, r63 */
};
-static const bfd_byte *elf_sh_plt0_entry;
-static const bfd_byte *elf_sh_plt_entry;
-static const bfd_byte *elf_sh_pic_plt_entry;
-
-/* Return size of a PLT entry. */
-#define elf_sh_sizeof_plt(info) PLT_ENTRY_SIZE
-
-/* Return offset of the PLT0 address in an absolute PLT entry. */
-#define elf_sh_plt_plt0_offset(info) 32
+static const struct elf_sh_plt_info elf_sh_plts[2][2] = {
+ {
+ {
+ /* Big-endian non-PIC. */
+ elf_sh_plt0_entry_be,
+ ELF_PLT_ENTRY_SIZE,
+ { 0, MINUS_ONE, MINUS_ONE },
+ elf_sh_plt_entry_be,
+ ELF_PLT_ENTRY_SIZE,
+ { 0, 32, 48 },
+ 33 /* includes ISA encoding */
+ },
+ {
+ /* Little-endian non-PIC. */
+ elf_sh_plt0_entry_le,
+ ELF_PLT_ENTRY_SIZE,
+ { 0, MINUS_ONE, MINUS_ONE },
+ elf_sh_plt_entry_le,
+ ELF_PLT_ENTRY_SIZE,
+ { 0, 32, 48 },
+ 33 /* includes ISA encoding */
+ },
+ },
+ {
+ {
+ /* Big-endian PIC. */
+ elf_sh_plt0_entry_be,
+ ELF_PLT_ENTRY_SIZE,
+ { MINUS_ONE, MINUS_ONE, MINUS_ONE },
+ elf_sh_pic_plt_entry_be,
+ ELF_PLT_ENTRY_SIZE,
+ { 0, MINUS_ONE, 52 },
+ 33 /* includes ISA encoding */
+ },
+ {
+ /* Little-endian PIC. */
+ elf_sh_plt0_entry_le,
+ ELF_PLT_ENTRY_SIZE,
+ { MINUS_ONE, MINUS_ONE, MINUS_ONE },
+ elf_sh_pic_plt_entry_le,
+ ELF_PLT_ENTRY_SIZE,
+ { 0, MINUS_ONE, 52 },
+ 33 /* includes ISA encoding */
+ },
+ }
+};
/* Return offset of the linker in PLT0 entry. */
#define elf_sh_plt0_gotplt_offset(info) 0
-/* Return offset of the trampoline in PLT entry */
-#define elf_sh_plt_temp_offset(info) 33 /* Add one because it's SHmedia. */
+/* Install a 32-bit PLT field starting at ADDR, which occurs in OUTPUT_BFD.
+ VALUE is the field's value and CODE_P is true if VALUE refers to code,
+ not data.
-/* Return offset of the symbol in PLT entry. */
-#define elf_sh_plt_symbol_offset(info) 0
-
-/* Return offset of the relocation in PLT entry. */
-#define elf_sh_plt_reloc_offset(info) (info->shared ? 52 : 44)
+ On SH64, each 32-bit field is loaded by a movi/shori pair. */
inline static void
-movi_shori_putval (bfd *output_bfd, unsigned long value, bfd_byte *addr)
+install_plt_field (bfd *output_bfd, bfd_boolean code_p,
+ unsigned long value, bfd_byte *addr)
{
+ value |= code_p;
bfd_put_32 (output_bfd,
bfd_get_32 (output_bfd, addr)
| ((value >> 6) & 0x3fffc00),
@@ -3312,10 +1761,18 @@ movi_shori_putval (bfd *output_bfd, unsigned long value, bfd_byte *addr)
addr + 4);
}
+/* Return the type of PLT associated with ABFD. PIC_P is true if
+ the object is position-independent. */
+
+static const struct elf_sh_plt_info *
+get_plt_info (bfd *abfd ATTRIBUTE_UNUSED, bfd_boolean pic_p)
+{
+ return &elf_sh_plts[pic_p][!bfd_big_endian (abfd)];
+}
#else
/* The size in bytes of an entry in the procedure linkage table. */
-#define PLT_ENTRY_SIZE 28
+#define ELF_PLT_ENTRY_SIZE 28
/* First entry in an absolute procedure linkage table look like this. */
@@ -3327,7 +1784,7 @@ movi_shori_putval (bfd *output_bfd, unsigned long value, bfd_byte *addr)
ignores the type. Loaders can easily detect this difference however,
since the type will always be 0 or 8, and the GOT ids will always be
greater than or equal to 12. */
-static const bfd_byte elf_sh_plt0_entry_be[PLT_ENTRY_SIZE] =
+static const bfd_byte elf_sh_plt0_entry_be[ELF_PLT_ENTRY_SIZE] =
{
0xd0, 0x05, /* mov.l 2f,r0 */
0x60, 0x02, /* mov.l @r0,r0 */
@@ -3343,7 +1800,7 @@ static const bfd_byte elf_sh_plt0_entry_be[PLT_ENTRY_SIZE] =
0, 0, 0, 0, /* 2: replaced with address of .got.plt + 4. */
};
-static const bfd_byte elf_sh_plt0_entry_le[PLT_ENTRY_SIZE] =
+static const bfd_byte elf_sh_plt0_entry_le[ELF_PLT_ENTRY_SIZE] =
{
0x05, 0xd0, /* mov.l 2f,r0 */
0x02, 0x60, /* mov.l @r0,r0 */
@@ -3362,10 +1819,10 @@ static const bfd_byte elf_sh_plt0_entry_le[PLT_ENTRY_SIZE] =
/* Sebsequent entries in an absolute procedure linkage table look like
this. */
-static const bfd_byte elf_sh_plt_entry_be[PLT_ENTRY_SIZE] =
+static const bfd_byte elf_sh_plt_entry_be[ELF_PLT_ENTRY_SIZE] =
{
0xd0, 0x04, /* mov.l 1f,r0 */
- 0x60, 0x02, /* mov.l @r0,r0 */
+ 0x60, 0x02, /* mov.l @(r0,r12),r0 */
0xd1, 0x02, /* mov.l 0f,r1 */
0x40, 0x2b, /* jmp @r0 */
0x60, 0x13, /* mov r1,r0 */
@@ -3377,7 +1834,7 @@ static const bfd_byte elf_sh_plt_entry_be[PLT_ENTRY_SIZE] =
0, 0, 0, 0, /* 2: replaced with offset into relocation table. */
};
-static const bfd_byte elf_sh_plt_entry_le[PLT_ENTRY_SIZE] =
+static const bfd_byte elf_sh_plt_entry_le[ELF_PLT_ENTRY_SIZE] =
{
0x04, 0xd0, /* mov.l 1f,r0 */
0x02, 0x60, /* mov.l @r0,r0 */
@@ -3394,7 +1851,7 @@ static const bfd_byte elf_sh_plt_entry_le[PLT_ENTRY_SIZE] =
/* Entries in a PIC procedure linkage table look like this. */
-static const bfd_byte elf_sh_pic_plt_entry_be[PLT_ENTRY_SIZE] =
+static const bfd_byte elf_sh_pic_plt_entry_be[ELF_PLT_ENTRY_SIZE] =
{
0xd0, 0x04, /* mov.l 1f,r0 */
0x00, 0xce, /* mov.l @(r0,r12),r0 */
@@ -3410,7 +1867,7 @@ static const bfd_byte elf_sh_pic_plt_entry_be[PLT_ENTRY_SIZE] =
0, 0, 0, 0 /* 2: replaced with offset into relocation table. */
};
-static const bfd_byte elf_sh_pic_plt_entry_le[PLT_ENTRY_SIZE] =
+static const bfd_byte elf_sh_pic_plt_entry_le[ELF_PLT_ENTRY_SIZE] =
{
0x04, 0xd0, /* mov.l 1f,r0 */
0xce, 0x00, /* mov.l @(r0,r12),r0 */
@@ -3426,32 +1883,216 @@ static const bfd_byte elf_sh_pic_plt_entry_le[PLT_ENTRY_SIZE] =
0, 0, 0, 0 /* 2: replaced with offset into relocation table. */
};
-static const bfd_byte *elf_sh_plt0_entry;
-static const bfd_byte *elf_sh_plt_entry;
-static const bfd_byte *elf_sh_pic_plt_entry;
+static const struct elf_sh_plt_info elf_sh_plts[2][2] = {
+ {
+ {
+ /* Big-endian non-PIC. */
+ elf_sh_plt0_entry_be,
+ ELF_PLT_ENTRY_SIZE,
+ { MINUS_ONE, 24, 20 },
+ elf_sh_plt_entry_be,
+ ELF_PLT_ENTRY_SIZE,
+ { 20, 16, 24 },
+ 8
+ },
+ {
+ /* Little-endian non-PIC. */
+ elf_sh_plt0_entry_le,
+ ELF_PLT_ENTRY_SIZE,
+ { MINUS_ONE, 24, 20 },
+ elf_sh_plt_entry_le,
+ ELF_PLT_ENTRY_SIZE,
+ { 20, 16, 24 },
+ 8
+ },
+ },
+ {
+ {
+ /* Big-endian PIC. */
+ elf_sh_plt0_entry_be,
+ ELF_PLT_ENTRY_SIZE,
+ { MINUS_ONE, MINUS_ONE, MINUS_ONE },
+ elf_sh_pic_plt_entry_be,
+ ELF_PLT_ENTRY_SIZE,
+ { 20, MINUS_ONE, 24 },
+ 8
+ },
+ {
+ /* Little-endian PIC. */
+ elf_sh_plt0_entry_le,
+ ELF_PLT_ENTRY_SIZE,
+ { MINUS_ONE, MINUS_ONE, MINUS_ONE },
+ elf_sh_pic_plt_entry_le,
+ ELF_PLT_ENTRY_SIZE,
+ { 20, MINUS_ONE, 24 },
+ 8
+ },
+ }
+};
-/* Return size of a PLT entry. */
-#define elf_sh_sizeof_plt(info) PLT_ENTRY_SIZE
+#define VXWORKS_PLT_HEADER_SIZE 12
+#define VXWORKS_PLT_ENTRY_SIZE 24
-/* Return offset of the PLT0 address in an absolute PLT entry. */
-#define elf_sh_plt_plt0_offset(info) 16
+static const bfd_byte vxworks_sh_plt0_entry_be[VXWORKS_PLT_HEADER_SIZE] =
+{
+ 0xd1, 0x01, /* mov.l @(8,pc),r1 */
+ 0x61, 0x12, /* mov.l @r1,r1 */
+ 0x41, 0x2b, /* jmp @r1 */
+ 0x00, 0x09, /* nop */
+ 0, 0, 0, 0 /* 0: replaced with _GLOBAL_OFFSET_TABLE+8. */
+};
-/* Return offset of the linker in PLT0 entry. */
-#define elf_sh_plt0_linker_offset(info) 20
+static const bfd_byte vxworks_sh_plt0_entry_le[VXWORKS_PLT_HEADER_SIZE] =
+{
+ 0x01, 0xd1, /* mov.l @(8,pc),r1 */
+ 0x12, 0x61, /* mov.l @r1,r1 */
+ 0x2b, 0x41, /* jmp @r1 */
+ 0x09, 0x00, /* nop */
+ 0, 0, 0, 0 /* 0: replaced with _GLOBAL_OFFSET_TABLE+8. */
+};
+
+static const bfd_byte vxworks_sh_plt_entry_be[VXWORKS_PLT_ENTRY_SIZE] =
+{
+ 0xd0, 0x01, /* mov.l @(8,pc),r0 */
+ 0x60, 0x02, /* mov.l @r0,r0 */
+ 0x40, 0x2b, /* jmp @r0 */
+ 0x00, 0x09, /* nop */
+ 0, 0, 0, 0, /* 0: replaced with address of this symbol in .got. */
+ 0xd0, 0x01, /* mov.l @(8,pc),r0 */
+ 0xa0, 0x00, /* bra PLT (We need to fix the offset.) */
+ 0x00, 0x09, /* nop */
+ 0x00, 0x09, /* nop */
+ 0, 0, 0, 0, /* 1: replaced with offset into relocation table. */
+};
+
+static const bfd_byte vxworks_sh_plt_entry_le[VXWORKS_PLT_ENTRY_SIZE] =
+{
+ 0x01, 0xd0, /* mov.l @(8,pc),r0 */
+ 0x02, 0x60, /* mov.l @r0,r0 */
+ 0x2b, 0x40, /* jmp @r0 */
+ 0x09, 0x00, /* nop */
+ 0, 0, 0, 0, /* 0: replaced with address of this symbol in .got. */
+ 0x01, 0xd0, /* mov.l @(8,pc),r0 */
+ 0x00, 0xa0, /* bra PLT (We need to fix the offset.) */
+ 0x09, 0x00, /* nop */
+ 0x09, 0x00, /* nop */
+ 0, 0, 0, 0, /* 1: replaced with offset into relocation table. */
+};
+
+static const bfd_byte vxworks_sh_pic_plt_entry_be[VXWORKS_PLT_ENTRY_SIZE] =
+{
+ 0xd0, 0x01, /* mov.l @(8,pc),r0 */
+ 0x00, 0xce, /* mov.l @(r0,r12),r0 */
+ 0x40, 0x2b, /* jmp @r0 */
+ 0x00, 0x09, /* nop */
+ 0, 0, 0, 0, /* 0: replaced with offset of this symbol in .got. */
+ 0xd0, 0x01, /* mov.l @(8,pc),r0 */
+ 0x51, 0xc2, /* mov.l @(8,r12),r1 */
+ 0x41, 0x2b, /* jmp @r1 */
+ 0x00, 0x09, /* nop */
+ 0, 0, 0, 0, /* 1: replaced with offset into relocation table. */
+};
+
+static const bfd_byte vxworks_sh_pic_plt_entry_le[VXWORKS_PLT_ENTRY_SIZE] =
+{
+ 0x01, 0xd0, /* mov.l @(8,pc),r0 */
+ 0xce, 0x00, /* mov.l @(r0,r12),r0 */
+ 0x2b, 0x40, /* jmp @r0 */
+ 0x09, 0x00, /* nop */
+ 0, 0, 0, 0, /* 0: replaced with offset of this symbol in .got. */
+ 0x01, 0xd0, /* mov.l @(8,pc),r0 */
+ 0xc2, 0x51, /* mov.l @(8,r12),r1 */
+ 0x2b, 0x41, /* jmp @r1 */
+ 0x09, 0x00, /* nop */
+ 0, 0, 0, 0, /* 1: replaced with offset into relocation table. */
+};
+
+static const struct elf_sh_plt_info vxworks_sh_plts[2][2] = {
+ {
+ {
+ /* Big-endian non-PIC. */
+ vxworks_sh_plt0_entry_be,
+ VXWORKS_PLT_HEADER_SIZE,
+ { MINUS_ONE, MINUS_ONE, 8 },
+ vxworks_sh_plt_entry_be,
+ VXWORKS_PLT_ENTRY_SIZE,
+ { 8, 14, 20 },
+ 12
+ },
+ {
+ /* Little-endian non-PIC. */
+ vxworks_sh_plt0_entry_le,
+ VXWORKS_PLT_HEADER_SIZE,
+ { MINUS_ONE, MINUS_ONE, 8 },
+ vxworks_sh_plt_entry_le,
+ VXWORKS_PLT_ENTRY_SIZE,
+ { 8, 14, 20 },
+ 12
+ },
+ },
+ {
+ {
+ /* Big-endian PIC. */
+ NULL,
+ 0,
+ { MINUS_ONE, MINUS_ONE, MINUS_ONE },
+ vxworks_sh_pic_plt_entry_be,
+ VXWORKS_PLT_ENTRY_SIZE,
+ { 8, MINUS_ONE, 20 },
+ 12
+ },
+ {
+ /* Little-endian PIC. */
+ NULL,
+ 0,
+ { MINUS_ONE, MINUS_ONE, MINUS_ONE },
+ vxworks_sh_pic_plt_entry_le,
+ VXWORKS_PLT_ENTRY_SIZE,
+ { 8, MINUS_ONE, 20 },
+ 12
+ },
+ }
+};
-/* Return offset of the GOT id in PLT0 entry. */
-#define elf_sh_plt0_gotid_offset(info) 24
+/* Return the type of PLT associated with ABFD. PIC_P is true if
+ the object is position-independent. */
-/* Return offset of the temporary in PLT entry */
-#define elf_sh_plt_temp_offset(info) 8
+static const struct elf_sh_plt_info *
+get_plt_info (bfd *abfd ATTRIBUTE_UNUSED, bfd_boolean pic_p)
+{
+ if (vxworks_object_p (abfd))
+ return &vxworks_sh_plts[pic_p][!bfd_big_endian (abfd)];
+ return &elf_sh_plts[pic_p][!bfd_big_endian (abfd)];
+}
-/* Return offset of the symbol in PLT entry. */
-#define elf_sh_plt_symbol_offset(info) 20
+/* Install a 32-bit PLT field starting at ADDR, which occurs in OUTPUT_BFD.
+ VALUE is the field's value and CODE_P is true if VALUE refers to code,
+ not data. */
-/* Return offset of the relocation in PLT entry. */
-#define elf_sh_plt_reloc_offset(info) 24
+inline static void
+install_plt_field (bfd *output_bfd, bfd_boolean code_p ATTRIBUTE_UNUSED,
+ unsigned long value, bfd_byte *addr)
+{
+ bfd_put_32 (output_bfd, value, addr);
+}
#endif
+/* Return the index of the PLT entry at byte offset OFFSET. */
+
+static bfd_vma
+get_plt_index (const struct elf_sh_plt_info *info, bfd_vma offset)
+{
+ return (offset - info->plt0_entry_size) / info->symbol_entry_size;
+}
+
+/* Do the inverse operation. */
+
+static bfd_vma
+get_plt_offset (const struct elf_sh_plt_info *info, bfd_vma index)
+{
+ return info->plt0_entry_size + (index * info->symbol_entry_size);
+}
+
/* The sh linker needs to keep track of the number of relocs that it
decides to copy as dynamic relocs in check_relocs for each symbol.
This is so that it can later discard them if they are found to be
@@ -3518,11 +2159,14 @@ struct sh_elf_obj_tdata
static bfd_boolean
sh_elf_mkobject (bfd *abfd)
{
- bfd_size_type amt = sizeof (struct sh_elf_obj_tdata);
- abfd->tdata.any = bfd_zalloc (abfd, amt);
if (abfd->tdata.any == NULL)
- return FALSE;
- return TRUE;
+ {
+ bfd_size_type amt = sizeof (struct sh_elf_obj_tdata);
+ abfd->tdata.any = bfd_zalloc (abfd, amt);
+ if (abfd->tdata.any == NULL)
+ return FALSE;
+ }
+ return bfd_elf_mkobject (abfd);
}
/* sh ELF linker hash table. */
@@ -3540,6 +2184,9 @@ struct elf_sh_link_hash_table
asection *sdynbss;
asection *srelbss;
+ /* The (unloaded but important) VxWorks .rela.plt.unloaded section. */
+ asection *srelplt2;
+
/* Small local sym to section mapping cache. */
struct sym_sec_cache sym_sec;
@@ -3549,6 +2196,12 @@ struct elf_sh_link_hash_table
bfd_signed_vma refcount;
bfd_vma offset;
} tls_ldm_got;
+
+ /* The type of PLT to use. */
+ const struct elf_sh_plt_info *plt_info;
+
+ /* True if the target system is VxWorks. */
+ bfd_boolean vxworks_p;
};
/* Traverse an sh ELF linker hash table. */
@@ -3627,8 +2280,11 @@ sh_elf_link_hash_table_create (bfd *abfd)
ret->srelplt = NULL;
ret->sdynbss = NULL;
ret->srelbss = NULL;
+ ret->srelplt2 = NULL;
ret->sym_sec.abfd = NULL;
ret->tls_ldm_got.refcount = 0;
+ ret->plt_info = NULL;
+ ret->vxworks_p = vxworks_object_p (abfd);
return &ret->root.root;
}
@@ -3810,6 +2466,12 @@ sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
}
}
+ if (htab->vxworks_p)
+ {
+ if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
+ return FALSE;
+ }
+
return TRUE;
}
@@ -3827,7 +2489,6 @@ sh_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
struct elf_sh_link_hash_entry *eh;
struct elf_sh_dyn_relocs *p;
asection *s;
- unsigned int power_of_two;
htab = sh_elf_hash_table (info);
@@ -3951,28 +2612,7 @@ sh_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 3)
- power_of_two = 3;
-
- /* Apply the required alignment. */
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (htab->root.dynobj, s))
- {
- if (! bfd_set_section_alignment (htab->root.dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Allocate space in .plt, .got and associated reloc sections for
@@ -4032,7 +2672,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
/* If this is the first .plt entry, make room for the special
first entry. */
if (s->size == 0)
- s->size += PLT_ENTRY_SIZE;
+ s->size += htab->plt_info->plt0_entry_size;
h->plt.offset = s->size;
@@ -4049,7 +2689,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
}
/* Make room for this entry. */
- s->size += PLT_ENTRY_SIZE;
+ s->size += htab->plt_info->symbol_entry_size;
/* We also need to make an entry in the .got.plt section, which
will be placed in the .got section by the linker script. */
@@ -4057,6 +2697,23 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
/* We also need to make an entry in the .rel.plt section. */
htab->srelplt->size += sizeof (Elf32_External_Rela);
+
+ if (htab->vxworks_p && !info->shared)
+ {
+ /* VxWorks executables have a second set of relocations
+ for each PLT entry. They go in a separate relocation
+ section, which is processed by the kernel loader. */
+
+ /* There is a relocation for the initial PLT entry:
+ an R_SH_DIR32 relocation for _GLOBAL_OFFSET_TABLE_. */
+ if (h->plt.offset == htab->plt_info->plt0_entry_size)
+ htab->srelplt2->size += sizeof (Elf32_External_Rela);
+
+ /* There are two extra relocations for each subsequent
+ PLT entry: an R_SH_DIR32 relocation for the GOT entry,
+ and an R_SH_DIR32 relocation for the PLT entry. */
+ htab->srelplt2->size += sizeof (Elf32_External_Rela) * 2;
+ }
}
else
{
@@ -4250,6 +2907,17 @@ readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf)
return TRUE;
}
+/* This function is called after all the input files have been read,
+ and the input sections have been assigned to output sections.
+ It's a convenient place to determine the PLT style. */
+
+static bfd_boolean
+sh_elf_always_size_sections (bfd *output_bfd, struct bfd_link_info *info)
+{
+ sh_elf_hash_table (info)->plt_info = get_plt_info (output_bfd, info->shared);
+ return TRUE;
+}
+
/* Set the sizes of the dynamic sections. */
static bfd_boolean
@@ -4381,9 +3049,9 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
/* Strip this section if we don't need it; see the
comment below. */
}
- else if (strncmp (bfd_get_section_name (dynobj, s), ".rela", 5) == 0)
+ else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
{
- if (s->size != 0 && s != htab->srelplt)
+ if (s->size != 0 && s != htab->srelplt && s != htab->srelplt2)
relocs = TRUE;
/* We use the reloc_count field as a counter if we need
@@ -4554,7 +3222,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
return FALSE;
}
- howto = sh_elf_howto_table + r_type;
+ howto = get_howto_table (output_bfd) + r_type;
/* For relocs that aren't partial_inplace, we get the addend from
the relocation. */
@@ -4579,13 +3247,16 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
(info,
_("Unexpected STO_SH5_ISA32 on local symbol is not handled"),
input_bfd, input_section, rel->r_offset));
- if (info->relocatable)
+
+ if (sec != NULL && elf_discarded_section (sec))
+ /* Handled below. */
+ ;
+ else if (info->relocatable)
{
/* This is a relocatable link. We don't have to change
anything, unless the reloc is against a section symbol,
in which case we have to adjust according to where the
section symbol winds up in the output section. */
- sym = local_syms + r_symndx;
if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
{
if (! howto->partial_inplace)
@@ -4594,7 +3265,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
relocation, we need just to update the addend.
All real relocs are of type partial_inplace; this
code is mostly for completeness. */
- rel->r_addend += sec->output_offset + sym->st_value;
+ rel->r_addend += sec->output_offset;
continue;
}
@@ -4649,12 +3320,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
{
/* FIXME: Ought to make use of the RELOC_FOR_GLOBAL_SYMBOL macro. */
- /* Section symbol are never (?) placed in the hash table, so
- we can just ignore hash relocations when creating a
- relocatable object file. */
- if (info->relocatable)
- continue;
-
+ relocation = 0;
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
while (h->root.type == bfd_link_hash_indirect
|| h->root.type == bfd_link_hash_warning)
@@ -4725,8 +3391,17 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
|| (sec->output_section == NULL
&& (sh_elf_hash_entry (h)->tls_type == GOT_TLS_IE
|| sh_elf_hash_entry (h)->tls_type == GOT_TLS_GD)))
- relocation = 0;
- else if (sec->output_section == NULL)
+ ;
+ else if (sec->output_section != NULL)
+ relocation = ((h->root.u.def.value
+ + sec->output_section->vma
+ + sec->output_offset)
+ /* A STO_SH5_ISA32 causes a "bitor 1" to the
+ symbol value, unless we've seen
+ STT_DATALABEL on the way to it. */
+ | ((h->other & STO_SH5_ISA32) != 0
+ && ! seen_stt_datalabel));
+ else if (!info->relocatable)
{
(*_bfd_error_handler)
(_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
@@ -4737,22 +3412,13 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
h->root.root.string);
return FALSE;
}
- else
- relocation = ((h->root.u.def.value
- + sec->output_section->vma
- + sec->output_offset)
- /* A STO_SH5_ISA32 causes a "bitor 1" to the
- symbol value, unless we've seen
- STT_DATALABEL on the way to it. */
- | ((h->other & STO_SH5_ISA32) != 0
- && ! seen_stt_datalabel));
}
else if (h->root.type == bfd_link_hash_undefweak)
- relocation = 0;
+ ;
else if (info->unresolved_syms_in_objects == RM_IGNORE
&& ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
- relocation = 0;
- else
+ ;
+ else if (!info->relocatable)
{
if (! info->callbacks->undefined_symbol
(info, h->root.root.string, input_bfd,
@@ -4760,10 +3426,23 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
(info->unresolved_syms_in_objects == RM_GENERATE_ERROR
|| ELF_ST_VISIBILITY (h->other))))
return FALSE;
- relocation = 0;
}
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
switch ((int) r_type)
{
final_link_relocate:
@@ -4924,7 +3603,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (input_bfd,
input_section),
name + 5) == 0);
@@ -4953,7 +3632,9 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
BFD_ASSERT (h != NULL && h->dynindx != -1);
outrel.r_info = ELF32_R_INFO (h->dynindx, R_SH_REL32);
outrel.r_addend
- = bfd_get_32 (input_bfd, contents + rel->r_offset);
+ = (howto->partial_inplace
+ ? bfd_get_32 (input_bfd, contents + rel->r_offset)
+ : addend);
}
#ifdef INCLUDE_SHMEDIA
else if (r_type == R_SH_IMM_LOW16_PCREL
@@ -4974,20 +3655,19 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
|| ((info->symbolic || h->dynindx == -1)
&& h->def_regular))
{
- relocate = TRUE;
+ relocate = howto->partial_inplace;
outrel.r_info = ELF32_R_INFO (0, R_SH_RELATIVE);
- outrel.r_addend
- = relocation + bfd_get_32 (input_bfd,
- contents + rel->r_offset);
}
else
{
BFD_ASSERT (h->dynindx != -1);
outrel.r_info = ELF32_R_INFO (h->dynindx, R_SH_DIR32);
- outrel.r_addend
- = relocation + bfd_get_32 (input_bfd,
- contents + rel->r_offset);
}
+ outrel.r_addend = relocation;
+ outrel.r_addend
+ += (howto->partial_inplace
+ ? bfd_get_32 (input_bfd, contents + rel->r_offset)
+ : addend);
}
loc = sreloc->contents;
@@ -5029,8 +3709,8 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
BFD_ASSERT (sgotplt != NULL);
relocation = (sgotplt->output_offset
- + ((h->plt.offset / elf_sh_sizeof_plt (info)
- - 1 + 3) * 4));
+ + (get_plt_index (htab->plt_info, h->plt.offset)
+ + 3) * 4);
#ifdef GOT_BIAS
relocation -= GOT_BIAS;
@@ -5649,7 +4329,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (input_bfd,
input_section),
name + 5) == 0);
@@ -5853,42 +4533,20 @@ tpoff (struct bfd_link_info *info, bfd_vma address)
static asection *
sh_elf_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela *rel, struct elf_link_hash_entry *h,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_SH_GNU_VTINHERIT:
- case R_SH_GNU_VTENTRY:
- break;
-
- default:
-#ifdef INCLUDE_SHMEDIA
- while (h->root.type == bfd_link_hash_indirect
- && h->root.u.i.link)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
-#endif
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_SH_GNU_VTINHERIT:
+ case R_SH_GNU_VTENTRY:
+ return NULL;
+ }
- return NULL;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update the got entry reference counts for the section being removed. */
@@ -6538,7 +5196,7 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
name + 5) == 0);
@@ -6698,6 +5356,9 @@ sh_elf_copy_private_data (bfd * ibfd, bfd * obfd)
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
return TRUE;
+ /* Copy object attributes. */
+ _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
return sh_elf_set_private_flags (obfd, elf_elfheader (ibfd)->e_flags);
}
#endif /* not sh_elf_copy_private_data */
@@ -6799,7 +5460,7 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
corresponds to this symbol. This is the index of this symbol
in all the symbols for which we are making plt entries. The
first entry in the procedure linkage table is reserved. */
- plt_index = h->plt.offset / elf_sh_sizeof_plt (info) - 1;
+ plt_index = get_plt_index (htab->plt_info, h->plt.offset);
/* Get the offset into the .got table of the entry that
corresponds to this function. Each .got entry is 4 bytes.
@@ -6812,62 +5473,61 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
#endif
/* Fill in the entry in the procedure linkage table. */
- if (! info->shared)
+ memcpy (splt->contents + h->plt.offset,
+ htab->plt_info->symbol_entry,
+ htab->plt_info->symbol_entry_size);
+
+ if (info->shared)
+ install_plt_field (output_bfd, FALSE, got_offset,
+ (splt->contents
+ + h->plt.offset
+ + htab->plt_info->symbol_fields.got_entry));
+ else
{
- if (elf_sh_plt_entry == NULL)
- {
- elf_sh_plt_entry = (bfd_big_endian (output_bfd) ?
- elf_sh_plt_entry_be : elf_sh_plt_entry_le);
- }
- memcpy (splt->contents + h->plt.offset, elf_sh_plt_entry,
- elf_sh_sizeof_plt (info));
-#ifdef INCLUDE_SHMEDIA
- movi_shori_putval (output_bfd,
+ install_plt_field (output_bfd, FALSE,
(sgot->output_section->vma
+ sgot->output_offset
+ got_offset),
- (splt->contents + h->plt.offset
- + elf_sh_plt_symbol_offset (info)));
-
- /* Set bottom bit because its for a branch to SHmedia */
- movi_shori_putval (output_bfd,
- (splt->output_section->vma + splt->output_offset)
- | 1,
- (splt->contents + h->plt.offset
- + elf_sh_plt_plt0_offset (info)));
-#else
- bfd_put_32 (output_bfd,
- (sgot->output_section->vma
- + sgot->output_offset
- + got_offset),
- (splt->contents + h->plt.offset
- + elf_sh_plt_symbol_offset (info)));
-
- bfd_put_32 (output_bfd,
- (splt->output_section->vma + splt->output_offset),
- (splt->contents + h->plt.offset
- + elf_sh_plt_plt0_offset (info)));
-#endif
- }
- else
- {
- if (elf_sh_pic_plt_entry == NULL)
+ (splt->contents
+ + h->plt.offset
+ + htab->plt_info->symbol_fields.got_entry));
+ if (htab->vxworks_p)
{
- elf_sh_pic_plt_entry = (bfd_big_endian (output_bfd) ?
- elf_sh_pic_plt_entry_be :
- elf_sh_pic_plt_entry_le);
+ unsigned int reachable_plts, plts_per_4k;
+ int distance;
+
+ /* Divide the PLT into groups. The first group contains
+ REACHABLE_PLTS entries and the other groups contain
+ PLTS_PER_4K entries. Entries in the first group can
+ branch directly to .plt; those in later groups branch
+ to the last element of the previous group. */
+ /* ??? It would be better to create multiple copies of
+ the common resolver stub. */
+ reachable_plts = ((4096
+ - htab->plt_info->plt0_entry_size
+ - (htab->plt_info->symbol_fields.plt + 4))
+ / htab->plt_info->symbol_entry_size) + 1;
+ plts_per_4k = (4096 / htab->plt_info->symbol_entry_size);
+ if (plt_index < reachable_plts)
+ distance = -(h->plt.offset
+ + htab->plt_info->symbol_fields.plt);
+ else
+ distance = -(((plt_index - reachable_plts) % plts_per_4k + 1)
+ * htab->plt_info->symbol_entry_size);
+
+ /* Install the 'bra' with this offset. */
+ bfd_put_16 (output_bfd,
+ 0xa000 | (0x0fff & ((distance - 4) / 2)),
+ (splt->contents
+ + h->plt.offset
+ + htab->plt_info->symbol_fields.plt));
}
- memcpy (splt->contents + h->plt.offset, elf_sh_pic_plt_entry,
- elf_sh_sizeof_plt (info));
-#ifdef INCLUDE_SHMEDIA
- movi_shori_putval (output_bfd, got_offset,
- (splt->contents + h->plt.offset
- + elf_sh_plt_symbol_offset (info)));
-#else
- bfd_put_32 (output_bfd, got_offset,
- (splt->contents + h->plt.offset
- + elf_sh_plt_symbol_offset (info)));
-#endif
+ else
+ install_plt_field (output_bfd, TRUE,
+ splt->output_section->vma + splt->output_offset,
+ (splt->contents
+ + h->plt.offset
+ + htab->plt_info->symbol_fields.plt));
}
#ifdef GOT_BIAS
@@ -6875,23 +5535,18 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
got_offset += GOT_BIAS;
#endif
-#ifdef INCLUDE_SHMEDIA
- movi_shori_putval (output_bfd,
+ install_plt_field (output_bfd, FALSE,
plt_index * sizeof (Elf32_External_Rela),
- (splt->contents + h->plt.offset
- + elf_sh_plt_reloc_offset (info)));
-#else
- bfd_put_32 (output_bfd, plt_index * sizeof (Elf32_External_Rela),
- (splt->contents + h->plt.offset
- + elf_sh_plt_reloc_offset (info)));
-#endif
+ (splt->contents
+ + h->plt.offset
+ + htab->plt_info->symbol_fields.reloc_offset));
/* Fill in the entry in the global offset table. */
bfd_put_32 (output_bfd,
(splt->output_section->vma
+ splt->output_offset
+ h->plt.offset
- + elf_sh_plt_temp_offset (info)),
+ + htab->plt_info->symbol_resolve_offset),
sgot->contents + got_offset);
/* Fill in the entry in the .rela.plt section. */
@@ -6906,6 +5561,34 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
loc = srel->contents + plt_index * sizeof (Elf32_External_Rela);
bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
+ if (htab->vxworks_p && !info->shared)
+ {
+ /* Create the .rela.plt.unloaded relocations for this PLT entry.
+ Begin by pointing LOC to the first such relocation. */
+ loc = (htab->srelplt2->contents
+ + (plt_index * 2 + 1) * sizeof (Elf32_External_Rela));
+
+ /* Create a .rela.plt.unloaded R_SH_DIR32 relocation
+ for the PLT entry's pointer to the .got.plt entry. */
+ rel.r_offset = (htab->splt->output_section->vma
+ + htab->splt->output_offset
+ + h->plt.offset
+ + htab->plt_info->symbol_fields.got_entry);
+ rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_SH_DIR32);
+ rel.r_addend = got_offset;
+ bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
+ loc += sizeof (Elf32_External_Rela);
+
+ /* Create a .rela.plt.unloaded R_SH_DIR32 relocation for
+ the .got.plt entry, which initially points to .plt. */
+ rel.r_offset = (htab->sgotplt->output_section->vma
+ + htab->sgotplt->output_offset
+ + got_offset);
+ rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_SH_DIR32);
+ rel.r_addend = 0;
+ bfd_elf32_swap_reloc_out (output_bfd, &rel, loc);
+ }
+
if (!h->def_regular)
{
/* Mark the symbol as undefined, rather than as defined in
@@ -7035,9 +5718,11 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
}
- /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
+ /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. On VxWorks,
+ _GLOBAL_OFFSET_TABLE_ is not absolute: it is relative to the
+ ".got" section. */
if (strcmp (h->root.root.string, "_DYNAMIC") == 0
- || h == htab->root.hgot)
+ || (!htab->vxworks_p && h == htab->root.hgot))
sym->st_shndx = SHN_ABS;
return TRUE;
@@ -7144,42 +5829,59 @@ sh_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
/* Fill in the first entry in the procedure linkage table. */
splt = htab->splt;
- if (splt && splt->size > 0)
+ if (splt && splt->size > 0 && htab->plt_info->plt0_entry)
{
- if (info->shared)
+ unsigned int i;
+
+ memcpy (splt->contents,
+ htab->plt_info->plt0_entry,
+ htab->plt_info->plt0_entry_size);
+ for (i = 0; i < ARRAY_SIZE (htab->plt_info->plt0_got_fields); i++)
+ if (htab->plt_info->plt0_got_fields[i] != MINUS_ONE)
+ install_plt_field (output_bfd, FALSE,
+ (sgot->output_section->vma
+ + sgot->output_offset
+ + (i * 4)),
+ (splt->contents
+ + htab->plt_info->plt0_got_fields[i]));
+
+ if (htab->vxworks_p)
{
- if (elf_sh_pic_plt_entry == NULL)
- {
- elf_sh_pic_plt_entry = (bfd_big_endian (output_bfd) ?
- elf_sh_pic_plt_entry_be :
- elf_sh_pic_plt_entry_le);
- }
- memcpy (splt->contents, elf_sh_pic_plt_entry,
- elf_sh_sizeof_plt (info));
- }
- else
- {
- if (elf_sh_plt0_entry == NULL)
+ /* Finalize the .rela.plt.unloaded contents. */
+ Elf_Internal_Rela rel;
+ bfd_byte *loc;
+
+ /* Create a .rela.plt.unloaded R_SH_DIR32 relocation for the
+ first PLT entry's pointer to _GLOBAL_OFFSET_TABLE_ + 8. */
+ loc = htab->srelplt2->contents;
+ rel.r_offset = (splt->output_section->vma
+ + splt->output_offset
+ + htab->plt_info->plt0_got_fields[2]);
+ rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_SH_DIR32);
+ rel.r_addend = 8;
+ bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
+ loc += sizeof (Elf32_External_Rela);
+
+ /* Fix up the remaining .rela.plt.unloaded relocations.
+ They may have the wrong symbol index for _G_O_T_ or
+ _P_L_T_ depending on the order in which symbols were
+ output. */
+ while (loc < htab->srelplt2->contents + htab->srelplt2->size)
{
- elf_sh_plt0_entry = (bfd_big_endian (output_bfd) ?
- elf_sh_plt0_entry_be :
- elf_sh_plt0_entry_le);
+ /* The PLT entry's pointer to the .got.plt slot. */
+ bfd_elf32_swap_reloc_in (output_bfd, loc, &rel);
+ rel.r_info = ELF32_R_INFO (htab->root.hgot->indx,
+ R_SH_DIR32);
+ bfd_elf32_swap_reloc_out (output_bfd, &rel, loc);
+ loc += sizeof (Elf32_External_Rela);
+
+ /* The .got.plt slot's pointer to .plt. */
+ bfd_elf32_swap_reloc_in (output_bfd, loc, &rel);
+ rel.r_info = ELF32_R_INFO (htab->root.hplt->indx,
+ R_SH_DIR32);
+ bfd_elf32_swap_reloc_out (output_bfd, &rel, loc);
+ loc += sizeof (Elf32_External_Rela);
}
- memcpy (splt->contents, elf_sh_plt0_entry, PLT_ENTRY_SIZE);
-#ifdef INCLUDE_SHMEDIA
- movi_shori_putval (output_bfd,
- sgot->output_section->vma
- + sgot->output_offset,
- splt->contents
- + elf_sh_plt0_gotplt_offset (info));
-#else
- bfd_put_32 (output_bfd,
- sgot->output_section->vma + sgot->output_offset + 4,
- splt->contents + elf_sh_plt0_gotid_offset (info));
- bfd_put_32 (output_bfd,
- sgot->output_section->vma + sgot->output_offset + 8,
- splt->contents + elf_sh_plt0_linker_offset (info));
-#endif
}
/* UnixWare sets the entsize of .plt to 4, although that doesn't
@@ -7294,7 +5996,10 @@ static bfd_vma
sh_elf_plt_sym_val (bfd_vma i, const asection *plt,
const arelent *rel ATTRIBUTE_UNUSED)
{
- return plt->vma + (i + 1) * PLT_ENTRY_SIZE;
+ const struct elf_sh_plt_info *plt_info;
+
+ plt_info = get_plt_info (plt->owner, (plt->owner->flags & DYNAMIC) != 0);
+ return plt->vma + get_plt_offset (plt_info, i);
}
#if !defined SH_TARGET_ALREADY_DEFINED
@@ -7315,6 +6020,8 @@ sh_elf_plt_sym_val (bfd_vma i, const asection *plt,
#define elf_symbol_leading_char '_'
#define bfd_elf32_bfd_reloc_type_lookup sh_elf_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup \
+ sh_elf_reloc_name_lookup
#define elf_info_to_howto sh_elf_info_to_howto
#define bfd_elf32_bfd_relax_section sh_elf_relax_section
#define elf_backend_relocate_section sh_elf_relocate_section
@@ -7340,8 +6047,12 @@ sh_elf_plt_sym_val (bfd_vma i, const asection *plt,
sh_elf_link_hash_table_create
#define elf_backend_adjust_dynamic_symbol \
sh_elf_adjust_dynamic_symbol
+#define elf_backend_always_size_sections \
+ sh_elf_always_size_sections
#define elf_backend_size_dynamic_sections \
sh_elf_size_dynamic_sections
+#define elf_backend_omit_section_dynsym \
+ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
#define elf_backend_finish_dynamic_symbol \
sh_elf_finish_dynamic_symbol
#define elf_backend_finish_dynamic_sections \
@@ -7371,6 +6082,7 @@ sh_elf_plt_sym_val (bfd_vma i, const asection *plt,
#define TARGET_LITTLE_NAME "elf32-shl-nbsd"
#undef ELF_MAXPAGESIZE
#define ELF_MAXPAGESIZE 0x10000
+#undef ELF_COMMONPAGESIZE
#undef elf_symbol_leading_char
#define elf_symbol_leading_char 0
#undef elf32_bed
@@ -7388,6 +6100,8 @@ sh_elf_plt_sym_val (bfd_vma i, const asection *plt,
#define TARGET_LITTLE_SYM bfd_elf32_shlin_vec
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf32-sh-linux"
+#undef ELF_COMMONPAGESIZE
+#define ELF_COMMONPAGESIZE 0x1000
#undef elf_backend_grok_prstatus
#define elf_backend_grok_prstatus elf32_shlin_grok_prstatus
@@ -7398,4 +6112,38 @@ sh_elf_plt_sym_val (bfd_vma i, const asection *plt,
#include "elf32-target.h"
+#undef TARGET_BIG_SYM
+#define TARGET_BIG_SYM bfd_elf32_shvxworks_vec
+#undef TARGET_BIG_NAME
+#define TARGET_BIG_NAME "elf32-sh-vxworks"
+#undef TARGET_LITTLE_SYM
+#define TARGET_LITTLE_SYM bfd_elf32_shlvxworks_vec
+#undef TARGET_LITTLE_NAME
+#define TARGET_LITTLE_NAME "elf32-shl-vxworks"
+#undef elf32_bed
+#define elf32_bed elf32_sh_vxworks_bed
+
+#undef elf_backend_want_plt_sym
+#define elf_backend_want_plt_sym 1
+#undef elf_symbol_leading_char
+#define elf_symbol_leading_char '_'
+#define elf_backend_want_got_underscore 1
+#undef elf_backend_grok_prstatus
+#undef elf_backend_grok_psinfo
+#undef elf_backend_add_symbol_hook
+#define elf_backend_add_symbol_hook elf_vxworks_add_symbol_hook
+#undef elf_backend_link_output_symbol_hook
+#define elf_backend_link_output_symbol_hook \
+ elf_vxworks_link_output_symbol_hook
+#undef elf_backend_emit_relocs
+#define elf_backend_emit_relocs elf_vxworks_emit_relocs
+#undef elf_backend_final_write_processing
+#define elf_backend_final_write_processing \
+ elf_vxworks_final_write_processing
+#undef ELF_MAXPAGESIZE
+#define ELF_MAXPAGESIZE 0x1000
+#undef ELF_COMMONPAGESIZE
+
+#include "elf32-target.h"
+
#endif /* neither INCLUDE_SHMEDIA nor SH_TARGET_ALREADY_DEFINED */
diff --git a/bfd/elf32-sh64-com.c b/bfd/elf32-sh64-com.c
index 1b6a8f5aad29..1a30e0d371b2 100644
--- a/bfd/elf32-sh64-com.c
+++ b/bfd/elf32-sh64-com.c
@@ -1,5 +1,6 @@
/* SuperH SH64-specific support for 32-bit ELF
- Copyright 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright 2000, 2001, 2002, 2003, 2004, 2007
+ Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +20,8 @@
#define SH64_ELF
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/sh.h"
diff --git a/bfd/elf32-sh64.c b/bfd/elf32-sh64.c
index afafcfde88d0..2f85098c0ff2 100644
--- a/bfd/elf32-sh64.c
+++ b/bfd/elf32-sh64.c
@@ -1,5 +1,5 @@
/* SuperH SH64-specific support for 32-bit ELF
- Copyright 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -20,8 +20,8 @@
#define SH64_ELF
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "elf-bfd.h"
#include "../opcodes/sh64-opc.h"
#include "elf32-sh64.h"
@@ -115,13 +115,16 @@ static void sh64_find_section_for_address
static bfd_boolean
sh64_elf_new_section_hook (bfd *abfd, asection *sec)
{
- struct _sh64_elf_section_data *sdata;
- bfd_size_type amt = sizeof (*sdata);
+ if (!sec->used_by_bfd)
+ {
+ struct _sh64_elf_section_data *sdata;
+ bfd_size_type amt = sizeof (*sdata);
- sdata = (struct _sh64_elf_section_data *) bfd_zalloc (abfd, amt);
- if (sdata == NULL)
- return FALSE;
- sec->used_by_bfd = sdata;
+ sdata = bfd_zalloc (abfd, amt);
+ if (sdata == NULL)
+ return FALSE;
+ sec->used_by_bfd = sdata;
+ }
return _bfd_elf_new_section_hook (abfd, sec);
}
@@ -739,9 +742,9 @@ static void
sh64_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
const Elf_Internal_Sym *isym,
bfd_boolean definition,
- bfd_boolean dynamic)
+ bfd_boolean dynamic ATTRIBUTE_UNUSED)
{
- if (isym->st_other != 0 && dynamic)
+ if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
{
unsigned char other;
@@ -756,8 +759,8 @@ sh64_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
static const struct bfd_elf_special_section sh64_elf_special_sections[] =
{
- { ".cranges", 8, 0, SHT_PROGBITS, 0 },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".cranges"), 0, SHT_PROGBITS, 0 },
+ { NULL, 0, 0, 0, 0 }
};
#undef TARGET_BIG_SYM
@@ -782,6 +785,7 @@ static const struct bfd_elf_special_section sh64_elf_special_sections[] =
#define TARGET_LITTLE_NAME "elf32-sh64l-nbsd"
#undef ELF_MAXPAGESIZE
#define ELF_MAXPAGESIZE 0x10000
+#undef ELF_COMMONPAGESIZE
#undef elf_symbol_leading_char
#define elf_symbol_leading_char 0
#undef elf32_bed
@@ -800,6 +804,8 @@ static const struct bfd_elf_special_section sh64_elf_special_sections[] =
#define TARGET_LITTLE_NAME "elf32-sh64-linux"
#undef elf32_bed
#define elf32_bed elf32_sh64_lin_bed
+#undef ELF_COMMONPAGESIZE
+#define ELF_COMMONPAGESIZE 0x1000
#include "elf32-target.h"
diff --git a/bfd/elf32-sparc.c b/bfd/elf32-sparc.c
index 3bfb38a3d44a..f8a3bff196d4 100644
--- a/bfd/elf32-sparc.c
+++ b/bfd/elf32-sparc.c
@@ -1,6 +1,6 @@
/* SPARC-specific support for 32-bit ELF
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -172,6 +172,7 @@ elf32_sparc_reloc_type_class (const Elf_Internal_Rela *rela)
#define ELF_MACHINE_CODE EM_SPARC
#define ELF_MACHINE_ALT1 EM_SPARC32PLUS
#define ELF_MAXPAGESIZE 0x10000
+#define ELF_COMMONPAGESIZE 0x2000
#define bfd_elf32_bfd_merge_private_bfd_data \
elf32_sparc_merge_private_bfd_data
@@ -182,6 +183,8 @@ elf32_sparc_reloc_type_class (const Elf_Internal_Rela *rela)
#define elf_info_to_howto _bfd_sparc_elf_info_to_howto
#define bfd_elf32_bfd_reloc_type_lookup _bfd_sparc_elf_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup \
+ _bfd_sparc_elf_reloc_name_lookup
#define bfd_elf32_bfd_link_hash_table_create \
_bfd_sparc_elf_link_hash_table_create
#define bfd_elf32_bfd_relax_section _bfd_sparc_elf_relax_section
@@ -206,6 +209,7 @@ elf32_sparc_reloc_type_class (const Elf_Internal_Rela *rela)
#define elf_backend_gc_mark_hook _bfd_sparc_elf_gc_mark_hook
#define elf_backend_gc_sweep_hook _bfd_sparc_elf_gc_sweep_hook
#define elf_backend_plt_sym_val _bfd_sparc_elf_plt_sym_val
+#define elf_backend_init_index_section _bfd_elf_init_1_index_section
#define elf_backend_can_gc_sections 1
#define elf_backend_can_refcount 1
diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c
new file mode 100644
index 000000000000..d652117e2992
--- /dev/null
+++ b/bfd/elf32-spu.c
@@ -0,0 +1,3154 @@
+/* SPU specific support for 32-bit ELF
+
+ Copyright 2006, 2007 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "elf/spu.h"
+#include "elf32-spu.h"
+
+/* We use RELA style relocs. Don't define USE_REL. */
+
+static bfd_reloc_status_type spu_elf_rel9 (bfd *, arelent *, asymbol *,
+ void *, asection *,
+ bfd *, char **);
+
+/* Values of type 'enum elf_spu_reloc_type' are used to index this
+ array, so it must be declared in the order of that type. */
+
+static reloc_howto_type elf_howto_table[] = {
+ HOWTO (R_SPU_NONE, 0, 0, 0, FALSE, 0, complain_overflow_dont,
+ bfd_elf_generic_reloc, "SPU_NONE",
+ FALSE, 0, 0x00000000, FALSE),
+ HOWTO (R_SPU_ADDR10, 4, 2, 10, FALSE, 14, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "SPU_ADDR10",
+ FALSE, 0, 0x00ffc000, FALSE),
+ HOWTO (R_SPU_ADDR16, 2, 2, 16, FALSE, 7, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "SPU_ADDR16",
+ FALSE, 0, 0x007fff80, FALSE),
+ HOWTO (R_SPU_ADDR16_HI, 16, 2, 16, FALSE, 7, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "SPU_ADDR16_HI",
+ FALSE, 0, 0x007fff80, FALSE),
+ HOWTO (R_SPU_ADDR16_LO, 0, 2, 16, FALSE, 7, complain_overflow_dont,
+ bfd_elf_generic_reloc, "SPU_ADDR16_LO",
+ FALSE, 0, 0x007fff80, FALSE),
+ HOWTO (R_SPU_ADDR18, 0, 2, 18, FALSE, 7, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "SPU_ADDR18",
+ FALSE, 0, 0x01ffff80, FALSE),
+ HOWTO (R_SPU_ADDR32, 0, 2, 32, FALSE, 0, complain_overflow_dont,
+ bfd_elf_generic_reloc, "SPU_ADDR32",
+ FALSE, 0, 0xffffffff, FALSE),
+ HOWTO (R_SPU_REL16, 2, 2, 16, TRUE, 7, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "SPU_REL16",
+ FALSE, 0, 0x007fff80, TRUE),
+ HOWTO (R_SPU_ADDR7, 0, 2, 7, FALSE, 14, complain_overflow_dont,
+ bfd_elf_generic_reloc, "SPU_ADDR7",
+ FALSE, 0, 0x001fc000, FALSE),
+ HOWTO (R_SPU_REL9, 2, 2, 9, TRUE, 0, complain_overflow_signed,
+ spu_elf_rel9, "SPU_REL9",
+ FALSE, 0, 0x0180007f, TRUE),
+ HOWTO (R_SPU_REL9I, 2, 2, 9, TRUE, 0, complain_overflow_signed,
+ spu_elf_rel9, "SPU_REL9I",
+ FALSE, 0, 0x0000c07f, TRUE),
+ HOWTO (R_SPU_ADDR10I, 0, 2, 10, FALSE, 14, complain_overflow_signed,
+ bfd_elf_generic_reloc, "SPU_ADDR10I",
+ FALSE, 0, 0x00ffc000, FALSE),
+ HOWTO (R_SPU_ADDR16I, 0, 2, 16, FALSE, 7, complain_overflow_signed,
+ bfd_elf_generic_reloc, "SPU_ADDR16I",
+ FALSE, 0, 0x007fff80, FALSE),
+ HOWTO (R_SPU_REL32, 0, 2, 32, TRUE, 0, complain_overflow_dont,
+ bfd_elf_generic_reloc, "SPU_REL32",
+ FALSE, 0, 0xffffffff, TRUE),
+ HOWTO (R_SPU_ADDR16X, 0, 2, 16, FALSE, 7, complain_overflow_bitfield,
+ bfd_elf_generic_reloc, "SPU_ADDR16X",
+ FALSE, 0, 0x007fff80, FALSE),
+ HOWTO (R_SPU_PPU32, 0, 2, 32, FALSE, 0, complain_overflow_dont,
+ bfd_elf_generic_reloc, "SPU_PPU32",
+ FALSE, 0, 0xffffffff, FALSE),
+ HOWTO (R_SPU_PPU64, 0, 4, 64, FALSE, 0, complain_overflow_dont,
+ bfd_elf_generic_reloc, "SPU_PPU64",
+ FALSE, 0, -1, FALSE),
+};
+
+static struct bfd_elf_special_section const spu_elf_special_sections[] = {
+ { ".toe", 4, 0, SHT_NOBITS, SHF_ALLOC },
+ { NULL, 0, 0, 0, 0 }
+};
+
+static enum elf_spu_reloc_type
+spu_elf_bfd_to_reloc_type (bfd_reloc_code_real_type code)
+{
+ switch (code)
+ {
+ default:
+ return R_SPU_NONE;
+ case BFD_RELOC_SPU_IMM10W:
+ return R_SPU_ADDR10;
+ case BFD_RELOC_SPU_IMM16W:
+ return R_SPU_ADDR16;
+ case BFD_RELOC_SPU_LO16:
+ return R_SPU_ADDR16_LO;
+ case BFD_RELOC_SPU_HI16:
+ return R_SPU_ADDR16_HI;
+ case BFD_RELOC_SPU_IMM18:
+ return R_SPU_ADDR18;
+ case BFD_RELOC_SPU_PCREL16:
+ return R_SPU_REL16;
+ case BFD_RELOC_SPU_IMM7:
+ return R_SPU_ADDR7;
+ case BFD_RELOC_SPU_IMM8:
+ return R_SPU_NONE;
+ case BFD_RELOC_SPU_PCREL9a:
+ return R_SPU_REL9;
+ case BFD_RELOC_SPU_PCREL9b:
+ return R_SPU_REL9I;
+ case BFD_RELOC_SPU_IMM10:
+ return R_SPU_ADDR10I;
+ case BFD_RELOC_SPU_IMM16:
+ return R_SPU_ADDR16I;
+ case BFD_RELOC_32:
+ return R_SPU_ADDR32;
+ case BFD_RELOC_32_PCREL:
+ return R_SPU_REL32;
+ case BFD_RELOC_SPU_PPU32:
+ return R_SPU_PPU32;
+ case BFD_RELOC_SPU_PPU64:
+ return R_SPU_PPU64;
+ }
+}
+
+static void
+spu_elf_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+ arelent *cache_ptr,
+ Elf_Internal_Rela *dst)
+{
+ enum elf_spu_reloc_type r_type;
+
+ r_type = (enum elf_spu_reloc_type) ELF32_R_TYPE (dst->r_info);
+ BFD_ASSERT (r_type < R_SPU_max);
+ cache_ptr->howto = &elf_howto_table[(int) r_type];
+}
+
+static reloc_howto_type *
+spu_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ bfd_reloc_code_real_type code)
+{
+ enum elf_spu_reloc_type r_type = spu_elf_bfd_to_reloc_type (code);
+
+ if (r_type == R_SPU_NONE)
+ return NULL;
+
+ return elf_howto_table + r_type;
+}
+
+static reloc_howto_type *
+spu_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof (elf_howto_table) / sizeof (elf_howto_table[0]); i++)
+ if (elf_howto_table[i].name != NULL
+ && strcasecmp (elf_howto_table[i].name, r_name) == 0)
+ return &elf_howto_table[i];
+
+ return NULL;
+}
+
+/* Apply R_SPU_REL9 and R_SPU_REL9I relocs. */
+
+static bfd_reloc_status_type
+spu_elf_rel9 (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
+ void *data, asection *input_section,
+ bfd *output_bfd, char **error_message)
+{
+ bfd_size_type octets;
+ bfd_vma val;
+ long insn;
+
+ /* If this is a relocatable link (output_bfd test tells us), just
+ call the generic function. Any adjustment will be done at final
+ link time. */
+ if (output_bfd != NULL)
+ return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
+ input_section, output_bfd, error_message);
+
+ if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
+ return bfd_reloc_outofrange;
+ octets = reloc_entry->address * bfd_octets_per_byte (abfd);
+
+ /* Get symbol value. */
+ val = 0;
+ if (!bfd_is_com_section (symbol->section))
+ val = symbol->value;
+ if (symbol->section->output_section)
+ val += symbol->section->output_section->vma;
+
+ val += reloc_entry->addend;
+
+ /* Make it pc-relative. */
+ val -= input_section->output_section->vma + input_section->output_offset;
+
+ val >>= 2;
+ if (val + 256 >= 512)
+ return bfd_reloc_overflow;
+
+ insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
+
+ /* Move two high bits of value to REL9I and REL9 position.
+ The mask will take care of selecting the right field. */
+ val = (val & 0x7f) | ((val & 0x180) << 7) | ((val & 0x180) << 16);
+ insn &= ~reloc_entry->howto->dst_mask;
+ insn |= val & reloc_entry->howto->dst_mask;
+ bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
+ return bfd_reloc_ok;
+}
+
+static bfd_boolean
+spu_elf_new_section_hook (bfd *abfd, asection *sec)
+{
+ if (!sec->used_by_bfd)
+ {
+ struct _spu_elf_section_data *sdata;
+
+ sdata = bfd_zalloc (abfd, sizeof (*sdata));
+ if (sdata == NULL)
+ return FALSE;
+ sec->used_by_bfd = sdata;
+ }
+
+ return _bfd_elf_new_section_hook (abfd, sec);
+}
+
+/* Specially mark defined symbols named _EAR_* with BSF_KEEP so that
+ strip --strip-unneeded will not remove them. */
+
+static void
+spu_elf_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, asymbol *sym)
+{
+ if (sym->name != NULL
+ && sym->section != bfd_abs_section_ptr
+ && strncmp (sym->name, "_EAR_", 5) == 0)
+ sym->flags |= BSF_KEEP;
+}
+
+/* SPU ELF linker hash table. */
+
+struct spu_link_hash_table
+{
+ struct elf_link_hash_table elf;
+
+ /* The stub hash table. */
+ struct bfd_hash_table stub_hash_table;
+
+ /* Shortcuts to overlay sections. */
+ asection *stub;
+ asection *ovtab;
+
+ struct elf_link_hash_entry *ovly_load;
+
+ /* An array of two output sections per overlay region, chosen such that
+ the first section vma is the overlay buffer vma (ie. the section has
+ the lowest vma in the group that occupy the region), and the second
+ section vma+size specifies the end of the region. We keep pointers
+ to sections like this because section vmas may change when laying
+ them out. */
+ asection **ovl_region;
+
+ /* Number of overlay buffers. */
+ unsigned int num_buf;
+
+ /* Total number of overlays. */
+ unsigned int num_overlays;
+
+ /* Set if we should emit symbols for stubs. */
+ unsigned int emit_stub_syms:1;
+
+ /* Set if we want stubs on calls out of overlay regions to
+ non-overlay regions. */
+ unsigned int non_overlay_stubs : 1;
+
+ /* Set on error. */
+ unsigned int stub_overflow : 1;
+
+ /* Set if stack size analysis should be done. */
+ unsigned int stack_analysis : 1;
+
+ /* Set if __stack_* syms will be emitted. */
+ unsigned int emit_stack_syms : 1;
+};
+
+#define spu_hash_table(p) \
+ ((struct spu_link_hash_table *) ((p)->hash))
+
+struct spu_stub_hash_entry
+{
+ struct bfd_hash_entry root;
+
+ /* Destination of this stub. */
+ asection *target_section;
+ bfd_vma target_off;
+
+ /* Offset of entry in stub section. */
+ bfd_vma off;
+
+ /* Offset from this stub to stub that loads the overlay index. */
+ bfd_vma delta;
+};
+
+/* Create an entry in a spu stub hash table. */
+
+static struct bfd_hash_entry *
+stub_hash_newfunc (struct bfd_hash_entry *entry,
+ struct bfd_hash_table *table,
+ const char *string)
+{
+ /* Allocate the structure if it has not already been allocated by a
+ subclass. */
+ if (entry == NULL)
+ {
+ entry = bfd_hash_allocate (table, sizeof (struct spu_stub_hash_entry));
+ if (entry == NULL)
+ return entry;
+ }
+
+ /* Call the allocation method of the superclass. */
+ entry = bfd_hash_newfunc (entry, table, string);
+ if (entry != NULL)
+ {
+ struct spu_stub_hash_entry *sh = (struct spu_stub_hash_entry *) entry;
+
+ sh->target_section = NULL;
+ sh->target_off = 0;
+ sh->off = 0;
+ sh->delta = 0;
+ }
+
+ return entry;
+}
+
+/* Create a spu ELF linker hash table. */
+
+static struct bfd_link_hash_table *
+spu_elf_link_hash_table_create (bfd *abfd)
+{
+ struct spu_link_hash_table *htab;
+
+ htab = bfd_malloc (sizeof (*htab));
+ if (htab == NULL)
+ return NULL;
+
+ if (!_bfd_elf_link_hash_table_init (&htab->elf, abfd,
+ _bfd_elf_link_hash_newfunc,
+ sizeof (struct elf_link_hash_entry)))
+ {
+ free (htab);
+ return NULL;
+ }
+
+ /* Init the stub hash table too. */
+ if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
+ sizeof (struct spu_stub_hash_entry)))
+ return NULL;
+
+ memset (&htab->stub, 0,
+ sizeof (*htab) - offsetof (struct spu_link_hash_table, stub));
+
+ return &htab->elf.root;
+}
+
+/* Free the derived linker hash table. */
+
+static void
+spu_elf_link_hash_table_free (struct bfd_link_hash_table *hash)
+{
+ struct spu_link_hash_table *ret = (struct spu_link_hash_table *) hash;
+
+ bfd_hash_table_free (&ret->stub_hash_table);
+ _bfd_generic_link_hash_table_free (hash);
+}
+
+/* Find the symbol for the given R_SYMNDX in IBFD and set *HP and *SYMP
+ to (hash, NULL) for global symbols, and (NULL, sym) for locals. Set
+ *SYMSECP to the symbol's section. *LOCSYMSP caches local syms. */
+
+static bfd_boolean
+get_sym_h (struct elf_link_hash_entry **hp,
+ Elf_Internal_Sym **symp,
+ asection **symsecp,
+ Elf_Internal_Sym **locsymsp,
+ unsigned long r_symndx,
+ bfd *ibfd)
+{
+ Elf_Internal_Shdr *symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
+
+ if (r_symndx >= symtab_hdr->sh_info)
+ {
+ struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
+ struct elf_link_hash_entry *h;
+
+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ if (hp != NULL)
+ *hp = h;
+
+ if (symp != NULL)
+ *symp = NULL;
+
+ if (symsecp != NULL)
+ {
+ asection *symsec = NULL;
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ symsec = h->root.u.def.section;
+ *symsecp = symsec;
+ }
+ }
+ else
+ {
+ Elf_Internal_Sym *sym;
+ Elf_Internal_Sym *locsyms = *locsymsp;
+
+ if (locsyms == NULL)
+ {
+ locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
+ if (locsyms == NULL)
+ {
+ size_t symcount = symtab_hdr->sh_info;
+
+ /* If we are reading symbols into the contents, then
+ read the global syms too. This is done to cache
+ syms for later stack analysis. */
+ if ((unsigned char **) locsymsp == &symtab_hdr->contents)
+ symcount = symtab_hdr->sh_size / symtab_hdr->sh_entsize;
+ locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, symcount, 0,
+ NULL, NULL, NULL);
+ }
+ if (locsyms == NULL)
+ return FALSE;
+ *locsymsp = locsyms;
+ }
+ sym = locsyms + r_symndx;
+
+ if (hp != NULL)
+ *hp = NULL;
+
+ if (symp != NULL)
+ *symp = sym;
+
+ if (symsecp != NULL)
+ {
+ asection *symsec = NULL;
+ if ((sym->st_shndx != SHN_UNDEF
+ && sym->st_shndx < SHN_LORESERVE)
+ || sym->st_shndx > SHN_HIRESERVE)
+ symsec = bfd_section_from_elf_index (ibfd, sym->st_shndx);
+ *symsecp = symsec;
+ }
+ }
+
+ return TRUE;
+}
+
+/* Build a name for an entry in the stub hash table. We can't use a
+ local symbol name because ld -r might generate duplicate local symbols. */
+
+static char *
+spu_stub_name (const asection *sym_sec,
+ const struct elf_link_hash_entry *h,
+ const Elf_Internal_Rela *rel)
+{
+ char *stub_name;
+ bfd_size_type len;
+
+ if (h)
+ {
+ len = strlen (h->root.root.string) + 1 + 8 + 1;
+ stub_name = bfd_malloc (len);
+ if (stub_name == NULL)
+ return stub_name;
+
+ sprintf (stub_name, "%s+%x",
+ h->root.root.string,
+ (int) rel->r_addend & 0xffffffff);
+ len -= 8;
+ }
+ else
+ {
+ len = 8 + 1 + 8 + 1 + 8 + 1;
+ stub_name = bfd_malloc (len);
+ if (stub_name == NULL)
+ return stub_name;
+
+ sprintf (stub_name, "%x:%x+%x",
+ sym_sec->id & 0xffffffff,
+ (int) ELF32_R_SYM (rel->r_info) & 0xffffffff,
+ (int) rel->r_addend & 0xffffffff);
+ len = strlen (stub_name);
+ }
+
+ if (stub_name[len - 2] == '+'
+ && stub_name[len - 1] == '0'
+ && stub_name[len] == 0)
+ stub_name[len - 2] = 0;
+
+ return stub_name;
+}
+
+/* Create the note section if not already present. This is done early so
+ that the linker maps the sections to the right place in the output. */
+
+bfd_boolean
+spu_elf_create_sections (bfd *output_bfd,
+ struct bfd_link_info *info,
+ int stack_analysis,
+ int emit_stack_syms)
+{
+ bfd *ibfd;
+ struct spu_link_hash_table *htab = spu_hash_table (info);
+
+ /* Stash some options away where we can get at them later. */
+ htab->stack_analysis = stack_analysis;
+ htab->emit_stack_syms = emit_stack_syms;
+
+ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+ if (bfd_get_section_by_name (ibfd, SPU_PTNOTE_SPUNAME) != NULL)
+ break;
+
+ if (ibfd == NULL)
+ {
+ /* Make SPU_PTNOTE_SPUNAME section. */
+ asection *s;
+ size_t name_len;
+ size_t size;
+ bfd_byte *data;
+ flagword flags;
+
+ ibfd = info->input_bfds;
+ flags = SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS | SEC_IN_MEMORY;
+ s = bfd_make_section_anyway_with_flags (ibfd, SPU_PTNOTE_SPUNAME, flags);
+ if (s == NULL
+ || !bfd_set_section_alignment (ibfd, s, 4))
+ return FALSE;
+
+ name_len = strlen (bfd_get_filename (output_bfd)) + 1;
+ size = 12 + ((sizeof (SPU_PLUGIN_NAME) + 3) & -4);
+ size += (name_len + 3) & -4;
+
+ if (!bfd_set_section_size (ibfd, s, size))
+ return FALSE;
+
+ data = bfd_zalloc (ibfd, size);
+ if (data == NULL)
+ return FALSE;
+
+ bfd_put_32 (ibfd, sizeof (SPU_PLUGIN_NAME), data + 0);
+ bfd_put_32 (ibfd, name_len, data + 4);
+ bfd_put_32 (ibfd, 1, data + 8);
+ memcpy (data + 12, SPU_PLUGIN_NAME, sizeof (SPU_PLUGIN_NAME));
+ memcpy (data + 12 + ((sizeof (SPU_PLUGIN_NAME) + 3) & -4),
+ bfd_get_filename (output_bfd), name_len);
+ s->contents = data;
+ }
+
+ return TRUE;
+}
+
+/* qsort predicate to sort sections by vma. */
+
+static int
+sort_sections (const void *a, const void *b)
+{
+ const asection *const *s1 = a;
+ const asection *const *s2 = b;
+ bfd_signed_vma delta = (*s1)->vma - (*s2)->vma;
+
+ if (delta != 0)
+ return delta < 0 ? -1 : 1;
+
+ return (*s1)->index - (*s2)->index;
+}
+
+/* Identify overlays in the output bfd, and number them. */
+
+bfd_boolean
+spu_elf_find_overlays (bfd *output_bfd, struct bfd_link_info *info)
+{
+ struct spu_link_hash_table *htab = spu_hash_table (info);
+ asection **alloc_sec;
+ unsigned int i, n, ovl_index, num_buf;
+ asection *s;
+ bfd_vma ovl_end;
+
+ if (output_bfd->section_count < 2)
+ return FALSE;
+
+ alloc_sec = bfd_malloc (output_bfd->section_count * sizeof (*alloc_sec));
+ if (alloc_sec == NULL)
+ return FALSE;
+
+ /* Pick out all the alloced sections. */
+ for (n = 0, s = output_bfd->sections; s != NULL; s = s->next)
+ if ((s->flags & SEC_ALLOC) != 0
+ && (s->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != SEC_THREAD_LOCAL
+ && s->size != 0)
+ alloc_sec[n++] = s;
+
+ if (n == 0)
+ {
+ free (alloc_sec);
+ return FALSE;
+ }
+
+ /* Sort them by vma. */
+ qsort (alloc_sec, n, sizeof (*alloc_sec), sort_sections);
+
+ /* Look for overlapping vmas. Any with overlap must be overlays.
+ Count them. Also count the number of overlay regions and for
+ each region save a section from that region with the lowest vma
+ and another section with the highest end vma. */
+ ovl_end = alloc_sec[0]->vma + alloc_sec[0]->size;
+ for (ovl_index = 0, num_buf = 0, i = 1; i < n; i++)
+ {
+ s = alloc_sec[i];
+ if (s->vma < ovl_end)
+ {
+ asection *s0 = alloc_sec[i - 1];
+
+ if (spu_elf_section_data (s0)->ovl_index == 0)
+ {
+ spu_elf_section_data (s0)->ovl_index = ++ovl_index;
+ alloc_sec[num_buf * 2] = s0;
+ alloc_sec[num_buf * 2 + 1] = s0;
+ num_buf++;
+ }
+ spu_elf_section_data (s)->ovl_index = ++ovl_index;
+ if (ovl_end < s->vma + s->size)
+ {
+ ovl_end = s->vma + s->size;
+ alloc_sec[num_buf * 2 - 1] = s;
+ }
+ }
+ else
+ ovl_end = s->vma + s->size;
+ }
+
+ htab->num_overlays = ovl_index;
+ htab->num_buf = num_buf;
+ if (ovl_index == 0)
+ {
+ free (alloc_sec);
+ return FALSE;
+ }
+
+ alloc_sec = bfd_realloc (alloc_sec, num_buf * 2 * sizeof (*alloc_sec));
+ if (alloc_sec == NULL)
+ return FALSE;
+
+ htab->ovl_region = alloc_sec;
+ return TRUE;
+}
+
+/* One of these per stub. */
+#define SIZEOF_STUB1 8
+#define ILA_79 0x4200004f /* ila $79,function_address */
+#define BR 0x32000000 /* br stub2 */
+
+/* One of these per overlay. */
+#define SIZEOF_STUB2 8
+#define ILA_78 0x4200004e /* ila $78,overlay_number */
+ /* br __ovly_load */
+#define NOP 0x40200000
+
+/* Return true for all relative and absolute branch instructions.
+ bra 00110000 0..
+ brasl 00110001 0..
+ br 00110010 0..
+ brsl 00110011 0..
+ brz 00100000 0..
+ brnz 00100001 0..
+ brhz 00100010 0..
+ brhnz 00100011 0.. */
+
+static bfd_boolean
+is_branch (const unsigned char *insn)
+{
+ return (insn[0] & 0xec) == 0x20 && (insn[1] & 0x80) == 0;
+}
+
+/* Return true for branch hint instructions.
+ hbra 0001000..
+ hbrr 0001001.. */
+
+static bfd_boolean
+is_hint (const unsigned char *insn)
+{
+ return (insn[0] & 0xfc) == 0x10;
+}
+
+/* Return TRUE if this reloc symbol should possibly go via an overlay stub. */
+
+static bfd_boolean
+needs_ovl_stub (const char *sym_name,
+ asection *sym_sec,
+ asection *input_section,
+ struct spu_link_hash_table *htab,
+ bfd_boolean is_branch)
+{
+ if (htab->num_overlays == 0)
+ return FALSE;
+
+ if (sym_sec == NULL
+ || sym_sec->output_section == NULL
+ || spu_elf_section_data (sym_sec->output_section) == NULL)
+ return FALSE;
+
+ /* setjmp always goes via an overlay stub, because then the return
+ and hence the longjmp goes via __ovly_return. That magically
+ makes setjmp/longjmp between overlays work. */
+ if (strncmp (sym_name, "setjmp", 6) == 0
+ && (sym_name[6] == '\0' || sym_name[6] == '@'))
+ return TRUE;
+
+ /* Usually, symbols in non-overlay sections don't need stubs. */
+ if (spu_elf_section_data (sym_sec->output_section)->ovl_index == 0
+ && !htab->non_overlay_stubs)
+ return FALSE;
+
+ /* A reference from some other section to a symbol in an overlay
+ section needs a stub. */
+ if (spu_elf_section_data (sym_sec->output_section)->ovl_index
+ != spu_elf_section_data (input_section->output_section)->ovl_index)
+ return TRUE;
+
+ /* If this insn isn't a branch then we are possibly taking the
+ address of a function and passing it out somehow. */
+ return !is_branch;
+}
+
+struct stubarr {
+ struct bfd_hash_table *stub_hash_table;
+ struct spu_stub_hash_entry **sh;
+ unsigned int count;
+ int err;
+};
+
+/* Called via elf_link_hash_traverse to allocate stubs for any _SPUEAR_
+ symbols. */
+
+static bfd_boolean
+allocate_spuear_stubs (struct elf_link_hash_entry *h, void *inf)
+{
+ /* Symbols starting with _SPUEAR_ need a stub because they may be
+ invoked by the PPU. */
+ if ((h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ && h->def_regular
+ && strncmp (h->root.root.string, "_SPUEAR_", 8) == 0)
+ {
+ struct stubarr *stubs = inf;
+ static Elf_Internal_Rela zero_rel;
+ char *stub_name = spu_stub_name (h->root.u.def.section, h, &zero_rel);
+ struct spu_stub_hash_entry *sh;
+
+ if (stub_name == NULL)
+ {
+ stubs->err = 1;
+ return FALSE;
+ }
+
+ sh = (struct spu_stub_hash_entry *)
+ bfd_hash_lookup (stubs->stub_hash_table, stub_name, TRUE, FALSE);
+ if (sh == NULL)
+ {
+ free (stub_name);
+ return FALSE;
+ }
+
+ /* If this entry isn't new, we already have a stub. */
+ if (sh->target_section != NULL)
+ {
+ free (stub_name);
+ return TRUE;
+ }
+
+ sh->target_section = h->root.u.def.section;
+ sh->target_off = h->root.u.def.value;
+ stubs->count += 1;
+ }
+
+ return TRUE;
+}
+
+/* Called via bfd_hash_traverse to set up pointers to all symbols
+ in the stub hash table. */
+
+static bfd_boolean
+populate_stubs (struct bfd_hash_entry *bh, void *inf)
+{
+ struct stubarr *stubs = inf;
+
+ stubs->sh[--stubs->count] = (struct spu_stub_hash_entry *) bh;
+ return TRUE;
+}
+
+/* qsort predicate to sort stubs by overlay number. */
+
+static int
+sort_stubs (const void *a, const void *b)
+{
+ const struct spu_stub_hash_entry *const *sa = a;
+ const struct spu_stub_hash_entry *const *sb = b;
+ int i;
+ bfd_signed_vma d;
+
+ i = spu_elf_section_data ((*sa)->target_section->output_section)->ovl_index;
+ i -= spu_elf_section_data ((*sb)->target_section->output_section)->ovl_index;
+ if (i != 0)
+ return i;
+
+ d = ((*sa)->target_section->output_section->vma
+ + (*sa)->target_section->output_offset
+ + (*sa)->target_off
+ - (*sb)->target_section->output_section->vma
+ - (*sb)->target_section->output_offset
+ - (*sb)->target_off);
+ if (d != 0)
+ return d < 0 ? -1 : 1;
+
+ /* Two functions at the same address. Aliases perhaps. */
+ i = strcmp ((*sb)->root.string, (*sa)->root.string);
+ BFD_ASSERT (i != 0);
+ return i;
+}
+
+/* Allocate space for overlay call and return stubs. */
+
+bfd_boolean
+spu_elf_size_stubs (bfd *output_bfd,
+ struct bfd_link_info *info,
+ int non_overlay_stubs,
+ int stack_analysis,
+ asection **stub,
+ asection **ovtab,
+ asection **toe)
+{
+ struct spu_link_hash_table *htab = spu_hash_table (info);
+ bfd *ibfd;
+ struct stubarr stubs;
+ unsigned i, group;
+ flagword flags;
+
+ htab->non_overlay_stubs = non_overlay_stubs;
+ stubs.stub_hash_table = &htab->stub_hash_table;
+ stubs.count = 0;
+ stubs.err = 0;
+ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+ {
+ extern const bfd_target bfd_elf32_spu_vec;
+ Elf_Internal_Shdr *symtab_hdr;
+ asection *section;
+ Elf_Internal_Sym *local_syms = NULL;
+ void *psyms;
+
+ if (ibfd->xvec != &bfd_elf32_spu_vec)
+ continue;
+
+ /* We'll need the symbol table in a second. */
+ symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
+ if (symtab_hdr->sh_info == 0)
+ continue;
+
+ /* Arrange to read and keep global syms for later stack analysis. */
+ psyms = &local_syms;
+ if (stack_analysis)
+ psyms = &symtab_hdr->contents;
+
+ /* Walk over each section attached to the input bfd. */
+ for (section = ibfd->sections; section != NULL; section = section->next)
+ {
+ Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
+
+ /* If there aren't any relocs, then there's nothing more to do. */
+ if ((section->flags & SEC_RELOC) == 0
+ || (section->flags & SEC_ALLOC) == 0
+ || (section->flags & SEC_LOAD) == 0
+ || section->reloc_count == 0)
+ continue;
+
+ /* If this section is a link-once section that will be
+ discarded, then don't create any stubs. */
+ if (section->output_section == NULL
+ || section->output_section->owner != output_bfd)
+ continue;
+
+ /* Get the relocs. */
+ internal_relocs
+ = _bfd_elf_link_read_relocs (ibfd, section, NULL, NULL,
+ info->keep_memory);
+ if (internal_relocs == NULL)
+ goto error_ret_free_local;
+
+ /* Now examine each relocation. */
+ irela = internal_relocs;
+ irelaend = irela + section->reloc_count;
+ for (; irela < irelaend; irela++)
+ {
+ enum elf_spu_reloc_type r_type;
+ unsigned int r_indx;
+ asection *sym_sec;
+ Elf_Internal_Sym *sym;
+ struct elf_link_hash_entry *h;
+ const char *sym_name;
+ char *stub_name;
+ struct spu_stub_hash_entry *sh;
+ unsigned int sym_type;
+ enum _insn_type { non_branch, branch, call } insn_type;
+
+ r_type = ELF32_R_TYPE (irela->r_info);
+ r_indx = ELF32_R_SYM (irela->r_info);
+
+ if (r_type >= R_SPU_max)
+ {
+ bfd_set_error (bfd_error_bad_value);
+ goto error_ret_free_internal;
+ }
+
+ /* Determine the reloc target section. */
+ if (!get_sym_h (&h, &sym, &sym_sec, psyms, r_indx, ibfd))
+ goto error_ret_free_internal;
+
+ if (sym_sec == NULL
+ || sym_sec->output_section == NULL
+ || sym_sec->output_section->owner != output_bfd)
+ continue;
+
+ /* Ensure no stubs for user supplied overlay manager syms. */
+ if (h != NULL
+ && (strcmp (h->root.root.string, "__ovly_load") == 0
+ || strcmp (h->root.root.string, "__ovly_return") == 0))
+ continue;
+
+ insn_type = non_branch;
+ if (r_type == R_SPU_REL16
+ || r_type == R_SPU_ADDR16)
+ {
+ unsigned char insn[4];
+
+ if (!bfd_get_section_contents (ibfd, section, insn,
+ irela->r_offset, 4))
+ goto error_ret_free_internal;
+
+ if (is_branch (insn) || is_hint (insn))
+ {
+ insn_type = branch;
+ if ((insn[0] & 0xfd) == 0x31)
+ insn_type = call;
+ }
+ }
+
+ /* We are only interested in function symbols. */
+ if (h != NULL)
+ {
+ sym_type = h->type;
+ sym_name = h->root.root.string;
+ }
+ else
+ {
+ sym_type = ELF_ST_TYPE (sym->st_info);
+ sym_name = bfd_elf_sym_name (sym_sec->owner,
+ symtab_hdr,
+ sym,
+ sym_sec);
+ }
+ if (sym_type != STT_FUNC)
+ {
+ /* It's common for people to write assembly and forget
+ to give function symbols the right type. Handle
+ calls to such symbols, but warn so that (hopefully)
+ people will fix their code. We need the symbol
+ type to be correct to distinguish function pointer
+ initialisation from other pointer initialisation. */
+ if (insn_type == call)
+ (*_bfd_error_handler) (_("warning: call to non-function"
+ " symbol %s defined in %B"),
+ sym_sec->owner, sym_name);
+ else
+ continue;
+ }
+
+ if (!needs_ovl_stub (sym_name, sym_sec, section, htab,
+ insn_type != non_branch))
+ continue;
+
+ stub_name = spu_stub_name (sym_sec, h, irela);
+ if (stub_name == NULL)
+ goto error_ret_free_internal;
+
+ sh = (struct spu_stub_hash_entry *)
+ bfd_hash_lookup (&htab->stub_hash_table, stub_name,
+ TRUE, FALSE);
+ if (sh == NULL)
+ {
+ free (stub_name);
+ error_ret_free_internal:
+ if (elf_section_data (section)->relocs != internal_relocs)
+ free (internal_relocs);
+ error_ret_free_local:
+ if (local_syms != NULL
+ && (symtab_hdr->contents
+ != (unsigned char *) local_syms))
+ free (local_syms);
+ return FALSE;
+ }
+
+ /* If this entry isn't new, we already have a stub. */
+ if (sh->target_section != NULL)
+ {
+ free (stub_name);
+ continue;
+ }
+
+ sh->target_section = sym_sec;
+ if (h != NULL)
+ sh->target_off = h->root.u.def.value;
+ else
+ sh->target_off = sym->st_value;
+ sh->target_off += irela->r_addend;
+
+ stubs.count += 1;
+ }
+
+ /* We're done with the internal relocs, free them. */
+ if (elf_section_data (section)->relocs != internal_relocs)
+ free (internal_relocs);
+ }
+
+ if (local_syms != NULL
+ && symtab_hdr->contents != (unsigned char *) local_syms)
+ {
+ if (!info->keep_memory)
+ free (local_syms);
+ else
+ symtab_hdr->contents = (unsigned char *) local_syms;
+ }
+ }
+
+ elf_link_hash_traverse (&htab->elf, allocate_spuear_stubs, &stubs);
+ if (stubs.err)
+ return FALSE;
+
+ *stub = NULL;
+ if (stubs.count == 0)
+ return TRUE;
+
+ ibfd = info->input_bfds;
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
+ | SEC_HAS_CONTENTS | SEC_IN_MEMORY);
+ htab->stub = bfd_make_section_anyway_with_flags (ibfd, ".stub", flags);
+ *stub = htab->stub;
+ if (htab->stub == NULL
+ || !bfd_set_section_alignment (ibfd, htab->stub, 2))
+ return FALSE;
+
+ flags = (SEC_ALLOC | SEC_LOAD
+ | SEC_HAS_CONTENTS | SEC_IN_MEMORY);
+ htab->ovtab = bfd_make_section_anyway_with_flags (ibfd, ".ovtab", flags);
+ *ovtab = htab->ovtab;
+ if (htab->ovtab == NULL
+ || !bfd_set_section_alignment (ibfd, htab->stub, 4))
+ return FALSE;
+
+ *toe = bfd_make_section_anyway_with_flags (ibfd, ".toe", SEC_ALLOC);
+ if (*toe == NULL
+ || !bfd_set_section_alignment (ibfd, *toe, 4))
+ return FALSE;
+ (*toe)->size = 16;
+
+ /* Retrieve all the stubs and sort. */
+ stubs.sh = bfd_malloc (stubs.count * sizeof (*stubs.sh));
+ if (stubs.sh == NULL)
+ return FALSE;
+ i = stubs.count;
+ bfd_hash_traverse (&htab->stub_hash_table, populate_stubs, &stubs);
+ BFD_ASSERT (stubs.count == 0);
+
+ stubs.count = i;
+ qsort (stubs.sh, stubs.count, sizeof (*stubs.sh), sort_stubs);
+
+ /* Now that the stubs are sorted, place them in the stub section.
+ Stubs are grouped per overlay
+ . ila $79,func1
+ . br 1f
+ . ila $79,func2
+ . br 1f
+ .
+ .
+ . ila $79,funcn
+ . nop
+ . 1:
+ . ila $78,ovl_index
+ . br __ovly_load */
+
+ group = 0;
+ for (i = 0; i < stubs.count; i++)
+ {
+ if (spu_elf_section_data (stubs.sh[group]->target_section
+ ->output_section)->ovl_index
+ != spu_elf_section_data (stubs.sh[i]->target_section
+ ->output_section)->ovl_index)
+ {
+ htab->stub->size += SIZEOF_STUB2;
+ for (; group != i; group++)
+ stubs.sh[group]->delta
+ = stubs.sh[i - 1]->off - stubs.sh[group]->off;
+ }
+ if (group == i
+ || ((stubs.sh[i - 1]->target_section->output_section->vma
+ + stubs.sh[i - 1]->target_section->output_offset
+ + stubs.sh[i - 1]->target_off)
+ != (stubs.sh[i]->target_section->output_section->vma
+ + stubs.sh[i]->target_section->output_offset
+ + stubs.sh[i]->target_off)))
+ {
+ stubs.sh[i]->off = htab->stub->size;
+ htab->stub->size += SIZEOF_STUB1;
+ }
+ else
+ stubs.sh[i]->off = stubs.sh[i - 1]->off;
+ }
+ if (group != i)
+ htab->stub->size += SIZEOF_STUB2;
+ for (; group != i; group++)
+ stubs.sh[group]->delta = stubs.sh[i - 1]->off - stubs.sh[group]->off;
+
+ /* htab->ovtab consists of two arrays.
+ . struct {
+ . u32 vma;
+ . u32 size;
+ . u32 file_off;
+ . u32 buf;
+ . } _ovly_table[];
+ .
+ . struct {
+ . u32 mapped;
+ . } _ovly_buf_table[]; */
+
+ htab->ovtab->alignment_power = 4;
+ htab->ovtab->size = htab->num_overlays * 16 + htab->num_buf * 4;
+
+ return TRUE;
+}
+
+/* Functions to handle embedded spu_ovl.o object. */
+
+static void *
+ovl_mgr_open (struct bfd *nbfd ATTRIBUTE_UNUSED, void *stream)
+{
+ return stream;
+}
+
+static file_ptr
+ovl_mgr_pread (struct bfd *abfd ATTRIBUTE_UNUSED,
+ void *stream,
+ void *buf,
+ file_ptr nbytes,
+ file_ptr offset)
+{
+ struct _ovl_stream *os;
+ size_t count;
+ size_t max;
+
+ os = (struct _ovl_stream *) stream;
+ max = (const char *) os->end - (const char *) os->start;
+
+ if ((ufile_ptr) offset >= max)
+ return 0;
+
+ count = nbytes;
+ if (count > max - offset)
+ count = max - offset;
+
+ memcpy (buf, (const char *) os->start + offset, count);
+ return count;
+}
+
+bfd_boolean
+spu_elf_open_builtin_lib (bfd **ovl_bfd, const struct _ovl_stream *stream)
+{
+ *ovl_bfd = bfd_openr_iovec ("builtin ovl_mgr",
+ "elf32-spu",
+ ovl_mgr_open,
+ (void *) stream,
+ ovl_mgr_pread,
+ NULL,
+ NULL);
+ return *ovl_bfd != NULL;
+}
+
+/* Fill in the ila and br for a stub. On the last stub for a group,
+ write the stub that sets the overlay number too. */
+
+static bfd_boolean
+write_one_stub (struct bfd_hash_entry *bh, void *inf)
+{
+ struct spu_stub_hash_entry *ent = (struct spu_stub_hash_entry *) bh;
+ struct spu_link_hash_table *htab = inf;
+ asection *sec = htab->stub;
+ asection *s = ent->target_section;
+ unsigned int ovl;
+ bfd_vma val;
+
+ val = ent->target_off + s->output_offset + s->output_section->vma;
+ bfd_put_32 (sec->owner, ILA_79 + ((val << 7) & 0x01ffff80),
+ sec->contents + ent->off);
+ val = ent->delta + 4;
+ bfd_put_32 (sec->owner, BR + ((val << 5) & 0x007fff80),
+ sec->contents + ent->off + 4);
+
+ /* If this is the last stub of this group, write stub2. */
+ if (ent->delta == 0)
+ {
+ bfd_put_32 (sec->owner, NOP,
+ sec->contents + ent->off + 4);
+
+ ovl = spu_elf_section_data (s->output_section)->ovl_index;
+ bfd_put_32 (sec->owner, ILA_78 + ((ovl << 7) & 0x01ffff80),
+ sec->contents + ent->off + 8);
+
+ val = (htab->ovly_load->root.u.def.section->output_section->vma
+ + htab->ovly_load->root.u.def.section->output_offset
+ + htab->ovly_load->root.u.def.value
+ - (sec->output_section->vma
+ + sec->output_offset
+ + ent->off + 12));
+
+ if (val + 0x20000 >= 0x40000)
+ htab->stub_overflow = TRUE;
+
+ bfd_put_32 (sec->owner, BR + ((val << 5) & 0x007fff80),
+ sec->contents + ent->off + 12);
+ }
+
+ if (htab->emit_stub_syms)
+ {
+ struct elf_link_hash_entry *h;
+ size_t len1, len2;
+ char *name;
+
+ len1 = sizeof ("00000000.ovl_call.") - 1;
+ len2 = strlen (ent->root.string);
+ name = bfd_malloc (len1 + len2 + 1);
+ if (name == NULL)
+ return FALSE;
+ memcpy (name, "00000000.ovl_call.", len1);
+ memcpy (name + len1, ent->root.string, len2 + 1);
+ h = elf_link_hash_lookup (&htab->elf, name, TRUE, TRUE, FALSE);
+ free (name);
+ if (h == NULL)
+ return FALSE;
+ if (h->root.type == bfd_link_hash_new)
+ {
+ h->root.type = bfd_link_hash_defined;
+ h->root.u.def.section = sec;
+ h->root.u.def.value = ent->off;
+ h->size = (ent->delta == 0
+ ? SIZEOF_STUB1 + SIZEOF_STUB2 : SIZEOF_STUB1);
+ h->type = STT_FUNC;
+ h->ref_regular = 1;
+ h->def_regular = 1;
+ h->ref_regular_nonweak = 1;
+ h->forced_local = 1;
+ h->non_elf = 0;
+ }
+ }
+
+ return TRUE;
+}
+
+/* Define an STT_OBJECT symbol. */
+
+static struct elf_link_hash_entry *
+define_ovtab_symbol (struct spu_link_hash_table *htab, const char *name)
+{
+ struct elf_link_hash_entry *h;
+
+ h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
+ if (h == NULL)
+ return NULL;
+
+ if (h->root.type != bfd_link_hash_defined
+ || !h->def_regular)
+ {
+ h->root.type = bfd_link_hash_defined;
+ h->root.u.def.section = htab->ovtab;
+ h->type = STT_OBJECT;
+ h->ref_regular = 1;
+ h->def_regular = 1;
+ h->ref_regular_nonweak = 1;
+ h->non_elf = 0;
+ }
+ else
+ {
+ (*_bfd_error_handler) (_("%B is not allowed to define %s"),
+ h->root.u.def.section->owner,
+ h->root.root.string);
+ bfd_set_error (bfd_error_bad_value);
+ return NULL;
+ }
+
+ return h;
+}
+
+/* Fill in all stubs and the overlay tables. */
+
+bfd_boolean
+spu_elf_build_stubs (struct bfd_link_info *info, int emit_syms, asection *toe)
+{
+ struct spu_link_hash_table *htab = spu_hash_table (info);
+ struct elf_link_hash_entry *h;
+ bfd_byte *p;
+ asection *s;
+ bfd *obfd;
+ unsigned int i;
+
+ htab->emit_stub_syms = emit_syms;
+ htab->stub->contents = bfd_zalloc (htab->stub->owner, htab->stub->size);
+ if (htab->stub->contents == NULL)
+ return FALSE;
+
+ h = elf_link_hash_lookup (&htab->elf, "__ovly_load", FALSE, FALSE, FALSE);
+ htab->ovly_load = h;
+ BFD_ASSERT (h != NULL
+ && (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ && h->def_regular);
+
+ s = h->root.u.def.section->output_section;
+ if (spu_elf_section_data (s)->ovl_index)
+ {
+ (*_bfd_error_handler) (_("%s in overlay section"),
+ h->root.u.def.section->owner);
+ bfd_set_error (bfd_error_bad_value);
+ return FALSE;
+ }
+
+ /* Write out all the stubs. */
+ bfd_hash_traverse (&htab->stub_hash_table, write_one_stub, htab);
+
+ if (htab->stub_overflow)
+ {
+ (*_bfd_error_handler) (_("overlay stub relocation overflow"));
+ bfd_set_error (bfd_error_bad_value);
+ return FALSE;
+ }
+
+ htab->ovtab->contents = bfd_zalloc (htab->ovtab->owner, htab->ovtab->size);
+ if (htab->ovtab->contents == NULL)
+ return FALSE;
+
+ /* Write out _ovly_table. */
+ p = htab->ovtab->contents;
+ obfd = htab->ovtab->output_section->owner;
+ for (s = obfd->sections; s != NULL; s = s->next)
+ {
+ unsigned int ovl_index = spu_elf_section_data (s)->ovl_index;
+
+ if (ovl_index != 0)
+ {
+ unsigned int lo, hi, mid;
+ unsigned long off = (ovl_index - 1) * 16;
+ bfd_put_32 (htab->ovtab->owner, s->vma, p + off);
+ bfd_put_32 (htab->ovtab->owner, (s->size + 15) & -16, p + off + 4);
+ /* file_off written later in spu_elf_modify_program_headers. */
+
+ lo = 0;
+ hi = htab->num_buf;
+ while (lo < hi)
+ {
+ mid = (lo + hi) >> 1;
+ if (htab->ovl_region[2 * mid + 1]->vma
+ + htab->ovl_region[2 * mid + 1]->size <= s->vma)
+ lo = mid + 1;
+ else if (htab->ovl_region[2 * mid]->vma > s->vma)
+ hi = mid;
+ else
+ {
+ bfd_put_32 (htab->ovtab->owner, mid + 1, p + off + 12);
+ break;
+ }
+ }
+ BFD_ASSERT (lo < hi);
+ }
+ }
+
+ /* Write out _ovly_buf_table. */
+ p = htab->ovtab->contents + htab->num_overlays * 16;
+ for (i = 0; i < htab->num_buf; i++)
+ {
+ bfd_put_32 (htab->ovtab->owner, 0, p);
+ p += 4;
+ }
+
+ h = define_ovtab_symbol (htab, "_ovly_table");
+ if (h == NULL)
+ return FALSE;
+ h->root.u.def.value = 0;
+ h->size = htab->num_overlays * 16;
+
+ h = define_ovtab_symbol (htab, "_ovly_table_end");
+ if (h == NULL)
+ return FALSE;
+ h->root.u.def.value = htab->num_overlays * 16;
+ h->size = 0;
+
+ h = define_ovtab_symbol (htab, "_ovly_buf_table");
+ if (h == NULL)
+ return FALSE;
+ h->root.u.def.value = htab->num_overlays * 16;
+ h->size = htab->num_buf * 4;
+
+ h = define_ovtab_symbol (htab, "_ovly_buf_table_end");
+ if (h == NULL)
+ return FALSE;
+ h->root.u.def.value = htab->num_overlays * 16 + htab->num_buf * 4;
+ h->size = 0;
+
+ h = define_ovtab_symbol (htab, "_EAR_");
+ if (h == NULL)
+ return FALSE;
+ h->root.u.def.section = toe;
+ h->root.u.def.value = 0;
+ h->size = 16;
+
+ return TRUE;
+}
+
+/* OFFSET in SEC (presumably) is the beginning of a function prologue.
+ Search for stack adjusting insns, and return the sp delta. */
+
+static int
+find_function_stack_adjust (asection *sec, bfd_vma offset)
+{
+ int unrecog;
+ int reg[128];
+
+ memset (reg, 0, sizeof (reg));
+ for (unrecog = 0; offset + 4 <= sec->size && unrecog < 32; offset += 4)
+ {
+ unsigned char buf[4];
+ int rt, ra;
+ int imm;
+
+ /* Assume no relocs on stack adjusing insns. */
+ if (!bfd_get_section_contents (sec->owner, sec, buf, offset, 4))
+ break;
+
+ if (buf[0] == 0x24 /* stqd */)
+ continue;
+
+ rt = buf[3] & 0x7f;
+ ra = ((buf[2] & 0x3f) << 1) | (buf[3] >> 7);
+ /* Partly decoded immediate field. */
+ imm = (buf[1] << 9) | (buf[2] << 1) | (buf[3] >> 7);
+
+ if (buf[0] == 0x1c /* ai */)
+ {
+ imm >>= 7;
+ imm = (imm ^ 0x200) - 0x200;
+ reg[rt] = reg[ra] + imm;
+
+ if (rt == 1 /* sp */)
+ {
+ if (imm > 0)
+ break;
+ return reg[rt];
+ }
+ }
+ else if (buf[0] == 0x18 && (buf[1] & 0xe0) == 0 /* a */)
+ {
+ int rb = ((buf[1] & 0x1f) << 2) | ((buf[2] & 0xc0) >> 6);
+
+ reg[rt] = reg[ra] + reg[rb];
+ if (rt == 1)
+ return reg[rt];
+ }
+ else if ((buf[0] & 0xfc) == 0x40 /* il, ilh, ilhu, ila */)
+ {
+ if (buf[0] >= 0x42 /* ila */)
+ imm |= (buf[0] & 1) << 17;
+ else
+ {
+ imm &= 0xffff;
+
+ if (buf[0] == 0x40 /* il */)
+ {
+ if ((buf[1] & 0x80) == 0)
+ goto unknown_insn;
+ imm = (imm ^ 0x8000) - 0x8000;
+ }
+ else if ((buf[1] & 0x80) == 0 /* ilhu */)
+ imm <<= 16;
+ }
+ reg[rt] = imm;
+ continue;
+ }
+ else if (buf[0] == 0x60 && (buf[1] & 0x80) != 0 /* iohl */)
+ {
+ reg[rt] |= imm & 0xffff;
+ continue;
+ }
+ else if (buf[0] == 0x04 /* ori */)
+ {
+ imm >>= 7;
+ imm = (imm ^ 0x200) - 0x200;
+ reg[rt] = reg[ra] | imm;
+ continue;
+ }
+ else if ((buf[0] == 0x33 && imm == 1 /* brsl .+4 */)
+ || (buf[0] == 0x08 && (buf[1] & 0xe0) == 0 /* sf */))
+ {
+ /* Used in pic reg load. Say rt is trashed. */
+ reg[rt] = 0;
+ continue;
+ }
+ else if (is_branch (buf))
+ /* If we hit a branch then we must be out of the prologue. */
+ break;
+ unknown_insn:
+ ++unrecog;
+ }
+
+ return 0;
+}
+
+/* qsort predicate to sort symbols by section and value. */
+
+static Elf_Internal_Sym *sort_syms_syms;
+static asection **sort_syms_psecs;
+
+static int
+sort_syms (const void *a, const void *b)
+{
+ Elf_Internal_Sym *const *s1 = a;
+ Elf_Internal_Sym *const *s2 = b;
+ asection *sec1,*sec2;
+ bfd_signed_vma delta;
+
+ sec1 = sort_syms_psecs[*s1 - sort_syms_syms];
+ sec2 = sort_syms_psecs[*s2 - sort_syms_syms];
+
+ if (sec1 != sec2)
+ return sec1->index - sec2->index;
+
+ delta = (*s1)->st_value - (*s2)->st_value;
+ if (delta != 0)
+ return delta < 0 ? -1 : 1;
+
+ delta = (*s2)->st_size - (*s1)->st_size;
+ if (delta != 0)
+ return delta < 0 ? -1 : 1;
+
+ return *s1 < *s2 ? -1 : 1;
+}
+
+struct call_info
+{
+ struct function_info *fun;
+ struct call_info *next;
+ int is_tail;
+};
+
+struct function_info
+{
+ /* List of functions called. Also branches to hot/cold part of
+ function. */
+ struct call_info *call_list;
+ /* For hot/cold part of function, point to owner. */
+ struct function_info *start;
+ /* Symbol at start of function. */
+ union {
+ Elf_Internal_Sym *sym;
+ struct elf_link_hash_entry *h;
+ } u;
+ /* Function section. */
+ asection *sec;
+ /* Address range of (this part of) function. */
+ bfd_vma lo, hi;
+ /* Stack usage. */
+ int stack;
+ /* Set if global symbol. */
+ unsigned int global : 1;
+ /* Set if known to be start of function (as distinct from a hunk
+ in hot/cold section. */
+ unsigned int is_func : 1;
+ /* Flags used during call tree traversal. */
+ unsigned int visit1 : 1;
+ unsigned int non_root : 1;
+ unsigned int visit2 : 1;
+ unsigned int marking : 1;
+ unsigned int visit3 : 1;
+};
+
+struct spu_elf_stack_info
+{
+ int num_fun;
+ int max_fun;
+ /* Variable size array describing functions, one per contiguous
+ address range belonging to a function. */
+ struct function_info fun[1];
+};
+
+/* Allocate a struct spu_elf_stack_info with MAX_FUN struct function_info
+ entries for section SEC. */
+
+static struct spu_elf_stack_info *
+alloc_stack_info (asection *sec, int max_fun)
+{
+ struct _spu_elf_section_data *sec_data = spu_elf_section_data (sec);
+ bfd_size_type amt;
+
+ amt = sizeof (struct spu_elf_stack_info);
+ amt += (max_fun - 1) * sizeof (struct function_info);
+ sec_data->stack_info = bfd_zmalloc (amt);
+ if (sec_data->stack_info != NULL)
+ sec_data->stack_info->max_fun = max_fun;
+ return sec_data->stack_info;
+}
+
+/* Add a new struct function_info describing a (part of a) function
+ starting at SYM_H. Keep the array sorted by address. */
+
+static struct function_info *
+maybe_insert_function (asection *sec,
+ void *sym_h,
+ bfd_boolean global,
+ bfd_boolean is_func)
+{
+ struct _spu_elf_section_data *sec_data = spu_elf_section_data (sec);
+ struct spu_elf_stack_info *sinfo = sec_data->stack_info;
+ int i;
+ bfd_vma off, size;
+
+ if (sinfo == NULL)
+ {
+ sinfo = alloc_stack_info (sec, 20);
+ if (sinfo == NULL)
+ return NULL;
+ }
+
+ if (!global)
+ {
+ Elf_Internal_Sym *sym = sym_h;
+ off = sym->st_value;
+ size = sym->st_size;
+ }
+ else
+ {
+ struct elf_link_hash_entry *h = sym_h;
+ off = h->root.u.def.value;
+ size = h->size;
+ }
+
+ for (i = sinfo->num_fun; --i >= 0; )
+ if (sinfo->fun[i].lo <= off)
+ break;
+
+ if (i >= 0)
+ {
+ /* Don't add another entry for an alias, but do update some
+ info. */
+ if (sinfo->fun[i].lo == off)
+ {
+ /* Prefer globals over local syms. */
+ if (global && !sinfo->fun[i].global)
+ {
+ sinfo->fun[i].global = TRUE;
+ sinfo->fun[i].u.h = sym_h;
+ }
+ if (is_func)
+ sinfo->fun[i].is_func = TRUE;
+ return &sinfo->fun[i];
+ }
+ /* Ignore a zero-size symbol inside an existing function. */
+ else if (sinfo->fun[i].hi > off && size == 0)
+ return &sinfo->fun[i];
+ }
+
+ if (++i < sinfo->num_fun)
+ memmove (&sinfo->fun[i + 1], &sinfo->fun[i],
+ (sinfo->num_fun - i) * sizeof (sinfo->fun[i]));
+ else if (i >= sinfo->max_fun)
+ {
+ bfd_size_type amt = sizeof (struct spu_elf_stack_info);
+ bfd_size_type old = amt;
+
+ old += (sinfo->max_fun - 1) * sizeof (struct function_info);
+ sinfo->max_fun += 20 + (sinfo->max_fun >> 1);
+ amt += (sinfo->max_fun - 1) * sizeof (struct function_info);
+ sinfo = bfd_realloc (sinfo, amt);
+ if (sinfo == NULL)
+ return NULL;
+ memset ((char *) sinfo + old, 0, amt - old);
+ sec_data->stack_info = sinfo;
+ }
+ sinfo->fun[i].is_func = is_func;
+ sinfo->fun[i].global = global;
+ sinfo->fun[i].sec = sec;
+ if (global)
+ sinfo->fun[i].u.h = sym_h;
+ else
+ sinfo->fun[i].u.sym = sym_h;
+ sinfo->fun[i].lo = off;
+ sinfo->fun[i].hi = off + size;
+ sinfo->fun[i].stack = -find_function_stack_adjust (sec, off);
+ sinfo->num_fun += 1;
+ return &sinfo->fun[i];
+}
+
+/* Return the name of FUN. */
+
+static const char *
+func_name (struct function_info *fun)
+{
+ asection *sec;
+ bfd *ibfd;
+ Elf_Internal_Shdr *symtab_hdr;
+
+ while (fun->start != NULL)
+ fun = fun->start;
+
+ if (fun->global)
+ return fun->u.h->root.root.string;
+
+ sec = fun->sec;
+ if (fun->u.sym->st_name == 0)
+ {
+ size_t len = strlen (sec->name);
+ char *name = bfd_malloc (len + 10);
+ if (name == NULL)
+ return "(null)";
+ sprintf (name, "%s+%lx", sec->name,
+ (unsigned long) fun->u.sym->st_value & 0xffffffff);
+ return name;
+ }
+ ibfd = sec->owner;
+ symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
+ return bfd_elf_sym_name (ibfd, symtab_hdr, fun->u.sym, sec);
+}
+
+/* Read the instruction at OFF in SEC. Return true iff the instruction
+ is a nop, lnop, or stop 0 (all zero insn). */
+
+static bfd_boolean
+is_nop (asection *sec, bfd_vma off)
+{
+ unsigned char insn[4];
+
+ if (off + 4 > sec->size
+ || !bfd_get_section_contents (sec->owner, sec, insn, off, 4))
+ return FALSE;
+ if ((insn[0] & 0xbf) == 0 && (insn[1] & 0xe0) == 0x20)
+ return TRUE;
+ if (insn[0] == 0 && insn[1] == 0 && insn[2] == 0 && insn[3] == 0)
+ return TRUE;
+ return FALSE;
+}
+
+/* Extend the range of FUN to cover nop padding up to LIMIT.
+ Return TRUE iff some instruction other than a NOP was found. */
+
+static bfd_boolean
+insns_at_end (struct function_info *fun, bfd_vma limit)
+{
+ bfd_vma off = (fun->hi + 3) & -4;
+
+ while (off < limit && is_nop (fun->sec, off))
+ off += 4;
+ if (off < limit)
+ {
+ fun->hi = off;
+ return TRUE;
+ }
+ fun->hi = limit;
+ return FALSE;
+}
+
+/* Check and fix overlapping function ranges. Return TRUE iff there
+ are gaps in the current info we have about functions in SEC. */
+
+static bfd_boolean
+check_function_ranges (asection *sec, struct bfd_link_info *info)
+{
+ struct _spu_elf_section_data *sec_data = spu_elf_section_data (sec);
+ struct spu_elf_stack_info *sinfo = sec_data->stack_info;
+ int i;
+ bfd_boolean gaps = FALSE;
+
+ if (sinfo == NULL)
+ return FALSE;
+
+ for (i = 1; i < sinfo->num_fun; i++)
+ if (sinfo->fun[i - 1].hi > sinfo->fun[i].lo)
+ {
+ /* Fix overlapping symbols. */
+ const char *f1 = func_name (&sinfo->fun[i - 1]);
+ const char *f2 = func_name (&sinfo->fun[i]);
+
+ info->callbacks->einfo (_("warning: %s overlaps %s\n"), f1, f2);
+ sinfo->fun[i - 1].hi = sinfo->fun[i].lo;
+ }
+ else if (insns_at_end (&sinfo->fun[i - 1], sinfo->fun[i].lo))
+ gaps = TRUE;
+
+ if (sinfo->num_fun == 0)
+ gaps = TRUE;
+ else
+ {
+ if (sinfo->fun[0].lo != 0)
+ gaps = TRUE;
+ if (sinfo->fun[sinfo->num_fun - 1].hi > sec->size)
+ {
+ const char *f1 = func_name (&sinfo->fun[sinfo->num_fun - 1]);
+
+ info->callbacks->einfo (_("warning: %s exceeds section size\n"), f1);
+ sinfo->fun[sinfo->num_fun - 1].hi = sec->size;
+ }
+ else if (insns_at_end (&sinfo->fun[sinfo->num_fun - 1], sec->size))
+ gaps = TRUE;
+ }
+ return gaps;
+}
+
+/* Search current function info for a function that contains address
+ OFFSET in section SEC. */
+
+static struct function_info *
+find_function (asection *sec, bfd_vma offset, struct bfd_link_info *info)
+{
+ struct _spu_elf_section_data *sec_data = spu_elf_section_data (sec);
+ struct spu_elf_stack_info *sinfo = sec_data->stack_info;
+ int lo, hi, mid;
+
+ lo = 0;
+ hi = sinfo->num_fun;
+ while (lo < hi)
+ {
+ mid = (lo + hi) / 2;
+ if (offset < sinfo->fun[mid].lo)
+ hi = mid;
+ else if (offset >= sinfo->fun[mid].hi)
+ lo = mid + 1;
+ else
+ return &sinfo->fun[mid];
+ }
+ info->callbacks->einfo (_("%A:0x%v not found in function table\n"),
+ sec, offset);
+ return NULL;
+}
+
+/* Add CALLEE to CALLER call list if not already present. */
+
+static bfd_boolean
+insert_callee (struct function_info *caller, struct call_info *callee)
+{
+ struct call_info *p;
+ for (p = caller->call_list; p != NULL; p = p->next)
+ if (p->fun == callee->fun)
+ {
+ /* Tail calls use less stack than normal calls. Retain entry
+ for normal call over one for tail call. */
+ if (p->is_tail > callee->is_tail)
+ p->is_tail = callee->is_tail;
+ return FALSE;
+ }
+ callee->next = caller->call_list;
+ caller->call_list = callee;
+ return TRUE;
+}
+
+/* Rummage through the relocs for SEC, looking for function calls.
+ If CALL_TREE is true, fill in call graph. If CALL_TREE is false,
+ mark destination symbols on calls as being functions. Also
+ look at branches, which may be tail calls or go to hot/cold
+ section part of same function. */
+
+static bfd_boolean
+mark_functions_via_relocs (asection *sec,
+ struct bfd_link_info *info,
+ int call_tree)
+{
+ Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
+ Elf_Internal_Shdr *symtab_hdr = &elf_tdata (sec->owner)->symtab_hdr;
+ Elf_Internal_Sym *syms;
+ void *psyms;
+ static bfd_boolean warned;
+
+ internal_relocs = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL,
+ info->keep_memory);
+ if (internal_relocs == NULL)
+ return FALSE;
+
+ symtab_hdr = &elf_tdata (sec->owner)->symtab_hdr;
+ psyms = &symtab_hdr->contents;
+ syms = *(Elf_Internal_Sym **) psyms;
+ irela = internal_relocs;
+ irelaend = irela + sec->reloc_count;
+ for (; irela < irelaend; irela++)
+ {
+ enum elf_spu_reloc_type r_type;
+ unsigned int r_indx;
+ asection *sym_sec;
+ Elf_Internal_Sym *sym;
+ struct elf_link_hash_entry *h;
+ bfd_vma val;
+ unsigned char insn[4];
+ bfd_boolean is_call;
+ struct function_info *caller;
+ struct call_info *callee;
+
+ r_type = ELF32_R_TYPE (irela->r_info);
+ if (r_type != R_SPU_REL16
+ && r_type != R_SPU_ADDR16)
+ continue;
+
+ r_indx = ELF32_R_SYM (irela->r_info);
+ if (!get_sym_h (&h, &sym, &sym_sec, psyms, r_indx, sec->owner))
+ return FALSE;
+
+ if (sym_sec == NULL
+ || sym_sec->output_section == NULL
+ || sym_sec->output_section->owner != sec->output_section->owner)
+ continue;
+
+ if (!bfd_get_section_contents (sec->owner, sec, insn,
+ irela->r_offset, 4))
+ return FALSE;
+ if (!is_branch (insn))
+ continue;
+
+ if ((sym_sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_CODE))
+ != (SEC_ALLOC | SEC_LOAD | SEC_CODE))
+ {
+ if (!call_tree)
+ warned = TRUE;
+ if (!call_tree || !warned)
+ info->callbacks->einfo (_("%B(%A+0x%v): call to non-code section"
+ " %B(%A), stack analysis incomplete\n"),
+ sec->owner, sec, irela->r_offset,
+ sym_sec->owner, sym_sec);
+ continue;
+ }
+
+ is_call = (insn[0] & 0xfd) == 0x31;
+
+ if (h)
+ val = h->root.u.def.value;
+ else
+ val = sym->st_value;
+ val += irela->r_addend;
+
+ if (!call_tree)
+ {
+ struct function_info *fun;
+
+ if (irela->r_addend != 0)
+ {
+ Elf_Internal_Sym *fake = bfd_zmalloc (sizeof (*fake));
+ if (fake == NULL)
+ return FALSE;
+ fake->st_value = val;
+ fake->st_shndx
+ = _bfd_elf_section_from_bfd_section (sym_sec->owner, sym_sec);
+ sym = fake;
+ }
+ if (sym)
+ fun = maybe_insert_function (sym_sec, sym, FALSE, is_call);
+ else
+ fun = maybe_insert_function (sym_sec, h, TRUE, is_call);
+ if (fun == NULL)
+ return FALSE;
+ if (irela->r_addend != 0
+ && fun->u.sym != sym)
+ free (sym);
+ continue;
+ }
+
+ caller = find_function (sec, irela->r_offset, info);
+ if (caller == NULL)
+ return FALSE;
+ callee = bfd_malloc (sizeof *callee);
+ if (callee == NULL)
+ return FALSE;
+
+ callee->fun = find_function (sym_sec, val, info);
+ if (callee->fun == NULL)
+ return FALSE;
+ callee->is_tail = !is_call;
+ if (!insert_callee (caller, callee))
+ free (callee);
+ else if (!is_call
+ && !callee->fun->is_func
+ && callee->fun->stack == 0)
+ {
+ /* This is either a tail call or a branch from one part of
+ the function to another, ie. hot/cold section. If the
+ destination has been called by some other function then
+ it is a separate function. We also assume that functions
+ are not split across input files. */
+ if (callee->fun->start != NULL
+ || sec->owner != sym_sec->owner)
+ {
+ callee->fun->start = NULL;
+ callee->fun->is_func = TRUE;
+ }
+ else
+ callee->fun->start = caller;
+ }
+ }
+
+ return TRUE;
+}
+
+/* Handle something like .init or .fini, which has a piece of a function.
+ These sections are pasted together to form a single function. */
+
+static bfd_boolean
+pasted_function (asection *sec, struct bfd_link_info *info)
+{
+ struct bfd_link_order *l;
+ struct _spu_elf_section_data *sec_data;
+ struct spu_elf_stack_info *sinfo;
+ Elf_Internal_Sym *fake;
+ struct function_info *fun, *fun_start;
+
+ fake = bfd_zmalloc (sizeof (*fake));
+ if (fake == NULL)
+ return FALSE;
+ fake->st_value = 0;
+ fake->st_size = sec->size;
+ fake->st_shndx
+ = _bfd_elf_section_from_bfd_section (sec->owner, sec);
+ fun = maybe_insert_function (sec, fake, FALSE, FALSE);
+ if (!fun)
+ return FALSE;
+
+ /* Find a function immediately preceding this section. */
+ fun_start = NULL;
+ for (l = sec->output_section->map_head.link_order; l != NULL; l = l->next)
+ {
+ if (l->u.indirect.section == sec)
+ {
+ if (fun_start != NULL)
+ {
+ if (fun_start->start)
+ fun_start = fun_start->start;
+ fun->start = fun_start;
+ }
+ return TRUE;
+ }
+ if (l->type == bfd_indirect_link_order
+ && (sec_data = spu_elf_section_data (l->u.indirect.section)) != NULL
+ && (sinfo = sec_data->stack_info) != NULL
+ && sinfo->num_fun != 0)
+ fun_start = &sinfo->fun[sinfo->num_fun - 1];
+ }
+
+ info->callbacks->einfo (_("%A link_order not found\n"), sec);
+ return FALSE;
+}
+
+/* We're only interested in code sections. */
+
+static bfd_boolean
+interesting_section (asection *s, bfd *obfd, struct spu_link_hash_table *htab)
+{
+ return (s != htab->stub
+ && s->output_section != NULL
+ && s->output_section->owner == obfd
+ && ((s->flags & (SEC_ALLOC | SEC_LOAD | SEC_CODE))
+ == (SEC_ALLOC | SEC_LOAD | SEC_CODE))
+ && s->size != 0);
+}
+
+/* Map address ranges in code sections to functions. */
+
+static bfd_boolean
+discover_functions (bfd *output_bfd, struct bfd_link_info *info)
+{
+ struct spu_link_hash_table *htab = spu_hash_table (info);
+ bfd *ibfd;
+ int bfd_idx;
+ Elf_Internal_Sym ***psym_arr;
+ asection ***sec_arr;
+ bfd_boolean gaps = FALSE;
+
+ bfd_idx = 0;
+ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+ bfd_idx++;
+
+ psym_arr = bfd_zmalloc (bfd_idx * sizeof (*psym_arr));
+ if (psym_arr == NULL)
+ return FALSE;
+ sec_arr = bfd_zmalloc (bfd_idx * sizeof (*sec_arr));
+ if (sec_arr == NULL)
+ return FALSE;
+
+
+ for (ibfd = info->input_bfds, bfd_idx = 0;
+ ibfd != NULL;
+ ibfd = ibfd->link_next, bfd_idx++)
+ {
+ extern const bfd_target bfd_elf32_spu_vec;
+ Elf_Internal_Shdr *symtab_hdr;
+ asection *sec;
+ size_t symcount;
+ Elf_Internal_Sym *syms, *sy, **psyms, **psy;
+ asection **psecs, **p;
+
+ if (ibfd->xvec != &bfd_elf32_spu_vec)
+ continue;
+
+ /* Read all the symbols. */
+ symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
+ symcount = symtab_hdr->sh_size / symtab_hdr->sh_entsize;
+ if (symcount == 0)
+ continue;
+
+ syms = (Elf_Internal_Sym *) symtab_hdr->contents;
+ if (syms == NULL)
+ {
+ syms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, symcount, 0,
+ NULL, NULL, NULL);
+ symtab_hdr->contents = (void *) syms;
+ if (syms == NULL)
+ return FALSE;
+ }
+
+ /* Select defined function symbols that are going to be output. */
+ psyms = bfd_malloc ((symcount + 1) * sizeof (*psyms));
+ if (psyms == NULL)
+ return FALSE;
+ psym_arr[bfd_idx] = psyms;
+ psecs = bfd_malloc (symcount * sizeof (*psecs));
+ if (psecs == NULL)
+ return FALSE;
+ sec_arr[bfd_idx] = psecs;
+ for (psy = psyms, p = psecs, sy = syms; sy < syms + symcount; ++p, ++sy)
+ if (ELF_ST_TYPE (sy->st_info) == STT_NOTYPE
+ || ELF_ST_TYPE (sy->st_info) == STT_FUNC)
+ {
+ asection *s;
+
+ *p = s = bfd_section_from_elf_index (ibfd, sy->st_shndx);
+ if (s != NULL && interesting_section (s, output_bfd, htab))
+ *psy++ = sy;
+ }
+ symcount = psy - psyms;
+ *psy = NULL;
+
+ /* Sort them by section and offset within section. */
+ sort_syms_syms = syms;
+ sort_syms_psecs = psecs;
+ qsort (psyms, symcount, sizeof (*psyms), sort_syms);
+
+ /* Now inspect the function symbols. */
+ for (psy = psyms; psy < psyms + symcount; )
+ {
+ asection *s = psecs[*psy - syms];
+ Elf_Internal_Sym **psy2;
+
+ for (psy2 = psy; ++psy2 < psyms + symcount; )
+ if (psecs[*psy2 - syms] != s)
+ break;
+
+ if (!alloc_stack_info (s, psy2 - psy))
+ return FALSE;
+ psy = psy2;
+ }
+
+ /* First install info about properly typed and sized functions.
+ In an ideal world this will cover all code sections, except
+ when partitioning functions into hot and cold sections,
+ and the horrible pasted together .init and .fini functions. */
+ for (psy = psyms; psy < psyms + symcount; ++psy)
+ {
+ sy = *psy;
+ if (ELF_ST_TYPE (sy->st_info) == STT_FUNC)
+ {
+ asection *s = psecs[sy - syms];
+ if (!maybe_insert_function (s, sy, FALSE, TRUE))
+ return FALSE;
+ }
+ }
+
+ for (sec = ibfd->sections; sec != NULL && !gaps; sec = sec->next)
+ if (interesting_section (sec, output_bfd, htab))
+ gaps |= check_function_ranges (sec, info);
+ }
+
+ if (gaps)
+ {
+ /* See if we can discover more function symbols by looking at
+ relocations. */
+ for (ibfd = info->input_bfds, bfd_idx = 0;
+ ibfd != NULL;
+ ibfd = ibfd->link_next, bfd_idx++)
+ {
+ asection *sec;
+
+ if (psym_arr[bfd_idx] == NULL)
+ continue;
+
+ for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+ if (interesting_section (sec, output_bfd, htab)
+ && sec->reloc_count != 0)
+ {
+ if (!mark_functions_via_relocs (sec, info, FALSE))
+ return FALSE;
+ }
+ }
+
+ for (ibfd = info->input_bfds, bfd_idx = 0;
+ ibfd != NULL;
+ ibfd = ibfd->link_next, bfd_idx++)
+ {
+ Elf_Internal_Shdr *symtab_hdr;
+ asection *sec;
+ Elf_Internal_Sym *syms, *sy, **psyms, **psy;
+ asection **psecs;
+
+ if ((psyms = psym_arr[bfd_idx]) == NULL)
+ continue;
+
+ psecs = sec_arr[bfd_idx];
+
+ symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
+ syms = (Elf_Internal_Sym *) symtab_hdr->contents;
+
+ gaps = FALSE;
+ for (sec = ibfd->sections; sec != NULL && !gaps; sec = sec->next)
+ if (interesting_section (sec, output_bfd, htab))
+ gaps |= check_function_ranges (sec, info);
+ if (!gaps)
+ continue;
+
+ /* Finally, install all globals. */
+ for (psy = psyms; (sy = *psy) != NULL; ++psy)
+ {
+ asection *s;
+
+ s = psecs[sy - syms];
+
+ /* Global syms might be improperly typed functions. */
+ if (ELF_ST_TYPE (sy->st_info) != STT_FUNC
+ && ELF_ST_BIND (sy->st_info) == STB_GLOBAL)
+ {
+ if (!maybe_insert_function (s, sy, FALSE, FALSE))
+ return FALSE;
+ }
+ }
+
+ /* Some of the symbols we've installed as marking the
+ beginning of functions may have a size of zero. Extend
+ the range of such functions to the beginning of the
+ next symbol of interest. */
+ for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+ if (interesting_section (sec, output_bfd, htab))
+ {
+ struct _spu_elf_section_data *sec_data;
+ struct spu_elf_stack_info *sinfo;
+
+ sec_data = spu_elf_section_data (sec);
+ sinfo = sec_data->stack_info;
+ if (sinfo != NULL)
+ {
+ int fun_idx;
+ bfd_vma hi = sec->size;
+
+ for (fun_idx = sinfo->num_fun; --fun_idx >= 0; )
+ {
+ sinfo->fun[fun_idx].hi = hi;
+ hi = sinfo->fun[fun_idx].lo;
+ }
+ }
+ /* No symbols in this section. Must be .init or .fini
+ or something similar. */
+ else if (!pasted_function (sec, info))
+ return FALSE;
+ }
+ }
+ }
+
+ for (ibfd = info->input_bfds, bfd_idx = 0;
+ ibfd != NULL;
+ ibfd = ibfd->link_next, bfd_idx++)
+ {
+ if (psym_arr[bfd_idx] == NULL)
+ continue;
+
+ free (psym_arr[bfd_idx]);
+ free (sec_arr[bfd_idx]);
+ }
+
+ free (psym_arr);
+ free (sec_arr);
+
+ return TRUE;
+}
+
+/* Mark nodes in the call graph that are called by some other node. */
+
+static void
+mark_non_root (struct function_info *fun)
+{
+ struct call_info *call;
+
+ fun->visit1 = TRUE;
+ for (call = fun->call_list; call; call = call->next)
+ {
+ call->fun->non_root = TRUE;
+ if (!call->fun->visit1)
+ mark_non_root (call->fun);
+ }
+}
+
+/* Remove cycles from the call graph. */
+
+static void
+call_graph_traverse (struct function_info *fun, struct bfd_link_info *info)
+{
+ struct call_info **callp, *call;
+
+ fun->visit2 = TRUE;
+ fun->marking = TRUE;
+
+ callp = &fun->call_list;
+ while ((call = *callp) != NULL)
+ {
+ if (!call->fun->visit2)
+ call_graph_traverse (call->fun, info);
+ else if (call->fun->marking)
+ {
+ const char *f1 = func_name (fun);
+ const char *f2 = func_name (call->fun);
+
+ info->callbacks->info (_("Stack analysis will ignore the call "
+ "from %s to %s\n"),
+ f1, f2);
+ *callp = call->next;
+ continue;
+ }
+ callp = &call->next;
+ }
+ fun->marking = FALSE;
+}
+
+/* Populate call_list for each function. */
+
+static bfd_boolean
+build_call_tree (bfd *output_bfd, struct bfd_link_info *info)
+{
+ struct spu_link_hash_table *htab = spu_hash_table (info);
+ bfd *ibfd;
+
+ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+ {
+ extern const bfd_target bfd_elf32_spu_vec;
+ asection *sec;
+
+ if (ibfd->xvec != &bfd_elf32_spu_vec)
+ continue;
+
+ for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+ {
+ if (!interesting_section (sec, output_bfd, htab)
+ || sec->reloc_count == 0)
+ continue;
+
+ if (!mark_functions_via_relocs (sec, info, TRUE))
+ return FALSE;
+ }
+
+ /* Transfer call info from hot/cold section part of function
+ to main entry. */
+ for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+ {
+ struct _spu_elf_section_data *sec_data;
+ struct spu_elf_stack_info *sinfo;
+
+ if ((sec_data = spu_elf_section_data (sec)) != NULL
+ && (sinfo = sec_data->stack_info) != NULL)
+ {
+ int i;
+ for (i = 0; i < sinfo->num_fun; ++i)
+ {
+ if (sinfo->fun[i].start != NULL)
+ {
+ struct call_info *call = sinfo->fun[i].call_list;
+
+ while (call != NULL)
+ {
+ struct call_info *call_next = call->next;
+ if (!insert_callee (sinfo->fun[i].start, call))
+ free (call);
+ call = call_next;
+ }
+ sinfo->fun[i].call_list = NULL;
+ sinfo->fun[i].non_root = TRUE;
+ }
+ }
+ }
+ }
+ }
+
+ /* Find the call graph root(s). */
+ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+ {
+ extern const bfd_target bfd_elf32_spu_vec;
+ asection *sec;
+
+ if (ibfd->xvec != &bfd_elf32_spu_vec)
+ continue;
+
+ for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+ {
+ struct _spu_elf_section_data *sec_data;
+ struct spu_elf_stack_info *sinfo;
+
+ if ((sec_data = spu_elf_section_data (sec)) != NULL
+ && (sinfo = sec_data->stack_info) != NULL)
+ {
+ int i;
+ for (i = 0; i < sinfo->num_fun; ++i)
+ if (!sinfo->fun[i].visit1)
+ mark_non_root (&sinfo->fun[i]);
+ }
+ }
+ }
+
+ /* Remove cycles from the call graph. We start from the root node(s)
+ so that we break cycles in a reasonable place. */
+ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+ {
+ extern const bfd_target bfd_elf32_spu_vec;
+ asection *sec;
+
+ if (ibfd->xvec != &bfd_elf32_spu_vec)
+ continue;
+
+ for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+ {
+ struct _spu_elf_section_data *sec_data;
+ struct spu_elf_stack_info *sinfo;
+
+ if ((sec_data = spu_elf_section_data (sec)) != NULL
+ && (sinfo = sec_data->stack_info) != NULL)
+ {
+ int i;
+ for (i = 0; i < sinfo->num_fun; ++i)
+ if (!sinfo->fun[i].non_root)
+ call_graph_traverse (&sinfo->fun[i], info);
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+/* Descend the call graph for FUN, accumulating total stack required. */
+
+static bfd_vma
+sum_stack (struct function_info *fun,
+ struct bfd_link_info *info,
+ int emit_stack_syms)
+{
+ struct call_info *call;
+ struct function_info *max = NULL;
+ bfd_vma max_stack = fun->stack;
+ bfd_vma stack;
+ const char *f1;
+
+ if (fun->visit3)
+ return max_stack;
+
+ for (call = fun->call_list; call; call = call->next)
+ {
+ stack = sum_stack (call->fun, info, emit_stack_syms);
+ /* Include caller stack for normal calls, don't do so for
+ tail calls. fun->stack here is local stack usage for
+ this function. */
+ if (!call->is_tail)
+ stack += fun->stack;
+ if (max_stack < stack)
+ {
+ max_stack = stack;
+ max = call->fun;
+ }
+ }
+
+ f1 = func_name (fun);
+ info->callbacks->minfo (_("%s: 0x%v 0x%v\n"), f1, fun->stack, max_stack);
+
+ if (fun->call_list)
+ {
+ info->callbacks->minfo (_(" calls:\n"));
+ for (call = fun->call_list; call; call = call->next)
+ {
+ const char *f2 = func_name (call->fun);
+ const char *ann1 = call->fun == max ? "*" : " ";
+ const char *ann2 = call->is_tail ? "t" : " ";
+
+ info->callbacks->minfo (_(" %s%s %s\n"), ann1, ann2, f2);
+ }
+ }
+
+ /* Now fun->stack holds cumulative stack. */
+ fun->stack = max_stack;
+ fun->visit3 = TRUE;
+
+ if (emit_stack_syms)
+ {
+ struct spu_link_hash_table *htab = spu_hash_table (info);
+ char *name = bfd_malloc (18 + strlen (f1));
+ struct elf_link_hash_entry *h;
+
+ if (name != NULL)
+ {
+ if (fun->global || ELF_ST_BIND (fun->u.sym->st_info) == STB_GLOBAL)
+ sprintf (name, "__stack_%s", f1);
+ else
+ sprintf (name, "__stack_%x_%s", fun->sec->id & 0xffffffff, f1);
+
+ h = elf_link_hash_lookup (&htab->elf, name, TRUE, TRUE, FALSE);
+ free (name);
+ if (h != NULL
+ && (h->root.type == bfd_link_hash_new
+ || h->root.type == bfd_link_hash_undefined
+ || h->root.type == bfd_link_hash_undefweak))
+ {
+ h->root.type = bfd_link_hash_defined;
+ h->root.u.def.section = bfd_abs_section_ptr;
+ h->root.u.def.value = max_stack;
+ h->size = 0;
+ h->type = 0;
+ h->ref_regular = 1;
+ h->def_regular = 1;
+ h->ref_regular_nonweak = 1;
+ h->forced_local = 1;
+ h->non_elf = 0;
+ }
+ }
+ }
+
+ return max_stack;
+}
+
+/* Provide an estimate of total stack required. */
+
+static bfd_boolean
+spu_elf_stack_analysis (bfd *output_bfd,
+ struct bfd_link_info *info,
+ int emit_stack_syms)
+{
+ bfd *ibfd;
+ bfd_vma max_stack = 0;
+
+ if (!discover_functions (output_bfd, info))
+ return FALSE;
+
+ if (!build_call_tree (output_bfd, info))
+ return FALSE;
+
+ info->callbacks->info (_("Stack size for call graph root nodes.\n"));
+ info->callbacks->minfo (_("\nStack size for functions. "
+ "Annotations: '*' max stack, 't' tail call\n"));
+ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+ {
+ extern const bfd_target bfd_elf32_spu_vec;
+ asection *sec;
+
+ if (ibfd->xvec != &bfd_elf32_spu_vec)
+ continue;
+
+ for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+ {
+ struct _spu_elf_section_data *sec_data;
+ struct spu_elf_stack_info *sinfo;
+
+ if ((sec_data = spu_elf_section_data (sec)) != NULL
+ && (sinfo = sec_data->stack_info) != NULL)
+ {
+ int i;
+ for (i = 0; i < sinfo->num_fun; ++i)
+ {
+ if (!sinfo->fun[i].non_root)
+ {
+ bfd_vma stack;
+ const char *f1;
+
+ stack = sum_stack (&sinfo->fun[i], info,
+ emit_stack_syms);
+ f1 = func_name (&sinfo->fun[i]);
+ info->callbacks->info (_(" %s: 0x%v\n"),
+ f1, stack);
+ if (max_stack < stack)
+ max_stack = stack;
+ }
+ }
+ }
+ }
+ }
+
+ info->callbacks->info (_("Maximum stack required is 0x%v\n"), max_stack);
+ return TRUE;
+}
+
+/* Perform a final link. */
+
+static bfd_boolean
+spu_elf_final_link (bfd *output_bfd, struct bfd_link_info *info)
+{
+ struct spu_link_hash_table *htab = spu_hash_table (info);
+
+ if (htab->stack_analysis
+ && !spu_elf_stack_analysis (output_bfd, info, htab->emit_stack_syms))
+ info->callbacks->einfo ("%X%P: stack analysis error: %E\n");
+
+ return bfd_elf_final_link (output_bfd, info);
+}
+
+/* Called when not normally emitting relocs, ie. !info->relocatable
+ and !info->emitrelocations. Returns a count of special relocs
+ that need to be emitted. */
+
+static unsigned int
+spu_elf_count_relocs (asection *sec, Elf_Internal_Rela *relocs)
+{
+ unsigned int count = 0;
+ Elf_Internal_Rela *relend = relocs + sec->reloc_count;
+
+ for (; relocs < relend; relocs++)
+ {
+ int r_type = ELF32_R_TYPE (relocs->r_info);
+ if (r_type == R_SPU_PPU32 || r_type == R_SPU_PPU64)
+ ++count;
+ }
+
+ return count;
+}
+
+/* Apply RELOCS to CONTENTS of INPUT_SECTION from INPUT_BFD. */
+
+static bfd_boolean
+spu_elf_relocate_section (bfd *output_bfd,
+ struct bfd_link_info *info,
+ bfd *input_bfd,
+ asection *input_section,
+ bfd_byte *contents,
+ Elf_Internal_Rela *relocs,
+ Elf_Internal_Sym *local_syms,
+ asection **local_sections)
+{
+ Elf_Internal_Shdr *symtab_hdr;
+ struct elf_link_hash_entry **sym_hashes;
+ Elf_Internal_Rela *rel, *relend;
+ struct spu_link_hash_table *htab;
+ bfd_boolean ret = TRUE;
+ bfd_boolean emit_these_relocs = FALSE;
+
+ htab = spu_hash_table (info);
+ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+ sym_hashes = (struct elf_link_hash_entry **) (elf_sym_hashes (input_bfd));
+
+ rel = relocs;
+ relend = relocs + input_section->reloc_count;
+ for (; rel < relend; rel++)
+ {
+ int r_type;
+ reloc_howto_type *howto;
+ unsigned long r_symndx;
+ Elf_Internal_Sym *sym;
+ asection *sec;
+ struct elf_link_hash_entry *h;
+ const char *sym_name;
+ bfd_vma relocation;
+ bfd_vma addend;
+ bfd_reloc_status_type r;
+ bfd_boolean unresolved_reloc;
+ bfd_boolean warned;
+ bfd_boolean branch;
+
+ r_symndx = ELF32_R_SYM (rel->r_info);
+ r_type = ELF32_R_TYPE (rel->r_info);
+ if (r_type == R_SPU_PPU32 || r_type == R_SPU_PPU64)
+ {
+ emit_these_relocs = TRUE;
+ continue;
+ }
+
+ howto = elf_howto_table + r_type;
+ unresolved_reloc = FALSE;
+ warned = FALSE;
+ h = NULL;
+ sym = NULL;
+ sec = NULL;
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ sym = local_syms + r_symndx;
+ sec = local_sections[r_symndx];
+ sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec);
+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ }
+ else
+ {
+ RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
+ r_symndx, symtab_hdr, sym_hashes,
+ h, sec, relocation,
+ unresolved_reloc, warned);
+ sym_name = h->root.root.string;
+ }
+
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
+ if (unresolved_reloc)
+ {
+ (*_bfd_error_handler)
+ (_("%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'"),
+ input_bfd,
+ bfd_get_section_name (input_bfd, input_section),
+ (long) rel->r_offset,
+ howto->name,
+ sym_name);
+ ret = FALSE;
+ }
+
+ /* If this symbol is in an overlay area, we may need to relocate
+ to the overlay stub. */
+ addend = rel->r_addend;
+ branch = (is_branch (contents + rel->r_offset)
+ || is_hint (contents + rel->r_offset));
+ if (needs_ovl_stub (sym_name, sec, input_section, htab, branch))
+ {
+ char *stub_name;
+ struct spu_stub_hash_entry *sh;
+
+ stub_name = spu_stub_name (sec, h, rel);
+ if (stub_name == NULL)
+ return FALSE;
+
+ sh = (struct spu_stub_hash_entry *)
+ bfd_hash_lookup (&htab->stub_hash_table, stub_name, FALSE, FALSE);
+ if (sh != NULL)
+ {
+ relocation = (htab->stub->output_section->vma
+ + htab->stub->output_offset
+ + sh->off);
+ addend = 0;
+ }
+ free (stub_name);
+ }
+
+ r = _bfd_final_link_relocate (howto,
+ input_bfd,
+ input_section,
+ contents,
+ rel->r_offset, relocation, addend);
+
+ if (r != bfd_reloc_ok)
+ {
+ const char *msg = (const char *) 0;
+
+ switch (r)
+ {
+ case bfd_reloc_overflow:
+ if (!((*info->callbacks->reloc_overflow)
+ (info, (h ? &h->root : NULL), sym_name, howto->name,
+ (bfd_vma) 0, input_bfd, input_section, rel->r_offset)))
+ return FALSE;
+ break;
+
+ case bfd_reloc_undefined:
+ if (!((*info->callbacks->undefined_symbol)
+ (info, sym_name, input_bfd, input_section,
+ rel->r_offset, TRUE)))
+ return FALSE;
+ break;
+
+ case bfd_reloc_outofrange:
+ msg = _("internal error: out of range error");
+ goto common_error;
+
+ case bfd_reloc_notsupported:
+ msg = _("internal error: unsupported relocation error");
+ goto common_error;
+
+ case bfd_reloc_dangerous:
+ msg = _("internal error: dangerous error");
+ goto common_error;
+
+ default:
+ msg = _("internal error: unknown error");
+ /* fall through */
+
+ common_error:
+ if (!((*info->callbacks->warning)
+ (info, msg, sym_name, input_bfd, input_section,
+ rel->r_offset)))
+ return FALSE;
+ break;
+ }
+ }
+ }
+
+ if (ret
+ && emit_these_relocs
+ && !info->relocatable
+ && !info->emitrelocations)
+ {
+ Elf_Internal_Rela *wrel;
+ Elf_Internal_Shdr *rel_hdr;
+
+ wrel = rel = relocs;
+ relend = relocs + input_section->reloc_count;
+ for (; rel < relend; rel++)
+ {
+ int r_type;
+
+ r_type = ELF32_R_TYPE (rel->r_info);
+ if (r_type == R_SPU_PPU32 || r_type == R_SPU_PPU64)
+ *wrel++ = *rel;
+ }
+ input_section->reloc_count = wrel - relocs;
+ /* Backflips for _bfd_elf_link_output_relocs. */
+ rel_hdr = &elf_section_data (input_section)->rel_hdr;
+ rel_hdr->sh_size = input_section->reloc_count * rel_hdr->sh_entsize;
+ ret = 2;
+ }
+
+ return ret;
+}
+
+/* Adjust _SPUEAR_ syms to point at their overlay stubs. */
+
+static bfd_boolean
+spu_elf_output_symbol_hook (struct bfd_link_info *info,
+ const char *sym_name ATTRIBUTE_UNUSED,
+ Elf_Internal_Sym *sym,
+ asection *sym_sec ATTRIBUTE_UNUSED,
+ struct elf_link_hash_entry *h)
+{
+ struct spu_link_hash_table *htab = spu_hash_table (info);
+
+ if (!info->relocatable
+ && htab->num_overlays != 0
+ && h != NULL
+ && (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ && h->def_regular
+ && strncmp (h->root.root.string, "_SPUEAR_", 8) == 0)
+ {
+ static Elf_Internal_Rela zero_rel;
+ char *stub_name = spu_stub_name (h->root.u.def.section, h, &zero_rel);
+ struct spu_stub_hash_entry *sh;
+
+ if (stub_name == NULL)
+ return FALSE;
+ sh = (struct spu_stub_hash_entry *)
+ bfd_hash_lookup (&htab->stub_hash_table, stub_name, FALSE, FALSE);
+ free (stub_name);
+ if (sh == NULL)
+ return TRUE;
+ sym->st_shndx
+ = _bfd_elf_section_from_bfd_section (htab->stub->output_section->owner,
+ htab->stub->output_section);
+ sym->st_value = (htab->stub->output_section->vma
+ + htab->stub->output_offset
+ + sh->off);
+ }
+
+ return TRUE;
+}
+
+static int spu_plugin = 0;
+
+void
+spu_elf_plugin (int val)
+{
+ spu_plugin = val;
+}
+
+/* Set ELF header e_type for plugins. */
+
+static void
+spu_elf_post_process_headers (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+ if (spu_plugin)
+ {
+ Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
+
+ i_ehdrp->e_type = ET_DYN;
+ }
+}
+
+/* We may add an extra PT_LOAD segment for .toe. We also need extra
+ segments for overlays. */
+
+static int
+spu_elf_additional_program_headers (bfd *abfd, struct bfd_link_info *info)
+{
+ struct spu_link_hash_table *htab = spu_hash_table (info);
+ int extra = htab->num_overlays;
+ asection *sec;
+
+ if (extra)
+ ++extra;
+
+ sec = bfd_get_section_by_name (abfd, ".toe");
+ if (sec != NULL && (sec->flags & SEC_LOAD) != 0)
+ ++extra;
+
+ return extra;
+}
+
+/* Remove .toe section from other PT_LOAD segments and put it in
+ a segment of its own. Put overlays in separate segments too. */
+
+static bfd_boolean
+spu_elf_modify_segment_map (bfd *abfd, struct bfd_link_info *info)
+{
+ asection *toe, *s;
+ struct elf_segment_map *m;
+ unsigned int i;
+
+ if (info == NULL)
+ return TRUE;
+
+ toe = bfd_get_section_by_name (abfd, ".toe");
+ for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
+ if (m->p_type == PT_LOAD && m->count > 1)
+ for (i = 0; i < m->count; i++)
+ if ((s = m->sections[i]) == toe
+ || spu_elf_section_data (s)->ovl_index != 0)
+ {
+ struct elf_segment_map *m2;
+ bfd_vma amt;
+
+ if (i + 1 < m->count)
+ {
+ amt = sizeof (struct elf_segment_map);
+ amt += (m->count - (i + 2)) * sizeof (m->sections[0]);
+ m2 = bfd_zalloc (abfd, amt);
+ if (m2 == NULL)
+ return FALSE;
+ m2->count = m->count - (i + 1);
+ memcpy (m2->sections, m->sections + i + 1,
+ m2->count * sizeof (m->sections[0]));
+ m2->p_type = PT_LOAD;
+ m2->next = m->next;
+ m->next = m2;
+ }
+ m->count = 1;
+ if (i != 0)
+ {
+ m->count = i;
+ amt = sizeof (struct elf_segment_map);
+ m2 = bfd_zalloc (abfd, amt);
+ if (m2 == NULL)
+ return FALSE;
+ m2->p_type = PT_LOAD;
+ m2->count = 1;
+ m2->sections[0] = s;
+ m2->next = m->next;
+ m->next = m2;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+/* Check that all loadable section VMAs lie in the range
+ LO .. HI inclusive. */
+
+asection *
+spu_elf_check_vma (bfd *abfd, bfd_vma lo, bfd_vma hi)
+{
+ struct elf_segment_map *m;
+ unsigned int i;
+
+ for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
+ if (m->p_type == PT_LOAD)
+ for (i = 0; i < m->count; i++)
+ if (m->sections[i]->size != 0
+ && (m->sections[i]->vma < lo
+ || m->sections[i]->vma > hi
+ || m->sections[i]->vma + m->sections[i]->size - 1 > hi))
+ return m->sections[i];
+
+ return NULL;
+}
+
+/* Tweak the section type of .note.spu_name. */
+
+static bfd_boolean
+spu_elf_fake_sections (bfd *obfd ATTRIBUTE_UNUSED,
+ Elf_Internal_Shdr *hdr,
+ asection *sec)
+{
+ if (strcmp (sec->name, SPU_PTNOTE_SPUNAME) == 0)
+ hdr->sh_type = SHT_NOTE;
+ return TRUE;
+}
+
+/* Tweak phdrs before writing them out. */
+
+static int
+spu_elf_modify_program_headers (bfd *abfd, struct bfd_link_info *info)
+{
+ const struct elf_backend_data *bed;
+ struct elf_obj_tdata *tdata;
+ Elf_Internal_Phdr *phdr, *last;
+ struct spu_link_hash_table *htab;
+ unsigned int count;
+ unsigned int i;
+
+ if (info == NULL)
+ return TRUE;
+
+ bed = get_elf_backend_data (abfd);
+ tdata = elf_tdata (abfd);
+ phdr = tdata->phdr;
+ count = tdata->program_header_size / bed->s->sizeof_phdr;
+ htab = spu_hash_table (info);
+ if (htab->num_overlays != 0)
+ {
+ struct elf_segment_map *m;
+ unsigned int o;
+
+ for (i = 0, m = elf_tdata (abfd)->segment_map; m; ++i, m = m->next)
+ if (m->count != 0
+ && (o = spu_elf_section_data (m->sections[0])->ovl_index) != 0)
+ {
+ /* Mark this as an overlay header. */
+ phdr[i].p_flags |= PF_OVERLAY;
+
+ if (htab->ovtab != NULL && htab->ovtab->size != 0)
+ {
+ bfd_byte *p = htab->ovtab->contents;
+ unsigned int off = (o - 1) * 16 + 8;
+
+ /* Write file_off into _ovly_table. */
+ bfd_put_32 (htab->ovtab->owner, phdr[i].p_offset, p + off);
+ }
+ }
+ }
+
+ /* Round up p_filesz and p_memsz of PT_LOAD segments to multiples
+ of 16. This should always be possible when using the standard
+ linker scripts, but don't create overlapping segments if
+ someone is playing games with linker scripts. */
+ last = NULL;
+ for (i = count; i-- != 0; )
+ if (phdr[i].p_type == PT_LOAD)
+ {
+ unsigned adjust;
+
+ adjust = -phdr[i].p_filesz & 15;
+ if (adjust != 0
+ && last != NULL
+ && phdr[i].p_offset + phdr[i].p_filesz > last->p_offset - adjust)
+ break;
+
+ adjust = -phdr[i].p_memsz & 15;
+ if (adjust != 0
+ && last != NULL
+ && phdr[i].p_filesz != 0
+ && phdr[i].p_vaddr + phdr[i].p_memsz > last->p_vaddr - adjust
+ && phdr[i].p_vaddr + phdr[i].p_memsz <= last->p_vaddr)
+ break;
+
+ if (phdr[i].p_filesz != 0)
+ last = &phdr[i];
+ }
+
+ if (i == (unsigned int) -1)
+ for (i = count; i-- != 0; )
+ if (phdr[i].p_type == PT_LOAD)
+ {
+ unsigned adjust;
+
+ adjust = -phdr[i].p_filesz & 15;
+ phdr[i].p_filesz += adjust;
+
+ adjust = -phdr[i].p_memsz & 15;
+ phdr[i].p_memsz += adjust;
+ }
+
+ return TRUE;
+}
+
+#define TARGET_BIG_SYM bfd_elf32_spu_vec
+#define TARGET_BIG_NAME "elf32-spu"
+#define ELF_ARCH bfd_arch_spu
+#define ELF_MACHINE_CODE EM_SPU
+/* This matches the alignment need for DMA. */
+#define ELF_MAXPAGESIZE 0x80
+#define elf_backend_rela_normal 1
+#define elf_backend_can_gc_sections 1
+
+#define bfd_elf32_bfd_reloc_type_lookup spu_elf_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup spu_elf_reloc_name_lookup
+#define elf_info_to_howto spu_elf_info_to_howto
+#define elf_backend_count_relocs spu_elf_count_relocs
+#define elf_backend_relocate_section spu_elf_relocate_section
+#define elf_backend_symbol_processing spu_elf_backend_symbol_processing
+#define elf_backend_link_output_symbol_hook spu_elf_output_symbol_hook
+#define bfd_elf32_new_section_hook spu_elf_new_section_hook
+#define bfd_elf32_bfd_link_hash_table_create spu_elf_link_hash_table_create
+#define bfd_elf32_bfd_link_hash_table_free spu_elf_link_hash_table_free
+
+#define elf_backend_additional_program_headers spu_elf_additional_program_headers
+#define elf_backend_modify_segment_map spu_elf_modify_segment_map
+#define elf_backend_modify_program_headers spu_elf_modify_program_headers
+#define elf_backend_post_process_headers spu_elf_post_process_headers
+#define elf_backend_fake_sections spu_elf_fake_sections
+#define elf_backend_special_sections spu_elf_special_sections
+#define bfd_elf32_bfd_final_link spu_elf_final_link
+
+#include "elf32-target.h"
diff --git a/bfd/elf32-spu.h b/bfd/elf32-spu.h
new file mode 100644
index 000000000000..b74c3102b8be
--- /dev/null
+++ b/bfd/elf32-spu.h
@@ -0,0 +1,57 @@
+/* SPU specific support for 32-bit ELF.
+
+ Copyright 2006, 2007 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+/* Extra info kept for SPU sections. */
+
+struct spu_elf_stack_info;
+
+struct _spu_elf_section_data
+{
+ struct bfd_elf_section_data elf;
+
+ /* Stack analysis info kept for this section. */
+
+ struct spu_elf_stack_info *stack_info;
+
+ /* Non-zero for overlay output sections. */
+ unsigned int ovl_index;
+};
+
+#define spu_elf_section_data(sec) \
+ ((struct _spu_elf_section_data *) elf_section_data (sec))
+
+struct _ovl_stream
+{
+ const void *start;
+ const void *end;
+};
+
+extern void spu_elf_plugin (int);
+extern bfd_boolean spu_elf_open_builtin_lib (bfd **,
+ const struct _ovl_stream *);
+extern bfd_boolean spu_elf_create_sections (bfd *,
+ struct bfd_link_info *, int, int);
+extern bfd_boolean spu_elf_find_overlays (bfd *, struct bfd_link_info *);
+extern bfd_boolean spu_elf_size_stubs (bfd *, struct bfd_link_info *, int, int,
+ asection **, asection **,
+ asection **);
+extern bfd_boolean spu_elf_build_stubs (struct bfd_link_info *, int,
+ asection *);
+extern asection *spu_elf_check_vma (bfd *, bfd_vma, bfd_vma);
diff --git a/bfd/elf32-v850.c b/bfd/elf32-v850.c
index e2c29ee19220..e5f283a9d0c3 100644
--- a/bfd/elf32-v850.c
+++ b/bfd/elf32-v850.c
@@ -1,6 +1,6 @@
/* V850-specific support for 32-bit ELF
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -22,8 +22,8 @@
/* XXX FIXME: This code is littered with 32bit int, 16bit short, 8bit char
dependencies. As is the gas & simulator code for the v850. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -33,6 +33,8 @@
/* Sign-extend a 24-bit number. */
#define SEXT24(x) ((((x) & 0xffffff) ^ 0x800000) - 0x800000)
+static reloc_howto_type v850_elf_howto_table[];
+
/* Look through the relocs for a section during the first phase, and
allocate space in the global offset table or procedure linkage
table. */
@@ -1337,6 +1339,22 @@ v850_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+
+static reloc_howto_type *
+v850_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (v850_elf_howto_table) / sizeof (v850_elf_howto_table[0]);
+ i++)
+ if (v850_elf_howto_table[i].name != NULL
+ && strcasecmp (v850_elf_howto_table[i].name, r_name) == 0)
+ return &v850_elf_howto_table[i];
+
+ return NULL;
+}
/* Set the howto pointer for an V850 ELF reloc. */
@@ -1565,9 +1583,6 @@ v850_elf_relocate_section (bfd *output_bfd,
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -1596,7 +1611,6 @@ v850_elf_relocate_section (bfd *output_bfd,
|| r_type == R_V850_GNU_VTINHERIT)
continue;
- /* This is a final link. */
howto = v850_elf_howto_table + r_type;
h = NULL;
sym = NULL;
@@ -1629,6 +1643,20 @@ v850_elf_relocate_section (bfd *output_bfd,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
/* FIXME: We should use the addend, but the COFF relocations don't. */
r = v850_elf_final_link_relocate (howto, input_bfd, output_bfd,
input_section,
@@ -1709,50 +1737,22 @@ v850_elf_relocate_section (bfd *output_bfd,
return TRUE;
}
-static bfd_boolean
-v850_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- asection *sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
-{
- /* No got and plt entries for v850-elf. */
- return TRUE;
-}
-
static asection *
v850_elf_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
Elf_Internal_Rela *rel,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
+ switch (ELF32_R_TYPE (rel->r_info))
{
case R_V850_GNU_VTINHERIT:
case R_V850_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ return NULL;
+ }
- return NULL;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Set the right machine number. */
@@ -2115,6 +2115,12 @@ v850_elf_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED,
sym->st_shndx = SHN_V850_ZCOMMON;
}
+ /* The price we pay for using h->other unused bits as flags in the
+ linker is cleaning up after ourselves. */
+
+ sym->st_other &= ~(V850_OTHER_SDA | V850_OTHER_ZDA | V850_OTHER_TDA
+ | V850_OTHER_ERROR);
+
return TRUE;
}
@@ -3026,33 +3032,32 @@ v850_elf_relax_section (bfd *abfd,
static const struct bfd_elf_special_section v850_elf_special_sections[] =
{
- { ".call_table_data", 16, 0, SHT_PROGBITS, (SHF_ALLOC
- + SHF_WRITE) },
- { ".call_table_text", 16, 0, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
- + SHF_EXECINSTR) },
- { ".rosdata", 8, -2, SHT_PROGBITS, (SHF_ALLOC
- + SHF_V850_GPREL) },
- { ".rozdata", 8, -2, SHT_PROGBITS, (SHF_ALLOC
- + SHF_V850_R0REL) },
- { ".sbss", 5, -2, SHT_NOBITS, (SHF_ALLOC + SHF_WRITE
- + SHF_V850_GPREL) },
- { ".scommon", 8, -2, SHT_V850_SCOMMON, (SHF_ALLOC + SHF_WRITE
- + SHF_V850_GPREL) },
- { ".sdata", 6, -2, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
- + SHF_V850_GPREL) },
- { ".tbss", 5, -2, SHT_NOBITS, (SHF_ALLOC + SHF_WRITE
- + SHF_V850_EPREL) },
- { ".tcommon", 8, -2, SHT_V850_TCOMMON, (SHF_ALLOC + SHF_WRITE
- + SHF_V850_R0REL) },
- { ".tdata", 6, -2, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
- + SHF_V850_EPREL) },
- { ".zbss", 5, -2, SHT_NOBITS, (SHF_ALLOC + SHF_WRITE
- + SHF_V850_R0REL) },
- { ".zcommon", 8, -2, SHT_V850_ZCOMMON, (SHF_ALLOC + SHF_WRITE
- + SHF_V850_R0REL) },
- { ".zdata", 6, -2, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
- + SHF_V850_R0REL) },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".call_table_data"), 0, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE) },
+ { STRING_COMMA_LEN (".call_table_text"), 0, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
+ + SHF_EXECINSTR) },
+ { STRING_COMMA_LEN (".rosdata"), -2, SHT_PROGBITS, (SHF_ALLOC
+ + SHF_V850_GPREL) },
+ { STRING_COMMA_LEN (".rozdata"), -2, SHT_PROGBITS, (SHF_ALLOC
+ + SHF_V850_R0REL) },
+ { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, (SHF_ALLOC + SHF_WRITE
+ + SHF_V850_GPREL) },
+ { STRING_COMMA_LEN (".scommon"), -2, SHT_V850_SCOMMON, (SHF_ALLOC + SHF_WRITE
+ + SHF_V850_GPREL) },
+ { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
+ + SHF_V850_GPREL) },
+ { STRING_COMMA_LEN (".tbss"), -2, SHT_NOBITS, (SHF_ALLOC + SHF_WRITE
+ + SHF_V850_EPREL) },
+ { STRING_COMMA_LEN (".tcommon"), -2, SHT_V850_TCOMMON, (SHF_ALLOC + SHF_WRITE
+ + SHF_V850_R0REL) },
+ { STRING_COMMA_LEN (".tdata"), -2, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
+ + SHF_V850_EPREL) },
+ { STRING_COMMA_LEN (".zbss"), -2, SHT_NOBITS, (SHF_ALLOC + SHF_WRITE
+ + SHF_V850_R0REL) },
+ { STRING_COMMA_LEN (".zcommon"), -2, SHT_V850_ZCOMMON, (SHF_ALLOC + SHF_WRITE
+ + SHF_V850_R0REL) },
+ { STRING_COMMA_LEN (".zdata"), -2, SHT_PROGBITS, (SHF_ALLOC + SHF_WRITE
+ + SHF_V850_R0REL) },
+ { NULL, 0, 0, 0, 0 }
};
#define TARGET_LITTLE_SYM bfd_elf32_v850_vec
@@ -3077,7 +3082,6 @@ static const struct bfd_elf_special_section v850_elf_special_sections[] =
#define elf_backend_section_from_shdr v850_elf_section_from_shdr
#define elf_backend_fake_sections v850_elf_fake_sections
#define elf_backend_gc_mark_hook v850_elf_gc_mark_hook
-#define elf_backend_gc_sweep_hook v850_elf_gc_sweep_hook
#define elf_backend_special_sections v850_elf_special_sections
#define elf_backend_can_gc_sections 1
@@ -3085,6 +3089,7 @@ static const struct bfd_elf_special_section v850_elf_special_sections[] =
#define bfd_elf32_bfd_is_local_label_name v850_elf_is_local_label_name
#define bfd_elf32_bfd_reloc_type_lookup v850_elf_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup v850_elf_reloc_name_lookup
#define bfd_elf32_bfd_merge_private_bfd_data v850_elf_merge_private_bfd_data
#define bfd_elf32_bfd_set_private_flags v850_elf_set_private_flags
#define bfd_elf32_bfd_print_private_bfd_data v850_elf_print_private_bfd_data
diff --git a/bfd/elf32-vax.c b/bfd/elf32-vax.c
index bf481e459e75..aac81c11e5d0 100644
--- a/bfd/elf32-vax.c
+++ b/bfd/elf32-vax.c
@@ -1,6 +1,6 @@
/* VAX series support for 32-bit ELF
Copyright 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Contributed by Matt Thomas <matt@3am-software.com>.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -34,13 +34,6 @@ static struct bfd_hash_entry *elf_vax_link_hash_newfunc (struct bfd_hash_entry *
static struct bfd_link_hash_table *elf_vax_link_hash_table_create (bfd *);
static bfd_boolean elf_vax_check_relocs (bfd *, struct bfd_link_info *,
asection *, const Elf_Internal_Rela *);
-static asection *elf_vax_gc_mark_hook (asection *, struct bfd_link_info *,
- Elf_Internal_Rela *,
- struct elf_link_hash_entry *,
- Elf_Internal_Sym *);
-static bfd_boolean elf_vax_gc_sweep_hook (bfd *, struct bfd_link_info *,
- asection *,
- const Elf_Internal_Rela *);
static bfd_boolean elf_vax_adjust_dynamic_symbol (struct bfd_link_info *,
struct elf_link_hash_entry *);
static bfd_boolean elf_vax_size_dynamic_sections (bfd *, struct bfd_link_info *);
@@ -329,7 +322,22 @@ reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code)
return 0;
}
+static reloc_howto_type *
+reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof (howto_table) / sizeof (howto_table[0]); i++)
+ if (howto_table[i].name != NULL
+ && strcasecmp (howto_table[i].name, r_name) == 0)
+ return &howto_table[i];
+
+ return NULL;
+}
+
#define bfd_elf32_bfd_reloc_type_lookup reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup reloc_name_lookup
#define ELF_ARCH bfd_arch_vax
/* end code generated by elf.el */
@@ -738,7 +746,7 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
name + 5) == 0);
@@ -829,38 +837,20 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
static asection *
elf_vax_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
Elf_Internal_Rela *rel,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_VAX_GNU_VTINHERIT:
- case R_VAX_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- default:
- break;
-
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_VAX_GNU_VTINHERIT:
+ case R_VAX_GNU_VTENTRY:
+ return NULL;
+ }
+
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update the got entry reference counts for the section being removed. */
@@ -935,7 +925,6 @@ elf_vax_adjust_dynamic_symbol (info, h)
{
bfd *dynobj;
asection *s;
- unsigned int power_of_two;
dynobj = elf_hash_table (info)->dynobj;
@@ -1089,28 +1078,7 @@ elf_vax_adjust_dynamic_symbol (info, h)
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 3)
- power_of_two = 3;
-
- /* Apply the required alignment. */
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (dynobj, s))
- {
- if (!bfd_set_section_alignment (dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Set the sizes of the dynamic sections. */
@@ -1194,7 +1162,7 @@ elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
/* Remember whether there is a PLT. */
plt = s->size != 0;
}
- else if (strncmp (name, ".rela", 5) == 0)
+ else if (CONST_STRNEQ (name, ".rela"))
{
if (s->size != 0)
{
@@ -1226,7 +1194,7 @@ elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
s->reloc_count = 0;
}
}
- else if (strncmp (name, ".got", 4) != 0
+ else if (! CONST_STRNEQ (name, ".got")
&& strcmp (name, ".dynbss") != 0)
{
/* It's not one of our sections, so don't allocate space. */
@@ -1402,9 +1370,6 @@ elf_vax_relocate_section (bfd *output_bfd,
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
- if (info->relocatable)
- return TRUE;
-
dynobj = elf_hash_table (info)->dynobj;
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -1436,7 +1401,6 @@ elf_vax_relocate_section (bfd *output_bfd,
}
howto = howto_table + r_type;
- /* This is a final link. */
r_symndx = ELF32_R_SYM (rel->r_info);
h = NULL;
sym = NULL;
@@ -1492,6 +1456,20 @@ elf_vax_relocate_section (bfd *output_bfd,
relocation = 0;
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
switch (r_type)
{
case R_VAX_GOT32:
@@ -1625,8 +1603,9 @@ elf_vax_relocate_section (bfd *output_bfd,
&& ((r_type != R_VAX_PC8
&& r_type != R_VAX_PC16
&& r_type != R_VAX_PC32)
- || (!info->symbolic
- || !h->def_regular)))
+ || ((input_section->flags & SEC_CODE)
+ && (!info->symbolic
+ || (!h->def_regular && h->type != STT_SECTION)))))
{
Elf_Internal_Rela outrel;
bfd_byte *loc;
@@ -1646,7 +1625,7 @@ elf_vax_relocate_section (bfd *output_bfd,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (input_bfd,
input_section),
name + 5) == 0);
@@ -1705,9 +1684,21 @@ elf_vax_relocate_section (bfd *output_bfd,
{
asection *osec;
+ /* We are turning this relocation into one
+ against a section symbol. It would be
+ proper to subtract the symbol's value,
+ osec->vma, from the emitted reloc addend,
+ but ld.so expects buggy relocs. */
osec = sec->output_section;
indx = elf_section_data (osec)->dynindx;
- BFD_ASSERT (indx > 0);
+ if (indx == 0)
+ {
+ struct elf_link_hash_table *htab;
+ htab = elf_hash_table (info);
+ osec = htab->text_index_section;
+ indx = elf_section_data (osec)->dynindx;
+ }
+ BFD_ASSERT (indx != 0);
}
outrel.r_info = ELF32_R_INFO (indx, r_type);
@@ -2087,6 +2078,7 @@ elf_vax_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
elf_vax_adjust_dynamic_symbol
#define elf_backend_size_dynamic_sections \
elf_vax_size_dynamic_sections
+#define elf_backend_init_index_section _bfd_elf_init_1_index_section
#define elf_backend_relocate_section elf_vax_relocate_section
#define elf_backend_finish_dynamic_symbol \
elf_vax_finish_dynamic_symbol
diff --git a/bfd/elf32-xc16x.c b/bfd/elf32-xc16x.c
index 1824302e8850..21d20a19a570 100644
--- a/bfd/elf32-xc16x.c
+++ b/bfd/elf32-xc16x.c
@@ -1,5 +1,5 @@
/* Infineon XC16X-specific support for 16-bit ELF.
- Copyright 2006 Free Software Foundation, Inc.
+ Copyright 2006, 2007 Free Software Foundation, Inc.
Contributed by KPIT Cummins Infosystems
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
along with this program; 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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/xc16x.h"
@@ -205,6 +205,22 @@ xc16x_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+xc16x_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (xc16x_elf_howto_table) / sizeof (xc16x_elf_howto_table[0]);
+ i++)
+ if (xc16x_elf_howto_table[i].name != NULL
+ && strcasecmp (xc16x_elf_howto_table[i].name, r_name) == 0)
+ return &xc16x_elf_howto_table[i];
+
+ return NULL;
+}
+
/* For a particular operand this function is
called to finalise the type of relocation. */
@@ -328,9 +344,6 @@ elf32_xc16x_relocate_section (bfd *output_bfd,
struct elf_link_hash_entry **sym_hashes;
Elf_Internal_Rela *rel, *relend;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -368,11 +381,27 @@ elf32_xc16x_relocate_section (bfd *output_bfd,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ reloc_howto_type *howto;
+ howto = xc16x_reloc_type_lookup (input_bfd, r_type);
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
r = elf32_xc16x_final_link_relocate (r_type, input_bfd, output_bfd,
- input_section,
- contents, rel->r_offset,
- relocation, rel->r_addend,
- info, sec, h == NULL);
+ input_section,
+ contents, rel->r_offset,
+ relocation, rel->r_addend,
+ info, sec, h == NULL);
}
return TRUE;
@@ -441,6 +470,7 @@ elf32_xc16x_object_p (bfd *abfd)
#define elf_backend_object_p elf32_xc16x_object_p
#define elf_backend_can_gc_sections 1
#define bfd_elf32_bfd_reloc_type_lookup xc16x_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup xc16x_reloc_name_lookup
#define elf_info_to_howto elf32_xc16x_info_to_howto
#define elf_info_to_howto_rel elf32_xc16x_info_to_howto
#define elf_backend_relocate_section elf32_xc16x_relocate_section
diff --git a/bfd/elf32-xstormy16.c b/bfd/elf32-xstormy16.c
index 1341a4405ec9..0ef9afd26ceb 100644
--- a/bfd/elf32-xstormy16.c
+++ b/bfd/elf32-xstormy16.c
@@ -1,5 +1,6 @@
/* Xstormy16-specific support for 32-bit ELF.
- Copyright 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +19,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/xstormy16.h"
@@ -348,6 +349,31 @@ xstormy16_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+xstormy16_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (xstormy16_elf_howto_table)
+ / sizeof (xstormy16_elf_howto_table[0]));
+ i++)
+ if (xstormy16_elf_howto_table[i].name != NULL
+ && strcasecmp (xstormy16_elf_howto_table[i].name, r_name) == 0)
+ return &xstormy16_elf_howto_table[i];
+
+ for (i = 0;
+ i < (sizeof (xstormy16_elf_howto_table2)
+ / sizeof (xstormy16_elf_howto_table2[0]));
+ i++)
+ if (xstormy16_elf_howto_table2[i].name != NULL
+ && strcasecmp (xstormy16_elf_howto_table2[i].name, r_name) == 0)
+ return &xstormy16_elf_howto_table2[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for an XSTORMY16 ELF reloc. */
static void
@@ -754,9 +780,6 @@ xstormy16_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNU
bfd *dynobj;
asection *splt;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
relend = relocs + input_section->reloc_count;
@@ -806,6 +829,20 @@ xstormy16_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNU
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
if (h != NULL)
name = h->root.root.string;
else
@@ -967,50 +1004,21 @@ xstormy16_elf_finish_dynamic_sections (bfd *abfd ATTRIBUTE_UNUSED,
relocation. */
static asection *
-xstormy16_elf_gc_mark_hook (asection * sec,
- struct bfd_link_info * info ATTRIBUTE_UNUSED,
- Elf_Internal_Rela * rel,
- struct elf_link_hash_entry * h,
- Elf_Internal_Sym * sym)
+xstormy16_elf_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_XSTORMY16_GNU_VTINHERIT:
- case R_XSTORMY16_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
-}
-
-/* Update the got entry reference counts for the section being removed. */
-
-static bfd_boolean
-xstormy16_elf_gc_sweep_hook (bfd * abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info * info ATTRIBUTE_UNUSED,
- asection * sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela * relocs ATTRIBUTE_UNUSED)
-{
- return TRUE;
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_XSTORMY16_GNU_VTINHERIT:
+ case R_XSTORMY16_GNU_VTENTRY:
+ return NULL;
+ }
+
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
#define ELF_ARCH bfd_arch_xstormy16
@@ -1024,10 +1032,11 @@ xstormy16_elf_gc_sweep_hook (bfd * abfd ATTRIBUTE_UNUSED,
#define elf_info_to_howto xstormy16_info_to_howto_rela
#define elf_backend_relocate_section xstormy16_elf_relocate_section
#define elf_backend_gc_mark_hook xstormy16_elf_gc_mark_hook
-#define elf_backend_gc_sweep_hook xstormy16_elf_gc_sweep_hook
#define elf_backend_check_relocs xstormy16_elf_check_relocs
#define elf_backend_always_size_sections \
xstormy16_elf_always_size_sections
+#define elf_backend_omit_section_dynsym \
+ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
#define elf_backend_finish_dynamic_sections \
xstormy16_elf_finish_dynamic_sections
@@ -1035,6 +1044,8 @@ xstormy16_elf_gc_sweep_hook (bfd * abfd ATTRIBUTE_UNUSED,
#define elf_backend_rela_normal 1
#define bfd_elf32_bfd_reloc_type_lookup xstormy16_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup \
+ xstormy16_reloc_name_lookup
#define bfd_elf32_bfd_relax_section xstormy16_elf_relax_section
#include "elf32-target.h"
diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c
index 7a41d6285771..a8ec37e5298d 100644
--- a/bfd/elf32-xtensa.c
+++ b/bfd/elf32-xtensa.c
@@ -1,5 +1,5 @@
/* Xtensa-specific support for 32-bit ELF.
- Copyright 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include <stdarg.h>
#include <strings.h>
@@ -35,7 +35,7 @@
/* Local helper functions. */
-static bfd_boolean add_extra_plt_sections (bfd *, int);
+static bfd_boolean add_extra_plt_sections (struct bfd_link_info *, int);
static char *vsprint_msg (const char *, const char *, int, ...) ATTRIBUTE_PRINTF(2,4);
static bfd_reloc_status_type bfd_elf_xtensa_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
@@ -94,8 +94,8 @@ static Elf_Internal_Sym *retrieve_local_syms (bfd *);
/* Miscellaneous utility functions. */
-static asection *elf_xtensa_get_plt_section (bfd *, int);
-static asection *elf_xtensa_get_gotplt_section (bfd *, int);
+static asection *elf_xtensa_get_plt_section (struct bfd_link_info *, int);
+static asection *elf_xtensa_get_gotplt_section (struct bfd_link_info *, int);
static asection *get_elf_r_symndx_section (bfd *, unsigned long);
static struct elf_link_hash_entry *get_elf_r_symndx_hash_entry
(bfd *, unsigned long);
@@ -103,10 +103,12 @@ static bfd_vma get_elf_r_symndx_offset (bfd *, unsigned long);
static bfd_boolean is_reloc_sym_weak (bfd *, Elf_Internal_Rela *);
static bfd_boolean pcrel_reloc_fits (xtensa_opcode, int, bfd_vma, bfd_vma);
static bfd_boolean xtensa_is_property_section (asection *);
+static bfd_boolean xtensa_is_insntable_section (asection *);
static bfd_boolean xtensa_is_littable_section (asection *);
+static bfd_boolean xtensa_is_proptable_section (asection *);
static int internal_reloc_compare (const void *, const void *);
static int internal_reloc_matches (const void *, const void *);
-extern char *xtensa_get_property_section_name (asection *, const char *);
+extern asection *xtensa_get_property_section (asection *, const char *);
static flagword xtensa_get_property_predef_flags (asection *);
/* Other functions called directly by the linker. */
@@ -132,16 +134,6 @@ int elf32xtensa_size_opt;
typedef struct xtensa_relax_info_struct xtensa_relax_info;
-/* Total count of PLT relocations seen during check_relocs.
- The actual PLT code must be split into multiple sections and all
- the sections have to be created before size_dynamic_sections,
- where we figure out the exact number of PLT entries that will be
- needed. It is OK if this count is an overestimate, e.g., some
- relocations may be removed by GC. */
-
-static int plt_reloc_count = 0;
-
-
/* The GNU tools do not easily allow extending interfaces to pass around
the pointer to the Xtensa ISA information, so instead we add a global
variable here (in BFD) that can be used by any of the tools that need
@@ -166,163 +158,132 @@ static reloc_howto_type elf_howto_table[] =
{
HOWTO (R_XTENSA_NONE, 0, 0, 0, FALSE, 0, complain_overflow_dont,
bfd_elf_xtensa_reloc, "R_XTENSA_NONE",
- FALSE, 0x00000000, 0x00000000, FALSE),
+ FALSE, 0, 0, FALSE),
HOWTO (R_XTENSA_32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
bfd_elf_xtensa_reloc, "R_XTENSA_32",
TRUE, 0xffffffff, 0xffffffff, FALSE),
+
/* Replace a 32-bit value with a value from the runtime linker (only
used by linker-generated stub functions). The r_addend value is
special: 1 means to substitute a pointer to the runtime linker's
dynamic resolver function; 2 means to substitute the link map for
the shared object. */
HOWTO (R_XTENSA_RTLD, 0, 2, 32, FALSE, 0, complain_overflow_dont,
- NULL, "R_XTENSA_RTLD",
- FALSE, 0x00000000, 0x00000000, FALSE),
+ NULL, "R_XTENSA_RTLD", FALSE, 0, 0, FALSE),
+
HOWTO (R_XTENSA_GLOB_DAT, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_XTENSA_GLOB_DAT",
- FALSE, 0xffffffff, 0xffffffff, FALSE),
+ FALSE, 0, 0xffffffff, FALSE),
HOWTO (R_XTENSA_JMP_SLOT, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_XTENSA_JMP_SLOT",
- FALSE, 0xffffffff, 0xffffffff, FALSE),
+ FALSE, 0, 0xffffffff, FALSE),
HOWTO (R_XTENSA_RELATIVE, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
bfd_elf_generic_reloc, "R_XTENSA_RELATIVE",
- FALSE, 0xffffffff, 0xffffffff, FALSE),
+ FALSE, 0, 0xffffffff, FALSE),
HOWTO (R_XTENSA_PLT, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
bfd_elf_xtensa_reloc, "R_XTENSA_PLT",
- FALSE, 0xffffffff, 0xffffffff, FALSE),
+ FALSE, 0, 0xffffffff, FALSE),
+
EMPTY_HOWTO (7),
+
+ /* Old relocations for backward compatibility. */
HOWTO (R_XTENSA_OP0, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_OP0",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_OP0", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_OP1, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_OP1",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_OP1", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_OP2, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_OP2",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_OP2", FALSE, 0, 0, TRUE),
+
/* Assembly auto-expansion. */
HOWTO (R_XTENSA_ASM_EXPAND, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_ASM_EXPAND",
- FALSE, 0x00000000, 0x00000000, FALSE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_ASM_EXPAND", FALSE, 0, 0, TRUE),
/* Relax assembly auto-expansion. */
HOWTO (R_XTENSA_ASM_SIMPLIFY, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_ASM_SIMPLIFY",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_ASM_SIMPLIFY", FALSE, 0, 0, TRUE),
+
EMPTY_HOWTO (13),
EMPTY_HOWTO (14),
+
/* GNU extension to record C++ vtable hierarchy. */
HOWTO (R_XTENSA_GNU_VTINHERIT, 0, 2, 0, FALSE, 0, complain_overflow_dont,
NULL, "R_XTENSA_GNU_VTINHERIT",
- FALSE, 0x00000000, 0x00000000, FALSE),
+ FALSE, 0, 0, FALSE),
/* GNU extension to record C++ vtable member usage. */
HOWTO (R_XTENSA_GNU_VTENTRY, 0, 2, 0, FALSE, 0, complain_overflow_dont,
_bfd_elf_rel_vtable_reloc_fn, "R_XTENSA_GNU_VTENTRY",
- FALSE, 0x00000000, 0x00000000, FALSE),
+ FALSE, 0, 0, FALSE),
/* Relocations for supporting difference of symbols. */
HOWTO (R_XTENSA_DIFF8, 0, 0, 8, FALSE, 0, complain_overflow_bitfield,
- bfd_elf_xtensa_reloc, "R_XTENSA_DIFF8",
- FALSE, 0xffffffff, 0xffffffff, FALSE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_DIFF8", FALSE, 0, 0xff, FALSE),
HOWTO (R_XTENSA_DIFF16, 0, 1, 16, FALSE, 0, complain_overflow_bitfield,
- bfd_elf_xtensa_reloc, "R_XTENSA_DIFF16",
- FALSE, 0xffffffff, 0xffffffff, FALSE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_DIFF16", FALSE, 0, 0xffff, FALSE),
HOWTO (R_XTENSA_DIFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
- bfd_elf_xtensa_reloc, "R_XTENSA_DIFF32",
- FALSE, 0xffffffff, 0xffffffff, FALSE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_DIFF32", FALSE, 0, 0xffffffff, FALSE),
/* General immediate operand relocations. */
HOWTO (R_XTENSA_SLOT0_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT0_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT0_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT1_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT1_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT1_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT2_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT2_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT2_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT3_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT3_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT3_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT4_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT4_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT4_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT5_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT5_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT5_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT6_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT6_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT6_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT7_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT7_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT7_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT8_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT8_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT8_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT9_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT9_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT9_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT10_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT10_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT10_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT11_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT11_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT11_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT12_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT12_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT12_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT13_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT13_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT13_OP", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT14_OP, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT14_OP",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT14_OP", FALSE, 0, 0, TRUE),
/* "Alternate" relocations. The meaning of these is opcode-specific. */
HOWTO (R_XTENSA_SLOT0_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT0_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT0_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT1_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT1_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT1_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT2_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT2_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT2_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT3_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT3_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT3_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT4_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT4_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT4_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT5_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT5_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT5_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT6_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT6_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT6_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT7_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT7_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT7_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT8_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT8_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT8_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT9_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT9_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT9_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT10_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT10_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT10_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT11_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT11_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT11_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT12_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT12_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT12_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT13_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT13_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE),
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT13_ALT", FALSE, 0, 0, TRUE),
HOWTO (R_XTENSA_SLOT14_ALT, 0, 0, 0, TRUE, 0, complain_overflow_dont,
- bfd_elf_xtensa_reloc, "R_XTENSA_SLOT14_ALT",
- FALSE, 0x00000000, 0x00000000, TRUE)
+ bfd_elf_xtensa_reloc, "R_XTENSA_SLOT14_ALT", FALSE, 0, 0, TRUE),
};
#if DEBUG_GEN_RELOC
@@ -430,6 +391,20 @@ elf_xtensa_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+elf_xtensa_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof (elf_howto_table) / sizeof (elf_howto_table[0]); i++)
+ if (elf_howto_table[i].name != NULL
+ && strcasecmp (elf_howto_table[i].name, r_name) == 0)
+ return &elf_howto_table[i];
+
+ return NULL;
+}
+
/* Given an ELF "rela" relocation, find the corresponding howto and record
it in the BFD internal arelent representation of the relocation. */
@@ -496,9 +471,70 @@ static const bfd_byte elf_xtensa_le_plt_entry[PLT_ENTRY_SIZE] =
0 /* unused */
};
+/* Xtensa ELF linker hash table. */
+
+struct elf_xtensa_link_hash_table
+{
+ struct elf_link_hash_table elf;
+
+ /* Short-cuts to get to dynamic linker sections. */
+ asection *sgot;
+ asection *sgotplt;
+ asection *srelgot;
+ asection *splt;
+ asection *srelplt;
+ asection *sgotloc;
+ asection *spltlittbl;
+
+ /* Total count of PLT relocations seen during check_relocs.
+ The actual PLT code must be split into multiple sections and all
+ the sections have to be created before size_dynamic_sections,
+ where we figure out the exact number of PLT entries that will be
+ needed. It is OK if this count is an overestimate, e.g., some
+ relocations may be removed by GC. */
+ int plt_reloc_count;
+};
+
+/* Get the Xtensa ELF linker hash table from a link_info structure. */
+
+#define elf_xtensa_hash_table(p) \
+ ((struct elf_xtensa_link_hash_table *) ((p)->hash))
+
+/* Create an Xtensa ELF linker hash table. */
+
+static struct bfd_link_hash_table *
+elf_xtensa_link_hash_table_create (bfd *abfd)
+{
+ struct elf_xtensa_link_hash_table *ret;
+ bfd_size_type amt = sizeof (struct elf_xtensa_link_hash_table);
+
+ ret = bfd_malloc (amt);
+ if (ret == NULL)
+ return NULL;
+
+ if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd,
+ _bfd_elf_link_hash_newfunc,
+ sizeof (struct elf_link_hash_entry)))
+ {
+ free (ret);
+ return NULL;
+ }
+
+ ret->sgot = NULL;
+ ret->sgotplt = NULL;
+ ret->srelgot = NULL;
+ ret->splt = NULL;
+ ret->srelplt = NULL;
+ ret->sgotloc = NULL;
+ ret->spltlittbl = NULL;
+
+ ret->plt_reloc_count = 0;
+
+ return &ret->elf.root;
+}
static inline bfd_boolean
-xtensa_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
+elf_xtensa_dynamic_symbol_p (struct elf_link_hash_entry *h,
struct bfd_link_info *info)
{
/* Check if we should do dynamic things to this symbol. The
@@ -571,16 +607,15 @@ xtensa_read_table_entries (bfd *abfd,
bfd_boolean output_addr)
{
asection *table_section;
- char *table_section_name;
bfd_size_type table_size = 0;
bfd_byte *table_data;
property_table_entry *blocks;
int blk, block_count;
bfd_size_type num_records;
- Elf_Internal_Rela *internal_relocs;
- bfd_vma section_addr;
+ Elf_Internal_Rela *internal_relocs, *irel, *rel_end;
+ bfd_vma section_addr, off;
flagword predef_flags;
- bfd_size_type table_entry_size;
+ bfd_size_type table_entry_size, section_limit;
if (!section
|| !(section->flags & SEC_ALLOC)
@@ -590,9 +625,7 @@ xtensa_read_table_entries (bfd *abfd,
return 0;
}
- table_section_name = xtensa_get_property_section_name (section, sec_name);
- table_section = bfd_get_section_by_name (abfd, table_section_name);
- free (table_section_name);
+ table_section = xtensa_get_property_section (section, sec_name);
if (table_section)
table_size = table_section->size;
@@ -618,67 +651,63 @@ xtensa_read_table_entries (bfd *abfd,
else
section_addr = section->vma;
- /* If the file has not yet been relocated, process the relocations
- and sort out the table entries that apply to the specified section. */
internal_relocs = retrieve_internal_relocs (abfd, table_section, TRUE);
if (internal_relocs && !table_section->reloc_done)
{
- unsigned i;
-
- for (i = 0; i < table_section->reloc_count; i++)
- {
- Elf_Internal_Rela *rel = &internal_relocs[i];
- unsigned long r_symndx;
+ qsort (internal_relocs, table_section->reloc_count,
+ sizeof (Elf_Internal_Rela), internal_reloc_compare);
+ irel = internal_relocs;
+ }
+ else
+ irel = NULL;
- if (ELF32_R_TYPE (rel->r_info) == R_XTENSA_NONE)
- continue;
+ section_limit = bfd_get_section_limit (abfd, section);
+ rel_end = internal_relocs + table_section->reloc_count;
- BFD_ASSERT (ELF32_R_TYPE (rel->r_info) == R_XTENSA_32);
- r_symndx = ELF32_R_SYM (rel->r_info);
+ for (off = 0; off < table_size; off += table_entry_size)
+ {
+ bfd_vma address = bfd_get_32 (abfd, table_data + off);
- if (get_elf_r_symndx_section (abfd, r_symndx) == section)
- {
- bfd_vma sym_off = get_elf_r_symndx_offset (abfd, r_symndx);
- BFD_ASSERT (sym_off == 0);
- blocks[block_count].address =
- (section_addr + sym_off + rel->r_addend
- + bfd_get_32 (abfd, table_data + rel->r_offset));
- blocks[block_count].size =
- bfd_get_32 (abfd, table_data + rel->r_offset + 4);
- if (predef_flags)
- blocks[block_count].flags = predef_flags;
- else
- blocks[block_count].flags =
- bfd_get_32 (abfd, table_data + rel->r_offset + 8);
- block_count++;
- }
+ /* Skip any relocations before the current offset. This should help
+ avoid confusion caused by unexpected relocations for the preceding
+ table entry. */
+ while (irel &&
+ (irel->r_offset < off
+ || (irel->r_offset == off
+ && ELF32_R_TYPE (irel->r_info) == R_XTENSA_NONE)))
+ {
+ irel += 1;
+ if (irel >= rel_end)
+ irel = 0;
}
- }
- else
- {
- /* The file has already been relocated and the addresses are
- already in the table. */
- bfd_vma off;
- bfd_size_type section_limit = bfd_get_section_limit (abfd, section);
- for (off = 0; off < table_size; off += table_entry_size)
+ if (irel && irel->r_offset == off)
{
- bfd_vma address = bfd_get_32 (abfd, table_data + off);
+ bfd_vma sym_off;
+ unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
+ BFD_ASSERT (ELF32_R_TYPE (irel->r_info) == R_XTENSA_32);
- if (address >= section_addr
- && address < section_addr + section_limit)
- {
- blocks[block_count].address = address;
- blocks[block_count].size =
- bfd_get_32 (abfd, table_data + off + 4);
- if (predef_flags)
- blocks[block_count].flags = predef_flags;
- else
- blocks[block_count].flags =
- bfd_get_32 (abfd, table_data + off + 8);
- block_count++;
- }
+ if (get_elf_r_symndx_section (abfd, r_symndx) != section)
+ continue;
+
+ sym_off = get_elf_r_symndx_offset (abfd, r_symndx);
+ BFD_ASSERT (sym_off == 0);
+ address += (section_addr + sym_off + irel->r_addend);
}
+ else
+ {
+ if (address < section_addr
+ || address >= section_addr + section_limit)
+ continue;
+ }
+
+ blocks[block_count].address = address;
+ blocks[block_count].size = bfd_get_32 (abfd, table_data + off + 4);
+ if (predef_flags)
+ blocks[block_count].flags = predef_flags;
+ else
+ blocks[block_count].flags = bfd_get_32 (abfd, table_data + off + 8);
+ block_count++;
}
release_contents (table_section, table_data);
@@ -757,6 +786,7 @@ elf_xtensa_check_relocs (bfd *abfd,
asection *sec,
const Elf_Internal_Rela *relocs)
{
+ struct elf_xtensa_link_hash_table *htab;
Elf_Internal_Shdr *symtab_hdr;
struct elf_link_hash_entry **sym_hashes;
const Elf_Internal_Rela *rel;
@@ -765,6 +795,7 @@ elf_xtensa_check_relocs (bfd *abfd,
if (info->relocatable)
return TRUE;
+ htab = elf_xtensa_hash_table (info);
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (abfd);
@@ -829,12 +860,11 @@ elf_xtensa_check_relocs (bfd *abfd,
/* Keep track of the total PLT relocation count even if we
don't yet know whether the dynamic sections will be
created. */
- plt_reloc_count += 1;
+ htab->plt_reloc_count += 1;
if (elf_hash_table (info)->dynamic_sections_created)
{
- if (!add_extra_plt_sections (elf_hash_table (info)->dynobj,
- plt_reloc_count))
+ if (! add_extra_plt_sections (info, htab->plt_reloc_count))
return FALSE;
}
}
@@ -929,18 +959,19 @@ elf_xtensa_check_relocs (bfd *abfd,
static void
elf_xtensa_make_sym_local (struct bfd_link_info *info,
- struct elf_link_hash_entry *h)
+ struct elf_link_hash_entry *h)
{
if (info->shared)
{
if (h->plt.refcount > 0)
- {
- /* Will use RELATIVE relocs instead of JMP_SLOT relocs. */
- if (h->got.refcount < 0)
- h->got.refcount = 0;
- h->got.refcount += h->plt.refcount;
- h->plt.refcount = 0;
- }
+ {
+ /* For shared objects, there's no need for PLT entries for local
+ symbols (use RELATIVE relocs instead of JMP_SLOT relocs). */
+ if (h->got.refcount < 0)
+ h->got.refcount = 0;
+ h->got.refcount += h->plt.refcount;
+ h->plt.refcount = 0;
+ }
}
else
{
@@ -953,8 +984,8 @@ elf_xtensa_make_sym_local (struct bfd_link_info *info,
static void
elf_xtensa_hide_symbol (struct bfd_link_info *info,
- struct elf_link_hash_entry *h,
- bfd_boolean force_local)
+ struct elf_link_hash_entry *h,
+ bfd_boolean force_local)
{
/* For a shared link, move the plt refcount to the got refcount to leave
space for RELATIVE relocs. */
@@ -969,38 +1000,33 @@ elf_xtensa_hide_symbol (struct bfd_link_info *info,
static asection *
elf_xtensa_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
Elf_Internal_Rela *rel,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
- if (h)
- {
- switch (ELF32_R_TYPE (rel->r_info))
- {
- case R_XTENSA_GNU_VTINHERIT:
- case R_XTENSA_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
+ /* Property sections are marked "KEEP" in the linker scripts, but they
+ should not cause other sections to be marked. (This approach relies
+ on elf_xtensa_discard_info to remove property table entries that
+ describe discarded sections. Alternatively, it might be more
+ efficient to avoid using "KEEP" in the linker scripts and instead use
+ the gc_mark_extra_sections hook to mark only the property sections
+ that describe marked sections. That alternative does not work well
+ with the current property table sections, which do not correspond
+ one-to-one with the sections they describe, but that should be fixed
+ someday.) */
+ if (xtensa_is_property_section (sec))
+ return NULL;
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ if (h != NULL)
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_XTENSA_GNU_VTINHERIT:
+ case R_XTENSA_GNU_VTENTRY:
+ return NULL;
+ }
- return NULL;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
@@ -1077,16 +1103,22 @@ elf_xtensa_gc_sweep_hook (bfd *abfd,
static bfd_boolean
elf_xtensa_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
{
+ struct elf_xtensa_link_hash_table *htab;
flagword flags, noalloc_flags;
- asection *s;
+
+ htab = elf_xtensa_hash_table (info);
/* First do all the standard stuff. */
if (! _bfd_elf_create_dynamic_sections (dynobj, info))
return FALSE;
+ htab->splt = bfd_get_section_by_name (dynobj, ".plt");
+ htab->srelplt = bfd_get_section_by_name (dynobj, ".rela.plt");
+ htab->sgot = bfd_get_section_by_name (dynobj, ".got");
+ htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
/* Create any extra PLT sections in case check_relocs has already
been called on all the non-dynamic input files. */
- if (!add_extra_plt_sections (dynobj, plt_reloc_count))
+ if (! add_extra_plt_sections (info, htab->plt_reloc_count))
return FALSE;
noalloc_flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
@@ -1094,28 +1126,27 @@ elf_xtensa_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
flags = noalloc_flags | SEC_ALLOC | SEC_LOAD;
/* Mark the ".got.plt" section READONLY. */
- s = bfd_get_section_by_name (dynobj, ".got.plt");
- if (s == NULL
- || ! bfd_set_section_flags (dynobj, s, flags))
+ if (htab->sgotplt == NULL
+ || ! bfd_set_section_flags (dynobj, htab->sgotplt, flags))
return FALSE;
/* Create ".rela.got". */
- s = bfd_make_section_with_flags (dynobj, ".rela.got", flags);
- if (s == NULL
- || ! bfd_set_section_alignment (dynobj, s, 2))
+ htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", flags);
+ if (htab->srelgot == NULL
+ || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2))
return FALSE;
/* Create ".got.loc" (literal tables for use by dynamic linker). */
- s = bfd_make_section_with_flags (dynobj, ".got.loc", flags);
- if (s == NULL
- || ! bfd_set_section_alignment (dynobj, s, 2))
+ htab->sgotloc = bfd_make_section_with_flags (dynobj, ".got.loc", flags);
+ if (htab->sgotloc == NULL
+ || ! bfd_set_section_alignment (dynobj, htab->sgotloc, 2))
return FALSE;
/* Create ".xt.lit.plt" (literal table for ".got.plt*"). */
- s = bfd_make_section_with_flags (dynobj, ".xt.lit.plt",
- noalloc_flags);
- if (s == NULL
- || ! bfd_set_section_alignment (dynobj, s, 2))
+ htab->spltlittbl = bfd_make_section_with_flags (dynobj, ".xt.lit.plt",
+ noalloc_flags);
+ if (htab->spltlittbl == NULL
+ || ! bfd_set_section_alignment (dynobj, htab->spltlittbl, 2))
return FALSE;
return TRUE;
@@ -1123,8 +1154,9 @@ elf_xtensa_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
static bfd_boolean
-add_extra_plt_sections (bfd *dynobj, int count)
+add_extra_plt_sections (struct bfd_link_info *info, int count)
{
+ bfd *dynobj = elf_hash_table (info)->dynobj;
int chunk;
/* Iterate over all chunks except 0 which uses the standard ".plt" and
@@ -1136,7 +1168,7 @@ add_extra_plt_sections (bfd *dynobj, int count)
asection *s;
/* Stop when we find a section has already been created. */
- if (elf_xtensa_get_plt_section (dynobj, chunk))
+ if (elf_xtensa_get_plt_section (info, chunk))
break;
flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
@@ -1144,8 +1176,7 @@ add_extra_plt_sections (bfd *dynobj, int count)
sname = (char *) bfd_malloc (10);
sprintf (sname, ".plt.%u", chunk);
- s = bfd_make_section_with_flags (dynobj, sname,
- flags | SEC_CODE);
+ s = bfd_make_section_with_flags (dynobj, sname, flags | SEC_CODE);
if (s == NULL
|| ! bfd_set_section_alignment (dynobj, s, 2))
return FALSE;
@@ -1193,56 +1224,44 @@ elf_xtensa_adjust_dynamic_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
static bfd_boolean
-elf_xtensa_fix_refcounts (struct elf_link_hash_entry *h, void *arg)
+elf_xtensa_allocate_dynrelocs (struct elf_link_hash_entry *h, void *arg)
{
- struct bfd_link_info *info = (struct bfd_link_info *) arg;
-
- if (h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
-
- if (! xtensa_elf_dynamic_symbol_p (h, info))
- elf_xtensa_make_sym_local (info, h);
-
- return TRUE;
-}
+ struct bfd_link_info *info;
+ struct elf_xtensa_link_hash_table *htab;
+ bfd_boolean is_dynamic;
-
-static bfd_boolean
-elf_xtensa_allocate_plt_size (struct elf_link_hash_entry *h, void *arg)
-{
- asection *srelplt = (asection *) arg;
+ if (h->root.type == bfd_link_hash_indirect)
+ return TRUE;
if (h->root.type == bfd_link_hash_warning)
h = (struct elf_link_hash_entry *) h->root.u.i.link;
- if (h->plt.refcount > 0)
- srelplt->size += (h->plt.refcount * sizeof (Elf32_External_Rela));
-
- return TRUE;
-}
+ info = (struct bfd_link_info *) arg;
+ htab = elf_xtensa_hash_table (info);
+ is_dynamic = elf_xtensa_dynamic_symbol_p (h, info);
-static bfd_boolean
-elf_xtensa_allocate_got_size (struct elf_link_hash_entry *h, void *arg)
-{
- asection *srelgot = (asection *) arg;
+ if (! is_dynamic)
+ elf_xtensa_make_sym_local (info, h);
- if (h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ if (h->plt.refcount > 0)
+ htab->srelplt->size += (h->plt.refcount * sizeof (Elf32_External_Rela));
if (h->got.refcount > 0)
- srelgot->size += (h->got.refcount * sizeof (Elf32_External_Rela));
+ htab->srelgot->size += (h->got.refcount * sizeof (Elf32_External_Rela));
return TRUE;
}
static void
-elf_xtensa_allocate_local_got_size (struct bfd_link_info *info,
- asection *srelgot)
+elf_xtensa_allocate_local_got_size (struct bfd_link_info *info)
{
+ struct elf_xtensa_link_hash_table *htab;
bfd *i;
+ htab = elf_xtensa_hash_table (info);
+
for (i = info->input_bfds; i; i = i->link_next)
{
bfd_signed_vma *local_got_refcounts;
@@ -1259,8 +1278,8 @@ elf_xtensa_allocate_local_got_size (struct bfd_link_info *info,
for (j = 0; j < cnt; ++j)
{
if (local_got_refcounts[j] > 0)
- srelgot->size += (local_got_refcounts[j]
- * sizeof (Elf32_External_Rela));
+ htab->srelgot->size += (local_got_refcounts[j]
+ * sizeof (Elf32_External_Rela));
}
}
}
@@ -1272,6 +1291,7 @@ static bfd_boolean
elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
struct bfd_link_info *info)
{
+ struct elf_xtensa_link_hash_table *htab;
bfd *dynobj, *abfd;
asection *s, *srelplt, *splt, *sgotplt, *srelgot, *spltlittbl, *sgotloc;
bfd_boolean relplt, relgot;
@@ -1279,14 +1299,22 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
plt_entries = 0;
plt_chunks = 0;
- srelgot = 0;
+ htab = elf_xtensa_hash_table (info);
dynobj = elf_hash_table (info)->dynobj;
if (dynobj == NULL)
abort ();
+ srelgot = htab->srelgot;
+ srelplt = htab->srelplt;
if (elf_hash_table (info)->dynamic_sections_created)
{
+ BFD_ASSERT (htab->srelgot != NULL
+ && htab->srelplt != NULL
+ && htab->sgot != NULL
+ && htab->spltlittbl != NULL
+ && htab->sgotloc != NULL);
+
/* Set the contents of the .interp section to the interpreter. */
if (info->executable)
{
@@ -1298,48 +1326,27 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
}
/* Allocate room for one word in ".got". */
- s = bfd_get_section_by_name (dynobj, ".got");
- if (s == NULL)
- abort ();
- s->size = 4;
+ htab->sgot->size = 4;
- /* Adjust refcounts for symbols that we now know are not "dynamic". */
+ /* Allocate space in ".rela.got" for literals that reference global
+ symbols and space in ".rela.plt" for literals that have PLT
+ entries. */
elf_link_hash_traverse (elf_hash_table (info),
- elf_xtensa_fix_refcounts,
+ elf_xtensa_allocate_dynrelocs,
(void *) info);
- /* Allocate space in ".rela.got" for literals that reference
- global symbols. */
- srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
- if (srelgot == NULL)
- abort ();
- elf_link_hash_traverse (elf_hash_table (info),
- elf_xtensa_allocate_got_size,
- (void *) srelgot);
-
/* If we are generating a shared object, we also need space in
".rela.got" for R_XTENSA_RELATIVE relocs for literals that
reference local symbols. */
if (info->shared)
- elf_xtensa_allocate_local_got_size (info, srelgot);
-
- /* Allocate space in ".rela.plt" for literals that have PLT entries. */
- srelplt = bfd_get_section_by_name (dynobj, ".rela.plt");
- if (srelplt == NULL)
- abort ();
- elf_link_hash_traverse (elf_hash_table (info),
- elf_xtensa_allocate_plt_size,
- (void *) srelplt);
+ elf_xtensa_allocate_local_got_size (info);
/* Allocate space in ".plt" to match the size of ".rela.plt". For
each PLT entry, we need the PLT code plus a 4-byte literal.
For each chunk of ".plt", we also need two more 4-byte
literals, two corresponding entries in ".rela.got", and an
8-byte entry in ".xt.lit.plt". */
- spltlittbl = bfd_get_section_by_name (dynobj, ".xt.lit.plt");
- if (spltlittbl == NULL)
- abort ();
-
+ spltlittbl = htab->spltlittbl;
plt_entries = srelplt->size / sizeof (Elf32_External_Rela);
plt_chunks =
(plt_entries + PLT_ENTRIES_PER_CHUNK - 1) / PLT_ENTRIES_PER_CHUNK;
@@ -1348,14 +1355,13 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
created earlier because the initial count of PLT relocations
was an overestimate. */
for (chunk = 0;
- (splt = elf_xtensa_get_plt_section (dynobj, chunk)) != NULL;
+ (splt = elf_xtensa_get_plt_section (info, chunk)) != NULL;
chunk++)
{
int chunk_entries;
- sgotplt = elf_xtensa_get_gotplt_section (dynobj, chunk);
- if (sgotplt == NULL)
- abort ();
+ sgotplt = elf_xtensa_get_gotplt_section (info, chunk);
+ BFD_ASSERT (sgotplt != NULL);
if (chunk < plt_chunks - 1)
chunk_entries = PLT_ENTRIES_PER_CHUNK;
@@ -1380,9 +1386,7 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
/* Allocate space in ".got.loc" to match the total size of all the
literal tables. */
- sgotloc = bfd_get_section_by_name (dynobj, ".got.loc");
- if (sgotloc == NULL)
- abort ();
+ sgotloc = htab->sgotloc;
sgotloc->size = spltlittbl->size;
for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next)
{
@@ -1412,7 +1416,7 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
of the dynobj section names depend upon the input files. */
name = bfd_get_section_name (dynobj, s);
- if (strncmp (name, ".rela", 5) == 0)
+ if (CONST_STRNEQ (name, ".rela"))
{
if (s->size != 0)
{
@@ -1426,8 +1430,8 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
s->reloc_count = 0;
}
}
- else if (strncmp (name, ".plt.", 5) != 0
- && strncmp (name, ".got.plt.", 9) != 0
+ else if (! CONST_STRNEQ (name, ".plt.")
+ && ! CONST_STRNEQ (name, ".got.plt.")
&& strcmp (name, ".got") != 0
&& strcmp (name, ".plt") != 0
&& strcmp (name, ".got.plt") != 0
@@ -1465,8 +1469,6 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
/* Add the special XTENSA_RTLD relocations now. The offsets won't be
known until finish_dynamic_sections, but we need to get the relocs
in place before they are sorted. */
- if (srelgot == NULL)
- abort ();
for (chunk = 0; chunk < plt_chunks; chunk++)
{
Elf_Internal_Rela irela;
@@ -1492,7 +1494,7 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
#define add_dynamic_entry(TAG, VAL) \
_bfd_elf_add_dynamic_entry (info, TAG, VAL)
- if (! info->shared)
+ if (info->executable)
{
if (!add_dynamic_entry (DT_DEBUG, 0))
return FALSE;
@@ -1525,31 +1527,6 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
}
-/* Remove any PT_LOAD segments with no allocated sections. Prior to
- binutils 2.13, this function used to remove the non-SEC_ALLOC
- sections from PT_LOAD segments, but that task has now been moved
- into elf.c. We still need this function to remove any empty
- segments that result, but there's nothing Xtensa-specific about
- this and it probably ought to be moved into elf.c as well. */
-
-static bfd_boolean
-elf_xtensa_modify_segment_map (bfd *abfd,
- struct bfd_link_info *info ATTRIBUTE_UNUSED)
-{
- struct elf_segment_map **m_p;
-
- m_p = &elf_tdata (abfd)->segment_map;
- while (*m_p)
- {
- if ((*m_p)->p_type == PT_LOAD && (*m_p)->count == 0)
- *m_p = (*m_p)->next;
- else
- m_p = &(*m_p)->next;
- }
- return TRUE;
-}
-
-
/* Perform the specified relocation. The instruction at (contents + address)
is modified to set one operand to represent the value in "relocation". The
operand position is determined by the relocation type recorded in the
@@ -1937,7 +1914,7 @@ bfd_elf_xtensa_reloc (bfd *abfd,
/* Set up an entry in the procedure linkage table. */
static bfd_vma
-elf_xtensa_create_plt_entry (bfd *dynobj,
+elf_xtensa_create_plt_entry (struct bfd_link_info *info,
bfd *output_bfd,
unsigned reloc_index)
{
@@ -1947,8 +1924,8 @@ elf_xtensa_create_plt_entry (bfd *dynobj,
int chunk;
chunk = reloc_index / PLT_ENTRIES_PER_CHUNK;
- splt = elf_xtensa_get_plt_section (dynobj, chunk);
- sgotplt = elf_xtensa_get_gotplt_section (dynobj, chunk);
+ splt = elf_xtensa_get_plt_section (info, chunk);
+ sgotplt = elf_xtensa_get_gotplt_section (info, chunk);
BFD_ASSERT (splt != NULL && sgotplt != NULL);
plt_base = splt->output_section->vma + splt->output_offset;
@@ -1995,12 +1972,11 @@ elf_xtensa_relocate_section (bfd *output_bfd,
Elf_Internal_Sym *local_syms,
asection **local_sections)
{
+ struct elf_xtensa_link_hash_table *htab;
Elf_Internal_Shdr *symtab_hdr;
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
struct elf_link_hash_entry **sym_hashes;
- asection *srelgot, *srelplt;
- bfd *dynobj;
property_table_entry *lit_table = 0;
int ltblsize = 0;
char *error_message = NULL;
@@ -2009,18 +1985,10 @@ elf_xtensa_relocate_section (bfd *output_bfd,
if (!xtensa_default_isa)
xtensa_default_isa = xtensa_isa_init (0, 0);
- dynobj = elf_hash_table (info)->dynobj;
+ htab = elf_xtensa_hash_table (info);
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
- srelgot = NULL;
- srelplt = NULL;
- if (dynobj)
- {
- srelgot = bfd_get_section_by_name (dynobj, ".rela.got");;
- srelplt = bfd_get_section_by_name (dynobj, ".rela.plt");
- }
-
if (elf_hash_table (info)->dynamic_sections_created)
{
ltblsize = xtensa_read_table_entries (input_bfd, input_section,
@@ -2062,6 +2030,53 @@ elf_xtensa_relocate_section (bfd *output_bfd,
r_symndx = ELF32_R_SYM (rel->r_info);
+ h = NULL;
+ sym = NULL;
+ sec = NULL;
+ is_weak_undef = FALSE;
+ unresolved_reloc = FALSE;
+ warned = FALSE;
+
+ if (howto->partial_inplace && !info->relocatable)
+ {
+ /* Because R_XTENSA_32 was made partial_inplace to fix some
+ problems with DWARF info in partial links, there may be
+ an addend stored in the contents. Take it out of there
+ and move it back into the addend field of the reloc. */
+ rel->r_addend += bfd_get_32 (input_bfd, contents + rel->r_offset);
+ bfd_put_32 (input_bfd, 0, contents + rel->r_offset);
+ }
+
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ sym = local_syms + r_symndx;
+ sec = local_sections[r_symndx];
+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ }
+ else
+ {
+ RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
+ r_symndx, symtab_hdr, sym_hashes,
+ h, sec, relocation,
+ unresolved_reloc, warned);
+
+ if (relocation == 0
+ && !unresolved_reloc
+ && h->root.type == bfd_link_hash_undefweak)
+ is_weak_undef = TRUE;
+ }
+
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
if (info->relocatable)
{
/* This is a relocatable link.
@@ -2143,42 +2158,6 @@ elf_xtensa_relocate_section (bfd *output_bfd,
/* This is a final link. */
- h = NULL;
- sym = NULL;
- sec = NULL;
- is_weak_undef = FALSE;
- unresolved_reloc = FALSE;
- warned = FALSE;
-
- if (howto->partial_inplace)
- {
- /* Because R_XTENSA_32 was made partial_inplace to fix some
- problems with DWARF info in partial links, there may be
- an addend stored in the contents. Take it out of there
- and move it back into the addend field of the reloc. */
- rel->r_addend += bfd_get_32 (input_bfd, contents + rel->r_offset);
- bfd_put_32 (input_bfd, 0, contents + rel->r_offset);
- }
-
- if (r_symndx < symtab_hdr->sh_info)
- {
- sym = local_syms + r_symndx;
- sec = local_sections[r_symndx];
- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- }
- else
- {
- RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
- r_symndx, symtab_hdr, sym_hashes,
- h, sec, relocation,
- unresolved_reloc, warned);
-
- if (relocation == 0
- && !unresolved_reloc
- && h->root.type == bfd_link_hash_undefweak)
- is_weak_undef = TRUE;
- }
-
if (relaxing_section)
{
/* Check if this references a section in another input file. */
@@ -2204,7 +2183,7 @@ elf_xtensa_relocate_section (bfd *output_bfd,
/* Generate dynamic relocations. */
if (elf_hash_table (info)->dynamic_sections_created)
{
- bfd_boolean dynamic_symbol = xtensa_elf_dynamic_symbol_p (h, info);
+ bfd_boolean dynamic_symbol = elf_xtensa_dynamic_symbol_p (h, info);
if (dynamic_symbol && is_operand_relocation (r_type))
{
@@ -2228,9 +2207,9 @@ elf_xtensa_relocate_section (bfd *output_bfd,
asection *srel;
if (dynamic_symbol && r_type == R_XTENSA_PLT)
- srel = srelplt;
+ srel = htab->srelplt;
else
- srel = srelgot;
+ srel = htab->srelgot;
BFD_ASSERT (srel != NULL);
@@ -2279,7 +2258,7 @@ elf_xtensa_relocate_section (bfd *output_bfd,
contents of the literal entry to the address of
the PLT entry. */
relocation =
- elf_xtensa_create_plt_entry (dynobj, output_bfd,
+ elf_xtensa_create_plt_entry (info, output_bfd,
srel->reloc_count);
}
unresolved_reloc = FALSE;
@@ -2306,13 +2285,16 @@ elf_xtensa_relocate_section (bfd *output_bfd,
if (unresolved_reloc
&& !((input_section->flags & SEC_DEBUGGING) != 0
&& h->def_dynamic))
- (*_bfd_error_handler)
- (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
- input_bfd,
- input_section,
- (long) rel->r_offset,
- howto->name,
- h->root.root.string);
+ {
+ (*_bfd_error_handler)
+ (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
+ input_bfd,
+ input_section,
+ (long) rel->r_offset,
+ howto->name,
+ h->root.root.string);
+ return FALSE;
+ }
/* There's no point in calling bfd_perform_relocation here.
Just go directly to our "special function". */
@@ -2373,12 +2355,17 @@ elf_xtensa_finish_dynamic_symbol (bfd *output_bfd ATTRIBUTE_UNUSED,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
- if (h->needs_plt
- && !h->def_regular)
+ if (h->needs_plt && !h->def_regular)
{
/* Mark the symbol as undefined, rather than as defined in
the .plt section. Leave the value alone. */
sym->st_shndx = SHN_UNDEF;
+ /* If the symbol is weak, we do need to clear the value.
+ Otherwise, the PLT entry would provide a definition for
+ the symbol even if the symbol wasn't defined anywhere,
+ and so the symbol would never be NULL. */
+ if (!h->ref_regular_nonweak)
+ sym->st_value = 0;
}
/* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
@@ -2509,6 +2496,7 @@ static bfd_boolean
elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
struct bfd_link_info *info)
{
+ struct elf_xtensa_link_hash_table *htab;
bfd *dynobj;
asection *sdyn, *srelplt, *sgot, *sxtlit, *sgotloc;
Elf32_External_Dyn *dyncon, *dynconend;
@@ -2517,13 +2505,14 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
if (! elf_hash_table (info)->dynamic_sections_created)
return TRUE;
+ htab = elf_xtensa_hash_table (info);
dynobj = elf_hash_table (info)->dynobj;
sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
BFD_ASSERT (sdyn != NULL);
/* Set the first entry in the global offset table to the address of
the dynamic section. */
- sgot = bfd_get_section_by_name (dynobj, ".got");
+ sgot = htab->sgot;
if (sgot)
{
BFD_ASSERT (sgot->size == 4);
@@ -2535,7 +2524,7 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
sgot->contents);
}
- srelplt = bfd_get_section_by_name (dynobj, ".rela.plt");
+ srelplt = htab->srelplt;
if (srelplt && srelplt->size != 0)
{
asection *sgotplt, *srelgot, *spltlittbl;
@@ -2544,11 +2533,9 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
bfd_byte *loc;
unsigned rtld_reloc;
- srelgot = bfd_get_section_by_name (dynobj, ".rela.got");;
- BFD_ASSERT (srelgot != NULL);
-
- spltlittbl = bfd_get_section_by_name (dynobj, ".xt.lit.plt");
- BFD_ASSERT (spltlittbl != NULL);
+ srelgot = htab->srelgot;
+ spltlittbl = htab->spltlittbl;
+ BFD_ASSERT (srelgot != NULL && spltlittbl != NULL);
/* Find the first XTENSA_RTLD relocation. Presumably the rest
of them follow immediately after.... */
@@ -2569,7 +2556,7 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
{
int chunk_entries = 0;
- sgotplt = elf_xtensa_get_gotplt_section (dynobj, chunk);
+ sgotplt = elf_xtensa_get_gotplt_section (info, chunk);
BFD_ASSERT (sgotplt != NULL);
/* Emit special RTLD relocations for the first two entries in
@@ -2637,7 +2624,7 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
/* Combine adjacent literal table entries. */
BFD_ASSERT (! info->relocatable);
sxtlit = bfd_get_section_by_name (output_bfd, ".xt.lit");
- sgotloc = bfd_get_section_by_name (dynobj, ".got.loc");
+ sgotloc = htab->sgotloc;
BFD_ASSERT (sxtlit && sgotloc);
num_xtlit_entries =
elf_xtensa_combine_prop_entries (output_bfd, sxtlit, sgotloc);
@@ -2649,8 +2636,6 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
for (; dyncon < dynconend; dyncon++)
{
Elf_Internal_Dyn dyn;
- const char *name;
- asection *s;
bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
@@ -2664,23 +2649,19 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
break;
case DT_XTENSA_GOT_LOC_OFF:
- name = ".got.loc";
- goto get_vma;
+ dyn.d_un.d_ptr = htab->sgotloc->vma;
+ break;
+
case DT_PLTGOT:
- name = ".got";
- goto get_vma;
+ dyn.d_un.d_ptr = htab->sgot->vma;
+ break;
+
case DT_JMPREL:
- name = ".rela.plt";
- get_vma:
- s = bfd_get_section_by_name (output_bfd, name);
- BFD_ASSERT (s);
- dyn.d_un.d_ptr = s->vma;
+ dyn.d_un.d_ptr = htab->srelplt->vma;
break;
case DT_PLTRELSZ:
- s = bfd_get_section_by_name (output_bfd, ".rela.plt");
- BFD_ASSERT (s);
- dyn.d_un.d_val = s->size;
+ dyn.d_un.d_val = htab->srelplt->size;
break;
case DT_RELASZ:
@@ -2690,9 +2671,8 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
seems to be unresolved. Since the linker script arranges
for .rela.plt to follow all other relocation sections, we
don't have to worry about changing the DT_RELA entry. */
- s = bfd_get_section_by_name (output_bfd, ".rela.plt");
- if (s)
- dyn.d_un.d_val -= s->size;
+ if (htab->srelplt)
+ dyn.d_un.d_val -= htab->srelplt->size;
break;
}
@@ -2866,16 +2846,22 @@ elf_xtensa_discard_info_for_section (bfd *abfd,
bfd_byte *contents;
bfd_vma section_size;
bfd_vma offset, actual_offset;
- size_t removed_bytes = 0;
-
- section_size = sec->size;
- if (section_size == 0 || section_size % 8 != 0)
- return FALSE;
+ bfd_size_type removed_bytes = 0;
+ bfd_size_type entry_size;
if (sec->output_section
&& bfd_is_abs_section (sec->output_section))
return FALSE;
+ if (xtensa_is_proptable_section (sec))
+ entry_size = 12;
+ else
+ entry_size = 8;
+
+ section_size = sec->size;
+ if (section_size == 0 || section_size % entry_size != 0)
+ return FALSE;
+
contents = retrieve_contents (abfd, sec, info->keep_memory);
if (!contents)
return FALSE;
@@ -2887,10 +2873,15 @@ elf_xtensa_discard_info_for_section (bfd *abfd,
return FALSE;
}
+ /* Sort the relocations. They should already be in order when
+ relaxation is enabled, but it might not be. */
+ qsort (cookie->rels, sec->reloc_count, sizeof (Elf_Internal_Rela),
+ internal_reloc_compare);
+
cookie->rel = cookie->rels;
cookie->relend = cookie->rels + sec->reloc_count;
- for (offset = 0; offset < section_size; offset += 8)
+ for (offset = 0; offset < section_size; offset += entry_size)
{
actual_offset = offset - removed_bytes;
@@ -2914,11 +2905,11 @@ elf_xtensa_discard_info_for_section (bfd *abfd,
if (ELF32_R_TYPE (cookie->rel->r_info) != R_XTENSA_NONE)
{
/* Shift the contents up. */
- if (offset + 8 < section_size)
+ if (offset + entry_size < section_size)
memmove (&contents[actual_offset],
- &contents[actual_offset+8],
- section_size - offset - 8);
- removed_bytes += 8;
+ &contents[actual_offset + entry_size],
+ section_size - offset - entry_size);
+ removed_bytes += entry_size;
}
/* Remove this relocation. */
@@ -2961,14 +2952,9 @@ elf_xtensa_discard_info_for_section (bfd *abfd,
if (xtensa_is_littable_section (sec))
{
- bfd *dynobj = elf_hash_table (info)->dynobj;
- if (dynobj)
- {
- asection *sgotloc =
- bfd_get_section_by_name (dynobj, ".got.loc");
- if (sgotloc)
- sgotloc->size -= removed_bytes;
- }
+ asection *sgotloc = elf_xtensa_hash_table (info)->sgotloc;
+ if (sgotloc)
+ sgotloc->size -= removed_bytes;
}
}
else
@@ -3008,6 +2994,19 @@ elf_xtensa_ignore_discarded_relocs (asection *sec)
return xtensa_is_property_section (sec);
}
+
+static unsigned int
+elf_xtensa_action_discarded (asection *sec)
+{
+ if (strcmp (".xt_except_table", sec->name) == 0)
+ return 0;
+
+ if (strcmp (".xt_except_desc", sec->name) == 0)
+ return 0;
+
+ return _bfd_elf_default_action_discarded (sec);
+}
+
/* Support for core dump NOTE sections. */
@@ -3433,24 +3432,23 @@ check_loop_aligned (bfd_byte *contents,
bfd_vma address)
{
bfd_size_type loop_len, insn_len;
- xtensa_opcode opcode =
- insn_decode_opcode (contents, content_length, offset, 0);
- BFD_ASSERT (opcode != XTENSA_UNDEFINED);
- if (opcode != XTENSA_UNDEFINED)
- return FALSE;
- BFD_ASSERT (xtensa_opcode_is_loop (xtensa_default_isa, opcode));
- if (!xtensa_opcode_is_loop (xtensa_default_isa, opcode))
- return FALSE;
+ xtensa_opcode opcode;
+ opcode = insn_decode_opcode (contents, content_length, offset, 0);
+ if (opcode == XTENSA_UNDEFINED
+ || xtensa_opcode_is_loop (xtensa_default_isa, opcode) != 1)
+ {
+ BFD_ASSERT (FALSE);
+ return FALSE;
+ }
+
loop_len = insn_decode_len (contents, content_length, offset);
- BFD_ASSERT (loop_len != 0);
- if (loop_len == 0)
- return FALSE;
-
insn_len = insn_decode_len (contents, content_length, offset + loop_len);
- BFD_ASSERT (insn_len != 0);
- if (insn_len == 0)
- return FALSE;
+ if (loop_len == 0 || insn_len == 0)
+ {
+ BFD_ASSERT (FALSE);
+ return FALSE;
+ }
return check_branch_target_aligned_address (address + loop_len, insn_len);
}
@@ -3562,60 +3560,31 @@ struct string_pair widenable[] =
};
-/* Attempt to narrow an instruction. Return true if the narrowing is
- valid. If the do_it parameter is non-zero, then perform the action
- in-place directly into the contents. Otherwise, do not modify the
- contents. The set of valid narrowing are specified by a string table
+/* Check if an instruction can be "narrowed", i.e., changed from a standard
+ 3-byte instruction to a 2-byte "density" instruction. If it is valid,
+ return the instruction buffer holding the narrow instruction. Otherwise,
+ return 0. The set of valid narrowing are specified by a string table
but require some special case operand checks in some cases. */
-static bfd_boolean
-narrow_instruction (bfd_byte *contents,
- bfd_size_type content_length,
- bfd_size_type offset,
- bfd_boolean do_it)
+static xtensa_insnbuf
+can_narrow_instruction (xtensa_insnbuf slotbuf,
+ xtensa_format fmt,
+ xtensa_opcode opcode)
{
- xtensa_opcode opcode;
- bfd_size_type insn_len, opi;
xtensa_isa isa = xtensa_default_isa;
- xtensa_format fmt, o_fmt;
+ xtensa_format o_fmt;
+ unsigned opi;
- static xtensa_insnbuf insnbuf = NULL;
- static xtensa_insnbuf slotbuf = NULL;
static xtensa_insnbuf o_insnbuf = NULL;
static xtensa_insnbuf o_slotbuf = NULL;
- if (insnbuf == NULL)
+ if (o_insnbuf == NULL)
{
- insnbuf = xtensa_insnbuf_alloc (isa);
- slotbuf = xtensa_insnbuf_alloc (isa);
o_insnbuf = xtensa_insnbuf_alloc (isa);
o_slotbuf = xtensa_insnbuf_alloc (isa);
}
- BFD_ASSERT (offset < content_length);
-
- if (content_length < 2)
- return FALSE;
-
- /* We will hand-code a few of these for a little while.
- These have all been specified in the assembler aleady. */
- xtensa_insnbuf_from_chars (isa, insnbuf, &contents[offset],
- content_length - offset);
- fmt = xtensa_format_decode (isa, insnbuf);
- if (xtensa_format_num_slots (isa, fmt) != 1)
- return FALSE;
-
- if (xtensa_format_get_slot (isa, fmt, 0, insnbuf, slotbuf) != 0)
- return FALSE;
-
- opcode = xtensa_opcode_decode (isa, fmt, 0, slotbuf);
- if (opcode == XTENSA_UNDEFINED)
- return FALSE;
- insn_len = xtensa_format_length (isa, fmt);
- if (insn_len > content_length)
- return FALSE;
-
- for (opi = 0; opi < (sizeof (narrowable)/sizeof (struct string_pair)); ++opi)
+ for (opi = 0; opi < (sizeof (narrowable)/sizeof (struct string_pair)); opi++)
{
bfd_boolean is_or = (strcmp ("or", narrowable[opi].wide) == 0);
@@ -3631,47 +3600,41 @@ narrow_instruction (bfd_byte *contents,
o_opcode = xtensa_opcode_lookup (isa, narrowable[opi].narrow);
if (o_opcode == XTENSA_UNDEFINED)
- return FALSE;
+ return 0;
o_fmt = get_single_format (o_opcode);
if (o_fmt == XTENSA_UNDEFINED)
- return FALSE;
+ return 0;
if (xtensa_format_length (isa, fmt) != 3
|| xtensa_format_length (isa, o_fmt) != 2)
- return FALSE;
+ return 0;
xtensa_format_encode (isa, o_fmt, o_insnbuf);
operand_count = xtensa_opcode_num_operands (isa, opcode);
o_operand_count = xtensa_opcode_num_operands (isa, o_opcode);
if (xtensa_opcode_encode (isa, o_fmt, 0, o_slotbuf, o_opcode) != 0)
- return FALSE;
+ return 0;
if (!is_or)
{
if (xtensa_opcode_num_operands (isa, o_opcode) != operand_count)
- return FALSE;
+ return 0;
}
else
{
uint32 rawval0, rawval1, rawval2;
- if (o_operand_count + 1 != operand_count)
- return FALSE;
- if (xtensa_operand_get_field (isa, opcode, 0,
- fmt, 0, slotbuf, &rawval0) != 0)
- return FALSE;
- if (xtensa_operand_get_field (isa, opcode, 1,
- fmt, 0, slotbuf, &rawval1) != 0)
- return FALSE;
- if (xtensa_operand_get_field (isa, opcode, 2,
- fmt, 0, slotbuf, &rawval2) != 0)
- return FALSE;
-
- if (rawval1 != rawval2)
- return FALSE;
- if (rawval0 == rawval1) /* it is a nop */
- return FALSE;
+ if (o_operand_count + 1 != operand_count
+ || xtensa_operand_get_field (isa, opcode, 0,
+ fmt, 0, slotbuf, &rawval0) != 0
+ || xtensa_operand_get_field (isa, opcode, 1,
+ fmt, 0, slotbuf, &rawval1) != 0
+ || xtensa_operand_get_field (isa, opcode, 2,
+ fmt, 0, slotbuf, &rawval2) != 0
+ || rawval1 != rawval2
+ || rawval0 == rawval1 /* it is a nop */)
+ return 0;
}
for (i = 0; i < o_operand_count; ++i)
@@ -3679,7 +3642,7 @@ narrow_instruction (bfd_byte *contents,
if (xtensa_operand_get_field (isa, opcode, i, fmt, 0,
slotbuf, &value)
|| xtensa_operand_decode (isa, opcode, i, &value))
- return FALSE;
+ return 0;
/* PC-relative branches need adjustment, but
the PC-rel operand will always have a relocation. */
@@ -3689,52 +3652,41 @@ narrow_instruction (bfd_byte *contents,
|| xtensa_operand_encode (isa, o_opcode, i, &newval)
|| xtensa_operand_set_field (isa, o_opcode, i, o_fmt, 0,
o_slotbuf, newval))
- return FALSE;
+ return 0;
}
- if (xtensa_format_set_slot (isa, o_fmt, 0,
- o_insnbuf, o_slotbuf) != 0)
- return FALSE;
+ if (xtensa_format_set_slot (isa, o_fmt, 0, o_insnbuf, o_slotbuf))
+ return 0;
- if (do_it)
- xtensa_insnbuf_to_chars (isa, o_insnbuf, contents + offset,
- content_length - offset);
- return TRUE;
+ return o_insnbuf;
}
}
- return FALSE;
+ return 0;
}
-/* Attempt to widen an instruction. Return true if the widening is
- valid. If the do_it parameter is non-zero, then the action should
- be performed inplace into the contents. Otherwise, do not modify
- the contents. The set of valid widenings are specified by a string
- table but require some special case operand checks in some
- cases. */
+/* Attempt to narrow an instruction. If the narrowing is valid, perform
+ the action in-place directly into the contents and return TRUE. Otherwise,
+ the return value is FALSE and the contents are not modified. */
static bfd_boolean
-widen_instruction (bfd_byte *contents,
- bfd_size_type content_length,
- bfd_size_type offset,
- bfd_boolean do_it)
+narrow_instruction (bfd_byte *contents,
+ bfd_size_type content_length,
+ bfd_size_type offset)
{
xtensa_opcode opcode;
- bfd_size_type insn_len, opi;
+ bfd_size_type insn_len;
xtensa_isa isa = xtensa_default_isa;
- xtensa_format fmt, o_fmt;
+ xtensa_format fmt;
+ xtensa_insnbuf o_insnbuf;
static xtensa_insnbuf insnbuf = NULL;
static xtensa_insnbuf slotbuf = NULL;
- static xtensa_insnbuf o_insnbuf = NULL;
- static xtensa_insnbuf o_slotbuf = NULL;
if (insnbuf == NULL)
{
insnbuf = xtensa_insnbuf_alloc (isa);
slotbuf = xtensa_insnbuf_alloc (isa);
- o_insnbuf = xtensa_insnbuf_alloc (isa);
- o_slotbuf = xtensa_insnbuf_alloc (isa);
}
BFD_ASSERT (offset < content_length);
@@ -3742,7 +3694,7 @@ widen_instruction (bfd_byte *contents,
if (content_length < 2)
return FALSE;
- /* We will hand code a few of these for a little while.
+ /* We will hand-code a few of these for a little while.
These have all been specified in the assembler aleady. */
xtensa_insnbuf_from_chars (isa, insnbuf, &contents[offset],
content_length - offset);
@@ -3760,7 +3712,43 @@ widen_instruction (bfd_byte *contents,
if (insn_len > content_length)
return FALSE;
- for (opi = 0; opi < (sizeof (widenable)/sizeof (struct string_pair)); ++opi)
+ o_insnbuf = can_narrow_instruction (slotbuf, fmt, opcode);
+ if (o_insnbuf)
+ {
+ xtensa_insnbuf_to_chars (isa, o_insnbuf, contents + offset,
+ content_length - offset);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+/* Check if an instruction can be "widened", i.e., changed from a 2-byte
+ "density" instruction to a standard 3-byte instruction. If it is valid,
+ return the instruction buffer holding the wide instruction. Otherwise,
+ return 0. The set of valid widenings are specified by a string table
+ but require some special case operand checks in some cases. */
+
+static xtensa_insnbuf
+can_widen_instruction (xtensa_insnbuf slotbuf,
+ xtensa_format fmt,
+ xtensa_opcode opcode)
+{
+ xtensa_isa isa = xtensa_default_isa;
+ xtensa_format o_fmt;
+ unsigned opi;
+
+ static xtensa_insnbuf o_insnbuf = NULL;
+ static xtensa_insnbuf o_slotbuf = NULL;
+
+ if (o_insnbuf == NULL)
+ {
+ o_insnbuf = xtensa_insnbuf_alloc (isa);
+ o_slotbuf = xtensa_insnbuf_alloc (isa);
+ }
+
+ for (opi = 0; opi < (sizeof (widenable)/sizeof (struct string_pair)); opi++)
{
bfd_boolean is_or = (strcmp ("or", widenable[opi].wide) == 0);
bfd_boolean is_branch = (strcmp ("beqz", widenable[opi].wide) == 0
@@ -3778,14 +3766,14 @@ widen_instruction (bfd_byte *contents,
o_opcode = xtensa_opcode_lookup (isa, widenable[opi].wide);
if (o_opcode == XTENSA_UNDEFINED)
- return FALSE;
+ return 0;
o_fmt = get_single_format (o_opcode);
if (o_fmt == XTENSA_UNDEFINED)
- return FALSE;
+ return 0;
if (xtensa_format_length (isa, fmt) != 2
|| xtensa_format_length (isa, o_fmt) != 3)
- return FALSE;
+ return 0;
xtensa_format_encode (isa, o_fmt, o_insnbuf);
operand_count = xtensa_opcode_num_operands (isa, opcode);
@@ -3793,32 +3781,29 @@ widen_instruction (bfd_byte *contents,
check_operand_count = o_operand_count;
if (xtensa_opcode_encode (isa, o_fmt, 0, o_slotbuf, o_opcode) != 0)
- return FALSE;
+ return 0;
if (!is_or)
{
if (xtensa_opcode_num_operands (isa, o_opcode) != operand_count)
- return FALSE;
+ return 0;
}
else
{
uint32 rawval0, rawval1;
- if (o_operand_count != operand_count + 1)
- return FALSE;
- if (xtensa_operand_get_field (isa, opcode, 0,
- fmt, 0, slotbuf, &rawval0) != 0)
- return FALSE;
- if (xtensa_operand_get_field (isa, opcode, 1,
- fmt, 0, slotbuf, &rawval1) != 0)
- return FALSE;
- if (rawval0 == rawval1) /* it is a nop */
- return FALSE;
+ if (o_operand_count != operand_count + 1
+ || xtensa_operand_get_field (isa, opcode, 0,
+ fmt, 0, slotbuf, &rawval0) != 0
+ || xtensa_operand_get_field (isa, opcode, 1,
+ fmt, 0, slotbuf, &rawval1) != 0
+ || rawval0 == rawval1 /* it is a nop */)
+ return 0;
}
if (is_branch)
check_operand_count--;
- for (i = 0; i < check_operand_count; ++i)
+ for (i = 0; i < check_operand_count; i++)
{
int new_i = i;
if (is_or && i == o_operand_count - 1)
@@ -3826,7 +3811,7 @@ widen_instruction (bfd_byte *contents,
if (xtensa_operand_get_field (isa, opcode, new_i, fmt, 0,
slotbuf, &value)
|| xtensa_operand_decode (isa, opcode, new_i, &value))
- return FALSE;
+ return 0;
/* PC-relative branches need adjustment, but
the PC-rel operand will always have a relocation. */
@@ -3836,18 +3821,73 @@ widen_instruction (bfd_byte *contents,
|| xtensa_operand_encode (isa, o_opcode, i, &newval)
|| xtensa_operand_set_field (isa, o_opcode, i, o_fmt, 0,
o_slotbuf, newval))
- return FALSE;
+ return 0;
}
if (xtensa_format_set_slot (isa, o_fmt, 0, o_insnbuf, o_slotbuf))
- return FALSE;
+ return 0;
- if (do_it)
- xtensa_insnbuf_to_chars (isa, o_insnbuf, contents + offset,
- content_length - offset);
- return TRUE;
+ return o_insnbuf;
}
}
+ return 0;
+}
+
+
+/* Attempt to widen an instruction. If the widening is valid, perform
+ the action in-place directly into the contents and return TRUE. Otherwise,
+ the return value is FALSE and the contents are not modified. */
+
+static bfd_boolean
+widen_instruction (bfd_byte *contents,
+ bfd_size_type content_length,
+ bfd_size_type offset)
+{
+ xtensa_opcode opcode;
+ bfd_size_type insn_len;
+ xtensa_isa isa = xtensa_default_isa;
+ xtensa_format fmt;
+ xtensa_insnbuf o_insnbuf;
+
+ static xtensa_insnbuf insnbuf = NULL;
+ static xtensa_insnbuf slotbuf = NULL;
+
+ if (insnbuf == NULL)
+ {
+ insnbuf = xtensa_insnbuf_alloc (isa);
+ slotbuf = xtensa_insnbuf_alloc (isa);
+ }
+
+ BFD_ASSERT (offset < content_length);
+
+ if (content_length < 2)
+ return FALSE;
+
+ /* We will hand-code a few of these for a little while.
+ These have all been specified in the assembler aleady. */
+ xtensa_insnbuf_from_chars (isa, insnbuf, &contents[offset],
+ content_length - offset);
+ fmt = xtensa_format_decode (isa, insnbuf);
+ if (xtensa_format_num_slots (isa, fmt) != 1)
+ return FALSE;
+
+ if (xtensa_format_get_slot (isa, fmt, 0, insnbuf, slotbuf) != 0)
+ return FALSE;
+
+ opcode = xtensa_opcode_decode (isa, fmt, 0, slotbuf);
+ if (opcode == XTENSA_UNDEFINED)
+ return FALSE;
+ insn_len = xtensa_format_length (isa, fmt);
+ if (insn_len > content_length)
+ return FALSE;
+
+ o_insnbuf = can_widen_instruction (slotbuf, fmt, opcode);
+ if (o_insnbuf)
+ {
+ xtensa_insnbuf_to_chars (isa, o_insnbuf, contents + offset,
+ content_length - offset);
+ return TRUE;
+ }
return FALSE;
}
@@ -5007,13 +5047,16 @@ struct elf_xtensa_section_data
static bfd_boolean
elf_xtensa_new_section_hook (bfd *abfd, asection *sec)
{
- struct elf_xtensa_section_data *sdata;
- bfd_size_type amt = sizeof (*sdata);
+ if (!sec->used_by_bfd)
+ {
+ struct elf_xtensa_section_data *sdata;
+ bfd_size_type amt = sizeof (*sdata);
- sdata = (struct elf_xtensa_section_data *) bfd_zalloc (abfd, amt);
- if (sdata == NULL)
- return FALSE;
- sec->used_by_bfd = (void *) sdata;
+ sdata = bfd_zalloc (abfd, amt);
+ if (sdata == NULL)
+ return FALSE;
+ sec->used_by_bfd = sdata;
+ }
return _bfd_elf_new_section_hook (abfd, sec);
}
@@ -5498,7 +5541,7 @@ extend_ebb_bounds_forward (ebb_t *ebb)
new_entry = &ebb->ptbl[ebb->end_ptbl_idx + 1];
if (((new_entry->flags & XTENSA_PROP_INSN) == 0)
- || ((new_entry->flags & XTENSA_PROP_INSN_NO_TRANSFORM) != 0)
+ || ((new_entry->flags & XTENSA_PROP_NO_TRANSFORM) != 0)
|| ((the_entry->flags & XTENSA_PROP_ALIGN) != 0))
break;
@@ -5571,7 +5614,7 @@ extend_ebb_bounds_backward (ebb_t *ebb)
new_entry = &ebb->ptbl[ebb->start_ptbl_idx - 1];
if ((new_entry->flags & XTENSA_PROP_INSN) == 0
- || ((new_entry->flags & XTENSA_PROP_INSN_NO_TRANSFORM) != 0)
+ || ((new_entry->flags & XTENSA_PROP_NO_TRANSFORM) != 0)
|| ((new_entry->flags & XTENSA_PROP_ALIGN) != 0))
return TRUE;
if (new_entry->address + new_entry->size != the_entry->address)
@@ -5779,7 +5822,8 @@ static bfd_boolean compute_removed_literals
static Elf_Internal_Rela *get_irel_at_offset
(asection *, Elf_Internal_Rela *, bfd_vma);
static bfd_boolean is_removable_literal
- (const source_reloc *, int, const source_reloc *, int);
+ (const source_reloc *, int, const source_reloc *, int, asection *,
+ property_table_entry *, int);
static bfd_boolean remove_dead_literal
(bfd *, asection *, struct bfd_link_info *, Elf_Internal_Rela *,
Elf_Internal_Rela *, source_reloc *, property_table_entry *, int);
@@ -5926,6 +5970,8 @@ analyze_relocations (struct bfd_link_info *link_info)
relax_info->src_relocs = (source_reloc *)
bfd_malloc (relax_info->src_count * sizeof (source_reloc));
}
+ else
+ relax_info->src_count = 0;
}
/* Collect info on relocations against each relaxable section. */
@@ -5969,6 +6015,7 @@ find_relaxable_sections (bfd *abfd,
bfd_boolean ok = TRUE;
unsigned i;
xtensa_relax_info *source_relax_info;
+ bfd_boolean is_l32r_reloc;
internal_relocs = retrieve_internal_relocs (abfd, sec,
link_info->keep_memory);
@@ -6019,13 +6066,21 @@ find_relaxable_sections (bfd *abfd,
/* Count PC-relative operand relocations against the target section.
Note: The conditions tested here must match the conditions under
which init_source_reloc is called in collect_source_relocs(). */
- if (is_operand_relocation (ELF32_R_TYPE (irel->r_info))
- && (!is_alt_relocation (ELF32_R_TYPE (irel->r_info))
- || is_l32r_relocation (abfd, sec, contents, irel)))
- target_relax_info->src_count++;
+ is_l32r_reloc = FALSE;
+ if (is_operand_relocation (ELF32_R_TYPE (irel->r_info)))
+ {
+ xtensa_opcode opcode =
+ get_relocation_opcode (abfd, sec, contents, irel);
+ if (opcode != XTENSA_UNDEFINED)
+ {
+ is_l32r_reloc = (opcode == get_l32r_opcode ());
+ if (!is_alt_relocation (ELF32_R_TYPE (irel->r_info))
+ || is_l32r_reloc)
+ target_relax_info->src_count++;
+ }
+ }
- if (is_l32r_relocation (abfd, sec, contents, irel)
- && r_reloc_is_defined (&r_rel))
+ if (is_l32r_reloc && r_reloc_is_defined (&r_rel))
{
/* Mark the target section as relaxable. */
target_relax_info->is_relaxable_literal_section = TRUE;
@@ -6346,14 +6401,12 @@ compute_text_actions (bfd *abfd,
property_table_entry *prop_table = 0;
int ptblsize = 0;
bfd_size_type sec_size;
- static bfd_boolean no_insn_move = FALSE;
-
- if (no_insn_move)
- return ok;
- /* Do nothing if the section contains no optimized longcalls. */
relax_info = get_xtensa_relax_info (sec);
BFD_ASSERT (relax_info);
+ BFD_ASSERT (relax_info->src_next == relax_info->src_count);
+
+ /* Do nothing if the section contains no optimized longcalls. */
if (!relax_info->is_relaxable_asm_section)
return ok;
@@ -6428,7 +6481,7 @@ compute_text_actions (bfd *abfd,
the_entry++;
}
- if (the_entry->flags & XTENSA_PROP_INSN_NO_TRANSFORM)
+ if (the_entry->flags & XTENSA_PROP_NO_TRANSFORM)
/* NO_REORDER is OK */
continue;
@@ -6492,6 +6545,23 @@ error_return:
}
+/* Do not widen an instruction if it is preceeded by a
+ loop opcode. It might cause misalignment. */
+
+static bfd_boolean
+prev_instr_is_a_loop (bfd_byte *contents,
+ bfd_size_type content_length,
+ bfd_size_type offset)
+{
+ xtensa_opcode prev_opcode;
+
+ if (offset < 3)
+ return FALSE;
+ prev_opcode = insn_decode_opcode (contents, content_length, offset-3, 0);
+ return (xtensa_opcode_is_loop (xtensa_default_isa, prev_opcode) == 1);
+}
+
+
/* Find all of the possible actions for an extended basic block. */
bfd_boolean
@@ -6500,13 +6570,24 @@ compute_ebb_proposed_actions (ebb_constraint *ebb_table)
const ebb_t *ebb = &ebb_table->ebb;
unsigned rel_idx = ebb->start_reloc_idx;
property_table_entry *entry, *start_entry, *end_entry;
+ bfd_vma offset = 0;
+ xtensa_isa isa = xtensa_default_isa;
+ xtensa_format fmt;
+ static xtensa_insnbuf insnbuf = NULL;
+ static xtensa_insnbuf slotbuf = NULL;
+
+ if (insnbuf == NULL)
+ {
+ insnbuf = xtensa_insnbuf_alloc (isa);
+ slotbuf = xtensa_insnbuf_alloc (isa);
+ }
start_entry = &ebb->ptbl[ebb->start_ptbl_idx];
end_entry = &ebb->ptbl[ebb->end_ptbl_idx];
for (entry = start_entry; entry <= end_entry; entry++)
{
- bfd_vma offset, start_offset, end_offset;
+ bfd_vma start_offset, end_offset;
bfd_size_type insn_len;
start_offset = entry->address - ebb->sec->vma;
@@ -6528,15 +6609,9 @@ compute_ebb_proposed_actions (ebb_constraint *ebb_table)
insn_len = insn_decode_len (ebb->contents, ebb->content_length,
offset);
-
- /* Propose no actions for a section with an undecodable offset. */
if (insn_len == 0)
- {
- (*_bfd_error_handler)
- (_("%B(%A+0x%lx): could not decode instruction; possible configuration mismatch"),
- ebb->sec->owner, ebb->sec, offset);
- return FALSE;
- }
+ goto decode_error;
+
if (check_branch_target_aligned_address (offset, insn_len))
align_type = EBB_REQUIRE_TGT_ALIGN;
@@ -6567,12 +6642,7 @@ compute_ebb_proposed_actions (ebb_constraint *ebb_table)
ebb->content_length,
irel->r_offset);
if (simplify_size == 0)
- {
- (*_bfd_error_handler)
- (_("%B(%A+0x%lx): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"),
- ebb->sec->owner, ebb->sec, offset);
- return FALSE;
- }
+ goto decode_error;
ebb_propose_action (ebb_table, EBB_NO_ALIGN, 0,
ta_convert_longcall, offset, 0, TRUE);
@@ -6581,47 +6651,50 @@ compute_ebb_proposed_actions (ebb_constraint *ebb_table)
continue;
}
- insn_len = insn_decode_len (ebb->contents, ebb->content_length,
- offset);
- /* If the instruction is undecodable, then report an error. */
- if (insn_len == 0)
+ if (offset + MIN_INSN_LENGTH > ebb->content_length)
+ goto decode_error;
+ xtensa_insnbuf_from_chars (isa, insnbuf, &ebb->contents[offset],
+ ebb->content_length - offset);
+ fmt = xtensa_format_decode (isa, insnbuf);
+ if (fmt == XTENSA_UNDEFINED)
+ goto decode_error;
+ insn_len = xtensa_format_length (isa, fmt);
+ if (insn_len == (bfd_size_type) XTENSA_UNDEFINED)
+ goto decode_error;
+
+ if (xtensa_format_num_slots (isa, fmt) != 1)
{
- (*_bfd_error_handler)
- (_("%B(%A+0x%lx): could not decode instruction; possible configuration mismatch"),
- ebb->sec->owner, ebb->sec, offset);
- return FALSE;
+ offset += insn_len;
+ continue;
}
-
+
+ xtensa_format_get_slot (isa, fmt, 0, insnbuf, slotbuf);
+ opcode = xtensa_opcode_decode (isa, fmt, 0, slotbuf);
+ if (opcode == XTENSA_UNDEFINED)
+ goto decode_error;
+
if ((entry->flags & XTENSA_PROP_INSN_NO_DENSITY) == 0
- && (entry->flags & XTENSA_PROP_INSN_NO_TRANSFORM) == 0
- && narrow_instruction (ebb->contents, ebb->content_length,
- offset, FALSE))
+ && (entry->flags & XTENSA_PROP_NO_TRANSFORM) == 0
+ && can_narrow_instruction (slotbuf, fmt, opcode) != 0)
{
/* Add an instruction narrow action. */
ebb_propose_action (ebb_table, EBB_NO_ALIGN, 0,
ta_narrow_insn, offset, 0, FALSE);
- offset += insn_len;
- continue;
}
- if ((entry->flags & XTENSA_PROP_INSN_NO_TRANSFORM) == 0
- && widen_instruction (ebb->contents, ebb->content_length,
- offset, FALSE))
+ else if ((entry->flags & XTENSA_PROP_NO_TRANSFORM) == 0
+ && can_widen_instruction (slotbuf, fmt, opcode) != 0
+ && ! prev_instr_is_a_loop (ebb->contents,
+ ebb->content_length, offset))
{
/* Add an instruction widen action. */
ebb_propose_action (ebb_table, EBB_NO_ALIGN, 0,
ta_widen_insn, offset, 0, FALSE);
- offset += insn_len;
- continue;
}
- opcode = insn_decode_opcode (ebb->contents, ebb->content_length,
- offset, 0);
- if (xtensa_opcode_is_loop (xtensa_default_isa, opcode))
+ else if (xtensa_opcode_is_loop (xtensa_default_isa, opcode) == 1)
{
/* Check for branch targets. */
ebb_propose_action (ebb_table, EBB_REQUIRE_LOOP_ALIGN, 0,
ta_none, offset, 0, TRUE);
- offset += insn_len;
- continue;
}
offset += insn_len;
@@ -6635,6 +6708,12 @@ compute_ebb_proposed_actions (ebb_constraint *ebb_table)
}
return TRUE;
+
+ decode_error:
+ (*_bfd_error_handler)
+ (_("%B(%A+0x%lx): could not decode instruction; possible configuration mismatch"),
+ ebb->sec->owner, ebb->sec, offset);
+ return FALSE;
}
@@ -7352,7 +7431,8 @@ compute_removed_literals (bfd *abfd,
/* Check if the relocation was from an L32R that is being removed
because a CALLX was converted to a direct CALL, and check if
there are no other relocations to the literal. */
- if (is_removable_literal (rel, i, src_relocs, relax_info->src_count))
+ if (is_removable_literal (rel, i, src_relocs, relax_info->src_count,
+ sec, prop_table, ptblsize))
{
if (!remove_dead_literal (abfd, sec, link_info, internal_relocs,
irel, rel, prop_table, ptblsize))
@@ -7436,12 +7516,22 @@ bfd_boolean
is_removable_literal (const source_reloc *rel,
int i,
const source_reloc *src_relocs,
- int src_count)
+ int src_count,
+ asection *sec,
+ property_table_entry *prop_table,
+ int ptblsize)
{
const source_reloc *curr_rel;
+ property_table_entry *entry;
+
if (!rel->is_null)
return FALSE;
+ entry = elf_xtensa_find_property_entry (prop_table, ptblsize,
+ sec->vma + rel->r_rel.target_offset);
+ if (entry && (entry->flags & XTENSA_PROP_NO_TRANSFORM))
+ return FALSE;
+
for (++i; i < src_count; ++i)
{
curr_rel = &src_relocs[i];
@@ -7731,7 +7821,7 @@ coalesce_shared_literal (asection *sec,
entry = elf_xtensa_find_property_entry
(prop_table, ptblsize, sec->vma + rel->r_rel.target_offset);
- if (entry && (entry->flags & XTENSA_PROP_INSN_NO_TRANSFORM))
+ if (entry && (entry->flags & XTENSA_PROP_NO_TRANSFORM))
return TRUE;
/* Mark that the literal will be coalesced. */
@@ -8247,7 +8337,7 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info)
copy_size = 2;
memmove (scratch, &contents[orig_dot], orig_insn_size);
BFD_ASSERT (action->removed_bytes == 1);
- rv = narrow_instruction (scratch, final_size, 0, TRUE);
+ rv = narrow_instruction (scratch, final_size, 0);
BFD_ASSERT (rv);
memmove (&dup_contents[dup_dot], scratch, copy_size);
orig_dot += orig_insn_size;
@@ -8280,7 +8370,7 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info)
copy_size = 3;
memmove (scratch, &contents[orig_dot], orig_insn_size);
BFD_ASSERT (action->removed_bytes == -1);
- rv = widen_instruction (scratch, final_size, 0, TRUE);
+ rv = widen_instruction (scratch, final_size, 0);
BFD_ASSERT (rv);
memmove (&dup_contents[dup_dot], scratch, copy_size);
orig_dot += orig_insn_size;
@@ -8557,6 +8647,7 @@ shrink_dynamic_reloc_sections (struct bfd_link_info *info,
asection *input_section,
Elf_Internal_Rela *rel)
{
+ struct elf_xtensa_link_hash_table *htab;
Elf_Internal_Shdr *symtab_hdr;
struct elf_link_hash_entry **sym_hashes;
unsigned long r_symndx;
@@ -8564,6 +8655,7 @@ shrink_dynamic_reloc_sections (struct bfd_link_info *info,
struct elf_link_hash_entry *h;
bfd_boolean dynamic_symbol;
+ htab = elf_xtensa_hash_table (info);
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (abfd);
@@ -8575,30 +8667,24 @@ shrink_dynamic_reloc_sections (struct bfd_link_info *info,
else
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
- dynamic_symbol = xtensa_elf_dynamic_symbol_p (h, info);
+ dynamic_symbol = elf_xtensa_dynamic_symbol_p (h, info);
if ((r_type == R_XTENSA_32 || r_type == R_XTENSA_PLT)
&& (input_section->flags & SEC_ALLOC) != 0
&& (dynamic_symbol || info->shared))
{
- bfd *dynobj;
- const char *srel_name;
asection *srel;
bfd_boolean is_plt = FALSE;
- dynobj = elf_hash_table (info)->dynobj;
- BFD_ASSERT (dynobj != NULL);
-
if (dynamic_symbol && r_type == R_XTENSA_PLT)
{
- srel_name = ".rela.plt";
+ srel = htab->srelplt;
is_plt = TRUE;
}
else
- srel_name = ".rela.got";
+ srel = htab->srelgot;
/* Reduce size of the .rela.* section by one reloc. */
- srel = bfd_get_section_by_name (dynobj, srel_name);
BFD_ASSERT (srel != NULL);
BFD_ASSERT (srel->size >= sizeof (Elf32_External_Rela));
srel->size -= sizeof (Elf32_External_Rela);
@@ -8617,15 +8703,15 @@ shrink_dynamic_reloc_sections (struct bfd_link_info *info,
reloc_index = srel->size / sizeof (Elf32_External_Rela);
chunk = reloc_index / PLT_ENTRIES_PER_CHUNK;
- splt = elf_xtensa_get_plt_section (dynobj, chunk);
- sgotplt = elf_xtensa_get_gotplt_section (dynobj, chunk);
+ splt = elf_xtensa_get_plt_section (info, chunk);
+ sgotplt = elf_xtensa_get_gotplt_section (info, chunk);
BFD_ASSERT (splt != NULL && sgotplt != NULL);
/* Check if an entire PLT chunk has just been eliminated. */
if (reloc_index % PLT_ENTRIES_PER_CHUNK == 0)
{
/* The two magic GOT entries for that chunk can go away. */
- srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+ srelgot = htab->srelgot;
BFD_ASSERT (srelgot != NULL);
srelgot->reloc_count -= 2;
srelgot->size -= 2 * sizeof (Elf32_External_Rela);
@@ -8794,12 +8880,13 @@ relax_property_section (bfd *abfd,
{
Elf_Internal_Rela *internal_relocs;
bfd_byte *contents;
- unsigned i, nexti;
+ unsigned i;
bfd_boolean ok = TRUE;
bfd_boolean is_full_prop_section;
size_t last_zfill_target_offset = 0;
asection *last_zfill_target_sec = NULL;
bfd_size_type sec_size;
+ bfd_size_type entry_size;
sec_size = bfd_get_section_limit (abfd, sec);
internal_relocs = retrieve_internal_relocs (abfd, sec,
@@ -8811,10 +8898,11 @@ relax_property_section (bfd *abfd,
goto error_return;
}
- is_full_prop_section =
- ((strcmp (sec->name, XTENSA_PROP_SEC_NAME) == 0)
- || (strncmp (sec->name, ".gnu.linkonce.prop.",
- sizeof ".gnu.linkonce.prop." - 1) == 0));
+ is_full_prop_section = xtensa_is_proptable_section (sec);
+ if (is_full_prop_section)
+ entry_size = 12;
+ else
+ entry_size = 8;
if (internal_relocs)
{
@@ -8843,12 +8931,8 @@ relax_property_section (bfd *abfd,
size_p = &contents[irel->r_offset + 4];
flags_p = NULL;
if (is_full_prop_section)
- {
- flags_p = &contents[irel->r_offset + 8];
- BFD_ASSERT (irel->r_offset + 12 <= sec_size);
- }
- else
- BFD_ASSERT (irel->r_offset + 8 <= sec_size);
+ flags_p = &contents[irel->r_offset + 8];
+ BFD_ASSERT (irel->r_offset + entry_size <= sec_size);
target_sec = r_reloc_get_section (&val.r_rel);
target_relax_info = get_xtensa_relax_info (target_sec);
@@ -8932,74 +9016,105 @@ relax_property_section (bfd *abfd,
reclaim the space in the output section, so we do this twice. */
if (internal_relocs && (!link_info->relocatable
- || strcmp (sec->name, XTENSA_LIT_SEC_NAME) == 0))
+ || xtensa_is_littable_section (sec)))
{
Elf_Internal_Rela *last_irel = NULL;
+ Elf_Internal_Rela *irel, *next_rel, *rel_end;
int removed_bytes = 0;
- bfd_vma offset, last_irel_offset;
+ bfd_vma offset;
bfd_vma section_size;
- bfd_size_type entry_size;
flagword predef_flags;
- if (is_full_prop_section)
- entry_size = 12;
- else
- entry_size = 8;
-
predef_flags = xtensa_get_property_predef_flags (sec);
- /* Walk over memory and irels at the same time.
+ /* Walk over memory and relocations at the same time.
This REQUIRES that the internal_relocs be sorted by offset. */
qsort (internal_relocs, sec->reloc_count, sizeof (Elf_Internal_Rela),
internal_reloc_compare);
- nexti = 0; /* Index into internal_relocs. */
pin_internal_relocs (sec, internal_relocs);
pin_contents (sec, contents);
- last_irel_offset = (bfd_vma) -1;
+ next_rel = internal_relocs;
+ rel_end = internal_relocs + sec->reloc_count;
+
section_size = sec->size;
BFD_ASSERT (section_size % entry_size == 0);
for (offset = 0; offset < section_size; offset += entry_size)
{
- Elf_Internal_Rela *irel, *next_irel;
+ Elf_Internal_Rela *offset_rel, *extra_rel;
bfd_vma bytes_to_remove, size, actual_offset;
- bfd_boolean remove_this_irel;
+ bfd_boolean remove_this_rel;
flagword flags;
- irel = NULL;
- next_irel = NULL;
-
- /* Find the next two relocations (if there are that many left),
- skipping over any R_XTENSA_NONE relocs. On entry, "nexti" is
- the starting reloc index. After these two loops, "i"
- is the index of the first non-NONE reloc past that starting
- index, and "nexti" is the index for the next non-NONE reloc
- after "i". */
+ /* Find the first relocation for the entry at the current offset.
+ Adjust the offsets of any extra relocations for the previous
+ entry. */
+ offset_rel = NULL;
+ if (next_rel)
+ {
+ for (irel = next_rel; irel < rel_end; irel++)
+ {
+ if ((irel->r_offset == offset
+ && ELF32_R_TYPE (irel->r_info) != R_XTENSA_NONE)
+ || irel->r_offset > offset)
+ {
+ offset_rel = irel;
+ break;
+ }
+ irel->r_offset -= removed_bytes;
+ }
+ }
- for (i = nexti; i < sec->reloc_count; i++)
+ /* Find the next relocation (if there are any left). */
+ extra_rel = NULL;
+ if (offset_rel)
{
- if (ELF32_R_TYPE (internal_relocs[i].r_info) != R_XTENSA_NONE)
+ for (irel = offset_rel + 1; irel < rel_end; irel++)
{
- irel = &internal_relocs[i];
- break;
+ if (ELF32_R_TYPE (irel->r_info) != R_XTENSA_NONE)
+ {
+ extra_rel = irel;
+ break;
+ }
}
- internal_relocs[i].r_offset -= removed_bytes;
}
- for (nexti = i + 1; nexti < sec->reloc_count; nexti++)
+ /* Check if there are relocations on the current entry. There
+ should usually be a relocation on the offset field. If there
+ are relocations on the size or flags, then we can't optimize
+ this entry. Also, find the next relocation to examine on the
+ next iteration. */
+ if (offset_rel)
{
- if (ELF32_R_TYPE (internal_relocs[nexti].r_info)
- != R_XTENSA_NONE)
+ if (offset_rel->r_offset >= offset + entry_size)
{
- next_irel = &internal_relocs[nexti];
- break;
+ next_rel = offset_rel;
+ /* There are no relocations on the current entry, but we
+ might still be able to remove it if the size is zero. */
+ offset_rel = NULL;
+ }
+ else if (offset_rel->r_offset > offset
+ || (extra_rel
+ && extra_rel->r_offset < offset + entry_size))
+ {
+ /* There is a relocation on the size or flags, so we can't
+ do anything with this entry. Continue with the next. */
+ next_rel = offset_rel;
+ continue;
+ }
+ else
+ {
+ BFD_ASSERT (offset_rel->r_offset == offset);
+ offset_rel->r_offset -= removed_bytes;
+ next_rel = offset_rel + 1;
}
- internal_relocs[nexti].r_offset -= removed_bytes;
}
+ else
+ next_rel = NULL;
- remove_this_irel = FALSE;
+ remove_this_rel = FALSE;
bytes_to_remove = 0;
actual_offset = offset - removed_bytes;
size = bfd_get_32 (abfd, &contents[actual_offset + 4]);
@@ -9009,90 +9124,64 @@ relax_property_section (bfd *abfd,
else
flags = predef_flags;
- /* Check that the irels are sorted by offset,
- with only one per address. */
- BFD_ASSERT (!irel || (int) irel->r_offset > (int) last_irel_offset);
- BFD_ASSERT (!next_irel || next_irel->r_offset > irel->r_offset);
-
- /* Make sure there aren't relocs on the size or flag fields. */
- if ((irel && irel->r_offset == offset + 4)
- || (is_full_prop_section
- && irel && irel->r_offset == offset + 8))
- {
- irel->r_offset -= removed_bytes;
- last_irel_offset = irel->r_offset;
- }
- else if (next_irel && (next_irel->r_offset == offset + 4
- || (is_full_prop_section
- && next_irel->r_offset == offset + 8)))
- {
- nexti += 1;
- irel->r_offset -= removed_bytes;
- next_irel->r_offset -= removed_bytes;
- last_irel_offset = next_irel->r_offset;
- }
- else if (size == 0 && (flags & XTENSA_PROP_ALIGN) == 0
- && (flags & XTENSA_PROP_UNREACHABLE) == 0)
+ if (size == 0
+ && (flags & XTENSA_PROP_ALIGN) == 0
+ && (flags & XTENSA_PROP_UNREACHABLE) == 0)
{
/* Always remove entries with zero size and no alignment. */
bytes_to_remove = entry_size;
- if (irel && irel->r_offset == offset)
- {
- remove_this_irel = TRUE;
-
- irel->r_offset -= removed_bytes;
- last_irel_offset = irel->r_offset;
- }
+ if (offset_rel)
+ remove_this_rel = TRUE;
}
- else if (irel && irel->r_offset == offset)
+ else if (offset_rel
+ && ELF32_R_TYPE (offset_rel->r_info) == R_XTENSA_32)
{
- if (ELF32_R_TYPE (irel->r_info) == R_XTENSA_32)
+ if (last_irel)
{
- if (last_irel)
+ flagword old_flags;
+ bfd_vma old_size =
+ bfd_get_32 (abfd, &contents[last_irel->r_offset + 4]);
+ bfd_vma old_address =
+ (last_irel->r_addend
+ + bfd_get_32 (abfd, &contents[last_irel->r_offset]));
+ bfd_vma new_address =
+ (offset_rel->r_addend
+ + bfd_get_32 (abfd, &contents[actual_offset]));
+ if (is_full_prop_section)
+ old_flags = bfd_get_32
+ (abfd, &contents[last_irel->r_offset + 8]);
+ else
+ old_flags = predef_flags;
+
+ if ((ELF32_R_SYM (offset_rel->r_info)
+ == ELF32_R_SYM (last_irel->r_info))
+ && old_address + old_size == new_address
+ && old_flags == flags
+ && (old_flags & XTENSA_PROP_INSN_BRANCH_TARGET) == 0
+ && (old_flags & XTENSA_PROP_INSN_LOOP_TARGET) == 0)
{
- flagword old_flags;
- bfd_vma old_size =
- bfd_get_32 (abfd, &contents[last_irel->r_offset + 4]);
- bfd_vma old_address =
- (last_irel->r_addend
- + bfd_get_32 (abfd, &contents[last_irel->r_offset]));
- bfd_vma new_address =
- (irel->r_addend
- + bfd_get_32 (abfd, &contents[actual_offset]));
- if (is_full_prop_section)
- old_flags = bfd_get_32
- (abfd, &contents[last_irel->r_offset + 8]);
- else
- old_flags = predef_flags;
-
- if ((ELF32_R_SYM (irel->r_info)
- == ELF32_R_SYM (last_irel->r_info))
- && old_address + old_size == new_address
- && old_flags == flags
- && (old_flags & XTENSA_PROP_INSN_BRANCH_TARGET) == 0
- && (old_flags & XTENSA_PROP_INSN_LOOP_TARGET) == 0)
- {
- /* Fix the old size. */
- bfd_put_32 (abfd, old_size + size,
- &contents[last_irel->r_offset + 4]);
- bytes_to_remove = entry_size;
- remove_this_irel = TRUE;
- }
- else
- last_irel = irel;
+ /* Fix the old size. */
+ bfd_put_32 (abfd, old_size + size,
+ &contents[last_irel->r_offset + 4]);
+ bytes_to_remove = entry_size;
+ remove_this_rel = TRUE;
}
else
- last_irel = irel;
+ last_irel = offset_rel;
}
-
- irel->r_offset -= removed_bytes;
- last_irel_offset = irel->r_offset;
+ else
+ last_irel = offset_rel;
}
- if (remove_this_irel)
+ if (remove_this_rel)
{
- irel->r_info = ELF32_R_INFO (0, R_XTENSA_NONE);
- irel->r_offset -= bytes_to_remove;
+ offset_rel->r_info = ELF32_R_INFO (0, R_XTENSA_NONE);
+ /* In case this is the last entry, move the relocation offset
+ to the previous entry, if there is one. */
+ if (offset_rel->r_offset >= bytes_to_remove)
+ offset_rel->r_offset -= bytes_to_remove;
+ else
+ offset_rel->r_offset = 0;
}
if (bytes_to_remove != 0)
@@ -9107,6 +9196,10 @@ relax_property_section (bfd *abfd,
if (removed_bytes)
{
+ /* Fix up any extra relocations on the last entry. */
+ for (irel = next_rel; irel < rel_end; irel++)
+ irel->r_offset -= removed_bytes;
+
/* Clear the removed bytes. */
memset (&contents[section_size - removed_bytes], 0, removed_bytes);
@@ -9114,14 +9207,9 @@ relax_property_section (bfd *abfd,
if (xtensa_is_littable_section (sec))
{
- bfd *dynobj = elf_hash_table (link_info)->dynobj;
- if (dynobj)
- {
- asection *sgotloc =
- bfd_get_section_by_name (dynobj, ".got.loc");
- if (sgotloc)
- sgotloc->size -= removed_bytes;
- }
+ asection *sgotloc = elf_xtensa_hash_table (link_info)->sgotloc;
+ if (sgotloc)
+ sgotloc->size -= removed_bytes;
}
}
}
@@ -9307,26 +9395,38 @@ do_fix_for_final_link (Elf_Internal_Rela *rel,
/* Miscellaneous utility functions.... */
static asection *
-elf_xtensa_get_plt_section (bfd *dynobj, int chunk)
+elf_xtensa_get_plt_section (struct bfd_link_info *info, int chunk)
{
+ struct elf_xtensa_link_hash_table *htab;
+ bfd *dynobj;
char plt_name[10];
if (chunk == 0)
- return bfd_get_section_by_name (dynobj, ".plt");
+ {
+ htab = elf_xtensa_hash_table (info);
+ return htab->splt;
+ }
+ dynobj = elf_hash_table (info)->dynobj;
sprintf (plt_name, ".plt.%u", chunk);
return bfd_get_section_by_name (dynobj, plt_name);
}
static asection *
-elf_xtensa_get_gotplt_section (bfd *dynobj, int chunk)
+elf_xtensa_get_gotplt_section (struct bfd_link_info *info, int chunk)
{
+ struct elf_xtensa_link_hash_table *htab;
+ bfd *dynobj;
char got_name[14];
if (chunk == 0)
- return bfd_get_section_by_name (dynobj, ".got.plt");
+ {
+ htab = elf_xtensa_hash_table (info);
+ return htab->sgotplt;
+ }
+ dynobj = elf_hash_table (info)->dynobj;
sprintf (got_name, ".got.plt.%u", chunk);
return bfd_get_section_by_name (dynobj, got_name);
}
@@ -9474,24 +9574,23 @@ pcrel_reloc_fits (xtensa_opcode opc,
}
-static int linkonce_len = sizeof (".gnu.linkonce.") - 1;
-static int insn_sec_len = sizeof (XTENSA_INSN_SEC_NAME) - 1;
-static int lit_sec_len = sizeof (XTENSA_LIT_SEC_NAME) - 1;
-static int prop_sec_len = sizeof (XTENSA_PROP_SEC_NAME) - 1;
-
-
static bfd_boolean
xtensa_is_property_section (asection *sec)
{
- if (strncmp (XTENSA_INSN_SEC_NAME, sec->name, insn_sec_len) == 0
- || strncmp (XTENSA_LIT_SEC_NAME, sec->name, lit_sec_len) == 0
- || strncmp (XTENSA_PROP_SEC_NAME, sec->name, prop_sec_len) == 0)
+ if (xtensa_is_insntable_section (sec)
+ || xtensa_is_littable_section (sec)
+ || xtensa_is_proptable_section (sec))
return TRUE;
- if (strncmp (".gnu.linkonce.", sec->name, linkonce_len) == 0
- && (strncmp (&sec->name[linkonce_len], "x.", 2) == 0
- || strncmp (&sec->name[linkonce_len], "p.", 2) == 0
- || strncmp (&sec->name[linkonce_len], "prop.", 5) == 0))
+ return FALSE;
+}
+
+
+static bfd_boolean
+xtensa_is_insntable_section (asection *sec)
+{
+ if (CONST_STRNEQ (sec->name, XTENSA_INSN_SEC_NAME)
+ || CONST_STRNEQ (sec->name, ".gnu.linkonce.x."))
return TRUE;
return FALSE;
@@ -9501,12 +9600,19 @@ xtensa_is_property_section (asection *sec)
static bfd_boolean
xtensa_is_littable_section (asection *sec)
{
- if (strncmp (XTENSA_LIT_SEC_NAME, sec->name, lit_sec_len) == 0)
+ if (CONST_STRNEQ (sec->name, XTENSA_LIT_SEC_NAME)
+ || CONST_STRNEQ (sec->name, ".gnu.linkonce.p."))
return TRUE;
- if (strncmp (".gnu.linkonce.", sec->name, linkonce_len) == 0
- && sec->name[linkonce_len] == 'p'
- && sec->name[linkonce_len + 1] == '.')
+ return FALSE;
+}
+
+
+static bfd_boolean
+xtensa_is_proptable_section (asection *sec)
+{
+ if (CONST_STRNEQ (sec->name, XTENSA_PROP_SEC_NAME)
+ || CONST_STRNEQ (sec->name, ".gnu.linkonce.prop."))
return TRUE;
return FALSE;
@@ -9548,13 +9654,44 @@ internal_reloc_matches (const void *ap, const void *bp)
}
-char *
-xtensa_get_property_section_name (asection *sec, const char *base_name)
+/* Predicate function used to look up a section in a particular group. */
+
+static bfd_boolean
+match_section_group (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *inf)
+{
+ const char *gname = inf;
+ const char *group_name = elf_group_name (sec);
+
+ return (group_name == gname
+ || (group_name != NULL
+ && gname != NULL
+ && strcmp (group_name, gname) == 0));
+}
+
+
+static int linkonce_len = sizeof (".gnu.linkonce.") - 1;
+
+asection *
+xtensa_get_property_section (asection *sec, const char *base_name)
{
- if (strncmp (sec->name, ".gnu.linkonce.", linkonce_len) == 0)
+ const char *suffix, *group_name;
+ char *prop_sec_name;
+ asection *prop_sec;
+
+ group_name = elf_group_name (sec);
+ if (group_name)
+ {
+ suffix = strrchr (sec->name, '.');
+ if (suffix == sec->name)
+ suffix = 0;
+ prop_sec_name = (char *) bfd_malloc (strlen (base_name) + 1
+ + (suffix ? strlen (suffix) : 0));
+ strcpy (prop_sec_name, base_name);
+ if (suffix)
+ strcat (prop_sec_name, suffix);
+ }
+ else if (strncmp (sec->name, ".gnu.linkonce.", linkonce_len) == 0)
{
- char *prop_sec_name;
- const char *suffix;
char *linkonce_kind = 0;
if (strcmp (base_name, XTENSA_INSN_SEC_NAME) == 0)
@@ -9574,30 +9711,48 @@ xtensa_get_property_section_name (asection *sec, const char *base_name)
suffix = sec->name + linkonce_len;
/* For backward compatibility, replace "t." instead of inserting
the new linkonce_kind (but not for "prop" sections). */
- if (strncmp (suffix, "t.", 2) == 0 && linkonce_kind[1] == '.')
+ if (CONST_STRNEQ (suffix, "t.") && linkonce_kind[1] == '.')
suffix += 2;
strcat (prop_sec_name + linkonce_len, suffix);
+ }
+ else
+ prop_sec_name = strdup (base_name);
+
+ /* Check if the section already exists. */
+ prop_sec = bfd_get_section_by_name_if (sec->owner, prop_sec_name,
+ match_section_group,
+ (void *) group_name);
+ /* If not, create it. */
+ if (! prop_sec)
+ {
+ flagword flags = (SEC_RELOC | SEC_HAS_CONTENTS | SEC_READONLY);
+ flags |= (bfd_get_section_flags (sec->owner, sec)
+ & (SEC_LINK_ONCE | SEC_LINK_DUPLICATES));
+
+ prop_sec = bfd_make_section_anyway_with_flags
+ (sec->owner, strdup (prop_sec_name), flags);
+ if (! prop_sec)
+ return 0;
- return prop_sec_name;
+ elf_group_name (prop_sec) = group_name;
}
- return strdup (base_name);
+ free (prop_sec_name);
+ return prop_sec;
}
flagword
xtensa_get_property_predef_flags (asection *sec)
{
- if (strcmp (sec->name, XTENSA_INSN_SEC_NAME) == 0
- || strncmp (sec->name, ".gnu.linkonce.x.",
- sizeof ".gnu.linkonce.x." - 1) == 0)
+ if (xtensa_is_insntable_section (sec))
return (XTENSA_PROP_INSN
- | XTENSA_PROP_INSN_NO_TRANSFORM
+ | XTENSA_PROP_NO_TRANSFORM
| XTENSA_PROP_INSN_NO_REORDER);
if (xtensa_is_littable_section (sec))
return (XTENSA_PROP_LITERAL
- | XTENSA_PROP_INSN_NO_TRANSFORM
+ | XTENSA_PROP_NO_TRANSFORM
| XTENSA_PROP_INSN_NO_REORDER);
return 0;
@@ -9624,7 +9779,7 @@ xtensa_callback_required_dependence (bfd *abfd,
/* ".plt*" sections have no explicit relocations but they contain L32R
instructions that reference the corresponding ".got.plt*" sections. */
if ((sec->flags & SEC_LINKER_CREATED) != 0
- && strncmp (sec->name, ".plt", 4) == 0)
+ && CONST_STRNEQ (sec->name, ".plt"))
{
asection *sgotplt;
@@ -9701,10 +9856,11 @@ xtensa_callback_required_dependence (bfd *abfd,
module loader so that the literals are not placed after the text. */
static const struct bfd_elf_special_section elf_xtensa_special_sections[] =
{
- { ".fini.literal", 13, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
- { ".init.literal", 13, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
- { ".literal", 8, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".fini.literal"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
+ { STRING_COMMA_LEN (".init.literal"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
+ { STRING_COMMA_LEN (".literal"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
+ { STRING_COMMA_LEN (".xtensa.info"), 0, SHT_NOTE, 0 },
+ { NULL, 0, 0, 0, 0 }
};
#ifndef ELF_ARCH
@@ -9738,7 +9894,10 @@ static const struct bfd_elf_special_section elf_xtensa_special_sections[] =
#define bfd_elf32_bfd_print_private_bfd_data elf_xtensa_print_private_bfd_data
#define bfd_elf32_bfd_relax_section elf_xtensa_relax_section
#define bfd_elf32_bfd_reloc_type_lookup elf_xtensa_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup \
+ elf_xtensa_reloc_name_lookup
#define bfd_elf32_bfd_set_private_flags elf_xtensa_set_private_flags
+#define bfd_elf32_bfd_link_hash_table_create elf_xtensa_link_hash_table_create
#define elf_backend_adjust_dynamic_symbol elf_xtensa_adjust_dynamic_symbol
#define elf_backend_check_relocs elf_xtensa_check_relocs
@@ -9753,11 +9912,13 @@ static const struct bfd_elf_special_section elf_xtensa_special_sections[] =
#define elf_backend_grok_prstatus elf_xtensa_grok_prstatus
#define elf_backend_grok_psinfo elf_xtensa_grok_psinfo
#define elf_backend_hide_symbol elf_xtensa_hide_symbol
-#define elf_backend_modify_segment_map elf_xtensa_modify_segment_map
#define elf_backend_object_p elf_xtensa_object_p
#define elf_backend_reloc_type_class elf_xtensa_reloc_type_class
#define elf_backend_relocate_section elf_xtensa_relocate_section
#define elf_backend_size_dynamic_sections elf_xtensa_size_dynamic_sections
+#define elf_backend_omit_section_dynsym \
+ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
#define elf_backend_special_sections elf_xtensa_special_sections
+#define elf_backend_action_discarded elf_xtensa_action_discarded
#include "elf32-target.h"
diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c
index 76d0661a1165..3d4350d00820 100644
--- a/bfd/elf64-alpha.c
+++ b/bfd/elf64-alpha.c
@@ -1,6 +1,6 @@
/* Alpha specific support for 64-bit ELF
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- 2006 Free Software Foundation, Inc.
+ 2006, 2007 Free Software Foundation, Inc.
Contributed by Richard Henderson <rth@tamu.edu>.
This file is part of BFD, the Binary File Descriptor library.
@@ -22,8 +22,8 @@
/* We need a published ABI spec for this. Until one comes out, don't
assume this'll remain unchanged forever. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -184,6 +184,10 @@ struct alpha_elf_link_hash_table
/* The head of a list of .got subsections linked through
alpha_elf_tdata(abfd)->got_link_next. */
bfd *got_list;
+
+ /* The most recent relax pass that we've seen. The GOTs
+ should be regenerated if this doesn't match. */
+ int relax_trip;
};
/* Look up an entry in a Alpha ELF linker hash table. */
@@ -321,11 +325,14 @@ struct alpha_elf_obj_tdata
static bfd_boolean
elf64_alpha_mkobject (bfd *abfd)
{
- bfd_size_type amt = sizeof (struct alpha_elf_obj_tdata);
- abfd->tdata.any = bfd_zalloc (abfd, amt);
if (abfd->tdata.any == NULL)
- return FALSE;
- return TRUE;
+ {
+ bfd_size_type amt = sizeof (struct alpha_elf_obj_tdata);
+ abfd->tdata.any = bfd_zalloc (abfd, amt);
+ if (abfd->tdata.any == NULL)
+ return FALSE;
+ }
+ return bfd_elf_mkobject (abfd);
}
static bfd_boolean
@@ -1052,6 +1059,23 @@ elf64_alpha_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return 0;
}
+static reloc_howto_type *
+elf64_alpha_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (elf64_alpha_howto_table)
+ / sizeof (elf64_alpha_howto_table[0]));
+ i++)
+ if (elf64_alpha_howto_table[i].name != NULL
+ && strcasecmp (elf64_alpha_howto_table[i].name, r_name) == 0)
+ return &elf64_alpha_howto_table[i];
+
+ return NULL;
+}
+
/* Given an Alpha ELF reloc type, fill in an arelent structure. */
static void
@@ -1898,7 +1922,7 @@ elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (rel_sec_name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (rel_sec_name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (rel_sec_name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
rel_sec_name+5) == 0);
}
@@ -2032,6 +2056,19 @@ elf64_alpha_adjust_dynamic_symbol (struct bfd_link_info *info,
return TRUE;
}
+/* Record STO_ALPHA_NOPV and STO_ALPHA_STD_GPLOAD. */
+
+static void
+elf64_alpha_merge_symbol_attribute (struct elf_link_hash_entry *h,
+ const Elf_Internal_Sym *isym,
+ bfd_boolean definition,
+ bfd_boolean dynamic)
+{
+ if (!dynamic && definition)
+ h->other = ((h->other & ELF_ST_VISIBILITY (-1))
+ | (isym->st_other & ~ELF_ST_VISIBILITY (-1)));
+}
+
/* Symbol versioning can create new symbols, and make our old symbols
indirect to the new ones. Consolidate the got and reloc information
in these situations. */
@@ -2342,7 +2379,6 @@ static bfd_boolean
elf64_alpha_size_got_sections (struct bfd_link_info *info)
{
bfd *i, *got_list, *cur_got_obj = NULL;
- int something_changed = 0;
got_list = alpha_elf_hash_table (info)->got_list;
@@ -2380,9 +2416,6 @@ elf64_alpha_size_got_sections (struct bfd_link_info *info)
return TRUE;
alpha_elf_hash_table (info)->got_list = got_list;
-
- /* Force got offsets to be recalculated. */
- something_changed = 1;
}
cur_got_obj = got_list;
@@ -2396,8 +2429,6 @@ elf64_alpha_size_got_sections (struct bfd_link_info *info)
alpha_elf_tdata(i)->got->size = 0;
i = alpha_elf_tdata(i)->got_link_next;
alpha_elf_tdata(cur_got_obj)->got_link_next = i;
-
- something_changed = 1;
}
else
{
@@ -2408,8 +2439,7 @@ elf64_alpha_size_got_sections (struct bfd_link_info *info)
/* Once the gots have been merged, fill in the got offsets for
everything therein. */
- if (1 || something_changed)
- elf64_alpha_calc_got_offsets (info);
+ elf64_alpha_calc_got_offsets (info);
return TRUE;
}
@@ -2444,10 +2474,10 @@ elf64_alpha_size_plt_section_1 (struct alpha_elf_link_hash_entry *h, PTR data)
return TRUE;
}
-/* Called from relax_section to rebuild the PLT in light of
- potential changes in the function's status. */
+/* Called from relax_section to rebuild the PLT in light of potential changes
+ in the function's status. */
-static bfd_boolean
+static void
elf64_alpha_size_plt_section (struct bfd_link_info *info)
{
asection *splt, *spltrel, *sgotplt;
@@ -2457,7 +2487,7 @@ elf64_alpha_size_plt_section (struct bfd_link_info *info)
dynobj = elf_hash_table(info)->dynobj;
splt = bfd_get_section_by_name (dynobj, ".plt");
if (splt == NULL)
- return TRUE;
+ return;
splt->size = 0;
@@ -2466,6 +2496,7 @@ elf64_alpha_size_plt_section (struct bfd_link_info *info)
/* Every plt entry requires a JMP_SLOT relocation. */
spltrel = bfd_get_section_by_name (dynobj, ".rela.plt");
+ entries = 0;
if (splt->size)
{
if (elf64_alpha_use_secureplt)
@@ -2473,8 +2504,6 @@ elf64_alpha_size_plt_section (struct bfd_link_info *info)
else
entries = (splt->size - OLD_PLT_HEADER_SIZE) / OLD_PLT_ENTRY_SIZE;
}
- else
- entries = 0;
spltrel->size = entries * sizeof (Elf64_External_Rela);
/* When using the secureplt, we need two words somewhere in the data
@@ -2485,8 +2514,6 @@ elf64_alpha_size_plt_section (struct bfd_link_info *info)
sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
sgotplt->size = entries ? 16 : 0;
}
-
- return TRUE;
}
static bfd_boolean
@@ -2657,7 +2684,7 @@ elf64_alpha_size_rela_got_1 (struct alpha_elf_link_hash_entry *h,
/* Set the sizes of the dynamic relocation sections. */
-static bfd_boolean
+static void
elf64_alpha_size_rela_got_section (struct bfd_link_info *info)
{
unsigned long entries;
@@ -2696,15 +2723,13 @@ elf64_alpha_size_rela_got_section (struct bfd_link_info *info)
if (!srel)
{
BFD_ASSERT (entries == 0);
- return TRUE;
+ return;
}
srel->size = sizeof (Elf64_External_Rela) * entries;
/* Now do the non-local symbols. */
alpha_elf_link_hash_traverse (alpha_elf_hash_table (info),
elf64_alpha_size_rela_got_1, info);
-
- return TRUE;
}
/* Set the sizes of the dynamic sections. */
@@ -2758,7 +2783,7 @@ elf64_alpha_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
of the dynobj section names depend upon the input files. */
name = bfd_get_section_name (dynobj, s);
- if (strncmp (name, ".rela", 5) == 0)
+ if (CONST_STRNEQ (name, ".rela"))
{
if (s->size != 0)
{
@@ -2770,7 +2795,7 @@ elf64_alpha_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
s->reloc_count = 0;
}
}
- else if (strncmp (name, ".got", 4) != 0
+ else if (! CONST_STRNEQ (name, ".got")
&& strcmp (name, ".plt") != 0
&& strcmp (name, ".dynbss") != 0)
{
@@ -3576,7 +3601,7 @@ elf64_alpha_relax_section (bfd *abfd, asection *sec,
struct alpha_elf_got_entry **local_got_entries;
struct alpha_relax_info info;
- /* We are not currently changing any sizes, so only one pass. */
+ /* There's nothing to change, yet. */
*again = FALSE;
if (link_info->relocatable
@@ -3585,6 +3610,22 @@ elf64_alpha_relax_section (bfd *abfd, asection *sec,
|| sec->reloc_count == 0)
return TRUE;
+ /* Make sure our GOT and PLT tables are up-to-date. */
+ if (alpha_elf_hash_table(link_info)->relax_trip != link_info->relax_trip)
+ {
+ alpha_elf_hash_table(link_info)->relax_trip = link_info->relax_trip;
+
+ /* This should never fail after the initial round, since the only
+ error is GOT overflow, and relaxation only shrinks the table. */
+ if (!elf64_alpha_size_got_sections (link_info))
+ abort ();
+ if (elf_hash_table (link_info)->dynamic_sections_created)
+ {
+ elf64_alpha_size_plt_section (link_info);
+ elf64_alpha_size_rela_got_section (link_info);
+ }
+ }
+
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
local_got_entries = alpha_elf_tdata(abfd)->local_got_entries;
@@ -3794,13 +3835,6 @@ elf64_alpha_relax_section (bfd *abfd, asection *sec,
}
}
- if (!elf64_alpha_size_plt_section (link_info))
- return FALSE;
- if (!elf64_alpha_size_got_sections (link_info))
- return FALSE;
- if (!elf64_alpha_size_rela_got_section (link_info))
- return FALSE;
-
if (isymbuf != NULL
&& symtab_hdr->contents != (unsigned char *) isymbuf)
{
@@ -3896,9 +3930,11 @@ elf64_alpha_relocate_section_r (bfd *output_bfd ATTRIBUTE_UNUSED,
unsigned long symtab_hdr_sh_info;
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
+ struct elf_link_hash_entry **sym_hashes;
bfd_boolean ret_val = TRUE;
symtab_hdr_sh_info = elf_tdata (input_bfd)->symtab_hdr.sh_info;
+ sym_hashes = elf_sym_hashes (input_bfd);
relend = relocs + input_section->reloc_count;
for (rel = relocs; rel < relend; rel++)
@@ -3908,7 +3944,7 @@ elf64_alpha_relocate_section_r (bfd *output_bfd ATTRIBUTE_UNUSED,
asection *sec;
unsigned long r_type;
- r_type = ELF64_R_TYPE(rel->r_info);
+ r_type = ELF64_R_TYPE (rel->r_info);
if (r_type >= R_ALPHA_max)
{
(*_bfd_error_handler)
@@ -3919,22 +3955,49 @@ elf64_alpha_relocate_section_r (bfd *output_bfd ATTRIBUTE_UNUSED,
continue;
}
- r_symndx = ELF64_R_SYM(rel->r_info);
-
/* The symbol associated with GPDISP and LITUSE is
immaterial. Only the addend is significant. */
if (r_type == R_ALPHA_GPDISP || r_type == R_ALPHA_LITUSE)
continue;
+ r_symndx = ELF64_R_SYM (rel->r_info);
if (r_symndx < symtab_hdr_sh_info)
{
sym = local_syms + r_symndx;
- if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
- {
- sec = local_sections[r_symndx];
- rel->r_addend += sec->output_offset + sym->st_value;
- }
+ sec = local_sections[r_symndx];
}
+ else
+ {
+ struct elf_link_hash_entry *h;
+
+ h = sym_hashes[r_symndx - symtab_hdr_sh_info];
+
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ if (h->root.type != bfd_link_hash_defined
+ && h->root.type != bfd_link_hash_defweak)
+ continue;
+
+ sym = NULL;
+ sec = h->root.u.def.section;
+ }
+
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. */
+ _bfd_clear_contents (elf64_alpha_howto_table + r_type,
+ input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (sym != NULL && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ rel->r_addend += sec->output_offset;
}
return ret_val;
@@ -4134,6 +4197,17 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
gotent = h->got_entries;
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
addend = rel->r_addend;
value += addend;
@@ -4193,18 +4267,6 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
goto default_reloc;
case R_ALPHA_GPREL32:
- /* If the target section was a removed linkonce section,
- r_symndx will be zero. In this case, assume that the
- switch will not be used, so don't fill it in. If we
- do nothing here, we'll get relocation truncated messages,
- due to the placement of the application above 4GB. */
- if (r_symndx == 0)
- {
- r = bfd_reloc_ok;
- break;
- }
- /* FALLTHRU */
-
case R_ALPHA_GPREL16:
case R_ALPHA_GPRELLOW:
if (dynamic_symbol_p)
@@ -5145,9 +5207,9 @@ elf64_alpha_reloc_type_class (const Elf_Internal_Rela *rela)
static const struct bfd_elf_special_section elf64_alpha_special_sections[] =
{
- { ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_ALPHA_GPREL },
- { ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_ALPHA_GPREL },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_ALPHA_GPREL },
+ { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_ALPHA_GPREL },
+ { NULL, 0, 0, 0, 0 }
};
/* ECOFF swapping routines. These are used when dealing with the
@@ -5231,12 +5293,15 @@ static const struct elf_size_info alpha_elf_size_info =
#define ELF_ARCH bfd_arch_alpha
#define ELF_MACHINE_CODE EM_ALPHA
#define ELF_MAXPAGESIZE 0x10000
+#define ELF_COMMONPAGESIZE 0x2000
#define bfd_elf64_bfd_link_hash_table_create \
elf64_alpha_bfd_link_hash_table_create
#define bfd_elf64_bfd_reloc_type_lookup \
elf64_alpha_bfd_reloc_type_lookup
+#define bfd_elf64_bfd_reloc_name_lookup \
+ elf64_alpha_bfd_reloc_name_lookup
#define elf_info_to_howto \
elf64_alpha_info_to_howto
@@ -5267,10 +5332,14 @@ static const struct elf_size_info alpha_elf_size_info =
elf64_alpha_create_dynamic_sections
#define elf_backend_adjust_dynamic_symbol \
elf64_alpha_adjust_dynamic_symbol
+#define elf_backend_merge_symbol_attribute \
+ elf64_alpha_merge_symbol_attribute
#define elf_backend_always_size_sections \
elf64_alpha_always_size_sections
#define elf_backend_size_dynamic_sections \
elf64_alpha_size_dynamic_sections
+#define elf_backend_omit_section_dynsym \
+ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
#define elf_backend_relocate_section \
elf64_alpha_relocate_section
#define elf_backend_finish_dynamic_symbol \
@@ -5305,6 +5374,8 @@ static const struct elf_size_info alpha_elf_size_info =
#define TARGET_LITTLE_SYM bfd_elf64_alpha_freebsd_vec
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf64-alpha-freebsd"
+#undef ELF_OSABI
+#define ELF_OSABI ELFOSABI_FREEBSD
/* The kernel recognizes executables as valid only if they carry a
"FreeBSD" label in the ELF header. So we put this label on all
@@ -5319,7 +5390,7 @@ elf64_alpha_fbsd_post_process_headers (bfd * abfd,
i_ehdrp = elf_elfheader (abfd);
/* Put an ABI label supported by FreeBSD >= 4.1. */
- i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_FREEBSD;
+ i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
#ifdef OLD_FREEBSD_ABI_LABEL
/* The ABI label supported by FreeBSD <= 4.0 is quite nonstandard. */
memcpy (&i_ehdrp->e_ident[EI_ABIVERSION], "FreeBSD", 8);
diff --git a/bfd/elf64-gen.c b/bfd/elf64-gen.c
index 49b8d9c55284..05a94f0650a2 100644
--- a/bfd/elf64-gen.c
+++ b/bfd/elf64-gen.c
@@ -1,5 +1,5 @@
/* Generic support for 64-bit ELF
- Copyright 1993, 1995, 1998, 1999, 2001, 2002, 2004, 2005
+ Copyright 1993, 1995, 1998, 1999, 2001, 2002, 2004, 2005, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -94,6 +94,7 @@ elf64_generic_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
#define ELF_MACHINE_CODE EM_NONE
#define ELF_MAXPAGESIZE 0x1
#define bfd_elf64_bfd_reloc_type_lookup bfd_default_reloc_type_lookup
+#define bfd_elf64_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
#define bfd_elf64_bfd_link_add_symbols elf64_generic_link_add_symbols
#define elf_info_to_howto elf_generic_info_to_howto
#define elf_info_to_howto_rel elf_generic_info_to_howto_rel
diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c
index 58798ae37949..1f9c7f1f66e7 100644
--- a/bfd/elf64-hppa.c
+++ b/bfd/elf64-hppa.c
@@ -1,5 +1,5 @@
/* Support for HPPA 64-bit ELF
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
#include "alloca-conf.h"
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/hppa.h"
@@ -204,12 +204,6 @@ static bfd_boolean elf64_hppa_finish_dynamic_symbol
PARAMS ((bfd *, struct bfd_link_info *,
struct elf_link_hash_entry *, Elf_Internal_Sym *));
-static int elf64_hppa_additional_program_headers
- PARAMS ((bfd *));
-
-static bfd_boolean elf64_hppa_modify_segment_map
- PARAMS ((bfd *, struct bfd_link_info *));
-
static enum elf_reloc_type_class elf64_hppa_reloc_type_class
PARAMS ((const Elf_Internal_Rela *));
@@ -523,12 +517,12 @@ get_reloc_section (abfd, hppa_info, sec)
if (srel_name == NULL)
return FALSE;
- BFD_ASSERT ((strncmp (srel_name, ".rela", 5) == 0
+ BFD_ASSERT ((CONST_STRNEQ (srel_name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
- srel_name+5) == 0)
- || (strncmp (srel_name, ".rel", 4) == 0
+ srel_name + 5) == 0)
+ || (CONST_STRNEQ (srel_name, ".rel")
&& strcmp (bfd_get_section_name (abfd, sec),
- srel_name+4) == 0));
+ srel_name + 4) == 0));
dynobj = hppa_info->root.dynobj;
if (!dynobj)
@@ -1204,16 +1198,9 @@ elf64_hppa_post_process_headers (abfd, link_info)
Elf_Internal_Ehdr * i_ehdrp;
i_ehdrp = elf_elfheader (abfd);
-
- if (strcmp (bfd_get_target (abfd), "elf64-hppa-linux") == 0)
- {
- i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_LINUX;
- }
- else
- {
- i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_HPUX;
- i_ehdrp->e_ident[EI_ABIVERSION] = 1;
- }
+
+ i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
+ i_ehdrp->e_ident[EI_ABIVERSION] = 1;
}
/* Create function descriptor section (.opd). This section is called .opd
@@ -1719,13 +1706,13 @@ elf64_hppa_size_dynamic_sections (output_bfd, info)
plt = s->size != 0;
}
else if (strcmp (name, ".opd") == 0
- || strncmp (name, ".dlt", 4) == 0
+ || CONST_STRNEQ (name, ".dlt")
|| strcmp (name, ".stub") == 0
|| strcmp (name, ".got") == 0)
{
/* Strip this section if we don't need it; see the comment below. */
}
- else if (strncmp (name, ".rela", 5) == 0)
+ else if (CONST_STRNEQ (name, ".rela"))
{
if (s->size != 0)
{
@@ -2617,8 +2604,8 @@ elf64_hppa_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
existence of a .interp section. */
static int
-elf64_hppa_additional_program_headers (abfd)
- bfd *abfd;
+elf64_hppa_additional_program_headers (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
asection *s;
@@ -2644,9 +2631,8 @@ elf64_hppa_additional_program_headers (abfd)
existence of a .interp section. */
static bfd_boolean
-elf64_hppa_modify_segment_map (abfd, info)
- bfd *abfd;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
+elf64_hppa_modify_segment_map (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
struct elf_segment_map *m;
asection *s;
@@ -2759,14 +2745,14 @@ elf64_hppa_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int index,
static const struct bfd_elf_special_section elf64_hppa_special_sections[] =
{
- { ".fini", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".init", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".plt", 4, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_PARISC_SHORT },
- { ".dlt", 4, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_PARISC_SHORT },
- { ".sdata", 6, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_PARISC_SHORT },
- { ".sbss", 5, 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_PARISC_SHORT },
- { ".tbss", 5, 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_HP_TLS },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".fini"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".init"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".plt"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_PARISC_SHORT },
+ { STRING_COMMA_LEN (".dlt"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_PARISC_SHORT },
+ { STRING_COMMA_LEN (".sdata"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_PARISC_SHORT },
+ { STRING_COMMA_LEN (".sbss"), 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_PARISC_SHORT },
+ { STRING_COMMA_LEN (".tbss"), 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_HP_TLS },
+ { NULL, 0, 0, 0, 0 }
};
/* The hash bucket size is the standard one, namely 4. */
@@ -2807,7 +2793,10 @@ const struct elf_size_info hppa64_elf_size_info =
/* This is not strictly correct. The maximum page size for PA2.0 is
64M. But everything still uses 4k. */
#define ELF_MAXPAGESIZE 0x1000
+#define ELF_OSABI ELFOSABI_HPUX
+
#define bfd_elf64_bfd_reloc_type_lookup elf_hppa_reloc_type_lookup
+#define bfd_elf64_bfd_reloc_name_lookup elf_hppa_reloc_name_lookup
#define bfd_elf64_bfd_is_local_label_name elf_hppa_is_local_label_name
#define elf_info_to_howto elf_hppa_info_to_howto
#define elf_info_to_howto_rel elf_hppa_info_to_howto_rel
@@ -2827,6 +2816,8 @@ const struct elf_size_info hppa64_elf_size_info =
elf64_hppa_create_dynamic_sections
#define elf_backend_post_process_headers elf64_hppa_post_process_headers
+#define elf_backend_omit_section_dynsym \
+ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
#define elf_backend_adjust_dynamic_symbol \
elf64_hppa_adjust_dynamic_symbol
@@ -2871,12 +2862,19 @@ const struct elf_size_info hppa64_elf_size_info =
#define elf_backend_action_discarded elf_hppa_action_discarded
#define elf_backend_section_from_phdr elf64_hppa_section_from_phdr
+#define elf64_bed elf64_hppa_hpux_bed
+
#include "elf64-target.h"
#undef TARGET_BIG_SYM
#define TARGET_BIG_SYM bfd_elf64_hppa_linux_vec
#undef TARGET_BIG_NAME
#define TARGET_BIG_NAME "elf64-hppa-linux"
+#undef ELF_OSABI
+#define ELF_OSABI ELFOSABI_LINUX
+#undef elf_backend_post_process_headers
+#define elf_backend_post_process_headers _bfd_elf_set_osabi
+#undef elf64_bed
+#define elf64_bed elf64_hppa_linux_bed
-#define INCLUDED_TARGET_FILE 1
#include "elf64-target.h"
diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c
index c8f3127e3c9e..e64b50caed01 100644
--- a/bfd/elf64-mips.c
+++ b/bfd/elf64-mips.c
@@ -1,6 +1,6 @@
/* MIPS-specific support for 64-bit ELF
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2007 Free Software Foundation, Inc.
Ian Lance Taylor, Cygnus Support
Linker support added by Mark Mitchell, CodeSourcery, LLC.
<mark@codesourcery.com>
@@ -40,8 +40,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
. the OldABI version is still lying around and should be removed.
*/
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "aout/ar.h"
#include "bfdlink.h"
@@ -112,8 +112,6 @@ static bfd_reloc_status_type mips_elf64_gprel32_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_reloc_status_type mips_elf64_shift6_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type mips16_jump_reloc
- (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_reloc_status_type mips16_gprel_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_boolean mips_elf64_assign_gp
@@ -791,6 +789,21 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
+
+ /* 32 bit relocation with no addend. */
+ HOWTO (R_MIPS_GLOB_DAT, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ _bfd_mips_elf_generic_reloc, /* special_function */
+ "R_MIPS_GLOB_DAT", /* name */
+ FALSE, /* partial_inplace */
+ 0x0, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
};
/* The relocation table used for SHT_RELA sections. */
@@ -1314,7 +1327,20 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32),
EMPTY_HOWTO (R_MIPS_TLS_DTPREL32),
EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64),
- EMPTY_HOWTO (R_MIPS_TLS_DTPREL64),
+
+ HOWTO (R_MIPS_TLS_DTPREL64, /* type */
+ 0, /* rightshift */
+ 4, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ _bfd_mips_elf_generic_reloc, /* special_function */
+ "R_MIPS_TLS_DTPREL64", /* name */
+ TRUE, /* partial_inplace */
+ MINUS_ONE, /* src_mask */
+ MINUS_ONE, /* dst_mask */
+ FALSE), /* pcrel_offset */
/* TLS general dynamic variable reference. */
HOWTO (R_MIPS_TLS_GD, /* type */
@@ -1423,6 +1449,21 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
+
+ /* 32 bit relocation with no addend. */
+ HOWTO (R_MIPS_GLOB_DAT, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ _bfd_mips_elf_generic_reloc, /* special_function */
+ "R_MIPS_GLOB_DAT", /* name */
+ FALSE, /* partial_inplace */
+ 0x0, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
};
static reloc_howto_type mips16_elf64_howto_table_rel[] =
@@ -1438,7 +1479,7 @@ static reloc_howto_type mips16_elf64_howto_table_rel[] =
/* This needs complex overflow
detection, because the upper four
bits must match the PC. */
- mips16_jump_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS16_26", /* name */
TRUE, /* partial_inplace */
0x3ffffff, /* src_mask */
@@ -1510,7 +1551,7 @@ static reloc_howto_type mips16_elf64_howto_table_rela[] =
/* This needs complex overflow
detection, because the upper four
bits must match the PC. */
- mips16_jump_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS16_26", /* name */
FALSE, /* partial_inplace */
0x3ffffff, /* src_mask */
@@ -2044,37 +2085,6 @@ mips_elf64_shift6_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
error_message);
}
-/* Handle a mips16 jump. */
-
-static bfd_reloc_status_type
-mips16_jump_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
- asymbol *symbol, void *data ATTRIBUTE_UNUSED,
- asection *input_section, bfd *output_bfd,
- char **error_message ATTRIBUTE_UNUSED)
-{
- if (output_bfd != NULL
- && (symbol->flags & BSF_SECTION_SYM) == 0
- && (! reloc_entry->howto->partial_inplace
- || reloc_entry->addend == 0))
- {
- reloc_entry->address += input_section->output_offset;
- return bfd_reloc_ok;
- }
-
- /* FIXME. */
- {
- static bfd_boolean warned;
-
- if (! warned)
- (*_bfd_error_handler)
- (_("Linking mips16 objects into %s format is not supported"),
- bfd_get_target (input_section->output_section->owner));
- warned = TRUE;
- }
-
- return bfd_reloc_undefined;
-}
-
/* Handle a mips16 GP relative reloc. */
static bfd_reloc_status_type
@@ -2227,6 +2237,39 @@ bfd_elf64_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
}
}
+static reloc_howto_type *
+bfd_elf64_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (mips_elf64_howto_table_rela)
+ / sizeof (mips_elf64_howto_table_rela[0])); i++)
+ if (mips_elf64_howto_table_rela[i].name != NULL
+ && strcasecmp (mips_elf64_howto_table_rela[i].name, r_name) == 0)
+ return &mips_elf64_howto_table_rela[i];
+
+ for (i = 0;
+ i < (sizeof (mips16_elf64_howto_table_rela)
+ / sizeof (mips16_elf64_howto_table_rela[0]));
+ i++)
+ if (mips16_elf64_howto_table_rela[i].name != NULL
+ && strcasecmp (mips16_elf64_howto_table_rela[i].name, r_name) == 0)
+ return &mips16_elf64_howto_table_rela[i];
+
+ if (strcasecmp (elf_mips_gnu_vtinherit_howto.name, r_name) == 0)
+ return &elf_mips_gnu_vtinherit_howto;
+ if (strcasecmp (elf_mips_gnu_vtentry_howto.name, r_name) == 0)
+ return &elf_mips_gnu_vtentry_howto;
+ if (strcasecmp (elf_mips_gnu_rel16_s2.name, r_name) == 0)
+ return &elf_mips_gnu_rel16_s2;
+ if (strcasecmp (elf_mips_gnu_rela16_s2.name, r_name) == 0)
+ return &elf_mips_gnu_rela16_s2;
+
+ return NULL;
+}
+
/* Given a MIPS Elf_Internal_Rel, fill in an arelent structure. */
static reloc_howto_type *
@@ -3059,12 +3102,15 @@ const struct elf_size_info mips_elf64_size_info =
#define elf_backend_create_dynamic_sections \
_bfd_mips_elf_create_dynamic_sections
#define elf_backend_check_relocs _bfd_mips_elf_check_relocs
+#define elf_backend_merge_symbol_attribute \
+ _bfd_mips_elf_merge_symbol_attribute
#define elf_backend_adjust_dynamic_symbol \
_bfd_mips_elf_adjust_dynamic_symbol
#define elf_backend_always_size_sections \
_bfd_mips_elf_always_size_sections
#define elf_backend_size_dynamic_sections \
_bfd_mips_elf_size_dynamic_sections
+#define elf_backend_init_index_section _bfd_elf_init_1_index_section
#define elf_backend_relocate_section _bfd_mips_elf_relocate_section
#define elf_backend_finish_dynamic_symbol \
_bfd_mips_elf_finish_dynamic_symbol
@@ -3152,10 +3198,8 @@ extern bfd_boolean bfd_elf64_archive_write_armap
#define TARGET_BIG_SYM bfd_elf64_bigmips_vec
#define TARGET_BIG_NAME "elf64-bigmips"
-/* The SVR4 MIPS ABI says that this should be 0x10000, but Irix 5 uses
- a value of 0x1000, and we are compatible.
- FIXME: How does this affect NewABI? */
-#define ELF_MAXPAGESIZE 0x1000
+#define ELF_MAXPAGESIZE 0x10000
+#define ELF_COMMONPAGESIZE 0x1000
#include "elf64-target.h"
@@ -3166,15 +3210,15 @@ extern bfd_boolean bfd_elf64_archive_write_armap
#undef TARGET_BIG_NAME
#undef ELF_MAXPAGESIZE
+#undef ELF_COMMONPAGESIZE
#define TARGET_LITTLE_SYM bfd_elf64_tradlittlemips_vec
#define TARGET_LITTLE_NAME "elf64-tradlittlemips"
#define TARGET_BIG_SYM bfd_elf64_tradbigmips_vec
#define TARGET_BIG_NAME "elf64-tradbigmips"
-/* The SVR4 MIPS ABI says that this should be 0x10000, and Linux uses
- page sizes of up to that limit, so we need to respect it. */
#define ELF_MAXPAGESIZE 0x10000
+#define ELF_COMMONPAGESIZE 0x1000
#define elf64_bed elf64_tradbed
/* Include the target file again for this target. */
diff --git a/bfd/elf64-mmix.c b/bfd/elf64-mmix.c
index 6f88fe102f59..3f75042469a8 100644
--- a/bfd/elf64-mmix.c
+++ b/bfd/elf64-mmix.c
@@ -1,5 +1,6 @@
/* MMIX-specific support for 64-bit ELF.
- Copyright 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Contributed by Hans-Peter Nilsson <hp@bitrange.com>
This file is part of BFD, the Binary File Descriptor library.
@@ -26,8 +27,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
- GETA stub relaxation (call a stub for out of range new
R_MMIX_GETA_STUBBABLE). */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/mmix.h"
@@ -186,14 +187,6 @@ static bfd_boolean mmix_elf_relocate_section
PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
-static asection * mmix_elf_gc_mark_hook
- PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *,
- struct elf_link_hash_entry *, Elf_Internal_Sym *));
-
-static bfd_boolean mmix_elf_gc_sweep_hook
- PARAMS ((bfd *, struct bfd_link_info *, asection *,
- const Elf_Internal_Rela *));
-
static bfd_reloc_status_type mmix_final_link_relocate
PARAMS ((reloc_howto_type *, asection *, bfd_byte *,
bfd_vma, bfd_signed_vma, bfd_vma, const char *, asection *));
@@ -855,18 +848,37 @@ bfd_elf64_bfd_reloc_type_lookup (abfd, code)
return NULL;
}
+static reloc_howto_type *
+bfd_elf64_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (elf_mmix_howto_table) / sizeof (elf_mmix_howto_table[0]);
+ i++)
+ if (elf_mmix_howto_table[i].name != NULL
+ && strcasecmp (elf_mmix_howto_table[i].name, r_name) == 0)
+ return &elf_mmix_howto_table[i];
+
+ return NULL;
+}
+
static bfd_boolean
mmix_elf_new_section_hook (abfd, sec)
bfd *abfd;
asection *sec;
{
- struct _mmix_elf_section_data *sdata;
- bfd_size_type amt = sizeof (*sdata);
+ if (!sec->used_by_bfd)
+ {
+ struct _mmix_elf_section_data *sdata;
+ bfd_size_type amt = sizeof (*sdata);
- sdata = (struct _mmix_elf_section_data *) bfd_zalloc (abfd, amt);
- if (sdata == NULL)
- return FALSE;
- sec->used_by_bfd = (PTR) sdata;
+ sdata = bfd_zalloc (abfd, amt);
+ if (sdata == NULL)
+ return FALSE;
+ sec->used_by_bfd = sdata;
+ }
return _bfd_elf_new_section_hook (abfd, sec);
}
@@ -1369,22 +1381,53 @@ mmix_elf_relocate_section (output_bfd, info, input_bfd, input_section,
r_symndx = ELF64_R_SYM (rel->r_info);
+ howto = elf_mmix_howto_table + ELF64_R_TYPE (rel->r_info);
+ h = NULL;
+ sym = NULL;
+ sec = NULL;
+
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ sym = local_syms + r_symndx;
+ sec = local_sections [r_symndx];
+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+
+ name = bfd_elf_string_from_elf_section (input_bfd,
+ symtab_hdr->sh_link,
+ sym->st_name);
+ if (name == NULL)
+ name = bfd_section_name (input_bfd, sec);
+ }
+ else
+ {
+ bfd_boolean unresolved_reloc;
+
+ RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
+ r_symndx, symtab_hdr, sym_hashes,
+ h, sec, relocation,
+ unresolved_reloc, undefined_signalled);
+ name = h->root.root.string;
+ }
+
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
if (info->relocatable)
{
/* This is a relocatable link. For most relocs we don't have to
change anything, unless the reloc is against a section
symbol, in which case we have to adjust according to where
the section symbol winds up in the output section. */
- if (r_symndx < symtab_hdr->sh_info)
- {
- sym = local_syms + r_symndx;
-
- if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
- {
- sec = local_sections [r_symndx];
- rel->r_addend += sec->output_offset + sym->st_value;
- }
- }
+ if (sym != NULL && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ rel->r_addend += sec->output_offset;
/* For PUSHJ stub relocs however, we may need to change the
reloc and the section contents, if the reloc doesn't reach
@@ -1458,35 +1501,6 @@ mmix_elf_relocate_section (output_bfd, info, input_bfd, input_section,
continue;
}
- /* This is a final link. */
- howto = elf_mmix_howto_table + ELF64_R_TYPE (rel->r_info);
- h = NULL;
- sym = NULL;
- sec = NULL;
-
- if (r_symndx < symtab_hdr->sh_info)
- {
- sym = local_syms + r_symndx;
- sec = local_sections [r_symndx];
- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
-
- name = bfd_elf_string_from_elf_section (input_bfd,
- symtab_hdr->sh_link,
- sym->st_name);
- if (name == NULL)
- name = bfd_section_name (input_bfd, sec);
- }
- else
- {
- bfd_boolean unresolved_reloc;
-
- RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
- r_symndx, symtab_hdr, sym_hashes,
- h, sec, relocation,
- unresolved_reloc, undefined_signalled);
- name = h->root.root.string;
- }
-
r = mmix_final_link_relocate (howto, input_section,
contents, rel->r_offset,
rel->r_addend, relocation, name, sec);
@@ -1740,40 +1754,21 @@ mmix_final_link_relocate (howto, input_section, contents,
relocation. */
static asection *
-mmix_elf_gc_mark_hook (sec, info, rel, h, sym)
- asection *sec;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
- Elf_Internal_Rela *rel;
- struct elf_link_hash_entry *h;
- Elf_Internal_Sym *sym;
+mmix_elf_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF64_R_TYPE (rel->r_info))
- {
- case R_MMIX_GNU_VTINHERIT:
- case R_MMIX_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ switch (ELF64_R_TYPE (rel->r_info))
+ {
+ case R_MMIX_GNU_VTINHERIT:
+ case R_MMIX_GNU_VTENTRY:
+ return NULL;
+ }
- return NULL;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update relocation info for a GC-excluded section. We could supposedly
@@ -1782,11 +1777,10 @@ mmix_elf_gc_mark_hook (sec, info, rel, h, sym)
present. Better to waste some memory and (perhaps) a little time. */
static bfd_boolean
-mmix_elf_gc_sweep_hook (abfd, info, sec, relocs)
- bfd *abfd ATTRIBUTE_UNUSED;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
- asection *sec ATTRIBUTE_UNUSED;
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED;
+mmix_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ asection *sec,
+ const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
{
struct bpo_reloc_section_info *bpodata
= mmix_elf_section_data (sec)->bpo.reloc;
@@ -2189,8 +2183,7 @@ mmix_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
(*secp)->flags |= SEC_LINKER_CREATED;
}
else if ((*namep)[0] == '_' && (*namep)[1] == '_' && (*namep)[2] == '.'
- && strncmp (*namep, MMIX_LOC_SECTION_START_SYMBOL_PREFIX,
- strlen (MMIX_LOC_SECTION_START_SYMBOL_PREFIX)) == 0)
+ && CONST_STRNEQ (*namep, MMIX_LOC_SECTION_START_SYMBOL_PREFIX))
{
/* See if we have another one. */
struct bfd_link_hash_entry *h = bfd_link_hash_lookup (info->hash,
@@ -2941,6 +2934,8 @@ mmix_elf_relax_section (abfd, sec, link_info, again)
#define elf_backend_check_relocs mmix_elf_check_relocs
#define elf_backend_symbol_processing mmix_elf_symbol_processing
+#define elf_backend_omit_section_dynsym \
+ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
#define bfd_elf64_bfd_is_local_label_name \
mmix_elf_is_local_label_name
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index 33327f44cba9..0e4f725d1ffd 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -1,5 +1,5 @@
/* PowerPC64-specific support for 64-bit ELF.
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Linus Nordberg, Swox AB <info@swox.com>,
based on elf32-ppc.c by Ian Lance Taylor.
@@ -25,8 +25,9 @@
http://www.linuxbase.org/spec/ELF/ppc64/PPC-elf64abi.txt, and
http://www.linuxbase.org/spec/ELF/ppc64/spec/book1.html */
-#include "bfd.h"
#include "sysdep.h"
+#include <stdarg.h>
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -61,6 +62,7 @@ static bfd_vma opd_entry_value
#define ELF_ARCH bfd_arch_powerpc
#define ELF_MACHINE_CODE EM_PPC64
#define ELF_MAXPAGESIZE 0x10000
+#define ELF_COMMONPAGESIZE 0x1000
#define elf_info_to_howto ppc64_elf_info_to_howto
#define elf_backend_want_got_sym 0
@@ -71,9 +73,11 @@ static bfd_vma opd_entry_value
#define elf_backend_can_gc_sections 1
#define elf_backend_can_refcount 1
#define elf_backend_rela_normal 1
+#define elf_backend_default_execstack 0
#define bfd_elf64_mkobject ppc64_elf_mkobject
#define bfd_elf64_bfd_reloc_type_lookup ppc64_elf_reloc_type_lookup
+#define bfd_elf64_bfd_reloc_name_lookup ppc64_elf_reloc_name_lookup
#define bfd_elf64_bfd_merge_private_bfd_data ppc64_elf_merge_private_bfd_data
#define bfd_elf64_new_section_hook ppc64_elf_new_section_hook
#define bfd_elf64_bfd_link_hash_table_create ppc64_elf_link_hash_table_create
@@ -83,10 +87,12 @@ static bfd_vma opd_entry_value
#define elf_backend_object_p ppc64_elf_object_p
#define elf_backend_grok_prstatus ppc64_elf_grok_prstatus
#define elf_backend_grok_psinfo ppc64_elf_grok_psinfo
+#define elf_backend_write_core_note ppc64_elf_write_core_note
#define elf_backend_create_dynamic_sections ppc64_elf_create_dynamic_sections
#define elf_backend_copy_indirect_symbol ppc64_elf_copy_indirect_symbol
#define elf_backend_add_symbol_hook ppc64_elf_add_symbol_hook
#define elf_backend_check_directives ppc64_elf_check_directives
+#define elf_backend_as_needed_cleanup ppc64_elf_as_needed_cleanup
#define elf_backend_archive_symbol_lookup ppc64_elf_archive_symbol_lookup
#define elf_backend_check_relocs ppc64_elf_check_relocs
#define elf_backend_gc_mark_dynamic_ref ppc64_elf_gc_mark_dynamic_ref
@@ -96,6 +102,7 @@ static bfd_vma opd_entry_value
#define elf_backend_hide_symbol ppc64_elf_hide_symbol
#define elf_backend_always_size_sections ppc64_elf_func_desc_adjust
#define elf_backend_size_dynamic_sections ppc64_elf_size_dynamic_sections
+#define elf_backend_init_index_section _bfd_elf_init_2_index_sections
#define elf_backend_action_discarded ppc64_elf_action_discarded
#define elf_backend_relocate_section ppc64_elf_relocate_section
#define elf_backend_finish_dynamic_symbol ppc64_elf_finish_dynamic_symbol
@@ -134,30 +141,29 @@ static bfd_vma opd_entry_value
#define BCTR 0x4e800420 /* bctr */
+#define ADDIS_R12_R12 0x3d8c0000 /* addis %r12,%r12,off@ha */
#define ADDIS_R2_R2 0x3c420000 /* addis %r2,%r2,off@ha */
#define ADDI_R2_R2 0x38420000 /* addi %r2,%r2,off@l */
#define LD_R2_40R1 0xe8410028 /* ld %r2,40(%r1) */
-/* glink call stub instructions. We enter with the index in R0, and the
- address of glink entry in CTR. From that, we can calculate PLT0. */
+/* glink call stub instructions. We enter with the index in R0. */
#define GLINK_CALL_STUB_SIZE (16*4)
-#define MFCTR_R12 0x7d8902a6 /* mfctr %r12 */
-#define SLDI_R11_R0_3 0x780b1f24 /* sldi %r11,%r0,3 */
-#define ADDIC_R2_R0_32K 0x34408000 /* addic. %r2,%r0,-32768 */
-#define SUB_R12_R12_R11 0x7d8b6050 /* sub %r12,%r12,%r11 */
-#define SRADI_R2_R2_63 0x7c42fe76 /* sradi %r2,%r2,63 */
-#define SLDI_R11_R0_2 0x780b1764 /* sldi %r11,%r0,2 */
-#define AND_R2_R2_R11 0x7c425838 /* and %r2,%r2,%r11 */
- /* sub %r12,%r12,%r11 */
-#define ADD_R12_R12_R2 0x7d8c1214 /* add %r12,%r12,%r2 */
-#define ADDIS_R12_R12 0x3d8c0000 /* addis %r12,%r12,xxx@ha */
- /* ld %r11,xxx@l(%r12) */
-#define ADDI_R12_R12 0x398c0000 /* addi %r12,%r12,xxx@l */
- /* ld %r2,8(%r12) */
- /* mtctr %r11 */
- /* ld %r11,16(%r12) */
- /* bctr */
+ /* 0: */
+ /* .quad plt0-1f */
+ /* __glink: */
+#define MFLR_R12 0x7d8802a6 /* mflr %12 */
+#define BCL_20_31 0x429f0005 /* bcl 20,31,1f */
+ /* 1: */
+#define MFLR_R11 0x7d6802a6 /* mflr %11 */
+#define LD_R2_M16R11 0xe84bfff0 /* ld %2,(0b-1b)(%11) */
+#define MTLR_R12 0x7d8803a6 /* mtlr %12 */
+#define ADD_R12_R2_R11 0x7d825a14 /* add %12,%2,%11 */
+ /* ld %11,0(%12) */
+ /* ld %2,8(%12) */
+ /* mtctr %11 */
+ /* ld %11,16(%12) */
+ /* bctr */
/* Pad with this. */
#define NOP 0x60000000
@@ -1193,7 +1199,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
/* Like R_PPC64_PLTGOT16, but for instructions with a DS field. */
/* FIXME: R_PPC64_PLTGOT16_DS not implemented. */
- HOWTO (R_PPC64_PLTGOT16_DS, /* type */
+ HOWTO (R_PPC64_PLTGOT16_DS, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
@@ -2106,6 +2112,22 @@ ppc64_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return ppc64_elf_howto_table[r];
};
+static reloc_howto_type *
+ppc64_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (ppc64_elf_howto_raw) / sizeof (ppc64_elf_howto_raw[0]);
+ i++)
+ if (ppc64_elf_howto_raw[i].name != NULL
+ && strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0)
+ return &ppc64_elf_howto_raw[i];
+
+ return NULL;
+}
+
/* Set the howto pointer for a PowerPC ELF reloc. */
static void
@@ -2376,14 +2398,9 @@ struct ppc64_elf_obj_tdata
asection *got;
asection *relgot;
- union {
- /* Used during garbage collection. We attach global symbols defined
- on removed .opd entries to this section so that the sym is removed. */
- asection *deleted_section;
-
- /* Used when adding symbols. */
- bfd_boolean has_dotsym;
- } u;
+ /* Used during garbage collection. We attach global symbols defined
+ on removed .opd entries to this section so that the sym is removed. */
+ asection *deleted_section;
/* TLS local dynamic got entry handling. Suppose for multiple GOT
sections means we potentially need one of these for each input bfd. */
@@ -2407,11 +2424,14 @@ struct ppc64_elf_obj_tdata
static bfd_boolean
ppc64_elf_mkobject (bfd *abfd)
{
- bfd_size_type amt = sizeof (struct ppc64_elf_obj_tdata);
- abfd->tdata.any = bfd_zalloc (abfd, amt);
if (abfd->tdata.any == NULL)
- return FALSE;
- return TRUE;
+ {
+ bfd_size_type amt = sizeof (struct ppc64_elf_obj_tdata);
+ abfd->tdata.any = bfd_zalloc (abfd, amt);
+ if (abfd->tdata.any == NULL)
+ return FALSE;
+ }
+ return bfd_elf_mkobject (abfd);
}
/* Return 1 if target is one of ours. */
@@ -2484,6 +2504,53 @@ ppc64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
return TRUE;
}
+static char *
+ppc64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type,
+ ...)
+{
+ switch (note_type)
+ {
+ default:
+ return NULL;
+
+ case NT_PRPSINFO:
+ {
+ char data[136];
+ va_list ap;
+
+ va_start (ap, note_type);
+ memset (data, 0, 40);
+ strncpy (data + 40, va_arg (ap, const char *), 16);
+ strncpy (data + 56, va_arg (ap, const char *), 80);
+ va_end (ap);
+ return elfcore_write_note (abfd, buf, bufsiz,
+ "CORE", note_type, data, sizeof (data));
+ }
+
+ case NT_PRSTATUS:
+ {
+ char data[504];
+ va_list ap;
+ long pid;
+ int cursig;
+ const void *greg;
+
+ va_start (ap, note_type);
+ memset (data, 0, 112);
+ pid = va_arg (ap, long);
+ bfd_put_32 (abfd, pid, data + 32);
+ cursig = va_arg (ap, int);
+ bfd_put_16 (abfd, cursig, data + 12);
+ greg = va_arg (ap, const void *);
+ memcpy (data + 112, greg, 384);
+ memset (data + 496, 0, 8);
+ va_end (ap);
+ return elfcore_write_note (abfd, buf, bufsiz,
+ "CORE", note_type, data, sizeof (data));
+ }
+ }
+}
+
/* Merge backend specific data from an object file to the output
object file when linking. */
@@ -2517,13 +2584,19 @@ ppc64_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
static const struct bfd_elf_special_section ppc64_elf_special_sections[]=
{
- { ".plt", 4, 0, SHT_NOBITS, 0 },
- { ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
- { ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".toc", 4, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".toc1", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
- { ".tocbss", 7, 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".plt"), 0, SHT_NOBITS, 0 },
+ { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".toc"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".toc1"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+ { STRING_COMMA_LEN (".tocbss"), 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
+ { NULL, 0, 0, 0, 0 }
+};
+
+enum _ppc64_sec_type {
+ sec_normal = 0,
+ sec_opd = 1,
+ sec_toc = 2
};
struct _ppc64_elf_section_data
@@ -2534,14 +2607,20 @@ struct _ppc64_elf_section_data
union
{
/* Points to the function code section for local opd entries. */
- asection **func_sec;
+ asection **opd_func_sec;
/* After editing .opd, adjust references to opd local syms. */
- long *adjust;
- } opd;
+ long *opd_adjust;
- /* An array for toc sections, indexed by offset/8.
- Specifies the relocation symbol index used at a given toc offset. */
- unsigned *t_symndx;
+ /* An array for toc sections, indexed by offset/8.
+ Specifies the relocation symbol index used at a given toc offset. */
+ unsigned *t_symndx;
+ } u;
+
+ enum _ppc64_sec_type sec_type:2;
+
+ /* Flag set when small branches are detected. Used to
+ select suitable defaults for the stub group size. */
+ unsigned int has_14bit_branch:1;
};
#define ppc64_elf_section_data(sec) \
@@ -2550,13 +2629,16 @@ struct _ppc64_elf_section_data
static bfd_boolean
ppc64_elf_new_section_hook (bfd *abfd, asection *sec)
{
- struct _ppc64_elf_section_data *sdata;
- bfd_size_type amt = sizeof (*sdata);
+ if (!sec->used_by_bfd)
+ {
+ struct _ppc64_elf_section_data *sdata;
+ bfd_size_type amt = sizeof (*sdata);
- sdata = bfd_zalloc (abfd, amt);
- if (sdata == NULL)
- return FALSE;
- sec->used_by_bfd = sdata;
+ sdata = bfd_zalloc (abfd, amt);
+ if (sdata == NULL)
+ return FALSE;
+ sec->used_by_bfd = sdata;
+ }
return _bfd_elf_new_section_hook (abfd, sec);
}
@@ -2566,8 +2648,8 @@ get_opd_info (asection * sec)
{
if (sec != NULL
&& ppc64_elf_section_data (sec) != NULL
- && ppc64_elf_section_data (sec)->opd.adjust != NULL)
- return ppc64_elf_section_data (sec)->opd.adjust;
+ && ppc64_elf_section_data (sec)->sec_type == sec_opd)
+ return ppc64_elf_section_data (sec)->u.opd_adjust;
return NULL;
}
@@ -3234,9 +3316,14 @@ struct ppc_link_hash_entry
{
struct elf_link_hash_entry elf;
- /* A pointer to the most recently used stub hash entry against this
- symbol. */
- struct ppc_stub_hash_entry *stub_cache;
+ union {
+ /* A pointer to the most recently used stub hash entry against this
+ symbol. */
+ struct ppc_stub_hash_entry *stub_cache;
+
+ /* A pointer to the next symbol starting with a '.' */
+ struct ppc_link_hash_entry *next_dot_sym;
+ } u;
/* Track dynamic relocs copied for this symbol. */
struct ppc_dyn_relocs *dyn_relocs;
@@ -3314,6 +3401,9 @@ struct ppc_link_hash_table
/* Highest output section index. */
int top_index;
+ /* Used when adding symbols. */
+ struct ppc_link_hash_entry *dot_syms;
+
/* List of input sections for each output section. */
asection **input_list;
@@ -3348,10 +3438,6 @@ struct ppc_link_hash_table
/* Set on error. */
unsigned int stub_error:1;
- /* Flag set when small branches are detected. Used to
- select suitable defaults for the stub group size. */
- unsigned int has_14bit_branch:1;
-
/* Temp used by ppc64_elf_check_directives. */
unsigned int twiddled_syms:1;
@@ -3470,9 +3556,34 @@ link_hash_newfunc (struct bfd_hash_entry *entry,
{
struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) entry;
- memset (&eh->stub_cache, 0,
+ memset (&eh->u.stub_cache, 0,
(sizeof (struct ppc_link_hash_entry)
- - offsetof (struct ppc_link_hash_entry, stub_cache)));
+ - offsetof (struct ppc_link_hash_entry, u.stub_cache)));
+
+ /* When making function calls, old ABI code references function entry
+ points (dot symbols), while new ABI code references the function
+ descriptor symbol. We need to make any combination of reference and
+ definition work together, without breaking archive linking.
+
+ For a defined function "foo" and an undefined call to "bar":
+ An old object defines "foo" and ".foo", references ".bar" (possibly
+ "bar" too).
+ A new object defines "foo" and references "bar".
+
+ A new object thus has no problem with its undefined symbols being
+ satisfied by definitions in an old object. On the other hand, the
+ old object won't have ".bar" satisfied by a new object.
+
+ Keep a list of newly added dot-symbols. */
+
+ if (string[0] == '.')
+ {
+ struct ppc_link_hash_table *htab;
+
+ htab = (struct ppc_link_hash_table *) table;
+ eh->u.next_dot_sym = htab->dot_syms;
+ htab->dot_syms = eh;
+ }
}
return entry;
@@ -3618,11 +3729,11 @@ ppc_get_stub_entry (const asection *input_section,
distinguish between them. */
id_sec = htab->stub_group[input_section->id].link_sec;
- if (h != NULL && h->stub_cache != NULL
- && h->stub_cache->h == h
- && h->stub_cache->id_sec == id_sec)
+ if (h != NULL && h->u.stub_cache != NULL
+ && h->u.stub_cache->h == h
+ && h->u.stub_cache->id_sec == id_sec)
{
- stub_entry = h->stub_cache;
+ stub_entry = h->u.stub_cache;
}
else
{
@@ -3635,7 +3746,7 @@ ppc_get_stub_entry (const asection *input_section,
stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
stub_name, FALSE, FALSE);
if (h != NULL)
- h->stub_cache = stub_entry;
+ h->u.stub_cache = stub_entry;
free (stub_name);
}
@@ -3721,49 +3832,26 @@ create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink",
flags);
if (htab->glink == NULL
- || ! bfd_set_section_alignment (dynobj, htab->glink, 2))
+ || ! bfd_set_section_alignment (dynobj, htab->glink, 3))
return FALSE;
/* Create branch lookup table for plt_branch stubs. */
- if (info->shared)
- {
- flags = (SEC_ALLOC | SEC_LOAD
- | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
- htab->brlt
- = bfd_make_section_anyway_with_flags (dynobj, ".data.rel.ro.brlt",
- flags);
- }
- else
- {
- flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
- | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
- htab->brlt
- = bfd_make_section_anyway_with_flags (dynobj, ".rodata.brlt", flags);
- }
-
+ flags = (SEC_ALLOC | SEC_LOAD
+ | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
+ htab->brlt = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
+ flags);
if (htab->brlt == NULL
|| ! bfd_set_section_alignment (dynobj, htab->brlt, 3))
return FALSE;
- if (info->shared)
- {
- flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
- | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
- htab->relbrlt
- = bfd_make_section_anyway_with_flags (dynobj, ".rela.data.rel.ro.brlt",
- flags);
- }
- else if (info->emitrelocations)
- {
- flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
- | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
- htab->relbrlt
- = bfd_make_section_anyway_with_flags (dynobj, ".rela.rodata.brlt",
- flags);
- }
- else
+ if (!info->shared)
return TRUE;
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
+ | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
+ htab->relbrlt = bfd_make_section_anyway_with_flags (dynobj,
+ ".rela.branch_lt",
+ flags);
if (!htab->relbrlt
|| ! bfd_set_section_alignment (dynobj, htab->relbrlt, 3))
return FALSE;
@@ -4044,29 +4132,14 @@ make_fdh (struct bfd_link_info *info,
return fdh;
}
-/* Hacks to support old ABI code.
- When making function calls, old ABI code references function entry
- points (dot symbols), while new ABI code references the function
- descriptor symbol. We need to make any combination of reference and
- definition work together, without breaking archive linking.
-
- For a defined function "foo" and an undefined call to "bar":
- An old object defines "foo" and ".foo", references ".bar" (possibly
- "bar" too).
- A new object defines "foo" and references "bar".
-
- A new object thus has no problem with its undefined symbols being
- satisfied by definitions in an old object. On the other hand, the
- old object won't have ".bar" satisfied by a new object. */
-
/* Fix function descriptor symbols defined in .opd sections to be
function type. */
static bfd_boolean
-ppc64_elf_add_symbol_hook (bfd *ibfd,
+ppc64_elf_add_symbol_hook (bfd *ibfd ATTRIBUTE_UNUSED,
struct bfd_link_info *info ATTRIBUTE_UNUSED,
Elf_Internal_Sym *isym,
- const char **name,
+ const char **name ATTRIBUTE_UNUSED,
flagword *flags ATTRIBUTE_UNUSED,
asection **sec,
bfd_vma *value ATTRIBUTE_UNUSED)
@@ -4075,12 +4148,6 @@ ppc64_elf_add_symbol_hook (bfd *ibfd,
&& strcmp (bfd_get_section_name (ibfd, *sec), ".opd") == 0)
isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
- if ((*name)[0] == '.'
- && ELF_ST_BIND (isym->st_info) == STB_GLOBAL
- && ELF_ST_TYPE (isym->st_info) < STT_SECTION
- && is_ppc64_elf_target (ibfd->xvec))
- ppc64_elf_tdata (ibfd)->u.has_dotsym = 1;
-
return TRUE;
}
@@ -4129,35 +4196,25 @@ ppc64_elf_archive_symbol_lookup (bfd *abfd,
most restrictive visibility of the function descriptor and the
function entry symbol is used. */
-struct add_symbol_adjust_data
-{
- struct bfd_link_info *info;
- bfd_boolean ok;
-};
-
static bfd_boolean
-add_symbol_adjust (struct elf_link_hash_entry *h, void *inf)
+add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info)
{
- struct add_symbol_adjust_data *data;
struct ppc_link_hash_table *htab;
- struct ppc_link_hash_entry *eh;
struct ppc_link_hash_entry *fdh;
- if (h->root.type == bfd_link_hash_indirect)
+ if (eh->elf.root.type == bfd_link_hash_indirect)
return TRUE;
- if (h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ if (eh->elf.root.type == bfd_link_hash_warning)
+ eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
- if (h->root.root.string[0] != '.')
- return TRUE;
+ if (eh->elf.root.root.string[0] != '.')
+ abort ();
- data = inf;
- htab = ppc_hash_table (data->info);
- eh = (struct ppc_link_hash_entry *) h;
+ htab = ppc_hash_table (info);
fdh = get_fdh (eh, htab);
if (fdh == NULL
- && !data->info->relocatable
+ && !info->relocatable
&& (eh->elf.root.type == bfd_link_hash_undefined
|| eh->elf.root.type == bfd_link_hash_undefweak)
&& eh->elf.ref_regular)
@@ -4165,9 +4222,9 @@ add_symbol_adjust (struct elf_link_hash_entry *h, void *inf)
/* Make an undefweak function descriptor sym, which is enough to
pull in an --as-needed shared lib, but won't cause link
errors. Archives are handled elsewhere. */
- fdh = make_fdh (data->info, eh);
+ fdh = make_fdh (info, eh);
if (fdh == NULL)
- data->ok = FALSE;
+ return FALSE;
else
fdh->elf.ref_regular = 1;
}
@@ -4193,26 +4250,37 @@ add_symbol_adjust (struct elf_link_hash_entry *h, void *inf)
return TRUE;
}
+/* Process list of dot-symbols we made in link_hash_newfunc. */
+
static bfd_boolean
-ppc64_elf_check_directives (bfd *abfd, struct bfd_link_info *info)
+ppc64_elf_check_directives (bfd *ibfd, struct bfd_link_info *info)
{
struct ppc_link_hash_table *htab;
- struct add_symbol_adjust_data data;
-
- if (!is_ppc64_elf_target (abfd->xvec))
- return TRUE;
-
- if (!ppc64_elf_tdata (abfd)->u.has_dotsym)
- return TRUE;
- ppc64_elf_tdata (abfd)->u.deleted_section = NULL;
+ struct ppc_link_hash_entry **p, *eh;
htab = ppc_hash_table (info);
if (!is_ppc64_elf_target (htab->elf.root.creator))
return TRUE;
- data.info = info;
- data.ok = TRUE;
- elf_link_hash_traverse (&htab->elf, add_symbol_adjust, &data);
+ if (is_ppc64_elf_target (ibfd->xvec))
+ {
+ p = &htab->dot_syms;
+ while ((eh = *p) != NULL)
+ {
+ *p = NULL;
+ if (!add_symbol_adjust (eh, info))
+ return FALSE;
+ p = &eh->u.next_dot_sym;
+ }
+ }
+
+ /* Clear the list for non-ppc64 input files. */
+ p = &htab->dot_syms;
+ while ((eh = *p) != NULL)
+ {
+ *p = NULL;
+ p = &eh->u.next_dot_sym;
+ }
/* We need to fix the undefs list for any syms we have twiddled to
undef_weak. */
@@ -4221,7 +4289,18 @@ ppc64_elf_check_directives (bfd *abfd, struct bfd_link_info *info)
bfd_link_repair_undef_list (&htab->elf.root);
htab->twiddled_syms = 0;
}
- return data.ok;
+ return TRUE;
+}
+
+/* Undo hash table changes when an --as-needed input file is determined
+ not to be needed. */
+
+static bfd_boolean
+ppc64_elf_as_needed_cleanup (bfd *ibfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info)
+{
+ ppc_hash_table (info)->dot_syms = NULL;
+ return TRUE;
}
static bfd_boolean
@@ -4358,7 +4437,9 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
opd_sym_map = bfd_zalloc (abfd, amt);
if (opd_sym_map == NULL)
return FALSE;
- ppc64_elf_section_data (sec)->opd.func_sec = opd_sym_map;
+ ppc64_elf_section_data (sec)->u.opd_func_sec = opd_sym_map;
+ BFD_ASSERT (ppc64_elf_section_data (sec)->sec_type == sec_normal);
+ ppc64_elf_section_data (sec)->sec_type = sec_opd;
}
if (htab->sfpr == NULL
@@ -4372,6 +4453,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
struct elf_link_hash_entry *h;
enum elf_ppc64_reloc_type r_type;
int tls_type = 0;
+ struct _ppc64_elf_section_data *ppc64_sec;
r_symndx = ELF64_R_SYM (rel->r_info);
if (r_symndx < symtab_hdr->sh_info)
@@ -4553,7 +4635,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
dest = bfd_section_from_r_symndx (abfd, &htab->sym_sec,
sec, r_symndx);
if (dest != sec)
- htab->has_14bit_branch = 1;
+ ppc64_elf_section_data (sec)->has_14bit_branch = 1;
}
/* Fall through. */
@@ -4569,7 +4651,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|| h == &htab->tls_get_addr_fd->elf)
sec->has_tls_reloc = 1;
else if (htab->tls_get_addr == NULL
- && !strncmp (h->root.root.string, ".__tls_get_addr", 15)
+ && CONST_STRNEQ (h->root.root.string, ".__tls_get_addr")
&& (h->root.root.string[15] == 0
|| h->root.root.string[15] == '@'))
{
@@ -4577,7 +4659,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
sec->has_tls_reloc = 1;
}
else if (htab->tls_get_addr_fd == NULL
- && !strncmp (h->root.root.string, "__tls_get_addr", 14)
+ && CONST_STRNEQ (h->root.root.string, "__tls_get_addr")
&& (h->root.root.string[14] == 0
|| h->root.root.string[14] == '@'))
{
@@ -4624,23 +4706,26 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
rel->r_addend, tls_type))
return FALSE;
- if (ppc64_elf_section_data (sec)->t_symndx == NULL)
+ ppc64_sec = ppc64_elf_section_data (sec);
+ if (ppc64_sec->sec_type != sec_toc)
{
/* One extra to simplify get_tls_mask. */
bfd_size_type amt = sec->size * sizeof (unsigned) / 8 + 1;
- ppc64_elf_section_data (sec)->t_symndx = bfd_zalloc (abfd, amt);
- if (ppc64_elf_section_data (sec)->t_symndx == NULL)
+ ppc64_sec->u.t_symndx = bfd_zalloc (abfd, amt);
+ if (ppc64_sec->u.t_symndx == NULL)
return FALSE;
+ BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
+ ppc64_sec->sec_type = sec_toc;
}
BFD_ASSERT (rel->r_offset % 8 == 0);
- ppc64_elf_section_data (sec)->t_symndx[rel->r_offset / 8] = r_symndx;
+ ppc64_sec->u.t_symndx[rel->r_offset / 8] = r_symndx;
/* Mark the second slot of a GD or LD entry.
-1 to indicate GD and -2 to indicate LD. */
if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_GD))
- ppc64_elf_section_data (sec)->t_symndx[rel->r_offset / 8 + 1] = -1;
+ ppc64_sec->u.t_symndx[rel->r_offset / 8 + 1] = -1;
else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD))
- ppc64_elf_section_data (sec)->t_symndx[rel->r_offset / 8 + 1] = -2;
+ ppc64_sec->u.t_symndx[rel->r_offset / 8 + 1] = -2;
goto dodyn;
case R_PPC64_TPREL16:
@@ -4770,7 +4855,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (name == NULL)
return FALSE;
- if (strncmp (name, ".rela", 5) != 0
+ if (! CONST_STRNEQ (name, ".rela")
|| strcmp (bfd_get_section_name (abfd, sec),
name + 5) != 0)
{
@@ -5714,7 +5799,6 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
{
struct ppc_link_hash_table *htab;
asection *s;
- unsigned int power_of_two;
htab = ppc_hash_table (info);
@@ -5766,6 +5850,10 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
if (!h->non_got_ref)
return TRUE;
+ /* Don't generate a copy reloc for symbols defined in the executable. */
+ if (!h->def_dynamic || !h->ref_regular || h->def_regular)
+ return TRUE;
+
if (ELIMINATE_COPY_RELOCS)
{
struct ppc_link_hash_entry * eh;
@@ -5831,29 +5919,9 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 4)
- power_of_two = 4;
-
- /* Apply the required alignment. */
s = htab->dynbss;
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (htab->elf.dynobj, s))
- {
- if (! bfd_set_section_alignment (htab->elf.dynobj, s, power_of_two))
- return FALSE;
- }
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* If given a function descriptor symbol, hide both the function code
@@ -6036,7 +6104,7 @@ get_tls_mask (char **tls_maskp, unsigned long *toc_symndx,
if ((*tls_maskp != NULL && **tls_maskp != 0)
|| sec == NULL
- || ppc64_elf_section_data (sec)->t_symndx == NULL)
+ || ppc64_elf_section_data (sec)->sec_type != sec_toc)
return 1;
/* Look inside a TOC section too. */
@@ -6049,8 +6117,8 @@ get_tls_mask (char **tls_maskp, unsigned long *toc_symndx,
off = sym->st_value;
off += rel->r_addend;
BFD_ASSERT (off % 8 == 0);
- r_symndx = ppc64_elf_section_data (sec)->t_symndx[off / 8];
- next_r = ppc64_elf_section_data (sec)->t_symndx[off / 8 + 1];
+ r_symndx = ppc64_elf_section_data (sec)->u.t_symndx[off / 8];
+ next_r = ppc64_elf_section_data (sec)->u.t_symndx[off / 8 + 1];
if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
return 0;
if (toc_symndx != NULL)
@@ -6096,13 +6164,13 @@ adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
if (adjust == -1)
{
/* This entry has been deleted. */
- asection *dsec = ppc64_elf_tdata (sym_sec->owner)->u.deleted_section;
+ asection *dsec = ppc64_elf_tdata (sym_sec->owner)->deleted_section;
if (dsec == NULL)
{
for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
if (elf_discarded_section (dsec))
{
- ppc64_elf_tdata (sym_sec->owner)->u.deleted_section = dsec;
+ ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
break;
}
}
@@ -6291,7 +6359,9 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info,
opd_adjust = bfd_alloc (obfd, amt);
if (opd_adjust == NULL)
return FALSE;
- ppc64_elf_section_data (sec)->opd.adjust = opd_adjust;
+ ppc64_elf_section_data (sec)->u.opd_adjust = opd_adjust;
+ BFD_ASSERT (ppc64_elf_section_data (sec)->sec_type == sec_normal);
+ ppc64_elf_section_data (sec)->sec_type = sec_opd;
}
memset (opd_adjust, 0, amt);
@@ -6601,7 +6671,7 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info,
sec->contents = new_contents;
}
- /* Fudge the size too, as this is used later in
+ /* Fudge the header size too, as this is used later in
elf_bfd_final_link if we are emitting relocs. */
elf_section_data (sec)->rel_hdr.sh_size
= sec->reloc_count * elf_section_data (sec)->rel_hdr.sh_entsize;
@@ -7907,7 +7977,7 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
/* Strip this section if we don't need it; see the
comment below. */
}
- else if (strncmp (bfd_get_section_name (dynobj, s), ".rela", 5) == 0)
+ else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
{
if (s->size != 0)
{
@@ -8302,6 +8372,33 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
rl += htab->relbrlt->reloc_count++ * sizeof (Elf64_External_Rela);
bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl);
}
+ else if (info->emitrelocations)
+ {
+ Elf_Internal_Rela *relocs, *r;
+ struct bfd_elf_section_data *elfsec_data;
+
+ elfsec_data = elf_section_data (htab->brlt);
+ relocs = elfsec_data->relocs;
+ if (relocs == NULL)
+ {
+ bfd_size_type relsize;
+ relsize = htab->brlt->reloc_count * sizeof (*relocs);
+ relocs = bfd_alloc (htab->brlt->owner, relsize);
+ if (relocs == NULL)
+ return FALSE;
+ elfsec_data->relocs = relocs;
+ elfsec_data->rel_hdr.sh_size = relsize;
+ elfsec_data->rel_hdr.sh_entsize = 24;
+ htab->brlt->reloc_count = 0;
+ }
+ r = relocs + htab->brlt->reloc_count;
+ htab->brlt->reloc_count += 1;
+ r->r_offset = (br_entry->offset
+ + htab->brlt->output_offset
+ + htab->brlt->output_section->vma);
+ r->r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
+ r->r_addend = off;
+ }
off = (br_entry->offset
+ htab->brlt->output_offset
@@ -8531,6 +8628,11 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
if (htab->relbrlt != NULL)
htab->relbrlt->size += sizeof (Elf64_External_Rela);
+ else if (info->emitrelocations)
+ {
+ htab->brlt->reloc_count += 1;
+ htab->brlt->flags |= SEC_RELOC;
+ }
}
stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
@@ -8538,11 +8640,11 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
if (stub_entry->stub_type != ppc_stub_plt_branch)
size = 28;
}
-
- if (info->emitrelocations
- && (stub_entry->stub_type == ppc_stub_long_branch
- || stub_entry->stub_type == ppc_stub_long_branch_r2off))
- stub_entry->stub_sec->reloc_count += 1;
+ else if (info->emitrelocations)
+ {
+ stub_entry->stub_sec->reloc_count += 1;
+ stub_entry->stub_sec->flags |= SEC_RELOC;
+ }
}
stub_entry->stub_sec->size += size;
@@ -8925,7 +9027,29 @@ group_sections (struct ppc_link_hash_table *htab,
bfd_size_type stub_group_size,
bfd_boolean stubs_always_before_branch)
{
- asection **list = htab->input_list + htab->top_index;
+ asection **list;
+ bfd_size_type stub14_group_size;
+ bfd_boolean suppress_size_errors;
+
+ suppress_size_errors = FALSE;
+ stub14_group_size = stub_group_size;
+ if (stub_group_size == 1)
+ {
+ /* Default values. */
+ if (stubs_always_before_branch)
+ {
+ stub_group_size = 0x1e00000;
+ stub14_group_size = 0x7800;
+ }
+ else
+ {
+ stub_group_size = 0x1c00000;
+ stub14_group_size = 0x7000;
+ }
+ suppress_size_errors = TRUE;
+ }
+
+ list = htab->input_list + htab->top_index;
do
{
asection *tail = *list;
@@ -8939,15 +9063,17 @@ group_sections (struct ppc_link_hash_table *htab,
curr = tail;
total = tail->size;
- big_sec = total > stub_group_size;
- if (big_sec)
+ big_sec = total > (ppc64_elf_section_data (tail)->has_14bit_branch
+ ? stub14_group_size : stub_group_size);
+ if (big_sec && !suppress_size_errors)
(*_bfd_error_handler) (_("%B section %A exceeds stub group size"),
tail->owner, tail);
curr_toc = htab->stub_group[tail->id].toc_off;
while ((prev = PREV_SEC (curr)) != NULL
&& ((total += curr->output_offset - prev->output_offset)
- < stub_group_size)
+ < (ppc64_elf_section_data (prev)->has_14bit_branch
+ ? stub14_group_size : stub_group_size))
&& htab->stub_group[prev->id].toc_off == curr_toc)
curr = prev;
@@ -8979,7 +9105,8 @@ group_sections (struct ppc_link_hash_table *htab,
total = 0;
while (prev != NULL
&& ((total += tail->output_offset - prev->output_offset)
- < stub_group_size)
+ < (ppc64_elf_section_data (prev)->has_14bit_branch
+ ? stub14_group_size : stub_group_size))
&& htab->stub_group[prev->id].toc_off == curr_toc)
{
tail = prev;
@@ -9020,22 +9147,6 @@ ppc64_elf_size_stubs (bfd *output_bfd,
stub_group_size = -group_size;
else
stub_group_size = group_size;
- if (stub_group_size == 1)
- {
- /* Default values. */
- if (stubs_always_before_branch)
- {
- stub_group_size = 0x1e00000;
- if (htab->has_14bit_branch)
- stub_group_size = 0x7800;
- }
- else
- {
- stub_group_size = 0x1c00000;
- if (htab->has_14bit_branch)
- stub_group_size = 0x7000;
- }
- }
group_sections (htab, stub_group_size, stubs_always_before_branch);
@@ -9073,6 +9184,9 @@ ppc64_elf_size_stubs (bfd *output_bfd,
/* If there aren't any relocs, then there's nothing more
to do. */
if ((section->flags & SEC_RELOC) == 0
+ || (section->flags & SEC_ALLOC) == 0
+ || (section->flags & SEC_LOAD) == 0
+ || (section->flags & SEC_CODE) == 0
|| section->reloc_count == 0)
continue;
@@ -9322,9 +9436,12 @@ ppc64_elf_size_stubs (bfd *output_bfd,
stub_sec->rawsize = stub_sec->size;
stub_sec->size = 0;
stub_sec->reloc_count = 0;
+ stub_sec->flags &= ~SEC_RELOC;
}
htab->brlt->size = 0;
+ htab->brlt->reloc_count = 0;
+ htab->brlt->flags &= ~SEC_RELOC;
if (htab->relbrlt != NULL)
htab->relbrlt->size = 0;
@@ -9442,24 +9559,12 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
stub_sec->size = 0;
}
- if (htab->plt != NULL)
+ if (htab->glink != NULL && htab->glink->size != 0)
{
unsigned int indx;
bfd_vma plt0;
/* Build the .glink plt call stub. */
- plt0 = (htab->plt->output_section->vma
- + htab->plt->output_offset
- - (htab->glink->output_section->vma
- + htab->glink->output_offset
- + GLINK_CALL_STUB_SIZE));
- if (plt0 + 0x80008000 > 0xffffffff)
- {
- (*_bfd_error_handler) (_(".glink and .plt too far apart"));
- bfd_set_error (bfd_error_bad_value);
- return FALSE;
- }
-
if (htab->emit_stub_syms)
{
struct elf_link_hash_entry *h;
@@ -9470,7 +9575,7 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
{
h->root.type = bfd_link_hash_defined;
h->root.u.def.section = htab->glink;
- h->root.u.def.value = 0;
+ h->root.u.def.value = 8;
h->ref_regular = 1;
h->def_regular = 1;
h->ref_regular_nonweak = 1;
@@ -9479,29 +9584,26 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
}
}
p = htab->glink->contents;
- bfd_put_32 (htab->glink->owner, MFCTR_R12, p);
- p += 4;
- bfd_put_32 (htab->glink->owner, SLDI_R11_R0_3, p);
- p += 4;
- bfd_put_32 (htab->glink->owner, ADDIC_R2_R0_32K, p);
- p += 4;
- bfd_put_32 (htab->glink->owner, SUB_R12_R12_R11, p);
- p += 4;
- bfd_put_32 (htab->glink->owner, SRADI_R2_R2_63, p);
- p += 4;
- bfd_put_32 (htab->glink->owner, SLDI_R11_R0_2, p);
+ plt0 = (htab->plt->output_section->vma
+ + htab->plt->output_offset
+ - (htab->glink->output_section->vma
+ + htab->glink->output_offset
+ + 16));
+ bfd_put_64 (htab->glink->owner, plt0, p);
+ p += 8;
+ bfd_put_32 (htab->glink->owner, MFLR_R12, p);
p += 4;
- bfd_put_32 (htab->glink->owner, AND_R2_R2_R11, p);
+ bfd_put_32 (htab->glink->owner, BCL_20_31, p);
p += 4;
- bfd_put_32 (htab->glink->owner, SUB_R12_R12_R11, p);
+ bfd_put_32 (htab->glink->owner, MFLR_R11, p);
p += 4;
- bfd_put_32 (htab->glink->owner, ADD_R12_R12_R2, p);
+ bfd_put_32 (htab->glink->owner, LD_R2_M16R11, p);
p += 4;
- bfd_put_32 (htab->glink->owner, ADDIS_R12_R12 | PPC_HA (plt0), p);
+ bfd_put_32 (htab->glink->owner, MTLR_R12, p);
p += 4;
- bfd_put_32 (htab->glink->owner, LD_R11_0R12 | PPC_LO (plt0), p);
+ bfd_put_32 (htab->glink->owner, ADD_R12_R2_R11, p);
p += 4;
- bfd_put_32 (htab->glink->owner, ADDI_R12_R12 | PPC_LO (plt0), p);
+ bfd_put_32 (htab->glink->owner, LD_R11_0R12, p);
p += 4;
bfd_put_32 (htab->glink->owner, LD_R2_0R12 | 8, p);
p += 4;
@@ -9511,6 +9613,11 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
p += 4;
bfd_put_32 (htab->glink->owner, BCTR, p);
p += 4;
+ while (p - htab->glink->contents < GLINK_CALL_STUB_SIZE)
+ {
+ bfd_put_32 (htab->glink->owner, NOP, p);
+ p += 4;
+ }
/* Build the .glink lazy link call stubs. */
indx = 0;
@@ -9529,7 +9636,7 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
p += 4;
}
bfd_put_32 (htab->glink->owner,
- B_DOT | ((htab->glink->contents - p) & 0x3fffffc), p);
+ B_DOT | ((htab->glink->contents - p + 8) & 0x3fffffc), p);
indx++;
p += 4;
}
@@ -9554,6 +9661,9 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
/* Build the stubs as directed by the stub hash table. */
bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info);
+ if (htab->relbrlt != NULL)
+ htab->relbrlt->reloc_count = 0;
+
for (stub_sec = htab->stub_bfd->sections;
stub_sec != NULL;
stub_sec = stub_sec->next)
@@ -9695,6 +9805,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
bfd_boolean is_opd;
/* Disabled until we sort out how ld should choose 'y' vs 'at'. */
bfd_boolean is_power4 = FALSE;
+ bfd_vma d_offset = (bfd_big_endian (output_bfd) ? 2 : 0);
/* Initialize howto table if needed. */
if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
@@ -9710,7 +9821,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
TOCstart = elf_gp (output_bfd);
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
- is_opd = ppc64_elf_section_data (input_section)->opd.adjust != NULL;
+ is_opd = ppc64_elf_section_data (input_section)->sec_type == sec_opd;
rel = relocs;
relend = relocs + input_section->reloc_count;
@@ -9785,13 +9896,9 @@ ppc64_elf_relocate_section (bfd *output_bfd,
relocation += adjust;
}
}
- if (info->relocatable)
- continue;
}
else
{
- if (info->relocatable)
- continue;
RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
r_symndx, symtab_hdr, sym_hashes,
h_elf, sec, relocation,
@@ -9801,6 +9908,21 @@ ppc64_elf_relocate_section (bfd *output_bfd,
}
h = (struct ppc_link_hash_entry *) h_elf;
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (ppc64_elf_howto_table[r_type], input_bfd,
+ contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
/* TLS optimizations. Replace instruction sequences and relocs
based on information we collected in tls_optimize. We edit
RELOCS so that --emit-relocs will output something sensible
@@ -9924,10 +10046,10 @@ ppc64_elf_relocate_section (bfd *output_bfd,
&& (tls_mask & TLS_TPREL) == 0)
{
toctprel:
- insn = bfd_get_32 (output_bfd, contents + rel->r_offset - 2);
+ insn = bfd_get_32 (output_bfd, contents + rel->r_offset - d_offset);
insn &= 31 << 21;
insn |= 0x3c0d0000; /* addis 0,13,0 */
- bfd_put_32 (output_bfd, insn, contents + rel->r_offset - 2);
+ bfd_put_32 (output_bfd, insn, contents + rel->r_offset - d_offset);
r_type = R_PPC64_TPREL16_HA;
if (toc_symndx != 0)
{
@@ -9979,8 +10101,8 @@ ppc64_elf_relocate_section (bfd *output_bfd,
insn |= rtra;
bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
/* Was PPC64_TLS which sits on insn boundary, now
- PPC64_TPREL16_LO which is at insn+2. */
- rel->r_offset += 2;
+ PPC64_TPREL16_LO which is at low-order half-word. */
+ rel->r_offset += d_offset;
r_type = R_PPC64_TPREL16_LO;
if (toc_symndx != 0)
{
@@ -10013,7 +10135,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
else
{
bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
- rel->r_offset -= 2;
+ rel->r_offset -= d_offset;
r_type = R_PPC64_NONE;
}
rel->r_info = ELF64_R_INFO (r_symndx, r_type);
@@ -10062,7 +10184,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
/* OK, it checks out. Replace the call. */
offset = rel[1].r_offset;
insn1 = bfd_get_32 (output_bfd,
- contents + rel->r_offset - 2);
+ contents + rel->r_offset - d_offset);
insn3 = bfd_get_32 (output_bfd,
contents + offset + 4);
if ((tls_mask & tls_gd) != 0)
@@ -10097,7 +10219,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
rel->r_info = ELF64_R_INFO (r_symndx, r_type);
rel[1].r_info = ELF64_R_INFO (r_symndx,
R_PPC64_TPREL16_LO);
- rel[1].r_offset += 2;
+ rel[1].r_offset += d_offset;
}
if (insn3 == NOP
|| insn3 == CROR_151515 || insn3 == CROR_313131)
@@ -10106,7 +10228,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
insn2 = NOP;
rel[1].r_offset += 4;
}
- bfd_put_32 (output_bfd, insn1, contents + rel->r_offset - 2);
+ bfd_put_32 (output_bfd, insn1, contents + rel->r_offset - d_offset);
bfd_put_32 (output_bfd, insn2, contents + offset);
bfd_put_32 (output_bfd, insn3, contents + offset + 4);
if (tls_gd == 0 || toc_symndx != 0)
@@ -10620,7 +10742,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
relocation += htab->stub_group[sec->id].toc_off;
else
unresolved_reloc = TRUE;
- goto dodyn2;
+ goto dodyn;
/* TOC16 relocs. We want the offset relative to the TOC base,
which is the address of the start of the TOC plus 0x8000.
@@ -10720,15 +10842,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
case R_PPC64_UADDR16:
case R_PPC64_UADDR32:
case R_PPC64_UADDR64:
- /* r_symndx will be zero only for relocs against symbols
- from removed linkonce sections, or sections discarded by
- a linker script. */
dodyn:
- if (r_symndx == 0)
- break;
- /* Fall thru. */
-
- dodyn2:
if ((input_section->flags & SEC_ALLOC) == 0)
break;
@@ -10838,6 +10952,17 @@ ppc64_elf_relocate_section (bfd *output_bfd,
osec = sec->output_section;
indx = elf_section_data (osec)->dynindx;
+ if (indx == 0)
+ {
+ if ((osec->flags & SEC_READONLY) == 0
+ && htab->elf.data_index_section != NULL)
+ osec = htab->elf.data_index_section;
+ else
+ osec = htab->elf.text_index_section;
+ indx = elf_section_data (osec)->dynindx;
+ }
+ BFD_ASSERT (indx != 0);
+
/* We are turning this relocation into one
against a section symbol, so subtract out
the output section's address but not the
@@ -10926,17 +11051,10 @@ ppc64_elf_relocate_section (bfd *output_bfd,
case R_PPC64_ADDR16_HA:
case R_PPC64_ADDR16_HIGHERA:
case R_PPC64_ADDR16_HIGHESTA:
- case R_PPC64_GOT16_HA:
- case R_PPC64_PLTGOT16_HA:
- case R_PPC64_PLT16_HA:
case R_PPC64_TOC16_HA:
case R_PPC64_SECTOFF_HA:
case R_PPC64_TPREL16_HA:
case R_PPC64_DTPREL16_HA:
- case R_PPC64_GOT_TLSGD16_HA:
- case R_PPC64_GOT_TLSLD16_HA:
- case R_PPC64_GOT_TPREL16_HA:
- case R_PPC64_GOT_DTPREL16_HA:
case R_PPC64_TPREL16_HIGHER:
case R_PPC64_TPREL16_HIGHERA:
case R_PPC64_TPREL16_HIGHEST:
@@ -10949,10 +11067,20 @@ ppc64_elf_relocate_section (bfd *output_bfd,
that's not actually defined anywhere. In that case,
'sec' would be NULL, and we should leave the symbol
alone (it will be set to zero elsewhere in the link). */
- if (sec != NULL)
- /* Add 0x10000 if sign bit in 0:15 is set.
- Bits 0:15 are not used. */
- addend += 0x8000;
+ if (sec == NULL)
+ break;
+ /* Fall thru */
+
+ case R_PPC64_GOT16_HA:
+ case R_PPC64_PLTGOT16_HA:
+ case R_PPC64_PLT16_HA:
+ case R_PPC64_GOT_TLSGD16_HA:
+ case R_PPC64_GOT_TLSLD16_HA:
+ case R_PPC64_GOT_TPREL16_HA:
+ case R_PPC64_GOT_DTPREL16_HA:
+ /* Add 0x10000 if sign bit in 0:15 is set.
+ Bits 0:15 are not used. */
+ addend += 0x8000;
break;
case R_PPC64_ADDR16_DS:
@@ -11125,13 +11253,11 @@ ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
Elf_Internal_Sym *sym)
{
struct ppc_link_hash_table *htab;
- bfd *dynobj;
struct plt_entry *ent;
Elf_Internal_Rela rela;
bfd_byte *loc;
htab = ppc_hash_table (info);
- dynobj = htab->elf.dynobj;
for (ent = h->plt.plist; ent != NULL; ent = ent->next)
if (ent->plt.offset != (bfd_vma) -1)
@@ -11328,6 +11454,17 @@ ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
= PLT_ENTRY_SIZE;
}
+ /* brlt is SEC_LINKER_CREATED, so we need to write out relocs for
+ brlt ourselves if emitrelocations. */
+ if (htab->brlt != NULL
+ && htab->brlt->reloc_count != 0
+ && !_bfd_elf_link_output_relocs (output_bfd,
+ htab->brlt,
+ &elf_section_data (htab->brlt)->rel_hdr,
+ elf_section_data (htab->brlt)->relocs,
+ NULL))
+ return FALSE;
+
/* We need to handle writing out multiple GOT sections ourselves,
since we didn't add them to DYNOBJ. We know dynobj is the first
bfd. */
diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
index 1fe0c6ca915c..47fbff6bed9e 100644
--- a/bfd/elf64-s390.c
+++ b/bfd/elf64-s390.c
@@ -1,5 +1,5 @@
/* IBM S/390-specific support for 64-bit ELF
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed Martin Schwidefsky (schwidefsky@de.ibm.com).
@@ -20,8 +20,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -46,12 +46,6 @@ static void elf_s390_copy_indirect_symbol
static bfd_boolean elf_s390_check_relocs
PARAMS ((bfd *, struct bfd_link_info *, asection *,
const Elf_Internal_Rela *));
-static asection *elf_s390_gc_mark_hook
- PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *,
- struct elf_link_hash_entry *, Elf_Internal_Sym *));
-static bfd_boolean elf_s390_gc_sweep_hook
- PARAMS ((bfd *, struct bfd_link_info *, asection *,
- const Elf_Internal_Rela *));
struct elf_s390_link_hash_entry;
static void elf_s390_adjust_gotplt
PARAMS ((struct elf_s390_link_hash_entry *));
@@ -73,8 +67,6 @@ static enum elf_reloc_type_class elf_s390_reloc_type_class
PARAMS ((const Elf_Internal_Rela *));
static bfd_boolean elf_s390_finish_dynamic_sections
PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean elf_s390_mkobject
- PARAMS ((bfd *));
static bfd_boolean elf_s390_object_p
PARAMS ((bfd *));
static int elf_s390_tls_transition
@@ -364,6 +356,27 @@ elf_s390_reloc_type_lookup (abfd, code)
return 0;
}
+static reloc_howto_type *
+elf_s390_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (elf_howto_table) / sizeof (elf_howto_table[0]);
+ i++)
+ if (elf_howto_table[i].name != NULL
+ && strcasecmp (elf_howto_table[i].name, r_name) == 0)
+ return &elf_howto_table[i];
+
+ if (strcasecmp (elf64_s390_vtinherit_howto.name, r_name) == 0)
+ return &elf64_s390_vtinherit_howto;
+ if (strcasecmp (elf64_s390_vtentry_howto.name, r_name) == 0)
+ return &elf64_s390_vtentry_howto;
+
+ return NULL;
+}
+
/* We need to use ELF64_R_TYPE so we have our own copy of this function,
and elf64-s390.c has its own copy. */
@@ -631,14 +644,16 @@ struct elf_s390_obj_tdata
(elf_s390_tdata (abfd)->local_got_tls_type)
static bfd_boolean
-elf_s390_mkobject (abfd)
- bfd *abfd;
+elf_s390_mkobject (bfd *abfd)
{
- bfd_size_type amt = sizeof (struct elf_s390_obj_tdata);
- abfd->tdata.any = bfd_zalloc (abfd, amt);
if (abfd->tdata.any == NULL)
- return FALSE;
- return TRUE;
+ {
+ bfd_size_type amt = sizeof (struct elf_s390_obj_tdata);
+ abfd->tdata.any = bfd_zalloc (abfd, amt);
+ if (abfd->tdata.any == NULL)
+ return FALSE;
+ }
+ return bfd_elf_mkobject (abfd);
}
static bfd_boolean
@@ -1238,7 +1253,7 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
if (name == NULL)
return FALSE;
- if (strncmp (name, ".rela", 5) != 0
+ if (! CONST_STRNEQ (name, ".rela")
|| strcmp (bfd_get_section_name (abfd, sec),
name + 5) != 0)
{
@@ -1345,50 +1360,30 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
relocation. */
static asection *
-elf_s390_gc_mark_hook (sec, info, rel, h, sym)
- asection *sec;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
- Elf_Internal_Rela *rel;
- struct elf_link_hash_entry *h;
- Elf_Internal_Sym *sym;
+elf_s390_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info,
+ Elf_Internal_Rela *rel,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF64_R_TYPE (rel->r_info))
- {
- case R_390_GNU_VTINHERIT:
- case R_390_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
+ switch (ELF64_R_TYPE (rel->r_info))
+ {
+ case R_390_GNU_VTINHERIT:
+ case R_390_GNU_VTENTRY:
+ return NULL;
+ }
+
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update the got entry reference counts for the section being removed. */
static bfd_boolean
-elf_s390_gc_sweep_hook (abfd, info, sec, relocs)
- bfd *abfd;
- struct bfd_link_info *info;
- asection *sec;
- const Elf_Internal_Rela *relocs;
+elf_s390_gc_sweep_hook (bfd *abfd,
+ struct bfd_link_info *info,
+ asection *sec,
+ const Elf_Internal_Rela *relocs)
{
Elf_Internal_Shdr *symtab_hdr;
struct elf_link_hash_entry **sym_hashes;
@@ -1562,7 +1557,6 @@ elf_s390_adjust_dynamic_symbol (info, h)
{
struct elf_s390_link_hash_table *htab;
asection *s;
- unsigned int power_of_two;
/* If this is a function, put it in the procedure linkage table. We
will fill in the contents of the procedure linkage table later
@@ -1683,29 +1677,9 @@ elf_s390_adjust_dynamic_symbol (info, h)
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 3)
- power_of_two = 3;
-
- /* Apply the required alignment. */
s = htab->sdynbss;
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (htab->elf.dynobj, s))
- {
- if (! bfd_set_section_alignment (htab->elf.dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Allocate space in .plt, .got and associated reloc sections for
@@ -2098,7 +2072,7 @@ elf_s390_size_dynamic_sections (output_bfd, info)
/* Strip this section if we don't need it; see the
comment below. */
}
- else if (strncmp (bfd_get_section_name (dynobj, s), ".rela", 5) == 0)
+ else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
{
if (s->size != 0 && s != htab->srelplt)
relocs = TRUE;
@@ -2240,6 +2214,7 @@ invalid_tls_insn (input_bfd, input_section, rel)
input_section,
(long) rel->r_offset,
howto->name);
+ bfd_set_error (bfd_error_bad_value);
}
/* Relocate a 390 ELF section. */
@@ -2263,9 +2238,6 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
- if (info->relocatable)
- return TRUE;
-
htab = elf_s390_hash_table (info);
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -2300,7 +2272,6 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
howto = elf_howto_table + r_type;
r_symndx = ELF64_R_SYM (rel->r_info);
- /* This is a final link. */
h = NULL;
sym = NULL;
sec = NULL;
@@ -2321,6 +2292,20 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
unresolved_reloc, warned);
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
switch (r_type)
{
case R_390_GOTPLT12:
@@ -2544,11 +2529,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
case R_390_PC32:
case R_390_PC32DBL:
case R_390_PC64:
- /* r_symndx will be zero only for relocs against symbols
- from removed linkonce sections, or sections discarded by
- a linker script. */
- if (r_symndx == 0
- || (input_section->flags & SEC_ALLOC) == 0)
+ if ((input_section->flags & SEC_ALLOC) == 0)
break;
if ((info->shared
@@ -2636,14 +2617,19 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
osec = sec->output_section;
sindx = elf_section_data (osec)->dynindx;
- BFD_ASSERT (sindx > 0);
+
+ if (sindx == 0)
+ {
+ osec = htab->elf.text_index_section;
+ sindx = elf_section_data (osec)->dynindx;
+ }
+ BFD_ASSERT (sindx != 0);
/* We are turning this relocation into one
against a section symbol, so subtract out
the output section's address but not the
offset of the input section in the output
section. */
-
outrel.r_addend -= osec->vma;
}
outrel.r_info = ELF64_R_INFO (sindx, r_type);
@@ -2908,7 +2894,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
continue;
case R_390_TLS_LDO64:
- if (info->shared || (input_section->flags & SEC_CODE) == 0)
+ if (info->shared)
relocation -= dtpoff_base (info);
else
/* When converting LDO to LE, we must negate. */
@@ -3462,6 +3448,7 @@ const struct elf_size_info s390_elf64_size_info =
#define bfd_elf64_bfd_is_local_label_name elf_s390_is_local_label_name
#define bfd_elf64_bfd_link_hash_table_create elf_s390_link_hash_table_create
#define bfd_elf64_bfd_reloc_type_lookup elf_s390_reloc_type_lookup
+#define bfd_elf64_bfd_reloc_name_lookup elf_s390_reloc_name_lookup
#define elf_backend_adjust_dynamic_symbol elf_s390_adjust_dynamic_symbol
#define elf_backend_check_relocs elf_s390_check_relocs
@@ -3474,6 +3461,7 @@ const struct elf_size_info s390_elf64_size_info =
#define elf_backend_reloc_type_class elf_s390_reloc_type_class
#define elf_backend_relocate_section elf_s390_relocate_section
#define elf_backend_size_dynamic_sections elf_s390_size_dynamic_sections
+#define elf_backend_init_index_section _bfd_elf_init_1_index_section
#define elf_backend_reloc_type_class elf_s390_reloc_type_class
#define elf_backend_plt_sym_val elf_s390_plt_sym_val
diff --git a/bfd/elf64-sh64.c b/bfd/elf64-sh64.c
index 4d6d8d5645fa..6d343b78bff8 100644
--- a/bfd/elf64-sh64.c
+++ b/bfd/elf64-sh64.c
@@ -1,5 +1,5 @@
/* SuperH SH64-specific support for 64-bit ELF
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -20,8 +20,8 @@
#define SH64_ELF64
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -1392,6 +1392,22 @@ sh_elf64_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+sh_elf64_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (sh_elf64_howto_table) / sizeof (sh_elf64_howto_table[0]);
+ i++)
+ if (sh_elf64_howto_table[i].name != NULL
+ && strcasecmp (sh_elf64_howto_table[i].name, r_name) == 0)
+ return &sh_elf64_howto_table[i];
+
+ return NULL;
+}
+
/* Given an ELF reloc, fill in the howto field of a relent.
See sh_elf_info_to_howto in elf32-sh.c for the original. */
@@ -1487,10 +1503,10 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
howto = sh_elf64_howto_table + r_type;
- /* This is a final link. */
h = NULL;
sym = NULL;
sec = NULL;
+ relocation = 0;
if (r_symndx < symtab_hdr->sh_info)
{
sym = local_syms + r_symndx;
@@ -1509,13 +1525,15 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
_("Unexpected STO_SH5_ISA32 on local symbol is not handled"),
input_bfd, input_section, rel->r_offset));
- if (info->relocatable)
+ if (sec != NULL && elf_discarded_section (sec))
+ /* Handled below. */
+ ;
+ else if (info->relocatable)
{
/* This is a relocatable link. We don't have to change
anything, unless the reloc is against a section symbol,
in which case we have to adjust according to where the
section symbol winds up in the output section. */
- sym = local_syms + r_symndx;
if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
goto final_link_relocate;
@@ -1554,12 +1572,6 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
{
/* ??? Could we use the RELOC_FOR_GLOBAL_SYMBOL macro here ? */
- /* Section symbols are never (?) placed in the hash table, so
- we can just ignore hash relocations when creating a
- relocatable object file. */
- if (info->relocatable)
- continue;
-
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
while (h->root.type == bfd_link_hash_indirect
|| h->root.type == bfd_link_hash_warning)
@@ -1619,8 +1631,17 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
|| (sec->output_section == NULL
&& ((input_section->flags & SEC_DEBUGGING) != 0
&& h->def_dynamic)))
- relocation = 0;
- else if (sec->output_section == NULL)
+ ;
+ else if (sec->output_section != NULL)
+ relocation = ((h->root.u.def.value
+ + sec->output_section->vma
+ + sec->output_offset)
+ /* A STO_SH5_ISA32 causes a "bitor 1" to the
+ symbol value, unless we've seen
+ STT_DATALABEL on the way to it. */
+ | ((h->other & STO_SH5_ISA32) != 0
+ && ! seen_stt_datalabel));
+ else if (!info->relocatable)
{
(*_bfd_error_handler)
(_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
@@ -1629,24 +1650,14 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
(long) rel->r_offset,
howto->name,
h->root.root.string);
- relocation = 0;
}
- else
- relocation = ((h->root.u.def.value
- + sec->output_section->vma
- + sec->output_offset)
- /* A STO_SH5_ISA32 causes a "bitor 1" to the
- symbol value, unless we've seen
- STT_DATALABEL on the way to it. */
- | ((h->other & STO_SH5_ISA32) != 0
- && ! seen_stt_datalabel));
}
else if (h->root.type == bfd_link_hash_undefweak)
- relocation = 0;
+ ;
else if (info->unresolved_syms_in_objects == RM_IGNORE
&& ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
- relocation = 0;
- else
+ ;
+ else if (!info->relocatable)
{
if (! ((*info->callbacks->undefined_symbol)
(info, h->root.root.string, input_bfd,
@@ -1654,10 +1665,23 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
(info->unresolved_syms_in_objects == RM_GENERATE_ERROR
|| ELF_ST_VISIBILITY (h->other)))))
return FALSE;
- relocation = 0;
}
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
disp = (relocation
- input_section->output_section->vma
- input_section->output_offset
@@ -1709,7 +1733,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (input_bfd,
input_section),
name + 5) == 0);
@@ -2292,6 +2316,9 @@ sh_elf64_copy_private_data_internal (bfd *ibfd, bfd *obfd)
}
}
+ /* Copy object attributes. */
+ _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
return sh_elf64_set_private_flags (obfd, elf_elfheader (ibfd)->e_flags);
}
@@ -2366,53 +2393,20 @@ sh_elf64_merge_private_data (bfd *ibfd, bfd *obfd)
static asection *
sh_elf64_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
Elf_Internal_Rela *rel,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF64_R_TYPE (rel->r_info))
- {
- case R_SH_GNU_VTINHERIT:
- case R_SH_GNU_VTENTRY:
- break;
-
- default:
- while (h->root.type == bfd_link_hash_indirect
- && h->root.u.i.link)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
-}
-
-/* Update the got entry reference counts for the section being removed. */
+ switch (ELF64_R_TYPE (rel->r_info))
+ {
+ case R_SH_GNU_VTINHERIT:
+ case R_SH_GNU_VTENTRY:
+ return NULL;
+ }
-static bfd_boolean
-sh_elf64_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
- asection *sec ATTRIBUTE_UNUSED,
- const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
-{
- /* No got and plt entries for 64-bit SH at present. */
- return TRUE;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Look through the relocs for a section during the first phase.
@@ -2731,7 +2725,7 @@ sh_elf64_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
name + 5) == 0);
@@ -3333,7 +3327,6 @@ sh64_elf64_adjust_dynamic_symbol (struct bfd_link_info *info,
{
bfd *dynobj;
asection *s;
- unsigned int power_of_two;
dynobj = elf_hash_table (info)->dynobj;
@@ -3473,28 +3466,7 @@ sh64_elf64_adjust_dynamic_symbol (struct bfd_link_info *info,
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 3)
- power_of_two = 3;
-
- /* Apply the required alignment. */
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (dynobj, s))
- {
- if (! bfd_set_section_alignment (dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* This function is called via sh_elf_link_hash_traverse if we are
@@ -3591,7 +3563,7 @@ sh64_elf64_size_dynamic_sections (bfd *output_bfd,
/* Remember whether there is a PLT. */
plt = s->size != 0;
}
- else if (strncmp (name, ".rela", 5) == 0)
+ else if (CONST_STRNEQ (name, ".rela"))
{
if (s->size != 0)
{
@@ -3624,7 +3596,7 @@ sh64_elf64_size_dynamic_sections (bfd *output_bfd,
s->reloc_count = 0;
}
}
- else if (strncmp (name, ".got", 4) != 0
+ else if (! CONST_STRNEQ (name, ".got")
&& strcmp (name, ".dynbss") != 0)
{
/* It's not one of our sections, so don't allocate space. */
@@ -4053,9 +4025,9 @@ static void
sh64_elf64_merge_symbol_attribute (struct elf_link_hash_entry *h,
const Elf_Internal_Sym *isym,
bfd_boolean definition,
- bfd_boolean dynamic)
+ bfd_boolean dynamic ATTRIBUTE_UNUSED)
{
- if (isym->st_other != 0 && dynamic)
+ if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
{
unsigned char other;
@@ -4070,8 +4042,8 @@ sh64_elf64_merge_symbol_attribute (struct elf_link_hash_entry *h,
static const struct bfd_elf_special_section sh64_elf64_special_sections[]=
{
- { ".cranges", 8, 0, SHT_PROGBITS, 0 },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".cranges"), 0, SHT_PROGBITS, 0 },
+ { NULL, 0, 0, 0, 0 }
};
#define TARGET_BIG_SYM bfd_elf64_sh64_vec
@@ -4085,6 +4057,8 @@ static const struct bfd_elf_special_section sh64_elf64_special_sections[]=
#define elf_symbol_leading_char '_'
#define bfd_elf64_bfd_reloc_type_lookup sh_elf64_reloc_type_lookup
+#define bfd_elf64_bfd_reloc_name_lookup \
+ sh_elf64_reloc_name_lookup
#define elf_info_to_howto sh_elf64_info_to_howto
/* Note: there's no relaxation at present. */
@@ -4102,7 +4076,6 @@ static const struct bfd_elf_special_section sh64_elf64_special_sections[]=
#define elf_backend_fake_sections sh64_elf64_fake_sections
#define elf_backend_gc_mark_hook sh_elf64_gc_mark_hook
-#define elf_backend_gc_sweep_hook sh_elf64_gc_sweep_hook
#define elf_backend_check_relocs sh_elf64_check_relocs
#define elf_backend_can_gc_sections 1
@@ -4128,6 +4101,8 @@ static const struct bfd_elf_special_section sh64_elf64_special_sections[]=
sh64_elf64_adjust_dynamic_symbol
#define elf_backend_size_dynamic_sections \
sh64_elf64_size_dynamic_sections
+#define elf_backend_omit_section_dynsym \
+ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
#define elf_backend_finish_dynamic_symbol \
sh64_elf64_finish_dynamic_symbol
#define elf_backend_finish_dynamic_sections \
@@ -4168,6 +4143,7 @@ static const struct bfd_elf_special_section sh64_elf64_special_sections[]=
#define TARGET_LITTLE_SYM bfd_elf64_sh64lin_vec
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf64-sh64-linux"
+#undef elf64_bed
+#define elf64_bed elf64_sh64_linux_bed
-#define INCLUDED_TARGET_FILE
#include "elf64-target.h"
diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c
index dd1c302174af..2adddd994463 100644
--- a/bfd/elf64-sparc.c
+++ b/bfd/elf64-sparc.c
@@ -1,6 +1,6 @@
/* SPARC-specific support for 64-bit ELF
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/sparc.h"
@@ -814,6 +814,7 @@ const struct elf_size_info elf64_sparc_size_info =
#define TARGET_BIG_NAME "elf64-sparc"
#define ELF_ARCH bfd_arch_sparc
#define ELF_MAXPAGESIZE 0x100000
+#define ELF_COMMONPAGESIZE 0x2000
/* This is the official ABI value. */
#define ELF_MACHINE_CODE EM_SPARCV9
@@ -858,6 +859,8 @@ const struct elf_size_info elf64_sparc_size_info =
_bfd_sparc_elf_copy_indirect_symbol
#define bfd_elf64_bfd_reloc_type_lookup \
_bfd_sparc_elf_reloc_type_lookup
+#define bfd_elf64_bfd_reloc_name_lookup \
+ _bfd_sparc_elf_reloc_name_lookup
#define bfd_elf64_bfd_relax_section \
_bfd_sparc_elf_relax_section
#define bfd_elf64_new_section_hook \
@@ -888,6 +891,8 @@ const struct elf_size_info elf64_sparc_size_info =
_bfd_sparc_elf_gc_mark_hook
#define elf_backend_gc_sweep_hook \
_bfd_sparc_elf_gc_sweep_hook
+#define elf_backend_init_index_section \
+ _bfd_elf_init_1_index_section
#define elf_backend_can_gc_sections 1
#define elf_backend_can_refcount 1
@@ -901,3 +906,19 @@ const struct elf_size_info elf64_sparc_size_info =
#define elf_backend_plt_alignment 8
#include "elf64-target.h"
+
+/* FreeBSD support */
+#undef TARGET_BIG_SYM
+#define TARGET_BIG_SYM bfd_elf64_sparc_freebsd_vec
+#undef TARGET_BIG_NAME
+#define TARGET_BIG_NAME "elf64-sparc-freebsd"
+#undef ELF_OSABI
+#define ELF_OSABI ELFOSABI_FREEBSD
+
+#undef elf_backend_post_process_headers
+#define elf_backend_post_process_headers _bfd_elf_set_osabi
+#undef elf64_bed
+#define elf64_bed elf64_sparc_fbsd_bed
+
+#include "elf64-target.h"
+
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 9befd69c5df6..0ee75ce9947a 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -1,5 +1,5 @@
/* X86-64 specific support for 64-bit ELF
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by Jan Hubicka <jh@suse.cz>.
@@ -19,8 +19,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
@@ -246,6 +246,23 @@ elf64_x86_64_reloc_type_lookup (bfd *abfd,
return 0;
}
+static reloc_howto_type *
+elf64_x86_64_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (x86_64_elf_howto_table)
+ / sizeof (x86_64_elf_howto_table[0]));
+ i++)
+ if (x86_64_elf_howto_table[i].name != NULL
+ && strcasecmp (x86_64_elf_howto_table[i].name, r_name) == 0)
+ return &x86_64_elf_howto_table[i];
+
+ return NULL;
+}
+
/* Given an x86_64 ELF reloc type, fill in an arelent structure. */
static void
@@ -350,7 +367,7 @@ static const bfd_byte elf64_x86_64_plt0_entry[PLT_ENTRY_SIZE] =
{
0xff, 0x35, 8, 0, 0, 0, /* pushq GOT+8(%rip) */
0xff, 0x25, 16, 0, 0, 0, /* jmpq *GOT+16(%rip) */
- 0x90, 0x90, 0x90, 0x90 /* pad out to 16 bytes with nops. */
+ 0x0f, 0x1f, 0x40, 0x00 /* nopl 0(%rax) */
};
/* Subsequent entries in a procedure linkage table look like this. */
@@ -676,11 +693,14 @@ elf64_x86_64_copy_indirect_symbol (struct bfd_link_info *info,
static bfd_boolean
elf64_x86_64_mkobject (bfd *abfd)
{
- bfd_size_type amt = sizeof (struct elf64_x86_64_obj_tdata);
- abfd->tdata.any = bfd_zalloc (abfd, amt);
if (abfd->tdata.any == NULL)
- return FALSE;
- return TRUE;
+ {
+ bfd_size_type amt = sizeof (struct elf64_x86_64_obj_tdata);
+ abfd->tdata.any = bfd_zalloc (abfd, amt);
+ if (abfd->tdata.any == NULL)
+ return FALSE;
+ }
+ return bfd_elf_mkobject (abfd);
}
static bfd_boolean
@@ -994,7 +1014,7 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
&& (r_type != R_X86_64_PC32)
&& (r_type != R_X86_64_PC64))
|| (h != NULL
- && (! info->symbolic
+ && (! SYMBOLIC_BIND (info, h)
|| h->root.type == bfd_link_hash_defweak
|| !h->def_regular))))
|| (ELIMINATE_COPY_RELOCS
@@ -1022,7 +1042,7 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
if (name == NULL)
return FALSE;
- if (strncmp (name, ".rela", 5) != 0
+ if (! CONST_STRNEQ (name, ".rela")
|| strcmp (bfd_get_section_name (abfd, sec),
name + 5) != 0)
{
@@ -1131,38 +1151,20 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
static asection *
elf64_x86_64_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
Elf_Internal_Rela *rel,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- switch (ELF64_R_TYPE (rel->r_info))
- {
- case R_X86_64_GNU_VTINHERIT:
- case R_X86_64_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
+ switch (ELF64_R_TYPE (rel->r_info))
+ {
+ case R_X86_64_GNU_VTINHERIT:
+ case R_X86_64_GNU_VTENTRY:
+ return NULL;
+ }
+
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update the got entry reference counts for the section being removed. */
@@ -1285,7 +1287,6 @@ elf64_x86_64_adjust_dynamic_symbol (struct bfd_link_info *info,
{
struct elf64_x86_64_link_hash_table *htab;
asection *s;
- unsigned int power_of_two;
/* If this is a function, put it in the procedure linkage table. We
will fill in the contents of the procedure linkage table later,
@@ -1403,32 +1404,9 @@ elf64_x86_64_adjust_dynamic_symbol (struct bfd_link_info *info,
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. 16-bytes is the size
- of the largest type that requires hard alignment -- long double. */
- /* FIXME: This is VERY ugly. Should be fixed for all architectures using
- this construct. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 4)
- power_of_two = 4;
-
- /* Apply the required alignment. */
s = htab->sdynbss;
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (htab->elf.dynobj, s))
- {
- if (! bfd_set_section_alignment (htab->elf.dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Allocate space in .plt, .got and associated reloc sections for
@@ -1880,7 +1858,7 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
/* Strip this section if we don't need it; see the
comment below. */
}
- else if (strncmp (bfd_get_section_name (dynobj, s), ".rela", 5) == 0)
+ else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
{
if (s->size != 0 && s != htab->srelplt)
relocs = TRUE;
@@ -2077,9 +2055,6 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
- if (info->relocatable)
- return TRUE;
-
htab = elf64_x86_64_hash_table (info);
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -2135,6 +2110,21 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
h, sec, relocation,
unresolved_reloc, warned);
}
+
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
/* When generating a shared object, the relocations handled here are
copied into the output file to be resolved at run time. */
switch (r_type)
@@ -2382,11 +2372,7 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
/* FIXME: The ABI says the linker should make sure the value is
the same when it's zeroextended to 64 bit. */
- /* r_symndx will be zero only for relocs against symbols
- from removed linkonce sections, or sections discarded by
- a linker script. */
- if (r_symndx == 0
- || (input_section->flags & SEC_ALLOC) == 0)
+ if ((input_section->flags & SEC_ALLOC) == 0)
break;
if ((info->shared
@@ -2442,7 +2428,7 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
|| r_type == R_X86_64_PC32
|| r_type == R_X86_64_PC64
|| !info->shared
- || !info->symbolic
+ || !SYMBOLIC_BIND (info, h)
|| !h->def_regular))
{
outrel.r_info = ELF64_R_INFO (h->dynindx, r_type);
@@ -2472,9 +2458,19 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
{
asection *osec;
+ /* We are turning this relocation into one
+ against a section symbol. It would be
+ proper to subtract the symbol's value,
+ osec->vma, from the emitted reloc addend,
+ but ld.so expects buggy relocs. */
osec = sec->output_section;
sindx = elf_section_data (osec)->dynindx;
- BFD_ASSERT (sindx > 0);
+ if (sindx == 0)
+ {
+ asection *oi = htab->elf.text_index_section;
+ sindx = elf_section_data (oi)->dynindx;
+ }
+ BFD_ASSERT (sindx != 0);
}
outrel.r_info = ELF64_R_INFO (sindx, r_type);
@@ -2614,8 +2610,9 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
val = bfd_get_8 (input_bfd, contents + roff + 1);
BFD_ASSERT (val == 0x10);
- /* Now modify the instruction as appropriate. */
- bfd_put_8 (output_bfd, 0x90, contents + roff);
+ /* Now modify the instruction as appropriate. Use
+ xchg %ax,%ax instead of 2 nops. */
+ bfd_put_8 (output_bfd, 0x66, contents + roff);
bfd_put_8 (output_bfd, 0x90, contents + roff + 1);
continue;
}
@@ -2907,8 +2904,9 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
val = bfd_get_8 (input_bfd, contents + roff + 1);
BFD_ASSERT (val == 0x10);
- /* Now modify the instruction as appropriate. */
- bfd_put_8 (output_bfd, 0x90, contents + roff);
+ /* Now modify the instruction as appropriate. Use
+ xchg %ax,%ax instead of 2 nops. */
+ bfd_put_8 (output_bfd, 0x66, contents + roff);
bfd_put_8 (output_bfd, 0x90, contents + roff + 1);
continue;
@@ -3030,12 +3028,6 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
if (r == bfd_reloc_overflow)
{
- if (h != NULL
- && h->root.type == bfd_link_hash_undefweak
- && howto->pc_relative)
- /* Ignore reloc overflow on branches to undefweak syms. */
- continue;
-
if (! ((*info->callbacks->reloc_overflow)
(info, (h ? &h->root : NULL), name, howto->name,
(bfd_vma) 0, input_bfd, input_section,
@@ -3594,7 +3586,8 @@ elf64_x86_64_merge_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
}
static int
-elf64_x86_64_additional_program_headers (bfd *abfd)
+elf64_x86_64_additional_program_headers (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
asection *s;
int count = 0;
@@ -3614,23 +3607,38 @@ elf64_x86_64_additional_program_headers (bfd *abfd)
return count;
}
+/* Return TRUE if symbol should be hashed in the `.gnu.hash' section. */
+
+static bfd_boolean
+elf64_x86_64_hash_symbol (struct elf_link_hash_entry *h)
+{
+ if (h->plt.offset != (bfd_vma) -1
+ && !h->def_regular
+ && !h->pointer_equality_needed)
+ return FALSE;
+
+ return _bfd_elf_hash_symbol (h);
+}
+
static const struct bfd_elf_special_section
elf64_x86_64_special_sections[]=
{
- { ".gnu.linkonce.lb", 16, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_X86_64_LARGE},
- { ".gnu.linkonce.lr", 16, -2, SHT_PROGBITS, SHF_ALLOC + SHF_X86_64_LARGE},
- { ".gnu.linkonce.lt", 16, -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR + SHF_X86_64_LARGE},
- { ".lbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_X86_64_LARGE},
- { ".ldata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_X86_64_LARGE},
- { ".lrodata", 8, -2, SHT_PROGBITS, SHF_ALLOC + SHF_X86_64_LARGE},
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".gnu.linkonce.lb"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_X86_64_LARGE},
+ { STRING_COMMA_LEN (".gnu.linkonce.lr"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_X86_64_LARGE},
+ { STRING_COMMA_LEN (".gnu.linkonce.lt"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR + SHF_X86_64_LARGE},
+ { STRING_COMMA_LEN (".lbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_X86_64_LARGE},
+ { STRING_COMMA_LEN (".ldata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_X86_64_LARGE},
+ { STRING_COMMA_LEN (".lrodata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_X86_64_LARGE},
+ { NULL, 0, 0, 0, 0 }
};
#define TARGET_LITTLE_SYM bfd_elf64_x86_64_vec
#define TARGET_LITTLE_NAME "elf64-x86-64"
#define ELF_ARCH bfd_arch_i386
#define ELF_MACHINE_CODE EM_X86_64
-#define ELF_MAXPAGESIZE 0x100000
+#define ELF_MAXPAGESIZE 0x200000
+#define ELF_MINPAGESIZE 0x1000
+#define ELF_COMMONPAGESIZE 0x1000
#define elf_backend_can_gc_sections 1
#define elf_backend_can_refcount 1
@@ -3645,6 +3653,8 @@ static const struct bfd_elf_special_section
#define bfd_elf64_bfd_link_hash_table_create \
elf64_x86_64_link_hash_table_create
#define bfd_elf64_bfd_reloc_type_lookup elf64_x86_64_reloc_type_lookup
+#define bfd_elf64_bfd_reloc_name_lookup \
+ elf64_x86_64_reloc_name_lookup
#define elf_backend_adjust_dynamic_symbol elf64_x86_64_adjust_dynamic_symbol
#define elf_backend_check_relocs elf64_x86_64_check_relocs
@@ -3660,6 +3670,7 @@ static const struct bfd_elf_special_section
#define elf_backend_relocate_section elf64_x86_64_relocate_section
#define elf_backend_size_dynamic_sections elf64_x86_64_size_dynamic_sections
#define elf_backend_always_size_sections elf64_x86_64_always_size_sections
+#define elf_backend_init_index_section _bfd_elf_init_1_index_section
#define elf_backend_plt_sym_val elf64_x86_64_plt_sym_val
#define elf_backend_object_p elf64_x86_64_elf_object_p
#define bfd_elf64_mkobject elf64_x86_64_mkobject
@@ -3685,5 +3696,25 @@ static const struct bfd_elf_special_section
elf64_x86_64_special_sections
#define elf_backend_additional_program_headers \
elf64_x86_64_additional_program_headers
+#define elf_backend_hash_symbol \
+ elf64_x86_64_hash_symbol
+
+#include "elf64-target.h"
+
+/* FreeBSD support. */
+
+#undef TARGET_LITTLE_SYM
+#define TARGET_LITTLE_SYM bfd_elf64_x86_64_freebsd_vec
+#undef TARGET_LITTLE_NAME
+#define TARGET_LITTLE_NAME "elf64-x86-64-freebsd"
+
+#undef ELF_OSABI
+#define ELF_OSABI ELFOSABI_FREEBSD
+
+#undef elf_backend_post_process_headers
+#define elf_backend_post_process_headers _bfd_elf_set_osabi
+
+#undef elf64_bed
+#define elf64_bed elf64_x86_64_fbsd_bed
#include "elf64-target.h"
diff --git a/bfd/elfcode.h b/bfd/elfcode.h
index 1f8ec2b2b2cb..191e124d770e 100644
--- a/bfd/elfcode.h
+++ b/bfd/elfcode.h
@@ -1,6 +1,7 @@
/* ELF executable support for BFD.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Written by Fred Fish @ Cygnus Support, from information published
in "UNIX System V Release 4, Programmers Guide: ANSI C and
@@ -64,8 +65,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
it's cast in stone.
*/
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libiberty.h"
#include "bfdlink.h"
#include "libbfd.h"
@@ -139,10 +140,11 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define LOG_FILE_ALIGN 2
#endif
-#ifdef DEBUG
+#if DEBUG & 2
static void elf_debug_section (int, Elf_Internal_Shdr *);
+#endif
+#if DEBUG & 1
static void elf_debug_file (Elf_Internal_Ehdr *);
-static char *elf_symbol_flags (flagword);
#endif
/* Structure swapping routines */
@@ -165,7 +167,7 @@ static char *elf_symbol_flags (flagword);
/* Translate an ELF symbol in external format into an ELF symbol in internal
format. */
-void
+bfd_boolean
elf_swap_symbol_in (bfd *abfd,
const void *psrc,
const void *pshn,
@@ -187,9 +189,10 @@ elf_swap_symbol_in (bfd *abfd,
if (dst->st_shndx == SHN_XINDEX)
{
if (shndx == NULL)
- abort ();
+ return FALSE;
dst->st_shndx = H_GET_32 (abfd, shndx->est_shndx);
}
+ return TRUE;
}
/* Translate an ELF symbol in internal format into an ELF symbol in external
@@ -498,6 +501,8 @@ elf_object_p (bfd *abfd)
struct bfd_preserve preserve;
asection *s;
bfd_size_type amt;
+ const bfd_target *target;
+ const bfd_target * const *target_ptr;
preserve.marker = NULL;
@@ -541,10 +546,12 @@ elf_object_p (bfd *abfd)
if (!bfd_preserve_save (abfd, &preserve))
goto got_no_match;
+ target = abfd->xvec;
+
/* Allocate an instance of the elf_obj_tdata structure and hook it up to
the tdata pointer in the bfd. */
- if (! (*abfd->xvec->_bfd_set_format[bfd_object]) (abfd))
+ if (! (*target->_bfd_set_format[bfd_object]) (abfd))
goto got_no_match;
preserve.marker = elf_tdata (abfd);
@@ -584,8 +591,6 @@ elf_object_p (bfd *abfd)
&& (ebd->elf_machine_alt2 == 0
|| i_ehdrp->e_machine != ebd->elf_machine_alt2))
{
- const bfd_target * const *target_ptr;
-
if (ebd->elf_machine_code != EM_NONE)
goto got_wrong_format_error;
@@ -626,6 +631,45 @@ elf_object_p (bfd *abfd)
goto got_no_match;
}
+ if (ebd->elf_machine_code != EM_NONE
+ && i_ehdrp->e_ident[EI_OSABI] != ebd->elf_osabi)
+ {
+ if (ebd->elf_osabi != ELFOSABI_NONE)
+ goto got_wrong_format_error;
+
+ /* This is an ELFOSABI_NONE ELF target. Let it match any ELF
+ target of the compatible machine for which we do not have a
+ backend with matching ELFOSABI. */
+ for (target_ptr = bfd_target_vector;
+ *target_ptr != NULL;
+ target_ptr++)
+ {
+ const struct elf_backend_data *back;
+
+ /* Skip this target and targets with incompatible byte
+ order. */
+ if (*target_ptr == target
+ || (*target_ptr)->flavour != bfd_target_elf_flavour
+ || (*target_ptr)->byteorder != target->byteorder
+ || ((*target_ptr)->header_byteorder
+ != target->header_byteorder))
+ continue;
+
+ back = (const struct elf_backend_data *) (*target_ptr)->backend_data;
+ if (back->elf_osabi == i_ehdrp->e_ident[EI_OSABI]
+ && (back->elf_machine_code == i_ehdrp->e_machine
+ || (back->elf_machine_alt1 != 0
+ && back->elf_machine_alt1 == i_ehdrp->e_machine)
+ || (back->elf_machine_alt2 != 0
+ && back->elf_machine_alt2 == i_ehdrp->e_machine)))
+ {
+ /* target_ptr is an ELF backend which matches this
+ object file, so reject the ELFOSABI_NONE ELF target. */
+ goto got_wrong_format_error;
+ }
+ }
+ }
+
if (i_ehdrp->e_shoff != 0)
{
bfd_signed_vma where = i_ehdrp->e_shoff;
@@ -846,7 +890,7 @@ elf_object_p (bfd *abfd)
}
bfd_preserve_finish (abfd, &preserve);
- return abfd->xvec;
+ return target;
got_wrong_format_error:
/* There is way too much undoing of half-known state here. The caller,
@@ -1235,6 +1279,12 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic)
case STT_TLS:
sym->symbol.flags |= BSF_THREAD_LOCAL;
break;
+ case STT_RELC:
+ sym->symbol.flags |= BSF_RELC;
+ break;
+ case STT_SRELC:
+ sym->symbol.flags |= BSF_SRELC;
+ break;
}
if (dynamic)
@@ -1462,7 +1512,7 @@ elf_slurp_reloc_table (bfd *abfd,
return TRUE;
}
-#ifdef DEBUG
+#if DEBUG & 2
static void
elf_debug_section (int num, Elf_Internal_Shdr *hdr)
{
@@ -1488,7 +1538,9 @@ elf_debug_section (int num, Elf_Internal_Shdr *hdr)
(long) hdr->sh_entsize);
fflush (stderr);
}
+#endif
+#if DEBUG & 1
static void
elf_debug_file (Elf_Internal_Ehdr *ehdrp)
{
@@ -1500,77 +1552,6 @@ elf_debug_file (Elf_Internal_Ehdr *ehdrp)
fprintf (stderr, "e_shnum = %ld\n", (long) ehdrp->e_shnum);
fprintf (stderr, "e_shentsize = %ld\n", (long) ehdrp->e_shentsize);
}
-
-static char *
-elf_symbol_flags (flagword flags)
-{
- static char buffer[1024];
-
- buffer[0] = '\0';
- if (flags & BSF_LOCAL)
- strcat (buffer, " local");
-
- if (flags & BSF_GLOBAL)
- strcat (buffer, " global");
-
- if (flags & BSF_DEBUGGING)
- strcat (buffer, " debug");
-
- if (flags & BSF_FUNCTION)
- strcat (buffer, " function");
-
- if (flags & BSF_KEEP)
- strcat (buffer, " keep");
-
- if (flags & BSF_KEEP_G)
- strcat (buffer, " keep_g");
-
- if (flags & BSF_WEAK)
- strcat (buffer, " weak");
-
- if (flags & BSF_SECTION_SYM)
- strcat (buffer, " section-sym");
-
- if (flags & BSF_OLD_COMMON)
- strcat (buffer, " old-common");
-
- if (flags & BSF_NOT_AT_END)
- strcat (buffer, " not-at-end");
-
- if (flags & BSF_CONSTRUCTOR)
- strcat (buffer, " constructor");
-
- if (flags & BSF_WARNING)
- strcat (buffer, " warning");
-
- if (flags & BSF_INDIRECT)
- strcat (buffer, " indirect");
-
- if (flags & BSF_FILE)
- strcat (buffer, " file");
-
- if (flags & DYNAMIC)
- strcat (buffer, " dynamic");
-
- if (flags & ~(BSF_LOCAL
- | BSF_GLOBAL
- | BSF_DEBUGGING
- | BSF_FUNCTION
- | BSF_KEEP
- | BSF_KEEP_G
- | BSF_WEAK
- | BSF_SECTION_SYM
- | BSF_OLD_COMMON
- | BSF_NOT_AT_END
- | BSF_CONSTRUCTOR
- | BSF_WARNING
- | BSF_INDIRECT
- | BSF_FILE
- | BSF_DYNAMIC))
- strcat (buffer, " unknown-bits");
-
- return buffer;
-}
#endif
/* Create a new BFD as if by bfd_openr. Rather than opening a file,
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 59d9c3f1389a..9f0efa5b4b7f 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -1,6 +1,6 @@
/* ELF linking support for BFD.
Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006 Free Software Foundation, Inc.
+ 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#define ARCH_SIZE 0
@@ -185,16 +185,6 @@ _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
return FALSE;
}
- if (! info->traditional_format)
- {
- s = bfd_make_section_with_flags (abfd, ".eh_frame_hdr",
- flags | SEC_READONLY);
- if (s == NULL
- || ! bfd_set_section_alignment (abfd, s, 2))
- return FALSE;
- elf_hash_table (info)->eh_info.hdr_sec = s;
- }
-
/* Create sections to hold version informations. These are removed
if they are not needed. */
s = bfd_make_section_with_flags (abfd, ".gnu.version_d",
@@ -240,12 +230,30 @@ _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
if (!_bfd_elf_define_linkage_sym (abfd, info, s, "_DYNAMIC"))
return FALSE;
- s = bfd_make_section_with_flags (abfd, ".hash",
- flags | SEC_READONLY);
- if (s == NULL
- || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
- return FALSE;
- elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry;
+ if (info->emit_hash)
+ {
+ s = bfd_make_section_with_flags (abfd, ".hash", flags | SEC_READONLY);
+ if (s == NULL
+ || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
+ return FALSE;
+ elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry;
+ }
+
+ if (info->emit_gnu_hash)
+ {
+ s = bfd_make_section_with_flags (abfd, ".gnu.hash",
+ flags | SEC_READONLY);
+ if (s == NULL
+ || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
+ return FALSE;
+ /* For 64-bit ELF, .gnu.hash is a non-uniform entity size section:
+ 4 32-bit words followed by variable count of 64-bit words, then
+ variable count of 32-bit words. */
+ if (bed->s->arch_size == 64)
+ elf_section_data (s)->this_hdr.sh_entsize = 0;
+ else
+ elf_section_data (s)->this_hdr.sh_entsize = 4;
+ }
/* Let the backend create the rest of the sections. This lets the
backend set the right flags. The backend will normally create
@@ -426,6 +434,29 @@ bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info,
return TRUE;
}
+/* Mark a symbol dynamic. */
+
+void
+bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
+{
+ struct bfd_elf_dynamic_list *d = info->dynamic_list;
+
+ /* It may be called more than once on the same H. */
+ if(h->dynamic || info->relocatable)
+ return;
+
+ if ((info->dynamic_data
+ && (h->type == STT_OBJECT
+ || (sym != NULL
+ && ELF_ST_TYPE (sym->st_info) == STT_OBJECT)))
+ || (d != NULL
+ && h->root.type == bfd_link_hash_new
+ && (*d->match) (&d->head, NULL, h->root.root.string)))
+ h->dynamic = 1;
+}
+
/* Record an assignment to a symbol made by a linker script. We need
this in case some dynamic object refers to this symbol. */
@@ -459,7 +490,10 @@ bfd_elf_record_link_assignment (bfd *output_bfd,
}
if (h->root.type == bfd_link_hash_new)
- h->non_elf = 0;
+ {
+ bfd_elf_link_mark_dynamic_symbol (info, h, NULL);
+ h->non_elf = 0;
+ }
/* If this symbol is being provided by the linker script, and it is
currently defined by a dynamic object, but not by a regular
@@ -676,6 +710,8 @@ _bfd_elf_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
struct bfd_link_info *info,
asection *p)
{
+ struct elf_link_hash_table *htab;
+
switch (elf_section_data (p)->this_hdr.sh_type)
{
case SHT_PROGBITS:
@@ -683,15 +719,21 @@ _bfd_elf_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
/* If sh_type is yet undecided, assume it could be
SHT_PROGBITS/SHT_NOBITS. */
case SHT_NULL:
+ htab = elf_hash_table (info);
+ if (p == htab->tls_sec)
+ return FALSE;
+
+ if (htab->text_index_section != NULL)
+ return p != htab->text_index_section && p != htab->data_index_section;
+
if (strcmp (p->name, ".got") == 0
|| strcmp (p->name, ".got.plt") == 0
|| strcmp (p->name, ".plt") == 0)
{
asection *ip;
- bfd *dynobj = elf_hash_table (info)->dynobj;
- if (dynobj != NULL
- && (ip = bfd_get_section_by_name (dynobj, p->name)) != NULL
+ if (htab->dynobj != NULL
+ && (ip = bfd_get_section_by_name (htab->dynobj, p->name)) != NULL
&& (ip->flags & SEC_LINKER_CREATED)
&& ip->output_section == p)
return TRUE;
@@ -727,6 +769,8 @@ _bfd_elf_link_renumber_dynsyms (bfd *output_bfd,
&& (p->flags & SEC_ALLOC) != 0
&& !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
elf_section_data (p)->dynindx = ++dynsymcount;
+ else
+ elf_section_data (p)->dynindx = 0;
}
*section_sym_count = dynsymcount;
@@ -796,6 +840,15 @@ _bfd_elf_merge_symbol (bfd *abfd,
sec = *psec;
bind = ELF_ST_BIND (sym->st_info);
+ /* Silently discard TLS symbols from --just-syms. There's no way to
+ combine a static TLS block with a new TLS block for this executable. */
+ if (ELF_ST_TYPE (sym->st_info) == STT_TLS
+ && sec->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
+ {
+ *skip = TRUE;
+ return TRUE;
+ }
+
if (! bfd_is_und_section (sec))
h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, FALSE, FALSE);
else
@@ -816,6 +869,11 @@ _bfd_elf_merge_symbol (bfd *abfd,
|| h->root.type == bfd_link_hash_warning)
h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ /* We have to check it for every instance since the first few may be
+ refereences and not all compilers emit symbol type for undefined
+ symbols. */
+ bfd_elf_link_mark_dynamic_symbol (info, h, sym);
+
/* If we just created the symbol, mark it as being an ELF symbol.
Other than that, there is nothing to do--there is no merge issue
with a newly defined symbol--so we just return. */
@@ -889,6 +947,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
&& h->root.type != bfd_link_hash_undefweak
&& h->root.type != bfd_link_hash_common);
+ bed = get_elf_backend_data (abfd);
/* When we try to create a default indirect symbol from the dynamic
definition with the default version, we skip it if its type and
the type of existing regular definition mismatch. We only do it
@@ -903,7 +962,9 @@ _bfd_elf_merge_symbol (bfd *abfd,
&& (olddef || h->root.type == bfd_link_hash_common)
&& ELF_ST_TYPE (sym->st_info) != h->type
&& ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
- && h->type != STT_NOTYPE)
+ && h->type != STT_NOTYPE
+ && !(bed->is_function_type (ELF_ST_TYPE (sym->st_info))
+ && bed->is_function_type (h->type)))
{
*skip = TRUE;
return TRUE;
@@ -1007,7 +1068,41 @@ _bfd_elf_merge_symbol (bfd *abfd,
relocatable file and the old definition comes from a dynamic
object, we remove the old definition. */
if ((*sym_hash)->root.type == bfd_link_hash_indirect)
- h = *sym_hash;
+ {
+ /* Handle the case where the old dynamic definition is
+ default versioned. We need to copy the symbol info from
+ the symbol with default version to the normal one if it
+ was referenced before. */
+ if (h->ref_regular)
+ {
+ const struct elf_backend_data *bed
+ = get_elf_backend_data (abfd);
+ struct elf_link_hash_entry *vh = *sym_hash;
+ vh->root.type = h->root.type;
+ h->root.type = bfd_link_hash_indirect;
+ (*bed->elf_backend_copy_indirect_symbol) (info, vh, h);
+ /* Protected symbols will override the dynamic definition
+ with default version. */
+ if (ELF_ST_VISIBILITY (sym->st_other) == STV_PROTECTED)
+ {
+ h->root.u.i.link = (struct bfd_link_hash_entry *) vh;
+ vh->dynamic_def = 1;
+ vh->ref_dynamic = 1;
+ }
+ else
+ {
+ h->root.type = vh->root.type;
+ vh->ref_dynamic = 0;
+ /* We have to hide it here since it was made dynamic
+ global with extra bits when the symbol info was
+ copied from the old dynamic definition. */
+ (*bed->elf_backend_hide_symbol) (info, vh, TRUE);
+ }
+ h = vh;
+ }
+ else
+ h = *sym_hash;
+ }
if ((h->root.u.undef.next || info->hash->undefs_tail == &h->root)
&& bfd_is_und_section (sec))
@@ -1060,6 +1155,11 @@ _bfd_elf_merge_symbol (bfd *abfd,
if (olddef && newdyn)
oldweak = FALSE;
+ /* Allow changes between different types of funciton symbol. */
+ if (bed->is_function_type (ELF_ST_TYPE (sym->st_info))
+ && bed->is_function_type (h->type))
+ *type_change_ok = TRUE;
+
/* It's OK to change the type if either the existing symbol or the
new symbol is weak. A type change is also OK if the old symbol
is undefined and the new symbol is defined. */
@@ -1106,7 +1206,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
&& (sec->flags & SEC_ALLOC) != 0
&& (sec->flags & SEC_LOAD) == 0
&& sym->st_size > 0
- && ELF_ST_TYPE (sym->st_info) != STT_FUNC)
+ && !bed->is_function_type (ELF_ST_TYPE (sym->st_info)))
newdyncommon = TRUE;
else
newdyncommon = FALSE;
@@ -1118,14 +1218,13 @@ _bfd_elf_merge_symbol (bfd *abfd,
&& (h->root.u.def.section->flags & SEC_ALLOC) != 0
&& (h->root.u.def.section->flags & SEC_LOAD) == 0
&& h->size > 0
- && h->type != STT_FUNC)
+ && !bed->is_function_type (h->type))
olddyncommon = TRUE;
else
olddyncommon = FALSE;
/* We now know everything about the old and new symbols. We ask the
backend to check if we can merge them. */
- bed = get_elf_backend_data (abfd);
if (bed->merge_symbol
&& !bed->merge_symbol (info, sym_hash, h, sym, psec, pvalue,
pold_alignment, skip, override,
@@ -1180,7 +1279,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
&& (olddef
|| (h->root.type == bfd_link_hash_common
&& (newweak
- || ELF_ST_TYPE (sym->st_info) == STT_FUNC))))
+ || bed->is_function_type (ELF_ST_TYPE (sym->st_info))))))
{
*override = TRUE;
newdef = FALSE;
@@ -1235,7 +1334,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
&& (newdef
|| (bfd_is_com_section (sec)
&& (oldweak
- || h->type == STT_FUNC)))
+ || bed->is_function_type (h->type))))
&& olddyn
&& olddef
&& h->def_dynamic)
@@ -1464,6 +1563,10 @@ _bfd_elf_add_default_symbol (bfd *abfd,
hi = h;
}
+ /* Check if HI is a warning symbol. */
+ if (hi->root.type == bfd_link_hash_warning)
+ hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
+
/* If there is a duplicate definition somewhere, then HI may not
point to an indirect symbol. We will have reported an error to
the user in that case. */
@@ -1574,6 +1677,10 @@ _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data)
{
struct elf_info_failed *eif = data;
+ /* Ignore this if we won't export it. */
+ if (!eif->info->export_dynamic && !h->dynamic)
+ return TRUE;
+
/* Ignore indirect symbols. These are added by the versioning code. */
if (h->root.type == bfd_link_hash_indirect)
return TRUE;
@@ -1840,7 +1947,7 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data)
/* We could not find the version for a symbol when
generating a shared archive. Return an error. */
(*_bfd_error_handler)
- (_("%B: undefined versioned symbol name %s"),
+ (_("%B: version node not found for symbol %s"),
sinfo->output_bfd, h->root.root.string);
bfd_set_error (bfd_error_bad_value);
sinfo->failed = TRUE;
@@ -2327,7 +2434,7 @@ _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h,
if (h->needs_plt
&& eif->info->shared
&& is_elf_hash_table (eif->info->hash)
- && (eif->info->symbolic
+ && (SYMBOLIC_BIND (eif->info, h)
|| ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
&& h->def_regular)
{
@@ -2502,6 +2609,52 @@ _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
return TRUE;
}
+/* Adjust the dynamic symbol, H, for copy in the dynamic bss section,
+ DYNBSS. */
+
+bfd_boolean
+_bfd_elf_adjust_dynamic_copy (struct elf_link_hash_entry *h,
+ asection *dynbss)
+{
+ unsigned int power_of_two;
+ bfd_vma mask;
+ asection *sec = h->root.u.def.section;
+
+ /* The section aligment of definition is the maximum alignment
+ requirement of symbols defined in the section. Since we don't
+ know the symbol alignment requirement, we start with the
+ maximum alignment and check low bits of the symbol address
+ for the minimum alignment. */
+ power_of_two = bfd_get_section_alignment (sec->owner, sec);
+ mask = ((bfd_vma) 1 << power_of_two) - 1;
+ while ((h->root.u.def.value & mask) != 0)
+ {
+ mask >>= 1;
+ --power_of_two;
+ }
+
+ if (power_of_two > bfd_get_section_alignment (dynbss->owner,
+ dynbss))
+ {
+ /* Adjust the section alignment if needed. */
+ if (! bfd_set_section_alignment (dynbss->owner, dynbss,
+ power_of_two))
+ return FALSE;
+ }
+
+ /* We make sure that the symbol will be aligned properly. */
+ dynbss->size = BFD_ALIGN (dynbss->size, mask + 1);
+
+ /* Define the symbol as being at this point in DYNBSS. */
+ h->root.u.def.section = dynbss;
+ h->root.u.def.value = dynbss->size;
+
+ /* Increment the size of DYNBSS to make room for the symbol. */
+ dynbss->size += h->size;
+
+ return TRUE;
+}
+
/* Adjust all external symbols pointing into SEC_MERGE sections
to reflect the object merging within the sections. */
@@ -2540,6 +2693,8 @@ _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
bfd_boolean ignore_protected)
{
bfd_boolean binding_stays_local_p;
+ const struct elf_backend_data *bed;
+ struct elf_link_hash_table *hash_table;
if (h == NULL)
return FALSE;
@@ -2556,7 +2711,7 @@ _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
/* Identify the cases where name binding rules say that a
visible symbol resolves locally. */
- binding_stays_local_p = info->executable || info->symbolic;
+ binding_stays_local_p = info->executable || SYMBOLIC_BIND (info, h);
switch (ELF_ST_VISIBILITY (h->other))
{
@@ -2565,10 +2720,16 @@ _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
return FALSE;
case STV_PROTECTED:
+ hash_table = elf_hash_table (info);
+ if (!is_elf_hash_table (hash_table))
+ return FALSE;
+
+ bed = get_elf_backend_data (hash_table->dynobj);
+
/* Proper resolution for function pointer equality may require
that these symbols perhaps be resolved dynamically, even though
we should be resolving them to the current module. */
- if (!ignore_protected || h->type != STT_FUNC)
+ if (!ignore_protected || !bed->is_function_type (h->type))
binding_stays_local_p = TRUE;
break;
@@ -2595,6 +2756,9 @@ _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
struct bfd_link_info *info,
bfd_boolean local_protected)
{
+ const struct elf_backend_data *bed;
+ struct elf_link_hash_table *hash_table;
+
/* If it's a local sym, of course we resolve locally. */
if (h == NULL)
return TRUE;
@@ -2619,7 +2783,7 @@ _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
/* At this point, we know the symbol is defined and dynamic. In an
executable it must resolve locally, likewise when building symbolic
shared libraries. */
- if (info->executable || info->symbolic)
+ if (info->executable || SYMBOLIC_BIND (info, h))
return TRUE;
/* Now deal with defined dynamic symbols in shared libraries. Ones
@@ -2631,8 +2795,14 @@ _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
if (ELF_ST_VISIBILITY (h->other) != STV_PROTECTED)
return TRUE;
+ hash_table = elf_hash_table (info);
+ if (!is_elf_hash_table (hash_table))
+ return TRUE;
+
+ bed = get_elf_backend_data (hash_table->dynobj);
+
/* STV_PROTECTED non-function symbols are local. */
- if (h->type != STT_FUNC)
+ if (!bed->is_function_type (h->type))
return TRUE;
/* Function pointer equality tests may require that STV_PROTECTED
@@ -2681,8 +2851,9 @@ is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED,
&& ELF_ST_BIND (sym->st_info) < STB_LOOS)
return FALSE;
+ bed = get_elf_backend_data (abfd);
/* Function symbols do not count. */
- if (ELF_ST_TYPE (sym->st_info) == STT_FUNC)
+ if (bed->is_function_type (ELF_ST_TYPE (sym->st_info)))
return FALSE;
/* If the section is undefined, then so is the symbol. */
@@ -2691,7 +2862,6 @@ is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED,
/* If the symbol is defined in the common section, then
it is a common definition and so does not count. */
- bed = get_elf_backend_data (abfd);
if (bed->common_definition (sym))
return FALSE;
@@ -3080,6 +3250,9 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
struct elf_link_hash_table *htab;
bfd_size_type amt;
void *alloc_mark = NULL;
+ struct bfd_hash_entry **old_table = NULL;
+ unsigned int old_size = 0;
+ unsigned int old_count = 0;
void *old_tab = NULL;
void *old_hash;
void *old_ent;
@@ -3126,7 +3299,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
const char *name;
name = bfd_get_section_name (abfd, s);
- if (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0)
+ if (CONST_STRNEQ (name, ".gnu.warning."))
{
char *msg;
bfd_size_type sz;
@@ -3511,6 +3684,9 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
memcpy (old_hash, sym_hash, hashsize);
old_undefs = htab->root.undefs;
old_undefs_tail = htab->root.undefs_tail;
+ old_table = htab->root.table.table;
+ old_size = htab->root.table.size;
+ old_count = htab->root.table.count;
old_dynsymcount = htab->dynsymcount;
for (i = 0; i < htab->root.table.size; i++)
@@ -3592,12 +3768,10 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
sec = bfd_abs_section_ptr;
else if (sec->kept_section)
{
- /* Symbols from discarded section are undefined, and have
- default visibility. */
+ /* Symbols from discarded section are undefined. We keep
+ its visibility. */
sec = bfd_und_section_ptr;
isym->st_shndx = SHN_UNDEF;
- isym->st_other = (STV_DEFAULT
- | (isym->st_other & ~ ELF_ST_VISIBILITY (-1)));
}
else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
value -= sec->vma;
@@ -3622,7 +3796,8 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
goto error_free_vers;
if (isym->st_shndx == SHN_COMMON
- && ELF_ST_TYPE (isym->st_info) == STT_TLS)
+ && ELF_ST_TYPE (isym->st_info) == STT_TLS
+ && !info->relocatable)
{
asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon");
@@ -3694,8 +3869,9 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
if it is not a function, because it might be the version
symbol itself. FIXME: What if it isn't? */
if ((iver.vs_vers & VERSYM_HIDDEN) != 0
- || (vernum > 1 && (! bfd_is_abs_section (sec)
- || ELF_ST_TYPE (isym->st_info) == STT_FUNC)))
+ || (vernum > 1
+ && (!bfd_is_abs_section (sec)
+ || bed->is_function_type (ELF_ST_TYPE (isym->st_info)))))
{
const char *verstr;
size_t namelen, verlen, newlen;
@@ -3842,7 +4018,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
if (dynamic
&& definition
&& (flags & BSF_WEAK) != 0
- && ELF_ST_TYPE (isym->st_info) != STT_FUNC
+ && !bed->is_function_type (ELF_ST_TYPE (isym->st_info))
&& is_elf_hash_table (htab)
&& h->u.weakdef == NULL)
{
@@ -3929,18 +4105,30 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
}
if (normal_align < common_align)
- (*_bfd_error_handler)
- (_("Warning: alignment %u of symbol `%s' in %B"
- " is smaller than %u in %B"),
- normal_bfd, common_bfd,
- 1 << normal_align, name, 1 << common_align);
+ {
+ /* PR binutils/2735 */
+ if (normal_bfd == NULL)
+ (*_bfd_error_handler)
+ (_("Warning: alignment %u of common symbol `%s' in %B"
+ " is greater than the alignment (%u) of its section %A"),
+ common_bfd, h->root.u.def.section,
+ 1 << common_align, name, 1 << normal_align);
+ else
+ (*_bfd_error_handler)
+ (_("Warning: alignment %u of symbol `%s' in %B"
+ " is smaller than %u in %B"),
+ normal_bfd, common_bfd,
+ 1 << normal_align, name, 1 << common_align);
+ }
}
- /* Remember the symbol size and type. */
- if (isym->st_size != 0
+ /* Remember the symbol size if it isn't undefined. */
+ if ((isym->st_size != 0 && isym->st_shndx != SHN_UNDEF)
&& (definition || h->size == 0))
{
- if (h->size != 0 && h->size != isym->st_size && ! size_change_ok)
+ if (h->size != 0
+ && h->size != isym->st_size
+ && ! size_change_ok)
(*_bfd_error_handler)
(_("Warning: size of symbol `%s' changed"
" from %lu in %B to %lu in %B"),
@@ -3955,7 +4143,8 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
to be the size of the common symbol. The code just above
won't fix the size if a common symbol becomes larger. We
don't warn about a size change here, because that is
- covered by --warn-common. */
+ covered by --warn-common. Allow changed between different
+ function types. */
if (h->root.type == bfd_link_hash_common)
h->size = h->root.u.c.size;
@@ -3989,13 +4178,13 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
isym->st_other = (STV_HIDDEN
| (isym->st_other & ~ELF_ST_VISIBILITY (-1)));
- if (isym->st_other != 0 && !dynamic)
+ if (ELF_ST_VISIBILITY (isym->st_other) != 0 && !dynamic)
{
unsigned char hvis, symvis, other, nvis;
- /* Take the balance of OTHER from the definition. */
- other = (definition ? isym->st_other : h->other);
- other &= ~ ELF_ST_VISIBILITY (-1);
+ /* Only merge the visibility. Leave the remainder of the
+ st_other field to elf_backend_merge_symbol_attribute. */
+ other = h->other & ~ELF_ST_VISIBILITY (-1);
/* Combine visibilities, using the most constraining one. */
hvis = ELF_ST_VISIBILITY (h->other);
@@ -4045,6 +4234,13 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
dynsym = TRUE;
}
+ if (definition && (sec->flags & SEC_DEBUGGING))
+ {
+ /* We don't want to make debug symbol dynamic. */
+ (*bed->elf_backend_hide_symbol) (info, h, TRUE);
+ dynsym = FALSE;
+ }
+
/* Check to see if we need to add an indirect symbol for
the default name. */
if (definition || h->root.type == bfd_link_hash_common)
@@ -4145,9 +4341,14 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
unsigned int i;
/* Restore the symbol table. */
+ if (bed->as_needed_cleanup)
+ (*bed->as_needed_cleanup) (abfd, info);
old_hash = (char *) old_tab + tabsize;
old_ent = (char *) old_hash + hashsize;
sym_hash = elf_sym_hashes (abfd);
+ htab->root.table.table = old_table;
+ htab->root.table.size = old_size;
+ htab->root.table.count = old_count;
memcpy (htab->root.table.table, old_tab, tabsize);
memcpy (sym_hash, old_hash, hashsize);
htab->root.undefs = old_undefs;
@@ -4285,7 +4486,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
h = *hpp;
if (h != NULL
&& h->root.type == bfd_link_hash_defined
- && h->type != STT_FUNC)
+ && !bed->is_function_type (h->type))
{
*sym_hash = h;
sym_hash++;
@@ -4457,7 +4658,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
asection *stab;
for (stab = abfd->sections; stab; stab = stab->next)
- if (strncmp (".stab", stab->name, 5) == 0
+ if (CONST_STRNEQ (stab->name, ".stab")
&& (!stab->name[5] ||
(stab->name[5] == '.' && ISDIGIT (stab->name[6])))
&& (stab->flags & SEC_MERGE) == 0
@@ -4807,6 +5008,131 @@ elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data)
return TRUE;
}
+struct collect_gnu_hash_codes
+{
+ bfd *output_bfd;
+ const struct elf_backend_data *bed;
+ unsigned long int nsyms;
+ unsigned long int maskbits;
+ unsigned long int *hashcodes;
+ unsigned long int *hashval;
+ unsigned long int *indx;
+ unsigned long int *counts;
+ bfd_vma *bitmask;
+ bfd_byte *contents;
+ long int min_dynindx;
+ unsigned long int bucketcount;
+ unsigned long int symindx;
+ long int local_indx;
+ long int shift1, shift2;
+ unsigned long int mask;
+};
+
+/* This function will be called though elf_link_hash_traverse to store
+ all hash value of the exported symbols in an array. */
+
+static bfd_boolean
+elf_collect_gnu_hash_codes (struct elf_link_hash_entry *h, void *data)
+{
+ struct collect_gnu_hash_codes *s = data;
+ const char *name;
+ char *p;
+ unsigned long ha;
+ char *alc = NULL;
+
+ if (h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ /* Ignore indirect symbols. These are added by the versioning code. */
+ if (h->dynindx == -1)
+ return TRUE;
+
+ /* Ignore also local symbols and undefined symbols. */
+ if (! (*s->bed->elf_hash_symbol) (h))
+ return TRUE;
+
+ name = h->root.root.string;
+ p = strchr (name, ELF_VER_CHR);
+ if (p != NULL)
+ {
+ alc = bfd_malloc (p - name + 1);
+ memcpy (alc, name, p - name);
+ alc[p - name] = '\0';
+ name = alc;
+ }
+
+ /* Compute the hash value. */
+ ha = bfd_elf_gnu_hash (name);
+
+ /* Store the found hash value in the array for compute_bucket_count,
+ and also for .dynsym reordering purposes. */
+ s->hashcodes[s->nsyms] = ha;
+ s->hashval[h->dynindx] = ha;
+ ++s->nsyms;
+ if (s->min_dynindx < 0 || s->min_dynindx > h->dynindx)
+ s->min_dynindx = h->dynindx;
+
+ if (alc != NULL)
+ free (alc);
+
+ return TRUE;
+}
+
+/* This function will be called though elf_link_hash_traverse to do
+ final dynaminc symbol renumbering. */
+
+static bfd_boolean
+elf_renumber_gnu_hash_syms (struct elf_link_hash_entry *h, void *data)
+{
+ struct collect_gnu_hash_codes *s = data;
+ unsigned long int bucket;
+ unsigned long int val;
+
+ if (h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ /* Ignore indirect symbols. */
+ if (h->dynindx == -1)
+ return TRUE;
+
+ /* Ignore also local symbols and undefined symbols. */
+ if (! (*s->bed->elf_hash_symbol) (h))
+ {
+ if (h->dynindx >= s->min_dynindx)
+ h->dynindx = s->local_indx++;
+ return TRUE;
+ }
+
+ bucket = s->hashval[h->dynindx] % s->bucketcount;
+ val = (s->hashval[h->dynindx] >> s->shift1)
+ & ((s->maskbits >> s->shift1) - 1);
+ s->bitmask[val] |= ((bfd_vma) 1) << (s->hashval[h->dynindx] & s->mask);
+ s->bitmask[val]
+ |= ((bfd_vma) 1) << ((s->hashval[h->dynindx] >> s->shift2) & s->mask);
+ val = s->hashval[h->dynindx] & ~(unsigned long int) 1;
+ if (s->counts[bucket] == 1)
+ /* Last element terminates the chain. */
+ val |= 1;
+ bfd_put_32 (s->output_bfd, val,
+ s->contents + (s->indx[bucket] - s->symindx) * 4);
+ --s->counts[bucket];
+ h->dynindx = s->indx[bucket]++;
+ return TRUE;
+}
+
+/* Return TRUE if symbol should be hashed in the `.gnu.hash' section. */
+
+bfd_boolean
+_bfd_elf_hash_symbol (struct elf_link_hash_entry *h)
+{
+ return !(h->forced_local
+ || h->root.type == bfd_link_hash_undefined
+ || h->root.type == bfd_link_hash_undefweak
+ || ((h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ && h->root.u.def.section->output_section == NULL));
+}
+
/* Array used to determine the number of hash table buckets to use
based on the number of symbols there are. If there are fewer than
3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
@@ -4828,42 +5154,26 @@ static const size_t elf_buckets[] =
Therefore the result is always a good payoff between few collisions
(= short chain lengths) and table size. */
static size_t
-compute_bucket_count (struct bfd_link_info *info)
+compute_bucket_count (struct bfd_link_info *info, unsigned long int *hashcodes,
+ unsigned long int nsyms, int gnu_hash)
{
size_t dynsymcount = elf_hash_table (info)->dynsymcount;
size_t best_size = 0;
- unsigned long int *hashcodes;
- unsigned long int *hashcodesp;
unsigned long int i;
bfd_size_type amt;
- /* Compute the hash values for all exported symbols. At the same
- time store the values in an array so that we could use them for
- optimizations. */
- amt = dynsymcount;
- amt *= sizeof (unsigned long int);
- hashcodes = bfd_malloc (amt);
- if (hashcodes == NULL)
- return 0;
- hashcodesp = hashcodes;
-
- /* Put all hash values in HASHCODES. */
- elf_link_hash_traverse (elf_hash_table (info),
- elf_collect_hash_codes, &hashcodesp);
-
/* We have a problem here. The following code to optimize the table
size requires an integer type with more the 32 bits. If
BFD_HOST_U_64_BIT is set we know about such a type. */
#ifdef BFD_HOST_U_64_BIT
if (info->optimize)
{
- unsigned long int nsyms = hashcodesp - hashcodes;
size_t minsize;
size_t maxsize;
BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
- unsigned long int *counts ;
bfd *dynobj = elf_hash_table (info)->dynobj;
const struct elf_backend_data *bed = get_elf_backend_data (dynobj);
+ unsigned long int *counts;
/* Possible optimization parameters: if we have NSYMS symbols we say
that the hashing table must at least have NSYMS/4 and at most
@@ -4872,6 +5182,13 @@ compute_bucket_count (struct bfd_link_info *info)
if (minsize == 0)
minsize = 1;
best_size = maxsize = nsyms * 2;
+ if (gnu_hash)
+ {
+ if (minsize < 2)
+ minsize = 2;
+ if ((best_size & 31) == 0)
+ ++best_size;
+ }
/* Create array where we count the collisions in. We must use bfd_malloc
since the size could be large. */
@@ -4879,10 +5196,7 @@ compute_bucket_count (struct bfd_link_info *info)
amt *= sizeof (unsigned long int);
counts = bfd_malloc (amt);
if (counts == NULL)
- {
- free (hashcodes);
- return 0;
- }
+ return 0;
/* Compute the "optimal" size for the hash table. The criteria is a
minimal chain length. The minor criteria is (of course) the size
@@ -4894,6 +5208,9 @@ compute_bucket_count (struct bfd_link_info *info)
unsigned long int j;
unsigned long int fact;
+ if (gnu_hash && (i & 31) == 0)
+ continue;
+
memset (counts, '\0', i * sizeof (unsigned long int));
/* Determine how often each hash bucket is used. */
@@ -4909,9 +5226,9 @@ compute_bucket_count (struct bfd_link_info *info)
# define BFD_TARGET_PAGESIZE (4096)
# endif
- /* We in any case need 2 + NSYMS entries for the size values and
- the chains. */
- max = (2 + nsyms) * (bed->s->arch_size / 8);
+ /* We in any case need 2 + DYNSYMCOUNT entries for the size values
+ and the chains. */
+ max = (2 + dynsymcount) * bed->s->sizeof_hash_entry;
# if 1
/* Variant 1: optimize for short chains. We add the squares
@@ -4921,7 +5238,7 @@ compute_bucket_count (struct bfd_link_info *info)
max += counts[j] * counts[j];
/* This adds penalties for the overall size of the table. */
- fact = i / (BFD_TARGET_PAGESIZE / (bed->s->arch_size / 8)) + 1;
+ fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
max *= fact * fact;
# else
/* Variant 2: Optimize a lot more for small table. Here we
@@ -4932,7 +5249,7 @@ compute_bucket_count (struct bfd_link_info *info)
/* The overall size of the table is considered, but not as
strong as in variant 1, where it is squared. */
- fact = i / (BFD_TARGET_PAGESIZE / (bed->s->arch_size / 8)) + 1;
+ fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
max *= fact;
# endif
@@ -4955,14 +5272,13 @@ compute_bucket_count (struct bfd_link_info *info)
for (i = 0; elf_buckets[i] != 0; i++)
{
best_size = elf_buckets[i];
- if (dynsymcount < elf_buckets[i + 1])
+ if (nsyms < elf_buckets[i + 1])
break;
}
+ if (gnu_hash && best_size < 2)
+ best_size = 2;
}
- /* Free the arrays we needed. */
- free (hashcodes);
-
return best_size;
}
@@ -4993,6 +5309,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
if (!is_elf_hash_table (info->hash))
return TRUE;
+ bed = get_elf_backend_data (output_bfd);
elf_tdata (output_bfd)->relro = info->relro;
if (info->execstack)
elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
@@ -5019,7 +5336,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
exec = PF_X;
notesec = s;
}
- else
+ else if (bed->default_execstack)
exec = PF_X;
}
if (notesec)
@@ -5040,11 +5357,13 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
/* The backend may have to create some sections regardless of whether
we're dynamic or not. */
- bed = get_elf_backend_data (output_bfd);
if (bed->elf_backend_always_size_sections
&& ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
return FALSE;
+ if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
+ return FALSE;
+
dynobj = elf_hash_table (info)->dynobj;
/* If there were no dynamic objects in the link, there is nothing to
@@ -5052,9 +5371,6 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
if (dynobj == NULL)
return TRUE;
- if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
- return FALSE;
-
if (elf_hash_table (info)->dynamic_sections_created)
{
struct elf_info_failed eif;
@@ -5135,7 +5451,8 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
/* If we are supposed to export all symbols into the dynamic symbol
table (this is not the normal case), then do so. */
- if (info->export_dynamic)
+ if (info->export_dynamic
+ || (info->executable && info->dynamic))
{
elf_link_hash_traverse (elf_hash_table (info),
_bfd_elf_export_symbol,
@@ -5277,15 +5594,16 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
for (sub = info->input_bfds; sub != NULL;
sub = sub->link_next)
- for (o = sub->sections; o != NULL; o = o->next)
- if (elf_section_data (o)->this_hdr.sh_type
- == SHT_PREINIT_ARRAY)
- {
- (*_bfd_error_handler)
- (_("%B: .preinit_array section is not allowed in DSO"),
- sub);
- break;
- }
+ if (bfd_get_flavour (sub) == bfd_target_elf_flavour)
+ for (o = sub->sections; o != NULL; o = o->next)
+ if (elf_section_data (o)->this_hdr.sh_type
+ == SHT_PREINIT_ARRAY)
+ {
+ (*_bfd_error_handler)
+ (_("%B: .preinit_array section is not allowed in DSO"),
+ sub);
+ break;
+ }
bfd_set_error (bfd_error_nonrepresentable_section);
return FALSE;
@@ -5320,7 +5638,10 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
bfd_size_type strsize;
strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
- if (!_bfd_elf_add_dynamic_entry (info, DT_HASH, 0)
+ if ((info->emit_hash
+ && !_bfd_elf_add_dynamic_entry (info, DT_HASH, 0))
+ || (info->emit_gnu_hash
+ && !_bfd_elf_add_dynamic_entry (info, DT_GNU_HASH, 0))
|| !_bfd_elf_add_dynamic_entry (info, DT_STRTAB, 0)
|| !_bfd_elf_add_dynamic_entry (info, DT_SYMTAB, 0)
|| !_bfd_elf_add_dynamic_entry (info, DT_STRSZ, strsize)
@@ -5709,21 +6030,68 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
return TRUE;
}
+/* Find the first non-excluded output section. We'll use its
+ section symbol for some emitted relocs. */
+void
+_bfd_elf_init_1_index_section (bfd *output_bfd, struct bfd_link_info *info)
+{
+ asection *s;
+
+ for (s = output_bfd->sections; s != NULL; s = s->next)
+ if ((s->flags & (SEC_EXCLUDE | SEC_ALLOC)) == SEC_ALLOC
+ && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
+ {
+ elf_hash_table (info)->text_index_section = s;
+ break;
+ }
+}
+
+/* Find two non-excluded output sections, one for code, one for data.
+ We'll use their section symbols for some emitted relocs. */
+void
+_bfd_elf_init_2_index_sections (bfd *output_bfd, struct bfd_link_info *info)
+{
+ asection *s;
+
+ for (s = output_bfd->sections; s != NULL; s = s->next)
+ if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY))
+ == (SEC_ALLOC | SEC_READONLY))
+ && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
+ {
+ elf_hash_table (info)->text_index_section = s;
+ break;
+ }
+
+ for (s = output_bfd->sections; s != NULL; s = s->next)
+ if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC)
+ && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
+ {
+ elf_hash_table (info)->data_index_section = s;
+ break;
+ }
+
+ if (elf_hash_table (info)->text_index_section == NULL)
+ elf_hash_table (info)->text_index_section
+ = elf_hash_table (info)->data_index_section;
+}
+
bfd_boolean
bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
{
+ const struct elf_backend_data *bed;
+
if (!is_elf_hash_table (info->hash))
return TRUE;
+ bed = get_elf_backend_data (output_bfd);
+ (*bed->elf_backend_init_index_section) (output_bfd, info);
+
if (elf_hash_table (info)->dynamic_sections_created)
{
bfd *dynobj;
- const struct elf_backend_data *bed;
asection *s;
bfd_size_type dynsymcount;
unsigned long section_sym_count;
- size_t bucketcount = 0;
- size_t hash_entry_size;
unsigned int dtagcount;
dynobj = elf_hash_table (info)->dynobj;
@@ -5759,7 +6127,6 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
section as we went along in elf_link_add_object_symbols. */
s = bfd_get_section_by_name (dynobj, ".dynsym");
BFD_ASSERT (s != NULL);
- bed = get_elf_backend_data (output_bfd);
s->size = dynsymcount * bed->s->sizeof_sym;
if (dynsymcount != 0)
@@ -5774,23 +6141,215 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym);
}
+ elf_hash_table (info)->bucketcount = 0;
+
/* Compute the size of the hashing table. As a side effect this
computes the hash values for all the names we export. */
- bucketcount = compute_bucket_count (info);
+ if (info->emit_hash)
+ {
+ unsigned long int *hashcodes;
+ unsigned long int *hashcodesp;
+ bfd_size_type amt;
+ unsigned long int nsyms;
+ size_t bucketcount;
+ size_t hash_entry_size;
+
+ /* Compute the hash values for all exported symbols. At the same
+ time store the values in an array so that we could use them for
+ optimizations. */
+ amt = dynsymcount * sizeof (unsigned long int);
+ hashcodes = bfd_malloc (amt);
+ if (hashcodes == NULL)
+ return FALSE;
+ hashcodesp = hashcodes;
- s = bfd_get_section_by_name (dynobj, ".hash");
- BFD_ASSERT (s != NULL);
- hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
- s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
- s->contents = bfd_zalloc (output_bfd, s->size);
- if (s->contents == NULL)
- return FALSE;
+ /* Put all hash values in HASHCODES. */
+ elf_link_hash_traverse (elf_hash_table (info),
+ elf_collect_hash_codes, &hashcodesp);
- bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
- bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
- s->contents + hash_entry_size);
+ nsyms = hashcodesp - hashcodes;
+ bucketcount
+ = compute_bucket_count (info, hashcodes, nsyms, 0);
+ free (hashcodes);
- elf_hash_table (info)->bucketcount = bucketcount;
+ if (bucketcount == 0)
+ return FALSE;
+
+ elf_hash_table (info)->bucketcount = bucketcount;
+
+ s = bfd_get_section_by_name (dynobj, ".hash");
+ BFD_ASSERT (s != NULL);
+ hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
+ s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
+ s->contents = bfd_zalloc (output_bfd, s->size);
+ if (s->contents == NULL)
+ return FALSE;
+
+ bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
+ bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
+ s->contents + hash_entry_size);
+ }
+
+ if (info->emit_gnu_hash)
+ {
+ size_t i, cnt;
+ unsigned char *contents;
+ struct collect_gnu_hash_codes cinfo;
+ bfd_size_type amt;
+ size_t bucketcount;
+
+ memset (&cinfo, 0, sizeof (cinfo));
+
+ /* Compute the hash values for all exported symbols. At the same
+ time store the values in an array so that we could use them for
+ optimizations. */
+ amt = dynsymcount * 2 * sizeof (unsigned long int);
+ cinfo.hashcodes = bfd_malloc (amt);
+ if (cinfo.hashcodes == NULL)
+ return FALSE;
+
+ cinfo.hashval = cinfo.hashcodes + dynsymcount;
+ cinfo.min_dynindx = -1;
+ cinfo.output_bfd = output_bfd;
+ cinfo.bed = bed;
+
+ /* Put all hash values in HASHCODES. */
+ elf_link_hash_traverse (elf_hash_table (info),
+ elf_collect_gnu_hash_codes, &cinfo);
+
+ bucketcount
+ = compute_bucket_count (info, cinfo.hashcodes, cinfo.nsyms, 1);
+
+ if (bucketcount == 0)
+ {
+ free (cinfo.hashcodes);
+ return FALSE;
+ }
+
+ s = bfd_get_section_by_name (dynobj, ".gnu.hash");
+ BFD_ASSERT (s != NULL);
+
+ if (cinfo.nsyms == 0)
+ {
+ /* Empty .gnu.hash section is special. */
+ BFD_ASSERT (cinfo.min_dynindx == -1);
+ free (cinfo.hashcodes);
+ s->size = 5 * 4 + bed->s->arch_size / 8;
+ contents = bfd_zalloc (output_bfd, s->size);
+ if (contents == NULL)
+ return FALSE;
+ s->contents = contents;
+ /* 1 empty bucket. */
+ bfd_put_32 (output_bfd, 1, contents);
+ /* SYMIDX above the special symbol 0. */
+ bfd_put_32 (output_bfd, 1, contents + 4);
+ /* Just one word for bitmask. */
+ bfd_put_32 (output_bfd, 1, contents + 8);
+ /* Only hash fn bloom filter. */
+ bfd_put_32 (output_bfd, 0, contents + 12);
+ /* No hashes are valid - empty bitmask. */
+ bfd_put (bed->s->arch_size, output_bfd, 0, contents + 16);
+ /* No hashes in the only bucket. */
+ bfd_put_32 (output_bfd, 0,
+ contents + 16 + bed->s->arch_size / 8);
+ }
+ else
+ {
+ unsigned long int maskwords, maskbitslog2;
+ BFD_ASSERT (cinfo.min_dynindx != -1);
+
+ maskbitslog2 = bfd_log2 (cinfo.nsyms) + 1;
+ if (maskbitslog2 < 3)
+ maskbitslog2 = 5;
+ else if ((1 << (maskbitslog2 - 2)) & cinfo.nsyms)
+ maskbitslog2 = maskbitslog2 + 3;
+ else
+ maskbitslog2 = maskbitslog2 + 2;
+ if (bed->s->arch_size == 64)
+ {
+ if (maskbitslog2 == 5)
+ maskbitslog2 = 6;
+ cinfo.shift1 = 6;
+ }
+ else
+ cinfo.shift1 = 5;
+ cinfo.mask = (1 << cinfo.shift1) - 1;
+ cinfo.shift2 = maskbitslog2;
+ cinfo.maskbits = 1 << maskbitslog2;
+ maskwords = 1 << (maskbitslog2 - cinfo.shift1);
+ amt = bucketcount * sizeof (unsigned long int) * 2;
+ amt += maskwords * sizeof (bfd_vma);
+ cinfo.bitmask = bfd_malloc (amt);
+ if (cinfo.bitmask == NULL)
+ {
+ free (cinfo.hashcodes);
+ return FALSE;
+ }
+
+ cinfo.counts = (void *) (cinfo.bitmask + maskwords);
+ cinfo.indx = cinfo.counts + bucketcount;
+ cinfo.symindx = dynsymcount - cinfo.nsyms;
+ memset (cinfo.bitmask, 0, maskwords * sizeof (bfd_vma));
+
+ /* Determine how often each hash bucket is used. */
+ memset (cinfo.counts, 0, bucketcount * sizeof (cinfo.counts[0]));
+ for (i = 0; i < cinfo.nsyms; ++i)
+ ++cinfo.counts[cinfo.hashcodes[i] % bucketcount];
+
+ for (i = 0, cnt = cinfo.symindx; i < bucketcount; ++i)
+ if (cinfo.counts[i] != 0)
+ {
+ cinfo.indx[i] = cnt;
+ cnt += cinfo.counts[i];
+ }
+ BFD_ASSERT (cnt == dynsymcount);
+ cinfo.bucketcount = bucketcount;
+ cinfo.local_indx = cinfo.min_dynindx;
+
+ s->size = (4 + bucketcount + cinfo.nsyms) * 4;
+ s->size += cinfo.maskbits / 8;
+ contents = bfd_zalloc (output_bfd, s->size);
+ if (contents == NULL)
+ {
+ free (cinfo.bitmask);
+ free (cinfo.hashcodes);
+ return FALSE;
+ }
+
+ s->contents = contents;
+ bfd_put_32 (output_bfd, bucketcount, contents);
+ bfd_put_32 (output_bfd, cinfo.symindx, contents + 4);
+ bfd_put_32 (output_bfd, maskwords, contents + 8);
+ bfd_put_32 (output_bfd, cinfo.shift2, contents + 12);
+ contents += 16 + cinfo.maskbits / 8;
+
+ for (i = 0; i < bucketcount; ++i)
+ {
+ if (cinfo.counts[i] == 0)
+ bfd_put_32 (output_bfd, 0, contents);
+ else
+ bfd_put_32 (output_bfd, cinfo.indx[i], contents);
+ contents += 4;
+ }
+
+ cinfo.contents = contents;
+
+ /* Renumber dynamic symbols, populate .gnu.hash section. */
+ elf_link_hash_traverse (elf_hash_table (info),
+ elf_renumber_gnu_hash_syms, &cinfo);
+
+ contents = s->contents + 16;
+ for (i = 0; i < maskwords; ++i)
+ {
+ bfd_put (bed->s->arch_size, output_bfd, cinfo.bitmask[i],
+ contents);
+ contents += bed->s->arch_size / 8;
+ }
+
+ free (cinfo.bitmask);
+ free (cinfo.hashcodes);
+ }
+ }
s = bfd_get_section_by_name (dynobj, ".dynstr");
BFD_ASSERT (s != NULL);
@@ -5866,6 +6425,719 @@ struct elf_outext_info
struct elf_final_link_info *finfo;
};
+
+/* Support for evaluating a complex relocation.
+
+ Complex relocations are generalized, self-describing relocations. The
+ implementation of them consists of two parts: complex symbols, and the
+ relocations themselves.
+
+ The relocations are use a reserved elf-wide relocation type code (R_RELC
+ external / BFD_RELOC_RELC internal) and an encoding of relocation field
+ information (start bit, end bit, word width, etc) into the addend. This
+ information is extracted from CGEN-generated operand tables within gas.
+
+ Complex symbols are mangled symbols (BSF_RELC external / STT_RELC
+ internal) representing prefix-notation expressions, including but not
+ limited to those sorts of expressions normally encoded as addends in the
+ addend field. The symbol mangling format is:
+
+ <node> := <literal>
+ | <unary-operator> ':' <node>
+ | <binary-operator> ':' <node> ':' <node>
+ ;
+
+ <literal> := 's' <digits=N> ':' <N character symbol name>
+ | 'S' <digits=N> ':' <N character section name>
+ | '#' <hexdigits>
+ ;
+
+ <binary-operator> := as in C
+ <unary-operator> := as in C, plus "0-" for unambiguous negation. */
+
+static void
+set_symbol_value (bfd * bfd_with_globals,
+ struct elf_final_link_info * finfo,
+ int symidx,
+ bfd_vma val)
+{
+ bfd_boolean is_local;
+ Elf_Internal_Sym * sym;
+ struct elf_link_hash_entry ** sym_hashes;
+ struct elf_link_hash_entry * h;
+
+ sym_hashes = elf_sym_hashes (bfd_with_globals);
+ sym = finfo->internal_syms + symidx;
+ is_local = ELF_ST_BIND(sym->st_info) == STB_LOCAL;
+
+ if (is_local)
+ {
+ /* It is a local symbol: move it to the
+ "absolute" section and give it a value. */
+ sym->st_shndx = SHN_ABS;
+ sym->st_value = val;
+ }
+ else
+ {
+ /* It is a global symbol: set its link type
+ to "defined" and give it a value. */
+ h = sym_hashes [symidx];
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ h->root.type = bfd_link_hash_defined;
+ h->root.u.def.value = val;
+ h->root.u.def.section = bfd_abs_section_ptr;
+ }
+}
+
+static bfd_boolean
+resolve_symbol (const char * name,
+ bfd * input_bfd,
+ struct elf_final_link_info * finfo,
+ bfd_vma * result,
+ size_t locsymcount)
+{
+ Elf_Internal_Sym * sym;
+ struct bfd_link_hash_entry * global_entry;
+ const char * candidate = NULL;
+ Elf_Internal_Shdr * symtab_hdr;
+ asection * sec = NULL;
+ size_t i;
+
+ symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
+
+ for (i = 0; i < locsymcount; ++ i)
+ {
+ sym = finfo->internal_syms + i;
+ sec = finfo->sections [i];
+
+ if (ELF_ST_BIND (sym->st_info) != STB_LOCAL)
+ continue;
+
+ candidate = bfd_elf_string_from_elf_section (input_bfd,
+ symtab_hdr->sh_link,
+ sym->st_name);
+#ifdef DEBUG
+ printf ("Comparing string: '%s' vs. '%s' = 0x%x\n",
+ name, candidate, (unsigned int)sym->st_value);
+#endif
+ if (candidate && strcmp (candidate, name) == 0)
+ {
+ * result = sym->st_value;
+
+ if (sym->st_shndx > SHN_UNDEF &&
+ sym->st_shndx < SHN_LORESERVE)
+ {
+#ifdef DEBUG
+ printf ("adjusting for sec '%s' @ 0x%x + 0x%x\n",
+ sec->output_section->name,
+ (unsigned int)sec->output_section->vma,
+ (unsigned int)sec->output_offset);
+#endif
+ * result += sec->output_offset + sec->output_section->vma;
+ }
+#ifdef DEBUG
+ printf ("Found symbol with effective value %8.8x\n", (unsigned int)* result);
+#endif
+ return TRUE;
+ }
+ }
+
+ /* Hmm, haven't found it yet. perhaps it is a global. */
+ global_entry = bfd_link_hash_lookup (finfo->info->hash, name, FALSE, FALSE, TRUE);
+ if (!global_entry)
+ return FALSE;
+
+ if (global_entry->type == bfd_link_hash_defined
+ || global_entry->type == bfd_link_hash_defweak)
+ {
+ * result = global_entry->u.def.value
+ + global_entry->u.def.section->output_section->vma
+ + global_entry->u.def.section->output_offset;
+#ifdef DEBUG
+ printf ("Found GLOBAL symbol '%s' with value %8.8x\n",
+ global_entry->root.string, (unsigned int)*result);
+#endif
+ return TRUE;
+ }
+
+ if (global_entry->type == bfd_link_hash_common)
+ {
+ *result = global_entry->u.def.value +
+ bfd_com_section_ptr->output_section->vma +
+ bfd_com_section_ptr->output_offset;
+#ifdef DEBUG
+ printf ("Found COMMON symbol '%s' with value %8.8x\n",
+ global_entry->root.string, (unsigned int)*result);
+#endif
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bfd_boolean
+resolve_section (const char * name,
+ asection * sections,
+ bfd_vma * result)
+{
+ asection * curr;
+ unsigned int len;
+
+ for (curr = sections; curr; curr = curr->next)
+ if (strcmp (curr->name, name) == 0)
+ {
+ *result = curr->vma;
+ return TRUE;
+ }
+
+ /* Hmm. still haven't found it. try pseudo-section names. */
+ for (curr = sections; curr; curr = curr->next)
+ {
+ len = strlen (curr->name);
+ if (len > strlen (name))
+ continue;
+
+ if (strncmp (curr->name, name, len) == 0)
+ {
+ if (strncmp (".end", name + len, 4) == 0)
+ {
+ *result = curr->vma + curr->size;
+ return TRUE;
+ }
+
+ /* Insert more pseudo-section names here, if you like. */
+ }
+ }
+
+ return FALSE;
+}
+
+static void
+undefined_reference (const char * reftype,
+ const char * name)
+{
+ _bfd_error_handler (_("undefined %s reference in complex symbol: %s"), reftype, name);
+}
+
+static bfd_boolean
+eval_symbol (bfd_vma * result,
+ char * sym,
+ char ** advanced,
+ bfd * input_bfd,
+ struct elf_final_link_info * finfo,
+ bfd_vma addr,
+ bfd_vma section_offset,
+ size_t locsymcount,
+ int signed_p)
+{
+ int len;
+ int symlen;
+ bfd_vma a;
+ bfd_vma b;
+ const int bufsz = 4096;
+ char symbuf [bufsz];
+ const char * symend;
+ bfd_boolean symbol_is_section = FALSE;
+
+ len = strlen (sym);
+ symend = sym + len;
+
+ if (len < 1 || len > bufsz)
+ {
+ bfd_set_error (bfd_error_invalid_operation);
+ return FALSE;
+ }
+
+ switch (* sym)
+ {
+ case '.':
+ * result = addr + section_offset;
+ * advanced = sym + 1;
+ return TRUE;
+
+ case '#':
+ ++ sym;
+ * result = strtoul (sym, advanced, 16);
+ return TRUE;
+
+ case 'S':
+ symbol_is_section = TRUE;
+ case 's':
+ ++ sym;
+ symlen = strtol (sym, &sym, 10);
+ ++ sym; /* Skip the trailing ':'. */
+
+ if ((symend < sym) || ((symlen + 1) > bufsz))
+ {
+ bfd_set_error (bfd_error_invalid_operation);
+ return FALSE;
+ }
+
+ memcpy (symbuf, sym, symlen);
+ symbuf [symlen] = '\0';
+ * advanced = sym + symlen;
+
+ /* Is it always possible, with complex symbols, that gas "mis-guessed"
+ the symbol as a section, or vice-versa. so we're pretty liberal in our
+ interpretation here; section means "try section first", not "must be a
+ section", and likewise with symbol. */
+
+ if (symbol_is_section)
+ {
+ if ((resolve_section (symbuf, finfo->output_bfd->sections, result) != TRUE)
+ && (resolve_symbol (symbuf, input_bfd, finfo, result, locsymcount) != TRUE))
+ {
+ undefined_reference ("section", symbuf);
+ return FALSE;
+ }
+ }
+ else
+ {
+ if ((resolve_symbol (symbuf, input_bfd, finfo, result, locsymcount) != TRUE)
+ && (resolve_section (symbuf, finfo->output_bfd->sections,
+ result) != TRUE))
+ {
+ undefined_reference ("symbol", symbuf);
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+
+ /* All that remains are operators. */
+
+#define UNARY_OP(op) \
+ if (strncmp (sym, #op, strlen (#op)) == 0) \
+ { \
+ sym += strlen (#op); \
+ if (* sym == ':') \
+ ++ sym; \
+ if (eval_symbol (& a, sym, & sym, input_bfd, finfo, addr, \
+ section_offset, locsymcount, signed_p) \
+ != TRUE) \
+ return FALSE; \
+ if (signed_p) \
+ * result = op ((signed)a); \
+ else \
+ * result = op a; \
+ * advanced = sym; \
+ return TRUE; \
+ }
+
+#define BINARY_OP(op) \
+ if (strncmp (sym, #op, strlen (#op)) == 0) \
+ { \
+ sym += strlen (#op); \
+ if (* sym == ':') \
+ ++ sym; \
+ if (eval_symbol (& a, sym, & sym, input_bfd, finfo, addr, \
+ section_offset, locsymcount, signed_p) \
+ != TRUE) \
+ return FALSE; \
+ ++ sym; \
+ if (eval_symbol (& b, sym, & sym, input_bfd, finfo, addr, \
+ section_offset, locsymcount, signed_p) \
+ != TRUE) \
+ return FALSE; \
+ if (signed_p) \
+ * result = ((signed) a) op ((signed) b); \
+ else \
+ * result = a op b; \
+ * advanced = sym; \
+ return TRUE; \
+ }
+
+ default:
+ UNARY_OP (0-);
+ BINARY_OP (<<);
+ BINARY_OP (>>);
+ BINARY_OP (==);
+ BINARY_OP (!=);
+ BINARY_OP (<=);
+ BINARY_OP (>=);
+ BINARY_OP (&&);
+ BINARY_OP (||);
+ UNARY_OP (~);
+ UNARY_OP (!);
+ BINARY_OP (*);
+ BINARY_OP (/);
+ BINARY_OP (%);
+ BINARY_OP (^);
+ BINARY_OP (|);
+ BINARY_OP (&);
+ BINARY_OP (+);
+ BINARY_OP (-);
+ BINARY_OP (<);
+ BINARY_OP (>);
+#undef UNARY_OP
+#undef BINARY_OP
+ _bfd_error_handler (_("unknown operator '%c' in complex symbol"), * sym);
+ bfd_set_error (bfd_error_invalid_operation);
+ return FALSE;
+ }
+}
+
+/* Entry point to evaluator, called from elf_link_input_bfd. */
+
+static bfd_boolean
+evaluate_complex_relocation_symbols (bfd * input_bfd,
+ struct elf_final_link_info * finfo,
+ size_t locsymcount)
+{
+ const struct elf_backend_data * bed;
+ Elf_Internal_Shdr * symtab_hdr;
+ struct elf_link_hash_entry ** sym_hashes;
+ asection * reloc_sec;
+ bfd_boolean result = TRUE;
+
+ /* For each section, we're going to check and see if it has any
+ complex relocations, and we're going to evaluate any of them
+ we can. */
+
+ if (finfo->info->relocatable)
+ return TRUE;
+
+ symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (input_bfd);
+ bed = get_elf_backend_data (input_bfd);
+
+ for (reloc_sec = input_bfd->sections; reloc_sec; reloc_sec = reloc_sec->next)
+ {
+ Elf_Internal_Rela * internal_relocs;
+ unsigned long i;
+
+ /* This section was omitted from the link. */
+ if (! reloc_sec->linker_mark)
+ continue;
+
+ /* Only process sections containing relocs. */
+ if ((reloc_sec->flags & SEC_RELOC) == 0)
+ continue;
+
+ if (reloc_sec->reloc_count == 0)
+ continue;
+
+ /* Read in the relocs for this section. */
+ internal_relocs
+ = _bfd_elf_link_read_relocs (input_bfd, reloc_sec, NULL,
+ (Elf_Internal_Rela *) NULL,
+ FALSE);
+ if (internal_relocs == NULL)
+ continue;
+
+ for (i = reloc_sec->reloc_count; i--;)
+ {
+ Elf_Internal_Rela * rel;
+ char * sym_name;
+ bfd_vma index;
+ Elf_Internal_Sym * sym;
+ bfd_vma result;
+ bfd_vma section_offset;
+ bfd_vma addr;
+ int signed_p = 0;
+
+ rel = internal_relocs + i;
+ section_offset = reloc_sec->output_section->vma
+ + reloc_sec->output_offset;
+ addr = rel->r_offset;
+
+ index = ELF32_R_SYM (rel->r_info);
+ if (bed->s->arch_size == 64)
+ index >>= 24;
+
+ if (index == STN_UNDEF)
+ continue;
+
+ if (index < locsymcount)
+ {
+ /* The symbol is local. */
+ sym = finfo->internal_syms + index;
+
+ /* We're only processing STT_RELC or STT_SRELC type symbols. */
+ if ((ELF_ST_TYPE (sym->st_info) != STT_RELC) &&
+ (ELF_ST_TYPE (sym->st_info) != STT_SRELC))
+ continue;
+
+ sym_name = bfd_elf_string_from_elf_section
+ (input_bfd, symtab_hdr->sh_link, sym->st_name);
+
+ signed_p = (ELF_ST_TYPE (sym->st_info) == STT_SRELC);
+ }
+ else
+ {
+ /* The symbol is global. */
+ struct elf_link_hash_entry * h;
+
+ if (elf_bad_symtab (input_bfd))
+ continue;
+
+ h = sym_hashes [index - locsymcount];
+ while ( h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ if (h->type != STT_RELC && h->type != STT_SRELC)
+ continue;
+
+ signed_p = (h->type == STT_SRELC);
+ sym_name = (char *) h->root.root.string;
+ }
+#ifdef DEBUG
+ printf ("Encountered a complex symbol!");
+ printf (" (input_bfd %s, section %s, reloc %ld\n",
+ input_bfd->filename, reloc_sec->name, i);
+ printf (" symbol: idx %8.8lx, name %s\n",
+ index, sym_name);
+ printf (" reloc : info %8.8lx, addr %8.8lx\n",
+ rel->r_info, addr);
+ printf (" Evaluating '%s' ...\n ", sym_name);
+#endif
+ if (eval_symbol (& result, sym_name, & sym_name, input_bfd,
+ finfo, addr, section_offset, locsymcount,
+ signed_p))
+ /* Symbol evaluated OK. Update to absolute value. */
+ set_symbol_value (input_bfd, finfo, index, result);
+
+ else
+ result = FALSE;
+ }
+
+ if (internal_relocs != elf_section_data (reloc_sec)->relocs)
+ free (internal_relocs);
+ }
+
+ /* If nothing went wrong, then we adjusted
+ everything we wanted to adjust. */
+ return result;
+}
+
+static void
+put_value (bfd_vma size,
+ unsigned long chunksz,
+ bfd * input_bfd,
+ bfd_vma x,
+ bfd_byte * location)
+{
+ location += (size - chunksz);
+
+ for (; size; size -= chunksz, location -= chunksz, x >>= (chunksz * 8))
+ {
+ switch (chunksz)
+ {
+ default:
+ case 0:
+ abort ();
+ case 1:
+ bfd_put_8 (input_bfd, x, location);
+ break;
+ case 2:
+ bfd_put_16 (input_bfd, x, location);
+ break;
+ case 4:
+ bfd_put_32 (input_bfd, x, location);
+ break;
+ case 8:
+#ifdef BFD64
+ bfd_put_64 (input_bfd, x, location);
+#else
+ abort ();
+#endif
+ break;
+ }
+ }
+}
+
+static bfd_vma
+get_value (bfd_vma size,
+ unsigned long chunksz,
+ bfd * input_bfd,
+ bfd_byte * location)
+{
+ bfd_vma x = 0;
+
+ for (; size; size -= chunksz, location += chunksz)
+ {
+ switch (chunksz)
+ {
+ default:
+ case 0:
+ abort ();
+ case 1:
+ x = (x << (8 * chunksz)) | bfd_get_8 (input_bfd, location);
+ break;
+ case 2:
+ x = (x << (8 * chunksz)) | bfd_get_16 (input_bfd, location);
+ break;
+ case 4:
+ x = (x << (8 * chunksz)) | bfd_get_32 (input_bfd, location);
+ break;
+ case 8:
+#ifdef BFD64
+ x = (x << (8 * chunksz)) | bfd_get_64 (input_bfd, location);
+#else
+ abort ();
+#endif
+ break;
+ }
+ }
+ return x;
+}
+
+static void
+decode_complex_addend
+ (unsigned long * start, /* in bits */
+ unsigned long * oplen, /* in bits */
+ unsigned long * len, /* in bits */
+ unsigned long * wordsz, /* in bytes */
+ unsigned long * chunksz, /* in bytes */
+ unsigned long * lsb0_p,
+ unsigned long * signed_p,
+ unsigned long * trunc_p,
+ unsigned long encoded)
+{
+ * start = encoded & 0x3F;
+ * len = (encoded >> 6) & 0x3F;
+ * oplen = (encoded >> 12) & 0x3F;
+ * wordsz = (encoded >> 18) & 0xF;
+ * chunksz = (encoded >> 22) & 0xF;
+ * lsb0_p = (encoded >> 27) & 1;
+ * signed_p = (encoded >> 28) & 1;
+ * trunc_p = (encoded >> 29) & 1;
+}
+
+void
+bfd_elf_perform_complex_relocation
+ (bfd * output_bfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info * info,
+ bfd * input_bfd,
+ asection * input_section,
+ bfd_byte * contents,
+ Elf_Internal_Rela * rel,
+ Elf_Internal_Sym * local_syms,
+ asection ** local_sections)
+{
+ const struct elf_backend_data * bed;
+ Elf_Internal_Shdr * symtab_hdr;
+ asection * sec;
+ bfd_vma relocation = 0, shift, x;
+ bfd_vma r_symndx;
+ bfd_vma mask;
+ unsigned long start, oplen, len, wordsz,
+ chunksz, lsb0_p, signed_p, trunc_p;
+
+ /* Perform this reloc, since it is complex.
+ (this is not to say that it necessarily refers to a complex
+ symbol; merely that it is a self-describing CGEN based reloc.
+ i.e. the addend has the complete reloc information (bit start, end,
+ word size, etc) encoded within it.). */
+ r_symndx = ELF32_R_SYM (rel->r_info);
+ bed = get_elf_backend_data (input_bfd);
+ if (bed->s->arch_size == 64)
+ r_symndx >>= 24;
+
+#ifdef DEBUG
+ printf ("Performing complex relocation %ld...\n", r_symndx);
+#endif
+
+ symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ /* The symbol is local. */
+ Elf_Internal_Sym * sym;
+
+ sym = local_syms + r_symndx;
+ sec = local_sections [r_symndx];
+ relocation = sym->st_value;
+ if (sym->st_shndx > SHN_UNDEF &&
+ sym->st_shndx < SHN_LORESERVE)
+ relocation += (sec->output_offset +
+ sec->output_section->vma);
+ }
+ else
+ {
+ /* The symbol is global. */
+ struct elf_link_hash_entry **sym_hashes;
+ struct elf_link_hash_entry * h;
+
+ sym_hashes = elf_sym_hashes (input_bfd);
+ h = sym_hashes [r_symndx];
+
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ {
+ sec = h->root.u.def.section;
+ relocation = h->root.u.def.value;
+
+ if (! bfd_is_abs_section (sec))
+ relocation += (sec->output_section->vma
+ + sec->output_offset);
+ }
+ if (h->root.type == bfd_link_hash_undefined
+ && !((*info->callbacks->undefined_symbol)
+ (info, h->root.root.string, input_bfd,
+ input_section, rel->r_offset,
+ info->unresolved_syms_in_objects == RM_GENERATE_ERROR
+ || ELF_ST_VISIBILITY (h->other))))
+ return;
+ }
+
+ decode_complex_addend (& start, & oplen, & len, & wordsz,
+ & chunksz, & lsb0_p, & signed_p,
+ & trunc_p, rel->r_addend);
+
+ mask = (((1L << (len - 1)) - 1) << 1) | 1;
+
+ if (lsb0_p)
+ shift = (start + 1) - len;
+ else
+ shift = (8 * wordsz) - (start + len);
+
+ x = get_value (wordsz, chunksz, input_bfd, contents + rel->r_offset);
+
+#ifdef DEBUG
+ printf ("Doing complex reloc: "
+ "lsb0? %ld, signed? %ld, trunc? %ld, wordsz %ld, "
+ "chunksz %ld, start %ld, len %ld, oplen %ld\n"
+ " dest: %8.8lx, mask: %8.8lx, reloc: %8.8lx\n",
+ lsb0_p, signed_p, trunc_p, wordsz, chunksz, start, len,
+ oplen, x, mask, relocation);
+#endif
+
+ if (! trunc_p)
+ {
+ /* Now do an overflow check. */
+ if (bfd_check_overflow ((signed_p ?
+ complain_overflow_signed :
+ complain_overflow_unsigned),
+ len, 0, (8 * wordsz),
+ relocation) == bfd_reloc_overflow)
+ (*_bfd_error_handler)
+ ("%s (%s + 0x%lx): relocation overflow: 0x%lx %sdoes not fit "
+ "within 0x%lx",
+ input_bfd->filename, input_section->name, rel->r_offset,
+ relocation, (signed_p ? "(signed) " : ""), mask);
+ }
+
+ /* Do the deed. */
+ x = (x & ~(mask << shift)) | ((relocation & mask) << shift);
+
+#ifdef DEBUG
+ printf (" relocation: %8.8lx\n"
+ " shifted mask: %8.8lx\n"
+ " shifted/masked reloc: %8.8lx\n"
+ " result: %8.8lx\n",
+ relocation, (mask << shift),
+ ((relocation & mask) << shift), x);
+#endif
+ put_value (wordsz, chunksz, input_bfd, x, contents + rel->r_offset);
+}
+
/* When performing a relocatable link, the input relocations are
preserved. But, if they reference global symbols, the indices
referenced must be updated. Update all the relocations in
@@ -5994,7 +7266,9 @@ elf_link_sort_cmp2 (const void *A, const void *B)
static size_t
elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
{
- asection *reldyn;
+ asection *dynamic_relocs;
+ asection *rela_dyn;
+ asection *rel_dyn;
bfd_size_type count, size;
size_t i, ret, sort_elt, ext_size;
bfd_byte *sort, *s_non_relative, *p;
@@ -6005,39 +7279,170 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
struct bfd_link_order *lo;
bfd_vma r_sym_mask;
+ bfd_boolean use_rela;
- reldyn = bfd_get_section_by_name (abfd, ".rela.dyn");
- if (reldyn == NULL || reldyn->size == 0)
+ /* Find a dynamic reloc section. */
+ rela_dyn = bfd_get_section_by_name (abfd, ".rela.dyn");
+ rel_dyn = bfd_get_section_by_name (abfd, ".rel.dyn");
+ if (rela_dyn != NULL && rela_dyn->size > 0
+ && rel_dyn != NULL && rel_dyn->size > 0)
{
- reldyn = bfd_get_section_by_name (abfd, ".rel.dyn");
- if (reldyn == NULL || reldyn->size == 0)
- return 0;
- ext_size = bed->s->sizeof_rel;
- swap_in = bed->s->swap_reloc_in;
- swap_out = bed->s->swap_reloc_out;
+ bfd_boolean use_rela_initialised = FALSE;
+
+ /* This is just here to stop gcc from complaining.
+ It's initialization checking code is not perfect. */
+ use_rela = TRUE;
+
+ /* Both sections are present. Examine the sizes
+ of the indirect sections to help us choose. */
+ for (lo = rela_dyn->map_head.link_order; lo != NULL; lo = lo->next)
+ if (lo->type == bfd_indirect_link_order)
+ {
+ asection *o = lo->u.indirect.section;
+
+ if ((o->size % bed->s->sizeof_rela) == 0)
+ {
+ if ((o->size % bed->s->sizeof_rel) == 0)
+ /* Section size is divisible by both rel and rela sizes.
+ It is of no help to us. */
+ ;
+ else
+ {
+ /* Section size is only divisible by rela. */
+ if (use_rela_initialised && (use_rela == FALSE))
+ {
+ _bfd_error_handler
+ (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
+ bfd_set_error (bfd_error_invalid_operation);
+ return 0;
+ }
+ else
+ {
+ use_rela = TRUE;
+ use_rela_initialised = TRUE;
+ }
+ }
+ }
+ else if ((o->size % bed->s->sizeof_rel) == 0)
+ {
+ /* Section size is only divisible by rel. */
+ if (use_rela_initialised && (use_rela == TRUE))
+ {
+ _bfd_error_handler
+ (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
+ bfd_set_error (bfd_error_invalid_operation);
+ return 0;
+ }
+ else
+ {
+ use_rela = FALSE;
+ use_rela_initialised = TRUE;
+ }
+ }
+ else
+ {
+ /* The section size is not divisible by either - something is wrong. */
+ _bfd_error_handler
+ (_("%B: Unable to sort relocs - they are of an unknown size"), abfd);
+ bfd_set_error (bfd_error_invalid_operation);
+ return 0;
+ }
+ }
+
+ for (lo = rel_dyn->map_head.link_order; lo != NULL; lo = lo->next)
+ if (lo->type == bfd_indirect_link_order)
+ {
+ asection *o = lo->u.indirect.section;
+
+ if ((o->size % bed->s->sizeof_rela) == 0)
+ {
+ if ((o->size % bed->s->sizeof_rel) == 0)
+ /* Section size is divisible by both rel and rela sizes.
+ It is of no help to us. */
+ ;
+ else
+ {
+ /* Section size is only divisible by rela. */
+ if (use_rela_initialised && (use_rela == FALSE))
+ {
+ _bfd_error_handler
+ (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
+ bfd_set_error (bfd_error_invalid_operation);
+ return 0;
+ }
+ else
+ {
+ use_rela = TRUE;
+ use_rela_initialised = TRUE;
+ }
+ }
+ }
+ else if ((o->size % bed->s->sizeof_rel) == 0)
+ {
+ /* Section size is only divisible by rel. */
+ if (use_rela_initialised && (use_rela == TRUE))
+ {
+ _bfd_error_handler
+ (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
+ bfd_set_error (bfd_error_invalid_operation);
+ return 0;
+ }
+ else
+ {
+ use_rela = FALSE;
+ use_rela_initialised = TRUE;
+ }
+ }
+ else
+ {
+ /* The section size is not divisible by either - something is wrong. */
+ _bfd_error_handler
+ (_("%B: Unable to sort relocs - they are of an unknown size"), abfd);
+ bfd_set_error (bfd_error_invalid_operation);
+ return 0;
+ }
+ }
+
+ if (! use_rela_initialised)
+ /* Make a guess. */
+ use_rela = TRUE;
}
+ else if (rela_dyn != NULL && rela_dyn->size > 0)
+ use_rela = TRUE;
+ else if (rel_dyn != NULL && rel_dyn->size > 0)
+ use_rela = FALSE;
else
+ return 0;
+
+ if (use_rela)
{
+ dynamic_relocs = rela_dyn;
ext_size = bed->s->sizeof_rela;
swap_in = bed->s->swap_reloca_in;
swap_out = bed->s->swap_reloca_out;
}
- count = reldyn->size / ext_size;
+ else
+ {
+ dynamic_relocs = rel_dyn;
+ ext_size = bed->s->sizeof_rel;
+ swap_in = bed->s->swap_reloc_in;
+ swap_out = bed->s->swap_reloc_out;
+ }
size = 0;
- for (lo = reldyn->map_head.link_order; lo != NULL; lo = lo->next)
+ for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
if (lo->type == bfd_indirect_link_order)
- {
- asection *o = lo->u.indirect.section;
- size += o->size;
- }
+ size += lo->u.indirect.section->size;
- if (size != reldyn->size)
+ if (size != dynamic_relocs->size)
return 0;
sort_elt = (sizeof (struct elf_link_sort_rela)
+ (i2e - 1) * sizeof (Elf_Internal_Rela));
+
+ count = dynamic_relocs->size / ext_size;
sort = bfd_zmalloc (sort_elt * count);
+
if (sort == NULL)
{
(*info->callbacks->warning)
@@ -6050,7 +7455,7 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
else
r_sym_mask = ~(bfd_vma) 0xffffffff;
- for (lo = reldyn->map_head.link_order; lo != NULL; lo = lo->next)
+ for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
if (lo->type == bfd_indirect_link_order)
{
bfd_byte *erel, *erelend;
@@ -6067,9 +7472,11 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
erel = o->contents;
erelend = o->contents + o->size;
p = sort + o->output_offset / ext_size * sort_elt;
+
while (erel < erelend)
{
struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
+
(*swap_in) (abfd, erel, s->rela);
s->type = (*bed->elf_backend_reloc_type_class) (s->rela);
s->u.sym_mask = r_sym_mask;
@@ -6100,7 +7507,7 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2);
- for (lo = reldyn->map_head.link_order; lo != NULL; lo = lo->next)
+ for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
if (lo->type == bfd_indirect_link_order)
{
bfd_byte *erel, *erelend;
@@ -6119,7 +7526,7 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
}
free (sort);
- *psec = reldyn;
+ *psec = dynamic_relocs;
return ret;
}
@@ -6657,11 +8064,6 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
if (h->dynindx != -1
&& elf_hash_table (finfo->info)->dynamic_sections_created)
{
- size_t bucketcount;
- size_t bucket;
- size_t hash_entry_size;
- bfd_byte *bucketpos;
- bfd_vma chain;
bfd_byte *esym;
sym.st_name = h->dynstr_index;
@@ -6673,17 +8075,27 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
}
bed->s->swap_symbol_out (finfo->output_bfd, &sym, esym, 0);
- bucketcount = elf_hash_table (finfo->info)->bucketcount;
- bucket = h->u.elf_hash_value % bucketcount;
- hash_entry_size
- = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
- bucketpos = ((bfd_byte *) finfo->hash_sec->contents
- + (bucket + 2) * hash_entry_size);
- chain = bfd_get (8 * hash_entry_size, finfo->output_bfd, bucketpos);
- bfd_put (8 * hash_entry_size, finfo->output_bfd, h->dynindx, bucketpos);
- bfd_put (8 * hash_entry_size, finfo->output_bfd, chain,
- ((bfd_byte *) finfo->hash_sec->contents
- + (bucketcount + 2 + h->dynindx) * hash_entry_size));
+ if (finfo->hash_sec != NULL)
+ {
+ size_t hash_entry_size;
+ bfd_byte *bucketpos;
+ bfd_vma chain;
+ size_t bucketcount;
+ size_t bucket;
+
+ bucketcount = elf_hash_table (finfo->info)->bucketcount;
+ bucket = h->u.elf_hash_value % bucketcount;
+
+ hash_entry_size
+ = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
+ bucketpos = ((bfd_byte *) finfo->hash_sec->contents
+ + (bucket + 2) * hash_entry_size);
+ chain = bfd_get (8 * hash_entry_size, finfo->output_bfd, bucketpos);
+ bfd_put (8 * hash_entry_size, finfo->output_bfd, h->dynindx, bucketpos);
+ bfd_put (8 * hash_entry_size, finfo->output_bfd, chain,
+ ((bfd_byte *) finfo->hash_sec->contents
+ + (bucketcount + 2 + h->dynindx) * hash_entry_size));
+ }
if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL)
{
@@ -6784,14 +8196,15 @@ _bfd_elf_default_action_discarded (asection *sec)
/* Find a match between a section and a member of a section group. */
static asection *
-match_group_member (asection *sec, asection *group)
+match_group_member (asection *sec, asection *group,
+ struct bfd_link_info *info)
{
asection *first = elf_next_in_group (group);
asection *s = first;
while (s != NULL)
{
- if (bfd_elf_match_symbols_in_sections (s, sec))
+ if (bfd_elf_match_symbols_in_sections (s, sec, info))
return s;
s = elf_next_in_group (s);
@@ -6803,21 +8216,22 @@ match_group_member (asection *sec, asection *group)
}
/* Check if the kept section of a discarded section SEC can be used
- to replace it. Return the replacement if it is OK. Otherwise return
- NULL. */
+ to replace it. Return the replacement if it is OK. Otherwise return
+ NULL. */
asection *
-_bfd_elf_check_kept_section (asection *sec)
+_bfd_elf_check_kept_section (asection *sec, struct bfd_link_info *info)
{
asection *kept;
kept = sec->kept_section;
if (kept != NULL)
{
- if (elf_sec_group (sec) != NULL)
- kept = match_group_member (sec, kept);
+ if ((kept->flags & SEC_GROUP) != 0)
+ kept = match_group_member (sec, kept, info);
if (kept != NULL && sec->size != kept->size)
kept = NULL;
+ sec->kept_section = kept;
}
return kept;
}
@@ -6830,7 +8244,7 @@ _bfd_elf_check_kept_section (asection *sec)
static bfd_boolean
elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
{
- bfd_boolean (*relocate_section)
+ int (*relocate_section)
(bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
bfd *output_bfd;
@@ -6844,7 +8258,6 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
asection **ppsection;
asection *o;
const struct elf_backend_data *bed;
- bfd_boolean emit_relocs;
struct elf_link_hash_entry **sym_hashes;
output_bfd = finfo->output_bfd;
@@ -6857,9 +8270,6 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
if ((input_bfd->flags & DYNAMIC) != 0)
return TRUE;
- emit_relocs = (finfo->info->relocatable
- || finfo->info->emitrelocations);
-
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
if (elf_bad_symtab (input_bfd))
{
@@ -6883,6 +8293,15 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
if (isymbuf == NULL)
return FALSE;
}
+ /* evaluate_complex_relocation_symbols looks for symbols in
+ finfo->internal_syms. */
+ else if (isymbuf != NULL && locsymcount != 0)
+ {
+ bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
+ finfo->internal_syms,
+ finfo->external_syms,
+ finfo->locsym_shndx);
+ }
/* Find local symbol sections and adjust values of symbols in
SEC_MERGE sections. Write out those local symbols we know are
@@ -7020,6 +8439,9 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
return FALSE;
}
+ if (! evaluate_complex_relocation_symbols (input_bfd, finfo, locsymcount))
+ return FALSE;
+
/* Relocate the contents of each section. */
sym_hashes = elf_sym_hashes (input_bfd);
for (o = input_bfd->sections; o != NULL; o = o->next)
@@ -7063,6 +8485,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
Elf_Internal_Rela *internal_relocs;
bfd_vma r_type_mask;
int r_sym_shift;
+ int ret;
/* Get the swapped relocs. */
internal_relocs
@@ -7168,23 +8591,14 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
{
asection *kept;
- kept = _bfd_elf_check_kept_section (sec);
+ kept = _bfd_elf_check_kept_section (sec,
+ finfo->info);
if (kept != NULL)
{
*ps = kept;
continue;
}
}
-
- /* Remove the symbol reference from the reloc, but
- don't kill the reloc completely. This is so that
- a zero value will be written into the section,
- which may have non-zero contents put there by the
- assembler. Zero in things like an eh_frame fde
- pc_begin allows stack unwinders to recognize the
- fde as bogus. */
- rel->r_info &= r_type_mask;
- rel->r_addend = 0;
}
}
}
@@ -7209,14 +8623,17 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
corresponding to the output section, which will require
the addend to be adjusted. */
- if (! (*relocate_section) (output_bfd, finfo->info,
+ ret = (*relocate_section) (output_bfd, finfo->info,
input_bfd, o, contents,
internal_relocs,
isymbuf,
- finfo->sections))
+ finfo->sections);
+ if (!ret)
return FALSE;
- if (emit_relocs)
+ if (ret == 2
+ || finfo->info->relocatable
+ || finfo->info->emitrelocations)
{
Elf_Internal_Rela *irela;
Elf_Internal_Rela *irelaend;
@@ -7263,7 +8680,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
/* This is a reloc for a deleted entry or somesuch.
Turn it into an R_*_NONE reloc, at the same
offset as the last reloc. elf_eh_frame.c and
- elf_bfd_discard_info rely on reloc offsets
+ bfd_elf_discard_info rely on reloc offsets
being ordered. */
irela->r_offset = last_offset;
irela->r_info = 0;
@@ -7338,8 +8755,10 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
/* If we have discarded a section, the output
section will be the absolute section. In
- case of discarded link-once and discarded
- SEC_MERGE sections, use the kept section. */
+ case of discarded SEC_MERGE sections, use
+ the kept section. relocate_section should
+ have already handled discarded linkonce
+ sections. */
if (bfd_is_abs_section (osec)
&& sec->kept_section != NULL
&& sec->kept_section->output_section != NULL)
@@ -7351,6 +8770,24 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
if (!bfd_is_abs_section (osec))
{
r_symndx = osec->target_index;
+ if (r_symndx == 0)
+ {
+ struct elf_link_hash_table *htab;
+ asection *oi;
+
+ htab = elf_hash_table (finfo->info);
+ oi = htab->text_index_section;
+ if ((osec->flags & SEC_READONLY) == 0
+ && htab->data_index_section != NULL)
+ oi = htab->data_index_section;
+
+ if (oi != NULL)
+ {
+ irela->r_addend += osec->vma - oi->vma;
+ r_symndx = oi->target_index;
+ }
+ }
+
BFD_ASSERT (r_symndx != 0);
}
}
@@ -7446,7 +8883,8 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
/* Write out the modified section contents. */
if (bed->elf_backend_write_section
- && (*bed->elf_backend_write_section) (output_bfd, o, contents))
+ && (*bed->elf_backend_write_section) (output_bfd, finfo->info, o,
+ contents))
{
/* Section written out. */
}
@@ -7828,6 +9266,9 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
size_t relativecount = 0;
asection *reldyn = 0;
bfd_size_type amt;
+ asection *attr_section = NULL;
+ bfd_vma attr_size = 0;
+ const char *std_attrs_section;
if (! is_elf_hash_table (info->hash))
return FALSE;
@@ -7857,7 +9298,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
{
finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
- BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
+ BFD_ASSERT (finfo.dynsym_sec != NULL);
finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version");
/* Note that it is OK if symver_sec is NULL. */
}
@@ -7875,6 +9316,40 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
finfo.symbuf_count = 0;
finfo.shndxbuf_size = 0;
+ /* The object attributes have been merged. Remove the input
+ sections from the link, and set the contents of the output
+ secton. */
+ std_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section;
+ for (o = abfd->sections; o != NULL; o = o->next)
+ {
+ if ((std_attrs_section && strcmp (o->name, std_attrs_section) == 0)
+ || strcmp (o->name, ".gnu.attributes") == 0)
+ {
+ for (p = o->map_head.link_order; p != NULL; p = p->next)
+ {
+ asection *input_section;
+
+ if (p->type != bfd_indirect_link_order)
+ continue;
+ input_section = p->u.indirect.section;
+ /* Hack: reset the SEC_HAS_CONTENTS flag so that
+ elf_link_input_bfd ignores this section. */
+ input_section->flags &= ~SEC_HAS_CONTENTS;
+ }
+
+ attr_size = bfd_elf_obj_attr_size (abfd);
+ if (attr_size)
+ {
+ bfd_set_section_size (abfd, o, attr_size);
+ attr_section = o;
+ /* Skip this section later on. */
+ o->map_head.link_order = NULL;
+ }
+ else
+ o->flags |= SEC_EXCLUDE;
+ }
+ }
+
/* Count up the number of relocations we will output for each output
section, so that we know the sizes of the reloc sections. We
also figure out some maximum sizes. */
@@ -7920,13 +9395,18 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
{
Elf_Internal_Rela * relocs;
- relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
+ relocs = _bfd_elf_link_read_relocs (sec->owner, sec,
+ NULL, NULL,
info->keep_memory);
- reloc_count = (*bed->elf_backend_count_relocs) (sec, relocs);
+ if (relocs != NULL)
+ {
+ reloc_count
+ = (*bed->elf_backend_count_relocs) (sec, relocs);
- if (elf_section_data (o)->relocs != relocs)
- free (relocs);
+ if (elf_section_data (sec)->relocs != relocs)
+ free (relocs);
+ }
}
if (sec->rawsize > max_contents_size)
@@ -8141,18 +9621,19 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
elfsym.st_size = 0;
elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
elfsym.st_other = 0;
+ elfsym.st_value = 0;
for (i = 1; i < elf_numsections (abfd); i++)
{
o = bfd_section_from_elf_index (abfd, i);
if (o != NULL)
- o->target_index = bfd_get_symcount (abfd);
- elfsym.st_shndx = i;
- if (info->relocatable || o == NULL)
- elfsym.st_value = 0;
- else
- elfsym.st_value = o->vma;
- if (! elf_link_output_sym (&finfo, NULL, &elfsym, o, NULL))
- goto error_return;
+ {
+ o->target_index = bfd_get_symcount (abfd);
+ elfsym.st_shndx = i;
+ if (!info->relocatable)
+ elfsym.st_value = o->vma;
+ if (!elf_link_output_sym (&finfo, NULL, &elfsym, o, NULL))
+ goto error_return;
+ }
if (i == SHN_LORESERVE - 1)
i += SHN_HIRESERVE + 1 - SHN_LORESERVE;
}
@@ -8298,6 +9779,18 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
}
}
+ /* Free symbol buffer if needed. */
+ if (!info->reduce_memory_overheads)
+ {
+ for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
+ if (bfd_get_flavour (sub) == bfd_target_elf_flavour
+ && elf_tdata (sub)->symbuf)
+ {
+ free (elf_tdata (sub)->symbuf);
+ elf_tdata (sub)->symbuf = NULL;
+ }
+ }
+
/* Output any global symbols that got converted to local in a
version script or due to symbol visibility. We do this in a
separate step since ELF requires all local symbols to appear
@@ -8312,6 +9805,19 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
if (eoinfo.failed)
return FALSE;
+ /* If backend needs to output some local symbols not present in the hash
+ table, do it now. */
+ if (bed->elf_backend_output_arch_local_syms)
+ {
+ typedef bfd_boolean (*out_sym_func)
+ (void *, const char *, Elf_Internal_Sym *, asection *,
+ struct elf_link_hash_entry *);
+
+ if (! ((*bed->elf_backend_output_arch_local_syms)
+ (abfd, info, &finfo, (out_sym_func) elf_link_output_sym)))
+ return FALSE;
+ }
+
/* That wrote out all the local symbols. Finish up the symbol table
with the global symbols. Even if we want to strip everything we
can, we still need to deal with those global symbols that got
@@ -8603,6 +10109,9 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
case DT_HASH:
name = ".hash";
goto get_vma;
+ case DT_GNU_HASH:
+ name = ".gnu.hash";
+ goto get_vma;
case DT_STRTAB:
name = ".dynstr";
goto get_vma;
@@ -8686,8 +10195,8 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
if (dyn.d_tag == DT_TEXTREL)
{
- _bfd_error_handler
- (_("warning: creating a DT_TEXTREL in a shared object."));
+ info->callbacks->einfo
+ (_("%P: warning: creating a DT_TEXTREL in a shared object.\n"));
break;
}
}
@@ -8785,6 +10294,16 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
elf_tdata (abfd)->linker = TRUE;
+ if (attr_section)
+ {
+ bfd_byte *contents = bfd_malloc (attr_size);
+ if (contents == NULL)
+ goto error_return;
+ bfd_elf_set_obj_attr_contents (abfd, contents, attr_size);
+ bfd_set_section_contents (abfd, attr_section, contents, 0, attr_size);
+ free (contents);
+ }
+
return TRUE;
error_return:
@@ -8822,18 +10341,44 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
/* Garbage collect unused sections. */
+/* Default gc_mark_hook. */
+
+asection *
+_bfd_elf_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
+{
+ if (h != NULL)
+ {
+ switch (h->root.type)
+ {
+ case bfd_link_hash_defined:
+ case bfd_link_hash_defweak:
+ return h->root.u.def.section;
+
+ case bfd_link_hash_common:
+ return h->root.u.c.p->section;
+
+ default:
+ break;
+ }
+ }
+ else
+ return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+
+ return NULL;
+}
+
/* The mark phase of garbage collection. For a given section, mark
it and any sections in this section's group, and all the sections
which define symbols to which it refers. */
-typedef asection * (*gc_mark_hook_fn)
- (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
- struct elf_link_hash_entry *, Elf_Internal_Sym *);
-
bfd_boolean
_bfd_elf_gc_mark (struct bfd_link_info *info,
asection *sec,
- gc_mark_hook_fn gc_mark_hook)
+ elf_gc_mark_hook_fn gc_mark_hook)
{
bfd_boolean ret;
bfd_boolean is_eh;
@@ -8954,7 +10499,8 @@ _bfd_elf_gc_mark (struct bfd_link_info *info,
/* Sweep symbols in swept sections. Called via elf_link_hash_traverse. */
-struct elf_gc_sweep_symbol_info {
+struct elf_gc_sweep_symbol_info
+{
struct bfd_link_info *info;
void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
bfd_boolean);
@@ -9017,6 +10563,9 @@ elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
to remove a section from the output. */
o->flags |= SEC_EXCLUDE;
+ if (info->print_gc_sections && o->size != 0)
+ _bfd_error_handler (_("Removing unused section '%s' in file '%B'"), sub, o->name);
+
/* But we also have to update some of the relocation
info we collected before. */
if (gc_sweep_hook
@@ -9198,9 +10747,7 @@ bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
{
bfd_boolean ok = TRUE;
bfd *sub;
- asection * (*gc_mark_hook)
- (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
- struct elf_link_hash_entry *h, Elf_Internal_Sym *);
+ elf_gc_mark_hook_fn gc_mark_hook;
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
if (!bed->can_gc_sections
@@ -9242,11 +10789,15 @@ bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
continue;
for (o = sub->sections; o != NULL; o = o->next)
- if ((o->flags & SEC_KEEP) != 0 && !o->gc_mark)
+ if ((o->flags & (SEC_EXCLUDE | SEC_KEEP)) == SEC_KEEP && !o->gc_mark)
if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
return FALSE;
}
+ /* Allow the backend to mark additional target specific sections. */
+ if (bed->gc_mark_extra_sections)
+ bed->gc_mark_extra_sections(info, gc_mark_hook);
+
/* ... again for sections marked from eh_frame. */
for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
{
@@ -9262,30 +10813,38 @@ bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
easily due to needing special relocs to handle the
difference of two symbols in separate sections.
Don't keep code sections referenced by .eh_frame. */
+#define TEXT_PREFIX ".text."
+#define TEXT_PREFIX2 ".gnu.linkonce.t."
+#define GCC_EXCEPT_TABLE_PREFIX ".gcc_except_table."
for (o = sub->sections; o != NULL; o = o->next)
if (!o->gc_mark && o->gc_mark_from_eh && (o->flags & SEC_CODE) == 0)
{
- if (strncmp (o->name, ".gcc_except_table.", 18) == 0)
+ if (CONST_STRNEQ (o->name, GCC_EXCEPT_TABLE_PREFIX))
{
- unsigned long len;
char *fn_name;
+ const char *sec_name;
asection *fn_text;
-
- len = strlen (o->name + 18) + 1;
- fn_name = bfd_malloc (len + 16);
+ unsigned o_name_prefix_len , fn_name_prefix_len, tmp;
+
+ o_name_prefix_len = strlen (GCC_EXCEPT_TABLE_PREFIX);
+ sec_name = o->name + o_name_prefix_len;
+ fn_name_prefix_len = strlen (TEXT_PREFIX);
+ tmp = strlen (TEXT_PREFIX2);
+ if (tmp > fn_name_prefix_len)
+ fn_name_prefix_len = tmp;
+ fn_name
+ = bfd_malloc (fn_name_prefix_len + strlen (sec_name) + 1);
if (fn_name == NULL)
return FALSE;
/* Try the first prefix. */
- memcpy (fn_name, ".text.", 6);
- memcpy (fn_name + 6, o->name + 18, len);
+ sprintf (fn_name, "%s%s", TEXT_PREFIX, sec_name);
fn_text = bfd_get_section_by_name (sub, fn_name);
/* Try the second prefix. */
if (fn_text == NULL)
{
- memcpy (fn_name, ".gnu.linkonce.t.", 16);
- memcpy (fn_name + 16, o->name + 18, len);
+ sprintf (fn_name, "%s%s", TEXT_PREFIX2, sec_name);
fn_text = bfd_get_section_by_name (sub, fn_name);
}
@@ -9637,12 +11196,15 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
if ((abfd->flags & DYNAMIC) != 0)
continue;
- eh = bfd_get_section_by_name (abfd, ".eh_frame");
- if (info->relocatable
- || (eh != NULL
+ eh = NULL;
+ if (!info->relocatable)
+ {
+ eh = bfd_get_section_by_name (abfd, ".eh_frame");
+ if (eh != NULL
&& (eh->size == 0
- || bfd_is_abs_section (eh->output_section))))
- eh = NULL;
+ || bfd_is_abs_section (eh->output_section)))
+ eh = NULL;
+ }
stab = bfd_get_section_by_name (abfd, ".stab");
if (stab != NULL
@@ -9683,7 +11245,10 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
cookie.locsymcount, 0,
NULL, NULL, NULL);
if (cookie.locsyms == NULL)
- return FALSE;
+ {
+ info->callbacks->einfo (_("%P%X: can not read symbols: %E\n"));
+ return FALSE;
+ }
}
if (stab != NULL)
@@ -9753,39 +11318,28 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
}
void
-_bfd_elf_section_already_linked (bfd *abfd, struct bfd_section * sec)
+_bfd_elf_section_already_linked (bfd *abfd, struct bfd_section *sec,
+ struct bfd_link_info *info)
{
flagword flags;
const char *name, *p;
struct bfd_section_already_linked *l;
struct bfd_section_already_linked_hash_entry *already_linked_list;
- asection *group;
- /* A single member comdat group section may be discarded by a
- linkonce section. See below. */
if (sec->output_section == bfd_abs_section_ptr)
return;
flags = sec->flags;
- /* Check if it belongs to a section group. */
- group = elf_sec_group (sec);
-
- /* Return if it isn't a linkonce section nor a member of a group. A
- comdat group section also has SEC_LINK_ONCE set. */
- if ((flags & SEC_LINK_ONCE) == 0 && group == NULL)
+ /* Return if it isn't a linkonce section. A comdat group section
+ also has SEC_LINK_ONCE set. */
+ if ((flags & SEC_LINK_ONCE) == 0)
return;
- if (group)
- {
- /* If this is the member of a single member comdat group, check if
- the group should be discarded. */
- if (elf_next_in_group (sec) == sec
- && (group->flags & SEC_LINK_ONCE) != 0)
- sec = group;
- else
- return;
- }
+ /* Don't put group member sections on our list of already linked
+ sections. They are handled as a group via their group section. */
+ if (elf_sec_group (sec) != NULL)
+ return;
/* FIXME: When doing a relocatable link, we may have trouble
copying relocations in other sections that refer to local symbols
@@ -9806,7 +11360,7 @@ _bfd_elf_section_already_linked (bfd *abfd, struct bfd_section * sec)
name = bfd_get_section_name (abfd, sec);
- if (strncmp (name, ".gnu.linkonce.", sizeof (".gnu.linkonce.") - 1) == 0
+ if (CONST_STRNEQ (name, ".gnu.linkonce.")
&& (p = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
p++;
else
@@ -9816,11 +11370,8 @@ _bfd_elf_section_already_linked (bfd *abfd, struct bfd_section * sec)
for (l = already_linked_list->entry; l != NULL; l = l->next)
{
- /* We may have 3 different sections on the list: group section,
- comdat section and linkonce section. SEC may be a linkonce or
- group section. We match a group section with a group section,
- a linkonce section with a linkonce section, and ignore comdat
- section. */
+ /* We may have 2 different types of sections on the list: group
+ sections and linkonce sections. Match like sections. */
if ((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
&& strcmp (name, l->sec->name) == 0
&& bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL)
@@ -9908,31 +11459,28 @@ _bfd_elf_section_already_linked (bfd *abfd, struct bfd_section * sec)
}
}
- if (group)
+ /* A single member comdat group section may be discarded by a
+ linkonce section and vice versa. */
+
+ if ((flags & SEC_GROUP) != 0)
{
- /* If this is the member of a single member comdat group and the
- group hasn't be discarded, we check if it matches a linkonce
- section. We only record the discarded comdat group. Otherwise
- the undiscarded group will be discarded incorrectly later since
- itself has been recorded. */
- for (l = already_linked_list->entry; l != NULL; l = l->next)
- if ((l->sec->flags & SEC_GROUP) == 0
- && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL
- && bfd_elf_match_symbols_in_sections (l->sec,
- elf_next_in_group (sec)))
- {
- elf_next_in_group (sec)->output_section = bfd_abs_section_ptr;
- elf_next_in_group (sec)->kept_section = l->sec;
- group->output_section = bfd_abs_section_ptr;
- break;
- }
- if (l == NULL)
- return;
+ asection *first = elf_next_in_group (sec);
+
+ if (first != NULL && elf_next_in_group (first) == first)
+ /* Check this single member group against linkonce sections. */
+ for (l = already_linked_list->entry; l != NULL; l = l->next)
+ if ((l->sec->flags & SEC_GROUP) == 0
+ && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL
+ && bfd_elf_match_symbols_in_sections (l->sec, first, info))
+ {
+ first->output_section = bfd_abs_section_ptr;
+ first->kept_section = l->sec;
+ sec->output_section = bfd_abs_section_ptr;
+ break;
+ }
}
else
- /* There is no direct match. But for linkonce section, we should
- check if there is a match with comdat group member. We always
- record the linkonce section, discarded or not. */
+ /* Check this linkonce section against single member groups. */
for (l = already_linked_list->entry; l != NULL; l = l->next)
if (l->sec->flags & SEC_GROUP)
{
@@ -9940,10 +11488,10 @@ _bfd_elf_section_already_linked (bfd *abfd, struct bfd_section * sec)
if (first != NULL
&& elf_next_in_group (first) == first
- && bfd_elf_match_symbols_in_sections (first, sec))
+ && bfd_elf_match_symbols_in_sections (first, sec, info))
{
sec->output_section = bfd_abs_section_ptr;
- sec->kept_section = l->sec;
+ sec->kept_section = first;
break;
}
}
diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c
index b1211f0c65e5..e0994a0dd068 100644
--- a/bfd/elfn32-mips.c
+++ b/bfd/elfn32-mips.c
@@ -1,6 +1,6 @@
/* MIPS-specific support for 32-bit ELF
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
Most of the information added by Ian Lance Taylor, Cygnus Support,
<ian@cygnus.com>.
@@ -29,8 +29,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
different MIPS ELF from other targets. This matters when linking.
This file supports both, switching at runtime. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "genlink.h"
@@ -61,8 +61,6 @@ static bfd_reloc_status_type gprel32_with_gp
(bfd *, asymbol *, arelent *, asection *, bfd_boolean, void *, bfd_vma);
static bfd_reloc_status_type mips_elf_shift6_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type mips16_jump_reloc
- (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_reloc_status_type mips16_gprel_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
@@ -756,6 +754,21 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
+
+ /* 32 bit relocation with no addend. */
+ HOWTO (R_MIPS_GLOB_DAT, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ _bfd_mips_elf_generic_reloc, /* special_function */
+ "R_MIPS_GLOB_DAT", /* name */
+ FALSE, /* partial_inplace */
+ 0x0, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
};
/* The relocation table used for SHT_RELA sections. */
@@ -1429,6 +1442,21 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
+
+ /* 32 bit relocation with no addend. */
+ HOWTO (R_MIPS_GLOB_DAT, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ _bfd_mips_elf_generic_reloc, /* special_function */
+ "R_MIPS_GLOB_DAT", /* name */
+ FALSE, /* partial_inplace */
+ 0x0, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
};
static reloc_howto_type elf_mips16_howto_table_rel[] =
@@ -1444,7 +1472,7 @@ static reloc_howto_type elf_mips16_howto_table_rel[] =
/* This needs complex overflow
detection, because the upper four
bits must match the PC. */
- mips16_jump_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS16_26", /* name */
TRUE, /* partial_inplace */
0x3ffffff, /* src_mask */
@@ -1516,7 +1544,7 @@ static reloc_howto_type elf_mips16_howto_table_rela[] =
/* This needs complex overflow
detection, because the upper four
bits must match the PC. */
- mips16_jump_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS16_26", /* name */
FALSE, /* partial_inplace */
0x3ffffff, /* src_mask */
@@ -1901,28 +1929,6 @@ mips_elf_shift6_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
error_message);
}
-/* Handle a mips16 jump. */
-
-static bfd_reloc_status_type
-mips16_jump_reloc (bfd *abfd ATTRIBUTE_UNUSED,
- arelent *reloc_entry ATTRIBUTE_UNUSED,
- asymbol *symbol ATTRIBUTE_UNUSED,
- void *data ATTRIBUTE_UNUSED,
- asection *input_section, bfd *output_bfd ATTRIBUTE_UNUSED,
- char **error_message ATTRIBUTE_UNUSED)
-{
- static bfd_boolean warned = FALSE;
-
- /* FIXME. */
- if (! warned)
- (*_bfd_error_handler)
- (_("Linking mips16 objects into %s format is not supported"),
- bfd_get_target (input_section->output_section->owner));
- warned = TRUE;
-
- return bfd_reloc_undefined;
-}
-
/* Handle a mips16 GP relative reloc. */
static bfd_reloc_status_type
@@ -2075,6 +2081,40 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
}
}
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (elf_mips_howto_table_rela)
+ / sizeof (elf_mips_howto_table_rela[0]));
+ i++)
+ if (elf_mips_howto_table_rela[i].name != NULL
+ && strcasecmp (elf_mips_howto_table_rela[i].name, r_name) == 0)
+ return &elf_mips_howto_table_rela[i];
+
+ for (i = 0;
+ i < (sizeof (elf_mips16_howto_table_rela)
+ / sizeof (elf_mips16_howto_table_rela[0]));
+ i++)
+ if (elf_mips16_howto_table_rela[i].name != NULL
+ && strcasecmp (elf_mips16_howto_table_rela[i].name, r_name) == 0)
+ return &elf_mips16_howto_table_rela[i];
+
+ if (strcasecmp (elf_mips_gnu_vtinherit_howto.name, r_name) == 0)
+ return &elf_mips_gnu_vtinherit_howto;
+ if (strcasecmp (elf_mips_gnu_vtentry_howto.name, r_name) == 0)
+ return &elf_mips_gnu_vtentry_howto;
+ if (strcasecmp (elf_mips_gnu_rel16_s2.name, r_name) == 0)
+ return &elf_mips_gnu_rel16_s2;
+ if (strcasecmp (elf_mips_gnu_rela16_s2.name, r_name) == 0)
+ return &elf_mips_gnu_rela16_s2;
+
+ return NULL;
+}
+
/* Given a MIPS Elf_Internal_Rel, fill in an arelent structure. */
static reloc_howto_type *
@@ -2317,12 +2357,15 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
#define elf_backend_create_dynamic_sections \
_bfd_mips_elf_create_dynamic_sections
#define elf_backend_check_relocs _bfd_mips_elf_check_relocs
+#define elf_backend_merge_symbol_attribute \
+ _bfd_mips_elf_merge_symbol_attribute
#define elf_backend_adjust_dynamic_symbol \
_bfd_mips_elf_adjust_dynamic_symbol
#define elf_backend_always_size_sections \
_bfd_mips_elf_always_size_sections
#define elf_backend_size_dynamic_sections \
_bfd_mips_elf_size_dynamic_sections
+#define elf_backend_init_index_section _bfd_elf_init_1_index_section
#define elf_backend_relocate_section _bfd_mips_elf_relocate_section
#define elf_backend_finish_dynamic_symbol \
_bfd_mips_elf_finish_dynamic_symbol
@@ -2380,10 +2423,8 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
#define TARGET_BIG_SYM bfd_elf32_nbigmips_vec
#define TARGET_BIG_NAME "elf32-nbigmips"
-/* The SVR4 MIPS ABI says that this should be 0x10000, but Irix 5 uses
- a value of 0x1000, and we are compatible.
- FIXME: How does this affect NewABI? */
-#define ELF_MAXPAGESIZE 0x1000
+#define ELF_MAXPAGESIZE 0x10000
+#define ELF_COMMONPAGESIZE 0x1000
#include "elf32-target.h"
@@ -2394,15 +2435,15 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
#undef TARGET_BIG_NAME
#undef ELF_MAXPAGESIZE
+#undef ELF_COMMONPAGESIZE
#define TARGET_LITTLE_SYM bfd_elf32_ntradlittlemips_vec
#define TARGET_LITTLE_NAME "elf32-ntradlittlemips"
#define TARGET_BIG_SYM bfd_elf32_ntradbigmips_vec
#define TARGET_BIG_NAME "elf32-ntradbigmips"
-/* The SVR4 MIPS ABI says that this should be 0x10000, and Linux uses
- page sizes of up to that limit, so we need to respect it. */
#define ELF_MAXPAGESIZE 0x10000
+#define ELF_COMMONPAGESIZE 0x1000
#define elf32_bed elf32_tradbed
/* Include the target file again for this target. */
diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c
index 6b3257afdf13..68f2010c6192 100644
--- a/bfd/elfxx-ia64.c
+++ b/bfd/elfxx-ia64.c
@@ -1,5 +1,5 @@
/* IA-64 support for 64-bit ELF
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
@@ -19,8 +19,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "opcode/ia64.h"
@@ -215,10 +215,6 @@ static bfd_boolean elfNN_ia64_add_symbol_hook
PARAMS ((bfd *abfd, struct bfd_link_info *info, Elf_Internal_Sym *sym,
const char **namep, flagword *flagsp, asection **secp,
bfd_vma *valp));
-static int elfNN_ia64_additional_program_headers
- PARAMS ((bfd *abfd));
-static bfd_boolean elfNN_ia64_modify_segment_map
- PARAMS ((bfd *, struct bfd_link_info *));
static bfd_boolean elfNN_ia64_is_local_label_name
PARAMS ((bfd *abfd, const char *name));
static bfd_boolean elfNN_ia64_dynamic_symbol_p
@@ -617,6 +613,22 @@ elfNN_ia64_reloc_type_lookup (abfd, bfd_code)
return lookup_howto (rtype);
}
+static reloc_howto_type *
+elfNN_ia64_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (ia64_howto_table) / sizeof (ia64_howto_table[0]);
+ i++)
+ if (ia64_howto_table[i].name != NULL
+ && strcasecmp (ia64_howto_table[i].name, r_name) == 0)
+ return &ia64_howto_table[i];
+
+ return NULL;
+}
+
/* Given a ELF reloc, return the matching HOWTO structure. */
static void
@@ -1428,22 +1440,15 @@ elfNN_ia64_relax_ldxmov (contents, off)
/* Return TRUE if NAME is an unwind table section name. */
static inline bfd_boolean
-is_unwind_section_name (abfd, name)
- bfd *abfd;
- const char *name;
+is_unwind_section_name (bfd *abfd, const char *name)
{
- size_t len1, len2, len3;
-
if (elfNN_ia64_hpux_vec (abfd->xvec)
&& !strcmp (name, ELF_STRING_ia64_unwind_hdr))
return FALSE;
- len1 = sizeof (ELF_STRING_ia64_unwind) - 1;
- len2 = sizeof (ELF_STRING_ia64_unwind_info) - 1;
- len3 = sizeof (ELF_STRING_ia64_unwind_once) - 1;
- return ((strncmp (name, ELF_STRING_ia64_unwind, len1) == 0
- && strncmp (name, ELF_STRING_ia64_unwind_info, len2) != 0)
- || strncmp (name, ELF_STRING_ia64_unwind_once, len3) == 0);
+ return ((CONST_STRNEQ (name, ELF_STRING_ia64_unwind)
+ && ! CONST_STRNEQ (name, ELF_STRING_ia64_unwind_info))
+ || CONST_STRNEQ (name, ELF_STRING_ia64_unwind_once));
}
/* Handle an IA-64 specific section when reading an object file. This
@@ -1637,8 +1642,8 @@ elfNN_ia64_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
/* Return the number of additional phdrs we will need. */
static int
-elfNN_ia64_additional_program_headers (abfd)
- bfd *abfd;
+elfNN_ia64_additional_program_headers (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
asection *s;
int ret = 0;
@@ -1657,9 +1662,8 @@ elfNN_ia64_additional_program_headers (abfd)
}
static bfd_boolean
-elfNN_ia64_modify_segment_map (abfd, info)
- bfd *abfd;
- struct bfd_link_info *info ATTRIBUTE_UNUSED;
+elfNN_ia64_modify_segment_map (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
struct elf_segment_map *m, **pm;
Elf_Internal_Shdr *hdr;
@@ -1742,17 +1746,30 @@ elfNN_ia64_modify_segment_map (abfd, info)
}
}
- /* Turn on PF_IA_64_NORECOV if needed. This involves traversing all of
- the input sections for each output section in the segment and testing
- for SHF_IA_64_NORECOV on each. */
- for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
+ return TRUE;
+}
+
+/* Turn on PF_IA_64_NORECOV if needed. This involves traversing all of
+ the input sections for each output section in the segment and testing
+ for SHF_IA_64_NORECOV on each. */
+
+static bfd_boolean
+elfNN_ia64_modify_program_headers (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+ struct elf_obj_tdata *tdata = elf_tdata (abfd);
+ struct elf_segment_map *m;
+ Elf_Internal_Phdr *p;
+
+ for (p = tdata->phdr, m = tdata->segment_map; m != NULL; m = m->next, p++)
if (m->p_type == PT_LOAD)
{
int i;
for (i = m->count - 1; i >= 0; --i)
{
struct bfd_link_order *order = m->sections[i]->map_head.link_order;
- while (order)
+
+ while (order != NULL)
{
if (order->type == bfd_indirect_link_order)
{
@@ -1760,7 +1777,7 @@ elfNN_ia64_modify_segment_map (abfd, info)
bfd_vma flags = elf_section_data(is)->this_hdr.sh_flags;
if (flags & SHF_IA_64_NORECOV)
{
- m->p_flags |= PF_IA_64_NORECOV;
+ p->p_flags |= PF_IA_64_NORECOV;
goto found;
}
}
@@ -2208,7 +2225,7 @@ addend_compare (const void *xp, const void *yp)
const struct elfNN_ia64_dyn_sym_info *y
= (const struct elfNN_ia64_dyn_sym_info *) yp;
- return x->addend - y->addend;
+ return x->addend < y->addend ? -1 : x->addend > y->addend ? 1 : 0;
}
/* Sort elfNN_ia64_dyn_sym_info array and remove duplicates. */
@@ -2217,37 +2234,62 @@ static unsigned int
sort_dyn_sym_info (struct elfNN_ia64_dyn_sym_info *info,
unsigned int count)
{
- bfd_vma curr, prev;
- unsigned int i, dup, diff, dest, src, len;
+ bfd_vma curr, prev, got_offset;
+ unsigned int i, kept, dup, diff, dest, src, len;
qsort (info, count, sizeof (*info), addend_compare);
/* Find the first duplicate. */
prev = info [0].addend;
+ got_offset = info [0].got_offset;
for (i = 1; i < count; i++)
{
curr = info [i].addend;
if (curr == prev)
- break;
+ {
+ /* For duplicates, make sure that GOT_OFFSET is valid. */
+ if (got_offset == (bfd_vma) -1)
+ got_offset = info [i].got_offset;
+ break;
+ }
+ got_offset = info [i].got_offset;
prev = curr;
}
+ /* We may move a block of elements to here. */
+ dest = i++;
+
/* Remove duplicates. */
if (i < count)
{
- /* We need to move a block of elements to here. */
- dest = i++;
while (i < count)
{
+ /* For duplicates, make sure that the kept one has a valid
+ got_offset. */
+ kept = dest - 1;
+ if (got_offset != (bfd_vma) -1)
+ info [kept].got_offset = got_offset;
+
curr = info [i].addend;
+ got_offset = info [i].got_offset;
/* Move a block of elements whose first one is different from
the previous. */
if (curr == prev)
{
for (src = i + 1; src < count; src++)
- if (info [src].addend != curr)
- break;
+ {
+ if (info [src].addend != curr)
+ break;
+ /* For duplicates, make sure that GOT_OFFSET is
+ valid. */
+ if (got_offset == (bfd_vma) -1)
+ got_offset = info [src].got_offset;
+ }
+
+ /* Make sure that the kept one has a valid got_offset. */
+ if (got_offset != (bfd_vma) -1)
+ info [kept].got_offset = got_offset;
}
else
src = i;
@@ -2255,13 +2297,25 @@ sort_dyn_sym_info (struct elfNN_ia64_dyn_sym_info *info,
if (src >= count)
break;
- /* Find the next duplicate. */
+ /* Find the next duplicate. SRC will be kept. */
prev = info [src].addend;
+ got_offset = info [src].got_offset;
for (dup = src + 1; dup < count; dup++)
{
curr = info [dup].addend;
if (curr == prev)
- break;
+ {
+ /* Make sure that got_offset is valid. */
+ if (got_offset == (bfd_vma) -1)
+ got_offset = info [dup].got_offset;
+
+ /* For duplicates, make sure that the kept one has
+ a valid got_offset. */
+ if (got_offset != (bfd_vma) -1)
+ info [dup - 1].got_offset = got_offset;
+ break;
+ }
+ got_offset = info [dup].got_offset;
prev = curr;
}
@@ -2272,20 +2326,41 @@ sort_dyn_sym_info (struct elfNN_ia64_dyn_sym_info *info,
if (len == 1 && dup < count)
{
/* If we only move 1 element, we combine it with the next
- one. Find the next different one. */
+ one. There must be at least a duplicate. Find the
+ next different one. */
for (diff = dup + 1, src++; diff < count; diff++, src++)
- if (info [diff].addend != curr)
- break;
+ {
+ if (info [diff].addend != curr)
+ break;
+ /* Make sure that got_offset is valid. */
+ if (got_offset == (bfd_vma) -1)
+ got_offset = info [diff].got_offset;
+ }
+
+ /* Makre sure that the last duplicated one has an valid
+ offset. */
+ BFD_ASSERT (curr == prev);
+ if (got_offset != (bfd_vma) -1)
+ info [diff - 1].got_offset = got_offset;
if (diff < count)
{
- /* Find the next duplicate. */
+ /* Find the next duplicate. Track the current valid
+ offset. */
prev = info [diff].addend;
+ got_offset = info [diff].got_offset;
for (dup = diff + 1; dup < count; dup++)
{
curr = info [dup].addend;
if (curr == prev)
- break;
+ {
+ /* For duplicates, make sure that GOT_OFFSET
+ is valid. */
+ if (got_offset == (bfd_vma) -1)
+ got_offset = info [dup].got_offset;
+ break;
+ }
+ got_offset = info [dup].got_offset;
prev = curr;
diff++;
}
@@ -2302,6 +2377,19 @@ sort_dyn_sym_info (struct elfNN_ia64_dyn_sym_info *info,
count = dest;
}
+ else
+ {
+ /* When we get here, either there is no duplicate at all or
+ the only duplicate is the last element. */
+ if (dest < count)
+ {
+ /* If the last element is a duplicate, make sure that the
+ kept one has a valid got_offset. We also update count. */
+ if (got_offset != (bfd_vma) -1)
+ info [dest - 1].got_offset = got_offset;
+ count = dest;
+ }
+ }
return count;
}
@@ -2424,6 +2512,7 @@ has_space:
/* Append the new one to the array. */
dyn_i = info + count;
memset (dyn_i, 0, sizeof (*dyn_i));
+ dyn_i->got_offset = (bfd_vma) -1;
dyn_i->addend = addend;
/* We increment count only since the new ones are unsorted and
@@ -2613,10 +2702,10 @@ get_reloc_section (abfd, ia64_info, sec, create)
if (srel_name == NULL)
return NULL;
- BFD_ASSERT ((strncmp (srel_name, ".rela", 5) == 0
+ BFD_ASSERT ((CONST_STRNEQ (srel_name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
srel_name+5) == 0)
- || (strncmp (srel_name, ".rel", 4) == 0
+ || (CONST_STRNEQ (srel_name, ".rel")
&& strcmp (bfd_get_section_name (abfd, sec),
srel_name+4) == 0));
@@ -2733,7 +2822,7 @@ elfNN_ia64_check_relocs (abfd, info, sec, relocs)
have yet been processed. Do something with what we know, as
this may help reduce memory usage and processing time later. */
maybe_dynamic = (h && ((!info->executable
- && (!info->symbolic
+ && (!SYMBOLIC_BIND (info, h)
|| info->unresolved_syms_in_shared_libs == RM_IGNORE))
|| !h->def_regular
|| h->root.type == bfd_link_hash_defweak));
@@ -2905,7 +2994,7 @@ elfNN_ia64_check_relocs (abfd, info, sec, relocs)
have yet been processed. Do something with what we know, as
this may help reduce memory usage and processing time later. */
maybe_dynamic = (h && ((!info->executable
- && (!info->symbolic
+ && (!SYMBOLIC_BIND (info, h)
|| info->unresolved_syms_in_shared_libs == RM_IGNORE))
|| !h->def_regular
|| h->root.type == bfd_link_hash_defweak));
@@ -3694,7 +3783,7 @@ elfNN_ia64_size_dynamic_sections (output_bfd, info)
if (strcmp (name, ".got.plt") == 0)
strip = FALSE;
- else if (strncmp (name, ".rel", 4) == 0)
+ else if (CONST_STRNEQ (name, ".rel"))
{
if (!strip)
{
@@ -4358,7 +4447,7 @@ elfNN_ia64_choose_gp (abfd, info)
continue;
lo = os->vma;
- hi = os->vma + os->size;
+ hi = os->vma + (os->rawsize ? os->rawsize : os->size);
if (hi < lo)
hi = (bfd_vma) -1;
@@ -4556,7 +4645,6 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
elf_section_data(input_section->output_section)
->this_hdr.sh_flags |= flags;
- return TRUE;
}
gp_val = _bfd_get_gp_value (output_bfd);
@@ -4605,7 +4693,8 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
sym_sec = local_sections[r_symndx];
msec = sym_sec;
value = _bfd_elf_rela_local_sym (output_bfd, sym, &msec, rel);
- if ((sym_sec->flags & SEC_MERGE)
+ if (!info->relocatable
+ && (sym_sec->flags & SEC_MERGE) != 0
&& ELF_ST_TYPE (sym->st_info) == STT_SECTION
&& sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE)
{
@@ -4634,9 +4723,15 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
- sym_sec->output_section->vma
- sym_sec->output_offset;
}
-
- qsort (loc_h->info, loc_h->count,
- sizeof (*loc_h->info), addend_compare);
+
+ /* We may have introduced duplicated entries. We need
+ to remove them properly. */
+ count = sort_dyn_sym_info (loc_h->info, loc_h->count);
+ if (count != loc_h->count)
+ {
+ loc_h->count = count;
+ loc_h->sorted_count = count;
+ }
loc_h->sec_merge_done = 1;
}
@@ -4659,6 +4754,20 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
continue;
}
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ if (sym_sec != NULL && elf_discarded_section (sym_sec))
+ {
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
hit_addr = contents + rel->r_offset;
value += rel->r_addend;
dynamic_symbol_p = elfNN_ia64_dynamic_symbol_p (h, info, r_type);
@@ -4990,13 +5099,6 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
case R_IA64_SEGREL32LSB:
case R_IA64_SEGREL64MSB:
case R_IA64_SEGREL64LSB:
- if (r_symndx == 0)
- {
- /* If the input section was discarded from the output, then
- do nothing. */
- r = bfd_reloc_ok;
- }
- else
{
struct elf_segment_map *m;
Elf_Internal_Phdr *p;
@@ -5561,9 +5663,9 @@ elfNN_ia64_reloc_type_class (rela)
static const struct bfd_elf_special_section elfNN_ia64_special_sections[] =
{
- { ".sbss", 5, -1, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT },
- { ".sdata", 6, -1, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".sbss"), -1, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT },
+ { STRING_COMMA_LEN (".sdata"), -1, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT },
+ { NULL, 0, 0, 0, 0 }
};
static bfd_boolean
@@ -5590,7 +5692,7 @@ elfNN_ia64_object_p (bfd *abfd)
if (elf_sec_group (sec) == NULL
&& ((sec->flags & (SEC_LINK_ONCE | SEC_CODE | SEC_GROUP))
== (SEC_LINK_ONCE | SEC_CODE))
- && strncmp (sec->name, ".gnu.linkonce.t.", 16) == 0)
+ && CONST_STRNEQ (sec->name, ".gnu.linkonce.t."))
{
name = sec->name + 16;
@@ -5673,7 +5775,7 @@ elfNN_hpux_post_process_headers (abfd, info)
{
Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
- i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_HPUX;
+ i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
i_ehdrp->e_ident[EI_ABIVERSION] = 1;
}
@@ -5717,6 +5819,7 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
#define ELF_MACHINE_ALT1 1999 /* EAS2.3 */
#define ELF_MACHINE_ALT2 1998 /* EAS2.2 */
#define ELF_MAXPAGESIZE 0x10000 /* 64KB */
+#define ELF_COMMONPAGESIZE 0x4000 /* 16KB */
#define elf_backend_section_from_shdr \
elfNN_ia64_section_from_shdr
@@ -5732,11 +5835,15 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
elfNN_ia64_additional_program_headers
#define elf_backend_modify_segment_map \
elfNN_ia64_modify_segment_map
+#define elf_backend_modify_program_headers \
+ elfNN_ia64_modify_program_headers
#define elf_info_to_howto \
elfNN_ia64_info_to_howto
#define bfd_elfNN_bfd_reloc_type_lookup \
elfNN_ia64_reloc_type_lookup
+#define bfd_elfNN_bfd_reloc_name_lookup \
+ elfNN_ia64_reloc_name_lookup
#define bfd_elfNN_bfd_is_local_label_name \
elfNN_ia64_is_local_label_name
#define bfd_elfNN_bfd_relax_section \
@@ -5758,6 +5865,8 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
elfNN_ia64_adjust_dynamic_symbol
#define elf_backend_size_dynamic_sections \
elfNN_ia64_size_dynamic_sections
+#define elf_backend_omit_section_dynsym \
+ ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
#define elf_backend_relocate_section \
elfNN_ia64_relocate_section
#define elf_backend_finish_dynamic_symbol \
@@ -5789,6 +5898,7 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
#define elf_backend_reloc_type_class elfNN_ia64_reloc_type_class
#define elf_backend_rela_normal 1
#define elf_backend_special_sections elfNN_ia64_special_sections
+#define elf_backend_default_execstack 0
/* FIXME: PR 290: The Intel C compiler generates SHT_IA_64_UNWIND with
SHF_LINK_ORDER. But it doesn't set the sh_link or sh_info fields.
@@ -5823,7 +5933,10 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
#define elf_backend_want_p_paddr_set_to_zero 1
#undef ELF_MAXPAGESIZE
-#define ELF_MAXPAGESIZE 0x1000 /* 1K */
+#define ELF_MAXPAGESIZE 0x1000 /* 4K */
+#undef ELF_COMMONPAGESIZE
+#undef ELF_OSABI
+#define ELF_OSABI ELFOSABI_HPUX
#undef elfNN_bed
#define elfNN_bed elfNN_ia64_hpux_bed
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index 39420a63ae74..28a4e8b333be 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -1,6 +1,6 @@
/* MIPS-specific support for ELF
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Most of the information added by Ian Lance Taylor, Cygnus Support,
<ian@cygnus.com>.
@@ -27,8 +27,8 @@
/* This file handles functionality common to the different MIPS ABI's. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libiberty.h"
#include "elf-bfd.h"
@@ -488,12 +488,12 @@ typedef struct runtime_pdr {
static struct mips_got_entry *mips_elf_create_local_got_entry
(bfd *, struct bfd_link_info *, bfd *, struct mips_got_info *, asection *,
- asection *, bfd_vma, unsigned long, struct mips_elf_link_hash_entry *, int);
+ bfd_vma, unsigned long, struct mips_elf_link_hash_entry *, int);
static bfd_boolean mips_elf_sort_hash_table_f
(struct mips_elf_link_hash_entry *, void *);
static bfd_vma mips_elf_high
(bfd_vma);
-static bfd_boolean mips_elf_stub_section_p
+static bfd_boolean mips16_stub_section_p
(bfd *, asection *);
static bfd_boolean mips_elf_create_dynamic_relocation
(bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
@@ -709,6 +709,10 @@ static bfd *reldyn_sorting_bfd;
#define FN_STUB ".mips16.fn."
#define CALL_STUB ".mips16.call."
#define CALL_FP_STUB ".mips16.call.fp."
+
+#define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
+#define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
+#define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
/* The format of the first PLT entry in a VxWorks executable. */
static const bfd_vma mips_vxworks_exec_plt0_entry[] = {
@@ -838,13 +842,16 @@ mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
bfd_boolean
_bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
{
- struct _mips_elf_section_data *sdata;
- bfd_size_type amt = sizeof (*sdata);
+ if (!sec->used_by_bfd)
+ {
+ struct _mips_elf_section_data *sdata;
+ bfd_size_type amt = sizeof (*sdata);
- sdata = bfd_zalloc (abfd, amt);
- if (sdata == NULL)
- return FALSE;
- sec->used_by_bfd = sdata;
+ sdata = bfd_zalloc (abfd, amt);
+ if (sdata == NULL)
+ return FALSE;
+ sec->used_by_bfd = sdata;
+ }
return _bfd_elf_new_section_hook (abfd, sec);
}
@@ -1689,11 +1696,20 @@ sort_dynamic_relocs (const void *arg1, const void *arg2)
{
Elf_Internal_Rela int_reloc1;
Elf_Internal_Rela int_reloc2;
+ int diff;
bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
- return ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
+ diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
+ if (diff != 0)
+ return diff;
+
+ if (int_reloc1.r_offset < int_reloc2.r_offset)
+ return -1;
+ if (int_reloc1.r_offset > int_reloc2.r_offset)
+ return 1;
+ return 0;
}
/* Like sort_dynamic_relocs, but used for elf64 relocations. */
@@ -1711,8 +1727,16 @@ sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
(*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
(reldyn_sorting_bfd, arg2, int_reloc2);
- return (ELF64_R_SYM (int_reloc1[0].r_info)
- - ELF64_R_SYM (int_reloc2[0].r_info));
+ if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
+ return -1;
+ if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
+ return 1;
+
+ if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
+ return -1;
+ if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
+ return 1;
+ return 0;
#else
abort ();
#endif
@@ -2389,16 +2413,14 @@ mips_elf_gotplt_index (struct bfd_link_info *info,
return got_address - got_value;
}
-/* Return the GOT offset for address VALUE, which was derived from
- a symbol belonging to INPUT_SECTION. If there is not yet a GOT
+/* Return the GOT offset for address VALUE. If there is not yet a GOT
entry for this value, create one. If R_SYMNDX refers to a TLS symbol,
create a TLS GOT entry instead. Return -1 if no satisfactory GOT
offset can be found. */
static bfd_vma
mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
- asection *input_section, bfd_vma value,
- unsigned long r_symndx,
+ bfd_vma value, unsigned long r_symndx,
struct mips_elf_link_hash_entry *h, int r_type)
{
asection *sgot;
@@ -2408,8 +2430,7 @@ mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
entry = mips_elf_create_local_got_entry (abfd, info, ibfd, g, sgot,
- input_section, value,
- r_symndx, h, r_type);
+ value, r_symndx, h, r_type);
if (!entry)
return MINUS_ONE;
@@ -2510,16 +2531,15 @@ mips_elf_global_got_index (bfd *abfd, bfd *ibfd, struct elf_link_hash_entry *h,
return index;
}
-/* Find a GOT page entry that points to within 32KB of VALUE, which was
- calculated from a symbol belonging to INPUT_SECTION. These entries
- are supposed to be placed at small offsets in the GOT, i.e., within
- 32KB of GP. Return the index of the GOT entry, or -1 if no entry
- could be created. If OFFSETP is nonnull, use it to return the
+/* Find a GOT page entry that points to within 32KB of VALUE. These
+ entries are supposed to be placed at small offsets in the GOT, i.e.,
+ within 32KB of GP. Return the index of the GOT entry, or -1 if no
+ entry could be created. If OFFSETP is nonnull, use it to return the
offset of the GOT entry from VALUE. */
static bfd_vma
mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
- asection *input_section, bfd_vma value, bfd_vma *offsetp)
+ bfd_vma value, bfd_vma *offsetp)
{
asection *sgot;
struct mips_got_info *g;
@@ -2530,8 +2550,7 @@ mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
page = (value + 0x8000) & ~(bfd_vma) 0xffff;
entry = mips_elf_create_local_got_entry (abfd, info, ibfd, g, sgot,
- input_section, page, 0,
- NULL, R_MIPS_GOT_PAGE);
+ page, 0, NULL, R_MIPS_GOT_PAGE);
if (!entry)
return MINUS_ONE;
@@ -2544,15 +2563,13 @@ mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
return index;
}
-/* Find a local GOT entry for an R_MIPS_GOT16 relocation against VALUE,
- which was calculated from a symbol belonging to INPUT_SECTION.
+/* Find a local GOT entry for an R_MIPS_GOT16 relocation against VALUE.
EXTERNAL is true if the relocation was against a global symbol
that has been forced local. */
static bfd_vma
mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
- asection *input_section, bfd_vma value,
- bfd_boolean external)
+ bfd_vma value, bfd_boolean external)
{
asection *sgot;
struct mips_got_info *g;
@@ -2568,8 +2585,7 @@ mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
entry = mips_elf_create_local_got_entry (abfd, info, ibfd, g, sgot,
- input_section, value, 0,
- NULL, R_MIPS_GOT16);
+ value, 0, NULL, R_MIPS_GOT16);
if (entry)
return entry->gotidx;
else
@@ -2602,8 +2618,8 @@ mips_elf_got_offset_from_index (bfd *dynobj, bfd *output_bfd,
static struct mips_got_entry *
mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
bfd *ibfd, struct mips_got_info *gg,
- asection *sgot, asection *input_section,
- bfd_vma value, unsigned long r_symndx,
+ asection *sgot, bfd_vma value,
+ unsigned long r_symndx,
struct mips_elf_link_hash_entry *h,
int r_type)
{
@@ -2684,30 +2700,23 @@ mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
MIPS_ELF_PUT_WORD (abfd, value,
(sgot->contents + entry.gotidx));
- /* These GOT entries need a dynamic relocation on VxWorks. Because
- the offset between segments is not fixed, the relocation must be
- against a symbol in the same segment as the original symbol.
- The easiest way to do this is to take INPUT_SECTION's output
- section and emit a relocation against its section symbol. */
+ /* These GOT entries need a dynamic relocation on VxWorks. */
if (htab->is_vxworks)
{
Elf_Internal_Rela outrel;
- asection *s, *output_section;
+ asection *s;
bfd_byte *loc;
bfd_vma got_address;
- int dynindx;
s = mips_elf_rel_dyn_section (info, FALSE);
- output_section = input_section->output_section;
- dynindx = elf_section_data (output_section)->dynindx;
got_address = (sgot->output_section->vma
+ sgot->output_offset
+ entry.gotidx);
loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
outrel.r_offset = got_address;
- outrel.r_info = ELF32_R_INFO (dynindx, R_MIPS_32);
- outrel.r_addend = value - output_section->vma;
+ outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
+ outrel.r_addend = value;
bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
}
@@ -3085,8 +3094,7 @@ mips_elf_merge_gots (void **bfd2got_, void *p)
if (tcount > 0)
{
unsigned int primary_total = lcount + tcount + arg->global_count;
- if (primary_total * MIPS_ELF_GOT_SIZE (bfd2got->bfd)
- >= MIPS_ELF_GOT_MAX_SIZE (arg->info))
+ if (primary_total > maxcnt)
too_many_for_tls = TRUE;
}
@@ -3178,6 +3186,7 @@ mips_elf_initialize_tls_index (void **entryp, void *p)
struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
struct mips_got_info *g = p;
bfd_vma next_index;
+ unsigned char tls_type;
/* We're only interested in TLS symbols. */
if (entry->tls_type == 0)
@@ -3193,6 +3202,7 @@ mips_elf_initialize_tls_index (void **entryp, void *p)
return 1;
entry->d.h->tls_type |= GOT_TLS_OFFSET_DONE;
entry->d.h->tls_got_offset = next_index;
+ tls_type = entry->d.h->tls_type;
}
else
{
@@ -3209,12 +3219,13 @@ mips_elf_initialize_tls_index (void **entryp, void *p)
g->tls_ldm_offset = next_index;
}
entry->gotidx = next_index;
+ tls_type = entry->tls_type;
}
/* Account for the entries we've just allocated. */
- if (entry->tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
+ if (tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
g->tls_assigned_gotno += 2;
- if (entry->tls_type & GOT_TLS_IE)
+ if (tls_type & GOT_TLS_IE)
g->tls_assigned_gotno += 1;
return 1;
@@ -3580,16 +3591,18 @@ mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
const Elf_Internal_Rela *relocation,
const Elf_Internal_Rela *relend)
{
+ unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
+
while (relocation < relend)
{
- if (ELF_R_TYPE (abfd, relocation->r_info) == r_type)
+ if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
+ && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
return relocation;
++relocation;
}
/* We didn't find it. */
- bfd_set_error (bfd_error_bad_value);
return NULL;
}
@@ -4056,9 +4069,10 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
a stub. */
if (r_type != R_MIPS16_26 && !info->relocatable
&& ((h != NULL && h->fn_stub != NULL)
- || (local_p && elf_tdata (input_bfd)->local_stubs != NULL
+ || (local_p
+ && elf_tdata (input_bfd)->local_stubs != NULL
&& elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
- && !mips_elf_stub_section_p (input_bfd, input_section))
+ && !mips16_stub_section_p (input_bfd, input_section))
{
/* This is a 32- or 64-bit call to a 16-bit function. We should
have already noticed that we were going to need the
@@ -4072,38 +4086,46 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
}
symbol = sec->output_section->vma + sec->output_offset;
+ /* The target is 16-bit, but the stub isn't. */
+ target_is_16_bit_code_p = FALSE;
}
/* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
need to redirect the call to the stub. */
else if (r_type == R_MIPS16_26 && !info->relocatable
- && h != NULL
- && (h->call_stub != NULL || h->call_fp_stub != NULL)
+ && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
+ || (local_p
+ && elf_tdata (input_bfd)->local_call_stubs != NULL
+ && elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
&& !target_is_16_bit_code_p)
{
- /* If both call_stub and call_fp_stub are defined, we can figure
- out which one to use by seeing which one appears in the input
- file. */
- if (h->call_stub != NULL && h->call_fp_stub != NULL)
+ if (local_p)
+ sec = elf_tdata (input_bfd)->local_call_stubs[r_symndx];
+ else
{
- asection *o;
-
- sec = NULL;
- for (o = input_bfd->sections; o != NULL; o = o->next)
+ /* If both call_stub and call_fp_stub are defined, we can figure
+ out which one to use by checking which one appears in the input
+ file. */
+ if (h->call_stub != NULL && h->call_fp_stub != NULL)
{
- if (strncmp (bfd_get_section_name (input_bfd, o),
- CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0)
+ asection *o;
+
+ sec = NULL;
+ for (o = input_bfd->sections; o != NULL; o = o->next)
{
- sec = h->call_fp_stub;
- break;
+ if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
+ {
+ sec = h->call_fp_stub;
+ break;
+ }
}
+ if (sec == NULL)
+ sec = h->call_stub;
}
- if (sec == NULL)
+ else if (h->call_stub != NULL)
sec = h->call_stub;
- }
- else if (h->call_stub != NULL)
- sec = h->call_stub;
- else
- sec = h->call_fp_stub;
+ else
+ sec = h->call_fp_stub;
+ }
BFD_ASSERT (sec->size > 0);
symbol = sec->output_section->vma + sec->output_offset;
@@ -4145,7 +4167,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
if (r_type == R_MIPS_TLS_LDM)
{
g = mips_elf_local_got_index (abfd, input_bfd, info,
- sec, 0, 0, NULL, r_type);
+ 0, 0, NULL, r_type);
if (g == MINUS_ONE)
return bfd_reloc_outofrange;
}
@@ -4191,7 +4213,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
break;
else
{
- g = mips_elf_local_got_index (abfd, input_bfd, info, sec,
+ g = mips_elf_local_got_index (abfd, input_bfd, info,
symbol + addend, r_symndx, h, r_type);
if (g == MINUS_ONE)
return bfd_reloc_outofrange;
@@ -4240,6 +4262,13 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
outrel.r_addend = addend;
bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
+
+ /* If we've written this relocation for a readonly section,
+ we need to set DF_TEXTREL again, so that we do not delete the
+ DT_TEXTREL tag. */
+ if (MIPS_ELF_READONLY_SECTION (input_section))
+ info->flags |= DF_TEXTREL;
+
*valuep = 0;
return bfd_reloc_ok;
}
@@ -4326,6 +4355,8 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
break;
case R_MIPS_TLS_DTPREL_LO16:
+ case R_MIPS_TLS_DTPREL32:
+ case R_MIPS_TLS_DTPREL64:
value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
break;
@@ -4435,7 +4466,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
forced = ! mips_elf_local_relocation_p (input_bfd, relocation,
local_sections, FALSE);
- value = mips_elf_got16_entry (abfd, input_bfd, info, sec,
+ value = mips_elf_got16_entry (abfd, input_bfd, info,
symbol + addend, forced);
if (value == MINUS_ONE)
return bfd_reloc_outofrange;
@@ -4466,7 +4497,8 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
case R_MIPS_GNU_REL16_S2:
value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
overflowed_p = mips_elf_overflow_p (value, 18);
- value = (value >> 2) & howto->dst_mask;
+ value >>= howto->rightshift;
+ value &= howto->dst_mask;
break;
case R_MIPS_GOT_HI16:
@@ -4490,8 +4522,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
0. */
if (! local_p)
goto got_disp;
- value = mips_elf_got_page (abfd, input_bfd, info, sec,
- symbol + addend, NULL);
+ value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
if (value == MINUS_ONE)
return bfd_reloc_outofrange;
value = mips_elf_got_offset_from_index (dynobj, abfd, input_bfd, value);
@@ -4500,8 +4531,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
case R_MIPS_GOT_OFST:
if (local_p)
- mips_elf_got_page (abfd, input_bfd, info, sec,
- symbol + addend, &value);
+ mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
else
value = addend;
overflowed_p = mips_elf_overflow_p (value, 16);
@@ -4677,13 +4707,11 @@ mips_elf_perform_relocation (struct bfd_link_info *info,
/* Returns TRUE if SECTION is a MIPS16 stub section. */
static bfd_boolean
-mips_elf_stub_section_p (bfd *abfd ATTRIBUTE_UNUSED, asection *section)
+mips16_stub_section_p (bfd *abfd ATTRIBUTE_UNUSED, asection *section)
{
const char *name = bfd_get_section_name (abfd, section);
- return (strncmp (name, FN_STUB, sizeof FN_STUB - 1) == 0
- || strncmp (name, CALL_STUB, sizeof CALL_STUB - 1) == 0
- || strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0);
+ return FN_STUB_P (name) || CALL_STUB_P (name) || CALL_FP_STUB_P (name);
}
/* Add room for N relocations to the .rel(a).dyn section in ABFD. */
@@ -4745,10 +4773,13 @@ mips_elf_create_dynamic_relocation (bfd *output_bfd,
outrel[0].r_offset =
_bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
- outrel[1].r_offset =
- _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
- outrel[2].r_offset =
- _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
+ if (ABI_64_P (output_bfd))
+ {
+ outrel[1].r_offset =
+ _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
+ outrel[2].r_offset =
+ _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
+ }
if (outrel[0].r_offset == MINUS_ONE)
/* The relocation field has been deleted. */
@@ -4792,6 +4823,11 @@ mips_elf_create_dynamic_relocation (bfd *output_bfd,
{
indx = elf_section_data (sec->output_section)->dynindx;
if (indx == 0)
+ {
+ asection *osec = htab->root.text_index_section;
+ indx = elf_section_data (osec)->dynindx;
+ }
+ if (indx == 0)
abort ();
}
@@ -4973,39 +5009,30 @@ _bfd_elf_mips_mach (flagword flags)
default:
case E_MIPS_ARCH_1:
return bfd_mach_mips3000;
- break;
case E_MIPS_ARCH_2:
return bfd_mach_mips6000;
- break;
case E_MIPS_ARCH_3:
return bfd_mach_mips4000;
- break;
case E_MIPS_ARCH_4:
return bfd_mach_mips8000;
- break;
case E_MIPS_ARCH_5:
return bfd_mach_mips5;
- break;
case E_MIPS_ARCH_32:
return bfd_mach_mipsisa32;
- break;
case E_MIPS_ARCH_64:
return bfd_mach_mipsisa64;
- break;
case E_MIPS_ARCH_32R2:
return bfd_mach_mipsisa32r2;
- break;
case E_MIPS_ARCH_64R2:
return bfd_mach_mipsisa64r2;
- break;
}
}
@@ -5095,6 +5122,7 @@ _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
/* Common symbols less than the GP size are automatically
treated as SHN_MIPS_SCOMMON symbols on IRIX5. */
if (asym->value > elf_gp_size (abfd)
+ || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
|| IRIX_COMPAT (abfd) == ict_irix6)
break;
/* Fall through. */
@@ -5406,7 +5434,7 @@ _bfd_mips_elf_section_from_shdr (bfd *abfd,
return FALSE;
break;
case SHT_MIPS_GPTAB:
- if (strncmp (name, ".gptab.", sizeof ".gptab." - 1) != 0)
+ if (! CONST_STRNEQ (name, ".gptab."))
return FALSE;
break;
case SHT_MIPS_UCODE:
@@ -5429,7 +5457,7 @@ _bfd_mips_elf_section_from_shdr (bfd *abfd,
return FALSE;
break;
case SHT_MIPS_CONTENT:
- if (strncmp (name, ".MIPS.content", sizeof ".MIPS.content" - 1) != 0)
+ if (! CONST_STRNEQ (name, ".MIPS.content"))
return FALSE;
break;
case SHT_MIPS_OPTIONS:
@@ -5437,7 +5465,7 @@ _bfd_mips_elf_section_from_shdr (bfd *abfd,
return FALSE;
break;
case SHT_MIPS_DWARF:
- if (strncmp (name, ".debug_", sizeof ".debug_" - 1) != 0)
+ if (! CONST_STRNEQ (name, ".debug_"))
return FALSE;
break;
case SHT_MIPS_SYMBOL_LIB:
@@ -5445,9 +5473,8 @@ _bfd_mips_elf_section_from_shdr (bfd *abfd,
return FALSE;
break;
case SHT_MIPS_EVENTS:
- if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) != 0
- && strncmp (name, ".MIPS.post_rel",
- sizeof ".MIPS.post_rel" - 1) != 0)
+ if (! CONST_STRNEQ (name, ".MIPS.events")
+ && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
return FALSE;
break;
default:
@@ -5553,11 +5580,7 @@ _bfd_mips_elf_section_from_shdr (bfd *abfd,
bfd_boolean
_bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
{
- register const char *name;
- unsigned int sh_type;
-
- name = bfd_get_section_name (abfd, sec);
- sh_type = hdr->sh_type;
+ const char *name = bfd_get_section_name (abfd, sec);
if (strcmp (name, ".liblist") == 0)
{
@@ -5567,7 +5590,7 @@ _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
}
else if (strcmp (name, ".conflict") == 0)
hdr->sh_type = SHT_MIPS_CONFLICT;
- else if (strncmp (name, ".gptab.", sizeof ".gptab." - 1) == 0)
+ else if (CONST_STRNEQ (name, ".gptab."))
{
hdr->sh_type = SHT_MIPS_GPTAB;
hdr->sh_entsize = sizeof (Elf32_External_gptab);
@@ -5624,7 +5647,7 @@ _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
hdr->sh_type = SHT_MIPS_IFACE;
hdr->sh_flags |= SHF_MIPS_NOSTRIP;
}
- else if (strncmp (name, ".MIPS.content", strlen (".MIPS.content")) == 0)
+ else if (CONST_STRNEQ (name, ".MIPS.content"))
{
hdr->sh_type = SHT_MIPS_CONTENT;
hdr->sh_flags |= SHF_MIPS_NOSTRIP;
@@ -5636,7 +5659,7 @@ _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
hdr->sh_entsize = 1;
hdr->sh_flags |= SHF_MIPS_NOSTRIP;
}
- else if (strncmp (name, ".debug_", sizeof ".debug_" - 1) == 0)
+ else if (CONST_STRNEQ (name, ".debug_"))
hdr->sh_type = SHT_MIPS_DWARF;
else if (strcmp (name, ".MIPS.symlib") == 0)
{
@@ -5644,9 +5667,8 @@ _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
/* The sh_link and sh_info fields are set in
final_write_processing. */
}
- else if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) == 0
- || strncmp (name, ".MIPS.post_rel",
- sizeof ".MIPS.post_rel" - 1) == 0)
+ else if (CONST_STRNEQ (name, ".MIPS.events")
+ || CONST_STRNEQ (name, ".MIPS.post_rel"))
{
hdr->sh_type = SHT_MIPS_EVENTS;
hdr->sh_flags |= SHF_MIPS_NOSTRIP;
@@ -5659,12 +5681,6 @@ _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
hdr->sh_entsize = 8;
}
- /* In the unlikely event a special section is empty it has to lose its
- special meaning. This may happen e.g. when using `strip' with the
- "--only-keep-debug" option. */
- if (sec->size > 0 && !(sec->flags & SEC_HAS_CONTENTS))
- hdr->sh_type = sh_type;
-
/* The generic elf_fake_sections will set up REL_HDR using the default
kind of relocations. We used to set up a second header for the
non-default kind of relocations here, but only NewABI would use
@@ -5735,6 +5751,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
/* Common symbols less than the GP size are automatically
treated as SHN_MIPS_SCOMMON symbols. */
if (sym->st_size > elf_gp_size (abfd)
+ || ELF_ST_TYPE (sym->st_info) == STT_TLS
|| IRIX_COMPAT (abfd) == ict_irix6)
break;
/* Fall through. */
@@ -6116,7 +6133,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
/* Check for the mips16 stub sections. */
name = bfd_get_section_name (abfd, sec);
- if (strncmp (name, FN_STUB, sizeof FN_STUB - 1) == 0)
+ if (FN_STUB_P (name))
{
unsigned long r_symndx;
@@ -6141,12 +6158,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
/* We can ignore stub sections when looking for relocs. */
if ((o->flags & SEC_RELOC) == 0
|| o->reloc_count == 0
- || strncmp (bfd_get_section_name (abfd, o), FN_STUB,
- sizeof FN_STUB - 1) == 0
- || strncmp (bfd_get_section_name (abfd, o), CALL_STUB,
- sizeof CALL_STUB - 1) == 0
- || strncmp (bfd_get_section_name (abfd, o), CALL_FP_STUB,
- sizeof CALL_FP_STUB - 1) == 0)
+ || mips16_stub_section_p (abfd, o))
continue;
sec_relocs
@@ -6198,6 +6210,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
elf_tdata (abfd)->local_stubs = n;
}
+ sec->flags |= SEC_KEEP;
elf_tdata (abfd)->local_stubs[r_symndx] = sec;
/* We don't need to set mips16_stubs_seen in this case.
@@ -6218,12 +6231,23 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
/* H is the symbol this stub is for. */
+ /* If we already have an appropriate stub for this function, we
+ don't need another one, so we can discard this one. Since
+ this function is called before the linker maps input sections
+ to output sections, we can easily discard it by setting the
+ SEC_EXCLUDE flag. */
+ if (h->fn_stub != NULL)
+ {
+ sec->flags |= SEC_EXCLUDE;
+ return TRUE;
+ }
+
+ sec->flags |= SEC_KEEP;
h->fn_stub = sec;
mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
}
}
- else if (strncmp (name, CALL_STUB, sizeof CALL_STUB - 1) == 0
- || strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0)
+ else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
{
unsigned long r_symndx;
struct mips_elf_link_hash_entry *h;
@@ -6237,42 +6261,106 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (r_symndx < extsymoff
|| sym_hashes[r_symndx - extsymoff] == NULL)
{
- /* This stub was actually built for a static symbol defined
- in the same file. We assume that all static symbols in
- mips16 code are themselves mips16, so we can simply
- discard this stub. Since this function is called before
- the linker maps input sections to output sections, we can
- easily discard it by setting the SEC_EXCLUDE flag. */
- sec->flags |= SEC_EXCLUDE;
- return TRUE;
- }
+ asection *o;
- h = ((struct mips_elf_link_hash_entry *)
- sym_hashes[r_symndx - extsymoff]);
+ /* This stub is for a local symbol. This stub will only be
+ needed if there is some relocation (R_MIPS16_26) in this BFD
+ that refers to this symbol. */
+ for (o = abfd->sections; o != NULL; o = o->next)
+ {
+ Elf_Internal_Rela *sec_relocs;
+ const Elf_Internal_Rela *r, *rend;
+
+ /* We can ignore stub sections when looking for relocs. */
+ if ((o->flags & SEC_RELOC) == 0
+ || o->reloc_count == 0
+ || mips16_stub_section_p (abfd, o))
+ continue;
- /* H is the symbol this stub is for. */
+ sec_relocs
+ = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
+ info->keep_memory);
+ if (sec_relocs == NULL)
+ return FALSE;
- if (strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0)
- loc = &h->call_fp_stub;
- else
- loc = &h->call_stub;
-
- /* If we already have an appropriate stub for this function, we
- don't need another one, so we can discard this one. Since
- this function is called before the linker maps input sections
- to output sections, we can easily discard it by setting the
- SEC_EXCLUDE flag. We can also discard this section if we
- happen to already know that this is a mips16 function; it is
- not necessary to check this here, as it is checked later, but
- it is slightly faster to check now. */
- if (*loc != NULL || h->root.other == STO_MIPS16)
- {
- sec->flags |= SEC_EXCLUDE;
- return TRUE;
+ rend = sec_relocs + o->reloc_count;
+ for (r = sec_relocs; r < rend; r++)
+ if (ELF_R_SYM (abfd, r->r_info) == r_symndx
+ && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
+ break;
+
+ if (elf_section_data (o)->relocs != sec_relocs)
+ free (sec_relocs);
+
+ if (r < rend)
+ break;
+ }
+
+ if (o == NULL)
+ {
+ /* There is no non-call reloc for this stub, so we do
+ not need it. Since this function is called before
+ the linker maps input sections to output sections, we
+ can easily discard it by setting the SEC_EXCLUDE
+ flag. */
+ sec->flags |= SEC_EXCLUDE;
+ return TRUE;
+ }
+
+ /* Record this stub in an array of local symbol call_stubs for
+ this BFD. */
+ if (elf_tdata (abfd)->local_call_stubs == NULL)
+ {
+ unsigned long symcount;
+ asection **n;
+ bfd_size_type amt;
+
+ if (elf_bad_symtab (abfd))
+ symcount = NUM_SHDR_ENTRIES (symtab_hdr);
+ else
+ symcount = symtab_hdr->sh_info;
+ amt = symcount * sizeof (asection *);
+ n = bfd_zalloc (abfd, amt);
+ if (n == NULL)
+ return FALSE;
+ elf_tdata (abfd)->local_call_stubs = n;
+ }
+
+ sec->flags |= SEC_KEEP;
+ elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
+
+ /* We don't need to set mips16_stubs_seen in this case.
+ That flag is used to see whether we need to look through
+ the global symbol table for stubs. We don't need to set
+ it here, because we just have a local stub. */
}
+ else
+ {
+ h = ((struct mips_elf_link_hash_entry *)
+ sym_hashes[r_symndx - extsymoff]);
+
+ /* H is the symbol this stub is for. */
+
+ if (CALL_FP_STUB_P (name))
+ loc = &h->call_fp_stub;
+ else
+ loc = &h->call_stub;
+
+ /* If we already have an appropriate stub for this function, we
+ don't need another one, so we can discard this one. Since
+ this function is called before the linker maps input sections
+ to output sections, we can easily discard it by setting the
+ SEC_EXCLUDE flag. */
+ if (*loc != NULL)
+ {
+ sec->flags |= SEC_EXCLUDE;
+ return TRUE;
+ }
- *loc = sec;
- mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
+ sec->flags |= SEC_KEEP;
+ *loc = sec;
+ mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
+ }
}
if (dynobj == NULL)
@@ -6392,6 +6480,10 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
return FALSE;
}
mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
+ if (MIPS_ELF_READONLY_SECTION (sec))
+ /* We tell the dynamic linker that there are
+ relocations against the text segment. */
+ info->flags |= DF_TEXTREL;
}
}
else if (r_type == R_MIPS_CALL_LO16
@@ -6637,12 +6729,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
References from a stub section do not count. */
if (h != NULL
&& r_type != R_MIPS16_26
- && strncmp (bfd_get_section_name (abfd, sec), FN_STUB,
- sizeof FN_STUB - 1) != 0
- && strncmp (bfd_get_section_name (abfd, sec), CALL_STUB,
- sizeof CALL_STUB - 1) != 0
- && strncmp (bfd_get_section_name (abfd, sec), CALL_FP_STUB,
- sizeof CALL_FP_STUB - 1) != 0)
+ && !mips16_stub_section_p (abfd, sec))
{
struct mips_elf_link_hash_entry *mh;
@@ -6935,7 +7022,6 @@ _bfd_mips_vxworks_adjust_dynamic_symbol (struct bfd_link_info *info,
bfd *dynobj;
struct mips_elf_link_hash_entry *hmips;
struct mips_elf_link_hash_table *htab;
- unsigned int power_of_two;
htab = mips_elf_hash_table (info);
dynobj = elf_hash_table (info)->dynobj;
@@ -7058,26 +7144,7 @@ _bfd_mips_vxworks_adjust_dynamic_symbol (struct bfd_link_info *info,
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > 4)
- power_of_two = 4;
-
- /* Apply the required alignment. */
- htab->sdynbss->size = BFD_ALIGN (htab->sdynbss->size,
- (bfd_size_type) 1 << power_of_two);
- if (power_of_two > bfd_get_section_alignment (dynobj, htab->sdynbss)
- && !bfd_set_section_alignment (dynobj, htab->sdynbss, power_of_two))
- return FALSE;
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = htab->sdynbss;
- h->root.u.def.value = htab->sdynbss->size;
-
- /* Increment the section size to make room for the symbol. */
- htab->sdynbss->size += h->size;
-
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
}
/* Return the number of dynamic section symbols required by OUTPUT_BFD.
@@ -7091,7 +7158,7 @@ count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
bfd_size_type count;
count = 0;
- if (info->shared)
+ if (info->shared || elf_hash_table (info)->is_relocatable_executable)
{
asection *p;
const struct elf_backend_data *bed;
@@ -7290,7 +7357,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
if ((s->flags & SEC_LINKER_CREATED) == 0)
continue;
- if (strncmp (name, ".rel", 4) == 0)
+ if (CONST_STRNEQ (name, ".rel"))
{
if (s->size != 0)
{
@@ -7342,7 +7409,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
mips_elf_allocate_dynamic_relocations (dynobj, info, count);
}
}
- else if (!htab->is_vxworks && strncmp (name, ".got", 4) == 0)
+ else if (!htab->is_vxworks && CONST_STRNEQ (name, ".got"))
{
/* _bfd_mips_elf_always_size_sections() has already done
most of the work, but some symbols may have been mapped
@@ -7418,16 +7485,16 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
}
else if (! info->shared
&& ! mips_elf_hash_table (info)->use_rld_obj_head
- && strncmp (name, ".rld_map", 8) == 0)
+ && CONST_STRNEQ (name, ".rld_map"))
{
/* We add a room for __rld_map. It will be filled in by the
rtld to contain a pointer to the _r_debug structure. */
s->size += 4;
}
else if (SGI_COMPAT (output_bfd)
- && strncmp (name, ".compact_rel", 12) == 0)
+ && CONST_STRNEQ (name, ".compact_rel"))
s->size += mips_elf_hash_table (info)->compact_rel_size;
- else if (strncmp (name, ".init", 5) != 0
+ else if (! CONST_STRNEQ (name, ".init")
&& s != htab->sgotplt
&& s != htab->splt)
{
@@ -7477,29 +7544,22 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
/* Add some entries to the .dynamic section. We fill in the
values later, in _bfd_mips_elf_finish_dynamic_sections, but we
must add the entries now so that we get the correct size for
- the .dynamic section. The DT_DEBUG entry is filled in by the
- dynamic linker and used by the debugger. */
- if (! info->shared)
- {
- /* SGI object has the equivalence of DT_DEBUG in the
- DT_MIPS_RLD_MAP entry. */
- if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
- return FALSE;
- if (!SGI_COMPAT (output_bfd))
- {
- if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
- return FALSE;
- }
- }
- else
- {
- /* Shared libraries on traditional mips have DT_DEBUG. */
- if (!SGI_COMPAT (output_bfd))
- {
- if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
- return FALSE;
- }
- }
+ the .dynamic section. */
+
+ /* SGI object has the equivalence of DT_DEBUG in the
+ DT_MIPS_RLD_MAP entry. This must come first because glibc
+ only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and GDB only
+ looks at the first one it sees. */
+ if (!info->shared
+ && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
+ return FALSE;
+
+ /* The DT_DEBUG entry may be filled in by the dynamic linker and
+ used by the debugger. */
+ if (info->executable
+ && !SGI_COMPAT (output_bfd)
+ && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
+ return FALSE;
if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
info->flags |= DF_TEXTREL;
@@ -7666,8 +7726,54 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
bfd_boolean rela_relocation_p = TRUE;
unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
const char *msg;
+ unsigned long r_symndx;
+ asection *sec;
+ Elf_Internal_Shdr *symtab_hdr;
+ struct elf_link_hash_entry *h;
/* Find the relocation howto for this relocation. */
+ howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type,
+ NEWABI_P (input_bfd)
+ && (MIPS_RELOC_RELA_P
+ (input_bfd, input_section,
+ rel - relocs)));
+
+ r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
+ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+ if (mips_elf_local_relocation_p (input_bfd, rel, local_sections, FALSE))
+ {
+ sec = local_sections[r_symndx];
+ h = NULL;
+ }
+ else
+ {
+ unsigned long extsymoff;
+
+ extsymoff = 0;
+ if (!elf_bad_symtab (input_bfd))
+ extsymoff = symtab_hdr->sh_info;
+ h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ sec = NULL;
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ sec = h->root.u.def.section;
+ }
+
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
{
/* Some 32-bit code uses R_MIPS_64. In particular, people use
@@ -7683,13 +7789,6 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
if (bfd_big_endian (input_bfd))
rel->r_offset += 4;
}
- else
- /* NewABI defaults to RELA relocations. */
- howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type,
- NEWABI_P (input_bfd)
- && (MIPS_RELOC_RELA_P
- (input_bfd, input_section,
- rel - relocs)));
if (!use_saved_addend_p)
{
@@ -7730,10 +7829,8 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
&& mips_elf_local_relocation_p (input_bfd, rel,
local_sections, FALSE)))
{
- bfd_vma l;
const Elf_Internal_Rela *lo16_relocation;
reloc_howto_type *lo16_howto;
- bfd_byte *lo16_location;
int lo16_type;
if (r_type == R_MIPS16_HI16)
@@ -7756,32 +7853,56 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
several relocations for the same address. In
that case, the R_MIPS_LO16 relocation may occur
as one of these. We permit a similar extension
- in general, as that is useful for GCC. */
+ in general, as that is useful for GCC.
+
+ In some cases GCC dead code elimination removes
+ the LO16 but keeps the corresponding HI16. This
+ is strictly speaking a violation of the ABI but
+ not immediately harmful. */
lo16_relocation = mips_elf_next_relocation (input_bfd,
lo16_type,
rel, relend);
if (lo16_relocation == NULL)
- return FALSE;
-
- lo16_location = contents + lo16_relocation->r_offset;
-
- /* Obtain the addend kept there. */
- lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd,
- lo16_type, FALSE);
- _bfd_mips16_elf_reloc_unshuffle (input_bfd, lo16_type, FALSE,
- lo16_location);
- l = mips_elf_obtain_contents (lo16_howto, lo16_relocation,
- input_bfd, contents);
- _bfd_mips16_elf_reloc_shuffle (input_bfd, lo16_type, FALSE,
- lo16_location);
- l &= lo16_howto->src_mask;
- l <<= lo16_howto->rightshift;
- l = _bfd_mips_elf_sign_extend (l, 16);
-
- addend <<= 16;
-
- /* Compute the combined addend. */
- addend += l;
+ {
+ const char *name;
+
+ if (h)
+ name = h->root.root.string;
+ else
+ name = bfd_elf_sym_name (input_bfd, symtab_hdr,
+ local_syms + r_symndx,
+ sec);
+ (*_bfd_error_handler)
+ (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
+ input_bfd, input_section, name, howto->name,
+ rel->r_offset);
+ }
+ else
+ {
+ bfd_byte *lo16_location;
+ bfd_vma l;
+
+ lo16_location = contents + lo16_relocation->r_offset;
+
+ /* Obtain the addend kept there. */
+ lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd,
+ lo16_type, FALSE);
+ _bfd_mips16_elf_reloc_unshuffle (input_bfd, lo16_type,
+ FALSE, lo16_location);
+ l = mips_elf_obtain_contents (lo16_howto,
+ lo16_relocation,
+ input_bfd, contents);
+ _bfd_mips16_elf_reloc_shuffle (input_bfd, lo16_type,
+ FALSE, lo16_location);
+ l &= lo16_howto->src_mask;
+ l <<= lo16_howto->rightshift;
+ l = _bfd_mips_elf_sign_extend (l, 16);
+
+ addend <<= 16;
+
+ /* Compute the combined addend. */
+ addend += l;
+ }
}
else
addend <<= howto->rightshift;
@@ -8789,11 +8910,10 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0x80000000,
sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
}
- }
- if (sgot != NULL)
- elf_section_data (sgot->output_section)->this_hdr.sh_entsize
- = MIPS_ELF_GOT_SIZE (output_bfd);
+ elf_section_data (sgot->output_section)->this_hdr.sh_entsize
+ = MIPS_ELF_GOT_SIZE (output_bfd);
+ }
/* Generate dynamic relocations for the non-primary gots. */
if (gg != NULL && gg->next)
@@ -8867,6 +8987,10 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
* (ABI_64_P (output_bfd)
? sizeof (Elf64_Mips_External_Rel)
: sizeof (Elf32_External_Rel)));
+ /* Adjust the section size too. Tools like the prelinker
+ can reasonably expect the values to the same. */
+ elf_section_data (s->output_section)->this_hdr.sh_size
+ = dyn.d_un.d_val;
break;
default:
@@ -9088,7 +9212,7 @@ _bfd_mips_elf_final_write_processing (bfd *abfd,
BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
BFD_ASSERT (name != NULL
- && strncmp (name, ".gptab.", sizeof ".gptab." - 1) == 0);
+ && CONST_STRNEQ (name, ".gptab."));
sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
BFD_ASSERT (sec != NULL);
(*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
@@ -9098,8 +9222,7 @@ _bfd_mips_elf_final_write_processing (bfd *abfd,
BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
BFD_ASSERT (name != NULL
- && strncmp (name, ".MIPS.content",
- sizeof ".MIPS.content" - 1) == 0);
+ && CONST_STRNEQ (name, ".MIPS.content"));
sec = bfd_get_section_by_name (abfd,
name + sizeof ".MIPS.content" - 1);
BFD_ASSERT (sec != NULL);
@@ -9119,13 +9242,12 @@ _bfd_mips_elf_final_write_processing (bfd *abfd,
BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
BFD_ASSERT (name != NULL);
- if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) == 0)
+ if (CONST_STRNEQ (name, ".MIPS.events"))
sec = bfd_get_section_by_name (abfd,
name + sizeof ".MIPS.events" - 1);
else
{
- BFD_ASSERT (strncmp (name, ".MIPS.post_rel",
- sizeof ".MIPS.post_rel" - 1) == 0);
+ BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
sec = bfd_get_section_by_name (abfd,
(name
+ sizeof ".MIPS.post_rel" - 1));
@@ -9142,7 +9264,8 @@ _bfd_mips_elf_final_write_processing (bfd *abfd,
segments. */
int
-_bfd_mips_elf_additional_program_headers (bfd *abfd)
+_bfd_mips_elf_additional_program_headers (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
asection *s;
int ret = 0;
@@ -9164,6 +9287,12 @@ _bfd_mips_elf_additional_program_headers (bfd *abfd)
&& bfd_get_section_by_name (abfd, ".mdebug"))
++ret;
+ /* Allocate a PT_NULL header in dynamic objects. See
+ _bfd_mips_elf_modify_segment_map for details. */
+ if (!SGI_COMPAT (abfd)
+ && bfd_get_section_by_name (abfd, ".dynamic"))
+ ++ret;
+
return ret;
}
@@ -9233,15 +9362,18 @@ _bfd_mips_elf_modify_segment_map (bfd *abfd,
|| (*pm)->p_type == PT_INTERP))
pm = &(*pm)->next;
- amt = sizeof (struct elf_segment_map);
- options_segment = bfd_zalloc (abfd, amt);
- options_segment->next = *pm;
- options_segment->p_type = PT_MIPS_OPTIONS;
- options_segment->p_flags = PF_R;
- options_segment->p_flags_valid = TRUE;
- options_segment->count = 1;
- options_segment->sections[0] = s;
- *pm = options_segment;
+ if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
+ {
+ amt = sizeof (struct elf_segment_map);
+ options_segment = bfd_zalloc (abfd, amt);
+ options_segment->next = *pm;
+ options_segment->p_type = PT_MIPS_OPTIONS;
+ options_segment->p_flags = PF_R;
+ options_segment->p_flags_valid = TRUE;
+ options_segment->count = 1;
+ options_segment->sections[0] = s;
+ *pm = options_segment;
+ }
}
}
else
@@ -9311,8 +9443,18 @@ _bfd_mips_elf_modify_segment_map (bfd *abfd,
m->p_flags_valid = 1;
}
}
- if (m != NULL
- && m->count == 1 && strcmp (m->sections[0]->name, ".dynamic") == 0)
+ /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
+ glibc's dynamic linker has traditionally derived the number of
+ tags from the p_filesz field, and sometimes allocates stack
+ arrays of that size. An overly-big PT_DYNAMIC segment can
+ be actively harmful in such cases. Making PT_DYNAMIC contain
+ other sections can also make life hard for the prelinker,
+ which might move one of the other sections to a different
+ PT_LOAD segment. */
+ if (SGI_COMPAT (abfd)
+ && m != NULL
+ && m->count == 1
+ && strcmp (m->sections[0]->name, ".dynamic") == 0)
{
static const char *sec_names[] =
{
@@ -9369,6 +9511,38 @@ _bfd_mips_elf_modify_segment_map (bfd *abfd,
}
}
+ /* Allocate a spare program header in dynamic objects so that tools
+ like the prelinker can add an extra PT_LOAD entry.
+
+ If the prelinker needs to make room for a new PT_LOAD entry, its
+ standard procedure is to move the first (read-only) sections into
+ the new (writable) segment. However, the MIPS ABI requires
+ .dynamic to be in a read-only segment, and the section will often
+ start within sizeof (ElfNN_Phdr) bytes of the last program header.
+
+ Although the prelinker could in principle move .dynamic to a
+ writable segment, it seems better to allocate a spare program
+ header instead, and avoid the need to move any sections.
+ There is a long tradition of allocating spare dynamic tags,
+ so allocating a spare program header seems like a natural
+ extension. */
+ if (!SGI_COMPAT (abfd)
+ && bfd_get_section_by_name (abfd, ".dynamic"))
+ {
+ for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
+ if ((*pm)->p_type == PT_NULL)
+ break;
+ if (*pm == NULL)
+ {
+ m = bfd_zalloc (abfd, sizeof (*m));
+ if (m == NULL)
+ return FALSE;
+
+ m->p_type = PT_NULL;
+ *pm = m;
+ }
+ }
+
return TRUE;
}
@@ -9377,7 +9551,7 @@ _bfd_mips_elf_modify_segment_map (bfd *abfd,
asection *
_bfd_mips_elf_gc_mark_hook (asection *sec,
- struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
Elf_Internal_Rela *rel,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
@@ -9385,32 +9559,14 @@ _bfd_mips_elf_gc_mark_hook (asection *sec,
/* ??? Do mips16 stub sections need to be handled special? */
if (h != NULL)
- {
- switch (ELF_R_TYPE (sec->owner, rel->r_info))
- {
- case R_MIPS_GNU_VTINHERIT:
- case R_MIPS_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
- }
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ switch (ELF_R_TYPE (sec->owner, rel->r_info))
+ {
+ case R_MIPS_GNU_VTINHERIT:
+ case R_MIPS_GNU_VTENTRY:
+ return NULL;
+ }
- return NULL;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update the got entry reference counts for the section being removed. */
@@ -9505,7 +9661,7 @@ _bfd_mips_elf_hide_symbol (struct bfd_link_info *info,
dynobj = elf_hash_table (info)->dynobj;
if (dynobj != NULL && force_local && h->root.type != STT_TLS
- && (got = mips_elf_got_section (dynobj, FALSE)) != NULL
+ && (got = mips_elf_got_section (dynobj, TRUE)) != NULL
&& (g = mips_elf_section_data (got)->u.got_info) != NULL)
{
if (g->next)
@@ -9630,8 +9786,9 @@ _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
}
bfd_boolean
-_bfd_mips_elf_write_section (bfd *output_bfd, asection *sec,
- bfd_byte *contents)
+_bfd_mips_elf_write_section (bfd *output_bfd,
+ struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
+ asection *sec, bfd_byte *contents)
{
bfd_byte *to, *from, *end;
int i;
@@ -10430,7 +10587,7 @@ _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
mdebug_sec = o;
}
- if (strncmp (o->name, ".gptab.", sizeof ".gptab." - 1) == 0)
+ if (CONST_STRNEQ (o->name, ".gptab."))
{
const char *subname;
unsigned int c;
@@ -10805,6 +10962,112 @@ mips_32bit_flags_p (flagword flags)
}
+/* Merge object attributes from IBFD into OBFD. Raise an error if
+ there are conflicting attributes. */
+static bfd_boolean
+mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
+{
+ obj_attribute *in_attr;
+ obj_attribute *out_attr;
+
+ if (!elf_known_obj_attributes_proc (obfd)[0].i)
+ {
+ /* This is the first object. Copy the attributes. */
+ _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
+ /* Use the Tag_null value to indicate the attributes have been
+ initialized. */
+ elf_known_obj_attributes_proc (obfd)[0].i = 1;
+
+ return TRUE;
+ }
+
+ /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
+ non-conflicting ones. */
+ in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
+ out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
+ if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
+ {
+ out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
+ if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
+ out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
+ else if (in_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
+ ;
+ else if (in_attr[Tag_GNU_MIPS_ABI_FP].i > 3)
+ _bfd_error_handler
+ (_("Warning: %B uses unknown floating point ABI %d"), ibfd,
+ in_attr[Tag_GNU_MIPS_ABI_FP].i);
+ else if (out_attr[Tag_GNU_MIPS_ABI_FP].i > 3)
+ _bfd_error_handler
+ (_("Warning: %B uses unknown floating point ABI %d"), obfd,
+ out_attr[Tag_GNU_MIPS_ABI_FP].i);
+ else
+ switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
+ {
+ case 1:
+ switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
+ {
+ case 2:
+ _bfd_error_handler
+ (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"),
+ obfd, ibfd);
+
+ case 3:
+ _bfd_error_handler
+ (_("Warning: %B uses hard float, %B uses soft float"),
+ obfd, ibfd);
+ break;
+
+ default:
+ abort ();
+ }
+ break;
+
+ case 2:
+ switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
+ {
+ case 1:
+ _bfd_error_handler
+ (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"),
+ ibfd, obfd);
+
+ case 3:
+ _bfd_error_handler
+ (_("Warning: %B uses hard float, %B uses soft float"),
+ obfd, ibfd);
+ break;
+
+ default:
+ abort ();
+ }
+ break;
+
+ case 3:
+ switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
+ {
+ case 1:
+ case 2:
+ _bfd_error_handler
+ (_("Warning: %B uses hard float, %B uses soft float"),
+ ibfd, obfd);
+ break;
+
+ default:
+ abort ();
+ }
+ break;
+
+ default:
+ abort ();
+ }
+ }
+
+ /* Merge Tag_compatibility attributes and any common GNU ones. */
+ _bfd_elf_merge_object_attributes (ibfd, obfd);
+
+ return TRUE;
+}
+
/* Merge backend specific data from an object file to the output
object file when linking. */
@@ -10838,6 +11101,9 @@ _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
return FALSE;
}
+ if (!mips_elf_merge_obj_attributes (ibfd, obfd))
+ return FALSE;
+
new_flags = elf_elfheader (ibfd)->e_flags;
elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
old_flags = elf_elfheader (obfd)->e_flags;
@@ -10850,7 +11116,9 @@ _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
= elf_elfheader (ibfd)->e_ident[EI_CLASS];
if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
- && bfd_get_arch_info (obfd)->the_default)
+ && (bfd_get_arch_info (obfd)->the_default
+ || mips_mach_extends_p (bfd_get_mach (obfd),
+ bfd_get_mach (ibfd))))
{
if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
bfd_get_mach (ibfd)))
@@ -11061,37 +11329,52 @@ _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
fprintf (file, _(" [no abi set]"));
if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
- fprintf (file, _(" [mips1]"));
+ fprintf (file, " [mips1]");
else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
- fprintf (file, _(" [mips2]"));
+ fprintf (file, " [mips2]");
else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
- fprintf (file, _(" [mips3]"));
+ fprintf (file, " [mips3]");
else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
- fprintf (file, _(" [mips4]"));
+ fprintf (file, " [mips4]");
else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
- fprintf (file, _(" [mips5]"));
+ fprintf (file, " [mips5]");
else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
- fprintf (file, _(" [mips32]"));
+ fprintf (file, " [mips32]");
else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
- fprintf (file, _(" [mips64]"));
+ fprintf (file, " [mips64]");
else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
- fprintf (file, _(" [mips32r2]"));
+ fprintf (file, " [mips32r2]");
else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
- fprintf (file, _(" [mips64r2]"));
+ fprintf (file, " [mips64r2]");
else
fprintf (file, _(" [unknown ISA]"));
if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
- fprintf (file, _(" [mdmx]"));
+ fprintf (file, " [mdmx]");
if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
- fprintf (file, _(" [mips16]"));
+ fprintf (file, " [mips16]");
if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
- fprintf (file, _(" [32bitmode]"));
+ fprintf (file, " [32bitmode]");
else
fprintf (file, _(" [not 32bitmode]"));
+ if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
+ fprintf (file, " [noreorder]");
+
+ if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
+ fprintf (file, " [PIC]");
+
+ if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
+ fprintf (file, " [CPIC]");
+
+ if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
+ fprintf (file, " [XGOT]");
+
+ if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
+ fprintf (file, " [UCODE]");
+
fputc ('\n', file);
return TRUE;
@@ -11099,24 +11382,34 @@ _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
{
- { ".lit4", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
- { ".lit8", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
- { ".mdebug", 7, 0, SHT_MIPS_DEBUG, 0 },
- { ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
- { ".sdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
- { ".ucode", 6, 0, SHT_MIPS_UCODE, 0 },
- { NULL, 0, 0, 0, 0 }
+ { STRING_COMMA_LEN (".lit4"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
+ { STRING_COMMA_LEN (".lit8"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
+ { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
+ { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
+ { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
+ { STRING_COMMA_LEN (".ucode"), 0, SHT_MIPS_UCODE, 0 },
+ { NULL, 0, 0, 0, 0 }
};
-/* Ensure that the STO_OPTIONAL flag is copied into h->other,
- even if this is not a defintion of the symbol. */
+/* Merge non visibility st_other attributes. Ensure that the
+ STO_OPTIONAL flag is copied into h->other, even if this is not a
+ definiton of the symbol. */
void
_bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
const Elf_Internal_Sym *isym,
bfd_boolean definition,
bfd_boolean dynamic ATTRIBUTE_UNUSED)
{
- if (! definition
+ if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
+ {
+ unsigned char other;
+
+ other = (definition ? isym->st_other : h->other);
+ other &= ~ELF_ST_VISIBILITY (-1);
+ h->other = other | ELF_ST_VISIBILITY (h->other);
+ }
+
+ if (!definition
&& ELF_MIPS_IS_OPTIONAL (isym->st_other))
h->other |= STO_OPTIONAL;
}
@@ -11128,3 +11421,11 @@ _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
{
return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
}
+
+bfd_boolean
+_bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
+{
+ return (sym->st_shndx == SHN_COMMON
+ || sym->st_shndx == SHN_MIPS_ACOMMON
+ || sym->st_shndx == SHN_MIPS_SCOMMON);
+}
diff --git a/bfd/elfxx-mips.h b/bfd/elfxx-mips.h
index 6c3c9a30f6e5..3e97cc04ab62 100644
--- a/bfd/elfxx-mips.h
+++ b/bfd/elfxx-mips.h
@@ -1,5 +1,6 @@
/* MIPS ELF specific backend routines.
- Copyright 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -68,7 +69,7 @@ extern bfd_boolean _bfd_mips_elf_finish_dynamic_sections
extern void _bfd_mips_elf_final_write_processing
(bfd *, bfd_boolean);
extern int _bfd_mips_elf_additional_program_headers
- (bfd *);
+ (bfd *, struct bfd_link_info *);
extern bfd_boolean _bfd_mips_elf_modify_segment_map
(bfd *, struct bfd_link_info *);
extern asection * _bfd_mips_elf_gc_mark_hook
@@ -108,7 +109,7 @@ extern bfd_boolean _bfd_mips_elf_print_private_bfd_data
extern bfd_boolean _bfd_mips_elf_discard_info
(bfd *, struct elf_reloc_cookie *, struct bfd_link_info *);
extern bfd_boolean _bfd_mips_elf_write_section
- (bfd *, asection *, bfd_byte *);
+ (bfd *, struct bfd_link_info *, asection *, bfd_byte *);
extern bfd_boolean _bfd_mips_elf_read_ecoff_info
(bfd *, asection *, struct ecoff_debug_info *);
@@ -141,6 +142,9 @@ extern bfd_boolean _bfd_mips_elf_ignore_undef_symbol
extern const struct bfd_elf_special_section _bfd_mips_elf_special_sections [];
+extern bfd_boolean _bfd_mips_elf_common_definition (Elf_Internal_Sym *);
+
+#define elf_backend_common_definition _bfd_mips_elf_common_definition
#define elf_backend_name_local_section_symbols \
_bfd_mips_elf_name_local_section_symbols
#define elf_backend_special_sections _bfd_mips_elf_special_sections
diff --git a/bfd/elfxx-sparc.c b/bfd/elfxx-sparc.c
index ef7ff482d2ed..708af290e3c4 100644
--- a/bfd/elfxx-sparc.c
+++ b/bfd/elfxx-sparc.c
@@ -1,5 +1,5 @@
/* SPARC-specific support for ELF
- Copyright 2005, 2006 Free Software Foundation, Inc.
+ Copyright 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
/* This file handles functionality common to the different SPARC ABI's. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "libiberty.h"
@@ -385,6 +385,30 @@ _bfd_sparc_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
}
reloc_howto_type *
+_bfd_sparc_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (_bfd_sparc_elf_howto_table)
+ / sizeof (_bfd_sparc_elf_howto_table[0]));
+ i++)
+ if (_bfd_sparc_elf_howto_table[i].name != NULL
+ && strcasecmp (_bfd_sparc_elf_howto_table[i].name, r_name) == 0)
+ return &_bfd_sparc_elf_howto_table[i];
+
+ if (strcasecmp (sparc_vtinherit_howto.name, r_name) == 0)
+ return &sparc_vtinherit_howto;
+ if (strcasecmp (sparc_vtentry_howto.name, r_name) == 0)
+ return &sparc_vtentry_howto;
+ if (strcasecmp (sparc_rev32_howto.name, r_name) == 0)
+ return &sparc_rev32_howto;
+
+ return NULL;
+}
+
+reloc_howto_type *
_bfd_sparc_elf_info_to_howto_ptr (unsigned int r_type)
{
switch (r_type)
@@ -487,11 +511,14 @@ struct _bfd_sparc_elf_obj_tdata
bfd_boolean
_bfd_sparc_elf_mkobject (bfd *abfd)
{
- bfd_size_type amt = sizeof (struct _bfd_sparc_elf_obj_tdata);
- abfd->tdata.any = bfd_zalloc (abfd, amt);
if (abfd->tdata.any == NULL)
- return FALSE;
- return TRUE;
+ {
+ bfd_size_type amt = sizeof (struct _bfd_sparc_elf_obj_tdata);
+ abfd->tdata.any = bfd_zalloc (abfd, amt);
+ if (abfd->tdata.any == NULL)
+ return FALSE;
+ }
+ return bfd_elf_mkobject (abfd);
}
static void
@@ -507,27 +534,14 @@ sparc_put_word_64 (bfd *bfd, bfd_vma val, void *ptr)
}
static void
-sparc_elf_append_rela_64 (bfd *abfd ATTRIBUTE_UNUSED,
- asection *s ATTRIBUTE_UNUSED,
- Elf_Internal_Rela *rel ATTRIBUTE_UNUSED)
+sparc_elf_append_rela (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
{
-#ifdef BFD64
- Elf64_External_Rela *loc64;
-
- loc64 = (Elf64_External_Rela *) s->contents;
- loc64 += s->reloc_count++;
- bfd_elf64_swap_reloca_out (abfd, rel, (bfd_byte *) loc64);
-#endif
-}
-
-static void
-sparc_elf_append_rela_32 (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
-{
- Elf32_External_Rela *loc32;
+ const struct elf_backend_data *bed;
+ bfd_byte *loc;
- loc32 = (Elf32_External_Rela *) s->contents;
- loc32 += s->reloc_count++;
- bfd_elf32_swap_reloca_out (abfd, rel, (bfd_byte *) loc32);
+ bed = get_elf_backend_data (abfd);
+ loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rela);
+ bed->s->swap_reloca_out (abfd, rel, loc);
}
static bfd_vma
@@ -746,9 +760,6 @@ static const bfd_vma sparc_vxworks_shared_plt_entry[] =
#define SPARC_ELF_PUT_WORD(htab, bfd, val, ptr) \
htab->put_word(bfd, val, ptr)
-#define SPARC_ELF_APPEND_RELA(htab, bfd, sec, rela) \
- htab->append_rela(bfd, sec, rela)
-
#define SPARC_ELF_R_INFO(htab, in_rel, index, type) \
htab->r_info(in_rel, index, type)
@@ -824,7 +835,6 @@ _bfd_sparc_elf_link_hash_table_create (bfd *abfd)
if (ABI_64_P (abfd))
{
ret->put_word = sparc_put_word_64;
- ret->append_rela = sparc_elf_append_rela_64;
ret->r_info = sparc_elf_r_info_64;
ret->r_symndx = sparc_elf_r_symndx_64;
ret->dtpoff_reloc = R_SPARC_TLS_DTPOFF64;
@@ -840,7 +850,6 @@ _bfd_sparc_elf_link_hash_table_create (bfd *abfd)
else
{
ret->put_word = sparc_put_word_32;
- ret->append_rela = sparc_elf_append_rela_32;
ret->r_info = sparc_elf_r_info_32;
ret->r_symndx = sparc_elf_r_symndx_32;
ret->dtpoff_reloc = R_SPARC_TLS_DTPOFF32;
@@ -1427,7 +1436,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (name == NULL)
return FALSE;
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
name + 5) == 0);
@@ -1529,35 +1538,14 @@ _bfd_sparc_elf_gc_mark_hook (asection *sec,
Elf_Internal_Sym *sym)
{
if (h != NULL)
- {
- struct _bfd_sparc_elf_link_hash_table *htab;
-
- htab = _bfd_sparc_elf_hash_table (info);
- switch (SPARC_ELF_R_TYPE (rel->r_info))
+ switch (SPARC_ELF_R_TYPE (rel->r_info))
{
case R_SPARC_GNU_VTINHERIT:
case R_SPARC_GNU_VTENTRY:
- break;
-
- default:
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
-
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
-
- default:
- break;
- }
+ return NULL;
}
- }
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
- return NULL;
+ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
}
/* Update the got entry reference counts for the section being removed. */
@@ -1713,7 +1701,6 @@ _bfd_sparc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
struct _bfd_sparc_elf_link_hash_entry * eh;
struct _bfd_sparc_elf_dyn_relocs *p;
asection *s;
- unsigned int power_of_two;
htab = _bfd_sparc_elf_hash_table (info);
@@ -1830,29 +1817,9 @@ _bfd_sparc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
h->needs_copy = 1;
}
- /* We need to figure out the alignment required for this symbol. I
- have no idea how ELF linkers handle this. */
- power_of_two = bfd_log2 (h->size);
- if (power_of_two > htab->align_power_max)
- power_of_two = htab->align_power_max;
-
- /* Apply the required alignment. */
s = htab->sdynbss;
- s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
- if (power_of_two > bfd_get_section_alignment (dynobj, s))
- {
- if (! bfd_set_section_alignment (dynobj, s, power_of_two))
- return FALSE;
- }
-
- /* Define the symbol as being at this point in the section. */
- h->root.u.def.section = s;
- h->root.u.def.value = s->size;
-
- /* Increment the section size to make room for the symbol. */
- s->size += h->size;
- return TRUE;
+ return _bfd_elf_adjust_dynamic_copy (h, s);
}
/* Allocate space in .plt, .got and associated reloc sections for
@@ -2287,7 +2254,7 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd,
/* Strip this section if we don't need it; see the
comment below. */
}
- else if (strncmp (s->name, ".rela", 5) == 0)
+ else if (CONST_STRNEQ (s->name, ".rela"))
{
if (s->size != 0)
{
@@ -2434,13 +2401,16 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd,
bfd_boolean
_bfd_sparc_elf_new_section_hook (bfd *abfd, asection *sec)
{
- struct _bfd_sparc_elf_section_data *sdata;
- bfd_size_type amt = sizeof (*sdata);
+ if (!sec->used_by_bfd)
+ {
+ struct _bfd_sparc_elf_section_data *sdata;
+ bfd_size_type amt = sizeof (*sdata);
- sdata = (struct _bfd_sparc_elf_section_data *) bfd_zalloc (abfd, amt);
- if (sdata == NULL)
- return FALSE;
- sec->used_by_bfd = (PTR) sdata;
+ sdata = bfd_zalloc (abfd, amt);
+ if (sdata == NULL)
+ return FALSE;
+ sec->used_by_bfd = sdata;
+ }
return _bfd_elf_new_section_hook (abfd, sec);
}
@@ -2486,10 +2456,14 @@ tpoff (struct bfd_link_info *info, bfd_vma address)
/* Relocate a SPARC ELF section. */
bfd_boolean
-_bfd_sparc_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
- bfd *input_bfd, asection *input_section,
- bfd_byte *contents, Elf_Internal_Rela *relocs,
- Elf_Internal_Sym *local_syms, asection **local_sections)
+_bfd_sparc_elf_relocate_section (bfd *output_bfd,
+ struct bfd_link_info *info,
+ bfd *input_bfd,
+ asection *input_section,
+ bfd_byte *contents,
+ Elf_Internal_Rela *relocs,
+ Elf_Internal_Sym *local_syms,
+ asection **local_sections)
{
struct _bfd_sparc_elf_link_hash_table *htab;
Elf_Internal_Shdr *symtab_hdr;
@@ -2501,9 +2475,6 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
Elf_Internal_Rela *relend;
int num_relocs;
- if (info->relocatable)
- return TRUE;
-
htab = _bfd_sparc_elf_hash_table (info);
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -2547,7 +2518,6 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
}
howto = _bfd_sparc_elf_howto_table + r_type;
- /* This is a final link. */
r_symndx = SPARC_ELF_R_SYMNDX (htab, rel->r_info);
h = NULL;
sym = NULL;
@@ -2579,6 +2549,21 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
}
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce
+ sections, or sections discarded by a linker script, we
+ just want the section contents zeroed. Avoid any
+ special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
switch (r_type)
{
case R_SPARC_GOT10:
@@ -2660,7 +2645,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
0, R_SPARC_RELATIVE);
outrel.r_addend = relocation;
relocation = 0;
- SPARC_ELF_APPEND_RELA (htab, output_bfd, s, &outrel);
+ sparc_elf_append_rela (output_bfd, s, &outrel);
}
SPARC_ELF_PUT_WORD (htab, output_bfd, relocation,
@@ -2767,11 +2752,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
case R_SPARC_L44:
case R_SPARC_UA64:
r_sparc_plt32:
- /* r_symndx will be zero only for relocs against symbols
- from removed linkonce sections, or sections discarded by
- a linker script. */
- if (r_symndx == 0
- || (input_section->flags & SEC_ALLOC) == 0)
+ if ((input_section->flags & SEC_ALLOC) == 0)
break;
if ((info->shared
@@ -2879,6 +2860,8 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
{
long indx;
+ outrel.r_addend = relocation + rel->r_addend;
+
if (is_plt)
sec = htab->splt;
@@ -2893,9 +2876,20 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
{
asection *osec;
+ /* We are turning this relocation into one
+ against a section symbol. It would be
+ proper to subtract the symbol's value,
+ osec->vma, from the emitted reloc addend,
+ but ld.so expects buggy relocs. */
osec = sec->output_section;
indx = elf_section_data (osec)->dynindx;
+ if (indx == 0)
+ {
+ osec = htab->elf.text_index_section;
+ indx = elf_section_data (osec)->dynindx;
+ }
+
/* FIXME: we really should be able to link non-pic
shared libraries. */
if (indx == 0)
@@ -2909,12 +2903,12 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
}
}
- outrel.r_info = SPARC_ELF_R_INFO (htab, rel, indx, r_type);
- outrel.r_addend = relocation + rel->r_addend;
+ outrel.r_info = SPARC_ELF_R_INFO (htab, rel, indx,
+ r_type);
}
}
- SPARC_ELF_APPEND_RELA (htab, output_bfd, sreloc, &outrel);
+ sparc_elf_append_rela (output_bfd, sreloc, &outrel);
/* This reloc will be computed at runtime, so there's no
need to do anything now. */
@@ -3022,7 +3016,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
else
outrel.r_addend = 0;
outrel.r_info = SPARC_ELF_R_INFO (htab, NULL, indx, dr_type);
- SPARC_ELF_APPEND_RELA (htab, output_bfd, htab->srelgot, &outrel);
+ sparc_elf_append_rela (output_bfd, htab->srelgot, &outrel);
if (r_type == R_SPARC_TLS_GD_HI22
|| r_type == R_SPARC_TLS_GD_LO10)
@@ -3043,7 +3037,8 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
outrel.r_info = SPARC_ELF_R_INFO (htab, NULL, indx,
SPARC_ELF_DTPOFF_RELOC (htab));
outrel.r_offset += SPARC_ELF_WORD_BYTES (htab);
- SPARC_ELF_APPEND_RELA (htab, output_bfd, htab->srelgot, &outrel);
+ sparc_elf_append_rela (output_bfd, htab->srelgot,
+ &outrel);
}
}
else if (dr_type == SPARC_ELF_DTPMOD_RELOC (htab))
@@ -3112,7 +3107,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+ rel->r_addend;
}
- SPARC_ELF_APPEND_RELA (htab, output_bfd, sreloc, &outrel);
+ sparc_elf_append_rela (output_bfd, sreloc, &outrel);
continue;
}
relocation = tpoff (info, relocation);
@@ -3633,9 +3628,11 @@ _bfd_sparc_elf_finish_dynamic_symbol (bfd *output_bfd,
{
bfd *dynobj;
struct _bfd_sparc_elf_link_hash_table *htab;
+ const struct elf_backend_data *bed;
htab = _bfd_sparc_elf_hash_table (info);
dynobj = htab->elf.dynobj;
+ bed = get_elf_backend_data (output_bfd);
if (h->plt.offset != (bfd_vma) -1)
{
@@ -3705,18 +3702,8 @@ _bfd_sparc_elf_finish_dynamic_symbol (bfd *output_bfd,
thus .plt[4] has corresponding .rela.plt[0] and so on. */
loc = srela->contents;
-#ifdef BFD64
- if (ABI_64_P (output_bfd))
- {
- loc += rela_index * sizeof (Elf64_External_Rela);
- bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
- }
- else
-#endif
- {
- loc += rela_index * sizeof (Elf32_External_Rela);
- bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
- }
+ loc += rela_index * bed->s->sizeof_rela;
+ bed->s->swap_reloca_out (output_bfd, &rela, loc);
if (!h->def_regular)
{
@@ -3773,7 +3760,7 @@ _bfd_sparc_elf_finish_dynamic_symbol (bfd *output_bfd,
SPARC_ELF_PUT_WORD (htab, output_bfd, 0,
sgot->contents + (h->got.offset & ~(bfd_vma) 1));
- SPARC_ELF_APPEND_RELA (htab, output_bfd, srela, &rela);
+ sparc_elf_append_rela (output_bfd, srela, &rela);
}
if (h->needs_copy)
@@ -3793,7 +3780,7 @@ _bfd_sparc_elf_finish_dynamic_symbol (bfd *output_bfd,
+ h->root.u.def.section->output_offset);
rela.r_info = SPARC_ELF_R_INFO (htab, NULL, h->dynindx, R_SPARC_COPY);
rela.r_addend = 0;
- SPARC_ELF_APPEND_RELA (htab, output_bfd, s, &rela);
+ sparc_elf_append_rela (output_bfd, s, &rela);
}
/* Mark some specially defined symbols as absolute. On VxWorks,
@@ -3809,83 +3796,30 @@ _bfd_sparc_elf_finish_dynamic_symbol (bfd *output_bfd,
/* Finish up the dynamic sections. */
-#ifdef BFD64
static bfd_boolean
-sparc64_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
- bfd *dynobj, asection *sdyn,
- asection *splt ATTRIBUTE_UNUSED)
+sparc_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
+ bfd *dynobj, asection *sdyn,
+ asection *splt ATTRIBUTE_UNUSED)
{
- Elf64_External_Dyn *dyncon, *dynconend;
- int stt_regidx = -1;
-
- dyncon = (Elf64_External_Dyn *) sdyn->contents;
- dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
- for (; dyncon < dynconend; dyncon++)
- {
- Elf_Internal_Dyn dyn;
- const char *name;
- bfd_boolean size;
-
- bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
-
- switch (dyn.d_tag)
- {
- case DT_PLTGOT: name = ".plt"; size = FALSE; break;
- case DT_PLTRELSZ: name = ".rela.plt"; size = TRUE; break;
- case DT_JMPREL: name = ".rela.plt"; size = FALSE; break;
- case DT_SPARC_REGISTER:
- if (stt_regidx == -1)
- {
- stt_regidx =
- _bfd_elf_link_lookup_local_dynindx (info, output_bfd, -1);
- if (stt_regidx == -1)
- return FALSE;
- }
- dyn.d_un.d_val = stt_regidx++;
- bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
- /* fallthrough */
- default: name = NULL; size = FALSE; break;
- }
-
- if (name != NULL)
- {
- asection *s;
-
- s = bfd_get_section_by_name (output_bfd, name);
- if (s == NULL)
- dyn.d_un.d_val = 0;
- else
- {
- if (! size)
- dyn.d_un.d_ptr = s->vma;
- else
- dyn.d_un.d_val = s->size;
- }
- bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
- }
- }
- return TRUE;
-}
-#endif
-
-static bfd_boolean
-sparc32_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
- bfd *dynobj, asection *sdyn,
- asection *splt ATTRIBUTE_UNUSED)
-{
- Elf32_External_Dyn *dyncon, *dynconend;
struct _bfd_sparc_elf_link_hash_table *htab;
+ const struct elf_backend_data *bed;
+ bfd_byte *dyncon, *dynconend;
+ size_t dynsize;
+ int stt_regidx = -1;
+ bfd_boolean abi_64_p;
htab = _bfd_sparc_elf_hash_table (info);
- dyncon = (Elf32_External_Dyn *) sdyn->contents;
- dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
- for (; dyncon < dynconend; dyncon++)
+ bed = get_elf_backend_data (output_bfd);
+ dynsize = bed->s->sizeof_dyn;
+ dynconend = sdyn->contents + sdyn->size;
+ abi_64_p = ABI_64_P (output_bfd);
+ for (dyncon = sdyn->contents; dyncon < dynconend; dyncon += dynsize)
{
Elf_Internal_Dyn dyn;
const char *name;
bfd_boolean size;
- bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
+ bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
if (htab->is_vxworks && dyn.d_tag == DT_RELASZ)
{
@@ -3894,7 +3828,7 @@ sparc32_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
if (htab->srelplt)
{
dyn.d_un.d_val -= htab->srelplt->size;
- bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+ bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
}
}
else if (htab->is_vxworks && dyn.d_tag == DT_PLTGOT)
@@ -3905,9 +3839,21 @@ sparc32_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
{
dyn.d_un.d_val = (htab->sgotplt->output_section->vma
+ htab->sgotplt->output_offset);
- bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+ bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
}
}
+ else if (abi_64_p && dyn.d_tag == DT_SPARC_REGISTER)
+ {
+ if (stt_regidx == -1)
+ {
+ stt_regidx =
+ _bfd_elf_link_lookup_local_dynindx (info, output_bfd, -1);
+ if (stt_regidx == -1)
+ return FALSE;
+ }
+ dyn.d_un.d_val = stt_regidx++;
+ bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
+ }
else
{
switch (dyn.d_tag)
@@ -3915,7 +3861,7 @@ sparc32_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
case DT_PLTGOT: name = ".plt"; size = FALSE; break;
case DT_PLTRELSZ: name = ".rela.plt"; size = TRUE; break;
case DT_JMPREL: name = ".rela.plt"; size = FALSE; break;
- default: name = NULL; size = FALSE; break;
+ default: name = NULL; size = FALSE; break;
}
if (name != NULL)
@@ -3932,7 +3878,7 @@ sparc32_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
else
dyn.d_un.d_val = s->size;
}
- bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+ bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
}
}
}
@@ -4046,20 +3992,12 @@ _bfd_sparc_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *i
if (elf_hash_table (info)->dynamic_sections_created)
{
asection *splt;
- bfd_boolean ret;
splt = bfd_get_section_by_name (dynobj, ".plt");
BFD_ASSERT (splt != NULL && sdyn != NULL);
-#ifdef BFD64
- if (ABI_64_P (output_bfd))
- ret = sparc64_finish_dyn (output_bfd, info, dynobj, sdyn, splt);
- else
-#endif
- ret = sparc32_finish_dyn (output_bfd, info, dynobj, sdyn, splt);
-
- if (ret != TRUE)
- return ret;
+ if (!sparc_finish_dyn (output_bfd, info, dynobj, sdyn, splt))
+ return FALSE;
/* Initialize the contents of the .plt section. */
if (splt->size > 0)
@@ -4081,7 +4019,8 @@ _bfd_sparc_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *i
}
elf_section_data (splt->output_section)->this_hdr.sh_entsize
- = htab->plt_entry_size;
+ = (htab->is_vxworks || !ABI_64_P (output_bfd))
+ ? 0 : htab->plt_entry_size;
}
/* Set the first entry in the global offset table to the address of
diff --git a/bfd/elfxx-sparc.h b/bfd/elfxx-sparc.h
index 0a5a88b6fe36..787fd33c6d7c 100644
--- a/bfd/elfxx-sparc.h
+++ b/bfd/elfxx-sparc.h
@@ -1,5 +1,5 @@
/* SPARC ELF specific backend routines.
- Copyright 2005 Free Software Foundation, Inc.
+ Copyright 2005, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -71,7 +71,6 @@ struct _bfd_sparc_elf_link_hash_table
asection *sgotplt;
void (*put_word) (bfd *, bfd_vma, void *);
- void (*append_rela) (bfd *, asection *, Elf_Internal_Rela *);
bfd_vma (*r_info) (Elf_Internal_Rela *, bfd_vma, bfd_vma);
bfd_vma (*r_symndx) (bfd_vma);
int (*build_plt_entry) (bfd *, asection *, bfd_vma, bfd_vma, bfd_vma *);
@@ -97,6 +96,8 @@ struct _bfd_sparc_elf_link_hash_table
extern reloc_howto_type *_bfd_sparc_elf_reloc_type_lookup
(bfd *, bfd_reloc_code_real_type);
+extern reloc_howto_type *_bfd_sparc_elf_reloc_name_lookup
+ (bfd *, const char *);
extern void _bfd_sparc_elf_info_to_howto
(bfd *, arelent *, Elf_Internal_Rela *);
extern reloc_howto_type *_bfd_sparc_elf_info_to_howto_ptr
diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h
index 503726d2b866..be0cfecfde03 100644
--- a/bfd/elfxx-target.h
+++ b/bfd/elfxx-target.h
@@ -29,7 +29,9 @@
#ifndef bfd_elfNN_close_and_cleanup
#define bfd_elfNN_close_and_cleanup _bfd_elf_close_and_cleanup
#endif
-#define bfd_elfNN_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
+#ifndef bfd_elfNN_bfd_free_cached_info
+#define bfd_elfNN_bfd_free_cached_info _bfd_free_cached_info
+#endif
#ifndef bfd_elfNN_get_section_contents
#define bfd_elfNN_get_section_contents _bfd_generic_get_section_contents
#endif
@@ -101,6 +103,9 @@
#ifndef elf_backend_want_p_paddr_set_to_zero
#define elf_backend_want_p_paddr_set_to_zero 0
#endif
+#ifndef elf_backend_default_execstack
+#define elf_backend_default_execstack 1
+#endif
#define bfd_elfNN_bfd_debug_info_start bfd_void
#define bfd_elfNN_bfd_debug_info_end bfd_void
@@ -129,7 +134,10 @@
#define elf_backend_gc_mark_dynamic_ref bfd_elf_gc_mark_dynamic_ref_symbol
#endif
#ifndef elf_backend_gc_mark_hook
-#define elf_backend_gc_mark_hook NULL
+#define elf_backend_gc_mark_hook _bfd_elf_gc_mark_hook
+#endif
+#ifndef elf_backend_gc_mark_extra_sections
+#define elf_backend_gc_mark_extra_sections NULL
#endif
#ifndef elf_backend_gc_sweep_hook
#define elf_backend_gc_sweep_hook NULL
@@ -283,6 +291,10 @@
#define elf_info_to_howto_rel 0
#endif
+#ifndef ELF_OSABI
+#define ELF_OSABI ELFOSABI_NONE
+#endif
+
#ifndef ELF_MAXPAGESIZE
#error ELF_MAXPAGESIZE is not defined
#define ELF_MAXPAGESIZE 1
@@ -292,6 +304,10 @@
#define ELF_MINPAGESIZE ELF_MAXPAGESIZE
#endif
+#ifndef ELF_COMMONPAGESIZE
+#define ELF_COMMONPAGESIZE ELF_MAXPAGESIZE
+#endif
+
#ifndef ELF_DYNAMIC_SEC_FLAGS
/* Note that we set the SEC_IN_MEMORY flag for these sections. */
#define ELF_DYNAMIC_SEC_FLAGS \
@@ -366,6 +382,9 @@
#ifndef elf_backend_check_directives
#define elf_backend_check_directives 0
#endif
+#ifndef elf_backend_as_needed_cleanup
+#define elf_backend_as_needed_cleanup 0
+#endif
#ifndef elf_backend_adjust_dynamic_symbol
#define elf_backend_adjust_dynamic_symbol 0
#endif
@@ -375,6 +394,10 @@
#ifndef elf_backend_size_dynamic_sections
#define elf_backend_size_dynamic_sections 0
#endif
+#ifndef elf_backend_init_index_section
+#define elf_backend_init_index_section \
+ ((void (*) (bfd *, struct bfd_link_info *)) bfd_void)
+#endif
#ifndef elf_backend_relocate_section
#define elf_backend_relocate_section 0
#endif
@@ -396,6 +419,9 @@
#ifndef elf_backend_modify_segment_map
#define elf_backend_modify_segment_map 0
#endif
+#ifndef elf_backend_modify_program_headers
+#define elf_backend_modify_program_headers 0
+#endif
#ifndef elf_backend_ecoff_debug_swap
#define elf_backend_ecoff_debug_swap 0
#endif
@@ -405,12 +431,27 @@
#ifndef elf_backend_got_header_size
#define elf_backend_got_header_size 0
#endif
+#ifndef elf_backend_obj_attrs_vendor
+#define elf_backend_obj_attrs_vendor NULL
+#endif
+#ifndef elf_backend_obj_attrs_section
+#define elf_backend_obj_attrs_section NULL
+#endif
+#ifndef elf_backend_obj_attrs_arg_type
+#define elf_backend_obj_attrs_arg_type NULL
+#endif
+#ifndef elf_backend_obj_attrs_section_type
+#define elf_backend_obj_attrs_section_type SHT_GNU_ATTRIBUTES
+#endif
#ifndef elf_backend_post_process_headers
#define elf_backend_post_process_headers NULL
#endif
#ifndef elf_backend_print_symbol_all
#define elf_backend_print_symbol_all NULL
#endif
+#ifndef elf_backend_output_arch_local_syms
+#define elf_backend_output_arch_local_syms NULL
+#endif
#ifndef elf_backend_output_arch_syms
#define elf_backend_output_arch_syms NULL
#endif
@@ -441,6 +482,9 @@
#ifndef elf_backend_grok_psinfo
#define elf_backend_grok_psinfo NULL
#endif
+#ifndef elf_backend_write_core_note
+#define elf_backend_write_core_note NULL
+#endif
#ifndef elf_backend_sprintf_vma
#define elf_backend_sprintf_vma _bfd_elf_sprintf_vma
#endif
@@ -551,15 +595,24 @@
#define elf_backend_merge_symbol NULL
#endif
+#ifndef elf_backend_hash_symbol
+#define elf_backend_hash_symbol _bfd_elf_hash_symbol
+#endif
+
+#ifndef elf_backend_is_function_type
+#define elf_backend_is_function_type _bfd_elf_is_function_type
+#endif
+
extern const struct elf_size_info _bfd_elfNN_size_info;
-#ifndef INCLUDED_TARGET_FILE
-static const struct elf_backend_data elfNN_bed =
+static struct elf_backend_data elfNN_bed =
{
ELF_ARCH, /* arch */
ELF_MACHINE_CODE, /* elf_machine_code */
+ ELF_OSABI, /* elf_osabi */
ELF_MAXPAGESIZE, /* maxpagesize */
ELF_MINPAGESIZE, /* minpagesize */
+ ELF_COMMONPAGESIZE, /* commonpagesize */
ELF_DYNAMIC_SEC_FLAGS, /* dynamic_sec_flags */
elf_info_to_howto,
elf_info_to_howto_rel,
@@ -583,9 +636,11 @@ static const struct elf_backend_data elfNN_bed =
elf_backend_omit_section_dynsym,
elf_backend_check_relocs,
elf_backend_check_directives,
+ elf_backend_as_needed_cleanup,
elf_backend_adjust_dynamic_symbol,
elf_backend_always_size_sections,
elf_backend_size_dynamic_sections,
+ elf_backend_init_index_section,
elf_backend_relocate_section,
elf_backend_finish_dynamic_symbol,
elf_backend_finish_dynamic_sections,
@@ -593,11 +648,14 @@ static const struct elf_backend_data elfNN_bed =
elf_backend_final_write_processing,
elf_backend_additional_program_headers,
elf_backend_modify_segment_map,
+ elf_backend_modify_program_headers,
elf_backend_gc_mark_dynamic_ref,
elf_backend_gc_mark_hook,
+ elf_backend_gc_mark_extra_sections,
elf_backend_gc_sweep_hook,
elf_backend_post_process_headers,
elf_backend_print_symbol_all,
+ elf_backend_output_arch_local_syms,
elf_backend_output_arch_syms,
elf_backend_copy_indirect_symbol,
elf_backend_hide_symbol,
@@ -608,6 +666,7 @@ static const struct elf_backend_data elfNN_bed =
elf_backend_count_relocs,
elf_backend_grok_prstatus,
elf_backend_grok_psinfo,
+ elf_backend_write_core_note,
elf_backend_sprintf_vma,
elf_backend_fprintf_vma,
elf_backend_reloc_type_class,
@@ -628,6 +687,8 @@ static const struct elf_backend_data elfNN_bed =
elf_backend_common_section_index,
elf_backend_common_section,
elf_backend_merge_symbol,
+ elf_backend_hash_symbol,
+ elf_backend_is_function_type,
elf_backend_link_order_error_handler,
elf_backend_relplt_name,
ELF_MACHINE_ALT1,
@@ -635,6 +696,10 @@ static const struct elf_backend_data elfNN_bed =
&elf_backend_size_info,
elf_backend_special_sections,
elf_backend_got_header_size,
+ elf_backend_obj_attrs_vendor,
+ elf_backend_obj_attrs_section,
+ elf_backend_obj_attrs_arg_type,
+ elf_backend_obj_attrs_section_type,
elf_backend_collect,
elf_backend_type_change_ok,
elf_backend_may_use_rel_p,
@@ -651,9 +716,9 @@ static const struct elf_backend_data elfNN_bed =
elf_backend_can_refcount,
elf_backend_want_got_sym,
elf_backend_want_dynbss,
- elf_backend_want_p_paddr_set_to_zero
+ elf_backend_want_p_paddr_set_to_zero,
+ elf_backend_default_execstack
};
-#endif
/* Forward declaration for use when initialising alternative_target field. */
#ifdef TARGET_LITTLE_SYM
diff --git a/bfd/format.c b/bfd/format.c
index 6a34dd2bea48..514389843530 100644
--- a/bfd/format.c
+++ b/bfd/format.c
@@ -1,6 +1,6 @@
/* Generic BFD support for file formats.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1999, 2000, 2001, 2002,
- 2003, 2005 Free Software Foundation, Inc.
+ 2003, 2005, 2007 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -42,8 +42,8 @@ SUBSECTION
File format functions
*/
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
/* IMPORT from targets.c. */
diff --git a/bfd/freebsd.h b/bfd/freebsd.h
index 6d577ea4afbc..e453b4b21c3b 100644
--- a/bfd/freebsd.h
+++ b/bfd/freebsd.h
@@ -1,5 +1,5 @@
/* BFD back-end definitions used by all FreeBSD targets.
- Copyright 1990, 1991, 1992, 1996, 1997, 2000, 2001, 2002, 2005
+ Copyright 1990, 1991, 1992, 1996, 1997, 2000, 2001, 2002, 2005, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -51,8 +51,8 @@
((exec).a_info = \
((exec).a_info & 0x03ffffff) | ((flags & 0x03f) << 26))
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libaout.h"
diff --git a/bfd/gen-aout.c b/bfd/gen-aout.c
index c81d3d0027b5..80e90c05eaea 100644
--- a/bfd/gen-aout.c
+++ b/bfd/gen-aout.c
@@ -1,5 +1,5 @@
/* Generate parameters for an a.out system.
- Copyright 1990, 1991, 1992, 1993, 1994, 1995, 2001, 2002
+ Copyright 1990, 1991, 1992, 1993, 1994, 1995, 2001, 2002, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -99,8 +99,8 @@ main (argc, argv)
printf("\n#define MY(OP) CONCAT2 (%s_,OP)\n\n", target);
printf("#define TARGETNAME \"a.out-%s\"\n\n", target);
- printf("#include \"bfd.h\"\n");
printf("#include \"sysdep.h\"\n");
+ printf("#include \"bfd.h\"\n");
printf("#include \"libbfd.h\"\n");
printf("#include \"libaout.h\"\n");
printf("\n#include \"aout-target.h\"\n");
diff --git a/bfd/hash.c b/bfd/hash.c
index ce9ba5c6297f..2b67dc5eb020 100644
--- a/bfd/hash.c
+++ b/bfd/hash.c
@@ -1,6 +1,6 @@
/* hash.c -- hash table routines for BFD
Copyright 1993, 1994, 1995, 1997, 1999, 2001, 2002, 2003, 2004, 2005,
- 2006 Free Software Foundation, Inc.
+ 2006, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain <sac@cygnus.com>
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "objalloc.h"
#include "libiberty.h"
@@ -299,6 +299,58 @@ SUBSUBSECTION
/* The default number of entries to use when creating a hash table. */
#define DEFAULT_SIZE 4051
+
+/* The following function returns a nearest prime number which is
+ greater than N, and near a power of two. Copied from libiberty.
+ Returns zero for ridiculously large N to signify an error. */
+
+static unsigned long
+higher_prime_number (unsigned long n)
+{
+ /* These are primes that are near, but slightly smaller than, a
+ power of two. */
+ static const unsigned long primes[] = {
+ (unsigned long) 127,
+ (unsigned long) 2039,
+ (unsigned long) 32749,
+ (unsigned long) 65521,
+ (unsigned long) 131071,
+ (unsigned long) 262139,
+ (unsigned long) 524287,
+ (unsigned long) 1048573,
+ (unsigned long) 2097143,
+ (unsigned long) 4194301,
+ (unsigned long) 8388593,
+ (unsigned long) 16777213,
+ (unsigned long) 33554393,
+ (unsigned long) 67108859,
+ (unsigned long) 134217689,
+ (unsigned long) 268435399,
+ (unsigned long) 536870909,
+ (unsigned long) 1073741789,
+ (unsigned long) 2147483647,
+ /* 4294967291L */
+ ((unsigned long) 2147483647) + ((unsigned long) 2147483644),
+ };
+
+ const unsigned long *low = &primes[0];
+ const unsigned long *high = &primes[sizeof (primes) / sizeof (primes[0])];
+
+ while (low != high)
+ {
+ const unsigned long *mid = low + (high - low) / 2;
+ if (n >= *mid)
+ low = mid + 1;
+ else
+ high = mid;
+ }
+
+ if (n >= *low)
+ return 0;
+
+ return *low;
+}
+
static size_t bfd_default_hash_table_size = DEFAULT_SIZE;
/* Create a new hash table, given a number of entries. */
@@ -330,6 +382,8 @@ bfd_hash_table_init_n (struct bfd_hash_table *table,
memset ((void *) table->table, 0, alloc);
table->size = size;
table->entsize = entsize;
+ table->count = 0;
+ table->frozen = 0;
table->newfunc = newfunc;
return TRUE;
}
@@ -416,6 +470,45 @@ bfd_hash_lookup (struct bfd_hash_table *table,
hashp->hash = hash;
hashp->next = table->table[index];
table->table[index] = hashp;
+ table->count++;
+
+ if (!table->frozen && table->count > table->size * 3 / 4)
+ {
+ unsigned long newsize = higher_prime_number (table->size);
+ struct bfd_hash_entry **newtable;
+ unsigned int hi;
+ unsigned long alloc = newsize * sizeof (struct bfd_hash_entry *);
+
+ /* If we can't find a higher prime, or we can't possibly alloc
+ that much memory, don't try to grow the table. */
+ if (newsize == 0 || alloc / sizeof (struct bfd_hash_entry *) != newsize)
+ {
+ table->frozen = 1;
+ return hashp;
+ }
+
+ newtable = ((struct bfd_hash_entry **)
+ objalloc_alloc ((struct objalloc *) table->memory, alloc));
+ memset ((PTR) newtable, 0, alloc);
+
+ for (hi = 0; hi < table->size; hi ++)
+ while (table->table[hi])
+ {
+ struct bfd_hash_entry *chain = table->table[hi];
+ struct bfd_hash_entry *chain_end = chain;
+ int index;
+
+ while (chain_end->next && chain_end->next->hash == chain->hash)
+ chain_end = chain_end->next;
+
+ table->table[hi] = chain_end->next;
+ index = chain->hash % newsize;
+ chain_end->next = newtable[index];
+ newtable[index] = chain;
+ }
+ table->table = newtable;
+ table->size = newsize;
+ }
return hashp;
}
@@ -480,14 +573,17 @@ bfd_hash_traverse (struct bfd_hash_table *table,
{
unsigned int i;
+ table->frozen = 1;
for (i = 0; i < table->size; i++)
{
struct bfd_hash_entry *p;
for (p = table->table[i]; p != NULL; p = p->next)
if (! (*func) (p, info))
- return;
+ goto out;
}
+ out:
+ table->frozen = 0;
}
void
diff --git a/bfd/host-aout.c b/bfd/host-aout.c
index 902a0206696c..12e59510d86c 100644
--- a/bfd/host-aout.c
+++ b/bfd/host-aout.c
@@ -1,5 +1,5 @@
/* BFD backend for local host's a.out binaries
- Copyright 1990, 1991, 1992, 1994, 1995, 2001
+ Copyright 1990, 1991, 1992, 1994, 1995, 2001, 2007
Free Software Foundation, Inc.
Written by Cygnus Support. Probably John Gilmore's fault.
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#define ARCH_SIZE 32
diff --git a/bfd/hp300bsd.c b/bfd/hp300bsd.c
index 91d994cc3ae5..43a6caf45c18 100644
--- a/bfd/hp300bsd.c
+++ b/bfd/hp300bsd.c
@@ -1,5 +1,6 @@
/* BFD back-end for HP 9000/300 (68000-based) machines running BSD Unix.
- Copyright 1992, 1994, 1995, 2001, 2003 Free Software Foundation, Inc.
+ Copyright 1992, 1994, 1995, 2001, 2003, 2007
+ Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -32,8 +33,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define MY(OP) CONCAT2 (hp300bsd_,OP)
#define TARGETNAME "a.out-hp300bsd"
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libaout.h"
diff --git a/bfd/hppabsd-core.c b/bfd/hppabsd-core.c
index 67627e7a6664..7de1c0199bee 100644
--- a/bfd/hppabsd-core.c
+++ b/bfd/hppabsd-core.c
@@ -1,6 +1,6 @@
/* BFD back-end for HPPA BSD core files.
- Copyright 1993, 1994, 1995, 1998, 1999, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1993, 1994, 1995, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -33,8 +33,8 @@
I would not expect this to be of use to any other host/target, but
you never know. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#if defined (HOST_HPPABSD)
@@ -90,11 +90,10 @@ make_bfd_asection (abfd, name, flags, size, offset, alignment_power)
{
asection *asect;
- asect = bfd_make_section (abfd, name);
+ asect = bfd_make_section_with_flags (abfd, name, flags);
if (!asect)
return NULL;
- asect->flags = flags;
asect->size = size;
asect->filepos = offset;
asect->alignment_power = alignment_power;
diff --git a/bfd/hpux-core.c b/bfd/hpux-core.c
index 08adcd3a1e6d..64ce41703e6e 100644
--- a/bfd/hpux-core.c
+++ b/bfd/hpux-core.c
@@ -1,6 +1,6 @@
/* BFD back-end for HP/UX core files.
- Copyright 1993, 1994, 1996, 1998, 1999, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
+ Copyright 1993, 1994, 1996, 1998, 1999, 2001, 2002, 2003, 2004, 2006,
+ 2007 Free Software Foundation, Inc.
Written by Stu Grossman, Cygnus Support.
Converted to back-end form by Ian Lance Taylor, Cygnus SUpport
@@ -23,8 +23,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
/* This file can only be compiled on systems which use HP/UX style
core files. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#if defined (HOST_HPPAHPUX) || defined (HOST_HP300HPUX) || defined (HOST_HPPAMPEIX)
@@ -124,11 +124,10 @@ make_bfd_asection (bfd *abfd, const char *name, flagword flags,
strcpy (newname, name);
- asect = bfd_make_section_anyway (abfd, newname);
+ asect = bfd_make_section_anyway_with_flags (abfd, newname, flags);
if (!asect)
return NULL;
- asect->flags = flags;
asect->size = size;
asect->vma = vma;
asect->filepos = bfd_tell (abfd);
@@ -145,7 +144,7 @@ thread_section_p (bfd *abfd ATTRIBUTE_UNUSED,
asection *sect,
void *obj ATTRIBUTE_UNUSED)
{
- return (strncmp (sect->name, ".reg/", 5) == 0);
+ return CONST_STRNEQ (sect->name, ".reg/");
}
/* this function builds a bfd target if the file is a corefile.
diff --git a/bfd/i386aout.c b/bfd/i386aout.c
index 128e9d20dc04..936ffb21de15 100644
--- a/bfd/i386aout.c
+++ b/bfd/i386aout.c
@@ -1,6 +1,6 @@
/* BFD back-end for i386 a.out binaries.
- Copyright 1990, 1991, 1992, 1994, 1996, 1997, 2001, 2002, 2003, 2005
- Free Software Foundation, Inc.
+ Copyright 1990, 1991, 1992, 1994, 1996, 1997, 2001, 2002, 2003, 2005,
+ 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -39,8 +39,8 @@
#define TARGETNAME "a.out-i386"
#define NO_WRITE_HEADER_KLUDGE 1
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "aout/aout64.h"
#include "libaout.h"
diff --git a/bfd/i386bsd.c b/bfd/i386bsd.c
index 3f98ee4025cb..f8b109edae7b 100644
--- a/bfd/i386bsd.c
+++ b/bfd/i386bsd.c
@@ -1,5 +1,5 @@
/* BFD back-end for i386 a.out binaries under BSD.
- Copyright 1990, 1991, 1992, 1993, 1994, 2001
+ Copyright 1990, 1991, 1992, 1993, 1994, 2001, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -42,8 +42,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define MY(OP) CONCAT2 (i386bsd_,OP)
#define TARGETNAME "a.out-i386-bsd"
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libaout.h"
diff --git a/bfd/i386linux.c b/bfd/i386linux.c
index 17c618006ff3..83f9965a3c36 100644
--- a/bfd/i386linux.c
+++ b/bfd/i386linux.c
@@ -1,6 +1,6 @@
/* BFD back-end for linux flavored i386 a.out binaries.
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001, 2002, 2003,
- 2004, 2006 Free Software Foundation, Inc.
+ 2004, 2006, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -26,8 +26,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define MACHTYPE_OK(mtype) ((mtype) == M_386 || (mtype) == M_UNKNOWN)
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "aout/aout64.h"
#include "aout/stab_gnu.h"
@@ -93,8 +93,7 @@ i386linux_write_object_contents (abfd)
#define GOT_REF_PREFIX "__GOT_"
#endif
-#define IS_GOT_SYM(name) \
- (strncmp (name, GOT_REF_PREFIX, sizeof GOT_REF_PREFIX - 1) == 0)
+#define IS_GOT_SYM(name) (CONST_STRNEQ (name, GOT_REF_PREFIX))
/* See if a symbol name is a reference to the procedure linkage table. */
@@ -102,8 +101,7 @@ i386linux_write_object_contents (abfd)
#define PLT_REF_PREFIX "__PLT_"
#endif
-#define IS_PLT_SYM(name) \
- (strncmp (name, PLT_REF_PREFIX, sizeof PLT_REF_PREFIX - 1) == 0)
+#define IS_PLT_SYM(name) (CONST_STRNEQ (name, PLT_REF_PREFIX))
/* This string is used to generate specialized error messages. */
@@ -312,9 +310,8 @@ linux_link_create_dynamic_sections (abfd, info)
/* We choose to use the name ".linux-dynamic" for the fixup table.
Why not? */
- s = bfd_make_section (abfd, ".linux-dynamic");
+ s = bfd_make_section_with_flags (abfd, ".linux-dynamic", flags);
if (s == NULL
- || ! bfd_set_section_flags (abfd, s, flags)
|| ! bfd_set_section_alignment (abfd, s, 2))
return FALSE;
s->size = 0;
@@ -442,8 +439,7 @@ linux_tally_symbols (h, data)
h = (struct linux_link_hash_entry *) h->root.root.u.i.link;
if (h->root.root.type == bfd_link_hash_undefined
- && strncmp (h->root.root.root.string, NEEDS_SHRLIB,
- sizeof NEEDS_SHRLIB - 1) == 0)
+ && CONST_STRNEQ (h->root.root.root.string, NEEDS_SHRLIB))
{
const char *name;
char *p;
diff --git a/bfd/i386lynx.c b/bfd/i386lynx.c
index 856c0fd20694..a1a45169c2bc 100644
--- a/bfd/i386lynx.c
+++ b/bfd/i386lynx.c
@@ -1,6 +1,6 @@
/* BFD back-end for i386 a.out binaries under LynxOS.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2001, 2002,
- 2003 Free Software Foundation, Inc.
+ 2003, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -31,8 +31,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define MY(OP) CONCAT2 (i386lynx_aout_,OP)
#define TARGETNAME "a.out-i386-lynx"
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#ifndef WRITE_HEADERS
diff --git a/bfd/i386mach3.c b/bfd/i386mach3.c
index 15137c7e9ed9..9e1beb175917 100644
--- a/bfd/i386mach3.c
+++ b/bfd/i386mach3.c
@@ -1,5 +1,5 @@
/* BFD back-end for i386 a.out binaries.
- Copyright 1990, 1991, 1993, 1994, 1995, 1997, 2001, 2002, 2003
+ Copyright 1990, 1991, 1993, 1994, 1995, 1997, 2001, 2002, 2003, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -33,8 +33,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define N_TXTSIZE(x) ((x).a_text)
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "aout/aout64.h"
#include "aout/stab_gnu.h"
diff --git a/bfd/i386msdos.c b/bfd/i386msdos.c
index bb25acd7324e..ceb0244fadee 100644
--- a/bfd/i386msdos.c
+++ b/bfd/i386msdos.c
@@ -1,6 +1,6 @@
/* BFD back-end for MS-DOS executables.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Bryan Ford of the University of Utah.
Contributed by the Center for Software Science at the
@@ -23,8 +23,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libaout.h"
@@ -33,24 +33,15 @@
#define EXE_LOAD_LOW 0xffff
#define EXE_PAGE_SIZE 512
-static int msdos_sizeof_headers
- PARAMS ((bfd *, bfd_boolean));
-static bfd_boolean msdos_write_object_contents
- PARAMS ((bfd *));
-static bfd_boolean msdos_set_section_contents
- PARAMS ((bfd *, sec_ptr, const PTR, file_ptr, bfd_size_type));
-
static int
-msdos_sizeof_headers (abfd, exec)
- bfd *abfd ATTRIBUTE_UNUSED;
- bfd_boolean exec ATTRIBUTE_UNUSED;
+msdos_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return 0;
}
static bfd_boolean
-msdos_write_object_contents (abfd)
- bfd *abfd;
+msdos_write_object_contents (bfd *abfd)
{
static char hdr[EXE_PAGE_SIZE];
file_ptr outfile_size = sizeof(hdr);
@@ -112,12 +103,11 @@ msdos_write_object_contents (abfd)
}
static bfd_boolean
-msdos_set_section_contents (abfd, section, location, offset, count)
- bfd *abfd;
- sec_ptr section;
- const PTR location;
- file_ptr offset;
- bfd_size_type count;
+msdos_set_section_contents (bfd *abfd,
+ sec_ptr section,
+ const void *location,
+ file_ptr offset,
+ bfd_size_type count)
{
if (count == 0)
@@ -140,6 +130,7 @@ msdos_set_section_contents (abfd, section, location, offset, count)
#define msdos_mkobject aout_32_mkobject
#define msdos_make_empty_symbol aout_32_make_empty_symbol
#define msdos_bfd_reloc_type_lookup aout_32_reloc_type_lookup
+#define msdos_bfd_reloc_name_lookup aout_32_reloc_name_lookup
#define msdos_close_and_cleanup _bfd_generic_close_and_cleanup
#define msdos_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
diff --git a/bfd/i386os9k.c b/bfd/i386os9k.c
index f825bc620736..f5b49cf28e21 100644
--- a/bfd/i386os9k.c
+++ b/bfd/i386os9k.c
@@ -1,6 +1,6 @@
/* BFD back-end for os9000 i386 binaries.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001, 2002,
- 2004, 2005 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -20,29 +20,19 @@ 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 "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "libaout.h" /* BFD a.out internal data structures */
#include "os9k.h"
-static const bfd_target * os9k_callback
- PARAMS ((bfd *));
-static const bfd_target * os9k_object_p
- PARAMS ((bfd *));
-static int os9k_sizeof_headers
- PARAMS ((bfd *, bfd_boolean));
-bfd_boolean os9k_swap_exec_header_in
- PARAMS ((bfd *, mh_com *, struct internal_exec *));
-
/* Swaps the information in an executable header taken from a raw byte
stream memory image, into the internal exec_header structure. */
-bfd_boolean
-os9k_swap_exec_header_in (abfd, raw_bytes, execp)
- bfd *abfd;
- mh_com *raw_bytes;
- struct internal_exec *execp;
+static bfd_boolean
+os9k_swap_exec_header_in (bfd *abfd,
+ mh_com *raw_bytes,
+ struct internal_exec *execp)
{
mh_com *bytes = (mh_com *) raw_bytes;
unsigned int dload, dmemsize, dmemstart;
@@ -77,44 +67,12 @@ os9k_swap_exec_header_in (abfd, raw_bytes, execp)
return TRUE;
}
-static const bfd_target *
-os9k_object_p (abfd)
- bfd *abfd;
-{
- struct internal_exec anexec;
- mh_com exec_bytes;
-
- if (bfd_bread ((PTR) &exec_bytes, (bfd_size_type) MHCOM_BYTES_SIZE, abfd)
- != MHCOM_BYTES_SIZE)
- {
- if (bfd_get_error () != bfd_error_system_call)
- bfd_set_error (bfd_error_wrong_format);
- return 0;
- }
-
- anexec.a_info = H_GET_16 (abfd, exec_bytes.m_sync);
- if (N_BADMAG (anexec))
- {
- bfd_set_error (bfd_error_wrong_format);
- return 0;
- }
-
- if (! os9k_swap_exec_header_in (abfd, &exec_bytes, &anexec))
- {
- if (bfd_get_error () != bfd_error_system_call)
- bfd_set_error (bfd_error_wrong_format);
- return NULL;
- }
- return aout_32_some_aout_object_p (abfd, &anexec, os9k_callback);
-}
-
/* Finish up the opening of a b.out file for reading. Fill in all the
fields that are not handled by common code. */
static const bfd_target *
-os9k_callback (abfd)
- bfd *abfd;
+os9k_callback (bfd *abfd)
{
struct internal_exec *execp = exec_hdr (abfd);
unsigned long bss_start;
@@ -156,10 +114,39 @@ os9k_callback (abfd)
return abfd->xvec;
}
+static const bfd_target *
+os9k_object_p (bfd *abfd)
+{
+ struct internal_exec anexec;
+ mh_com exec_bytes;
+
+ if (bfd_bread ((PTR) &exec_bytes, (bfd_size_type) MHCOM_BYTES_SIZE, abfd)
+ != MHCOM_BYTES_SIZE)
+ {
+ if (bfd_get_error () != bfd_error_system_call)
+ bfd_set_error (bfd_error_wrong_format);
+ return 0;
+ }
+
+ anexec.a_info = H_GET_16 (abfd, exec_bytes.m_sync);
+ if (N_BADMAG (anexec))
+ {
+ bfd_set_error (bfd_error_wrong_format);
+ return 0;
+ }
+
+ if (! os9k_swap_exec_header_in (abfd, &exec_bytes, &anexec))
+ {
+ if (bfd_get_error () != bfd_error_system_call)
+ bfd_set_error (bfd_error_wrong_format);
+ return NULL;
+ }
+ return aout_32_some_aout_object_p (abfd, &anexec, os9k_callback);
+}
+
static int
-os9k_sizeof_headers (ignore_abfd, ignore)
- bfd *ignore_abfd ATTRIBUTE_UNUSED;
- bfd_boolean ignore ATTRIBUTE_UNUSED;
+os9k_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return sizeof (struct internal_exec);
}
@@ -171,6 +158,7 @@ os9k_sizeof_headers (ignore_abfd, ignore)
#define aout_32_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define aout_32_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
+#define aout_32_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
#define aout_32_get_section_contents_in_window \
_bfd_generic_get_section_contents_in_window
diff --git a/bfd/ieee.c b/bfd/ieee.c
index be8455c617f8..727869e669cb 100644
--- a/bfd/ieee.c
+++ b/bfd/ieee.c
@@ -1,6 +1,6 @@
/* BFD back-end for ieee-695 objects.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support.
@@ -27,8 +27,8 @@
token (which is one byte in this lexicon) lookahead recursive decent
parser. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "ieee.h"
#include "libieee.h"
@@ -370,7 +370,7 @@ parse_int (common_header_type *ieee, bfd_vma *value_ptr)
static int
parse_i (common_header_type *ieee, bfd_boolean *ok)
{
- bfd_vma x;
+ bfd_vma x = 0;
*ok = parse_int (ieee, &x);
return x;
}
@@ -378,7 +378,7 @@ parse_i (common_header_type *ieee, bfd_boolean *ok)
static bfd_vma
must_parse_int (common_header_type *ieee)
{
- bfd_vma result;
+ bfd_vma result = 0;
BFD_ASSERT (parse_int (ieee, &result));
return result;
}
@@ -767,7 +767,7 @@ ieee_slurp_external_symbols (bfd *abfd)
unsigned int symbol_name_index;
unsigned int symbol_type_index;
unsigned int symbol_attribute_def;
- bfd_vma value;
+ bfd_vma value = 0;
switch (read_2bytes (&ieee->h))
{
@@ -1080,7 +1080,6 @@ get_section_entry (bfd *abfd, ieee_data_type *ieee, unsigned int index)
sprintf (tmp, " fsec%4d", index);
section = bfd_make_section (abfd, tmp);
ieee->section_table[index] = section;
- section->flags = SEC_NO_FLAGS;
section->target_index = index;
ieee->section_table[index] = section;
}
@@ -1268,14 +1267,15 @@ ieee_slurp_debug (bfd *abfd)
ieee_data_type *ieee = IEEE_DATA (abfd);
asection *sec;
file_ptr debug_end;
+ flagword flags;
if (ieee->w.r.debug_information_part == 0)
return TRUE;
- sec = bfd_make_section (abfd, ".debug");
+ flags = SEC_DEBUGGING | SEC_HAS_CONTENTS;
+ sec = bfd_make_section_with_flags (abfd, ".debug", flags);
if (sec == NULL)
return FALSE;
- sec->flags |= SEC_DEBUGGING | SEC_HAS_CONTENTS;
sec->filepos = ieee->w.r.debug_information_part;
debug_end = ieee_part_after (ieee, ieee->w.r.debug_information_part);
@@ -1875,8 +1875,8 @@ ieee_object_p (bfd *abfd)
family[9] = '\0';
}
}
- else if ((strncmp (processor, "cpu32", 5) == 0) /* CPU32 and CPU32+ */
- || (strncmp (processor, "CPU32", 5) == 0))
+ else if ((CONST_STRNEQ (processor, "cpu32")) /* CPU32 and CPU32+ */
+ || (CONST_STRNEQ (processor, "CPU32")))
strcpy (family, "68332");
else
{
@@ -2014,12 +2014,15 @@ ieee_print_symbol (bfd *abfd,
static bfd_boolean
ieee_new_section_hook (bfd *abfd, asection *newsect)
{
- newsect->used_by_bfd = bfd_alloc (abfd, (bfd_size_type) sizeof (ieee_per_section_type));
if (!newsect->used_by_bfd)
- return FALSE;
+ {
+ newsect->used_by_bfd = bfd_alloc (abfd, sizeof (ieee_per_section_type));
+ if (!newsect->used_by_bfd)
+ return FALSE;
+ }
ieee_per_section (newsect)->data = NULL;
ieee_per_section (newsect)->section = newsect;
- return TRUE;
+ return _bfd_generic_new_section_hook (abfd, newsect);
}
static long
@@ -3712,7 +3715,7 @@ ieee_generic_stat_arch_elt (bfd *abfd, struct stat *buf)
static int
ieee_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
- bfd_boolean x ATTRIBUTE_UNUSED)
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return 0;
}
@@ -3744,6 +3747,7 @@ ieee_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
#define ieee_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
#define ieee_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
+#define ieee_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
#define ieee_set_arch_mach _bfd_generic_set_arch_mach
diff --git a/bfd/ihex.c b/bfd/ihex.c
index fb2ab96c99ed..9f765b33f770 100644
--- a/bfd/ihex.c
+++ b/bfd/ihex.c
@@ -1,6 +1,6 @@
/* BFD back-end for Intel Hex objects.
- Copyright 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor of Cygnus Support <ian@cygnus.com>.
This file is part of BFD, the Binary File Descriptor library.
@@ -118,8 +118,8 @@ The MRI compiler uses this, which is a repeat of type 5:
18..19 Checksum in hex notation
20..21 Carriage return, line feed. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libiberty.h"
#include "safe-ctype.h"
@@ -355,6 +355,7 @@ ihex_scan (bfd *abfd)
char secbuf[20];
char *secname;
bfd_size_type amt;
+ flagword flags;
sprintf (secbuf, ".sec%d", bfd_count_sections (abfd) + 1);
amt = strlen (secbuf) + 1;
@@ -362,10 +363,10 @@ ihex_scan (bfd *abfd)
if (secname == NULL)
goto error_return;
strcpy (secname, secbuf);
- sec = bfd_make_section (abfd, secname);
+ flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC;
+ sec = bfd_make_section_with_flags (abfd, secname, flags);
if (sec == NULL)
goto error_return;
- sec->flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC;
sec->vma = extbase + segbase + addr;
sec->lma = extbase + segbase + addr;
sec->size = len;
@@ -553,7 +554,6 @@ ihex_read_section (bfd *abfd, asection *section, bfd_byte *contents)
{
char hdr[8];
unsigned int len;
- bfd_vma addr;
unsigned int type;
unsigned int i;
@@ -568,7 +568,6 @@ ihex_read_section (bfd *abfd, asection *section, bfd_byte *contents)
goto error_return;
len = HEX2 (hdr);
- addr = HEX4 (hdr + 2);
type = HEX2 (hdr + 6);
/* We should only see type 0 records here. */
@@ -900,7 +899,8 @@ ihex_set_arch_mach (bfd *abfd,
/* Get the size of the headers, for the linker. */
static int
-ihex_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, bfd_boolean exec ATTRIBUTE_UNUSED)
+ihex_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return 0;
}
@@ -924,9 +924,6 @@ ihex_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, bfd_boolean exec ATTRIBUTE_UNUS
#define ihex_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define ihex_read_minisymbols _bfd_nosymbols_read_minisymbols
#define ihex_minisymbol_to_symbol _bfd_nosymbols_minisymbol_to_symbol
-#define ihex_get_reloc_upper_bound ((long (*) (bfd *, asection *)) bfd_0l)
-#define ihex_canonicalize_reloc ((long (*) (bfd *, asection *, arelent **, asymbol **)) bfd_0l)
-#define ihex_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
#define ihex_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents
#define ihex_bfd_relax_section bfd_generic_relax_section
#define ihex_bfd_gc_sections bfd_generic_gc_sections
@@ -985,7 +982,7 @@ const bfd_target ihex_vec =
BFD_JUMP_TABLE_CORE (_bfd_nocore),
BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
BFD_JUMP_TABLE_SYMBOLS (ihex),
- BFD_JUMP_TABLE_RELOCS (ihex),
+ BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
BFD_JUMP_TABLE_WRITE (ihex),
BFD_JUMP_TABLE_LINK (ihex),
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
diff --git a/bfd/init.c b/bfd/init.c
index a34acbf9faf5..49f5533f2e21 100644
--- a/bfd/init.c
+++ b/bfd/init.c
@@ -1,5 +1,5 @@
/* bfd initialization stuff
- Copyright 1990, 1991, 1992, 1993, 1994, 1995, 2003
+ Copyright 1990, 1991, 1992, 1993, 1994, 1995, 2003, 2007
Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support.
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
/*
diff --git a/bfd/irix-core.c b/bfd/irix-core.c
index e6331454c445..5b982e276c79 100644
--- a/bfd/irix-core.c
+++ b/bfd/irix-core.c
@@ -1,5 +1,5 @@
/* BFD back-end for Irix core files.
- Copyright 1993, 1994, 1996, 1999, 2001, 2002, 2004
+ Copyright 1993, 1994, 1996, 1999, 2001, 2002, 2004, 2006, 2007
Free Software Foundation, Inc.
Written by Stu Grossman, Cygnus Support.
Converted to back-end form by Ian Lance Taylor, Cygnus Support
@@ -23,8 +23,8 @@
/* This file can only be compiled on systems which use Irix style core
files (namely, Irix 4 and Irix 5, so far). */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#ifdef IRIX_CORE
@@ -152,11 +152,10 @@ make_bfd_asection (bfd *abfd,
{
asection *asect;
- asect = bfd_make_section_anyway (abfd, name);
+ asect = bfd_make_section_anyway_with_flags (abfd, name, flags);
if (!asect)
return NULL;
- asect->flags = flags;
asect->size = size;
asect->vma = vma;
asect->filepos = filepos;
diff --git a/bfd/libaout.h b/bfd/libaout.h
index bb3ee8082674..879de1380bd6 100644
--- a/bfd/libaout.h
+++ b/bfd/libaout.h
@@ -1,6 +1,6 @@
/* BFD back-end data structures for a.out (and similar) files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -525,6 +525,9 @@ extern void NAME (aout, swap_std_reloc_in)
extern reloc_howto_type * NAME (aout, reloc_type_lookup)
(bfd *, bfd_reloc_code_real_type);
+extern reloc_howto_type * NAME (aout, reloc_name_lookup)
+ (bfd *, const char *);
+
extern bfd_boolean NAME (aout, slurp_reloc_table)
(bfd *, sec_ptr, asymbol **);
@@ -557,7 +560,7 @@ extern asymbol * NAME (aout, minisymbol_to_symbol)
(bfd *, bfd_boolean, const void *, asymbol *);
extern int NAME (aout, sizeof_headers)
- (bfd *, bfd_boolean);
+ (bfd *, struct bfd_link_info *);
extern bfd_boolean NAME (aout, adjust_sizes_and_vmas)
(bfd *, bfd_size_type *, file_ptr *);
diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
index ee2484f25c12..3555e6a8eefd 100644
--- a/bfd/libbfd-in.h
+++ b/bfd/libbfd-in.h
@@ -2,7 +2,7 @@
(This include file is not for users of the library.)
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -155,6 +155,8 @@ bfd * _bfd_new_bfd
(void);
void _bfd_delete_bfd
(bfd *);
+bfd_boolean _bfd_free_cached_info
+ (bfd *);
bfd_boolean bfd_false
(bfd *ignore);
@@ -215,8 +217,8 @@ int bfd_generic_stat_arch_elt
#define _bfd_generic_close_and_cleanup bfd_true
#define _bfd_generic_bfd_free_cached_info bfd_true
-#define _bfd_generic_new_section_hook \
- ((bfd_boolean (*) (bfd *, asection *)) bfd_true)
+extern bfd_boolean _bfd_generic_new_section_hook
+ (bfd *, asection *);
extern bfd_boolean _bfd_generic_get_section_contents
(bfd *, asection *, void *, file_ptr, bfd_size_type);
extern bfd_boolean _bfd_generic_get_section_contents_in_window
@@ -346,12 +348,13 @@ extern bfd_boolean _bfd_archive_coff_construct_extended_name_table
/* Routines to use for BFD_JUMP_TABLE_RELOCS when there is no reloc
support. Use BFD_JUMP_TABLE_RELOCS (_bfd_norelocs). */
-#define _bfd_norelocs_get_reloc_upper_bound \
- ((long (*) (bfd *, asection *)) _bfd_n1)
-#define _bfd_norelocs_canonicalize_reloc \
- ((long (*) (bfd *, asection *, arelent **, asymbol **)) _bfd_n1)
+extern long _bfd_norelocs_get_reloc_upper_bound (bfd *, asection *);
+extern long _bfd_norelocs_canonicalize_reloc (bfd *, asection *,
+ arelent **, asymbol **);
#define _bfd_norelocs_bfd_reloc_type_lookup \
((reloc_howto_type *(*) (bfd *, bfd_reloc_code_real_type)) bfd_nullvoidptr)
+#define _bfd_norelocs_bfd_reloc_name_lookup \
+ ((reloc_howto_type *(*) (bfd *, const char *)) bfd_nullvoidptr)
/* Routines to use for BFD_JUMP_TABLE_WRITE for targets which may not
be written. Use BFD_JUMP_TABLE_WRITE (_bfd_nowrite). */
@@ -373,7 +376,8 @@ extern bfd_boolean _bfd_generic_set_section_contents
/* Routines to use for BFD_JUMP_TABLE_LINK for targets which do not
support linking. Use BFD_JUMP_TABLE_LINK (_bfd_nolink). */
-#define _bfd_nolink_sizeof_headers ((int (*) (bfd *, bfd_boolean)) bfd_0)
+#define _bfd_nolink_sizeof_headers \
+ ((int (*) (bfd *, struct bfd_link_info *)) bfd_0)
#define _bfd_nolink_bfd_get_relocated_section_contents \
((bfd_byte *(*) (bfd *, struct bfd_link_info *, struct bfd_link_order *, \
bfd_byte *, bfd_boolean, asymbol **)) \
@@ -407,7 +411,7 @@ extern bfd_boolean _bfd_generic_set_section_contents
#define _bfd_nolink_bfd_link_split_section \
((bfd_boolean (*) (bfd *, struct bfd_section *)) bfd_false)
#define _bfd_nolink_section_already_linked \
- ((void (*) (bfd *, struct bfd_section *)) bfd_void)
+ ((void (*) (bfd *, struct bfd_section *, struct bfd_link_info *)) bfd_void)
/* Routines to use for BFD_JUMP_TABLE_DYNAMIC for targets which do not
have dynamic symbols or relocs. Use BFD_JUMP_TABLE_DYNAMIC
@@ -521,7 +525,7 @@ extern bfd_boolean _bfd_generic_link_split_section
(bfd *, struct bfd_section *);
extern void _bfd_generic_section_already_linked
- (bfd *, struct bfd_section *);
+ (bfd *, struct bfd_section *, struct bfd_link_info *);
/* Generic reloc_link_order processing routine. */
extern bfd_boolean _bfd_generic_reloc_link_order
@@ -544,6 +548,10 @@ extern bfd_reloc_status_type _bfd_final_link_relocate
extern bfd_reloc_status_type _bfd_relocate_contents
(reloc_howto_type *, bfd *, bfd_vma, bfd_byte *);
+/* Clear a given location using a given howto. */
+extern void _bfd_clear_contents (reloc_howto_type *howto, bfd *input_bfd,
+ bfd_byte *location);
+
/* Link stabs in sections in the first pass. */
extern bfd_boolean _bfd_link_section_stabs
diff --git a/bfd/libbfd.c b/bfd/libbfd.c
index 57cfabcd460e..7dada1cbf531 100644
--- a/bfd/libbfd.c
+++ b/bfd/libbfd.c
@@ -1,6 +1,6 @@
/* Assorted BFD support routines, only used internally.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005
+ 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#ifndef HAVE_GETPAGESIZE
@@ -103,6 +103,23 @@ bfd_void (bfd *ignore ATTRIBUTE_UNUSED)
{
}
+long
+_bfd_norelocs_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
+ asection *sec ATTRIBUTE_UNUSED)
+{
+ return sizeof (arelent *);
+}
+
+long
+_bfd_norelocs_canonicalize_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+ asection *sec ATTRIBUTE_UNUSED,
+ arelent **relptr,
+ asymbol **symbols ATTRIBUTE_UNUSED)
+{
+ *relptr = NULL;
+ return 0;
+}
+
bfd_boolean
_bfd_nocore_core_file_matches_executable_p
(bfd *ignore_core_bfd ATTRIBUTE_UNUSED,
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index 2a590a395a51..4c1414f826fa 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -7,7 +7,7 @@
(This include file is not for users of the library.)
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -160,6 +160,8 @@ bfd * _bfd_new_bfd
(void);
void _bfd_delete_bfd
(bfd *);
+bfd_boolean _bfd_free_cached_info
+ (bfd *);
bfd_boolean bfd_false
(bfd *ignore);
@@ -220,8 +222,8 @@ int bfd_generic_stat_arch_elt
#define _bfd_generic_close_and_cleanup bfd_true
#define _bfd_generic_bfd_free_cached_info bfd_true
-#define _bfd_generic_new_section_hook \
- ((bfd_boolean (*) (bfd *, asection *)) bfd_true)
+extern bfd_boolean _bfd_generic_new_section_hook
+ (bfd *, asection *);
extern bfd_boolean _bfd_generic_get_section_contents
(bfd *, asection *, void *, file_ptr, bfd_size_type);
extern bfd_boolean _bfd_generic_get_section_contents_in_window
@@ -351,12 +353,13 @@ extern bfd_boolean _bfd_archive_coff_construct_extended_name_table
/* Routines to use for BFD_JUMP_TABLE_RELOCS when there is no reloc
support. Use BFD_JUMP_TABLE_RELOCS (_bfd_norelocs). */
-#define _bfd_norelocs_get_reloc_upper_bound \
- ((long (*) (bfd *, asection *)) _bfd_n1)
-#define _bfd_norelocs_canonicalize_reloc \
- ((long (*) (bfd *, asection *, arelent **, asymbol **)) _bfd_n1)
+extern long _bfd_norelocs_get_reloc_upper_bound (bfd *, asection *);
+extern long _bfd_norelocs_canonicalize_reloc (bfd *, asection *,
+ arelent **, asymbol **);
#define _bfd_norelocs_bfd_reloc_type_lookup \
((reloc_howto_type *(*) (bfd *, bfd_reloc_code_real_type)) bfd_nullvoidptr)
+#define _bfd_norelocs_bfd_reloc_name_lookup \
+ ((reloc_howto_type *(*) (bfd *, const char *)) bfd_nullvoidptr)
/* Routines to use for BFD_JUMP_TABLE_WRITE for targets which may not
be written. Use BFD_JUMP_TABLE_WRITE (_bfd_nowrite). */
@@ -378,7 +381,8 @@ extern bfd_boolean _bfd_generic_set_section_contents
/* Routines to use for BFD_JUMP_TABLE_LINK for targets which do not
support linking. Use BFD_JUMP_TABLE_LINK (_bfd_nolink). */
-#define _bfd_nolink_sizeof_headers ((int (*) (bfd *, bfd_boolean)) bfd_0)
+#define _bfd_nolink_sizeof_headers \
+ ((int (*) (bfd *, struct bfd_link_info *)) bfd_0)
#define _bfd_nolink_bfd_get_relocated_section_contents \
((bfd_byte *(*) (bfd *, struct bfd_link_info *, struct bfd_link_order *, \
bfd_byte *, bfd_boolean, asymbol **)) \
@@ -412,7 +416,7 @@ extern bfd_boolean _bfd_generic_set_section_contents
#define _bfd_nolink_bfd_link_split_section \
((bfd_boolean (*) (bfd *, struct bfd_section *)) bfd_false)
#define _bfd_nolink_section_already_linked \
- ((void (*) (bfd *, struct bfd_section *)) bfd_void)
+ ((void (*) (bfd *, struct bfd_section *, struct bfd_link_info *)) bfd_void)
/* Routines to use for BFD_JUMP_TABLE_DYNAMIC for targets which do not
have dynamic symbols or relocs. Use BFD_JUMP_TABLE_DYNAMIC
@@ -526,7 +530,7 @@ extern bfd_boolean _bfd_generic_link_split_section
(bfd *, struct bfd_section *);
extern void _bfd_generic_section_already_linked
- (bfd *, struct bfd_section *);
+ (bfd *, struct bfd_section *, struct bfd_link_info *);
/* Generic reloc_link_order processing routine. */
extern bfd_boolean _bfd_generic_reloc_link_order
@@ -549,6 +553,10 @@ extern bfd_reloc_status_type _bfd_final_link_relocate
extern bfd_reloc_status_type _bfd_relocate_contents
(reloc_howto_type *, bfd *, bfd_vma, bfd_byte *);
+/* Clear a given location using a given howto. */
+extern void _bfd_clear_contents (reloc_howto_type *howto, bfd *input_bfd,
+ bfd_byte *location);
+
/* Link stabs in sections in the first pass. */
extern bfd_boolean _bfd_link_section_stabs
@@ -899,6 +907,20 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_SPARC_TLS_DTPOFF64",
"BFD_RELOC_SPARC_TLS_TPOFF32",
"BFD_RELOC_SPARC_TLS_TPOFF64",
+ "BFD_RELOC_SPU_IMM7",
+ "BFD_RELOC_SPU_IMM8",
+ "BFD_RELOC_SPU_IMM10",
+ "BFD_RELOC_SPU_IMM10W",
+ "BFD_RELOC_SPU_IMM16",
+ "BFD_RELOC_SPU_IMM16W",
+ "BFD_RELOC_SPU_IMM18",
+ "BFD_RELOC_SPU_PCREL9a",
+ "BFD_RELOC_SPU_PCREL9b",
+ "BFD_RELOC_SPU_PCREL16",
+ "BFD_RELOC_SPU_LO16",
+ "BFD_RELOC_SPU_HI16",
+ "BFD_RELOC_SPU_PPU32",
+ "BFD_RELOC_SPU_PPU64",
"BFD_RELOC_ALPHA_GPDISP_HI16",
"BFD_RELOC_ALPHA_GPDISP_LO16",
"BFD_RELOC_ALPHA_GPDISP",
@@ -1206,6 +1228,14 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_ARM_SBREL32",
"BFD_RELOC_ARM_TARGET2",
"BFD_RELOC_ARM_PREL31",
+ "BFD_RELOC_ARM_MOVW",
+ "BFD_RELOC_ARM_MOVT",
+ "BFD_RELOC_ARM_MOVW_PCREL",
+ "BFD_RELOC_ARM_MOVT_PCREL",
+ "BFD_RELOC_ARM_THUMB_MOVW",
+ "BFD_RELOC_ARM_THUMB_MOVT",
+ "BFD_RELOC_ARM_THUMB_MOVW_PCREL",
+ "BFD_RELOC_ARM_THUMB_MOVT_PCREL",
"BFD_RELOC_ARM_JUMP_SLOT",
"BFD_RELOC_ARM_GLOB_DAT",
"BFD_RELOC_ARM_GOT32",
@@ -1221,9 +1251,38 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_ARM_TLS_TPOFF32",
"BFD_RELOC_ARM_TLS_IE32",
"BFD_RELOC_ARM_TLS_LE32",
+ "BFD_RELOC_ARM_ALU_PC_G0_NC",
+ "BFD_RELOC_ARM_ALU_PC_G0",
+ "BFD_RELOC_ARM_ALU_PC_G1_NC",
+ "BFD_RELOC_ARM_ALU_PC_G1",
+ "BFD_RELOC_ARM_ALU_PC_G2",
+ "BFD_RELOC_ARM_LDR_PC_G0",
+ "BFD_RELOC_ARM_LDR_PC_G1",
+ "BFD_RELOC_ARM_LDR_PC_G2",
+ "BFD_RELOC_ARM_LDRS_PC_G0",
+ "BFD_RELOC_ARM_LDRS_PC_G1",
+ "BFD_RELOC_ARM_LDRS_PC_G2",
+ "BFD_RELOC_ARM_LDC_PC_G0",
+ "BFD_RELOC_ARM_LDC_PC_G1",
+ "BFD_RELOC_ARM_LDC_PC_G2",
+ "BFD_RELOC_ARM_ALU_SB_G0_NC",
+ "BFD_RELOC_ARM_ALU_SB_G0",
+ "BFD_RELOC_ARM_ALU_SB_G1_NC",
+ "BFD_RELOC_ARM_ALU_SB_G1",
+ "BFD_RELOC_ARM_ALU_SB_G2",
+ "BFD_RELOC_ARM_LDR_SB_G0",
+ "BFD_RELOC_ARM_LDR_SB_G1",
+ "BFD_RELOC_ARM_LDR_SB_G2",
+ "BFD_RELOC_ARM_LDRS_SB_G0",
+ "BFD_RELOC_ARM_LDRS_SB_G1",
+ "BFD_RELOC_ARM_LDRS_SB_G2",
+ "BFD_RELOC_ARM_LDC_SB_G0",
+ "BFD_RELOC_ARM_LDC_SB_G1",
+ "BFD_RELOC_ARM_LDC_SB_G2",
"BFD_RELOC_ARM_IMMEDIATE",
"BFD_RELOC_ARM_ADRL_IMMEDIATE",
"BFD_RELOC_ARM_T32_IMMEDIATE",
+ "BFD_RELOC_ARM_T32_ADD_IMM",
"BFD_RELOC_ARM_T32_IMM12",
"BFD_RELOC_ARM_T32_ADD_PC12",
"BFD_RELOC_ARM_SHIFT_IMM",
@@ -1473,6 +1532,27 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_MCORE_PCREL_32",
"BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2",
"BFD_RELOC_MCORE_RVA",
+ "BFD_RELOC_MEP_8",
+ "BFD_RELOC_MEP_16",
+ "BFD_RELOC_MEP_32",
+ "BFD_RELOC_MEP_PCREL8A2",
+ "BFD_RELOC_MEP_PCREL12A2",
+ "BFD_RELOC_MEP_PCREL17A2",
+ "BFD_RELOC_MEP_PCREL24A2",
+ "BFD_RELOC_MEP_PCABS24A2",
+ "BFD_RELOC_MEP_LOW16",
+ "BFD_RELOC_MEP_HI16U",
+ "BFD_RELOC_MEP_HI16S",
+ "BFD_RELOC_MEP_GPREL",
+ "BFD_RELOC_MEP_TPREL",
+ "BFD_RELOC_MEP_TPREL7",
+ "BFD_RELOC_MEP_TPREL7A2",
+ "BFD_RELOC_MEP_TPREL7A4",
+ "BFD_RELOC_MEP_UIMM24",
+ "BFD_RELOC_MEP_ADDR24A4",
+ "BFD_RELOC_MEP_GNU_VTINHERIT",
+ "BFD_RELOC_MEP_GNU_VTENTRY",
+
"BFD_RELOC_MMIX_GETA",
"BFD_RELOC_MMIX_GETA_1",
"BFD_RELOC_MMIX_GETA_2",
@@ -1509,7 +1589,9 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_AVR_HH8_LDI_NEG",
"BFD_RELOC_AVR_MS8_LDI_NEG",
"BFD_RELOC_AVR_LO8_LDI_PM",
+ "BFD_RELOC_AVR_LO8_LDI_GS",
"BFD_RELOC_AVR_HI8_LDI_PM",
+ "BFD_RELOC_AVR_HI8_LDI_GS",
"BFD_RELOC_AVR_HH8_LDI_PM",
"BFD_RELOC_AVR_LO8_LDI_PM_NEG",
"BFD_RELOC_AVR_HI8_LDI_PM_NEG",
@@ -1568,6 +1650,17 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_390_GOT20",
"BFD_RELOC_390_GOTPLT20",
"BFD_RELOC_390_TLS_GOTIE20",
+ "BFD_RELOC_SCORE_DUMMY1",
+ "BFD_RELOC_SCORE_GPREL15",
+ "BFD_RELOC_SCORE_DUMMY2",
+ "BFD_RELOC_SCORE_JMP",
+ "BFD_RELOC_SCORE_BRANCH",
+ "BFD_RELOC_SCORE16_JMP",
+ "BFD_RELOC_SCORE16_BRANCH",
+ "BFD_RELOC_SCORE_GOT15",
+ "BFD_RELOC_SCORE_GOT_LO16",
+ "BFD_RELOC_SCORE_CALL15",
+ "BFD_RELOC_SCORE_DUMMY_HI16",
"BFD_RELOC_IP2K_FR9",
"BFD_RELOC_IP2K_BANK",
"BFD_RELOC_IP2K_ADDR16CJP",
@@ -1712,6 +1805,33 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_16C_IMM24_C",
"BFD_RELOC_16C_IMM32",
"BFD_RELOC_16C_IMM32_C",
+ "BFD_RELOC_CR16_NUM8",
+ "BFD_RELOC_CR16_NUM16",
+ "BFD_RELOC_CR16_NUM32",
+ "BFD_RELOC_CR16_NUM32a",
+ "BFD_RELOC_CR16_REGREL0",
+ "BFD_RELOC_CR16_REGREL4",
+ "BFD_RELOC_CR16_REGREL4a",
+ "BFD_RELOC_CR16_REGREL14",
+ "BFD_RELOC_CR16_REGREL14a",
+ "BFD_RELOC_CR16_REGREL16",
+ "BFD_RELOC_CR16_REGREL20",
+ "BFD_RELOC_CR16_REGREL20a",
+ "BFD_RELOC_CR16_ABS20",
+ "BFD_RELOC_CR16_ABS24",
+ "BFD_RELOC_CR16_IMM4",
+ "BFD_RELOC_CR16_IMM8",
+ "BFD_RELOC_CR16_IMM16",
+ "BFD_RELOC_CR16_IMM20",
+ "BFD_RELOC_CR16_IMM24",
+ "BFD_RELOC_CR16_IMM32",
+ "BFD_RELOC_CR16_IMM32a",
+ "BFD_RELOC_CR16_DISP4",
+ "BFD_RELOC_CR16_DISP8",
+ "BFD_RELOC_CR16_DISP16",
+ "BFD_RELOC_CR16_DISP20",
+ "BFD_RELOC_CR16_DISP24",
+ "BFD_RELOC_CR16_DISP24a",
"BFD_RELOC_CRX_REL4",
"BFD_RELOC_CRX_REL8",
"BFD_RELOC_CRX_REL8_CMP",
@@ -1796,6 +1916,8 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_XSTORMY16_12",
"BFD_RELOC_XSTORMY16_24",
"BFD_RELOC_XSTORMY16_FPTR16",
+ "BFD_RELOC_RELC",
+
"BFD_RELOC_XC16X_PAG",
"BFD_RELOC_XC16X_POF",
"BFD_RELOC_XC16X_SEG",
diff --git a/bfd/libcoff-in.h b/bfd/libcoff-in.h
index f2bc264b3b9f..fdb1a59b8141 100644
--- a/bfd/libcoff-in.h
+++ b/bfd/libcoff-in.h
@@ -348,7 +348,7 @@ extern bfd_boolean coff_find_nearest_line
extern bfd_boolean coff_find_inliner_info
(bfd *, const char **, const char **, unsigned int *);
extern int coff_sizeof_headers
- (bfd *, bfd_boolean);
+ (bfd *, struct bfd_link_info *);
extern bfd_boolean bfd_coff_reloc16_relax_section
(bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents
diff --git a/bfd/libcoff.h b/bfd/libcoff.h
index f756f30b1bf6..e26fce06415e 100644
--- a/bfd/libcoff.h
+++ b/bfd/libcoff.h
@@ -352,7 +352,7 @@ extern bfd_boolean coff_find_nearest_line
extern bfd_boolean coff_find_inliner_info
(bfd *, const char **, const char **, unsigned int *);
extern int coff_sizeof_headers
- (bfd *, bfd_boolean);
+ (bfd *, struct bfd_link_info *);
extern bfd_boolean bfd_coff_reloc16_relax_section
(bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents
diff --git a/bfd/libecoff.h b/bfd/libecoff.h
index 8c5e218ee58d..165e75585a30 100644
--- a/bfd/libecoff.h
+++ b/bfd/libecoff.h
@@ -1,6 +1,6 @@
/* BFD ECOFF object file private structure.
Copyright 1993, 1994, 1995, 1996, 1999, 2001, 2002, 2003, 2004,
- 2005 Free Software Foundation, Inc.
+ 2005, 2006 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -301,7 +301,7 @@ extern bfd_boolean _bfd_ecoff_set_arch_mach
extern bfd_boolean _bfd_ecoff_set_section_contents
(bfd *, asection *, const void * location, file_ptr, bfd_size_type);
-extern int _bfd_ecoff_sizeof_headers (bfd *, bfd_boolean);
+extern int _bfd_ecoff_sizeof_headers (bfd *, struct bfd_link_info *);
/* ecoff_bfd_get_relocated_section_contents defined by backend. */
/* ecoff_bfd_relax_section defined by backend. */
extern struct bfd_link_hash_table *_bfd_ecoff_bfd_link_hash_table_create
diff --git a/bfd/libpei.h b/bfd/libpei.h
index f0f6580fe4ba..0e08e039bc04 100644
--- a/bfd/libpei.h
+++ b/bfd/libpei.h
@@ -1,5 +1,5 @@
/* Support for the generic parts of PE/PEI; common header information.
- Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
+ Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006
Free Software Foundation, Inc.
Written by Cygnus Solutions.
@@ -204,7 +204,38 @@
#define PUT_SCNHDR_LNNOPTR H_PUT_32
#endif
-#ifdef COFF_WITH_pep
+#ifdef COFF_WITH_pex64
+
+#define GET_OPTHDR_IMAGE_BASE H_GET_64
+#define PUT_OPTHDR_IMAGE_BASE H_PUT_64
+#define GET_OPTHDR_SIZE_OF_STACK_RESERVE H_GET_64
+#define PUT_OPTHDR_SIZE_OF_STACK_RESERVE H_PUT_64
+#define GET_OPTHDR_SIZE_OF_STACK_COMMIT H_GET_64
+#define PUT_OPTHDR_SIZE_OF_STACK_COMMIT H_PUT_64
+#define GET_OPTHDR_SIZE_OF_HEAP_RESERVE H_GET_64
+#define PUT_OPTHDR_SIZE_OF_HEAP_RESERVE H_PUT_64
+#define GET_OPTHDR_SIZE_OF_HEAP_COMMIT H_GET_64
+#define PUT_OPTHDR_SIZE_OF_HEAP_COMMIT H_PUT_64
+#define GET_PDATA_ENTRY bfd_get_32
+
+#define _bfd_XX_bfd_copy_private_bfd_data_common _bfd_pex64_bfd_copy_private_bfd_data_common
+#define _bfd_XX_bfd_copy_private_section_data _bfd_pex64_bfd_copy_private_section_data
+#define _bfd_XX_get_symbol_info _bfd_pex64_get_symbol_info
+#define _bfd_XX_only_swap_filehdr_out _bfd_pex64_only_swap_filehdr_out
+#define _bfd_XX_print_private_bfd_data_common _bfd_pex64_print_private_bfd_data_common
+#define _bfd_XXi_final_link_postscript _bfd_pex64i_final_link_postscript
+#define _bfd_XXi_only_swap_filehdr_out _bfd_pex64i_only_swap_filehdr_out
+#define _bfd_XXi_swap_aouthdr_in _bfd_pex64i_swap_aouthdr_in
+#define _bfd_XXi_swap_aouthdr_out _bfd_pex64i_swap_aouthdr_out
+#define _bfd_XXi_swap_aux_in _bfd_pex64i_swap_aux_in
+#define _bfd_XXi_swap_aux_out _bfd_pex64i_swap_aux_out
+#define _bfd_XXi_swap_lineno_in _bfd_pex64i_swap_lineno_in
+#define _bfd_XXi_swap_lineno_out _bfd_pex64i_swap_lineno_out
+#define _bfd_XXi_swap_scnhdr_out _bfd_pex64i_swap_scnhdr_out
+#define _bfd_XXi_swap_sym_in _bfd_pex64i_swap_sym_in
+#define _bfd_XXi_swap_sym_out _bfd_pex64i_swap_sym_out
+
+#elif defined COFF_WITH_pep
#define GET_OPTHDR_IMAGE_BASE H_GET_64
#define PUT_OPTHDR_IMAGE_BASE H_PUT_64
@@ -224,7 +255,6 @@
#define _bfd_XX_only_swap_filehdr_out _bfd_pep_only_swap_filehdr_out
#define _bfd_XX_print_private_bfd_data_common _bfd_pep_print_private_bfd_data_common
#define _bfd_XXi_final_link_postscript _bfd_pepi_final_link_postscript
-#define _bfd_XXi_final_link_postscript _bfd_pepi_final_link_postscript
#define _bfd_XXi_only_swap_filehdr_out _bfd_pepi_only_swap_filehdr_out
#define _bfd_XXi_swap_aouthdr_in _bfd_pepi_swap_aouthdr_in
#define _bfd_XXi_swap_aouthdr_out _bfd_pepi_swap_aouthdr_out
@@ -256,7 +286,6 @@
#define _bfd_XX_only_swap_filehdr_out _bfd_pe_only_swap_filehdr_out
#define _bfd_XX_print_private_bfd_data_common _bfd_pe_print_private_bfd_data_common
#define _bfd_XXi_final_link_postscript _bfd_pei_final_link_postscript
-#define _bfd_XXi_final_link_postscript _bfd_pei_final_link_postscript
#define _bfd_XXi_only_swap_filehdr_out _bfd_pei_only_swap_filehdr_out
#define _bfd_XXi_swap_aouthdr_in _bfd_pei_swap_aouthdr_in
#define _bfd_XXi_swap_aouthdr_out _bfd_pei_swap_aouthdr_out
@@ -270,10 +299,27 @@
#endif /* !COFF_WITH_pep */
-/* Macro: Returns true if the bfd is a PE executable as opposed to a PE object file. */
-#define bfd_pe_executable_p(abfd) \
- (strncmp ((abfd)->xvec->name, "pei-", 4) == 0 \
- || strncmp ((abfd)->xvec->name, "efi-app-", 8) == 0)
+/* Returns true if the target is a PE executable target. */
+#define bfd_target_pei_p(xvec) \
+ (CONST_STRNEQ ((xvec)->name, "pei-"))
+
+/* Return the arch string of a PE executable target. */
+#define bfd_target_pei_arch(xvec) \
+ ((xvec)->name + sizeof ("pei-") - 1)
+
+/* Returns true if the target is an EFI target. */
+#define bfd_target_efi_p(xvec) \
+ (CONST_STRNEQ ((xvec)->name, "efi-app-"))
+
+/* Return the arch string of an EFI target. */
+#define bfd_target_efi_arch(xvec) \
+ ((xvec)->name + sizeof ("efi-app-") - 1)
+
+/* Macro: Returns true if the bfd is a PE executable as opposed to a
+ PE object file. */
+#define bfd_pe_executable_p(abfd) \
+ (bfd_target_pei_p ((abfd)->xvec) \
+ || bfd_target_efi_p ((abfd)->xvec))
/* These functions are architecture dependent, and are in peicode.h:
coff_swap_reloc_in
diff --git a/bfd/linker.c b/bfd/linker.c
index 14eeae4df0c8..497b5c235565 100644
--- a/bfd/linker.c
+++ b/bfd/linker.c
@@ -1,6 +1,7 @@
/* linker.c -- BFD linker routines
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "genlink.h"
@@ -562,11 +563,11 @@ bfd_wrapped_link_hash_lookup (bfd *abfd,
#undef WRAP
-#undef REAL
+#undef REAL
#define REAL "__real_"
if (*l == '_'
- && strncmp (l, REAL, sizeof REAL - 1) == 0
+ && CONST_STRNEQ (l, REAL)
&& bfd_hash_lookup (info->wrap_hash, l + sizeof REAL - 1,
FALSE, FALSE) != NULL)
{
@@ -1659,8 +1660,7 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info,
s = name + 1;
while (*s == '_')
++s;
- if (s[0] == 'G'
- && strncmp (s, CONS_PREFIX, CONS_PREFIX_LEN - 1) == 0)
+ if (s[0] == 'G' && CONST_STRNEQ (s, CONS_PREFIX))
{
char c;
@@ -2877,14 +2877,15 @@ FUNCTION
bfd_section_already_linked
SYNOPSIS
- void bfd_section_already_linked (bfd *abfd, asection *sec);
+ void bfd_section_already_linked (bfd *abfd, asection *sec,
+ struct bfd_link_info *info);
DESCRIPTION
Check if @var{sec} has been already linked during a reloceatable
or final link.
-.#define bfd_section_already_linked(abfd, sec) \
-. BFD_SEND (abfd, _section_already_linked, (abfd, sec))
+.#define bfd_section_already_linked(abfd, sec, info) \
+. BFD_SEND (abfd, _section_already_linked, (abfd, sec, info))
.
*/
@@ -2970,7 +2971,8 @@ bfd_section_already_linked_table_free (void)
/* This is used on non-ELF inputs. */
void
-_bfd_generic_section_already_linked (bfd *abfd, asection *sec)
+_bfd_generic_section_already_linked (bfd *abfd, asection *sec,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
flagword flags;
const char *name;
@@ -3074,7 +3076,7 @@ _bfd_generic_section_already_linked (bfd *abfd, asection *sec)
bfd_section_already_linked_table_insert (already_linked_list, sec);
}
-/* Convert symbols in excluded output sections to absolute. */
+/* Convert symbols in excluded output sections to use a kept section. */
static bfd_boolean
fix_syms (struct bfd_link_hash_entry *h, void *data)
@@ -3093,8 +3095,64 @@ fix_syms (struct bfd_link_hash_entry *h, void *data)
&& (s->output_section->flags & SEC_EXCLUDE) != 0
&& bfd_section_removed_from_list (obfd, s->output_section))
{
+ asection *op, *op1;
+
h->u.def.value += s->output_offset + s->output_section->vma;
- h->u.def.section = bfd_abs_section_ptr;
+
+ /* Find preceding kept section. */
+ for (op1 = s->output_section->prev; op1 != NULL; op1 = op1->prev)
+ if ((op1->flags & SEC_EXCLUDE) == 0
+ && !bfd_section_removed_from_list (obfd, op1))
+ break;
+
+ /* Find following kept section. Start at prev->next because
+ other sections may have been added after S was removed. */
+ if (s->output_section->prev != NULL)
+ op = s->output_section->prev->next;
+ else
+ op = s->output_section->owner->sections;
+ for (; op != NULL; op = op->next)
+ if ((op->flags & SEC_EXCLUDE) == 0
+ && !bfd_section_removed_from_list (obfd, op))
+ break;
+
+ /* Choose better of two sections, based on flags. The idea
+ is to choose a section that will be in the same segment
+ as S would have been if it was kept. */
+ if (op1 == NULL)
+ {
+ if (op == NULL)
+ op = bfd_abs_section_ptr;
+ }
+ else if (op == NULL)
+ op = op1;
+ else if (((op1->flags ^ op->flags)
+ & (SEC_ALLOC | SEC_THREAD_LOCAL)) != 0)
+ {
+ if (((op->flags ^ s->flags)
+ & (SEC_ALLOC | SEC_THREAD_LOCAL)) != 0)
+ op = op1;
+ }
+ else if (((op1->flags ^ op->flags) & SEC_READONLY) != 0)
+ {
+ if (((op->flags ^ s->flags) & SEC_READONLY) != 0)
+ op = op1;
+ }
+ else if (((op1->flags ^ op->flags) & SEC_CODE) != 0)
+ {
+ if (((op->flags ^ s->flags) & SEC_CODE) != 0)
+ op = op1;
+ }
+ else
+ {
+ /* Flags we care about are the same. Prefer the following
+ section if that will result in a positive valued sym. */
+ if (h->u.def.value < op->vma)
+ op = op1;
+ }
+
+ h->u.def.value -= op->vma;
+ h->u.def.section = op;
}
}
diff --git a/bfd/lynx-core.c b/bfd/lynx-core.c
index ef243fbef195..55f0a0c9804b 100644
--- a/bfd/lynx-core.c
+++ b/bfd/lynx-core.c
@@ -1,5 +1,5 @@
/* BFD back end for Lynx core files
- Copyright 1993, 1994, 1995, 2001, 2002, 2004
+ Copyright 1993, 1994, 1995, 2001, 2002, 2004, 2006, 2007
Free Software Foundation, Inc.
Written by Stu Grossman of Cygnus Support.
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#ifdef LYNX_CORE
@@ -73,11 +73,10 @@ make_bfd_asection (abfd, name, flags, size, vma, filepos)
strcpy (newname, name);
- asect = bfd_make_section (abfd, newname);
+ asect = bfd_make_section_with_flags (abfd, newname, flags);
if (!asect)
return NULL;
- asect->flags = flags;
asect->size = size;
asect->vma = vma;
asect->filepos = filepos;
diff --git a/bfd/m68klinux.c b/bfd/m68klinux.c
index 2c12a7c776e7..316947717607 100644
--- a/bfd/m68klinux.c
+++ b/bfd/m68klinux.c
@@ -1,6 +1,6 @@
/* BFD back-end for linux flavored m68k a.out binaries.
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
- 2003, 2004, 2006 Free Software Foundation, Inc.
+ 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -26,8 +26,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define MACHTYPE_OK(mtype) ((mtype) == M_68020 || (mtype) == M_UNKNOWN)
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "aout/aout64.h"
#include "aout/stab_gnu.h"
@@ -94,8 +94,7 @@ m68klinux_write_object_contents (abfd)
#define GOT_REF_PREFIX "__GOT_"
#endif
-#define IS_GOT_SYM(name) \
- (strncmp (name, GOT_REF_PREFIX, sizeof GOT_REF_PREFIX - 1) == 0)
+#define IS_GOT_SYM(name) (CONST_STRNEQ (name, GOT_REF_PREFIX))
/* See if a symbol name is a reference to the procedure linkage table. */
@@ -103,8 +102,7 @@ m68klinux_write_object_contents (abfd)
#define PLT_REF_PREFIX "__PLT_"
#endif
-#define IS_PLT_SYM(name) \
- (strncmp (name, PLT_REF_PREFIX, sizeof PLT_REF_PREFIX - 1) == 0)
+#define IS_PLT_SYM(name) (CONST_STRNEQ (name, PLT_REF_PREFIX))
/* This string is used to generate specialized error messages. */
@@ -316,9 +314,8 @@ linux_link_create_dynamic_sections (abfd, info)
/* We choose to use the name ".linux-dynamic" for the fixup table.
Why not? */
- s = bfd_make_section (abfd, ".linux-dynamic");
+ s = bfd_make_section_with_flags (abfd, ".linux-dynamic", flags);
if (s == NULL
- || ! bfd_set_section_flags (abfd, s, flags)
|| ! bfd_set_section_alignment (abfd, s, 2))
return FALSE;
s->size = 0;
@@ -446,8 +443,7 @@ linux_tally_symbols (h, data)
h = (struct linux_link_hash_entry *) h->root.root.u.i.link;
if (h->root.root.type == bfd_link_hash_undefined
- && strncmp (h->root.root.root.string, NEEDS_SHRLIB,
- sizeof NEEDS_SHRLIB - 1) == 0)
+ && CONST_STRNEQ (h->root.root.root.string, NEEDS_SHRLIB))
{
const char *name;
char *p;
diff --git a/bfd/m88kmach3.c b/bfd/m88kmach3.c
index ec2ae75554c3..a94425c7fd1f 100644
--- a/bfd/m88kmach3.c
+++ b/bfd/m88kmach3.c
@@ -1,5 +1,5 @@
/* BFD back-end for Motorola m88k a.out (Mach 3) binaries.
- Copyright 1990, 1991, 1993, 1994, 1995, 2001, 2003
+ Copyright 1990, 1991, 1993, 1994, 1995, 2001, 2003, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -26,8 +26,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define N_TXTSIZE(x) ((x).a_text)
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libaout.h"
diff --git a/bfd/mach-o-target.c b/bfd/mach-o-target.c
index 103142a08dd9..76bed2e002d2 100644
--- a/bfd/mach-o-target.c
+++ b/bfd/mach-o-target.c
@@ -1,5 +1,5 @@
/* Mach-O support for BFD.
- Copyright 1999, 2000, 2001, 2002
+ Copyright 1999, 2000, 2001, 2002, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -105,7 +105,7 @@ const bfd_target TARGET_NAME =
BFD_JUMP_TABLE_CORE (bfd_mach_o),
BFD_JUMP_TABLE_ARCHIVE (bfd_mach_o),
BFD_JUMP_TABLE_SYMBOLS (bfd_mach_o),
- BFD_JUMP_TABLE_RELOCS (bfd_mach_o),
+ BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
BFD_JUMP_TABLE_WRITE (bfd_mach_o),
BFD_JUMP_TABLE_LINK (bfd_mach_o),
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
diff --git a/bfd/mach-o.c b/bfd/mach-o.c
index 03a714495bb3..d4abbeccd2d0 100644
--- a/bfd/mach-o.c
+++ b/bfd/mach-o.c
@@ -1,5 +1,5 @@
/* Mach-O support for BFD.
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,9 +18,9 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+#include "sysdep.h"
#include "mach-o.h"
#include "bfd.h"
-#include "sysdep.h"
#include "libbfd.h"
#include "libiberty.h"
#include <ctype.h>
@@ -52,9 +52,6 @@
#define bfd_mach_o_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define bfd_mach_o_read_minisymbols _bfd_generic_read_minisymbols
#define bfd_mach_o_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
-#define bfd_mach_o_get_reloc_upper_bound _bfd_norelocs_get_reloc_upper_bound
-#define bfd_mach_o_canonicalize_reloc _bfd_norelocs_canonicalize_reloc
-#define bfd_mach_o_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
#define bfd_mach_o_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents
#define bfd_mach_o_bfd_relax_section bfd_generic_relax_section
#define bfd_mach_o_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
@@ -568,7 +565,7 @@ bfd_mach_o_write_contents (bfd *abfd)
static int
bfd_mach_o_sizeof_headers (bfd *a ATTRIBUTE_UNUSED,
- bfd_boolean b ATTRIBUTE_UNUSED)
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return 0;
}
@@ -634,6 +631,7 @@ bfd_mach_o_make_bfd_section (bfd *abfd, bfd_mach_o_section *section)
char *sname;
const char *prefix = "LC_SEGMENT";
unsigned int snamelen;
+ flagword flags;
snamelen = strlen (prefix) + 1
+ strlen (section->segname) + 1
@@ -644,7 +642,10 @@ bfd_mach_o_make_bfd_section (bfd *abfd, bfd_mach_o_section *section)
return NULL;
sprintf (sname, "%s.%s.%s", prefix, section->segname, section->sectname);
- bfdsec = bfd_make_section_anyway (abfd, sname);
+ flags = SEC_ALLOC;
+ if (!(section->flags & BFD_MACH_O_S_ZEROFILL))
+ flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC | SEC_CODE;
+ bfdsec = bfd_make_section_anyway_with_flags (abfd, sname, flags);
if (bfdsec == NULL)
return NULL;
@@ -654,11 +655,6 @@ bfd_mach_o_make_bfd_section (bfd *abfd, bfd_mach_o_section *section)
bfdsec->filepos = section->offset;
bfdsec->alignment_power = section->align;
- if (section->flags & BFD_MACH_O_S_ZEROFILL)
- bfdsec->flags = SEC_ALLOC;
- else
- bfdsec->flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC | SEC_CODE;
-
return bfdsec;
}
@@ -966,7 +962,7 @@ bfd_mach_o_scan_read_dylinker (bfd *abfd,
return -1;
strcpy (sname, prefix);
- bfdsec = bfd_make_section_anyway (abfd, sname);
+ bfdsec = bfd_make_section_anyway_with_flags (abfd, sname, SEC_HAS_CONTENTS);
if (bfdsec == NULL)
return -1;
@@ -975,7 +971,6 @@ bfd_mach_o_scan_read_dylinker (bfd *abfd,
bfdsec->size = command->len - 8;
bfdsec->filepos = command->offset + 8;
bfdsec->alignment_power = 0;
- bfdsec->flags = SEC_HAS_CONTENTS;
cmd->section = bfdsec;
@@ -1022,7 +1017,7 @@ bfd_mach_o_scan_read_dylib (bfd *abfd, bfd_mach_o_load_command *command)
return -1;
strcpy (sname, prefix);
- bfdsec = bfd_make_section_anyway (abfd, sname);
+ bfdsec = bfd_make_section_anyway_with_flags (abfd, sname, SEC_HAS_CONTENTS);
if (bfdsec == NULL)
return -1;
@@ -1031,7 +1026,6 @@ bfd_mach_o_scan_read_dylib (bfd *abfd, bfd_mach_o_load_command *command)
bfdsec->size = command->len - 8;
bfdsec->filepos = command->offset + 8;
bfdsec->alignment_power = 0;
- bfdsec->flags = SEC_HAS_CONTENTS;
cmd->section = bfdsec;
@@ -1142,14 +1136,13 @@ bfd_mach_o_scan_read_thread (bfd *abfd, bfd_mach_o_load_command *command)
j++;
}
- bfdsec = bfd_make_section (abfd, sname);
+ bfdsec = bfd_make_section_with_flags (abfd, sname, SEC_HAS_CONTENTS);
bfdsec->vma = 0;
bfdsec->lma = 0;
bfdsec->size = cmd->flavours[i].size;
bfdsec->filepos = cmd->flavours[i].offset;
bfdsec->alignment_power = 0x0;
- bfdsec->flags = SEC_HAS_CONTENTS;
cmd->section = bfdsec;
}
@@ -1218,7 +1211,7 @@ bfd_mach_o_scan_read_symtab (bfd *abfd, bfd_mach_o_load_command *command)
return -1;
strcpy (sname, prefix);
- bfdsec = bfd_make_section_anyway (abfd, sname);
+ bfdsec = bfd_make_section_anyway_with_flags (abfd, sname, SEC_HAS_CONTENTS);
if (bfdsec == NULL)
return -1;
@@ -1227,7 +1220,6 @@ bfd_mach_o_scan_read_symtab (bfd *abfd, bfd_mach_o_load_command *command)
bfdsec->size = seg->nsyms * 12;
bfdsec->filepos = seg->symoff;
bfdsec->alignment_power = 0;
- bfdsec->flags = SEC_HAS_CONTENTS;
seg->stabs_segment = bfdsec;
@@ -1237,7 +1229,7 @@ bfd_mach_o_scan_read_symtab (bfd *abfd, bfd_mach_o_load_command *command)
return -1;
strcpy (sname, prefix);
- bfdsec = bfd_make_section_anyway (abfd, sname);
+ bfdsec = bfd_make_section_anyway_with_flags (abfd, sname, SEC_HAS_CONTENTS);
if (bfdsec == NULL)
return -1;
@@ -1246,7 +1238,6 @@ bfd_mach_o_scan_read_symtab (bfd *abfd, bfd_mach_o_load_command *command)
bfdsec->size = seg->strsize;
bfdsec->filepos = seg->stroff;
bfdsec->alignment_power = 0;
- bfdsec->flags = SEC_HAS_CONTENTS;
seg->stabstr_segment = bfdsec;
@@ -1263,6 +1254,7 @@ bfd_mach_o_scan_read_segment (bfd *abfd, bfd_mach_o_load_command *command)
char *sname;
const char *prefix = "LC_SEGMENT";
unsigned int snamelen;
+ flagword flags;
BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT);
@@ -1286,7 +1278,8 @@ bfd_mach_o_scan_read_segment (bfd *abfd, bfd_mach_o_load_command *command)
return -1;
sprintf (sname, "%s.%s", prefix, seg->segname);
- bfdsec = bfd_make_section_anyway (abfd, sname);
+ flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC | SEC_CODE;
+ bfdsec = bfd_make_section_anyway_with_flags (abfd, sname, flags);
if (bfdsec == NULL)
return -1;
@@ -1295,7 +1288,6 @@ bfd_mach_o_scan_read_segment (bfd *abfd, bfd_mach_o_load_command *command)
bfdsec->size = seg->filesize;
bfdsec->filepos = seg->fileoff;
bfdsec->alignment_power = 0x0;
- bfdsec->flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC | SEC_CODE;
seg->segment = bfdsec;
diff --git a/bfd/mep-relocs.pl b/bfd/mep-relocs.pl
new file mode 100755
index 000000000000..d227b8252c0c
--- /dev/null
+++ b/bfd/mep-relocs.pl
@@ -0,0 +1,274 @@
+#!/usr/bin/perl
+# -*- perl -*-
+#
+# Toshiba MeP Media Engine Relocation Generator
+# Copyright (C) 2001, 2007 Free Software Foundation, Inc.
+# This file is part of BFD.
+# Originally written by DJ Delorie <dj@redhat.com>
+#
+# 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. */
+
+
+# Usage: Run this anywhere inside your source tree. It will read
+# include/elf/mep.h and scan the comments therein. It will renumber
+# the relocs to be sequential (this is needed so that bfd/elf32-mep.h
+# works) if needed. It will then update the reloc list in bfd/reloc.c
+# and the howto, mapping, and apply routines in bfd/elf32-mep.c. You
+# can then regenerate bfd-in2.h and check everything in.
+
+# FIXME: After the relocation list is finalized, change this to
+# *verify* the reloc list, rather than resequence it.
+
+while (! -f "include/elf/mep.h" && ! -f "bfd/reloc.c") {
+ chdir "..";
+ $pwd = `pwd`;
+ if ($pwd !~ m@/.*/@) {
+ print STDERR "Cannot find include/elf/mep.h or bfd/reloc.h\n";
+ exit 1;
+ }
+}
+$pwd = `pwd`;
+print "srctop is $pwd";
+
+printf "Reading include/elf/mep.h ...\n";
+open(MEPH, "include/elf/mep.h");
+open(MEPHO, "> include/elf/mep.h.new") || die("mep.h.new create: $!");
+$val = 0;
+while (<MEPH>) {
+ if (($pre,$rel,$rest) = /(.*RELOC_NUMBER \()([^,]+), *\d+(.*)/) {
+ $rest =~ s/[\r\n]+$//;
+ print (MEPHO "$pre$rel, $val$rest\n") || die("mep.h.new write: $!");
+ $val ++;
+ $rel =~ s/R_MEP_//;
+ push(@relocs, $rel);
+
+ $rest =~ s@.*/\* @@;
+ ($pattern, $sign, $attrs) = $rest =~ m@(.*) ([US]) (.*)\*/@;
+ $pattern =~ s/ //g;
+ push(@pattern, $pattern);
+ push(@sign, $sign);
+ push(@attrs, $attrs);
+
+ printf "%4d $rel p=`$pattern' s=`$sign' a=`$attrs'\n", $#pattern;
+
+ } else {
+ print(MEPHO) || die("mep.h.new write: $!");
+ }
+}
+close(MEPH);
+close(MEPHO) || die("mep.h.new close: $!");
+
+&swapfile("include/elf/mep.h");
+
+redo_file ("bfd/reloc.c",
+ "",
+ "ENUMDOC\n Toshiba Media Processor Relocations.\n\nCOMMENT\n",
+ "ENUM\n BFD_RELOC_MEP_%s\n",
+ "");
+
+$autogen = " /* This section generated from bfd/mep-relocs.pl from include/elf/mep.h. */\n";
+
+redo_file ("bfd/elf32-mep.c",
+ "MEPRELOC:HOWTO",
+ $autogen,
+ "MEPRELOC:END",
+ "",
+ "&emit_howto();",
+ "MEPRELOC:MAP",
+ $autogen,
+ "MEPRELOC:END",
+ "",
+ " MAP(%s);\n",
+ "MEPRELOC:APPLY",
+ $autogen,
+ "MEPRELOC:END",
+ "",
+ "&emit_apply();",
+ );
+
+sub mask2shifts {
+ my ($mask) = @_;
+ my ($bits, $left, $right, $ci, $c, $cv);
+ $bits = 0;
+ $left = 0;
+ $right = 32;
+ for ($ci=0; $ci<length($mask); $ci++) {
+ $c = substr($mask, $ci, 1);
+ $left++;
+ next if $c eq '-';
+ $left = 0;
+ $cv = ord($c) - ord('0');
+ $cv -= ord('a') - ord('9') - 1 if $cv > 9;
+ $right = $cv unless $right < $cv;
+ $bits = $cv+1 unless $bits > $cv+1;
+ }
+ $mask =~ tr/-/1/c;
+ $mask =~ tr/-/0/;
+ ($rmask = $mask) =~ tr/01/10/;
+ $mask = unpack("H*", pack("B*", $mask));
+ $rmask = unpack("H*", pack("B*", $rmask));
+ return ($bits, $left, $right, $mask, $rmask);
+}
+
+sub emit_howto {
+ for ($i=2; $i<=$#relocs; $i++) {
+ $mask = $pattern[$i];
+
+ if (length($mask) == 8) { $bytesize = 0; }
+ elsif (length($mask) == 16) { $bytesize = 1; }
+ elsif (length($mask) == 32) { $bytesize = 2; }
+
+ ($bits, $left, $right, $mask) = mask2shifts ($mask);
+ $bits[$i] = $bits;
+ $pcrel = 0;
+ $pcrel = 1 if $attrs[$i] =~ /pc-rel/i;
+ $overflow = $sign[$i];
+ $overflow = 'N' if $attrs[$i] =~ /no-overflow/;
+
+ $c = "$relocs[$i],";
+ printf(NEW " MEPREL (R_MEP_%-10s%d,%3d,%2d,%2d,%2d,%2s, 0x%s),\n",
+ $c, $bytesize, $bits, $left, $right, $pcrel, $overflow, $mask);
+ }
+}
+
+sub emit_apply {
+ for ($i=2; $i<=$#relocs; $i++) {
+ $v = "u";
+ $v = "s" if $sign[$i] =~ /S/;
+ if (length($pattern[$i]) == 8) {
+ $e = ''; # no endian swap for bytes
+ } elsif ($pattern[$i] =~ /-/ || length($pattern[$i]) == 16) {
+ $e = '^e2'; # endian swap - 2byte words only
+ } else {
+ $e = '^e4' # endian swap for data
+ }
+ print NEW " case R_MEP_$relocs[$i]: /* $pattern[$i] */\n";
+ if ($attrs[$i] =~ /tp-rel/i) {
+ print NEW " $v -= mep_tpoff_base(rel->r_offset);\n";
+ }
+ if ($attrs[$i] =~ /gp-rel/i) {
+ print NEW " $v -= mep_sdaoff_base(rel->r_offset);\n";
+ }
+ if ($attrs[$i] !~ /no-overflow/ && $bits[$i] < 32) {
+ if ($v eq "u") {
+ $max = (1 << $bits[$i]) - 1;
+ print NEW " if (u > $max) r = bfd_reloc_overflow;\n";
+ } else {
+ $min = -(1 << ($bits[$i]-1));
+ $max = (1 << ($bits[$i]-1)) - 1;
+ print NEW " if ($min > s || s > $max) r = bfd_reloc_overflow;\n";
+ }
+ }
+ for ($b=0; $b<length($pattern[$i]); $b += 8) {
+ $mask = substr($pattern[$i], $b, 8);
+ ($bits, $left, $right, $mask, $rmask) = mask2shifts ($mask);
+ if ($left > $right) { $left -= $right; $right = 0; }
+ else { $right -= $left; $left = 0; }
+
+ if ($mask ne "00") {
+ $bb = $b / 8;
+ print NEW " byte[$bb$e] = ";
+ print NEW "(byte[$bb$e] & 0x$rmask) | " if $rmask ne "00";
+ if ($left) {
+ print NEW "(($v << $left) & 0x$mask)";
+ } elsif ($right) {
+ print NEW "(($v >> $right) & 0x$mask)";
+ } else {
+ print NEW "($v & 0x$mask)";
+ }
+ print NEW ";\n";
+ }
+ }
+ print NEW " break;\n";
+ }
+}
+
+
+#-----------------------------------------------------------------------------
+
+sub redo_file {
+ my ($file, @control) = @_;
+ open(OLD, $file);
+ open(NEW, "> $file.new") || die("$file.new create: $!");
+
+ print "Scanning file $file ...\n";
+
+ while (1) {
+ $start = shift @control;
+ $prefix = shift @control;
+ $end = shift @control;
+ $suffix = shift @control;
+ $pattern = shift @control;
+
+ if (!$start) {
+ print NEW while <OLD>;
+ last;
+ }
+
+ print " looking for $start\n";
+ while (<OLD>) {
+ print NEW;
+ last if /\Q$start\E/;
+ }
+ print "can't find $start\n" unless $_;
+ last unless $_;
+
+ print NEW $prefix;
+ if ($pattern =~ /^\&/) {
+ eval $pattern;
+ die("$pattern: $@") if $@;
+ } else {
+ for $i (2..$#relocs) {
+ printf (NEW "$pattern", $relocs[$i]) || die("$file.new write: $!");
+ $pattern =~ s/^ENUM\n/ENUMX\n/;
+ }
+ }
+ print NEW $suffix;
+ while (<OLD>) {
+ last if /\Q$end\E/;
+ }
+ print NEW;
+ }
+
+ close(OLD);
+ close(NEW) || die("$file.new close: $!");
+ &swapfile($file);
+}
+
+#-----------------------------------------------------------------------------
+
+sub swapfile {
+ my ($f) = @_;
+ if ( ! -f "$f.save") {
+ system "cp $f $f.save";
+ }
+ open(ORIG, $f);
+ open(NEW, "$f.new");
+ while (<ORIG>) {
+ $n = <NEW>;
+ if ($n ne $_) {
+ close(ORIG);
+ close(NEW);
+ print " Updating $f\n";
+ rename "$f", "$f.old";
+ rename "$f.new", "$f";
+ return;
+ }
+ }
+ close(ORIG);
+ close(NEW);
+ print " No change to $f\n";
+ unlink "$f.new";
+}
diff --git a/bfd/merge.c b/bfd/merge.c
index c1795d29112f..71b31d378b50 100644
--- a/bfd/merge.c
+++ b/bfd/merge.c
@@ -1,5 +1,5 @@
/* SEC_MERGE support.
- Copyright 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Jakub Jelinek <jakub@redhat.com>.
@@ -22,8 +22,8 @@
/* This file contains support for merging duplicate entities within sections,
as used in ELF SHF_MERGE. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "hashtab.h"
#include "libiberty.h"
@@ -766,7 +766,7 @@ _bfd_merge_sections (bfd *abfd ATTRIBUTE_UNUSED,
the hash table at all. */
for (secinfo = sinfo->chain; secinfo; secinfo = secinfo->next)
if (secinfo->first_str == NULL)
- secinfo->sec->flags |= SEC_EXCLUDE;
+ secinfo->sec->flags |= SEC_EXCLUDE | SEC_KEEP;
}
return TRUE;
diff --git a/bfd/mipsbsd.c b/bfd/mipsbsd.c
index b8621e486ae1..6edb9728361c 100644
--- a/bfd/mipsbsd.c
+++ b/bfd/mipsbsd.c
@@ -1,6 +1,6 @@
/* BFD backend for MIPS BSD (a.out) binaries.
- Copyright 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003
- Free Software Foundation, Inc.
+ Copyright 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+ 2007 Free Software Foundation, Inc.
Written by Ralph Campbell.
This file is part of BFD, the Binary File Descriptor library.
@@ -40,8 +40,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
the tokens. */
#define MY(OP) CONCAT2 (mipsbsd_,OP)
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libaout.h"
@@ -56,7 +56,8 @@ static bfd_boolean MY(write_object_contents) PARAMS ((bfd *abfd));
/* We can't use MY(x) here because it leads to a recursive call to CONCAT2
when expanded inside JUMP_TABLE. */
-#define MY_bfd_reloc_type_lookup mipsbsd_reloc_howto_type_lookup
+#define MY_bfd_reloc_type_lookup mipsbsd_reloc_type_lookup
+#define MY_bfd_reloc_name_lookup mipsbsd_reloc_name_lookup
#define MY_canonicalize_reloc mipsbsd_canonicalize_reloc
#define MY_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
@@ -72,8 +73,6 @@ static bfd_boolean MY(write_object_contents) PARAMS ((bfd *abfd));
static bfd_reloc_status_type mips_fix_jmp_addr
PARAMS ((bfd *, arelent *, struct bfd_symbol *, PTR, asection *,
bfd *, char **));
-static reloc_howto_type *MY(reloc_howto_type_lookup)
- PARAMS ((bfd *, bfd_reloc_code_real_type));
long MY(canonicalize_reloc) PARAMS ((bfd *, sec_ptr, arelent **, asymbol **));
@@ -302,9 +301,7 @@ static reloc_howto_type mips_howto_table_ext[] = {
};
static reloc_howto_type *
-MY(reloc_howto_type_lookup) (abfd, code)
- bfd *abfd;
- bfd_reloc_code_real_type code;
+MY(reloc_type_lookup) (bfd *abfd, bfd_reloc_code_real_type code)
{
if (bfd_get_arch (abfd) != bfd_arch_mips)
@@ -330,6 +327,22 @@ MY(reloc_howto_type_lookup) (abfd, code)
}
}
+static reloc_howto_type *
+MY(reloc_name_lookup) (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (mips_howto_table_ext) / sizeof (mips_howto_table_ext[0]);
+ i++)
+ if (mips_howto_table_ext[i].name != NULL
+ && strcasecmp (mips_howto_table_ext[i].name, r_name) == 0)
+ return &mips_howto_table_ext[i];
+
+ return NULL;
+}
+
/* This is just like the standard aoutx.h version but we need to do our
own mapping of external reloc type values to howto entries. */
long
diff --git a/bfd/mmo.c b/bfd/mmo.c
index 091b341810be..380a0429d3b6 100644
--- a/bfd/mmo.c
+++ b/bfd/mmo.c
@@ -1,5 +1,5 @@
/* BFD back-end for mmo objects (MMIX-specific object-format).
- Copyright 2001, 2002, 2003, 2004, 2005
+ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Hans-Peter Nilsson (hp@bitrange.com).
Infrastructure and other bits originally copied from srec.c and
@@ -195,8 +195,8 @@ EXAMPLE
| 0x81000000
| 0x980c0005 - lop_end; symbol table contained five 32-bit words. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libiberty.h"
#include "elf/mmix.h"
@@ -387,8 +387,7 @@ static void mmo_print_symbol (bfd *, void *, asymbol *,
bfd_print_symbol_type);
static bfd_boolean mmo_set_section_contents (bfd *, sec_ptr, const void *,
file_ptr, bfd_size_type);
-static int mmo_sizeof_headers (bfd *, bfd_boolean);
-static long mmo_get_reloc_upper_bound (bfd *, asection *);
+static int mmo_sizeof_headers (bfd *, struct bfd_link_info *);
static bfd_boolean mmo_internal_write_header (bfd *);
static bfd_boolean mmo_internal_write_post (bfd *, int, asection *);
static bfd_boolean mmo_internal_add_3_sym (bfd *, struct mmo_symbol_trie *,
@@ -415,7 +414,6 @@ static void mmo_write_byte (bfd *, bfd_byte);
static bfd_boolean mmo_new_section_hook (bfd *, asection *);
static int mmo_sort_mmo_symbols (const void *, const void *);
static bfd_boolean mmo_write_object_contents (bfd *);
-static long mmo_canonicalize_reloc (bfd *, sec_ptr, arelent **, asymbol **);
static bfd_boolean mmo_write_section_description (bfd *, asection *);
static bfd_boolean mmo_has_leading_or_trailing_zero_tetra_p (bfd *,
asection *);
@@ -1917,7 +1915,7 @@ mmo_scan (bfd *abfd)
/* This must be the last 32-bit word in an mmo file.
Let's find out. */
struct stat statbuf;
- long curpos = bfd_tell (abfd);
+ file_ptr curpos = bfd_tell (abfd);
if (bfd_stat (abfd, &statbuf) < 0)
goto error_return;
@@ -2007,19 +2005,21 @@ mmo_scan (bfd *abfd)
we point out the shape of allocated section contents. */
static bfd_boolean
-mmo_new_section_hook (bfd *abfd ATTRIBUTE_UNUSED, asection *newsect)
+mmo_new_section_hook (bfd *abfd, asection *newsect)
{
- /* We zero-fill all fields and assume NULL is represented by an all
- zero-bit pattern. */
- newsect->used_by_bfd =
- bfd_zalloc (abfd, sizeof (struct mmo_section_data_struct));
-
if (!newsect->used_by_bfd)
- return FALSE;
+ {
+ /* We zero-fill all fields and assume NULL is represented by an all
+ zero-bit pattern. */
+ newsect->used_by_bfd
+ = bfd_zalloc (abfd, sizeof (struct mmo_section_data_struct));
+ if (!newsect->used_by_bfd)
+ return FALSE;
+ }
/* Always align to at least 32-bit words. */
newsect->alignment_power = 2;
- return TRUE;
+ return _bfd_generic_new_section_hook (abfd, newsect);
}
/* We already have section contents loaded for sections that have
@@ -2229,7 +2229,7 @@ mmo_print_symbol (bfd *abfd, void *afile, asymbol *symbol,
static int
mmo_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
- bfd_boolean exec ATTRIBUTE_UNUSED)
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return 0;
}
@@ -2419,10 +2419,10 @@ mmo_internal_write_section (bfd *abfd, asection *sec)
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
- else if (strncmp (sec->name, MMIX_OTHER_SPEC_SECTION_PREFIX,
- strlen (MMIX_OTHER_SPEC_SECTION_PREFIX)) == 0)
+ else if (CONST_STRNEQ (sec->name, MMIX_OTHER_SPEC_SECTION_PREFIX))
{
int n = atoi (sec->name + strlen (MMIX_OTHER_SPEC_SECTION_PREFIX));
+
mmo_write_tetra_raw (abfd, (LOP << 24) | (LOP_SPEC << 16) | n);
return (! abfd->tdata.mmo_data->have_error
&& mmo_write_chunk_list (abfd, mmo_section_data (sec)->head));
@@ -3159,28 +3159,6 @@ mmo_write_object_contents (bfd *abfd)
return mmo_write_symbols_and_terminator (abfd);
}
-/* Return the size of a NULL pointer, so we support linking in an mmo
- object. */
-
-static long
-mmo_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
- asection *sec ATTRIBUTE_UNUSED)
-{
- return sizeof (void *);
-}
-
-/* Similarly canonicalize relocs to empty, filling in the terminating NULL
- pointer. */
-
-long
-mmo_canonicalize_reloc (bfd *abfd ATTRIBUTE_UNUSED,
- sec_ptr section ATTRIBUTE_UNUSED, arelent **relptr,
- asymbol **symbols ATTRIBUTE_UNUSED)
-{
- *relptr = NULL;
- return 0;
-}
-
/* If there's anything in particular in a mmo bfd that we want to free,
make this a real function. Only do this if you see major memory
thrashing; zealous free:ing will cause unwanted behavior, especially if
@@ -3232,18 +3210,6 @@ mmo_canonicalize_reloc (bfd *abfd ATTRIBUTE_UNUSED,
#define mmo_section_already_linked \
_bfd_generic_section_already_linked
-/* objcopy will be upset if we return -1 from bfd_get_reloc_upper_bound by
- using BFD_JUMP_TABLE_RELOCS (_bfd_norelocs) rather than 0. FIXME: Most
- likely a bug in the _bfd_norelocs definition.
-
- On the other hand, we smuggle in an mmo object (because setting up ELF
- is too cumbersome) when linking (from other formats, presumably ELF) to
- represent the g255 entry. We need to link that object, so need to say
- it has no relocs. Upper bound for the size of the relocation table is
- the size of a NULL pointer, and we support "canonicalization" for that
- pointer. */
-#define mmo_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
-
/* We want to copy time of creation, otherwise we'd use
BFD_JUMP_TABLE_COPY (_bfd_generic). */
#define mmo_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data
@@ -3303,9 +3269,7 @@ const bfd_target bfd_mmo_vec =
BFD_JUMP_TABLE_CORE (_bfd_nocore),
BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
BFD_JUMP_TABLE_SYMBOLS (mmo),
- /* We have to provide a valid method for getting relocs, returning zero,
- so we can't say BFD_JUMP_TABLE_RELOCS (_bfd_norelocs). */
- BFD_JUMP_TABLE_RELOCS (mmo),
+ BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
BFD_JUMP_TABLE_WRITE (mmo),
BFD_JUMP_TABLE_LINK (mmo),
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
diff --git a/bfd/netbsd-core.c b/bfd/netbsd-core.c
index e9111a985010..913e862f9a4b 100644
--- a/bfd/netbsd-core.c
+++ b/bfd/netbsd-core.c
@@ -1,6 +1,6 @@
/* BFD back end for NetBSD style core files
Copyright 1988, 1989, 1991, 1992, 1993, 1996, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005
+ 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Paul Kranenburg, EUR
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "libaout.h" /* BFD a.out internal data structures. */
@@ -126,11 +126,10 @@ netbsd_core_file_p (bfd *abfd)
flags = SEC_ALLOC + SEC_HAS_CONTENTS;
break;
}
- asect = bfd_make_section_anyway (abfd, sname);
+ asect = bfd_make_section_anyway_with_flags (abfd, sname, flags);
if (asect == NULL)
goto punt;
- asect->flags = flags;
asect->size = coreseg.c_size;
asect->vma = coreseg.c_addr;
asect->filepos = offset;
@@ -159,11 +158,12 @@ netbsd_core_file_p (bfd *abfd)
asect->size = wcookie_offset;
/* And create the .wcookie section. */
- asect = bfd_make_section_anyway (abfd, ".wcookie");
+ flags = SEC_ALLOC + SEC_HAS_CONTENTS;
+ asect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
+ flags);
if (asect == NULL)
goto punt;
- asect->flags = SEC_ALLOC + SEC_HAS_CONTENTS;
asect->size = coreseg.c_size - wcookie_offset;
asect->vma = 0;
asect->filepos = offset + wcookie_offset;
diff --git a/bfd/netbsd.h b/bfd/netbsd.h
index 92f6a7d2fd19..7182eda90475 100644
--- a/bfd/netbsd.h
+++ b/bfd/netbsd.h
@@ -1,6 +1,6 @@
/* BFD back-end definitions used by all NetBSD targets.
- Copyright 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 2000, 2002, 2005
- Free Software Foundation, Inc.
+ Copyright 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 2000, 2002,
+ 2005, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -50,8 +50,8 @@
((exec).a_info = \
((exec).a_info & 0x03ffffff) | ((flags & 0x03f) << 26))
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libaout.h"
diff --git a/bfd/newsos3.c b/bfd/newsos3.c
index 46f1d76054a1..9270c2398c7d 100644
--- a/bfd/newsos3.c
+++ b/bfd/newsos3.c
@@ -1,5 +1,5 @@
/* BFD back-end for NewsOS3 (Sony, 68k) binaries.
- Copyright 1990, 1991, 1994, 1995, 2000, 2001, 2003
+ Copyright 1990, 1991, 1994, 1995, 2000, 2001, 2003, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -33,8 +33,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define TARGET_IS_BIG_ENDIAN_P
#define N_HEADER_IN_TEXT(x) 0
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "aout/aout64.h"
#include "aout/stab_gnu.h"
diff --git a/bfd/nlm-target.h b/bfd/nlm-target.h
index 3358aef8e75e..7556112b5bd1 100644
--- a/bfd/nlm-target.h
+++ b/bfd/nlm-target.h
@@ -1,6 +1,6 @@
/* Target definitions for 32/64-bit NLM (NetWare Loadable Module)
Copyright 1993, 1994, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005 Free Software Foundation, Inc.
+ 2005, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -37,6 +37,7 @@
#define nlm_get_reloc_upper_bound nlmNAME (get_reloc_upper_bound)
#define nlm_canonicalize_reloc nlmNAME (canonicalize_reloc)
#define nlm_bfd_reloc_type_lookup bfd_default_reloc_type_lookup
+#define nlm_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
#define nlm_set_section_contents nlmNAME (set_section_contents)
#define nlm_sizeof_headers _bfd_nolink_sizeof_headers
diff --git a/bfd/nlm.c b/bfd/nlm.c
index 44599b595f29..4919d6c8dbb1 100644
--- a/bfd/nlm.c
+++ b/bfd/nlm.c
@@ -1,5 +1,5 @@
/* NLM (NetWare Loadable Module) executable support for BFD.
- Copyright 1993, 1994, 2001, 2002, 2003, 2005
+ Copyright 1993, 1994, 2001, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "libnlm.h"
diff --git a/bfd/nlm32-alpha.c b/bfd/nlm32-alpha.c
index 87d80c159a85..384c0169a7ff 100644
--- a/bfd/nlm32-alpha.c
+++ b/bfd/nlm32-alpha.c
@@ -1,5 +1,5 @@
/* Support for 32-bit Alpha NLM (NetWare Loadable Module)
- Copyright 1993, 1994, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1993, 1994, 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
@@ -23,8 +23,8 @@
that an Alpha chip would use a 64 bit format, but, for some reason,
it doesn't. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#define ARCH_SIZE 32
diff --git a/bfd/nlm32-i386.c b/bfd/nlm32-i386.c
index fcdfc645640b..c3a5d7e1eb90 100644
--- a/bfd/nlm32-i386.c
+++ b/bfd/nlm32-i386.c
@@ -1,5 +1,5 @@
/* Support for 32-bit i386 NLM (NetWare Loadable Module)
- Copyright 1993, 1994, 2000, 2001, 2002, 2003, 2005
+ Copyright 1993, 1994, 2000, 2001, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
#define ARCH_SIZE 32
diff --git a/bfd/nlm32-ppc.c b/bfd/nlm32-ppc.c
index 8b0d4009df83..a09df98c2a61 100644
--- a/bfd/nlm32-ppc.c
+++ b/bfd/nlm32-ppc.c
@@ -1,6 +1,6 @@
/* Support for 32-bit PowerPC NLM (NetWare Loadable Module)
- Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005 Free Software Foundation, Inc.
+ Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
diff --git a/bfd/nlm32-sparc.c b/bfd/nlm32-sparc.c
index e647ad082aa5..4acf791c1fbe 100644
--- a/bfd/nlm32-sparc.c
+++ b/bfd/nlm32-sparc.c
@@ -1,6 +1,6 @@
/* Support for 32-bit SPARC NLM (NetWare Loadable Module)
- Copyright 1993, 1994, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1993, 1994, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@
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 "bfd.h"
#include "libbfd.h"
#define ARCH_SIZE 32
@@ -123,8 +123,9 @@ nlm_sparc_read_reloc (bfd *abfd,
}
#ifdef DEBUG
- fprintf (stderr, "%s: address = %08lx, addend = %08lx, type = %d, howto = %08lx\n",
- __FUNCTION__, rel->address, rel->addend, type, rel->howto);
+ fprintf (stderr, "%s: address = %08lx, addend = %08lx, type = %u, howto = %p\n",
+ __FUNCTION__, (unsigned long) rel->address,
+ (unsigned long) rel->addend, type, rel->howto);
#endif
return TRUE;
@@ -176,8 +177,9 @@ nlm_sparc_write_reloc (bfd * abfd, asection * sec, arelent * rel)
val = bfd_get_section_vma (abfd, sec) + rel->address;
#ifdef DEBUG
- fprintf (stderr, "%s: val = %08lx, addend = %08lx, type = %d\n",
- __FUNCTION__, val, rel->addend, rel->howto->type);
+ fprintf (stderr, "%s: val = %08lx, addend = %08lx, type = %u\n",
+ __FUNCTION__, (unsigned long) val, (unsigned long) rel->addend,
+ rel->howto->type);
#endif
bfd_put_32 (abfd, val, tmp_reloc.offset);
bfd_put_32 (abfd, rel->addend, tmp_reloc.addend);
@@ -280,8 +282,8 @@ nlm_sparc_write_import (bfd * abfd, asection * sec, arelent * rel)
base = 0;
#ifdef DEBUG
- fprintf (stderr, "%s: <%x, 1>\n\t",
- __FUNCTION__, base + (*rel->sym_ptr_ptr)->value);
+ fprintf (stderr, "%s: <%lx, 1>\n\t",
+ __FUNCTION__, (unsigned long) (base + (*rel->sym_ptr_ptr)->value));
#endif
bfd_put_32 (abfd, base + (*rel->sym_ptr_ptr)->value, temp);
if (bfd_bwrite (temp, (bfd_size_type) 4, abfd) != 4)
@@ -330,8 +332,8 @@ nlm_sparc_write_export (bfd * abfd, asymbol * sym, bfd_vma value)
bfd_byte temp[4];
#ifdef DEBUG
- fprintf (stderr, "%s: <%x, %d, %s>\n",
- __FUNCTION__, value, strlen (sym->name), sym->name);
+ fprintf (stderr, "%s: <%lx, %u, %s>\n",
+ __FUNCTION__, (unsigned long) value, strlen (sym->name), sym->name);
#endif
bfd_put_32 (abfd, value, temp);
len = strlen (sym->name);
diff --git a/bfd/nlmcode.h b/bfd/nlmcode.h
index 4773061138fa..d4a0d983b981 100644
--- a/bfd/nlmcode.h
+++ b/bfd/nlmcode.h
@@ -1,6 +1,6 @@
/* NLM (NetWare Loadable Module) executable support for BFD.
Copyright 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005 Free Software Foundation, Inc.
+ 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Fred Fish @ Cygnus Support, using ELF support as the
template.
@@ -21,8 +21,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "libnlm.h"
@@ -138,14 +138,13 @@ add_bfd_section (bfd *abfd,
{
asection *newsect;
- newsect = bfd_make_section (abfd, name);
+ newsect = bfd_make_section_with_flags (abfd, name, flags);
if (newsect == NULL)
return FALSE;
newsect->vma = 0; /* NLM's are relocatable. */
newsect->size = size;
newsect->filepos = offset;
- newsect->flags = flags;
newsect->alignment_power = bfd_log2 ((bfd_vma) 0); /* FIXME */
return TRUE;
@@ -175,7 +174,7 @@ nlm_swap_auxiliary_headers_in (bfd *abfd)
return FALSE;
if (bfd_seek (abfd, position, SEEK_SET) != 0)
return FALSE;
- if (strncmp (tempstr, "VeRsIoN#", 8) == 0)
+ if (CONST_STRNEQ (tempstr, "VeRsIoN#"))
{
Nlm_External_Version_Header thdr;
@@ -197,7 +196,7 @@ nlm_swap_auxiliary_headers_in (bfd *abfd)
nlm_version_header (abfd)->day =
get_word (abfd, (bfd_byte *) thdr.day);
}
- else if (strncmp (tempstr, "MeSsAgEs", 8) == 0)
+ else if (CONST_STRNEQ (tempstr, "MeSsAgEs"))
{
Nlm_External_Extended_Header thdr;
@@ -265,7 +264,7 @@ nlm_swap_auxiliary_headers_in (bfd *abfd)
nlm_extended_header (abfd)->reserved5 =
get_word (abfd, (bfd_byte *) thdr.reserved5);
}
- else if (strncmp (tempstr, "CoPyRiGhT=", 10) == 0)
+ else if (CONST_STRNEQ (tempstr, "CoPyRiGhT="))
{
amt = sizeof (nlm_copyright_header (abfd)->stamp);
if (bfd_bread ((void *) nlm_copyright_header (abfd)->stamp,
@@ -281,7 +280,7 @@ nlm_swap_auxiliary_headers_in (bfd *abfd)
amt, abfd) != amt)
return FALSE;
}
- else if (strncmp (tempstr, "CuStHeAd", 8) == 0)
+ else if (CONST_STRNEQ (tempstr, "CuStHeAd"))
{
Nlm_External_Custom_Header thdr;
bfd_size_type hdrLength;
@@ -346,7 +345,7 @@ nlm_swap_auxiliary_headers_in (bfd *abfd)
/* If we have found a Cygnus header, process it. Otherwise,
just save the associated data without trying to interpret
it. */
- if (strncmp (dataStamp, "CyGnUsEx", 8) == 0)
+ if (CONST_STRNEQ (dataStamp, "CyGnUsEx"))
{
file_ptr pos;
bfd_byte *contents;
@@ -365,7 +364,7 @@ nlm_swap_auxiliary_headers_in (bfd *abfd)
if (bfd_seek (abfd, pos, SEEK_SET) != 0)
return FALSE;
- memcpy (nlm_cygnus_ext_header (abfd), "CyGnUsEx", 8);
+ LITMEMCPY (nlm_cygnus_ext_header (abfd), "CyGnUsEx");
nlm_cygnus_ext_header (abfd)->offset = dataOffset;
nlm_cygnus_ext_header (abfd)->length = dataLength;
@@ -646,7 +645,7 @@ nlm_swap_auxiliary_headers_out (bfd *abfd)
{
Nlm_External_Version_Header thdr;
- memcpy (thdr.stamp, "VeRsIoN#", 8);
+ LITMEMCPY (thdr.stamp, "VeRsIoN#");
put_word (abfd, (bfd_vma) nlm_version_header (abfd)->majorVersion,
(bfd_byte *) thdr.majorVersion);
put_word (abfd, (bfd_vma) nlm_version_header (abfd)->minorVersion,
@@ -673,7 +672,7 @@ nlm_swap_auxiliary_headers_out (bfd *abfd)
{
Nlm_External_Copyright_Header thdr;
- memcpy (thdr.stamp, "CoPyRiGhT=", 10);
+ LITMEMCPY (thdr.stamp, "CoPyRiGhT=");
amt = sizeof (thdr.stamp);
if (bfd_bwrite ((void *) thdr.stamp, amt, abfd) != amt)
return FALSE;
@@ -695,7 +694,7 @@ nlm_swap_auxiliary_headers_out (bfd *abfd)
{
Nlm_External_Extended_Header thdr;
- memcpy (thdr.stamp, "MeSsAgEs", 8);
+ LITMEMCPY (thdr.stamp, "MeSsAgEs");
put_word (abfd,
(bfd_vma) nlm_extended_header (abfd)->languageID,
(bfd_byte *) thdr.languageID);
@@ -798,7 +797,7 @@ nlm_swap_auxiliary_headers_out (bfd *abfd)
ds = find_nonzero (nlm_custom_header (abfd)->dataStamp,
sizeof (nlm_custom_header (abfd)->dataStamp));
- memcpy (thdr.stamp, "CuStHeAd", 8);
+ LITMEMCPY (thdr.stamp, "CuStHeAd");
hdrLength = (2 * NLM_TARGET_LONG_SIZE + (ds ? 8 : 0)
+ nlm_custom_header (abfd)->hdrLength);
put_word (abfd, hdrLength, thdr.length);
@@ -832,14 +831,14 @@ nlm_swap_auxiliary_headers_out (bfd *abfd)
{
Nlm_External_Custom_Header thdr;
- memcpy (thdr.stamp, "CuStHeAd", 8);
+ LITMEMCPY (thdr.stamp, "CuStHeAd");
put_word (abfd, (bfd_vma) 2 * NLM_TARGET_LONG_SIZE + 8,
(bfd_byte *) thdr.length);
put_word (abfd, (bfd_vma) nlm_cygnus_ext_header (abfd)->offset,
(bfd_byte *) thdr.dataOffset);
put_word (abfd, (bfd_vma) nlm_cygnus_ext_header (abfd)->length,
(bfd_byte *) thdr.dataLength);
- memcpy (thdr.dataStamp, "CyGnUsEx", 8);
+ LITMEMCPY (thdr.dataStamp, "CyGnUsEx");
amt = sizeof (thdr);
if (bfd_bwrite ((void *) &thdr, amt, abfd) != amt)
return FALSE;
diff --git a/bfd/oasys.c b/bfd/oasys.c
index 74d2c310a037..972455d877d9 100644
--- a/bfd/oasys.c
+++ b/bfd/oasys.c
@@ -1,6 +1,6 @@
/* BFD back-end for oasys objects.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2001,
- 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support, <sac@cygnus.com>.
This file is part of BFD, the Binary File Descriptor library.
@@ -20,8 +20,8 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
#define UNDERSCORE_HACK 1
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "safe-ctype.h"
#include "libbfd.h"
#include "oasys.h"
@@ -685,9 +685,13 @@ oasys_print_symbol (bfd *abfd, void * afile, asymbol *symbol, bfd_print_symbol_t
static bfd_boolean
oasys_new_section_hook (bfd *abfd, asection *newsect)
{
- newsect->used_by_bfd = bfd_alloc (abfd, (bfd_size_type) sizeof (oasys_per_section_type));
if (!newsect->used_by_bfd)
- return FALSE;
+ {
+ newsect->used_by_bfd
+ = bfd_alloc (abfd, (bfd_size_type) sizeof (oasys_per_section_type));
+ if (!newsect->used_by_bfd)
+ return FALSE;
+ }
oasys_per_section (newsect)->data = NULL;
oasys_per_section (newsect)->section = newsect;
oasys_per_section (newsect)->offset = 0;
@@ -697,7 +701,7 @@ oasys_new_section_hook (bfd *abfd, asection *newsect)
/* Turn the section string into an index. */
sscanf (newsect->name, "%u", &newsect->target_index);
- return TRUE;
+ return _bfd_generic_new_section_hook (abfd, newsect);
}
@@ -1160,7 +1164,8 @@ oasys_generic_stat_arch_elt (bfd *abfd, struct stat *buf)
}
static int
-oasys_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, bfd_boolean exec ATTRIBUTE_UNUSED)
+oasys_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return 0;
}
@@ -1182,6 +1187,7 @@ oasys_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, bfd_boolean exec ATTRIBUTE_UNU
#define oasys_read_minisymbols _bfd_generic_read_minisymbols
#define oasys_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
#define oasys_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
+#define oasys_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
#define oasys_set_arch_mach bfd_default_set_arch_mach
#define oasys_get_section_contents_in_window _bfd_generic_get_section_contents_in_window
#define oasys_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents
diff --git a/bfd/opncls.c b/bfd/opncls.c
index b02b137889a1..4457a797cf4e 100644
--- a/bfd/opncls.c
+++ b/bfd/opncls.c
@@ -1,6 +1,6 @@
/* opncls.c -- open and close a BFD.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -21,8 +21,8 @@
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 "bfd.h"
#include "objalloc.h"
#include "libbfd.h"
#include "libiberty.h"
@@ -115,11 +115,35 @@ _bfd_new_bfd_contained_in (bfd *obfd)
void
_bfd_delete_bfd (bfd *abfd)
{
- bfd_hash_table_free (&abfd->section_htab);
- objalloc_free ((struct objalloc *) abfd->memory);
+ if (abfd->memory)
+ {
+ bfd_hash_table_free (&abfd->section_htab);
+ objalloc_free ((struct objalloc *) abfd->memory);
+ }
free (abfd);
}
+/* Free objalloc memory. */
+
+bfd_boolean
+_bfd_free_cached_info (bfd *abfd)
+{
+ if (abfd->memory)
+ {
+ bfd_hash_table_free (&abfd->section_htab);
+ objalloc_free ((struct objalloc *) abfd->memory);
+
+ abfd->sections = NULL;
+ abfd->section_last = NULL;
+ abfd->outsymbols = NULL;
+ abfd->tdata.any = NULL;
+ abfd->usrdata = NULL;
+ abfd->memory = NULL;
+ }
+
+ return TRUE;
+}
+
/*
SECTION
Opening and closing BFDs
@@ -360,7 +384,10 @@ SYNOPSIS
file_ptr nbytes,
file_ptr offset),
int (*close) (struct bfd *nbfd,
- void *stream));
+ void *stream),
+ int (*stat) (struct bfd *abfd,
+ void *stream,
+ struct stat *sb));
DESCRIPTION
@@ -387,6 +414,10 @@ DESCRIPTION
<<bfd_close>>. @var{close} either succeeds returning 0, or
fails returning -1 (setting <<bfd_error>>).
+ Calls @var{stat} to fill in a stat structure for bfd_stat,
+ bfd_get_size, and bfd_get_mtime calls. @var{stat} returns 0
+ on success, or returns -1 on failure (setting <<bfd_error>>).
+
If <<bfd_openr_iovec>> returns <<NULL>> then an error has
occurred. Possible errors are <<bfd_error_no_memory>>,
<<bfd_error_invalid_target>> and <<bfd_error_system_call>>.
@@ -399,6 +430,7 @@ struct opncls
file_ptr (*pread) (struct bfd *abfd, void *stream, void *buf,
file_ptr nbytes, file_ptr offset);
int (*close) (struct bfd *abfd, void *stream);
+ int (*stat) (struct bfd *abfd, void *stream, struct stat *sb);
file_ptr where;
};
@@ -461,10 +493,15 @@ opncls_bflush (struct bfd *abfd ATTRIBUTE_UNUSED)
}
static int
-opncls_bstat (struct bfd *abfd ATTRIBUTE_UNUSED, struct stat *sb)
+opncls_bstat (struct bfd *abfd, struct stat *sb)
{
+ struct opncls *vec = abfd->iostream;
+
memset (sb, 0, sizeof (*sb));
- return 0;
+ if (vec->stat == NULL)
+ return 0;
+
+ return (vec->stat) (abfd, vec->stream, sb);
}
static const struct bfd_iovec opncls_iovec = {
@@ -483,7 +520,10 @@ bfd_openr_iovec (const char *filename, const char *target,
file_ptr nbytes,
file_ptr offset),
int (*close) (struct bfd *nbfd,
- void *stream))
+ void *stream),
+ int (*stat) (struct bfd *abfd,
+ void *stream,
+ struct stat *sb))
{
bfd *nbfd;
const bfd_target *target_vec;
@@ -515,6 +555,7 @@ bfd_openr_iovec (const char *filename, const char *target,
vec->stream = stream;
vec->pread = pread;
vec->close = close;
+ vec->stat = stat;
nbfd->iovec = &opncls_iovec;
nbfd->iostream = vec;
@@ -1321,6 +1362,7 @@ bfd_create_gnu_debuglink_section (bfd *abfd, const char *filename)
{
asection *sect;
bfd_size_type debuglink_size;
+ flagword flags;
if (abfd == NULL || filename == NULL)
{
@@ -1339,16 +1381,11 @@ bfd_create_gnu_debuglink_section (bfd *abfd, const char *filename)
return NULL;
}
- sect = bfd_make_section (abfd, GNU_DEBUGLINK);
+ flags = SEC_HAS_CONTENTS | SEC_READONLY | SEC_DEBUGGING;
+ sect = bfd_make_section_with_flags (abfd, GNU_DEBUGLINK, flags);
if (sect == NULL)
return NULL;
- if (! bfd_set_section_flags (abfd, sect,
- SEC_HAS_CONTENTS | SEC_READONLY | SEC_DEBUGGING))
- /* XXX Should we delete the section from the bfd ? */
- return NULL;
-
-
debuglink_size = strlen (filename) + 1;
debuglink_size += 3;
debuglink_size &= ~3;
diff --git a/bfd/osf-core.c b/bfd/osf-core.c
index cc6c4dccd002..b9472abe3904 100644
--- a/bfd/osf-core.c
+++ b/bfd/osf-core.c
@@ -1,6 +1,6 @@
/* BFD back-end for OSF/1 core files.
- Copyright 1993, 1994, 1995, 1998, 1999, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
+ Copyright 1993, 1994, 1995, 1998, 1999, 2001, 2002, 2003, 2004, 2006,
+ 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -21,8 +21,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
/* This file can only be compiled on systems which use OSF/1 style
core files. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include <sys/user.h>
@@ -67,11 +67,10 @@ make_bfd_asection (abfd, name, flags, size, vma, filepos)
{
asection *asect;
- asect = bfd_make_section_anyway (abfd, name);
+ asect = bfd_make_section_anyway_with_flags (abfd, name, flags);
if (!asect)
return NULL;
- asect->flags = flags;
asect->size = size;
asect->vma = vma;
asect->filepos = filepos;
@@ -95,7 +94,7 @@ osf_core_core_file_p (abfd)
if (val != sizeof core_header)
return NULL;
- if (strncmp (core_header.magic, "Core", 4) != 0)
+ if (! CONST_STRNEQ (core_header.magic, "Core"))
return NULL;
core_hdr (abfd) = (struct osf_core_struct *)
diff --git a/bfd/pc532-mach.c b/bfd/pc532-mach.c
index 70ca8613cc3d..6dc1de13a596 100644
--- a/bfd/pc532-mach.c
+++ b/bfd/pc532-mach.c
@@ -1,5 +1,5 @@
/* BFD back-end for Mach3/532 a.out-ish binaries.
- Copyright 1990, 1991, 1992, 1994, 1995, 2000, 2001, 2002
+ Copyright 1990, 1991, 1992, 1994, 1995, 2000, 2001, 2002, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -60,8 +60,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define TARGETNAME "a.out-pc532-mach"
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libaout.h"
#include "libbfd.h"
#include "aout/aout64.h"
diff --git a/bfd/pdp11.c b/bfd/pdp11.c
index 37f960f1992a..c3fbb41df0ec 100644
--- a/bfd/pdp11.c
+++ b/bfd/pdp11.c
@@ -1,5 +1,5 @@
/* BFD back-end for PDP-11 a.out binaries.
- Copyright 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -70,6 +70,7 @@
&& ((x).a_info != A_MAGIC5) \
&& ((x).a_info != A_MAGIC6))
+#include "sysdep.h"
#include "bfd.h"
#define external_exec pdp11_external_exec
@@ -123,7 +124,6 @@ struct pdp11_external_nlist
#define WRITE_HEADERS(abfd, execp) pdp11_aout_write_headers (abfd, execp)
-#include "sysdep.h"
#include "libbfd.h"
#include "libaout.h"
@@ -277,6 +277,22 @@ NAME (aout, reloc_type_lookup) (bfd * abfd ATTRIBUTE_UNUSED,
}
}
+reloc_howto_type *
+NAME (aout, reloc_name_lookup) (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (howto_table_pdp11) / sizeof (howto_table_pdp11[0]);
+ i++)
+ if (howto_table_pdp11[i].name != NULL
+ && strcasecmp (howto_table_pdp11[i].name, r_name) == 0)
+ return &howto_table_pdp11[i];
+
+ return NULL;
+}
+
static int
pdp11_aout_write_headers (bfd *abfd, struct internal_exec *execp)
{
@@ -1111,32 +1127,27 @@ NAME (aout, new_section_hook) (bfd *abfd, asection *newsect)
if (bfd_get_format (abfd) == bfd_object)
{
if (obj_textsec (abfd) == NULL
- && ! strcmp (newsect->name, ".text"))
+ && !strcmp (newsect->name, ".text"))
{
obj_textsec(abfd)= newsect;
newsect->target_index = N_TEXT;
- return TRUE;
}
-
- if (obj_datasec (abfd) == NULL
- && ! strcmp (newsect->name, ".data"))
- {
- obj_datasec (abfd) = newsect;
- newsect->target_index = N_DATA;
- return TRUE;
- }
-
- if (obj_bsssec (abfd) == NULL
- && !strcmp (newsect->name, ".bss"))
- {
- obj_bsssec (abfd) = newsect;
- newsect->target_index = N_BSS;
- return TRUE;
- }
- }
+ else if (obj_datasec (abfd) == NULL
+ && !strcmp (newsect->name, ".data"))
+ {
+ obj_datasec (abfd) = newsect;
+ newsect->target_index = N_DATA;
+ }
+ else if (obj_bsssec (abfd) == NULL
+ && !strcmp (newsect->name, ".bss"))
+ {
+ obj_bsssec (abfd) = newsect;
+ newsect->target_index = N_BSS;
+ }
+ }
/* We allow more than three sections internally. */
- return TRUE;
+ return _bfd_generic_new_section_hook (abfd, newsect);
}
bfd_boolean
@@ -2376,7 +2387,8 @@ NAME (aout, find_nearest_line) (bfd *abfd,
}
int
-NAME (aout, sizeof_headers) (bfd *abfd, bfd_boolean execable ATTRIBUTE_UNUSED)
+NAME (aout, sizeof_headers) (bfd *abfd,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return adata (abfd).exec_bytes_size;
}
diff --git a/bfd/pe-arm-wince.c b/bfd/pe-arm-wince.c
new file mode 100644
index 000000000000..a13594fd8949
--- /dev/null
+++ b/bfd/pe-arm-wince.c
@@ -0,0 +1,37 @@
+/* BFD back-end for ARM WINCE PE files.
+ Copyright 2006 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define TARGET_UNDERSCORE 0
+#define USER_LABEL_PREFIX ""
+
+#define TARGET_LITTLE_SYM arm_wince_pe_little_vec
+#define TARGET_LITTLE_NAME "pe-arm-wince-little"
+#define TARGET_BIG_SYM arm_wince_pe_big_vec
+#define TARGET_BIG_NAME "pe-arm-wince-big"
+
+#define bfd_arm_allocate_interworking_sections \
+ bfd_arm_wince_pe_allocate_interworking_sections
+#define bfd_arm_get_bfd_for_interworking \
+ bfd_arm_wince_pe_get_bfd_for_interworking
+#define bfd_arm_process_before_allocation \
+ bfd_arm_wince_pe_process_before_allocation
+
+#define LOCAL_LABEL_PREFIX "."
+
+#include "pe-arm.c"
diff --git a/bfd/pe-arm.c b/bfd/pe-arm.c
index dba9c1b40e48..5700e2382a80 100644
--- a/bfd/pe-arm.c
+++ b/bfd/pe-arm.c
@@ -1,5 +1,6 @@
/* BFD back-end for ARM PECOFF files.
- Copyright 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1995, 1996, 1999, 2000, 2001, 2002, 2007
+ Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +18,19 @@ You should have received a copy of the GNU General Public 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"
+/* Do this before including bfd.h, so we prototype the right functions. */
+
+#ifndef bfd_arm_allocate_interworking_sections
+#define bfd_arm_allocate_interworking_sections \
+ bfd_armpe_allocate_interworking_sections
+#define bfd_arm_get_bfd_for_interworking \
+ bfd_armpe_get_bfd_for_interworking
+#define bfd_arm_process_before_allocation \
+ bfd_armpe_process_before_allocation
+#endif
+
#include "sysdep.h"
+#include "bfd.h"
#ifndef TARGET_LITTLE_SYM
#define TARGET_LITTLE_SYM armpe_little_vec
@@ -31,17 +43,22 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define PCRELOFFSET TRUE
#define COFF_LONG_SECTION_NAMES
-#ifndef bfd_arm_allocate_interworking_sections
-#define bfd_arm_allocate_interworking_sections \
- bfd_arm_pe_allocate_interworking_sections
-#define bfd_arm_get_bfd_for_interworking \
- bfd_arm_pe_get_bfd_for_interworking
-#define bfd_arm_process_before_allocation \
- bfd_arm_pe_process_before_allocation
-#endif
-
-#ifdef ARM_WINCE
-#define TARGET_UNDERSCORE 0
-#endif
+#define COFF_SECTION_ALIGNMENT_ENTRIES \
+{ COFF_SECTION_NAME_EXACT_MATCH (".bss"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".rdata"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
#include "coff-arm.c"
diff --git a/bfd/pe-i386.c b/bfd/pe-i386.c
index 7c102b42de84..72aacf0a8936 100644
--- a/bfd/pe-i386.c
+++ b/bfd/pe-i386.c
@@ -1,5 +1,6 @@
/* BFD back-end for Intel 386 PECOFF files.
- Copyright 1995, 1996, 1999, 2001, 2002, 2004 Free Software Foundation, Inc.
+ Copyright 1995, 1996, 1999, 2001, 2002, 2004, 2007
+ Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +18,8 @@
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 "bfd.h"
#define TARGET_SYM i386pe_vec
#define TARGET_NAME "pe-i386"
@@ -34,10 +35,16 @@
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".data$"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".rdata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".rdata$"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".text$"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
diff --git a/bfd/pe-mcore.c b/bfd/pe-mcore.c
index 1f8a41460740..4dcf0765c542 100644
--- a/bfd/pe-mcore.c
+++ b/bfd/pe-mcore.c
@@ -1,5 +1,5 @@
/* BFD back-end for MCore PECOFF files.
- Copyright 1999, 2002 Free Software Foundation, Inc.
+ Copyright 1999, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#ifndef TARGET_BIG_SYM
#define TARGET_BIG_SYM mcore_pe_big_vec
diff --git a/bfd/pe-mips.c b/bfd/pe-mips.c
index 03d6beca981c..628cecf9a71b 100644
--- a/bfd/pe-mips.c
+++ b/bfd/pe-mips.c
@@ -1,6 +1,6 @@
/* BFD back-end for MIPS PE COFF files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
Modified from coff-i386.c by DJ Delorie, dj@cygnus.com
This file is part of BFD, the Binary File Descriptor library.
@@ -23,8 +23,8 @@
#define COFF_LONG_SECTION_NAMES
#define PCRELOFFSET TRUE
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "coff/mipspe.h"
#include "coff/internal.h"
@@ -453,6 +453,7 @@ coff_mips_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
#define coff_rtype_to_howto coff_mips_rtype_to_howto
#define coff_bfd_reloc_type_lookup coff_mips_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup coff_mips_reloc_name_lookup
/* Get the howto structure for a generic reloc type. */
@@ -496,6 +497,22 @@ coff_mips_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return & howto_table [mips_type];
}
+static reloc_howto_type *
+coff_mips_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (howto_table) / sizeof (howto_table[0]);
+ i++)
+ if (howto_table[i].name != NULL
+ && strcasecmp (howto_table[i].name, r_name) == 0)
+ return &howto_table[i];
+
+ return NULL;
+}
+
static void
mips_swap_reloc_in (bfd * abfd, void * src, void * dst)
{
diff --git a/bfd/pe-ppc.c b/bfd/pe-ppc.c
index 93cf6367c6e7..fa6404e4a34c 100644
--- a/bfd/pe-ppc.c
+++ b/bfd/pe-ppc.c
@@ -1,5 +1,5 @@
/* BFD back-end for PowerPC PECOFF files.
- Copyright 1995, 1996, 1999, 2001 Free Software Foundation, Inc.
+ Copyright 1995, 1996, 1999, 2001, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ along with this program; 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 "bfd.h"
#define E_FILENMLEN 18
diff --git a/bfd/pe-sh.c b/bfd/pe-sh.c
index c0f81933b4df..d8f61b7d3163 100644
--- a/bfd/pe-sh.c
+++ b/bfd/pe-sh.c
@@ -1,5 +1,5 @@
/* BFD back-end for SH PECOFF files.
- Copyright 1995, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1995, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#define TARGET_SHL_SYM shlpe_vec
#define TARGET_SHL_NAME "pe-shl"
diff --git a/bfd/pe-x86_64.c b/bfd/pe-x86_64.c
new file mode 100644
index 000000000000..0c6badf1a36b
--- /dev/null
+++ b/bfd/pe-x86_64.c
@@ -0,0 +1,53 @@
+/* BFD back-end for Intel/AMD x86_64 PECOFF files.
+ Copyright 2006, 2007 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Written by Kai Tietz, OneVision Software GmbH&CoKg. */
+
+#include "sysdep.h"
+#include "bfd.h"
+
+#define TARGET_SYM x86_64pe_vec
+#define TARGET_NAME "pe-x86-64"
+#define COFF_WITH_PE
+#define COFF_WITH_pex64
+#define PCRELOFFSET TRUE
+#define TARGET_UNDERSCORE '_'
+#define COFF_LONG_SECTION_NAMES
+#define COFF_SUPPORT_GNU_LINKONCE
+#define COFF_LONG_FILENAMES
+
+#define COFF_SECTION_ALIGNMENT_ENTRIES \
+{ COFF_SECTION_NAME_EXACT_MATCH (".bss"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".rdata"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
+
+#include "coff-x86_64.c"
diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c
index 71300219d303..f96825f687e8 100644
--- a/bfd/peXXigen.c
+++ b/bfd/peXXigen.c
@@ -1,6 +1,6 @@
/* Support for the generic parts of PE/PEI; the common executable parts.
Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006 Free Software Foundation, Inc.
+ 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Cygnus Solutions.
This file is part of BFD, the Binary File Descriptor library.
@@ -52,12 +52,12 @@
on this code has a chance of getting something accomplished without
wasting too much time. */
-/* This expands into COFF_WITH_pe or COFF_WITH_pep depending on whether
- we're compiling for straight PE or PE+. */
+/* This expands into COFF_WITH_pe, COFF_WITH_pep, or COFF_WITH_pex64
+ depending on whether we're compiling for straight PE or PE+. */
#define COFF_WITH_XX
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "coff/internal.h"
@@ -67,7 +67,9 @@
within PE/PEI, so we get them from there. FIXME: The lack of
variance is an assumption which may prove to be incorrect if new
PE/PEI targets are created. */
-#ifdef COFF_WITH_pep
+#if defined COFF_WITH_pex64
+# include "coff/x86_64.h"
+#elif defined COFF_WITH_pep
# include "coff/ia64.h"
#else
# include "coff/i386.h"
@@ -77,7 +79,7 @@
#include "libcoff.h"
#include "libpei.h"
-#ifdef COFF_WITH_pep
+#if defined COFF_WITH_pep || defined COFF_WITH_pex64
# undef AOUTSZ
# define AOUTSZ PEPAOUTSZ
# define PEAOUTHDR PEPAOUTHDR
@@ -147,6 +149,7 @@ _bfd_XXi_swap_sym_in (bfd * abfd, void * ext1, void * in1)
int unused_section_number = 0;
asection *sec;
char *name;
+ flagword flags;
for (sec = abfd->sections; sec; sec = sec->next)
if (unused_section_number <= sec->target_index)
@@ -156,7 +159,8 @@ _bfd_XXi_swap_sym_in (bfd * abfd, void * ext1, void * in1)
if (name == NULL)
return;
strcpy (name, in->n_name);
- sec = bfd_make_section_anyway (abfd, name);
+ flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_DATA | SEC_LOAD;
+ sec = bfd_make_section_anyway_with_flags (abfd, name, flags);
sec->vma = 0;
sec->lma = 0;
@@ -169,7 +173,6 @@ _bfd_XXi_swap_sym_in (bfd * abfd, void * ext1, void * in1)
sec->userdata = NULL;
sec->next = NULL;
sec->alignment_power = 2;
- sec->flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_DATA | SEC_LOAD;
sec->target_index = unused_section_number;
@@ -385,10 +388,11 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
void * aouthdr_ext1,
void * aouthdr_int1)
{
- struct internal_extra_pe_aouthdr *a;
- PEAOUTHDR * src = (PEAOUTHDR *) (aouthdr_ext1);
+ PEAOUTHDR * src = (PEAOUTHDR *) aouthdr_ext1;
AOUTHDR * aouthdr_ext = (AOUTHDR *) aouthdr_ext1;
- struct internal_aouthdr *aouthdr_int = (struct internal_aouthdr *)aouthdr_int1;
+ struct internal_aouthdr *aouthdr_int
+ = (struct internal_aouthdr *) aouthdr_int1;
+ struct internal_extra_pe_aouthdr *a = &aouthdr_int->pe;
aouthdr_int->magic = H_GET_16 (abfd, aouthdr_ext->magic);
aouthdr_int->vstamp = H_GET_16 (abfd, aouthdr_ext->vstamp);
@@ -398,13 +402,21 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
aouthdr_int->entry = GET_AOUTHDR_ENTRY (abfd, aouthdr_ext->entry);
aouthdr_int->text_start =
GET_AOUTHDR_TEXT_START (abfd, aouthdr_ext->text_start);
-#ifndef COFF_WITH_pep
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
/* PE32+ does not have data_start member! */
aouthdr_int->data_start =
GET_AOUTHDR_DATA_START (abfd, aouthdr_ext->data_start);
+ a->BaseOfData = aouthdr_int->data_start;
#endif
- a = &aouthdr_int->pe;
+ a->Magic = aouthdr_int->magic;
+ a->MajorLinkerVersion = H_GET_8 (abfd, aouthdr_ext->vstamp);
+ a->MinorLinkerVersion = H_GET_8 (abfd, aouthdr_ext->vstamp + 1);
+ a->SizeOfCode = aouthdr_int->tsize ;
+ a->SizeOfInitializedData = aouthdr_int->dsize ;
+ a->SizeOfUninitializedData = aouthdr_int->bsize ;
+ a->AddressOfEntryPoint = aouthdr_int->entry;
+ a->BaseOfCode = aouthdr_int->text_start;
a->ImageBase = GET_OPTHDR_IMAGE_BASE (abfd, src->ImageBase);
a->SectionAlignment = H_GET_32 (abfd, src->SectionAlignment);
a->FileAlignment = H_GET_32 (abfd, src->FileAlignment);
@@ -441,6 +453,7 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
/* If data directory is empty, rva also should be 0. */
int size =
H_GET_32 (abfd, src->DataDirectory[idx][1]);
+
a->DataDirectory[idx].Size = size;
if (size)
@@ -454,7 +467,7 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
if (aouthdr_int->entry)
{
aouthdr_int->entry += a->ImageBase;
-#ifndef COFF_WITH_pep
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
aouthdr_int->entry &= 0xffffffff;
#endif
}
@@ -462,12 +475,12 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
if (aouthdr_int->tsize)
{
aouthdr_int->text_start += a->ImageBase;
-#ifndef COFF_WITH_pep
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
aouthdr_int->text_start &= 0xffffffff;
#endif
}
-#ifndef COFF_WITH_pep
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
/* PE32+ does not have data_start member! */
if (aouthdr_int->dsize)
{
@@ -480,9 +493,9 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
/* These three fields are normally set up by ppc_relocate_section.
In the case of reading a file in, we can pick them up from the
DataDirectory. */
- first_thunk_address = a->DataDirectory[12].VirtualAddress;
- thunk_size = a->DataDirectory[12].Size;
- import_table_size = a->DataDirectory[1].Size;
+ first_thunk_address = a->DataDirectory[PE_IMPORT_ADDRESS_TABLE].VirtualAddress;
+ thunk_size = a->DataDirectory[PE_IMPORT_ADDRESS_TABLE].Size;
+ import_table_size = a->DataDirectory[PE_IMPORT_TABLE].Size;
#endif
}
@@ -540,14 +553,14 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, void * in, void * out)
fa = extra->FileAlignment;
ib = extra->ImageBase;
- idata2 = pe->pe_opthdr.DataDirectory[1];
- idata5 = pe->pe_opthdr.DataDirectory[12];
- tls = pe->pe_opthdr.DataDirectory[9];
+ idata2 = pe->pe_opthdr.DataDirectory[PE_IMPORT_TABLE];
+ idata5 = pe->pe_opthdr.DataDirectory[PE_IMPORT_ADDRESS_TABLE];
+ tls = pe->pe_opthdr.DataDirectory[PE_TLS_TABLE];
if (aouthdr_in->tsize)
{
aouthdr_in->text_start -= ib;
-#ifndef COFF_WITH_pep
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
aouthdr_in->text_start &= 0xffffffff;
#endif
}
@@ -555,7 +568,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, void * in, void * out)
if (aouthdr_in->dsize)
{
aouthdr_in->data_start -= ib;
-#ifndef COFF_WITH_pep
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
aouthdr_in->data_start &= 0xffffffff;
#endif
}
@@ -563,7 +576,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, void * in, void * out)
if (aouthdr_in->entry)
{
aouthdr_in->entry -= ib;
-#ifndef COFF_WITH_pep
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
aouthdr_in->entry &= 0xffffffff;
#endif
}
@@ -592,11 +605,11 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, void * in, void * out)
So - we copy the input values into the output values, and then, if
a final link is going to be performed, it can overwrite them. */
- extra->DataDirectory[1] = idata2;
- extra->DataDirectory[12] = idata5;
- extra->DataDirectory[9] = tls;
+ extra->DataDirectory[PE_IMPORT_TABLE] = idata2;
+ extra->DataDirectory[PE_IMPORT_ADDRESS_TABLE] = idata5;
+ extra->DataDirectory[PE_TLS_TABLE] = tls;
- if (extra->DataDirectory[1].VirtualAddress == 0)
+ if (extra->DataDirectory[PE_IMPORT_TABLE].VirtualAddress == 0)
/* Until other .idata fixes are made (pending patch), the entry for
.idata is needed for backwards compatibility. FIXME. */
add_data_entry (abfd, extra, 1, ".idata", ib);
@@ -632,16 +645,22 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, void * in, void * out)
in the virt_size field). Files have been seen (from MSVC
5.0 link.exe) where the file size of the .data segment is
quite small compared to the virtual size. Without this
- fix, strip munges the file. */
+ fix, strip munges the file.
+
+ FIXME: We need to handle holes between sections, which may
+ happpen when we covert from another format. We just use
+ the virtual address and virtual size of the last section
+ for the image size. */
if (coff_section_data (abfd, sec) != NULL
&& pei_section_data (abfd, sec) != NULL)
- isize += SA (FA (pei_section_data (abfd, sec)->virt_size));
+ isize = (sec->vma - extra->ImageBase
+ + SA (FA (pei_section_data (abfd, sec)->virt_size)));
}
aouthdr_in->dsize = dsize;
aouthdr_in->tsize = tsize;
extra->SizeOfHeaders = hsize;
- extra->SizeOfImage = SA (hsize) + isize;
+ extra->SizeOfImage = isize;
}
H_PUT_16 (abfd, aouthdr_in->magic, aouthdr_out->standard.magic);
@@ -660,7 +679,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, void * in, void * out)
PUT_AOUTHDR_TEXT_START (abfd, aouthdr_in->text_start,
aouthdr_out->standard.text_start);
-#ifndef COFF_WITH_pep
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
/* PE32+ does not have data_start member! */
PUT_AOUTHDR_DATA_START (abfd, aouthdr_in->data_start,
aouthdr_out->standard.data_start);
@@ -1017,7 +1036,7 @@ static char * dir_names[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] =
N_("Bound Import Directory"),
N_("Import Address Table Directory"),
N_("Delay Import Directory"),
- N_("Reserved"),
+ N_("CLR Runtime Header"),
N_("Reserved")
};
@@ -1051,9 +1070,9 @@ pe_print_idata (bfd * abfd, void * vfile)
bfd_vma addr;
- addr = extra->DataDirectory[1].VirtualAddress;
+ addr = extra->DataDirectory[PE_IMPORT_TABLE].VirtualAddress;
- if (addr == 0 && extra->DataDirectory[1].Size == 0)
+ if (addr == 0 && extra->DataDirectory[PE_IMPORT_TABLE].Size == 0)
{
/* Maybe the extra header isn't there. Look for the section. */
section = bfd_get_section_by_name (abfd, ".idata");
@@ -1171,7 +1190,7 @@ pe_print_idata (bfd * abfd, void * vfile)
bfd_size_type j;
char *dll;
- /* Print (i + extra->DataDirectory[1].VirtualAddress). */
+ /* Print (i + extra->DataDirectory[PE_IMPORT_TABLE].VirtualAddress). */
fprintf (file, " %08lx\t", (unsigned long) (i + adj + dataoff));
hint_addr = bfd_get_32 (abfd, data + i + dataoff);
time_stamp = bfd_get_32 (abfd, data + i + 4 + dataoff);
@@ -1212,8 +1231,8 @@ pe_print_idata (bfd * abfd, void * vfile)
ft_data = data;
ft_idx = first_thunk - adj;
ft_allocated = 0;
-
- if (first_thunk != hint_addr)
+
+ if (first_thunk != hint_addr)
{
/* Find the section which contains the first thunk. */
for (ft_section = abfd->sections;
@@ -1261,6 +1280,38 @@ pe_print_idata (bfd * abfd, void * vfile)
}
/* Print HintName vector entries. */
+#ifdef COFF_WITH_pex64
+ for (j = 0; j < datasize; j += 8)
+ {
+ unsigned long member = bfd_get_32 (abfd, data + idx + j);
+ unsigned long member_high = bfd_get_32 (abfd, data + idx + j + 4);
+
+ if (!member && !member_high)
+ break;
+
+ if (member_high & 0x80000000)
+ fprintf (file, "\t%lx%08lx\t %4lx%08lx <none>",
+ member_high,member, member_high & 0x7fffffff, member);
+ else
+ {
+ int ordinal;
+ char *member_name;
+
+ ordinal = bfd_get_16 (abfd, data + member - adj);
+ member_name = (char *) data + member - adj + 2;
+ fprintf (file, "\t%04lx\t %4d %s",member, ordinal, member_name);
+ }
+
+ /* If the time stamp is not zero, the import address
+ table holds actual addresses. */
+ if (time_stamp != 0
+ && first_thunk != 0
+ && first_thunk != hint_addr)
+ fprintf (file, "\t%04lx",
+ (long) bfd_get_32 (abfd, ft_data + ft_idx + j));
+ fprintf (file, "\n");
+ }
+#else
for (j = 0; j < datasize; j += 4)
{
unsigned long member = bfd_get_32 (abfd, data + idx + j);
@@ -1293,7 +1344,7 @@ pe_print_idata (bfd * abfd, void * vfile)
fprintf (file, "\n");
}
-
+#endif
if (ft_allocated)
free (ft_data);
}
@@ -1336,9 +1387,9 @@ pe_print_edata (bfd * abfd, void * vfile)
bfd_vma addr;
- addr = extra->DataDirectory[0].VirtualAddress;
+ addr = extra->DataDirectory[PE_EXPORT_TABLE].VirtualAddress;
- if (addr == 0 && extra->DataDirectory[0].Size == 0)
+ if (addr == 0 && extra->DataDirectory[PE_EXPORT_TABLE].Size == 0)
{
/* Maybe the extra header isn't there. Look for the section. */
section = bfd_get_section_by_name (abfd, ".edata");
@@ -1367,7 +1418,7 @@ pe_print_edata (bfd * abfd, void * vfile)
}
dataoff = addr - section->vma;
- datasize = extra->DataDirectory[0].Size;
+ datasize = extra->DataDirectory[PE_EXPORT_TABLE].Size;
if (datasize > section->size - dataoff)
{
fprintf (file,
@@ -1533,10 +1584,10 @@ pe_print_edata (bfd * abfd, void * vfile)
static bfd_boolean
pe_print_pdata (bfd * abfd, void * vfile)
{
-#ifdef COFF_WITH_pep
-# define PDATA_ROW_SIZE (3*8)
+#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+# define PDATA_ROW_SIZE (3 * 8)
#else
-# define PDATA_ROW_SIZE (5*4)
+# define PDATA_ROW_SIZE (5 * 4)
#endif
FILE *file = (FILE *) vfile;
bfd_byte *data = 0;
@@ -1559,7 +1610,7 @@ pe_print_pdata (bfd * abfd, void * vfile)
fprintf (file,
_("\nThe Function Table (interpreted .pdata section contents)\n"));
-#ifdef COFF_WITH_pep
+#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
fprintf (file,
_(" vma:\t\t\tBegin Address End Address Unwind Info\n"));
#else
@@ -1613,7 +1664,7 @@ pe_print_pdata (bfd * abfd, void * vfile)
fprintf_vma (file, begin_addr); fputc (' ', file);
fprintf_vma (file, end_addr); fputc (' ', file);
fprintf_vma (file, eh_handler);
-#ifndef COFF_WITH_pep
+#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64)
fputc (' ', file);
fprintf_vma (file, eh_data); fputc (' ', file);
fprintf_vma (file, prolog_end_addr);
@@ -1766,6 +1817,7 @@ _bfd_XX_print_private_bfd_data_common (bfd * abfd, void * vfile)
pe_data_type *pe = pe_data (abfd);
struct internal_extra_pe_aouthdr *i = &pe->pe_opthdr;
const char *subsystem_name = NULL;
+ const char *name;
/* The MS dumpbin program reportedly ands with 0xff0f before
printing the characteristics field. Not sure why. No reason to
@@ -1791,6 +1843,52 @@ _bfd_XX_print_private_bfd_data_common (bfd * abfd, void * vfile)
time_t t = pe->coff.timestamp;
fprintf (file, "\nTime/Date\t\t%s", ctime (&t));
}
+
+#ifndef IMAGE_NT_OPTIONAL_HDR_MAGIC
+# define IMAGE_NT_OPTIONAL_HDR_MAGIC 0x10b
+#endif
+#ifndef IMAGE_NT_OPTIONAL_HDR64_MAGIC
+# define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
+#endif
+#ifndef IMAGE_NT_OPTIONAL_HDRROM_MAGIC
+# define IMAGE_NT_OPTIONAL_HDRROM_MAGIC 0x107
+#endif
+
+ switch (i->Magic)
+ {
+ case IMAGE_NT_OPTIONAL_HDR_MAGIC:
+ name = "PE32";
+ break;
+ case IMAGE_NT_OPTIONAL_HDR64_MAGIC:
+ name = "PE32+";
+ break;
+ case IMAGE_NT_OPTIONAL_HDRROM_MAGIC:
+ name = "ROM";
+ break;
+ default:
+ name = NULL;
+ break;
+ }
+ fprintf (file, "Magic\t\t\t%04x", i->Magic);
+ if (name)
+ fprintf (file, "\t(%s)",name);
+ fprintf (file, "\nMajorLinkerVersion\t%d\n", i->MajorLinkerVersion);
+ fprintf (file, "MinorLinkerVersion\t%d\n", i->MinorLinkerVersion);
+ fprintf (file, "SizeOfCode\t\t%08lx\n", i->SizeOfCode);
+ fprintf (file, "SizeOfInitializedData\t%08lx\n",
+ i->SizeOfInitializedData);
+ fprintf (file, "SizeOfUninitializedData\t%08lx\n",
+ i->SizeOfUninitializedData);
+ fprintf (file, "AddressOfEntryPoint\t");
+ fprintf_vma (file, i->AddressOfEntryPoint);
+ fprintf (file, "\nBaseOfCode\t\t");
+ fprintf_vma (file, i->BaseOfCode);
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
+ /* PE32+ does not have BaseOfData member! */
+ fprintf (file, "\nBaseOfData\t\t");
+ fprintf_vma (file, i->BaseOfData);
+#endif
+
fprintf (file, "\nImageBase\t\t");
fprintf_vma (file, i->ImageBase);
fprintf (file, "\nSectionAlignment\t");
@@ -1837,6 +1935,16 @@ _bfd_XX_print_private_bfd_data_common (bfd * abfd, void * vfile)
case IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER:
subsystem_name = "EFI runtime driver";
break;
+ // These are from revision 8.0 of the MS PE/COFF spec
+ case IMAGE_SUBSYSTEM_EFI_ROM:
+ subsystem_name = "EFI ROM";
+ break;
+ case IMAGE_SUBSYSTEM_XBOX:
+ subsystem_name = "XBOX";
+ break;
+ // Added default case for clarity - subsystem_name is NULL anyway.
+ default:
+ subsystem_name = NULL;
}
fprintf (file, "Subsystem\t\t%08x", i->Subsystem);
@@ -1889,8 +1997,8 @@ _bfd_XX_bfd_copy_private_bfd_data_common (bfd * ibfd, bfd * obfd)
if we don't remove this entry as well. */
if (! pe_data (obfd)->has_reloc_section)
{
- pe_data (obfd)->pe_opthdr.DataDirectory[5].VirtualAddress = 0;
- pe_data (obfd)->pe_opthdr.DataDirectory[5].Size = 0;
+ pe_data (obfd)->pe_opthdr.DataDirectory[PE_BASE_RELOCATION_TABLE].VirtualAddress = 0;
+ pe_data (obfd)->pe_opthdr.DataDirectory[PE_BASE_RELOCATION_TABLE].Size = 0;
}
return TRUE;
}
@@ -1949,6 +2057,7 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo)
{
struct coff_link_hash_entry *h1;
struct bfd_link_info *info = pfinfo->info;
+ bfd_boolean result = TRUE;
/* There are a few fields that need to be filled in now while we
have symbol table access.
@@ -1962,49 +2071,103 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo)
".idata$2", FALSE, FALSE, TRUE);
if (h1 != NULL)
{
- pe_data (abfd)->pe_opthdr.DataDirectory[1].VirtualAddress =
- (h1->root.u.def.value
- + h1->root.u.def.section->output_section->vma
- + h1->root.u.def.section->output_offset);
+ /* PR ld/2729: We cannot rely upon all the output sections having been
+ created properly, so check before referencing them. Issue a warning
+ message for any sections tht could not be found. */
+ if (h1->root.u.def.section != NULL
+ && h1->root.u.def.section->output_section != NULL)
+ pe_data (abfd)->pe_opthdr.DataDirectory[PE_IMPORT_TABLE].VirtualAddress =
+ (h1->root.u.def.value
+ + h1->root.u.def.section->output_section->vma
+ + h1->root.u.def.section->output_offset);
+ else
+ {
+ _bfd_error_handler
+ (_("%B: unable to fill in DataDictionary[1] because .idata$2 is missing"),
+ abfd);
+ result = FALSE;
+ }
+
h1 = coff_link_hash_lookup (coff_hash_table (info),
".idata$4", FALSE, FALSE, TRUE);
- pe_data (abfd)->pe_opthdr.DataDirectory[1].Size =
- ((h1->root.u.def.value
- + h1->root.u.def.section->output_section->vma
- + h1->root.u.def.section->output_offset)
- - pe_data (abfd)->pe_opthdr.DataDirectory[1].VirtualAddress);
+ if (h1 != NULL
+ && h1->root.u.def.section != NULL
+ && h1->root.u.def.section->output_section != NULL)
+ pe_data (abfd)->pe_opthdr.DataDirectory[PE_IMPORT_TABLE].Size =
+ ((h1->root.u.def.value
+ + h1->root.u.def.section->output_section->vma
+ + h1->root.u.def.section->output_offset)
+ - pe_data (abfd)->pe_opthdr.DataDirectory[PE_IMPORT_TABLE].VirtualAddress);
+ else
+ {
+ _bfd_error_handler
+ (_("%B: unable to fill in DataDictionary[1] because .idata$4 is missing"),
+ abfd);
+ result = FALSE;
+ }
/* The import address table. This is the size/address of
.idata$5. */
h1 = coff_link_hash_lookup (coff_hash_table (info),
".idata$5", FALSE, FALSE, TRUE);
- pe_data (abfd)->pe_opthdr.DataDirectory[12].VirtualAddress =
- (h1->root.u.def.value
- + h1->root.u.def.section->output_section->vma
- + h1->root.u.def.section->output_offset);
+ if (h1 != NULL
+ && h1->root.u.def.section != NULL
+ && h1->root.u.def.section->output_section != NULL)
+ pe_data (abfd)->pe_opthdr.DataDirectory[PE_IMPORT_ADDRESS_TABLE].VirtualAddress =
+ (h1->root.u.def.value
+ + h1->root.u.def.section->output_section->vma
+ + h1->root.u.def.section->output_offset);
+ else
+ {
+ _bfd_error_handler
+ (_("%B: unable to fill in DataDictionary[12] because .idata$5 is missing"),
+ abfd);
+ result = FALSE;
+ }
+
h1 = coff_link_hash_lookup (coff_hash_table (info),
".idata$6", FALSE, FALSE, TRUE);
- pe_data (abfd)->pe_opthdr.DataDirectory[12].Size =
- ((h1->root.u.def.value
- + h1->root.u.def.section->output_section->vma
- + h1->root.u.def.section->output_offset)
- - pe_data (abfd)->pe_opthdr.DataDirectory[12].VirtualAddress);
+ if (h1 != NULL
+ && h1->root.u.def.section != NULL
+ && h1->root.u.def.section->output_section != NULL)
+ pe_data (abfd)->pe_opthdr.DataDirectory[PE_IMPORT_ADDRESS_TABLE].Size =
+ ((h1->root.u.def.value
+ + h1->root.u.def.section->output_section->vma
+ + h1->root.u.def.section->output_offset)
+ - pe_data (abfd)->pe_opthdr.DataDirectory[PE_IMPORT_ADDRESS_TABLE].VirtualAddress);
+ else
+ {
+ _bfd_error_handler
+ (_("%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"),
+ abfd);
+ result = FALSE;
+ }
}
h1 = coff_link_hash_lookup (coff_hash_table (info),
"__tls_used", FALSE, FALSE, TRUE);
if (h1 != NULL)
{
- pe_data (abfd)->pe_opthdr.DataDirectory[9].VirtualAddress =
- (h1->root.u.def.value
- + h1->root.u.def.section->output_section->vma
- + h1->root.u.def.section->output_offset
- - pe_data (abfd)->pe_opthdr.ImageBase);
- pe_data (abfd)->pe_opthdr.DataDirectory[9].Size = 0x18;
+ if (h1->root.u.def.section != NULL
+ && h1->root.u.def.section->output_section != NULL)
+ pe_data (abfd)->pe_opthdr.DataDirectory[PE_TLS_TABLE].VirtualAddress =
+ (h1->root.u.def.value
+ + h1->root.u.def.section->output_section->vma
+ + h1->root.u.def.section->output_offset
+ - pe_data (abfd)->pe_opthdr.ImageBase);
+ else
+ {
+ _bfd_error_handler
+ (_("%B: unable to fill in DataDictionary[9] because __tls_used is missing"),
+ abfd);
+ result = FALSE;
+ }
+
+ pe_data (abfd)->pe_opthdr.DataDirectory[PE_TLS_TABLE].Size = 0x18;
}
/* If we couldn't find idata$2, we either have an excessively
trivial program or are in DEEP trouble; we have to assume trivial
program.... */
- return TRUE;
+ return result;
}
diff --git a/bfd/pef.c b/bfd/pef.c
index 2aca6a445b76..fc345e955bcd 100644
--- a/bfd/pef.c
+++ b/bfd/pef.c
@@ -1,5 +1,5 @@
/* PEF support for BFD.
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,11 +18,11 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+#include "sysdep.h"
#include "safe-ctype.h"
#include "pef.h"
#include "pef-traceback.h"
#include "bfd.h"
-#include "sysdep.h"
#include "libbfd.h"
#include "libiberty.h"
@@ -41,9 +41,6 @@
#define bfd_pef_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define bfd_pef_read_minisymbols _bfd_generic_read_minisymbols
#define bfd_pef_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
-#define bfd_pef_get_reloc_upper_bound _bfd_norelocs_get_reloc_upper_bound
-#define bfd_pef_canonicalize_reloc _bfd_norelocs_canonicalize_reloc
-#define bfd_pef_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
#define bfd_pef_set_arch_mach _bfd_generic_set_arch_mach
#define bfd_pef_get_section_contents _bfd_generic_get_section_contents
#define bfd_pef_set_section_contents _bfd_generic_set_section_contents
@@ -209,7 +206,7 @@ bfd_pef_print_symbol (bfd *abfd,
default:
bfd_print_symbol_vandf (abfd, (void *) file, symbol);
fprintf (file, " %-5s %s", symbol->section->name, symbol->name);
- if (strncmp (symbol->name, "__traceback_", strlen ("__traceback_")) == 0)
+ if (CONST_STRNEQ (symbol->name, "__traceback_"))
{
unsigned char *buf = alloca (symbol->udata.i);
size_t offset = symbol->value + 4;
@@ -987,11 +984,7 @@ bfd_pef_canonicalize_symtab (bfd *abfd, asymbol **alocation)
return ret;
}
-static asymbol *
-bfd_pef_make_empty_symbol (bfd *abfd)
-{
- return bfd_alloc (abfd, sizeof (asymbol));
-}
+#define bfd_pef_make_empty_symbol _bfd_generic_make_empty_symbol
static void
bfd_pef_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
@@ -1002,7 +995,8 @@ bfd_pef_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
}
static int
-bfd_pef_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, bfd_boolean exec ATTRIBUTE_UNUSED)
+bfd_pef_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return 0;
}
@@ -1051,7 +1045,7 @@ const bfd_target pef_vec =
BFD_JUMP_TABLE_CORE (_bfd_nocore),
BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
BFD_JUMP_TABLE_SYMBOLS (bfd_pef),
- BFD_JUMP_TABLE_RELOCS (bfd_pef),
+ BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
BFD_JUMP_TABLE_WRITE (bfd_pef),
BFD_JUMP_TABLE_LINK (bfd_pef),
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
diff --git a/bfd/pei-arm-wince.c b/bfd/pei-arm-wince.c
new file mode 100644
index 000000000000..7d5a3be3515b
--- /dev/null
+++ b/bfd/pei-arm-wince.c
@@ -0,0 +1,30 @@
+/* BFD back-end for ARM WINCE PE IMAGE COFF files.
+ Copyright 2006 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define TARGET_UNDERSCORE 0
+#define USER_LABEL_PREFIX ""
+
+#define TARGET_LITTLE_SYM arm_wince_pei_little_vec
+#define TARGET_LITTLE_NAME "pei-arm-wince-little"
+#define TARGET_BIG_SYM arm_wince_pei_big_vec
+#define TARGET_BIG_NAME "pei-arm-wince-big"
+
+#define LOCAL_LABEL_PREFIX "."
+
+#include "pei-arm.c"
diff --git a/bfd/pei-arm.c b/bfd/pei-arm.c
index 38d3367cef6b..299eda20ad8d 100644
--- a/bfd/pei-arm.c
+++ b/bfd/pei-arm.c
@@ -1,5 +1,5 @@
/* BFD back-end for arm PE IMAGE COFF files.
- Copyright 1995, 1996, 1999, 2002 Free Software Foundation, Inc.
+ Copyright 1995, 1996, 1999, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#ifndef TARGET_LITTLE_SYM
#define TARGET_LITTLE_SYM armpei_little_vec
@@ -32,4 +32,22 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define PCRELOFFSET TRUE
#define COFF_LONG_SECTION_NAMES
+#define COFF_SECTION_ALIGNMENT_ENTRIES \
+{ COFF_SECTION_NAME_EXACT_MATCH (".bss"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".rdata"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
+
#include "coff-arm.c"
diff --git a/bfd/pei-i386.c b/bfd/pei-i386.c
index 38e36f3689d3..9892f1c09763 100644
--- a/bfd/pei-i386.c
+++ b/bfd/pei-i386.c
@@ -1,5 +1,6 @@
/* BFD back-end for Intel 386 PE IMAGE COFF files.
- Copyright 1995, 1996, 1999, 2002, 2004 Free Software Foundation, Inc.
+ Copyright 1995, 1996, 1999, 2002, 2004, 2007
+ Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +18,8 @@
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 "bfd.h"
#define TARGET_SYM i386pei_vec
#define TARGET_NAME "pei-i386"
@@ -35,10 +36,16 @@
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".data$"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".rdata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".rdata$"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".text$"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
diff --git a/bfd/pei-mcore.c b/bfd/pei-mcore.c
index e71bc11cf6bb..a78f0633910c 100644
--- a/bfd/pei-mcore.c
+++ b/bfd/pei-mcore.c
@@ -1,5 +1,5 @@
/* BFD back-end for MCore PECOFF files.
- Copyright 1999, 2002 Free Software Foundation, Inc.
+ Copyright 1999, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#ifndef TARGET_BIG_SYM
#define TARGET_BIG_SYM mcore_pei_big_vec
diff --git a/bfd/pei-mips.c b/bfd/pei-mips.c
index 0c9b962f2b6d..4405c0af217a 100644
--- a/bfd/pei-mips.c
+++ b/bfd/pei-mips.c
@@ -1,5 +1,5 @@
/* BFD back-end for MIPS PE IMAGE COFF files.
- Copyright 1995, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1995, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#define TARGET_SYM mipslpei_vec
#define TARGET_NAME "pei-mips"
diff --git a/bfd/pei-ppc.c b/bfd/pei-ppc.c
index 58d65e285d0e..0f572f0c0890 100644
--- a/bfd/pei-ppc.c
+++ b/bfd/pei-ppc.c
@@ -1,5 +1,5 @@
/* BFD back-end for PowerPC PE IMAGE COFF files.
- Copyright 1995, 1996, 1999 Free Software Foundation, Inc.
+ Copyright 1995, 1996, 1999, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,8 +18,8 @@ along with this program; 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 "bfd.h"
/* setting up for a PE environment stolen directly from the i386 structure */
#define E_FILNMLEN 18 /* # characters in a file name */
diff --git a/bfd/pei-sh.c b/bfd/pei-sh.c
index 61a3ed06eb67..acbea9ae36d5 100644
--- a/bfd/pei-sh.c
+++ b/bfd/pei-sh.c
@@ -1,5 +1,5 @@
/* BFD back-end for SH PE IMAGE COFF files.
- Copyright 1995, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1995, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#define TARGET_SHL_SYM shlpei_vec
#define TARGET_SHL_NAME "pei-shl"
diff --git a/bfd/pei-x86_64.c b/bfd/pei-x86_64.c
new file mode 100644
index 000000000000..37d9c7f2e54e
--- /dev/null
+++ b/bfd/pei-x86_64.c
@@ -0,0 +1,54 @@
+/* BFD back-end for Intel 386 PE IMAGE COFF files.
+ Copyright 2006, 2007 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Written by Kai Tietz, OneVision Software GmbH&CoKg. */
+
+#include "sysdep.h"
+#include "bfd.h"
+
+#define TARGET_SYM x86_64pei_vec
+#define TARGET_NAME "pei-x86-64"
+#define COFF_IMAGE_WITH_PE
+#define COFF_WITH_PE
+#define COFF_WITH_pex64
+#define PCRELOFFSET TRUE
+#define TARGET_UNDERSCORE '_'
+#define COFF_LONG_SECTION_NAMES
+#define COFF_SUPPORT_GNU_LINKONCE
+#define COFF_LONG_FILENAMES
+
+#define COFF_SECTION_ALIGNMENT_ENTRIES \
+{ COFF_SECTION_NAME_EXACT_MATCH (".bss"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".rdata"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
+
+#include "coff-x86_64.c"
diff --git a/bfd/peicode.h b/bfd/peicode.h
index 2061f415af61..0f4858f4bfbc 100644
--- a/bfd/peicode.h
+++ b/bfd/peicode.h
@@ -1,6 +1,6 @@
/* Support for the generic parts of PE/PEI, for BFD.
Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005 Free Software Foundation, Inc.
+ 2005, 2006 Free Software Foundation, Inc.
Written by Cygnus Solutions.
This file is part of BFD, the Binary File Descriptor library.
@@ -182,6 +182,10 @@ coff_swap_filehdr_in (bfd * abfd, void * src, void * dst)
#ifdef COFF_IMAGE_WITH_PE
# define coff_swap_filehdr_out _bfd_XXi_only_swap_filehdr_out
+#elif defined COFF_WITH_pex64
+# define coff_swap_filehdr_out _bfd_pex64_only_swap_filehdr_out
+#elif defined COFF_WITH_pep
+# define coff_swap_filehdr_out _bfd_pep_only_swap_filehdr_out
#else
# define coff_swap_filehdr_out _bfd_pe_only_swap_filehdr_out
#endif
@@ -217,7 +221,10 @@ coff_swap_scnhdr_in (bfd * abfd, void * ext, void * in)
if (scnhdr_int->s_vaddr != 0)
{
scnhdr_int->s_vaddr += pe_data (abfd)->pe_opthdr.ImageBase;
+ /* Do not cut upper 32-bits for 64-bit vma. */
+#ifndef COFF_WITH_pex64
scnhdr_int->s_vaddr &= 0xffffffff;
+#endif
}
#ifndef COFF_NO_HACK_SCNHDR_SIZE
@@ -405,8 +412,16 @@ pe_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
+ NUM_ILF_SECTIONS * 9 \
+ STRING_SIZE_SIZE)
#define SIZEOF_IDATA2 (5 * 4)
+
+/* For PEx64 idata4 & 5 have thumb size of 8 bytes. */
+#ifdef COFF_WITH_pex64
+#define SIZEOF_IDATA4 (2 * 4)
+#define SIZEOF_IDATA5 (2 * 4)
+#else
#define SIZEOF_IDATA4 (1 * 4)
#define SIZEOF_IDATA5 (1 * 4)
+#endif
+
#define SIZEOF_IDATA6 (2 + strlen (symbol_name) + 1 + 1)
#define SIZEOF_IDATA7 (strlen (source_dll) + 1 + 1)
#define SIZEOF_ILF_SECTIONS (NUM_ILF_SECTIONS * sizeof (struct coff_section_tdata))
@@ -656,9 +671,20 @@ static jump_table jtab[] =
},
#endif
+#ifdef AMD64MAGIC
+ { AMD64MAGIC,
+ { 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90 },
+ 8, 2
+ },
+#endif
+
#ifdef MC68MAGIC
- { MC68MAGIC, { /* XXX fill me in */ }, 0, 0 },
+ { MC68MAGIC,
+ { /* XXX fill me in */ },
+ 0, 0
+ },
#endif
+
#ifdef MIPS_ARCH_MAGIC_WINCE
{ MIPS_ARCH_MAGIC_WINCE,
{ 0x00, 0x00, 0x08, 0x3c, 0x00, 0x00, 0x08, 0x8d,
@@ -830,8 +856,15 @@ pe_ILF_build_a_bfd (bfd * abfd,
/* XXX - treat as IMPORT_NAME ??? */
abort ();
+#ifdef COFF_WITH_pex64
+ ((unsigned int *) id4->contents)[0] = ordinal;
+ ((unsigned int *) id4->contents)[1] = 0x80000000;
+ ((unsigned int *) id5->contents)[0] = ordinal;
+ ((unsigned int *) id5->contents)[1] = 0x80000000;
+#else
* (unsigned int *) id4->contents = ordinal | 0x80000000;
* (unsigned int *) id5->contents = ordinal | 0x80000000;
+#endif
}
else
{
@@ -1071,6 +1104,12 @@ pe_ILF_object_p (bfd * abfd)
#endif
break;
+ case IMAGE_FILE_MACHINE_AMD64:
+#ifdef AMD64MAGIC
+ magic = AMD64MAGIC;
+#endif
+ break;
+
case IMAGE_FILE_MACHINE_M68K:
#ifdef MC68AGIC
magic = MC68MAGIC;
@@ -1195,6 +1234,25 @@ pe_ILF_object_p (bfd * abfd)
return abfd->xvec;
}
+enum arch_type
+{
+ arch_type_unknown,
+ arch_type_i386,
+ arch_type_x86_64
+};
+
+static enum arch_type
+pe_arch (const char *arch)
+{
+ if (strcmp (arch, "i386") == 0 || strcmp (arch, "ia32") == 0)
+ return arch_type_i386;
+
+ if (strcmp (arch, "x86_64") == 0 || strcmp (arch, "x86-64") == 0)
+ return arch_type_x86_64;
+
+ return arch_type_unknown;
+}
+
static const bfd_target *
pe_bfd_object_p (bfd * abfd)
{
@@ -1202,6 +1260,7 @@ pe_bfd_object_p (bfd * abfd)
struct external_PEI_DOS_hdr dos_hdr;
struct external_PEI_IMAGE_hdr image_hdr;
file_ptr offset;
+ const bfd_target *target;
/* Detect if this a Microsoft Import Library Format element. */
if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
@@ -1266,7 +1325,60 @@ pe_bfd_object_p (bfd * abfd)
return NULL;
}
- return coff_object_p (abfd);
+ target = coff_object_p (abfd);
+ if (target)
+ {
+ pe_data_type *pe = pe_data (abfd);
+ struct internal_extra_pe_aouthdr *i = &pe->pe_opthdr;
+ bfd_boolean efi = i->Subsystem == IMAGE_SUBSYSTEM_EFI_APPLICATION;
+ enum arch_type arch;
+ const bfd_target * const *target_ptr;
+
+ /* Get the machine. */
+ if (bfd_target_efi_p (abfd->xvec))
+ arch = pe_arch (bfd_target_efi_arch (abfd->xvec));
+ else
+ arch = pe_arch (bfd_target_pei_arch (abfd->xvec));
+
+ for (target_ptr = bfd_target_vector; *target_ptr != NULL;
+ target_ptr++)
+ {
+ if (*target_ptr == target
+ || (*target_ptr)->flavour != bfd_target_coff_flavour)
+ continue;
+
+ if (bfd_target_efi_p (*target_ptr))
+ {
+ /* Skip incompatible arch. */
+ if (pe_arch (bfd_target_efi_arch (*target_ptr)) != arch)
+ continue;
+
+ if (efi)
+ {
+ /* TARGET_PTR is an EFI backend. Don't match
+ TARGET with a EFI file. */
+ bfd_set_error (bfd_error_wrong_format);
+ return NULL;
+ }
+ }
+ else if (bfd_target_pei_p (*target_ptr))
+ {
+ /* Skip incompatible arch. */
+ if (pe_arch (bfd_target_pei_arch (*target_ptr)) != arch)
+ continue;
+
+ if (!efi)
+ {
+ /* TARGET_PTR is a PE backend. Don't match
+ TARGET with a PE file. */
+ bfd_set_error (bfd_error_wrong_format);
+ return NULL;
+ }
+ }
+ }
+ }
+
+ return target;
}
#define coff_object_p pe_bfd_object_p
diff --git a/bfd/po/BLD-POTFILES.in b/bfd/po/BLD-POTFILES.in
index 2dbe723a50ef..07ad4b3602f9 100644
--- a/bfd/po/BLD-POTFILES.in
+++ b/bfd/po/BLD-POTFILES.in
@@ -5,4 +5,5 @@ elf64-ia64.c
elf64-target.h
peigen.c
pepigen.c
+pex64igen.c
targmatch.h
diff --git a/bfd/po/Make-in b/bfd/po/Make-in
index f11ccb41cef0..1a619929557a 100644
--- a/bfd/po/Make-in
+++ b/bfd/po/Make-in
@@ -16,6 +16,7 @@ SHELL = /bin/sh
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
+top_builddir = @top_builddir@
prefix = @prefix@
exec_prefix = @exec_prefix@
@@ -78,7 +79,7 @@ INSTOBJEXT = @INSTOBJEXT@
$(MSGFMT) -o $@ $<
.po.gmo:
- file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+ file=`echo $* | sed 's,.*/,,'`.gmo \
&& rm -f $$file && $(GMSGFMT) -o $$file $<
.po.cat:
diff --git a/bfd/po/SRC-POTFILES.in b/bfd/po/SRC-POTFILES.in
index 8bcf979a5bfb..5a3d361747ce 100644
--- a/bfd/po/SRC-POTFILES.in
+++ b/bfd/po/SRC-POTFILES.in
@@ -57,6 +57,7 @@ coff-tic80.c
coff-u68k.c
coff-w65.c
coff-we32k.c
+coff-x86_64.c
coff-z80.c
coff-z8k.c
corefile.c
@@ -65,6 +66,7 @@ cpu-arc.c
cpu-arm.c
cpu-avr.c
cpu-bfin.c
+cpu-cr16.c
cpu-cr16c.c
cpu-cris.c
cpu-crx.c
@@ -93,6 +95,7 @@ cpu-m68k.c
cpu-m88k.c
cpu-maxq.c
cpu-mcore.c
+cpu-mep.c
cpu-mips.c
cpu-mmix.c
cpu-msp430.c
@@ -105,8 +108,10 @@ cpu-pj.c
cpu-powerpc.c
cpu-rs6000.c
cpu-s390.c
+cpu-score.c
cpu-sh.c
cpu-sparc.c
+cpu-spu.c
cpu-tic30.c
cpu-tic4x.c
cpu-tic54x.c
@@ -128,12 +133,14 @@ ecofflink.c
ecoffswap.h
efi-app-ia32.c
efi-app-ia64.c
+efi-app-x86_64.c
elf32-am33lin.c
elf32-arc.c
elf32-arm.c
elf32-avr.c
elf32-bfin.c
elf32.c
+elf32-cr16.c
elf32-cr16c.c
elf32-cris.c
elf32-crx.c
@@ -160,6 +167,7 @@ elf32-m68hc1x.c
elf32-m68k.c
elf32-m88k.c
elf32-mcore.c
+elf32-mep.c
elf32-mips.c
elf32-msp430.c
elf32-mt.c
@@ -168,11 +176,13 @@ elf32-or32.c
elf32-pj.c
elf32-ppc.c
elf32-s390.c
+elf32-score.c
elf32-sh64.c
elf32-sh64-com.c
elf32-sh.c
elf32-sh-symbian.c
elf32-sparc.c
+elf32-spu.c
elf32-v850.c
elf32-vax.c
elf32-xc16x.c
@@ -190,6 +200,7 @@ elf64-s390.c
elf64-sh64.c
elf64-sparc.c
elf64-x86-64.c
+elf-attrs.c
elf-bfd.h
elf.c
elfcode.h
@@ -271,21 +282,25 @@ osf-core.c
pc532-mach.c
pdp11.c
pe-arm.c
+pe-arm-wince.c
pef.c
pef.h
pef-traceback.h
pe-i386.c
pei-arm.c
+pei-arm-wince.c
peicode.h
pei-i386.c
pei-mcore.c
pei-mips.c
pei-ppc.c
pei-sh.c
+pei-x86_64.c
pe-mcore.c
pe-mips.c
pe-ppc.c
pe-sh.c
+pe-x86_64.c
ppcboot.c
reloc16.c
reloc.c
diff --git a/bfd/po/bfd.pot b/bfd/po/bfd.pot
index 37c57290aeeb..a01ee37160a8 100644
--- a/bfd/po/bfd.pot
+++ b/bfd/po/bfd.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-10-25 22:24+0930\n"
+"POT-Creation-Date: 2007-07-02 16:16+0930\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"
@@ -33,153 +33,162 @@ msgstr ""
msgid "%B: Bad relocation record imported: %d"
msgstr ""
-#: aoutx.h:1244 aoutx.h:1578
+#: aoutx.h:1267 aoutx.h:1601
#, c-format
msgid "%s: can not represent section `%s' in a.out object file format"
msgstr ""
-#: aoutx.h:1544
+#: aoutx.h:1567
#, c-format
msgid ""
"%s: can not represent section for symbol `%s' in a.out object file format"
msgstr ""
-#: aoutx.h:1546
+#: aoutx.h:1569
msgid "*unknown*"
msgstr ""
-#: aoutx.h:5281
+#: aoutx.h:5311
#, c-format
msgid "%s: relocatable link from %s to %s not supported"
msgstr ""
-#: archive.c:1760
+#: archive.c:1764
msgid "Warning: writing archive was slow: rewriting timestamp\n"
msgstr ""
-#: archive.c:2019
+#: archive.c:2027
msgid "Reading archive file mod timestamp"
msgstr ""
-#: archive.c:2043
+#: archive.c:2051
msgid "Writing updated armap timestamp"
msgstr ""
-#: bfd.c:279
+#: bfd.c:288
msgid "No error"
msgstr ""
-#: bfd.c:280
+#: bfd.c:289
msgid "System call error"
msgstr ""
-#: bfd.c:281
+#: bfd.c:290
msgid "Invalid bfd target"
msgstr ""
-#: bfd.c:282
+#: bfd.c:291
msgid "File in wrong format"
msgstr ""
-#: bfd.c:283
+#: bfd.c:292
msgid "Archive object file in wrong format"
msgstr ""
-#: bfd.c:284
+#: bfd.c:293
msgid "Invalid operation"
msgstr ""
-#: bfd.c:285
+#: bfd.c:294
msgid "Memory exhausted"
msgstr ""
-#: bfd.c:286
+#: bfd.c:295
msgid "No symbols"
msgstr ""
-#: bfd.c:287
+#: bfd.c:296
msgid "Archive has no index; run ranlib to add one"
msgstr ""
-#: bfd.c:288
+#: bfd.c:297
msgid "No more archived files"
msgstr ""
-#: bfd.c:289
+#: bfd.c:298
msgid "Malformed archive"
msgstr ""
-#: bfd.c:290
+#: bfd.c:299
msgid "File format not recognized"
msgstr ""
-#: bfd.c:291
+#: bfd.c:300
msgid "File format is ambiguous"
msgstr ""
-#: bfd.c:292
+#: bfd.c:301
msgid "Section has no contents"
msgstr ""
-#: bfd.c:293
+#: bfd.c:302
msgid "Nonrepresentable section on output"
msgstr ""
-#: bfd.c:294
+#: bfd.c:303
msgid "Symbol needs debug section which does not exist"
msgstr ""
-#: bfd.c:295
+#: bfd.c:304
msgid "Bad value"
msgstr ""
-#: bfd.c:296
+#: bfd.c:305
msgid "File truncated"
msgstr ""
-#: bfd.c:297
+#: bfd.c:306
msgid "File too big"
msgstr ""
-#: bfd.c:298
+#: bfd.c:307
+#, c-format
+msgid "Error reading %s: %s"
+msgstr ""
+
+#: bfd.c:308
msgid "#<Invalid error code>"
msgstr ""
-#: bfd.c:771
+#: bfd.c:829
#, c-format
msgid "BFD %s assertion fail %s:%d"
msgstr ""
-#: bfd.c:787
+#: bfd.c:841
#, c-format
msgid "BFD %s internal error, aborting at %s line %d in %s\n"
msgstr ""
-#: bfd.c:791
+#: bfd.c:845
#, c-format
msgid "BFD %s internal error, aborting at %s line %d\n"
msgstr ""
-#: bfd.c:793
+#: bfd.c:847
msgid "Please report this bug.\n"
msgstr ""
-#: bfdwin.c:202
+#: bfdwin.c:207
#, c-format
msgid "not mapping: data=%lx mapped=%d\n"
msgstr ""
-#: bfdwin.c:205
+#: bfdwin.c:210
#, c-format
msgid "not mapping: env var not set\n"
msgstr ""
-#: binary.c:285
+#: binary.c:283
#, c-format
msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx."
msgstr ""
-#: coff64-rs6000.c:2109 coff-rs6000.c:3610
+#: cache.c:237
+msgid "reopening %B: %s\n"
+msgstr ""
+
+#: coff64-rs6000.c:2125 coff-rs6000.c:3623
msgid "%B: symbol `%s' has unrecognized smclas %d"
msgstr ""
@@ -193,45 +202,45 @@ msgstr ""
msgid "%B: unknown/unsupported relocation type %d"
msgstr ""
-#: coff-alpha.c:898 coff-alpha.c:935 coff-alpha.c:2007 coff-mips.c:985
+#: coff-alpha.c:898 coff-alpha.c:935 coff-alpha.c:2023 coff-mips.c:1001
msgid "GP relative relocation used when GP not defined"
msgstr ""
-#: coff-alpha.c:1484
+#: coff-alpha.c:1500
msgid "using multiple gp values"
msgstr ""
-#: coff-alpha.c:1543
+#: coff-alpha.c:1559
msgid "%B: unsupported relocation: ALPHA_R_GPRELHIGH"
msgstr ""
-#: coff-alpha.c:1550
+#: coff-alpha.c:1566
msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW"
msgstr ""
-#: coff-alpha.c:1557 elf32-m32r.c:2471 elf64-alpha.c:3912 elf64-alpha.c:4038
-#: elf32-ia64.c:4108 elf64-ia64.c:4108
+#: coff-alpha.c:1573 elf32-m32r.c:2486 elf64-alpha.c:3951 elf64-alpha.c:4104
+#: elf32-ia64.c:4674 elf64-ia64.c:4674
msgid "%B: unknown relocation type %d"
msgstr ""
-#: coff-arm.c:990 elf32-arm.c:1926
+#: coff-arm.c:1035
#, c-format
msgid "%B: unable to find THUMB glue '%s' for `%s'"
msgstr ""
-#: coff-arm.c:1019 elf32-arm.c:1960
+#: coff-arm.c:1064
#, c-format
msgid "%B: unable to find ARM glue '%s' for `%s'"
msgstr ""
-#: coff-arm.c:1319 elf32-arm.c:2683
+#: coff-arm.c:1366 elf32-arm.c:4156
#, c-format
msgid ""
"%B(%s): warning: interworking not enabled.\n"
" first occurrence: %B: arm call to thumb"
msgstr ""
-#: coff-arm.c:1409
+#: coff-arm.c:1456
#, c-format
msgid ""
"%B(%s): warning: interworking not enabled.\n"
@@ -239,105 +248,105 @@ msgid ""
" consider relinking with --support-old-code enabled"
msgstr ""
-#: coff-arm.c:1702 cofflink.c:3015 coff-tic80.c:695
+#: coff-arm.c:1749 cofflink.c:3014 coff-tic80.c:695
msgid "%B: bad reloc address 0x%lx in section `%A'"
msgstr ""
-#: coff-arm.c:2028
+#: coff-arm.c:2074
msgid "%B: illegal symbol index in reloc: %d"
msgstr ""
-#: coff-arm.c:2158
+#: coff-arm.c:2205
#, c-format
msgid "ERROR: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d"
msgstr ""
-#: coff-arm.c:2174 elf32-arm.c:5093
+#: coff-arm.c:2221 elf32-arm.c:7103
#, c-format
msgid ""
"ERROR: %B passes floats in float registers, whereas %B passes them in "
"integer registers"
msgstr ""
-#: coff-arm.c:2177 elf32-arm.c:5097
+#: coff-arm.c:2224 elf32-arm.c:7107
#, c-format
msgid ""
"ERROR: %B passes floats in integer registers, whereas %B passes them in "
"float registers"
msgstr ""
-#: coff-arm.c:2191
+#: coff-arm.c:2238
#, c-format
msgid ""
"ERROR: %B is compiled as position independent code, whereas target %B is "
"absolute position"
msgstr ""
-#: coff-arm.c:2194
+#: coff-arm.c:2241
#, c-format
msgid ""
"ERROR: %B is compiled as absolute position code, whereas target %B is "
"position independent"
msgstr ""
-#: coff-arm.c:2222 elf32-arm.c:5162
+#: coff-arm.c:2269 elf32-arm.c:7172
#, c-format
msgid "Warning: %B supports interworking, whereas %B does not"
msgstr ""
-#: coff-arm.c:2225 elf32-arm.c:5168
+#: coff-arm.c:2272 elf32-arm.c:7178
#, c-format
msgid "Warning: %B does not support interworking, whereas %B does"
msgstr ""
-#: coff-arm.c:2249
+#: coff-arm.c:2296
#, c-format
msgid "private flags = %x:"
msgstr ""
-#: coff-arm.c:2257 elf32-arm.c:5219
+#: coff-arm.c:2304 elf32-arm.c:7229
#, c-format
msgid " [floats passed in float registers]"
msgstr ""
-#: coff-arm.c:2259
+#: coff-arm.c:2306
#, c-format
msgid " [floats passed in integer registers]"
msgstr ""
-#: coff-arm.c:2262 elf32-arm.c:5222
+#: coff-arm.c:2309 elf32-arm.c:7232
#, c-format
msgid " [position independent]"
msgstr ""
-#: coff-arm.c:2264
+#: coff-arm.c:2311
#, c-format
msgid " [absolute position]"
msgstr ""
-#: coff-arm.c:2268
+#: coff-arm.c:2315
#, c-format
msgid " [interworking flag not initialised]"
msgstr ""
-#: coff-arm.c:2270
+#: coff-arm.c:2317
#, c-format
msgid " [interworking supported]"
msgstr ""
-#: coff-arm.c:2272
+#: coff-arm.c:2319
#, c-format
msgid " [interworking not supported]"
msgstr ""
-#: coff-arm.c:2318 elf32-arm.c:4571
+#: coff-arm.c:2365 elf32-arm.c:6626
#, c-format
msgid ""
"Warning: Not setting interworking flag of %B since it has already been "
"specified as non-interworking"
msgstr ""
-#: coff-arm.c:2322 elf32-arm.c:4575
+#: coff-arm.c:2369 elf32-arm.c:6630
#, c-format
msgid "Warning: Clearing the interworking flag of %B due to outside request"
msgstr ""
@@ -358,36 +367,40 @@ msgstr ""
msgid "%B (%s): Section flag %s (0x%x) ignored"
msgstr ""
-#: coffcode.h:2204
+#: coffcode.h:2231
#, c-format
msgid "Unrecognized TI COFF target id '0x%x'"
msgstr ""
-#: coffcode.h:4211
+#: coffcode.h:2546
+msgid "%B: reloc against a non-existant symbol index: %ld"
+msgstr ""
+
+#: coffcode.h:4269
msgid "%B: warning: line number table read failed"
msgstr ""
-#: coffcode.h:4243
+#: coffcode.h:4301
msgid "%B: warning: illegal symbol index %ld in line numbers"
msgstr ""
-#: coffcode.h:4257
+#: coffcode.h:4315
msgid "%B: warning: duplicate line number information for `%s'"
msgstr ""
-#: coffcode.h:4597
+#: coffcode.h:4655
msgid "%B: Unrecognized storage class %d for %s symbol `%s'"
msgstr ""
-#: coffcode.h:4723
+#: coffcode.h:4781
msgid "warning: %B: local symbol `%s' has no section"
msgstr ""
-#: coffcode.h:4827 coff-i860.c:586 coff-tic54x.c:376
+#: coffcode.h:4886 coff-i860.c:600 coff-tic54x.c:393
msgid "%B: warning: illegal symbol index %ld in relocs"
msgstr ""
-#: coffcode.h:4865
+#: coffcode.h:4924
msgid "%B: illegal relocation type %d at address 0x%lx"
msgstr ""
@@ -395,7 +408,7 @@ msgstr ""
msgid "%B: bad string table size %lu"
msgstr ""
-#: coff-h8300.c:1126
+#: coff-h8300.c:1121
#, c-format
msgid "cannot handle R_MEM_INDIRECT reloc when using %s output"
msgstr ""
@@ -405,53 +418,54 @@ msgstr ""
msgid "Relocation `%s' not yet implemented\n"
msgstr ""
-#: coff-i960.c:137 coff-i960.c:486
+#: coff-i960.c:137 coff-i960.c:500
msgid "uncertain calling convention for non-COFF symbol"
msgstr ""
-#: cofflink.c:507 elflink.c:3948
+#: cofflink.c:509 elflink.c:4158
msgid "Warning: type of symbol `%s' changed from %d to %d in %B"
msgstr ""
-#: cofflink.c:2293
+#: cofflink.c:2292
msgid "%B: relocs in section `%A', but it has no contents"
msgstr ""
-#: cofflink.c:2624 coffswap.h:823
+#: cofflink.c:2623 coffswap.h:823
#, c-format
msgid "%s: %s: reloc overflow: 0x%lx > 0xffff"
msgstr ""
-#: cofflink.c:2633 coffswap.h:809
+#: cofflink.c:2632 coffswap.h:809
#, c-format
msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff"
msgstr ""
-#: coff-m68k.c:482 elf32-bfin.c:2722 elf32-m68k.c:2193
+#: coff-m68k.c:505 elf32-bfin.c:5434 elf32-m68k.c:2392
msgid "unsupported reloc type"
msgstr ""
-#: coff-maxq.c:128
+#: coff-maxq.c:126
msgid "Can't Make it a Short Jump"
msgstr ""
-#: coff-maxq.c:193
+#: coff-maxq.c:191
msgid "Exceeds Long Jump Range"
msgstr ""
-#: coff-maxq.c:204 coff-maxq.c:278
+#: coff-maxq.c:202 coff-maxq.c:276
msgid "Absolute address Exceeds 16 bit Range"
msgstr ""
-#: coff-maxq.c:242
+#: coff-maxq.c:240
msgid "Absolute address Exceeds 8 bit Range"
msgstr ""
-#: coff-maxq.c:335
+#: coff-maxq.c:333
msgid "Unrecognized Reloc Type"
msgstr ""
-#: coff-mips.c:686 elf32-mips.c:940 elf64-mips.c:1864 elfn32-mips.c:1718
+#: coff-mips.c:686 elf32-mips.c:956 elf32-score.c:344 elf64-mips.c:1896
+#: elfn32-mips.c:1750
msgid "GP relative relocation when _gp not defined"
msgstr ""
@@ -459,22 +473,22 @@ msgstr ""
msgid "Unrecognized reloc"
msgstr ""
-#: coff-rs6000.c:2785
+#: coff-rs6000.c:2798
#, c-format
msgid "%s: unsupported relocation type 0x%02x"
msgstr ""
-#: coff-rs6000.c:2878
+#: coff-rs6000.c:2891
#, c-format
msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry"
msgstr ""
-#: coff-tic4x.c:174 coff-tic54x.c:282 coff-tic80.c:458
+#: coff-tic4x.c:191 coff-tic54x.c:299 coff-tic80.c:458
#, c-format
msgid "Unrecognized reloc type 0x%x"
msgstr ""
-#: coff-tic4x.c:219
+#: coff-tic4x.c:236
#, c-format
msgid "%s: warning: illegal symbol index %ld in relocs"
msgstr ""
@@ -484,543 +498,644 @@ msgstr ""
msgid "ignoring reloc %s\n"
msgstr ""
-#: cpu-arm.c:184 cpu-arm.c:193
+#: cpu-arm.c:188 cpu-arm.c:199
msgid "ERROR: %B is compiled for the EP9312, whereas %B is compiled for XScale"
msgstr ""
-#: cpu-arm.c:324
+#: cpu-arm.c:331
#, c-format
msgid "warning: unable to update contents of %s section in %s"
msgstr ""
-#: dwarf2.c:315
+#: dwarf2.c:329
msgid "Dwarf Error: Can't find .debug_str section."
msgstr ""
-#: dwarf2.c:333
+#: dwarf2.c:347
#, c-format
msgid ""
"Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str "
"size (%lu)."
msgstr ""
-#: dwarf2.c:426
+#: dwarf2.c:440
msgid "Dwarf Error: Can't find .debug_abbrev section."
msgstr ""
-#: dwarf2.c:441
+#: dwarf2.c:455
#, c-format
msgid ""
"Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size "
"(%lu)."
msgstr ""
-#: dwarf2.c:656
+#: dwarf2.c:670
#, c-format
msgid "Dwarf Error: Invalid or unhandled FORM value: %u."
msgstr ""
-#: dwarf2.c:856
+#: dwarf2.c:873
msgid "Dwarf Error: mangled line number section (bad file number)."
msgstr ""
-#: dwarf2.c:947
+#: dwarf2.c:985
msgid "Dwarf Error: Can't find .debug_line section."
msgstr ""
-#: dwarf2.c:964
+#: dwarf2.c:1002
#, c-format
msgid ""
"Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%"
"lu)."
msgstr ""
-#: dwarf2.c:1192
+#: dwarf2.c:1228
msgid "Dwarf Error: mangled line number section."
msgstr ""
-#: dwarf2.c:1382
+#: dwarf2.c:1416
msgid "Dwarf Error: Can't find .debug_ranges section."
msgstr ""
-#: dwarf2.c:1544 dwarf2.c:1660 dwarf2.c:1930
+#: dwarf2.c:1579 dwarf2.c:1695 dwarf2.c:1965
#, c-format
msgid "Dwarf Error: Could not find abbrev number %u."
msgstr ""
-#: dwarf2.c:1891
+#: dwarf2.c:1926
#, c-format
msgid ""
"Dwarf Error: found dwarf version '%u', this reader only handles version 2 "
"information."
msgstr ""
-#: dwarf2.c:1898
+#: dwarf2.c:1933
#, c-format
msgid ""
"Dwarf Error: found address size '%u', this reader can not handle sizes "
"greater than '%u'."
msgstr ""
-#: dwarf2.c:1921
+#: dwarf2.c:1956
#, c-format
msgid "Dwarf Error: Bad abbrev number: %u."
msgstr ""
-#: ecoff.c:1227
+#: ecoff.c:1226
#, c-format
msgid "Unknown basic type %d"
msgstr ""
-#: ecoff.c:1484
+#: ecoff.c:1483
#, c-format
msgid ""
"\n"
" End+1 symbol: %ld"
msgstr ""
-#: ecoff.c:1491 ecoff.c:1494
+#: ecoff.c:1490 ecoff.c:1493
#, c-format
msgid ""
"\n"
" First symbol: %ld"
msgstr ""
-#: ecoff.c:1506
+#: ecoff.c:1505
#, c-format
msgid ""
"\n"
" End+1 symbol: %-7ld Type: %s"
msgstr ""
-#: ecoff.c:1513
+#: ecoff.c:1512
#, c-format
msgid ""
"\n"
" Local symbol: %ld"
msgstr ""
-#: ecoff.c:1521
+#: ecoff.c:1520
#, c-format
msgid ""
"\n"
" struct; End+1 symbol: %ld"
msgstr ""
-#: ecoff.c:1526
+#: ecoff.c:1525
#, c-format
msgid ""
"\n"
" union; End+1 symbol: %ld"
msgstr ""
-#: ecoff.c:1531
+#: ecoff.c:1530
#, c-format
msgid ""
"\n"
" enum; End+1 symbol: %ld"
msgstr ""
-#: ecoff.c:1537
+#: ecoff.c:1536
#, c-format
msgid ""
"\n"
" Type: %s"
msgstr ""
-#: elf32-arm.c:2315
+#: elf32-arm.c:2516
+#, c-format
+msgid "unable to find THUMB glue '%s' for '%s'"
+msgstr ""
+
+#: elf32-arm.c:2549
+#, c-format
+msgid "unable to find ARM glue '%s' for '%s'"
+msgstr ""
+
+#: elf32-arm.c:3119
msgid "%B: BE8 images only valid in big-endian mode."
msgstr ""
-#: elf32-arm.c:2471
+#. Give a warning, but do as the user requests anyway.
+#: elf32-arm.c:3320
+msgid ""
+"%B: warning: selected VFP11 erratum workaround is not necessary for target "
+"architecture"
+msgstr ""
+
+#: elf32-arm.c:3854 elf32-arm.c:3874
+msgid "%B: unable to find VFP11 veneer `%s'"
+msgstr ""
+
+#: elf32-arm.c:3919
#, c-format
msgid "Invalid TARGET2 relocation type '%s'."
msgstr ""
-#: elf32-arm.c:2578
+#: elf32-arm.c:4060
msgid ""
"%B(%s): warning: interworking not enabled.\n"
" first occurrence: %B: thumb call to arm"
msgstr ""
-#: elf32-arm.c:3044
+#: elf32-arm.c:4748
msgid "\\%B: Warning: Arm BLX instruction targets Arm function '%s'."
msgstr ""
-#: elf32-arm.c:3227
+#: elf32-arm.c:5047
msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'."
msgstr ""
-#: elf32-arm.c:3889
+#: elf32-arm.c:5738
msgid "%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object"
msgstr ""
-#: elf32-arm.c:4290 elf32-sh.c:4618 elf64-sh64.c:1537
+#: elf32-arm.c:5939
+msgid ""
+"%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group "
+"relocations"
+msgstr ""
+
+#: elf32-arm.c:5979 elf32-arm.c:6066 elf32-arm.c:6149 elf32-arm.c:6234
+msgid "%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s"
+msgstr ""
+
+#: elf32-arm.c:6417 elf32-sh.c:3303 elf64-sh64.c:1555
msgid "%B(%A+0x%lx): %s relocation against SEC_MERGE section"
msgstr ""
-#: elf32-arm.c:4351 elf64-ppc.c:9672
+#: elf32-arm.c:6506 elf64-ppc.c:9972
msgid "%B(%A+0x%lx): %s used with TLS symbol %s"
msgstr ""
-#: elf32-arm.c:4352 elf64-ppc.c:9673
+#: elf32-arm.c:6507 elf64-ppc.c:9973
msgid "%B(%A+0x%lx): %s used with non-TLS symbol %s"
msgstr ""
-#: elf32-arm.c:4375 elf32-i386.c:3038 elf32-m32r.c:2653 elf32-m68k.c:1737
-#: elf32-ppc.c:6561 elf32-s390.c:3012 elf32-sh.c:4717 elf32-xtensa.c:2311
-#: elf64-ppc.c:10825 elf64-s390.c:3010 elf64-sh64.c:1626 elf64-x86-64.c:2522
-#: elf-hppa.h:1413 elf-m10300.c:1460 elfxx-sparc.c:3137
+#: elf32-arm.c:6530 elf32-i386.c:3305 elf32-m32r.c:2597 elf32-m68k.c:1981
+#: elf32-ppc.c:6791 elf32-s390.c:3048 elf32-sh.c:3407 elf32-xtensa.c:2290
+#: elf64-ppc.c:11137 elf64-s390.c:3009 elf64-sh64.c:1647 elf64-x86-64.c:3001
+#: elf-hppa.h:2193 elf-m10300.c:1459 elfxx-sparc.c:3254
msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"
msgstr ""
-#: elf32-arm.c:4411 elf32-avr.c:880 elf32-cr16c.c:773 elf32-cris.c:1502
-#: elf32-crx.c:911 elf32-d10v.c:536 elf32-fr30.c:595 elf32-frv.c:4107
-#: elf32-h8300.c:494 elf32-i860.c:1189 elf32-ip2k.c:1474 elf32-iq2000.c:616
-#: elf32-m32c.c:465 elf32-m32r.c:3111 elf32-m68hc1x.c:1194 elf32-ms1.c:373
-#: elf32-msp430.c:508 elf32-openrisc.c:383 elf32-v850.c:1672
-#: elf32-xstormy16.c:909 elf64-mmix.c:1517 elf-m10200.c:427 elf-m10300.c:1509
-msgid "internal error: out of range error"
+#: elf32-arm.c:6564
+msgid "out of range"
msgstr ""
-#: elf32-arm.c:4415 elf32-avr.c:884 elf32-cr16c.c:777 elf32-cris.c:1506
-#: elf32-crx.c:915 elf32-d10v.c:540 elf32-fr30.c:599 elf32-frv.c:4111
-#: elf32-h8300.c:498 elf32-i860.c:1193 elf32-iq2000.c:620 elf32-m32c.c:469
-#: elf32-m32r.c:3115 elf32-m68hc1x.c:1198 elf32-msp430.c:512
-#: elf32-openrisc.c:387 elf32-v850.c:1676 elf32-xstormy16.c:913
-#: elf64-mmix.c:1521 elf-m10200.c:431 elf-m10300.c:1513 elfxx-mips.c:7212
-msgid "internal error: unsupported relocation error"
+#: elf32-arm.c:6568
+msgid "unsupported relocation"
msgstr ""
-#: elf32-arm.c:4419 elf32-cr16c.c:781 elf32-crx.c:919 elf32-d10v.c:544
-#: elf32-h8300.c:502 elf32-m32r.c:3119 elf32-m68hc1x.c:1202 elf-m10200.c:435
-#: elf-m10300.c:1517
-msgid "internal error: dangerous error"
+#: elf32-arm.c:6576
+msgid "unknown error"
msgstr ""
-#: elf32-arm.c:4423 elf32-avr.c:892 elf32-cr16c.c:785 elf32-cris.c:1514
-#: elf32-crx.c:923 elf32-d10v.c:548 elf32-fr30.c:607 elf32-frv.c:4119
-#: elf32-h8300.c:506 elf32-i860.c:1201 elf32-ip2k.c:1489 elf32-iq2000.c:628
-#: elf32-m32c.c:477 elf32-m32r.c:3123 elf32-m68hc1x.c:1206 elf32-ms1.c:381
-#: elf32-msp430.c:520 elf32-openrisc.c:395 elf32-v850.c:1696
-#: elf32-xstormy16.c:921 elf64-mmix.c:1529 elf-m10200.c:439 elf-m10300.c:1521
-msgid "internal error: unknown error"
-msgstr ""
-
-#: elf32-arm.c:4664
+#: elf32-arm.c:6676
msgid ""
"Warning: Clearing the interworking flag of %B because non-interworking code "
"in %B has been linked with it"
msgstr ""
-#: elf32-arm.c:4751
+#: elf32-arm.c:6778
msgid "ERROR: %B uses VFP register arguments, %B does not"
msgstr ""
-#: elf32-arm.c:4798
+#: elf32-arm.c:6828
msgid "ERROR: %B: Conflicting architecture profiles %c/%c"
msgstr ""
-#: elf32-arm.c:4813
+#: elf32-arm.c:6843
msgid "Warning: %B: Conflicting platform configuration"
msgstr ""
-#: elf32-arm.c:4821
+#: elf32-arm.c:6852
msgid "ERROR: %B: Conflicting use of R9"
msgstr ""
-#: elf32-arm.c:4833
+#: elf32-arm.c:6864
msgid "ERROR: %B: SB relative addressing conflicts with use of R9"
msgstr ""
-#: elf32-arm.c:4855
+#: elf32-arm.c:6886
msgid "ERROR: %B: Conflicting definitions of wchar_t"
msgstr ""
-#: elf32-arm.c:4881
-msgid "ERROR: %B: Conflicting enum sizes"
+#: elf32-arm.c:6915
+msgid ""
+"warning: %B uses %s enums yet the output is to use %s enums; use of enum "
+"values across objects may fail"
msgstr ""
-#: elf32-arm.c:4892
+#: elf32-arm.c:6928
msgid "ERROR: %B uses iWMMXt register arguments, %B does not"
msgstr ""
-#: elf32-arm.c:4912
-msgid "ERROR: %B: Must be processed by '%s' toolchain"
-msgstr ""
-
-#: elf32-arm.c:4932 elf32-arm.c:4951
-msgid "ERROR: %B: Incompatible object tag '%s':%d"
-msgstr ""
-
-#: elf32-arm.c:4961
+#: elf32-arm.c:6951
msgid "Warning: %B: Unknown EABI object attribute %d"
msgstr ""
-#: elf32-arm.c:5069
+#: elf32-arm.c:7076
msgid ""
"ERROR: Source object %B has EABI version %d, but target %B has EABI version %"
"d"
msgstr ""
-#: elf32-arm.c:5082
+#: elf32-arm.c:7092
msgid "ERROR: %B is compiled for APCS-%d, whereas target %B uses APCS-%d"
msgstr ""
-#: elf32-arm.c:5107
+#: elf32-arm.c:7117
msgid "ERROR: %B uses VFP instructions, whereas %B does not"
msgstr ""
-#: elf32-arm.c:5111
+#: elf32-arm.c:7121
msgid "ERROR: %B uses FPA instructions, whereas %B does not"
msgstr ""
-#: elf32-arm.c:5121
+#: elf32-arm.c:7131
msgid "ERROR: %B uses Maverick instructions, whereas %B does not"
msgstr ""
-#: elf32-arm.c:5125
+#: elf32-arm.c:7135
msgid "ERROR: %B does not use Maverick instructions, whereas %B does"
msgstr ""
-#: elf32-arm.c:5144
+#: elf32-arm.c:7154
msgid "ERROR: %B uses software FP, whereas %B uses hardware FP"
msgstr ""
-#: elf32-arm.c:5148
+#: elf32-arm.c:7158
msgid "ERROR: %B uses hardware FP, whereas %B uses software FP"
msgstr ""
#. Ignore init flag - it may not be set, despite the flags field
#. containing valid data.
#. Ignore init flag - it may not be set, despite the flags field containing valid data.
-#: elf32-arm.c:5195 elf32-bfin.c:2164 elf32-cris.c:3243 elf32-m68hc1x.c:1338
-#: elf32-m68k.c:428 elf32-vax.c:528 elfxx-mips.c:9933
+#: elf32-arm.c:7205 elf32-bfin.c:4795 elf32-cris.c:3233 elf32-m68hc1x.c:1276
+#: elf32-m68k.c:619 elf32-score.c:3752 elf32-vax.c:537 elfxx-mips.c:11310
#, c-format
msgid "private flags = %lx:"
msgstr ""
-#: elf32-arm.c:5204
+#: elf32-arm.c:7214
#, c-format
msgid " [interworking enabled]"
msgstr ""
-#: elf32-arm.c:5212
+#: elf32-arm.c:7222
#, c-format
msgid " [VFP float format]"
msgstr ""
-#: elf32-arm.c:5214
+#: elf32-arm.c:7224
#, c-format
msgid " [Maverick float format]"
msgstr ""
-#: elf32-arm.c:5216
+#: elf32-arm.c:7226
#, c-format
msgid " [FPA float format]"
msgstr ""
-#: elf32-arm.c:5225
+#: elf32-arm.c:7235
#, c-format
msgid " [new ABI]"
msgstr ""
-#: elf32-arm.c:5228
+#: elf32-arm.c:7238
#, c-format
msgid " [old ABI]"
msgstr ""
-#: elf32-arm.c:5231
+#: elf32-arm.c:7241
#, c-format
msgid " [software FP]"
msgstr ""
-#: elf32-arm.c:5240
+#: elf32-arm.c:7250
#, c-format
msgid " [Version1 EABI]"
msgstr ""
-#: elf32-arm.c:5243 elf32-arm.c:5254
+#: elf32-arm.c:7253 elf32-arm.c:7264
#, c-format
msgid " [sorted symbol table]"
msgstr ""
-#: elf32-arm.c:5245 elf32-arm.c:5256
+#: elf32-arm.c:7255 elf32-arm.c:7266
#, c-format
msgid " [unsorted symbol table]"
msgstr ""
-#: elf32-arm.c:5251
+#: elf32-arm.c:7261
#, c-format
msgid " [Version2 EABI]"
msgstr ""
-#: elf32-arm.c:5259
+#: elf32-arm.c:7269
#, c-format
msgid " [dynamic symbols use segment index]"
msgstr ""
-#: elf32-arm.c:5262
+#: elf32-arm.c:7272
#, c-format
msgid " [mapping symbols precede others]"
msgstr ""
-#: elf32-arm.c:5269
+#: elf32-arm.c:7279
#, c-format
msgid " [Version3 EABI]"
msgstr ""
-#: elf32-arm.c:5273
+#: elf32-arm.c:7283
#, c-format
msgid " [Version4 EABI]"
msgstr ""
-#: elf32-arm.c:5276
+#: elf32-arm.c:7287
+#, c-format
+msgid " [Version5 EABI]"
+msgstr ""
+
+#: elf32-arm.c:7290
#, c-format
msgid " [BE8]"
msgstr ""
-#: elf32-arm.c:5279
+#: elf32-arm.c:7293
#, c-format
msgid " [LE8]"
msgstr ""
-#: elf32-arm.c:5285
+#: elf32-arm.c:7299
#, c-format
msgid " <EABI version unrecognised>"
msgstr ""
-#: elf32-arm.c:5292
+#: elf32-arm.c:7306
#, c-format
msgid " [relocatable executable]"
msgstr ""
-#: elf32-arm.c:5295
+#: elf32-arm.c:7309
#, c-format
msgid " [has entry point]"
msgstr ""
-#: elf32-arm.c:5300
+#: elf32-arm.c:7314
#, c-format
msgid "<Unrecognised flag bits set>"
msgstr ""
-#: elf32-arm.c:5536 elf32-i386.c:902 elf32-s390.c:989 elf32-xtensa.c:784
-#: elf64-s390.c:942 elf64-x86-64.c:666 elfxx-sparc.c:1016
+#: elf32-arm.c:7545 elf32-i386.c:960 elf32-s390.c:1003 elf32-xtensa.c:814
+#: elf64-s390.c:958 elf64-x86-64.c:772 elfxx-sparc.c:1113
msgid "%B: bad symbol index: %d"
msgstr ""
-#: elf32-arm.c:6023 elf32-cris.c:2385 elf32-hppa.c:1813 elf32-i370.c:491
-#: elf32-i386.c:1465 elf32-m32r.c:1913 elf32-m68k.c:1088 elf32-ppc.c:4145
-#: elf32-s390.c:1686 elf32-sh.c:3920 elf32-vax.c:1059 elf64-ppc.c:5717
-#: elf64-s390.c:1659 elf64-sh64.c:3442 elf64-x86-64.c:1252 elf-m10300.c:4107
-#: elfxx-sparc.c:1720
+#: elf32-arm.c:8091 elf32-cris.c:2399 elf32-hppa.c:1905 elf32-i370.c:506
+#: elf32-i386.c:1517 elf32-m32r.c:1930 elf32-m68k.c:1330 elf32-ppc.c:4309
+#: elf32-s390.c:1679 elf32-sh.c:2583 elf32-vax.c:1049 elf64-ppc.c:5897
+#: elf64-s390.c:1654 elf64-sh64.c:3437 elf64-x86-64.c:1381 elf-m10300.c:4206
+#: elfxx-sparc.c:1795
#, c-format
msgid "dynamic variable `%s' is zero size"
msgstr ""
-#: elf32-avr.c:888 elf32-cris.c:1510 elf32-fr30.c:603 elf32-frv.c:4115
-#: elf32-i860.c:1197 elf32-ip2k.c:1485 elf32-iq2000.c:624 elf32-m32c.c:473
-#: elf32-ms1.c:377 elf32-msp430.c:516 elf32-openrisc.c:391 elf32-v850.c:1680
-#: elf32-xstormy16.c:917 elf64-mmix.c:1525
+#: elf32-arm.c:8609
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr ""
+
+#: elf32-arm.c:9837 elf32-arm.c:9859
+msgid "%B: error: VFP11 veneer out of range"
+msgstr ""
+
+#: elf32-avr.c:1253 elf32-bfin.c:2795 elf32-cr16.c:887 elf32-cr16c.c:789
+#: elf32-cris.c:1537 elf32-crx.c:932 elf32-d10v.c:517 elf32-fr30.c:615
+#: elf32-frv.c:4128 elf32-h8300.c:515 elf32-i860.c:1217 elf32-ip2k.c:1499
+#: elf32-iq2000.c:647 elf32-m32c.c:560 elf32-m32r.c:3123 elf32-m68hc1x.c:1132
+#: elf32-mep.c:639 elf32-msp430.c:496 elf32-mt.c:401 elf32-openrisc.c:411
+#: elf32-score.c:2455 elf32-spu.c:2813 elf32-v850.c:1700 elf32-xstormy16.c:946
+#: elf64-mmix.c:1531 elf-m10200.c:455 elf-m10300.c:1522
+msgid "internal error: out of range error"
+msgstr ""
+
+#: elf32-avr.c:1257 elf32-bfin.c:2799 elf32-cr16.c:891 elf32-cr16c.c:793
+#: elf32-cris.c:1541 elf32-crx.c:936 elf32-d10v.c:521 elf32-fr30.c:619
+#: elf32-frv.c:4132 elf32-h8300.c:519 elf32-i860.c:1221 elf32-iq2000.c:651
+#: elf32-m32c.c:564 elf32-m32r.c:3127 elf32-m68hc1x.c:1136 elf32-mep.c:643
+#: elf32-msp430.c:500 elf32-openrisc.c:415 elf32-score.c:2459 elf32-spu.c:2817
+#: elf32-v850.c:1704 elf32-xstormy16.c:950 elf64-mmix.c:1535 elf-m10200.c:459
+#: elf-m10300.c:1526 elfxx-mips.c:8019
+msgid "internal error: unsupported relocation error"
+msgstr ""
+
+#: elf32-avr.c:1261 elf32-bfin.c:2803 elf32-cris.c:1545 elf32-fr30.c:623
+#: elf32-frv.c:4136 elf32-i860.c:1225 elf32-ip2k.c:1510 elf32-iq2000.c:655
+#: elf32-m32c.c:568 elf32-mep.c:647 elf32-msp430.c:504 elf32-mt.c:405
+#: elf32-openrisc.c:419 elf32-v850.c:1708 elf32-xstormy16.c:954
+#: elf64-mmix.c:1539
msgid "internal error: dangerous relocation"
msgstr ""
-#: elf32-bfin.c:96
-msgid "Division by zero. "
+#: elf32-avr.c:1265 elf32-bfin.c:2807 elf32-cr16.c:899 elf32-cr16c.c:801
+#: elf32-cris.c:1549 elf32-crx.c:944 elf32-d10v.c:529 elf32-fr30.c:627
+#: elf32-frv.c:4140 elf32-h8300.c:527 elf32-i860.c:1229 elf32-ip2k.c:1514
+#: elf32-iq2000.c:659 elf32-m32c.c:572 elf32-m32r.c:3135 elf32-m68hc1x.c:1144
+#: elf32-mep.c:651 elf32-msp430.c:508 elf32-mt.c:409 elf32-openrisc.c:423
+#: elf32-score.c:2467 elf32-spu.c:2825 elf32-v850.c:1724 elf32-xstormy16.c:958
+#: elf64-mmix.c:1543 elf-m10200.c:467 elf-m10300.c:1539
+msgid "internal error: unknown error"
+msgstr ""
+
+#: elf32-avr.c:2369 elf32-hppa.c:594 elf32-m68hc1x.c:163 elf64-ppc.c:3801
+msgid "%B: cannot create stub entry %s"
+msgstr ""
+
+#: elf32-bfin.c:2274
+msgid "%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend"
+msgstr ""
+
+#: elf32-bfin.c:2288 elf32-frv.c:2918
+msgid "relocation references symbol not defined in the module"
+msgstr ""
+
+#: elf32-bfin.c:2385
+msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
+msgstr ""
+
+#: elf32-bfin.c:2424 elf32-bfin.c:2547 elf32-frv.c:3655 elf32-frv.c:3776
+msgid "cannot emit fixups in read-only section"
+msgstr ""
+
+#: elf32-bfin.c:2452 elf32-bfin.c:2587 elf32-frv.c:3686 elf32-frv.c:3820
+msgid "cannot emit dynamic relocations in read-only section"
+msgstr ""
+
+#: elf32-bfin.c:2505
+msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
msgstr ""
-#: elf32-bfin.c:1958
+#: elf32-bfin.c:2673
+msgid "relocations between different segments are not supported"
+msgstr ""
+
+#: elf32-bfin.c:2674
+msgid "warning: relocation references a different segment"
+msgstr ""
+
+#: elf32-bfin.c:3083
msgid "%B(%A+0x%lx): unresolvable relocation against symbol `%s'"
msgstr ""
-#: elf32-bfin.c:1991 elf32-i386.c:3079 elf32-m68k.c:1778 elf32-s390.c:3064
-#: elf64-s390.c:3062 elf64-x86-64.c:2567
+#: elf32-bfin.c:3116 elf32-i386.c:3346 elf32-m68k.c:2022 elf32-s390.c:3100
+#: elf64-s390.c:3061 elf64-x86-64.c:3040
msgid "%B(%A+0x%lx): reloc against `%s': error %d"
msgstr ""
-#: elf32-cris.c:1050
+#: elf32-bfin.c:4687 elf32-frv.c:6422
+msgid "%B: unsupported relocation type %i"
+msgstr ""
+
+#: elf32-bfin.c:4868 elf32-frv.c:6830
+#, c-format
+msgid "%s: cannot link non-fdpic object file into fdpic executable"
+msgstr ""
+
+#: elf32-bfin.c:4872 elf32-frv.c:6834
+#, c-format
+msgid "%s: cannot link fdpic object file into non-fdpic executable"
+msgstr ""
+
+#: elf32-cr16.c:895 elf32-cr16c.c:797 elf32-crx.c:940 elf32-d10v.c:525
+#: elf32-h8300.c:523 elf32-m32r.c:3131 elf32-m68hc1x.c:1140 elf32-score.c:2463
+#: elf32-spu.c:2821 elf-m10200.c:463
+msgid "internal error: dangerous error"
+msgstr ""
+
+#: elf32-cris.c:1059
msgid "%B, section %A: unresolvable relocation %s against symbol `%s'"
msgstr ""
-#: elf32-cris.c:1105
+#: elf32-cris.c:1128
msgid "%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'"
msgstr ""
-#: elf32-cris.c:1107
+#: elf32-cris.c:1130
msgid "%B, section %A: No PLT for relocation %s against symbol `%s'"
msgstr ""
-#: elf32-cris.c:1113 elf32-cris.c:1245
+#: elf32-cris.c:1136 elf32-cris.c:1268
msgid "[whose name is lost]"
msgstr ""
-#: elf32-cris.c:1231
+#: elf32-cris.c:1254
msgid ""
"%B, section %A: relocation %s with non-zero addend %d against local symbol"
msgstr ""
-#: elf32-cris.c:1239
+#: elf32-cris.c:1262
msgid ""
"%B, section %A: relocation %s with non-zero addend %d against symbol `%s'"
msgstr ""
-#: elf32-cris.c:1265
+#: elf32-cris.c:1288
msgid "%B, section %A: relocation %s is not allowed for global symbol: `%s'"
msgstr ""
-#: elf32-cris.c:1281
+#: elf32-cris.c:1304
msgid "%B, section %A: relocation %s with no GOT created"
msgstr ""
-#: elf32-cris.c:1399
+#: elf32-cris.c:1422
msgid "%B: Internal inconsistency; no relocation section %s"
msgstr ""
-#: elf32-cris.c:2520
+#: elf32-cris.c:2510
msgid ""
"%B, section %A:\n"
" v10/v32 compatible object %s must not contain a PIC relocation"
msgstr ""
-#: elf32-cris.c:2707 elf32-cris.c:2775
+#: elf32-cris.c:2697 elf32-cris.c:2765
msgid ""
"%B, section %A:\n"
" relocation %s should not be used in a shared object; recompile with -fPIC"
msgstr ""
-#: elf32-cris.c:3192
+#: elf32-cris.c:3182
msgid "Unexpected machine number"
msgstr ""
-#: elf32-cris.c:3246
+#: elf32-cris.c:3236
#, c-format
msgid " [symbols have a _ prefix]"
msgstr ""
-#: elf32-cris.c:3249
+#: elf32-cris.c:3239
#, c-format
msgid " [v10 and v32]"
msgstr ""
-#: elf32-cris.c:3252
+#: elf32-cris.c:3242
#, c-format
msgid " [v32]"
msgstr ""
-#: elf32-cris.c:3297
+#: elf32-cris.c:3287
msgid "%B: uses _-prefixed symbols, but writing file with non-prefixed symbols"
msgstr ""
-#: elf32-cris.c:3298
+#: elf32-cris.c:3288
msgid "%B: uses non-prefixed symbols, but writing file with _-prefixed symbols"
msgstr ""
-#: elf32-cris.c:3317
+#: elf32-cris.c:3307
msgid "%B contains CRIS v32 code, incompatible with previous objects"
msgstr ""
-#: elf32-cris.c:3319
+#: elf32-cris.c:3309
msgid "%B contains non-CRIS-v32 code, incompatible with previous objects"
msgstr ""
@@ -1028,119 +1143,93 @@ msgstr ""
msgid "relocation requires zero addend"
msgstr ""
-#: elf32-frv.c:2901
+#: elf32-frv.c:2905
msgid "%B(%A+0x%x): relocation to `%s+%x' may have caused the error above"
msgstr ""
-#: elf32-frv.c:2914
-msgid "relocation references symbol not defined in the module"
-msgstr ""
-
-#: elf32-frv.c:2990
+#: elf32-frv.c:2994
msgid "R_FRV_GETTLSOFF not applied to a call instruction"
msgstr ""
-#: elf32-frv.c:3032
+#: elf32-frv.c:3036
msgid "R_FRV_GOTTLSDESC12 not applied to an lddi instruction"
msgstr ""
-#: elf32-frv.c:3103
+#: elf32-frv.c:3107
msgid "R_FRV_GOTTLSDESCHI not applied to a sethi instruction"
msgstr ""
-#: elf32-frv.c:3140
+#: elf32-frv.c:3144
msgid "R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction"
msgstr ""
-#: elf32-frv.c:3188
+#: elf32-frv.c:3192
msgid "R_FRV_TLSDESC_RELAX not applied to an ldd instruction"
msgstr ""
-#: elf32-frv.c:3272
+#: elf32-frv.c:3276
msgid "R_FRV_GETTLSOFF_RELAX not applied to a calll instruction"
msgstr ""
-#: elf32-frv.c:3327
+#: elf32-frv.c:3331
msgid "R_FRV_GOTTLSOFF12 not applied to an ldi instruction"
msgstr ""
-#: elf32-frv.c:3357
+#: elf32-frv.c:3361
msgid "R_FRV_GOTTLSOFFHI not applied to a sethi instruction"
msgstr ""
-#: elf32-frv.c:3386
+#: elf32-frv.c:3390
msgid "R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction"
msgstr ""
-#: elf32-frv.c:3417
+#: elf32-frv.c:3421
msgid "R_FRV_TLSOFF_RELAX not applied to an ld instruction"
msgstr ""
-#: elf32-frv.c:3462
+#: elf32-frv.c:3466
msgid "R_FRV_TLSMOFFHI not applied to a sethi instruction"
msgstr ""
-#: elf32-frv.c:3489
+#: elf32-frv.c:3493
msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction"
msgstr ""
-#: elf32-frv.c:3610
+#: elf32-frv.c:3614
msgid "R_FRV_FUNCDESC references dynamic symbol with nonzero addend"
msgstr ""
-#: elf32-frv.c:3649 elf32-frv.c:3762
-msgid "cannot emit fixups in read-only section"
-msgstr ""
-
-#: elf32-frv.c:3675 elf32-frv.c:3802
-msgid "cannot emit dynamic relocations in read-only section"
-msgstr ""
-
-#: elf32-frv.c:3720
+#: elf32-frv.c:3734
msgid "R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
msgstr ""
-#: elf32-frv.c:3970 elf32-frv.c:4126
+#: elf32-frv.c:3991 elf32-frv.c:4147
msgid "%B(%A+0x%lx): reloc against `%s': %s"
msgstr ""
-#: elf32-frv.c:3972 elf32-frv.c:3976
+#: elf32-frv.c:3993 elf32-frv.c:3997
msgid "relocation references a different segment"
msgstr ""
-#: elf32-frv.c:6324
-msgid "%B: unsupported relocation type %i"
-msgstr ""
-
-#: elf32-frv.c:6642
+#: elf32-frv.c:6744
#, c-format
msgid ""
"%s: compiled with %s and linked with modules that use non-pic relocations"
msgstr ""
-#: elf32-frv.c:6695 elf32-iq2000.c:801 elf32-m32c.c:785
+#: elf32-frv.c:6797 elf32-iq2000.c:808 elf32-m32c.c:819
#, c-format
msgid "%s: compiled with %s and linked with modules compiled with %s"
msgstr ""
-#: elf32-frv.c:6707
+#: elf32-frv.c:6809
#, c-format
msgid ""
"%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%"
"lx)"
msgstr ""
-#: elf32-frv.c:6728
-#, c-format
-msgid "%s: cannot link non-fdpic object file into fdpic executable"
-msgstr ""
-
-#: elf32-frv.c:6732
-#, c-format
-msgid "%s: cannot link fdpic object file into non-fdpic executable"
-msgstr ""
-
-#: elf32-frv.c:6757 elf32-iq2000.c:838 elf32-m32c.c:821 elf32-ms1.c:596
+#: elf32-frv.c:6859 elf32-iq2000.c:845 elf32-m32c.c:855 elf32-mt.c:586
#, c-format
msgid "private flags = 0x%lx:"
msgstr ""
@@ -1149,423 +1238,461 @@ msgstr ""
msgid "%B: Relocations in generic ELF (EM: %d)"
msgstr ""
-#: elf32-hppa.c:569 elf32-m68hc1x.c:161 elf64-ppc.c:3660
-msgid "%B: cannot create stub entry %s"
-msgstr ""
-
-#: elf32-hppa.c:822 elf32-hppa.c:3411
+#: elf32-hppa.c:843 elf32-hppa.c:3576
msgid "%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections"
msgstr ""
-#: elf32-hppa.c:1212
+#: elf32-hppa.c:1252
msgid ""
"%B: relocation %s can not be used when making a shared object; recompile "
"with -fPIC"
msgstr ""
-#: elf32-hppa.c:1405
+#: elf32-hppa.c:1505
#, c-format
msgid "Could not find relocation section for %s"
msgstr ""
-#: elf32-hppa.c:2677
+#: elf32-hppa.c:2794
msgid "%B: duplicate export stub %s"
msgstr ""
-#: elf32-hppa.c:3266
+#: elf32-hppa.c:3412
msgid ""
"%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link"
msgstr ""
-#: elf32-hppa.c:3895
+#: elf32-hppa.c:4266
msgid "%B(%A+0x%lx): cannot handle %s for %s"
msgstr ""
-#: elf32-hppa.c:4189
+#: elf32-hppa.c:4573
msgid ".got section not immediately after .plt section"
msgstr ""
-#: elf32-i386.c:327 elf32-s390.c:368 elf64-ppc.c:2124 elf64-s390.c:390
-#: elf64-x86-64.c:204
+#: elf32-i386.c:363 elf32-ppc.c:1615 elf32-s390.c:379 elf64-ppc.c:2147
+#: elf64-s390.c:403 elf64-x86-64.c:220
msgid "%B: invalid relocation type %d"
msgstr ""
-#: elf32-i386.c:1015 elf32-s390.c:1171 elf32-sh.c:6389 elf64-s390.c:1133
-#: elfxx-sparc.c:1144
+#: elf32-i386.c:1084 elf32-s390.c:1185 elf32-sh.c:5062 elf64-s390.c:1149
+#: elfxx-sparc.c:1241
msgid "%B: `%s' accessed both as normal and thread local symbol"
msgstr ""
-#: elf32-i386.c:1130 elf32-s390.c:1280 elf64-ppc.c:4731 elf64-s390.c:1245
-#: elf64-x86-64.c:910
+#: elf32-i386.c:1199 elf32-s390.c:1294 elf64-ppc.c:4863 elf64-s390.c:1261
+#: elf64-x86-64.c:1050
msgid "%B: bad relocation section name `%s'"
msgstr ""
-#: elf32-i386.c:2149
+#: elf32-i386.c:2252
msgid "%B: unrecognized relocation (0x%x) in section `%A'"
msgstr ""
-#: elf32-i386.c:2409
+#: elf32-i386.c:2474
msgid ""
"%B: relocation R_386_GOTOFF against protected function `%s' can not be used "
"when making a shared object"
msgstr ""
-#: elf32-ip2k.c:853 elf32-ip2k.c:859 elf32-ip2k.c:926 elf32-ip2k.c:932
+#: elf32-ip2k.c:868 elf32-ip2k.c:874 elf32-ip2k.c:941 elf32-ip2k.c:947
msgid ""
"ip2k relaxer: switch table without complete matching relocation information."
msgstr ""
-#: elf32-ip2k.c:876 elf32-ip2k.c:959
+#: elf32-ip2k.c:891 elf32-ip2k.c:974
msgid "ip2k relaxer: switch table header corrupt."
msgstr ""
-#: elf32-ip2k.c:1301
+#: elf32-ip2k.c:1316
#, c-format
msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)."
msgstr ""
-#: elf32-ip2k.c:1317
+#: elf32-ip2k.c:1332
#, c-format
msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)."
msgstr ""
#. Only if it's not an unresolved symbol.
-#: elf32-ip2k.c:1481
+#: elf32-ip2k.c:1506
msgid "unsupported relocation between data/insn address spaces"
msgstr ""
-#: elf32-iq2000.c:814 elf32-m32c.c:797
+#: elf32-iq2000.c:821 elf32-m32c.c:831
#, c-format
msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"
msgstr ""
-#: elf32-m32r.c:1436
+#: elf32-m32r.c:1452
msgid "SDA relocation when _SDA_BASE_ not defined"
msgstr ""
-#: elf32-m32r.c:3048
+#: elf32-m32r.c:3060
msgid "%B: The target (%s) of an %s relocation is in the wrong section (%A)"
msgstr ""
-#: elf32-m32r.c:3576
+#: elf32-m32r.c:3588
msgid "%B: Instruction set mismatch with previous modules"
msgstr ""
-#: elf32-m32r.c:3597
+#: elf32-m32r.c:3609
#, c-format
msgid "private flags = %lx"
msgstr ""
-#: elf32-m32r.c:3602
+#: elf32-m32r.c:3614
#, c-format
msgid ": m32r instructions"
msgstr ""
-#: elf32-m32r.c:3603
+#: elf32-m32r.c:3615
#, c-format
msgid ": m32rx instructions"
msgstr ""
-#: elf32-m32r.c:3604
+#: elf32-m32r.c:3616
#, c-format
msgid ": m32r2 instructions"
msgstr ""
-#: elf32-m68hc1x.c:1106
+#: elf32-m68hc1x.c:1044
#, c-format
msgid ""
"Reference to the far symbol `%s' using a wrong relocation may result in "
"incorrect execution"
msgstr ""
-#: elf32-m68hc1x.c:1129
+#: elf32-m68hc1x.c:1067
#, c-format
msgid ""
"banked address [%lx:%04lx] (%lx) is not in the same bank as current banked "
"address [%lx:%04lx] (%lx)"
msgstr ""
-#: elf32-m68hc1x.c:1148
+#: elf32-m68hc1x.c:1086
#, c-format
msgid ""
"reference to a banked address [%lx:%04lx] in the normal address space at %"
"04lx"
msgstr ""
-#: elf32-m68hc1x.c:1281
+#: elf32-m68hc1x.c:1219
msgid ""
"%B: linking files compiled for 16-bit integers (-mshort) and others for 32-"
"bit integers"
msgstr ""
-#: elf32-m68hc1x.c:1288
+#: elf32-m68hc1x.c:1226
msgid ""
"%B: linking files compiled for 32-bit double (-fshort-double) and others for "
"64-bit double"
msgstr ""
-#: elf32-m68hc1x.c:1297
+#: elf32-m68hc1x.c:1235
msgid "%B: linking files compiled for HCS12 with others compiled for HC12"
msgstr ""
-#: elf32-m68hc1x.c:1313 elf32-ppc.c:3576 elf64-sparc.c:696 elfxx-mips.c:9894
+#: elf32-m68hc1x.c:1251 elf32-ppc.c:3733 elf64-sparc.c:696 elfxx-mips.c:11271
msgid "%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"
msgstr ""
-#: elf32-m68hc1x.c:1341
+#: elf32-m68hc1x.c:1279
#, c-format
msgid "[abi=32-bit int, "
msgstr ""
-#: elf32-m68hc1x.c:1343
+#: elf32-m68hc1x.c:1281
#, c-format
msgid "[abi=16-bit int, "
msgstr ""
-#: elf32-m68hc1x.c:1346
+#: elf32-m68hc1x.c:1284
#, c-format
msgid "64-bit double, "
msgstr ""
-#: elf32-m68hc1x.c:1348
+#: elf32-m68hc1x.c:1286
#, c-format
msgid "32-bit double, "
msgstr ""
-#: elf32-m68hc1x.c:1351
+#: elf32-m68hc1x.c:1289
#, c-format
msgid "cpu=HC11]"
msgstr ""
-#: elf32-m68hc1x.c:1353
+#: elf32-m68hc1x.c:1291
#, c-format
msgid "cpu=HCS12]"
msgstr ""
-#: elf32-m68hc1x.c:1355
+#: elf32-m68hc1x.c:1293
#, c-format
msgid "cpu=HC12]"
msgstr ""
-#: elf32-m68hc1x.c:1358
+#: elf32-m68hc1x.c:1296
#, c-format
msgid " [memory=bank-model]"
msgstr ""
-#: elf32-m68hc1x.c:1360
+#: elf32-m68hc1x.c:1298
#, c-format
msgid " [memory=flat]"
msgstr ""
-#: elf32-m68k.c:431
-#, c-format
-msgid " [cpu32]"
+#: elf32-m68k.c:634 elf32-m68k.c:635
+msgid "unknown"
msgstr ""
-#: elf32-m68k.c:434
-#, c-format
-msgid " [m68000]"
-msgstr ""
-
-#: elf32-mcore.c:98 elf32-mcore.c:428
+#: elf32-mcore.c:98 elf32-mcore.c:441
msgid "%B: Relocation %s (%d) is not currently supported.\n"
msgstr ""
-#: elf32-mcore.c:414
+#: elf32-mcore.c:427
msgid "%B: Unknown relocation type %d\n"
msgstr ""
-#: elf32-mips.c:971 elf64-mips.c:1929 elfn32-mips.c:1774
-msgid "literal relocation occurs for an external symbol"
+#: elf32-mep.c:809
+msgid "%B and %B are for different cores"
msgstr ""
-#: elf32-mips.c:1011 elf64-mips.c:1972 elfn32-mips.c:1815
-msgid "32bits gp relative relocation occurs for an external symbol"
+#: elf32-mep.c:826
+msgid "%B and %B are for different configurations"
msgstr ""
-#: elf32-mips.c:1134 elf64-mips.c:2066 elfn32-mips.c:1915
+#: elf32-mep.c:864
#, c-format
-msgid "Linking mips16 objects into %s format is not supported"
+msgid "private flags = 0x%lx"
+msgstr ""
+
+#: elf32-mips.c:987 elf64-mips.c:1961 elfn32-mips.c:1806
+msgid "literal relocation occurs for an external symbol"
+msgstr ""
+
+#: elf32-mips.c:1027 elf32-score.c:483 elf64-mips.c:2004 elfn32-mips.c:1847
+msgid "32bits gp relative relocation occurs for an external symbol"
msgstr ""
-#: elf32-ppc.c:1652
+#: elf32-ppc.c:1680
#, c-format
msgid "generic linker can't handle %s"
msgstr ""
-#: elf32-ppc.c:2080
+#: elf32-ppc.c:2162
msgid "corrupt or empty %s section in %B"
msgstr ""
-#: elf32-ppc.c:2087
+#: elf32-ppc.c:2169
msgid "unable to read in %s section from %B"
msgstr ""
-#: elf32-ppc.c:2093
+#: elf32-ppc.c:2175
msgid "corrupt %s section in %B"
msgstr ""
-#: elf32-ppc.c:2136
+#: elf32-ppc.c:2218
msgid "warning: unable to set size of %s section in %B"
msgstr ""
-#: elf32-ppc.c:2183
+#: elf32-ppc.c:2266
msgid "failed to allocate space for new APUinfo section."
msgstr ""
-#: elf32-ppc.c:2202
+#: elf32-ppc.c:2285
msgid "failed to compute new APUinfo section."
msgstr ""
-#: elf32-ppc.c:2205
+#: elf32-ppc.c:2288
msgid "failed to install new APUinfo section."
msgstr ""
-#: elf32-ppc.c:2941
+#: elf32-ppc.c:3021
msgid "%B: relocation %s cannot be used when making a shared object"
msgstr ""
#. It does not make sense to have a procedure linkage
#. table entry for a local symbol.
-#: elf32-ppc.c:3211
+#: elf32-ppc.c:3291
msgid "%B(%A+0x%lx): %s reloc against local symbol"
msgstr ""
-#: elf32-ppc.c:3541
+#: elf32-ppc.c:3632 elf32-ppc.c:3636 elfxx-mips.c:11015 elfxx-mips.c:11034
+#: elfxx-mips.c:11049
+msgid "Warning: %B uses hard float, %B uses soft float"
+msgstr ""
+
+#: elf32-ppc.c:3639 elf32-ppc.c:3643 elfxx-mips.c:10996 elfxx-mips.c:11000
+msgid "Warning: %B uses unknown floating point ABI %d"
+msgstr ""
+
+#: elf32-ppc.c:3698
msgid ""
"%B: compiled with -mrelocatable and linked with modules compiled normally"
msgstr ""
-#: elf32-ppc.c:3549
+#: elf32-ppc.c:3706
msgid ""
"%B: compiled normally and linked with modules compiled with -mrelocatable"
msgstr ""
-#: elf32-ppc.c:5768 elf64-ppc.c:10186
+#: elf32-ppc.c:3792
+msgid "Using bss-plt due to %B"
+msgstr ""
+
+#: elf32-ppc.c:5997 elf64-ppc.c:10489
msgid "%B: unknown relocation type %d for symbol %s"
msgstr ""
-#: elf32-ppc.c:6018
+#: elf32-ppc.c:6247
msgid "%B(%A+0x%lx): non-zero addend on %s reloc against `%s'"
msgstr ""
-#: elf32-ppc.c:6365 elf32-ppc.c:6391 elf32-ppc.c:6450
+#: elf32-ppc.c:6592 elf32-ppc.c:6618 elf32-ppc.c:6677
msgid ""
"%B: the target (%s) of a %s relocation is in the wrong output section (%s)"
msgstr ""
-#: elf32-ppc.c:6505
+#: elf32-ppc.c:6732
msgid "%B: relocation %s is not yet supported for symbol %s."
msgstr ""
-#: elf32-ppc.c:6610 elf64-ppc.c:10872
+#: elf32-ppc.c:6840 elf64-ppc.c:11184
msgid "%B(%A+0x%lx): %s reloc against `%s': error %d"
msgstr ""
-#: elf32-s390.c:2253 elf64-s390.c:2225
+#: elf32-s390.c:2238 elf64-s390.c:2212
msgid "%B(%A+0x%lx): invalid instruction for TLS relocation %s"
msgstr ""
-#: elf32-sh64.c:218 elf64-sh64.c:2322
+#: elf32-score.c:1417 elfxx-mips.c:2695
+msgid "not enough GOT space for local GOT entries"
+msgstr ""
+
+#: elf32-score.c:2549
+#, c-format
+msgid "%s: Malformed reloc detected for section %s"
+msgstr ""
+
+#: elf32-score.c:2600
+msgid "%B: CALL15 reloc at 0x%lx not against global symbol"
+msgstr ""
+
+#: elf32-score.c:3755
+#, c-format
+msgid " [pic]"
+msgstr ""
+
+#: elf32-score.c:3759
+#, c-format
+msgid " [fix dep]"
+msgstr ""
+
+#: elf32-score.c:3801 elfxx-mips.c:11180
+msgid "%B: warning: linking PIC files with non-PIC files"
+msgstr ""
+
+#: elf32-sh64.c:221 elf64-sh64.c:2349
#, c-format
msgid "%s: compiled as 32-bit object and %s is 64-bit"
msgstr ""
-#: elf32-sh64.c:221 elf64-sh64.c:2325
+#: elf32-sh64.c:224 elf64-sh64.c:2352
#, c-format
msgid "%s: compiled as 64-bit object and %s is 32-bit"
msgstr ""
-#: elf32-sh64.c:223 elf64-sh64.c:2327
+#: elf32-sh64.c:226 elf64-sh64.c:2354
#, c-format
msgid "%s: object size does not match that of target %s"
msgstr ""
-#: elf32-sh64.c:446 elf64-sh64.c:2899
+#: elf32-sh64.c:449 elf64-sh64.c:2893
#, c-format
msgid "%s: encountered datalabel symbol in input"
msgstr ""
-#: elf32-sh64.c:523
+#: elf32-sh64.c:526
msgid "PTB mismatch: a SHmedia address (bit 0 == 1)"
msgstr ""
-#: elf32-sh64.c:526
+#: elf32-sh64.c:529
msgid "PTA mismatch: a SHcompact address (bit 0 == 0)"
msgstr ""
-#: elf32-sh64.c:544
+#: elf32-sh64.c:547
#, c-format
msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16"
msgstr ""
-#: elf32-sh64.c:593
+#: elf32-sh64.c:596
msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n"
msgstr ""
-#: elf32-sh64.c:669
+#: elf32-sh64.c:672
#, c-format
msgid "%s: could not write out added .cranges entries"
msgstr ""
-#: elf32-sh64.c:729
+#: elf32-sh64.c:732
#, c-format
msgid "%s: could not write out sorted .cranges entries"
msgstr ""
-#: elf32-sh.c:2176
+#: elf32-sh.c:532
msgid "%B: 0x%lx: warning: bad R_SH_USES offset"
msgstr ""
-#: elf32-sh.c:2188
+#: elf32-sh.c:544
msgid "%B: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x"
msgstr ""
-#: elf32-sh.c:2205
+#: elf32-sh.c:561
msgid "%B: 0x%lx: warning: bad R_SH_USES load offset"
msgstr ""
-#: elf32-sh.c:2220
+#: elf32-sh.c:576
msgid "%B: 0x%lx: warning: could not find expected reloc"
msgstr ""
-#: elf32-sh.c:2248
+#: elf32-sh.c:604
msgid "%B: 0x%lx: warning: symbol in unexpected section"
msgstr ""
-#: elf32-sh.c:2361
+#: elf32-sh.c:730
msgid "%B: 0x%lx: warning: could not find expected COUNT reloc"
msgstr ""
-#: elf32-sh.c:2370
+#: elf32-sh.c:739
msgid "%B: 0x%lx: warning: bad count"
msgstr ""
-#: elf32-sh.c:2765 elf32-sh.c:3135
+#: elf32-sh.c:1143 elf32-sh.c:1513
msgid "%B: 0x%lx: fatal: reloc overflow while relaxing"
msgstr ""
-#: elf32-sh.c:4566 elf64-sh64.c:1509
+#: elf32-sh.c:3248 elf64-sh64.c:1525
msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled"
msgstr ""
-#: elf32-sh.c:4791
+#: elf32-sh.c:3485
msgid "%B: 0x%lx: fatal: unaligned branch target for relax-support relocation"
msgstr ""
-#: elf32-sh.c:4824 elf32-sh.c:4839
+#: elf32-sh.c:3518 elf32-sh.c:3533
msgid "%B: 0x%lx: fatal: unaligned %s relocation 0x%lx"
msgstr ""
-#: elf32-sh.c:4853
+#: elf32-sh.c:3547
msgid "%B: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32"
msgstr ""
-#: elf32-sh.c:4867
+#: elf32-sh.c:3561
msgid "%B: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32"
msgstr ""
-#: elf32-sh.c:6601 elf64-alpha.c:4466
+#: elf32-sh.c:5274 elf64-alpha.c:4531
msgid "%B: TLS local exec code cannot be linked into shared objects"
msgstr ""
@@ -1581,57 +1708,138 @@ msgstr ""
msgid "%B: Failed to add renamed symbol %s"
msgstr ""
-#: elf32-sparc.c:87
+#: elf32-sparc.c:88
msgid "%B: compiled for a 64 bit system and target is 32 bit"
msgstr ""
-#: elf32-sparc.c:100
+#: elf32-sparc.c:101
msgid "%B: linking little endian files with big endian files"
msgstr ""
-#: elf32-v850.c:160
+#: elf32-spu.c:995
+msgid "warning: call to non-function symbol %s defined in %B"
+msgstr ""
+
+#: elf32-spu.c:1315
+msgid "%B is not allowed to define %s"
+msgstr ""
+
+#: elf32-spu.c:1352
+#, c-format
+msgid "%s in overlay section"
+msgstr ""
+
+#: elf32-spu.c:1363
+msgid "overlay stub relocation overflow"
+msgstr ""
+
+#: elf32-spu.c:1820
+#, c-format
+msgid "warning: %s overlaps %s\n"
+msgstr ""
+
+#: elf32-spu.c:1836
+#, c-format
+msgid "warning: %s exceeds section size\n"
+msgstr ""
+
+#: elf32-spu.c:1867
+msgid "%A:0x%v not found in function table\n"
+msgstr ""
+
+#: elf32-spu.c:1958
+msgid ""
+"%B(%A+0x%v): call to non-code section %B(%A), stack analysis incomplete\n"
+msgstr ""
+
+#: elf32-spu.c:2079
+#, c-format
+msgid "%A link_order not found\n"
+msgstr ""
+
+#: elf32-spu.c:2358
+#, c-format
+msgid "Stack analysis will ignore the call from %s to %s\n"
+msgstr ""
+
+#: elf32-spu.c:2513
+msgid "%s: 0x%v 0x%v\n"
+msgstr ""
+
+#: elf32-spu.c:2517
+msgid " calls:\n"
+msgstr ""
+
+#: elf32-spu.c:2524
+#, c-format
+msgid " %s%s %s\n"
+msgstr ""
+
+#: elf32-spu.c:2585
+msgid "Stack size for call graph root nodes.\n"
+msgstr ""
+
+#: elf32-spu.c:2586
+msgid ""
+"\n"
+"Stack size for functions. Annotations: '*' max stack, 't' tail call\n"
+msgstr ""
+
+#: elf32-spu.c:2615
+msgid " %s: 0x%v\n"
+msgstr ""
+
+#: elf32-spu.c:2625
+msgid "Maximum stack required is 0x%v\n"
+msgstr ""
+
+#: elf32-spu.c:2751
+msgid "%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'"
+msgstr ""
+
+#: elf32-v850.c:162
#, c-format
msgid "Variable `%s' cannot occupy in multiple small data regions"
msgstr ""
-#: elf32-v850.c:163
+#: elf32-v850.c:165
#, c-format
msgid ""
"Variable `%s' can only be in one of the small, zero, and tiny data regions"
msgstr ""
-#: elf32-v850.c:166
+#: elf32-v850.c:168
#, c-format
msgid ""
"Variable `%s' cannot be in both small and zero data regions simultaneously"
msgstr ""
-#: elf32-v850.c:169
+#: elf32-v850.c:171
#, c-format
msgid ""
"Variable `%s' cannot be in both small and tiny data regions simultaneously"
msgstr ""
-#: elf32-v850.c:172
+#: elf32-v850.c:174
#, c-format
msgid ""
"Variable `%s' cannot be in both zero and tiny data regions simultaneously"
msgstr ""
-#: elf32-v850.c:475
+#: elf32-v850.c:477
#, c-format
msgid "FAILED to find previous HI16 reloc\n"
msgstr ""
-#: elf32-v850.c:1684
+#: elf32-v850.c:1712
msgid "could not locate special linker symbol __gp"
msgstr ""
-#: elf32-v850.c:1688
+#: elf32-v850.c:1716
msgid "could not locate special linker symbol __ep"
msgstr ""
-#: elf32-v850.c:1692
+#: elf32-v850.c:1720
msgid "could not locate special linker symbol __ctbp"
msgstr ""
@@ -1659,145 +1867,144 @@ msgstr ""
msgid "v850e1 architecture"
msgstr ""
-#: elf32-vax.c:531
+#: elf32-vax.c:540
#, c-format
msgid " [nonpic]"
msgstr ""
-#: elf32-vax.c:534
+#: elf32-vax.c:543
#, c-format
msgid " [d-float]"
msgstr ""
-#: elf32-vax.c:537
+#: elf32-vax.c:546
#, c-format
msgid " [g-float]"
msgstr ""
-#: elf32-vax.c:647
+#: elf32-vax.c:656
#, c-format
msgid ""
"%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of "
"%ld"
msgstr ""
-#: elf32-vax.c:1604
+#: elf32-vax.c:1583
#, c-format
msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored"
msgstr ""
-#: elf32-vax.c:1728
+#: elf32-vax.c:1720
#, c-format
msgid "%s: warning: %s relocation against symbol `%s' from %s section"
msgstr ""
-#: elf32-vax.c:1734
+#: elf32-vax.c:1726
#, c-format
msgid "%s: warning: %s relocation to 0x%x from %s section"
msgstr ""
-#: elf32-xstormy16.c:425 elf32-ia64.c:2563 elf64-ia64.c:2563
+#: elf32-xstormy16.c:451 elf32-ia64.c:2961 elf64-ia64.c:2961
msgid "non-zero addend in @fptr reloc"
msgstr ""
-#: elf32-xtensa.c:705
+#: elf32-xtensa.c:733
msgid "%B(%A): invalid property table"
msgstr ""
-#: elf32-xtensa.c:2199
+#: elf32-xtensa.c:2177
msgid "%B(%A+0x%lx): relocation offset out of range (size=0x%x)"
msgstr ""
-#: elf32-xtensa.c:2256
+#: elf32-xtensa.c:2234
msgid "dynamic relocation in read-only section"
msgstr ""
-#: elf32-xtensa.c:2421
+#: elf32-xtensa.c:2407
msgid "internal inconsistency in size of .got.loc section"
msgstr ""
-#: elf32-xtensa.c:2735
+#: elf32-xtensa.c:2714
msgid "%B: incompatible machine type. Output is 0x%x. Input is 0x%x"
msgstr ""
-#: elf32-xtensa.c:3881 elf32-xtensa.c:3889
+#: elf32-xtensa.c:3920 elf32-xtensa.c:3928
msgid "Attempt to convert L32R/CALLX to CALL failed"
msgstr ""
-#: elf32-xtensa.c:5467 elf32-xtensa.c:5543 elf32-xtensa.c:6496
-#: elf32-xtensa.c:6550
+#: elf32-xtensa.c:5522 elf32-xtensa.c:5598 elf32-xtensa.c:6714
msgid ""
"%B(%A+0x%lx): could not decode instruction; possible configuration mismatch"
msgstr ""
-#: elf32-xtensa.c:6369 elf32-xtensa.c:6532
+#: elf32-xtensa.c:6454
msgid ""
"%B(%A+0x%lx): could not decode instruction for XTENSA_ASM_SIMPLIFY "
"relocation; possible configuration mismatch"
msgstr ""
-#: elf32-xtensa.c:7855
+#: elf32-xtensa.c:8166
msgid "invalid relocation address"
msgstr ""
-#: elf32-xtensa.c:7904
+#: elf32-xtensa.c:8215
msgid "overflow after relaxation"
msgstr ""
-#: elf32-xtensa.c:9032
+#: elf32-xtensa.c:9341
msgid "%B(%A+0x%lx): unexpected fix for %s relocation"
msgstr ""
-#: elf64-alpha.c:443
+#: elf64-alpha.c:451
msgid "GPDISP relocation did not find ldah and lda instructions"
msgstr ""
-#: elf64-alpha.c:2363
+#: elf64-alpha.c:2402
msgid "%B: .got subsegment exceeds 64K (size %d)"
msgstr ""
-#: elf64-alpha.c:4210 elf64-alpha.c:4222
+#: elf64-alpha.c:4275 elf64-alpha.c:4287
msgid "%B: gp-relative relocation against dynamic symbol %s"
msgstr ""
-#: elf64-alpha.c:4248 elf64-alpha.c:4383
+#: elf64-alpha.c:4313 elf64-alpha.c:4448
msgid "%B: pc-relative relocation against dynamic symbol %s"
msgstr ""
-#: elf64-alpha.c:4276
+#: elf64-alpha.c:4341
msgid "%B: change in gp: BRSGP %s"
msgstr ""
-#: elf64-alpha.c:4301
+#: elf64-alpha.c:4366
msgid "<unknown>"
msgstr ""
-#: elf64-alpha.c:4306
+#: elf64-alpha.c:4371
msgid "%B: !samegp reloc against symbol without .prologue: %s"
msgstr ""
-#: elf64-alpha.c:4358
+#: elf64-alpha.c:4423
msgid "%B: unhandled dynamic relocation against %s"
msgstr ""
-#: elf64-alpha.c:4390
+#: elf64-alpha.c:4455
msgid "%B: pc-relative relocation against undefined weak symbol %s"
msgstr ""
-#: elf64-alpha.c:4450
+#: elf64-alpha.c:4515
msgid "%B: dtp-relative relocation against dynamic symbol %s"
msgstr ""
-#: elf64-alpha.c:4473
+#: elf64-alpha.c:4538
msgid "%B: tp-relative relocation against dynamic symbol %s"
msgstr ""
-#: elf64-hppa.c:2046
+#: elf64-hppa.c:2039
#, c-format
msgid "stub entry for %s cannot load .plt, dp offset = %ld"
msgstr ""
-#: elf64-mmix.c:1163
+#: elf64-mmix.c:1175
#, c-format
msgid ""
"%s: Internal inconsistency error for value for\n"
@@ -1805,126 +2012,122 @@ msgid ""
"08lx\n"
msgstr ""
-#: elf64-mmix.c:1602
+#: elf64-mmix.c:1616
#, c-format
msgid ""
"%s: base-plus-offset relocation against register symbol: (unknown) in %s"
msgstr ""
-#: elf64-mmix.c:1607
+#: elf64-mmix.c:1621
#, c-format
msgid "%s: base-plus-offset relocation against register symbol: %s in %s"
msgstr ""
-#: elf64-mmix.c:1651
+#: elf64-mmix.c:1665
#, c-format
msgid "%s: register relocation against non-register symbol: (unknown) in %s"
msgstr ""
-#: elf64-mmix.c:1656
+#: elf64-mmix.c:1670
#, c-format
msgid "%s: register relocation against non-register symbol: %s in %s"
msgstr ""
-#: elf64-mmix.c:1693
+#: elf64-mmix.c:1707
#, c-format
msgid "%s: directive LOCAL valid only with a register or absolute value"
msgstr ""
-#: elf64-mmix.c:1721
+#: elf64-mmix.c:1735
#, c-format
msgid ""
"%s: LOCAL directive: Register $%ld is not a local register. First global "
"register is $%ld."
msgstr ""
-#: elf64-mmix.c:2207
+#: elf64-mmix.c:2200
#, c-format
msgid ""
"%s: Error: multiple definition of `%s'; start of %s is set in a earlier "
"linked file\n"
msgstr ""
-#: elf64-mmix.c:2265
+#: elf64-mmix.c:2258
msgid "Register section has contents\n"
msgstr ""
-#: elf64-mmix.c:2457
+#: elf64-mmix.c:2450
#, c-format
msgid ""
"Internal inconsistency: remaining %u != max %u.\n"
" Please report this bug."
msgstr ""
-#: elf64-ppc.c:2500 libbfd.c:931
+#: elf64-ppc.c:2568 libbfd.c:948
msgid "%B: compiled for a big endian system and target is little endian"
msgstr ""
-#: elf64-ppc.c:2503 libbfd.c:933
+#: elf64-ppc.c:2571 libbfd.c:950
msgid "%B: compiled for a little endian system and target is big endian"
msgstr ""
-#: elf64-ppc.c:5707
+#: elf64-ppc.c:5887
#, c-format
msgid ""
"copy reloc against `%s' requires lazy plt linking; avoid setting "
"LD_BIND_NOW=1 or upgrade gcc"
msgstr ""
-#: elf64-ppc.c:6155
+#: elf64-ppc.c:6315
msgid "dynreloc miscount for %B, section %A"
msgstr ""
-#: elf64-ppc.c:6257
+#: elf64-ppc.c:6419
msgid "%B: .opd is not a regular array of opd entries"
msgstr ""
-#: elf64-ppc.c:6266
+#: elf64-ppc.c:6428
msgid "%B: unexpected reloc type %u in .opd section"
msgstr ""
-#: elf64-ppc.c:6287
+#: elf64-ppc.c:6449
msgid "%B: undefined sym `%s' in .opd section"
msgstr ""
-#: elf64-ppc.c:6939 elf64-ppc.c:7318
+#: elf64-ppc.c:7156 elf64-ppc.c:7536
#, c-format
msgid "%s defined in removed toc entry"
msgstr ""
-#: elf64-ppc.c:8041
+#: elf64-ppc.c:8271
#, c-format
msgid "long branch stub `%s' offset overflow"
msgstr ""
-#: elf64-ppc.c:8116
+#: elf64-ppc.c:8346
#, c-format
msgid "can't find branch stub `%s'"
msgstr ""
-#: elf64-ppc.c:8155 elf64-ppc.c:8231
+#: elf64-ppc.c:8412 elf64-ppc.c:8488
#, c-format
msgid "linkage table error against `%s'"
msgstr ""
-#: elf64-ppc.c:8360
+#: elf64-ppc.c:8617
#, c-format
msgid "can't build branch stub `%s'"
msgstr ""
-#: elf64-ppc.c:8784
+#: elf64-ppc.c:9069
msgid "%B section %A exceeds stub group size"
msgstr ""
-#: elf64-ppc.c:9295
-msgid ".glink and .plt too far apart"
-msgstr ""
-
-#: elf64-ppc.c:9408
+#: elf64-ppc.c:9681
msgid "stubs don't match calculated size"
msgstr ""
-#: elf64-ppc.c:9420
+#: elf64-ppc.c:9693
#, c-format
msgid ""
"linker stubs in %u group%s\n"
@@ -1935,28 +2138,28 @@ msgid ""
" plt call %lu"
msgstr ""
-#: elf64-ppc.c:10075
+#: elf64-ppc.c:10377
msgid ""
"%B(%A+0x%lx): automatic multiple TOCs not supported using your crt files; "
"recompile with -mminimal-toc or upgrade gcc"
msgstr ""
-#: elf64-ppc.c:10083
+#: elf64-ppc.c:10385
msgid ""
"%B(%A+0x%lx): sibling call optimization to `%s' does not allow automatic "
"multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, "
"or make `%s' extern"
msgstr ""
-#: elf64-ppc.c:10727
+#: elf64-ppc.c:11036
msgid "%B: relocation %s is not supported for symbol %s."
msgstr ""
-#: elf64-ppc.c:10806
+#: elf64-ppc.c:11118
msgid "%B: error: relocation %s not a multiple of %d"
msgstr ""
-#: elf64-sh64.c:1676
+#: elf64-sh64.c:1700
#, c-format
msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n"
msgstr ""
@@ -1981,471 +2184,519 @@ msgstr ""
msgid "%B: linking UltraSPARC specific with HAL specific code"
msgstr ""
-#: elf64-x86-64.c:692 elf64-x86-64.c:818 elf64-x86-64.c:2069
+#: elf64-x86-64.c:798 elf64-x86-64.c:958 elf64-x86-64.c:2359
msgid ""
"%B: relocation %s against `%s' can not be used when making a shared object; "
"recompile with -fPIC"
msgstr ""
-#: elf64-x86-64.c:760
+#: elf64-x86-64.c:889
msgid "%B: %s' accessed both as normal and thread local symbol"
msgstr ""
-#: elf64-x86-64.c:2000
+#: elf64-x86-64.c:2271
msgid ""
"%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be "
"used when making a shared object"
msgstr ""
-#: elf64-x86-64.c:2065
+#: elf64-x86-64.c:2355
msgid ""
"%B: relocation R_X86_64_PC32 against protected function `%s' can not be used "
"when making a shared object"
msgstr ""
-#: elf.c:288
+#: elf-attrs.c:581
+msgid "ERROR: %B: Must be processed by '%s' toolchain"
+msgstr ""
+
+#: elf-attrs.c:601 elf-attrs.c:620
+msgid "ERROR: %B: Incompatible object tag '%s':%d"
+msgstr ""
+
+#: elf.c:309
msgid "%B: invalid string offset %u >= %lu for section `%s'"
msgstr ""
-#: elf.c:552
+#: elf.c:411
+msgid "%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
+msgstr ""
+
+#: elf.c:564
+msgid "%B: Corrupt size field in group section header: 0x%lx"
+msgstr ""
+
+#: elf.c:600
msgid "%B: invalid SHT_GROUP entry"
msgstr ""
-#: elf.c:622
+#: elf.c:670
msgid "%B: no group info for section %A"
msgstr ""
-#: elf.c:652 elf.c:3091 elflink.c:7588
+#: elf.c:700 elf.c:3251 elflink.c:9120
msgid "%B: warning: sh_link not set for section `%A'"
msgstr ""
-#: elf.c:688
+#: elf.c:716
+msgid "%B: sh_link [%d] in section `%A' is incorrect"
+msgstr ""
+
+#: elf.c:751
msgid "%B: unknown [%d] section `%s' in group [%s]"
msgstr ""
-#: elf.c:1071
+#: elf.c:1160
#, c-format
msgid ""
"\n"
"Program Header:\n"
msgstr ""
-#: elf.c:1123
+#: elf.c:1202
#, c-format
msgid ""
"\n"
"Dynamic Section:\n"
msgstr ""
-#: elf.c:1248
+#: elf.c:1328
#, c-format
msgid ""
"\n"
"Version definitions:\n"
msgstr ""
-#: elf.c:1273
+#: elf.c:1353
#, c-format
msgid ""
"\n"
"Version References:\n"
msgstr ""
-#: elf.c:1278
+#: elf.c:1358
#, c-format
msgid " required from %s:\n"
msgstr ""
-#: elf.c:1985
+#: elf.c:2054
msgid "%B: invalid link %lu for reloc section %s (index %u)"
msgstr ""
-#: elf.c:3062
+#: elf.c:2222
+msgid ""
+"%B: don't know how to handle allocated, application specific section `%s' [0x"
+"%8x]"
+msgstr ""
+
+#: elf.c:2234
+msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]"
+msgstr ""
+
+#: elf.c:2245
+msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]"
+msgstr ""
+
+#: elf.c:2255
+msgid "%B: don't know how to handle section `%s' [0x%8x]"
+msgstr ""
+
+#: elf.c:3208
msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'"
msgstr ""
-#: elf.c:4070
-msgid "%B: Not enough room for program headers (allocated %u, need %u)"
+#: elf.c:3231
+msgid "%B: sh_link of section `%A' points to removed section `%A' of `%B'"
msgstr ""
-#: elf.c:4173
+#: elf.c:4472
msgid ""
"%B: The first section in the PT_DYNAMIC segment is not the .dynamic section"
msgstr ""
-#: elf.c:4217
+#: elf.c:4495
msgid "%B: Not enough room for program headers, try linking with -N"
msgstr ""
-#: elf.c:4308
+#: elf.c:4573
msgid "%B: section %A lma 0x%lx overlaps previous sections"
msgstr ""
-#: elf.c:4709
+#: elf.c:4671
+msgid "%B: section `%A' can't be allocated in segment %d"
+msgstr ""
+
+#: elf.c:4720
msgid "%B: warning: allocated section `%s' not in segment"
msgstr ""
-#: elf.c:5002
+#: elf.c:5209
msgid "%B: symbol `%s' required but not present"
msgstr ""
-#: elf.c:5299
+#: elf.c:5522
msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n"
msgstr ""
-#: elf.c:5961
+#: elf.c:6425
#, c-format
msgid ""
"Unable to find equivalent output section for symbol '%s' from section '%s'"
msgstr ""
-#: elf.c:6917
+#: elf.c:7399
msgid "%B: unsupported relocation type %s"
msgstr ""
-#: elfcode.h:1110
+#: elfcode.h:810
+#, c-format
+msgid "warning: %s has a corrupt string table index - ignoring"
+msgstr ""
+
+#: elfcode.h:1176
#, c-format
msgid "%s: version count (%ld) does not match symbol count (%ld)"
msgstr ""
-#: elfcode.h:1337
+#: elfcode.h:1409
#, c-format
msgid "%s(%s): relocation %d has invalid symbol index %ld"
msgstr ""
-#: elf-hppa.h:1443 elf-hppa.h:1458
+#: elf-eh-frame.c:822
+msgid ""
+"%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.\n"
+msgstr ""
+
+#: elf-eh-frame.c:973
+msgid "%P: error in %B(%A); no .eh_frame_hdr table will be created.\n"
+msgstr ""
+
+#: elf-hppa.h:2218 elf-hppa.h:2232
msgid "%B(%A): warning: unresolvable relocation against symbol `%s'"
msgstr ""
-#: elflink.c:907
+#: elflink.c:1004
msgid ""
"%s: TLS definition in %B section %A mismatches non-TLS definition in %B "
"section %A"
msgstr ""
-#: elflink.c:911
+#: elflink.c:1008
msgid "%s: TLS reference in %B mismatches non-TLS reference in %B"
msgstr ""
-#: elflink.c:915
+#: elflink.c:1012
msgid "%s: TLS definition in %B section %A mismatches non-TLS reference in %B"
msgstr ""
-#: elflink.c:919
+#: elflink.c:1016
msgid "%s: TLS reference in %B mismatches non-TLS definition in %B section %A"
msgstr ""
-#: elflink.c:1491
+#: elflink.c:1630
msgid "%B: unexpected redefinition of indirect versioned symbol `%s'"
msgstr ""
-#: elflink.c:1807
-msgid "%B: undefined versioned symbol name %s"
+#: elflink.c:1950
+msgid "%B: version node not found for symbol %s"
msgstr ""
-#: elflink.c:1955
+#: elflink.c:2098
msgid ""
"%B: bad reloc symbol index (0x%lx >= 0x%lx) for offset 0x%lx in section `%A'"
msgstr ""
-#: elflink.c:2147
+#: elflink.c:2290
msgid "%B: relocation size mismatch in %B section %A"
msgstr ""
-#: elflink.c:2437
+#: elflink.c:2598
#, c-format
msgid "warning: type and size of dynamic symbol `%s' are not defined"
msgstr ""
-#: elflink.c:2761
-msgid "warning: creating a DT_TEXTREL in a shared object."
-msgstr ""
-
-#: elflink.c:3696
+#: elflink.c:3893
msgid "%B: %s: invalid version %u (max %d)"
msgstr ""
-#: elflink.c:3732
+#: elflink.c:3929
msgid "%B: %s: invalid needed version %d"
msgstr ""
-#: elflink.c:3912
+#: elflink.c:4112
+msgid ""
+"Warning: alignment %u of common symbol `%s' in %B is greater than the "
+"alignment (%u) of its section %A"
+msgstr ""
+
+#: elflink.c:4118
msgid "Warning: alignment %u of symbol `%s' in %B is smaller than %u in %B"
msgstr ""
-#: elflink.c:3924
+#: elflink.c:4133
msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B"
msgstr ""
-#: elflink.c:4091
+#: elflink.c:4309
#, c-format
msgid "%s: invalid DSO for symbol `%s' definition"
msgstr ""
-#: elflink.c:5152
+#: elflink.c:5535
#, c-format
msgid "%s: undefined version: %s"
msgstr ""
-#: elflink.c:5219
+#: elflink.c:5603
msgid "%B: .preinit_array section is not allowed in DSO"
msgstr ""
-#: elflink.c:5978
+#: elflink.c:6621
+#, c-format
+msgid "undefined %s reference in complex symbol: %s"
+msgstr ""
+
+#: elflink.c:6776
+#, c-format
+msgid "unknown operator '%c' in complex symbol"
+msgstr ""
+
+#: elflink.c:7315 elflink.c:7332 elflink.c:7369 elflink.c:7386
+msgid "%B: Unable to sort relocs - they are in more than one size"
+msgstr ""
+
+#: elflink.c:7346 elflink.c:7400
+msgid "%B: Unable to sort relocs - they are of an unknown size"
+msgstr ""
+
+#: elflink.c:7449
msgid "Not enough memory to sort relocations"
msgstr ""
-#: elflink.c:6369
+#: elflink.c:7636
+msgid "%B: Too many sections: %d (>= %d)"
+msgstr ""
+
+#: elflink.c:7870
msgid "%B: %s symbol `%s' in %B is referenced by DSO"
msgstr ""
-#: elflink.c:6452
+#: elflink.c:7953
msgid "%B: could not find output section %A for input section %A"
msgstr ""
-#: elflink.c:6549
+#: elflink.c:8050
msgid "%B: %s symbol `%s' isn't defined"
msgstr ""
-#: elflink.c:7024
+#: elflink.c:8546
msgid ""
"error: %B contains a reloc (0x%s) for section %A that references a non-"
"existent global symbol"
msgstr ""
-#: elflink.c:7058
+#: elflink.c:8580
msgid ""
"%X`%s' referenced in section `%A' of %B: defined in discarded section `%A' "
"of %B\n"
msgstr ""
-#: elflink.c:7665
+#: elflink.c:9198
msgid "%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections"
msgstr ""
-#: elflink.c:7670
+#: elflink.c:9203
#, c-format
msgid "%A has both ordered and unordered sections"
msgstr ""
-#: elflink.c:8487 elflink.c:8528
+#: elflink.c:10090 elflink.c:10134
msgid "%B: could not find output section %s"
msgstr ""
-#: elflink.c:8492
+#: elflink.c:10095
#, c-format
msgid "warning: %s section has zero size"
msgstr ""
-#: elflink.c:9087
+#: elflink.c:10199
+msgid "%P: warning: creating a DT_TEXTREL in a shared object.\n"
+msgstr ""
+
+#: elflink.c:10567
+msgid "Removing unused section '%s' in file '%B'"
+msgstr ""
+
+#: elflink.c:10758
msgid "Warning: gc-sections option ignored"
msgstr ""
-#: elflink.c:9704
+#: elflink.c:11249
+msgid "%P%X: can not read symbols: %E\n"
+msgstr ""
+
+#: elflink.c:11391
msgid "%B: ignoring duplicate section `%A'"
msgstr ""
-#: elflink.c:9711 elflink.c:9718
+#: elflink.c:11398 elflink.c:11405
msgid "%B: duplicate section `%A' has different size"
msgstr ""
-#: elflink.c:9726 elflink.c:9731
+#: elflink.c:11413 elflink.c:11418
msgid "%B: warning: could not read contents of section `%A'"
msgstr ""
-#: elflink.c:9735
+#: elflink.c:11422
msgid "%B: warning: duplicate section `%A' has different contents"
msgstr ""
-#: elfxx-mips.c:866
-msgid "static procedure (no name)"
+#: elf-m10300.c:1531
+msgid ""
+"error: inappropriate relocation type for shared library (did you forget -"
+"fpic?)"
msgstr ""
-#: elfxx-mips.c:2513
-msgid "not enough GOT space for local GOT entries"
+#: elf-m10300.c:1534
+msgid "internal error: suspicious relocation type used in shared library"
+msgstr ""
+
+#: elfxx-mips.c:986
+msgid "static procedure (no name)"
msgstr ""
-#: elfxx-mips.c:4356
+#: elfxx-mips.c:4657
msgid "%B: %A+0x%lx: jump to stub routine which is not jal"
msgstr ""
-#: elfxx-mips.c:4993 elfxx-mips.c:5214
+#: elfxx-mips.c:5320 elfxx-mips.c:5540
msgid "%B: Warning: bad `%s' option size %u smaller than its header"
msgstr ""
-#: elfxx-mips.c:5965
+#: elfxx-mips.c:6399
msgid "%B: Malformed reloc detected for section %s"
msgstr ""
-#: elfxx-mips.c:6041
+#: elfxx-mips.c:6441
+msgid "%B: GOT reloc at 0x%lx not expected in executables"
+msgstr ""
+
+#: elfxx-mips.c:6511
msgid "%B: CALL16 reloc at 0x%lx not against global symbol"
msgstr ""
-#: elfxx-mips.c:9380
+#: elfxx-mips.c:7874
+msgid ""
+"%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%"
+"A'"
+msgstr ""
+
+#: elfxx-mips.c:10640
#, c-format
msgid "%s: illegal section name `%s'"
msgstr ""
-#: elfxx-mips.c:9719
-msgid "%B: endianness incompatible with that of the selected emulation"
+#: elfxx-mips.c:11010 elfxx-mips.c:11029
+msgid "Warning: %B uses -msingle-float, %B uses -mdouble-float"
msgstr ""
-#: elfxx-mips.c:9731
-msgid "%B: ABI is incompatible with that of the selected emulation"
+#: elfxx-mips.c:11085
+msgid "%B: endianness incompatible with that of the selected emulation"
msgstr ""
-#: elfxx-mips.c:9803
-msgid "%B: warning: linking PIC files with non-PIC files"
+#: elfxx-mips.c:11097
+msgid "%B: ABI is incompatible with that of the selected emulation"
msgstr ""
-#: elfxx-mips.c:9820
+#: elfxx-mips.c:11197
msgid "%B: linking 32-bit code with 64-bit code"
msgstr ""
-#: elfxx-mips.c:9848
+#: elfxx-mips.c:11225
msgid "%B: linking %s module with previous %s modules"
msgstr ""
-#: elfxx-mips.c:9871
+#: elfxx-mips.c:11248
msgid "%B: ABI mismatch: linking %s module with previous %s modules"
msgstr ""
-#: elfxx-mips.c:9936
+#: elfxx-mips.c:11313
#, c-format
msgid " [abi=O32]"
msgstr ""
-#: elfxx-mips.c:9938
+#: elfxx-mips.c:11315
#, c-format
msgid " [abi=O64]"
msgstr ""
-#: elfxx-mips.c:9940
+#: elfxx-mips.c:11317
#, c-format
msgid " [abi=EABI32]"
msgstr ""
-#: elfxx-mips.c:9942
+#: elfxx-mips.c:11319
#, c-format
msgid " [abi=EABI64]"
msgstr ""
-#: elfxx-mips.c:9944
+#: elfxx-mips.c:11321
#, c-format
msgid " [abi unknown]"
msgstr ""
-#: elfxx-mips.c:9946
+#: elfxx-mips.c:11323
#, c-format
msgid " [abi=N32]"
msgstr ""
-#: elfxx-mips.c:9948
+#: elfxx-mips.c:11325
#, c-format
msgid " [abi=64]"
msgstr ""
-#: elfxx-mips.c:9950
+#: elfxx-mips.c:11327
#, c-format
msgid " [no abi set]"
msgstr ""
-#: elfxx-mips.c:9953
-#, c-format
-msgid " [mips1]"
-msgstr ""
-
-#: elfxx-mips.c:9955
-#, c-format
-msgid " [mips2]"
-msgstr ""
-
-#: elfxx-mips.c:9957
-#, c-format
-msgid " [mips3]"
-msgstr ""
-
-#: elfxx-mips.c:9959
-#, c-format
-msgid " [mips4]"
-msgstr ""
-
-#: elfxx-mips.c:9961
-#, c-format
-msgid " [mips5]"
-msgstr ""
-
-#: elfxx-mips.c:9963
-#, c-format
-msgid " [mips32]"
-msgstr ""
-
-#: elfxx-mips.c:9965
-#, c-format
-msgid " [mips64]"
-msgstr ""
-
-#: elfxx-mips.c:9967
-#, c-format
-msgid " [mips32r2]"
-msgstr ""
-
-#: elfxx-mips.c:9969
-#, c-format
-msgid " [mips64r2]"
-msgstr ""
-
-#: elfxx-mips.c:9971
+#: elfxx-mips.c:11348
#, c-format
msgid " [unknown ISA]"
msgstr ""
-#: elfxx-mips.c:9974
-#, c-format
-msgid " [mdmx]"
-msgstr ""
-
-#: elfxx-mips.c:9977
-#, c-format
-msgid " [mips16]"
-msgstr ""
-
-#: elfxx-mips.c:9980
-#, c-format
-msgid " [32bitmode]"
-msgstr ""
-
-#: elfxx-mips.c:9982
+#: elfxx-mips.c:11359
#, c-format
msgid " [not 32bitmode]"
msgstr ""
-#: elfxx-sparc.c:402
+#: elfxx-sparc.c:428
#, c-format
msgid "invalid relocation type %d"
msgstr ""
-#: elfxx-sparc.c:2783
+#: elfxx-sparc.c:2899
msgid "%B: probably compiled without -fPIC?"
msgstr ""
-#: i386linux.c:457 m68klinux.c:461 sparclinux.c:458
+#: i386linux.c:454 m68klinux.c:458 sparclinux.c:453
#, c-format
msgid "Output file requires shared library `%s'\n"
msgstr ""
-#: i386linux.c:465 m68klinux.c:469 sparclinux.c:466
+#: i386linux.c:462 m68klinux.c:466 sparclinux.c:461
#, c-format
msgid "Output file requires shared library `%s.so.%s'\n"
msgstr ""
-#: i386linux.c:654 i386linux.c:704 m68klinux.c:661 m68klinux.c:709
-#: sparclinux.c:656 sparclinux.c:706
+#: i386linux.c:651 i386linux.c:701 m68klinux.c:658 m68klinux.c:706
+#: sparclinux.c:651 sparclinux.c:701
#, c-format
msgid "Symbol %s not defined for fixups\n"
msgstr ""
-#: i386linux.c:728 m68klinux.c:733 sparclinux.c:730
+#: i386linux.c:725 m68klinux.c:730 sparclinux.c:725
msgid "Warning: fixup count mismatch\n"
msgstr ""
@@ -2479,161 +2730,161 @@ msgstr ""
msgid "%B:%u: bad checksum in Intel Hex file (expected %u, found %u)"
msgstr ""
-#: ihex.c:389
+#: ihex.c:390
msgid "%B:%u: bad extended address record length in Intel Hex file"
msgstr ""
-#: ihex.c:406
+#: ihex.c:407
msgid "%B:%u: bad extended start address length in Intel Hex file"
msgstr ""
-#: ihex.c:423
+#: ihex.c:424
msgid "%B:%u: bad extended linear address record length in Intel Hex file"
msgstr ""
-#: ihex.c:440
+#: ihex.c:441
msgid "%B:%u: bad extended linear start address length in Intel Hex file"
msgstr ""
-#: ihex.c:457
+#: ihex.c:458
msgid "%B:%u: unrecognized ihex type %u in Intel Hex file"
msgstr ""
-#: ihex.c:578
+#: ihex.c:577
msgid "%B: internal error in ihex_read_section"
msgstr ""
-#: ihex.c:612
+#: ihex.c:611
msgid "%B: bad section length in ihex_read_section"
msgstr ""
-#: ihex.c:824
+#: ihex.c:823
#, c-format
msgid "%s: address 0x%s out of range for Intel Hex file"
msgstr ""
-#: libbfd.c:961
+#: libbfd.c:978
#, c-format
msgid "Deprecated %s called at %s line %d in %s\n"
msgstr ""
-#: libbfd.c:964
+#: libbfd.c:981
#, c-format
msgid "Deprecated %s called\n"
msgstr ""
-#: linker.c:1873
+#: linker.c:1877
msgid "%B: indirect symbol `%s' to `%s' is a loop"
msgstr ""
-#: linker.c:2740
+#: linker.c:2743
#, c-format
msgid "Attempt to do relocatable link with %s input and %s output"
msgstr ""
-#: linker.c:3037
+#: linker.c:3044
msgid "%B: warning: ignoring duplicate section `%A'\n"
msgstr ""
-#: linker.c:3051
+#: linker.c:3058
msgid "%B: warning: duplicate section `%A' has different size\n"
msgstr ""
-#: merge.c:817
+#: merge.c:818
#, c-format
msgid "%s: access beyond end of merged section (%ld)"
msgstr ""
-#: mmo.c:456
+#: mmo.c:454
#, c-format
msgid "%s: No core to allocate section name %s\n"
msgstr ""
-#: mmo.c:531
+#: mmo.c:529
#, c-format
msgid "%s: No core to allocate a symbol %d bytes long\n"
msgstr ""
-#: mmo.c:1187
+#: mmo.c:1185
#, c-format
msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n"
msgstr ""
-#: mmo.c:1332
+#: mmo.c:1330
#, c-format
msgid ""
"%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name "
"starting with `%s'\n"
msgstr ""
-#: mmo.c:1566
+#: mmo.c:1564
#, c-format
msgid "%s: invalid mmo file: unsupported lopcode `%d'\n"
msgstr ""
-#: mmo.c:1576
+#: mmo.c:1574
#, c-format
msgid "%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
msgstr ""
-#: mmo.c:1612
+#: mmo.c:1610
#, c-format
msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
msgstr ""
-#: mmo.c:1658
+#: mmo.c:1656
#, c-format
msgid ""
"%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
msgstr ""
-#: mmo.c:1697
+#: mmo.c:1695
#, c-format
msgid "%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
msgstr ""
-#: mmo.c:1706
+#: mmo.c:1704
#, c-format
msgid ""
"%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
msgstr ""
-#: mmo.c:1729
+#: mmo.c:1727
#, c-format
msgid ""
"%s: invalid mmo file: leading byte of operand word must be 0 or 1, got %d "
"for lop_fixrx\n"
msgstr ""
-#: mmo.c:1752
+#: mmo.c:1750
#, c-format
msgid "%s: cannot allocate file name for file number %d, %d bytes\n"
msgstr ""
-#: mmo.c:1772
+#: mmo.c:1770
#, c-format
msgid ""
"%s: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
msgstr ""
-#: mmo.c:1785
+#: mmo.c:1783
#, c-format
msgid ""
"%s: invalid mmo file: file name for number %d was not specified before use\n"
msgstr ""
-#: mmo.c:1892
+#: mmo.c:1890
#, c-format
msgid ""
"%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
msgstr ""
-#: mmo.c:1928
+#: mmo.c:1926
#, c-format
msgid "%s: invalid mmo file: lop_end not last item in file\n"
msgstr ""
-#: mmo.c:1941
+#: mmo.c:1939
#, c-format
msgid ""
"%s: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras "
@@ -2686,7 +2937,7 @@ msgid ""
"08lx\n"
msgstr ""
-#: oasys.c:876
+#: oasys.c:880
#, c-format
msgid "%s: can not represent section `%s' in oasys"
msgstr ""
@@ -2697,37 +2948,37 @@ msgid "Unhandled OSF/1 core file section type %d\n"
msgstr ""
#. XXX code yet to be written.
-#: peicode.h:731
+#: peicode.h:757
msgid "%B: Unhandled import type; %x"
msgstr ""
-#: peicode.h:736
+#: peicode.h:762
msgid "%B: Unrecognised import type; %x"
msgstr ""
-#: peicode.h:750
+#: peicode.h:776
msgid "%B: Unrecognised import name type; %x"
msgstr ""
-#: peicode.h:1120
+#: peicode.h:1159
msgid "%B: Unrecognised machine type (0x%x) in Import Library Format archive"
msgstr ""
-#: peicode.h:1132
+#: peicode.h:1171
msgid ""
"%B: Recognised but unhandled machine type (0x%x) in Import Library Format "
"archive"
msgstr ""
-#: peicode.h:1150
+#: peicode.h:1189
msgid "%B: size field is zero in Import Library Format header"
msgstr ""
-#: peicode.h:1181
+#: peicode.h:1220
msgid "%B: string not null terminated in ILF object file."
msgstr ""
-#: pe-mips.c:588
+#: pe-mips.c:605
msgid "%B: `ld -r' not supported with PE MIPS objects\n"
msgstr ""
@@ -2735,75 +2986,75 @@ msgstr ""
#. src = VMA of the memory we're fixing up
#. mem = pointer to memory we're fixing up
#. val = VMA of what we need to refer to.
-#: pe-mips.c:704
+#: pe-mips.c:721
msgid "%B: unimplemented %s\n"
msgstr ""
-#: pe-mips.c:730
+#: pe-mips.c:747
msgid "%B: jump too far away\n"
msgstr ""
-#: pe-mips.c:756
+#: pe-mips.c:773
msgid "%B: bad pair/reflo after refhi\n"
msgstr ""
-#: ppcboot.c:419
+#: ppcboot.c:412
#, c-format
msgid ""
"\n"
"ppcboot header:\n"
msgstr ""
-#: ppcboot.c:420
+#: ppcboot.c:413
#, c-format
msgid "Entry offset = 0x%.8lx (%ld)\n"
msgstr ""
-#: ppcboot.c:421
+#: ppcboot.c:414
#, c-format
msgid "Length = 0x%.8lx (%ld)\n"
msgstr ""
-#: ppcboot.c:424
+#: ppcboot.c:417
#, c-format
msgid "Flag field = 0x%.2x\n"
msgstr ""
-#: ppcboot.c:430
+#: ppcboot.c:423
#, c-format
msgid "Partition name = \"%s\"\n"
msgstr ""
-#: ppcboot.c:449
+#: ppcboot.c:442
#, c-format
msgid ""
"\n"
"Partition[%d] start = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
msgstr ""
-#: ppcboot.c:455
+#: ppcboot.c:448
#, c-format
msgid "Partition[%d] end = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
msgstr ""
-#: ppcboot.c:461
+#: ppcboot.c:454
#, c-format
msgid "Partition[%d] sector = 0x%.8lx (%ld)\n"
msgstr ""
-#: ppcboot.c:462
+#: ppcboot.c:455
#, c-format
msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
msgstr ""
-#: som.c:5069
+#: som.c:5088
#, c-format
msgid ""
"\n"
"Exec Auxiliary Header\n"
msgstr ""
-#: som.c:5330
+#: som.c:5349
msgid "som_sizeof_headers unimplemented"
msgstr ""
@@ -2811,11 +3062,11 @@ msgstr ""
msgid "%B:%d: Unexpected character `%s' in S-record file\n"
msgstr ""
-#: stabs.c:276
+#: stabs.c:277
msgid "%B(%A+0x%lx): Stabs entry has invalid string index."
msgstr ""
-#: syms.c:1048
+#: syms.c:1056
msgid "Unsupported .stab relocation"
msgstr ""
@@ -2978,316 +3229,320 @@ msgstr ""
msgid "Unhandled relocation %s"
msgstr ""
-#: xcofflink.c:564
+#: xcofflink.c:565
#, c-format
msgid "%s: XCOFF shared object when not producing XCOFF output"
msgstr ""
-#: xcofflink.c:585
+#: xcofflink.c:586
#, c-format
msgid "%s: dynamic object with no .loader section"
msgstr ""
-#: xcofflink.c:1148
+#: xcofflink.c:1149
msgid "%B: `%s' has line numbers but no enclosing section"
msgstr ""
-#: xcofflink.c:1200
+#: xcofflink.c:1201
msgid "%B: class %d symbol `%s' has no aux entries"
msgstr ""
-#: xcofflink.c:1223
+#: xcofflink.c:1224
msgid "%B: symbol `%s' has unrecognized csect type %d"
msgstr ""
-#: xcofflink.c:1235
+#: xcofflink.c:1236
msgid "%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d"
msgstr ""
-#: xcofflink.c:1271
+#: xcofflink.c:1272
msgid "%B: XMC_TC0 symbol `%s' is class %d scnlen %d"
msgstr ""
-#: xcofflink.c:1417
+#: xcofflink.c:1418
msgid "%B: csect `%s' not in enclosing section"
msgstr ""
-#: xcofflink.c:1524
+#: xcofflink.c:1525
msgid "%B: misplaced XTY_LD `%s'"
msgstr ""
-#: xcofflink.c:1839
+#: xcofflink.c:1841
msgid "%B: reloc %s:%d not in csect"
msgstr ""
-#: xcofflink.c:2637
+#: xcofflink.c:2639
#, c-format
msgid "%s: no such symbol"
msgstr ""
-#: xcofflink.c:2866
+#: xcofflink.c:2868
#, c-format
msgid "warning: attempt to export undefined symbol `%s'"
msgstr ""
-#: xcofflink.c:3033
+#: xcofflink.c:3035
msgid "error: undefined symbol __rtinit"
msgstr ""
-#: xcofflink.c:3653
+#: xcofflink.c:3655
#, c-format
msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling"
msgstr ""
-#: xcofflink.c:4489
+#: xcofflink.c:4491
msgid "%B: loader reloc in unrecognized section `%A'"
msgstr ""
-#: xcofflink.c:4510
+#: xcofflink.c:4512
msgid "%B: `%s' in loader reloc but not loader sym"
msgstr ""
-#: xcofflink.c:4525
+#: xcofflink.c:4527
msgid "%B: loader reloc in read-only section %A"
msgstr ""
-#: xcofflink.c:4934 xcofflink.c:4996 xcofflink.c:5291
+#: xcofflink.c:4936 xcofflink.c:4998 xcofflink.c:5293
#, c-format
msgid "%s: loader reloc in unrecognized section `%s'"
msgstr ""
-#: xcofflink.c:5302
+#: xcofflink.c:5304
#, c-format
msgid "%s: `%s' in loader reloc but not loader sym"
msgstr ""
-#: elf32-ia64.c:1139 elf64-ia64.c:1139
+#: elf32-ia64.c:1168 elf64-ia64.c:1168
msgid ""
"%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect "
"branch."
msgstr ""
-#: elf32-ia64.c:2508 elf64-ia64.c:2508
+#: elf32-ia64.c:2909 elf64-ia64.c:2909
msgid "@pltoff reloc against local symbol"
msgstr ""
-#: elf32-ia64.c:3955 elf64-ia64.c:3955
+#: elf32-ia64.c:4522 elf64-ia64.c:4522
#, c-format
msgid "%s: short data segment overflowed (0x%lx >= 0x400000)"
msgstr ""
-#: elf32-ia64.c:3966 elf64-ia64.c:3966
+#: elf32-ia64.c:4533 elf64-ia64.c:4533
#, c-format
msgid "%s: __gp does not cover short data segment"
msgstr ""
-#: elf32-ia64.c:4213 elf64-ia64.c:4213
+#: elf32-ia64.c:4807 elf64-ia64.c:4807
msgid "%B: non-pic code with imm relocation against dynamic symbol `%s'"
msgstr ""
-#: elf32-ia64.c:4280 elf64-ia64.c:4280
+#: elf32-ia64.c:4874 elf64-ia64.c:4874
msgid "%B: @gprel relocation against dynamic symbol %s"
msgstr ""
-#: elf32-ia64.c:4343 elf64-ia64.c:4343
+#: elf32-ia64.c:4937 elf64-ia64.c:4937
msgid "%B: linking non-pic code in a position independent executable"
msgstr ""
-#: elf32-ia64.c:4480 elf64-ia64.c:4480
+#: elf32-ia64.c:5074 elf64-ia64.c:5074
msgid "%B: @internal branch to dynamic symbol %s"
msgstr ""
-#: elf32-ia64.c:4482 elf64-ia64.c:4482
+#: elf32-ia64.c:5076 elf64-ia64.c:5076
msgid "%B: speculation fixup to dynamic symbol %s"
msgstr ""
-#: elf32-ia64.c:4484 elf64-ia64.c:4484
+#: elf32-ia64.c:5078 elf64-ia64.c:5078
msgid "%B: @pcrel relocation against dynamic symbol %s"
msgstr ""
-#: elf32-ia64.c:4691 elf64-ia64.c:4691
+#: elf32-ia64.c:5278 elf64-ia64.c:5278
msgid "unsupported reloc"
msgstr ""
-#: elf32-ia64.c:4724 elf64-ia64.c:4724
+#: elf32-ia64.c:5311 elf64-ia64.c:5311
msgid ""
"%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> "
"0x1000000)."
msgstr ""
-#: elf32-ia64.c:4985 elf64-ia64.c:4985
+#: elf32-ia64.c:5572 elf64-ia64.c:5572
msgid "%B: linking trap-on-NULL-dereference with non-trapping files"
msgstr ""
-#: elf32-ia64.c:4994 elf64-ia64.c:4994
+#: elf32-ia64.c:5581 elf64-ia64.c:5581
msgid "%B: linking big-endian files with little-endian files"
msgstr ""
-#: elf32-ia64.c:5003 elf64-ia64.c:5003
+#: elf32-ia64.c:5590 elf64-ia64.c:5590
msgid "%B: linking 64-bit files with 32-bit files"
msgstr ""
-#: elf32-ia64.c:5012 elf64-ia64.c:5012
+#: elf32-ia64.c:5599 elf64-ia64.c:5599
msgid "%B: linking constant-gp files with non-constant-gp files"
msgstr ""
-#: elf32-ia64.c:5022 elf64-ia64.c:5022
+#: elf32-ia64.c:5609 elf64-ia64.c:5609
msgid "%B: linking auto-pic files with non-auto-pic files"
msgstr ""
-#: peigen.c:979 pepigen.c:979
+#: peigen.c:998 pepigen.c:998 pex64igen.c:998
#, c-format
msgid "%s: line number overflow: 0x%lx > 0xffff"
msgstr ""
-#: peigen.c:1006 pepigen.c:1006
+#: peigen.c:1025 pepigen.c:1025 pex64igen.c:1025
msgid "Export Directory [.edata (or where ever we found it)]"
msgstr ""
-#: peigen.c:1007 pepigen.c:1007
+#: peigen.c:1026 pepigen.c:1026 pex64igen.c:1026
msgid "Import Directory [parts of .idata]"
msgstr ""
-#: peigen.c:1008 pepigen.c:1008
+#: peigen.c:1027 pepigen.c:1027 pex64igen.c:1027
msgid "Resource Directory [.rsrc]"
msgstr ""
-#: peigen.c:1009 pepigen.c:1009
+#: peigen.c:1028 pepigen.c:1028 pex64igen.c:1028
msgid "Exception Directory [.pdata]"
msgstr ""
-#: peigen.c:1010 pepigen.c:1010
+#: peigen.c:1029 pepigen.c:1029 pex64igen.c:1029
msgid "Security Directory"
msgstr ""
-#: peigen.c:1011 pepigen.c:1011
+#: peigen.c:1030 pepigen.c:1030 pex64igen.c:1030
msgid "Base Relocation Directory [.reloc]"
msgstr ""
-#: peigen.c:1012 pepigen.c:1012
+#: peigen.c:1031 pepigen.c:1031 pex64igen.c:1031
msgid "Debug Directory"
msgstr ""
-#: peigen.c:1013 pepigen.c:1013
+#: peigen.c:1032 pepigen.c:1032 pex64igen.c:1032
msgid "Description Directory"
msgstr ""
-#: peigen.c:1014 pepigen.c:1014
+#: peigen.c:1033 pepigen.c:1033 pex64igen.c:1033
msgid "Special Directory"
msgstr ""
-#: peigen.c:1015 pepigen.c:1015
+#: peigen.c:1034 pepigen.c:1034 pex64igen.c:1034
msgid "Thread Storage Directory [.tls]"
msgstr ""
-#: peigen.c:1016 pepigen.c:1016
+#: peigen.c:1035 pepigen.c:1035 pex64igen.c:1035
msgid "Load Configuration Directory"
msgstr ""
-#: peigen.c:1017 pepigen.c:1017
+#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036
msgid "Bound Import Directory"
msgstr ""
-#: peigen.c:1018 pepigen.c:1018
+#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037
msgid "Import Address Table Directory"
msgstr ""
-#: peigen.c:1019 pepigen.c:1019
+#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038
msgid "Delay Import Directory"
msgstr ""
-#: peigen.c:1020 peigen.c:1021 pepigen.c:1020 pepigen.c:1021
+#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039
+msgid "CLR Runtime Header"
+msgstr ""
+
+#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040
msgid "Reserved"
msgstr ""
-#: peigen.c:1081 pepigen.c:1081
+#: peigen.c:1100 pepigen.c:1100 pex64igen.c:1100
#, c-format
msgid ""
"\n"
"There is an import table, but the section containing it could not be found\n"
msgstr ""
-#: peigen.c:1086 pepigen.c:1086
+#: peigen.c:1105 pepigen.c:1105 pex64igen.c:1105
#, c-format
msgid ""
"\n"
"There is an import table in %s at 0x%lx\n"
msgstr ""
-#: peigen.c:1129 pepigen.c:1129
+#: peigen.c:1148 pepigen.c:1148 pex64igen.c:1148
#, c-format
msgid ""
"\n"
"Function descriptor located at the start address: %04lx\n"
msgstr ""
-#: peigen.c:1132 pepigen.c:1132
+#: peigen.c:1151 pepigen.c:1151 pex64igen.c:1151
#, c-format
msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
msgstr ""
-#: peigen.c:1140 pepigen.c:1140
+#: peigen.c:1159 pepigen.c:1159 pex64igen.c:1159
#, c-format
msgid ""
"\n"
"No reldata section! Function descriptor not decoded.\n"
msgstr ""
-#: peigen.c:1145 pepigen.c:1145
+#: peigen.c:1164 pepigen.c:1164 pex64igen.c:1164
#, c-format
msgid ""
"\n"
"The Import Tables (interpreted %s section contents)\n"
msgstr ""
-#: peigen.c:1148 pepigen.c:1148
+#: peigen.c:1167 pepigen.c:1167 pex64igen.c:1167
#, c-format
msgid ""
" vma: Hint Time Forward DLL First\n"
" Table Stamp Chain Name Thunk\n"
msgstr ""
-#: peigen.c:1196 pepigen.c:1196
+#: peigen.c:1215 pepigen.c:1215 pex64igen.c:1215
#, c-format
msgid ""
"\n"
"\tDLL Name: %s\n"
msgstr ""
-#: peigen.c:1207 pepigen.c:1207
+#: peigen.c:1226 pepigen.c:1226 pex64igen.c:1226
#, c-format
msgid "\tvma: Hint/Ord Member-Name Bound-To\n"
msgstr ""
-#: peigen.c:1232 pepigen.c:1232
+#: peigen.c:1251 pepigen.c:1251 pex64igen.c:1251
#, c-format
msgid ""
"\n"
"There is a first thunk, but the section containing it could not be found\n"
msgstr ""
-#: peigen.c:1365 pepigen.c:1365
+#: peigen.c:1416 pepigen.c:1416 pex64igen.c:1416
#, c-format
msgid ""
"\n"
"There is an export table, but the section containing it could not be found\n"
msgstr ""
-#: peigen.c:1374 pepigen.c:1374
+#: peigen.c:1425 pepigen.c:1425 pex64igen.c:1425
#, c-format
msgid ""
"\n"
"There is an export table in %s, but it does not fit into that section\n"
msgstr ""
-#: peigen.c:1380 pepigen.c:1380
+#: peigen.c:1431 pepigen.c:1431 pex64igen.c:1431
#, c-format
msgid ""
"\n"
"There is an export table in %s at 0x%lx\n"
msgstr ""
-#: peigen.c:1408 pepigen.c:1408
+#: peigen.c:1459 pepigen.c:1459 pex64igen.c:1459
#, c-format
msgid ""
"\n"
@@ -3295,128 +3550,128 @@ msgid ""
"\n"
msgstr ""
-#: peigen.c:1412 pepigen.c:1412
+#: peigen.c:1463 pepigen.c:1463 pex64igen.c:1463
#, c-format
msgid "Export Flags \t\t\t%lx\n"
msgstr ""
-#: peigen.c:1415 pepigen.c:1415
+#: peigen.c:1466 pepigen.c:1466 pex64igen.c:1466
#, c-format
msgid "Time/Date stamp \t\t%lx\n"
msgstr ""
-#: peigen.c:1418 pepigen.c:1418
+#: peigen.c:1469 pepigen.c:1469 pex64igen.c:1469
#, c-format
msgid "Major/Minor \t\t\t%d/%d\n"
msgstr ""
-#: peigen.c:1421 pepigen.c:1421
+#: peigen.c:1472 pepigen.c:1472 pex64igen.c:1472
#, c-format
msgid "Name \t\t\t\t"
msgstr ""
-#: peigen.c:1427 pepigen.c:1427
+#: peigen.c:1478 pepigen.c:1478 pex64igen.c:1478
#, c-format
msgid "Ordinal Base \t\t\t%ld\n"
msgstr ""
-#: peigen.c:1430 pepigen.c:1430
+#: peigen.c:1481 pepigen.c:1481 pex64igen.c:1481
#, c-format
msgid "Number in:\n"
msgstr ""
-#: peigen.c:1433 pepigen.c:1433
+#: peigen.c:1484 pepigen.c:1484 pex64igen.c:1484
#, c-format
msgid "\tExport Address Table \t\t%08lx\n"
msgstr ""
-#: peigen.c:1437 pepigen.c:1437
+#: peigen.c:1488 pepigen.c:1488 pex64igen.c:1488
#, c-format
msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
msgstr ""
-#: peigen.c:1440 pepigen.c:1440
+#: peigen.c:1491 pepigen.c:1491 pex64igen.c:1491
#, c-format
msgid "Table Addresses\n"
msgstr ""
-#: peigen.c:1443 pepigen.c:1443
+#: peigen.c:1494 pepigen.c:1494 pex64igen.c:1494
#, c-format
msgid "\tExport Address Table \t\t"
msgstr ""
-#: peigen.c:1448 pepigen.c:1448
+#: peigen.c:1499 pepigen.c:1499 pex64igen.c:1499
#, c-format
msgid "\tName Pointer Table \t\t"
msgstr ""
-#: peigen.c:1453 pepigen.c:1453
+#: peigen.c:1504 pepigen.c:1504 pex64igen.c:1504
#, c-format
msgid "\tOrdinal Table \t\t\t"
msgstr ""
-#: peigen.c:1467 pepigen.c:1467
+#: peigen.c:1518 pepigen.c:1518 pex64igen.c:1518
#, c-format
msgid ""
"\n"
"Export Address Table -- Ordinal Base %ld\n"
msgstr ""
-#: peigen.c:1486 pepigen.c:1486
+#: peigen.c:1537 pepigen.c:1537 pex64igen.c:1537
msgid "Forwarder RVA"
msgstr ""
-#: peigen.c:1497 pepigen.c:1497
+#: peigen.c:1548 pepigen.c:1548 pex64igen.c:1548
msgid "Export RVA"
msgstr ""
-#: peigen.c:1504 pepigen.c:1504
+#: peigen.c:1555 pepigen.c:1555 pex64igen.c:1555
#, c-format
msgid ""
"\n"
"[Ordinal/Name Pointer] Table\n"
msgstr ""
-#: peigen.c:1557 pepigen.c:1557
+#: peigen.c:1608 pepigen.c:1608 pex64igen.c:1608
#, c-format
msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n"
msgstr ""
-#: peigen.c:1561 pepigen.c:1561
+#: peigen.c:1612 pepigen.c:1612 pex64igen.c:1612
#, c-format
msgid ""
"\n"
"The Function Table (interpreted .pdata section contents)\n"
msgstr ""
-#: peigen.c:1564 pepigen.c:1564
+#: peigen.c:1615 pepigen.c:1615 pex64igen.c:1615
#, c-format
msgid " vma:\t\t\tBegin Address End Address Unwind Info\n"
msgstr ""
-#: peigen.c:1566 pepigen.c:1566
+#: peigen.c:1617 pepigen.c:1617 pex64igen.c:1617
#, c-format
msgid ""
" vma:\t\tBegin End EH EH PrologEnd Exception\n"
" \t\tAddress Address Handler Data Address Mask\n"
msgstr ""
-#: peigen.c:1636 pepigen.c:1636
+#: peigen.c:1687 pepigen.c:1687 pex64igen.c:1687
#, c-format
msgid " Register save millicode"
msgstr ""
-#: peigen.c:1639 pepigen.c:1639
+#: peigen.c:1690 pepigen.c:1690 pex64igen.c:1690
#, c-format
msgid " Register restore millicode"
msgstr ""
-#: peigen.c:1642 pepigen.c:1642
+#: peigen.c:1693 pepigen.c:1693 pex64igen.c:1693
#, c-format
msgid " Glue code sequence"
msgstr ""
-#: peigen.c:1692 pepigen.c:1692
+#: peigen.c:1743 pepigen.c:1743 pex64igen.c:1743
#, c-format
msgid ""
"\n"
@@ -3424,14 +3679,14 @@ msgid ""
"PE File Base Relocations (interpreted .reloc section contents)\n"
msgstr ""
-#: peigen.c:1722 pepigen.c:1722
+#: peigen.c:1773 pepigen.c:1773 pex64igen.c:1773
#, c-format
msgid ""
"\n"
"Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n"
msgstr ""
-#: peigen.c:1735 pepigen.c:1735
+#: peigen.c:1786 pepigen.c:1786 pex64igen.c:1786
#, c-format
msgid "\treloc %4d offset %4x [%4lx] %s"
msgstr ""
@@ -3439,9 +3694,31 @@ msgstr ""
#. The MS dumpbin program reportedly ands with 0xff0f before
#. printing the characteristics field. Not sure why. No reason to
#. emulate it here.
-#: peigen.c:1773 pepigen.c:1773
+#: peigen.c:1825 pepigen.c:1825 pex64igen.c:1825
#, c-format
msgid ""
"\n"
"Characteristics 0x%x\n"
msgstr ""
+
+#: peigen.c:2086 pepigen.c:2086 pex64igen.c:2086
+msgid "%B: unable to fill in DataDictionary[1] because .idata$2 is missing"
+msgstr ""
+
+#: peigen.c:2104 pepigen.c:2104 pex64igen.c:2104
+msgid "%B: unable to fill in DataDictionary[1] because .idata$4 is missing"
+msgstr ""
+
+#: peigen.c:2123 pepigen.c:2123 pex64igen.c:2123
+msgid "%B: unable to fill in DataDictionary[12] because .idata$5 is missing"
+msgstr ""
+
+#: peigen.c:2141 pepigen.c:2141 pex64igen.c:2141
+msgid ""
+"%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because ."
+"idata$6 is missing"
+msgstr ""
+
+#: peigen.c:2161 pepigen.c:2161 pex64igen.c:2161
+msgid "%B: unable to fill in DataDictionary[9] because __tls_used is missing"
+msgstr ""
diff --git a/bfd/po/da.gmo b/bfd/po/da.gmo
deleted file mode 100644
index 944a11c1610b..000000000000
--- a/bfd/po/da.gmo
+++ /dev/null
Binary files differ
diff --git a/bfd/po/es.gmo b/bfd/po/es.gmo
deleted file mode 100644
index 4097899662a1..000000000000
--- a/bfd/po/es.gmo
+++ /dev/null
Binary files differ
diff --git a/bfd/po/fr.gmo b/bfd/po/fr.gmo
deleted file mode 100644
index 1a6948d5b93c..000000000000
--- a/bfd/po/fr.gmo
+++ /dev/null
Binary files differ
diff --git a/bfd/po/ja.gmo b/bfd/po/ja.gmo
deleted file mode 100644
index f8142480577e..000000000000
--- a/bfd/po/ja.gmo
+++ /dev/null
Binary files differ
diff --git a/bfd/po/ro.gmo b/bfd/po/ro.gmo
deleted file mode 100644
index 8621928313f6..000000000000
--- a/bfd/po/ro.gmo
+++ /dev/null
Binary files differ
diff --git a/bfd/po/rw.gmo b/bfd/po/rw.gmo
deleted file mode 100644
index 49d9e2fd45e3..000000000000
--- a/bfd/po/rw.gmo
+++ /dev/null
Binary files differ
diff --git a/bfd/po/sv.gmo b/bfd/po/sv.gmo
deleted file mode 100644
index e746ec02e756..000000000000
--- a/bfd/po/sv.gmo
+++ /dev/null
Binary files differ
diff --git a/bfd/po/tr.gmo b/bfd/po/tr.gmo
deleted file mode 100644
index 74c0ea8fc2dd..000000000000
--- a/bfd/po/tr.gmo
+++ /dev/null
Binary files differ
diff --git a/bfd/po/vi.gmo b/bfd/po/vi.gmo
deleted file mode 100644
index f5683c6169d6..000000000000
--- a/bfd/po/vi.gmo
+++ /dev/null
Binary files differ
diff --git a/bfd/po/zh_CN.gmo b/bfd/po/zh_CN.gmo
deleted file mode 100644
index 501f89d427f5..000000000000
--- a/bfd/po/zh_CN.gmo
+++ /dev/null
Binary files differ
diff --git a/bfd/ppcboot.c b/bfd/ppcboot.c
index 7c8a4190bac2..da8c6b8019bd 100644
--- a/bfd/ppcboot.c
+++ b/bfd/ppcboot.c
@@ -1,6 +1,6 @@
/* BFD back-end for PPCbug boot records.
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006,
+ 2007 Free Software Foundation, Inc.
Written by Michael Meissner, Cygnus Support, <meissner@cygnus.com>
This file is part of BFD, the Binary File Descriptor library.
@@ -32,9 +32,9 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
the file. objcopy cooperates by specially setting the start
address to zero by default. */
+#include "sysdep.h"
#include "safe-ctype.h"
#include "bfd.h"
-#include "sysdep.h"
#include "libbfd.h"
/* PPCbug location structure */
@@ -99,7 +99,6 @@ static long ppcboot_canonicalize_symtab PARAMS ((bfd *, asymbol **));
static void ppcboot_get_symbol_info PARAMS ((bfd *, asymbol *, symbol_info *));
static bfd_boolean ppcboot_set_section_contents
PARAMS ((bfd *, asection *, const PTR, file_ptr, bfd_size_type));
-static int ppcboot_sizeof_headers PARAMS ((bfd *, bfd_boolean));
static bfd_boolean ppcboot_bfd_print_private_bfd_data PARAMS ((bfd *, PTR));
#define ppcboot_set_tdata(abfd, ptr) ((abfd)->tdata.any = (PTR) (ptr))
@@ -151,6 +150,7 @@ ppcboot_object_p (abfd)
ppcboot_hdr_t hdr;
size_t i;
ppcboot_data_t *tdata;
+ flagword flags;
BFD_ASSERT (sizeof (ppcboot_hdr_t) == 1024);
@@ -205,10 +205,10 @@ ppcboot_object_p (abfd)
abfd->symcount = PPCBOOT_SYMS;
/* One data section. */
- sec = bfd_make_section (abfd, ".data");
+ flags = SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_CODE | SEC_HAS_CONTENTS;
+ sec = bfd_make_section_with_flags (abfd, ".data", flags);
if (sec == NULL)
return NULL;
- sec->flags = SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_CODE | SEC_HAS_CONTENTS;
sec->vma = 0;
sec->size = statbuf.st_size - sizeof (ppcboot_hdr_t);
sec->filepos = sizeof (ppcboot_hdr_t);
@@ -354,12 +354,6 @@ ppcboot_get_symbol_info (ignore_abfd, symbol, ret)
#define ppcboot_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define ppcboot_read_minisymbols _bfd_generic_read_minisymbols
#define ppcboot_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
-
-#define ppcboot_get_reloc_upper_bound \
- ((long (*) PARAMS ((bfd *, asection *))) bfd_0l)
-#define ppcboot_canonicalize_reloc \
- ((long (*) PARAMS ((bfd *, asection *, arelent **, asymbol **))) bfd_0l)
-#define ppcboot_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
/* Write section contents of a ppcboot file. */
@@ -395,9 +389,8 @@ ppcboot_set_section_contents (abfd, sec, data, offset, size)
static int
-ppcboot_sizeof_headers (abfd, exec)
- bfd *abfd ATTRIBUTE_UNUSED;
- bfd_boolean exec ATTRIBUTE_UNUSED;
+ppcboot_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return sizeof (ppcboot_hdr_t);
}
@@ -535,7 +528,7 @@ const bfd_target ppcboot_vec =
BFD_JUMP_TABLE_CORE (_bfd_nocore),
BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
BFD_JUMP_TABLE_SYMBOLS (ppcboot),
- BFD_JUMP_TABLE_RELOCS (ppcboot),
+ BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
BFD_JUMP_TABLE_WRITE (ppcboot),
BFD_JUMP_TABLE_LINK (ppcboot),
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
diff --git a/bfd/ptrace-core.c b/bfd/ptrace-core.c
index 4ac28aa1dece..8607225da16f 100644
--- a/bfd/ptrace-core.c
+++ b/bfd/ptrace-core.c
@@ -1,6 +1,6 @@
/* BFD backend for core files which use the ptrace_user structure
- Copyright 1993, 1994, 1995, 1996, 1998, 1999, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
+ Copyright 1993, 1994, 1995, 1996, 1998, 1999, 2001, 2002, 2003, 2004,
+ 2006, 2007 Free Software Foundation, Inc.
The structure of this file is based on trad-core.c written by John Gilmore
of Cygnus Support.
Modified to work with the ptrace_user structure by Kevin A. Buettner.
@@ -24,8 +24,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#ifdef PTRACE_CORE
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include <sys/param.h>
@@ -63,6 +63,7 @@ ptrace_unix_core_file_p (abfd)
struct ptrace_user u;
struct trad_core_struct *rawptr;
bfd_size_type amt;
+ flagword flags;
val = bfd_bread ((void *)&u, (bfd_size_type) sizeof u, abfd);
if (val != sizeof u || u.pt_magic != _BCS_PTRACE_MAGIC
@@ -89,13 +90,17 @@ ptrace_unix_core_file_p (abfd)
/* Create the sections. */
- core_stacksec (abfd) = bfd_make_section_anyway (abfd, ".stack");
+ flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
+ core_stacksec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".stack",
+ flags);
if (core_stacksec (abfd) == NULL)
goto fail;
- core_datasec (abfd) = bfd_make_section_anyway (abfd, ".data");
+ core_datasec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".data",
+ flags);
if (core_datasec (abfd) == NULL)
goto fail;
- core_regsec (abfd) = bfd_make_section_anyway (abfd, ".reg");
+ core_regsec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".reg",
+ SEC_HAS_CONTENTS);
if (core_regsec (abfd) == NULL)
goto fail;
@@ -103,10 +108,6 @@ ptrace_unix_core_file_p (abfd)
text. I don't think that any of these things are supported on the
system on which I am developing this for though. */
- core_stacksec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
- core_datasec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
- core_regsec (abfd)->flags = SEC_HAS_CONTENTS;
-
core_datasec (abfd)->size = u.pt_dsize;
core_stacksec (abfd)->size = u.pt_ssize;
core_regsec (abfd)->size = sizeof (u);
diff --git a/bfd/reloc.c b/bfd/reloc.c
index f1d09a5ab073..1e5d4bd03fa7 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -1,6 +1,6 @@
/* BFD support for handling relocation entries.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -47,8 +47,8 @@ SECTION
/* DO compile in the reloc_code name table from libbfd.h. */
#define _BFD_MAKE_TABLE_bfd_reloc_code_real
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
/*
@@ -1522,7 +1522,6 @@ _bfd_relocate_contents (reloc_howto_type *howto,
switch (size)
{
default:
- case 0:
abort ();
case 1:
bfd_put_8 (input_bfd, x, location);
@@ -1545,6 +1544,72 @@ _bfd_relocate_contents (reloc_howto_type *howto,
return flag;
}
+/* Clear a given location using a given howto, by applying a relocation value
+ of zero and discarding any in-place addend. This is used for fixed-up
+ relocations against discarded symbols, to make ignorable debug or unwind
+ information more obvious. */
+
+void
+_bfd_clear_contents (reloc_howto_type *howto,
+ bfd *input_bfd,
+ bfd_byte *location)
+{
+ int size;
+ bfd_vma x = 0;
+
+ /* Get the value we are going to relocate. */
+ size = bfd_get_reloc_size (howto);
+ switch (size)
+ {
+ default:
+ case 0:
+ abort ();
+ case 1:
+ x = bfd_get_8 (input_bfd, location);
+ break;
+ case 2:
+ x = bfd_get_16 (input_bfd, location);
+ break;
+ case 4:
+ x = bfd_get_32 (input_bfd, location);
+ break;
+ case 8:
+#ifdef BFD64
+ x = bfd_get_64 (input_bfd, location);
+#else
+ abort ();
+#endif
+ break;
+ }
+
+ /* Zero out the unwanted bits of X. */
+ x &= ~howto->dst_mask;
+
+ /* Put the relocated value back in the object file. */
+ switch (size)
+ {
+ default:
+ case 0:
+ abort ();
+ case 1:
+ bfd_put_8 (input_bfd, x, location);
+ break;
+ case 2:
+ bfd_put_16 (input_bfd, x, location);
+ break;
+ case 4:
+ bfd_put_32 (input_bfd, x, location);
+ break;
+ case 8:
+#ifdef BFD64
+ bfd_put_64 (input_bfd, x, location);
+#else
+ abort ();
+#endif
+ break;
+ }
+}
+
/*
DOCDD
INODE
@@ -1884,6 +1949,37 @@ ENUMDOC
SPARC TLS relocations
ENUM
+ BFD_RELOC_SPU_IMM7
+ENUMX
+ BFD_RELOC_SPU_IMM8
+ENUMX
+ BFD_RELOC_SPU_IMM10
+ENUMX
+ BFD_RELOC_SPU_IMM10W
+ENUMX
+ BFD_RELOC_SPU_IMM16
+ENUMX
+ BFD_RELOC_SPU_IMM16W
+ENUMX
+ BFD_RELOC_SPU_IMM18
+ENUMX
+ BFD_RELOC_SPU_PCREL9a
+ENUMX
+ BFD_RELOC_SPU_PCREL9b
+ENUMX
+ BFD_RELOC_SPU_PCREL16
+ENUMX
+ BFD_RELOC_SPU_LO16
+ENUMX
+ BFD_RELOC_SPU_HI16
+ENUMX
+ BFD_RELOC_SPU_PPU32
+ENUMX
+ BFD_RELOC_SPU_PPU64
+ENUMDOC
+ SPU Relocations.
+
+ENUM
BFD_RELOC_ALPHA_GPDISP_HI16
ENUMDOC
Alpha ECOFF and ELF relocations. Some of these treat the symbol or
@@ -2701,6 +2797,24 @@ ENUM
BFD_RELOC_ARM_PREL31
ENUMDOC
31-bit PC relative address.
+ENUM
+ BFD_RELOC_ARM_MOVW
+ENUMX
+ BFD_RELOC_ARM_MOVT
+ENUMX
+ BFD_RELOC_ARM_MOVW_PCREL
+ENUMX
+ BFD_RELOC_ARM_MOVT_PCREL
+ENUMX
+ BFD_RELOC_ARM_THUMB_MOVW
+ENUMX
+ BFD_RELOC_ARM_THUMB_MOVT
+ENUMX
+ BFD_RELOC_ARM_THUMB_MOVW_PCREL
+ENUMX
+ BFD_RELOC_ARM_THUMB_MOVT_PCREL
+ENUMDOC
+ Low and High halfword relocations for MOVW and MOVT instructions.
ENUM
BFD_RELOC_ARM_JUMP_SLOT
@@ -2739,12 +2853,73 @@ ENUMDOC
ARM thread-local storage relocations.
ENUM
+ BFD_RELOC_ARM_ALU_PC_G0_NC
+ENUMX
+ BFD_RELOC_ARM_ALU_PC_G0
+ENUMX
+ BFD_RELOC_ARM_ALU_PC_G1_NC
+ENUMX
+ BFD_RELOC_ARM_ALU_PC_G1
+ENUMX
+ BFD_RELOC_ARM_ALU_PC_G2
+ENUMX
+ BFD_RELOC_ARM_LDR_PC_G0
+ENUMX
+ BFD_RELOC_ARM_LDR_PC_G1
+ENUMX
+ BFD_RELOC_ARM_LDR_PC_G2
+ENUMX
+ BFD_RELOC_ARM_LDRS_PC_G0
+ENUMX
+ BFD_RELOC_ARM_LDRS_PC_G1
+ENUMX
+ BFD_RELOC_ARM_LDRS_PC_G2
+ENUMX
+ BFD_RELOC_ARM_LDC_PC_G0
+ENUMX
+ BFD_RELOC_ARM_LDC_PC_G1
+ENUMX
+ BFD_RELOC_ARM_LDC_PC_G2
+ENUMX
+ BFD_RELOC_ARM_ALU_SB_G0_NC
+ENUMX
+ BFD_RELOC_ARM_ALU_SB_G0
+ENUMX
+ BFD_RELOC_ARM_ALU_SB_G1_NC
+ENUMX
+ BFD_RELOC_ARM_ALU_SB_G1
+ENUMX
+ BFD_RELOC_ARM_ALU_SB_G2
+ENUMX
+ BFD_RELOC_ARM_LDR_SB_G0
+ENUMX
+ BFD_RELOC_ARM_LDR_SB_G1
+ENUMX
+ BFD_RELOC_ARM_LDR_SB_G2
+ENUMX
+ BFD_RELOC_ARM_LDRS_SB_G0
+ENUMX
+ BFD_RELOC_ARM_LDRS_SB_G1
+ENUMX
+ BFD_RELOC_ARM_LDRS_SB_G2
+ENUMX
+ BFD_RELOC_ARM_LDC_SB_G0
+ENUMX
+ BFD_RELOC_ARM_LDC_SB_G1
+ENUMX
+ BFD_RELOC_ARM_LDC_SB_G2
+ENUMDOC
+ ARM group relocations.
+
+ENUM
BFD_RELOC_ARM_IMMEDIATE
ENUMX
BFD_RELOC_ARM_ADRL_IMMEDIATE
ENUMX
BFD_RELOC_ARM_T32_IMMEDIATE
ENUMX
+ BFD_RELOC_ARM_T32_ADD_IMM
+ENUMX
BFD_RELOC_ARM_T32_IMM12
ENUMX
BFD_RELOC_ARM_T32_ADD_PC12
@@ -3530,6 +3705,50 @@ ENUMDOC
Motorola Mcore relocations.
ENUM
+ BFD_RELOC_MEP_8
+ENUMX
+ BFD_RELOC_MEP_16
+ENUMX
+ BFD_RELOC_MEP_32
+ENUMX
+ BFD_RELOC_MEP_PCREL8A2
+ENUMX
+ BFD_RELOC_MEP_PCREL12A2
+ENUMX
+ BFD_RELOC_MEP_PCREL17A2
+ENUMX
+ BFD_RELOC_MEP_PCREL24A2
+ENUMX
+ BFD_RELOC_MEP_PCABS24A2
+ENUMX
+ BFD_RELOC_MEP_LOW16
+ENUMX
+ BFD_RELOC_MEP_HI16U
+ENUMX
+ BFD_RELOC_MEP_HI16S
+ENUMX
+ BFD_RELOC_MEP_GPREL
+ENUMX
+ BFD_RELOC_MEP_TPREL
+ENUMX
+ BFD_RELOC_MEP_TPREL7
+ENUMX
+ BFD_RELOC_MEP_TPREL7A2
+ENUMX
+ BFD_RELOC_MEP_TPREL7A4
+ENUMX
+ BFD_RELOC_MEP_UIMM24
+ENUMX
+ BFD_RELOC_MEP_ADDR24A4
+ENUMX
+ BFD_RELOC_MEP_GNU_VTINHERIT
+ENUMX
+ BFD_RELOC_MEP_GNU_VTENTRY
+ENUMDOC
+ Toshiba Media Processor Relocations.
+COMMENT
+
+ENUM
BFD_RELOC_MMIX_GETA
ENUMX
BFD_RELOC_MMIX_GETA_1
@@ -3666,11 +3885,25 @@ ENUMDOC
This is a 16 bit reloc for the AVR that stores 8 bit value (usually
command address) into 8 bit immediate value of LDI insn.
ENUM
+ BFD_RELOC_AVR_LO8_LDI_GS
+ENUMDOC
+ This is a 16 bit reloc for the AVR that stores 8 bit value
+ (command address) into 8 bit immediate value of LDI insn. If the address
+ is beyond the 128k boundary, the linker inserts a jump stub for this reloc
+ in the lower 128k.
+ENUM
BFD_RELOC_AVR_HI8_LDI_PM
ENUMDOC
This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
of command address) into 8 bit immediate value of LDI insn.
ENUM
+ BFD_RELOC_AVR_HI8_LDI_GS
+ENUMDOC
+ This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
+ of command address) into 8 bit immediate value of LDI insn. If the address
+ is beyond the 128k boundary, the linker inserts a jump stub for this reloc
+ below 128k.
+ENUM
BFD_RELOC_AVR_HH8_LDI_PM
ENUMDOC
This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
@@ -3873,6 +4106,43 @@ ENUMDOC
Long displacement extension.
ENUM
+ BFD_RELOC_SCORE_DUMMY1
+ENUMDOC
+ Score relocations
+ENUM
+ BFD_RELOC_SCORE_GPREL15
+ENUMDOC
+ Low 16 bit for load/store
+ENUM
+ BFD_RELOC_SCORE_DUMMY2
+ENUMX
+ BFD_RELOC_SCORE_JMP
+ENUMDOC
+ This is a 24-bit reloc with the right 1 bit assumed to be 0
+ENUM
+ BFD_RELOC_SCORE_BRANCH
+ENUMDOC
+ This is a 19-bit reloc with the right 1 bit assumed to be 0
+ENUM
+ BFD_RELOC_SCORE16_JMP
+ENUMDOC
+ This is a 11-bit reloc with the right 1 bit assumed to be 0
+ENUM
+ BFD_RELOC_SCORE16_BRANCH
+ENUMDOC
+ This is a 8-bit reloc with the right 1 bit assumed to be 0
+ENUM
+ BFD_RELOC_SCORE_GOT15
+ENUMX
+ BFD_RELOC_SCORE_GOT_LO16
+ENUMX
+ BFD_RELOC_SCORE_CALL15
+ENUMX
+ BFD_RELOC_SCORE_DUMMY_HI16
+ENUMDOC
+ Undocumented Score relocs
+
+ENUM
BFD_RELOC_IP2K_FR9
ENUMDOC
Scenix IP2K - 9-bit register number / data address
@@ -4246,6 +4516,63 @@ ENUMDOC
NS CR16C Relocations.
ENUM
+ BFD_RELOC_CR16_NUM8
+ENUMX
+ BFD_RELOC_CR16_NUM16
+ENUMX
+ BFD_RELOC_CR16_NUM32
+ENUMX
+ BFD_RELOC_CR16_NUM32a
+ENUMX
+ BFD_RELOC_CR16_REGREL0
+ENUMX
+ BFD_RELOC_CR16_REGREL4
+ENUMX
+ BFD_RELOC_CR16_REGREL4a
+ENUMX
+ BFD_RELOC_CR16_REGREL14
+ENUMX
+ BFD_RELOC_CR16_REGREL14a
+ENUMX
+ BFD_RELOC_CR16_REGREL16
+ENUMX
+ BFD_RELOC_CR16_REGREL20
+ENUMX
+ BFD_RELOC_CR16_REGREL20a
+ENUMX
+ BFD_RELOC_CR16_ABS20
+ENUMX
+ BFD_RELOC_CR16_ABS24
+ENUMX
+ BFD_RELOC_CR16_IMM4
+ENUMX
+ BFD_RELOC_CR16_IMM8
+ENUMX
+ BFD_RELOC_CR16_IMM16
+ENUMX
+ BFD_RELOC_CR16_IMM20
+ENUMX
+ BFD_RELOC_CR16_IMM24
+ENUMX
+ BFD_RELOC_CR16_IMM32
+ENUMX
+ BFD_RELOC_CR16_IMM32a
+ENUMX
+ BFD_RELOC_CR16_DISP4
+ENUMX
+ BFD_RELOC_CR16_DISP8
+ENUMX
+ BFD_RELOC_CR16_DISP16
+ENUMX
+ BFD_RELOC_CR16_DISP20
+ENUMX
+ BFD_RELOC_CR16_DISP24
+ENUMX
+ BFD_RELOC_CR16_DISP24a
+ENUMDOC
+ NS CR16 Relocations.
+
+ENUM
BFD_RELOC_CRX_REL4
ENUMX
BFD_RELOC_CRX_REL8
@@ -4449,6 +4776,12 @@ ENUMDOC
Sony Xstormy16 Relocations.
ENUM
+ BFD_RELOC_RELC
+ENUMDOC
+ Self-describing complex relocations.
+COMMENT
+
+ENUM
BFD_RELOC_XC16X_PAG
ENUMX
BFD_RELOC_XC16X_POF
@@ -4670,10 +5003,13 @@ CODE_FRAGMENT
/*
FUNCTION
bfd_reloc_type_lookup
+ bfd_reloc_name_lookup
SYNOPSIS
reloc_howto_type *bfd_reloc_type_lookup
(bfd *abfd, bfd_reloc_code_real_type code);
+ reloc_howto_type *bfd_reloc_name_lookup
+ (bfd *abfd, const char *reloc_name);
DESCRIPTION
Return a pointer to a howto structure which, when
@@ -4688,6 +5024,12 @@ bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
return BFD_SEND (abfd, reloc_type_lookup, (abfd, code));
}
+reloc_howto_type *
+bfd_reloc_name_lookup (bfd *abfd, const char *reloc_name)
+{
+ return BFD_SEND (abfd, reloc_name_lookup, (abfd, reloc_name));
+}
+
static reloc_howto_type bfd_howto_32 =
HOWTO (0, 00, 2, 32, FALSE, 0, complain_overflow_dont, 0, "VRT32", FALSE, 0xffffffff, 0xffffffff, TRUE);
@@ -4876,13 +5218,31 @@ bfd_generic_get_relocated_section_contents (bfd *abfd,
for (parent = reloc_vector; *parent != NULL; parent++)
{
char *error_message = NULL;
- bfd_reloc_status_type r =
- bfd_perform_relocation (input_bfd,
- *parent,
- data,
- input_section,
- relocatable ? abfd : NULL,
- &error_message);
+ asymbol *symbol;
+ bfd_reloc_status_type r;
+
+ symbol = *(*parent)->sym_ptr_ptr;
+ if (symbol->section && elf_discarded_section (symbol->section))
+ {
+ bfd_byte *p;
+ static reloc_howto_type none_howto
+ = HOWTO (0, 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL,
+ "unused", FALSE, 0, 0, FALSE);
+
+ p = data + (*parent)->address * bfd_octets_per_byte (input_bfd);
+ _bfd_clear_contents ((*parent)->howto, input_bfd, p);
+ (*parent)->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
+ (*parent)->addend = 0;
+ (*parent)->howto = &none_howto;
+ r = bfd_reloc_ok;
+ }
+ else
+ r = bfd_perform_relocation (input_bfd,
+ *parent,
+ data,
+ input_section,
+ relocatable ? abfd : NULL,
+ &error_message);
if (relocatable)
{
diff --git a/bfd/reloc16.c b/bfd/reloc16.c
index 3adbbc75cd1a..f5c78b2c73b6 100644
--- a/bfd/reloc16.c
+++ b/bfd/reloc16.c
@@ -1,6 +1,6 @@
/* 8 and 16 bit COFF relocation functions, for BFD.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001,
- 2002, 2003, 2004 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -32,8 +32,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
file) (unless info->keep_memory is FALSE, in which case they should
free up the relocs after dealing with them). */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "genlink.h"
diff --git a/bfd/riscix.c b/bfd/riscix.c
index 182707981e4d..2e9416e1269f 100644
--- a/bfd/riscix.c
+++ b/bfd/riscix.c
@@ -1,6 +1,6 @@
/* BFD back-end for RISC iX (Acorn, arm) binaries.
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004,
- 2005 Free Software Foundation, Inc.
+ 2005, 2007 Free Software Foundation, Inc.
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
This file is part of BFD, the Binary File Descriptor library.
@@ -103,8 +103,8 @@
&& ((x).a_info != NMAGIC))
#define N_MAGIC(x) ((x).a_info & ~07200)
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#define WRITE_HEADERS(abfd, execp) \
@@ -274,12 +274,29 @@ riscix_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
}
}
+static reloc_howto_type *
+riscix_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (riscix_std_reloc_howto) / sizeof (riscix_std_reloc_howto[0]);
+ i++)
+ if (riscix_std_reloc_howto[i].name != NULL
+ && strcasecmp (riscix_std_reloc_howto[i].name, r_name) == 0)
+ return &riscix_std_reloc_howto[i];
+
+ return NULL;
+}
+
#define MY_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
#define MY_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define MY_final_link_callback should_not_be_used
#define MY_bfd_final_link _bfd_generic_final_link
#define MY_bfd_reloc_type_lookup riscix_reloc_type_lookup
+#define MY_bfd_reloc_name_lookup riscix_reloc_name_lookup
#define MY_canonicalize_reloc riscix_canonicalize_reloc
#define MY_object_p riscix_object_p
diff --git a/bfd/rs6000-core.c b/bfd/rs6000-core.c
index 280a020a754e..4a2e107d3d7c 100644
--- a/bfd/rs6000-core.c
+++ b/bfd/rs6000-core.c
@@ -1,13 +1,8 @@
/* IBM RS/6000 "XCOFF" back-end for BFD.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000,
- 2001, 2002, 2004
+ 2001, 2002, 2004, 2006, 2007
Free Software Foundation, Inc.
- FIXME: Can someone provide a transliteration of this name into ASCII?
- Using the following chars caused a compiler warning on HIUX (so I replaced
- them with octal escapes), and isn't useful without an understanding of what
- character set it is.
- Written by Metin G. Ozisik, Mimi Ph\373\364ng-Th\345o V\365,
- and John Gilmore.
+ Written by Metin G. Ozisik, Mimi Phuong-Thao Vo, and John Gilmore.
Archive support from Damon A. Permezel.
Contributed by IBM Corporation and Cygnus Support.
@@ -44,8 +39,8 @@
#define _LONG_LONG
#endif
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#ifdef AIX_CORE
@@ -294,11 +289,10 @@ make_bfd_asection (bfd *abfd, const char *name, flagword flags,
{
asection *asect;
- asect = bfd_make_section_anyway (abfd, name);
+ asect = bfd_make_section_anyway_with_flags (abfd, name, flags);
if (!asect)
return NULL;
- asect->flags = flags;
asect->size = size;
asect->vma = vma;
asect->filepos = filepos;
diff --git a/bfd/sco5-core.c b/bfd/sco5-core.c
index 9a06b8839f54..21631cf5b84e 100644
--- a/bfd/sco5-core.c
+++ b/bfd/sco5-core.c
@@ -1,5 +1,5 @@
/* BFD back end for SCO5 core files (U-area and raw sections)
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Jouke Numan <jnuman@hiscom.nl>
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "libaout.h" /* BFD a.out internal data structures */
@@ -63,10 +63,9 @@ make_bfd_asection (abfd, name, flags, size, vma, filepos)
{
asection *asect;
- asect = bfd_make_section_anyway (abfd, name);
+ asect = bfd_make_section_anyway_with_flags (abfd, name, flags);
if (!asect)
return NULL;
- asect->flags = flags;
asect->size = size;
asect->vma = vma;
asect->filepos = filepos;
diff --git a/bfd/section.c b/bfd/section.c
index f870e6bfc08a..135f44c0780d 100644
--- a/bfd/section.c
+++ b/bfd/section.c
@@ -1,6 +1,6 @@
/* Object file "section" support for the BFD library.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -133,8 +133,8 @@ SUBSECTION
*/
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
@@ -294,7 +294,9 @@ CODE_FRAGMENT
. else up the line will take care of it later. *}
.#define SEC_LINKER_CREATED 0x200000
.
-. {* This section should not be subject to garbage collection. *}
+. {* This section should not be subject to garbage collection.
+. Also set to inform the linker that this section should not be
+. listed in the link map as discarded. *}
.#define SEC_KEEP 0x400000
.
. {* This section contains "short" data, and should be placed
@@ -540,11 +542,6 @@ CODE_FRAGMENT
. || ((SEC) == bfd_com_section_ptr) \
. || ((SEC) == bfd_ind_section_ptr))
.
-.extern const struct bfd_symbol * const bfd_abs_symbol;
-.extern const struct bfd_symbol * const bfd_com_symbol;
-.extern const struct bfd_symbol * const bfd_und_symbol;
-.extern const struct bfd_symbol * const bfd_ind_symbol;
-.
.{* Macros to handle insertion and deletion of a bfd's sections. These
. only handle the list pointers, ie. do not adjust section_count,
. target_index etc. *}
@@ -635,7 +632,7 @@ CODE_FRAGMENT
.#define bfd_section_removed_from_list(ABFD, S) \
. ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
.
-.#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, SYM_PTR, NAME, IDX) \
+.#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, NAME, IDX) \
. {* name, id, index, next, prev, flags, user_set_vma, *} \
. { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \
. \
@@ -666,11 +663,8 @@ CODE_FRAGMENT
. {* target_index, used_by_bfd, constructor_chain, owner, *} \
. 0, NULL, NULL, NULL, \
. \
-. {* symbol, *} \
-. (struct bfd_symbol *) SYM, \
-. \
-. {* symbol_ptr_ptr, *} \
-. (struct bfd_symbol **) SYM_PTR, \
+. {* symbol, symbol_ptr_ptr, *} \
+. (struct bfd_symbol *) SYM, &SEC.symbol, \
. \
. {* map_head, map_tail *} \
. { NULL }, { NULL } \
@@ -701,16 +695,14 @@ static const asymbol global_syms[] =
GLOBAL_SYM_INIT (BFD_IND_SECTION_NAME, &bfd_ind_section)
};
-#define STD_SECTION(SEC, FLAGS, SYM, NAME, IDX) \
- const asymbol * const SYM = (asymbol *) &global_syms[IDX]; \
- asection SEC = BFD_FAKE_SECTION(SEC, FLAGS, &global_syms[IDX], &SYM, \
+#define STD_SECTION(SEC, FLAGS, NAME, IDX) \
+ asection SEC = BFD_FAKE_SECTION(SEC, FLAGS, &global_syms[IDX], \
NAME, IDX)
-STD_SECTION (bfd_com_section, SEC_IS_COMMON, bfd_com_symbol,
- BFD_COM_SECTION_NAME, 0);
-STD_SECTION (bfd_und_section, 0, bfd_und_symbol, BFD_UND_SECTION_NAME, 1);
-STD_SECTION (bfd_abs_section, 0, bfd_abs_symbol, BFD_ABS_SECTION_NAME, 2);
-STD_SECTION (bfd_ind_section, 0, bfd_ind_symbol, BFD_IND_SECTION_NAME, 3);
+STD_SECTION (bfd_com_section, SEC_IS_COMMON, BFD_COM_SECTION_NAME, 0);
+STD_SECTION (bfd_und_section, 0, BFD_UND_SECTION_NAME, 1);
+STD_SECTION (bfd_abs_section, 0, BFD_ABS_SECTION_NAME, 2);
+STD_SECTION (bfd_ind_section, 0, BFD_IND_SECTION_NAME, 3);
#undef STD_SECTION
/* Initialize an entry in the section hash table. */
@@ -743,23 +735,16 @@ bfd_section_hash_newfunc (struct bfd_hash_entry *entry,
((struct section_hash_entry *) \
bfd_hash_lookup ((table), (string), (create), (copy)))
-/* Initializes a new section. NEWSECT->NAME is already set. */
+/* Create a symbol whose only job is to point to this section. This
+ is useful for things like relocs which are relative to the base
+ of a section. */
-static asection *
-bfd_section_init (bfd *abfd, asection *newsect)
+bfd_boolean
+_bfd_generic_new_section_hook (bfd *abfd, asection *newsect)
{
- static int section_id = 0x10; /* id 0 to 3 used by STD_SECTION. */
-
- newsect->id = section_id;
- newsect->index = abfd->section_count;
- newsect->owner = abfd;
-
- /* Create a symbol whose only job is to point to this section. This
- is useful for things like relocs which are relative to the base
- of a section. */
newsect->symbol = bfd_make_empty_symbol (abfd);
if (newsect->symbol == NULL)
- return NULL;
+ return FALSE;
newsect->symbol->name = newsect->name;
newsect->symbol->value = 0;
@@ -767,6 +752,19 @@ bfd_section_init (bfd *abfd, asection *newsect)
newsect->symbol->flags = BSF_SECTION_SYM;
newsect->symbol_ptr_ptr = &newsect->symbol;
+ return TRUE;
+}
+
+/* Initializes a new section. NEWSECT->NAME is already set. */
+
+static asection *
+bfd_section_init (bfd *abfd, asection *newsect)
+{
+ static int section_id = 0x10; /* id 0 to 3 used by STD_SECTION. */
+
+ newsect->id = section_id;
+ newsect->index = abfd->section_count;
+ newsect->owner = abfd;
if (! BFD_SEND (abfd, _new_section_hook, (abfd, newsect)))
return NULL;
@@ -964,7 +962,6 @@ DESCRIPTION
asection *
bfd_make_section_old_way (bfd *abfd, const char *name)
{
- struct section_hash_entry *sh;
asection *newsect;
if (abfd->output_has_begun)
@@ -974,30 +971,38 @@ bfd_make_section_old_way (bfd *abfd, const char *name)
}
if (strcmp (name, BFD_ABS_SECTION_NAME) == 0)
- return bfd_abs_section_ptr;
-
- if (strcmp (name, BFD_COM_SECTION_NAME) == 0)
- return bfd_com_section_ptr;
+ newsect = bfd_abs_section_ptr;
+ else if (strcmp (name, BFD_COM_SECTION_NAME) == 0)
+ newsect = bfd_com_section_ptr;
+ else if (strcmp (name, BFD_UND_SECTION_NAME) == 0)
+ newsect = bfd_und_section_ptr;
+ else if (strcmp (name, BFD_IND_SECTION_NAME) == 0)
+ newsect = bfd_ind_section_ptr;
+ else
+ {
+ struct section_hash_entry *sh;
- if (strcmp (name, BFD_UND_SECTION_NAME) == 0)
- return bfd_und_section_ptr;
+ sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
+ if (sh == NULL)
+ return NULL;
- if (strcmp (name, BFD_IND_SECTION_NAME) == 0)
- return bfd_ind_section_ptr;
+ newsect = &sh->section;
+ if (newsect->name != NULL)
+ {
+ /* Section already exists. */
+ return newsect;
+ }
- sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE);
- if (sh == NULL)
- return NULL;
-
- newsect = &sh->section;
- if (newsect->name != NULL)
- {
- /* Section already exists. */
- return newsect;
+ newsect->name = name;
+ return bfd_section_init (abfd, newsect);
}
- newsect->name = name;
- return bfd_section_init (abfd, newsect);
+ /* Call new_section_hook when "creating" the standard abs, com, und
+ and ind sections to tack on format specific section data.
+ Also, create a proper section symbol. */
+ if (! BFD_SEND (abfd, _new_section_hook, (abfd, newsect)))
+ return NULL;
+ return newsect;
}
/*
diff --git a/bfd/simple.c b/bfd/simple.c
index d06ce2a96e11..8ebc47e0597e 100644
--- a/bfd/simple.c
+++ b/bfd/simple.c
@@ -1,5 +1,5 @@
/* simple.c -- BFD simple client routines
- Copyright 2002, 2003, 2004, 2005
+ Copyright 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Contributed by MontaVista Software, Inc.
@@ -19,8 +19,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "bfdlink.h"
@@ -183,6 +183,7 @@ bfd_simple_get_relocated_section_contents (bfd *abfd,
/* Fill in the bare minimum number of fields for our purposes. */
memset (&link_info, 0, sizeof (link_info));
link_info.input_bfds = abfd;
+ link_info.input_bfds_tail = &abfd->link_next;
link_info.hash = _bfd_generic_link_hash_table_create (abfd);
link_info.callbacks = &callbacks;
diff --git a/bfd/som.c b/bfd/som.c
index 0c9e1b79f9c7..28eb885bfe2c 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -1,6 +1,6 @@
/* bfd back-end for HP PA-RISC SOM objects.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by the Center for Software Science at the
@@ -24,8 +24,8 @@
02110-1301, USA. */
#include "alloca-conf.h"
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#if defined (HOST_HPPAHPUX) || defined (HOST_HPPABSD) || defined (HOST_HPPAOSF) || defined(HOST_HPPAMPEIX)
@@ -1626,6 +1626,22 @@ som_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
return NULL;
}
+static reloc_howto_type *
+som_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (som_hppa_howto_table) / sizeof (som_hppa_howto_table[0]);
+ i++)
+ if (som_hppa_howto_table[i].name != NULL
+ && strcasecmp (som_hppa_howto_table[i].name, r_name) == 0)
+ return &som_hppa_howto_table[i];
+
+ return NULL;
+}
+
/* Perform some initialization for an object. Save results of this
initialization in the BFD. */
@@ -4374,12 +4390,12 @@ som_slurp_symbol_table (bfd *abfd)
&& sym->symbol.name[strlen (sym->symbol.name) - 1] == '$'
&& !strcmp (sym->symbol.name, sym->symbol.section->name))
sym->symbol.flags |= BSF_SECTION_SYM;
- else if (!strncmp (sym->symbol.name, "L$0\002", 4))
+ else if (CONST_STRNEQ (sym->symbol.name, "L$0\002"))
{
sym->symbol.flags |= BSF_SECTION_SYM;
sym->symbol.name = sym->symbol.section->name;
}
- else if (!strncmp (sym->symbol.name, "L$0\001", 4))
+ else if (CONST_STRNEQ (sym->symbol.name, "L$0\001"))
sym->symbol.flags |= BSF_DEBUGGING;
/* Note increment at bottom of loop, since we skip some symbols
@@ -4959,15 +4975,18 @@ extern const bfd_target som_vec;
static bfd_boolean
som_new_section_hook (bfd *abfd, asection *newsect)
{
- bfd_size_type amt = sizeof (struct som_section_data_struct);
-
- newsect->used_by_bfd = bfd_zalloc (abfd, amt);
if (!newsect->used_by_bfd)
- return FALSE;
+ {
+ bfd_size_type amt = sizeof (struct som_section_data_struct);
+
+ newsect->used_by_bfd = bfd_zalloc (abfd, amt);
+ if (!newsect->used_by_bfd)
+ return FALSE;
+ }
newsect->alignment_power = 3;
/* We allow more than three sections internally. */
- return TRUE;
+ return _bfd_generic_new_section_hook (abfd, newsect);
}
/* Copy any private info we understand from the input symbol
@@ -5325,7 +5344,7 @@ som_find_nearest_line (bfd *abfd ATTRIBUTE_UNUSED,
static int
som_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
- bfd_boolean reloc ATTRIBUTE_UNUSED)
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
(*_bfd_error_handler) (_("som_sizeof_headers unimplemented"));
fflush (stderr);
@@ -5650,7 +5669,7 @@ som_slurp_armap (bfd *abfd)
return FALSE;
/* For archives without .o files there is no symbol table. */
- if (strncmp (nextname, "/ ", 16))
+ if (! CONST_STRNEQ (nextname, "/ "))
{
bfd_has_map (abfd) = FALSE;
return TRUE;
@@ -5749,7 +5768,7 @@ som_bfd_prep_for_ar_write (bfd *abfd,
if (curr_bfd->format != bfd_object
|| curr_bfd->xvec->flavour != bfd_target_som_flavour)
{
- curr_bfd = curr_bfd->next;
+ curr_bfd = curr_bfd->archive_next;
continue;
}
@@ -5794,7 +5813,7 @@ som_bfd_prep_for_ar_write (bfd *abfd,
(*stringsize)++;
}
- curr_bfd = curr_bfd->next;
+ curr_bfd = curr_bfd->archive_next;
}
return TRUE;
}
@@ -5903,7 +5922,7 @@ som_bfd_ar_write_symbol_stuff (bfd *abfd,
if (curr_bfd->format != bfd_object
|| curr_bfd->xvec->flavour != bfd_target_som_flavour)
{
- curr_bfd = curr_bfd->next;
+ curr_bfd = curr_bfd->archive_next;
continue;
}
@@ -6019,7 +6038,7 @@ som_bfd_ar_write_symbol_stuff (bfd *abfd,
linker requires objects begin on an even boundary. So round
up the current offset as necessary. */
curr_som_offset = (curr_som_offset + 0x1) &~ (unsigned) 1;
- curr_bfd = curr_bfd->next;
+ curr_bfd = curr_bfd->archive_next;
som_index++;
}
@@ -6125,7 +6144,7 @@ som_write_armap (bfd *abfd,
if (curr_bfd->format == bfd_object
&& curr_bfd->xvec->flavour == bfd_target_som_flavour)
lst.module_count++;
- curr_bfd = curr_bfd->next;
+ curr_bfd = curr_bfd->archive_next;
}
lst.module_limit = lst.module_count;
lst.dir_loc = lst_size;
diff --git a/bfd/sparclinux.c b/bfd/sparclinux.c
index d8659eec16ba..445a66c0e103 100644
--- a/bfd/sparclinux.c
+++ b/bfd/sparclinux.c
@@ -1,23 +1,23 @@
/* BFD back-end for linux flavored sparc a.out binaries.
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
- 2003, 2004, 2006 Free Software Foundation, Inc.
+ 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
-This file is part of BFD, the Binary File Descriptor library.
+ This file is part of BFD, the Binary File Descriptor library.
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+ This program is free software; you can 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.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
-USA. */
+ You should have received a copy of the GNU General Public 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_PAGE_SIZE 4096
#define ZMAGIC_DISK_BLOCK_SIZE 1024
@@ -27,8 +27,8 @@ USA. */
#define MACHTYPE_OK(mtype) ((mtype) == M_SPARC || (mtype) == M_UNKNOWN)
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "aout/aout64.h"
#include "aout/stab_gnu.h"
@@ -94,8 +94,7 @@ sparclinux_write_object_contents (abfd)
#define GOT_REF_PREFIX "__GOT_"
#endif
-#define IS_GOT_SYM(name) \
- (strncmp (name, GOT_REF_PREFIX, sizeof GOT_REF_PREFIX - 1) == 0)
+#define IS_GOT_SYM(name) (CONST_STRNEQ (name, GOT_REF_PREFIX))
/* See if a symbol name is a reference to the procedure linkage table. */
@@ -103,8 +102,7 @@ sparclinux_write_object_contents (abfd)
#define PLT_REF_PREFIX "__PLT_"
#endif
-#define IS_PLT_SYM(name) \
- (strncmp (name, PLT_REF_PREFIX, sizeof PLT_REF_PREFIX - 1) == 0)
+#define IS_PLT_SYM(name) (CONST_STRNEQ (name, PLT_REF_PREFIX))
/* This string is used to generate specialized error messages. */
@@ -313,9 +311,8 @@ linux_link_create_dynamic_sections (abfd, info)
/* We choose to use the name ".linux-dynamic" for the fixup table.
Why not? */
- s = bfd_make_section (abfd, ".linux-dynamic");
+ s = bfd_make_section_with_flags (abfd, ".linux-dynamic", flags);
if (s == NULL
- || ! bfd_set_section_flags (abfd, s, flags)
|| ! bfd_set_section_alignment (abfd, s, 2))
return FALSE;
s->size = 0;
@@ -429,9 +426,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string,
This function is called via linux_link_hash_traverse. */
static bfd_boolean
-linux_tally_symbols (h, data)
- struct linux_link_hash_entry *h;
- PTR data;
+linux_tally_symbols (struct linux_link_hash_entry *h, void * data)
{
struct bfd_link_info *info = (struct bfd_link_info *) data;
struct fixup *f, *f1;
@@ -443,8 +438,7 @@ linux_tally_symbols (h, data)
h = (struct linux_link_hash_entry *) h->root.root.u.i.link;
if (h->root.root.type == bfd_link_hash_undefined
- && strncmp (h->root.root.root.string, NEEDS_SHRLIB,
- sizeof NEEDS_SHRLIB - 1) == 0)
+ && CONST_STRNEQ (h->root.root.root.string, NEEDS_SHRLIB))
{
const char *name;
char *p;
diff --git a/bfd/sparclynx.c b/bfd/sparclynx.c
index 81aa5548153d..df61d425d25f 100644
--- a/bfd/sparclynx.c
+++ b/bfd/sparclynx.c
@@ -1,6 +1,6 @@
/* BFD support for Sparc binaries under LynxOS.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000,
- 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -24,8 +24,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define MY(OP) CONCAT2 (sparclynx_aout_,OP)
#define TARGETNAME "a.out-sparc-lynx"
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "aout/sun4.h"
diff --git a/bfd/srec.c b/bfd/srec.c
index 2b24f46ffb64..354a6ee670f0 100644
--- a/bfd/srec.c
+++ b/bfd/srec.c
@@ -1,6 +1,6 @@
/* BFD back-end for s-record objects.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support <sac@cygnus.com>.
@@ -101,8 +101,8 @@
We allow symbols to be anywhere in the data stream - the module names
are always ignored. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libiberty.h"
#include "safe-ctype.h"
@@ -526,15 +526,16 @@ srec_scan (bfd *abfd)
char secbuf[20];
char *secname;
bfd_size_type amt;
+ flagword flags;
sprintf (secbuf, ".sec%d", bfd_count_sections (abfd) + 1);
amt = strlen (secbuf) + 1;
secname = bfd_alloc (abfd, amt);
strcpy (secname, secbuf);
- sec = bfd_make_section (abfd, secname);
+ flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC;
+ sec = bfd_make_section_with_flags (abfd, secname, flags);
if (sec == NULL)
goto error_return;
- sec->flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC;
sec->vma = address;
sec->lma = address;
sec->size = bytes;
@@ -1099,7 +1100,7 @@ symbolsrec_write_object_contents (bfd *abfd)
static int
srec_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
- bfd_boolean exec ATTRIBUTE_UNUSED)
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return 0;
}
@@ -1193,9 +1194,6 @@ srec_print_symbol (bfd *abfd,
#define srec_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define srec_read_minisymbols _bfd_generic_read_minisymbols
#define srec_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
-#define srec_get_reloc_upper_bound ((long (*) (bfd *, asection *)) bfd_0l)
-#define srec_canonicalize_reloc ((long (*) (bfd *, asection *, arelent **, asymbol **)) bfd_0l)
-#define srec_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
#define srec_get_section_contents_in_window _bfd_generic_get_section_contents_in_window
#define srec_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents
#define srec_bfd_relax_section bfd_generic_relax_section
@@ -1256,7 +1254,7 @@ const bfd_target srec_vec =
BFD_JUMP_TABLE_CORE (_bfd_nocore),
BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
BFD_JUMP_TABLE_SYMBOLS (srec),
- BFD_JUMP_TABLE_RELOCS (srec),
+ BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
BFD_JUMP_TABLE_WRITE (srec),
BFD_JUMP_TABLE_LINK (srec),
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
@@ -1311,7 +1309,7 @@ const bfd_target symbolsrec_vec =
BFD_JUMP_TABLE_CORE (_bfd_nocore),
BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
BFD_JUMP_TABLE_SYMBOLS (srec),
- BFD_JUMP_TABLE_RELOCS (srec),
+ BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
BFD_JUMP_TABLE_WRITE (srec),
BFD_JUMP_TABLE_LINK (srec),
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
diff --git a/bfd/stabs.c b/bfd/stabs.c
index ba3f93446193..1192cd165b91 100644
--- a/bfd/stabs.c
+++ b/bfd/stabs.c
@@ -1,6 +1,6 @@
/* Stabs in sections linking support.
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- 2006 Free Software Foundation, Inc.
+ 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -22,8 +22,8 @@
/* This file contains support for linking stabs in sections, as used
on COFF and ELF. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "aout/stab_gnu.h"
#include "safe-ctype.h"
@@ -175,10 +175,8 @@ _bfd_link_section_stabs (bfd *abfd,
prepared to handle them. */
return TRUE;
- if ((stabsec->output_section != NULL
- && bfd_is_abs_section (stabsec->output_section))
- || (stabstrsec->output_section != NULL
- && bfd_is_abs_section (stabstrsec->output_section)))
+ if (bfd_is_abs_section (stabsec->output_section)
+ || bfd_is_abs_section (stabstrsec->output_section))
/* At least one of the sections is being discarded from the
link, so we should just ignore them. */
return TRUE;
@@ -187,6 +185,8 @@ _bfd_link_section_stabs (bfd *abfd,
if (sinfo->stabstr == NULL)
{
+ flagword flags;
+
/* Initialize the stabs information we need to keep track of. */
first = TRUE;
sinfo->strings = _bfd_stringtab_init ();
@@ -198,11 +198,12 @@ _bfd_link_section_stabs (bfd *abfd,
stab_link_includes_newfunc,
sizeof (struct stab_link_includes_entry)))
goto error_return;
- sinfo->stabstr = bfd_make_section_anyway (abfd, ".stabstr");
+ flags = (SEC_HAS_CONTENTS | SEC_READONLY | SEC_DEBUGGING
+ | SEC_LINKER_CREATED);
+ sinfo->stabstr = bfd_make_section_anyway_with_flags (abfd, ".stabstr",
+ flags);
if (sinfo->stabstr == NULL)
goto error_return;
- sinfo->stabstr->flags |= (SEC_HAS_CONTENTS | SEC_READONLY
- | SEC_DEBUGGING | SEC_LINKER_CREATED);
}
/* Initialize the information we are going to store for this .stab
@@ -430,7 +431,7 @@ _bfd_link_section_stabs (bfd *abfd,
++nest;
else if (incl_type == (int) N_EXCL)
/* Keep existing exclusion marks. */
- continue;
+ continue;
else if (nest == 0)
{
*incl_pstridx = (bfd_size_type) -1;
@@ -455,8 +456,8 @@ _bfd_link_section_stabs (bfd *abfd,
for that section. */
stabsec->size = (count - skip) * STABSIZE;
if (stabsec->size == 0)
- stabsec->flags |= SEC_EXCLUDE;
- stabstrsec->flags |= SEC_EXCLUDE;
+ stabsec->flags |= SEC_EXCLUDE | SEC_KEEP;
+ stabstrsec->flags |= SEC_EXCLUDE | SEC_KEEP;
sinfo->stabstr->size = _bfd_stringtab_size (sinfo->strings);
/* Calculate the `cumulative_skips' array now that stabs have been
@@ -608,7 +609,7 @@ _bfd_discard_section_stabs (bfd *abfd,
/* Shrink the stabsec as needed. */
stabsec->size -= skip * STABSIZE;
if (stabsec->size == 0)
- stabsec->flags |= SEC_EXCLUDE;
+ stabsec->flags |= SEC_EXCLUDE | SEC_KEEP;
/* Recalculate the `cumulative_skips' array now that stabs have been
deleted for this section. */
diff --git a/bfd/sunos.c b/bfd/sunos.c
index 024320fbfa18..a9117f477181 100644
--- a/bfd/sunos.c
+++ b/bfd/sunos.c
@@ -745,57 +745,50 @@ sunos_create_dynamic_sections (bfd *abfd,
/* The .dynamic section holds the basic dynamic information: the
sun4_dynamic structure, the dynamic debugger information, and
the sun4_dynamic_link structure. */
- s = bfd_make_section (abfd, ".dynamic");
+ s = bfd_make_section_with_flags (abfd, ".dynamic", flags);
if (s == NULL
- || ! bfd_set_section_flags (abfd, s, flags)
|| ! bfd_set_section_alignment (abfd, s, 2))
return FALSE;
/* The .got section holds the global offset table. The address
is put in the ld_got field. */
- s = bfd_make_section (abfd, ".got");
+ s = bfd_make_section_with_flags (abfd, ".got", flags);
if (s == NULL
- || ! bfd_set_section_flags (abfd, s, flags)
|| ! bfd_set_section_alignment (abfd, s, 2))
return FALSE;
/* The .plt section holds the procedure linkage table. The
address is put in the ld_plt field. */
- s = bfd_make_section (abfd, ".plt");
+ s = bfd_make_section_with_flags (abfd, ".plt", flags | SEC_CODE);
if (s == NULL
- || ! bfd_set_section_flags (abfd, s, flags | SEC_CODE)
|| ! bfd_set_section_alignment (abfd, s, 2))
return FALSE;
/* The .dynrel section holds the dynamic relocs. The address is
put in the ld_rel field. */
- s = bfd_make_section (abfd, ".dynrel");
+ s = bfd_make_section_with_flags (abfd, ".dynrel", flags | SEC_READONLY);
if (s == NULL
- || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
|| ! bfd_set_section_alignment (abfd, s, 2))
return FALSE;
/* The .hash section holds the dynamic hash table. The address
is put in the ld_hash field. */
- s = bfd_make_section (abfd, ".hash");
+ s = bfd_make_section_with_flags (abfd, ".hash", flags | SEC_READONLY);
if (s == NULL
- || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
|| ! bfd_set_section_alignment (abfd, s, 2))
return FALSE;
/* The .dynsym section holds the dynamic symbols. The address
is put in the ld_stab field. */
- s = bfd_make_section (abfd, ".dynsym");
+ s = bfd_make_section_with_flags (abfd, ".dynsym", flags | SEC_READONLY);
if (s == NULL
- || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
|| ! bfd_set_section_alignment (abfd, s, 2))
return FALSE;
/* The .dynstr section holds the dynamic symbol string table.
The address is put in the ld_symbols field. */
- s = bfd_make_section (abfd, ".dynstr");
+ s = bfd_make_section_with_flags (abfd, ".dynstr", flags | SEC_READONLY);
if (s == NULL
- || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
|| ! bfd_set_section_alignment (abfd, s, 2))
return FALSE;
@@ -890,14 +883,10 @@ sunos_add_dynamic_symbols (bfd *abfd,
/* The .need section holds the list of names of shared objets
which must be included at runtime. The address of this
section is put in the ld_need field. */
- asection *s = bfd_make_section (dynobj, ".need");
+ flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+ | SEC_IN_MEMORY | SEC_READONLY);
+ asection *s = bfd_make_section_with_flags (dynobj, ".need", flags);
if (s == NULL
- || ! bfd_set_section_flags (dynobj, s,
- (SEC_ALLOC
- | SEC_LOAD
- | SEC_HAS_CONTENTS
- | SEC_IN_MEMORY
- | SEC_READONLY))
|| ! bfd_set_section_alignment (dynobj, s, 2))
return FALSE;
}
@@ -907,14 +896,10 @@ sunos_add_dynamic_symbols (bfd *abfd,
/* The .rules section holds the path to search for shared
objects. The address of this section is put in the ld_rules
field. */
- asection *s = bfd_make_section (dynobj, ".rules");
+ flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+ | SEC_IN_MEMORY | SEC_READONLY);
+ asection *s = bfd_make_section_with_flags (dynobj, ".rules", flags);
if (s == NULL
- || ! bfd_set_section_flags (dynobj, s,
- (SEC_ALLOC
- | SEC_LOAD
- | SEC_HAS_CONTENTS
- | SEC_IN_MEMORY
- | SEC_READONLY))
|| ! bfd_set_section_alignment (dynobj, s, 2))
return FALSE;
}
diff --git a/bfd/syms.c b/bfd/syms.c
index 0ff94164ed5e..89c38692ed30 100644
--- a/bfd/syms.c
+++ b/bfd/syms.c
@@ -1,6 +1,6 @@
/* Generic symbol-table support for the BFD library.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004
+ 2000, 2001, 2002, 2003, 2004, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -288,6 +288,14 @@ CODE_FRAGMENT
. {* This symbol is thread local. Used in ELF. *}
.#define BSF_THREAD_LOCAL 0x40000
.
+. {* This symbol represents a complex relocation expression,
+. with the expression tree serialized in the symbol name. *}
+.#define BSF_RELC 0x80000
+.
+. {* This symbol represents a signed complex relocation expression,
+. with the expression tree serialized in the symbol name. *}
+.#define BSF_SRELC 0x100000
+.
. flagword flags;
.
. {* A pointer to the section to which this symbol is
@@ -307,8 +315,8 @@ CODE_FRAGMENT
.
*/
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "safe-ctype.h"
#include "bfdlink.h"
diff --git a/bfd/sysdep.h b/bfd/sysdep.h
index f6313d3905ce..e1b070b4a899 100644
--- a/bfd/sysdep.h
+++ b/bfd/sysdep.h
@@ -1,5 +1,5 @@
/* sysdep.h -- handle host dependencies for the BFD library
- Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001
+ Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -22,10 +22,10 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#ifndef BFD_SYSDEP_H
#define BFD_SYSDEP_H
-#include "ansidecl.h"
-
#include "config.h"
+#include "ansidecl.h"
+
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#endif
diff --git a/bfd/targets.c b/bfd/targets.c
index 849eb944fbeb..23e52cd6ec82 100644
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -1,6 +1,6 @@
/* Generic target-file-type support for the BFD library.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -20,8 +20,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "fnmatch.h"
@@ -402,7 +402,8 @@ BFD_JUMP_TABLE macros.
.#define BFD_JUMP_TABLE_RELOCS(NAME) \
. NAME##_get_reloc_upper_bound, \
. NAME##_canonicalize_reloc, \
-. NAME##_bfd_reloc_type_lookup
+. NAME##_bfd_reloc_type_lookup, \
+. NAME##_bfd_reloc_name_lookup
.
. long (*_get_reloc_upper_bound) (bfd *, sec_ptr);
. long (*_bfd_canonicalize_reloc)
@@ -410,6 +411,9 @@ BFD_JUMP_TABLE macros.
. {* See documentation on reloc types. *}
. reloc_howto_type *
. (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
+. reloc_howto_type *
+. (*reloc_name_lookup) (bfd *, const char *);
+.
.
. {* Routines used when writing an object file. *}
.#define BFD_JUMP_TABLE_WRITE(NAME) \
@@ -438,7 +442,7 @@ BFD_JUMP_TABLE macros.
. NAME##_bfd_discard_group, \
. NAME##_section_already_linked \
.
-. int (*_bfd_sizeof_headers) (bfd *, bfd_boolean);
+. int (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
. bfd_byte * (*_bfd_get_relocated_section_contents)
. (bfd *, struct bfd_link_info *, struct bfd_link_order *,
. bfd_byte *, bfd_boolean, struct bfd_symbol **);
@@ -481,7 +485,8 @@ BFD_JUMP_TABLE macros.
.
. {* Check if SEC has been already linked during a reloceatable or
. final link. *}
-. void (*_section_already_linked) (bfd *, struct bfd_section *);
+. void (*_section_already_linked) (bfd *, struct bfd_section *,
+. struct bfd_link_info *);
.
. {* Routines to handle dynamic symbols and relocs. *}
.#define BFD_JUMP_TABLE_DYNAMIC(NAME) \
@@ -541,6 +546,10 @@ extern const bfd_target arm_epoc_pe_big_vec;
extern const bfd_target arm_epoc_pe_little_vec;
extern const bfd_target arm_epoc_pei_big_vec;
extern const bfd_target arm_epoc_pei_little_vec;
+extern const bfd_target arm_wince_pe_big_vec;
+extern const bfd_target arm_wince_pe_little_vec;
+extern const bfd_target arm_wince_pei_big_vec;
+extern const bfd_target arm_wince_pei_little_vec;
extern const bfd_target armcoff_big_vec;
extern const bfd_target armcoff_little_vec;
extern const bfd_target armnetbsd_vec;
@@ -551,6 +560,7 @@ extern const bfd_target armpei_little_vec;
extern const bfd_target b_out_vec_big_host;
extern const bfd_target b_out_vec_little_host;
extern const bfd_target bfd_efi_app_ia32_vec;
+extern const bfd_target bfd_efi_app_x86_64_vec;
extern const bfd_target bfd_efi_app_ia64_vec;
extern const bfd_target bfd_elf32_avr_vec;
extern const bfd_target bfd_elf32_bfin_vec;
@@ -562,6 +572,7 @@ extern const bfd_target bfd_elf32_bigarm_symbian_vec;
extern const bfd_target bfd_elf32_bigarm_vxworks_vec;
extern const bfd_target bfd_elf32_bigmips_vec;
extern const bfd_target bfd_elf32_bigmips_vxworks_vec;
+extern const bfd_target bfd_elf32_cr16_vec;
extern const bfd_target bfd_elf32_cr16c_vec;
extern const bfd_target bfd_elf32_cris_vec;
extern const bfd_target bfd_elf32_crx_vec;
@@ -604,6 +615,8 @@ extern const bfd_target bfd_elf32_m68k_vec;
extern const bfd_target bfd_elf32_m88k_vec;
extern const bfd_target bfd_elf32_mcore_big_vec;
extern const bfd_target bfd_elf32_mcore_little_vec;
+extern const bfd_target bfd_elf32_mep_vec;
+extern const bfd_target bfd_elf32_mep_little_vec;
extern const bfd_target bfd_elf32_mn10200_vec;
extern const bfd_target bfd_elf32_mn10300_vec;
extern const bfd_target bfd_elf32_mt_vec;
@@ -620,6 +633,8 @@ 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;
extern const bfd_target bfd_elf32_s390_vec;
+extern const bfd_target bfd_elf32_bigscore_vec;
+extern const bfd_target bfd_elf32_littlescore_vec;
extern const bfd_target bfd_elf32_sh64_vec;
extern const bfd_target bfd_elf32_sh64l_vec;
extern const bfd_target bfd_elf32_sh64lin_vec;
@@ -632,9 +647,12 @@ extern const bfd_target bfd_elf32_shl_vec;
extern const bfd_target bfd_elf32_shl_symbian_vec;
extern const bfd_target bfd_elf32_shlin_vec;
extern const bfd_target bfd_elf32_shlnbsd_vec;
+extern const bfd_target bfd_elf32_shlvxworks_vec;
extern const bfd_target bfd_elf32_shnbsd_vec;
+extern const bfd_target bfd_elf32_shvxworks_vec;
extern const bfd_target bfd_elf32_sparc_vec;
extern const bfd_target bfd_elf32_sparc_vxworks_vec;
+extern const bfd_target bfd_elf32_spu_vec;
extern const bfd_target bfd_elf32_tradbigmips_vec;
extern const bfd_target bfd_elf32_tradlittlemips_vec;
extern const bfd_target bfd_elf32_us_cris_vec;
@@ -666,8 +684,10 @@ extern const bfd_target bfd_elf64_sh64blin_vec;
extern const bfd_target bfd_elf64_sh64lnbsd_vec;
extern const bfd_target bfd_elf64_sh64nbsd_vec;
extern const bfd_target bfd_elf64_sparc_vec;
+extern const bfd_target bfd_elf64_sparc_freebsd_vec;
extern const bfd_target bfd_elf64_tradbigmips_vec;
extern const bfd_target bfd_elf64_tradlittlemips_vec;
+extern const bfd_target bfd_elf64_x86_64_freebsd_vec;
extern const bfd_target bfd_elf64_x86_64_vec;
extern const bfd_target bfd_mmo_vec;
extern const bfd_target bfd_powerpc_pe_vec;
@@ -780,6 +800,9 @@ extern const bfd_target vms_alpha_vec;
extern const bfd_target vms_vax_vec;
extern const bfd_target w65_vec;
extern const bfd_target we32kcoff_vec;
+extern const bfd_target x86_64pe_vec;
+extern const bfd_target x86_64pei_vec;
+extern const bfd_target x86_64coff_vec;
extern const bfd_target z80coff_vec;
extern const bfd_target z8kcoff_vec;
@@ -804,8 +827,8 @@ extern const bfd_target sco5_core_vec;
extern const bfd_target trad_core_vec;
extern const bfd_target bfd_elf32_am33lin_vec;
-static const bfd_target * const _bfd_target_vector[] = {
-
+static const bfd_target * const _bfd_target_vector[] =
+{
#ifdef SELECT_VECS
SELECT_VECS,
@@ -841,6 +864,10 @@ static const bfd_target * const _bfd_target_vector[] = {
&arm_epoc_pe_little_vec,
&arm_epoc_pei_big_vec,
&arm_epoc_pei_little_vec,
+ &arm_wince_pe_big_vec,
+ &arm_wince_pe_little_vec,
+ &arm_wince_pei_big_vec,
+ &arm_wince_pei_little_vec,
&armcoff_big_vec,
&armcoff_little_vec,
&armnetbsd_vec,
@@ -852,6 +879,7 @@ static const bfd_target * const _bfd_target_vector[] = {
&b_out_vec_little_host,
&bfd_efi_app_ia32_vec,
#ifdef BFD64
+ &bfd_efi_app_x86_64_vec,
&bfd_efi_app_ia64_vec,
#endif
&bfd_elf32_avr_vec,
@@ -869,6 +897,7 @@ static const bfd_target * const _bfd_target_vector[] = {
&bfd_elf32_bigarm_vxworks_vec,
&bfd_elf32_bigmips_vec,
&bfd_elf32_bigmips_vxworks_vec,
+ &bfd_elf32_cr16_vec,
&bfd_elf32_cr16c_vec,
&bfd_elf32_cris_vec,
&bfd_elf32_crx_vec,
@@ -915,6 +944,7 @@ static const bfd_target * const _bfd_target_vector[] = {
&bfd_elf32_m88k_vec,
&bfd_elf32_mcore_big_vec,
&bfd_elf32_mcore_little_vec,
+ &bfd_elf32_mep_vec,
&bfd_elf32_mn10200_vec,
&bfd_elf32_mn10300_vec,
&bfd_elf32_mt_vec,
@@ -933,13 +963,17 @@ static const bfd_target * const _bfd_target_vector[] = {
&bfd_elf32_powerpc_vxworks_vec,
&bfd_elf32_powerpcle_vec,
&bfd_elf32_s390_vec,
+ &bfd_elf32_bigscore_vec,
+ &bfd_elf32_littlescore_vec,
&bfd_elf32_sh_vec,
&bfd_elf32_shblin_vec,
&bfd_elf32_shl_vec,
&bfd_elf32_shl_symbian_vec,
&bfd_elf32_shlin_vec,
&bfd_elf32_shlnbsd_vec,
+ &bfd_elf32_shlvxworks_vec,
&bfd_elf32_shnbsd_vec,
+ &bfd_elf32_shvxworks_vec,
#ifdef BFD64
&bfd_elf32_sh64_vec,
&bfd_elf32_sh64l_vec,
@@ -950,6 +984,7 @@ static const bfd_target * const _bfd_target_vector[] = {
#endif
&bfd_elf32_sparc_vec,
&bfd_elf32_sparc_vxworks_vec,
+ &bfd_elf32_spu_vec,
&bfd_elf32_tradbigmips_vec,
&bfd_elf32_tradlittlemips_vec,
&bfd_elf32_us_cris_vec,
@@ -982,8 +1017,10 @@ static const bfd_target * const _bfd_target_vector[] = {
&bfd_elf64_sh64lin_vec,
&bfd_elf64_sh64blin_vec,
&bfd_elf64_sparc_vec,
+ &bfd_elf64_sparc_freebsd_vec,
&bfd_elf64_tradbigmips_vec,
&bfd_elf64_tradlittlemips_vec,
+ &bfd_elf64_x86_64_freebsd_vec,
&bfd_elf64_x86_64_vec,
&bfd_mmo_vec,
#endif
@@ -1036,6 +1073,11 @@ static const bfd_target * const _bfd_target_vector[] = {
&i386os9k_vec,
&i386pe_vec,
&i386pei_vec,
+#ifdef BFD64
+ &x86_64coff_vec,
+ &x86_64pe_vec,
+ &x86_64pei_vec,
+#endif
&i860coff_vec,
&icoff_big_vec,
&icoff_little_vec,
@@ -1260,7 +1302,6 @@ find_target (const char *name)
while (match->vector == NULL)
++match;
return match->vector;
- break;
}
}
@@ -1307,14 +1348,15 @@ SYNOPSIS
DESCRIPTION
Return a pointer to the transfer vector for the object target
- named @var{target_name}. If @var{target_name} is <<NULL>>, choose the
- one in the environment variable <<GNUTARGET>>; if that is null or not
- defined, then choose the first entry in the target list.
- Passing in the string "default" or setting the environment
- variable to "default" will cause the first entry in the target
- list to be returned, and "target_defaulted" will be set in the
- BFD. This causes <<bfd_check_format>> to loop over all the
- targets to find the one that matches the file being read.
+ named @var{target_name}. If @var{target_name} is <<NULL>>,
+ choose the one in the environment variable <<GNUTARGET>>; if
+ that is null or not defined, then choose the first entry in the
+ target list. Passing in the string "default" or setting the
+ environment variable to "default" will cause the first entry in
+ the target list to be returned, and "target_defaulted" will be
+ set in the BFD if @var{abfd} isn't <<NULL>>. This causes
+ <<bfd_check_format>> to loop over all the targets to find the
+ one that matches the file being read.
*/
const bfd_target *
@@ -1331,21 +1373,27 @@ bfd_find_target (const char *target_name, bfd *abfd)
/* This is safe; the vector cannot be null. */
if (targname == NULL || strcmp (targname, "default") == 0)
{
- abfd->target_defaulted = TRUE;
if (bfd_default_vector[0] != NULL)
- abfd->xvec = bfd_default_vector[0];
+ target = bfd_default_vector[0];
else
- abfd->xvec = bfd_target_vector[0];
- return abfd->xvec;
+ target = bfd_target_vector[0];
+ if (abfd)
+ {
+ abfd->xvec = target;
+ abfd->target_defaulted = TRUE;
+ }
+ return target;
}
- abfd->target_defaulted = FALSE;
+ if (abfd)
+ abfd->target_defaulted = FALSE;
target = find_target (targname);
if (target == NULL)
return NULL;
- abfd->xvec = target;
+ if (abfd)
+ abfd->xvec = target;
return target;
}
diff --git a/bfd/tekhex.c b/bfd/tekhex.c
index afe42cc948a9..78deaf99ae14 100644
--- a/bfd/tekhex.c
+++ b/bfd/tekhex.c
@@ -1,6 +1,6 @@
/* BFD backend for Extended Tektronix Hex Format objects.
Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004 Free Software Foundation, Inc.
+ 2003, 2004, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support <sac@cygnus.com>.
This file is part of BFD, the Binary File Descriptor library.
@@ -65,8 +65,8 @@
The data can come out of order, and may be discontigous. This is a
serial protocol, so big files are unlikely, so we keep a list of 8k chunks. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libiberty.h"
@@ -436,6 +436,7 @@ first_phase (bfd *abfd, int type, char *src)
if (!getvalue (&src, &val))
return FALSE;
new->symbol.value = val - section->vma;
+ break;
}
default:
return FALSE;
@@ -457,11 +458,10 @@ pass_over (bfd *abfd, bfd_boolean (*func) (bfd *, int, char *))
/* To the front of the file. */
if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
- abort ();
+ return FALSE;
while (! eof)
{
- char buffer[MAXCHUNK];
- char *src = buffer;
+ char src[MAXCHUNK];
char type;
/* Find first '%'. */
@@ -471,22 +471,24 @@ pass_over (bfd *abfd, bfd_boolean (*func) (bfd *, int, char *))
if (eof)
break;
- src++;
/* Fetch the type and the length and the checksum. */
if (bfd_bread (src, (bfd_size_type) 5, abfd) != 5)
- abort (); /* FIXME. */
+ return FALSE;
type = src[2];
if (!ISHEX (src[0]) || !ISHEX (src[1]))
break;
- /* Already read five char. */
+ /* Already read five chars. */
chars_on_line = HEX (src) - 5;
+ if (chars_on_line >= MAXCHUNK)
+ return FALSE;
+
if (bfd_bread (src, (bfd_size_type) chars_on_line, abfd) != chars_on_line)
- abort (); /* FIXME. */
+ return FALSE;
/* Put a null at the end. */
src[chars_on_line] = 0;
@@ -751,7 +753,6 @@ out (bfd *abfd, int type, char *start, char *end)
static bfd_boolean
tekhex_write_object_contents (bfd *abfd)
{
- int bytes_written;
char buffer[100];
asymbol **p;
asection *s;
@@ -759,8 +760,6 @@ tekhex_write_object_contents (bfd *abfd)
tekhex_init ();
- bytes_written = 0;
-
/* And the raw data. */
for (d = abfd->tdata.tekhex_data->data;
d != NULL;
@@ -868,7 +867,7 @@ tekhex_write_object_contents (bfd *abfd)
static int
tekhex_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
- bfd_boolean exec ATTRIBUTE_UNUSED)
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return 0;
}
diff --git a/bfd/trad-core.c b/bfd/trad-core.c
index cb4111fb9418..79b869cb37af 100644
--- a/bfd/trad-core.c
+++ b/bfd/trad-core.c
@@ -1,6 +1,6 @@
/* BFD back end for traditional Unix core files (U-area and raw sections)
Copyright 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by John Gilmore of Cygnus Support.
@@ -20,8 +20,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "libbfd.h"
#include "libaout.h" /* BFD a.out internal data structures */
@@ -79,6 +79,7 @@ trad_unix_core_file_p (abfd)
struct user u;
struct trad_core_struct *rawptr;
bfd_size_type amt;
+ flagword flags;
#ifdef TRAD_CORE_USER_OFFSET
/* If defined, this macro is the file position of the user struct. */
@@ -113,24 +114,24 @@ trad_unix_core_file_p (abfd)
if (bfd_stat (abfd, &statbuf) < 0)
return 0;
- if ((unsigned long) (NBPG * (UPAGES + u.u_dsize
+ if ((ufile_ptr) NBPG * (UPAGES + u.u_dsize
#ifdef TRAD_CORE_DSIZE_INCLUDES_TSIZE
- - u.u_tsize
+ - u.u_tsize
#endif
- + u.u_ssize))
- > (unsigned long) statbuf.st_size)
+ + u.u_ssize)
+ > (ufile_ptr) statbuf.st_size)
{
bfd_set_error (bfd_error_wrong_format);
return 0;
}
#ifndef TRAD_CORE_ALLOW_ANY_EXTRA_SIZE
- if ((unsigned long) (NBPG * (UPAGES + u.u_dsize + u.u_ssize)
+ if (((ufile_ptr) NBPG * (UPAGES + u.u_dsize + u.u_ssize)
#ifdef TRAD_CORE_EXTRA_SIZE_ALLOWED
/* Some systems write the file too big. */
- + TRAD_CORE_EXTRA_SIZE_ALLOWED
+ + TRAD_CORE_EXTRA_SIZE_ALLOWED
#endif
- )
- < (unsigned long) statbuf.st_size)
+ )
+ < (ufile_ptr) statbuf.st_size)
{
/* The file is too big. Maybe it's not a core file
or we otherwise have bad values for u_dsize and u_ssize). */
@@ -155,20 +156,20 @@ trad_unix_core_file_p (abfd)
/* Create the sections. */
- core_stacksec(abfd) = bfd_make_section_anyway (abfd, ".stack");
+ flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
+ core_stacksec(abfd) = bfd_make_section_anyway_with_flags (abfd, ".stack",
+ flags);
if (core_stacksec (abfd) == NULL)
goto fail;
- core_datasec (abfd) = bfd_make_section_anyway (abfd, ".data");
+ core_datasec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".data",
+ flags);
if (core_datasec (abfd) == NULL)
goto fail;
- core_regsec (abfd) = bfd_make_section_anyway (abfd, ".reg");
+ core_regsec (abfd) = bfd_make_section_anyway_with_flags (abfd, ".reg",
+ SEC_HAS_CONTENTS);
if (core_regsec (abfd) == NULL)
goto fail;
- core_stacksec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
- core_datasec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
- core_regsec (abfd)->flags = SEC_HAS_CONTENTS;
-
core_datasec (abfd)->size = NBPG * u.u_dsize
#ifdef TRAD_CORE_DSIZE_INCLUDES_TSIZE
- NBPG * u.u_tsize
diff --git a/bfd/vaxbsd.c b/bfd/vaxbsd.c
index 5f5f8a1e59d6..fc53f7800bb4 100644
--- a/bfd/vaxbsd.c
+++ b/bfd/vaxbsd.c
@@ -1,5 +1,5 @@
/* BFD back-end for BSD and Ultrix/VAX (1K page size) a.out-ish binaries.
- Copyright 2002, 2003 Free Software Foundation, Inc.
+ Copyright 2002, 2003, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -32,8 +32,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define TARGETNAME "a.out-vax-bsd"
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libaout.h"
diff --git a/bfd/versados.c b/bfd/versados.c
index fb6cfbd22ac0..a2ce0db79ae4 100644
--- a/bfd/versados.c
+++ b/bfd/versados.c
@@ -1,6 +1,6 @@
/* BFD back-end for VERSAdos-E objects.
- Copyright 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support <sac@cygnus.com>.
Versados is a Motorola trademark.
@@ -37,8 +37,8 @@
o Object Text Record
o End Record. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libbfd.h"
#include "libiberty.h"
@@ -675,7 +675,7 @@ versados_set_section_contents (bfd *abfd ATTRIBUTE_UNUSED,
static int
versados_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
- bfd_boolean exec ATTRIBUTE_UNUSED)
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return 0;
}
@@ -798,6 +798,7 @@ versados_canonicalize_reloc (bfd *abfd,
#define versados_read_minisymbols _bfd_generic_read_minisymbols
#define versados_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
#define versados_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
+#define versados_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
#define versados_set_arch_mach bfd_default_set_arch_mach
#define versados_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents
#define versados_bfd_relax_section bfd_generic_relax_section
diff --git a/bfd/version.h b/bfd/version.h
index f0ad1a889092..88dbbce9fc80 100644
--- a/bfd/version.h
+++ b/bfd/version.h
@@ -1,3 +1,4 @@
-#define BFD_VERSION_DATE 20070807
+#define BFD_VERSION_DATE 20070703
#define BFD_VERSION @bfd_version@
-#define BFD_VERSION_STRING @bfd_version_string@
+#define BFD_VERSION_STRING @bfd_version_package@ @bfd_version_string@
+#define REPORT_BUGS_TO @report_bugs_to@
diff --git a/bfd/vms-gsd.c b/bfd/vms-gsd.c
index 9d06cf78d0ea..661f0c437707 100644
--- a/bfd/vms-gsd.c
+++ b/bfd/vms-gsd.c
@@ -1,7 +1,7 @@
/* vms-gsd.c -- BFD back-end for VAX (openVMS/VAX) and
EVAX (openVMS/Alpha) files.
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2007 Free Software Foundation, Inc.
go and read the openVMS linker manual (esp. appendix B)
if you don't know what's going on here :-)
@@ -22,8 +22,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
diff --git a/bfd/vms-hdr.c b/bfd/vms-hdr.c
index 24a0aec1a0c5..f116904f2373 100644
--- a/bfd/vms-hdr.c
+++ b/bfd/vms-hdr.c
@@ -1,7 +1,7 @@
/* vms-hdr.c -- BFD back-end for VMS/VAX (openVMS/VAX) and
EVAX (openVMS/Alpha) files.
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
- Free Software Foundation, Inc.
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006,
+ 2007 Free Software Foundation, Inc.
HDR record handling functions
EMH record handling functions
@@ -25,9 +25,9 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+#include "sysdep.h"
#include "bfd.h"
#include "bfdver.h"
-#include "sysdep.h"
#include "bfdlink.h"
#include "safe-ctype.h"
#include "libbfd.h"
@@ -248,7 +248,7 @@ _bfd_vms_write_hdr (bfd *abfd, int objtype)
/* LMN. */
_bfd_vms_output_begin (abfd, EOBJ_S_C_EMH, EMH_S_C_LNM);
- _bfd_vms_output_dump (abfd, (unsigned char *)"GAS proGIS", 10);
+ _bfd_vms_output_dump (abfd, (unsigned char *) STRING_COMMA_LEN ("GAS proGIS"));
_bfd_vms_output_flush (abfd);
/* SRC. */
@@ -260,7 +260,7 @@ _bfd_vms_write_hdr (bfd *abfd, int objtype)
if (symbol->flags & BSF_FILE)
{
- if (strncmp ((char *)symbol->name, "<CASE:", 6) == 0)
+ if (CONST_STRNEQ ((char *)symbol->name, "<CASE:"))
{
PRIV (flag_hash_long_names) = symbol->name[6] - '0';
PRIV (flag_show_after_trunc) = symbol->name[7] - '0';
@@ -280,13 +280,13 @@ _bfd_vms_write_hdr (bfd *abfd, int objtype)
}
if (symnum == abfd->symcount)
- _bfd_vms_output_dump (abfd, (unsigned char *)"noname", 6);
+ _bfd_vms_output_dump (abfd, (unsigned char *) STRING_COMMA_LEN ("noname"));
_bfd_vms_output_flush (abfd);
/* TTL. */
_bfd_vms_output_begin (abfd, EOBJ_S_C_EMH, EMH_S_C_TTL);
- _bfd_vms_output_dump (abfd, (unsigned char *)"TTL", 3);
+ _bfd_vms_output_dump (abfd, (unsigned char *) STRING_COMMA_LEN ("TTL"));
_bfd_vms_output_flush (abfd);
/* CPR. */
diff --git a/bfd/vms-misc.c b/bfd/vms-misc.c
index 7a3368bc7b04..31bd3b45a37c 100644
--- a/bfd/vms-misc.c
+++ b/bfd/vms-misc.c
@@ -1,7 +1,7 @@
/* vms-misc.c -- Miscellaneous functions for VAX (openVMS/VAX) and
EVAX (openVMS/Alpha) files.
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2007 Free Software Foundation, Inc.
Written by Klaus K"ampf (kkaempf@rmi.de)
@@ -23,8 +23,8 @@
#include <stdarg.h>
#endif
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
diff --git a/bfd/vms-tir.c b/bfd/vms-tir.c
index d6bff96f483f..af79f20b75dd 100644
--- a/bfd/vms-tir.c
+++ b/bfd/vms-tir.c
@@ -1,6 +1,6 @@
/* vms-tir.c -- BFD back-end for VAX (openVMS/VAX) and
EVAX (openVMS/Alpha) files.
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2007
Free Software Foundation, Inc.
TIR record handling functions
@@ -34,8 +34,8 @@
qw quadword (8 byte, 64 bit)
da data stream */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "vms.h"
diff --git a/bfd/vms.c b/bfd/vms.c
index e6ee98a53eec..c73692e32b5d 100644
--- a/bfd/vms.c
+++ b/bfd/vms.c
@@ -1,7 +1,7 @@
/* vms.c -- BFD back-end for VAX (openVMS/VAX) and
EVAX (openVMS/Alpha) files.
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- 2006 Free Software Foundation, Inc.
+ 2006, 2007 Free Software Foundation, Inc.
Written by Klaus K"ampf (kkaempf@rmi.de)
@@ -19,8 +19,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
@@ -487,7 +487,7 @@ vms_new_section_hook (bfd * abfd, asection *section)
vms_debug (7, "%d: %s\n", section->index, section->name);
#endif
- return TRUE;
+ return _bfd_generic_new_section_hook (abfd, section);
}
/* Read the contents of a section.
@@ -1353,6 +1353,22 @@ vms_bfd_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
return & alpha_howto_table[alpha_type];
}
+static reloc_howto_type *
+vms_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (alpha_howto_table) / sizeof (alpha_howto_table[0]);
+ i++)
+ if (alpha_howto_table[i].name != NULL
+ && strcasecmp (alpha_howto_table[i].name, r_name) == 0)
+ return &alpha_howto_table[i];
+
+ return NULL;
+}
+
/* Part 4.7, writing an object file. */
/* Set the architecture and machine type in BFD abfd to arch and mach.
@@ -1402,7 +1418,7 @@ vms_set_section_contents (bfd * abfd,
static int
vms_sizeof_headers (bfd * abfd ATTRIBUTE_UNUSED,
- bfd_boolean reloc ATTRIBUTE_UNUSED)
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
#if VMS_DEBUG
vms_debug (1, "vms_sizeof_headers (%p, %s)\n", abfd, (reloc)?"True":"False");
diff --git a/bfd/warning.m4 b/bfd/warning.m4
index 2e2dd424c0f7..b366cadeb293 100644
--- a/bfd/warning.m4
+++ b/bfd/warning.m4
@@ -4,7 +4,7 @@ AC_DEFUN([AM_BINUTILS_WARNINGS],[
GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes"
AC_ARG_ENABLE(werror,
- [ --enable-werror treat compile warnings as errors],
+ [ --enable-werror treat compile warnings as errors],
[case "${enableval}" in
yes | y) ERROR_ON_WARNING="yes" ;;
no | n) ERROR_ON_WARNING="no" ;;
@@ -27,7 +27,7 @@ if test "${GCC}" = yes ; then
fi
AC_ARG_ENABLE(build-warnings,
-[ --enable-build-warnings Enable build-time compiler warnings],
+[ --enable-build-warnings enable build-time compiler warnings],
[case "${enableval}" in
yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";;
no) if test "${GCC}" = yes ; then
diff --git a/bfd/xcoff-target.h b/bfd/xcoff-target.h
index 7e73cf26a59d..b912fdf35e6d 100644
--- a/bfd/xcoff-target.h
+++ b/bfd/xcoff-target.h
@@ -1,5 +1,5 @@
/* Common definitions for backends based on IBM RS/6000 "XCOFF64" files.
- Copyright 2000, 2001, 2002, 2004, 2005
+ Copyright 2000, 2001, 2002, 2004, 2005, 2006
Free Software Foundation, Inc.
Contributed by Cygnus Support.
@@ -125,7 +125,7 @@ extern bfd * _bfd_xcoff_openr_next_archived_file (bfd *, bfd *);
extern int _bfd_xcoff_generic_stat_arch_elt (bfd *, struct stat *);
extern bfd_boolean _bfd_xcoff_write_armap (bfd *, unsigned int, struct orl *, unsigned int, int);
extern bfd_boolean _bfd_xcoff_write_archive_contents (bfd *);
-extern int _bfd_xcoff_sizeof_headers (bfd *, bfd_boolean);
+extern int _bfd_xcoff_sizeof_headers (bfd *, struct bfd_link_info *);
extern void _bfd_xcoff_swap_sym_in (bfd *, void *, void *);
extern unsigned int _bfd_xcoff_swap_sym_out (bfd *, void *, void *);
extern void _bfd_xcoff_swap_aux_in (bfd *, void *, int, int, int, int, void *);
diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c
index 47c330b6c15f..b02886a416b9 100644
--- a/bfd/xcofflink.c
+++ b/bfd/xcofflink.c
@@ -1,6 +1,6 @@
/* POWER/PowerPC XCOFF linker support.
Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006 Free Software Foundation, Inc.
+ 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>, Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
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 "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "coff/internal.h"
@@ -794,27 +794,27 @@ xcoff_link_create_extra_sections (bfd * abfd, struct bfd_link_info *info)
if (xcoff_hash_table (info)->loader_section == NULL)
{
asection *lsec;
+ flagword flags = SEC_HAS_CONTENTS | SEC_IN_MEMORY;
- lsec = bfd_make_section_anyway (abfd, ".loader");
+ lsec = bfd_make_section_anyway_with_flags (abfd, ".loader", flags);
if (lsec == NULL)
goto end_return;
xcoff_hash_table (info)->loader_section = lsec;
- lsec->flags |= SEC_HAS_CONTENTS | SEC_IN_MEMORY;
}
/* Likewise for the linkage section. */
if (xcoff_hash_table (info)->linkage_section == NULL)
{
asection *lsec;
+ flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+ | SEC_IN_MEMORY);
- lsec = bfd_make_section_anyway (abfd, ".gl");
+ lsec = bfd_make_section_anyway_with_flags (abfd, ".gl", flags);
if (lsec == NULL)
goto end_return;
xcoff_hash_table (info)->linkage_section = lsec;
- lsec->flags |= (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
- | SEC_IN_MEMORY);
lsec->alignment_power = 2;
}
@@ -822,14 +822,14 @@ xcoff_link_create_extra_sections (bfd * abfd, struct bfd_link_info *info)
if (xcoff_hash_table (info)->toc_section == NULL)
{
asection *tsec;
+ flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+ | SEC_IN_MEMORY);
- tsec = bfd_make_section_anyway (abfd, ".tc");
+ tsec = bfd_make_section_anyway_with_flags (abfd, ".tc", flags);
if (tsec == NULL)
goto end_return;
xcoff_hash_table (info)->toc_section = tsec;
- tsec->flags |= (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
- | SEC_IN_MEMORY);
tsec->alignment_power = 2;
}
@@ -837,14 +837,14 @@ xcoff_link_create_extra_sections (bfd * abfd, struct bfd_link_info *info)
if (xcoff_hash_table (info)->descriptor_section == NULL)
{
asection *dsec;
+ flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+ | SEC_IN_MEMORY);
- dsec = bfd_make_section_anyway (abfd, ".ds");
+ dsec = bfd_make_section_anyway_with_flags (abfd, ".ds", flags);
if (dsec == NULL)
goto end_return;
xcoff_hash_table (info)->descriptor_section = dsec;
- dsec->flags |= (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
- | SEC_IN_MEMORY);
dsec->alignment_power = 2;
}
@@ -853,13 +853,13 @@ xcoff_link_create_extra_sections (bfd * abfd, struct bfd_link_info *info)
&& info->strip != strip_all)
{
asection *dsec;
+ flagword flags = SEC_HAS_CONTENTS | SEC_IN_MEMORY;
- dsec = bfd_make_section_anyway (abfd, ".debug");
+ dsec = bfd_make_section_anyway_with_flags (abfd, ".debug", flags);
if (dsec == NULL)
goto end_return;
xcoff_hash_table (info)->debug_section = dsec;
- dsec->flags |= SEC_HAS_CONTENTS | SEC_IN_MEMORY;
}
}
@@ -1552,16 +1552,17 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
{
/* The linker script puts the .td section in the data
section after the .tc section. */
- csect = bfd_make_section_anyway (abfd, ".td");
+ csect = bfd_make_section_anyway_with_flags (abfd, ".td",
+ SEC_ALLOC);
}
else
- csect = bfd_make_section_anyway (abfd, ".bss");
+ csect = bfd_make_section_anyway_with_flags (abfd, ".bss",
+ SEC_ALLOC);
if (csect == NULL)
goto error_return;
csect->vma = sym.n_value;
csect->size = aux.x_csect.x_scnlen.l;
- csect->flags |= SEC_ALLOC;
csect->alignment_power = SMTYP_ALIGN (aux.x_csect.x_smtyp);
/* There are a number of other fields and section flags
which we do not bother to set. */
@@ -5460,8 +5461,8 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
that needs padding. This requires unlinking and
relinking the bfd's section list. */
- n = bfd_make_section_anyway (abfd, ".pad");
- n->flags = SEC_HAS_CONTENTS;
+ n = bfd_make_section_anyway_with_flags (abfd, ".pad",
+ SEC_HAS_CONTENTS);
n->alignment_power = 0;
bfd_section_list_remove (abfd, n);
diff --git a/bfd/xsym.c b/bfd/xsym.c
index 9659a65e021b..c9757b65414a 100644
--- a/bfd/xsym.c
+++ b/bfd/xsym.c
@@ -1,5 +1,5 @@
/* xSYM symbol-file support for BFD.
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -18,9 +18,9 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+#include "sysdep.h"
#include "xsym.h"
#include "bfd.h"
-#include "sysdep.h"
#include "libbfd.h"
#define bfd_sym_close_and_cleanup _bfd_generic_close_and_cleanup
@@ -34,9 +34,6 @@
#define bfd_sym_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define bfd_sym_read_minisymbols _bfd_generic_read_minisymbols
#define bfd_sym_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
-#define bfd_sym_get_reloc_upper_bound _bfd_norelocs_get_reloc_upper_bound
-#define bfd_sym_canonicalize_reloc _bfd_norelocs_canonicalize_reloc
-#define bfd_sym_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup
#define bfd_sym_set_arch_mach _bfd_generic_set_arch_mach
#define bfd_sym_get_section_contents _bfd_generic_get_section_contents
#define bfd_sym_set_section_contents _bfd_generic_set_section_contents
@@ -2228,7 +2225,7 @@ bfd_sym_scan (bfd *abfd, bfd_sym_version version, bfd_sym_data_struct *mdata)
if (mdata->name_table == NULL)
return -1;
- bfdsec = bfd_make_section_anyway (abfd, name);
+ bfdsec = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
if (bfdsec == NULL)
return -1;
@@ -2238,8 +2235,6 @@ bfd_sym_scan (bfd *abfd, bfd_sym_version version, bfd_sym_data_struct *mdata)
bfdsec->filepos = 0;
bfdsec->alignment_power = 0;
- bfdsec->flags = SEC_HAS_CONTENTS;
-
abfd->tdata.sym_data = mdata;
return 0;
@@ -2277,11 +2272,7 @@ bfd_sym_object_p (bfd *abfd)
return NULL;
}
-asymbol *
-bfd_sym_make_empty_symbol (bfd *abfd)
-{
- return bfd_alloc (abfd, sizeof (asymbol));
-}
+#define bfd_sym_make_empty_symbol _bfd_generic_make_empty_symbol
void
bfd_sym_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED, asymbol *symbol, symbol_info *ret)
@@ -2302,7 +2293,8 @@ bfd_sym_canonicalize_symtab (bfd *abfd ATTRIBUTE_UNUSED, asymbol **sym ATTRIBUTE
}
int
-bfd_sym_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, bfd_boolean exec ATTRIBUTE_UNUSED)
+bfd_sym_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
{
return 0;
}
@@ -2351,7 +2343,7 @@ const bfd_target sym_vec =
BFD_JUMP_TABLE_CORE (_bfd_nocore),
BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
BFD_JUMP_TABLE_SYMBOLS (bfd_sym),
- BFD_JUMP_TABLE_RELOCS (bfd_sym),
+ BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
BFD_JUMP_TABLE_WRITE (bfd_sym),
BFD_JUMP_TABLE_LINK (bfd_sym),
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
diff --git a/bfd/xsym.h b/bfd/xsym.h
index 386a16357468..7b69aadf34b2 100644
--- a/bfd/xsym.h
+++ b/bfd/xsym.h
@@ -1,5 +1,5 @@
/* xSYM symbol-file support for BFD.
- Copyright 1999, 2000, 2001, 2002, 2003, 2005
+ Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -687,8 +687,6 @@ extern int bfd_sym_scan
(bfd *, bfd_sym_version, bfd_sym_data_struct *);
extern const bfd_target * bfd_sym_object_p
(bfd *);
-extern asymbol * bfd_sym_make_empty_symbol
- (bfd *);
extern void bfd_sym_get_symbol_info
(bfd *, asymbol *, symbol_info *);
extern long bfd_sym_get_symtab_upper_bound
@@ -696,6 +694,6 @@ extern long bfd_sym_get_symtab_upper_bound
extern long bfd_sym_canonicalize_symtab
(bfd *, asymbol **);
extern int bfd_sym_sizeof_headers
- (bfd *, bfd_boolean);
+ (bfd *, struct bfd_link_info *);
#endif /* __xSYM_H__ */
diff --git a/bfd/xtensa-isa.c b/bfd/xtensa-isa.c
index 5fcf51eea935..362e47c31797 100644
--- a/bfd/xtensa-isa.c
+++ b/bfd/xtensa-isa.c
@@ -1,5 +1,5 @@
/* Configurable Xtensa ISA support.
- Copyright 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -17,8 +17,8 @@
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 "bfd.h"
#include "libbfd.h"
#include "xtensa-isa.h"
#include "xtensa-isa-internal.h"
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 2f6520f44207..574f1839e378 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,267 +1,696 @@
-2006-08-15 Nick Clifton <nickc@redhat.com>
+2007-07-02 Alan Modra <amodra@bigpond.net.au>
- PR binutils/3039
- * wrstabs.c (stab_tag_type): Initialize 'size'.
+ PR 4716
+ * objcopy.c (filter_symbols): Correct relocatable file test.
-2006-06-07 Joseph S. Myers <joseph@codesourcery.com>
+2007-07-02 Alan Modra <amodra@bigpond.net.au>
- * po/Make-in (pdf, ps): New dummy targets.
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * config.in: Regenerate.
+ * doc/Makefile.in: Regenerate.
+ * po/POTFILES.in: Regenerate.
+ * po/binutils.pot: Regenerate.
-2006-06-02 Joseph S. Myers <joseph@codesourcery.com>
+2007-06-30 H.J. Lu <hongjiu.lu@intel.com>
- * doc/Makefile.am (TEXI2DVI): Define.
- * doc/Makefile.in: Regenerate.
+ * aclocal.m4: Regenerated.
+ * doc/Makefile.in: Likewise.
+ * Makefile.in: Likewise.
-2006-06-01 Daniel Jacobowitz <dan@codesourcery.com>
-
- Backport:
- 2006-05-19 Andreas Schwab <schwab@suse.de>
- * doc/Makefile.am (addr2line.1): Depend on $(binutils_TEXINFOS).
- (ar.1): Likewise.
- (dlltool.1): Likewise.
- (nlmconv.1): Likewise.
- (nm.1): Likewise.
- (objcopy.1): Likewise.
- (objdump.1): Likewise.
- (ranlib.1): Likewise.
- (readelf.1): Likewise.
- (size.1): Likewise.
- (strings.1): Likewise.
- (strip.1): Likewise.
- (windres.1): Likewise.
- (cxxfilt.man): Likewise.
- * doc/Makefile.in: Regenerated.
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
+
+ * readelf.c (display_power_gnu_attribute, process_power_specific):
+ New.
+ (process_arch_specific): Call process_power_specific.
+
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
+
+ * readelf.c (display_mips_gnu_attribute): New.
+ (process_mips_specific): Call process_attributes.
+
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
+
+ * readelf.c (display_gnu_attribute): New.
+ (process_arm_specific): Rearrange as process_attributes.
+ (process_arm_specific): Replace by wrapper of process_attributes.
+
+2007-06-28 Roland McGrath <roland@frob.com>
+
+ * objcopy.c (setup_section): Don't reset ELF section type to
+ SHT_NOBITS when it is SHT_NOTE.
+ * doc/binutils.texi (objcopy, strip): Mention under --only-keep-debug.
+
+2007-06-27 Alan Modra <amodra@bigpond.net.au>
+
+ * ar.c: Rename uses of bfd.next to bfd.archive_next throughout.
+ * arsup.c: Likewise.
+ * binemul.c: Likewise.
+ * objcopy.c: Likewise.
+ * dlltool.c: Likewise.
+
+2007-06-26 Shantonu Sen <ssen@apple.com>
+
+ PR binutils/4693
+ * Makefile.am (windres_DEPENDENCIES, windmc_DEPENDENCIES): Move
+ dependency on $(LIBICONV) to ...
+ (windres_LDADD, windmc_LDADD) ... here.
+ * Makefile.in: Regenerate.
+
+2007-06-21 Alan Modra <amodra@bigpond.net.au>
+
+ * embedspu.sh (relas): Correct sh_info parsing.
+
+2007-06-19 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * objdump.c: Include sys/stat.h.
+
+2007-06-19 Kai Tietz <kai.tietz@onevision.com>
+
+ * Makefile.am: Add windmc tool.
+ * Makefile.in: Regenerate.
+ * configure.in: Add windmc tool.
+ * configure: Regenerate.
+ * mclex.c: New.
+ * mcparse.y: New.
+ * windmc.c: New.
+ * windmc.h: New.
+ * doc/Makefile.am: Add windmc tool.
+ * doc/Makefile.in: Regenerate.
+ * doc/binutils.texi: Add windmc documentation.
+ * NEWS: Mention new tool.
+
+2007-06-18 Andi Kleen <ak@suse.de>
+
+ * objdump.c: Include sys/mman.h
+ (print_file_list): Remove f, add map, mapsize, linemap, maxline,
+ last_line, first fields.
+ (slurp_file): Add.
+ (index_file): Add.
+ (print_file_open): Call slurp_file and index_file. Initialize new
+ fields.
+ (skip_to_line): Rename to print_line and write only single line.
+ (dump_line): Add.
+ (show_line): Change to new algorithm.
+
+2007-06-18 Thomas Weidenmueller <w3seek@reactos.org>
+
+ * resres.c (probe_binary): Fix test for badly formatted headers.
+
+2007-06-18 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * rclex.c: (cpp_line): Add code_page pragma support.
+ * windres.c: (usage, long_options, main): Add new option
+ --codepage or -c.
+ * winduni.c: (wind_default_codepage, wind_current_codepage): New.
+ (unicode_from_ascii, ascii_from_unicode): Use
+ wind_current_codepage as codepage parameter.
+ (unicode_print): Print 4 characters for hexadecimal values in
+ unicode strings.
+ * winduni.h: (wind_default_codepage, wind_current_codepage):
+ Export.
+ * doc/binutils.texi: Document new option.
+ * NEWS: Mention new features of windres.
+
+2007-06-18 Brian D. Watt <bwatt@us.ibm.com>
+
+ * embedspu.sh: Parse _SPUEAR_ symbol values as hex.
+
+2007-06-14 H.J. Lu <hongjiu.lu@intel.com>
-2006-05-30 Nick Clifton <nickc@redhat.com>
+ * Makefile.am (ACLOCAL_AMFLAGS): Add -I ../config -I ../bfd.
- * po/es.po: Updated Spanish translation.
+ * acinclude.m4: Removed.
-2006-05-24 Nick Clifton <nickc@redhat.com>
+ * Makefile.in: Regenerated.
+ * aclocal.m4: Likewise.
+ * configure: Likewise.
- * po/fr.po: Updated French translation.
+2007-06-11 Nathan Sidwell <nathan@codesourcery.com>
-2006-05-23 Nick Clifton <nickc@redhat.com>
+ * dwarf.c (decode_location_expression): Add DW_OP_form_tls_address.
- * po/vi.po: Updated Vietnamese translation.
+2007-06-06 Kai Tietz <Kai.Tietz@onevision.com>
-2006-05-22 Daniel Jacobowitz <dan@codesourcery.com>
+ PR binutils/4356 binutils/591
+ * resrc.c (filename_need_quotes): New function.
+ (look_for_default): If filename_need_quotes is true then quote the
+ filename in the command line being created.
+ (read_rc_file): Likewise.
- * po/ru.po: Updated translation.
+2007-06-06 Ben Elliston <bje@au.ibm.com>
-2006-05-02 Daniel Jacobowitz <dan@codesourcery.com>
+ * doc/binutils.texi (objdump): Fix capitalisation of "PowerPC".
- * doc/Makefile.am (AM_MAKEINFOFLAGS): New.
- (TEXI2POD): Use AM_MAKEINFOFLAGS.
- (config.texi): Don't set top_srcdir.
- * doc/binutils.texi: Don't use top_srcdir.
- * aclocal.m4, Makefile.in, doc/Makefile.in: Regenerated.
+2007-06-05 Kai Tietz <Kai.Tietz@onevision.com>
-2006-04-12 Nick Clifton <nickc@redhat.com>
+ * Makefile.am: Add LIBICONV to windres.
+ * acinclude.m4: Added missing "lib-*.m4" and "lt*.m4" files.
+ * configure.in: Add AC_CHECK_HEADER for iconv.h and use AM_ICONV.
+ * config.in: Add ICONV defines.
+ * aclocal.m4: Regenerate.
+ * confugure: Regenerate.
+ * winduni.c: (local_iconv_map codepages, wind_language_t,
+ languages, unicode_is_valid_codepage, wind_find_language_by_id,
+ wind_find_language_by_codepage, wind_find_codepage_info,
+ unicode_from_codepage, codepage_from_unicode, iconv_onechar,
+ wind_iconv_cp, wind_MultiByteToWideChar wind_WideCharToMultiByte):
+ New.
+ (ascii_from_unicode): Use codepage_from_unicode.
+ (ascii_from_unicode): Use unicode_from_codepage.
+ Use for cygwin windows API for unicode transformation.
+ * winduni.h: (CP_ACP, CP_UTF7, CP_UTF8, CP_OEM, CP_UTF16): New
+ macros.
+ (wind_language_t, local_iconv_map): New types.
+ (wind_find_language_by_id, wind_find_language_by_codepage,
+ unicode_is_valid_codepage, wind_find_codepage_info,
+ unicode_from_codepage, codepage_from_unicode): New
+ prototypes.
+
+2007-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * embedspu.sh: Handle R_SPU_PPU* relocs with no symbol.
+
+2007-05-30 Alan Modra <amodra@bigpond.net.au>
- * objdump.c (objdump_symbol_at_address): Fix typo in comment.
+ * objcopy.c (copy_object): Revert 2007-05-11 change. Don't
+ avoid calling bfd_copy_private_bfd_data for ELF STRIP_NONDEBUG.
+ (setup_section): Don't modify flags, and don't avoid calling
+ bfd_copy_private_section_data for ELF STRIP_NONDEBUG.
+ * readelf.c (process_program_headers): Ignore .dynamic of type
+ SHT_NOBITS.
-2006-04-10 Ben Elliston <bje@gnu.org>
+2007-05-29 Alan Modra <amodra@bigpond.net.au>
- * MAINTAINERS (CGEN Maintainers): Remove myself.
+ * embedspu.sh: Emit SPU ELF image to .data.rel.ro.speelf if
+ pic or pie and image needs relocs.
-2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
+2007-05-24 Steve Ellcey <sje@cup.hp.com>
- * po/Make-in: Add install-html target.
- * Makefile.am: Add install-html and install-html-recursive targets.
* Makefile.in: Regenerate.
- * configure.in: AC_SUBST datarootdir, docdir and htmldir.
* configure: Regenerate.
- * doc/Makefile.am: Add install-html and install-html-am targets.
+ * aclocal.m4: Regenerate.
* doc/Makefile.in: Regenerate.
-2006-04-05 Eric Botcazou <ebotcazou@adacore.com>
+2007-05-24 Kai Tietz <Kai.Tietz@onevision.com>
- * addr2line.c (long_options): Add new option 'section'.
- (usage): Document new -j/--section option.
- (find_offset_in_section): New function.
- (translate_addresses): Add 'section' parameter.
- If it is non-null, call find_offset_in_section on it.
- (process_file): Add 'section_name' parameter.
- If it is non-null, look for the section in the BFD object.
- Pass the section to translate_addresses.
- (main): Handle new -j option.
- Pass the section name to process_file.
- * doc/binutils.texi (addr2line): Document new -j/--section option.
+ * rcparse.y: Join strings for elements having no side-effects in
+ "rc"-grammar.
-2006-03-29 Ben Elliston <bje@au.ibm.com>
+2007-05-23 Kai Tietz <Kai.Tietz@onevision.com>
- * resbin.c: Avoid duplicating constants in calls to reswr_alloc.
+ * rclex.c: New file replacing rclex.l.
+ * rclex.l: Removed.
+ * windint.h: New file holding common structure and type
+ definitions.
+ * Makefile.am: Added new header windint.h and exchanged rclex.l by
+ rclex.c.
+ * Makefile.in: Regenerate.
+ * rcparse.y: Renamed some structures.
+ Use in internal representation always bfd_vma instead of long or
+ int.
+ Removed from %union unused stringtable.
+ Added to %union suni structure for unicode strings.
+ Added new tokens for ANICURSOR, ANIICON, DLGINCLUDE,
+ DLGINIT, FONTDIR, HTML, MANIFEST, PLUGPLAY, VXD,
+ TOOLBAR, BUTTON, QUOTEDUNISTRING, and SIZEDUNISTRING.
+ Added support for these new rc file tokens.
+ * resbin.c: Rewrote using bfd and binary structures, and support
+ new resource types.
+ * rescoff.c: Likewise.
+ * resres.c: Likewise.
+ * resrc.c: Likewise. Dumps as RC are now recompilable.
+ * windres.c: As above. Using bfd for res and provide target
+ specific endianess support.
+ * windres.h: Use windint.h as include. Additionally removed K&R
+ syntax.
+ * winduni.c: New printing and unichar support routines.
+ * winduni.h: Prototypes for new unichar helpers.
+ * windint.h: New file.
-2006-03-20 Nathan Sidwell <nathan@codesourcery.com>
+2007-05-22 Paul Brook <paul@codesourcery.com>
- * BRANCHES: Remove binutils-csl-arm-2006q1-branch. Document
- binutils-csl-2_17-branch instead.
+ * objdump.c (find_symbol_for_address): Merge section and target
+ specific filtering code.
-2006-03-20 Paul Brook <paul@codesourcery.com>
+2007-05-22 Nick Clifton <nickc@redhat.com>
- * BRANCHES: Mention binutils-csl-arm-2006q1-branch.
+ * doc/binutils.texi: Use @copying around the copyright notice.
-2006-03-16 Alan Modra <amodra@bigpond.net.au>
+2007-05-21 Richard Sandiford <richard@codesourcery.com>
- PR 2434
- * ieee.c (write_ieee_debugging_info): Adjust bfd_hash_table_init calls.
- * wrstabs.c (write_stabs_in_sections_debugging_info): Likewise.
+ * objdump.c (disassemble_bytes): Ignore disassembler_needs_relocs
+ for executables and shared libraries.
-2006-03-13 Ben Elliston <bje@au.ibm.com>
+2007-05-18 Nathan Sidwell <nathan@codesourcery.com>
- * bucomm.c (display_target_list): Make local variable `a' to be of
- type enum bfd_architecture. Thus no need to cast enums to int.
- (display_info_table): Likewise.
+ * objcopy.c (strip_main): Detect identical input and output file
+ names.
+ (copy_main): Refactor tempname detection and use.
-2006-03-10 Paul Brook <paul@codesourcery.com>
+2007-05-17 Nick Clifton <nickc@redhat.com>
- * readelf.c (decode_ARM_machine_flags): Handle EABIv5.
+ * objdump.c (load_debug_section): Select bias for DWARF debug
+ addresses based on the flavour of the bfd.
-2006-03-10 Alan Modra <amodra@bigpond.net.au>
+2007-05-11 Alan Modra <amodra@bigpond.net.au>
- * dwarf.c (process_extended_line_op): Remove pointer_size param.
- Use length instead to determine address size.
- (get_pointer_size_and_offset_of_comp_unit): Delete.
- (display_debug_lines): Adjust for above.
- (display_debug_aranges): Don't stop on finding two zeros.
- (display_debug_frames): For warning, print offset not pointer.
+ PR 4479
+ * objcopy.c (copy_object): Don't copy ELF program headers for
+ --only-keep-debug.
-2006-03-09 Danny Smith <dannysmith@users.sourceforge.net>
+2007-05-11 Alan Modra <amodra@bigpond.net.au>
- * dlltool.c: Update copyright year.
- * doc/binutils.texi: Likewise.
+ * embedspu.sh (find_prog): Prefer prog in same dir as embedspu
+ over one found on the users path.
+ (main): Generate .reloc for each R_SPU_PPU* reloc.
-2006-03-09 Danny Smith <dannysmith@users.sourceforge.net>
+2007-04-28 Alan Modra <amodra@bigpond.net.au>
- * dlltool.c (add_stdcall_underscore): New flag.
- (xlate): Also add underscore to stdcall symbol if
- add_stdcall_underscore set.
- (usage): Document --add-stdcall-underscore option.
- (OPTION_ADD_STDCALL_UNDERSCORE): New define.
- (long_options): Use it for --add-stdcall-underscore option.
- (main): Handle it.
- * doc/binutils.texi: Document --add-stdcall-underscore option
- and differentiate from --add-underscore.
+ * prdbg.c (tg_variable): Adjust for changed demangler.
+ (tg_start_function): Likewise.
-2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
+2007-04-27 Alan Modra <amodra@bigpond.net.au>
- * readelf.c (get_machine_flags): Adjust.
+ * bucumm.h: Split off host dependencies to..
+ * sysdep.h: ..here.
+ Many files: Include sysdep.h. Remove duplicate headers and reorder.
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
-2006-03-03 Jakub Jelinek <jakub@redhat.com>
+2007-04-24 Nick Clifton <nickc@redhat.com>
- * dwarf.c (frame_display_row, display_debug_frames): Handle
- DW_CFA_val_offset, DW_CFA_val_offset_sf and DW_CFA_val_expression.
+ * srconv.c (walk_tree_type_1): Initialise dpt.dunno.
-2006-02-28 Nick Clifton <nickc@redhat.com>
+2007-04-24 Nathan Froyd <froydnj@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
- * objcopy.c (use_alt_mach_code): Change type to unsigned long.
- (copy_object): If bfd_alt_mach_code fails emit a more helpful
- message and if the target architecture is ELF use the alternative
- as replacement value for the e_machine number.
- (copy_main): Use strtoul to parse the number provided with the
- --alt-mach-code switch.
- * doc/binutils.texi (--alt-mach-code): Document that this switch
- can now set the absolute e_machine value.
+ * objcopy.c (filter_symbols): Explicitly stripping a symbol
+ used in relocations is an error.
+ Retype 'keep' to bfd_boolean.
-2006-02-27 Carlos O'Donell <carlos@codesourcery.com>
+2007-04-24 Alan Modra <amodra@bigpond.net.au>
- * po/Make-in: Add html target.
+ * Makefile.in: Regenerate.
+ * doc/Makefile.in: Regenerate.
-2006-02-17 Nick Hudson <nick.hudson@dsl.pipex.com>
+2007-04-20 Nathan Froyd <froydnj@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+ Thomas de Lellis <tdel@windriver.com>
- * readelf.c (get_machine_flags): Add logic for missing EF_SH flags.
+ * objcopy.c (reverse_bytes): New variable.
+ (command_line_switch, copy_main): Add OPTION_REVERSE_ENDIAN.
+ (copy_options, copy_usage): Add "reverse-bytes" entry.
+ (copy_section): Reverse bytes within output sections.
+ * doc/binutils.texi: Document new objcopy option.
-2006-02-14 Jakub Jelinek <jakub@redhat.com>
+2007-04-20 Nick Clifton <nickc@redhat.com>
- * config.in: Rebuilt.
+ * rclex.l: Allow underscores at the start of identifiers.
-2006-02-10 H.J. Lu <hongjiu.lu@intel.com>
+2007-04-19 Alan Modra <amodra@bigpond.net.au>
- PR binutils/2258
- * readelf.c (process_program_headers): Use
- ELF_IS_SECTION_IN_SEGMENT_MEMORY.
+ * budemang.c: Delete.
+ * budemang.h: Delete.
+ * addr2line.c (translate_addresses): Call bfd_demangle rather than
+ demangle.
+ * nm.c (print_symname): Likewise.
+ * objdump.c (objdump_print_symname, dump_symbols): Likewise.
+ (dump_bfd): Likewise.
+ * prdbg.c (struct pr_handle <demangler>): Add int param.
+ (tg_variable, tg_start_function): Adjust demangler calls.
+ * Makefile.am: Remove mention of budemang.[ch]. Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * po/POTFILES.in: Regenerate.
-2006-02-09 Eric Botcazou <ebotcazou@libertysurf.fr>
+2007-04-14 Steve Ellcey <sje@cup.hp.com>
- * configure.in (CHECK_DECLS): Add snprintf and vsnprintf.
+ * Makefile.am: Add ACLOCAL_AMFLAGS.
+ * configure.in: Change macro call order.
+ * Makefile.in: Regenerate.
* configure: Regenerate.
- * objdump.c (fprintf): Remove declaration.
- * bucomm.h (fprintf): Declare if not already declared.
- (snprintf): Likewise.
- (vsnprintf): Likewise.
-2006-02-08 H.J. Lu <hongjiu.lu@intel.com>
+2007-04-13 Nathan Sidwell <nathan@codesourcery.com>
+
+ * Makefile.am (TOOL_PROGS): Add objcopy.
+ * Makefile.in: Rebuilt.
+
+2007-04-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/4348
+ * objcopy.c (copy_object): Don't stop when there are no
+ sections to be copied.
+
+2007-04-10 Vladimir Prus <vladimir@codesourcery.com>
+
+ * NEWS: Mention disjoint histograms support in
+ gprof.
+
+2007-04-09 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * dwarf.c (process_debug_info): Do not require DW_AT_frame_base for
+ DW_TAG_inlined_subroutine.
+
+2007-04-06 Matt Thomas <matt@netbsd.org>
+
+ * MAINTAINERS: Add myself as VAX and NetBSD support maintainer.
+
+2007-04-05 Alan Modra <amodra@bigpond.net.au>
+
+ PR binutils/4292
+ * nm.c (print_value): Cast bfd_vma to unsigned long to suit
+ value_format_32bit.
+
+2007-04-02 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/4292
+ * nm.c (value_format): Replace with value_format_32bit and
+ value_format_64bit.
+ (set_radix): Update setting of value_format.
+ (set_print_width): New function. Compute the address size of a
+ given bfd and set the print_width global appropriately.
+ (display_archive): Use set_print_width.
+ (display_file): Likewise,
+ (print_object_filename_sysv): Update use of print_width.
+ (print_archive_member_sysv): Likewise.
+ (print_symbol_filename_posix): Likewise.
+ (print_sumbol_info_bfd, print_symbol_info_sysv): Likewise.
+
+2007-03-28 Richard Sandiford <richard@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+
+ * doc/binutils.texi: Put the contents after the title page rather
+ than at the end of the document.
+
+2007-03-28 Nick Clifton <nickc@redhat.com>
+
+ * readelf.c (slurp_rela_relocs): Add newline to end of error
+ messages.
+ (slurp_rel_relocs, request_dump, request_dump_byname,
+ process_program_headers, process_dynamic_section,
+ process_symbol_table, process_mips_specific, main): Likewise.
+
+2007-03-28 Alan Modra <amodra@bigpond.net.au>
+
+ * MAINTAINERS: Update mailing list addresses. Add myself
+ as PPC maintainer.
+
+2007-03-27 Alan Modra <amodra@bigpond.net.au>
+
+ * embedspu.sh: Correct toe_addr quoting.
+
+2007-03-27 Alan Modra <amodra@bigpond.net.au>
+
+ * embedspu.sh: Combine "_EAR_" and "_EAR_*" patterns. Tighten
+ .toe section and .toe address checks. Use .reloc for _EAR*
+ symbols defined in non-BSS sections. Build table for _SPUEAR_
+ symbols.
+
+2007-03-23 Kaz Kojima <kkojima@rr.iij4u.or.jp>
- * readelf.c (process_program_headers): Match PT_TLS segment
- only with SHT_TLS sections.
+ PR gas/3811
+ * readelf.c (debug_apply_rela_addends): Do nothing for SH.
-2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
+2007-03-22 Joseph Myers <joseph@codesourcery.com>
- * readelf.c (get_machine_flags): Add logic for EF_M68K flags.
+ * doc/binutils.texi: Include VERSION_PACKAGE when reporting
+ version.
-2006-02-02 H.J. Lu <hongjiu.lu@intel.com>
+2007-03-16 Kai Tietz <Kai.Tietz@onevision.com>
- * readelf.c (process_program_headers): Undo the last change.
+ * dlltool.c (make_one_lib_file): Use pc-relative relocation
+ instead of an absolute relocation for x86_64-pc-mingw32 target.
-2006-02-02 H.J. Lu <hongjiu.lu@intel.com>
+2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
- * readelf.c (process_program_headers): Undo the change made on
- 2004-09-22. Match PT_DYNAMIC segment only with SHT_DYNAMIC
- sections.
+ * Makefile.am (REPORT_BUGS_TO): Removed.
+ (INCLUDES): Remove -DREPORT_BUGS_TO.
+ * Makefile.in: Regenerated.
-2006-01-30 Nick Clifton <nickc@redhat.com>
+ * bucomm.c: Don't include bfdver.h.
+ * objdump.c: Likewise.
+ * version.c: Likewise.
- * objcopy.c (copy_object): Catch the case where an attempt is made
- to add a section that already exists and produce a more helpful
- warning message.
+ * bucomm.h: Include bfdver.h.
-2006-01-26 Nick Clifton <nickc@redhat.com>
+ * configure.in (--with-bugurl): Removed.
+ * configure: Regenerated.
- * po/vi.po: New Vietnamese translation.
- * configure.in (ALL_LINGUAS): Add vi.
+ * doc/Makefile.am (binutils_TEXINFOS): Removed.
+ (AM_MAKEINFOFLAGS): Add -I ../../bfd/doc.
+ (TEXI2DVI): Likewise.
+ (config.texi): Removed.
+ (MOSTLYCLEANFILES): Remove config.texi.
+ * doc/Makefile.in: Regenerated.
+
+ * doc/binutils.texi: Include bfdver.texi instead of
+ config.texi.
+
+2007-03-13 Nick Clifton <nickc@redhat.com>
+
+ * readelf.c (dump_section): Also test for SHT_REL sections when
+ producing the warning about unapplied relocs.
+
+2007-03-07 Joseph Myers <joseph@codesourcery.com>
+
+ * configure.in (REPORT_BUGS_TEXI): Define to Texinfo version of
+ bug-reporting URL.
+ * doc/Makefile.am (config.texi): Define BUGURL.
+ * doc/binutils.texi: Use BUGURL. Remove text about large files
+ and uuencoding.
+ * Makefile.in, configure, doc/Makefile.in: Regenerate.
+
+2007-03-01 Phil Edwards <phil@codesourcery.com>
+ Richard Sandiford <richard@codesourcery.com>
+
+ * NEWS: Mention addition of --extract-symbol.
+ * doc/binutils.texi: Document it.
+ * objcopy.c (extract_symbol): New variable.
+ (OPTION_EXTRACT_SYMBOLS): New command_line_switch.
+ (copy_options): Add an entry for --extract-symbol.
+ (copy_usage): Mention --extract-symbol.
+ (copy_object): Set the start address to zero for --extract-symbol.
+ Do not copy private BFD data in that case.
+ (setup_section): Set the size, LMA and VMA to zero for
+ --extract-symbol. Do not copy private BFD data in that case.
+ (copy_section): Do not copy section contents if --extract-symbol
+ is passed.
+ (copy_main): Set extract_symbol to TRUE if --extract-symbol
+ is passed.
+
+2007-03-01 Paul Brook <paul@codesourcery.com>
+
+ * MAINTAINERS: Update my entry.
+
+2007-03-01 Joseph Myers <joseph@codesourcery.com>
+
+ * version.c: Update copyright date.
+
+2007-03-01 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (install-exec-local): Depend on $(noinst_PROGRAMS).
+ Adjust $(EXEEXT) handling for $(RENAMED_PROGS).
+ * Makefile.in, doc/Makefile.in: Regenerate.
+
+2007-03-01 Alan Modra <amodra@bigpond.net.au>
+
+ * embedspu.sh: Set type and size of global program handle symbol.
+
+2007-02-28 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (PROGS): Delete.
+ (RENAMED_PROGS): Define. Extracted from..
+ (noinst_PROGRAMS): ..here. Add BUILD_MISC.
+ (install-exec-local): Adjust.
+ * Makefile.in: Regenerate.
+
+2007-02-28 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (PROGS): Add BUILD_INSTALL_MISC.
+ (bin_PROGRAMS): Replace BUILD_MISC with BUILD_INSTALL_MISC.
+ (EXTRA_PROGRAMS): Remove bin2c.
+ (bin2c$(EXEEXT_FOR_BUILD)): New rule.
+ (bin2c_SOURCES): Delete.
+ (DISTCLEANFILES): Remove sysinfo.
+ (MOSTLYCLEANFILES): Add sysinfo$(EXEEXT_FOR_BUILD) and
+ bin2c$(EXEEXT_FOR_BUILD).
+ * configure.in (BUILD_MISC): Add $(EXEEXT_FOR_BUILD) to bin2c.
+ Move embedspu to..
+ (BUILD_INSTALL_MISC): ..here.
+ * Makefile.in: Regenerate.
* configure: Regenerate.
-2006-01-18 Alexandre Oliva <aoliva@redhat.com>
+2007-02-27 Alan Modra <amodra@bigpond.net.au>
- Introduce TLS descriptors for i386 and x86_64.
- * readelf.c (get_dynamic_type): Handle DT_TLSDESC_GOT and
- DT_TLSDESC_PLT.
+ * bin2c.c: New file.
+ * Makefile.am (EXTRA_PROGRAMS): Add bin2c.
+ (CFILES): Add bin2c.c.
+ (bin2c_SOURCES): Define.
+ (bin2c.o): Dependencies from "make dep-am".
+ * configure.in (BUILD_MISC): Add bin2c.
+ * version.c: Update year.
+ * po/POTFILES.in: Regenerate.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
-2006-01-18 Nick Clifton <nickc@redhat.com>
+2007-02-17 Mark Mitchell <mark@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+ Vladimir Prus <vladimir@codesourcery.com
+ Joseph Myers <joseph@codesourcery.com>
- PR binutils/1391
- * objcopy.c (copy_object): For PE format targets set the VMA of a
- newly created gnu_debuglink section to a non-zero, aligned,
- contiguous value.
- * Makefile.am (objcopy.c): Add a dependency upon libbfd.h.
+ * configure.in (--with-bugurl): New option.
+ * configure: Regenerate.
+ * Makefile.am (REPORT_BUGS_TO): Define.
+ (INCLUDES): Define REPORT_BUGS_TO.
+ Regenerate dependencies.
* Makefile.in: Regenerate.
+ * doc/Makefile.in: Regenerate.
+ * bucomm.h: Remove include of bin-bugs.h.
+ * addr2line.c (usage): Don't print empty REPORT_BUGS_TO.
+ * ar.c (usage): Pass s to list_supported_targets. Don't print
+ empty REPORT_BUGS_TO.
+ * coffdump.c (show_usage): Don't print empty REPORT_BUGS_TO.
+ * cxxfilt.c (usage): Print bug url when giving help.
+ * dlltool.c (usage): Likewise.
+ * dllwrap.c (usage): Likewise.
+ * nlmconv.c (show_usage): Don't print empty REPORT_BUGS_TO.
+ * nm.c (usage): Likewise.
+ * objcopy.c (copy_usage, strip_usage): Likewise.
+ * objdump.c (usage): Likewise.
+ * readelf.c ((usage): Likewise. Add STREAM argument. Adjust
+ callers.
+ * size.c (usage): Don't print empty REPORT_BUGS_TO.
+ * srconv.c (show_usage): Likewise.
+ * strings.c (usage): Likewise.
+ * sysdymp.c (show_usage): Likewise.
+ * windres.c (usage): Likewise.
+
+2007-02-13 Alan Modra <amodra@bigpond.net.au>
+
+ * embedspu.sh: Add -W to readelf invocation.
+
+2007-02-06 Dave Brolley <brolley@redhat.com>
+
+ * MAINTAINERS: Add myself as the maintainer of the MeP port.
+
+2007-02-06 Nick Clifton <nickc@redhat.com>
-2006-01-17 Andreas Schwab <schwab@suse.de>
+ PR gas/3800
+ * readelf.c: Include elf/h8.h twice. The first time in order to
+ get the reloc numbers, the second time in order to get the reloc
+ decoder function.
+ (dump_section): Tell the user if the section being displayed has
+ unprocessed relocs associated with it.
+ (get_reloc_size): New function - returns the size of a reloc.
+ (debug_apply_rela_addends): Use get_reloc_size().
+ * dwarf.c (read_and_display_attr_value): Extend number of
+ languages known for the DW_AT_language attribute.
+ (process_debug_info): Display the attribute offset before decoding
+ the attribute, in case there are problems.
- PR binutils/1486
- * configure.in: Don't define DISASSEMBLER_NEEDS_RELOCS.
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * readelf.c (dump_relocations): Don't check for
+ (rtype == NULL && type == R_RELC).
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * Makefile.am (readelf.o): Depends on $(INCDIR)/elf/mep.h.
+ * Makefile.in: Regenerated.
+ * Contribute the following changes:
+ 2003-10-29 Dave Brolley <brolley@redhat.com>
+
+ * configure.in: Define SKIP_ZEROES and SKIP_ZEROES_AT_END for mep.
+ * configure: Regenerated.
+
+ 2001-04-03 Ben Elliston <bje@redhat.com>
+
+ * readelf.c: Include "elf/mep.h".
+ (guess_is_rela): Handle EM_CYGNUS_MEP.
+ (get_machine_name): Ditto.
+ (dump_relocations): Ditto.
+
+2007-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * MAINTAINERS: Add a space between H.J. and Lu.
+
+2007-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * doc/binutils.texi (objdump): Document the new addr64 option
+ for i386 disassembler.
+
+2007-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3945
+ * configure.in (DLLTOOL_DEFAULT): New. Defined for the first PE
+ target.
+ (DLLTOOL_DEFS): Add $DLLTOOL_DEFAULT.
+ * configure: Regenerated.
+
+ * dlltool.c (mname): Defined with DLLTOOL_DEFAULT_XXX.
+
+2007-02-02 Nick Clifton <nickc@redhat.com>
+
+ * doc/binutils.texi (objdump): Document support for disassembling
+ the 440 PowerPC architecture.
+
+2007-01-31 Nathan Sidwell <nathan@codesourcery.com>
+
+ * dwarf.c (process_debug_info): Protect against bogus length and
+ abbrev offsets.
+
+2007-01-25 Kazu Hirata <kazu@codesourcery.com>
+
+ * ar.c (print_contents, extract_file): Cast the return value
+ of fwrite to size_t.
+
+2007-01-12 Alan Modra <amodra@bigpond.net.au>
+
+ * ar.c (open_inarch): Check fwrite return. Use size_t.
+ (extract_file): Likewise. Remove test for "negative" file size.
+ * readelf.c (process_program_headers): Check fscanf return.
+
+2007-01-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ * bucomm.c (template_in_dir): Fix typo.
+
+2007-01-11 Alan Modra <amodra@bigpond.net.au>
+
+ * embedspu.sh: New file.
+ * Makefile.am (embedspu): Add rule.
+ * configure.in (BUILD_MISC): Add embedspu for powerpc-linux.
+ * Makefile.in: Regenerate.
* configure: Regenerate.
- * objdump.c (struct objdump_disasm_info): Don't check for
- DISASSEMBLER_NEEDS_RELOCS.
- (objdump_print_addr): Likewise.
- (disassemble_bytes): Check disassembler_needs_relocs from
- disassemble_info at run-time instead of DISASSEMBLER_NEEDS_RELOCS
- at compile-time.
- (disassemble_section): Likewise.
- (disassemble_data): Initialize it.
-2006-01-11 Alan Modra <amodra@bigpond.net.au>
+2007-01-11 Alan Modra <amodra@bigpond.net.au>
+
+ * bucomm.h (make_tempdir): Declare independently of HAVE_MKDTEMP.
+ * bucomm.c (template_in_dir): New function, split out from..
+ (make_tempname): ..here. Open the file with O_EXCL if !HAVE_MKSTEMP.
+ (make_tempdir): Use template_in_dir. Handle directory creation
+ when !HAVE_MKDTEMP.
+ * objcopy.c (MKDIR): Don't define.
+ (copy_archive): Use make_tempdir when !HAVE_MKDTEMP too. Fix
+ error message.
+
+2007-01-08 Kazu Hirata <kazu@codesourcery.com>
+
+ * readelf.c (get_machine_flags): Treat Fido as an architecture
+ by itself.
- * objcopy.c (copy_object): Fix thinko.
+2007-01-08 Kai Tietz <kai.tietz@onevision.com>
- * objcopy.c (copy_object): Set isympp and osympp to NULL after free.
+ * configure.in: Renamed target x86_64-*-mingw64 to
+ x86_64-*-mingw*.
+ * configure: Regenerated.
-2006-01-09 Mike Frysinger <vapier@gentoo.org>:
+2007-01-05 Alan Modra <amodra@bigpond.net.au>
- * readelf.c (guess_is_rela): Add case for Nios/Nios II.
- (get_machine_name): Likewise.
+ * readelf.c (dump_section): Don't print 32-bit values, which
+ were done incorrectly for little-endian. Instead print bytes.
-For older changes see ChangeLog-2005
+For older changes see ChangeLog-2006
Local Variables:
mode: change-log
diff --git a/binutils/ChangeLog-2006 b/binutils/ChangeLog-2006
new file mode 100644
index 000000000000..9961063afd29
--- /dev/null
+++ b/binutils/ChangeLog-2006
@@ -0,0 +1,599 @@
+2006-12-25 Kazu Hirata <kazu@codesourcery.com>
+
+ * readelf.c (get_machine_flags): Handle EF_M68K_CPU32_FIDO_A.
+
+2006-12-11 J"orn Rennecke <joern.rennecke@arc.com>
+
+ MAINTAINERS (SH): Remove my entry.
+
+2006-12-11 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.in: Define GENINSRC_NEVER.
+ * doc/Makefile.am (MAINTAINERCLEANFILES): Add info file.
+ (DISTCLEANFILES): Pretend to add info file.
+ * po/Make-in (.po.gmo): Put gmo files in objdir.
+ * configure, Makefile.in, doc/Makefile.in: Regenerated.
+
+2006-12-07 Kazu Hirata <kazu@codesourcery.com>
+
+ * readelf.c: Update uses of EF_M68K_*.
+
+2006-10-30 Paul Brook <paul@codesourcery.com>
+
+ * objdump.c (disassemble_section): Set info->symtab_pos.
+ (disassemble_data): Set info->symtab and info->symtab_size.
+
+2006-10-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3384
+ * configure.in (AC_CHECK_HEADERS): Add limits.h and sys/param.h.
+ * configure: Regenerated.
+ * config.in: Likewise.
+
+ * readelf.c: Include <limits.h> and <sys/param.h> for PATH_MAX.
+ (program_interpreter): Allocate PATH_MAX bytes instead of 64.
+ (process_program_headers): Don't assume that program interpreter
+ is shorter than 64 characters.
+
+2006-10-25 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
+ Yukishige Shibata <shibata@rd.scei.sony.co.jp>
+ Nobuhisa Fujinami <fnami@rd.scei.sony.co.jp>
+ Takeaki Fukuoka <fukuoka@rd.scei.sony.co.jp>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * readelf.c: Add SPU support.
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2006-10-13 Robert Connolly <robert@linuxfromscratch.org>
+
+ PR binutils/2876
+ * configure.in: Check for the mkstemp and mkdtemp functions.
+ * configure: Regenerate.
+ * config.in (HAVE_MKDTEMP): New potential define.
+ (MAKE_MKSTEMP): Likewise.
+ * bucomm.c (make_tempname): Use mkstemp if it is available.
+ (make_tempdir): New function: Create a temporary directory using
+ mkdtemp, if it is available.
+ * bucomm.h (make_tempdir): New prototype.
+ * objcopy.c (copy_archive): Use make_tempdir if it is available.
+ (strip_main): Produce an warning message if a temporary file could
+ not be created.
+ (copy_main): Likewise.
+ * ar.c (write_archive): Likewise.
+
+2006-10-10 Andreas Schwab <schwab@suse.de>
+
+ * dwarf.c (display_debug_loc): Don't dereference loc_offsets when
+ there are no location lists.
+ (display_debug_ranges): Similar for range_lists.
+
+2006-10-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ * readelf.c (debug_apply_rela_addends): Don't ignore relocation
+ against symbols without type.
+
+2006-09-25 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * nlmconv.c (main) : Use LITMEMCPY.
+ * prdbg.c (tg_class_static_member) : Use LITSTRCPY.
+
+2006-09-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3257
+ * strings.c (main): Handle "-T format".
+
+2006-09-26 Nick Clifton <nickc@redhat.com>
+
+ * MAINTAINERS: Add Mei Ligang as maintainer of the Score port.
+
+2006-09-26 Thiemo Seufer <ths@networkno.de>
+
+ * configure.in: Remove broken changequote lines.
+
+2006-09-20 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * configure.in: Add new target x86_64-pc-mingw64.
+ * configure: Regenerate.
+ * dlltool.c: Adjust include for this target.
+ (DLLTOOL_MX86_64): Added macro to handle target specific code.
+ (mname): Added default target static as "i386:x86-64".
+ (MX86): Added macro for target ident.
+ (mtable): Added target specific definitions.
+ (rvaafter): Add handling of MX86.
+ (rvabefore): Add handling of MX86.
+ (asmprefix): Add handling of MX86.
+
+2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * readelf.c: Add support for Score binaries.
+ * Makefile.am: Update readelf's dependencies.
+ * Makefile.in: Regenerate.
+
+2006-09-16 Nick Clifton <nickc@redhat.com>
+ Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * ar.c: Make use of new STRING_COMMA_LEN and CONST_STRNEQ
+ macros defined in bfd.h.
+ * dlltool.c: Likewise.
+ * emul_aix.c: Likewise.
+ * nlmconv.c: Likewise.
+ * objdump.c: Likewise.
+ * prdbg.c: Likewise.
+ * stabs.c: Likewise.
+ * readelf.c (const_strneq): New macro.
+ (process_section_headers, slurp_ia64_unwind_table,
+ slurp_hppa_unwind_table, display_debug_section, process_notes,
+ process_archive): Use the new macro.
+
+2006-09-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3181
+ * objcopy.c (group_signature): Return proper group signature.
+
+2006-09-14 Alan Modra <amodra@bigpond.net.au>
+
+ PR 3181
+ * objcopy.c (group_signature): New function, split out from..
+ (setup_section): ..here.
+ (is_strip_section): Return true for SHT_GROUP sections that are
+ going to lose their group signature symbol.
+
+2006-09-14 Alan Modra <amodra@bigpond.net.au>
+
+ PR 3181
+ * objcopy.c (copy_object): Load symbols earlier.
+ (setup_section): Mark group signature symbols with BSF_KEEP.
+
+2006-09-09 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/3110
+ * objcopy.c (copy_archive): Add new parameter:
+ force_output_target. If not true, then perserve the file formats
+ of each copied archive element, otherwise force them to be one
+ specific file format.
+ (copy_file): Compute force_output_target parameter to pass to
+ copy_archive.
+
+2006-09-05 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/3166
+ * objcopy.c (is_strip_section): Do not treat group sections as
+ debugging sections.
+ * doc/binutils.texi (--only-keep-debug): Document that this switch
+ is only intended for use on fully linked files.
+
+2006-09-01 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/3146
+ * readelf.c (dump_relocations): Check for a NULL value in rtype
+ before using it.
+
+2006-08-21 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * configure.in: Split arm-pe and arm-wince-pe. Build dlltool
+ with -DDLLTOOL_ARM_WINCE for Windows CE case.
+ * configure: Regenerate.
+ * dlltool.c: Add support for arm-wince.
+
+2006-08-15 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/3039
+ * wrstabs.c (stab_tag_type): Initialize 'size'.
+
+2006-08-10 J"orn Rennecke <joern.rennecke@st.com>
+
+ PR binutils/3017
+ * doc/Makefile.am: Use single quotes inside backquotes for
+ date command while generating config.texi.
+ * doc/Makefile.in: Regenerate.
+
+2006-08-08 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/2768
+ * dwarf.c (display_debug_aranges): When the address size is
+ greater than 4 display addresses and lengths as 16 hex digits,
+ otherwise use 8 hex digits.
+
+2006-08-06 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/3001
+ * addr2line.c (process_file): Change function from void to
+ returning an int. Return 0 upon success, 1 otherwise.
+ (main): Use return value from process_file as the exit value.
+ * ar.c (ranlib_only): Change function from void to returning an
+ int. Return 0 upon success, 1 otherwise.
+ (ranlib_touch): Likewise.
+ (main): Use return value from ranlib functions as exit value.
+ * objcopy.c (add_specific_symbol): Set status to 1 if get_file_size
+ fails.
+ (copy_file): Likewise.
+ (strip_main): Likewise.
+ (copy_main): Likewise.
+ * objdump.c (display_file): Set exit_status to 1 if get_file_size
+ fails.
+ * size.c (display_file): Set return_code to 1 if get_file_size
+ fails.
+
+2006-08-02 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * readelf.c (dump_relocations): Handle MIPS-specific
+ SHN_MIPS_SCOMMON and SHN_MIPS_SUNDEFINED.
+ (get_symbol_index_type): Similarly.
+
+2006-07-24 Ralk Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/binutils.texinfo: Fix spelling mistakes.
+
+2006-07-10 Jakub Jelinek <jakub@redhat.com>
+
+ * readelf.c (get_dynamic_type): Handle DT_GNU_HASH.
+ (get_section_type_name): Handle SHT_GNU_HASH.
+ (dynamic_info_DT_GNU_HASH): New variable.
+ (process_dynamic_section): Handle DT_GNU_HASH.
+ (process_symbol_table): Print also DT_GNU_HASH histogram.
+
+2006-07-06 Mohammed Adnène Trojette <adn@diwi.org>
+
+ PR binutils/2879
+ * doc/binutils.texi (Strings): Document -T shorthand for --target
+ switch.
+ * strings.c: Update comment to include -T option.
+
+ PR binutils/2875
+ * doc/binutils.texi (readelf): Fix spelling typo.
+
+2006-06-30 Nick Clifton <nickc@redhat.com>
+
+ * dwarf.c (display_debug_frames): Catch a corrupt length field
+ generating an end of block address that is beyond the end of the
+ section.
+ When encountering a corrupt CIE pointer do not reset the start
+ pointer as more data still has to be read.
+ Do not warn about user defined call frame instructions.
+
+2006-06-29 DJ Delorie <dj@redhat.com>
+
+ * readelf.c (process_section_headers): Add H8/300 support.
+
+2006-06-23 Richard Sandiford <richard@codesourcery.com>
+
+ * objcopy.c (localize_hidden): New variable.
+ (OPTION_LOCALIZE_HIDDEN): New command_line_switch value.
+ (copy_options): Add --localize-hidden.
+ (copy_usage): Mention --localize-hidden.
+ (is_hidden_symbol): New function.
+ (filter_symbols): Handle localize_hidden.
+ (copy_object): Call filter_symbols if localize_hidden.
+ (copy_main): Handle OPTION_LOCALIZE_HIDDEN.
+ * doc/binutils.texi (--localize-hidden): Document new option.
+
+2006-06-23 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (ar_DEPENDENCIES, ranlib_DEPENDENCIES)
+ (dlltool_DEPENDENCIES, windres_DEPENDENCIES): Remove @LEXLIB@.
+ * Makefile.in: Regenerate.
+
+2006-06-23 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (*_DEPENDENCIES): Add missing dependencies.
+ * Makefile.in: Regenerate.
+
+2006-06-07 Joseph S. Myers <joseph@codesourcery.com>
+
+ * po/Make-in (pdf, ps): New dummy targets.
+
+2006-06-05 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/Make-in (top_builddir): Define.
+
+2006-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * config.in: Regenerate.
+
+2006-06-02 Joseph S. Myers <joseph@codesourcery.com>
+
+ * doc/Makefile.am (TEXI2DVI): Define.
+ * doc/Makefile.in: Regenerate.
+
+2006-05-31 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am: Replace INTLLIBS with LIBINTL everywhere. Add
+ DEPENDENCIES variables for every program.
+ (INTLLIBS): Remove.
+ (INCLUDES): Use @INCINTL@.
+ * acinclude.m4: Include new gettext macros.
+ * configure.in: Use ZW_GNU_GETTEXT_SISTER_DIR and AM_PO_SUBDIRS.
+ Remove local code for po/Makefile.
+ * Makefile.in, configure, doc/Makefile.in: Regenerated.
+
+2006-05-30 Nick Clifton <nickc@redhat.com>
+
+ * po/es.po: Updated Spanish translation.
+
+2006-05-25 J"orn Rennecke <joern.rennecke@st.com>
+
+ * MAINTAINERS: Update my email address.
+
+2006-05-24 Nick Clifton <nickc@redhat.com>
+
+ * po/fr.po: Updated French translation.
+
+2006-05-23 Nick Clifton <nickc@redhat.com>
+
+ * po/vi.po: Updated Vietnamese translation.
+
+2006-05-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/ru.po: Updated translation.
+
+2006-05-19 Andreas Schwab <schwab@suse.de>
+
+ * doc/Makefile.am (addr2line.1): Depend on $(binutils_TEXINFOS).
+ (ar.1): Likewise.
+ (dlltool.1): Likewise.
+ (nlmconv.1): Likewise.
+ (nm.1): Likewise.
+ (objcopy.1): Likewise.
+ (objdump.1): Likewise.
+ (ranlib.1): Likewise.
+ (readelf.1): Likewise.
+ (size.1): Likewise.
+ (strings.1): Likewise.
+ (strip.1): Likewise.
+ (windres.1): Likewise.
+ (cxxfilt.man): Likewise.
+ * doc/Makefile.in: Regenerated.
+
+2006-05-17 Carlos O'Donell <carlos@codesourcery.com>
+
+ * doc/binutils.texi: Use "Binutils Index" for index name.
+
+2006-05-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * dwarf.c (display_debug_frames): Don't return on ZERO
+ terminator.
+
+2006-05-02 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * doc/Makefile.am (AM_MAKEINFOFLAGS): New.
+ (TEXI2POD): Use AM_MAKEINFOFLAGS.
+ (config.texi): Don't set top_srcdir.
+ * doc/binutils.texi: Don't use top_srcdir.
+ * aclocal.m4, Makefile.in, doc/Makefile.in: Regenerated.
+
+2006-04-26 Julian Brown <julian@codesourcery.com>
+
+ * readelf.c (arm_attr_tag_VFP_arch): Add VFPv3.
+
+2006-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2006-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * configure: Regenerate.
+
+2006-04-18 Nick Clifton <nickc@redhat.com>
+
+ PR 2257
+ * readelf.c (SECTION_NAME): Cope with a missing string table.
+ (process_file_header): Cope with a corrupt e_shstrndx field.
+ (process_section_headers): Correctly handle an e_shstrndx value of
+ SHF_UNDEF.
+
+2006-04-12 Nick Clifton <nickc@redhat.com>
+
+ * objdump.c (objdump_symbol_at_address): Fix typo in comment.
+
+2006-04-10 Ben Elliston <bje@gnu.org>
+
+ * MAINTAINERS (CGEN Maintainers): Remove myself.
+
+2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
+
+ * po/Make-in: Add install-html target.
+ * Makefile.am: Add install-html and install-html-recursive targets.
+ * Makefile.in: Regenerate.
+ * configure.in: AC_SUBST datarootdir, docdir and htmldir.
+ * configure: Regenerate.
+ * doc/Makefile.am: Add install-html and install-html-am targets.
+ * doc/Makefile.in: Regenerate.
+
+2006-04-05 Eric Botcazou <ebotcazou@adacore.com>
+
+ * addr2line.c (long_options): Add new option 'section'.
+ (usage): Document new -j/--section option.
+ (find_offset_in_section): New function.
+ (translate_addresses): Add 'section' parameter.
+ If it is non-null, call find_offset_in_section on it.
+ (process_file): Add 'section_name' parameter.
+ If it is non-null, look for the section in the BFD object.
+ Pass the section to translate_addresses.
+ (main): Handle new -j option.
+ Pass the section name to process_file.
+ * doc/binutils.texi (addr2line): Document new -j/--section option.
+
+2006-03-29 Ben Elliston <bje@au.ibm.com>
+
+ * resbin.c: Avoid duplicating constants in calls to reswr_alloc.
+
+2006-03-20 Nathan Sidwell <nathan@codesourcery.com>
+
+ * BRANCHES: Remove binutils-csl-arm-2006q1-branch. Document
+ binutils-csl-2_17-branch instead.
+
+2006-03-20 Paul Brook <paul@codesourcery.com>
+
+ * BRANCHES: Mention binutils-csl-arm-2006q1-branch.
+
+2006-03-16 Alan Modra <amodra@bigpond.net.au>
+
+ PR 2434
+ * ieee.c (write_ieee_debugging_info): Adjust bfd_hash_table_init calls.
+ * wrstabs.c (write_stabs_in_sections_debugging_info): Likewise.
+
+2006-03-13 Ben Elliston <bje@au.ibm.com>
+
+ * bucomm.c (display_target_list): Make local variable `a' to be of
+ type enum bfd_architecture. Thus no need to cast enums to int.
+ (display_info_table): Likewise.
+
+2006-03-10 Paul Brook <paul@codesourcery.com>
+
+ * readelf.c (decode_ARM_machine_flags): Handle EABIv5.
+
+2006-03-10 Alan Modra <amodra@bigpond.net.au>
+
+ * dwarf.c (process_extended_line_op): Remove pointer_size param.
+ Use length instead to determine address size.
+ (get_pointer_size_and_offset_of_comp_unit): Delete.
+ (display_debug_lines): Adjust for above.
+ (display_debug_aranges): Don't stop on finding two zeros.
+ (display_debug_frames): For warning, print offset not pointer.
+
+2006-03-09 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * dlltool.c: Update copyright year.
+ * doc/binutils.texi: Likewise.
+
+2006-03-09 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * dlltool.c (add_stdcall_underscore): New flag.
+ (xlate): Also add underscore to stdcall symbol if
+ add_stdcall_underscore set.
+ (usage): Document --add-stdcall-underscore option.
+ (OPTION_ADD_STDCALL_UNDERSCORE): New define.
+ (long_options): Use it for --add-stdcall-underscore option.
+ (main): Handle it.
+ * doc/binutils.texi: Document --add-stdcall-underscore option
+ and differentiate from --add-underscore.
+
+2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * readelf.c (get_machine_flags): Adjust.
+
+2006-03-03 Jakub Jelinek <jakub@redhat.com>
+
+ * dwarf.c (frame_display_row, display_debug_frames): Handle
+ DW_CFA_val_offset, DW_CFA_val_offset_sf and DW_CFA_val_expression.
+
+2006-02-28 Nick Clifton <nickc@redhat.com>
+
+ * objcopy.c (use_alt_mach_code): Change type to unsigned long.
+ (copy_object): If bfd_alt_mach_code fails emit a more helpful
+ message and if the target architecture is ELF use the alternative
+ as replacement value for the e_machine number.
+ (copy_main): Use strtoul to parse the number provided with the
+ --alt-mach-code switch.
+ * doc/binutils.texi (--alt-mach-code): Document that this switch
+ can now set the absolute e_machine value.
+
+2006-02-27 Carlos O'Donell <carlos@codesourcery.com>
+
+ * po/Make-in: Add html target.
+
+2006-02-17 Nick Hudson <nick.hudson@dsl.pipex.com>
+
+ * readelf.c (get_machine_flags): Add logic for missing EF_SH flags.
+
+2006-02-14 Jakub Jelinek <jakub@redhat.com>
+
+ * config.in: Rebuilt.
+
+2006-02-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/2258
+ * readelf.c (process_program_headers): Use
+ ELF_IS_SECTION_IN_SEGMENT_MEMORY.
+
+2006-02-09 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * configure.in (CHECK_DECLS): Add snprintf and vsnprintf.
+ * configure: Regenerate.
+ * objdump.c (fprintf): Remove declaration.
+ * bucomm.h (fprintf): Declare if not already declared.
+ (snprintf): Likewise.
+ (vsnprintf): Likewise.
+
+2006-02-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * readelf.c (process_program_headers): Match PT_TLS segment
+ only with SHT_TLS sections.
+
+2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
+
+ * readelf.c (get_machine_flags): Add logic for EF_M68K flags.
+
+2006-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * readelf.c (process_program_headers): Undo the last change.
+
+2006-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * readelf.c (process_program_headers): Undo the change made on
+ 2004-09-22. Match PT_DYNAMIC segment only with SHT_DYNAMIC
+ sections.
+
+2006-01-30 Nick Clifton <nickc@redhat.com>
+
+ * objcopy.c (copy_object): Catch the case where an attempt is made
+ to add a section that already exists and produce a more helpful
+ warning message.
+
+2006-01-26 Nick Clifton <nickc@redhat.com>
+
+ * po/vi.po: New Vietnamese translation.
+ * configure.in (ALL_LINGUAS): Add vi.
+ * configure: Regenerate.
+
+2006-01-18 Alexandre Oliva <aoliva@redhat.com>
+
+ Introduce TLS descriptors for i386 and x86_64.
+ * readelf.c (get_dynamic_type): Handle DT_TLSDESC_GOT and
+ DT_TLSDESC_PLT.
+
+2006-01-18 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/1391
+ * objcopy.c (copy_object): For PE format targets set the VMA of a
+ newly created gnu_debuglink section to a non-zero, aligned,
+ contiguous value.
+ * Makefile.am (objcopy.c): Add a dependency upon libbfd.h.
+ * Makefile.in: Regenerate.
+
+2006-01-17 Andreas Schwab <schwab@suse.de>
+
+ PR binutils/1486
+ * configure.in: Don't define DISASSEMBLER_NEEDS_RELOCS.
+ * configure: Regenerate.
+ * objdump.c (struct objdump_disasm_info): Don't check for
+ DISASSEMBLER_NEEDS_RELOCS.
+ (objdump_print_addr): Likewise.
+ (disassemble_bytes): Check disassembler_needs_relocs from
+ disassemble_info at run-time instead of DISASSEMBLER_NEEDS_RELOCS
+ at compile-time.
+ (disassemble_section): Likewise.
+ (disassemble_data): Initialize it.
+
+2006-01-11 Alan Modra <amodra@bigpond.net.au>
+
+ * objcopy.c (copy_object): Fix thinko.
+
+ * objcopy.c (copy_object): Set isympp and osympp to NULL after free.
+
+2006-01-09 Mike Frysinger <vapier@gentoo.org>:
+
+ * readelf.c (guess_is_rela): Add case for Nios/Nios II.
+ (get_machine_name): Likewise.
+
+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/MAINTAINERS b/binutils/MAINTAINERS
index f5beb0343b48..a3fdce306051 100644
--- a/binutils/MAINTAINERS
+++ b/binutils/MAINTAINERS
@@ -5,7 +5,7 @@ of the GNU Binary Utilities project. This includes the linker (ld),
the assembler (gas), the profiler (gprof), a whole suite of other
programs (binutils) and the libraries that they use (bfd and
opcodes). This project shares a common set of header files with the
-GCC and GDB projects (include), so maintainership of those files is
+GCC and GDB projects (include), so maintainership of those files is
shared amoungst the projects.
The home page for binutils is:
@@ -14,8 +14,8 @@ The home page for binutils is:
and patches should be sent to:
- bug-binutils@gnu.org or binutils@sources.redhat.com
-
+ binutils@sourceware.org
+
with "[Patch]" as part of the subject line. Note - patches to the
top level config.guess and config.sub scripts should be sent to:
@@ -25,13 +25,13 @@ and not to the binutils lists. Patches to the other top level
configure files (configure, configure.in, config-ml.in) should
be sent to the binutils lists, and copied to the gcc and gdb
lists as well (gcc-patches@gcc.gnu.org and
-gdb-patches@sources.redhat.com).
+gdb-patches@sourceware.org).
--------- Blanket Write Privs ---------
The following people have permission to check patches into the
repository without obtaining approval first:
-
+
Nick Clifton <nickc@redhat.com> (head maintainer)
Richard Henderson <rth@redhat.com>
Ian Lance Taylor <ian@airs.com>
@@ -58,7 +58,7 @@ responsibility among the other maintainers.
ALPHA Richard Henderson <rth@redhat.com>
ARM Nick Clifton <nickc@redhat.com>
ARM Richard Earnshaw <rearnsha@arm.com>
- ARM (Symbian) Paul Brook <paul@codesourcery.com>
+ ARM Paul Brook <paul@codesourcery.com>
ARM (Symbian) Mark Mitchell <mark@codesourcery.com>
AVR Denis Chertykov <denisc@overta.ru>
AVR Marek Michalkiewicz <marekm@amelek.gda.pl>
@@ -73,7 +73,7 @@ responsibility among the other maintainers.
FR30 Dave Brolley <brolley@redhat.com>
FRV Dave Brolley <brolley@redhat.com>
FRV Alexandre Oliva <aoliva@redhat.com>
- H8300 Anil Paranjpe <anilp1@kpitcummins.com>
+ H8300 Anil Paranjpe <anilp1@kpitcummins.com>
HPPA Dave Anglin <dave.anglin@nrc.ca>
HPPA elf32 Alan Modra <amodra@bigpond.net.au>
HPPA elf64 Jeff Law <law@redhat.com> [Basic maintainance only]
@@ -83,33 +83,36 @@ responsibility among the other maintainers.
ix86 Alan Modra <amodra@bigpond.net.au>
ix86 PE Christopher Faylor <cgf@redhat.com>
ix86 COFF DJ Delorie <dj@redhat.com>
- ix86 H.J.Lu <hjl@gnu.org>
+ ix86 H.J. Lu <hjl@gnu.org>
ix86 INTEL MODE Jan Beulich <jbeulich@novell.com>
M68HC11 M68HC12 Stephane Carrez <stcarrez@nerim.fr>
M68k Ben Elliston <bje@gnu.org>
M88k Mark Kettenis <kettenis@gnu.org>
MAXQ Inderpreet Singh <inderpreetb@noida.hcltech.com>
+ MEP Dave Brolley <brolley@redhat.com>
MIPS Eric Christopher <echristo@apple.com>
MIPS Thiemo Seufer <ths@networkno.de>
MMIX Hans-Peter Nilsson <hp@bitrange.com>
MN10300 Eric Christopher <echristo@apple.com>
MN10300 Alexandre Oliva <aoliva@redhat.com>
MSP430 Dmitry Diky <diwil@spec.ru>
+ NetBSD support Matt Thomas <matt@netbsd.org>
PPC Geoff Keating <geoffk@geoffk.org>
+ PPC Alan Modra <amodra@bigpond.net.au>
PPC vector ext Aldy Hernandez <aldyh@redhat.com>
s390, s390x Martin Schwidefsky <schwidefsky@de.ibm.com>
- SH Jörn Rennecke <joern.rennecke@superh.com>
+ SCORE Mei Ligang <ligang@sunnorth.com.cn>
SH Alexandre Oliva <aoliva@redhat.com>
SH Kaz Kojima <kkojima@rr.iij4u.or.jp>
SPARC Jakub Jelinek <jakub@redhat.com>
TESTSUITES Ben Elliston <bje@gnu.org>
TIC4X Svein Seldal <svein@dev.seldal.com>
TIC54X Timothy Wall <twall@alum.mit.edu>
- VAX Jason R Thorpe <thorpej@netbsd.org>
+ VAX Matt Thomas <matt@netbsd.org>
VAX Jan-Benedict Glaw <jbglaw@lug-owl.de>
x86_64 Jan Hubicka <jh@suse.cz>
x86_64 Andreas Jaeger <aj@suse.de>
- x86_64 H.J.Lu <hjl@gnu.org>
+ x86_64 H.J. Lu <hjl@gnu.org>
Xtensa Bob Wilson <bob.wilson@acm.org>
z80 Arnold Metselaar <arnold.metselaar@planet.nl>
z8k Christian Groessler <chris@groessler.org>
@@ -121,11 +124,11 @@ CGEN is a tool for building, amongst other things, assemblers,
disassemblers and simulators from a single description of a CPU.
It creates files in several of the binutils directories, but it
is mentioned here since there is a single group that maintains
-CGEN and the files that it creates.
+CGEN and the files that it creates.
If you have CGEN related problems you can send email to;
- cgen@sources.redhat.com
+ cgen@sourceware.org
The current CGEN maintainers are:
@@ -158,7 +161,7 @@ If a patch is approved for check in to the mainline sources, it can
also be checked into the current release branch. Normally however
only bug fixes should be applied to the branch. New features, new
ports, etc, should be restricted to the mainline. (Otherwise the
-burden of maintaining the branch in sync with the mainline becomes too
+burden of maintaining the branch in sync with the mainline becomes too
great). If you are uncertain as to whether a patch is appropriate for
the branch, ask the branch maintainer. This is:
@@ -194,7 +197,7 @@ to contributions on a branch.
Before creating the branch, you should select a name for the branch of
the form:
- binutils-<org>-<name>
+ binutils-<org>-<name>
where "org" is the initials of your organization, or your own initials
if you are acting as an individual. For example, for a branch created
@@ -238,7 +241,7 @@ Having selected the branch name, create the branch as follows:
3. Create the branch:
cvs rtag -b -r binutils-<org>-<name>-branchpoint \
- binutils-<org>-<name>-branch
+ binutils-<org>-<name>-branch
4. Document the branch:
diff --git a/binutils/Makefile.am b/binutils/Makefile.am
index 1b4e85adb8a7..34c03ce6831e 100644
--- a/binutils/Makefile.am
+++ b/binutils/Makefile.am
@@ -1,9 +1,7 @@
## Process this file with automake to generate Makefile.in
-## FIXME: Work around apparent bug in automake.
-INTLLIBS = @INTLLIBS@
-
AUTOMAKE_OPTIONS = cygnus dejagnu
+ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd
SUBDIRS = doc po
@@ -22,6 +20,7 @@ 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)
+LIBICONV = @LIBICONV@
# these two are almost the same program
AR_PROG=ar
@@ -49,22 +48,22 @@ ADDR2LINE_PROG=addr2line
NLMCONV_PROG=nlmconv
DLLTOOL_PROG=dlltool
WINDRES_PROG=windres
+WINDMC_PROG=windmc
DLLWRAP_PROG=dllwrap
-SRCONV_PROG=srconv$(EXEEXT) sysdump$(EXEEXT) coffdump$(EXEEXT)
-
-PROGS = $(SIZE_PROG) $(OBJDUMP_PROG) $(NM_PROG) $(AR_PROG) $(STRINGS_PROG) $(STRIP_PROG) $(RANLIB_PROG) $(DEMANGLER_PROG) $(OBJCOPY_PROG) @BUILD_NLMCONV@ @BUILD_SRCONV@ @BUILD_DLLTOOL@ @BUILD_WINDRES@ $(ADDR2LINE_PROG) $(READELF_PROG) @BUILD_DLLWRAP@ @BUILD_MISC@
+SRCONV_PROG=srconv$(EXEEXT) sysdump$(EXEEXT) coffdump$(EXEEXT)
-bin_PROGRAMS = $(SIZE_PROG) $(OBJDUMP_PROG) $(AR_PROG) $(STRINGS_PROG) $(RANLIB_PROG) $(OBJCOPY_PROG) @BUILD_NLMCONV@ @BUILD_SRCONV@ @BUILD_DLLTOOL@ @BUILD_WINDRES@ $(ADDR2LINE_PROG) $(READELF_PROG) @BUILD_DLLWRAP@ @BUILD_MISC@
+bin_PROGRAMS = $(SIZE_PROG) $(OBJDUMP_PROG) $(AR_PROG) $(STRINGS_PROG) $(RANLIB_PROG) $(OBJCOPY_PROG) @BUILD_NLMCONV@ @BUILD_SRCONV@ @BUILD_DLLTOOL@ @BUILD_WINDRES@ @BUILD_WINDMC@ $(ADDR2LINE_PROG) $(READELF_PROG) @BUILD_DLLWRAP@ @BUILD_INSTALL_MISC@
## We need a special rule to install the programs which are built with
## -new, and to rename cxxfilt to c++filt.
-noinst_PROGRAMS = $(NM_PROG) $(STRIP_PROG) $(DEMANGLER_PROG)
+RENAMED_PROGS = $(NM_PROG) $(STRIP_PROG) $(DEMANGLER_PROG)
+noinst_PROGRAMS = $(RENAMED_PROGS) @BUILD_MISC@
-EXTRA_PROGRAMS = $(NLMCONV_PROG) srconv sysdump coffdump $(DLLTOOL_PROG) $(WINDRES_PROG) $(DLLWRAP_PROG)
+EXTRA_PROGRAMS = $(NLMCONV_PROG) srconv sysdump coffdump $(DLLTOOL_PROG) $(WINDRES_PROG) $(WINDMC_PROG) $(DLLWRAP_PROG)
# Stuff that goes in tooldir/ if appropriate.
-TOOL_PROGS = nm-new strip-new ar ranlib dlltool objdump
+TOOL_PROGS = nm-new strip-new ar ranlib dlltool objdump objcopy
BASEDIR = $(srcdir)/..
BFDDIR = $(BASEDIR)/bfd
@@ -75,33 +74,35 @@ MKDEP = gcc -MM
INCLUDES = -D_GNU_SOURCE \
-I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \
@HDEFINES@ \
- -I$(srcdir)/../intl -I../intl \
+ @INCINTL@ \
-DLOCALEDIR="\"$(datadir)/locale\"" \
-Dbin_dummy_emulation=$(EMULATION_VECTOR)
HFILES = \
- arsup.h binemul.h bucomm.h budbg.h budemang.h \
+ arsup.h binemul.h bucomm.h budbg.h \
coffgrok.h debug.h dlltool.h nlmconv.h \
- windres.h winduni.h
+ windres.h winduni.h windint.h \
+ windmc.h
-GENERATED_HFILES = arparse.h sysroff.h sysinfo.h defparse.h rcparse.h
+GENERATED_HFILES = arparse.h sysroff.h sysinfo.h defparse.h rcparse.h mcparse.h
CFILES = \
- addr2line.c ar.c arsup.c binemul.c bucomm.c budemang.c \
+ addr2line.c ar.c arsup.c bin2c.c binemul.c bucomm.c \
coffdump.c coffgrok.c cxxfilt.c \
dwarf.c debug.c dlltool.c dllwrap.c \
emul_aix.c emul_vanilla.c filemode.c \
ieee.c is-ranlib.c is-strip.c maybe-ranlib.c maybe-strip.c \
nlmconv.c nm.c not-ranlib.c not-strip.c \
objcopy.c objdump.c prdbg.c \
- rdcoff.c rddbg.c readelf.c rename.c \
+ rclex.c rdcoff.c rddbg.c readelf.c rename.c \
resbin.c rescoff.c resrc.c resres.c \
size.c srconv.c stabs.c strings.c sysdump.c version.c \
- windres.c winduni.c wrstabs.c
+ windres.c winduni.c wrstabs.c \
+ windmc.c mclex.c
GENERATED_CFILES = \
arparse.c arlex.c sysroff.c sysinfo.c syslex.c \
- defparse.c deflex.c nlmheader.c rcparse.c rclex.c
+ defparse.c deflex.c nlmheader.c rcparse.c mcparse.c
DEBUG_SRCS = rddbg.c debug.c stabs.c ieee.c rdcoff.c
WRITE_DEBUG_SRCS = $(DEBUG_SRCS) wrstabs.c
@@ -117,8 +118,8 @@ LIBIBERTY = ../libiberty/libiberty.a
.PHONY: install-html install-html-am install-html-recursive
-install-html: install-html-recursive
-
+install-html: install-html-recursive
+
install-html-recursive:
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
@@ -182,7 +183,30 @@ check-DEJAGNU: site.exp
installcheck:
/bin/sh $(srcdir)/sanity.sh $(bindir)
-LDADD = $(BFDLIB) $(LIBIBERTY) $(INTLLIBS)
+# There's no global DEPENDENCIES. So, we must explicitly list everything
+# which depends on libintl, since we don't know whether LIBINTL_DEP will be
+# non-empty until configure time. Ugh!
+size_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+objdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB) $(OPCODES)
+nm_new_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+ar_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+strings_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+strip_new_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+ranlib_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+cxxfilt_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+objcopy_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+nlmconv_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+srconv_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+sysdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+coffdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+dlltool_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+windres_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+windmc_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+addr2line_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+readelf_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY)
+dllwrap_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY)
+
+LDADD = $(BFDLIB) $(LIBIBERTY) $(LIBINTL)
size_SOURCES = size.c $(BULIBS)
@@ -191,14 +215,14 @@ objcopy_SOURCES = objcopy.c not-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS)
strings_SOURCES = strings.c $(BULIBS)
readelf_SOURCES = readelf.c version.c unwind-ia64.c dwarf.c
-readelf_LDADD = $(INTLLIBS) $(LIBIBERTY)
+readelf_LDADD = $(LIBINTL) $(LIBIBERTY)
strip_new_SOURCES = objcopy.c is-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS)
-nm_new_SOURCES = nm.c budemang.c $(BULIBS)
+nm_new_SOURCES = nm.c $(BULIBS)
-objdump_SOURCES = objdump.c dwarf.c budemang.c prdbg.c $(DEBUG_SRCS) $(BULIBS)
-objdump_LDADD = $(OPCODES) $(BFDLIB) $(LIBIBERTY) $(INTLLIBS)
+objdump_SOURCES = objdump.c dwarf.c prdbg.c $(DEBUG_SRCS) $(BULIBS)
+objdump_LDADD = $(OPCODES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL)
objdump.o:objdump.c
$(COMPILE) -c $(OBJDUMP_DEFS) $(srcdir)/objdump.c
@@ -207,13 +231,13 @@ cxxfilt_SOURCES = cxxfilt.c $(BULIBS)
ar_SOURCES = arparse.y arlex.l ar.c not-ranlib.c arsup.c rename.c binemul.c \
emul_$(EMULATION).c $(BULIBS)
-ar_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
+ar_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(LIBINTL)
ranlib_SOURCES = ar.c is-ranlib.c arparse.y arlex.l arsup.c rename.c \
binemul.c emul_$(EMULATION).c $(BULIBS)
-ranlib_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
+ranlib_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(LIBINTL)
-addr2line_SOURCES = addr2line.c budemang.c $(BULIBS)
+addr2line_SOURCES = addr2line.c $(BULIBS)
# The following is commented out for the conversion to automake.
# This rule creates a single binary that switches between ar and ranlib
@@ -233,7 +257,7 @@ addr2line_SOURCES = addr2line.c budemang.c $(BULIBS)
# -rm -f $(STRIP_PROG)
# -ln $(OBJCOPY_PROG) $(STRIP_PROG)
-sysroff.c: sysinfo$(EXEEXT_FOR_BUILD) sysroff.info
+sysroff.c: sysinfo$(EXEEXT_FOR_BUILD) sysroff.info
./sysinfo$(EXEEXT_FOR_BUILD) -c <$(srcdir)/sysroff.info >sysroff.c
./sysinfo$(EXEEXT_FOR_BUILD) -i <$(srcdir)/sysroff.info >>sysroff.c
./sysinfo$(EXEEXT_FOR_BUILD) -g <$(srcdir)/sysroff.info >>sysroff.c
@@ -258,15 +282,23 @@ sysinfo.o:
$(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS) $(srcdir)/sysinfo.c -Wno-error ; \
fi
+bin2c$(EXEEXT_FOR_BUILD):
+ $(CC_FOR_BUILD) -o $@ $(INCLUDES) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) $(srcdir)/bin2c.c $(srcdir)/version.c
+
+embedspu: embedspu.sh
+ sed "s@^program_transform_name=@program_transform_name=$(program_transform_name)@" < $< > $@
+ chmod a+x $@
+
# We need these for parallel make.
arparse.h: arparse.c
defparse.h: defparse.c
nlmheader.h: nlmheader.c
rcparse.h: rcparse.c
+mcparse.h: mcparse.c
sysinfo.h: sysinfo.c
# Disable -Werror, if it has been enabled, since old versions of bison/
-# yacc will produce working code which contain compile time warnings.
+# yacc will produce working code which contain compile time warnings.
arparse.o:
$(COMPILE) -c $< $(NO_WERROR)
arlex.o:
@@ -281,13 +313,17 @@ nlmheader.o:
$(COMPILE) -c $< $(NO_WERROR)
rcparse.o:
$(COMPILE) -c $< $(NO_WERROR)
+mcparse.o:
+ $(COMPILE) -c $< $(NO_WERROR)
rclex.o:
$(COMPILE) -c $< $(NO_WERROR)
+mclex.o:
+ $(COMPILE) -c $< $(NO_WERROR)
srconv_SOURCES = srconv.c coffgrok.c $(BULIBS)
dlltool_SOURCES = dlltool.c defparse.y deflex.l $(BULIBS)
-dlltool_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
+dlltool_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(LIBINTL)
dlltool.o:
$(COMPILE) -c $(DLLTOOL_DEFS) $(srcdir)/dlltool.c
@@ -307,22 +343,26 @@ nlmconv.o: nlmconv.c $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h
nlmconv_SOURCES = nlmconv.c nlmheader.y $(BULIBS)
-windres_SOURCES = windres.c resrc.c rescoff.c resbin.c rcparse.y rclex.l \
+windres_SOURCES = windres.c resrc.c rescoff.c resbin.c rcparse.y rclex.c \
winduni.c resres.c $(BULIBS)
-windres_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
+windres_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(LIBINTL) $(LIBICONV)
+
+windmc_SOURCES = windmc.c mcparse.y mclex.c \
+ winduni.c $(BULIBS)
+windmc_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(LIBINTL) $(LIBICONV)
dllwrap_SOURCES = dllwrap.c version.c
-dllwrap_LDADD = $(LIBIBERTY) $(INTLLIBS)
+dllwrap_LDADD = $(LIBIBERTY) $(LIBINTL)
EXTRA_DIST = arparse.c arparse.h arlex.c nlmheader.c sysinfo.c sysinfo.h \
- syslex.c deflex.c defparse.h defparse.c rclex.c rcparse.h rcparse.c
+ syslex.c deflex.c defparse.h defparse.c rcparse.h rcparse.c \
+ mcparse.h mcparse.c
diststuff: $(EXTRA_DIST) info
all: info
-DISTCLEANFILES = sysinfo sysroff.c sysroff.h \
- site.exp site.bak
+DISTCLEANFILES = sysroff.c sysroff.h site.exp site.bak
# Targets to rebuild dependencies in this Makefile.
# Have to get rid of DEP1 here so that "$?" later includes all of $(CFILES).
@@ -371,7 +411,8 @@ dep-am: DEP
###
-MOSTLYCLEANFILES = sysinfo binutils.log binutils.sum abcdefgh*
+MOSTLYCLEANFILES = sysinfo$(EXEEXT_FOR_BUILD) bin2c$(EXEEXT_FOR_BUILD) \
+ binutils.log binutils.sum abcdefgh*
mostlyclean-local:
-rm -rf tmpdir
@@ -380,10 +421,10 @@ CLEANFILES = dep.sed DEP DEPA DEP1 DEP2
.PHONY: install-exec-local
install-exec-local: install-binPROGRAMS $(bin_PROGRAMS) $(noinst_PROGRAMS)
- @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//' -e 's/cxxfilt/$(DEMANGLER_NAME)/'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
- $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed -e 's/$(EXEEXT)$$//' -e 's/-new//' -e 's/cxxfilt/$(DEMANGLER_NAME)/'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ @list='$(RENAMED_PROGS)'; for p in $$list; do \
+ if test -f $$p$(EXEEXT); then \
+ echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p$(EXEEXT) $(bindir)/`echo $$p|sed -e 's/-new//' -e 's/cxxfilt/$(DEMANGLER_NAME)/'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p$(EXEEXT) $(DESTDIR)$(bindir)/`echo $$p|sed -e 's/-new//' -e 's/cxxfilt/$(DEMANGLER_NAME)/'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
else :; fi; \
done
$(mkinstalldirs) $(DESTDIR)$(tooldir)/bin
@@ -404,208 +445,250 @@ install-exec-local: install-binPROGRAMS $(bin_PROGRAMS) $(noinst_PROGRAMS)
# DO NOT DELETE THIS LINE -- mkdep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
-addr2line.o: addr2line.c config.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h \
- $(INCDIR)/demangle.h bucomm.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h budemang.h
-ar.o: ar.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
- $(INCDIR)/libiberty.h $(INCDIR)/progress.h bucomm.h \
- config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/aout/ar.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h \
- arsup.h $(INCDIR)/filenames.h binemul.h
-arsup.o: arsup.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h arsup.h $(INCDIR)/libiberty.h bucomm.h \
- config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h
-binemul.o: binemul.c binemul.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h
-bucomm.o: bucomm.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h ../bfd/bfdver.h $(INCDIR)/libiberty.h \
- bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h
-budemang.o: budemang.c config.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/demangle.h \
- budemang.h
-coffdump.o: coffdump.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h coffgrok.h \
- bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h
-coffgrok.o: coffgrok.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h coffgrok.h
-cxxfilt.o: cxxfilt.c config.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h $(INCDIR)/demangle.h $(INCDIR)/safe-ctype.h
-dwarf.o: dwarf.c dwarf.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/elf/dwarf2.h bucomm.h \
- config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h
-debug.o: debug.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h debug.h
-dlltool.o: dlltool.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/demangle.h \
- $(INCDIR)/dyn-string.h dlltool.h $(INCDIR)/safe-ctype.h
-dllwrap.o: dllwrap.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/dyn-string.h
-emul_aix.o: emul_aix.c binemul.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/xcoff.h $(BFDDIR)/libcoff.h $(BFDDIR)/libxcoff.h
-emul_vanilla.o: emul_vanilla.c binemul.h ../bfd/bfd.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h
-filemode.o: filemode.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h
-ieee.o: ieee.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
- $(INCDIR)/ieee.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h debug.h \
- budbg.h $(INCDIR)/filenames.h
+addr2line.o: addr2line.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
+ bucomm.h
+ar.o: ar.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/progress.h $(INCDIR)/aout/ar.h $(BFDDIR)/libbfd.h \
+ $(INCDIR)/hashtab.h bucomm.h arsup.h $(INCDIR)/filenames.h \
+ binemul.h
+arsup.o: arsup.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/filenames.h bucomm.h arsup.h
+bin2c.o: bin2c.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h
+binemul.o: binemul.c binemul.h sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h
+bucomm.o: bucomm.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/filenames.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h \
+ bucomm.h
+coffdump.o: coffdump.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h bucomm.h coffgrok.h
+coffgrok.o: coffgrok.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h bucomm.h coffgrok.h
+cxxfilt.o: cxxfilt.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/safe-ctype.h bucomm.h
+dwarf.o: dwarf.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/elf/dwarf2.h \
+ dwarf.h
+debug.o: debug.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ debug.h
+dlltool.o: dlltool.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dyn-string.h bucomm.h dlltool.h $(INCDIR)/safe-ctype.h
+dllwrap.o: dllwrap.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/dyn-string.h bucomm.h
+emul_aix.o: emul_aix.c binemul.h sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/xcoff.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(BFDDIR)/libxcoff.h
+emul_vanilla.o: emul_vanilla.c binemul.h sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h
+filemode.o: filemode.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h
+ieee.o: ieee.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/ieee.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h debug.h budbg.h $(INCDIR)/filenames.h
is-ranlib.o: is-ranlib.c
is-strip.o: is-strip.c
maybe-ranlib.o: maybe-ranlib.c
maybe-strip.o: maybe-strip.c
-nlmconv.o: nlmconv.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/safe-ctype.h \
- $(BFDDIR)/libnlm.h $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h \
- $(INCDIR)/nlm/external.h nlmconv.h
-nm.o: nm.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
- $(INCDIR)/progress.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h budemang.h $(INCDIR)/aout/stab_gnu.h \
+nlmconv.o: nlmconv.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h $(BFDDIR)/libnlm.h \
+ $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h \
+ nlmconv.h bucomm.h
+nm.o: nm.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/progress.h $(INCDIR)/aout/stab_gnu.h \
$(INCDIR)/aout/stab.def $(INCDIR)/aout/ranlib.h $(INCDIR)/demangle.h \
- $(INCDIR)/libiberty.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/common.h \
+ bucomm.h
not-ranlib.o: not-ranlib.c
not-strip.o: not-strip.c
-objcopy.o: objcopy.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/progress.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
+objcopy.o: objcopy.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/progress.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h bucomm.h \
budbg.h $(INCDIR)/filenames.h $(INCDIR)/fnmatch.h $(BFDDIR)/elf-bfd.h \
$(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
- $(INCDIR)/bfdlink.h $(BFDDIR)/libbfd.h
-objdump.o: objdump.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h ../bfd/bfdver.h $(INCDIR)/progress.h \
- bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- dwarf.h $(INCDIR)/elf/dwarf2.h budemang.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/dis-asm.h $(INCDIR)/libiberty.h $(INCDIR)/demangle.h \
- debug.h budbg.h $(INCDIR)/aout/aout64.h
-prdbg.o: prdbg.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h debug.h \
+ $(INCDIR)/bfdlink.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h
+objdump.o: objdump.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/progress.h \
+ bucomm.h dwarf.h $(INCDIR)/safe-ctype.h $(INCDIR)/dis-asm.h \
+ ../bfd/bfd.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/demangle.h $(INCDIR)/libiberty.h debug.h \
+ budbg.h $(INCDIR)/aout/aout64.h
+prdbg.o: prdbg.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/demangle.h $(INCDIR)/libiberty.h debug.h \
budbg.h
-rdcoff.o: rdcoff.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h bucomm.h \
- config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h debug.h budbg.h $(BFDDIR)/libcoff.h \
+rclex.o: rclex.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h windres.h $(INCDIR)/ansidecl.h \
+ winduni.h windint.h rcparse.h
+rdcoff.o: rdcoff.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h bucomm.h debug.h budbg.h $(BFDDIR)/libcoff.h \
$(INCDIR)/bfdlink.h
-rddbg.o: rddbg.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h debug.h \
- budbg.h
-readelf.o: readelf.c dwarf.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/alpha.h \
- $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h \
- $(INCDIR)/elf/avr.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \
+rddbg.o: rddbg.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ bucomm.h debug.h budbg.h
+readelf.o: readelf.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h dwarf.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/h8.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/alpha.h \
+ $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/avr.h \
+ $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h $(INCDIR)/elf/crx.h \
$(INCDIR)/elf/d10v.h $(INCDIR)/elf/d30v.h $(INCDIR)/elf/dlx.h \
- $(INCDIR)/elf/fr30.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/h8.h \
- $(INCDIR)/elf/hppa.h $(INCDIR)/elf/i386.h $(INCDIR)/elf/i370.h \
- $(INCDIR)/elf/i860.h $(INCDIR)/elf/i960.h $(INCDIR)/elf/ia64.h \
- $(INCDIR)/elf/ip2k.h $(INCDIR)/elf/m32c.h $(INCDIR)/elf/m32r.h \
+ $(INCDIR)/elf/fr30.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/hppa.h \
+ $(INCDIR)/elf/i386.h $(INCDIR)/elf/i370.h $(INCDIR)/elf/i860.h \
+ $(INCDIR)/elf/i960.h $(INCDIR)/elf/ia64.h $(INCDIR)/elf/ip2k.h \
+ $(INCDIR)/elf/iq2000.h $(INCDIR)/elf/m32c.h $(INCDIR)/elf/m32r.h \
$(INCDIR)/elf/m68k.h $(INCDIR)/elf/m68hc11.h $(INCDIR)/elf/mcore.h \
- $(INCDIR)/elf/mips.h $(INCDIR)/elf/mmix.h $(INCDIR)/elf/mn10200.h \
- $(INCDIR)/elf/mn10300.h $(INCDIR)/elf/mt.h $(INCDIR)/elf/msp430.h \
- $(INCDIR)/elf/or32.h $(INCDIR)/elf/pj.h $(INCDIR)/elf/ppc.h \
- $(INCDIR)/elf/ppc64.h $(INCDIR)/elf/s390.h $(INCDIR)/elf/sh.h \
- $(INCDIR)/elf/sparc.h $(INCDIR)/elf/v850.h $(INCDIR)/elf/vax.h \
- $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/xstormy16.h $(INCDIR)/elf/crx.h \
- $(INCDIR)/elf/iq2000.h $(INCDIR)/elf/xtensa.h $(INCDIR)/aout/ar.h \
- bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h unwind-ia64.h
-rename.o: rename.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h
-resbin.o: resbin.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h windres.h \
- winduni.h
-rescoff.o: rescoff.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h windres.h \
- winduni.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-resrc.o: resrc.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
- windres.h winduni.h
-resres.o: resres.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h windres.h \
- winduni.h
-size.o: size.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
- bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h
-srconv.o: srconv.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h sysroff.h coffgrok.h $(INCDIR)/libiberty.h \
- $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- sysroff.c
-stabs.o: stabs.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/demangle.h debug.h budbg.h $(INCDIR)/filenames.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
-strings.o: strings.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/getopt.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h
-sysdump.o: sysdump.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/safe-ctype.h $(INCDIR)/libiberty.h \
- sysroff.h sysroff.c
-version.o: version.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h ../bfd/bfdver.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h
-windres.o: windres.c config.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
- windres.h winduni.h
-winduni.o: winduni.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h winduni.h $(INCDIR)/safe-ctype.h
-wrstabs.o: wrstabs.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/elf/mep.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/mmix.h \
+ $(INCDIR)/elf/mn10200.h $(INCDIR)/elf/mn10300.h $(INCDIR)/elf/mt.h \
+ $(INCDIR)/elf/msp430.h $(INCDIR)/elf/or32.h $(INCDIR)/elf/pj.h \
+ $(INCDIR)/elf/ppc.h $(INCDIR)/elf/ppc64.h $(INCDIR)/elf/s390.h \
+ $(INCDIR)/elf/score.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/sparc.h \
+ $(INCDIR)/elf/spu.h $(INCDIR)/elf/v850.h $(INCDIR)/elf/vax.h \
+ $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/xstormy16.h $(INCDIR)/elf/xtensa.h \
+ $(INCDIR)/aout/ar.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ unwind-ia64.h
+rename.o: rename.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h
+resbin.o: resbin.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ windres.h winduni.h windint.h
+rescoff.o: rescoff.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h windres.h winduni.h windint.h \
+ $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+resrc.o: resrc.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h windres.h winduni.h windint.h
+resres.o: resres.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ windres.h winduni.h windint.h
+size.o: size.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ bucomm.h
+srconv.o: srconv.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h sysroff.h coffgrok.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h sysroff.c
+stabs.o: stabs.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
+ debug.h budbg.h $(INCDIR)/filenames.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
+strings.o: strings.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h bucomm.h
+sysdump.o: sysdump.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h bucomm.h \
+ sysroff.h sysroff.c $(INCDIR)/ansidecl.h
+version.o: version.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h
+windres.o: windres.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
+ windres.h winduni.h windint.h
+winduni.o: winduni.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h bucomm.h winduni.h $(INCDIR)/safe-ctype.h
+wrstabs.o: wrstabs.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h bucomm.h \
debug.h budbg.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \
$(INCDIR)/aout/stab.def
-arparse.o: arparse.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h arsup.h
+windmc.o: windmc.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h windmc.h \
+ winduni.h windint.h
+mclex.o: mclex.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h windmc.h winduni.h mcparse.h
+arparse.o: arparse.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h arsup.h
arlex.o: arlex.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- arparse.h
+ $(INCDIR)/ansidecl.h arparse.h
sysroff.o: sysroff.c
sysinfo.o: sysinfo.c
syslex.o: syslex.c config.h sysinfo.h
-defparse.o: defparse.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h dlltool.h
+defparse.o: defparse.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h dlltool.h
deflex.o: deflex.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- defparse.h dlltool.h
-nlmheader.o: nlmheader.c $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h \
+ defparse.h dlltool.h $(INCDIR)/ansidecl.h
+nlmheader.o: nlmheader.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/safe-ctype.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h bucomm.h \
nlmconv.h
-rcparse.o: rcparse.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h windres.h \
- winduni.h $(INCDIR)/safe-ctype.h
-rclex.o: rclex.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
- windres.h winduni.h rcparse.h
+rcparse.o: rcparse.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h windres.h winduni.h windint.h \
+ $(INCDIR)/safe-ctype.h
+mcparse.o: mcparse.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h windmc.h winduni.h $(INCDIR)/safe-ctype.h
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/binutils/Makefile.in b/binutils/Makefile.in
index 8b5ab820548f..9cf28fdc7796 100644
--- a/binutils/Makefile.in
+++ b/binutils/Makefile.in
@@ -37,30 +37,40 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-bin_PROGRAMS = $(am__EXEEXT_5) $(am__EXEEXT_6) $(am__EXEEXT_7) \
- $(am__EXEEXT_8) $(am__EXEEXT_9) $(am__EXEEXT_10) \
+bin_PROGRAMS = $(am__EXEEXT_6) $(am__EXEEXT_7) $(am__EXEEXT_8) \
+ $(am__EXEEXT_9) $(am__EXEEXT_10) $(am__EXEEXT_11) \
@BUILD_NLMCONV@ @BUILD_SRCONV@ @BUILD_DLLTOOL@ @BUILD_WINDRES@ \
- $(am__EXEEXT_11) $(am__EXEEXT_12) @BUILD_DLLWRAP@ @BUILD_MISC@
-noinst_PROGRAMS = $(am__EXEEXT_13) $(am__EXEEXT_14) $(am__EXEEXT_15)
+ @BUILD_WINDMC@ $(am__EXEEXT_12) $(am__EXEEXT_13) \
+ @BUILD_DLLWRAP@ @BUILD_INSTALL_MISC@ $(am__empty)
+noinst_PROGRAMS = $(am__EXEEXT_17) @BUILD_MISC@
EXTRA_PROGRAMS = $(am__EXEEXT_1) srconv$(EXEEXT) sysdump$(EXEEXT) \
coffdump$(EXEEXT) $(am__EXEEXT_2) $(am__EXEEXT_3) \
- $(am__EXEEXT_4)
+ $(am__EXEEXT_4) $(am__EXEEXT_5)
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 arparse.h arparse.c arlex.c \
defparse.h defparse.c deflex.c nlmheader.h nlmheader.c \
- arparse.h arparse.c arlex.c rcparse.h rcparse.c rclex.c \
- $(srcdir)/../ylwrap $(srcdir)/../ltmain.sh \
+ arparse.h arparse.c arlex.c mcparse.h mcparse.c rcparse.h \
+ rcparse.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__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \
+ $(top_srcdir)/../bfd/warning.m4 \
+ $(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/gettext-sister.m4 \
+ $(top_srcdir)/../config/iconv.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/lib-ld.m4 \
+ $(top_srcdir)/../config/lib-link.m4 \
+ $(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/nls.m4 $(top_srcdir)/../config/po.m4 \
+ $(top_srcdir)/../config/progtest.m4 \
+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
+ $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -71,67 +81,53 @@ CONFIG_CLEAN_FILES = po/Makefile.in
am__EXEEXT_1 = nlmconv$(EXEEXT)
am__EXEEXT_2 = dlltool$(EXEEXT)
am__EXEEXT_3 = windres$(EXEEXT)
-am__EXEEXT_4 = dllwrap$(EXEEXT)
-am__EXEEXT_5 = size$(EXEEXT)
-am__EXEEXT_6 = objdump$(EXEEXT)
-am__EXEEXT_7 = ar$(EXEEXT)
-am__EXEEXT_8 = strings$(EXEEXT)
-am__EXEEXT_9 = ranlib$(EXEEXT)
-am__EXEEXT_10 = objcopy$(EXEEXT)
-am__EXEEXT_11 = addr2line$(EXEEXT)
-am__EXEEXT_12 = readelf$(EXEEXT)
+am__EXEEXT_4 = windmc$(EXEEXT)
+am__EXEEXT_5 = dllwrap$(EXEEXT)
+am__EXEEXT_6 = size$(EXEEXT)
+am__EXEEXT_7 = objdump$(EXEEXT)
+am__EXEEXT_8 = ar$(EXEEXT)
+am__EXEEXT_9 = strings$(EXEEXT)
+am__EXEEXT_10 = ranlib$(EXEEXT)
+am__EXEEXT_11 = objcopy$(EXEEXT)
+am__EXEEXT_12 = addr2line$(EXEEXT)
+am__EXEEXT_13 = readelf$(EXEEXT)
am__installdirs = "$(DESTDIR)$(bindir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-am__EXEEXT_13 = nm-new$(EXEEXT)
-am__EXEEXT_14 = strip-new$(EXEEXT)
-am__EXEEXT_15 = cxxfilt$(EXEEXT)
+am__EXEEXT_14 = nm-new$(EXEEXT)
+am__EXEEXT_15 = strip-new$(EXEEXT)
+am__EXEEXT_16 = cxxfilt$(EXEEXT)
+am__EXEEXT_17 = $(am__EXEEXT_14) $(am__EXEEXT_15) $(am__EXEEXT_16)
PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
am__objects_1 = bucomm.$(OBJEXT) version.$(OBJEXT) filemode.$(OBJEXT)
-am_addr2line_OBJECTS = addr2line.$(OBJEXT) budemang.$(OBJEXT) \
- $(am__objects_1)
+am_addr2line_OBJECTS = addr2line.$(OBJEXT) $(am__objects_1)
addr2line_OBJECTS = $(am_addr2line_OBJECTS)
addr2line_LDADD = $(LDADD)
am__DEPENDENCIES_1 = ../bfd/libbfd.la
am__DEPENDENCIES_2 = ../libiberty/libiberty.a
am__DEPENDENCIES_3 =
-addr2line_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
am_ar_OBJECTS = arparse.$(OBJEXT) arlex.$(OBJEXT) ar.$(OBJEXT) \
not-ranlib.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) \
binemul.$(OBJEXT) emul_$(EMULATION).$(OBJEXT) $(am__objects_1)
ar_OBJECTS = $(am_ar_OBJECTS)
-ar_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
am_coffdump_OBJECTS = coffdump.$(OBJEXT) coffgrok.$(OBJEXT) \
$(am__objects_1)
coffdump_OBJECTS = $(am_coffdump_OBJECTS)
coffdump_LDADD = $(LDADD)
-coffdump_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
am_cxxfilt_OBJECTS = cxxfilt.$(OBJEXT) $(am__objects_1)
cxxfilt_OBJECTS = $(am_cxxfilt_OBJECTS)
cxxfilt_LDADD = $(LDADD)
-cxxfilt_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
am_dlltool_OBJECTS = dlltool.$(OBJEXT) defparse.$(OBJEXT) \
deflex.$(OBJEXT) $(am__objects_1)
dlltool_OBJECTS = $(am_dlltool_OBJECTS)
-dlltool_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
am_dllwrap_OBJECTS = dllwrap.$(OBJEXT) version.$(OBJEXT)
dllwrap_OBJECTS = $(am_dllwrap_OBJECTS)
-dllwrap_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3)
am_nlmconv_OBJECTS = nlmconv.$(OBJEXT) nlmheader.$(OBJEXT) \
$(am__objects_1)
nlmconv_OBJECTS = $(am_nlmconv_OBJECTS)
nlmconv_LDADD = $(LDADD)
-nlmconv_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
-am_nm_new_OBJECTS = nm.$(OBJEXT) budemang.$(OBJEXT) $(am__objects_1)
+am_nm_new_OBJECTS = nm.$(OBJEXT) $(am__objects_1)
nm_new_OBJECTS = $(am_nm_new_OBJECTS)
nm_new_LDADD = $(LDADD)
-nm_new_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
am__objects_2 = rddbg.$(OBJEXT) debug.$(OBJEXT) stabs.$(OBJEXT) \
ieee.$(OBJEXT) rdcoff.$(OBJEXT)
am__objects_3 = $(am__objects_2) wrstabs.$(OBJEXT)
@@ -139,69 +135,52 @@ am_objcopy_OBJECTS = objcopy.$(OBJEXT) not-strip.$(OBJEXT) \
rename.$(OBJEXT) $(am__objects_3) $(am__objects_1)
objcopy_OBJECTS = $(am_objcopy_OBJECTS)
objcopy_LDADD = $(LDADD)
-objcopy_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
-am_objdump_OBJECTS = objdump.$(OBJEXT) dwarf.$(OBJEXT) \
- budemang.$(OBJEXT) prdbg.$(OBJEXT) $(am__objects_2) \
- $(am__objects_1)
+am_objdump_OBJECTS = objdump.$(OBJEXT) dwarf.$(OBJEXT) prdbg.$(OBJEXT) \
+ $(am__objects_2) $(am__objects_1)
objdump_OBJECTS = $(am_objdump_OBJECTS)
am__DEPENDENCIES_4 = ../opcodes/libopcodes.la
-objdump_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3)
am_ranlib_OBJECTS = ar.$(OBJEXT) is-ranlib.$(OBJEXT) arparse.$(OBJEXT) \
arlex.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) \
binemul.$(OBJEXT) emul_$(EMULATION).$(OBJEXT) $(am__objects_1)
ranlib_OBJECTS = $(am_ranlib_OBJECTS)
-ranlib_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
am_readelf_OBJECTS = readelf.$(OBJEXT) version.$(OBJEXT) \
unwind-ia64.$(OBJEXT) dwarf.$(OBJEXT)
readelf_OBJECTS = $(am_readelf_OBJECTS)
-readelf_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2)
am_size_OBJECTS = size.$(OBJEXT) $(am__objects_1)
size_OBJECTS = $(am_size_OBJECTS)
size_LDADD = $(LDADD)
-size_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
am_srconv_OBJECTS = srconv.$(OBJEXT) coffgrok.$(OBJEXT) \
$(am__objects_1)
srconv_OBJECTS = $(am_srconv_OBJECTS)
srconv_LDADD = $(LDADD)
-srconv_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
am_strings_OBJECTS = strings.$(OBJEXT) $(am__objects_1)
strings_OBJECTS = $(am_strings_OBJECTS)
strings_LDADD = $(LDADD)
-strings_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
am_strip_new_OBJECTS = objcopy.$(OBJEXT) is-strip.$(OBJEXT) \
rename.$(OBJEXT) $(am__objects_3) $(am__objects_1)
strip_new_OBJECTS = $(am_strip_new_OBJECTS)
strip_new_LDADD = $(LDADD)
-strip_new_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
am_sysdump_OBJECTS = sysdump.$(OBJEXT) $(am__objects_1)
sysdump_OBJECTS = $(am_sysdump_OBJECTS)
sysdump_LDADD = $(LDADD)
-sysdump_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
+am_windmc_OBJECTS = windmc.$(OBJEXT) mcparse.$(OBJEXT) mclex.$(OBJEXT) \
+ winduni.$(OBJEXT) $(am__objects_1)
+windmc_OBJECTS = $(am_windmc_OBJECTS)
am_windres_OBJECTS = windres.$(OBJEXT) resrc.$(OBJEXT) \
rescoff.$(OBJEXT) resbin.$(OBJEXT) rcparse.$(OBJEXT) \
rclex.$(OBJEXT) winduni.$(OBJEXT) resres.$(OBJEXT) \
$(am__objects_1)
windres_OBJECTS = $(am_windres_OBJECTS)
-windres_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
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) \
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
LTLEXCOMPILE = $(LIBTOOL) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
@@ -214,7 +193,8 @@ SOURCES = $(addr2line_SOURCES) $(ar_SOURCES) $(coffdump_SOURCES) \
$(nlmconv_SOURCES) $(nm_new_SOURCES) $(objcopy_SOURCES) \
$(objdump_SOURCES) $(ranlib_SOURCES) $(readelf_SOURCES) \
$(size_SOURCES) $(srconv_SOURCES) $(strings_SOURCES) \
- $(strip_new_SOURCES) $(sysdump_SOURCES) $(windres_SOURCES)
+ $(strip_new_SOURCES) $(sysdump_SOURCES) $(windmc_SOURCES) \
+ $(windres_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
@@ -238,9 +218,11 @@ AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_DLLTOOL = @BUILD_DLLTOOL@
BUILD_DLLWRAP = @BUILD_DLLWRAP@
+BUILD_INSTALL_MISC = @BUILD_INSTALL_MISC@
BUILD_MISC = @BUILD_MISC@
BUILD_NLMCONV = @BUILD_NLMCONV@
BUILD_SRCONV = @BUILD_SRCONV@
+BUILD_WINDMC = @BUILD_WINDMC@
BUILD_WINDRES = @BUILD_WINDRES@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
@@ -256,6 +238,7 @@ DEFS = @DEFS@
DEMANGLER_NAME = @DEMANGLER_NAME@
DEPDIR = @DEPDIR@
DLLTOOL_DEFS = @DLLTOOL_DEFS@
+DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
@@ -264,28 +247,32 @@ EMULATION = @EMULATION@
EMULATION_VECTOR = @EMULATION_VECTOR@
EXEEXT = @EXEEXT@
EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
-GMOFILES = @GMOFILES@
+FGREP = @FGREP@
+GENCAT = @GENCAT@
+GENINSRC_NEVER_FALSE = @GENINSRC_NEVER_FALSE@
+GENINSRC_NEVER_TRUE = @GENINSRC_NEVER_TRUE@
GMSGFMT = @GMSGFMT@
-GT_NO = @GT_NO@
-GT_YES = @GT_YES@
+GREP = @GREP@
HDEFINES = @HDEFINES@
-INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
+INCINTL = @INCINTL@
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@
+LD = @LD@
LDFLAGS = @LDFLAGS@
LEX = `if [ -f ../flex/flex ]; then echo ../flex/flex; else echo @LEX@; fi`
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBINTL_DEP = @LIBINTL_DEP@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
@@ -293,7 +280,9 @@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
NLMCONV_DEFS = @NLMCONV_DEFS@
+NM = @NM@
NO_WERROR = @NO_WERROR@
OBJDUMP_DEFS = @OBJDUMP_DEFS@
OBJEXT = @OBJEXT@
@@ -304,19 +293,20 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-POFILES = @POFILES@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
-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_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
@@ -345,10 +335,10 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-l = @l@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -363,6 +353,7 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
AUTOMAKE_OPTIONS = cygnus dejagnu
+ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd
SUBDIRS = doc po
tooldir = $(exec_prefix)/$(target_alias)
YFLAGS = -d
@@ -390,12 +381,13 @@ ADDR2LINE_PROG = addr2line
NLMCONV_PROG = nlmconv
DLLTOOL_PROG = dlltool
WINDRES_PROG = windres
+WINDMC_PROG = windmc
DLLWRAP_PROG = dllwrap
-SRCONV_PROG = srconv$(EXEEXT) sysdump$(EXEEXT) coffdump$(EXEEXT)
-PROGS = $(SIZE_PROG) $(OBJDUMP_PROG) $(NM_PROG) $(AR_PROG) $(STRINGS_PROG) $(STRIP_PROG) $(RANLIB_PROG) $(DEMANGLER_PROG) $(OBJCOPY_PROG) @BUILD_NLMCONV@ @BUILD_SRCONV@ @BUILD_DLLTOOL@ @BUILD_WINDRES@ $(ADDR2LINE_PROG) $(READELF_PROG) @BUILD_DLLWRAP@ @BUILD_MISC@
+SRCONV_PROG = srconv$(EXEEXT) sysdump$(EXEEXT) coffdump$(EXEEXT)
+RENAMED_PROGS = $(NM_PROG) $(STRIP_PROG) $(DEMANGLER_PROG)
# Stuff that goes in tooldir/ if appropriate.
-TOOL_PROGS = nm-new strip-new ar ranlib dlltool objdump
+TOOL_PROGS = nm-new strip-new ar ranlib dlltool objdump objcopy
BASEDIR = $(srcdir)/..
BFDDIR = $(BASEDIR)/bfd
INCDIR = $(BASEDIR)/include
@@ -403,32 +395,34 @@ MKDEP = gcc -MM
INCLUDES = -D_GNU_SOURCE \
-I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \
@HDEFINES@ \
- -I$(srcdir)/../intl -I../intl \
+ @INCINTL@ \
-DLOCALEDIR="\"$(datadir)/locale\"" \
-Dbin_dummy_emulation=$(EMULATION_VECTOR)
HFILES = \
- arsup.h binemul.h bucomm.h budbg.h budemang.h \
+ arsup.h binemul.h bucomm.h budbg.h \
coffgrok.h debug.h dlltool.h nlmconv.h \
- windres.h winduni.h
+ windres.h winduni.h windint.h \
+ windmc.h
-GENERATED_HFILES = arparse.h sysroff.h sysinfo.h defparse.h rcparse.h
+GENERATED_HFILES = arparse.h sysroff.h sysinfo.h defparse.h rcparse.h mcparse.h
CFILES = \
- addr2line.c ar.c arsup.c binemul.c bucomm.c budemang.c \
+ addr2line.c ar.c arsup.c bin2c.c binemul.c bucomm.c \
coffdump.c coffgrok.c cxxfilt.c \
dwarf.c debug.c dlltool.c dllwrap.c \
emul_aix.c emul_vanilla.c filemode.c \
ieee.c is-ranlib.c is-strip.c maybe-ranlib.c maybe-strip.c \
nlmconv.c nm.c not-ranlib.c not-strip.c \
objcopy.c objdump.c prdbg.c \
- rdcoff.c rddbg.c readelf.c rename.c \
+ rclex.c rdcoff.c rddbg.c readelf.c rename.c \
resbin.c rescoff.c resrc.c resres.c \
size.c srconv.c stabs.c strings.c sysdump.c version.c \
- windres.c winduni.c wrstabs.c
+ windres.c winduni.c wrstabs.c \
+ windmc.c mclex.c
GENERATED_CFILES = \
arparse.c arlex.c sysroff.c sysinfo.c syslex.c \
- defparse.c deflex.c nlmheader.c rcparse.c rclex.c
+ defparse.c deflex.c nlmheader.c rcparse.c mcparse.c
DEBUG_SRCS = rddbg.c debug.c stabs.c ieee.c rdcoff.c
WRITE_DEBUG_SRCS = $(DEBUG_SRCS) wrstabs.c
@@ -456,47 +450,75 @@ CC_FOR_TARGET = ` \
fi; \
fi`
-LDADD = $(BFDLIB) $(LIBIBERTY) $(INTLLIBS)
+
+# There's no global DEPENDENCIES. So, we must explicitly list everything
+# which depends on libintl, since we don't know whether LIBINTL_DEP will be
+# non-empty until configure time. Ugh!
+size_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+objdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB) $(OPCODES)
+nm_new_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+ar_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+strings_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+strip_new_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+ranlib_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+cxxfilt_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+objcopy_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+nlmconv_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+srconv_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+sysdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+coffdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+dlltool_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+windres_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+windmc_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+addr2line_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+readelf_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY)
+dllwrap_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY)
+LDADD = $(BFDLIB) $(LIBIBERTY) $(LIBINTL)
size_SOURCES = size.c $(BULIBS)
objcopy_SOURCES = objcopy.c not-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS)
strings_SOURCES = strings.c $(BULIBS)
readelf_SOURCES = readelf.c version.c unwind-ia64.c dwarf.c
-readelf_LDADD = $(INTLLIBS) $(LIBIBERTY)
+readelf_LDADD = $(LIBINTL) $(LIBIBERTY)
strip_new_SOURCES = objcopy.c is-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS)
-nm_new_SOURCES = nm.c budemang.c $(BULIBS)
-objdump_SOURCES = objdump.c dwarf.c budemang.c prdbg.c $(DEBUG_SRCS) $(BULIBS)
-objdump_LDADD = $(OPCODES) $(BFDLIB) $(LIBIBERTY) $(INTLLIBS)
+nm_new_SOURCES = nm.c $(BULIBS)
+objdump_SOURCES = objdump.c dwarf.c prdbg.c $(DEBUG_SRCS) $(BULIBS)
+objdump_LDADD = $(OPCODES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL)
cxxfilt_SOURCES = cxxfilt.c $(BULIBS)
ar_SOURCES = arparse.y arlex.l ar.c not-ranlib.c arsup.c rename.c binemul.c \
emul_$(EMULATION).c $(BULIBS)
-ar_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
+ar_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(LIBINTL)
ranlib_SOURCES = ar.c is-ranlib.c arparse.y arlex.l arsup.c rename.c \
binemul.c emul_$(EMULATION).c $(BULIBS)
-ranlib_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
-addr2line_SOURCES = addr2line.c budemang.c $(BULIBS)
+ranlib_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(LIBINTL)
+addr2line_SOURCES = addr2line.c $(BULIBS)
srconv_SOURCES = srconv.c coffgrok.c $(BULIBS)
dlltool_SOURCES = dlltool.c defparse.y deflex.l $(BULIBS)
-dlltool_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
+dlltool_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(LIBINTL)
coffdump_SOURCES = coffdump.c coffgrok.c $(BULIBS)
sysdump_SOURCES = sysdump.c $(BULIBS)
nlmconv_SOURCES = nlmconv.c nlmheader.y $(BULIBS)
-windres_SOURCES = windres.c resrc.c rescoff.c resbin.c rcparse.y rclex.l \
+windres_SOURCES = windres.c resrc.c rescoff.c resbin.c rcparse.y rclex.c \
winduni.c resres.c $(BULIBS)
-windres_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
+windres_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(LIBINTL) $(LIBICONV)
+windmc_SOURCES = windmc.c mcparse.y mclex.c \
+ winduni.c $(BULIBS)
+
+windmc_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(LIBINTL) $(LIBICONV)
dllwrap_SOURCES = dllwrap.c version.c
-dllwrap_LDADD = $(LIBIBERTY) $(INTLLIBS)
+dllwrap_LDADD = $(LIBIBERTY) $(LIBINTL)
EXTRA_DIST = arparse.c arparse.h arlex.c nlmheader.c sysinfo.c sysinfo.h \
- syslex.c deflex.c defparse.h defparse.c rclex.c rcparse.h rcparse.c
-
-DISTCLEANFILES = sysinfo sysroff.c sysroff.h \
- site.exp site.bak
+ syslex.c deflex.c defparse.h defparse.c rcparse.h rcparse.c \
+ mcparse.h mcparse.c
+DISTCLEANFILES = sysroff.c sysroff.h site.exp site.bak
###
-MOSTLYCLEANFILES = sysinfo binutils.log binutils.sum abcdefgh*
+MOSTLYCLEANFILES = sysinfo$(EXEEXT_FOR_BUILD) bin2c$(EXEEXT_FOR_BUILD) \
+ binutils.log binutils.sum abcdefgh*
+
CLEANFILES = dep.sed DEP DEPA DEP1 DEP2
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
@@ -509,15 +531,15 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
- echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
- cd $(srcdir) && $(AUTOMAKE) --foreign \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --cygnus '; \
+ cd $(srcdir) && $(AUTOMAKE) --cygnus \
&& exit 0; \
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign Makefile
+ $(AUTOMAKE) --cygnus Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -641,6 +663,9 @@ strip-new$(EXEEXT): $(strip_new_OBJECTS) $(strip_new_DEPENDENCIES)
sysdump$(EXEEXT): $(sysdump_OBJECTS) $(sysdump_DEPENDENCIES)
@rm -f sysdump$(EXEEXT)
$(LINK) $(sysdump_LDFLAGS) $(sysdump_OBJECTS) $(sysdump_LDADD) $(LIBS)
+windmc$(EXEEXT): $(windmc_OBJECTS) $(windmc_DEPENDENCIES)
+ @rm -f windmc$(EXEEXT)
+ $(LINK) $(windmc_LDFLAGS) $(windmc_OBJECTS) $(windmc_LDADD) $(LIBS)
windres$(EXEEXT): $(windres_OBJECTS) $(windres_DEPENDENCIES)
@rm -f windres$(EXEEXT)
$(LINK) $(windres_LDFLAGS) $(windres_OBJECTS) $(windres_LDADD) $(LIBS)
@@ -872,9 +897,10 @@ maintainer-clean-generic:
-rm -f deflex.c
-rm -f defparse.c
-rm -f defparse.h
+ -rm -f mcparse.c
+ -rm -f mcparse.h
-rm -f nlmheader.c
-rm -f nlmheader.h
- -rm -f rclex.c
-rm -f rcparse.c
-rm -f rcparse.h
clean: clean-recursive
@@ -951,7 +977,7 @@ uninstall-info: uninstall-info-recursive
.PHONY: install-html install-html-am install-html-recursive
-install-html: install-html-recursive
+install-html: install-html-recursive
install-html-recursive:
@failcom='exit 1'; \
@@ -1017,7 +1043,7 @@ objdump.o:objdump.c
# -rm -f $(STRIP_PROG)
# -ln $(OBJCOPY_PROG) $(STRIP_PROG)
-sysroff.c: sysinfo$(EXEEXT_FOR_BUILD) sysroff.info
+sysroff.c: sysinfo$(EXEEXT_FOR_BUILD) sysroff.info
./sysinfo$(EXEEXT_FOR_BUILD) -c <$(srcdir)/sysroff.info >sysroff.c
./sysinfo$(EXEEXT_FOR_BUILD) -i <$(srcdir)/sysroff.info >>sysroff.c
./sysinfo$(EXEEXT_FOR_BUILD) -g <$(srcdir)/sysroff.info >>sysroff.c
@@ -1042,15 +1068,23 @@ sysinfo.o:
$(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS) $(srcdir)/sysinfo.c -Wno-error ; \
fi
+bin2c$(EXEEXT_FOR_BUILD):
+ $(CC_FOR_BUILD) -o $@ $(INCLUDES) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) $(srcdir)/bin2c.c $(srcdir)/version.c
+
+embedspu: embedspu.sh
+ sed "s@^program_transform_name=@program_transform_name=$(program_transform_name)@" < $< > $@
+ chmod a+x $@
+
# We need these for parallel make.
arparse.h: arparse.c
defparse.h: defparse.c
nlmheader.h: nlmheader.c
rcparse.h: rcparse.c
+mcparse.h: mcparse.c
sysinfo.h: sysinfo.c
# Disable -Werror, if it has been enabled, since old versions of bison/
-# yacc will produce working code which contain compile time warnings.
+# yacc will produce working code which contain compile time warnings.
arparse.o:
$(COMPILE) -c $< $(NO_WERROR)
arlex.o:
@@ -1065,8 +1099,12 @@ nlmheader.o:
$(COMPILE) -c $< $(NO_WERROR)
rcparse.o:
$(COMPILE) -c $< $(NO_WERROR)
+mcparse.o:
+ $(COMPILE) -c $< $(NO_WERROR)
rclex.o:
$(COMPILE) -c $< $(NO_WERROR)
+mclex.o:
+ $(COMPILE) -c $< $(NO_WERROR)
dlltool.o:
$(COMPILE) -c $(DLLTOOL_DEFS) $(srcdir)/dlltool.c
@@ -1133,10 +1171,10 @@ mostlyclean-local:
.PHONY: install-exec-local
install-exec-local: install-binPROGRAMS $(bin_PROGRAMS) $(noinst_PROGRAMS)
- @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//' -e 's/cxxfilt/$(DEMANGLER_NAME)/'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
- $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed -e 's/$(EXEEXT)$$//' -e 's/-new//' -e 's/cxxfilt/$(DEMANGLER_NAME)/'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ @list='$(RENAMED_PROGS)'; for p in $$list; do \
+ if test -f $$p$(EXEEXT); then \
+ echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p$(EXEEXT) $(bindir)/`echo $$p|sed -e 's/-new//' -e 's/cxxfilt/$(DEMANGLER_NAME)/'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p$(EXEEXT) $(DESTDIR)$(bindir)/`echo $$p|sed -e 's/-new//' -e 's/cxxfilt/$(DEMANGLER_NAME)/'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
else :; fi; \
done
$(mkinstalldirs) $(DESTDIR)$(tooldir)/bin
@@ -1157,210 +1195,252 @@ install-exec-local: install-binPROGRAMS $(bin_PROGRAMS) $(noinst_PROGRAMS)
# DO NOT DELETE THIS LINE -- mkdep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
-addr2line.o: addr2line.c config.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h \
- $(INCDIR)/demangle.h bucomm.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h budemang.h
-ar.o: ar.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
- $(INCDIR)/libiberty.h $(INCDIR)/progress.h bucomm.h \
- config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/aout/ar.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h \
- arsup.h $(INCDIR)/filenames.h binemul.h
-arsup.o: arsup.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h arsup.h $(INCDIR)/libiberty.h bucomm.h \
- config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h
-binemul.o: binemul.c binemul.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h
-bucomm.o: bucomm.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h ../bfd/bfdver.h $(INCDIR)/libiberty.h \
- bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h
-budemang.o: budemang.c config.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/demangle.h \
- budemang.h
-coffdump.o: coffdump.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h coffgrok.h \
- bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h
-coffgrok.o: coffgrok.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h coffgrok.h
-cxxfilt.o: cxxfilt.c config.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h $(INCDIR)/demangle.h $(INCDIR)/safe-ctype.h
-dwarf.o: dwarf.c dwarf.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/elf/dwarf2.h bucomm.h \
- config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h
-debug.o: debug.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h debug.h
-dlltool.o: dlltool.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/demangle.h \
- $(INCDIR)/dyn-string.h dlltool.h $(INCDIR)/safe-ctype.h
-dllwrap.o: dllwrap.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/dyn-string.h
-emul_aix.o: emul_aix.c binemul.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/bfdlink.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/xcoff.h $(BFDDIR)/libcoff.h $(BFDDIR)/libxcoff.h
-emul_vanilla.o: emul_vanilla.c binemul.h ../bfd/bfd.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h
-filemode.o: filemode.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h
-ieee.o: ieee.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
- $(INCDIR)/ieee.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h debug.h \
- budbg.h $(INCDIR)/filenames.h
+addr2line.o: addr2line.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
+ bucomm.h
+ar.o: ar.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/progress.h $(INCDIR)/aout/ar.h $(BFDDIR)/libbfd.h \
+ $(INCDIR)/hashtab.h bucomm.h arsup.h $(INCDIR)/filenames.h \
+ binemul.h
+arsup.o: arsup.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/filenames.h bucomm.h arsup.h
+bin2c.o: bin2c.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h
+binemul.o: binemul.c binemul.h sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h
+bucomm.o: bucomm.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/filenames.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h \
+ bucomm.h
+coffdump.o: coffdump.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h bucomm.h coffgrok.h
+coffgrok.o: coffgrok.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h bucomm.h coffgrok.h
+cxxfilt.o: cxxfilt.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/safe-ctype.h bucomm.h
+dwarf.o: dwarf.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/elf/dwarf2.h \
+ dwarf.h
+debug.o: debug.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ debug.h
+dlltool.o: dlltool.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dyn-string.h bucomm.h dlltool.h $(INCDIR)/safe-ctype.h
+dllwrap.o: dllwrap.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/dyn-string.h bucomm.h
+emul_aix.o: emul_aix.c binemul.h sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/xcoff.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(BFDDIR)/libxcoff.h
+emul_vanilla.o: emul_vanilla.c binemul.h sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h
+filemode.o: filemode.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h
+ieee.o: ieee.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/ieee.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h debug.h budbg.h $(INCDIR)/filenames.h
is-ranlib.o: is-ranlib.c
is-strip.o: is-strip.c
maybe-ranlib.o: maybe-ranlib.c
maybe-strip.o: maybe-strip.c
-nlmconv.o: nlmconv.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/safe-ctype.h \
- $(BFDDIR)/libnlm.h $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h \
- $(INCDIR)/nlm/external.h nlmconv.h
-nm.o: nm.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
- $(INCDIR)/progress.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h budemang.h $(INCDIR)/aout/stab_gnu.h \
+nlmconv.o: nlmconv.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h $(BFDDIR)/libnlm.h \
+ $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h \
+ nlmconv.h bucomm.h
+nm.o: nm.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/progress.h $(INCDIR)/aout/stab_gnu.h \
$(INCDIR)/aout/stab.def $(INCDIR)/aout/ranlib.h $(INCDIR)/demangle.h \
- $(INCDIR)/libiberty.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/common.h \
+ bucomm.h
not-ranlib.o: not-ranlib.c
not-strip.o: not-strip.c
-objcopy.o: objcopy.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/progress.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
+objcopy.o: objcopy.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/progress.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h bucomm.h \
budbg.h $(INCDIR)/filenames.h $(INCDIR)/fnmatch.h $(BFDDIR)/elf-bfd.h \
$(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
- $(INCDIR)/bfdlink.h $(BFDDIR)/libbfd.h
-objdump.o: objdump.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h ../bfd/bfdver.h $(INCDIR)/progress.h \
- bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- dwarf.h $(INCDIR)/elf/dwarf2.h budemang.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/dis-asm.h $(INCDIR)/libiberty.h $(INCDIR)/demangle.h \
- debug.h budbg.h $(INCDIR)/aout/aout64.h
-prdbg.o: prdbg.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h debug.h \
+ $(INCDIR)/bfdlink.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h
+objdump.o: objdump.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/progress.h \
+ bucomm.h dwarf.h $(INCDIR)/safe-ctype.h $(INCDIR)/dis-asm.h \
+ ../bfd/bfd.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/demangle.h $(INCDIR)/libiberty.h debug.h \
+ budbg.h $(INCDIR)/aout/aout64.h
+prdbg.o: prdbg.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/demangle.h $(INCDIR)/libiberty.h debug.h \
budbg.h
-rdcoff.o: rdcoff.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h bucomm.h \
- config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h debug.h budbg.h $(BFDDIR)/libcoff.h \
+rclex.o: rclex.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h windres.h $(INCDIR)/ansidecl.h \
+ winduni.h windint.h rcparse.h
+rdcoff.o: rdcoff.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h bucomm.h debug.h budbg.h $(BFDDIR)/libcoff.h \
$(INCDIR)/bfdlink.h
-rddbg.o: rddbg.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h debug.h \
- budbg.h
-readelf.o: readelf.c dwarf.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/alpha.h \
- $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h \
- $(INCDIR)/elf/avr.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \
+rddbg.o: rddbg.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ bucomm.h debug.h budbg.h
+readelf.o: readelf.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h dwarf.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/h8.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/alpha.h \
+ $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/avr.h \
+ $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h $(INCDIR)/elf/crx.h \
$(INCDIR)/elf/d10v.h $(INCDIR)/elf/d30v.h $(INCDIR)/elf/dlx.h \
- $(INCDIR)/elf/fr30.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/h8.h \
- $(INCDIR)/elf/hppa.h $(INCDIR)/elf/i386.h $(INCDIR)/elf/i370.h \
- $(INCDIR)/elf/i860.h $(INCDIR)/elf/i960.h $(INCDIR)/elf/ia64.h \
- $(INCDIR)/elf/ip2k.h $(INCDIR)/elf/m32c.h $(INCDIR)/elf/m32r.h \
+ $(INCDIR)/elf/fr30.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/hppa.h \
+ $(INCDIR)/elf/i386.h $(INCDIR)/elf/i370.h $(INCDIR)/elf/i860.h \
+ $(INCDIR)/elf/i960.h $(INCDIR)/elf/ia64.h $(INCDIR)/elf/ip2k.h \
+ $(INCDIR)/elf/iq2000.h $(INCDIR)/elf/m32c.h $(INCDIR)/elf/m32r.h \
$(INCDIR)/elf/m68k.h $(INCDIR)/elf/m68hc11.h $(INCDIR)/elf/mcore.h \
- $(INCDIR)/elf/mips.h $(INCDIR)/elf/mmix.h $(INCDIR)/elf/mn10200.h \
- $(INCDIR)/elf/mn10300.h $(INCDIR)/elf/mt.h $(INCDIR)/elf/msp430.h \
- $(INCDIR)/elf/or32.h $(INCDIR)/elf/pj.h $(INCDIR)/elf/ppc.h \
- $(INCDIR)/elf/ppc64.h $(INCDIR)/elf/s390.h $(INCDIR)/elf/sh.h \
- $(INCDIR)/elf/sparc.h $(INCDIR)/elf/v850.h $(INCDIR)/elf/vax.h \
- $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/xstormy16.h $(INCDIR)/elf/crx.h \
- $(INCDIR)/elf/iq2000.h $(INCDIR)/elf/xtensa.h $(INCDIR)/aout/ar.h \
- bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h unwind-ia64.h
-rename.o: rename.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h
-resbin.o: resbin.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h windres.h \
- winduni.h
-rescoff.o: rescoff.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h windres.h \
- winduni.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-resrc.o: resrc.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
- windres.h winduni.h
-resres.o: resres.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h windres.h \
- winduni.h
-size.o: size.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
- bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h
-srconv.o: srconv.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h sysroff.h coffgrok.h $(INCDIR)/libiberty.h \
- $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- sysroff.c
-stabs.o: stabs.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/demangle.h debug.h budbg.h $(INCDIR)/filenames.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
-strings.o: strings.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h $(INCDIR)/getopt.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h
-sysdump.o: sysdump.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/safe-ctype.h $(INCDIR)/libiberty.h \
- sysroff.h sysroff.c
-version.o: version.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h ../bfd/bfdver.h bucomm.h config.h \
- $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h
-windres.o: windres.c config.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
- windres.h winduni.h
-winduni.o: winduni.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h winduni.h $(INCDIR)/safe-ctype.h
-wrstabs.o: wrstabs.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/elf/mep.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/mmix.h \
+ $(INCDIR)/elf/mn10200.h $(INCDIR)/elf/mn10300.h $(INCDIR)/elf/mt.h \
+ $(INCDIR)/elf/msp430.h $(INCDIR)/elf/or32.h $(INCDIR)/elf/pj.h \
+ $(INCDIR)/elf/ppc.h $(INCDIR)/elf/ppc64.h $(INCDIR)/elf/s390.h \
+ $(INCDIR)/elf/score.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/sparc.h \
+ $(INCDIR)/elf/spu.h $(INCDIR)/elf/v850.h $(INCDIR)/elf/vax.h \
+ $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/xstormy16.h $(INCDIR)/elf/xtensa.h \
+ $(INCDIR)/aout/ar.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ unwind-ia64.h
+rename.o: rename.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h
+resbin.o: resbin.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ windres.h winduni.h windint.h
+rescoff.o: rescoff.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h windres.h winduni.h windint.h \
+ $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+resrc.o: resrc.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h windres.h winduni.h windint.h
+resres.o: resres.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ windres.h winduni.h windint.h
+size.o: size.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ bucomm.h
+srconv.o: srconv.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h sysroff.h coffgrok.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h sysroff.c
+stabs.o: stabs.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
+ debug.h budbg.h $(INCDIR)/filenames.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
+strings.o: strings.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h bucomm.h
+sysdump.o: sysdump.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h bucomm.h \
+ sysroff.h sysroff.c $(INCDIR)/ansidecl.h
+version.o: version.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h
+windres.o: windres.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
+ windres.h winduni.h windint.h
+winduni.o: winduni.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h bucomm.h winduni.h $(INCDIR)/safe-ctype.h
+wrstabs.o: wrstabs.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h bucomm.h \
debug.h budbg.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \
$(INCDIR)/aout/stab.def
-arparse.o: arparse.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h arsup.h
+windmc.o: windmc.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h windmc.h \
+ winduni.h windint.h
+mclex.o: mclex.c sysdep.h $(INCDIR)/ansidecl.h ../bfd/bfdver.h \
+ config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h windmc.h winduni.h mcparse.h
+arparse.o: arparse.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h arsup.h
arlex.o: arlex.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- arparse.h
+ $(INCDIR)/ansidecl.h arparse.h
sysroff.o: sysroff.c
sysinfo.o: sysinfo.c
syslex.o: syslex.c config.h sysinfo.h
-defparse.o: defparse.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h dlltool.h
+defparse.o: defparse.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h dlltool.h
deflex.o: deflex.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- defparse.h dlltool.h
-nlmheader.o: nlmheader.c $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h \
+ defparse.h dlltool.h $(INCDIR)/ansidecl.h
+nlmheader.o: nlmheader.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/safe-ctype.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h bucomm.h \
nlmconv.h
-rcparse.o: rcparse.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h windres.h \
- winduni.h $(INCDIR)/safe-ctype.h
-rclex.o: rclex.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
- windres.h winduni.h rcparse.h
+rcparse.o: rcparse.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h windres.h winduni.h windint.h \
+ $(INCDIR)/safe-ctype.h
+mcparse.o: mcparse.c sysdep.h $(INCDIR)/ansidecl.h \
+ ../bfd/bfdver.h config.h $(INCDIR)/fopen-same.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h windmc.h winduni.h $(INCDIR)/safe-ctype.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.
diff --git a/binutils/NEWS b/binutils/NEWS
index d12450e38925..ad6058f75b22 100644
--- a/binutils/NEWS
+++ b/binutils/NEWS
@@ -1,5 +1,20 @@
-*- text -*-
+* A new tool "windmc" has been added for some targets. This is a message
+ compiler which attempts to be compatible with the MS version.
+
+* Add codepage support to the windres tool. It now supports many new
+ resource types (e.g. MANIFEST, TOOLBAR, etc). The output generation
+ for binary files is done now via bfd itself. The endianess problems
+ for different hosts are solved. Dumps of .res files can now be
+ re-compiled by windres without lossing resources or compilation errors.
+ Some problems on dialog resource translations are corrected.
+
+* Add --extract-symbol command line option to objcopy, which will
+ strip everything out of an ordinary object file or executable except
+ for its symbol table. Files containing just symbols can be useful
+ to some OSes.
+
* Add "-x NAME" to readelf in addition to "-x NUMBER".
* Add -i and -t switches to cxxfilt. -i disables the display of implementation
@@ -30,6 +45,9 @@
* Add "--globalize-symbol <name>" and "--globalize-symbols <filename>" switches
to objcopy to convert local symbols into global symbols.
+
+* gprof now allows input files to have histogram records for
+ several memory ranges, provided those ranges are disjoint.
Changes in 2.16:
diff --git a/binutils/acinclude.m4 b/binutils/acinclude.m4
deleted file mode 100644
index 71b09b9f6ac7..000000000000
--- a/binutils/acinclude.m4
+++ /dev/null
@@ -1 +0,0 @@
-sinclude(../bfd/acinclude.m4)
diff --git a/binutils/aclocal.m4 b/binutils/aclocal.m4
index cd4267338b72..29676eafab96 100644
--- a/binutils/aclocal.m4
+++ b/binutils/aclocal.m4
@@ -480,27 +480,6 @@ AC_DEFUN([AM_PROG_INSTALL_SH],
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.
#
@@ -910,4 +889,19 @@ AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
-m4_include([acinclude.m4])
+m4_include([../bfd/acinclude.m4])
+m4_include([../bfd/warning.m4])
+m4_include([../config/depstand.m4])
+m4_include([../config/gettext-sister.m4])
+m4_include([../config/iconv.m4])
+m4_include([../config/lead-dot.m4])
+m4_include([../config/lib-ld.m4])
+m4_include([../config/lib-link.m4])
+m4_include([../config/lib-prefix.m4])
+m4_include([../config/nls.m4])
+m4_include([../config/po.m4])
+m4_include([../config/progtest.m4])
+m4_include([../libtool.m4])
+m4_include([../ltoptions.m4])
+m4_include([../ltsugar.m4])
+m4_include([../ltversion.m4])
diff --git a/binutils/addr2line.c b/binutils/addr2line.c
index 7cd67bc0a1b0..a7c365ae7417 100644
--- a/binutils/addr2line.c
+++ b/binutils/addr2line.c
@@ -1,5 +1,5 @@
/* addr2line.c -- convert addresses to line number and function name
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006
+ Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006, 2007
Free Software Foundation, Inc.
Contributed by Ulrich Lauther <Ulrich.Lauther@mchp.siemens.de>
@@ -29,15 +29,12 @@
both forms write results to stdout, the second form reads addresses
to be converted from stdin. */
-#include "config.h"
-#include <string.h>
-
+#include "sysdep.h"
#include "bfd.h"
#include "getopt.h"
#include "libiberty.h"
#include "demangle.h"
#include "bucomm.h"
-#include "budemang.h"
static bfd_boolean unwind_inlines; /* -i, unwind inlined functions. */
static bfd_boolean with_functions; /* -f, show function names. */
@@ -68,7 +65,6 @@ static void slurp_symtab (bfd *);
static void find_address_in_section (bfd *, asection *, void *);
static void find_offset_in_section (bfd *, asection *);
static void translate_addresses (bfd *, asection *);
-static void process_file (const char *, const char *, const char *);
/* Print a usage message to STREAM and exit with STATUS. */
@@ -92,7 +88,7 @@ usage (FILE *stream, int status)
\n"));
list_supported_targets (program_name, stream);
- if (status == 0)
+ if (REPORT_BUGS_TO[0] && status == 0)
fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
exit (status);
}
@@ -225,8 +221,9 @@ translate_addresses (bfd *abfd, asection *section)
name = "??";
else if (do_demangle)
{
- alloc = demangle (abfd, name);
- name = alloc;
+ alloc = bfd_demangle (abfd, name, DMGL_ANSI | DMGL_PARAMS);
+ if (alloc != NULL)
+ name = alloc;
}
printf ("%s\n", name);
@@ -261,9 +258,9 @@ translate_addresses (bfd *abfd, asection *section)
}
}
-/* Process a file. */
+/* Process a file. Returns an exit value for main(). */
-static void
+static int
process_file (const char *file_name, const char *section_name,
const char *target)
{
@@ -272,7 +269,7 @@ process_file (const char *file_name, const char *section_name,
char **matching;
if (get_file_size (file_name) < 1)
- return;
+ return 1;
abfd = bfd_openr (file_name, target);
if (abfd == NULL)
@@ -312,6 +309,8 @@ process_file (const char *file_name, const char *section_name,
}
bfd_close (abfd);
+
+ return 0;
}
int
@@ -401,7 +400,5 @@ main (int argc, char **argv)
addr = argv + optind;
naddr = argc - optind;
- process_file (file_name, section_name, target);
-
- return 0;
+ return process_file (file_name, section_name, target);
}
diff --git a/binutils/ar.c b/binutils/ar.c
index fe1c6402222d..8313df5bf39a 100644
--- a/binutils/ar.c
+++ b/binutils/ar.c
@@ -1,6 +1,6 @@
/* ar.c - Archive modify and extract.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -26,12 +26,13 @@
when name truncated. No way to specify pos_end. Error messages should be
more consistent. */
+#include "sysdep.h"
#include "bfd.h"
#include "libiberty.h"
#include "progress.h"
-#include "bucomm.h"
#include "aout/ar.h"
#include "libbfd.h"
+#include "bucomm.h"
#include "arsup.h"
#include "filenames.h"
#include "binemul.h"
@@ -68,8 +69,8 @@ static void replace_members
(bfd *, char **files_to_replace, bfd_boolean quick);
static void print_descr (bfd * abfd);
static void write_archive (bfd *);
-static void ranlib_only (const char *archname);
-static void ranlib_touch (const char *archname);
+static int ranlib_only (const char *archname);
+static int ranlib_touch (const char *archname);
static void usage (int);
/** Globals and flags */
@@ -153,7 +154,7 @@ map_over_members (bfd *arch, void (*function)(bfd *), char **files, int count)
if (count == 0)
{
- for (head = arch->next; head; head = head->next)
+ for (head = arch->archive_next; head; head = head->archive_next)
{
PROGRESS (1);
function (head);
@@ -172,7 +173,7 @@ map_over_members (bfd *arch, void (*function)(bfd *), char **files, int count)
bfd_boolean found = FALSE;
match_count = 0;
- for (head = arch->next; head; head = head->next)
+ for (head = arch->archive_next; head; head = head->archive_next)
{
PROGRESS (1);
if (head->filename == NULL)
@@ -257,9 +258,9 @@ usage (int help)
-V --version Print version information\n"));
}
- list_supported_targets (program_name, stderr);
+ list_supported_targets (program_name, s);
- if (help)
+ if (REPORT_BUGS_TO[0] && help)
fprintf (s, _("Report bugs to %s\n"), REPORT_BUGS_TO);
xexit (help ? 0 : 1);
@@ -420,6 +421,7 @@ main (int argc, char **argv)
if (is_ranlib)
{
+ int status = 0;
bfd_boolean touch = FALSE;
if (argc < 2
@@ -429,7 +431,7 @@ main (int argc, char **argv)
usage (0);
if (strcmp (argv[1], "-V") == 0
|| strcmp (argv[1], "-v") == 0
- || strncmp (argv[1], "--v", 3) == 0)
+ || CONST_STRNEQ (argv[1], "--v"))
print_version ("ranlib");
arg_index = 1;
if (strcmp (argv[1], "-t") == 0)
@@ -440,12 +442,12 @@ main (int argc, char **argv)
while (arg_index < argc)
{
if (! touch)
- ranlib_only (argv[arg_index]);
+ status |= ranlib_only (argv[arg_index]);
else
- ranlib_touch (argv[arg_index]);
+ status |= ranlib_touch (argv[arg_index]);
++arg_index;
}
- xexit (0);
+ xexit (status);
}
if (argc == 2 && strcmp (argv[1], "-M") == 0)
@@ -597,10 +599,7 @@ main (int argc, char **argv)
if ((operation == none || operation == print_table)
&& write_armap == 1)
- {
- ranlib_only (argv[arg_index]);
- xexit (0);
- }
+ xexit (ranlib_only (argv[arg_index]));
if (operation == none)
fatal (_("no operation specified"));
@@ -760,7 +759,7 @@ open_inarch (const char *archive_filename, const char *file)
xexit (1);
}
- last_one = &(arch->next);
+ last_one = &(arch->archive_next);
/* Read all the contents right away, regardless. */
for (next_one = bfd_openr_next_archived_file (arch, NULL);
next_one;
@@ -768,7 +767,7 @@ open_inarch (const char *archive_filename, const char *file)
{
PROGRESS (1);
*last_one = next_one;
- last_one = &next_one->next;
+ last_one = &next_one->archive_next;
}
*last_one = (bfd *) NULL;
if (bfd_get_error () != bfd_error_no_more_archived_files)
@@ -779,10 +778,10 @@ open_inarch (const char *archive_filename, const char *file)
static void
print_contents (bfd *abfd)
{
- int ncopied = 0;
+ size_t ncopied = 0;
char *cbuf = xmalloc (BUFSIZE);
struct stat buf;
- long size;
+ size_t size;
if (bfd_stat_arch_elt (abfd, &buf) != 0)
/* xgettext:c-format */
fatal (_("internal stat error on %s"), bfd_get_filename (abfd));
@@ -797,8 +796,8 @@ print_contents (bfd *abfd)
while (ncopied < size)
{
- int nread;
- int tocopy = size - ncopied;
+ size_t nread;
+ size_t tocopy = size - ncopied;
if (tocopy > BUFSIZE)
tocopy = BUFSIZE;
@@ -807,7 +806,12 @@ print_contents (bfd *abfd)
/* xgettext:c-format */
fatal (_("%s is not a valid archive"),
bfd_get_filename (bfd_my_archive (abfd)));
- fwrite (cbuf, 1, nread, stdout);
+
+ /* fwrite in mingw32 may return int instead of size_t. Cast the
+ return value to size_t to avoid comparison between signed and
+ unsigned values. */
+ if ((size_t) fwrite (cbuf, 1, nread, stdout) != nread)
+ fatal ("stdout: %s", strerror (errno));
ncopied += tocopy;
}
free (cbuf);
@@ -828,9 +832,9 @@ extract_file (bfd *abfd)
{
FILE *ostream;
char *cbuf = xmalloc (BUFSIZE);
- int nread, tocopy;
- long ncopied = 0;
- long size;
+ size_t nread, tocopy;
+ size_t ncopied = 0;
+ size_t size;
struct stat buf;
if (bfd_stat_arch_elt (abfd, &buf) != 0)
@@ -838,10 +842,6 @@ extract_file (bfd *abfd)
fatal (_("internal stat error on %s"), bfd_get_filename (abfd));
size = buf.st_size;
- if (size < 0)
- /* xgettext:c-format */
- fatal (_("stat returns negative size for %s"), bfd_get_filename (abfd));
-
if (verbose)
printf ("x - %s\n", bfd_get_filename (abfd));
@@ -890,7 +890,12 @@ extract_file (bfd *abfd)
output_file = ostream;
}
- fwrite (cbuf, 1, nread, ostream);
+
+ /* fwrite in mingw32 may return int instead of size_t. Cast
+ the return value to size_t to avoid comparison between
+ signed and unsigned values. */
+ if ((size_t) fwrite (cbuf, 1, nread, ostream) != nread)
+ fatal ("%s: %s", output_filename, strerror (errno));
ncopied += tocopy;
}
@@ -918,12 +923,15 @@ write_archive (bfd *iarch)
{
bfd *obfd;
char *old_name, *new_name;
- bfd *contents_head = iarch->next;
+ bfd *contents_head = iarch->archive_next;
old_name = xmalloc (strlen (bfd_get_filename (iarch)) + 1);
strcpy (old_name, bfd_get_filename (iarch));
new_name = make_tempname (old_name);
+ if (new_name == NULL)
+ bfd_fatal ("could not create temporary file whilst writing archive");
+
output_filename = new_name;
obfd = bfd_openw (new_name, bfd_get_target (iarch));
@@ -987,15 +995,15 @@ get_pos_bfd (bfd **contents, enum pos default_pos, const char *default_posname)
if (realpos == pos_end)
{
while (*after_bfd)
- after_bfd = &((*after_bfd)->next);
+ after_bfd = &((*after_bfd)->archive_next);
}
else
{
- for (; *after_bfd; after_bfd = &(*after_bfd)->next)
+ for (; *after_bfd; after_bfd = &(*after_bfd)->archive_next)
if (FILENAME_CMP ((*after_bfd)->filename, realposname) == 0)
{
if (realpos == pos_after)
- after_bfd = &(*after_bfd)->next;
+ after_bfd = &(*after_bfd)->archive_next;
break;
}
}
@@ -1027,7 +1035,7 @@ delete_members (bfd *arch, char **files_to_delete)
found = FALSE;
match_count = 0;
- current_ptr_ptr = &(arch->next);
+ current_ptr_ptr = &(arch->archive_next);
while (*current_ptr_ptr)
{
if (FILENAME_CMP (normalize (*files_to_delete, arch),
@@ -1047,12 +1055,12 @@ delete_members (bfd *arch, char **files_to_delete)
if (verbose)
printf ("d - %s\n",
*files_to_delete);
- *current_ptr_ptr = ((*current_ptr_ptr)->next);
+ *current_ptr_ptr = ((*current_ptr_ptr)->archive_next);
goto next_file;
}
}
- current_ptr_ptr = &((*current_ptr_ptr)->next);
+ current_ptr_ptr = &((*current_ptr_ptr)->archive_next);
}
if (verbose && !found)
@@ -1081,7 +1089,7 @@ move_members (bfd *arch, char **files_to_move)
for (; *files_to_move; ++files_to_move)
{
- current_ptr_ptr = &(arch->next);
+ current_ptr_ptr = &(arch->archive_next);
while (*current_ptr_ptr)
{
bfd *current_ptr = *current_ptr_ptr;
@@ -1091,13 +1099,13 @@ move_members (bfd *arch, char **files_to_move)
/* Move this file to the end of the list - first cut from
where it is. */
bfd *link;
- *current_ptr_ptr = current_ptr->next;
+ *current_ptr_ptr = current_ptr->archive_next;
/* Now glue to end */
- after_bfd = get_pos_bfd (&arch->next, pos_end, NULL);
+ after_bfd = get_pos_bfd (&arch->archive_next, pos_end, NULL);
link = *after_bfd;
*after_bfd = current_ptr;
- current_ptr->next = link;
+ current_ptr->archive_next = link;
if (verbose)
printf ("m - %s\n", *files_to_move);
@@ -1105,7 +1113,7 @@ move_members (bfd *arch, char **files_to_move)
goto next_file;
}
- current_ptr_ptr = &((*current_ptr_ptr)->next);
+ current_ptr_ptr = &((*current_ptr_ptr)->archive_next);
}
/* xgettext:c-format */
fatal (_("no entry %s in archive %s!"), *files_to_move, arch->filename);
@@ -1130,7 +1138,7 @@ replace_members (bfd *arch, char **files_to_move, bfd_boolean quick)
{
if (! quick)
{
- current_ptr = &arch->next;
+ current_ptr = &arch->archive_next;
while (*current_ptr)
{
current = *current_ptr;
@@ -1160,24 +1168,24 @@ replace_members (bfd *arch, char **files_to_move, bfd_boolean quick)
goto next_file;
}
- after_bfd = get_pos_bfd (&arch->next, pos_after,
+ after_bfd = get_pos_bfd (&arch->archive_next, pos_after,
current->filename);
if (ar_emul_replace (after_bfd, *files_to_move,
verbose))
{
/* Snip out this entry from the chain. */
- *current_ptr = (*current_ptr)->next;
+ *current_ptr = (*current_ptr)->archive_next;
changed = TRUE;
}
goto next_file;
}
- current_ptr = &(current->next);
+ current_ptr = &(current->archive_next);
}
}
/* Add to the end of the archive. */
- after_bfd = get_pos_bfd (&arch->next, pos_end, NULL);
+ after_bfd = get_pos_bfd (&arch->archive_next, pos_end, NULL);
if (ar_emul_append (after_bfd, *files_to_move, verbose))
changed = TRUE;
@@ -1193,23 +1201,24 @@ replace_members (bfd *arch, char **files_to_move, bfd_boolean quick)
output_filename = NULL;
}
-static void
+static int
ranlib_only (const char *archname)
{
bfd *arch;
if (get_file_size (archname) < 1)
- return;
+ return 1;
write_armap = 1;
arch = open_inarch (archname, (char *) NULL);
if (arch == NULL)
xexit (1);
write_archive (arch);
+ return 0;
}
/* Update the timestamp of the symbol map of an archive. */
-static void
+static int
ranlib_touch (const char *archname)
{
#ifdef __GO32__
@@ -1221,7 +1230,7 @@ ranlib_touch (const char *archname)
char **matching;
if (get_file_size (archname) < 1)
- return;
+ return 1;
f = open (archname, O_RDWR | O_BINARY, 0);
if (f < 0)
{
@@ -1252,6 +1261,7 @@ ranlib_touch (const char *archname)
if (! bfd_close (arch))
bfd_fatal (archname);
#endif
+ return 0;
}
/* Things which are interesting to map over all or some of the files: */
diff --git a/binutils/arlex.c b/binutils/arlex.c
deleted file mode 100644
index cd9bd52d080d..000000000000
--- a/binutils/arlex.c
+++ /dev/null
@@ -1,1856 +0,0 @@
-/* A lexical scanner generated by flex */
-
-/* Scanner skeleton version:
- * $Header: /cvs/src/src/binutils/Attic/arlex.c,v 1.1.16.1 2006/04/16 18:36:40 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 40
-#define YY_END_OF_BUFFER 41
-static yyconst short int yy_accept[177] =
- { 0,
- 0, 0, 41, 40, 39, 38, 35, 32, 33, 36,
- 40, 34, 37, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 36, 31, 37, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 7, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 22, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-
- 35, 35, 35, 10, 11, 12, 35, 15, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 25, 26, 27,
- 35, 30, 35, 35, 35, 3, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 18, 35, 35, 35, 35,
- 35, 35, 35, 1, 2, 4, 5, 35, 35, 35,
- 35, 35, 16, 17, 19, 20, 35, 35, 35, 35,
- 35, 35, 8, 9, 13, 14, 35, 23, 24, 28,
- 29, 35, 35, 6, 21, 0
- } ;
-
-static yyconst int yy_ec[256] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 3, 1, 1, 1, 4, 1, 1, 1, 5,
- 6, 7, 8, 9, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 10, 1,
- 1, 1, 1, 1, 11, 12, 13, 14, 15, 16,
- 4, 17, 18, 4, 4, 19, 20, 21, 22, 23,
- 4, 24, 25, 26, 27, 28, 4, 29, 30, 4,
- 1, 4, 1, 1, 4, 1, 31, 32, 33, 34,
-
- 35, 36, 4, 37, 38, 4, 4, 39, 40, 41,
- 42, 43, 4, 44, 45, 46, 47, 48, 4, 49,
- 50, 4, 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, 1, 1, 1, 1
- } ;
-
-static yyconst int yy_meta[51] =
- { 0,
- 1, 2, 1, 3, 1, 1, 1, 1, 1, 1,
- 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
- } ;
-
-static yyconst short int yy_base[180] =
- { 0,
- 0, 0, 193, 194, 194, 194, 0, 194, 194, 0,
- 190, 194, 0, 177, 32, 37, 32, 163, 174, 170,
- 164, 171, 174, 169, 149, 15, 22, 17, 135, 146,
- 142, 136, 143, 146, 141, 0, 0, 194, 0, 161,
- 159, 158, 153, 147, 156, 143, 149, 148, 141, 150,
- 141, 135, 138, 127, 125, 124, 119, 113, 122, 109,
- 115, 114, 107, 116, 107, 101, 104, 43, 136, 135,
- 130, 129, 0, 119, 123, 118, 114, 118, 119, 122,
- 124, 25, 104, 103, 98, 97, 0, 87, 91, 86,
- 82, 86, 87, 90, 92, 105, 100, 97, 94, 93,
-
- 105, 106, 102, 0, 0, 0, 104, 0, 92, 75,
- 70, 67, 64, 63, 75, 76, 72, 0, 0, 0,
- 74, 0, 62, 91, 88, 0, 86, 85, 73, 85,
- 79, 83, 70, 62, 59, 0, 57, 56, 44, 56,
- 50, 54, 41, 0, 0, 0, 0, 63, 58, 59,
- 67, 66, 0, 0, 0, 0, 38, 33, 34, 42,
- 41, 51, 0, 0, 0, 0, 30, 0, 0, 0,
- 0, 43, 21, 0, 0, 194, 65, 66, 69
- } ;
-
-static yyconst short int yy_def[180] =
- { 0,
- 176, 1, 176, 176, 176, 176, 177, 176, 176, 178,
- 176, 176, 179, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 178, 176, 179, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
-
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 0, 176, 176, 176
- } ;
-
-static yyconst short int yy_nxt[245] =
- { 0,
- 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 7, 15, 16, 17, 18, 19, 7, 20, 7,
- 7, 21, 7, 22, 23, 7, 7, 24, 7, 7,
- 25, 7, 26, 27, 28, 29, 30, 7, 31, 7,
- 7, 32, 7, 33, 34, 7, 7, 35, 7, 7,
- 41, 43, 45, 55, 44, 42, 57, 59, 56, 58,
- 46, 96, 97, 110, 111, 60, 37, 36, 37, 39,
- 175, 39, 174, 173, 172, 171, 170, 169, 168, 167,
- 166, 165, 164, 163, 162, 161, 160, 159, 158, 157,
- 156, 155, 154, 153, 152, 151, 150, 149, 148, 147,
-
- 146, 145, 144, 143, 142, 141, 140, 139, 138, 137,
- 136, 135, 134, 133, 132, 131, 130, 129, 128, 127,
- 126, 125, 124, 123, 122, 121, 120, 119, 118, 117,
- 116, 115, 114, 113, 112, 109, 108, 107, 106, 105,
- 104, 103, 102, 101, 100, 99, 98, 95, 94, 93,
- 92, 91, 90, 89, 88, 87, 86, 85, 84, 83,
- 82, 81, 80, 79, 78, 77, 76, 75, 74, 73,
- 72, 71, 70, 69, 68, 67, 66, 65, 64, 63,
- 62, 61, 54, 53, 52, 51, 50, 49, 48, 47,
- 40, 38, 176, 3, 176, 176, 176, 176, 176, 176,
-
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176
- } ;
-
-static yyconst short int yy_chk[245] =
- { 0,
- 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,
- 15, 16, 17, 26, 16, 15, 27, 28, 26, 27,
- 17, 68, 68, 82, 82, 28, 178, 177, 178, 179,
- 173, 179, 172, 167, 162, 161, 160, 159, 158, 157,
- 152, 151, 150, 149, 148, 143, 142, 141, 140, 139,
- 138, 137, 135, 134, 133, 132, 131, 130, 129, 128,
-
- 127, 125, 124, 123, 121, 117, 116, 115, 114, 113,
- 112, 111, 110, 109, 107, 103, 102, 101, 100, 99,
- 98, 97, 96, 95, 94, 93, 92, 91, 90, 89,
- 88, 86, 85, 84, 83, 81, 80, 79, 78, 77,
- 76, 75, 74, 72, 71, 70, 69, 67, 66, 65,
- 64, 63, 62, 61, 60, 59, 58, 57, 56, 55,
- 54, 53, 52, 51, 50, 49, 48, 47, 46, 45,
- 44, 43, 42, 41, 40, 35, 34, 33, 32, 31,
- 30, 29, 25, 24, 23, 22, 21, 20, 19, 18,
- 14, 11, 3, 176, 176, 176, 176, 176, 176, 176,
-
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176
- } ;
-
-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 "arlex.l"
-#define INITIAL 0
-#line 2 "arlex.l"
-/* arlex.l - Strange script language lexer */
-
-/* Copyright 1992, 1997, 2000, 2001, 2002, 2003, 2004
- 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. */
-
-
-/* Contributed by Steve Chamberlain <sac@cygnus.com>. */
-
-#define DONTDECLARE_MALLOC
-#include "ansidecl.h"
-#include "libiberty.h"
-#include "arparse.h"
-
-#define YY_NO_UNPUT
-
-extern int yylex (void);
-
-int linenumber;
-#line 511 "arlex.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 41 "arlex.l"
-
-
-#line 676 "arlex.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 >= 177 )
- 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] != 194 );
-
-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 43 "arlex.l"
-{ return ADDLIB; }
- YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 44 "arlex.l"
-{ return ADDMOD; }
- YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 45 "arlex.l"
-{ return CLEAR; }
- YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 46 "arlex.l"
-{ return CREATE; }
- YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 47 "arlex.l"
-{ return DELETE; }
- YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 48 "arlex.l"
-{ return DIRECTORY; }
- YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 49 "arlex.l"
-{ return END; }
- YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 50 "arlex.l"
-{ return EXTRACT; }
- YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 51 "arlex.l"
-{ return FULLDIR; }
- YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 52 "arlex.l"
-{ return HELP; }
- YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 53 "arlex.l"
-{ return LIST; }
- YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 54 "arlex.l"
-{ return OPEN; }
- YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 55 "arlex.l"
-{ return REPLACE; }
- YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 56 "arlex.l"
-{ return VERBOSE; }
- YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 57 "arlex.l"
-{ return SAVE; }
- YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 58 "arlex.l"
-{ return ADDLIB; }
- YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 59 "arlex.l"
-{ return ADDMOD; }
- YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 60 "arlex.l"
-{ return CLEAR; }
- YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 61 "arlex.l"
-{ return CREATE; }
- YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 62 "arlex.l"
-{ return DELETE; }
- YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 63 "arlex.l"
-{ return DIRECTORY; }
- YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 64 "arlex.l"
-{ return END; }
- YY_BREAK
-case 23:
-YY_RULE_SETUP
-#line 65 "arlex.l"
-{ return EXTRACT; }
- YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 66 "arlex.l"
-{ return FULLDIR; }
- YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 67 "arlex.l"
-{ return HELP; }
- YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 68 "arlex.l"
-{ return LIST; }
- YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 69 "arlex.l"
-{ return OPEN; }
- YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 70 "arlex.l"
-{ return REPLACE; }
- YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 71 "arlex.l"
-{ return VERBOSE; }
- YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 72 "arlex.l"
-{ return SAVE; }
- YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 73 "arlex.l"
-{ linenumber ++; }
- YY_BREAK
-case 32:
-YY_RULE_SETUP
-#line 74 "arlex.l"
-{ return '('; }
- YY_BREAK
-case 33:
-YY_RULE_SETUP
-#line 75 "arlex.l"
-{ return ')'; }
- YY_BREAK
-case 34:
-YY_RULE_SETUP
-#line 76 "arlex.l"
-{ return ','; }
- YY_BREAK
-case 35:
-YY_RULE_SETUP
-#line 77 "arlex.l"
-{
- yylval.name = xstrdup (yytext);
- return FILENAME;
- }
- YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 81 "arlex.l"
-{ }
- YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 82 "arlex.l"
-{ }
- YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 83 "arlex.l"
-{ }
- YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 84 "arlex.l"
-{ linenumber ++; return NEWLINE; }
- YY_BREAK
-case 40:
-YY_RULE_SETUP
-#line 86 "arlex.l"
-ECHO;
- YY_BREAK
-#line 962 "arlex.c"
-case YY_STATE_EOF(INITIAL):
- yyterminate();
-
- 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 >= 177 )
- 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 >= 177 )
- 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 == 176);
-
- 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 86 "arlex.l"
-
-#ifndef yywrap
-/* Needed for lex, though not flex. */
-int yywrap(void) { return 1; }
-#endif
diff --git a/binutils/arparse.c b/binutils/arparse.c
deleted file mode 100644
index 21fa13a44b08..000000000000
--- a/binutils/arparse.c
+++ /dev/null
@@ -1,1605 +0,0 @@
-/* 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 {
- NEWLINE = 258,
- VERBOSE = 259,
- FILENAME = 260,
- ADDLIB = 261,
- LIST = 262,
- ADDMOD = 263,
- CLEAR = 264,
- CREATE = 265,
- DELETE = 266,
- DIRECTORY = 267,
- END = 268,
- EXTRACT = 269,
- FULLDIR = 270,
- HELP = 271,
- QUIT = 272,
- REPLACE = 273,
- SAVE = 274,
- OPEN = 275
- };
-#endif
-/* Tokens. */
-#define NEWLINE 258
-#define VERBOSE 259
-#define FILENAME 260
-#define ADDLIB 261
-#define LIST 262
-#define ADDMOD 263
-#define CLEAR 264
-#define CREATE 265
-#define DELETE 266
-#define DIRECTORY 267
-#define END 268
-#define EXTRACT 269
-#define FULLDIR 270
-#define HELP 271
-#define QUIT 272
-#define REPLACE 273
-#define SAVE 274
-#define OPEN 275
-
-
-
-
-/* Copy the first part of user declarations. */
-#line 1 "arparse.y"
-
-/* arparse.y - Stange script language parser */
-
-/* Copyright 1992, 1993, 1995, 1997, 1999, 2002, 2003
- 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. */
-
-
-/* Contributed by Steve Chamberlain
- sac@cygnus.com
-
-*/
-#define DONTDECLARE_MALLOC
-#include "bfd.h"
-#include "bucomm.h"
-#include "arsup.h"
-extern int verbose;
-extern int yylex (void);
-static int yyerror (const char *);
-
-
-/* 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 37 "arparse.y"
-typedef union YYSTYPE {
- char *name;
-struct list *list ;
-
-} YYSTYPE;
-/* Line 196 of yacc.c. */
-#line 167 "arparse.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 179 "arparse.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 3
-/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 34
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 24
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 22
-/* YYNRULES -- Number of rules. */
-#define YYNRULES 42
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 53
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
-#define YYUNDEFTOK 2
-#define YYMAXUTOK 275
-
-#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, 2, 2, 2, 2, 2, 2, 2,
- 21, 22, 2, 2, 23, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
- YYRHS. */
-static const unsigned char yyprhs[] =
-{
- 0, 0, 3, 4, 7, 10, 11, 14, 16, 18,
- 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
- 40, 42, 44, 45, 48, 51, 53, 56, 59, 61,
- 63, 66, 69, 73, 78, 80, 81, 85, 86, 90,
- 91, 93, 94
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yysigned_char yyrhs[] =
-{
- 25, 0, -1, -1, 26, 27, -1, 27, 28, -1,
- -1, 29, 3, -1, 37, -1, 38, -1, 45, -1,
- 40, -1, 39, -1, 32, -1, 34, -1, 36, -1,
- 30, -1, 31, -1, 33, -1, 35, -1, 13, -1,
- 1, -1, 5, -1, -1, 14, 43, -1, 18, 43,
- -1, 9, -1, 11, 43, -1, 8, 43, -1, 7,
- -1, 19, -1, 20, 5, -1, 10, 5, -1, 6,
- 5, 42, -1, 12, 5, 42, 41, -1, 5, -1,
- -1, 21, 43, 22, -1, -1, 43, 44, 5, -1,
- -1, 23, -1, -1, 4, -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const unsigned char yyrline[] =
-{
- 0, 68, 68, 68, 72, 73, 77, 81, 82, 83,
- 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
- 94, 95, 96, 101, 106, 111, 116, 120, 125, 130,
- 137, 142, 148, 152, 159, 161, 165, 168, 172, 178,
- 183, 184, 189
-};
-#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", "NEWLINE", "VERBOSE", "FILENAME",
- "ADDLIB", "LIST", "ADDMOD", "CLEAR", "CREATE", "DELETE", "DIRECTORY",
- "END", "EXTRACT", "FULLDIR", "HELP", "QUIT", "REPLACE", "SAVE", "OPEN",
- "'('", "')'", "','", "$accept", "start", "@1", "session", "command_line",
- "command", "extract_command", "replace_command", "clear_command",
- "delete_command", "addmod_command", "list_command", "save_command",
- "open_command", "create_command", "addlib_command", "directory_command",
- "optional_filename", "modulelist", "modulename", "optcomma",
- "verbose_command", 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, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 40, 41, 44
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const unsigned char yyr1[] =
-{
- 0, 24, 26, 25, 27, 27, 28, 29, 29, 29,
- 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
- 29, 29, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 41, 42, 42, 43, 43,
- 44, 44, 45
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const unsigned char yyr2[] =
-{
- 0, 2, 0, 2, 2, 0, 2, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 0, 2, 2, 1, 2, 2, 1, 1,
- 2, 2, 3, 4, 1, 0, 3, 0, 3, 0,
- 1, 0, 1
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
- STATE-NUM when YYTABLE doesn't specify something else to do. Zero
- means the default is an error. */
-static const unsigned char yydefact[] =
-{
- 2, 0, 5, 1, 0, 20, 42, 21, 0, 28,
- 39, 25, 0, 39, 0, 19, 39, 39, 29, 0,
- 4, 0, 15, 16, 12, 17, 13, 18, 14, 7,
- 8, 11, 10, 9, 37, 27, 31, 26, 37, 23,
- 24, 30, 6, 39, 32, 40, 0, 35, 41, 38,
- 34, 33, 36
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yysigned_char yydefgoto[] =
-{
- -1, 1, 2, 4, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 51, 44, 35,
- 46, 33
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -14
-static const yysigned_char yypact[] =
-{
- -14, 1, -14, -14, 5, -14, -14, -14, 2, -14,
- -14, -14, 21, -14, 22, -14, -14, -14, -14, 23,
- -14, 26, -14, -14, -14, -14, -14, -14, -14, -14,
- -14, -14, -14, -14, 10, -3, -14, -3, 10, -3,
- -3, -14, -14, -14, -14, -14, 27, 28, -1, -14,
- -14, -14, -14
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const yysigned_char yypgoto[] =
-{
- -14, -14, -14, -14, -14, -14, -14, -14, -14, -14,
- -14, -14, -14, -14, -14, -14, -14, -14, -4, -13,
- -14, -14
-};
-
-/* 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 -42
-static const yysigned_char yytable[] =
-{
- 37, 3, -41, 39, 40, -3, 5, 34, -22, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 45, 52, 45, 17, 18, 19, 36, 38, 41, 42,
- 48, 43, 49, 50, 47
-};
-
-static const unsigned char yycheck[] =
-{
- 13, 0, 5, 16, 17, 0, 1, 5, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 23, 22, 23, 18, 19, 20, 5, 5, 5, 3,
- 43, 21, 5, 5, 38
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
-static const unsigned char yystos[] =
-{
- 0, 25, 26, 0, 27, 1, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 18, 19, 20,
- 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
- 38, 39, 40, 45, 5, 43, 5, 43, 5, 43,
- 43, 5, 3, 21, 42, 23, 44, 42, 43, 5,
- 5, 41, 22
-};
-
-#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 2:
-#line 68 "arparse.y"
- { prompt(); }
- break;
-
- case 6:
-#line 77 "arparse.y"
- { prompt(); }
- break;
-
- case 19:
-#line 93 "arparse.y"
- { ar_end(); return 0; }
- break;
-
- case 21:
-#line 95 "arparse.y"
- { yyerror("foo"); }
- break;
-
- case 23:
-#line 102 "arparse.y"
- { ar_extract((yyvsp[0].list)); }
- break;
-
- case 24:
-#line 107 "arparse.y"
- { ar_replace((yyvsp[0].list)); }
- break;
-
- case 25:
-#line 112 "arparse.y"
- { ar_clear(); }
- break;
-
- case 26:
-#line 117 "arparse.y"
- { ar_delete((yyvsp[0].list)); }
- break;
-
- case 27:
-#line 121 "arparse.y"
- { ar_addmod((yyvsp[0].list)); }
- break;
-
- case 28:
-#line 126 "arparse.y"
- { ar_list(); }
- break;
-
- case 29:
-#line 131 "arparse.y"
- { ar_save(); }
- break;
-
- case 30:
-#line 138 "arparse.y"
- { ar_open((yyvsp[0].name),0); }
- break;
-
- case 31:
-#line 143 "arparse.y"
- { ar_open((yyvsp[0].name),1); }
- break;
-
- case 32:
-#line 149 "arparse.y"
- { ar_addlib((yyvsp[-1].name),(yyvsp[0].list)); }
- break;
-
- case 33:
-#line 153 "arparse.y"
- { ar_directory((yyvsp[-2].name), (yyvsp[-1].list), (yyvsp[0].name)); }
- break;
-
- case 34:
-#line 160 "arparse.y"
- { (yyval.name) = (yyvsp[0].name); }
- break;
-
- case 35:
-#line 161 "arparse.y"
- { (yyval.name) = 0; }
- break;
-
- case 36:
-#line 166 "arparse.y"
- { (yyval.list) = (yyvsp[-1].list); }
- break;
-
- case 37:
-#line 168 "arparse.y"
- { (yyval.list) = 0; }
- break;
-
- case 38:
-#line 173 "arparse.y"
- { struct list *n = (struct list *) malloc(sizeof(struct list));
- n->next = (yyvsp[-2].list);
- n->name = (yyvsp[0].name);
- (yyval.list) = n;
- }
- break;
-
- case 39:
-#line 178 "arparse.y"
- { (yyval.list) = 0; }
- break;
-
- case 42:
-#line 190 "arparse.y"
- { verbose = !verbose; }
- break;
-
-
- default: break;
- }
-
-/* Line 1126 of yacc.c. */
-#line 1327 "arparse.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 194 "arparse.y"
-
-
-static int
-yyerror (const char *x ATTRIBUTE_UNUSED)
-{
- extern int linenumber;
-
- printf (_("Syntax error in archive script, line %d\n"), linenumber + 1);
- return 0;
-}
-
diff --git a/binutils/arparse.h b/binutils/arparse.h
deleted file mode 100644
index 41044396e199..000000000000
--- a/binutils/arparse.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* 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 {
- NEWLINE = 258,
- VERBOSE = 259,
- FILENAME = 260,
- ADDLIB = 261,
- LIST = 262,
- ADDMOD = 263,
- CLEAR = 264,
- CREATE = 265,
- DELETE = 266,
- DIRECTORY = 267,
- END = 268,
- EXTRACT = 269,
- FULLDIR = 270,
- HELP = 271,
- QUIT = 272,
- REPLACE = 273,
- SAVE = 274,
- OPEN = 275
- };
-#endif
-/* Tokens. */
-#define NEWLINE 258
-#define VERBOSE 259
-#define FILENAME 260
-#define ADDLIB 261
-#define LIST 262
-#define ADDMOD 263
-#define CLEAR 264
-#define CREATE 265
-#define DELETE 266
-#define DIRECTORY 267
-#define END 268
-#define EXTRACT 269
-#define FULLDIR 270
-#define HELP 271
-#define QUIT 272
-#define REPLACE 273
-#define SAVE 274
-#define OPEN 275
-
-
-
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 37 "arparse.y"
-typedef union YYSTYPE {
- char *name;
-struct list *list ;
-
-} YYSTYPE;
-/* Line 1447 of yacc.c. */
-#line 84 "arparse.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/arparse.y b/binutils/arparse.y
index a7ea0157f411..2453b65a02e7 100644
--- a/binutils/arparse.y
+++ b/binutils/arparse.y
@@ -1,7 +1,7 @@
%{
/* arparse.y - Stange script language parser */
-/* Copyright 1992, 1993, 1995, 1997, 1999, 2002, 2003
+/* Copyright 1992, 1993, 1995, 1997, 1999, 2002, 2003, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -26,8 +26,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
#define DONTDECLARE_MALLOC
+#include "sysdep.h"
#include "bfd.h"
-#include "bucomm.h"
#include "arsup.h"
extern int verbose;
extern int yylex (void);
diff --git a/binutils/arsup.c b/binutils/arsup.c
index 189490b307b6..98f93a637e52 100644
--- a/binutils/arsup.c
+++ b/binutils/arsup.c
@@ -1,6 +1,6 @@
/* arsup.c - Archive support for MRI compatibility
Copyright 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003,
- 2004 Free Software Foundation, Inc.
+ 2004, 2007 Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -25,11 +25,12 @@
This file looks after requests from arparse.y, to provide the MRI
style librarian command syntax + 1 word LIST. */
+#include "sysdep.h"
#include "bfd.h"
-#include "arsup.h"
#include "libiberty.h"
-#include "bucomm.h"
#include "filenames.h"
+#include "bucomm.h"
+#include "arsup.h"
static void map_over_list
(bfd *, void (*function) (bfd *, bfd *), struct list *);
@@ -51,10 +52,10 @@ map_over_list (bfd *arch, void (*function) (bfd *, bfd *), struct list *list)
{
bfd *next;
- head = arch->next;
+ head = arch->archive_next;
while (head != NULL)
{
- next = head->next;
+ next = head->archive_next;
function (head, (bfd *) NULL);
head = next;
}
@@ -73,7 +74,7 @@ map_over_list (bfd *arch, void (*function) (bfd *, bfd *), struct list *list)
bfd_boolean found = FALSE;
bfd *prev = arch;
- for (head = arch->next; head; head = head->next)
+ for (head = arch->archive_next; head; head = head->archive_next)
{
if (head->filename != NULL
&& FILENAME_CMP (ptr->name, head->filename) == 0)
@@ -197,7 +198,7 @@ ar_open (char *name, int t)
while (element)
{
*ptr = element;
- ptr = &element->next;
+ ptr = &element->archive_next;
element = bfd_openr_next_archived_file (ibfd, element);
}
}
@@ -213,9 +214,9 @@ ar_addlib_doer (bfd *abfd, bfd *prev)
{
/* Add this module to the output bfd. */
if (prev != NULL)
- prev->next = abfd->next;
+ prev->archive_next = abfd->archive_next;
- abfd->next = obfd->archive_head;
+ abfd->archive_next = obfd->archive_head;
obfd->archive_head = abfd;
}
@@ -261,7 +262,7 @@ ar_addmod (struct list *list)
}
else
{
- abfd->next = obfd->archive_head;
+ abfd->archive_next = obfd->archive_head;
obfd->archive_head = abfd;
}
list = list->next;
@@ -298,13 +299,13 @@ ar_delete (struct list *list)
{
if (FILENAME_CMP(member->filename, list->name) == 0)
{
- *prev = member->next;
+ *prev = member->archive_next;
found = 1;
}
else
- prev = &(member->next);
+ prev = &(member->archive_next);
- member = member->next;
+ member = member->archive_next;
}
if (!found)
@@ -372,15 +373,15 @@ ar_replace (struct list *list)
else
{
*prev = abfd;
- abfd->next = member->next;
+ abfd->archive_next = member->archive_next;
found = 1;
}
}
else
{
- prev = &(member->next);
+ prev = &(member->archive_next);
}
- member = member->next;
+ member = member->archive_next;
}
if (!found)
@@ -423,7 +424,7 @@ ar_list (void)
for (abfd = obfd->archive_head;
abfd != (bfd *)NULL;
- abfd = abfd->next)
+ abfd = abfd->archive_next)
ar_directory_doer (abfd, (bfd *) NULL);
}
}
@@ -462,7 +463,7 @@ ar_extract (struct list *list)
found = 1;
}
- member = member->next;
+ member = member->archive_next;
}
if (!found)
diff --git a/binutils/bin2c.c b/binutils/bin2c.c
new file mode 100644
index 000000000000..b83f02d3c98e
--- /dev/null
+++ b/binutils/bin2c.c
@@ -0,0 +1,105 @@
+/* bin2c.c -- dump binary file in hex format
+ Copyright 2007 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 "sysdep.h"
+#include "bfd.h"
+#include "bucomm.h"
+
+#if !defined O_BINARY && defined _O_BINARY
+ /* For MSC-compatible compilers. */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+
+#ifdef __BEOS__
+ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+
+#if O_BINARY
+# ifndef __DJGPP__
+# define setmode _setmode
+# define fileno(_fp) _fileno (_fp)
+# endif /* not DJGPP */
+# define SET_BINARY(_f) \
+ do { if (!isatty (_f)) setmode (_f, O_BINARY); } while (0)
+#else
+# define SET_BINARY(f) (void) 0
+# define O_BINARY 0
+# define O_TEXT 0
+#endif /* O_BINARY */
+
+int
+main (int argc, char *argv[])
+{
+ int c;
+ int i;
+
+#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);
+
+ if (argc != 1)
+ {
+ int ishelp = 0;
+ int isvers = 0;
+ FILE *stream;
+
+ if (argc == 2 && argv[1][0] == '-')
+ {
+ const char *opt = &argv[1][1];
+ if (*opt == '-')
+ ++opt;
+ ishelp = *opt == 'h' || *opt == 'H';
+ isvers = *opt == 'v' || *opt == 'V';
+ }
+
+ if (isvers)
+ print_version ("bin2c");
+
+ stream = ishelp ? stdout : stderr;
+ fprintf (stream, _("Usage: %s < input_file > output_file\n"), argv[0]);
+ fprintf (stream, _("Prints bytes from stdin in hex format.\n"));
+ exit (!ishelp);
+ }
+
+ SET_BINARY (fileno (stdin));
+
+ i = 0;
+ while ((c = getc (stdin)) != EOF)
+ {
+ printf ("0x%02x,", c);
+ if (++i == 16)
+ {
+ printf ("\n");
+ i = 0;
+ }
+ }
+ if (i != 0)
+ printf ("\n");
+
+ exit (0);
+}
diff --git a/binutils/binemul.c b/binutils/binemul.c
index 7dac32dd1153..83740d0d6ac2 100644
--- a/binutils/binemul.c
+++ b/binutils/binemul.c
@@ -58,7 +58,7 @@ ar_emul_default_append (bfd **after_bfd, char *file_name,
AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name);
AR_EMUL_APPEND_PRINT_VERBOSE (verbose, file_name);
- (*after_bfd)->next = temp;
+ (*after_bfd)->archive_next = temp;
return TRUE;
}
@@ -84,7 +84,7 @@ ar_emul_default_replace (bfd **after_bfd, char *file_name,
AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name);
AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name);
- (*after_bfd)->next = temp;
+ (*after_bfd)->archive_next = temp;
return TRUE;
}
diff --git a/binutils/binemul.h b/binutils/binemul.h
index 53bbbd2de204..c5d8c78f7fb8 100644
--- a/binutils/binemul.h
+++ b/binutils/binemul.h
@@ -1,5 +1,5 @@
/* Binutils emulation layer.
- Copyright 2002, 2003 Free Software Foundation, Inc.
+ Copyright 2002, 2003, 2007 Free Software Foundation, Inc.
Written by Tom Rix, Red Hat Inc.
This file is part of GNU Binutils.
@@ -21,6 +21,7 @@
#ifndef BINEMUL_H
#define BINEMUL_H
+#include "sysdep.h"
#include "bfd.h"
#include "bucomm.h"
diff --git a/binutils/bucomm.c b/binutils/bucomm.c
index 03a4d2873e2a..a4c11f0cfa0d 100644
--- a/binutils/bucomm.c
+++ b/binutils/bucomm.c
@@ -1,5 +1,6 @@
/* bucomm.c -- Bin Utils COMmon code.
- Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2003
+ Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000, 2001, 2002,
+ 2003, 2006, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -22,16 +23,16 @@
/* We might put this in a library someday so it could be dynamically
loaded, but for now it's not necessary. */
+#include "sysdep.h"
#include "bfd.h"
-#include "bfdver.h"
#include "libiberty.h"
-#include "bucomm.h"
#include "filenames.h"
#include "libbfd.h"
#include <sys/stat.h>
#include <time.h> /* ctime, maybe time_t */
#include <assert.h>
+#include "bucomm.h"
#ifndef HAVE_TIME_T_IN_TIME_H
#ifndef HAVE_TIME_T_IN_TYPES_H
@@ -386,55 +387,103 @@ print_arelt_descr (FILE *file, bfd *abfd, bfd_boolean verbose)
fprintf (file, "%s\n", bfd_get_filename (abfd));
}
-/* Return the name of a temporary file in the same directory as FILENAME. */
+/* Return a path for a new temporary file in the same directory
+ as file PATH. */
-char *
-make_tempname (char *filename)
+static char *
+template_in_dir (const char *path)
{
- static char template[] = "stXXXXXX";
+#define template "stXXXXXX"
+ const char *slash = strrchr (path, '/');
char *tmpname;
- char *slash = strrchr (filename, '/');
+ size_t len;
#ifdef HAVE_DOS_BASED_FILE_SYSTEM
{
/* We could have foo/bar\\baz, or foo\\bar, or d:bar. */
- char *bslash = strrchr (filename, '\\');
+ char *bslash = strrchr (path, '\\');
+
if (slash == NULL || (bslash != NULL && bslash > slash))
slash = bslash;
- if (slash == NULL && filename[0] != '\0' && filename[1] == ':')
- slash = filename + 1;
+ if (slash == NULL && path[0] != '\0' && path[1] == ':')
+ slash = path + 1;
}
#endif
if (slash != (char *) NULL)
{
- char c;
+ len = slash - path;
+ tmpname = xmalloc (len + sizeof (template) + 2);
+ memcpy (tmpname, path, len);
- c = *slash;
- *slash = 0;
- tmpname = xmalloc (strlen (filename) + sizeof (template) + 2);
- strcpy (tmpname, filename);
#ifdef HAVE_DOS_BASED_FILE_SYSTEM
/* If tmpname is "X:", appending a slash will make it a root
directory on drive X, which is NOT the same as the current
directory on drive X. */
- if (tmpname[1] == ':' && tmpname[2] == '\0')
- strcat (tmpname, ".");
+ if (len == 2 && tmpname[1] == ':')
+ tmpname[len++] = '.';
#endif
- strcat (tmpname, "/");
- strcat (tmpname, template);
- mktemp (tmpname);
- *slash = c;
+ tmpname[len++] = '/';
}
else
{
tmpname = xmalloc (sizeof (template));
- strcpy (tmpname, template);
- mktemp (tmpname);
+ len = 0;
}
+
+ memcpy (tmpname + len, template, sizeof (template));
+ return tmpname;
+#undef template
+}
+
+/* Return the name of a created temporary file in the same directory
+ as FILENAME. */
+
+char *
+make_tempname (char *filename)
+{
+ char *tmpname = template_in_dir (filename);
+ int fd;
+
+#ifdef HAVE_MKSTEMP
+ fd = mkstemp (tmpname);
+#else
+ tmpname = mktemp (tmpname);
+ if (tmpname == NULL)
+ return NULL;
+ fd = open (tmpname, O_RDWR | O_CREAT | O_EXCL, 0600);
+#endif
+ if (fd == -1)
+ return NULL;
+ close (fd);
return tmpname;
}
+/* Return the name of a created temporary directory inside the
+ directory containing FILENAME. */
+
+char *
+make_tempdir (char *filename)
+{
+ char *tmpname = template_in_dir (filename);
+
+#ifdef HAVE_MKDTEMP
+ return mkdtemp (tmpname);
+#else
+ tmpname = mktemp (tmpname);
+ if (tmpname == NULL)
+ return NULL;
+#if defined (_WIN32) && !defined (__CYGWIN32__)
+ if (mkdir (tmpname) != 0)
+ return NULL;
+#else
+ if (mkdir (tmpname, 0700) != 0)
+ return NULL;
+#endif
+ return tmpname;
+#endif
+}
+
/* Parse a string into a VMA, with a fatal error if it can't be
parsed. */
diff --git a/binutils/bucomm.h b/binutils/bucomm.h
index 9f914adeb58c..95ed2ec2c3a7 100644
--- a/binutils/bucomm.h
+++ b/binutils/bucomm.h
@@ -1,6 +1,6 @@
/* bucomm.h -- binutils common include file.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -21,159 +21,6 @@
#ifndef _BUCOMM_H
#define _BUCOMM_H
-#include "ansidecl.h"
-#include <stdio.h>
-#include <sys/types.h>
-
-#include "config.h"
-#include "bin-bugs.h"
-
-#include <stdarg.h>
-
-#ifdef USE_BINARY_FOPEN
-#include "fopen-bin.h"
-#else
-#include "fopen-same.h"
-#endif
-
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#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_FCNTL_H
-#include <fcntl.h>
-#else
-#ifdef HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-#endif
-
-#if !HAVE_DECL_STPCPY
-extern char *stpcpy (char *, const char *);
-#endif
-
-#if !HAVE_DECL_STRSTR
-extern char *strstr ();
-#endif
-
-#ifdef HAVE_SBRK
-#if !HAVE_DECL_SBRK
-extern char *sbrk ();
-#endif
-#endif
-
-#if !HAVE_DECL_GETENV
-extern char *getenv ();
-#endif
-
-#if !HAVE_DECL_ENVIRON
-extern char **environ;
-#endif
-
-#if !HAVE_DECL_FPRINTF
-extern int fprintf (FILE *, const char *, ...);
-#endif
-
-#if !HAVE_DECL_SNPRINTF
-extern int snprintf(char *, size_t, const char *, ...);
-#endif
-
-#if !HAVE_DECL_VSNPRINTF
-extern int vsnprintf(char *, size_t, const char *, va_list);
-#endif
-
-#ifndef O_RDONLY
-#define O_RDONLY 0
-#endif
-
-#ifndef O_RDWR
-#define O_RDWR 2
-#endif
-
-#ifndef SEEK_SET
-#define SEEK_SET 0
-#endif
-#ifndef SEEK_CUR
-#define SEEK_CUR 1
-#endif
-#ifndef SEEK_END
-#define SEEK_END 2
-#endif
-
-#if 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
-
-/* Used by ar.c and objcopy.c. */
-#define BUFSIZE 8192
-
-/* bucomm.c */
-
/* Return the filename in a static buffer. */
const char *bfd_get_archive_filename (bfd *);
@@ -200,6 +47,7 @@ int display_info (void);
void print_arelt_descr (FILE *, bfd *, bfd_boolean);
char *make_tempname (char *);
+char *make_tempdir (char *);
bfd_vma parse_vma (const char *, const char *);
diff --git a/binutils/budemang.c b/binutils/budemang.c
deleted file mode 100644
index 55f10b785daf..000000000000
--- a/binutils/budemang.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* demangle.c -- A wrapper calling libiberty cplus_demangle
- Copyright 2002, 2003, 2004 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 "config.h"
-#include <stdlib.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#endif
-#include "bfd.h"
-#include "libiberty.h"
-#include "demangle.h"
-#include "budemang.h"
-
-/* Wrapper around cplus_demangle. Strips leading underscores and
- other such chars that would otherwise confuse the demangler. */
-
-char *
-demangle (bfd *abfd, const char *name)
-{
- char *res, *alloc;
- const char *pre, *suf;
- size_t pre_len;
-
- if (abfd != NULL && bfd_get_symbol_leading_char (abfd) == 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. */
- pre = name;
- while (*name == '.')
- ++name;
- pre_len = name - pre;
-
- alloc = NULL;
- suf = strchr (name, '@');
- if (suf != NULL)
- {
- alloc = xmalloc (suf - name + 1);
- memcpy (alloc, name, suf - name);
- alloc[suf - name] = '\0';
- name = alloc;
- }
-
- res = cplus_demangle (name, DMGL_ANSI | DMGL_PARAMS);
- if (res != NULL)
- {
- /* Now put back any suffix, or stripped dots. */
- if (pre_len != 0 || suf != NULL)
- {
- size_t len;
- size_t suf_len;
- char *final;
-
- if (alloc != NULL)
- free (alloc);
-
- len = strlen (res);
- if (suf == NULL)
- suf = res + len;
- suf_len = strlen (suf) + 1;
- final = xmalloc (pre_len + len + suf_len);
-
- memcpy (final, pre, pre_len);
- memcpy (final + pre_len, res, len);
- memcpy (final + pre_len + len, suf, suf_len);
- free (res);
- res = final;
- }
-
- return res;
- }
-
- if (alloc != NULL)
- free (alloc);
-
- return xstrdup (pre);
-}
diff --git a/binutils/budemang.h b/binutils/budemang.h
deleted file mode 100644
index 17df9f55ea7a..000000000000
--- a/binutils/budemang.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* demangle.h -- A wrapper calling libiberty cplus_demangle
- Copyright 2002, 2003 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. */
-#ifndef BUDEMANG_H
-#define BUDEMANG_H
-
-char *demangle (bfd *, const char *);
-
-#endif
diff --git a/binutils/coffdump.c b/binutils/coffdump.c
index 5ec23b43f62d..7b6ead4af388 100644
--- a/binutils/coffdump.c
+++ b/binutils/coffdump.c
@@ -1,5 +1,5 @@
/* Coff file dumper.
- Copyright 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003
+ Copyright 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -23,11 +23,12 @@
This module reads a type tree generated by coffgrok and prints
it out so we can test the grokker. */
+#include "sysdep.h"
#include "bfd.h"
#include "libiberty.h"
+#include "bucomm.h"
#include "coffgrok.h"
-#include "bucomm.h"
#include "getopt.h"
static int atnl;
@@ -462,7 +463,7 @@ show_usage (FILE *file, int status)
-v --version Display the program's version\n\
\n"));
- if (status == 0)
+ if (REPORT_BUGS_TO[0] && status == 0)
fprintf (file, _("Report bugs to %s\n"), REPORT_BUGS_TO);
exit (status);
diff --git a/binutils/coffgrok.c b/binutils/coffgrok.c
index a6c05b14d2ab..a1e89e1298ce 100644
--- a/binutils/coffgrok.c
+++ b/binutils/coffgrok.c
@@ -1,5 +1,5 @@
/* coffgrok.c
- Copyright 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2003, 2004
+ Copyright 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -26,13 +26,15 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
+#include "sysdep.h"
#include "bfd.h"
#include "libiberty.h"
-#include "bucomm.h"
#include "coff/internal.h"
#include "../bfd/libcoff.h"
+#include "bucomm.h"
#include "coffgrok.h"
+
static int lofile = 1;
static struct coff_scope *top_scope;
static struct coff_scope *file_scope;
diff --git a/binutils/config.in b/binutils/config.in
index 93d8e9528379..6183c3782e1f 100644
--- a/binutils/config.in
+++ b/binutils/config.in
@@ -8,7 +8,8 @@
/* Define to 1 if using `alloca.c'. */
#undef C_ALLOCA
-/* Define to 1 if NLS is requested */
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
#undef ENABLE_NLS
/* Suffix used for executables, if any. */
@@ -21,12 +22,6 @@
*/
#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
@@ -66,6 +61,9 @@
don't. */
#undef HAVE_DECL_VSNPRINTF
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
/* Does the platform use an executable suffix? */
#undef HAVE_EXECUTABLE_SUFFIX
@@ -75,60 +73,33 @@
/* Is fopen64 available? */
#undef HAVE_FOPEN64
-/* Define to 1 if you have the `getcwd' function. */
-#undef HAVE_GETCWD
-
/* Define to 1 if you have the `getc_unlocked' function. */
#undef HAVE_GETC_UNLOCKED
-/* 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
-
/* Does <utime.h> define struct utimbuf? */
#undef HAVE_GOOD_UTIME_H
+/* Define if you have the iconv() function. */
+#undef HAVE_ICONV
+
/* 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 `mkdtemp' function. */
+#undef HAVE_MKDTEMP
-/* Define to 1 if you have the `munmap' function. */
-#undef HAVE_MUNMAP
-
-/* 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 `mkstemp' function. */
+#undef HAVE_MKSTEMP
/* 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 `setmode' function. */
#undef HAVE_SETMODE
@@ -141,15 +112,6 @@
/* 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 `strcoll' function. */
#undef HAVE_STRCOLL
@@ -186,17 +148,12 @@
/* Define to 1 if you have the `utimes' function. */
#undef HAVE_UTIMES
-/* 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 as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
-/* Define to 1 if you have the `__argz_stringify' function. */
-#undef HAVE___ARGZ_STRINGIFY
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#undef LT_OBJDIR
/* Name of package */
#undef PACKAGE
@@ -250,18 +207,3 @@
/* Enable LFS */
#undef _LARGEFILE64_SOURCE
-
-/* 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/configure b/binutils/configure
index 2d8e0cb970cd..a10a8adcc054 100755
--- a/binutils/configure
+++ b/binutils/configure
@@ -241,6 +241,155 @@ IFS=" $as_nl"
$as_unset CDPATH
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+ ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<_LT_EOF
+$*
+_LT_EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+ if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+ then
+ break
+ fi
+ done
+ fi
+
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+ else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$ECHO" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ ECHO='print -r'
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+ else
+ # Try using printf.
+ ECHO='printf %s\n'
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "$0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ ECHO=echo
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
# Name of the host.
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
# so uname gets run too.
@@ -309,7 +458,7 @@ ac_includes_default="\
# 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 WARN_CFLAGS NO_WERROR YACC LEX LEXLIB LEX_OUTPUT_ROOT CPP EGREP ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT USE_INCLUDED_LIBINTL CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB INCLUDE_LOCALE_H GT_NO GT_YES MKINSTALLDIRS l MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT HDEFINES AR CC_FOR_BUILD EXEEXT_FOR_BUILD DEMANGLER_NAME NLMCONV_DEFS BUILD_NLMCONV BUILD_SRCONV BUILD_DLLTOOL DLLTOOL_DEFS BUILD_WINDRES BUILD_DLLWRAP BUILD_MISC OBJDUMP_DEFS EMULATION EMULATION_VECTOR datarootdir docdir htmldir LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir 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 LIBTOOL SED EGREP FGREP GREP LD DUMPBIN ac_ct_DUMPBIN NM LN_S AR ac_ct_AR RANLIB ac_ct_RANLIB lt_ECHO CPP WARN_CFLAGS NO_WERROR YACC LEX LEXLIB LEX_OUTPUT_ROOT USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT MKINSTALLDIRS MSGFMT MSGMERGE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT GENINSRC_NEVER_TRUE GENINSRC_NEVER_FALSE HDEFINES CC_FOR_BUILD EXEEXT_FOR_BUILD DEMANGLER_NAME ALLOCA LIBICONV LTLIBICONV NLMCONV_DEFS BUILD_NLMCONV BUILD_SRCONV BUILD_DLLTOOL DLLTOOL_DEFS BUILD_WINDRES BUILD_WINDMC BUILD_DLLWRAP BUILD_MISC BUILD_INSTALL_MISC OBJDUMP_DEFS EMULATION EMULATION_VECTOR datarootdir docdir htmldir LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -852,24 +1001,31 @@ Optional Features:
--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
+ --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-commonbfdlib build shared BFD/opcodes/libiberty library
- --enable-werror treat compile warnings as errors
- --enable-build-warnings Enable build-time compiler warnings
+ --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
+ --disable-rpath do not hardcode runtime library paths
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
--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-included-gettext use the GNU gettext library included here
+ --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
+ --without-libiconv-prefix don't search for libiconv in includedir and libdir
Some influential environment variables:
CC C compiler command
@@ -3072,1178 +3228,6 @@ 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 3870 "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 --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-commonbfdlib or --disable-commonbfdlib was given.
-if test "${enable_commonbfdlib+set}" = set; then
- enableval="$enable_commonbfdlib"
- case "${enableval}" in
- yes) commonbfdlib=true ;;
- no) commonbfdlib=false ;;
- *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for BFD commonbfdlib option" >&5
-echo "$as_me: error: bad value ${enableval} for BFD commonbfdlib option" >&2;}
- { (exit 1); exit 1; }; } ;;
-esac
-fi;
-
-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
-
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -4980,17 +3964,444 @@ _ACEOF
-for ac_prog in 'bison -y' byacc
+
+macro_version='2.1a'
+macro_revision='1.2435'
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Set options
+
+enable_dlopen=no
+
+
+enable_win32_dll=no
+
+
+# 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.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_shared=yes
+fi;
+
+
+
+
+
+
+
+
+# Check whether --enable-static 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.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_static=yes
+fi;
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+ withval="$with_pic"
+ pic_mode="$withval"
+else
+ pic_mode=default
+fi;
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+# Check whether --enable-fast-install 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.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_fast_install=yes
+fi;
+
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
+if test "${lt_cv_path_SED+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+
+fi
+
+SED=$lt_cv_path_SED
+
+echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+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 fgrep" >&5
+echo $ECHO_N "checking for fgrep... $ECHO_C" >&6
+if test "${ac_cv_prog_fgrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo 'ab*c' | (grep -F 'ab*c') >/dev/null 2>&1
+ then ac_cv_prog_fgrep='grep -F'
+ else ac_cv_prog_fgrep='fgrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_fgrep" >&5
+echo "${ECHO_T}$ac_cv_prog_fgrep" >&6
+ FGREP=$ac_cv_prog_fgrep
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# 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 $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $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.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ 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
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ 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 lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+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 BSD- or MS-compatible name lister (nm)" >&5
+echo $ECHO_N "checking for BSD- or MS-compatible name lister (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
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+ 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_YACC+set}" = set; then
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$YACC"; then
- ac_cv_prog_YACC="$YACC" # Let the user override the test.
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -4999,7 +4410,7 @@ do
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"
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -5008,30 +4419,31 @@ 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
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+echo "${ECHO_T}$DUMPBIN" >&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
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
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
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$LEX"; then
- ac_cv_prog_LEX="$LEX" # Let the user override the test.
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -5040,7 +4452,7 @@ do
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"
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -5049,257 +4461,681 @@ 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
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
+echo "${ECHO_T}$ac_ct_DUMPBIN" >&6
else
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
- test -n "$LEX" && break
+ test -n "$ac_ct_DUMPBIN" && break
done
-test -n "$LEX" || LEX=":"
+test -n "$ac_ct_DUMPBIN" || ac_ct_DUMPBIN=":"
-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
+ DUMPBIN=$ac_ct_DUMPBIN
+fi
+
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+echo $ECHO_N "checking the name lister ($NM) interface... $ECHO_C" >&6
+if test "${lt_cv_nm_interface+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
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:4499: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
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
+ (eval echo "\"\$as_me:4502: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:4505: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
+echo "${ECHO_T}$lt_cv_nm_interface" >&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: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+# 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
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # 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 all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`getconf ARG_MAX 2> /dev/null`
+ if test -n $lt_cv_sys_max_cmd_len; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
-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
+
+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
-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"
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+echo $ECHO_N "checking whether the shell understands some XSI constructs... $ECHO_C" >&6
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+echo "$as_me:$LINENO: result: $xsi_shell" >&5
+echo "${ECHO_T}$xsi_shell" >&6
+
+
+echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+echo $ECHO_N "checking whether the shell understands \"+=\"... $ECHO_C" >&6
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+echo "$as_me:$LINENO: result: $lt_shell_append" >&5
+echo "${ECHO_T}$lt_shell_append" >&6
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
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
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+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
- 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. */
+ 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
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
-/* 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
+
+
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
-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
+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
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
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
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+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_AR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="ar"
+ 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_AR" && ac_cv_prog_ac_ct_AR="false"
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
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
+ AR=$ac_ct_AR
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+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
- # 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
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
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; }; }
+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
-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
+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
-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
+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
- # 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
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $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
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_save_LIBS
-rm -f "${LEX_OUTPUT_ROOT}.c"
+ STRIP=$ac_ct_STRIP
+else
+ STRIP="$ac_cv_prog_STRIP"
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
+test -z "$STRIP" && STRIP=:
+
+
+
-fi
-fi
-if test "$LEX" = :; then
- LEX=${am_missing_run}flex
-fi
-ALL_LINGUAS="fr tr ja es sv da zh_CN ru ro rw zh_TW fi vi"
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
@@ -5380,6 +5216,533 @@ else
RANLIB="$ac_cv_prog_RANLIB"
fi
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
+else
+ echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# 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 && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$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.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line 5560 "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*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$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-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ 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
+ ;;
+sparc*-*solaris*)
+ # 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
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *) LD="${LD-ld} -64" ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -5615,21 +5978,6 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
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
@@ -5796,132 +6144,34 @@ _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. */
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
-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
+
+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
- 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
+$ac_includes_default
+#include <$ac_header>
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
@@ -5945,47 +6195,29 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_c_inline=$ac_kw; break
+ 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
-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
+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
- ;;
-esac
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
+fi
+done
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
+for ac_header in dlfcn.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -6046,98 +6278,1364 @@ 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
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+if test "${lt_cv_objdir+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;
-}
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
_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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ 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
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
-ac_cv_type_off_t=no
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+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
-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
- :
+
+
+
+
+
+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_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
-cat >>confdefs.h <<_ACEOF
-#define off_t long
-_ACEOF
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
fi
-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
+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
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6660: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:6664: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ fi
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ lt_prog_compiler_pic='-qnocommon'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6982: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:6986: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
+
+if test x"$lt_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
+if test "${lt_prog_compiler_static_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_static_works=yes
+ fi
+ else
+ lt_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
+
+if test x"$lt_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:7087: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:7091: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:7142: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:7146: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ fi
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ ld_shlibs=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ *)
+ tmp_sharedflag='-shared' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >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
+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
@@ -6151,51 +7649,55 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_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
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
fi
-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
+ 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 -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >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;
}
@@ -6222,65 +7724,277 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_working_alloca_h=yes
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
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
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_ALLOCA_H 1
-_ACEOF
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ fi
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
-fi
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
-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
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[012])
+ allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ ;;
+ esac
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ whole_archive_flag_spec=''
+ link_all_deplibs=yes
+ if test "$GCC" = yes ; then
+ if test "${lt_cv_apple_cc_single_mod+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
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi-module to the
+ # link flags.
+ echo "int foo(void){return 1;}" > conftest.c
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib ${wl}-single_module conftest.c
+ if test -f libconftest.dylib; then
+ lt_cv_apple_cc_single_mod=yes
+ rm libconftest.dylib
+ fi
+ rm conftest.$ac_ext
+ fi
+fi
-int
-main ()
-{
-char *p = (char *) alloca (1);
- ;
- return 0;
-}
+ output_verbose_link_cmd=echo
+ if test "X$lt_cv_apple_cc_single_mod" = Xyes ; then
+ archive_cmds='$CC -dynamiclib $single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $single_module -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ module_expsym_cmds='sed -e "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd=echo
+ archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`$ECHO $rpath/$soname` $verstring'
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ module_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat >conftest.$ac_ext <<_ACEOF
+int foo(void) {}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
@@ -6304,122 +8018,933 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_func_alloca_works=yes
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
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
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
-if test $ac_cv_func_alloca_works = yes; then
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_ALLOCA 1
-_ACEOF
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
-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.
+ *nto* | *qnx*)
+ ;;
-ALLOCA=alloca.$ac_objext
+ openbsd*)
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
-cat >>confdefs.h <<\_ACEOF
-#define C_ALLOCA 1
-_ACEOF
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
-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
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-_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*
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
-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
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > 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); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc=no
+ else
+ archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+withGCC=$GCC
+if test "$withGCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ if test "$host_cpu" = m68k; then
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ else
+ dynamic_linker=no
+ fi
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $withGCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
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;
}
@@ -6446,126 +8971,425 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir"; then
+ shlibpath_overrides_runpath=yes
+fi
+
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
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
-cat >>confdefs.h <<_ACEOF
-#define CRAY_STACKSEG_END $ac_func
-_ACEOF
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
- break
-fi
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
- done
-fi
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
-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 ();
- }
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
else
- return (&dummy > addr) ? 1 : -1;
-}
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
-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
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
-( exit $ac_status )
-ac_cv_c_stack_direction=-1
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
fi
-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
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+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
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
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>
+
+/* 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 dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (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
@@ -6579,122 +9403,41 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_header_compiler=yes
+ ac_cv_lib_dl_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ac_cv_lib_dl_dlopen=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
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
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
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
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
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
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 "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -6703,12 +9446,12 @@ _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.
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
+#define shl_load innocuous_shl_load
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
+ which can conflict with char shl_load (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
@@ -6718,7 +9461,7 @@ cat >>conftest.$ac_ext <<_ACEOF
# include <assert.h>
#endif
-#undef $ac_func
+#undef shl_load
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
@@ -6727,14 +9470,14 @@ 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 ();
+char shl_load ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
choke me
#else
-char (*f) () = $ac_func;
+char (*f) () = shl_load;
#endif
#ifdef __cplusplus
}
@@ -6743,7 +9486,7 @@ char (*f) () = $ac_func;
int
main ()
{
-return f != $ac_func;
+return f != shl_load;
;
return 0;
}
@@ -6770,239 +9513,53 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_func_shl_load=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_func_shl_load=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
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
else
- if test "$cross_compiling" = yes; then
- ac_cv_func_mmap_fixed_mapped=no
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+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 */
+/* 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 shl_load ();
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);
+shl_load ();
+ ;
+ return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
+rm -f conftest.$ac_objext 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
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -7016,132 +9573,31 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_header_compiler=yes
+ ac_cv_lib_dld_shl_load=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ac_cv_lib_dld_shl_load=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
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
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 "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -7150,12 +9606,12 @@ _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.
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
+#define dlopen innocuous_dlopen
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
+ which can conflict with char dlopen (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
@@ -7165,7 +9621,7 @@ cat >>conftest.$ac_ext <<_ACEOF
# include <assert.h>
#endif
-#undef $ac_func
+#undef dlopen
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
@@ -7174,14 +9630,14 @@ 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 ();
+char dlopen ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
choke me
#else
-char (*f) () = $ac_func;
+char (*f) () = dlopen;
#endif
#ifdef __cplusplus
}
@@ -7190,7 +9646,7 @@ char (*f) () = $ac_func;
int
main ()
{
-return f != $ac_func;
+return f != dlopen;
;
return 0;
}
@@ -7217,84 +9673,46 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_func_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_func_dlopen=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 "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+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
-
+char dlopen ();
int
main ()
{
-return f != $ac_func;
+dlopen ();
;
return 0;
}
@@ -7321,52 +9739,47 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_lib_dl_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_lib_dl_dlopen=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: `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 "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+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>
+
+/* 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 dlopen ();
int
main ()
{
-return LC_MESSAGES
+dlopen ();
;
return 0;
}
@@ -7393,85 +9806,54 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- am_cv_val_LC_MESSAGES=yes
+ ac_cv_lib_svld_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-am_cv_val_LC_MESSAGES=no
+ac_cv_lib_svld_dlopen=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: $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
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
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 "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+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
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
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>
+
+/* 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 dld_link ();
+int
+main ()
+{
+dld_link ();
+ ;
+ return 0;
+}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (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
@@ -7485,170 +9867,588 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_header_compiler=yes
+ ac_cv_lib_dld_dld_link=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
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
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
else
- ac_cpp_err=
+ enable_dlopen=no
fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cpp_err=yes
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 9939 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}
+_LT_EOF
+ 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); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 10039 "configure"
+#include "confdefs.h"
- ac_header_preproc=no
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}
+_LT_EOF
+ 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); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
+rm -fr conftest*
-# 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
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
;;
- 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
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+ echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+# 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-commonbfdlib or --disable-commonbfdlib was given.
+if test "${enable_commonbfdlib+set}" = set; then
+ enableval="$enable_commonbfdlib"
+ case "${enableval}" in
+ yes) commonbfdlib=true ;;
+ no) commonbfdlib=false ;;
+ *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for BFD commonbfdlib option" >&5
+echo "$as_me: error: bad value ${enableval} for BFD commonbfdlib option" >&2;}
+ { (exit 1); exit 1; }; } ;;
esac
-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
+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
+
+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
- 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
+ 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
-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
+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
- 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
+ if test -n "$LEX"; then
+ ac_cv_prog_LEX="$LEX" # Let the user override the test.
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $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
-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
+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 "$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
+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="-lintl $LIBS"
+LIBS="-lfl $LIBS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -7662,11 +10462,11 @@ 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 ();
+char yywrap ();
int
main ()
{
-bindtextdomain ();
+yywrap ();
;
return 0;
}
@@ -7693,36 +10493,47 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_lib_intl_bindtextdomain=yes
+ ac_cv_lib_fl_yywrap=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_intl_bindtextdomain=no
+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_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 "$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
- cat >conftest.$ac_ext <<_ACEOF
+ 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 ()
{
-return (int) gettext ("")
+yywrap ();
;
return 0;
}
@@ -7749,124 +10560,73 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- gt_cv_func_gettext_libintl=yes
+ ac_cv_lib_l_yywrap=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-gt_cv_func_gettext_libintl=no
+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: $gt_cv_func_gettext_libintl" >&5
-echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6
+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
-
- if test "$gt_cv_func_gettext_libc" = "yes" \
- || test "$gt_cv_func_gettext_libintl" = "yes"; then
+fi
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETTEXT 1
-_ACEOF
+fi
- # 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
+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
- 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
+ # 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: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5
+echo "$as_me: error: cannot find output from $LEX; giving up" >&2;}
+ { (exit 1); exit 1; }; }
fi
- if test "$MSGFMT" != "no"; then
+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
-for ac_func in dcgettext
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
+echo "$as_me:$LINENO: checking 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
- 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;
-}
+ # 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
@@ -7890,170 +10650,166 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_prog_lex_yytext_pointer=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
+LIBS=$ac_save_LIBS
+rm -f "${LEX_OUTPUT_ROOT}.c"
+
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
+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
-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 "$LEX" = :; then
+ LEX=${am_missing_run}flex
+fi
-if test -n "$GMSGFMT"; then
- echo "$as_me:$LINENO: result: $GMSGFMT" >&5
-echo "${ECHO_T}$GMSGFMT" >&6
-else
+ALL_LINGUAS="fr tr ja es sv da zh_CN ru ro rw zh_TW fi vi"
+# If we haven't got the data from the intl directory,
+# assume NLS is disabled.
+USE_NLS=no
+LIBINTL=
+LIBINTL_DEP=
+INCINTL=
+XGETTEXT=
+GMSGFMT=
+POSUB=
+
+if test -f ../intl/config.intl; then
+ . ../intl/config.intl
+fi
+echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
+if test x"$USE_NLS" != xyes; then
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
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+
+ echo "$as_me:$LINENO: checking for catalogs to be installed" >&5
+echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6
+ # Look for .po and .gmo files in the source directory.
+ CATALOGS=
+ XLINGUAS=
+ for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
+ # If there aren't any .gmo files the shell will give us the
+ # literal string "../path/to/srcdir/po/*.gmo" which has to be
+ # weeded out.
+ case "$cat" in *\**)
+ continue;;
+ esac
+ # The quadruple backslash is collapsed to a double backslash
+ # by the backticks, then collapsed again by the double quotes,
+ # leaving us with one backslash in the sed expression (right
+ # before the dot that mustn't act as a wildcard).
+ cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
+ lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
+ # The user is allowed to set LINGUAS to a list of languages to
+ # install catalogs for. If it's empty that means "all of them."
+ if test "x$LINGUAS" = x; then
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ else
+ case "$LINGUAS" in *$lang*)
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ ;;
+ esac
fi
done
- 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
+ LINGUAS="$XLINGUAS"
+ echo "$as_me:$LINENO: result: $LINGUAS" >&5
+echo "${ECHO_T}$LINGUAS" >&6
- 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
+ DATADIRNAME=share
+
+ INSTOBJEXT=.mo
+
+ GENCAT=gencat
+
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
+ MKINSTALLDIRS=
+ if test -n "$ac_aux_dir"; then
+ case "$ac_aux_dir" in
+ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+ esac
+ fi
+ if test -z "$MKINSTALLDIRS"; then
+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+ fi
+ 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
- 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.
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
@@ -8061,27 +10817,31 @@ 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.
- ;;
+ [\\/]* | ?:[\\/]*)
+ 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"
- ;;
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
esac
fi
MSGFMT="$ac_cv_path_MSGFMT"
-if test -n "$MSGFMT"; then
+if test "$MSGFMT" != ":"; then
echo "$as_me:$LINENO: result: $MSGFMT" >&5
echo "${ECHO_T}$MSGFMT" >&6
else
@@ -8089,7 +10849,7 @@ else
echo "${ECHO_T}no" >&6
fi
- # Extract the first word of "gmsgfmt", so it can be a program name with args.
+ # 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
@@ -8129,7 +10889,37 @@ else
echo "${ECHO_T}no" >&6
fi
- # Extract the first word of "xgettext", so it can be a program name with args.
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
@@ -8137,27 +10927,31 @@ 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.
- ;;
+ [\\/]* | ?:[\\/]*)
+ 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"
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
- ;;
+ ;;
esac
fi
XGETTEXT="$ac_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
+if test "$XGETTEXT" != ":"; then
echo "$as_me:$LINENO: result: $XGETTEXT" >&5
echo "${ECHO_T}$XGETTEXT" >&6
else
@@ -8165,282 +10959,103 @@ else
echo "${ECHO_T}no" >&6
fi
+ rm -f messages.po
- 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
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
else
- ac_cpp_err=
+ PATH_SEPARATOR=:
fi
-else
- ac_cpp_err=yes
+ rm -f conf$$.sh
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
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
+rm -f conf$$.file
-# 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
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; 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_MSGMERGE+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
;;
- 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
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
;;
esac
-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
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+echo "${ECHO_T}$MSGMERGE" >&6
else
- msgformat=xopen
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+ if test "$GMSGFMT" != ":"; then
+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+ echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6
+ GMSGFMT=":"
+ fi
+ 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 "$XGETTEXT" != ":"; then
+ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
+echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
+ XGETTEXT=":"
+ fi
+ rm -f messages.po
+ fi
+ ac_config_commands="$ac_config_commands default-1"
- 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
echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
@@ -8468,6 +11083,16 @@ fi
+
+if false; then
+ GENINSRC_NEVER_TRUE=
+ GENINSRC_NEVER_FALSE='#'
+else
+ GENINSRC_NEVER_TRUE='#'
+ GENINSRC_NEVER_FALSE=
+fi
+
+
if test -n "$EXEEXT"; then
cat >>confdefs.h <<\_ACEOF
@@ -8701,7 +11326,9 @@ esac
-for ac_header in string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h
+
+
+for ac_header in string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h limits.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
@@ -9386,6 +12013,202 @@ _ACEOF
fi
done
+echo "$as_me:$LINENO: checking for mkstemp" >&5
+echo $ECHO_N "checking for mkstemp... $ECHO_C" >&6
+if test "${ac_cv_func_mkstemp+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 mkstemp to an innocuous variant, in case <limits.h> declares mkstemp.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define mkstemp innocuous_mkstemp
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char mkstemp (); 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 mkstemp
+
+/* 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 mkstemp ();
+/* 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_mkstemp) || defined (__stub___mkstemp)
+choke me
+#else
+char (*f) () = mkstemp;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != mkstemp;
+ ;
+ 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_mkstemp=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_mkstemp=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_mkstemp" >&5
+echo "${ECHO_T}$ac_cv_func_mkstemp" >&6
+if test $ac_cv_func_mkstemp = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MKSTEMP 1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for mkdtemp" >&5
+echo $ECHO_N "checking for mkdtemp... $ECHO_C" >&6
+if test "${ac_cv_func_mkdtemp+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 mkdtemp to an innocuous variant, in case <limits.h> declares mkdtemp.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define mkdtemp innocuous_mkdtemp
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char mkdtemp (); 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 mkdtemp
+
+/* 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 mkdtemp ();
+/* 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_mkdtemp) || defined (__stub___mkdtemp)
+choke me
+#else
+char (*f) () = mkdtemp;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != mkdtemp;
+ ;
+ 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_mkdtemp=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_mkdtemp=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_mkdtemp" >&5
+echo "${ECHO_T}$ac_cv_func_mkdtemp" >&6
+if test $ac_cv_func_mkdtemp = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MKDTEMP 1
+_ACEOF
+
+fi
+
# Check whether fopen64 is available and whether _LARGEFILE64_SOURCE
# needs to be defined for it
@@ -10660,15 +13483,944 @@ if test -n "$enable_targets"; then
done
fi
+if test "${ac_cv_header_iconv_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for iconv.h" >&5
+echo $ECHO_N "checking for iconv.h... $ECHO_C" >&6
+if test "${ac_cv_header_iconv_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_iconv_h" >&5
+echo "${ECHO_T}$ac_cv_header_iconv_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking iconv.h usability" >&5
+echo $ECHO_N "checking iconv.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 <iconv.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 iconv.h presence" >&5
+echo $ECHO_N "checking iconv.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 <iconv.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: iconv.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: iconv.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: iconv.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: iconv.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: iconv.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: iconv.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: iconv.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: iconv.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: iconv.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: iconv.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: iconv.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: iconv.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: iconv.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: iconv.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: iconv.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: iconv.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 iconv.h" >&5
+echo $ECHO_N "checking for iconv.h... $ECHO_C" >&6
+if test "${ac_cv_header_iconv_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_iconv_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_iconv_h" >&5
+echo "${ECHO_T}$ac_cv_header_iconv_h" >&6
+
+fi
+
+
+
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+
+
+# 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;
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+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 "${acl_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
+ acl_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 "$acl_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
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_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 "${acl_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
+ acl_cv_prog_gnu_ld=yes
+else
+ acl_cv_prog_gnu_ld=no
+fi
+fi
+echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+ echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6
+if test "${acl_cv_rpath+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+
+fi
+echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+echo "${ECHO_T}$acl_cv_rpath" >&6
+ wl="$acl_cv_wl"
+ libext="$acl_cv_libext"
+ shlibext="$acl_cv_shlibext"
+ hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ hardcode_direct="$acl_cv_hardcode_direct"
+ hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ # Check whether --enable-rpath or --disable-rpath was given.
+if test "${enable_rpath+set}" = set; then
+ enableval="$enable_rpath"
+ :
+else
+ enable_rpath=yes
+fi;
+
+
+
+
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix or --without-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then
+ withval="$with_libiconv_prefix"
+
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/lib"
+ fi
+ fi
+
+fi;
+ LIBICONV=
+ LTLIBICONV=
+ INCICONV=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='iconv '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ if test $use_additional = yes; then
+ if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+ found_dir="$additional_libdir"
+ found_so="$additional_libdir/lib$name.$shlibext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ else
+ if test -f "$additional_libdir/lib$name.$libext"; then
+ found_dir="$additional_libdir"
+ found_a="$additional_libdir/lib$name.$libext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+ found_dir="$dir"
+ found_so="$dir/lib$name.$shlibext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ else
+ if test -f "$dir/lib$name.$libext"; then
+ found_dir="$dir"
+ found_a="$dir/lib$name.$libext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$hardcode_direct" = yes; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+ fi
+ if test "$hardcode_minus_L" != no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */lib | */lib/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$additional_libdir" != "X/usr/lib"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+ done
+ fi
+
+
+
+
+
+
+
+ am_save_CPPFLAGS="$CPPFLAGS"
+
+ for element in $INCICONV; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+
+ echo "$as_me:$LINENO: checking for iconv" >&5
+echo $ECHO_N "checking for iconv... $ECHO_C" >&6
+if test "${am_cv_func_iconv+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ 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 <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ 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_func_iconv=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
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ 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 <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ 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_lib_iconv=yes
+ am_cv_func_iconv=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="$am_save_LIBS"
+ fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+echo "${ECHO_T}$am_cv_func_iconv" >&6
+ if test "$am_cv_func_iconv" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ICONV 1
+_ACEOF
+
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $LIBICONV" >&5
+echo "${ECHO_T}$LIBICONV" >&6
+ else
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+
+
+
+ if test "$am_cv_func_iconv" = yes; then
+ echo "$as_me:$LINENO: checking for iconv declaration" >&5
+echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6
+ if test "${am_cv_proto_iconv+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 <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+
+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
+ am_cv_proto_iconv_arg1=""
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+am_cv_proto_iconv_arg1="const"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
+fi
+
+ am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ echo "$as_me:$LINENO: result: ${ac_t:-
+ }$am_cv_proto_iconv" >&5
+echo "${ECHO_T}${ac_t:-
+ }$am_cv_proto_iconv" >&6
+
+cat >>confdefs.h <<_ACEOF
+#define ICONV_CONST $am_cv_proto_iconv_arg1
+_ACEOF
+
+ fi
+
+
all_targets=false
BUILD_NLMCONV=
NLMCONV_DEFS=
BUILD_SRCONV=
BUILD_DLLTOOL=
DLLTOOL_DEFS=
+DLLTOOL_DEFAULT=
BUILD_WINDRES=
+BUILD_WINDMC=
BUILD_DLLWRAP=
BUILD_MISC=
+BUILD_INSTALL_MISC=
OBJDUMP_DEFS=
for targ in $target $canon_targets
@@ -10678,6 +14430,7 @@ do
BUILD_NLMCONV='$(NLMCONV_PROG)$(EXEEXT)'
BUILD_SRCONV='$(SRCONV_PROG)'
NLMCONV_DEFS="-DNLMCONV_I386 -DNLMCONV_ALPHA -DNLMCONV_POWERPC -DNLMCONV_SPARC"
+ BUILD_MISC="${BUILD_MISC} "'bin2c$(EXEEXT_FOR_BUILD)'
else
case $targ in
i[3-7]86*-*-netware*)
@@ -10703,27 +14456,65 @@ do
case $targ in
arm-epoc-pe*)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM_EPOC"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_EPOC -DDLLTOOL_ARM"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+ ;;
+ arm-wince-pe* | arm-*-wince)
+ BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM_WINCE"
+ fi
+ DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_WINCE -DDLLTOOL_ARM"
+ BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
;;
- arm-*-pe* | arm-*-wince)
+ arm-*-pe*)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
;;
thumb-*-pe*)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+ ;;
+ x86_64-*-mingw*)
+ BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MX86_64"
+ fi
+ DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MX86_64"
+ BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+ BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)'
;;
i[3-7]86-*-pe* | i[3-7]86-*-cygwin* | i[3-7]86-*-mingw32** | i[3-7]86-*-netbsdpe*)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)'
;;
i[3-7]86-*-interix)
BUILD_DLLTOOL='$(DLLTOOL_PROG)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386"
;;
powerpc*-aix5.[01])
@@ -10733,36 +14524,72 @@ do
;;
powerpc*-*-pe* | powerpc*-*-cygwin*)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_PPC"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_PPC"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+ ;;
+ powerpc*-*-linux* | powerpc*-*-elf*)
+ BUILD_INSTALL_MISC="${BUILD_INSTALL_MISC} embedspu"
;;
sh*-*-pe)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_SH"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_SH"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+ ;;
+ spu-*-*)
+ BUILD_MISC="${BUILD_MISC} "'bin2c$(EXEEXT_FOR_BUILD)'
;;
mips*-*-pe)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MIPS"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MIPS"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
;;
mcore-*-pe)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MCORE"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
;;
mcore-*-elf)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MCORE_ELF"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE_ELF"
;;
+ mep-*)
+ OBJDUMP_DEFS="-DSKIP_ZEROES=256 -DSKIP_ZEROES_AT_END=0"
+ ;;
esac
fi
done
+DLLTOOL_DEFS="$DLLTOOL_DEFS $DLLTOOL_DEFAULT"
+
if test "${with_windres+set}" = set; then
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
fi
+if test "${with_windmc+set}" = set; then
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+fi
+
+
+
@@ -10818,7 +14645,6 @@ done
ac_config_files="$ac_config_files Makefile doc/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
@@ -10931,6 +14757,13 @@ 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
+if test -z "${GENINSRC_NEVER_TRUE}" && test -z "${GENINSRC_NEVER_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"GENINSRC_NEVER\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"GENINSRC_NEVER\" 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
@@ -11366,6 +15199,254 @@ cat >>$CONFIG_STATUS <<_ACEOF
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+ ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+ # from automake.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+
_ACEOF
@@ -11379,7 +15460,8 @@ do
"doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
"po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;;
"depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
- "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
+ "libtool" ) CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
"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;}
@@ -11516,55 +15598,65 @@ 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,@LIBTOOL@,$LIBTOOL,;t t
+s,@SED@,$SED,;t t
+s,@EGREP@,$EGREP,;t t
+s,@FGREP@,$FGREP,;t t
+s,@GREP@,$GREP,;t t
+s,@LD@,$LD,;t t
+s,@DUMPBIN@,$DUMPBIN,;t t
+s,@ac_ct_DUMPBIN@,$ac_ct_DUMPBIN,;t t
+s,@NM@,$NM,;t t
s,@LN_S@,$LN_S,;t t
+s,@AR@,$AR,;t t
+s,@ac_ct_AR@,$ac_ct_AR,;t t
s,@RANLIB@,$RANLIB,;t t
s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s,@LIBTOOL@,$LIBTOOL,;t t
+s,@lt_ECHO@,$lt_ECHO,;t t
+s,@CPP@,$CPP,;t t
s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t
s,@NO_WERROR@,$NO_WERROR,;t t
s,@YACC@,$YACC,;t t
s,@LEX@,$LEX,;t t
s,@LEXLIB@,$LEXLIB,;t t
s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t
-s,@CPP@,$CPP,;t t
-s,@EGREP@,$EGREP,;t t
-s,@ALLOCA@,$ALLOCA,;t t
s,@USE_NLS@,$USE_NLS,;t t
-s,@MSGFMT@,$MSGFMT,;t t
-s,@GMSGFMT@,$GMSGFMT,;t t
+s,@LIBINTL@,$LIBINTL,;t t
+s,@LIBINTL_DEP@,$LIBINTL_DEP,;t t
+s,@INCINTL@,$INCINTL,;t t
s,@XGETTEXT@,$XGETTEXT,;t t
-s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t
+s,@GMSGFMT@,$GMSGFMT,;t t
+s,@POSUB@,$POSUB,;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,@GENCAT@,$GENCAT,;t t
+s,@CATOBJEXT@,$CATOBJEXT,;t t
s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
-s,@l@,$l,;t t
+s,@MSGFMT@,$MSGFMT,;t t
+s,@MSGMERGE@,$MSGMERGE,;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,@GENINSRC_NEVER_TRUE@,$GENINSRC_NEVER_TRUE,;t t
+s,@GENINSRC_NEVER_FALSE@,$GENINSRC_NEVER_FALSE,;t t
s,@HDEFINES@,$HDEFINES,;t t
-s,@AR@,$AR,;t t
s,@CC_FOR_BUILD@,$CC_FOR_BUILD,;t t
s,@EXEEXT_FOR_BUILD@,$EXEEXT_FOR_BUILD,;t t
s,@DEMANGLER_NAME@,$DEMANGLER_NAME,;t t
+s,@ALLOCA@,$ALLOCA,;t t
+s,@LIBICONV@,$LIBICONV,;t t
+s,@LTLIBICONV@,$LTLIBICONV,;t t
s,@NLMCONV_DEFS@,$NLMCONV_DEFS,;t t
s,@BUILD_NLMCONV@,$BUILD_NLMCONV,;t t
s,@BUILD_SRCONV@,$BUILD_SRCONV,;t t
s,@BUILD_DLLTOOL@,$BUILD_DLLTOOL,;t t
s,@DLLTOOL_DEFS@,$DLLTOOL_DEFS,;t t
s,@BUILD_WINDRES@,$BUILD_WINDRES,;t t
+s,@BUILD_WINDMC@,$BUILD_WINDMC,;t t
s,@BUILD_DLLWRAP@,$BUILD_DLLWRAP,;t t
s,@BUILD_MISC@,$BUILD_MISC,;t t
+s,@BUILD_INSTALL_MISC@,$BUILD_INSTALL_MISC,;t t
s,@OBJDUMP_DEFS@,$OBJDUMP_DEFS,;t t
s,@EMULATION@,$EMULATION,;t t
s,@EMULATION_VECTOR@,$EMULATION_VECTOR,;t t
@@ -12255,11 +16347,656 @@ echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
done
done
;;
- default )
-case "x$CONFIG_FILES" in
-*) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;;
+ libtool )
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# 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, a copy can be downloaded from
+# http://www.gnu.org/copyleft/gpl.html, or by writing to the Free
+# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+_LT_EOF
esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1+=\$2"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1=\$$1\$2"
+}
+_LT_EOF
+ ;;
+ esac
+
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
;;
+ default-1 )
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ GMOFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
esac
done
_ACEOF
diff --git a/binutils/configure.in b/binutils/configure.in
index 10afc5374411..19aaabc8678d 100644
--- a/binutils/configure.in
+++ b/binutils/configure.in
@@ -11,7 +11,9 @@ BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[ ]*\([^ ]*\)[ ]*).*/\1/p' < ${
changequote([,])dnl
AM_INIT_AUTOMAKE(binutils, ${BFD_VERSION})
-AM_PROG_LIBTOOL
+AC_PROG_CC
+AC_GNU_SOURCE
+AC_PROG_LIBTOOL
AC_ARG_ENABLE(targets,
[ --enable-targets alternative target configurations],
@@ -40,16 +42,15 @@ if test -z "$host" ; then
AC_MSG_ERROR(Unrecognized host system type; please check config.sub.)
fi
-AC_PROG_CC
-AC_GNU_SOURCE
-
AC_PROG_YACC
AM_PROG_LEX
ALL_LINGUAS="fr tr ja es sv da zh_CN ru ro rw zh_TW fi vi"
-CY_GNU_GETTEXT
+ZW_GNU_GETTEXT_SISTER_DIR
+AM_PO_SUBDIRS
AM_MAINTAINER_MODE
+AM_CONDITIONAL(GENINSRC_NEVER, false)
AC_EXEEXT
if test -n "$EXEEXT"; then
AC_DEFINE(HAVE_EXECUTABLE_SUFFIX, 1,
@@ -79,10 +80,16 @@ case "${host}" in
esac
AC_SUBST(DEMANGLER_NAME)
-AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h)
+AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h limits.h sys/param.h)
AC_HEADER_SYS_WAIT
AC_FUNC_ALLOCA
AC_CHECK_FUNCS(sbrk utimes setmode getc_unlocked strcoll)
+AC_CHECK_FUNC([mkstemp],
+ AC_DEFINE([HAVE_MKSTEMP], 1,
+ [Define to 1 if you have the `mkstemp' function.]))
+AC_CHECK_FUNC([mkdtemp],
+ AC_DEFINE([HAVE_MKDTEMP], 1,
+ [Define to 1 if you have the `mkdtemp' function.]))
# Check whether fopen64 is available and whether _LARGEFILE64_SOURCE
# needs to be defined for it
@@ -193,15 +200,21 @@ if test -n "$enable_targets"; then
done
fi
+AC_CHECK_HEADER(iconv.h)
+AM_ICONV
+
all_targets=false
BUILD_NLMCONV=
NLMCONV_DEFS=
BUILD_SRCONV=
BUILD_DLLTOOL=
DLLTOOL_DEFS=
+DLLTOOL_DEFAULT=
BUILD_WINDRES=
+BUILD_WINDMC=
BUILD_DLLWRAP=
BUILD_MISC=
+BUILD_INSTALL_MISC=
OBJDUMP_DEFS=
for targ in $target $canon_targets
@@ -211,6 +224,7 @@ do
BUILD_NLMCONV='$(NLMCONV_PROG)$(EXEEXT)'
BUILD_SRCONV='$(SRCONV_PROG)'
NLMCONV_DEFS="-DNLMCONV_I386 -DNLMCONV_ALPHA -DNLMCONV_POWERPC -DNLMCONV_SPARC"
+ BUILD_MISC="${BUILD_MISC} "'bin2c$(EXEEXT_FOR_BUILD)'
else
case $targ in
changequote(,)dnl
@@ -238,31 +252,69 @@ changequote([,])dnl
case $targ in
arm-epoc-pe*)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM_EPOC"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_EPOC -DDLLTOOL_ARM"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
;;
- arm-*-pe* | arm-*-wince)
+ arm-wince-pe* | arm-*-wince)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM_WINCE"
+ fi
+ DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_WINCE -DDLLTOOL_ARM"
+ BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+ ;;
+ arm-*-pe*)
+ BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
;;
thumb-*-pe*)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+ ;;
+ x86_64-*-mingw*)
+ BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MX86_64"
+ fi
+ DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MX86_64"
+ BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+ BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)'
;;
changequote(,)dnl
i[3-7]86-*-pe* | i[3-7]86-*-cygwin* | i[3-7]86-*-mingw32** | i[3-7]86-*-netbsdpe*)
changequote([,])dnl
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)'
;;
changequote(,)dnl
i[3-7]86-*-interix)
changequote([,])dnl
BUILD_DLLTOOL='$(DLLTOOL_PROG)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386"
;;
changequote(,)dnl
@@ -274,44 +326,80 @@ changequote([,])dnl
;;
powerpc*-*-pe* | powerpc*-*-cygwin*)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_PPC"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_PPC"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+ ;;
+ powerpc*-*-linux* | powerpc*-*-elf*)
+ BUILD_INSTALL_MISC="${BUILD_INSTALL_MISC} embedspu"
;;
sh*-*-pe)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_SH"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_SH"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+ ;;
+ spu-*-*)
+ BUILD_MISC="${BUILD_MISC} "'bin2c$(EXEEXT_FOR_BUILD)'
;;
mips*-*-pe)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MIPS"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MIPS"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
;;
mcore-*-pe)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MCORE"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE"
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
;;
mcore-*-elf)
BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+ if test -z "$DLLTOOL_DEFAULT"; then
+ DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MCORE_ELF"
+ fi
DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE_ELF"
;;
+ mep-*)
+ OBJDUMP_DEFS="-DSKIP_ZEROES=256 -DSKIP_ZEROES_AT_END=0"
+ ;;
esac
fi
done
+DLLTOOL_DEFS="$DLLTOOL_DEFS $DLLTOOL_DEFAULT"
+
if test "${with_windres+set}" = set; then
BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
fi
+if test "${with_windmc+set}" = set; then
+ BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+fi
+
AC_SUBST(NLMCONV_DEFS)
AC_SUBST(BUILD_NLMCONV)
AC_SUBST(BUILD_SRCONV)
AC_SUBST(BUILD_DLLTOOL)
AC_SUBST(DLLTOOL_DEFS)
AC_SUBST(BUILD_WINDRES)
+AC_SUBST(BUILD_WINDMC)
AC_SUBST(BUILD_DLLWRAP)
AC_SUBST(BUILD_MISC)
+AC_SUBST(BUILD_INSTALL_MISC)
AC_SUBST(OBJDUMP_DEFS)
AC_DEFINE_UNQUOTED(TARGET, "${target}", [Configured target name.])
@@ -351,9 +439,4 @@ AC_SUBST(datarootdir)
AC_SUBST(docdir)
AC_SUBST(htmldir)
-AC_OUTPUT(Makefile doc/Makefile po/Makefile.in:po/Make-in,
-[
-case "x$CONFIG_FILES" in
-*) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;;
-esac
-])
+AC_OUTPUT(Makefile doc/Makefile po/Makefile.in:po/Make-in)
diff --git a/binutils/cxxfilt.c b/binutils/cxxfilt.c
index a8ec43ba1180..bed0537e477e 100644
--- a/binutils/cxxfilt.c
+++ b/binutils/cxxfilt.c
@@ -1,6 +1,6 @@
/* Demangler for GNU C++ - main program
Copyright 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+ 2000, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.uucp)
Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling
Modified by Satish Pai (pai@apollo.hp.com) for HP demangling
@@ -22,13 +22,13 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "config.h"
+#include "sysdep.h"
#include "bfd.h"
-#include "bucomm.h"
#include "libiberty.h"
#include "demangle.h"
#include "getopt.h"
#include "safe-ctype.h"
+#include "bucomm.h"
static int flags = DMGL_PARAMS | DMGL_ANSI | DMGL_VERBOSE;
static int strip_underscore = TARGET_PREPENDS_UNDERSCORE;
@@ -115,6 +115,8 @@ Options are:\n\
Demangled names are displayed to stdout.\n\
If a name cannot be demangled it is just echoed to stdout.\n\
If no names are provided on the command line, stdin is read.\n");
+ if (REPORT_BUGS_TO[0] && status == 0)
+ fprintf (stream, _("Report bugs to %s.\n"), REPORT_BUGS_TO);
exit (status);
}
diff --git a/binutils/debug.c b/binutils/debug.c
index 07d38acfe402..1cc518e6295d 100644
--- a/binutils/debug.c
+++ b/binutils/debug.c
@@ -1,5 +1,5 @@
/* debug.c -- Handle generic debugging information.
- Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003
+ Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2007
Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>.
@@ -26,11 +26,9 @@
this was writing a converter from stabs to HP IEEE-695 debugging
format. */
-#include <stdio.h>
+#include "sysdep.h"
#include <assert.h>
-
#include "bfd.h"
-#include "bucomm.h"
#include "libiberty.h"
#include "debug.h"
diff --git a/binutils/deflex.c b/binutils/deflex.c
deleted file mode 100644
index 9051c907b592..000000000000
--- a/binutils/deflex.c
+++ /dev/null
@@ -1,1881 +0,0 @@
-/* A lexical scanner generated by flex */
-
-/* Scanner skeleton version:
- * $Header: /cvs/src/src/binutils/Attic/deflex.c,v 1.1.16.1 2006/04/16 18:36:40 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 41
-#define YY_END_OF_BUFFER 42
-static yyconst short int yy_accept[198] =
- { 0,
- 0, 0, 42, 41, 34, 36, 35, 33, 41, 28,
- 41, 31, 40, 38, 27, 32, 37, 39, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 0, 29, 28, 0, 30, 31, 27,
- 32, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 12, 6, 28, 7,
- 28, 28, 28, 28, 28, 28, 28, 28, 1, 28,
-
- 28, 28, 16, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 17, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 14, 28, 28, 28, 19, 21, 28, 28, 28,
- 28, 28, 28, 18, 9, 28, 10, 28, 28, 2,
- 28, 28, 15, 28, 28, 28, 28, 11, 13, 28,
- 5, 28, 28, 22, 28, 8, 28, 28, 28, 28,
- 28, 28, 20, 4, 28, 28, 28, 24, 28, 26,
- 28, 3, 28, 28, 23, 25, 0
-
- } ;
-
-static yyconst int yy_ec[256] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 5, 1, 6, 1, 7, 1, 1, 8, 1,
- 1, 9, 1, 10, 7, 11, 12, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 7, 14, 1,
- 15, 1, 7, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 7, 26, 27, 28, 29, 30, 31,
- 7, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 1, 1, 1, 1, 7, 1, 22, 22, 22, 22,
-
- 22, 22, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 22,
- 7, 7, 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, 1, 1, 1, 1
- } ;
-
-static yyconst int yy_meta[41] =
- { 0,
- 1, 1, 2, 1, 1, 1, 3, 1, 1, 1,
- 1, 4, 5, 1, 1, 4, 6, 6, 6, 6,
- 6, 6, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
- } ;
-
-static yyconst short int yy_base[205] =
- { 0,
- 0, 0, 229, 230, 230, 230, 230, 230, 222, 0,
- 219, 0, 230, 230, 0, 0, 230, 0, 209, 195,
- 24, 186, 202, 14, 197, 186, 27, 188, 198, 25,
- 197, 196, 184, 209, 230, 0, 206, 230, 0, 0,
- 0, 0, 180, 27, 178, 178, 27, 193, 178, 183,
- 189, 179, 177, 175, 178, 185, 182, 183, 170, 181,
- 165, 164, 170, 173, 172, 159, 174, 171, 170, 158,
- 156, 156, 151, 152, 149, 161, 34, 145, 160, 145,
- 146, 154, 157, 147, 141, 139, 0, 0, 138, 0,
- 139, 135, 137, 135, 135, 29, 149, 140, 0, 136,
-
- 139, 145, 0, 136, 139, 132, 132, 30, 132, 135,
- 138, 129, 119, 118, 126, 116, 122, 119, 115, 115,
- 124, 127, 109, 112, 121, 119, 106, 111, 108, 106,
- 0, 106, 103, 112, 99, 91, 97, 99, 95, 88,
- 99, 0, 93, 103, 94, 0, 0, 97, 91, 87,
- 90, 84, 83, 0, 0, 95, 0, 97, 80, 0,
- 92, 91, 0, 78, 70, 91, 74, 0, 0, 82,
- 0, 89, 88, 0, 84, 0, 82, 85, 83, 69,
- 66, 56, 0, 0, 39, 36, 35, 0, 44, 0,
- 43, 0, 40, 39, 0, 0, 230, 67, 71, 77,
-
- 83, 85, 91, 95
- } ;
-
-static yyconst short int yy_def[205] =
- { 0,
- 197, 1, 197, 197, 197, 197, 197, 197, 198, 199,
- 200, 201, 197, 197, 202, 203, 197, 204, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 198, 197, 199, 200, 197, 201, 202,
- 203, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 0, 197, 197, 197,
-
- 197, 197, 197, 197
- } ;
-
-static yyconst short int yy_nxt[271] =
- { 0,
- 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 4, 15, 16, 17, 18, 10, 19, 20, 21,
- 22, 10, 10, 23, 24, 10, 25, 26, 27, 10,
- 28, 29, 30, 31, 10, 32, 33, 10, 10, 10,
- 45, 49, 50, 53, 46, 57, 65, 69, 58, 59,
- 100, 117, 128, 118, 129, 66, 54, 70, 60, 196,
- 195, 194, 193, 192, 191, 190, 101, 34, 34, 34,
- 34, 34, 34, 36, 36, 36, 36, 37, 37, 37,
- 37, 37, 37, 39, 189, 39, 39, 39, 39, 40,
- 40, 41, 188, 41, 41, 41, 41, 42, 187, 186,
-
- 42, 185, 184, 183, 182, 181, 180, 179, 178, 177,
- 176, 175, 174, 173, 172, 171, 170, 169, 168, 167,
- 166, 165, 164, 163, 162, 161, 160, 159, 158, 157,
- 156, 155, 154, 153, 152, 151, 150, 149, 148, 147,
- 146, 145, 144, 143, 142, 141, 140, 139, 138, 137,
- 136, 135, 134, 133, 132, 131, 130, 127, 126, 125,
- 124, 123, 122, 121, 120, 119, 116, 115, 114, 113,
- 112, 111, 110, 109, 108, 107, 106, 105, 104, 103,
- 102, 99, 98, 97, 96, 95, 94, 93, 92, 91,
- 90, 89, 88, 87, 86, 85, 84, 83, 82, 81,
-
- 80, 79, 78, 77, 76, 75, 74, 73, 72, 71,
- 68, 67, 64, 38, 35, 63, 62, 61, 56, 55,
- 52, 51, 48, 47, 44, 43, 38, 35, 197, 3,
- 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197, 197, 197
- } ;
-
-static yyconst short int yy_chk[271] =
- { 0,
- 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,
- 21, 24, 24, 27, 21, 30, 44, 47, 30, 30,
- 77, 96, 108, 96, 108, 44, 27, 47, 30, 194,
- 193, 191, 189, 187, 186, 185, 77, 198, 198, 198,
- 198, 198, 198, 199, 199, 199, 199, 200, 200, 200,
- 200, 200, 200, 201, 182, 201, 201, 201, 201, 202,
- 202, 203, 181, 203, 203, 203, 203, 204, 180, 179,
-
- 204, 178, 177, 175, 173, 172, 170, 167, 166, 165,
- 164, 162, 161, 159, 158, 156, 153, 152, 151, 150,
- 149, 148, 145, 144, 143, 141, 140, 139, 138, 137,
- 136, 135, 134, 133, 132, 130, 129, 128, 127, 126,
- 125, 124, 123, 122, 121, 120, 119, 118, 117, 116,
- 115, 114, 113, 112, 111, 110, 109, 107, 106, 105,
- 104, 102, 101, 100, 98, 97, 95, 94, 93, 92,
- 91, 89, 86, 85, 84, 83, 82, 81, 80, 79,
- 78, 76, 75, 74, 73, 72, 71, 70, 69, 68,
- 67, 66, 65, 64, 63, 62, 61, 60, 59, 58,
-
- 57, 56, 55, 54, 53, 52, 51, 50, 49, 48,
- 46, 45, 43, 37, 34, 33, 32, 31, 29, 28,
- 26, 25, 23, 22, 20, 19, 11, 9, 3, 197,
- 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197, 197, 197
- } ;
-
-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 "deflex.l"
-#define INITIAL 0
-#line 2 "deflex.l"
-
-/* Copyright 1995, 1997, 1998, 1999, 2002, 2003, 2004, 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. */
-
-
-/* Contributed by Steve Chamberlain: sac@cygnus.com */
-
-#define DONTDECLARE_MALLOC
-#include "libiberty.h"
-#include "defparse.h"
-#include "dlltool.h"
-
-#define YY_NO_UNPUT
-
-int linenumber;
-
-#line 523 "deflex.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 35 "deflex.l"
-
-#line 687 "deflex.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 >= 198 )
- 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] != 230 );
-
-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 36 "deflex.l"
-{ return NAME;}
- YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 37 "deflex.l"
-{ return LIBRARY;}
- YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 38 "deflex.l"
-{ return DESCRIPTION;}
- YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 39 "deflex.l"
-{ return STACKSIZE;}
- YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 40 "deflex.l"
-{ return HEAPSIZE;}
- YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 41 "deflex.l"
-{ return CODE;}
- YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 42 "deflex.l"
-{ return DATA;}
- YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 43 "deflex.l"
-{ return SECTIONS;}
- YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 44 "deflex.l"
-{ return EXPORTS;}
- YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 45 "deflex.l"
-{ return IMPORTS;}
- YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 46 "deflex.l"
-{ return VERSIONK;}
- YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 47 "deflex.l"
-{ return BASE;}
- YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 48 "deflex.l"
-{ return CONSTANT; }
- YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 49 "deflex.l"
-{ return NONAME; }
- YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 50 "deflex.l"
-{ return PRIVATE; }
- YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 51 "deflex.l"
-{ return READ;}
- YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 52 "deflex.l"
-{ return WRITE;}
- YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 53 "deflex.l"
-{ return EXECUTE;}
- YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 54 "deflex.l"
-{ return SHARED;}
- YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 55 "deflex.l"
-{ return NONSHARED;}
- YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 56 "deflex.l"
-{ return SINGLE;}
- YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 57 "deflex.l"
-{ return MULTIPLE;}
- YY_BREAK
-case 23:
-YY_RULE_SETUP
-#line 58 "deflex.l"
-{ return INITINSTANCE;}
- YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 59 "deflex.l"
-{ return INITGLOBAL;}
- YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 60 "deflex.l"
-{ return TERMINSTANCE;}
- YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 61 "deflex.l"
-{ return TERMGLOBAL;}
- YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 63 "deflex.l"
-{ yylval.number = strtol (yytext,0,0);
- return NUMBER; }
- YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 66 "deflex.l"
-{
- yylval.id = xstrdup (yytext);
- return ID;
- }
- YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 71 "deflex.l"
-{
- yylval.id = xstrdup (yytext+1);
- yylval.id[yyleng-2] = 0;
- return ID;
- }
- YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 77 "deflex.l"
-{
- yylval.id = xstrdup (yytext+1);
- yylval.id[yyleng-2] = 0;
- return ID;
- }
- YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 82 "deflex.l"
-{ }
- YY_BREAK
-case 32:
-YY_RULE_SETUP
-#line 83 "deflex.l"
-{ }
- YY_BREAK
-case 33:
-YY_RULE_SETUP
-#line 84 "deflex.l"
-{ }
- YY_BREAK
-case 34:
-YY_RULE_SETUP
-#line 85 "deflex.l"
-{ }
- YY_BREAK
-case 35:
-YY_RULE_SETUP
-#line 86 "deflex.l"
-{ }
- YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 87 "deflex.l"
-{ linenumber ++ ;}
- YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 88 "deflex.l"
-{ return '=';}
- YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 89 "deflex.l"
-{ return '.';}
- YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 90 "deflex.l"
-{ return '@';}
- YY_BREAK
-case 40:
-YY_RULE_SETUP
-#line 91 "deflex.l"
-{ return ',';}
- YY_BREAK
-case 41:
-YY_RULE_SETUP
-#line 92 "deflex.l"
-ECHO;
- YY_BREAK
-#line 987 "deflex.c"
-case YY_STATE_EOF(INITIAL):
- yyterminate();
-
- 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 >= 198 )
- 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 >= 198 )
- 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 == 197);
-
- 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 92 "deflex.l"
-
-#ifndef yywrap
-/* Needed for lex, though not flex. */
-int yywrap(void) { return 1; }
-#endif
diff --git a/binutils/defparse.c b/binutils/defparse.c
deleted file mode 100644
index de34ae0cfc1f..000000000000
--- a/binutils/defparse.c
+++ /dev/null
@@ -1,1777 +0,0 @@
-/* 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 {
- NAME = 258,
- LIBRARY = 259,
- DESCRIPTION = 260,
- STACKSIZE = 261,
- HEAPSIZE = 262,
- CODE = 263,
- DATA = 264,
- SECTIONS = 265,
- EXPORTS = 266,
- IMPORTS = 267,
- VERSIONK = 268,
- BASE = 269,
- CONSTANT = 270,
- READ = 271,
- WRITE = 272,
- EXECUTE = 273,
- SHARED = 274,
- NONSHARED = 275,
- NONAME = 276,
- PRIVATE = 277,
- SINGLE = 278,
- MULTIPLE = 279,
- INITINSTANCE = 280,
- INITGLOBAL = 281,
- TERMINSTANCE = 282,
- TERMGLOBAL = 283,
- ID = 284,
- NUMBER = 285
- };
-#endif
-/* Tokens. */
-#define NAME 258
-#define LIBRARY 259
-#define DESCRIPTION 260
-#define STACKSIZE 261
-#define HEAPSIZE 262
-#define CODE 263
-#define DATA 264
-#define SECTIONS 265
-#define EXPORTS 266
-#define IMPORTS 267
-#define VERSIONK 268
-#define BASE 269
-#define CONSTANT 270
-#define READ 271
-#define WRITE 272
-#define EXECUTE 273
-#define SHARED 274
-#define NONSHARED 275
-#define NONAME 276
-#define PRIVATE 277
-#define SINGLE 278
-#define MULTIPLE 279
-#define INITINSTANCE 280
-#define INITGLOBAL 281
-#define TERMINSTANCE 282
-#define TERMGLOBAL 283
-#define ID 284
-#define NUMBER 285
-
-
-
-
-/* Copy the first part of user declarations. */
-#line 1 "defparse.y"
- /* defparse.y - parser for .def files */
-
-/* Copyright 1995, 1997, 1998, 1999, 2001, 2004
- 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 "bfd.h"
-#include "bucomm.h"
-#include "dlltool.h"
-
-
-/* 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 27 "defparse.y"
-typedef union YYSTYPE {
- char *id;
- int number;
-} YYSTYPE;
-/* Line 196 of yacc.c. */
-#line 176 "defparse.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 188 "defparse.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 38
-/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 114
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 35
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 23
-/* YYNRULES -- Number of rules. */
-#define YYNRULES 68
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 98
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
-#define YYUNDEFTOK 2
-#define YYMAXUTOK 285
-
-#define YYTRANSLATE(YYX) \
- ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
-static const 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, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 33, 2, 31, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 32, 2, 2, 34, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
- YYRHS. */
-static const unsigned char yyprhs[] =
-{
- 0, 0, 3, 6, 8, 12, 17, 20, 23, 27,
- 31, 34, 37, 40, 43, 46, 51, 52, 55, 63,
- 66, 68, 76, 84, 90, 96, 102, 108, 112, 116,
- 119, 121, 124, 128, 130, 132, 133, 136, 137, 139,
- 141, 143, 145, 147, 149, 151, 153, 154, 156, 157,
- 159, 160, 162, 163, 165, 169, 170, 173, 174, 177,
- 182, 183, 187, 188, 189, 193, 195, 197, 199
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yysigned_char yyrhs[] =
-{
- 36, 0, -1, 36, 37, -1, 37, -1, 3, 52,
- 55, -1, 4, 52, 55, 56, -1, 11, 38, -1,
- 5, 29, -1, 6, 30, 46, -1, 7, 30, 46,
- -1, 8, 44, -1, 9, 44, -1, 10, 42, -1,
- 12, 40, -1, 13, 30, -1, 13, 30, 31, 30,
- -1, -1, 38, 39, -1, 29, 54, 53, 49, 48,
- 50, 51, -1, 40, 41, -1, 41, -1, 29, 32,
- 29, 31, 29, 31, 29, -1, 29, 32, 29, 31,
- 29, 31, 30, -1, 29, 32, 29, 31, 29, -1,
- 29, 32, 29, 31, 30, -1, 29, 31, 29, 31,
- 29, -1, 29, 31, 29, 31, 30, -1, 29, 31,
- 29, -1, 29, 31, 30, -1, 42, 43, -1, 43,
- -1, 29, 44, -1, 44, 45, 47, -1, 47, -1,
- 33, -1, -1, 33, 30, -1, -1, 16, -1, 17,
- -1, 18, -1, 19, -1, 20, -1, 23, -1, 24,
- -1, 15, -1, -1, 21, -1, -1, 9, -1, -1,
- 22, -1, -1, 29, -1, 29, 31, 29, -1, -1,
- 34, 30, -1, -1, 32, 29, -1, 32, 29, 31,
- 29, -1, -1, 14, 32, 30, -1, -1, -1, 56,
- 45, 57, -1, 25, -1, 26, -1, 27, -1, 28,
- -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const unsigned char yyrline[] =
-{
- 0, 44, 44, 45, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 64, 66, 70, 74,
- 75, 79, 80, 81, 82, 83, 84, 85, 86, 90,
- 91, 95, 99, 100, 104, 105, 107, 108, 112, 113,
- 114, 115, 116, 117, 118, 122, 123, 127, 128, 132,
- 133, 137, 138, 141, 142, 148, 152, 153, 157, 158,
- 164, 167, 168, 171, 173, 177, 178, 179, 180
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
- First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-static const char *const yytname[] =
-{
- "$end", "error", "$undefined", "NAME", "LIBRARY", "DESCRIPTION",
- "STACKSIZE", "HEAPSIZE", "CODE", "DATA", "SECTIONS", "EXPORTS",
- "IMPORTS", "VERSIONK", "BASE", "CONSTANT", "READ", "WRITE", "EXECUTE",
- "SHARED", "NONSHARED", "NONAME", "PRIVATE", "SINGLE", "MULTIPLE",
- "INITINSTANCE", "INITGLOBAL", "TERMINSTANCE", "TERMGLOBAL", "ID",
- "NUMBER", "'.'", "'='", "','", "'@'", "$accept", "start", "command",
- "explist", "expline", "implist", "impline", "seclist", "secline",
- "attr_list", "opt_comma", "opt_number", "attr", "opt_CONSTANT",
- "opt_NONAME", "opt_DATA", "opt_PRIVATE", "opt_name", "opt_ordinal",
- "opt_equal_name", "opt_base", "option_list", "option", 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, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 46, 61, 44, 64
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const unsigned char yyr1[] =
-{
- 0, 35, 36, 36, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 38, 38, 39, 40,
- 40, 41, 41, 41, 41, 41, 41, 41, 41, 42,
- 42, 43, 44, 44, 45, 45, 46, 46, 47, 47,
- 47, 47, 47, 47, 47, 48, 48, 49, 49, 50,
- 50, 51, 51, 52, 52, 52, 53, 53, 54, 54,
- 54, 55, 55, 56, 56, 57, 57, 57, 57
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const unsigned char yyr2[] =
-{
- 0, 2, 2, 1, 3, 4, 2, 2, 3, 3,
- 2, 2, 2, 2, 2, 4, 0, 2, 7, 2,
- 1, 7, 7, 5, 5, 5, 5, 3, 3, 2,
- 1, 2, 3, 1, 1, 0, 2, 0, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 3, 0, 2, 0, 2, 4,
- 0, 3, 0, 0, 3, 1, 1, 1, 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 char yydefact[] =
-{
- 0, 55, 55, 0, 0, 0, 0, 0, 0, 16,
- 0, 0, 0, 3, 53, 62, 62, 7, 37, 37,
- 38, 39, 40, 41, 42, 43, 44, 10, 33, 11,
- 0, 12, 30, 6, 0, 13, 20, 14, 1, 2,
- 0, 0, 4, 63, 0, 8, 9, 34, 0, 31,
- 29, 60, 17, 0, 0, 19, 0, 54, 0, 5,
- 36, 32, 0, 57, 27, 28, 0, 15, 61, 0,
- 58, 0, 48, 0, 0, 65, 66, 67, 68, 64,
- 0, 56, 47, 46, 25, 26, 23, 24, 59, 45,
- 50, 0, 49, 52, 21, 22, 51, 18
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yysigned_char yydefgoto[] =
-{
- -1, 12, 13, 33, 52, 35, 36, 31, 32, 27,
- 48, 45, 28, 90, 83, 93, 97, 15, 72, 63,
- 42, 59, 79
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -26
-static const yysigned_char yypact[] =
-{
- 32, -12, -12, 17, -8, 33, -4, -4, 35, -26,
- 36, 37, 21, -26, 38, 48, 48, -26, 39, 39,
- -26, -26, -26, -26, -26, -26, -26, -15, -26, -15,
- -4, 35, -26, 41, -25, 36, -26, 40, -26, -26,
- 44, 34, -26, -26, 45, -26, -26, -26, -4, -15,
- -26, 42, -26, -19, 47, -26, 49, -26, 50, 22,
- -26, -26, 52, 43, 51, -26, 53, -26, -26, 26,
- 54, 56, 57, 27, 29, -26, -26, -26, -26, -26,
- 58, -26, -26, 68, -26, -26, 59, -26, -26, -26,
- 79, 31, -26, 46, -26, -26, -26, -26
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const yysigned_char yypgoto[] =
-{
- -26, -26, 77, -26, -26, -26, 60, -26, 61, -7,
- 55, 72, 62, -26, -26, -26, -26, 91, -26, -26,
- 78, -26, -26
-};
-
-/* 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 -36
-static const yysigned_char yytable[] =
-{
- 29, -35, -35, -35, -35, -35, 53, 54, -35, -35,
- 64, 65, 20, 21, 22, 23, 24, 14, 47, 25,
- 26, 38, 18, 49, 1, 2, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 1, 2, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 17, -35, -35, -35,
- -35, 75, 76, 77, 78, 47, 84, 85, 86, 87,
- 94, 95, 41, 19, 30, 34, 58, 37, 96, 40,
- 51, 56, 44, 57, 62, 60, 66, 71, 82, 67,
- 68, 70, 73, 89, 74, 80, 81, 88, 92, 39,
- 91, 46, 50, 16, 43, 55, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 61, 0, 0, 0, 69
-};
-
-static const yysigned_char yycheck[] =
-{
- 7, 16, 17, 18, 19, 20, 31, 32, 23, 24,
- 29, 30, 16, 17, 18, 19, 20, 29, 33, 23,
- 24, 0, 30, 30, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 29, 25, 26, 27,
- 28, 25, 26, 27, 28, 33, 29, 30, 29, 30,
- 29, 30, 14, 30, 29, 29, 32, 30, 22, 31,
- 29, 31, 33, 29, 32, 30, 29, 34, 21, 30,
- 30, 29, 31, 15, 31, 31, 30, 29, 9, 12,
- 31, 19, 31, 2, 16, 35, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 48, -1, -1, -1, 59
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
-static const unsigned char yystos[] =
-{
- 0, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 36, 37, 29, 52, 52, 29, 30, 30,
- 16, 17, 18, 19, 20, 23, 24, 44, 47, 44,
- 29, 42, 43, 38, 29, 40, 41, 30, 0, 37,
- 31, 14, 55, 55, 33, 46, 46, 33, 45, 44,
- 43, 29, 39, 31, 32, 41, 31, 29, 32, 56,
- 30, 47, 32, 54, 29, 30, 29, 30, 30, 45,
- 29, 34, 53, 31, 31, 25, 26, 27, 28, 57,
- 31, 30, 21, 49, 29, 30, 29, 30, 29, 15,
- 48, 31, 9, 50, 29, 30, 22, 51
-};
-
-#define yyerrok (yyerrstatus = 0)
-#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY (-2)
-#define YYEOF 0
-
-#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
-#define YYERROR goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror. This remains here temporarily
- to ease the transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. */
-
-#define YYFAIL goto yyerrlab
-
-#define YYRECOVERING() (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value) \
-do \
- if (yychar == YYEMPTY && yylen == 1) \
- { \
- yychar = (Token); \
- yylval = (Value); \
- yytoken = YYTRANSLATE (yychar); \
- YYPOPSTACK; \
- 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 4:
-#line 49 "defparse.y"
- { def_name ((yyvsp[-1].id), (yyvsp[0].number)); }
- break;
-
- case 5:
-#line 50 "defparse.y"
- { def_library ((yyvsp[-2].id), (yyvsp[-1].number)); }
- break;
-
- case 7:
-#line 52 "defparse.y"
- { def_description ((yyvsp[0].id));}
- break;
-
- case 8:
-#line 53 "defparse.y"
- { def_stacksize ((yyvsp[-1].number), (yyvsp[0].number));}
- break;
-
- case 9:
-#line 54 "defparse.y"
- { def_heapsize ((yyvsp[-1].number), (yyvsp[0].number));}
- break;
-
- case 10:
-#line 55 "defparse.y"
- { def_code ((yyvsp[0].number));}
- break;
-
- case 11:
-#line 56 "defparse.y"
- { def_data ((yyvsp[0].number));}
- break;
-
- case 14:
-#line 59 "defparse.y"
- { def_version ((yyvsp[0].number),0);}
- break;
-
- case 15:
-#line 60 "defparse.y"
- { def_version ((yyvsp[-2].number),(yyvsp[0].number));}
- break;
-
- case 18:
-#line 71 "defparse.y"
- { def_exports ((yyvsp[-6].id), (yyvsp[-5].id), (yyvsp[-4].number), (yyvsp[-3].number), (yyvsp[-2].number), (yyvsp[-1].number), (yyvsp[0].number));}
- break;
-
- case 21:
-#line 79 "defparse.y"
- { def_import ((yyvsp[-6].id),(yyvsp[-4].id),(yyvsp[-2].id),(yyvsp[0].id), 0); }
- break;
-
- case 22:
-#line 80 "defparse.y"
- { def_import ((yyvsp[-6].id),(yyvsp[-4].id),(yyvsp[-2].id), 0,(yyvsp[0].number)); }
- break;
-
- case 23:
-#line 81 "defparse.y"
- { def_import ((yyvsp[-4].id),(yyvsp[-2].id), 0,(yyvsp[0].id), 0); }
- break;
-
- case 24:
-#line 82 "defparse.y"
- { def_import ((yyvsp[-4].id),(yyvsp[-2].id), 0, 0,(yyvsp[0].number)); }
- break;
-
- case 25:
-#line 83 "defparse.y"
- { def_import ( 0,(yyvsp[-4].id),(yyvsp[-2].id),(yyvsp[0].id), 0); }
- break;
-
- case 26:
-#line 84 "defparse.y"
- { def_import ( 0,(yyvsp[-4].id),(yyvsp[-2].id), 0,(yyvsp[0].number)); }
- break;
-
- case 27:
-#line 85 "defparse.y"
- { def_import ( 0,(yyvsp[-2].id), 0,(yyvsp[0].id), 0); }
- break;
-
- case 28:
-#line 86 "defparse.y"
- { def_import ( 0,(yyvsp[-2].id), 0, 0,(yyvsp[0].number)); }
- break;
-
- case 31:
-#line 95 "defparse.y"
- { def_section ((yyvsp[-1].id),(yyvsp[0].number));}
- break;
-
- case 36:
-#line 107 "defparse.y"
- { (yyval.number)=(yyvsp[0].number);}
- break;
-
- case 37:
-#line 108 "defparse.y"
- { (yyval.number)=-1;}
- break;
-
- case 38:
-#line 112 "defparse.y"
- { (yyval.number) = 1; }
- break;
-
- case 39:
-#line 113 "defparse.y"
- { (yyval.number) = 2; }
- break;
-
- case 40:
-#line 114 "defparse.y"
- { (yyval.number) = 4; }
- break;
-
- case 41:
-#line 115 "defparse.y"
- { (yyval.number) = 8; }
- break;
-
- case 42:
-#line 116 "defparse.y"
- { (yyval.number) = 0; }
- break;
-
- case 43:
-#line 117 "defparse.y"
- { (yyval.number) = 0; }
- break;
-
- case 44:
-#line 118 "defparse.y"
- { (yyval.number) = 0; }
- break;
-
- case 45:
-#line 122 "defparse.y"
- {(yyval.number)=1;}
- break;
-
- case 46:
-#line 123 "defparse.y"
- {(yyval.number)=0;}
- break;
-
- case 47:
-#line 127 "defparse.y"
- {(yyval.number)=1;}
- break;
-
- case 48:
-#line 128 "defparse.y"
- {(yyval.number)=0;}
- break;
-
- case 49:
-#line 132 "defparse.y"
- { (yyval.number) = 1; }
- break;
-
- case 50:
-#line 133 "defparse.y"
- { (yyval.number) = 0; }
- break;
-
- case 51:
-#line 137 "defparse.y"
- { (yyval.number) = 1; }
- break;
-
- case 52:
-#line 138 "defparse.y"
- { (yyval.number) = 0; }
- break;
-
- case 53:
-#line 141 "defparse.y"
- { (yyval.id) =(yyvsp[0].id); }
- break;
-
- case 54:
-#line 143 "defparse.y"
- {
- char *name = xmalloc (strlen ((yyvsp[-2].id)) + 1 + strlen ((yyvsp[0].id)) + 1);
- sprintf (name, "%s.%s", (yyvsp[-2].id), (yyvsp[0].id));
- (yyval.id) = name;
- }
- break;
-
- case 55:
-#line 148 "defparse.y"
- { (yyval.id)=""; }
- break;
-
- case 56:
-#line 152 "defparse.y"
- { (yyval.number)=(yyvsp[0].number);}
- break;
-
- case 57:
-#line 153 "defparse.y"
- { (yyval.number)=-1;}
- break;
-
- case 58:
-#line 157 "defparse.y"
- { (yyval.id) = (yyvsp[0].id); }
- break;
-
- case 59:
-#line 159 "defparse.y"
- {
- char *name = xmalloc (strlen ((yyvsp[-2].id)) + 1 + strlen ((yyvsp[0].id)) + 1);
- sprintf (name, "%s.%s", (yyvsp[-2].id), (yyvsp[0].id));
- (yyval.id) = name;
- }
- break;
-
- case 60:
-#line 164 "defparse.y"
- { (yyval.id) = 0; }
- break;
-
- case 61:
-#line 167 "defparse.y"
- { (yyval.number)= (yyvsp[0].number);}
- break;
-
- case 62:
-#line 168 "defparse.y"
- { (yyval.number)=-1;}
- break;
-
-
- default: break;
- }
-
-/* Line 1126 of yacc.c. */
-#line 1510 "defparse.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;
-}
-
-
-
diff --git a/binutils/defparse.h b/binutils/defparse.h
deleted file mode 100644
index 0eea9b9dcf48..000000000000
--- a/binutils/defparse.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* 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 {
- NAME = 258,
- LIBRARY = 259,
- DESCRIPTION = 260,
- STACKSIZE = 261,
- HEAPSIZE = 262,
- CODE = 263,
- DATA = 264,
- SECTIONS = 265,
- EXPORTS = 266,
- IMPORTS = 267,
- VERSIONK = 268,
- BASE = 269,
- CONSTANT = 270,
- READ = 271,
- WRITE = 272,
- EXECUTE = 273,
- SHARED = 274,
- NONSHARED = 275,
- NONAME = 276,
- PRIVATE = 277,
- SINGLE = 278,
- MULTIPLE = 279,
- INITINSTANCE = 280,
- INITGLOBAL = 281,
- TERMINSTANCE = 282,
- TERMGLOBAL = 283,
- ID = 284,
- NUMBER = 285
- };
-#endif
-/* Tokens. */
-#define NAME 258
-#define LIBRARY 259
-#define DESCRIPTION 260
-#define STACKSIZE 261
-#define HEAPSIZE 262
-#define CODE 263
-#define DATA 264
-#define SECTIONS 265
-#define EXPORTS 266
-#define IMPORTS 267
-#define VERSIONK 268
-#define BASE 269
-#define CONSTANT 270
-#define READ 271
-#define WRITE 272
-#define EXECUTE 273
-#define SHARED 274
-#define NONSHARED 275
-#define NONAME 276
-#define PRIVATE 277
-#define SINGLE 278
-#define MULTIPLE 279
-#define INITINSTANCE 280
-#define INITGLOBAL 281
-#define TERMINSTANCE 282
-#define TERMGLOBAL 283
-#define ID 284
-#define NUMBER 285
-
-
-
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 27 "defparse.y"
-typedef union YYSTYPE {
- char *id;
- int number;
-} YYSTYPE;
-/* Line 1447 of yacc.c. */
-#line 103 "defparse.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/defparse.y b/binutils/defparse.y
index 81b4c61ce903..8b870d7c6be6 100644
--- a/binutils/defparse.y
+++ b/binutils/defparse.y
@@ -1,6 +1,6 @@
%{ /* defparse.y - parser for .def files */
-/* Copyright 1995, 1997, 1998, 1999, 2001, 2004
+/* Copyright 1995, 1997, 1998, 1999, 2001, 2004, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -19,8 +19,9 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+#include "sysdep.h"
#include "bfd.h"
-#include "bucomm.h"
+#include "libiberty.h"
#include "dlltool.h"
%}
diff --git a/binutils/dlltool.c b/binutils/dlltool.c
index 6c231f69a449..568ad689efae 100644
--- a/binutils/dlltool.c
+++ b/binutils/dlltool.c
@@ -1,6 +1,6 @@
/* dlltool.c -- tool to generate stuff for PE style DLLs
Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006 Free Software Foundation, Inc.
+ 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -243,12 +243,13 @@
#define PAGE_SIZE 4096
#define PAGE_MASK (-PAGE_SIZE)
+#include "sysdep.h"
#include "bfd.h"
#include "libiberty.h"
-#include "bucomm.h"
#include "getopt.h"
#include "demangle.h"
#include "dyn-string.h"
+#include "bucomm.h"
#include "dlltool.h"
#include "safe-ctype.h"
@@ -261,6 +262,9 @@
#include "coff/arm.h"
#include "coff/internal.h"
#endif
+#ifdef DLLTOOL_MX86_64
+#include "coff/x86_64.h"
+#endif
/* Forward references. */
static char *look_for_prog (const char *, const char *, int);
@@ -384,35 +388,43 @@ static int verbose;
static FILE *output_def;
static FILE *base_file;
-#ifdef DLLTOOL_ARM
-#ifdef DLLTOOL_ARM_EPOC
-static const char *mname = "arm-epoc";
-#else
+#ifdef DLLTOOL_DEFAULT_ARM
static const char *mname = "arm";
#endif
+
+#ifdef DLLTOOL_DEFAULT_ARM_EPOC
+static const char *mname = "arm-epoc";
+#endif
+
+#ifdef DLLTOOL_DEFAULT_ARM_WINCE
+static const char *mname = "arm-wince";
#endif
-#ifdef DLLTOOL_I386
+#ifdef DLLTOOL_DEFAULT_I386
static const char *mname = "i386";
#endif
-#ifdef DLLTOOL_PPC
+#ifdef DLLTOOL_DEFAULT_MX86_64
+static const char *mname = "i386:x86-64";
+#endif
+
+#ifdef DLLTOOL_DEFAULT_PPC
static const char *mname = "ppc";
#endif
-#ifdef DLLTOOL_SH
+#ifdef DLLTOOL_DEFAULT_SH
static const char *mname = "sh";
#endif
-#ifdef DLLTOOL_MIPS
+#ifdef DLLTOOL_DEFAULT_MIPS
static const char *mname = "mips";
#endif
-#ifdef DLLTOOL_MCORE
+#ifdef DLLTOOL_DEFAULT_MCORE
static const char * mname = "mcore-le";
#endif
-#ifdef DLLTOOL_MCORE_ELF
+#ifdef DLLTOOL_DEFAULT_MCORE_ELF
static const char * mname = "mcore-elf";
static char * mcore_elf_out_file = NULL;
static char * mcore_elf_linker = NULL;
@@ -629,6 +641,23 @@ mtable[] =
arm_jtab, sizeof (arm_jtab), 8
}
,
+ {
+#define MARM_WINCE 10
+ "arm-wince", ".byte", ".short", ".long", ".asciz", "@",
+ "ldr\tip,[pc]\n\tldr\tpc,[ip]\n\t.long",
+ ".global", ".space", ".align\t2",".align\t4", "-mapcs-32",
+ "pe-arm-wince-little", bfd_arch_arm,
+ arm_jtab, sizeof (arm_jtab), 8
+ }
+ ,
+ {
+#define MX86 11
+ "i386:x86-64", ".byte", ".short", ".long", ".asciz", "#",
+ "jmp *", ".global", ".space", ".align\t2",".align\t4", "",
+ "pe-x86-64",bfd_arch_i386,
+ i386_jtab, sizeof (i386_jtab), 2
+ }
+ ,
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
@@ -752,6 +781,7 @@ rvaafter (int machine)
{
case MARM:
case M386:
+ case MX86:
case MPPC:
case MTHUMB:
case MARM_INTERWORK:
@@ -760,6 +790,7 @@ rvaafter (int machine)
case MMCORE_ELF:
case MMCORE_ELF_LE:
case MARM_EPOC:
+ case MARM_WINCE:
break;
default:
/* xgettext:c-format */
@@ -776,6 +807,7 @@ rvabefore (int machine)
{
case MARM:
case M386:
+ case MX86:
case MPPC:
case MTHUMB:
case MARM_INTERWORK:
@@ -784,6 +816,7 @@ rvabefore (int machine)
case MMCORE_ELF:
case MMCORE_ELF_LE:
case MARM_EPOC:
+ case MARM_WINCE:
return ".rva\t";
default:
/* xgettext:c-format */
@@ -807,8 +840,10 @@ asm_prefix (int machine, const char *name)
case MMCORE_ELF:
case MMCORE_ELF_LE:
case MARM_EPOC:
+ case MARM_WINCE:
break;
case M386:
+ case MX86:
/* Symbol names starting with ? do not have a leading underscore. */
if (name && *name == '?')
break;
@@ -1234,7 +1269,7 @@ scan_drectve_symbols (bfd *abfd)
while (p < e)
{
if (p[0] == '-'
- && strncmp (p, "-export:", 8) == 0)
+ && CONST_STRNEQ (p, "-export:"))
{
char * name;
char * c;
@@ -1252,7 +1287,7 @@ scan_drectve_symbols (bfd *abfd)
char *tag_start = ++p;
while (p < e && *p != ' ' && *p != '-')
p++;
- if (strncmp (tag_start, "data", 4) == 0)
+ if (CONST_STRNEQ (tag_start, "data"))
flags &= ~BSF_FUNCTION;
}
@@ -1686,10 +1721,19 @@ generate_idata_ofile (FILE *filvar)
for (headptr = import_list; headptr != NULL; headptr = headptr->next)
{
fprintf (filvar, "listone%d:\n", headindex);
- for ( funcindex = 0; funcindex < headptr->nfuncs; funcindex++ )
+ for (funcindex = 0; funcindex < headptr->nfuncs; funcindex++)
+#ifdef DLLTOOL_MX86_64
+ fprintf (filvar, "\t%sfuncptr%d_%d%s\n%s\t0\n",
+ ASM_RVA_BEFORE, headindex, funcindex, ASM_RVA_AFTER,ASM_LONG);
+#else
fprintf (filvar, "\t%sfuncptr%d_%d%s\n",
ASM_RVA_BEFORE, headindex, funcindex, ASM_RVA_AFTER);
- fprintf (filvar,"\t%s\t0\n", ASM_LONG); /* NULL terminating list */
+#endif
+#ifdef DLLTOOL_MX86_64
+ fprintf (filvar, "\t%s\t0\n\t%s\t0\n", ASM_LONG, ASM_LONG); /* NULL terminating list. */
+#else
+ fprintf (filvar, "\t%s\t0\n", ASM_LONG); /* NULL terminating list. */
+#endif
headindex++;
}
@@ -1698,10 +1742,19 @@ generate_idata_ofile (FILE *filvar)
for (headptr = import_list; headptr != NULL; headptr = headptr->next)
{
fprintf (filvar, "listtwo%d:\n", headindex);
- for ( funcindex = 0; funcindex < headptr->nfuncs; funcindex++ )
+ for (funcindex = 0; funcindex < headptr->nfuncs; funcindex++)
+#ifdef DLLTOOL_MX86_64
+ fprintf (filvar, "\t%sfuncptr%d_%d%s\n%s\t0\n",
+ ASM_RVA_BEFORE, headindex, funcindex, ASM_RVA_AFTER,ASM_LONG);
+#else
fprintf (filvar, "\t%sfuncptr%d_%d%s\n",
ASM_RVA_BEFORE, headindex, funcindex, ASM_RVA_AFTER);
- fprintf (filvar, "\t%s\t0\n", ASM_LONG); /* NULL terminating list */
+#endif
+#ifdef DLLTOOL_MX86_64
+ fprintf (filvar, "\t%s\t0\n\t%s\t0\n", ASM_LONG, ASM_LONG); /* NULL terminating list. */
+#else
+ fprintf (filvar, "\t%s\t0\n", ASM_LONG); /* NULL terminating list. */
+#endif
headindex++;
}
@@ -2344,7 +2397,7 @@ make_one_lib_file (export_type *exp, int i)
si->data = xmalloc (HOW_JTAB_SIZE);
memcpy (si->data, HOW_JTAB, HOW_JTAB_SIZE);
- /* add the reloc into idata$5 */
+ /* Add the reloc into idata$5. */
rel = xmalloc (sizeof (arelent));
rpp = xmalloc (sizeof (arelent *) * 2);
@@ -2360,6 +2413,12 @@ make_one_lib_file (export_type *exp, int i)
BFD_RELOC_16_GOTOFF);
rel->sym_ptr_ptr = iname_pp;
}
+ else if (machine == MX86)
+ {
+ rel->howto = bfd_reloc_type_lookup (abfd,
+ BFD_RELOC_32_PCREL);
+ rel->sym_ptr_ptr = iname_pp;
+ }
else
{
rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32);
@@ -2374,6 +2433,36 @@ make_one_lib_file (export_type *exp, int i)
/* An idata$4 or idata$5 is one word long, and has an
rva to idata$6. */
+#ifdef DLLTOOL_MX86_64
+ si->data = xmalloc (8);
+ si->size = 8;
+
+ if (exp->noname)
+ {
+ si->data[0] = exp->ordinal ;
+ si->data[1] = exp->ordinal >> 8;
+ si->data[2] = exp->ordinal >> 16;
+ si->data[3] = exp->ordinal >> 24;
+ si->data[4] = 0;
+ si->data[5] = 0;
+ si->data[6] = 0;
+ si->data[7] = 0x80;
+ }
+ else
+ {
+ sec->reloc_count = 1;
+ memset (si->data, 0, si->size);
+ rel = xmalloc (sizeof (arelent));
+ rpp = xmalloc (sizeof (arelent *) * 2);
+ rpp[0] = rel;
+ rpp[1] = 0;
+ rel->address = 0;
+ rel->addend = 0;
+ rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_RVA);
+ rel->sym_ptr_ptr = secdata[IDATA6].sympp;
+ sec->orelocation = rpp;
+ }
+#else
si->data = xmalloc (4);
si->size = 4;
@@ -2398,7 +2487,7 @@ make_one_lib_file (export_type *exp, int i)
rel->sym_ptr_ptr = secdata[IDATA6].sympp;
sec->orelocation = rpp;
}
-
+#endif
break;
case IDATA6:
@@ -2612,14 +2701,17 @@ make_head (void)
if (!no_idata5)
{
fprintf (f, "\t.section\t.idata$5\n");
- fprintf (f, "\t%s\t0\n", ASM_LONG);
+#ifdef DLLTOOL_MX86_64
+ fprintf (f,"\t%s\t0\n\t%s\t0\n", ASM_LONG, ASM_LONG); /* NULL terminating list. */
+#else
+ fprintf (f,"\t%s\t0\n", ASM_LONG); /* NULL terminating list. */
+#endif
fprintf (f, "fthunk:\n");
}
if (!no_idata4)
{
fprintf (f, "\t.section\t.idata$4\n");
-
fprintf (f, "\t%s\t0\n", ASM_LONG);
fprintf (f, "\t.section .idata$4\n");
fprintf (f, "hname:\n");
@@ -2646,13 +2738,21 @@ make_tail (void)
if (!no_idata4)
{
fprintf (f, "\t.section .idata$4\n");
- fprintf (f, "\t%s\t0\n", ASM_LONG);
+#ifdef DLLTOOL_MX86_64
+ fprintf (f,"\t%s\t0\n\t%s\t0\n", ASM_LONG, ASM_LONG); /* NULL terminating list. */
+#else
+ fprintf (f,"\t%s\t0\n", ASM_LONG); /* NULL terminating list. */
+#endif
}
if (!no_idata5)
{
fprintf (f, "\t.section .idata$5\n");
- fprintf (f, "\t%s\t0\n", ASM_LONG);
+#ifdef DLLTOOL_MX86_64
+ fprintf (f,"\t%s\t0\n\t%s\t0\n", ASM_LONG, ASM_LONG); /* NULL terminating list. */
+#else
+ fprintf (f,"\t%s\t0\n", ASM_LONG); /* NULL terminating list. */
+#endif
}
#ifdef DLLTOOL_PPC
@@ -2728,7 +2828,7 @@ gen_lib_file (void)
if (exp->private)
continue;
n = make_one_lib_file (exp, i);
- n->next = head;
+ n->archive_next = head;
head = n;
if (ext_prefix_alias)
{
@@ -2747,14 +2847,14 @@ gen_lib_file (void)
alias_exp.forward = exp->forward;
alias_exp.next = exp->next;
n = make_one_lib_file (&alias_exp, i + PREFIX_ALIAS_BASE);
- n->next = head;
+ n->archive_next = head;
head = n;
}
}
/* Now stick them all into the archive. */
- ar_head->next = head;
- ar_tail->next = ar_head;
+ ar_head->archive_next = head;
+ ar_tail->archive_next = ar_head;
head = ar_tail;
if (! bfd_set_archive_head (outarch, head))
@@ -2765,7 +2865,7 @@ gen_lib_file (void)
while (head != NULL)
{
- bfd *n = head->next;
+ bfd *n = head->archive_next;
bfd_close (head);
head = n;
}
@@ -3068,6 +3168,8 @@ usage (FILE *file, int status)
fprintf (file, _(" -L --linker <name> Use <name> as the linker.\n"));
fprintf (file, _(" -F --linker-flags <flags> Pass <flags> to the linker.\n"));
#endif
+ if (REPORT_BUGS_TO[0] && status == 0)
+ fprintf (file, _("Report bugs to %s\n"), REPORT_BUGS_TO);
exit (status);
}
diff --git a/binutils/dllwrap.c b/binutils/dllwrap.c
index f93c75d6fb3f..9828a958a73c 100644
--- a/binutils/dllwrap.c
+++ b/binutils/dllwrap.c
@@ -1,5 +1,6 @@
/* dllwrap.c -- wrapper for DLLTOOL and GCC to generate PE style DLLs
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
+ Free Software Foundation, Inc.
Contributed by Mumit Khan (khan@xraylith.wisc.edu).
This file is part of GNU Binutils.
@@ -26,19 +27,15 @@
#endif
#endif
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
+#include "sysdep.h"
#include "bfd.h"
#include "libiberty.h"
-#include "bucomm.h"
#include "getopt.h"
#include "dyn-string.h"
+#include "bucomm.h"
#include <time.h>
#include <sys/stat.h>
-#include <stdarg.h>
#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h>
@@ -509,6 +506,8 @@ usage (FILE *file, int status)
fprintf (file, _(" --nodelete Keep temp files.\n"));
fprintf (file, _(" Rest are passed unmodified to the language driver\n"));
fprintf (file, "\n\n");
+ if (REPORT_BUGS_TO[0] && status == 0)
+ fprintf (file, _("Report bugs to %s\n"), REPORT_BUGS_TO);
exit (status);
}
diff --git a/binutils/doc/Makefile.am b/binutils/doc/Makefile.am
index 1d043e7d3f8b..ceeda41b004f 100644
--- a/binutils/doc/Makefile.am
+++ b/binutils/doc/Makefile.am
@@ -28,20 +28,16 @@ man_MANS = \
strings.1 \
strip.1 \
windres.1 \
+ windmc.1 \
$(DEMANGLER_NAME).1
info_TEXINFOS = binutils.texi
-binutils_TEXINFOS = config.texi
binutils_TEXI = $(srcdir)/binutils.texi
-AM_MAKEINFOFLAGS = -I "$(srcdir)" -I "$(top_srcdir)/../libiberty"
-TEXI2DVI = texi2dvi -I "$(srcdir)" -I "$(top_srcdir)/../libiberty"
-
-config.texi: $(srcdir)/../../bfd/configure $(binutils_TEXI)
- rm -f config.texi
- eval `grep '^ *VERSION=' $(srcdir)/../../bfd/configure`; \
- echo "@set VERSION $$VERSION" > $@
- echo "@set UPDATED `date "+%B %Y"`" >> config.texi
+AM_MAKEINFOFLAGS = -I "$(srcdir)" -I "$(top_srcdir)/../libiberty" \
+ -I ../../bfd/doc
+TEXI2DVI = texi2dvi -I "$(srcdir)" -I "$(top_srcdir)/../libiberty" \
+ -I ../../bfd/doc
# Man page generation from texinfo
addr2line.1: $(binutils_TEXI) $(binutils_TEXINFOS)
@@ -135,6 +131,13 @@ windres.1: $(binutils_TEXI) $(binutils_TEXINFOS)
mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1)
rm -f windres.pod
+windmc.1: $(binutils_TEXI) $(binutils_TEXINFOS)
+ touch $@
+ -$(TEXI2POD) $(MANCONF) -Dwindmc < $(binutils_TEXI) > windmc.pod
+ -($(POD2MAN) windmc.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \
+ mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1)
+ rm -f windmc.pod
+
cxxfilt.man: $(binutils_TEXI) $(binutils_TEXINFOS)
touch $@
-$(TEXI2POD) $(MANCONF) -Dcxxfilt < $(binutils_TEXI) > $(DEMANGLER_NAME).pod
@@ -142,7 +145,6 @@ cxxfilt.man: $(binutils_TEXI) $(binutils_TEXINFOS)
mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1)
rm -f $(DEMANGLER_NAME).pod
-MAINTAINERCLEANFILES = config.texi
MOSTLYCLEANFILES = $(DEMANGLER_NAME).1
$(DEMANGLER_NAME).1: cxxfilt.man Makefile
@@ -180,6 +182,15 @@ install-html-am: $(HTMLS)
fi; \
done
+MAINTAINERCLEANFILES = binutils.info
+
+# Automake 1.9 will only build info files in the objdir if they are
+# mentioned in DISTCLEANFILES. It doesn't have to be unconditional,
+# though, so we use a bogus condition.
+if GENINSRC_NEVER
+DISTCLEANFILES = binutils.info
+endif
+
# Maintenance
# We need it for the taz target in ../../Makefile.in.
diff --git a/binutils/doc/Makefile.in b/binutils/doc/Makefile.in
index ef28ceff8dfb..338c9bad74ea 100644
--- a/binutils/doc/Makefile.in
+++ b/binutils/doc/Makefile.in
@@ -37,14 +37,22 @@ build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = doc
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(binutils_TEXINFOS)
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
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__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \
+ $(top_srcdir)/../bfd/warning.m4 \
+ $(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/gettext-sister.m4 \
+ $(top_srcdir)/../config/iconv.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/lib-ld.m4 \
+ $(top_srcdir)/../config/lib-link.m4 \
+ $(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/nls.m4 $(top_srcdir)/../config/po.m4 \
+ $(top_srcdir)/../config/progtest.m4 \
+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
+ $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
@@ -53,7 +61,7 @@ CONFIG_CLEAN_FILES =
depcomp =
am__depfiles_maybe =
SOURCES =
-INFO_DEPS = $(srcdir)/binutils.info
+INFO_DEPS = binutils.info
TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex
am__TEXINFO_TEX_DIR = $(top_srcdir)/../texinfo
DVIS = binutils.dvi
@@ -81,9 +89,11 @@ AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_DLLTOOL = @BUILD_DLLTOOL@
BUILD_DLLWRAP = @BUILD_DLLWRAP@
+BUILD_INSTALL_MISC = @BUILD_INSTALL_MISC@
BUILD_MISC = @BUILD_MISC@
BUILD_NLMCONV = @BUILD_NLMCONV@
BUILD_SRCONV = @BUILD_SRCONV@
+BUILD_WINDMC = @BUILD_WINDMC@
BUILD_WINDRES = @BUILD_WINDRES@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
@@ -99,6 +109,7 @@ DEFS = @DEFS@
DEMANGLER_NAME = @DEMANGLER_NAME@
DEPDIR = @DEPDIR@
DLLTOOL_DEFS = @DLLTOOL_DEFS@
+DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
@@ -107,28 +118,32 @@ EMULATION = @EMULATION@
EMULATION_VECTOR = @EMULATION_VECTOR@
EXEEXT = @EXEEXT@
EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
-GMOFILES = @GMOFILES@
+FGREP = @FGREP@
+GENCAT = @GENCAT@
+GENINSRC_NEVER_FALSE = @GENINSRC_NEVER_FALSE@
+GENINSRC_NEVER_TRUE = @GENINSRC_NEVER_TRUE@
GMSGFMT = @GMSGFMT@
-GT_NO = @GT_NO@
-GT_YES = @GT_YES@
+GREP = @GREP@
HDEFINES = @HDEFINES@
-INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
+INCINTL = @INCINTL@
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@
+LD = @LD@
LDFLAGS = @LDFLAGS@
LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBINTL_DEP = @LIBINTL_DEP@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
@@ -136,7 +151,9 @@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
NLMCONV_DEFS = @NLMCONV_DEFS@
+NM = @NM@
NO_WERROR = @NO_WERROR@
OBJDUMP_DEFS = @OBJDUMP_DEFS@
OBJEXT = @OBJEXT@
@@ -147,19 +164,20 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-POFILES = @POFILES@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
-USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
YACC = @YACC@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
@@ -188,10 +206,10 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-l = @l@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -232,20 +250,29 @@ man_MANS = \
strings.1 \
strip.1 \
windres.1 \
+ windmc.1 \
$(DEMANGLER_NAME).1
info_TEXINFOS = binutils.texi
-binutils_TEXINFOS = config.texi
binutils_TEXI = $(srcdir)/binutils.texi
-AM_MAKEINFOFLAGS = -I "$(srcdir)" -I "$(top_srcdir)/../libiberty"
-TEXI2DVI = texi2dvi -I "$(srcdir)" -I "$(top_srcdir)/../libiberty"
-MAINTAINERCLEANFILES = config.texi
+AM_MAKEINFOFLAGS = -I "$(srcdir)" -I "$(top_srcdir)/../libiberty" \
+ -I ../../bfd/doc
+
+TEXI2DVI = texi2dvi -I "$(srcdir)" -I "$(top_srcdir)/../libiberty" \
+ -I ../../bfd/doc
+
MOSTLYCLEANFILES = $(DEMANGLER_NAME).1
html__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+MAINTAINERCLEANFILES = binutils.info
+
+# Automake 1.9 will only build info files in the objdir if they are
+# mentioned in DISTCLEANFILES. It doesn't have to be unconditional,
+# though, so we use a bogus condition.
+@GENINSRC_NEVER_TRUE@DISTCLEANFILES = binutils.info
all: all-am
.SUFFIXES:
-.SUFFIXES: .dvi .html .info .pdf .ps .texi
+.SUFFIXES: .dvi .ps
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@@ -255,9 +282,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus doc/Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/Makefile
+ $(AUTOMAKE) --cygnus doc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -285,42 +312,38 @@ clean-libtool:
distclean-libtool:
-rm -f libtool
-.texi.info:
+binutils.info: binutils.texi
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 $@ $<; \
+ -o $@ `test -f 'binutils.texi' || echo '$(srcdir)/'`binutils.texi; \
then \
rc=0; \
- cd $(srcdir); \
else \
rc=$$?; \
- cd $(srcdir) && \
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
fi; \
rm -rf $$backupdir; exit $$rc
-.texi.dvi:
+binutils.dvi: binutils.texi
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
- $(TEXI2DVI) $<
+ $(TEXI2DVI) -o $@ `test -f 'binutils.texi' || echo '$(srcdir)/'`binutils.texi
-.texi.pdf:
+binutils.pdf: binutils.texi
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
- $(TEXI2PDF) $<
+ $(TEXI2PDF) -o $@ `test -f 'binutils.texi' || echo '$(srcdir)/'`binutils.texi
-.texi.html:
+binutils.html: binutils.texi
rm -rf $(@:.html=.htp)
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
- -o $(@:.html=.htp) $<; \
+ -o $(@:.html=.htp) `test -f 'binutils.texi' || echo '$(srcdir)/'`binutils.texi; \
then \
rm -rf $@; \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
@@ -330,10 +353,6 @@ distclean-libtool:
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
exit 1; \
fi
-$(srcdir)/binutils.info: binutils.texi $(binutils_TEXINFOS)
-binutils.dvi: binutils.texi $(binutils_TEXINFOS)
-binutils.pdf: binutils.texi $(binutils_TEXINFOS)
-binutils.html: binutils.texi $(binutils_TEXINFOS)
.dvi.ps:
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
$(DVIPS) -o $@ $<
@@ -469,6 +488,7 @@ clean-generic:
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"
@@ -569,12 +589,6 @@ uninstall-man: uninstall-man1
uninstall-man uninstall-man1
-config.texi: $(srcdir)/../../bfd/configure $(binutils_TEXI)
- rm -f config.texi
- eval `grep '^ *VERSION=' $(srcdir)/../../bfd/configure`; \
- echo "@set VERSION $$VERSION" > $@
- echo "@set UPDATED `date "+%B %Y"`" >> config.texi
-
# Man page generation from texinfo
addr2line.1: $(binutils_TEXI) $(binutils_TEXINFOS)
touch $@
@@ -667,6 +681,13 @@ windres.1: $(binutils_TEXI) $(binutils_TEXINFOS)
mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1)
rm -f windres.pod
+windmc.1: $(binutils_TEXI) $(binutils_TEXINFOS)
+ touch $@
+ -$(TEXI2POD) $(MANCONF) -Dwindmc < $(binutils_TEXI) > windmc.pod
+ -($(POD2MAN) windmc.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \
+ mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1)
+ rm -f windmc.pod
+
cxxfilt.man: $(binutils_TEXI) $(binutils_TEXINFOS)
touch $@
-$(TEXI2POD) $(MANCONF) -Dcxxfilt < $(binutils_TEXI) > $(DEMANGLER_NAME).pod
diff --git a/binutils/doc/addr2line.1 b/binutils/doc/addr2line.1
deleted file mode 100644
index 71d1ea76398d..000000000000
--- a/binutils/doc/addr2line.1
+++ /dev/null
@@ -1,265 +0,0 @@
-.\" 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 "ADDR2LINE 1"
-.TH ADDR2LINE 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-addr2line \- convert addresses into file names and line numbers.
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-addr2line [\fB\-b\fR \fIbfdname\fR|\fB\-\-target=\fR\fIbfdname\fR]
- [\fB\-C\fR|\fB\-\-demangle\fR[=\fIstyle\fR]]
- [\fB\-e\fR \fIfilename\fR|\fB\-\-exe=\fR\fIfilename\fR]
- [\fB\-f\fR|\fB\-\-functions\fR] [\fB\-s\fR|\fB\-\-basename\fR]
- [\fB\-i\fR|\fB\-\-inlines\fR]
- [\fB\-j\fR|\fB\-\-section=\fR\fIname\fR]
- [\fB\-H\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR]
- [addr addr ...]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\fBaddr2line\fR translates addresses into file names and line numbers.
-Given an address in an executable or an offset in a section of a relocatable
-object, it uses the debugging information to figure out which file name and
-line number are associated with it.
-.PP
-The executable or relocatable object to use is specified with the \fB\-e\fR
-option. The default is the file \fIa.out\fR. The section in the relocatable
-object to use is specified with the \fB\-j\fR option.
-.PP
-\&\fBaddr2line\fR has two modes of operation.
-.PP
-In the first, hexadecimal addresses are specified on the command line,
-and \fBaddr2line\fR displays the file name and line number for each
-address.
-.PP
-In the second, \fBaddr2line\fR reads hexadecimal addresses from
-standard input, and prints the file name and line number for each
-address on standard output. In this mode, \fBaddr2line\fR may be used
-in a pipe to convert dynamically chosen addresses.
-.PP
-The format of the output is \fB\s-1FILENAME:LINENO\s0\fR. The file name and
-line number for each address is printed on a separate line. If the
-\&\fB\-f\fR option is used, then each \fB\s-1FILENAME:LINENO\s0\fR line is
-preceded by a \fB\s-1FUNCTIONNAME\s0\fR line which is the name of the function
-containing the address.
-.PP
-If the file name or function name can not be determined,
-\&\fBaddr2line\fR will print two question marks in their place. If the
-line number can not be determined, \fBaddr2line\fR will print 0.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-The long and short forms of options, shown here as alternatives, are
-equivalent.
-.IP "\fB\-b\fR \fIbfdname\fR" 4
-.IX Item "-b bfdname"
-.PD 0
-.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
-.IX Item "--target=bfdname"
-.PD
-Specify that the object-code format for the object files is
-\&\fIbfdname\fR.
-.IP "\fB\-C\fR" 4
-.IX Item "-C"
-.PD 0
-.IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4
-.IX Item "--demangle[=style]"
-.PD
-Decode (\fIdemangle\fR) low-level symbol names into user-level names.
-Besides removing any initial underscore prepended by the system, this
-makes \*(C+ function names readable. Different compilers have different
-mangling styles. The optional demangling style argument can be used to
-choose an appropriate demangling style for your compiler.
-.IP "\fB\-e\fR \fIfilename\fR" 4
-.IX Item "-e filename"
-.PD 0
-.IP "\fB\-\-exe=\fR\fIfilename\fR" 4
-.IX Item "--exe=filename"
-.PD
-Specify the name of the executable for which addresses should be
-translated. The default file is \fIa.out\fR.
-.IP "\fB\-f\fR" 4
-.IX Item "-f"
-.PD 0
-.IP "\fB\-\-functions\fR" 4
-.IX Item "--functions"
-.PD
-Display function names as well as file and line number information.
-.IP "\fB\-s\fR" 4
-.IX Item "-s"
-.PD 0
-.IP "\fB\-\-basenames\fR" 4
-.IX Item "--basenames"
-.PD
-Display only the base of each file name.
-.IP "\fB\-i\fR" 4
-.IX Item "-i"
-.PD 0
-.IP "\fB\-\-inlines\fR" 4
-.IX Item "--inlines"
-.PD
-If the address belongs to a function that was inlined, the source
-information for all enclosing scopes back to the first non-inlined
-function will also be printed. For example, if \f(CW\*(C`main\*(C'\fR inlines
-\&\f(CW\*(C`callee1\*(C'\fR which inlines \f(CW\*(C`callee2\*(C'\fR, and address is from
-\&\f(CW\*(C`callee2\*(C'\fR, the source information for \f(CW\*(C`callee1\*(C'\fR and \f(CW\*(C`main\*(C'\fR
-will also be printed.
-.IP "\fB\-j\fR" 4
-.IX Item "-j"
-.PD 0
-.IP "\fB\-\-section\fR" 4
-.IX Item "--section"
-.PD
-Read offsets relative to the specified section instead of absolute addresses.
-.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.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/doc/ar.1 b/binutils/doc/ar.1
deleted file mode 100644
index 5985ca15e448..000000000000
--- a/binutils/doc/ar.1
+++ /dev/null
@@ -1,390 +0,0 @@
-.\" 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 "AR 1"
-.TH AR 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-ar \- create, modify, and extract from archives
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-ar [\fB\-X32_64\fR] [\fB\-\fR]\fIp\fR[\fImod\fR [\fIrelpos\fR] [\fIcount\fR]] \fIarchive\fR [\fImember\fR...]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-The \s-1GNU\s0 \fBar\fR program creates, modifies, and extracts from
-archives. An \fIarchive\fR is a single file holding a collection of
-other files in a structure that makes it possible to retrieve
-the original individual files (called \fImembers\fR of the archive).
-.PP
-The original files' contents, mode (permissions), timestamp, owner, and
-group are preserved in the archive, and can be restored on
-extraction.
-.PP
-\&\s-1GNU\s0 \fBar\fR can maintain archives whose members have names of any
-length; however, depending on how \fBar\fR is configured on your
-system, a limit on member-name length may be imposed for compatibility
-with archive formats maintained with other tools. If it exists, the
-limit is often 15 characters (typical of formats related to a.out) or 16
-characters (typical of formats related to coff).
-.PP
-\&\fBar\fR is considered a binary utility because archives of this sort
-are most often used as \fIlibraries\fR holding commonly needed
-subroutines.
-.PP
-\&\fBar\fR creates an index to the symbols defined in relocatable
-object modules in the archive when you specify the modifier \fBs\fR.
-Once created, this index is updated in the archive whenever \fBar\fR
-makes a change to its contents (save for the \fBq\fR update operation).
-An archive with such an index speeds up linking to the library, and
-allows routines in the library to call each other without regard to
-their placement in the archive.
-.PP
-You may use \fBnm \-s\fR or \fBnm \-\-print\-armap\fR to list this index
-table. If an archive lacks the table, another form of \fBar\fR called
-\&\fBranlib\fR can be used to add just the table.
-.PP
-\&\s-1GNU\s0 \fBar\fR is designed to be compatible with two different
-facilities. You can control its activity using command-line options,
-like the different varieties of \fBar\fR on Unix systems; or, if you
-specify the single command-line option \fB\-M\fR, you can control it
-with a script supplied via standard input, like the \s-1MRI\s0 \*(L"librarian\*(R"
-program.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-\&\s-1GNU\s0 \fBar\fR allows you to mix the operation code \fIp\fR and modifier
-flags \fImod\fR in any order, within the first command-line argument.
-.PP
-If you wish, you may begin the first command-line argument with a
-dash.
-.PP
-The \fIp\fR keyletter specifies what operation to execute; it may be
-any of the following, but you must specify only one of them:
-.IP "\fBd\fR" 4
-.IX Item "d"
-\&\fIDelete\fR modules from the archive. Specify the names of modules to
-be deleted as \fImember\fR...; the archive is untouched if you
-specify no files to delete.
-.Sp
-If you specify the \fBv\fR modifier, \fBar\fR lists each module
-as it is deleted.
-.IP "\fBm\fR" 4
-.IX Item "m"
-Use this operation to \fImove\fR members in an archive.
-.Sp
-The ordering of members in an archive can make a difference in how
-programs are linked using the library, if a symbol is defined in more
-than one member.
-.Sp
-If no modifiers are used with \f(CW\*(C`m\*(C'\fR, any members you name in the
-\&\fImember\fR arguments are moved to the \fIend\fR of the archive;
-you can use the \fBa\fR, \fBb\fR, or \fBi\fR modifiers to move them to a
-specified place instead.
-.IP "\fBp\fR" 4
-.IX Item "p"
-\&\fIPrint\fR the specified members of the archive, to the standard
-output file. If the \fBv\fR modifier is specified, show the member
-name before copying its contents to standard output.
-.Sp
-If you specify no \fImember\fR arguments, all the files in the archive are
-printed.
-.IP "\fBq\fR" 4
-.IX Item "q"
-\&\fIQuick append\fR; Historically, add the files \fImember\fR... to the end of
-\&\fIarchive\fR, without checking for replacement.
-.Sp
-The modifiers \fBa\fR, \fBb\fR, and \fBi\fR do \fInot\fR affect this
-operation; new members are always placed at the end of the archive.
-.Sp
-The modifier \fBv\fR makes \fBar\fR list each file as it is appended.
-.Sp
-Since the point of this operation is speed, the archive's symbol table
-index is not updated, even if it already existed; you can use \fBar s\fR or
-\&\fBranlib\fR explicitly to update the symbol table index.
-.Sp
-However, too many different systems assume quick append rebuilds the
-index, so \s-1GNU\s0 \fBar\fR implements \fBq\fR as a synonym for \fBr\fR.
-.IP "\fBr\fR" 4
-.IX Item "r"
-Insert the files \fImember\fR... into \fIarchive\fR (with
-\&\fIreplacement\fR). This operation differs from \fBq\fR in that any
-previously existing members are deleted if their names match those being
-added.
-.Sp
-If one of the files named in \fImember\fR... does not exist, \fBar\fR
-displays an error message, and leaves undisturbed any existing members
-of the archive matching that name.
-.Sp
-By default, new members are added at the end of the file; but you may
-use one of the modifiers \fBa\fR, \fBb\fR, or \fBi\fR to request
-placement relative to some existing member.
-.Sp
-The modifier \fBv\fR used with this operation elicits a line of
-output for each file inserted, along with one of the letters \fBa\fR or
-\&\fBr\fR to indicate whether the file was appended (no old member
-deleted) or replaced.
-.IP "\fBt\fR" 4
-.IX Item "t"
-Display a \fItable\fR listing the contents of \fIarchive\fR, or those
-of the files listed in \fImember\fR... that are present in the
-archive. Normally only the member name is shown; if you also want to
-see the modes (permissions), timestamp, owner, group, and size, you can
-request that by also specifying the \fBv\fR modifier.
-.Sp
-If you do not specify a \fImember\fR, all files in the archive
-are listed.
-.Sp
-If there is more than one file with the same name (say, \fBfie\fR) in
-an archive (say \fBb.a\fR), \fBar t b.a fie\fR lists only the
-first instance; to see them all, you must ask for a complete
-listing\-\-\-in our example, \fBar t b.a\fR.
-.IP "\fBx\fR" 4
-.IX Item "x"
-\&\fIExtract\fR members (named \fImember\fR) from the archive. You can
-use the \fBv\fR modifier with this operation, to request that
-\&\fBar\fR list each name as it extracts it.
-.Sp
-If you do not specify a \fImember\fR, all files in the archive
-are extracted.
-.PP
-A number of modifiers (\fImod\fR) may immediately follow the \fIp\fR
-keyletter, to specify variations on an operation's behavior:
-.IP "\fBa\fR" 4
-.IX Item "a"
-Add new files \fIafter\fR an existing member of the
-archive. If you use the modifier \fBa\fR, the name of an existing archive
-member must be present as the \fIrelpos\fR argument, before the
-\&\fIarchive\fR specification.
-.IP "\fBb\fR" 4
-.IX Item "b"
-Add new files \fIbefore\fR an existing member of the
-archive. If you use the modifier \fBb\fR, the name of an existing archive
-member must be present as the \fIrelpos\fR argument, before the
-\&\fIarchive\fR specification. (same as \fBi\fR).
-.IP "\fBc\fR" 4
-.IX Item "c"
-\&\fICreate\fR the archive. The specified \fIarchive\fR is always
-created if it did not exist, when you request an update. But a warning is
-issued unless you specify in advance that you expect to create it, by
-using this modifier.
-.IP "\fBf\fR" 4
-.IX Item "f"
-Truncate names in the archive. \s-1GNU\s0 \fBar\fR will normally permit file
-names of any length. This will cause it to create archives which are
-not compatible with the native \fBar\fR program on some systems. If
-this is a concern, the \fBf\fR modifier may be used to truncate file
-names when putting them in the archive.
-.IP "\fBi\fR" 4
-.IX Item "i"
-Insert new files \fIbefore\fR an existing member of the
-archive. If you use the modifier \fBi\fR, the name of an existing archive
-member must be present as the \fIrelpos\fR argument, before the
-\&\fIarchive\fR specification. (same as \fBb\fR).
-.IP "\fBl\fR" 4
-.IX Item "l"
-This modifier is accepted but not used.
-.IP "\fBN\fR" 4
-.IX Item "N"
-Uses the \fIcount\fR parameter. This is used if there are multiple
-entries in the archive with the same name. Extract or delete instance
-\&\fIcount\fR of the given name from the archive.
-.IP "\fBo\fR" 4
-.IX Item "o"
-Preserve the \fIoriginal\fR dates of members when extracting them. If
-you do not specify this modifier, files extracted from the archive
-are stamped with the time of extraction.
-.IP "\fBP\fR" 4
-.IX Item "P"
-Use the full path name when matching names in the archive. \s-1GNU\s0
-\&\fBar\fR can not create an archive with a full path name (such archives
-are not \s-1POSIX\s0 complaint), but other archive creators can. This option
-will cause \s-1GNU\s0 \fBar\fR to match file names using a complete path
-name, which can be convenient when extracting a single file from an
-archive created by another tool.
-.IP "\fBs\fR" 4
-.IX Item "s"
-Write an object-file index into the archive, or update an existing one,
-even if no other change is made to the archive. You may use this modifier
-flag either with any operation, or alone. Running \fBar s\fR on an
-archive is equivalent to running \fBranlib\fR on it.
-.IP "\fBS\fR" 4
-.IX Item "S"
-Do not generate an archive symbol table. This can speed up building a
-large library in several steps. The resulting archive can not be used
-with the linker. In order to build a symbol table, you must omit the
-\&\fBS\fR modifier on the last execution of \fBar\fR, or you must run
-\&\fBranlib\fR on the archive.
-.IP "\fBu\fR" 4
-.IX Item "u"
-Normally, \fBar r\fR... inserts all files
-listed into the archive. If you would like to insert \fIonly\fR those
-of the files you list that are newer than existing members of the same
-names, use this modifier. The \fBu\fR modifier is allowed only for the
-operation \fBr\fR (replace). In particular, the combination \fBqu\fR is
-not allowed, since checking the timestamps would lose any speed
-advantage from the operation \fBq\fR.
-.IP "\fBv\fR" 4
-.IX Item "v"
-This modifier requests the \fIverbose\fR version of an operation. Many
-operations display additional information, such as filenames processed,
-when the modifier \fBv\fR is appended.
-.IP "\fBV\fR" 4
-.IX Item "V"
-This modifier shows the version number of \fBar\fR.
-.PP
-\&\fBar\fR ignores an initial option spelt \fB\-X32_64\fR, for
-compatibility with \s-1AIX\s0. The behaviour produced by this option is the
-default for \s-1GNU\s0 \fBar\fR. \fBar\fR does not support any of the other
-\&\fB\-X\fR options; in particular, it does not support \fB\-X32\fR
-which is the default for \s-1AIX\s0 \fBar\fR.
-.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.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-\&\fInm\fR\|(1), \fIranlib\fR\|(1), and the Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/doc/binutils.info b/binutils/doc/binutils.info
deleted file mode 100644
index dcb79bedfb6f..000000000000
--- a/binutils/doc/binutils.info
+++ /dev/null
@@ -1,3835 +0,0 @@
-This is ../.././binutils/doc/binutils.info, produced by makeinfo
-version 4.8 from ../.././binutils/doc/binutils.texi.
-
-START-INFO-DIR-ENTRY
-* Binutils: (binutils). The GNU binary utilities.
-* ar: (binutils)ar. Create, modify, and extract from archives
-* nm: (binutils)nm. List symbols from object files
-* objcopy: (binutils)objcopy. Copy and translate object files
-* objdump: (binutils)objdump. Display information from object files
-* ranlib: (binutils)ranlib. Generate index to archive contents
-* readelf: (binutils)readelf. Display the contents of ELF format files.
-* size: (binutils)size. List section sizes and total size
-* strings: (binutils)strings. List printable strings from files
-* strip: (binutils)strip. Discard symbols
-* c++filt: (binutils)c++filt. Filter to demangle encoded C++ symbols
-* cxxfilt: (binutils)c++filt. MS-DOS name for c++filt
-* addr2line: (binutils)addr2line. Convert addresses to file and line
-* nlmconv: (binutils)nlmconv. Converts object code into an NLM
-* windres: (binutils)windres. Manipulate Windows resources
-* dlltool: (binutils)dlltool. Create files needed to build and use DLLs
-END-INFO-DIR-ENTRY
-
- Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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".
-
-
-File: binutils.info, Node: Top, Next: ar, Up: (dir)
-
-Introduction
-************
-
-This brief manual contains documentation for the GNU binary utilities
-(collectively 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:
-
-* ar:: Create, modify, and extract from archives
-* nm:: List symbols from object files
-* objcopy:: Copy and translate object files
-* objdump:: Display information from object files
-* ranlib:: Generate index to archive contents
-* readelf:: Display the contents of ELF format files.
-* size:: List section sizes and total size
-* strings:: List printable strings from files
-* strip:: Discard symbols
-* c++filt:: Filter to demangle encoded C++ symbols
-* cxxfilt: c++filt. MS-DOS name for c++filt
-* addr2line:: Convert addresses to file and line
-* nlmconv:: Converts object code into an NLM
-* windres:: Manipulate Windows resources
-* dlltool:: Create files needed to build and use DLLs
-* Common Options:: Command-line options for all utilities
-* Selecting The Target System:: How these utilities determine the target.
-* Reporting Bugs:: Reporting Bugs
-* GNU Free Documentation License:: GNU Free Documentation License
-* Index:: Index
-
-
-File: binutils.info, Node: ar, Next: nm, Prev: Top, Up: Top
-
-1 ar
-****
-
- ar [-]P[MOD [RELPOS] [COUNT]] ARCHIVE [MEMBER...]
- ar -M [ <mri-script ]
-
- The GNU `ar' program creates, modifies, and extracts from archives.
-An "archive" is a single file holding a collection of other files in a
-structure that makes it possible to retrieve the original individual
-files (called "members" of the archive).
-
- The original files' contents, mode (permissions), timestamp, owner,
-and group are preserved in the archive, and can be restored on
-extraction.
-
- GNU `ar' can maintain archives whose members have names of any
-length; however, depending on how `ar' is configured on your system, a
-limit on member-name length may be imposed for compatibility with
-archive formats maintained with other tools. If it exists, the limit
-is often 15 characters (typical of formats related to a.out) or 16
-characters (typical of formats related to coff).
-
- `ar' is considered a binary utility because archives of this sort
-are most often used as "libraries" holding commonly needed subroutines.
-
- `ar' creates an index to the symbols defined in relocatable object
-modules in the archive when you specify the modifier `s'. Once
-created, this index is updated in the archive whenever `ar' makes a
-change to its contents (save for the `q' update operation). An archive
-with such an index speeds up linking to the library, and allows
-routines in the library to call each other without regard to their
-placement in the archive.
-
- You may use `nm -s' or `nm --print-armap' to list this index table.
-If an archive lacks the table, another form of `ar' called `ranlib' can
-be used to add just the table.
-
- GNU `ar' is designed to be compatible with two different facilities.
-You can control its activity using command-line options, like the
-different varieties of `ar' on Unix systems; or, if you specify the
-single command-line option `-M', you can control it with a script
-supplied via standard input, like the MRI "librarian" program.
-
-* Menu:
-
-* ar cmdline:: Controlling `ar' on the command line
-* ar scripts:: Controlling `ar' with a script
-
-
-File: binutils.info, Node: ar cmdline, Next: ar scripts, Up: ar
-
-1.1 Controlling `ar' on the Command Line
-========================================
-
- ar [`-X32_64'] [`-']P[MOD [RELPOS] [COUNT]] ARCHIVE [MEMBER...]
-
- When you use `ar' in the Unix style, `ar' insists on at least two
-arguments to execute: one keyletter specifying the _operation_
-(optionally accompanied by other keyletters specifying _modifiers_),
-and the archive name to act on.
-
- Most operations can also accept further MEMBER arguments, specifying
-particular files to operate on.
-
- GNU `ar' allows you to mix the operation code P and modifier flags
-MOD in any order, within the first command-line argument.
-
- If you wish, you may begin the first command-line argument with a
-dash.
-
- The P keyletter specifies what operation to execute; it may be any
-of the following, but you must specify only one of them:
-
-`d'
- _Delete_ modules from the archive. Specify the names of modules to
- be deleted as MEMBER...; the archive is untouched if you specify
- no files to delete.
-
- If you specify the `v' modifier, `ar' lists each module as it is
- deleted.
-
-`m'
- Use this operation to _move_ members in an archive.
-
- The ordering of members in an archive can make a difference in how
- programs are linked using the library, if a symbol is defined in
- more than one member.
-
- If no modifiers are used with `m', any members you name in the
- MEMBER arguments are moved to the _end_ of the archive; you can
- use the `a', `b', or `i' modifiers to move them to a specified
- place instead.
-
-`p'
- _Print_ the specified members of the archive, to the standard
- output file. If the `v' modifier is specified, show the member
- name before copying its contents to standard output.
-
- If you specify no MEMBER arguments, all the files in the archive
- are printed.
-
-`q'
- _Quick append_; Historically, add the files MEMBER... to the end of
- ARCHIVE, without checking for replacement.
-
- The modifiers `a', `b', and `i' do _not_ affect this operation;
- new members are always placed at the end of the archive.
-
- The modifier `v' makes `ar' list each file as it is appended.
-
- Since the point of this operation is speed, the archive's symbol
- table index is not updated, even if it already existed; you can
- use `ar s' or `ranlib' explicitly to update the symbol table index.
-
- However, too many different systems assume quick append rebuilds
- the index, so GNU `ar' implements `q' as a synonym for `r'.
-
-`r'
- Insert the files MEMBER... into ARCHIVE (with _replacement_). This
- operation differs from `q' in that any previously existing members
- are deleted if their names match those being added.
-
- If one of the files named in MEMBER... does not exist, `ar'
- displays an error message, and leaves undisturbed any existing
- members of the archive matching that name.
-
- By default, new members are added at the end of the file; but you
- may use one of the modifiers `a', `b', or `i' to request placement
- relative to some existing member.
-
- The modifier `v' used with this operation elicits a line of output
- for each file inserted, along with one of the letters `a' or `r'
- to indicate whether the file was appended (no old member deleted)
- or replaced.
-
-`t'
- Display a _table_ listing the contents of ARCHIVE, or those of the
- files listed in MEMBER... that are present in the archive.
- Normally only the member name is shown; if you also want to see
- the modes (permissions), timestamp, owner, group, and size, you can
- request that by also specifying the `v' modifier.
-
- If you do not specify a MEMBER, all files in the archive are
- listed.
-
- If there is more than one file with the same name (say, `fie') in
- an archive (say `b.a'), `ar t b.a fie' lists only the first
- instance; to see them all, you must ask for a complete listing--in
- our example, `ar t b.a'.
-
-`x'
- _Extract_ members (named MEMBER) from the archive. You can use
- the `v' modifier with this operation, to request that `ar' list
- each name as it extracts it.
-
- If you do not specify a MEMBER, all files in the archive are
- extracted.
-
-
- A number of modifiers (MOD) may immediately follow the P keyletter,
-to specify variations on an operation's behavior:
-
-`a'
- Add new files _after_ an existing member of the archive. If you
- use the modifier `a', the name of an existing archive member must
- be present as the RELPOS argument, before the ARCHIVE
- specification.
-
-`b'
- Add new files _before_ an existing member of the archive. If you
- use the modifier `b', the name of an existing archive member must
- be present as the RELPOS argument, before the ARCHIVE
- specification. (same as `i').
-
-`c'
- _Create_ the archive. The specified ARCHIVE is always created if
- it did not exist, when you request an update. But a warning is
- issued unless you specify in advance that you expect to create it,
- by using this modifier.
-
-`f'
- Truncate names in the archive. GNU `ar' will normally permit file
- names of any length. This will cause it to create archives which
- are not compatible with the native `ar' program on some systems.
- If this is a concern, the `f' modifier may be used to truncate file
- names when putting them in the archive.
-
-`i'
- Insert new files _before_ an existing member of the archive. If
- you use the modifier `i', the name of an existing archive member
- must be present as the RELPOS argument, before the ARCHIVE
- specification. (same as `b').
-
-`l'
- This modifier is accepted but not used.
-
-`N'
- Uses the COUNT parameter. This is used if there are multiple
- entries in the archive with the same name. Extract or delete
- instance COUNT of the given name from the archive.
-
-`o'
- Preserve the _original_ dates of members when extracting them. If
- you do not specify this modifier, files extracted from the archive
- are stamped with the time of extraction.
-
-`P'
- Use the full path name when matching names in the archive. GNU
- `ar' can not create an archive with a full path name (such archives
- are not POSIX complaint), but other archive creators can. This
- option will cause GNU `ar' to match file names using a complete
- path name, which can be convenient when extracting a single file
- from an archive created by another tool.
-
-`s'
- Write an object-file index into the archive, or update an existing
- one, even if no other change is made to the archive. You may use
- this modifier flag either with any operation, or alone. Running
- `ar s' on an archive is equivalent to running `ranlib' on it.
-
-`S'
- Do not generate an archive symbol table. This can speed up
- building a large library in several steps. The resulting archive
- can not be used with the linker. In order to build a symbol
- table, you must omit the `S' modifier on the last execution of
- `ar', or you must run `ranlib' on the archive.
-
-`u'
- Normally, `ar r'... inserts all files listed into the archive. If
- you would like to insert _only_ those of the files you list that
- are newer than existing members of the same names, use this
- modifier. The `u' modifier is allowed only for the operation `r'
- (replace). In particular, the combination `qu' is not allowed,
- since checking the timestamps would lose any speed advantage from
- the operation `q'.
-
-`v'
- This modifier requests the _verbose_ version of an operation. Many
- operations display additional information, such as filenames
- processed, when the modifier `v' is appended.
-
-`V'
- This modifier shows the version number of `ar'.
-
- `ar' ignores an initial option spelt `-X32_64', for compatibility
-with AIX. The behaviour produced by this option is the default for GNU
-`ar'. `ar' does not support any of the other `-X' options; in
-particular, it does not support `-X32' which is the default for AIX
-`ar'.
-
-
-File: binutils.info, Node: ar scripts, Prev: ar cmdline, Up: ar
-
-1.2 Controlling `ar' with a Script
-==================================
-
- ar -M [ <SCRIPT ]
-
- If you use the single command-line option `-M' with `ar', you can
-control its operation with a rudimentary command language. This form
-of `ar' operates interactively if standard input is coming directly
-from a terminal. During interactive use, `ar' prompts for input (the
-prompt is `AR >'), and continues executing even after errors. If you
-redirect standard input to a script file, no prompts are issued, and
-`ar' abandons execution (with a nonzero exit code) on any error.
-
- The `ar' command language is _not_ designed to be equivalent to the
-command-line options; in fact, it provides somewhat less control over
-archives. The only purpose of the command language is to ease the
-transition to GNU `ar' for developers who already have scripts written
-for the MRI "librarian" program.
-
- The syntax for the `ar' command language is straightforward:
- * commands are recognized in upper or lower case; for example, `LIST'
- is the same as `list'. In the following descriptions, commands are
- shown in upper case for clarity.
-
- * a single command may appear on each line; it is the first word on
- the line.
-
- * empty lines are allowed, and have no effect.
-
- * comments are allowed; text after either of the characters `*' or
- `;' is ignored.
-
- * Whenever you use a list of names as part of the argument to an `ar'
- command, you can separate the individual names with either commas
- or blanks. Commas are shown in the explanations below, for
- clarity.
-
- * `+' is used as a line continuation character; if `+' appears at
- the end of a line, the text on the following line is considered
- part of the current command.
-
- Here are the commands you can use in `ar' scripts, or when using
-`ar' interactively. Three of them have special significance:
-
- `OPEN' or `CREATE' specify a "current archive", which is a temporary
-file required for most of the other commands.
-
- `SAVE' commits the changes so far specified by the script. Prior to
-`SAVE', commands affect only the temporary copy of the current archive.
-
-`ADDLIB ARCHIVE'
-`ADDLIB ARCHIVE (MODULE, MODULE, ... MODULE)'
- Add all the contents of ARCHIVE (or, if specified, each named
- MODULE from ARCHIVE) to the current archive.
-
- Requires prior use of `OPEN' or `CREATE'.
-
-`ADDMOD MEMBER, MEMBER, ... MEMBER'
- Add each named MEMBER as a module in the current archive.
-
- Requires prior use of `OPEN' or `CREATE'.
-
-`CLEAR'
- Discard the contents of the current archive, canceling the effect
- of any operations since the last `SAVE'. May be executed (with no
- effect) even if no current archive is specified.
-
-`CREATE ARCHIVE'
- Creates an archive, and makes it the current archive (required for
- many other commands). The new archive is created with a temporary
- name; it is not actually saved as ARCHIVE until you use `SAVE'.
- You can overwrite existing archives; similarly, the contents of any
- existing file named ARCHIVE will not be destroyed until `SAVE'.
-
-`DELETE MODULE, MODULE, ... MODULE'
- Delete each listed MODULE from the current archive; equivalent to
- `ar -d ARCHIVE MODULE ... MODULE'.
-
- Requires prior use of `OPEN' or `CREATE'.
-
-`DIRECTORY ARCHIVE (MODULE, ... MODULE)'
-`DIRECTORY ARCHIVE (MODULE, ... MODULE) OUTPUTFILE'
- List each named MODULE present in ARCHIVE. The separate command
- `VERBOSE' specifies the form of the output: when verbose output is
- off, output is like that of `ar -t ARCHIVE MODULE...'. When
- verbose output is on, the listing is like `ar -tv ARCHIVE
- MODULE...'.
-
- Output normally goes to the standard output stream; however, if you
- specify OUTPUTFILE as a final argument, `ar' directs the output to
- that file.
-
-`END'
- Exit from `ar', with a `0' exit code to indicate successful
- completion. This command does not save the output file; if you
- have changed the current archive since the last `SAVE' command,
- those changes are lost.
-
-`EXTRACT MODULE, MODULE, ... MODULE'
- Extract each named MODULE from the current archive, writing them
- into the current directory as separate files. Equivalent to `ar -x
- ARCHIVE MODULE...'.
-
- Requires prior use of `OPEN' or `CREATE'.
-
-`LIST'
- Display full contents of the current archive, in "verbose" style
- regardless of the state of `VERBOSE'. The effect is like `ar tv
- ARCHIVE'. (This single command is a GNU `ar' enhancement, rather
- than present for MRI compatibility.)
-
- Requires prior use of `OPEN' or `CREATE'.
-
-`OPEN ARCHIVE'
- Opens an existing archive for use as the current archive (required
- for many other commands). Any changes as the result of subsequent
- commands will not actually affect ARCHIVE until you next use
- `SAVE'.
-
-`REPLACE MODULE, MODULE, ... MODULE'
- In the current archive, replace each existing MODULE (named in the
- `REPLACE' arguments) from files in the current working directory.
- To execute this command without errors, both the file, and the
- module in the current archive, must exist.
-
- Requires prior use of `OPEN' or `CREATE'.
-
-`VERBOSE'
- Toggle an internal flag governing the output from `DIRECTORY'.
- When the flag is on, `DIRECTORY' output matches output from `ar
- -tv '....
-
-`SAVE'
- Commit your changes to the current archive, and actually save it
- as a file with the name specified in the last `CREATE' or `OPEN'
- command.
-
- Requires prior use of `OPEN' or `CREATE'.
-
-
-
-File: binutils.info, Node: nm, Next: objcopy, Prev: ar, Up: Top
-
-2 nm
-****
-
- nm [`-a'|`--debug-syms'] [`-g'|`--extern-only']
- [`-B'] [`-C'|`--demangle'[=STYLE]] [`-D'|`--dynamic']
- [`-S'|`--print-size'] [`-s'|`--print-armap']
- [`-A'|`-o'|`--print-file-name'][`--special-syms']
- [`-n'|`-v'|`--numeric-sort'] [`-p'|`--no-sort']
- [`-r'|`--reverse-sort'] [`--size-sort'] [`-u'|`--undefined-only']
- [`-t' RADIX|`--radix='RADIX] [`-P'|`--portability']
- [`--target='BFDNAME] [`-f'FORMAT|`--format='FORMAT]
- [`--defined-only'] [`-l'|`--line-numbers'] [`--no-demangle']
- [`-V'|`--version'] [`-X 32_64'] [`--help'] [OBJFILE...]
-
- GNU `nm' lists the symbols from object files OBJFILE.... If no
-object files are listed as arguments, `nm' assumes the file `a.out'.
-
- For each symbol, `nm' shows:
-
- * The symbol value, in the radix selected by options (see below), or
- hexadecimal by default.
-
- * The symbol type. At least the following types are used; others
- are, as well, depending on the object file format. If lowercase,
- the symbol is local; if uppercase, the symbol is global (external).
-
- `A'
- The symbol's value is absolute, and will not be changed by
- further linking.
-
- `B'
- The symbol is in the uninitialized data section (known as
- BSS).
-
- `C'
- The symbol is common. Common symbols are uninitialized data.
- When linking, multiple common symbols may appear with the
- same name. If the symbol is defined anywhere, the common
- symbols are treated as undefined references. For more
- details on common symbols, see the discussion of -warn-common
- in *Note Linker options: (ld.info)Options.
-
- `D'
- The symbol is in the initialized data section.
-
- `G'
- The symbol is in an initialized data section for small
- objects. Some object file formats permit more efficient
- access to small data objects, such as a global int variable
- as opposed to a large global array.
-
- `I'
- The symbol is an indirect reference to another symbol. This
- is a GNU extension to the a.out object file format which is
- rarely used.
-
- `N'
- The symbol is a debugging symbol.
-
- `R'
- The symbol is in a read only data section.
-
- `S'
- The symbol is in an uninitialized data section for small
- objects.
-
- `T'
- The symbol is in the text (code) section.
-
- `U'
- The symbol is undefined.
-
- `V'
- The symbol is a weak object. When a weak defined symbol is
- linked with a normal defined symbol, the normal defined
- symbol is used with no error. When a weak undefined symbol
- is linked and the symbol is not defined, the value of the
- weak symbol becomes zero with no error.
-
- `W'
- The symbol is a weak symbol that has not been specifically
- tagged as a weak object symbol. When a weak defined symbol
- is linked with a normal defined symbol, the normal defined
- symbol is used with no error. When a weak undefined symbol
- is linked and the symbol is not defined, the value of the
- symbol is determined in a system-specific manner without
- error. On some systems, uppercase indicates that a default
- value has been specified.
-
- `-'
- The symbol is a stabs symbol in an a.out object file. In
- this case, the next values printed are the stabs other field,
- the stabs desc field, and the stab type. Stabs symbols are
- used to hold debugging information. For more information,
- see *Note Stabs: (stabs.info)Top.
-
- `?'
- The symbol type is unknown, or object file format specific.
-
- * The symbol name.
-
- The long and short forms of options, shown here as alternatives, are
-equivalent.
-
-`-A'
-`-o'
-`--print-file-name'
- Precede each symbol by the name of the input file (or archive
- member) in which it was found, rather than identifying the input
- file once only, before all of its symbols.
-
-`-a'
-`--debug-syms'
- Display all symbols, even debugger-only symbols; normally these
- are not listed.
-
-`-B'
- The same as `--format=bsd' (for compatibility with the MIPS `nm').
-
-`-C'
-`--demangle[=STYLE]'
- Decode ("demangle") low-level symbol names into user-level names.
- Besides removing any initial underscore prepended by the system,
- this makes C++ function names readable. Different compilers have
- different mangling styles. The optional demangling style argument
- can be used to choose an appropriate demangling style for your
- compiler. *Note c++filt::, for more information on demangling.
-
-`--no-demangle'
- Do not demangle low-level symbol names. This is the default.
-
-`-D'
-`--dynamic'
- Display the dynamic symbols rather than the normal symbols. This
- is only meaningful for dynamic objects, such as certain types of
- shared libraries.
-
-`-f FORMAT'
-`--format=FORMAT'
- Use the output format FORMAT, which can be `bsd', `sysv', or
- `posix'. The default is `bsd'. Only the first character of
- FORMAT is significant; it can be either upper or lower case.
-
-`-g'
-`--extern-only'
- Display only external symbols.
-
-`-l'
-`--line-numbers'
- For each symbol, use debugging information to try to find a
- filename and line number. For a defined symbol, look for the line
- number of the address of the symbol. For an undefined symbol,
- look for the line number of a relocation entry which refers to the
- symbol. If line number information can be found, print it after
- the other symbol information.
-
-`-n'
-`-v'
-`--numeric-sort'
- Sort symbols numerically by their addresses, rather than
- alphabetically by their names.
-
-`-p'
-`--no-sort'
- Do not bother to sort the symbols in any order; print them in the
- order encountered.
-
-`-P'
-`--portability'
- Use the POSIX.2 standard output format instead of the default
- format. Equivalent to `-f posix'.
-
-`-S'
-`--print-size'
- Print size, not the value, of defined symbols for the `bsd' output
- format.
-
-`-s'
-`--print-armap'
- When listing symbols from archive members, include the index: a
- mapping (stored in the archive by `ar' or `ranlib') of which
- modules contain definitions for which names.
-
-`-r'
-`--reverse-sort'
- Reverse the order of the sort (whether numeric or alphabetic); let
- the last come first.
-
-`--size-sort'
- Sort symbols by size. The size is computed as the difference
- between the value of the symbol and the value of the symbol with
- the next higher value. If the `bsd' output format is used the
- size of the symbol is printed, rather than the value, and `-S'
- must be used in order both size and value to be printed.
-
-`--special-syms'
- Display symbols which have a target-specific special meaning.
- These symbols are usually used by the target for some special
- processing and are not normally helpful when included included in
- the normal symbol lists. For example for ARM targets this option
- would skip the mapping symbols used to mark transistions between
- ARM code, THUMB code and data.
-
-`-t RADIX'
-`--radix=RADIX'
- Use RADIX as the radix for printing the symbol values. It must be
- `d' for decimal, `o' for octal, or `x' for hexadecimal.
-
-`--target=BFDNAME'
- Specify an object code format other than your system's default
- format. *Note Target Selection::, for more information.
-
-`-u'
-`--undefined-only'
- Display only undefined symbols (those external to each object
- file).
-
-`--defined-only'
- Display only defined symbols for each object file.
-
-`-V'
-`--version'
- Show the version number of `nm' and exit.
-
-`-X'
- This option is ignored for compatibility with the AIX version of
- `nm'. It takes one parameter which must be the string `32_64'.
- The default mode of AIX `nm' corresponds to `-X 32', which is not
- supported by GNU `nm'.
-
-`--help'
- Show a summary of the options to `nm' and exit.
-
-
-File: binutils.info, Node: objcopy, Next: objdump, Prev: nm, Up: Top
-
-3 objcopy
-*********
-
- objcopy [`-F' BFDNAME|`--target='BFDNAME]
- [`-I' BFDNAME|`--input-target='BFDNAME]
- [`-O' BFDNAME|`--output-target='BFDNAME]
- [`-B' BFDARCH|`--binary-architecture='BFDARCH]
- [`-S'|`--strip-all']
- [`-g'|`--strip-debug']
- [`-K' SYMBOLNAME|`--keep-symbol='SYMBOLNAME]
- [`-N' SYMBOLNAME|`--strip-symbol='SYMBOLNAME]
- [`--strip-unneeded-symbol='SYMBOLNAME]
- [`-G' SYMBOLNAME|`--keep-global-symbol='SYMBOLNAME]
- [`-L' SYMBOLNAME|`--localize-symbol='SYMBOLNAME]
- [`--globalize-symbol='SYMBOLNAME]
- [`-W' SYMBOLNAME|`--weaken-symbol='SYMBOLNAME]
- [`-w'|`--wildcard']
- [`-x'|`--discard-all']
- [`-X'|`--discard-locals']
- [`-b' BYTE|`--byte='BYTE]
- [`-i' INTERLEAVE|`--interleave='INTERLEAVE]
- [`-j' SECTIONNAME|`--only-section='SECTIONNAME]
- [`-R' SECTIONNAME|`--remove-section='SECTIONNAME]
- [`-p'|`--preserve-dates']
- [`--debugging']
- [`--gap-fill='VAL]
- [`--pad-to='ADDRESS]
- [`--set-start='VAL]
- [`--adjust-start='INCR]
- [`--change-addresses='INCR]
- [`--change-section-address' SECTION{=,+,-}VAL]
- [`--change-section-lma' SECTION{=,+,-}VAL]
- [`--change-section-vma' SECTION{=,+,-}VAL]
- [`--change-warnings'] [`--no-change-warnings']
- [`--set-section-flags' SECTION=FLAGS]
- [`--add-section' SECTIONNAME=FILENAME]
- [`--rename-section' OLDNAME=NEWNAME[,FLAGS]]
- [`--change-leading-char'] [`--remove-leading-char']
- [`--srec-len='IVAL] [`--srec-forceS3']
- [`--redefine-sym' OLD=NEW]
- [`--redefine-syms='FILENAME]
- [`--weaken']
- [`--keep-symbols='FILENAME]
- [`--strip-symbols='FILENAME]
- [`--strip-unneeded-symbols='FILENAME]
- [`--keep-global-symbols='FILENAME]
- [`--localize-symbols='FILENAME]
- [`--globalize-symbols='FILENAME]
- [`--weaken-symbols='FILENAME]
- [`--alt-machine-code='INDEX]
- [`--prefix-symbols='STRING]
- [`--prefix-sections='STRING]
- [`--prefix-alloc-sections='STRING]
- [`--add-gnu-debuglink='PATH-TO-FILE]
- [`--keep-file-symbols']
- [`--only-keep-debug']
- [`--writable-text']
- [`--readonly-text']
- [`--pure']
- [`--impure']
- [`-v'|`--verbose']
- [`-V'|`--version']
- [`--help'] [`--info']
- INFILE [OUTFILE]
-
- The GNU `objcopy' utility copies the contents of an object file to
-another. `objcopy' uses the GNU BFD Library to read and write the
-object files. It can write the destination object file in a format
-different from that of the source object file. The exact behavior of
-`objcopy' is controlled by command-line options. Note that `objcopy'
-should be able to copy a fully linked file between any two formats.
-However, copying a relocatable object file between any two formats may
-not work as expected.
-
- `objcopy' creates temporary files to do its translations and deletes
-them afterward. `objcopy' uses BFD to do all its translation work; it
-has access to all the formats described in BFD and thus is able to
-recognize most formats without being told explicitly. *Note BFD:
-(ld.info)BFD.
-
- `objcopy' can be used to generate S-records by using an output
-target of `srec' (e.g., use `-O srec').
-
- `objcopy' can be used to generate a raw binary file by using an
-output target of `binary' (e.g., use `-O binary'). When `objcopy'
-generates a raw binary file, it will essentially produce a memory dump
-of the contents of the input object file. All symbols and relocation
-information will be discarded. The memory dump will start at the load
-address of the lowest section copied into the output file.
-
- When generating an S-record or a raw binary file, it may be helpful
-to use `-S' to remove sections containing debugging information. In
-some cases `-R' will be useful to remove sections which contain
-information that is not needed by the binary file.
-
- Note--`objcopy' is not able to change the endianness of its input
-files. If the input format has an endianness (some formats do not),
-`objcopy' can only copy the inputs into file formats that have the same
-endianness or which have no endianness (e.g., `srec').
-
-`INFILE'
-`OUTFILE'
- The input and output files, respectively. If you do not specify
- OUTFILE, `objcopy' creates a temporary file and destructively
- renames the result with the name of INFILE.
-
-`-I BFDNAME'
-`--input-target=BFDNAME'
- Consider the source file's object format to be BFDNAME, rather than
- attempting to deduce it. *Note Target Selection::, for more
- information.
-
-`-O BFDNAME'
-`--output-target=BFDNAME'
- Write the output file using the object format BFDNAME. *Note
- Target Selection::, for more information.
-
-`-F BFDNAME'
-`--target=BFDNAME'
- Use BFDNAME as the object format for both the input and the output
- file; i.e., simply transfer data from source to destination with no
- translation. *Note Target Selection::, for more information.
-
-`-B BFDARCH'
-`--binary-architecture=BFDARCH'
- Useful when transforming a raw binary input file into an object
- file. In this case the output architecture can be set to BFDARCH.
- This option will be ignored if the input file has a known BFDARCH.
- You can access this binary data inside a program by referencing
- the special symbols that are created by the conversion process.
- These symbols are called _binary_OBJFILE_start,
- _binary_OBJFILE_end and _binary_OBJFILE_size. e.g. you can
- transform a picture file into an object file and then access it in
- your code using these symbols.
-
-`-j SECTIONNAME'
-`--only-section=SECTIONNAME'
- Copy only the named section from the input file to the output file.
- This option may be given more than once. Note that using this
- option inappropriately may make the output file unusable.
-
-`-R SECTIONNAME'
-`--remove-section=SECTIONNAME'
- Remove any section named SECTIONNAME from the output file. This
- option may be given more than once. Note that using this option
- inappropriately may make the output file unusable.
-
-`-S'
-`--strip-all'
- Do not copy relocation and symbol information from the source file.
-
-`-g'
-`--strip-debug'
- Do not copy debugging symbols or sections from the source file.
-
-`--strip-unneeded'
- Strip all symbols that are not needed for relocation processing.
-
-`-K SYMBOLNAME'
-`--keep-symbol=SYMBOLNAME'
- When stripping symbols, keep symbol SYMBOLNAME even if it would
- normally be stripped. This option may be given more than once.
-
-`-N SYMBOLNAME'
-`--strip-symbol=SYMBOLNAME'
- Do not copy symbol SYMBOLNAME from the source file. This option
- may be given more than once.
-
-`--strip-unneeded-symbol=SYMBOLNAME'
- Do not copy symbol SYMBOLNAME from the source file unless it is
- needed by a relocation. This option may be given more than once.
-
-`-G SYMBOLNAME'
-`--keep-global-symbol=SYMBOLNAME'
- Keep only symbol SYMBOLNAME global. Make all other symbols local
- to the file, so that they are not visible externally. This option
- may be given more than once.
-
-`-L SYMBOLNAME'
-`--localize-symbol=SYMBOLNAME'
- Make symbol SYMBOLNAME local to the file, so that it is not
- visible externally. This option may be given more than once.
-
-`-W SYMBOLNAME'
-`--weaken-symbol=SYMBOLNAME'
- Make symbol SYMBOLNAME weak. This option may be given more than
- once.
-
-`--globalize-symbol=SYMBOLNAME'
- Give symbol SYMBOLNAME global scoping so that it is visible
- outside of the file in which it is defined. This option may be
- given more than once.
-
-`-w'
-`--wildcard'
- Permit regular expressions in SYMBOLNAMEs used in other command
- line options. The question mark (?), asterisk (*), backslash (\)
- and square brackets ([]) operators can be used anywhere in the
- symbol name. If the first character of the symbol name is the
- exclamation point (!) then the sense of the switch is reversed for
- that symbol. For example:
-
- -w -W !foo -W fo*
-
- would cause objcopy to weaken all symbols that start with "fo"
- except for the symbol "foo".
-
-`-x'
-`--discard-all'
- Do not copy non-global symbols from the source file.
-
-`-X'
-`--discard-locals'
- Do not copy compiler-generated local symbols. (These usually
- start with `L' or `.'.)
-
-`-b BYTE'
-`--byte=BYTE'
- Keep only every BYTEth byte of the input file (header data is not
- affected). BYTE can be in the range from 0 to INTERLEAVE-1, where
- INTERLEAVE is given by the `-i' or `--interleave' option, or the
- default of 4. This option is useful for creating files to program
- ROM. It is typically used with an `srec' output target.
-
-`-i INTERLEAVE'
-`--interleave=INTERLEAVE'
- Only copy one out of every INTERLEAVE bytes. Select which byte to
- copy with the `-b' or `--byte' option. The default is 4.
- `objcopy' ignores this option if you do not specify either `-b' or
- `--byte'.
-
-`-p'
-`--preserve-dates'
- Set the access and modification dates of the output file to be the
- same as those of the input file.
-
-`--debugging'
- Convert debugging information, if possible. This is not the
- default because only certain debugging formats are supported, and
- the conversion process can be time consuming.
-
-`--gap-fill VAL'
- Fill gaps between sections with VAL. This operation applies to
- the _load address_ (LMA) of the sections. It is done by increasing
- the size of the section with the lower address, and filling in the
- extra space created with VAL.
-
-`--pad-to ADDRESS'
- Pad the output file up to the load address ADDRESS. This is done
- by increasing the size of the last section. The extra space is
- filled in with the value specified by `--gap-fill' (default zero).
-
-`--set-start VAL'
- Set the start address of the new file to VAL. Not all object file
- formats support setting the start address.
-
-`--change-start INCR'
-`--adjust-start INCR'
- Change the start address by adding INCR. Not all object file
- formats support setting the start address.
-
-`--change-addresses INCR'
-`--adjust-vma INCR'
- Change the VMA and LMA addresses of all sections, as well as the
- start address, by adding INCR. Some object file formats do not
- permit section addresses to be changed arbitrarily. Note that
- this does not relocate the sections; if the program expects
- sections to be loaded at a certain address, and this option is
- used to change the sections such that they are loaded at a
- different address, the program may fail.
-
-`--change-section-address SECTION{=,+,-}VAL'
-`--adjust-section-vma SECTION{=,+,-}VAL'
- Set or change both the VMA address and the LMA address of the named
- SECTION. If `=' is used, the section address is set to VAL.
- Otherwise, VAL is added to or subtracted from the section address.
- See the comments under `--change-addresses', above. If SECTION
- does not exist in the input file, a warning will be issued, unless
- `--no-change-warnings' is used.
-
-`--change-section-lma SECTION{=,+,-}VAL'
- Set or change the LMA address of the named SECTION. The LMA
- address is the address where the section will be loaded into
- memory at program load time. Normally this is the same as the VMA
- address, which is the address of the section at program run time,
- but on some systems, especially those where a program is held in
- ROM, the two can be different. If `=' is used, the section
- address is set to VAL. Otherwise, VAL is added to or subtracted
- from the section address. See the comments under
- `--change-addresses', above. If SECTION does not exist in the
- input file, a warning will be issued, unless
- `--no-change-warnings' is used.
-
-`--change-section-vma SECTION{=,+,-}VAL'
- Set or change the VMA address of the named SECTION. The VMA
- address is the address where the section will be located once the
- program has started executing. Normally this is the same as the
- LMA address, which is the address where the section will be loaded
- into memory, but on some systems, especially those where a program
- is held in ROM, the two can be different. If `=' is used, the
- section address is set to VAL. Otherwise, VAL is added to or
- subtracted from the section address. See the comments under
- `--change-addresses', above. If SECTION does not exist in the
- input file, a warning will be issued, unless
- `--no-change-warnings' is used.
-
-`--change-warnings'
-`--adjust-warnings'
- If `--change-section-address' or `--change-section-lma' or
- `--change-section-vma' is used, and the named section does not
- exist, issue a warning. This is the default.
-
-`--no-change-warnings'
-`--no-adjust-warnings'
- Do not issue a warning if `--change-section-address' or
- `--adjust-section-lma' or `--adjust-section-vma' is used, even if
- the named section does not exist.
-
-`--set-section-flags SECTION=FLAGS'
- Set the flags for the named section. The FLAGS argument is a
- comma separated string of flag names. The recognized names are
- `alloc', `contents', `load', `noload', `readonly', `code', `data',
- `rom', `share', and `debug'. You can set the `contents' flag for
- a section which does not have contents, but it is not meaningful
- to clear the `contents' flag of a section which does have
- contents-just remove the section instead. Not all flags are
- meaningful for all object file formats.
-
-`--add-section SECTIONNAME=FILENAME'
- Add a new section named SECTIONNAME while copying the file. The
- contents of the new section are taken from the file FILENAME. The
- size of the section will be the size of the file. This option only
- works on file formats which can support sections with arbitrary
- names.
-
-`--rename-section OLDNAME=NEWNAME[,FLAGS]'
- Rename a section from OLDNAME to NEWNAME, optionally changing the
- section's flags to FLAGS in the process. This has the advantage
- over usng a linker script to perform the rename in that the output
- stays as an object file and does not become a linked executable.
-
- This option is particularly helpful when the input format is
- binary, since this will always create a section called .data. If
- for example, you wanted instead to create a section called .rodata
- containing binary data you could use the following command line to
- achieve it:
-
- objcopy -I binary -O <output_format> -B <architecture> \
- --rename-section .data=.rodata,alloc,load,readonly,data,contents \
- <input_binary_file> <output_object_file>
-
-`--change-leading-char'
- Some object file formats use special characters at the start of
- symbols. The most common such character is underscore, which
- compilers often add before every symbol. This option tells
- `objcopy' to change the leading character of every symbol when it
- converts between object file formats. If the object file formats
- use the same leading character, this option has no effect.
- Otherwise, it will add a character, or remove a character, or
- change a character, as appropriate.
-
-`--remove-leading-char'
- If the first character of a global symbol is a special symbol
- leading character used by the object file format, remove the
- character. The most common symbol leading character is
- underscore. This option will remove a leading underscore from all
- global symbols. This can be useful if you want to link together
- objects of different file formats with different conventions for
- symbol names. This is different from `--change-leading-char'
- because it always changes the symbol name when appropriate,
- regardless of the object file format of the output file.
-
-`--srec-len=IVAL'
- Meaningful only for srec output. Set the maximum length of the
- Srecords being produced to IVAL. This length covers both address,
- data and crc fields.
-
-`--srec-forceS3'
- Meaningful only for srec output. Avoid generation of S1/S2
- records, creating S3-only record format.
-
-`--redefine-sym OLD=NEW'
- Change the name of a symbol OLD, to NEW. This can be useful when
- one is trying link two things together for which you have no
- source, and there are name collisions.
-
-`--redefine-syms=FILENAME'
- Apply `--redefine-sym' to each symbol pair "OLD NEW" listed in the
- file FILENAME. FILENAME is simply a flat file, with one symbol
- pair per line. Line comments may be introduced by the hash
- character. This option may be given more than once.
-
-`--weaken'
- Change all global symbols in the file to be weak. This can be
- useful when building an object which will be linked against other
- objects using the `-R' option to the linker. This option is only
- effective when using an object file format which supports weak
- symbols.
-
-`--keep-symbols=FILENAME'
- Apply `--keep-symbol' option to each symbol listed in the file
- FILENAME. FILENAME is simply a flat file, with one symbol name
- per line. Line comments may be introduced by the hash character.
- This option may be given more than once.
-
-`--strip-symbols=FILENAME'
- Apply `--strip-symbol' option to each symbol listed in the file
- FILENAME. FILENAME is simply a flat file, with one symbol name
- per line. Line comments may be introduced by the hash character.
- This option may be given more than once.
-
-`--strip-unneeded-symbols=FILENAME'
- Apply `--strip-unneeded-symbol' option to each symbol listed in
- the file FILENAME. FILENAME is simply a flat file, with one
- symbol name per line. Line comments may be introduced by the hash
- character. This option may be given more than once.
-
-`--keep-global-symbols=FILENAME'
- Apply `--keep-global-symbol' option to each symbol listed in the
- file FILENAME. FILENAME is simply a flat file, with one symbol
- name per line. Line comments may be introduced by the hash
- character. This option may be given more than once.
-
-`--localize-symbols=FILENAME'
- Apply `--localize-symbol' option to each symbol listed in the file
- FILENAME. FILENAME is simply a flat file, with one symbol name
- per line. Line comments may be introduced by the hash character.
- This option may be given more than once.
-
-`--globalize-symbols=FILENAME'
- Apply `--globalize-symbol' option to each symbol listed in the file
- FILENAME. FILENAME is simply a flat file, with one symbol name
- per line. Line comments may be introduced by the hash character.
- This option may be given more than once.
-
-`--weaken-symbols=FILENAME'
- Apply `--weaken-symbol' option to each symbol listed in the file
- FILENAME. FILENAME is simply a flat file, with one symbol name
- per line. Line comments may be introduced by the hash character.
- This option may be given more than once.
-
-`--alt-machine-code=INDEX'
- If the output architecture has alternate machine codes, use the
- INDEXth code instead of the default one. This is useful in case a
- machine is assigned an official code and the tool-chain adopts the
- new code, but other applications still depend on the original code
- being used. For ELF based architectures if the INDEX alternative
- does not exist then the value is treated as an absolute number to
- be stored in the e_machine field of the ELF header.
-
-`--writable-text'
- Mark the output text as writable. This option isn't meaningful
- for all object file formats.
-
-`--readonly-text'
- Make the output text write protected. This option isn't
- meaningful for all object file formats.
-
-`--pure'
- Mark the output file as demand paged. This option isn't
- meaningful for all object file formats.
-
-`--impure'
- Mark the output file as impure. This option isn't meaningful for
- all object file formats.
-
-`--prefix-symbols=STRING'
- Prefix all symbols in the output file with STRING.
-
-`--prefix-sections=STRING'
- Prefix all section names in the output file with STRING.
-
-`--prefix-alloc-sections=STRING'
- Prefix all the names of all allocated sections in the output file
- with STRING.
-
-`--add-gnu-debuglink=PATH-TO-FILE'
- Creates a .gnu_debuglink section which contains a reference to
- PATH-TO-FILE and adds it to the output file.
-
-`--keep-file-symbols'
- When stripping a file, perhaps with `--strip-debug' or
- `--strip-unneeded', retain any symbols specifying source file
- names, which would otherwise get stripped.
-
-`--only-keep-debug'
- Strip a file, removing contents of any sections that would not be
- stripped by `--strip-debug' and leaving the debugging sections
- intact.
-
- The intention is that this option will be used in conjunction with
- `--add-gnu-debuglink' to create a two part executable. One a
- stripped binary which will occupy less space in RAM and in a
- distribution and the second a debugging information file which is
- only needed if debugging abilities are required. The suggested
- procedure to create these files is as follows:
-
- 1. Link the executable as normal. Assuming that is is called
- `foo' then...
-
- 2. Run `objcopy --only-keep-debug foo foo.dbg' to create a file
- containing the debugging info.
-
- 3. Run `objcopy --strip-debug foo' to create a stripped
- executable.
-
- 4. Run `objcopy --add-gnu-debuglink=foo.dbg foo' to add a link
- to the debugging info into the stripped executable.
-
- Note - the choice of `.dbg' as an extension for the debug info
- file is arbitrary. Also the `--only-keep-debug' step is optional.
- You could instead do this:
-
- 1. Link the executable as normal.
-
- 2. Copy `foo' to `foo.full'
-
- 3. Run `objcopy --strip-debug foo'
-
- 4. Run `objcopy --add-gnu-debuglink=foo.full foo'
-
- i.e. the file pointed to by the `--add-gnu-debuglink' can be the
- full executable. It does not have to be a file created by the
- `--only-keep-debug' switch.
-
-`-V'
-`--version'
- Show the version number of `objcopy'.
-
-`-v'
-`--verbose'
- Verbose output: list all object files modified. In the case of
- archives, `objcopy -V' lists all members of the archive.
-
-`--help'
- Show a summary of the options to `objcopy'.
-
-`--info'
- Display a list showing all architectures and object formats
- available.
-
-
-File: binutils.info, Node: objdump, Next: ranlib, Prev: objcopy, Up: Top
-
-4 objdump
-*********
-
- objdump [`-a'|`--archive-headers']
- [`-b' BFDNAME|`--target=BFDNAME']
- [`-C'|`--demangle'[=STYLE] ]
- [`-d'|`--disassemble']
- [`-D'|`--disassemble-all']
- [`-z'|`--disassemble-zeroes']
- [`-EB'|`-EL'|`--endian='{big | little }]
- [`-f'|`--file-headers']
- [`--file-start-context']
- [`-g'|`--debugging']
- [`-e'|`--debugging-tags']
- [`-h'|`--section-headers'|`--headers']
- [`-i'|`--info']
- [`-j' SECTION|`--section='SECTION]
- [`-l'|`--line-numbers']
- [`-S'|`--source']
- [`-m' MACHINE|`--architecture='MACHINE]
- [`-M' OPTIONS|`--disassembler-options='OPTIONS]
- [`-p'|`--private-headers']
- [`-r'|`--reloc']
- [`-R'|`--dynamic-reloc']
- [`-s'|`--full-contents']
- [`-W'|`--dwarf']
- [`-G'|`--stabs']
- [`-t'|`--syms']
- [`-T'|`--dynamic-syms']
- [`-x'|`--all-headers']
- [`-w'|`--wide']
- [`--start-address='ADDRESS]
- [`--stop-address='ADDRESS]
- [`--prefix-addresses']
- [`--[no-]show-raw-insn']
- [`--adjust-vma='OFFSET]
- [`--special-syms']
- [`-V'|`--version']
- [`-H'|`--help']
- OBJFILE...
-
- `objdump' displays information about one or more object files. The
-options control what particular information to display. This
-information is mostly useful to programmers who are working on the
-compilation tools, as opposed to programmers who just want their
-program to compile and work.
-
- OBJFILE... are the object files to be examined. When you specify
-archives, `objdump' shows information on each of the member object
-files.
-
- The long and short forms of options, shown here as alternatives, are
-equivalent. At least one option from the list
-`-a,-d,-D,-e,-f,-g,-G,-h,-H,-p,-r,-R,-s,-S,-t,-T,-V,-x' must be given.
-
-`-a'
-`--archive-header'
- If any of the OBJFILE files are archives, display the archive
- header information (in a format similar to `ls -l'). Besides the
- information you could list with `ar tv', `objdump -a' shows the
- object file format of each archive member.
-
-`--adjust-vma=OFFSET'
- When dumping information, first add OFFSET to all the section
- addresses. This is useful if the section addresses do not
- correspond to the symbol table, which can happen when putting
- sections at particular addresses when using a format which can not
- represent section addresses, such as a.out.
-
-`-b BFDNAME'
-`--target=BFDNAME'
- Specify that the object-code format for the object files is
- BFDNAME. This option may not be necessary; OBJDUMP can
- automatically recognize many formats.
-
- For example,
- objdump -b oasys -m vax -h fu.o
- displays summary information from the section headers (`-h') of
- `fu.o', which is explicitly identified (`-m') as a VAX object file
- in the format produced by Oasys compilers. You can list the
- formats available with the `-i' option. *Note Target Selection::,
- for more information.
-
-`-C'
-`--demangle[=STYLE]'
- Decode ("demangle") low-level symbol names into user-level names.
- Besides removing any initial underscore prepended by the system,
- this makes C++ function names readable. Different compilers have
- different mangling styles. The optional demangling style argument
- can be used to choose an appropriate demangling style for your
- compiler. *Note c++filt::, for more information on demangling.
-
-`-g'
-`--debugging'
- Display debugging information. This attempts to parse debugging
- information stored in the file and print it out using a C like
- syntax. Only certain types of debugging information have been
- implemented. Some other types are supported by `readelf -w'.
- *Note readelf::.
-
-`-e'
-`--debugging-tags'
- Like `-g', but the information is generated in a format compatible
- with ctags tool.
-
-`-d'
-`--disassemble'
- Display the assembler mnemonics for the machine instructions from
- OBJFILE. This option only disassembles those sections which are
- expected to contain instructions.
-
-`-D'
-`--disassemble-all'
- Like `-d', but disassemble the contents of all sections, not just
- those expected to contain instructions.
-
-`--prefix-addresses'
- When disassembling, print the complete address on each line. This
- is the older disassembly format.
-
-`-EB'
-`-EL'
-`--endian={big|little}'
- Specify the endianness of the object files. This only affects
- disassembly. This can be useful when disassembling a file format
- which does not describe endianness information, such as S-records.
-
-`-f'
-`--file-headers'
- Display summary information from the overall header of each of the
- OBJFILE files.
-
-`--file-start-context'
- Specify that when displaying interlisted source code/disassembly
- (assumes `-S') from a file that has not yet been displayed, extend
- the context to the start of the file.
-
-`-h'
-`--section-headers'
-`--headers'
- Display summary information from the section headers of the object
- file.
-
- File segments may be relocated to nonstandard addresses, for
- example by using the `-Ttext', `-Tdata', or `-Tbss' options to
- `ld'. However, some object file formats, such as a.out, do not
- store the starting address of the file segments. In those
- situations, although `ld' relocates the sections correctly, using
- `objdump -h' to list the file section headers cannot show the
- correct addresses. Instead, it shows the usual addresses, which
- are implicit for the target.
-
-`-H'
-`--help'
- Print a summary of the options to `objdump' and exit.
-
-`-i'
-`--info'
- Display a list showing all architectures and object formats
- available for specification with `-b' or `-m'.
-
-`-j NAME'
-`--section=NAME'
- Display information only for section NAME.
-
-`-l'
-`--line-numbers'
- Label the display (using debugging information) with the filename
- and source line numbers corresponding to the object code or relocs
- shown. Only useful with `-d', `-D', or `-r'.
-
-`-m MACHINE'
-`--architecture=MACHINE'
- Specify the architecture to use when disassembling object files.
- This can be useful when disassembling object files which do not
- describe architecture information, such as S-records. You can
- list the available architectures with the `-i' option.
-
-`-M OPTIONS'
-`--disassembler-options=OPTIONS'
- Pass target specific information to the disassembler. Only
- supported on some targets. If it is necessary to specify more
- than one disassembler option then multiple `-M' options can be
- used or can be placed together into a comma separated list.
-
- If the target is an ARM architecture then this switch can be used
- to select which register name set is used during disassembler.
- Specifying `-M reg-names-std' (the default) will select the
- register names as used in ARM's instruction set documentation, but
- with register 13 called 'sp', register 14 called 'lr' and register
- 15 called 'pc'. Specifying `-M reg-names-apcs' will select the
- name set used by the ARM Procedure Call Standard, whilst
- specifying `-M reg-names-raw' will just use `r' followed by the
- register number.
-
- There are also two variants on the APCS register naming scheme
- enabled by `-M reg-names-atpcs' and `-M reg-names-special-atpcs'
- which use the ARM/Thumb Procedure Call Standard naming
- conventions. (Either with the normal register names or the
- special register names).
-
- This option can also be used for ARM architectures to force the
- disassembler to interpret all instructions as Thumb instructions by
- using the switch `--disassembler-options=force-thumb'. This can be
- useful when attempting to disassemble thumb code produced by other
- compilers.
-
- For the x86, some of the options duplicate functions of the `-m'
- switch, but allow finer grained control. Multiple selections from
- the following may be specified as a comma separated string.
- `x86-64', `i386' and `i8086' select disassembly for the given
- architecture. `intel' and `att' select between intel syntax mode
- and AT&T syntax mode. `addr32', `addr16', `data32' and `data16'
- specify the default address size and operand size. These four
- options will be overridden if `x86-64', `i386' or `i8086' appear
- later in the option string. Lastly, `suffix', when in AT&T mode,
- instructs the disassembler to print a mnemonic suffix even when the
- suffix could be inferred by the operands.
-
- For PPC, `booke', `booke32' and `booke64' select disassembly of
- BookE instructions. `32' and `64' select PowerPC and PowerPC64
- disassembly, respectively. `e300' selects disassembly for the
- e300 family.
-
- For MIPS, this option controls the printing of instruction
- mneumonic names and register names in disassembled instructions.
- Multiple selections from the following may be specified as a comma
- separated string, and invalid options are ignored:
-
- `no-aliases'
- Print the 'raw' instruction mneumonic instead of some pseudo
- instruction mneumonic. I.E. print 'daddu' or 'or' instead of
- 'move', 'sll' instead of 'nop', etc.
-
- `gpr-names=ABI'
- Print GPR (general-purpose register) names as appropriate for
- the specified ABI. By default, GPR names are selected
- according to the ABI of the binary being disassembled.
-
- `fpr-names=ABI'
- Print FPR (floating-point register) names as appropriate for
- the specified ABI. By default, FPR numbers are printed
- rather than names.
-
- `cp0-names=ARCH'
- Print CP0 (system control coprocessor; coprocessor 0)
- register names as appropriate for the CPU or architecture
- specified by ARCH. By default, CP0 register names are
- selected according to the architecture and CPU of the binary
- being disassembled.
-
- `hwr-names=ARCH'
- Print HWR (hardware register, used by the `rdhwr'
- instruction) names as appropriate for the CPU or architecture
- specified by ARCH. By default, HWR names are selected
- according to the architecture and CPU of the binary being
- disassembled.
-
- `reg-names=ABI'
- Print GPR and FPR names as appropriate for the selected ABI.
-
- `reg-names=ARCH'
- Print CPU-specific register names (CP0 register and HWR names)
- as appropriate for the selected CPU or architecture.
-
- For any of the options listed above, ABI or ARCH may be specified
- as `numeric' to have numbers printed rather than names, for the
- selected types of registers. You can list the available values of
- ABI and ARCH using the `--help' option.
-
- For VAX, you can specify function entry addresses with `-M
- entry:0xf00ba'. You can use this multiple times to properly
- disassemble VAX binary files that don't contain symbol tables (like
- ROM dumps). In these cases, the function entry mask would
- otherwise be decoded as VAX instructions, which would probably
- lead the the rest of the function being wrongly disassembled.
-
-`-p'
-`--private-headers'
- Print information that is specific to the object file format. The
- exact information printed depends upon the object file format.
- For some object file formats, no additional information is printed.
-
-`-r'
-`--reloc'
- Print the relocation entries of the file. If used with `-d' or
- `-D', the relocations are printed interspersed with the
- disassembly.
-
-`-R'
-`--dynamic-reloc'
- Print the dynamic relocation entries of the file. This is only
- meaningful for dynamic objects, such as certain types of shared
- libraries.
-
-`-s'
-`--full-contents'
- Display the full contents of any sections requested. By default
- all non-empty sections are displayed.
-
-`-S'
-`--source'
- Display source code intermixed with disassembly, if possible.
- Implies `-d'.
-
-`--show-raw-insn'
- When disassembling instructions, print the instruction in hex as
- well as in symbolic form. This is the default except when
- `--prefix-addresses' is used.
-
-`--no-show-raw-insn'
- When disassembling instructions, do not print the instruction
- bytes. This is the default when `--prefix-addresses' is used.
-
-`-W'
-`--dwarf'
- Displays the contents of the DWARF debug sections in the file, if
- any are present.
-
-`-G'
-`--stabs'
- Display the full contents of any sections requested. Display the
- contents of the .stab and .stab.index and .stab.excl sections from
- an ELF file. This is only useful on systems (such as Solaris 2.0)
- in which `.stab' debugging symbol-table entries are carried in an
- ELF section. In most other file formats, debugging symbol-table
- entries are interleaved with linkage symbols, and are visible in
- the `--syms' output. For more information on stabs symbols, see
- *Note Stabs: (stabs.info)Top.
-
-`--start-address=ADDRESS'
- Start displaying data at the specified address. This affects the
- output of the `-d', `-r' and `-s' options.
-
-`--stop-address=ADDRESS'
- Stop displaying data at the specified address. This affects the
- output of the `-d', `-r' and `-s' options.
-
-`-t'
-`--syms'
- Print the symbol table entries of the file. This is similar to
- the information provided by the `nm' program.
-
-`-T'
-`--dynamic-syms'
- Print the dynamic symbol table entries of the file. This is only
- meaningful for dynamic objects, such as certain types of shared
- libraries. This is similar to the information provided by the `nm'
- program when given the `-D' (`--dynamic') option.
-
-`--special-syms'
- When displaying symbols include those which the target considers
- to be special in some way and which would not normally be of
- interest to the user.
-
-`-V'
-`--version'
- Print the version number of `objdump' and exit.
-
-`-x'
-`--all-headers'
- Display all available header information, including the symbol
- table and relocation entries. Using `-x' is equivalent to
- specifying all of `-a -f -h -p -r -t'.
-
-`-w'
-`--wide'
- Format some lines for output devices that have more than 80
- columns. Also do not truncate symbol names when they are
- displayed.
-
-`-z'
-`--disassemble-zeroes'
- Normally the disassembly output will skip blocks of zeroes. This
- option directs the disassembler to disassemble those blocks, just
- like any other data.
-
-
-File: binutils.info, Node: ranlib, Next: readelf, Prev: objdump, Up: Top
-
-5 ranlib
-********
-
- ranlib [`-vV'] ARCHIVE
-
- `ranlib' generates an index to the contents of an archive and stores
-it in the archive. The index lists each symbol defined by a member of
-an archive that is a relocatable object file.
-
- You may use `nm -s' or `nm --print-armap' to list this index.
-
- An archive with such an index speeds up linking to the library and
-allows routines in the library to call each other without regard to
-their placement in the archive.
-
- The GNU `ranlib' program is another form of GNU `ar'; running
-`ranlib' is completely equivalent to executing `ar -s'. *Note ar::.
-
-`-v'
-`-V'
-`--version'
- Show the version number of `ranlib'.
-
-
-File: binutils.info, Node: size, Next: strings, Prev: readelf, Up: Top
-
-6 size
-******
-
- size [`-A'|`-B'|`--format='COMPATIBILITY]
- [`--help']
- [`-d'|`-o'|`-x'|`--radix='NUMBER]
- [`-t'|`--totals']
- [`--target='BFDNAME] [`-V'|`--version']
- [OBJFILE...]
-
- The GNU `size' utility lists the section sizes--and the total
-size--for each of the object or archive files OBJFILE in its argument
-list. By default, one line of output is generated for each object file
-or each module in an archive.
-
- OBJFILE... are the object files to be examined. If none are
-specified, the file `a.out' will be used.
-
- The command line options have the following meanings:
-
-`-A'
-`-B'
-`--format=COMPATIBILITY'
- Using one of these options, you can choose whether the output from
- GNU `size' resembles output from System V `size' (using `-A', or
- `--format=sysv'), or Berkeley `size' (using `-B', or
- `--format=berkeley'). The default is the one-line format similar
- to Berkeley's.
-
- Here is an example of the Berkeley (default) format of output from
- `size':
- $ size --format=Berkeley ranlib size
- text data bss dec hex filename
- 294880 81920 11592 388392 5ed28 ranlib
- 294880 81920 11888 388688 5ee50 size
-
- This is the same data, but displayed closer to System V
- conventions:
-
- $ size --format=SysV ranlib size
- ranlib :
- section size addr
- .text 294880 8192
- .data 81920 303104
- .bss 11592 385024
- Total 388392
-
-
- size :
- section size addr
- .text 294880 8192
- .data 81920 303104
- .bss 11888 385024
- Total 388688
-
-`--help'
- Show a summary of acceptable arguments and options.
-
-`-d'
-`-o'
-`-x'
-`--radix=NUMBER'
- Using one of these options, you can control whether the size of
- each section is given in decimal (`-d', or `--radix=10'); octal
- (`-o', or `--radix=8'); or hexadecimal (`-x', or `--radix=16').
- In `--radix=NUMBER', only the three values (8, 10, 16) are
- supported. The total size is always given in two radices; decimal
- and hexadecimal for `-d' or `-x' output, or octal and hexadecimal
- if you're using `-o'.
-
-`-t'
-`--totals'
- Show totals of all objects listed (Berkeley format listing mode
- only).
-
-`--target=BFDNAME'
- Specify that the object-code format for OBJFILE is BFDNAME. This
- option may not be necessary; `size' can automatically recognize
- many formats. *Note Target Selection::, for more information.
-
-`-V'
-`--version'
- Display the version number of `size'.
-
-
-File: binutils.info, Node: strings, Next: strip, Prev: size, Up: Top
-
-7 strings
-*********
-
- strings [`-afov'] [`-'MIN-LEN]
- [`-n' MIN-LEN] [`--bytes='MIN-LEN]
- [`-t' RADIX] [`--radix='RADIX]
- [`-e' ENCODING] [`--encoding='ENCODING]
- [`-'] [`--all'] [`--print-file-name']
- [`--target='BFDNAME]
- [`--help'] [`--version'] FILE...
-
- For each FILE given, GNU `strings' prints the printable character
-sequences that are at least 4 characters long (or the number given with
-the options below) and are followed by an unprintable character. By
-default, it only prints the strings from the initialized and loaded
-sections of object files; for other types of files, it prints the
-strings from the whole file.
-
- `strings' is mainly useful for determining the contents of non-text
-files.
-
-`-a'
-`--all'
-`-'
- Do not scan only the initialized and loaded sections of object
- files; scan the whole files.
-
-`-f'
-`--print-file-name'
- Print the name of the file before each string.
-
-`--help'
- Print a summary of the program usage on the standard output and
- exit.
-
-`-MIN-LEN'
-`-n MIN-LEN'
-`--bytes=MIN-LEN'
- Print sequences of characters that are at least MIN-LEN characters
- long, instead of the default 4.
-
-`-o'
- Like `-t o'. Some other versions of `strings' have `-o' act like
- `-t d' instead. Since we can not be compatible with both ways, we
- simply chose one.
-
-`-t RADIX'
-`--radix=RADIX'
- Print the offset within the file before each string. The single
- character argument specifies the radix of the offset--`o' for
- octal, `x' for hexadecimal, or `d' for decimal.
-
-`-e ENCODING'
-`--encoding=ENCODING'
- Select the character encoding of the strings that are to be found.
- Possible values for ENCODING are: `s' = single-7-bit-byte
- characters (ASCII, ISO 8859, etc., default), `S' =
- single-8-bit-byte characters, `b' = 16-bit bigendian, `l' = 16-bit
- littleendian, `B' = 32-bit bigendian, `L' = 32-bit littleendian.
- Useful for finding wide character strings.
-
-`--target=BFDNAME'
- Specify an object code format other than your system's default
- format. *Note Target Selection::, for more information.
-
-`-v'
-`--version'
- Print the program version number on the standard output and exit.
-
-
-File: binutils.info, Node: strip, Next: c++filt, Prev: strings, Up: Top
-
-8 strip
-*******
-
- strip [`-F' BFDNAME |`--target='BFDNAME]
- [`-I' BFDNAME |`--input-target='BFDNAME]
- [`-O' BFDNAME |`--output-target='BFDNAME]
- [`-s'|`--strip-all']
- [`-S'|`-g'|`-d'|`--strip-debug']
- [`-K' SYMBOLNAME |`--keep-symbol='SYMBOLNAME]
- [`-N' SYMBOLNAME |`--strip-symbol='SYMBOLNAME]
- [`-w'|`--wildcard']
- [`-x'|`--discard-all'] [`-X' |`--discard-locals']
- [`-R' SECTIONNAME |`--remove-section='SECTIONNAME]
- [`-o' FILE] [`-p'|`--preserve-dates']
- [`--keep-file-symbols']
- [`--only-keep-debug']
- [`-v' |`--verbose'] [`-V'|`--version']
- [`--help'] [`--info']
- OBJFILE...
-
- GNU `strip' discards all symbols from object files OBJFILE. The
-list of object files may include archives. At least one object file
-must be given.
-
- `strip' modifies the files named in its argument, rather than
-writing modified copies under different names.
-
-`-F BFDNAME'
-`--target=BFDNAME'
- Treat the original OBJFILE as a file with the object code format
- BFDNAME, and rewrite it in the same format. *Note Target
- Selection::, for more information.
-
-`--help'
- Show a summary of the options to `strip' and exit.
-
-`--info'
- Display a list showing all architectures and object formats
- available.
-
-`-I BFDNAME'
-`--input-target=BFDNAME'
- Treat the original OBJFILE as a file with the object code format
- BFDNAME. *Note Target Selection::, for more information.
-
-`-O BFDNAME'
-`--output-target=BFDNAME'
- Replace OBJFILE with a file in the output format BFDNAME. *Note
- Target Selection::, for more information.
-
-`-R SECTIONNAME'
-`--remove-section=SECTIONNAME'
- Remove any section named SECTIONNAME from the output file. This
- option may be given more than once. Note that using this option
- inappropriately may make the output file unusable.
-
-`-s'
-`--strip-all'
- Remove all symbols.
-
-`-g'
-`-S'
-`-d'
-`--strip-debug'
- Remove debugging symbols only.
-
-`--strip-unneeded'
- Remove all symbols that are not needed for relocation processing.
-
-`-K SYMBOLNAME'
-`--keep-symbol=SYMBOLNAME'
- When stripping symbols, keep symbol SYMBOLNAME even if it would
- normally be stripped. This option may be given more than once.
-
-`-N SYMBOLNAME'
-`--strip-symbol=SYMBOLNAME'
- Remove symbol SYMBOLNAME from the source file. This option may be
- given more than once, and may be combined with strip options other
- than `-K'.
-
-`-o FILE'
- Put the stripped output in FILE, rather than replacing the
- existing file. When this argument is used, only one OBJFILE
- argument may be specified.
-
-`-p'
-`--preserve-dates'
- Preserve the access and modification dates of the file.
-
-`-w'
-`--wildcard'
- Permit regular expressions in SYMBOLNAMEs used in other command
- line options. The question mark (?), asterisk (*), backslash (\)
- and square brackets ([]) operators can be used anywhere in the
- symbol name. If the first character of the symbol name is the
- exclamation point (!) then the sense of the switch is reversed for
- that symbol. For example:
-
- -w -K !foo -K fo*
-
- would cause strip to only keep symbols that start with the letters
- "fo", but to discard the symbol "foo".
-
-`-x'
-`--discard-all'
- Remove non-global symbols.
-
-`-X'
-`--discard-locals'
- Remove compiler-generated local symbols. (These usually start
- with `L' or `.'.)
-
-`--keep-file-symbols'
- When stripping a file, perhaps with `--strip-debug' or
- `--strip-unneeded', retain any symbols specifying source file
- names, which would otherwise get stripped.
-
-`--only-keep-debug'
- Strip a file, removing any sections that would be stripped by
- `--strip-debug' and leaving the debugging sections.
-
- The intention is that this option will be used in conjunction with
- `--add-gnu-debuglink' to create a two part executable. One a
- stripped binary which will occupy less space in RAM and in a
- distribution and the second a debugging information file which is
- only needed if debugging abilities are required. The suggested
- procedure to create these files is as follows:
-
- 1. Link the executable as normal. Assuming that is is called
- `foo' then...
-
- 2. Run `objcopy --only-keep-debug foo foo.dbg' to create a file
- containing the debugging info.
-
- 3. Run `objcopy --strip-debug foo' to create a stripped
- executable.
-
- 4. Run `objcopy --add-gnu-debuglink=foo.dbg foo' to add a link
- to the debugging info into the stripped executable.
-
- Note - the choice of `.dbg' as an extension for the debug info
- file is arbitrary. Also the `--only-keep-debug' step is optional.
- You could instead do this:
-
- 1. Link the executable as normal.
-
- 2. Copy `foo' to `foo.full'
-
- 3. Run `strip --strip-debug foo'
-
- 4. Run `objcopy --add-gnu-debuglink=foo.full foo'
-
- ie the file pointed to by the `--add-gnu-debuglink' can be the
- full executable. It does not have to be a file created by the
- `--only-keep-debug' switch.
-
-`-V'
-`--version'
- Show the version number for `strip'.
-
-`-v'
-`--verbose'
- Verbose output: list all object files modified. In the case of
- archives, `strip -v' lists all members of the archive.
-
-
-File: binutils.info, Node: c++filt, Next: addr2line, Prev: strip, Up: Top
-
-9 c++filt
-*********
-
- c++filt [`-_'|`--strip-underscores']
- [`-n'|`--no-strip-underscores']
- [`-p'|`--no-params']
- [`-t'|`--types']
- [`-i'|`--no-verbose']
- [`-s' FORMAT|`--format='FORMAT]
- [`--help'] [`--version'] [SYMBOL...]
-
- The C++ and Java languages provide function overloading, which means
-that you can write many functions with the same name, providing that
-each function takes parameters of different types. In order to be able
-to distinguish these similarly named functions C++ and Java encode them
-into a low-level assembler name which uniquely identifies each
-different version. This process is known as "mangling". The `c++filt'
-(1) program does the inverse mapping: it decodes ("demangles") low-level
-names into user-level names so that they can be read.
-
- Every alphanumeric word (consisting of letters, digits, underscores,
-dollars, or periods) seen in the input is a potential mangled name. If
-the name decodes into a C++ name, the C++ name replaces the low-level
-name in the output, otherwise the original word is output. In this way
-you can pass an entire assembler source file, containing mangled names,
-through `c++filt' and see the same source file containing demangled
-names.
-
- You can also use `c++filt' to decipher individual symbols by passing
-them on the command line:
-
- c++filt SYMBOL
-
- If no SYMBOL arguments are given, `c++filt' reads symbol names from
-the standard input instead. All the results are printed on the
-standard output. The difference between reading names from the command
-line versus reading names from the standard input is that command line
-arguments are expected to be just mangled names and no checking is
-performed to seperate them from surrounding text. Thus for example:
-
- c++filt -n _Z1fv
-
- will work and demangle the name to "f()" whereas:
-
- c++filt -n _Z1fv,
-
- will not work. (Note the extra comma at the end of the mangled name
-which makes it invalid). This command however will work:
-
- echo _Z1fv, | c++filt -n
-
- and will display "f()," ie the demangled name followed by a trailing
-comma. This behaviour is because when the names are read from the
-standard input it is expected that they might be part of an assembler
-source file where there might be extra, extraneous characters trailing
-after a mangled name. eg:
-
- .type _Z1fv, @function
-
-`-_'
-`--strip-underscores'
- On some systems, both the C and C++ compilers put an underscore in
- front of every name. For example, the C name `foo' gets the
- low-level name `_foo'. This option removes the initial
- underscore. Whether `c++filt' removes the underscore by default
- is target dependent.
-
-`-j'
-`--java'
- Prints demangled names using Java syntax. The default is to use
- C++ syntax.
-
-`-n'
-`--no-strip-underscores'
- Do not remove the initial underscore.
-
-`-p'
-`--no-params'
- When demangling the name of a function, do not display the types of
- the function's parameters.
-
-`-t'
-`--types'
- Attempt to demangle types as well as function names. This is
- disabled by default since mangled types are normally only used
- internally in the compiler, and they can be confused with
- non-mangled names. eg a function called "a" treated as a mangled
- type name would be demangled to "signed char".
-
-`-i'
-`--no-verbose'
- Do not include implementation details (if any) in the demangled
- output.
-
-`-s FORMAT'
-`--format=FORMAT'
- `c++filt' can decode various methods of mangling, used by
- different compilers. The argument to this option selects which
- method it uses:
-
- `auto'
- Automatic selection based on executable (the default method)
-
- `gnu'
- the one used by the GNU C++ compiler (g++)
-
- `lucid'
- the one used by the Lucid compiler (lcc)
-
- `arm'
- the one specified by the C++ Annotated Reference Manual
-
- `hp'
- the one used by the HP compiler (aCC)
-
- `edg'
- the one used by the EDG compiler
-
- `gnu-v3'
- the one used by the GNU C++ compiler (g++) with the V3 ABI.
-
- `java'
- the one used by the GNU Java compiler (gcj)
-
- `gnat'
- the one used by the GNU Ada compiler (GNAT).
-
-`--help'
- Print a summary of the options to `c++filt' and exit.
-
-`--version'
- Print the version number of `c++filt' and exit.
-
- _Warning:_ `c++filt' is a new utility, and the details of its user
- interface are subject to change in future releases. In particular,
- a command-line option may be required in the the future to decode
- a name passed as an argument on the command line; in other words,
-
- c++filt SYMBOL
-
- may in a future release become
-
- c++filt OPTION SYMBOL
-
- ---------- Footnotes ----------
-
- (1) MS-DOS does not allow `+' characters in file names, so on MS-DOS
-this program is named `CXXFILT'.
-
-
-File: binutils.info, Node: addr2line, Next: nlmconv, Prev: c++filt, Up: Top
-
-10 addr2line
-************
-
- addr2line [`-b' BFDNAME|`--target='BFDNAME]
- [`-C'|`--demangle'[=STYLE]]
- [`-e' FILENAME|`--exe='FILENAME]
- [`-f'|`--functions'] [`-s'|`--basename']
- [`-i'|`--inlines']
- [`-j'|`--section='NAME]
- [`-H'|`--help'] [`-V'|`--version']
- [addr addr ...]
-
- `addr2line' translates addresses into file names and line numbers.
-Given an address in an executable or an offset in a section of a
-relocatable object, it uses the debugging information to figure out
-which file name and line number are associated with it.
-
- The executable or relocatable object to use is specified with the
-`-e' option. The default is the file `a.out'. The section in the
-relocatable object to use is specified with the `-j' option.
-
- `addr2line' has two modes of operation.
-
- In the first, hexadecimal addresses are specified on the command
-line, and `addr2line' displays the file name and line number for each
-address.
-
- In the second, `addr2line' reads hexadecimal addresses from standard
-input, and prints the file name and line number for each address on
-standard output. In this mode, `addr2line' may be used in a pipe to
-convert dynamically chosen addresses.
-
- The format of the output is `FILENAME:LINENO'. The file name and
-line number for each address is printed on a separate line. If the
-`-f' option is used, then each `FILENAME:LINENO' line is preceded by a
-`FUNCTIONNAME' line which is the name of the function containing the
-address.
-
- If the file name or function name can not be determined, `addr2line'
-will print two question marks in their place. If the line number can
-not be determined, `addr2line' will print 0.
-
- The long and short forms of options, shown here as alternatives, are
-equivalent.
-
-`-b BFDNAME'
-`--target=BFDNAME'
- Specify that the object-code format for the object files is
- BFDNAME.
-
-`-C'
-`--demangle[=STYLE]'
- Decode ("demangle") low-level symbol names into user-level names.
- Besides removing any initial underscore prepended by the system,
- this makes C++ function names readable. Different compilers have
- different mangling styles. The optional demangling style argument
- can be used to choose an appropriate demangling style for your
- compiler. *Note c++filt::, for more information on demangling.
-
-`-e FILENAME'
-`--exe=FILENAME'
- Specify the name of the executable for which addresses should be
- translated. The default file is `a.out'.
-
-`-f'
-`--functions'
- Display function names as well as file and line number information.
-
-`-s'
-`--basenames'
- Display only the base of each file name.
-
-`-i'
-`--inlines'
- If the address belongs to a function that was inlined, the source
- information for all enclosing scopes back to the first non-inlined
- function will also be printed. For example, if `main' inlines
- `callee1' which inlines `callee2', and address is from `callee2',
- the source information for `callee1' and `main' will also be
- printed.
-
-`-j'
-`--section'
- Read offsets relative to the specified section instead of absolute
- addresses.
-
-
-File: binutils.info, Node: nlmconv, Next: windres, Prev: addr2line, Up: Top
-
-11 nlmconv
-**********
-
-`nlmconv' converts a relocatable object file into a NetWare Loadable
-Module.
-
- _Warning:_ `nlmconv' is not always built as part of the binary
- utilities, since it is only useful for NLM targets.
-
- nlmconv [`-I' BFDNAME|`--input-target='BFDNAME]
- [`-O' BFDNAME|`--output-target='BFDNAME]
- [`-T' HEADERFILE|`--header-file='HEADERFILE]
- [`-d'|`--debug'] [`-l' LINKER|`--linker='LINKER]
- [`-h'|`--help'] [`-V'|`--version']
- INFILE OUTFILE
-
- `nlmconv' converts the relocatable `i386' object file INFILE into
-the NetWare Loadable Module OUTFILE, optionally reading HEADERFILE for
-NLM header information. For instructions on writing the NLM command
-file language used in header files, see the `linkers' section,
-`NLMLINK' in particular, of the `NLM Development and Tools Overview',
-which is part of the NLM Software Developer's Kit ("NLM SDK"),
-available from Novell, Inc. `nlmconv' uses the GNU Binary File
-Descriptor library to read INFILE; see *Note BFD: (ld.info)BFD, for
-more information.
-
- `nlmconv' can perform a link step. In other words, you can list
-more than one object file for input if you list them in the definitions
-file (rather than simply specifying one input file on the command line).
-In this case, `nlmconv' calls the linker for you.
-
-`-I BFDNAME'
-`--input-target=BFDNAME'
- Object format of the input file. `nlmconv' can usually determine
- the format of a given file (so no default is necessary). *Note
- Target Selection::, for more information.
-
-`-O BFDNAME'
-`--output-target=BFDNAME'
- Object format of the output file. `nlmconv' infers the output
- format based on the input format, e.g. for a `i386' input file the
- output format is `nlm32-i386'. *Note Target Selection::, for more
- information.
-
-`-T HEADERFILE'
-`--header-file=HEADERFILE'
- Reads HEADERFILE for NLM header information. For instructions on
- writing the NLM command file language used in header files, see
- see the `linkers' section, of the `NLM Development and Tools
- Overview', which is part of the NLM Software Developer's Kit,
- available from Novell, Inc.
-
-`-d'
-`--debug'
- Displays (on standard error) the linker command line used by
- `nlmconv'.
-
-`-l LINKER'
-`--linker=LINKER'
- Use LINKER for any linking. LINKER can be an absolute or a
- relative pathname.
-
-`-h'
-`--help'
- Prints a usage summary.
-
-`-V'
-`--version'
- Prints the version number for `nlmconv'.
-
-
-File: binutils.info, Node: windres, Next: dlltool, Prev: nlmconv, Up: Top
-
-12 windres
-**********
-
-`windres' may be used to manipulate Windows resources.
-
- _Warning:_ `windres' is not always built as part of the binary
- utilities, since it is only useful for Windows targets.
-
- windres [options] [input-file] [output-file]
-
- `windres' reads resources from an input file and copies them into an
-output file. Either file may be in one of three formats:
-
-`rc'
- A text format read by the Resource Compiler.
-
-`res'
- A binary format generated by the Resource Compiler.
-
-`coff'
- A COFF object or executable.
-
- The exact description of these different formats is available in
-documentation from Microsoft.
-
- When `windres' converts from the `rc' format to the `res' format, it
-is acting like the Windows Resource Compiler. When `windres' converts
-from the `res' format to the `coff' format, it is acting like the
-Windows `CVTRES' program.
-
- When `windres' generates an `rc' file, the output is similar but not
-identical to the format expected for the input. When an input `rc'
-file refers to an external filename, an output `rc' file will instead
-include the file contents.
-
- If the input or output format is not specified, `windres' will guess
-based on the file name, or, for the input file, the file contents. A
-file with an extension of `.rc' will be treated as an `rc' file, a file
-with an extension of `.res' will be treated as a `res' file, and a file
-with an extension of `.o' or `.exe' will be treated as a `coff' file.
-
- If no output file is specified, `windres' will print the resources
-in `rc' format to standard output.
-
- The normal use is for you to write an `rc' file, use `windres' to
-convert it to a COFF object file, and then link the COFF file into your
-application. This will make the resources described in the `rc' file
-available to Windows.
-
-`-i FILENAME'
-`--input FILENAME'
- The name of the input file. If this option is not used, then
- `windres' will use the first non-option argument as the input file
- name. If there are no non-option arguments, then `windres' will
- read from standard input. `windres' can not read a COFF file from
- standard input.
-
-`-o FILENAME'
-`--output FILENAME'
- The name of the output file. If this option is not used, then
- `windres' will use the first non-option argument, after any used
- for the input file name, as the output file name. If there is no
- non-option argument, then `windres' will write to standard output.
- `windres' can not write a COFF file to standard output. Note, for
- compatability with `rc' the option `-fo' is also accepted, but its
- use is not recommended.
-
-`-J FORMAT'
-`--input-format FORMAT'
- The input format to read. FORMAT may be `res', `rc', or `coff'.
- If no input format is specified, `windres' will guess, as
- described above.
-
-`-O FORMAT'
-`--output-format FORMAT'
- The output format to generate. FORMAT may be `res', `rc', or
- `coff'. If no output format is specified, `windres' will guess,
- as described above.
-
-`-F TARGET'
-`--target TARGET'
- Specify the BFD format to use for a COFF file as input or output.
- This is a BFD target name; you can use the `--help' option to see
- a list of supported targets. Normally `windres' will use the
- default format, which is the first one listed by the `--help'
- option. *Note Target Selection::.
-
-`--preprocessor PROGRAM'
- When `windres' reads an `rc' file, it runs it through the C
- preprocessor first. This option may be used to specify the
- preprocessor to use, including any leading arguments. The default
- preprocessor argument is `gcc -E -xc-header -DRC_INVOKED'.
-
-`-I DIRECTORY'
-`--include-dir DIRECTORY'
- Specify an include directory to use when reading an `rc' file.
- `windres' will pass this to the preprocessor as an `-I' option.
- `windres' will also search this directory when looking for files
- named in the `rc' file. If the argument passed to this command
- matches any of the supported FORMATS (as descrived in the `-J'
- option), it will issue a deprecation warning, and behave just like
- the `-J' option. New programs should not use this behaviour. If a
- directory happens to match a FORMAT, simple prefix it with `./' to
- disable the backward compatibility.
-
-`-D TARGET'
-`--define SYM[=VAL]'
- Specify a `-D' option to pass to the preprocessor when reading an
- `rc' file.
-
-`-U TARGET'
-`--undefine SYM'
- Specify a `-U' option to pass to the preprocessor when reading an
- `rc' file.
-
-`-r'
- Ignored for compatibility with rc.
-
-`-v'
- Enable verbose mode. This tells you what the preprocessor is if
- you didn't specify one.
-
-`-l VAL'
-
-`--language VAL'
- Specify the default language to use when reading an `rc' file.
- VAL should be a hexadecimal language code. The low eight bits are
- the language, and the high eight bits are the sublanguage.
-
-`--use-temp-file'
- Use a temporary file to instead of using popen to read the output
- of the preprocessor. Use this option if the popen implementation
- is buggy on the host (eg., certain non-English language versions
- of Windows 95 and Windows 98 are known to have buggy popen where
- the output will instead go the console).
-
-`--no-use-temp-file'
- Use popen, not a temporary file, to read the output of the
- preprocessor. This is the default behaviour.
-
-`-h'
-
-`--help'
- Prints a usage summary.
-
-`-V'
-
-`--version'
- Prints the version number for `windres'.
-
-`--yydebug'
- If `windres' is compiled with `YYDEBUG' defined as `1', this will
- turn on parser debugging.
-
-
-File: binutils.info, Node: dlltool, Next: Common Options, Prev: windres, Up: Top
-
-13 dlltool
-**********
-
-`dlltool' is used to create the files needed to create dynamic link
-libraries (DLLs) on systems which understand PE format image files such
-as Windows. A DLL contains an export table which contains information
-that the runtime loader needs to resolve references from a referencing
-program.
-
- The export table is generated by this program by reading in a `.def'
-file or scanning the `.a' and `.o' files which will be in the DLL. A
-`.o' file can contain information in special `.drectve' sections with
-export information.
-
- _Note:_ `dlltool' is not always built as part of the binary
- utilities, since it is only useful for those targets which support
- DLLs.
-
- dlltool [`-d'|`--input-def' DEF-FILE-NAME]
- [`-b'|`--base-file' BASE-FILE-NAME]
- [`-e'|`--output-exp' EXPORTS-FILE-NAME]
- [`-z'|`--output-def' DEF-FILE-NAME]
- [`-l'|`--output-lib' LIBRARY-FILE-NAME]
- [`--export-all-symbols'] [`--no-export-all-symbols']
- [`--exclude-symbols' LIST]
- [`--no-default-excludes']
- [`-S'|`--as' PATH-TO-ASSEMBLER] [`-f'|`--as-flags' OPTIONS]
- [`-D'|`--dllname' NAME] [`-m'|`--machine' MACHINE]
- [`-a'|`--add-indirect']
- [`-U'|`--add-underscore'] [`--add-stdcall-underscore']
- [`-k'|`--kill-at'] [`-A'|`--add-stdcall-alias']
- [`-p'|`--ext-prefix-alias' PREFIX]
- [`-x'|`--no-idata4'] [`-c'|`--no-idata5'] [`-i'|`--interwork']
- [`-n'|`--nodelete'] [`-t'|`--temp-prefix' PREFIX]
- [`-v'|`--verbose']
- [`-h'|`--help'] [`-V'|`--version']
- [object-file ...]
-
- `dlltool' reads its inputs, which can come from the `-d' and `-b'
-options as well as object files specified on the command line. It then
-processes these inputs and if the `-e' option has been specified it
-creates a exports file. If the `-l' option has been specified it
-creates a library file and if the `-z' option has been specified it
-creates a def file. Any or all of the `-e', `-l' and `-z' options can
-be present in one invocation of dlltool.
-
- When creating a DLL, along with the source for the DLL, it is
-necessary to have three other files. `dlltool' can help with the
-creation of these files.
-
- The first file is a `.def' file which specifies which functions are
-exported from the DLL, which functions the DLL imports, and so on. This
-is a text file and can be created by hand, or `dlltool' can be used to
-create it using the `-z' option. In this case `dlltool' will scan the
-object files specified on its command line looking for those functions
-which have been specially marked as being exported and put entries for
-them in the `.def' file it creates.
-
- In order to mark a function as being exported from a DLL, it needs to
-have an `-export:<name_of_function>' entry in the `.drectve' section of
-the object file. This can be done in C by using the asm() operator:
-
- asm (".section .drectve");
- asm (".ascii \"-export:my_func\"");
-
- int my_func (void) { ... }
-
- The second file needed for DLL creation is an exports file. This
-file is linked with the object files that make up the body of the DLL
-and it handles the interface between the DLL and the outside world.
-This is a binary file and it can be created by giving the `-e' option to
-`dlltool' when it is creating or reading in a `.def' file.
-
- The third file needed for DLL creation is the library file that
-programs will link with in order to access the functions in the DLL.
-This file can be created by giving the `-l' option to dlltool when it
-is creating or reading in a `.def' file.
-
- `dlltool' builds the library file by hand, but it builds the exports
-file by creating temporary files containing assembler statements and
-then assembling these. The `-S' command line option can be used to
-specify the path to the assembler that dlltool will use, and the `-f'
-option can be used to pass specific flags to that assembler. The `-n'
-can be used to prevent dlltool from deleting these temporary assembler
-files when it is done, and if `-n' is specified twice then this will
-prevent dlltool from deleting the temporary object files it used to
-build the library.
-
- Here is an example of creating a DLL from a source file `dll.c' and
-also creating a program (from an object file called `program.o') that
-uses that DLL:
-
- gcc -c dll.c
- dlltool -e exports.o -l dll.lib dll.o
- gcc dll.o exports.o -o dll.dll
- gcc program.o dll.lib -o program
-
- The command line options have the following meanings:
-
-`-d FILENAME'
-`--input-def FILENAME'
- Specifies the name of a `.def' file to be read in and processed.
-
-`-b FILENAME'
-`--base-file FILENAME'
- Specifies the name of a base file to be read in and processed. The
- contents of this file will be added to the relocation section in
- the exports file generated by dlltool.
-
-`-e FILENAME'
-`--output-exp FILENAME'
- Specifies the name of the export file to be created by dlltool.
-
-`-z FILENAME'
-`--output-def FILENAME'
- Specifies the name of the `.def' file to be created by dlltool.
-
-`-l FILENAME'
-`--output-lib FILENAME'
- Specifies the name of the library file to be created by dlltool.
-
-`--export-all-symbols'
- Treat all global and weak defined symbols found in the input object
- files as symbols to be exported. There is a small list of symbols
- which are not exported by default; see the `--no-default-excludes'
- option. You may add to the list of symbols to not export by using
- the `--exclude-symbols' option.
-
-`--no-export-all-symbols'
- Only export symbols explicitly listed in an input `.def' file or in
- `.drectve' sections in the input object files. This is the default
- behaviour. The `.drectve' sections are created by `dllexport'
- attributes in the source code.
-
-`--exclude-symbols LIST'
- Do not export the symbols in LIST. This is a list of symbol names
- separated by comma or colon characters. The symbol names should
- not contain a leading underscore. This is only meaningful when
- `--export-all-symbols' is used.
-
-`--no-default-excludes'
- When `--export-all-symbols' is used, it will by default avoid
- exporting certain special symbols. The current list of symbols to
- avoid exporting is `DllMain@12', `DllEntryPoint@0', `impure_ptr'.
- You may use the `--no-default-excludes' option to go ahead and
- export these special symbols. This is only meaningful when
- `--export-all-symbols' is used.
-
-`-S PATH'
-`--as PATH'
- Specifies the path, including the filename, of the assembler to be
- used to create the exports file.
-
-`-f OPTIONS'
-`--as-flags OPTIONS'
- Specifies any specific command line options to be passed to the
- assembler when building the exports file. This option will work
- even if the `-S' option is not used. This option only takes one
- argument, and if it occurs more than once on the command line,
- then later occurrences will override earlier occurrences. So if
- it is necessary to pass multiple options to the assembler they
- should be enclosed in double quotes.
-
-`-D NAME'
-`--dll-name NAME'
- Specifies the name to be stored in the `.def' file as the name of
- the DLL when the `-e' option is used. If this option is not
- present, then the filename given to the `-e' option will be used
- as the name of the DLL.
-
-`-m MACHINE'
-`-machine MACHINE'
- Specifies the type of machine for which the library file should be
- built. `dlltool' has a built in default type, depending upon how
- it was created, but this option can be used to override that.
- This is normally only useful when creating DLLs for an ARM
- processor, when the contents of the DLL are actually encode using
- Thumb instructions.
-
-`-a'
-`--add-indirect'
- Specifies that when `dlltool' is creating the exports file it
- should add a section which allows the exported functions to be
- referenced without using the import library. Whatever the hell
- that means!
-
-`-U'
-`--add-underscore'
- Specifies that when `dlltool' is creating the exports file it
- should prepend an underscore to the names of _all_ exported
- symbols.
-
-`--add-stdcall-underscore'
- Specifies that when `dlltool' is creating the exports file it
- should prepend an underscore to the names of exported _stdcall_
- functions. Variable names and non-stdcall function names are not
- modified. This option is useful when creating GNU-compatible
- import libs for third party DLLs that were built with MS-Windows
- tools.
-
-`-k'
-`--kill-at'
- Specifies that when `dlltool' is creating the exports file it
- should not append the string `@ <number>'. These numbers are
- called ordinal numbers and they represent another way of accessing
- the function in a DLL, other than by name.
-
-`-A'
-`--add-stdcall-alias'
- Specifies that when `dlltool' is creating the exports file it
- should add aliases for stdcall symbols without `@ <number>' in
- addition to the symbols with `@ <number>'.
-
-`-p'
-`--ext-prefix-alias PREFIX'
- Causes `dlltool' to create external aliases for all DLL imports
- with the specified prefix. The aliases are created for both
- external and import symbols with no leading underscore.
-
-`-x'
-`--no-idata4'
- Specifies that when `dlltool' is creating the exports and library
- files it should omit the `.idata4' section. This is for
- compatibility with certain operating systems.
-
-`-c'
-`--no-idata5'
- Specifies that when `dlltool' is creating the exports and library
- files it should omit the `.idata5' section. This is for
- compatibility with certain operating systems.
-
-`-i'
-`--interwork'
- Specifies that `dlltool' should mark the objects in the library
- file and exports file that it produces as supporting interworking
- between ARM and Thumb code.
-
-`-n'
-`--nodelete'
- Makes `dlltool' preserve the temporary assembler files it used to
- create the exports file. If this option is repeated then dlltool
- will also preserve the temporary object files it uses to create
- the library file.
-
-`-t PREFIX'
-`--temp-prefix PREFIX'
- Makes `dlltool' use PREFIX when constructing the names of
- temporary assembler and object files. By default, the temp file
- prefix is generated from the pid.
-
-`-v'
-`--verbose'
- Make dlltool describe what it is doing.
-
-`-h'
-`--help'
- Displays a list of command line options and then exits.
-
-`-V'
-`--version'
- Displays dlltool's version number and then exits.
-
-
-* Menu:
-
-* def file format:: The format of the dlltool `.def' file
-
-
-File: binutils.info, Node: def file format, Up: dlltool
-
-13.1 The format of the `dlltool' `.def' file
-============================================
-
-A `.def' file contains any number of the following commands:
-
-`NAME' NAME `[ ,' BASE `]'
- The result is going to be named NAME`.exe'.
-
-`LIBRARY' NAME `[ ,' BASE `]'
- The result is going to be named NAME`.dll'.
-
-`EXPORTS ( ( (' NAME1 `[ = ' NAME2 `] ) | ( ' NAME1 `=' MODULE-NAME `.' EXTERNAL-NAME `) )'
-
-`[' INTEGER `] [ NONAME ] [ CONSTANT ] [ DATA ] [ PRIVATE ] ) *'
- Declares NAME1 as an exported symbol from the DLL, with optional
- ordinal number INTEGER, or declares NAME1 as an alias (forward) of
- the function EXTERNAL-NAME in the DLL MODULE-NAME.
-
-`IMPORTS ( (' INTERNAL-NAME `=' MODULE-NAME `.' INTEGER `) | [' INTERNAL-NAME `= ]' MODULE-NAME `.' EXTERNAL-NAME `) ) *'
- Declares that EXTERNAL-NAME or the exported function whose ordinal
- number is INTEGER is to be imported from the file MODULE-NAME. If
- INTERNAL-NAME is specified then this is the name that the imported
- function will be referred to in the body of the DLL.
-
-`DESCRIPTION' STRING
- Puts STRING into the output `.exp' file in the `.rdata' section.
-
-`STACKSIZE' NUMBER-RESERVE `[, ' NUMBER-COMMIT `]'
-
-`HEAPSIZE' NUMBER-RESERVE `[, ' NUMBER-COMMIT `]'
- Generates `--stack' or `--heap' NUMBER-RESERVE,NUMBER-COMMIT in
- the output `.drectve' section. The linker will see this and act
- upon it.
-
-`CODE' ATTR `+'
-
-`DATA' ATTR `+'
-
-`SECTIONS (' SECTION-NAME ATTR` + ) *'
- Generates `--attr' SECTION-NAME ATTR in the output `.drectve'
- section, where ATTR is one of `READ', `WRITE', `EXECUTE' or
- `SHARED'. The linker will see this and act upon it.
-
-
-
-File: binutils.info, Node: readelf, Next: size, Prev: ranlib, Up: Top
-
-14 readelf
-**********
-
- readelf [`-a'|`--all']
- [`-h'|`--file-header']
- [`-l'|`--program-headers'|`--segments']
- [`-S'|`--section-headers'|`--sections']
- [`-g'|`--section-groups']
- [`-t'|`--section-details']
- [`-e'|`--headers']
- [`-s'|`--syms'|`--symbols']
- [`-n'|`--notes']
- [`-r'|`--relocs']
- [`-u'|`--unwind']
- [`-d'|`--dynamic']
- [`-V'|`--version-info']
- [`-A'|`--arch-specific']
- [`-D'|`--use-dynamic']
- [`-x' <number or name>|`--hex-dump='<number or name>]
- [`-w[liaprmfFsoR]'|
- `--debug-dump'[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]]
- [`-I'|`-histogram']
- [`-v'|`--version']
- [`-W'|`--wide']
- [`-H'|`--help']
- ELFFILE...
-
- `readelf' displays information about one or more ELF format object
-files. The options control what particular information to display.
-
- ELFFILE... are the object files to be examined. 32-bit and 64-bit
-ELF files are supported, as are archives containing ELF files.
-
- This program performs a similar function to `objdump' but it goes
-into more detail and it exists independently of the BFD library, so if
-there is a bug in BFD then readelf will not be affected.
-
- The long and short forms of options, shown here as alternatives, are
-equivalent. At least one option besides `-v' or `-H' must be given.
-
-`-a'
-`--all'
- Equivalent to specifiying `--file-header', `--program-headers',
- `--sections', `--symbols', `--relocs', `--dynamic', `--notes' and
- `--version-info'.
-
-`-h'
-`--file-header'
- Displays the information contained in the ELF header at the start
- of the file.
-
-`-l'
-`--program-headers'
-`--segments'
- Displays the information contained in the file's segment headers,
- if it has any.
-
-`-S'
-`--sections'
-`--section-headers'
- Displays the information contained in the file's section headers,
- if it has any.
-
-`-g'
-`--section-groups'
- Displays the information contained in the file's section groups,
- if it has any.
-
-`-t'
-`--section-details'
- Displays the detailed section information. Implies `-S'.
-
-`-s'
-`--symbols'
-`--syms'
- Displays the entries in symbol table section of the file, if it
- has one.
-
-`-e'
-`--headers'
- Display all the headers in the file. Equivalent to `-h -l -S'.
-
-`-n'
-`--notes'
- Displays the contents of the NOTE segments and/or sections, if any.
-
-`-r'
-`--relocs'
- Displays the contents of the file's relocation section, if it has
- one.
-
-`-u'
-`--unwind'
- Displays the contents of the file's unwind section, if it has one.
- Only the unwind sections for IA64 ELF files are currently
- supported.
-
-`-d'
-`--dynamic'
- Displays the contents of the file's dynamic section, if it has one.
-
-`-V'
-`--version-info'
- Displays the contents of the version sections in the file, it they
- exist.
-
-`-A'
-`--arch-specific'
- Displays architecture-specific information in the file, if there
- is any.
-
-`-D'
-`--use-dynamic'
- When displaying symbols, this option makes `readelf' use the
- symbol table in the file's dynamic section, rather than the one in
- the symbols section.
-
-`-x <number or name>'
-`--hex-dump=<number or name>'
- Displays the contents of the indicated section as a hexadecimal
- dump. A number identifies a particular section by index in the
- section table; any other string identifies all sections with that
- name in the object file.
-
-`-w[liaprmfFsoR]'
-`--debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]'
- Displays the contents of the debug sections in the file, if any are
- present. If one of the optional letters or words follows the
- switch then only data found in those specific sections will be
- dumped.
-
-`-I'
-`--histogram'
- Display a histogram of bucket list lengths when displaying the
- contents of the symbol tables.
-
-`-v'
-`--version'
- Display the version number of readelf.
-
-`-W'
-`--wide'
- Don't break output lines to fit into 80 columns. By default
- `readelf' breaks section header and segment listing lines for
- 64-bit ELF files, so that they fit into 80 columns. This option
- causes `readelf' to print each section header resp. each segment
- one a single line, which is far more readable on terminals wider
- than 80 columns.
-
-`-H'
-`--help'
- Display the command line options understood by `readelf'.
-
-
-
-File: binutils.info, Node: Common Options, Next: Selecting The Target System, Prev: dlltool, Up: Top
-
-15 Common Options
-*****************
-
-The following command-line options are supported by all of the programs
-described in this manual.
-
-`@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.
-
-`--help'
- Display the command-line options supported by the program.
-
-`--version'
- Display the version number of the program.
-
-
-
-File: binutils.info, Node: Selecting The Target System, Next: Reporting Bugs, Prev: Common Options, Up: Top
-
-16 Selecting the Target System
-******************************
-
-You can specify two aspects of the target system to the GNU binary file
-utilities, each in several ways:
-
- * the target
-
- * the architecture
-
- In the following summaries, the lists of ways to specify values are
-in order of decreasing precedence. The ways listed first override those
-listed later.
-
- The commands to list valid values only list the values for which the
-programs you are running were configured. If they were configured with
-`--enable-targets=all', the commands list most of the available values,
-but a few are left out; not all targets can be configured in at once
-because some of them can only be configured "native" (on hosts with the
-same type as the target system).
-
-* Menu:
-
-* Target Selection::
-* Architecture Selection::
-
-
-File: binutils.info, Node: Target Selection, Next: Architecture Selection, Up: Selecting The Target System
-
-16.1 Target Selection
-=====================
-
-A "target" is an object file format. A given target may be supported
-for multiple architectures (*note Architecture Selection::). A target
-selection may also have variations for different operating systems or
-architectures.
-
- The command to list valid target values is `objdump -i' (the first
-column of output contains the relevant information).
-
- Some sample values are: `a.out-hp300bsd', `ecoff-littlemips',
-`a.out-sunos-big'.
-
- You can also specify a target using a configuration triplet. This is
-the same sort of name that is passed to `configure' to specify a
-target. When you use a configuration triplet as an argument, it must be
-fully canonicalized. You can see the canonical version of a triplet by
-running the shell script `config.sub' which is included with the
-sources.
-
- Some sample configuration triplets are: `m68k-hp-bsd',
-`mips-dec-ultrix', `sparc-sun-sunos'.
-
-`objdump' Target
-----------------
-
-Ways to specify:
-
- 1. command line option: `-b' or `--target'
-
- 2. environment variable `GNUTARGET'
-
- 3. deduced from the input file
-
-`objcopy' and `strip' Input Target
-----------------------------------
-
-Ways to specify:
-
- 1. command line options: `-I' or `--input-target', or `-F' or
- `--target'
-
- 2. environment variable `GNUTARGET'
-
- 3. deduced from the input file
-
-`objcopy' and `strip' Output Target
------------------------------------
-
-Ways to specify:
-
- 1. command line options: `-O' or `--output-target', or `-F' or
- `--target'
-
- 2. the input target (see "`objcopy' and `strip' Input Target" above)
-
- 3. environment variable `GNUTARGET'
-
- 4. deduced from the input file
-
-`nm', `size', and `strings' Target
-----------------------------------
-
-Ways to specify:
-
- 1. command line option: `--target'
-
- 2. environment variable `GNUTARGET'
-
- 3. deduced from the input file
-
-
-File: binutils.info, Node: Architecture Selection, Prev: Target Selection, Up: Selecting The Target System
-
-16.2 Architecture Selection
-===========================
-
-An "architecture" is a type of CPU on which an object file is to run.
-Its name may contain a colon, separating the name of the processor
-family from the name of the particular CPU.
-
- The command to list valid architecture values is `objdump -i' (the
-second column contains the relevant information).
-
- Sample values: `m68k:68020', `mips:3000', `sparc'.
-
-`objdump' Architecture
-----------------------
-
-Ways to specify:
-
- 1. command line option: `-m' or `--architecture'
-
- 2. deduced from the input file
-
-`objcopy', `nm', `size', `strings' Architecture
------------------------------------------------
-
-Ways to specify:
-
- 1. deduced from the input file
-
-
-File: binutils.info, Node: Reporting Bugs, Next: GNU Free Documentation License, Prev: Selecting The Target System, Up: Top
-
-17 Reporting Bugs
-*****************
-
-Your bug reports play an essential role in making the binary utilities
-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 the binary
-utilities work better. Bug reports are your contribution to their
-maintenance.
-
- 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: binutils.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs
-
-17.1 Have You Found a Bug?
-==========================
-
-If you are not sure whether you have found a bug, here are some
-guidelines:
-
- * If a binary utility gets a fatal signal, for any input whatever,
- that is a bug. Reliable utilities never crash.
-
- * If a binary utility produces an error message for valid input,
- that is a bug.
-
- * If you are an experienced user of binary utilities, your
- suggestions for improvement are welcome in any case.
-
-
-File: binutils.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs
-
-17.2 How to Report Bugs
-=======================
-
-A number of companies and individuals offer support for GNU products.
-If you obtained the binary utilities 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.
-
- In any event, we also recommend that you send bug reports for the
-binary utilities 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 file 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 pathname is stored in memory; perhaps, if the pathname were
-different, the contents of that location would fool the utility 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 the utility. Each utility 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 the binary utilities.
-
- * Any patches you may have applied to the 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 the
- utilities--e.g. "`gcc-2.7'".
-
- * The command arguments you gave the utility to 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. If the utility is reading an object file or files, then
- it is generally most helpful to send the actual object files,
- uuencoded if necessary to get them through the mail system. Note
- that `bug-binutils@gnu.org' is a mailing list, so you should avoid
- sending very large files to it. Making the files available for
- anonymous FTP is OK.
-
- If the source files were produced exclusively using GNU programs
- (e.g., `gcc', `gas', and/or the GNU `ld'), 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 `gcc', or whatever, was
- used to produce the object files. Also say how `gcc', or
- whatever, was 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 the utility 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 the utility 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 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 wish
- to 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 programs as complicated as the binary utilities 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: binutils.info, Node: GNU Free Documentation License, Next: Index, Prev: Reporting Bugs, Up: Top
-
-Appendix A 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: binutils.info, Node: Index, Prev: GNU Free Documentation License, Up: Top
-
-Index
-*****
-
-
-* Menu:
-
-* .stab: objdump. (line 324)
-* addr2line: addr2line. (line 6)
-* address to file name and line number: addr2line. (line 6)
-* all header information, object file: objdump. (line 364)
-* ar: ar. (line 6)
-* ar compatibility: ar. (line 40)
-* architecture: objdump. (line 176)
-* architectures available: objdump. (line 161)
-* archive contents: ranlib. (line 6)
-* archive headers: objdump. (line 60)
-* archives: ar. (line 6)
-* base files: dlltool. (line 108)
-* bug criteria: Bug Criteria. (line 6)
-* bug reports: Bug Reporting. (line 6)
-* bugs: Reporting Bugs. (line 6)
-* bugs, reporting: Bug Reporting. (line 6)
-* c++filt: c++filt. (line 6)
-* changing object addresses: objcopy. (line 266)
-* changing section address: objcopy. (line 276)
-* changing section LMA: objcopy. (line 284)
-* changing section VMA: objcopy. (line 297)
-* changing start address: objcopy. (line 261)
-* collections of files: ar. (line 6)
-* compatibility, ar: ar. (line 40)
-* contents of archive: ar cmdline. (line 88)
-* crash: Bug Criteria. (line 9)
-* creating archives: ar cmdline. (line 127)
-* cxxfilt: c++filt. (line 14)
-* dates in archive: ar cmdline. (line 154)
-* debug symbols: objdump. (line 319)
-* debugging symbols: nm. (line 116)
-* deleting from archive: ar cmdline. (line 26)
-* demangling C++ symbols: c++filt. (line 6)
-* demangling in nm: nm. (line 124)
-* demangling in objdump <1>: addr2line. (line 55)
-* demangling in objdump: objdump. (line 88)
-* disassembling object code: objdump. (line 110)
-* disassembly architecture: objdump. (line 176)
-* disassembly endianness: objdump. (line 126)
-* disassembly, with source: objdump. (line 305)
-* discarding symbols: strip. (line 6)
-* DLL: dlltool. (line 6)
-* dlltool: dlltool. (line 6)
-* DWARF: objdump. (line 319)
-* dynamic relocation entries, in object file: objdump. (line 294)
-* dynamic symbol table entries, printing: objdump. (line 348)
-* dynamic symbols: nm. (line 136)
-* ELF dynamic section information: readelf. (line 102)
-* ELF file header information: readelf. (line 51)
-* ELF file information: readelf. (line 6)
-* ELF notes: readelf. (line 87)
-* ELF object file format: objdump. (line 324)
-* ELF program header information: readelf. (line 57)
-* ELF reloc information: readelf. (line 91)
-* ELF section group information: readelf. (line 68)
-* ELF section information: readelf. (line 63)
-* ELF segment information: readelf. (line 57)
-* ELF symbol table information: readelf. (line 78)
-* ELF version sections informations: readelf. (line 106)
-* endianness: objdump. (line 126)
-* error on valid input: Bug Criteria. (line 12)
-* external symbols: nm. (line 148)
-* extract from archive: ar cmdline. (line 103)
-* fatal signal: Bug Criteria. (line 9)
-* file name: nm. (line 110)
-* header information, all: objdump. (line 364)
-* input .def file: dlltool. (line 104)
-* input file name: nm. (line 110)
-* libraries: ar. (line 25)
-* listings strings: strings. (line 6)
-* machine instructions: objdump. (line 110)
-* moving in archive: ar cmdline. (line 34)
-* MRI compatibility, ar: ar scripts. (line 8)
-* name duplication in archive: ar cmdline. (line 97)
-* name length: ar. (line 18)
-* nm: nm. (line 6)
-* nm compatibility: nm. (line 120)
-* nm format: nm. (line 120)
-* not writing archive index: ar cmdline. (line 173)
-* objdump: objdump. (line 6)
-* object code format <1>: addr2line. (line 50)
-* object code format <2>: strings. (line 65)
-* object code format <3>: size. (line 79)
-* object code format <4>: objdump. (line 74)
-* object code format: nm. (line 212)
-* object file header: objdump. (line 132)
-* object file information: objdump. (line 6)
-* object file sections: objdump. (line 300)
-* object formats available: objdump. (line 161)
-* operations on archive: ar cmdline. (line 22)
-* printing from archive: ar cmdline. (line 46)
-* printing strings: strings. (line 6)
-* quick append to archive: ar cmdline. (line 54)
-* radix for section sizes: size. (line 65)
-* ranlib: ranlib. (line 6)
-* readelf: readelf. (line 6)
-* relative placement in archive: ar cmdline. (line 115)
-* relocation entries, in object file: objdump. (line 288)
-* removing symbols: strip. (line 6)
-* repeated names in archive: ar cmdline. (line 97)
-* replacement in archive: ar cmdline. (line 70)
-* reporting bugs: Reporting Bugs. (line 6)
-* scripts, ar: ar scripts. (line 8)
-* section addresses in objdump: objdump. (line 66)
-* section headers: objdump. (line 143)
-* section information: objdump. (line 166)
-* section sizes: size. (line 6)
-* sections, full contents: objdump. (line 300)
-* size: size. (line 6)
-* size display format: size. (line 26)
-* size number format: size. (line 65)
-* sorting symbols: nm. (line 167)
-* source code context: objdump. (line 136)
-* source disassembly: objdump. (line 305)
-* source file name: nm. (line 110)
-* source filenames for object files: objdump. (line 170)
-* stab: objdump. (line 324)
-* start-address: objdump. (line 334)
-* stop-address: objdump. (line 338)
-* strings: strings. (line 6)
-* strings, printing: strings. (line 6)
-* strip: strip. (line 6)
-* symbol index <1>: ranlib. (line 6)
-* symbol index: ar. (line 28)
-* symbol index, listing: nm. (line 182)
-* symbol line numbers: nm. (line 152)
-* symbol table entries, printing: objdump. (line 343)
-* symbols: nm. (line 6)
-* symbols, discarding: strip. (line 6)
-* undefined symbols: nm. (line 217)
-* Unix compatibility, ar: ar cmdline. (line 8)
-* unwind information: readelf. (line 96)
-* updating an archive: ar cmdline. (line 180)
-* version: Top. (line 6)
-* VMA in objdump: objdump. (line 66)
-* wide output, printing: objdump. (line 370)
-* writing archive index: ar cmdline. (line 167)
-
-
-
-Tag Table:
-Node: Top1751
-Node: ar3304
-Node: ar cmdline5482
-Node: ar scripts13625
-Node: nm19313
-Node: objcopy27509
-Node: objdump50561
-Node: ranlib65474
-Node: size66229
-Node: strings69076
-Node: strip71426
-Node: c++filt76905
-Ref: c++filt-Footnote-181833
-Node: addr2line81939
-Node: nlmconv85210
-Node: windres87816
-Node: dlltool93549
-Node: def file format104387
-Node: readelf106125
-Node: Common Options110833
-Node: Selecting The Target System111873
-Node: Target Selection112805
-Node: Architecture Selection114787
-Node: Reporting Bugs115615
-Node: Bug Criteria116394
-Node: Bug Reporting116947
-Node: GNU Free Documentation License124041
-Node: Index143773
-
-End Tag Table
diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi
index be571d2a7cc9..9499634458d6 100644
--- a/binutils/doc/binutils.texi
+++ b/binutils/doc/binutils.texi
@@ -1,9 +1,10 @@
\input texinfo @c -*- Texinfo -*-
@setfilename binutils.info
-@c Copyright 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+@c Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
+@c Free Software Foundation, Inc.
@c man begin INCLUDE
-@include config.texi
+@include bfdver.texi
@c man end
@ifinfo
@@ -24,15 +25,16 @@ START-INFO-DIR-ENTRY
* addr2line: (binutils)addr2line. Convert addresses to file and line
* nlmconv: (binutils)nlmconv. Converts object code into an NLM
* windres: (binutils)windres. Manipulate Windows resources
+* windmc: (binutils)windmc. Generator for Windows message resources
* dlltool: (binutils)dlltool. Create files needed to build and use DLLs
END-INFO-DIR-ENTRY
@end format
@end ifinfo
-@ifinfo
+@copying
@c man begin COPYRIGHT
Copyright @copyright{} 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 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
@@ -42,23 +44,16 @@ Back-Cover Texts. A copy of the license is included in the
section entitled ``GNU Free Documentation License''.
@c man end
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries a 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
+@end copying
@synindex ky cp
@c
@c This file documents the GNU binary utilities "ar", "ld", "objcopy",
@c "objdump", "nm", "size", "strings", "strip", "readelf" and "ranlib".
@c
-@c Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-@c 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-@c
+@c Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+@c 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+@c
@c This text may be freely distributed under the terms of the GNU
@c Free Documentation License.
@c
@@ -68,6 +63,9 @@ notice identical to this one except for the removal of this paragraph
@titlepage
@finalout
@title The @sc{gnu} Binary Utilities
+@ifset VERSION_PACKAGE
+@subtitle @value{VERSION_PACKAGE}
+@end ifset
@subtitle Version @value{VERSION}
@sp 1
@subtitle @value{UPDATED}
@@ -83,7 +81,7 @@ notice identical to this one except for the removal of this paragraph
@vskip 0pt plus 1filll
Copyright @copyright{} 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 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
@@ -93,13 +91,18 @@ Copyright @copyright{} 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
section entitled ``GNU Free Documentation License''.
@end titlepage
+@contents
@node Top
@top Introduction
@cindex version
This brief manual contains documentation for the @sc{gnu} binary
-utilities (collectively version @value{VERSION}):
+utilities
+@ifset VERSION_PACKAGE
+@value{VERSION_PACKAGE}
+@end ifset
+version @value{VERSION}:
@iftex
@table @code
@@ -143,6 +146,9 @@ Convert object code into a Netware Loadable Module
@item windres
Manipulate Windows resources
+@item windmc
+Genertor for Windows message resources
+
@item dlltool
Create the files needed to build and use Dynamic Link Libraries
@end table
@@ -167,12 +173,13 @@ section entitled "GNU Free Documentation License".
* addr2line:: Convert addresses to file and line
* nlmconv:: Converts object code into an NLM
* windres:: Manipulate Windows resources
+* windmc:: Generator for Windows message resources
* dlltool:: Create files needed to build and use DLLs
* Common Options:: Command-line options for all utilities
* Selecting The Target System:: How these utilities determine the target.
* Reporting Bugs:: Reporting Bugs
* GNU Free Documentation License:: GNU Free Documentation License
-* Index:: Index
+* Binutils Index:: Binutils Index
@end menu
@node ar
@@ -198,7 +205,7 @@ the original individual files (called @dfn{members} of the archive).
The original files' contents, mode (permissions), timestamp, owner, and
group are preserved in the archive, and can be restored on
-extraction.
+extraction.
@cindex name length
@sc{gnu} @command{ar} can maintain archives whose members have names of any
@@ -289,7 +296,7 @@ Use this operation to @emph{move} members in an archive.
The ordering of members in an archive can make a difference in how
programs are linked using the library, if a symbol is defined in more
-than one member.
+than one member.
If no modifiers are used with @code{m}, any members you name in the
@var{member} arguments are moved to the @emph{end} of the archive;
@@ -413,7 +420,7 @@ member must be present as the @var{relpos} argument, before the
@item l
This modifier is accepted but not used.
@c whaffor ar l modifier??? presumably compat; with
-@c what???---doc@@cygnus.com, 25jan91
+@c what???---doc@@cygnus.com, 25jan91
@item N
Uses the @var{count} parameter. This is used if there are multiple
@@ -546,7 +553,7 @@ to @code{SAVE}, commands affect only the temporary copy of the current
archive.
@table @code
-@item ADDLIB @var{archive}
+@item ADDLIB @var{archive}
@itemx ADDLIB @var{archive} (@var{module}, @var{module}, @dots{} @var{module})
Add all the contents of @var{archive} (or, if specified, each named
@var{module} from @var{archive}) to the current archive.
@@ -627,7 +634,7 @@ will not actually affect @var{archive} until you next use @code{SAVE}.
In the current archive, replace each existing @var{module} (named in
the @code{REPLACE} arguments) from files in the current working directory.
To execute this command without errors, both the file, and the module in
-the current archive, must exist.
+the current archive, must exist.
Requires prior use of @code{OPEN} or @code{CREATE}.
@@ -639,7 +646,7 @@ When the flag is on, @code{DIRECTORY} output matches output from
@item SAVE
Commit your changes to the current archive, and actually save it as a
file with the name specified in the last @code{CREATE} or @code{OPEN}
-command.
+command.
Requires prior use of @code{OPEN} or @code{CREATE}.
@@ -752,7 +759,7 @@ weak object symbol. When a weak defined symbol is linked with a normal
defined symbol, the normal defined symbol is used with no error.
When a weak undefined symbol is linked and the symbol is not defined,
the value of the symbol is determined in a system-specific manner without
-error. On some systems, uppercase indicates that a default value has been
+error. On some systems, uppercase indicates that a default value has been
specified.
@@ -782,7 +789,7 @@ equivalent.
@table @env
@item -A
@itemx -o
-@itemx --print-file-name
+@itemx --print-file-name
@cindex input file name
@cindex file name
@cindex source file name
@@ -791,7 +798,7 @@ in which it was found, rather than identifying the input file once only,
before all of its symbols.
@item -a
-@itemx --debug-syms
+@itemx --debug-syms
@cindex debugging symbols
Display all symbols, even debugger-only symbols; normally these are not
listed.
@@ -807,8 +814,8 @@ The same as @option{--format=bsd} (for compatibility with the MIPS @command{nm})
Decode (@dfn{demangle}) low-level symbol names into user-level names.
Besides removing any initial underscore prepended by the system, this
makes C++ function names readable. Different compilers have different
-mangling styles. The optional demangling style argument can be used to
-choose an appropriate demangling style for your compiler. @xref{c++filt},
+mangling styles. The optional demangling style argument can be used to
+choose an appropriate demangling style for your compiler. @xref{c++filt},
for more information on demangling.
@item --no-demangle
@@ -831,7 +838,7 @@ Only the first character of @var{format} is significant; it can be
either upper or lower case.
@item -g
-@itemx --extern-only
+@itemx --extern-only
@cindex external symbols
Display only external symbols.
@@ -846,12 +853,12 @@ information can be found, print it after the other symbol information.
@item -n
@itemx -v
-@itemx --numeric-sort
+@itemx --numeric-sort
Sort symbols numerically by their addresses, rather than alphabetically
-by their names.
+by their names.
@item -p
-@itemx --no-sort
+@itemx --no-sort
@cindex sorting symbols
Do not bother to sort the symbols in any order; print them in the order
encountered.
@@ -873,15 +880,15 @@ When listing symbols from archive members, include the index: a mapping
contain definitions for which names.
@item -r
-@itemx --reverse-sort
+@itemx --reverse-sort
Reverse the order of the sort (whether numeric or alphabetic); let the
last come first.
@item --size-sort
Sort symbols by size. The size is computed as the difference between
the value of the symbol and the value of the symbol with the next higher
-value. If the @code{bsd} output format is used the size of the symbol
-is printed, rather than the value, and @samp{-S} must be used in order
+value. If the @code{bsd} output format is used the size of the symbol
+is printed, rather than the value, and @samp{-S} must be used in order
both size and value to be printed.
@item --special-syms
@@ -889,7 +896,7 @@ Display symbols which have a target-specific special meaning. These
symbols are usually used by the target for some special processing and
are not normally helpful when included included in the normal symbol
lists. For example for ARM targets this option would skip the mapping
-symbols used to mark transistions between ARM code, THUMB code and
+symbols used to mark transitions between ARM code, THUMB code and
data.
@item -t @var{radix}
@@ -903,7 +910,7 @@ Specify an object code format other than your system's default format.
@xref{Target Selection}, for more information.
@item -u
-@itemx --undefined-only
+@itemx --undefined-only
@cindex external symbols
@cindex undefined symbols
Display only undefined symbols (those external to each object file).
@@ -952,6 +959,7 @@ objcopy [@option{-F} @var{bfdname}|@option{--target=}@var{bfdname}]
[@option{-N} @var{symbolname}|@option{--strip-symbol=}@var{symbolname}]
[@option{--strip-unneeded-symbol=}@var{symbolname}]
[@option{-G} @var{symbolname}|@option{--keep-global-symbol=}@var{symbolname}]
+ [@option{--localize-hidden}]
[@option{-L} @var{symbolname}|@option{--localize-symbol=}@var{symbolname}]
[@option{--globalize-symbol=}@var{symbolname}]
[@option{-W} @var{symbolname}|@option{--weaken-symbol=}@var{symbolname}]
@@ -977,6 +985,7 @@ objcopy [@option{-F} @var{bfdname}|@option{--target=}@var{bfdname}]
[@option{--add-section} @var{sectionname}=@var{filename}]
[@option{--rename-section} @var{oldname}=@var{newname}[,@var{flags}]]
[@option{--change-leading-char}] [@option{--remove-leading-char}]
+ [@option{--reverse-bytes=}@var{num}]
[@option{--srec-len=}@var{ival}] [@option{--srec-forceS3}]
[@option{--redefine-sym} @var{old}=@var{new}]
[@option{--redefine-syms=}@var{filename}]
@@ -995,12 +1004,13 @@ objcopy [@option{-F} @var{bfdname}|@option{--target=}@var{bfdname}]
[@option{--add-gnu-debuglink=}@var{path-to-file}]
[@option{--keep-file-symbols}]
[@option{--only-keep-debug}]
+ [@option{--extract-symbol}]
[@option{--writable-text}]
[@option{--readonly-text}]
[@option{--pure}]
[@option{--impure}]
[@option{-v}|@option{--verbose}]
- [@option{-V}|@option{--version}]
+ [@option{-V}|@option{--version}]
[@option{--help}] [@option{--info}]
@var{infile} [@var{outfile}]
@c man end
@@ -1041,6 +1051,7 @@ Note---@command{objcopy} is not able to change the endianness of its input
files. If the input format has an endianness (some formats do not),
@command{objcopy} can only copy the inputs into file formats that have the
same endianness or which have no endianness (e.g., @samp{srec}).
+(However, see the @option{--reverse-bytes} option.)
@c man end
@@ -1079,7 +1090,7 @@ can access this binary data inside a program by referencing the special
symbols that are created by the conversion process. These symbols are
called _binary_@var{objfile}_start, _binary_@var{objfile}_end and
_binary_@var{objfile}_size. e.g. you can transform a picture file into
-an object file and then access it in your code using these symbols.
+an object file and then access it in your code using these symbols.
@item -j @var{sectionname}
@itemx --only-section=@var{sectionname}
@@ -1124,6 +1135,11 @@ Keep only symbol @var{symbolname} global. Make all other symbols local
to the file, so that they are not visible externally. This option may
be given more than once.
+@item --localize-hidden
+In an ELF object, mark all symbols that have hidden or internal visibility
+as local. This option applies on top of symbol-specific localization options
+such as @option{-L}.
+
@item -L @var{symbolname}
@itemx --localize-symbol=@var{symbolname}
Make symbol @var{symbolname} local to the file, so that it is not
@@ -1219,7 +1235,7 @@ address, by adding @var{incr}. Some object file formats do not permit
section addresses to be changed arbitrarily. Note that this does not
relocate the sections; if the program expects sections to be loaded at a
certain address, and this option is used to change the sections such
-that they are loaded at a different address, the program may fail.
+that they are loaded at a different address, the program may fail.
@item --change-section-address @var{section}@{=,+,-@}@var{val}
@itemx --adjust-section-vma @var{section}@{=,+,-@}@var{val}
@@ -1242,7 +1258,7 @@ different. If @samp{=} is used, the section address is set to
@var{val}. Otherwise, @var{val} is added to or subtracted from the
section address. See the comments under @option{--change-addresses},
above. If @var{section} does not exist in the input file, a warning
-will be issued, unless @option{--no-change-warnings} is used.
+will be issued, unless @option{--no-change-warnings} is used.
@item --change-section-vma @var{section}@{=,+,-@}@var{val}
@cindex changing section VMA
@@ -1256,19 +1272,19 @@ is set to @var{val}. Otherwise, @var{val} is added to or subtracted
from the section address. See the comments under
@option{--change-addresses}, above. If @var{section} does not exist in
the input file, a warning will be issued, unless
-@option{--no-change-warnings} is used.
+@option{--no-change-warnings} is used.
@item --change-warnings
@itemx --adjust-warnings
If @option{--change-section-address} or @option{--change-section-lma} or
@option{--change-section-vma} is used, and the named section does not
-exist, issue a warning. This is the default.
+exist, issue a warning. This is the default.
@item --no-change-warnings
@itemx --no-adjust-warnings
Do not issue a warning if @option{--change-section-address} or
@option{--adjust-section-lma} or @option{--adjust-section-vma} is used, even
-if the named section does not exist.
+if the named section does not exist.
@item --set-section-flags @var{section}=@var{flags}
Set the flags for the named section. The @var{flags} argument is a
@@ -1326,13 +1342,37 @@ different conventions for symbol names. This is different from
when appropriate, regardless of the object file format of the output
file.
+@item --reverse-bytes=@var{num}
+Reverse the bytes in a section with output contents. A section length must
+be evenly divisible by the value given in order for the swap to be able to
+take place. Reversing takes place before the interleaving is performed.
+
+This option is used typically in generating ROM images for problematic
+target systems. For example, on some target boards, the 32-bit words
+fetched from 8-bit ROMs are re-assembled in little-endian byte order
+regardless of the CPU byte order. Depending on the programming model, the
+endianness of the ROM may need to be modified.
+
+Consider a simple file with a section containing the following eight
+bytes: @code{12345678}.
+
+Using @samp{--reverse-bytes=2} for the above example, the bytes in the
+output file would be ordered @code{21436587}.
+
+Using @samp{--reverse-bytes=4} for the above example, the bytes in the
+output file would be ordered @code{43218765}.
+
+By using @samp{--reverse-bytes=2} for the above example, followed by
+@samp{--reverse-bytes=4} on the output file, the bytes in the second
+output file would be ordered @code{34127856}.
+
@item --srec-len=@var{ival}
Meaningful only for srec output. Set the maximum length of the Srecords
being produced to @var{ival}. This length covers both address, data and
crc fields.
@item --srec-forceS3
-Meaningful only for srec output. Avoid generation of S1/S2 records,
+Meaningful only for srec output. Avoid generation of S1/S2 records,
creating S3-only record format.
@item --redefine-sym @var{old}=@var{new}
@@ -1397,7 +1437,7 @@ This option may be given more than once.
@item --alt-machine-code=@var{index}
If the output architecture has alternate machine codes, use the
@var{index}th code instead of the default one. This is useful in case
-a machine is assigned an official code and the tool-chain adopts the
+a machine is assigned an official code and the tool-chain adopts the
new code, but other applications still depend on the original code
being used. For ELF based architectures if the @var{index}
alternative does not exist then the value is treated as an absolute
@@ -1441,7 +1481,7 @@ which would otherwise get stripped.
@item --only-keep-debug
Strip a file, removing contents of any sections that would not be
stripped by @option{--strip-debug} and leaving the debugging sections
-intact.
+intact. In ELF files, this preserves all note sections in the output.
The intention is that this option will be used in conjunction with
@option{--add-gnu-debuglink} to create a two part executable. One a
@@ -1472,10 +1512,32 @@ optional. You could instead do this:
@item Run @code{objcopy --add-gnu-debuglink=foo.full foo}
@end enumerate
-i.e. the file pointed to by the @option{--add-gnu-debuglink} can be the
+i.e., the file pointed to by the @option{--add-gnu-debuglink} can be the
full executable. It does not have to be a file created by the
@option{--only-keep-debug} switch.
+Note - this switch is only intended for use on fully linked files. It
+does not make sense to use it on object files where the debugging
+information may be incomplete. Besides the gnu_debuglink feature
+currently only supports the presence of one filename containing
+debugging information, not multiple filenames on a one-per-object-file
+basis.
+
+@item --extract-symbol
+Keep the file's section flags and symbols but remove all section data.
+Specifically, the option:
+
+@itemize
+@item sets the virtual and load addresses of every section to zero;
+@item removes the contents of all sections;
+@item sets the size of every section to zero; and
+@item sets the file's start address to zero.
+@end itemize
+
+This option is used to build a @file{.sym} file for a VxWorks kernel.
+It can also be a useful way of reducing the size of a @option{--just-symbols}
+linker input file.
+
@item -V
@itemx --version
Show the version number of @command{objcopy}.
@@ -1612,8 +1674,8 @@ formats available with the @option{-i} option.
Decode (@dfn{demangle}) low-level symbol names into user-level names.
Besides removing any initial underscore prepended by the system, this
makes C++ function names readable. Different compilers have different
-mangling styles. The optional demangling style argument can be used to
-choose an appropriate demangling style for your compiler. @xref{c++filt},
+mangling styles. The optional demangling style argument can be used to
+choose an appropriate demangling style for your compiler. @xref{c++filt},
for more information on demangling.
@item -g
@@ -1747,7 +1809,7 @@ switch, but allow finer grained control. Multiple selections from the
following may be specified as a comma separated string.
@option{x86-64}, @option{i386} and @option{i8086} select disassembly for
the given architecture. @option{intel} and @option{att} select between
-intel syntax mode and AT&T syntax mode. @option{addr32},
+intel syntax mode and AT&T syntax mode. @option{addr64}, @option{addr32},
@option{addr16}, @option{data32} and @option{data16} specify the default
address size and operand size. These four options will be overridden if
@option{x86-64}, @option{i386} or @option{i8086} appear later in the
@@ -1758,17 +1820,18 @@ suffix could be inferred by the operands.
For PPC, @option{booke}, @option{booke32} and @option{booke64} select
disassembly of BookE instructions. @option{32} and @option{64} select
PowerPC and PowerPC64 disassembly, respectively. @option{e300} selects
-disassembly for the e300 family.
+disassembly for the e300 family. @option{440} selects disassembly for
+the PowerPC 440.
-For MIPS, this option controls the printing of instruction mneumonic
+For MIPS, this option controls the printing of instruction mnemonic
names and register names in disassembled instructions. Multiple
selections from the following may be specified as a comma separated
string, and invalid options are ignored:
@table @code
@item no-aliases
-Print the 'raw' instruction mneumonic instead of some pseudo
-instruction mneumonic. I.E. print 'daddu' or 'or' instead of 'move',
+Print the 'raw' instruction mnemonic instead of some pseudo
+instruction mnemonic. I.e., print 'daddu' or 'or' instead of 'move',
'sll' instead of 'nop', etc.
@item gpr-names=@var{ABI}
@@ -1811,7 +1874,7 @@ For VAX, you can specify function entry addresses with @option{-M
entry:0xf00ba}. You can use this multiple times to properly
disassemble VAX binary files that don't contain symbol tables (like
ROM dumps). In these cases, the function entry mask would otherwise
-be decoded as VAX instructions, which would probably lead the the rest
+be decoded as VAX instructions, which would probably lead the rest
of the function being wrongly disassembled.
@item -p
@@ -1963,7 +2026,7 @@ ranlib [@option{-vV}] @var{archive}
@command{ranlib} generates an index to the contents of an archive and
stores it in the archive. The index lists each symbol defined by a
-member of an archive that is a relocatable object file.
+member of an archive that is a relocatable object file.
You may use @samp{nm -s} or @samp{nm --print-armap} to list this index.
@@ -2008,7 +2071,7 @@ size [@option{-A}|@option{-B}|@option{--format=}@var{compatibility}]
[@option{--help}]
[@option{-d}|@option{-o}|@option{-x}|@option{--radix=}@var{number}]
[@option{-t}|@option{--totals}]
- [@option{--target=}@var{bfdname}] [@option{-V}|@option{--version}]
+ [@option{--target=}@var{bfdname}] [@option{-V}|@option{--version}]
[@var{objfile}@dots{}]
@c man end
@end smallexample
@@ -2038,13 +2101,13 @@ Using one of these options, you can choose whether the output from @sc{gnu}
@command{size} resembles output from System V @command{size} (using @option{-A},
or @option{--format=sysv}), or Berkeley @command{size} (using @option{-B}, or
@option{--format=berkeley}). The default is the one-line format similar to
-Berkeley's.
+Berkeley's.
@c Bonus for doc-source readers: you can also say --format=strange (or
@c anything else that starts with 's') for sysv, and --format=boring (or
@c anything else that starts with 'b') for Berkeley.
Here is an example of the Berkeley (default) format of output from
-@command{size}:
+@command{size}:
@smallexample
$ size --format=Berkeley ranlib size
text data bss dec hex filename
@@ -2059,18 +2122,18 @@ This is the same data, but displayed closer to System V conventions:
$ size --format=SysV ranlib size
ranlib :
section size addr
-.text 294880 8192
-.data 81920 303104
-.bss 11592 385024
-Total 388392
+.text 294880 8192
+.data 81920 303104
+.bss 11592 385024
+Total 388392
size :
section size addr
-.text 294880 8192
-.data 81920 303104
-.bss 11888 385024
-Total 388688
+.text 294880 8192
+.data 81920 303104
+.bss 11888 385024
+Total 388688
@end smallexample
@item --help
@@ -2130,7 +2193,7 @@ strings [@option{-afov}] [@option{-}@var{min-len}]
[@option{-t} @var{radix}] [@option{--radix=}@var{radix}]
[@option{-e} @var{encoding}] [@option{--encoding=}@var{encoding}]
[@option{-}] [@option{--all}] [@option{--print-file-name}]
- [@option{--target=}@var{bfdname}]
+ [@option{-T} @var{bfdname}] [@option{--target=}@var{bfdname}]
[@option{--help}] [@option{--version}] @var{file}@dots{}
@c man end
@end smallexample
@@ -2191,7 +2254,8 @@ single-8-bit-byte characters, @samp{b} = 16-bit bigendian, @samp{l} =
16-bit littleendian, @samp{B} = 32-bit bigendian, @samp{L} = 32-bit
littleendian. Useful for finding wide character strings.
-@item --target=@var{bfdname}
+@item -T @var{bfdname}
+@itemx --target=@var{bfdname}
@cindex object code format
Specify an object code format other than your system's default format.
@xref{Target Selection}, for more information.
@@ -2348,8 +2412,9 @@ When stripping a file, perhaps with @option{--strip-debug} or
which would otherwise get stripped.
@item --only-keep-debug
-Strip a file, removing any sections that would be stripped by
-@option{--strip-debug} and leaving the debugging sections.
+Strip a file, removing contents of any sections that would not be
+stripped by @option{--strip-debug} and leaving the debugging sections
+intact. In ELF files, this preserves all note sections in the output.
The intention is that this option will be used in conjunction with
@option{--add-gnu-debuglink} to create a two part executable. One a
@@ -2384,6 +2449,13 @@ ie the file pointed to by the @option{--add-gnu-debuglink} can be the
full executable. It does not have to be a file created by the
@option{--only-keep-debug} switch.
+Note - this switch is only intended for use on fully linked files. It
+does not make sense to use it on object files where the debugging
+information may be incomplete. Besides the gnu_debuglink feature
+currently only supports the presence of one filename containing
+debugging information, not multiple filenames on a one-per-object-file
+basis.
+
@item -V
@itemx --version
Show the version number for @command{strip}.
@@ -2432,7 +2504,7 @@ able to distinguish these similarly named functions C++ and Java
encode them into a low-level assembler name which uniquely identifies
each different version. This process is known as @dfn{mangling}. The
@command{c++filt}
-@footnote{MS-DOS does not allow @kbd{+} characters in file names, so on
+@footnote{MS-DOS does not allow @kbd{+} characters in file names, so on
MS-DOS this program is named @command{CXXFILT}.}
program does the inverse mapping: it decodes (@dfn{demangles}) low-level
names into user-level names so that they can be read.
@@ -2457,7 +2529,7 @@ names from the standard input instead. All the results are printed on
the standard output. The difference between reading names from the
command line versus reading names from the standard input is that
command line arguments are expected to be just mangled names and no
-checking is performed to seperate them from surrounding text. Thus
+checking is performed to separate them from surrounding text. Thus
for example:
@smallexample
@@ -2571,8 +2643,8 @@ the Info entries for @file{binutils}.
@quotation
@emph{Warning:} @command{c++filt} is a new utility, and the details of its
user interface are subject to change in future releases. In particular,
-a command-line option may be required in the the future to decode a name
-passed as an argument on the command line; in other words,
+a command-line option may be required in the future to decode a name
+passed as an argument on the command line; in other words,
@example
c++filt @var{symbol}
@@ -2659,8 +2731,8 @@ Specify that the object-code format for the object files is
Decode (@dfn{demangle}) low-level symbol names into user-level names.
Besides removing any initial underscore prepended by the system, this
makes C++ function names readable. Different compilers have different
-mangling styles. The optional demangling style argument can be used to
-choose an appropriate demangling style for your compiler. @xref{c++filt},
+mangling styles. The optional demangling style argument can be used to
+choose an appropriate demangling style for your compiler. @xref{c++filt},
for more information on demangling.
@item -e @var{filename}
@@ -2803,6 +2875,168 @@ the Info entries for @file{binutils}.
@c man end
@end ignore
+@node windmc
+@chapter windmc
+
+@command{windmc} may be used to generator Windows message resources.
+
+@quotation
+@emph{Warning:} @command{windmc} is not always built as part of the binary
+utilities, since it is only useful for Windows targets.
+@end quotation
+
+@c man title windmc generates Windows message resources.
+
+@smallexample
+@c man begin SYNOPSIS windres
+windmc [options] input-file
+@c man end
+@end smallexample
+
+@c man begin DESCRIPTION windmc
+
+@command{windmc} reads message definitions from an input file (.mc) and
+translate them into a set of output files. The output files may be of
+four kinds:
+
+@table @code
+@item h
+A C header file containing the message definitions.
+
+@item rc
+A resource file compilable by the @command{windres} tool.
+
+@item bin
+One or more binary files containing the resource data for a specific
+message language.
+
+@item dbg
+A C include file that maps message id's to their symbolic name.
+@end table
+
+The exact description of these different formats is available in
+documentation from Microsoft.
+
+When @command{windmc} converts from the @code{mc} format to the @code{bin}
+format, @code{rc}, @code{h}, and optional @code{dbg} it is acting like the
+Windows Message Compiler.
+
+@c man end
+
+@c man begin OPTIONS windmc
+
+@table @env
+@item -a
+@itemx --ascii_in
+Specifies that the input file specified is ANSI. This is the default
+behaviour.
+
+@item -A
+@itemx --ascii_out
+Specifies that messages in the output @code{bin} files should be in ANSI
+format.
+
+@item -b
+@itemx --binprefix
+Specifies that @code{bin} filenames should have to be prefixed by the
+basename of the source file.
+
+@item -c
+@itemx --customflag
+Sets the customer bit in all message id's.
+
+@item -C @var{codepage}
+@itemx --codepage_in @var{codepage}
+Sets the default codepage to be used to convert input file to UTF16. The
+default is ocdepage 1252.
+
+@item -d
+@itemx --decimal_values
+Outputs the constants in the header file in decimal. Default is using
+hexadecimal output.
+
+@item -e @var{ext}
+@itemx --extension @var{ext}
+The extension for the header file. The default is .h extension.
+
+@item -F @var{target}
+@itemx --target @var{target}
+Specify the BFD format to use for a bin file as output. This
+is a BFD target name; you can use the @option{--help} option to see a list
+of supported targets. Normally @command{windmc} will use the default
+format, which is the first one listed by the @option{--help} option.
+@ifclear man
+@ref{Target Selection}.
+@end ifclear
+
+@item -h @var{path}
+@itemx --headerdir @var{path}
+The target directory of the generated header file. The default is the
+current directory.
+
+@item -H
+@itemx --help
+Displays a list of command line options and then exits.
+
+@item -m @var{characters}
+@itemx --maxlength @var{characters}
+Instructs @command{windmc} to generate a warning if the length
+of any message exceeds the number specified.
+
+@item -n
+@itemx --nullterminate
+Terminate message text in @code{bin} files by zero. By default they are
+terminated by CR/LF.
+
+@item -o
+@itemx --hresult_use
+Not yet implemented. Instructs @code{windmc} to generate an OLE2 header
+file, using HRESULT definitions. Status codes are used if the flag is not
+specified.
+
+@item -O @var{codepage}
+@itemx --codepage_out @var{codepage}
+Sets the default codepage to be used to output text files. The default
+is ocdepage 1252.
+
+@item -r @var{path}
+@itemx --rcdir @var{path}
+The target directory for the generated @code{rc} script and the generated
+@code{bin} files that the resource compiler script includes. The default
+is the current directory.
+
+@item -u
+@itemx --unicode_in
+Specifies that the input file is UTF16.
+
+@item -U
+@itemx --unicode_out
+Specifies that messages in the output @code{bin} file should be in UTF16
+format. This is the default behaviour.
+
+@item -v
+@item --verbose
+Enable verbose mode. This tells you what the preprocessor is if you
+didn't specify one.
+
+@item -V
+@item --version
+Prints the version number for @command{windres}.
+
+@item -x @var{path}
+@itemx --xdgb @var{path}
+The path of the @code{dbg} C include file that maps message id's to the
+symbolic name. No such file is generated without specifying the switch.
+@end table
+
+@c man end
+
+@ignore
+@c man begin SEEALSO windmc
+the Info entries for @file{binutils}.
+@c man end
+@end ignore
+
@node windres
@chapter windres
@@ -2885,7 +3119,7 @@ The name of the output file. If this option is not used, then
for the input file name, as the output file name. If there is no
non-option argument, then @command{windres} will write to standard output.
@command{windres} can not write a COFF file to standard output. Note,
-for compatability with @command{rc} the option @option{-fo} is also
+for compatibility with @command{rc} the option @option{-fo} is also
accepted, but its use is not recommended.
@item -J @var{format}
@@ -2922,7 +3156,7 @@ Specify an include directory to use when reading an @code{rc} file.
@command{windres} will pass this to the preprocessor as an @option{-I}
option. @command{windres} will also search this directory when looking for
files named in the @code{rc} file. If the argument passed to this command
-matches any of the supported @var{formats} (as descrived in the @option{-J}
+matches any of the supported @var{formats} (as described in the @option{-J}
option), it will issue a deprecation warning, and behave just like the
@option{-J} option. New programs should not use this behaviour. If a
directory happens to match a @var{format}, simple prefix it with @samp{./}
@@ -2945,6 +3179,13 @@ Ignored for compatibility with rc.
Enable verbose mode. This tells you what the preprocessor is if you
didn't specify one.
+@item -c @var{val}
+@item --codepage @var{val}
+Specify the default codepage to use when reading an @code{rc} file.
+@var{val} should be a hexadecimal prefixed by @samp{0x} or decimal
+codepage code. The valid range is from zero up to 0xffff, but the
+validity of the codepage is host and configuration dependent.
+
@item -l @var{val}
@item --language @var{val}
Specify the default language to use when reading an @code{rc} file.
@@ -2953,8 +3194,8 @@ the language, and the high eight bits are the sublanguage.
@item --use-temp-file
Use a temporary file to instead of using popen to read the output of
-the preprocessor. Use this option if the popen implementation is buggy
-on the host (eg., certain non-English language versions of Windows 95 and
+the preprocessor. Use this option if the popen implementation is buggy
+on the host (eg., certain non-English language versions of Windows 95 and
Windows 98 are known to have buggy popen where the output will instead
go the console).
@@ -3013,7 +3254,7 @@ dlltool [@option{-d}|@option{--input-def} @var{def-file-name}]
[@option{-b}|@option{--base-file} @var{base-file-name}]
[@option{-e}|@option{--output-exp} @var{exports-file-name}]
[@option{-z}|@option{--output-def} @var{def-file-name}]
- [@option{-l}|@option{--output-lib} @var{library-file-name}]
+ [@option{-l}|@option{--output-lib} @var{library-file-name}]
[@option{--export-all-symbols}] [@option{--no-export-all-symbols}]
[@option{--exclude-symbols} @var{list}]
[@option{--no-default-excludes}]
@@ -3025,7 +3266,7 @@ dlltool [@option{-d}|@option{--input-def} @var{def-file-name}]
[@option{-p}|@option{--ext-prefix-alias} @var{prefix}]
[@option{-x}|@option{--no-idata4}] [@option{-c}|@option{--no-idata5}] [@option{-i}|@option{--interwork}]
[@option{-n}|@option{--nodelete}] [@option{-t}|@option{--temp-prefix} @var{prefix}]
- [@option{-v}|@option{--verbose}]
+ [@option{-v}|@option{--verbose}]
[@option{-h}|@option{--help}] [@option{-V}|@option{--version}]
[object-file @dots{}]
@c man end
@@ -3038,8 +3279,8 @@ dlltool [@option{-d}|@option{--input-def} @var{def-file-name}]
line. It then processes these inputs and if the @option{-e} option has
been specified it creates a exports file. If the @option{-l} option
has been specified it creates a library file and if the @option{-z} option
-has been specified it creates a def file. Any or all of the @option{-e},
-@option{-l} and @option{-z} options can be present in one invocation of
+has been specified it creates a def file. Any or all of the @option{-e},
+@option{-l} and @option{-z} options can be present in one invocation of
dlltool.
When creating a DLL, along with the source for the DLL, it is necessary
@@ -3060,7 +3301,7 @@ section of the object file. This can be done in C by using the
asm() operator:
@smallexample
- asm (".section .drectve");
+ asm (".section .drectve");
asm (".ascii \"-export:my_func\"");
int my_func (void) @{ @dots{} @}
@@ -3070,7 +3311,7 @@ The second file needed for DLL creation is an exports file. This file
is linked with the object files that make up the body of the DLL and it
handles the interface between the DLL and the outside world. This is a
binary file and it can be created by giving the @option{-e} option to
-@command{dlltool} when it is creating or reading in a @file{.def} file.
+@command{dlltool} when it is creating or reading in a @file{.def} file.
The third file needed for DLL creation is the library file that programs
will link with in order to access the functions in the DLL. This file
@@ -3192,12 +3433,12 @@ contents of the DLL are actually encode using Thumb instructions.
Specifies that when @command{dlltool} is creating the exports file it
should add a section which allows the exported functions to be
referenced without using the import library. Whatever the hell that
-means!
+means!
@item -U
@itemx --add-underscore
Specifies that when @command{dlltool} is creating the exports file it
-should prepend an underscore to the names of @emph{all} exported symbols.
+should prepend an underscore to the names of @emph{all} exported symbols.
@item --add-stdcall-underscore
Specifies that when @command{dlltool} is creating the exports file it
@@ -3254,7 +3495,7 @@ file.
@itemx --temp-prefix @var{prefix}
Makes @command{dlltool} use @var{prefix} when constructing the names of
temporary assembler and object files. By default, the temp file prefix
-is generated from the pid.
+is generated from the pid.
@item -v
@itemx --verbose
@@ -3339,7 +3580,7 @@ The Info pages for @file{binutils}.
@smallexample
@c man begin SYNOPSIS readelf
-readelf [@option{-a}|@option{--all}]
+readelf [@option{-a}|@option{--all}]
[@option{-h}|@option{--file-header}]
[@option{-l}|@option{--program-headers}|@option{--segments}]
[@option{-S}|@option{--section-headers}|@option{--sections}]
@@ -3384,15 +3625,15 @@ affected.
The long and short forms of options, shown here as alternatives, are
equivalent. At least one option besides @samp{-v} or @samp{-H} must be
-given.
+given.
@table @env
@item -a
@itemx --all
-Equivalent to specifiying @option{--file-header},
+Equivalent to specifying @option{--file-header},
@option{--program-headers}, @option{--sections}, @option{--symbols},
@option{--relocs}, @option{--dynamic}, @option{--notes} and
-@option{--version-info}.
+@option{--version-info}.
@item -h
@itemx --file-header
@@ -3564,8 +3805,8 @@ once because some of them can only be configured @dfn{native} (on hosts
with the same type as the target system).
@menu
-* Target Selection::
-* Architecture Selection::
+* Target Selection::
+* Architecture Selection::
@end menu
@node Target Selection
@@ -3746,8 +3987,10 @@ You can find contact information for many support companies and
individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
distribution.
+@ifset BUGURL
In any event, we also recommend that you send bug reports for the binary
-utilities to @samp{bug-binutils@@gnu.org}.
+utilities to @value{BUGURL}.
+@end ifset
The fundamental principle of reporting bugs usefully is this:
@strong{report all the facts}. If you are not sure whether to state a
@@ -3806,11 +4049,7 @@ and then we might not encounter the bug.
@item
A complete input file, or set of input files, that will reproduce the
bug. If the utility is reading an object file or files, then it is
-generally most helpful to send the actual object files, uuencoded if
-necessary to get them through the mail system. Note that
-@samp{bug-binutils@@gnu.org} is a mailing list, so you should avoid
-sending very large files to it. Making the files available for
-anonymous FTP is OK.
+generally most helpful to send the actual object files.
If the source files were produced exclusively using @sc{gnu} programs
(e.g., @command{gcc}, @command{gas}, and/or the @sc{gnu} @command{ld}), then it
@@ -3830,7 +4069,7 @@ 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 the utility is out of synch, or you have encountered a bug in
+copy of the utility is out of sync, or you have encountered a bug in
the C library on your system. (This has happened!) Your copy might
crash and ours would not. If you told us to expect a crash, then when
ours fails to crash, we would know that the bug was not happening for
@@ -3898,10 +4137,9 @@ things without first using the debugger to find the facts.
@include fdl.texi
-@node Index
-@unnumbered Index
+@node Binutils Index
+@unnumbered Binutils Index
@printindex cp
-@contents
@bye
diff --git a/binutils/doc/config.texi b/binutils/doc/config.texi
deleted file mode 100644
index c49c43a461bb..000000000000
--- a/binutils/doc/config.texi
+++ /dev/null
@@ -1,2 +0,0 @@
-@set VERSION 2.17
-@set UPDATED June 2006
diff --git a/binutils/doc/cxxfilt.man b/binutils/doc/cxxfilt.man
deleted file mode 100644
index 08e77f18ed9d..000000000000
--- a/binutils/doc/cxxfilt.man
+++ /dev/null
@@ -1,345 +0,0 @@
-.\" 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 "C++FILT 1"
-.TH C++FILT 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-cxxfilt \- Demangle C++ and Java symbols.
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-c++filt [\fB\-_\fR|\fB\-\-strip\-underscores\fR]
- [\fB\-n\fR|\fB\-\-no\-strip\-underscores\fR]
- [\fB\-p\fR|\fB\-\-no\-params\fR]
- [\fB\-t\fR|\fB\-\-types\fR]
- [\fB\-i\fR|\fB\-\-no\-verbose\fR]
- [\fB\-s\fR \fIformat\fR|\fB\-\-format=\fR\fIformat\fR]
- [\fB\-\-help\fR] [\fB\-\-version\fR] [\fIsymbol\fR...]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-The \*(C+ and Java languages provide function overloading, which means
-that you can write many functions with the same name, providing that
-each function takes parameters of different types. In order to be
-able to distinguish these similarly named functions \*(C+ and Java
-encode them into a low-level assembler name which uniquely identifies
-each different version. This process is known as \fImangling\fR. The
-\&\fBc++filt\fR
-[1]
-program does the inverse mapping: it decodes (\fIdemangles\fR) low-level
-names into user-level names so that they can be read.
-.PP
-Every alphanumeric word (consisting of letters, digits, underscores,
-dollars, or periods) seen in the input is a potential mangled name.
-If the name decodes into a \*(C+ name, the \*(C+ name replaces the
-low-level name in the output, otherwise the original word is output.
-In this way you can pass an entire assembler source file, containing
-mangled names, through \fBc++filt\fR and see the same source file
-containing demangled names.
-.PP
-You can also use \fBc++filt\fR to decipher individual symbols by
-passing them on the command line:
-.PP
-.Vb 1
-\& c++filt <symbol>
-.Ve
-.PP
-If no \fIsymbol\fR arguments are given, \fBc++filt\fR reads symbol
-names from the standard input instead. All the results are printed on
-the standard output. The difference between reading names from the
-command line versus reading names from the standard input is that
-command line arguments are expected to be just mangled names and no
-checking is performed to seperate them from surrounding text. Thus
-for example:
-.PP
-.Vb 1
-\& c++filt \-n _Z1fv
-.Ve
-.PP
-will work and demangle the name to \*(L"f()\*(R" whereas:
-.PP
-.Vb 1
-\& c++filt \-n _Z1fv,
-.Ve
-.PP
-will not work. (Note the extra comma at the end of the mangled
-name which makes it invalid). This command however will work:
-.PP
-.Vb 1
-\& echo _Z1fv, | c++filt \-n
-.Ve
-.PP
-and will display \*(L"f(),\*(R" ie the demangled name followed by a
-trailing comma. This behaviour is because when the names are read
-from the standard input it is expected that they might be part of an
-assembler source file where there might be extra, extraneous
-characters trailing after a mangled name. eg:
-.PP
-.Vb 1
-\& .type _Z1fv, @function
-.Ve
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-.IP "\fB\-_\fR" 4
-.IX Item "-_"
-.PD 0
-.IP "\fB\-\-strip\-underscores\fR" 4
-.IX Item "--strip-underscores"
-.PD
-On some systems, both the C and \*(C+ compilers put an underscore in front
-of every name. For example, the C name \f(CW\*(C`foo\*(C'\fR gets the low-level
-name \f(CW\*(C`_foo\*(C'\fR. This option removes the initial underscore. Whether
-\&\fBc++filt\fR removes the underscore by default is target dependent.
-.IP "\fB\-j\fR" 4
-.IX Item "-j"
-.PD 0
-.IP "\fB\-\-java\fR" 4
-.IX Item "--java"
-.PD
-Prints demangled names using Java syntax. The default is to use \*(C+
-syntax.
-.IP "\fB\-n\fR" 4
-.IX Item "-n"
-.PD 0
-.IP "\fB\-\-no\-strip\-underscores\fR" 4
-.IX Item "--no-strip-underscores"
-.PD
-Do not remove the initial underscore.
-.IP "\fB\-p\fR" 4
-.IX Item "-p"
-.PD 0
-.IP "\fB\-\-no\-params\fR" 4
-.IX Item "--no-params"
-.PD
-When demangling the name of a function, do not display the types of
-the function's parameters.
-.IP "\fB\-t\fR" 4
-.IX Item "-t"
-.PD 0
-.IP "\fB\-\-types\fR" 4
-.IX Item "--types"
-.PD
-Attempt to demangle types as well as function names. This is disabled
-by default since mangled types are normally only used internally in
-the compiler, and they can be confused with non-mangled names. eg
-a function called \*(L"a\*(R" treated as a mangled type name would be
-demangled to \*(L"signed char\*(R".
-.IP "\fB\-i\fR" 4
-.IX Item "-i"
-.PD 0
-.IP "\fB\-\-no\-verbose\fR" 4
-.IX Item "--no-verbose"
-.PD
-Do not include implementation details (if any) in the demangled
-output.
-.IP "\fB\-s\fR \fIformat\fR" 4
-.IX Item "-s format"
-.PD 0
-.IP "\fB\-\-format=\fR\fIformat\fR" 4
-.IX Item "--format=format"
-.PD
-\&\fBc++filt\fR can decode various methods of mangling, used by
-different compilers. The argument to this option selects which
-method it uses:
-.RS 4
-.ie n .IP """auto""" 4
-.el .IP "\f(CWauto\fR" 4
-.IX Item "auto"
-Automatic selection based on executable (the default method)
-.ie n .IP """gnu""" 4
-.el .IP "\f(CWgnu\fR" 4
-.IX Item "gnu"
-the one used by the \s-1GNU\s0 \*(C+ compiler (g++)
-.ie n .IP """lucid""" 4
-.el .IP "\f(CWlucid\fR" 4
-.IX Item "lucid"
-the one used by the Lucid compiler (lcc)
-.ie n .IP """arm""" 4
-.el .IP "\f(CWarm\fR" 4
-.IX Item "arm"
-the one specified by the \*(C+ Annotated Reference Manual
-.ie n .IP """hp""" 4
-.el .IP "\f(CWhp\fR" 4
-.IX Item "hp"
-the one used by the \s-1HP\s0 compiler (aCC)
-.ie n .IP """edg""" 4
-.el .IP "\f(CWedg\fR" 4
-.IX Item "edg"
-the one used by the \s-1EDG\s0 compiler
-.ie n .IP """gnu\-v3""" 4
-.el .IP "\f(CWgnu\-v3\fR" 4
-.IX Item "gnu-v3"
-the one used by the \s-1GNU\s0 \*(C+ compiler (g++) with the V3 \s-1ABI\s0.
-.ie n .IP """java""" 4
-.el .IP "\f(CWjava\fR" 4
-.IX Item "java"
-the one used by the \s-1GNU\s0 Java compiler (gcj)
-.ie n .IP """gnat""" 4
-.el .IP "\f(CWgnat\fR" 4
-.IX Item "gnat"
-the one used by the \s-1GNU\s0 Ada compiler (\s-1GNAT\s0).
-.RE
-.RS 4
-.RE
-.IP "\fB\-\-help\fR" 4
-.IX Item "--help"
-Print a summary of the options to \fBc++filt\fR and exit.
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-Print the version number of \fBc++filt\fR and exit.
-.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.
-.SH "FOOTNOTES"
-.IX Header "FOOTNOTES"
-.IP "1." 4
-MS-DOS does not allow \f(CW\*(C`+\*(C'\fR characters in file names, so on
-MS-DOS this program is named \fB\s-1CXXFILT\s0\fR.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-the Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/doc/dlltool.1 b/binutils/doc/dlltool.1
deleted file mode 100644
index 44c5a4e01ddc..000000000000
--- a/binutils/doc/dlltool.1
+++ /dev/null
@@ -1,478 +0,0 @@
-.\" 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 "DLLTOOL 1"
-.TH DLLTOOL 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-dlltool \- Create files needed to build and use DLLs.
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-dlltool [\fB\-d\fR|\fB\-\-input\-def\fR \fIdef-file-name\fR]
- [\fB\-b\fR|\fB\-\-base\-file\fR \fIbase-file-name\fR]
- [\fB\-e\fR|\fB\-\-output\-exp\fR \fIexports-file-name\fR]
- [\fB\-z\fR|\fB\-\-output\-def\fR \fIdef-file-name\fR]
- [\fB\-l\fR|\fB\-\-output\-lib\fR \fIlibrary-file-name\fR]
- [\fB\-\-export\-all\-symbols\fR] [\fB\-\-no\-export\-all\-symbols\fR]
- [\fB\-\-exclude\-symbols\fR \fIlist\fR]
- [\fB\-\-no\-default\-excludes\fR]
- [\fB\-S\fR|\fB\-\-as\fR \fIpath-to-assembler\fR] [\fB\-f\fR|\fB\-\-as\-flags\fR \fIoptions\fR]
- [\fB\-D\fR|\fB\-\-dllname\fR \fIname\fR] [\fB\-m\fR|\fB\-\-machine\fR \fImachine\fR]
- [\fB\-a\fR|\fB\-\-add\-indirect\fR]
- [\fB\-U\fR|\fB\-\-add\-underscore\fR] [\fB\-\-add\-stdcall\-underscore\fR]
- [\fB\-k\fR|\fB\-\-kill\-at\fR] [\fB\-A\fR|\fB\-\-add\-stdcall\-alias\fR]
- [\fB\-p\fR|\fB\-\-ext\-prefix\-alias\fR \fIprefix\fR]
- [\fB\-x\fR|\fB\-\-no\-idata4\fR] [\fB\-c\fR|\fB\-\-no\-idata5\fR] [\fB\-i\fR|\fB\-\-interwork\fR]
- [\fB\-n\fR|\fB\-\-nodelete\fR] [\fB\-t\fR|\fB\-\-temp\-prefix\fR \fIprefix\fR]
- [\fB\-v\fR|\fB\-\-verbose\fR]
- [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR]
- [object\-file ...]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\fBdlltool\fR reads its inputs, which can come from the \fB\-d\fR and
-\&\fB\-b\fR options as well as object files specified on the command
-line. It then processes these inputs and if the \fB\-e\fR option has
-been specified it creates a exports file. If the \fB\-l\fR option
-has been specified it creates a library file and if the \fB\-z\fR option
-has been specified it creates a def file. Any or all of the \fB\-e\fR,
-\&\fB\-l\fR and \fB\-z\fR options can be present in one invocation of
-dlltool.
-.PP
-When creating a \s-1DLL\s0, along with the source for the \s-1DLL\s0, it is necessary
-to have three other files. \fBdlltool\fR can help with the creation of
-these files.
-.PP
-The first file is a \fI.def\fR file which specifies which functions are
-exported from the \s-1DLL\s0, which functions the \s-1DLL\s0 imports, and so on. This
-is a text file and can be created by hand, or \fBdlltool\fR can be used
-to create it using the \fB\-z\fR option. In this case \fBdlltool\fR
-will scan the object files specified on its command line looking for
-those functions which have been specially marked as being exported and
-put entries for them in the \fI.def\fR file it creates.
-.PP
-In order to mark a function as being exported from a \s-1DLL\s0, it needs to
-have an \fB\-export:<name_of_function>\fR entry in the \fB.drectve\fR
-section of the object file. This can be done in C by using the
-\&\fIasm()\fR operator:
-.PP
-.Vb 2
-\& asm (".section .drectve");
-\& asm (".ascii \e"\-export:my_func\e"");
-.Ve
-.PP
-.Vb 1
-\& int my_func (void) { ... }
-.Ve
-.PP
-The second file needed for \s-1DLL\s0 creation is an exports file. This file
-is linked with the object files that make up the body of the \s-1DLL\s0 and it
-handles the interface between the \s-1DLL\s0 and the outside world. This is a
-binary file and it can be created by giving the \fB\-e\fR option to
-\&\fBdlltool\fR when it is creating or reading in a \fI.def\fR file.
-.PP
-The third file needed for \s-1DLL\s0 creation is the library file that programs
-will link with in order to access the functions in the \s-1DLL\s0. This file
-can be created by giving the \fB\-l\fR option to dlltool when it
-is creating or reading in a \fI.def\fR file.
-.PP
-\&\fBdlltool\fR builds the library file by hand, but it builds the
-exports file by creating temporary files containing assembler statements
-and then assembling these. The \fB\-S\fR command line option can be
-used to specify the path to the assembler that dlltool will use,
-and the \fB\-f\fR option can be used to pass specific flags to that
-assembler. The \fB\-n\fR can be used to prevent dlltool from deleting
-these temporary assembler files when it is done, and if \fB\-n\fR is
-specified twice then this will prevent dlltool from deleting the
-temporary object files it used to build the library.
-.PP
-Here is an example of creating a \s-1DLL\s0 from a source file \fBdll.c\fR and
-also creating a program (from an object file called \fBprogram.o\fR)
-that uses that \s-1DLL:\s0
-.PP
-.Vb 4
-\& gcc \-c dll.c
-\& dlltool \-e exports.o \-l dll.lib dll.o
-\& gcc dll.o exports.o \-o dll.dll
-\& gcc program.o dll.lib \-o program
-.Ve
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-The command line options have the following meanings:
-.IP "\fB\-d\fR \fIfilename\fR" 4
-.IX Item "-d filename"
-.PD 0
-.IP "\fB\-\-input\-def\fR \fIfilename\fR" 4
-.IX Item "--input-def filename"
-.PD
-Specifies the name of a \fI.def\fR file to be read in and processed.
-.IP "\fB\-b\fR \fIfilename\fR" 4
-.IX Item "-b filename"
-.PD 0
-.IP "\fB\-\-base\-file\fR \fIfilename\fR" 4
-.IX Item "--base-file filename"
-.PD
-Specifies the name of a base file to be read in and processed. The
-contents of this file will be added to the relocation section in the
-exports file generated by dlltool.
-.IP "\fB\-e\fR \fIfilename\fR" 4
-.IX Item "-e filename"
-.PD 0
-.IP "\fB\-\-output\-exp\fR \fIfilename\fR" 4
-.IX Item "--output-exp filename"
-.PD
-Specifies the name of the export file to be created by dlltool.
-.IP "\fB\-z\fR \fIfilename\fR" 4
-.IX Item "-z filename"
-.PD 0
-.IP "\fB\-\-output\-def\fR \fIfilename\fR" 4
-.IX Item "--output-def filename"
-.PD
-Specifies the name of the \fI.def\fR file to be created by dlltool.
-.IP "\fB\-l\fR \fIfilename\fR" 4
-.IX Item "-l filename"
-.PD 0
-.IP "\fB\-\-output\-lib\fR \fIfilename\fR" 4
-.IX Item "--output-lib filename"
-.PD
-Specifies the name of the library file to be created by dlltool.
-.IP "\fB\-\-export\-all\-symbols\fR" 4
-.IX Item "--export-all-symbols"
-Treat all global and weak defined symbols found in the input object
-files as symbols to be exported. There is a small list of symbols which
-are not exported by default; see the \fB\-\-no\-default\-excludes\fR
-option. You may add to the list of symbols to not export by using the
-\&\fB\-\-exclude\-symbols\fR option.
-.IP "\fB\-\-no\-export\-all\-symbols\fR" 4
-.IX Item "--no-export-all-symbols"
-Only export symbols explicitly listed in an input \fI.def\fR file or in
-\&\fB.drectve\fR sections in the input object files. This is the default
-behaviour. The \fB.drectve\fR sections are created by \fBdllexport\fR
-attributes in the source code.
-.IP "\fB\-\-exclude\-symbols\fR \fIlist\fR" 4
-.IX Item "--exclude-symbols list"
-Do not export the symbols in \fIlist\fR. This is a list of symbol names
-separated by comma or colon characters. The symbol names should not
-contain a leading underscore. This is only meaningful when
-\&\fB\-\-export\-all\-symbols\fR is used.
-.IP "\fB\-\-no\-default\-excludes\fR" 4
-.IX Item "--no-default-excludes"
-When \fB\-\-export\-all\-symbols\fR is used, it will by default avoid
-exporting certain special symbols. The current list of symbols to avoid
-exporting is \fBDllMain@12\fR, \fBDllEntryPoint@0\fR,
-\&\fBimpure_ptr\fR. You may use the \fB\-\-no\-default\-excludes\fR option
-to go ahead and export these special symbols. This is only meaningful
-when \fB\-\-export\-all\-symbols\fR is used.
-.IP "\fB\-S\fR \fIpath\fR" 4
-.IX Item "-S path"
-.PD 0
-.IP "\fB\-\-as\fR \fIpath\fR" 4
-.IX Item "--as path"
-.PD
-Specifies the path, including the filename, of the assembler to be used
-to create the exports file.
-.IP "\fB\-f\fR \fIoptions\fR" 4
-.IX Item "-f options"
-.PD 0
-.IP "\fB\-\-as\-flags\fR \fIoptions\fR" 4
-.IX Item "--as-flags options"
-.PD
-Specifies any specific command line options to be passed to the
-assembler when building the exports file. This option will work even if
-the \fB\-S\fR option is not used. This option only takes one argument,
-and if it occurs more than once on the command line, then later
-occurrences will override earlier occurrences. So if it is necessary to
-pass multiple options to the assembler they should be enclosed in
-double quotes.
-.IP "\fB\-D\fR \fIname\fR" 4
-.IX Item "-D name"
-.PD 0
-.IP "\fB\-\-dll\-name\fR \fIname\fR" 4
-.IX Item "--dll-name name"
-.PD
-Specifies the name to be stored in the \fI.def\fR file as the name of
-the \s-1DLL\s0 when the \fB\-e\fR option is used. If this option is not
-present, then the filename given to the \fB\-e\fR option will be
-used as the name of the \s-1DLL\s0.
-.IP "\fB\-m\fR \fImachine\fR" 4
-.IX Item "-m machine"
-.PD 0
-.IP "\fB\-machine\fR \fImachine\fR" 4
-.IX Item "-machine machine"
-.PD
-Specifies the type of machine for which the library file should be
-built. \fBdlltool\fR has a built in default type, depending upon how
-it was created, but this option can be used to override that. This is
-normally only useful when creating DLLs for an \s-1ARM\s0 processor, when the
-contents of the \s-1DLL\s0 are actually encode using Thumb instructions.
-.IP "\fB\-a\fR" 4
-.IX Item "-a"
-.PD 0
-.IP "\fB\-\-add\-indirect\fR" 4
-.IX Item "--add-indirect"
-.PD
-Specifies that when \fBdlltool\fR is creating the exports file it
-should add a section which allows the exported functions to be
-referenced without using the import library. Whatever the hell that
-means!
-.IP "\fB\-U\fR" 4
-.IX Item "-U"
-.PD 0
-.IP "\fB\-\-add\-underscore\fR" 4
-.IX Item "--add-underscore"
-.PD
-Specifies that when \fBdlltool\fR is creating the exports file it
-should prepend an underscore to the names of \fIall\fR exported symbols.
-.IP "\fB\-\-add\-stdcall\-underscore\fR" 4
-.IX Item "--add-stdcall-underscore"
-Specifies that when \fBdlltool\fR is creating the exports file it
-should prepend an underscore to the names of exported \fIstdcall\fR
-functions. Variable names and non-stdcall function names are not modified.
-This option is useful when creating GNU-compatible import libs for third
-party DLLs that were built with MS-Windows tools.
-.IP "\fB\-k\fR" 4
-.IX Item "-k"
-.PD 0
-.IP "\fB\-\-kill\-at\fR" 4
-.IX Item "--kill-at"
-.PD
-Specifies that when \fBdlltool\fR is creating the exports file it
-should not append the string \fB@ <number>\fR. These numbers are
-called ordinal numbers and they represent another way of accessing the
-function in a \s-1DLL\s0, other than by name.
-.IP "\fB\-A\fR" 4
-.IX Item "-A"
-.PD 0
-.IP "\fB\-\-add\-stdcall\-alias\fR" 4
-.IX Item "--add-stdcall-alias"
-.PD
-Specifies that when \fBdlltool\fR is creating the exports file it
-should add aliases for stdcall symbols without \fB@ <number>\fR
-in addition to the symbols with \fB@ <number>\fR.
-.IP "\fB\-p\fR" 4
-.IX Item "-p"
-.PD 0
-.IP "\fB\-\-ext\-prefix\-alias\fR \fIprefix\fR" 4
-.IX Item "--ext-prefix-alias prefix"
-.PD
-Causes \fBdlltool\fR to create external aliases for all \s-1DLL\s0
-imports with the specified prefix. The aliases are created for both
-external and import symbols with no leading underscore.
-.IP "\fB\-x\fR" 4
-.IX Item "-x"
-.PD 0
-.IP "\fB\-\-no\-idata4\fR" 4
-.IX Item "--no-idata4"
-.PD
-Specifies that when \fBdlltool\fR is creating the exports and library
-files it should omit the \f(CW\*(C`.idata4\*(C'\fR section. This is for compatibility
-with certain operating systems.
-.IP "\fB\-c\fR" 4
-.IX Item "-c"
-.PD 0
-.IP "\fB\-\-no\-idata5\fR" 4
-.IX Item "--no-idata5"
-.PD
-Specifies that when \fBdlltool\fR is creating the exports and library
-files it should omit the \f(CW\*(C`.idata5\*(C'\fR section. This is for compatibility
-with certain operating systems.
-.IP "\fB\-i\fR" 4
-.IX Item "-i"
-.PD 0
-.IP "\fB\-\-interwork\fR" 4
-.IX Item "--interwork"
-.PD
-Specifies that \fBdlltool\fR should mark the objects in the library
-file and exports file that it produces as supporting interworking
-between \s-1ARM\s0 and Thumb code.
-.IP "\fB\-n\fR" 4
-.IX Item "-n"
-.PD 0
-.IP "\fB\-\-nodelete\fR" 4
-.IX Item "--nodelete"
-.PD
-Makes \fBdlltool\fR preserve the temporary assembler files it used to
-create the exports file. If this option is repeated then dlltool will
-also preserve the temporary object files it uses to create the library
-file.
-.IP "\fB\-t\fR \fIprefix\fR" 4
-.IX Item "-t prefix"
-.PD 0
-.IP "\fB\-\-temp\-prefix\fR \fIprefix\fR" 4
-.IX Item "--temp-prefix prefix"
-.PD
-Makes \fBdlltool\fR use \fIprefix\fR when constructing the names of
-temporary assembler and object files. By default, the temp file prefix
-is generated from the pid.
-.IP "\fB\-v\fR" 4
-.IX Item "-v"
-.PD 0
-.IP "\fB\-\-verbose\fR" 4
-.IX Item "--verbose"
-.PD
-Make dlltool describe what it is doing.
-.IP "\fB\-h\fR" 4
-.IX Item "-h"
-.PD 0
-.IP "\fB\-\-help\fR" 4
-.IX Item "--help"
-.PD
-Displays a list of command line options and then exits.
-.IP "\fB\-V\fR" 4
-.IX Item "-V"
-.PD 0
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-.PD
-Displays dlltool's version number and then exits.
-.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.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-The Info pages for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/doc/nlmconv.1 b/binutils/doc/nlmconv.1
deleted file mode 100644
index d8f4d14cae27..000000000000
--- a/binutils/doc/nlmconv.1
+++ /dev/null
@@ -1,243 +0,0 @@
-.\" 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 "NLMCONV 1"
-.TH NLMCONV 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-nlmconv \- converts object code into an NLM.
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-nlmconv [\fB\-I\fR \fIbfdname\fR|\fB\-\-input\-target=\fR\fIbfdname\fR]
- [\fB\-O\fR \fIbfdname\fR|\fB\-\-output\-target=\fR\fIbfdname\fR]
- [\fB\-T\fR \fIheaderfile\fR|\fB\-\-header\-file=\fR\fIheaderfile\fR]
- [\fB\-d\fR|\fB\-\-debug\fR] [\fB\-l\fR \fIlinker\fR|\fB\-\-linker=\fR\fIlinker\fR]
- [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR]
- \fIinfile\fR \fIoutfile\fR
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\fBnlmconv\fR converts the relocatable \fBi386\fR object file
-\&\fIinfile\fR into the NetWare Loadable Module \fIoutfile\fR, optionally
-reading \fIheaderfile\fR for \s-1NLM\s0 header information. For instructions
-on writing the \s-1NLM\s0 command file language used in header files, see the
-\&\fBlinkers\fR section, \fB\s-1NLMLINK\s0\fR in particular, of the \fI\s-1NLM\s0
-Development and Tools Overview\fR, which is part of the \s-1NLM\s0 Software
-Developer's Kit (\*(L"\s-1NLM\s0 \s-1SDK\s0\*(R"), available from Novell, Inc.
-\&\fBnlmconv\fR uses the \s-1GNU\s0 Binary File Descriptor library to read
-\&\fIinfile\fR;
-.PP
-\&\fBnlmconv\fR can perform a link step. In other words, you can list
-more than one object file for input if you list them in the definitions
-file (rather than simply specifying one input file on the command line).
-In this case, \fBnlmconv\fR calls the linker for you.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-.IP "\fB\-I\fR \fIbfdname\fR" 4
-.IX Item "-I bfdname"
-.PD 0
-.IP "\fB\-\-input\-target=\fR\fIbfdname\fR" 4
-.IX Item "--input-target=bfdname"
-.PD
-Object format of the input file. \fBnlmconv\fR can usually determine
-the format of a given file (so no default is necessary).
-.IP "\fB\-O\fR \fIbfdname\fR" 4
-.IX Item "-O bfdname"
-.PD 0
-.IP "\fB\-\-output\-target=\fR\fIbfdname\fR" 4
-.IX Item "--output-target=bfdname"
-.PD
-Object format of the output file. \fBnlmconv\fR infers the output
-format based on the input format, e.g. for a \fBi386\fR input file the
-output format is \fBnlm32\-i386\fR.
-.IP "\fB\-T\fR \fIheaderfile\fR" 4
-.IX Item "-T headerfile"
-.PD 0
-.IP "\fB\-\-header\-file=\fR\fIheaderfile\fR" 4
-.IX Item "--header-file=headerfile"
-.PD
-Reads \fIheaderfile\fR for \s-1NLM\s0 header information. For instructions on
-writing the \s-1NLM\s0 command file language used in header files, see see the
-\&\fBlinkers\fR section, of the \fI\s-1NLM\s0 Development and Tools
-Overview\fR, which is part of the \s-1NLM\s0 Software Developer's Kit, available
-from Novell, Inc.
-.IP "\fB\-d\fR" 4
-.IX Item "-d"
-.PD 0
-.IP "\fB\-\-debug\fR" 4
-.IX Item "--debug"
-.PD
-Displays (on standard error) the linker command line used by \fBnlmconv\fR.
-.IP "\fB\-l\fR \fIlinker\fR" 4
-.IX Item "-l linker"
-.PD 0
-.IP "\fB\-\-linker=\fR\fIlinker\fR" 4
-.IX Item "--linker=linker"
-.PD
-Use \fIlinker\fR for any linking. \fIlinker\fR can be an absolute or a
-relative pathname.
-.IP "\fB\-h\fR" 4
-.IX Item "-h"
-.PD 0
-.IP "\fB\-\-help\fR" 4
-.IX Item "--help"
-.PD
-Prints a usage summary.
-.IP "\fB\-V\fR" 4
-.IX Item "-V"
-.PD 0
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-.PD
-Prints the version number for \fBnlmconv\fR.
-.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.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-the Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/doc/nm.1 b/binutils/doc/nm.1
deleted file mode 100644
index 9f2271c7cbd4..000000000000
--- a/binutils/doc/nm.1
+++ /dev/null
@@ -1,449 +0,0 @@
-.\" 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 "NM 1"
-.TH NM 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-nm \- list symbols from object files
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-nm [\fB\-a\fR|\fB\-\-debug\-syms\fR] [\fB\-g\fR|\fB\-\-extern\-only\fR]
- [\fB\-B\fR] [\fB\-C\fR|\fB\-\-demangle\fR[=\fIstyle\fR]] [\fB\-D\fR|\fB\-\-dynamic\fR]
- [\fB\-S\fR|\fB\-\-print\-size\fR] [\fB\-s\fR|\fB\-\-print\-armap\fR]
- [\fB\-A\fR|\fB\-o\fR|\fB\-\-print\-file\-name\fR][\fB\-\-special\-syms\fR]
- [\fB\-n\fR|\fB\-v\fR|\fB\-\-numeric\-sort\fR] [\fB\-p\fR|\fB\-\-no\-sort\fR]
- [\fB\-r\fR|\fB\-\-reverse\-sort\fR] [\fB\-\-size\-sort\fR] [\fB\-u\fR|\fB\-\-undefined\-only\fR]
- [\fB\-t\fR \fIradix\fR|\fB\-\-radix=\fR\fIradix\fR] [\fB\-P\fR|\fB\-\-portability\fR]
- [\fB\-\-target=\fR\fIbfdname\fR] [\fB\-f\fR\fIformat\fR|\fB\-\-format=\fR\fIformat\fR]
- [\fB\-\-defined\-only\fR] [\fB\-l\fR|\fB\-\-line\-numbers\fR] [\fB\-\-no\-demangle\fR]
- [\fB\-V\fR|\fB\-\-version\fR] [\fB\-X 32_64\fR] [\fB\-\-help\fR] [\fIobjfile\fR...]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\s-1GNU\s0 \fBnm\fR lists the symbols from object files \fIobjfile\fR....
-If no object files are listed as arguments, \fBnm\fR assumes the file
-\&\fIa.out\fR.
-.PP
-For each symbol, \fBnm\fR shows:
-.IP "\(bu" 4
-The symbol value, in the radix selected by options (see below), or
-hexadecimal by default.
-.IP "\(bu" 4
-The symbol type. At least the following types are used; others are, as
-well, depending on the object file format. If lowercase, the symbol is
-local; if uppercase, the symbol is global (external).
-.RS 4
-.ie n .IP """A""" 4
-.el .IP "\f(CWA\fR" 4
-.IX Item "A"
-The symbol's value is absolute, and will not be changed by further
-linking.
-.ie n .IP """B""" 4
-.el .IP "\f(CWB\fR" 4
-.IX Item "B"
-The symbol is in the uninitialized data section (known as \s-1BSS\s0).
-.ie n .IP """C""" 4
-.el .IP "\f(CWC\fR" 4
-.IX Item "C"
-The symbol is common. Common symbols are uninitialized data. When
-linking, multiple common symbols may appear with the same name. If the
-symbol is defined anywhere, the common symbols are treated as undefined
-references.
-.ie n .IP """D""" 4
-.el .IP "\f(CWD\fR" 4
-.IX Item "D"
-The symbol is in the initialized data section.
-.ie n .IP """G""" 4
-.el .IP "\f(CWG\fR" 4
-.IX Item "G"
-The symbol is in an initialized data section for small objects. Some
-object file formats permit more efficient access to small data objects,
-such as a global int variable as opposed to a large global array.
-.ie n .IP """I""" 4
-.el .IP "\f(CWI\fR" 4
-.IX Item "I"
-The symbol is an indirect reference to another symbol. This is a \s-1GNU\s0
-extension to the a.out object file format which is rarely used.
-.ie n .IP """N""" 4
-.el .IP "\f(CWN\fR" 4
-.IX Item "N"
-The symbol is a debugging symbol.
-.ie n .IP """R""" 4
-.el .IP "\f(CWR\fR" 4
-.IX Item "R"
-The symbol is in a read only data section.
-.ie n .IP """S""" 4
-.el .IP "\f(CWS\fR" 4
-.IX Item "S"
-The symbol is in an uninitialized data section for small objects.
-.ie n .IP """T""" 4
-.el .IP "\f(CWT\fR" 4
-.IX Item "T"
-The symbol is in the text (code) section.
-.ie n .IP """U""" 4
-.el .IP "\f(CWU\fR" 4
-.IX Item "U"
-The symbol is undefined.
-.ie n .IP """V""" 4
-.el .IP "\f(CWV\fR" 4
-.IX Item "V"
-The symbol is a weak object. When a weak defined symbol is linked with
-a normal defined symbol, the normal defined symbol is used with no error.
-When a weak undefined symbol is linked and the symbol is not defined,
-the value of the weak symbol becomes zero with no error.
-.ie n .IP """W""" 4
-.el .IP "\f(CWW\fR" 4
-.IX Item "W"
-The symbol is a weak symbol that has not been specifically tagged as a
-weak object symbol. When a weak defined symbol is linked with a normal
-defined symbol, the normal defined symbol is used with no error.
-When a weak undefined symbol is linked and the symbol is not defined,
-the value of the symbol is determined in a system-specific manner without
-error. On some systems, uppercase indicates that a default value has been
-specified.
-.ie n .IP """\-""" 4
-.el .IP "\f(CW\-\fR" 4
-.IX Item "-"
-The symbol is a stabs symbol in an a.out object file. In this case, the
-next values printed are the stabs other field, the stabs desc field, and
-the stab type. Stabs symbols are used to hold debugging information.
-.ie n .IP """?""" 4
-.el .IP "\f(CW?\fR" 4
-.IX Item "?"
-The symbol type is unknown, or object file format specific.
-.RE
-.RS 4
-.RE
-.IP "\(bu" 4
-The symbol name.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-The long and short forms of options, shown here as alternatives, are
-equivalent.
-.IP "\fB\-A\fR" 4
-.IX Item "-A"
-.PD 0
-.IP "\fB\-o\fR" 4
-.IX Item "-o"
-.IP "\fB\-\-print\-file\-name\fR" 4
-.IX Item "--print-file-name"
-.PD
-Precede each symbol by the name of the input file (or archive member)
-in which it was found, rather than identifying the input file once only,
-before all of its symbols.
-.IP "\fB\-a\fR" 4
-.IX Item "-a"
-.PD 0
-.IP "\fB\-\-debug\-syms\fR" 4
-.IX Item "--debug-syms"
-.PD
-Display all symbols, even debugger-only symbols; normally these are not
-listed.
-.IP "\fB\-B\fR" 4
-.IX Item "-B"
-The same as \fB\-\-format=bsd\fR (for compatibility with the \s-1MIPS\s0 \fBnm\fR).
-.IP "\fB\-C\fR" 4
-.IX Item "-C"
-.PD 0
-.IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4
-.IX Item "--demangle[=style]"
-.PD
-Decode (\fIdemangle\fR) low-level symbol names into user-level names.
-Besides removing any initial underscore prepended by the system, this
-makes \*(C+ function names readable. Different compilers have different
-mangling styles. The optional demangling style argument can be used to
-choose an appropriate demangling style for your compiler.
-.IP "\fB\-\-no\-demangle\fR" 4
-.IX Item "--no-demangle"
-Do not demangle low-level symbol names. This is the default.
-.IP "\fB\-D\fR" 4
-.IX Item "-D"
-.PD 0
-.IP "\fB\-\-dynamic\fR" 4
-.IX Item "--dynamic"
-.PD
-Display the dynamic symbols rather than the normal symbols. This is
-only meaningful for dynamic objects, such as certain types of shared
-libraries.
-.IP "\fB\-f\fR \fIformat\fR" 4
-.IX Item "-f format"
-.PD 0
-.IP "\fB\-\-format=\fR\fIformat\fR" 4
-.IX Item "--format=format"
-.PD
-Use the output format \fIformat\fR, which can be \f(CW\*(C`bsd\*(C'\fR,
-\&\f(CW\*(C`sysv\*(C'\fR, or \f(CW\*(C`posix\*(C'\fR. The default is \f(CW\*(C`bsd\*(C'\fR.
-Only the first character of \fIformat\fR is significant; it can be
-either upper or lower case.
-.IP "\fB\-g\fR" 4
-.IX Item "-g"
-.PD 0
-.IP "\fB\-\-extern\-only\fR" 4
-.IX Item "--extern-only"
-.PD
-Display only external symbols.
-.IP "\fB\-l\fR" 4
-.IX Item "-l"
-.PD 0
-.IP "\fB\-\-line\-numbers\fR" 4
-.IX Item "--line-numbers"
-.PD
-For each symbol, use debugging information to try to find a filename and
-line number. For a defined symbol, look for the line number of the
-address of the symbol. For an undefined symbol, look for the line
-number of a relocation entry which refers to the symbol. If line number
-information can be found, print it after the other symbol information.
-.IP "\fB\-n\fR" 4
-.IX Item "-n"
-.PD 0
-.IP "\fB\-v\fR" 4
-.IX Item "-v"
-.IP "\fB\-\-numeric\-sort\fR" 4
-.IX Item "--numeric-sort"
-.PD
-Sort symbols numerically by their addresses, rather than alphabetically
-by their names.
-.IP "\fB\-p\fR" 4
-.IX Item "-p"
-.PD 0
-.IP "\fB\-\-no\-sort\fR" 4
-.IX Item "--no-sort"
-.PD
-Do not bother to sort the symbols in any order; print them in the order
-encountered.
-.IP "\fB\-P\fR" 4
-.IX Item "-P"
-.PD 0
-.IP "\fB\-\-portability\fR" 4
-.IX Item "--portability"
-.PD
-Use the \s-1POSIX\s0.2 standard output format instead of the default format.
-Equivalent to \fB\-f posix\fR.
-.IP "\fB\-S\fR" 4
-.IX Item "-S"
-.PD 0
-.IP "\fB\-\-print\-size\fR" 4
-.IX Item "--print-size"
-.PD
-Print size, not the value, of defined symbols for the \f(CW\*(C`bsd\*(C'\fR output format.
-.IP "\fB\-s\fR" 4
-.IX Item "-s"
-.PD 0
-.IP "\fB\-\-print\-armap\fR" 4
-.IX Item "--print-armap"
-.PD
-When listing symbols from archive members, include the index: a mapping
-(stored in the archive by \fBar\fR or \fBranlib\fR) of which modules
-contain definitions for which names.
-.IP "\fB\-r\fR" 4
-.IX Item "-r"
-.PD 0
-.IP "\fB\-\-reverse\-sort\fR" 4
-.IX Item "--reverse-sort"
-.PD
-Reverse the order of the sort (whether numeric or alphabetic); let the
-last come first.
-.IP "\fB\-\-size\-sort\fR" 4
-.IX Item "--size-sort"
-Sort symbols by size. The size is computed as the difference between
-the value of the symbol and the value of the symbol with the next higher
-value. If the \f(CW\*(C`bsd\*(C'\fR output format is used the size of the symbol
-is printed, rather than the value, and \fB\-S\fR must be used in order
-both size and value to be printed.
-.IP "\fB\-\-special\-syms\fR" 4
-.IX Item "--special-syms"
-Display symbols which have a target-specific special meaning. These
-symbols are usually used by the target for some special processing and
-are not normally helpful when included included in the normal symbol
-lists. For example for \s-1ARM\s0 targets this option would skip the mapping
-symbols used to mark transistions between \s-1ARM\s0 code, \s-1THUMB\s0 code and
-data.
-.IP "\fB\-t\fR \fIradix\fR" 4
-.IX Item "-t radix"
-.PD 0
-.IP "\fB\-\-radix=\fR\fIradix\fR" 4
-.IX Item "--radix=radix"
-.PD
-Use \fIradix\fR as the radix for printing the symbol values. It must be
-\&\fBd\fR for decimal, \fBo\fR for octal, or \fBx\fR for hexadecimal.
-.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
-.IX Item "--target=bfdname"
-Specify an object code format other than your system's default format.
-.IP "\fB\-u\fR" 4
-.IX Item "-u"
-.PD 0
-.IP "\fB\-\-undefined\-only\fR" 4
-.IX Item "--undefined-only"
-.PD
-Display only undefined symbols (those external to each object file).
-.IP "\fB\-\-defined\-only\fR" 4
-.IX Item "--defined-only"
-Display only defined symbols for each object file.
-.IP "\fB\-V\fR" 4
-.IX Item "-V"
-.PD 0
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-.PD
-Show the version number of \fBnm\fR and exit.
-.IP "\fB\-X\fR" 4
-.IX Item "-X"
-This option is ignored for compatibility with the \s-1AIX\s0 version of
-\&\fBnm\fR. It takes one parameter which must be the string
-\&\fB32_64\fR. The default mode of \s-1AIX\s0 \fBnm\fR corresponds
-to \fB\-X 32\fR, which is not supported by \s-1GNU\s0 \fBnm\fR.
-.IP "\fB\-\-help\fR" 4
-.IX Item "--help"
-Show a summary of the options to \fBnm\fR and exit.
-.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.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-\&\fIar\fR\|(1), \fIobjdump\fR\|(1), \fIranlib\fR\|(1), and the Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/doc/objcopy.1 b/binutils/doc/objcopy.1
deleted file mode 100644
index 828cddef56ec..000000000000
--- a/binutils/doc/objcopy.1
+++ /dev/null
@@ -1,795 +0,0 @@
-.\" 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 "OBJCOPY 1"
-.TH OBJCOPY 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-objcopy \- copy and translate object files
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-objcopy [\fB\-F\fR \fIbfdname\fR|\fB\-\-target=\fR\fIbfdname\fR]
- [\fB\-I\fR \fIbfdname\fR|\fB\-\-input\-target=\fR\fIbfdname\fR]
- [\fB\-O\fR \fIbfdname\fR|\fB\-\-output\-target=\fR\fIbfdname\fR]
- [\fB\-B\fR \fIbfdarch\fR|\fB\-\-binary\-architecture=\fR\fIbfdarch\fR]
- [\fB\-S\fR|\fB\-\-strip\-all\fR]
- [\fB\-g\fR|\fB\-\-strip\-debug\fR]
- [\fB\-K\fR \fIsymbolname\fR|\fB\-\-keep\-symbol=\fR\fIsymbolname\fR]
- [\fB\-N\fR \fIsymbolname\fR|\fB\-\-strip\-symbol=\fR\fIsymbolname\fR]
- [\fB\-\-strip\-unneeded\-symbol=\fR\fIsymbolname\fR]
- [\fB\-G\fR \fIsymbolname\fR|\fB\-\-keep\-global\-symbol=\fR\fIsymbolname\fR]
- [\fB\-L\fR \fIsymbolname\fR|\fB\-\-localize\-symbol=\fR\fIsymbolname\fR]
- [\fB\-\-globalize\-symbol=\fR\fIsymbolname\fR]
- [\fB\-W\fR \fIsymbolname\fR|\fB\-\-weaken\-symbol=\fR\fIsymbolname\fR]
- [\fB\-w\fR|\fB\-\-wildcard\fR]
- [\fB\-x\fR|\fB\-\-discard\-all\fR]
- [\fB\-X\fR|\fB\-\-discard\-locals\fR]
- [\fB\-b\fR \fIbyte\fR|\fB\-\-byte=\fR\fIbyte\fR]
- [\fB\-i\fR \fIinterleave\fR|\fB\-\-interleave=\fR\fIinterleave\fR]
- [\fB\-j\fR \fIsectionname\fR|\fB\-\-only\-section=\fR\fIsectionname\fR]
- [\fB\-R\fR \fIsectionname\fR|\fB\-\-remove\-section=\fR\fIsectionname\fR]
- [\fB\-p\fR|\fB\-\-preserve\-dates\fR]
- [\fB\-\-debugging\fR]
- [\fB\-\-gap\-fill=\fR\fIval\fR]
- [\fB\-\-pad\-to=\fR\fIaddress\fR]
- [\fB\-\-set\-start=\fR\fIval\fR]
- [\fB\-\-adjust\-start=\fR\fIincr\fR]
- [\fB\-\-change\-addresses=\fR\fIincr\fR]
- [\fB\-\-change\-section\-address\fR \fIsection\fR{=,+,\-}\fIval\fR]
- [\fB\-\-change\-section\-lma\fR \fIsection\fR{=,+,\-}\fIval\fR]
- [\fB\-\-change\-section\-vma\fR \fIsection\fR{=,+,\-}\fIval\fR]
- [\fB\-\-change\-warnings\fR] [\fB\-\-no\-change\-warnings\fR]
- [\fB\-\-set\-section\-flags\fR \fIsection\fR=\fIflags\fR]
- [\fB\-\-add\-section\fR \fIsectionname\fR=\fIfilename\fR]
- [\fB\-\-rename\-section\fR \fIoldname\fR=\fInewname\fR[,\fIflags\fR]]
- [\fB\-\-change\-leading\-char\fR] [\fB\-\-remove\-leading\-char\fR]
- [\fB\-\-srec\-len=\fR\fIival\fR] [\fB\-\-srec\-forceS3\fR]
- [\fB\-\-redefine\-sym\fR \fIold\fR=\fInew\fR]
- [\fB\-\-redefine\-syms=\fR\fIfilename\fR]
- [\fB\-\-weaken\fR]
- [\fB\-\-keep\-symbols=\fR\fIfilename\fR]
- [\fB\-\-strip\-symbols=\fR\fIfilename\fR]
- [\fB\-\-strip\-unneeded\-symbols=\fR\fIfilename\fR]
- [\fB\-\-keep\-global\-symbols=\fR\fIfilename\fR]
- [\fB\-\-localize\-symbols=\fR\fIfilename\fR]
- [\fB\-\-globalize\-symbols=\fR\fIfilename\fR]
- [\fB\-\-weaken\-symbols=\fR\fIfilename\fR]
- [\fB\-\-alt\-machine\-code=\fR\fIindex\fR]
- [\fB\-\-prefix\-symbols=\fR\fIstring\fR]
- [\fB\-\-prefix\-sections=\fR\fIstring\fR]
- [\fB\-\-prefix\-alloc\-sections=\fR\fIstring\fR]
- [\fB\-\-add\-gnu\-debuglink=\fR\fIpath-to-file\fR]
- [\fB\-\-keep\-file\-symbols\fR]
- [\fB\-\-only\-keep\-debug\fR]
- [\fB\-\-writable\-text\fR]
- [\fB\-\-readonly\-text\fR]
- [\fB\-\-pure\fR]
- [\fB\-\-impure\fR]
- [\fB\-v\fR|\fB\-\-verbose\fR]
- [\fB\-V\fR|\fB\-\-version\fR]
- [\fB\-\-help\fR] [\fB\-\-info\fR]
- \fIinfile\fR [\fIoutfile\fR]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-The \s-1GNU\s0 \fBobjcopy\fR utility copies the contents of an object
-file to another. \fBobjcopy\fR uses the \s-1GNU\s0 \s-1BFD\s0 Library to
-read and write the object files. It can write the destination object
-file in a format different from that of the source object file. The
-exact behavior of \fBobjcopy\fR is controlled by command-line options.
-Note that \fBobjcopy\fR should be able to copy a fully linked file
-between any two formats. However, copying a relocatable object file
-between any two formats may not work as expected.
-.PP
-\&\fBobjcopy\fR creates temporary files to do its translations and
-deletes them afterward. \fBobjcopy\fR uses \s-1BFD\s0 to do all its
-translation work; it has access to all the formats described in \s-1BFD\s0
-and thus is able to recognize most formats without being told
-explicitly.
-.PP
-\&\fBobjcopy\fR can be used to generate S\-records by using an output
-target of \fBsrec\fR (e.g., use \fB\-O srec\fR).
-.PP
-\&\fBobjcopy\fR can be used to generate a raw binary file by using an
-output target of \fBbinary\fR (e.g., use \fB\-O binary\fR). When
-\&\fBobjcopy\fR generates a raw binary file, it will essentially produce
-a memory dump of the contents of the input object file. All symbols and
-relocation information will be discarded. The memory dump will start at
-the load address of the lowest section copied into the output file.
-.PP
-When generating an S\-record or a raw binary file, it may be helpful to
-use \fB\-S\fR to remove sections containing debugging information. In
-some cases \fB\-R\fR will be useful to remove sections which contain
-information that is not needed by the binary file.
-.PP
-Note\-\-\-\fBobjcopy\fR is not able to change the endianness of its input
-files. If the input format has an endianness (some formats do not),
-\&\fBobjcopy\fR can only copy the inputs into file formats that have the
-same endianness or which have no endianness (e.g., \fBsrec\fR).
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-.IP "\fIinfile\fR" 4
-.IX Item "infile"
-.PD 0
-.IP "\fIoutfile\fR" 4
-.IX Item "outfile"
-.PD
-The input and output files, respectively.
-If you do not specify \fIoutfile\fR, \fBobjcopy\fR creates a
-temporary file and destructively renames the result with
-the name of \fIinfile\fR.
-.IP "\fB\-I\fR \fIbfdname\fR" 4
-.IX Item "-I bfdname"
-.PD 0
-.IP "\fB\-\-input\-target=\fR\fIbfdname\fR" 4
-.IX Item "--input-target=bfdname"
-.PD
-Consider the source file's object format to be \fIbfdname\fR, rather than
-attempting to deduce it.
-.IP "\fB\-O\fR \fIbfdname\fR" 4
-.IX Item "-O bfdname"
-.PD 0
-.IP "\fB\-\-output\-target=\fR\fIbfdname\fR" 4
-.IX Item "--output-target=bfdname"
-.PD
-Write the output file using the object format \fIbfdname\fR.
-.IP "\fB\-F\fR \fIbfdname\fR" 4
-.IX Item "-F bfdname"
-.PD 0
-.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
-.IX Item "--target=bfdname"
-.PD
-Use \fIbfdname\fR as the object format for both the input and the output
-file; i.e., simply transfer data from source to destination with no
-translation.
-.IP "\fB\-B\fR \fIbfdarch\fR" 4
-.IX Item "-B bfdarch"
-.PD 0
-.IP "\fB\-\-binary\-architecture=\fR\fIbfdarch\fR" 4
-.IX Item "--binary-architecture=bfdarch"
-.PD
-Useful when transforming a raw binary input file into an object file.
-In this case the output architecture can be set to \fIbfdarch\fR. This
-option will be ignored if the input file has a known \fIbfdarch\fR. You
-can access this binary data inside a program by referencing the special
-symbols that are created by the conversion process. These symbols are
-called _binary_\fIobjfile\fR_start, _binary_\fIobjfile\fR_end and
-_binary_\fIobjfile\fR_size. e.g. you can transform a picture file into
-an object file and then access it in your code using these symbols.
-.IP "\fB\-j\fR \fIsectionname\fR" 4
-.IX Item "-j sectionname"
-.PD 0
-.IP "\fB\-\-only\-section=\fR\fIsectionname\fR" 4
-.IX Item "--only-section=sectionname"
-.PD
-Copy only the named section from the input file to the output file.
-This option may be given more than once. Note that using this option
-inappropriately may make the output file unusable.
-.IP "\fB\-R\fR \fIsectionname\fR" 4
-.IX Item "-R sectionname"
-.PD 0
-.IP "\fB\-\-remove\-section=\fR\fIsectionname\fR" 4
-.IX Item "--remove-section=sectionname"
-.PD
-Remove any section named \fIsectionname\fR from the output file. This
-option may be given more than once. Note that using this option
-inappropriately may make the output file unusable.
-.IP "\fB\-S\fR" 4
-.IX Item "-S"
-.PD 0
-.IP "\fB\-\-strip\-all\fR" 4
-.IX Item "--strip-all"
-.PD
-Do not copy relocation and symbol information from the source file.
-.IP "\fB\-g\fR" 4
-.IX Item "-g"
-.PD 0
-.IP "\fB\-\-strip\-debug\fR" 4
-.IX Item "--strip-debug"
-.PD
-Do not copy debugging symbols or sections from the source file.
-.IP "\fB\-\-strip\-unneeded\fR" 4
-.IX Item "--strip-unneeded"
-Strip all symbols that are not needed for relocation processing.
-.IP "\fB\-K\fR \fIsymbolname\fR" 4
-.IX Item "-K symbolname"
-.PD 0
-.IP "\fB\-\-keep\-symbol=\fR\fIsymbolname\fR" 4
-.IX Item "--keep-symbol=symbolname"
-.PD
-When stripping symbols, keep symbol \fIsymbolname\fR even if it would
-normally be stripped. This option may be given more than once.
-.IP "\fB\-N\fR \fIsymbolname\fR" 4
-.IX Item "-N symbolname"
-.PD 0
-.IP "\fB\-\-strip\-symbol=\fR\fIsymbolname\fR" 4
-.IX Item "--strip-symbol=symbolname"
-.PD
-Do not copy symbol \fIsymbolname\fR from the source file. This option
-may be given more than once.
-.IP "\fB\-\-strip\-unneeded\-symbol=\fR\fIsymbolname\fR" 4
-.IX Item "--strip-unneeded-symbol=symbolname"
-Do not copy symbol \fIsymbolname\fR from the source file unless it is needed
-by a relocation. This option may be given more than once.
-.IP "\fB\-G\fR \fIsymbolname\fR" 4
-.IX Item "-G symbolname"
-.PD 0
-.IP "\fB\-\-keep\-global\-symbol=\fR\fIsymbolname\fR" 4
-.IX Item "--keep-global-symbol=symbolname"
-.PD
-Keep only symbol \fIsymbolname\fR global. Make all other symbols local
-to the file, so that they are not visible externally. This option may
-be given more than once.
-.IP "\fB\-L\fR \fIsymbolname\fR" 4
-.IX Item "-L symbolname"
-.PD 0
-.IP "\fB\-\-localize\-symbol=\fR\fIsymbolname\fR" 4
-.IX Item "--localize-symbol=symbolname"
-.PD
-Make symbol \fIsymbolname\fR local to the file, so that it is not
-visible externally. This option may be given more than once.
-.IP "\fB\-W\fR \fIsymbolname\fR" 4
-.IX Item "-W symbolname"
-.PD 0
-.IP "\fB\-\-weaken\-symbol=\fR\fIsymbolname\fR" 4
-.IX Item "--weaken-symbol=symbolname"
-.PD
-Make symbol \fIsymbolname\fR weak. This option may be given more than once.
-.IP "\fB\-\-globalize\-symbol=\fR\fIsymbolname\fR" 4
-.IX Item "--globalize-symbol=symbolname"
-Give symbol \fIsymbolname\fR global scoping so that it is visible
-outside of the file in which it is defined. This option may be given
-more than once.
-.IP "\fB\-w\fR" 4
-.IX Item "-w"
-.PD 0
-.IP "\fB\-\-wildcard\fR" 4
-.IX Item "--wildcard"
-.PD
-Permit regular expressions in \fIsymbolname\fRs used in other command
-line options. The question mark (?), asterisk (*), backslash (\e) and
-square brackets ([]) operators can be used anywhere in the symbol
-name. If the first character of the symbol name is the exclamation
-point (!) then the sense of the switch is reversed for that symbol.
-For example:
-.Sp
-.Vb 1
-\& \-w \-W !foo \-W fo*
-.Ve
-.Sp
-would cause objcopy to weaken all symbols that start with \*(L"fo\*(R"
-except for the symbol \*(L"foo\*(R".
-.IP "\fB\-x\fR" 4
-.IX Item "-x"
-.PD 0
-.IP "\fB\-\-discard\-all\fR" 4
-.IX Item "--discard-all"
-.PD
-Do not copy non-global symbols from the source file.
-.IP "\fB\-X\fR" 4
-.IX Item "-X"
-.PD 0
-.IP "\fB\-\-discard\-locals\fR" 4
-.IX Item "--discard-locals"
-.PD
-Do not copy compiler-generated local symbols.
-(These usually start with \fBL\fR or \fB.\fR.)
-.IP "\fB\-b\fR \fIbyte\fR" 4
-.IX Item "-b byte"
-.PD 0
-.IP "\fB\-\-byte=\fR\fIbyte\fR" 4
-.IX Item "--byte=byte"
-.PD
-Keep only every \fIbyte\fRth byte of the input file (header data is not
-affected). \fIbyte\fR can be in the range from 0 to \fIinterleave\fR\-1,
-where \fIinterleave\fR is given by the \fB\-i\fR or \fB\-\-interleave\fR
-option, or the default of 4. This option is useful for creating files
-to program \s-1ROM\s0. It is typically used with an \f(CW\*(C`srec\*(C'\fR output
-target.
-.IP "\fB\-i\fR \fIinterleave\fR" 4
-.IX Item "-i interleave"
-.PD 0
-.IP "\fB\-\-interleave=\fR\fIinterleave\fR" 4
-.IX Item "--interleave=interleave"
-.PD
-Only copy one out of every \fIinterleave\fR bytes. Select which byte to
-copy with the \fB\-b\fR or \fB\-\-byte\fR option. The default is 4.
-\&\fBobjcopy\fR ignores this option if you do not specify either \fB\-b\fR or
-\&\fB\-\-byte\fR.
-.IP "\fB\-p\fR" 4
-.IX Item "-p"
-.PD 0
-.IP "\fB\-\-preserve\-dates\fR" 4
-.IX Item "--preserve-dates"
-.PD
-Set the access and modification dates of the output file to be the same
-as those of the input file.
-.IP "\fB\-\-debugging\fR" 4
-.IX Item "--debugging"
-Convert debugging information, if possible. This is not the default
-because only certain debugging formats are supported, and the
-conversion process can be time consuming.
-.IP "\fB\-\-gap\-fill\fR \fIval\fR" 4
-.IX Item "--gap-fill val"
-Fill gaps between sections with \fIval\fR. This operation applies to
-the \fIload address\fR (\s-1LMA\s0) of the sections. It is done by increasing
-the size of the section with the lower address, and filling in the extra
-space created with \fIval\fR.
-.IP "\fB\-\-pad\-to\fR \fIaddress\fR" 4
-.IX Item "--pad-to address"
-Pad the output file up to the load address \fIaddress\fR. This is
-done by increasing the size of the last section. The extra space is
-filled in with the value specified by \fB\-\-gap\-fill\fR (default zero).
-.IP "\fB\-\-set\-start\fR \fIval\fR" 4
-.IX Item "--set-start val"
-Set the start address of the new file to \fIval\fR. Not all object file
-formats support setting the start address.
-.IP "\fB\-\-change\-start\fR \fIincr\fR" 4
-.IX Item "--change-start incr"
-.PD 0
-.IP "\fB\-\-adjust\-start\fR \fIincr\fR" 4
-.IX Item "--adjust-start incr"
-.PD
-Change the start address by adding \fIincr\fR. Not all object file
-formats support setting the start address.
-.IP "\fB\-\-change\-addresses\fR \fIincr\fR" 4
-.IX Item "--change-addresses incr"
-.PD 0
-.IP "\fB\-\-adjust\-vma\fR \fIincr\fR" 4
-.IX Item "--adjust-vma incr"
-.PD
-Change the \s-1VMA\s0 and \s-1LMA\s0 addresses of all sections, as well as the start
-address, by adding \fIincr\fR. Some object file formats do not permit
-section addresses to be changed arbitrarily. Note that this does not
-relocate the sections; if the program expects sections to be loaded at a
-certain address, and this option is used to change the sections such
-that they are loaded at a different address, the program may fail.
-.IP "\fB\-\-change\-section\-address\fR \fIsection\fR\fB{=,+,\-}\fR\fIval\fR" 4
-.IX Item "--change-section-address section{=,+,-}val"
-.PD 0
-.IP "\fB\-\-adjust\-section\-vma\fR \fIsection\fR\fB{=,+,\-}\fR\fIval\fR" 4
-.IX Item "--adjust-section-vma section{=,+,-}val"
-.PD
-Set or change both the \s-1VMA\s0 address and the \s-1LMA\s0 address of the named
-\&\fIsection\fR. If \fB=\fR is used, the section address is set to
-\&\fIval\fR. Otherwise, \fIval\fR is added to or subtracted from the
-section address. See the comments under \fB\-\-change\-addresses\fR,
-above. If \fIsection\fR does not exist in the input file, a warning will
-be issued, unless \fB\-\-no\-change\-warnings\fR is used.
-.IP "\fB\-\-change\-section\-lma\fR \fIsection\fR\fB{=,+,\-}\fR\fIval\fR" 4
-.IX Item "--change-section-lma section{=,+,-}val"
-Set or change the \s-1LMA\s0 address of the named \fIsection\fR. The \s-1LMA\s0
-address is the address where the section will be loaded into memory at
-program load time. Normally this is the same as the \s-1VMA\s0 address, which
-is the address of the section at program run time, but on some systems,
-especially those where a program is held in \s-1ROM\s0, the two can be
-different. If \fB=\fR is used, the section address is set to
-\&\fIval\fR. Otherwise, \fIval\fR is added to or subtracted from the
-section address. See the comments under \fB\-\-change\-addresses\fR,
-above. If \fIsection\fR does not exist in the input file, a warning
-will be issued, unless \fB\-\-no\-change\-warnings\fR is used.
-.IP "\fB\-\-change\-section\-vma\fR \fIsection\fR\fB{=,+,\-}\fR\fIval\fR" 4
-.IX Item "--change-section-vma section{=,+,-}val"
-Set or change the \s-1VMA\s0 address of the named \fIsection\fR. The \s-1VMA\s0
-address is the address where the section will be located once the
-program has started executing. Normally this is the same as the \s-1LMA\s0
-address, which is the address where the section will be loaded into
-memory, but on some systems, especially those where a program is held in
-\&\s-1ROM\s0, the two can be different. If \fB=\fR is used, the section address
-is set to \fIval\fR. Otherwise, \fIval\fR is added to or subtracted
-from the section address. See the comments under
-\&\fB\-\-change\-addresses\fR, above. If \fIsection\fR does not exist in
-the input file, a warning will be issued, unless
-\&\fB\-\-no\-change\-warnings\fR is used.
-.IP "\fB\-\-change\-warnings\fR" 4
-.IX Item "--change-warnings"
-.PD 0
-.IP "\fB\-\-adjust\-warnings\fR" 4
-.IX Item "--adjust-warnings"
-.PD
-If \fB\-\-change\-section\-address\fR or \fB\-\-change\-section\-lma\fR or
-\&\fB\-\-change\-section\-vma\fR is used, and the named section does not
-exist, issue a warning. This is the default.
-.IP "\fB\-\-no\-change\-warnings\fR" 4
-.IX Item "--no-change-warnings"
-.PD 0
-.IP "\fB\-\-no\-adjust\-warnings\fR" 4
-.IX Item "--no-adjust-warnings"
-.PD
-Do not issue a warning if \fB\-\-change\-section\-address\fR or
-\&\fB\-\-adjust\-section\-lma\fR or \fB\-\-adjust\-section\-vma\fR is used, even
-if the named section does not exist.
-.IP "\fB\-\-set\-section\-flags\fR \fIsection\fR\fB=\fR\fIflags\fR" 4
-.IX Item "--set-section-flags section=flags"
-Set the flags for the named section. The \fIflags\fR argument is a
-comma separated string of flag names. The recognized names are
-\&\fBalloc\fR, \fBcontents\fR, \fBload\fR, \fBnoload\fR,
-\&\fBreadonly\fR, \fBcode\fR, \fBdata\fR, \fBrom\fR, \fBshare\fR, and
-\&\fBdebug\fR. You can set the \fBcontents\fR flag for a section which
-does not have contents, but it is not meaningful to clear the
-\&\fBcontents\fR flag of a section which does have contents\*(--just remove
-the section instead. Not all flags are meaningful for all object file
-formats.
-.IP "\fB\-\-add\-section\fR \fIsectionname\fR\fB=\fR\fIfilename\fR" 4
-.IX Item "--add-section sectionname=filename"
-Add a new section named \fIsectionname\fR while copying the file. The
-contents of the new section are taken from the file \fIfilename\fR. The
-size of the section will be the size of the file. This option only
-works on file formats which can support sections with arbitrary names.
-.IP "\fB\-\-rename\-section\fR \fIoldname\fR\fB=\fR\fInewname\fR\fB[,\fR\fIflags\fR\fB]\fR" 4
-.IX Item "--rename-section oldname=newname[,flags]"
-Rename a section from \fIoldname\fR to \fInewname\fR, optionally
-changing the section's flags to \fIflags\fR in the process. This has
-the advantage over usng a linker script to perform the rename in that
-the output stays as an object file and does not become a linked
-executable.
-.Sp
-This option is particularly helpful when the input format is binary,
-since this will always create a section called .data. If for example,
-you wanted instead to create a section called .rodata containing binary
-data you could use the following command line to achieve it:
-.Sp
-.Vb 3
-\& objcopy \-I binary \-O <output_format> \-B <architecture> \e
-\& \-\-rename\-section .data=.rodata,alloc,load,readonly,data,contents \e
-\& <input_binary_file> <output_object_file>
-.Ve
-.IP "\fB\-\-change\-leading\-char\fR" 4
-.IX Item "--change-leading-char"
-Some object file formats use special characters at the start of
-symbols. The most common such character is underscore, which compilers
-often add before every symbol. This option tells \fBobjcopy\fR to
-change the leading character of every symbol when it converts between
-object file formats. If the object file formats use the same leading
-character, this option has no effect. Otherwise, it will add a
-character, or remove a character, or change a character, as
-appropriate.
-.IP "\fB\-\-remove\-leading\-char\fR" 4
-.IX Item "--remove-leading-char"
-If the first character of a global symbol is a special symbol leading
-character used by the object file format, remove the character. The
-most common symbol leading character is underscore. This option will
-remove a leading underscore from all global symbols. This can be useful
-if you want to link together objects of different file formats with
-different conventions for symbol names. This is different from
-\&\fB\-\-change\-leading\-char\fR because it always changes the symbol name
-when appropriate, regardless of the object file format of the output
-file.
-.IP "\fB\-\-srec\-len=\fR\fIival\fR" 4
-.IX Item "--srec-len=ival"
-Meaningful only for srec output. Set the maximum length of the Srecords
-being produced to \fIival\fR. This length covers both address, data and
-crc fields.
-.IP "\fB\-\-srec\-forceS3\fR" 4
-.IX Item "--srec-forceS3"
-Meaningful only for srec output. Avoid generation of S1/S2 records,
-creating S3\-only record format.
-.IP "\fB\-\-redefine\-sym\fR \fIold\fR\fB=\fR\fInew\fR" 4
-.IX Item "--redefine-sym old=new"
-Change the name of a symbol \fIold\fR, to \fInew\fR. This can be useful
-when one is trying link two things together for which you have no
-source, and there are name collisions.
-.IP "\fB\-\-redefine\-syms=\fR\fIfilename\fR" 4
-.IX Item "--redefine-syms=filename"
-Apply \fB\-\-redefine\-sym\fR to each symbol pair "\fIold\fR \fInew\fR"
-listed in the file \fIfilename\fR. \fIfilename\fR is simply a flat file,
-with one symbol pair per line. Line comments may be introduced by the hash
-character. This option may be given more than once.
-.IP "\fB\-\-weaken\fR" 4
-.IX Item "--weaken"
-Change all global symbols in the file to be weak. This can be useful
-when building an object which will be linked against other objects using
-the \fB\-R\fR option to the linker. This option is only effective when
-using an object file format which supports weak symbols.
-.IP "\fB\-\-keep\-symbols=\fR\fIfilename\fR" 4
-.IX Item "--keep-symbols=filename"
-Apply \fB\-\-keep\-symbol\fR option to each symbol listed in the file
-\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol
-name per line. Line comments may be introduced by the hash character.
-This option may be given more than once.
-.IP "\fB\-\-strip\-symbols=\fR\fIfilename\fR" 4
-.IX Item "--strip-symbols=filename"
-Apply \fB\-\-strip\-symbol\fR option to each symbol listed in the file
-\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol
-name per line. Line comments may be introduced by the hash character.
-This option may be given more than once.
-.IP "\fB\-\-strip\-unneeded\-symbols=\fR\fIfilename\fR" 4
-.IX Item "--strip-unneeded-symbols=filename"
-Apply \fB\-\-strip\-unneeded\-symbol\fR option to each symbol listed in
-the file \fIfilename\fR. \fIfilename\fR is simply a flat file, with one
-symbol name per line. Line comments may be introduced by the hash
-character. This option may be given more than once.
-.IP "\fB\-\-keep\-global\-symbols=\fR\fIfilename\fR" 4
-.IX Item "--keep-global-symbols=filename"
-Apply \fB\-\-keep\-global\-symbol\fR option to each symbol listed in the
-file \fIfilename\fR. \fIfilename\fR is simply a flat file, with one
-symbol name per line. Line comments may be introduced by the hash
-character. This option may be given more than once.
-.IP "\fB\-\-localize\-symbols=\fR\fIfilename\fR" 4
-.IX Item "--localize-symbols=filename"
-Apply \fB\-\-localize\-symbol\fR option to each symbol listed in the file
-\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol
-name per line. Line comments may be introduced by the hash character.
-This option may be given more than once.
-.IP "\fB\-\-globalize\-symbols=\fR\fIfilename\fR" 4
-.IX Item "--globalize-symbols=filename"
-Apply \fB\-\-globalize\-symbol\fR option to each symbol listed in the file
-\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol
-name per line. Line comments may be introduced by the hash character.
-This option may be given more than once.
-.IP "\fB\-\-weaken\-symbols=\fR\fIfilename\fR" 4
-.IX Item "--weaken-symbols=filename"
-Apply \fB\-\-weaken\-symbol\fR option to each symbol listed in the file
-\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol
-name per line. Line comments may be introduced by the hash character.
-This option may be given more than once.
-.IP "\fB\-\-alt\-machine\-code=\fR\fIindex\fR" 4
-.IX Item "--alt-machine-code=index"
-If the output architecture has alternate machine codes, use the
-\&\fIindex\fRth code instead of the default one. This is useful in case
-a machine is assigned an official code and the tool-chain adopts the
-new code, but other applications still depend on the original code
-being used. For \s-1ELF\s0 based architectures if the \fIindex\fR
-alternative does not exist then the value is treated as an absolute
-number to be stored in the e_machine field of the \s-1ELF\s0 header.
-.IP "\fB\-\-writable\-text\fR" 4
-.IX Item "--writable-text"
-Mark the output text as writable. This option isn't meaningful for all
-object file formats.
-.IP "\fB\-\-readonly\-text\fR" 4
-.IX Item "--readonly-text"
-Make the output text write protected. This option isn't meaningful for all
-object file formats.
-.IP "\fB\-\-pure\fR" 4
-.IX Item "--pure"
-Mark the output file as demand paged. This option isn't meaningful for all
-object file formats.
-.IP "\fB\-\-impure\fR" 4
-.IX Item "--impure"
-Mark the output file as impure. This option isn't meaningful for all
-object file formats.
-.IP "\fB\-\-prefix\-symbols=\fR\fIstring\fR" 4
-.IX Item "--prefix-symbols=string"
-Prefix all symbols in the output file with \fIstring\fR.
-.IP "\fB\-\-prefix\-sections=\fR\fIstring\fR" 4
-.IX Item "--prefix-sections=string"
-Prefix all section names in the output file with \fIstring\fR.
-.IP "\fB\-\-prefix\-alloc\-sections=\fR\fIstring\fR" 4
-.IX Item "--prefix-alloc-sections=string"
-Prefix all the names of all allocated sections in the output file with
-\&\fIstring\fR.
-.IP "\fB\-\-add\-gnu\-debuglink=\fR\fIpath-to-file\fR" 4
-.IX Item "--add-gnu-debuglink=path-to-file"
-Creates a .gnu_debuglink section which contains a reference to \fIpath-to-file\fR
-and adds it to the output file.
-.IP "\fB\-\-keep\-file\-symbols\fR" 4
-.IX Item "--keep-file-symbols"
-When stripping a file, perhaps with \fB\-\-strip\-debug\fR or
-\&\fB\-\-strip\-unneeded\fR, retain any symbols specifying source file names,
-which would otherwise get stripped.
-.IP "\fB\-\-only\-keep\-debug\fR" 4
-.IX Item "--only-keep-debug"
-Strip a file, removing contents of any sections that would not be
-stripped by \fB\-\-strip\-debug\fR and leaving the debugging sections
-intact.
-.Sp
-The intention is that this option will be used in conjunction with
-\&\fB\-\-add\-gnu\-debuglink\fR to create a two part executable. One a
-stripped binary which will occupy less space in \s-1RAM\s0 and in a
-distribution and the second a debugging information file which is only
-needed if debugging abilities are required. The suggested procedure
-to create these files is as follows:
-.RS 4
-.IP "1.<Link the executable as normal. Assuming that is is called>" 4
-.IX Item "1.<Link the executable as normal. Assuming that is is called>"
-\&\f(CW\*(C`foo\*(C'\fR then...
-.ie n .IP "1.<Run ""objcopy \-\-only\-keep\-debug foo foo.dbg"" to>" 4
-.el .IP "1.<Run \f(CWobjcopy \-\-only\-keep\-debug foo foo.dbg\fR to>" 4
-.IX Item "1.<Run objcopy --only-keep-debug foo foo.dbg to>"
-create a file containing the debugging info.
-.ie n .IP "1.<Run ""objcopy \-\-strip\-debug foo"" to create a>" 4
-.el .IP "1.<Run \f(CWobjcopy \-\-strip\-debug foo\fR to create a>" 4
-.IX Item "1.<Run objcopy --strip-debug foo to create a>"
-stripped executable.
-.ie n .IP "1.<Run ""objcopy \-\-add\-gnu\-debuglink=foo.dbg foo"">" 4
-.el .IP "1.<Run \f(CWobjcopy \-\-add\-gnu\-debuglink=foo.dbg foo\fR>" 4
-.IX Item "1.<Run objcopy --add-gnu-debuglink=foo.dbg foo>"
-to add a link to the debugging info into the stripped executable.
-.RE
-.RS 4
-.Sp
-Note \- the choice of \f(CW\*(C`.dbg\*(C'\fR as an extension for the debug info
-file is arbitrary. Also the \f(CW\*(C`\-\-only\-keep\-debug\*(C'\fR step is
-optional. You could instead do this:
-.IP "1.<Link the executable as normal.>" 4
-.IX Item "1.<Link the executable as normal.>"
-.PD 0
-.ie n .IP "1.<Copy ""foo""\fR to \f(CW""foo.full"">" 4
-.el .IP "1.<Copy \f(CWfoo\fR to \f(CWfoo.full\fR>" 4
-.IX Item "1.<Copy foo to foo.full>"
-.ie n .IP "1.<Run ""objcopy \-\-strip\-debug foo"">" 4
-.el .IP "1.<Run \f(CWobjcopy \-\-strip\-debug foo\fR>" 4
-.IX Item "1.<Run objcopy --strip-debug foo>"
-.ie n .IP "1.<Run ""objcopy \-\-add\-gnu\-debuglink=foo.full foo"">" 4
-.el .IP "1.<Run \f(CWobjcopy \-\-add\-gnu\-debuglink=foo.full foo\fR>" 4
-.IX Item "1.<Run objcopy --add-gnu-debuglink=foo.full foo>"
-.RE
-.RS 4
-.PD
-.Sp
-i.e. the file pointed to by the \fB\-\-add\-gnu\-debuglink\fR can be the
-full executable. It does not have to be a file created by the
-\&\fB\-\-only\-keep\-debug\fR switch.
-.RE
-.IP "\fB\-V\fR" 4
-.IX Item "-V"
-.PD 0
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-.PD
-Show the version number of \fBobjcopy\fR.
-.IP "\fB\-v\fR" 4
-.IX Item "-v"
-.PD 0
-.IP "\fB\-\-verbose\fR" 4
-.IX Item "--verbose"
-.PD
-Verbose output: list all object files modified. In the case of
-archives, \fBobjcopy \-V\fR lists all members of the archive.
-.IP "\fB\-\-help\fR" 4
-.IX Item "--help"
-Show a summary of the options to \fBobjcopy\fR.
-.IP "\fB\-\-info\fR" 4
-.IX Item "--info"
-Display a list showing all architectures and object formats available.
-.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.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-\&\fIld\fR\|(1), \fIobjdump\fR\|(1), and the Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/doc/objdump.1 b/binutils/doc/objdump.1
deleted file mode 100644
index a27423c21ba2..000000000000
--- a/binutils/doc/objdump.1
+++ /dev/null
@@ -1,634 +0,0 @@
-.\" 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 "OBJDUMP 1"
-.TH OBJDUMP 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-objdump \- display information from object files.
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-objdump [\fB\-a\fR|\fB\-\-archive\-headers\fR]
- [\fB\-b\fR \fIbfdname\fR|\fB\-\-target=\fR\fIbfdname\fR]
- [\fB\-C\fR|\fB\-\-demangle\fR[=\fIstyle\fR] ]
- [\fB\-d\fR|\fB\-\-disassemble\fR]
- [\fB\-D\fR|\fB\-\-disassemble\-all\fR]
- [\fB\-z\fR|\fB\-\-disassemble\-zeroes\fR]
- [\fB\-EB\fR|\fB\-EL\fR|\fB\-\-endian=\fR{big | little }]
- [\fB\-f\fR|\fB\-\-file\-headers\fR]
- [\fB\-\-file\-start\-context\fR]
- [\fB\-g\fR|\fB\-\-debugging\fR]
- [\fB\-e\fR|\fB\-\-debugging\-tags\fR]
- [\fB\-h\fR|\fB\-\-section\-headers\fR|\fB\-\-headers\fR]
- [\fB\-i\fR|\fB\-\-info\fR]
- [\fB\-j\fR \fIsection\fR|\fB\-\-section=\fR\fIsection\fR]
- [\fB\-l\fR|\fB\-\-line\-numbers\fR]
- [\fB\-S\fR|\fB\-\-source\fR]
- [\fB\-m\fR \fImachine\fR|\fB\-\-architecture=\fR\fImachine\fR]
- [\fB\-M\fR \fIoptions\fR|\fB\-\-disassembler\-options=\fR\fIoptions\fR]
- [\fB\-p\fR|\fB\-\-private\-headers\fR]
- [\fB\-r\fR|\fB\-\-reloc\fR]
- [\fB\-R\fR|\fB\-\-dynamic\-reloc\fR]
- [\fB\-s\fR|\fB\-\-full\-contents\fR]
- [\fB\-W\fR|\fB\-\-dwarf\fR]
- [\fB\-G\fR|\fB\-\-stabs\fR]
- [\fB\-t\fR|\fB\-\-syms\fR]
- [\fB\-T\fR|\fB\-\-dynamic\-syms\fR]
- [\fB\-x\fR|\fB\-\-all\-headers\fR]
- [\fB\-w\fR|\fB\-\-wide\fR]
- [\fB\-\-start\-address=\fR\fIaddress\fR]
- [\fB\-\-stop\-address=\fR\fIaddress\fR]
- [\fB\-\-prefix\-addresses\fR]
- [\fB\-\-[no\-]show\-raw\-insn\fR]
- [\fB\-\-adjust\-vma=\fR\fIoffset\fR]
- [\fB\-\-special\-syms\fR]
- [\fB\-V\fR|\fB\-\-version\fR]
- [\fB\-H\fR|\fB\-\-help\fR]
- \fIobjfile\fR...
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\fBobjdump\fR displays information about one or more object files.
-The options control what particular information to display. This
-information is mostly useful to programmers who are working on the
-compilation tools, as opposed to programmers who just want their
-program to compile and work.
-.PP
-\&\fIobjfile\fR... are the object files to be examined. When you
-specify archives, \fBobjdump\fR shows information on each of the member
-object files.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-The long and short forms of options, shown here as alternatives, are
-equivalent. At least one option from the list
-\&\fB\-a,\-d,\-D,\-e,\-f,\-g,\-G,\-h,\-H,\-p,\-r,\-R,\-s,\-S,\-t,\-T,\-V,\-x\fR must be given.
-.IP "\fB\-a\fR" 4
-.IX Item "-a"
-.PD 0
-.IP "\fB\-\-archive\-header\fR" 4
-.IX Item "--archive-header"
-.PD
-If any of the \fIobjfile\fR files are archives, display the archive
-header information (in a format similar to \fBls \-l\fR). Besides the
-information you could list with \fBar tv\fR, \fBobjdump \-a\fR shows
-the object file format of each archive member.
-.IP "\fB\-\-adjust\-vma=\fR\fIoffset\fR" 4
-.IX Item "--adjust-vma=offset"
-When dumping information, first add \fIoffset\fR to all the section
-addresses. This is useful if the section addresses do not correspond to
-the symbol table, which can happen when putting sections at particular
-addresses when using a format which can not represent section addresses,
-such as a.out.
-.IP "\fB\-b\fR \fIbfdname\fR" 4
-.IX Item "-b bfdname"
-.PD 0
-.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
-.IX Item "--target=bfdname"
-.PD
-Specify that the object-code format for the object files is
-\&\fIbfdname\fR. This option may not be necessary; \fIobjdump\fR can
-automatically recognize many formats.
-.Sp
-For example,
-.Sp
-.Vb 1
-\& objdump \-b oasys \-m vax \-h fu.o
-.Ve
-.Sp
-displays summary information from the section headers (\fB\-h\fR) of
-\&\fIfu.o\fR, which is explicitly identified (\fB\-m\fR) as a \s-1VAX\s0 object
-file in the format produced by Oasys compilers. You can list the
-formats available with the \fB\-i\fR option.
-.IP "\fB\-C\fR" 4
-.IX Item "-C"
-.PD 0
-.IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4
-.IX Item "--demangle[=style]"
-.PD
-Decode (\fIdemangle\fR) low-level symbol names into user-level names.
-Besides removing any initial underscore prepended by the system, this
-makes \*(C+ function names readable. Different compilers have different
-mangling styles. The optional demangling style argument can be used to
-choose an appropriate demangling style for your compiler.
-.IP "\fB\-g\fR" 4
-.IX Item "-g"
-.PD 0
-.IP "\fB\-\-debugging\fR" 4
-.IX Item "--debugging"
-.PD
-Display debugging information. This attempts to parse debugging
-information stored in the file and print it out using a C like syntax.
-Only certain types of debugging information have been implemented.
-Some other types are supported by \fBreadelf \-w\fR.
-.IP "\fB\-e\fR" 4
-.IX Item "-e"
-.PD 0
-.IP "\fB\-\-debugging\-tags\fR" 4
-.IX Item "--debugging-tags"
-.PD
-Like \fB\-g\fR, but the information is generated in a format compatible
-with ctags tool.
-.IP "\fB\-d\fR" 4
-.IX Item "-d"
-.PD 0
-.IP "\fB\-\-disassemble\fR" 4
-.IX Item "--disassemble"
-.PD
-Display the assembler mnemonics for the machine instructions from
-\&\fIobjfile\fR. This option only disassembles those sections which are
-expected to contain instructions.
-.IP "\fB\-D\fR" 4
-.IX Item "-D"
-.PD 0
-.IP "\fB\-\-disassemble\-all\fR" 4
-.IX Item "--disassemble-all"
-.PD
-Like \fB\-d\fR, but disassemble the contents of all sections, not just
-those expected to contain instructions.
-.IP "\fB\-\-prefix\-addresses\fR" 4
-.IX Item "--prefix-addresses"
-When disassembling, print the complete address on each line. This is
-the older disassembly format.
-.IP "\fB\-EB\fR" 4
-.IX Item "-EB"
-.PD 0
-.IP "\fB\-EL\fR" 4
-.IX Item "-EL"
-.IP "\fB\-\-endian={big|little}\fR" 4
-.IX Item "--endian={big|little}"
-.PD
-Specify the endianness of the object files. This only affects
-disassembly. This can be useful when disassembling a file format which
-does not describe endianness information, such as S\-records.
-.IP "\fB\-f\fR" 4
-.IX Item "-f"
-.PD 0
-.IP "\fB\-\-file\-headers\fR" 4
-.IX Item "--file-headers"
-.PD
-Display summary information from the overall header of
-each of the \fIobjfile\fR files.
-.IP "\fB\-\-file\-start\-context\fR" 4
-.IX Item "--file-start-context"
-Specify that when displaying interlisted source code/disassembly
-(assumes \fB\-S\fR) from a file that has not yet been displayed, extend the
-context to the start of the file.
-.IP "\fB\-h\fR" 4
-.IX Item "-h"
-.PD 0
-.IP "\fB\-\-section\-headers\fR" 4
-.IX Item "--section-headers"
-.IP "\fB\-\-headers\fR" 4
-.IX Item "--headers"
-.PD
-Display summary information from the section headers of the
-object file.
-.Sp
-File segments may be relocated to nonstandard addresses, for example by
-using the \fB\-Ttext\fR, \fB\-Tdata\fR, or \fB\-Tbss\fR options to
-\&\fBld\fR. However, some object file formats, such as a.out, do not
-store the starting address of the file segments. In those situations,
-although \fBld\fR relocates the sections correctly, using \fBobjdump
-\&\-h\fR to list the file section headers cannot show the correct addresses.
-Instead, it shows the usual addresses, which are implicit for the
-target.
-.IP "\fB\-H\fR" 4
-.IX Item "-H"
-.PD 0
-.IP "\fB\-\-help\fR" 4
-.IX Item "--help"
-.PD
-Print a summary of the options to \fBobjdump\fR and exit.
-.IP "\fB\-i\fR" 4
-.IX Item "-i"
-.PD 0
-.IP "\fB\-\-info\fR" 4
-.IX Item "--info"
-.PD
-Display a list showing all architectures and object formats available
-for specification with \fB\-b\fR or \fB\-m\fR.
-.IP "\fB\-j\fR \fIname\fR" 4
-.IX Item "-j name"
-.PD 0
-.IP "\fB\-\-section=\fR\fIname\fR" 4
-.IX Item "--section=name"
-.PD
-Display information only for section \fIname\fR.
-.IP "\fB\-l\fR" 4
-.IX Item "-l"
-.PD 0
-.IP "\fB\-\-line\-numbers\fR" 4
-.IX Item "--line-numbers"
-.PD
-Label the display (using debugging information) with the filename and
-source line numbers corresponding to the object code or relocs shown.
-Only useful with \fB\-d\fR, \fB\-D\fR, or \fB\-r\fR.
-.IP "\fB\-m\fR \fImachine\fR" 4
-.IX Item "-m machine"
-.PD 0
-.IP "\fB\-\-architecture=\fR\fImachine\fR" 4
-.IX Item "--architecture=machine"
-.PD
-Specify the architecture to use when disassembling object files. This
-can be useful when disassembling object files which do not describe
-architecture information, such as S\-records. You can list the available
-architectures with the \fB\-i\fR option.
-.IP "\fB\-M\fR \fIoptions\fR" 4
-.IX Item "-M options"
-.PD 0
-.IP "\fB\-\-disassembler\-options=\fR\fIoptions\fR" 4
-.IX Item "--disassembler-options=options"
-.PD
-Pass target specific information to the disassembler. Only supported on
-some targets. If it is necessary to specify more than one
-disassembler option then multiple \fB\-M\fR options can be used or
-can be placed together into a comma separated list.
-.Sp
-If the target is an \s-1ARM\s0 architecture then this switch can be used to
-select which register name set is used during disassembler. Specifying
-\&\fB\-M reg-names-std\fR (the default) will select the register names as
-used in \s-1ARM\s0's instruction set documentation, but with register 13 called
-\&'sp', register 14 called 'lr' and register 15 called 'pc'. Specifying
-\&\fB\-M reg-names-apcs\fR will select the name set used by the \s-1ARM\s0
-Procedure Call Standard, whilst specifying \fB\-M reg-names-raw\fR will
-just use \fBr\fR followed by the register number.
-.Sp
-There are also two variants on the \s-1APCS\s0 register naming scheme enabled
-by \fB\-M reg-names-atpcs\fR and \fB\-M reg-names-special-atpcs\fR which
-use the ARM/Thumb Procedure Call Standard naming conventions. (Either
-with the normal register names or the special register names).
-.Sp
-This option can also be used for \s-1ARM\s0 architectures to force the
-disassembler to interpret all instructions as Thumb instructions by
-using the switch \fB\-\-disassembler\-options=force\-thumb\fR. This can be
-useful when attempting to disassemble thumb code produced by other
-compilers.
-.Sp
-For the x86, some of the options duplicate functions of the \fB\-m\fR
-switch, but allow finer grained control. Multiple selections from the
-following may be specified as a comma separated string.
-\&\fBx86\-64\fR, \fBi386\fR and \fBi8086\fR select disassembly for
-the given architecture. \fBintel\fR and \fBatt\fR select between
-intel syntax mode and \s-1AT&T\s0 syntax mode. \fBaddr32\fR,
-\&\fBaddr16\fR, \fBdata32\fR and \fBdata16\fR specify the default
-address size and operand size. These four options will be overridden if
-\&\fBx86\-64\fR, \fBi386\fR or \fBi8086\fR appear later in the
-option string. Lastly, \fBsuffix\fR, when in \s-1AT&T\s0 mode,
-instructs the disassembler to print a mnemonic suffix even when the
-suffix could be inferred by the operands.
-.Sp
-For \s-1PPC\s0, \fBbooke\fR, \fBbooke32\fR and \fBbooke64\fR select
-disassembly of BookE instructions. \fB32\fR and \fB64\fR select
-PowerPC and PowerPC64 disassembly, respectively. \fBe300\fR selects
-disassembly for the e300 family.
-.Sp
-For \s-1MIPS\s0, this option controls the printing of instruction mneumonic
-names and register names in disassembled instructions. Multiple
-selections from the following may be specified as a comma separated
-string, and invalid options are ignored:
-.RS 4
-.ie n .IP """no\-aliases""" 4
-.el .IP "\f(CWno\-aliases\fR" 4
-.IX Item "no-aliases"
-Print the 'raw' instruction mneumonic instead of some pseudo
-instruction mneumonic. I.E. print 'daddu' or 'or' instead of 'move',
-\&'sll' instead of 'nop', etc.
-.ie n .IP """gpr\-names=\f(CI\s-1ABI\s0\f(CW""" 4
-.el .IP "\f(CWgpr\-names=\f(CI\s-1ABI\s0\f(CW\fR" 4
-.IX Item "gpr-names=ABI"
-Print \s-1GPR\s0 (general\-purpose register) names as appropriate
-for the specified \s-1ABI\s0. By default, \s-1GPR\s0 names are selected according to
-the \s-1ABI\s0 of the binary being disassembled.
-.ie n .IP """fpr\-names=\f(CI\s-1ABI\s0\f(CW""" 4
-.el .IP "\f(CWfpr\-names=\f(CI\s-1ABI\s0\f(CW\fR" 4
-.IX Item "fpr-names=ABI"
-Print \s-1FPR\s0 (floating\-point register) names as
-appropriate for the specified \s-1ABI\s0. By default, \s-1FPR\s0 numbers are printed
-rather than names.
-.ie n .IP """cp0\-names=\f(CI\s-1ARCH\s0\f(CW""" 4
-.el .IP "\f(CWcp0\-names=\f(CI\s-1ARCH\s0\f(CW\fR" 4
-.IX Item "cp0-names=ARCH"
-Print \s-1CP0\s0 (system control coprocessor; coprocessor 0) register names
-as appropriate for the \s-1CPU\s0 or architecture specified by
-\&\fI\s-1ARCH\s0\fR. By default, \s-1CP0\s0 register names are selected according to
-the architecture and \s-1CPU\s0 of the binary being disassembled.
-.ie n .IP """hwr\-names=\f(CI\s-1ARCH\s0\f(CW""" 4
-.el .IP "\f(CWhwr\-names=\f(CI\s-1ARCH\s0\f(CW\fR" 4
-.IX Item "hwr-names=ARCH"
-Print \s-1HWR\s0 (hardware register, used by the \f(CW\*(C`rdhwr\*(C'\fR instruction) names
-as appropriate for the \s-1CPU\s0 or architecture specified by
-\&\fI\s-1ARCH\s0\fR. By default, \s-1HWR\s0 names are selected according to
-the architecture and \s-1CPU\s0 of the binary being disassembled.
-.ie n .IP """reg\-names=\f(CI\s-1ABI\s0\f(CW""" 4
-.el .IP "\f(CWreg\-names=\f(CI\s-1ABI\s0\f(CW\fR" 4
-.IX Item "reg-names=ABI"
-Print \s-1GPR\s0 and \s-1FPR\s0 names as appropriate for the selected \s-1ABI\s0.
-.ie n .IP """reg\-names=\f(CI\s-1ARCH\s0\f(CW""" 4
-.el .IP "\f(CWreg\-names=\f(CI\s-1ARCH\s0\f(CW\fR" 4
-.IX Item "reg-names=ARCH"
-Print CPU-specific register names (\s-1CP0\s0 register and \s-1HWR\s0 names)
-as appropriate for the selected \s-1CPU\s0 or architecture.
-.RE
-.RS 4
-.Sp
-For any of the options listed above, \fI\s-1ABI\s0\fR or
-\&\fI\s-1ARCH\s0\fR may be specified as \fBnumeric\fR to have numbers printed
-rather than names, for the selected types of registers.
-You can list the available values of \fI\s-1ABI\s0\fR and \fI\s-1ARCH\s0\fR using
-the \fB\-\-help\fR option.
-.Sp
-For \s-1VAX\s0, you can specify function entry addresses with \fB\-M
-entry:0xf00ba\fR. You can use this multiple times to properly
-disassemble \s-1VAX\s0 binary files that don't contain symbol tables (like
-\&\s-1ROM\s0 dumps). In these cases, the function entry mask would otherwise
-be decoded as \s-1VAX\s0 instructions, which would probably lead the the rest
-of the function being wrongly disassembled.
-.RE
-.IP "\fB\-p\fR" 4
-.IX Item "-p"
-.PD 0
-.IP "\fB\-\-private\-headers\fR" 4
-.IX Item "--private-headers"
-.PD
-Print information that is specific to the object file format. The exact
-information printed depends upon the object file format. For some
-object file formats, no additional information is printed.
-.IP "\fB\-r\fR" 4
-.IX Item "-r"
-.PD 0
-.IP "\fB\-\-reloc\fR" 4
-.IX Item "--reloc"
-.PD
-Print the relocation entries of the file. If used with \fB\-d\fR or
-\&\fB\-D\fR, the relocations are printed interspersed with the
-disassembly.
-.IP "\fB\-R\fR" 4
-.IX Item "-R"
-.PD 0
-.IP "\fB\-\-dynamic\-reloc\fR" 4
-.IX Item "--dynamic-reloc"
-.PD
-Print the dynamic relocation entries of the file. This is only
-meaningful for dynamic objects, such as certain types of shared
-libraries.
-.IP "\fB\-s\fR" 4
-.IX Item "-s"
-.PD 0
-.IP "\fB\-\-full\-contents\fR" 4
-.IX Item "--full-contents"
-.PD
-Display the full contents of any sections requested. By default all
-non-empty sections are displayed.
-.IP "\fB\-S\fR" 4
-.IX Item "-S"
-.PD 0
-.IP "\fB\-\-source\fR" 4
-.IX Item "--source"
-.PD
-Display source code intermixed with disassembly, if possible. Implies
-\&\fB\-d\fR.
-.IP "\fB\-\-show\-raw\-insn\fR" 4
-.IX Item "--show-raw-insn"
-When disassembling instructions, print the instruction in hex as well as
-in symbolic form. This is the default except when
-\&\fB\-\-prefix\-addresses\fR is used.
-.IP "\fB\-\-no\-show\-raw\-insn\fR" 4
-.IX Item "--no-show-raw-insn"
-When disassembling instructions, do not print the instruction bytes.
-This is the default when \fB\-\-prefix\-addresses\fR is used.
-.IP "\fB\-W\fR" 4
-.IX Item "-W"
-.PD 0
-.IP "\fB\-\-dwarf\fR" 4
-.IX Item "--dwarf"
-.PD
-Displays the contents of the \s-1DWARF\s0 debug sections in the file, if any
-are present.
-.IP "\fB\-G\fR" 4
-.IX Item "-G"
-.PD 0
-.IP "\fB\-\-stabs\fR" 4
-.IX Item "--stabs"
-.PD
-Display the full contents of any sections requested. Display the
-contents of the .stab and .stab.index and .stab.excl sections from an
-\&\s-1ELF\s0 file. This is only useful on systems (such as Solaris 2.0) in which
-\&\f(CW\*(C`.stab\*(C'\fR debugging symbol-table entries are carried in an \s-1ELF\s0
-section. In most other file formats, debugging symbol-table entries are
-interleaved with linkage symbols, and are visible in the \fB\-\-syms\fR
-output.
-.IP "\fB\-\-start\-address=\fR\fIaddress\fR" 4
-.IX Item "--start-address=address"
-Start displaying data at the specified address. This affects the output
-of the \fB\-d\fR, \fB\-r\fR and \fB\-s\fR options.
-.IP "\fB\-\-stop\-address=\fR\fIaddress\fR" 4
-.IX Item "--stop-address=address"
-Stop displaying data at the specified address. This affects the output
-of the \fB\-d\fR, \fB\-r\fR and \fB\-s\fR options.
-.IP "\fB\-t\fR" 4
-.IX Item "-t"
-.PD 0
-.IP "\fB\-\-syms\fR" 4
-.IX Item "--syms"
-.PD
-Print the symbol table entries of the file.
-This is similar to the information provided by the \fBnm\fR program.
-.IP "\fB\-T\fR" 4
-.IX Item "-T"
-.PD 0
-.IP "\fB\-\-dynamic\-syms\fR" 4
-.IX Item "--dynamic-syms"
-.PD
-Print the dynamic symbol table entries of the file. This is only
-meaningful for dynamic objects, such as certain types of shared
-libraries. This is similar to the information provided by the \fBnm\fR
-program when given the \fB\-D\fR (\fB\-\-dynamic\fR) option.
-.IP "\fB\-\-special\-syms\fR" 4
-.IX Item "--special-syms"
-When displaying symbols include those which the target considers to be
-special in some way and which would not normally be of interest to the
-user.
-.IP "\fB\-V\fR" 4
-.IX Item "-V"
-.PD 0
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-.PD
-Print the version number of \fBobjdump\fR and exit.
-.IP "\fB\-x\fR" 4
-.IX Item "-x"
-.PD 0
-.IP "\fB\-\-all\-headers\fR" 4
-.IX Item "--all-headers"
-.PD
-Display all available header information, including the symbol table and
-relocation entries. Using \fB\-x\fR is equivalent to specifying all of
-\&\fB\-a \-f \-h \-p \-r \-t\fR.
-.IP "\fB\-w\fR" 4
-.IX Item "-w"
-.PD 0
-.IP "\fB\-\-wide\fR" 4
-.IX Item "--wide"
-.PD
-Format some lines for output devices that have more than 80 columns.
-Also do not truncate symbol names when they are displayed.
-.IP "\fB\-z\fR" 4
-.IX Item "-z"
-.PD 0
-.IP "\fB\-\-disassemble\-zeroes\fR" 4
-.IX Item "--disassemble-zeroes"
-.PD
-Normally the disassembly output will skip blocks of zeroes. This
-option directs the disassembler to disassemble those blocks, just like
-any other data.
-.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.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-\&\fInm\fR\|(1), \fIreadelf\fR\|(1), and the Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/doc/ranlib.1 b/binutils/doc/ranlib.1
deleted file mode 100644
index fd03dd02c726..000000000000
--- a/binutils/doc/ranlib.1
+++ /dev/null
@@ -1,188 +0,0 @@
-.\" 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 "RANLIB 1"
-.TH RANLIB 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-ranlib \- generate index to archive.
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-ranlib [\fB\-vV\fR] \fIarchive\fR
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\fBranlib\fR generates an index to the contents of an archive and
-stores it in the archive. The index lists each symbol defined by a
-member of an archive that is a relocatable object file.
-.PP
-You may use \fBnm \-s\fR or \fBnm \-\-print\-armap\fR to list this index.
-.PP
-An archive with such an index speeds up linking to the library and
-allows routines in the library to call each other without regard to
-their placement in the archive.
-.PP
-The \s-1GNU\s0 \fBranlib\fR program is another form of \s-1GNU\s0 \fBar\fR; running
-\&\fBranlib\fR is completely equivalent to executing \fBar \-s\fR.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-.IP "\fB\-v\fR" 4
-.IX Item "-v"
-.PD 0
-.IP "\fB\-V\fR" 4
-.IX Item "-V"
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-.PD
-Show the version number of \fBranlib\fR.
-.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.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-\&\fIar\fR\|(1), \fInm\fR\|(1), and the Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/doc/readelf.1 b/binutils/doc/readelf.1
deleted file mode 100644
index 14480c7938ea..000000000000
--- a/binutils/doc/readelf.1
+++ /dev/null
@@ -1,376 +0,0 @@
-.\" 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 "READELF 1"
-.TH READELF 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-readelf \- Displays information about ELF files.
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-readelf [\fB\-a\fR|\fB\-\-all\fR]
- [\fB\-h\fR|\fB\-\-file\-header\fR]
- [\fB\-l\fR|\fB\-\-program\-headers\fR|\fB\-\-segments\fR]
- [\fB\-S\fR|\fB\-\-section\-headers\fR|\fB\-\-sections\fR]
- [\fB\-g\fR|\fB\-\-section\-groups\fR]
- [\fB\-t\fR|\fB\-\-section\-details\fR]
- [\fB\-e\fR|\fB\-\-headers\fR]
- [\fB\-s\fR|\fB\-\-syms\fR|\fB\-\-symbols\fR]
- [\fB\-n\fR|\fB\-\-notes\fR]
- [\fB\-r\fR|\fB\-\-relocs\fR]
- [\fB\-u\fR|\fB\-\-unwind\fR]
- [\fB\-d\fR|\fB\-\-dynamic\fR]
- [\fB\-V\fR|\fB\-\-version\-info\fR]
- [\fB\-A\fR|\fB\-\-arch\-specific\fR]
- [\fB\-D\fR|\fB\-\-use\-dynamic\fR]
- [\fB\-x\fR <number or name>|\fB\-\-hex\-dump=\fR<number or name>]
- [\fB\-w[liaprmfFsoR]\fR|
- \fB\-\-debug\-dump\fR[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames\-interp,=str,=loc,=Ranges]]
- [\fB\-I\fR|\fB\-histogram\fR]
- [\fB\-v\fR|\fB\-\-version\fR]
- [\fB\-W\fR|\fB\-\-wide\fR]
- [\fB\-H\fR|\fB\-\-help\fR]
- \fIelffile\fR...
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\fBreadelf\fR displays information about one or more \s-1ELF\s0 format object
-files. The options control what particular information to display.
-.PP
-\&\fIelffile\fR... are the object files to be examined. 32\-bit and
-64\-bit \s-1ELF\s0 files are supported, as are archives containing \s-1ELF\s0 files.
-.PP
-This program performs a similar function to \fBobjdump\fR but it
-goes into more detail and it exists independently of the \s-1BFD\s0
-library, so if there is a bug in \s-1BFD\s0 then readelf will not be
-affected.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-The long and short forms of options, shown here as alternatives, are
-equivalent. At least one option besides \fB\-v\fR or \fB\-H\fR must be
-given.
-.IP "\fB\-a\fR" 4
-.IX Item "-a"
-.PD 0
-.IP "\fB\-\-all\fR" 4
-.IX Item "--all"
-.PD
-Equivalent to specifiying \fB\-\-file\-header\fR,
-\&\fB\-\-program\-headers\fR, \fB\-\-sections\fR, \fB\-\-symbols\fR,
-\&\fB\-\-relocs\fR, \fB\-\-dynamic\fR, \fB\-\-notes\fR and
-\&\fB\-\-version\-info\fR.
-.IP "\fB\-h\fR" 4
-.IX Item "-h"
-.PD 0
-.IP "\fB\-\-file\-header\fR" 4
-.IX Item "--file-header"
-.PD
-Displays the information contained in the \s-1ELF\s0 header at the start of the
-file.
-.IP "\fB\-l\fR" 4
-.IX Item "-l"
-.PD 0
-.IP "\fB\-\-program\-headers\fR" 4
-.IX Item "--program-headers"
-.IP "\fB\-\-segments\fR" 4
-.IX Item "--segments"
-.PD
-Displays the information contained in the file's segment headers, if it
-has any.
-.IP "\fB\-S\fR" 4
-.IX Item "-S"
-.PD 0
-.IP "\fB\-\-sections\fR" 4
-.IX Item "--sections"
-.IP "\fB\-\-section\-headers\fR" 4
-.IX Item "--section-headers"
-.PD
-Displays the information contained in the file's section headers, if it
-has any.
-.IP "\fB\-g\fR" 4
-.IX Item "-g"
-.PD 0
-.IP "\fB\-\-section\-groups\fR" 4
-.IX Item "--section-groups"
-.PD
-Displays the information contained in the file's section groups, if it
-has any.
-.IP "\fB\-t\fR" 4
-.IX Item "-t"
-.PD 0
-.IP "\fB\-\-section\-details\fR" 4
-.IX Item "--section-details"
-.PD
-Displays the detailed section information. Implies \fB\-S\fR.
-.IP "\fB\-s\fR" 4
-.IX Item "-s"
-.PD 0
-.IP "\fB\-\-symbols\fR" 4
-.IX Item "--symbols"
-.IP "\fB\-\-syms\fR" 4
-.IX Item "--syms"
-.PD
-Displays the entries in symbol table section of the file, if it has one.
-.IP "\fB\-e\fR" 4
-.IX Item "-e"
-.PD 0
-.IP "\fB\-\-headers\fR" 4
-.IX Item "--headers"
-.PD
-Display all the headers in the file. Equivalent to \fB\-h \-l \-S\fR.
-.IP "\fB\-n\fR" 4
-.IX Item "-n"
-.PD 0
-.IP "\fB\-\-notes\fR" 4
-.IX Item "--notes"
-.PD
-Displays the contents of the \s-1NOTE\s0 segments and/or sections, if any.
-.IP "\fB\-r\fR" 4
-.IX Item "-r"
-.PD 0
-.IP "\fB\-\-relocs\fR" 4
-.IX Item "--relocs"
-.PD
-Displays the contents of the file's relocation section, if it has one.
-.IP "\fB\-u\fR" 4
-.IX Item "-u"
-.PD 0
-.IP "\fB\-\-unwind\fR" 4
-.IX Item "--unwind"
-.PD
-Displays the contents of the file's unwind section, if it has one. Only
-the unwind sections for \s-1IA64\s0 \s-1ELF\s0 files are currently supported.
-.IP "\fB\-d\fR" 4
-.IX Item "-d"
-.PD 0
-.IP "\fB\-\-dynamic\fR" 4
-.IX Item "--dynamic"
-.PD
-Displays the contents of the file's dynamic section, if it has one.
-.IP "\fB\-V\fR" 4
-.IX Item "-V"
-.PD 0
-.IP "\fB\-\-version\-info\fR" 4
-.IX Item "--version-info"
-.PD
-Displays the contents of the version sections in the file, it they
-exist.
-.IP "\fB\-A\fR" 4
-.IX Item "-A"
-.PD 0
-.IP "\fB\-\-arch\-specific\fR" 4
-.IX Item "--arch-specific"
-.PD
-Displays architecture-specific information in the file, if there
-is any.
-.IP "\fB\-D\fR" 4
-.IX Item "-D"
-.PD 0
-.IP "\fB\-\-use\-dynamic\fR" 4
-.IX Item "--use-dynamic"
-.PD
-When displaying symbols, this option makes \fBreadelf\fR use the
-symbol table in the file's dynamic section, rather than the one in the
-symbols section.
-.IP "\fB\-x <number or name>\fR" 4
-.IX Item "-x <number or name>"
-.PD 0
-.IP "\fB\-\-hex\-dump=<number or name>\fR" 4
-.IX Item "--hex-dump=<number or name>"
-.PD
-Displays the contents of the indicated section as a hexadecimal dump.
-A number identifies a particular section by index in the section table;
-any other string identifies all sections with that name in the object file.
-.IP "\fB\-w[liaprmfFsoR]\fR" 4
-.IX Item "-w[liaprmfFsoR]"
-.PD 0
-.IP "\fB\-\-debug\-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames\-interp,=str,=loc,=Ranges]\fR" 4
-.IX Item "--debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]"
-.PD
-Displays the contents of the debug sections in the file, if any are
-present. If one of the optional letters or words follows the switch
-then only data found in those specific sections will be dumped.
-.IP "\fB\-I\fR" 4
-.IX Item "-I"
-.PD 0
-.IP "\fB\-\-histogram\fR" 4
-.IX Item "--histogram"
-.PD
-Display a histogram of bucket list lengths when displaying the contents
-of the symbol tables.
-.IP "\fB\-v\fR" 4
-.IX Item "-v"
-.PD 0
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-.PD
-Display the version number of readelf.
-.IP "\fB\-W\fR" 4
-.IX Item "-W"
-.PD 0
-.IP "\fB\-\-wide\fR" 4
-.IX Item "--wide"
-.PD
-Don't break output lines to fit into 80 columns. By default
-\&\fBreadelf\fR breaks section header and segment listing lines for
-64\-bit \s-1ELF\s0 files, so that they fit into 80 columns. This option causes
-\&\fBreadelf\fR to print each section header resp. each segment one a
-single line, which is far more readable on terminals wider than 80 columns.
-.IP "\fB\-H\fR" 4
-.IX Item "-H"
-.PD 0
-.IP "\fB\-\-help\fR" 4
-.IX Item "--help"
-.PD
-Display the command line options understood by \fBreadelf\fR.
-.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.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-\&\fIobjdump\fR\|(1), and the Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/doc/size.1 b/binutils/doc/size.1
deleted file mode 100644
index 1cf72ac7fe26..000000000000
--- a/binutils/doc/size.1
+++ /dev/null
@@ -1,263 +0,0 @@
-.\" 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 "SIZE 1"
-.TH SIZE 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-size \- list section sizes and total size.
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-size [\fB\-A\fR|\fB\-B\fR|\fB\-\-format=\fR\fIcompatibility\fR]
- [\fB\-\-help\fR]
- [\fB\-d\fR|\fB\-o\fR|\fB\-x\fR|\fB\-\-radix=\fR\fInumber\fR]
- [\fB\-t\fR|\fB\-\-totals\fR]
- [\fB\-\-target=\fR\fIbfdname\fR] [\fB\-V\fR|\fB\-\-version\fR]
- [\fIobjfile\fR...]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-The \s-1GNU\s0 \fBsize\fR utility lists the section sizes\-\-\-and the total
-size\-\-\-for each of the object or archive files \fIobjfile\fR in its
-argument list. By default, one line of output is generated for each
-object file or each module in an archive.
-.PP
-\&\fIobjfile\fR... are the object files to be examined.
-If none are specified, the file \f(CW\*(C`a.out\*(C'\fR will be used.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-The command line options have the following meanings:
-.IP "\fB\-A\fR" 4
-.IX Item "-A"
-.PD 0
-.IP "\fB\-B\fR" 4
-.IX Item "-B"
-.IP "\fB\-\-format=\fR\fIcompatibility\fR" 4
-.IX Item "--format=compatibility"
-.PD
-Using one of these options, you can choose whether the output from \s-1GNU\s0
-\&\fBsize\fR resembles output from System V \fBsize\fR (using \fB\-A\fR,
-or \fB\-\-format=sysv\fR), or Berkeley \fBsize\fR (using \fB\-B\fR, or
-\&\fB\-\-format=berkeley\fR). The default is the one-line format similar to
-Berkeley's.
-.Sp
-Here is an example of the Berkeley (default) format of output from
-\&\fBsize\fR:
-.Sp
-.Vb 4
-\& $ size \-\-format=Berkeley ranlib size
-\& text data bss dec hex filename
-\& 294880 81920 11592 388392 5ed28 ranlib
-\& 294880 81920 11888 388688 5ee50 size
-.Ve
-.Sp
-This is the same data, but displayed closer to System V conventions:
-.Sp
-.Vb 7
-\& $ size \-\-format=SysV ranlib size
-\& ranlib :
-\& section size addr
-\& .text 294880 8192
-\& .data 81920 303104
-\& .bss 11592 385024
-\& Total 388392
-.Ve
-.Sp
-.Vb 6
-\& size :
-\& section size addr
-\& .text 294880 8192
-\& .data 81920 303104
-\& .bss 11888 385024
-\& Total 388688
-.Ve
-.IP "\fB\-\-help\fR" 4
-.IX Item "--help"
-Show a summary of acceptable arguments and options.
-.IP "\fB\-d\fR" 4
-.IX Item "-d"
-.PD 0
-.IP "\fB\-o\fR" 4
-.IX Item "-o"
-.IP "\fB\-x\fR" 4
-.IX Item "-x"
-.IP "\fB\-\-radix=\fR\fInumber\fR" 4
-.IX Item "--radix=number"
-.PD
-Using one of these options, you can control whether the size of each
-section is given in decimal (\fB\-d\fR, or \fB\-\-radix=10\fR); octal
-(\fB\-o\fR, or \fB\-\-radix=8\fR); or hexadecimal (\fB\-x\fR, or
-\&\fB\-\-radix=16\fR). In \fB\-\-radix=\fR\fInumber\fR, only the three
-values (8, 10, 16) are supported. The total size is always given in two
-radices; decimal and hexadecimal for \fB\-d\fR or \fB\-x\fR output, or
-octal and hexadecimal if you're using \fB\-o\fR.
-.IP "\fB\-t\fR" 4
-.IX Item "-t"
-.PD 0
-.IP "\fB\-\-totals\fR" 4
-.IX Item "--totals"
-.PD
-Show totals of all objects listed (Berkeley format listing mode only).
-.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
-.IX Item "--target=bfdname"
-Specify that the object-code format for \fIobjfile\fR is
-\&\fIbfdname\fR. This option may not be necessary; \fBsize\fR can
-automatically recognize many formats.
-.IP "\fB\-V\fR" 4
-.IX Item "-V"
-.PD 0
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-.PD
-Display the version number of \fBsize\fR.
-.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.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-\&\fIar\fR\|(1), \fIobjdump\fR\|(1), \fIreadelf\fR\|(1), and the Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/doc/strings.1 b/binutils/doc/strings.1
deleted file mode 100644
index 5cffee121bf4..000000000000
--- a/binutils/doc/strings.1
+++ /dev/null
@@ -1,249 +0,0 @@
-.\" 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 "STRINGS 1"
-.TH STRINGS 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-strings \- print the strings of printable characters in files.
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-strings [\fB\-afov\fR] [\fB\-\fR\fImin-len\fR]
- [\fB\-n\fR \fImin-len\fR] [\fB\-\-bytes=\fR\fImin-len\fR]
- [\fB\-t\fR \fIradix\fR] [\fB\-\-radix=\fR\fIradix\fR]
- [\fB\-e\fR \fIencoding\fR] [\fB\-\-encoding=\fR\fIencoding\fR]
- [\fB\-\fR] [\fB\-\-all\fR] [\fB\-\-print\-file\-name\fR]
- [\fB\-\-target=\fR\fIbfdname\fR]
- [\fB\-\-help\fR] [\fB\-\-version\fR] \fIfile\fR...
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-For each \fIfile\fR given, \s-1GNU\s0 \fBstrings\fR prints the printable
-character sequences that are at least 4 characters long (or the number
-given with the options below) and are followed by an unprintable
-character. By default, it only prints the strings from the initialized
-and loaded sections of object files; for other types of files, it prints
-the strings from the whole file.
-.PP
-\&\fBstrings\fR is mainly useful for determining the contents of non-text
-files.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-.IP "\fB\-a\fR" 4
-.IX Item "-a"
-.PD 0
-.IP "\fB\-\-all\fR" 4
-.IX Item "--all"
-.IP "\fB\-\fR" 4
-.IX Item "-"
-.PD
-Do not scan only the initialized and loaded sections of object files;
-scan the whole files.
-.IP "\fB\-f\fR" 4
-.IX Item "-f"
-.PD 0
-.IP "\fB\-\-print\-file\-name\fR" 4
-.IX Item "--print-file-name"
-.PD
-Print the name of the file before each string.
-.IP "\fB\-\-help\fR" 4
-.IX Item "--help"
-Print a summary of the program usage on the standard output and exit.
-.IP "\fB\-\fR\fImin-len\fR" 4
-.IX Item "-min-len"
-.PD 0
-.IP "\fB\-n\fR \fImin-len\fR" 4
-.IX Item "-n min-len"
-.IP "\fB\-\-bytes=\fR\fImin-len\fR" 4
-.IX Item "--bytes=min-len"
-.PD
-Print sequences of characters that are at least \fImin-len\fR characters
-long, instead of the default 4.
-.IP "\fB\-o\fR" 4
-.IX Item "-o"
-Like \fB\-t o\fR. Some other versions of \fBstrings\fR have \fB\-o\fR
-act like \fB\-t d\fR instead. Since we can not be compatible with both
-ways, we simply chose one.
-.IP "\fB\-t\fR \fIradix\fR" 4
-.IX Item "-t radix"
-.PD 0
-.IP "\fB\-\-radix=\fR\fIradix\fR" 4
-.IX Item "--radix=radix"
-.PD
-Print the offset within the file before each string. The single
-character argument specifies the radix of the offset\-\-\-\fBo\fR for
-octal, \fBx\fR for hexadecimal, or \fBd\fR for decimal.
-.IP "\fB\-e\fR \fIencoding\fR" 4
-.IX Item "-e encoding"
-.PD 0
-.IP "\fB\-\-encoding=\fR\fIencoding\fR" 4
-.IX Item "--encoding=encoding"
-.PD
-Select the character encoding of the strings that are to be found.
-Possible values for \fIencoding\fR are: \fBs\fR = single\-7\-bit\-byte
-characters (\s-1ASCII\s0, \s-1ISO\s0 8859, etc., default), \fBS\fR =
-single\-8\-bit\-byte characters, \fBb\fR = 16\-bit bigendian, \fBl\fR =
-16\-bit littleendian, \fBB\fR = 32\-bit bigendian, \fBL\fR = 32\-bit
-littleendian. Useful for finding wide character strings.
-.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
-.IX Item "--target=bfdname"
-Specify an object code format other than your system's default format.
-.IP "\fB\-v\fR" 4
-.IX Item "-v"
-.PD 0
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-.PD
-Print the program version number on the standard output and exit.
-.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.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-\&\fIar\fR\|(1), \fInm\fR\|(1), \fIobjdump\fR\|(1), \fIranlib\fR\|(1), \fIreadelf\fR\|(1)
-and the Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/doc/strip.1 b/binutils/doc/strip.1
deleted file mode 100644
index 982255ef754e..000000000000
--- a/binutils/doc/strip.1
+++ /dev/null
@@ -1,383 +0,0 @@
-.\" 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 "STRIP 1"
-.TH STRIP 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-strip \- Discard symbols from object files.
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-strip [\fB\-F\fR \fIbfdname\fR |\fB\-\-target=\fR\fIbfdname\fR]
- [\fB\-I\fR \fIbfdname\fR |\fB\-\-input\-target=\fR\fIbfdname\fR]
- [\fB\-O\fR \fIbfdname\fR |\fB\-\-output\-target=\fR\fIbfdname\fR]
- [\fB\-s\fR|\fB\-\-strip\-all\fR]
- [\fB\-S\fR|\fB\-g\fR|\fB\-d\fR|\fB\-\-strip\-debug\fR]
- [\fB\-K\fR \fIsymbolname\fR |\fB\-\-keep\-symbol=\fR\fIsymbolname\fR]
- [\fB\-N\fR \fIsymbolname\fR |\fB\-\-strip\-symbol=\fR\fIsymbolname\fR]
- [\fB\-w\fR|\fB\-\-wildcard\fR]
- [\fB\-x\fR|\fB\-\-discard\-all\fR] [\fB\-X\fR |\fB\-\-discard\-locals\fR]
- [\fB\-R\fR \fIsectionname\fR |\fB\-\-remove\-section=\fR\fIsectionname\fR]
- [\fB\-o\fR \fIfile\fR] [\fB\-p\fR|\fB\-\-preserve\-dates\fR]
- [\fB\-\-keep\-file\-symbols\fR]
- [\fB\-\-only\-keep\-debug\fR]
- [\fB\-v\fR |\fB\-\-verbose\fR] [\fB\-V\fR|\fB\-\-version\fR]
- [\fB\-\-help\fR] [\fB\-\-info\fR]
- \fIobjfile\fR...
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\s-1GNU\s0 \fBstrip\fR discards all symbols from object files
-\&\fIobjfile\fR. The list of object files may include archives.
-At least one object file must be given.
-.PP
-\&\fBstrip\fR modifies the files named in its argument,
-rather than writing modified copies under different names.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-.IP "\fB\-F\fR \fIbfdname\fR" 4
-.IX Item "-F bfdname"
-.PD 0
-.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
-.IX Item "--target=bfdname"
-.PD
-Treat the original \fIobjfile\fR as a file with the object
-code format \fIbfdname\fR, and rewrite it in the same format.
-.IP "\fB\-\-help\fR" 4
-.IX Item "--help"
-Show a summary of the options to \fBstrip\fR and exit.
-.IP "\fB\-\-info\fR" 4
-.IX Item "--info"
-Display a list showing all architectures and object formats available.
-.IP "\fB\-I\fR \fIbfdname\fR" 4
-.IX Item "-I bfdname"
-.PD 0
-.IP "\fB\-\-input\-target=\fR\fIbfdname\fR" 4
-.IX Item "--input-target=bfdname"
-.PD
-Treat the original \fIobjfile\fR as a file with the object
-code format \fIbfdname\fR.
-.IP "\fB\-O\fR \fIbfdname\fR" 4
-.IX Item "-O bfdname"
-.PD 0
-.IP "\fB\-\-output\-target=\fR\fIbfdname\fR" 4
-.IX Item "--output-target=bfdname"
-.PD
-Replace \fIobjfile\fR with a file in the output format \fIbfdname\fR.
-.IP "\fB\-R\fR \fIsectionname\fR" 4
-.IX Item "-R sectionname"
-.PD 0
-.IP "\fB\-\-remove\-section=\fR\fIsectionname\fR" 4
-.IX Item "--remove-section=sectionname"
-.PD
-Remove any section named \fIsectionname\fR from the output file. This
-option may be given more than once. Note that using this option
-inappropriately may make the output file unusable.
-.IP "\fB\-s\fR" 4
-.IX Item "-s"
-.PD 0
-.IP "\fB\-\-strip\-all\fR" 4
-.IX Item "--strip-all"
-.PD
-Remove all symbols.
-.IP "\fB\-g\fR" 4
-.IX Item "-g"
-.PD 0
-.IP "\fB\-S\fR" 4
-.IX Item "-S"
-.IP "\fB\-d\fR" 4
-.IX Item "-d"
-.IP "\fB\-\-strip\-debug\fR" 4
-.IX Item "--strip-debug"
-.PD
-Remove debugging symbols only.
-.IP "\fB\-\-strip\-unneeded\fR" 4
-.IX Item "--strip-unneeded"
-Remove all symbols that are not needed for relocation processing.
-.IP "\fB\-K\fR \fIsymbolname\fR" 4
-.IX Item "-K symbolname"
-.PD 0
-.IP "\fB\-\-keep\-symbol=\fR\fIsymbolname\fR" 4
-.IX Item "--keep-symbol=symbolname"
-.PD
-When stripping symbols, keep symbol \fIsymbolname\fR even if it would
-normally be stripped. This option may be given more than once.
-.IP "\fB\-N\fR \fIsymbolname\fR" 4
-.IX Item "-N symbolname"
-.PD 0
-.IP "\fB\-\-strip\-symbol=\fR\fIsymbolname\fR" 4
-.IX Item "--strip-symbol=symbolname"
-.PD
-Remove symbol \fIsymbolname\fR from the source file. This option may be
-given more than once, and may be combined with strip options other than
-\&\fB\-K\fR.
-.IP "\fB\-o\fR \fIfile\fR" 4
-.IX Item "-o file"
-Put the stripped output in \fIfile\fR, rather than replacing the
-existing file. When this argument is used, only one \fIobjfile\fR
-argument may be specified.
-.IP "\fB\-p\fR" 4
-.IX Item "-p"
-.PD 0
-.IP "\fB\-\-preserve\-dates\fR" 4
-.IX Item "--preserve-dates"
-.PD
-Preserve the access and modification dates of the file.
-.IP "\fB\-w\fR" 4
-.IX Item "-w"
-.PD 0
-.IP "\fB\-\-wildcard\fR" 4
-.IX Item "--wildcard"
-.PD
-Permit regular expressions in \fIsymbolname\fRs used in other command
-line options. The question mark (?), asterisk (*), backslash (\e) and
-square brackets ([]) operators can be used anywhere in the symbol
-name. If the first character of the symbol name is the exclamation
-point (!) then the sense of the switch is reversed for that symbol.
-For example:
-.Sp
-.Vb 1
-\& \-w \-K !foo \-K fo*
-.Ve
-.Sp
-would cause strip to only keep symbols that start with the letters
-\&\*(L"fo\*(R", but to discard the symbol \*(L"foo\*(R".
-.IP "\fB\-x\fR" 4
-.IX Item "-x"
-.PD 0
-.IP "\fB\-\-discard\-all\fR" 4
-.IX Item "--discard-all"
-.PD
-Remove non-global symbols.
-.IP "\fB\-X\fR" 4
-.IX Item "-X"
-.PD 0
-.IP "\fB\-\-discard\-locals\fR" 4
-.IX Item "--discard-locals"
-.PD
-Remove compiler-generated local symbols.
-(These usually start with \fBL\fR or \fB.\fR.)
-.IP "\fB\-\-keep\-file\-symbols\fR" 4
-.IX Item "--keep-file-symbols"
-When stripping a file, perhaps with \fB\-\-strip\-debug\fR or
-\&\fB\-\-strip\-unneeded\fR, retain any symbols specifying source file names,
-which would otherwise get stripped.
-.IP "\fB\-\-only\-keep\-debug\fR" 4
-.IX Item "--only-keep-debug"
-Strip a file, removing any sections that would be stripped by
-\&\fB\-\-strip\-debug\fR and leaving the debugging sections.
-.Sp
-The intention is that this option will be used in conjunction with
-\&\fB\-\-add\-gnu\-debuglink\fR to create a two part executable. One a
-stripped binary which will occupy less space in \s-1RAM\s0 and in a
-distribution and the second a debugging information file which is only
-needed if debugging abilities are required. The suggested procedure
-to create these files is as follows:
-.RS 4
-.IP "1.<Link the executable as normal. Assuming that is is called>" 4
-.IX Item "1.<Link the executable as normal. Assuming that is is called>"
-\&\f(CW\*(C`foo\*(C'\fR then...
-.ie n .IP "1.<Run ""objcopy \-\-only\-keep\-debug foo foo.dbg"" to>" 4
-.el .IP "1.<Run \f(CWobjcopy \-\-only\-keep\-debug foo foo.dbg\fR to>" 4
-.IX Item "1.<Run objcopy --only-keep-debug foo foo.dbg to>"
-create a file containing the debugging info.
-.ie n .IP "1.<Run ""objcopy \-\-strip\-debug foo"" to create a>" 4
-.el .IP "1.<Run \f(CWobjcopy \-\-strip\-debug foo\fR to create a>" 4
-.IX Item "1.<Run objcopy --strip-debug foo to create a>"
-stripped executable.
-.ie n .IP "1.<Run ""objcopy \-\-add\-gnu\-debuglink=foo.dbg foo"">" 4
-.el .IP "1.<Run \f(CWobjcopy \-\-add\-gnu\-debuglink=foo.dbg foo\fR>" 4
-.IX Item "1.<Run objcopy --add-gnu-debuglink=foo.dbg foo>"
-to add a link to the debugging info into the stripped executable.
-.RE
-.RS 4
-.Sp
-Note \- the choice of \f(CW\*(C`.dbg\*(C'\fR as an extension for the debug info
-file is arbitrary. Also the \f(CW\*(C`\-\-only\-keep\-debug\*(C'\fR step is
-optional. You could instead do this:
-.IP "1.<Link the executable as normal.>" 4
-.IX Item "1.<Link the executable as normal.>"
-.PD 0
-.ie n .IP "1.<Copy ""foo""\fR to \f(CW""foo.full"">" 4
-.el .IP "1.<Copy \f(CWfoo\fR to \f(CWfoo.full\fR>" 4
-.IX Item "1.<Copy foo to foo.full>"
-.ie n .IP "1.<Run ""strip \-\-strip\-debug foo"">" 4
-.el .IP "1.<Run \f(CWstrip \-\-strip\-debug foo\fR>" 4
-.IX Item "1.<Run strip --strip-debug foo>"
-.ie n .IP "1.<Run ""objcopy \-\-add\-gnu\-debuglink=foo.full foo"">" 4
-.el .IP "1.<Run \f(CWobjcopy \-\-add\-gnu\-debuglink=foo.full foo\fR>" 4
-.IX Item "1.<Run objcopy --add-gnu-debuglink=foo.full foo>"
-.RE
-.RS 4
-.PD
-.Sp
-ie the file pointed to by the \fB\-\-add\-gnu\-debuglink\fR can be the
-full executable. It does not have to be a file created by the
-\&\fB\-\-only\-keep\-debug\fR switch.
-.RE
-.IP "\fB\-V\fR" 4
-.IX Item "-V"
-.PD 0
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-.PD
-Show the version number for \fBstrip\fR.
-.IP "\fB\-v\fR" 4
-.IX Item "-v"
-.PD 0
-.IP "\fB\-\-verbose\fR" 4
-.IX Item "--verbose"
-.PD
-Verbose output: list all object files modified. In the case of
-archives, \fBstrip \-v\fR lists all members of the archive.
-.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.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-the Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/doc/windres.1 b/binutils/doc/windres.1
deleted file mode 100644
index 8d102543d161..000000000000
--- a/binutils/doc/windres.1
+++ /dev/null
@@ -1,343 +0,0 @@
-.\" 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 "WINDRES 1"
-.TH WINDRES 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-windres \- manipulate Windows resources.
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-windres [options] [input\-file] [output\-file]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\fBwindres\fR reads resources from an input file and copies them into
-an output file. Either file may be in one of three formats:
-.ie n .IP """rc""" 4
-.el .IP "\f(CWrc\fR" 4
-.IX Item "rc"
-A text format read by the Resource Compiler.
-.ie n .IP """res""" 4
-.el .IP "\f(CWres\fR" 4
-.IX Item "res"
-A binary format generated by the Resource Compiler.
-.ie n .IP """coff""" 4
-.el .IP "\f(CWcoff\fR" 4
-.IX Item "coff"
-A \s-1COFF\s0 object or executable.
-.PP
-The exact description of these different formats is available in
-documentation from Microsoft.
-.PP
-When \fBwindres\fR converts from the \f(CW\*(C`rc\*(C'\fR format to the \f(CW\*(C`res\*(C'\fR
-format, it is acting like the Windows Resource Compiler. When
-\&\fBwindres\fR converts from the \f(CW\*(C`res\*(C'\fR format to the \f(CW\*(C`coff\*(C'\fR
-format, it is acting like the Windows \f(CW\*(C`CVTRES\*(C'\fR program.
-.PP
-When \fBwindres\fR generates an \f(CW\*(C`rc\*(C'\fR file, the output is similar
-but not identical to the format expected for the input. When an input
-\&\f(CW\*(C`rc\*(C'\fR file refers to an external filename, an output \f(CW\*(C`rc\*(C'\fR file
-will instead include the file contents.
-.PP
-If the input or output format is not specified, \fBwindres\fR will
-guess based on the file name, or, for the input file, the file contents.
-A file with an extension of \fI.rc\fR will be treated as an \f(CW\*(C`rc\*(C'\fR
-file, a file with an extension of \fI.res\fR will be treated as a
-\&\f(CW\*(C`res\*(C'\fR file, and a file with an extension of \fI.o\fR or
-\&\fI.exe\fR will be treated as a \f(CW\*(C`coff\*(C'\fR file.
-.PP
-If no output file is specified, \fBwindres\fR will print the resources
-in \f(CW\*(C`rc\*(C'\fR format to standard output.
-.PP
-The normal use is for you to write an \f(CW\*(C`rc\*(C'\fR file, use \fBwindres\fR
-to convert it to a \s-1COFF\s0 object file, and then link the \s-1COFF\s0 file into
-your application. This will make the resources described in the
-\&\f(CW\*(C`rc\*(C'\fR file available to Windows.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-.IP "\fB\-i\fR \fIfilename\fR" 4
-.IX Item "-i filename"
-.PD 0
-.IP "\fB\-\-input\fR \fIfilename\fR" 4
-.IX Item "--input filename"
-.PD
-The name of the input file. If this option is not used, then
-\&\fBwindres\fR will use the first non-option argument as the input file
-name. If there are no non-option arguments, then \fBwindres\fR will
-read from standard input. \fBwindres\fR can not read a \s-1COFF\s0 file from
-standard input.
-.IP "\fB\-o\fR \fIfilename\fR" 4
-.IX Item "-o filename"
-.PD 0
-.IP "\fB\-\-output\fR \fIfilename\fR" 4
-.IX Item "--output filename"
-.PD
-The name of the output file. If this option is not used, then
-\&\fBwindres\fR will use the first non-option argument, after any used
-for the input file name, as the output file name. If there is no
-non-option argument, then \fBwindres\fR will write to standard output.
-\&\fBwindres\fR can not write a \s-1COFF\s0 file to standard output. Note,
-for compatability with \fBrc\fR the option \fB\-fo\fR is also
-accepted, but its use is not recommended.
-.IP "\fB\-J\fR \fIformat\fR" 4
-.IX Item "-J format"
-.PD 0
-.IP "\fB\-\-input\-format\fR \fIformat\fR" 4
-.IX Item "--input-format format"
-.PD
-The input format to read. \fIformat\fR may be \fBres\fR, \fBrc\fR, or
-\&\fBcoff\fR. If no input format is specified, \fBwindres\fR will
-guess, as described above.
-.IP "\fB\-O\fR \fIformat\fR" 4
-.IX Item "-O format"
-.PD 0
-.IP "\fB\-\-output\-format\fR \fIformat\fR" 4
-.IX Item "--output-format format"
-.PD
-The output format to generate. \fIformat\fR may be \fBres\fR,
-\&\fBrc\fR, or \fBcoff\fR. If no output format is specified,
-\&\fBwindres\fR will guess, as described above.
-.IP "\fB\-F\fR \fItarget\fR" 4
-.IX Item "-F target"
-.PD 0
-.IP "\fB\-\-target\fR \fItarget\fR" 4
-.IX Item "--target target"
-.PD
-Specify the \s-1BFD\s0 format to use for a \s-1COFF\s0 file as input or output. This
-is a \s-1BFD\s0 target name; you can use the \fB\-\-help\fR option to see a list
-of supported targets. Normally \fBwindres\fR will use the default
-format, which is the first one listed by the \fB\-\-help\fR option.
-.IP "\fB\-\-preprocessor\fR \fIprogram\fR" 4
-.IX Item "--preprocessor program"
-When \fBwindres\fR reads an \f(CW\*(C`rc\*(C'\fR file, it runs it through the C
-preprocessor first. This option may be used to specify the preprocessor
-to use, including any leading arguments. The default preprocessor
-argument is \f(CW\*(C`gcc \-E \-xc\-header \-DRC_INVOKED\*(C'\fR.
-.IP "\fB\-I\fR \fIdirectory\fR" 4
-.IX Item "-I directory"
-.PD 0
-.IP "\fB\-\-include\-dir\fR \fIdirectory\fR" 4
-.IX Item "--include-dir directory"
-.PD
-Specify an include directory to use when reading an \f(CW\*(C`rc\*(C'\fR file.
-\&\fBwindres\fR will pass this to the preprocessor as an \fB\-I\fR
-option. \fBwindres\fR will also search this directory when looking for
-files named in the \f(CW\*(C`rc\*(C'\fR file. If the argument passed to this command
-matches any of the supported \fIformats\fR (as descrived in the \fB\-J\fR
-option), it will issue a deprecation warning, and behave just like the
-\&\fB\-J\fR option. New programs should not use this behaviour. If a
-directory happens to match a \fIformat\fR, simple prefix it with \fB./\fR
-to disable the backward compatibility.
-.IP "\fB\-D\fR \fItarget\fR" 4
-.IX Item "-D target"
-.PD 0
-.IP "\fB\-\-define\fR \fIsym\fR\fB[=\fR\fIval\fR\fB]\fR" 4
-.IX Item "--define sym[=val]"
-.PD
-Specify a \fB\-D\fR option to pass to the preprocessor when reading an
-\&\f(CW\*(C`rc\*(C'\fR file.
-.IP "\fB\-U\fR \fItarget\fR" 4
-.IX Item "-U target"
-.PD 0
-.IP "\fB\-\-undefine\fR \fIsym\fR" 4
-.IX Item "--undefine sym"
-.PD
-Specify a \fB\-U\fR option to pass to the preprocessor when reading an
-\&\f(CW\*(C`rc\*(C'\fR file.
-.IP "\fB\-r\fR" 4
-.IX Item "-r"
-Ignored for compatibility with rc.
-.IP "\fB\-v\fR" 4
-.IX Item "-v"
-Enable verbose mode. This tells you what the preprocessor is if you
-didn't specify one.
-.IP "\fB\-l\fR \fIval\fR" 4
-.IX Item "-l val"
-.PD 0
-.IP "\fB\-\-language\fR \fIval\fR" 4
-.IX Item "--language val"
-.PD
-Specify the default language to use when reading an \f(CW\*(C`rc\*(C'\fR file.
-\&\fIval\fR should be a hexadecimal language code. The low eight bits are
-the language, and the high eight bits are the sublanguage.
-.IP "\fB\-\-use\-temp\-file\fR" 4
-.IX Item "--use-temp-file"
-Use a temporary file to instead of using popen to read the output of
-the preprocessor. Use this option if the popen implementation is buggy
-on the host (eg., certain non-English language versions of Windows 95 and
-Windows 98 are known to have buggy popen where the output will instead
-go the console).
-.IP "\fB\-\-no\-use\-temp\-file\fR" 4
-.IX Item "--no-use-temp-file"
-Use popen, not a temporary file, to read the output of the preprocessor.
-This is the default behaviour.
-.IP "\fB\-h\fR" 4
-.IX Item "-h"
-.PD 0
-.IP "\fB\-\-help\fR" 4
-.IX Item "--help"
-.PD
-Prints a usage summary.
-.IP "\fB\-V\fR" 4
-.IX Item "-V"
-.PD 0
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-.PD
-Prints the version number for \fBwindres\fR.
-.IP "\fB\-\-yydebug\fR" 4
-.IX Item "--yydebug"
-If \fBwindres\fR is compiled with \f(CW\*(C`YYDEBUG\*(C'\fR defined as \f(CW1\fR,
-this will turn on parser debugging.
-.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.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-the Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002, 2003, 2004, 2005, 2006 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/dwarf.c b/binutils/dwarf.c
index c69cab224b28..cc37b25b701d 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -1,5 +1,5 @@
/* dwarf.c -- display DWARF contents of a BFD binary file
- Copyright 2005, 2006
+ Copyright 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -19,12 +19,12 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include <stdio.h>
-
-#include "dwarf.h"
-
-#include "bucomm.h"
+#include "sysdep.h"
#include "libiberty.h"
+#include "bfd.h"
+#include "bucomm.h"
+#include "elf/dwarf2.h"
+#include "dwarf.h"
static int have_frame_base;
static int need_base_address;
@@ -895,6 +895,9 @@ decode_location_expression (unsigned char * data,
case DW_OP_call_ref:
printf ("DW_OP_call_ref");
break;
+ case DW_OP_form_tls_address:
+ printf ("DW_OP_form_tls_address");
+ break;
/* GNU extensions. */
case DW_OP_GNU_push_tls_address:
@@ -1213,26 +1216,37 @@ read_and_display_attr_value (unsigned long attribute,
case DW_AT_language:
switch (uvalue)
{
- case DW_LANG_C: printf ("(non-ANSI C)"); break;
+ /* Ordered by the numeric value of these constants. */
case DW_LANG_C89: printf ("(ANSI C)"); break;
+ case DW_LANG_C: printf ("(non-ANSI C)"); break;
+ case DW_LANG_Ada83: printf ("(Ada)"); break;
case DW_LANG_C_plus_plus: printf ("(C++)"); break;
+ case DW_LANG_Cobol74: printf ("(Cobol 74)"); break;
+ case DW_LANG_Cobol85: printf ("(Cobol 85)"); break;
case DW_LANG_Fortran77: printf ("(FORTRAN 77)"); break;
case DW_LANG_Fortran90: printf ("(Fortran 90)"); break;
- case DW_LANG_Modula2: printf ("(Modula 2)"); break;
case DW_LANG_Pascal83: printf ("(ANSI Pascal)"); break;
- case DW_LANG_Ada83: printf ("(Ada)"); break;
- case DW_LANG_Cobol74: printf ("(Cobol 74)"); break;
- case DW_LANG_Cobol85: printf ("(Cobol 85)"); break;
+ case DW_LANG_Modula2: printf ("(Modula 2)"); break;
/* DWARF 2.1 values. */
+ case DW_LANG_Java: printf ("(Java)"); break;
case DW_LANG_C99: printf ("(ANSI C99)"); break;
case DW_LANG_Ada95: printf ("(ADA 95)"); break;
case DW_LANG_Fortran95: printf ("(Fortran 95)"); break;
+ /* DWARF 3 values. */
+ case DW_LANG_PLI: printf ("(PLI)"); break;
+ case DW_LANG_ObjC: printf ("(Objective C)"); break;
+ case DW_LANG_ObjC_plus_plus: printf ("(Objective C++)"); break;
+ case DW_LANG_UPC: printf ("(Unified Parallel C)"); break;
+ case DW_LANG_D: printf ("(D)"); break;
/* MIPS extension. */
case DW_LANG_Mips_Assembler: printf ("(MIPS assembler)"); break;
/* UPC extension. */
case DW_LANG_Upc: printf ("(Unified Parallel C)"); break;
default:
- printf ("(Unknown: %lx)", uvalue);
+ if (uvalue >= DW_LANG_lo_user && uvalue <= DW_LANG_hi_user)
+ printf ("(implementation defined: %lx)", uvalue);
+ else
+ printf ("(Unknown: %lx)", uvalue);
break;
}
break;
@@ -1604,7 +1618,6 @@ process_debug_info (struct dwarf_section *section, void *file,
hdrptr += 2;
cu_offset = start - section_begin;
- start += compunit.cu_length + initial_length_size;
cu_abbrev_offset_ptr = hdrptr;
compunit.cu_abbrev_offset = byte_get (hdrptr, offset_size);
@@ -1628,8 +1641,6 @@ process_debug_info (struct dwarf_section *section, void *file,
debug_information [unit].num_range_lists = 0;
}
- tags = hdrptr;
-
if (!do_loc)
{
printf (_(" Compilation Unit @ offset 0x%lx:\n"), cu_offset);
@@ -1639,6 +1650,16 @@ process_debug_info (struct dwarf_section *section, void *file,
printf (_(" Pointer Size: %d\n"), compunit.cu_pointer_size);
}
+ if (cu_offset + compunit.cu_length + initial_length_size
+ > section->size)
+ {
+ warn (_("Debug info is corrupted, length is invalid (section is %lu bytes)\n"),
+ (unsigned long)section->size);
+ break;
+ }
+ tags = hdrptr;
+ start += compunit.cu_length + initial_length_size;
+
if (compunit.cu_version != 2 && compunit.cu_version != 3)
{
warn (_("Only version 2 and 3 DWARF debug information is currently supported.\n"));
@@ -1649,11 +1670,15 @@ process_debug_info (struct dwarf_section *section, void *file,
/* Process the abbrevs used by this compilation unit. DWARF
sections under Mach-O have non-zero addresses. */
- process_abbrev_section
- ((unsigned char *) debug_displays [abbrev].section.start
- + compunit.cu_abbrev_offset - debug_displays [abbrev].section.address,
- (unsigned char *) debug_displays [abbrev].section.start
- + debug_displays [abbrev].section.size);
+ if (compunit.cu_abbrev_offset >= debug_displays [abbrev].section.size)
+ warn (_("Debug info is corrupted, abbrev offset is invalid (section is %lu bytes)\n"),
+ (unsigned long)debug_displays [abbrev].section.size);
+ else
+ process_abbrev_section
+ ((unsigned char *) debug_displays [abbrev].section.start
+ + compunit.cu_abbrev_offset - debug_displays [abbrev].section.address,
+ (unsigned char *) debug_displays [abbrev].section.start
+ + debug_displays [abbrev].section.size);
level = 0;
while (tags < start)
@@ -1673,6 +1698,13 @@ process_debug_info (struct dwarf_section *section, void *file,
continue;
}
+ if (!do_loc)
+ printf (_(" <%d><%lx>: Abbrev Number: %lu"),
+ level,
+ (unsigned long) (tags - section_begin
+ - bytes_read),
+ abbrev_number);
+
/* Scan through the abbreviation list until we reach the
correct entry. */
for (entry = first_abbrev;
@@ -1682,18 +1714,18 @@ process_debug_info (struct dwarf_section *section, void *file,
if (entry == NULL)
{
+ if (!do_loc)
+ {
+ printf ("\n");
+ fflush (stdout);
+ }
warn (_("Unable to locate entry %lu in the abbreviation table\n"),
abbrev_number);
return 0;
}
if (!do_loc)
- printf (_(" <%d><%lx>: Abbrev Number: %lu (%s)\n"),
- level,
- (unsigned long) (tags - section_begin
- - bytes_read),
- abbrev_number,
- get_TAG_name (entry->tag));
+ printf (_(" (%s)\n"), get_TAG_name (entry->tag));
switch (entry->tag)
{
@@ -1704,7 +1736,6 @@ process_debug_info (struct dwarf_section *section, void *file,
need_base_address = 1;
break;
case DW_TAG_entry_point:
- case DW_TAG_inlined_subroutine:
case DW_TAG_subprogram:
need_base_address = 0;
/* Assuming that there is no DW_AT_frame_base. */
@@ -1713,14 +1744,20 @@ process_debug_info (struct dwarf_section *section, void *file,
}
for (attr = entry->first_attr; attr; attr = attr->next)
- tags = read_and_display_attr (attr->attribute,
- attr->form,
- tags, cu_offset,
- compunit.cu_pointer_size,
- offset_size,
- compunit.cu_version,
- &debug_information [unit],
- do_loc);
+ {
+ if (! do_loc)
+ /* Show the offset from where the tag was extracted. */
+ printf (" <%2lx>", (unsigned long)(tags - section_begin));
+
+ tags = read_and_display_attr (attr->attribute,
+ attr->form,
+ tags, cu_offset,
+ compunit.cu_pointer_size,
+ offset_size,
+ compunit.cu_version,
+ &debug_information [unit],
+ do_loc);
+ }
if (entry->children)
++level;
@@ -2315,7 +2352,8 @@ display_debug_loc (struct dwarf_section *section, void *file)
error (_("No location lists in .debug_info section!\n"));
/* DWARF sections under Mach-O have non-zero addresses. */
- if (debug_information [first].loc_offsets [0] != section->address)
+ if (debug_information [first].num_loc_offsets > 0
+ && debug_information [first].loc_offsets [0] != section->address)
warn (_("Location lists in %s section start at 0x%lx\n"),
section->name, debug_information [first].loc_offsets [0]);
@@ -2495,7 +2533,6 @@ display_debug_str (struct dwarf_section *section,
return 1;
}
-
static int
display_debug_info (struct dwarf_section *section, void *file)
{
@@ -2519,6 +2556,7 @@ display_debug_aranges (struct dwarf_section *section,
unsigned char *ranges;
unsigned long length;
unsigned long address;
+ unsigned char address_size;
int excess;
int offset_size;
int initial_length_size;
@@ -2565,28 +2603,45 @@ display_debug_aranges (struct dwarf_section *section,
printf (_(" Pointer Size: %d\n"), arange.ar_pointer_size);
printf (_(" Segment Size: %d\n"), arange.ar_segment_size);
- printf (_("\n Address Length\n"));
+ address_size = arange.ar_pointer_size + arange.ar_segment_size;
+
+ /* The DWARF spec does not require that the address size be a power
+ of two, but we do. This will have to change if we ever encounter
+ an uneven architecture. */
+ if ((address_size & (address_size - 1)) != 0)
+ {
+ warn (_("Pointer size + Segment size is not a power of two.\n"));
+ break;
+ }
+
+ if (address_size > 4)
+ printf (_("\n Address Length\n"));
+ else
+ printf (_("\n Address Length\n"));
ranges = hdrptr;
- /* Must pad to an alignment boundary that is twice the pointer size. */
- excess = (hdrptr - start) % (2 * arange.ar_pointer_size);
+ /* Must pad to an alignment boundary that is twice the address size. */
+ excess = (hdrptr - start) % (2 * address_size);
if (excess)
- ranges += (2 * arange.ar_pointer_size) - excess;
+ ranges += (2 * address_size) - excess;
start += arange.ar_length + initial_length_size;
- while (ranges + 2 * arange.ar_pointer_size <= start)
+ while (ranges + 2 * address_size <= start)
{
- address = byte_get (ranges, arange.ar_pointer_size);
+ address = byte_get (ranges, address_size);
- ranges += arange.ar_pointer_size;
+ ranges += address_size;
- length = byte_get (ranges, arange.ar_pointer_size);
+ length = byte_get (ranges, address_size);
- ranges += arange.ar_pointer_size;
+ ranges += address_size;
- printf (" %8.8lx %lu\n", address, length);
+ if (address_size > 4)
+ printf (" 0x%16.16lx 0x%lx\n", address, length);
+ else
+ printf (" 0x%8.8lx 0x%lx\n", address, length);
}
}
@@ -2668,7 +2723,8 @@ display_debug_ranges (struct dwarf_section *section,
error (_("No range lists in .debug_info section!\n"));
/* DWARF sections under Mach-O have non-zero addresses. */
- if (debug_information [first].range_lists [0] != section->address)
+ if (debug_information [first].num_range_lists > 0
+ && debug_information [first].range_lists [0] != section->address)
warn (_("Range lists in %s section start at 0x%lx\n"),
section->name, debug_information [first].range_lists [0]);
@@ -2879,6 +2935,7 @@ static dwarf_vma
get_encoded_value (unsigned char *data, int encoding)
{
int size = size_of_encoded_value (encoding);
+
if (encoding & DW_EH_PE_signed)
return byte_get_signed (data, size);
else
@@ -2927,7 +2984,7 @@ display_debug_frames (struct dwarf_section *section,
{
printf ("\n%08lx ZERO terminator\n\n",
(unsigned long)(saved_start - section_start));
- return 1;
+ continue;
}
if (length == 0xffffffff)
@@ -2944,6 +3001,12 @@ display_debug_frames (struct dwarf_section *section,
}
block_end = saved_start + length + initial_length_size;
+ if (block_end > end)
+ {
+ warn ("Invalid length %#08lx in FDE at %#08lx\n",
+ length, (unsigned long)(saved_start - section_start));
+ block_end = end;
+ }
cie_id = byte_get (start, offset_size); start += offset_size;
if (is_eh ? (cie_id == 0) : (cie_id == DW_CIE_ID))
@@ -3078,9 +3141,8 @@ display_debug_frames (struct dwarf_section *section,
if (!cie)
{
- warn ("Invalid CIE pointer %08lx in FDE at %08lx\n",
+ warn ("Invalid CIE pointer %#08lx in FDE at %#08lx\n",
cie_id, (unsigned long)(saved_start - section_start));
- start = block_end;
fc->ncols = 0;
fc->col_type = xmalloc (sizeof (short int));
fc->col_offset = xmalloc (sizeof (int));
@@ -3584,7 +3646,10 @@ display_debug_frames (struct dwarf_section *section,
break;
default:
- warn (_("unsupported or unknown DW_CFA_%d\n"), op);
+ if (op >= DW_CFA_lo_user && op <= DW_CFA_hi_user)
+ printf (_(" DW_CFA_??? (User defined call frame op: %#x)\n"), op);
+ else
+ warn (_("unsupported or unknown Dwarf Call Frame Instruction number: %#x\n"), op);
start = block_end;
}
}
diff --git a/binutils/dwarf.h b/binutils/dwarf.h
index 907ac93ef717..6b4674268a99 100644
--- a/binutils/dwarf.h
+++ b/binutils/dwarf.h
@@ -1,5 +1,5 @@
/* dwwrf.h - DWARF support header file
- Copyright 2005
+ Copyright 2005, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -18,9 +18,6 @@ You should have received a copy of the GNU General Public 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 "elf/dwarf2.h"
-
#if __STDC_VERSION__ >= 199901L || (defined(__GNUC__) && __GNUC__ >= 2)
/* We can't use any bfd types here since readelf may define BFD64 and
objdump may not. */
diff --git a/binutils/embedspu.sh b/binutils/embedspu.sh
new file mode 100644
index 000000000000..6611172814e6
--- /dev/null
+++ b/binutils/embedspu.sh
@@ -0,0 +1,257 @@
+#! /bin/sh
+# Embed an SPU ELF executable into a PowerPC object file.
+#
+# Copyright 2006, 2007 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.
+
+usage ()
+{
+ echo "Usage: embedspu [flags] symbol_name input_filename output_filename"
+ echo
+ echo " input_filename: SPU ELF executable to be embedded"
+ echo " output_filename: Resulting PowerPC object file"
+ echo " symbol_name: Name of program handle struct to be defined"
+ echo " flags: GCC flags defining PowerPC object file format"
+ echo " (e.g. -m32 or -m64)"
+ exit 1
+}
+
+program_transform_name=
+mydir=`dirname "$0"`
+
+find_prog ()
+{
+ prog=`echo $1 | sed "$program_transform_name"`
+ prog="$mydir/$prog"
+ test -x "$prog" && return 0
+ prog="$mydir/$1"
+ test -x "$prog" && return 0
+ prog=`echo $1 | sed "$program_transform_name"`
+ which $prog > /dev/null 2> /dev/null && return 0
+ return 1
+}
+
+SYMBOL=
+INFILE=
+OUTFILE=
+FLAGS=
+
+parse_args ()
+{
+ while test -n "$1"; do
+ case "$1" in
+ -*) FLAGS="${FLAGS} $1" ;;
+ *) if test -z "$SYMBOL"; then
+ SYMBOL="$1"
+ elif test -z "$INFILE"; then
+ INFILE="$1"
+ elif test -z "$OUTFILE"; then
+ OUTFILE="$1"
+ else
+ echo "Too many arguments!"
+ usage
+ fi ;;
+ esac
+ shift
+ done
+ if test -z "$OUTFILE"; then
+ usage
+ fi
+ if test ! -r "$INFILE"; then
+ echo "${INFILE}: File not found"
+ usage
+ fi
+}
+
+main ()
+{
+ parse_args "$@"
+
+ # Find a powerpc gcc. Support running from a combined tree build.
+ if test -x "$mydir/../gcc/xgcc"; then
+ CC="$mydir/../gcc/xgcc -B$mydir/../gcc/"
+ else
+ find_prog gcc
+ if test $? -ne 0; then
+ echo "Cannot find $prog"
+ exit 1
+ fi
+ CC="$prog"
+ fi
+
+ # Find readelf. Any old readelf should do.
+ find_prog readelf
+ if test $? -ne 0; then
+ if which readelf > /dev/null 2> /dev/null; then
+ prog=readelf
+ else
+ echo "Cannot find $prog"
+ exit 1
+ fi
+ fi
+ READELF="$prog"
+
+ # Sanity check the input file
+ if ! ${READELF} -h ${INFILE} | grep 'Class:.*ELF32' >/dev/null 2>/dev/null \
+ || ! ${READELF} -h ${INFILE} | grep 'Type:.*EXEC' >/dev/null 2>/dev/null \
+ || ! ${READELF} -h ${INFILE} | egrep 'Machine:.*(SPU|17)' >/dev/null 2>/dev/null
+ then
+ echo "${INFILE}: Does not appear to be an SPU executable"
+ exit 1
+ fi
+
+ toe=`${READELF} -S ${INFILE} | sed -n -e 's, *\[ *\([0-9]*\)\] *\.toe *[PROGN]*BITS *\([0-9a-f]*\).*,\1 \2,p'`
+ toe_addr=`echo $toe | sed -n -e 's,.* ,,p'`
+ toe=`echo $toe | sed -n -e 's, .*,,p'`
+ # For loaded sections, pick off section number, address, and file offset
+ sections=`${READELF} -S ${INFILE} | sed -n -e 's, *\[ *\([0-9]*\)\] *[^ ]* *PROGBITS *\([0-9a-f]*\) *\([0-9a-f]*\).*,\1 \2 \3,p'`
+ sections=`echo ${sections}`
+ # For relocation sections, pick off file offset and info (points to
+ # section where relocs apply)
+ relas=`${READELF} -S ${INFILE} | sed -n -e 's, *\[ *[0-9]*\] *[^ ]* *RELA *[0-9a-f]* *0*\([0-9a-f][0-9a-f]*\).* \([0-9a-f][0-9a-f]*\) *[0-9a-f][0-9a-f]*$,\1 \2,p'`
+ relas=`echo ${relas}`
+
+ # Build embedded SPU image.
+ # 1. The whole SPU ELF file is written to .rodata.speelf
+ # 2. Symbols starting with the string "_EAR_" in the SPU ELF image are
+ # special. They allow an SPU program to access corresponding symbols
+ # (ie. minus the _EAR_ prefix), in the PowerPC program. _EAR_ without
+ # a suffix is used to refer to the addrress of the SPU image in
+ # PowerPC address space. _EAR_* symbols must all be defined in .toe
+ # at 16 byte intervals, or they must be defined in other non-bss
+ # sections.
+ # Find all _EAR_ symbols in .toe using readelf, sort by address, and
+ # write the address of the corresponding PowerPC symbol in a table
+ # built in .data.spetoe. For _EAE_ symbols not in .toe, create
+ # .reloc commands to relocate their location directly.
+ # 3. Look for R_SPU_PPU32 and R_SPU_PPU64 relocations in the SPU ELF image
+ # and create .reloc commands for them.
+ # 4. Write a struct spe_program_handle to .data.
+ # 5. Write a table of _SPUEAR_ symbols.
+ ${CC} ${FLAGS} -x assembler-with-cpp -nostartfiles -nostdlib \
+ -Wa,-mbig -Wl,-r -Wl,-x -o ${OUTFILE} - <<EOF
+ .section .data.spetoe,"aw",@progbits
+ .p2align 7
+__spetoe__:
+`${READELF} -s -W ${INFILE} | grep ' _EAR_' | sort -k 2 | awk \
+'BEGIN { \
+ addr = strtonum ("0x" "'${toe_addr-0}'"); \
+ split ("'"${sections}"'", s, " "); \
+ for (i = 1; i in s; i += 3) { \
+ sec_off[s[i]] = strtonum ("0x" s[i+2]) - strtonum ("0x" s[i+1]); \
+ } \
+} \
+$7 == "'${toe}'" && strtonum ("0x" $2) != addr { \
+ print "#error Symbol " $8 " not in 16 byte element toe array!"; \
+} \
+$7 == "'${toe}'" { \
+ addr = addr + 16; \
+} \
+$7 == "'${toe}'" { \
+ print "#ifdef _LP64"; \
+ print " .quad " ($8 == "_EAR_" ? "__speelf__" : substr($8, 6)) ", 0"; \
+ print "#else"; \
+ print " .int 0, " ($8 == "_EAR_" ? "__speelf__" : substr($8, 6)) ", 0, 0"; \
+ print "#endif"; \
+} \
+$7 != "'${toe}'" && $7 in sec_off { \
+ print "#ifdef _LP64"; \
+ print " .reloc __speelf__+" strtonum ("0x" $2) + sec_off[$7] ", R_PPC64_ADDR64, " ($8 == "_EAR_" ? "__speelf__" : substr($8, 6)); \
+ print "#else"; \
+ print " .reloc __speelf__+" strtonum ("0x" $2) + sec_off[$7] + 4 ", R_PPC_ADDR32, " ($8 == "_EAR_" ? "__speelf__" : substr($8, 6)); \
+ print "#endif"; \
+ if (!donedef) { print "#define HAS_RELOCS 1"; donedef = 1; }; \
+} \
+$7 != "'${toe}'" && ! $7 in sec_off { \
+ print "#error Section not found for " $8; \
+} \
+'`
+`test -z "${relas}" || ${READELF} -r -W ${INFILE} | awk \
+'BEGIN { \
+ split ("'"${sections}"'", s, " "); \
+ for (i = 1; i in s; i += 3) { \
+ sec_off[s[i]] = strtonum ("0x" s[i+2]) - strtonum ("0x" s[i+1]); \
+ } \
+ split ("'"${relas}"'", s, " "); \
+ for (i = 1; i in s; i += 2) { \
+ rela[s[i]] = strtonum (s[i+1]); \
+ } \
+} \
+/^Relocation section/ { \
+ sec = substr($6, 3); \
+} \
+$3 ~ /R_SPU_PPU/ { \
+ print "#ifdef _LP64"; \
+ print " .reloc __speelf__+" strtonum ("0x" $1) + sec_off[rela[sec]] ", R_PPC64_ADDR" substr($3, 10) ", " ($5 != "" ? $5 "+0x" $7 : "__speelf__ + 0x" $4); \
+ print "#else"; \
+ print " .reloc __speelf__+" strtonum ("0x" $1) + sec_off[rela[sec]] + (substr($3, 10) == "64" ? 4 : 0)", R_PPC_ADDR32, " ($5 != "" ? $5 "+0x" $7 : "__speelf__ + 0x" $4); \
+ print "#endif"; \
+ if (!donedef) { print "#define HAS_RELOCS 1"; donedef = 1; }; \
+} \
+$3 ~ /unrecognized:/ { \
+ print "#ifdef _LP64"; \
+ print " .reloc __speelf__+" strtonum ("0x" $1) + sec_off[rela[sec]] ", R_PPC64_ADDR" ($4 == "f" ? "64" : "32") ", " ($6 != "" ? $6 "+0x" $8 : "__speelf__ + 0x" $5); \
+ print "#else"; \
+ print " .reloc __speelf__+" strtonum ("0x" $1) + sec_off[rela[sec]] + ($4 == "f" ? 4 : 0)", R_PPC_ADDR32, " ($6 != "" ? $6 "+0x" $8 : "__speelf__ + 0x" $5); \
+ print "#endif"; \
+ if (!donedef) { print "#define HAS_RELOCS 1"; donedef = 1; }; \
+} \
+'`
+#if defined (HAS_RELOCS) && (defined (__PIC__) || defined (__PIE__))
+ .section .data.rel.ro.speelf,"a",@progbits
+#else
+ .section .rodata.speelf,"a",@progbits
+#endif
+ .p2align 7
+__speelf__:
+ .incbin "${INFILE}"
+
+ .section .data,"aw",@progbits
+ .globl ${SYMBOL}
+ .type ${SYMBOL}, @object
+# fill in a struct spe_program_handle
+#ifdef _LP64
+ .p2align 3
+${SYMBOL}:
+ .int 24
+ .int 0
+ .quad __speelf__
+ .quad __spetoe__
+#else
+ .p2align 2
+${SYMBOL}:
+ .int 12
+ .int __speelf__
+ .int __spetoe__
+#endif
+ .size ${SYMBOL}, . - ${SYMBOL}
+
+`${READELF} -s -W ${INFILE} | grep ' _SPUEAR_' | sort -k 2 | awk \
+'{ \
+ print " .globl '${SYMBOL}'_" substr($8, 9); \
+ print " .type '${SYMBOL}'_" substr($8, 9) ", @object"; \
+ print " .size '${SYMBOL}'_" substr($8, 9) ", 4"; \
+ print "'${SYMBOL}'_" substr($8, 9) ":"; \
+ print " .int 0x" $2; \
+} \
+'`
+EOF
+}
+
+main "$@"
diff --git a/binutils/emul_aix.c b/binutils/emul_aix.c
index 8161a86822bb..97677bc36d29 100644
--- a/binutils/emul_aix.c
+++ b/binutils/emul_aix.c
@@ -1,5 +1,5 @@
/* Binutils emulation layer.
- Copyright 2002, 2003 Free Software Foundation, Inc.
+ Copyright 2002, 2003, 2006 Free Software Foundation, Inc.
Written by Tom Rix, Red Hat Inc.
This file is part of GNU Binutils.
@@ -126,25 +126,25 @@ ar_emul_aix5_replace (bfd **after_bfd, char *file_name, bfd_boolean verbose)
static bfd_boolean
ar_emul_aix_parse_arg (char *arg)
{
- if (strncmp (arg, "-X32_64", 6) == 0)
+ if (CONST_STRNEQ (arg, "-X32_64"))
{
big_archive = TRUE;
X32 = TRUE;
X64 = TRUE;
}
- else if (strncmp (arg, "-X32", 3) == 0)
+ else if (CONST_STRNEQ (arg, "-X32"))
{
big_archive = TRUE;
X32 = TRUE;
X64 = FALSE;
}
- else if (strncmp (arg, "-X64", 3) == 0)
+ else if (CONST_STRNEQ (arg, "-X64"))
{
big_archive = TRUE;
X32 = FALSE;
X64 = TRUE;
}
- else if (strncmp (arg, "-g", 2) == 0)
+ else if (CONST_STRNEQ (arg, "-g"))
{
big_archive = FALSE;
X32 = TRUE;
diff --git a/binutils/filemode.c b/binutils/filemode.c
index 78578c88241c..9c44709111b6 100644
--- a/binutils/filemode.c
+++ b/binutils/filemode.c
@@ -1,6 +1,6 @@
/* filemode.c -- make a string describing file modes
- Copyright 1985, 1990, 1991, 1994, 1995, 1997, 1999, 2002, 2003, 2005
- Free Software Foundation, Inc.
+ Copyright 1985, 1990, 1991, 1994, 1995, 1997, 1999, 2002, 2003, 2005,
+ 2007 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
@@ -17,6 +17,7 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
+#include "sysdep.h"
#include "bfd.h"
#include "bucomm.h"
diff --git a/binutils/ieee.c b/binutils/ieee.c
index 98ec30de9efd..987420b9209d 100644
--- a/binutils/ieee.c
+++ b/binutils/ieee.c
@@ -1,5 +1,5 @@
/* ieee.c -- Read and write IEEE-695 debugging information.
- Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2006
+ Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2006, 2007
Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>.
@@ -22,12 +22,10 @@
/* This file reads and writes IEEE-695 debugging information. */
-#include <stdio.h>
+#include "sysdep.h"
#include <assert.h>
-
#include "bfd.h"
#include "ieee.h"
-#include "bucomm.h"
#include "libiberty.h"
#include "debug.h"
#include "budbg.h"
diff --git a/binutils/mclex.c b/binutils/mclex.c
new file mode 100644
index 000000000000..f6cedd9efd74
--- /dev/null
+++ b/binutils/mclex.c
@@ -0,0 +1,441 @@
+/* mclex.c -- lexer for Windows mc files parser.
+ Copyright 2007
+ Free Software Foundation, Inc.
+
+ Written by Kai Tietz, Onevision.
+
+ 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. */
+
+/* This is a lexer used by the Windows rc file parser.
+ It basically just recognized a bunch of keywords. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bucomm.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+#include "windmc.h"
+#include "mcparse.h"
+
+#include <assert.h>
+
+/* Exported globals. */
+bfd_boolean mclex_want_nl = FALSE;
+bfd_boolean mclex_want_line = FALSE;
+bfd_boolean mclex_want_filename = FALSE;
+
+/* Local globals. */
+static unichar *input_stream = NULL;
+static unichar *input_stream_pos = NULL;
+static int input_line = 1;
+static const char *input_filename = NULL;
+
+void
+mc_set_content (const unichar *src)
+{
+ if (!src)
+ return;
+ input_stream = input_stream_pos = unichar_dup (src);
+}
+
+void
+mc_set_inputfile (const char *name)
+{
+ if (! name || *name == 0)
+ input_filename = "-";
+ else
+ {
+ const char *s1 = strrchr (name, '/');
+ const char *s2 = strrchr (name, '\\');
+
+ if (! s1)
+ s1 = s2;
+ if (s1 && s2 && s1 < s2)
+ s1 = s2;
+ if (! s1)
+ s1 = name;
+ else
+ s1++;
+ s1 = xstrdup (s1);
+ input_filename = s1;
+ }
+}
+
+static void
+show_msg (const char *kind, const char *msg, va_list argp)
+{
+ fprintf (stderr, "In %s at line %d: %s: ", input_filename, input_line, kind);
+ vfprintf (stderr, msg, argp);
+ fprintf (stderr, ".\n");
+}
+
+void
+mc_warn (const char *s, ...)
+{
+ va_list argp;
+ va_start (argp, s);
+ show_msg ("warning", s, argp);
+ va_end (argp);
+}
+
+void
+mc_fatal (const char *s, ...)
+{
+ va_list argp;
+ va_start (argp, s);
+ show_msg ("fatal", s, argp);
+ va_end (argp);
+ xexit (1);
+}
+
+
+int
+yyerror (const char *s, ...)
+{
+ va_list argp;
+ va_start (argp, s);
+ show_msg ("parser", s, argp);
+ va_end (argp);
+ return 1;
+}
+
+static unichar *
+get_diff (unichar *end, unichar *start)
+{
+ unichar *ret;
+ unichar save = *end;
+
+ *end = 0;
+ ret = unichar_dup (start);
+ *end = save;
+ return ret;
+}
+
+static rc_uint_type
+parse_digit (unichar ch)
+{
+ rc_uint_type base = 10, v = 0, c;
+
+ if (ch == '0')
+ {
+ base = 8;
+ switch (input_stream_pos[0])
+ {
+ case 'x': case 'X': base = 16; input_stream_pos++; break;
+ case 'o': case 'O': base = 8; input_stream_pos++; break;
+ case 'b': case 'B': base = 2; input_stream_pos++; break;
+ }
+ }
+ else
+ v = (rc_uint_type) (ch - '0');
+
+ while ((ch = input_stream_pos[0]) != 0)
+ {
+ if (ch >= 'A' && ch <= 'F')
+ c = (rc_uint_type) (ch - 'A') + 10;
+ else if (ch >= 'a' && ch <= 'f')
+ c = (rc_uint_type) (ch - 'a') + 10;
+ else if (ch >= '0' && ch <= '9')
+ c = (rc_uint_type) (ch - '0');
+ else
+ break;
+ v *= base;
+ v += c;
+ ++input_stream_pos;
+ }
+ if (input_stream_pos[0] == 'U' || input_stream_pos[0] == 'u')
+ input_stream_pos++;
+ if (input_stream_pos[0] == 'L' || input_stream_pos[0] == 'l')
+ input_stream_pos++;
+ if (input_stream_pos[0] == 'L' || input_stream_pos[0] == 'l')
+ input_stream_pos++;
+ return v;
+}
+
+static mc_keyword *keyword_top = NULL;
+
+const mc_keyword *
+enum_facility (int e)
+{
+ mc_keyword *h = keyword_top;
+
+ while (h != NULL)
+ {
+ while (h && strcmp (h->group_name, "facility") != 0)
+ h = h->next;
+ if (e == 0)
+ return h;
+ --e;
+ if (h)
+ h = h->next;
+ }
+ return h;
+}
+
+const mc_keyword *
+enum_severity (int e)
+{
+ mc_keyword *h = keyword_top;
+
+ while (h != NULL)
+ {
+ while (h && strcmp (h->group_name, "severity") != 0)
+ h = h->next;
+ if (e == 0)
+ return h;
+ --e;
+ if (h)
+ h = h->next;
+ }
+ return h;
+}
+
+static void
+mc_add_keyword_ascii (const char *sz, int rid, const char *grp, rc_uint_type nv, const char *sv)
+{
+ unichar *usz, *usv = NULL;
+ rc_uint_type usz_len;
+
+ unicode_from_codepage (&usz_len, &usz, sz, CP_ACP);
+ if (sv)
+ unicode_from_codepage (&usz_len, &usv, sv, CP_ACP);
+ mc_add_keyword (usz, rid, grp, nv, usv);
+}
+
+void
+mc_add_keyword (unichar *usz, int rid, const char *grp, rc_uint_type nv, unichar *sv)
+{
+ mc_keyword *p, *c, *n;
+ size_t len = unichar_len (usz);
+
+ c = keyword_top;
+ p = NULL;
+ while (c != NULL)
+ {
+ if (c->len > len)
+ break;
+ if (c->len == len)
+ {
+ int e = memcmp (usz, c->usz, len * sizeof (unichar));
+
+ if (e < 0)
+ break;
+ if (! e)
+ {
+ if (! strcmp (grp, "keyword") || strcmp (c->group_name, grp) != 0)
+ fatal (_("Duplicate symbol entered into keyword list."));
+ c->rid = rid;
+ c->nval = nv;
+ c->sval = (!sv ? NULL : unichar_dup (sv));
+ if (! strcmp (grp, "language"))
+ {
+ const wind_language_t *lag = wind_find_language_by_id ((unsigned) nv);
+
+ if (lag == NULL)
+ fatal ("Language ident 0x%lx is not resolvable.\n", (long) nv);
+ memcpy (&c->lang_info, lag, sizeof (*lag));
+ }
+ return;
+ }
+ }
+ c = (p = c)->next;
+ }
+ n = xmalloc (sizeof (mc_keyword));
+ n->next = c;
+ n->len = len;
+ n->group_name = grp;
+ n->usz = usz;
+ n->rid = rid;
+ n->nval = nv;
+ n->sval = (!sv ? NULL : unichar_dup (sv));
+ if (! strcmp (grp, "language"))
+ {
+ const wind_language_t *lag = wind_find_language_by_id ((unsigned) nv);
+ if (lag == NULL)
+ fatal ("Language ident 0x%lx is not resolvable.\n", (long) nv);
+ memcpy (&n->lang_info, lag, sizeof (*lag));
+ }
+ if (! p)
+ keyword_top = n;
+ else
+ p->next = n;
+}
+
+static int
+mc_token (const unichar *t, size_t len)
+{
+ static int was_init = 0;
+ mc_keyword *k;
+
+ if (! was_init)
+ {
+ was_init = 1;
+ mc_add_keyword_ascii ("OutputBase", MCOUTPUTBASE, "keyword", 0, NULL);
+ mc_add_keyword_ascii ("MessageIdTypedef", MCMESSAGEIDTYPEDEF, "keyword", 0, NULL);
+ mc_add_keyword_ascii ("SeverityNames", MCSEVERITYNAMES, "keyword", 0, NULL);
+ mc_add_keyword_ascii ("FacilityNames", MCFACILITYNAMES, "keyword", 0, NULL);
+ mc_add_keyword_ascii ("LanguageNames", MCLANGUAGENAMES, "keyword", 0, NULL);
+ mc_add_keyword_ascii ("MessageId", MCMESSAGEID, "keyword", 0, NULL);
+ mc_add_keyword_ascii ("Severity", MCSEVERITY, "keyword", 0, NULL);
+ mc_add_keyword_ascii ("Facility", MCFACILITY, "keyword", 0, NULL);
+ mc_add_keyword_ascii ("SymbolicName", MCSYMBOLICNAME, "keyword", 0, NULL);
+ mc_add_keyword_ascii ("Language", MCLANGUAGE, "keyword", 0, NULL);
+ mc_add_keyword_ascii ("Success", MCTOKEN, "severity", 0, NULL);
+ mc_add_keyword_ascii ("Informational", MCTOKEN, "severity", 1, NULL);
+ mc_add_keyword_ascii ("Warning", MCTOKEN, "severity", 2, NULL);
+ mc_add_keyword_ascii ("Error", MCTOKEN, "severity", 3, NULL);
+ mc_add_keyword_ascii ("System", MCTOKEN, "facility", 0xff, NULL);
+ mc_add_keyword_ascii ("Application", MCTOKEN, "facility", 0xfff, NULL);
+ mc_add_keyword_ascii ("English", MCTOKEN, "language", 0x409, "MSG00001");
+ }
+ k = keyword_top;
+ if (!len || !t || *t == 0)
+ return -1;
+ while (k != NULL)
+ {
+ if (k->len > len)
+ break;
+ if (k->len == len)
+ {
+ if (! memcmp (k->usz, t, len * sizeof (unichar)))
+ {
+ if (k->rid == MCTOKEN)
+ yylval.tok = k;
+ return k->rid;
+ }
+ }
+ k = k->next;
+ }
+ return -1;
+}
+
+int
+yylex (void)
+{
+ unichar *start_token;
+ unichar ch;
+
+ if (! input_stream_pos)
+ {
+ fatal ("Input stream not setuped.\n");
+ return -1;
+ }
+ if (mclex_want_line)
+ {
+ start_token = input_stream_pos;
+ if (input_stream_pos[0] == '.'
+ && (input_stream_pos[1] == '\n'
+ || (input_stream_pos[1] == '\r' && input_stream_pos[2] == '\n')))
+ {
+ mclex_want_line = FALSE;
+ while (input_stream_pos[0] != 0 && input_stream_pos[0] != '\n')
+ ++input_stream_pos;
+ if (input_stream_pos[0] == '\n')
+ ++input_stream_pos;
+ return MCENDLINE;
+ }
+ while (input_stream_pos[0] != 0 && input_stream_pos[0] != '\n')
+ ++input_stream_pos;
+ if (input_stream_pos[0] == '\n')
+ ++input_stream_pos;
+ yylval.ustr = get_diff (input_stream_pos, start_token);
+ return MCLINE;
+ }
+ while ((ch = input_stream_pos[0]) <= 0x20)
+ {
+ if (ch == 0)
+ return -1;
+ ++input_stream_pos;
+ if (ch == '\n')
+ input_line += 1;
+ if (mclex_want_nl && ch == '\n')
+ {
+ mclex_want_nl = FALSE;
+ return NL;
+ }
+ }
+ start_token = input_stream_pos;
+ ++input_stream_pos;
+ if (mclex_want_filename)
+ {
+ mclex_want_filename = FALSE;
+ if (ch == '"')
+ {
+ start_token++;
+ while ((ch = input_stream_pos[0]) != 0)
+ {
+ if (ch == '"')
+ break;
+ ++input_stream_pos;
+ }
+ yylval.ustr = get_diff (input_stream_pos, start_token);
+ if (ch == '"')
+ ++input_stream_pos;
+ }
+ else
+ {
+ while ((ch = input_stream_pos[0]) != 0)
+ {
+ if (ch <= 0x20 || ch == ')')
+ break;
+ ++input_stream_pos;
+ }
+ yylval.ustr = get_diff (input_stream_pos, start_token);
+ }
+ return MCFILENAME;
+ }
+ switch (ch)
+ {
+ case ';':
+ ++start_token;
+ while (input_stream_pos[0] != '\n' && input_stream_pos[0] != 0)
+ ++input_stream_pos;
+ if (input_stream_pos[0] == '\n')
+ input_stream_pos++;
+ yylval.ustr = get_diff (input_stream_pos, start_token);
+ return MCCOMMENT;
+ case '=':
+ return '=';
+ case '(':
+ return '(';
+ case ')':
+ return ')';
+ case '+':
+ return '+';
+ case ':':
+ return ':';
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ yylval.ival = parse_digit (ch);
+ return MCNUMBER;
+ default:
+ if (ch >= 0x40)
+ {
+ int ret;
+ while (input_stream_pos[0] >= 0x40 || (input_stream_pos[0] >= '0' && input_stream_pos[0] <= '9'))
+ ++input_stream_pos;
+ ret = mc_token (start_token, (size_t) (input_stream_pos - start_token));
+ if (ret != -1)
+ return ret;
+ yylval.ustr = get_diff (input_stream_pos, start_token);
+ return MCIDENT;
+ }
+ yyerror ("illegal character 0x%x.", ch);
+ }
+ return -1;
+}
diff --git a/binutils/mcparse.y b/binutils/mcparse.y
new file mode 100644
index 000000000000..9aaba9b8d419
--- /dev/null
+++ b/binutils/mcparse.y
@@ -0,0 +1,356 @@
+%{ /* mcparse.y -- parser for Windows mc files
+ Copyright 2007
+ Free Software Foundation, Inc.
+
+ Parser for Windows mc files
+ Written by Kai Tietz, Onevision.
+
+ 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. */
+
+/* This is a parser for Windows rc files. It is based on the parser
+ by Gunther Ebert <gunther.ebert@ixos-leipzig.de>. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bucomm.h"
+#include "libiberty.h"
+#include "windmc.h"
+#include "safe-ctype.h"
+
+static rc_uint_type mc_last_id = 0;
+static rc_uint_type mc_sefa_val = 0;
+static unichar *mc_last_symbol = NULL;
+static const mc_keyword *mc_cur_severity = NULL;
+static const mc_keyword *mc_cur_facility = NULL;
+static mc_node *cur_node = NULL;
+
+%}
+
+%union
+{
+ rc_uint_type ival;
+ unichar *ustr;
+ const mc_keyword *tok;
+ mc_node *nod;
+};
+
+%start input
+
+%token NL
+%token<ustr> MCIDENT MCFILENAME MCLINE MCCOMMENT
+%token<tok> MCTOKEN
+%token MCENDLINE
+%token MCLANGUAGENAMES MCFACILITYNAMES MCSEVERITYNAMES MCOUTPUTBASE MCMESSAGEIDTYPEDEF
+%token MCLANGUAGE MCMESSAGEID MCSEVERITY MCFACILITY MCSYMBOLICNAME
+%token <ival> MCNUMBER
+
+%type<ival> id vid sefasy_def
+%type<ustr> alias_name token lines comments
+%type<tok> lang
+
+%%
+input: entities
+ ;
+
+entities:
+ /* empty */
+ | entities entity
+ ;
+entity: global_section
+ | message
+ | comments
+ {
+ cur_node = mc_add_node ();
+ cur_node->user_text = $1;
+ }
+ | error { mc_fatal ("syntax error"); }
+;
+
+global_section:
+ MCSEVERITYNAMES '=' '(' severitymaps ')'
+ | MCSEVERITYNAMES '=' '(' severitymaps error { mc_fatal ("missing ')' in SeverityNames"); }
+ | MCSEVERITYNAMES '=' error { mc_fatal ("missing '(' in SeverityNames"); }
+ | MCSEVERITYNAMES error { mc_fatal ("missing '=' for SeverityNames"); }
+ | MCLANGUAGENAMES '=' '(' langmaps ')'
+ | MCLANGUAGENAMES '=' '(' langmaps error { mc_fatal ("missing ')' in LanguageNames"); }
+ | MCLANGUAGENAMES '=' error { mc_fatal ("missing '(' in LanguageNames"); }
+ | MCLANGUAGENAMES error { mc_fatal ("missing '=' for LanguageNames"); }
+ | MCFACILITYNAMES '=' '(' facilitymaps ')'
+ | MCFACILITYNAMES '=' '(' facilitymaps error { mc_fatal ("missing ')' in FacilityNames"); }
+ | MCFACILITYNAMES '=' error { mc_fatal ("missing '(' in FacilityNames"); }
+ | MCFACILITYNAMES error { mc_fatal ("missing '=' for FacilityNames"); }
+ | MCOUTPUTBASE '=' MCNUMBER
+ {
+ if ($3 != 10 && $3 != 16)
+ mc_fatal ("OutputBase allows 10 or 16 as value");
+ mcset_out_values_are_decimal = ($3 == 10 ? 1 : 0);
+ }
+ | MCMESSAGEIDTYPEDEF '=' MCIDENT
+ {
+ mcset_msg_id_typedef = $3;
+ }
+ | MCMESSAGEIDTYPEDEF '=' error
+ {
+ mc_fatal ("MessageIdTypedef expects an identifier");
+ }
+ | MCMESSAGEIDTYPEDEF error
+ {
+ mc_fatal ("missing '=' for MessageIdTypedef");
+ }
+;
+
+severitymaps:
+ severitymap
+ | severitymaps severitymap
+ | error { mc_fatal ("severity ident missing"); }
+;
+
+severitymap:
+ token '=' MCNUMBER alias_name
+ {
+ mc_add_keyword ($1, MCTOKEN, "severity", $3, $4);
+ }
+ | token '=' error { mc_fatal ("severity number missing"); }
+ | token error { mc_fatal ("severity missing '='"); }
+;
+
+facilitymaps:
+ facilitymap
+ | facilitymaps facilitymap
+ | error { mc_fatal ("missing ident in FacilityNames"); }
+;
+
+facilitymap:
+ token '=' MCNUMBER alias_name
+ {
+ mc_add_keyword ($1, MCTOKEN, "facility", $3, $4);
+ }
+ | token '=' error { mc_fatal ("facility number missing"); }
+ | token error { mc_fatal ("facility missing '='"); }
+;
+
+langmaps:
+ langmap
+ | langmaps langmap
+ | error { mc_fatal ("missing ident in LanguageNames"); }
+;
+
+langmap:
+ token '=' MCNUMBER lex_want_filename ':' MCFILENAME
+ {
+ mc_add_keyword ($1, MCTOKEN, "language", $3, $6);
+ }
+ | token '=' MCNUMBER lex_want_filename ':' error { mc_fatal ("missing filename in LanguageNames"); }
+ | token '=' MCNUMBER error { mc_fatal ("missing ':' in LanguageNames"); }
+ | token '=' error { mc_fatal ("missing language code in LanguageNames"); }
+ | token error { mc_fatal ("missing '=' for LanguageNames"); }
+;
+
+alias_name:
+ /* empty */
+ {
+ $$ = NULL;
+ }
+ | ':' MCIDENT
+ {
+ $$ = $2;
+ }
+ | ':' error { mc_fatal ("illegal token in identifier"); $$ = NULL; }
+;
+
+message:
+ id sefasy_def
+ {
+ cur_node = mc_add_node ();
+ cur_node->symbol = mc_last_symbol;
+ cur_node->facility = mc_cur_facility;
+ cur_node->severity = mc_cur_severity;
+ cur_node->id = ($1 & 0xffffUL);
+ cur_node->vid = ($1 & 0xffffUL) | mc_sefa_val;
+ mc_last_id = $1;
+ }
+ lang_entities
+;
+
+id: MCMESSAGEID '=' vid { $$ = $3; }
+ | MCMESSAGEID '=' error { mc_fatal ("missing number in MessageId"); $$ = 0; }
+ | MCMESSAGEID error { mc_fatal ("missing '=' for MessageId"); $$ = 0; }
+;
+
+vid: /* empty */
+ {
+ $$ = ++mc_last_id;
+ }
+ | MCNUMBER
+ {
+ $$ = $1;
+ }
+ | '+' MCNUMBER
+ {
+ $$ = mc_last_id + $2;
+ }
+ | '+' error { mc_fatal ("missing number after MessageId '+'"); }
+;
+
+sefasy_def:
+ /* empty */
+ {
+ $$ = 0;
+ mc_sefa_val = (mcset_custom_bit ? 1 : 0) << 29;
+ mc_last_symbol = NULL;
+ mc_cur_severity = NULL;
+ mc_cur_facility = NULL;
+ }
+ | sefasy_def severity
+ {
+ if ($1 & 1)
+ mc_warn (_("duplicate definition of Severity"));
+ $$ = $1 | 1;
+ }
+ | sefasy_def facility
+ {
+ if ($1 & 2)
+ mc_warn (_("duplicate definition of Facility"));
+ $$ = $1 | 2;
+ }
+ | sefasy_def symbol
+ {
+ if ($1 & 4)
+ mc_warn (_("duplicate definition of SymbolicName"));
+ $$ = $1 | 4;
+ }
+;
+
+severity: MCSEVERITY '=' MCTOKEN
+ {
+ mc_sefa_val &= ~ (0x3UL << 30);
+ mc_sefa_val |= (($3->nval & 0x3UL) << 30);
+ mc_cur_severity = $3;
+ }
+;
+
+facility: MCFACILITY '=' MCTOKEN
+ {
+ mc_sefa_val &= ~ (0xfffUL << 16);
+ mc_sefa_val |= (($3->nval & 0xfffUL) << 16);
+ mc_cur_facility = $3;
+ }
+;
+
+symbol: MCSYMBOLICNAME '=' MCIDENT
+ {
+ mc_last_symbol = $3;
+ }
+;
+
+lang_entities:
+ lang_entity
+ | lang_entities lang_entity
+;
+
+lang_entity:
+ lang lex_want_line lines MCENDLINE
+ {
+ mc_node_lang *h;
+ h = mc_add_node_lang (cur_node, $1, cur_node->vid);
+ h->message = $3;
+ if (mcset_max_message_length != 0 && unichar_len (h->message) > mcset_max_message_length)
+ mc_warn ("message length to long");
+ }
+;
+
+lines: MCLINE
+ {
+ $$ = $1;
+ }
+ | lines MCLINE
+ {
+ unichar *h;
+ rc_uint_type l1,l2;
+ l1 = unichar_len ($1);
+ l2 = unichar_len ($2);
+ h = (unichar *) res_alloc ((l1 + l2 + 1) * sizeof (unichar));
+ if (l1) memcpy (h, $1, l1 * sizeof (unichar));
+ if (l2) memcpy (&h[l1], $2, l2 * sizeof (unichar));
+ h[l1 + l2] = 0;
+ $$ = h;
+ }
+ | error { mc_fatal ("missing end of message text"); $$ = NULL; }
+ | lines error { mc_fatal ("missing end of message text"); $$ = $1; }
+;
+
+comments: MCCOMMENT { $$ = $1; }
+ | comments MCCOMMENT
+ {
+ unichar *h;
+ rc_uint_type l1,l2;
+ l1 = unichar_len ($1);
+ l2 = unichar_len ($2);
+ h = (unichar *) res_alloc ((l1 + l2 + 1) * sizeof (unichar));
+ if (l1) memcpy (h, $1, l1 * sizeof (unichar));
+ if (l2) memcpy (&h[l1], $2, l2 * sizeof (unichar));
+ h[l1 + l2] = 0;
+ $$ = h;
+ }
+;
+
+lang: MCLANGUAGE lex_want_nl '=' MCTOKEN NL
+ {
+ $$ = $4;
+ }
+ | MCLANGUAGE lex_want_nl '=' MCIDENT NL
+ {
+ $$ = NULL;
+ mc_fatal (_("undeclared language identifier"));
+ }
+ | MCLANGUAGE lex_want_nl '=' token error
+ {
+ $$ = NULL;
+ mc_fatal ("missing newline after Language");
+ }
+ | MCLANGUAGE lex_want_nl '=' error
+ {
+ $$ = NULL;
+ mc_fatal ("missing ident for Language");
+ }
+ | MCLANGUAGE error
+ {
+ $$ = NULL;
+ mc_fatal ("missing '=' for Language");
+ }
+;
+
+token: MCIDENT { $$ = $1; }
+ | MCTOKEN { $$ = $1->usz; }
+;
+
+lex_want_nl:
+ /* Empty */ { mclex_want_nl = 1; }
+;
+
+lex_want_line:
+ /* Empty */ { mclex_want_line = 1; }
+;
+
+lex_want_filename:
+ /* Empty */ { mclex_want_filename = 1; }
+;
+
+%%
+
+/* Something else. */
diff --git a/binutils/nlmconv.c b/binutils/nlmconv.c
index 551e7e59e430..9932ba29b71d 100644
--- a/binutils/nlmconv.c
+++ b/binutils/nlmconv.c
@@ -1,6 +1,6 @@
/* nlmconv.c -- NLM conversion program
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -32,9 +32,9 @@
#endif
#endif
+#include "sysdep.h"
#include "bfd.h"
#include "libiberty.h"
-#include "bucomm.h"
#include "safe-ctype.h"
#include "ansidecl.h"
@@ -53,6 +53,8 @@
#include "coff/ecoff.h"
#endif
+#include "bucomm.h"
+
/* If strerror is just a macro, we want to use the one from libiberty
since it will handle undefined values. */
#undef strerror
@@ -737,7 +739,7 @@ main (int argc, char **argv)
|| ! bfd_set_section_flags (outbfd, help_section,
SEC_HAS_CONTENTS))
bfd_fatal (_("help section"));
- strncpy (nlm_extended_header (outbfd)->stamp, "MeSsAgEs", 8);
+ LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs");
}
}
if (message_file != NULL)
@@ -759,7 +761,7 @@ main (int argc, char **argv)
|| ! bfd_set_section_flags (outbfd, message_section,
SEC_HAS_CONTENTS))
bfd_fatal (_("message section"));
- strncpy (nlm_extended_header (outbfd)->stamp, "MeSsAgEs", 8);
+ LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs");
}
}
if (modules != NULL)
@@ -795,7 +797,7 @@ main (int argc, char **argv)
|| ! bfd_set_section_flags (outbfd, rpc_section,
SEC_HAS_CONTENTS))
bfd_fatal (_("rpc section"));
- strncpy (nlm_extended_header (outbfd)->stamp, "MeSsAgEs", 8);
+ LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs");
}
}
if (sharelib_file != NULL)
@@ -852,20 +854,20 @@ main (int argc, char **argv)
|| ! bfd_set_section_flags (outbfd, shared_section,
SEC_HAS_CONTENTS))
bfd_fatal (_("shared section"));
- strncpy (nlm_extended_header (outbfd)->stamp, "MeSsAgEs", 8);
+ LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs");
}
}
}
/* Check whether a version was given. */
- if (strncmp (version_hdr->stamp, "VeRsIoN#", 8) != 0)
+ if (!CONST_STRNEQ (version_hdr->stamp, "VeRsIoN#"))
non_fatal (_("warning: No version number given"));
/* At least for now, always create an extended header, because that
is what NLMLINK does. */
- strncpy (nlm_extended_header (outbfd)->stamp, "MeSsAgEs", 8);
+ LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs");
- strncpy (nlm_cygnus_ext_header (outbfd)->stamp, "CyGnUsEx", 8);
+ LITMEMCPY (nlm_cygnus_ext_header (outbfd)->stamp, "CyGnUsEx");
/* If the date was not given, force it in. */
if (nlm_version_header (outbfd)->month == 0
@@ -880,7 +882,7 @@ main (int argc, char **argv)
nlm_version_header (outbfd)->month = ptm->tm_mon + 1;
nlm_version_header (outbfd)->day = ptm->tm_mday;
nlm_version_header (outbfd)->year = ptm->tm_year + 1900;
- strncpy (version_hdr->stamp, "VeRsIoN#", 8);
+ LITMEMCPY (version_hdr->stamp, "VeRsIoN#");
}
#ifdef NLMCONV_POWERPC
@@ -1109,7 +1111,7 @@ show_usage (FILE *file, int status)
-h --help Display this information\n\
-v --version Display the program's version\n\
"));
- if (status == 0)
+ if (REPORT_BUGS_TO[0] && status == 0)
fprintf (file, _("Report bugs to %s\n"), REPORT_BUGS_TO);
exit (status);
}
@@ -1747,9 +1749,9 @@ powerpc_build_stubs (bfd *inbfd, bfd *outbfd ATTRIBUTE_UNUSED,
/* Make a new undefined symbol with the same name but without
the leading `.'. */
- newsym = (asymbol *) xmalloc (sizeof (asymbol));
+ newsym = xmalloc (sizeof (asymbol));
*newsym = *sym;
- newname = (char *) xmalloc (strlen (bfd_asymbol_name (sym)));
+ newname = xmalloc (strlen (bfd_asymbol_name (sym)));
strcpy (newname, bfd_asymbol_name (sym) + 1);
newsym->name = newname;
diff --git a/binutils/nlmheader.c b/binutils/nlmheader.c
deleted file mode 100644
index 1e6a862b2e52..000000000000
--- a/binutils/nlmheader.c
+++ /dev/null
@@ -1,2534 +0,0 @@
-/* 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 {
- CHECK = 258,
- CODESTART = 259,
- COPYRIGHT = 260,
- CUSTOM = 261,
- DATE = 262,
- DEBUG = 263,
- DESCRIPTION = 264,
- EXIT = 265,
- EXPORT = 266,
- FLAG_ON = 267,
- FLAG_OFF = 268,
- FULLMAP = 269,
- HELP = 270,
- IMPORT = 271,
- INPUT = 272,
- MAP = 273,
- MESSAGES = 274,
- MODULE = 275,
- MULTIPLE = 276,
- OS_DOMAIN = 277,
- OUTPUT = 278,
- PSEUDOPREEMPTION = 279,
- REENTRANT = 280,
- SCREENNAME = 281,
- SHARELIB = 282,
- STACK = 283,
- START = 284,
- SYNCHRONIZE = 285,
- THREADNAME = 286,
- TYPE = 287,
- VERBOSE = 288,
- VERSIONK = 289,
- XDCDATA = 290,
- STRING = 291,
- QUOTED_STRING = 292
- };
-#endif
-/* Tokens. */
-#define CHECK 258
-#define CODESTART 259
-#define COPYRIGHT 260
-#define CUSTOM 261
-#define DATE 262
-#define DEBUG 263
-#define DESCRIPTION 264
-#define EXIT 265
-#define EXPORT 266
-#define FLAG_ON 267
-#define FLAG_OFF 268
-#define FULLMAP 269
-#define HELP 270
-#define IMPORT 271
-#define INPUT 272
-#define MAP 273
-#define MESSAGES 274
-#define MODULE 275
-#define MULTIPLE 276
-#define OS_DOMAIN 277
-#define OUTPUT 278
-#define PSEUDOPREEMPTION 279
-#define REENTRANT 280
-#define SCREENNAME 281
-#define SHARELIB 282
-#define STACK 283
-#define START 284
-#define SYNCHRONIZE 285
-#define THREADNAME 286
-#define TYPE 287
-#define VERBOSE 288
-#define VERSIONK 289
-#define XDCDATA 290
-#define STRING 291
-#define QUOTED_STRING 292
-
-
-
-
-/* Copy the first part of user declarations. */
-#line 1 "nlmheader.y"
-/* nlmheader.y - parse NLM header specification keywords.
- Copyright 1993, 1994, 1995, 1997, 1998, 2001, 2002, 2003
- 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. */
-
-/* Written by Ian Lance Taylor <ian@cygnus.com>.
-
- This bison file parses the commands recognized by the NetWare NLM
- linker, except for lists of object files. It stores the
- information in global variables.
-
- This implementation is based on the description in the NetWare Tool
- Maker Specification manual, edition 1.0. */
-
-#include "ansidecl.h"
-#include <stdio.h>
-#include "safe-ctype.h"
-#include "bfd.h"
-#include "bucomm.h"
-#include "nlm/common.h"
-#include "nlm/internal.h"
-#include "nlmconv.h"
-
-/* Information is stored in the structures pointed to by these
- variables. */
-
-Nlm_Internal_Fixed_Header *fixed_hdr;
-Nlm_Internal_Variable_Header *var_hdr;
-Nlm_Internal_Version_Header *version_hdr;
-Nlm_Internal_Copyright_Header *copyright_hdr;
-Nlm_Internal_Extended_Header *extended_hdr;
-
-/* Procedure named by CHECK. */
-char *check_procedure;
-/* File named by CUSTOM. */
-char *custom_file;
-/* Whether to generate debugging information (DEBUG). */
-bfd_boolean debug_info;
-/* Procedure named by EXIT. */
-char *exit_procedure;
-/* Exported symbols (EXPORT). */
-struct string_list *export_symbols;
-/* List of files from INPUT. */
-struct string_list *input_files;
-/* Map file name (MAP, FULLMAP). */
-char *map_file;
-/* Whether a full map has been requested (FULLMAP). */
-bfd_boolean full_map;
-/* File named by HELP. */
-char *help_file;
-/* Imported symbols (IMPORT). */
-struct string_list *import_symbols;
-/* File named by MESSAGES. */
-char *message_file;
-/* Autoload module list (MODULE). */
-struct string_list *modules;
-/* File named by OUTPUT. */
-char *output_file;
-/* File named by SHARELIB. */
-char *sharelib_file;
-/* Start procedure name (START). */
-char *start_procedure;
-/* VERBOSE. */
-bfd_boolean verbose;
-/* RPC description file (XDCDATA). */
-char *rpc_file;
-
-/* The number of serious errors that have occurred. */
-int parse_errors;
-
-/* The current symbol prefix when reading a list of import or export
- symbols. */
-static char *symbol_prefix;
-
-/* Parser error message handler. */
-#define yyerror(msg) nlmheader_error (msg);
-
-/* Local functions. */
-static int yylex (void);
-static void nlmlex_file_push (const char *);
-static bfd_boolean nlmlex_file_open (const char *);
-static int nlmlex_buf_init (void);
-static char nlmlex_buf_add (int);
-static long nlmlex_get_number (const char *);
-static void nlmheader_identify (void);
-static void nlmheader_warn (const char *, int);
-static void nlmheader_error (const char *);
-static struct string_list * string_list_cons (char *, struct string_list *);
-static struct string_list * string_list_append (struct string_list *,
- struct string_list *);
-static struct string_list * string_list_append1 (struct string_list *,
- char *);
-static char *xstrdup (const char *);
-
-
-
-/* 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 113 "nlmheader.y"
-typedef union YYSTYPE {
- char *string;
- struct string_list *list;
-} YYSTYPE;
-/* Line 196 of yacc.c. */
-#line 275 "nlmheader.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 287 "nlmheader.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 64
-/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 73
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 40
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 11
-/* YYNRULES -- Number of rules. */
-#define YYNRULES 52
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 82
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
-#define YYUNDEFTOK 2
-#define YYMAXUTOK 292
-
-#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, 2, 2, 2, 2, 2, 2, 2,
- 38, 39, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
- YYRHS. */
-static const unsigned char yyprhs[] =
-{
- 0, 0, 3, 5, 6, 9, 12, 15, 18, 21,
- 26, 28, 31, 34, 35, 39, 42, 45, 47, 50,
- 53, 54, 58, 61, 63, 66, 69, 72, 74, 76,
- 79, 81, 83, 86, 89, 92, 95, 97, 100, 103,
- 105, 110, 114, 117, 118, 120, 122, 124, 127, 130,
- 134, 136, 137
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yysigned_char yyrhs[] =
-{
- 41, 0, -1, 42, -1, -1, 43, 42, -1, 3,
- 36, -1, 4, 36, -1, 5, 37, -1, 6, 36,
- -1, 7, 36, 36, 36, -1, 8, -1, 9, 37,
- -1, 10, 36, -1, -1, 11, 44, 46, -1, 12,
- 36, -1, 13, 36, -1, 14, -1, 14, 36, -1,
- 15, 36, -1, -1, 16, 45, 46, -1, 17, 50,
- -1, 18, -1, 18, 36, -1, 19, 36, -1, 20,
- 50, -1, 21, -1, 22, -1, 23, 36, -1, 24,
- -1, 25, -1, 26, 37, -1, 27, 36, -1, 28,
- 36, -1, 29, 36, -1, 30, -1, 31, 37, -1,
- 32, 36, -1, 33, -1, 34, 36, 36, 36, -1,
- 34, 36, 36, -1, 35, 36, -1, -1, 47, -1,
- 49, -1, 48, -1, 47, 49, -1, 47, 48, -1,
- 38, 36, 39, -1, 36, -1, -1, 36, 50, -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const unsigned short int yyrline[] =
-{
- 0, 144, 144, 149, 151, 157, 161, 166, 183, 187,
- 205, 209, 225, 230, 229, 237, 242, 247, 252, 257,
- 262, 261, 269, 273, 277, 281, 285, 289, 293, 297,
- 304, 308, 312, 328, 332, 337, 341, 345, 361, 366,
- 370, 394, 410, 420, 423, 434, 438, 442, 446, 455,
- 466, 483, 486
-};
-#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", "CHECK", "CODESTART", "COPYRIGHT",
- "CUSTOM", "DATE", "DEBUG", "DESCRIPTION", "EXIT", "EXPORT", "FLAG_ON",
- "FLAG_OFF", "FULLMAP", "HELP", "IMPORT", "INPUT", "MAP", "MESSAGES",
- "MODULE", "MULTIPLE", "OS_DOMAIN", "OUTPUT", "PSEUDOPREEMPTION",
- "REENTRANT", "SCREENNAME", "SHARELIB", "STACK", "START", "SYNCHRONIZE",
- "THREADNAME", "TYPE", "VERBOSE", "VERSIONK", "XDCDATA", "STRING",
- "QUOTED_STRING", "'('", "')'", "$accept", "file", "commands", "command",
- "@1", "@2", "symbol_list_opt", "symbol_list", "symbol_prefix", "symbol",
- "string_list", 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, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 40, 41
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const unsigned char yyr1[] =
-{
- 0, 40, 41, 42, 42, 43, 43, 43, 43, 43,
- 43, 43, 43, 44, 43, 43, 43, 43, 43, 43,
- 45, 43, 43, 43, 43, 43, 43, 43, 43, 43,
- 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
- 43, 43, 43, 46, 46, 47, 47, 47, 47, 48,
- 49, 50, 50
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const unsigned char yyr2[] =
-{
- 0, 2, 1, 0, 2, 2, 2, 2, 2, 4,
- 1, 2, 2, 0, 3, 2, 2, 1, 2, 2,
- 0, 3, 2, 1, 2, 2, 2, 1, 1, 2,
- 1, 1, 2, 2, 2, 2, 1, 2, 2, 1,
- 4, 3, 2, 0, 1, 1, 1, 2, 2, 3,
- 1, 0, 2
-};
-
-/* 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 char yydefact[] =
-{
- 3, 0, 0, 0, 0, 0, 10, 0, 0, 13,
- 0, 0, 17, 0, 20, 51, 23, 0, 51, 27,
- 28, 0, 30, 31, 0, 0, 0, 0, 36, 0,
- 0, 39, 0, 0, 0, 2, 3, 5, 6, 7,
- 8, 0, 11, 12, 43, 15, 16, 18, 19, 43,
- 51, 22, 24, 25, 26, 29, 32, 33, 34, 35,
- 37, 38, 0, 42, 1, 4, 0, 50, 0, 14,
- 44, 46, 45, 21, 52, 41, 9, 0, 48, 47,
- 40, 49
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yysigned_char yydefgoto[] =
-{
- -1, 34, 35, 36, 44, 49, 69, 70, 71, 72,
- 51
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -20
-static const yysigned_char yypact[] =
-{
- -3, -1, 1, 2, 4, 5, -20, 6, 8, -20,
- 9, 10, 11, 12, -20, 13, 14, 16, 13, -20,
- -20, 17, -20, -20, 18, 20, 21, 22, -20, 23,
- 25, -20, 26, 27, 38, -20, -3, -20, -20, -20,
- -20, 28, -20, -20, -2, -20, -20, -20, -20, -2,
- 13, -20, -20, -20, -20, -20, -20, -20, -20, -20,
- -20, -20, 30, -20, -20, -20, 31, -20, 32, -20,
- -2, -20, -20, -20, -20, 33, -20, 3, -20, -20,
- -20, -20
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const yysigned_char yypgoto[] =
-{
- -20, -20, 34, -20, -20, -20, 24, -20, -19, -16,
- 15
-};
-
-/* 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 -1
-static const unsigned char yytable[] =
-{
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 54, 67, 37, 68, 38, 64, 39,
- 40, 41, 81, 42, 43, 45, 46, 47, 48, 50,
- 52, 78, 53, 55, 79, 56, 57, 58, 59, 0,
- 60, 61, 62, 63, 66, 74, 75, 76, 77, 80,
- 65, 0, 0, 73
-};
-
-static const yysigned_char yycheck[] =
-{
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 18, 36, 36, 38, 36, 0, 37,
- 36, 36, 39, 37, 36, 36, 36, 36, 36, 36,
- 36, 70, 36, 36, 70, 37, 36, 36, 36, -1,
- 37, 36, 36, 36, 36, 50, 36, 36, 36, 36,
- 36, -1, -1, 49
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
-static const unsigned char yystos[] =
-{
- 0, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 41, 42, 43, 36, 36, 37,
- 36, 36, 37, 36, 44, 36, 36, 36, 36, 45,
- 36, 50, 36, 36, 50, 36, 37, 36, 36, 36,
- 37, 36, 36, 36, 0, 42, 36, 36, 38, 46,
- 47, 48, 49, 46, 50, 36, 36, 36, 48, 49,
- 36, 39
-};
-
-#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 5:
-#line 158 "nlmheader.y"
- {
- check_procedure = (yyvsp[0].string);
- }
- break;
-
- case 6:
-#line 162 "nlmheader.y"
- {
- nlmheader_warn (_("CODESTART is not implemented; sorry"), -1);
- free ((yyvsp[0].string));
- }
- break;
-
- case 7:
-#line 167 "nlmheader.y"
- {
- int len;
-
- strncpy (copyright_hdr->stamp, "CoPyRiGhT=", 10);
- len = strlen ((yyvsp[0].string));
- if (len >= NLM_MAX_COPYRIGHT_MESSAGE_LENGTH)
- {
- nlmheader_warn (_("copyright string is too long"),
- NLM_MAX_COPYRIGHT_MESSAGE_LENGTH - 1);
- len = NLM_MAX_COPYRIGHT_MESSAGE_LENGTH - 1;
- }
- copyright_hdr->copyrightMessageLength = len;
- strncpy (copyright_hdr->copyrightMessage, (yyvsp[0].string), len);
- copyright_hdr->copyrightMessage[len] = '\0';
- free ((yyvsp[0].string));
- }
- break;
-
- case 8:
-#line 184 "nlmheader.y"
- {
- custom_file = (yyvsp[0].string);
- }
- break;
-
- case 9:
-#line 188 "nlmheader.y"
- {
- /* We don't set the version stamp here, because we use the
- version stamp to detect whether the required VERSION
- keyword was given. */
- version_hdr->month = nlmlex_get_number ((yyvsp[-2].string));
- version_hdr->day = nlmlex_get_number ((yyvsp[-1].string));
- version_hdr->year = nlmlex_get_number ((yyvsp[0].string));
- free ((yyvsp[-2].string));
- free ((yyvsp[-1].string));
- free ((yyvsp[0].string));
- if (version_hdr->month < 1 || version_hdr->month > 12)
- nlmheader_warn (_("illegal month"), -1);
- if (version_hdr->day < 1 || version_hdr->day > 31)
- nlmheader_warn (_("illegal day"), -1);
- if (version_hdr->year < 1900 || version_hdr->year > 3000)
- nlmheader_warn (_("illegal year"), -1);
- }
- break;
-
- case 10:
-#line 206 "nlmheader.y"
- {
- debug_info = TRUE;
- }
- break;
-
- case 11:
-#line 210 "nlmheader.y"
- {
- int len;
-
- len = strlen ((yyvsp[0].string));
- if (len > NLM_MAX_DESCRIPTION_LENGTH)
- {
- nlmheader_warn (_("description string is too long"),
- NLM_MAX_DESCRIPTION_LENGTH);
- len = NLM_MAX_DESCRIPTION_LENGTH;
- }
- var_hdr->descriptionLength = len;
- strncpy (var_hdr->descriptionText, (yyvsp[0].string), len);
- var_hdr->descriptionText[len] = '\0';
- free ((yyvsp[0].string));
- }
- break;
-
- case 12:
-#line 226 "nlmheader.y"
- {
- exit_procedure = (yyvsp[0].string);
- }
- break;
-
- case 13:
-#line 230 "nlmheader.y"
- {
- symbol_prefix = NULL;
- }
- break;
-
- case 14:
-#line 234 "nlmheader.y"
- {
- export_symbols = string_list_append (export_symbols, (yyvsp[0].list));
- }
- break;
-
- case 15:
-#line 238 "nlmheader.y"
- {
- fixed_hdr->flags |= nlmlex_get_number ((yyvsp[0].string));
- free ((yyvsp[0].string));
- }
- break;
-
- case 16:
-#line 243 "nlmheader.y"
- {
- fixed_hdr->flags &=~ nlmlex_get_number ((yyvsp[0].string));
- free ((yyvsp[0].string));
- }
- break;
-
- case 17:
-#line 248 "nlmheader.y"
- {
- map_file = "";
- full_map = TRUE;
- }
- break;
-
- case 18:
-#line 253 "nlmheader.y"
- {
- map_file = (yyvsp[0].string);
- full_map = TRUE;
- }
- break;
-
- case 19:
-#line 258 "nlmheader.y"
- {
- help_file = (yyvsp[0].string);
- }
- break;
-
- case 20:
-#line 262 "nlmheader.y"
- {
- symbol_prefix = NULL;
- }
- break;
-
- case 21:
-#line 266 "nlmheader.y"
- {
- import_symbols = string_list_append (import_symbols, (yyvsp[0].list));
- }
- break;
-
- case 22:
-#line 270 "nlmheader.y"
- {
- input_files = string_list_append (input_files, (yyvsp[0].list));
- }
- break;
-
- case 23:
-#line 274 "nlmheader.y"
- {
- map_file = "";
- }
- break;
-
- case 24:
-#line 278 "nlmheader.y"
- {
- map_file = (yyvsp[0].string);
- }
- break;
-
- case 25:
-#line 282 "nlmheader.y"
- {
- message_file = (yyvsp[0].string);
- }
- break;
-
- case 26:
-#line 286 "nlmheader.y"
- {
- modules = string_list_append (modules, (yyvsp[0].list));
- }
- break;
-
- case 27:
-#line 290 "nlmheader.y"
- {
- fixed_hdr->flags |= 0x2;
- }
- break;
-
- case 28:
-#line 294 "nlmheader.y"
- {
- fixed_hdr->flags |= 0x10;
- }
- break;
-
- case 29:
-#line 298 "nlmheader.y"
- {
- if (output_file == NULL)
- output_file = (yyvsp[0].string);
- else
- nlmheader_warn (_("ignoring duplicate OUTPUT statement"), -1);
- }
- break;
-
- case 30:
-#line 305 "nlmheader.y"
- {
- fixed_hdr->flags |= 0x8;
- }
- break;
-
- case 31:
-#line 309 "nlmheader.y"
- {
- fixed_hdr->flags |= 0x1;
- }
- break;
-
- case 32:
-#line 313 "nlmheader.y"
- {
- int len;
-
- len = strlen ((yyvsp[0].string));
- if (len >= NLM_MAX_SCREEN_NAME_LENGTH)
- {
- nlmheader_warn (_("screen name is too long"),
- NLM_MAX_SCREEN_NAME_LENGTH);
- len = NLM_MAX_SCREEN_NAME_LENGTH;
- }
- var_hdr->screenNameLength = len;
- strncpy (var_hdr->screenName, (yyvsp[0].string), len);
- var_hdr->screenName[NLM_MAX_SCREEN_NAME_LENGTH] = '\0';
- free ((yyvsp[0].string));
- }
- break;
-
- case 33:
-#line 329 "nlmheader.y"
- {
- sharelib_file = (yyvsp[0].string);
- }
- break;
-
- case 34:
-#line 333 "nlmheader.y"
- {
- var_hdr->stackSize = nlmlex_get_number ((yyvsp[0].string));
- free ((yyvsp[0].string));
- }
- break;
-
- case 35:
-#line 338 "nlmheader.y"
- {
- start_procedure = (yyvsp[0].string);
- }
- break;
-
- case 36:
-#line 342 "nlmheader.y"
- {
- fixed_hdr->flags |= 0x4;
- }
- break;
-
- case 37:
-#line 346 "nlmheader.y"
- {
- int len;
-
- len = strlen ((yyvsp[0].string));
- if (len >= NLM_MAX_THREAD_NAME_LENGTH)
- {
- nlmheader_warn (_("thread name is too long"),
- NLM_MAX_THREAD_NAME_LENGTH);
- len = NLM_MAX_THREAD_NAME_LENGTH;
- }
- var_hdr->threadNameLength = len;
- strncpy (var_hdr->threadName, (yyvsp[0].string), len);
- var_hdr->threadName[len] = '\0';
- free ((yyvsp[0].string));
- }
- break;
-
- case 38:
-#line 362 "nlmheader.y"
- {
- fixed_hdr->moduleType = nlmlex_get_number ((yyvsp[0].string));
- free ((yyvsp[0].string));
- }
- break;
-
- case 39:
-#line 367 "nlmheader.y"
- {
- verbose = TRUE;
- }
- break;
-
- case 40:
-#line 371 "nlmheader.y"
- {
- long val;
-
- strncpy (version_hdr->stamp, "VeRsIoN#", 8);
- version_hdr->majorVersion = nlmlex_get_number ((yyvsp[-2].string));
- val = nlmlex_get_number ((yyvsp[-1].string));
- if (val < 0 || val > 99)
- nlmheader_warn (_("illegal minor version number (must be between 0 and 99)"),
- -1);
- else
- version_hdr->minorVersion = val;
- val = nlmlex_get_number ((yyvsp[0].string));
- if (val < 0)
- nlmheader_warn (_("illegal revision number (must be between 0 and 26)"),
- -1);
- else if (val > 26)
- version_hdr->revision = 0;
- else
- version_hdr->revision = val;
- free ((yyvsp[-2].string));
- free ((yyvsp[-1].string));
- free ((yyvsp[0].string));
- }
- break;
-
- case 41:
-#line 395 "nlmheader.y"
- {
- long val;
-
- strncpy (version_hdr->stamp, "VeRsIoN#", 8);
- version_hdr->majorVersion = nlmlex_get_number ((yyvsp[-1].string));
- val = nlmlex_get_number ((yyvsp[0].string));
- if (val < 0 || val > 99)
- nlmheader_warn (_("illegal minor version number (must be between 0 and 99)"),
- -1);
- else
- version_hdr->minorVersion = val;
- version_hdr->revision = 0;
- free ((yyvsp[-1].string));
- free ((yyvsp[0].string));
- }
- break;
-
- case 42:
-#line 411 "nlmheader.y"
- {
- rpc_file = (yyvsp[0].string);
- }
- break;
-
- case 43:
-#line 420 "nlmheader.y"
- {
- (yyval.list) = NULL;
- }
- break;
-
- case 44:
-#line 424 "nlmheader.y"
- {
- (yyval.list) = (yyvsp[0].list);
- }
- break;
-
- case 45:
-#line 435 "nlmheader.y"
- {
- (yyval.list) = string_list_cons ((yyvsp[0].string), NULL);
- }
- break;
-
- case 46:
-#line 439 "nlmheader.y"
- {
- (yyval.list) = NULL;
- }
- break;
-
- case 47:
-#line 443 "nlmheader.y"
- {
- (yyval.list) = string_list_append1 ((yyvsp[-1].list), (yyvsp[0].string));
- }
- break;
-
- case 48:
-#line 447 "nlmheader.y"
- {
- (yyval.list) = (yyvsp[-1].list);
- }
- break;
-
- case 49:
-#line 456 "nlmheader.y"
- {
- if (symbol_prefix != NULL)
- free (symbol_prefix);
- symbol_prefix = (yyvsp[-1].string);
- }
- break;
-
- case 50:
-#line 467 "nlmheader.y"
- {
- if (symbol_prefix == NULL)
- (yyval.string) = (yyvsp[0].string);
- else
- {
- (yyval.string) = xmalloc (strlen (symbol_prefix) + strlen ((yyvsp[0].string)) + 2);
- sprintf ((yyval.string), "%s@%s", symbol_prefix, (yyvsp[0].string));
- free ((yyvsp[0].string));
- }
- }
- break;
-
- case 51:
-#line 483 "nlmheader.y"
- {
- (yyval.list) = NULL;
- }
- break;
-
- case 52:
-#line 487 "nlmheader.y"
- {
- (yyval.list) = string_list_cons ((yyvsp[-1].string), (yyvsp[0].list));
- }
- break;
-
-
- default: break;
- }
-
-/* Line 1126 of yacc.c. */
-#line 1797 "nlmheader.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 492 "nlmheader.y"
-
-
-/* If strerror is just a macro, we want to use the one from libiberty
- since it will handle undefined values. */
-#undef strerror
-extern char *strerror PARAMS ((int));
-
-/* The lexer is simple, too simple for flex. Keywords are only
- recognized at the start of lines. Everything else must be an
- argument. A comma is treated as whitespace. */
-
-/* The states the lexer can be in. */
-
-enum lex_state
-{
- /* At the beginning of a line. */
- BEGINNING_OF_LINE,
- /* In the middle of a line. */
- IN_LINE
-};
-
-/* We need to keep a stack of files to handle file inclusion. */
-
-struct input
-{
- /* The file to read from. */
- FILE *file;
- /* The name of the file. */
- char *name;
- /* The current line number. */
- int lineno;
- /* The current state. */
- enum lex_state state;
- /* The next file on the stack. */
- struct input *next;
-};
-
-/* The current input file. */
-
-static struct input current;
-
-/* The character which introduces comments. */
-#define COMMENT_CHAR '#'
-
-/* Start the lexer going on the main input file. */
-
-bfd_boolean
-nlmlex_file (const char *name)
-{
- current.next = NULL;
- return nlmlex_file_open (name);
-}
-
-/* Start the lexer going on a subsidiary input file. */
-
-static void
-nlmlex_file_push (const char *name)
-{
- struct input *push;
-
- push = (struct input *) xmalloc (sizeof (struct input));
- *push = current;
- if (nlmlex_file_open (name))
- current.next = push;
- else
- {
- current = *push;
- free (push);
- }
-}
-
-/* Start lexing from a file. */
-
-static bfd_boolean
-nlmlex_file_open (const char *name)
-{
- current.file = fopen (name, "r");
- if (current.file == NULL)
- {
- fprintf (stderr, "%s:%s: %s\n", program_name, name, strerror (errno));
- ++parse_errors;
- return FALSE;
- }
- current.name = xstrdup (name);
- current.lineno = 1;
- current.state = BEGINNING_OF_LINE;
- return TRUE;
-}
-
-/* Table used to turn keywords into tokens. */
-
-struct keyword_tokens_struct
-{
- const char *keyword;
- int token;
-};
-
-static struct keyword_tokens_struct keyword_tokens[] =
-{
- { "CHECK", CHECK },
- { "CODESTART", CODESTART },
- { "COPYRIGHT", COPYRIGHT },
- { "CUSTOM", CUSTOM },
- { "DATE", DATE },
- { "DEBUG", DEBUG },
- { "DESCRIPTION", DESCRIPTION },
- { "EXIT", EXIT },
- { "EXPORT", EXPORT },
- { "FLAG_ON", FLAG_ON },
- { "FLAG_OFF", FLAG_OFF },
- { "FULLMAP", FULLMAP },
- { "HELP", HELP },
- { "IMPORT", IMPORT },
- { "INPUT", INPUT },
- { "MAP", MAP },
- { "MESSAGES", MESSAGES },
- { "MODULE", MODULE },
- { "MULTIPLE", MULTIPLE },
- { "OS_DOMAIN", OS_DOMAIN },
- { "OUTPUT", OUTPUT },
- { "PSEUDOPREEMPTION", PSEUDOPREEMPTION },
- { "REENTRANT", REENTRANT },
- { "SCREENNAME", SCREENNAME },
- { "SHARELIB", SHARELIB },
- { "STACK", STACK },
- { "STACKSIZE", STACK },
- { "START", START },
- { "SYNCHRONIZE", SYNCHRONIZE },
- { "THREADNAME", THREADNAME },
- { "TYPE", TYPE },
- { "VERBOSE", VERBOSE },
- { "VERSION", VERSIONK },
- { "XDCDATA", XDCDATA }
-};
-
-#define KEYWORD_COUNT (sizeof (keyword_tokens) / sizeof (keyword_tokens[0]))
-
-/* The lexer accumulates strings in these variables. */
-static char *lex_buf;
-static int lex_size;
-static int lex_pos;
-
-/* Start accumulating strings into the buffer. */
-#define BUF_INIT() \
- ((void) (lex_buf != NULL ? lex_pos = 0 : nlmlex_buf_init ()))
-
-static int
-nlmlex_buf_init (void)
-{
- lex_size = 10;
- lex_buf = xmalloc (lex_size + 1);
- lex_pos = 0;
- return 0;
-}
-
-/* Finish a string in the buffer. */
-#define BUF_FINISH() ((void) (lex_buf[lex_pos] = '\0'))
-
-/* Accumulate a character into the buffer. */
-#define BUF_ADD(c) \
- ((void) (lex_pos < lex_size \
- ? lex_buf[lex_pos++] = (c) \
- : nlmlex_buf_add (c)))
-
-static char
-nlmlex_buf_add (int c)
-{
- if (lex_pos >= lex_size)
- {
- lex_size *= 2;
- lex_buf = xrealloc (lex_buf, lex_size + 1);
- }
-
- return lex_buf[lex_pos++] = c;
-}
-
-/* The lexer proper. This is called by the bison generated parsing
- code. */
-
-static int
-yylex (void)
-{
- int c;
-
-tail_recurse:
-
- c = getc (current.file);
-
- /* Commas are treated as whitespace characters. */
- while (ISSPACE (c) || c == ',')
- {
- current.state = IN_LINE;
- if (c == '\n')
- {
- ++current.lineno;
- current.state = BEGINNING_OF_LINE;
- }
- c = getc (current.file);
- }
-
- /* At the end of the file we either pop to the previous file or
- finish up. */
- if (c == EOF)
- {
- fclose (current.file);
- free (current.name);
- if (current.next == NULL)
- return 0;
- else
- {
- struct input *next;
-
- next = current.next;
- current = *next;
- free (next);
- goto tail_recurse;
- }
- }
-
- /* A comment character always means to drop everything until the
- next newline. */
- if (c == COMMENT_CHAR)
- {
- do
- {
- c = getc (current.file);
- }
- while (c != '\n');
- ++current.lineno;
- current.state = BEGINNING_OF_LINE;
- goto tail_recurse;
- }
-
- /* An '@' introduces an include file. */
- if (c == '@')
- {
- do
- {
- c = getc (current.file);
- if (c == '\n')
- ++current.lineno;
- }
- while (ISSPACE (c));
- BUF_INIT ();
- while (! ISSPACE (c) && c != EOF)
- {
- BUF_ADD (c);
- c = getc (current.file);
- }
- BUF_FINISH ();
-
- ungetc (c, current.file);
-
- nlmlex_file_push (lex_buf);
- goto tail_recurse;
- }
-
- /* A non-space character at the start of a line must be the start of
- a keyword. */
- if (current.state == BEGINNING_OF_LINE)
- {
- BUF_INIT ();
- while (ISALNUM (c) || c == '_')
- {
- BUF_ADD (TOUPPER (c));
- c = getc (current.file);
- }
- BUF_FINISH ();
-
- if (c != EOF && ! ISSPACE (c) && c != ',')
- {
- nlmheader_identify ();
- fprintf (stderr, _("%s:%d: illegal character in keyword: %c\n"),
- current.name, current.lineno, c);
- }
- else
- {
- unsigned int i;
-
- for (i = 0; i < KEYWORD_COUNT; i++)
- {
- if (lex_buf[0] == keyword_tokens[i].keyword[0]
- && strcmp (lex_buf, keyword_tokens[i].keyword) == 0)
- {
- /* Pushing back the final whitespace avoids worrying
- about \n here. */
- ungetc (c, current.file);
- current.state = IN_LINE;
- return keyword_tokens[i].token;
- }
- }
-
- nlmheader_identify ();
- fprintf (stderr, _("%s:%d: unrecognized keyword: %s\n"),
- current.name, current.lineno, lex_buf);
- }
-
- ++parse_errors;
- /* Treat the rest of this line as a comment. */
- ungetc (COMMENT_CHAR, current.file);
- goto tail_recurse;
- }
-
- /* Parentheses just represent themselves. */
- if (c == '(' || c == ')')
- return c;
-
- /* Handle quoted strings. */
- if (c == '"' || c == '\'')
- {
- int quote;
- int start_lineno;
-
- quote = c;
- start_lineno = current.lineno;
-
- c = getc (current.file);
- BUF_INIT ();
- while (c != quote && c != EOF)
- {
- BUF_ADD (c);
- if (c == '\n')
- ++current.lineno;
- c = getc (current.file);
- }
- BUF_FINISH ();
-
- if (c == EOF)
- {
- nlmheader_identify ();
- fprintf (stderr, _("%s:%d: end of file in quoted string\n"),
- current.name, start_lineno);
- ++parse_errors;
- }
-
- /* FIXME: Possible memory leak. */
- yylval.string = xstrdup (lex_buf);
- return QUOTED_STRING;
- }
-
- /* Gather a generic argument. */
- BUF_INIT ();
- while (! ISSPACE (c)
- && c != ','
- && c != COMMENT_CHAR
- && c != '('
- && c != ')')
- {
- BUF_ADD (c);
- c = getc (current.file);
- }
- BUF_FINISH ();
-
- ungetc (c, current.file);
-
- /* FIXME: Possible memory leak. */
- yylval.string = xstrdup (lex_buf);
- return STRING;
-}
-
-/* Get a number from a string. */
-
-static long
-nlmlex_get_number (const char *s)
-{
- long ret;
- char *send;
-
- ret = strtol (s, &send, 10);
- if (*send != '\0')
- nlmheader_warn (_("bad number"), -1);
- return ret;
-}
-
-/* Prefix the nlmconv warnings with a note as to where they come from.
- We don't use program_name on every warning, because then some
- versions of the emacs next-error function can't recognize the line
- number. */
-
-static void
-nlmheader_identify (void)
-{
- static int done;
-
- if (! done)
- {
- fprintf (stderr, _("%s: problems in NLM command language input:\n"),
- program_name);
- done = 1;
- }
-}
-
-/* Issue a warning. */
-
-static void
-nlmheader_warn (const char *s, int imax)
-{
- nlmheader_identify ();
- fprintf (stderr, "%s:%d: %s", current.name, current.lineno, s);
- if (imax != -1)
- fprintf (stderr, " (max %d)", imax);
- fprintf (stderr, "\n");
-}
-
-/* Report an error. */
-
-static void
-nlmheader_error (const char *s)
-{
- nlmheader_warn (s, -1);
- ++parse_errors;
-}
-
-/* Add a string to a string list. */
-
-static struct string_list *
-string_list_cons (char *s, struct string_list *l)
-{
- struct string_list *ret;
-
- ret = (struct string_list *) xmalloc (sizeof (struct string_list));
- ret->next = l;
- ret->string = s;
- return ret;
-}
-
-/* Append a string list to another string list. */
-
-static struct string_list *
-string_list_append (struct string_list *l1, struct string_list *l2)
-{
- register struct string_list **pp;
-
- for (pp = &l1; *pp != NULL; pp = &(*pp)->next)
- ;
- *pp = l2;
- return l1;
-}
-
-/* Append a string to a string list. */
-
-static struct string_list *
-string_list_append1 (struct string_list *l, char *s)
-{
- struct string_list *n;
- register struct string_list **pp;
-
- n = (struct string_list *) xmalloc (sizeof (struct string_list));
- n->next = NULL;
- n->string = s;
- for (pp = &l; *pp != NULL; pp = &(*pp)->next)
- ;
- *pp = n;
- return l;
-}
-
-/* Duplicate a string in memory. */
-
-static char *
-xstrdup (const char *s)
-{
- unsigned long len;
- char *ret;
-
- len = strlen (s);
- ret = xmalloc (len + 1);
- strcpy (ret, s);
- return ret;
-}
-
diff --git a/binutils/nlmheader.h b/binutils/nlmheader.h
deleted file mode 100644
index 42ca39afc10c..000000000000
--- a/binutils/nlmheader.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* 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 {
- CHECK = 258,
- CODESTART = 259,
- COPYRIGHT = 260,
- CUSTOM = 261,
- DATE = 262,
- DEBUG = 263,
- DESCRIPTION = 264,
- EXIT = 265,
- EXPORT = 266,
- FLAG_ON = 267,
- FLAG_OFF = 268,
- FULLMAP = 269,
- HELP = 270,
- IMPORT = 271,
- INPUT = 272,
- MAP = 273,
- MESSAGES = 274,
- MODULE = 275,
- MULTIPLE = 276,
- OS_DOMAIN = 277,
- OUTPUT = 278,
- PSEUDOPREEMPTION = 279,
- REENTRANT = 280,
- SCREENNAME = 281,
- SHARELIB = 282,
- STACK = 283,
- START = 284,
- SYNCHRONIZE = 285,
- THREADNAME = 286,
- TYPE = 287,
- VERBOSE = 288,
- VERSIONK = 289,
- XDCDATA = 290,
- STRING = 291,
- QUOTED_STRING = 292
- };
-#endif
-/* Tokens. */
-#define CHECK 258
-#define CODESTART 259
-#define COPYRIGHT 260
-#define CUSTOM 261
-#define DATE 262
-#define DEBUG 263
-#define DESCRIPTION 264
-#define EXIT 265
-#define EXPORT 266
-#define FLAG_ON 267
-#define FLAG_OFF 268
-#define FULLMAP 269
-#define HELP 270
-#define IMPORT 271
-#define INPUT 272
-#define MAP 273
-#define MESSAGES 274
-#define MODULE 275
-#define MULTIPLE 276
-#define OS_DOMAIN 277
-#define OUTPUT 278
-#define PSEUDOPREEMPTION 279
-#define REENTRANT 280
-#define SCREENNAME 281
-#define SHARELIB 282
-#define STACK 283
-#define START 284
-#define SYNCHRONIZE 285
-#define THREADNAME 286
-#define TYPE 287
-#define VERBOSE 288
-#define VERSIONK 289
-#define XDCDATA 290
-#define STRING 291
-#define QUOTED_STRING 292
-
-
-
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 113 "nlmheader.y"
-typedef union YYSTYPE {
- char *string;
- struct string_list *list;
-} YYSTYPE;
-/* Line 1447 of yacc.c. */
-#line 117 "nlmheader.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/nlmheader.y b/binutils/nlmheader.y
index b79d63ad91e1..192aafa3fb90 100644
--- a/binutils/nlmheader.y
+++ b/binutils/nlmheader.y
@@ -1,5 +1,5 @@
%{/* nlmheader.y - parse NLM header specification keywords.
- Copyright 1993, 1994, 1995, 1997, 1998, 2001, 2002, 2003
+ Copyright 1993, 1994, 1995, 1997, 1998, 2001, 2002, 2003, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -27,13 +27,12 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
This implementation is based on the description in the NetWare Tool
Maker Specification manual, edition 1.0. */
-#include "ansidecl.h"
-#include <stdio.h>
+#include "sysdep.h"
#include "safe-ctype.h"
#include "bfd.h"
-#include "bucomm.h"
#include "nlm/common.h"
#include "nlm/internal.h"
+#include "bucomm.h"
#include "nlmconv.h"
/* Information is stored in the structures pointed to by these
diff --git a/binutils/nm.c b/binutils/nm.c
index c1fb4d803e84..62328a4d54e9 100644
--- a/binutils/nm.c
+++ b/binutils/nm.c
@@ -1,6 +1,6 @@
/* nm.c -- Describe symbol table of a rel file.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005
+ 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -20,10 +20,9 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
+#include "sysdep.h"
#include "bfd.h"
#include "progress.h"
-#include "bucomm.h"
-#include "budemang.h"
#include "getopt.h"
#include "aout/stab_gnu.h"
#include "aout/ranlib.h"
@@ -31,6 +30,7 @@
#include "libiberty.h"
#include "elf-bfd.h"
#include "elf/common.h"
+#include "bucomm.h"
/* When sorting by size, we use this structure to hold the size and a
pointer to the minisymbol. */
@@ -159,20 +159,9 @@ static int filename_per_file = 0; /* Once per file, on its own line. */
static int filename_per_symbol = 0; /* Once per symbol, at start of line. */
/* Print formats for printing a symbol value. */
-#ifndef BFD64
-static char value_format[] = "%08lx";
-#else
-#if BFD_HOST_64BIT_LONG
-static char value_format[] = "%016lx";
-#else
-/* We don't use value_format for this case. */
-#endif
-#endif
-#ifdef BFD64
-static int print_width = 16;
-#else
-static int print_width = 8;
-#endif
+static char value_format_32bit[] = "%08lx";
+static char value_format_64bit[] = "%016lx";
+static int print_width = 0;
static int print_radix = 16;
/* Print formats for printing stab info. */
static char other_format[] = "%02x";
@@ -259,7 +248,7 @@ usage (FILE *stream, int status)
-V, --version Display this program's version number\n\
\n"));
list_supported_targets (program_name, stream);
- if (status == 0)
+ if (REPORT_BUGS_TO[0] && status == 0)
fprintf (stream, _("Report bugs to %s.\n"), REPORT_BUGS_TO);
exit (status);
}
@@ -279,16 +268,8 @@ set_print_radix (char *radix)
print_radix = 10;
else
print_radix = 8;
-#ifndef BFD64
- value_format[4] = *radix;
-#else
-#if BFD_HOST_64BIT_LONG
- value_format[5] = *radix;
-#else
- /* This case requires special handling for octal and decimal
- printing. */
-#endif
-#endif
+ value_format_32bit[4] = *radix;
+ value_format_64bit[5] = *radix;
other_format[3] = desc_format[3] = *radix;
break;
default:
@@ -354,11 +335,14 @@ print_symname (const char *format, const char *name, bfd *abfd)
{
if (do_demangle && *name)
{
- char *res = demangle (abfd, name);
+ char *res = bfd_demangle (abfd, name, DMGL_ANSI | DMGL_PARAMS);
- printf (format, res);
- free (res);
- return;
+ if (res != NULL)
+ {
+ printf (format, res);
+ free (res);
+ return;
+ }
}
printf (format, name);
@@ -1094,6 +1078,26 @@ display_rel_file (bfd *abfd, bfd *archive_bfd)
}
static void
+set_print_width (bfd *file)
+{
+ print_width = bfd_get_arch_size (file);
+
+ if (print_width == -1)
+ {
+ /* PR binutils/4292
+ Guess the target's bitsize based on its name.
+ We assume here than any 64-bit format will include
+ "64" somewhere in its name. The only known exception
+ is the MMO object file format. */
+ if (strstr (bfd_get_target (file), "64") != NULL
+ || strcmp (bfd_get_target (file), "mmo") == 0)
+ print_width = 64;
+ else
+ print_width = 32;
+ }
+}
+
+static void
display_archive (bfd *file)
{
bfd *arfile = NULL;
@@ -1120,10 +1124,7 @@ display_archive (bfd *file)
if (bfd_check_format_matches (arfile, bfd_object, &matching))
{
- char buf[30];
-
- bfd_sprintf_vma (arfile, buf, (bfd_vma) -1);
- print_width = strlen (buf);
+ set_print_width (arfile);
format->print_archive_member (bfd_get_filename (file),
bfd_get_filename (arfile));
display_rel_file (arfile, file);
@@ -1178,10 +1179,7 @@ display_file (char *filename)
}
else if (bfd_check_format_matches (file, bfd_object, &matching))
{
- char buf[30];
-
- bfd_sprintf_vma (file, buf, (bfd_vma) -1);
- print_width = strlen (buf);
+ set_print_width (file);
format->print_object_filename (filename);
display_rel_file (file, NULL);
}
@@ -1227,7 +1225,7 @@ print_object_filename_sysv (char *filename)
printf (_("\n\nUndefined symbols from %s:\n\n"), filename);
else
printf (_("\n\nSymbols from %s:\n\n"), filename);
- if (print_width == 8)
+ if (print_width == 32)
printf (_("\
Name Value Class Type Size Line Section\n\n"));
else
@@ -1278,7 +1276,7 @@ print_archive_member_sysv (char *archive, const char *filename)
printf (_("\n\nUndefined symbols from %s[%s]:\n\n"), archive, filename);
else
printf (_("\n\nSymbols from %s[%s]:\n\n"), archive, filename);
- if (print_width == 8)
+ if (print_width == 32)
printf (_("\
Name Value Class Type Size Line Section\n\n"));
else
@@ -1336,29 +1334,42 @@ print_symbol_filename_posix (bfd *archive_bfd, bfd *abfd)
static void
print_value (bfd *abfd ATTRIBUTE_UNUSED, bfd_vma val)
{
-#if ! defined (BFD64) || BFD_HOST_64BIT_LONG
- printf (value_format, val);
-#else
- /* We have a 64 bit value to print, but the host is only 32 bit. */
- if (print_radix == 16)
- bfd_fprintf_vma (abfd, stdout, val);
- else
+ switch (print_width)
{
- char buf[30];
- char *s;
+ case 32:
+ printf (value_format_32bit, (unsigned long) val);
+ break;
- s = buf + sizeof buf;
- *--s = '\0';
- while (val > 0)
+ case 64:
+#if BFD_HOST_64BIT_LONG
+ printf (value_format_64bit, val);
+#else
+ /* We have a 64 bit value to print, but the host is only 32 bit. */
+ if (print_radix == 16)
+ bfd_fprintf_vma (abfd, stdout, val);
+ else
{
- *--s = (val % print_radix) + '0';
- val /= print_radix;
+ char buf[30];
+ char *s;
+
+ s = buf + sizeof buf;
+ *--s = '\0';
+ while (val > 0)
+ {
+ *--s = (val % print_radix) + '0';
+ val /= print_radix;
+ }
+ while ((buf + sizeof buf - 1) - s < 16)
+ *--s = '0';
+ printf ("%s", s);
}
- while ((buf + sizeof buf - 1) - s < 16)
- *--s = '0';
- printf ("%s", s);
- }
#endif
+ break;
+
+ default:
+ fatal (_("Print width has not been initialized (%d)"), print_width);
+ break;
+ }
}
/* Print a line of information about a symbol. */
@@ -1368,7 +1379,7 @@ print_symbol_info_bsd (struct extended_symbol_info *info, bfd *abfd)
{
if (bfd_is_undefined_symclass (SYM_TYPE (info)))
{
- if (print_width == 16)
+ if (print_width == 64)
printf (" ");
printf (" ");
}
@@ -1411,7 +1422,7 @@ print_symbol_info_sysv (struct extended_symbol_info *info, bfd *abfd)
if (bfd_is_undefined_symclass (SYM_TYPE (info)))
{
- if (print_width == 8)
+ if (print_width == 32)
printf (" ");
else
printf (" ");
@@ -1441,7 +1452,7 @@ print_symbol_info_sysv (struct extended_symbol_info *info, bfd *abfd)
print_value (abfd, SYM_SIZE (info));
else
{
- if (print_width == 8)
+ if (print_width == 32)
printf (" ");
else
printf (" ");
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index 0e0cfaaccf5e..06e2946ce349 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -1,6 +1,6 @@
/* objcopy.c -- copy object file from input to output, optionally massaging it.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -20,11 +20,12 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
+#include "sysdep.h"
#include "bfd.h"
#include "progress.h"
-#include "bucomm.h"
#include "getopt.h"
#include "libiberty.h"
+#include "bucomm.h"
#include "budbg.h"
#include "filenames.h"
#include "fnmatch.h"
@@ -190,6 +191,9 @@ static bfd_boolean remove_leading_char = FALSE;
/* Whether to permit wildcard in symbol comparison. */
static bfd_boolean wildcard = FALSE;
+/* True if --localize-hidden is in effect. */
+static bfd_boolean localize_hidden = FALSE;
+
/* List of symbols to strip, keep, localize, keep-global, weaken,
or redefine. */
static struct symlist *strip_specific_list = NULL;
@@ -212,6 +216,14 @@ static char *prefix_symbols_string = 0;
static char *prefix_sections_string = 0;
static char *prefix_alloc_sections_string = 0;
+/* True if --extract-symbol was passed on the command line. */
+static bfd_boolean extract_symbol = FALSE;
+
+/* If `reverse_bytes' is nonzero, then reverse the order of every chunk
+ of <reverse_bytes> bytes within each output section. */
+static int reverse_bytes = 0;
+
+
/* 150 isn't special; it's just an arbitrary non-ASCII char value. */
enum command_line_switch
{
@@ -240,6 +252,7 @@ enum command_line_switch
OPTION_STRIP_UNNEEDED_SYMBOL,
OPTION_STRIP_UNNEEDED_SYMBOLS,
OPTION_KEEP_SYMBOLS,
+ OPTION_LOCALIZE_HIDDEN,
OPTION_LOCALIZE_SYMBOLS,
OPTION_GLOBALIZE_SYMBOL,
OPTION_GLOBALIZE_SYMBOLS,
@@ -257,7 +270,9 @@ enum command_line_switch
OPTION_READONLY_TEXT,
OPTION_WRITABLE_TEXT,
OPTION_PURE,
- OPTION_IMPURE
+ OPTION_IMPURE,
+ OPTION_EXTRACT_SYMBOL,
+ OPTION_REVERSE_BYTES
};
/* Options to handle if running as "strip". */
@@ -313,6 +328,7 @@ static struct option copy_options[] =
{"debugging", no_argument, 0, OPTION_DEBUGGING},
{"discard-all", no_argument, 0, 'x'},
{"discard-locals", no_argument, 0, 'X'},
+ {"extract-symbol", no_argument, 0, OPTION_EXTRACT_SYMBOL},
{"format", required_argument, 0, 'F'}, /* Obsolete */
{"gap-fill", required_argument, 0, OPTION_GAP_FILL},
{"globalize-symbol", required_argument, 0, OPTION_GLOBALIZE_SYMBOL},
@@ -328,6 +344,7 @@ static struct option copy_options[] =
{"keep-global-symbols", required_argument, 0, OPTION_KEEPGLOBAL_SYMBOLS},
{"keep-symbol", required_argument, 0, 'K'},
{"keep-symbols", required_argument, 0, OPTION_KEEP_SYMBOLS},
+ {"localize-hidden", no_argument, 0, OPTION_LOCALIZE_HIDDEN},
{"localize-symbol", required_argument, 0, 'L'},
{"localize-symbols", required_argument, 0, OPTION_LOCALIZE_SYMBOLS},
{"no-adjust-warnings", no_argument, 0, OPTION_NO_CHANGE_WARNINGS},
@@ -348,6 +365,7 @@ static struct option copy_options[] =
{"remove-leading-char", no_argument, 0, OPTION_REMOVE_LEADING_CHAR},
{"remove-section", required_argument, 0, 'R'},
{"rename-section", required_argument, 0, OPTION_RENAME_SECTION},
+ {"reverse-bytes", required_argument, 0, OPTION_REVERSE_BYTES},
{"set-section-flags", required_argument, 0, OPTION_SET_SECTION_FLAGS},
{"set-start", required_argument, 0, OPTION_SET_START},
{"srec-len", required_argument, 0, OPTION_SREC_LEN},
@@ -426,8 +444,10 @@ copy_usage (FILE *stream, int exit_status)
Do not copy symbol <name> unless needed by\n\
relocations\n\
--only-keep-debug Strip everything but the debug information\n\
+ --extract-symbol Remove section contents but keep symbols\n\
-K --keep-symbol <name> Do not strip symbol <name>\n\
--keep-file-symbols Do not strip file symbol(s)\n\
+ --localize-hidden Turn all ELF hidden symbols into locals\n\
-L --localize-symbol <name> Force symbol <name> to be marked as a local\n\
--globalize-symbol <name> Force symbol <name> to be marked as a global\n\
-G --keep-global-symbol <name> Localize all symbols except <name>\n\
@@ -459,6 +479,7 @@ copy_usage (FILE *stream, int exit_status)
--rename-section <old>=<new>[,<flags>] Rename section <old> to <new>\n\
--change-leading-char Force output format's leading character style\n\
--remove-leading-char Remove leading character from global symbols\n\
+ --reverse-bytes=<num> Reverse <num> bytes at a time, in output sections with content\n\
--redefine-sym <old>=<new> Redefine symbol name <old> to <new>\n\
--redefine-syms <file> --redefine-sym for all symbol pairs \n\
listed in <file>\n\
@@ -490,7 +511,7 @@ copy_usage (FILE *stream, int exit_status)
--info List object formats & architectures supported\n\
"));
list_supported_targets (program_name, stream);
- if (exit_status == 0)
+ if (REPORT_BUGS_TO[0] && exit_status == 0)
fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
exit (exit_status);
}
@@ -525,7 +546,7 @@ strip_usage (FILE *stream, int exit_status)
"));
list_supported_targets (program_name, stream);
- if (exit_status == 0)
+ if (REPORT_BUGS_TO[0] && exit_status == 0)
fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
exit (exit_status);
}
@@ -647,7 +668,10 @@ add_specific_symbols (const char *filename, struct symlist **list)
size = get_file_size (filename);
if (size == 0)
- return;
+ {
+ status = 1;
+ return;
+ }
buffer = xmalloc (size + 2);
f = fopen (filename, FOPEN_RT);
@@ -776,6 +800,30 @@ is_specified_symbol (const char *name, struct symlist *list)
return FALSE;
}
+/* Return a pointer to the symbol used as a signature for GROUP. */
+
+static asymbol *
+group_signature (asection *group)
+{
+ bfd *abfd = group->owner;
+ Elf_Internal_Shdr *ghdr;
+
+ if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
+ return NULL;
+
+ ghdr = &elf_section_data (group)->this_hdr;
+ if (ghdr->sh_link < elf_numsections (abfd))
+ {
+ const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+ Elf_Internal_Shdr *symhdr = elf_elfsections (abfd) [ghdr->sh_link];
+
+ if (symhdr->sh_type == SHT_SYMTAB
+ && ghdr->sh_info < symhdr->sh_size / bed->s->sizeof_sym)
+ return isympp[ghdr->sh_info - 1];
+ }
+ return NULL;
+}
+
/* See if a section is being removed. */
static bfd_boolean
@@ -806,6 +854,49 @@ is_strip_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
return FALSE;
}
+ if ((bfd_get_section_flags (abfd, sec) & SEC_GROUP) != 0)
+ {
+ asymbol *gsym;
+ const char *gname;
+
+ /* PR binutils/3166
+ Group sections look like debugging sections but they are not.
+ (They have a non-zero size but they are not ALLOCated). */
+ if (strip_symbols == STRIP_NONDEBUG)
+ return TRUE;
+
+ /* PR binutils/3181
+ If we are going to strip the group signature symbol, then
+ strip the group section too. */
+ gsym = group_signature (sec);
+ if (gsym != NULL)
+ gname = gsym->name;
+ else
+ gname = sec->name;
+ if ((strip_symbols == STRIP_ALL
+ && !is_specified_symbol (gname, keep_specific_list))
+ || is_specified_symbol (gname, strip_specific_list))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/* Return true if SYM is a hidden symbol. */
+
+static bfd_boolean
+is_hidden_symbol (asymbol *sym)
+{
+ elf_symbol_type *elf_sym;
+
+ elf_sym = elf_symbol_from (sym->the_bfd, sym);
+ if (elf_sym != NULL)
+ switch (ELF_ST_VISIBILITY (elf_sym->internal_elf_sym.st_other))
+ {
+ case STV_HIDDEN:
+ case STV_INTERNAL:
+ return TRUE;
+ }
return FALSE;
}
@@ -819,15 +910,15 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms,
{
asymbol **from = isyms, **to = osyms;
long src_count = 0, dst_count = 0;
- int relocatable = (abfd->flags & (HAS_RELOC | EXEC_P | DYNAMIC))
- == HAS_RELOC;
+ int relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
for (; src_count < symcount; src_count++)
{
asymbol *sym = from[src_count];
flagword flags = sym->flags;
char *name = (char *) bfd_asymbol_name (sym);
- int keep;
+ bfd_boolean keep;
+ bfd_boolean used_in_reloc = FALSE;
bfd_boolean undefined;
bfd_boolean rem_leading_char;
bfd_boolean add_leading_char;
@@ -895,21 +986,24 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms,
}
if (strip_symbols == STRIP_ALL)
- keep = 0;
+ keep = FALSE;
else if ((flags & BSF_KEEP) != 0 /* Used in relocation. */
|| ((flags & BSF_SECTION_SYM) != 0
&& ((*bfd_get_section (sym)->symbol_ptr_ptr)->flags
& BSF_KEEP) != 0))
- keep = 1;
+ {
+ keep = TRUE;
+ used_in_reloc = TRUE;
+ }
else if (relocatable /* Relocatable file. */
&& (flags & (BSF_GLOBAL | BSF_WEAK)) != 0)
- keep = 1;
+ keep = TRUE;
else if (bfd_decode_symclass (sym) == 'I')
/* Global symbols in $idata sections need to be retained
even if relocatable is FALSE. External users of the
library containing the $idata section may reference these
symbols. */
- keep = 1;
+ keep = TRUE;
else if ((flags & BSF_GLOBAL) != 0 /* Global symbol. */
|| (flags & BSF_WEAK) != 0
|| undefined
@@ -922,7 +1016,7 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms,
else if (bfd_coff_get_comdat_section (abfd, bfd_get_section (sym)))
/* COMDAT sections store special information in local
symbols, so we cannot risk stripping any of them. */
- keep = 1;
+ keep = TRUE;
else /* Local symbol. */
keep = (strip_symbols != STRIP_UNNEEDED
&& (discard_locals != LOCALS_ALL
@@ -930,17 +1024,30 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms,
|| ! bfd_is_local_label (abfd, sym))));
if (keep && is_specified_symbol (name, strip_specific_list))
- keep = 0;
+ {
+ /* There are multiple ways to set 'keep' above, but if it
+ was the relocatable symbol case, then that's an error. */
+ if (used_in_reloc)
+ {
+ non_fatal (_("not stripping symbol `%s' because it is named in a relocation"), name);
+ status = 1;
+ }
+ else
+ keep = FALSE;
+ }
+
if (keep
&& !(flags & BSF_KEEP)
&& is_specified_symbol (name, strip_unneeded_list))
- keep = 0;
+ keep = FALSE;
+
if (!keep
&& ((keep_file_symbols && (flags & BSF_FILE))
|| is_specified_symbol (name, keep_specific_list)))
- keep = 1;
+ keep = TRUE;
+
if (keep && is_strip_section (abfd, bfd_get_section (sym)))
- keep = 0;
+ keep = FALSE;
if (keep)
{
@@ -955,14 +1062,15 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms,
&& (flags & (BSF_GLOBAL | BSF_WEAK))
&& (is_specified_symbol (name, localize_specific_list)
|| (keepglobal_specific_list != NULL
- && ! is_specified_symbol (name, keepglobal_specific_list))))
+ && ! is_specified_symbol (name, keepglobal_specific_list))
+ || (localize_hidden && is_hidden_symbol (sym))))
{
sym->flags &= ~ (BSF_GLOBAL | BSF_WEAK);
sym->flags |= BSF_LOCAL;
}
if (!undefined
- && (flags & BSF_LOCAL)
+ && (flags & BSF_LOCAL)
&& is_specified_symbol (name, globalize_specific_list))
{
sym->flags &= ~ BSF_LOCAL;
@@ -1105,7 +1213,7 @@ add_redefine_syms_file (const char *filename)
if (buf[0] != '\0')
redefine_list_append (filename, &buf[0], &buf[outsym_off]);
- lineno++;
+ lineno++;
len = 0;
outsym_off = 0;
if (c == EOF)
@@ -1233,11 +1341,16 @@ copy_object (bfd *ibfd, bfd *obfd)
bfd_get_archive_filename (ibfd), bfd_get_target (ibfd),
bfd_get_filename (obfd), bfd_get_target (obfd));
- if (set_start_set)
- start = set_start;
+ if (extract_symbol)
+ start = 0;
else
- start = bfd_get_start_address (ibfd);
- start += change_start;
+ {
+ if (set_start_set)
+ start = set_start;
+ else
+ start = bfd_get_start_address (ibfd);
+ start += change_start;
+ }
/* Neither the start address nor the flags
need to be set for a core file. */
@@ -1290,6 +1403,21 @@ copy_object (bfd *ibfd, bfd *obfd)
isympp = NULL;
osympp = NULL;
+ symsize = bfd_get_symtab_upper_bound (ibfd);
+ if (symsize < 0)
+ {
+ bfd_nonfatal (bfd_get_archive_filename (ibfd));
+ return FALSE;
+ }
+
+ osympp = isympp = xmalloc (symsize);
+ symcount = bfd_canonicalize_symtab (ibfd, isympp);
+ if (symcount < 0)
+ {
+ bfd_nonfatal (bfd_get_filename (ibfd));
+ return FALSE;
+ }
+
/* BFD mandates that all output sections be created and sizes set before
any output is done. Thus, we traverse all sections multiple times. */
bfd_map_over_sections (ibfd, setup_section, obfd);
@@ -1418,13 +1546,8 @@ copy_object (bfd *ibfd, bfd *obfd)
}
}
- if (bfd_count_sections (obfd) == 0)
- {
- non_fatal (_("there are no sections to be copied!"));
- return FALSE;
- }
-
- if (gap_fill_set || pad_to_set)
+ if (bfd_count_sections (obfd) != 0
+ && (gap_fill_set || pad_to_set))
{
asection **set;
unsigned int c, i;
@@ -1509,21 +1632,6 @@ copy_object (bfd *ibfd, bfd *obfd)
/* Symbol filtering must happen after the output sections
have been created, but before their contents are set. */
dhandle = NULL;
- symsize = bfd_get_symtab_upper_bound (ibfd);
- if (symsize < 0)
- {
- bfd_nonfatal (bfd_get_archive_filename (ibfd));
- return FALSE;
- }
-
- osympp = isympp = xmalloc (symsize);
- symcount = bfd_canonicalize_symtab (ibfd, isympp);
- if (symcount < 0)
- {
- bfd_nonfatal (bfd_get_filename (ibfd));
- return FALSE;
- }
-
if (convert_debugging)
dhandle = read_debugging_info (ibfd, isympp, symcount);
@@ -1532,6 +1640,7 @@ copy_object (bfd *ibfd, bfd *obfd)
|| strip_symbols == STRIP_UNNEEDED
|| strip_symbols == STRIP_NONDEBUG
|| discard_locals != LOCALS_UNDEF
+ || localize_hidden
|| strip_specific_list != NULL
|| keep_specific_list != NULL
|| localize_specific_list != NULL
@@ -1647,16 +1756,16 @@ copy_object (bfd *ibfd, bfd *obfd)
}
}
+ /* Do not copy backend data if --extract-symbol is passed; anything
+ that needs to look at the section contents will fail. */
+ if (extract_symbol)
+ return TRUE;
+
/* Allow the BFD backend to copy any private data it understands
from the input BFD to the output BFD. This is done last to
permit the routine to look at the filtered symbol table, which is
important for the ECOFF code at least. */
- if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
- && strip_symbols == STRIP_NONDEBUG)
- /* Do not copy the private data when creating an ELF format
- debug info file. We do not want the program headers. */
- ;
- else if (! bfd_copy_private_bfd_data (ibfd, obfd))
+ if (! bfd_copy_private_bfd_data (ibfd, obfd))
{
non_fatal (_("%s: error copying private BFD data: %s"),
bfd_get_filename (obfd),
@@ -1686,18 +1795,15 @@ copy_object (bfd *ibfd, bfd *obfd)
return TRUE;
}
-#undef MKDIR
-#if defined (_WIN32) && !defined (__CYGWIN32__)
-#define MKDIR(DIR, MODE) mkdir (DIR)
-#else
-#define MKDIR(DIR, MODE) mkdir (DIR, MODE)
-#endif
-
/* Read each archive element in turn from IBFD, copy the
- contents to temp file, and keep the temp file handle. */
+ contents to temp file, and keep the temp file handle.
+ If 'force_output_target' is TRUE then make sure that
+ all elements in the new archive are of the type
+ 'output_target'. */
static void
-copy_archive (bfd *ibfd, bfd *obfd, const char *output_target)
+copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
+ bfd_boolean force_output_target)
{
struct name_list
{
@@ -1707,12 +1813,13 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target)
} *list, *l;
bfd **ptr = &obfd->archive_head;
bfd *this_element;
- char *dir = make_tempname (bfd_get_filename (obfd));
+ char * dir;
/* Make a temp directory to hold the contents. */
- if (MKDIR (dir, 0700) != 0)
- fatal (_("cannot mkdir %s for archive copying (error: %s)"),
- dir, strerror (errno));
+ dir = make_tempdir (bfd_get_filename (obfd));
+ if (dir == NULL)
+ fatal (_("cannot create tempdir for archive copying (error: %s)"),
+ strerror (errno));
obfd->has_armap = ibfd->has_armap;
@@ -1739,10 +1846,10 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target)
/* If the file already exists, make another temp dir. */
if (stat (output_name, &buf) >= 0)
{
- output_name = make_tempname (output_name);
- if (MKDIR (output_name, 0700) != 0)
- fatal (_("cannot mkdir %s for archive copying (error: %s)"),
- output_name, strerror (errno));
+ output_name = make_tempdir (output_name);
+ if (output_name == NULL)
+ fatal (_("cannot create tempdir for archive copying (error: %s)"),
+ strerror (errno));
l = xmalloc (sizeof (struct name_list));
l->name = output_name;
@@ -1753,7 +1860,6 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target)
bfd_get_filename (this_element), (char *) 0);
}
- output_bfd = bfd_openw (output_name, output_target);
if (preserve_dates)
{
stat_status = bfd_stat_arch_elt (this_element, &buf);
@@ -1769,11 +1875,18 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target)
l->obfd = NULL;
list = l;
- if (output_bfd == NULL)
- RETURN_NONFATAL (output_name);
-
if (bfd_check_format (this_element, bfd_object))
{
+ /* PR binutils/3110: Cope with archives
+ containing multiple target types. */
+ if (force_output_target)
+ output_bfd = bfd_openw (output_name, output_target);
+ else
+ output_bfd = bfd_openw (output_name, bfd_get_target (this_element));
+
+ if (output_bfd == NULL)
+ RETURN_NONFATAL (output_name);
+
delete = ! copy_object (this_element, output_bfd);
if (! delete
@@ -1794,6 +1907,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target)
non_fatal (_("Unable to recognise the format of the input file `%s'"),
bfd_get_archive_filename (this_element));
+ output_bfd = bfd_openw (output_name, output_target);
copy_unknown_element:
delete = !copy_unknown_object (this_element, output_bfd);
if (!bfd_close_all_done (output_bfd))
@@ -1820,7 +1934,7 @@ copy_unknown_element:
l->obfd = output_bfd;
*ptr = output_bfd;
- ptr = &output_bfd->next;
+ ptr = &output_bfd->archive_next;
last_element = this_element;
@@ -1863,7 +1977,6 @@ copy_file (const char *input_filename, const char *output_filename,
if (get_file_size (input_filename) < 1)
{
- non_fatal (_("error: the input file '%s' is empty"), input_filename);
status = 1;
return;
}
@@ -1876,18 +1989,24 @@ copy_file (const char *input_filename, const char *output_filename,
if (bfd_check_format (ibfd, bfd_archive))
{
+ bfd_boolean force_output_target;
bfd *obfd;
/* bfd_get_target does not return the correct value until
bfd_check_format succeeds. */
if (output_target == NULL)
- output_target = bfd_get_target (ibfd);
+ {
+ output_target = bfd_get_target (ibfd);
+ force_output_target = FALSE;
+ }
+ else
+ force_output_target = TRUE;
obfd = bfd_openw (output_filename, output_target);
if (obfd == NULL)
RETURN_NONFATAL (output_filename);
- copy_archive (ibfd, obfd, output_target);
+ copy_archive (ibfd, obfd, output_target, force_output_target);
}
else if (bfd_check_format_matches (ibfd, bfd_object, &obj_matching))
{
@@ -2076,7 +2195,9 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
if (p != NULL && p->set_flags)
flags = p->flags | (flags & (SEC_HAS_CONTENTS | SEC_RELOC));
- else if (strip_symbols == STRIP_NONDEBUG && (flags & SEC_ALLOC) != 0)
+ else if (strip_symbols == STRIP_NONDEBUG
+ && obfd->xvec->flavour != bfd_target_elf_flavour
+ && (flags & SEC_ALLOC) != 0)
flags &= ~(SEC_HAS_CONTENTS | SEC_LOAD);
osection = bfd_make_section_anyway_with_flags (obfd, name, flags);
@@ -2090,12 +2211,17 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
if (strip_symbols == STRIP_NONDEBUG
&& obfd->xvec->flavour == bfd_target_elf_flavour
&& (flags & SEC_ALLOC) != 0
+ && elf_section_type (osection) != SHT_NOTE
+ && (ibfd->xvec->flavour != bfd_target_elf_flavour
+ || elf_section_type (isection) != SHT_NOTE)
&& (p == NULL || !p->set_flags))
elf_section_type (osection) = SHT_NOBITS;
size = bfd_section_size (ibfd, isection);
if (copy_byte >= 0)
size = (size + interleave - 1) / interleave;
+ else if (extract_symbol)
+ size = 0;
if (! bfd_set_section_size (obfd, osection, size))
{
err = _("size");
@@ -2110,7 +2236,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
else
vma += change_section_address;
- if (! bfd_set_section_vma (obfd, osection, vma))
+ if (! bfd_set_section_vma (obfd, osection, extract_symbol ? 0 : vma))
{
err = _("vma");
goto loser;
@@ -2129,7 +2255,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
else
lma += change_section_address;
- osection->lma = lma;
+ osection->lma = extract_symbol ? 0 : lma;
/* FIXME: This is probably not enough. If we change the LMA we
may have to recompute the header for the file as well. */
@@ -2148,20 +2274,27 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
bfd_get_section_by_name since some formats allow multiple
sections with the same name. */
isection->output_section = osection;
- isection->output_offset = 0;
+ isection->output_offset = extract_symbol ? vma : 0;
+
+ /* Do not copy backend data if --extract-symbol is passed; anything
+ that needs to look at the section contents will fail. */
+ if (extract_symbol)
+ return;
/* Allow the BFD backend to copy any private data it understands
from the input section to the output section. */
- if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
- && strip_symbols == STRIP_NONDEBUG)
- /* Do not copy the private data when creating an ELF format
- debug info file. We do not want the program headers. */
- ;
- else if (!bfd_copy_private_section_data (ibfd, isection, obfd, osection))
+ if (!bfd_copy_private_section_data (ibfd, isection, obfd, osection))
{
err = _("private data");
goto loser;
}
+ else if ((isection->flags & SEC_GROUP) != 0)
+ {
+ asymbol *gsym = group_signature (isection);
+
+ if (gsym != NULL)
+ gsym->flags |= BSF_KEEP;
+ }
/* All went well. */
return;
@@ -2259,6 +2392,9 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
free (relpp);
}
+ if (extract_symbol)
+ return;
+
if (bfd_get_section_flags (ibfd, isection) & SEC_HAS_CONTENTS
&& bfd_get_section_flags (obfd, osection) & SEC_HAS_CONTENTS)
{
@@ -2267,6 +2403,32 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
if (!bfd_get_section_contents (ibfd, isection, memhunk, 0, size))
RETURN_NONFATAL (bfd_get_filename (ibfd));
+ if (reverse_bytes)
+ {
+ /* We don't handle leftover bytes (too many possible behaviors,
+ and we don't know what the user wants). The section length
+ must be a multiple of the number of bytes to swap. */
+ if ((size % reverse_bytes) == 0)
+ {
+ unsigned long i, j;
+ bfd_byte b;
+
+ for (i = 0; i < size; i += reverse_bytes)
+ for (j = 0; j < (unsigned long)(reverse_bytes / 2); j++)
+ {
+ bfd_byte *m = (bfd_byte *) memhunk;
+
+ b = m[i + j];
+ m[i + j] = m[(i + reverse_bytes) - (j + 1)];
+ m[(i + reverse_bytes) - (j + 1)] = b;
+ }
+ }
+ else
+ /* User must pad the section up in order to do this. */
+ fatal (_("cannot reverse bytes: length of section %s must be evenly divisible by %d"),
+ bfd_section_name (ibfd, isection), reverse_bytes);
+ }
+
if (copy_byte >= 0)
{
/* Keep only every `copy_byte'th byte in MEMHUNK. */
@@ -2561,7 +2723,7 @@ strip_main (int argc, char *argv[])
display_info ();
return 0;
}
-
+
if (show_version)
print_version ("strip");
@@ -2586,35 +2748,47 @@ strip_main (int argc, char *argv[])
char *tmpname;
if (get_file_size (argv[i]) < 1)
- continue;
+ {
+ status = 1;
+ continue;
+ }
if (preserve_dates)
/* No need to check the return value of stat().
It has already been checked in get_file_size(). */
stat (argv[i], &statbuf);
- if (output_file != NULL)
- tmpname = output_file;
- else
+ if (output_file == NULL || strcmp (argv[i], output_file) == 0)
tmpname = make_tempname (argv[i]);
- status = 0;
+ else
+ tmpname = output_file;
+
+ if (tmpname == NULL)
+ {
+ non_fatal (_("could not create temporary file to hold stripped copy of '%s'"),
+ argv[i]);
+ status = 1;
+ continue;
+ }
+ status = 0;
copy_file (argv[i], tmpname, input_target, output_target);
if (status == 0)
{
if (preserve_dates)
set_times (tmpname, &statbuf);
- if (output_file == NULL)
- smart_rename (tmpname, argv[i], preserve_dates);
+ if (output_file != tmpname)
+ smart_rename (tmpname, output_file ? output_file : argv[i],
+ preserve_dates);
status = hold_status;
}
else
unlink_if_ordinary (tmpname);
- if (output_file == NULL)
+ if (output_file != tmpname)
free (tmpname);
}
- return 0;
+ return status;
}
static int
@@ -2623,6 +2797,7 @@ copy_main (int argc, char *argv[])
char * binary_architecture = NULL;
char *input_filename = NULL;
char *output_filename = NULL;
+ char *tmpname;
char *input_target = NULL;
char *output_target = NULL;
bfd_boolean show_version = FALSE;
@@ -2783,7 +2958,10 @@ copy_main (int argc, char *argv[])
size = get_file_size (s + 1);
if (size < 1)
- break;
+ {
+ status = 1;
+ break;
+ }
pa = xmalloc (sizeof (struct section_add));
@@ -3064,6 +3242,10 @@ copy_main (int argc, char *argv[])
add_specific_symbols (optarg, &keep_specific_list);
break;
+ case OPTION_LOCALIZE_HIDDEN:
+ localize_hidden = TRUE;
+ break;
+
case OPTION_LOCALIZE_SYMBOLS:
add_specific_symbols (optarg, &localize_specific_list);
break;
@@ -3118,6 +3300,24 @@ copy_main (int argc, char *argv[])
bfd_flags_to_set &= ~D_PAGED;
break;
+ case OPTION_EXTRACT_SYMBOL:
+ extract_symbol = TRUE;
+ break;
+
+ case OPTION_REVERSE_BYTES:
+ {
+ int prev = reverse_bytes;
+
+ reverse_bytes = atoi (optarg);
+ if ((reverse_bytes <= 0) || ((reverse_bytes % 2) != 0))
+ fatal (_("number of bytes to reverse must be positive and even"));
+
+ if (prev && prev != reverse_bytes)
+ non_fatal (_("Warning: ignoring previous --reverse-bytes value of %d"),
+ prev);
+ break;
+ }
+
case 0:
/* We've been given a long option. */
break;
@@ -3136,7 +3336,7 @@ copy_main (int argc, char *argv[])
display_info ();
return 0;
}
-
+
if (show_version)
print_version ("objcopy");
@@ -3188,28 +3388,24 @@ copy_main (int argc, char *argv[])
/* If there is no destination file, or the source and destination files
are the same, then create a temp and rename the result into the input. */
if (output_filename == NULL || strcmp (input_filename, output_filename) == 0)
- {
- char *tmpname = make_tempname (input_filename);
-
- copy_file (input_filename, tmpname, input_target, output_target);
- if (status == 0)
- {
- if (preserve_dates)
- set_times (tmpname, &statbuf);
- smart_rename (tmpname, input_filename, preserve_dates);
- }
- else
- unlink (tmpname);
- }
+ tmpname = make_tempname (input_filename);
else
- {
- copy_file (input_filename, output_filename, input_target, output_target);
+ tmpname = output_filename;
+
+ if (tmpname == NULL)
+ fatal (_("warning: could not create temporary file whilst copying '%s', (error: %s)"),
+ input_filename, strerror (errno));
- if (status == 0 && preserve_dates)
- set_times (output_filename, &statbuf);
- else if (status != 0)
- unlink_if_ordinary (output_filename);
+ copy_file (input_filename, tmpname, input_target, output_target);
+ if (status == 0)
+ {
+ if (preserve_dates)
+ set_times (tmpname, &statbuf);
+ if (tmpname != output_filename)
+ smart_rename (tmpname, input_filename, preserve_dates);
}
+ else
+ unlink_if_ordinary (tmpname);
if (change_warn)
{
diff --git a/binutils/objdump.c b/binutils/objdump.c
index 6e5eab56da24..38e7c0289854 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -1,6 +1,6 @@
/* objdump.c -- dump information about an object file.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -48,12 +48,11 @@
disassembling is done by the libopcodes library, via a function pointer
supplied by the disassembler() function. */
+#include "sysdep.h"
#include "bfd.h"
-#include "bfdver.h"
#include "progress.h"
#include "bucomm.h"
#include "dwarf.h"
-#include "budemang.h"
#include "getopt.h"
#include "safe-ctype.h"
#include "dis-asm.h"
@@ -62,6 +61,12 @@
#include "debug.h"
#include "budbg.h"
+#ifdef HAVE_MMAP
+#include <sys/mman.h>
+#endif
+
+#include <sys/stat.h>
+
/* Internal headers for the ELF .stab-dump code - sorry. */
#define BYTES_IN_WORD 32
#include "aout/aout64.h"
@@ -225,7 +230,7 @@ usage (FILE *stream, int status)
disassembler_usage (stream);
}
- if (status == 0)
+ if (REPORT_BUGS_TO[0] && status == 0)
fprintf (stream, _("Report bugs to %s.\n"), REPORT_BUGS_TO);
exit (status);
}
@@ -650,8 +655,9 @@ objdump_print_symname (bfd *abfd, struct disassemble_info *info,
if (do_demangle && name[0] != '\0')
{
/* Demangle the name. */
- alloc = demangle (abfd, name);
- name = alloc;
+ alloc = bfd_demangle (abfd, name, DMGL_ANSI | DMGL_PARAMS);
+ if (alloc != NULL)
+ name = alloc;
}
if (info != NULL)
@@ -687,6 +693,7 @@ find_symbol_for_address (bfd_vma vma,
bfd *abfd;
asection *sec;
unsigned int opb;
+ bfd_boolean want_section;
if (sorted_symcount < 1)
return NULL;
@@ -732,15 +739,19 @@ find_symbol_for_address (bfd_vma vma,
Note that this may be wrong for some symbol references if the
sections have overlapping memory ranges, but in that case there's
no way to tell what's desired without looking at the relocation
- table. */
- if (sorted_syms[thisplace]->section != sec
- && (aux->require_sec
- || ((abfd->flags & HAS_RELOC) != 0
- && vma >= bfd_get_section_vma (abfd, sec)
- && vma < (bfd_get_section_vma (abfd, sec)
- + bfd_section_size (abfd, sec) / opb))))
+ table.
+
+ Also give the target a chance to reject symbols. */
+ want_section = (aux->require_sec
+ || ((abfd->flags & HAS_RELOC) != 0
+ && vma >= bfd_get_section_vma (abfd, sec)
+ && vma < (bfd_get_section_vma (abfd, sec)
+ + bfd_section_size (abfd, sec) / opb)));
+ if ((sorted_syms[thisplace]->section != sec && want_section)
+ || !info->symbol_is_valid (sorted_syms[thisplace], info))
{
long i;
+ long newplace;
for (i = thisplace + 1; i < sorted_symcount; i++)
{
@@ -750,27 +761,36 @@ find_symbol_for_address (bfd_vma vma,
}
--i;
+ newplace = sorted_symcount;
for (; i >= 0; i--)
{
- if (sorted_syms[i]->section == sec
- && (i == 0
- || sorted_syms[i - 1]->section != sec
- || (bfd_asymbol_value (sorted_syms[i])
- != bfd_asymbol_value (sorted_syms[i - 1]))))
+ if ((sorted_syms[i]->section == sec || !want_section)
+ && info->symbol_is_valid (sorted_syms[i], info))
{
- thisplace = i;
- break;
+ if (newplace == sorted_symcount)
+ newplace = i;
+
+ if (bfd_asymbol_value (sorted_syms[i])
+ != bfd_asymbol_value (sorted_syms[newplace]))
+ break;
+
+ /* Remember this symbol and keep searching until we reach
+ an earlier address. */
+ newplace = i;
}
}
- if (sorted_syms[thisplace]->section != sec)
+ if (newplace != sorted_symcount)
+ thisplace = newplace;
+ else
{
/* We didn't find a good symbol with a smaller value.
Look for one with a larger value. */
for (i = thisplace + 1; i < sorted_symcount; i++)
{
- if (sorted_syms[i]->section == sec)
+ if ((sorted_syms[i]->section == sec || !want_section)
+ && info->symbol_is_valid (sorted_syms[i], info))
{
thisplace = i;
break;
@@ -778,25 +798,12 @@ find_symbol_for_address (bfd_vma vma,
}
}
- if (sorted_syms[thisplace]->section != sec
- && (aux->require_sec
- || ((abfd->flags & HAS_RELOC) != 0
- && vma >= bfd_get_section_vma (abfd, sec)
- && vma < (bfd_get_section_vma (abfd, sec)
- + bfd_section_size (abfd, sec)))))
+ if ((sorted_syms[thisplace]->section != sec && want_section)
+ || !info->symbol_is_valid (sorted_syms[thisplace], info))
/* There is no suitable symbol. */
return NULL;
}
- /* Give the target a chance to reject the symbol. */
- while (! info->symbol_is_valid (sorted_syms [thisplace], info))
- {
- ++ thisplace;
- if (thisplace >= sorted_symcount
- || bfd_asymbol_value (sorted_syms [thisplace]) > vma)
- return NULL;
- }
-
if (place != NULL)
*place = thisplace;
@@ -926,8 +933,12 @@ struct print_file_list
struct print_file_list *next;
const char *filename;
const char *modname;
- unsigned int line;
- FILE *f;
+ const char *map;
+ size_t mapsize;
+ const char **linemap;
+ unsigned maxline;
+ unsigned last_line;
+ int first;
};
static struct print_file_list *print_files;
@@ -937,6 +948,99 @@ static struct print_file_list *print_files;
#define SHOW_PRECEDING_CONTEXT_LINES (5)
+/* Read a complete file into memory. */
+
+static const char *
+slurp_file (const char *fn, size_t *size)
+{
+#ifdef HAVE_MMAP
+ int ps = getpagesize ();
+ size_t msize;
+#endif
+ const char *map;
+ struct stat st;
+ int fd = open (fn, O_RDONLY);
+
+ if (fd < 0)
+ return NULL;
+ if (fstat (fd, &st) < 0)
+ return NULL;
+ *size = st.st_size;
+#ifdef HAVE_MMAP
+ msize = (*size + ps - 1) & ~(ps - 1);
+ map = mmap (NULL, msize, PROT_READ, MAP_SHARED, fd, 0);
+ if (map != (char *)-1L)
+ {
+ close(fd);
+ return map;
+ }
+#endif
+ map = malloc (*size);
+ if (!map || (size_t) read (fd, (char *)map, *size) != *size)
+ {
+ free ((void *)map);
+ map = NULL;
+ }
+ close (fd);
+ return map;
+}
+
+#define line_map_decrease 5
+
+/* Precompute array of lines for a mapped file. */
+
+static const char **
+index_file (const char *map, size_t size, unsigned int *maxline)
+{
+ const char *p, *lstart, *end;
+ int chars_per_line = 45; /* First iteration will use 40. */
+ unsigned int lineno;
+ const char **linemap = NULL;
+ unsigned long line_map_size = 0;
+
+ lineno = 0;
+ lstart = map;
+ end = map + size;
+
+ for (p = map; p < end; p++)
+ {
+ if (*p == '\n')
+ {
+ if (p + 1 < end && p[1] == '\r')
+ p++;
+ }
+ else if (*p == '\r')
+ {
+ if (p + 1 < end && p[1] == '\n')
+ p++;
+ }
+ else
+ continue;
+
+ /* End of line found. */
+
+ if (linemap == NULL || line_map_size < lineno + 1)
+ {
+ unsigned long newsize;
+
+ chars_per_line -= line_map_decrease;
+ if (chars_per_line <= 1)
+ chars_per_line = 1;
+ line_map_size = size / chars_per_line + 1;
+ if (line_map_size < lineno + 1)
+ line_map_size = lineno + 1;
+ newsize = line_map_size * sizeof (char *);
+ linemap = xrealloc (linemap, newsize);
+ }
+
+ linemap[lineno++] = lstart;
+ lstart = p + 1;
+ }
+
+ *maxline = lineno;
+ return linemap;
+}
+
/* Tries to open MODNAME, and if successful adds a node to print_files
linked list and returns that node. Returns NULL on failure. */
@@ -944,24 +1048,22 @@ static struct print_file_list *
try_print_file_open (const char *origname, const char *modname)
{
struct print_file_list *p;
- FILE *f;
- f = fopen (modname, "r");
- if (f == NULL)
- return NULL;
+ p = xmalloc (sizeof (struct print_file_list));
- if (print_files != NULL && print_files->f != NULL)
+ p->map = slurp_file (modname, &p->mapsize);
+ if (p->map == NULL)
{
- fclose (print_files->f);
- print_files->f = NULL;
+ free (p);
+ return NULL;
}
-
- p = xmalloc (sizeof (struct print_file_list));
+
+ p->linemap = index_file (p->map, p->mapsize, &p->maxline);
+ p->last_line = 0;
p->filename = origname;
p->modname = modname;
- p->line = 0;
- p->f = f;
p->next = print_files;
+ p->first = 1;
print_files = p;
return p;
}
@@ -1020,29 +1122,32 @@ update_source_path (const char *filename)
return NULL;
}
-/* Skip ahead to a given line in a file, optionally printing each
- line. */
+/* Print a source file line. */
-static void
-skip_to_line (struct print_file_list *p, unsigned int line,
- bfd_boolean show)
+static void
+print_line (struct print_file_list *p, unsigned int line)
{
- while (p->line < line)
- {
- char buf[100];
-
- if (fgets (buf, sizeof buf, p->f) == NULL)
- {
- fclose (p->f);
- p->f = NULL;
- break;
- }
+ const char *l;
+
+ --line;
+ if (line >= p->maxline)
+ return;
+ l = p->linemap [line];
+ fwrite (l, 1, strcspn (l, "\n\r"), stdout);
+ putchar ('\n');
+}
- if (show)
- printf ("%s", buf);
+/* Print a range of source code lines. */
- if (strchr (buf, '\n') != NULL)
- ++p->line;
+static void
+dump_lines (struct print_file_list *p, unsigned int start, unsigned int end)
+{
+ if (p->map == NULL)
+ return;
+ while (start <= end)
+ {
+ print_line (p, start);
+ start++;
}
}
@@ -1083,79 +1188,31 @@ show_line (bfd *abfd, asection *section, bfd_vma addr_offset)
&& line > 0)
{
struct print_file_list **pp, *p;
+ unsigned l;
for (pp = &print_files; *pp != NULL; pp = &(*pp)->next)
if (strcmp ((*pp)->filename, filename) == 0)
break;
p = *pp;
- if (p != NULL)
- {
- if (p != print_files)
- {
- int l;
-
- /* We have reencountered a file name which we saw
- earlier. This implies that either we are dumping out
- code from an included file, or the same file was
- linked in more than once. There are two common cases
- of an included file: inline functions in a header
- file, and a bison or flex skeleton file. In the
- former case we want to just start printing (but we
- back up a few lines to give context); in the latter
- case we want to continue from where we left off. I
- can't think of a good way to distinguish the cases,
- so I used a heuristic based on the file name. */
- if (strcmp (p->filename + strlen (p->filename) - 2, ".h") != 0)
- l = p->line;
- else
- {
- l = line - SHOW_PRECEDING_CONTEXT_LINES;
- if (l < 0)
- l = 0;
- }
-
- if (p->f == NULL)
- {
- p->f = fopen (p->modname, "r");
- p->line = 0;
- }
- if (p->f != NULL)
- skip_to_line (p, l, FALSE);
-
- if (print_files->f != NULL)
- {
- fclose (print_files->f);
- print_files->f = NULL;
- }
- }
-
- if (p->f != NULL)
- {
- skip_to_line (p, line, TRUE);
- *pp = p->next;
- p->next = print_files;
- print_files = p;
- }
- }
- else
- {
+ if (p == NULL)
p = update_source_path (filename);
- if (p != NULL)
+ if (p != NULL && line != p->last_line)
+ {
+ if (file_start_context && p->first)
+ l = 1;
+ else
{
- int l;
-
- if (file_start_context)
- l = 0;
- else
- l = line - SHOW_PRECEDING_CONTEXT_LINES;
- if (l < 0)
- l = 0;
- skip_to_line (p, l, FALSE);
- if (p->f != NULL)
- skip_to_line (p, line, TRUE);
+ l = line - SHOW_PRECEDING_CONTEXT_LINES;
+ if (l >= line)
+ l = 1;
+ if (p->last_line >= l && p->last_line <= line)
+ l = p->last_line + 1;
}
+ dump_lines (p, l, line);
+ p->last_line = line;
+ p->first = 0;
}
}
@@ -1377,6 +1434,8 @@ disassemble_bytes (struct disassemble_info * info,
info->flags = 0;
if (info->disassembler_needs_relocs
+ && (bfd_get_file_flags (aux->abfd) & EXEC_P) == 0
+ && (bfd_get_file_flags (aux->abfd) & DYNAMIC) == 0
&& *relppp < relppend)
{
bfd_signed_vma distance_to_rel;
@@ -1748,11 +1807,13 @@ disassemble_section (bfd *abfd, asection *section, void *info)
pinfo->symbols = sorted_syms + place;
pinfo->num_symbols = x - place;
+ pinfo->symtab_pos = place;
}
else
{
pinfo->symbols = NULL;
pinfo->num_symbols = 0;
+ pinfo->symtab_pos = -1;
}
if (! prefix_addresses)
@@ -1945,6 +2006,8 @@ disassemble_data (bfd *abfd)
compare_relocs);
}
}
+ disasm_info.symtab = sorted_syms;
+ disasm_info.symtab_size = sorted_symcount;
bfd_map_over_sections (abfd, disassemble_section, & disasm_info);
@@ -1970,7 +2033,19 @@ load_debug_section (enum dwarf_section_display_enum debug, void *file)
if (sec == NULL)
return 0;
- section->address = bfd_get_section_vma (abfd, sec);
+ /* Compute a bias to be added to offsets found within the DWARF debug
+ information. These offsets are meant to be relative to the start of
+ the dwarf section, and hence the bias should be 0. For MACH-O however
+ a dwarf section is really just a region of a much larger section and so
+ the bias is the address of the start of that area within the larger
+ section. This test is important for PE and COFF based targets which
+ use DWARF debug information, since unlike ELF, they do not allow the
+ dwarf sections to be placed at address 0. */
+ if (bfd_get_flavour (abfd) == bfd_target_mach_o_flavour)
+ section->address = bfd_get_section_vma (abfd, sec);
+ else
+ section->address = 0;
+
section->size = bfd_get_section_size (sec);
section->start = xmalloc (section->size);
@@ -2015,7 +2090,7 @@ dump_dwarf_section (bfd *abfd, asection *section,
const char *match;
enum dwarf_section_display_enum i;
- if (strncmp (name, ".gnu.linkonce.wi.", 17) == 0)
+ if (CONST_STRNEQ (name, ".gnu.linkonce.wi."))
match = ".debug_info";
else
match = name;
@@ -2511,12 +2586,16 @@ dump_symbols (bfd *abfd ATTRIBUTE_UNUSED, bfd_boolean dynamic)
/* If we want to demangle the name, we demangle it
here, and temporarily clobber it while calling
bfd_print_symbol. FIXME: This is a gross hack. */
- alloc = demangle (cur_bfd, name);
- (*current)->name = alloc;
+ alloc = bfd_demangle (cur_bfd, name, DMGL_ANSI | DMGL_PARAMS);
+ if (alloc != NULL)
+ (*current)->name = alloc;
bfd_print_symbol (cur_bfd, stdout, *current,
bfd_print_symbol_all);
- (*current)->name = name;
- free (alloc);
+ if (alloc != NULL)
+ {
+ (*current)->name = name;
+ free (alloc);
+ }
}
else
bfd_print_symbol (cur_bfd, stdout, *current,
@@ -2822,8 +2901,9 @@ dump_bfd (bfd *abfd)
dhandle = read_debugging_info (abfd, syms, symcount);
if (dhandle != NULL)
{
- if (! print_debugging_info (stdout, dhandle, abfd, syms, demangle,
- dump_debugging_tags ? TRUE : FALSE))
+ if (!print_debugging_info (stdout, dhandle, abfd, syms,
+ bfd_demangle,
+ dump_debugging_tags ? TRUE : FALSE))
{
non_fatal (_("%s: printing debugging information failed"),
bfd_get_filename (abfd));
@@ -2902,7 +2982,10 @@ display_file (char *filename, char *target)
bfd *arfile = NULL;
if (get_file_size (filename) < 1)
- return;
+ {
+ exit_status = 1;
+ return;
+ }
file = bfd_openr (filename, target);
if (file == NULL)
diff --git a/binutils/po/Make-in b/binutils/po/Make-in
index be09b4cd788b..86ff3143b988 100644
--- a/binutils/po/Make-in
+++ b/binutils/po/Make-in
@@ -16,6 +16,7 @@ SHELL = /bin/sh
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
+top_builddir = @top_builddir@
prefix = @prefix@
exec_prefix = @exec_prefix@
@@ -72,7 +73,7 @@ INSTOBJEXT = @INSTOBJEXT@
$(MSGFMT) -o $@ $<
.po.gmo:
- file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+ file=`echo $* | sed 's,.*/,,'`.gmo \
&& rm -f $$file && $(GMSGFMT) -o $$file $<
.po.cat:
diff --git a/binutils/po/POTFILES.in b/binutils/po/POTFILES.in
index d3f6cb3fa7c7..e96d8bf3ca18 100644
--- a/binutils/po/POTFILES.in
+++ b/binutils/po/POTFILES.in
@@ -2,13 +2,12 @@ addr2line.c
ar.c
arsup.c
arsup.h
+bin2c.c
binemul.c
binemul.h
bucomm.c
bucomm.h
budbg.h
-budemang.c
-budemang.h
coffdump.c
coffgrok.c
coffgrok.h
@@ -29,6 +28,7 @@ is-ranlib.c
is-strip.c
maybe-ranlib.c
maybe-strip.c
+mclex.c
nlmconv.c
nlmconv.h
nm.c
@@ -37,6 +37,7 @@ not-strip.c
objcopy.c
objdump.c
prdbg.c
+rclex.c
rdcoff.c
rdcoff.c
rddbg.c
@@ -54,6 +55,9 @@ stabs.c
strings.c
sysdump.c
version.c
+windint.h
+windmc.c
+windmc.h
windres.c
windres.h
winduni.c
diff --git a/binutils/po/binutils.pot b/binutils/po/binutils.pot
index 5e5a4dc7f22a..f0801683f203 100644
--- a/binutils/po/binutils.pot
+++ b/binutils/po/binutils.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-10-25 09:14+0930\n"
+"POT-Creation-Date: 2007-07-02 15:55+0930\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"
@@ -16,31 +16,32 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: addr2line.c:76
+#: addr2line.c:74
#, c-format
msgid "Usage: %s [option(s)] [addr(s)]\n"
msgstr ""
-#: addr2line.c:77
+#: addr2line.c:75
#, c-format
msgid " Convert addresses into line number/file name pairs.\n"
msgstr ""
-#: addr2line.c:78
+#: addr2line.c:76
#, c-format
msgid ""
" If no addresses are specified on the command line, they will be read from "
"stdin\n"
msgstr ""
-#: addr2line.c:79
+#: addr2line.c:77
#, c-format
msgid ""
" The options are:\n"
" @<file> Read options from <file>\n"
" -b --target=<bfdname> Set the binary file format\n"
" -e --exe=<executable> Set the input file name (default is a.out)\n"
-" -i --inlines\t\t Unwind inlined functions\n"
+" -i --inlines Unwind inlined functions\n"
+" -j --section=<name> Read section-relative offsets instead of addresses\n"
" -s --basenames Strip directory names\n"
" -f --functions Show function names\n"
" -C --demangle[=style] Demangle function names\n"
@@ -49,169 +50,174 @@ msgid ""
"\n"
msgstr ""
-#: addr2line.c:93 ar.c:263 coffdump.c:466 nlmconv.c:1113 objcopy.c:486
-#: objcopy.c:520 readelf.c:2622 size.c:102 srconv.c:1732 strings.c:725
-#: sysdump.c:648 windres.c:673
+#: addr2line.c:92 ar.c:264 coffdump.c:467 dlltool.c:3172 dllwrap.c:510
+#: nlmconv.c:1115 objcopy.c:515 objcopy.c:550 readelf.c:2797 size.c:103
+#: srconv.c:1734 strings.c:722 sysdump.c:647 windmc.c:232 windres.c:698
#, c-format
msgid "Report bugs to %s\n"
msgstr ""
-#: addr2line.c:253
+#: addr2line.c:279
#, c-format
-msgid "%s: can not get addresses from archive"
+msgid "%s: cannot get addresses from archive"
msgstr ""
-#: addr2line.c:325 nm.c:1523 objdump.c:3033
+#: addr2line.c:296
+#, c-format
+msgid "%s: cannot find section %s"
+msgstr ""
+
+#: addr2line.c:362 nm.c:1534 objdump.c:3099
#, c-format
msgid "unknown demangling style `%s'"
msgstr ""
-#: ar.c:203
+#: ar.c:204
#, c-format
msgid "no entry %s in archive\n"
msgstr ""
-#: ar.c:219
+#: ar.c:220
#, c-format
msgid ""
"Usage: %s [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] "
"[count] archive-file file...\n"
msgstr ""
-#: ar.c:222
+#: ar.c:223
#, c-format
msgid " %s -M [<mri-script]\n"
msgstr ""
-#: ar.c:223
+#: ar.c:224
#, c-format
msgid " commands:\n"
msgstr ""
-#: ar.c:224
+#: ar.c:225
#, c-format
msgid " d - delete file(s) from the archive\n"
msgstr ""
-#: ar.c:225
+#: ar.c:226
#, c-format
msgid " m[ab] - move file(s) in the archive\n"
msgstr ""
-#: ar.c:226
+#: ar.c:227
#, c-format
msgid " p - print file(s) found in the archive\n"
msgstr ""
-#: ar.c:227
+#: ar.c:228
#, c-format
msgid " q[f] - quick append file(s) to the archive\n"
msgstr ""
-#: ar.c:228
+#: ar.c:229
#, c-format
msgid ""
" r[ab][f][u] - replace existing or insert new file(s) into the archive\n"
msgstr ""
-#: ar.c:229
+#: ar.c:230
#, c-format
msgid " t - display contents of archive\n"
msgstr ""
-#: ar.c:230
+#: ar.c:231
#, c-format
msgid " x[o] - extract file(s) from the archive\n"
msgstr ""
-#: ar.c:231
+#: ar.c:232
#, c-format
msgid " command specific modifiers:\n"
msgstr ""
-#: ar.c:232
+#: ar.c:233
#, c-format
msgid " [a] - put file(s) after [member-name]\n"
msgstr ""
-#: ar.c:233
+#: ar.c:234
#, c-format
msgid " [b] - put file(s) before [member-name] (same as [i])\n"
msgstr ""
-#: ar.c:234
+#: ar.c:235
#, c-format
msgid " [N] - use instance [count] of name\n"
msgstr ""
-#: ar.c:235
+#: ar.c:236
#, c-format
msgid " [f] - truncate inserted file names\n"
msgstr ""
-#: ar.c:236
+#: ar.c:237
#, c-format
msgid " [P] - use full path names when matching\n"
msgstr ""
-#: ar.c:237
+#: ar.c:238
#, c-format
msgid " [o] - preserve original dates\n"
msgstr ""
-#: ar.c:238
+#: ar.c:239
#, c-format
msgid ""
" [u] - only replace files that are newer than current archive "
"contents\n"
msgstr ""
-#: ar.c:239
+#: ar.c:240
#, c-format
msgid " generic modifiers:\n"
msgstr ""
-#: ar.c:240
+#: ar.c:241
#, c-format
msgid " [c] - do not warn if the library had to be created\n"
msgstr ""
-#: ar.c:241
+#: ar.c:242
#, c-format
msgid " [s] - create an archive index (cf. ranlib)\n"
msgstr ""
-#: ar.c:242
+#: ar.c:243
#, c-format
msgid " [S] - do not build a symbol table\n"
msgstr ""
-#: ar.c:243
+#: ar.c:244
#, c-format
msgid " [v] - be verbose\n"
msgstr ""
-#: ar.c:244
+#: ar.c:245
#, c-format
msgid " [V] - display the version number\n"
msgstr ""
-#: ar.c:245
+#: ar.c:246
#, c-format
msgid " @<file> - read options from <file>\n"
msgstr ""
-#: ar.c:252
+#: ar.c:253
#, c-format
msgid "Usage: %s [options] archive\n"
msgstr ""
-#: ar.c:253
+#: ar.c:254
#, c-format
msgid " Generate an index to speed access to archives\n"
msgstr ""
-#: ar.c:254
+#: ar.c:255
#, c-format
msgid ""
" The options are:\n"
@@ -220,47 +226,47 @@ msgid ""
" -V --version Print version information\n"
msgstr ""
-#: ar.c:485
+#: ar.c:487
msgid "two different operation options specified"
msgstr ""
-#: ar.c:560
+#: ar.c:562
#, c-format
msgid "illegal option -- %c"
msgstr ""
-#: ar.c:606
+#: ar.c:605
msgid "no operation specified"
msgstr ""
-#: ar.c:609
+#: ar.c:608
msgid "`u' is only meaningful with the `r' option."
msgstr ""
-#: ar.c:617
+#: ar.c:616
msgid "`N' is only meaningful with the `x' and `d' options."
msgstr ""
-#: ar.c:620
+#: ar.c:619
msgid "Value for `N' must be positive."
msgstr ""
-#: ar.c:670
+#: ar.c:669
#, c-format
msgid "internal error -- this option not implemented"
msgstr ""
-#: ar.c:739
+#: ar.c:738
#, c-format
msgid "creating %s"
msgstr ""
-#: ar.c:788 ar.c:838 ar.c:1156 objcopy.c:1683
+#: ar.c:787 ar.c:842 ar.c:1164 objcopy.c:1869
#, c-format
msgid "internal stat error on %s"
msgstr ""
-#: ar.c:792
+#: ar.c:791
#, c-format
msgid ""
"\n"
@@ -268,168 +274,173 @@ msgid ""
"\n"
msgstr ""
-#: ar.c:808 ar.c:875
+#: ar.c:807 ar.c:875
#, c-format
msgid "%s is not a valid archive"
msgstr ""
-#: ar.c:843
-#, c-format
-msgid "stat returns negative size for %s"
-msgstr ""
-
-#: ar.c:1061
+#: ar.c:1069
#, c-format
msgid "No member named `%s'\n"
msgstr ""
-#: ar.c:1111
+#: ar.c:1119
#, c-format
msgid "no entry %s in archive %s!"
msgstr ""
-#: ar.c:1248
+#: ar.c:1257
#, c-format
msgid "%s: no archive map to update"
msgstr ""
-#: arsup.c:87
+#: arsup.c:88
#, c-format
msgid "No entry %s in archive.\n"
msgstr ""
-#: arsup.c:112
+#: arsup.c:113
#, c-format
msgid "Can't open file %s\n"
msgstr ""
-#: arsup.c:162
+#: arsup.c:163
#, c-format
msgid "%s: Can't open output archive %s\n"
msgstr ""
-#: arsup.c:179
+#: arsup.c:180
#, c-format
msgid "%s: Can't open input archive %s\n"
msgstr ""
-#: arsup.c:188
+#: arsup.c:189
#, c-format
msgid "%s: file %s is not an archive\n"
msgstr ""
-#: arsup.c:227
+#: arsup.c:228
#, c-format
msgid "%s: no output archive specified yet\n"
msgstr ""
-#: arsup.c:247 arsup.c:285 arsup.c:327 arsup.c:347 arsup.c:413
+#: arsup.c:248 arsup.c:286 arsup.c:328 arsup.c:348 arsup.c:414
#, c-format
msgid "%s: no open output archive\n"
msgstr ""
-#: arsup.c:258 arsup.c:368 arsup.c:394
+#: arsup.c:259 arsup.c:369 arsup.c:395
#, c-format
msgid "%s: can't open file %s\n"
msgstr ""
-#: arsup.c:312 arsup.c:390 arsup.c:471
+#: arsup.c:313 arsup.c:391 arsup.c:472
#, c-format
msgid "%s: can't find module file %s\n"
msgstr ""
-#: arsup.c:422
+#: arsup.c:423
#, c-format
msgid "Current open archive is %s\n"
msgstr ""
-#: arsup.c:446
+#: arsup.c:447
#, c-format
msgid "%s: no open archive\n"
msgstr ""
+#: bin2c.c:84
+#, c-format
+msgid "Usage: %s < input_file > output_file\n"
+msgstr ""
+
+#: bin2c.c:85
+#, c-format
+msgid "Prints bytes from stdin in hex format.\n"
+msgstr ""
+
#: binemul.c:37
#, c-format
msgid " No emulation specific options\n"
msgstr ""
#. Macros for common output.
-#: binemul.h:40
+#: binemul.h:41
#, c-format
msgid " emulation options: \n"
msgstr ""
-#: bucomm.c:110
+#: bucomm.c:111
#, c-format
msgid "can't set BFD default target to `%s': %s"
msgstr ""
-#: bucomm.c:121
+#: bucomm.c:122
#, c-format
msgid "%s: Matching formats:"
msgstr ""
-#: bucomm.c:136
+#: bucomm.c:137
#, c-format
msgid "Supported targets:"
msgstr ""
-#: bucomm.c:138
+#: bucomm.c:139
#, c-format
msgid "%s: supported targets:"
msgstr ""
-#: bucomm.c:154
+#: bucomm.c:155
#, c-format
msgid "Supported architectures:"
msgstr ""
-#: bucomm.c:156
+#: bucomm.c:157
#, c-format
msgid "%s: supported architectures:"
msgstr ""
-#: bucomm.c:349
+#: bucomm.c:350
#, c-format
msgid "BFD header file version %s\n"
msgstr ""
-#: bucomm.c:450
+#: bucomm.c:499
#, c-format
msgid "%s: bad number: %s"
msgstr ""
-#: bucomm.c:467 strings.c:438
+#: bucomm.c:516 strings.c:435
#, c-format
msgid "'%s': No such file"
msgstr ""
-#: bucomm.c:469 strings.c:440
+#: bucomm.c:518 strings.c:437
#, c-format
msgid "Warning: could not locate '%s'. reason: %s"
msgstr ""
-#: bucomm.c:473
+#: bucomm.c:522
#, c-format
msgid "Warning: '%s' is not an ordinary file"
msgstr ""
-#: coffdump.c:103
+#: coffdump.c:104
#, c-format
msgid "#lines %d "
msgstr ""
-#: coffdump.c:457 sysdump.c:641
+#: coffdump.c:458 sysdump.c:640
#, c-format
msgid "Usage: %s [option(s)] in-file\n"
msgstr ""
-#: coffdump.c:458
+#: coffdump.c:459
#, c-format
msgid " Print a human readable interpretation of a SYSROFF object file\n"
msgstr ""
-#: coffdump.c:459
+#: coffdump.c:460
#, c-format
msgid ""
" The options are:\n"
@@ -439,720 +450,732 @@ msgid ""
"\n"
msgstr ""
-#: coffdump.c:528 srconv.c:1822 sysdump.c:705
+#: coffdump.c:529 srconv.c:1824 sysdump.c:704
msgid "no input file specified"
msgstr ""
-#: debug.c:648
+#: cxxfilt.c:119 nm.c:252 objdump.c:234
+#, c-format
+msgid "Report bugs to %s.\n"
+msgstr ""
+
+#: debug.c:646
msgid "debug_add_to_current_namespace: no current file"
msgstr ""
-#: debug.c:727
+#: debug.c:725
msgid "debug_start_source: no debug_set_filename call"
msgstr ""
-#: debug.c:783
+#: debug.c:781
msgid "debug_record_function: no debug_set_filename call"
msgstr ""
-#: debug.c:835
+#: debug.c:833
msgid "debug_record_parameter: no current function"
msgstr ""
-#: debug.c:867
+#: debug.c:865
msgid "debug_end_function: no current function"
msgstr ""
-#: debug.c:873
+#: debug.c:871
msgid "debug_end_function: some blocks were not closed"
msgstr ""
-#: debug.c:901
+#: debug.c:899
msgid "debug_start_block: no current block"
msgstr ""
-#: debug.c:937
+#: debug.c:935
msgid "debug_end_block: no current block"
msgstr ""
-#: debug.c:944
+#: debug.c:942
msgid "debug_end_block: attempt to close top level block"
msgstr ""
-#: debug.c:967
+#: debug.c:965
msgid "debug_record_line: no current unit"
msgstr ""
#. FIXME
-#: debug.c:1020
+#: debug.c:1018
msgid "debug_start_common_block: not implemented"
msgstr ""
#. FIXME
-#: debug.c:1031
+#: debug.c:1029
msgid "debug_end_common_block: not implemented"
msgstr ""
#. FIXME.
-#: debug.c:1115
+#: debug.c:1113
msgid "debug_record_label: not implemented"
msgstr ""
-#: debug.c:1137
+#: debug.c:1135
msgid "debug_record_variable: no current file"
msgstr ""
-#: debug.c:1665
+#: debug.c:1663
msgid "debug_make_undefined_type: unsupported kind"
msgstr ""
-#: debug.c:1842
+#: debug.c:1840
msgid "debug_name_type: no current file"
msgstr ""
-#: debug.c:1887
+#: debug.c:1885
msgid "debug_tag_type: no current file"
msgstr ""
-#: debug.c:1895
+#: debug.c:1893
msgid "debug_tag_type: extra tag attempted"
msgstr ""
-#: debug.c:1932
+#: debug.c:1930
#, c-format
msgid "Warning: changing type size from %d to %d\n"
msgstr ""
-#: debug.c:1954
+#: debug.c:1952
msgid "debug_find_named_type: no current compilation unit"
msgstr ""
-#: debug.c:2057
+#: debug.c:2055
#, c-format
msgid "debug_get_real_type: circular debug information for %s\n"
msgstr ""
-#: debug.c:2484
+#: debug.c:2482
msgid "debug_write_type: illegal type encountered"
msgstr ""
-#: dlltool.c:765 dlltool.c:789 dlltool.c:818
+#: dlltool.c:797 dlltool.c:823 dlltool.c:854
#, c-format
msgid "Internal error: Unknown machine type: %d"
msgstr ""
-#: dlltool.c:854
+#: dlltool.c:890
#, c-format
msgid "Can't open def file: %s"
msgstr ""
-#: dlltool.c:859
+#: dlltool.c:895
#, c-format
msgid "Processing def file: %s"
msgstr ""
-#: dlltool.c:863
+#: dlltool.c:899
msgid "Processed def file"
msgstr ""
-#: dlltool.c:887
+#: dlltool.c:923
#, c-format
msgid "Syntax error in def file %s:%d"
msgstr ""
-#: dlltool.c:922
+#: dlltool.c:958
#, c-format
msgid "%s: Path components stripped from image name, '%s'."
msgstr ""
-#: dlltool.c:931
+#: dlltool.c:967
#, c-format
msgid "NAME: %s base: %x"
msgstr ""
-#: dlltool.c:934 dlltool.c:950
+#: dlltool.c:970 dlltool.c:986
msgid "Can't have LIBRARY and NAME"
msgstr ""
-#: dlltool.c:947
+#: dlltool.c:983
#, c-format
msgid "LIBRARY: %s base: %x"
msgstr ""
-#: dlltool.c:1183 resrc.c:269
+#: dlltool.c:1219 resrc.c:293
#, c-format
msgid "wait: %s"
msgstr ""
-#: dlltool.c:1188 dllwrap.c:413 resrc.c:274
+#: dlltool.c:1224 dllwrap.c:410 resrc.c:298
#, c-format
msgid "subprocess got fatal signal %d"
msgstr ""
-#: dlltool.c:1194 dllwrap.c:420 resrc.c:281
+#: dlltool.c:1230 dllwrap.c:417 resrc.c:305
#, c-format
msgid "%s exited with status %d"
msgstr ""
-#: dlltool.c:1225
+#: dlltool.c:1261
#, c-format
msgid "Sucking in info from %s section in %s"
msgstr ""
-#: dlltool.c:1350
+#: dlltool.c:1386
#, c-format
msgid "Excluding symbol: %s"
msgstr ""
-#: dlltool.c:1439 dlltool.c:1450 nm.c:1000 nm.c:1011
+#: dlltool.c:1475 dlltool.c:1486 nm.c:984 nm.c:995
#, c-format
msgid "%s: no symbols"
msgstr ""
#. FIXME: we ought to read in and block out the base relocations.
-#: dlltool.c:1476
+#: dlltool.c:1512
#, c-format
msgid "Done reading %s"
msgstr ""
-#: dlltool.c:1486
+#: dlltool.c:1522
#, c-format
msgid "Unable to open object file: %s"
msgstr ""
-#: dlltool.c:1489
+#: dlltool.c:1525
#, c-format
msgid "Scanning object file %s"
msgstr ""
-#: dlltool.c:1504
+#: dlltool.c:1540
#, c-format
msgid "Cannot produce mcore-elf dll from archive file: %s"
msgstr ""
-#: dlltool.c:1590
+#: dlltool.c:1626
msgid "Adding exports to output file"
msgstr ""
-#: dlltool.c:1638
+#: dlltool.c:1674
msgid "Added exports to output file"
msgstr ""
-#: dlltool.c:1759
+#: dlltool.c:1813
#, c-format
msgid "Generating export file: %s"
msgstr ""
-#: dlltool.c:1764
+#: dlltool.c:1818
#, c-format
msgid "Unable to open temporary assembler file: %s"
msgstr ""
-#: dlltool.c:1767
+#: dlltool.c:1821
#, c-format
msgid "Opened temporary file: %s"
msgstr ""
-#: dlltool.c:1989
+#: dlltool.c:2043
msgid "Generated exports file"
msgstr ""
-#: dlltool.c:2195
+#: dlltool.c:2251
#, c-format
msgid "bfd_open failed open stub file: %s"
msgstr ""
-#: dlltool.c:2198
+#: dlltool.c:2254
#, c-format
msgid "Creating stub file: %s"
msgstr ""
-#: dlltool.c:2580
+#: dlltool.c:2672
#, c-format
msgid "failed to open temporary head file: %s"
msgstr ""
-#: dlltool.c:2639
+#: dlltool.c:2734
#, c-format
msgid "failed to open temporary tail file: %s"
msgstr ""
-#: dlltool.c:2706
+#: dlltool.c:2809
#, c-format
msgid "Can't open .lib file: %s"
msgstr ""
-#: dlltool.c:2709
+#: dlltool.c:2812
#, c-format
msgid "Creating library file: %s"
msgstr ""
-#: dlltool.c:2792 dlltool.c:2798
+#: dlltool.c:2895 dlltool.c:2901
#, c-format
msgid "cannot delete %s: %s"
msgstr ""
-#: dlltool.c:2803
+#: dlltool.c:2906
msgid "Created lib file"
msgstr ""
-#: dlltool.c:2882
+#: dlltool.c:2985
#, c-format
msgid "Warning, ignoring duplicate EXPORT %s %d,%d"
msgstr ""
-#: dlltool.c:2888
+#: dlltool.c:2991
#, c-format
msgid "Error, duplicate EXPORT with oridinals: %s"
msgstr ""
-#: dlltool.c:2993
+#: dlltool.c:3096
msgid "Processing definitions"
msgstr ""
-#: dlltool.c:3025
+#: dlltool.c:3128
msgid "Processed definitions"
msgstr ""
#. xgetext:c-format
-#: dlltool.c:3032 dllwrap.c:474
+#: dlltool.c:3135 dllwrap.c:471
#, c-format
msgid "Usage %s <option(s)> <object-file(s)>\n"
msgstr ""
#. xgetext:c-format
-#: dlltool.c:3034
+#: dlltool.c:3137
#, c-format
msgid ""
" -m --machine <machine> Create as DLL for <machine>. [default: %s]\n"
msgstr ""
-#: dlltool.c:3035
+#: dlltool.c:3138
#, c-format
msgid ""
" possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, "
"ppc, thumb\n"
msgstr ""
-#: dlltool.c:3036
+#: dlltool.c:3139
#, c-format
msgid " -e --output-exp <outname> Generate an export file.\n"
msgstr ""
-#: dlltool.c:3037
+#: dlltool.c:3140
#, c-format
msgid " -l --output-lib <outname> Generate an interface library.\n"
msgstr ""
-#: dlltool.c:3038
+#: dlltool.c:3141
#, c-format
msgid " -a --add-indirect Add dll indirects to export file.\n"
msgstr ""
-#: dlltool.c:3039
+#: dlltool.c:3142
#, c-format
msgid ""
" -D --dllname <name> Name of input dll to put into interface lib.\n"
msgstr ""
-#: dlltool.c:3040
+#: dlltool.c:3143
#, c-format
msgid " -d --input-def <deffile> Name of .def file to be read in.\n"
msgstr ""
-#: dlltool.c:3041
+#: dlltool.c:3144
#, c-format
msgid " -z --output-def <deffile> Name of .def file to be created.\n"
msgstr ""
-#: dlltool.c:3042
+#: dlltool.c:3145
#, c-format
msgid " --export-all-symbols Export all symbols to .def\n"
msgstr ""
-#: dlltool.c:3043
+#: dlltool.c:3146
#, c-format
msgid " --no-export-all-symbols Only export listed symbols\n"
msgstr ""
-#: dlltool.c:3044
+#: dlltool.c:3147
#, c-format
msgid " --exclude-symbols <list> Don't export <list>\n"
msgstr ""
-#: dlltool.c:3045
+#: dlltool.c:3148
#, c-format
msgid " --no-default-excludes Clear default exclude symbols\n"
msgstr ""
-#: dlltool.c:3046
+#: dlltool.c:3149
#, c-format
msgid " -b --base-file <basefile> Read linker generated base file.\n"
msgstr ""
-#: dlltool.c:3047
+#: dlltool.c:3150
#, c-format
msgid " -x --no-idata4 Don't generate idata$4 section.\n"
msgstr ""
-#: dlltool.c:3048
+#: dlltool.c:3151
#, c-format
msgid " -c --no-idata5 Don't generate idata$5 section.\n"
msgstr ""
-#: dlltool.c:3049
+#: dlltool.c:3152
#, c-format
msgid ""
-" -U --add-underscore Add underscores to symbols in interface "
+" -U --add-underscore Add underscores to all symbols in interface "
"library.\n"
msgstr ""
-#: dlltool.c:3050
+#: dlltool.c:3153
+#, c-format
+msgid ""
+" --add-stdcall-underscore Add underscores to stdcall symbols in "
+"interface library.\n"
+msgstr ""
+
+#: dlltool.c:3154
#, c-format
msgid " -k --kill-at Kill @<n> from exported names.\n"
msgstr ""
-#: dlltool.c:3051
+#: dlltool.c:3155
#, c-format
msgid " -A --add-stdcall-alias Add aliases without @<n>.\n"
msgstr ""
-#: dlltool.c:3052
+#: dlltool.c:3156
#, c-format
msgid " -p --ext-prefix-alias <prefix> Add aliases with <prefix>.\n"
msgstr ""
-#: dlltool.c:3053
+#: dlltool.c:3157
#, c-format
msgid " -S --as <name> Use <name> for assembler.\n"
msgstr ""
-#: dlltool.c:3054
+#: dlltool.c:3158
#, c-format
msgid " -f --as-flags <flags> Pass <flags> to the assembler.\n"
msgstr ""
-#: dlltool.c:3055
+#: dlltool.c:3159
#, c-format
msgid ""
" -C --compat-implib Create backward compatible import library.\n"
msgstr ""
-#: dlltool.c:3056
+#: dlltool.c:3160
#, c-format
msgid ""
" -n --no-delete Keep temp files (repeat for extra "
"preservation).\n"
msgstr ""
-#: dlltool.c:3057
+#: dlltool.c:3161
#, c-format
msgid ""
" -t --temp-prefix <prefix> Use <prefix> to construct temp file names.\n"
msgstr ""
-#: dlltool.c:3058
+#: dlltool.c:3162
#, c-format
msgid " -v --verbose Be verbose.\n"
msgstr ""
-#: dlltool.c:3059
+#: dlltool.c:3163
#, c-format
msgid " -V --version Display the program version.\n"
msgstr ""
-#: dlltool.c:3060
+#: dlltool.c:3164
#, c-format
msgid " -h --help Display this information.\n"
msgstr ""
-#: dlltool.c:3061
+#: dlltool.c:3165
#, c-format
msgid " @<file> Read options from <file>.\n"
msgstr ""
-#: dlltool.c:3063
+#: dlltool.c:3167
#, c-format
msgid ""
" -M --mcore-elf <outname> Process mcore-elf object files into <outname>.\n"
msgstr ""
-#: dlltool.c:3064
+#: dlltool.c:3168
#, c-format
msgid " -L --linker <name> Use <name> as the linker.\n"
msgstr ""
-#: dlltool.c:3065
+#: dlltool.c:3169
#, c-format
msgid " -F --linker-flags <flags> Pass <flags> to the linker.\n"
msgstr ""
-#: dlltool.c:3181
+#: dlltool.c:3292
#, c-format
msgid "Path components stripped from dllname, '%s'."
msgstr ""
-#: dlltool.c:3226
+#: dlltool.c:3337
#, c-format
msgid "Unable to open base-file: %s"
msgstr ""
-#: dlltool.c:3258
+#: dlltool.c:3369
#, c-format
msgid "Machine '%s' not supported"
msgstr ""
-#: dlltool.c:3362 dllwrap.c:204
+#: dlltool.c:3473 dllwrap.c:201
#, c-format
msgid "Tried file: %s"
msgstr ""
-#: dlltool.c:3369 dllwrap.c:211
+#: dlltool.c:3480 dllwrap.c:208
#, c-format
msgid "Using file: %s"
msgstr ""
-#: dllwrap.c:294
+#: dllwrap.c:291
#, c-format
msgid "Keeping temporary base file %s"
msgstr ""
-#: dllwrap.c:296
+#: dllwrap.c:293
#, c-format
msgid "Deleting temporary base file %s"
msgstr ""
-#: dllwrap.c:310
+#: dllwrap.c:307
#, c-format
msgid "Keeping temporary exp file %s"
msgstr ""
-#: dllwrap.c:312
+#: dllwrap.c:309
#, c-format
msgid "Deleting temporary exp file %s"
msgstr ""
-#: dllwrap.c:325
+#: dllwrap.c:322
#, c-format
msgid "Keeping temporary def file %s"
msgstr ""
-#: dllwrap.c:327
+#: dllwrap.c:324
#, c-format
msgid "Deleting temporary def file %s"
msgstr ""
-#: dllwrap.c:475
+#: dllwrap.c:472
#, c-format
msgid " Generic options:\n"
msgstr ""
-#: dllwrap.c:476
+#: dllwrap.c:473
#, c-format
msgid " @<file> Read options from <file>\n"
msgstr ""
-#: dllwrap.c:477
+#: dllwrap.c:474
#, c-format
msgid " --quiet, -q Work quietly\n"
msgstr ""
-#: dllwrap.c:478
+#: dllwrap.c:475
#, c-format
msgid " --verbose, -v Verbose\n"
msgstr ""
-#: dllwrap.c:479
+#: dllwrap.c:476
#, c-format
msgid " --version Print dllwrap version\n"
msgstr ""
-#: dllwrap.c:480
+#: dllwrap.c:477
#, c-format
msgid " --implib <outname> Synonym for --output-lib\n"
msgstr ""
-#: dllwrap.c:481
+#: dllwrap.c:478
#, c-format
msgid " Options for %s:\n"
msgstr ""
-#: dllwrap.c:482
+#: dllwrap.c:479
#, c-format
msgid " --driver-name <driver> Defaults to \"gcc\"\n"
msgstr ""
-#: dllwrap.c:483
+#: dllwrap.c:480
#, c-format
msgid " --driver-flags <flags> Override default ld flags\n"
msgstr ""
-#: dllwrap.c:484
+#: dllwrap.c:481
#, c-format
msgid " --dlltool-name <dlltool> Defaults to \"dlltool\"\n"
msgstr ""
-#: dllwrap.c:485
+#: dllwrap.c:482
#, c-format
msgid " --entry <entry> Specify alternate DLL entry point\n"
msgstr ""
-#: dllwrap.c:486
+#: dllwrap.c:483
#, c-format
msgid " --image-base <base> Specify image base address\n"
msgstr ""
-#: dllwrap.c:487
+#: dllwrap.c:484
#, c-format
msgid " --target <machine> i386-cygwin32 or i386-mingw32\n"
msgstr ""
-#: dllwrap.c:488
+#: dllwrap.c:485
#, c-format
msgid " --dry-run Show what needs to be run\n"
msgstr ""
-#: dllwrap.c:489
+#: dllwrap.c:486
#, c-format
msgid " --mno-cygwin Create Mingw DLL\n"
msgstr ""
-#: dllwrap.c:490
+#: dllwrap.c:487
#, c-format
msgid " Options passed to DLLTOOL:\n"
msgstr ""
-#: dllwrap.c:491
+#: dllwrap.c:488
#, c-format
msgid " --machine <machine>\n"
msgstr ""
-#: dllwrap.c:492
+#: dllwrap.c:489
#, c-format
msgid " --output-exp <outname> Generate export file.\n"
msgstr ""
-#: dllwrap.c:493
+#: dllwrap.c:490
#, c-format
msgid " --output-lib <outname> Generate input library.\n"
msgstr ""
-#: dllwrap.c:494
+#: dllwrap.c:491
#, c-format
msgid " --add-indirect Add dll indirects to export file.\n"
msgstr ""
-#: dllwrap.c:495
+#: dllwrap.c:492
#, c-format
msgid " --dllname <name> Name of input dll to put into output lib.\n"
msgstr ""
-#: dllwrap.c:496
+#: dllwrap.c:493
#, c-format
msgid " --def <deffile> Name input .def file\n"
msgstr ""
-#: dllwrap.c:497
+#: dllwrap.c:494
#, c-format
msgid " --output-def <deffile> Name output .def file\n"
msgstr ""
-#: dllwrap.c:498
+#: dllwrap.c:495
#, c-format
msgid " --export-all-symbols Export all symbols to .def\n"
msgstr ""
-#: dllwrap.c:499
+#: dllwrap.c:496
#, c-format
msgid " --no-export-all-symbols Only export .drectve symbols\n"
msgstr ""
-#: dllwrap.c:500
+#: dllwrap.c:497
#, c-format
msgid " --exclude-symbols <list> Exclude <list> from .def\n"
msgstr ""
-#: dllwrap.c:501
+#: dllwrap.c:498
#, c-format
msgid " --no-default-excludes Zap default exclude symbols\n"
msgstr ""
-#: dllwrap.c:502
+#: dllwrap.c:499
#, c-format
msgid " --base-file <basefile> Read linker generated base file\n"
msgstr ""
-#: dllwrap.c:503
+#: dllwrap.c:500
#, c-format
msgid " --no-idata4 Don't generate idata$4 section\n"
msgstr ""
-#: dllwrap.c:504
+#: dllwrap.c:501
#, c-format
msgid " --no-idata5 Don't generate idata$5 section\n"
msgstr ""
-#: dllwrap.c:505
+#: dllwrap.c:502
#, c-format
msgid " -U Add underscores to .lib\n"
msgstr ""
-#: dllwrap.c:506
+#: dllwrap.c:503
#, c-format
msgid " -k Kill @<n> from exported names\n"
msgstr ""
-#: dllwrap.c:507
+#: dllwrap.c:504
#, c-format
msgid " --add-stdcall-alias Add aliases without @<n>\n"
msgstr ""
-#: dllwrap.c:508
+#: dllwrap.c:505
#, c-format
msgid " --as <name> Use <name> for assembler\n"
msgstr ""
-#: dllwrap.c:509
+#: dllwrap.c:506
#, c-format
msgid " --nodelete Keep temp files.\n"
msgstr ""
-#: dllwrap.c:510
+#: dllwrap.c:507
#, c-format
msgid " Rest are passed unmodified to the language driver\n"
msgstr ""
-#: dllwrap.c:782
+#: dllwrap.c:781
msgid "Must provide at least one of -o or --dllname options"
msgstr ""
-#: dllwrap.c:811
+#: dllwrap.c:810
msgid ""
"no export definition file provided.\n"
"Creating one, but that may not be what you want"
msgstr ""
-#: dllwrap.c:970
+#: dllwrap.c:969
#, c-format
msgid "DLLTOOL name : %s\n"
msgstr ""
-#: dllwrap.c:971
+#: dllwrap.c:970
#, c-format
msgid "DLLTOOL options : %s\n"
msgstr ""
-#: dllwrap.c:972
+#: dllwrap.c:971
#, c-format
msgid "DRIVER name : %s\n"
msgstr ""
-#: dllwrap.c:973
+#: dllwrap.c:972
#, c-format
msgid "DRIVER options : %s\n"
msgstr ""
-#: dwarf.c:93 dwarf.c:137 readelf.c:322 readelf.c:515
+#: dwarf.c:93 dwarf.c:137 readelf.c:377 readelf.c:570
#, c-format
msgid "Unhandled data length: %d\n"
msgstr ""
@@ -1183,7 +1206,7 @@ msgstr ""
msgid " define new File Table entry\n"
msgstr ""
-#: dwarf.c:261 dwarf.c:1944
+#: dwarf.c:261 dwarf.c:1928
#, c-format
msgid " Entry\tDir\tTime\tSize\tName\n"
msgstr ""
@@ -1193,7 +1216,7 @@ msgstr ""
msgid " %d\t"
msgstr ""
-#: dwarf.c:266 dwarf.c:268 dwarf.c:270 dwarf.c:1956 dwarf.c:1958 dwarf.c:1960
+#: dwarf.c:266 dwarf.c:268 dwarf.c:270 dwarf.c:1940 dwarf.c:1942 dwarf.c:1944
#, c-format
msgid "%lu\t"
msgstr ""
@@ -1238,154 +1261,152 @@ msgstr ""
msgid " %lu byte block: "
msgstr ""
-#: dwarf.c:907
+#: dwarf.c:910
#, c-format
msgid "(User defined location op)"
msgstr ""
-#: dwarf.c:909
+#: dwarf.c:912
#, c-format
msgid "(Unknown location op)"
msgstr ""
-#: dwarf.c:955
+#: dwarf.c:958
msgid "Internal error: DWARF version is not 2 or 3.\n"
msgstr ""
-#: dwarf.c:1053
+#: dwarf.c:1056
msgid "DW_FORM_data8 is unsupported when sizeof (unsigned long) != 8\n"
msgstr ""
-#: dwarf.c:1102
+#: dwarf.c:1105
#, c-format
msgid " (indirect string, offset: 0x%lx): %s"
msgstr ""
-#: dwarf.c:1111
+#: dwarf.c:1114
#, c-format
msgid "Unrecognized form: %lu\n"
msgstr ""
-#: dwarf.c:1196
+#: dwarf.c:1199
#, c-format
msgid "(not inlined)"
msgstr ""
-#: dwarf.c:1199
+#: dwarf.c:1202
#, c-format
msgid "(inlined)"
msgstr ""
-#: dwarf.c:1202
+#: dwarf.c:1205
#, c-format
msgid "(declared as inline but ignored)"
msgstr ""
-#: dwarf.c:1205
+#: dwarf.c:1208
#, c-format
msgid "(declared as inline and inlined)"
msgstr ""
-#: dwarf.c:1208
+#: dwarf.c:1211
#, c-format
msgid " (Unknown inline attribute value: %lx)"
msgstr ""
-#: dwarf.c:1354 dwarf.c:2484
+#: dwarf.c:1368 dwarf.c:2462
#, c-format
msgid " [without DW_AT_frame_base]"
msgstr ""
-#: dwarf.c:1357
+#: dwarf.c:1371
#, c-format
msgid "(location list)"
msgstr ""
-#: dwarf.c:1475
+#: dwarf.c:1489
#, c-format
msgid "Unknown AT value: %lx"
msgstr ""
-#: dwarf.c:1544
+#: dwarf.c:1558
#, c-format
msgid "No comp units in %s section ?"
msgstr ""
-#: dwarf.c:1553
+#: dwarf.c:1567
#, c-format
msgid "Not enough memory for a debug info array of %u entries"
msgstr ""
-#: dwarf.c:1561 dwarf.c:2573
+#: dwarf.c:1575 dwarf.c:2550
#, c-format
msgid ""
"The section %s contains:\n"
"\n"
msgstr ""
-#: dwarf.c:1569
+#: dwarf.c:1583
#, c-format
msgid "Unable to locate %s section!\n"
msgstr ""
-#: dwarf.c:1635
+#: dwarf.c:1646
#, c-format
msgid " Compilation Unit @ offset 0x%lx:\n"
msgstr ""
-#: dwarf.c:1636
+#: dwarf.c:1647
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: dwarf.c:1637
+#: dwarf.c:1648
#, c-format
msgid " Version: %d\n"
msgstr ""
-#: dwarf.c:1638
+#: dwarf.c:1649
#, c-format
msgid " Abbrev Offset: %ld\n"
msgstr ""
-#: dwarf.c:1639
+#: dwarf.c:1650
#, c-format
msgid " Pointer Size: %d\n"
msgstr ""
-#: dwarf.c:1644
-msgid "Only version 2 and 3 DWARF debug information is currently supported.\n"
+#: dwarf.c:1656
+#, c-format
+msgid "Debug info is corrupted, length is invalid (section is %lu bytes)\n"
msgstr ""
-#: dwarf.c:1685
-#, c-format
-msgid "Unable to locate entry %lu in the abbreviation table\n"
+#: dwarf.c:1665
+msgid "Only version 2 and 3 DWARF debug information is currently supported.\n"
msgstr ""
-#: dwarf.c:1691
+#: dwarf.c:1674
#, c-format
-msgid " <%d><%lx>: Abbrev Number: %lu (%s)\n"
+msgid ""
+"Debug info is corrupted, abbrev offset is invalid (section is %lu bytes)\n"
msgstr ""
-#: dwarf.c:1785
+#: dwarf.c:1702
#, c-format
-msgid "%s section needs a populated .debug_info section\n"
+msgid " <%d><%lx>: Abbrev Number: %lu"
msgstr ""
-#: dwarf.c:1792
+#: dwarf.c:1722
#, c-format
-msgid "%s section has more comp units than .debug_info section\n"
+msgid "Unable to locate entry %lu in the abbreviation table\n"
msgstr ""
-#: dwarf.c:1794
+#: dwarf.c:1728
#, c-format
-msgid ""
-"assuming that the pointer size is %d, from the last comp unit in ."
-"debug_info\n"
-"\n"
+msgid " (%s)\n"
msgstr ""
-#: dwarf.c:1819
+#: dwarf.c:1813
#, c-format
msgid ""
"\n"
@@ -1393,289 +1414,280 @@ msgid ""
"\n"
msgstr ""
-#: dwarf.c:1858
+#: dwarf.c:1851
msgid "The line info appears to be corrupt - the section is too small\n"
msgstr ""
-#: dwarf.c:1867
+#: dwarf.c:1860
msgid "Only DWARF version 2 and 3 line info is currently supported.\n"
msgstr ""
-#: dwarf.c:1894
+#: dwarf.c:1881
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: dwarf.c:1895
+#: dwarf.c:1882
#, c-format
msgid " DWARF Version: %d\n"
msgstr ""
-#: dwarf.c:1896
+#: dwarf.c:1883
#, c-format
msgid " Prologue Length: %d\n"
msgstr ""
-#: dwarf.c:1897
+#: dwarf.c:1884
#, c-format
msgid " Minimum Instruction Length: %d\n"
msgstr ""
-#: dwarf.c:1898
+#: dwarf.c:1885
#, c-format
msgid " Initial value of 'is_stmt': %d\n"
msgstr ""
-#: dwarf.c:1899
+#: dwarf.c:1886
#, c-format
msgid " Line Base: %d\n"
msgstr ""
-#: dwarf.c:1900
+#: dwarf.c:1887
#, c-format
msgid " Line Range: %d\n"
msgstr ""
-#: dwarf.c:1901
+#: dwarf.c:1888
#, c-format
msgid " Opcode Base: %d\n"
msgstr ""
-#: dwarf.c:1902
-#, c-format
-msgid " (Pointer size: %u)%s\n"
-msgstr ""
-
-#: dwarf.c:1913
+#: dwarf.c:1897
#, c-format
msgid ""
"\n"
" Opcodes:\n"
msgstr ""
-#: dwarf.c:1916
+#: dwarf.c:1900
#, c-format
msgid " Opcode %d has %d args\n"
msgstr ""
-#: dwarf.c:1922
+#: dwarf.c:1906
#, c-format
msgid ""
"\n"
" The Directory Table is empty.\n"
msgstr ""
-#: dwarf.c:1925
+#: dwarf.c:1909
#, c-format
msgid ""
"\n"
" The Directory Table:\n"
msgstr ""
-#: dwarf.c:1929
+#: dwarf.c:1913
#, c-format
msgid " %s\n"
msgstr ""
-#: dwarf.c:1940
+#: dwarf.c:1924
#, c-format
msgid ""
"\n"
" The File Name Table is empty.\n"
msgstr ""
-#: dwarf.c:1943
+#: dwarf.c:1927
#, c-format
msgid ""
"\n"
" The File Name Table:\n"
msgstr ""
-#: dwarf.c:1951
+#: dwarf.c:1935
#, c-format
msgid " %d\t"
msgstr ""
-#: dwarf.c:1962
+#: dwarf.c:1946
#, c-format
msgid "%s\n"
msgstr ""
#. Now display the statements.
-#: dwarf.c:1970
+#: dwarf.c:1954
#, c-format
msgid ""
"\n"
" Line Number Statements:\n"
msgstr ""
-#: dwarf.c:1986
+#: dwarf.c:1970
#, c-format
msgid " Special opcode %d: advance Address by %lu to 0x%lx"
msgstr ""
-#: dwarf.c:1990
+#: dwarf.c:1974
#, c-format
msgid " and Line by %d to %d\n"
msgstr ""
-#: dwarf.c:1998
-msgid "Extend line ops need a valid pointer size, guessing at 4\n"
-msgstr ""
-
-#: dwarf.c:2007
+#: dwarf.c:1984
#, c-format
msgid " Copy\n"
msgstr ""
-#: dwarf.c:2015
+#: dwarf.c:1992
#, c-format
msgid " Advance PC by %lu to 0x%lx\n"
msgstr ""
-#: dwarf.c:2023
+#: dwarf.c:2000
#, c-format
msgid " Advance Line by %d to %d\n"
msgstr ""
-#: dwarf.c:2030
+#: dwarf.c:2007
#, c-format
msgid " Set File Name to entry %d in the File Name Table\n"
msgstr ""
-#: dwarf.c:2038
+#: dwarf.c:2015
#, c-format
msgid " Set column to %lu\n"
msgstr ""
-#: dwarf.c:2045
+#: dwarf.c:2022
#, c-format
msgid " Set is_stmt to %d\n"
msgstr ""
-#: dwarf.c:2050
+#: dwarf.c:2027
#, c-format
msgid " Set basic block\n"
msgstr ""
-#: dwarf.c:2058
+#: dwarf.c:2035
#, c-format
msgid " Advance PC by constant %lu to 0x%lx\n"
msgstr ""
-#: dwarf.c:2066
+#: dwarf.c:2043
#, c-format
msgid " Advance PC by fixed size amount %lu to 0x%lx\n"
msgstr ""
-#: dwarf.c:2071
+#: dwarf.c:2048
#, c-format
msgid " Set prologue_end to true\n"
msgstr ""
-#: dwarf.c:2075
+#: dwarf.c:2052
#, c-format
msgid " Set epilogue_begin to true\n"
msgstr ""
-#: dwarf.c:2081
+#: dwarf.c:2058
#, c-format
msgid " Set ISA to %lu\n"
msgstr ""
-#: dwarf.c:2085
+#: dwarf.c:2062
#, c-format
msgid " Unknown opcode %d with operands: "
msgstr ""
-#: dwarf.c:2111 dwarf.c:2197 dwarf.c:2271 dwarf.c:2382 dwarf.c:2514
-#: dwarf.c:2739
+#: dwarf.c:2088 dwarf.c:2174 dwarf.c:2248 dwarf.c:2360 dwarf.c:2492
+#: dwarf.c:2731
#, c-format
msgid ""
"Contents of the %s section:\n"
"\n"
msgstr ""
-#: dwarf.c:2151
+#: dwarf.c:2128
msgid "Only DWARF 2 and 3 pubnames are currently supported\n"
msgstr ""
-#: dwarf.c:2158
+#: dwarf.c:2135
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: dwarf.c:2160
+#: dwarf.c:2137
#, c-format
msgid " Version: %d\n"
msgstr ""
-#: dwarf.c:2162
+#: dwarf.c:2139
#, c-format
msgid " Offset into .debug_info section: %ld\n"
msgstr ""
-#: dwarf.c:2164
+#: dwarf.c:2141
#, c-format
msgid " Size of area in .debug_info section: %ld\n"
msgstr ""
-#: dwarf.c:2167
+#: dwarf.c:2144
#, c-format
msgid ""
"\n"
" Offset\tName\n"
msgstr ""
-#: dwarf.c:2218
+#: dwarf.c:2195
#, c-format
msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n"
msgstr ""
-#: dwarf.c:2224
+#: dwarf.c:2201
#, c-format
msgid " DW_MACINFO_end_file\n"
msgstr ""
-#: dwarf.c:2232
+#: dwarf.c:2209
#, c-format
msgid " DW_MACINFO_define - lineno : %d macro : %s\n"
msgstr ""
-#: dwarf.c:2241
+#: dwarf.c:2218
#, c-format
msgid " DW_MACINFO_undef - lineno : %d macro : %s\n"
msgstr ""
-#: dwarf.c:2253
+#: dwarf.c:2230
#, c-format
msgid " DW_MACINFO_vendor_ext - constant : %d string : %s\n"
msgstr ""
-#: dwarf.c:2282
+#: dwarf.c:2259
#, c-format
msgid " Number TAG\n"
msgstr ""
-#: dwarf.c:2288
+#: dwarf.c:2265
#, c-format
msgid " %ld %s [%s]\n"
msgstr ""
-#: dwarf.c:2291
+#: dwarf.c:2268
msgid "has children"
msgstr ""
-#: dwarf.c:2291
+#: dwarf.c:2268
msgid "no children"
msgstr ""
-#: dwarf.c:2294
+#: dwarf.c:2271
#, c-format
msgid " %-18s %s\n"
msgstr ""
-#: dwarf.c:2327 dwarf.c:2510 dwarf.c:2684
+#: dwarf.c:2304 dwarf.c:2488 dwarf.c:2675
#, c-format
msgid ""
"\n"
@@ -1683,148 +1695,164 @@ msgid ""
msgstr ""
#. FIXME: Should we handle this case?
-#: dwarf.c:2372
+#: dwarf.c:2349
msgid "Location lists in .debug_info section aren't in ascending order!\n"
msgstr ""
-#: dwarf.c:2375
+#: dwarf.c:2352
msgid "No location lists in .debug_info section!\n"
msgstr ""
-#: dwarf.c:2379
+#: dwarf.c:2357
#, c-format
msgid "Location lists in %s section start at 0x%lx\n"
msgstr ""
-#: dwarf.c:2383
+#: dwarf.c:2361
#, c-format
msgid " Offset Begin End Expression\n"
msgstr ""
-#: dwarf.c:2414
+#: dwarf.c:2392
#, c-format
msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n"
msgstr ""
-#: dwarf.c:2417
+#: dwarf.c:2395
#, c-format
msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n"
msgstr ""
-#: dwarf.c:2424
+#: dwarf.c:2402
#, c-format
msgid "Offset 0x%lx is bigger than .debug_loc section size.\n"
msgstr ""
-#: dwarf.c:2433 dwarf.c:2460 dwarf.c:2470
+#: dwarf.c:2411 dwarf.c:2438 dwarf.c:2448
#, c-format
msgid "Location list starting at offset 0x%lx is not terminated.\n"
msgstr ""
-#: dwarf.c:2445 dwarf.c:2784
+#: dwarf.c:2423 dwarf.c:2776
#, c-format
msgid " %8.8lx <End of list>\n"
msgstr ""
-#: dwarf.c:2453
+#: dwarf.c:2431
#, c-format
msgid " %8.8lx %8.8lx %8.8lx (base address)\n"
msgstr ""
-#: dwarf.c:2487 dwarf.c:2801
+#: dwarf.c:2465 dwarf.c:2793
msgid " (start == end)"
msgstr ""
-#: dwarf.c:2489 dwarf.c:2803
+#: dwarf.c:2467 dwarf.c:2795
msgid " (start > end)"
msgstr ""
-#: dwarf.c:2618
+#: dwarf.c:2596
msgid "Only DWARF 2 and 3 aranges are currently supported.\n"
msgstr ""
-#: dwarf.c:2622
+#: dwarf.c:2600
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: dwarf.c:2623
+#: dwarf.c:2601
#, c-format
msgid " Version: %d\n"
msgstr ""
-#: dwarf.c:2624
+#: dwarf.c:2602
#, c-format
msgid " Offset into .debug_info: %lx\n"
msgstr ""
-#: dwarf.c:2625
+#: dwarf.c:2603
#, c-format
msgid " Pointer Size: %d\n"
msgstr ""
-#: dwarf.c:2626
+#: dwarf.c:2604
#, c-format
msgid " Segment Size: %d\n"
msgstr ""
-#: dwarf.c:2628
+#: dwarf.c:2613
+msgid "Pointer size + Segment size is not a power of two.\n"
+msgstr ""
+
+#: dwarf.c:2618
#, c-format
msgid ""
"\n"
-" Address Length\n"
+" Address Length\n"
+msgstr ""
+
+#: dwarf.c:2620
+#, c-format
+msgid ""
+"\n"
+" Address Length\n"
msgstr ""
#. FIXME: Should we handle this case?
-#: dwarf.c:2729
+#: dwarf.c:2720
msgid "Range lists in .debug_info section aren't in ascending order!\n"
msgstr ""
-#: dwarf.c:2732
+#: dwarf.c:2723
msgid "No range lists in .debug_info section!\n"
msgstr ""
-#: dwarf.c:2736
+#: dwarf.c:2728
#, c-format
msgid "Range lists in %s section start at 0x%lx\n"
msgstr ""
-#: dwarf.c:2740
+#: dwarf.c:2732
#, c-format
msgid " Offset Begin End\n"
msgstr ""
-#: dwarf.c:2765
+#: dwarf.c:2757
#, c-format
msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
msgstr ""
-#: dwarf.c:2769
+#: dwarf.c:2761
#, c-format
msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
msgstr ""
-#: dwarf.c:2964
+#: dwarf.c:2963
#, c-format
msgid "The section %s contains:\n"
msgstr ""
-#: dwarf.c:3608
+#: dwarf.c:3650
+#, c-format
+msgid " DW_CFA_??? (User defined call frame op: %#x)\n"
+msgstr ""
+
+#: dwarf.c:3652
#, c-format
-msgid "unsupported or unknown DW_CFA_%d\n"
+msgid "unsupported or unknown Dwarf Call Frame Instruction number: %#x\n"
msgstr ""
-#: dwarf.c:3632
+#: dwarf.c:3676
#, c-format
msgid "Displaying the debug contents of section %s is not yet supported.\n"
msgstr ""
-#: dwarf.c:3674
+#: dwarf.c:3718
#, c-format
msgid "%s: Error: "
msgstr ""
-#: dwarf.c:3685
+#: dwarf.c:3729
#, c-format
msgid "%s: Warning: "
msgstr ""
@@ -1849,223 +1877,223 @@ msgstr ""
msgid " [-X32_64] - accepts 32 and 64 bit objects\n"
msgstr ""
-#: ieee.c:311
+#: ieee.c:309
msgid "unexpected end of debugging information"
msgstr ""
-#: ieee.c:398
+#: ieee.c:396
msgid "invalid number"
msgstr ""
-#: ieee.c:451
+#: ieee.c:449
msgid "invalid string length"
msgstr ""
-#: ieee.c:506 ieee.c:547
+#: ieee.c:504 ieee.c:545
msgid "expression stack overflow"
msgstr ""
-#: ieee.c:526
+#: ieee.c:524
msgid "unsupported IEEE expression operator"
msgstr ""
-#: ieee.c:541
+#: ieee.c:539
msgid "unknown section"
msgstr ""
-#: ieee.c:562
+#: ieee.c:560
msgid "expression stack underflow"
msgstr ""
-#: ieee.c:576
+#: ieee.c:574
msgid "expression stack mismatch"
msgstr ""
-#: ieee.c:613
+#: ieee.c:611
msgid "unknown builtin type"
msgstr ""
-#: ieee.c:758
+#: ieee.c:756
msgid "BCD float type not supported"
msgstr ""
-#: ieee.c:895
+#: ieee.c:893
msgid "unexpected number"
msgstr ""
-#: ieee.c:902
+#: ieee.c:900
msgid "unexpected record type"
msgstr ""
-#: ieee.c:935
+#: ieee.c:933
msgid "blocks left on stack at end"
msgstr ""
-#: ieee.c:1198
+#: ieee.c:1196
msgid "unknown BB type"
msgstr ""
-#: ieee.c:1207
+#: ieee.c:1205
msgid "stack overflow"
msgstr ""
-#: ieee.c:1230
+#: ieee.c:1228
msgid "stack underflow"
msgstr ""
-#: ieee.c:1342 ieee.c:1412 ieee.c:2109
+#: ieee.c:1340 ieee.c:1410 ieee.c:2107
msgid "illegal variable index"
msgstr ""
-#: ieee.c:1390
+#: ieee.c:1388
msgid "illegal type index"
msgstr ""
-#: ieee.c:1400 ieee.c:1437
+#: ieee.c:1398 ieee.c:1435
msgid "unknown TY code"
msgstr ""
-#: ieee.c:1419
+#: ieee.c:1417
msgid "undefined variable in TY"
msgstr ""
#. Pascal file name. FIXME.
-#: ieee.c:1830
+#: ieee.c:1828
msgid "Pascal file name not supported"
msgstr ""
-#: ieee.c:1878
+#: ieee.c:1876
msgid "unsupported qualifier"
msgstr ""
-#: ieee.c:2147
+#: ieee.c:2145
msgid "undefined variable in ATN"
msgstr ""
-#: ieee.c:2190
+#: ieee.c:2188
msgid "unknown ATN type"
msgstr ""
#. Reserved for FORTRAN common.
-#: ieee.c:2312
+#: ieee.c:2310
msgid "unsupported ATN11"
msgstr ""
#. We have no way to record this information. FIXME.
-#: ieee.c:2339
+#: ieee.c:2337
msgid "unsupported ATN12"
msgstr ""
-#: ieee.c:2399
+#: ieee.c:2397
msgid "unexpected string in C++ misc"
msgstr ""
-#: ieee.c:2412
+#: ieee.c:2410
msgid "bad misc record"
msgstr ""
-#: ieee.c:2453
+#: ieee.c:2451
msgid "unrecognized C++ misc record"
msgstr ""
-#: ieee.c:2568
+#: ieee.c:2566
msgid "undefined C++ object"
msgstr ""
-#: ieee.c:2602
+#: ieee.c:2600
msgid "unrecognized C++ object spec"
msgstr ""
-#: ieee.c:2638
+#: ieee.c:2636
msgid "unsupported C++ object type"
msgstr ""
-#: ieee.c:2648
+#: ieee.c:2646
msgid "C++ base class not defined"
msgstr ""
-#: ieee.c:2660 ieee.c:2765
+#: ieee.c:2658 ieee.c:2763
msgid "C++ object has no fields"
msgstr ""
-#: ieee.c:2679
+#: ieee.c:2677
msgid "C++ base class not found in container"
msgstr ""
-#: ieee.c:2786
+#: ieee.c:2784
msgid "C++ data member not found in container"
msgstr ""
-#: ieee.c:2827 ieee.c:2977
+#: ieee.c:2825 ieee.c:2975
msgid "unknown C++ visibility"
msgstr ""
-#: ieee.c:2861
+#: ieee.c:2859
msgid "bad C++ field bit pos or size"
msgstr ""
-#: ieee.c:2953
+#: ieee.c:2951
msgid "bad type for C++ method function"
msgstr ""
-#: ieee.c:2963
+#: ieee.c:2961
msgid "no type information for C++ method function"
msgstr ""
-#: ieee.c:3002
+#: ieee.c:3000
msgid "C++ static virtual method"
msgstr ""
-#: ieee.c:3097
+#: ieee.c:3095
msgid "unrecognized C++ object overhead spec"
msgstr ""
-#: ieee.c:3136
+#: ieee.c:3134
msgid "undefined C++ vtable"
msgstr ""
-#: ieee.c:3205
+#: ieee.c:3203
msgid "C++ default values not in a function"
msgstr ""
-#: ieee.c:3245
+#: ieee.c:3243
msgid "unrecognized C++ default type"
msgstr ""
-#: ieee.c:3276
+#: ieee.c:3274
msgid "reference parameter is not a pointer"
msgstr ""
-#: ieee.c:3359
+#: ieee.c:3357
msgid "unrecognized C++ reference type"
msgstr ""
-#: ieee.c:3441
+#: ieee.c:3439
msgid "C++ reference not found"
msgstr ""
-#: ieee.c:3449
+#: ieee.c:3447
msgid "C++ reference is not pointer"
msgstr ""
-#: ieee.c:3475 ieee.c:3483
+#: ieee.c:3473 ieee.c:3481
msgid "missing required ASN"
msgstr ""
-#: ieee.c:3510 ieee.c:3518
+#: ieee.c:3508 ieee.c:3516
msgid "missing required ATN65"
msgstr ""
-#: ieee.c:3532
+#: ieee.c:3530
msgid "bad ATN65 record"
msgstr ""
-#: ieee.c:4160
+#: ieee.c:4158
#, c-format
msgid "IEEE numeric overflow: 0x"
msgstr ""
-#: ieee.c:4204
+#: ieee.c:4202
#, c-format
msgid "IEEE string length overflow: %u\n"
msgstr ""
@@ -2085,124 +2113,128 @@ msgstr ""
msgid "IEEE unsupported complex type size %u\n"
msgstr ""
-#: nlmconv.c:269 srconv.c:1813
+#: mclex.c:241
+msgid "Duplicate symbol entered into keyword list."
+msgstr ""
+
+#: nlmconv.c:271 srconv.c:1815
msgid "input and output files must be different"
msgstr ""
-#: nlmconv.c:316
+#: nlmconv.c:318
msgid "input file named both on command line and with INPUT"
msgstr ""
-#: nlmconv.c:325
+#: nlmconv.c:327
msgid "no input file"
msgstr ""
-#: nlmconv.c:355
+#: nlmconv.c:357
msgid "no name for output file"
msgstr ""
-#: nlmconv.c:369
+#: nlmconv.c:371
msgid "warning: input and output formats are not compatible"
msgstr ""
-#: nlmconv.c:398
+#: nlmconv.c:400
msgid "make .bss section"
msgstr ""
-#: nlmconv.c:407
+#: nlmconv.c:409
msgid "make .nlmsections section"
msgstr ""
-#: nlmconv.c:409
+#: nlmconv.c:411
msgid "set .nlmsections flags"
msgstr ""
-#: nlmconv.c:437
+#: nlmconv.c:439
msgid "set .bss vma"
msgstr ""
-#: nlmconv.c:444
+#: nlmconv.c:446
msgid "set .data size"
msgstr ""
-#: nlmconv.c:624
+#: nlmconv.c:626
#, c-format
msgid "warning: symbol %s imported but not in import list"
msgstr ""
-#: nlmconv.c:644
+#: nlmconv.c:646
msgid "set start address"
msgstr ""
-#: nlmconv.c:693
+#: nlmconv.c:695
#, c-format
msgid "warning: START procedure %s not defined"
msgstr ""
-#: nlmconv.c:695
+#: nlmconv.c:697
#, c-format
msgid "warning: EXIT procedure %s not defined"
msgstr ""
-#: nlmconv.c:697
+#: nlmconv.c:699
#, c-format
msgid "warning: CHECK procedure %s not defined"
msgstr ""
-#: nlmconv.c:718 nlmconv.c:907
+#: nlmconv.c:720 nlmconv.c:909
msgid "custom section"
msgstr ""
-#: nlmconv.c:739 nlmconv.c:936
+#: nlmconv.c:741 nlmconv.c:938
msgid "help section"
msgstr ""
-#: nlmconv.c:761 nlmconv.c:954
+#: nlmconv.c:763 nlmconv.c:956
msgid "message section"
msgstr ""
-#: nlmconv.c:777 nlmconv.c:987
+#: nlmconv.c:779 nlmconv.c:989
msgid "module section"
msgstr ""
-#: nlmconv.c:797 nlmconv.c:1003
+#: nlmconv.c:799 nlmconv.c:1005
msgid "rpc section"
msgstr ""
#. There is no place to record this information.
-#: nlmconv.c:833
+#: nlmconv.c:835
#, c-format
msgid "%s: warning: shared libraries can not have uninitialized data"
msgstr ""
-#: nlmconv.c:854 nlmconv.c:1022
+#: nlmconv.c:856 nlmconv.c:1024
msgid "shared section"
msgstr ""
-#: nlmconv.c:862
+#: nlmconv.c:864
msgid "warning: No version number given"
msgstr ""
-#: nlmconv.c:902 nlmconv.c:931 nlmconv.c:949 nlmconv.c:998 nlmconv.c:1017
+#: nlmconv.c:904 nlmconv.c:933 nlmconv.c:951 nlmconv.c:1000 nlmconv.c:1019
#, c-format
msgid "%s: read: %s"
msgstr ""
-#: nlmconv.c:924
+#: nlmconv.c:926
msgid "warning: FULLMAP is not supported; try ld -M"
msgstr ""
-#: nlmconv.c:1100
+#: nlmconv.c:1102
#, c-format
msgid "Usage: %s [option(s)] [in-file [out-file]]\n"
msgstr ""
-#: nlmconv.c:1101
+#: nlmconv.c:1103
#, c-format
msgid " Convert an object file into a NetWare Loadable Module\n"
msgstr ""
-#: nlmconv.c:1102
+#: nlmconv.c:1104
#, c-format
msgid ""
" The options are:\n"
@@ -2216,74 +2248,74 @@ msgid ""
" -v --version Display the program's version\n"
msgstr ""
-#: nlmconv.c:1143
+#: nlmconv.c:1145
#, c-format
msgid "support not compiled in for %s"
msgstr ""
-#: nlmconv.c:1180
+#: nlmconv.c:1182
msgid "make section"
msgstr ""
-#: nlmconv.c:1194
+#: nlmconv.c:1196
msgid "set section size"
msgstr ""
-#: nlmconv.c:1200
+#: nlmconv.c:1202
msgid "set section alignment"
msgstr ""
-#: nlmconv.c:1204
+#: nlmconv.c:1206
msgid "set section flags"
msgstr ""
-#: nlmconv.c:1215
+#: nlmconv.c:1217
msgid "set .nlmsections size"
msgstr ""
-#: nlmconv.c:1296 nlmconv.c:1304 nlmconv.c:1313 nlmconv.c:1318
+#: nlmconv.c:1298 nlmconv.c:1306 nlmconv.c:1315 nlmconv.c:1320
msgid "set .nlmsection contents"
msgstr ""
-#: nlmconv.c:1797
+#: nlmconv.c:1799
msgid "stub section sizes"
msgstr ""
-#: nlmconv.c:1844
+#: nlmconv.c:1846
msgid "writing stub"
msgstr ""
-#: nlmconv.c:1928
+#: nlmconv.c:1930
#, c-format
msgid "unresolved PC relative reloc against %s"
msgstr ""
-#: nlmconv.c:1992
+#: nlmconv.c:1994
#, c-format
msgid "overflow when adjusting relocation against %s"
msgstr ""
-#: nlmconv.c:2119
+#: nlmconv.c:2121
#, c-format
msgid "%s: execution of %s failed: "
msgstr ""
-#: nlmconv.c:2134
+#: nlmconv.c:2136
#, c-format
msgid "Execution of %s failed"
msgstr ""
-#: nm.c:224 size.c:82 strings.c:708
+#: nm.c:213 size.c:83 strings.c:705
#, c-format
msgid "Usage: %s [option(s)] [file(s)]\n"
msgstr ""
-#: nm.c:225
+#: nm.c:214
#, c-format
msgid " List symbols in [file(s)] (a.out by default).\n"
msgstr ""
-#: nm.c:226
+#: nm.c:215
#, c-format
msgid ""
" The options are:\n"
@@ -2327,44 +2359,39 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:263 objdump.c:236
-#, c-format
-msgid "Report bugs to %s.\n"
-msgstr ""
-
-#: nm.c:295
+#: nm.c:276
#, c-format
msgid "%s: invalid radix"
msgstr ""
-#: nm.c:319
+#: nm.c:300
#, c-format
msgid "%s: invalid output format"
msgstr ""
-#: nm.c:340 readelf.c:6623 readelf.c:6659
+#: nm.c:321 readelf.c:6853 readelf.c:6891
#, c-format
msgid "<processor specific>: %d"
msgstr ""
-#: nm.c:342 readelf.c:6626 readelf.c:6671
+#: nm.c:323 readelf.c:6856 readelf.c:6903
#, c-format
msgid "<OS specific>: %d"
msgstr ""
-#: nm.c:344 readelf.c:6628 readelf.c:6674
+#: nm.c:325 readelf.c:6858 readelf.c:6906
#, c-format
msgid "<unknown>: %d"
msgstr ""
-#: nm.c:381
+#: nm.c:365
#, c-format
msgid ""
"\n"
"Archive index:\n"
msgstr ""
-#: nm.c:1227
+#: nm.c:1225
#, c-format
msgid ""
"\n"
@@ -2373,7 +2400,7 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1229
+#: nm.c:1227
#, c-format
msgid ""
"\n"
@@ -2382,7 +2409,7 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1231 nm.c:1282
+#: nm.c:1229 nm.c:1280
#, c-format
msgid ""
"Name Value Class Type Size Line "
@@ -2390,7 +2417,7 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1234 nm.c:1285
+#: nm.c:1232 nm.c:1283
#, c-format
msgid ""
"Name Value Class Type "
@@ -2398,7 +2425,7 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1278
+#: nm.c:1276
#, c-format
msgid ""
"\n"
@@ -2407,7 +2434,7 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1280
+#: nm.c:1278
#, c-format
msgid ""
"\n"
@@ -2416,39 +2443,44 @@ msgid ""
"\n"
msgstr ""
-#: nm.c:1584
+#: nm.c:1370
+#, c-format
+msgid "Print width has not been initialized (%d)"
+msgstr ""
+
+#: nm.c:1595
msgid "Only -X 32_64 is supported"
msgstr ""
-#: nm.c:1604
+#: nm.c:1615
msgid "Using the --size-sort and --undefined-only options together"
msgstr ""
-#: nm.c:1605
+#: nm.c:1616
msgid "will produce no output, since undefined symbols have no size."
msgstr ""
-#: nm.c:1633
+#: nm.c:1644
#, c-format
msgid "data size %ld"
msgstr ""
-#: objcopy.c:401 srconv.c:1721
+#: objcopy.c:426 srconv.c:1723
#, c-format
msgid "Usage: %s [option(s)] in-file [out-file]\n"
msgstr ""
-#: objcopy.c:402
+#: objcopy.c:427
#, c-format
msgid " Copies a binary file, possibly transforming it in the process\n"
msgstr ""
-#: objcopy.c:403 objcopy.c:495
+#: objcopy.c:428 objcopy.c:524
#, c-format
msgid " The options are:\n"
msgstr ""
-#: objcopy.c:404
+#: objcopy.c:429
#, c-format
msgid ""
" -I --input-target <bfdname> Assume input file is in format <bfdname>\n"
@@ -2478,7 +2510,10 @@ msgid ""
" relocations\n"
" --only-keep-debug Strip everything but the debug "
"information\n"
+" --extract-symbol Remove section contents but keep symbols\n"
" -K --keep-symbol <name> Do not strip symbol <name>\n"
+" --keep-file-symbols Do not strip file symbol(s)\n"
+" --localize-hidden Turn all ELF hidden symbols into locals\n"
" -L --localize-symbol <name> Force symbol <name> to be marked as a "
"local\n"
" --globalize-symbol <name> Force symbol <name> to be marked as a "
@@ -2525,6 +2560,8 @@ msgid ""
"style\n"
" --remove-leading-char Remove leading character from global "
"symbols\n"
+" --reverse-bytes=<num> Reverse <num> bytes at a time, in output "
+"sections with content\n"
" --redefine-sym <old>=<new> Redefine symbol name <old> to <new>\n"
" --redefine-syms <file> --redefine-sym for all symbol pairs \n"
" listed in <file>\n"
@@ -2542,7 +2579,8 @@ msgid ""
" --globalize-symbols <file> --globalize-symbol for all in <file>\n"
" --keep-global-symbols <file> -G for all symbols listed in <file>\n"
" --weaken-symbols <file> -W for all symbols listed in <file>\n"
-" --alt-machine-code <index> Use alternate machine code for output\n"
+" --alt-machine-code <index> Use the target's <index>'th alternative "
+"machine\n"
" --writable-text Mark the output text as writable\n"
" --readonly-text Make the output text write protected\n"
" --pure Mark the output file as demand paged\n"
@@ -2563,17 +2601,17 @@ msgid ""
"supported\n"
msgstr ""
-#: objcopy.c:493
+#: objcopy.c:522
#, c-format
msgid "Usage: %s <option(s)> in-file(s)\n"
msgstr ""
-#: objcopy.c:494
+#: objcopy.c:523
#, c-format
msgid " Removes symbols and sections from files\n"
msgstr ""
-#: objcopy.c:496
+#: objcopy.c:525
#, c-format
msgid ""
" -I --input-target=<bfdname> Assume input file is in format <bfdname>\n"
@@ -2593,6 +2631,7 @@ msgid ""
"information\n"
" -N --strip-symbol=<name> Do not copy symbol <name>\n"
" -K --keep-symbol=<name> Do not strip symbol <name>\n"
+" --keep-file-symbols Do not strip file symbol(s)\n"
" -w --wildcard Permit wildcard in symbol comparison\n"
" -x --discard-all Remove all non-global symbols\n"
" -X --discard-locals Remove any compiler-generated symbols\n"
@@ -2604,260 +2643,297 @@ msgid ""
" -o <file> Place stripped output into <file>\n"
msgstr ""
-#: objcopy.c:568
+#: objcopy.c:598
#, c-format
msgid "unrecognized section flag `%s'"
msgstr ""
-#: objcopy.c:569
+#: objcopy.c:599
#, c-format
msgid "supported flags: %s"
msgstr ""
-#: objcopy.c:646
+#: objcopy.c:679
#, c-format
msgid "cannot open '%s': %s"
msgstr ""
-#: objcopy.c:649 objcopy.c:2722
+#: objcopy.c:682 objcopy.c:2987
#, c-format
msgid "%s: fread failed"
msgstr ""
-#: objcopy.c:722
+#: objcopy.c:755
#, c-format
msgid "%s:%d: Ignoring rubbish found on this line"
msgstr ""
-#: objcopy.c:996
+#: objcopy.c:1033
+#, c-format
+msgid "not stripping symbol `%s' because it is named in a relocation"
+msgstr ""
+
+#: objcopy.c:1116
#, c-format
msgid "%s: Multiple redefinition of symbol \"%s\""
msgstr ""
-#: objcopy.c:1000
+#: objcopy.c:1120
#, c-format
msgid "%s: Symbol \"%s\" is target of more than one redefinition"
msgstr ""
-#: objcopy.c:1028
+#: objcopy.c:1148
#, c-format
msgid "couldn't open symbol redefinition file %s (error: %s)"
msgstr ""
-#: objcopy.c:1106
+#: objcopy.c:1226
#, c-format
msgid "%s:%d: garbage found at end of line"
msgstr ""
-#: objcopy.c:1109
+#: objcopy.c:1229
#, c-format
msgid "%s:%d: missing new symbol name"
msgstr ""
-#: objcopy.c:1119
+#: objcopy.c:1239
#, c-format
msgid "%s:%d: premature end of file"
msgstr ""
-#: objcopy.c:1145
+#: objcopy.c:1265
#, c-format
msgid "stat returns negative size for `%s'"
msgstr ""
-#: objcopy.c:1157
+#: objcopy.c:1277
#, c-format
msgid "copy from `%s' [unknown] to `%s' [unknown]\n"
msgstr ""
-#: objcopy.c:1212
+#: objcopy.c:1332
msgid "Unable to change endianness of input file(s)"
msgstr ""
-#: objcopy.c:1221
+#: objcopy.c:1341
#, c-format
msgid "copy from `%s' [%s] to `%s' [%s]\n"
msgstr ""
-#: objcopy.c:1258 objcopy.c:1715
+#: objcopy.c:1383 objcopy.c:1908
#, c-format
msgid "Unable to recognise the format of the input file `%s'"
msgstr ""
-#: objcopy.c:1261
+#: objcopy.c:1386
#, c-format
msgid "Warning: Output file cannot represent architecture `%s'"
msgstr ""
-#: objcopy.c:1305
+#: objcopy.c:1449
#, c-format
-msgid "can't create section `%s': %s"
+msgid "can't add section '%s' - it already exists!"
msgstr ""
-#: objcopy.c:1356
-msgid "there are no sections to be copied!"
+#: objcopy.c:1457
+#, c-format
+msgid "can't create section `%s': %s"
msgstr ""
-#: objcopy.c:1402
+#: objcopy.c:1593
#, c-format
msgid "Can't fill gap after %s: %s"
msgstr ""
-#: objcopy.c:1427
+#: objcopy.c:1618
#, c-format
msgid "Can't add padding to %s: %s"
msgstr ""
-#: objcopy.c:1594
+#: objcopy.c:1771
#, c-format
msgid "%s: error copying private BFD data: %s"
msgstr ""
-#: objcopy.c:1605
-msgid "unknown alternate machine code, ignored"
+#: objcopy.c:1784
+#, c-format
+msgid "this target does not support %lu alternative machine codes"
msgstr ""
-#: objcopy.c:1635 objcopy.c:1665
-#, c-format
-msgid "cannot mkdir %s for archive copying (error: %s)"
+#: objcopy.c:1788
+msgid "treating that number as an absolute e_machine value instead"
+msgstr ""
+
+#: objcopy.c:1792
+msgid "ignoring the alternative value"
msgstr ""
-#: objcopy.c:1787
+#: objcopy.c:1822 objcopy.c:1852
#, c-format
-msgid "error: the input file '%s' is empty"
+msgid "cannot create tempdir for archive copying (error: %s)"
msgstr ""
-#: objcopy.c:1889
+#: objcopy.c:2088
#, c-format
msgid "Multiple renames of section %s"
msgstr ""
-#: objcopy.c:1940
+#: objcopy.c:2139
msgid "private header data"
msgstr ""
-#: objcopy.c:1948
+#: objcopy.c:2147
#, c-format
msgid "%s: error in %s: %s"
msgstr ""
-#: objcopy.c:2007
+#: objcopy.c:2208
msgid "making"
msgstr ""
-#: objcopy.c:2022
+#: objcopy.c:2228
msgid "size"
msgstr ""
-#: objcopy.c:2036
+#: objcopy.c:2242
msgid "vma"
msgstr ""
-#: objcopy.c:2061
+#: objcopy.c:2267
msgid "alignment"
msgstr ""
-#: objcopy.c:2083
+#: objcopy.c:2289
msgid "private data"
msgstr ""
-#: objcopy.c:2091
+#: objcopy.c:2304
#, c-format
msgid "%s: section `%s': error in %s: %s"
msgstr ""
-#: objcopy.c:2363
+#. User must pad the section up in order to do this.
+#: objcopy.c:2429
+#, c-format
+msgid ""
+"cannot reverse bytes: length of section %s must be evenly divisible by %d"
+msgstr ""
+
+#: objcopy.c:2605
#, c-format
msgid "%s: can't create debugging section: %s"
msgstr ""
-#: objcopy.c:2377
+#: objcopy.c:2619
#, c-format
msgid "%s: can't set debugging section contents: %s"
msgstr ""
-#: objcopy.c:2386
+#: objcopy.c:2628
#, c-format
msgid "%s: don't know how to write debugging information for %s"
msgstr ""
-#: objcopy.c:2561
+#: objcopy.c:2769
+#, c-format
+msgid "could not create temporary file to hold stripped copy of '%s'"
+msgstr ""
+
+#: objcopy.c:2819
msgid "byte number must be non-negative"
msgstr ""
-#: objcopy.c:2571
+#: objcopy.c:2829
msgid "interleave must be positive"
msgstr ""
-#: objcopy.c:2591 objcopy.c:2599
+#: objcopy.c:2849 objcopy.c:2857
#, c-format
msgid "%s both copied and removed"
msgstr ""
-#: objcopy.c:2696 objcopy.c:2767 objcopy.c:2867 objcopy.c:2898 objcopy.c:2922
-#: objcopy.c:2926 objcopy.c:2946
+#: objcopy.c:2958 objcopy.c:3032 objcopy.c:3132 objcopy.c:3163 objcopy.c:3187
+#: objcopy.c:3191 objcopy.c:3211
#, c-format
msgid "bad format for %s"
msgstr ""
-#: objcopy.c:2717
+#: objcopy.c:2982
#, c-format
msgid "cannot open: %s: %s"
msgstr ""
-#: objcopy.c:2836
+#: objcopy.c:3101
#, c-format
msgid "Warning: truncating gap-fill from 0x%s to 0x%x"
msgstr ""
-#: objcopy.c:3000
-msgid "alternate machine code index must be positive"
+#: objcopy.c:3269
+msgid "unable to parse alternative machine code"
+msgstr ""
+
+#: objcopy.c:3314
+msgid "number of bytes to reverse must be positive and even"
+msgstr ""
+
+#: objcopy.c:3317
+#, c-format
+msgid "Warning: ignoring previous --reverse-bytes value of %d"
msgstr ""
-#: objcopy.c:3058
+#: objcopy.c:3345
msgid "byte number must be less than interleave"
msgstr ""
-#: objcopy.c:3088
+#: objcopy.c:3375
#, c-format
msgid "architecture %s unknown"
msgstr ""
-#: objcopy.c:3092
+#: objcopy.c:3379
msgid ""
"Warning: input target 'binary' required for binary architecture parameter."
msgstr ""
-#: objcopy.c:3093
+#: objcopy.c:3380
#, c-format
msgid " Argument %s ignored"
msgstr ""
-#: objcopy.c:3099
+#: objcopy.c:3386
#, c-format
msgid "warning: could not locate '%s'. System error message: %s"
msgstr ""
-#: objcopy.c:3141 objcopy.c:3155
+#: objcopy.c:3397
+#, c-format
+msgid ""
+"warning: could not create temporary file whilst copying '%s', (error: %s)"
+msgstr ""
+
+#: objcopy.c:3424 objcopy.c:3438
#, c-format
msgid "%s %s%c0x%s never used"
msgstr ""
-#: objdump.c:178
+#: objdump.c:176
#, c-format
msgid "Usage: %s <option(s)> <file(s)>\n"
msgstr ""
-#: objdump.c:179
+#: objdump.c:177
#, c-format
msgid " Display information from object <file(s)>.\n"
msgstr ""
-#: objdump.c:180
+#: objdump.c:178
#, c-format
msgid " At least one of the following switches must be given:\n"
msgstr ""
-#: objdump.c:181
+#: objdump.c:179
#, c-format
msgid ""
" -a, --archive-headers Display archive header information\n"
@@ -2887,14 +2963,14 @@ msgid ""
" -H, --help Display this information\n"
msgstr ""
-#: objdump.c:206
+#: objdump.c:204
#, c-format
msgid ""
"\n"
" The following switches are optional:\n"
msgstr ""
-#: objdump.c:207
+#: objdump.c:205
#, c-format
msgid ""
" -b, --target=BFDNAME Specify the target object format as "
@@ -2931,347 +3007,364 @@ msgid ""
"\n"
msgstr ""
-#: objdump.c:389
+#: objdump.c:387
#, c-format
msgid "Sections:\n"
msgstr ""
-#: objdump.c:392 objdump.c:396
+#: objdump.c:390 objdump.c:394
#, c-format
msgid "Idx Name Size VMA LMA File off Algn"
msgstr ""
-#: objdump.c:398
+#: objdump.c:396
#, c-format
msgid ""
"Idx Name Size VMA LMA File off "
"Algn"
msgstr ""
-#: objdump.c:402
+#: objdump.c:400
#, c-format
msgid " Flags"
msgstr ""
-#: objdump.c:404
+#: objdump.c:402
#, c-format
msgid " Pg"
msgstr ""
-#: objdump.c:447
+#: objdump.c:445
#, c-format
msgid "%s: not a dynamic object"
msgstr ""
-#: objdump.c:1735
+#: objdump.c:1778
#, c-format
msgid "Disassembly of section %s:\n"
msgstr ""
-#: objdump.c:1897
+#: objdump.c:1940
#, c-format
msgid "Can't use supplied machine %s"
msgstr ""
-#: objdump.c:1916
+#: objdump.c:1959
#, c-format
msgid "Can't disassemble for architecture %s\n"
msgstr ""
-#: objdump.c:2006
+#: objdump.c:2064
#, c-format
msgid ""
"\n"
"Can't get contents for section '%s'.\n"
msgstr ""
-#: objdump.c:2143
+#: objdump.c:2201
#, c-format
msgid ""
"No %s section present\n"
"\n"
msgstr ""
-#: objdump.c:2152
+#: objdump.c:2210
#, c-format
msgid "Reading %s section of %s failed: %s"
msgstr ""
-#: objdump.c:2196
+#: objdump.c:2254
#, c-format
msgid ""
"Contents of %s section:\n"
"\n"
msgstr ""
-#: objdump.c:2323
+#: objdump.c:2381
#, c-format
msgid "architecture: %s, "
msgstr ""
-#: objdump.c:2326
+#: objdump.c:2384
#, c-format
msgid "flags 0x%08x:\n"
msgstr ""
-#: objdump.c:2340
+#: objdump.c:2398
#, c-format
msgid ""
"\n"
"start address 0x"
msgstr ""
-#: objdump.c:2380
+#: objdump.c:2438
#, c-format
msgid "Contents of section %s:\n"
msgstr ""
-#: objdump.c:2505
+#: objdump.c:2563
#, c-format
msgid "no symbols\n"
msgstr ""
-#: objdump.c:2512
+#: objdump.c:2570
#, c-format
msgid "no information for symbol number %ld\n"
msgstr ""
-#: objdump.c:2515
+#: objdump.c:2573
#, c-format
msgid "could not determine the type of symbol number %ld\n"
msgstr ""
-#: objdump.c:2788
+#: objdump.c:2850
#, c-format
msgid ""
"\n"
"%s: file format %s\n"
msgstr ""
-#: objdump.c:2845
+#: objdump.c:2908
#, c-format
msgid "%s: printing debugging information failed"
msgstr ""
-#: objdump.c:2936
+#: objdump.c:3002
#, c-format
msgid "In archive %s:\n"
msgstr ""
-#: objdump.c:3058
+#: objdump.c:3124
msgid "unrecognized -E option"
msgstr ""
-#: objdump.c:3069
+#: objdump.c:3135
#, c-format
msgid "unrecognized --endian type `%s'"
msgstr ""
-#: rdcoff.c:196
+#: rclex.c:196
+msgid "invalid value specified for pragma code_page.\n"
+msgstr ""
+
+#: rdcoff.c:198
#, c-format
msgid "parse_coff_type: Bad type code 0x%x"
msgstr ""
-#: rdcoff.c:404 rdcoff.c:509 rdcoff.c:697
+#: rdcoff.c:406 rdcoff.c:511 rdcoff.c:699
#, c-format
msgid "bfd_coff_get_syment failed: %s"
msgstr ""
-#: rdcoff.c:420 rdcoff.c:717
+#: rdcoff.c:422 rdcoff.c:719
#, c-format
msgid "bfd_coff_get_auxent failed: %s"
msgstr ""
-#: rdcoff.c:784
+#: rdcoff.c:786
#, c-format
msgid "%ld: .bf without preceding function"
msgstr ""
-#: rdcoff.c:834
+#: rdcoff.c:836
#, c-format
msgid "%ld: unexpected .ef\n"
msgstr ""
-#: rddbg.c:85
+#: rddbg.c:86
#, c-format
msgid "%s: no recognized debugging information"
msgstr ""
-#: rddbg.c:394
+#: rddbg.c:400
#, c-format
msgid "Last stabs entries before error:\n"
msgstr ""
-#: readelf.c:264
+#: readelf.c:319
#, c-format
msgid "Unable to seek to 0x%lx for %s\n"
msgstr ""
-#: readelf.c:279
+#: readelf.c:334
#, c-format
msgid "Out of memory allocating 0x%lx bytes for %s\n"
msgstr ""
-#: readelf.c:289
+#: readelf.c:344
#, c-format
msgid "Unable to read in 0x%lx bytes of %s\n"
msgstr ""
-#: readelf.c:623
+#: readelf.c:683
msgid "Don't know about relocations on this machine architecture\n"
msgstr ""
-#: readelf.c:643 readelf.c:671 readelf.c:715 readelf.c:743
+#: readelf.c:703 readelf.c:731 readelf.c:775 readelf.c:803
msgid "relocs"
msgstr ""
-#: readelf.c:654 readelf.c:682 readelf.c:726 readelf.c:754
-msgid "out of memory parsing relocs"
+#: readelf.c:714 readelf.c:742 readelf.c:786 readelf.c:814
+msgid "out of memory parsing relocs\n"
msgstr ""
-#: readelf.c:808
+#: readelf.c:868
#, c-format
msgid ""
" Offset Info Type Sym. Value Symbol's Name + Addend\n"
msgstr ""
-#: readelf.c:810
+#: readelf.c:870
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name + Addend\n"
msgstr ""
-#: readelf.c:815
+#: readelf.c:875
#, c-format
msgid " Offset Info Type Sym. Value Symbol's Name\n"
msgstr ""
-#: readelf.c:817
+#: readelf.c:877
#, c-format
msgid " Offset Info Type Sym.Value Sym. Name\n"
msgstr ""
-#: readelf.c:825
+#: readelf.c:885
#, c-format
msgid ""
" Offset Info Type Symbol's Value "
"Symbol's Name + Addend\n"
msgstr ""
-#: readelf.c:827
+#: readelf.c:887
#, c-format
msgid ""
" Offset Info Type Sym. Value Sym. Name + "
"Addend\n"
msgstr ""
-#: readelf.c:832
+#: readelf.c:892
#, c-format
msgid ""
" Offset Info Type Symbol's Value "
"Symbol's Name\n"
msgstr ""
-#: readelf.c:834
+#: readelf.c:894
#, c-format
msgid ""
" Offset Info Type Sym. Value Sym. Name\n"
msgstr ""
-#: readelf.c:1127 readelf.c:1129 readelf.c:1238 readelf.c:1240 readelf.c:1249
-#: readelf.c:1251
+#: readelf.c:1198 readelf.c:1200 readelf.c:1318 readelf.c:1320 readelf.c:1329
+#: readelf.c:1331
#, c-format
msgid "unrecognized: %-7lx"
msgstr ""
-#: readelf.c:1154
+#: readelf.c:1226
#, c-format
msgid "<unknown addend: %lx>"
msgstr ""
-#: readelf.c:1210
+#: readelf.c:1288
#, c-format
msgid "<string table index: %3ld>"
msgstr ""
-#: readelf.c:1212
+#: readelf.c:1290
#, c-format
msgid "<corrupt string table index: %3ld>"
msgstr ""
-#: readelf.c:1522
+#: readelf.c:1625
#, c-format
msgid "Processor Specific: %lx"
msgstr ""
-#: readelf.c:1543
+#: readelf.c:1646
#, c-format
msgid "Operating System specific: %lx"
msgstr ""
-#: readelf.c:1547 readelf.c:2349
+#: readelf.c:1650 readelf.c:2521
#, c-format
msgid "<unknown>: %lx"
msgstr ""
-#: readelf.c:1560
+#: readelf.c:1663
msgid "NONE (None)"
msgstr ""
-#: readelf.c:1561
+#: readelf.c:1664
msgid "REL (Relocatable file)"
msgstr ""
-#: readelf.c:1562
+#: readelf.c:1665
msgid "EXEC (Executable file)"
msgstr ""
-#: readelf.c:1563
+#: readelf.c:1666
msgid "DYN (Shared object file)"
msgstr ""
-#: readelf.c:1564
+#: readelf.c:1667
msgid "CORE (Core file)"
msgstr ""
-#: readelf.c:1568
+#: readelf.c:1671
#, c-format
msgid "Processor Specific: (%x)"
msgstr ""
-#: readelf.c:1570
+#: readelf.c:1673
#, c-format
msgid "OS Specific: (%x)"
msgstr ""
-#: readelf.c:1572 readelf.c:1681 readelf.c:2541
+#: readelf.c:1675 readelf.c:2714
#, c-format
msgid "<unknown>: %x"
msgstr ""
-#: readelf.c:1584
+#: readelf.c:1687
msgid "None"
msgstr ""
-#: readelf.c:2186
+#: readelf.c:1791
+#, c-format
+msgid "<unknown>: 0x%x"
+msgstr ""
+
+#: readelf.c:2048
+msgid "unknown"
+msgstr ""
+
+#: readelf.c:2049
+msgid "unknown mac"
+msgstr ""
+
+#: readelf.c:2358
msgid "Standalone App"
msgstr ""
-#: readelf.c:2189 readelf.c:2948 readelf.c:2964
+#: readelf.c:2361 readelf.c:3145 readelf.c:3161
#, c-format
msgid "<unknown: %x>"
msgstr ""
-#: readelf.c:2586
+#: readelf.c:2759
#, c-format
msgid "Usage: readelf <option(s)> elf-file(s)\n"
msgstr ""
-#: readelf.c:2587
+#: readelf.c:2760
#, c-format
msgid " Display information about the contents of ELF format files\n"
msgstr ""
-#: readelf.c:2588
+#: readelf.c:2761
#, c-format
msgid ""
" Options are:\n"
@@ -3302,14 +3395,14 @@ msgid ""
" Display the contents of DWARF2 debug sections\n"
msgstr ""
-#: readelf.c:2612
+#: readelf.c:2785
#, c-format
msgid ""
" -i --instruction-dump=<number>\n"
" Disassemble the contents of section <number>\n"
msgstr ""
-#: readelf.c:2616
+#: readelf.c:2789
#, c-format
msgid ""
" -I --histogram Display histogram of bucket list lengths\n"
@@ -3319,382 +3412,394 @@ msgid ""
" -v --version Display the version number of readelf\n"
msgstr ""
-#: readelf.c:2642 readelf.c:9180
-msgid "Out of memory allocating dump request table."
+#: readelf.c:2817 readelf.c:2845 readelf.c:2849 readelf.c:9898
+msgid "Out of memory allocating dump request table.\n"
msgstr ""
-#: readelf.c:2816 readelf.c:2884
+#: readelf.c:3011 readelf.c:3079
#, c-format
msgid "Unrecognized debug option '%s'\n"
msgstr ""
-#: readelf.c:2918
+#: readelf.c:3115
#, c-format
msgid "Invalid option '-%c'\n"
msgstr ""
-#: readelf.c:2932
+#: readelf.c:3129
msgid "Nothing to do.\n"
msgstr ""
-#: readelf.c:2944 readelf.c:2960 readelf.c:6169
+#: readelf.c:3141 readelf.c:3157 readelf.c:6399
msgid "none"
msgstr ""
-#: readelf.c:2961
+#: readelf.c:3158
msgid "2's complement, little endian"
msgstr ""
-#: readelf.c:2962
+#: readelf.c:3159
msgid "2's complement, big endian"
msgstr ""
-#: readelf.c:2980
+#: readelf.c:3177
msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
msgstr ""
-#: readelf.c:2988
+#: readelf.c:3185
#, c-format
msgid "ELF Header:\n"
msgstr ""
-#: readelf.c:2989
+#: readelf.c:3186
#, c-format
msgid " Magic: "
msgstr ""
-#: readelf.c:2993
+#: readelf.c:3190
#, c-format
msgid " Class: %s\n"
msgstr ""
-#: readelf.c:2995
+#: readelf.c:3192
#, c-format
msgid " Data: %s\n"
msgstr ""
-#: readelf.c:2997
+#: readelf.c:3194
#, c-format
msgid " Version: %d %s\n"
msgstr ""
-#: readelf.c:3004
+#: readelf.c:3201
#, c-format
msgid " OS/ABI: %s\n"
msgstr ""
-#: readelf.c:3006
+#: readelf.c:3203
#, c-format
msgid " ABI Version: %d\n"
msgstr ""
-#: readelf.c:3008
+#: readelf.c:3205
#, c-format
msgid " Type: %s\n"
msgstr ""
-#: readelf.c:3010
+#: readelf.c:3207
#, c-format
msgid " Machine: %s\n"
msgstr ""
-#: readelf.c:3012
+#: readelf.c:3209
#, c-format
msgid " Version: 0x%lx\n"
msgstr ""
-#: readelf.c:3015
+#: readelf.c:3212
#, c-format
msgid " Entry point address: "
msgstr ""
-#: readelf.c:3017
+#: readelf.c:3214
#, c-format
msgid ""
"\n"
" Start of program headers: "
msgstr ""
-#: readelf.c:3019
+#: readelf.c:3216
#, c-format
msgid ""
" (bytes into file)\n"
" Start of section headers: "
msgstr ""
-#: readelf.c:3021
+#: readelf.c:3218
#, c-format
msgid " (bytes into file)\n"
msgstr ""
-#: readelf.c:3023
+#: readelf.c:3220
#, c-format
msgid " Flags: 0x%lx%s\n"
msgstr ""
-#: readelf.c:3026
+#: readelf.c:3223
#, c-format
msgid " Size of this header: %ld (bytes)\n"
msgstr ""
-#: readelf.c:3028
+#: readelf.c:3225
#, c-format
msgid " Size of program headers: %ld (bytes)\n"
msgstr ""
-#: readelf.c:3030
+#: readelf.c:3227
#, c-format
msgid " Number of program headers: %ld\n"
msgstr ""
-#: readelf.c:3032
+#: readelf.c:3229
#, c-format
msgid " Size of section headers: %ld (bytes)\n"
msgstr ""
-#: readelf.c:3034
+#: readelf.c:3231
#, c-format
msgid " Number of section headers: %ld"
msgstr ""
-#: readelf.c:3039
+#: readelf.c:3236
#, c-format
msgid " Section header string table index: %ld"
msgstr ""
-#: readelf.c:3070 readelf.c:3103
+#: readelf.c:3277 readelf.c:3310
msgid "program headers"
msgstr ""
-#: readelf.c:3141 readelf.c:3440 readelf.c:3481 readelf.c:3540 readelf.c:3603
-#: readelf.c:4208 readelf.c:4232 readelf.c:5510 readelf.c:5554 readelf.c:5752
-#: readelf.c:6734 readelf.c:6748 readelf.c:8564 readelf.c:8972 readelf.c:9039
+#: readelf.c:3348 readelf.c:3643 readelf.c:3684 readelf.c:3743 readelf.c:3806
+#: readelf.c:4429 readelf.c:4453 readelf.c:5731 readelf.c:5775 readelf.c:5973
+#: readelf.c:7007 readelf.c:7021 readelf.c:7378 readelf.c:7394 readelf.c:7533
+#: readelf.c:7558 readelf.c:8746 readelf.c:8938 readelf.c:9279 readelf.c:9690
+#: readelf.c:9757
msgid "Out of memory\n"
msgstr ""
-#: readelf.c:3168
+#: readelf.c:3375
#, c-format
msgid ""
"\n"
"There are no program headers in this file.\n"
msgstr ""
-#: readelf.c:3174
+#: readelf.c:3381
#, c-format
msgid ""
"\n"
"Elf file type is %s\n"
msgstr ""
-#: readelf.c:3175
+#: readelf.c:3382
#, c-format
msgid "Entry point "
msgstr ""
-#: readelf.c:3177
+#: readelf.c:3384
#, c-format
msgid ""
"\n"
"There are %d program headers, starting at offset "
msgstr ""
-#: readelf.c:3189 readelf.c:3191
+#: readelf.c:3396 readelf.c:3398
#, c-format
msgid ""
"\n"
"Program Headers:\n"
msgstr ""
-#: readelf.c:3195
+#: readelf.c:3402
#, c-format
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr ""
-#: readelf.c:3198
+#: readelf.c:3405
#, c-format
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz "
"MemSiz Flg Align\n"
msgstr ""
-#: readelf.c:3202
+#: readelf.c:3409
#, c-format
msgid " Type Offset VirtAddr PhysAddr\n"
msgstr ""
-#: readelf.c:3204
+#: readelf.c:3411
#, c-format
msgid " FileSiz MemSiz Flags Align\n"
msgstr ""
-#: readelf.c:3297
+#: readelf.c:3504
msgid "more than one dynamic segment\n"
msgstr ""
-#: readelf.c:3308
-msgid "no .dynamic section in the dynamic segment"
+#: readelf.c:3515
+msgid "no .dynamic section in the dynamic segment\n"
msgstr ""
-#: readelf.c:3317
-msgid "the .dynamic section is not contained within the dynamic segment"
+#: readelf.c:3527
+msgid "the .dynamic section is not contained within the dynamic segment\n"
msgstr ""
-#: readelf.c:3319
-msgid "the .dynamic section is not the first section in the dynamic segment."
+#: readelf.c:3529
+msgid "the .dynamic section is not the first section in the dynamic segment.\n"
msgstr ""
-#: readelf.c:3333
+#: readelf.c:3543
msgid "Unable to find program interpreter name\n"
msgstr ""
-#: readelf.c:3340
+#: readelf.c:3550
+msgid ""
+"Internal error: failed to create format string to display program "
+"interpreter\n"
+msgstr ""
+
+#: readelf.c:3554
+msgid "Unable to read program interpreter name\n"
+msgstr ""
+
+#: readelf.c:3557
#, c-format
msgid ""
"\n"
" [Requesting program interpreter: %s]"
msgstr ""
-#: readelf.c:3352
+#: readelf.c:3569
#, c-format
msgid ""
"\n"
" Section to Segment mapping:\n"
msgstr ""
-#: readelf.c:3353
+#: readelf.c:3570
#, c-format
msgid " Segment Sections...\n"
msgstr ""
-#: readelf.c:3402
+#: readelf.c:3605
msgid "Cannot interpret virtual addresses without program headers.\n"
msgstr ""
-#: readelf.c:3418
+#: readelf.c:3621
#, c-format
msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n"
msgstr ""
-#: readelf.c:3432 readelf.c:3473
+#: readelf.c:3635 readelf.c:3676
msgid "section headers"
msgstr ""
-#: readelf.c:3517 readelf.c:3580
+#: readelf.c:3720 readelf.c:3783
msgid "symbols"
msgstr ""
-#: readelf.c:3527 readelf.c:3590
+#: readelf.c:3730 readelf.c:3793
msgid "symtab shndx"
msgstr ""
-#: readelf.c:3817 readelf.c:4192
+#: readelf.c:4020 readelf.c:4413
#, c-format
msgid ""
"\n"
"There are no sections in this file.\n"
msgstr ""
-#: readelf.c:3823
+#: readelf.c:4026
#, c-format
msgid "There are %d section headers, starting at offset 0x%lx:\n"
msgstr ""
-#: readelf.c:3842 readelf.c:4309 readelf.c:4544 readelf.c:4852 readelf.c:5267
-#: readelf.c:6906
+#: readelf.c:4046 readelf.c:4530 readelf.c:4765 readelf.c:5073 readelf.c:5488
+#: readelf.c:7187
msgid "string table"
msgstr ""
-#: readelf.c:3881
+#: readelf.c:4102
#, c-format
msgid "Section %d has invalid sh_entsize %lx (expected %lx)\n"
msgstr ""
-#: readelf.c:3901
+#: readelf.c:4122
msgid "File contains multiple dynamic symbol tables\n"
msgstr ""
-#: readelf.c:3914
+#: readelf.c:4135
msgid "File contains multiple dynamic string tables\n"
msgstr ""
-#: readelf.c:3919
+#: readelf.c:4140
msgid "dynamic strings"
msgstr ""
-#: readelf.c:3926
+#: readelf.c:4147
msgid "File contains multiple symtab shndx tables\n"
msgstr ""
-#: readelf.c:3973
+#: readelf.c:4194
#, c-format
msgid ""
"\n"
"Section Headers:\n"
msgstr ""
-#: readelf.c:3975
+#: readelf.c:4196
#, c-format
msgid ""
"\n"
"Section Header:\n"
msgstr ""
-#: readelf.c:3981 readelf.c:3992 readelf.c:4003
+#: readelf.c:4202 readelf.c:4213 readelf.c:4224
#, c-format
msgid " [Nr] Name\n"
msgstr ""
-#: readelf.c:3982
+#: readelf.c:4203
#, c-format
msgid " Type Addr Off Size ES Lk Inf Al\n"
msgstr ""
-#: readelf.c:3986
+#: readelf.c:4207
#, c-format
msgid ""
" [Nr] Name Type Addr Off Size ES Flg Lk "
"Inf Al\n"
msgstr ""
-#: readelf.c:3993
+#: readelf.c:4214
#, c-format
msgid " Type Address Off Size ES Lk Inf Al\n"
msgstr ""
-#: readelf.c:3997
+#: readelf.c:4218
#, c-format
msgid ""
" [Nr] Name Type Address Off Size ES "
"Flg Lk Inf Al\n"
msgstr ""
-#: readelf.c:4004
+#: readelf.c:4225
#, c-format
msgid " Type Address Offset Link\n"
msgstr ""
-#: readelf.c:4005
+#: readelf.c:4226
#, c-format
msgid " Size EntSize Info Align\n"
msgstr ""
-#: readelf.c:4009
+#: readelf.c:4230
#, c-format
msgid " [Nr] Name Type Address Offset\n"
msgstr ""
-#: readelf.c:4010
+#: readelf.c:4231
#, c-format
msgid " Size EntSize Flags Link Info Align\n"
msgstr ""
-#: readelf.c:4015
+#: readelf.c:4236
#, c-format
msgid " Flags\n"
msgstr ""
-#: readelf.c:4150
+#: readelf.c:4371
#, c-format
msgid ""
"Key to Flags:\n"
@@ -3703,1030 +3808,1056 @@ msgid ""
" O (extra OS processing required) o (OS specific), p (processor specific)\n"
msgstr ""
-#: readelf.c:4168
+#: readelf.c:4389
#, c-format
msgid "[<unknown>: 0x%x]"
msgstr ""
-#: readelf.c:4199
+#: readelf.c:4420
msgid "Section headers are not available!\n"
msgstr ""
-#: readelf.c:4223
+#: readelf.c:4444
#, c-format
msgid ""
"\n"
"There are no section groups in this file.\n"
msgstr ""
-#: readelf.c:4259
+#: readelf.c:4480
#, c-format
msgid "Bad sh_link in group section `%s'\n"
msgstr ""
-#: readelf.c:4278
+#: readelf.c:4499
#, c-format
msgid "Bad sh_info in group section `%s'\n"
msgstr ""
-#: readelf.c:4317 readelf.c:7243
+#: readelf.c:4538 readelf.c:7690
msgid "section data"
msgstr ""
-#: readelf.c:4329
+#: readelf.c:4550
#, c-format
msgid " [Index] Name\n"
msgstr ""
-#: readelf.c:4343
+#: readelf.c:4564
#, c-format
msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n"
msgstr ""
-#: readelf.c:4349
+#: readelf.c:4570
#, c-format
msgid "invalid section [%5u] in group section [%5u]\n"
msgstr ""
-#: readelf.c:4359
+#: readelf.c:4580
#, c-format
msgid "section [%5u] in group section [%5u] already in group section [%5u]\n"
msgstr ""
-#: readelf.c:4372
+#: readelf.c:4593
#, c-format
msgid "section 0 in group section [%5u]\n"
msgstr ""
-#: readelf.c:4468
+#: readelf.c:4689
#, c-format
msgid ""
"\n"
"'%s' relocation section at offset 0x%lx contains %ld bytes:\n"
msgstr ""
-#: readelf.c:4480
+#: readelf.c:4701
#, c-format
msgid ""
"\n"
"There are no dynamic relocations in this file.\n"
msgstr ""
-#: readelf.c:4504
+#: readelf.c:4725
#, c-format
msgid ""
"\n"
"Relocation section "
msgstr ""
-#: readelf.c:4509 readelf.c:4928 readelf.c:4942 readelf.c:5282
+#: readelf.c:4730 readelf.c:5149 readelf.c:5163 readelf.c:5503
#, c-format
msgid "'%s'"
msgstr ""
-#: readelf.c:4511 readelf.c:4944 readelf.c:5284
+#: readelf.c:4732 readelf.c:5165 readelf.c:5505
#, c-format
msgid " at offset 0x%lx contains %lu entries:\n"
msgstr ""
-#: readelf.c:4563
+#: readelf.c:4784
#, c-format
msgid ""
"\n"
"There are no relocations in this file.\n"
msgstr ""
-#: readelf.c:4742 readelf.c:5124
+#: readelf.c:4963 readelf.c:5345
msgid "unwind table"
msgstr ""
-#: readelf.c:4801 readelf.c:5214
+#: readelf.c:5022 readelf.c:5435
#, c-format
msgid "Skipping unexpected relocation type %s\n"
msgstr ""
-#: readelf.c:4860 readelf.c:5275 readelf.c:5326
+#: readelf.c:5081 readelf.c:5496 readelf.c:5547
#, c-format
msgid ""
"\n"
"There are no unwind sections in this file.\n"
msgstr ""
-#: readelf.c:4923
+#: readelf.c:5144
#, c-format
msgid ""
"\n"
"Could not find unwind info section for "
msgstr ""
-#: readelf.c:4935
+#: readelf.c:5156
msgid "unwind info"
msgstr ""
-#: readelf.c:4937 readelf.c:5281
+#: readelf.c:5158 readelf.c:5502
#, c-format
msgid ""
"\n"
"Unwind section "
msgstr ""
-#: readelf.c:5491 readelf.c:5535
+#: readelf.c:5712 readelf.c:5756
msgid "dynamic section"
msgstr ""
-#: readelf.c:5612
+#: readelf.c:5833
#, c-format
msgid ""
"\n"
"There is no dynamic section in this file.\n"
msgstr ""
-#: readelf.c:5650
-msgid "Unable to seek to end of file!"
+#: readelf.c:5871
+msgid "Unable to seek to end of file!\n"
msgstr ""
-#: readelf.c:5663
+#: readelf.c:5884
msgid "Unable to determine the number of symbols to load\n"
msgstr ""
-#: readelf.c:5698
+#: readelf.c:5919
msgid "Unable to seek to end of file\n"
msgstr ""
-#: readelf.c:5705
+#: readelf.c:5926
msgid "Unable to determine the length of the dynamic string table\n"
msgstr ""
-#: readelf.c:5710
+#: readelf.c:5931
msgid "dynamic string table"
msgstr ""
-#: readelf.c:5745
+#: readelf.c:5966
msgid "symbol information"
msgstr ""
-#: readelf.c:5770
+#: readelf.c:5991
#, c-format
msgid ""
"\n"
"Dynamic section at offset 0x%lx contains %u entries:\n"
msgstr ""
-#: readelf.c:5773
+#: readelf.c:5994
#, c-format
msgid " Tag Type Name/Value\n"
msgstr ""
-#: readelf.c:5809
+#: readelf.c:6030
#, c-format
msgid "Auxiliary library"
msgstr ""
-#: readelf.c:5813
+#: readelf.c:6034
#, c-format
msgid "Filter library"
msgstr ""
-#: readelf.c:5817
+#: readelf.c:6038
#, c-format
msgid "Configuration file"
msgstr ""
-#: readelf.c:5821
+#: readelf.c:6042
#, c-format
msgid "Dependency audit library"
msgstr ""
-#: readelf.c:5825
+#: readelf.c:6046
#, c-format
msgid "Audit library"
msgstr ""
-#: readelf.c:5843 readelf.c:5871 readelf.c:5899
+#: readelf.c:6064 readelf.c:6092 readelf.c:6120
#, c-format
msgid "Flags:"
msgstr ""
-#: readelf.c:5846 readelf.c:5874 readelf.c:5901
+#: readelf.c:6067 readelf.c:6095 readelf.c:6122
#, c-format
msgid " None\n"
msgstr ""
-#: readelf.c:6022
+#: readelf.c:6243
#, c-format
msgid "Shared library: [%s]"
msgstr ""
-#: readelf.c:6025
+#: readelf.c:6246
#, c-format
msgid " program interpreter"
msgstr ""
-#: readelf.c:6029
+#: readelf.c:6250
#, c-format
msgid "Library soname: [%s]"
msgstr ""
-#: readelf.c:6033
+#: readelf.c:6254
#, c-format
msgid "Library rpath: [%s]"
msgstr ""
-#: readelf.c:6037
+#: readelf.c:6258
#, c-format
msgid "Library runpath: [%s]"
msgstr ""
-#: readelf.c:6100
+#: readelf.c:6321
#, c-format
msgid "Not needed object: [%s]\n"
msgstr ""
-#: readelf.c:6214
+#: readelf.c:6444
#, c-format
msgid ""
"\n"
"Version definition section '%s' contains %ld entries:\n"
msgstr ""
-#: readelf.c:6217
+#: readelf.c:6447
#, c-format
msgid " Addr: 0x"
msgstr ""
-#: readelf.c:6219 readelf.c:6426
+#: readelf.c:6449 readelf.c:6656
#, c-format
msgid " Offset: %#08lx Link: %lx (%s)\n"
msgstr ""
-#: readelf.c:6228
+#: readelf.c:6458
msgid "version definition section"
msgstr ""
-#: readelf.c:6254
+#: readelf.c:6484
#, c-format
msgid " %#06x: Rev: %d Flags: %s"
msgstr ""
-#: readelf.c:6257
+#: readelf.c:6487
#, c-format
msgid " Index: %d Cnt: %d "
msgstr ""
-#: readelf.c:6268
+#: readelf.c:6498
#, c-format
msgid "Name: %s\n"
msgstr ""
-#: readelf.c:6270
+#: readelf.c:6500
#, c-format
msgid "Name index: %ld\n"
msgstr ""
-#: readelf.c:6285
+#: readelf.c:6515
#, c-format
msgid " %#06x: Parent %d: %s\n"
msgstr ""
-#: readelf.c:6288
+#: readelf.c:6518
#, c-format
msgid " %#06x: Parent %d, name index: %ld\n"
msgstr ""
-#: readelf.c:6307
+#: readelf.c:6537
#, c-format
msgid ""
"\n"
"Version needs section '%s' contains %ld entries:\n"
msgstr ""
-#: readelf.c:6310
+#: readelf.c:6540
#, c-format
msgid " Addr: 0x"
msgstr ""
-#: readelf.c:6312
+#: readelf.c:6542
#, c-format
msgid " Offset: %#08lx Link to section: %ld (%s)\n"
msgstr ""
-#: readelf.c:6321
+#: readelf.c:6551
msgid "version need section"
msgstr ""
-#: readelf.c:6343
+#: readelf.c:6573
#, c-format
msgid " %#06x: Version: %d"
msgstr ""
-#: readelf.c:6346
+#: readelf.c:6576
#, c-format
msgid " File: %s"
msgstr ""
-#: readelf.c:6348
+#: readelf.c:6578
#, c-format
msgid " File: %lx"
msgstr ""
-#: readelf.c:6350
+#: readelf.c:6580
#, c-format
msgid " Cnt: %d\n"
msgstr ""
-#: readelf.c:6368
+#: readelf.c:6598
#, c-format
msgid " %#06x: Name: %s"
msgstr ""
-#: readelf.c:6371
+#: readelf.c:6601
#, c-format
msgid " %#06x: Name index: %lx"
msgstr ""
-#: readelf.c:6374
+#: readelf.c:6604
#, c-format
msgid " Flags: %s Version: %d\n"
msgstr ""
-#: readelf.c:6417
+#: readelf.c:6647
msgid "version string table"
msgstr ""
-#: readelf.c:6421
+#: readelf.c:6651
#, c-format
msgid ""
"\n"
"Version symbols section '%s' contains %d entries:\n"
msgstr ""
-#: readelf.c:6424
+#: readelf.c:6654
#, c-format
msgid " Addr: "
msgstr ""
-#: readelf.c:6434
+#: readelf.c:6664
msgid "version symbol data"
msgstr ""
-#: readelf.c:6461
+#: readelf.c:6691
msgid " 0 (*local*) "
msgstr ""
-#: readelf.c:6465
+#: readelf.c:6695
msgid " 1 (*global*) "
msgstr ""
-#: readelf.c:6503 readelf.c:6969
+#: readelf.c:6733 readelf.c:7255
msgid "version need"
msgstr ""
-#: readelf.c:6513
+#: readelf.c:6743
msgid "version need aux (2)"
msgstr ""
-#: readelf.c:6555 readelf.c:7034
+#: readelf.c:6785 readelf.c:7320
msgid "version def"
msgstr ""
-#: readelf.c:6575 readelf.c:7049
+#: readelf.c:6805 readelf.c:7335
msgid "version def aux"
msgstr ""
-#: readelf.c:6606
+#: readelf.c:6836
#, c-format
msgid ""
"\n"
"No version information found in this file.\n"
msgstr ""
-#: readelf.c:6740
+#: readelf.c:6955
+#, c-format
+msgid "<other>: %x"
+msgstr ""
+
+#: readelf.c:7013
msgid "Unable to read in dynamic data\n"
msgstr ""
-#: readelf.c:6793
-msgid "Unable to seek to start of dynamic information"
+#: readelf.c:7069 readelf.c:7443 readelf.c:7467 readelf.c:7497 readelf.c:7521
+msgid "Unable to seek to start of dynamic information\n"
msgstr ""
-#: readelf.c:6799
+#: readelf.c:7075 readelf.c:7449
msgid "Failed to read in number of buckets\n"
msgstr ""
-#: readelf.c:6805
+#: readelf.c:7081
msgid "Failed to read in number of chains\n"
msgstr ""
-#: readelf.c:6825
+#: readelf.c:7101
#, c-format
msgid ""
"\n"
"Symbol table for image:\n"
msgstr ""
-#: readelf.c:6827
+#: readelf.c:7103
#, c-format
msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:6829
+#: readelf.c:7105
#, c-format
msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:6882
+#: readelf.c:7163
#, c-format
msgid ""
"\n"
"Symbol table '%s' contains %lu entries:\n"
msgstr ""
-#: readelf.c:6886
+#: readelf.c:7167
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:6888
+#: readelf.c:7169
#, c-format
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:6939
+#: readelf.c:7225
msgid "version data"
msgstr ""
-#: readelf.c:6982
+#: readelf.c:7268
msgid "version need aux (3)"
msgstr ""
-#: readelf.c:7009
-msgid "bad dynamic symbol"
+#: readelf.c:7295
+msgid "bad dynamic symbol\n"
msgstr ""
-#: readelf.c:7073
+#: readelf.c:7359
#, c-format
msgid ""
"\n"
"Dynamic symbol information is not available for displaying symbols.\n"
msgstr ""
-#: readelf.c:7085
+#: readelf.c:7371
#, c-format
msgid ""
"\n"
"Histogram for bucket list length (total of %lu buckets):\n"
msgstr ""
-#: readelf.c:7087
+#: readelf.c:7373 readelf.c:7539
#, c-format
msgid " Length Number %% of total Coverage\n"
msgstr ""
-#: readelf.c:7092 readelf.c:7108 readelf.c:8031 readelf.c:8223
-msgid "Out of memory"
+#: readelf.c:7505
+msgid "Failed to determine last chain length\n"
+msgstr ""
+
+#: readelf.c:7537
+#, c-format
+msgid ""
+"\n"
+"Histogram for `.gnu.hash' bucket list length (total of %lu buckets):\n"
msgstr ""
-#: readelf.c:7157
+#: readelf.c:7603
#, c-format
msgid ""
"\n"
"Dynamic info segment at offset 0x%lx contains %d entries:\n"
msgstr ""
-#: readelf.c:7160
+#: readelf.c:7606
#, c-format
msgid " Num: Name BoundTo Flags\n"
msgstr ""
-#: readelf.c:7212
+#: readelf.c:7658
#, c-format
msgid ""
"\n"
"Assembly dump of section %s\n"
msgstr ""
-#: readelf.c:7233
+#: readelf.c:7680
#, c-format
msgid ""
"\n"
"Section '%s' has no data to dump.\n"
msgstr ""
-#: readelf.c:7238
+#: readelf.c:7685
#, c-format
msgid ""
"\n"
"Hex dump of section '%s':\n"
msgstr ""
-#: readelf.c:7359
+#: readelf.c:7710
+#, c-format
+msgid ""
+" NOTE: This section has relocations against it, but these have NOT been "
+"applied to this dump.\n"
+msgstr ""
+
+#: readelf.c:7845
+#, c-format
+msgid ""
+"skipping relocation of unknown size against offset 0x%lx in section %s\n"
+msgstr ""
+
+#: readelf.c:7854
#, c-format
msgid "skipping invalid relocation offset 0x%lx in section %s\n"
msgstr ""
-#: readelf.c:7376
+#: readelf.c:7875
#, c-format
msgid "skipping unexpected symbol type %s in relocation in section .rela%s\n"
msgstr ""
-#: readelf.c:7402
+#: readelf.c:7902
#, c-format
msgid "skipping unexpected symbol type %s in relocation in section .rela.%s\n"
msgstr ""
-#: readelf.c:7435
+#: readelf.c:7935
#, c-format
msgid "%s section data"
msgstr ""
-#: readelf.c:7472
+#: readelf.c:7972
#, c-format
msgid ""
"\n"
"Section '%s' has no debugging data.\n"
msgstr ""
-#: readelf.c:7498
+#: readelf.c:7998
#, c-format
msgid "Unrecognized debug section: %s\n"
msgstr ""
-#: readelf.c:7533
+#: readelf.c:8026
+#, c-format
+msgid "Section '%s' was not dumped because it does not exist!\n"
+msgstr ""
+
+#: readelf.c:8061
#, c-format
msgid "Section %d was not dumped because it does not exist!\n"
msgstr ""
-#: readelf.c:7791
+#: readelf.c:8478
msgid "attributes"
msgstr ""
-#: readelf.c:7809
+#: readelf.c:8497
#, c-format
msgid "ERROR: Bad section length (%d > %d)\n"
msgstr ""
-#: readelf.c:7830
+#: readelf.c:8522
#, c-format
msgid "ERROR: Bad subsection length (%d > %d)\n"
msgstr ""
-#: readelf.c:7880
+#: readelf.c:8578
#, c-format
msgid "Unknown format '%c'\n"
msgstr ""
-#: readelf.c:7936 readelf.c:8304
+#: readelf.c:8651 readelf.c:9019
msgid "liblist"
msgstr ""
-#: readelf.c:8025
+#: readelf.c:8740
msgid "options"
msgstr ""
-#: readelf.c:8055
+#: readelf.c:8770
#, c-format
msgid ""
"\n"
"Section '%s' contains %d entries:\n"
msgstr ""
-#: readelf.c:8216
-msgid "conflict list found without a dynamic symbol table"
+#: readelf.c:8931
+msgid "conflict list found without a dynamic symbol table\n"
msgstr ""
-#: readelf.c:8232 readelf.c:8246
+#: readelf.c:8947 readelf.c:8961
msgid "conflict"
msgstr ""
-#: readelf.c:8256
+#: readelf.c:8971
#, c-format
msgid ""
"\n"
"Section '.conflict' contains %lu entries:\n"
msgstr ""
-#: readelf.c:8258
+#: readelf.c:8973
msgid " Num: Index Value Name"
msgstr ""
-#: readelf.c:8311
+#: readelf.c:9026
msgid "liblist string table"
msgstr ""
-#: readelf.c:8321
+#: readelf.c:9036
#, c-format
msgid ""
"\n"
"Library list section '%s' contains %lu entries:\n"
msgstr ""
-#: readelf.c:8374
+#: readelf.c:9089
msgid "NT_AUXV (auxiliary vector)"
msgstr ""
-#: readelf.c:8376
+#: readelf.c:9091
msgid "NT_PRSTATUS (prstatus structure)"
msgstr ""
-#: readelf.c:8378
+#: readelf.c:9093
msgid "NT_FPREGSET (floating point registers)"
msgstr ""
-#: readelf.c:8380
+#: readelf.c:9095
msgid "NT_PRPSINFO (prpsinfo structure)"
msgstr ""
-#: readelf.c:8382
+#: readelf.c:9097
msgid "NT_TASKSTRUCT (task structure)"
msgstr ""
-#: readelf.c:8384
+#: readelf.c:9099
msgid "NT_PRXFPREG (user_xfpregs structure)"
msgstr ""
-#: readelf.c:8386
+#: readelf.c:9101
msgid "NT_PSTATUS (pstatus structure)"
msgstr ""
-#: readelf.c:8388
+#: readelf.c:9103
msgid "NT_FPREGS (floating point registers)"
msgstr ""
-#: readelf.c:8390
+#: readelf.c:9105
msgid "NT_PSINFO (psinfo structure)"
msgstr ""
-#: readelf.c:8392
+#: readelf.c:9107
msgid "NT_LWPSTATUS (lwpstatus_t structure)"
msgstr ""
-#: readelf.c:8394
+#: readelf.c:9109
msgid "NT_LWPSINFO (lwpsinfo_t structure)"
msgstr ""
-#: readelf.c:8396
+#: readelf.c:9111
msgid "NT_WIN32PSTATUS (win32_pstatus structure)"
msgstr ""
-#: readelf.c:8404
+#: readelf.c:9119
msgid "NT_VERSION (version)"
msgstr ""
-#: readelf.c:8406
+#: readelf.c:9121
msgid "NT_ARCH (architecture)"
msgstr ""
-#: readelf.c:8411 readelf.c:8433
+#: readelf.c:9126 readelf.c:9148
#, c-format
msgid "Unknown note type: (0x%08x)"
msgstr ""
#. NetBSD core "procinfo" structure.
-#: readelf.c:8423
+#: readelf.c:9138
msgid "NetBSD procinfo structure"
msgstr ""
-#: readelf.c:8450 readelf.c:8464
+#: readelf.c:9165 readelf.c:9179
msgid "PT_GETREGS (reg structure)"
msgstr ""
-#: readelf.c:8452 readelf.c:8466
+#: readelf.c:9167 readelf.c:9181
msgid "PT_GETFPREGS (fpreg structure)"
msgstr ""
-#: readelf.c:8472
+#: readelf.c:9187
#, c-format
msgid "PT_FIRSTMACH+%d"
msgstr ""
-#: readelf.c:8518
+#: readelf.c:9233
msgid "notes"
msgstr ""
-#: readelf.c:8524
+#: readelf.c:9239
#, c-format
msgid ""
"\n"
"Notes at offset 0x%08lx with length 0x%08lx:\n"
msgstr ""
-#: readelf.c:8526
+#: readelf.c:9241
#, c-format
msgid " Owner\t\tData size\tDescription\n"
msgstr ""
-#: readelf.c:8545
+#: readelf.c:9260
#, c-format
msgid "corrupt note found at offset %lx into core notes\n"
msgstr ""
-#: readelf.c:8547
+#: readelf.c:9262
#, c-format
msgid " type: %lx, namesize: %08lx, descsize: %08lx\n"
msgstr ""
-#: readelf.c:8645
+#: readelf.c:9360
#, c-format
msgid "No note segments present in the core file.\n"
msgstr ""
-#: readelf.c:8726
+#: readelf.c:9444
msgid ""
"This instance of readelf has been built without support for a\n"
"64 bit data type and so it cannot read 64 bit ELF files.\n"
msgstr ""
-#: readelf.c:8775 readelf.c:9119
+#: readelf.c:9493 readelf.c:9837
#, c-format
msgid "%s: Failed to read file header\n"
msgstr ""
-#: readelf.c:8788
+#: readelf.c:9506
#, c-format
msgid ""
"\n"
"File: %s\n"
msgstr ""
-#: readelf.c:8936 readelf.c:8957 readelf.c:8994 readelf.c:9074
+#: readelf.c:9654 readelf.c:9675 readelf.c:9712 readelf.c:9792
#, c-format
msgid "%s: failed to read archive header\n"
msgstr ""
-#: readelf.c:8947
+#: readelf.c:9665
#, c-format
msgid "%s: failed to skip archive symbol table\n"
msgstr ""
-#: readelf.c:8979
+#: readelf.c:9697
#, c-format
msgid "%s: failed to read string table\n"
msgstr ""
-#: readelf.c:9015
+#: readelf.c:9733
#, c-format
msgid "%s: invalid archive string table offset %lu\n"
msgstr ""
-#: readelf.c:9031
+#: readelf.c:9749
#, c-format
msgid "%s: bad archive file name\n"
msgstr ""
-#: readelf.c:9063
+#: readelf.c:9781
#, c-format
msgid "%s: failed to seek to next archive header\n"
msgstr ""
-#: readelf.c:9097
+#: readelf.c:9815
#, c-format
msgid "'%s': No such file\n"
msgstr ""
-#: readelf.c:9099
+#: readelf.c:9817
#, c-format
msgid "Could not locate '%s'. System error message: %s\n"
msgstr ""
-#: readelf.c:9106
+#: readelf.c:9824
#, c-format
msgid "'%s' is not an ordinary file\n"
msgstr ""
-#: readelf.c:9113
+#: readelf.c:9831
#, c-format
msgid "Input file '%s' is not readable.\n"
msgstr ""
-#: rename.c:129
+#: rename.c:130
#, c-format
msgid "%s: cannot set time: %s"
msgstr ""
#. We have to clean up here.
-#: rename.c:164 rename.c:202
+#: rename.c:165 rename.c:203
#, c-format
msgid "unable to rename '%s' reason: %s"
msgstr ""
-#: rename.c:210
+#: rename.c:211
#, c-format
msgid "unable to copy file '%s' reason: %s"
msgstr ""
-#: resbin.c:132
+#: resbin.c:119
#, c-format
msgid "%s: not enough binary data"
msgstr ""
-#: resbin.c:148
+#: resbin.c:135
msgid "null terminated unicode string"
msgstr ""
-#: resbin.c:175 resbin.c:181
+#: resbin.c:162 resbin.c:168
msgid "resource ID"
msgstr ""
-#: resbin.c:221
+#: resbin.c:207
msgid "cursor"
msgstr ""
-#: resbin.c:253 resbin.c:260
+#: resbin.c:238 resbin.c:245
msgid "menu header"
msgstr ""
-#: resbin.c:270
+#: resbin.c:254
msgid "menuex header"
msgstr ""
-#: resbin.c:274
+#: resbin.c:258
msgid "menuex offset"
msgstr ""
-#: resbin.c:281
+#: resbin.c:263
#, c-format
msgid "unsupported menu version %d"
msgstr ""
-#: resbin.c:306 resbin.c:321 resbin.c:384
+#: resbin.c:288 resbin.c:303 resbin.c:365
msgid "menuitem header"
msgstr ""
-#: resbin.c:414
+#: resbin.c:395
msgid "menuitem"
msgstr ""
-#: resbin.c:453 resbin.c:481
+#: resbin.c:432 resbin.c:460
msgid "dialog header"
msgstr ""
-#: resbin.c:471
+#: resbin.c:450
#, c-format
msgid "unexpected DIALOGEX version %d"
msgstr ""
-#: resbin.c:516
+#: resbin.c:495
msgid "dialog font point size"
msgstr ""
-#: resbin.c:524
+#: resbin.c:503
msgid "dialogex font information"
msgstr ""
-#: resbin.c:550 resbin.c:568
+#: resbin.c:529 resbin.c:547
msgid "dialog control"
msgstr ""
-#: resbin.c:560
+#: resbin.c:539
msgid "dialogex control"
msgstr ""
-#: resbin.c:589
+#: resbin.c:568
msgid "dialog control end"
msgstr ""
-#: resbin.c:601
+#: resbin.c:580
msgid "dialog control data"
msgstr ""
-#: resbin.c:642
+#: resbin.c:620
msgid "stringtable string length"
msgstr ""
-#: resbin.c:652
+#: resbin.c:630
msgid "stringtable string"
msgstr ""
-#: resbin.c:683
+#: resbin.c:660
msgid "fontdir header"
msgstr ""
-#: resbin.c:696
+#: resbin.c:674
msgid "fontdir"
msgstr ""
-#: resbin.c:712
+#: resbin.c:691
msgid "fontdir device name"
msgstr ""
-#: resbin.c:718
+#: resbin.c:697
msgid "fontdir face name"
msgstr ""
-#: resbin.c:759
+#: resbin.c:737
msgid "accelerator"
msgstr ""
-#: resbin.c:819
+#: resbin.c:796
msgid "group cursor header"
msgstr ""
-#: resbin.c:823
+#: resbin.c:800 resrc.c:1306
#, c-format
msgid "unexpected group cursor type %d"
msgstr ""
-#: resbin.c:838
+#: resbin.c:815
msgid "group cursor"
msgstr ""
-#: resbin.c:875
+#: resbin.c:851
msgid "group icon header"
msgstr ""
-#: resbin.c:879
+#: resbin.c:855 resrc.c:1253
#, c-format
msgid "unexpected group icon type %d"
msgstr ""
-#: resbin.c:894
+#: resbin.c:870
msgid "group icon"
msgstr ""
-#: resbin.c:957 resbin.c:1174
+#: resbin.c:934 resbin.c:1150
msgid "unexpected version string"
msgstr ""
-#: resbin.c:989
+#: resbin.c:965
#, c-format
msgid "version length %d does not match resource length %lu"
msgstr ""
-#: resbin.c:993
+#: resbin.c:969
#, c-format
msgid "unexpected version type %d"
msgstr ""
-#: resbin.c:1005
+#: resbin.c:981
#, c-format
-msgid "unexpected fixed version information length %d"
+msgid "unexpected fixed version information length %ld"
msgstr ""
-#: resbin.c:1008
+#: resbin.c:984
msgid "fixed version info"
msgstr ""
-#: resbin.c:1012
+#: resbin.c:988
#, c-format
msgid "unexpected fixed version signature %lu"
msgstr ""
-#: resbin.c:1016
+#: resbin.c:992
#, c-format
msgid "unexpected fixed version info version %lu"
msgstr ""
-#: resbin.c:1045
+#: resbin.c:1021
msgid "version var info"
msgstr ""
-#: resbin.c:1062
+#: resbin.c:1038
#, c-format
-msgid "unexpected stringfileinfo value length %d"
+msgid "unexpected stringfileinfo value length %ld"
msgstr ""
-#: resbin.c:1072
+#: resbin.c:1048
#, c-format
-msgid "unexpected version stringtable value length %d"
+msgid "unexpected version stringtable value length %ld"
msgstr ""
-#: resbin.c:1106
+#: resbin.c:1082
#, c-format
-msgid "unexpected version string length %d != %d + %d"
+msgid "unexpected version string length %ld != %ld + %ld"
msgstr ""
-#: resbin.c:1117
+#: resbin.c:1093
#, c-format
-msgid "unexpected version string length %d < %d"
+msgid "unexpected version string length %ld < %ld"
msgstr ""
-#: resbin.c:1134
+#: resbin.c:1110
#, c-format
-msgid "unexpected varfileinfo value length %d"
+msgid "unexpected varfileinfo value length %ld"
msgstr ""
-#: resbin.c:1153
+#: resbin.c:1129
msgid "version varfileinfo"
msgstr ""
-#: resbin.c:1168
+#: resbin.c:1144
#, c-format
-msgid "unexpected version value length %d"
+msgid "unexpected version value length %ld"
msgstr ""
-#: rescoff.c:126
+#: rescoff.c:124
msgid "filename required for COFF input"
msgstr ""
-#: rescoff.c:143
+#: rescoff.c:141
#, c-format
msgid "%s: no resource section"
msgstr ""
-#: rescoff.c:150
-msgid "can't read resource section"
-msgstr ""
-
-#: rescoff.c:174
+#: rescoff.c:173
#, c-format
msgid "%s: %s: address out of bounds"
msgstr ""
@@ -4763,144 +4894,144 @@ msgstr ""
msgid "ID resource"
msgstr ""
-#: rescoff.c:318
+#: rescoff.c:320
msgid "resource type unknown"
msgstr ""
-#: rescoff.c:321
+#: rescoff.c:323
msgid "data entry"
msgstr ""
-#: rescoff.c:329
+#: rescoff.c:331
msgid "resource data"
msgstr ""
-#: rescoff.c:334
+#: rescoff.c:336
msgid "resource data size"
msgstr ""
-#: rescoff.c:427
+#: rescoff.c:431
msgid "filename required for COFF output"
msgstr ""
-#: rescoff.c:719
+#: rescoff.c:718
msgid "can't get BFD_RELOC_RVA relocation type"
msgstr ""
-#: resrc.c:238 resrc.c:309
+#: resrc.c:262 resrc.c:333
#, c-format
msgid "can't open temporary file `%s': %s"
msgstr ""
-#: resrc.c:244
+#: resrc.c:268
#, c-format
msgid "can't redirect stdout: `%s': %s"
msgstr ""
-#: resrc.c:260
+#: resrc.c:284
#, c-format
msgid "%s %s: %s"
msgstr ""
-#: resrc.c:305
+#: resrc.c:329
#, c-format
msgid "can't execute `%s': %s"
msgstr ""
-#: resrc.c:314
+#: resrc.c:338
#, c-format
msgid "Using temporary file `%s' to read preprocessor output\n"
msgstr ""
-#: resrc.c:321
+#: resrc.c:345
#, c-format
msgid "can't popen `%s': %s"
msgstr ""
-#: resrc.c:323
+#: resrc.c:347
#, c-format
msgid "Using popen to read preprocessor output\n"
msgstr ""
-#: resrc.c:362
+#: resrc.c:413
#, c-format
msgid "Tried `%s'\n"
msgstr ""
-#: resrc.c:373
+#: resrc.c:424
#, c-format
msgid "Using `%s'\n"
msgstr ""
-#: resrc.c:529
+#: resrc.c:583
#, c-format
msgid "%s:%d: %s\n"
msgstr ""
-#: resrc.c:537
+#: resrc.c:591
#, c-format
msgid "%s: unexpected EOF"
msgstr ""
-#: resrc.c:586
+#: resrc.c:640
#, c-format
msgid "%s: read of %lu returned %lu"
msgstr ""
-#: resrc.c:624 resrc.c:1134
+#: resrc.c:678 resrc.c:1453
#, c-format
msgid "stat failed on bitmap file `%s': %s"
msgstr ""
-#: resrc.c:675
+#: resrc.c:729
#, c-format
msgid "cursor file `%s' does not contain cursor data"
msgstr ""
-#: resrc.c:707 resrc.c:1003
+#: resrc.c:761 resrc.c:1161
#, c-format
msgid "%s: fseek to %lu failed: %s"
msgstr ""
-#: resrc.c:831
+#: resrc.c:887
msgid "help ID requires DIALOGEX"
msgstr ""
-#: resrc.c:833
+#: resrc.c:889
msgid "control data requires DIALOGEX"
msgstr ""
-#: resrc.c:861
+#: resrc.c:917
#, c-format
msgid "stat failed on font file `%s': %s"
msgstr ""
-#: resrc.c:972
+#: resrc.c:1130
#, c-format
msgid "icon file `%s' does not contain icon data"
msgstr ""
-#: resrc.c:1273 resrc.c:1308
+#: resrc.c:1675 resrc.c:1710
#, c-format
msgid "stat failed on file `%s': %s"
msgstr ""
-#: resrc.c:1494
+#: resrc.c:1891
#, c-format
msgid "can't open `%s' for output: %s"
msgstr ""
-#: size.c:83
+#: size.c:84
#, c-format
msgid " Displays the sizes of sections inside binary files\n"
msgstr ""
-#: size.c:84
+#: size.c:85
#, c-format
msgid " If no input file(s) are specified, a.out is assumed\n"
msgstr ""
-#: size.c:85
+#: size.c:86
#, c-format
msgid ""
" The options are:\n"
@@ -4916,22 +5047,22 @@ msgid ""
"\n"
msgstr ""
-#: size.c:158
+#: size.c:159
#, c-format
msgid "invalid argument to --format: %s"
msgstr ""
-#: size.c:185
+#: size.c:186
#, c-format
msgid "Invalid radix: %s\n"
msgstr ""
-#: srconv.c:1722
+#: srconv.c:1724
#, c-format
msgid "Convert a COFF object file into a SYSROFF object file\n"
msgstr ""
-#: srconv.c:1723
+#: srconv.c:1725
#, c-format
msgid ""
" The options are:\n"
@@ -4943,160 +5074,160 @@ msgid ""
" -v --version Print the program's version number\n"
msgstr ""
-#: srconv.c:1869
+#: srconv.c:1871
#, c-format
msgid "unable to open output file %s"
msgstr ""
-#: stabs.c:330 stabs.c:1708
+#: stabs.c:328 stabs.c:1706
msgid "numeric overflow"
msgstr ""
-#: stabs.c:340
+#: stabs.c:338
#, c-format
msgid "Bad stab: %s\n"
msgstr ""
-#: stabs.c:348
+#: stabs.c:346
#, c-format
msgid "Warning: %s: %s\n"
msgstr ""
-#: stabs.c:458
+#: stabs.c:456
#, c-format
msgid "N_LBRAC not within function\n"
msgstr ""
-#: stabs.c:497
+#: stabs.c:495
#, c-format
msgid "Too many N_RBRACs\n"
msgstr ""
-#: stabs.c:738
+#: stabs.c:736
msgid "unknown C++ encoded name"
msgstr ""
#. Complain and keep going, so compilers can invent new
#. cross-reference types.
-#: stabs.c:1253
+#: stabs.c:1251
msgid "unrecognized cross reference type"
msgstr ""
#. Does this actually ever happen? Is that why we are worrying
#. about dealing with it rather than just calling error_type?
-#: stabs.c:1800
+#: stabs.c:1798
msgid "missing index type"
msgstr ""
-#: stabs.c:2114
+#: stabs.c:2112
msgid "unknown virtual character for baseclass"
msgstr ""
-#: stabs.c:2132
+#: stabs.c:2130
msgid "unknown visibility character for baseclass"
msgstr ""
-#: stabs.c:2318
+#: stabs.c:2316
msgid "unnamed $vb type"
msgstr ""
-#: stabs.c:2324
+#: stabs.c:2322
msgid "unrecognized C++ abbreviation"
msgstr ""
-#: stabs.c:2400
+#: stabs.c:2398
msgid "unknown visibility character for field"
msgstr ""
-#: stabs.c:2652
+#: stabs.c:2650
msgid "const/volatile indicator missing"
msgstr ""
-#: stabs.c:2888
+#: stabs.c:2886
#, c-format
msgid "No mangling for \"%s\"\n"
msgstr ""
-#: stabs.c:3188
+#: stabs.c:3186
msgid "Undefined N_EXCL"
msgstr ""
-#: stabs.c:3268
+#: stabs.c:3266
#, c-format
msgid "Type file number %d out of range\n"
msgstr ""
-#: stabs.c:3273
+#: stabs.c:3271
#, c-format
msgid "Type index number %d out of range\n"
msgstr ""
-#: stabs.c:3352
+#: stabs.c:3350
#, c-format
msgid "Unrecognized XCOFF type %d\n"
msgstr ""
-#: stabs.c:3644
+#: stabs.c:3642
#, c-format
msgid "bad mangled name `%s'\n"
msgstr ""
-#: stabs.c:3739
+#: stabs.c:3737
#, c-format
msgid "no argument types in mangled string\n"
msgstr ""
-#: stabs.c:5093
+#: stabs.c:5091
#, c-format
msgid "Demangled name is not a function\n"
msgstr ""
-#: stabs.c:5135
+#: stabs.c:5133
#, c-format
msgid "Unexpected type in v3 arglist demangling\n"
msgstr ""
-#: stabs.c:5202
+#: stabs.c:5200
#, c-format
msgid "Unrecognized demangle component %d\n"
msgstr ""
-#: stabs.c:5254
+#: stabs.c:5252
#, c-format
msgid "Failed to print demangled template\n"
msgstr ""
-#: stabs.c:5334
+#: stabs.c:5332
#, c-format
msgid "Couldn't get demangled builtin type\n"
msgstr ""
-#: stabs.c:5383
+#: stabs.c:5381
#, c-format
msgid "Unexpected demangled varargs\n"
msgstr ""
-#: stabs.c:5390
+#: stabs.c:5388
#, c-format
msgid "Unrecognized demangled builtin type\n"
msgstr ""
-#: strings.c:218
+#: strings.c:215
#, c-format
msgid "invalid number %s"
msgstr ""
-#: strings.c:700
+#: strings.c:697
#, c-format
msgid "invalid integer argument %s"
msgstr ""
-#: strings.c:709
+#: strings.c:706
#, c-format
msgid " Display printable strings in [file(s)] (stdin by default)\n"
msgstr ""
-#: strings.c:710
+#: strings.c:707
#, c-format
msgid ""
" The options are:\n"
@@ -5117,12 +5248,12 @@ msgid ""
" -v --version Print the program's version number\n"
msgstr ""
-#: sysdump.c:642
+#: sysdump.c:641
#, c-format
msgid "Print a human readable interpretation of a SYSROFF object file\n"
msgstr ""
-#: sysdump.c:643
+#: sysdump.c:642
#, c-format
msgid ""
" The options are:\n"
@@ -5130,70 +5261,139 @@ msgid ""
" -v --version Print the program's version number\n"
msgstr ""
-#: sysdump.c:710
+#: sysdump.c:709
#, c-format
msgid "cannot open input file %s"
msgstr ""
-#: version.c:35
+#: version.c:34
#, c-format
-msgid "Copyright 2005 Free Software Foundation, Inc.\n"
+msgid "Copyright 2007 Free Software Foundation, Inc.\n"
msgstr ""
-#: version.c:36
+#: version.c:35
#, 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 ""
-#: windres.c:204
+#: windmc.c:194
#, c-format
-msgid "can't open %s `%s': %s"
+msgid "can't create %s file ,%s' for output.\n"
msgstr ""
-#: windres.c:370
+#: windmc.c:202
#, c-format
-msgid ": expected to be a directory\n"
+msgid "Usage: %s [option(s)] [input-file]\n"
msgstr ""
-#: windres.c:382
+#: windmc.c:204
#, c-format
-msgid ": expected to be a leaf\n"
+msgid ""
+" The options are:\n"
+" -a --ascii_in Read input file as ASCII file\n"
+" -A --ascii_out Write binary messages as ASCII\n"
+" -b --binprefix .bin filename is prefixed by .mc filename_ "
+"for uniqueness.\n"
+" -c --customflag Set custom flags for messages\n"
+" -C --codepage_in=<val> Set codepage when reading mc text file\n"
+" -d --decimal_values Print values to text files decimal\n"
+" -e --extension=<extension> Set header extension used on export header "
+"file\n"
+" -F --target <target> Specify output target for endianess.\n"
+" -h --headerdir=<directory> Set the export directory for headers\n"
+" -u --unicode_in Read input file as UTF16 file\n"
+" -U --unicode_out Write binary messages as UFT16\n"
+" -m --maxlength=<val> Set the maximal allowed message length\n"
+" -n --nullterminate Automatic add a zero termination to strings\n"
+" -o --hresult_use Use HRESULT definition instead of status code "
+"definition\n"
+" -O --codepage_out=<val> Set codepage used for writing text file\n"
+" -r --rcdir=<directory> Set the export directory for rc files\n"
+" -x --xdbg=<directory> Where to create the .dbg C include file\n"
+" that maps message ID's to their symbolic "
+"name.\n"
+msgstr ""
+
+#: windmc.c:224
+#, c-format
+msgid ""
+" -H --help Print this help message\n"
+" -v --verbose Verbose - tells you what it's doing\n"
+" -V --version Print version information\n"
msgstr ""
-#: windres.c:391
+#: windmc.c:287 windres.c:415
#, c-format
msgid "%s: warning: "
msgstr ""
-#: windres.c:393
+#: windmc.c:288
+#, c-format
+msgid "A codepage was specified switch ,%s' and UTF16.\n"
+msgstr ""
+
+#: windmc.c:289
+#, c-format
+msgid "\tcodepage settings are ignored.\n"
+msgstr ""
+
+#: windmc.c:333
+msgid "try to add a ill language."
+msgstr ""
+
+#: windmc.c:1142
+#, c-format
+msgid "unable to open file ,%s' for input.\n"
+msgstr ""
+
+#: windmc.c:1161
+msgid "input file does not seems to be UFT16.\n"
+msgstr ""
+
+#: windres.c:220
+#, c-format
+msgid "can't open %s `%s': %s"
+msgstr ""
+
+#: windres.c:394
+#, c-format
+msgid ": expected to be a directory\n"
+msgstr ""
+
+#: windres.c:406
+#, c-format
+msgid ": expected to be a leaf\n"
+msgstr ""
+
+#: windres.c:417
#, c-format
msgid ": duplicate value\n"
msgstr ""
-#: windres.c:543
+#: windres.c:567
#, c-format
msgid "unknown format type `%s'"
msgstr ""
-#: windres.c:544
+#: windres.c:568
#, c-format
msgid "%s: supported formats:"
msgstr ""
#. Otherwise, we give up.
-#: windres.c:627
+#: windres.c:651
#, c-format
msgid "can not determine type of file `%s'; use the -J option"
msgstr ""
-#: windres.c:639
+#: windres.c:663
#, c-format
msgid "Usage: %s [option(s)] [input-file] [output-file]\n"
msgstr ""
-#: windres.c:641
+#: windres.c:665
#, c-format
msgid ""
" The options are:\n"
@@ -5207,6 +5407,7 @@ msgid ""
" -D --define <sym>[=<val>] Define SYM when preprocessing rc file\n"
" -U --undefine <sym> Undefine SYM when preprocessing rc file\n"
" -v --verbose Verbose - tells you what it's doing\n"
+" -c --codepage=<codepage> Specify default codepage\n"
" -l --language=<val> Set language when reading rc file\n"
" --use-temp-file Use a temporary file instead of popen to "
"read\n"
@@ -5214,12 +5415,12 @@ msgid ""
" --no-use-temp-file Use popen (default)\n"
msgstr ""
-#: windres.c:657
+#: windres.c:682
#, c-format
msgid " --yydebug Turn on parser debugging\n"
msgstr ""
-#: windres.c:660
+#: windres.c:685
#, c-format
msgid ""
" -r Ignored for compatibility with rc\n"
@@ -5228,7 +5429,7 @@ msgid ""
" -V --version Print version information\n"
msgstr ""
-#: windres.c:665
+#: windres.c:690
#, c-format
msgid ""
"FORMAT is one of rc, res, or coff, and is deduced from the file name\n"
@@ -5236,36 +5437,40 @@ msgid ""
"No input-file is stdin, default rc. No output-file is stdout, default rc.\n"
msgstr ""
-#: windres.c:803
+#: windres.c:828
+msgid "invalid codepage specified.\n"
+msgstr ""
+
+#: windres.c:843
msgid "invalid option -f\n"
msgstr ""
-#: windres.c:808
+#: windres.c:848
msgid "No filename following the -fo option.\n"
msgstr ""
-#: windres.c:866
+#: windres.c:907
#, c-format
msgid ""
"Option -I is deprecated for setting the input format, please use -J "
"instead.\n"
msgstr ""
-#: windres.c:984
+#: windres.c:1027
msgid "no resources"
msgstr ""
-#: wrstabs.c:354 wrstabs.c:1915
+#: wrstabs.c:353 wrstabs.c:1916
#, c-format
msgid "string_hash_lookup failed: %s"
msgstr ""
-#: wrstabs.c:635
+#: wrstabs.c:636
#, c-format
msgid "stab_int_type: bad size %u"
msgstr ""
-#: wrstabs.c:1393
+#: wrstabs.c:1394
#, c-format
msgid "%s: warning: unknown size for field `%s' in struct"
msgstr ""
diff --git a/binutils/po/da.gmo b/binutils/po/da.gmo
deleted file mode 100644
index 8f9b965b6edf..000000000000
--- a/binutils/po/da.gmo
+++ /dev/null
Binary files differ
diff --git a/binutils/po/es.gmo b/binutils/po/es.gmo
deleted file mode 100644
index f5f43fabe671..000000000000
--- a/binutils/po/es.gmo
+++ /dev/null
Binary files differ
diff --git a/binutils/po/fi.gmo b/binutils/po/fi.gmo
deleted file mode 100644
index 55d819ee4c76..000000000000
--- a/binutils/po/fi.gmo
+++ /dev/null
Binary files differ
diff --git a/binutils/po/fr.gmo b/binutils/po/fr.gmo
deleted file mode 100644
index 214c0998cf4b..000000000000
--- a/binutils/po/fr.gmo
+++ /dev/null
Binary files differ
diff --git a/binutils/po/ja.gmo b/binutils/po/ja.gmo
deleted file mode 100644
index 5152d33babf8..000000000000
--- a/binutils/po/ja.gmo
+++ /dev/null
Binary files differ
diff --git a/binutils/po/ro.gmo b/binutils/po/ro.gmo
deleted file mode 100644
index f1c1e0e13add..000000000000
--- a/binutils/po/ro.gmo
+++ /dev/null
Binary files differ
diff --git a/binutils/po/ru.gmo b/binutils/po/ru.gmo
deleted file mode 100644
index 88eb5d3023c4..000000000000
--- a/binutils/po/ru.gmo
+++ /dev/null
Binary files differ
diff --git a/binutils/po/rw.gmo b/binutils/po/rw.gmo
deleted file mode 100644
index 6d5d7b9ef17e..000000000000
--- a/binutils/po/rw.gmo
+++ /dev/null
Binary files differ
diff --git a/binutils/po/sv.gmo b/binutils/po/sv.gmo
deleted file mode 100644
index 16e644399493..000000000000
--- a/binutils/po/sv.gmo
+++ /dev/null
Binary files differ
diff --git a/binutils/po/tr.gmo b/binutils/po/tr.gmo
deleted file mode 100644
index 71904464e412..000000000000
--- a/binutils/po/tr.gmo
+++ /dev/null
Binary files differ
diff --git a/binutils/po/vi.gmo b/binutils/po/vi.gmo
deleted file mode 100644
index c63cb5d00420..000000000000
--- a/binutils/po/vi.gmo
+++ /dev/null
Binary files differ
diff --git a/binutils/po/zh_CN.gmo b/binutils/po/zh_CN.gmo
deleted file mode 100644
index 04e985e361fd..000000000000
--- a/binutils/po/zh_CN.gmo
+++ /dev/null
Binary files differ
diff --git a/binutils/po/zh_TW.gmo b/binutils/po/zh_TW.gmo
deleted file mode 100644
index b02a71ee6b1e..000000000000
--- a/binutils/po/zh_TW.gmo
+++ /dev/null
Binary files differ
diff --git a/binutils/prdbg.c b/binutils/prdbg.c
index 87a49341b016..529903d790c0 100644
--- a/binutils/prdbg.c
+++ b/binutils/prdbg.c
@@ -1,5 +1,5 @@
/* prdbg.c -- Print out generic debugging information.
- Copyright 1995, 1996, 1999, 2002, 2003, 2004
+ Copyright 1995, 1996, 1999, 2002, 2003, 2004, 2006, 2007
Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>.
Tags style generation written by Salvador E. Tropea <set@computer.org>.
@@ -24,12 +24,11 @@
/* This file prints out the generic debugging information, by
supplying a set of routines to debug_write. */
-#include <stdio.h>
+#include "sysdep.h"
#include <assert.h>
-
#include "bfd.h"
-#include "bucomm.h"
#include "libiberty.h"
+#include "demangle.h"
#include "debug.h"
#include "budbg.h"
@@ -53,7 +52,7 @@ struct pr_handle
/* The symbols table for this BFD. */
asymbol **syms;
/* Pointer to a function to demangle symbols. */
- char *(*demangler) (bfd *, const char *);
+ char *(*demangler) (bfd *, const char *, int);
};
/* The type stack. */
@@ -724,8 +723,8 @@ pr_function_type (void *p, int argcount, bfd_boolean varargs)
/* Now the return type is on the top of the stack. */
- s = (char *) xmalloc (len);
- strcpy (s, "(|) (");
+ s = xmalloc (len);
+ LITSTRCPY (s, "(|) (");
if (argcount < 0)
strcat (s, "/* unknown */");
@@ -910,11 +909,10 @@ pr_method_type (void *p, bfd_boolean domain, int argcount, bfd_boolean varargs)
domain_type = pop_type (info);
if (domain_type == NULL)
return FALSE;
- if (strncmp (domain_type, "class ", sizeof "class " - 1) == 0
+ if (CONST_STRNEQ (domain_type, "class ")
&& strchr (domain_type + sizeof "class " - 1, ' ') == NULL)
domain_type += sizeof "class " - 1;
- else if (strncmp (domain_type, "union class ",
- sizeof "union class ") == 0
+ else if (CONST_STRNEQ (domain_type, "union class ")
&& (strchr (domain_type + sizeof "union class " - 1, ' ')
== NULL))
domain_type += sizeof "union class " - 1;
@@ -1317,7 +1315,7 @@ pr_class_baseclass (void *p, bfd_vma bitpos, bfd_boolean virtual,
if (t == NULL)
return FALSE;
- if (strncmp (t, "class ", sizeof "class " - 1) == 0)
+ if (CONST_STRNEQ (t, "class "))
t += sizeof "class " - 1;
/* Push it back on to take advantage of the prepend_type and
@@ -2154,12 +2152,10 @@ tg_class_static_member (void *p, const char *name,
len_var = strlen (name);
len_class = strlen (info->stack->next->type);
- full_name = (char *) xmalloc (len_var + len_class + 3);
+ full_name = xmalloc (len_var + len_class + 3);
if (! full_name)
return FALSE;
- memcpy (full_name, info->stack->next->type, len_class);
- memcpy (full_name + len_class, "::", 2);
- memcpy (full_name + len_class + 2, name, len_var + 1);
+ sprintf (full_name, "%s::%s", info->stack->next->type, name);
if (! substitute_type (info, full_name))
return FALSE;
@@ -2199,7 +2195,7 @@ tg_class_baseclass (void *p, bfd_vma bitpos ATTRIBUTE_UNUSED,
if (t == NULL)
return FALSE;
- if (strncmp (t, "class ", sizeof "class " - 1) == 0)
+ if (CONST_STRNEQ (t, "class "))
t += sizeof "class " - 1;
/* Push it back on to take advantage of the prepend_type and
@@ -2529,25 +2525,18 @@ tg_variable (void *p, const char *name, enum debug_var_kind kind,
bfd_vma val ATTRIBUTE_UNUSED)
{
struct pr_handle *info = (struct pr_handle *) p;
- char *t;
- const char *dname, *from_class;
+ char *t, *dname, *from_class;
t = pop_type (info);
if (t == NULL)
return FALSE;
- dname = name;
+ dname = NULL;
if (info->demangler)
- {
- dname = info->demangler (info->abfd, name);
- if (strcmp (name, dname) == 0)
- {
- free ((char *) dname);
- dname = name;
- }
- }
+ dname = info->demangler (info->abfd, name, DMGL_ANSI | DMGL_PARAMS);
- if (dname != name)
+ from_class = NULL;
+ if (dname != NULL)
{
char *sep;
sep = strstr (dname, "::");
@@ -2558,14 +2547,9 @@ tg_variable (void *p, const char *name, enum debug_var_kind kind,
from_class = dname;
}
else
- {
- /* Obscure types as vts and type_info nodes. */
- name = dname;
- from_class = NULL;
- }
+ /* Obscure types as vts and type_info nodes. */
+ name = dname;
}
- else
- from_class = NULL;
fprintf (info->f, "%s\t%s\t0;\"\tkind:v\ttype:%s", name, info->filename, t);
@@ -2583,10 +2567,10 @@ tg_variable (void *p, const char *name, enum debug_var_kind kind,
}
if (from_class)
- {
- fprintf (info->f, "\tclass:%s",from_class);
- free ((char *) dname);
- }
+ fprintf (info->f, "\tclass:%s", from_class);
+
+ if (dname)
+ free (dname);
fprintf (info->f, "\n");
@@ -2601,28 +2585,22 @@ static bfd_boolean
tg_start_function (void *p, const char *name, bfd_boolean global)
{
struct pr_handle *info = (struct pr_handle *) p;
- const char *dname;
+ char *dname;
if (! global)
info->stack->flavor = "static";
else
info->stack->flavor = NULL;
- dname = name;
+ dname = NULL;
if (info->demangler)
- {
- dname = info->demangler (info->abfd, name);
- if (strcmp (name, dname) == 0)
- {
- free ((char *) dname);
- dname = name;
- }
- }
+ dname = info->demangler (info->abfd, name, DMGL_ANSI | DMGL_PARAMS);
- if (! substitute_type (info, dname))
+ if (! substitute_type (info, dname ? dname : name))
return FALSE;
- if (dname != name)
+ info->stack->method = NULL;
+ if (dname != NULL)
{
char *sep;
sep = strstr (dname, "::");
@@ -2642,8 +2620,6 @@ tg_start_function (void *p, const char *name, bfd_boolean global)
*sep = 0;
/* Obscure functions as type_info function. */
}
- else
- info->stack->method = NULL;
info->stack->parents = strdup (name);
diff --git a/binutils/rclex.c b/binutils/rclex.c
index b546335b1abc..ef0961b61ca6 100644
--- a/binutils/rclex.c
+++ b/binutils/rclex.c
@@ -1,646 +1,9 @@
-/* A lexical scanner generated by flex */
+/* rclex.c -- lexer for Windows rc files parser */
-/* Scanner skeleton version:
- * $Header: /cvs/src/src/binutils/rclex.c,v 1.1.16.1 2006/04/16 18:36:40 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 86
-#define YY_END_OF_BUFFER 87
-static yyconst short int yy_accept[470] =
- { 0,
- 0, 0, 87, 85, 84, 83, 85, 78, 80, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 2, 4, 84,
- 0, 81, 78, 80, 79, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 81, 0, 82, 11, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
-
- 82, 82, 82, 82, 82, 3, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 76, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 41, 82, 82,
- 82, 53, 42, 82, 82, 82, 82, 82, 82, 82,
- 46, 82, 82, 82, 82, 82, 82, 71, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
-
- 82, 82, 82, 7, 82, 82, 82, 38, 1, 82,
- 82, 82, 82, 82, 18, 82, 82, 25, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 70,
- 82, 82, 39, 40, 82, 82, 82, 82, 82, 30,
- 82, 82, 82, 82, 82, 82, 50, 82, 82, 82,
- 82, 82, 34, 82, 82, 9, 82, 82, 19, 82,
- 68, 82, 82, 82, 82, 82, 82, 12, 0, 82,
- 82, 82, 82, 82, 82, 82, 13, 82, 14, 82,
- 82, 82, 82, 65, 82, 82, 82, 52, 82, 72,
- 82, 82, 82, 82, 82, 82, 47, 82, 82, 82,
-
- 82, 82, 82, 82, 82, 82, 58, 82, 82, 36,
- 82, 82, 82, 82, 82, 82, 82, 82, 0, 82,
- 0, 77, 17, 82, 82, 51, 82, 10, 82, 82,
- 82, 82, 16, 82, 82, 82, 82, 82, 82, 82,
- 29, 82, 82, 82, 82, 82, 82, 82, 73, 82,
- 31, 82, 82, 82, 82, 82, 82, 45, 6, 82,
- 82, 82, 82, 77, 82, 23, 24, 82, 15, 82,
- 27, 82, 82, 66, 82, 28, 54, 43, 82, 82,
- 82, 48, 82, 69, 8, 82, 82, 82, 82, 82,
- 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
-
- 64, 82, 82, 82, 82, 56, 82, 82, 82, 82,
- 35, 49, 82, 82, 82, 82, 20, 82, 82, 82,
- 82, 82, 82, 82, 82, 74, 82, 82, 82, 32,
- 82, 82, 37, 82, 82, 82, 82, 82, 82, 75,
- 82, 67, 61, 82, 82, 82, 33, 59, 60, 5,
- 21, 82, 82, 82, 82, 55, 57, 82, 82, 82,
- 26, 63, 82, 82, 82, 62, 22, 44, 0
- } ;
-
-static yyconst int yy_ec[256] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 1, 5, 6, 1, 1, 1, 1, 1,
- 1, 1, 1, 7, 1, 1, 1, 8, 8, 8,
- 9, 8, 8, 8, 8, 8, 8, 1, 1, 1,
- 1, 1, 1, 1, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 19, 26, 27, 28, 29, 30, 19, 31, 32, 19,
- 1, 1, 1, 1, 1, 1, 33, 33, 33, 33,
-
- 33, 33, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 33,
- 19, 19, 34, 1, 35, 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, 1
- } ;
-
-static yyconst int yy_meta[36] =
- { 0,
- 1, 2, 3, 2, 1, 4, 2, 5, 5, 5,
- 5, 5, 5, 5, 5, 1, 1, 1, 1, 1,
- 5, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 5, 1, 1
- } ;
-
-static yyconst short int yy_base[476] =
- { 0,
- 0, 0, 517, 518, 34, 518, 511, 0, 494, 25,
- 26, 45, 25, 28, 24, 488, 499, 49, 0, 40,
- 43, 488, 51, 66, 67, 484, 35, 518, 518, 81,
- 505, 84, 0, 488, 518, 0, 496, 479, 494, 477,
- 75, 476, 479, 477, 46, 491, 70, 486, 473, 483,
- 55, 479, 483, 468, 69, 471, 86, 84, 469, 479,
- 466, 480, 466, 461, 477, 472, 75, 455, 81, 459,
- 87, 77, 470, 469, 467, 454, 454, 460, 96, 463,
- 455, 449, 448, 110, 468, 458, 0, 453, 446, 451,
- 450, 445, 454, 437, 438, 451, 435, 450, 432, 428,
-
- 431, 432, 435, 443, 426, 0, 425, 438, 437, 422,
- 417, 419, 429, 421, 422, 426, 414, 430, 425, 412,
- 426, 407, 408, 409, 421, 411, 0, 404, 411, 418,
- 416, 412, 410, 417, 395, 401, 414, 408, 394, 403,
- 399, 393, 389, 390, 388, 394, 396, 105, 385, 389,
- 401, 390, 391, 398, 387, 379, 381, 378, 375, 378,
- 372, 376, 389, 370, 365, 105, 383, 0, 381, 369,
- 365, 0, 0, 364, 365, 362, 360, 377, 363, 358,
- 105, 375, 374, 353, 357, 357, 351, 0, 368, 354,
- 349, 348, 354, 348, 345, 358, 348, 356, 358, 354,
-
- 349, 346, 351, 0, 337, 346, 352, 0, 0, 336,
- 122, 336, 347, 107, 0, 347, 333, 0, 330, 328,
- 338, 327, 338, 330, 329, 322, 319, 315, 332, 0,
- 332, 333, 0, 0, 329, 324, 331, 316, 316, 0,
- 116, 307, 309, 320, 324, 320, 0, 323, 320, 110,
- 320, 320, 0, 308, 318, 0, 318, 310, 0, 296,
- 0, 300, 309, 296, 293, 306, 306, 0, 135, 139,
- 295, 289, 292, 302, 290, 292, 0, 295, 297, 297,
- 278, 294, 297, 0, 295, 280, 278, 0, 279, 0,
- 272, 285, 269, 287, 272, 283, 0, 282, 281, 273,
-
- 267, 279, 263, 259, 261, 259, 0, 276, 258, 0,
- 257, 256, 260, 250, 271, 270, 267, 260, 272, 145,
- 271, 151, 0, 261, 243, 0, 242, 0, 261, 240,
- 260, 241, 0, 252, 239, 252, 238, 233, 249, 248,
- 0, 251, 249, 249, 236, 229, 242, 227, 0, 224,
- 0, 225, 224, 241, 226, 239, 220, 229, 0, 218,
- 217, 224, 219, 237, 215, 0, 0, 211, 0, 228,
- 0, 211, 205, 0, 218, 0, 0, 0, 214, 208,
- 213, 0, 222, 0, 0, 217, 206, 201, 202, 201,
- 215, 201, 201, 199, 208, 210, 209, 201, 190, 196,
-
- 194, 190, 190, 192, 198, 0, 200, 184, 186, 184,
- 0, 0, 186, 183, 190, 178, 0, 179, 173, 174,
- 172, 185, 188, 183, 173, 0, 185, 173, 166, 0,
- 169, 177, 0, 166, 162, 157, 159, 158, 161, 0,
- 157, 0, 0, 162, 167, 158, 0, 0, 0, 0,
- 0, 143, 152, 143, 141, 0, 0, 130, 124, 124,
- 0, 0, 107, 85, 80, 0, 0, 0, 518, 158,
- 163, 65, 168, 173, 178
- } ;
-
-static yyconst short int yy_def[476] =
- { 0,
- 469, 1, 469, 469, 469, 469, 470, 471, 472, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 469, 469, 469,
- 470, 469, 471, 472, 469, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 469, 470, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
-
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
-
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 469, 474,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
-
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 475, 474,
- 475, 474, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 475, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
-
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 473, 473, 473, 473, 473, 473, 473, 0, 469,
- 469, 469, 469, 469, 469
- } ;
-
-static yyconst short int yy_nxt[554] =
- { 0,
- 4, 5, 6, 5, 7, 8, 4, 9, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 19,
- 20, 21, 22, 19, 23, 24, 25, 19, 26, 27,
- 19, 19, 19, 28, 29, 30, 37, 30, 50, 41,
- 52, 55, 51, 42, 81, 38, 43, 56, 82, 63,
- 53, 39, 83, 40, 44, 95, 67, 64, 54, 96,
- 59, 45, 60, 65, 103, 46, 68, 66, 47, 34,
- 61, 62, 48, 49, 70, 73, 71, 74, 76, 72,
- 77, 104, 30, 78, 30, 84, 84, 90, 85, 108,
- 91, 98, 99, 75, 79, 111, 113, 123, 126, 109,
-
- 129, 124, 131, 132, 114, 139, 468, 467, 127, 112,
- 130, 84, 84, 205, 85, 241, 206, 273, 242, 225,
- 274, 140, 243, 269, 269, 295, 270, 141, 226, 466,
- 207, 227, 228, 304, 229, 465, 269, 269, 305, 319,
- 321, 296, 321, 322, 36, 321, 321, 464, 321, 322,
- 36, 321, 321, 463, 321, 322, 36, 321, 31, 31,
- 462, 31, 31, 33, 33, 461, 33, 33, 36, 460,
- 459, 36, 36, 320, 320, 458, 320, 320, 321, 321,
- 457, 456, 321, 455, 454, 453, 452, 451, 450, 449,
- 448, 447, 446, 445, 444, 443, 442, 441, 440, 439,
-
- 438, 437, 436, 435, 434, 433, 432, 431, 430, 429,
- 428, 427, 426, 425, 424, 423, 422, 421, 420, 419,
- 418, 417, 416, 415, 414, 413, 412, 411, 410, 409,
- 408, 407, 406, 405, 404, 403, 402, 401, 400, 399,
- 398, 364, 397, 396, 395, 394, 393, 392, 391, 390,
- 389, 388, 387, 386, 385, 384, 383, 382, 381, 380,
- 379, 378, 377, 376, 375, 374, 373, 372, 371, 370,
- 369, 368, 367, 366, 365, 364, 364, 363, 362, 361,
- 360, 359, 358, 357, 356, 355, 354, 353, 352, 351,
- 350, 349, 348, 347, 346, 345, 344, 343, 342, 341,
-
- 340, 339, 338, 337, 336, 335, 334, 333, 332, 331,
- 330, 329, 328, 327, 326, 325, 324, 323, 318, 317,
- 316, 315, 314, 313, 312, 311, 310, 309, 308, 307,
- 306, 303, 302, 301, 300, 299, 298, 297, 294, 293,
- 292, 291, 290, 289, 288, 287, 286, 285, 284, 283,
- 282, 281, 280, 279, 278, 277, 276, 275, 272, 271,
- 268, 267, 266, 265, 264, 263, 262, 261, 260, 259,
- 258, 257, 256, 255, 254, 253, 252, 251, 250, 249,
- 248, 247, 246, 245, 244, 240, 239, 238, 237, 236,
- 235, 234, 233, 232, 231, 230, 224, 223, 222, 221,
-
- 220, 219, 218, 217, 216, 215, 214, 213, 212, 211,
- 210, 209, 208, 204, 203, 202, 201, 200, 199, 198,
- 197, 196, 195, 194, 193, 192, 191, 190, 189, 188,
- 187, 186, 185, 184, 183, 182, 181, 180, 179, 178,
- 177, 176, 175, 174, 173, 172, 171, 170, 169, 168,
- 167, 166, 165, 164, 163, 162, 161, 160, 159, 158,
- 157, 156, 155, 154, 153, 152, 151, 150, 149, 148,
- 147, 146, 32, 145, 144, 143, 142, 138, 137, 136,
- 135, 134, 133, 128, 125, 122, 121, 120, 119, 118,
- 117, 116, 115, 110, 107, 106, 105, 102, 101, 100,
-
- 97, 94, 93, 92, 89, 88, 87, 86, 35, 32,
- 80, 69, 58, 57, 35, 32, 469, 3, 469, 469,
- 469, 469, 469, 469, 469, 469, 469, 469, 469, 469,
- 469, 469, 469, 469, 469, 469, 469, 469, 469, 469,
- 469, 469, 469, 469, 469, 469, 469, 469, 469, 469,
- 469, 469, 469
- } ;
-
-static yyconst short int yy_chk[554] =
- { 0,
- 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, 5, 10, 5, 13, 11,
- 14, 15, 13, 11, 27, 10, 11, 15, 27, 20,
- 14, 10, 27, 10, 12, 45, 21, 20, 14, 45,
- 18, 12, 18, 20, 51, 12, 21, 20, 12, 472,
- 18, 18, 12, 12, 23, 24, 23, 24, 25, 23,
- 25, 51, 30, 25, 30, 32, 32, 41, 32, 55,
- 41, 47, 47, 24, 25, 57, 58, 67, 69, 55,
-
- 71, 67, 72, 72, 58, 79, 465, 464, 69, 57,
- 71, 84, 84, 148, 84, 181, 148, 214, 181, 166,
- 214, 79, 181, 211, 211, 241, 211, 79, 166, 463,
- 148, 166, 166, 250, 166, 460, 269, 269, 250, 269,
- 270, 241, 270, 270, 270, 270, 320, 459, 320, 320,
- 320, 320, 322, 458, 322, 322, 322, 322, 470, 470,
- 455, 470, 470, 471, 471, 454, 471, 471, 473, 453,
- 452, 473, 473, 474, 474, 446, 474, 474, 475, 475,
- 445, 444, 475, 441, 439, 438, 437, 436, 435, 434,
- 432, 431, 429, 428, 427, 425, 424, 423, 422, 421,
-
- 420, 419, 418, 416, 415, 414, 413, 410, 409, 408,
- 407, 405, 404, 403, 402, 401, 400, 399, 398, 397,
- 396, 395, 394, 393, 392, 391, 390, 389, 388, 387,
- 386, 383, 381, 380, 379, 375, 373, 372, 370, 368,
- 365, 364, 363, 362, 361, 360, 358, 357, 356, 355,
- 354, 353, 352, 350, 348, 347, 346, 345, 344, 343,
- 342, 340, 339, 338, 337, 336, 335, 334, 332, 331,
- 330, 329, 327, 325, 324, 321, 319, 318, 317, 316,
- 315, 314, 313, 312, 311, 309, 308, 306, 305, 304,
- 303, 302, 301, 300, 299, 298, 296, 295, 294, 293,
-
- 292, 291, 289, 287, 286, 285, 283, 282, 281, 280,
- 279, 278, 276, 275, 274, 273, 272, 271, 267, 266,
- 265, 264, 263, 262, 260, 258, 257, 255, 254, 252,
- 251, 249, 248, 246, 245, 244, 243, 242, 239, 238,
- 237, 236, 235, 232, 231, 229, 228, 227, 226, 225,
- 224, 223, 222, 221, 220, 219, 217, 216, 213, 212,
- 210, 207, 206, 205, 203, 202, 201, 200, 199, 198,
- 197, 196, 195, 194, 193, 192, 191, 190, 189, 187,
- 186, 185, 184, 183, 182, 180, 179, 178, 177, 176,
- 175, 174, 171, 170, 169, 167, 165, 164, 163, 162,
-
- 161, 160, 159, 158, 157, 156, 155, 154, 153, 152,
- 151, 150, 149, 147, 146, 145, 144, 143, 142, 141,
- 140, 139, 138, 137, 136, 135, 134, 133, 132, 131,
- 130, 129, 128, 126, 125, 124, 123, 122, 121, 120,
- 119, 118, 117, 116, 115, 114, 113, 112, 111, 110,
- 109, 108, 107, 105, 104, 103, 102, 101, 100, 99,
- 98, 97, 96, 95, 94, 93, 92, 91, 90, 89,
- 88, 86, 85, 83, 82, 81, 80, 78, 77, 76,
- 75, 74, 73, 70, 68, 66, 65, 64, 63, 62,
- 61, 60, 59, 56, 54, 53, 52, 50, 49, 48,
-
- 46, 44, 43, 42, 40, 39, 38, 37, 34, 31,
- 26, 22, 17, 16, 9, 7, 3, 469, 469, 469,
- 469, 469, 469, 469, 469, 469, 469, 469, 469, 469,
- 469, 469, 469, 469, 469, 469, 469, 469, 469, 469,
- 469, 469, 469, 469, 469, 469, 469, 469, 469, 469,
- 469, 469, 469
- } ;
-
-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 "rclex.l"
-#define INITIAL 0
-#line 2 "rclex.l"
-/* Copyright 1997, 1998, 1999, 2001, 2002, 2003, 2005
+/* Copyright 1997, 1998, 1999, 2001, 2002, 2003, 2005, 2006, 2007
Free Software Foundation, Inc.
- Written by Ian Lance Taylor, Cygnus Support.
+
+ Written by Kai Tietz, Onevision.
This file is part of GNU Binutils.
@@ -659,10 +22,10 @@ char *yytext;
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-/* This is a lex input file which generates a lexer used by the
- Windows rc file parser. It basically just recognized a bunch of
- keywords. */
+/* This is a lexer used by the Windows rc file parser. It basically
+ just recognized a bunch of keywords. */
+#include "sysdep.h"
#include "bfd.h"
#include "bucomm.h"
#include "libiberty.h"
@@ -672,8 +35,6 @@ char *yytext;
#include <assert.h>
-#define YY_NO_UNPUT
-
/* Whether we are in rcdata mode, in which we returns the lengths of
strings. */
@@ -689,7 +50,7 @@ static int rcdata_mode;
static int suppress_cpp_data;
-#define MAYBE_RETURN(x) return suppress_cpp_data ? IGNORED_TOKEN : (x)
+#define IGNORE_CPP(x) (suppress_cpp_data ? IGNORED_TOKEN : (x))
/* The first filename we detect in the cpp output. We use this to
tell included files from the original file. */
@@ -706,1668 +67,139 @@ struct alloc_string
static struct alloc_string *strings;
-/* Local functions. */
-
-static void cpp_line (const char *);
-static char *handle_quotes (const char *, unsigned long *);
-static char *get_string (int);
-
-#line 716 "rclex.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 78 "rclex.l"
-
-
-#line 881 "rclex.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 >= 470 )
- 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] != 518 );
-
-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 80 "rclex.l"
-{ MAYBE_RETURN (BEG); }
- YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 81 "rclex.l"
-{ MAYBE_RETURN (BEG); }
- YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 82 "rclex.l"
-{ MAYBE_RETURN (END); }
- YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 83 "rclex.l"
-{ MAYBE_RETURN (END); }
- YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 84 "rclex.l"
-{ MAYBE_RETURN (ACCELERATORS); }
- YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 85 "rclex.l"
-{ MAYBE_RETURN (VIRTKEY); }
- YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 86 "rclex.l"
-{ MAYBE_RETURN (ASCII); }
- YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 87 "rclex.l"
-{ MAYBE_RETURN (NOINVERT); }
- YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 88 "rclex.l"
-{ MAYBE_RETURN (SHIFT); }
- YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 89 "rclex.l"
-{ MAYBE_RETURN (CONTROL); }
- YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 90 "rclex.l"
-{ MAYBE_RETURN (ALT); }
- YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 91 "rclex.l"
-{ MAYBE_RETURN (BITMAP); }
- YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 92 "rclex.l"
-{ MAYBE_RETURN (CURSOR); }
- YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 93 "rclex.l"
-{ MAYBE_RETURN (DIALOG); }
- YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 94 "rclex.l"
-{ MAYBE_RETURN (DIALOGEX); }
- YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 95 "rclex.l"
-{ MAYBE_RETURN (EXSTYLE); }
- YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 96 "rclex.l"
-{ MAYBE_RETURN (CAPTION); }
- YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 97 "rclex.l"
-{ MAYBE_RETURN (CLASS); }
- YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 98 "rclex.l"
-{ MAYBE_RETURN (STYLE); }
- YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 99 "rclex.l"
-{ MAYBE_RETURN (AUTO3STATE); }
- YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 100 "rclex.l"
-{ MAYBE_RETURN (AUTOCHECKBOX); }
- YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 101 "rclex.l"
-{ MAYBE_RETURN (AUTORADIOBUTTON); }
- YY_BREAK
-case 23:
-YY_RULE_SETUP
-#line 102 "rclex.l"
-{ MAYBE_RETURN (CHECKBOX); }
- YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 103 "rclex.l"
-{ MAYBE_RETURN (COMBOBOX); }
- YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 104 "rclex.l"
-{ MAYBE_RETURN (CTEXT); }
- YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 105 "rclex.l"
-{ MAYBE_RETURN (DEFPUSHBUTTON); }
- YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 106 "rclex.l"
-{ MAYBE_RETURN (EDITTEXT); }
- YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 107 "rclex.l"
-{ MAYBE_RETURN (GROUPBOX); }
- YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 108 "rclex.l"
-{ MAYBE_RETURN (LISTBOX); }
- YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 109 "rclex.l"
-{ MAYBE_RETURN (LTEXT); }
- YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 110 "rclex.l"
-{ MAYBE_RETURN (PUSHBOX); }
- YY_BREAK
-case 32:
-YY_RULE_SETUP
-#line 111 "rclex.l"
-{ MAYBE_RETURN (PUSHBUTTON); }
- YY_BREAK
-case 33:
-YY_RULE_SETUP
-#line 112 "rclex.l"
-{ MAYBE_RETURN (RADIOBUTTON); }
- YY_BREAK
-case 34:
-YY_RULE_SETUP
-#line 113 "rclex.l"
-{ MAYBE_RETURN (RTEXT); }
- YY_BREAK
-case 35:
-YY_RULE_SETUP
-#line 114 "rclex.l"
-{ MAYBE_RETURN (SCROLLBAR); }
- YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 115 "rclex.l"
-{ MAYBE_RETURN (STATE3); }
- YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 116 "rclex.l"
-{ MAYBE_RETURN (USERBUTTON); }
- YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 117 "rclex.l"
-{ MAYBE_RETURN (BEDIT); }
- YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 118 "rclex.l"
-{ MAYBE_RETURN (HEDIT); }
- YY_BREAK
-case 40:
-YY_RULE_SETUP
-#line 119 "rclex.l"
-{ MAYBE_RETURN (IEDIT); }
- YY_BREAK
-case 41:
-YY_RULE_SETUP
-#line 120 "rclex.l"
-{ MAYBE_RETURN (FONT); }
- YY_BREAK
-case 42:
-YY_RULE_SETUP
-#line 121 "rclex.l"
-{ MAYBE_RETURN (ICON); }
- YY_BREAK
-case 43:
-YY_RULE_SETUP
-#line 122 "rclex.l"
-{ MAYBE_RETURN (LANGUAGE); }
- YY_BREAK
-case 44:
-YY_RULE_SETUP
-#line 123 "rclex.l"
-{ MAYBE_RETURN (CHARACTERISTICS); }
- YY_BREAK
-case 45:
-YY_RULE_SETUP
-#line 124 "rclex.l"
-{ MAYBE_RETURN (VERSIONK); }
- YY_BREAK
-case 46:
-YY_RULE_SETUP
-#line 125 "rclex.l"
-{ MAYBE_RETURN (MENU); }
- YY_BREAK
-case 47:
-YY_RULE_SETUP
-#line 126 "rclex.l"
-{ MAYBE_RETURN (MENUEX); }
- YY_BREAK
-case 48:
-YY_RULE_SETUP
-#line 127 "rclex.l"
-{ MAYBE_RETURN (MENUITEM); }
- YY_BREAK
-case 49:
-YY_RULE_SETUP
-#line 128 "rclex.l"
-{ MAYBE_RETURN (SEPARATOR); }
- YY_BREAK
-case 50:
-YY_RULE_SETUP
-#line 129 "rclex.l"
-{ MAYBE_RETURN (POPUP); }
- YY_BREAK
-case 51:
-YY_RULE_SETUP
-#line 130 "rclex.l"
-{ MAYBE_RETURN (CHECKED); }
- YY_BREAK
-case 52:
-YY_RULE_SETUP
-#line 131 "rclex.l"
-{ MAYBE_RETURN (GRAYED); }
- YY_BREAK
-case 53:
-YY_RULE_SETUP
-#line 132 "rclex.l"
-{ MAYBE_RETURN (HELP); }
- YY_BREAK
-case 54:
-YY_RULE_SETUP
-#line 133 "rclex.l"
-{ MAYBE_RETURN (INACTIVE); }
- YY_BREAK
-case 55:
-YY_RULE_SETUP
-#line 134 "rclex.l"
-{ MAYBE_RETURN (MENUBARBREAK); }
- YY_BREAK
-case 56:
-YY_RULE_SETUP
-#line 135 "rclex.l"
-{ MAYBE_RETURN (MENUBREAK); }
- YY_BREAK
-case 57:
-YY_RULE_SETUP
-#line 136 "rclex.l"
-{ MAYBE_RETURN (MESSAGETABLE); }
- YY_BREAK
-case 58:
-YY_RULE_SETUP
-#line 137 "rclex.l"
-{ MAYBE_RETURN (RCDATA); }
- YY_BREAK
-case 59:
-YY_RULE_SETUP
-#line 138 "rclex.l"
-{ MAYBE_RETURN (STRINGTABLE); }
- YY_BREAK
-case 60:
-YY_RULE_SETUP
-#line 139 "rclex.l"
-{ MAYBE_RETURN (VERSIONINFO); }
- YY_BREAK
-case 61:
-YY_RULE_SETUP
-#line 140 "rclex.l"
-{ MAYBE_RETURN (FILEVERSION); }
- YY_BREAK
-case 62:
-YY_RULE_SETUP
-#line 141 "rclex.l"
-{ MAYBE_RETURN (PRODUCTVERSION); }
- YY_BREAK
-case 63:
-YY_RULE_SETUP
-#line 142 "rclex.l"
-{ MAYBE_RETURN (FILEFLAGSMASK); }
- YY_BREAK
-case 64:
-YY_RULE_SETUP
-#line 143 "rclex.l"
-{ MAYBE_RETURN (FILEFLAGS); }
- YY_BREAK
-case 65:
-YY_RULE_SETUP
-#line 144 "rclex.l"
-{ MAYBE_RETURN (FILEOS); }
- YY_BREAK
-case 66:
-YY_RULE_SETUP
-#line 145 "rclex.l"
-{ MAYBE_RETURN (FILETYPE); }
- YY_BREAK
-case 67:
-YY_RULE_SETUP
-#line 146 "rclex.l"
-{ MAYBE_RETURN (FILESUBTYPE); }
- YY_BREAK
-case 68:
-YY_RULE_SETUP
-#line 147 "rclex.l"
-{ MAYBE_RETURN (VALUE); }
- YY_BREAK
-case 69:
-YY_RULE_SETUP
-#line 148 "rclex.l"
-{ MAYBE_RETURN (MOVEABLE); }
- YY_BREAK
-case 70:
-YY_RULE_SETUP
-#line 149 "rclex.l"
-{ MAYBE_RETURN (FIXED); }
- YY_BREAK
-case 71:
-YY_RULE_SETUP
-#line 150 "rclex.l"
-{ MAYBE_RETURN (PURE); }
- YY_BREAK
-case 72:
-YY_RULE_SETUP
-#line 151 "rclex.l"
-{ MAYBE_RETURN (IMPURE); }
- YY_BREAK
-case 73:
-YY_RULE_SETUP
-#line 152 "rclex.l"
-{ MAYBE_RETURN (PRELOAD); }
- YY_BREAK
-case 74:
-YY_RULE_SETUP
-#line 153 "rclex.l"
-{ MAYBE_RETURN (LOADONCALL); }
- YY_BREAK
-case 75:
-YY_RULE_SETUP
-#line 154 "rclex.l"
-{ MAYBE_RETURN (DISCARDABLE); }
- YY_BREAK
-case 76:
-YY_RULE_SETUP
-#line 155 "rclex.l"
-{ MAYBE_RETURN (NOT); }
- YY_BREAK
-case 77:
-YY_RULE_SETUP
-#line 157 "rclex.l"
-{
- char *s, *send;
-
- /* This is a hack to let us parse version
- information easily. */
-
- s = strchr (yytext, '"');
- ++s;
- send = strchr (s, '"');
- if (strncmp (s, "StringFileInfo",
- sizeof "StringFileInfo" - 1) == 0
- && s + sizeof "StringFileInfo" - 1 == send)
- MAYBE_RETURN (BLOCKSTRINGFILEINFO);
- else if (strncmp (s, "VarFileInfo",
- sizeof "VarFileInfo" - 1) == 0
- && s + sizeof "VarFileInfo" - 1 == send)
- MAYBE_RETURN (BLOCKVARFILEINFO);
- else
- {
- char *r;
-
- r = get_string (send - s + 1);
- strncpy (r, s, send - s);
- r[send - s] = '\0';
- yylval.s = r;
- MAYBE_RETURN (BLOCK);
- }
- }
- YY_BREAK
-case 78:
-YY_RULE_SETUP
-#line 186 "rclex.l"
+struct rclex_keywords
{
- cpp_line (yytext);
- }
- YY_BREAK
-case 79:
-YY_RULE_SETUP
-#line 190 "rclex.l"
-{
- yylval.i.val = strtoul (yytext, 0, 0);
- yylval.i.dword = 1;
- MAYBE_RETURN (NUMBER);
- }
- YY_BREAK
-case 80:
-YY_RULE_SETUP
-#line 196 "rclex.l"
-{
- yylval.i.val = strtoul (yytext, 0, 0);
- yylval.i.dword = 0;
- MAYBE_RETURN (NUMBER);
- }
- YY_BREAK
-case 81:
-YY_RULE_SETUP
-#line 202 "rclex.l"
-{
- char *s;
- unsigned long length;
-
- s = handle_quotes (yytext, &length);
- if (! rcdata_mode)
- {
- yylval.s = s;
- MAYBE_RETURN (QUOTEDSTRING);
- }
- else
- {
- yylval.ss.length = length;
- yylval.ss.s = s;
- MAYBE_RETURN (SIZEDSTRING);
- }
- }
- YY_BREAK
-case 82:
-YY_RULE_SETUP
-#line 220 "rclex.l"
-{
- char *s;
-
- /* I rejected comma in a string in order to
- handle VIRTKEY, CONTROL in an accelerator
- resource. This means that an unquoted
- file name can not contain a comma. I
- don't know what rc permits. */
-
- s = get_string (strlen (yytext) + 1);
- strcpy (s, yytext);
- yylval.s = s;
- MAYBE_RETURN (STRING);
- }
- YY_BREAK
-case 83:
-YY_RULE_SETUP
-#line 235 "rclex.l"
-{ ++rc_lineno; }
- YY_BREAK
-case 84:
-YY_RULE_SETUP
-#line 236 "rclex.l"
-{ /* ignore whitespace */ }
- YY_BREAK
-case 85:
-YY_RULE_SETUP
-#line 237 "rclex.l"
-{ MAYBE_RETURN (*yytext); }
- YY_BREAK
-case 86:
-YY_RULE_SETUP
-#line 239 "rclex.l"
-ECHO;
- YY_BREAK
-#line 1460 "rclex.c"
-case YY_STATE_EOF(INITIAL):
- yyterminate();
-
- 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 >= 470 )
- 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 >= 470 )
- 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 == 469);
-
- 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
-
+ const char *name;
+ int tok;
+};
-#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 );
- }
+#define K(KEY) { #KEY, KEY }
+#define KRT(KEY) { #KEY, RT_##KEY }
-#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 );
- }
+static const struct rclex_keywords keywds[] =
+{
+ K(ACCELERATORS), K(ALT), K(ANICURSOR), K(ANIICON), K(ASCII),
+ K(AUTO3STATE), K(AUTOCHECKBOX), K(AUTORADIOBUTTON),
+ K(BEDIT), { "BEGIN", BEG }, K(BITMAP), K(BLOCK), K(BUTTON),
+ K(CAPTION), K(CHARACTERISTICS), K(CHECKBOX), K(CHECKED),
+ K(CLASS), K(COMBOBOX), K(CONTROL), K(CTEXT), K(CURSOR),
+ K(DEFPUSHBUTTON), K(DIALOG), K(DIALOGEX), K(DISCARDABLE),
+ K(DLGINCLUDE), K(DLGINIT),
+ K(EDITTEXT), K(END), K(EXSTYLE),
+ K(FILEFLAGS), K(FILEFLAGSMASK), K(FILEOS), K(FILESUBTYPE),
+ K(FILETYPE), K(FILEVERSION), K(FIXED), K(FONT), K(FONTDIR),
+ K(GRAYED), KRT(GROUP_CURSOR), KRT(GROUP_ICON), K(GROUPBOX),
+ K(HEDIT), K(HELP), K(HTML),
+ K(ICON), K(IEDIT), K(IMPURE), K(INACTIVE),
+ K(LANGUAGE), K(LISTBOX), K(LOADONCALL), K(LTEXT),
+ K(MANIFEST), K(MENU), K(MENUBARBREAK), K(MENUBREAK),
+ K(MENUEX), K(MENUITEM), K(MESSAGETABLE), K(MOVEABLE),
+ K(NOINVERT), K(NOT),
+ K(PLUGPLAY), K(POPUP), K(PRELOAD), K(PRODUCTVERSION),
+ K(PURE), K(PUSHBOX), K(PUSHBUTTON),
+ K(RADIOBUTTON), K(RCDATA), K(RTEXT),
+ K(SCROLLBAR), K(SEPARATOR), K(SHIFT), K(STATE3),
+ K(STRINGTABLE), K(STYLE),
+ K(TOOLBAR),
+ K(USERBUTTON),
+ K(VALUE), { "VERSION", VERSIONK }, K(VERSIONINFO),
+ K(VIRTKEY), K(VXD),
+ { NULL, 0 },
+};
-#ifdef YY_USE_PROTOS
-static void yy_flex_free( void *ptr )
-#else
-static void yy_flex_free( ptr )
-void *ptr;
-#endif
- {
- free( ptr );
- }
+/* External input stream from resrc */
+extern FILE *cpp_pipe;
-#if YY_MAIN
-int main()
- {
- yylex();
- return 0;
- }
-#endif
-#line 239 "rclex.l"
+/* Lexical scanner helpers. */
+static int rclex_lastch = -1;
+static size_t rclex_tok_max = 0;
+static size_t rclex_tok_pos = 0;
+static char *rclex_tok = NULL;
-#ifndef yywrap
-/* This is needed for some versions of lex. */
-int yywrap (void)
+static int
+rclex_translatekeyword (const char *key)
{
- return 1;
+ if (key && ISUPPER (key[0]))
+ {
+ const struct rclex_keywords *kw = &keywds[0];
+
+ do
+ {
+ if (! strcmp (kw->name, key))
+ return kw->tok;
+ ++kw;
+ }
+ while (kw->name != NULL);
+ }
+ return STRING;
}
-#endif
/* Handle a C preprocessor line. */
static void
-cpp_line (const char *s)
+cpp_line (void)
{
+ const char *s = rclex_tok;
int line;
char *send, *fn;
+ size_t len, mlen;
++s;
while (ISSPACE (*s))
++s;
+ /* Check for #pragma code_page ( DEFAULT | <nr>). */
+ len = strlen (s);
+ mlen = strlen ("pragma");
+ if (len > mlen && memcmp (s, "pragma", mlen) == 0 && ISSPACE (s[mlen]))
+ {
+ const char *end;
+
+ s += mlen + 1;
+ while (ISSPACE (*s))
+ ++s;
+ len = strlen (s);
+ mlen = strlen ("code_page");
+ if (len <= mlen || memcmp (s, "code_page", mlen) != 0)
+ /* FIXME: We ought to issue a warning message about an unrecognised pragma. */
+ return;
+ s += mlen;
+ while (ISSPACE (*s))
+ ++s;
+ if (*s != '(')
+ /* FIXME: We ought to issue an error message about a malformed pragma. */
+ return;
+ ++s;
+ while (ISSPACE (*s))
+ ++s;
+ if (*s == 0 || (end = strchr (s, ')')) == NULL)
+ /* FIXME: We ought to issue an error message about a malformed pragma. */
+ return;
+ len = (size_t) (end - s);
+ fn = xmalloc (len + 1);
+ if (len)
+ memcpy (fn, s, len);
+ fn[len] = 0;
+ while (len > 0 && (fn[len - 1] > 0 && fn[len - 1] <= 0x20))
+ fn[--len] = 0;
+ if (! len || (len == strlen ("DEFAULT") && strcasecmp (fn, "DEFAULT") == 0))
+ wind_current_codepage = wind_default_codepage;
+ else if (len > 0)
+ {
+ rc_uint_type ncp;
+
+ if (fn[0] == '0' && (fn[1] == 'x' || fn[1] == 'X'))
+ ncp = (rc_uint_type) strtol (fn + 2, NULL, 16);
+ else
+ ncp = (rc_uint_type) strtol (fn, NULL, 10);
+ if (ncp == CP_UTF16 || ! unicode_is_valid_codepage (ncp))
+ fatal (_("invalid value specified for pragma code_page.\n"));
+ wind_current_codepage = ncp;
+ }
+ free (fn);
+ return;
+ }
+
line = strtol (s, &send, 0);
if (*send != '\0' && ! ISSPACE (*send))
return;
@@ -2387,14 +219,14 @@ cpp_line (const char *s)
if (send == NULL)
return;
- fn = (char *) xmalloc (send - s + 1);
+ fn = xmalloc (send - s + 1);
strncpy (fn, s, send - s);
fn[send - s] = '\0';
free (rc_filename);
rc_filename = fn;
- if (!initial_fn)
+ if (! initial_fn)
{
initial_fn = xmalloc (strlen (fn) + 1);
strcpy (initial_fn, fn);
@@ -2409,13 +241,30 @@ cpp_line (const char *s)
suppress_cpp_data = 1;
}
+/* Allocate a string of a given length. */
+
+static char *
+get_string (int len)
+{
+ struct alloc_string *as;
+
+ as = xmalloc (sizeof *as);
+ as->s = xmalloc (len);
+
+ as->next = strings;
+ strings = as;
+
+ return as->s;
+}
+
/* Handle a quoted string. The quotes are stripped. A pair of quotes
in a string are turned into a single quote. Adjacent strings are
merged separated by whitespace are merged, as in C. */
static char *
-handle_quotes (const char *input, unsigned long *len)
+handle_quotes (rc_uint_type *len)
{
+ const char *input = rclex_tok;
char *ret, *s;
const char *t;
int ch;
@@ -2440,6 +289,8 @@ handle_quotes (const char *input, unsigned long *len)
case '\"':
rcparse_warning ("use \"\" to put \" in a string");
+ *s++ = '"';
+ ++t;
break;
case 'a':
@@ -2498,7 +349,7 @@ handle_quotes (const char *input, unsigned long *len)
*s++ = ch;
break;
- case 'x':
+ case 'x': case 'X':
++t;
ch = 0;
/* We only handle single byte chars here. Make sure
@@ -2538,6 +389,7 @@ handle_quotes (const char *input, unsigned long *len)
}
else
{
+ rcparse_warning ("unexpected character after '\"'");
++t;
assert (ISSPACE (*t));
while (ISSPACE (*t))
@@ -2560,20 +412,166 @@ handle_quotes (const char *input, unsigned long *len)
return ret;
}
-/* Allocate a string of a given length. */
+/* Allocate a unicode string of a given length. */
-static char *
-get_string (int len)
+static unichar *
+get_unistring (int len)
{
- struct alloc_string *as;
+ return (unichar *) get_string (len * sizeof (unichar));
+}
- as = (struct alloc_string *) xmalloc (sizeof *as);
- as->s = xmalloc (len);
+/* Handle a quoted unicode string. The quotes are stripped. A pair of quotes
+ in a string are turned into a single quote. Adjacent strings are
+ merged separated by whitespace are merged, as in C. */
- as->next = strings;
- strings = as;
+static unichar *
+handle_uniquotes (rc_uint_type *len)
+{
+ const char *input = rclex_tok;
+ unichar *ret, *s;
+ const char *t;
+ int ch;
+ int num_xdigits;
- return as->s;
+ ret = get_unistring (strlen (input) + 1);
+
+ s = ret;
+ t = input;
+ if ((*t == 'L' || *t == 'l') && t[1] == '"')
+ t += 2;
+ else if (*t == '"')
+ ++t;
+ while (*t != '\0')
+ {
+ if (*t == '\\')
+ {
+ ++t;
+ switch (*t)
+ {
+ case '\0':
+ rcparse_warning ("backslash at end of string");
+ break;
+
+ case '\"':
+ rcparse_warning ("use \"\" to put \" in a string");
+ break;
+
+ case 'a':
+ *s++ = ESCAPE_B; /* Strange, but true... */
+ ++t;
+ break;
+
+ case 'b':
+ *s++ = ESCAPE_B;
+ ++t;
+ break;
+
+ case 'f':
+ *s++ = ESCAPE_F;
+ ++t;
+ break;
+
+ case 'n':
+ *s++ = ESCAPE_N;
+ ++t;
+ break;
+
+ case 'r':
+ *s++ = ESCAPE_R;
+ ++t;
+ break;
+
+ case 't':
+ *s++ = ESCAPE_T;
+ ++t;
+ break;
+
+ case 'v':
+ *s++ = ESCAPE_V;
+ ++t;
+ break;
+
+ case '\\':
+ *s++ = (unichar) *t++;
+ break;
+
+ case '0': case '1': case '2': case '3':
+ case '4': case '5': case '6': case '7':
+ ch = *t - '0';
+ ++t;
+ if (*t >= '0' && *t <= '7')
+ {
+ ch = (ch << 3) | (*t - '0');
+ ++t;
+ if (*t >= '0' && *t <= '7')
+ {
+ ch = (ch << 3) | (*t - '0');
+ ++t;
+ }
+ }
+ *s++ = (unichar) ch;
+ break;
+
+ case 'x': case 'X':
+ ++t;
+ ch = 0;
+ /* We only handle two byte chars here. Make sure
+ we finish an escape sequence like "/xB0ABC" after
+ the first two digits. */
+ num_xdigits = 4;
+ while (num_xdigits--)
+ {
+ if (*t >= '0' && *t <= '9')
+ ch = (ch << 4) | (*t - '0');
+ else if (*t >= 'a' && *t <= 'f')
+ ch = (ch << 4) | (*t - 'a' + 10);
+ else if (*t >= 'A' && *t <= 'F')
+ ch = (ch << 4) | (*t - 'A' + 10);
+ else
+ break;
+ ++t;
+ }
+ *s++ = (unichar) ch;
+ break;
+
+ default:
+ rcparse_warning ("unrecognized escape sequence");
+ *s++ = '\\';
+ *s++ = (unichar) *t++;
+ break;
+ }
+ }
+ else if (*t != '"')
+ *s++ = (unichar) *t++;
+ else if (t[1] == '\0')
+ break;
+ else if (t[1] == '"')
+ {
+ *s++ = '"';
+ t += 2;
+ }
+ else
+ {
+ ++t;
+ assert (ISSPACE (*t));
+ while (ISSPACE (*t))
+ {
+ if ((*t) == '\n')
+ ++rc_lineno;
+ ++t;
+ }
+ if (*t == '\0')
+ break;
+ assert (*t == '"');
+ ++t;
+ }
+ }
+
+ *s = '\0';
+
+ *len = s - ret;
+
+ return ret;
}
/* Discard all the strings we have allocated. The parser calls this
@@ -2599,7 +597,6 @@ rcparse_discard_strings (void)
}
/* Enter rcdata mode. */
-
void
rcparse_rcdata (void)
{
@@ -2607,9 +604,285 @@ rcparse_rcdata (void)
}
/* Go back to normal mode from rcdata mode. */
-
void
rcparse_normal (void)
{
rcdata_mode = 0;
}
+
+static void
+rclex_tok_add_char (int ch)
+{
+ if (! rclex_tok || rclex_tok_max <= rclex_tok_pos)
+ {
+ char *h = xmalloc (rclex_tok_max + 9);
+
+ if (! h)
+ abort ();
+ if (rclex_tok)
+ {
+ memcpy (h, rclex_tok, rclex_tok_pos + 1);
+ free (rclex_tok);
+ }
+ else
+ rclex_tok_pos = 0;
+ rclex_tok_max += 8;
+ rclex_tok = h;
+ }
+ if (ch != -1)
+ rclex_tok[rclex_tok_pos++] = (char) ch;
+ rclex_tok[rclex_tok_pos] = 0;
+}
+
+static int
+rclex_readch (void)
+{
+ int r = -1;
+
+ if ((r = rclex_lastch) != -1)
+ rclex_lastch = -1;
+ else
+ {
+ char ch;
+ do
+ {
+ if (! cpp_pipe || feof (cpp_pipe)
+ || fread (&ch, 1, 1,cpp_pipe) != 1)
+ break;
+ r = ((int) ch) & 0xff;
+ }
+ while (r == 0 || r == '\r');
+ }
+ rclex_tok_add_char (r);
+ return r;
+}
+
+static int
+rclex_peekch (void)
+{
+ int r;
+
+ if ((r = rclex_lastch) == -1)
+ {
+ if ((r = rclex_readch ()) != -1)
+ {
+ rclex_lastch = r;
+ if (rclex_tok_pos > 0)
+ rclex_tok[--rclex_tok_pos] = 0;
+ }
+ }
+ return r;
+}
+
+static void
+rclex_string (void)
+{
+ int c;
+
+ while ((c = rclex_peekch ()) != -1)
+ {
+ if (c == '\n')
+ break;
+ if (c == '\\')
+ {
+ rclex_readch ();
+ if ((c = rclex_peekch ()) == -1 || c == '\n')
+ break;
+ rclex_readch ();
+ }
+ else if (rclex_readch () == '"')
+ {
+ if (rclex_peekch () == '"')
+ rclex_readch ();
+ else
+ break;
+ }
+ }
+}
+
+static rc_uint_type
+read_digit (int ch)
+{
+ rc_uint_type base = 10;
+ rc_uint_type ret, val;
+ int warned = 0;
+
+ ret = 0;
+ if (ch == '0')
+ {
+ base = 8;
+ switch (rclex_peekch ())
+ {
+ case 'o': case 'O':
+ rclex_readch ();
+ base = 8;
+ break;
+
+ case 'x': case 'X':
+ rclex_readch ();
+ base = 16;
+ break;
+ }
+ }
+ else
+ ret = (rc_uint_type) (ch - '0');
+ while ((ch = rclex_peekch ()) != -1)
+ {
+ if (ISDIGIT (ch))
+ val = (rc_uint_type) (ch - '0');
+ else if (ch >= 'a' && ch <= 'f')
+ val = (rc_uint_type) ((ch - 'a') + 10);
+ else if (ch >= 'A' && ch <= 'F')
+ val = (rc_uint_type) ((ch - 'A') + 10);
+ else
+ break;
+ rclex_readch ();
+ if (! warned && val >= base)
+ {
+ warned = 1;
+ rcparse_warning ("digit exceeds base");
+ }
+ ret *= base;
+ ret += val;
+ }
+ return ret;
+}
+
+/* yyparser entry method. */
+
+int
+yylex (void)
+{
+ char *s;
+ unichar *us;
+ rc_uint_type length;
+ int ch;
+
+ /* Make sure that rclex_tok is initialized. */
+ if (! rclex_tok)
+ rclex_tok_add_char (-1);
+
+ do
+ {
+ do
+ {
+ /* Clear token. */
+ rclex_tok_pos = 0;
+ rclex_tok[0] = 0;
+
+ if ((ch = rclex_readch ()) == -1)
+ return -1;
+ if (ch == '\n')
+ ++rc_lineno;
+ }
+ while (ch <= 0x20);
+
+ switch (ch)
+ {
+ case '#':
+ while ((ch = rclex_peekch ()) != -1 && ch != '\n')
+ rclex_readch ();
+ cpp_line ();
+ ch = IGNORED_TOKEN;
+ break;
+
+ case '{':
+ ch = IGNORE_CPP (BEG);
+ break;
+
+ case '}':
+ ch = IGNORE_CPP (END);
+ break;
+
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ yylval.i.val = read_digit (ch);
+ yylval.i.dword = 0;
+ switch (rclex_peekch ())
+ {
+ case 'l': case 'L':
+ rclex_readch ();
+ yylval.i.dword = 1;
+ break;
+ }
+ ch = IGNORE_CPP (NUMBER);
+ break;
+ case '"':
+ rclex_string ();
+ ch = IGNORE_CPP ((! rcdata_mode ? QUOTEDSTRING : SIZEDSTRING));
+ if (ch == IGNORED_TOKEN)
+ break;
+ s = handle_quotes (&length);
+ if (! rcdata_mode)
+ yylval.s = s;
+ else
+ {
+ yylval.ss.length = length;
+ yylval.ss.s = s;
+ }
+ break;
+ case 'L': case 'l':
+ if (rclex_peekch () == '"')
+ {
+ rclex_readch ();
+ rclex_string ();
+ ch = IGNORE_CPP ((! rcdata_mode ? QUOTEDUNISTRING : SIZEDUNISTRING));
+ if (ch == IGNORED_TOKEN)
+ break;
+ us = handle_uniquotes (&length);
+ if (! rcdata_mode)
+ yylval.uni = us;
+ else
+ {
+ yylval.suni.length = length;
+ yylval.suni.s = us;
+ }
+ break;
+ }
+ /* Fall through. */
+ default:
+ if (ISIDST (ch) || ch=='$')
+ {
+ while ((ch = rclex_peekch ()) != -1 && (ISIDNUM (ch) || ch == '$' || ch == '.'))
+ rclex_readch ();
+ ch = IGNORE_CPP (rclex_translatekeyword (rclex_tok));
+ if (ch == STRING)
+ {
+ s = get_string (strlen (rclex_tok) + 1);
+ strcpy (s, rclex_tok);
+ yylval.s = s;
+ }
+ else if (ch == BLOCK)
+ {
+ const char *hs = NULL;
+
+ switch (yylex ())
+ {
+ case STRING:
+ case QUOTEDSTRING:
+ hs = yylval.s;
+ break;
+ case SIZEDSTRING:
+ hs = yylval.s = yylval.ss.s;
+ break;
+ }
+ if (! hs)
+ {
+ rcparse_warning ("BLOCK expects a string as argument.");
+ ch = IGNORED_TOKEN;
+ }
+ else if (! strcmp (hs, "StringFileInfo"))
+ ch = BLOCKSTRINGFILEINFO;
+ else if (! strcmp (hs, "VarFileInfo"))
+ ch = BLOCKVARFILEINFO;
+ }
+ break;
+ }
+ ch = IGNORE_CPP (ch);
+ break;
+ }
+ }
+ while (ch == IGNORED_TOKEN);
+
+ return ch;
+}
diff --git a/binutils/rclex.l b/binutils/rclex.l
deleted file mode 100644
index 92b1ec738526..000000000000
--- a/binutils/rclex.l
+++ /dev/null
@@ -1,504 +0,0 @@
-%{ /* rclex.l -- lexer for Windows rc files parser */
-/* Copyright 1997, 1998, 1999, 2001, 2002, 2003, 2005
- Free Software Foundation, Inc.
- Written by Ian Lance Taylor, Cygnus Support.
-
- 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. */
-
-/* This is a lex input file which generates a lexer used by the
- Windows rc file parser. It basically just recognized a bunch of
- keywords. */
-
-#include "bfd.h"
-#include "bucomm.h"
-#include "libiberty.h"
-#include "safe-ctype.h"
-#include "windres.h"
-#include "rcparse.h"
-
-#include <assert.h>
-
-#define YY_NO_UNPUT
-
-/* Whether we are in rcdata mode, in which we returns the lengths of
- strings. */
-
-static int rcdata_mode;
-
-/* Whether we are supressing lines from cpp (including windows.h or
- headers from your C sources may bring in externs and typedefs).
- When active, we return IGNORED_TOKEN, which lets us ignore these
- outside of resource constructs. Thus, it isn't required to protect
- all the non-preprocessor lines in your header files with #ifdef
- RC_INVOKED. It also means your RC file can't include other RC
- files if they're named "*.h". Sorry. Name them *.rch or whatever. */
-
-static int suppress_cpp_data;
-
-#define MAYBE_RETURN(x) return suppress_cpp_data ? IGNORED_TOKEN : (x)
-
-/* The first filename we detect in the cpp output. We use this to
- tell included files from the original file. */
-
-static char *initial_fn;
-
-/* List of allocated strings. */
-
-struct alloc_string
-{
- struct alloc_string *next;
- char *s;
-};
-
-static struct alloc_string *strings;
-
-/* Local functions. */
-
-static void cpp_line (const char *);
-static char *handle_quotes (const char *, unsigned long *);
-static char *get_string (int);
-
-%}
-
-%%
-
-"BEGIN" { MAYBE_RETURN (BEG); }
-"{" { MAYBE_RETURN (BEG); }
-"END" { MAYBE_RETURN (END); }
-"}" { MAYBE_RETURN (END); }
-"ACCELERATORS" { MAYBE_RETURN (ACCELERATORS); }
-"VIRTKEY" { MAYBE_RETURN (VIRTKEY); }
-"ASCII" { MAYBE_RETURN (ASCII); }
-"NOINVERT" { MAYBE_RETURN (NOINVERT); }
-"SHIFT" { MAYBE_RETURN (SHIFT); }
-"CONTROL" { MAYBE_RETURN (CONTROL); }
-"ALT" { MAYBE_RETURN (ALT); }
-"BITMAP" { MAYBE_RETURN (BITMAP); }
-"CURSOR" { MAYBE_RETURN (CURSOR); }
-"DIALOG" { MAYBE_RETURN (DIALOG); }
-"DIALOGEX" { MAYBE_RETURN (DIALOGEX); }
-"EXSTYLE" { MAYBE_RETURN (EXSTYLE); }
-"CAPTION" { MAYBE_RETURN (CAPTION); }
-"CLASS" { MAYBE_RETURN (CLASS); }
-"STYLE" { MAYBE_RETURN (STYLE); }
-"AUTO3STATE" { MAYBE_RETURN (AUTO3STATE); }
-"AUTOCHECKBOX" { MAYBE_RETURN (AUTOCHECKBOX); }
-"AUTORADIOBUTTON" { MAYBE_RETURN (AUTORADIOBUTTON); }
-"CHECKBOX" { MAYBE_RETURN (CHECKBOX); }
-"COMBOBOX" { MAYBE_RETURN (COMBOBOX); }
-"CTEXT" { MAYBE_RETURN (CTEXT); }
-"DEFPUSHBUTTON" { MAYBE_RETURN (DEFPUSHBUTTON); }
-"EDITTEXT" { MAYBE_RETURN (EDITTEXT); }
-"GROUPBOX" { MAYBE_RETURN (GROUPBOX); }
-"LISTBOX" { MAYBE_RETURN (LISTBOX); }
-"LTEXT" { MAYBE_RETURN (LTEXT); }
-"PUSHBOX" { MAYBE_RETURN (PUSHBOX); }
-"PUSHBUTTON" { MAYBE_RETURN (PUSHBUTTON); }
-"RADIOBUTTON" { MAYBE_RETURN (RADIOBUTTON); }
-"RTEXT" { MAYBE_RETURN (RTEXT); }
-"SCROLLBAR" { MAYBE_RETURN (SCROLLBAR); }
-"STATE3" { MAYBE_RETURN (STATE3); }
-"USERBUTTON" { MAYBE_RETURN (USERBUTTON); }
-"BEDIT" { MAYBE_RETURN (BEDIT); }
-"HEDIT" { MAYBE_RETURN (HEDIT); }
-"IEDIT" { MAYBE_RETURN (IEDIT); }
-"FONT" { MAYBE_RETURN (FONT); }
-"ICON" { MAYBE_RETURN (ICON); }
-"LANGUAGE" { MAYBE_RETURN (LANGUAGE); }
-"CHARACTERISTICS" { MAYBE_RETURN (CHARACTERISTICS); }
-"VERSION" { MAYBE_RETURN (VERSIONK); }
-"MENU" { MAYBE_RETURN (MENU); }
-"MENUEX" { MAYBE_RETURN (MENUEX); }
-"MENUITEM" { MAYBE_RETURN (MENUITEM); }
-"SEPARATOR" { MAYBE_RETURN (SEPARATOR); }
-"POPUP" { MAYBE_RETURN (POPUP); }
-"CHECKED" { MAYBE_RETURN (CHECKED); }
-"GRAYED" { MAYBE_RETURN (GRAYED); }
-"HELP" { MAYBE_RETURN (HELP); }
-"INACTIVE" { MAYBE_RETURN (INACTIVE); }
-"MENUBARBREAK" { MAYBE_RETURN (MENUBARBREAK); }
-"MENUBREAK" { MAYBE_RETURN (MENUBREAK); }
-"MESSAGETABLE" { MAYBE_RETURN (MESSAGETABLE); }
-"RCDATA" { MAYBE_RETURN (RCDATA); }
-"STRINGTABLE" { MAYBE_RETURN (STRINGTABLE); }
-"VERSIONINFO" { MAYBE_RETURN (VERSIONINFO); }
-"FILEVERSION" { MAYBE_RETURN (FILEVERSION); }
-"PRODUCTVERSION" { MAYBE_RETURN (PRODUCTVERSION); }
-"FILEFLAGSMASK" { MAYBE_RETURN (FILEFLAGSMASK); }
-"FILEFLAGS" { MAYBE_RETURN (FILEFLAGS); }
-"FILEOS" { MAYBE_RETURN (FILEOS); }
-"FILETYPE" { MAYBE_RETURN (FILETYPE); }
-"FILESUBTYPE" { MAYBE_RETURN (FILESUBTYPE); }
-"VALUE" { MAYBE_RETURN (VALUE); }
-"MOVEABLE" { MAYBE_RETURN (MOVEABLE); }
-"FIXED" { MAYBE_RETURN (FIXED); }
-"PURE" { MAYBE_RETURN (PURE); }
-"IMPURE" { MAYBE_RETURN (IMPURE); }
-"PRELOAD" { MAYBE_RETURN (PRELOAD); }
-"LOADONCALL" { MAYBE_RETURN (LOADONCALL); }
-"DISCARDABLE" { MAYBE_RETURN (DISCARDABLE); }
-"NOT" { MAYBE_RETURN (NOT); }
-
-"BLOCK"[ \t\n]*"\""[^\#\n]*"\"" {
- char *s, *send;
-
- /* This is a hack to let us parse version
- information easily. */
-
- s = strchr (yytext, '"');
- ++s;
- send = strchr (s, '"');
- if (strncmp (s, "StringFileInfo",
- sizeof "StringFileInfo" - 1) == 0
- && s + sizeof "StringFileInfo" - 1 == send)
- MAYBE_RETURN (BLOCKSTRINGFILEINFO);
- else if (strncmp (s, "VarFileInfo",
- sizeof "VarFileInfo" - 1) == 0
- && s + sizeof "VarFileInfo" - 1 == send)
- MAYBE_RETURN (BLOCKVARFILEINFO);
- else
- {
- char *r;
-
- r = get_string (send - s + 1);
- strncpy (r, s, send - s);
- r[send - s] = '\0';
- yylval.s = r;
- MAYBE_RETURN (BLOCK);
- }
- }
-
-"#"[^\n]* {
- cpp_line (yytext);
- }
-
-[0-9][x0-9A-Fa-f]*L {
- yylval.i.val = strtoul (yytext, 0, 0);
- yylval.i.dword = 1;
- MAYBE_RETURN (NUMBER);
- }
-
-[0-9][x0-9A-Fa-f]* {
- yylval.i.val = strtoul (yytext, 0, 0);
- yylval.i.dword = 0;
- MAYBE_RETURN (NUMBER);
- }
-
-("\""[^\"\n]*"\""[ \t\n]*)+ {
- char *s;
- unsigned long length;
-
- s = handle_quotes (yytext, &length);
- if (! rcdata_mode)
- {
- yylval.s = s;
- MAYBE_RETURN (QUOTEDSTRING);
- }
- else
- {
- yylval.ss.length = length;
- yylval.ss.s = s;
- MAYBE_RETURN (SIZEDSTRING);
- }
- }
-
-[A-Za-z][^ ,\t\r\n]* {
- char *s;
-
- /* I rejected comma in a string in order to
- handle VIRTKEY, CONTROL in an accelerator
- resource. This means that an unquoted
- file name can not contain a comma. I
- don't know what rc permits. */
-
- s = get_string (strlen (yytext) + 1);
- strcpy (s, yytext);
- yylval.s = s;
- MAYBE_RETURN (STRING);
- }
-
-[\n] { ++rc_lineno; }
-[ \t\r]+ { /* ignore whitespace */ }
-. { MAYBE_RETURN (*yytext); }
-
-%%
-#ifndef yywrap
-/* This is needed for some versions of lex. */
-int yywrap (void)
-{
- return 1;
-}
-#endif
-
-/* Handle a C preprocessor line. */
-
-static void
-cpp_line (const char *s)
-{
- int line;
- char *send, *fn;
-
- ++s;
- while (ISSPACE (*s))
- ++s;
-
- line = strtol (s, &send, 0);
- if (*send != '\0' && ! ISSPACE (*send))
- return;
-
- /* Subtract 1 because we are about to count the newline. */
- rc_lineno = line - 1;
-
- s = send;
- while (ISSPACE (*s))
- ++s;
-
- if (*s != '"')
- return;
-
- ++s;
- send = strchr (s, '"');
- if (send == NULL)
- return;
-
- fn = (char *) xmalloc (send - s + 1);
- strncpy (fn, s, send - s);
- fn[send - s] = '\0';
-
- free (rc_filename);
- rc_filename = fn;
-
- if (!initial_fn)
- {
- initial_fn = xmalloc (strlen (fn) + 1);
- strcpy (initial_fn, fn);
- }
-
- /* Allow the initial file, regardless of name. Suppress all other
- files if they end in ".h" (this allows included "*.rc"). */
- if (strcmp (initial_fn, fn) == 0
- || strcmp (fn + strlen (fn) - 2, ".h") != 0)
- suppress_cpp_data = 0;
- else
- suppress_cpp_data = 1;
-}
-
-/* Handle a quoted string. The quotes are stripped. A pair of quotes
- in a string are turned into a single quote. Adjacent strings are
- merged separated by whitespace are merged, as in C. */
-
-static char *
-handle_quotes (const char *input, unsigned long *len)
-{
- char *ret, *s;
- const char *t;
- int ch;
- int num_xdigits;
-
- ret = get_string (strlen (input) + 1);
-
- s = ret;
- t = input;
- if (*t == '"')
- ++t;
- while (*t != '\0')
- {
- if (*t == '\\')
- {
- ++t;
- switch (*t)
- {
- case '\0':
- rcparse_warning ("backslash at end of string");
- break;
-
- case '\"':
- rcparse_warning ("use \"\" to put \" in a string");
- break;
-
- case 'a':
- *s++ = ESCAPE_B; /* Strange, but true... */
- ++t;
- break;
-
- case 'b':
- *s++ = ESCAPE_B;
- ++t;
- break;
-
- case 'f':
- *s++ = ESCAPE_F;
- ++t;
- break;
-
- case 'n':
- *s++ = ESCAPE_N;
- ++t;
- break;
-
- case 'r':
- *s++ = ESCAPE_R;
- ++t;
- break;
-
- case 't':
- *s++ = ESCAPE_T;
- ++t;
- break;
-
- case 'v':
- *s++ = ESCAPE_V;
- ++t;
- break;
-
- case '\\':
- *s++ = *t++;
- break;
-
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- ch = *t - '0';
- ++t;
- if (*t >= '0' && *t <= '7')
- {
- ch = (ch << 3) | (*t - '0');
- ++t;
- if (*t >= '0' && *t <= '7')
- {
- ch = (ch << 3) | (*t - '0');
- ++t;
- }
- }
- *s++ = ch;
- break;
-
- case 'x':
- ++t;
- ch = 0;
- /* We only handle single byte chars here. Make sure
- we finish an escape sequence like "/xB0ABC" after
- the first two digits. */
- num_xdigits = 2;
- while (num_xdigits--)
- {
- if (*t >= '0' && *t <= '9')
- ch = (ch << 4) | (*t - '0');
- else if (*t >= 'a' && *t <= 'f')
- ch = (ch << 4) | (*t - 'a' + 10);
- else if (*t >= 'A' && *t <= 'F')
- ch = (ch << 4) | (*t - 'A' + 10);
- else
- break;
- ++t;
- }
- *s++ = ch;
- break;
-
- default:
- rcparse_warning ("unrecognized escape sequence");
- *s++ = '\\';
- *s++ = *t++;
- break;
- }
- }
- else if (*t != '"')
- *s++ = *t++;
- else if (t[1] == '\0')
- break;
- else if (t[1] == '"')
- {
- *s++ = '"';
- t += 2;
- }
- else
- {
- ++t;
- assert (ISSPACE (*t));
- while (ISSPACE (*t))
- {
- if ((*t) == '\n')
- ++rc_lineno;
- ++t;
- }
- if (*t == '\0')
- break;
- assert (*t == '"');
- ++t;
- }
- }
-
- *s = '\0';
-
- *len = s - ret;
-
- return ret;
-}
-
-/* Allocate a string of a given length. */
-
-static char *
-get_string (int len)
-{
- struct alloc_string *as;
-
- as = (struct alloc_string *) xmalloc (sizeof *as);
- as->s = xmalloc (len);
-
- as->next = strings;
- strings = as;
-
- return as->s;
-}
-
-/* Discard all the strings we have allocated. The parser calls this
- when it no longer needs them. */
-
-void
-rcparse_discard_strings (void)
-{
- struct alloc_string *as;
-
- as = strings;
- while (as != NULL)
- {
- struct alloc_string *n;
-
- free (as->s);
- n = as->next;
- free (as);
- as = n;
- }
-
- strings = NULL;
-}
-
-/* Enter rcdata mode. */
-
-void
-rcparse_rcdata (void)
-{
- rcdata_mode = 1;
-}
-
-/* Go back to normal mode from rcdata mode. */
-
-void
-rcparse_normal (void)
-{
- rcdata_mode = 0;
-}
diff --git a/binutils/rcparse.c b/binutils/rcparse.c
deleted file mode 100644
index a34e0bfca5b5..000000000000
--- a/binutils/rcparse.c
+++ /dev/null
@@ -1,4144 +0,0 @@
-/* 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 {
- BEG = 258,
- END = 259,
- ACCELERATORS = 260,
- VIRTKEY = 261,
- ASCII = 262,
- NOINVERT = 263,
- SHIFT = 264,
- CONTROL = 265,
- ALT = 266,
- BITMAP = 267,
- CURSOR = 268,
- DIALOG = 269,
- DIALOGEX = 270,
- EXSTYLE = 271,
- CAPTION = 272,
- CLASS = 273,
- STYLE = 274,
- AUTO3STATE = 275,
- AUTOCHECKBOX = 276,
- AUTORADIOBUTTON = 277,
- CHECKBOX = 278,
- COMBOBOX = 279,
- CTEXT = 280,
- DEFPUSHBUTTON = 281,
- EDITTEXT = 282,
- GROUPBOX = 283,
- LISTBOX = 284,
- LTEXT = 285,
- PUSHBOX = 286,
- PUSHBUTTON = 287,
- RADIOBUTTON = 288,
- RTEXT = 289,
- SCROLLBAR = 290,
- STATE3 = 291,
- USERBUTTON = 292,
- BEDIT = 293,
- HEDIT = 294,
- IEDIT = 295,
- FONT = 296,
- ICON = 297,
- LANGUAGE = 298,
- CHARACTERISTICS = 299,
- VERSIONK = 300,
- MENU = 301,
- MENUEX = 302,
- MENUITEM = 303,
- SEPARATOR = 304,
- POPUP = 305,
- CHECKED = 306,
- GRAYED = 307,
- HELP = 308,
- INACTIVE = 309,
- MENUBARBREAK = 310,
- MENUBREAK = 311,
- MESSAGETABLE = 312,
- RCDATA = 313,
- STRINGTABLE = 314,
- VERSIONINFO = 315,
- FILEVERSION = 316,
- PRODUCTVERSION = 317,
- FILEFLAGSMASK = 318,
- FILEFLAGS = 319,
- FILEOS = 320,
- FILETYPE = 321,
- FILESUBTYPE = 322,
- BLOCKSTRINGFILEINFO = 323,
- BLOCKVARFILEINFO = 324,
- VALUE = 325,
- BLOCK = 326,
- MOVEABLE = 327,
- FIXED = 328,
- PURE = 329,
- IMPURE = 330,
- PRELOAD = 331,
- LOADONCALL = 332,
- DISCARDABLE = 333,
- NOT = 334,
- QUOTEDSTRING = 335,
- STRING = 336,
- NUMBER = 337,
- SIZEDSTRING = 338,
- IGNORED_TOKEN = 339,
- NEG = 340
- };
-#endif
-/* Tokens. */
-#define BEG 258
-#define END 259
-#define ACCELERATORS 260
-#define VIRTKEY 261
-#define ASCII 262
-#define NOINVERT 263
-#define SHIFT 264
-#define CONTROL 265
-#define ALT 266
-#define BITMAP 267
-#define CURSOR 268
-#define DIALOG 269
-#define DIALOGEX 270
-#define EXSTYLE 271
-#define CAPTION 272
-#define CLASS 273
-#define STYLE 274
-#define AUTO3STATE 275
-#define AUTOCHECKBOX 276
-#define AUTORADIOBUTTON 277
-#define CHECKBOX 278
-#define COMBOBOX 279
-#define CTEXT 280
-#define DEFPUSHBUTTON 281
-#define EDITTEXT 282
-#define GROUPBOX 283
-#define LISTBOX 284
-#define LTEXT 285
-#define PUSHBOX 286
-#define PUSHBUTTON 287
-#define RADIOBUTTON 288
-#define RTEXT 289
-#define SCROLLBAR 290
-#define STATE3 291
-#define USERBUTTON 292
-#define BEDIT 293
-#define HEDIT 294
-#define IEDIT 295
-#define FONT 296
-#define ICON 297
-#define LANGUAGE 298
-#define CHARACTERISTICS 299
-#define VERSIONK 300
-#define MENU 301
-#define MENUEX 302
-#define MENUITEM 303
-#define SEPARATOR 304
-#define POPUP 305
-#define CHECKED 306
-#define GRAYED 307
-#define HELP 308
-#define INACTIVE 309
-#define MENUBARBREAK 310
-#define MENUBREAK 311
-#define MESSAGETABLE 312
-#define RCDATA 313
-#define STRINGTABLE 314
-#define VERSIONINFO 315
-#define FILEVERSION 316
-#define PRODUCTVERSION 317
-#define FILEFLAGSMASK 318
-#define FILEFLAGS 319
-#define FILEOS 320
-#define FILETYPE 321
-#define FILESUBTYPE 322
-#define BLOCKSTRINGFILEINFO 323
-#define BLOCKVARFILEINFO 324
-#define VALUE 325
-#define BLOCK 326
-#define MOVEABLE 327
-#define FIXED 328
-#define PURE 329
-#define IMPURE 330
-#define PRELOAD 331
-#define LOADONCALL 332
-#define DISCARDABLE 333
-#define NOT 334
-#define QUOTEDSTRING 335
-#define STRING 336
-#define NUMBER 337
-#define SIZEDSTRING 338
-#define IGNORED_TOKEN 339
-#define NEG 340
-
-
-
-
-/* Copy the first part of user declarations. */
-#line 1 "rcparse.y"
- /* rcparse.y -- parser for Windows rc files
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
- Free Software Foundation, Inc.
- Written by Ian Lance Taylor, Cygnus Support.
-
- 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. */
-
-/* This is a parser for Windows rc files. It is based on the parser
- by Gunther Ebert <gunther.ebert@ixos-leipzig.de>. */
-
-#include "bfd.h"
-#include "bucomm.h"
-#include "libiberty.h"
-#include "windres.h"
-#include "safe-ctype.h"
-
-/* The current language. */
-
-static unsigned short language;
-
-/* The resource information during a sub statement. */
-
-static struct res_res_info sub_res_info;
-
-/* Dialog information. This is built by the nonterminals styles and
- controls. */
-
-static struct dialog dialog;
-
-/* This is used when building a style. It is modified by the
- nonterminal styleexpr. */
-
-static unsigned long style;
-
-/* These are used when building a control. They are set before using
- control_params. */
-
-static unsigned long base_style;
-static unsigned long default_style;
-static unsigned long class;
-static struct res_id res_text_field;
-static unichar null_unichar;
-
-/* This is used for COMBOBOX, LISTBOX and EDITTEXT which
- do not allow resource 'text' field in control definition. */
-static const struct res_id res_null_text = { 1, {{0, &null_unichar}}};
-
-
-
-/* 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 66 "rcparse.y"
-typedef union YYSTYPE {
- struct accelerator acc;
- struct accelerator *pacc;
- struct dialog_control *dialog_control;
- struct menuitem *menuitem;
- struct
- {
- struct rcdata_item *first;
- struct rcdata_item *last;
- } rcdata;
- struct rcdata_item *rcdata_item;
- struct stringtable_data *stringtable;
- struct fixed_versioninfo *fixver;
- struct ver_info *verinfo;
- struct ver_stringinfo *verstring;
- struct ver_varinfo *vervar;
- struct res_id id;
- struct res_res_info res_info;
- struct
- {
- unsigned short on;
- unsigned short off;
- } memflags;
- struct
- {
- unsigned long val;
- /* Nonzero if this number was explicitly specified as long. */
- int dword;
- } i;
- unsigned long il;
- unsigned short is;
- const char *s;
- struct
- {
- unsigned long length;
- const char *s;
- } ss;
-} YYSTYPE;
-/* Line 196 of yacc.c. */
-#line 358 "rcparse.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 370 "rcparse.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 2
-/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 792
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 99
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 91
-/* YYNRULES -- Number of rules. */
-#define YYNRULES 247
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 500
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
-#define YYUNDEFTOK 2
-#define YYMAXUTOK 340
-
-#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, 2, 2, 2, 2, 92, 87, 2,
- 97, 98, 90, 88, 95, 89, 2, 91, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 96, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 86, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 85, 2, 93, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 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, 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,
- 94
-};
-
-#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, 4, 7, 10, 13, 16, 19, 22,
- 25, 28, 31, 34, 37, 40, 43, 46, 49, 56,
- 57, 60, 63, 68, 70, 72, 74, 78, 81, 83,
- 85, 87, 89, 91, 93, 98, 103, 104, 118, 119,
- 133, 134, 149, 150, 154, 155, 159, 163, 167, 171,
- 175, 181, 188, 196, 205, 209, 213, 218, 222, 223,
- 226, 227, 232, 233, 238, 239, 244, 245, 250, 251,
- 256, 257, 261, 273, 286, 299, 313, 314, 319, 320,
- 325, 326, 330, 331, 336, 337, 342, 349, 358, 369,
- 381, 382, 387, 388, 392, 393, 398, 399, 404, 405,
- 410, 411, 416, 417, 422, 423, 427, 428, 433, 434,
- 450, 457, 466, 476, 477, 480, 482, 485, 486, 490,
- 491, 495, 496, 500, 501, 505, 510, 515, 519, 526,
- 527, 530, 535, 538, 545, 546, 550, 553, 555, 557,
- 559, 561, 563, 565, 572, 573, 576, 579, 583, 589,
- 592, 598, 605, 613, 623, 628, 635, 640, 641, 644,
- 645, 647, 649, 651, 655, 659, 660, 667, 668, 672,
- 677, 684, 689, 696, 697, 704, 711, 715, 719, 723,
- 727, 731, 732, 741, 749, 750, 756, 757, 761, 763,
- 765, 767, 770, 773, 776, 778, 779, 782, 786, 791,
- 795, 796, 799, 800, 803, 805, 807, 809, 811, 813,
- 815, 817, 819, 821, 823, 826, 830, 835, 837, 841,
- 842, 844, 847, 849, 851, 855, 858, 861, 865, 869,
- 873, 877, 881, 885, 889, 893, 896, 898, 900, 904,
- 907, 911, 915, 919, 923, 927, 931, 935
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const short int yyrhs[] =
-{
- 100, 0, -1, -1, 100, 101, -1, 100, 107, -1,
- 100, 108, -1, 100, 109, -1, 100, 147, -1, 100,
- 148, -1, 100, 149, -1, 100, 150, -1, 100, 155,
- -1, 100, 158, -1, 100, 159, -1, 100, 164, -1,
- 100, 167, -1, 100, 168, -1, 100, 84, -1, 173,
- 5, 176, 3, 102, 4, -1, -1, 102, 103, -1,
- 104, 187, -1, 104, 187, 95, 105, -1, 80, -1,
- 188, -1, 106, -1, 105, 95, 106, -1, 105, 106,
- -1, 6, -1, 7, -1, 8, -1, 9, -1, 10,
- -1, 11, -1, 173, 12, 178, 180, -1, 173, 13,
- 177, 180, -1, -1, 173, 14, 178, 113, 188, 184,
- 184, 184, 110, 114, 3, 115, 4, -1, -1, 173,
- 15, 178, 113, 188, 184, 184, 184, 111, 114, 3,
- 115, 4, -1, -1, 173, 15, 178, 113, 188, 184,
- 184, 184, 184, 112, 114, 3, 115, 4, -1, -1,
- 16, 96, 185, -1, -1, 114, 17, 80, -1, 114,
- 18, 173, -1, 114, 19, 181, -1, 114, 16, 185,
- -1, 114, 18, 80, -1, 114, 41, 185, 95, 80,
- -1, 114, 41, 185, 95, 80, 184, -1, 114, 41,
- 185, 95, 80, 184, 184, -1, 114, 41, 185, 95,
- 80, 184, 184, 184, -1, 114, 46, 173, -1, 114,
- 44, 185, -1, 114, 43, 185, 184, -1, 114, 45,
- 185, -1, -1, 115, 116, -1, -1, 20, 139, 117,
- 138, -1, -1, 21, 139, 118, 138, -1, -1, 22,
- 139, 119, 138, -1, -1, 38, 139, 120, 138, -1,
- -1, 23, 139, 121, 138, -1, -1, 24, 122, 138,
- -1, 10, 139, 185, 184, 141, 184, 184, 184, 184,
- 183, 140, -1, 10, 139, 185, 184, 141, 184, 184,
- 184, 184, 184, 184, 140, -1, 10, 139, 185, 95,
- 80, 141, 184, 184, 184, 184, 183, 140, -1, 10,
- 139, 185, 95, 80, 141, 184, 184, 184, 184, 184,
- 184, 140, -1, -1, 25, 139, 123, 138, -1, -1,
- 26, 139, 124, 138, -1, -1, 27, 125, 138, -1,
- -1, 28, 139, 126, 138, -1, -1, 39, 139, 127,
- 138, -1, 42, 175, 185, 184, 184, 140, -1, 42,
- 175, 185, 184, 184, 184, 184, 140, -1, 42, 175,
- 185, 184, 184, 184, 184, 143, 183, 140, -1, 42,
- 175, 185, 184, 184, 184, 184, 143, 184, 184, 140,
- -1, -1, 40, 139, 128, 138, -1, -1, 29, 129,
- 138, -1, -1, 30, 139, 130, 138, -1, -1, 31,
- 139, 131, 138, -1, -1, 32, 139, 132, 138, -1,
- -1, 33, 139, 133, 138, -1, -1, 34, 139, 134,
- 138, -1, -1, 35, 135, 138, -1, -1, 36, 139,
- 136, 138, -1, -1, 37, 175, 185, 95, 185, 95,
- 185, 95, 185, 95, 185, 95, 137, 181, 183, -1,
- 185, 184, 184, 184, 184, 140, -1, 185, 184, 184,
- 184, 184, 145, 183, 140, -1, 185, 184, 184, 184,
- 184, 145, 184, 184, 140, -1, -1, 188, 95, -1,
- 80, -1, 80, 95, -1, -1, 3, 160, 4, -1,
- -1, 95, 142, 181, -1, -1, 95, 144, 181, -1,
- -1, 95, 146, 181, -1, 173, 41, 177, 180, -1,
- 173, 42, 177, 180, -1, 43, 185, 184, -1, 173,
- 46, 176, 3, 151, 4, -1, -1, 151, 152, -1,
- 48, 80, 184, 153, -1, 48, 49, -1, 50, 80,
- 153, 3, 151, 4, -1, -1, 153, 95, 154, -1,
- 153, 154, -1, 51, -1, 52, -1, 53, -1, 54,
- -1, 55, -1, 56, -1, 173, 47, 176, 3, 156,
- 4, -1, -1, 156, 157, -1, 48, 80, -1, 48,
- 80, 184, -1, 48, 80, 184, 184, 183, -1, 48,
- 49, -1, 50, 80, 3, 156, 4, -1, 50, 80,
- 184, 3, 156, 4, -1, 50, 80, 184, 184, 3,
- 156, 4, -1, 50, 80, 184, 184, 184, 183, 3,
- 156, 4, -1, 173, 57, 178, 180, -1, 173, 58,
- 176, 3, 160, 4, -1, 173, 58, 176, 180, -1,
- -1, 161, 162, -1, -1, 163, -1, 83, -1, 186,
- -1, 163, 95, 83, -1, 163, 95, 186, -1, -1,
- 59, 176, 3, 165, 166, 4, -1, -1, 166, 185,
- 80, -1, 166, 185, 95, 80, -1, 173, 173, 176,
- 3, 160, 4, -1, 173, 173, 176, 180, -1, 173,
- 60, 169, 3, 170, 4, -1, -1, 169, 61, 185,
- 184, 184, 184, -1, 169, 62, 185, 184, 184, 184,
- -1, 169, 63, 185, -1, 169, 64, 185, -1, 169,
- 65, 185, -1, 169, 66, 185, -1, 169, 67, 185,
- -1, -1, 170, 68, 3, 71, 3, 171, 4, 4,
- -1, 170, 69, 3, 70, 80, 172, 4, -1, -1,
- 171, 70, 80, 95, 80, -1, -1, 172, 184, 184,
- -1, 188, -1, 81, -1, 80, -1, 80, 95, -1,
- 81, 95, -1, 188, 95, -1, 174, -1, -1, 176,
- 179, -1, 176, 44, 185, -1, 176, 43, 185, 184,
- -1, 176, 45, 185, -1, -1, 177, 179, -1, -1,
- 178, 179, -1, 72, -1, 73, -1, 74, -1, 75,
- -1, 76, -1, 77, -1, 78, -1, 80, -1, 81,
- -1, 182, -1, 79, 182, -1, 181, 85, 182, -1,
- 181, 85, 79, 182, -1, 82, -1, 97, 185, 98,
- -1, -1, 184, -1, 95, 185, -1, 186, -1, 82,
- -1, 97, 186, 98, -1, 93, 186, -1, 89, 186,
- -1, 186, 90, 186, -1, 186, 91, 186, -1, 186,
- 92, 186, -1, 186, 88, 186, -1, 186, 89, 186,
- -1, 186, 87, 186, -1, 186, 86, 186, -1, 186,
- 85, 186, -1, 95, 188, -1, 189, -1, 82, -1,
- 97, 186, 98, -1, 93, 186, -1, 189, 90, 186,
- -1, 189, 91, 186, -1, 189, 92, 186, -1, 189,
- 88, 186, -1, 189, 89, 186, -1, 189, 87, 186,
- -1, 189, 86, 186, -1, 189, 85, 186, -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const unsigned short int yyrline[] =
-{
- 0, 161, 161, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 175, 176, 177, 183, 194,
- 197, 218, 223, 235, 256, 266, 270, 275, 282, 286,
- 291, 295, 299, 303, 312, 324, 338, 336, 363, 361,
- 390, 388, 420, 423, 429, 431, 437, 441, 446, 450,
- 454, 467, 482, 497, 512, 516, 520, 524, 530, 532,
- 544, 543, 555, 554, 566, 565, 577, 576, 591, 590,
- 602, 601, 614, 625, 634, 647, 659, 658, 670, 669,
- 681, 680, 692, 691, 703, 702, 716, 721, 727, 733,
- 740, 739, 754, 753, 765, 764, 776, 775, 786, 785,
- 797, 796, 808, 807, 819, 818, 830, 829, 842, 840,
- 858, 869, 880, 893, 896, 901, 905, 913, 916, 926,
- 925, 932, 931, 938, 937, 945, 957, 970, 979, 990,
- 993, 1010, 1014, 1018, 1026, 1029, 1033, 1040, 1044, 1048,
- 1052, 1056, 1060, 1069, 1080, 1083, 1100, 1104, 1108, 1112,
- 1116, 1120, 1124, 1128, 1138, 1150, 1157, 1170, 1170, 1182,
- 1186, 1193, 1201, 1209, 1218, 1233, 1232, 1237, 1239, 1246,
- 1259, 1266, 1278, 1289, 1294, 1300, 1306, 1311, 1316, 1321,
- 1326, 1341, 1344, 1348, 1356, 1359, 1367, 1370, 1379, 1384,
- 1400, 1404, 1408, 1416, 1421, 1439, 1445, 1451, 1456, 1461,
- 1472, 1477, 1489, 1494, 1506, 1511, 1516, 1521, 1526, 1531,
- 1536, 1546, 1550, 1567, 1571, 1575, 1579, 1586, 1590, 1600,
- 1603, 1612, 1621, 1630, 1634, 1638, 1643, 1648, 1653, 1658,
- 1663, 1668, 1673, 1678, 1683, 1694, 1703, 1714, 1718, 1722,
- 1727, 1732, 1737, 1742, 1747, 1752, 1757, 1762
-};
-#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", "BEG", "END", "ACCELERATORS", "VIRTKEY",
- "ASCII", "NOINVERT", "SHIFT", "CONTROL", "ALT", "BITMAP", "CURSOR",
- "DIALOG", "DIALOGEX", "EXSTYLE", "CAPTION", "CLASS", "STYLE",
- "AUTO3STATE", "AUTOCHECKBOX", "AUTORADIOBUTTON", "CHECKBOX", "COMBOBOX",
- "CTEXT", "DEFPUSHBUTTON", "EDITTEXT", "GROUPBOX", "LISTBOX", "LTEXT",
- "PUSHBOX", "PUSHBUTTON", "RADIOBUTTON", "RTEXT", "SCROLLBAR", "STATE3",
- "USERBUTTON", "BEDIT", "HEDIT", "IEDIT", "FONT", "ICON", "LANGUAGE",
- "CHARACTERISTICS", "VERSIONK", "MENU", "MENUEX", "MENUITEM", "SEPARATOR",
- "POPUP", "CHECKED", "GRAYED", "HELP", "INACTIVE", "MENUBARBREAK",
- "MENUBREAK", "MESSAGETABLE", "RCDATA", "STRINGTABLE", "VERSIONINFO",
- "FILEVERSION", "PRODUCTVERSION", "FILEFLAGSMASK", "FILEFLAGS", "FILEOS",
- "FILETYPE", "FILESUBTYPE", "BLOCKSTRINGFILEINFO", "BLOCKVARFILEINFO",
- "VALUE", "BLOCK", "MOVEABLE", "FIXED", "PURE", "IMPURE", "PRELOAD",
- "LOADONCALL", "DISCARDABLE", "NOT", "QUOTEDSTRING", "STRING", "NUMBER",
- "SIZEDSTRING", "IGNORED_TOKEN", "'|'", "'^'", "'&'", "'+'", "'-'", "'*'",
- "'/'", "'%'", "'~'", "NEG", "','", "'='", "'('", "')'", "$accept",
- "input", "accelerator", "acc_entries", "acc_entry", "acc_event",
- "acc_options", "acc_option", "bitmap", "cursor", "dialog", "@1", "@2",
- "@3", "exstyle", "styles", "controls", "control", "@4", "@5", "@6", "@7",
- "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17",
- "@18", "@19", "@20", "@21", "@22", "@23", "@24", "control_params",
- "optresidc", "opt_control_data", "control_styleexpr", "@25",
- "icon_styleexpr", "@26", "control_params_styleexpr", "@27", "font",
- "icon", "language", "menu", "menuitems", "menuitem", "menuitem_flags",
- "menuitem_flag", "menuex", "menuexitems", "menuexitem", "messagetable",
- "rcdata", "optrcdata_data", "@28", "optrcdata_data_int", "rcdata_data",
- "stringtable", "@29", "string_data", "user", "versioninfo",
- "fixedverinfo", "verblocks", "vervals", "vertrans", "id", "resname",
- "resref", "suboptions", "memflags_move_discard", "memflags_move",
- "memflag", "file_name", "styleexpr", "parennumber", "optcnumexpr",
- "cnumexpr", "numexpr", "sizednumexpr", "cposnumexpr", "posnumexpr",
- "sizedposnumexpr", 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, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 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, 124, 94, 38, 43, 45,
- 42, 47, 37, 126, 340, 44, 61, 40, 41
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const unsigned char yyr1[] =
-{
- 0, 99, 100, 100, 100, 100, 100, 100, 100, 100,
- 100, 100, 100, 100, 100, 100, 100, 100, 101, 102,
- 102, 103, 103, 104, 104, 105, 105, 105, 106, 106,
- 106, 106, 106, 106, 107, 108, 110, 109, 111, 109,
- 112, 109, 113, 113, 114, 114, 114, 114, 114, 114,
- 114, 114, 114, 114, 114, 114, 114, 114, 115, 115,
- 117, 116, 118, 116, 119, 116, 120, 116, 121, 116,
- 122, 116, 116, 116, 116, 116, 123, 116, 124, 116,
- 125, 116, 126, 116, 127, 116, 116, 116, 116, 116,
- 128, 116, 129, 116, 130, 116, 131, 116, 132, 116,
- 133, 116, 134, 116, 135, 116, 136, 116, 137, 116,
- 138, 138, 138, 139, 139, 139, 139, 140, 140, 142,
- 141, 144, 143, 146, 145, 147, 148, 149, 150, 151,
- 151, 152, 152, 152, 153, 153, 153, 154, 154, 154,
- 154, 154, 154, 155, 156, 156, 157, 157, 157, 157,
- 157, 157, 157, 157, 158, 159, 159, 161, 160, 162,
- 162, 163, 163, 163, 163, 165, 164, 166, 166, 166,
- 167, 167, 168, 169, 169, 169, 169, 169, 169, 169,
- 169, 170, 170, 170, 171, 171, 172, 172, 173, 173,
- 174, 174, 174, 175, 175, 176, 176, 176, 176, 176,
- 177, 177, 178, 178, 179, 179, 179, 179, 179, 179,
- 179, 180, 180, 181, 181, 181, 181, 182, 182, 183,
- 183, 184, 185, 186, 186, 186, 186, 186, 186, 186,
- 186, 186, 186, 186, 186, 187, 188, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const unsigned char yyr2[] =
-{
- 0, 2, 0, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 6, 0,
- 2, 2, 4, 1, 1, 1, 3, 2, 1, 1,
- 1, 1, 1, 1, 4, 4, 0, 13, 0, 13,
- 0, 14, 0, 3, 0, 3, 3, 3, 3, 3,
- 5, 6, 7, 8, 3, 3, 4, 3, 0, 2,
- 0, 4, 0, 4, 0, 4, 0, 4, 0, 4,
- 0, 3, 11, 12, 12, 13, 0, 4, 0, 4,
- 0, 3, 0, 4, 0, 4, 6, 8, 10, 11,
- 0, 4, 0, 3, 0, 4, 0, 4, 0, 4,
- 0, 4, 0, 4, 0, 3, 0, 4, 0, 15,
- 6, 8, 9, 0, 2, 1, 2, 0, 3, 0,
- 3, 0, 3, 0, 3, 4, 4, 3, 6, 0,
- 2, 4, 2, 6, 0, 3, 2, 1, 1, 1,
- 1, 1, 1, 6, 0, 2, 2, 3, 5, 2,
- 5, 6, 7, 9, 4, 6, 4, 0, 2, 0,
- 1, 1, 1, 3, 3, 0, 6, 0, 3, 4,
- 6, 4, 6, 0, 6, 6, 3, 3, 3, 3,
- 3, 0, 8, 7, 0, 5, 0, 3, 1, 1,
- 1, 2, 2, 2, 1, 0, 2, 3, 4, 3,
- 0, 2, 0, 2, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 2, 3, 4, 1, 3, 0,
- 1, 2, 1, 1, 3, 2, 2, 3, 3, 3,
- 3, 3, 3, 3, 3, 2, 1, 1, 3, 2,
- 3, 3, 3, 3, 3, 3, 3, 3
-};
-
-/* 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 char yydefact[] =
-{
- 2, 0, 1, 0, 195, 189, 237, 17, 0, 0,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 0, 188, 236, 223, 0, 0,
- 0, 0, 222, 0, 239, 0, 195, 202, 200, 202,
- 202, 200, 200, 195, 195, 202, 195, 173, 195, 0,
- 0, 0, 0, 0, 0, 0, 0, 226, 225, 0,
- 0, 127, 0, 0, 0, 0, 0, 0, 0, 0,
- 165, 0, 0, 0, 204, 205, 206, 207, 208, 209,
- 210, 196, 238, 0, 0, 0, 42, 42, 0, 0,
- 0, 0, 0, 0, 0, 0, 247, 246, 245, 243,
- 244, 240, 241, 242, 224, 221, 234, 233, 232, 230,
- 231, 227, 228, 229, 167, 0, 197, 199, 19, 211,
- 212, 203, 34, 201, 35, 0, 0, 0, 125, 126,
- 129, 144, 154, 157, 156, 181, 0, 0, 0, 0,
- 0, 0, 0, 157, 171, 0, 198, 0, 0, 0,
- 0, 0, 0, 0, 159, 0, 0, 0, 176, 177,
- 178, 179, 180, 0, 166, 0, 18, 23, 20, 0,
- 24, 43, 0, 0, 128, 0, 0, 130, 143, 0,
- 0, 145, 155, 161, 158, 160, 162, 172, 0, 0,
- 0, 0, 170, 168, 0, 0, 21, 0, 0, 132,
- 0, 134, 149, 146, 0, 0, 0, 0, 0, 0,
- 169, 235, 0, 36, 38, 134, 0, 147, 144, 0,
- 163, 164, 0, 0, 174, 175, 28, 29, 30, 31,
- 32, 33, 22, 25, 44, 44, 40, 131, 129, 137,
- 138, 139, 140, 141, 142, 0, 136, 219, 0, 144,
- 0, 184, 186, 0, 27, 0, 0, 44, 0, 135,
- 148, 220, 150, 0, 144, 219, 0, 0, 26, 58,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,
- 0, 133, 151, 0, 0, 0, 0, 183, 0, 0,
- 48, 45, 49, 46, 0, 217, 0, 47, 213, 0,
- 0, 55, 57, 54, 0, 58, 152, 144, 182, 0,
- 187, 37, 113, 113, 113, 113, 113, 70, 113, 113,
- 80, 113, 92, 113, 113, 113, 113, 113, 104, 113,
- 0, 113, 113, 113, 0, 59, 214, 0, 0, 0,
- 56, 39, 0, 0, 0, 115, 0, 0, 60, 62,
- 64, 68, 0, 76, 78, 0, 82, 0, 94, 96,
- 98, 100, 102, 0, 106, 190, 0, 194, 0, 0,
- 66, 84, 90, 0, 218, 0, 215, 50, 41, 153,
- 185, 116, 0, 114, 0, 0, 0, 0, 71, 0,
- 0, 0, 81, 0, 93, 0, 0, 0, 0, 0,
- 105, 0, 191, 192, 0, 193, 0, 0, 0, 0,
- 216, 51, 0, 0, 61, 63, 65, 69, 0, 77,
- 79, 83, 95, 97, 99, 101, 103, 107, 0, 67,
- 85, 91, 0, 52, 0, 119, 0, 0, 0, 117,
- 53, 0, 0, 0, 0, 0, 157, 86, 0, 0,
- 120, 0, 117, 0, 0, 117, 0, 0, 123, 110,
- 219, 0, 118, 121, 87, 219, 0, 219, 0, 117,
- 220, 0, 0, 117, 220, 219, 117, 220, 124, 111,
- 117, 0, 122, 88, 117, 117, 220, 72, 117, 112,
- 0, 89, 74, 117, 73, 108, 75, 0, 219, 109
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const short int yydefgoto[] =
-{
- -1, 1, 10, 147, 168, 169, 232, 233, 11, 12,
- 13, 234, 235, 257, 126, 255, 289, 335, 384, 385,
- 386, 406, 387, 352, 390, 391, 355, 393, 407, 408,
- 357, 395, 396, 397, 398, 399, 363, 401, 497, 388,
- 346, 447, 436, 442, 465, 472, 460, 468, 14, 15,
- 16, 17, 151, 177, 216, 246, 18, 152, 181, 19,
- 20, 153, 154, 184, 185, 21, 114, 145, 22, 23,
- 94, 155, 266, 267, 24, 367, 368, 33, 85, 84,
- 81, 122, 297, 298, 260, 261, 389, 32, 196, 347,
- 26
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -426
-static const short int yypact[] =
-{
- -426, 12, -426, 287, -426, -426, -426, -426, 287, 287,
- -426, -426, -426, -426, -426, -426, -426, -426, -426, -426,
- -426, -426, -426, -426, 106, -426, 585, -426, 287, 287,
- 287, -80, 675, 83, -426, 637, -426, -426, -426, -426,
- -426, -426, -426, -426, -426, -426, -426, -426, -426, 287,
- 287, 287, 287, 287, 287, 287, 287, -426, -426, 651,
- 287, -426, 287, 287, 287, 287, 287, 287, 287, 287,
- -426, 287, 287, 287, -426, -426, -426, -426, -426, -426,
- -426, -426, -426, 286, 678, 678, 188, 188, 678, 678,
- 323, 375, 678, 210, 128, 274, 682, 688, 302, 89,
- 89, -426, -426, -426, -426, -426, 682, 688, 302, 89,
- 89, -426, -426, -426, -426, -80, -426, -426, -426, -426,
- -426, -426, -426, -426, -426, -70, 142, 142, -426, -426,
- -426, -426, -426, -426, -426, -426, 287, 287, 287, 287,
- 287, 287, 287, -426, -426, 2, -426, 5, 287, -80,
- -80, 33, 40, 47, 373, 38, -80, -80, -426, -426,
- -426, -426, -426, 49, -426, 17, -426, -426, -426, -41,
- -426, -426, -80, -80, -426, -44, -24, -426, -426, -35,
- 36, -426, -426, -426, -426, -13, 675, -426, 129, 138,
- -80, -80, -426, -426, 69, 142, 73, -80, -80, -426,
- -80, -426, -426, -80, 8, 454, 111, 97, -80, -80,
- -426, -426, 775, -426, -80, -426, 119, -80, -426, 13,
- -426, 675, 183, 116, -426, -426, -426, -426, -426, -426,
- -426, -426, 22, -426, -426, -426, -426, 245, -426, -426,
- -426, -426, -426, -426, -426, 736, -426, -80, 96, -426,
- 15, -426, -426, 775, -426, 370, 512, -426, 158, -426,
- -426, -426, -426, 172, -426, -80, 34, 6, -426, -426,
- 287, 125, 227, 72, 287, 287, 287, 287, 260, -426,
- 523, -426, -426, 179, 207, 229, 131, -426, -80, 584,
- -426, -426, -426, -426, 43, -426, 287, 159, -426, 151,
- -80, -426, -426, -426, 621, -426, -426, -426, -426, 153,
- -426, -426, 141, 141, 141, 141, 141, -426, 141, 141,
- -426, 141, -426, 141, 141, 141, 141, 141, -426, 141,
- 230, 141, 141, 141, 230, -426, -426, 160, 133, 169,
- -426, -426, 658, 193, 189, 164, 287, 173, -426, -426,
- -426, -426, 287, -426, -426, 287, -426, 287, -426, -426,
- -426, -426, -426, 287, -426, 175, 181, -426, 287, 184,
- -426, -426, -426, 287, -426, 43, -426, -80, -426, -426,
- -426, -426, 185, -426, 287, 287, 287, 287, -426, -80,
- 287, 287, -426, 287, -426, 287, 287, 287, 287, 287,
- -426, 287, -426, -426, 197, -426, 287, 287, 287, -80,
- -426, -80, 341, 199, -426, -426, -426, -426, -80, -426,
- -426, -426, -426, -426, -426, -426, -426, -426, 287, -426,
- -426, -426, -80, -80, 199, -426, -80, -80, 208, 18,
- -426, -80, 72, -80, -80, 287, -426, -426, -80, -80,
- 159, -80, 19, 211, 298, 20, -80, -80, -426, -426,
- -80, 287, -426, -426, -426, -80, -80, -80, 72, 310,
- -80, 219, 72, 310, -80, -80, 310, -80, 159, -426,
- 310, 287, 159, -426, 310, 310, -80, -426, 310, -426,
- 220, -426, -426, 310, -426, -426, -426, 72, -37, -426
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const short int yypgoto[] =
-{
- -426, -426, -426, -426, -426, -426, -426, -207, -426, -426,
- -426, -426, -426, -426, 218, -222, -255, -426, -426, -426,
- -426, -426, -426, -426, -426, -426, -426, -426, -426, -426,
- -426, -426, -426, -426, -426, -426, -426, -426, -426, 126,
- 388, 107, -113, -426, -426, -426, -426, -426, -426, -426,
- -426, -426, 84, -426, 110, 87, -426, -215, -426, -426,
- -426, -142, -426, -426, -426, -426, -426, -426, -426, -426,
- -426, -426, -426, -426, -22, -426, 0, 397, 82, 212,
- 548, 486, -425, -286, -258, 28, -3, 11, -426, 3,
- -426
-};
-
-/* 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 -1
-static const unsigned short int yytable[] =
-{
- 31, 163, 48, 248, 25, 199, 164, 284, 336, 166,
- 287, 218, 2, 256, 202, 60, 249, 450, 264, 34,
- 35, 446, 446, 446, 304, 254, 148, 25, 226, 227,
- 228, 229, 230, 231, 263, 280, 200, 174, 285, 57,
- 58, 59, 187, 478, 178, 203, 268, 482, 338, 283,
- 342, 182, 376, 192, 195, 3, 201, 105, 60, 61,
- 96, 97, 98, 99, 100, 101, 102, 103, 115, 116,
- 117, 4, 498, 106, 107, 108, 109, 110, 111, 112,
- 113, 175, 205, 176, 27, 167, 70, 6, 179, 410,
- 180, 28, 343, 5, 6, 29, 7, 193, 8, 30,
- 262, 60, 9, 60, 286, 8, 188, 189, 60, 9,
- 60, 36, 194, 60, 458, 463, 204, 253, 37, 38,
- 39, 40, 238, 88, 89, 295, 71, 72, 73, 149,
- 150, 135, 206, 156, 157, 158, 159, 160, 161, 162,
- 296, 207, 165, 146, 179, 171, 180, 41, 42, 210,
- 170, 294, 43, 44, 295, 74, 75, 76, 77, 78,
- 79, 80, 281, 45, 46, 186, 47, 223, 212, 296,
- 239, 240, 241, 242, 243, 244, 282, 172, 173, 67,
- 68, 69, 222, 306, 190, 191, 251, 5, 6, 136,
- 137, 138, 139, 140, 141, 142, 252, 379, 211, 8,
- 197, 198, 469, 9, 125, 291, 175, 473, 176, 476,
- 307, 309, 375, 133, 245, 295, 221, 485, 208, 209,
- 179, 345, 180, 6, 6, 213, 214, 179, 215, 180,
- 296, 217, 219, 308, 8, 8, 224, 225, 9, 9,
- 499, 179, 236, 180, 338, 247, 339, 250, 344, 377,
- 293, 86, 87, 71, 72, 73, 303, 92, 374, 381,
- 74, 75, 76, 77, 78, 79, 80, 290, 383, 380,
- 402, 299, 300, 301, 302, 25, 403, 143, 265, 405,
- 412, 25, 74, 75, 76, 77, 78, 79, 80, 118,
- 119, 120, 428, 337, 435, 288, 239, 240, 241, 242,
- 243, 244, 462, 445, 454, 127, 461, 292, 5, 6,
- 365, 366, 6, 446, 481, 495, 310, 71, 72, 73,
- 8, 441, 258, 8, 9, 237, 130, 9, 340, 71,
- 72, 73, 259, 369, 373, 0, 0, 369, 0, 0,
- 245, 5, 6, 382, 0, 0, 74, 75, 76, 77,
- 78, 79, 80, 8, 119, 120, 0, 9, 74, 75,
- 76, 77, 78, 79, 80, 404, 71, 72, 73, 27,
- 409, 0, 0, 269, 0, 0, 28, 0, 131, 0,
- 29, 0, 0, 0, 30, 0, 270, 271, 272, 273,
- 65, 66, 67, 68, 69, 74, 75, 76, 77, 78,
- 79, 80, 0, 0, 0, 411, 0, 0, 0, 105,
- 413, 274, 0, 275, 276, 277, 278, 418, 71, 72,
- 73, 434, 0, 27, 0, 438, 0, 0, 0, 0,
- 28, 0, 0, 83, 29, 0, 0, 432, 30, 433,
- 90, 91, 453, 93, 0, 95, 437, 74, 75, 76,
- 77, 78, 79, 80, 0, 27, 183, 0, 471, 0,
- 439, 440, 28, 0, 443, 444, 29, 448, 0, 449,
- 30, 451, 452, 0, 0, 0, 455, 456, 490, 457,
- 0, 392, 0, 394, 466, 467, 0, 0, 470, 400,
- 0, 0, 0, 474, 475, 477, 0, 0, 480, 0,
- 0, 0, 484, 486, 0, 488, 0, 0, 0, 0,
- 414, 415, 416, 417, 493, 279, 419, 420, 0, 421,
- 0, 422, 423, 424, 425, 426, 305, 427, 270, 271,
- 272, 273, 429, 430, 431, 0, 27, 220, 0, 270,
- 271, 272, 273, 28, 0, 0, 0, 29, 0, 0,
- 0, 30, 0, 274, 0, 275, 276, 277, 278, 459,
- 0, 0, 464, 0, 274, 0, 275, 276, 277, 278,
- 0, 124, 0, 0, 128, 129, 479, 0, 132, 134,
- 483, 144, 0, 487, 0, 0, 0, 489, 311, 0,
- 0, 491, 492, 0, 312, 494, 0, 0, 0, 0,
- 496, 0, 0, 0, 313, 314, 315, 316, 317, 318,
- 319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, 332, 333, 341, 334, 0, 0, 0,
- 0, 312, 121, 123, 121, 121, 123, 123, 0, 0,
- 121, 313, 314, 315, 316, 317, 318, 319, 320, 321,
- 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- 332, 333, 378, 334, 0, 0, 0, 0, 312, 0,
- 49, 50, 51, 52, 53, 54, 55, 56, 313, 314,
- 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, 0,
- 334, 348, 349, 350, 351, 0, 353, 354, 0, 356,
- 0, 358, 359, 360, 361, 362, 0, 364, 0, 370,
- 371, 372, 62, 63, 64, 65, 66, 67, 68, 69,
- 0, 0, 0, 0, 0, 82, 62, 63, 64, 65,
- 66, 67, 68, 69, 0, 0, 0, 0, 0, 104,
- 74, 75, 76, 77, 78, 79, 80, 0, 119, 120,
- 62, 63, 64, 65, 66, 67, 68, 69, 63, 64,
- 65, 66, 67, 68, 69, 64, 65, 66, 67, 68,
- 69, 226, 227, 228, 229, 230, 231, 239, 240, 241,
- 242, 243, 244
-};
-
-static const short int yycheck[] =
-{
- 3, 143, 24, 218, 1, 49, 4, 265, 294, 4,
- 4, 3, 0, 235, 49, 95, 3, 442, 3, 8,
- 9, 3, 3, 3, 279, 232, 96, 24, 6, 7,
- 8, 9, 10, 11, 249, 257, 80, 4, 4, 28,
- 29, 30, 4, 468, 4, 80, 253, 472, 85, 264,
- 305, 4, 338, 4, 95, 43, 80, 60, 95, 31,
- 49, 50, 51, 52, 53, 54, 55, 56, 71, 72,
- 73, 59, 497, 62, 63, 64, 65, 66, 67, 68,
- 69, 48, 95, 50, 82, 80, 3, 82, 48, 375,
- 50, 89, 307, 81, 82, 93, 84, 80, 93, 97,
- 4, 95, 97, 95, 70, 93, 68, 69, 95, 97,
- 95, 5, 95, 95, 95, 95, 80, 95, 12, 13,
- 14, 15, 3, 41, 42, 82, 43, 44, 45, 126,
- 127, 3, 3, 136, 137, 138, 139, 140, 141, 142,
- 97, 3, 145, 115, 48, 148, 50, 41, 42, 80,
- 147, 79, 46, 47, 82, 72, 73, 74, 75, 76,
- 77, 78, 4, 57, 58, 154, 60, 70, 95, 97,
- 51, 52, 53, 54, 55, 56, 4, 149, 150, 90,
- 91, 92, 71, 4, 156, 157, 3, 81, 82, 61,
- 62, 63, 64, 65, 66, 67, 80, 4, 195, 93,
- 172, 173, 460, 97, 16, 80, 48, 465, 50, 467,
- 3, 80, 79, 3, 95, 82, 205, 475, 190, 191,
- 48, 80, 50, 82, 82, 197, 198, 48, 200, 50,
- 97, 203, 204, 4, 93, 93, 208, 209, 97, 97,
- 498, 48, 214, 50, 85, 217, 95, 219, 95, 80,
- 272, 39, 40, 43, 44, 45, 278, 45, 98, 95,
- 72, 73, 74, 75, 76, 77, 78, 270, 95, 80,
- 95, 274, 275, 276, 277, 272, 95, 3, 250, 95,
- 95, 278, 72, 73, 74, 75, 76, 77, 78, 3,
- 80, 81, 95, 296, 95, 267, 51, 52, 53, 54,
- 55, 56, 4, 95, 446, 87, 95, 80, 81, 82,
- 80, 81, 82, 3, 95, 95, 288, 43, 44, 45,
- 93, 434, 238, 93, 97, 215, 3, 97, 300, 43,
- 44, 45, 245, 330, 334, -1, -1, 334, -1, -1,
- 95, 81, 82, 346, -1, -1, 72, 73, 74, 75,
- 76, 77, 78, 93, 80, 81, -1, 97, 72, 73,
- 74, 75, 76, 77, 78, 368, 43, 44, 45, 82,
- 373, -1, -1, 3, -1, -1, 89, -1, 3, -1,
- 93, -1, -1, -1, 97, -1, 16, 17, 18, 19,
- 88, 89, 90, 91, 92, 72, 73, 74, 75, 76,
- 77, 78, -1, -1, -1, 377, -1, -1, -1, 412,
- 382, 41, -1, 43, 44, 45, 46, 389, 43, 44,
- 45, 80, -1, 82, -1, 428, -1, -1, -1, -1,
- 89, -1, -1, 36, 93, -1, -1, 409, 97, 411,
- 43, 44, 445, 46, -1, 48, 418, 72, 73, 74,
- 75, 76, 77, 78, -1, 82, 83, -1, 461, -1,
- 432, 433, 89, -1, 436, 437, 93, 439, -1, 441,
- 97, 443, 444, -1, -1, -1, 448, 449, 481, 451,
- -1, 355, -1, 357, 456, 457, -1, -1, 460, 363,
- -1, -1, -1, 465, 466, 467, -1, -1, 470, -1,
- -1, -1, 474, 475, -1, 477, -1, -1, -1, -1,
- 384, 385, 386, 387, 486, 3, 390, 391, -1, 393,
- -1, 395, 396, 397, 398, 399, 3, 401, 16, 17,
- 18, 19, 406, 407, 408, -1, 82, 83, -1, 16,
- 17, 18, 19, 89, -1, -1, -1, 93, -1, -1,
- -1, 97, -1, 41, -1, 43, 44, 45, 46, 452,
- -1, -1, 455, -1, 41, -1, 43, 44, 45, 46,
- -1, 85, -1, -1, 88, 89, 469, -1, 92, 93,
- 473, 95, -1, 476, -1, -1, -1, 480, 4, -1,
- -1, 484, 485, -1, 10, 488, -1, -1, -1, -1,
- 493, -1, -1, -1, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 4, 42, -1, -1, -1,
- -1, 10, 84, 85, 86, 87, 88, 89, -1, -1,
- 92, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 4, 42, -1, -1, -1, -1, 10, -1,
- 85, 86, 87, 88, 89, 90, 91, 92, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, -1,
- 42, 313, 314, 315, 316, -1, 318, 319, -1, 321,
- -1, 323, 324, 325, 326, 327, -1, 329, -1, 331,
- 332, 333, 85, 86, 87, 88, 89, 90, 91, 92,
- -1, -1, -1, -1, -1, 98, 85, 86, 87, 88,
- 89, 90, 91, 92, -1, -1, -1, -1, -1, 98,
- 72, 73, 74, 75, 76, 77, 78, -1, 80, 81,
- 85, 86, 87, 88, 89, 90, 91, 92, 86, 87,
- 88, 89, 90, 91, 92, 87, 88, 89, 90, 91,
- 92, 6, 7, 8, 9, 10, 11, 51, 52, 53,
- 54, 55, 56
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
-static const unsigned char yystos[] =
-{
- 0, 100, 0, 43, 59, 81, 82, 84, 93, 97,
- 101, 107, 108, 109, 147, 148, 149, 150, 155, 158,
- 159, 164, 167, 168, 173, 188, 189, 82, 89, 93,
- 97, 185, 186, 176, 186, 186, 5, 12, 13, 14,
- 15, 41, 42, 46, 47, 57, 58, 60, 173, 85,
- 86, 87, 88, 89, 90, 91, 92, 186, 186, 186,
- 95, 184, 85, 86, 87, 88, 89, 90, 91, 92,
- 3, 43, 44, 45, 72, 73, 74, 75, 76, 77,
- 78, 179, 98, 176, 178, 177, 178, 178, 177, 177,
- 176, 176, 178, 176, 169, 176, 186, 186, 186, 186,
- 186, 186, 186, 186, 98, 185, 186, 186, 186, 186,
- 186, 186, 186, 186, 165, 185, 185, 185, 3, 80,
- 81, 179, 180, 179, 180, 16, 113, 113, 180, 180,
- 3, 3, 180, 3, 180, 3, 61, 62, 63, 64,
- 65, 66, 67, 3, 180, 166, 184, 102, 96, 188,
- 188, 151, 156, 160, 161, 170, 185, 185, 185, 185,
- 185, 185, 185, 160, 4, 185, 4, 80, 103, 104,
- 188, 185, 184, 184, 4, 48, 50, 152, 4, 48,
- 50, 157, 4, 83, 162, 163, 186, 4, 68, 69,
- 184, 184, 4, 80, 95, 95, 187, 184, 184, 49,
- 80, 80, 49, 80, 80, 95, 3, 3, 184, 184,
- 80, 188, 95, 184, 184, 184, 153, 184, 3, 184,
- 83, 186, 71, 70, 184, 184, 6, 7, 8, 9,
- 10, 11, 105, 106, 110, 111, 184, 153, 3, 51,
- 52, 53, 54, 55, 56, 95, 154, 184, 156, 3,
- 184, 3, 80, 95, 106, 114, 114, 112, 151, 154,
- 183, 184, 4, 156, 3, 184, 171, 172, 106, 3,
- 16, 17, 18, 19, 41, 43, 44, 45, 46, 3,
- 114, 4, 4, 156, 183, 4, 70, 4, 184, 115,
- 185, 80, 80, 173, 79, 82, 97, 181, 182, 185,
- 185, 185, 185, 173, 115, 3, 4, 3, 4, 80,
- 184, 4, 10, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 42, 116, 182, 185, 85, 95,
- 184, 4, 115, 156, 95, 80, 139, 188, 139, 139,
- 139, 139, 122, 139, 139, 125, 139, 129, 139, 139,
- 139, 139, 139, 135, 139, 80, 81, 174, 175, 188,
- 139, 139, 139, 175, 98, 79, 182, 80, 4, 4,
- 80, 95, 185, 95, 117, 118, 119, 121, 138, 185,
- 123, 124, 138, 126, 138, 130, 131, 132, 133, 134,
- 138, 136, 95, 95, 185, 95, 120, 127, 128, 185,
- 182, 184, 95, 184, 138, 138, 138, 138, 184, 138,
- 138, 138, 138, 138, 138, 138, 138, 138, 95, 138,
- 138, 138, 184, 184, 80, 95, 141, 184, 185, 184,
- 184, 141, 142, 184, 184, 95, 3, 140, 184, 184,
- 181, 184, 184, 185, 160, 184, 184, 184, 95, 140,
- 145, 95, 4, 95, 140, 143, 184, 184, 146, 183,
- 184, 185, 144, 183, 184, 184, 183, 184, 181, 140,
- 184, 95, 181, 140, 184, 183, 184, 140, 184, 140,
- 185, 140, 140, 184, 140, 95, 140, 137, 181, 183
-};
-
-#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 18:
-#line 184 "rcparse.y"
- {
- define_accelerator ((yyvsp[-5].id), &(yyvsp[-3].res_info), (yyvsp[-1].pacc));
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 19:
-#line 194 "rcparse.y"
- {
- (yyval.pacc) = NULL;
- }
- break;
-
- case 20:
-#line 198 "rcparse.y"
- {
- struct accelerator *a;
-
- a = (struct accelerator *) res_alloc (sizeof *a);
- *a = (yyvsp[0].acc);
- if ((yyvsp[-1].pacc) == NULL)
- (yyval.pacc) = a;
- else
- {
- struct accelerator **pp;
-
- for (pp = &(yyvsp[-1].pacc)->next; *pp != NULL; pp = &(*pp)->next)
- ;
- *pp = a;
- (yyval.pacc) = (yyvsp[-1].pacc);
- }
- }
- break;
-
- case 21:
-#line 219 "rcparse.y"
- {
- (yyval.acc) = (yyvsp[-1].acc);
- (yyval.acc).id = (yyvsp[0].il);
- }
- break;
-
- case 22:
-#line 224 "rcparse.y"
- {
- (yyval.acc) = (yyvsp[-3].acc);
- (yyval.acc).id = (yyvsp[-2].il);
- (yyval.acc).flags |= (yyvsp[0].is);
- if (((yyval.acc).flags & ACC_VIRTKEY) == 0
- && ((yyval.acc).flags & (ACC_SHIFT | ACC_CONTROL)) != 0)
- rcparse_warning (_("inappropriate modifiers for non-VIRTKEY"));
- }
- break;
-
- case 23:
-#line 236 "rcparse.y"
- {
- const char *s = (yyvsp[0].s);
- char ch;
-
- (yyval.acc).next = NULL;
- (yyval.acc).id = 0;
- ch = *s;
- if (ch != '^')
- (yyval.acc).flags = 0;
- else
- {
- (yyval.acc).flags = ACC_CONTROL | ACC_VIRTKEY;
- ++s;
- ch = *s;
- ch = TOUPPER (ch);
- }
- (yyval.acc).key = ch;
- if (s[1] != '\0')
- rcparse_warning (_("accelerator should only be one character"));
- }
- break;
-
- case 24:
-#line 257 "rcparse.y"
- {
- (yyval.acc).next = NULL;
- (yyval.acc).flags = 0;
- (yyval.acc).id = 0;
- (yyval.acc).key = (yyvsp[0].il);
- }
- break;
-
- case 25:
-#line 267 "rcparse.y"
- {
- (yyval.is) = (yyvsp[0].is);
- }
- break;
-
- case 26:
-#line 271 "rcparse.y"
- {
- (yyval.is) = (yyvsp[-2].is) | (yyvsp[0].is);
- }
- break;
-
- case 27:
-#line 276 "rcparse.y"
- {
- (yyval.is) = (yyvsp[-1].is) | (yyvsp[0].is);
- }
- break;
-
- case 28:
-#line 283 "rcparse.y"
- {
- (yyval.is) = ACC_VIRTKEY;
- }
- break;
-
- case 29:
-#line 287 "rcparse.y"
- {
- /* This is just the absence of VIRTKEY. */
- (yyval.is) = 0;
- }
- break;
-
- case 30:
-#line 292 "rcparse.y"
- {
- (yyval.is) = ACC_NOINVERT;
- }
- break;
-
- case 31:
-#line 296 "rcparse.y"
- {
- (yyval.is) = ACC_SHIFT;
- }
- break;
-
- case 32:
-#line 300 "rcparse.y"
- {
- (yyval.is) = ACC_CONTROL;
- }
- break;
-
- case 33:
-#line 304 "rcparse.y"
- {
- (yyval.is) = ACC_ALT;
- }
- break;
-
- case 34:
-#line 313 "rcparse.y"
- {
- define_bitmap ((yyvsp[-3].id), &(yyvsp[-1].res_info), (yyvsp[0].s));
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 35:
-#line 325 "rcparse.y"
- {
- define_cursor ((yyvsp[-3].id), &(yyvsp[-1].res_info), (yyvsp[0].s));
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 36:
-#line 338 "rcparse.y"
- {
- memset (&dialog, 0, sizeof dialog);
- dialog.x = (yyvsp[-3].il);
- dialog.y = (yyvsp[-2].il);
- dialog.width = (yyvsp[-1].il);
- dialog.height = (yyvsp[0].il);
- dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU;
- dialog.exstyle = (yyvsp[-4].il);
- dialog.menu.named = 1;
- dialog.class.named = 1;
- dialog.font = NULL;
- dialog.ex = NULL;
- dialog.controls = NULL;
- sub_res_info = (yyvsp[-5].res_info);
- style = 0;
- }
- break;
-
- case 37:
-#line 355 "rcparse.y"
- {
- define_dialog ((yyvsp[-12].id), &sub_res_info, &dialog);
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 38:
-#line 363 "rcparse.y"
- {
- memset (&dialog, 0, sizeof dialog);
- dialog.x = (yyvsp[-3].il);
- dialog.y = (yyvsp[-2].il);
- dialog.width = (yyvsp[-1].il);
- dialog.height = (yyvsp[0].il);
- dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU;
- dialog.exstyle = (yyvsp[-4].il);
- dialog.menu.named = 1;
- dialog.class.named = 1;
- dialog.font = NULL;
- dialog.ex = ((struct dialog_ex *)
- res_alloc (sizeof (struct dialog_ex)));
- memset (dialog.ex, 0, sizeof (struct dialog_ex));
- dialog.controls = NULL;
- sub_res_info = (yyvsp[-5].res_info);
- style = 0;
- }
- break;
-
- case 39:
-#line 382 "rcparse.y"
- {
- define_dialog ((yyvsp[-12].id), &sub_res_info, &dialog);
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 40:
-#line 390 "rcparse.y"
- {
- memset (&dialog, 0, sizeof dialog);
- dialog.x = (yyvsp[-4].il);
- dialog.y = (yyvsp[-3].il);
- dialog.width = (yyvsp[-2].il);
- dialog.height = (yyvsp[-1].il);
- dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU;
- dialog.exstyle = (yyvsp[-5].il);
- dialog.menu.named = 1;
- dialog.class.named = 1;
- dialog.font = NULL;
- dialog.ex = ((struct dialog_ex *)
- res_alloc (sizeof (struct dialog_ex)));
- memset (dialog.ex, 0, sizeof (struct dialog_ex));
- dialog.ex->help = (yyvsp[0].il);
- dialog.controls = NULL;
- sub_res_info = (yyvsp[-6].res_info);
- style = 0;
- }
- break;
-
- case 41:
-#line 410 "rcparse.y"
- {
- define_dialog ((yyvsp[-13].id), &sub_res_info, &dialog);
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 42:
-#line 420 "rcparse.y"
- {
- (yyval.il) = 0;
- }
- break;
-
- case 43:
-#line 424 "rcparse.y"
- {
- (yyval.il) = (yyvsp[0].il);
- }
- break;
-
- case 45:
-#line 432 "rcparse.y"
- {
- dialog.style |= WS_CAPTION;
- style |= WS_CAPTION;
- unicode_from_ascii ((int *) NULL, &dialog.caption, (yyvsp[0].s));
- }
- break;
-
- case 46:
-#line 438 "rcparse.y"
- {
- dialog.class = (yyvsp[0].id);
- }
- break;
-
- case 47:
-#line 443 "rcparse.y"
- {
- dialog.style = style;
- }
- break;
-
- case 48:
-#line 447 "rcparse.y"
- {
- dialog.exstyle = (yyvsp[0].il);
- }
- break;
-
- case 49:
-#line 451 "rcparse.y"
- {
- res_string_to_id (& dialog.class, (yyvsp[0].s));
- }
- break;
-
- case 50:
-#line 455 "rcparse.y"
- {
- dialog.style |= DS_SETFONT;
- style |= DS_SETFONT;
- dialog.pointsize = (yyvsp[-2].il);
- unicode_from_ascii ((int *) NULL, &dialog.font, (yyvsp[0].s));
- if (dialog.ex != NULL)
- {
- dialog.ex->weight = 0;
- dialog.ex->italic = 0;
- dialog.ex->charset = 1;
- }
- }
- break;
-
- case 51:
-#line 468 "rcparse.y"
- {
- dialog.style |= DS_SETFONT;
- style |= DS_SETFONT;
- dialog.pointsize = (yyvsp[-3].il);
- unicode_from_ascii ((int *) NULL, &dialog.font, (yyvsp[-1].s));
- if (dialog.ex == NULL)
- rcparse_warning (_("extended FONT requires DIALOGEX"));
- else
- {
- dialog.ex->weight = (yyvsp[0].il);
- dialog.ex->italic = 0;
- dialog.ex->charset = 1;
- }
- }
- break;
-
- case 52:
-#line 483 "rcparse.y"
- {
- dialog.style |= DS_SETFONT;
- style |= DS_SETFONT;
- dialog.pointsize = (yyvsp[-4].il);
- unicode_from_ascii ((int *) NULL, &dialog.font, (yyvsp[-2].s));
- if (dialog.ex == NULL)
- rcparse_warning (_("extended FONT requires DIALOGEX"));
- else
- {
- dialog.ex->weight = (yyvsp[-1].il);
- dialog.ex->italic = (yyvsp[0].il);
- dialog.ex->charset = 1;
- }
- }
- break;
-
- case 53:
-#line 498 "rcparse.y"
- {
- dialog.style |= DS_SETFONT;
- style |= DS_SETFONT;
- dialog.pointsize = (yyvsp[-5].il);
- unicode_from_ascii ((int *) NULL, &dialog.font, (yyvsp[-3].s));
- if (dialog.ex == NULL)
- rcparse_warning (_("extended FONT requires DIALOGEX"));
- else
- {
- dialog.ex->weight = (yyvsp[-2].il);
- dialog.ex->italic = (yyvsp[-1].il);
- dialog.ex->charset = (yyvsp[0].il);
- }
- }
- break;
-
- case 54:
-#line 513 "rcparse.y"
- {
- dialog.menu = (yyvsp[0].id);
- }
- break;
-
- case 55:
-#line 517 "rcparse.y"
- {
- sub_res_info.characteristics = (yyvsp[0].il);
- }
- break;
-
- case 56:
-#line 521 "rcparse.y"
- {
- sub_res_info.language = (yyvsp[-1].il) | ((yyvsp[0].il) << SUBLANG_SHIFT);
- }
- break;
-
- case 57:
-#line 525 "rcparse.y"
- {
- sub_res_info.version = (yyvsp[0].il);
- }
- break;
-
- case 59:
-#line 533 "rcparse.y"
- {
- struct dialog_control **pp;
-
- for (pp = &dialog.controls; *pp != NULL; pp = &(*pp)->next)
- ;
- *pp = (yyvsp[0].dialog_control);
- }
- break;
-
- case 60:
-#line 544 "rcparse.y"
- {
- default_style = BS_AUTO3STATE | WS_TABSTOP;
- base_style = BS_AUTO3STATE;
- class = CTL_BUTTON;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 61:
-#line 551 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 62:
-#line 555 "rcparse.y"
- {
- default_style = BS_AUTOCHECKBOX | WS_TABSTOP;
- base_style = BS_AUTOCHECKBOX;
- class = CTL_BUTTON;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 63:
-#line 562 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 64:
-#line 566 "rcparse.y"
- {
- default_style = BS_AUTORADIOBUTTON | WS_TABSTOP;
- base_style = BS_AUTORADIOBUTTON;
- class = CTL_BUTTON;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 65:
-#line 573 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 66:
-#line 577 "rcparse.y"
- {
- default_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
- base_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
- class = CTL_EDIT;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 67:
-#line 584 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- if (dialog.ex == NULL)
- rcparse_warning (_("BEDIT requires DIALOGEX"));
- res_string_to_id (&(yyval.dialog_control)->class, "BEDIT");
- }
- break;
-
- case 68:
-#line 591 "rcparse.y"
- {
- default_style = BS_CHECKBOX | WS_TABSTOP;
- base_style = BS_CHECKBOX | WS_TABSTOP;
- class = CTL_BUTTON;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 69:
-#line 598 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 70:
-#line 602 "rcparse.y"
- {
- /* This is as per MSDN documentation. With some (???)
- versions of MS rc.exe their is no default style. */
- default_style = CBS_SIMPLE | WS_TABSTOP;
- base_style = 0;
- class = CTL_COMBOBOX;
- res_text_field = res_null_text;
- }
- break;
-
- case 71:
-#line 611 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 72:
-#line 616 "rcparse.y"
- {
- (yyval.dialog_control) = define_control ((yyvsp[-9].id), (yyvsp[-8].il), (yyvsp[-5].il), (yyvsp[-4].il), (yyvsp[-3].il), (yyvsp[-2].il), (yyvsp[-7].il), style, (yyvsp[-1].il));
- if ((yyvsp[0].rcdata_item) != NULL)
- {
- if (dialog.ex == NULL)
- rcparse_warning (_("control data requires DIALOGEX"));
- (yyval.dialog_control)->data = (yyvsp[0].rcdata_item);
- }
- }
- break;
-
- case 73:
-#line 627 "rcparse.y"
- {
- (yyval.dialog_control) = define_control ((yyvsp[-10].id), (yyvsp[-9].il), (yyvsp[-6].il), (yyvsp[-5].il), (yyvsp[-4].il), (yyvsp[-3].il), (yyvsp[-8].il), style, (yyvsp[-2].il));
- if (dialog.ex == NULL)
- rcparse_warning (_("help ID requires DIALOGEX"));
- (yyval.dialog_control)->help = (yyvsp[-1].il);
- (yyval.dialog_control)->data = (yyvsp[0].rcdata_item);
- }
- break;
-
- case 74:
-#line 636 "rcparse.y"
- {
- (yyval.dialog_control) = define_control ((yyvsp[-10].id), (yyvsp[-9].il), (yyvsp[-5].il), (yyvsp[-4].il), (yyvsp[-3].il), (yyvsp[-2].il), 0, style, (yyvsp[-1].il));
- if ((yyvsp[0].rcdata_item) != NULL)
- {
- if (dialog.ex == NULL)
- rcparse_warning ("control data requires DIALOGEX");
- (yyval.dialog_control)->data = (yyvsp[0].rcdata_item);
- }
- (yyval.dialog_control)->class.named = 1;
- unicode_from_ascii (&(yyval.dialog_control)->class.u.n.length, &(yyval.dialog_control)->class.u.n.name, (yyvsp[-7].s));
- }
- break;
-
- case 75:
-#line 649 "rcparse.y"
- {
- (yyval.dialog_control) = define_control ((yyvsp[-11].id), (yyvsp[-10].il), (yyvsp[-6].il), (yyvsp[-5].il), (yyvsp[-4].il), (yyvsp[-3].il), 0, style, (yyvsp[-2].il));
- if (dialog.ex == NULL)
- rcparse_warning ("help ID requires DIALOGEX");
- (yyval.dialog_control)->help = (yyvsp[-1].il);
- (yyval.dialog_control)->data = (yyvsp[0].rcdata_item);
- (yyval.dialog_control)->class.named = 1;
- unicode_from_ascii (&(yyval.dialog_control)->class.u.n.length, &(yyval.dialog_control)->class.u.n.name, (yyvsp[-8].s));
- }
- break;
-
- case 76:
-#line 659 "rcparse.y"
- {
- default_style = SS_CENTER | WS_GROUP;
- base_style = SS_CENTER;
- class = CTL_STATIC;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 77:
-#line 666 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 78:
-#line 670 "rcparse.y"
- {
- default_style = BS_DEFPUSHBUTTON | WS_TABSTOP;
- base_style = BS_DEFPUSHBUTTON | WS_TABSTOP;
- class = CTL_BUTTON;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 79:
-#line 677 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 80:
-#line 681 "rcparse.y"
- {
- default_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
- base_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
- class = CTL_EDIT;
- res_text_field = res_null_text;
- }
- break;
-
- case 81:
-#line 688 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 82:
-#line 692 "rcparse.y"
- {
- default_style = BS_GROUPBOX;
- base_style = BS_GROUPBOX;
- class = CTL_BUTTON;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 83:
-#line 699 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 84:
-#line 703 "rcparse.y"
- {
- default_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
- base_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
- class = CTL_EDIT;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 85:
-#line 710 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- if (dialog.ex == NULL)
- rcparse_warning (_("IEDIT requires DIALOGEX"));
- res_string_to_id (&(yyval.dialog_control)->class, "HEDIT");
- }
- break;
-
- case 86:
-#line 717 "rcparse.y"
- {
- (yyval.dialog_control) = define_icon_control ((yyvsp[-4].id), (yyvsp[-3].il), (yyvsp[-2].il), (yyvsp[-1].il), 0, 0, 0, (yyvsp[0].rcdata_item),
- dialog.ex);
- }
- break;
-
- case 87:
-#line 723 "rcparse.y"
- {
- (yyval.dialog_control) = define_icon_control ((yyvsp[-6].id), (yyvsp[-5].il), (yyvsp[-4].il), (yyvsp[-3].il), 0, 0, 0, (yyvsp[0].rcdata_item),
- dialog.ex);
- }
- break;
-
- case 88:
-#line 729 "rcparse.y"
- {
- (yyval.dialog_control) = define_icon_control ((yyvsp[-8].id), (yyvsp[-7].il), (yyvsp[-6].il), (yyvsp[-5].il), style, (yyvsp[-1].il), 0, (yyvsp[0].rcdata_item),
- dialog.ex);
- }
- break;
-
- case 89:
-#line 735 "rcparse.y"
- {
- (yyval.dialog_control) = define_icon_control ((yyvsp[-9].id), (yyvsp[-8].il), (yyvsp[-7].il), (yyvsp[-6].il), style, (yyvsp[-2].il), (yyvsp[-1].il), (yyvsp[0].rcdata_item),
- dialog.ex);
- }
- break;
-
- case 90:
-#line 740 "rcparse.y"
- {
- default_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
- base_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
- class = CTL_EDIT;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 91:
-#line 747 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- if (dialog.ex == NULL)
- rcparse_warning (_("IEDIT requires DIALOGEX"));
- res_string_to_id (&(yyval.dialog_control)->class, "IEDIT");
- }
- break;
-
- case 92:
-#line 754 "rcparse.y"
- {
- default_style = LBS_NOTIFY | WS_BORDER;
- base_style = LBS_NOTIFY | WS_BORDER;
- class = CTL_LISTBOX;
- res_text_field = res_null_text;
- }
- break;
-
- case 93:
-#line 761 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 94:
-#line 765 "rcparse.y"
- {
- default_style = SS_LEFT | WS_GROUP;
- base_style = SS_LEFT;
- class = CTL_STATIC;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 95:
-#line 772 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 96:
-#line 776 "rcparse.y"
- {
- default_style = BS_PUSHBOX | WS_TABSTOP;
- base_style = BS_PUSHBOX;
- class = CTL_BUTTON;
- }
- break;
-
- case 97:
-#line 782 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 98:
-#line 786 "rcparse.y"
- {
- default_style = BS_PUSHBUTTON | WS_TABSTOP;
- base_style = BS_PUSHBUTTON | WS_TABSTOP;
- class = CTL_BUTTON;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 99:
-#line 793 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 100:
-#line 797 "rcparse.y"
- {
- default_style = BS_RADIOBUTTON | WS_TABSTOP;
- base_style = BS_RADIOBUTTON;
- class = CTL_BUTTON;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 101:
-#line 804 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 102:
-#line 808 "rcparse.y"
- {
- default_style = SS_RIGHT | WS_GROUP;
- base_style = SS_RIGHT;
- class = CTL_STATIC;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 103:
-#line 815 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 104:
-#line 819 "rcparse.y"
- {
- default_style = SBS_HORZ;
- base_style = 0;
- class = CTL_SCROLLBAR;
- res_text_field = res_null_text;
- }
- break;
-
- case 105:
-#line 826 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 106:
-#line 830 "rcparse.y"
- {
- default_style = BS_3STATE | WS_TABSTOP;
- base_style = BS_3STATE;
- class = CTL_BUTTON;
- res_text_field = (yyvsp[0].id);
- }
- break;
-
- case 107:
-#line 837 "rcparse.y"
- {
- (yyval.dialog_control) = (yyvsp[0].dialog_control);
- }
- break;
-
- case 108:
-#line 842 "rcparse.y"
- { style = WS_CHILD | WS_VISIBLE; }
- break;
-
- case 109:
-#line 844 "rcparse.y"
- {
- (yyval.dialog_control) = define_control ((yyvsp[-13].id), (yyvsp[-12].il), (yyvsp[-10].il), (yyvsp[-8].il), (yyvsp[-6].il), (yyvsp[-4].il), CTL_BUTTON,
- style, (yyvsp[0].il));
- }
- break;
-
- case 110:
-#line 859 "rcparse.y"
- {
- (yyval.dialog_control) = define_control (res_text_field, (yyvsp[-5].il), (yyvsp[-4].il), (yyvsp[-3].il), (yyvsp[-2].il), (yyvsp[-1].il), class,
- default_style | WS_CHILD | WS_VISIBLE, 0);
- if ((yyvsp[0].rcdata_item) != NULL)
- {
- if (dialog.ex == NULL)
- rcparse_warning (_("control data requires DIALOGEX"));
- (yyval.dialog_control)->data = (yyvsp[0].rcdata_item);
- }
- }
- break;
-
- case 111:
-#line 871 "rcparse.y"
- {
- (yyval.dialog_control) = define_control (res_text_field, (yyvsp[-7].il), (yyvsp[-6].il), (yyvsp[-5].il), (yyvsp[-4].il), (yyvsp[-3].il), class, style, (yyvsp[-1].il));
- if ((yyvsp[0].rcdata_item) != NULL)
- {
- if (dialog.ex == NULL)
- rcparse_warning (_("control data requires DIALOGEX"));
- (yyval.dialog_control)->data = (yyvsp[0].rcdata_item);
- }
- }
- break;
-
- case 112:
-#line 882 "rcparse.y"
- {
- (yyval.dialog_control) = define_control (res_text_field, (yyvsp[-8].il), (yyvsp[-7].il), (yyvsp[-6].il), (yyvsp[-5].il), (yyvsp[-4].il), class, style, (yyvsp[-2].il));
- if (dialog.ex == NULL)
- rcparse_warning (_("help ID requires DIALOGEX"));
- (yyval.dialog_control)->help = (yyvsp[-1].il);
- (yyval.dialog_control)->data = (yyvsp[0].rcdata_item);
- }
- break;
-
- case 113:
-#line 893 "rcparse.y"
- {
- res_string_to_id (&(yyval.id), "");
- }
- break;
-
- case 114:
-#line 897 "rcparse.y"
- {
- (yyval.id).named = 0;
- (yyval.id).u.id = (yyvsp[-1].il);
- }
- break;
-
- case 115:
-#line 902 "rcparse.y"
- {
- res_string_to_id (&(yyval.id), (yyvsp[0].s));
- }
- break;
-
- case 116:
-#line 906 "rcparse.y"
- {
- res_string_to_id (&(yyval.id), (yyvsp[-1].s));
- }
- break;
-
- case 117:
-#line 913 "rcparse.y"
- {
- (yyval.rcdata_item) = NULL;
- }
- break;
-
- case 118:
-#line 917 "rcparse.y"
- {
- (yyval.rcdata_item) = (yyvsp[-1].rcdata).first;
- }
- break;
-
- case 119:
-#line 926 "rcparse.y"
- { style = WS_CHILD | WS_VISIBLE; }
- break;
-
- case 121:
-#line 932 "rcparse.y"
- { style = SS_ICON | WS_CHILD | WS_VISIBLE; }
- break;
-
- case 123:
-#line 938 "rcparse.y"
- { style = base_style | WS_CHILD | WS_VISIBLE; }
- break;
-
- case 125:
-#line 946 "rcparse.y"
- {
- define_font ((yyvsp[-3].id), &(yyvsp[-1].res_info), (yyvsp[0].s));
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 126:
-#line 958 "rcparse.y"
- {
- define_icon ((yyvsp[-3].id), &(yyvsp[-1].res_info), (yyvsp[0].s));
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 127:
-#line 971 "rcparse.y"
- {
- language = (yyvsp[-1].il) | ((yyvsp[0].il) << SUBLANG_SHIFT);
- }
- break;
-
- case 128:
-#line 980 "rcparse.y"
- {
- define_menu ((yyvsp[-5].id), &(yyvsp[-3].res_info), (yyvsp[-1].menuitem));
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 129:
-#line 990 "rcparse.y"
- {
- (yyval.menuitem) = NULL;
- }
- break;
-
- case 130:
-#line 994 "rcparse.y"
- {
- if ((yyvsp[-1].menuitem) == NULL)
- (yyval.menuitem) = (yyvsp[0].menuitem);
- else
- {
- struct menuitem **pp;
-
- for (pp = &(yyvsp[-1].menuitem)->next; *pp != NULL; pp = &(*pp)->next)
- ;
- *pp = (yyvsp[0].menuitem);
- (yyval.menuitem) = (yyvsp[-1].menuitem);
- }
- }
- break;
-
- case 131:
-#line 1011 "rcparse.y"
- {
- (yyval.menuitem) = define_menuitem ((yyvsp[-2].s), (yyvsp[-1].il), (yyvsp[0].is), 0, 0, NULL);
- }
- break;
-
- case 132:
-#line 1015 "rcparse.y"
- {
- (yyval.menuitem) = define_menuitem (NULL, 0, 0, 0, 0, NULL);
- }
- break;
-
- case 133:
-#line 1019 "rcparse.y"
- {
- (yyval.menuitem) = define_menuitem ((yyvsp[-4].s), 0, (yyvsp[-3].is), 0, 0, (yyvsp[-1].menuitem));
- }
- break;
-
- case 134:
-#line 1026 "rcparse.y"
- {
- (yyval.is) = 0;
- }
- break;
-
- case 135:
-#line 1030 "rcparse.y"
- {
- (yyval.is) = (yyvsp[-2].is) | (yyvsp[0].is);
- }
- break;
-
- case 136:
-#line 1034 "rcparse.y"
- {
- (yyval.is) = (yyvsp[-1].is) | (yyvsp[0].is);
- }
- break;
-
- case 137:
-#line 1041 "rcparse.y"
- {
- (yyval.is) = MENUITEM_CHECKED;
- }
- break;
-
- case 138:
-#line 1045 "rcparse.y"
- {
- (yyval.is) = MENUITEM_GRAYED;
- }
- break;
-
- case 139:
-#line 1049 "rcparse.y"
- {
- (yyval.is) = MENUITEM_HELP;
- }
- break;
-
- case 140:
-#line 1053 "rcparse.y"
- {
- (yyval.is) = MENUITEM_INACTIVE;
- }
- break;
-
- case 141:
-#line 1057 "rcparse.y"
- {
- (yyval.is) = MENUITEM_MENUBARBREAK;
- }
- break;
-
- case 142:
-#line 1061 "rcparse.y"
- {
- (yyval.is) = MENUITEM_MENUBREAK;
- }
- break;
-
- case 143:
-#line 1070 "rcparse.y"
- {
- define_menu ((yyvsp[-5].id), &(yyvsp[-3].res_info), (yyvsp[-1].menuitem));
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 144:
-#line 1080 "rcparse.y"
- {
- (yyval.menuitem) = NULL;
- }
- break;
-
- case 145:
-#line 1084 "rcparse.y"
- {
- if ((yyvsp[-1].menuitem) == NULL)
- (yyval.menuitem) = (yyvsp[0].menuitem);
- else
- {
- struct menuitem **pp;
-
- for (pp = &(yyvsp[-1].menuitem)->next; *pp != NULL; pp = &(*pp)->next)
- ;
- *pp = (yyvsp[0].menuitem);
- (yyval.menuitem) = (yyvsp[-1].menuitem);
- }
- }
- break;
-
- case 146:
-#line 1101 "rcparse.y"
- {
- (yyval.menuitem) = define_menuitem ((yyvsp[0].s), 0, 0, 0, 0, NULL);
- }
- break;
-
- case 147:
-#line 1105 "rcparse.y"
- {
- (yyval.menuitem) = define_menuitem ((yyvsp[-1].s), (yyvsp[0].il), 0, 0, 0, NULL);
- }
- break;
-
- case 148:
-#line 1109 "rcparse.y"
- {
- (yyval.menuitem) = define_menuitem ((yyvsp[-3].s), (yyvsp[-2].il), (yyvsp[-1].il), (yyvsp[0].il), 0, NULL);
- }
- break;
-
- case 149:
-#line 1113 "rcparse.y"
- {
- (yyval.menuitem) = define_menuitem (NULL, 0, 0, 0, 0, NULL);
- }
- break;
-
- case 150:
-#line 1117 "rcparse.y"
- {
- (yyval.menuitem) = define_menuitem ((yyvsp[-3].s), 0, 0, 0, 0, (yyvsp[-1].menuitem));
- }
- break;
-
- case 151:
-#line 1121 "rcparse.y"
- {
- (yyval.menuitem) = define_menuitem ((yyvsp[-4].s), (yyvsp[-3].il), 0, 0, 0, (yyvsp[-1].menuitem));
- }
- break;
-
- case 152:
-#line 1125 "rcparse.y"
- {
- (yyval.menuitem) = define_menuitem ((yyvsp[-5].s), (yyvsp[-4].il), (yyvsp[-3].il), 0, 0, (yyvsp[-1].menuitem));
- }
- break;
-
- case 153:
-#line 1130 "rcparse.y"
- {
- (yyval.menuitem) = define_menuitem ((yyvsp[-7].s), (yyvsp[-6].il), (yyvsp[-5].il), (yyvsp[-4].il), (yyvsp[-3].il), (yyvsp[-1].menuitem));
- }
- break;
-
- case 154:
-#line 1139 "rcparse.y"
- {
- define_messagetable ((yyvsp[-3].id), &(yyvsp[-1].res_info), (yyvsp[0].s));
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 155:
-#line 1151 "rcparse.y"
- {
- define_rcdata ((yyvsp[-5].id), &(yyvsp[-3].res_info), (yyvsp[-1].rcdata).first);
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 156:
-#line 1158 "rcparse.y"
- {
- define_rcdata_file ((yyvsp[-3].id), &(yyvsp[-1].res_info), (yyvsp[0].s));
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 157:
-#line 1170 "rcparse.y"
- {
- rcparse_rcdata ();
- }
- break;
-
- case 158:
-#line 1174 "rcparse.y"
- {
- rcparse_normal ();
- (yyval.rcdata) = (yyvsp[0].rcdata);
- }
- break;
-
- case 159:
-#line 1182 "rcparse.y"
- {
- (yyval.rcdata).first = NULL;
- (yyval.rcdata).last = NULL;
- }
- break;
-
- case 160:
-#line 1187 "rcparse.y"
- {
- (yyval.rcdata) = (yyvsp[0].rcdata);
- }
- break;
-
- case 161:
-#line 1194 "rcparse.y"
- {
- struct rcdata_item *ri;
-
- ri = define_rcdata_string ((yyvsp[0].ss).s, (yyvsp[0].ss).length);
- (yyval.rcdata).first = ri;
- (yyval.rcdata).last = ri;
- }
- break;
-
- case 162:
-#line 1202 "rcparse.y"
- {
- struct rcdata_item *ri;
-
- ri = define_rcdata_number ((yyvsp[0].i).val, (yyvsp[0].i).dword);
- (yyval.rcdata).first = ri;
- (yyval.rcdata).last = ri;
- }
- break;
-
- case 163:
-#line 1210 "rcparse.y"
- {
- struct rcdata_item *ri;
-
- ri = define_rcdata_string ((yyvsp[0].ss).s, (yyvsp[0].ss).length);
- (yyval.rcdata).first = (yyvsp[-2].rcdata).first;
- (yyvsp[-2].rcdata).last->next = ri;
- (yyval.rcdata).last = ri;
- }
- break;
-
- case 164:
-#line 1219 "rcparse.y"
- {
- struct rcdata_item *ri;
-
- ri = define_rcdata_number ((yyvsp[0].i).val, (yyvsp[0].i).dword);
- (yyval.rcdata).first = (yyvsp[-2].rcdata).first;
- (yyvsp[-2].rcdata).last->next = ri;
- (yyval.rcdata).last = ri;
- }
- break;
-
- case 165:
-#line 1233 "rcparse.y"
- { sub_res_info = (yyvsp[-1].res_info); }
- break;
-
- case 168:
-#line 1240 "rcparse.y"
- {
- define_stringtable (&sub_res_info, (yyvsp[-1].il), (yyvsp[0].s));
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 169:
-#line 1247 "rcparse.y"
- {
- define_stringtable (&sub_res_info, (yyvsp[-2].il), (yyvsp[0].s));
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 170:
-#line 1260 "rcparse.y"
- {
- define_user_data ((yyvsp[-5].id), (yyvsp[-4].id), &(yyvsp[-3].res_info), (yyvsp[-1].rcdata).first);
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 171:
-#line 1267 "rcparse.y"
- {
- define_user_file ((yyvsp[-3].id), (yyvsp[-2].id), &(yyvsp[-1].res_info), (yyvsp[0].s));
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 172:
-#line 1279 "rcparse.y"
- {
- define_versioninfo ((yyvsp[-5].id), language, (yyvsp[-3].fixver), (yyvsp[-1].verinfo));
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- break;
-
- case 173:
-#line 1289 "rcparse.y"
- {
- (yyval.fixver) = ((struct fixed_versioninfo *)
- res_alloc (sizeof (struct fixed_versioninfo)));
- memset ((yyval.fixver), 0, sizeof (struct fixed_versioninfo));
- }
- break;
-
- case 174:
-#line 1295 "rcparse.y"
- {
- (yyvsp[-5].fixver)->file_version_ms = ((yyvsp[-3].il) << 16) | (yyvsp[-2].il);
- (yyvsp[-5].fixver)->file_version_ls = ((yyvsp[-1].il) << 16) | (yyvsp[0].il);
- (yyval.fixver) = (yyvsp[-5].fixver);
- }
- break;
-
- case 175:
-#line 1301 "rcparse.y"
- {
- (yyvsp[-5].fixver)->product_version_ms = ((yyvsp[-3].il) << 16) | (yyvsp[-2].il);
- (yyvsp[-5].fixver)->product_version_ls = ((yyvsp[-1].il) << 16) | (yyvsp[0].il);
- (yyval.fixver) = (yyvsp[-5].fixver);
- }
- break;
-
- case 176:
-#line 1307 "rcparse.y"
- {
- (yyvsp[-2].fixver)->file_flags_mask = (yyvsp[0].il);
- (yyval.fixver) = (yyvsp[-2].fixver);
- }
- break;
-
- case 177:
-#line 1312 "rcparse.y"
- {
- (yyvsp[-2].fixver)->file_flags = (yyvsp[0].il);
- (yyval.fixver) = (yyvsp[-2].fixver);
- }
- break;
-
- case 178:
-#line 1317 "rcparse.y"
- {
- (yyvsp[-2].fixver)->file_os = (yyvsp[0].il);
- (yyval.fixver) = (yyvsp[-2].fixver);
- }
- break;
-
- case 179:
-#line 1322 "rcparse.y"
- {
- (yyvsp[-2].fixver)->file_type = (yyvsp[0].il);
- (yyval.fixver) = (yyvsp[-2].fixver);
- }
- break;
-
- case 180:
-#line 1327 "rcparse.y"
- {
- (yyvsp[-2].fixver)->file_subtype = (yyvsp[0].il);
- (yyval.fixver) = (yyvsp[-2].fixver);
- }
- break;
-
- case 181:
-#line 1341 "rcparse.y"
- {
- (yyval.verinfo) = NULL;
- }
- break;
-
- case 182:
-#line 1345 "rcparse.y"
- {
- (yyval.verinfo) = append_ver_stringfileinfo ((yyvsp[-7].verinfo), (yyvsp[-4].s), (yyvsp[-2].verstring));
- }
- break;
-
- case 183:
-#line 1349 "rcparse.y"
- {
- (yyval.verinfo) = append_ver_varfileinfo ((yyvsp[-6].verinfo), (yyvsp[-2].s), (yyvsp[-1].vervar));
- }
- break;
-
- case 184:
-#line 1356 "rcparse.y"
- {
- (yyval.verstring) = NULL;
- }
- break;
-
- case 185:
-#line 1360 "rcparse.y"
- {
- (yyval.verstring) = append_verval ((yyvsp[-4].verstring), (yyvsp[-2].s), (yyvsp[0].s));
- }
- break;
-
- case 186:
-#line 1367 "rcparse.y"
- {
- (yyval.vervar) = NULL;
- }
- break;
-
- case 187:
-#line 1371 "rcparse.y"
- {
- (yyval.vervar) = append_vertrans ((yyvsp[-2].vervar), (yyvsp[-1].il), (yyvsp[0].il));
- }
- break;
-
- case 188:
-#line 1380 "rcparse.y"
- {
- (yyval.id).named = 0;
- (yyval.id).u.id = (yyvsp[0].il);
- }
- break;
-
- case 189:
-#line 1385 "rcparse.y"
- {
- char *copy, *s;
-
- /* It seems that resource ID's are forced to upper case. */
- copy = xstrdup ((yyvsp[0].s));
- for (s = copy; *s != '\0'; s++)
- *s = TOUPPER (*s);
- res_string_to_id (&(yyval.id), copy);
- free (copy);
- }
- break;
-
- case 190:
-#line 1401 "rcparse.y"
- {
- (yyval.s) = (yyvsp[0].s);
- }
- break;
-
- case 191:
-#line 1405 "rcparse.y"
- {
- (yyval.s) = (yyvsp[-1].s);
- }
- break;
-
- case 192:
-#line 1409 "rcparse.y"
- {
- (yyval.s) = (yyvsp[-1].s);
- }
- break;
-
- case 193:
-#line 1417 "rcparse.y"
- {
- (yyval.id).named = 0;
- (yyval.id).u.id = (yyvsp[-1].il);
- }
- break;
-
- case 194:
-#line 1422 "rcparse.y"
- {
- char *copy, *s;
-
- /* It seems that resource ID's are forced to upper case. */
- copy = xstrdup ((yyvsp[0].s));
- for (s = copy; *s != '\0'; s++)
- *s = TOUPPER (*s);
- res_string_to_id (&(yyval.id), copy);
- free (copy);
- }
- break;
-
- case 195:
-#line 1439 "rcparse.y"
- {
- memset (&(yyval.res_info), 0, sizeof (struct res_res_info));
- (yyval.res_info).language = language;
- /* FIXME: Is this the right default? */
- (yyval.res_info).memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE;
- }
- break;
-
- case 196:
-#line 1446 "rcparse.y"
- {
- (yyval.res_info) = (yyvsp[-1].res_info);
- (yyval.res_info).memflags |= (yyvsp[0].memflags).on;
- (yyval.res_info).memflags &=~ (yyvsp[0].memflags).off;
- }
- break;
-
- case 197:
-#line 1452 "rcparse.y"
- {
- (yyval.res_info) = (yyvsp[-2].res_info);
- (yyval.res_info).characteristics = (yyvsp[0].il);
- }
- break;
-
- case 198:
-#line 1457 "rcparse.y"
- {
- (yyval.res_info) = (yyvsp[-3].res_info);
- (yyval.res_info).language = (yyvsp[-1].il) | ((yyvsp[0].il) << SUBLANG_SHIFT);
- }
- break;
-
- case 199:
-#line 1462 "rcparse.y"
- {
- (yyval.res_info) = (yyvsp[-2].res_info);
- (yyval.res_info).version = (yyvsp[0].il);
- }
- break;
-
- case 200:
-#line 1472 "rcparse.y"
- {
- memset (&(yyval.res_info), 0, sizeof (struct res_res_info));
- (yyval.res_info).language = language;
- (yyval.res_info).memflags = MEMFLAG_MOVEABLE | MEMFLAG_DISCARDABLE;
- }
- break;
-
- case 201:
-#line 1478 "rcparse.y"
- {
- (yyval.res_info) = (yyvsp[-1].res_info);
- (yyval.res_info).memflags |= (yyvsp[0].memflags).on;
- (yyval.res_info).memflags &=~ (yyvsp[0].memflags).off;
- }
- break;
-
- case 202:
-#line 1489 "rcparse.y"
- {
- memset (&(yyval.res_info), 0, sizeof (struct res_res_info));
- (yyval.res_info).language = language;
- (yyval.res_info).memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE;
- }
- break;
-
- case 203:
-#line 1495 "rcparse.y"
- {
- (yyval.res_info) = (yyvsp[-1].res_info);
- (yyval.res_info).memflags |= (yyvsp[0].memflags).on;
- (yyval.res_info).memflags &=~ (yyvsp[0].memflags).off;
- }
- break;
-
- case 204:
-#line 1507 "rcparse.y"
- {
- (yyval.memflags).on = MEMFLAG_MOVEABLE;
- (yyval.memflags).off = 0;
- }
- break;
-
- case 205:
-#line 1512 "rcparse.y"
- {
- (yyval.memflags).on = 0;
- (yyval.memflags).off = MEMFLAG_MOVEABLE;
- }
- break;
-
- case 206:
-#line 1517 "rcparse.y"
- {
- (yyval.memflags).on = MEMFLAG_PURE;
- (yyval.memflags).off = 0;
- }
- break;
-
- case 207:
-#line 1522 "rcparse.y"
- {
- (yyval.memflags).on = 0;
- (yyval.memflags).off = MEMFLAG_PURE;
- }
- break;
-
- case 208:
-#line 1527 "rcparse.y"
- {
- (yyval.memflags).on = MEMFLAG_PRELOAD;
- (yyval.memflags).off = 0;
- }
- break;
-
- case 209:
-#line 1532 "rcparse.y"
- {
- (yyval.memflags).on = 0;
- (yyval.memflags).off = MEMFLAG_PRELOAD;
- }
- break;
-
- case 210:
-#line 1537 "rcparse.y"
- {
- (yyval.memflags).on = MEMFLAG_DISCARDABLE;
- (yyval.memflags).off = 0;
- }
- break;
-
- case 211:
-#line 1547 "rcparse.y"
- {
- (yyval.s) = (yyvsp[0].s);
- }
- break;
-
- case 212:
-#line 1551 "rcparse.y"
- {
- (yyval.s) = (yyvsp[0].s);
- }
- break;
-
- case 213:
-#line 1568 "rcparse.y"
- {
- style |= (yyvsp[0].il);
- }
- break;
-
- case 214:
-#line 1572 "rcparse.y"
- {
- style &=~ (yyvsp[0].il);
- }
- break;
-
- case 215:
-#line 1576 "rcparse.y"
- {
- style |= (yyvsp[0].il);
- }
- break;
-
- case 216:
-#line 1580 "rcparse.y"
- {
- style &=~ (yyvsp[0].il);
- }
- break;
-
- case 217:
-#line 1587 "rcparse.y"
- {
- (yyval.il) = (yyvsp[0].i).val;
- }
- break;
-
- case 218:
-#line 1591 "rcparse.y"
- {
- (yyval.il) = (yyvsp[-1].il);
- }
- break;
-
- case 219:
-#line 1600 "rcparse.y"
- {
- (yyval.il) = 0;
- }
- break;
-
- case 220:
-#line 1604 "rcparse.y"
- {
- (yyval.il) = (yyvsp[0].il);
- }
- break;
-
- case 221:
-#line 1613 "rcparse.y"
- {
- (yyval.il) = (yyvsp[0].il);
- }
- break;
-
- case 222:
-#line 1622 "rcparse.y"
- {
- (yyval.il) = (yyvsp[0].i).val;
- }
- break;
-
- case 223:
-#line 1631 "rcparse.y"
- {
- (yyval.i) = (yyvsp[0].i);
- }
- break;
-
- case 224:
-#line 1635 "rcparse.y"
- {
- (yyval.i) = (yyvsp[-1].i);
- }
- break;
-
- case 225:
-#line 1639 "rcparse.y"
- {
- (yyval.i).val = ~ (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[0].i).dword;
- }
- break;
-
- case 226:
-#line 1644 "rcparse.y"
- {
- (yyval.i).val = - (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[0].i).dword;
- }
- break;
-
- case 227:
-#line 1649 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val * (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 228:
-#line 1654 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val / (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 229:
-#line 1659 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val % (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 230:
-#line 1664 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val + (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 231:
-#line 1669 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val - (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 232:
-#line 1674 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val & (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 233:
-#line 1679 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val ^ (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 234:
-#line 1684 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val | (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 235:
-#line 1695 "rcparse.y"
- {
- (yyval.il) = (yyvsp[0].il);
- }
- break;
-
- case 236:
-#line 1704 "rcparse.y"
- {
- (yyval.il) = (yyvsp[0].i).val;
- }
- break;
-
- case 237:
-#line 1715 "rcparse.y"
- {
- (yyval.i) = (yyvsp[0].i);
- }
- break;
-
- case 238:
-#line 1719 "rcparse.y"
- {
- (yyval.i) = (yyvsp[-1].i);
- }
- break;
-
- case 239:
-#line 1723 "rcparse.y"
- {
- (yyval.i).val = ~ (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[0].i).dword;
- }
- break;
-
- case 240:
-#line 1728 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val * (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 241:
-#line 1733 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val / (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 242:
-#line 1738 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val % (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 243:
-#line 1743 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val + (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 244:
-#line 1748 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val - (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 245:
-#line 1753 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val & (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 246:
-#line 1758 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val ^ (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
- case 247:
-#line 1763 "rcparse.y"
- {
- (yyval.i).val = (yyvsp[-2].i).val | (yyvsp[0].i).val;
- (yyval.i).dword = (yyvsp[-2].i).dword || (yyvsp[0].i).dword;
- }
- break;
-
-
- default: break;
- }
-
-/* Line 1126 of yacc.c. */
-#line 3867 "rcparse.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 1769 "rcparse.y"
-
-
-/* Set the language from the command line. */
-
-void
-rcparse_set_language (int lang)
-{
- language = lang;
-}
-
diff --git a/binutils/rcparse.h b/binutils/rcparse.h
deleted file mode 100644
index f61d200ae7db..000000000000
--- a/binutils/rcparse.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/* 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 {
- BEG = 258,
- END = 259,
- ACCELERATORS = 260,
- VIRTKEY = 261,
- ASCII = 262,
- NOINVERT = 263,
- SHIFT = 264,
- CONTROL = 265,
- ALT = 266,
- BITMAP = 267,
- CURSOR = 268,
- DIALOG = 269,
- DIALOGEX = 270,
- EXSTYLE = 271,
- CAPTION = 272,
- CLASS = 273,
- STYLE = 274,
- AUTO3STATE = 275,
- AUTOCHECKBOX = 276,
- AUTORADIOBUTTON = 277,
- CHECKBOX = 278,
- COMBOBOX = 279,
- CTEXT = 280,
- DEFPUSHBUTTON = 281,
- EDITTEXT = 282,
- GROUPBOX = 283,
- LISTBOX = 284,
- LTEXT = 285,
- PUSHBOX = 286,
- PUSHBUTTON = 287,
- RADIOBUTTON = 288,
- RTEXT = 289,
- SCROLLBAR = 290,
- STATE3 = 291,
- USERBUTTON = 292,
- BEDIT = 293,
- HEDIT = 294,
- IEDIT = 295,
- FONT = 296,
- ICON = 297,
- LANGUAGE = 298,
- CHARACTERISTICS = 299,
- VERSIONK = 300,
- MENU = 301,
- MENUEX = 302,
- MENUITEM = 303,
- SEPARATOR = 304,
- POPUP = 305,
- CHECKED = 306,
- GRAYED = 307,
- HELP = 308,
- INACTIVE = 309,
- MENUBARBREAK = 310,
- MENUBREAK = 311,
- MESSAGETABLE = 312,
- RCDATA = 313,
- STRINGTABLE = 314,
- VERSIONINFO = 315,
- FILEVERSION = 316,
- PRODUCTVERSION = 317,
- FILEFLAGSMASK = 318,
- FILEFLAGS = 319,
- FILEOS = 320,
- FILETYPE = 321,
- FILESUBTYPE = 322,
- BLOCKSTRINGFILEINFO = 323,
- BLOCKVARFILEINFO = 324,
- VALUE = 325,
- BLOCK = 326,
- MOVEABLE = 327,
- FIXED = 328,
- PURE = 329,
- IMPURE = 330,
- PRELOAD = 331,
- LOADONCALL = 332,
- DISCARDABLE = 333,
- NOT = 334,
- QUOTEDSTRING = 335,
- STRING = 336,
- NUMBER = 337,
- SIZEDSTRING = 338,
- IGNORED_TOKEN = 339,
- NEG = 340
- };
-#endif
-/* Tokens. */
-#define BEG 258
-#define END 259
-#define ACCELERATORS 260
-#define VIRTKEY 261
-#define ASCII 262
-#define NOINVERT 263
-#define SHIFT 264
-#define CONTROL 265
-#define ALT 266
-#define BITMAP 267
-#define CURSOR 268
-#define DIALOG 269
-#define DIALOGEX 270
-#define EXSTYLE 271
-#define CAPTION 272
-#define CLASS 273
-#define STYLE 274
-#define AUTO3STATE 275
-#define AUTOCHECKBOX 276
-#define AUTORADIOBUTTON 277
-#define CHECKBOX 278
-#define COMBOBOX 279
-#define CTEXT 280
-#define DEFPUSHBUTTON 281
-#define EDITTEXT 282
-#define GROUPBOX 283
-#define LISTBOX 284
-#define LTEXT 285
-#define PUSHBOX 286
-#define PUSHBUTTON 287
-#define RADIOBUTTON 288
-#define RTEXT 289
-#define SCROLLBAR 290
-#define STATE3 291
-#define USERBUTTON 292
-#define BEDIT 293
-#define HEDIT 294
-#define IEDIT 295
-#define FONT 296
-#define ICON 297
-#define LANGUAGE 298
-#define CHARACTERISTICS 299
-#define VERSIONK 300
-#define MENU 301
-#define MENUEX 302
-#define MENUITEM 303
-#define SEPARATOR 304
-#define POPUP 305
-#define CHECKED 306
-#define GRAYED 307
-#define HELP 308
-#define INACTIVE 309
-#define MENUBARBREAK 310
-#define MENUBREAK 311
-#define MESSAGETABLE 312
-#define RCDATA 313
-#define STRINGTABLE 314
-#define VERSIONINFO 315
-#define FILEVERSION 316
-#define PRODUCTVERSION 317
-#define FILEFLAGSMASK 318
-#define FILEFLAGS 319
-#define FILEOS 320
-#define FILETYPE 321
-#define FILESUBTYPE 322
-#define BLOCKSTRINGFILEINFO 323
-#define BLOCKVARFILEINFO 324
-#define VALUE 325
-#define BLOCK 326
-#define MOVEABLE 327
-#define FIXED 328
-#define PURE 329
-#define IMPURE 330
-#define PRELOAD 331
-#define LOADONCALL 332
-#define DISCARDABLE 333
-#define NOT 334
-#define QUOTEDSTRING 335
-#define STRING 336
-#define NUMBER 337
-#define SIZEDSTRING 338
-#define IGNORED_TOKEN 339
-#define NEG 340
-
-
-
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 66 "rcparse.y"
-typedef union YYSTYPE {
- struct accelerator acc;
- struct accelerator *pacc;
- struct dialog_control *dialog_control;
- struct menuitem *menuitem;
- struct
- {
- struct rcdata_item *first;
- struct rcdata_item *last;
- } rcdata;
- struct rcdata_item *rcdata_item;
- struct stringtable_data *stringtable;
- struct fixed_versioninfo *fixver;
- struct ver_info *verinfo;
- struct ver_stringinfo *verstring;
- struct ver_varinfo *vervar;
- struct res_id id;
- struct res_res_info res_info;
- struct
- {
- unsigned short on;
- unsigned short off;
- } memflags;
- struct
- {
- unsigned long val;
- /* Nonzero if this number was explicitly specified as long. */
- int dword;
- } i;
- unsigned long il;
- unsigned short is;
- const char *s;
- struct
- {
- unsigned long length;
- const char *s;
- } ss;
-} YYSTYPE;
-/* Line 1447 of yacc.c. */
-#line 247 "rcparse.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/rcparse.y b/binutils/rcparse.y
index fbc5bef6f8ae..ac72ee777789 100644
--- a/binutils/rcparse.y
+++ b/binutils/rcparse.y
@@ -1,7 +1,8 @@
%{ /* rcparse.y -- parser for Windows rc files
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
+ Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
+ Extended by Kai Tietz, Onevision.
This file is part of GNU Binutils.
@@ -23,6 +24,7 @@
/* This is a parser for Windows rc files. It is based on the parser
by Gunther Ebert <gunther.ebert@ixos-leipzig.de>. */
+#include "sysdep.h"
#include "bfd.h"
#include "bucomm.h"
#include "libiberty.h"
@@ -35,12 +37,12 @@ static unsigned short language;
/* The resource information during a sub statement. */
-static struct res_res_info sub_res_info;
+static rc_res_res_info sub_res_info;
/* Dialog information. This is built by the nonterminals styles and
controls. */
-static struct dialog dialog;
+static rc_dialog dialog;
/* This is used when building a style. It is modified by the
nonterminal styleexpr. */
@@ -50,56 +52,62 @@ static unsigned long style;
/* These are used when building a control. They are set before using
control_params. */
-static unsigned long base_style;
-static unsigned long default_style;
-static unsigned long class;
-static struct res_id res_text_field;
+static rc_uint_type base_style;
+static rc_uint_type default_style;
+static rc_res_id class;
+static rc_res_id res_text_field;
static unichar null_unichar;
/* This is used for COMBOBOX, LISTBOX and EDITTEXT which
do not allow resource 'text' field in control definition. */
-static const struct res_id res_null_text = { 1, {{0, &null_unichar}}};
+static const rc_res_id res_null_text = { 1, {{0, &null_unichar}}};
%}
%union
{
- struct accelerator acc;
- struct accelerator *pacc;
- struct dialog_control *dialog_control;
- struct menuitem *menuitem;
+ rc_accelerator acc;
+ rc_accelerator *pacc;
+ rc_dialog_control *dialog_control;
+ rc_menuitem *menuitem;
struct
{
- struct rcdata_item *first;
- struct rcdata_item *last;
+ rc_rcdata_item *first;
+ rc_rcdata_item *last;
} rcdata;
- struct rcdata_item *rcdata_item;
- struct stringtable_data *stringtable;
- struct fixed_versioninfo *fixver;
- struct ver_info *verinfo;
- struct ver_stringinfo *verstring;
- struct ver_varinfo *vervar;
- struct res_id id;
- struct res_res_info res_info;
+ rc_rcdata_item *rcdata_item;
+ rc_fixed_versioninfo *fixver;
+ rc_ver_info *verinfo;
+ rc_ver_stringinfo *verstring;
+ rc_ver_varinfo *vervar;
+ rc_toolbar_item *toobar_item;
+ rc_res_id id;
+ rc_res_res_info res_info;
struct
{
- unsigned short on;
- unsigned short off;
+ rc_uint_type on;
+ rc_uint_type off;
} memflags;
struct
{
- unsigned long val;
+ rc_uint_type val;
/* Nonzero if this number was explicitly specified as long. */
int dword;
} i;
- unsigned long il;
- unsigned short is;
+ rc_uint_type il;
+ rc_uint_type is;
const char *s;
struct
{
- unsigned long length;
+ rc_uint_type length;
const char *s;
} ss;
+ unichar *uni;
+ struct
+ {
+ rc_uint_type length;
+ const unichar *s;
+ } suni;
};
%token BEG END
@@ -113,6 +121,7 @@ static const struct res_id res_null_text = { 1, {{0, &null_unichar}}};
%token BEDIT HEDIT IEDIT
%token FONT
%token ICON
+%token ANICURSOR ANIICON DLGINCLUDE DLGINIT FONTDIR HTML MANIFEST PLUGPLAY VXD TOOLBAR BUTTON
%token LANGUAGE CHARACTERISTICS VERSIONK
%token MENU MENUEX MENUITEM SEPARATOR POPUP CHECKED GRAYED HELP INACTIVE
%token MENUBARBREAK MENUBREAK
@@ -125,8 +134,10 @@ static const struct res_id res_null_text = { 1, {{0, &null_unichar}}};
%token <s> BLOCK
%token MOVEABLE FIXED PURE IMPURE PRELOAD LOADONCALL DISCARDABLE
%token NOT
+%token <uni> QUOTEDUNISTRING
%token <s> QUOTEDSTRING STRING
%token <i> NUMBER
+%token <suni> SIZEDUNISTRING
%token <ss> SIZEDSTRING
%token IGNORED_TOKEN
@@ -140,13 +151,17 @@ static const struct res_id res_null_text = { 1, {{0, &null_unichar}}};
%type <verinfo> verblocks
%type <verstring> vervals
%type <vervar> vertrans
+%type <toobar_item> toolbar_data
%type <res_info> suboptions memflags_move_discard memflags_move
%type <memflags> memflag
-%type <id> id optresidc resref
+%type <id> id rcdata_id optresidc resref resid cresid
%type <il> exstyle parennumber
%type <il> numexpr posnumexpr cnumexpr optcnumexpr cposnumexpr
%type <is> acc_options acc_option menuitem_flags menuitem_flag
-%type <s> file_name resname
+%type <s> file_name
+%type <uni> res_unicode_string resname res_unicode_string_concat
+%type <ss> sizedstring
+%type <suni> sizedunistring
%type <i> sizednumexpr sizedposnumexpr
%left '|'
@@ -170,8 +185,8 @@ input:
| input menu
| input menuex
| input messagetable
- | input rcdata
| input stringtable
+ | input toolbar
| input user
| input versioninfo
| input IGNORED_TOKEN
@@ -196,15 +211,15 @@ acc_entries:
}
| acc_entries acc_entry
{
- struct accelerator *a;
+ rc_accelerator *a;
- a = (struct accelerator *) res_alloc (sizeof *a);
+ a = (rc_accelerator *) res_alloc (sizeof *a);
*a = $2;
if ($1 == NULL)
$$ = a;
else
{
- struct accelerator **pp;
+ rc_accelerator **pp;
for (pp = &$1->next; *pp != NULL; pp = &(*pp)->next)
;
@@ -246,8 +261,7 @@ acc_event:
{
$$.flags = ACC_CONTROL | ACC_VIRTKEY;
++s;
- ch = *s;
- ch = TOUPPER (ch);
+ ch = TOUPPER (s[0]);
}
$$.key = ch;
if (s[1] != '\0')
@@ -371,9 +385,9 @@ dialog:
dialog.menu.named = 1;
dialog.class.named = 1;
dialog.font = NULL;
- dialog.ex = ((struct dialog_ex *)
- res_alloc (sizeof (struct dialog_ex)));
- memset (dialog.ex, 0, sizeof (struct dialog_ex));
+ dialog.ex = ((rc_dialog_ex *)
+ res_alloc (sizeof (rc_dialog_ex)));
+ memset (dialog.ex, 0, sizeof (rc_dialog_ex));
dialog.controls = NULL;
sub_res_info = $3;
style = 0;
@@ -398,9 +412,9 @@ dialog:
dialog.menu.named = 1;
dialog.class.named = 1;
dialog.font = NULL;
- dialog.ex = ((struct dialog_ex *)
- res_alloc (sizeof (struct dialog_ex)));
- memset (dialog.ex, 0, sizeof (struct dialog_ex));
+ dialog.ex = ((rc_dialog_ex *)
+ res_alloc (sizeof (rc_dialog_ex)));
+ memset (dialog.ex, 0, sizeof (rc_dialog_ex));
dialog.ex->help = $9;
dialog.controls = NULL;
sub_res_info = $3;
@@ -428,11 +442,11 @@ exstyle:
styles:
/* empty */
- | styles CAPTION QUOTEDSTRING
+ | styles CAPTION res_unicode_string_concat
{
dialog.style |= WS_CAPTION;
style |= WS_CAPTION;
- unicode_from_ascii ((int *) NULL, &dialog.caption, $3);
+ dialog.caption = $3;
}
| styles CLASS id
{
@@ -447,16 +461,16 @@ styles:
{
dialog.exstyle = $3;
}
- | styles CLASS QUOTEDSTRING
+ | styles CLASS res_unicode_string_concat
{
- res_string_to_id (& dialog.class, $3);
+ res_unistring_to_id (& dialog.class, $3);
}
- | styles FONT numexpr ',' QUOTEDSTRING
+ | styles FONT numexpr ',' res_unicode_string_concat
{
dialog.style |= DS_SETFONT;
style |= DS_SETFONT;
dialog.pointsize = $3;
- unicode_from_ascii ((int *) NULL, &dialog.font, $5);
+ dialog.font = $5;
if (dialog.ex != NULL)
{
dialog.ex->weight = 0;
@@ -464,12 +478,12 @@ styles:
dialog.ex->charset = 1;
}
}
- | styles FONT numexpr ',' QUOTEDSTRING cnumexpr
+ | styles FONT numexpr ',' res_unicode_string_concat cnumexpr
{
dialog.style |= DS_SETFONT;
style |= DS_SETFONT;
dialog.pointsize = $3;
- unicode_from_ascii ((int *) NULL, &dialog.font, $5);
+ dialog.font = $5;
if (dialog.ex == NULL)
rcparse_warning (_("extended FONT requires DIALOGEX"));
else
@@ -479,12 +493,12 @@ styles:
dialog.ex->charset = 1;
}
}
- | styles FONT numexpr ',' QUOTEDSTRING cnumexpr cnumexpr
+ | styles FONT numexpr ',' res_unicode_string_concat cnumexpr cnumexpr
{
dialog.style |= DS_SETFONT;
style |= DS_SETFONT;
dialog.pointsize = $3;
- unicode_from_ascii ((int *) NULL, &dialog.font, $5);
+ dialog.font = $5;
if (dialog.ex == NULL)
rcparse_warning (_("extended FONT requires DIALOGEX"));
else
@@ -494,12 +508,12 @@ styles:
dialog.ex->charset = 1;
}
}
- | styles FONT numexpr ',' QUOTEDSTRING cnumexpr cnumexpr cnumexpr
+ | styles FONT numexpr ',' res_unicode_string_concat cnumexpr cnumexpr cnumexpr
{
dialog.style |= DS_SETFONT;
style |= DS_SETFONT;
dialog.pointsize = $3;
- unicode_from_ascii ((int *) NULL, &dialog.font, $5);
+ dialog.font = $5;
if (dialog.ex == NULL)
rcparse_warning (_("extended FONT requires DIALOGEX"));
else
@@ -531,7 +545,7 @@ controls:
/* empty */
| controls control
{
- struct dialog_control **pp;
+ rc_dialog_control **pp;
for (pp = &dialog.controls; *pp != NULL; pp = &(*pp)->next)
;
@@ -544,7 +558,8 @@ control:
{
default_style = BS_AUTO3STATE | WS_TABSTOP;
base_style = BS_AUTO3STATE;
- class = CTL_BUTTON;
+ class.named = 0;
+ class.u.id = CTL_BUTTON;
res_text_field = $2;
}
control_params
@@ -555,7 +570,8 @@ control:
{
default_style = BS_AUTOCHECKBOX | WS_TABSTOP;
base_style = BS_AUTOCHECKBOX;
- class = CTL_BUTTON;
+ class.named = 0;
+ class.u.id = CTL_BUTTON;
res_text_field = $2;
}
control_params
@@ -566,7 +582,8 @@ control:
{
default_style = BS_AUTORADIOBUTTON | WS_TABSTOP;
base_style = BS_AUTORADIOBUTTON;
- class = CTL_BUTTON;
+ class.named = 0;
+ class.u.id = CTL_BUTTON;
res_text_field = $2;
}
control_params
@@ -577,7 +594,8 @@ control:
{
default_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
base_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
- class = CTL_EDIT;
+ class.named = 0;
+ class.u.id = CTL_EDIT;
res_text_field = $2;
}
control_params
@@ -591,7 +609,8 @@ control:
{
default_style = BS_CHECKBOX | WS_TABSTOP;
base_style = BS_CHECKBOX | WS_TABSTOP;
- class = CTL_BUTTON;
+ class.named = 0;
+ class.u.id = CTL_BUTTON;
res_text_field = $2;
}
control_params
@@ -604,14 +623,15 @@ control:
versions of MS rc.exe their is no default style. */
default_style = CBS_SIMPLE | WS_TABSTOP;
base_style = 0;
- class = CTL_COMBOBOX;
+ class.named = 0;
+ class.u.id = CTL_COMBOBOX;
res_text_field = res_null_text;
}
control_params
{
$$ = $3;
}
- | CONTROL optresidc numexpr cnumexpr control_styleexpr cnumexpr
+ | CONTROL optresidc numexpr cresid control_styleexpr cnumexpr
cnumexpr cnumexpr cnumexpr optcnumexpr opt_control_data
{
$$ = define_control ($2, $3, $6, $7, $8, $9, $4, style, $10);
@@ -622,7 +642,7 @@ control:
$$->data = $11;
}
}
- | CONTROL optresidc numexpr cnumexpr control_styleexpr cnumexpr
+ | CONTROL optresidc numexpr cresid control_styleexpr cnumexpr
cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr opt_control_data
{
$$ = define_control ($2, $3, $6, $7, $8, $9, $4, style, $10);
@@ -631,35 +651,12 @@ control:
$$->help = $11;
$$->data = $12;
}
- | CONTROL optresidc numexpr ',' QUOTEDSTRING control_styleexpr
- cnumexpr cnumexpr cnumexpr cnumexpr optcnumexpr opt_control_data
- {
- $$ = define_control ($2, $3, $7, $8, $9, $10, 0, style, $11);
- if ($12 != NULL)
- {
- if (dialog.ex == NULL)
- rcparse_warning ("control data requires DIALOGEX");
- $$->data = $12;
- }
- $$->class.named = 1;
- unicode_from_ascii (&$$->class.u.n.length, &$$->class.u.n.name, $5);
- }
- | CONTROL optresidc numexpr ',' QUOTEDSTRING control_styleexpr
- cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr opt_control_data
- {
- $$ = define_control ($2, $3, $7, $8, $9, $10, 0, style, $11);
- if (dialog.ex == NULL)
- rcparse_warning ("help ID requires DIALOGEX");
- $$->help = $12;
- $$->data = $13;
- $$->class.named = 1;
- unicode_from_ascii (&$$->class.u.n.length, &$$->class.u.n.name, $5);
- }
| CTEXT optresidc
{
default_style = SS_CENTER | WS_GROUP;
base_style = SS_CENTER;
- class = CTL_STATIC;
+ class.named = 0;
+ class.u.id = CTL_STATIC;
res_text_field = $2;
}
control_params
@@ -670,7 +667,8 @@ control:
{
default_style = BS_DEFPUSHBUTTON | WS_TABSTOP;
base_style = BS_DEFPUSHBUTTON | WS_TABSTOP;
- class = CTL_BUTTON;
+ class.named = 0;
+ class.u.id = CTL_BUTTON;
res_text_field = $2;
}
control_params
@@ -681,7 +679,8 @@ control:
{
default_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
base_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
- class = CTL_EDIT;
+ class.named = 0;
+ class.u.id = CTL_EDIT;
res_text_field = res_null_text;
}
control_params
@@ -692,7 +691,8 @@ control:
{
default_style = BS_GROUPBOX;
base_style = BS_GROUPBOX;
- class = CTL_BUTTON;
+ class.named = 0;
+ class.u.id = CTL_BUTTON;
res_text_field = $2;
}
control_params
@@ -703,7 +703,8 @@ control:
{
default_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
base_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
- class = CTL_EDIT;
+ class.named = 0;
+ class.u.id = CTL_EDIT;
res_text_field = $2;
}
control_params
@@ -740,7 +741,8 @@ control:
{
default_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
base_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
- class = CTL_EDIT;
+ class.named = 0;
+ class.u.id = CTL_EDIT;
res_text_field = $2;
}
control_params
@@ -754,7 +756,8 @@ control:
{
default_style = LBS_NOTIFY | WS_BORDER;
base_style = LBS_NOTIFY | WS_BORDER;
- class = CTL_LISTBOX;
+ class.named = 0;
+ class.u.id = CTL_LISTBOX;
res_text_field = res_null_text;
}
control_params
@@ -765,7 +768,8 @@ control:
{
default_style = SS_LEFT | WS_GROUP;
base_style = SS_LEFT;
- class = CTL_STATIC;
+ class.named = 0;
+ class.u.id = CTL_STATIC;
res_text_field = $2;
}
control_params
@@ -776,7 +780,8 @@ control:
{
default_style = BS_PUSHBOX | WS_TABSTOP;
base_style = BS_PUSHBOX;
- class = CTL_BUTTON;
+ class.named = 0;
+ class.u.id = CTL_BUTTON;
}
control_params
{
@@ -786,7 +791,8 @@ control:
{
default_style = BS_PUSHBUTTON | WS_TABSTOP;
base_style = BS_PUSHBUTTON | WS_TABSTOP;
- class = CTL_BUTTON;
+ class.named = 0;
+ class.u.id = CTL_BUTTON;
res_text_field = $2;
}
control_params
@@ -797,7 +803,8 @@ control:
{
default_style = BS_RADIOBUTTON | WS_TABSTOP;
base_style = BS_RADIOBUTTON;
- class = CTL_BUTTON;
+ class.named = 0;
+ class.u.id = CTL_BUTTON;
res_text_field = $2;
}
control_params
@@ -808,7 +815,8 @@ control:
{
default_style = SS_RIGHT | WS_GROUP;
base_style = SS_RIGHT;
- class = CTL_STATIC;
+ class.named = 0;
+ class.u.id = CTL_STATIC;
res_text_field = $2;
}
control_params
@@ -819,7 +827,8 @@ control:
{
default_style = SBS_HORZ;
base_style = 0;
- class = CTL_SCROLLBAR;
+ class.named = 0;
+ class.u.id = CTL_SCROLLBAR;
res_text_field = res_null_text;
}
control_params
@@ -830,7 +839,8 @@ control:
{
default_style = BS_3STATE | WS_TABSTOP;
base_style = BS_3STATE;
- class = CTL_BUTTON;
+ class.named = 0;
+ class.u.id = CTL_BUTTON;
res_text_field = $2;
}
control_params
@@ -842,7 +852,10 @@ control:
{ style = WS_CHILD | WS_VISIBLE; }
styleexpr optcnumexpr
{
- $$ = define_control ($2, $3, $5, $7, $9, $11, CTL_BUTTON,
+ rc_res_id cid;
+ cid.named = 0;
+ cid.u.id = CTL_BUTTON;
+ $$ = define_control ($2, $3, $5, $7, $9, $11, cid,
style, $15);
}
;
@@ -888,23 +901,35 @@ control_params:
}
;
+cresid:
+ ',' resid
+ {
+ if ($2.named)
+ res_unistring_to_id (&$$, $2.u.n.name);
+ else
+ $$=$2;
+ }
+ ;
+
optresidc:
/* empty */
{
res_string_to_id (&$$, "");
}
- | posnumexpr ','
+ | resid ',' { $$=$1; }
+ ;
+
+resid:
+ posnumexpr
{
$$.named = 0;
$$.u.id = $1;
}
- | QUOTEDSTRING
- {
- res_string_to_id (&$$, $1);
- }
- | QUOTEDSTRING ','
+ | res_unicode_string
{
- res_string_to_id (&$$, $1);
+ $$.named = 1;
+ $$.u.n.name = $1;
+ $$.u.n.length = unichar_len ($1);
}
;
@@ -996,7 +1021,7 @@ menuitems:
$$ = $2;
else
{
- struct menuitem **pp;
+ rc_menuitem **pp;
for (pp = &$1->next; *pp != NULL; pp = &(*pp)->next)
;
@@ -1007,7 +1032,7 @@ menuitems:
;
menuitem:
- MENUITEM QUOTEDSTRING cnumexpr menuitem_flags
+ MENUITEM res_unicode_string_concat cnumexpr menuitem_flags
{
$$ = define_menuitem ($2, $3, $4, 0, 0, NULL);
}
@@ -1015,7 +1040,7 @@ menuitem:
{
$$ = define_menuitem (NULL, 0, 0, 0, 0, NULL);
}
- | POPUP QUOTEDSTRING menuitem_flags BEG menuitems END
+ | POPUP res_unicode_string_concat menuitem_flags BEG menuitems END
{
$$ = define_menuitem ($2, 0, $3, 0, 0, $5);
}
@@ -1086,7 +1111,7 @@ menuexitems:
$$ = $2;
else
{
- struct menuitem **pp;
+ rc_menuitem **pp;
for (pp = &$1->next; *pp != NULL; pp = &(*pp)->next)
;
@@ -1097,15 +1122,15 @@ menuexitems:
;
menuexitem:
- MENUITEM QUOTEDSTRING
+ MENUITEM res_unicode_string_concat
{
$$ = define_menuitem ($2, 0, 0, 0, 0, NULL);
}
- | MENUITEM QUOTEDSTRING cnumexpr
+ | MENUITEM res_unicode_string_concat cnumexpr
{
$$ = define_menuitem ($2, $3, 0, 0, 0, NULL);
}
- | MENUITEM QUOTEDSTRING cnumexpr cnumexpr optcnumexpr
+ | MENUITEM res_unicode_string_concat cnumexpr cnumexpr optcnumexpr
{
$$ = define_menuitem ($2, $3, $4, $5, 0, NULL);
}
@@ -1113,19 +1138,19 @@ menuexitem:
{
$$ = define_menuitem (NULL, 0, 0, 0, 0, NULL);
}
- | POPUP QUOTEDSTRING BEG menuexitems END
+ | POPUP res_unicode_string_concat BEG menuexitems END
{
$$ = define_menuitem ($2, 0, 0, 0, 0, $4);
}
- | POPUP QUOTEDSTRING cnumexpr BEG menuexitems END
+ | POPUP res_unicode_string_concat cnumexpr BEG menuexitems END
{
$$ = define_menuitem ($2, $3, 0, 0, 0, $5);
}
- | POPUP QUOTEDSTRING cnumexpr cnumexpr BEG menuexitems END
+ | POPUP res_unicode_string_concat cnumexpr cnumexpr BEG menuexitems END
{
$$ = define_menuitem ($2, $3, $4, 0, 0, $6);
}
- | POPUP QUOTEDSTRING cnumexpr cnumexpr cnumexpr optcnumexpr
+ | POPUP res_unicode_string_concat cnumexpr cnumexpr cnumexpr optcnumexpr
BEG menuexitems END
{
$$ = define_menuitem ($2, $3, $4, $5, $6, $8);
@@ -1144,25 +1169,6 @@ messagetable:
}
;
-/* Rcdata resources. */
-
-rcdata:
- id RCDATA suboptions BEG optrcdata_data END
- {
- define_rcdata ($1, &$3, $5.first);
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- | id RCDATA suboptions file_name
- {
- define_rcdata_file ($1, &$3, $4);
- if (yychar != YYEMPTY)
- YYERROR;
- rcparse_discard_strings ();
- }
- ;
-
/* We use a different lexing algorithm, because rcdata strings may
contain embedded null bytes, and we need to know the length to use. */
@@ -1190,34 +1196,51 @@ optrcdata_data_int:
;
rcdata_data:
- SIZEDSTRING
+ sizedstring
{
- struct rcdata_item *ri;
+ rc_rcdata_item *ri;
ri = define_rcdata_string ($1.s, $1.length);
$$.first = ri;
$$.last = ri;
}
+ | sizedunistring
+ {
+ rc_rcdata_item *ri;
+
+ ri = define_rcdata_unistring ($1.s, $1.length);
+ $$.first = ri;
+ $$.last = ri;
+ }
| sizednumexpr
{
- struct rcdata_item *ri;
+ rc_rcdata_item *ri;
ri = define_rcdata_number ($1.val, $1.dword);
$$.first = ri;
$$.last = ri;
}
- | rcdata_data ',' SIZEDSTRING
+ | rcdata_data ',' sizedstring
{
- struct rcdata_item *ri;
+ rc_rcdata_item *ri;
ri = define_rcdata_string ($3.s, $3.length);
$$.first = $1.first;
$1.last->next = ri;
$$.last = ri;
}
+ | rcdata_data ',' sizedunistring
+ {
+ rc_rcdata_item *ri;
+
+ ri = define_rcdata_unistring ($3.s, $3.length);
+ $$.first = $1.first;
+ $1.last->next = ri;
+ $$.last = ri;
+ }
| rcdata_data ',' sizednumexpr
{
- struct rcdata_item *ri;
+ rc_rcdata_item *ri;
ri = define_rcdata_number ($3.val, $3.dword);
$$.first = $1.first;
@@ -1236,14 +1259,14 @@ stringtable:
string_data:
/* empty */
- | string_data numexpr QUOTEDSTRING
+ | string_data numexpr res_unicode_string_concat
{
define_stringtable (&sub_res_info, $2, $3);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
- | string_data numexpr ',' QUOTEDSTRING
+ | string_data numexpr ',' res_unicode_string_concat
{
define_stringtable (&sub_res_info, $2, $4);
if (yychar != YYEMPTY)
@@ -1252,18 +1275,70 @@ string_data:
}
;
+rcdata_id:
+ id
+ {
+ $$=$1;
+ }
+ | HTML
+ {
+ $$.named = 0;
+ $$.u.id = 23;
+ }
+ | RCDATA
+ {
+ $$.named = 0;
+ $$.u.id = RT_RCDATA;
+ }
+ | MANIFEST
+ {
+ $$.named = 0;
+ $$.u.id = RT_MANIFEST;
+ }
+ | PLUGPLAY
+ {
+ $$.named = 0;
+ $$.u.id = RT_PLUGPLAY;
+ }
+ | VXD
+ {
+ $$.named = 0;
+ $$.u.id = RT_VXD;
+ }
+ | DLGINCLUDE
+ {
+ $$.named = 0;
+ $$.u.id = RT_DLGINCLUDE;
+ }
+ | DLGINIT
+ {
+ $$.named = 0;
+ $$.u.id = RT_DLGINIT;
+ }
+ | ANICURSOR
+ {
+ $$.named = 0;
+ $$.u.id = RT_ANICURSOR;
+ }
+ | ANIICON
+ {
+ $$.named = 0;
+ $$.u.id = RT_ANIICON;
+ }
+ ;
+
/* User defined resources. We accept general suboptions in the
file_name case to keep the parser happy. */
user:
- id id suboptions BEG optrcdata_data END
+ id rcdata_id suboptions BEG optrcdata_data END
{
define_user_data ($1, $2, &$3, $5.first);
if (yychar != YYEMPTY)
YYERROR;
rcparse_discard_strings ();
}
- | id id suboptions file_name
+ | id rcdata_id suboptions file_name
{
define_user_file ($1, $2, &$3, $4);
if (yychar != YYEMPTY)
@@ -1272,6 +1347,55 @@ user:
}
;
+toolbar:
+ id TOOLBAR suboptions numexpr cnumexpr BEG toolbar_data END
+ {
+ define_toolbar ($1, &$3, $4, $5, $7);
+ }
+ ;
+
+toolbar_data: /* empty */ { $$= NULL; }
+ | toolbar_data BUTTON id
+ {
+ rc_toolbar_item *c,*n;
+ c = $1;
+ n= (rc_toolbar_item *)
+ res_alloc (sizeof (rc_toolbar_item));
+ if (c != NULL)
+ while (c->next != NULL)
+ c = c->next;
+ n->prev = c;
+ n->next = NULL;
+ if (c != NULL)
+ c->next = n;
+ n->id = $3;
+ if ($1 == NULL)
+ $$ = n;
+ else
+ $$ = $1;
+ }
+ | toolbar_data SEPARATOR
+ {
+ rc_toolbar_item *c,*n;
+ c = $1;
+ n= (rc_toolbar_item *)
+ res_alloc (sizeof (rc_toolbar_item));
+ if (c != NULL)
+ while (c->next != NULL)
+ c = c->next;
+ n->prev = c;
+ n->next = NULL;
+ if (c != NULL)
+ c->next = n;
+ n->id.named = 0;
+ n->id.u.id = 0;
+ if ($1 == NULL)
+ $$ = n;
+ else
+ $$ = $1;
+ }
+ ;
+
/* Versioninfo resources. */
versioninfo:
@@ -1287,9 +1411,9 @@ versioninfo:
fixedverinfo:
/* empty */
{
- $$ = ((struct fixed_versioninfo *)
- res_alloc (sizeof (struct fixed_versioninfo)));
- memset ($$, 0, sizeof (struct fixed_versioninfo));
+ $$ = ((rc_fixed_versioninfo *)
+ res_alloc (sizeof (rc_fixed_versioninfo)));
+ memset ($$, 0, sizeof (rc_fixed_versioninfo));
}
| fixedverinfo FILEVERSION numexpr cnumexpr cnumexpr cnumexpr
{
@@ -1345,7 +1469,7 @@ verblocks:
{
$$ = append_ver_stringfileinfo ($1, $4, $6);
}
- | verblocks BLOCKVARFILEINFO BEG VALUE QUOTEDSTRING vertrans END
+ | verblocks BLOCKVARFILEINFO BEG VALUE res_unicode_string_concat vertrans END
{
$$ = append_ver_varfileinfo ($1, $5, $6);
}
@@ -1356,7 +1480,7 @@ vervals:
{
$$ = NULL;
}
- | vervals VALUE QUOTEDSTRING ',' QUOTEDSTRING
+ | vervals VALUE res_unicode_string_concat ',' res_unicode_string_concat
{
$$ = append_verval ($1, $3, $5);
}
@@ -1381,33 +1505,24 @@ id:
$$.named = 0;
$$.u.id = $1;
}
- | STRING
+ | resname
{
- char *copy, *s;
-
- /* It seems that resource ID's are forced to upper case. */
- copy = xstrdup ($1);
- for (s = copy; *s != '\0'; s++)
- *s = TOUPPER (*s);
- res_string_to_id (&$$, copy);
- free (copy);
+ res_unistring_to_id (&$$, $1);
}
;
/* A resource reference. */
resname:
- QUOTEDSTRING
- {
- $$ = $1;
- }
- | QUOTEDSTRING ','
+ res_unicode_string
{
$$ = $1;
}
- | STRING ','
+ | STRING
{
- $$ = $1;
+ unichar *h = NULL;
+ unicode_from_ascii ((rc_uint_type *) NULL, &h, $1);
+ $$ = h;
}
;
@@ -1420,14 +1535,11 @@ resref:
}
| resname
{
- char *copy, *s;
-
- /* It seems that resource ID's are forced to upper case. */
- copy = xstrdup ($1);
- for (s = copy; *s != '\0'; s++)
- *s = TOUPPER (*s);
- res_string_to_id (&$$, copy);
- free (copy);
+ res_unistring_to_id (&$$, $1);
+ }
+ | resname ','
+ {
+ res_unistring_to_id (&$$, $1);
}
;
@@ -1437,7 +1549,7 @@ resref:
suboptions:
/* empty */
{
- memset (&$$, 0, sizeof (struct res_res_info));
+ memset (&$$, 0, sizeof (rc_res_res_info));
$$.language = language;
/* FIXME: Is this the right default? */
$$.memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE;
@@ -1470,7 +1582,7 @@ suboptions:
memflags_move_discard:
/* empty */
{
- memset (&$$, 0, sizeof (struct res_res_info));
+ memset (&$$, 0, sizeof (rc_res_res_info));
$$.language = language;
$$.memflags = MEMFLAG_MOVEABLE | MEMFLAG_DISCARDABLE;
}
@@ -1487,7 +1599,7 @@ memflags_move_discard:
memflags_move:
/* empty */
{
- memset (&$$, 0, sizeof (struct res_res_info));
+ memset (&$$, 0, sizeof (rc_res_res_info));
$$.language = language;
$$.memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE;
}
@@ -1553,6 +1665,72 @@ file_name:
}
;
+/* Concat string */
+res_unicode_string_concat:
+ res_unicode_string
+ {
+ $$ = $1;
+ }
+ |
+ res_unicode_string_concat res_unicode_string
+ {
+ rc_uint_type l1 = unichar_len ($1);
+ rc_uint_type l2 = unichar_len ($2);
+ unichar *h = (unichar *) res_alloc ((l1 + l2 + 1) * sizeof (unichar));
+ if (l1 != 0)
+ memcpy (h, $1, l1 * sizeof (unichar));
+ if (l2 != 0)
+ memcpy (h + l1, $2, l2 * sizeof (unichar));
+ h[l1 + l2] = 0;
+ $$ = h;
+ }
+ ;
+
+res_unicode_string:
+ QUOTEDUNISTRING
+ {
+ $$ = unichar_dup ($1);
+ }
+ | QUOTEDSTRING
+ {
+ unichar *h = NULL;
+ unicode_from_ascii ((rc_uint_type *) NULL, &h, $1);
+ $$ = h;
+ }
+ ;
+
+sizedstring:
+ SIZEDSTRING
+ {
+ $$ = $1;
+ }
+ | sizedstring SIZEDSTRING
+ {
+ rc_uint_type l = $1.length + $2.length;
+ char *h = (char *) res_alloc (l);
+ memcpy (h, $1.s, $1.length);
+ memcpy (h + $1.length, $2.s, $2.length);
+ $$.s = h;
+ $$.length = l;
+ }
+ ;
+
+sizedunistring:
+ SIZEDUNISTRING
+ {
+ $$ = $1;
+ }
+ | sizedunistring SIZEDUNISTRING
+ {
+ rc_uint_type l = $1.length + $2.length;
+ unichar *h = (unichar *) res_alloc (l * sizeof (unichar));
+ memcpy (h, $1.s, $1.length * sizeof (unichar));
+ memcpy (h + $1.length, $2.s, $2.length * sizeof (unichar));
+ $$.s = h;
+ $$.length = l;
+ }
+ ;
+
/* A style expression. This changes the static variable STYLE. We do
it this way because rc appears to permit a style to be set to
something like
diff --git a/binutils/rdcoff.c b/binutils/rdcoff.c
index 1eda3af195d1..70bf8425a1ba 100644
--- a/binutils/rdcoff.c
+++ b/binutils/rdcoff.c
@@ -1,5 +1,6 @@
/* stabs.c -- Parse COFF debugging information
- Copyright 1996, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+ Copyright 1996, 1999, 2000, 2002, 2003, 2007
+ Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>.
This file is part of GNU Binutils.
@@ -21,10 +22,11 @@
/* This file contains code which parses COFF debugging information. */
+#include "sysdep.h"
#include "bfd.h"
#include "coff/internal.h"
-#include "bucomm.h"
#include "libiberty.h"
+#include "bucomm.h"
#include "debug.h"
#include "budbg.h"
diff --git a/binutils/rddbg.c b/binutils/rddbg.c
index e977d8b5ef14..b9953d43f375 100644
--- a/binutils/rddbg.c
+++ b/binutils/rddbg.c
@@ -1,5 +1,5 @@
/* rddbg.c -- Read debugging information into a generic form.
- Copyright 1995, 1996, 1997, 2000, 2002, 2003, 2005
+ Copyright 1995, 1996, 1997, 2000, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>.
@@ -24,9 +24,10 @@
file knows how to dig the debugging information out of an object
file. */
+#include "sysdep.h"
#include "bfd.h"
-#include "bucomm.h"
#include "libiberty.h"
+#include "bucomm.h"
#include "debug.h"
#include "budbg.h"
diff --git a/binutils/readelf.c b/binutils/readelf.c
index d8bd54f440f3..ab41e28828b1 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -1,5 +1,5 @@
/* readelf.c -- display contents of an ELF format file
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Originally developed by Eric Youngdale <eric@andante.jic.com>
@@ -41,12 +41,30 @@
ELF file than is provided by objdump. In particular it can display DWARF
debugging information which (at the moment) objdump cannot. */
+#include "sysdep.h"
#include <assert.h>
-#include <sys/types.h>
#include <sys/stat.h>
-#include <stdio.h>
#include <time.h>
+/* for PATH_MAX */
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+#ifndef PATH_MAX
+/* for MAXPATHLEN */
+# ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+# endif
+# ifndef PATH_MAX
+# ifdef MAXPATHLEN
+# define PATH_MAX MAXPATHLEN
+# else
+# define PATH_MAX 1024
+# endif
+# endif
+#endif
+
#if __GNUC__ >= 2
/* Define BFD64 here, even if our default architecture is 32 bit ELF
as this will allow us to read in and parse 64bit and 32bit ELF files.
@@ -55,12 +73,32 @@
#define BFD64
#endif
+#include "bfd.h"
+#include "bucomm.h"
#include "dwarf.h"
#include "elf/common.h"
#include "elf/external.h"
#include "elf/internal.h"
+
+/* Included here, before RELOC_MACROS_GEN_FUNC is defined, so that
+ we can obtain the H8 reloc numbers. We need these for the
+ get_reloc_size() function. We include h8.h again after defining
+ RELOC_MACROS_GEN_FUNC so that we get the naming function as well. */
+
+#include "elf/h8.h"
+#undef _ELF_H8_H
+
+/* Undo the effects of #including reloc-macros.h. */
+
+#undef START_RELOC_NUMBERS
+#undef RELOC_NUMBER
+#undef FAKE_RELOC
+#undef EMPTY_RELOC
+#undef END_RELOC_NUMBERS
+#undef _RELOC_MACROS_H
+
/* The following headers use the elf/reloc-macros.h file to
automatically generate relocation recognition functions
such as elf_mips_reloc_type() */
@@ -73,6 +111,7 @@
#include "elf/avr.h"
#include "elf/bfin.h"
#include "elf/cris.h"
+#include "elf/crx.h"
#include "elf/d10v.h"
#include "elf/d30v.h"
#include "elf/dlx.h"
@@ -86,11 +125,13 @@
#include "elf/i960.h"
#include "elf/ia64.h"
#include "elf/ip2k.h"
+#include "elf/iq2000.h"
#include "elf/m32c.h"
#include "elf/m32r.h"
#include "elf/m68k.h"
#include "elf/m68hc11.h"
#include "elf/mcore.h"
+#include "elf/mep.h"
#include "elf/mips.h"
#include "elf/mmix.h"
#include "elf/mn10200.h"
@@ -102,19 +143,18 @@
#include "elf/ppc.h"
#include "elf/ppc64.h"
#include "elf/s390.h"
+#include "elf/score.h"
#include "elf/sh.h"
#include "elf/sparc.h"
+#include "elf/spu.h"
#include "elf/v850.h"
#include "elf/vax.h"
#include "elf/x86-64.h"
#include "elf/xstormy16.h"
-#include "elf/crx.h"
-#include "elf/iq2000.h"
#include "elf/xtensa.h"
#include "aout/ar.h"
-#include "bucomm.h"
#include "getopt.h"
#include "libiberty.h"
@@ -133,8 +173,9 @@ static Elf_Internal_Sym *dynamic_symbols;
static Elf_Internal_Syminfo *dynamic_syminfo;
static unsigned long dynamic_syminfo_offset;
static unsigned int dynamic_syminfo_nent;
-static char program_interpreter[64];
+static char program_interpreter[PATH_MAX];
static bfd_vma dynamic_info[DT_JMPREL + 1];
+static bfd_vma dynamic_info_DT_GNU_HASH;
static bfd_vma version_info[16];
static Elf_Internal_Ehdr elf_header;
static Elf_Internal_Shdr *section_headers;
@@ -222,9 +263,11 @@ static void (*byte_put) (unsigned char *, bfd_vma, int);
#define UNKNOWN -1
-#define SECTION_NAME(X) ((X) == NULL ? "<none>" : \
- ((X)->sh_name >= string_table_length \
- ? "<corrupt>" : string_table + (X)->sh_name))
+#define SECTION_NAME(X) \
+ ((X) == NULL ? "<none>" \
+ : string_table == NULL ? "<no-name>" \
+ : ((X)->sh_name >= string_table_length ? "<corrupt>" \
+ : string_table + (X)->sh_name))
/* Given st_shndx I, map to section_headers index. */
#define SECTION_HEADER_INDEX(I) \
@@ -260,6 +303,7 @@ static void (*byte_put) (unsigned char *, bfd_vma, int);
/* This is just a bit of syntatic sugar. */
#define streq(a,b) (strcmp ((a), (b)) == 0)
#define strneq(a,b,n) (strncmp ((a), (b), (n)) == 0)
+#define const_strneq(a,b) (strncmp ((a), (b), sizeof (b) - 1) == 0)
static void *
get_data (void *var, FILE *file, long offset, size_t size, size_t nmemb,
@@ -550,88 +594,91 @@ guess_is_rela (unsigned long e_machine)
switch (e_machine)
{
/* Targets that use REL relocations. */
- case EM_ARM:
case EM_386:
case EM_486:
case EM_960:
- case EM_DLX:
- case EM_OPENRISC:
- case EM_OR32:
- case EM_CYGNUS_M32R:
+ case EM_ARM:
case EM_D10V:
case EM_CYGNUS_D10V:
+ case EM_DLX:
case EM_MIPS:
case EM_MIPS_RS3_LE:
+ case EM_CYGNUS_M32R:
+ case EM_OPENRISC:
+ case EM_OR32:
+ case EM_SCORE:
return FALSE;
/* Targets that use RELA relocations. */
case EM_68K:
- case EM_H8_300:
- case EM_H8_300H:
- case EM_H8S:
- case EM_SPARC32PLUS:
- case EM_SPARCV9:
- case EM_SPARC:
- case EM_PPC:
- case EM_PPC64:
- case EM_V850:
- case EM_CYGNUS_V850:
+ case EM_860:
+ case EM_ALPHA:
+ case EM_ALTERA_NIOS2:
+ case EM_AVR:
+ case EM_AVR_OLD:
+ case EM_BLACKFIN:
+ case EM_CRIS:
+ case EM_CRX:
case EM_D30V:
case EM_CYGNUS_D30V:
- case EM_MN10200:
- case EM_CYGNUS_MN10200:
- case EM_MN10300:
- case EM_CYGNUS_MN10300:
case EM_FR30:
case EM_CYGNUS_FR30:
case EM_CYGNUS_FRV:
- case EM_SH:
- case EM_ALPHA:
- case EM_MCORE:
+ case EM_H8S:
+ case EM_H8_300:
+ case EM_H8_300H:
case EM_IA_64:
- case EM_AVR:
- case EM_AVR_OLD:
- case EM_CRIS:
- case EM_860:
- case EM_X86_64:
- case EM_S390:
- case EM_S390_OLD:
- case EM_MMIX:
- case EM_MSP430:
- case EM_MSP430_OLD:
- case EM_XSTORMY16:
- case EM_CRX:
- case EM_VAX:
case EM_IP2K:
case EM_IP2K_OLD:
case EM_IQ2000:
- case EM_XTENSA:
- case EM_XTENSA_OLD:
- case EM_M32R:
case EM_M32C:
+ case EM_M32R:
+ case EM_MCORE:
+ case EM_CYGNUS_MEP:
+ case EM_MMIX:
+ case EM_MN10200:
+ case EM_CYGNUS_MN10200:
+ case EM_MN10300:
+ case EM_CYGNUS_MN10300:
+ case EM_MSP430:
+ case EM_MSP430_OLD:
case EM_MT:
- case EM_BLACKFIN:
case EM_NIOS32:
- case EM_ALTERA_NIOS2:
+ case EM_PPC64:
+ case EM_PPC:
+ case EM_S390:
+ case EM_S390_OLD:
+ case EM_SH:
+ case EM_SPARC:
+ case EM_SPARC32PLUS:
+ case EM_SPARCV9:
+ case EM_SPU:
+ case EM_V850:
+ case EM_CYGNUS_V850:
+ case EM_VAX:
+ case EM_X86_64:
+ case EM_XSTORMY16:
+ case EM_XTENSA:
+ case EM_XTENSA_OLD:
return TRUE;
+ case EM_68HC05:
+ case EM_68HC08:
+ case EM_68HC11:
+ case EM_68HC16:
+ case EM_FX66:
+ case EM_ME16:
case EM_MMA:
- case EM_PCP:
case EM_NCPU:
case EM_NDR1:
- case EM_STARCORE:
- case EM_ME16:
+ case EM_PCP:
case EM_ST100:
- case EM_TINYJ:
- case EM_FX66:
- case EM_ST9PLUS:
+ case EM_ST19:
case EM_ST7:
- case EM_68HC16:
- case EM_68HC11:
- case EM_68HC08:
- case EM_68HC05:
+ case EM_ST9PLUS:
+ case EM_STARCORE:
case EM_SVX:
- case EM_ST19:
+ case EM_TINYJ:
default:
warn (_("Don't know about relocations on this machine architecture\n"));
return FALSE;
@@ -664,7 +711,7 @@ slurp_rela_relocs (FILE *file,
if (relas == NULL)
{
free (erelas);
- error (_("out of memory parsing relocs"));
+ error (_("out of memory parsing relocs\n"));
return 0;
}
@@ -692,7 +739,7 @@ slurp_rela_relocs (FILE *file,
if (relas == NULL)
{
free (erelas);
- error (_("out of memory parsing relocs"));
+ error (_("out of memory parsing relocs\n"));
return 0;
}
@@ -736,7 +783,7 @@ slurp_rel_relocs (FILE *file,
if (rels == NULL)
{
free (erels);
- error (_("out of memory parsing relocs"));
+ error (_("out of memory parsing relocs\n"));
return 0;
}
@@ -764,7 +811,7 @@ slurp_rel_relocs (FILE *file,
if (rels == NULL)
{
free (erels);
- error (_("out of memory parsing relocs"));
+ error (_("out of memory parsing relocs\n"));
return 0;
}
@@ -966,6 +1013,10 @@ dump_relocations (FILE *file,
rtype = elf_sparc_reloc_type (type);
break;
+ case EM_SPU:
+ rtype = elf_spu_reloc_type (type);
+ break;
+
case EM_V850:
case EM_CYGNUS_V850:
rtype = v850_reloc_type (type);
@@ -1095,6 +1146,10 @@ dump_relocations (FILE *file,
rtype = elf_s390_reloc_type (type);
break;
+ case EM_SCORE:
+ rtype = elf_score_reloc_type (type);
+ break;
+
case EM_XSTORMY16:
rtype = elf_xstormy16_reloc_type (type);
break;
@@ -1133,6 +1188,9 @@ dump_relocations (FILE *file,
rtype = elf_bfin_reloc_type (type);
break;
+ case EM_CYGNUS_MEP:
+ rtype = elf_mep_reloc_type (type);
+ break;
}
if (rtype == NULL)
@@ -1145,6 +1203,7 @@ dump_relocations (FILE *file,
printf (do_wide ? "%-22.22s" : "%-17.17s", rtype);
if (elf_header.e_machine == EM_ALPHA
+ && rtype != NULL
&& streq (rtype, "R_ALPHA_LITUSE")
&& is_rela)
{
@@ -1203,6 +1262,12 @@ dump_relocations (FILE *file,
sec_name = "ABS";
else if (psym->st_shndx == SHN_COMMON)
sec_name = "COMMON";
+ else if (elf_header.e_machine == EM_MIPS
+ && psym->st_shndx == SHN_MIPS_SCOMMON)
+ sec_name = "SCOMMON";
+ else if (elf_header.e_machine == EM_MIPS
+ && psym->st_shndx == SHN_MIPS_SUNDEFINED)
+ sec_name = "SUNDEF";
else if (elf_header.e_machine == EM_X86_64
&& psym->st_shndx == SHN_X86_64_LCOMMON)
sec_name = "LARGE_COMMON";
@@ -1237,7 +1302,9 @@ dump_relocations (FILE *file,
print_vma (rels[i].r_addend, LONG_HEX);
}
- if (elf_header.e_machine == EM_SPARCV9 && streq (rtype, "R_SPARC_OLO10"))
+ if (elf_header.e_machine == EM_SPARCV9
+ && rtype != NULL
+ && streq (rtype, "R_SPARC_OLO10"))
printf (" + %lx", (unsigned long) ELF64_R_TYPE_DATA (info));
putchar ('\n');
@@ -1420,6 +1487,23 @@ get_alpha_dynamic_type (unsigned long type)
}
static const char *
+get_score_dynamic_type (unsigned long type)
+{
+ switch (type)
+ {
+ case DT_SCORE_BASE_ADDRESS: return "SCORE_BASE_ADDRESS";
+ case DT_SCORE_LOCAL_GOTNO: return "SCORE_LOCAL_GOTNO";
+ case DT_SCORE_SYMTABNO: return "SCORE_SYMTABNO";
+ case DT_SCORE_GOTSYM: return "SCORE_GOTSYM";
+ case DT_SCORE_UNREFEXTNO: return "SCORE_UNREFEXTNO";
+ case DT_SCORE_HIPAGENO: return "SCORE_HIPAGENO";
+ default:
+ return NULL;
+ }
+}
+
+
+static const char *
get_dynamic_type (unsigned long type)
{
static char buff[64];
@@ -1499,6 +1583,7 @@ get_dynamic_type (unsigned long type)
case DT_GNU_CONFLICTSZ: return "GNU_CONFLICTSZ";
case DT_GNU_LIBLIST: return "GNU_LIBLIST";
case DT_GNU_LIBLISTSZ: return "GNU_LIBLISTSZ";
+ case DT_GNU_HASH: return "GNU_HASH";
default:
if ((type >= DT_LOPROC) && (type <= DT_HIPROC))
@@ -1526,6 +1611,9 @@ get_dynamic_type (unsigned long type)
case EM_ALPHA:
result = get_alpha_dynamic_type (type);
break;
+ case EM_SCORE:
+ result = get_score_dynamic_type (type);
+ break;
default:
result = NULL;
break;
@@ -1599,6 +1687,7 @@ get_machine_name (unsigned e_machine)
case EM_NONE: return _("None");
case EM_M32: return "WE32100";
case EM_SPARC: return "Sparc";
+ case EM_SPU: return "SPU";
case EM_386: return "Intel 80386";
case EM_68K: return "MC68000";
case EM_88K: return "MC88000";
@@ -1680,6 +1769,7 @@ get_machine_name (unsigned e_machine)
case EM_X86_64: return "Advanced Micro Devices X86-64";
case EM_S390_OLD:
case EM_S390: return "IBM S/390";
+ case EM_SCORE: return "SUNPLUS S+Core";
case EM_XSTORMY16: return "Sanyo Xstormy16 CPU core";
case EM_OPENRISC:
case EM_OR32: return "OpenRISC";
@@ -1696,8 +1786,9 @@ get_machine_name (unsigned e_machine)
case EM_NIOS32: return "Altera Nios";
case EM_ALTERA_NIOS2: return "Altera Nios II";
case EM_XC16X: return "Infineon Technologies xc16x";
+ case EM_CYGNUS_MEP: return "Toshiba MeP Media Engine";
default:
- snprintf (buff, sizeof (buff), _("<unknown>: %x"), e_machine);
+ snprintf (buff, sizeof (buff), _("<unknown>: 0x%x"), e_machine);
return buff;
}
}
@@ -1946,33 +2037,35 @@ get_machine_flags (unsigned e_flags, unsigned e_machine)
break;
case EM_68K:
- if (e_flags & EF_M68K_CPU32)
- strcat (buf, ", cpu32");
- if (e_flags & EF_M68K_M68000)
+ if ((e_flags & EF_M68K_ARCH_MASK) == EF_M68K_M68000)
strcat (buf, ", m68000");
- if (e_flags & EF_M68K_ISA_MASK)
+ else if ((e_flags & EF_M68K_ARCH_MASK) == EF_M68K_CPU32)
+ strcat (buf, ", cpu32");
+ else if ((e_flags & EF_M68K_ARCH_MASK) == EF_M68K_FIDO)
+ strcat (buf, ", fido_a");
+ else
{
char const *isa = _("unknown");
char const *mac = _("unknown mac");
char const *additional = NULL;
-
- switch (e_flags & EF_M68K_ISA_MASK)
+
+ switch (e_flags & EF_M68K_CF_ISA_MASK)
{
- case EF_M68K_ISA_A_NODIV:
+ case EF_M68K_CF_ISA_A_NODIV:
isa = "A";
additional = ", nodiv";
break;
- case EF_M68K_ISA_A:
+ case EF_M68K_CF_ISA_A:
isa = "A";
break;
- case EF_M68K_ISA_A_PLUS:
+ case EF_M68K_CF_ISA_A_PLUS:
isa = "A+";
break;
- case EF_M68K_ISA_B_NOUSP:
+ case EF_M68K_CF_ISA_B_NOUSP:
isa = "B";
additional = ", nousp";
break;
- case EF_M68K_ISA_B:
+ case EF_M68K_CF_ISA_B:
isa = "B";
break;
}
@@ -1980,17 +2073,17 @@ get_machine_flags (unsigned e_flags, unsigned e_machine)
strcat (buf, isa);
if (additional)
strcat (buf, additional);
- if (e_flags & EF_M68K_FLOAT)
+ if (e_flags & EF_M68K_CF_FLOAT)
strcat (buf, ", float");
- switch (e_flags & EF_M68K_MAC_MASK)
+ switch (e_flags & EF_M68K_CF_MAC_MASK)
{
case 0:
mac = NULL;
break;
- case EF_M68K_MAC:
+ case EF_M68K_CF_MAC:
mac = "mac";
break;
- case EF_M68K_EMAC:
+ case EF_M68K_CF_EMAC:
mac = "emac";
break;
}
@@ -2036,7 +2129,6 @@ get_machine_flags (unsigned e_flags, unsigned e_machine)
case EM_CYGNUS_M32R:
if ((e_flags & EF_M32R_ARCH) == E_M32R_ARCH)
strcat (buf, ", m32r");
-
break;
case EM_MIPS:
@@ -2569,6 +2661,7 @@ get_section_type_name (unsigned int sh_type)
case SHT_INIT_ARRAY: return "INIT_ARRAY";
case SHT_FINI_ARRAY: return "FINI_ARRAY";
case SHT_PREINIT_ARRAY: return "PREINIT_ARRAY";
+ case SHT_GNU_HASH: return "GNU_HASH";
case SHT_GROUP: return "GROUP";
case SHT_SYMTAB_SHNDX: return "SYMTAB SECTION INDICIES";
case SHT_GNU_verdef: return "VERDEF";
@@ -2661,11 +2754,11 @@ static struct option options[] =
};
static void
-usage (void)
+usage (FILE *stream)
{
- fprintf (stdout, _("Usage: readelf <option(s)> elf-file(s)\n"));
- fprintf (stdout, _(" Display information about the contents of ELF format files\n"));
- fprintf (stdout, _(" Options are:\n\
+ fprintf (stream, _("Usage: readelf <option(s)> elf-file(s)\n"));
+ fprintf (stream, _(" Display information about the contents of ELF format files\n"));
+ fprintf (stream, _(" Options are:\n\
-a --all Equivalent to: -h -l -S -s -r -d -V -A -I\n\
-h --file-header Display the ELF file header\n\
-l --program-headers Display the program headers\n\
@@ -2689,19 +2782,21 @@ usage (void)
--debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n\
Display the contents of DWARF2 debug sections\n"));
#ifdef SUPPORT_DISASSEMBLY
- fprintf (stdout, _("\
+ fprintf (stream, _("\
-i --instruction-dump=<number>\n\
Disassemble the contents of section <number>\n"));
#endif
- fprintf (stdout, _("\
+ fprintf (stream, _("\
-I --histogram Display histogram of bucket list lengths\n\
-W --wide Allow output width to exceed 80 characters\n\
@<file> Read options from <file>\n\
-H --help Display this information\n\
-v --version Display the version number of readelf\n"));
- fprintf (stdout, _("Report bugs to %s\n"), REPORT_BUGS_TO);
+
+ if (REPORT_BUGS_TO[0] && stream == stdout)
+ fprintf (stdout, _("Report bugs to %s\n"), REPORT_BUGS_TO);
- exit (0);
+ exit (stream == stdout ? 0 : 1);
}
/* Record the fact that the user wants the contents of section number
@@ -2719,7 +2814,7 @@ request_dump (unsigned int section, int type)
new_dump_sects = calloc (section + 1, 1);
if (new_dump_sects == NULL)
- error (_("Out of memory allocating dump request table."));
+ error (_("Out of memory allocating dump request table.\n"));
else
{
/* Copy current flag settings. */
@@ -2747,11 +2842,11 @@ request_dump_byname (const char *section, int type)
new_request = malloc (sizeof (struct dump_list_entry));
if (!new_request)
- error (_("Out of memory allocating dump request table."));
+ error (_("Out of memory allocating dump request table.\n"));
new_request->name = strdup (section);
if (!new_request->name)
- error (_("Out of memory allocating dump request table."));
+ error (_("Out of memory allocating dump request table.\n"));
new_request->type = type;
@@ -2765,7 +2860,7 @@ parse_args (int argc, char **argv)
int c;
if (argc < 2)
- usage ();
+ usage (stderr);
while ((c = getopt_long
(argc, argv, "ersuahnldSDAINtgw::x:i:vVWH", options, NULL)) != EOF)
@@ -2779,7 +2874,7 @@ parse_args (int argc, char **argv)
/* Long options. */
break;
case 'H':
- usage ();
+ usage (stdout);
break;
case 'a':
@@ -3020,7 +3115,7 @@ parse_args (int argc, char **argv)
error (_("Invalid option '-%c'\n"), c);
/* Drop through. */
case '?':
- usage ();
+ usage (stderr);
}
}
@@ -3028,11 +3123,11 @@ parse_args (int argc, char **argv)
&& !do_segments && !do_header && !do_dump && !do_version
&& !do_histogram && !do_debugging && !do_arch && !do_notes
&& !do_section_groups)
- usage ();
+ usage (stderr);
else if (argc < 3)
{
warn (_("Nothing to do.\n"));
- usage ();
+ usage (stderr);
}
}
@@ -3142,6 +3237,11 @@ process_file_header (void)
(long) elf_header.e_shstrndx);
if (section_headers != NULL && elf_header.e_shstrndx == SHN_XINDEX)
printf (" (%ld)", (long) section_headers[0].sh_link);
+ else if (elf_header.e_shstrndx != SHN_UNDEF
+ && (elf_header.e_shstrndx >= elf_header.e_shnum
+ || (elf_header.e_shstrndx >= SHN_LORESERVE
+ && elf_header.e_shstrndx <= SHN_HIRESERVE)))
+ printf (" <corrupt: out of range>");
putc ('\n', stdout);
}
@@ -3151,6 +3251,11 @@ process_file_header (void)
elf_header.e_shnum = section_headers[0].sh_size;
if (elf_header.e_shstrndx == SHN_XINDEX)
elf_header.e_shstrndx = section_headers[0].sh_link;
+ else if (elf_header.e_shstrndx != SHN_UNDEF
+ && (elf_header.e_shstrndx >= elf_header.e_shnum
+ || (elf_header.e_shstrndx >= SHN_LORESERVE
+ && elf_header.e_shstrndx <= SHN_HIRESERVE)))
+ elf_header.e_shstrndx = SHN_UNDEF;
free (section_headers);
section_headers = NULL;
}
@@ -3407,18 +3512,21 @@ process_program_headers (FILE *file)
sec = find_section (".dynamic");
if (sec == NULL || sec->sh_size == 0)
{
- error (_("no .dynamic section in the dynamic segment"));
+ error (_("no .dynamic section in the dynamic segment\n"));
break;
}
+ if (sec->sh_type == SHT_NOBITS)
+ break;
+
dynamic_addr = sec->sh_offset;
dynamic_size = sec->sh_size;
if (dynamic_addr < segment->p_offset
|| dynamic_addr > segment->p_offset + segment->p_filesz)
- warn (_("the .dynamic section is not contained within the dynamic segment"));
+ warn (_("the .dynamic section is not contained within the dynamic segment\n"));
else if (dynamic_addr > segment->p_offset)
- warn (_("the .dynamic section is not the first section in the dynamic segment."));
+ warn (_("the .dynamic section is not the first section in the dynamic segment.\n"));
}
else
{
@@ -3435,8 +3543,15 @@ process_program_headers (FILE *file)
error (_("Unable to find program interpreter name\n"));
else
{
+ char fmt [32];
+ int ret = snprintf (fmt, sizeof (fmt), "%%%ds", PATH_MAX);
+
+ if (ret >= (int) sizeof (fmt) || ret < 0)
+ error (_("Internal error: failed to create format string to display program interpreter\n"));
+
program_interpreter[0] = 0;
- fscanf (file, "%63s", program_interpreter);
+ if (fscanf (file, fmt, program_interpreter) <= 0)
+ error (_("Unable to read program interpreter name\n"));
if (do_segments)
printf (_("\n [Requesting program interpreter: %s]"),
@@ -3920,7 +4035,8 @@ process_section_headers (FILE *file)
return 0;
/* Read in the string table, so that we have names to display. */
- if (SECTION_HEADER_INDEX (elf_header.e_shstrndx) < elf_header.e_shnum)
+ if (elf_header.e_shstrndx != SHN_UNDEF
+ && SECTION_HEADER_INDEX (elf_header.e_shstrndx) < elf_header.e_shnum)
{
section = SECTION_HEADER (elf_header.e_shstrndx);
@@ -3958,6 +4074,23 @@ process_section_headers (FILE *file)
&& find_section (".gcc_compiled_long32") == NULL)
eh_addr_size = 8;
break;
+
+ case EM_H8_300:
+ case EM_H8_300H:
+ switch (elf_header.e_flags & EF_H8_MACH)
+ {
+ case E_H8_MACH_H8300:
+ case E_H8_MACH_H8300HN:
+ case E_H8_MACH_H8300SN:
+ case E_H8_MACH_H8300SXN:
+ eh_addr_size = 2;
+ break;
+ case E_H8_MACH_H8300H:
+ case E_H8_MACH_H8300S:
+ case E_H8_MACH_H8300SX:
+ eh_addr_size = 4;
+ break;
+ }
}
#define CHECK_ENTSIZE_VALUES(section, i, size32, size64) \
@@ -4028,7 +4161,7 @@ process_section_headers (FILE *file)
|| do_debug_lines || do_debug_pubnames || do_debug_aranges
|| do_debug_frames || do_debug_macinfo || do_debug_str
|| do_debug_loc || do_debug_ranges)
- && strneq (name, ".debug_", 7))
+ && const_strneq (name, ".debug_"))
{
name += 7;
@@ -4048,7 +4181,7 @@ process_section_headers (FILE *file)
}
/* linkonce section to be combined with .debug_info at link time. */
else if ((do_debugging || do_debug_info)
- && strneq (name, ".gnu.linkonce.wi.", 17))
+ && const_strneq (name, ".gnu.linkonce.wi."))
request_dump (i, DEBUG_DUMP);
else if (do_debug_frames && streq (name, ".eh_frame"))
request_dump (i, DEBUG_DUMP);
@@ -4884,7 +5017,7 @@ slurp_ia64_unwind_table (FILE *file,
sym = aux->symtab + ELF64_R_SYM (rp->r_info);
}
- if (! strneq (relname, "R_IA64_SEGREL", 13))
+ if (! const_strneq (relname, "R_IA64_SEGREL"))
{
warn (_("Skipping unexpected relocation type %s\n"), relname);
continue;
@@ -5297,7 +5430,7 @@ slurp_hppa_unwind_table (FILE *file,
}
/* R_PARISC_SEGREL32 or R_PARISC_SEGREL64. */
- if (strncmp (relname, "R_PARISC_SEGREL", 15) != 0)
+ if (! const_strneq (relname, "R_PARISC_SEGREL"))
{
warn (_("Skipping unexpected relocation type %s\n"), relname);
continue;
@@ -5735,7 +5868,7 @@ process_dynamic_section (FILE *file)
else
{
if (fseek (file, 0, SEEK_END))
- error (_("Unable to seek to end of file!"));
+ error (_("Unable to seek to end of file!\n"));
section.sh_size = ftell (file) - section.sh_offset;
}
@@ -6215,6 +6348,15 @@ process_dynamic_section (FILE *file)
}
break;
+ case DT_GNU_HASH:
+ dynamic_info_DT_GNU_HASH = entry->d_un.d_val;
+ if (do_dynamic)
+ {
+ print_vma (entry->d_un.d_val, PREFIX_HEX);
+ putchar ('\n');
+ }
+ break;
+
default:
if ((entry->d_tag >= DT_VERSYM) && (entry->d_tag <= DT_VERNEEDNUM))
version_info[DT_VERSIONTAGIDX (entry->d_tag)] =
@@ -6732,6 +6874,8 @@ get_symbol_type (unsigned int type)
case STT_FILE: return "FILE";
case STT_COMMON: return "COMMON";
case STT_TLS: return "TLS";
+ case STT_RELC: return "RELC";
+ case STT_SRELC: return "SRELC";
default:
if (type >= STT_LOPROC && type <= STT_HIPROC)
{
@@ -6830,6 +6974,12 @@ get_symbol_index_type (unsigned int type)
else if (elf_header.e_machine == EM_X86_64
&& type == SHN_X86_64_LCOMMON)
return "LARGE_COM";
+ else if (type == SHN_MIPS_SCOMMON
+ && elf_header.e_machine == EM_MIPS)
+ return "SCOM";
+ else if (type == SHN_MIPS_SUNDEFINED
+ && elf_header.e_machine == EM_MIPS)
+ return "SUND";
else if (type >= SHN_LOPROC && type <= SHN_HIPROC)
sprintf (buff, "PRC[0x%04x]", type);
else if (type >= SHN_LOOS && type <= SHN_HIOS)
@@ -6890,6 +7040,9 @@ process_symbol_table (FILE *file)
bfd_vma nchains = 0;
bfd_vma *buckets = NULL;
bfd_vma *chains = NULL;
+ bfd_vma ngnubuckets = 0;
+ bfd_vma *gnubuckets = NULL;
+ bfd_vma *gnuchains = NULL;
if (! do_syms && !do_histogram)
return 1;
@@ -6913,7 +7066,7 @@ process_symbol_table (FILE *file)
sizeof nb + sizeof nc)),
SEEK_SET))
{
- error (_("Unable to seek to start of dynamic information"));
+ error (_("Unable to seek to start of dynamic information\n"));
return 0;
}
@@ -7139,7 +7292,7 @@ process_symbol_table (FILE *file)
check_def = 0;
}
else if (! is_nobits)
- error (_("bad dynamic symbol"));
+ error (_("bad dynamic symbol\n"));
else
check_def = 1;
}
@@ -7222,7 +7375,7 @@ process_symbol_table (FILE *file)
lengths = calloc (nbuckets, sizeof (*lengths));
if (lengths == NULL)
{
- error (_("Out of memory"));
+ error (_("Out of memory\n"));
return 0;
}
for (hn = 0; hn < nbuckets; ++hn)
@@ -7238,7 +7391,7 @@ process_symbol_table (FILE *file)
counts = calloc (maxlength + 1, sizeof (*counts));
if (counts == NULL)
{
- error (_("Out of memory"));
+ error (_("Out of memory\n"));
return 0;
}
@@ -7269,6 +7422,166 @@ process_symbol_table (FILE *file)
free (chains);
}
+ if (do_histogram && dynamic_info_DT_GNU_HASH)
+ {
+ unsigned char nb[16];
+ bfd_vma i, maxchain = 0xffffffff, symidx, bitmaskwords;
+ unsigned long *lengths;
+ unsigned long *counts;
+ unsigned long hn;
+ unsigned long maxlength = 0;
+ unsigned long nzero_counts = 0;
+ unsigned long nsyms = 0;
+ bfd_vma buckets_vma;
+
+ if (fseek (file,
+ (archive_file_offset
+ + offset_from_vma (file, dynamic_info_DT_GNU_HASH,
+ sizeof nb)),
+ SEEK_SET))
+ {
+ error (_("Unable to seek to start of dynamic information\n"));
+ return 0;
+ }
+
+ if (fread (nb, 16, 1, file) != 1)
+ {
+ error (_("Failed to read in number of buckets\n"));
+ return 0;
+ }
+
+ ngnubuckets = byte_get (nb, 4);
+ symidx = byte_get (nb + 4, 4);
+ bitmaskwords = byte_get (nb + 8, 4);
+ buckets_vma = dynamic_info_DT_GNU_HASH + 16;
+ if (is_32bit_elf)
+ buckets_vma += bitmaskwords * 4;
+ else
+ buckets_vma += bitmaskwords * 8;
+
+ if (fseek (file,
+ (archive_file_offset
+ + offset_from_vma (file, buckets_vma, 4)),
+ SEEK_SET))
+ {
+ error (_("Unable to seek to start of dynamic information\n"));
+ return 0;
+ }
+
+ gnubuckets = get_dynamic_data (file, ngnubuckets, 4);
+
+ if (gnubuckets == NULL)
+ return 0;
+
+ for (i = 0; i < ngnubuckets; i++)
+ if (gnubuckets[i] != 0)
+ {
+ if (gnubuckets[i] < symidx)
+ return 0;
+
+ if (maxchain == 0xffffffff || gnubuckets[i] > maxchain)
+ maxchain = gnubuckets[i];
+ }
+
+ if (maxchain == 0xffffffff)
+ return 0;
+
+ maxchain -= symidx;
+
+ if (fseek (file,
+ (archive_file_offset
+ + offset_from_vma (file, buckets_vma
+ + 4 * (ngnubuckets + maxchain), 4)),
+ SEEK_SET))
+ {
+ error (_("Unable to seek to start of dynamic information\n"));
+ return 0;
+ }
+
+ do
+ {
+ if (fread (nb, 4, 1, file) != 1)
+ {
+ error (_("Failed to determine last chain length\n"));
+ return 0;
+ }
+
+ if (maxchain + 1 == 0)
+ return 0;
+
+ ++maxchain;
+ }
+ while ((byte_get (nb, 4) & 1) == 0);
+
+ if (fseek (file,
+ (archive_file_offset
+ + offset_from_vma (file, buckets_vma + 4 * ngnubuckets, 4)),
+ SEEK_SET))
+ {
+ error (_("Unable to seek to start of dynamic information\n"));
+ return 0;
+ }
+
+ gnuchains = get_dynamic_data (file, maxchain, 4);
+
+ if (gnuchains == NULL)
+ return 0;
+
+ lengths = calloc (ngnubuckets, sizeof (*lengths));
+ if (lengths == NULL)
+ {
+ error (_("Out of memory\n"));
+ return 0;
+ }
+
+ printf (_("\nHistogram for `.gnu.hash' bucket list length (total of %lu buckets):\n"),
+ (unsigned long) ngnubuckets);
+ printf (_(" Length Number %% of total Coverage\n"));
+
+ for (hn = 0; hn < ngnubuckets; ++hn)
+ if (gnubuckets[hn] != 0)
+ {
+ bfd_vma off, length = 1;
+
+ for (off = gnubuckets[hn] - symidx;
+ (gnuchains[off] & 1) == 0; ++off)
+ ++length;
+ lengths[hn] = length;
+ if (length > maxlength)
+ maxlength = length;
+ nsyms += length;
+ }
+
+ counts = calloc (maxlength + 1, sizeof (*counts));
+ if (counts == NULL)
+ {
+ error (_("Out of memory\n"));
+ return 0;
+ }
+
+ for (hn = 0; hn < ngnubuckets; ++hn)
+ ++counts[lengths[hn]];
+
+ if (ngnubuckets > 0)
+ {
+ unsigned long j;
+ printf (" 0 %-10lu (%5.1f%%)\n",
+ counts[0], (counts[0] * 100.0) / ngnubuckets);
+ for (j = 1; j <= maxlength; ++j)
+ {
+ nzero_counts += counts[j] * j;
+ printf ("%7lu %-10lu (%5.1f%%) %5.1f%%\n",
+ j, counts[j], (counts[j] * 100.0) / ngnubuckets,
+ (nzero_counts * 100.0) / nsyms);
+ }
+ }
+
+ free (counts);
+ free (lengths);
+ free (gnubuckets);
+ free (gnuchains);
+ }
+
return 1;
}
@@ -7354,6 +7667,7 @@ disassemble_section (Elf_Internal_Shdr *section, FILE *file)
static int
dump_section (Elf_Internal_Shdr *section, FILE *file)
{
+ Elf_Internal_Shdr *relsec;
bfd_size_type bytes;
bfd_vma addr;
unsigned char *data;
@@ -7377,6 +7691,26 @@ dump_section (Elf_Internal_Shdr *section, FILE *file)
if (!start)
return 0;
+ /* If the section being dumped has relocations against it the user might
+ be expecting these relocations to have been applied. Check for this
+ case and issue a warning message in order to avoid confusion.
+ FIXME: Maybe we ought to have an option that dumps a section with
+ relocs applied ? */
+ for (relsec = section_headers;
+ relsec < section_headers + elf_header.e_shnum;
+ ++relsec)
+ {
+ if ((relsec->sh_type != SHT_RELA && relsec->sh_type != SHT_REL)
+ || SECTION_HEADER_INDEX (relsec->sh_info) >= elf_header.e_shnum
+ || SECTION_HEADER (relsec->sh_info) != section
+ || relsec->sh_size == 0
+ || SECTION_HEADER_INDEX (relsec->sh_link) >= elf_header.e_shnum)
+ continue;
+
+ printf (_(" NOTE: This section has relocations against it, but these have NOT been applied to this dump.\n"));
+ break;
+ }
+
data = start;
while (bytes)
@@ -7389,34 +7723,15 @@ dump_section (Elf_Internal_Shdr *section, FILE *file)
printf (" 0x%8.8lx ", (unsigned long) addr);
- switch (elf_header.e_ident[EI_DATA])
+ for (j = 0; j < 16; j++)
{
- default:
- case ELFDATA2LSB:
- for (j = 15; j >= 0; j --)
- {
- if (j < lbytes)
- printf ("%2.2x", data[j]);
- else
- printf (" ");
-
- if (!(j & 0x3))
- printf (" ");
- }
- break;
-
- case ELFDATA2MSB:
- for (j = 0; j < 16; j++)
- {
- if (j < lbytes)
- printf ("%2.2x", data[j]);
- else
- printf (" ");
+ if (j < lbytes)
+ printf ("%2.2x", data[j]);
+ else
+ printf (" ");
- if ((j & 3) == 3)
- printf (" ");
- }
- break;
+ if ((j & 3) == 3)
+ printf (" ");
}
for (j = 0; j < lbytes; j++)
@@ -7437,9 +7752,47 @@ dump_section (Elf_Internal_Shdr *section, FILE *file)
free (start);
+ putchar ('\n');
return 1;
}
+/* Return the number of bytes affected by a given reloc.
+ This information is architecture and reloc dependent.
+ Returns 4 by default, although this is not always correct.
+ It should return 0 if a decision cannot be made.
+ FIXME: This is not the correct way to solve this problem.
+ The proper way is to have target specific reloc sizing functions
+ created by the reloc-macros.h header, in the same way that it
+ already creates the reloc naming functions. */
+
+static unsigned int
+get_reloc_size (Elf_Internal_Rela * reloc)
+{
+ switch (elf_header.e_machine)
+ {
+ case EM_H8S:
+ case EM_H8_300:
+ case EM_H8_300H:
+ case EM_H8_500:
+ switch (ELF32_R_TYPE (reloc->r_info))
+ {
+ /* PR gas/3800 - without this information we do not correctly
+ decode the debug information generated by the h8300 assembler. */
+ case R_H8_DIR16:
+ return 2;
+ default:
+ return 4;
+ }
+ default:
+ /* FIXME: We need to extend this switch statement to cope with other
+ architecture's relocs. (When those relocs are used against debug
+ sections, and when their size is not 4). But see the multiple
+ inclusions of <elf/h8.h> for an example of the hoops that we need
+ to jump through in order to obtain the reloc numbers. */
+ return 4;
+ }
+}
+
/* Apply addends of RELA relocations. */
static int
@@ -7449,14 +7802,13 @@ debug_apply_rela_addends (void *file,
{
Elf_Internal_Shdr *relsec;
unsigned char *end = start + section->sh_size;
- /* FIXME: The relocation field size is relocation type dependent. */
- unsigned int reloc_size = 4;
if (!is_relocatable)
return 1;
- if (section->sh_size < reloc_size)
- return 1;
+ /* SH uses RELA but uses in place value instead of the addend field. */
+ if (elf_header.e_machine == EM_SH)
+ return 0;
for (relsec = section_headers;
relsec < section_headers + elf_header.e_shnum;
@@ -7485,6 +7837,16 @@ debug_apply_rela_addends (void *file,
for (rp = rela; rp < rela + nrelas; ++rp)
{
unsigned char *loc;
+ unsigned int reloc_size;
+
+ reloc_size = get_reloc_size (rp);
+ if (reloc_size == 0)
+ {
+ warn (_("skipping relocation of unknown size against offset 0x%lx in section %s\n"),
+ (unsigned long) rp->r_offset,
+ SECTION_NAME (section));
+ continue;
+ }
loc = start + rp->r_offset;
if ((loc + reloc_size) > end)
@@ -7501,6 +7863,10 @@ debug_apply_rela_addends (void *file,
if (ELF32_R_SYM (rp->r_info) != 0
&& ELF32_ST_TYPE (sym->st_info) != STT_SECTION
+ /* Relocations against symbols without type can happen.
+ Gcc -feliminate-dwarf2-dups may generate symbols
+ without type for debug info. */
+ && ELF32_ST_TYPE (sym->st_info) != STT_NOTYPE
/* Relocations against object symbols can happen,
eg when referencing a global array. For an
example of this see the _clz.o binary in libgcc.a. */
@@ -7530,6 +7896,7 @@ debug_apply_rela_addends (void *file,
if (ELF64_R_SYM (rp->r_info) != 0
&& ELF64_ST_TYPE (sym->st_info) != STT_SECTION
+ && ELF64_ST_TYPE (sym->st_info) != STT_NOTYPE
&& ELF64_ST_TYPE (sym->st_info) != STT_OBJECT)
{
warn (_("skipping unexpected symbol type %s in relocation in section .rela.%s\n"),
@@ -7606,7 +7973,7 @@ display_debug_section (Elf_Internal_Shdr *section, FILE *file)
return 0;
}
- if (strneq (name, ".gnu.linkonce.wi.", 17))
+ if (const_strneq (name, ".gnu.linkonce.wi."))
name = ".debug_info";
/* See if we know how to display the contents of this section. */
@@ -7731,7 +8098,8 @@ static const char *arm_attr_tag_CPU_arch[] =
static const char *arm_attr_tag_ARM_ISA_use[] = {"No", "Yes"};
static const char *arm_attr_tag_THUMB_ISA_use[] =
{"No", "Thumb-1", "Thumb-2"};
-static const char *arm_attr_tag_VFP_arch[] = {"No", "VFPv1", "VFPv2"};
+/* FIXME: VFPv3 encoding was extrapolated! */
+static const char *arm_attr_tag_VFP_arch[] = {"No", "VFPv1", "VFPv2", "VFPv3"};
static const char *arm_attr_tag_WMMX_arch[] = {"No", "WMMXv1"};
static const char *arm_attr_tag_NEON_arch[] = {"No", "NEONv1"};
static const char *arm_attr_tag_ABI_PCS_config[] =
@@ -7929,8 +8297,166 @@ display_arm_attribute (unsigned char *p)
return p;
}
+
+static unsigned char *
+display_gnu_attribute (unsigned char *p,
+ unsigned char *(*display_proc_gnu_attribute)
+ (unsigned char *, int))
+{
+ int tag;
+ unsigned int len;
+ int val;
+ int type;
+
+ tag = read_uleb128 (p, &len);
+ p += len;
+
+ /* Tag_compatibility is the only generic GNU attribute defined at
+ present. */
+ if (tag == 32)
+ {
+ val = read_uleb128 (p, &len);
+ p += len;
+ printf ("flag = %d, vendor = %s\n", val, p);
+ p += strlen((char *)p) + 1;
+ return p;
+ }
+
+ if ((tag & 2) == 0 && display_proc_gnu_attribute)
+ return display_proc_gnu_attribute (p, tag);
+
+ if (tag & 1)
+ type = 1; /* String. */
+ else
+ type = 2; /* uleb128. */
+ printf (" Tag_unknown_%d: ", tag);
+
+ if (type == 1)
+ {
+ printf ("\"%s\"\n", p);
+ p += strlen ((char *)p) + 1;
+ }
+ else
+ {
+ val = read_uleb128 (p, &len);
+ p += len;
+ printf ("%d (0x%x)\n", val, val);
+ }
+
+ return p;
+}
+
+static unsigned char *
+display_power_gnu_attribute (unsigned char *p, int tag)
+{
+ int type;
+ unsigned int len;
+ int val;
+
+ if (tag == Tag_GNU_Power_ABI_FP)
+ {
+ val = read_uleb128 (p, &len);
+ p += len;
+ printf (" Tag_GNU_Power_ABI_FP: ");
+ switch (val)
+ {
+ case 0:
+ printf ("Hard or soft float\n");
+ break;
+ case 1:
+ printf ("Hard float\n");
+ break;
+ case 2:
+ printf ("Soft float\n");
+ break;
+ default:
+ printf ("??? (%d)\n", val);
+ break;
+ }
+ return p;
+ }
+
+ if (tag & 1)
+ type = 1; /* String. */
+ else
+ type = 2; /* uleb128. */
+ printf (" Tag_unknown_%d: ", tag);
+
+ if (type == 1)
+ {
+ printf ("\"%s\"\n", p);
+ p += strlen ((char *)p) + 1;
+ }
+ else
+ {
+ val = read_uleb128 (p, &len);
+ p += len;
+ printf ("%d (0x%x)\n", val, val);
+ }
+
+ return p;
+}
+
+static unsigned char *
+display_mips_gnu_attribute (unsigned char *p, int tag)
+{
+ int type;
+ unsigned int len;
+ int val;
+
+ if (tag == Tag_GNU_MIPS_ABI_FP)
+ {
+ val = read_uleb128 (p, &len);
+ p += len;
+ printf (" Tag_GNU_MIPS_ABI_FP: ");
+ switch (val)
+ {
+ case 0:
+ printf ("Hard or soft float\n");
+ break;
+ case 1:
+ printf ("Hard float (-mdouble-float)\n");
+ break;
+ case 2:
+ printf ("Hard float (-msingle-float)\n");
+ break;
+ case 3:
+ printf ("Soft float\n");
+ break;
+ default:
+ printf ("??? (%d)\n", val);
+ break;
+ }
+ return p;
+ }
+
+ if (tag & 1)
+ type = 1; /* String. */
+ else
+ type = 2; /* uleb128. */
+ printf (" Tag_unknown_%d: ", tag);
+
+ if (type == 1)
+ {
+ printf ("\"%s\"\n", p);
+ p += strlen ((char *)p) + 1;
+ }
+ else
+ {
+ val = read_uleb128 (p, &len);
+ p += len;
+ printf ("%d (0x%x)\n", val, val);
+ }
+
+ return p;
+}
+
static int
-process_arm_specific (FILE *file)
+process_attributes (FILE *file, const char *public_name,
+ unsigned int proc_type,
+ unsigned char *(*display_pub_attribute) (unsigned char *),
+ unsigned char *(*display_proc_gnu_attribute)
+ (unsigned char *, int))
{
Elf_Internal_Shdr *sect;
unsigned char *contents;
@@ -7945,7 +8471,7 @@ process_arm_specific (FILE *file)
i < elf_header.e_shnum;
i++, sect++)
{
- if (sect->sh_type != SHT_ARM_ATTRIBUTES)
+ if (sect->sh_type != proc_type && sect->sh_type != SHT_GNU_ATTRIBUTES)
continue;
contents = get_data (NULL, file, sect->sh_offset, 1, sect->sh_size,
@@ -7962,6 +8488,7 @@ process_arm_specific (FILE *file)
{
int namelen;
bfd_boolean public_section;
+ bfd_boolean gnu_section;
section_len = byte_get (p, 4);
p += 4;
@@ -7973,10 +8500,14 @@ process_arm_specific (FILE *file)
}
len -= section_len;
printf ("Attribute Section: %s\n", p);
- if (strcmp ((char *)p, "aeabi") == 0)
+ if (public_name && strcmp ((char *)p, public_name) == 0)
public_section = TRUE;
else
public_section = FALSE;
+ if (strcmp ((char *)p, "gnu") == 0)
+ gnu_section = TRUE;
+ else
+ gnu_section = FALSE;
namelen = strlen ((char *)p) + 1;
p += namelen;
section_len -= namelen + 4;
@@ -8025,7 +8556,13 @@ process_arm_specific (FILE *file)
if (public_section)
{
while (p < end)
- p = display_arm_attribute(p);
+ p = display_pub_attribute (p);
+ }
+ else if (gnu_section)
+ {
+ while (p < end)
+ p = display_gnu_attribute (p,
+ display_proc_gnu_attribute);
}
else
{
@@ -8047,6 +8584,20 @@ process_arm_specific (FILE *file)
}
static int
+process_arm_specific (FILE *file)
+{
+ return process_attributes (file, "aeabi", SHT_ARM_ATTRIBUTES,
+ display_arm_attribute, NULL);
+}
+
+static int
+process_power_specific (FILE *file)
+{
+ return process_attributes (file, NULL, SHT_GNU_ATTRIBUTES, NULL,
+ display_power_gnu_attribute);
+}
+
+static int
process_mips_specific (FILE *file)
{
Elf_Internal_Dyn *entry;
@@ -8056,6 +8607,9 @@ process_mips_specific (FILE *file)
size_t options_offset = 0;
size_t conflicts_offset = 0;
+ process_attributes (file, NULL, SHT_GNU_ATTRIBUTES, NULL,
+ display_mips_gnu_attribute);
+
/* We have a lot of special sections. Thanks SGI! */
if (dynamic_section == NULL)
/* No information available. */
@@ -8189,7 +8743,7 @@ process_mips_specific (FILE *file)
iopt = cmalloc ((sect->sh_size / sizeof (eopt)), sizeof (*iopt));
if (iopt == NULL)
{
- error (_("Out of memory"));
+ error (_("Out of memory\n"));
return 0;
}
@@ -8374,14 +8928,14 @@ process_mips_specific (FILE *file)
if (dynamic_symbols == NULL)
{
- error (_("conflict list found without a dynamic symbol table"));
+ error (_("conflict list found without a dynamic symbol table\n"));
return 0;
}
iconf = cmalloc (conflictsno, sizeof (*iconf));
if (iconf == NULL)
{
- error (_("Out of memory"));
+ error (_("Out of memory\n"));
return 0;
}
@@ -8650,7 +9204,7 @@ process_note (Elf_Internal_Note *pnote)
note type strings. */
nt = get_note_type (pnote->type);
- else if (strneq (pnote->namedata, "NetBSD-CORE", 11))
+ else if (const_strneq (pnote->namedata, "NetBSD-CORE"))
/* NetBSD-specific core file notes. */
nt = get_netbsd_elfcore_note_type (pnote->type);
@@ -8821,6 +9375,9 @@ process_arch_specific (FILE *file)
case EM_MIPS_RS3_LE:
return process_mips_specific (file);
break;
+ case EM_PPC:
+ return process_power_specific (file);
+ break;
default:
break;
}
@@ -9098,7 +9655,7 @@ process_archive (char *file_name, FILE *file)
return 1;
}
- if (memcmp (arhdr.ar_name, "/ ", 16) == 0)
+ if (const_strneq (arhdr.ar_name, "/ "))
{
/* This is the archive symbol table. Skip it.
FIXME: We should have an option to dump it. */
@@ -9120,7 +9677,7 @@ process_archive (char *file_name, FILE *file)
}
}
- if (memcmp (arhdr.ar_name, "// ", 16) == 0)
+ if (const_strneq (arhdr.ar_name, "// "))
{
/* This is the archive string table holding long member
names. */
@@ -9338,7 +9895,7 @@ main (int argc, char **argv)
/* Make a copy of the dump_sects array. */
cmdline_dump_sects = malloc (num_dump_sects);
if (cmdline_dump_sects == NULL)
- error (_("Out of memory allocating dump request table."));
+ error (_("Out of memory allocating dump request table.\n"));
else
{
memcpy (cmdline_dump_sects, dump_sects, num_dump_sects);
diff --git a/binutils/rename.c b/binutils/rename.c
index 7d21cb34c046..25329d140508 100644
--- a/binutils/rename.c
+++ b/binutils/rename.c
@@ -1,5 +1,5 @@
/* rename.c -- rename a file, preserving symlinks.
- Copyright 1999, 2002, 2003 Free Software Foundation, Inc.
+ Copyright 1999, 2002, 2003, 2007 Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -18,6 +18,7 @@
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
+#include "sysdep.h"
#include "bfd.h"
#include "bucomm.h"
diff --git a/binutils/resbin.c b/binutils/resbin.c
index 80c2596a70b7..7c8f5019641b 100644
--- a/binutils/resbin.c
+++ b/binutils/resbin.c
@@ -1,7 +1,8 @@
/* resbin.c -- manipulate the Windows binary resource format.
- Copyright 1997, 1998, 1999, 2002, 2003
+ Copyright 1997, 1998, 1999, 2002, 2003, 2007
Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
+ Rewritten by Kai Tietz, Onevision.
This file is part of GNU Binutils.
@@ -24,102 +25,88 @@
format and the internal structures that we want to use. The same
binary resource format is used in both res and COFF files. */
+#include "sysdep.h"
#include "bfd.h"
#include "bucomm.h"
#include "libiberty.h"
#include "windres.h"
-/* Macros to swap in values. */
-
-#define get_8(s) (*((unsigned char *)(s)))
-#define get_16(be, s) ((be) ? bfd_getb16 (s) : bfd_getl16 (s))
-#define get_32(be, s) ((be) ? bfd_getb32 (s) : bfd_getl32 (s))
-
/* Local functions. */
static void toosmall (const char *);
-static unichar *get_unicode
- (const unsigned char *, unsigned long, int, int *);
-static int get_resid
- (struct res_id *, const unsigned char *, unsigned long, int);
-static struct res_resource *bin_to_res_generic
- (enum res_type, const unsigned char *, unsigned long);
-static struct res_resource *bin_to_res_cursor
- (const unsigned char *, unsigned long, int);
-static struct res_resource *bin_to_res_menu
- (const unsigned char *, unsigned long, int);
-static struct menuitem *bin_to_res_menuitems
- (const unsigned char *, unsigned long, int, int *);
-static struct menuitem *bin_to_res_menuexitems
- (const unsigned char *, unsigned long, int, int *);
-static struct res_resource *bin_to_res_dialog
- (const unsigned char *, unsigned long, int);
-static struct res_resource *bin_to_res_string
- (const unsigned char *, unsigned long, int);
-static struct res_resource *bin_to_res_fontdir
- (const unsigned char *, unsigned long, int);
-static struct res_resource *bin_to_res_accelerators
- (const unsigned char *, unsigned long, int);
-static struct res_resource *bin_to_res_rcdata
- (const unsigned char *, unsigned long, int);
-static struct res_resource *bin_to_res_group_cursor
- (const unsigned char *, unsigned long, int);
-static struct res_resource *bin_to_res_group_icon
- (const unsigned char *, unsigned long, int);
-static struct res_resource *bin_to_res_version
- (const unsigned char *, unsigned long, int);
-static struct res_resource *bin_to_res_userdata
- (const unsigned char *, unsigned long, int);
-static void get_version_header
- (const unsigned char *, unsigned long, int, const char *,
- unichar **, int *, int *, int *, int *);
+static unichar *get_unicode (windres_bfd *, const bfd_byte *, rc_uint_type, rc_uint_type *);
+static int get_resid (windres_bfd *, rc_res_id *, const bfd_byte *, rc_uint_type);
+static rc_res_resource *bin_to_res_generic (windres_bfd *, enum rc_res_type,
+ const bfd_byte *, rc_uint_type);
+static rc_res_resource *bin_to_res_cursor (windres_bfd *, const bfd_byte *, rc_uint_type);
+static rc_res_resource *bin_to_res_menu (windres_bfd *,const bfd_byte *, rc_uint_type);
+static rc_menuitem *bin_to_res_menuitems (windres_bfd *, const bfd_byte *, rc_uint_type,
+ rc_uint_type *);
+static rc_menuitem *bin_to_res_menuexitems (windres_bfd *, const bfd_byte *, rc_uint_type,
+ rc_uint_type *);
+static rc_res_resource *bin_to_res_dialog (windres_bfd *, const bfd_byte *, rc_uint_type);
+static rc_res_resource *bin_to_res_string (windres_bfd *,const bfd_byte *, rc_uint_type);
+static rc_res_resource *bin_to_res_fontdir (windres_bfd *, const bfd_byte *, rc_uint_type);
+static rc_res_resource *bin_to_res_accelerators (windres_bfd *, const bfd_byte *, rc_uint_type);
+static rc_res_resource *bin_to_res_rcdata (windres_bfd *, const bfd_byte *, rc_uint_type, int);
+static rc_res_resource *bin_to_res_group_cursor (windres_bfd *, const bfd_byte *, rc_uint_type);
+static rc_res_resource *bin_to_res_group_icon (windres_bfd *, const bfd_byte *, rc_uint_type);
+static rc_res_resource *bin_to_res_version (windres_bfd *, const bfd_byte *, rc_uint_type);
+static rc_res_resource *bin_to_res_userdata (windres_bfd *, const bfd_byte *, rc_uint_type);
+static rc_res_resource *bin_to_res_toolbar (windres_bfd *, const bfd_byte *, rc_uint_type);
+static void get_version_header (windres_bfd *, const bfd_byte *, rc_uint_type, const char *,
+ unichar **, rc_uint_type *, rc_uint_type *, rc_uint_type *,
+ rc_uint_type *);
/* Given a resource type ID, a pointer to data, a length, return a
- res_resource structure which represents that resource. The caller
+ rc_res_resource structure which represents that resource. The caller
is responsible for initializing the res_info and coff_info fields
of the returned structure. */
-struct res_resource *
-bin_to_res (struct res_id type, const unsigned char *data,
- unsigned long length, int big_endian)
+rc_res_resource *
+bin_to_res (windres_bfd *wrbfd, rc_res_id type, const bfd_byte *data,
+ rc_uint_type length)
{
if (type.named)
- return bin_to_res_userdata (data, length, big_endian);
+ return bin_to_res_userdata (wrbfd, data, length);
else
{
switch (type.u.id)
{
default:
- return bin_to_res_userdata (data, length, big_endian);
+ return bin_to_res_userdata (wrbfd, data, length);
case RT_CURSOR:
- return bin_to_res_cursor (data, length, big_endian);
+ return bin_to_res_cursor (wrbfd, data, length);
case RT_BITMAP:
- return bin_to_res_generic (RES_TYPE_BITMAP, data, length);
+ return bin_to_res_generic (wrbfd, RES_TYPE_BITMAP, data, length);
case RT_ICON:
- return bin_to_res_generic (RES_TYPE_ICON, data, length);
+ return bin_to_res_generic (wrbfd, RES_TYPE_ICON, data, length);
case RT_MENU:
- return bin_to_res_menu (data, length, big_endian);
+ return bin_to_res_menu (wrbfd, data, length);
case RT_DIALOG:
- return bin_to_res_dialog (data, length, big_endian);
+ return bin_to_res_dialog (wrbfd, data, length);
case RT_STRING:
- return bin_to_res_string (data, length, big_endian);
+ return bin_to_res_string (wrbfd, data, length);
case RT_FONTDIR:
- return bin_to_res_fontdir (data, length, big_endian);
+ return bin_to_res_fontdir (wrbfd, data, length);
case RT_FONT:
- return bin_to_res_generic (RES_TYPE_FONT, data, length);
+ return bin_to_res_generic (wrbfd, RES_TYPE_FONT, data, length);
case RT_ACCELERATOR:
- return bin_to_res_accelerators (data, length, big_endian);
+ return bin_to_res_accelerators (wrbfd, data, length);
case RT_RCDATA:
- return bin_to_res_rcdata (data, length, big_endian);
+ return bin_to_res_rcdata (wrbfd, data, length, RES_TYPE_RCDATA);
case RT_MESSAGETABLE:
- return bin_to_res_generic (RES_TYPE_MESSAGETABLE, data, length);
+ return bin_to_res_generic (wrbfd, RES_TYPE_MESSAGETABLE, data, length);
case RT_GROUP_CURSOR:
- return bin_to_res_group_cursor (data, length, big_endian);
+ return bin_to_res_group_cursor (wrbfd, data, length);
case RT_GROUP_ICON:
- return bin_to_res_group_icon (data, length, big_endian);
+ return bin_to_res_group_icon (wrbfd, data, length);
case RT_VERSION:
- return bin_to_res_version (data, length, big_endian);
+ return bin_to_res_version (wrbfd, data, length);
+ case RT_TOOLBAR:
+ return bin_to_res_toolbar (wrbfd, data, length);
+
}
}
}
@@ -135,18 +122,18 @@ toosmall (const char *msg)
/* Swap in a NULL terminated unicode string. */
static unichar *
-get_unicode (const unsigned char *data, unsigned long length,
- int big_endian, int *retlen)
+get_unicode (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length,
+ rc_uint_type *retlen)
{
- int c, i;
+ rc_uint_type c, i;
unichar *ret;
c = 0;
while (1)
{
- if (length < (unsigned long) c * 2 + 2)
+ if (length < c * 2 + 2)
toosmall (_("null terminated unicode string"));
- if (get_16 (big_endian, data + c * 2) == 0)
+ if (windres_get_16 (wrbfd, data + c * 2, 2) == 0)
break;
++c;
}
@@ -154,7 +141,7 @@ get_unicode (const unsigned char *data, unsigned long length,
ret = (unichar *) res_alloc ((c + 1) * sizeof (unichar));
for (i = 0; i < c; i++)
- ret[i] = get_16 (big_endian, data + i * 2);
+ ret[i] = windres_get_16 (wrbfd, data + i * 2, 2);
ret[i] = 0;
if (retlen != NULL)
@@ -166,27 +153,27 @@ get_unicode (const unsigned char *data, unsigned long length,
/* Get a resource identifier. This returns the number of bytes used. */
static int
-get_resid (struct res_id *id, const unsigned char *data,
- unsigned long length, int big_endian)
+get_resid (windres_bfd *wrbfd, rc_res_id *id, const bfd_byte *data,
+ rc_uint_type length)
{
- int first;
+ rc_uint_type first;
if (length < 2)
toosmall (_("resource ID"));
- first = get_16 (big_endian, data);
+ first = windres_get_16 (wrbfd, data, 2);
if (first == 0xffff)
{
if (length < 4)
toosmall (_("resource ID"));
id->named = 0;
- id->u.id = get_16 (big_endian, data + 2);
+ id->u.id = windres_get_16 (wrbfd, data + 2, 2);
return 4;
}
else
{
id->named = 1;
- id->u.n.name = get_unicode (data, length, big_endian, &id->u.n.length);
+ id->u.n.name = get_unicode (wrbfd, data, length, &id->u.n.length);
return id->u.n.length * 2 + 2;
}
}
@@ -194,13 +181,13 @@ get_resid (struct res_id *id, const unsigned char *data,
/* Convert a resource which just stores uninterpreted data from
binary. */
-struct res_resource *
-bin_to_res_generic (enum res_type type, const unsigned char *data,
- unsigned long length)
+rc_res_resource *
+bin_to_res_generic (windres_bfd *wrbfd ATTRIBUTE_UNUSED, enum rc_res_type type,
+ const bfd_byte *data, rc_uint_type length)
{
- struct res_resource *r;
+ rc_res_resource *r;
- r = (struct res_resource *) res_alloc (sizeof *r);
+ r = (rc_res_resource *) res_alloc (sizeof (rc_res_resource));
r->type = type;
r->u.data.data = data;
r->u.data.length = length;
@@ -210,23 +197,22 @@ bin_to_res_generic (enum res_type type, const unsigned char *data,
/* Convert a cursor resource from binary. */
-struct res_resource *
-bin_to_res_cursor (const unsigned char *data, unsigned long length,
- int big_endian)
+rc_res_resource *
+bin_to_res_cursor (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length)
{
- struct cursor *c;
- struct res_resource *r;
+ rc_cursor *c;
+ rc_res_resource *r;
if (length < 4)
toosmall (_("cursor"));
- c = (struct cursor *) res_alloc (sizeof *c);
- c->xhotspot = get_16 (big_endian, data);
- c->yhotspot = get_16 (big_endian, data + 2);
+ c = (rc_cursor *) res_alloc (sizeof (rc_cursor));
+ c->xhotspot = windres_get_16 (wrbfd, data, 2);
+ c->yhotspot = windres_get_16 (wrbfd, data + 2, 2);
c->length = length - 4;
c->data = data + 4;
- r = (struct res_resource *) res_alloc (sizeof *r);
+ r = (rc_res_resource *) res_alloc (sizeof *r);
r->type = RES_TYPE_CURSOR;
r->u.cursor = c;
@@ -235,61 +221,57 @@ bin_to_res_cursor (const unsigned char *data, unsigned long length,
/* Convert a menu resource from binary. */
-struct res_resource *
-bin_to_res_menu (const unsigned char *data, unsigned long length,
- int big_endian)
+rc_res_resource *
+bin_to_res_menu (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length)
{
- struct res_resource *r;
- struct menu *m;
- int version, read;
+ rc_res_resource *r;
+ rc_menu *m;
+ rc_uint_type version, read;
- r = (struct res_resource *) res_alloc (sizeof *r);
+ r = (rc_res_resource *) res_alloc (sizeof *r);
r->type = RES_TYPE_MENU;
- m = (struct menu *) res_alloc (sizeof *m);
+ m = (rc_menu *) res_alloc (sizeof (rc_menu));
r->u.menu = m;
if (length < 2)
toosmall (_("menu header"));
- version = get_16 (big_endian, data);
+ version = windres_get_16 (wrbfd, data, 2);
if (version == 0)
{
if (length < 4)
toosmall (_("menu header"));
m->help = 0;
- m->items = bin_to_res_menuitems (data + 4, length - 4, big_endian,
- &read);
+ m->items = bin_to_res_menuitems (wrbfd, data + 4, length - 4, &read);
}
else if (version == 1)
{
- unsigned int offset;
+ rc_uint_type offset;
if (length < 8)
toosmall (_("menuex header"));
- m->help = get_32 (big_endian, data + 4);
- offset = get_16 (big_endian, data + 2);
+ m->help = windres_get_32 (wrbfd, data + 4, 4);
+ offset = windres_get_16 (wrbfd, data + 2, 2);
if (offset + 4 >= length)
toosmall (_("menuex offset"));
- m->items = bin_to_res_menuexitems (data + 4 + offset,
- length - (4 + offset),
- big_endian,
- &read);
+ m->items = bin_to_res_menuexitems (wrbfd, data + 4 + offset,
+ length - (4 + offset), &read);
}
else
- fatal (_("unsupported menu version %d"), version);
+ fatal (_("unsupported menu version %d"), (int) version);
return r;
}
/* Convert menu items from binary. */
-static struct menuitem *
-bin_to_res_menuitems (const unsigned char *data, unsigned long length,
- int big_endian, int *read)
+static rc_menuitem *
+bin_to_res_menuitems (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length,
+ rc_uint_type *read)
{
- struct menuitem *first, **pp;
+ rc_menuitem *first, **pp;
first = NULL;
pp = &first;
@@ -298,18 +280,18 @@ bin_to_res_menuitems (const unsigned char *data, unsigned long length,
while (length > 0)
{
- int flags, slen, itemlen;
- unsigned int stroff;
- struct menuitem *mi;
+ rc_uint_type flags, slen, itemlen;
+ rc_uint_type stroff;
+ rc_menuitem *mi;
if (length < 4)
toosmall (_("menuitem header"));
- mi = (struct menuitem *) res_alloc (sizeof *mi);
+ mi = (rc_menuitem *) res_alloc (sizeof *mi);
mi->state = 0;
mi->help = 0;
- flags = get_16 (big_endian, data);
+ flags = windres_get_16 (wrbfd, data, 2);
mi->type = flags &~ (MENUITEM_POPUP | MENUITEM_ENDMENU);
if ((flags & MENUITEM_POPUP) == 0)
@@ -320,29 +302,28 @@ bin_to_res_menuitems (const unsigned char *data, unsigned long length,
if (length < stroff + 2)
toosmall (_("menuitem header"));
- if (get_16 (big_endian, data + stroff) == 0)
+ if (windres_get_16 (wrbfd, data + stroff, 2) == 0)
{
slen = 0;
mi->text = NULL;
}
else
- mi->text = get_unicode (data + stroff, length - stroff, big_endian,
- &slen);
+ mi->text = get_unicode (wrbfd, data + stroff, length - stroff, &slen);
itemlen = stroff + slen * 2 + 2;
if ((flags & MENUITEM_POPUP) == 0)
{
mi->popup = NULL;
- mi->id = get_16 (big_endian, data + 2);
+ mi->id = windres_get_16 (wrbfd, data + 2, 2);
}
else
{
- int subread;
+ rc_uint_type subread;
mi->id = 0;
- mi->popup = bin_to_res_menuitems (data + itemlen, length - itemlen,
- big_endian, &subread);
+ mi->popup = bin_to_res_menuitems (wrbfd, data + itemlen, length - itemlen,
+ &subread);
itemlen += subread;
}
@@ -363,11 +344,11 @@ bin_to_res_menuitems (const unsigned char *data, unsigned long length,
/* Convert menuex items from binary. */
-static struct menuitem *
-bin_to_res_menuexitems (const unsigned char *data, unsigned long length,
- int big_endian, int *read)
+static rc_menuitem *
+bin_to_res_menuexitems (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length,
+ rc_uint_type *read)
{
- struct menuitem *first, **pp;
+ rc_menuitem *first, **pp;
first = NULL;
pp = &first;
@@ -376,29 +357,29 @@ bin_to_res_menuexitems (const unsigned char *data, unsigned long length,
while (length > 0)
{
- int flags, slen;
- unsigned int itemlen;
- struct menuitem *mi;
+ rc_uint_type flags, slen;
+ rc_uint_type itemlen;
+ rc_menuitem *mi;
- if (length < 14)
+ if (length < 16)
toosmall (_("menuitem header"));
- mi = (struct menuitem *) res_alloc (sizeof *mi);
- mi->type = get_32 (big_endian, data);
- mi->state = get_32 (big_endian, data + 4);
- mi->id = get_16 (big_endian, data + 8);
+ mi = (rc_menuitem *) res_alloc (sizeof (rc_menuitem));
+ mi->type = windres_get_32 (wrbfd, data, 4);
+ mi->state = windres_get_32 (wrbfd, data + 4, 4);
+ mi->id = windres_get_32 (wrbfd, data + 8, 4);
- flags = get_16 (big_endian, data + 10);
+ flags = windres_get_16 (wrbfd, data + 12, 2);
- if (get_16 (big_endian, data + 12) == 0)
+ if (windres_get_16 (wrbfd, data + 14, 2) == 0)
{
slen = 0;
mi->text = NULL;
}
else
- mi->text = get_unicode (data + 12, length - 12, big_endian, &slen);
+ mi->text = get_unicode (wrbfd, data + 14, length - 14, &slen);
- itemlen = 12 + slen * 2 + 2;
+ itemlen = 14 + slen * 2 + 2;
itemlen = (itemlen + 3) &~ 3;
if ((flags & 1) == 0)
@@ -408,16 +389,15 @@ bin_to_res_menuexitems (const unsigned char *data, unsigned long length,
}
else
{
- int subread;
+ rc_uint_type subread;
if (length < itemlen + 4)
toosmall (_("menuitem"));
- mi->help = get_32 (big_endian, data + itemlen);
+ mi->help = windres_get_32 (wrbfd, data + itemlen, 4);
itemlen += 4;
- mi->popup = bin_to_res_menuexitems (data + itemlen,
- length - itemlen,
- big_endian, &subread);
+ mi->popup = bin_to_res_menuexitems (wrbfd, data + itemlen,
+ length - itemlen, &subread);
itemlen += subread;
}
@@ -438,63 +418,62 @@ bin_to_res_menuexitems (const unsigned char *data, unsigned long length,
/* Convert a dialog resource from binary. */
-static struct res_resource *
-bin_to_res_dialog (const unsigned char *data, unsigned long length,
- int big_endian)
+static rc_res_resource *
+bin_to_res_dialog (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length)
{
- int signature;
- struct dialog *d;
- int c, sublen, i;
- unsigned int off;
- struct dialog_control **pp;
- struct res_resource *r;
+ rc_uint_type signature;
+ rc_dialog *d;
+ rc_uint_type c, sublen, i;
+ rc_uint_type off;
+ rc_dialog_control **pp;
+ rc_res_resource *r;
if (length < 18)
toosmall (_("dialog header"));
- d = (struct dialog *) res_alloc (sizeof *d);
+ d = (rc_dialog *) res_alloc (sizeof (rc_dialog));
- signature = get_16 (big_endian, data + 2);
+ signature = windres_get_16 (wrbfd, data + 2, 2);
if (signature != 0xffff)
{
d->ex = NULL;
- d->style = get_32 (big_endian, data);
- d->exstyle = get_32 (big_endian, data + 4);
+ d->style = windres_get_32 (wrbfd, data, 4);
+ d->exstyle = windres_get_32 (wrbfd, data + 4, 4);
off = 8;
}
else
{
int version;
- version = get_16 (big_endian, data);
+ version = windres_get_16 (wrbfd, data, 2);
if (version != 1)
fatal (_("unexpected DIALOGEX version %d"), version);
- d->ex = (struct dialog_ex *) res_alloc (sizeof (struct dialog_ex));
- d->ex->help = get_32 (big_endian, data + 4);
- d->exstyle = get_32 (big_endian, data + 8);
- d->style = get_32 (big_endian, data + 12);
+ d->ex = (rc_dialog_ex *) res_alloc (sizeof (rc_dialog_ex));
+ d->ex->help = windres_get_32 (wrbfd, data + 4, 4);
+ d->exstyle = windres_get_32 (wrbfd, data + 8, 4);
+ d->style = windres_get_32 (wrbfd, data + 12, 4);
off = 16;
}
if (length < off + 10)
toosmall (_("dialog header"));
- c = get_16 (big_endian, data + off);
- d->x = get_16 (big_endian, data + off + 2);
- d->y = get_16 (big_endian, data + off + 4);
- d->width = get_16 (big_endian, data + off + 6);
- d->height = get_16 (big_endian, data + off + 8);
+ c = windres_get_16 (wrbfd, data + off, 2);
+ d->x = windres_get_16 (wrbfd, data + off + 2, 2);
+ d->y = windres_get_16 (wrbfd, data + off + 4, 2);
+ d->width = windres_get_16 (wrbfd, data + off + 6, 2);
+ d->height = windres_get_16 (wrbfd, data + off + 8, 2);
off += 10;
- sublen = get_resid (&d->menu, data + off, length - off, big_endian);
+ sublen = get_resid (wrbfd, &d->menu, data + off, length - off);
off += sublen;
- sublen = get_resid (&d->class, data + off, length - off, big_endian);
+ sublen = get_resid (wrbfd, &d->class, data + off, length - off);
off += sublen;
- d->caption = get_unicode (data + off, length - off, big_endian, &sublen);
+ d->caption = get_unicode (wrbfd, data + off, length - off, &sublen);
off += sublen * 2 + 2;
if (sublen == 0)
d->caption = NULL;
@@ -515,20 +494,20 @@ bin_to_res_dialog (const unsigned char *data, unsigned long length,
if (length < off + 2)
toosmall (_("dialog font point size"));
- d->pointsize = get_16 (big_endian, data + off);
+ d->pointsize = windres_get_16 (wrbfd, data + off, 2);
off += 2;
if (d->ex != NULL)
{
if (length < off + 4)
toosmall (_("dialogex font information"));
- d->ex->weight = get_16 (big_endian, data + off);
- d->ex->italic = get_8 (data + off + 2);
- d->ex->charset = get_8 (data + off + 3);
+ d->ex->weight = windres_get_16 (wrbfd, data + off, 2);
+ d->ex->italic = windres_get_8 (wrbfd, data + off + 2, 1);
+ d->ex->charset = windres_get_8 (wrbfd, data + off + 3, 1);
off += 4;
}
- d->font = get_unicode (data + off, length - off, big_endian, &sublen);
+ d->font = get_unicode (wrbfd, data + off, length - off, &sublen);
off += sublen * 2 + 2;
}
@@ -537,20 +516,20 @@ bin_to_res_dialog (const unsigned char *data, unsigned long length,
for (i = 0; i < c; i++)
{
- struct dialog_control *dc;
+ rc_dialog_control *dc;
int datalen;
off = (off + 3) &~ 3;
- dc = (struct dialog_control *) res_alloc (sizeof *dc);
+ dc = (rc_dialog_control *) res_alloc (sizeof (rc_dialog_control));
if (d->ex == NULL)
{
if (length < off + 8)
toosmall (_("dialog control"));
- dc->style = get_32 (big_endian, data + off);
- dc->exstyle = get_32 (big_endian, data + off + 4);
+ dc->style = windres_get_32 (wrbfd, data + off, 4);
+ dc->exstyle = windres_get_32 (wrbfd, data + off + 4, 4);
dc->help = 0;
off += 8;
}
@@ -558,37 +537,37 @@ bin_to_res_dialog (const unsigned char *data, unsigned long length,
{
if (length < off + 12)
toosmall (_("dialogex control"));
- dc->help = get_32 (big_endian, data + off);
- dc->exstyle = get_32 (big_endian, data + off + 4);
- dc->style = get_32 (big_endian, data + off + 8);
+ dc->help = windres_get_32 (wrbfd, data + off, 4);
+ dc->exstyle = windres_get_32 (wrbfd, data + off + 4, 4);
+ dc->style = windres_get_32 (wrbfd, data + off + 8, 4);
off += 12;
}
- if (length < off + 10)
+ if (length < off + (d->ex != NULL ? 2 : 0) + 10)
toosmall (_("dialog control"));
- dc->x = get_16 (big_endian, data + off);
- dc->y = get_16 (big_endian, data + off + 2);
- dc->width = get_16 (big_endian, data + off + 4);
- dc->height = get_16 (big_endian, data + off + 6);
+ dc->x = windres_get_16 (wrbfd, data + off, 2);
+ dc->y = windres_get_16 (wrbfd, data + off + 2, 2);
+ dc->width = windres_get_16 (wrbfd, data + off + 4, 2);
+ dc->height = windres_get_16 (wrbfd, data + off + 6, 2);
if (d->ex != NULL)
- dc->id = get_32 (big_endian, data + off + 8);
+ dc->id = windres_get_32 (wrbfd, data + off + 8, 4);
else
- dc->id = get_16 (big_endian, data + off + 8);
+ dc->id = windres_get_16 (wrbfd, data + off + 8, 2);
off += 10 + (d->ex != NULL ? 2 : 0);
- sublen = get_resid (&dc->class, data + off, length - off, big_endian);
+ sublen = get_resid (wrbfd, &dc->class, data + off, length - off);
off += sublen;
- sublen = get_resid (&dc->text, data + off, length - off, big_endian);
+ sublen = get_resid (wrbfd, &dc->text, data + off, length - off);
off += sublen;
if (length < off + 2)
toosmall (_("dialog control end"));
- datalen = get_16 (big_endian, data + off);
+ datalen = windres_get_16 (wrbfd, data + off, 2);
off += 2;
if (datalen == 0)
@@ -600,8 +579,8 @@ bin_to_res_dialog (const unsigned char *data, unsigned long length,
if (length < off + datalen)
toosmall (_("dialog control data"));
- dc->data = ((struct rcdata_item *)
- res_alloc (sizeof (struct rcdata_item)));
+ dc->data = ((rc_rcdata_item *)
+ res_alloc (sizeof (rc_rcdata_item)));
dc->data->next = NULL;
dc->data->type = RCDATA_BUFFER;
dc->data->u.buffer.length = datalen;
@@ -615,7 +594,7 @@ bin_to_res_dialog (const unsigned char *data, unsigned long length,
pp = &dc->next;
}
- r = (struct res_resource *) res_alloc (sizeof *r);
+ r = (rc_res_resource *) res_alloc (sizeof *r);
r->type = RES_TYPE_DIALOG;
r->u.dialog = d;
@@ -624,15 +603,14 @@ bin_to_res_dialog (const unsigned char *data, unsigned long length,
/* Convert a stringtable resource from binary. */
-static struct res_resource *
-bin_to_res_string (const unsigned char *data, unsigned long length,
- int big_endian)
+static rc_res_resource *
+bin_to_res_string (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length)
{
- struct stringtable *st;
+ rc_stringtable *st;
int i;
- struct res_resource *r;
+ rc_res_resource *r;
- st = (struct stringtable *) res_alloc (sizeof *st);
+ st = (rc_stringtable *) res_alloc (sizeof (rc_stringtable));
for (i = 0; i < 16; i++)
{
@@ -640,7 +618,7 @@ bin_to_res_string (const unsigned char *data, unsigned long length,
if (length < 2)
toosmall (_("stringtable string length"));
- slen = get_16 (big_endian, data);
+ slen = windres_get_16 (wrbfd, data, 2);
st->strings[i].length = slen;
if (slen > 0)
@@ -655,14 +633,14 @@ bin_to_res_string (const unsigned char *data, unsigned long length,
st->strings[i].string = s;
for (j = 0; j < slen; j++)
- s[j] = get_16 (big_endian, data + 2 + j * 2);
+ s[j] = windres_get_16 (wrbfd, data + 2 + j * 2, 2);
}
data += 2 + 2 * slen;
length -= 2 + 2 * slen;
}
- r = (struct res_resource *) res_alloc (sizeof *r);
+ r = (rc_res_resource *) res_alloc (sizeof *r);
r->type = RES_TYPE_STRINGTABLE;
r->u.stringtable = st;
@@ -671,36 +649,37 @@ bin_to_res_string (const unsigned char *data, unsigned long length,
/* Convert a fontdir resource from binary. */
-static struct res_resource *
-bin_to_res_fontdir (const unsigned char *data, unsigned long length,
- int big_endian)
+static rc_res_resource *
+bin_to_res_fontdir (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length)
{
- int c, i;
- struct fontdir *first, **pp;
- struct res_resource *r;
+ rc_uint_type c, i;
+ rc_fontdir *first, **pp;
+ rc_res_resource *r;
if (length < 2)
toosmall (_("fontdir header"));
- c = get_16 (big_endian, data);
+ c = windres_get_16 (wrbfd, data, 2);
first = NULL;
pp = &first;
for (i = 0; i < c; i++)
{
- struct fontdir *fd;
+ const struct bin_fontdir_item *bfi;
+ rc_fontdir *fd;
unsigned int off;
if (length < 56)
toosmall (_("fontdir"));
- fd = (struct fontdir *) res_alloc (sizeof *fd);
- fd->index = get_16 (big_endian, data);
+ bfi = (const struct bin_fontdir_item *) data;
+ fd = (rc_fontdir *) res_alloc (sizeof *fd);
+ fd->index = windres_get_16 (wrbfd, bfi->index, 2);
/* To work out the length of the fontdir data, we must get the
length of the device name and face name strings, even though
- we don't store them in the fontdir structure. The
+ we don't store them in the rc_fontdir. The
documentation says that these are NULL terminated char
strings, not Unicode strings. */
@@ -732,7 +711,7 @@ bin_to_res_fontdir (const unsigned char *data, unsigned long length,
length -= off;
}
- r = (struct res_resource *) res_alloc (sizeof *r);
+ r = (rc_res_resource *) res_alloc (sizeof *r);
r->type = RES_TYPE_FONTDIR;
r->u.fontdir = first;
@@ -741,28 +720,27 @@ bin_to_res_fontdir (const unsigned char *data, unsigned long length,
/* Convert an accelerators resource from binary. */
-static struct res_resource *
-bin_to_res_accelerators (const unsigned char *data, unsigned long length,
- int big_endian)
+static rc_res_resource *
+bin_to_res_accelerators (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length)
{
- struct accelerator *first, **pp;
- struct res_resource *r;
+ rc_accelerator *first, **pp;
+ rc_res_resource *r;
first = NULL;
pp = &first;
while (1)
{
- struct accelerator *a;
+ rc_accelerator *a;
if (length < 8)
toosmall (_("accelerator"));
- a = (struct accelerator *) res_alloc (sizeof *a);
+ a = (rc_accelerator *) res_alloc (sizeof (rc_accelerator));
- a->flags = get_16 (big_endian, data);
- a->key = get_16 (big_endian, data + 2);
- a->id = get_16 (big_endian, data + 4);
+ a->flags = windres_get_16 (wrbfd, data, 2);
+ a->key = windres_get_16 (wrbfd, data + 2, 2);
+ a->id = windres_get_16 (wrbfd, data + 4, 2);
a->next = NULL;
*pp = a;
@@ -775,7 +753,7 @@ bin_to_res_accelerators (const unsigned char *data, unsigned long length,
length -= 8;
}
- r = (struct res_resource *) res_alloc (sizeof *r);
+ r = (rc_res_resource *) res_alloc (sizeof (rc_res_resource));
r->type = RES_TYPE_ACCELERATOR;
r->u.acc = first;
@@ -784,22 +762,22 @@ bin_to_res_accelerators (const unsigned char *data, unsigned long length,
/* Convert an rcdata resource from binary. */
-static struct res_resource *
-bin_to_res_rcdata (const unsigned char *data, unsigned long length,
- int big_endian ATTRIBUTE_UNUSED)
+static rc_res_resource *
+bin_to_res_rcdata (windres_bfd *wrbfd ATTRIBUTE_UNUSED, const bfd_byte *data,
+ rc_uint_type length, int rctyp)
{
- struct rcdata_item *ri;
- struct res_resource *r;
+ rc_rcdata_item *ri;
+ rc_res_resource *r;
- ri = (struct rcdata_item *) res_alloc (sizeof *ri);
+ ri = (rc_rcdata_item *) res_alloc (sizeof (rc_rcdata_item));
ri->next = NULL;
ri->type = RCDATA_BUFFER;
ri->u.buffer.length = length;
ri->u.buffer.data = data;
- r = (struct res_resource *) res_alloc (sizeof *r);
- r->type = RES_TYPE_RCDATA;
+ r = (rc_res_resource *) res_alloc (sizeof *r);
+ r->type = rctyp;
r->u.rcdata = ri;
return r;
@@ -807,22 +785,21 @@ bin_to_res_rcdata (const unsigned char *data, unsigned long length,
/* Convert a group cursor resource from binary. */
-static struct res_resource *
-bin_to_res_group_cursor (const unsigned char *data, unsigned long length,
- int big_endian)
+static rc_res_resource *
+bin_to_res_group_cursor (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length)
{
int type, c, i;
- struct group_cursor *first, **pp;
- struct res_resource *r;
+ rc_group_cursor *first, **pp;
+ rc_res_resource *r;
if (length < 6)
toosmall (_("group cursor header"));
- type = get_16 (big_endian, data + 2);
+ type = windres_get_16 (wrbfd, data + 2, 2);
if (type != 2)
fatal (_("unexpected group cursor type %d"), type);
- c = get_16 (big_endian, data + 4);
+ c = windres_get_16 (wrbfd, data + 4, 2);
data += 6;
length -= 6;
@@ -832,19 +809,19 @@ bin_to_res_group_cursor (const unsigned char *data, unsigned long length,
for (i = 0; i < c; i++)
{
- struct group_cursor *gc;
+ rc_group_cursor *gc;
if (length < 14)
toosmall (_("group cursor"));
- gc = (struct group_cursor *) res_alloc (sizeof *gc);
+ gc = (rc_group_cursor *) res_alloc (sizeof *gc);
- gc->width = get_16 (big_endian, data);
- gc->height = get_16 (big_endian, data + 2);
- gc->planes = get_16 (big_endian, data + 4);
- gc->bits = get_16 (big_endian, data + 6);
- gc->bytes = get_32 (big_endian, data + 8);
- gc->index = get_16 (big_endian, data + 12);
+ gc->width = windres_get_16 (wrbfd, data, 2);
+ gc->height = windres_get_16 (wrbfd, data + 2, 2);
+ gc->planes = windres_get_16 (wrbfd, data + 4, 2);
+ gc->bits = windres_get_16 (wrbfd, data + 6, 2);
+ gc->bytes = windres_get_32 (wrbfd, data + 8, 4);
+ gc->index = windres_get_16 (wrbfd, data + 12, 2);
gc->next = NULL;
*pp = gc;
@@ -854,7 +831,7 @@ bin_to_res_group_cursor (const unsigned char *data, unsigned long length,
length -= 14;
}
- r = (struct res_resource *) res_alloc (sizeof *r);
+ r = (rc_res_resource *) res_alloc (sizeof (rc_res_resource));
r->type = RES_TYPE_GROUP_CURSOR;
r->u.group_cursor = first;
@@ -863,22 +840,21 @@ bin_to_res_group_cursor (const unsigned char *data, unsigned long length,
/* Convert a group icon resource from binary. */
-static struct res_resource *
-bin_to_res_group_icon (const unsigned char *data, unsigned long length,
- int big_endian)
+static rc_res_resource *
+bin_to_res_group_icon (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length)
{
int type, c, i;
- struct group_icon *first, **pp;
- struct res_resource *r;
+ rc_group_icon *first, **pp;
+ rc_res_resource *r;
if (length < 6)
toosmall (_("group icon header"));
- type = get_16 (big_endian, data + 2);
+ type = windres_get_16 (wrbfd, data + 2, 2);
if (type != 1)
fatal (_("unexpected group icon type %d"), type);
- c = get_16 (big_endian, data + 4);
+ c = windres_get_16 (wrbfd, data + 4, 2);
data += 6;
length -= 6;
@@ -888,20 +864,20 @@ bin_to_res_group_icon (const unsigned char *data, unsigned long length,
for (i = 0; i < c; i++)
{
- struct group_icon *gi;
+ rc_group_icon *gi;
if (length < 14)
toosmall (_("group icon"));
- gi = (struct group_icon *) res_alloc (sizeof *gi);
+ gi = (rc_group_icon *) res_alloc (sizeof (rc_group_icon));
- gi->width = data[0];
- gi->height = data[1];
- gi->colors = data[2];
- gi->planes = get_16 (big_endian, data + 4);
- gi->bits = get_16 (big_endian, data + 6);
- gi->bytes = get_32 (big_endian, data + 8);
- gi->index = get_16 (big_endian, data + 12);
+ gi->width = windres_get_8 (wrbfd, data, 1);
+ gi->height = windres_get_8 (wrbfd, data + 1, 1);
+ gi->colors = windres_get_8 (wrbfd, data + 2, 1);
+ gi->planes = windres_get_16 (wrbfd, data + 4, 2);
+ gi->bits = windres_get_16 (wrbfd, data + 6, 2);
+ gi->bytes = windres_get_32 (wrbfd, data + 8, 4);
+ gi->index = windres_get_16 (wrbfd, data + 12, 2);
gi->next = NULL;
*pp = gi;
@@ -911,7 +887,7 @@ bin_to_res_group_icon (const unsigned char *data, unsigned long length,
length -= 14;
}
- r = (struct res_resource *) res_alloc (sizeof *r);
+ r = (rc_res_resource *) res_alloc (sizeof *r);
r->type = RES_TYPE_GROUP_ICON;
r->u.group_icon = first;
@@ -924,16 +900,17 @@ bin_to_res_group_icon (const unsigned char *data, unsigned long length,
to the type, and *OFF to the offset to the children. */
static void
-get_version_header (const unsigned char *data, unsigned long length,
- int big_endian, const char *key, unichar **pkey,
- int *len, int *vallen, int *type, int *off)
+get_version_header (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length,
+ const char *key, unichar **pkey,
+ rc_uint_type *len, rc_uint_type *vallen, rc_uint_type *type,
+ rc_uint_type *off)
{
if (length < 8)
toosmall (key);
- *len = get_16 (big_endian, data);
- *vallen = get_16 (big_endian, data + 2);
- *type = get_16 (big_endian, data + 4);
+ *len = windres_get_16 (wrbfd, data, 2);
+ *vallen = windres_get_16 (wrbfd, data + 2, 2);
+ *type = windres_get_16 (wrbfd, data + 4, 2);
*off = 6;
@@ -942,10 +919,10 @@ get_version_header (const unsigned char *data, unsigned long length,
if (key == NULL)
{
- int sublen;
+ rc_uint_type sublen;
- *pkey = get_unicode (data, length, big_endian, &sublen);
- *off += sublen * 2 + 2;
+ *pkey = get_unicode (wrbfd, data, length, &sublen);
+ *off += (sublen + 1) * sizeof (unichar);
}
else
{
@@ -953,7 +930,7 @@ get_version_header (const unsigned char *data, unsigned long length,
{
if (length < 2)
toosmall (key);
- if (get_16 (big_endian, data) != (unsigned char) *key)
+ if (windres_get_16 (wrbfd, data, 2) != (bfd_byte) *key)
fatal (_("unexpected version string"));
*off += 2;
@@ -972,25 +949,24 @@ get_version_header (const unsigned char *data, unsigned long length,
/* Convert a version resource from binary. */
-static struct res_resource *
-bin_to_res_version (const unsigned char *data, unsigned long length,
- int big_endian)
+static rc_res_resource *
+bin_to_res_version (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length)
{
- int verlen, vallen, type, off;
- struct fixed_versioninfo *fi;
- struct ver_info *first, **pp;
- struct versioninfo *v;
- struct res_resource *r;
+ rc_uint_type verlen, vallen, type, off;
+ rc_fixed_versioninfo *fi;
+ rc_ver_info *first, **pp;
+ rc_versioninfo *v;
+ rc_res_resource *r;
- get_version_header (data, length, big_endian, "VS_VERSION_INFO",
+ get_version_header (wrbfd, data, length, "VS_VERSION_INFO",
(unichar **) NULL, &verlen, &vallen, &type, &off);
if ((unsigned int) verlen != length)
fatal (_("version length %d does not match resource length %lu"),
- verlen, length);
+ (int) verlen, (unsigned long) length);
if (type != 0)
- fatal (_("unexpected version type %d"), type);
+ fatal (_("unexpected version type %d"), (int) type);
data += off;
length -= off;
@@ -1002,32 +978,32 @@ bin_to_res_version (const unsigned char *data, unsigned long length,
unsigned long signature, fiv;
if (vallen != 52)
- fatal (_("unexpected fixed version information length %d"), vallen);
+ fatal (_("unexpected fixed version information length %ld"), (long) vallen);
if (length < 52)
toosmall (_("fixed version info"));
- signature = get_32 (big_endian, data);
+ signature = windres_get_32 (wrbfd, data, 4);
if (signature != 0xfeef04bd)
fatal (_("unexpected fixed version signature %lu"), signature);
- fiv = get_32 (big_endian, data + 4);
+ fiv = windres_get_32 (wrbfd, data + 4, 4);
if (fiv != 0 && fiv != 0x10000)
fatal (_("unexpected fixed version info version %lu"), fiv);
- fi = (struct fixed_versioninfo *) res_alloc (sizeof *fi);
+ fi = (rc_fixed_versioninfo *) res_alloc (sizeof (rc_fixed_versioninfo));
- fi->file_version_ms = get_32 (big_endian, data + 8);
- fi->file_version_ls = get_32 (big_endian, data + 12);
- fi->product_version_ms = get_32 (big_endian, data + 16);
- fi->product_version_ls = get_32 (big_endian, data + 20);
- fi->file_flags_mask = get_32 (big_endian, data + 24);
- fi->file_flags = get_32 (big_endian, data + 28);
- fi->file_os = get_32 (big_endian, data + 32);
- fi->file_type = get_32 (big_endian, data + 36);
- fi->file_subtype = get_32 (big_endian, data + 40);
- fi->file_date_ms = get_32 (big_endian, data + 44);
- fi->file_date_ls = get_32 (big_endian, data + 48);
+ fi->file_version_ms = windres_get_32 (wrbfd, data + 8, 4);
+ fi->file_version_ls = windres_get_32 (wrbfd, data + 12, 4);
+ fi->product_version_ms = windres_get_32 (wrbfd, data + 16, 4);
+ fi->product_version_ls = windres_get_32 (wrbfd, data + 20, 4);
+ fi->file_flags_mask = windres_get_32 (wrbfd, data + 24, 4);
+ fi->file_flags = windres_get_32 (wrbfd, data + 28, 4);
+ fi->file_os = windres_get_32 (wrbfd, data + 32, 4);
+ fi->file_type = windres_get_32 (wrbfd, data + 36, 4);
+ fi->file_subtype = windres_get_32 (wrbfd, data + 40, 4);
+ fi->file_date_ms = windres_get_32 (wrbfd, data + 44, 4);
+ fi->file_date_ls = windres_get_32 (wrbfd, data + 48, 4);
data += 52;
length -= 52;
@@ -1038,38 +1014,38 @@ bin_to_res_version (const unsigned char *data, unsigned long length,
while (length > 0)
{
- struct ver_info *vi;
+ rc_ver_info *vi;
int ch;
if (length < 8)
toosmall (_("version var info"));
- vi = (struct ver_info *) res_alloc (sizeof *vi);
+ vi = (rc_ver_info *) res_alloc (sizeof (rc_ver_info));
- ch = get_16 (big_endian, data + 6);
+ ch = windres_get_16 (wrbfd, data + 6, 2);
if (ch == 'S')
{
- struct ver_stringinfo **ppvs;
+ rc_ver_stringinfo **ppvs;
vi->type = VERINFO_STRING;
- get_version_header (data, length, big_endian, "StringFileInfo",
+ get_version_header (wrbfd, data, length, "StringFileInfo",
(unichar **) NULL, &verlen, &vallen, &type,
&off);
if (vallen != 0)
- fatal (_("unexpected stringfileinfo value length %d"), vallen);
+ fatal (_("unexpected stringfileinfo value length %ld"), (long) vallen);
data += off;
length -= off;
- get_version_header (data, length, big_endian, (const char *) NULL,
+ get_version_header (wrbfd, data, length, (const char *) NULL,
&vi->u.string.language, &verlen, &vallen,
&type, &off);
if (vallen != 0)
- fatal (_("unexpected version stringtable value length %d"), vallen);
+ fatal (_("unexpected version stringtable value length %ld"), (long) vallen);
data += off;
length -= off;
@@ -1084,12 +1060,12 @@ bin_to_res_version (const unsigned char *data, unsigned long length,
while (verlen > 0)
{
- struct ver_stringinfo *vs;
- int subverlen, vslen, valoff;
+ rc_ver_stringinfo *vs;
+ rc_uint_type subverlen, vslen, valoff;
- vs = (struct ver_stringinfo *) res_alloc (sizeof *vs);
+ vs = (rc_ver_stringinfo *) res_alloc (sizeof *vs);
- get_version_header (data, length, big_endian,
+ get_version_header (wrbfd, data, length,
(const char *) NULL, &vs->key, &subverlen,
&vallen, &type, &off);
@@ -1098,13 +1074,13 @@ bin_to_res_version (const unsigned char *data, unsigned long length,
data += off;
length -= off;
- vs->value = get_unicode (data, length, big_endian, &vslen);
+ vs->value = get_unicode (wrbfd, data, length, &vslen);
valoff = vslen * 2 + 2;
valoff = (valoff + 3) &~ 3;
if (off + valoff != subverlen)
- fatal (_("unexpected version string length %d != %d + %d"),
- subverlen, off, valoff);
+ fatal (_("unexpected version string length %ld != %ld + %ld"),
+ (long) subverlen, (long) off, (long) valoff);
vs->next = NULL;
*ppvs = vs;
@@ -1114,29 +1090,29 @@ bin_to_res_version (const unsigned char *data, unsigned long length,
length -= valoff;
if (verlen < subverlen)
- fatal (_("unexpected version string length %d < %d"),
- verlen, subverlen);
+ fatal (_("unexpected version string length %ld < %ld"),
+ (long) verlen, (long) subverlen);
verlen -= subverlen;
}
}
else if (ch == 'V')
{
- struct ver_varinfo **ppvv;
+ rc_ver_varinfo **ppvv;
vi->type = VERINFO_VAR;
- get_version_header (data, length, big_endian, "VarFileInfo",
+ get_version_header (wrbfd, data, length, "VarFileInfo",
(unichar **) NULL, &verlen, &vallen, &type,
&off);
if (vallen != 0)
- fatal (_("unexpected varfileinfo value length %d"), vallen);
+ fatal (_("unexpected varfileinfo value length %ld"), (long) vallen);
data += off;
length -= off;
- get_version_header (data, length, big_endian, (const char *) NULL,
+ get_version_header (wrbfd, data, length, (const char *) NULL,
&vi->u.var.key, &verlen, &vallen, &type, &off);
data += off;
@@ -1147,15 +1123,15 @@ bin_to_res_version (const unsigned char *data, unsigned long length,
while (vallen > 0)
{
- struct ver_varinfo *vv;
+ rc_ver_varinfo *vv;
if (length < 4)
toosmall (_("version varfileinfo"));
- vv = (struct ver_varinfo *) res_alloc (sizeof *vv);
+ vv = (rc_ver_varinfo *) res_alloc (sizeof (rc_ver_varinfo));
- vv->language = get_16 (big_endian, data);
- vv->charset = get_16 (big_endian, data + 2);
+ vv->language = windres_get_16 (wrbfd, data, 2);
+ vv->charset = windres_get_16 (wrbfd, data + 2, 2);
vv->next = NULL;
*ppvv = vv;
@@ -1165,7 +1141,7 @@ bin_to_res_version (const unsigned char *data, unsigned long length,
length -= 4;
if (vallen < 4)
- fatal (_("unexpected version value length %d"), vallen);
+ fatal (_("unexpected version value length %ld"), (long) vallen);
vallen -= 4;
}
@@ -1178,11 +1154,11 @@ bin_to_res_version (const unsigned char *data, unsigned long length,
pp = &vi->next;
}
- v = (struct versioninfo *) res_alloc (sizeof *v);
+ v = (rc_versioninfo *) res_alloc (sizeof (rc_versioninfo));
v->fixed = fi;
v->var = first;
- r = (struct res_resource *) res_alloc (sizeof *r);
+ r = (rc_res_resource *) res_alloc (sizeof *r);
r->type = RES_TYPE_VERSIONINFO;
r->u.versioninfo = v;
@@ -1191,1128 +1167,968 @@ bin_to_res_version (const unsigned char *data, unsigned long length,
/* Convert an arbitrary user defined resource from binary. */
-static struct res_resource *
-bin_to_res_userdata (const unsigned char *data, unsigned long length,
- int big_endian ATTRIBUTE_UNUSED)
+static rc_res_resource *
+bin_to_res_userdata (windres_bfd *wrbfd ATTRIBUTE_UNUSED, const bfd_byte *data,
+ rc_uint_type length)
{
- struct rcdata_item *ri;
- struct res_resource *r;
+ rc_rcdata_item *ri;
+ rc_res_resource *r;
- ri = (struct rcdata_item *) res_alloc (sizeof *ri);
+ ri = (rc_rcdata_item *) res_alloc (sizeof (rc_rcdata_item));
ri->next = NULL;
ri->type = RCDATA_BUFFER;
ri->u.buffer.length = length;
ri->u.buffer.data = data;
- r = (struct res_resource *) res_alloc (sizeof *r);
+ r = (rc_res_resource *) res_alloc (sizeof *r);
r->type = RES_TYPE_USERDATA;
r->u.rcdata = ri;
return r;
}
-/* Macros to swap out values. */
+static rc_res_resource *
+bin_to_res_toolbar (windres_bfd *wrbfd, const bfd_byte *data, rc_uint_type length)
+{
+ rc_toolbar *ri;
+ rc_res_resource *r;
+ rc_uint_type i;
+
+ ri = (rc_toolbar *) res_alloc (sizeof (rc_toolbar));
+ ri->button_width = windres_get_32 (wrbfd, data, 4);
+ ri->button_height = windres_get_32 (wrbfd, data + 4, 4);
+ ri->nitems = windres_get_32 (wrbfd, data + 8, 4);
+ ri->items = NULL;
+
+ data += 12;
+ length -= 12;
+ for (i=0 ; i < ri->nitems; i++)
+ {
+ rc_toolbar_item *it;
+ it = (rc_toolbar_item *) res_alloc (sizeof (rc_toolbar_item));
+ it->id.named = 0;
+ it->id.u.id = (int) windres_get_32 (wrbfd, data, 4);
+ it->prev = it->next = NULL;
+ data += 4;
+ length -= 4;
+ if(ri->items) {
+ rc_toolbar_item *ii = ri->items;
+ while (ii->next != NULL)
+ ii = ii->next;
+ it->prev = ii;
+ ii->next = it;
+ }
+ else
+ ri->items = it;
+ }
+ r = (rc_res_resource *) res_alloc (sizeof *r);
+ r->type = RES_TYPE_TOOLBAR;
+ r->u.toolbar = ri;
+ return r;
+}
-#define put_8(v, s) (*((unsigned char *) (s)) = (unsigned char) (v))
-#define put_16(be, v, s) ((be) ? bfd_putb16 ((v), (s)) : bfd_putl16 ((v), (s)))
-#define put_32(be, v, s) ((be) ? bfd_putb32 ((v), (s)) : bfd_putl32 ((v), (s)))
/* Local functions used to convert resources to binary format. */
-static void dword_align_bin (struct bindata ***, unsigned long *);
-static struct bindata *resid_to_bin (struct res_id, int);
-static struct bindata *unicode_to_bin (const unichar *, int);
-static struct bindata *res_to_bin_accelerator
- (const struct accelerator *, int);
-static struct bindata *res_to_bin_cursor
- (const struct cursor *, int);
-static struct bindata *res_to_bin_group_cursor
- (const struct group_cursor *, int);
-static struct bindata *res_to_bin_dialog
- (const struct dialog *, int);
-static struct bindata *res_to_bin_fontdir
- (const struct fontdir *, int);
-static struct bindata *res_to_bin_group_icon
- (const struct group_icon *, int);
-static struct bindata *res_to_bin_menu
- (const struct menu *, int);
-static struct bindata *res_to_bin_menuitems
- (const struct menuitem *, int);
-static struct bindata *res_to_bin_menuexitems
- (const struct menuitem *, int);
-static struct bindata *res_to_bin_rcdata
- (const struct rcdata_item *, int);
-static struct bindata *res_to_bin_stringtable
- (const struct stringtable *, int);
-static struct bindata *string_to_unicode_bin (const char *, int);
-static struct bindata *res_to_bin_versioninfo
- (const struct versioninfo *, int);
-static struct bindata *res_to_bin_generic
- (unsigned long, const unsigned char *);
+static rc_uint_type resid_to_bin (windres_bfd *, rc_uint_type, rc_res_id);
+static rc_uint_type unicode_to_bin (windres_bfd *, rc_uint_type, const unichar *);
+static rc_uint_type res_to_bin_accelerator (windres_bfd *, rc_uint_type, const rc_accelerator *);
+static rc_uint_type res_to_bin_cursor (windres_bfd *, rc_uint_type, const rc_cursor *);
+static rc_uint_type res_to_bin_group_cursor (windres_bfd *, rc_uint_type, const rc_group_cursor *);
+static rc_uint_type res_to_bin_dialog (windres_bfd *, rc_uint_type, const rc_dialog *);
+static rc_uint_type res_to_bin_fontdir (windres_bfd *, rc_uint_type, const rc_fontdir *);
+static rc_uint_type res_to_bin_group_icon (windres_bfd *, rc_uint_type, const rc_group_icon *);
+static rc_uint_type res_to_bin_menu (windres_bfd *, rc_uint_type, const rc_menu *);
+static rc_uint_type res_to_bin_menuitems (windres_bfd *, rc_uint_type, const rc_menuitem *);
+static rc_uint_type res_to_bin_menuexitems (windres_bfd *, rc_uint_type, const rc_menuitem *);
+static rc_uint_type res_to_bin_rcdata (windres_bfd *, rc_uint_type, const rc_rcdata_item *);
+static rc_uint_type res_to_bin_stringtable (windres_bfd *, rc_uint_type, const rc_stringtable *);
+static rc_uint_type string_to_unicode_bin (windres_bfd *, rc_uint_type, const char *);
+static rc_uint_type res_to_bin_toolbar (windres_bfd *, rc_uint_type, rc_toolbar *tb);
+static rc_uint_type res_to_bin_versioninfo (windres_bfd *, rc_uint_type, const rc_versioninfo *);
+static rc_uint_type res_to_bin_generic (windres_bfd *, rc_uint_type, rc_uint_type,
+ const bfd_byte *);
/* Convert a resource to binary. */
-struct bindata *
-res_to_bin (const struct res_resource *res, int big_endian)
+rc_uint_type
+res_to_bin (windres_bfd *wrbfd, rc_uint_type off, const rc_res_resource *res)
{
switch (res->type)
{
- default:
- abort ();
case RES_TYPE_BITMAP:
case RES_TYPE_FONT:
case RES_TYPE_ICON:
case RES_TYPE_MESSAGETABLE:
- return res_to_bin_generic (res->u.data.length, res->u.data.data);
+ return res_to_bin_generic (wrbfd, off, res->u.data.length, res->u.data.data);
case RES_TYPE_ACCELERATOR:
- return res_to_bin_accelerator (res->u.acc, big_endian);
+ return res_to_bin_accelerator (wrbfd, off, res->u.acc);
case RES_TYPE_CURSOR:
- return res_to_bin_cursor (res->u.cursor, big_endian);
+ return res_to_bin_cursor (wrbfd, off, res->u.cursor);
case RES_TYPE_GROUP_CURSOR:
- return res_to_bin_group_cursor (res->u.group_cursor, big_endian);
+ return res_to_bin_group_cursor (wrbfd, off, res->u.group_cursor);
case RES_TYPE_DIALOG:
- return res_to_bin_dialog (res->u.dialog, big_endian);
+ return res_to_bin_dialog (wrbfd, off, res->u.dialog);
case RES_TYPE_FONTDIR:
- return res_to_bin_fontdir (res->u.fontdir, big_endian);
+ return res_to_bin_fontdir (wrbfd, off, res->u.fontdir);
case RES_TYPE_GROUP_ICON:
- return res_to_bin_group_icon (res->u.group_icon, big_endian);
+ return res_to_bin_group_icon (wrbfd, off, res->u.group_icon);
case RES_TYPE_MENU:
- return res_to_bin_menu (res->u.menu, big_endian);
- case RES_TYPE_RCDATA:
- return res_to_bin_rcdata (res->u.rcdata, big_endian);
+ return res_to_bin_menu (wrbfd, off, res->u.menu);
case RES_TYPE_STRINGTABLE:
- return res_to_bin_stringtable (res->u.stringtable, big_endian);
- case RES_TYPE_USERDATA:
- return res_to_bin_rcdata (res->u.rcdata, big_endian);
+ return res_to_bin_stringtable (wrbfd, off, res->u.stringtable);
case RES_TYPE_VERSIONINFO:
- return res_to_bin_versioninfo (res->u.versioninfo, big_endian);
+ return res_to_bin_versioninfo (wrbfd, off, res->u.versioninfo);
+ case RES_TYPE_TOOLBAR:
+ return res_to_bin_toolbar (wrbfd, off, res->u.toolbar);
+ case RES_TYPE_USERDATA:
+ case RES_TYPE_RCDATA:
+ default:
+ return res_to_bin_rcdata (wrbfd, off, res->u.rcdata);
}
}
-/* Align to a 32 bit boundary. PPP points to the of a list of bindata
- structures. LENGTH points to the length of the structures. If
- necessary, this adds a new bindata to bring length up to a 32 bit
- boundary. It updates *PPP and *LENGTH. */
-
-static void
-dword_align_bin (struct bindata ***ppp, unsigned long *length)
-{
- int add;
- struct bindata *d;
-
- if ((*length & 3) == 0)
- return;
-
- add = 4 - (*length & 3);
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = add;
- d->data = (unsigned char *) reswr_alloc (add);
- memset (d->data, 0, add);
-
- d->next = NULL;
- **ppp = d;
- *ppp = &(**ppp)->next;
-
- *length += add;
-}
-
/* Convert a resource ID to binary. This always returns exactly one
bindata structure. */
-static struct bindata *
-resid_to_bin (struct res_id id, int big_endian)
+static rc_uint_type
+resid_to_bin (windres_bfd *wrbfd, rc_uint_type off, rc_res_id id)
{
- struct bindata *d;
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
-
if (! id.named)
{
- d->length = 4;
- d->data = (unsigned char *) reswr_alloc (d->length);
- put_16 (big_endian, 0xffff, d->data);
- put_16 (big_endian, id.u.id, d->data + 2);
+ if (wrbfd)
+ {
+ struct bin_res_id bri;
+
+ windres_put_16 (wrbfd, bri.sig, 0xffff);
+ windres_put_16 (wrbfd, bri.id, id.u.id);
+ set_windres_bfd_content (wrbfd, &bri, off, BIN_RES_ID);
+ }
+ off += BIN_RES_ID;
}
else
{
- int i;
-
- d->length = id.u.n.length * 2 + 2;
- d->data = (unsigned char *) reswr_alloc (d->length);
- for (i = 0; i < id.u.n.length; i++)
- put_16 (big_endian, id.u.n.name[i], d->data + i * 2);
- put_16 (big_endian, 0, d->data + i * 2);
+ rc_uint_type len = (id.u.n.name ? unichar_len (id.u.n.name) : 0);
+ if (wrbfd)
+ {
+ bfd_byte *d = (bfd_byte *) reswr_alloc ((len + 1) * sizeof (unichar));
+ rc_uint_type i;
+ for (i = 0; i < len; i++)
+ windres_put_16 (wrbfd, d + (i * sizeof (unichar)), id.u.n.name[i]);
+ windres_put_16 (wrbfd, d + (len * sizeof (unichar)), 0);
+ set_windres_bfd_content (wrbfd, d, off, (len + 1) * sizeof (unichar));
}
-
- d->next = NULL;
-
- return d;
+ off += (rc_uint_type) ((len + 1) * sizeof (unichar));
+ }
+ return off;
}
/* Convert a null terminated unicode string to binary. This always
returns exactly one bindata structure. */
-static struct bindata *
-unicode_to_bin (const unichar *str, int big_endian)
+static rc_uint_type
+unicode_to_bin (windres_bfd *wrbfd, rc_uint_type off, const unichar *str)
{
- int len;
- struct bindata *d;
+ rc_uint_type len = 0;
- len = 0;
if (str != NULL)
- {
- const unichar *s;
-
- for (s = str; *s != 0; s++)
- ++len;
- }
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = len * 2 + 2;
- d->data = (unsigned char *) reswr_alloc (d->length);
+ len = unichar_len (str);
- if (str == NULL)
- put_16 (big_endian, 0, d->data);
- else
+ if (wrbfd)
{
- const unichar *s;
- int i;
-
- for (s = str, i = 0; *s != 0; s++, i++)
- put_16 (big_endian, *s, d->data + i * 2);
- put_16 (big_endian, 0, d->data + i * 2);
+ bfd_byte *d;
+ rc_uint_type i;
+ d = (bfd_byte *) reswr_alloc ( (len + 1) * sizeof (unichar));
+ for (i = 0; i < len; i++)
+ windres_put_16 (wrbfd, d + (i * sizeof (unichar)), str[i]);
+ windres_put_16 (wrbfd, d + (len * sizeof (unichar)), 0);
+ set_windres_bfd_content (wrbfd, d, off, (len + 1) * sizeof (unichar));
}
+ off += (rc_uint_type) ((len + 1) * sizeof (unichar));
- d->next = NULL;
-
- return d;
+ return off;
}
/* Convert an accelerator resource to binary. */
-static struct bindata *
-res_to_bin_accelerator (const struct accelerator *accelerators,
- int big_endian)
+static rc_uint_type
+res_to_bin_accelerator (windres_bfd *wrbfd, rc_uint_type off,
+ const rc_accelerator *accelerators)
{
- struct bindata *first, **pp;
- const struct accelerator *a;
+ bindata *first, **pp;
+ const rc_accelerator *a;
first = NULL;
pp = &first;
for (a = accelerators; a != NULL; a = a->next)
{
- struct bindata *d;
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = 8;
- d->data = (unsigned char *) reswr_alloc (d->length);
-
- put_16 (big_endian,
- a->flags | (a->next != NULL ? 0 : ACC_LAST),
- d->data);
- put_16 (big_endian, a->key, d->data + 2);
- put_16 (big_endian, a->id, d->data + 4);
- put_16 (big_endian, 0, d->data + 6);
-
- d->next = NULL;
- *pp = d;
- pp = &d->next;
- }
+ if (wrbfd)
+ {
+ struct bin_accelerator ba;
- return first;
+ windres_put_16 (wrbfd, ba.flags, a->flags | (a->next != NULL ? 0 : ACC_LAST));
+ windres_put_16 (wrbfd, ba.key, a->key);
+ windres_put_16 (wrbfd, ba.id, a->id);
+ windres_put_16 (wrbfd, ba.pad, 0);
+ set_windres_bfd_content (wrbfd, &ba, off, BIN_ACCELERATOR_SIZE);
+ }
+ off += BIN_ACCELERATOR_SIZE;
+ }
+ return off;
}
/* Convert a cursor resource to binary. */
-static struct bindata *
-res_to_bin_cursor (const struct cursor *c, int big_endian)
+static rc_uint_type
+res_to_bin_cursor (windres_bfd *wrbfd, rc_uint_type off, const rc_cursor *c)
{
- struct bindata *d;
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = 4;
- d->data = (unsigned char *) reswr_alloc (d->length);
-
- put_16 (big_endian, c->xhotspot, d->data);
- put_16 (big_endian, c->yhotspot, d->data + 2);
-
- d->next = (struct bindata *) reswr_alloc (sizeof *d);
- d->next->length = c->length;
- d->next->data = (unsigned char *) c->data;
- d->next->next = NULL;
+ if (wrbfd)
+ {
+ struct bin_cursor bc;
- return d;
+ windres_put_16 (wrbfd, bc.xhotspot, c->xhotspot);
+ windres_put_16 (wrbfd, bc.yhotspot, c->yhotspot);
+ set_windres_bfd_content (wrbfd, &bc, off, BIN_CURSOR_SIZE);
+ if (c->length)
+ set_windres_bfd_content (wrbfd, c->data, off + BIN_CURSOR_SIZE, c->length);
+ }
+ off = (off + BIN_CURSOR_SIZE + (rc_uint_type) c->length);
+ return off;
}
/* Convert a group cursor resource to binary. */
-static struct bindata *
-res_to_bin_group_cursor (const struct group_cursor *group_cursors,
- int big_endian)
+static rc_uint_type
+res_to_bin_group_cursor (windres_bfd *wrbfd, rc_uint_type off,
+ const rc_group_cursor *group_cursors)
{
- struct bindata *first, **pp;
- int c;
- const struct group_cursor *gc;
-
- first = (struct bindata *) reswr_alloc (sizeof *first);
- first->length = 6;
- first->data = (unsigned char *) reswr_alloc (first->length);
-
- put_16 (big_endian, 0, first->data);
- put_16 (big_endian, 2, first->data + 2);
+ int c = 0;
+ const rc_group_cursor *gc;
+ struct bin_group_cursor bgc;
+ struct bin_group_cursor_item bgci;
+ rc_uint_type start = off;
- first->next = NULL;
- pp = &first->next;
+ off += BIN_GROUP_CURSOR_SIZE;
- c = 0;
- for (gc = group_cursors; gc != NULL; gc = gc->next)
+ for (c = 0, gc = group_cursors; gc != NULL; gc = gc->next, c++)
{
- struct bindata *d;
-
- ++c;
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = 14;
- d->data = (unsigned char *) reswr_alloc (d->length);
-
- put_16 (big_endian, gc->width, d->data);
- put_16 (big_endian, gc->height, d->data + 2);
- put_16 (big_endian, gc->planes, d->data + 4);
- put_16 (big_endian, gc->bits, d->data + 6);
- put_32 (big_endian, gc->bytes, d->data + 8);
- put_16 (big_endian, gc->index, d->data + 12);
-
- d->next = NULL;
- *pp = d;
- pp = &d->next;
+ if (wrbfd)
+ {
+ windres_put_16 (wrbfd, bgci.width, gc->width);
+ windres_put_16 (wrbfd, bgci.height, gc->height);
+ windres_put_16 (wrbfd, bgci.planes, gc->planes);
+ windres_put_16 (wrbfd, bgci.bits, gc->bits);
+ windres_put_32 (wrbfd, bgci.bytes, gc->bytes);
+ windres_put_16 (wrbfd, bgci.index, gc->index);
+ set_windres_bfd_content (wrbfd, &bgci, off, BIN_GROUP_CURSOR_ITEM_SIZE);
}
- put_16 (big_endian, c, first->data + 4);
-
- return first;
+ off += BIN_GROUP_CURSOR_ITEM_SIZE;
+ }
+ if (wrbfd)
+ {
+ windres_put_16 (wrbfd, bgc.sig1, 0);
+ windres_put_16 (wrbfd, bgc.sig2, 2);
+ windres_put_16 (wrbfd, bgc.nitems, c);
+ set_windres_bfd_content (wrbfd, &bgc, start, BIN_GROUP_CURSOR_SIZE);
+ }
+ return off;
}
/* Convert a dialog resource to binary. */
-static struct bindata *
-res_to_bin_dialog (const struct dialog *dialog, int big_endian)
+static rc_uint_type
+res_to_bin_dialog (windres_bfd *wrbfd, rc_uint_type off, const rc_dialog *dialog)
{
+ rc_uint_type off_delta;
+ rc_uint_type start, marker;
int dialogex;
- struct bindata *first, **pp;
- unsigned long length;
- int off, c;
- struct dialog_control *dc;
+ int c;
+ rc_dialog_control *dc;
+ struct bin_dialogex bdx;
+ struct bin_dialog bd;
+ off_delta = off;
+ start = off;
dialogex = extended_dialog (dialog);
- first = (struct bindata *) reswr_alloc (sizeof *first);
- first->length = dialogex ? 26 : 18;
- first->data = (unsigned char *) reswr_alloc (first->length);
-
- length = first->length;
-
+ if (wrbfd)
+ {
if (! dialogex)
{
- put_32 (big_endian, dialog->style, first->data);
- put_32 (big_endian, dialog->exstyle, first->data + 4);
- off = 8;
+ windres_put_32 (wrbfd, bd.style, dialog->style);
+ windres_put_32 (wrbfd, bd.exstyle, dialog->exstyle);
+ windres_put_16 (wrbfd, bd.x, dialog->x);
+ windres_put_16 (wrbfd, bd.y, dialog->y);
+ windres_put_16 (wrbfd, bd.width, dialog->width);
+ windres_put_16 (wrbfd, bd.height, dialog->height);
}
else
{
- put_16 (big_endian, 1, first->data);
- put_16 (big_endian, 0xffff, first->data + 2);
-
- if (dialog->ex == NULL)
- put_32 (big_endian, 0, first->data + 4);
- else
- put_32 (big_endian, dialog->ex->help, first->data + 4);
- put_32 (big_endian, dialog->exstyle, first->data + 8);
- put_32 (big_endian, dialog->style, first->data + 12);
- off = 16;
+ windres_put_16 (wrbfd, bdx.sig1, 1);
+ windres_put_16 (wrbfd, bdx.sig2, 0xffff);
+ windres_put_32 (wrbfd, bdx.help, (dialog->ex ? dialog->ex->help : 0));
+ windres_put_32 (wrbfd, bdx.exstyle, dialog->exstyle);
+ windres_put_32 (wrbfd, bdx.style, dialog->style);
+ windres_put_16 (wrbfd, bdx.x, dialog->x);
+ windres_put_16 (wrbfd, bdx.y, dialog->y);
+ windres_put_16 (wrbfd, bdx.width, dialog->width);
+ windres_put_16 (wrbfd, bdx.height, dialog->height);
+ }
}
- put_16 (big_endian, dialog->x, first->data + off + 2);
- put_16 (big_endian, dialog->y, first->data + off + 4);
- put_16 (big_endian, dialog->width, first->data + off + 6);
- put_16 (big_endian, dialog->height, first->data + off + 8);
-
- pp = &first->next;
-
- *pp = resid_to_bin (dialog->menu, big_endian);
- length += (*pp)->length;
- pp = &(*pp)->next;
-
- *pp = resid_to_bin (dialog->class, big_endian);
- length += (*pp)->length;
- pp = &(*pp)->next;
+ off += (dialogex != 0 ? BIN_DIALOGEX_SIZE : BIN_DIALOG_SIZE);
- *pp = unicode_to_bin (dialog->caption, big_endian);
- length += (*pp)->length;
- pp = &(*pp)->next;
+ off = resid_to_bin (wrbfd, off, dialog->menu);
+ off = resid_to_bin (wrbfd, off, dialog->class);
+ off = unicode_to_bin (wrbfd, off, dialog->caption);
if ((dialog->style & DS_SETFONT) != 0)
{
- struct bindata *d;
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = dialogex ? 6 : 2;
- d->data = (unsigned char *) reswr_alloc (d->length);
-
- length += d->length;
-
- put_16 (big_endian, dialog->pointsize, d->data);
-
- if (dialogex)
+ if (wrbfd)
{
- if (dialog->ex == NULL)
+ if (! dialogex)
{
- put_16 (big_endian, 0, d->data + 2);
- put_8 (0, d->data + 4);
- put_8 (1, d->data + 5);
+ struct bin_dialogfont bdf;
+ windres_put_16 (wrbfd, bdf.pointsize, dialog->pointsize);
+ set_windres_bfd_content (wrbfd, &bdf, off, BIN_DIALOGFONT_SIZE);
}
else
{
- put_16 (big_endian, dialog->ex->weight, d->data + 2);
- put_8 (dialog->ex->italic, d->data + 4);
- put_8 (dialog->ex->charset, d->data + 5);
+ struct bin_dialogexfont bdxf;
+ windres_put_16 (wrbfd, bdxf.pointsize, dialog->pointsize);
+ windres_put_16 (wrbfd, bdxf.weight, (dialog->ex == NULL ? 0 : dialog->ex->weight));
+ windres_put_8 (wrbfd, bdxf.italic, (dialog->ex == NULL ? 0 : dialog->ex->italic));
+ windres_put_8 (wrbfd, bdxf.charset, (dialog->ex == NULL ? 1 : dialog->ex->charset));
+ set_windres_bfd_content (wrbfd, &bdxf, off, BIN_DIALOGEXFONT_SIZE);
}
}
-
- *pp = d;
- pp = &d->next;
-
- *pp = unicode_to_bin (dialog->font, big_endian);
- length += (*pp)->length;
- pp = &(*pp)->next;
+ off += (dialogex ? BIN_DIALOGEXFONT_SIZE : BIN_DIALOGFONT_SIZE);
+ off = unicode_to_bin (wrbfd, off, dialog->font);
}
-
- c = 0;
- for (dc = dialog->controls; dc != NULL; dc = dc->next)
+ for (c = 0, dc = dialog->controls; dc != NULL; dc = dc->next, c++)
{
- struct bindata *d;
- int dcoff;
-
- ++c;
-
- dword_align_bin (&pp, &length);
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = dialogex ? 24 : 18;
- d->data = (unsigned char *) reswr_alloc (d->length);
-
- length += d->length;
+ bfd_byte dc_rclen[2];
+ off += (4 - ((off - off_delta) & 3)) & 3;
+ if (wrbfd)
+ {
if (! dialogex)
{
- put_32 (big_endian, dc->style, d->data);
- put_32 (big_endian, dc->exstyle, d->data + 4);
- dcoff = 8;
+ struct bin_dialog_control bdc;
+
+ windres_put_32 (wrbfd, bdc.style, dc->style);
+ windres_put_32 (wrbfd, bdc.exstyle, dc->exstyle);
+ windres_put_16 (wrbfd, bdc.x, dc->x);
+ windres_put_16 (wrbfd, bdc.y, dc->y);
+ windres_put_16 (wrbfd, bdc.width, dc->width);
+ windres_put_16 (wrbfd, bdc.height, dc->height);
+ windres_put_16 (wrbfd, bdc.id, dc->id);
+ set_windres_bfd_content (wrbfd, &bdc, off, BIN_DIALOG_CONTROL_SIZE);
}
else
{
- put_32 (big_endian, dc->help, d->data);
- put_32 (big_endian, dc->exstyle, d->data + 4);
- put_32 (big_endian, dc->style, d->data + 8);
- dcoff = 12;
- }
-
- put_16 (big_endian, dc->x, d->data + dcoff);
- put_16 (big_endian, dc->y, d->data + dcoff + 2);
- put_16 (big_endian, dc->width, d->data + dcoff + 4);
- put_16 (big_endian, dc->height, d->data + dcoff + 6);
-
- if (dialogex)
- put_32 (big_endian, dc->id, d->data + dcoff + 8);
- else
- put_16 (big_endian, dc->id, d->data + dcoff + 8);
-
- *pp = d;
- pp = &d->next;
-
- *pp = resid_to_bin (dc->class, big_endian);
- length += (*pp)->length;
- pp = &(*pp)->next;
-
- *pp = resid_to_bin (dc->text, big_endian);
- length += (*pp)->length;
- pp = &(*pp)->next;
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = 2;
- d->data = (unsigned char *) reswr_alloc (d->length);
+ struct bin_dialogex_control bdc;
+
+ windres_put_32 (wrbfd, bdc.help, dc->help);
+ windres_put_32 (wrbfd, bdc.exstyle, dc->exstyle);
+ windres_put_32 (wrbfd, bdc.style, dc->style);
+ windres_put_16 (wrbfd, bdc.x, dc->x);
+ windres_put_16 (wrbfd, bdc.y, dc->y);
+ windres_put_16 (wrbfd, bdc.width, dc->width);
+ windres_put_16 (wrbfd, bdc.height, dc->height);
+ windres_put_32 (wrbfd, bdc.id, dc->id);
+ set_windres_bfd_content (wrbfd, &bdc, off, BIN_DIALOGEX_CONTROL_SIZE);
+ }
+ }
+ off += (dialogex != 0 ? BIN_DIALOGEX_CONTROL_SIZE : BIN_DIALOG_CONTROL_SIZE);
- length += 2;
+ off = resid_to_bin (wrbfd, off, dc->class);
+ off = resid_to_bin (wrbfd, off, dc->text);
- d->next = NULL;
- *pp = d;
- pp = &d->next;
+ marker = off; /* Save two bytes for size of optional data. */
+ off += 2;
if (dc->data == NULL)
- put_16 (big_endian, 0, d->data);
+ {
+ if (wrbfd)
+ windres_put_16 (wrbfd, dc_rclen, 0);
+ }
else
{
- unsigned long sublen;
-
- dword_align_bin (&pp, &length);
-
- *pp = res_to_bin_rcdata (dc->data, big_endian);
- sublen = 0;
- while (*pp != NULL)
- {
- sublen += (*pp)->length;
- pp = &(*pp)->next;
+ rc_uint_type saved_off = off;
+ rc_uint_type old_off;
+ off += (4 - ((off - off_delta) & 3)) & 3;
+
+ old_off = off;
+ off = res_to_bin_rcdata (wrbfd, off, dc->data);
+ if ((off - old_off) == 0)
+ old_off = off = saved_off;
+ if (wrbfd)
+ windres_put_16 (wrbfd, dc_rclen, off - old_off);
}
-
- put_16 (big_endian, sublen, d->data);
-
- length += sublen;
+ if (wrbfd)
+ set_windres_bfd_content (wrbfd, dc_rclen, marker, 2);
}
+
+ if (wrbfd)
+ {
+ windres_put_16 (wrbfd, (dialogex != 0 ? bdx.off : bd.off), c);
+ if (! dialogex)
+ set_windres_bfd_content (wrbfd, &bd, start, BIN_DIALOG_SIZE);
+ else
+ set_windres_bfd_content (wrbfd, &bdx, start, BIN_DIALOGEX_SIZE);
}
- put_16 (big_endian, c, first->data + off);
- return first;
+ return off;
}
/* Convert a fontdir resource to binary. */
-
-static struct bindata *
-res_to_bin_fontdir (const struct fontdir *fontdirs, int big_endian)
+static rc_uint_type
+res_to_bin_fontdir (windres_bfd *wrbfd, rc_uint_type off, const rc_fontdir *fontdirs)
{
- struct bindata *first, **pp;
+ rc_uint_type start;
int c;
- const struct fontdir *fd;
+ const rc_fontdir *fd;
- first = (struct bindata *) reswr_alloc (sizeof *first);
- first->length = 2;
- first->data = (unsigned char *) reswr_alloc (first->length);
+ start = off;
+ off += 2;
- first->next = NULL;
- pp = &first->next;
-
- c = 0;
- for (fd = fontdirs; fd != NULL; fd = fd->next)
+ for (c = 0, fd = fontdirs; fd != NULL; fd = fd->next, c++)
{
- struct bindata *d;
-
- ++c;
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = 2;
- d->data = (unsigned char *) reswr_alloc (d->length);
-
- put_16 (big_endian, fd->index, d->data);
-
- *pp = d;
- pp = &d->next;
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = fd->length;
- d->data = (unsigned char *) fd->data;
-
- d->next = NULL;
- *pp = d;
- pp = &d->next;
+ if (wrbfd)
+ {
+ bfd_byte d[2];
+ windres_put_16 (wrbfd, d, fd->index);
+ set_windres_bfd_content (wrbfd, d, off, 2);
+ if (fd->length)
+ set_windres_bfd_content (wrbfd, fd->data, off + 2, fd->length);
+ }
+ off += (rc_uint_type) fd->length + 2;
}
- put_16 (big_endian, c, first->data);
-
- return first;
+ if (wrbfd)
+ {
+ bfd_byte d[2];
+ windres_put_16 (wrbfd, d, c);
+ set_windres_bfd_content (wrbfd, d, start, 2);
+ }
+ return off;
}
/* Convert a group icon resource to binary. */
-static struct bindata *
-res_to_bin_group_icon (const struct group_icon *group_icons, int big_endian)
+static rc_uint_type
+res_to_bin_group_icon (windres_bfd *wrbfd, rc_uint_type off, const rc_group_icon *group_icons)
{
- struct bindata *first, **pp;
+ rc_uint_type start;
+ struct bin_group_icon bgi;
int c;
- const struct group_icon *gi;
-
- first = (struct bindata *) reswr_alloc (sizeof *first);
- first->length = 6;
- first->data = (unsigned char *) reswr_alloc (first->length);
+ const rc_group_icon *gi;
- put_16 (big_endian, 0, first->data);
- put_16 (big_endian, 1, first->data + 2);
+ start = off;
+ off += BIN_GROUP_ICON_SIZE;
- first->next = NULL;
- pp = &first->next;
-
- c = 0;
- for (gi = group_icons; gi != NULL; gi = gi->next)
+ for (c = 0, gi = group_icons; gi != NULL; gi = gi->next, c++)
{
- struct bindata *d;
-
- ++c;
+ struct bin_group_icon_item bgii;
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = 14;
- d->data = (unsigned char *) reswr_alloc (d->length);
-
- d->data[0] = gi->width;
- d->data[1] = gi->height;
- d->data[2] = gi->colors;
- d->data[3] = 0;
- put_16 (big_endian, gi->planes, d->data + 4);
- put_16 (big_endian, gi->bits, d->data + 6);
- put_32 (big_endian, gi->bytes, d->data + 8);
- put_16 (big_endian, gi->index, d->data + 12);
-
- d->next = NULL;
- *pp = d;
- pp = &d->next;
+ if (wrbfd)
+ {
+ windres_put_8 (wrbfd, bgii.width, gi->width);
+ windres_put_8 (wrbfd, bgii.height, gi->height);
+ windres_put_8 (wrbfd, bgii.colors, gi->colors);
+ windres_put_8 (wrbfd, bgii.pad, 0);
+ windres_put_16 (wrbfd, bgii.planes, gi->planes);
+ windres_put_16 (wrbfd, bgii.bits, gi->bits);
+ windres_put_32 (wrbfd, bgii.bytes, gi->bytes);
+ windres_put_16 (wrbfd, bgii.index, gi->index);
+ set_windres_bfd_content (wrbfd, &bgii, off, BIN_GROUP_ICON_ITEM_SIZE);
+ }
+ off += BIN_GROUP_ICON_ITEM_SIZE;
}
- put_16 (big_endian, c, first->data + 4);
-
- return first;
+ if (wrbfd)
+ {
+ windres_put_16 (wrbfd, bgi.sig1, 0);
+ windres_put_16 (wrbfd, bgi.sig2, 1);
+ windres_put_16 (wrbfd, bgi.count, c);
+ set_windres_bfd_content (wrbfd, &bgi, start, BIN_GROUP_ICON_SIZE);
+ }
+ return off;
}
/* Convert a menu resource to binary. */
-static struct bindata *
-res_to_bin_menu (const struct menu *menu, int big_endian)
+static rc_uint_type
+res_to_bin_menu (windres_bfd *wrbfd, rc_uint_type off, const rc_menu *menu)
{
int menuex;
- struct bindata *d;
menuex = extended_menu (menu);
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = menuex ? 8 : 4;
- d->data = (unsigned char *) reswr_alloc (d->length);
-
+ if (wrbfd)
+ {
if (! menuex)
{
- put_16 (big_endian, 0, d->data);
- put_16 (big_endian, 0, d->data + 2);
-
- d->next = res_to_bin_menuitems (menu->items, big_endian);
+ struct bin_menu bm;
+ windres_put_16 (wrbfd, bm.sig1, 0);
+ windres_put_16 (wrbfd, bm.sig2, 0);
+ set_windres_bfd_content (wrbfd, &bm, off, BIN_MENU_SIZE);
}
else
{
- put_16 (big_endian, 1, d->data);
- put_16 (big_endian, 4, d->data + 2);
- put_32 (big_endian, menu->help, d->data + 4);
-
- d->next = res_to_bin_menuexitems (menu->items, big_endian);
+ struct bin_menuex bm;
+ windres_put_16 (wrbfd, bm.sig1, 1);
+ windres_put_16 (wrbfd, bm.sig2, 4);
+ windres_put_32 (wrbfd, bm.help, menu->help);
+ set_windres_bfd_content (wrbfd, &bm, off, BIN_MENUEX_SIZE);
}
-
- return d;
+ }
+ off += (menuex != 0 ? BIN_MENUEX_SIZE : BIN_MENU_SIZE);
+ if (! menuex)
+ {
+ off = res_to_bin_menuitems (wrbfd, off, menu->items);
+ }
+ else
+ {
+ off = res_to_bin_menuexitems (wrbfd, off, menu->items);
+ }
+ return off;
}
/* Convert menu items to binary. */
-static struct bindata *
-res_to_bin_menuitems (const struct menuitem *items, int big_endian)
+static rc_uint_type
+res_to_bin_menuitems (windres_bfd *wrbfd, rc_uint_type off, const rc_menuitem *items)
{
- struct bindata *first, **pp;
- const struct menuitem *mi;
-
- first = NULL;
- pp = &first;
+ const rc_menuitem *mi;
for (mi = items; mi != NULL; mi = mi->next)
{
- struct bindata *d;
+ struct bin_menuitem bmi;
int flags;
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = mi->popup == NULL ? 4 : 2;
- d->data = (unsigned char *) reswr_alloc (d->length);
-
flags = mi->type;
if (mi->next == NULL)
flags |= MENUITEM_ENDMENU;
if (mi->popup != NULL)
flags |= MENUITEM_POPUP;
- put_16 (big_endian, flags, d->data);
-
+ if (wrbfd)
+ {
+ windres_put_16 (wrbfd, bmi.flags, flags);
if (mi->popup == NULL)
- put_16 (big_endian, mi->id, d->data + 2);
-
- *pp = d;
- pp = &d->next;
+ windres_put_16 (wrbfd, bmi.id, mi->id);
+ set_windres_bfd_content (wrbfd, &bmi, off,
+ mi->popup == NULL ? BIN_MENUITEM_SIZE
+ : BIN_MENUITEM_POPUP_SIZE);
+ }
+ off += (mi->popup == NULL ? BIN_MENUITEM_SIZE : BIN_MENUITEM_POPUP_SIZE);
- *pp = unicode_to_bin (mi->text, big_endian);
- pp = &(*pp)->next;
+ off = unicode_to_bin (wrbfd, off, mi->text);
if (mi->popup != NULL)
{
- *pp = res_to_bin_menuitems (mi->popup, big_endian);
- while (*pp != NULL)
- pp = &(*pp)->next;
+ off = res_to_bin_menuitems (wrbfd, off, mi->popup);
}
}
-
- return first;
+ return off;
}
/* Convert menuex items to binary. */
-static struct bindata *
-res_to_bin_menuexitems (const struct menuitem *items, int big_endian)
+static rc_uint_type
+res_to_bin_menuexitems (windres_bfd *wrbfd, rc_uint_type off, const rc_menuitem *items)
{
- struct bindata *first, **pp;
- unsigned long length;
- const struct menuitem *mi;
-
- first = NULL;
- pp = &first;
-
- length = 0;
+ rc_uint_type off_delta = off;
+ const rc_menuitem *mi;
for (mi = items; mi != NULL; mi = mi->next)
{
- struct bindata *d;
+ struct bin_menuitemex bmi;
int flags;
- dword_align_bin (&pp, &length);
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = 12;
- d->data = (unsigned char *) reswr_alloc (d->length);
-
- length += 12;
-
- put_32 (big_endian, mi->type, d->data);
- put_32 (big_endian, mi->state, d->data + 4);
- put_16 (big_endian, mi->id, d->data + 8);
+ off += (4 - ((off - off_delta) & 3)) & 3;
flags = 0;
if (mi->next == NULL)
flags |= 0x80;
if (mi->popup != NULL)
flags |= 1;
- put_16 (big_endian, flags, d->data + 10);
- *pp = d;
- pp = &d->next;
+ if (wrbfd)
+ {
+ windres_put_32 (wrbfd, bmi.type, mi->type);
+ windres_put_32 (wrbfd, bmi.state, mi->state);
+ windres_put_32 (wrbfd, bmi.id, mi->id);
+ windres_put_16 (wrbfd, bmi.flags, flags);
+ set_windres_bfd_content (wrbfd, &bmi, off, BIN_MENUITEMEX_SIZE);
+ }
+ off += BIN_MENUITEMEX_SIZE;
- *pp = unicode_to_bin (mi->text, big_endian);
- length += (*pp)->length;
- pp = &(*pp)->next;
+ off = unicode_to_bin (wrbfd, off, mi->text);
if (mi->popup != NULL)
{
- dword_align_bin (&pp, &length);
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = 4;
- d->data = (unsigned char *) reswr_alloc (d->length);
+ bfd_byte help[4];
- put_32 (big_endian, mi->help, d->data);
+ off += (4 - ((off - off_delta) & 3)) & 3;
- *pp = d;
- pp = &d->next;
-
- *pp = res_to_bin_menuexitems (mi->popup, big_endian);
- while (*pp != NULL)
+ if (wrbfd)
{
- length += (*pp)->length;
- pp = &(*pp)->next;
+ windres_put_32 (wrbfd, help, mi->help);
+ set_windres_bfd_content (wrbfd, help, off, 4);
}
+ off += 4;
+ off = res_to_bin_menuexitems (wrbfd, off, mi->popup);
}
}
-
- return first;
+ return off;
}
/* Convert an rcdata resource to binary. This is also used to convert
- other information which happens to be stored in rcdata_item lists
+ other information which happens to be stored in rc_rcdata_item lists
to binary. */
-static struct bindata *
-res_to_bin_rcdata (const struct rcdata_item *items, int big_endian)
+static rc_uint_type
+res_to_bin_rcdata (windres_bfd *wrbfd, rc_uint_type off, const rc_rcdata_item *items)
{
- struct bindata *first, **pp;
- const struct rcdata_item *ri;
-
- first = NULL;
- pp = &first;
+ const rc_rcdata_item *ri;
for (ri = items; ri != NULL; ri = ri->next)
{
- struct bindata *d;
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
-
+ rc_uint_type len;
switch (ri->type)
{
default:
abort ();
-
case RCDATA_WORD:
- d->length = 2;
- d->data = (unsigned char *) reswr_alloc (d->length);
- put_16 (big_endian, ri->u.word, d->data);
+ len = 2;
break;
-
case RCDATA_DWORD:
- d->length = 4;
- d->data = (unsigned char *) reswr_alloc (d->length);
- put_32 (big_endian, ri->u.dword, d->data);
+ len = 4;
break;
-
case RCDATA_STRING:
- d->length = ri->u.string.length;
- d->data = (unsigned char *) ri->u.string.s;
+ len = ri->u.string.length;
+ break;
+ case RCDATA_WSTRING:
+ len = ri->u.wstring.length * sizeof (unichar);
+ break;
+ case RCDATA_BUFFER:
+ len = ri->u.buffer.length;
+ break;
+ }
+ if (wrbfd)
+ {
+ bfd_byte h[4];
+ bfd_byte *hp = &h[0];
+ switch (ri->type)
+ {
+ case RCDATA_WORD:
+ windres_put_16 (wrbfd, hp, ri->u.word);
+ break;
+ case RCDATA_DWORD:
+ windres_put_32 (wrbfd, hp, ri->u.dword);
+ break;
+ case RCDATA_STRING:
+ hp = (bfd_byte *) ri->u.string.s;
break;
-
case RCDATA_WSTRING:
{
- unsigned long i;
+ rc_uint_type i;
- d->length = ri->u.wstring.length * 2;
- d->data = (unsigned char *) reswr_alloc (d->length);
+ hp = (bfd_byte *) reswr_alloc (len);
for (i = 0; i < ri->u.wstring.length; i++)
- put_16 (big_endian, ri->u.wstring.w[i], d->data + i * 2);
- break;
+ windres_put_16 (wrbfd, hp + i * sizeof (unichar), ri->u.wstring.w[i]);
}
-
+ break;
case RCDATA_BUFFER:
- d->length = ri->u.buffer.length;
- d->data = (unsigned char *) ri->u.buffer.data;
+ hp = (bfd_byte *) ri->u.buffer.data;
break;
}
-
- d->next = NULL;
- *pp = d;
- pp = &d->next;
+ set_windres_bfd_content (wrbfd, hp, off, len);
}
-
- return first;
+ off += len;
+ }
+ return off;
}
/* Convert a stringtable resource to binary. */
-static struct bindata *
-res_to_bin_stringtable (const struct stringtable *st, int big_endian)
+static rc_uint_type
+res_to_bin_stringtable (windres_bfd *wrbfd, rc_uint_type off,
+ const rc_stringtable *st)
{
- struct bindata *first, **pp;
int i;
- first = NULL;
- pp = &first;
-
for (i = 0; i < 16; i++)
{
- int slen, j;
- struct bindata *d;
+ rc_uint_type slen, length;
unichar *s;
- slen = st->strings[i].length;
+ slen = (rc_uint_type) st->strings[i].length;
s = st->strings[i].string;
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = 2 + slen * 2;
- d->data = (unsigned char *) reswr_alloc (d->length);
+ length = 2 + slen * 2;
+ if (wrbfd)
+ {
+ bfd_byte *hp;
+ rc_uint_type j;
- put_16 (big_endian, slen, d->data);
+ hp = (bfd_byte *) reswr_alloc (length);
+ windres_put_16 (wrbfd, hp, slen);
for (j = 0; j < slen; j++)
- put_16 (big_endian, s[j], d->data + 2 + j * 2);
-
- d->next = NULL;
- *pp = d;
- pp = &d->next;
+ windres_put_16 (wrbfd, hp + 2 + j * 2, s[j]);
+ set_windres_bfd_content (wrbfd, hp, off, length);
}
-
- return first;
+ off += length;
+ }
+ return off;
}
/* Convert an ASCII string to a unicode binary string. This always
returns exactly one bindata structure. */
-static struct bindata *
-string_to_unicode_bin (const char *s, int big_endian)
+static rc_uint_type
+string_to_unicode_bin (windres_bfd *wrbfd, rc_uint_type off, const char *s)
{
- size_t len, i;
- struct bindata *d;
-
- len = strlen (s);
+ rc_uint_type len;
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = len * 2 + 2;
- d->data = (unsigned char *) reswr_alloc (d->length);
+ len = (rc_uint_type) strlen (s);
- for (i = 0; i < len; i++)
- put_16 (big_endian, s[i], d->data + i * 2);
- put_16 (big_endian, 0, d->data + i * 2);
+ if (wrbfd)
+ {
+ rc_uint_type i;
+ bfd_byte *hp;
- d->next = NULL;
+ hp = (bfd_byte *) reswr_alloc ((len + 1) * sizeof (unichar));
- return d;
+ for (i = 0; i < len; i++)
+ windres_put_16 (wrbfd, hp + i * 2, s[i]);
+ windres_put_16 (wrbfd, hp + i * 2, 0);
+ set_windres_bfd_content (wrbfd, hp, off, (len + 1) * sizeof (unichar));
+ }
+ off += (rc_uint_type) ((len + 1) * sizeof (unichar));
+ return off;
}
-/* Convert a versioninfo resource to binary. */
-
-static struct bindata *
-res_to_bin_versioninfo (const struct versioninfo *versioninfo, int big_endian)
+static rc_uint_type
+res_to_bin_toolbar (windres_bfd *wrbfd, rc_uint_type off, rc_toolbar *tb)
{
- struct bindata *first, **pp;
- unsigned long length;
- struct ver_info *vi;
-
- first = (struct bindata *) reswr_alloc (sizeof *first);
- first->length = 6;
- first->data = (unsigned char *) reswr_alloc (first->length);
-
- length = 6;
+ if (wrbfd)
+ {
+ struct bin_toolbar bt;
+ windres_put_32 (wrbfd, bt.button_width, tb->button_width);
+ windres_put_32 (wrbfd, bt.button_height, tb->button_height);
+ windres_put_32 (wrbfd, bt.nitems, tb->nitems);
+ set_windres_bfd_content (wrbfd, &bt, off, BIN_TOOLBAR_SIZE);
+ if (tb->nitems > 0)
+ {
+ rc_toolbar_item *it;
+ bfd_byte *ids;
+ rc_uint_type i = 0;
- if (versioninfo->fixed == NULL)
- put_16 (big_endian, 0, first->data + 2);
- else
- put_16 (big_endian, 52, first->data + 2);
+ ids = (bfd_byte *) reswr_alloc (tb->nitems * 4);
+ it=tb->items;
+ while(it != NULL)
+ {
+ windres_put_32 (wrbfd, ids + i, it->id.u.id);
+ i += 4;
+ it = it->next;
+ }
+ set_windres_bfd_content (wrbfd, ids, off + BIN_TOOLBAR_SIZE, i);
+ }
+ }
+ off += BIN_TOOLBAR_SIZE + tb->nitems * 4;
- put_16 (big_endian, 0, first->data + 4);
+ return off;
+}
- pp = &first->next;
+/* Convert a versioninfo resource to binary. */
- *pp = string_to_unicode_bin ("VS_VERSION_INFO", big_endian);
- length += (*pp)->length;
- pp = &(*pp)->next;
+static rc_uint_type
+res_to_bin_versioninfo (windres_bfd *wrbfd, rc_uint_type off,
+ const rc_versioninfo *versioninfo)
+{
+ rc_uint_type off_delta = off;
+ rc_uint_type start;
+ struct bin_versioninfo bvi;
+ rc_ver_info *vi;
- dword_align_bin (&pp, &length);
+ start = off;
+ off += BIN_VERSIONINFO_SIZE;
+ off = string_to_unicode_bin (wrbfd, off, "VS_VERSION_INFO");
+ off += (4 - ((off - off_delta) & 3)) & 3;
if (versioninfo->fixed != NULL)
{
- const struct fixed_versioninfo *fi;
- struct bindata *d;
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = 52;
- d->data = (unsigned char *) reswr_alloc (d->length);
-
- length += 52;
+ if (wrbfd)
+ {
+ struct bin_fixed_versioninfo bfv;
+ const rc_fixed_versioninfo *fi;
fi = versioninfo->fixed;
-
- put_32 (big_endian, 0xfeef04bd, d->data);
- put_32 (big_endian, 0x10000, d->data + 4);
- put_32 (big_endian, fi->file_version_ms, d->data + 8);
- put_32 (big_endian, fi->file_version_ls, d->data + 12);
- put_32 (big_endian, fi->product_version_ms, d->data + 16);
- put_32 (big_endian, fi->product_version_ls, d->data + 20);
- put_32 (big_endian, fi->file_flags_mask, d->data + 24);
- put_32 (big_endian, fi->file_flags, d->data + 28);
- put_32 (big_endian, fi->file_os, d->data + 32);
- put_32 (big_endian, fi->file_type, d->data + 36);
- put_32 (big_endian, fi->file_subtype, d->data + 40);
- put_32 (big_endian, fi->file_date_ms, d->data + 44);
- put_32 (big_endian, fi->file_date_ls, d->data + 48);
-
- d->next = NULL;
- *pp = d;
- pp = &d->next;
+ windres_put_32 (wrbfd, bfv.sig1, 0xfeef04bd);
+ windres_put_32 (wrbfd, bfv.sig2, 0x10000);
+ windres_put_32 (wrbfd, bfv.file_version, fi->file_version_ms);
+ windres_put_32 (wrbfd, bfv.file_version_ls, fi->file_version_ls);
+ windres_put_32 (wrbfd, bfv.product_version_ms, fi->product_version_ms);
+ windres_put_32 (wrbfd, bfv.product_version_ls, fi->product_version_ls);
+ windres_put_32 (wrbfd, bfv.file_flags_mask, fi->file_flags_mask);
+ windres_put_32 (wrbfd, bfv.file_flags, fi->file_flags);
+ windres_put_32 (wrbfd, bfv.file_os, fi->file_os);
+ windres_put_32 (wrbfd, bfv.file_type, fi->file_type);
+ windres_put_32 (wrbfd, bfv.file_subtype, fi->file_subtype);
+ windres_put_32 (wrbfd, bfv.file_date_ms, fi->file_date_ms);
+ windres_put_32 (wrbfd, bfv.file_date_ls, fi->file_date_ls);
+ set_windres_bfd_content (wrbfd, &bfv, off, BIN_FIXED_VERSIONINFO_SIZE);
+ }
+ off += BIN_FIXED_VERSIONINFO_SIZE;
}
for (vi = versioninfo->var; vi != NULL; vi = vi->next)
{
- struct bindata *vid;
- unsigned long vilen;
-
- dword_align_bin (&pp, &length);
-
- vid = (struct bindata *) reswr_alloc (sizeof *vid);
- vid->length = 6;
- vid->data = (unsigned char *) reswr_alloc (vid->length);
+ struct bin_ver_info bv;
+ rc_uint_type bv_off;
- length += 6;
- vilen = 6;
+ off += (4 - ((off - off_delta) & 3)) & 3;
- put_16 (big_endian, 0, vid->data + 2);
- put_16 (big_endian, 0, vid->data + 4);
+ bv_off = off;
- *pp = vid;
- pp = &vid->next;
+ off += BIN_VER_INFO_SIZE;
switch (vi->type)
{
default:
abort ();
-
case VERINFO_STRING:
{
- unsigned long hold, vslen;
- struct bindata *vsd;
- const struct ver_stringinfo *vs;
+ struct bin_ver_info bvsd;
+ rc_uint_type vs_off;
+ const rc_ver_stringinfo *vs;
- *pp = string_to_unicode_bin ("StringFileInfo", big_endian);
- length += (*pp)->length;
- vilen += (*pp)->length;
- pp = &(*pp)->next;
+ off = string_to_unicode_bin (wrbfd, off, "StringFileInfo");
+ off += (4 - ((off - off_delta) & 3)) & 3;
- hold = length;
- dword_align_bin (&pp, &length);
- vilen += length - hold;
+ vs_off = off;
- vsd = (struct bindata *) reswr_alloc (sizeof *vsd);
- vsd->length = 6;
- vsd->data = (unsigned char *) reswr_alloc (vsd->length);
+ off += BIN_VER_INFO_SIZE;
- length += 6;
- vilen += 6;
- vslen = 6;
+ off = unicode_to_bin (wrbfd, off, vi->u.string.language);
- put_16 (big_endian, 0, vsd->data + 2);
- put_16 (big_endian, 0, vsd->data + 4);
+ for (vs = vi->u.string.strings; vs != NULL; vs = vs->next)
+ {
+ struct bin_ver_info bvss;
+ rc_uint_type vss_off,str_off;
- *pp = vsd;
- pp = &vsd->next;
+ off += (4 - ((off - off_delta) & 3)) & 3;
- *pp = unicode_to_bin (vi->u.string.language, big_endian);
- length += (*pp)->length;
- vilen += (*pp)->length;
- vslen += (*pp)->length;
- pp = &(*pp)->next;
+ vss_off = off;
+ off += BIN_VER_INFO_SIZE;
- for (vs = vi->u.string.strings; vs != NULL; vs = vs->next)
- {
- struct bindata *vssd;
- unsigned long vsslen;
-
- hold = length;
- dword_align_bin (&pp, &length);
- vilen += length - hold;
- vslen += length - hold;
-
- vssd = (struct bindata *) reswr_alloc (sizeof *vssd);
- vssd->length = 6;
- vssd->data = (unsigned char *) reswr_alloc (vssd->length);
-
- length += 6;
- vilen += 6;
- vslen += 6;
- vsslen = 6;
-
- put_16 (big_endian, 1, vssd->data + 4);
-
- *pp = vssd;
- pp = &vssd->next;
-
- *pp = unicode_to_bin (vs->key, big_endian);
- length += (*pp)->length;
- vilen += (*pp)->length;
- vslen += (*pp)->length;
- vsslen += (*pp)->length;
- pp = &(*pp)->next;
-
- hold = length;
- dword_align_bin (&pp, &length);
- vilen += length - hold;
- vslen += length - hold;
- vsslen += length - hold;
-
- *pp = unicode_to_bin (vs->value, big_endian);
- put_16 (big_endian, (*pp)->length / 2, vssd->data + 2);
- length += (*pp)->length;
- vilen += (*pp)->length;
- vslen += (*pp)->length;
- vsslen += (*pp)->length;
- pp = &(*pp)->next;
-
- put_16 (big_endian, vsslen, vssd->data);
- }
+ off = unicode_to_bin (wrbfd, off, vs->key);
- put_16 (big_endian, vslen, vsd->data);
+ off += (4 - ((off - off_delta) & 3)) & 3;
+ str_off = off;
+ off = unicode_to_bin (wrbfd, off, vs->value);
+ if (wrbfd)
+ {
+ windres_put_16 (wrbfd, bvss.size, off - vss_off);
+ windres_put_16 (wrbfd, bvss.sig1, (off - str_off) / 2);
+ windres_put_16 (wrbfd, bvss.sig2, 1);
+ set_windres_bfd_content (wrbfd, &bvss, vss_off,
+ BIN_VER_INFO_SIZE);
+ }
+ }
+ if (wrbfd)
+ {
+ windres_put_16 (wrbfd, bvsd.size, off - vs_off);
+ windres_put_16 (wrbfd, bvsd.sig1, 0);
+ windres_put_16 (wrbfd, bvsd.sig2, 0);
+ set_windres_bfd_content (wrbfd, &bvsd, vs_off,
+ BIN_VER_INFO_SIZE);
+ }
break;
}
case VERINFO_VAR:
{
- unsigned long hold, vvlen, vvvlen;
- struct bindata *vvd;
- const struct ver_varinfo *vv;
-
- *pp = string_to_unicode_bin ("VarFileInfo", big_endian);
- length += (*pp)->length;
- vilen += (*pp)->length;
- pp = &(*pp)->next;
-
- hold = length;
- dword_align_bin (&pp, &length);
- vilen += length - hold;
-
- vvd = (struct bindata *) reswr_alloc (sizeof *vvd);
- vvd->length = 6;
- vvd->data = (unsigned char *) reswr_alloc (vvd->length);
+ rc_uint_type vvd_off, vvvd_off;
+ struct bin_ver_info bvvd;
+ const rc_ver_varinfo *vv;
- length += 6;
- vilen += 6;
- vvlen = 6;
+ off = string_to_unicode_bin (wrbfd, off, "VarFileInfo");
- put_16 (big_endian, 0, vvd->data + 4);
+ off += (4 - ((off - off_delta) & 3)) & 3;
- *pp = vvd;
- pp = &vvd->next;
+ vvd_off = off;
+ off += BIN_VER_INFO_SIZE;
- *pp = unicode_to_bin (vi->u.var.key, big_endian);
- length += (*pp)->length;
- vilen += (*pp)->length;
- vvlen += (*pp)->length;
- pp = &(*pp)->next;
+ off = unicode_to_bin (wrbfd, off, vi->u.var.key);
- hold = length;
- dword_align_bin (&pp, &length);
- vilen += length - hold;
- vvlen += length - hold;
+ off += (4 - ((off - off_delta) & 3)) & 3;
- vvvlen = 0;
+ vvvd_off = off;
for (vv = vi->u.var.var; vv != NULL; vv = vv->next)
{
- struct bindata *vvsd;
-
- vvsd = (struct bindata *) reswr_alloc (sizeof *vvsd);
- vvsd->length = 4;
- vvsd->data = (unsigned char *) reswr_alloc (vvsd->length);
-
- length += 4;
- vilen += 4;
- vvlen += 4;
- vvvlen += 4;
-
- put_16 (big_endian, vv->language, vvsd->data);
- put_16 (big_endian, vv->charset, vvsd->data + 2);
-
- vvsd->next = NULL;
- *pp = vvsd;
- pp = &vvsd->next;
+ if (wrbfd)
+ {
+ bfd_byte vvsd[4];
+
+ windres_put_16 (wrbfd, &vvsd[0], vv->language);
+ windres_put_16 (wrbfd, &vvsd[2], vv->charset);
+ set_windres_bfd_content (wrbfd, vvsd, off, 4);
+ }
+ off += 4;
}
-
- put_16 (big_endian, vvlen, vvd->data);
- put_16 (big_endian, vvvlen, vvd->data + 2);
+ if (wrbfd)
+ {
+ windres_put_16 (wrbfd, bvvd.size, off - vvd_off);
+ windres_put_16 (wrbfd, bvvd.sig1, off - vvvd_off);
+ windres_put_16 (wrbfd, bvvd.sig2, 0);
+ set_windres_bfd_content (wrbfd, &bvvd, vvd_off,
+ BIN_VER_INFO_SIZE);
+ }
break;
}
}
- put_16 (big_endian, vilen, vid->data);
+ if (wrbfd)
+ {
+ windres_put_16 (wrbfd, bv.size, off-bv_off);
+ windres_put_16 (wrbfd, bv.sig1, 0);
+ windres_put_16 (wrbfd, bv.sig2, 0);
+ set_windres_bfd_content (wrbfd, &bv, bv_off,
+ BIN_VER_INFO_SIZE);
+ }
}
- put_16 (big_endian, length, first->data);
-
- return first;
+ if (wrbfd)
+ {
+ windres_put_16 (wrbfd, bvi.size, off - start);
+ windres_put_16 (wrbfd, bvi.fixed_size,
+ versioninfo->fixed == NULL ? 0
+ : BIN_FIXED_VERSIONINFO_SIZE);
+ windres_put_16 (wrbfd, bvi.sig2, 0);
+ set_windres_bfd_content (wrbfd, &bvi, start, BIN_VER_INFO_SIZE);
+ }
+ return off;
}
/* Convert a generic resource to binary. */
-static struct bindata *
-res_to_bin_generic (unsigned long length, const unsigned char *data)
+static rc_uint_type
+res_to_bin_generic (windres_bfd *wrbfd, rc_uint_type off, rc_uint_type length,
+ const bfd_byte *data)
{
- struct bindata *d;
-
- d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = length;
- d->data = (unsigned char *) data;
-
- d->next = NULL;
-
- return d;
+ if (wrbfd && length != 0)
+ set_windres_bfd_content (wrbfd, data, off, length);
+ return off + (rc_uint_type) length;
}
diff --git a/binutils/rescoff.c b/binutils/rescoff.c
index fdd9aad9982e..737eb4f0ba98 100644
--- a/binutils/rescoff.c
+++ b/binutils/rescoff.c
@@ -1,7 +1,8 @@
/* rescoff.c -- read and write resources in Windows COFF files.
- Copyright 1997, 1998, 1999, 2000, 2003
+ Copyright 1997, 1998, 1999, 2000, 2003, 2007
Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
+ Rewritten by Kai Tietz, Onevision.
This file is part of GNU Binutils.
@@ -23,6 +24,7 @@
/* This file contains function that read and write Windows resources
in COFF files. */
+#include "sysdep.h"
#include "bfd.h"
#include "bucomm.h"
#include "libiberty.h"
@@ -48,14 +50,12 @@ struct coff_file_info
/* End of data read from file. */
const bfd_byte *data_end;
/* Address of the resource section minus the image base of the file. */
- bfd_vma secaddr;
- /* Non-zero if the file is big endian. */
- int big_endian;
+ rc_uint_type secaddr;
};
/* A resource directory table in a COFF file. */
-struct extern_res_directory
+struct __attribute__ ((__packed__)) extern_res_directory
{
/* Characteristics. */
bfd_byte characteristics[4];
@@ -96,26 +96,24 @@ struct extern_res_data
bfd_byte reserved[4];
};
-/* Macros to swap in values. */
-
-#define getfi_16(fi, s) ((fi)->big_endian ? bfd_getb16 (s) : bfd_getl16 (s))
-#define getfi_32(fi, s) ((fi)->big_endian ? bfd_getb32 (s) : bfd_getl32 (s))
-
/* Local functions. */
static void overrun (const struct coff_file_info *, const char *);
-static struct res_directory *read_coff_res_dir
- (const bfd_byte *, const struct coff_file_info *,
- const struct res_id *, int);
-static struct res_resource *read_coff_data_entry
- (const bfd_byte *, const struct coff_file_info *, const struct res_id *);
+static rc_res_directory *read_coff_res_dir (windres_bfd *, const bfd_byte *,
+ const struct coff_file_info *,
+ const rc_res_id *, int);
+static rc_res_resource *read_coff_data_entry (windres_bfd *, const bfd_byte *,
+ const struct coff_file_info *,
+ const rc_res_id *);
/* Read the resources in a COFF file. */
-struct res_directory *
+rc_res_directory *
read_coff_rsrc (const char *filename, const char *target)
{
+ rc_res_directory *ret;
bfd *abfd;
+ windres_bfd wrbfd;
char **matching;
asection *sec;
bfd_size_type size;
@@ -143,27 +141,28 @@ read_coff_rsrc (const char *filename, const char *target)
fatal (_("%s: no resource section"), filename);
}
+ set_windres_bfd (&wrbfd, abfd, sec, WR_KIND_BFD);
size = bfd_section_size (abfd, sec);
data = (bfd_byte *) res_alloc (size);
- if (! bfd_get_section_contents (abfd, sec, data, 0, size))
- bfd_fatal (_("can't read resource section"));
+ get_windres_bfd_content (&wrbfd, data, 0, size);
finfo.filename = filename;
finfo.data = data;
finfo.data_end = data + size;
finfo.secaddr = (bfd_get_section_vma (abfd, sec)
- pe_data (abfd)->pe_opthdr.ImageBase);
- finfo.big_endian = bfd_big_endian (abfd);
-
- bfd_close (abfd);
/* Now just read in the top level resource directory. Note that we
don't free data, since we create resource entries that point into
it. If we ever want to free up the resource information we read,
this will have to be cleaned up. */
- return read_coff_res_dir (data, &finfo, (const struct res_id *) NULL, 0);
+ ret = read_coff_res_dir (&wrbfd, data, &finfo, (const rc_res_id *) NULL, 0);
+
+ bfd_close (abfd);
+
+ return ret;
}
/* Give an error if we are out of bounds. */
@@ -176,14 +175,15 @@ overrun (const struct coff_file_info *finfo, const char *msg)
/* Read a resource directory. */
-static struct res_directory *
-read_coff_res_dir (const bfd_byte *data, const struct coff_file_info *finfo,
- const struct res_id *type, int level)
+static rc_res_directory *
+read_coff_res_dir (windres_bfd *wrbfd, const bfd_byte *data,
+ const struct coff_file_info *finfo,
+ const rc_res_id *type, int level)
{
const struct extern_res_directory *erd;
- struct res_directory *rd;
+ rc_res_directory *rd;
int name_count, id_count, i;
- struct res_entry **pp;
+ rc_res_entry **pp;
const struct extern_res_entry *ere;
if ((size_t) (finfo->data_end - data) < sizeof (struct extern_res_directory))
@@ -191,15 +191,15 @@ read_coff_res_dir (const bfd_byte *data, const struct coff_file_info *finfo,
erd = (const struct extern_res_directory *) data;
- rd = (struct res_directory *) res_alloc (sizeof *rd);
- rd->characteristics = getfi_32 (finfo, erd->characteristics);
- rd->time = getfi_32 (finfo, erd->time);
- rd->major = getfi_16 (finfo, erd->major);
- rd->minor = getfi_16 (finfo, erd->minor);
+ rd = (rc_res_directory *) res_alloc (sizeof (rc_res_directory));
+ rd->characteristics = windres_get_32 (wrbfd, erd->characteristics, 4);
+ rd->time = windres_get_32 (wrbfd, erd->time, 4);
+ rd->major = windres_get_16 (wrbfd, erd->major, 2);
+ rd->minor = windres_get_16 (wrbfd, erd->minor, 2);
rd->entries = NULL;
- name_count = getfi_16 (finfo, erd->name_count);
- id_count = getfi_16 (finfo, erd->id_count);
+ name_count = windres_get_16 (wrbfd, erd->name_count, 2);
+ id_count = windres_get_16 (wrbfd, erd->id_count, 2);
pp = &rd->entries;
@@ -209,33 +209,33 @@ read_coff_res_dir (const bfd_byte *data, const struct coff_file_info *finfo,
for (i = 0; i < name_count; i++, ere++)
{
- unsigned long name, rva;
- struct res_entry *re;
+ rc_uint_type name, rva;
+ rc_res_entry *re;
const bfd_byte *ers;
int length, j;
if ((const bfd_byte *) ere >= finfo->data_end)
overrun (finfo, _("named directory entry"));
- name = getfi_32 (finfo, ere->name);
- rva = getfi_32 (finfo, ere->rva);
+ name = windres_get_32 (wrbfd, ere->name, 4);
+ rva = windres_get_32 (wrbfd, ere->rva, 4);
/* For some reason the high bit in NAME is set. */
name &=~ 0x80000000;
- if (name > (size_t) (finfo->data_end - finfo->data))
+ if (name > (rc_uint_type) (finfo->data_end - finfo->data))
overrun (finfo, _("directory entry name"));
ers = finfo->data + name;
- re = (struct res_entry *) res_alloc (sizeof *re);
+ re = (rc_res_entry *) res_alloc (sizeof *re);
re->next = NULL;
re->id.named = 1;
- length = getfi_16 (finfo, ers);
+ length = windres_get_16 (wrbfd, ers, 2);
re->id.u.n.length = length;
re->id.u.n.name = (unichar *) res_alloc (length * sizeof (unichar));
for (j = 0; j < length; j++)
- re->id.u.n.name[j] = getfi_16 (finfo, ers + j * 2 + 2);
+ re->id.u.n.name[j] = windres_get_16 (wrbfd, ers + j * 2 + 2, 2);
if (level == 0)
type = &re->id;
@@ -243,18 +243,18 @@ read_coff_res_dir (const bfd_byte *data, const struct coff_file_info *finfo,
if ((rva & 0x80000000) != 0)
{
rva &=~ 0x80000000;
- if (rva >= (size_t) (finfo->data_end - finfo->data))
+ if (rva >= (rc_uint_type) (finfo->data_end - finfo->data))
overrun (finfo, _("named subdirectory"));
re->subdir = 1;
- re->u.dir = read_coff_res_dir (finfo->data + rva, finfo, type,
+ re->u.dir = read_coff_res_dir (wrbfd, finfo->data + rva, finfo, type,
level + 1);
}
else
{
- if (rva >= (size_t) (finfo->data_end - finfo->data))
+ if (rva >= (rc_uint_type) (finfo->data_end - finfo->data))
overrun (finfo, _("named resource"));
re->subdir = 0;
- re->u.res = read_coff_data_entry (finfo->data + rva, finfo, type);
+ re->u.res = read_coff_data_entry (wrbfd, finfo->data + rva, finfo, type);
}
*pp = re;
@@ -264,15 +264,15 @@ read_coff_res_dir (const bfd_byte *data, const struct coff_file_info *finfo,
for (i = 0; i < id_count; i++, ere++)
{
unsigned long name, rva;
- struct res_entry *re;
+ rc_res_entry *re;
if ((const bfd_byte *) ere >= finfo->data_end)
overrun (finfo, _("ID directory entry"));
- name = getfi_32 (finfo, ere->name);
- rva = getfi_32 (finfo, ere->rva);
+ name = windres_get_32 (wrbfd, ere->name, 4);
+ rva = windres_get_32 (wrbfd, ere->rva, 4);
- re = (struct res_entry *) res_alloc (sizeof *re);
+ re = (rc_res_entry *) res_alloc (sizeof *re);
re->next = NULL;
re->id.named = 0;
re->id.u.id = name;
@@ -283,18 +283,18 @@ read_coff_res_dir (const bfd_byte *data, const struct coff_file_info *finfo,
if ((rva & 0x80000000) != 0)
{
rva &=~ 0x80000000;
- if (rva >= (size_t) (finfo->data_end - finfo->data))
+ if (rva >= (rc_uint_type) (finfo->data_end - finfo->data))
overrun (finfo, _("ID subdirectory"));
re->subdir = 1;
- re->u.dir = read_coff_res_dir (finfo->data + rva, finfo, type,
+ re->u.dir = read_coff_res_dir (wrbfd, finfo->data + rva, finfo, type,
level + 1);
}
else
{
- if (rva >= (size_t) (finfo->data_end - finfo->data))
+ if (rva >= (rc_uint_type) (finfo->data_end - finfo->data))
overrun (finfo, _("ID resource"));
re->subdir = 0;
- re->u.res = read_coff_data_entry (finfo->data + rva, finfo, type);
+ re->u.res = read_coff_data_entry (wrbfd, finfo->data + rva, finfo, type);
}
*pp = re;
@@ -306,12 +306,14 @@ read_coff_res_dir (const bfd_byte *data, const struct coff_file_info *finfo,
/* Read a resource data entry. */
-static struct res_resource *
-read_coff_data_entry (const bfd_byte *data, const struct coff_file_info *finfo, const struct res_id *type)
+static rc_res_resource *
+read_coff_data_entry (windres_bfd *wrbfd, const bfd_byte *data,
+ const struct coff_file_info *finfo,
+ const rc_res_id *type)
{
const struct extern_res_data *erd;
- struct res_resource *r;
- unsigned long size, rva;
+ rc_res_resource *r;
+ rc_uint_type size, rva;
const bfd_byte *resdata;
if (type == NULL)
@@ -322,22 +324,22 @@ read_coff_data_entry (const bfd_byte *data, const struct coff_file_info *finfo,
erd = (const struct extern_res_data *) data;
- size = getfi_32 (finfo, erd->size);
- rva = getfi_32 (finfo, erd->rva);
+ size = windres_get_32 (wrbfd, erd->size, 4);
+ rva = windres_get_32 (wrbfd, erd->rva, 4);
if (rva < finfo->secaddr
- || rva - finfo->secaddr >= (size_t) (finfo->data_end - finfo->data))
+ || rva - finfo->secaddr >= (rc_uint_type) (finfo->data_end - finfo->data))
overrun (finfo, _("resource data"));
resdata = finfo->data + (rva - finfo->secaddr);
- if (size > (size_t) (finfo->data_end - resdata))
+ if (size > (rc_uint_type) (finfo->data_end - resdata))
overrun (finfo, _("resource data size"));
- r = bin_to_res (*type, resdata, size, finfo->big_endian);
+ r = bin_to_res (wrbfd, *type, resdata, size);
- memset (&r->res_info, 0, sizeof (struct res_res_info));
- r->coff_info.codepage = getfi_32 (finfo, erd->codepage);
- r->coff_info.reserved = getfi_32 (finfo, erd->reserved);
+ memset (&r->res_info, 0, sizeof (rc_res_res_info));
+ r->coff_info.codepage = windres_get_32 (wrbfd, erd->codepage, 4);
+ r->coff_info.reserved = windres_get_32 (wrbfd, erd->reserved, 4);
return r;
}
@@ -347,9 +349,19 @@ read_coff_data_entry (const bfd_byte *data, const struct coff_file_info *finfo,
struct bindata_build
{
/* The data. */
- struct bindata *d;
+ bindata *d;
+ /* The last structure we have added to the list. */
+ bindata *last;
+ /* The size of the list as a whole. */
+ unsigned long length;
+};
+
+struct coff_res_data_build
+{
+ /* The data. */
+ coff_res_data *d;
/* The last structure we have added to the list. */
- struct bindata *last;
+ coff_res_data *last;
/* The size of the list as a whole. */
unsigned long length;
};
@@ -361,9 +373,7 @@ struct coff_write_info
{
/* These fields are based on the BFD. */
/* The BFD itself. */
- bfd *abfd;
- /* Non-zero if the file is big endian. */
- int big_endian;
+ windres_bfd *wrbfd;
/* Pointer to section symbol used to build RVA relocs. */
asymbol **sympp;
@@ -383,27 +393,19 @@ struct coff_write_info
/* Resource data entries. */
struct bindata_build dataents;
/* Actual resource data. */
- struct bindata_build resources;
+ struct coff_res_data_build resources;
/* Relocations. */
arelent **relocs;
/* Number of relocations. */
unsigned int reloc_count;
};
-/* Macros to swap out values. */
-
-#define putcwi_16(cwi, v, s) \
- ((cwi->big_endian) ? bfd_putb16 ((v), (s)) : bfd_putl16 ((v), (s)))
-#define putcwi_32(cwi, v, s) \
- ((cwi->big_endian) ? bfd_putb32 ((v), (s)) : bfd_putl32 ((v), (s)))
-
-static void coff_bin_sizes
- (const struct res_directory *, struct coff_write_info *);
-static unsigned char *coff_alloc (struct bindata_build *, size_t);
+static void coff_bin_sizes (const rc_res_directory *, struct coff_write_info *);
+static bfd_byte *coff_alloc (struct bindata_build *, rc_uint_type);
static void coff_to_bin
- (const struct res_directory *, struct coff_write_info *);
+ (const rc_res_directory *, struct coff_write_info *);
static void coff_res_to_bin
- (const struct res_resource *, struct coff_write_info *);
+ (const rc_res_resource *, struct coff_write_info *);
/* Write resources to a COFF file. RESOURCES should already be
sorted.
@@ -415,12 +417,14 @@ static void coff_res_to_bin
void
write_coff_file (const char *filename, const char *target,
- const struct res_directory *resources)
+ const rc_res_directory *resources)
{
bfd *abfd;
asection *sec;
struct coff_write_info cwi;
- struct bindata *d;
+ windres_bfd wrbfd;
+ bindata *d;
+ coff_res_data *rd;
unsigned long length, offset;
if (filename == NULL)
@@ -474,8 +478,9 @@ write_coff_file (const char *filename, const char *target,
We build these different types of data in different lists. */
- cwi.abfd = abfd;
- cwi.big_endian = bfd_big_endian (abfd);
+ set_windres_bfd (&wrbfd, abfd, sec, WR_KIND_BFD);
+
+ cwi.wrbfd = &wrbfd;
cwi.sympp = sec->symbol_ptr_ptr;
cwi.dirsize = 0;
cwi.dirstrsize = 0;
@@ -510,7 +515,7 @@ write_coff_file (const char *filename, const char *target,
alignment. */
if ((cwi.dirstrs.length & 3) != 0)
{
- unsigned char *ex;
+ bfd_byte *ex;
ex = coff_alloc (&cwi.dirstrs, 2);
ex[0] = 0;
@@ -542,21 +547,18 @@ write_coff_file (const char *filename, const char *target,
}
for (d = cwi.dirstrs.d; d != NULL; d = d->next)
{
- if (! bfd_set_section_contents (abfd, sec, d->data, offset, d->length))
- bfd_fatal ("bfd_set_section_contents");
+ set_windres_bfd_content (&wrbfd, d->data, offset, d->length);
offset += d->length;
}
for (d = cwi.dataents.d; d != NULL; d = d->next)
{
- if (! bfd_set_section_contents (abfd, sec, d->data, offset, d->length))
- bfd_fatal ("bfd_set_section_contents");
+ set_windres_bfd_content (&wrbfd, d->data, offset, d->length);
offset += d->length;
}
- for (d = cwi.resources.d; d != NULL; d = d->next)
+ for (rd = cwi.resources.d; rd != NULL; rd = rd->next)
{
- if (! bfd_set_section_contents (abfd, sec, d->data, offset, d->length))
- bfd_fatal ("bfd_set_section_contents");
- offset += d->length;
+ res_to_bin (cwi.wrbfd, (rc_uint_type) offset, rd->res);
+ offset += rd->length;
}
assert (offset == length);
@@ -572,10 +574,10 @@ write_coff_file (const char *filename, const char *target,
entries. This updates fields in CWI. */
static void
-coff_bin_sizes (const struct res_directory *resdir,
+coff_bin_sizes (const rc_res_directory *resdir,
struct coff_write_info *cwi)
{
- const struct res_entry *re;
+ const rc_res_entry *re;
cwi->dirsize += sizeof (struct extern_res_directory);
@@ -595,15 +597,15 @@ coff_bin_sizes (const struct res_directory *resdir,
/* Allocate data for a particular list. */
-static unsigned char *
-coff_alloc (struct bindata_build *bb, size_t size)
+static bfd_byte *
+coff_alloc (struct bindata_build *bb, rc_uint_type size)
{
- struct bindata *d;
+ bindata *d;
- d = (struct bindata *) reswr_alloc (sizeof *d);
+ d = (bindata *) reswr_alloc (sizeof (bindata));
d->next = NULL;
- d->data = (unsigned char *) reswr_alloc (size);
+ d->data = (bfd_byte *) reswr_alloc (size);
d->length = size;
if (bb->d == NULL)
@@ -619,11 +621,11 @@ coff_alloc (struct bindata_build *bb, size_t size)
/* Convert the resource directory RESDIR to binary. */
static void
-coff_to_bin (const struct res_directory *resdir, struct coff_write_info *cwi)
+coff_to_bin (const rc_res_directory *resdir, struct coff_write_info *cwi)
{
struct extern_res_directory *erd;
int ci, cn;
- const struct res_entry *e;
+ const rc_res_entry *e;
struct extern_res_entry *ere;
/* Write out the directory table. */
@@ -631,10 +633,10 @@ coff_to_bin (const struct res_directory *resdir, struct coff_write_info *cwi)
erd = ((struct extern_res_directory *)
coff_alloc (&cwi->dirs, sizeof (*erd)));
- putcwi_32 (cwi, resdir->characteristics, erd->characteristics);
- putcwi_32 (cwi, resdir->time, erd->time);
- putcwi_16 (cwi, resdir->major, erd->major);
- putcwi_16 (cwi, resdir->minor, erd->minor);
+ windres_put_32 (cwi->wrbfd, erd->characteristics, resdir->characteristics);
+ windres_put_32 (cwi->wrbfd, erd->time, resdir->time);
+ windres_put_16 (cwi->wrbfd, erd->major, resdir->major);
+ windres_put_16 (cwi->wrbfd, erd->minor, resdir->minor);
ci = 0;
cn = 0;
@@ -646,8 +648,8 @@ coff_to_bin (const struct res_directory *resdir, struct coff_write_info *cwi)
++ci;
}
- putcwi_16 (cwi, cn, erd->name_count);
- putcwi_16 (cwi, ci, erd->id_count);
+ windres_put_16 (cwi->wrbfd, erd->name_count, cn);
+ windres_put_16 (cwi->wrbfd, erd->id_count, ci);
/* Write out the data entries. Note that we allocate space for all
the entries before writing them out. That permits a recursive
@@ -658,35 +660,33 @@ coff_to_bin (const struct res_directory *resdir, struct coff_write_info *cwi)
for (e = resdir->entries; e != NULL; e = e->next, ere++)
{
if (! e->id.named)
- putcwi_32 (cwi, e->id.u.id, ere->name);
+ windres_put_32 (cwi->wrbfd, ere->name, e->id.u.id);
else
{
- unsigned char *str;
- int i;
+ bfd_byte *str;
+ rc_uint_type i;
/* For some reason existing files seem to have the high bit
set on the address of the name, although that is not
documented. */
- putcwi_32 (cwi,
- 0x80000000 | (cwi->dirsize + cwi->dirstrs.length),
- ere->name);
+ windres_put_32 (cwi->wrbfd, ere->name,
+ 0x80000000 | (cwi->dirsize + cwi->dirstrs.length));
str = coff_alloc (&cwi->dirstrs, e->id.u.n.length * 2 + 2);
- putcwi_16 (cwi, e->id.u.n.length, str);
+ windres_put_16 (cwi->wrbfd, str, e->id.u.n.length);
for (i = 0; i < e->id.u.n.length; i++)
- putcwi_16 (cwi, e->id.u.n.name[i], str + i * 2 + 2);
+ windres_put_16 (cwi->wrbfd, str + (i + 1) * sizeof (unichar), e->id.u.n.name[i]);
}
if (e->subdir)
{
- putcwi_32 (cwi, 0x80000000 | cwi->dirs.length, ere->rva);
+ windres_put_32 (cwi->wrbfd, ere->rva, 0x80000000 | cwi->dirs.length);
coff_to_bin (e->u.dir, cwi);
}
else
{
- putcwi_32 (cwi,
- cwi->dirsize + cwi->dirstrsize + cwi->dataents.length,
- ere->rva);
+ windres_put_32 (cwi->wrbfd, ere->rva,
+ cwi->dirsize + cwi->dirstrsize + cwi->dataents.length);
coff_res_to_bin (e->u.res, cwi);
}
@@ -696,12 +696,11 @@ coff_to_bin (const struct res_directory *resdir, struct coff_write_info *cwi)
/* Convert the resource RES to binary. */
static void
-coff_res_to_bin (const struct res_resource *res, struct coff_write_info *cwi)
+coff_res_to_bin (const rc_res_resource *res, struct coff_write_info *cwi)
{
arelent *r;
struct extern_res_data *erd;
- struct bindata *d;
- unsigned long length;
+ coff_res_data *d;
/* For some reason, although every other address is a section
offset, the address of the resource data itself is an RVA. That
@@ -714,7 +713,7 @@ coff_res_to_bin (const struct res_resource *res, struct coff_write_info *cwi)
r->sym_ptr_ptr = cwi->sympp;
r->address = cwi->dirsize + cwi->dirstrsize + cwi->dataents.length;
r->addend = 0;
- r->howto = bfd_reloc_type_lookup (cwi->abfd, BFD_RELOC_RVA);
+ r->howto = bfd_reloc_type_lookup (WR_BFD (cwi->wrbfd), BFD_RELOC_RVA);
if (r->howto == NULL)
bfd_fatal (_("can't get BFD_RELOC_RVA relocation type"));
@@ -726,41 +725,29 @@ coff_res_to_bin (const struct res_resource *res, struct coff_write_info *cwi)
erd = (struct extern_res_data *) coff_alloc (&cwi->dataents, sizeof (*erd));
- putcwi_32 (cwi,
+ windres_put_32 (cwi->wrbfd, erd->rva,
(cwi->dirsize
+ cwi->dirstrsize
+ cwi->dataentsize
- + cwi->resources.length),
- erd->rva);
- putcwi_32 (cwi, res->coff_info.codepage, erd->codepage);
- putcwi_32 (cwi, res->coff_info.reserved, erd->reserved);
+ + cwi->resources.length));
+ windres_put_32 (cwi->wrbfd, erd->codepage, res->coff_info.codepage);
+ windres_put_32 (cwi->wrbfd, erd->reserved, res->coff_info.reserved);
- d = res_to_bin (res, cwi->big_endian);
+ d = (coff_res_data *) reswr_alloc (sizeof (coff_res_data));
+ d->length = res_to_bin (NULL, (rc_uint_type) 0, res);
+ d->res = res;
+ d->next = NULL;
if (cwi->resources.d == NULL)
cwi->resources.d = d;
else
cwi->resources.last->next = d;
- length = 0;
- for (; d->next != NULL; d = d->next)
- length += d->length;
- length += d->length;
cwi->resources.last = d;
- cwi->resources.length += length;
+ cwi->resources.length += (d->length + 3) & ~3;
- putcwi_32 (cwi, length, erd->size);
+ windres_put_32 (cwi->wrbfd, erd->size, d->length);
/* Force the next resource to have 32 bit alignment. */
-
- if ((length & 3) != 0)
- {
- int add;
- unsigned char *ex;
-
- add = 4 - (length & 3);
-
- ex = coff_alloc (&cwi->resources, add);
- memset (ex, 0, add);
- }
+ d->length = (d->length + 3) & ~3;
}
diff --git a/binutils/resrc.c b/binutils/resrc.c
index 73b482cd04ab..ebed255157d3 100644
--- a/binutils/resrc.c
+++ b/binutils/resrc.c
@@ -1,7 +1,8 @@
/* resrc.c -- read and write Windows rc files.
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
+ Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
+ Rewritten by Kai Tietz, Onevision.
This file is part of GNU Binutils.
@@ -23,6 +24,7 @@
/* This file contains functions that read and write Windows rc files.
These are text files that represent resources. */
+#include "sysdep.h"
#include "bfd.h"
#include "bucomm.h"
#include "libiberty.h"
@@ -87,11 +89,11 @@
struct icondir
{
/* Width of image. */
- unsigned char width;
+ bfd_byte width;
/* Height of image. */
- unsigned char height;
+ bfd_byte height;
/* Number of colors in image. */
- unsigned char colorcount;
+ bfd_byte colorcount;
union
{
struct
@@ -125,7 +127,7 @@ int rc_lineno;
/* The pipe we are reading from, so that we can close it if we exit. */
-static FILE *cpp_pipe;
+FILE *cpp_pipe;
/* The temporary file used if we're not using popen, so we can delete it
if we exit. */
@@ -138,7 +140,7 @@ static enum {ISTREAM_PIPE, ISTREAM_FILE} istream_type;
/* As we read the rc file, we attach information to this structure. */
-static struct res_directory *resources;
+static rc_res_directory *resources;
/* The number of cursor resources we have written out. */
@@ -150,17 +152,39 @@ static int fonts;
/* Font directory information. */
-struct fontdir *fontdirs;
+rc_fontdir *fontdirs;
/* Resource info to use for fontdirs. */
-struct res_res_info fontdirs_resinfo;
+rc_res_res_info fontdirs_resinfo;
/* The number of icon resources we have written out. */
static int icons;
-/* Local functions. */
+/* The windres target bfd . */
+
+static windres_bfd wrtarget =
+{
+ (bfd *) NULL, (asection *) NULL, WR_KIND_TARGET
+};
+
+/* Local functions for rcdata based resource definitions. */
+
+static void define_font_rcdata (rc_res_id, const rc_res_res_info *,
+ rc_rcdata_item *);
+static void define_icon_rcdata (rc_res_id, const rc_res_res_info *,
+ rc_rcdata_item *);
+static void define_bitmap_rcdata (rc_res_id, const rc_res_res_info *,
+ rc_rcdata_item *);
+static void define_cursor_rcdata (rc_res_id, const rc_res_res_info *,
+ rc_rcdata_item *);
+static void define_fontdir_rcdata (rc_res_id, const rc_res_res_info *,
+ rc_rcdata_item *);
+static void define_messagetable_rcdata (rc_res_id, const rc_res_res_info *,
+ rc_rcdata_item *);
+static rc_uint_type rcdata_copy (const rc_rcdata_item *, bfd_byte *);
+static bfd_byte *rcdata_render_as_buffer (const rc_rcdata_item *, rc_uint_type *);
static int run_cmd (char *, const char *);
static FILE *open_input_stream (char *);
@@ -170,7 +194,7 @@ static void close_input_stream (void);
static void unexpected_eof (const char *);
static int get_word (FILE *, const char *);
static unsigned long get_long (FILE *, const char *);
-static void get_data (FILE *, unsigned char *, unsigned long, const char *);
+static void get_data (FILE *, bfd_byte *, rc_uint_type, const char *);
static void define_fontdirs (void);
/* Run `cmd' and redirect the output to `redir'. */
@@ -327,7 +351,33 @@ open_input_stream (char *cmd)
return cpp_pipe;
}
-/* look for the preprocessor program */
+/* Determine if FILENAME contains special characters that
+ can cause problems unless the entire filename is quoted. */
+
+static int
+filename_need_quotes (const char *filename)
+{
+ if (filename == NULL || (filename[0] == '-' && filename[1] == 0))
+ return 0;
+
+ while (*filename != 0)
+ {
+ switch (*filename)
+ {
+ case '&':
+ case ' ':
+ case '<':
+ case '>':
+ case '|':
+ case '%':
+ return 1;
+ }
+ ++filename;
+ }
+ return 0;
+}
+
+/* Look for the preprocessor program. */
static FILE *
look_for_default (char *cmd, const char *prefix, int end_prefix,
@@ -336,6 +386,7 @@ look_for_default (char *cmd, const char *prefix, int end_prefix,
char *space;
int found;
struct stat s;
+ const char *fnquotes = (filename_need_quotes (filename) ? "\"" : "");
strcpy (cmd, prefix);
@@ -366,8 +417,8 @@ look_for_default (char *cmd, const char *prefix, int end_prefix,
strcpy (cmd, prefix);
- sprintf (cmd + end_prefix, "%s %s %s",
- DEFAULT_PREPROCESSOR, preprocargs, filename);
+ sprintf (cmd + end_prefix, "%s %s %s%s%s",
+ DEFAULT_PREPROCESSOR, preprocargs, fnquotes, filename, fnquotes);
if (verbose)
fprintf (stderr, _("Using `%s'\n"), cmd);
@@ -378,11 +429,12 @@ look_for_default (char *cmd, const char *prefix, int end_prefix,
/* Read an rc file. */
-struct res_directory *
+rc_res_directory *
read_rc_file (const char *filename, const char *preprocessor,
const char *preprocargs, int language, int use_temp_file)
{
char *cmd;
+ const char *fnquotes = (filename_need_quotes (filename) ? "\"" : "");
istream_type = (use_temp_file) ? ISTREAM_FILE : ISTREAM_PIPE;
@@ -396,8 +448,10 @@ read_rc_file (const char *filename, const char *preprocessor,
cmd = xmalloc (strlen (preprocessor)
+ strlen (preprocargs)
+ strlen (filename)
+ + strlen (fnquotes) * 2
+ 10);
- sprintf (cmd, "%s %s %s", preprocessor, preprocargs, filename);
+ sprintf (cmd, "%s %s %s%s%s", preprocessor, preprocargs,
+ fnquotes, filename, fnquotes);
cpp_pipe = open_input_stream (cmd);
}
@@ -411,6 +465,7 @@ read_rc_file (const char *filename, const char *preprocessor,
+ strlen (preprocessor)
+ strlen (preprocargs)
+ strlen (filename)
+ + strlen (fnquotes) * 2
#ifdef HAVE_EXECUTABLE_SUFFIX
+ strlen (EXECUTABLE_SUFFIX)
#endif
@@ -440,20 +495,20 @@ read_rc_file (const char *filename, const char *preprocessor,
/* First, try looking for a prefixed gcc in the windres
directory, with the same prefix as windres */
- cpp_pipe = look_for_default (cmd, program_name, dash-program_name+1,
+ cpp_pipe = look_for_default (cmd, program_name, dash - program_name + 1,
preprocargs, filename);
}
- if (slash && !cpp_pipe)
+ if (slash && ! cpp_pipe)
{
/* Next, try looking for a gcc in the same directory as
that windres */
- cpp_pipe = look_for_default (cmd, program_name, slash-program_name+1,
+ cpp_pipe = look_for_default (cmd, program_name, slash - program_name + 1,
preprocargs, filename);
}
- if (!cpp_pipe)
+ if (! cpp_pipe)
{
/* Sigh, try the default */
@@ -468,7 +523,6 @@ read_rc_file (const char *filename, const char *preprocessor,
rc_lineno = 1;
if (language != -1)
rcparse_set_language (language);
- yyin = cpp_pipe;
yyparse ();
rcparse_discard_strings ();
@@ -575,24 +629,24 @@ get_long (FILE *e, const char *msg)
/* Read data from a file. This is a wrapper to do error checking. */
static void
-get_data (FILE *e, unsigned char *p, unsigned long c, const char *msg)
+get_data (FILE *e, bfd_byte *p, rc_uint_type c, const char *msg)
{
- unsigned long got;
+ rc_uint_type got; // $$$d
- got = fread (p, 1, c, e);
+ got = (rc_uint_type) fread (p, 1, c, e);
if (got == c)
return;
- fatal (_("%s: read of %lu returned %lu"), msg, c, got);
+ fatal (_("%s: read of %lu returned %lu"), msg, (long) c, (long) got);
}
/* Define an accelerator resource. */
void
-define_accelerator (struct res_id id, const struct res_res_info *resinfo,
- struct accelerator *data)
+define_accelerator (rc_res_id id, const rc_res_res_info *resinfo,
+ rc_accelerator *data)
{
- struct res_resource *r;
+ rc_res_resource *r;
r = define_standard_resource (&resources, RT_ACCELERATOR, id,
resinfo->language, 0);
@@ -608,15 +662,15 @@ define_accelerator (struct res_id id, const struct res_res_info *resinfo,
#define BITMAP_SKIP (14)
void
-define_bitmap (struct res_id id, const struct res_res_info *resinfo,
+define_bitmap (rc_res_id id, const rc_res_res_info *resinfo,
const char *filename)
{
FILE *e;
char *real_filename;
struct stat s;
- unsigned char *data;
- int i;
- struct res_resource *r;
+ bfd_byte *data;
+ rc_uint_type i;
+ rc_res_resource *r;
e = open_file_search (filename, FOPEN_RB, "bitmap file", &real_filename);
@@ -624,7 +678,7 @@ define_bitmap (struct res_id id, const struct res_res_info *resinfo,
fatal (_("stat failed on bitmap file `%s': %s"), real_filename,
strerror (errno));
- data = (unsigned char *) res_alloc (s.st_size - BITMAP_SKIP);
+ data = (bfd_byte *) res_alloc (s.st_size - BITMAP_SKIP);
for (i = 0; i < BITMAP_SKIP; i++)
getc (e);
@@ -650,7 +704,7 @@ define_bitmap (struct res_id id, const struct res_res_info *resinfo,
select one of the actual cursors. */
void
-define_cursor (struct res_id id, const struct res_res_info *resinfo,
+define_cursor (rc_res_id id, const rc_res_res_info *resinfo,
const char *filename)
{
FILE *e;
@@ -658,8 +712,8 @@ define_cursor (struct res_id id, const struct res_res_info *resinfo,
int type, count, i;
struct icondir *icondirs;
int first_cursor;
- struct res_resource *r;
- struct group_cursor *first, **pp;
+ rc_res_resource *r;
+ rc_group_cursor *first, **pp;
e = open_file_search (filename, FOPEN_RB, "cursor file", &real_filename);
@@ -699,19 +753,19 @@ define_cursor (struct res_id id, const struct res_res_info *resinfo,
for (i = 0; i < count; i++)
{
- unsigned char *data;
- struct res_id name;
- struct cursor *c;
+ bfd_byte *data;
+ rc_res_id name;
+ rc_cursor *c;
if (fseek (e, icondirs[i].offset, SEEK_SET) != 0)
fatal (_("%s: fseek to %lu failed: %s"), real_filename,
icondirs[i].offset, strerror (errno));
- data = (unsigned char *) res_alloc (icondirs[i].bytes);
+ data = (bfd_byte *) res_alloc (icondirs[i].bytes);
get_data (e, data, icondirs[i].bytes, real_filename);
- c = (struct cursor *) res_alloc (sizeof *c);
+ c = (rc_cursor *) res_alloc (sizeof (rc_cursor));
c->xhotspot = icondirs[i].u.cursor.xhotspot;
c->yhotspot = icondirs[i].u.cursor.yhotspot;
c->length = icondirs[i].bytes;
@@ -738,9 +792,9 @@ define_cursor (struct res_id id, const struct res_res_info *resinfo,
pp = &first;
for (i = 0; i < count; i++)
{
- struct group_cursor *cg;
+ rc_group_cursor *cg;
- cg = (struct group_cursor *) res_alloc (sizeof *cg);
+ cg = (rc_group_cursor *) res_alloc (sizeof (rc_group_cursor));
cg->next = NULL;
cg->width = icondirs[i].width;
cg->height = 2 * icondirs[i].height;
@@ -768,13 +822,13 @@ define_cursor (struct res_id id, const struct res_res_info *resinfo,
/* Define a dialog resource. */
void
-define_dialog (struct res_id id, const struct res_res_info *resinfo,
- const struct dialog *dialog)
+define_dialog (rc_res_id id, const rc_res_res_info *resinfo,
+ const rc_dialog *dialog)
{
- struct dialog *copy;
- struct res_resource *r;
+ rc_dialog *copy;
+ rc_res_resource *r;
- copy = (struct dialog *) res_alloc (sizeof *copy);
+ copy = (rc_dialog *) res_alloc (sizeof *copy);
*copy = *dialog;
r = define_standard_resource (&resources, RT_DIALOG, id,
@@ -787,15 +841,15 @@ define_dialog (struct res_id id, const struct res_res_info *resinfo,
/* Define a dialog control. This does not define a resource, but
merely allocates and fills in a structure. */
-struct dialog_control *
-define_control (const struct res_id iid, unsigned long id, unsigned long x,
- unsigned long y, unsigned long width, unsigned long height,
- unsigned long class, unsigned long style,
- unsigned long exstyle)
+rc_dialog_control *
+define_control (const rc_res_id iid, rc_uint_type id, rc_uint_type x,
+ rc_uint_type y, rc_uint_type width, rc_uint_type height,
+ const rc_res_id class, rc_uint_type style,
+ rc_uint_type exstyle)
{
- struct dialog_control *n;
+ rc_dialog_control *n;
- n = (struct dialog_control *) res_alloc (sizeof *n);
+ n = (rc_dialog_control *) res_alloc (sizeof (rc_dialog_control));
n->next = NULL;
n->id = id;
n->style = style;
@@ -804,8 +858,7 @@ define_control (const struct res_id iid, unsigned long id, unsigned long x,
n->y = y;
n->width = width;
n->height = height;
- n->class.named = 0;
- n->class.u.id = class;
+ n->class = class;
n->text = iid;
n->data = NULL;
n->help = 0;
@@ -813,23 +866,26 @@ define_control (const struct res_id iid, unsigned long id, unsigned long x,
return n;
}
-struct dialog_control *
-define_icon_control (struct res_id iid, unsigned long id, unsigned long x,
- unsigned long y, unsigned long style,
- unsigned long exstyle, unsigned long help,
- struct rcdata_item *data, struct dialog_ex *ex)
+rc_dialog_control *
+define_icon_control (rc_res_id iid, rc_uint_type id, rc_uint_type x,
+ rc_uint_type y, rc_uint_type style,
+ rc_uint_type exstyle, rc_uint_type help,
+ rc_rcdata_item *data, rc_dialog_ex *ex)
{
- struct dialog_control *n;
- struct res_id tid;
+ rc_dialog_control *n;
+ rc_res_id tid;
+ rc_res_id cid;
if (style == 0)
style = SS_ICON | WS_CHILD | WS_VISIBLE;
res_string_to_id (&tid, "");
- n = define_control (tid, id, x, y, 0, 0, CTL_STATIC, style, exstyle);
+ cid.named = 0;
+ cid.u.id = CTL_STATIC;
+ n = define_control (tid, id, x, y, 0, 0, cid, style, exstyle);
n->text = iid;
- if (help && !ex)
+ if (help && ! ex)
rcparse_warning (_("help ID requires DIALOGEX"));
- if (data && !ex)
+ if (data && ! ex)
rcparse_warning (_("control data requires DIALOGEX"));
n->help = help;
n->data = data;
@@ -840,20 +896,20 @@ define_icon_control (struct res_id iid, unsigned long id, unsigned long x,
/* Define a font resource. */
void
-define_font (struct res_id id, const struct res_res_info *resinfo,
+define_font (rc_res_id id, const rc_res_res_info *resinfo,
const char *filename)
{
FILE *e;
char *real_filename;
struct stat s;
- unsigned char *data;
- struct res_resource *r;
+ bfd_byte *data;
+ rc_res_resource *r;
long offset;
long fontdatalength;
- unsigned char *fontdata;
- struct fontdir *fd;
+ bfd_byte *fontdata;
+ rc_fontdir *fd;
const char *device, *face;
- struct fontdir **pp;
+ rc_fontdir **pp;
e = open_file_search (filename, FOPEN_RB, "font file", &real_filename);
@@ -861,7 +917,7 @@ define_font (struct res_id id, const struct res_res_info *resinfo,
fatal (_("stat failed on font file `%s': %s"), real_filename,
strerror (errno));
- data = (unsigned char *) res_alloc (s.st_size);
+ data = (bfd_byte *) res_alloc (s.st_size);
get_data (e, data, s.st_size, real_filename);
@@ -902,12 +958,12 @@ define_font (struct res_id id, const struct res_res_info *resinfo,
++fonts;
fontdatalength = 58 + strlen (device) + strlen (face);
- fontdata = (unsigned char *) res_alloc (fontdatalength);
+ fontdata = (bfd_byte *) res_alloc (fontdatalength);
memcpy (fontdata, data, 56);
strcpy ((char *) fontdata + 56, device);
strcpy ((char *) fontdata + 57 + strlen (device), face);
- fd = (struct fontdir *) res_alloc (sizeof *fd);
+ fd = (rc_fontdir *) res_alloc (sizeof (rc_fontdir));
fd->next = NULL;
fd->index = fonts;
fd->length = fontdatalength;
@@ -922,14 +978,33 @@ define_font (struct res_id id, const struct res_res_info *resinfo,
fontdirs_resinfo = *resinfo;
}
+static void
+define_font_rcdata (rc_res_id id,const rc_res_res_info *resinfo,
+ rc_rcdata_item *data)
+{
+ rc_res_resource *r;
+ rc_uint_type len_data;
+ bfd_byte *pb_data;
+
+ r = define_standard_resource (&resources, RT_FONT, id,
+ resinfo->language, 0);
+
+ pb_data = rcdata_render_as_buffer (data, &len_data);
+
+ r->type = RES_TYPE_FONT;
+ r->u.data.length = len_data;
+ r->u.data.data = pb_data;
+ r->res_info = *resinfo;
+}
+
/* Define the fontdirs resource. This is called after the entire rc
file has been parsed, if any font resources were seen. */
static void
define_fontdirs (void)
{
- struct res_resource *r;
- struct res_id id;
+ rc_res_resource *r;
+ rc_res_id id;
id.named = 0;
id.u.id = 1;
@@ -941,6 +1016,89 @@ define_fontdirs (void)
r->res_info = fontdirs_resinfo;
}
+static bfd_byte *
+rcdata_render_as_buffer (const rc_rcdata_item *data, rc_uint_type *plen)
+{
+ const rc_rcdata_item *d;
+ bfd_byte *ret = NULL, *pret;
+ rc_uint_type len = 0;
+
+ for (d = data; d != NULL; d = d->next)
+ len += rcdata_copy (d, NULL);
+ if (len != 0)
+ {
+ ret = pret = (bfd_byte *) res_alloc (len);
+ for (d = data; d != NULL; d = d->next)
+ pret += rcdata_copy (d, pret);
+ }
+ if (plen)
+ *plen = len;
+ return ret;
+}
+
+static void
+define_fontdir_rcdata (rc_res_id id,const rc_res_res_info *resinfo,
+ rc_rcdata_item *data)
+{
+ rc_res_resource *r;
+ rc_fontdir *fd, *fd_first, *fd_cur;
+ rc_uint_type len_data;
+ bfd_byte *pb_data;
+ rc_uint_type c;
+
+ fd_cur = fd_first = NULL;
+ r = define_standard_resource (&resources, RT_FONTDIR, id, 0x409, 0);
+
+ pb_data = rcdata_render_as_buffer (data, &len_data);
+
+ if (pb_data)
+ {
+ rc_uint_type off = 2;
+ c = windres_get_16 (&wrtarget, pb_data, len_data);
+ for (; c > 0; c--)
+ {
+ size_t len;
+ rc_uint_type safe_pos = off;
+ const struct bin_fontdir_item *bfi;
+
+ bfi = (const struct bin_fontdir_item *) pb_data + off;
+ fd = (rc_fontdir *) res_alloc (sizeof (rc_fontdir));
+ fd->index = windres_get_16 (&wrtarget, bfi->index, len_data - off);
+ fd->data = pb_data + off;
+ off += 56;
+ len = strlen ((char *) bfi->device_name) + 1;
+ off += (rc_uint_type) len;
+ off += (rc_uint_type) strlen ((char *) bfi->device_name + len) + 1;
+ fd->length = (off - safe_pos);
+ fd->next = NULL;
+ if (fd_first == NULL)
+ fd_first = fd;
+ else
+ fd_cur->next = fd;
+ fd_cur = fd;
+ }
+ }
+ r->type = RES_TYPE_FONTDIR;
+ r->u.fontdir = fd_first;
+ r->res_info = *resinfo;
+}
+
+static void define_messagetable_rcdata (rc_res_id id, const rc_res_res_info *resinfo,
+ rc_rcdata_item *data)
+{
+ rc_res_resource *r;
+ rc_uint_type len_data;
+ bfd_byte *pb_data;
+
+ r = define_standard_resource (&resources, RT_MESSAGETABLE, id, resinfo->language, 0);
+
+ pb_data = rcdata_render_as_buffer (data, &len_data);
+ r->type = RES_TYPE_MESSAGETABLE;
+ r->u.data.length = len_data;
+ r->u.data.data = pb_data;
+ r->res_info = *resinfo;
+}
+
/* Define an icon resource. An icon file may contain a set of
bitmaps, each representing the same icon at various different
resolutions. They each get written out with a different ID. The
@@ -948,7 +1106,7 @@ define_fontdirs (void)
select one of the actual icon bitmaps. */
void
-define_icon (struct res_id id, const struct res_res_info *resinfo,
+define_icon (rc_res_id id, const rc_res_res_info *resinfo,
const char *filename)
{
FILE *e;
@@ -956,8 +1114,8 @@ define_icon (struct res_id id, const struct res_res_info *resinfo,
int type, count, i;
struct icondir *icondirs;
int first_icon;
- struct res_resource *r;
- struct group_icon *first, **pp;
+ rc_res_resource *r;
+ rc_group_icon *first, **pp;
e = open_file_search (filename, FOPEN_RB, "icon file", &real_filename);
@@ -996,14 +1154,14 @@ define_icon (struct res_id id, const struct res_res_info *resinfo,
for (i = 0; i < count; i++)
{
- unsigned char *data;
- struct res_id name;
+ bfd_byte *data;
+ rc_res_id name;
if (fseek (e, icondirs[i].offset, SEEK_SET) != 0)
fatal (_("%s: fseek to %lu failed: %s"), real_filename,
icondirs[i].offset, strerror (errno));
- data = (unsigned char *) res_alloc (icondirs[i].bytes);
+ data = (bfd_byte *) res_alloc (icondirs[i].bytes);
get_data (e, data, icondirs[i].bytes, real_filename);
@@ -1029,13 +1187,13 @@ define_icon (struct res_id id, const struct res_res_info *resinfo,
pp = &first;
for (i = 0; i < count; i++)
{
- struct group_icon *cg;
+ rc_group_icon *cg;
/* For some reason, at least in some files the planes and bits
are zero. We instead set them from the color. This is
copied from rcl. */
- cg = (struct group_icon *) res_alloc (sizeof *cg);
+ cg = (rc_group_icon *) res_alloc (sizeof (rc_group_icon));
cg->next = NULL;
cg->width = icondirs[i].width;
cg->height = icondirs[i].height;
@@ -1072,16 +1230,180 @@ define_icon (struct res_id id, const struct res_res_info *resinfo,
r->res_info = *resinfo;
}
+static void
+define_group_icon_rcdata (rc_res_id id, const rc_res_res_info *resinfo,
+ rc_rcdata_item *data)
+{
+ rc_res_resource *r;
+ rc_group_icon *cg, *first, *cur;
+ rc_uint_type len_data;
+ bfd_byte *pb_data;
+
+ pb_data = rcdata_render_as_buffer (data, &len_data);
+
+ cur = NULL;
+ first = NULL;
+
+ while (len_data >= 6)
+ {
+ int c, i;
+ unsigned short type;
+ type = windres_get_16 (&wrtarget, pb_data + 2, len_data - 2);
+ if (type != 1)
+ fatal (_("unexpected group icon type %d"), type);
+ c = windres_get_16 (&wrtarget, pb_data + 4, len_data - 4);
+ len_data -= 6;
+ pb_data += 6;
+
+ for (i = 0; i < c; i++)
+ {
+ if (len_data < 14)
+ fatal ("too small group icon rcdata");
+ cg = (rc_group_icon *) res_alloc (sizeof (rc_group_icon));
+ cg->next = NULL;
+ cg->width = pb_data[0];
+ cg->height = pb_data[1];
+ cg->colors = pb_data[2];
+ cg->planes = windres_get_16 (&wrtarget, pb_data + 4, len_data - 4);
+ cg->bits = windres_get_16 (&wrtarget, pb_data + 6, len_data - 6);
+ cg->bytes = windres_get_32 (&wrtarget, pb_data + 8, len_data - 8);
+ cg->index = windres_get_16 (&wrtarget, pb_data + 12, len_data - 12);
+ if (! first)
+ first = cg;
+ else
+ cur->next = cg;
+ cur = cg;
+ pb_data += 14;
+ len_data -= 14;
+ }
+ }
+ r = define_standard_resource (&resources, RT_GROUP_ICON, id,
+ resinfo->language, 0);
+ r->type = RES_TYPE_GROUP_ICON;
+ r->u.group_icon = first;
+ r->res_info = *resinfo;
+}
+
+static void
+define_group_cursor_rcdata (rc_res_id id, const rc_res_res_info *resinfo,
+ rc_rcdata_item *data)
+{
+ rc_res_resource *r;
+ rc_group_cursor *cg, *first, *cur;
+ rc_uint_type len_data;
+ bfd_byte *pb_data;
+
+ pb_data = rcdata_render_as_buffer (data, &len_data);
+
+ first = cur = NULL;
+
+ while (len_data >= 6)
+ {
+ int c, i;
+ unsigned short type;
+ type = windres_get_16 (&wrtarget, pb_data + 2, len_data - 2);
+ if (type != 2)
+ fatal (_("unexpected group cursor type %d"), type);
+ c = windres_get_16 (&wrtarget, pb_data + 4, len_data - 4);
+ len_data -= 6;
+ pb_data += 6;
+
+ for (i = 0; i < c; i++)
+ {
+ if (len_data < 14)
+ fatal ("too small group icon rcdata");
+ cg = (rc_group_cursor *) res_alloc (sizeof (rc_group_cursor));
+ cg->next = NULL;
+ cg->width = windres_get_16 (&wrtarget, pb_data, len_data);
+ cg->height = windres_get_16 (&wrtarget, pb_data + 2, len_data - 2);
+ cg->planes = windres_get_16 (&wrtarget, pb_data + 4, len_data - 4);
+ cg->bits = windres_get_16 (&wrtarget, pb_data + 6, len_data - 6);
+ cg->bytes = windres_get_32 (&wrtarget, pb_data + 8, len_data - 8);
+ cg->index = windres_get_16 (&wrtarget, pb_data + 12, len_data - 12);
+ if (! first)
+ first = cg;
+ else
+ cur->next = cg;
+ cur = cg;
+ pb_data += 14;
+ len_data -= 14;
+ }
+ }
+
+ r = define_standard_resource (&resources, RT_GROUP_ICON, id,
+ resinfo->language, 0);
+ r->type = RES_TYPE_GROUP_CURSOR;
+ r->u.group_cursor = first;
+ r->res_info = *resinfo;
+}
+
+static void
+define_cursor_rcdata (rc_res_id id, const rc_res_res_info *resinfo,
+ rc_rcdata_item *data)
+{
+ rc_cursor *c;
+ rc_res_resource *r;
+ rc_uint_type len_data;
+ bfd_byte *pb_data;
+
+ pb_data = rcdata_render_as_buffer (data, &len_data);
+
+ c = (rc_cursor *) res_alloc (sizeof (rc_cursor));
+ c->xhotspot = windres_get_16 (&wrtarget, pb_data, len_data);
+ c->yhotspot = windres_get_16 (&wrtarget, pb_data + 2, len_data - 2);
+ c->length = len_data - BIN_CURSOR_SIZE;
+ c->data = (const bfd_byte *) (data + BIN_CURSOR_SIZE);
+
+ r = define_standard_resource (&resources, RT_CURSOR, id, resinfo->language, 0);
+ r->type = RES_TYPE_CURSOR;
+ r->u.cursor = c;
+ r->res_info = *resinfo;
+}
+
+static void
+define_bitmap_rcdata (rc_res_id id, const rc_res_res_info *resinfo,
+ rc_rcdata_item *data)
+{
+ rc_res_resource *r;
+ rc_uint_type len_data;
+ bfd_byte *pb_data;
+
+ pb_data = rcdata_render_as_buffer (data, &len_data);
+
+ r = define_standard_resource (&resources, RT_BITMAP, id, resinfo->language, 0);
+ r->type = RES_TYPE_BITMAP;
+ r->u.data.length = len_data;
+ r->u.data.data = pb_data;
+ r->res_info = *resinfo;
+}
+
+static void
+define_icon_rcdata (rc_res_id id, const rc_res_res_info *resinfo,
+ rc_rcdata_item *data)
+{
+ rc_res_resource *r;
+ rc_uint_type len_data;
+ bfd_byte *pb_data;
+
+ pb_data = rcdata_render_as_buffer (data, &len_data);
+
+ r = define_standard_resource (&resources, RT_ICON, id, resinfo->language, 0);
+ r->type = RES_TYPE_ICON;
+ r->u.data.length = len_data;
+ r->u.data.data = pb_data;
+ r->res_info = *resinfo;
+}
+
/* Define a menu resource. */
void
-define_menu (struct res_id id, const struct res_res_info *resinfo,
- struct menuitem *menuitems)
+define_menu (rc_res_id id, const rc_res_res_info *resinfo,
+ rc_menuitem *menuitems)
{
- struct menu *m;
- struct res_resource *r;
+ rc_menu *m;
+ rc_res_resource *r;
- m = (struct menu *) res_alloc (sizeof *m);
+ m = (rc_menu *) res_alloc (sizeof (rc_menu));
m->items = menuitems;
m->help = 0;
@@ -1094,22 +1416,19 @@ define_menu (struct res_id id, const struct res_res_info *resinfo,
/* Define a menu item. This does not define a resource, but merely
allocates and fills in a structure. */
-struct menuitem *
-define_menuitem (const char *text, int menuid, unsigned long type,
- unsigned long state, unsigned long help,
- struct menuitem *menuitems)
+rc_menuitem *
+define_menuitem (const unichar *text, rc_uint_type menuid, rc_uint_type type,
+ rc_uint_type state, rc_uint_type help,
+ rc_menuitem *menuitems)
{
- struct menuitem *mi;
+ rc_menuitem *mi;
- mi = (struct menuitem *) res_alloc (sizeof *mi);
+ mi = (rc_menuitem *) res_alloc (sizeof (rc_menuitem));
mi->next = NULL;
mi->type = type;
mi->state = state;
mi->id = menuid;
- if (text == NULL)
- mi->text = NULL;
- else
- unicode_from_ascii ((int *) NULL, &mi->text, text);
+ mi->text = unichar_dup (text);
mi->help = help;
mi->popup = menuitems;
return mi;
@@ -1118,14 +1437,14 @@ define_menuitem (const char *text, int menuid, unsigned long type,
/* Define a messagetable resource. */
void
-define_messagetable (struct res_id id, const struct res_res_info *resinfo,
+define_messagetable (rc_res_id id, const rc_res_res_info *resinfo,
const char *filename)
{
FILE *e;
char *real_filename;
struct stat s;
- unsigned char *data;
- struct res_resource *r;
+ bfd_byte *data;
+ rc_res_resource *r;
e = open_file_search (filename, FOPEN_RB, "messagetable file",
&real_filename);
@@ -1134,7 +1453,7 @@ define_messagetable (struct res_id id, const struct res_res_info *resinfo,
fatal (_("stat failed on bitmap file `%s': %s"), real_filename,
strerror (errno));
- data = (unsigned char *) res_alloc (s.st_size);
+ data = (bfd_byte *) res_alloc (s.st_size);
get_data (e, data, s.st_size, real_filename);
@@ -1153,10 +1472,10 @@ define_messagetable (struct res_id id, const struct res_res_info *resinfo,
/* Define an rcdata resource. */
void
-define_rcdata (struct res_id id, const struct res_res_info *resinfo,
- struct rcdata_item *data)
+define_rcdata (rc_res_id id, const rc_res_res_info *resinfo,
+ rc_rcdata_item *data)
{
- struct res_resource *r;
+ rc_res_resource *r;
r = define_standard_resource (&resources, RT_RCDATA, id,
resinfo->language, 0);
@@ -1167,13 +1486,13 @@ define_rcdata (struct res_id id, const struct res_res_info *resinfo,
/* Create an rcdata item holding a string. */
-struct rcdata_item *
-define_rcdata_string (const char *string, unsigned long len)
+rc_rcdata_item *
+define_rcdata_string (const char *string, rc_uint_type len)
{
- struct rcdata_item *ri;
+ rc_rcdata_item *ri;
char *s;
- ri = (struct rcdata_item *) res_alloc (sizeof *ri);
+ ri = (rc_rcdata_item *) res_alloc (sizeof (rc_rcdata_item));
ri->next = NULL;
ri->type = RCDATA_STRING;
ri->u.string.length = len;
@@ -1184,14 +1503,33 @@ define_rcdata_string (const char *string, unsigned long len)
return ri;
}
+/* Create an rcdata item holding a unicode string. */
+
+rc_rcdata_item *
+define_rcdata_unistring (const unichar *string, rc_uint_type len)
+{
+ rc_rcdata_item *ri;
+ unichar *s;
+
+ ri = (rc_rcdata_item *) res_alloc (sizeof (rc_rcdata_item));
+ ri->next = NULL;
+ ri->type = RCDATA_WSTRING;
+ ri->u.wstring.length = len;
+ s = (unichar *) res_alloc (len * sizeof (unichar));
+ memcpy (s, string, len * sizeof (unichar));
+ ri->u.wstring.w = s;
+
+ return ri;
+}
+
/* Create an rcdata item holding a number. */
-struct rcdata_item *
-define_rcdata_number (unsigned long val, int dword)
+rc_rcdata_item *
+define_rcdata_number (rc_uint_type val, int dword)
{
- struct rcdata_item *ri;
+ rc_rcdata_item *ri;
- ri = (struct rcdata_item *) res_alloc (sizeof *ri);
+ ri = (rc_rcdata_item *) res_alloc (sizeof (rc_rcdata_item));
ri->next = NULL;
ri->type = dword ? RCDATA_DWORD : RCDATA_WORD;
ri->u.word = val;
@@ -1203,11 +1541,11 @@ define_rcdata_number (unsigned long val, int dword)
which appears in a STRINGTABLE statement. */
void
-define_stringtable (const struct res_res_info *resinfo,
- unsigned long stringid, const char *string)
+define_stringtable (const rc_res_res_info *resinfo,
+ rc_uint_type stringid, const unichar *string)
{
- struct res_id id;
- struct res_resource *r;
+ rc_res_id id;
+ rc_res_resource *r;
id.named = 0;
id.u.id = (stringid >> 4) + 1;
@@ -1219,8 +1557,8 @@ define_stringtable (const struct res_res_info *resinfo,
int i;
r->type = RES_TYPE_STRINGTABLE;
- r->u.stringtable = ((struct stringtable *)
- res_alloc (sizeof (struct stringtable)));
+ r->u.stringtable = ((rc_stringtable *)
+ res_alloc (sizeof (rc_stringtable)));
for (i = 0; i < 16; i++)
{
r->u.stringtable->strings[i].length = 0;
@@ -1230,21 +1568,79 @@ define_stringtable (const struct res_res_info *resinfo,
r->res_info = *resinfo;
}
- unicode_from_ascii (&r->u.stringtable->strings[stringid & 0xf].length,
- &r->u.stringtable->strings[stringid & 0xf].string,
- string);
+ r->u.stringtable->strings[stringid & 0xf].length = unichar_len (string);
+ r->u.stringtable->strings[stringid & 0xf].string = unichar_dup (string);
+}
+
+void
+define_toolbar (rc_res_id id, rc_res_res_info *resinfo, rc_uint_type width, rc_uint_type height,
+ rc_toolbar_item *items)
+{
+ rc_toolbar *t;
+ rc_res_resource *r;
+
+ t = (rc_toolbar *) res_alloc (sizeof (rc_toolbar));
+ t->button_width = width;
+ t->button_height = height;
+ t->nitems = 0;
+ t->items = items;
+ while (items != NULL)
+ {
+ t->nitems+=1;
+ items = items->next;
+ }
+ r = define_standard_resource (&resources, RT_TOOLBAR, id, resinfo->language, 0);
+ r->type = RES_TYPE_TOOLBAR;
+ r->u.toolbar = t;
+ r->res_info = *resinfo;
}
/* Define a user data resource where the data is in the rc file. */
void
-define_user_data (struct res_id id, struct res_id type,
- const struct res_res_info *resinfo,
- struct rcdata_item *data)
+define_user_data (rc_res_id id, rc_res_id type,
+ const rc_res_res_info *resinfo,
+ rc_rcdata_item *data)
{
- struct res_id ids[3];
- struct res_resource *r;
+ rc_res_id ids[3];
+ rc_res_resource *r;
+ bfd_byte *pb_data;
+ rc_uint_type len_data;
+ /* We have to check if the binary data is parsed specially. */
+ if (type.named == 0)
+ {
+ switch (type.u.id)
+ {
+ case RT_FONTDIR:
+ define_fontdir_rcdata (id, resinfo, data);
+ return;
+ case RT_FONT:
+ define_font_rcdata (id, resinfo, data);
+ return;
+ case RT_ICON:
+ define_icon_rcdata (id, resinfo, data);
+ return;
+ case RT_BITMAP:
+ define_bitmap_rcdata (id, resinfo, data);
+ return;
+ case RT_CURSOR:
+ define_cursor_rcdata (id, resinfo, data);
+ return;
+ case RT_GROUP_ICON:
+ define_group_icon_rcdata (id, resinfo, data);
+ return;
+ case RT_GROUP_CURSOR:
+ define_group_cursor_rcdata (id, resinfo, data);
+ return;
+ case RT_MESSAGETABLE:
+ define_messagetable_rcdata (id, resinfo, data);
+ return;
+ default:
+ /* Treat as normal user-data. */
+ break;
+ }
+ }
ids[0] = type;
ids[1] = id;
ids[2].named = 0;
@@ -1252,19 +1648,25 @@ define_user_data (struct res_id id, struct res_id type,
r = define_resource (& resources, 3, ids, 0);
r->type = RES_TYPE_USERDATA;
- r->u.userdata = data;
+ r->u.userdata = ((rc_rcdata_item *)
+ res_alloc (sizeof (rc_rcdata_item)));
+ r->u.userdata->next = NULL;
+ r->u.userdata->type = RCDATA_BUFFER;
+ pb_data = rcdata_render_as_buffer (data, &len_data);
+ r->u.userdata->u.buffer.length = len_data;
+ r->u.userdata->u.buffer.data = pb_data;
r->res_info = *resinfo;
}
void
-define_rcdata_file (struct res_id id, const struct res_res_info *resinfo,
+define_rcdata_file (rc_res_id id, const rc_res_res_info *resinfo,
const char *filename)
{
- struct rcdata_item *ri;
+ rc_rcdata_item *ri;
FILE *e;
char *real_filename;
struct stat s;
- unsigned char *data;
+ bfd_byte *data;
e = open_file_search (filename, FOPEN_RB, "file", &real_filename);
@@ -1273,14 +1675,14 @@ define_rcdata_file (struct res_id id, const struct res_res_info *resinfo,
fatal (_("stat failed on file `%s': %s"), real_filename,
strerror (errno));
- data = (unsigned char *) res_alloc (s.st_size);
+ data = (bfd_byte *) res_alloc (s.st_size);
get_data (e, data, s.st_size, real_filename);
fclose (e);
free (real_filename);
- ri = (struct rcdata_item *) res_alloc (sizeof *ri);
+ ri = (rc_rcdata_item *) res_alloc (sizeof (rc_rcdata_item));
ri->next = NULL;
ri->type = RCDATA_BUFFER;
ri->u.buffer.length = s.st_size;
@@ -1292,15 +1694,15 @@ define_rcdata_file (struct res_id id, const struct res_res_info *resinfo,
/* Define a user data resource where the data is in a file. */
void
-define_user_file (struct res_id id, struct res_id type,
- const struct res_res_info *resinfo, const char *filename)
+define_user_file (rc_res_id id, rc_res_id type,
+ const rc_res_res_info *resinfo, const char *filename)
{
FILE *e;
char *real_filename;
struct stat s;
- unsigned char *data;
- struct res_id ids[3];
- struct res_resource *r;
+ bfd_byte *data;
+ rc_res_id ids[3];
+ rc_res_resource *r;
e = open_file_search (filename, FOPEN_RB, "file", &real_filename);
@@ -1308,7 +1710,7 @@ define_user_file (struct res_id id, struct res_id type,
fatal (_("stat failed on file `%s': %s"), real_filename,
strerror (errno));
- data = (unsigned char *) res_alloc (s.st_size);
+ data = (bfd_byte *) res_alloc (s.st_size);
get_data (e, data, s.st_size, real_filename);
@@ -1322,8 +1724,8 @@ define_user_file (struct res_id id, struct res_id type,
r = define_resource (&resources, 3, ids, 0);
r->type = RES_TYPE_USERDATA;
- r->u.userdata = ((struct rcdata_item *)
- res_alloc (sizeof (struct rcdata_item)));
+ r->u.userdata = ((rc_rcdata_item *)
+ res_alloc (sizeof (rc_rcdata_item)));
r->u.userdata->next = NULL;
r->u.userdata->type = RCDATA_BUFFER;
r->u.userdata->u.buffer.length = s.st_size;
@@ -1334,16 +1736,16 @@ define_user_file (struct res_id id, struct res_id type,
/* Define a versioninfo resource. */
void
-define_versioninfo (struct res_id id, int language,
- struct fixed_versioninfo *fixedverinfo,
- struct ver_info *verinfo)
+define_versioninfo (rc_res_id id, rc_uint_type language,
+ rc_fixed_versioninfo *fixedverinfo,
+ rc_ver_info *verinfo)
{
- struct res_resource *r;
+ rc_res_resource *r;
r = define_standard_resource (&resources, RT_VERSION, id, language, 0);
r->type = RES_TYPE_VERSIONINFO;
- r->u.versioninfo = ((struct versioninfo *)
- res_alloc (sizeof (struct versioninfo)));
+ r->u.versioninfo = ((rc_versioninfo *)
+ res_alloc (sizeof (rc_versioninfo)));
r->u.versioninfo->fixed = fixedverinfo;
r->u.versioninfo->var = verinfo;
r->res_info.language = language;
@@ -1351,16 +1753,16 @@ define_versioninfo (struct res_id id, int language,
/* Add string version info to a list of version information. */
-struct ver_info *
-append_ver_stringfileinfo (struct ver_info *verinfo, const char *language,
- struct ver_stringinfo *strings)
+rc_ver_info *
+append_ver_stringfileinfo (rc_ver_info *verinfo, const char *language,
+ rc_ver_stringinfo *strings)
{
- struct ver_info *vi, **pp;
+ rc_ver_info *vi, **pp;
- vi = (struct ver_info *) res_alloc (sizeof *vi);
+ vi = (rc_ver_info *) res_alloc (sizeof (rc_ver_info));
vi->next = NULL;
vi->type = VERINFO_STRING;
- unicode_from_ascii ((int *) NULL, &vi->u.string.language, language);
+ unicode_from_ascii ((rc_uint_type *) NULL, &vi->u.string.language, language);
vi->u.string.strings = strings;
for (pp = &verinfo; *pp != NULL; pp = &(*pp)->next)
@@ -1372,16 +1774,16 @@ append_ver_stringfileinfo (struct ver_info *verinfo, const char *language,
/* Add variable version info to a list of version information. */
-struct ver_info *
-append_ver_varfileinfo (struct ver_info *verinfo, const char *key,
- struct ver_varinfo *var)
+rc_ver_info *
+append_ver_varfileinfo (rc_ver_info *verinfo, const unichar *key,
+ rc_ver_varinfo *var)
{
- struct ver_info *vi, **pp;
+ rc_ver_info *vi, **pp;
- vi = (struct ver_info *) res_alloc (sizeof *vi);
+ vi = (rc_ver_info *) res_alloc (sizeof *vi);
vi->next = NULL;
vi->type = VERINFO_VAR;
- unicode_from_ascii ((int *) NULL, &vi->u.var.key, key);
+ vi->u.var.key = unichar_dup (key);
vi->u.var.var = var;
for (pp = &verinfo; *pp != NULL; pp = &(*pp)->next)
@@ -1393,16 +1795,16 @@ append_ver_varfileinfo (struct ver_info *verinfo, const char *key,
/* Append version string information to a list. */
-struct ver_stringinfo *
-append_verval (struct ver_stringinfo *strings, const char *key,
- const char *value)
+rc_ver_stringinfo *
+append_verval (rc_ver_stringinfo *strings, const unichar *key,
+ const unichar *value)
{
- struct ver_stringinfo *vs, **pp;
+ rc_ver_stringinfo *vs, **pp;
- vs = (struct ver_stringinfo *) res_alloc (sizeof *vs);
+ vs = (rc_ver_stringinfo *) res_alloc (sizeof (rc_ver_stringinfo));
vs->next = NULL;
- unicode_from_ascii ((int *) NULL, &vs->key, key);
- unicode_from_ascii ((int *) NULL, &vs->value, value);
+ vs->key = unichar_dup (key);
+ vs->value = unichar_dup (value);
for (pp = &strings; *pp != NULL; pp = &(*pp)->next)
;
@@ -1413,13 +1815,13 @@ append_verval (struct ver_stringinfo *strings, const char *key,
/* Append version variable information to a list. */
-struct ver_varinfo *
-append_vertrans (struct ver_varinfo *var, unsigned long language,
- unsigned long charset)
+rc_ver_varinfo *
+append_vertrans (rc_ver_varinfo *var, rc_uint_type language,
+ rc_uint_type charset)
{
- struct ver_varinfo *vv, **pp;
+ rc_ver_varinfo *vv, **pp;
- vv = (struct ver_varinfo *) res_alloc (sizeof *vv);
+ vv = (rc_ver_varinfo *) res_alloc (sizeof (rc_ver_varinfo));
vv->next = NULL;
vv->language = language;
vv->charset = charset;
@@ -1434,29 +1836,28 @@ append_vertrans (struct ver_varinfo *var, unsigned long language,
/* Local functions used to write out an rc file. */
static void indent (FILE *, int);
-static void write_rc_directory
- (FILE *, const struct res_directory *, const struct res_id *,
- const struct res_id *, int *, int);
-static void write_rc_subdir
- (FILE *, const struct res_entry *, const struct res_id *,
- const struct res_id *, int *, int);
-static void write_rc_resource
- (FILE *, const struct res_id *, const struct res_id *,
- const struct res_resource *, int *);
-static void write_rc_accelerators (FILE *, const struct accelerator *);
-static void write_rc_cursor (FILE *, const struct cursor *);
-static void write_rc_group_cursor (FILE *, const struct group_cursor *);
-static void write_rc_dialog (FILE *, const struct dialog *);
-static void write_rc_dialog_control (FILE *, const struct dialog_control *);
-static void write_rc_fontdir (FILE *, const struct fontdir *);
-static void write_rc_group_icon (FILE *, const struct group_icon *);
-static void write_rc_menu (FILE *, const struct menu *, int);
-static void write_rc_menuitems (FILE *, const struct menuitem *, int, int);
-static void write_rc_rcdata (FILE *, const struct rcdata_item *, int);
-static void write_rc_stringtable
- (FILE *, const struct res_id *, const struct stringtable *);
-static void write_rc_versioninfo (FILE *, const struct versioninfo *);
-static void write_rc_filedata (FILE *, unsigned long, const unsigned char *);
+static void write_rc_directory (FILE *, const rc_res_directory *, const rc_res_id *,
+ const rc_res_id *, rc_uint_type *, int);
+static void write_rc_subdir (FILE *, const rc_res_entry *, const rc_res_id *,
+ const rc_res_id *, rc_uint_type *, int);
+static void write_rc_resource (FILE *, const rc_res_id *, const rc_res_id *,
+ const rc_res_resource *, rc_uint_type *);
+static void write_rc_accelerators (FILE *, const rc_accelerator *);
+static void write_rc_cursor (FILE *, const rc_cursor *);
+static void write_rc_group_cursor (FILE *, const rc_group_cursor *);
+static void write_rc_dialog (FILE *, const rc_dialog *);
+static void write_rc_dialog_control (FILE *, const rc_dialog_control *);
+static void write_rc_fontdir (FILE *, const rc_fontdir *);
+static void write_rc_group_icon (FILE *, const rc_group_icon *);
+static void write_rc_menu (FILE *, const rc_menu *, int);
+static void write_rc_toolbar (FILE *, const rc_toolbar *);
+static void write_rc_menuitems (FILE *, const rc_menuitem *, int, int);
+static void write_rc_messagetable (FILE *, rc_uint_type , const bfd_byte *);
+
+static void write_rc_datablock (FILE *, rc_uint_type , const bfd_byte *, int, int, int);
+static void write_rc_rcdata (FILE *, const rc_rcdata_item *, int);
+static void write_rc_stringtable (FILE *, const rc_res_id *, const rc_stringtable *);
+static void write_rc_versioninfo (FILE *, const rc_versioninfo *);
/* Indent a given number of spaces. */
@@ -1471,19 +1872,15 @@ indent (FILE *e, int c)
/* Dump the resources we have read in the format of an rc file.
- Actually, we don't use the format of an rc file, because it's way
- too much of a pain--for example, we'd have to write icon resources
- into a file and refer to that file. We just generate a readable
- format that kind of looks like an rc file, and is useful for
- understanding the contents of a resource file. Someday we may want
- to generate an rc file which the rc compiler can read; if that day
- comes, this code will have to be fixed up. */
+ Reasoned by the fact, that some resources need to be stored into file and
+ refer to that file, we use the user-data model for that to express it binary
+ without the need to store it somewhere externally. */
void
-write_rc_file (const char *filename, const struct res_directory *resources)
+write_rc_file (const char *filename, const rc_res_directory *resources)
{
FILE *e;
- int language;
+ rc_uint_type language;
if (filename == NULL)
e = stdout;
@@ -1494,9 +1891,9 @@ write_rc_file (const char *filename, const struct res_directory *resources)
fatal (_("can't open `%s' for output: %s"), filename, strerror (errno));
}
- language = -1;
- write_rc_directory (e, resources, (const struct res_id *) NULL,
- (const struct res_id *) NULL, &language, 1);
+ language = (rc_uint_type) ((bfd_signed_vma) -1);
+ write_rc_directory (e, resources, (const rc_res_id *) NULL,
+ (const rc_res_id *) NULL, &language, 1);
}
/* Write out a directory. E is the file to write to. RD is the
@@ -1506,20 +1903,23 @@ write_rc_file (const char *filename, const struct res_directory *resources)
language. LEVEL is the level in the tree. */
static void
-write_rc_directory (FILE *e, const struct res_directory *rd,
- const struct res_id *type, const struct res_id *name,
- int *language, int level)
+write_rc_directory (FILE *e, const rc_res_directory *rd,
+ const rc_res_id *type, const rc_res_id *name,
+ rc_uint_type *language, int level)
{
- const struct res_entry *re;
+ const rc_res_entry *re;
/* Print out some COFF information that rc files can't represent. */
-
+ if (rd->time != 0 || rd->characteristics != 0 || rd->major != 0 || rd->minor != 0)
+ {
+ wr_printcomment (e, "COFF information not part of RC");
if (rd->time != 0)
- fprintf (e, "// Time stamp: %lu\n", rd->time);
+ wr_printcomment (e, "Time stamp: %u", rd->time);
if (rd->characteristics != 0)
- fprintf (e, "// Characteristics: %lu\n", rd->characteristics);
+ wr_printcomment (e, "Characteristics: %u", rd->characteristics);
if (rd->major != 0 || rd->minor != 0)
- fprintf (e, "// Version: %d %d\n", rd->major, rd->minor);
+ wr_printcomment (e, "Version major:%d minor:%d", rd->major, rd->minor);
+ }
for (re = rd->entries; re != NULL; re = re->next)
{
@@ -1546,7 +1946,7 @@ write_rc_directory (FILE *e, const struct res_directory *rd,
&& re->id.u.id != (unsigned long) (unsigned int) *language
&& (re->id.u.id & 0xffff) == re->id.u.id)
{
- fprintf (e, "LANGUAGE %lu, %lu\n",
+ wr_print (e, "LANGUAGE %u, %u\n",
re->id.u.id & ((1 << SUBLANG_SHIFT) - 1),
(re->id.u.id >> SUBLANG_SHIFT) & 0xff);
*language = re->id.u.id;
@@ -1572,12 +1972,16 @@ write_rc_directory (FILE *e, const struct res_directory *rd,
}
else
{
- fprintf (e, "// Resource at unexpected level %d\n", level);
- write_rc_resource (e, type, (struct res_id *) NULL, re->u.res,
+ wr_printcomment (e, "Resource at unexpected level %d", level);
+ write_rc_resource (e, type, (rc_res_id *) NULL, re->u.res,
language);
}
}
}
+ if (rd->entries == NULL)
+ {
+ wr_print_flush (e);
+ }
}
/* Write out a subdirectory entry. E is the file to write to. RE is
@@ -1586,15 +1990,15 @@ write_rc_directory (FILE *e, const struct res_directory *rd,
LEVEL is the level in the tree. */
static void
-write_rc_subdir (FILE *e, const struct res_entry *re,
- const struct res_id *type, const struct res_id *name,
- int *language, int level)
+write_rc_subdir (FILE *e, const rc_res_entry *re,
+ const rc_res_id *type, const rc_res_id *name,
+ rc_uint_type *language, int level)
{
fprintf (e, "\n");
switch (level)
{
case 1:
- fprintf (e, "// Type: ");
+ wr_printcomment (e, "Type: ");
if (re->id.named)
res_id_print (e, re->id, 1);
else
@@ -1622,6 +2026,8 @@ write_rc_subdir (FILE *e, const struct res_entry *re,
case RT_VXD: s = "vxd"; break;
case RT_ANICURSOR: s = "anicursor"; break;
case RT_ANIICON: s = "aniicon"; break;
+ case RT_TOOLBAR: s = "toolbar"; break;
+ case RT_HTML: s = "html"; break;
default: s = NULL; break;
}
@@ -1630,25 +2036,21 @@ write_rc_subdir (FILE *e, const struct res_entry *re,
else
res_id_print (e, re->id, 1);
}
- fprintf (e, "\n");
break;
case 2:
- fprintf (e, "// Name: ");
+ wr_printcomment (e, "Name: ");
res_id_print (e, re->id, 1);
- fprintf (e, "\n");
break;
case 3:
- fprintf (e, "// Language: ");
+ wr_printcomment (e, "Language: ");
res_id_print (e, re->id, 1);
- fprintf (e, "\n");
break;
default:
- fprintf (e, "// Level %d: ", level);
+ wr_printcomment (e, "Level %d: ", level);
res_id_print (e, re->id, 1);
- fprintf (e, "\n");
}
write_rc_directory (e, re->u.dir, type, name, language, level + 1);
@@ -1661,38 +2063,36 @@ write_rc_subdir (FILE *e, const struct res_entry *re,
language. */
static void
-write_rc_resource (FILE *e, const struct res_id *type,
- const struct res_id *name, const struct res_resource *res,
- int *language)
+write_rc_resource (FILE *e, const rc_res_id *type,
+ const rc_res_id *name, const rc_res_resource *res,
+ rc_uint_type *language)
{
const char *s;
int rt;
int menuex = 0;
- fprintf (e, "\n");
-
switch (res->type)
{
default:
abort ();
case RES_TYPE_ACCELERATOR:
- s = "ACCELERATOR";
+ s = "ACCELERATORS";
rt = RT_ACCELERATOR;
break;
case RES_TYPE_BITMAP:
- s = "BITMAP";
+ s = "2 /* RT_BITMAP */";
rt = RT_BITMAP;
break;
case RES_TYPE_CURSOR:
- s = "CURSOR";
+ s = "1 /* RT_CURSOR */";
rt = RT_CURSOR;
break;
case RES_TYPE_GROUP_CURSOR:
- s = "GROUP_CURSOR";
+ s = "12 /* RT_GROUP_CURSOR */";
rt = RT_GROUP_CURSOR;
break;
@@ -1705,22 +2105,22 @@ write_rc_resource (FILE *e, const struct res_id *type,
break;
case RES_TYPE_FONT:
- s = "FONT";
+ s = "8 /* RT_FONT */";
rt = RT_FONT;
break;
case RES_TYPE_FONTDIR:
- s = "FONTDIR";
+ s = "7 /* RT_FONTDIR */";
rt = RT_FONTDIR;
break;
case RES_TYPE_ICON:
- s = "ICON";
+ s = "3 /* RT_ICON */";
rt = RT_ICON;
break;
case RES_TYPE_GROUP_ICON:
- s = "GROUP_ICON";
+ s = "14 /* RT_GROUP_ICON */";
rt = RT_GROUP_ICON;
break;
@@ -1739,7 +2139,7 @@ write_rc_resource (FILE *e, const struct res_id *type,
break;
case RES_TYPE_MESSAGETABLE:
- s = "MESSAGETABLE";
+ s = "11 /* RT_MESSAGETABLE */";
rt = RT_MESSAGETABLE;
break;
@@ -1762,32 +2162,76 @@ write_rc_resource (FILE *e, const struct res_id *type,
s = "VERSIONINFO";
rt = RT_VERSION;
break;
+
+ case RES_TYPE_TOOLBAR:
+ s = "TOOLBAR";
+ rt = RT_TOOLBAR;
+ break;
}
if (rt != 0
&& type != NULL
&& (type->named || type->u.id != (unsigned long) rt))
{
- fprintf (e, "// Unexpected resource type mismatch: ");
+ wr_printcomment (e, "Unexpected resource type mismatch: ");
res_id_print (e, *type, 1);
fprintf (e, " != %d", rt);
}
if (res->coff_info.codepage != 0)
- fprintf (e, "// Code page: %lu\n", res->coff_info.codepage);
+ wr_printcomment (e, "Code page: %u", res->coff_info.codepage);
if (res->coff_info.reserved != 0)
- fprintf (e, "// COFF reserved value: %lu\n", res->coff_info.reserved);
+ wr_printcomment (e, "COFF reserved value: %u", res->coff_info.reserved);
+ wr_print (e, "\n");
+ if (rt == RT_STRING)
+ ;
+ else
+ {
if (name != NULL)
- res_id_print (e, *name, 0);
+ res_id_print (e, *name, 1);
else
fprintf (e, "??Unknown-Name??");
-
fprintf (e, " ");
+ }
+
if (s != NULL)
fprintf (e, "%s", s);
else if (type != NULL)
+ {
+ if (type->named == 0)
+ {
+#define PRINT_RT_NAME(NAME) case NAME: \
+ fprintf (e, "%u /* %s */", (unsigned int) NAME, #NAME); \
+ break
+
+ switch (type->u.id)
+ {
+ default:
res_id_print (e, *type, 0);
+ break;
+
+ PRINT_RT_NAME(RT_MANIFEST);
+ PRINT_RT_NAME(RT_ANICURSOR);
+ PRINT_RT_NAME(RT_ANIICON);
+ PRINT_RT_NAME(RT_RCDATA);
+ PRINT_RT_NAME(RT_ICON);
+ PRINT_RT_NAME(RT_CURSOR);
+ PRINT_RT_NAME(RT_BITMAP);
+ PRINT_RT_NAME(RT_PLUGPLAY);
+ PRINT_RT_NAME(RT_VXD);
+ PRINT_RT_NAME(RT_FONT);
+ PRINT_RT_NAME(RT_FONTDIR);
+ PRINT_RT_NAME(RT_HTML);
+ PRINT_RT_NAME(RT_MESSAGETABLE);
+ PRINT_RT_NAME(RT_DLGINCLUDE);
+ PRINT_RT_NAME(RT_DLGINIT);
+ }
+#undef PRINT_RT_NAME
+ }
+ else
+ res_id_print (e, *type, 1);
+ }
else
fprintf (e, "??Unknown-Type??");
@@ -1805,11 +2249,17 @@ write_rc_resource (FILE *e, const struct res_id *type,
if (res->type == RES_TYPE_DIALOG)
{
- fprintf (e, " %d, %d, %d, %d", res->u.dialog->x, res->u.dialog->y,
- res->u.dialog->width, res->u.dialog->height);
+ fprintf (e, " %d, %d, %d, %d",
+ (int) res->u.dialog->x, (int) res->u.dialog->y,
+ (int) res->u.dialog->width, (int) res->u.dialog->height);
if (res->u.dialog->ex != NULL
&& res->u.dialog->ex->help != 0)
- fprintf (e, ", %lu", res->u.dialog->ex->help);
+ fprintf (e, ", %u", (unsigned int) res->u.dialog->ex->help);
+ }
+ else if (res->type == RES_TYPE_TOOLBAR)
+ {
+ fprintf (e, " %d, %d", (int) res->u.toolbar->button_width,
+ (int) res->u.toolbar->button_height);
}
fprintf (e, "\n");
@@ -1838,16 +2288,16 @@ write_rc_resource (FILE *e, const struct res_id *type,
if (res->res_info.language != 0 && res->res_info.language != *language)
fprintf (e, "%sLANGUAGE %d, %d\n",
modifiers ? "// " : "",
- res->res_info.language & ((1<<SUBLANG_SHIFT)-1),
- (res->res_info.language >> SUBLANG_SHIFT) & 0xff);
+ (int) res->res_info.language & ((1<<SUBLANG_SHIFT)-1),
+ (int) (res->res_info.language >> SUBLANG_SHIFT) & 0xff);
if (res->res_info.characteristics != 0)
- fprintf (e, "%sCHARACTERISTICS %lu\n",
+ fprintf (e, "%sCHARACTERISTICS %u\n",
modifiers ? "// " : "",
- res->res_info.characteristics);
+ (unsigned int) res->res_info.characteristics);
if (res->res_info.version != 0)
- fprintf (e, "%sVERSION %lu\n",
+ fprintf (e, "%sVERSION %u\n",
modifiers ? "// " : "",
- res->res_info.version);
+ (unsigned int) res->res_info.version);
}
switch (res->type)
@@ -1895,6 +2345,10 @@ write_rc_resource (FILE *e, const struct res_id *type,
write_rc_rcdata (e, res->u.userdata, 0);
break;
+ case RES_TYPE_TOOLBAR:
+ write_rc_toolbar (e, res->u.toolbar);
+ break;
+
case RES_TYPE_VERSIONINFO:
write_rc_versioninfo (e, res->u.versioninfo);
break;
@@ -1902,8 +2356,10 @@ write_rc_resource (FILE *e, const struct res_id *type,
case RES_TYPE_BITMAP:
case RES_TYPE_FONT:
case RES_TYPE_ICON:
+ write_rc_datablock (e, res->u.data.length, res->u.data.data, 0, 1, 0);
+ break;
case RES_TYPE_MESSAGETABLE:
- write_rc_filedata (e, res->u.data.length, res->u.data.data);
+ write_rc_messagetable (e, res->u.data.length, res->u.data.data);
break;
}
}
@@ -1911,9 +2367,9 @@ write_rc_resource (FILE *e, const struct res_id *type,
/* Write out accelerator information. */
static void
-write_rc_accelerators (FILE *e, const struct accelerator *accelerators)
+write_rc_accelerators (FILE *e, const rc_accelerator *accelerators)
{
- const struct accelerator *acc;
+ const rc_accelerator *acc;
fprintf (e, "BEGIN\n");
for (acc = accelerators; acc != NULL; acc = acc->next)
@@ -1926,16 +2382,16 @@ write_rc_accelerators (FILE *e, const struct accelerator *accelerators)
&& ISPRINT (acc->key)
&& (acc->flags & ACC_VIRTKEY) == 0)
{
- fprintf (e, "\"%c\"", acc->key);
+ fprintf (e, "\"%c\"", (char) acc->key);
printable = 1;
}
else
{
- fprintf (e, "%d", acc->key);
+ fprintf (e, "%d", (int) acc->key);
printable = 0;
}
- fprintf (e, ", %d", acc->id);
+ fprintf (e, ", %d", (int) acc->id);
if (! printable)
{
@@ -1962,41 +2418,60 @@ write_rc_accelerators (FILE *e, const struct accelerator *accelerators)
file, which the rc file would include. */
static void
-write_rc_cursor (FILE *e, const struct cursor *cursor)
+write_rc_cursor (FILE *e, const rc_cursor *cursor)
{
- fprintf (e, "// Hotspot: x: %d; y: %d\n", cursor->xhotspot,
- cursor->yhotspot);
- write_rc_filedata (e, cursor->length, cursor->data);
+ fprintf (e, "BEGIN\n");
+ indent (e, 2);
+ fprintf (e, " 0x%x, 0x%x,\t/* Hotspot x: %d, y: %d. */\n",
+ (unsigned int) cursor->xhotspot, (unsigned int) cursor->yhotspot,
+ (int) cursor->xhotspot, (int) cursor->yhotspot);
+ write_rc_datablock (e, (rc_uint_type) cursor->length, (const bfd_byte *) cursor->data,
+ 0, 0, 0);
+ fprintf (e, "END\n");
}
/* Write out group cursor data. This would normally be built from the
cursor data. */
static void
-write_rc_group_cursor (FILE *e, const struct group_cursor *group_cursor)
+write_rc_group_cursor (FILE *e, const rc_group_cursor *group_cursor)
{
- const struct group_cursor *gc;
+ const rc_group_cursor *gc;
+ int c;
- for (gc = group_cursor; gc != NULL; gc = gc->next)
+ for (c = 0, gc = group_cursor; gc != NULL; gc = gc->next, c++)
+ ;
+ fprintf (e, "BEGIN\n");
+
+ indent (e, 2);
+ fprintf (e, "0, 2, %d%s\t /* Having %d items. */\n", c, (c != 0 ? "," : ""), c);
+ indent (e, 4);
+ fprintf (e, "/* width, height, planes, bits, bytes, index. */\n");
+
+ for (c = 1, gc = group_cursor; gc != NULL; gc = gc->next, c++)
{
- fprintf (e, "// width: %d; height %d; planes %d; bits %d\n",
- gc->width, gc->height, gc->planes, gc->bits);
- fprintf (e, "// data bytes: %lu; index: %d\n",
- gc->bytes, gc->index);
+ indent (e, 4);
+ fprintf (e, "%d, %d, %d, %d, 0x%xL, %d%s /* Element %d. */\n",
+ (int) gc->width, (int) gc->height, (int) gc->planes, (int) gc->bits,
+ (unsigned int) gc->bytes, (int) gc->index, (gc->next != NULL ? "," : ""), c);
+ fprintf (e, "/* width: %d; height %d; planes %d; bits %d. */\n",
+ (int) gc->width, (int) gc->height, (int) gc->planes,
+ (int) gc->bits);
}
+ fprintf (e, "END\n");
}
/* Write dialog data. */
static void
-write_rc_dialog (FILE *e, const struct dialog *dialog)
+write_rc_dialog (FILE *e, const rc_dialog *dialog)
{
- const struct dialog_control *control;
+ const rc_dialog_control *control;
- fprintf (e, "STYLE 0x%lx\n", dialog->style);
+ fprintf (e, "STYLE 0x%x\n", dialog->style);
if (dialog->exstyle != 0)
- fprintf (e, "EXSTYLE 0x%lx\n", dialog->exstyle);
+ fprintf (e, "EXSTYLE 0x%x\n", (unsigned int) dialog->exstyle);
if ((dialog->class.named && dialog->class.u.n.length > 0)
|| dialog->class.u.id != 0)
@@ -2008,9 +2483,9 @@ write_rc_dialog (FILE *e, const struct dialog *dialog)
if (dialog->caption != NULL)
{
- fprintf (e, "CAPTION \"");
- unicode_print (e, dialog->caption, -1);
- fprintf (e, "\"\n");
+ fprintf (e, "CAPTION ");
+ unicode_print_quoted (e, dialog->caption, -1);
+ fprintf (e, "\n");
}
if ((dialog->menu.named && dialog->menu.u.n.length > 0)
@@ -2023,15 +2498,16 @@ write_rc_dialog (FILE *e, const struct dialog *dialog)
if (dialog->font != NULL)
{
- fprintf (e, "FONT %d, \"", dialog->pointsize);
- unicode_print (e, dialog->font, -1);
- fprintf (e, "\"");
+ fprintf (e, "FONT %d, ", (int) dialog->pointsize);
+ unicode_print_quoted (e, dialog->font, -1);
if (dialog->ex != NULL
&& (dialog->ex->weight != 0
|| dialog->ex->italic != 0
|| dialog->ex->charset != 1))
fprintf (e, ", %d, %d, %d",
- dialog->ex->weight, dialog->ex->italic, dialog->ex->charset);
+ (int) dialog->ex->weight,
+ (int) dialog->ex->italic,
+ (int) dialog->ex->charset);
fprintf (e, "\n");
}
@@ -2082,7 +2558,7 @@ static const struct control_info control_info[] =
/* Write a dialog control. */
static void
-write_rc_dialog_control (FILE *e, const struct dialog_control *control)
+write_rc_dialog_control (FILE *e, const rc_dialog_control *control)
{
const struct control_info *ci;
@@ -2103,7 +2579,10 @@ write_rc_dialog_control (FILE *e, const struct dialog_control *control)
else if (ci->name != NULL)
fprintf (e, "%s", ci->name);
else
+ {
fprintf (e, "CONTROL");
+ ci = NULL;
+ }
if (control->text.named || control->text.u.id != 0)
{
@@ -2112,7 +2591,7 @@ write_rc_dialog_control (FILE *e, const struct dialog_control *control)
fprintf (e, ",");
}
- fprintf (e, " %d, ", control->id);
+ fprintf (e, " %d, ", (int) control->id);
if (ci == NULL)
{
@@ -2121,10 +2600,10 @@ write_rc_dialog_control (FILE *e, const struct dialog_control *control)
res_id_print (e, control->class, 0);
if (control->class.named)
fprintf (e, "\"");
- fprintf (e, ", 0x%lx, ", control->style);
+ fprintf (e, ", 0x%x, ", (unsigned int) control->style);
}
- fprintf (e, "%d, %d", control->x, control->y);
+ fprintf (e, "%d, %d", (int) control->x, (int) control->y);
if (control->style != SS_ICON
|| control->exstyle != 0
@@ -2132,15 +2611,17 @@ write_rc_dialog_control (FILE *e, const struct dialog_control *control)
|| control->height != 0
|| control->help != 0)
{
- fprintf (e, ", %d, %d", control->width, control->height);
+ fprintf (e, ", %d, %d", (int) control->width, (int) control->height);
/* FIXME: We don't need to print the style if it is the default.
More importantly, in certain cases we actually need to turn
off parts of the forced style, by using NOT. */
- fprintf (e, ", 0x%lx", control->style);
+ if (ci != NULL)
+ fprintf (e, ", 0x%x", (unsigned int) control->style);
if (control->exstyle != 0 || control->help != 0)
- fprintf (e, ", 0x%lx, %lu", control->exstyle, control->help);
+ fprintf (e, ", 0x%x, %u", (unsigned int) control->exstyle,
+ (unsigned int) control->help);
}
fprintf (e, "\n");
@@ -2153,51 +2634,93 @@ write_rc_dialog_control (FILE *e, const struct dialog_control *control)
the font data. */
static void
-write_rc_fontdir (FILE *e, const struct fontdir *fontdir)
+write_rc_fontdir (FILE *e, const rc_fontdir *fontdir)
{
- const struct fontdir *fc;
+ const rc_fontdir *fc;
+ int c;
- for (fc = fontdir; fc != NULL; fc = fc->next)
+ for (c = 0, fc = fontdir; fc != NULL; fc = fc->next, c++)
+ ;
+ fprintf (e, "BEGIN\n");
+ indent (e, 2);
+ fprintf (e, "%d%s\t /* Has %d elements. */\n", c, (c != 0 ? "," : ""), c);
+ for (c = 1, fc = fontdir; fc != NULL; fc = fc->next, c++)
{
- fprintf (e, "// Font index: %d\n", fc->index);
- write_rc_filedata (e, fc->length, fc->data);
+ indent (e, 4);
+ fprintf (e, "%d,\t/* Font no %d with index %d. */\n",
+ (int) fc->index, c, (int) fc->index);
+ write_rc_datablock (e, (rc_uint_type) fc->length - 2,
+ (const bfd_byte *) fc->data + 4,fc->next != NULL,
+ 0, 0);
}
+ fprintf (e, "END\n");
}
/* Write out group icon data. This would normally be built from the
icon data. */
static void
-write_rc_group_icon (FILE *e, const struct group_icon *group_icon)
+write_rc_group_icon (FILE *e, const rc_group_icon *group_icon)
{
- const struct group_icon *gi;
+ const rc_group_icon *gi;
+ int c;
- for (gi = group_icon; gi != NULL; gi = gi->next)
+ for (c = 0, gi = group_icon; gi != NULL; gi = gi->next, c++)
+ ;
+
+ fprintf (e, "BEGIN\n");
+ indent (e, 2);
+ fprintf (e, " 0, 1, %d%s\t /* Has %d elements. */\n", c, (c != 0 ? "," : ""), c);
+
+ indent (e, 4);
+ fprintf (e, "/* \"width height colors pad\", planes, bits, bytes, index. */\n");
+ for (c = 1, gi = group_icon; gi != NULL; gi = gi->next, c++)
{
- fprintf (e, "// width: %d; height %d; colors: %d; planes %d; bits %d\n",
- gi->width, gi->height, gi->colors, gi->planes, gi->bits);
- fprintf (e, "// data bytes: %lu; index: %d\n",
- gi->bytes, gi->index);
+ indent (e, 4);
+ fprintf (e, "\"\\%03o\\%03o\\%03o\\%03o\", %d, %d, 0x%xL, %d%s\t/* Element no %d. */\n",
+ gi->width, gi->height, gi->colors, 0, (int) gi->planes, (int) gi->bits,
+ (unsigned int) gi->bytes, (int) gi->index, (gi->next != NULL ? "," : ""), c);
}
+ fprintf (e, "END\n");
}
/* Write out a menu resource. */
static void
-write_rc_menu (FILE *e, const struct menu *menu, int menuex)
+write_rc_menu (FILE *e, const rc_menu *menu, int menuex)
{
if (menu->help != 0)
- fprintf (e, "// Help ID: %lu\n", menu->help);
+ fprintf (e, "// Help ID: %u\n", (unsigned int) menu->help);
write_rc_menuitems (e, menu->items, menuex, 0);
}
+static void
+write_rc_toolbar (FILE *e, const rc_toolbar *tb)
+{
+ rc_toolbar_item *it;
+ indent (e, 0);
+ fprintf (e, "BEGIN\n");
+ it = tb->items;
+ while(it != NULL)
+ {
+ indent (e, 2);
+ if (it->id.u.id == 0)
+ fprintf (e, "SEPARATOR\n");
+ else
+ fprintf (e, "BUTTON %d\n", (int) it->id.u.id);
+ it = it->next;
+ }
+ indent (e, 0);
+ fprintf (e, "END\n");
+}
+
/* Write out menuitems. */
static void
-write_rc_menuitems (FILE *e, const struct menuitem *menuitems, int menuex,
+write_rc_menuitems (FILE *e, const rc_menuitem *menuitems, int menuex,
int ind)
{
- const struct menuitem *mi;
+ const rc_menuitem *mi;
indent (e, ind);
fprintf (e, "BEGIN\n");
@@ -2225,15 +2748,14 @@ write_rc_menuitems (FILE *e, const struct menuitem *menuitems, int menuex,
fprintf (e, " \"\"");
else
{
- fprintf (e, " \"");
- unicode_print (e, mi->text, -1);
- fprintf (e, "\"");
+ fprintf (e, " ");
+ unicode_print_quoted (e, mi->text, -1);
}
if (! menuex)
{
if (mi->popup == NULL)
- fprintf (e, ", %d", mi->id);
+ fprintf (e, ", %d", (int) mi->id);
if ((mi->type & MENUITEM_CHECKED) != 0)
fprintf (e, ", CHECKED");
@@ -2252,15 +2774,15 @@ write_rc_menuitems (FILE *e, const struct menuitem *menuitems, int menuex,
{
if (mi->id != 0 || mi->type != 0 || mi->state != 0 || mi->help != 0)
{
- fprintf (e, ", %d", mi->id);
+ fprintf (e, ", %d", (int) mi->id);
if (mi->type != 0 || mi->state != 0 || mi->help != 0)
{
- fprintf (e, ", %lu", mi->type);
+ fprintf (e, ", %u", (unsigned int) mi->type);
if (mi->state != 0 || mi->help != 0)
{
- fprintf (e, ", %lu", mi->state);
+ fprintf (e, ", %u", (unsigned int) mi->state);
if (mi->help != 0)
- fprintf (e, ", %lu", mi->help);
+ fprintf (e, ", %u", (unsigned int) mi->help);
}
}
}
@@ -2276,158 +2798,332 @@ write_rc_menuitems (FILE *e, const struct menuitem *menuitems, int menuex,
fprintf (e, "END\n");
}
-/* Write out an rcdata resource. This is also used for other types of
- resources that need to print arbitrary data. */
-
-static void
-write_rc_rcdata (FILE *e, const struct rcdata_item *rcdata, int ind)
+static int
+test_rc_datablock_unicode (rc_uint_type length, const bfd_byte *data)
{
- const struct rcdata_item *ri;
+ rc_uint_type i;
+ if ((length & 1) != 0)
+ return 0;
- indent (e, ind);
- fprintf (e, "BEGIN\n");
+ for (i = 0; i < length; i += 2)
+ {
+ if (data[i] == 0 && data[i + 1] == 0 && (i + 2) < length)
+ return 0;
+ if (data[i] == 0xff && data[i + 1] == 0xff)
+ return 0;
+ }
+ return 1;
+}
- for (ri = rcdata; ri != NULL; ri = ri->next)
+static int
+test_rc_datablock_text (rc_uint_type length, const bfd_byte *data)
+{
+ int has_nl;
+ rc_uint_type c;
+ rc_uint_type i;
+
+ if (length <= 1)
+ return 0;
+
+ has_nl = 0;
+ for (i = 0, c = 0; i < length; i++)
{
- if (ri->type == RCDATA_BUFFER && ri->u.buffer.length == 0)
- continue;
+ if (! ISPRINT (data[i]) && data[i] != '\n'
+ && ! (data[i] == '\r' && (i + 1) < length && data[i + 1] == '\n')
+ && data[i] != '\t'
+ && ! (data[i] == 0 && (i + 1) != length))
+ {
+ if (data[i] <= 7)
+ return 0;
+ c++;
+ }
+ else if (data[i] == '\n') has_nl++;
+ }
+ if (length > 80 && ! has_nl)
+ return 0;
+ c = (((c * 10000) + (i / 100) - 1)) / i;
+ if (c >= 150)
+ return 0;
+ return 1;
+}
- indent (e, ind + 2);
+static void
+write_rc_messagetable (FILE *e, rc_uint_type length, const bfd_byte *data)
+{
+ int has_error = 0;
+ const struct bin_messagetable *mt;
+ fprintf (e, "BEGIN\n");
- switch (ri->type)
- {
- default:
- abort ();
+ write_rc_datablock (e, length, data, 0, 0, 0);
- case RCDATA_WORD:
- fprintf (e, "%d", ri->u.word);
+ fprintf (e, "\n");
+ wr_printcomment (e, "MC syntax dump");
+ if (length < BIN_MESSAGETABLE_SIZE)
+ has_error = 1;
+ else
+ do {
+ rc_uint_type m, i;
+ mt = (const struct bin_messagetable *) data;
+ m = windres_get_32 (&wrtarget, mt->cblocks, length);
+ if (length < (BIN_MESSAGETABLE_SIZE + m * BIN_MESSAGETABLE_BLOCK_SIZE))
+ {
+ has_error = 1;
break;
+ }
+ for (i = 0; i < m; i++)
+ {
+ rc_uint_type low, high, offset;
+ const struct bin_messagetable_item *mti;
- case RCDATA_DWORD:
- fprintf (e, "%luL", ri->u.dword);
+ low = windres_get_32 (&wrtarget, mt->items[i].lowid, 4);
+ high = windres_get_32 (&wrtarget, mt->items[i].highid, 4);
+ offset = windres_get_32 (&wrtarget, mt->items[i].offset, 4);
+ while (low <= high)
+ {
+ rc_uint_type elen, flags;
+ if ((offset + BIN_MESSAGETABLE_ITEM_SIZE) > length)
+ {
+ has_error = 1;
break;
+ }
+ mti = (const struct bin_messagetable_item *) &data[offset];
+ elen = windres_get_16 (&wrtarget, mti->length, 2);
+ flags = windres_get_16 (&wrtarget, mti->flags, 2);
+ if ((offset + elen) > length)
+ {
+ has_error = 1;
+ break;
+ }
+ wr_printcomment (e, "MessageId = 0x%x", low);
+ wr_printcomment (e, "");
+ if ((flags & MESSAGE_RESOURCE_UNICODE) == MESSAGE_RESOURCE_UNICODE)
+ unicode_print (e, (const unichar *) mti->data,
+ (elen - BIN_MESSAGETABLE_ITEM_SIZE) / 2);
+ else
+ ascii_print (e, (const char *) mti->data,
+ (elen - BIN_MESSAGETABLE_ITEM_SIZE));
+ wr_printcomment (e,"");
+ ++low;
+ offset += elen;
+ }
+ }
+ } while (0);
+ if (has_error)
+ wr_printcomment (e, "Illegal data");
+ wr_print_flush (e);
+ fprintf (e, "END\n");
+}
- case RCDATA_STRING:
- {
- const char *s;
- unsigned long i;
+static void
+write_rc_datablock (FILE *e, rc_uint_type length, const bfd_byte *data, int has_next,
+ int hasblock, int show_comment)
+{
+ int plen;
+ if (hasblock)
+ fprintf (e, "BEGIN\n");
+
+ if (show_comment == -1)
+ {
+ if (test_rc_datablock_text(length, data))
+ {
+ rc_uint_type i, c;
+ for (i = 0; i < length;)
+ {
+ indent (e, 2);
+ fprintf (e, "\"");
+
+ for (c = 0; i < length && c < 160 && data[i] != '\n'; c++, i++)
+ ;
+ if (i < length && data[i] == '\n')
+ ++i, ++c;
+ ascii_print (e, (const char *) &data[i - c], c);
fprintf (e, "\"");
- s = ri->u.string.s;
- for (i = 0; i < ri->u.string.length; i++)
+ if (i < length)
+ fprintf (e, "\n");
+ }
+
+ if (i == 0)
{
- if (ISPRINT (*s))
- putc (*s, e);
- else
- fprintf (e, "\\%03o", *s);
+ indent (e, 2);
+ fprintf (e, "\"\"");
}
- fprintf (e, "\"");
- break;
+ if (has_next)
+ fprintf (e, ",");
+ fprintf (e, "\n");
+ if (hasblock)
+ fprintf (e, "END\n");
+ return;
}
+ if (test_rc_datablock_unicode (length, data))
+ {
+ rc_uint_type i, c;
+ for (i = 0; i < length;)
+ {
+ const unichar *u;
- case RCDATA_WSTRING:
+ u = (const unichar *) &data[i];
+ indent (e, 2);
fprintf (e, "L\"");
- unicode_print (e, ri->u.wstring.w, ri->u.wstring.length);
+
+ for (c = 0; i < length && c < 160 && u[c] != '\n'; c++, i += 2)
+ ;
+ if (i < length && u[c] == '\n')
+ i += 2, ++c;
+ unicode_print (e, u, c);
fprintf (e, "\"");
- break;
+ if (i < length)
+ fprintf (e, "\n");
+ }
- case RCDATA_BUFFER:
+ if (i == 0)
{
- unsigned long i;
- int first;
+ indent (e, 2);
+ fprintf (e, "L\"\"");
+ }
+ if (has_next)
+ fprintf (e, ",");
+ fprintf (e, "\n");
+ if (hasblock)
+ fprintf (e, "END\n");
+ return;
+ }
- /* Assume little endian data. */
+ show_comment = 0;
+ }
- first = 1;
- for (i = 0; i + 3 < ri->u.buffer.length; i += 4)
+ if (length != 0)
{
- unsigned long l;
- int j;
+ rc_uint_type i, max_row;
+ int first = 1;
- if (! first)
- indent (e, ind + 2);
- l = ((((((ri->u.buffer.data[i + 3] << 8)
- | ri->u.buffer.data[i + 2]) << 8)
- | ri->u.buffer.data[i + 1]) << 8)
- | ri->u.buffer.data[i]);
- fprintf (e, "%luL", l);
- if (i + 4 < ri->u.buffer.length || ri->next != NULL)
- fprintf (e, ",");
- for (j = 0; j < 4; ++j)
- if (! ISPRINT (ri->u.buffer.data[i + j])
- && ri->u.buffer.data[i + j] != 0)
- break;
- if (j >= 4)
+ max_row = (show_comment ? 4 : 8);
+ indent (e, 2);
+ for (i = 0; i + 3 < length;)
{
- fprintf (e, "\t// ");
- for (j = 0; j < 4; ++j)
+ rc_uint_type k;
+ rc_uint_type comment_start;
+
+ comment_start = i;
+
+ if (! first)
+ indent (e, 2);
+
+ for (k = 0; k < max_row && i + 3 < length; k++, i += 4)
{
- if (! ISPRINT (ri->u.buffer.data[i + j]))
- fprintf (e, "\\%03o", ri->u.buffer.data[i + j]);
+ if (k == 0)
+ plen = fprintf (e, "0x%lxL",
+ (long) windres_get_32 (&wrtarget, data + i, length - i));
else
+ plen = fprintf (e, " 0x%lxL",
+ (long) windres_get_32 (&wrtarget, data + i, length - i)) - 1;
+ if (has_next || (i + 4) < length)
{
- if (ri->u.buffer.data[i + j] == '\\')
- fprintf (e, "\\");
- fprintf (e, "%c", ri->u.buffer.data[i + j]);
+ if (plen>0 && plen < 11)
+ indent (e, 11 - plen);
+ fprintf (e, ",");
}
}
+ if (show_comment)
+ {
+ fprintf (e, "\t/* ");
+ ascii_print (e, (const char *) &data[comment_start], i - comment_start);
+ fprintf (e, ". */");
}
fprintf (e, "\n");
first = 0;
}
- if (i + 1 < ri->u.buffer.length)
+ if (i + 1 < length)
{
- int s;
- int j;
-
if (! first)
- indent (e, ind + 2);
- s = (ri->u.buffer.data[i + 1] << 8) | ri->u.buffer.data[i];
- fprintf (e, "%d", s);
- if (i + 2 < ri->u.buffer.length || ri->next != NULL)
- fprintf (e, ",");
- for (j = 0; j < 2; ++j)
- if (! ISPRINT (ri->u.buffer.data[i + j])
- && ri->u.buffer.data[i + j] != 0)
- break;
- if (j >= 2)
+ indent (e, 2);
+ plen = fprintf (e, "0x%x",
+ (int) windres_get_16 (&wrtarget, data + i, length - i));
+ if (has_next || i + 2 < length)
{
- fprintf (e, "\t// ");
- for (j = 0; j < 2; ++j)
- {
- if (! ISPRINT (ri->u.buffer.data[i + j]))
- fprintf (e, "\\%03o", ri->u.buffer.data[i + j]);
- else
- {
- if (ri->u.buffer.data[i + j] == '\\')
- fprintf (e, "\\");
- fprintf (e, "%c", ri->u.buffer.data[i + j]);
- }
+ if (plen > 0 && plen < 11)
+ indent (e, 11 - plen);
+ fprintf (e, ",");
}
+ if (show_comment)
+ {
+ fprintf (e, "\t/* ");
+ ascii_print (e, (const char *) &data[i], 2);
+ fprintf (e, ". */");
}
fprintf (e, "\n");
i += 2;
first = 0;
}
- if (i < ri->u.buffer.length)
+ if (i < length)
{
if (! first)
- indent (e, ind + 2);
- if ((ri->u.buffer.data[i] & 0x7f) == ri->u.buffer.data[i]
- && ISPRINT (ri->u.buffer.data[i]))
- fprintf (e, "\"%c\"", ri->u.buffer.data[i]);
- else
- fprintf (e, "\"\\%03o\"", ri->u.buffer.data[i]);
- if (ri->next != NULL)
+ indent (e, 2);
+ fprintf (e, "\"");
+ ascii_print (e, (const char *) &data[i], 1);
+ fprintf (e, "\"");
+ if (has_next)
fprintf (e, ",");
fprintf (e, "\n");
first = 0;
}
+ }
+ if (hasblock)
+ fprintf (e, "END\n");
+}
+
+/* Write out an rcdata resource. This is also used for other types of
+ resources that need to print arbitrary data. */
+static void
+write_rc_rcdata (FILE *e, const rc_rcdata_item *rcdata, int ind)
+{
+ const rc_rcdata_item *ri;
+
+ indent (e, ind);
+ fprintf (e, "BEGIN\n");
+
+ for (ri = rcdata; ri != NULL; ri = ri->next)
+ {
+ if (ri->type == RCDATA_BUFFER && ri->u.buffer.length == 0)
+ continue;
+
+ switch (ri->type)
+ {
+ default:
+ abort ();
+
+ case RCDATA_WORD:
+ indent (e, ind + 2);
+ fprintf (e, "%ld", (long) (ri->u.word & 0xffff));
+ break;
+
+ case RCDATA_DWORD:
+ indent (e, ind + 2);
+ fprintf (e, "%luL", (unsigned long) ri->u.dword);
+ break;
+
+ case RCDATA_STRING:
+ indent (e, ind + 2);
+ fprintf (e, "\"");
+ ascii_print (e, ri->u.string.s, ri->u.string.length);
+ fprintf (e, "\"");
+ break;
+
+ case RCDATA_WSTRING:
+ indent (e, ind + 2);
+ fprintf (e, "L\"");
+ unicode_print (e, ri->u.wstring.w, ri->u.wstring.length);
+ fprintf (e, "\"");
+ break;
+
+ case RCDATA_BUFFER:
+ write_rc_datablock (e, (rc_uint_type) ri->u.buffer.length,
+ (const bfd_byte *) ri->u.buffer.data,
+ ri->next != NULL, 0, -1);
break;
- }
}
if (ri->type != RCDATA_BUFFER)
@@ -2445,17 +3141,17 @@ write_rc_rcdata (FILE *e, const struct rcdata_item *rcdata, int ind)
/* Write out a stringtable resource. */
static void
-write_rc_stringtable (FILE *e, const struct res_id *name,
- const struct stringtable *stringtable)
+write_rc_stringtable (FILE *e, const rc_res_id *name,
+ const rc_stringtable *stringtable)
{
- unsigned long offset;
+ rc_uint_type offset;
int i;
if (name != NULL && ! name->named)
offset = (name->u.id - 1) << 4;
else
{
- fprintf (e, "// %s string table name\n",
+ fprintf (e, "/* %s string table name. */\n",
name == NULL ? "Missing" : "Invalid");
offset = 0;
}
@@ -2466,10 +3162,10 @@ write_rc_stringtable (FILE *e, const struct res_id *name,
{
if (stringtable->strings[i].length != 0)
{
- fprintf (e, " %lu, \"", offset + i);
- unicode_print (e, stringtable->strings[i].string,
+ fprintf (e, " %lu, ", (long) offset + i);
+ unicode_print_quoted (e, stringtable->strings[i].string,
stringtable->strings[i].length);
- fprintf (e, "\"\n");
+ fprintf (e, "\n");
}
}
@@ -2479,36 +3175,37 @@ write_rc_stringtable (FILE *e, const struct res_id *name,
/* Write out a versioninfo resource. */
static void
-write_rc_versioninfo (FILE *e, const struct versioninfo *versioninfo)
+write_rc_versioninfo (FILE *e, const rc_versioninfo *versioninfo)
{
- const struct fixed_versioninfo *f;
- const struct ver_info *vi;
+ const rc_fixed_versioninfo *f;
+ const rc_ver_info *vi;
f = versioninfo->fixed;
if (f->file_version_ms != 0 || f->file_version_ls != 0)
- fprintf (e, " FILEVERSION %lu, %lu, %lu, %lu\n",
- (f->file_version_ms >> 16) & 0xffff,
- f->file_version_ms & 0xffff,
- (f->file_version_ls >> 16) & 0xffff,
- f->file_version_ls & 0xffff);
+ fprintf (e, " FILEVERSION %u, %u, %u, %u\n",
+ (unsigned int) ((f->file_version_ms >> 16) & 0xffff),
+ (unsigned int) (f->file_version_ms & 0xffff),
+ (unsigned int) ((f->file_version_ls >> 16) & 0xffff),
+ (unsigned int) (f->file_version_ls & 0xffff));
if (f->product_version_ms != 0 || f->product_version_ls != 0)
- fprintf (e, " PRODUCTVERSION %lu, %lu, %lu, %lu\n",
- (f->product_version_ms >> 16) & 0xffff,
- f->product_version_ms & 0xffff,
- (f->product_version_ls >> 16) & 0xffff,
- f->product_version_ls & 0xffff);
+ fprintf (e, " PRODUCTVERSION %u, %u, %u, %u\n",
+ (unsigned int) ((f->product_version_ms >> 16) & 0xffff),
+ (unsigned int) (f->product_version_ms & 0xffff),
+ (unsigned int) ((f->product_version_ls >> 16) & 0xffff),
+ (unsigned int) (f->product_version_ls & 0xffff));
if (f->file_flags_mask != 0)
- fprintf (e, " FILEFLAGSMASK 0x%lx\n", f->file_flags_mask);
+ fprintf (e, " FILEFLAGSMASK 0x%x\n", (unsigned int) f->file_flags_mask);
if (f->file_flags != 0)
- fprintf (e, " FILEFLAGS 0x%lx\n", f->file_flags);
+ fprintf (e, " FILEFLAGS 0x%x\n", (unsigned int) f->file_flags);
if (f->file_os != 0)
- fprintf (e, " FILEOS 0x%lx\n", f->file_os);
+ fprintf (e, " FILEOS 0x%x\n", (unsigned int) f->file_os);
if (f->file_type != 0)
- fprintf (e, " FILETYPE 0x%lx\n", f->file_type);
+ fprintf (e, " FILETYPE 0x%x\n", (unsigned int) f->file_type);
if (f->file_subtype != 0)
- fprintf (e, " FILESUBTYPE 0x%lx\n", f->file_subtype);
+ fprintf (e, " FILESUBTYPE 0x%x\n", (unsigned int) f->file_subtype);
if (f->file_date_ms != 0 || f->file_date_ls != 0)
- fprintf (e, "// Date: %lu, %lu\n", f->file_date_ms, f->file_date_ls);
+ fprintf (e, "/* Date: %u, %u. */\n",
+ (unsigned int) f->file_date_ms, (unsigned int) f->file_date_ls);
fprintf (e, "BEGIN\n");
@@ -2518,22 +3215,22 @@ write_rc_versioninfo (FILE *e, const struct versioninfo *versioninfo)
{
case VERINFO_STRING:
{
- const struct ver_stringinfo *vs;
+ const rc_ver_stringinfo *vs;
fprintf (e, " BLOCK \"StringFileInfo\"\n");
fprintf (e, " BEGIN\n");
- fprintf (e, " BLOCK \"");
- unicode_print (e, vi->u.string.language, -1);
- fprintf (e, "\"\n");
+ fprintf (e, " BLOCK ");
+ unicode_print_quoted (e, vi->u.string.language, -1);
+ fprintf (e, "\n");
fprintf (e, " BEGIN\n");
for (vs = vi->u.string.strings; vs != NULL; vs = vs->next)
{
- fprintf (e, " VALUE \"");
- unicode_print (e, vs->key, -1);
- fprintf (e, "\", \"");
- unicode_print (e, vs->value, -1);
- fprintf (e, "\"\n");
+ fprintf (e, " VALUE ");
+ unicode_print_quoted (e, vs->key, -1);
+ fprintf (e, ", ");
+ unicode_print_quoted (e, vs->value, -1);
+ fprintf (e, "\n");
}
fprintf (e, " END\n");
@@ -2543,17 +3240,16 @@ write_rc_versioninfo (FILE *e, const struct versioninfo *versioninfo)
case VERINFO_VAR:
{
- const struct ver_varinfo *vv;
+ const rc_ver_varinfo *vv;
fprintf (e, " BLOCK \"VarFileInfo\"\n");
fprintf (e, " BEGIN\n");
- fprintf (e, " VALUE \"");
- unicode_print (e, vi->u.var.key, -1);
- fprintf (e, "\"");
+ fprintf (e, " VALUE ");
+ unicode_print_quoted (e, vi->u.var.key, -1);
for (vv = vi->u.var.var; vv != NULL; vv = vv->next)
fprintf (e, ", 0x%x, %d", (unsigned int) vv->language,
- vv->charset);
+ (int) vv->charset);
fprintf (e, "\n END\n");
@@ -2565,32 +3261,36 @@ write_rc_versioninfo (FILE *e, const struct versioninfo *versioninfo)
fprintf (e, "END\n");
}
-/* Write out data which would normally be read from a file. */
-
-static void
-write_rc_filedata (FILE *e, unsigned long length, const unsigned char *data)
+static rc_uint_type
+rcdata_copy (const rc_rcdata_item *src, bfd_byte *dst)
{
- unsigned long i;
-
- for (i = 0; i + 15 < length; i += 16)
- {
- fprintf (e, "// %4lx: ", i);
- fprintf (e, "%02x %02x %02x %02x %02x %02x %02x %02x ",
- data[i + 0], data[i + 1], data[i + 2], data[i + 3],
- data[i + 4], data[i + 5], data[i + 6], data[i + 7]);
- fprintf (e, "%02x %02x %02x %02x %02x %02x %02x %02x\n",
- data[i + 8], data[i + 9], data[i + 10], data[i + 11],
- data[i + 12], data[i + 13], data[i + 14], data[i + 15]);
- }
-
- if (i < length)
- {
- fprintf (e, "// %4lx:", i);
- while (i < length)
+ if (! src)
+ return 0;
+ switch (src->type)
{
- fprintf (e, " %02x", data[i]);
- ++i;
- }
- fprintf (e, "\n");
+ case RCDATA_WORD:
+ if (dst)
+ windres_put_16 (&wrtarget, dst, (rc_uint_type) src->u.word);
+ return 2;
+ case RCDATA_DWORD:
+ if (dst)
+ windres_put_32 (&wrtarget, dst, (rc_uint_type) src->u.dword);
+ return 4;
+ case RCDATA_STRING:
+ if (dst && src->u.string.length)
+ memcpy (dst, src->u.string.s, src->u.string.length);
+ return (rc_uint_type) src->u.string.length;
+ case RCDATA_WSTRING:
+ if (dst && src->u.wstring.length)
+ memcpy (dst, src->u.wstring.w, src->u.wstring.length * sizeof (unichar));
+ return (rc_uint_type) (src->u.wstring.length * sizeof (unichar));
+ case RCDATA_BUFFER:
+ if (dst && src->u.buffer.length)
+ memcpy (dst, src->u.buffer.data, src->u.buffer.length);
+ return (rc_uint_type) src->u.buffer.length;
+ default:
+ abort ();
}
+ /* Never reached. */
+ return 0;
}
diff --git a/binutils/resres.c b/binutils/resres.c
index 1489d5eeda49..f345da3e5de6 100644
--- a/binutils/resres.c
+++ b/binutils/resres.c
@@ -1,6 +1,8 @@
/* resres.c: read_res_file and write_res_file implementation for windres.
- Copyright 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1998, 1999, 2001, 2002, 2007
+ Free Software Foundation, Inc.
Written by Anders Norlander <anorland@hem2.passagen.se>.
+ Rewritten by Kai Tietz, Onevision.
This file is part of GNU Binutils.
@@ -23,6 +25,7 @@
It assumes that it can use fread and fwrite to read and write
integers. It does no swapping. */
+#include "sysdep.h"
#include "bfd.h"
#include "bucomm.h"
#include "libiberty.h"
@@ -31,154 +34,179 @@
#include <assert.h>
#include <time.h>
-struct res_hdr
- {
- unsigned long data_size;
- unsigned long header_size;
- };
-
-static void write_res_directory
- PARAMS ((const struct res_directory *,
- const struct res_id *, const struct res_id *,
- int *, int));
-static void write_res_resource
- PARAMS ((const struct res_id *, const struct res_id *,
- const struct res_resource *, int *));
-static void write_res_bin
- PARAMS ((const struct res_resource *, const struct res_id *,
- const struct res_id *, const struct res_res_info *));
-
-static void write_res_id PARAMS ((const struct res_id *));
-static void write_res_info PARAMS ((const struct res_res_info *));
-static void write_res_data PARAMS ((const void *, size_t, int));
-static void write_res_header
- PARAMS ((unsigned long, const struct res_id *, const struct res_id *,
- const struct res_res_info *));
-
-static int read_resource_entry PARAMS ((void));
-static void read_res_data PARAMS ((void *, size_t, int));
-static void read_res_id PARAMS ((struct res_id *));
-static unichar *read_unistring PARAMS ((int *));
-static void skip_null_resource PARAMS ((void));
-
-static unsigned long get_id_size PARAMS ((const struct res_id *));
-static void res_align_file PARAMS ((void));
+static rc_uint_type write_res_directory (windres_bfd *, rc_uint_type,
+ const rc_res_directory *, const rc_res_id *,
+ const rc_res_id *, rc_uint_type *, int);
+static rc_uint_type write_res_resource (windres_bfd *, rc_uint_type,const rc_res_id *,
+ const rc_res_id *, const rc_res_resource *,
+ rc_uint_type *);
+static rc_uint_type write_res_bin (windres_bfd *, rc_uint_type, const rc_res_resource *,
+ const rc_res_id *, const rc_res_id *,
+ const rc_res_res_info *);
-static void
- res_add_resource
- PARAMS ((struct res_resource *, const struct res_id *,
- const struct res_id *, int, int));
+static rc_uint_type write_res_id (windres_bfd *, rc_uint_type, const rc_res_id *);
+static rc_uint_type write_res_info (windres_bfd *, rc_uint_type, const rc_res_res_info *);
+static rc_uint_type write_res_data_hdr (windres_bfd *, rc_uint_type, res_hdr *);
-void
- res_append_resource
- PARAMS ((struct res_directory **, struct res_resource *,
- int, const struct res_id *, int));
+static rc_uint_type write_res_header (windres_bfd *, rc_uint_type, rc_uint_type,
+ const rc_res_id *, const rc_res_id *,
+ const rc_res_res_info *);
+
+static int read_resource_entry (windres_bfd *, rc_uint_type *, rc_uint_type);
+static void read_res_data (windres_bfd *, rc_uint_type *, rc_uint_type, void *,
+ rc_uint_type);
+static void read_res_data_hdr (windres_bfd *, rc_uint_type *, rc_uint_type, res_hdr *);
+static void read_res_id (windres_bfd *, rc_uint_type *, rc_uint_type, rc_res_id *);
+static unichar *read_unistring (windres_bfd *, rc_uint_type *, rc_uint_type, rc_uint_type *);
+static void skip_null_resource (windres_bfd *, rc_uint_type *, rc_uint_type);
+static int probe_binary (windres_bfd *wrbfd, rc_uint_type);
+
+static unsigned long get_id_size (const rc_res_id *);
-static struct res_directory *resources = NULL;
+static void res_add_resource (rc_res_resource *, const rc_res_id *,
+ const rc_res_id *, rc_uint_type, int);
+
+static void res_append_resource (rc_res_directory **, rc_res_resource *,
+ int, const rc_res_id *, int);
+
+static rc_res_directory *resources = NULL;
-static FILE *fres;
static const char *filename;
extern char *program_name;
/* Read resource file */
-struct res_directory *
-read_res_file (fn)
- const char *fn;
+rc_res_directory *
+read_res_file (const char *fn)
{
+ rc_uint_type off, flen;
+ windres_bfd wrbfd;
+ bfd *abfd;
+ asection *sec;
filename = fn;
- fres = fopen (filename, "rb");
- if (fres == NULL)
- fatal ("can't open `%s' for output: %s", filename, strerror (errno));
- skip_null_resource ();
+ flen = (rc_uint_type) get_file_size (filename);
+ if (! flen)
+ fatal ("can't open '%s' for input.", filename);
+ abfd = windres_open_as_binary (filename, 1);
+ sec = bfd_get_section_by_name (abfd, ".data");
+ if (sec == NULL)
+ bfd_fatal ("bfd_get_section_by_name");
+ set_windres_bfd (&wrbfd, abfd, sec,
+ (target_is_bigendian ? WR_KIND_BFD_BIN_B
+ : WR_KIND_BFD_BIN_L));
+ off = 0;
+
+ if (! probe_binary (&wrbfd, flen))
+ set_windres_bfd_endianess (&wrbfd, ! target_is_bigendian);
- while (read_resource_entry ())
+ skip_null_resource (&wrbfd, &off, flen);
+
+ while (read_resource_entry (&wrbfd, &off, flen))
;
- fclose (fres);
+ bfd_close (abfd);
return resources;
}
/* Write resource file */
void
-write_res_file (fn, resdir)
- const char *fn;
- const struct res_directory *resdir;
+write_res_file (const char *fn,const rc_res_directory *resdir)
{
- int language;
- static const unsigned char sign[] =
+ asection *sec;
+ rc_uint_type language;
+ bfd *abfd;
+ windres_bfd wrbfd;
+ unsigned long sec_length = 0,sec_length_wrote;
+ static const bfd_byte sign[] =
{0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
- long fpos;
filename = fn;
- fres = fopen (filename, "wb");
- if (fres == NULL)
- fatal ("can't open `%s' for output: %s", filename, strerror (errno));
-
- /* Write 32 bit resource signature */
- write_res_data (sign, sizeof (sign), 1);
-
- /* write resources */
+ abfd = windres_open_as_binary (filename, 0);
+ sec = bfd_make_section (abfd, ".data");
+ if (sec == NULL)
+ bfd_fatal ("bfd_make_section");
+ if (! bfd_set_section_flags (abfd, sec,
+ (SEC_HAS_CONTENTS | SEC_ALLOC
+ | SEC_LOAD | SEC_DATA)))
+ bfd_fatal ("bfd_set_section_flags");
+ /* Requiring this is probably a bug in BFD. */
+ sec->output_section = sec;
+
+ set_windres_bfd (&wrbfd, abfd, sec,
+ (target_is_bigendian ? WR_KIND_BFD_BIN_B
+ : WR_KIND_BFD_BIN_L));
language = -1;
- write_res_directory (resdir, (const struct res_id *) NULL,
- (const struct res_id *) NULL, &language, 1);
-
- /* end file on DWORD boundary */
- fpos = ftell (fres);
- if (fpos % 4)
- write_res_data (sign, fpos % 4, 1);
-
- fclose (fres);
+ sec_length = write_res_directory ((windres_bfd *) NULL, 0x20UL, resdir,
+ (const rc_res_id *) NULL,
+ (const rc_res_id *) NULL, &language, 1);
+ if (! bfd_set_section_size (abfd, sec, (sec_length + 3) & ~3))
+ bfd_fatal ("bfd_set_section_size");
+ if ((sec_length & 3) != 0)
+ set_windres_bfd_content (&wrbfd, sign, sec_length, 4-(sec_length & 3));
+ set_windres_bfd_content (&wrbfd, sign, 0, sizeof (sign));
+ language = -1;
+ sec_length_wrote = write_res_directory (&wrbfd, 0x20UL, resdir,
+ (const rc_res_id *) NULL,
+ (const rc_res_id *) NULL,
+ &language, 1);
+ if (sec_length != sec_length_wrote)
+ fatal ("res write failed with different sizes (%lu/%lu).", (long) sec_length,
+ (long) sec_length_wrote);
+
+ bfd_close (abfd);
+ return;
}
/* Read a resource entry, returns 0 when all resources are read */
static int
-read_resource_entry (void)
+read_resource_entry (windres_bfd *wrbfd, rc_uint_type *off, rc_uint_type omax)
{
- struct res_id type;
- struct res_id name;
- struct res_res_info resinfo;
- struct res_hdr reshdr;
- long version;
+ rc_res_id type;
+ rc_res_id name;
+ rc_res_res_info resinfo;
+ res_hdr reshdr;
void *buff;
- struct res_resource *r;
+ rc_res_resource *r;
+ struct bin_res_info l;
- res_align_file ();
+ off[0] = (off[0] + 3) & ~3;
/* Read header */
- if (fread (&reshdr, sizeof (reshdr), 1, fres) != 1)
+ if ((off[0] + 8) > omax)
return 0;
+ read_res_data_hdr (wrbfd, off, omax, &reshdr);
/* read resource type */
- read_res_id (&type);
+ read_res_id (wrbfd, off, omax, &type);
/* read resource id */
- read_res_id (&name);
+ read_res_id (wrbfd, off, omax, &name);
- res_align_file ();
+ off[0] = (off[0] + 3) & ~3;
/* Read additional resource header */
- read_res_data (&resinfo.version, sizeof (resinfo.version), 1);
- read_res_data (&resinfo.memflags, sizeof (resinfo.memflags), 1);
- read_res_data (&resinfo.language, sizeof (resinfo.language), 1);
- read_res_data (&version, sizeof (version), 1);
- read_res_data (&resinfo.characteristics, sizeof (resinfo.characteristics), 1);
+ read_res_data (wrbfd, off, omax, &l, BIN_RES_INFO_SIZE);
+ resinfo.version = windres_get_32 (wrbfd, l.version, 4);
+ resinfo.memflags = windres_get_16 (wrbfd, l.memflags, 2);
+ resinfo.language = windres_get_16 (wrbfd, l.language, 2);
+ /* resinfo.version2 = windres_get_32 (wrbfd, l.version2, 4); */
+ resinfo.characteristics = windres_get_32 (wrbfd, l.characteristics, 4);
- res_align_file ();
+ off[0] = (off[0] + 3) & ~3;
/* Allocate buffer for data */
buff = res_alloc (reshdr.data_size);
/* Read data */
- read_res_data (buff, reshdr.data_size, 1);
+ read_res_data (wrbfd, off, omax, buff, reshdr.data_size);
/* Convert binary data to resource */
- r = bin_to_res (type, buff, reshdr.data_size, 0);
+ r = bin_to_res (wrbfd, type, buff, reshdr.data_size);
r->res_info = resinfo;
/* Add resource to resource directory */
res_add_resource (r, &type, &name, resinfo.language, 0);
@@ -187,15 +215,12 @@ read_resource_entry (void)
}
/* write resource directory to binary resource file */
-static void
-write_res_directory (rd, type, name, language, level)
- const struct res_directory *rd;
- const struct res_id *type;
- const struct res_id *name;
- int *language;
- int level;
+static rc_uint_type
+write_res_directory (windres_bfd *wrbfd, rc_uint_type off, const rc_res_directory *rd,
+ const rc_res_id *type, const rc_res_id *name, rc_uint_type *language,
+ int level)
{
- const struct res_entry *re;
+ const rc_res_entry *re;
for (re = rd->entries; re != NULL; re = re->next)
{
@@ -218,7 +243,7 @@ write_res_directory (rd, type, name, language, level)
case 3:
/* If we're at level 3, then this key represents a language.
Use it to update the current language. */
- if (!re->id.named
+ if (! re->id.named
&& re->id.u.id != (unsigned long) *language
&& (re->id.u.id & 0xffff) == re->id.u.id)
{
@@ -231,7 +256,8 @@ write_res_directory (rd, type, name, language, level)
}
if (re->subdir)
- write_res_directory (re->u.dir, type, name, language, level + 1);
+ off = write_res_directory (wrbfd, off, re->u.dir, type, name, language,
+ level + 1);
else
{
if (level == 3)
@@ -241,25 +267,25 @@ write_res_directory (rd, type, name, language, level)
2, and represents the name to use. We probably just
set LANGUAGE, and it will probably match what the
resource itself records if anything. */
- write_res_resource (type, name, re->u.res, language);
+ off = write_res_resource (wrbfd, off, type, name, re->u.res,
+ language);
}
else
{
fprintf (stderr, "// Resource at unexpected level %d\n", level);
- write_res_resource (type, (struct res_id *) NULL, re->u.res,
- language);
+ off = write_res_resource (wrbfd, off, type, (rc_res_id *) NULL,
+ re->u.res, language);
}
}
}
+ return off;
}
-static void
-write_res_resource (type, name, res, language)
- const struct res_id *type;
- const struct res_id *name;
- const struct res_resource *res;
- int *language ATTRIBUTE_UNUSED;
+static rc_uint_type
+write_res_resource (windres_bfd *wrbfd, rc_uint_type off, const rc_res_id *type,
+ const rc_res_id *name, const rc_res_resource *res,
+ rc_uint_type *language ATTRIBUTE_UNUSED)
{
int rt;
@@ -327,6 +353,10 @@ write_res_resource (type, name, res, language)
case RES_TYPE_VERSIONINFO:
rt = RT_VERSION;
break;
+
+ case RES_TYPE_TOOLBAR:
+ rt = RT_TOOLBAR;
+ break;
}
if (rt != 0
@@ -339,35 +369,29 @@ write_res_resource (type, name, res, language)
abort ();
}
- write_res_bin (res, type, name, &res->res_info);
- return;
+ return write_res_bin (wrbfd, off, res, type, name, &res->res_info);
}
/* Write a resource in binary resource format */
-static void
-write_res_bin (res, type, name, resinfo)
- const struct res_resource *res;
- const struct res_id *type;
- const struct res_id *name;
- const struct res_res_info *resinfo;
+static rc_uint_type
+write_res_bin (windres_bfd *wrbfd, rc_uint_type off, const rc_res_resource *res,
+ const rc_res_id *type, const rc_res_id *name,
+ const rc_res_res_info *resinfo)
{
- unsigned long datasize = 0;
- const struct bindata *bin_rep, *data;
+ rc_uint_type noff;
+ rc_uint_type datasize = 0;
- bin_rep = res_to_bin (res, 0);
- for (data = bin_rep; data != NULL; data = data->next)
- datasize += data->length;
+ noff = res_to_bin ((windres_bfd *) NULL, off, res);
+ datasize = noff - off;
- write_res_header (datasize, type, name, resinfo);
-
- for (data = bin_rep; data != NULL; data = data->next)
- write_res_data (data->data, data->length, 1);
+ off = write_res_header (wrbfd, off, datasize, type, name, resinfo);
+ return res_to_bin (wrbfd, off, res);
}
/* Get number of bytes needed to store an id in binary format */
static unsigned long
get_id_size (id)
- const struct res_id *id;
+ const rc_res_id *id;
{
if (id->named)
return sizeof (unichar) * (id->u.n.length + 1);
@@ -376,108 +400,142 @@ get_id_size (id)
}
/* Write a resource header */
-static void
-write_res_header (datasize, type, name, resinfo)
- unsigned long datasize;
- const struct res_id *type;
- const struct res_id *name;
- const struct res_res_info *resinfo;
+static rc_uint_type
+write_res_header (windres_bfd *wrbfd, rc_uint_type off, rc_uint_type datasize,
+ const rc_res_id *type, const rc_res_id *name,
+ const rc_res_res_info *resinfo)
{
- struct res_hdr reshdr;
+ res_hdr reshdr;
reshdr.data_size = datasize;
reshdr.header_size = 24 + get_id_size (type) + get_id_size (name);
reshdr.header_size = (reshdr.header_size + 3) & ~3;
- res_align_file ();
- write_res_data (&reshdr, sizeof (reshdr), 1);
- write_res_id (type);
- write_res_id (name);
+ off = (off + 3) & ~3;
+
+ off = write_res_data_hdr (wrbfd, off, &reshdr);
+ off = write_res_id (wrbfd, off, type);
+ off = write_res_id (wrbfd, off, name);
- res_align_file ();
+ off = (off + 3) & ~3;
- write_res_info (resinfo);
- res_align_file ();
+ off = write_res_info (wrbfd, off, resinfo);
+ off = (off + 3) & ~3;
+ return off;
}
+static rc_uint_type
+write_res_data_hdr (windres_bfd *wrbfd, rc_uint_type off, res_hdr *hdr)
+{
+ if (wrbfd)
+ {
+ struct bin_res_hdr brh;
+ windres_put_32 (wrbfd, brh.data_size, hdr->data_size);
+ windres_put_32 (wrbfd, brh.header_size, hdr->header_size);
+ set_windres_bfd_content (wrbfd, &brh, off, BIN_RES_HDR_SIZE);
+ }
+ return off + BIN_RES_HDR_SIZE;
+}
-/* Write data to file, abort on failure */
static void
-write_res_data (data, size, count)
- const void *data;
- size_t size;
- int count;
+read_res_data_hdr (windres_bfd *wrbfd, rc_uint_type *off, rc_uint_type omax,
+ res_hdr *reshdr)
{
- if ((size_t) fwrite (data, size, count, fres) != (size_t) count)
- fatal ("%s: could not write to file", filename);
+ struct bin_res_hdr brh;
+
+ if ((off[0] + BIN_RES_HDR_SIZE) > omax)
+ fatal ("%s: unexpected end of file %ld/%ld", filename,(long) off[0], (long) omax);
+
+ get_windres_bfd_content (wrbfd, &brh, off[0], BIN_RES_HDR_SIZE);
+ reshdr->data_size = windres_get_32 (wrbfd, brh.data_size, 4);
+ reshdr->header_size = windres_get_32 (wrbfd, brh.header_size, 4);
+ off[0] += BIN_RES_HDR_SIZE;
}
/* Read data from file, abort on failure */
static void
-read_res_data (data, size, count)
- void *data;
- size_t size;
- int count;
+read_res_data (windres_bfd *wrbfd, rc_uint_type *off, rc_uint_type omax, void *data,
+ rc_uint_type size)
{
- if (fread (data, size, count, fres) != (size_t) count)
- fatal ("%s: unexpected end of file", filename);
+ if ((off[0] + size) > omax)
+ fatal ("%s: unexpected end of file %ld/%ld %ld", filename,(long) off[0],
+ (long) omax, (long) size);
+ get_windres_bfd_content (wrbfd, data, off[0], size);
+ off[0] += size;
}
/* Write a resource id */
-static void
-write_res_id (id)
- const struct res_id *id;
+static rc_uint_type
+write_res_id (windres_bfd *wrbfd, rc_uint_type off, const rc_res_id *id)
{
if (id->named)
{
- unsigned long len = id->u.n.length;
- unichar null_term = 0;
- write_res_data (id->u.n.name, len * sizeof (unichar), 1);
- write_res_data (&null_term, sizeof (null_term), 1);
+ rc_uint_type len = (((bfd_signed_vma) id->u.n.length < 0 ? 0 : id->u.n.length) + 1);
+ if (wrbfd)
+ {
+ rc_uint_type i;
+ bfd_byte *d = (bfd_byte *) xmalloc (len * sizeof (unichar));
+ for (i = 0; i < (len - 1); i++)
+ windres_put_16 (wrbfd, d + (i * sizeof (unichar)), id->u.n.name[i]);
+ windres_put_16 (wrbfd, d + (i * sizeof (unichar)), 0);
+ set_windres_bfd_content (wrbfd, d, off, (len * sizeof (unichar)));
+ }
+ off += (len * sizeof (unichar));
}
else
{
- unsigned short i = 0xFFFF;
- write_res_data (&i, sizeof (i), 1);
- i = id->u.id;
- write_res_data (&i, sizeof (i), 1);
+ if (wrbfd)
+ {
+ struct bin_res_id bid;
+ windres_put_16 (wrbfd, bid.sig, 0xffff);
+ windres_put_16 (wrbfd, bid.id, id->u.id);
+ set_windres_bfd_content (wrbfd, &bid, off, BIN_RES_ID);
+ }
+ off += BIN_RES_ID;
}
+ return off;
}
/* Write resource info */
-static void
-write_res_info (info)
- const struct res_res_info *info;
+static rc_uint_type
+write_res_info (windres_bfd *wrbfd, rc_uint_type off, const rc_res_res_info *info)
{
- write_res_data (&info->version, sizeof (info->version), 1);
- write_res_data (&info->memflags, sizeof (info->memflags), 1);
- write_res_data (&info->language, sizeof (info->language), 1);
- write_res_data (&info->version, sizeof (info->version), 1);
- write_res_data (&info->characteristics, sizeof (info->characteristics), 1);
+ if (wrbfd)
+ {
+ struct bin_res_info l;
+
+ windres_put_32 (wrbfd, l.version, info->version);
+ windres_put_16 (wrbfd, l.memflags, info->memflags);
+ windres_put_16 (wrbfd, l.language, info->language);
+ windres_put_32 (wrbfd, l.version2, info->version);
+ windres_put_32 (wrbfd, l.characteristics, info->characteristics);
+ set_windres_bfd_content (wrbfd, &l, off, BIN_RES_INFO_SIZE);
+ }
+ return off + BIN_RES_INFO_SIZE;
}
/* read a resource identifier */
-void
-read_res_id (id)
- struct res_id *id;
+static void
+read_res_id (windres_bfd *wrbfd, rc_uint_type *off, rc_uint_type omax, rc_res_id *id)
{
+ struct bin_res_id bid;
unsigned short ord;
unichar *id_s = NULL;
- int len;
+ rc_uint_type len;
- read_res_data (&ord, sizeof (ord), 1);
+ read_res_data (wrbfd, off, omax, &bid, BIN_RES_ID - 2);
+ ord = (unsigned short) windres_get_16 (wrbfd, bid.sig, 2);
if (ord == 0xFFFF) /* an ordinal id */
{
- read_res_data (&ord, sizeof (ord), 1);
+ read_res_data (wrbfd, off, omax, bid.id, BIN_RES_ID - 2);
id->named = 0;
- id->u.id = ord;
+ id->u.id = windres_get_16 (wrbfd, bid.id, 2);
}
else
/* named id */
{
- if (fseek (fres, -sizeof (ord), SEEK_CUR) != 0)
- fatal ("%s: %s: could not seek in file", program_name, filename);
- id_s = read_unistring (&len);
+ off[0] -= 2;
+ id_s = read_unistring (wrbfd, off, omax, &len);
id->named = 1;
id->u.n.length = len;
id->u.n.name = id_s;
@@ -486,39 +544,62 @@ read_res_id (id)
/* Read a null terminated UNICODE string */
static unichar *
-read_unistring (len)
- int *len;
+read_unistring (windres_bfd *wrbfd, rc_uint_type *off, rc_uint_type omax,
+ rc_uint_type *len)
{
unichar *s;
+ bfd_byte d[2];
unichar c;
unichar *p;
- int l;
+ rc_uint_type l;
+ rc_uint_type soff = off[0];
- *len = 0;
- l = 0;
+ do
+ {
+ read_res_data (wrbfd, &soff, omax, d, sizeof (unichar));
+ c = windres_get_16 (wrbfd, d, 2);
+ }
+ while (c != 0);
+ l = ((soff - off[0]) / sizeof (unichar));
- /* there are hardly any names longer than 256 characters */
- p = s = (unichar *) xmalloc (sizeof (unichar) * 256);
+ /* there are hardly any names longer than 256 characters, but anyway. */
+ p = s = (unichar *) xmalloc (sizeof (unichar) * l);
do
{
- read_res_data (&c, sizeof (c), 1);
+ read_res_data (wrbfd, off, omax, d, sizeof (unichar));
+ c = windres_get_16 (wrbfd, d, 2);
*p++ = c;
- if (c != 0)
- l++;
}
while (c != 0);
- *len = l;
+ *len = l - 1;
return s;
}
-/* align file on DWORD boundary */
-static void
-res_align_file (void)
+static int
+probe_binary (windres_bfd *wrbfd, rc_uint_type omax)
{
- int pos = ftell (fres);
- int skip = ((pos + 3) & ~3) - pos;
- if (fseek (fres, skip, SEEK_CUR) != 0)
- fatal ("%s: %s: unable to align file", program_name, filename);
+ rc_uint_type off;
+ res_hdr reshdr;
+
+ off = 0;
+ read_res_data_hdr (wrbfd, &off, omax, &reshdr);
+ if (reshdr.data_size != 0)
+ return 1;
+ if ((reshdr.header_size != 0x20 && ! target_is_bigendian)
+ || (reshdr.header_size != 0x20000000 && target_is_bigendian))
+ return 1;
+
+ /* Subtract size of HeaderSize. DataSize has to be zero. */
+ off += 0x20 - BIN_RES_HDR_SIZE;
+ if ((off + BIN_RES_HDR_SIZE) >= omax)
+ return 1;
+ read_res_data_hdr (wrbfd, &off, omax, &reshdr);
+ /* off is advanced by BIN_RES_HDR_SIZE in read_res_data_hdr()
+ which is part of reshdr.header_size. We shouldn't take it
+ into account twice. */
+ if ((off - BIN_RES_HDR_SIZE + reshdr.data_size + reshdr.header_size) > omax)
+ return 0;
+ return 1;
}
/* Check if file is a win32 binary resource file, if so
@@ -526,16 +607,19 @@ res_align_file (void)
error.
*/
static void
-skip_null_resource (void)
+skip_null_resource (windres_bfd *wrbfd, rc_uint_type *off, rc_uint_type omax)
{
- struct res_hdr reshdr =
- {0, 0};
- read_res_data (&reshdr, sizeof (reshdr), 1);
- if ((reshdr.data_size != 0) || (reshdr.header_size != 0x20))
+ res_hdr reshdr;
+ read_res_data_hdr (wrbfd, off, omax, &reshdr);
+ if (reshdr.data_size != 0)
+ goto skip_err;
+ if ((reshdr.header_size != 0x20 && ! target_is_bigendian)
+ || (reshdr.header_size != 0x20000000 && target_is_bigendian))
goto skip_err;
- /* Subtract size of HeaderSize and DataSize */
- if (fseek (fres, reshdr.header_size - 8, SEEK_CUR) != 0)
+ /* Subtract size of HeaderSize. DataSize has to be zero. */
+ off[0] += 0x20 - BIN_RES_HDR_SIZE;
+ if (off[0] >= omax)
goto skip_err;
return;
@@ -547,15 +631,11 @@ skip_err:
}
/* Add a resource to resource directory */
-void
-res_add_resource (r, type, id, language, dupok)
- struct res_resource *r;
- const struct res_id *type;
- const struct res_id *id;
- int language;
- int dupok;
+static void
+res_add_resource (rc_res_resource *r, const rc_res_id *type, const rc_res_id *id,
+ rc_uint_type language, int dupok)
{
- struct res_id a[3];
+ rc_res_id a[3];
a[0] = *type;
a[1] = *id;
@@ -568,21 +648,17 @@ res_add_resource (r, type, id, language, dupok)
This is just copied from define_resource
and modified to add an existing resource.
*/
-void
-res_append_resource (resources, resource, cids, ids, dupok)
- struct res_directory **resources;
- struct res_resource *resource;
- int cids;
- const struct res_id *ids;
- int dupok;
+static void
+res_append_resource (rc_res_directory **resources, rc_res_resource *resource,
+ int cids, const rc_res_id *ids, int dupok)
{
- struct res_entry *re = NULL;
+ rc_res_entry *re = NULL;
int i;
assert (cids > 0);
for (i = 0; i < cids; i++)
{
- struct res_entry **pp;
+ rc_res_entry **pp;
if (*resources == NULL)
{
@@ -593,8 +669,8 @@ res_append_resource (resources, resource, cids, ids, dupok)
if (timeval == 0)
timeval = time (NULL);
- *resources = ((struct res_directory *)
- res_alloc (sizeof **resources));
+ *resources = ((rc_res_directory *)
+ res_alloc (sizeof (rc_res_directory)));
(*resources)->characteristics = 0;
(*resources)->time = timeval;
(*resources)->major = 0;
@@ -610,7 +686,7 @@ res_append_resource (resources, resource, cids, ids, dupok)
re = *pp;
else
{
- re = (struct res_entry *) res_alloc (sizeof *re);
+ re = (rc_res_entry *) res_alloc (sizeof (rc_res_entry));
re->next = NULL;
re->id = ids[i];
if ((i + 1) < cids)
@@ -629,7 +705,7 @@ res_append_resource (resources, resource, cids, ids, dupok)
if ((i + 1) < cids)
{
- if (!re->subdir)
+ if (! re->subdir)
{
fprintf (stderr, "%s: ", program_name);
res_ids_print (stderr, i, ids);
diff --git a/binutils/size.c b/binutils/size.c
index b78cba02ba04..f83b050506b8 100644
--- a/binutils/size.c
+++ b/binutils/size.c
@@ -1,6 +1,6 @@
/* size.c -- report size of various sections of an executable file.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -28,10 +28,11 @@
If you write shell scripts which manipulate this info then you may be
out of luck; there's no --compatibility or --pedantic option. */
+#include "sysdep.h"
#include "bfd.h"
-#include "bucomm.h"
#include "libiberty.h"
#include "getopt.h"
+#include "bucomm.h"
#ifndef BSD_DEFAULT
#define BSD_DEFAULT 1
@@ -98,7 +99,7 @@ usage (FILE *stream, int status)
#endif
);
list_supported_targets (program_name, stream);
- if (status == 0)
+ if (REPORT_BUGS_TO[0] && status == 0)
fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
exit (status);
}
@@ -346,7 +347,10 @@ display_file (char *filename)
bfd *file;
if (get_file_size (filename) < 1)
- return;
+ {
+ return_code = 1;
+ return;
+ }
file = bfd_openr (filename, target);
if (file == NULL)
diff --git a/binutils/srconv.c b/binutils/srconv.c
index d1f3efdb9e01..906432f6dba4 100644
--- a/binutils/srconv.c
+++ b/binutils/srconv.c
@@ -1,6 +1,6 @@
/* srconv.c -- Sysroff conversion program
Copyright 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005 Free Software Foundation, Inc.
+ 2005, 2007 Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -26,6 +26,7 @@
All debugging information is preserved */
+#include "sysdep.h"
#include "bfd.h"
#include "bucomm.h"
#include "sysroff.h"
@@ -704,6 +705,7 @@ walk_tree_type_1 (struct coff_sfile *sfile, struct coff_symbol *symbol,
{
struct IT_dpt dpt;
+ dpt.dunno = 0;
walk_tree_type_1 (sfile, symbol, type->u.pointer.points_to, nest + 1);
dpt.neg = 0x1001;
sysroff_swap_dpt_out (file, &dpt);
@@ -1728,7 +1730,7 @@ show_usage (FILE *file, int status)
-h --help Display this information\n\
-v --version Print the program's version number\n"));
- if (status == 0)
+ if (REPORT_BUGS_TO[0] && status == 0)
fprintf (file, _("Report bugs to %s\n"), REPORT_BUGS_TO);
exit (status);
}
diff --git a/binutils/stabs.c b/binutils/stabs.c
index 879a3e2c7a70..c8fc77dab2f6 100644
--- a/binutils/stabs.c
+++ b/binutils/stabs.c
@@ -1,6 +1,6 @@
/* stabs.c -- Parse stabs debugging information
- Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
+ Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>.
This file is part of GNU Binutils.
@@ -25,10 +25,8 @@
code. The job it does is somewhat different, because it is not
trying to identify the correct address for anything. */
-#include <stdio.h>
-
+#include "sysdep.h"
#include "bfd.h"
-#include "bucomm.h"
#include "libiberty.h"
#include "safe-ctype.h"
#include "demangle.h"
@@ -1696,12 +1694,12 @@ parse_stab_range_type (void *dhandle, struct stab_handle *info, const char *type
#define ULLHIGH "01777777777777777777777;"
if (index_type == DEBUG_TYPE_NULL)
{
- if (strncmp (s2, LLLOW, sizeof LLLOW - 1) == 0
- && strncmp (s3, LLHIGH, sizeof LLHIGH - 1) == 0)
+ if (CONST_STRNEQ (s2, LLLOW)
+ && CONST_STRNEQ (s3, LLHIGH))
return debug_make_int_type (dhandle, 8, FALSE);
if (! ov2
&& n2 == 0
- && strncmp (s3, ULLHIGH, sizeof ULLHIGH - 1) == 0)
+ && CONST_STRNEQ (s3, ULLHIGH))
return debug_make_int_type (dhandle, 8, TRUE);
}
@@ -2832,7 +2830,7 @@ parse_stab_argtypes (void *dhandle, struct stab_handle *info,
&& (ISDIGIT (argtypes[2])
|| argtypes[2] == 'Q'
|| argtypes[2] == 't'))
- || strncmp (argtypes, "__ct", 4) == 0);
+ || CONST_STRNEQ (argtypes, "__ct"));
is_constructor = (is_full_physname_constructor
|| (tagname != NULL
@@ -2840,7 +2838,7 @@ parse_stab_argtypes (void *dhandle, struct stab_handle *info,
is_destructor = ((argtypes[0] == '_'
&& (argtypes[1] == '$' || argtypes[1] == '.')
&& argtypes[2] == '_')
- || strncmp (argtypes, "__dt", 4) == 0);
+ || CONST_STRNEQ (argtypes, "__dt"));
is_v3 = argtypes[0] == '_' && argtypes[1] == 'Z';
if (is_destructor || is_full_physname_constructor || is_v3)
@@ -3841,7 +3839,7 @@ stab_demangle_function_name (struct stab_demangle_info *minfo,
*pp = scan + 2;
if (*pp - name >= 5
- && strncmp (name, "type", 4) == 0
+ && CONST_STRNEQ (name, "type")
&& (name[4] == '$' || name[4] == '.'))
{
const char *tem;
diff --git a/binutils/strings.c b/binutils/strings.c
index a04cb581eaea..2238574bac04 100644
--- a/binutils/strings.c
+++ b/binutils/strings.c
@@ -1,6 +1,6 @@
/* strings -- print the strings of printable characters in files
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2005, 2006, 2007 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
@@ -46,6 +46,7 @@
littleendian 32-bit.
--target=BFDNAME
+ -T {bfdname}
Specify a non-default object file format.
--help
@@ -57,17 +58,13 @@
Written by Richard Stallman <rms@gnu.ai.mit.edu>
and David MacKenzie <djm@gnu.ai.mit.edu>. */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
+#include "sysdep.h"
#include "bfd.h"
-#include <stdio.h>
#include "getopt.h"
-#include <errno.h>
-#include "bucomm.h"
#include "libiberty.h"
#include "safe-ctype.h"
#include <sys/stat.h>
+#include "bucomm.h"
/* Some platforms need to put stdin into binary mode, to read
binary files. */
@@ -195,7 +192,7 @@ main (int argc, char **argv)
target = NULL;
encoding = 's';
- while ((optc = getopt_long (argc, argv, "afhHn:ot:e:Vv0123456789",
+ while ((optc = getopt_long (argc, argv, "afhHn:ot:e:T:Vv0123456789",
long_options, (int *) 0)) != EOF)
{
switch (optc)
@@ -721,7 +718,7 @@ usage (FILE *stream, int status)
-h --help Display this information\n\
-v --version Print the program's version number\n"));
list_supported_targets (program_name, stream);
- if (status == 0)
+ if (REPORT_BUGS_TO[0] && status == 0)
fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
exit (status);
}
diff --git a/binutils/sysdep.h b/binutils/sysdep.h
new file mode 100644
index 000000000000..9627b46d459c
--- /dev/null
+++ b/binutils/sysdep.h
@@ -0,0 +1,174 @@
+/* sysdep.h -- handle host dependencies for binutils
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2005, 2006, 2007 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. */
+
+#ifndef _BIN_SYSDEP_H
+#define _BIN_SYSDEP_H
+
+#include "ansidecl.h"
+#include <stdio.h>
+#include <sys/types.h>
+
+#include "bfdver.h"
+#include "config.h"
+
+#include <stdarg.h>
+
+#ifdef USE_BINARY_FOPEN
+#include "fopen-bin.h"
+#else
+#include "fopen-same.h"
+#endif
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#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_FCNTL_H
+#include <fcntl.h>
+#else
+#ifdef HAVE_SYS_FILE_H
+#include <sys/file.h>
+#endif
+#endif
+
+#if !HAVE_DECL_STPCPY
+extern char *stpcpy (char *, const char *);
+#endif
+
+#if !HAVE_DECL_STRSTR
+extern char *strstr ();
+#endif
+
+#ifdef HAVE_SBRK
+#if !HAVE_DECL_SBRK
+extern char *sbrk ();
+#endif
+#endif
+
+#if !HAVE_DECL_GETENV
+extern char *getenv ();
+#endif
+
+#if !HAVE_DECL_ENVIRON
+extern char **environ;
+#endif
+
+#if !HAVE_DECL_FPRINTF
+extern int fprintf (FILE *, const char *, ...);
+#endif
+
+#if !HAVE_DECL_SNPRINTF
+extern int snprintf(char *, size_t, const char *, ...);
+#endif
+
+#if !HAVE_DECL_VSNPRINTF
+extern int vsnprintf(char *, size_t, const char *, va_list);
+#endif
+
+#ifndef O_RDONLY
+#define O_RDONLY 0
+#endif
+
+#ifndef O_RDWR
+#define O_RDWR 2
+#endif
+
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
+#ifndef SEEK_CUR
+#define SEEK_CUR 1
+#endif
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+#if 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
+
+/* Used by ar.c and objcopy.c. */
+#define BUFSIZE 8192
+
+#endif /* _BIN_SYSDEP_H */
diff --git a/binutils/sysdump.c b/binutils/sysdump.c
index ec19472558fd..2f924692064a 100644
--- a/binutils/sysdump.c
+++ b/binutils/sysdump.c
@@ -1,5 +1,5 @@
/* Sysroff object format dumper.
- Copyright 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2005
+ Copyright 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -25,13 +25,12 @@
This program reads a SYSROFF object file and prints it in an
almost human readable form to stdout. */
+#include "sysdep.h"
#include "bfd.h"
-#include "bucomm.h"
#include "safe-ctype.h"
-
-#include <stdio.h>
#include "libiberty.h"
#include "getopt.h"
+#include "bucomm.h"
#include "sysroff.h"
static int dump = 1;
@@ -644,7 +643,7 @@ show_usage (FILE *file, int status)
-h --help Display this information\n\
-v --version Print the program's version number\n"));
- if (status == 0)
+ if (REPORT_BUGS_TO[0] && status == 0)
fprintf (file, _("Report bugs to %s\n"), REPORT_BUGS_TO);
exit (status);
}
diff --git a/binutils/sysinfo.c b/binutils/sysinfo.c
deleted file mode 100644
index a8426ff71fef..000000000000
--- a/binutils/sysinfo.c
+++ /dev/null
@@ -1,1804 +0,0 @@
-/* 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 {
- COND = 258,
- REPEAT = 259,
- TYPE = 260,
- NAME = 261,
- NUMBER = 262,
- UNIT = 263
- };
-#endif
-/* Tokens. */
-#define COND 258
-#define REPEAT 259
-#define TYPE 260
-#define NAME 261
-#define NUMBER 262
-#define UNIT 263
-
-
-
-
-/* Copy the first part of user declarations. */
-#line 20 "sysinfo.y"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-static char writecode;
-static char *it;
-static int code;
-static char * repeat;
-static char *oldrepeat;
-static char *name;
-static int rdepth;
-static char *names[] = {" ","[n]","[n][m]"};
-static char *pnames[]= {"","*","**"};
-
-static int yyerror (char *s);
-extern int yylex (void);
-
-
-/* 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 39 "sysinfo.y"
-typedef union YYSTYPE {
- int i;
- char *s;
-} YYSTYPE;
-/* Line 196 of yacc.c. */
-#line 124 "sysinfo.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 136 "sysinfo.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 3
-/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 38
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 11
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 19
-/* YYNRULES -- Number of rules. */
-#define YYNRULES 27
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 55
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
-#define YYUNDEFTOK 2
-#define YYMAXUTOK 263
-
-#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, 2, 2, 2, 2, 2, 2, 2,
- 5, 6, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 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,
- 7, 8, 9, 10
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
- YYRHS. */
-static const unsigned char yyprhs[] =
-{
- 0, 0, 3, 4, 7, 10, 11, 12, 19, 22,
- 25, 28, 29, 30, 37, 38, 45, 46, 57, 59,
- 60, 64, 67, 71, 72, 73, 77, 78
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yysigned_char yyrhs[] =
-{
- 12, 0, -1, -1, 13, 14, -1, 15, 14, -1,
- -1, -1, 5, 8, 9, 16, 17, 6, -1, 22,
- 17, -1, 20, 17, -1, 18, 17, -1, -1, -1,
- 5, 4, 8, 19, 17, 6, -1, -1, 5, 3,
- 8, 21, 17, 6, -1, -1, 5, 25, 5, 24,
- 26, 6, 27, 23, 28, 6, -1, 7, -1, -1,
- 5, 8, 6, -1, 9, 10, -1, 5, 8, 6,
- -1, -1, -1, 5, 29, 6, -1, -1, 29, 5,
- 8, 8, 6, -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const unsigned short int yyrline[] =
-{
- 0, 53, 53, 53, 91, 92, 97, 96, 174, 175,
- 176, 177, 181, 180, 228, 227, 255, 254, 362, 363,
- 367, 372, 378, 379, 382, 383, 385, 387
-};
-#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", "COND", "REPEAT", "'('", "')'", "TYPE",
- "NAME", "NUMBER", "UNIT", "$accept", "top", "@1", "it_list", "it", "@2",
- "it_field_list", "repeat_it_field", "@3", "cond_it_field", "@4",
- "it_field", "@5", "attr_type", "attr_desc", "attr_size", "attr_id",
- "enums", "enum_list", 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, 40, 41, 260, 261, 262,
- 263
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const unsigned char yyr1[] =
-{
- 0, 11, 13, 12, 14, 14, 16, 15, 17, 17,
- 17, 17, 19, 18, 21, 20, 23, 22, 24, 24,
- 25, 26, 27, 27, 28, 28, 29, 29
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const unsigned char yyr2[] =
-{
- 0, 2, 0, 2, 2, 0, 0, 6, 2, 2,
- 2, 0, 0, 6, 0, 6, 0, 10, 1, 0,
- 3, 2, 3, 0, 0, 3, 0, 5
-};
-
-/* 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 char yydefact[] =
-{
- 2, 0, 5, 1, 0, 3, 5, 0, 4, 6,
- 11, 0, 0, 11, 11, 11, 0, 0, 0, 0,
- 7, 10, 9, 8, 14, 12, 0, 19, 11, 11,
- 20, 18, 0, 0, 0, 0, 0, 15, 13, 21,
- 23, 0, 16, 0, 24, 22, 26, 0, 0, 17,
- 0, 25, 0, 0, 27
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yysigned_char yydefgoto[] =
-{
- -1, 1, 2, 5, 6, 10, 12, 13, 29, 14,
- 28, 15, 44, 32, 19, 36, 42, 47, 48
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -14
-static const yysigned_char yypact[] =
-{
- -14, 8, 4, -14, 2, -14, 4, 3, -14, -14,
- 6, 0, 7, 6, 6, 6, 9, 10, 11, 15,
- -14, -14, -14, -14, -14, -14, 16, 14, 6, 6,
- -14, -14, 5, 17, 18, 19, 20, -14, -14, -14,
- 22, 23, -14, 24, 27, -14, -14, 28, 1, -14,
- 25, -14, 29, 30, -14
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const yysigned_char yypgoto[] =
-{
- -14, -14, -14, 32, -14, -14, -13, -14, -14, -14,
- -14, -14, -14, -14, -14, -14, -14, -14, -14
-};
-
-/* 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 -1
-static const unsigned char yytable[] =
-{
- 21, 22, 23, 16, 17, 18, 50, 51, 3, 4,
- 7, 11, 9, 20, 35, 33, 34, 24, 25, 26,
- 27, 31, 30, 37, 38, 0, 40, 41, 0, 39,
- 45, 43, 46, 52, 49, 0, 54, 53, 8
-};
-
-static const yysigned_char yycheck[] =
-{
- 13, 14, 15, 3, 4, 5, 5, 6, 0, 5,
- 8, 5, 9, 6, 9, 28, 29, 8, 8, 8,
- 5, 7, 6, 6, 6, -1, 6, 5, -1, 10,
- 6, 8, 5, 8, 6, -1, 6, 8, 6
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
-static const unsigned char yystos[] =
-{
- 0, 12, 13, 0, 5, 14, 15, 8, 14, 9,
- 16, 5, 17, 18, 20, 22, 3, 4, 5, 25,
- 6, 17, 17, 17, 8, 8, 8, 5, 21, 19,
- 6, 7, 24, 17, 17, 9, 26, 6, 6, 10,
- 6, 5, 27, 8, 23, 6, 5, 28, 29, 6,
- 5, 6, 8, 8, 6
-};
-
-#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 2:
-#line 53 "sysinfo.y"
- {
- switch (writecode)
- {
- case 'i':
- printf("#ifdef SYSROFF_SWAP_IN\n");
- break;
- case 'p':
- printf("#ifdef SYSROFF_p\n");
- break;
- case 'd':
- break;
- case 'g':
- printf("#ifdef SYSROFF_SWAP_OUT\n");
- break;
- case 'c':
- printf("#ifdef SYSROFF_PRINT\n");
- printf("#include <stdio.h>\n");
- printf("#include <stdlib.h>\n");
- printf("#include <ansidecl.h>\n");
- break;
- }
- }
- break;
-
- case 3:
-#line 75 "sysinfo.y"
- {
- switch (writecode) {
- case 'i':
- case 'p':
- case 'g':
- case 'c':
- printf("#endif\n");
- break;
- case 'd':
- break;
- }
-}
- break;
-
- case 6:
-#line 97 "sysinfo.y"
- {
- it = (yyvsp[-1].s); code = (yyvsp[0].i);
- switch (writecode)
- {
- case 'd':
- printf("\n\n\n#define IT_%s_CODE 0x%x\n", it,code);
- printf("struct IT_%s;\n", it);
- printf("extern void sysroff_swap_%s_in PARAMS ((struct IT_%s *));\n",
- (yyvsp[-1].s), it);
- printf("extern void sysroff_swap_%s_out PARAMS ((FILE *, struct IT_%s *));\n",
- (yyvsp[-1].s), it);
- printf("extern void sysroff_print_%s_out PARAMS ((struct IT_%s *));\n",
- (yyvsp[-1].s), it);
- printf("struct IT_%s { \n", it);
- break;
- case 'i':
- printf("void sysroff_swap_%s_in(ptr)\n",(yyvsp[-1].s));
- printf("struct IT_%s *ptr;\n", it);
- printf("{\n");
- printf("unsigned char raw[255];\n");
- printf("\tint idx = 0 ;\n");
- printf("\tint size;\n");
- printf("memset(raw,0,255);\n");
- printf("memset(ptr,0,sizeof(*ptr));\n");
- printf("size = fillup(raw);\n");
- break;
- case 'g':
- printf("void sysroff_swap_%s_out(file,ptr)\n",(yyvsp[-1].s));
- printf("FILE * file;\n");
- printf("struct IT_%s *ptr;\n", it);
- printf("{\n");
- printf("\tunsigned char raw[255];\n");
- printf("\tint idx = 16 ;\n");
- printf("\tmemset (raw, 0, 255);\n");
- printf("\tcode = IT_%s_CODE;\n", it);
- break;
- case 'o':
- printf("void sysroff_swap_%s_out(abfd,ptr)\n",(yyvsp[-1].s));
- printf("bfd * abfd;\n");
- printf("struct IT_%s *ptr;\n",it);
- printf("{\n");
- printf("int idx = 0 ;\n");
- break;
- case 'c':
- printf("void sysroff_print_%s_out(ptr)\n",(yyvsp[-1].s));
- printf("struct IT_%s *ptr;\n", it);
- printf("{\n");
- printf("itheader(\"%s\", IT_%s_CODE);\n",(yyvsp[-1].s),(yyvsp[-1].s));
- break;
-
- case 't':
- break;
- }
-
- }
- break;
-
- case 7:
-#line 154 "sysinfo.y"
- {
- switch (writecode) {
- case 'd':
- printf("};\n");
- break;
- case 'g':
- printf("\tchecksum(file,raw, idx, IT_%s_CODE);\n", it);
-
- case 'i':
-
- case 'o':
- case 'c':
- printf("}\n");
- }
-}
- break;
-
- case 12:
-#line 181 "sysinfo.y"
- {
- rdepth++;
- switch (writecode)
- {
- case 'c':
- if (rdepth==1)
- printf("\tprintf(\"repeat %%d\\n\", %s);\n",(yyvsp[0].s));
- if (rdepth==2)
- printf("\tprintf(\"repeat %%d\\n\", %s[n]);\n",(yyvsp[0].s));
- case 'i':
- case 'g':
- case 'o':
-
- if (rdepth==1)
- {
- printf("\t{ int n; for (n = 0; n < %s; n++) {\n", (yyvsp[0].s));
- }
- if (rdepth == 2) {
- printf("\t{ int m; for (m = 0; m < %s[n]; m++) {\n", (yyvsp[0].s));
- }
-
- break;
- }
-
- oldrepeat = repeat;
- repeat = (yyvsp[0].s);
- }
- break;
-
- case 13:
-#line 211 "sysinfo.y"
- {
- repeat = oldrepeat;
- oldrepeat =0;
- rdepth--;
- switch (writecode)
- {
- case 'i':
- case 'g':
- case 'o':
- case 'c':
- printf("\t}}\n");
- }
- }
- break;
-
- case 14:
-#line 228 "sysinfo.y"
- {
- switch (writecode)
- {
- case 'i':
- case 'g':
- case 'o':
- case 'c':
- printf("\tif (%s) {\n", (yyvsp[0].s));
- break;
- }
- }
- break;
-
- case 15:
-#line 241 "sysinfo.y"
- {
- switch (writecode)
- {
- case 'i':
- case 'g':
- case 'o':
- case 'c':
- printf("\t}\n");
- }
- }
- break;
-
- case 16:
-#line 255 "sysinfo.y"
- {name = (yyvsp[0].s); }
- break;
-
- case 17:
-#line 257 "sysinfo.y"
- {
- char *desc = (yyvsp[-8].s);
- char *type = (yyvsp[-6].s);
- int size = (yyvsp[-5].i);
- char *id = (yyvsp[-3].s);
-char *p = names[rdepth];
-char *ptr = pnames[rdepth];
- switch (writecode)
- {
- case 'g':
- if (size % 8)
- {
-
- printf("\twriteBITS(ptr->%s%s,raw,&idx,%d);\n",
- id,
- names[rdepth], size);
-
- }
- else {
- printf("\twrite%s(ptr->%s%s,raw,&idx,%d,file);\n",
- type,
- id,
- names[rdepth],size/8);
- }
- break;
- case 'i':
- {
-
- if (rdepth >= 1)
-
- {
- printf("if (!ptr->%s) ptr->%s = (%s*)xcalloc(%s, sizeof(ptr->%s[0]));\n",
- id,
- id,
- type,
- repeat,
- id);
- }
-
- if (rdepth == 2)
- {
- printf("if (!ptr->%s[n]) ptr->%s[n] = (%s**)xcalloc(%s[n], sizeof(ptr->%s[n][0]));\n",
- id,
- id,
- type,
- repeat,
- id);
- }
-
- }
-
- if (size % 8)
- {
- printf("\tptr->%s%s = getBITS(raw,&idx, %d,size);\n",
- id,
- names[rdepth],
- size);
- }
- else {
- printf("\tptr->%s%s = get%s(raw,&idx, %d,size);\n",
- id,
- names[rdepth],
- type,
- size/8);
- }
- break;
- case 'o':
- printf("\tput%s(raw,%d,%d,&idx,ptr->%s%s);\n", type,size/8,size%8,id,names[rdepth]);
- break;
- case 'd':
- if (repeat)
- printf("\t/* repeat %s */\n", repeat);
-
- if (type[0] == 'I') {
- printf("\tint %s%s; \t/* %s */\n",ptr,id, desc);
- }
- else if (type[0] =='C') {
- printf("\tchar %s*%s;\t /* %s */\n",ptr,id, desc);
- }
- else {
- printf("\tbarray %s%s;\t /* %s */\n",ptr,id, desc);
- }
- break;
- case 'c':
- printf("tabout();\n");
- printf("\tprintf(\"/*%-30s*/ ptr->%s = \");\n", desc, id);
-
- if (type[0] == 'I')
- printf("\tprintf(\"%%d\\n\",ptr->%s%s);\n", id,p);
- else if (type[0] == 'C')
- printf("\tprintf(\"%%s\\n\",ptr->%s%s);\n", id,p);
-
- else if (type[0] == 'B')
- {
- printf("\tpbarray(&ptr->%s%s);\n", id,p);
- }
- else abort();
- break;
- }
- }
- break;
-
- case 18:
-#line 362 "sysinfo.y"
- { (yyval.s) = (yyvsp[0].s); }
- break;
-
- case 19:
-#line 363 "sysinfo.y"
- { (yyval.s) = "INT";}
- break;
-
- case 20:
-#line 368 "sysinfo.y"
- { (yyval.s) = (yyvsp[-1].s); }
- break;
-
- case 21:
-#line 373 "sysinfo.y"
- { (yyval.i) = (yyvsp[-1].i) * (yyvsp[0].i); }
- break;
-
- case 22:
-#line 378 "sysinfo.y"
- { (yyval.s) = (yyvsp[-1].s); }
- break;
-
- case 23:
-#line 379 "sysinfo.y"
- { (yyval.s) = "dummy";}
- break;
-
- case 27:
-#line 387 "sysinfo.y"
- {
- switch (writecode)
- {
- case 'd':
- printf("#define %s %s\n", (yyvsp[-2].s),(yyvsp[-1].s));
- break;
- case 'c':
- printf("if (ptr->%s%s == %s) { tabout(); printf(\"%s\\n\");}\n", name, names[rdepth],(yyvsp[-1].s),(yyvsp[-2].s));
- }
- }
- break;
-
-
- default: break;
- }
-
-/* Line 1126 of yacc.c. */
-#line 1503 "sysinfo.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 402 "sysinfo.y"
-
-/* four modes
-
- -d write structure definitions for sysroff in host format
- -i write functions to swap into sysroff format in
- -o write functions to swap into sysroff format out
- -c write code to print info in human form */
-
-int yydebug;
-
-int
-main (int ac, char **av)
-{
- yydebug=0;
- if (ac > 1)
- writecode = av[1][1];
-if (writecode == 'd')
- {
- printf("typedef struct { unsigned char *data; int len; } barray; \n");
- printf("typedef int INT;\n");
- printf("typedef char * CHARS;\n");
-
- }
- yyparse();
-return 0;
-}
-
-static int
-yyerror (char *s)
-{
- fprintf(stderr, "%s\n" , s);
- return 0;
-}
-
diff --git a/binutils/sysinfo.h b/binutils/sysinfo.h
deleted file mode 100644
index a608d69f82b3..000000000000
--- a/binutils/sysinfo.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* 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 {
- COND = 258,
- REPEAT = 259,
- TYPE = 260,
- NAME = 261,
- NUMBER = 262,
- UNIT = 263
- };
-#endif
-/* Tokens. */
-#define COND 258
-#define REPEAT 259
-#define TYPE 260
-#define NAME 261
-#define NUMBER 262
-#define UNIT 263
-
-
-
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 39 "sysinfo.y"
-typedef union YYSTYPE {
- int i;
- char *s;
-} YYSTYPE;
-/* Line 1447 of yacc.c. */
-#line 59 "sysinfo.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/syslex.c b/binutils/syslex.c
deleted file mode 100644
index 48aab40d1659..000000000000
--- a/binutils/syslex.c
+++ /dev/null
@@ -1,1729 +0,0 @@
-/* A lexical scanner generated by flex */
-
-/* Scanner skeleton version:
- * $Header: /cvs/src/src/binutils/Attic/syslex.c,v 1.1.16.1 2006/04/16 18:36:41 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 25
-#define YY_END_OF_BUFFER 26
-static yyconst short int yy_accept[81] =
- { 0,
- 0, 0, 26, 25, 7, 8, 5, 25, 1, 2,
- 11, 11, 6, 3, 4, 25, 25, 25, 25, 25,
- 25, 25, 0, 9, 11, 0, 6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
- 13, 0, 0, 0, 0, 16, 0, 0, 0, 0,
- 0, 12, 15, 0, 23, 0, 0, 0, 0, 0,
- 0, 14, 18, 0, 0, 0, 0, 0, 17, 0,
- 24, 0, 0, 0, 20, 22, 0, 21, 19, 0
- } ;
-
-static yyconst int yy_ec[256] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 4, 1, 5, 1, 1, 1, 1, 1, 6,
- 7, 1, 1, 1, 1, 1, 1, 8, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 1, 10, 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,
- 11, 1, 12, 1, 1, 1, 13, 14, 15, 16,
-
- 17, 18, 19, 20, 21, 1, 1, 22, 1, 23,
- 24, 25, 1, 26, 27, 28, 29, 30, 1, 31,
- 32, 33, 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, 1, 1, 1, 1
- } ;
-
-static yyconst int yy_meta[34] =
- { 0,
- 1, 1, 2, 1, 1, 1, 1, 3, 3, 1,
- 1, 1, 3, 3, 3, 3, 3, 3, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1
- } ;
-
-static yyconst short int yy_base[84] =
- { 0,
- 0, 0, 100, 101, 101, 101, 101, 94, 101, 101,
- 26, 28, 0, 101, 101, 82, 26, 18, 74, 79,
- 78, 81, 88, 101, 32, 0, 0, 76, 65, 62,
- 61, 75, 20, 59, 61, 66, 58, 0, 57, 56,
- 54, 63, 53, 62, 54, 101, 59, 48, 53, 46,
- 59, 101, 44, 43, 101, 41, 55, 46, 53, 44,
- 31, 101, 101, 39, 27, 21, 39, 19, 101, 35,
- 101, 33, 26, 29, 101, 101, 28, 101, 101, 101,
- 58, 61, 41
- } ;
-
-static yyconst short int yy_def[84] =
- { 0,
- 80, 1, 80, 80, 80, 80, 80, 81, 80, 80,
- 80, 80, 82, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 81, 80, 80, 83, 82, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 83, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 0,
- 80, 80, 80
- } ;
-
-static yyconst short int yy_nxt[135] =
- { 0,
- 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 15, 16, 17, 18, 4, 4, 4, 4, 4,
- 19, 4, 4, 4, 4, 20, 21, 4, 4, 22,
- 4, 4, 4, 25, 25, 25, 25, 32, 29, 25,
- 25, 33, 44, 38, 79, 78, 30, 77, 45, 76,
- 75, 74, 73, 72, 71, 70, 26, 31, 23, 23,
- 23, 27, 69, 27, 68, 67, 66, 65, 64, 63,
- 62, 61, 60, 59, 58, 57, 56, 55, 54, 53,
- 52, 51, 50, 49, 48, 47, 46, 43, 42, 41,
- 40, 39, 24, 37, 36, 35, 34, 28, 24, 80,
-
- 3, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80
- } ;
-
-static yyconst short int yy_chk[135] =
- { 0,
- 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, 11, 11, 12, 12, 18, 17, 25,
- 25, 18, 33, 83, 77, 74, 17, 73, 33, 72,
- 70, 68, 67, 66, 65, 64, 11, 17, 81, 81,
- 81, 82, 61, 82, 60, 59, 58, 57, 56, 54,
- 53, 51, 50, 49, 48, 47, 45, 44, 43, 42,
- 41, 40, 39, 37, 36, 35, 34, 32, 31, 30,
- 29, 28, 23, 22, 21, 20, 19, 16, 8, 3,
-
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80
- } ;
-
-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 "syslex.l"
-#define INITIAL 0
-#line 2 "syslex.l"
-/* Copyright 2001, 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, or (at your option)
-any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR 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"
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#endif
-#include "sysinfo.h"
-
-#define YY_NO_UNPUT
-
-#ifndef yywrap
-static int yywrap (void) { return 1; }
-#endif
-
-extern int yylex (void);
-#line 457 "syslex.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 39 "syslex.l"
-
-#line 621 "syslex.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 >= 81 )
- 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] != 101 );
-
-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 40 "syslex.l"
-{ return '(';}
- YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 41 "syslex.l"
-{ return ')';}
- YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 42 "syslex.l"
-{ return '[';}
- YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 43 "syslex.l"
-{ return ']';}
- YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 44 "syslex.l"
-{ ; }
- YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 45 "syslex.l"
-{ ; }
- YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 46 "syslex.l"
-{ ; }
- YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 47 "syslex.l"
-{ ; }
- YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 48 "syslex.l"
-{
- yylval.s = malloc (yyleng - 1);
- memcpy (yylval.s, yytext + 1, yyleng - 2);
- yylval.s[yyleng - 2] = '\0';
- return NAME;
- }
- YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 55 "syslex.l"
-{
- yylval.i = strtol(yytext,0,16);
- return NUMBER;
- }
- YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 60 "syslex.l"
-{
- yylval.i = atoi(yytext);
- return NUMBER;
- }
- YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 66 "syslex.l"
-{ yylval.i =1 ;return UNIT;}
- YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 67 "syslex.l"
-{ yylval.i = 1; return UNIT;}
- YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 68 "syslex.l"
-{ yylval.i= 8; return UNIT;}
- YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 69 "syslex.l"
-{ yylval.i = 8; return UNIT;}
- YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 71 "syslex.l"
-{ yylval.s = "INT"; return TYPE;}
- YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 72 "syslex.l"
-{ yylval.s = "BARRAY"; return TYPE;}
- YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 73 "syslex.l"
-{ yylval.s = "CHARS"; return TYPE;}
- YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 74 "syslex.l"
-{ yylval.i = 0; return NUMBER;}
- YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 75 "syslex.l"
-{ yylval.i = -4; return NUMBER;}
- YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 76 "syslex.l"
-{ yylval.i = -2; return NUMBER; }
- YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 77 "syslex.l"
-{ yylval.i = -1; return NUMBER; }
- YY_BREAK
-case 23:
-YY_RULE_SETUP
-#line 78 "syslex.l"
-{ return COND;}
- YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 79 "syslex.l"
-{ return REPEAT;}
- YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 80 "syslex.l"
-ECHO;
- YY_BREAK
-#line 840 "syslex.c"
-case YY_STATE_EOF(INITIAL):
- yyterminate();
-
- 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 >= 81 )
- 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 >= 81 )
- 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 == 80);
-
- 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 80 "syslex.l"
diff --git a/binutils/testsuite/ChangeLog b/binutils/testsuite/ChangeLog
index a7e6ad6d975a..ee8d32ec7e0c 100644
--- a/binutils/testsuite/ChangeLog
+++ b/binutils/testsuite/ChangeLog
@@ -1,3 +1,195 @@
+2007-06-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * binutils-all/strip-3.d: Also strip .xtensa.info section.
+
+2007-05-24 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * binutils-all/windres/version_cat.rc: New.
+ * binutils-all/windres/version_cat.rsd: New.
+
+2007-05-23 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * binutils-all/windres/html.rc: New.
+ * binutils-all/windres/html.rsd: New.
+ * binutils-all/windres/html1.hm: New.
+ * binutils-all/windres/html2.hm: New.
+ * binutils-all/windres/messagetable.rc: New.
+ * binutils-all/windres/messagetable.rsd: New.
+ * binutils-all/windres/MSG00001.bin: New.
+ * binutils-all/windres/strtab2.rc: New.
+ * binutils-all/windres/strtab2.rsd: New.
+ * binutils-all/windres/version.rc: New.
+ * binutils-all/windres/version.rsd: New.
+ * binutils-all/windres/dialog.rsd: Fix expected results.
+
+2007-05-17 Joseph Myers <joseph@codesourcery.com>
+
+ * binutils-all/strip-3.d: Strip .pdr section.
+
+2007-05-15 Alan Modra <amodra@bigpond.net.au>
+
+ * binutils-all/objcopy.exp: Only run needed-by-reloc test for ELF.
+
+2007-05-11 Alan Modra <amodra@bigpond.net.au>
+
+ * binutils-all/needed-by-reloc.s: Use .long rather than .4byte.
+
+2007-05-08 Mark Shinwell <shinwell@codesourcery.com>
+
+ * binutils-all/strip-3.d: Strip .ARM.attributes and .reginfo
+ sections.
+
+2007-05-02 Alan Modra <amodra@bigpond.net.au>
+
+ * binutils-all/objcopy.exp (copy_setup): Don't perror, use send_log.
+ (copy_executable): Return early if test2 is blank.
+ Return unsupported rather than unresolved if we can't run
+ executables. Do test1 if we can compile.
+
+2007-04-24 Nathan Froyd <froydnj@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+
+ * binutils-all/objcopy.exp: Add test for stripping a symbol
+ used in a relocation.
+ * binutils-all/needed-by-reloc.s: New file.
+
+2007-04-20 Nathan Froyd <froydnj@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+ Thomas de Lellis <tdel@windriver.com>
+
+ * binutils-all/objcopy.exp: Add test for --reverse-bytes.
+
+2007-04-21 Richard Earnshaw <rearnsha@arm.com>
+
+ * binutils-all/readelf.exp (regexp_diff): Delete.
+
+2007-04-20 Richard Earnshaw <rearnsha@arm.com>
+
+ * binutils-all/arm/thumb2-cond.s: Allow for tab expansion by the pty.
+ Rename the second test.
+
+2007-04-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/4348
+ * binutils-all/empty.s: New file.
+ * binutils-all/strip-3.d: Likewise.
+
+ * binutils-all/objcopy.exp: Run strip-3 for ELF target.
+
+2007-02-27 Nathan Sidwell <nathan@codesourcery.com>
+
+ * binutils-all/objcopy.exp: Skip for uclinux targets.
+
+2007-02-14 Nick Clifton <nickc@redhat.com>
+
+ * binutils-all/readelf.exp (readelf_wi_test): Fix unexpected
+ output failure message.
+
+2007-01-08 Kai Tietz <kai.tietz@onevision.com>
+
+ * copy-3.d: Renamed target x86_64-*-mingw64 to x86_64-*-mingw*
+ * dlltool.exp: Dito
+ * lang.rc: Dito
+ * strtab1.rc: Dito
+ * windres.exp: Dito
+
+2006-09-20 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * binutils-all/copy-3.d: Add support for target x86_64-pc-mingw64.
+ * binutils-all/dlltool.exp: Likewise.
+ * binutils-all/objcopy.exp: Likewise.
+ * binutils-all/windres/windres.exp: Likewise.
+ * binutils-all/windres/lang.rc: xfail it as long as there is no windows.h.
+ * binutils-all/windres/strtab1.rc: Likewise.
+ * lib/utils-lib.exp: Adjust executable prefix detection (as .exe).
+
+2006-09-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3181
+ * binutils-all/objcopy.exp: Run strip-1 and strip-2 for ELF
+ targets.
+
+ * binutils-all/strip-1.d: New file.
+ * binutils-all/strip-2.d: Likewise.
+
+ * lib/utils-lib.exp (run_dump_test): Support strip.
+
+2006-08-15 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+ David Ung <davidu@mips.com>
+
+ * binutils-all/readelf.exp (readelf_test): Handle mips*-sde-elf*.
+
+2006-06-24 Richard Sandiford <richard@codesourcery.com>
+
+ * binutils-all/localize-hidden-1.d: Use objdump --syms instead
+ of readelf.
+
+2006-06-23 Richard Sandiford <richard@codesourcery.com>
+
+ * binutils-all/localize-hidden-1.s,
+ * binutils-all/localize-hidden-1.d,
+ * binutils-all/localize-hidden-2.s,
+ * binutils-all/localize-hidden-2.d: New tests.
+ * binutils-all/objcopy.exp: Run them.
+
+2006-06-06 Paul Brook <paul@codesourcery.com>
+
+ * binutils-all/arm/objdump.exp: New file.
+ * binutils-all/arm/thumb2-cond.s: New test.
+
+2006-05-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * binutils-all/copy-3.d: Fix a typo.
+
+2006-05-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * binutils-all/copy-3.d: New.
+
+ * objcopy.exp: Run copy-3.
+
+2006-05-02 Dave Korn <dave.korn@artimi.com>
+
+ * binutils-all/copy-1.d (name): Correct spelling of 'setting'.
+ * binutils-all/copy-1.d (name): Likewise.
+
+2006-05-02 Nick Clifton <nickc@redhat.com>
+
+ * binutils-all/copy-2.d: Change the name of the section whose
+ flags are changed to "foo" so that the test will work with PE
+ based targets. Skip this test for AOUT based targeted.
+ * binutils-all/copytest.s: New file.
+
+2006-05-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * binutils-all/objcopy.exp: Run "copy-1" for ELF only.
+
+2006-05-01 Ben Elliston <bje@au.ibm.com>
+
+ * binutils-all/objcopy.exp (objcopy_test_readelf): Remove stray ;
+
+2006-04-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/2593
+ * binutils-all/copy-1.d: New file.
+ * binutils-all/copy-1.s: Likewise.
+ * binutils-all/copy-2.d: Likewise.
+
+ * binutils-all/objcopy.exp: Add run_dump_test "copy-1" and
+ run_dump_test "copy-2".
+
+ * lib/utils-lib.exp (run_dump_test): New.
+ (slurp_options): Likewise.
+ (regexp_diff): Likewise.
+ (file_contents): Likewise.
+ (verbose_eval): Likewise.
+
+2006-04-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/2467
+ * binutils-all/objcopy.exp (strip_test): Also test "strip -g"
+ on archive.
+
2006-04-10 H.J. Lu <hongjiu.lu@intel.com>
* lib/utils-lib.exp (default_binutils_run): Check exit status.
diff --git a/binutils/testsuite/binutils-all/arm/objdump.exp b/binutils/testsuite/binutils-all/arm/objdump.exp
new file mode 100644
index 000000000000..4677a48585c2
--- /dev/null
+++ b/binutils/testsuite/binutils-all/arm/objdump.exp
@@ -0,0 +1,63 @@
+# Copyright 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.
+
+if {![istarget "arm*-*-*"]} then {
+ return
+}
+
+if {[which $OBJDUMP] == 0} then {
+ perror "$OBJDUMP does not exist"
+ return
+}
+
+send_user "Version [binutil_version $OBJDUMP]"
+
+###########################
+# Set up the test of movem.s
+###########################
+
+if {![binutils_assemble $srcdir/$subdir/thumb2-cond.s tmpdir/thumb2-cond.o]} then {
+ return
+}
+
+if [is_remote host] {
+ set objfile [remote_download host tmpdir/thumb2-cond.o]
+} else {
+ set objfile tmpdir/thumb2-cond.o
+}
+
+# Make sure that conditional instructions are correctly decoded.
+
+set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS --disassemble --start-address=6 $objfile"]
+
+set want "bcc.w\[ \t\]*e12.*bx\[ \t\]*lr"
+
+if [regexp $want $got] then {
+ pass "thumb2-cond test1"
+} else {
+ fail "thumb2-cond test1"
+}
+
+set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS --disassemble --start-address=10 $objfile"]
+
+set want "bx\[ \t\]*lr"
+
+if [regexp $want $got] then {
+ pass "thumb2-cond test2"
+} else {
+ fail "thumb2-cond test2"
+}
diff --git a/binutils/testsuite/binutils-all/arm/thumb2-cond.s b/binutils/testsuite/binutils-all/arm/thumb2-cond.s
new file mode 100644
index 000000000000..95761e17a676
--- /dev/null
+++ b/binutils/testsuite/binutils-all/arm/thumb2-cond.s
@@ -0,0 +1,6 @@
+.thumb
+foo:
+.short 0xf000, 0xf800
+.short 0xbf38
+.short 0xf000, 0xbf04
+bx lr
diff --git a/binutils/testsuite/binutils-all/copy-1.d b/binutils/testsuite/binutils-all/copy-1.d
new file mode 100644
index 000000000000..f2b0d9e90df7
--- /dev/null
+++ b/binutils/testsuite/binutils-all/copy-1.d
@@ -0,0 +1,13 @@
+#PROG: objcopy
+#objdump: -h
+#objcopy: --set-section-flags .post_text_reserve=contents,alloc,load,readonly,code
+#name: copy with setting section flags 1
+
+.*: +file format .*
+
+Sections:
+Idx.*
+#...
+ [0-9]* .post_text_reserve.*
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+#...
diff --git a/binutils/testsuite/binutils-all/copy-1.s b/binutils/testsuite/binutils-all/copy-1.s
new file mode 100644
index 000000000000..32864de76ed8
--- /dev/null
+++ b/binutils/testsuite/binutils-all/copy-1.s
@@ -0,0 +1,6 @@
+ .globl text_symbol
+ .text
+text_symbol:
+ .long 1
+ .section .post_text_reserve,"w", %nobits
+ .space 160
diff --git a/binutils/testsuite/binutils-all/copy-2.d b/binutils/testsuite/binutils-all/copy-2.d
new file mode 100644
index 000000000000..8a1ab593858f
--- /dev/null
+++ b/binutils/testsuite/binutils-all/copy-2.d
@@ -0,0 +1,18 @@
+#PROG: objcopy
+#objdump: -h
+#objcopy: --set-section-flags foo=contents,alloc,load,code
+#name: copy with setting section flags 2
+#source: copytest.s
+#not-target: *-*-aout
+# Note - we use copytest.s and a section named "foo" rather
+# than .text because for some file formats (eg PE) the .text
+# section has a fixed set of flags and these cannot be changed.
+
+.*: +file format .*
+
+Sections:
+Idx.*
+#...
+ [0-9]* foo.*
+ CONTENTS, ALLOC, LOAD, CODE
+#...
diff --git a/binutils/testsuite/binutils-all/copy-3.d b/binutils/testsuite/binutils-all/copy-3.d
new file mode 100644
index 000000000000..1b07817cd230
--- /dev/null
+++ b/binutils/testsuite/binutils-all/copy-3.d
@@ -0,0 +1,17 @@
+#PROG: objcopy
+#objdump: -h
+#objcopy: --set-section-flags .text=alloc,data
+#name: copy with setting section flags 3
+#source: bintest.s
+#not-target: *-*-aout *-*-*pe *-*-*coff i*86-*-cygwin* i*86-*-mingw32* x86_64-*-mingw*
+# The .text # section in PE/COFF has a fixed set of flags and these
+# cannot be changed. We skip it for them.
+
+.*: +file format .*
+
+Sections:
+Idx.*
+#...
+ [0-9]* .text.*
+ CONTENTS, ALLOC, LOAD, RELOC, DATA
+#...
diff --git a/binutils/testsuite/binutils-all/copytest.s b/binutils/testsuite/binutils-all/copytest.s
new file mode 100644
index 000000000000..33c13b881a6c
--- /dev/null
+++ b/binutils/testsuite/binutils-all/copytest.s
@@ -0,0 +1,7 @@
+ .globl foo_symbol
+ .section foo
+foo_symbol:
+ .long 1
+ .section bar
+bar_symbol:
+ .long 2
diff --git a/binutils/testsuite/binutils-all/dlltool.exp b/binutils/testsuite/binutils-all/dlltool.exp
index 6ddfcfae9b0c..af0145d48d1c 100644
--- a/binutils/testsuite/binutils-all/dlltool.exp
+++ b/binutils/testsuite/binutils-all/dlltool.exp
@@ -1,4 +1,4 @@
-# Copyright 2002, 2004 Free Software Foundation, Inc.
+# Copyright 2002, 2004, 2006 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -14,13 +14,14 @@
# 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 "i*86-*-*"]} {
+if {![istarget "i*86-*-*"] && ![istarget "x86_64-*-mingw*"] } {
return
}
if {![istarget "i*86-*-*pe*"] \
&& ![istarget "i*86-*-cygwin*"] \
- && ![istarget "i*86-*-mingw32*"] } {
+ && ![istarget "i*86-*-mingw32*"] \
+ && ![istarget "x86_64-*-mingw*"] } {
set target_xfail "yes"
} else {
set target_xfail "no"
diff --git a/binutils/testsuite/binutils-all/empty.s b/binutils/testsuite/binutils-all/empty.s
new file mode 100644
index 000000000000..8690c06ad8e3
--- /dev/null
+++ b/binutils/testsuite/binutils-all/empty.s
@@ -0,0 +1 @@
+# An empty file.
diff --git a/binutils/testsuite/binutils-all/localize-hidden-1.d b/binutils/testsuite/binutils-all/localize-hidden-1.d
new file mode 100644
index 000000000000..a5286ed1e814
--- /dev/null
+++ b/binutils/testsuite/binutils-all/localize-hidden-1.d
@@ -0,0 +1,19 @@
+#PROG: objcopy
+#objdump: --syms
+#objcopy: --localize-hidden
+#name: --localize-hidden test 1
+#...
+0+1200 l .*\*ABS\* 0+ \.hidden Lhidden
+0+1300 l .*\*ABS\* 0+ \.internal Linternal
+0+1400 l .*\*ABS\* 0+ \.protected Lprotected
+0+1100 l .*\*ABS\* 0+ Ldefault
+#...
+0+2200 l .*\*ABS\* 0+ \.hidden Ghidden
+0+2300 l .*\*ABS\* 0+ \.internal Ginternal
+0+3200 l .*\*ABS\* 0+ \.hidden Whidden
+0+3300 l .*\*ABS\* 0+ \.internal Winternal
+0+2100 g .*\*ABS\* 0+ Gdefault
+0+2400 g .*\*ABS\* 0+ \.protected Gprotected
+0+3100 w.*\*ABS\* 0+ Wdefault
+0+3400 w.*\*ABS\* 0+ \.protected Wprotected
+#pass
diff --git a/binutils/testsuite/binutils-all/localize-hidden-1.s b/binutils/testsuite/binutils-all/localize-hidden-1.s
new file mode 100644
index 000000000000..bdaa69d0c08b
--- /dev/null
+++ b/binutils/testsuite/binutils-all/localize-hidden-1.s
@@ -0,0 +1,36 @@
+ .globl Gdefault
+ .globl Ghidden
+ .globl Ginternal
+ .globl Gprotected
+
+ .weak Wdefault
+ .weak Whidden
+ .weak Winternal
+ .weak Wprotected
+
+ .hidden Lhidden
+ .hidden Ghidden
+ .hidden Whidden
+
+ .internal Linternal
+ .internal Ginternal
+ .internal Winternal
+
+ .protected Lprotected
+ .protected Gprotected
+ .protected Wprotected
+
+ .equ Ldefault, 0x1100
+ .equ Lhidden, 0x1200
+ .equ Linternal, 0x1300
+ .equ Lprotected, 0x1400
+
+ .equ Gdefault, 0x2100
+ .equ Ghidden, 0x2200
+ .equ Ginternal, 0x2300
+ .equ Gprotected, 0x2400
+
+ .equ Wdefault, 0x3100
+ .equ Whidden, 0x3200
+ .equ Winternal, 0x3300
+ .equ Wprotected, 0x3400
diff --git a/binutils/testsuite/binutils-all/localize-hidden-2.d b/binutils/testsuite/binutils-all/localize-hidden-2.d
new file mode 100644
index 000000000000..ed3807aefbcf
--- /dev/null
+++ b/binutils/testsuite/binutils-all/localize-hidden-2.d
@@ -0,0 +1,7 @@
+#PROG: objcopy
+#nm: -n
+#objcopy: --localize-hidden
+#name: --localize-hidden test 2
+#...
+0+100 A G
+#pass
diff --git a/binutils/testsuite/binutils-all/localize-hidden-2.s b/binutils/testsuite/binutils-all/localize-hidden-2.s
new file mode 100644
index 000000000000..d428c3aa4708
--- /dev/null
+++ b/binutils/testsuite/binutils-all/localize-hidden-2.s
@@ -0,0 +1,2 @@
+ .globl G
+ .equ G,0x100
diff --git a/binutils/testsuite/binutils-all/needed-by-reloc.s b/binutils/testsuite/binutils-all/needed-by-reloc.s
new file mode 100644
index 000000000000..40ebdedfe90f
--- /dev/null
+++ b/binutils/testsuite/binutils-all/needed-by-reloc.s
@@ -0,0 +1,7 @@
+ .globl foo
+
+ .data
+ .long foo
+ .text
+foo:
+ .long 1
diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp
index 23e537ea76ac..72338df350bd 100644
--- a/binutils/testsuite/binutils-all/objcopy.exp
+++ b/binutils/testsuite/binutils-all/objcopy.exp
@@ -1,5 +1,5 @@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-# 2004
+# 2004, 2006, 2007
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
@@ -113,6 +113,40 @@ proc objcopy_test {testname srcfile} {
objcopy_test "simple copy" bintest.s
+# Test reversing bytes in a section.
+
+set reversed ${tempfile}-reversed
+set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -j .data --reverse-bytes=4 $tempfile $reversed"]
+
+if ![string match "" $got] then {
+ fail "objcopy --reverse-bytes"
+} else {
+ if [is_remote host] {
+ remote_upload host ${reversed} tmpdir/copy-reversed.o
+ set reversed tmpdir/copy-reversed.o
+ }
+
+ set origdata [binutils_run $OBJDUMP "$OBJDUMPFLAGS -s -j .data $tempfile"]
+ set revdata [binutils_run $OBJDUMP "$OBJDUMPFLAGS -s -j .data $reversed"]
+
+ set want "^ \[0-9\]+ (\[0-9\]+)"
+ set found_orig [regexp -lineanchor $want $origdata -> origdata]
+ set found_rev [regexp -lineanchor $want $revdata -> revdata]
+
+ if {$found_orig == 0 || $found_rev == 0} then {
+ fail "objcopy --reverse-bytes"
+ } else {
+ scan $origdata "%2x%2x%2x%2x" b1 b2 b3 b4
+ scan $revdata "%2x%2x%2x%2x" c4 c3 c2 c1
+
+ if {$b1 == $c1 && $b2 == $c2 && $b3 == $c3 && $b4 == $c4} then {
+ pass "objcopy --reverse-bytes"
+ } else {
+ fail "objcopy --reverse-bytes"
+ }
+ }
+}
+
# Test generating S records.
# We make the srec filename 8.3 compatible. Note that the header string
@@ -359,6 +393,12 @@ proc strip_test { } {
return
}
+ set exec_output [binutils_run $STRIP "-g $archive"]
+ if ![string match "" $exec_output] {
+ fail $test
+ return
+ }
+
set exec_output [binutils_run $STRIP "$STRIPFLAGS $archive"]
if ![string match "" $exec_output] {
fail $test
@@ -437,7 +477,7 @@ strip_test_with_saving_a_symbol
# Build a final executable.
-if { [istarget *-*-cygwin] || [istarget *-*-mingw32] } {
+if { [istarget *-*-cygwin] || [istarget *-*-mingw*] } {
set test_prog "testprog.exe"
} else {
set test_prog "testprog"
@@ -452,6 +492,10 @@ proc copy_setup { } {
set res [build_wrapper testglue.o]
set flags { debug }
+ if { [istarget *-*-uclinux*] } {
+ return 1
+ }
+
if { $res != "" } {
lappend flags "additional_flags=[lindex $res 1]"
set add_libs "testglue.o"
@@ -472,7 +516,7 @@ proc copy_setup { } {
set status [lindex $result 0]
if { $status != "pass" } {
- perror "unresolved setup, status = $status"
+ send_log "cannot run executable, status = ${status}\n"
return 3
}
@@ -497,6 +541,9 @@ proc copy_executable { prog flags test1 test2 } {
if ![string match "" $exec_output] {
fail $test1
+ if [string match "" $test2] {
+ return
+ }
fail $test2
return
}
@@ -538,6 +585,10 @@ proc copy_executable { prog flags test1 test2 } {
fail $test1
}
+ if [string match "" $test2] {
+ return
+ }
+
set output [remote_load target tmpdir/copyprog]
set status [lindex $output 0]
if { $status != "pass" } {
@@ -649,10 +700,10 @@ switch [copy_setup] {
untested $test4
}
"3" {
- unresolved $test1
- unresolved $test2
- unresolved $test3
- unresolved $test4
+ copy_executable "$OBJCOPY" "$OBJCOPYFLAGS" "$test1" ""
+ unsupported $test2
+ unsupported $test3
+ unsupported $test4
}
"0" {
copy_executable "$OBJCOPY" "$OBJCOPYFLAGS" "$test1" "$test2"
@@ -677,7 +728,7 @@ proc objcopy_test_readelf {testname srcfile} {
catch "exec $OBJCOPY $OBJCOPYFLAGS tmpdir/bintest.o tmpdir/copy.o" exec_output
if ![string match "" $exec_output] then {
fail "objcopy ($testname)"
- return;
+ return
}
verbose -log "$READELF -a tmpdir/bintest.o > tmpdir/bintest.o.out"
@@ -717,4 +768,36 @@ if { ([istarget "ia64-*-elf*"]
if [is_elf_format] {
objcopy_test "ELF unknown section type" unknown.s
objcopy_test_readelf "ELF group" group.s
+ run_dump_test "copy-1"
+}
+
+run_dump_test "copy-2"
+run_dump_test "copy-3"
+
+if [is_elf_format] {
+ run_dump_test "strip-1"
+ run_dump_test "strip-2"
+ run_dump_test "strip-3"
+
+ if { [istarget "i*86-*"] || [istarget "x86_64-*-*"] } {
+ # Check to make sure we don't strip a symbol named in relocations.
+ set test "objcopy keeps symbols needed by relocs"
+
+ set srcfile $srcdir/$subdir/needed-by-reloc.s
+
+ if {![binutils_assemble $srcfile tmpdir/bintest.o]} then {
+ unresolved $test
+ } else {
+ set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS --strip-symbol=foo tmpdir/bintest.o ${copyfile}.o"]
+
+ if [regexp "not stripping symbol `foo' because it is named in a relocation" $got] {
+ pass $test
+ } else {
+ fail $test
+ }
+ }
+ }
+
+ run_dump_test "localize-hidden-1"
}
+run_dump_test "localize-hidden-2"
diff --git a/binutils/testsuite/binutils-all/readelf.exp b/binutils/testsuite/binutils-all/readelf.exp
index 8815fee59241..814ae7caa565 100644
--- a/binutils/testsuite/binutils-all/readelf.exp
+++ b/binutils/testsuite/binutils-all/readelf.exp
@@ -31,108 +31,6 @@ proc file_contents { filename } {
return $contents
}
-# regexp_diff, based on simple_diff taken from ld test suite
-# 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
- 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
-}
-
# Find out the size by reading the output of the EI_CLASS field.
# Similar to the test for readelf -h, but we're just looking for the
# EI_CLASS line here.
@@ -193,7 +91,7 @@ proc readelf_test { options binary_file regexp_file xfails } {
set target_machine ""
if [istarget "mips*-*-*"] then {
- if { [istarget "mips*-*-*linux*"] } then {
+ if { [istarget "mips*-*-*linux*"] || [istarget "mips*-sde-elf*"] } then {
set target_machine tmips
} else {
set target_machine mips
@@ -260,7 +158,7 @@ proc readelf_wi_test {} {
set got [prune_readelf_wi_warnings $got]
if ![string match "" $got] then {
- fail "readelf $options (reason: unexpected output)"
+ fail "readelf $READELFFLAGS -wi (reason: unexpected output)"
send_log $got
send_log "\n"
return
diff --git a/binutils/testsuite/binutils-all/strip-1.d b/binutils/testsuite/binutils-all/strip-1.d
new file mode 100644
index 000000000000..200983211ea9
--- /dev/null
+++ b/binutils/testsuite/binutils-all/strip-1.d
@@ -0,0 +1,11 @@
+#PROG: strip
+#source: group.s
+#readelf: -Sg --wide
+#name: strip with section group 1
+
+#...
+ \[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AX[ \t]+.*
+#...
+ \[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WA[ \t]+.*
+#...
+There are no section groups in this file.
diff --git a/binutils/testsuite/binutils-all/strip-2.d b/binutils/testsuite/binutils-all/strip-2.d
new file mode 100644
index 000000000000..5c54b7ecb824
--- /dev/null
+++ b/binutils/testsuite/binutils-all/strip-2.d
@@ -0,0 +1,18 @@
+#PROG: strip
+#source: group.s
+#strip: --strip-unneeded
+#readelf: -Sg --wide
+#name: strip with section group 2
+
+#...
+ \[[ 0-9]+\] foo_group[ \t]+GROUP[ \t]+.*
+#...
+ \[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG[ \t]+.*
+#...
+ \[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG[ \t]+.*
+#...
+COMDAT group section \[[ 0-9]+\] `foo_group' \[foo_group\] contains 2 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.*
+ \[[ 0-9]+\] .data.*
+#pass
diff --git a/binutils/testsuite/binutils-all/strip-3.d b/binutils/testsuite/binutils-all/strip-3.d
new file mode 100644
index 000000000000..d65669770017
--- /dev/null
+++ b/binutils/testsuite/binutils-all/strip-3.d
@@ -0,0 +1,11 @@
+#PROG: strip
+#source: empty.s
+#strip: -R .text -R .data -R .bss -R .ARM.attributes -R .reginfo -R .pdr -R .xtensa.info
+#readelf: -S --wide
+#name: strip empty file
+#target: *-*-linux*
+
+#...
+ \[[ 0]+\][ \t]+NULL[ \t]+.*
+ \[[ 1]+\] \.shstrtab.*[ \t]+STRTAB[ \t]+.*
+#pass
diff --git a/binutils/testsuite/binutils-all/windres/MSG00001.bin b/binutils/testsuite/binutils-all/windres/MSG00001.bin
new file mode 100644
index 000000000000..0092b8341525
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/MSG00001.bin
Binary files differ
diff --git a/binutils/testsuite/binutils-all/windres/dialogid.rsd b/binutils/testsuite/binutils-all/windres/dialogid.rsd
index 1e6bb1885dc7..6c655a1c1178 100644
--- a/binutils/testsuite/binutils-all/windres/dialogid.rsd
+++ b/binutils/testsuite/binutils-all/windres/dialogid.rsd
@@ -9,10 +9,10 @@ Contents of section .data:
0040 0100ffff 00000000 00000000 00008880 ................
0050 02000000 0000c800 c8000000 00000000 ................
0060 00000000 00000000 4d000050 0b000b00 ........M..P....
- 0070 5300a200 ffff0000 63006c00 61007300 S.......c.l.a.s.
- 0080 73006e00 61006d00 65000000 ffff6c00 s.n.a.m.e.....l.
+ 0070 5300a200 ffffffff 43004c00 41005300 S.......C.L.A.S.
+ 0080 53004e00 41004d00 45000000 ffff6c00 S.N.A.M.E.....l.
0090 00000000 00000000 00000000 0e120050 ...............P
- 00a0 05000500 0a000a00 66000000 63006c00 ........f...c.l.
- 00b0 61007300 73006e00 61006d00 65000000 a.s.s.n.a.m.e...
+ 00a0 05000500 0a000a00 66000000 43004c00 ........f...C.L.
+ 00b0 41005300 53004e00 41004d00 45000000 A.S.S.N.A.M.E...
00c0 73007400 72006900 6e006700 69006400 s.t.r.i.n.g.i.d.
00d0 00000000 ....
diff --git a/binutils/testsuite/binutils-all/windres/html.rc b/binutils/testsuite/binutils-all/windres/html.rc
new file mode 100644
index 000000000000..ead6a11829c2
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/html.rc
@@ -0,0 +1,7 @@
+//#xfail x86_64-*-mingw*
+#include "windows.h"
+
+LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
+
+129 HTML "html1.hm"
+130 HTML "html2.hm"
diff --git a/binutils/testsuite/binutils-all/windres/html.rsd b/binutils/testsuite/binutils-all/windres/html.rsd
new file mode 100644
index 000000000000..c124a82b662f
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/html.rsd
@@ -0,0 +1,45 @@
+
+html.res: file format binary
+
+Contents of section .data:
+ 0000 00000000 20000000 ffff0000 ffff0000 .... ...........
+ 0010 00000000 00000000 00000000 00000000 ................
+ 0020 0d010000 20000000 ffff1700 ffff8100 .... ...........
+ 0030 00000000 30100704 00000000 00000000 ....0...........
+ 0040 3c21444f 43545950 4520646f 63747970 <!DOCTYPE doctyp
+ 0050 65205055 424c4943 20222d2f 2f773363 e PUBLIC "-//w3c
+ 0060 2f2f6474 64206874 6d6c2034 2e302074 //dtd html 4.0 t
+ 0070 72616e73 6974696f 6e616c2f 2f656e22 ransitional//en"
+ 0080 3e0d0a3c 68746d6c 3e0d0a3c 68656164 >..<html>..<head
+ 0090 3e0d0a20 203c6d65 74612063 6f6e7465 >.. <meta conte
+ 00a0 6e743d22 74657874 2f68746d 6c3b2063 nt="text/html; c
+ 00b0 68617273 65743d69 736f2d38 3835392d harset=iso-8859-
+ 00c0 31222020 68747470 2d657175 69763d22 1" http-equiv="
+ 00d0 436f6e74 656e742d 54797065 223e0d0a Content-Type">..
+ 00e0 20203c74 69746c65 3e57696e 64726573 <title>Windres
+ 00f0 3c2f7469 746c653e 0d0a3c2f 68656164 </title>..</head
+ 0100 3e0d0a0d 0a3c626f 64793e0d 0a546869 >....<body>..Thi
+ 0110 73206973 20612074 65737420 70616765 s is a test page
+ 0120 20666f72 2077696e 64726573 2048544d for windres HTM
+ 0130 4c207265 736f7572 63652e0d 0a3c2f62 L resource...</b
+ 0140 6f64793e 0d0a3c2f 68746d6c 3e000000 ody>..</html>...
+ 0150 14010000 20000000 ffff1700 ffff8200 .... ...........
+ 0160 00000000 30100704 00000000 00000000 ....0...........
+ 0170 3c21444f 43545950 4520646f 63747970 <!DOCTYPE doctyp
+ 0180 65205055 424c4943 20222d2f 2f773363 e PUBLIC "-//w3c
+ 0190 2f2f6474 64206874 6d6c2034 2e302074 //dtd html 4.0 t
+ 01a0 72616e73 6974696f 6e616c2f 2f656e22 ransitional//en"
+ 01b0 3e0d0a3c 68746d6c 3e0d0a3c 68656164 >..<html>..<head
+ 01c0 3e0d0a20 203c6d65 74612063 6f6e7465 >.. <meta conte
+ 01d0 6e743d22 74657874 2f68746d 6c3b2063 nt="text/html; c
+ 01e0 68617273 65743d69 736f2d38 3835392d harset=iso-8859-
+ 01f0 31222020 68747470 2d657175 69763d22 1" http-equiv="
+ 0200 436f6e74 656e742d 54797065 223e0d0a Content-Type">..
+ 0210 20203c74 69746c65 3e57696e 64726573 <title>Windres
+ 0220 3c2f7469 746c653e 0d0a3c2f 68656164 </title>..</head
+ 0230 3e0d0a0d 0a3c626f 64793e0d 0a546869 >....<body>..Thi
+ 0240 73206973 20612073 65636f6e 64207465 s is a second te
+ 0250 73742070 61676520 666f7220 77696e64 st page for wind
+ 0260 72657320 48544d4c 20726573 6f757263 res HTML resourc
+ 0270 652e0d0a 3c2f626f 64793e0d 0a3c2f68 e...</body>..</h
+ 0280 746d6c3e tml>
diff --git a/binutils/testsuite/binutils-all/windres/html1.hm b/binutils/testsuite/binutils-all/windres/html1.hm
new file mode 100644
index 000000000000..ffc5a1825cce
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/html1.hm
@@ -0,0 +1,11 @@
+<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+ <title>Windres</title>
+</head>
+
+<body>
+This is a test page for windres HTML resource.
+</body>
+</html> \ No newline at end of file
diff --git a/binutils/testsuite/binutils-all/windres/html2.hm b/binutils/testsuite/binutils-all/windres/html2.hm
new file mode 100644
index 000000000000..2fb343bf5282
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/html2.hm
@@ -0,0 +1,11 @@
+<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+ <title>Windres</title>
+</head>
+
+<body>
+This is a second test page for windres HTML resource.
+</body>
+</html> \ No newline at end of file
diff --git a/binutils/testsuite/binutils-all/windres/lang.rc b/binutils/testsuite/binutils-all/windres/lang.rc
index d894315568e4..11a4d06b948b 100644
--- a/binutils/testsuite/binutils-all/windres/lang.rc
+++ b/binutils/testsuite/binutils-all/windres/lang.rc
@@ -1,3 +1,4 @@
+//#xfail x86_64-*-mingw*
#include "windows.h"
LANGUAGE 0, 0
diff --git a/binutils/testsuite/binutils-all/windres/messagetable.rc b/binutils/testsuite/binutils-all/windres/messagetable.rc
new file mode 100644
index 000000000000..e10ee639db5b
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/messagetable.rc
@@ -0,0 +1,6 @@
+//#xfail x86_64-*-mingw*
+#include "windows.h"
+
+LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
+
+888 MESSAGETABLE MSG00001.bin
diff --git a/binutils/testsuite/binutils-all/windres/messagetable.rsd b/binutils/testsuite/binutils-all/windres/messagetable.rsd
new file mode 100644
index 000000000000..9d108a589324
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/messagetable.rsd
@@ -0,0 +1,15 @@
+
+messagetable.res: file format binary
+
+Contents of section .data:
+ 0000 00000000 20000000 ffff0000 ffff0000 .... ...........
+ 0010 00000000 00000000 00000000 00000000 ................
+ 0020 70000000 20000000 ffff0b00 ffff7803 p... .........x.
+ 0030 00000000 30100704 00000000 00000000 ....0...........
+ 0040 01000000 00000000 05000000 10000000 ................
+ 0050 14000000 4e6f7469 63653a20 25310d0a ....Notice: %1..
+ 0060 00000000 0c000000 25310d0a 00000000 ........%1......
+ 0070 10000000 5761726e 3a202531 0d0a0000 ....Warn: %1....
+ 0080 10000000 4572726f 723a2025 310d0a00 ....Error: %1...
+ 0090 10000000 46617461 6c3a2025 310d0a00 ....Fatal: %1...
+ 00a0 10000000 25310d0a 25320d0a 00000000 ....%1..%2......
diff --git a/binutils/testsuite/binutils-all/windres/strtab1.rc b/binutils/testsuite/binutils-all/windres/strtab1.rc
index a1a246d8eb82..416d157f1cf8 100644
--- a/binutils/testsuite/binutils-all/windres/strtab1.rc
+++ b/binutils/testsuite/binutils-all/windres/strtab1.rc
@@ -1,3 +1,4 @@
+//#xfail x86_64-*-mingw*
#include "windows.h"
LANGUAGE 0, 0
diff --git a/binutils/testsuite/binutils-all/windres/strtab2.rc b/binutils/testsuite/binutils-all/windres/strtab2.rc
new file mode 100644
index 000000000000..9322034946c9
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/strtab2.rc
@@ -0,0 +1,9 @@
+//#xfail x86_64-*-mingw*
+#include "windows.h"
+
+LANGUAGE 0, 0
+
+STRINGTABLE MOVEABLE PURE DISCARDABLE
+BEGIN
+ 1 L"hello, world"
+END
diff --git a/binutils/testsuite/binutils-all/windres/strtab2.rsd b/binutils/testsuite/binutils-all/windres/strtab2.rsd
new file mode 100644
index 000000000000..4d610739352b
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/strtab2.rsd
@@ -0,0 +1,8 @@
+ 0000 00000000 20000000 ffff0000 ffff0000 .... ...........
+ 0010 00000000 00000000 00000000 00000000 ................
+ 0020 38000000 20000000 ffff0600 ffff0100 8... ...........
+ 0030 00000000 30100000 00000000 00000000 ....0...........
+ 0040 00000c00 68006500 6c006c00 6f002c00 ....h.e.l.l.o.,.
+ 0050 20007700 6f007200 6c006400 00000000 .w.o.r.l.d.....
+ 0060 00000000 00000000 00000000 00000000 ................
+ 0070 00000000 00000000 ........
diff --git a/binutils/testsuite/binutils-all/windres/version.rc b/binutils/testsuite/binutils-all/windres/version.rc
new file mode 100644
index 000000000000..5eea3353e0d2
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/version.rc
@@ -0,0 +1,33 @@
+//#xfail x86_64-*-mingw*
+#include "windows.h"
+
+LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+ FILEFLAGS 0x0L
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040704e4"
+ BEGIN
+ VALUE L"CompanyName", L"binutil\x0073"
+ VALUE "FileDescription", "RC compiler."
+ VALUE "FileVersion", "1.0.0.1"
+ VALUE "InternalName", "windres.exe"
+ VALUE "LegalCopyright", "(c) FSF. All rights are reserved."
+ VALUE "OriginalFilename", "windres.exe"
+ VALUE "ProductName", "windows resource compiler"
+ VALUE "ProductVersion", "1.0.0.1"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x407, 1252
+ END
+END
diff --git a/binutils/testsuite/binutils-all/windres/version.rsd b/binutils/testsuite/binutils-all/windres/version.rsd
new file mode 100644
index 000000000000..85dd5d35281f
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/version.rsd
@@ -0,0 +1,55 @@
+
+version.res: file format binary
+
+Contents of section .data:
+ 0000 00000000 20000000 ffff0000 ffff0000 .... ...........
+ 0010 00000000 00000000 00000000 00000000 ................
+ 0020 ec020000 20000000 ffff1000 ffff0100 .... ...........
+ 0030 00000000 00000704 00000000 00000000 ................
+ 0040 ec023400 00005600 53005f00 56004500 ..4...V.S._.V.E.
+ 0050 52005300 49004f00 4e005f00 49004e00 R.S.I.O.N._.I.N.
+ 0060 46004f00 00000000 bd04effe 00000100 F.O.............
+ 0070 00000100 01000000 00000100 01000000 ................
+ 0080 3f000000 00000000 04000000 01000000 ?...............
+ 0090 00000000 00000000 00000000 4c020000 ............L...
+ 00a0 00005300 74007200 69006e00 67004600 ..S.t.r.i.n.g.F.
+ 00b0 69006c00 65004900 6e006600 6f000000 i.l.e.I.n.f.o...
+ 00c0 28020000 00003000 34003000 37003000 (.....0.4.0.7.0.
+ 00d0 34006500 34000000 32000900 01004300 4.e.4...2.....C.
+ 00e0 6f006d00 70006100 6e007900 4e006100 o.m.p.a.n.y.N.a.
+ 00f0 6d006500 00000000 62006900 6e007500 m.e.....b.i.n.u.
+ 0100 74006900 6c007300 00000000 42000d00 t.i.l.s.....B...
+ 0110 01004600 69006c00 65004400 65007300 ..F.i.l.e.D.e.s.
+ 0120 63007200 69007000 74006900 6f006e00 c.r.i.p.t.i.o.n.
+ 0130 00000000 52004300 20006300 6f006d00 ....R.C. .c.o.m.
+ 0140 70006900 6c006500 72002e00 00000000 p.i.l.e.r.......
+ 0150 30000800 01004600 69006c00 65005600 0.....F.i.l.e.V.
+ 0160 65007200 73006900 6f006e00 00000000 e.r.s.i.o.n.....
+ 0170 31002e00 30002e00 30002e00 31000000 1...0...0...1...
+ 0180 38000c00 01004900 6e007400 65007200 8.....I.n.t.e.r.
+ 0190 6e006100 6c004e00 61006d00 65000000 n.a.l.N.a.m.e...
+ 01a0 77006900 6e006400 72006500 73002e00 w.i.n.d.r.e.s...
+ 01b0 65007800 65000000 68002200 01004c00 e.x.e...h."...L.
+ 01c0 65006700 61006c00 43006f00 70007900 e.g.a.l.C.o.p.y.
+ 01d0 72006900 67006800 74000000 28006300 r.i.g.h.t...(.c.
+ 01e0 29002000 46005300 46002e00 20004100 ). .F.S.F... .A.
+ 01f0 6c006c00 20007200 69006700 68007400 l.l. .r.i.g.h.t.
+ 0200 73002000 61007200 65002000 72006500 s. .a.r.e. .r.e.
+ 0210 73006500 72007600 65006400 2e000000 s.e.r.v.e.d.....
+ 0220 40000c00 01004f00 72006900 67006900 @.....O.r.i.g.i.
+ 0230 6e006100 6c004600 69006c00 65006e00 n.a.l.F.i.l.e.n.
+ 0240 61006d00 65000000 77006900 6e006400 a.m.e...w.i.n.d.
+ 0250 72006500 73002e00 65007800 65000000 r.e.s...e.x.e...
+ 0260 54001a00 01005000 72006f00 64007500 T.....P.r.o.d.u.
+ 0270 63007400 4e006100 6d006500 00000000 c.t.N.a.m.e.....
+ 0280 77006900 6e006400 6f007700 73002000 w.i.n.d.o.w.s. .
+ 0290 72006500 73006f00 75007200 63006500 r.e.s.o.u.r.c.e.
+ 02a0 20006300 6f006d00 70006900 6c006500 .c.o.m.p.i.l.e.
+ 02b0 72000000 34000800 01005000 72006f00 r...4.....P.r.o.
+ 02c0 64007500 63007400 56006500 72007300 d.u.c.t.V.e.r.s.
+ 02d0 69006f00 6e000000 31002e00 30002e00 i.o.n...1...0...
+ 02e0 30002e00 31000000 44000000 00005600 0...1...D.....V.
+ 02f0 61007200 46006900 6c006500 49006e00 a.r.F.i.l.e.I.n.
+ 0300 66006f00 00000000 24000400 00005400 f.o.....$.....T.
+ 0310 72006100 6e007300 6c006100 74006900 r.a.n.s.l.a.t.i.
+ 0320 6f006e00 00000000 0704e404 o.n.........
diff --git a/binutils/testsuite/binutils-all/windres/version_cat.rc b/binutils/testsuite/binutils-all/windres/version_cat.rc
new file mode 100644
index 000000000000..5b70eada1e87
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/version_cat.rc
@@ -0,0 +1,33 @@
+//#xfail x86_64-*-mingw*
+#include "windows.h"
+
+LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+ FILEFLAGS 0x0L
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040704e4"
+ BEGIN
+ VALUE L"Company" "Name", L"binutil\x0073"
+ VALUE "File" "Description", L"RC " L"compiler."
+ VALUE "File" "Version", "1.0.0.1"
+ VALUE "Internal" "Name", "windres" L".exe"
+ VALUE "Legal" "Copyright", "(c) FSF." " All rights are reserved."
+ VALUE "Original" "Filename", L"windres" ".exe"
+ VALUE "Product" "Name", "windows resource " "compiler"
+ VALUE "Product" "Version", "1.0.0.1"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x407, 1252
+ END
+END
diff --git a/binutils/testsuite/binutils-all/windres/version_cat.rsd b/binutils/testsuite/binutils-all/windres/version_cat.rsd
new file mode 100644
index 000000000000..85dd5d35281f
--- /dev/null
+++ b/binutils/testsuite/binutils-all/windres/version_cat.rsd
@@ -0,0 +1,55 @@
+
+version.res: file format binary
+
+Contents of section .data:
+ 0000 00000000 20000000 ffff0000 ffff0000 .... ...........
+ 0010 00000000 00000000 00000000 00000000 ................
+ 0020 ec020000 20000000 ffff1000 ffff0100 .... ...........
+ 0030 00000000 00000704 00000000 00000000 ................
+ 0040 ec023400 00005600 53005f00 56004500 ..4...V.S._.V.E.
+ 0050 52005300 49004f00 4e005f00 49004e00 R.S.I.O.N._.I.N.
+ 0060 46004f00 00000000 bd04effe 00000100 F.O.............
+ 0070 00000100 01000000 00000100 01000000 ................
+ 0080 3f000000 00000000 04000000 01000000 ?...............
+ 0090 00000000 00000000 00000000 4c020000 ............L...
+ 00a0 00005300 74007200 69006e00 67004600 ..S.t.r.i.n.g.F.
+ 00b0 69006c00 65004900 6e006600 6f000000 i.l.e.I.n.f.o...
+ 00c0 28020000 00003000 34003000 37003000 (.....0.4.0.7.0.
+ 00d0 34006500 34000000 32000900 01004300 4.e.4...2.....C.
+ 00e0 6f006d00 70006100 6e007900 4e006100 o.m.p.a.n.y.N.a.
+ 00f0 6d006500 00000000 62006900 6e007500 m.e.....b.i.n.u.
+ 0100 74006900 6c007300 00000000 42000d00 t.i.l.s.....B...
+ 0110 01004600 69006c00 65004400 65007300 ..F.i.l.e.D.e.s.
+ 0120 63007200 69007000 74006900 6f006e00 c.r.i.p.t.i.o.n.
+ 0130 00000000 52004300 20006300 6f006d00 ....R.C. .c.o.m.
+ 0140 70006900 6c006500 72002e00 00000000 p.i.l.e.r.......
+ 0150 30000800 01004600 69006c00 65005600 0.....F.i.l.e.V.
+ 0160 65007200 73006900 6f006e00 00000000 e.r.s.i.o.n.....
+ 0170 31002e00 30002e00 30002e00 31000000 1...0...0...1...
+ 0180 38000c00 01004900 6e007400 65007200 8.....I.n.t.e.r.
+ 0190 6e006100 6c004e00 61006d00 65000000 n.a.l.N.a.m.e...
+ 01a0 77006900 6e006400 72006500 73002e00 w.i.n.d.r.e.s...
+ 01b0 65007800 65000000 68002200 01004c00 e.x.e...h."...L.
+ 01c0 65006700 61006c00 43006f00 70007900 e.g.a.l.C.o.p.y.
+ 01d0 72006900 67006800 74000000 28006300 r.i.g.h.t...(.c.
+ 01e0 29002000 46005300 46002e00 20004100 ). .F.S.F... .A.
+ 01f0 6c006c00 20007200 69006700 68007400 l.l. .r.i.g.h.t.
+ 0200 73002000 61007200 65002000 72006500 s. .a.r.e. .r.e.
+ 0210 73006500 72007600 65006400 2e000000 s.e.r.v.e.d.....
+ 0220 40000c00 01004f00 72006900 67006900 @.....O.r.i.g.i.
+ 0230 6e006100 6c004600 69006c00 65006e00 n.a.l.F.i.l.e.n.
+ 0240 61006d00 65000000 77006900 6e006400 a.m.e...w.i.n.d.
+ 0250 72006500 73002e00 65007800 65000000 r.e.s...e.x.e...
+ 0260 54001a00 01005000 72006f00 64007500 T.....P.r.o.d.u.
+ 0270 63007400 4e006100 6d006500 00000000 c.t.N.a.m.e.....
+ 0280 77006900 6e006400 6f007700 73002000 w.i.n.d.o.w.s. .
+ 0290 72006500 73006f00 75007200 63006500 r.e.s.o.u.r.c.e.
+ 02a0 20006300 6f006d00 70006900 6c006500 .c.o.m.p.i.l.e.
+ 02b0 72000000 34000800 01005000 72006f00 r...4.....P.r.o.
+ 02c0 64007500 63007400 56006500 72007300 d.u.c.t.V.e.r.s.
+ 02d0 69006f00 6e000000 31002e00 30002e00 i.o.n...1...0...
+ 02e0 30002e00 31000000 44000000 00005600 0...1...D.....V.
+ 02f0 61007200 46006900 6c006500 49006e00 a.r.F.i.l.e.I.n.
+ 0300 66006f00 00000000 24000400 00005400 f.o.....$.....T.
+ 0310 72006100 6e007300 6c006100 74006900 r.a.n.s.l.a.t.i.
+ 0320 6f006e00 00000000 0704e404 o.n.........
diff --git a/binutils/testsuite/binutils-all/windres/windres.exp b/binutils/testsuite/binutils-all/windres/windres.exp
index 4189c551a6f7..eb825d0f7364 100644
--- a/binutils/testsuite/binutils-all/windres/windres.exp
+++ b/binutils/testsuite/binutils-all/windres/windres.exp
@@ -1,4 +1,4 @@
-# Copyright 2001, 2003, 2004 Free Software Foundation, Inc.
+# Copyright 2001, 2003, 2004, 2006 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -19,13 +19,14 @@
# Written by DJ Delorie <dj@redhat.com>
-if {![istarget "i*86-*-*"]} {
+if {![istarget "i*86-*-*"] && ![istarget "x86_64-*-mingw*"] } {
return
}
if {![istarget "i*86-*-*pe*"] \
&& ![istarget "i*86-*-cygwin*"] \
- && ![istarget "i*86-*-mingw32*"] } {
+ && ![istarget "i*86-*-mingw32*"] \
+ && ![istarget "x86_64-*-mingw*"] } {
set target_xfail "yes"
} else {
set target_xfail "no"
diff --git a/binutils/testsuite/lib/utils-lib.exp b/binutils/testsuite/lib/utils-lib.exp
index f7970b292691..597437e6ffd7 100644
--- a/binutils/testsuite/lib/utils-lib.exp
+++ b/binutils/testsuite/lib/utils-lib.exp
@@ -1,4 +1,4 @@
-# Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2003, 2004
+# Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2003, 2004, 2006
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
@@ -161,9 +161,508 @@ proc is_elf_format {} {
# Returns target executable extension, if any.
#
proc exe_ext {} {
- if { [istarget *-*-mingw32] || [istarget *-*-cygwin*] } {
+ if { [istarget *-*-mingw*] || [istarget *-*-cygwin*] } {
return ".exe"
} else {
return ""
}
}
+
+# Copied and modified from gas.
+
+# run_dump_test FILE (optional:) EXTRA_OPTIONS
+#
+# 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.
+# However, a line within the options that begins with a #, but doesn't
+# have a recognizable option name followed by a colon, is considered a
+# comment and entirely ignored.
+#
+# The optional EXTRA_OPTIONS argument to `run_dump_test' is a list of
+# two-element lists. The first element of each is an option name, and
+# the second additional arguments to be added on to the end of the
+# option list as given in FILE.d. (If omitted, no additional options
+# are added.)
+#
+# 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 FILE.s, pass FLAGS to the assembler.
+#
+# PROG: PROGRAM-NAME
+# The name of the program to run to analyze the .o file produced
+# by the assembler. 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 .o file, and pass it
+# FLAGS, in addition to the .o file name. Note that they are run
+# with LC_ALL=C in the environment to give consistent sorting
+# of symbols.
+#
+# source: SOURCE
+# Assemble the file SOURCE.s. If omitted, this defaults to FILE.s.
+# This is useful if several .d files want to share a .s file.
+#
+# target: GLOBS...
+# Run this test only on a specified list of targets. More precisely,
+# each glob in the space-separated list is passed to "istarget"; if
+# it evaluates true for any of them, the test will be run, otherwise
+# it will be marked unsupported.
+#
+# not-target: GLOBS...
+# Do not run this test on a specified list of targets. Again,
+# the each glob in the space-separated list is passed to
+# "istarget", and the test is run if it evaluates *false* for
+# *all* of them. Otherwise it will be marked unsupported.
+#
+# skip: GLOBS...
+# not-skip: GLOBS...
+# These are exactly the same as "not-target" and "target",
+# respectively, except that they do nothing at all if the check
+# fails. They should only be used in groups, to construct a single
+# test which is run on all targets but with variant options or
+# expected output on some targets. (For example, see
+# gas/arm/inst.d and gas/arm/wince_inst.d.)
+#
+# 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 gas warning matching REGEX. It is an error to issue
+# both "error" and "warning".
+#
+# stderr: FILE
+# FILE contains regexp lines to be matched against the diagnostic
+# output of the assembler. This does not preclude the use of
+# PROG, nm, objdump, or objcopy.
+#
+# error-output: FILE
+# Means the same as 'stderr', but also indicates that the assembler
+# is expected to exit unsuccessfully (therefore PROG, objdump, nm,
+# and objcopy have no meaning and should not be supplied).
+#
+# Each option may occur at most once.
+#
+# 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 {extra_options {}} } {
+ global subdir srcdir
+ global OBJDUMP NM OBJCOPY READELF STRIP
+ global OBJDUMPFLAGS NMFLAGS OBJCOPYFLAGS READELFFLAGS STRIPFLAGS
+ global host_triplet
+ global env
+ global copyfile
+ global tempfile
+
+ if [string match "*/*" $name] {
+ set file $name
+ set name [file tail $name]
+ } else {
+ set file "$srcdir/$subdir/$name"
+ }
+ set opt_array [slurp_options "${file}.d"]
+ if { $opt_array == -1 } {
+ perror "error reading options from $file.d"
+ unresolved $subdir/$name
+ return
+ }
+ set opts(addr2line) {}
+ set opts(ar) {}
+ set opts(nm) {}
+ set opts(objcopy) {}
+ set opts(objdump) {}
+ set opts(strip) {}
+ set opts(ranlib) {}
+ set opts(readelf) {}
+ set opts(size) {}
+ set opts(strings) {}
+ set opts(name) {}
+ set opts(PROG) {}
+ set opts(DUMPPROG) {}
+ set opts(source) {}
+ set opts(target) {}
+ set opts(not-target) {}
+ set opts(skip) {}
+ set opts(not-skip) {}
+
+ 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
+ }
+ if [string length $opts($opt_name)] {
+ perror "option $opt_name multiply set in $file.d"
+ unresolved $subdir/$name
+ return
+ }
+ set opts($opt_name) $opt_val
+ }
+
+ foreach i $extra_options {
+ set opt_name [lindex $i 0]
+ set opt_val [lindex $i 1]
+ if ![info exists opts($opt_name)] {
+ perror "unknown option $opt_name given in extra_opts"
+ unresolved $subdir/$name
+ return
+ }
+ # add extra option to end of existing option, adding space
+ # if necessary.
+ if [string length $opts($opt_name)] {
+ append opts($opt_name) " "
+ }
+ append opts($opt_name) $opt_val
+ }
+
+ if { $opts(name) == "" } {
+ set testname "$subdir/$name"
+ } else {
+ set testname $opts(name)
+ }
+ verbose "Testing $testname"
+
+ if {$opts(PROG) == ""} {
+ perror "program isn't set in $file.d"
+ unresolved $testname
+ return
+ }
+
+ set destopt ""
+ switch -- $opts(PROG) {
+ ar { set program ar }
+ objcopy { set program objcopy }
+ ranlib { set program ranlib }
+ strip {
+ set program strip
+ set destopt "-o"
+ }
+ strings { set program strings }
+ default {
+ perror "unrecognized program option $opts(PROG) in $file.d"
+ unresolved $testname
+ return }
+ }
+
+ set dumpprogram ""
+ if { $opts(DUMPPROG) != "" } {
+ switch -- $opts(DUMPPROG) {
+ addr2line { set dumpprogram addr2line }
+ nm { set dumpprogram nm }
+ objdump { set dumpprogram objdump }
+ readelf { set dumpprogram readelf }
+ size { set dumpprogram size }
+ default {
+ perror "unrecognized dump program option $opts(DUMPPROG) in $file.d"
+ unresolved $testname
+ return }
+ }
+ } else {
+ # Guess which program to run, by seeing which option was specified.
+ foreach p {objdump nm readelf} {
+ if {$opts($p) != ""} {
+ if {$dumpprogram != ""} {
+ perror "ambiguous dump program in $file.d"
+ unresolved $testname
+ return
+ } else {
+ set dumpprogram $p
+ }
+ }
+ }
+ }
+
+ # Handle skipping the test on specified targets.
+ # You can have both skip/not-skip and target/not-target, but you can't
+ # have both skip and not-skip, or target and not-target, in the same file.
+ if { $opts(skip) != "" } then {
+ if { $opts(not-skip) != "" } then {
+ perror "$testname: mixing skip and not-skip directives is invalid"
+ unresolved $testname
+ return
+ }
+ foreach glob $opts(skip) {
+ if {[istarget $glob]} { return }
+ }
+ }
+ if { $opts(not-skip) != "" } then {
+ set skip 1
+ foreach glob $opts(not-skip) {
+ if {[istarget $glob]} {
+ set skip 0
+ break
+ }
+ }
+ if {$skip} { return }
+ }
+ if { $opts(target) != "" } then {
+ if { $opts(not-target) != "" } then {
+ perror "$testname: mixing target and not-target directives is invalid"
+ unresolved $testname
+ return
+ }
+ set skip 1
+ foreach glob $opts(target) {
+ if {[istarget $glob]} {
+ set skip 0
+ break
+ }
+ }
+ if {$skip} {
+ unsupported $testname
+ return
+ }
+ }
+ if { $opts(not-target) != "" } then {
+ foreach glob $opts(not-target) {
+ if {[istarget $glob]} {
+ unsupported $testname
+ return
+ }
+ }
+ }
+
+ if { $opts(source) == "" } {
+ set srcfile ${file}.s
+ } else {
+ set srcfile $srcdir/$subdir/$opts(source)
+ }
+
+ set exec_output [binutils_assemble ${srcfile} tmpdir/bintest.o]
+ if [string match "" $exec_output] then {
+ send_log "$exec_output\n"
+ verbose "$exec_output"
+ fail $testname
+ return
+ }
+
+ set progopts1 $opts($program)
+ eval set progopts \$[string toupper $program]FLAGS
+ eval set binary \$[string toupper $program]
+
+ set exec_output [binutils_run $binary "$progopts $progopts1 $tempfile $destopt ${copyfile}.o"]
+ if ![string match "" $exec_output] {
+ send_log "$exec_output\n"
+ verbose "$exec_output"
+ fail $testname
+ return
+ }
+
+ set progopts1 $opts($dumpprogram)
+ eval set progopts \$[string toupper $dumpprogram]FLAGS
+ eval set binary \$[string toupper $dumpprogram]
+
+ if { [which $binary] == 0 } {
+ untested $testname
+ return
+ }
+
+ verbose "running $binary $progopts $progopts1" 3
+
+ set cmd "$binary $progopts $progopts1 ${copyfile}.o > tmpdir/dump.out"
+
+ # 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 "tmpdir/dump.out"]} 3
+ if { [regexp_diff "tmpdir/dump.out" "${file}.d"] } then {
+ fail $testname
+ verbose "output is [file_contents "tmpdir/dump.out"]" 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 dash
+ 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]
+ } elseif {![regexp "^#" $line ]} {
+ break
+ }
+ }
+ close $f
+ return $opt_array
+}
+
+# regexp_diff, based on simple_diff taken from ld test suite
+# 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 {
+ perror "$file_1 doesn't exist"
+ return 1
+ }
+
+ if [file exists $file_2] then {
+ set file_b [open $file_2 r]
+ } else {
+ perror "$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"
+ verbose "regexp_diff match failure\n" 3
+ 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
+}
+
+proc verbose_eval { expr { level 1 } } {
+ global verbose
+ if $verbose>$level then { eval verbose "$expr" $level }
+}
diff --git a/binutils/version.c b/binutils/version.c
index 2843e69f06b1..b4a4c3d3e7e9 100644
--- a/binutils/version.c
+++ b/binutils/version.c
@@ -1,6 +1,6 @@
/* version.c -- binutils version information
- Copyright 1991, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1991, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2007 Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -18,9 +18,8 @@
along with this program; if not, write to the Free Software
Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-#include <stdio.h>
+#include "sysdep.h"
#include "bfd.h"
-#include "bfdver.h"
#include "bucomm.h"
/* Print the version number and copyright information, and exit. This
@@ -32,7 +31,7 @@ print_version (const char *name)
/* This output is intended to follow the GNU standards document. */
/* xgettext:c-format */
printf ("GNU %s %s\n", name, BFD_VERSION_STRING);
- printf (_("Copyright 2005 Free Software Foundation, Inc.\n"));
+ printf (_("Copyright 2007 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"));
diff --git a/binutils/windint.h b/binutils/windint.h
new file mode 100644
index 000000000000..b46f857a7a86
--- /dev/null
+++ b/binutils/windint.h
@@ -0,0 +1,1088 @@
+/* windint.h -- internal header file for windres program.
+ Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007
+ Free Software Foundation, Inc.
+ Written by Kai Tietz, Onevision.
+
+ 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 "winduni.h"
+
+#ifndef WINDINT_H
+#define WINDINT_H
+
+/* Use bfd_size_type to ensure a sufficient number of bits. */
+#ifndef DEFINED_RC_UINT_TYPE
+#define DEFINED_RC_UINT_TYPE
+typedef bfd_size_type rc_uint_type;
+#endif
+
+/* Resource directory structure. */
+
+typedef struct res_hdr
+{
+ rc_uint_type data_size;
+ rc_uint_type header_size;
+} res_hdr;
+
+struct __attribute__ ((__packed__)) bin_res_hdr
+{
+ bfd_byte data_size[4];
+ bfd_byte header_size[4];
+};
+#define BIN_RES_HDR_SIZE 8
+
+struct __attribute__ ((__packed__)) bin_res_id
+{
+ bfd_byte sig[2]; /* Has to be 0xffff for unnamed ids. */
+ bfd_byte id[2];
+};
+#define BIN_RES_ID 4
+
+/* This structure is used when converting resource information to
+ binary. */
+
+typedef struct bindata
+{
+ /* Next data. */
+ struct bindata *next;
+ /* Length of data. */
+ rc_uint_type length;
+ /* Data. */
+ bfd_byte *data;
+} bindata;
+
+/* This structure is used when converting resource information to
+ coff. */
+typedef struct coff_res_data
+{
+ /* Next data. */
+ struct coff_res_data *next;
+ /* Length of data. */
+ rc_uint_type length;
+ /* Data. */
+ const struct rc_res_resource *res;
+} coff_res_data;
+
+/* We represent resources internally as a tree, similar to the tree
+ used in the .rsrc section of a COFF file. The root is a
+ rc_res_directory structure. */
+
+typedef struct rc_res_directory
+{
+ /* Resource flags. According to the MS docs, this is currently
+ always zero. */
+ rc_uint_type characteristics;
+ /* Time/date stamp. */
+ rc_uint_type time;
+ /* Major version number. */
+ rc_uint_type major;
+ /* Minor version number. */
+ rc_uint_type minor;
+ /* Directory entries. */
+ struct rc_res_entry *entries;
+} rc_res_directory;
+
+/* A resource ID is stored in a rc_res_id structure. */
+
+typedef struct rc_res_id
+{
+ /* Non-zero if this entry has a name rather than an ID. */
+ rc_uint_type named : 1;
+ union
+ {
+ /* If the named field is non-zero, this is the name. */
+ struct
+ {
+ /* Length of the name. */
+ rc_uint_type length;
+ /* Pointer to the name, which is a Unicode string. */
+ unichar *name;
+ } n;
+ /* If the named field is zero, this is the ID. */
+ rc_uint_type id;
+ } u;
+} rc_res_id;
+
+/* Each entry in the tree is a rc_res_entry structure. We mix
+ directories and resources because in a COFF file all entries in a
+ directory are sorted together, whether the entries are
+ subdirectories or resources. */
+
+typedef struct rc_res_entry
+{
+ /* Next entry. */
+ struct rc_res_entry *next;
+ /* Resource ID. */
+ rc_res_id id;
+ /* Non-zero if this entry is a subdirectory rather than a leaf. */
+ rc_uint_type subdir : 1;
+ union
+ {
+ /* If the subdir field is non-zero, this is a pointer to the
+ subdirectory. */
+ rc_res_directory *dir;
+ /* If the subdir field is zero, this is a pointer to the resource
+ data. */
+ struct rc_res_resource *res;
+ } u;
+} rc_res_entry;
+
+/* Types of resources. */
+
+enum rc_res_type
+{
+ RES_TYPE_UNINITIALIZED,
+ RES_TYPE_ACCELERATOR,
+ RES_TYPE_BITMAP,
+ RES_TYPE_CURSOR,
+ RES_TYPE_GROUP_CURSOR,
+ RES_TYPE_DIALOG,
+ RES_TYPE_FONT,
+ RES_TYPE_FONTDIR,
+ RES_TYPE_ICON,
+ RES_TYPE_GROUP_ICON,
+ RES_TYPE_MENU,
+ RES_TYPE_MESSAGETABLE,
+ RES_TYPE_RCDATA,
+ RES_TYPE_STRINGTABLE,
+ RES_TYPE_USERDATA,
+ RES_TYPE_VERSIONINFO,
+ RES_TYPE_DLGINCLUDE,
+ RES_TYPE_PLUGPLAY,
+ RES_TYPE_VXD,
+ RES_TYPE_ANICURSOR,
+ RES_TYPE_ANIICON,
+ RES_TYPE_DLGINIT,
+ RES_TYPE_TOOLBAR
+};
+
+/* A res file and a COFF file store information differently. The
+ res_info structures holds data which in a res file is stored with
+ each resource, but in a COFF file is stored elsewhere. */
+
+typedef struct rc_res_res_info
+{
+ /* Language. In a COFF file, the third level of the directory is
+ keyed by the language, so the language of a resource is defined
+ by its location in the resource tree. */
+ rc_uint_type language;
+ /* Characteristics of the resource. Entirely user defined. In a
+ COFF file, the rc_res_directory structure has a characteristics
+ field, but I don't know if it's related to the one in the res
+ file. */
+ rc_uint_type characteristics;
+ /* Version of the resource. Entirely user defined. In a COFF file,
+ the rc_res_directory structure has a characteristics field, but I
+ don't know if it's related to the one in the res file. */
+ rc_uint_type version;
+ /* Memory flags. This is a combination of the MEMFLAG values
+ defined below. Most of these values are historical, and are not
+ meaningful for win32. I don't think there is any way to store
+ this information in a COFF file. */
+ rc_uint_type memflags;
+} rc_res_res_info;
+
+/* Binary layout of rc_res_info. */
+
+struct __attribute__ ((__packed__)) bin_res_info
+{
+ bfd_byte version[4];
+ bfd_byte memflags[2];
+ bfd_byte language[2];
+ bfd_byte version2[4];
+ bfd_byte characteristics[4];
+};
+#define BIN_RES_INFO_SIZE 16
+
+/* Each resource in a COFF file has some information which can does
+ not appear in a res file. */
+
+typedef struct rc_res_coff_info
+{
+ /* The code page used for the data. I don't really know what this
+ should be. It has something todo with ASCII to Unicode encoding. */
+ rc_uint_type codepage;
+ /* A resource entry in a COFF file has a reserved field, which we
+ record here when reading a COFF file. When writing a COFF file,
+ we set this field to zero. */
+ rc_uint_type reserved;
+} rc_res_coff_info;
+
+/* Resource data is stored in a rc_res_resource structure. */
+
+typedef struct rc_res_resource
+{
+ /* The type of resource. */
+ enum rc_res_type type;
+ /* The data for the resource. */
+ union
+ {
+ struct
+ {
+ rc_uint_type length;
+ const bfd_byte *data;
+ } data;
+ struct rc_accelerator *acc;
+ struct rc_cursor *cursor;
+ struct rc_group_cursor *group_cursor;
+ struct rc_dialog *dialog;
+ struct rc_fontdir *fontdir;
+ struct rc_group_icon *group_icon;
+ struct rc_menu *menu;
+ struct rc_rcdata_item *rcdata;
+ struct rc_stringtable *stringtable;
+ struct rc_rcdata_item *userdata;
+ struct rc_versioninfo *versioninfo;
+ struct rc_toolbar *toolbar;
+ } u;
+ /* Information from a res file. */
+ struct rc_res_res_info res_info;
+ /* Information from a COFF file. */
+ rc_res_coff_info coff_info;
+} rc_res_resource;
+
+#define SUBLANG_SHIFT 10
+
+/* Memory flags in the memflags field of a rc_res_resource. */
+
+#define MEMFLAG_MOVEABLE 0x10
+#define MEMFLAG_PURE 0x20
+#define MEMFLAG_PRELOAD 0x40
+#define MEMFLAG_DISCARDABLE 0x1000
+
+/* Standard resource type codes. These are used in the ID field of a
+ rc_res_entry structure. */
+
+#define RT_CURSOR 1
+#define RT_BITMAP 2
+#define RT_ICON 3
+#define RT_MENU 4
+#define RT_DIALOG 5
+#define RT_STRING 6
+#define RT_FONTDIR 7
+#define RT_FONT 8
+#define RT_ACCELERATOR 9
+#define RT_RCDATA 10
+#define RT_MESSAGETABLE 11
+#define RT_GROUP_CURSOR 12
+#define RT_GROUP_ICON 14
+#define RT_VERSION 16
+#define RT_DLGINCLUDE 17
+#define RT_PLUGPLAY 19
+#define RT_VXD 20
+#define RT_ANICURSOR 21
+#define RT_ANIICON 22
+#define RT_HTML 23
+#define RT_MANIFEST 24
+#define RT_DLGINIT 240
+#define RT_TOOLBAR 241
+
+/* An accelerator resource is a linked list of these structures. */
+
+typedef struct rc_accelerator
+{
+ /* Next accelerator. */
+ struct rc_accelerator *next;
+ /* Flags. A combination of the ACC values defined below. */
+ rc_uint_type flags;
+ /* Key value. */
+ rc_uint_type key;
+ /* Resource ID. */
+ rc_uint_type id;
+} rc_accelerator;
+
+struct __attribute__ ((__packed__)) bin_accelerator
+{
+ bfd_byte flags[2];
+ bfd_byte key[2];
+ bfd_byte id[2];
+ bfd_byte pad[2];
+};
+#define BIN_ACCELERATOR_SIZE 8
+
+/* Accelerator flags in the flags field of a rc_accelerator.
+ These are the same values that appear in a res file. I hope. */
+
+#define ACC_VIRTKEY 0x01
+#define ACC_NOINVERT 0x02
+#define ACC_SHIFT 0x04
+#define ACC_CONTROL 0x08
+#define ACC_ALT 0x10
+#define ACC_LAST 0x80
+
+/* A cursor resource. */
+
+typedef struct rc_cursor
+{
+ /* X coordinate of hotspot. */
+ bfd_signed_vma xhotspot;
+ /* Y coordinate of hotspot. */
+ bfd_signed_vma yhotspot;
+ /* Length of bitmap data. */
+ rc_uint_type length;
+ /* Data. */
+ const bfd_byte *data;
+} rc_cursor;
+
+struct __attribute__ ((__packed__)) bin_cursor
+{
+ bfd_byte xhotspot[2];
+ bfd_byte yhotspot[2];
+};
+#define BIN_CURSOR_SIZE 4
+
+/* A group_cursor resource is a list of rc_i_group_cursor structures. */
+
+typedef struct rc_group_cursor
+{
+ /* Next cursor in group. */
+ struct rc_group_cursor *next;
+ /* Width. */
+ rc_uint_type width;
+ /* Height. */
+ rc_uint_type height;
+ /* Planes. */
+ rc_uint_type planes;
+ /* Bits per pixel. */
+ rc_uint_type bits;
+ /* Number of bytes in cursor resource. */
+ rc_uint_type bytes;
+ /* Index of cursor resource. */
+ rc_uint_type index;
+} rc_group_cursor;
+
+struct __attribute__ ((__packed__)) bin_group_cursor_item
+{
+ bfd_byte width[2];
+ bfd_byte height[2];
+ bfd_byte planes[2];
+ bfd_byte bits[2];
+ bfd_byte bytes[4];
+ bfd_byte index[2];
+};
+#define BIN_GROUP_CURSOR_ITEM_SIZE 14
+
+struct __attribute__ ((__packed__)) bin_group_cursor
+{
+ bfd_byte sig1[2];
+ bfd_byte sig2[2];
+ bfd_byte nitems[2];
+ /* struct bin_group_cursor_item item[nitems]; */
+};
+#define BIN_GROUP_CURSOR_SIZE 6
+
+/* A dialog resource. */
+
+typedef struct rc_dialog
+{
+ /* Basic window style. */
+ unsigned int style;
+ /* Extended window style. */
+ rc_uint_type exstyle;
+ /* X coordinate. */
+ rc_uint_type x;
+ /* Y coordinate. */
+ rc_uint_type y;
+ /* Width. */
+ rc_uint_type width;
+ /* Height. */
+ rc_uint_type height;
+ /* Menu name. */
+ rc_res_id menu;
+ /* Class name. */
+ rc_res_id class;
+ /* Caption. */
+ unichar *caption;
+ /* Font point size. */
+ rc_uint_type pointsize;
+ /* Font name. */
+ unichar *font;
+ /* Extended information for a dialogex. */
+ struct rc_dialog_ex *ex;
+ /* Controls. */
+ struct rc_dialog_control *controls;
+} rc_dialog;
+
+struct __attribute__ ((__packed__)) bin_dialog
+{
+ bfd_byte style[4];
+ bfd_byte exstyle[4];
+ bfd_byte off[2];
+ bfd_byte x[2];
+ bfd_byte y[2];
+ bfd_byte width[2];
+ bfd_byte height[2];
+};
+#define BIN_DIALOG_SIZE 18
+
+/* An extended dialog has additional information. */
+
+typedef struct rc_dialog_ex
+{
+ /* Help ID. */
+ rc_uint_type help;
+ /* Font weight. */
+ rc_uint_type weight;
+ /* Whether the font is italic. */
+ bfd_byte italic;
+ /* Character set. */
+ bfd_byte charset;
+} rc_dialog_ex;
+
+struct __attribute__ ((__packed__)) bin_dialogex
+{
+ bfd_byte sig1[2];
+ bfd_byte sig2[2];
+ bfd_byte help[4];
+ bfd_byte exstyle[4];
+ bfd_byte style[4];
+ bfd_byte off[2];
+ bfd_byte x[2];
+ bfd_byte y[2];
+ bfd_byte width[2];
+ bfd_byte height[2];
+};
+#define BIN_DIALOGEX_SIZE 26
+
+struct __attribute__ ((__packed__)) bin_dialogfont
+{
+ bfd_byte pointsize[2];
+};
+#define BIN_DIALOGFONT_SIZE 2
+
+struct __attribute__ ((__packed__)) bin_dialogexfont
+{
+ bfd_byte pointsize[2];
+ bfd_byte weight[2];
+ bfd_byte italic[1];
+ bfd_byte charset[1];
+};
+#define BIN_DIALOGEXFONT_SIZE 6
+
+/* Window style flags, from the winsup Defines.h header file. These
+ can appear in the style field of a rc_dialog or a rc_dialog_control. */
+
+#define CW_USEDEFAULT 0x80000000
+#define WS_BORDER 0x800000L
+#define WS_CAPTION 0xc00000L
+#define WS_CHILD 0x40000000L
+#define WS_CHILDWINDOW 0x40000000L
+#define WS_CLIPCHILDREN 0x2000000L
+#define WS_CLIPSIBLINGS 0x4000000L
+#define WS_DISABLED 0x8000000L
+#define WS_DLGFRAME 0x400000L
+#define WS_GROUP 0x20000L
+#define WS_HSCROLL 0x100000L
+#define WS_ICONIC 0x20000000L
+#define WS_MAXIMIZE 0x1000000L
+#define WS_MAXIMIZEBOX 0x10000L
+#define WS_MINIMIZE 0x20000000L
+#define WS_MINIMIZEBOX 0x20000L
+#define WS_OVERLAPPED 0L
+#define WS_OVERLAPPEDWINDOW 0xcf0000L
+#define WS_POPUP 0x80000000L
+#define WS_POPUPWINDOW 0x80880000L
+#define WS_SIZEBOX 0x40000L
+#define WS_SYSMENU 0x80000L
+#define WS_TABSTOP 0x10000L
+#define WS_THICKFRAME 0x40000L
+#define WS_TILED 0L
+#define WS_TILEDWINDOW 0xcf0000L
+#define WS_VISIBLE 0x10000000L
+#define WS_VSCROLL 0x200000L
+#define MDIS_ALLCHILDSTYLES 0x1
+#define BS_3STATE 0x5L
+#define BS_AUTO3STATE 0x6L
+#define BS_AUTOCHECKBOX 0x3L
+#define BS_AUTORADIOBUTTON 0x9L
+#define BS_BITMAP 0x80L
+#define BS_BOTTOM 0x800L
+#define BS_CENTER 0x300L
+#define BS_CHECKBOX 0x2L
+#define BS_DEFPUSHBUTTON 0x1L
+#define BS_GROUPBOX 0x7L
+#define BS_ICON 0x40L
+#define BS_LEFT 0x100L
+#define BS_LEFTTEXT 0x20L
+#define BS_MULTILINE 0x2000L
+#define BS_NOTIFY 0x4000L
+#define BS_OWNERDRAW 0xbL
+#define BS_PUSHBOX 0xcL /* FIXME! What should this be? */
+#define BS_PUSHBUTTON 0L
+#define BS_PUSHLIKE 0x1000L
+#define BS_RADIOBUTTON 0x4L
+#define BS_RIGHT 0x200L
+#define BS_RIGHTBUTTON 0x20L
+#define BS_TEXT 0L
+#define BS_TOP 0x400L
+#define BS_USERBUTTON 0x8L
+#define BS_VCENTER 0xc00L
+#define CBS_AUTOHSCROLL 0x40L
+#define CBS_DISABLENOSCROLL 0x800L
+#define CBS_DROPDOWN 0x2L
+#define CBS_DROPDOWNLIST 0x3L
+#define CBS_HASSTRINGS 0x200L
+#define CBS_LOWERCASE 0x4000L
+#define CBS_NOINTEGRALHEIGHT 0x400L
+#define CBS_OEMCONVERT 0x80L
+#define CBS_OWNERDRAWFIXED 0x10L
+#define CBS_OWNERDRAWVARIABLE 0x20L
+#define CBS_SIMPLE 0x1L
+#define CBS_SORT 0x100L
+#define CBS_UPPERCASE 0x2000L
+#define ES_AUTOHSCROLL 0x80L
+#define ES_AUTOVSCROLL 0x40L
+#define ES_CENTER 0x1L
+#define ES_LEFT 0L
+#define ES_LOWERCASE 0x10L
+#define ES_MULTILINE 0x4L
+#define ES_NOHIDESEL 0x100L
+#define ES_NUMBER 0x2000L
+#define ES_OEMCONVERT 0x400L
+#define ES_PASSWORD 0x20L
+#define ES_READONLY 0x800L
+#define ES_RIGHT 0x2L
+#define ES_UPPERCASE 0x8L
+#define ES_WANTRETURN 0x1000L
+#define LBS_DISABLENOSCROLL 0x1000L
+#define LBS_EXTENDEDSEL 0x800L
+#define LBS_HASSTRINGS 0x40L
+#define LBS_MULTICOLUMN 0x200L
+#define LBS_MULTIPLESEL 0x8L
+#define LBS_NODATA 0x2000L
+#define LBS_NOINTEGRALHEIGHT 0x100L
+#define LBS_NOREDRAW 0x4L
+#define LBS_NOSEL 0x4000L
+#define LBS_NOTIFY 0x1L
+#define LBS_OWNERDRAWFIXED 0x10L
+#define LBS_OWNERDRAWVARIABLE 0x20L
+#define LBS_SORT 0x2L
+#define LBS_STANDARD 0xa00003L
+#define LBS_USETABSTOPS 0x80L
+#define LBS_WANTKEYBOARDINPUT 0x400L
+#define SBS_BOTTOMALIGN 0x4L
+#define SBS_HORZ 0L
+#define SBS_LEFTALIGN 0x2L
+#define SBS_RIGHTALIGN 0x4L
+#define SBS_SIZEBOX 0x8L
+#define SBS_SIZEBOXBOTTOMRIGHTALIGN 0x4L
+#define SBS_SIZEBOXTOPLEFTALIGN 0x2L
+#define SBS_SIZEGRIP 0x10L
+#define SBS_TOPALIGN 0x2L
+#define SBS_VERT 0x1L
+#define SS_BITMAP 0xeL
+#define SS_BLACKFRAME 0x7L
+#define SS_BLACKRECT 0x4L
+#define SS_CENTER 0x1L
+#define SS_CENTERIMAGE 0x200L
+#define SS_ENHMETAFILE 0xfL
+#define SS_ETCHEDFRAME 0x12L
+#define SS_ETCHEDHORZ 0x10L
+#define SS_ETCHEDVERT 0x11L
+#define SS_GRAYFRAME 0x8L
+#define SS_GRAYRECT 0x5L
+#define SS_ICON 0x3L
+#define SS_LEFT 0L
+#define SS_LEFTNOWORDWRAP 0xcL
+#define SS_NOPREFIX 0x80L
+#define SS_NOTIFY 0x100L
+#define SS_OWNERDRAW 0xdL
+#define SS_REALSIZEIMAGE 0x800L
+#define SS_RIGHT 0x2L
+#define SS_RIGHTJUST 0x400L
+#define SS_SIMPLE 0xbL
+#define SS_SUNKEN 0x1000L
+#define SS_USERITEM 0xaL
+#define SS_WHITEFRAME 0x9L
+#define SS_WHITERECT 0x6L
+#define DS_3DLOOK 0x4L
+#define DS_ABSALIGN 0x1L
+#define DS_CENTER 0x800L
+#define DS_CENTERMOUSE 0x1000L
+#define DS_CONTEXTHELP 0x2000L
+#define DS_CONTROL 0x400L
+#define DS_FIXEDSYS 0x8L
+#define DS_LOCALEDIT 0x20L
+#define DS_MODALFRAME 0x80L
+#define DS_NOFAILCREATE 0x10L
+#define DS_NOIDLEMSG 0x100L
+#define DS_SETFONT 0x40L
+#define DS_SETFOREGROUND 0x200L
+#define DS_SYSMODAL 0x2L
+
+/* A dialog control. */
+
+typedef struct rc_dialog_control
+{
+ /* Next control. */
+ struct rc_dialog_control *next;
+ /* ID. */
+ rc_uint_type id;
+ /* Style. */
+ rc_uint_type style;
+ /* Extended style. */
+ rc_uint_type exstyle;
+ /* X coordinate. */
+ rc_uint_type x;
+ /* Y coordinate. */
+ rc_uint_type y;
+ /* Width. */
+ rc_uint_type width;
+ /* Height. */
+ rc_uint_type height;
+ /* Class name. */
+ rc_res_id class;
+ /* Associated text. */
+ rc_res_id text;
+ /* Extra data for the window procedure. */
+ struct rc_rcdata_item *data;
+ /* Help ID. Only used in an extended dialog. */
+ rc_uint_type help;
+} rc_dialog_control;
+
+struct __attribute__ ((__packed__)) bin_dialog_control
+{
+ bfd_byte style[4];
+ bfd_byte exstyle[4];
+ bfd_byte x[2];
+ bfd_byte y[2];
+ bfd_byte width[2];
+ bfd_byte height[2];
+ bfd_byte id[2];
+};
+#define BIN_DIALOG_CONTROL_SIZE 18
+
+struct __attribute__ ((__packed__)) bin_dialogex_control
+{
+ bfd_byte help[4];
+ bfd_byte exstyle[4];
+ bfd_byte style[4];
+ bfd_byte x[2];
+ bfd_byte y[2];
+ bfd_byte width[2];
+ bfd_byte height[2];
+ bfd_byte id[4];
+};
+#define BIN_DIALOGEX_CONTROL_SIZE 24
+
+/* Control classes. These can be used as the ID field in a rc_dialog_control. */
+
+#define CTL_BUTTON 0x80
+#define CTL_EDIT 0x81
+#define CTL_STATIC 0x82
+#define CTL_LISTBOX 0x83
+#define CTL_SCROLLBAR 0x84
+#define CTL_COMBOBOX 0x85
+
+/* A fontdir resource is a list of rc_fontdir. */
+
+typedef struct rc_fontdir
+{
+ struct rc_fontdir *next;
+ /* Index of font entry. */
+ rc_uint_type index;
+ /* Length of font information. */
+ rc_uint_type length;
+ /* Font information. */
+ const bfd_byte *data;
+} rc_fontdir;
+
+struct __attribute__ ((__packed__)) bin_fontdir_item
+{
+ bfd_byte index[2];
+ bfd_byte header[54];
+ bfd_byte device_name[1];
+ /* bfd_byte face_name[]; */
+};
+
+/* A group_icon resource is a list of rc_group_icon. */
+
+typedef struct rc_group_icon
+{
+ /* Next icon in group. */
+ struct rc_group_icon *next;
+ /* Width. */
+ bfd_byte width;
+ /* Height. */
+ bfd_byte height;
+ /* Color count. */
+ bfd_byte colors;
+ /* Planes. */
+ rc_uint_type planes;
+ /* Bits per pixel. */
+ rc_uint_type bits;
+ /* Number of bytes in cursor resource. */
+ rc_uint_type bytes;
+ /* Index of cursor resource. */
+ rc_uint_type index;
+} rc_group_icon;
+
+struct __attribute__ ((__packed__)) bin_group_icon
+{
+ bfd_byte sig1[2];
+ bfd_byte sig2[2];
+ bfd_byte count[2];
+};
+#define BIN_GROUP_ICON_SIZE 6
+
+struct __attribute__ ((__packed__)) bin_group_icon_item
+{
+ bfd_byte width[1];
+ bfd_byte height[1];
+ bfd_byte colors[1];
+ bfd_byte pad[1];
+ bfd_byte planes[2];
+ bfd_byte bits[2];
+ bfd_byte bytes[4];
+ bfd_byte index[2];
+};
+#define BIN_GROUP_ICON_ITEM_SIZE 14
+
+/* A menu resource. */
+
+typedef struct rc_menu
+{
+ /* List of menuitems. */
+ struct rc_menuitem *items;
+ /* Help ID. I don't think there is any way to set this in an rc
+ file, but it can appear in the binary format. */
+ rc_uint_type help;
+} rc_menu;
+
+struct __attribute__ ((__packed__)) bin_menu
+{
+ bfd_byte sig1[2];
+ bfd_byte sig2[2];
+};
+#define BIN_MENU_SIZE 4
+
+struct __attribute__ ((__packed__)) bin_menuex
+{
+ bfd_byte sig1[2];
+ bfd_byte sig2[2];
+ bfd_byte help[4];
+};
+#define BIN_MENUEX_SIZE 8
+
+/* A menu resource is a list of rc_menuitem. */
+
+typedef struct rc_menuitem
+{
+ /* Next menu item. */
+ struct rc_menuitem *next;
+ /* Type. In a normal menu, rather than a menuex, this is the flags
+ field. */
+ rc_uint_type type;
+ /* State. This is only used in a menuex. */
+ rc_uint_type state;
+ /* Id. */
+ rc_uint_type id;
+ /* Unicode text. */
+ unichar *text;
+ /* Popup menu items for a popup. */
+ struct rc_menuitem *popup;
+ /* Help ID. This is only used in a menuex. */
+ rc_uint_type help;
+} rc_menuitem;
+
+struct __attribute__ ((__packed__)) bin_menuitem
+{
+ bfd_byte flags[2];
+ bfd_byte id[2];
+};
+#define BIN_MENUITEM_SIZE 4
+#define BIN_MENUITEM_POPUP_SIZE 2
+
+struct __attribute__ ((__packed__)) bin_menuitemex
+{
+ bfd_byte type[4];
+ bfd_byte state[4];
+ bfd_byte id[4];
+ bfd_byte flags[2];
+ /* unicode text */
+ /* if popup: align, bfd_byte help[4], align, bin_menuitemex[]; */
+};
+#define BIN_MENUITEMEX_SIZE 14
+
+/* Menu item flags. These can appear in the flags field of a rc_menuitem. */
+
+#define MENUITEM_GRAYED 0x001
+#define MENUITEM_INACTIVE 0x002
+#define MENUITEM_BITMAP 0x004
+#define MENUITEM_OWNERDRAW 0x100
+#define MENUITEM_CHECKED 0x008
+#define MENUITEM_POPUP 0x010
+#define MENUITEM_MENUBARBREAK 0x020
+#define MENUITEM_MENUBREAK 0x040
+#define MENUITEM_ENDMENU 0x080
+#define MENUITEM_HELP 0x4000
+
+/* An rcdata resource is a pointer to a list of rc_rcdata_item. */
+
+typedef struct rc_rcdata_item
+{
+ /* Next data item. */
+ struct rc_rcdata_item *next;
+ /* Type of data. */
+ enum
+ {
+ RCDATA_WORD,
+ RCDATA_DWORD,
+ RCDATA_STRING,
+ RCDATA_WSTRING,
+ RCDATA_BUFFER
+ } type;
+ union
+ {
+ rc_uint_type word;
+ rc_uint_type dword;
+ struct
+ {
+ rc_uint_type length;
+ const char *s;
+ } string;
+ struct
+ {
+ rc_uint_type length;
+ const unichar *w;
+ } wstring;
+ struct
+ {
+ rc_uint_type length;
+ const bfd_byte *data;
+ } buffer;
+ } u;
+} rc_rcdata_item;
+
+/* A stringtable resource is a pointer to a rc_stringtable. */
+
+typedef struct rc_stringtable
+{
+ /* Each stringtable resource is a list of 16 unicode strings. */
+ struct
+ {
+ /* Length of string. */
+ rc_uint_type length;
+ /* String data if length > 0. */
+ unichar *string;
+ } strings[16];
+} rc_stringtable;
+
+/* A versioninfo resource points to a rc_versioninfo. */
+
+typedef struct rc_versioninfo
+{
+ /* Fixed version information. */
+ struct rc_fixed_versioninfo *fixed;
+ /* Variable version information. */
+ struct rc_ver_info *var;
+} rc_versioninfo;
+
+struct __attribute__ ((__packed__)) bin_versioninfo
+{
+ bfd_byte size[2];
+ bfd_byte fixed_size[2];
+ bfd_byte sig2[2];
+};
+#define BIN_VERSIONINFO_SIZE 6
+
+/* The fixed portion of a versioninfo resource. */
+
+typedef struct rc_fixed_versioninfo
+{
+ /* The file version, which is two 32 bit integers. */
+ rc_uint_type file_version_ms;
+ rc_uint_type file_version_ls;
+ /* The product version, which is two 32 bit integers. */
+ rc_uint_type product_version_ms;
+ rc_uint_type product_version_ls;
+ /* The file flags mask. */
+ rc_uint_type file_flags_mask;
+ /* The file flags. */
+ rc_uint_type file_flags;
+ /* The OS type. */
+ rc_uint_type file_os;
+ /* The file type. */
+ rc_uint_type file_type;
+ /* The file subtype. */
+ rc_uint_type file_subtype;
+ /* The date, which in Windows is two 32 bit integers. */
+ rc_uint_type file_date_ms;
+ rc_uint_type file_date_ls;
+} rc_fixed_versioninfo;
+
+struct __attribute__ ((__packed__)) bin_fixed_versioninfo
+{
+ bfd_byte sig1[4];
+ bfd_byte sig2[4];
+ bfd_byte file_version[4];
+ bfd_byte file_version_ls[4];
+ bfd_byte product_version_ms[4];
+ bfd_byte product_version_ls[4];
+ bfd_byte file_flags_mask[4];
+ bfd_byte file_flags[4];
+ bfd_byte file_os[4];
+ bfd_byte file_type[4];
+ bfd_byte file_subtype[4];
+ bfd_byte file_date_ms[4];
+ bfd_byte file_date_ls[4];
+};
+#define BIN_FIXED_VERSIONINFO_SIZE 52
+
+/* A list of variable version information. */
+
+typedef struct rc_ver_info
+{
+ /* Next item. */
+ struct rc_ver_info *next;
+ /* Type of data. */
+ enum { VERINFO_STRING, VERINFO_VAR } type;
+ union
+ {
+ /* StringFileInfo data. */
+ struct
+ {
+ /* Language. */
+ unichar *language;
+ /* Strings. */
+ struct rc_ver_stringinfo *strings;
+ } string;
+ /* VarFileInfo data. */
+ struct
+ {
+ /* Key. */
+ unichar *key;
+ /* Values. */
+ struct rc_ver_varinfo *var;
+ } var;
+ } u;
+} rc_ver_info;
+
+struct __attribute__ ((__packed__)) bin_ver_info
+{
+ bfd_byte size[2];
+ bfd_byte sig1[2];
+ bfd_byte sig2[2];
+};
+#define BIN_VER_INFO_SIZE 6
+
+/* A list of string version information. */
+
+typedef struct rc_ver_stringinfo
+{
+ /* Next string. */
+ struct rc_ver_stringinfo *next;
+ /* Key. */
+ unichar *key;
+ /* Value. */
+ unichar *value;
+} rc_ver_stringinfo;
+
+/* A list of variable version information. */
+
+typedef struct rc_ver_varinfo
+{
+ /* Next item. */
+ struct rc_ver_varinfo *next;
+ /* Language ID. */
+ rc_uint_type language;
+ /* Character set ID. */
+ rc_uint_type charset;
+} rc_ver_varinfo;
+
+typedef struct rc_toolbar_item
+{
+ struct rc_toolbar_item *next;
+ struct rc_toolbar_item *prev;
+ rc_res_id id;
+} rc_toolbar_item;
+
+struct __attribute__ ((__packed__)) bin_messagetable_item
+{
+ bfd_byte length[2];
+ bfd_byte flags[2];
+ bfd_byte data[1];
+};
+#define BIN_MESSAGETABLE_ITEM_SIZE 4
+
+#define MESSAGE_RESOURCE_UNICODE 0x0001
+
+struct __attribute__ ((__packed__)) bin_messagetable_block
+{
+ bfd_byte lowid[4];
+ bfd_byte highid[4];
+ bfd_byte offset[4];
+};
+#define BIN_MESSAGETABLE_BLOCK_SIZE 12
+
+struct __attribute__ ((__packed__)) bin_messagetable
+{
+ bfd_byte cblocks[4];
+ struct bin_messagetable_block items[1];
+};
+#define BIN_MESSAGETABLE_SIZE 8
+
+typedef struct rc_toolbar
+{
+ rc_uint_type button_width;
+ rc_uint_type button_height;
+ rc_uint_type nitems;
+ rc_toolbar_item *items;
+} rc_toolbar;
+
+struct __attribute__ ((__packed__)) bin_toolbar
+{
+ bfd_byte button_width[4];
+ bfd_byte button_height[4];
+ bfd_byte nitems[4];
+ /* { bfd_byte id[4]; } * nitems; */
+};
+#define BIN_TOOLBAR_SIZE 12
+
+extern int target_is_bigendian;
+
+typedef struct windres_bfd
+{
+ bfd *abfd;
+ asection *sec;
+ rc_uint_type kind : 4;
+} windres_bfd;
+
+#define WR_KIND_TARGET 0
+#define WR_KIND_BFD 1
+#define WR_KIND_BFD_BIN_L 2
+#define WR_KIND_BFD_BIN_B 3
+
+#define WR_KIND(PTR) (PTR)->kind
+#define WR_SECTION(PTR) (PTR)->sec
+#define WR_BFD(PTR) (PTR)->abfd
+
+extern void set_windres_bfd_content (windres_bfd *, const void *, rc_uint_type, rc_uint_type);
+extern void get_windres_bfd_content (windres_bfd *, void *, rc_uint_type, rc_uint_type);
+
+extern void windres_put_8 (windres_bfd *, void *, rc_uint_type);
+extern void windres_put_16 (windres_bfd *, void *, rc_uint_type);
+extern void windres_put_32 (windres_bfd *, void *, rc_uint_type);
+extern rc_uint_type windres_get_8 (windres_bfd *, const void *, rc_uint_type);
+extern rc_uint_type windres_get_16 (windres_bfd *, const void *, rc_uint_type);
+extern rc_uint_type windres_get_32 (windres_bfd *, const void *, rc_uint_type);
+
+extern void set_windres_bfd (windres_bfd *, bfd *, asection *, rc_uint_type);
+extern void set_windres_bfd_endianess (windres_bfd *, int);
+
+#endif
diff --git a/binutils/windmc.c b/binutils/windmc.c
new file mode 100644
index 000000000000..5465b351cd77
--- /dev/null
+++ b/binutils/windmc.c
@@ -0,0 +1,1197 @@
+/* windmc.c -- a program to compile Windows message files.
+ Copyright 2007
+ Free Software Foundation, Inc.
+ Written by Kai Tietz, Onevision.
+
+ 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. */
+
+/* This program can read and comile Windows message format.
+
+ It is based on information taken from the following sources:
+
+ * Microsoft documentation.
+
+ * The wmc program, written by Bertho A. Stultiens (BS). */
+
+#include "sysdep.h"
+#include <assert.h>
+#include <time.h>
+#include "bfd.h"
+#include "getopt.h"
+#include "bucomm.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+#include "obstack.h"
+
+#include "windmc.h"
+#include "windint.h"
+
+/* Defines a message compiler element item with length and offset
+ information. */
+typedef struct mc_msg_item
+{
+ rc_uint_type res_len;
+ rc_uint_type res_off;
+ struct bin_messagetable_item *res;
+} mc_msg_item;
+
+/* Defined in bfd/binary.c. Used to set architecture and machine of input
+ binary files. */
+extern enum bfd_architecture bfd_external_binary_architecture;
+extern unsigned long bfd_external_machine;
+
+int target_is_bigendian = 0;
+const char *def_target_arch;
+
+/* Globals and static variable definitions. */
+
+/* bfd global helper struct variable. */
+static struct
+{
+ bfd *abfd;
+ asection *sec;
+} mc_bfd;
+
+/* Memory list. */
+mc_node *mc_nodes = NULL;
+static mc_node_lang **mc_nodes_lang = NULL;
+static int mc_nodes_lang_count = 0;
+static mc_keyword **mc_severity_codes = NULL;
+static int mc_severity_codes_count = 0;
+static mc_keyword **mc_facility_codes = NULL;
+static int mc_facility_codes_count = 0;
+
+/* When we are building a resource tree, we allocate everything onto
+ an obstack, so that we can free it all at once if we want. */
+#define obstack_chunk_alloc xmalloc
+#define obstack_chunk_free free
+
+/* The resource building obstack. */
+static struct obstack res_obstack;
+
+/* Flag variables. */
+/* Set by -C. Set the default code page to be used for input text file. */
+static rc_uint_type mcset_codepage_in = 0;
+
+/* Set by -O. Set the default code page to be used for output text files. */
+static rc_uint_type mcset_codepage_out = 0;
+
+/* Set by -b. .BIN filename should have .mc filename_ included for uniqueness. */
+static int mcset_prefix_bin = 0;
+
+/* The base name of the .mc file. */
+static const char *mcset_mc_basename = "unknown";
+
+/* Set by -e <ext>. Specify the extension for the header file. */
+static const char *mcset_header_ext = ".h";
+
+/* Set by -h <path>. Gives the path of where to create the C include file. */
+static const char *mcset_header_dir = "./";
+
+/* Set by -r <path>. Gives the path of where to create the RC include file
+ and the binary message resource files it includes. */
+static const char *mcset_rc_dir = "./";
+
+/* Modified by -a & -u. By -u input file is unicode, by -a is ASCII (default). */
+static int mcset_text_in_is_unicode = 0;
+
+/* Modified by -A & -U. By -U bin file is unicode (default), by -A is ASCII. */
+static int mcset_bin_out_is_unicode = 1;
+
+/* Set by -c. Sets the Customer bit in all the message ID's. */
+int mcset_custom_bit = 0;
+
+/* Set by -o. Generate OLE2 header file. Use HRESULT definition instead of
+ status code definition. */
+static int mcset_use_hresult = 0;
+
+/* Set by -m <msglen>. Generate a warning if the size of any message exceeds
+ maxmsglen characters. */
+rc_uint_type mcset_max_message_length = 0;
+
+/* Set by -d. Sets message values in header to decimal initially. */
+int mcset_out_values_are_decimal = 0;
+
+/* Set by -n. terminates all strings with null's in the message tables. */
+static int mcset_automatic_null_termination = 0;
+
+/* The type used for message id output in header. */
+unichar *mcset_msg_id_typedef = NULL;
+
+/* Set by -x path. Geberated debug C file for mapping ID's to text. */
+static const char *mcset_dbg_dir = NULL;
+
+/* getopt long name definitions. */
+static const struct option long_options[] =
+{
+ {"binprefix", no_argument, 0, 'b'},
+ {"target", required_argument, 0, 'F'},
+ {"extension", required_argument, 0, 'e'},
+ {"headerdir", required_argument, 0, 'h'},
+ {"rcdir", required_argument, 0, 'r'},
+ {"verbose", no_argument, 0, 'v'},
+ {"codepage_in", required_argument, 0, 'C'},
+ {"codepage_out", required_argument, 0, 'O'},
+ {"maxlength", required_argument, 0, 'm'},
+ {"ascii_in", no_argument, 0, 'a'},
+ {"ascii_out", no_argument, 0, 'A'},
+ {"unicode_in", no_argument, 0, 'u'},
+ {"unicode_out", no_argument, 0, 'U'},
+ {"customflag", no_argument, 0, 'c'},
+ {"decimal_values", no_argument, 0, 'd'},
+ {"hresult_use", no_argument, 0, 'o'},
+ {"nullterminate", no_argument, 0, 'n'},
+ {"xdbg", required_argument, 0, 'x'},
+ {"version", no_argument, 0, 'V'},
+ {"help", no_argument, 0, 'H'},
+ {0, no_argument, 0, 0}
+};
+
+
+/* Initialize the resource building obstack. */
+static void
+res_init (void)
+{
+ obstack_init (&res_obstack);
+}
+
+/* Allocate space on the resource building obstack. */
+void *
+res_alloc (rc_uint_type bytes)
+{
+ return (void *) obstack_alloc (&res_obstack, (size_t) bytes);
+}
+
+static FILE *
+mc_create_path_text_file (const char *path, const char *ext)
+{
+ FILE *ret;
+ size_t len = 1;
+ char *hsz;
+
+ len += (path != NULL ? strlen (path) : 0);
+ len += strlen (mcset_mc_basename);
+ len += (ext != NULL ? strlen (ext) : 0);
+ hsz = xmalloc (len);
+ sprintf (hsz, "%s%s%s", (path != NULL ? path : ""), mcset_mc_basename,
+ (ext != NULL ? ext : ""));
+ if ((ret = fopen (hsz, "wb")) == NULL)
+ fatal (_("can't create %s file ,%s' for output.\n"), (ext ? ext : "text"), hsz);
+ free (hsz);
+ return ret;
+}
+
+static void
+usage (FILE *stream, int status)
+{
+ fprintf (stream, _("Usage: %s [option(s)] [input-file]\n"),
+ program_name);
+ fprintf (stream, _(" The options are:\n\
+ -a --ascii_in Read input file as ASCII file\n\
+ -A --ascii_out Write binary messages as ASCII\n\
+ -b --binprefix .bin filename is prefixed by .mc filename_ for uniqueness.\n\
+ -c --customflag Set custom flags for messages\n\
+ -C --codepage_in=<val> Set codepage when reading mc text file\n\
+ -d --decimal_values Print values to text files decimal\n\
+ -e --extension=<extension> Set header extension used on export header file\n\
+ -F --target <target> Specify output target for endianess.\n\
+ -h --headerdir=<directory> Set the export directory for headers\n\
+ -u --unicode_in Read input file as UTF16 file\n\
+ -U --unicode_out Write binary messages as UFT16\n\
+ -m --maxlength=<val> Set the maximal allowed message length\n\
+ -n --nullterminate Automatic add a zero termination to strings\n\
+ -o --hresult_use Use HRESULT definition instead of status code definition\n\
+ -O --codepage_out=<val> Set codepage used for writing text file\n\
+ -r --rcdir=<directory> Set the export directory for rc files\n\
+ -x --xdbg=<directory> Where to create the .dbg C include file\n\
+ that maps message ID's to their symbolic name.\n\
+"));
+ fprintf (stream, _("\
+ -H --help Print this help message\n\
+ -v --verbose Verbose - tells you what it's doing\n\
+ -V --version Print version information\n"));
+
+ list_supported_targets (program_name, stream);
+
+ if (REPORT_BUGS_TO[0] && status == 0)
+ fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
+
+ exit (status);
+}
+
+static void
+set_endianess (bfd *abfd, const char *target)
+{
+ const bfd_target *target_vec;
+
+ def_target_arch = NULL;
+ target_vec = bfd_find_target (target, abfd);
+ if (! target_vec)
+ fatal ("Can't detect target endianess and architecture.");
+ target_is_bigendian = ((target_vec->byteorder == BFD_ENDIAN_BIG) ? 1 : 0);
+ {
+ const char *tname = target_vec->name;
+ const char **arch = bfd_arch_list ();
+
+ if (arch && tname)
+ {
+ if (strchr (tname, '-') != NULL)
+ tname = strchr (tname, '-') + 1;
+ while (*arch != NULL)
+ {
+ const char *in_a = strstr (*arch, tname);
+ char end_ch = (in_a ? in_a[strlen (tname)] : 0);
+ if (in_a && (in_a == *arch || in_a[-1] == ':')
+ && end_ch == 0)
+ {
+ def_target_arch = *arch;
+ break;
+ }
+ arch++;
+ }
+ }
+ if (! def_target_arch)
+ fatal ("Can't detect architecture.");
+ }
+}
+
+static int
+probe_codepage (rc_uint_type *cp, int *is_uni, const char *pswitch, int defmode)
+{
+ if (*is_uni == -1)
+ {
+ if (*cp != CP_UTF16)
+ *is_uni = defmode;
+ else
+ *is_uni = 1;
+ }
+ if (*is_uni)
+ {
+ if (*cp != 0 && *cp != CP_UTF16)
+ {
+ fprintf (stderr, _("%s: warning: "), program_name);
+ fprintf (stderr, _("A codepage was specified switch ,%s' and UTF16.\n"), pswitch);
+ fprintf (stderr, _("\tcodepage settings are ignored.\n"));
+ }
+ *cp = CP_UTF16;
+ return 1;
+ }
+ if (*cp == CP_UTF16)
+ {
+ *is_uni = 1;
+ return 1;
+ }
+ if (*cp == 0)
+ *cp = 1252;
+ if (! unicode_is_valid_codepage (*cp))
+ fatal ("Code page 0x%x is unknown.", (unsigned int) *cp);
+ *is_uni = 0;
+ return 1;
+}
+
+mc_node *
+mc_add_node (void)
+{
+ mc_node *ret;
+
+ ret = res_alloc (sizeof (mc_node));
+ memset (ret, 0, sizeof (mc_node));
+ if (! mc_nodes)
+ mc_nodes = ret;
+ else
+ {
+ mc_node *h = mc_nodes;
+
+ while (h->next != NULL)
+ h = h->next;
+ h->next = ret;
+ }
+ return ret;
+}
+
+mc_node_lang *
+mc_add_node_lang (mc_node *root, const mc_keyword *lang, rc_uint_type vid)
+{
+ mc_node_lang *ret, *h, *p;
+
+ if (! lang || ! root)
+ fatal (_("try to add a ill language."));
+ ret = res_alloc (sizeof (mc_node_lang));
+ memset (ret, 0, sizeof (mc_node_lang));
+ ret->lang = lang;
+ ret->vid = vid;
+ if ((h = root->sub) == NULL)
+ root->sub = ret;
+ else
+ {
+ p = NULL;
+ while (h != NULL)
+ {
+ if (h->lang->nval > lang->nval)
+ break;
+ if (h->lang->nval == lang->nval)
+ {
+ if (h->vid > vid)
+ break;
+ if (h->vid == vid)
+ fatal ("double defined message id %ld.\n", (long) vid);
+ }
+ h = (p = h)->next;
+ }
+ ret->next = h;
+ if (! p)
+ root->sub = ret;
+ else
+ p->next = ret;
+ }
+ return ret;
+}
+
+static char *
+convert_unicode_to_ACP (const unichar *usz)
+{
+ char *s;
+ rc_uint_type l;
+
+ if (! usz)
+ return NULL;
+ codepage_from_unicode (&l, usz, &s, mcset_codepage_out);
+ if (! s)
+ fatal ("unicode string not mappable to ASCII codepage 0x%lx.\n", (long) mcset_codepage_out);
+ return s;
+}
+
+static void
+write_dbg_define (FILE *fp, const unichar *sym_name, const unichar *typecast)
+{
+ char *sym;
+
+ if (!sym_name || sym_name[0] == 0)
+ return;
+ sym = convert_unicode_to_ACP (sym_name);
+ fprintf (fp, " {(");
+ if (typecast)
+ unicode_print (fp, typecast, unichar_len (typecast));
+ else
+ fprintf (fp, "DWORD");
+ fprintf (fp, ") %s, \"%s\" },\n", sym, sym);
+}
+
+static void
+write_header_define (FILE *fp, const unichar *sym_name, rc_uint_type vid, const unichar *typecast, mc_node_lang *nl)
+{
+ char *sym;
+ char *tdef = NULL;
+
+ if (!sym_name || sym_name[0] == 0)
+ {
+ if (nl != NULL)
+ {
+ if (mcset_out_values_are_decimal)
+ fprintf (fp, "//\n// MessageId: 0x%lu\n//\n", (unsigned long) vid);
+ else
+ fprintf (fp, "//\n// MessageId: 0x%lx\n//\n", (unsigned long) vid);
+ }
+ return;
+ }
+ sym = convert_unicode_to_ACP (sym_name);
+ if (typecast && typecast[0] != 0)
+ tdef = convert_unicode_to_ACP (typecast);
+ fprintf (fp, "//\n// MessageId: %s\n//\n", sym);
+ if (! mcset_out_values_are_decimal)
+ fprintf (fp, "#define %s %s%s%s 0x%lx\n\n", sym,
+ (tdef ? "(" : ""), (tdef ? tdef : ""), (tdef ? ")" : ""),
+ (unsigned long) vid);
+ else
+ fprintf (fp, "#define %s %s%s%s 0x%lu\n\n", sym,
+ (tdef ? "(" : ""), (tdef ? tdef : ""), (tdef ? ")" : ""),
+ (unsigned long) vid);
+}
+
+static int
+sort_mc_node_lang (const void *l, const void *r)
+{
+ const mc_node_lang *l1 = *((const mc_node_lang **)l);
+ const mc_node_lang *r1 = *((const mc_node_lang **)r);
+
+ if (l == r)
+ return 0;
+ if (l1->lang != r1->lang)
+ {
+ if (l1->lang->nval < r1->lang->nval)
+ return -1;
+ return 1;
+ }
+ if (l1->vid == r1->vid)
+ return 0;
+ if (l1->vid < r1->vid)
+ return -1;
+ return 1;
+}
+
+static int
+sort_keyword_by_nval (const void *l, const void *r)
+{
+ const mc_keyword *l1 = *((const mc_keyword **)l);
+ const mc_keyword *r1 = *((const mc_keyword **)r);
+ rc_uint_type len1, len2;
+ int e;
+
+ if (l == r)
+ return 0;
+ if (l1->nval != r1->nval)
+ {
+ if (l1->nval < r1->nval)
+ return -1;
+ return 1;
+ }
+ len1 = unichar_len (l1->usz);
+ len2 = unichar_len (r1->usz);
+ if (len1 <= len2)
+ e = memcmp (l1->usz, r1->usz, sizeof (unichar) * len1);
+ else
+ e = memcmp (l1->usz, r1->usz, sizeof (unichar) * len2);
+ if (e)
+ return e;
+ if (len1 < len2)
+ return -1;
+ else if (len1 > len2)
+ return 1;
+ return 0;
+}
+
+static void
+do_sorts (void)
+{
+ mc_node *h;
+ mc_node_lang *n;
+ const mc_keyword *k;
+ int i;
+
+ /* Sort message by their language and id ascending. */
+ mc_nodes_lang_count = 0;
+
+ h = mc_nodes;
+ while (h != NULL)
+ {
+ n = h->sub;
+ while (n != NULL)
+ {
+ mc_nodes_lang_count +=1;
+ n = n->next;
+ }
+ h = h->next;
+ }
+
+ if (mc_nodes_lang_count != 0)
+ {
+ h = mc_nodes;
+ i = 0;
+ mc_nodes_lang = xmalloc (sizeof (mc_node_lang *) * mc_nodes_lang_count);
+
+ while (h != NULL)
+ {
+ n = h->sub;
+ while (n != NULL)
+ {
+ mc_nodes_lang[i++] = n;
+ n = n->next;
+ }
+ h = h->next;
+ }
+ qsort (mc_nodes_lang, (size_t) mc_nodes_lang_count, sizeof (mc_node_lang *), sort_mc_node_lang);
+ }
+ /* Sort facility code definitions by there id ascending. */
+ i = 0;
+ while ((k = enum_facility (i)) != NULL)
+ ++i;
+ mc_facility_codes_count = i;
+ if (i != 0)
+ {
+ mc_facility_codes = xmalloc (sizeof (mc_keyword *) * i);
+ i = 0;
+ while ((k = enum_facility (i)) != NULL)
+ mc_facility_codes[i++] = (mc_keyword *) k;
+ qsort (mc_facility_codes, (size_t) mc_facility_codes_count, sizeof (mc_keyword *), sort_keyword_by_nval);
+ }
+
+ /* Sort severity code definitions by there id ascending. */
+ i = 0;
+ while ((k = enum_severity (i)) != NULL)
+ ++i;
+ mc_severity_codes_count = i;
+ if (i != 0)
+ {
+ mc_severity_codes = xmalloc (sizeof (mc_keyword *) * i);
+ i = 0;
+ while ((k = enum_severity (i)) != NULL)
+ mc_severity_codes[i++] = (mc_keyword *) k;
+ qsort (mc_severity_codes, (size_t) mc_severity_codes_count, sizeof (mc_keyword *), sort_keyword_by_nval);
+ }
+}
+
+static int
+mc_get_block_count (mc_node_lang **nl, int elems)
+{
+ rc_uint_type exid;
+ int i, ret;
+
+ if (! nl)
+ return 0;
+ i = 0;
+ ret = 0;
+ while (i < elems)
+ {
+ ret++;
+ exid = nl[i++]->vid;
+ while (i < elems && nl[i]->vid == exid + 1)
+ exid = nl[i++]->vid;
+ }
+ return ret;
+}
+
+static bfd *
+windmc_open_as_binary (const char *filename)
+{
+ bfd *abfd;
+
+ abfd = bfd_openw (filename, "binary");
+ if (! abfd)
+ fatal ("can't open `%s' for output", filename);
+
+ return abfd;
+}
+
+static void
+target_put_16 (void *p, rc_uint_type value)
+{
+ assert (!! p);
+
+ if (target_is_bigendian)
+ bfd_putb16 (value, p);
+ else
+ bfd_putl16 (value, p);
+}
+
+static void
+target_put_32 (void *p, rc_uint_type value)
+{
+ assert (!! p);
+
+ if (target_is_bigendian)
+ bfd_putb32 (value, p);
+ else
+ bfd_putl32 (value, p);
+}
+
+static struct bin_messagetable_item *
+mc_generate_bin_item (mc_node_lang *n, rc_uint_type *res_len)
+{
+ struct bin_messagetable_item *ret = NULL;
+ rc_uint_type len;
+
+ *res_len = 0;
+ if (mcset_bin_out_is_unicode == 1)
+ {
+ unichar *ht = n->message;
+ rc_uint_type txt_len;
+
+ txt_len = unichar_len (n->message);
+ if (mcset_automatic_null_termination && txt_len != 0)
+ {
+ while (txt_len > 0 && ht[txt_len - 1] > 0 && ht[txt_len - 1] < 0x20)
+ ht[--txt_len] = 0;
+ }
+ txt_len *= sizeof (unichar);
+ len = BIN_MESSAGETABLE_ITEM_SIZE + txt_len + sizeof (unichar);
+ ret = res_alloc ((len + 3) & ~3);
+ memset (ret, 0, (len + 3) & ~3);
+ target_put_16 (ret->length, (len + 3) & ~3);
+ target_put_16 (ret->flags, MESSAGE_RESOURCE_UNICODE);
+ txt_len = 0;
+ while (*ht != 0)
+ {
+ target_put_16 (ret->data + txt_len, *ht++);
+ txt_len += 2;
+ }
+ }
+ else
+ {
+ rc_uint_type txt_len, l;
+ char *cvt_txt;
+
+ codepage_from_unicode( &l, n->message, &cvt_txt, n->lang->lang_info.wincp);
+ if (! cvt_txt)
+ fatal ("Failed to convert message to language codepage.\n");
+ txt_len = strlen (cvt_txt);
+ if (mcset_automatic_null_termination && txt_len > 0)
+ {
+ while (txt_len > 0 && cvt_txt[txt_len - 1] > 0 && cvt_txt[txt_len - 1] < 0x20)
+ cvt_txt[--txt_len] = 0;
+ }
+ len = BIN_MESSAGETABLE_ITEM_SIZE + txt_len + 1;
+ ret = res_alloc ((len + 3) & ~3);
+ memset (ret, 0, (len + 3) & ~3);
+ target_put_16 (ret->length, (len + 3) & ~3);
+ target_put_16 (ret->flags, 0);
+ strcpy ((char *) ret->data, cvt_txt);
+ }
+ *res_len = (len + 3) & ~3;
+ return ret;
+}
+
+static void
+mc_write_blocks (struct bin_messagetable *mtbl, mc_node_lang **nl, mc_msg_item *ml, int elems)
+{
+ int i, idx = 0;
+ rc_uint_type exid;
+
+ if (! nl)
+ return;
+ i = 0;
+ while (i < elems)
+ {
+ target_put_32 (mtbl->items[idx].lowid, nl[i]->vid);
+ target_put_32 (mtbl->items[idx].highid, nl[i]->vid);
+ target_put_32 (mtbl->items[idx].offset, ml[i].res_off);
+ exid = nl[i++]->vid;
+ while (i < elems && nl[i]->vid == exid + 1)
+ {
+ target_put_32 (mtbl->items[idx].highid, nl[i]->vid);
+ exid = nl[i++]->vid;
+ }
+ ++idx;
+ }
+}
+
+static void
+set_windmc_bfd_content (const void *data, rc_uint_type off, rc_uint_type length)
+{
+ if (! bfd_set_section_contents (mc_bfd.abfd, mc_bfd.sec, data, off, length))
+ bfd_fatal ("bfd_set_section_contents");
+}
+
+static void
+windmc_write_bin (const char *filename, mc_node_lang **nl, int elems)
+{
+ unsigned long sec_length = 1;
+ int block_count, i;
+ mc_msg_item *mi;
+ struct bin_messagetable *mtbl;
+ rc_uint_type dta_off, dta_start;
+
+ if (elems <= 0)
+ return;
+ mc_bfd.abfd = windmc_open_as_binary (filename);
+ mc_bfd.sec = bfd_make_section (mc_bfd.abfd, ".data");
+ if (mc_bfd.sec == NULL)
+ bfd_fatal ("bfd_make_section");
+ if (! bfd_set_section_flags (mc_bfd.abfd, mc_bfd.sec,
+ (SEC_HAS_CONTENTS | SEC_ALLOC
+ | SEC_LOAD | SEC_DATA)))
+ bfd_fatal ("bfd_set_section_flags");
+ /* Requiring this is probably a bug in BFD. */
+ mc_bfd.sec->output_section = mc_bfd.sec;
+
+ block_count = mc_get_block_count (nl, elems);
+
+ dta_off = (rc_uint_type) ((BIN_MESSAGETABLE_BLOCK_SIZE * block_count) + BIN_MESSAGETABLE_SIZE - 4);
+ dta_start = dta_off = (dta_off + 3) & ~3;
+ mi = xmalloc (sizeof (mc_msg_item) * elems);
+ mtbl = xmalloc (dta_start);
+
+ /* Clear header region. */
+ memset (mtbl, 0, dta_start);
+ target_put_32 (mtbl->cblocks, block_count);
+ /* Prepare items section for output. */
+ for (i = 0; i < elems; i++)
+ {
+ mi[i].res_off = dta_off;
+ mi[i].res = mc_generate_bin_item (nl[i], &mi[i].res_len);
+ dta_off += mi[i].res_len;
+ }
+ sec_length = (dta_off + 3) & ~3;
+ if (! bfd_set_section_size (mc_bfd.abfd, mc_bfd.sec, sec_length))
+ bfd_fatal ("bfd_set_section_size");
+ /* Make sure we write the complete block. */
+ set_windmc_bfd_content ("\0", sec_length - 1, 1);
+
+ /* Write block information. */
+ mc_write_blocks (mtbl, nl, mi, elems);
+
+ set_windmc_bfd_content (mtbl, 0, dta_start);
+
+ /* Write items. */
+ for (i = 0; i < elems; i++)
+ set_windmc_bfd_content (mi[i].res, mi[i].res_off, mi[i].res_len);
+
+ free (mtbl);
+ free (mi);
+ bfd_close (mc_bfd.abfd);
+ mc_bfd.abfd = NULL;
+ mc_bfd.sec = NULL;
+}
+
+static void
+write_bin (void)
+{
+ mc_node_lang *n = NULL;
+ int i, c;
+
+ if (! mc_nodes_lang_count)
+ return;
+
+ i = 0;
+ while (i < mc_nodes_lang_count)
+ {
+ char *nd;
+ char *filename;
+
+ if (n && n->lang == mc_nodes_lang[i]->lang)
+ {
+ i++;
+ continue;
+ }
+ n = mc_nodes_lang[i];
+ c = i + 1;
+ while (c < mc_nodes_lang_count && n->lang == mc_nodes_lang[c]->lang)
+ c++;
+ nd = convert_unicode_to_ACP (n->lang->sval);
+
+ /* Prepare filename for binary output. */
+ filename = xmalloc (strlen (nd) + 4 + 1 + strlen (mcset_mc_basename) + 1 + strlen (mcset_rc_dir));
+ strcpy (filename, mcset_rc_dir);
+ if (mcset_prefix_bin)
+ sprintf (filename + strlen (filename), "%s_", mcset_mc_basename);
+ strcat (filename, nd);
+ strcat (filename, ".bin");
+
+ /* Write message file. */
+ windmc_write_bin (filename, &mc_nodes_lang[i], (c - i));
+
+ free (filename);
+ i = c;
+ }
+}
+
+static void
+write_rc (FILE *fp)
+{
+ mc_node_lang *n;
+ int i, l;
+
+ fprintf (fp,
+ "/* Do not edit this file manually.\n"
+ " This file is autogenerated by windmc. */\n\n");
+ if (! mc_nodes_lang_count)
+ return;
+ n = NULL;
+ i = 0;
+ for (l = 0; l < mc_nodes_lang_count; l++)
+ {
+ if (n && n->lang == mc_nodes_lang[l]->lang)
+ continue;
+ ++i;
+ n = mc_nodes_lang[l];
+ fprintf (fp, "\n// Country: %s\n// Language: %s\n#pragma code_page(%u)\n",
+ n->lang->lang_info.country, n->lang->lang_info.name,
+ (unsigned) n->lang->lang_info.wincp);
+ fprintf (fp, "LANGUAGE 0x%lx, 0x%lx\n", (long) (n->lang->nval & 0x3ff),
+ (long) ((n->lang->nval & 0xffff) >> 10));
+ fprintf (fp, "1 MESSAGETABLE \"");
+ if (mcset_prefix_bin)
+ fprintf (fp, "%s_", mcset_mc_basename);
+ unicode_print (fp, n->lang->sval, unichar_len (n->lang->sval));
+ fprintf (fp, ".bin\"\n");
+ }
+}
+
+static void
+write_dbg (FILE *fp)
+{
+ mc_node *h;
+
+ fprintf (fp,
+ "/* Do not edit this file manually.\n"
+ " This file is autogenerated by windmc.\n\n"
+ " This file maps each message ID value in to a text string that contains\n"
+ " the symbolic name used for it. */\n\n");
+
+ fprintf (fp,
+ "struct %sSymbolicName\n"
+ "{\n ", mcset_mc_basename);
+ if (mcset_msg_id_typedef)
+ unicode_print (fp, mcset_msg_id_typedef, unichar_len (mcset_msg_id_typedef));
+ else
+ fprintf (fp, "DWORD");
+ fprintf (fp,
+ " MessageId;\n"
+ " char *SymbolicName;\n"
+ "} %sSymbolicNames[] =\n"
+ "{\n", mcset_mc_basename);
+ h = mc_nodes;
+ while (h != NULL)
+ {
+ if (h->symbol)
+ write_dbg_define (fp, h->symbol, mcset_msg_id_typedef);
+ h = h->next;
+ }
+ fprintf (fp, " { (");
+ if (mcset_msg_id_typedef)
+ unicode_print (fp, mcset_msg_id_typedef, unichar_len (mcset_msg_id_typedef));
+ else
+ fprintf (fp, "DWORD");
+ fprintf (fp,
+ ") 0xffffffff, NULL }\n"
+ "};\n");
+}
+
+static void
+write_header (FILE *fp)
+{
+ char *s;
+ int i;
+ const mc_keyword *key;
+ mc_node *h;
+
+ fprintf (fp,
+ "/* Do not edit this file manually.\n"
+ " This file is autogenerated by windmc. */\n\n"
+ "//\n// The values are 32 bit layed out as follows:\n//\n"
+ "// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1\n"
+ "// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0\n"
+ "// +---+-+-+-----------------------+-------------------------------+\n"
+ "// |Sev|C|R| Facility | Code |\n"
+ "// +---+-+-+-----------------------+-------------------------------+\n//\n"
+ "// where\n//\n"
+ "// C - is the Customer code flag\n//\n"
+ "// R - is a reserved bit\n//\n"
+ "// Code - is the facility's status code\n//\n");
+
+ h = mc_nodes;
+
+ fprintf (fp, "// Sev - is the severity code\n//\n");
+ if (mc_severity_codes_count != 0)
+ {
+ for (i = 0; i < mc_severity_codes_count; i++)
+ {
+ key = mc_severity_codes[i];
+ fprintf (fp, "// %s - %02lx\n", convert_unicode_to_ACP (key->usz),
+ (unsigned long) key->nval);
+ if (key->sval && key->sval[0] != 0)
+ {
+ if (! mcset_out_values_are_decimal)
+ fprintf (fp, "#define %s 0x%lx\n", convert_unicode_to_ACP (key->sval),
+ (unsigned long) key->nval);
+ else
+ fprintf (fp, "#define %s 0x%lu\n", convert_unicode_to_ACP (key->sval),
+ (unsigned long) key->nval);
+ }
+ }
+ fprintf (fp, "//\n");
+ }
+ fprintf (fp, "// Facility - is the facility code\n//\n");
+ if (mc_facility_codes_count != 0)
+ {
+ for (i = 0; i < mc_facility_codes_count; i++)
+ {
+ key = mc_facility_codes[i];
+ fprintf (fp, "// %s - %04lx\n", convert_unicode_to_ACP (key->usz),
+ (unsigned long) key->nval);
+ if (key->sval && key->sval[0] != 0)
+ {
+ if (! mcset_out_values_are_decimal)
+ fprintf (fp, "#define %s 0x%lx\n", convert_unicode_to_ACP (key->sval),
+ (unsigned long) key->nval);
+ else
+ fprintf (fp, "#define %s 0x%lu\n", convert_unicode_to_ACP (key->sval),
+ (unsigned long) key->nval);
+ }
+ }
+ fprintf (fp, "//\n");
+ }
+ fprintf (fp, "\n");
+ while (h != NULL)
+ {
+ if (h->user_text)
+ {
+ s = convert_unicode_to_ACP (h->user_text);
+ if (s)
+ fprintf (fp, "%s", s);
+ }
+ if (h->symbol)
+ write_header_define (fp, h->symbol, h->vid, mcset_msg_id_typedef, h->sub);
+ h = h->next;
+ }
+}
+
+static const char *
+mc_unify_path (const char *path)
+{
+ char *end;
+ char *hsz;
+
+ if (! path || *path == 0)
+ return "./";
+ hsz = xmalloc (strlen (path) + 2);
+ strcpy (hsz, path);
+ end = hsz + strlen (hsz);
+ if (hsz[-1] != '/' && hsz[-1] != '\\')
+ strcpy (end, "/");
+ while ((end = strchr (hsz, '\\')) != NULL)
+ *end = '/';
+ return hsz;
+}
+
+int main (int, char **);
+
+int
+main (int argc, char **argv)
+{
+ FILE *h_fp;
+ int c;
+ char *target, *input_filename;
+ int verbose;
+
+#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);
+
+ expandargv (&argc, &argv);
+
+ bfd_init ();
+ set_default_bfd_target ();
+
+ target = NULL;
+ verbose = 0;
+ input_filename = NULL;
+
+ res_init ();
+
+ while ((c = getopt_long (argc, argv, "C:F:O:h:e:m:r:x:aAbcdHunoUvV", long_options,
+ (int *) 0)) != EOF)
+ {
+ switch (c)
+ {
+ case 'b':
+ mcset_prefix_bin = 1;
+ break;
+ case 'e':
+ {
+ mcset_header_ext = optarg;
+ if (mcset_header_ext[0] != '.' && mcset_header_ext[0] != 0)
+ {
+ char *hsz = xmalloc (strlen (mcset_header_ext) + 2);
+
+ sprintf (hsz, ".%s", mcset_header_ext);
+ mcset_header_ext = hsz;
+ }
+ }
+ break;
+ case 'h':
+ mcset_header_dir = mc_unify_path (optarg);
+ break;
+ case 'r':
+ mcset_rc_dir = mc_unify_path (optarg);
+ break;
+ case 'a':
+ mcset_text_in_is_unicode = 0;
+ break;
+ case 'x':
+ if (*optarg != 0)
+ mcset_dbg_dir = mc_unify_path (optarg);
+ break;
+ case 'A':
+ mcset_bin_out_is_unicode = 0;
+ break;
+ case 'd':
+ mcset_out_values_are_decimal = 1;
+ break;
+ case 'u':
+ mcset_text_in_is_unicode = 1;
+ break;
+ case 'U':
+ mcset_bin_out_is_unicode = 1;
+ break;
+ case 'c':
+ mcset_custom_bit = 1;
+ break;
+ case 'n':
+ mcset_automatic_null_termination = 1;
+ break;
+ case 'o':
+ mcset_use_hresult = 1;
+ fatal ("option -o is not implemented until yet.\n");
+ break;
+ case 'F':
+ target = optarg;
+ break;
+ case 'v':
+ verbose ++;
+ break;
+ case 'm':
+ mcset_max_message_length = strtol (optarg, (char **) NULL, 10);
+ break;
+ case 'C':
+ mcset_codepage_in = strtol (optarg, (char **) NULL, 10);
+ break;
+ case 'O':
+ mcset_codepage_out = strtol (optarg, (char **) NULL, 10);
+ break;
+ case '?':
+ case 'H':
+ usage (stdout, 0);
+ break;
+ case 'V':
+ print_version ("windmc");
+ break;
+
+ default:
+ usage (stderr, 1);
+ break;
+ }
+ }
+ if (input_filename == NULL && optind < argc)
+ {
+ input_filename = argv[optind];
+ ++optind;
+ }
+
+ set_endianess (NULL, target);
+
+ if (input_filename == NULL)
+ {
+ fprintf (stderr, "Error: No input file was specified.\n");
+ usage (stderr, 1);
+ }
+ mc_set_inputfile (input_filename);
+
+ if (!probe_codepage (&mcset_codepage_in, &mcset_text_in_is_unicode, "codepage_in", 0))
+ usage (stderr, 1);
+ if (mcset_codepage_out == 0)
+ mcset_codepage_out = 1252;
+ if (! unicode_is_valid_codepage (mcset_codepage_out))
+ fatal ("Code page 0x%x is unknown.", (unsigned int) mcset_codepage_out);
+ if (mcset_codepage_out == CP_UTF16)
+ fatal ("UTF16 is no valid text output code page.");
+ if (verbose)
+ {
+ fprintf (stderr, "// Default target is %s and it is %s endian.\n",
+ def_target_arch, (target_is_bigendian ? "big" : "little"));
+ fprintf (stderr, "// Input codepage: 0x%x\n", (unsigned int) mcset_codepage_in);
+ fprintf (stderr, "// Output codepage: 0x%x\n", (unsigned int) mcset_codepage_out);
+ }
+
+ if (argc != optind)
+ usage (stderr, 1);
+
+ /* Initialize mcset_mc_basename. */
+ {
+ const char *bn, *bn2;
+ char *hsz;
+
+ bn = strrchr (input_filename, '/');
+ bn2 = strrchr (input_filename, '\\');
+ if (! bn)
+ bn = bn2;
+ if (bn && bn2 && bn < bn2)
+ bn = bn2;
+ if (! bn)
+ bn = input_filename;
+ else
+ bn++;
+ mcset_mc_basename = hsz = xstrdup (bn);
+
+ /* Cut of right-hand extension. */
+ if ((hsz = strrchr (hsz, '.')) != NULL)
+ *hsz = 0;
+ }
+
+ /* Load the input file and do code page transformations to UTF16. */
+ {
+ unichar *u;
+ rc_uint_type ul;
+ char *buff;
+ long flen;
+ FILE *fp = fopen (input_filename, "rb");
+
+ if (!fp)
+ fatal (_("unable to open file ,%s' for input.\n"), input_filename);
+
+ fseek (fp, 0, SEEK_END);
+ flen = ftell (fp);
+ fseek (fp, 0, SEEK_SET);
+ buff = malloc (flen + 3);
+ memset (buff, 0, flen + 3);
+ fread (buff, 1, flen, fp);
+ fclose (fp);
+ if (mcset_text_in_is_unicode != 1)
+ {
+ unicode_from_codepage (&ul, &u, buff, mcset_codepage_in);
+ if (! u)
+ fatal ("Failed to convert input to UFT16\n");
+ mc_set_content (u);
+ }
+ else
+ {
+ if ((flen & 1) != 0)
+ fatal (_("input file does not seems to be UFT16.\n"));
+ mc_set_content ((unichar *) buff);
+ }
+ free (buff);
+ }
+
+ while (yyparse ())
+ ;
+
+ do_sorts ();
+
+ h_fp = mc_create_path_text_file (mcset_header_dir, mcset_header_ext);
+ write_header (h_fp);
+ fclose (h_fp);
+
+ h_fp = mc_create_path_text_file (mcset_rc_dir, ".rc");
+ write_rc (h_fp);
+ fclose (h_fp);
+
+ if (mcset_dbg_dir != NULL)
+ {
+ h_fp = mc_create_path_text_file (mcset_dbg_dir, ".dbg");
+ write_dbg (h_fp);
+ fclose (h_fp);
+ }
+ write_bin ();
+
+ if (mc_nodes_lang)
+ free (mc_nodes_lang);
+ if (mc_severity_codes)
+ free (mc_severity_codes);
+ if (mc_facility_codes)
+ free (mc_facility_codes);
+
+ xexit (0);
+ return 0;
+}
diff --git a/binutils/windmc.h b/binutils/windmc.h
new file mode 100644
index 000000000000..08a770626093
--- /dev/null
+++ b/binutils/windmc.h
@@ -0,0 +1,99 @@
+/* windmc.h -- header file for windmc program.
+ Copyright 2007
+ Free Software Foundation, Inc.
+ Written by Kai Tietz, Onevision.
+
+ 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 "ansidecl.h"
+
+/* This is the header file for the windmc program. It defines
+ structures and declares functions used within the program. */
+
+#include "winduni.h"
+
+#ifndef WINDMC_HXX
+#define WINDMC_HXX
+
+/* Global flag variables (set by windmc.c file. */
+extern int mcset_custom_bit;
+extern int mcset_out_values_are_decimal;
+extern rc_uint_type mcset_max_message_length;
+extern unichar *mcset_msg_id_typedef;
+
+/* Lexer keyword definition and internal memory structures. */
+
+typedef struct mc_keyword
+{
+ struct mc_keyword *next;
+ const char *group_name;
+ size_t len;
+ unichar *usz;
+ int rid;
+ rc_uint_type nval;
+ unichar *sval;
+ wind_language_t lang_info;
+} mc_keyword;
+
+typedef struct mc_node_lang
+{
+ struct mc_node_lang *next;
+ rc_uint_type vid;
+ const mc_keyword *lang;
+ unichar *message;
+} mc_node_lang;
+
+typedef struct mc_node
+{
+ struct mc_node *next;
+ unichar *user_text;
+ const mc_keyword *facility;
+ const mc_keyword *severity;
+ unichar *symbol;
+ rc_uint_type id;
+ rc_uint_type vid;
+ mc_node_lang *sub;
+} mc_node;
+
+extern mc_node *mc_nodes;
+
+void mc_add_keyword (unichar *, int, const char *, rc_uint_type, unichar *);
+const mc_keyword *enum_facility (int);
+const mc_keyword *enum_severity (int);
+
+mc_node_lang *mc_add_node_lang (mc_node *, const mc_keyword *, rc_uint_type);
+mc_node *mc_add_node (void);
+
+/* Standard yacc/flex stuff. */
+int yyerror (const char *, ...);
+int yylex (void);
+int yyparse (void);
+
+/* mclex.c */
+void mc_set_inputfile (const char *);
+void mc_set_content (const unichar *);
+
+/* Lexer control variables. Used by mcparser.y file. */
+extern bfd_boolean mclex_want_nl;
+extern bfd_boolean mclex_want_line;
+extern bfd_boolean mclex_want_filename;
+
+void mc_fatal (const char *, ...);
+void mc_warn (const char *, ...);
+
+#endif
diff --git a/binutils/windres.c b/binutils/windres.c
index 50af427d0f3c..da8e33f39ad8 100644
--- a/binutils/windres.c
+++ b/binutils/windres.c
@@ -1,7 +1,8 @@
/* windres.c -- a program to manipulate Windows resources
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
+ Rewritten by Kai Tietz, Onevision.
This file is part of GNU Binutils.
@@ -34,10 +35,7 @@
* The res2coff program, written by Pedro A. Aranda <paag@tid.es>. */
-#include "config.h"
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
+#include "sysdep.h"
#include <assert.h>
#include <time.h>
#include "bfd.h"
@@ -48,10 +46,20 @@
#include "obstack.h"
#include "windres.h"
+/* Defined in bfd/binary.c. Used to set architecture and machine of input
+ binary files. */
+extern enum bfd_architecture bfd_external_binary_architecture;
+extern unsigned long bfd_external_machine;
+
/* Used by resrc.c at least. */
int verbose = 0;
+int target_is_bigendian = 0;
+const char *def_target_arch;
+
+static void set_endianess (bfd *, const char *);
+
/* An enumeration of format types. */
enum res_format
@@ -109,15 +117,23 @@ static struct include_dir *include_dirs;
/* Static functions. */
static void res_init (void);
-static int extended_menuitems (const struct menuitem *);
+static int extended_menuitems (const rc_menuitem *);
static enum res_format format_from_name (const char *, int);
static enum res_format format_from_filename (const char *, int);
static void usage (FILE *, int);
static int cmp_res_entry (const void *, const void *);
-static struct res_directory *sort_resources (struct res_directory *);
+static rc_res_directory *sort_resources (rc_res_directory *);
static void reswr_init (void);
static const char * quot (const char *);
+static rc_uint_type target_get_8 (const void *, rc_uint_type);
+static void target_put_8 (void *, rc_uint_type);
+static rc_uint_type target_get_16 (const void *, rc_uint_type);
+static void target_put_16 (void *, rc_uint_type);
+static rc_uint_type target_get_32 (const void *, rc_uint_type);
+static void target_put_32 (void *, rc_uint_type);
+
+
/* When we are building a resource tree, we allocate everything onto
an obstack, so that we can free it all at once if we want. */
@@ -139,9 +155,9 @@ res_init (void)
/* Allocate space on the resource building obstack. */
void *
-res_alloc (size_t bytes)
+res_alloc (rc_uint_type bytes)
{
- return (void *) obstack_alloc (&res_obstack, bytes);
+ return (void *) obstack_alloc (&res_obstack, (size_t) bytes);
}
/* We also use an obstack to save memory used while writing out a set
@@ -160,9 +176,9 @@ reswr_init (void)
/* Allocate space on the resource writing obstack. */
void *
-reswr_alloc (size_t bytes)
+reswr_alloc (rc_uint_type bytes)
{
- return (void *) obstack_alloc (&reswr_obstack, bytes);
+ return (void *) obstack_alloc (&reswr_obstack, (size_t) bytes);
}
/* Open a file using the include directory search list. */
@@ -212,7 +228,7 @@ open_file_search (const char *filename, const char *mode, const char *errmsg,
section. */
int
-res_id_cmp (struct res_id a, struct res_id b)
+res_id_cmp (rc_res_id a, rc_res_id b)
{
if (! a.named)
{
@@ -260,24 +276,23 @@ res_id_cmp (struct res_id a, struct res_id b)
/* Print a resource ID. */
void
-res_id_print (FILE *stream, struct res_id id, int quote)
+res_id_print (FILE *stream, rc_res_id id, int quote)
{
if (! id.named)
- fprintf (stream, "%lu", id.u.id);
+ fprintf (stream, "%u", (int) id.u.id);
else
{
if (quote)
- putc ('"', stream);
+ unicode_print_quoted (stream, id.u.n.name, id.u.n.length);
+ else
unicode_print (stream, id.u.n.name, id.u.n.length);
- if (quote)
- putc ('"', stream);
}
}
/* Print a list of resource ID's. */
void
-res_ids_print (FILE *stream, int cids, const struct res_id *ids)
+res_ids_print (FILE *stream, int cids, const rc_res_id *ids)
{
int i;
@@ -292,43 +307,52 @@ res_ids_print (FILE *stream, int cids, const struct res_id *ids)
/* Convert an ASCII string to a resource ID. */
void
-res_string_to_id (struct res_id *res_id, const char *string)
+res_string_to_id (rc_res_id *res_id, const char *string)
{
res_id->named = 1;
unicode_from_ascii (&res_id->u.n.length, &res_id->u.n.name, string);
}
+/* Convert an unicode string to a resource ID. */
+void
+res_unistring_to_id (rc_res_id *res_id, const unichar *u)
+{
+ res_id->named = 1;
+ res_id->u.n.length = unichar_len (u);
+ res_id->u.n.name = unichar_dup_uppercase (u);
+}
+
/* Define a resource. The arguments are the resource tree, RESOURCES,
and the location at which to put it in the tree, CIDS and IDS.
- This returns a newly allocated res_resource structure, which the
+ This returns a newly allocated rc_res_resource structure, which the
caller is expected to initialize. If DUPOK is non-zero, then if a
resource with this ID exists, it is returned. Otherwise, a warning
is issued, and a new resource is created replacing the existing
one. */
-struct res_resource *
-define_resource (struct res_directory **resources, int cids,
- const struct res_id *ids, int dupok)
+rc_res_resource *
+define_resource (rc_res_directory **resources, int cids,
+ const rc_res_id *ids, int dupok)
{
- struct res_entry *re = NULL;
+ rc_res_entry *re = NULL;
int i;
assert (cids > 0);
for (i = 0; i < cids; i++)
{
- struct res_entry **pp;
+ rc_res_entry **pp;
if (*resources == NULL)
{
- static unsigned long timeval;
+ static unsigned int timeval;
/* Use the same timestamp for every resource created in a
single run. */
if (timeval == 0)
timeval = time (NULL);
- *resources = ((struct res_directory *)
- res_alloc (sizeof **resources));
+ *resources = ((rc_res_directory *)
+ res_alloc (sizeof (rc_res_directory)));
(*resources)->characteristics = 0;
(*resources)->time = timeval;
(*resources)->major = 0;
@@ -344,7 +368,7 @@ define_resource (struct res_directory **resources, int cids,
re = *pp;
else
{
- re = (struct res_entry *) res_alloc (sizeof *re);
+ re = (rc_res_entry *) res_alloc (sizeof (rc_res_entry));
re->next = NULL;
re->id = ids[i];
if ((i + 1) < cids)
@@ -393,9 +417,9 @@ define_resource (struct res_directory **resources, int cids,
fprintf (stderr, _(": duplicate value\n"));
}
- re->u.res = ((struct res_resource *)
- res_alloc (sizeof (struct res_resource)));
- memset (re->u.res, 0, sizeof (struct res_resource));
+ re->u.res = ((rc_res_resource *)
+ res_alloc (sizeof (rc_res_resource)));
+ memset (re->u.res, 0, sizeof (rc_res_resource));
re->u.res->type = RES_TYPE_UNINITIALIZED;
return re->u.res;
@@ -404,11 +428,11 @@ define_resource (struct res_directory **resources, int cids,
/* Define a standard resource. This is a version of define_resource
that just takes type, name, and language arguments. */
-struct res_resource *
-define_standard_resource (struct res_directory **resources, int type,
- struct res_id name, int language, int dupok)
+rc_res_resource *
+define_standard_resource (rc_res_directory **resources, int type,
+ rc_res_id name, rc_uint_type language, int dupok)
{
- struct res_id a[3];
+ rc_res_id a[3];
a[0].named = 0;
a[0].u.id = type;
@@ -423,21 +447,21 @@ define_standard_resource (struct res_directory **resources, int type,
static int
cmp_res_entry (const void *p1, const void *p2)
{
- const struct res_entry **re1, **re2;
+ const rc_res_entry **re1, **re2;
- re1 = (const struct res_entry **) p1;
- re2 = (const struct res_entry **) p2;
+ re1 = (const rc_res_entry **) p1;
+ re2 = (const rc_res_entry **) p2;
return res_id_cmp ((*re1)->id, (*re2)->id);
}
/* Sort the resources. */
-static struct res_directory *
-sort_resources (struct res_directory *resdir)
+static rc_res_directory *
+sort_resources (rc_res_directory *resdir)
{
int c, i;
- struct res_entry *re;
- struct res_entry **a;
+ rc_res_entry *re;
+ rc_res_entry **a;
if (resdir->entries == NULL)
return resdir;
@@ -448,12 +472,12 @@ sort_resources (struct res_directory *resdir)
/* This is a recursive routine, so using xmalloc is probably better
than alloca. */
- a = (struct res_entry **) xmalloc (c * sizeof (struct res_entry *));
+ a = (rc_res_entry **) xmalloc (c * sizeof (rc_res_entry *));
for (i = 0, re = resdir->entries; re != NULL; re = re->next, i++)
a[i] = re;
- qsort (a, c, sizeof (struct res_entry *), cmp_res_entry);
+ qsort (a, c, sizeof (rc_res_entry *), cmp_res_entry);
resdir->entries = a[0];
for (i = 0; i < c - 1; i++)
@@ -475,9 +499,9 @@ sort_resources (struct res_directory *resdir)
DIALOGEX. */
int
-extended_dialog (const struct dialog *dialog)
+extended_dialog (const rc_dialog *dialog)
{
- const struct dialog_control *c;
+ const rc_dialog_control *c;
if (dialog->ex != NULL)
return 1;
@@ -492,15 +516,15 @@ extended_dialog (const struct dialog *dialog)
/* Return whether MENUITEMS are a MENU or a MENUEX. */
int
-extended_menu (const struct menu *menu)
+extended_menu (const rc_menu *menu)
{
return extended_menuitems (menu->items);
}
static int
-extended_menuitems (const struct menuitem *menuitems)
+extended_menuitems (const rc_menuitem *menuitems)
{
- const struct menuitem *mi;
+ const rc_menuitem *mi;
for (mi = menuitems; mi != NULL; mi = mi->next)
{
@@ -559,7 +583,7 @@ format_from_filename (const char *filename, int input)
{
const char *ext;
FILE *e;
- unsigned char b1, b2, b3, b4, b5;
+ bfd_byte b1, b2, b3, b4, b5;
int magic;
/* If we have an extension, see if we recognize it as implying a
@@ -649,6 +673,7 @@ usage (FILE *stream, int status)
-D --define <sym>[=<val>] Define SYM when preprocessing rc file\n\
-U --undefine <sym> Undefine SYM when preprocessing rc file\n\
-v --verbose Verbose - tells you what it's doing\n\
+ -c --codepage=<codepage> Specify default codepage\n\
-l --language=<val> Set language when reading rc file\n\
--use-temp-file Use a temporary file instead of popen to read\n\
the preprocessor output\n\
@@ -669,7 +694,7 @@ No input-file is stdin, default rc. No output-file is stdout, default rc.\n"));
list_supported_targets (program_name, stream);
- if (status == 0)
+ if (REPORT_BUGS_TO[0] && status == 0)
fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
exit (status);
@@ -686,7 +711,7 @@ quot (const char *string)
const char *src;
char *dest;
- if ((buflen < slen * 2 + 2) || !buf)
+ if ((buflen < slen * 2 + 2) || ! buf)
{
buflen = slen * 2 + 2;
if (buf)
@@ -725,6 +750,7 @@ static const struct option long_options[] =
{"define", required_argument, 0, 'D'},
{"undefine", required_argument, 0, 'U'},
{"verbose", no_argument, 0, 'v'},
+ {"codepage", required_argument, 0, 'c'},
{"language", required_argument, 0, 'l'},
{"use-temp-file", no_argument, 0, OPTION_USE_TEMP_FILE},
{"no-use-temp-file", no_argument, 0, OPTION_NO_USE_TEMP_FILE},
@@ -753,7 +779,7 @@ main (int argc, char **argv)
char *preprocargs;
const char *quotedarg;
int language;
- struct res_directory *resources;
+ rc_res_directory *resources;
int use_temp_file;
#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
@@ -785,11 +811,25 @@ main (int argc, char **argv)
language = 0x409; /* LANG_ENGLISH, SUBLANG_ENGLISH_US. */
use_temp_file = 0;
- while ((c = getopt_long (argc, argv, "f:i:l:o:I:J:O:F:D:U:rhHvV", long_options,
+ while ((c = getopt_long (argc, argv, "c:f:i:l:o:I:J:O:F:D:U:rhHvV", long_options,
(int *) 0)) != EOF)
{
switch (c)
{
+ case 'c':
+ {
+ rc_uint_type ncp;
+
+ if (optarg[0] == '0' && (optarg[1] == 'x' || optarg[1] == 'X'))
+ ncp = (rc_uint_type) strtol (optarg + 2, NULL, 16);
+ else
+ ncp = (rc_uint_type) strtol (optarg, NULL, 10);
+ if (ncp == CP_UTF16 || ! unicode_is_valid_codepage (ncp))
+ fatal (_("invalid codepage specified.\n"));
+ wind_default_codepage = wind_current_codepage = ncp;
+ }
+ break;
+
case 'i':
input_filename = optarg;
break;
@@ -863,7 +903,8 @@ main (int argc, char **argv)
input_format_tmp = format_from_name (optarg, 0);
if (input_format_tmp != RES_FORMAT_UNKNOWN)
{
- fprintf (stderr, _("Option -I is deprecated for setting the input format, please use -J instead.\n"));
+ fprintf (stderr,
+ _("Option -I is deprecated for setting the input format, please use -J instead.\n"));
input_format = input_format_tmp;
break;
}
@@ -963,6 +1004,8 @@ main (int argc, char **argv)
output_format = format_from_filename (output_filename, 0);
}
+ set_endianess (NULL, target);
+
/* Read the input file. */
switch (input_format)
{
@@ -1008,3 +1051,339 @@ main (int argc, char **argv)
xexit (0);
return 0;
}
+
+static void set_endianess (bfd *abfd, const char *target)
+{
+ const bfd_target *target_vec;
+
+ def_target_arch = NULL;
+ target_vec = bfd_find_target (target, abfd);
+ if (! target_vec)
+ fatal ("Can't detect target endianess and architecture.");
+ target_is_bigendian = ((target_vec->byteorder == BFD_ENDIAN_BIG) ? 1 : 0);
+ {
+ const char *tname = target_vec->name;
+ const char **arch = bfd_arch_list();
+ if (arch && tname)
+ {
+ if (strchr (tname, '-') != NULL)
+ tname = strchr (tname, '-') + 1;
+ while (*arch != NULL)
+ {
+ const char *in_a = strstr (*arch, tname);
+ char end_ch = (in_a ? in_a[strlen(tname)] : 0);
+ if (in_a && (in_a == *arch || in_a[-1] == ':')
+ && end_ch == 0)
+ {
+ def_target_arch = *arch;
+ break;
+ }
+ arch++;
+ }
+ }
+ if (! def_target_arch)
+ fatal ("Can't detect architecture.");
+ }
+}
+
+bfd *
+windres_open_as_binary (const char *filename, int rdmode)
+{
+ bfd *abfd;
+
+ abfd = (rdmode ? bfd_openr (filename, "binary") : bfd_openw (filename, "binary"));
+ if (! abfd)
+ fatal ("can't open `%s' for %s", filename, (rdmode ? "input" : "output"));
+
+ if (rdmode && ! bfd_check_format (abfd, bfd_object))
+ fatal ("can't open `%s' for input.", filename);
+
+ return abfd;
+}
+
+void
+set_windres_bfd_endianess (windres_bfd *wrbfd, int is_bigendian)
+{
+ assert (!! wrbfd);
+ switch (WR_KIND(wrbfd))
+ {
+ case WR_KIND_BFD_BIN_L:
+ if (is_bigendian)
+ WR_KIND(wrbfd) = WR_KIND_BFD_BIN_B;
+ break;
+ case WR_KIND_BFD_BIN_B:
+ if (! is_bigendian)
+ WR_KIND(wrbfd) = WR_KIND_BFD_BIN_L;
+ break;
+ default:
+ /* only binary bfd can be overriden. */
+ abort ();
+ }
+}
+
+void
+set_windres_bfd (windres_bfd *wrbfd, bfd *abfd, asection *sec, rc_uint_type kind)
+{
+ assert (!! wrbfd);
+ switch (kind)
+ {
+ case WR_KIND_TARGET:
+ abfd = NULL;
+ sec = NULL;
+ break;
+ case WR_KIND_BFD:
+ case WR_KIND_BFD_BIN_L:
+ case WR_KIND_BFD_BIN_B:
+ assert (!! abfd);
+ assert (!!sec);
+ break;
+ default:
+ abort ();
+ }
+ WR_KIND(wrbfd) = kind;
+ WR_BFD(wrbfd) = abfd;
+ WR_SECTION(wrbfd) = sec;
+}
+
+void
+set_windres_bfd_content(windres_bfd *wrbfd, const void *data, rc_uint_type off,
+ rc_uint_type length)
+{
+ if (WR_KIND(wrbfd) != WR_KIND_TARGET)
+ {
+ if (! bfd_set_section_contents (WR_BFD(wrbfd), WR_SECTION(wrbfd), data, off, length))
+ bfd_fatal ("bfd_set_section_contents");
+ }
+ else
+ abort ();
+}
+
+void
+get_windres_bfd_content(windres_bfd *wrbfd, void *data, rc_uint_type off,
+ rc_uint_type length)
+{
+ if (WR_KIND(wrbfd) != WR_KIND_TARGET)
+ {
+ if (! bfd_get_section_contents (WR_BFD(wrbfd), WR_SECTION(wrbfd), data, off, length))
+ bfd_fatal ("bfd_get_section_contents");
+ }
+ else
+ abort ();
+}
+
+void
+windres_put_8 (windres_bfd *wrbfd, void *p, rc_uint_type value)
+{
+ switch (WR_KIND(wrbfd))
+ {
+ case WR_KIND_TARGET:
+ target_put_8 (p, value);
+ break;
+ case WR_KIND_BFD:
+ case WR_KIND_BFD_BIN_L:
+ case WR_KIND_BFD_BIN_B:
+ bfd_put_8 (WR_BFD(wrbfd), value, p);
+ break;
+ default:
+ abort ();
+ }
+}
+
+void
+windres_put_16 (windres_bfd *wrbfd, void *data, rc_uint_type value)
+{
+ switch (WR_KIND(wrbfd))
+ {
+ case WR_KIND_TARGET:
+ target_put_16 (data, value);
+ break;
+ case WR_KIND_BFD:
+ case WR_KIND_BFD_BIN_B:
+ bfd_put_16 (WR_BFD(wrbfd), value, data);
+ break;
+ case WR_KIND_BFD_BIN_L:
+ bfd_putl16 (value, data);
+ break;
+ default:
+ abort ();
+ }
+}
+
+void
+windres_put_32 (windres_bfd *wrbfd, void *data, rc_uint_type value)
+{
+ switch (WR_KIND(wrbfd))
+ {
+ case WR_KIND_TARGET:
+ target_put_32 (data, value);
+ break;
+ case WR_KIND_BFD:
+ case WR_KIND_BFD_BIN_B:
+ bfd_put_32 (WR_BFD(wrbfd), value, data);
+ break;
+ case WR_KIND_BFD_BIN_L:
+ bfd_putl32 (value, data);
+ break;
+ default:
+ abort ();
+ }
+}
+
+rc_uint_type
+windres_get_8 (windres_bfd *wrbfd, const void *data, rc_uint_type length)
+{
+ if (length < 1)
+ fatal ("windres_get_8: unexpected eob.");
+ switch (WR_KIND(wrbfd))
+ {
+ case WR_KIND_TARGET:
+ return target_get_8 (data, length);
+ case WR_KIND_BFD:
+ case WR_KIND_BFD_BIN_B:
+ case WR_KIND_BFD_BIN_L:
+ return bfd_get_8 (WR_BFD(wrbfd), data);
+ default:
+ abort ();
+ }
+ return 0;
+}
+
+rc_uint_type
+windres_get_16 (windres_bfd *wrbfd, const void *data, rc_uint_type length)
+{
+ if (length < 2)
+ fatal ("windres_get_16: unexpected eob.");
+ switch (WR_KIND(wrbfd))
+ {
+ case WR_KIND_TARGET:
+ return target_get_16 (data, length);
+ case WR_KIND_BFD:
+ case WR_KIND_BFD_BIN_B:
+ return bfd_get_16 (WR_BFD(wrbfd), data);
+ case WR_KIND_BFD_BIN_L:
+ return bfd_getl16 (data);
+ default:
+ abort ();
+ }
+ return 0;
+}
+
+rc_uint_type
+windres_get_32 (windres_bfd *wrbfd, const void *data, rc_uint_type length)
+{
+ if (length < 4)
+ fatal ("windres_get_32: unexpected eob.");
+ switch (WR_KIND(wrbfd))
+ {
+ case WR_KIND_TARGET:
+ return target_get_32 (data, length);
+ case WR_KIND_BFD:
+ case WR_KIND_BFD_BIN_B:
+ return bfd_get_32 (WR_BFD(wrbfd), data);
+ case WR_KIND_BFD_BIN_L:
+ return bfd_getl32 (data);
+ default:
+ abort ();
+ }
+ return 0;
+}
+
+static rc_uint_type
+target_get_8 (const void *p, rc_uint_type length)
+{
+ rc_uint_type ret;
+
+ if (length < 1)
+ fatal ("Resource too small for getting 8-bit value.");
+
+ ret = (rc_uint_type) *((const bfd_byte *) p);
+ return ret & 0xff;
+}
+
+static rc_uint_type
+target_get_16 (const void *p, rc_uint_type length)
+{
+ if (length < 2)
+ fatal ("Resource too small for getting 16-bit value.");
+
+ if (target_is_bigendian)
+ return bfd_getb16 (p);
+ else
+ return bfd_getl16 (p);
+}
+
+static rc_uint_type
+target_get_32 (const void *p, rc_uint_type length)
+{
+ if (length < 4)
+ fatal ("Resource too small for getting 32-bit value.");
+
+ if (target_is_bigendian)
+ return bfd_getb32 (p);
+ else
+ return bfd_getl32 (p);
+}
+
+static void
+target_put_8 (void *p, rc_uint_type value)
+{
+ assert (!! p);
+ *((bfd_byte *) p)=(bfd_byte) value;
+}
+
+static void
+target_put_16 (void *p, rc_uint_type value)
+{
+ assert (!! p);
+
+ if (target_is_bigendian)
+ bfd_putb16 (value, p);
+ else
+ bfd_putl16 (value, p);
+}
+
+static void
+target_put_32 (void *p, rc_uint_type value)
+{
+ assert (!! p);
+
+ if (target_is_bigendian)
+ bfd_putb32 (value, p);
+ else
+ bfd_putl32 (value, p);
+}
+
+static int isInComment = 0;
+
+int wr_printcomment (FILE *e, const char *fmt, ...)
+{
+ va_list arg;
+ int r = 0;
+
+ if (isInComment)
+ r += fprintf (e, "\n ");
+ else
+ fprintf (e, "/* ");
+ isInComment = 1;
+ if (fmt == NULL)
+ return r;
+ va_start (arg, fmt);
+ r += vfprintf (e, fmt, arg);
+ va_end (arg);
+ return r;
+}
+
+int wr_print (FILE *e, const char *fmt, ...)
+{
+ va_list arg;
+ int r = 0;
+ if (isInComment)
+ r += fprintf (e, ". */\n");
+ isInComment = 0;
+ if (! fmt)
+ return r;
+ va_start (arg, fmt);
+ r += vfprintf (e, fmt, arg);
+ va_end (arg);
+ return r;
+}
diff --git a/binutils/windres.h b/binutils/windres.h
index 6a9dfa737973..d7494ec6a27c 100644
--- a/binutils/windres.h
+++ b/binutils/windres.h
@@ -1,7 +1,8 @@
/* windres.h -- header file for windres program.
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
+ Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
+ Rewritten by Kai Tietz, Onevision.
This file is part of GNU Binutils.
@@ -26,771 +27,49 @@
structures and declares functions used within the program. */
#include "winduni.h"
-
-/* We represent resources internally as a tree, similar to the tree
- used in the .rsrc section of a COFF file. The root is a
- res_directory structure. */
-
-struct res_directory
-{
- /* Resource flags. According to the MS docs, this is currently
- always zero. */
- unsigned long characteristics;
- /* Time/date stamp. */
- unsigned long time;
- /* Major version number. */
- unsigned short major;
- /* Minor version number. */
- unsigned short minor;
- /* Directory entries. */
- struct res_entry *entries;
-};
-
-/* A resource ID is stored in a res_id structure. */
-
-struct res_id
-{
- /* Non-zero if this entry has a name rather than an ID. */
- unsigned int named : 1;
- union
- {
- /* If the named field is non-zero, this is the name. */
- struct
- {
- /* Length of the name. */
- int length;
- /* Pointer to the name, which is a Unicode string. */
- unichar *name;
- } n;
- /* If the named field is zero, this is the ID. */
- unsigned long id;
- } u;
-};
-
-/* Each entry in the tree is a res_entry structure. We mix
- directories and resources because in a COFF file all entries in a
- directory are sorted together, whether the entries are
- subdirectories or resources. */
-
-struct res_entry
-{
- /* Next entry. */
- struct res_entry *next;
- /* Resource ID. */
- struct res_id id;
- /* Non-zero if this entry is a subdirectory rather than a leaf. */
- unsigned int subdir : 1;
- union
- {
- /* If the subdir field is non-zero, this is a pointer to the
- subdirectory. */
- struct res_directory *dir;
- /* If the subdir field is zero, this is a pointer to the resource
- data. */
- struct res_resource *res;
- } u;
-};
-
-/* Types of resources. */
-
-enum res_type
-{
- RES_TYPE_UNINITIALIZED,
- RES_TYPE_ACCELERATOR,
- RES_TYPE_BITMAP,
- RES_TYPE_CURSOR,
- RES_TYPE_GROUP_CURSOR,
- RES_TYPE_DIALOG,
- RES_TYPE_FONT,
- RES_TYPE_FONTDIR,
- RES_TYPE_ICON,
- RES_TYPE_GROUP_ICON,
- RES_TYPE_MENU,
- RES_TYPE_MESSAGETABLE,
- RES_TYPE_RCDATA,
- RES_TYPE_STRINGTABLE,
- RES_TYPE_USERDATA,
- RES_TYPE_VERSIONINFO
-};
-
-/* A res file and a COFF file store information differently. The
- res_info structures holds data which in a res file is stored with
- each resource, but in a COFF file is stored elsewhere. */
-
-struct res_res_info
-{
- /* Language. In a COFF file, the third level of the directory is
- keyed by the language, so the language of a resource is defined
- by its location in the resource tree. */
- unsigned short language;
- /* Characteristics of the resource. Entirely user defined. In a
- COFF file, the res_directory structure has a characteristics
- field, but I don't know if it's related to the one in the res
- file. */
- unsigned long characteristics;
- /* Version of the resource. Entirely user defined. In a COFF file,
- the res_directory structure has a characteristics field, but I
- don't know if it's related to the one in the res file. */
- unsigned long version;
- /* Memory flags. This is a combination of the MEMFLAG values
- defined below. Most of these values are historical, and are not
- meaningful for win32. I don't think there is any way to store
- this information in a COFF file. */
- unsigned short memflags;
-};
-
-/* Each resource in a COFF file has some information which can does
- not appear in a res file. */
-
-struct res_coff_info
-{
- /* The code page used for the data. I don't really know what this
- should be. */
- unsigned long codepage;
- /* A resource entry in a COFF file has a reserved field, which we
- record here when reading a COFF file. When writing a COFF file,
- we set this field to zero. */
- unsigned long reserved;
-};
-
-/* Resource data is stored in a res_resource structure. */
-
-struct res_resource
-{
- /* The type of resource. */
- enum res_type type;
- /* The data for the resource. */
- union
- {
- struct
- {
- unsigned long length;
- const unsigned char *data;
- } data;
- struct accelerator *acc;
- struct cursor *cursor;
- struct group_cursor *group_cursor;
- struct dialog *dialog;
- struct fontdir *fontdir;
- struct group_icon *group_icon;
- struct menu *menu;
- struct rcdata_item *rcdata;
- struct stringtable *stringtable;
- struct rcdata_item *userdata;
- struct versioninfo *versioninfo;
- } u;
- /* Information from a res file. */
- struct res_res_info res_info;
- /* Information from a COFF file. */
- struct res_coff_info coff_info;
-};
-
-#define SUBLANG_SHIFT 10
-
-/* Memory flags in the memflags field of a struct res_resource. */
-
-#define MEMFLAG_MOVEABLE 0x10
-#define MEMFLAG_PURE 0x20
-#define MEMFLAG_PRELOAD 0x40
-#define MEMFLAG_DISCARDABLE 0x1000
-
-/* Standard resource type codes. These are used in the ID field of a
- res_entry structure. */
-
-#define RT_CURSOR 1
-#define RT_BITMAP 2
-#define RT_ICON 3
-#define RT_MENU 4
-#define RT_DIALOG 5
-#define RT_STRING 6
-#define RT_FONTDIR 7
-#define RT_FONT 8
-#define RT_ACCELERATOR 9
-#define RT_RCDATA 10
-#define RT_MESSAGETABLE 11
-#define RT_GROUP_CURSOR 12
-#define RT_GROUP_ICON 14
-#define RT_VERSION 16
-#define RT_DLGINCLUDE 17
-#define RT_PLUGPLAY 19
-#define RT_VXD 20
-#define RT_ANICURSOR 21
-#define RT_ANIICON 22
-
-/* An accelerator resource is a linked list of these structures. */
-
-struct accelerator
-{
- /* Next accelerator. */
- struct accelerator *next;
- /* Flags. A combination of the ACC values defined below. */
- unsigned short flags;
- /* Key value. */
- unsigned short key;
- /* Resource ID. */
- unsigned short id;
-};
-
-/* Accelerator flags in the flags field of a struct accelerator.
- These are the same values that appear in a res file. I hope. */
-
-#define ACC_VIRTKEY 0x01
-#define ACC_NOINVERT 0x02
-#define ACC_SHIFT 0x04
-#define ACC_CONTROL 0x08
-#define ACC_ALT 0x10
-#define ACC_LAST 0x80
-
-/* A cursor resource. */
-
-struct cursor
-{
- /* X coordinate of hotspot. */
- short xhotspot;
- /* Y coordinate of hotspot. */
- short yhotspot;
- /* Length of bitmap data. */
- unsigned long length;
- /* Data. */
- const unsigned char *data;
-};
-
-/* A group_cursor resource is a list of group_cursor structures. */
-
-struct group_cursor
-{
- /* Next cursor in group. */
- struct group_cursor *next;
- /* Width. */
- unsigned short width;
- /* Height. */
- unsigned short height;
- /* Planes. */
- unsigned short planes;
- /* Bits per pixel. */
- unsigned short bits;
- /* Number of bytes in cursor resource. */
- unsigned long bytes;
- /* Index of cursor resource. */
- unsigned short index;
-};
-
-/* A dialog resource. */
-
-struct dialog
-{
- /* Basic window style. */
- unsigned long style;
- /* Extended window style. */
- unsigned long exstyle;
- /* X coordinate. */
- unsigned short x;
- /* Y coordinate. */
- unsigned short y;
- /* Width. */
- unsigned short width;
- /* Height. */
- unsigned short height;
- /* Menu name. */
- struct res_id menu;
- /* Class name. */
- struct res_id class;
- /* Caption. */
- unichar *caption;
- /* Font point size. */
- unsigned short pointsize;
- /* Font name. */
- unichar *font;
- /* Extended information for a dialogex. */
- struct dialog_ex *ex;
- /* Controls. */
- struct dialog_control *controls;
-};
-
-/* An extended dialog has additional information. */
-
-struct dialog_ex
-{
- /* Help ID. */
- unsigned long help;
- /* Font weight. */
- unsigned short weight;
- /* Whether the font is italic. */
- unsigned char italic;
- /* Character set. */
- unsigned char charset;
-};
-
-/* Window style flags, from the winsup Defines.h header file. These
- can appear in the style field of a struct dialog or a struct
- dialog_control. */
-
-#define CW_USEDEFAULT (0x80000000)
-#define WS_BORDER (0x800000L)
-#define WS_CAPTION (0xc00000L)
-#define WS_CHILD (0x40000000L)
-#define WS_CHILDWINDOW (0x40000000L)
-#define WS_CLIPCHILDREN (0x2000000L)
-#define WS_CLIPSIBLINGS (0x4000000L)
-#define WS_DISABLED (0x8000000L)
-#define WS_DLGFRAME (0x400000L)
-#define WS_GROUP (0x20000L)
-#define WS_HSCROLL (0x100000L)
-#define WS_ICONIC (0x20000000L)
-#define WS_MAXIMIZE (0x1000000L)
-#define WS_MAXIMIZEBOX (0x10000L)
-#define WS_MINIMIZE (0x20000000L)
-#define WS_MINIMIZEBOX (0x20000L)
-#define WS_OVERLAPPED (0L)
-#define WS_OVERLAPPEDWINDOW (0xcf0000L)
-#define WS_POPUP (0x80000000L)
-#define WS_POPUPWINDOW (0x80880000L)
-#define WS_SIZEBOX (0x40000L)
-#define WS_SYSMENU (0x80000L)
-#define WS_TABSTOP (0x10000L)
-#define WS_THICKFRAME (0x40000L)
-#define WS_TILED (0L)
-#define WS_TILEDWINDOW (0xcf0000L)
-#define WS_VISIBLE (0x10000000L)
-#define WS_VSCROLL (0x200000L)
-#define MDIS_ALLCHILDSTYLES (0x1)
-#define BS_3STATE (0x5L)
-#define BS_AUTO3STATE (0x6L)
-#define BS_AUTOCHECKBOX (0x3L)
-#define BS_AUTORADIOBUTTON (0x9L)
-#define BS_BITMAP (0x80L)
-#define BS_BOTTOM (0x800L)
-#define BS_CENTER (0x300L)
-#define BS_CHECKBOX (0x2L)
-#define BS_DEFPUSHBUTTON (0x1L)
-#define BS_GROUPBOX (0x7L)
-#define BS_ICON (0x40L)
-#define BS_LEFT (0x100L)
-#define BS_LEFTTEXT (0x20L)
-#define BS_MULTILINE (0x2000L)
-#define BS_NOTIFY (0x4000L)
-#define BS_OWNERDRAW (0xbL)
-#define BS_PUSHBOX (0xcL) /* FIXME! What should this be? */
-#define BS_PUSHBUTTON (0L)
-#define BS_PUSHLIKE (0x1000L)
-#define BS_RADIOBUTTON (0x4L)
-#define BS_RIGHT (0x200L)
-#define BS_RIGHTBUTTON (0x20L)
-#define BS_TEXT (0L)
-#define BS_TOP (0x400L)
-#define BS_USERBUTTON (0x8L)
-#define BS_VCENTER (0xc00L)
-#define CBS_AUTOHSCROLL (0x40L)
-#define CBS_DISABLENOSCROLL (0x800L)
-#define CBS_DROPDOWN (0x2L)
-#define CBS_DROPDOWNLIST (0x3L)
-#define CBS_HASSTRINGS (0x200L)
-#define CBS_LOWERCASE (0x4000L)
-#define CBS_NOINTEGRALHEIGHT (0x400L)
-#define CBS_OEMCONVERT (0x80L)
-#define CBS_OWNERDRAWFIXED (0x10L)
-#define CBS_OWNERDRAWVARIABLE (0x20L)
-#define CBS_SIMPLE (0x1L)
-#define CBS_SORT (0x100L)
-#define CBS_UPPERCASE (0x2000L)
-#define ES_AUTOHSCROLL (0x80L)
-#define ES_AUTOVSCROLL (0x40L)
-#define ES_CENTER (0x1L)
-#define ES_LEFT (0L)
-#define ES_LOWERCASE (0x10L)
-#define ES_MULTILINE (0x4L)
-#define ES_NOHIDESEL (0x100L)
-#define ES_NUMBER (0x2000L)
-#define ES_OEMCONVERT (0x400L)
-#define ES_PASSWORD (0x20L)
-#define ES_READONLY (0x800L)
-#define ES_RIGHT (0x2L)
-#define ES_UPPERCASE (0x8L)
-#define ES_WANTRETURN (0x1000L)
-#define LBS_DISABLENOSCROLL (0x1000L)
-#define LBS_EXTENDEDSEL (0x800L)
-#define LBS_HASSTRINGS (0x40L)
-#define LBS_MULTICOLUMN (0x200L)
-#define LBS_MULTIPLESEL (0x8L)
-#define LBS_NODATA (0x2000L)
-#define LBS_NOINTEGRALHEIGHT (0x100L)
-#define LBS_NOREDRAW (0x4L)
-#define LBS_NOSEL (0x4000L)
-#define LBS_NOTIFY (0x1L)
-#define LBS_OWNERDRAWFIXED (0x10L)
-#define LBS_OWNERDRAWVARIABLE (0x20L)
-#define LBS_SORT (0x2L)
-#define LBS_STANDARD (0xa00003L)
-#define LBS_USETABSTOPS (0x80L)
-#define LBS_WANTKEYBOARDINPUT (0x400L)
-#define SBS_BOTTOMALIGN (0x4L)
-#define SBS_HORZ (0L)
-#define SBS_LEFTALIGN (0x2L)
-#define SBS_RIGHTALIGN (0x4L)
-#define SBS_SIZEBOX (0x8L)
-#define SBS_SIZEBOXBOTTOMRIGHTALIGN (0x4L)
-#define SBS_SIZEBOXTOPLEFTALIGN (0x2L)
-#define SBS_SIZEGRIP (0x10L)
-#define SBS_TOPALIGN (0x2L)
-#define SBS_VERT (0x1L)
-#define SS_BITMAP (0xeL)
-#define SS_BLACKFRAME (0x7L)
-#define SS_BLACKRECT (0x4L)
-#define SS_CENTER (0x1L)
-#define SS_CENTERIMAGE (0x200L)
-#define SS_ENHMETAFILE (0xfL)
-#define SS_ETCHEDFRAME (0x12L)
-#define SS_ETCHEDHORZ (0x10L)
-#define SS_ETCHEDVERT (0x11L)
-#define SS_GRAYFRAME (0x8L)
-#define SS_GRAYRECT (0x5L)
-#define SS_ICON (0x3L)
-#define SS_LEFT (0L)
-#define SS_LEFTNOWORDWRAP (0xcL)
-#define SS_NOPREFIX (0x80L)
-#define SS_NOTIFY (0x100L)
-#define SS_OWNERDRAW (0xdL)
-#define SS_REALSIZEIMAGE (0x800L)
-#define SS_RIGHT (0x2L)
-#define SS_RIGHTJUST (0x400L)
-#define SS_SIMPLE (0xbL)
-#define SS_SUNKEN (0x1000L)
-#define SS_USERITEM (0xaL)
-#define SS_WHITEFRAME (0x9L)
-#define SS_WHITERECT (0x6L)
-#define DS_3DLOOK (0x4L)
-#define DS_ABSALIGN (0x1L)
-#define DS_CENTER (0x800L)
-#define DS_CENTERMOUSE (0x1000L)
-#define DS_CONTEXTHELP (0x2000L)
-#define DS_CONTROL (0x400L)
-#define DS_FIXEDSYS (0x8L)
-#define DS_LOCALEDIT (0x20L)
-#define DS_MODALFRAME (0x80L)
-#define DS_NOFAILCREATE (0x10L)
-#define DS_NOIDLEMSG (0x100L)
-#define DS_SETFONT (0x40L)
-#define DS_SETFOREGROUND (0x200L)
-#define DS_SYSMODAL (0x2L)
-
-/* A dialog control. */
-
-struct dialog_control
-{
- /* Next control. */
- struct dialog_control *next;
- /* ID. */
- unsigned short id;
- /* Style. */
- unsigned long style;
- /* Extended style. */
- unsigned long exstyle;
- /* X coordinate. */
- unsigned short x;
- /* Y coordinate. */
- unsigned short y;
- /* Width. */
- unsigned short width;
- /* Height. */
- unsigned short height;
- /* Class name. */
- struct res_id class;
- /* Associated text. */
- struct res_id text;
- /* Extra data for the window procedure. */
- struct rcdata_item *data;
- /* Help ID. Only used in an extended dialog. */
- unsigned long help;
-};
-
-/* Control classes. These can be used as the ID field in a struct
- dialog_control. */
-
-#define CTL_BUTTON 0x80
-#define CTL_EDIT 0x81
-#define CTL_STATIC 0x82
-#define CTL_LISTBOX 0x83
-#define CTL_SCROLLBAR 0x84
-#define CTL_COMBOBOX 0x85
-
-/* A fontdir resource is a list of fontdir structures. */
-
-struct fontdir
-{
- struct fontdir *next;
- /* Index of font entry. */
- short index;
- /* Length of font information. */
- unsigned long length;
- /* Font information. */
- const unsigned char *data;
-};
-
-/* A group_icon resource is a list of group_icon structures. */
-
-struct group_icon
-{
- /* Next icon in group. */
- struct group_icon *next;
- /* Width. */
- unsigned char width;
- /* Height. */
- unsigned char height;
- /* Color count. */
- unsigned char colors;
- /* Planes. */
- unsigned short planes;
- /* Bits per pixel. */
- unsigned short bits;
- /* Number of bytes in cursor resource. */
- unsigned long bytes;
- /* Index of cursor resource. */
- unsigned short index;
-};
-
-/* A menu resource. */
-
-struct menu
-{
- /* List of menuitems. */
- struct menuitem *items;
- /* Help ID. I don't think there is any way to set this in an rc
- file, but it can appear in the binary format. */
- unsigned long help;
-};
-
-/* A menu resource is a list of menuitem structures. */
-
-struct menuitem
-{
- /* Next menuitem. */
- struct menuitem *next;
- /* Type. In a normal menu, rather than a menuex, this is the flags
- field. */
- unsigned long type;
- /* State. This is only used in a menuex. */
- unsigned long state;
- /* Id. */
- unsigned short id;
- /* Unicode text. */
- unichar *text;
- /* Popup menu items for a popup. */
- struct menuitem *popup;
- /* Help ID. This is only used in a menuex. */
- unsigned long help;
-};
-
-/* Menu item flags. These can appear in the flags field of a struct
- menuitem. */
-
-#define MENUITEM_GRAYED 0x001
-#define MENUITEM_INACTIVE 0x002
-#define MENUITEM_BITMAP 0x004
-#define MENUITEM_OWNERDRAW 0x100
-#define MENUITEM_CHECKED 0x008
-#define MENUITEM_POPUP 0x010
-#define MENUITEM_MENUBARBREAK 0x020
-#define MENUITEM_MENUBREAK 0x040
-#define MENUITEM_ENDMENU 0x080
-#define MENUITEM_HELP 0x4000
-
-/* An rcdata resource is a pointer to a list of rcdata_item
- structures. */
-
-struct rcdata_item
-{
- /* Next data item. */
- struct rcdata_item *next;
- /* Type of data. */
- enum
- {
- RCDATA_WORD,
- RCDATA_DWORD,
- RCDATA_STRING,
- RCDATA_WSTRING,
- RCDATA_BUFFER
- } type;
- union
- {
- unsigned int word;
- unsigned long dword;
- struct
- {
- unsigned long length;
- const char *s;
- } string;
- struct
- {
- unsigned long length;
- const unichar *w;
- } wstring;
- struct
- {
- unsigned long length;
- const unsigned char *data;
- } buffer;
- } u;
-};
-
-/* A stringtable resource is a pointer to a stringtable structure. */
-
-struct stringtable
-{
- /* Each stringtable resource is a list of 16 unicode strings. */
- struct
- {
- /* Length of string. */
- int length;
- /* String data if length > 0. */
- unichar *string;
- } strings[16];
-};
-
-/* A versioninfo resource points to a versioninfo structure. */
-
-struct versioninfo
-{
- /* Fixed version information. */
- struct fixed_versioninfo *fixed;
- /* Variable version information. */
- struct ver_info *var;
-};
-
-/* The fixed portion of a versioninfo resource. */
-
-struct fixed_versioninfo
-{
- /* The file version, which is two 32 bit integers. */
- unsigned long file_version_ms;
- unsigned long file_version_ls;
- /* The product version, which is two 32 bit integers. */
- unsigned long product_version_ms;
- unsigned long product_version_ls;
- /* The file flags mask. */
- unsigned long file_flags_mask;
- /* The file flags. */
- unsigned long file_flags;
- /* The OS type. */
- unsigned long file_os;
- /* The file type. */
- unsigned long file_type;
- /* The file subtype. */
- unsigned long file_subtype;
- /* The date, which in Windows is two 32 bit integers. */
- unsigned long file_date_ms;
- unsigned long file_date_ls;
-};
-
-/* A list of variable version information. */
-
-struct ver_info
-{
- /* Next item. */
- struct ver_info *next;
- /* Type of data. */
- enum { VERINFO_STRING, VERINFO_VAR } type;
- union
- {
- /* StringFileInfo data. */
- struct
- {
- /* Language. */
- unichar *language;
- /* Strings. */
- struct ver_stringinfo *strings;
- } string;
- /* VarFileInfo data. */
- struct
- {
- /* Key. */
- unichar *key;
- /* Values. */
- struct ver_varinfo *var;
- } var;
- } u;
-};
-
-/* A list of string version information. */
-
-struct ver_stringinfo
-{
- /* Next string. */
- struct ver_stringinfo *next;
- /* Key. */
- unichar *key;
- /* Value. */
- unichar *value;
-};
-
-/* A list of variable version information. */
-
-struct ver_varinfo
-{
- /* Next item. */
- struct ver_varinfo *next;
- /* Language ID. */
- unsigned short language;
- /* Character set ID. */
- unsigned short charset;
-};
-
-/* This structure is used when converting resource information to
- binary. */
-
-struct bindata
-{
- /* Next data. */
- struct bindata *next;
- /* Length of data. */
- unsigned long length;
- /* Data. */
- unsigned char *data;
-};
+#include "windint.h"
extern int verbose;
/* Function declarations. */
-extern struct res_directory *read_rc_file
- (const char *, const char *, const char *, int, int);
-extern struct res_directory *read_res_file (const char *);
-extern struct res_directory *read_coff_rsrc (const char *, const char *);
-extern void write_rc_file (const char *, const struct res_directory *);
-extern void write_res_file (const char *, const struct res_directory *);
-extern void write_coff_file
- (const char *, const char *, const struct res_directory *);
+extern rc_res_directory *read_rc_file (const char *, const char *, const char *, int, int);
+extern rc_res_directory *read_res_file (const char *);
+extern rc_res_directory *read_coff_rsrc (const char *, const char *);
+extern void write_rc_file (const char *, const rc_res_directory *);
+extern void write_res_file (const char *, const rc_res_directory *);
+extern void write_coff_file (const char *, const char *, const rc_res_directory *);
-extern struct res_resource *bin_to_res
- (struct res_id, const unsigned char *, unsigned long, int);
-extern struct bindata *res_to_bin (const struct res_resource *, int);
+extern rc_res_resource *bin_to_res (windres_bfd *, rc_res_id, const bfd_byte *,
+ rc_uint_type);
+extern rc_uint_type res_to_bin (windres_bfd *, rc_uint_type, const rc_res_resource *);
-extern FILE *open_file_search
- (const char *, const char *, const char *, char **);
+extern FILE *open_file_search (const char *, const char *, const char *, char **);
-extern void *res_alloc (size_t);
-extern void *reswr_alloc (size_t);
+extern void *res_alloc (rc_uint_type);
+extern void *reswr_alloc (rc_uint_type);
/* Resource ID handling. */
-extern int res_id_cmp (struct res_id, struct res_id);
-extern void res_id_print (FILE *, struct res_id, int);
-extern void res_ids_print (FILE *, int, const struct res_id *);
-extern void res_string_to_id (struct res_id *, const char *);
+extern int res_id_cmp (rc_res_id, rc_res_id);
+extern void res_id_print (FILE *, rc_res_id, int);
+extern void res_ids_print (FILE *, int, const rc_res_id *);
+extern void res_string_to_id (rc_res_id *, const char *);
+extern void res_unistring_to_id (rc_res_id *, const unichar *);
/* Manipulation of the resource tree. */
-extern struct res_resource *define_resource
- (struct res_directory **, int, const struct res_id *, int);
-extern struct res_resource *define_standard_resource
- (struct res_directory **, int, struct res_id, int, int);
+extern rc_res_resource *define_resource (rc_res_directory **, int, const rc_res_id *,
+ int);
+extern rc_res_resource *define_standard_resource (rc_res_directory **, int, rc_res_id,
+ rc_uint_type, int);
-extern int extended_dialog (const struct dialog *);
-extern int extended_menu (const struct menu *);
+extern int extended_dialog (const rc_dialog *);
+extern int extended_menu (const rc_menu *);
/* Communication between the rc file support and the parser and lexer. */
extern int yydebug;
-extern FILE *yyin;
extern char *rc_filename;
extern int rc_lineno;
@@ -803,52 +82,40 @@ extern void rcparse_discard_strings (void);
extern void rcparse_rcdata (void);
extern void rcparse_normal (void);
-extern void define_accelerator
- (struct res_id, const struct res_res_info *, struct accelerator *);
-extern void define_bitmap
- (struct res_id, const struct res_res_info *, const char *);
-extern void define_cursor
- (struct res_id, const struct res_res_info *, const char *);
-extern void define_dialog
- (struct res_id, const struct res_res_info *, const struct dialog *);
-extern struct dialog_control *define_control
- (const struct res_id, unsigned long, unsigned long, unsigned long,
- unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
-extern struct dialog_control *define_icon_control
- (struct res_id, unsigned long, unsigned long, unsigned long, unsigned long,
- unsigned long, unsigned long, struct rcdata_item *, struct dialog_ex *);
-extern void define_font
- (struct res_id, const struct res_res_info *, const char *);
-extern void define_icon
- (struct res_id, const struct res_res_info *, const char *);
-extern void define_menu
- (struct res_id, const struct res_res_info *, struct menuitem *);
-extern struct menuitem *define_menuitem
- (const char *, int, unsigned long, unsigned long, unsigned long,
- struct menuitem *);
-extern void define_messagetable
- (struct res_id, const struct res_res_info *, const char *);
-extern void define_rcdata
- (struct res_id, const struct res_res_info *, struct rcdata_item *);
-extern void define_rcdata_file
- (struct res_id, const struct res_res_info *, const char *);
-extern struct rcdata_item *define_rcdata_string
- (const char *, unsigned long);
-extern struct rcdata_item *define_rcdata_number (unsigned long, int);
-extern void define_stringtable
- (const struct res_res_info *, unsigned long, const char *);
-extern void define_user_data
- (struct res_id, struct res_id, const struct res_res_info *,
- struct rcdata_item *);
-extern void define_user_file
- (struct res_id, struct res_id, const struct res_res_info *, const char *);
-extern void define_versioninfo
- (struct res_id, int, struct fixed_versioninfo *, struct ver_info *);
-extern struct ver_info *append_ver_stringfileinfo
- (struct ver_info *, const char *, struct ver_stringinfo *);
-extern struct ver_info *append_ver_varfileinfo
- (struct ver_info *, const char *, struct ver_varinfo *);
-extern struct ver_stringinfo *append_verval
- (struct ver_stringinfo *, const char *, const char *);
-extern struct ver_varinfo *append_vertrans
- (struct ver_varinfo *, unsigned long, unsigned long);
+extern void define_accelerator (rc_res_id, const rc_res_res_info *, rc_accelerator *);
+extern void define_bitmap (rc_res_id, const rc_res_res_info *, const char *);
+extern void define_cursor (rc_res_id, const rc_res_res_info *, const char *);
+extern void define_dialog (rc_res_id, const rc_res_res_info *, const rc_dialog *);
+extern rc_dialog_control *define_control (const rc_res_id, rc_uint_type, rc_uint_type,
+ rc_uint_type, rc_uint_type, rc_uint_type,
+ const rc_res_id, rc_uint_type, rc_uint_type);
+extern rc_dialog_control *define_icon_control (rc_res_id, rc_uint_type, rc_uint_type,
+ rc_uint_type, rc_uint_type, rc_uint_type,
+ rc_uint_type, rc_rcdata_item *,
+ rc_dialog_ex *);
+extern void define_font (rc_res_id, const rc_res_res_info *, const char *);
+extern void define_icon (rc_res_id, const rc_res_res_info *, const char *);
+extern void define_menu (rc_res_id, const rc_res_res_info *, rc_menuitem *);
+extern rc_menuitem *define_menuitem (const unichar *, rc_uint_type, rc_uint_type,
+ rc_uint_type, rc_uint_type, rc_menuitem *);
+extern void define_messagetable (rc_res_id, const rc_res_res_info *, const char *);
+extern void define_rcdata (rc_res_id, const rc_res_res_info *, rc_rcdata_item *);
+extern void define_rcdata_file (rc_res_id, const rc_res_res_info *, const char *);
+extern rc_rcdata_item *define_rcdata_string (const char *, rc_uint_type);
+extern rc_rcdata_item *define_rcdata_unistring (const unichar *, rc_uint_type);
+extern rc_rcdata_item *define_rcdata_number (rc_uint_type, int);
+extern void define_stringtable (const rc_res_res_info *, rc_uint_type, const unichar *);
+extern void define_user_data (rc_res_id, rc_res_id, const rc_res_res_info *, rc_rcdata_item *);
+extern void define_toolbar (rc_res_id, rc_res_res_info *, rc_uint_type ,rc_uint_type ,rc_toolbar_item *);
+extern void define_user_file (rc_res_id, rc_res_id, const rc_res_res_info *, const char *);
+extern void define_versioninfo (rc_res_id, rc_uint_type, rc_fixed_versioninfo *, rc_ver_info *);
+extern rc_ver_info *append_ver_stringfileinfo (rc_ver_info *, const char *, rc_ver_stringinfo *);
+extern rc_ver_info *append_ver_varfileinfo (rc_ver_info *, const unichar *, rc_ver_varinfo *);
+extern rc_ver_stringinfo *append_verval (rc_ver_stringinfo *, const unichar *, const unichar *);
+extern rc_ver_varinfo *append_vertrans (rc_ver_varinfo *, rc_uint_type, rc_uint_type);
+
+extern bfd *windres_open_as_binary (const char *, int);
+
+extern int wr_printcomment (FILE *, const char *, ...);
+extern int wr_print (FILE *, const char *, ...);
+#define wr_print_flush(FP) wr_print ((FP),NULL)
diff --git a/binutils/winduni.c b/binutils/winduni.c
index b172b5e2196a..f1bd58acf3b7 100644
--- a/binutils/winduni.c
+++ b/binutils/winduni.c
@@ -1,6 +1,8 @@
/* winduni.c -- unicode support for the windres program.
- Copyright 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc.
+ Copyright 1997, 1998, 2000, 2001, 2003, 2007
+ Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
+ Rewritten by Kai Tietz, Onevision.
This file is part of GNU Binutils.
@@ -27,48 +29,178 @@
hosts, but that seems better than not really supporting unicode at
all. */
+#include "sysdep.h"
#include "bfd.h"
+#include "libiberty.h" /* for xstrdup */
#include "bucomm.h"
+/* Must be include before windows.h and winnls.h. */
+#if defined (_WIN32) || defined (__CYGWIN__)
+#include <windows.h>
+#include <winnls.h>
+#endif
#include "winduni.h"
#include "safe-ctype.h"
-#ifdef _WIN32
-#include <windows.h>
+#if HAVE_ICONV_H
+#include <iconv.h>
#endif
+static rc_uint_type wind_WideCharToMultiByte (rc_uint_type, const unichar *, char *, rc_uint_type);
+static rc_uint_type wind_MultiByteToWideChar (rc_uint_type, const char *, unichar *, rc_uint_type);
+static int unichar_isascii (const unichar *, rc_uint_type);
+
/* Convert an ASCII string to a unicode string. We just copy it,
expanding chars to shorts, rather than doing something intelligent. */
+
+#if !defined (_WIN32) && !defined (__CYGWIN__)
-void
-unicode_from_ascii (int *length, unichar **unicode, const char *ascii)
+/* Codepages mapped. */
+static local_iconv_map codepages[] =
{
- int len;
-#ifndef _WIN32
- const char *s;
- unsigned short *w;
-
- len = strlen (ascii);
- *unicode = ((unichar *) res_alloc ((len + 1) * sizeof (unichar)));
- for (s = ascii, w = *unicode; *s != '\0'; s++, w++)
- *w = *s & 0xff;
- *w = 0;
-#else
- /* We use MultiByteToWideChar rather than strlen to get the unicode
- string length to allow multibyte "ascii" chars. The value returned
- by this function includes the trailing '\0'. */
- len = MultiByteToWideChar (CP_ACP, 0, ascii, -1, NULL, 0);
- if (len)
- {
- *unicode = ((unichar *) res_alloc (len * sizeof (unichar)));
- MultiByteToWideChar (CP_ACP, 0, ascii, -1, *unicode, len);
- }
- /* Discount the trailing '/0'. If MultiByteToWideChar failed,
- this will set *length to -1. */
- len--;
+ { 0, "MS-ANSI" },
+ { 1, "WINDOWS-1252" },
+ { 437, "MS-ANSI" },
+ { 737, "MS-GREEK" },
+ { 775, "WINBALTRIM" },
+ { 850, "MS-ANSI" },
+ { 852, "MS-EE" },
+ { 857, "MS-TURK" },
+ { 862, "CP862" },
+ { 864, "CP864" },
+ { 866, "MS-CYRL" },
+ { 874, "WINDOWS-874" },
+ { 932, "CP932" },
+ { 936, "CP936" },
+ { 949, "CP949" },
+ { 950, "CP950" },
+ { 1250, "WINDOWS-1250" },
+ { 1251, "WINDOWS-1251" },
+ { 1252, "WINDOWS-1252" },
+ { 1253, "WINDOWS-1253" },
+ { 1254, "WINDOWS-1254" },
+ { 1255, "WINDOWS-1255" },
+ { 1256, "WINDOWS-1256" },
+ { 1257, "WINDOWS-1257" },
+ { 1258, "WINDOWS-1258" },
+ { CP_UTF7, "UTF-7" },
+ { CP_UTF8, "UTF-8" },
+ { CP_UTF16, "UTF-16" },
+ { (rc_uint_type) -1, NULL }
+};
+
+/* Languages supported. */
+static const wind_language_t languages[] =
+{
+ { 0x0000, 437, 1252, "Neutral", "Neutral" },
+ { 0x0401, 864, 1256, "Arabic", "Saudi Arabia" }, { 0x0402, 866, 1251, "Bulgarian", "Bulgaria" },
+ { 0x0403, 850, 1252, "Catalan", "Spain" }, { 0x0404, 950, 950, "Chinese", "Taiwan" },
+ { 0x0405, 852, 1250, "Czech", "Czech Republic" }, { 0x0406, 850, 1252, "Danish", "Denmark" },
+ { 0x0407, 850, 1252, "German", "Germany" }, { 0x0408, 737, 1253, "Greek", "Greece" },
+ { 0x0409, 437, 1252, "English", "United States" }, { 0x040A, 850, 1252, "Spanish - Traditional Sort", "Spain" },
+ { 0x040B, 850, 1252, "Finnish", "Finland" }, { 0x040C, 850, 1252, "French", "France" },
+ { 0x040D, 862, 1255, "Hebrew", "Israel" }, { 0x040E, 852, 1250, "Hungarian", "Hungary" },
+ { 0x040F, 850, 1252, "Icelandic", "Iceland" }, { 0x0410, 850, 1252, "Italian", "Italy" },
+ { 0x0411, 932, 932, "Japanese", "Japan" }, { 0x0412, 949, 949, "Korean", "Korea (south)" },
+ { 0x0413, 850, 1252, "Dutch", "Netherlands" }, { 0x0414, 850, 1252, "Norwegian (Bokmål)", "Norway" },
+ { 0x0415, 852, 1250, "Polish", "Poland" }, { 0x0416, 850, 1252, "Portuguese", "Brazil" },
+ { 0x0418, 852, 1250, "Romanian", "Romania" }, { 0x0419, 866, 1251, "Russian", "Russia" },
+ { 0x041A, 852, 1250, "Croatian", "Croatia" }, { 0x041B, 852, 1250, "Slovak", "Slovakia" },
+ { 0x041C, 852, 1250, "Albanian", "Albania" }, { 0x041D, 850, 1252, "Swedish", "Sweden" },
+ { 0x041E, 874, 874, "Thai", "Thailand" }, { 0x041F, 857, 1254, "Turkish", "Turkey" },
+ { 0x0421, 850, 1252, "Indonesian", "Indonesia" }, { 0x0422, 866, 1251, "Ukrainian", "Ukraine" },
+ { 0x0423, 866, 1251, "Belarusian", "Belarus" }, { 0x0424, 852, 1250, "Slovene", "Slovenia" },
+ { 0x0425, 775, 1257, "Estonian", "Estonia" }, { 0x0426, 775, 1257, "Latvian", "Latvia" },
+ { 0x0427, 775, 1257, "Lithuanian", "Lithuania" },
+ { 0x0429, 864, 1256, "Arabic", "Farsi" }, { 0x042A,1258, 1258, "Vietnamese", "Vietnam" },
+ { 0x042D, 850, 1252, "Basque", "Spain" },
+ { 0x042F, 866, 1251, "Macedonian", "Former Yugoslav Republic of Macedonia" },
+ { 0x0436, 850, 1252, "Afrikaans", "South Africa" },
+ { 0x0438, 850, 1252, "Faroese", "Faroe Islands" },
+ { 0x043C, 437, 1252, "Irish", "Ireland" },
+ { 0x043E, 850, 1252, "Malay", "Malaysia" },
+ { 0x0801, 864, 1256, "Arabic", "Iraq" },
+ { 0x0804, 936, 936, "Chinese (People's republic of China)", "People's republic of China" },
+ { 0x0807, 850, 1252, "German", "Switzerland" },
+ { 0x0809, 850, 1252, "English", "United Kingdom" }, { 0x080A, 850, 1252, "Spanish", "Mexico" },
+ { 0x080C, 850, 1252, "French", "Belgium" },
+ { 0x0810, 850, 1252, "Italian", "Switzerland" },
+ { 0x0813, 850, 1252, "Dutch", "Belgium" }, { 0x0814, 850, 1252, "Norwegian (Nynorsk)", "Norway" },
+ { 0x0816, 850, 1252, "Portuguese", "Portugal" },
+ { 0x081A, 852, 1252, "Serbian (latin)", "Yugoslavia" },
+ { 0x081D, 850, 1252, "Swedish (Finland)", "Finland" },
+ { 0x0C01, 864, 1256, "Arabic", "Egypt" },
+ { 0x0C04, 950, 950, "Chinese", "Hong Kong" },
+ { 0x0C07, 850, 1252, "German", "Austria" },
+ { 0x0C09, 850, 1252, "English", "Australia" }, { 0x0C0A, 850, 1252, "Spanish - International Sort", "Spain" },
+ { 0x0C0C, 850, 1252, "French", "Canada"},
+ { 0x0C1A, 855, 1251, "Serbian (Cyrillic)", "Serbia" },
+ { 0x1001, 864, 1256, "Arabic", "Libya" },
+ { 0x1004, 936, 936, "Chinese", "Singapore" },
+ { 0x1007, 850, 1252, "German", "Luxembourg" },
+ { 0x1009, 850, 1252, "English", "Canada" },
+ { 0x100A, 850, 1252, "Spanish", "Guatemala" },
+ { 0x100C, 850, 1252, "French", "Switzerland" },
+ { 0x1401, 864, 1256, "Arabic", "Algeria" },
+ { 0x1407, 850, 1252, "German", "Liechtenstein" },
+ { 0x1409, 850, 1252, "English", "New Zealand" }, { 0x140A, 850, 1252, "Spanish", "Costa Rica" },
+ { 0x140C, 850, 1252, "French", "Luxembourg" },
+ { 0x1801, 864, 1256, "Arabic", "Morocco" },
+ { 0x1809, 850, 1252, "English", "Ireland" }, { 0x180A, 850, 1252, "Spanish", "Panama" },
+ { 0x180C, 850, 1252, "French", "Monaco" },
+ { 0x1C01, 864, 1256, "Arabic", "Tunisia" },
+ { 0x1C09, 437, 1252, "English", "South Africa" }, { 0x1C0A, 850, 1252, "Spanish", "Dominican Republic" },
+ { 0x2001, 864, 1256, "Arabic", "Oman" },
+ { 0x2009, 850, 1252, "English", "Jamaica" }, { 0x200A, 850, 1252, "Spanish", "Venezuela" },
+ { 0x2401, 864, 1256, "Arabic", "Yemen" },
+ { 0x2409, 850, 1252, "English", "Caribbean" }, { 0x240A, 850, 1252, "Spanish", "Colombia" },
+ { 0x2801, 864, 1256, "Arabic", "Syria" },
+ { 0x2809, 850, 1252, "English", "Belize" }, { 0x280A, 850, 1252, "Spanish", "Peru" },
+ { 0x2C01, 864, 1256, "Arabic", "Jordan" },
+ { 0x2C09, 437, 1252, "English", "Trinidad & Tobago" },{ 0x2C0A, 850, 1252, "Spanish", "Argentina" },
+ { 0x3001, 864, 1256, "Arabic", "Lebanon" },
+ { 0x3009, 437, 1252, "English", "Zimbabwe" }, { 0x300A, 850, 1252, "Spanish", "Ecuador" },
+ { 0x3401, 864, 1256, "Arabic", "Kuwait" },
+ { 0x3409, 437, 1252, "English", "Philippines" }, { 0x340A, 850, 1252, "Spanish", "Chile" },
+ { 0x3801, 864, 1256, "Arabic", "United Arab Emirates" },
+ { 0x380A, 850, 1252, "Spanish", "Uruguay" },
+ { 0x3C01, 864, 1256, "Arabic", "Bahrain" },
+ { 0x3C0A, 850, 1252, "Spanish", "Paraguay" },
+ { 0x4001, 864, 1256, "Arabic", "Qatar" },
+ { 0x400A, 850, 1252, "Spanish", "Bolivia" },
+ { 0x440A, 850, 1252, "Spanish", "El Salvador" },
+ { 0x480A, 850, 1252, "Spanish", "Honduras" },
+ { 0x4C0A, 850, 1252, "Spanish", "Nicaragua" },
+ { 0x500A, 850, 1252, "Spanish", "Puerto Rico" },
+ { (unsigned) -1, 0, 0, NULL, NULL }
+};
+
#endif
- if (length != NULL)
- *length = len;
+/* Specifies the default codepage to be used for unicode
+ transformations. By default this is CP_ACP. */
+rc_uint_type wind_default_codepage = CP_ACP;
+
+/* Specifies the currently used codepage for unicode
+ transformations. By default this is CP_ACP. */
+rc_uint_type wind_current_codepage = CP_ACP;
+
+/* Convert an ASCII string to a unicode string. We just copy it,
+ expanding chars to shorts, rather than doing something intelligent. */
+
+void
+unicode_from_ascii (rc_uint_type *length, unichar **unicode, const char *ascii)
+{
+ unicode_from_codepage (length, unicode, ascii, wind_current_codepage);
+}
+
+/* Convert an unicode string to an ASCII string. We just copy it,
+ shrink shorts to chars, rather than doing something intelligent.
+ Shorts with not within the char range are replaced by '_'. */
+
+void
+ascii_from_unicode (rc_uint_type *length, const unichar *unicode, char **ascii)
+{
+ codepage_from_unicode (length, unicode, ascii, wind_current_codepage);
}
/* Print the unicode string UNICODE to the file E. LENGTH is the
@@ -77,7 +209,7 @@ unicode_from_ascii (int *length, unichar **unicode, const char *ascii)
some Windows function, probably WideCharToMultiByte. */
void
-unicode_print (FILE *e, const unichar *unicode, int length)
+unicode_print (FILE *e, const unichar *unicode, rc_uint_type length)
{
while (1)
{
@@ -85,12 +217,12 @@ unicode_print (FILE *e, const unichar *unicode, int length)
if (length == 0)
return;
- if (length > 0)
+ if ((bfd_signed_vma) length > 0)
--length;
ch = *unicode;
- if (ch == 0 && length < 0)
+ if (ch == 0 && (bfd_signed_vma) length < 0)
return;
++unicode;
@@ -98,7 +230,9 @@ unicode_print (FILE *e, const unichar *unicode, int length)
if ((ch & 0x7f) == ch)
{
if (ch == '\\')
- fputs ("\\", e);
+ fputs ("\\\\", e);
+ else if (ch == '"')
+ fputs ("\"\"", e);
else if (ISPRINT (ch))
putc (ch, e);
else
@@ -142,6 +276,534 @@ unicode_print (FILE *e, const unichar *unicode, int length)
else if ((ch & 0xff) == ch)
fprintf (e, "\\%03o", (unsigned int) ch);
else
- fprintf (e, "\\x%x", (unsigned int) ch);
+ fprintf (e, "\\x%04x", (unsigned int) ch);
+ }
+}
+
+/* Print a unicode string to a file. */
+
+void
+ascii_print (FILE *e, const char *s, rc_uint_type length)
+{
+ while (1)
+ {
+ char ch;
+
+ if (length == 0)
+ return;
+ if ((bfd_signed_vma) length > 0)
+ --length;
+
+ ch = *s;
+
+ if (ch == 0 && (bfd_signed_vma) length < 0)
+ return;
+
+ ++s;
+
+ if ((ch & 0x7f) == ch)
+ {
+ if (ch == '\\')
+ fputs ("\\\\", e);
+ else if (ch == '"')
+ fputs ("\"\"", e);
+ else if (ISPRINT (ch))
+ putc (ch, e);
+ else
+ {
+ switch (ch)
+ {
+ case ESCAPE_A:
+ fputs ("\\a", e);
+ break;
+
+ case ESCAPE_B:
+ fputs ("\\b", e);
+ break;
+
+ case ESCAPE_F:
+ fputs ("\\f", e);
+ break;
+
+ case ESCAPE_N:
+ fputs ("\\n", e);
+ break;
+
+ case ESCAPE_R:
+ fputs ("\\r", e);
+ break;
+
+ case ESCAPE_T:
+ fputs ("\\t", e);
+ break;
+
+ case ESCAPE_V:
+ fputs ("\\v", e);
+ break;
+
+ default:
+ fprintf (e, "\\%03o", (unsigned int) ch);
+ break;
+ }
+ }
+ }
+ else
+ fprintf (e, "\\%03o", (unsigned int) ch & 0xff);
+ }
+}
+
+rc_uint_type
+unichar_len (const unichar *unicode)
+{
+ rc_uint_type r = 0;
+
+ if (unicode)
+ while (unicode[r] != 0)
+ r++;
+ else
+ --r;
+ return r;
+}
+
+unichar *
+unichar_dup (const unichar *unicode)
+{
+ unichar *r;
+ int len;
+
+ if (! unicode)
+ return NULL;
+ for (len = 0; unicode[len] != 0; ++len)
+ ;
+ ++len;
+ r = ((unichar *) res_alloc (len * sizeof (unichar)));
+ memcpy (r, unicode, len * sizeof (unichar));
+ return r;
+}
+
+unichar *
+unichar_dup_uppercase (const unichar *u)
+{
+ unichar *r = unichar_dup (u);
+ int i;
+
+ if (! r)
+ return NULL;
+
+ for (i = 0; r[i] != 0; ++i)
+ {
+ if (r[i] >= 'a' && r[i] <= 'z')
+ r[i] &= 0xdf;
+ }
+ return r;
+}
+
+static int
+unichar_isascii (const unichar *u, rc_uint_type len)
+{
+ rc_uint_type i;
+
+ if ((bfd_signed_vma) len < 0)
+ {
+ if (u)
+ len = (rc_uint_type) unichar_len (u);
+ else
+ len = 0;
}
+
+ for (i = 0; i < len; i++)
+ if ((u[i] & 0xff80) != 0)
+ return 0;
+ return 1;
+}
+
+void
+unicode_print_quoted (FILE *e, const unichar *u, rc_uint_type len)
+{
+ if (! unichar_isascii (u, len))
+ fputc ('L', e);
+ fputc ('"', e);
+ unicode_print (e, u, len);
+ fputc ('"', e);
+}
+
+int
+unicode_is_valid_codepage (rc_uint_type cp)
+{
+ if ((cp & 0xffff) != cp)
+ return 0;
+ if (cp == CP_UTF16 || cp == CP_ACP)
+ return 1;
+
+#if !defined (_WIN32) && !defined (__CYGWIN__)
+ if (! wind_find_codepage_info (cp))
+ return 0;
+ return 1;
+#else
+ return !! IsValidCodePage ((UINT) cp);
+#endif
+}
+
+#if defined (_WIN32) || defined (__CYGWIN__)
+
+#define max_cp_string_len 6
+
+static unsigned int
+codepage_from_langid (unsigned short langid)
+{
+ char cp_string [max_cp_string_len];
+ int c;
+
+ memset (cp_string, 0, max_cp_string_len);
+ /* LOCALE_RETURN_NUMBER flag would avoid strtoul conversion,
+ but is unavailable on Win95. */
+ c = GetLocaleInfoA (MAKELCID (langid, SORT_DEFAULT),
+ LOCALE_IDEFAULTANSICODEPAGE,
+ cp_string, max_cp_string_len);
+ /* If codepage data for an LCID is not installed on users's system,
+ GetLocaleInfo returns an empty string. Fall back to system ANSI
+ default. */
+ if (c == 0)
+ return CP_ACP;
+ return strtoul (cp_string, 0, 10);
+}
+
+static unsigned int
+wincodepage_from_langid (unsigned short langid)
+{
+ char cp_string [max_cp_string_len];
+ int c;
+
+ memset (cp_string, 0, max_cp_string_len);
+ /* LOCALE_RETURN_NUMBER flag would avoid strtoul conversion,
+ but is unavailable on Win95. */
+ c = GetLocaleInfoA (MAKELCID (langid, SORT_DEFAULT),
+ LOCALE_IDEFAULTCODEPAGE,
+ cp_string, max_cp_string_len);
+ /* If codepage data for an LCID is not installed on users's system,
+ GetLocaleInfo returns an empty string. Fall back to system ANSI
+ default. */
+ if (c == 0)
+ return CP_OEM;
+ return strtoul (cp_string, 0, 10);
+}
+
+static char *
+lang_from_langid (unsigned short langid)
+{
+ char cp_string[261];
+ int c;
+
+ memset (cp_string, 0, 261);
+ c = GetLocaleInfoA (MAKELCID (langid, SORT_DEFAULT),
+ LOCALE_SENGLANGUAGE,
+ cp_string, 260);
+ /* If codepage data for an LCID is not installed on users's system,
+ GetLocaleInfo returns an empty string. Fall back to system ANSI
+ default. */
+ if (c == 0)
+ strcpy (cp_string, "Neutral");
+ return xstrdup (cp_string);
+}
+
+static char *
+country_from_langid (unsigned short langid)
+{
+ char cp_string[261];
+ int c;
+
+ memset (cp_string, 0, 261);
+ c = GetLocaleInfoA (MAKELCID (langid, SORT_DEFAULT),
+ LOCALE_SENGCOUNTRY,
+ cp_string, 260);
+ /* If codepage data for an LCID is not installed on users's system,
+ GetLocaleInfo returns an empty string. Fall back to system ANSI
+ default. */
+ if (c == 0)
+ strcpy (cp_string, "Neutral");
+ return xstrdup (cp_string);
+}
+
+#endif
+
+const wind_language_t *
+wind_find_language_by_id (unsigned id)
+{
+#if !defined (_WIN32) && !defined (__CYGWIN__)
+ int i;
+
+ if (! id)
+ return NULL;
+ for (i = 0; languages[i].id != (unsigned) -1 && languages[i].id != id; i++)
+ ;
+ if (languages[i].id == id)
+ return &languages[i];
+ return NULL;
+#else
+ static wind_language_t wl;
+
+ wl.id = id;
+ wl.doscp = codepage_from_langid ((unsigned short) id);
+ wl.wincp = wincodepage_from_langid ((unsigned short) id);
+ wl.name = lang_from_langid ((unsigned short) id);
+ wl.country = country_from_langid ((unsigned short) id);
+
+ return & wl;
+#endif
+}
+
+const local_iconv_map *
+wind_find_codepage_info (unsigned cp)
+{
+#if !defined (_WIN32) && !defined (__CYGWIN__)
+ int i;
+
+ for (i = 0; codepages[i].codepage != (rc_uint_type) -1 && codepages[i].codepage != cp; i++)
+ ;
+ if (codepages[i].codepage == (rc_uint_type) -1)
+ return NULL;
+ return &codepages[i];
+#else
+ static local_iconv_map lim;
+ if (!unicode_is_valid_codepage (cp))
+ return NULL;
+ lim.codepage = cp;
+ lim.iconv_name = "";
+ return & lim;
+#endif
+}
+
+/* Convert an Codepage string to a unicode string. */
+
+void
+unicode_from_codepage (rc_uint_type *length, unichar **u, const char *src, rc_uint_type cp)
+{
+ rc_uint_type len;
+
+ len = wind_MultiByteToWideChar (cp, src, NULL, 0);
+ if (len)
+ {
+ *u = ((unichar *) res_alloc (len));
+ wind_MultiByteToWideChar (cp, src, *u, len);
+ }
+ /* Discount the trailing '/0'. If MultiByteToWideChar failed,
+ this will set *length to -1. */
+ len -= sizeof (unichar);
+
+ if (length != NULL)
+ *length = len / sizeof (unichar);
+}
+
+/* Convert an unicode string to an codepage string. */
+
+void
+codepage_from_unicode (rc_uint_type *length, const unichar *unicode, char **ascii, rc_uint_type cp)
+{
+ rc_uint_type len;
+
+ len = wind_WideCharToMultiByte (cp, unicode, NULL, 0);
+ if (len)
+ {
+ *ascii = (char *) res_alloc (len * sizeof (char));
+ wind_WideCharToMultiByte (cp, unicode, *ascii, len);
+ }
+ /* Discount the trailing '/0'. If MultiByteToWideChar failed,
+ this will set *length to -1. */
+ len--;
+
+ if (length != NULL)
+ *length = len;
+}
+
+#ifdef HAVE_ICONV_H
+static int
+iconv_onechar (iconv_t cd, const char *s, char *d, int d_len, const char **n_s, char **n_d)
+{
+ int i;
+
+ for (i = 1; i <= 32; i++)
+ {
+ char *tmp_d = d;
+ const char *tmp_s = s;
+ size_t ret;
+ size_t s_left = (size_t) i;
+ size_t d_left = (size_t) d_len;
+
+ ret = iconv (cd, & tmp_s, & s_left, & tmp_d, & d_left);
+
+ if (ret != (size_t) -1)
+ {
+ *n_s = tmp_s;
+ *n_d = tmp_d;
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static const char *
+wind_iconv_cp (rc_uint_type cp)
+{
+ const local_iconv_map *lim = wind_find_codepage_info (cp);
+
+ if (!lim)
+ return NULL;
+ return lim->iconv_name;
+}
+#endif /* HAVE_ICONV_H */
+
+static rc_uint_type
+wind_MultiByteToWideChar (rc_uint_type cp, const char *mb,
+ unichar *u, rc_uint_type u_len)
+{
+ rc_uint_type ret = 0;
+
+#if defined (_WIN32) || defined (__CYGWIN__)
+ ret = (rc_uint_type) MultiByteToWideChar (cp, MB_PRECOMPOSED,
+ mb, -1, u, u_len);
+ /* Convert to bytes. */
+ ret *= sizeof (unichar);
+
+#elif defined (HAVE_ICONV_H)
+ int first = 1;
+ char tmp[32];
+ char *p_tmp;
+ const char *iconv_name = wind_iconv_cp (cp);
+
+ if (!mb || !iconv_name)
+ return 0;
+ iconv_t cd = iconv_open ("UTF-16", iconv_name);
+
+ while (1)
+ {
+ int iret;
+ const char *n_mb;
+ char *n_tmp;
+
+ p_tmp = tmp;
+ iret = iconv_onechar (cd, (const char *) mb, p_tmp, 32, & n_mb, & n_tmp);
+ if (first)
+ {
+ first = 0;
+ continue;
+ }
+ if (!iret)
+ {
+ size_t l_tmp = (size_t) (n_tmp - p_tmp);
+
+ if (u)
+ {
+ if ((size_t) u_len < l_tmp)
+ break;
+ memcpy (u, tmp, l_tmp);
+ u += l_tmp/2;
+ u_len -= l_tmp;
+ }
+ ret += l_tmp;
+ }
+ else
+ break;
+ if (tmp[0] == 0 && tmp[1] == 0)
+ break;
+ mb = n_mb;
+ }
+ iconv_close (cd);
+#else
+ if (cp)
+ ret = 0;
+ ret = strlen (mb) + 1;
+ ret *= sizeof (unichar);
+ if (u != NULL && u_len != 0)
+ {
+ do
+ {
+ *u++ = ((unichar) *mb) & 0xff;
+ --u_len; mb++;
+ }
+ while (u_len != 0 && mb[-1] != 0);
+ }
+ if (u != NULL && u_len != 0)
+ *u = 0;
+#endif
+ return ret;
+}
+
+static rc_uint_type
+wind_WideCharToMultiByte (rc_uint_type cp, const unichar *u, char *mb, rc_uint_type mb_len)
+{
+ rc_uint_type ret = 0;
+#if defined (_WIN32) || defined (__CYGWIN__)
+ WINBOOL used_def = FALSE;
+
+ ret = (rc_uint_type) WideCharToMultiByte (cp, 0, u, -1, mb, mb_len,
+ NULL, & used_def);
+#elif defined (HAVE_ICONV_H)
+ int first = 1;
+ char tmp[32];
+ char *p_tmp;
+ const char *iconv_name = wind_iconv_cp (cp);
+
+ if (!u || !iconv_name)
+ return 0;
+ iconv_t cd = iconv_open (iconv_name, "UTF-16");
+
+ while (1)
+ {
+ int iret;
+ const char *n_u;
+ char *n_tmp;
+
+ p_tmp = tmp;
+ iret = iconv_onechar (cd, (const char *) u, p_tmp, 32, &n_u, & n_tmp);
+ if (first)
+ {
+ first = 0;
+ continue;
+ }
+ if (!iret)
+ {
+ size_t l_tmp = (size_t) (n_tmp - p_tmp);
+
+ if (mb)
+ {
+ if ((size_t) mb_len < l_tmp)
+ break;
+ memcpy (mb, tmp, l_tmp);
+ mb += l_tmp;
+ mb_len -= l_tmp;
+ }
+ ret += l_tmp;
+ }
+ else
+ break;
+ if (u[0] == 0)
+ break;
+ u = (const unichar *) n_u;
+ }
+ iconv_close (cd);
+#else
+ if (cp)
+ ret = 0;
+
+ while (u[ret] != 0)
+ ++ret;
+
+ ++ret;
+
+ if (mb)
+ {
+ while (*u != 0 && mb_len != 0)
+ {
+ if (u[0] == (u[0] & 0x7f))
+ *mb++ = (char) u[0];
+ else
+ *mb++ = '_';
+ ++u; --mb_len;
+ }
+ if (mb_len != 0)
+ *mb = 0;
+ }
+#endif
+ return ret;
}
diff --git a/binutils/winduni.h b/binutils/winduni.h
index 71cd055a9daf..82c3022831a8 100644
--- a/binutils/winduni.h
+++ b/binutils/winduni.h
@@ -1,6 +1,8 @@
/* winduni.h -- header file for unicode support for windres program.
- Copyright 1997, 1998, 2002 Free Software Foundation, Inc.
+ Copyright 1997, 1998, 2002, 2007
+ Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
+ Rewritten by Kai Tietz, Onevision.
This file is part of GNU Binutils.
@@ -21,6 +23,9 @@
#include "ansidecl.h"
+#ifndef WINDUNI_H
+#define WINDUNI_H
+
/* This header file declares the types and functions we use for
unicode support in windres. Our unicode support is very limited at
present.
@@ -30,31 +35,105 @@
that would conflict with the definitions of Windows macros we
already have in windres.h. */
+/* Use bfd_size_type to ensure a sufficient number of bits. */
+#ifndef DEFINED_RC_UINT_TYPE
+#define DEFINED_RC_UINT_TYPE
+typedef bfd_size_type rc_uint_type;
+#endif
+
/* We use this type to hold a unicode character. */
typedef unsigned short unichar;
/* Escape character translations. */
-#define ESCAPE_A (007)
-#define ESCAPE_B (010)
-#define ESCAPE_F (014)
-#define ESCAPE_N (012)
-#define ESCAPE_R (015)
-#define ESCAPE_T (011)
-#define ESCAPE_V (013)
+#define ESCAPE_A 007
+#define ESCAPE_B 010
+#define ESCAPE_F 014
+#define ESCAPE_N 012
+#define ESCAPE_R 015
+#define ESCAPE_T 011
+#define ESCAPE_V 013
/* Convert an ASCII string to a unicode string. */
+extern void unicode_from_ascii (rc_uint_type *, unichar **, const char *);
+
+/* Convert an unicode string to an ASCII string. */
+extern void ascii_from_unicode (rc_uint_type *, const unichar *, char **);
+
+/* Duplicate a unicode string by using res_alloc. */
+extern unichar *unichar_dup (const unichar *);
+
+/* Duplicate a unicode string by using res_alloc and make it uppercase. */
+extern unichar *unichar_dup_uppercase (const unichar *);
-extern void unicode_from_ascii
- PARAMS ((int *, unichar **, const char *));
+/* The count of unichar elements. */
+extern rc_uint_type unichar_len (const unichar *);
/* Print a unicode string to a file. */
+extern void unicode_print (FILE *, const unichar *, rc_uint_type);
+
+/* Print a ascii string to a file. */
+extern void ascii_print (FILE *, const char *, rc_uint_type);
+
+/* Print a quoted unicode string to a file. */
+extern void unicode_print_quoted (FILE *, const unichar *, rc_uint_type);
+
+#ifndef CP_UTF8
+#define CP_UTF7 65000 /* UTF-7 translation. */
+#define CP_UTF8 65001 /* UTF-8 translation. */
+#endif
+
+#ifndef CP_UTF16
+#define CP_UTF16 65002 /* UTF-16 translation. */
+#endif
+
+#ifndef CP_ACP
+#define CP_ACP 0 /* Default to ANSI code page. */
+#endif
-extern void unicode_print PARAMS ((FILE *, const unichar *, int));
+#ifndef CP_OEM
+#define CP_OEM 1 /* Default OEM code page. */
+#endif
+
+/* Specifies the default codepage to be used for unicode
+ transformations. By default this is CP_ACP. */
+extern rc_uint_type wind_default_codepage;
+
+/* Specifies the currently used codepage for unicode
+ transformations. By default this is CP_ACP. */
+extern rc_uint_type wind_current_codepage;
+
+typedef struct wind_language_t
+{
+ unsigned id;
+ unsigned doscp;
+ unsigned wincp;
+ const char *name;
+ const char *country;
+} wind_language_t;
+
+extern const wind_language_t *wind_find_language_by_id (unsigned);
+extern int unicode_is_valid_codepage (rc_uint_type);
+
+typedef struct local_iconv_map
+{
+ rc_uint_type codepage;
+ const char * iconv_name;
+} local_iconv_map;
+
+extern const local_iconv_map *wind_find_codepage_info (unsigned);
+
+/* Convert an Codepage string to a unicode string. */
+extern void unicode_from_codepage (rc_uint_type *, unichar **, const char *, rc_uint_type);
+
+/* Convert an unicode string to an codepage string. */
+extern void codepage_from_unicode (rc_uint_type *, const unichar *, char **, rc_uint_type);
/* Windres support routine called by unicode_from_ascii. This is both
here and in windres.h. It should probably be in a separate header
file, but it hardly seems worth it for one function. */
-extern PTR res_alloc PARAMS ((size_t));
+extern void * res_alloc (rc_uint_type);
+
+#endif
diff --git a/binutils/wrstabs.c b/binutils/wrstabs.c
index 13f01dac725c..325047ea71e6 100644
--- a/binutils/wrstabs.c
+++ b/binutils/wrstabs.c
@@ -1,5 +1,5 @@
/* wrstabs.c -- Output stabs debugging information
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2006
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2006, 2007
Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>.
@@ -23,13 +23,12 @@
/* This file contains code which writes out stabs debugging
information. */
-#include <stdio.h>
+#include "sysdep.h"
#include <assert.h>
-
#include "bfd.h"
-#include "bucomm.h"
#include "libiberty.h"
#include "safe-ctype.h"
+#include "bucomm.h"
#include "debug.h"
#include "budbg.h"
#include "aout/aout64.h"
diff --git a/compile b/compile
new file mode 100755
index 000000000000..1b1d23216958
--- /dev/null
+++ b/compile
@@ -0,0 +1,142 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand `-c -o'.
+
+scriptversion=2005-05-14.22
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# 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 to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand `-c -o'.
+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file `INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+esac
+
+ofile=
+cfile=
+eat=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as `compile cc -o foo foo.c'.
+ # So we strip `-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no `-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # `.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use `[/.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/config-ml.in b/config-ml.in
index 937273173c03..cc9cf66cebcd 100644
--- a/config-ml.in
+++ b/config-ml.in
@@ -108,6 +108,11 @@ ml_realsrcdir=${srcdir}
ml_verbose=--verbose
for option in ${ac_configure_args}
do
+ # strip single quotes surrounding individual options
+ case $option in
+ \'*\') eval option=$option ;;
+ esac
+
case $option in
--*) ;;
-*) option=-$option ;;
@@ -546,6 +551,7 @@ multi-do:
flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \
CFLAGS="$(CFLAGS) $${flags}" \
+ CCASFLAGS="$(CCASFLAGS) $${flags}" \
FCFLAGS="$(FCFLAGS) $${flags}" \
FFLAGS="$(FFLAGS) $${flags}" \
ADAFLAGS="$(ADAFLAGS) $${flags}" \
@@ -889,7 +895,7 @@ if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then
if eval ${ml_config_env} ${ml_config_shell} ${ml_recprog} \
--with-multisubdir=${ml_dir} --with-multisrctop=${multisrctop} \
- ${ac_configure_args} ${ml_srcdiroption} ; then
+ ${ac_configure_args} ${ml_config_env} ${ml_srcdiroption} ; then
true
else
exit 1
diff --git a/config.guess b/config.guess
index 17690aea3429..951383e35544 100755
--- a/config.guess
+++ b/config.guess
@@ -1,9 +1,10 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+# Inc.
-timestamp='2006-01-02'
+timestamp='2007-05-17'
# 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
@@ -106,7 +107,7 @@ set_cc_for_build='
trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
@@ -160,6 +161,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
@@ -210,7 +212,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
exit ;;
macppc:MirBSD:*:*)
- echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
exit ;;
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
@@ -328,7 +330,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
- i86pc:SunOS:5.*:*)
+ i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*)
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
sun4*:SunOS:6*:*)
@@ -770,6 +772,8 @@ EOF
case ${UNAME_MACHINE} in
pc98)
echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
*)
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
esac
@@ -777,7 +781,7 @@ EOF
i*:CYGWIN*:*)
echo ${UNAME_MACHINE}-pc-cygwin
exit ;;
- i*:MINGW*:*)
+ *:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit ;;
i*:windows32*:*)
@@ -787,9 +791,15 @@ EOF
i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32
exit ;;
- x86:Interix*:[345]*)
- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
- exit ;;
+ *:Interix*:[3456]*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ EM64T | authenticamd)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
echo i${UNAME_MACHINE}-pc-mks
exit ;;
@@ -825,6 +835,9 @@ EOF
arm*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
cris:Linux:*:*)
echo cris-axis-linux-gnu
exit ;;
@@ -859,7 +872,11 @@ EOF
#endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^CPU/{s: ::g;p;}'`"
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
;;
mips64:Linux:*:*)
@@ -878,7 +895,11 @@ EOF
#endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^CPU/{s: ::g;p;}'`"
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
;;
or32:Linux:*:*)
@@ -933,6 +954,9 @@ EOF
x86_64:Linux:*:*)
echo x86_64-unknown-linux-gnu
exit ;;
+ xtensa:Linux:*:*)
+ echo xtensa-unknown-linux-gnu
+ exit ;;
i*86:Linux:*:*)
# The BFD linker knows what the default object file format is, so
# first see if it will tell us. cd to the root directory to prevent
@@ -975,7 +999,7 @@ EOF
LIBC=gnulibc1
# endif
#else
- #if defined(__INTEL_COMPILER) || defined(__PGI)
+ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
LIBC=gnu
#else
LIBC=gnuaout
@@ -985,7 +1009,11 @@ EOF
LIBC=dietlibc
#endif
EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^LIBC/{s: ::g;p;}'`"
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^LIBC/{
+ s: ::g
+ p
+ }'`"
test x"${LIBC}" != x && {
echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
exit
@@ -1187,6 +1215,15 @@ EOF
SX-6:SUPER-UX:*:*)
echo sx6-nec-superux${UNAME_RELEASE}
exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
Power*:Rhapsody:*:*)
echo powerpc-apple-rhapsody${UNAME_RELEASE}
exit ;;
diff --git a/config.rpath b/config.rpath
new file mode 100755
index 000000000000..937edf5ecb59
--- /dev/null
+++ b/config.rpath
@@ -0,0 +1,548 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+# Copyright 1996-2003 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# 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.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ mingw* | pw32* | os2*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ newsos6)
+ ;;
+ linux*)
+ case $CC in
+ icc|ecc)
+ wl='-Wl,'
+ ;;
+ ccc)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ sco3.2v5*)
+ ;;
+ solaris*)
+ wl='-Wl,'
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ case "$host_os" in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can use
+ # them.
+ ld_shlibs=no
+ ;;
+ beos*)
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ *)
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = yes; then
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct=yes
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+ bsdi4*)
+ ;;
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ hardcode_direct=no
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+ freebsd2.2*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ freebsd2*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10* | hpux11*)
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=no
+ ;;
+ ia64*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=no
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ openbsd*)
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ sco3.2v5*)
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4.2uw2*)
+ hardcode_direct=yes
+ hardcode_minus_L=no
+ ;;
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ ;;
+ sysv5*)
+ hardcode_libdir_flag_spec=
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ ;;
+ aix4* | aix5*)
+ ;;
+ amigaos*)
+ ;;
+ beos*)
+ ;;
+ bsdi4*)
+ ;;
+ cygwin* | mingw* | pw32*)
+ shrext=.dll
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ ;;
+ dgux*)
+ ;;
+ freebsd1*)
+ ;;
+ freebsd*)
+ ;;
+ gnu*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case "$host_cpu" in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux*)
+ ;;
+ netbsd*)
+ ;;
+ newsos6)
+ ;;
+ nto-qnx)
+ ;;
+ openbsd*)
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ ;;
+ osf3* | osf4* | osf5*)
+ ;;
+ sco3.2v5*)
+ ;;
+ solaris*)
+ ;;
+ sunos4*)
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ ;;
+ sysv4*MP*)
+ ;;
+ uts4*)
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/config.sub b/config.sub
index a4e8a94a3351..c060f4483392 100755
--- a/config.sub
+++ b/config.sub
@@ -1,9 +1,10 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+# Inc.
-timestamp='2006-01-02'
+timestamp='2007-04-29'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -240,15 +241,16 @@ case $basic_machine in
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
| bfin \
| c4x | clipper \
| d10v | d30v | dlx | dsp16xx \
- | fr30 | frv \
+ | fido | fr30 | frv \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
- | m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore | mep \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
@@ -268,26 +270,25 @@ case $basic_machine in
| mn10200 | mn10300 \
| mt \
| msp430 \
+ | nios | nios2 \
| ns16k | ns32k \
| or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
| pyramid \
- | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b \
- | strongarm \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu | strongarm \
| tahoe | thumb | tic4x | tic80 | tron \
| v850 | v850e \
| we32k \
- | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
| z8k)
basic_machine=$basic_machine-unknown
;;
- m32c)
- basic_machine=$basic_machine-unknown
- ;;
m6811 | m68hc11 | m6812 | m68hc12)
# Motorola 68HC11/12.
basic_machine=$basic_machine-unknown
@@ -317,18 +318,18 @@ case $basic_machine in
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* \
+ | avr-* | avr32-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
| clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
| elxsi-* \
- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
- | m32r-* | m32rle-* \
+ | m32c-* | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
| m88110-* | m88k-* | maxq-* | mcore-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
@@ -350,29 +351,28 @@ case $basic_machine in
| mmix-* \
| mt-* \
| msp430-* \
+ | nios-* | nios2-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
| pyramid-* \
| romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
| tahoe-* | thumb-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tron-* \
| v850-* | v850e-* | vax-* \
| we32k-* \
- | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
| xstormy16-* | xtensa-* \
| ymp-* \
| z8k-*)
;;
- m32c-*)
- ;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
386bsd)
@@ -683,6 +683,10 @@ case $basic_machine in
basic_machine=i386-pc
os=-mingw32
;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
miniframe)
basic_machine=m68000-convergent
;;
@@ -910,6 +914,10 @@ case $basic_machine in
sb1el)
basic_machine=mipsisa64sb1el-unknown
;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
sei)
basic_machine=mips-sei
os=-seiux
@@ -921,6 +929,9 @@ case $basic_machine in
basic_machine=sh-hitachi
os=-hms
;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
sh64)
basic_machine=sh64-unknown
;;
@@ -1126,7 +1137,7 @@ case $basic_machine in
sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
basic_machine=sh-unknown
;;
- sparc | sparcv8 | sparcv9 | sparcv9b)
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
basic_machine=sparc-sun
;;
cydra)
@@ -1215,7 +1226,7 @@ case $os in
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos*)
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1367,6 +1378,12 @@ else
# system, and we'll never get to this point.
case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
*-acorn)
os=-riscix1.2
;;
@@ -1376,9 +1393,9 @@ case $basic_machine in
arm*-semi)
os=-aout
;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
# This must come before the *-dec entry.
pdp10-*)
os=-tops20
@@ -1404,6 +1421,9 @@ case $basic_machine in
m68*-cisco)
os=-aout
;;
+ mep-*)
+ os=-elf
+ ;;
mips*-cisco)
os=-elf
;;
diff --git a/config/ChangeLog b/config/ChangeLog
index 1ddcfd41628d..3c43dcde1e60 100644
--- a/config/ChangeLog
+++ b/config/ChangeLog
@@ -1,7 +1,169 @@
+2007-06-27 Mike Stump <mrs@apple.com>
+
+ * acx.m4 (ACX_CHECK_INSTALLED_TARGET_TOOL): Fixup logic for cross
+ builds.
+
+2007-06-20 Mike Stump <mrs@apple.com>
+
+ * acx.m4 (NCN_STRICT_CHECK_TARGET_TOOLS): Fix incremental builds.
+ (ACX_HAVE_GCC_FOR_TARGET): Likewise.
+
+2007-06-14 Paolo Bonzini <bonzini@gnu.org>
+
+ * acx.m4 (ACX_CHECK_PROG_VER): Remove duplicate lines.
+
+2007-06-04 Olivier Hainque <hainque@adacore.com>
+
+ * mh-ppc-aix: Add default ADAFLAGS to BOOT_ADAFLAGS.
+
+2007-05-27 Paolo Bonzini <bonzini@gnu.org>
+
+ * confsubdir.m4: Move here from newlib.
+
+2007-05-23 Paolo Bonzini <bonzini@gnu.org>
+
+ PR bootstrap/32009
+ * mh-ppc-darwin: Temporarily disable.
+
+2007-04-11 Kai Tietz <kai.tietz@onevision.com>
+
+ * stdint.m4: Make template compatible with older cygwin
+ types.h, wrapping each type in a __XXX_t_defined #ifdef.
+
+2007-03-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ * acx.m4 (ACX_BUGURL): Set BUGURL first. Quote $BUGURL first
+ when setting REPORT_BUGS_TEXI.
+
+2007-03-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * acx.m4 (ACX_BUGURL): Replace "@" with "@@" for
+ REPORT_BUGS_TEXI.
+
+2007-03-23 Joseph Myers <joseph@codesourcery.com>
+
+ * acx.m4 (ACX_PKGVERSION, ACX_BUGURL): Define.
+
+2007-03-07 Andreas Schwab <schwab@suse.de>
+
+ * acx.m4 (GCC_TARGET_TOOL): Expand backquotes outside
+ AC_MSG_RESULT.
+
+2007-02-27 Alan Modra <amodra@bigpond.net.au>
+
+ * mt-spu (all-ld): Depend on all-binutils.
+
+2007-02-18 Alexandre Oliva <aoliva@redhat.com>
+
+ * acx.m4 (NCN_STRICT_CHECK_TOOLS): Mark environment variable as
+ precious. Prefer it over a cached value. Use cached value
+ verbosely.
+ (NCN_STRICT_CHECK_TARGET_TOOLS): Likewise. Don't override
+ environment variable with build-time tools.
+
+2006-12-11 Alan Modra <amodra@bigpond.net.au>
+
+ * mt-spu: New file.
+
+2007-02-09 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * acx.m4 (ACX_CHECK_INSTALLED_TARGET_TOOL): Avoid AC_PATH_PROG
+ with an empty path.
+
+2007-02-07 Bruno Haible <bruno@clisp.org>
+
+ PR libgomp/28468
+ * config/tls.m4 (GCC_CHECK_TLS): Also check whether the libc supports
+ TLS via __thread.
+
+2007-01-31 Daniel Franke <franke.daniel@gmail.com>
+
+ PR libgomp/30546
+ * acx.m4 (ACX_PROG_CHECK_VER): Locate a program and check that its
+ version is acceptable.
+
+2007-01-27 Paolo Bonzini <bonzini@gnu.org>
+
+ * depstand.m4 (ZW_CREATE_DEPDIR): Use mkinstalldirs to make
+ directory.
+
+2007-01-23 Richard Guenther <rguenther@suse.de>
+
+ PR bootstrap/30541
+ * config/acx.m4 (ACX_PROG_GNAT): Check for gnatmake.
+
+2007-01-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-symbolic.m4: New.
+
+2007-01-11 Paolo Bonzini <bonzini@gnu.org>
+
+ * warnings.m4: Use m4_expand_once to clear the AC_SUBST'ed variable.
+ (ACX_PROG_CC_WARNINGS_ARE_ERRORS): Fix typo. Add optional 2nd argument.
+
+2007-01-11 Paolo Bonzini <bonzini@gnu.org>
+
+ * warnings.m4: Add second parameter with name of variable.
+ Always append to the variable if it exists.
+
+2007-01-01 Mike Stump <mrs@apple.com>
+
+ * mh-ppc-darwin: Remove support for building with Apple's gcc-3.1.
+
+2006-12-04 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * tls.m4 (GCC_CHECK_TLS): Do not test TLS with static linking
+ if static linking doesn't even work.
+
+2006-11-13 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * tls.m4 (GCC_CHECK_TLS): Fall back to a link test.
+
+2006-10-14 Geoffrey Keating <geoffk@apple.com>
+
+ * multi.m4: New file, from automake version 2 branch.
+
+2006-09-18 Tom Tromey <tromey@redhat.com>
+
+ * tls.m4 (GCC_CHECK_TLS): Pass empty argument as "help arg" to
+ GCC_ENABLE.
+
+2006-07-25 Paolo Bonzini <bonzini@gnu.org>
+
+ PR build/26188
+ * stdint.m4: Test for uintptr_t even on systems with uint64_t or uint32_t.
+
+2006-07-21 Steve Ellcey <sje@cup.hp.com>
+
+ PR target/26792
+ * unwind_ipinfo.m4: New.
+
+2006-07-21 David Daney <ddaney@avtrex.com>
+
+ PR libgcj/28426
+ * gxx-include-dir.m4: Use target_alias in path for cross build.
+
+2006-07-18 Paolo Bonzini <bonzini@gnu.org>
+
+ * acx.m4: Support --with-build-libsubdir and AC_SUBST
+ build_libsubdir.
+
+2006-06-13 Richard Earnshaw <rearnsha@arm.com>
+ Alexandre Oliva <aoliva@redhat.com>
+
+ * gettext-sister.m4 (ZW_GNU_GETTEXT_SISTER_DIR): Add optional
+ argument for where to search for NLS config file.
+
+2006-05-31 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * gettext-sister.m4 (ZW_GNU_GETTEXT_SISTER_DIR): Provide some
+ defines otherwise gotten from AM_GNU_GETTEXT. Remove the
+ po/ prefix from CATALOGS.
+
2006-02-14 Paolo Bonzini <bonzini@gnu.org>
- Andreas Schwab <schwab@suse.de>
+ Andreas Schwab <schwab@suse.de>
- * acx.m4 (NCN_STRICT_CHECK_TARGET_TOOLS): Use correct program name.
+ * acx.m4 (NCN_STRICT_CHECK_TARGET_TOOLS): Use correct program name.
(ACX_CHECK_INSTALLED_TARGET_TOOL): Likewise, and always set $1.
2006-01-26 Paolo Bonzini <bonzini@gnu.org>
@@ -15,19 +177,19 @@
2006-01-02 Paolo Bonzini <bonzini@gnu.org>
- PR target/25259
- * stdint.m4: New.
+ PR target/25259
+ * stdint.m4: New.
2005-12-20 Paolo Bonzini <bonzini@gnu.org>
- Revert Ada-related part of the previous change.
+ Revert Ada-related part of the previous change.
- * mt-ppc-aix: Delete.
+ * mt-ppc-aix: Delete.
2005-12-19 Paolo Bonzini <bonzini@gnu.org>
-
- * mt-ppc-aix, mh-ppc-aix: New.
-
+
+ * mt-ppc-aix, mh-ppc-aix: New.
+
2005-12-05 Paolo Bonzini <bonzini@gnu.org>
* acx.m4 (GCC_TARGET_TOOL): New.
diff --git a/config/acx.m4 b/config/acx.m4
index 7c4c21386f18..c8a32c9f9ed5 100644
--- a/config/acx.m4
+++ b/config/acx.m4
@@ -74,8 +74,22 @@ dnl # amount to a lot more with autoconf 2.5x.
AC_DEFUN([GCC_TOPLEV_SUBDIRS],
[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_TARGET]) []dnl
AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl
+
+# post-stage1 host modules use a different CC_FOR_BUILD so, in order to
+# have matching libraries, they should use host libraries: Makefile.tpl
+# arranges to pass --with-build-libsubdir=$(HOST_SUBDIR).
+# However, they still use the build modules, because the corresponding
+# host modules (e.g. bison) are only built for the host when bootstrap
+# finishes. So:
+# - build_subdir is where we find build modules, and never changes.
+# - build_libsubdir is where we find build libraries, and can be overridden.
+
# Prefix 'build-' so this never conflicts with target_subdir.
build_subdir="build-${build_noncanonical}"
+AC_ARG_WITH(build-libsubdir,
+[ --with-build-libsubdir=[DIR] Directory where to find libraries for build system],
+build_libsubdir="$withval",
+build_libsubdir="$build_subdir")
# --srcdir=. covers the toplevel, while "test -d" covers the subdirectories
if ( test $srcdir = . && test -d gcc ) \
|| test -d $srcdir/../host-${host_noncanonical}; then
@@ -85,6 +99,7 @@ else
fi
# No prefix.
target_subdir=${target_noncanonical}
+AC_SUBST([build_libsubdir]) []dnl
AC_SUBST([build_subdir]) []dnl
AC_SUBST([host_subdir]) []dnl
AC_SUBST([target_subdir]) []dnl
@@ -108,6 +123,20 @@ test -n "$target_alias" && ncn_target_tool_prefix=$target_alias-
AC_DEFUN([NCN_STRICT_CHECK_TOOLS],
[AC_REQUIRE([_NCN_TOOL_PREFIXES]) []dnl
+AC_ARG_VAR([$1], [$1 for the host])
+
+if test -n "[$]$1"; then
+ ac_cv_prog_$1=[$]$1
+elif test -n "$ac_cv_prog_$1"; then
+ $1=$ac_cv_prog_$1
+fi
+
+if test -n "$ac_cv_prog_$1"; then
+ for ncn_progname in $2; do
+ AC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4])
+ done
+fi
+
for ncn_progname in $2; do
if test -n "$ncn_tool_prefix"; then
AC_CHECK_PROG([$1], [${ncn_tool_prefix}${ncn_progname}],
@@ -135,7 +164,21 @@ fi
AC_DEFUN([NCN_STRICT_CHECK_TARGET_TOOLS],
[AC_REQUIRE([_NCN_TOOL_PREFIXES]) []dnl
-if test -n "$with_build_time_tools"; then
+AC_ARG_VAR([$1], patsubst([$1], [_FOR_TARGET$], [])[ for the target])
+
+if test -n "[$]$1"; then
+ ac_cv_prog_$1=[$]$1
+elif test -n "$ac_cv_prog_$1"; then
+ $1=$ac_cv_prog_$1
+fi
+
+if test -n "$ac_cv_prog_$1"; then
+ for ncn_progname in $2; do
+ AC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4])
+ done
+fi
+
+if test -z "$ac_cv_prog_$1" && test -n "$with_build_time_tools"; then
for ncn_progname in $2; do
AC_MSG_CHECKING([for ${ncn_progname} in $with_build_time_tools])
if test -x $with_build_time_tools/${ncn_progname}; then
@@ -168,6 +211,8 @@ if test -z "$ac_cv_prog_$1" ; then
else
$1="${ncn_target_tool_prefix}[$]2"
fi], [$1="$3"])
+else
+ $1="$ac_cv_prog_$1"
fi
]) []dnl # NCN_STRICT_CHECK_TARGET_TOOLS
@@ -281,11 +326,11 @@ if test -z "$ac_cv_path_$1" ; then
fi
elif test $build != $host && test $have_gcc_for_target = yes; then
$1=`$GCC_FOR_TARGET --print-prog-name=$2`
- test [$]$1=$2 && $1=
- ac_cv_path_$1=[$]$1
+ test [$]$1 = $2 && $1=
+ test -n "[$]$1" && ac_cv_path_$1=[$]$1
fi
fi
-if test -z "$ac_cv_path_$1" ; then
+if test -z "$ac_cv_path_$1" && test -n "$gcc_cv_tool_dirs"; then
AC_PATH_PROG([$1], [$2], [], [$gcc_cv_tool_dirs])
fi
if test -z "$ac_cv_path_$1" ; then
@@ -315,11 +360,12 @@ ac_c_preproc_warn_flag=yes])# AC_PROG_CPP_WERROR
# understands Ada. We use the user's CC setting, already found.
#
# Sets the shell variable have_gnat to yes or no as appropriate, and
-# substitutes GNATBIND.
+# substitutes GNATBIND and GNATMAKE.
AC_DEFUN([ACX_PROG_GNAT],
[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])
AC_REQUIRE([AC_PROG_CC])
AC_CHECK_TOOL(GNATBIND, gnatbind, no)
+AC_CHECK_TOOL(GNATMAKE, gnatmake, no)
AC_CACHE_CHECK([whether compiler driver understands Ada],
acx_cv_cc_gcc_supports_ada,
[cat >conftest.adb <<EOF
@@ -340,7 +386,7 @@ if test x"$errors" = x && test -f conftest.$ac_objext; then
fi
rm -f conftest.*])
-if test x$GNATBIND != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then
+if test x$GNATBIND != xno && test x$GNATMAKE != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then
have_gnat=yes
else
have_gnat=no
@@ -441,7 +487,8 @@ AC_DEFUN([GCC_TARGET_TOOL],
if test "x${build}" != "x${host}" ; then
if expr "x[$]$2" : "x/" > /dev/null; then
# We already found the complete path
- AC_MSG_RESULT(pre-installed in `dirname [$]$2`)
+ ac_dir=`dirname [$]$2`
+ AC_MSG_RESULT(pre-installed in $ac_dir)
else
# Canadian cross, just use what we found
AC_MSG_RESULT(pre-installed)
@@ -464,7 +511,8 @@ else
AC_MSG_RESULT(just compiled)
el])if expr "x[$]$2" : "x/" > /dev/null; then
# We already found the complete path
- AC_MSG_RESULT(pre-installed in `dirname [$]$2`)
+ ac_dir=`dirname [$]$2`
+ AC_MSG_RESULT(pre-installed in $ac_dir)
elif test "x$target" = "x$host"; then
# We can use an host tool
$2='$($3)'
@@ -473,4 +521,77 @@ else
# We need a cross tool
AC_MSG_RESULT(pre-installed)
fi
-fi])
+fi
+AC_SUBST($2)])
+
+
+dnl Locate a program and check that its version is acceptable.
+dnl ACX_PROG_CHECK_VER(var, name, version-switch,
+dnl version-extract-regexp, version-glob)
+AC_DEFUN([ACX_CHECK_PROG_VER],[
+ AC_CHECK_PROG([$1], [$2], [$2])
+ if test -n "[$]$1"; then
+ # Found it, now check the version.
+ AC_CACHE_CHECK([for modern $2],
+ [gcc_cv_prog_$2_modern],
+ [ac_prog_version=`eval [$]$1 $3 2>&1 |
+ sed -n 's/^.*patsubst([[$4]],/,\/).*$/\1/p'`
+
+ [case $ac_prog_version in
+ '') gcc_cv_prog_$2_modern=no;;
+ $5) gcc_cv_prog_$2_modern=yes;;
+ *) gcc_cv_prog_$2_modern=no;;
+ esac]
+ ])
+ else
+ gcc_cv_prog_$2_modern=no
+ fi
+ if test $gcc_cv_prog_$2_modern = no; then
+ $1="${CONFIG_SHELL-/bin/sh} $ac_aux_dir/missing $2"
+ fi
+])
+
+dnl Support the --with-pkgversion configure option.
+dnl ACX_PKGVERSION(default-pkgversion)
+AC_DEFUN([ACX_PKGVERSION],[
+ AC_ARG_WITH(pkgversion,
+ AS_HELP_STRING([--with-pkgversion=PKG],
+ [Use PKG in the version string in place of "$1"]),
+ [case "$withval" in
+ yes) AC_MSG_ERROR([package version not specified]) ;;
+ no) PKGVERSION= ;;
+ *) PKGVERSION="($withval) " ;;
+ esac],
+ PKGVERSION="($1) "
+ )
+ AC_SUBST(PKGVERSION)
+])
+
+dnl Support the --with-bugurl configure option.
+dnl ACX_BUGURL(default-bugurl)
+AC_DEFUN([ACX_BUGURL],[
+ AC_ARG_WITH(bugurl,
+ AS_HELP_STRING([--with-bugurl=URL],
+ [Direct users to URL to report a bug]),
+ [case "$withval" in
+ yes) AC_MSG_ERROR([bug URL not specified]) ;;
+ no) BUGURL=
+ ;;
+ *) BUGURL="$withval"
+ ;;
+ esac],
+ BUGURL="$1"
+ )
+ case ${BUGURL} in
+ "")
+ REPORT_BUGS_TO=
+ REPORT_BUGS_TEXI=
+ ;;
+ *)
+ REPORT_BUGS_TO="<$BUGURL>"
+ REPORT_BUGS_TEXI=@uref{`echo "$BUGURL" | sed 's/@/@@/g'`}
+ ;;
+ esac;
+ AC_SUBST(REPORT_BUGS_TO)
+ AC_SUBST(REPORT_BUGS_TEXI)
+])
diff --git a/config/confsubdir.m4 b/config/confsubdir.m4
new file mode 100644
index 000000000000..4e1e8c4641c5
--- /dev/null
+++ b/config/confsubdir.m4
@@ -0,0 +1,127 @@
+dnl Fix Autoconf-2.59 AC_CONFIG_SUBDIRS whitespace mangling,
+dnl by overriding the broken internal Autoconf macro with a
+dnl backport of the 2.60 fix.
+dnl
+dnl This file should be a no-op for Autoconf versions != 2.59.
+dnl It can be removed once the complete tree has moved to a
+dnl newer Autoconf version.
+
+dnl m4_PACKAGE_VERSION is an undocumented Autoconf macro.
+dnl We use it because this fix is intended for 2.59 only.
+dnl A feature test for the broken AC_CONFIG_SUBDIRS instead
+dnl would be better but is tricky.
+dnl
+dnl Use ifdef/ifelse over m4_ifdef/m4_ifelse to be clean for 2.13.
+dnl Redefine AC_CONFIG_SUBDIRS so aclocal pulls in this file
+dnl when needed.
+
+ifdef([m4_PACKAGE_VERSION],
+[ifelse(m4_PACKAGE_VERSION, [2.59], [
+
+dnl Redefine AC_CONFIG_SUBDIRS so this file is picked up if needed.
+AC_DEFUN([AC_CONFIG_SUBDIRS], defn([AC_CONFIG_SUBDIRS]))
+
+dnl Override the broken macro.
+# _AC_OUTPUT_SUBDIRS
+# ------------------
+# This is a subroutine of AC_OUTPUT, but it does not go into
+# config.status, rather, it is called after running config.status.
+m4_define([_AC_OUTPUT_SUBDIRS],
+[
+#
+# CONFIG_SUBDIRS section, as fixed in confsubdir.m4.
+#
+if test "$no_recursion" != yes; then
+
+ # Remove --cache-file and --srcdir arguments so they do not pile up.
+ ac_sub_configure_args=
+ ac_prev=
+ eval "set x $ac_configure_args"
+ shift
+ for ac_arg
+ do
+ if test -n "$ac_prev"; then
+ ac_prev=
+ continue
+ fi
+ case $ac_arg in
+ -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=*)
+ ;;
+ --config-cache | -C)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ ;;
+ *)
+ case $ac_arg in
+ *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ ac_sub_configure_args="$ac_sub_configure_args '$ac_arg'" ;;
+ esac
+ done
+
+ # Always prepend --prefix to ensure using the same prefix
+ # in subdir configurations.
+ ac_arg="--prefix=$prefix"
+ case $ac_arg in
+ *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ ac_sub_configure_args="$ac_arg $ac_sub_configure_args"
+
+ ac_popdir=`pwd`
+ for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue
+
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ test -d "$srcdir/$ac_dir" || continue
+
+ AC_MSG_NOTICE([configuring in $ac_dir])
+ AS_MKDIR_P(["$ac_dir"])
+ _AC_SRCPATHS(["$ac_dir"])
+
+ cd "$ac_dir"
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ ac_sub_configure=$ac_srcdir/configure.gnu
+ elif test -f "$ac_srcdir/configure"; then
+ ac_sub_configure=$ac_srcdir/configure
+ elif test -f "$ac_srcdir/configure.in"; then
+ # This should be Cygnus configure.
+ ac_sub_configure=$ac_aux_dir/configure
+ else
+ AC_MSG_WARN([no configuration information is in $ac_dir])
+ ac_sub_configure=
+ fi
+
+ # The recursion is here.
+ if test -n "$ac_sub_configure"; then
+ # Make the cache file name correct relative to the subdirectory.
+ case $cache_file in
+ [[\\/]]* | ?:[[\\/]]* ) ac_sub_cache_file=$cache_file ;;
+ *) # Relative path.
+ ac_sub_cache_file=$ac_top_builddir$cache_file ;;
+ esac
+
+ AC_MSG_NOTICE([running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir])
+ # The eval makes quoting arguments work.
+ eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
+ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
+ AC_MSG_ERROR([$ac_sub_configure failed for $ac_dir])
+ fi
+
+ cd "$ac_popdir"
+ done
+fi
+])# _AC_OUTPUT_SUBDIRS
+])])
diff --git a/config/depstand.m4 b/config/depstand.m4
index 8f936e0c2635..beaf2cc7bf00 100644
--- a/config/depstand.m4
+++ b/config/depstand.m4
@@ -1,6 +1,6 @@
## -*- Autoconf -*-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
@@ -132,5 +132,6 @@ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
# As AM_SET_DEPDIR, but also create the directory at config.status time.
AC_DEFUN([ZW_CREATE_DEPDIR],
[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_CONFIG_COMMANDS([depdir], [mkdir $DEPDIR], [DEPDIR=$DEPDIR])
+AC_CONFIG_COMMANDS([depdir], [$SHELL $ac_aux_dir/mkinstalldirs $DEPDIR],
+ [ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR])
])
diff --git a/config/gettext-sister.m4 b/config/gettext-sister.m4
index d10aae80b6b2..e8e6b668416b 100644
--- a/config/gettext-sister.m4
+++ b/config/gettext-sister.m4
@@ -19,8 +19,9 @@ INCINTL= AC_SUBST(INCINTL)
XGETTEXT= AC_SUBST(XGETTEXT)
GMSGFMT= AC_SUBST(GMSGFMT)
POSUB= AC_SUBST(POSUB)
-if test -f ../intl/config.intl; then
- . ../intl/config.intl
+
+if test -f ifelse([$1],,[../intl],[$1])/config.intl; then
+ . ifelse([$1],,[../intl],[$1])/config.intl
fi
AC_MSG_CHECKING([whether NLS is requested])
if test x"$USE_NLS" != xyes; then
@@ -46,8 +47,8 @@ else
# by the backticks, then collapsed again by the double quotes,
# leaving us with one backslash in the sed expression (right
# before the dot that mustn't act as a wildcard).
- cat=`echo $cat | sed -e "s!$srcdir/!!" -e "s!\\\\.po!.gmo!"`
- lang=`echo $cat | sed -e 's!po/!!' -e "s!\\\\.gmo!!"`
+ cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
+ lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
# The user is allowed to set LINGUAS to a list of languages to
# install catalogs for. If it's empty that means "all of them."
if test "x$LINGUAS" = x; then
@@ -63,4 +64,17 @@ else
done
LINGUAS="$XLINGUAS"
AC_MSG_RESULT($LINGUAS)
+
+ dnl Set up some additional variables which our po/Make-in files
+ dnl may need.
+
+ dnl For backward compatibility. Some Makefiles may be using these.
+ DATADIRNAME=share
+ AC_SUBST(DATADIRNAME)
+ INSTOBJEXT=.mo
+ AC_SUBST(INSTOBJEXT)
+ GENCAT=gencat
+ AC_SUBST(GENCAT)
+ CATOBJEXT=.gmo
+ AC_SUBST(CATOBJEXT)
fi])
diff --git a/config/gxx-include-dir.m4 b/config/gxx-include-dir.m4
index 0e6e4ffc3975..4f54d427f7e2 100644
--- a/config/gxx-include-dir.m4
+++ b/config/gxx-include-dir.m4
@@ -17,7 +17,13 @@ case "${with_gxx_include_dir}" in
yes) gxx_include_dir='$(libsubdir)/include/c++' ;;
*)
libstdcxx_incdir='c++/$(gcc_version)'
- gxx_include_dir='$(prefix)/include/$(libstdcxx_incdir)' ;;
+ gxx_include_dir='include/$(libstdcxx_incdir)'
+ if test -n "$with_cross_host" &&
+ test x"$with_cross_host" != x"no"; then
+ gxx_include_dir='${prefix}/${target_alias}/'"$gxx_include_dir"
+ else
+ gxx_include_dir='${prefix}/'"$gxx_include_dir"
+ fi;;
esac ;;
*) gxx_include_dir=${with_gxx_include_dir} ;;
esac
diff --git a/config/ld-symbolic.m4 b/config/ld-symbolic.m4
new file mode 100644
index 000000000000..16d64f9ad383
--- /dev/null
+++ b/config/ld-symbolic.m4
@@ -0,0 +1,45 @@
+dnl Copyright (C) 2007 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License. As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl Set SYMBOLIC_LDFLAGS to -Bsymbolic-functions for GNU linker if it
+dnl is supported.
+AC_DEFUN([ACX_PROG_LD_GNU_SYMBOLIC],
+[AC_CACHE_CHECK([if the GNU linker ($LD) supports -Bsymbolic-functions],
+acl_cv_prog_gnu_ld_symbolic, [
+acl_cv_prog_gnu_ld_symbolic=no
+AC_REQUIRE([AC_LIB_PROG_LD_GNU])
+if test x"$with_gnu_ld" = x"yes"; then
+ if $LD --help 2>&1 </dev/null | grep Bsymbolic-functions 1>&5; then
+ acl_cv_prog_gnu_ld_symbolic=yes
+ fi
+fi])
+if test x"$acl_cv_prog_gnu_ld_symbolic" = x"yes"; then
+ SYMBOLIC_LDFLAGS="-Wl,-Bsymbolic-functions"
+else
+ SYMBOLIC_LDFLAGS=''
+fi
+])
+
+dnl Set DYNAMIC_LIST_CPP_NEW_LDFLAGS to --dynamic-list-cpp-new for GNU
+dnl linker if it is supported.
+AC_DEFUN([ACX_PROG_LD_GNU_DYNAMIC_LIST_CPP_NEW],
+[AC_CACHE_CHECK([if the GNU linker ($LD) supports --dynamic-list-cpp-new],
+acl_cv_prog_gnu_ld_dynamic_list_cpp_new, [
+acl_cv_prog_gnu_ld_dynamic_list_cpp_new=no
+AC_REQUIRE([ACX_PROG_LD_GNU_SYMBOLIC])
+if test x"$with_gnu_ld" = x"yes" -a \
+ x"$acl_cv_prog_gnu_ld_symbolic" = x"yes"; then
+ if $LD --help 2>&1 </dev/null | grep dynamic-list-cpp-new 1>&5; then
+ acl_cv_prog_gnu_ld_dynamic_list_cpp_new=yes
+ fi
+fi])
+if test x"$acl_cv_prog_gnu_ld_dynamic_list_cpp_new" = x"yes"; then
+ DYNAMIC_LIST_CPP_NEW_LDFLAGS="$SYMBOLIC_LDFLAGS -Wl,--dynamic-list-cpp-new"
+else
+ DYNAMIC_LIST_CPP_NEW_LDFLAGS=''
+fi
+])
diff --git a/config/mh-ppc-aix b/config/mh-ppc-aix
index f2bc76a0c3ed..a56985fa9402 100644
--- a/config/mh-ppc-aix
+++ b/config/mh-ppc-aix
@@ -1,8 +1,9 @@
-# Compile Ada files with minimal-toc. The primary focus is gnatlib, so
-# that the library does not use nearly the entire TOC of applications
-# until gnatlib is built as a shared library on AIX. Compiling the
-# compiler with -mminimal-toc does not cause any harm.
-BOOT_ADAFLAGS = -mminimal-toc
+# Compile Ada files with minimal-toc in addition to the default flags (at
+# least -gnatg is required to compile language defined units). The primary
+# focus is gnatlib, so that the library does not use nearly the entire TOC of
+# applications until gnatlib is built as a shared library on AIX. Compiling
+# the compiler with -mminimal-toc does not cause any harm.
+BOOT_ADAFLAGS = -gnatapg -mminimal-toc
BOOT_LDFLAGS = -Wl,-bbigtoc
LDFLAGS = `case $(CC) in *gcc*) echo -Wl,-bbigtoc ;; esac;`
diff --git a/config/mh-ppc-darwin b/config/mh-ppc-darwin
index 44fd620b66e2..8e64791f6eef 100644
--- a/config/mh-ppc-darwin
+++ b/config/mh-ppc-darwin
@@ -2,5 +2,5 @@
# position-independent-code -- the usual default on Darwin. This fix speeds
# compiles by 3-5%.
-BOOT_CFLAGS=-g -O2 -mdynamic-no-pic
-
+# Broken because of PR32009.
+# BOOT_CFLAGS=-g -O2 -mdynamic-no-pic
diff --git a/config/mt-mep b/config/mt-mep
new file mode 100644
index 000000000000..849d128a3f5b
--- /dev/null
+++ b/config/mt-mep
@@ -0,0 +1,8 @@
+
+EXTRA_TARGET_HOST_ALL_MODULES:=$(EXTRA_TARGET_HOST_ALL_MODULES) all-utils
+EXTRA_TARGET_HOST_INSTALL_MODULES:=$(EXTRA_TARGET_HOST_INSTALL_MODULES) install-utils
+
+all-utils : all-libiberty
+
+install-utils : all-libiberty
+
diff --git a/config/mt-spu b/config/mt-spu
new file mode 100644
index 000000000000..c2dbc66e9997
--- /dev/null
+++ b/config/mt-spu
@@ -0,0 +1,4 @@
+# spu ld makefile invokes as-new in maintainer mode.
+all-ld: $(MAINT) all-gas
+# spu ld makefile invokes bin2c
+all-ld: all-binutils
diff --git a/config/multi.m4 b/config/multi.m4
new file mode 100644
index 000000000000..98417679f519
--- /dev/null
+++ b/config/multi.m4
@@ -0,0 +1,65 @@
+## -*- Autoconf -*-
+# Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_ENABLE_MULTILIB([MAKEFILE], [REL-TO-TOP-SRCDIR])
+# ---------------------------------------------------
+# Add --enable-multilib to configure.
+AC_DEFUN([AM_ENABLE_MULTILIB],
+[# Default to --enable-multilib
+AC_ARG_ENABLE(multilib,
+[ --enable-multilib build many library versions (default)],
+[case "$enableval" in
+ yes) multilib=yes ;;
+ no) multilib=no ;;
+ *) AC_MSG_ERROR([bad value $enableval for multilib option]) ;;
+ esac],
+ [multilib=yes])
+
+# We may get other options which we leave undocumented:
+# --with-target-subdir, --with-multisrctop, --with-multisubdir
+# See config-ml.in if you want the gory details.
+
+if test "$srcdir" = "."; then
+ if test "$with_target_subdir" != "."; then
+ multi_basedir="$srcdir/$with_multisrctop../$2"
+ else
+ multi_basedir="$srcdir/$with_multisrctop$2"
+ fi
+else
+ multi_basedir="$srcdir/$2"
+fi
+AC_SUBST(multi_basedir)
+
+# Even if the default multilib is not a cross compilation,
+# it may be that some of the other multilibs are.
+if test $cross_compiling = no && test $multilib = yes \
+ && test "x${with_multisubdir}" != x ; then
+ cross_compiling=maybe
+fi
+
+AC_OUTPUT_COMMANDS([
+# Only add multilib support code if we just rebuilt the top-level
+# Makefile.
+case " $CONFIG_FILES " in
+ *" ]m4_default([$1],Makefile)[ "*)
+ ac_file=]m4_default([$1],Makefile)[ . ${multi_basedir}/config-ml.in
+ ;;
+esac],
+ [
+srcdir="$srcdir"
+host="$host"
+target="$target"
+with_multisubdir="$with_multisubdir"
+with_multisrctop="$with_multisrctop"
+with_target_subdir="$with_target_subdir"
+ac_configure_args="${multilib_arg} ${ac_configure_args}"
+multi_basedir="$multi_basedir"
+CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+CC="$CC"])])dnl
diff --git a/config/stdint.m4 b/config/stdint.m4
index 21ef2ec43ac1..025ffad9ea29 100644
--- a/config/stdint.m4
+++ b/config/stdint.m4
@@ -61,14 +61,17 @@ for i in stdint.h $inttype_headers; do
break
done
if test "$acx_cv_header_stdint" = stddef.h; then
- acx_cv_header_stdint_kind="(lacks uintptr_t)"
+ acx_cv_header_stdint_kind="(lacks uintmax_t)"
for i in stdint.h $inttype_headers; do
+ unset ac_cv_type_uintptr_t
unset ac_cv_type_uint32_t
unset ac_cv_type_uint64_t
_AS_ECHO_N([looking for an incomplete stdint.h in $i, ])
AC_CHECK_TYPE(uint32_t,[acx_cv_header_stdint=$i],continue,[#include <sys/types.h>
#include <$i>])
- AC_CHECK_TYPE(uint64_t,,[acx_cv_header_stdint_kind="(lacks uintptr_t and uint64_t)"], [#include <sys/types.h>
+ AC_CHECK_TYPE(uint64_t,,,[#include <sys/types.h>
+#include <$i>])
+ AC_CHECK_TYPE(uintptr_t,,,[#include <sys/types.h>
#include <$i>])
break
done
@@ -81,7 +84,7 @@ if test "$acx_cv_header_stdint" = stddef.h; then
_AS_ECHO_N([looking for u_intXX_t types in $i, ])
AC_CHECK_TYPE(u_int32_t,[acx_cv_header_stdint=$i],continue,[#include <sys/types.h>
#include <$i>])
- AC_CHECK_TYPE(u_int64_t,,[acx_cv_header_stdint_kind="(u_intXX_t style, lacks u_int64_t)"], [#include <sys/types.h>
+ AC_CHECK_TYPE(u_int64_t,,,[#include <sys/types.h>
#include <$i>])
break
done
@@ -215,33 +218,51 @@ if test "$acx_cv_header_stdint" = stddef.h; then
#ifndef _UINT8_T
#define _UINT8_T
+ #ifndef __uint8_t_defined
+ #define __uint8_t_defined
typedef unsigned $acx_cv_type_int8_t uint8_t;
#endif
+ #endif
#ifndef _UINT16_T
#define _UINT16_T
+ #ifndef __uint16_t_defined
+ #define __uint16_t_defined
typedef unsigned $acx_cv_type_int16_t uint16_t;
#endif
+ #endif
#ifndef _UINT32_T
#define _UINT32_T
+ #ifndef __uint32_t_defined
+ #define __uint32_t_defined
typedef unsigned $acx_cv_type_int32_t uint32_t;
#endif
+ #endif
#ifndef _INT8_T
#define _INT8_T
+ #ifndef __int8_t_defined
+ #define __int8_t_defined
typedef $acx_cv_type_int8_t int8_t;
#endif
+ #endif
#ifndef _INT16_T
#define _INT16_T
+ #ifndef __int16_t_defined
+ #define __int16_t_defined
typedef $acx_cv_type_int16_t int16_t;
#endif
+ #endif
#ifndef _INT32_T
#define _INT32_T
+ #ifndef __int32_t_defined
+ #define __int32_t_defined
typedef $acx_cv_type_int32_t int32_t;
#endif
+ #endif
EOF
elif test "$ac_cv_type_u_int32_t" = yes; then
sed 's/^ *//' >> tmp-stdint.h <<EOF
@@ -259,18 +280,27 @@ elif test "$ac_cv_type_u_int32_t" = yes; then
#ifndef _UINT8_T
#define _UINT8_T
+ #ifndef __uint8_t_defined
+ #define __uint8_t_defined
typedef u_int8_t uint8_t;
#endif
+ #endif
#ifndef _UINT16_T
#define _UINT16_T
+ #ifndef __uint16_t_defined
+ #define __uint16_t_defined
typedef u_int16_t uint16_t;
#endif
+ #endif
#ifndef _UINT32_T
#define _UINT32_T
+ #ifndef __uint32_t_defined
+ #define __uint32_t_defined
typedef u_int32_t uint32_t;
#endif
+ #endif
EOF
else
sed 's/^ *//' >> tmp-stdint.h <<EOF
@@ -318,8 +348,11 @@ elif test "$ac_cv_type_u_int64_t" = yes; then
#endif
#ifndef _UINT64_T
#define _UINT64_T
+ #ifndef __uint64_t_defined
+ #define __uint64_t_defined
typedef u_int64_t uint64_t;
#endif
+ #endif
EOF
elif test -n "$acx_cv_type_int64_t"; then
sed 's/^ *//' >> tmp-stdint.h <<EOF
@@ -331,8 +364,11 @@ elif test -n "$acx_cv_type_int64_t"; then
#endif
#ifndef _UINT64_T
#define _UINT64_T
+ #ifndef __uint64_t_defined
+ #define __uint64_t_defined
typedef unsigned $acx_cv_type_int64_t uint64_t;
#endif
+ #endif
EOF
else
sed 's/^ *//' >> tmp-stdint.h <<EOF
@@ -341,8 +377,10 @@ else
#if defined __STDC_VERSION__ && (__STDC_VERSION__-0) >= 199901L
#ifndef _INT64_T
#define _INT64_T
+ #ifndef __int64_t_defined
typedef long long int64_t;
#endif
+ #endif
#ifndef _UINT64_T
#define _UINT64_T
typedef unsigned long long uint64_t;
@@ -387,8 +425,12 @@ if test "$ac_cv_type_uintptr_t" != yes; then
sed 's/^ *//' >> tmp-stdint.h <<EOF
/* Define intptr_t based on sizeof(void*) = $ac_cv_sizeof_void_p */
+ #ifndef __uintptr_t_defined
typedef u$acx_cv_type_intptr_t uintptr_t;
+ #endif
+ #ifndef __intptr_t_defined
typedef $acx_cv_type_intptr_t intptr_t;
+ #endif
EOF
fi
diff --git a/config/tls.m4 b/config/tls.m4
index 5cbb6854f6c7..c8f3ff0a3733 100644
--- a/config/tls.m4
+++ b/config/tls.m4
@@ -1,19 +1,73 @@
dnl Check whether the target supports TLS.
AC_DEFUN([GCC_CHECK_TLS], [
- GCC_ENABLE(tls, yes, [Use thread-local storage])
+ GCC_ENABLE(tls, yes, [], [Use thread-local storage])
AC_CACHE_CHECK([whether the target supports thread-local storage],
have_tls, [
AC_RUN_IFELSE([__thread int a; int b; int main() { return a = b; }],
[dnl If the test case passed with dynamic linking, try again with
- dnl static linking. This fails at least with some older Red Hat
- dnl releases.
- save_LDFLAGS="$LDFLAGS"
+ dnl static linking, but only if static linking is supported (not
+ dnl on Solaris 10). This fails with some older Red Hat releases.
+ chktls_save_LDFLAGS="$LDFLAGS"
LDFLAGS="-static $LDFLAGS"
- AC_RUN_IFELSE([__thread int a; int b; int main() { return a = b; }],
- [have_tls=yes], [have_tls=no], [])
- LDFLAGS="$save_LDFLAGS"],
+ AC_LINK_IFELSE([int main() { return 0; }],
+ AC_RUN_IFELSE([__thread int a; int b; int main() { return a = b; }],
+ [have_tls=yes], [have_tls=no],[]),
+ [have_tls=yes])
+ LDFLAGS="$chktls_save_LDFLAGS"
+ if test $have_tls = yes; then
+ dnl So far, the binutils and the compiler support TLS.
+ dnl Also check whether the libc supports TLS, i.e. whether a variable
+ dnl with __thread linkage has a different address in different threads.
+ dnl First, find the thread_CFLAGS necessary for linking a program that
+ dnl calls pthread_create.
+ chktls_save_CFLAGS="$CFLAGS"
+ thread_CFLAGS=failed
+ for flag in '' '-pthread' '-lpthread'; do
+ CFLAGS="$flag $chktls_save_CFLAGS"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [#include <pthread.h>
+ void *g(void *d) { return NULL; }],
+ [pthread_t t; pthread_create(&t,NULL,g,NULL);])],
+ [thread_CFLAGS="$flag"])
+ if test "X$thread_CFLAGS" != Xfailed; then
+ break
+ fi
+ done
+ CFLAGS="$chktls_save_CFLAGS"
+ if test "X$thread_CFLAGS" != Xfailed; then
+ CFLAGS="$thread_CFLAGS $chktls_save_CFLAGS"
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [#include <pthread.h>
+ __thread int a;
+ static int *a_in_other_thread;
+ static void *
+ thread_func (void *arg)
+ {
+ a_in_other_thread = &a;
+ return (void *)0;
+ }],
+ [pthread_t thread;
+ void *thread_retval;
+ int *a_in_main_thread;
+ if (pthread_create (&thread, (pthread_attr_t *)0,
+ thread_func, (void *)0))
+ return 0;
+ a_in_main_thread = &a;
+ if (pthread_join (thread, &thread_retval))
+ return 0;
+ return (a_in_other_thread == a_in_main_thread);])],
+ [have_tls=yes], [have_tls=no], [])
+ CFLAGS="$chktls_save_CFLAGS"
+ fi
+ fi],
[have_tls=no],
- [AC_COMPILE_IFELSE([__thread int foo;], [have_tls=yes], [have_tls=no])]
+ [dnl This is the cross-compiling case. Assume libc supports TLS if the
+ dnl binutils and the compiler do.
+ AC_LINK_IFELSE([__thread int a; int b; int main() { return a = b; }],
+ [have_tls=yes], [have_tls=no])
+ ]
)])
if test "$enable_tls $have_tls" = "yes yes"; then
AC_DEFINE(HAVE_TLS, 1,
diff --git a/config/unwind_ipinfo.m4 b/config/unwind_ipinfo.m4
new file mode 100644
index 000000000000..5587d9c3fb06
--- /dev/null
+++ b/config/unwind_ipinfo.m4
@@ -0,0 +1,22 @@
+dnl
+dnl Check whether _Unwind_GetIPInfo is available.
+dnl
+AC_DEFUN([GCC_CHECK_UNWIND_GETIPINFO], [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+ AC_MSG_CHECKING([for _Unwind_GetIPInfo])
+ AC_CACHE_VAL(gcc_cv_getipinfo, [
+ AC_TRY_LINK([extern "C" { extern void _Unwind_GetIPInfo(); }],
+ [_Unwind_GetIPInfo();],
+ [gcc_cv_getipinfo=yes],
+ [gcc_cv_getipinfo=no])
+ ])
+ if test $gcc_cv_getipinfo = yes; then
+ AC_DEFINE(HAVE_GETIPINFO, 1, [Define if _Unwind_GetIPInfo is available.])
+ fi
+ AC_MSG_RESULT($gcc_cv_getipinfo)
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
diff --git a/config/warnings.m4 b/config/warnings.m4
index 8b832382bea6..d3358b6a8944 100644
--- a/config/warnings.m4
+++ b/config/warnings.m4
@@ -1,6 +1,6 @@
# Autoconf include file defining macros related to compile-time warnings.
-# Copyright 2004, 2005 Free Software Foundation, Inc.
+# Copyright 2004, 2005, 2007 Free Software Foundation, Inc.
#This file is part of GCC.
@@ -19,13 +19,15 @@
#Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#02110-1301, USA.
-# ACX_PROG_CC_WARNING_OPTS([-Wfoo -Wbar -Wbaz])
-# Sets @WARN_CFLAGS@ to the subset of the given options which the
+# ACX_PROG_CC_WARNING_OPTS(WARNINGS, [VARIABLE = WARN_CFLAGS)
+# Sets @VARIABLE@ to the subset of the given options which the
# compiler accepts.
AC_DEFUN([ACX_PROG_CC_WARNING_OPTS],
[AC_REQUIRE([AC_PROG_CC])dnl
-AC_SUBST([WARN_CFLAGS])dnl
-WARN_CFLAGS=
+m4_pushdef([acx_Var], [m4_default([$2], [WARN_CFLAGS])])dnl
+AC_SUBST(acx_Var)dnl
+m4_expand_once([acx_Var=
+],m4_quote(acx_Var=))dnl
save_CFLAGS="$CFLAGS"
for option in $1; do
AS_VAR_PUSHDEF([acx_Woption], [acx_cv_prog_cc_warning_$option])
@@ -36,20 +38,23 @@ for option in $1; do
[AS_VAR_SET(acx_Woption, no)])
])
AS_IF([test AS_VAR_GET(acx_Woption) = yes],
- [WARN_CFLAGS="$WARN_CFLAGS${WARN_CFLAGS:+ }$option"])
+ [acx_Var="$acx_Var${acx_Var:+ }$option"])
AS_VAR_POPDEF([acx_Woption])dnl
done
CFLAGS="$save_CFLAGS"
+m4_popdef([acx_Var])dnl
])# ACX_PROG_CC_WARNING_OPTS
-# ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([-Wno-long-long ...])
-# Sets WARN_PEDANTIC to "-pedantic" + the argument, if the compiler is GCC
+# ACX_PROG_CC_WARNING_ALMOST_PEDANTIC(WARNINGS, [VARIABLE = WARN_PEDANTIC)
+# Append to VARIABLE "-pedantic" + the argument, if the compiler is GCC
# and accepts all of those options simultaneously, otherwise to nothing.
AC_DEFUN([ACX_PROG_CC_WARNING_ALMOST_PEDANTIC],
[AC_REQUIRE([AC_PROG_CC])dnl
-AC_SUBST([WARN_PEDANTIC])dnl
+m4_pushdef([acx_Var], [m4_default([$2], [WARN_PEDANTIC])])dnl
+AC_SUBST(acx_Var)dnl
+m4_expand_once([acx_Var=
+],m4_quote(acx_Var=))dnl
AS_VAR_PUSHDEF([acx_Pedantic], [acx_cv_prog_cc_pedantic_$1])dnl
-WARN_PEDANTIC=
AS_IF([test "$GCC" = yes],
[AC_CACHE_CHECK([whether $CC supports -pedantic $1], acx_Pedantic,
[save_CFLAGS="$CFLAGS"
@@ -59,28 +64,31 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
[AS_VAR_SET(acx_Pedantic, no)])
CFLAGS="$save_CFLAGS"])
AS_IF([test AS_VAR_GET(acx_Pedantic) = yes],
- [WARN_PEDANTIC="-pedantic $1"])
+ [acx_Var="$acx_Var${acx_Var:+ }-pedantic $1"])
])
AS_VAR_POPDEF([acx_Pedantic])dnl
+m4_popdef([acx_Var])dnl
])# ACX_PROG_CC_WARNING_ALMOST_PEDANTIC
-# ACX_PROG_CC_WARNINGS_ARE_ERRORS([x.y.z])
-# sets WERROR to "-Werror" if the compiler is GCC >=x.y.z, or if
+# ACX_PROG_CC_WARNINGS_ARE_ERRORS([x.y.z], [VARIABLE = WERROR])
+# sets @VARIABLE@ to "-Werror" if the compiler is GCC >=x.y.z, or if
# --enable-werror-always was given on the command line, otherwise
# to nothing.
# If the argument is the word "manual" instead of a version number,
-# then WERROR will be set to -Werror only if --enable-werror-always
+# then @VARIABLE@ will be set to -Werror only if --enable-werror-always
# appeared on the configure command line.
AC_DEFUN([ACX_PROG_CC_WARNINGS_ARE_ERRORS],
[AC_REQUIRE([AC_PROG_CC])dnl
-AC_SUBST([WERROR])dnl
-WERROR=
+m4_pushdef([acx_Var], [m4_default([$2], [WERROR])])dnl
+AC_SUBST(acx_Var)dnl
+m4_expand_once([acx_Var=
+],m4_quote(acx_Var=))dnl
AC_ARG_ENABLE(werror-always,
AS_HELP_STRING([--enable-werror-always],
[enable -Werror despite compiler version]),
[], [enable_werror_always=no])
AS_IF([test $enable_werror_always = yes],
- [WERROR=-Werror],
+ [acx_Var="$acx_Var${acx_Var:+ }-Werror"])
m4_if($1, [manual],,
[AS_VAR_PUSHDEF([acx_GCCvers], [acx_cv_prog_cc_gcc_$1_or_newer])dnl
AC_CACHE_CHECK([whether $CC is GCC >=$1], acx_GCCvers,
@@ -94,6 +102,7 @@ AS_IF([test $enable_werror_always = yes],
[AS_VAR_SET(acx_GCCvers, yes)],
[AS_VAR_SET(acx_GCCvers, no)])])
AS_IF([test AS_VAR_GET(acx_GCCvers) = yes],
- [WERROR=-WerrorB])
- AS_VAR_POPDEF([acx_GCCvers])]))
+ [acx_Var="$acx_Var${acx_Var:+ }-Werror"])
+ AS_VAR_POPDEF([acx_GCCvers])])
+m4_popdef([acx_Var])dnl
])# ACX_PROG_CC_WARNINGS_ARE_ERRORS
diff --git a/configure b/configure
index dbcbdfef7d33..13f1960e4fd3 100755
--- a/configure
+++ b/configure
@@ -1,64 +1,288 @@
#! /bin/sh
-
# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+# 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
-# Defaults:
-ac_help=
+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
-# Any additions from configure.in:
-ac_help="$ac_help
- --enable-libada Builds libada directory"
-ac_help="$ac_help
- --enable-libssp Builds libssp directory"
-ac_help="$ac_help
- --enable-libgcc-math Builds libgcc-math directory"
-ac_help="$ac_help
- --with-mpfr-dir=PATH Specify source directory for MPFR library"
-ac_help="$ac_help
- --with-mpfr=PATH Specify directory for installed MPFR library"
-ac_help="$ac_help
- --with-gmp-dir=PATH Specify source directory for GMP library"
-ac_help="$ac_help
- --with-gmp=PATH Specify directory for installed GMP library"
-ac_help="$ac_help
- --with-build-sysroot=sysroot
- use sysroot as the system root during the build"
-ac_help="$ac_help
- --enable-bootstrap Enable bootstrapping [yes if native build]"
-ac_help="$ac_help
- --enable-serial-[{host,target,build}-]configure
- Force sequential configuration of
- sub-packages for the host, target or build
- machine, or all sub-packages"
-ac_help="$ac_help
- --with-build-time-tools=path
- use given path to find target tools during the build"
-ac_help="$ac_help
- --enable-maintainer-mode enable make rules and dependencies not useful
- (and sometimes confusing) to the casual installer"
-ac_help="$ac_help
- --enable-werror enable -Werror in bootstrap stage2 and later"
-ac_help="$ac_help
- --with-datarootdir Use datarootdir as the data root directory."
-ac_help="$ac_help
- --with-docdir Install documentation in this directory."
-ac_help="$ac_help
- --with-htmldir Install html in this directory."
+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="move-if-change"
+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 build_noncanonical host_noncanonical target_noncanonical host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN LN_S TOPLEVEL_CONFIGURE_ARGUMENTS build_libsubdir build_subdir host_subdir target_subdir CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX GNATBIND ac_ct_GNATBIND GNATMAKE ac_ct_GNATMAKE do_compare gmplibs gmpinc stage1_languages SYSROOT_CFLAGS_FOR_TARGET RPATH_ENVVAR tooldir build_tooldir CONFIGURE_GDB_TK GDB_TK INSTALL_GDB_TK build_configargs build_configdirs host_configargs configdirs target_configargs CC_FOR_BUILD config_shell YACC BISON M4 LEX FLEX MAKEINFO EXPECT RUNTEST AR AS DLLTOOL LD LIPO NM RANLIB STRIP WINDRES OBJCOPY OBJDUMP CFLAGS_FOR_BUILD CC_FOR_TARGET CXX_FOR_TARGET GCC_FOR_TARGET GCJ_FOR_TARGET GFORTRAN_FOR_TARGET AR_FOR_TARGET AS_FOR_TARGET DLLTOOL_FOR_TARGET LD_FOR_TARGET LIPO_FOR_TARGET NM_FOR_TARGET OBJDUMP_FOR_TARGET RANLIB_FOR_TARGET STRIP_FOR_TARGET WINDRES_FOR_TARGET RAW_CXX_FOR_TARGET FLAGS_FOR_TARGET COMPILER_AS_FOR_TARGET COMPILER_LD_FOR_TARGET COMPILER_NM_FOR_TARGET MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT stage1_cflags stage1_checking stage2_werror_flag datarootdir docdir pdfdir htmldir LIBOBJS LTLIBOBJS'
+ac_subst_files='serialization_dependencies host_makefile_frag target_makefile_frag alphaieee_frag ospace_frag'
# 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.
-build=NONE
-cache_file=./config.cache
+cache_file=/dev/null
exec_prefix=NONE
-host=NONE
no_create=
-nonopt=NONE
no_recursion=
prefix=NONE
program_prefix=NONE
@@ -67,10 +291,15 @@ program_transform_name=s,x,x,
silent=
site=
srcdir=
-target=NONE
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'
@@ -84,17 +313,9 @@ oldincludedir='/usr/include'
infodir='${prefix}/info'
mandir='${prefix}/man'
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
-
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"
@@ -102,59 +323,59 @@ do
continue
fi
- case "$ac_option" in
- -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) ac_optarg= ;;
- esac
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
# Accept the important Cygnus configure options, so we can diagnose typos.
- case "$ac_option" in
+ case $ac_option in
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir="$ac_optarg" ;;
+ bindir=$ac_optarg ;;
-build | --build | --buil | --bui | --bu)
- ac_prev=build ;;
+ ac_prev=build_alias ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build="$ac_optarg" ;;
+ 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" ;;
+ 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" ;;
+ datadir=$ac_optarg ;;
-disable-* | --disable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- eval "enable_${ac_feature}=no" ;;
+ 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=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
+ 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'" ;;
+ eval "enable_$ac_feature='$ac_optarg'" ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -163,95 +384,47 @@ do
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
- exec_prefix="$ac_optarg" ;;
+ exec_prefix=$ac_optarg ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
- -help | --help | --hel | --he)
- # 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 << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
- --cache-file=FILE cache test results in FILE
- --help print this message
- --no-create do not create output files
- --quiet, --silent do not print \`checking...' messages
- --version print the version of autoconf that created configure
-Directory and file names:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [same as prefix]
- --bindir=DIR user executables in DIR [EPREFIX/bin]
- --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
- --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data in DIR
- [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data in DIR
- [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
- --libdir=DIR object code libraries in DIR [EPREFIX/lib]
- --includedir=DIR C header files in DIR [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
- --infodir=DIR info documentation in DIR [PREFIX/info]
- --mandir=DIR man documentation in DIR [PREFIX/man]
- --srcdir=DIR find the sources in DIR [configure dir or ..]
- --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
-EOF
- cat << EOF
-Host type:
- --build=BUILD configure for building on BUILD [BUILD=HOST]
- --host=HOST configure for HOST [guessed]
- --target=TARGET configure for TARGET [TARGET=HOST]
-Features and packages:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
-EOF
- if test -n "$ac_help"; then
- echo "--enable and --with options recognized:$ac_help"
- fi
- exit 0 ;;
+ -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 ;;
+ ac_prev=host_alias ;;
-host=* | --host=* | --hos=* | --ho=*)
- host="$ac_optarg" ;;
+ 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" ;;
+ includedir=$ac_optarg ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir="$ac_optarg" ;;
+ infodir=$ac_optarg ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir="$ac_optarg" ;;
+ 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" ;;
+ libexecdir=$ac_optarg ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst \
@@ -260,19 +433,19 @@ EOF
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
- localstatedir="$ac_optarg" ;;
+ localstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir="$ac_optarg" ;;
+ 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)
+ | --no-cr | --no-c | -n)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
@@ -286,26 +459,26 @@ EOF
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir="$ac_optarg" ;;
+ oldincludedir=$ac_optarg ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix="$ac_optarg" ;;
+ 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_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_suffix=$ac_optarg ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
@@ -322,7 +495,7 @@ EOF
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name="$ac_optarg" ;;
+ program_transform_name=$ac_optarg ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
@@ -332,7 +505,7 @@ EOF
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
- sbindir="$ac_optarg" ;;
+ sbindir=$ac_optarg ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
@@ -343,58 +516,57 @@ EOF
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
- sharedstatedir="$ac_optarg" ;;
+ sharedstatedir=$ac_optarg ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
- site="$ac_optarg" ;;
+ site=$ac_optarg ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir="$ac_optarg" ;;
+ 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" ;;
+ sysconfdir=$ac_optarg ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target ;;
+ ac_prev=target_alias ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target="$ac_optarg" ;;
+ target_alias=$ac_optarg ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
- -version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.13"
- exit 0 ;;
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
-with-* | --with-*)
- ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
+ 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
- *=*) ;;
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
*) ac_optarg=yes ;;
esac
- eval "with_${ac_package}='$ac_optarg'" ;;
+ eval "with_$ac_package='$ac_optarg'" ;;
-without-* | --without-*)
- ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- eval "with_${ac_package}=no" ;;
+ 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.
@@ -405,99 +577,110 @@ EOF
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_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" ;;
+ x_libraries=$ac_optarg ;;
- -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ -*) { 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 ;;
+
*)
- if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
- echo "configure: warning: $ac_option: invalid host type" 1>&2
- fi
- if test "x$nonopt" != xNONE; then
- { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
- fi
- nonopt="$ac_option"
+ # 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
- { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
fi
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
+# 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
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
do
- case "$ac_arg" in
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c) ;;
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ 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
-# NLS nuisances.
-# Only set these to C if already set. These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}" = set; then LANG=C; export LANG; fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+# 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
-# 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
+# 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
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=move-if-change
# 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_prog=$0
- ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
- test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ 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=..
@@ -507,13 +690,660 @@ else
fi
if test ! -r $srcdir/$ac_unique_file; then
if test "$ac_srcdir_defaulted" = yes; then
- { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
else
- { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
- fi
+ { 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_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_AR_set=${AR+set}
+ac_env_AR_value=$AR
+ac_cv_env_AR_set=${AR+set}
+ac_cv_env_AR_value=$AR
+ac_env_AS_set=${AS+set}
+ac_env_AS_value=$AS
+ac_cv_env_AS_set=${AS+set}
+ac_cv_env_AS_value=$AS
+ac_env_DLLTOOL_set=${DLLTOOL+set}
+ac_env_DLLTOOL_value=$DLLTOOL
+ac_cv_env_DLLTOOL_set=${DLLTOOL+set}
+ac_cv_env_DLLTOOL_value=$DLLTOOL
+ac_env_LD_set=${LD+set}
+ac_env_LD_value=$LD
+ac_cv_env_LD_set=${LD+set}
+ac_cv_env_LD_value=$LD
+ac_env_LIPO_set=${LIPO+set}
+ac_env_LIPO_value=$LIPO
+ac_cv_env_LIPO_set=${LIPO+set}
+ac_cv_env_LIPO_value=$LIPO
+ac_env_NM_set=${NM+set}
+ac_env_NM_value=$NM
+ac_cv_env_NM_set=${NM+set}
+ac_cv_env_NM_value=$NM
+ac_env_RANLIB_set=${RANLIB+set}
+ac_env_RANLIB_value=$RANLIB
+ac_cv_env_RANLIB_set=${RANLIB+set}
+ac_cv_env_RANLIB_value=$RANLIB
+ac_env_STRIP_set=${STRIP+set}
+ac_env_STRIP_value=$STRIP
+ac_cv_env_STRIP_set=${STRIP+set}
+ac_cv_env_STRIP_value=$STRIP
+ac_env_WINDRES_set=${WINDRES+set}
+ac_env_WINDRES_value=$WINDRES
+ac_cv_env_WINDRES_set=${WINDRES+set}
+ac_cv_env_WINDRES_value=$WINDRES
+ac_env_OBJCOPY_set=${OBJCOPY+set}
+ac_env_OBJCOPY_value=$OBJCOPY
+ac_cv_env_OBJCOPY_set=${OBJCOPY+set}
+ac_cv_env_OBJCOPY_value=$OBJCOPY
+ac_env_OBJDUMP_set=${OBJDUMP+set}
+ac_env_OBJDUMP_value=$OBJDUMP
+ac_cv_env_OBJDUMP_set=${OBJDUMP+set}
+ac_cv_env_OBJDUMP_value=$OBJDUMP
+ac_env_CC_FOR_TARGET_set=${CC_FOR_TARGET+set}
+ac_env_CC_FOR_TARGET_value=$CC_FOR_TARGET
+ac_cv_env_CC_FOR_TARGET_set=${CC_FOR_TARGET+set}
+ac_cv_env_CC_FOR_TARGET_value=$CC_FOR_TARGET
+ac_env_CXX_FOR_TARGET_set=${CXX_FOR_TARGET+set}
+ac_env_CXX_FOR_TARGET_value=$CXX_FOR_TARGET
+ac_cv_env_CXX_FOR_TARGET_set=${CXX_FOR_TARGET+set}
+ac_cv_env_CXX_FOR_TARGET_value=$CXX_FOR_TARGET
+ac_env_GCC_FOR_TARGET_set=${GCC_FOR_TARGET+set}
+ac_env_GCC_FOR_TARGET_value=$GCC_FOR_TARGET
+ac_cv_env_GCC_FOR_TARGET_set=${GCC_FOR_TARGET+set}
+ac_cv_env_GCC_FOR_TARGET_value=$GCC_FOR_TARGET
+ac_env_GCJ_FOR_TARGET_set=${GCJ_FOR_TARGET+set}
+ac_env_GCJ_FOR_TARGET_value=$GCJ_FOR_TARGET
+ac_cv_env_GCJ_FOR_TARGET_set=${GCJ_FOR_TARGET+set}
+ac_cv_env_GCJ_FOR_TARGET_value=$GCJ_FOR_TARGET
+ac_env_GFORTRAN_FOR_TARGET_set=${GFORTRAN_FOR_TARGET+set}
+ac_env_GFORTRAN_FOR_TARGET_value=$GFORTRAN_FOR_TARGET
+ac_cv_env_GFORTRAN_FOR_TARGET_set=${GFORTRAN_FOR_TARGET+set}
+ac_cv_env_GFORTRAN_FOR_TARGET_value=$GFORTRAN_FOR_TARGET
+ac_env_AR_FOR_TARGET_set=${AR_FOR_TARGET+set}
+ac_env_AR_FOR_TARGET_value=$AR_FOR_TARGET
+ac_cv_env_AR_FOR_TARGET_set=${AR_FOR_TARGET+set}
+ac_cv_env_AR_FOR_TARGET_value=$AR_FOR_TARGET
+ac_env_AS_FOR_TARGET_set=${AS_FOR_TARGET+set}
+ac_env_AS_FOR_TARGET_value=$AS_FOR_TARGET
+ac_cv_env_AS_FOR_TARGET_set=${AS_FOR_TARGET+set}
+ac_cv_env_AS_FOR_TARGET_value=$AS_FOR_TARGET
+ac_env_DLLTOOL_FOR_TARGET_set=${DLLTOOL_FOR_TARGET+set}
+ac_env_DLLTOOL_FOR_TARGET_value=$DLLTOOL_FOR_TARGET
+ac_cv_env_DLLTOOL_FOR_TARGET_set=${DLLTOOL_FOR_TARGET+set}
+ac_cv_env_DLLTOOL_FOR_TARGET_value=$DLLTOOL_FOR_TARGET
+ac_env_LD_FOR_TARGET_set=${LD_FOR_TARGET+set}
+ac_env_LD_FOR_TARGET_value=$LD_FOR_TARGET
+ac_cv_env_LD_FOR_TARGET_set=${LD_FOR_TARGET+set}
+ac_cv_env_LD_FOR_TARGET_value=$LD_FOR_TARGET
+ac_env_LIPO_FOR_TARGET_set=${LIPO_FOR_TARGET+set}
+ac_env_LIPO_FOR_TARGET_value=$LIPO_FOR_TARGET
+ac_cv_env_LIPO_FOR_TARGET_set=${LIPO_FOR_TARGET+set}
+ac_cv_env_LIPO_FOR_TARGET_value=$LIPO_FOR_TARGET
+ac_env_NM_FOR_TARGET_set=${NM_FOR_TARGET+set}
+ac_env_NM_FOR_TARGET_value=$NM_FOR_TARGET
+ac_cv_env_NM_FOR_TARGET_set=${NM_FOR_TARGET+set}
+ac_cv_env_NM_FOR_TARGET_value=$NM_FOR_TARGET
+ac_env_OBJDUMP_FOR_TARGET_set=${OBJDUMP_FOR_TARGET+set}
+ac_env_OBJDUMP_FOR_TARGET_value=$OBJDUMP_FOR_TARGET
+ac_cv_env_OBJDUMP_FOR_TARGET_set=${OBJDUMP_FOR_TARGET+set}
+ac_cv_env_OBJDUMP_FOR_TARGET_value=$OBJDUMP_FOR_TARGET
+ac_env_RANLIB_FOR_TARGET_set=${RANLIB_FOR_TARGET+set}
+ac_env_RANLIB_FOR_TARGET_value=$RANLIB_FOR_TARGET
+ac_cv_env_RANLIB_FOR_TARGET_set=${RANLIB_FOR_TARGET+set}
+ac_cv_env_RANLIB_FOR_TARGET_value=$RANLIB_FOR_TARGET
+ac_env_STRIP_FOR_TARGET_set=${STRIP_FOR_TARGET+set}
+ac_env_STRIP_FOR_TARGET_value=$STRIP_FOR_TARGET
+ac_cv_env_STRIP_FOR_TARGET_set=${STRIP_FOR_TARGET+set}
+ac_cv_env_STRIP_FOR_TARGET_value=$STRIP_FOR_TARGET
+ac_env_WINDRES_FOR_TARGET_set=${WINDRES_FOR_TARGET+set}
+ac_env_WINDRES_FOR_TARGET_value=$WINDRES_FOR_TARGET
+ac_cv_env_WINDRES_FOR_TARGET_set=${WINDRES_FOR_TARGET+set}
+ac_cv_env_WINDRES_FOR_TARGET_value=$WINDRES_FOR_TARGET
+
+#
+# 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]
+ --enable-libada Builds libada directory
+ --enable-libssp Builds libssp directory
+ --enable-stage1-languages=all choose additional languages to build during
+ stage1. Mostly useful for compiler development.
+ --enable-objc-gc enable the use of Boehm's garbage collector with
+ the GNU Objective-C runtime.
+ --enable-bootstrap Enable bootstrapping yes if native build
+ --enable-serial-{host,target,build}-configure
+ Force sequential configuration of
+ sub-packages for the host, target or build
+ machine, or all sub-packages
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+ --enable-stage1-checking=all choose additional checking for stage1
+ of the compiler.
+ --enable-werror enable -Werror in bootstrap stage2 and later
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-build-libsubdir=DIR Directory where to find libraries for build system
+ --with-mpfr-dir=PATH This option has been REMOVED
+ --with-mpfr=PATH Specify prefix directory for installed MPFR package
+ Equivalent to --with-mpfr-include=PATH/include
+ plus --with-mpfr-lib=PATH/lib
+ --with-mpfr-include=PATH
+ Specify directory for installed MPFR include files
+ --with-mpfr-lib=PATH Specify the directory for the installed MPFR library
+ --with-gmp-dir=PATH This option has been REMOVED
+ --with-gmp=PATH Specify prefix directory for the installed GMP package
+ Equivalent to --with-gmp-include=PATH/include
+ plus --with-gmp-lib=PATH/lib
+ --with-gmp-include=PATH Specify directory for installed GMP include files
+ --with-gmp-lib=PATH Specify the directory for the installed GMP library
+ --with-build-sysroot=sysroot
+ use sysroot as the system root during the build
+ --with-build-time-tools=path
+ use given path to find target tools during the build
+ --with-datarootdir Use datarootdir as the data root directory.
+ --with-docdir Install documentation in this directory.
+ --with-pdfdir Install pdf in this directory.
+ --with-htmldir Install html in this directory.
+
+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>
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ AR AR for the host
+ AS AS for the host
+ DLLTOOL DLLTOOL for the host
+ LD LD for the host
+ LIPO LIPO for the host
+ NM NM for the host
+ RANLIB RANLIB for the host
+ STRIP STRIP for the host
+ WINDRES WINDRES for the host
+ OBJCOPY OBJCOPY for the host
+ OBJDUMP OBJDUMP for the host
+ CC_FOR_TARGET
+ CC for the target
+ CXX_FOR_TARGET
+ CXX for the target
+ GCC_FOR_TARGET
+ GCC for the target
+ GCJ_FOR_TARGET
+ GCJ for the target
+ GFORTRAN_FOR_TARGET
+ GFORTRAN for the target
+ AR_FOR_TARGET
+ AR for the target
+ AS_FOR_TARGET
+ AS for the target
+ DLLTOOL_FOR_TARGET
+ DLLTOOL for the target
+ LD_FOR_TARGET
+ LD for the target
+ LIPO_FOR_TARGET
+ LIPO for the target
+ NM_FOR_TARGET
+ NM for the target
+ OBJDUMP_FOR_TARGET
+ OBJDUMP for the target
+ RANLIB_FOR_TARGET
+ RANLIB for the target
+ STRIP_FOR_TARGET
+ STRIP for the target
+ WINDRES_FOR_TARGET
+ WINDRES for the target
+
+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
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+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
@@ -524,42 +1354,108 @@ if test -z "$CONFIG_SITE"; then
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
- echo "loading site script $ac_site_file"
+ { 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
- echo "loading cache $cache_file"
- . $cache_file
+ # 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 "creating cache $cache_file"
- > $cache_file
+ { 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
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-ac_exeext=
-ac_objext=o
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
+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 the build, host, and target systems.
ac_aux_dir=
for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
if test -f $ac_dir/install-sh; then
@@ -570,122 +1466,143 @@ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
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 "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+ { { 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=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+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/'`
-# Do some error checking and defaulting for the host and target type.
-# The inputs are:
-# configure --host=HOST --target=TARGET --build=BUILD NONOPT
-#
-# The rules are:
-# 1. You are not allowed to specify --host, --target, and nonopt at the
-# same time.
-# 2. Host defaults to nonopt.
-# 3. If nonopt is not specified, then host defaults to the current host,
-# as determined by config.guess.
-# 4. Target and build default to nonopt.
-# 5. If nonopt is not specified, then target and build default to host.
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-case $host---$target---$nonopt in
-NONE---*---* | *---NONE---* | *---*---NONE) ;;
-*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
+ case ${build_alias} in
+ "") build_noncanonical=${build} ;;
+ *) build_noncanonical=${build_alias} ;;
esac
-# Make sure we can run config.sub.
-if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
-else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:611: checking host system type" >&5
-host_alias=$host
-case "$host_alias" in
-NONE)
- case $nonopt in
- NONE)
- if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
- else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
- fi ;;
- *) host_alias=$nonopt ;;
- esac ;;
+ case ${host_alias} in
+ "") host_noncanonical=${build_noncanonical} ;;
+ *) host_noncanonical=${host_alias} ;;
esac
-host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$host" 1>&6
-
-echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:632: checking target system type" >&5
-
-target_alias=$target
-case "$target_alias" in
-NONE)
- case $nonopt in
- NONE) target_alias=$host_alias ;;
- *) target_alias=$nonopt ;;
- esac ;;
-esac
-target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
-target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$target" 1>&6
-
-echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:650: checking build system type" >&5
-
-build_alias=$build
-case "$build_alias" in
-NONE)
- case $nonopt in
- NONE) build_alias=$host_alias ;;
- *) build_alias=$nonopt ;;
- esac ;;
+
+ case ${target_alias} in
+ "") target_noncanonical=${host_noncanonical} ;;
+ *) target_noncanonical=${target_alias} ;;
esac
-build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
-build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$build" 1>&6
-test "$host_alias" != "$target_alias" &&
+
+
+test "$host_noncanonical" = "$target_noncanonical" &&
test "$program_prefix$program_suffix$program_transform_name" = \
NONENONEs,x,x, &&
- program_prefix=${target_alias}-
+ program_transform_name=s,y,y,
-if test "$program_transform_name" = s,x,x,; then
- program_transform_name=
+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
- # Double any \ or $. echo might interpret backslashes.
- cat <<\EOF_SED > conftestsed
-s,\\,\\\\,g; s,\$,$$,g
-EOF_SED
- program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
- rm -f conftestsed
+ 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}-
test "$program_prefix" != NONE &&
- program_transform_name="s,^,${program_prefix},; $program_transform_name"
+ program_transform_name="s,^,$program_prefix,;$program_transform_name"
# Use a double $ so make ignores it.
test "$program_suffix" != NONE &&
- program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+ program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $. echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
-# sed with no file args requires a program.
-test "$program_transform_name" = "" && program_transform_name="s,x,x,"
# Get 'install' or 'install-sh' and its variants.
@@ -696,67 +1613,82 @@ test "$program_transform_name" = "" && program_transform_name="s,x,x,"
# 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 $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:705: checking for a BSD compatible install" >&5
+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 eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
- for ac_dir in $PATH; do
- # Account for people who put trailing slashes in PATH elements.
- case "$ac_dir/" in
- /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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
- if test -f $ac_dir/$ac_prog; 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 $ac_dir/$ac_prog >/dev/null 2>&1; then
+ 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="$ac_dir/$ac_prog -c"
- break 2
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
fi
fi
done
- ;;
- esac
- done
- IFS="$ac_save_IFS"
+ done
+ ;;
+esac
+done
+
fi
if test "${ac_cv_path_install+set}" = set; then
- INSTALL="$ac_cv_path_install"
+ 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"
+ INSTALL=$ac_install_sh
fi
fi
-echo "$ac_t""$INSTALL" 1>&6
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-echo $ac_n "checking whether ln works""... $ac_c" 1>&6
-echo "configure:758: checking whether ln works" >&5
-if eval "test \"`echo '$''{'acx_cv_prog_LN'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking whether ln works" >&5
+echo $ECHO_N "checking whether ln works... $ECHO_C" >&6
+if test "${acx_cv_prog_LN+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
rm -f conftestdata_t
echo >conftestdata_f
@@ -771,31 +1703,23 @@ rm -f conftestdata_f conftestdata_t
fi
if test $acx_cv_prog_LN = no; then
LN="cp"
- echo "$ac_t""no, using $LN" 1>&6
+ echo "$as_me:$LINENO: result: no, using $LN" >&5
+echo "${ECHO_T}no, using $LN" >&6
else
LN="$acx_cv_prog_LN"
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
fi
-echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:782: checking whether ln -s works" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- rm -f conftestdata
-if ln -s X conftestdata 2>/dev/null
-then
- rm -f conftestdata
- ac_cv_prog_LN_S="ln -s"
+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
- ac_cv_prog_LN_S=ln
-fi
-fi
-LN_S="$ac_cv_prog_LN_S"
-if test "$ac_cv_prog_LN_S" = "ln -s"; then
- echo "$ac_t""yes" 1>&6
-else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
fi
@@ -837,14 +1761,25 @@ progname=$0
# if PWD already has a value, it is probably wrong.
if test -n "$PWD" ; then PWD=`${PWDCMD-pwd}`; fi
-# Export original configure arguments for use by sub-configures. These
-# will be expanded by make, so quote '$'.
-tmp="$progname $@"
-sed -e 's,\$,$$,g' <<EOF_SED > conftestsed.out
-$tmp
-EOF_SED
-TOPLEVEL_CONFIGURE_ARGUMENTS=`cat conftestsed.out`
-rm -f conftestsed.out
+# Export original configure arguments for use by sub-configures.
+# Quote arguments with shell meta charatcers.
+TOPLEVEL_CONFIGURE_ARGUMENTS=
+set -- "$progname" "$@"
+for ac_arg
+do
+ case "$ac_arg" in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
+ # if the argument is of the form -foo=baz, quote the baz part only
+ ac_arg=`echo "'$ac_arg'" | sed "s/^'\([-a-zA-Z0-9]*=\)/\\1'/"` ;;
+ *) ;;
+ esac
+ # Add the quoted argument to the list.
+ TOPLEVEL_CONFIGURE_ARGUMENTS="$TOPLEVEL_CONFIGURE_ARGUMENTS $ac_arg"
+done
+# Remove the initial space we just introduced and, as these will be
+# expanded by make, quote '$'.
+TOPLEVEL_CONFIGURE_ARGUMENTS=`echo "x$TOPLEVEL_CONFIGURE_ARGUMENTS" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
moveifchange=${srcdir}/move-if-change
@@ -872,11 +1807,11 @@ extra_host_args=
### or a host dependent tool. Then put it into the appropriate list
### (library or tools, host or target), doing a dependency sort.
-# Subdirs will be configured in the order listed in build_configdirs,
+# Subdirs will be configured in the order listed in build_configdirs,
# configdirs, or target_configdirs; see the serialization section below.
-# Dependency sorting is only needed when *configuration* must be done in
-# a particular order. In all cases a dependency should be specified in
+# Dependency sorting is only needed when *configuration* must be done in
+# a particular order. In all cases a dependency should be specified in
# the Makefile, whether or not it's implicitly specified here.
# Double entries in build_configdirs, configdirs, or target_configdirs may
@@ -892,7 +1827,7 @@ build_tools="build-texinfo build-byacc build-flex build-bison build-m4 build-fix
# these libraries are used by various programs built for the host environment
#
-host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber"
+host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr"
# these tools are built for the host environment
# Note, the powerpc-eabi build depends on sim occurring before gdb in order to
@@ -903,7 +1838,6 @@ host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc sid sim gdb
# libgcj represents the runtime libraries only used by gcj.
libgcj="target-libffi \
- target-boehm-gc \
target-zlib \
target-qthreads \
target-libjava"
@@ -911,14 +1845,15 @@ libgcj="target-libffi \
# these libraries are built for the target environment, and are built after
# the host libraries and the host tools (which may be a cross compiler)
#
-target_libraries="target-libiberty \
+target_libraries="target-libgcc \
+ target-libiberty \
target-libgloss \
target-newlib \
target-libstdc++-v3 \
target-libmudflap \
target-libssp \
- target-libgcc-math \
target-libgfortran \
+ target-boehm-gc \
${libgcj} \
target-libobjc \
target-libada \
@@ -957,26 +1892,29 @@ if test x"${host}" = x"${target}" ; then
is_cross_compiler=no
else
is_cross_compiler=yes
-fi
+fi
# Find the build and target subdir names.
- case ${build_alias} in
- "") build_noncanonical=${build} ;;
- *) build_noncanonical=${build_alias} ;;
-esac
- case ${host_alias} in
- "") host_noncanonical=${build_noncanonical} ;;
- *) host_noncanonical=${host_alias} ;;
-esac
-
- case ${target_alias} in
- "") target_noncanonical=${host_noncanonical} ;;
- *) target_noncanonical=${target_alias} ;;
-esac
+# post-stage1 host modules use a different CC_FOR_BUILD so, in order to
+# have matching libraries, they should use host libraries: Makefile.tpl
+# arranges to pass --with-build-libsubdir=$(HOST_SUBDIR).
+# However, they still use the build modules, because the corresponding
+# host modules (e.g. bison) are only built for the host when bootstrap
+# finishes. So:
+# - build_subdir is where we find build modules, and never changes.
+# - build_libsubdir is where we find build libraries, and can be overridden.
- # Prefix 'build-' so this never conflicts with target_subdir.
+# Prefix 'build-' so this never conflicts with target_subdir.
build_subdir="build-${build_noncanonical}"
+
+# Check whether --with-build-libsubdir or --without-build-libsubdir was given.
+if test "${with_build_libsubdir+set}" = set; then
+ withval="$with_build_libsubdir"
+ build_libsubdir="$withval"
+else
+ build_libsubdir="$build_subdir"
+fi;
# --srcdir=. covers the toplevel, while "test -d" covers the subdirectories
if ( test $srcdir = . && test -d gcc ) \
|| test -d $srcdir/../host-${host_noncanonical}; then
@@ -986,7 +1924,7 @@ else
fi
# No prefix.
target_subdir=${target_noncanonical}
-
+
# Skipdirs are removed silently.
skipdirs=
@@ -1007,7 +1945,7 @@ if test x$with_gnu_as = xno ; then
noconfigdirs="$noconfigdirs gas"
fi
-# some tools are so dependent upon X11 that if we're not building with X,
+# some tools are so dependent upon X11 that if we're not building with X,
# it's not even worth trying to configure, much less build, that tool.
case ${with_x} in
@@ -1015,14 +1953,14 @@ case ${with_x} in
no)
skipdirs="${skipdirs} tk itcl libgui"
# We won't be able to build gdbtk without X.
- enable_gdbtk=no
+ enable_gdbtk=no
;;
*) echo "*** bad value \"${with_x}\" for -with-x flag; ignored" 1>&2 ;;
esac
# Some tools are only suitable for building in a "native" situation.
-# Remove these if host!=target.
-native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff gprof target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf"
+# Remove these if host!=target.
+native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf"
# Similarly, some are only suitable for cross toolchains.
# Remove these if host=target.
@@ -1059,7 +1997,7 @@ esac
# Only spaces may be used in this macro; not newlines or tabs.
unsupported_languages=
-# Remove more programs from consideration, based on the host or
+# Remove more programs from consideration, based on the host or
# target this usually means that a port of the program doesn't
# exist yet.
@@ -1073,9 +2011,12 @@ case "${host}" in
i[3456789]86-*-go32* | i[3456789]86-*-msdosdjgpp*)
noconfigdirs="$noconfigdirs tcl tk expect dejagnu send-pr uudecode guile itcl gnuserv libffi"
;;
+ x86_64-*-mingw*)
+ noconfigdirs="$noconfigdirs expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool newlib"
+ ;;
i[3456789]86-*-mingw32*)
# noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl itcl gnuserv"
- noconfigdirs="$noconfigdirs expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool"
+ noconfigdirs="$noconfigdirs expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool newlib"
;;
i[3456789]86-*-beos*)
noconfigdirs="$noconfigdirs tk itcl libgui gdb"
@@ -1101,8 +2042,7 @@ if test "${enable_libada+set}" = set; then
ENABLE_LIBADA=$enableval
else
ENABLE_LIBADA=yes
-fi
-
+fi;
if test "${ENABLE_LIBADA}" != "yes" ; then
noconfigdirs="$noconfigdirs gnattools"
fi
@@ -1113,25 +2053,7 @@ if test "${enable_libssp+set}" = set; then
ENABLE_LIBSSP=$enableval
else
ENABLE_LIBSSP=yes
-fi
-
-
-# Set the default so we build libgcc-math for ix86 and x86_64
-# Check whether --enable-libgcc-math or --disable-libgcc-math was given.
-if test "${enable_libgcc_math+set}" = set; then
- enableval="$enable_libgcc_math"
- :
-else
-
-case "${target}" in
- i?86-* | x86_64-* )
- enable_libgcc_math=yes ;;
- *)
- enable_libgcc_math=no ;;
-esac
-
-fi
-
+fi;
# Save it here so that, even in case of --enable-libgcj, if the Java
# front-end isn't enabled, we still get libgcj disabled.
@@ -1153,7 +2075,7 @@ esac
# Disable libmudflap on some systems.
if test x$enable_libmudflap = x ; then
case "${target}" in
- *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
+ *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc* | *-*-uclinux*)
# Enable libmudflap by default in GNU and friends.
;;
*-*-freebsd*)
@@ -1174,7 +2096,7 @@ if test x$enable_libgomp = x ; then
;;
*-*-netbsd* | *-*-freebsd* | *-*-openbsd*)
;;
- *-*-solaris2* | *-*-sysv4* | *-*-irix* | *-*-osf* | *-*-hpux*)
+ *-*-solaris2* | *-*-sysv4* | *-*-irix6* | *-*-osf* | *-*-hpux11*)
;;
*-*-darwin* | *-*-aix*)
;;
@@ -1189,7 +2111,7 @@ case "${target}" in
*-*-chorusos)
noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
;;
- powerpc-*-darwin*)
+ powerpc-*-darwin* | i[3456789]86-*-darwin*)
noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof"
noconfigdirs="$noconfigdirs sim target-rda"
;;
@@ -1253,9 +2175,6 @@ case "${target}" in
*-*-vxworks*)
noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libiberty target-libstdc++-v3 ${libgcj}"
;;
- m32c-*-*)
- noconfigdirs="$noconfigdirs target-libstdc++-v3"
- ;;
alpha*-dec-osf*)
# ld works, but does not support shared libraries.
# newlib is not 64 bit ready. I'm not sure about fileutils.
@@ -1278,7 +2197,7 @@ case "${target}" in
;;
sh-*-linux*)
noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
- ;;
+ ;;
sh*-*-pe|mips*-*-pe|*arm-wince-pe)
noconfigdirs="$noconfigdirs ${libgcj}"
noconfigdirs="$noconfigdirs target-examples"
@@ -1308,6 +2227,9 @@ case "${target}" in
arm*-*-linux-gnueabi)
noconfigdirs="$noconfigdirs target-libffi target-qthreads"
noconfigdirs="$noconfigdirs target-libjava target-libobjc"
+ case ${with_newlib} in
+ no) noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+ esac
;;
arm*-*-symbianelf*)
noconfigdirs="$noconfigdirs ${libgcj} target-libiberty"
@@ -1331,7 +2253,7 @@ case "${target}" in
noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
;;
bfin-*-*)
- noconfigdirs="$noconfigdirs target-libgloss gdb"
+ noconfigdirs="$noconfigdirs gdb"
if test x${is_cross_compiler} != xno ; then
target_configdirs="${target_configdirs} target-bsp target-cygmon"
fi
@@ -1395,6 +2317,9 @@ case "${target}" in
hppa*64*-*-*)
noconfigdirs="$noconfigdirs ${libgcj}"
;;
+ hppa*-hp-hpux11*)
+ noconfigdirs="$noconfigdirs ld shellutils"
+ ;;
hppa*-*-*)
# According to Alexandre Oliva <aoliva@redhat.com>, libjava won't
# build on HP-UX 10.20.
@@ -1436,33 +2361,23 @@ case "${target}" in
# 'target-newlib' will appear in skipdirs.
;;
i[3456789]86-*-mingw32*)
- target_configdirs="$target_configdirs target-mingw"
- noconfigdirs="$noconfigdirs expect target-libgloss ${libgcj}"
-
- # Can't build gdb for mingw32 if not native.
- case "${host}" in
- i[3456789]86-*-mingw32) ;; # keep gdb tcl tk expect etc.
- *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl gnuserv"
- ;;
- esac
- ;;
+ target_configdirs="$target_configdirs target-winsup"
+ noconfigdirs="$noconfigdirs expect target-libgloss target-newlib ${libgcj}"
+ ;;
+ x86_64-*-mingw*)
+ target_configdirs="$target_configdirs target-winsup"
+ noconfigdirs="$noconfigdirs expect target-libgloss target-newlib ${libgcj}"
+ ;;
*-*-cygwin*)
target_configdirs="$target_configdirs target-libtermcap target-winsup"
noconfigdirs="$noconfigdirs target-gperf target-libgloss ${libgcj}"
# always build newlib if winsup directory is present.
- if test -d "$srcdir/winsup"; then
+ if test -d "$srcdir/winsup/cygwin"; then
skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
elif test -d "$srcdir/newlib"; then
- echo "Warning: winsup is missing so newlib can't be built."
+ echo "Warning: winsup/cygwin is missing so newlib can't be built."
fi
-
- # Can't build gdb for Cygwin if not native.
- case "${host}" in
- *-*-cygwin*) ;; # keep gdb tcl tk expect etc.
- *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl libgui gnuserv"
- ;;
- esac
- ;;
+ ;;
i[3456789]86-moss-msdos | i[3456789]86-*-moss* | \
i[3456789]86-*-uwin* | i[3456789]86-*-interix* )
;;
@@ -1563,17 +2478,11 @@ case "${target}" in
# <oldham@codesourcery.com>
noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
;;
- mips*-dec-bsd*)
- noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
- ;;
mips*-*-bsd*)
noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
;;
- mipstx39-*-*)
- noconfigdirs="$noconfigdirs gprof ${libgcj}" # same as generic mips
- ;;
mips64*-*-linux*)
- noconfigdirs="$noconfigdirs target-newlib ${libgcj}"
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
;;
mips*-*-linux*)
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
@@ -1615,6 +2524,9 @@ case "${target}" in
;;
sparc-*-solaris* | sparc64-*-solaris* | sparcv9-*-solaris*)
;;
+ spu-*-*)
+ skipdirs="target-libssp"
+ ;;
v810-*-*)
noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld target-libstdc++-v3 opcodes target-libgloss ${libgcj}"
;;
@@ -1644,7 +2556,7 @@ case "${target}" in
;;
*-*-lynxos*)
noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
- ;;
+ ;;
*-*-*)
noconfigdirs="$noconfigdirs ${libgcj}"
;;
@@ -1771,6 +2683,8 @@ case "${host}" in
;;
*-mingw32*)
;;
+ *-mingw64*)
+ ;;
*-interix*)
host_makefile_frag="config/mh-interix"
;;
@@ -1841,233 +2755,664 @@ if test -z "${CC}" && test "${build}" = "${host}" ; then
fi
if test "${build}" != "${host}" ; then
- # If we are doing a Canadian Cross, in which the host and build systems
- # are not the same, we set reasonable default values for the tools.
-
- CC=${CC-${host_alias}-gcc}
- CFLAGS=${CFLAGS-"-g -O2"}
- CXX=${CXX-${host_alias}-c++}
- CXXFLAGS=${CXXFLAGS-"-g -O2"}
CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
+else
+ CC_FOR_BUILD="\$(CC)"
+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
+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
- # Set reasonable default values for some tools even if not Canadian.
- # Of course, these are different reasonable default values, originally
- # specified directly in the Makefile.
- # We don't export, so that autoconf can do its job.
- # Note that all these settings are above the fragment inclusion point
- # in Makefile.in, so can still be overridden by fragments.
- # This is all going to change when we autoconfiscate...
+ 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
- CC_FOR_BUILD="\$(CC)"
+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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1867: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ 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
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="gcc"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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"
+CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
else
- echo "$ac_t""no" 1>&6
+ 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1897: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_prog_rejected=no
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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 $# -gt 0; then
+ 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
- set dummy "$ac_dir/$ac_word" "$@"
- shift
- ac_cv_prog_CC="$@"
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
fi
fi
fi
fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
- if test -z "$CC"; then
- case "`uname -s`" in
- *win32* | *WIN32*)
- # Extract the first word of "cl", so it can be a program name with args.
-set dummy cl; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1948: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+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
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="cl"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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"
+CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
- ;;
- esac
+
+ 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
- test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+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
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1980: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+ test -n "$ac_ct_CC" && break
+done
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
+ CC=$ac_ct_CC
+fi
-cat > conftest.$ac_ext << EOF
+fi
-#line 1991 "configure"
-#include "confdefs.h"
-main(){return(0);}
-EOF
-if { (eval echo configure:1996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- ac_cv_prog_cc_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
- ac_cv_prog_cc_cross=no
+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
- ac_cv_prog_cc_cross=yes
- fi
+ 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 "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_prog_cc_works=no
+ { { 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 -fr conftest*
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:2022: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:2027: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2036: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
+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
- ac_cv_prog_gcc=no
-fi
-fi
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+int
+main ()
+{
-if test $ac_cv_prog_gcc = yes; then
- GCC=yes
+ ;
+ 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
- GCC=
+ 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
-ac_test_CFLAGS="${CFLAGS+set}"
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS=
-echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:2055: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+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
- echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ 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
- ac_cv_prog_cc_g=no
-fi
-rm -f conftest*
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_cv_prog_cc_g=no
fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+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"
+ CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
CFLAGS="-g -O2"
@@ -2081,111 +3426,812 @@ 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
- # We must set the default linker to the linker used by gcc for the correct
- # operation of libtool. If LD is not defined and we are using gcc, try to
- # set the LD default to the ld used by gcc.
- if test -z "$LD"; then
- if test "$GCC" = yes; then
- case $build in
- *-*-mingw*)
- gcc_prog_ld=`$CC -print-prog-name=ld 2>&1 | tr -d '\015'` ;;
- *)
- gcc_prog_ld=`$CC -print-prog-name=ld 2>&1` ;;
- esac
- case $gcc_prog_ld in
- # Accept absolute paths.
- [\\/]* | [A-Za-z]:[\\/]*)
- LD="$gcc_prog_ld" ;;
- esac
- 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
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+ 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_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # 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_CXX="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
fi
+done
+done
- CXX=${CXX-"c++"}
- CFLAGS=${CFLAGS-"-g"}
- CXXFLAGS=${CXXFLAGS-"-g -O2"}
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-if test $host != $build; then
- ac_tool_prefix=${host_alias}-
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+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_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_CXX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+ CXX=$ac_ct_CXX
+fi
+
+
+# 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_cxx_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_cxx_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_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_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_cxx_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_cxx_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
else
- ac_tool_prefix=
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+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_cxx_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_cxx_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
+
+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
+
+
+# We must set the default linker to the linker used by gcc for the correct
+# operation of libtool. If LD is not defined and we are using gcc, try to
+# set the LD default to the ld used by gcc.
+if test -z "$LD"; then
+ if test "$GCC" = yes; then
+ case $build in
+ *-*-mingw*)
+ gcc_prog_ld=`$CC -print-prog-name=ld 2>&1 | tr -d '\015'` ;;
+ *)
+ gcc_prog_ld=`$CC -print-prog-name=ld 2>&1` ;;
+ esac
+ case $gcc_prog_ld in
+ # Accept absolute paths.
+ [\\/]* | [A-Za-z]:[\\/]*)
+ LD="$gcc_prog_ld" ;;
+ esac
+ fi
fi
-# Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args.
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args.
set dummy ${ac_tool_prefix}gnatbind; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2122: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_GNATBIND+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$GNATBIND"; then
ac_cv_prog_GNATBIND="$GNATBIND" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_GNATBIND="${ac_tool_prefix}gnatbind"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_GNATBIND="${ac_tool_prefix}gnatbind"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-GNATBIND="$ac_cv_prog_GNATBIND"
+GNATBIND=$ac_cv_prog_GNATBIND
if test -n "$GNATBIND"; then
- echo "$ac_t""$GNATBIND" 1>&6
+ echo "$as_me:$LINENO: result: $GNATBIND" >&5
+echo "${ECHO_T}$GNATBIND" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+fi
if test -z "$ac_cv_prog_GNATBIND"; then
-if test -n "$ac_tool_prefix"; then
+ ac_ct_GNATBIND=$GNATBIND
# Extract the first word of "gnatbind", so it can be a program name with args.
set dummy gnatbind; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2154: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_GNATBIND+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$GNATBIND"; then
- ac_cv_prog_GNATBIND="$GNATBIND" # Let the user override the test.
+ if test -n "$ac_ct_GNATBIND"; then
+ ac_cv_prog_ac_ct_GNATBIND="$ac_ct_GNATBIND" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_GNATBIND="gnatbind"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_GNATBIND" && ac_cv_prog_GNATBIND="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
+ ac_cv_prog_ac_ct_GNATBIND="gnatbind"
+ 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_GNATBIND" && ac_cv_prog_ac_ct_GNATBIND="no"
fi
fi
-GNATBIND="$ac_cv_prog_GNATBIND"
-if test -n "$GNATBIND"; then
- echo "$ac_t""$GNATBIND" 1>&6
+ac_ct_GNATBIND=$ac_cv_prog_ac_ct_GNATBIND
+if test -n "$ac_ct_GNATBIND"; then
+ echo "$as_me:$LINENO: result: $ac_ct_GNATBIND" >&5
+echo "${ECHO_T}$ac_ct_GNATBIND" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ GNATBIND=$ac_ct_GNATBIND
else
- echo "$ac_t""no" 1>&6
+ GNATBIND="$ac_cv_prog_GNATBIND"
fi
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gnatmake", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gnatmake; 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_GNATMAKE+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$GNATMAKE"; then
+ ac_cv_prog_GNATMAKE="$GNATMAKE" # 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_GNATMAKE="${ac_tool_prefix}gnatmake"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+GNATMAKE=$ac_cv_prog_GNATMAKE
+if test -n "$GNATMAKE"; then
+ echo "$as_me:$LINENO: result: $GNATMAKE" >&5
+echo "${ECHO_T}$GNATMAKE" >&6
else
- GNATBIND="no"
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+
fi
+if test -z "$ac_cv_prog_GNATMAKE"; then
+ ac_ct_GNATMAKE=$GNATMAKE
+ # Extract the first word of "gnatmake", so it can be a program name with args.
+set dummy gnatmake; 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_GNATMAKE+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_GNATMAKE"; then
+ ac_cv_prog_ac_ct_GNATMAKE="$ac_ct_GNATMAKE" # 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_GNATMAKE="gnatmake"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
-echo $ac_n "checking whether compiler driver understands Ada""... $ac_c" 1>&6
-echo "configure:2187: checking whether compiler driver understands Ada" >&5
-if eval "test \"`echo '$''{'acx_cv_cc_gcc_supports_ada'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ test -z "$ac_cv_prog_ac_ct_GNATMAKE" && ac_cv_prog_ac_ct_GNATMAKE="no"
+fi
+fi
+ac_ct_GNATMAKE=$ac_cv_prog_ac_ct_GNATMAKE
+if test -n "$ac_ct_GNATMAKE"; then
+ echo "$as_me:$LINENO: result: $ac_ct_GNATMAKE" >&5
+echo "${ECHO_T}$ac_ct_GNATMAKE" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ GNATMAKE=$ac_ct_GNATMAKE
+else
+ GNATMAKE="$ac_cv_prog_GNATMAKE"
+fi
+
+echo "$as_me:$LINENO: checking whether compiler driver understands Ada" >&5
+echo $ECHO_N "checking whether compiler driver understands Ada... $ECHO_C" >&6
+if test "${acx_cv_cc_gcc_supports_ada+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.adb <<EOF
procedure conftest is begin null; end conftest;
@@ -2205,19 +4251,19 @@ if test x"$errors" = x && test -f conftest.$ac_objext; then
fi
rm -f conftest.*
fi
+echo "$as_me:$LINENO: result: $acx_cv_cc_gcc_supports_ada" >&5
+echo "${ECHO_T}$acx_cv_cc_gcc_supports_ada" >&6
-echo "$ac_t""$acx_cv_cc_gcc_supports_ada" 1>&6
-
-if test x$GNATBIND != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then
+if test x$GNATBIND != xno && test x$GNATMAKE != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then
have_gnat=yes
else
have_gnat=no
fi
-echo $ac_n "checking how to compare bootstrapped objects""... $ac_c" 1>&6
-echo "configure:2219: checking how to compare bootstrapped objects" >&5
-if eval "test \"`echo '$''{'gcc_cv_prog_cmp_skip'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking how to compare bootstrapped objects" >&5
+echo $ECHO_N "checking how to compare bootstrapped objects... $ECHO_C" >&6
+if test "${gcc_cv_prog_cmp_skip+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
echo abfoo >t1
echo cdfoo >t2
@@ -2239,131 +4285,322 @@ else
rm t1 t2
fi
-
-echo "$ac_t""$gcc_cv_prog_cmp_skip" 1>&6
+echo "$as_me:$LINENO: result: $gcc_cv_prog_cmp_skip" >&5
+echo "${ECHO_T}$gcc_cv_prog_cmp_skip" >&6
do_compare="$gcc_cv_prog_cmp_skip"
# Check for GMP and MPFR
-gmplibs=
+gmplibs="-lmpfr -lgmp"
gmpinc=
-have_gmp=yes
+have_gmp=no
+
# Specify a location for mpfr
# check for this first so it ends up on the link line before gmp.
+
# Check whether --with-mpfr-dir or --without-mpfr-dir was given.
if test "${with_mpfr_dir+set}" = set; then
withval="$with_mpfr_dir"
- :
-fi
+ { { echo "$as_me:$LINENO: error: The --with-mpfr-dir=PATH option has been removed.
+Use --with-mpfr=PATH or --with-mpfr-include=PATH plus --with-mpfr-lib=PATH" >&5
+echo "$as_me: error: The --with-mpfr-dir=PATH option has been removed.
+Use --with-mpfr=PATH or --with-mpfr-include=PATH plus --with-mpfr-lib=PATH" >&2;}
+ { (exit 1); exit 1; }; }
+fi;
-if test "x$with_mpfr_dir" != x; then
- gmpinc="-I$with_mpfr_dir"
- gmplibs="$with_mpfr_dir/libmpfr.a"
-else
- gmplibs="-lmpfr"
-fi
-
# Check whether --with-mpfr or --without-mpfr was given.
if test "${with_mpfr+set}" = set; then
withval="$with_mpfr"
- :
-fi
+fi;
+
+# Check whether --with-mpfr_include or --without-mpfr_include was given.
+if test "${with_mpfr_include+set}" = set; then
+ withval="$with_mpfr_include"
+
+fi;
+
+# Check whether --with-mpfr_lib or --without-mpfr_lib was given.
+if test "${with_mpfr_lib+set}" = set; then
+ withval="$with_mpfr_lib"
+
+fi;
if test "x$with_mpfr" != x; then
gmplibs="-L$with_mpfr/lib $gmplibs"
gmpinc="-I$with_mpfr/include"
fi
+if test "x$with_mpfr_include" != x; then
+ gmpinc="-I$with_mpfr_include"
+fi
+if test "x$with_mpfr_lib" != x; then
+ gmplibs="-L$with_mpfr_lib $gmplibs"
+fi
+if test "x$with_mpfr$with_mpfr_include$with_mpfr_lib" = x && test -d ${srcdir}/mpfr; then
+ gmplibs='-L$$r/$(HOST_SUBDIR)/mpfr/.libs -L$$r/$(HOST_SUBDIR)/mpfr/_libs '"$gmplibs"
+ gmpinc='-I$$r/$(HOST_SUBDIR)/mpfr -I$$s/mpfr '"$gmpinc"
+ # Do not test the mpfr version. Assume that it is sufficient, since
+ # it is in the source tree, and the library has not been built yet
+ # but it would be included on the link line in the version check below
+ # hence making the test fail.
+ have_gmp=yes
+fi
# Specify a location for gmp
+
# Check whether --with-gmp-dir or --without-gmp-dir was given.
if test "${with_gmp_dir+set}" = set; then
withval="$with_gmp_dir"
- :
-fi
-
+ { { echo "$as_me:$LINENO: error: The --with-gmp-dir=PATH option has been removed.
+Use --with-gmp=PATH or --with-gmp-include=PATH plus --with-gmp-lib=PATH" >&5
+echo "$as_me: error: The --with-gmp-dir=PATH option has been removed.
+Use --with-gmp=PATH or --with-gmp-include=PATH plus --with-gmp-lib=PATH" >&2;}
+ { (exit 1); exit 1; }; }
+fi;
-if test "x$with_gmp_dir" != x; then
- gmpinc="$gmpinc -I$with_gmp_dir"
- if test -f "$with_gmp_dir/.libs/libgmp.a"; then
- gmplibs="$gmplibs $with_gmp_dir/.libs/libgmp.a"
- elif test -f "$with_gmp_dir/_libs/libgmp.a"; then
- gmplibs="$gmplibs $with_gmp_dir/_libs/libgmp.a"
- fi
- # One of the later tests will catch the error if neither library is present.
-else
- gmplibs="$gmplibs -lgmp"
-fi
# Check whether --with-gmp or --without-gmp was given.
if test "${with_gmp+set}" = set; then
withval="$with_gmp"
- :
-fi
+
+fi;
+
+# Check whether --with-gmp_include or --without-gmp_include was given.
+if test "${with_gmp_include+set}" = set; then
+ withval="$with_gmp_include"
+
+fi;
+
+# Check whether --with-gmp_lib or --without-gmp_lib was given.
+if test "${with_gmp_lib+set}" = set; then
+ withval="$with_gmp_lib"
+
+fi;
if test "x$with_gmp" != x; then
gmplibs="-L$with_gmp/lib $gmplibs"
gmpinc="-I$with_gmp/include $gmpinc"
fi
+if test "x$with_gmp_include" != x; then
+ gmpinc="-I$with_gmp_include $gmpinc"
+fi
+if test "x$with_gmp_lib" != x; then
+ gmplibs="-L$with_gmp_lib $gmplibs"
+fi
+if test "x$with_gmp$with_gmp_include$with_gmp_lib" = x && test -d ${srcdir}/gmp; then
+ gmplibs='-L$$r/$(HOST_SUBDIR)/gmp/.libs -L$$r/$(HOST_SUBDIR)/gmp/_libs '"$gmplibs"
+ gmpinc='-I$$r/$(HOST_SUBDIR)/gmp -I$$s/gmp '"$gmpinc"
+ # Do not test the gmp version. Assume that it is sufficient, since
+ # it is in the source tree, and the library has not been built yet
+ # but it would be included on the link line in the version check below
+ # hence making the test fail.
+ have_gmp=yes
+fi
-saved_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS $gmpinc"
-# Check GMP actually works
-echo $ac_n "checking for correct version of gmp.h""... $ac_c" 1>&6
-echo "configure:2317: checking for correct version of gmp.h" >&5
-cat > conftest.$ac_ext <<EOF
-#line 2319 "configure"
-#include "confdefs.h"
-#include "gmp.h"
-int main() {
-
-#if __GNU_MP_VERSION < 3
-choke me
-#endif
+if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then
+ have_gmp=yes
+ saved_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $gmpinc"
+ # Check GMP actually works
+ echo "$as_me:$LINENO: checking for correct version of gmp.h" >&5
+echo $ECHO_N "checking for correct version of gmp.h... $ECHO_C" >&6
-; return 0; }
-EOF
-if { (eval echo configure:2330: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- echo "$ac_t""no" 1>&6; have_gmp=no
-fi
-rm -f conftest*
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include "gmp.h"
+int
+main ()
+{
-if test x"$have_gmp" = xyes; then
- echo $ac_n "checking for MPFR""... $ac_c" 1>&6
-echo "configure:2343: checking for MPFR" >&5
+ #if __GNU_MP_VERSION < 4 || (__GNU_MP_VERSION == 4 && __GNU_MP_VERSION_MINOR < 1)
+ choke me
+ #endif
- saved_LIBS="$LIBS"
- LIBS="$LIBS $gmplibs"
- cat > conftest.$ac_ext <<EOF
-#line 2348 "configure"
-#include "confdefs.h"
+ ;
+ 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
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; have_gmp=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+ if test x"$have_gmp" = xyes; then
+ saved_LIBS="$LIBS"
+ LIBS="$LIBS $gmplibs"
+ echo "$as_me:$LINENO: checking for correct version of mpfr.h" >&5
+echo $ECHO_N "checking for correct version of mpfr.h... $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 <gmp.h>
-#include <mpfr.h>
-int main() {
-mpfr_t n; mpfr_init(n);
-; return 0; }
-EOF
-if { (eval echo configure:2356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- echo "$ac_t""no" 1>&6; have_gmp=no
-fi
-rm -f conftest*
- LIBS="$saved_LIBS"
+ #include <mpfr.h>
+int
+main ()
+{
+
+ #if MPFR_VERSION < MPFR_VERSION_NUM(2,2,0)
+ choke me
+ #endif
+ mpfr_t n;
+ mpfr_t x;
+ int t;
+ mpfr_init (n);
+ mpfr_init (x);
+ mpfr_atan2 (n, n, x, GMP_RNDN);
+ mpfr_erfc (n, x, GMP_RNDN);
+ mpfr_subnormalize (x, t, GMP_RNDN);
+
+ ;
+ 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
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <gmp.h>
+ #include <mpfr.h>
+int
+main ()
+{
+
+ #if MPFR_VERSION < MPFR_VERSION_NUM(2,2,1)
+ choke me
+ #endif
+ mpfr_t n; mpfr_init(n);
+
+ ;
+ 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
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: buggy but acceptable" >&5
+echo "${ECHO_T}buggy but acceptable" >&6
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; have_gmp=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$saved_LIBS"
+ fi
CFLAGS="$saved_CFLAGS"
+
+ if test x$have_gmp != xyes; then
+ { { echo "$as_me:$LINENO: error: Building GCC requires GMP 4.1+ and MPFR 2.2.1+.
+Try the --with-gmp and/or --with-mpfr options to specify their locations.
+Copies of these libraries' source code can be found at their respective
+hosting sites as well as at ftp://gcc.gnu.org/pub/gcc/infrastructure/.
+See also http://gcc.gnu.org/install/prerequisites.html for additional info.
+If you obtained GMP and/or MPFR from a vendor distribution package, make
+sure that you have installed both the libraries and the header files.
+They may be located in separate packages." >&5
+echo "$as_me: error: Building GCC requires GMP 4.1+ and MPFR 2.2.1+.
+Try the --with-gmp and/or --with-mpfr options to specify their locations.
+Copies of these libraries' source code can be found at their respective
+hosting sites as well as at ftp://gcc.gnu.org/pub/gcc/infrastructure/.
+See also http://gcc.gnu.org/install/prerequisites.html for additional info.
+If you obtained GMP and/or MPFR from a vendor distribution package, make
+sure that you have installed both the libraries and the header files.
+They may be located in separate packages." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
fi
# Flags needed for both GMP and/or MPFR
@@ -2371,8 +4608,7 @@ fi
# By default, C is the only stage 1 language.
-stage1_languages=c
-
+stage1_languages=,c,
# Figure out what language subdirectories are present.
# Look if the user specified --enable-languages="..."; if not, use
@@ -2434,9 +4670,9 @@ if test -d ${srcdir}/gcc; then
esac
done
- new_enable_languages=c
+ new_enable_languages=,c,
missing_languages=`echo ",$enable_languages," | sed -e s/,all,/,/ -e s/,c,/,/ `
- potential_languages=c
+ potential_languages=,c,
for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
case ${lang_frag} in
@@ -2445,75 +4681,90 @@ if test -d ${srcdir}/gcc; then
# an apparent bug in bash 1.12 on linux.
${srcdir}/gcc/[*]/config-lang.in) ;;
*)
- # From the config-lang.in, get $language, $target_libs,
+ # From the config-lang.in, get $language, $target_libs,
# $lang_dirs, $boot_language, and $build_by_default
language=
target_libs=
lang_dirs=
- boot_language=
- build_by_default=
- need_gmp=
+ subdir_requires=
+ boot_language=no
+ build_by_default=yes
. ${lang_frag}
- potential_languages="${potential_languages},${language}"
- # This is quite sensitive to the ordering of the case statement arms.
- case ,${enable_languages},:${language}:${have_gnat}:${build_by_default} in
- *::*:*)
- echo "${lang_frag} doesn't set \$language." 1>&2
- exit 1
- ;;
- *:ada:no:*)
- # Ada was requested with no preexisting GNAT. Disable unconditionally.
- add_this_lang=no
- ;;
- *,${language},*:*:*:*)
+ if test x${language} = x; then
+ echo "${lang_frag} doesn't set \$language." 1>&2
+ exit 1
+ fi
+
+ case ,${enable_languages}, in
+ *,${language},*)
# Language was explicitly selected; include it.
add_this_lang=yes
;;
- *,all,*:*:*:no)
- # 'all' was selected, but this is not a default language
- # so do not include it.
- add_this_lang=no
- ;;
- *,all,*:*:*:*)
- # 'all' was selected and this is a default language; include it.
- add_this_lang=yes
+ *,all,*)
+ # 'all' was selected, select it if it is a default language
+ add_this_lang=${build_by_default}
;;
*)
add_this_lang=no
;;
esac
- # Disable languages that need GMP if it isn't available.
- case ,${enable_languages},:${have_gmp}:${need_gmp} in
- *,${language},*:no:yes)
+ # Disable languages that need other directories if these aren't available.
+ for i in $subdir_requires; do
+ test -f "$srcdir/gcc/$i/config-lang.in" && continue
+ case ,${enable_languages}, in
+ *,${language},*)
+ # Specifically requested language; tell them.
+ { { echo "$as_me:$LINENO: error: The gcc/$i directory contains parts of $language but is missing" >&5
+echo "$as_me: error: The gcc/$i directory contains parts of $language but is missing" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ *)
+ # Silently disable.
+ add_this_lang=unsupported
+ ;;
+ esac
+ done
+
+ # Disable Ada if no preexisting GNAT is available.
+ case ,${enable_languages},:${language}:${have_gnat} in
+ *,${language},*:ada:no)
# Specifically requested language; tell them.
- { echo "configure: error: GMP with MPFR support is required to build $language" 1>&2; exit 1; }
+ { { echo "$as_me:$LINENO: error: GNAT is required to build $language" >&5
+echo "$as_me: error: GNAT is required to build $language" >&2;}
+ { (exit 1); exit 1; }; }
;;
- *:no:yes)
+ *:ada:no)
# Silently disable.
- add_this_lang=no
+ add_this_lang=unsupported
;;
esac
# Disable a language that is unsupported by the target.
case " $unsupported_languages " in
*" $language "*)
- add_this_lang=no
+ add_this_lang=unsupported
;;
esac
case $add_this_lang in
- no)
+ unsupported)
# Remove language-dependent dirs.
eval noconfigdirs='"$noconfigdirs "'\"$target_libs $lang_dirs\"
;;
- *)
- new_enable_languages="$new_enable_languages,$language"
+ no)
+ # Remove language-dependent dirs; still show language as supported.
+ eval noconfigdirs='"$noconfigdirs "'\"$target_libs $lang_dirs\"
+ potential_languages="${potential_languages}${language},"
+ ;;
+ yes)
+ new_enable_languages="${new_enable_languages}${language},"
+ potential_languages="${potential_languages}${language},"
missing_languages=`echo "$missing_languages" | sed "s/,$language,/,/"`
case ${boot_language} in
yes)
# Add to (comma-separated) list of stage 1 languages.
- stage1_languages="${stage1_languages},${language}"
+ stage1_languages="${stage1_languages}${language},"
;;
esac
;;
@@ -2522,18 +4773,61 @@ if test -d ${srcdir}/gcc; then
esac
done
+ # Check whether --enable-stage1-languages or --disable-stage1-languages was given.
+if test "${enable_stage1_languages+set}" = set; then
+ enableval="$enable_stage1_languages"
+ case ,${enable_stage1_languages}, in
+ ,no,|,,)
+ # Set it to something that will have no effect in the loop below
+ enable_stage1_languages=c ;;
+ ,yes,)
+ enable_stage1_languages=`echo $new_enable_languages | \
+ sed -e "s/^,//" -e "s/,$//" ` ;;
+ *,all,*)
+ enable_stage1_languages=`echo ,$enable_stage1_languages, | \
+ sed -e "s/,all,/$new_enable_languages/" -e "s/^,//" -e "s/,$//" ` ;;
+ esac
+
+ # Add "good" languages from enable_stage1_languages to stage1_languages,
+ # while "bad" languages go in missing_languages. Leave no duplicates.
+ for i in `echo $enable_stage1_languages | sed 's/,/ /g' `; do
+ case $potential_languages in
+ *,$i,*)
+ case $stage1_languages in
+ *,$i,*) ;;
+ *) stage1_languages="$stage1_languages$i," ;;
+ esac ;;
+ *)
+ case $missing_languages in
+ *,$i,*) ;;
+ *) missing_languages="$missing_languages$i," ;;
+ esac ;;
+ esac
+ done
+fi;
+
+ # Remove leading/trailing commas that were added for simplicity
+ potential_languages=`echo "$potential_languages" | sed -e "s/^,//" -e "s/,$//"`
missing_languages=`echo "$missing_languages" | sed -e "s/^,//" -e "s/,$//"`
+ stage1_languages=`echo "$stage1_languages" | sed -e "s/^,//" -e "s/,$//"`
+ new_enable_languages=`echo "$new_enable_languages" | sed -e "s/^,//" -e "s/,$//"`
+
if test "x$missing_languages" != x; then
- { echo "configure: error:
+ { { echo "$as_me:$LINENO: error:
+The following requested languages could not be built: ${missing_languages}
+Supported languages are: ${potential_languages}" >&5
+echo "$as_me: error:
The following requested languages could not be built: ${missing_languages}
-Recognised languages are: ${potential_languages}" 1>&2; exit 1; }
+Supported languages are: ${potential_languages}" >&2;}
+ { (exit 1); exit 1; }; }
fi
-
if test "x$new_enable_languages" != "x$enable_languages"; then
echo The following languages will be built: ${new_enable_languages}
+ enable_languages="$new_enable_languages"
fi
- enable_languages="$new_enable_languages"
- ac_configure_args=`echo " $ac_configure_args" | sed -e 's/ --enable-languages=[^ ]*//' -e 's/$/ --enable-languages='"$enable_languages"/ `
+
+
+ ac_configure_args=`echo " $ac_configure_args" | sed -e "s/ '--enable-languages=[^ ]*'//g" -e "s/$/ '--enable-languages="$enable_languages"'/" `
fi
# Handle --disable-<component> generically.
@@ -2544,6 +4838,32 @@ for dir in $configdirs $build_configdirs $target_configdirs ; do
fi
done
+# Check for Boehm's garbage collector
+# Check whether --enable-objc-gc or --disable-objc-gc was given.
+if test "${enable_objc_gc+set}" = set; then
+ enableval="$enable_objc_gc"
+ case ,${enable_languages},:${enable_objc_gc}:${noconfigdirs} in
+ *,objc,*:*:yes:*target-boehm-gc*)
+ { { echo "$as_me:$LINENO: error: Boehm's garbage collector was requested yet not supported in this configuration" >&5
+echo "$as_me: error: Boehm's garbage collector was requested yet not supported in this configuration" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+esac
+fi;
+
+# Make sure we only build Boehm's garbage collector if required.
+case ,${enable_languages},:${enable_objc_gc} in
+ *,objc,*:yes)
+ # Keep target-boehm-gc if requested for Objective-C.
+ ;;
+ *)
+ # Otherwise remove target-boehm-gc depending on target-libjava.
+ if echo " ${noconfigdirs} " | grep "target-libjava" >/dev/null 2>&1; then
+ noconfigdirs="$noconfigdirs target-boehm-gc"
+ fi
+ ;;
+esac
+
# Remove the entries in $skipdirs and $noconfigdirs from $configdirs,
# $build_configdirs and $target_configdirs.
# If we have the source for $noconfigdirs entries, add them to $notsupp.
@@ -2585,10 +4905,14 @@ done
# Sometimes the tools are distributed with libiberty but with no other
# libraries. In that case, we don't want to build target-libiberty.
+# Don't let libgcc imply libiberty either.
if test -n "${target_configdirs}" ; then
+ libgcc=
others=
for i in `echo ${target_configdirs} | sed -e s/target-//g` ; do
- if test "$i" != "libiberty" ; then
+ if test "$i" = "libgcc"; then
+ libgcc=target-libgcc
+ elif test "$i" != "libiberty" ; then
if test -r $srcdir/$i/configure ; then
others=yes;
break;
@@ -2596,7 +4920,7 @@ if test -n "${target_configdirs}" ; then
fi
done
if test -z "${others}" ; then
- target_configdirs=
+ target_configdirs=$libgcc
fi
fi
@@ -2606,7 +4930,7 @@ fi
build_configdirs_all="$build_configdirs"
build_configdirs=
for i in ${build_configdirs_all} ; do
- j=`echo $i | sed -e s/build-//g`
+ j=`echo $i | sed -e s/build-//g`
if test -f ${srcdir}/$j/configure ; then
build_configdirs="${build_configdirs} $i"
fi
@@ -2623,7 +4947,7 @@ done
target_configdirs_all="$target_configdirs"
target_configdirs=
for i in ${target_configdirs_all} ; do
- j=`echo $i | sed -e s/target-//g`
+ j=`echo $i | sed -e s/target-//g`
if test -f ${srcdir}/$j/configure ; then
target_configdirs="${target_configdirs} $i"
fi
@@ -2669,8 +4993,57 @@ case "$host" in
enable_gdbtk=no ;;
esac
+# To find our prefix, in gcc_cv_tool_prefix.
+
+# 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
+
+
+
+if test "x$exec_prefix" = xNONE; then
+ if test "x$prefix" = xNONE; then
+ gcc_cv_tool_prefix=$ac_default_prefix
+ else
+ gcc_cv_tool_prefix=$prefix
+ fi
+else
+ gcc_cv_tool_prefix=$exec_prefix
+fi
+
+# If there is no compiler in the tree, use the PATH only. In any
+# case, if there is no compiler in the tree nobody should use
+# AS_FOR_TARGET and LD_FOR_TARGET.
+if test x$host = x$build && test -f $srcdir/gcc/BASE-VER; then
+ gcc_version=`cat $srcdir/gcc/BASE-VER`
+ gcc_cv_tool_dirs="$gcc_cv_tool_prefix/libexec/gcc/$target_noncanonical/$gcc_version$PATH_SEPARATOR"
+ gcc_cv_tool_dirs="$gcc_cv_tool_dirs$gcc_cv_tool_prefix/libexec/gcc/$target_noncanonical$PATH_SEPARATOR"
+ gcc_cv_tool_dirs="$gcc_cv_tool_dirs/usr/lib/gcc/$target_noncanonical/$gcc_version$PATH_SEPARATOR"
+ gcc_cv_tool_dirs="$gcc_cv_tool_dirs/usr/lib/gcc/$target_noncanonical$PATH_SEPARATOR"
+ gcc_cv_tool_dirs="$gcc_cv_tool_dirs$gcc_cv_tool_prefix/$target_noncanonical/bin/$target_noncanonical/$gcc_version$PATH_SEPARATOR"
+ gcc_cv_tool_dirs="$gcc_cv_tool_dirs$gcc_cv_tool_prefix/$target_noncanonical/bin$PATH_SEPARATOR"
+else
+ gcc_cv_tool_dirs=
+fi
+
+if test x$build = x$target && test -n "$md_exec_prefix"; then
+ gcc_cv_tool_dirs="$gcc_cv_tool_dirs$md_exec_prefix$PATH_SEPARATOR"
+fi
+
+
+
copy_dirs=
+
# Check whether --with-build-sysroot or --without-build-sysroot was given.
if test "${with_build_sysroot+set}" = set; then
withval="$with_build_sysroot"
@@ -2679,8 +5052,7 @@ if test "${with_build_sysroot+set}" = set; then
fi
else
SYSROOT_CFLAGS_FOR_TARGET=
-fi
-
+fi;
# Handle --with-headers=XXX. If the value is not "yes", the contents of
@@ -2691,11 +5063,8 @@ if test x"${with_headers}" != x && test x"${with_headers}" != xno ; then
exit 1
fi
if test x"${with_headers}" != xyes ; then
- case "${exec_prefixoption}" in
- "") x=${prefix} ;;
- *) x=${exec_prefix} ;;
- esac
- copy_dirs="${copy_dirs} ${with_headers} $x/${target_alias}/sys-include"
+ x=${gcc_cv_tool_prefix}
+ copy_dirs="${copy_dirs} ${with_headers} $x/${target_noncanonical}/sys-include"
fi
fi
@@ -2710,12 +5079,9 @@ if test x"${with_libs}" != x && test x"${with_libs}" != xno ; then
if test x"${with_libs}" != xyes ; then
# Copy the libraries in reverse order, so that files in the first named
# library override files in subsequent libraries.
- case "${exec_prefixoption}" in
- "") x=${prefix} ;;
- *) x=${exec_prefix} ;;
- esac
+ x=${gcc_cv_tool_prefix}
for l in ${with_libs}; do
- copy_dirs="$l $x/${target_alias}/lib ${copy_dirs}"
+ copy_dirs="$l $x/${target_noncanonical}/lib ${copy_dirs}"
done
fi
fi
@@ -2725,11 +5091,11 @@ fi
# This is done by determining whether or not the appropriate directory
# is available, and by checking whether or not specific configurations
# have requested that this magic not happen.
-#
-# The command line options always override the explicit settings in
+#
+# The command line options always override the explicit settings in
# configure.in, and the settings in configure.in override this magic.
#
-# If the default for a toolchain is to use GNU as and ld, and you don't
+# If the default for a toolchain is to use GNU as and ld, and you don't
# want to do that, then you should use the --without-gnu-as and
# --without-gnu-ld options for the configure script.
@@ -2838,6 +5204,12 @@ extra_nmflags_for_target=
extra_ranlibflags_for_target=
target_makefile_frag=/dev/null
case "${target}" in
+ mep*-*-*)
+ target_makefile_frag="config/mt-mep"
+ ;;
+ spu-*-*)
+ target_makefile_frag="config/mt-spu"
+ ;;
*-*-netware*)
target_makefile_frag="config/mt-netware"
;;
@@ -2845,7 +5217,7 @@ case "${target}" in
target_makefile_frag="config/mt-gnu"
;;
*-*-aix4.[3456789]* | *-*-aix[56789].*)
- # nm and ar from AIX 4.3 and above require -X32_64 flag to all ar and nm
+ # nm and ar from AIX 4.3 and above require -X32_64 flag to all ar and nm
# commands to handle both 32-bit and 64-bit objects. These flags are
# harmless if we're using GNU nm or ar.
extra_arflags_for_target=" -X32_64"
@@ -2905,14 +5277,14 @@ fi
# hpux11 in 64bit mode has libraries in a weird place. Arrange to find
# them automatically.
case "${host}" in
- hppa*64*-*-hpux11*)
+ hppa*64*-*-hpux11*)
extra_host_args="$extra_host_args -x-libraries=/usr/lib/pa20_64 -x-includes=/usr/X11R6/include"
;;
esac
# Some systems (e.g., one of the i386-aix systems the gas testers are
# using) don't handle "\$" correctly, so don't use it here.
-tooldir='${exec_prefix}'/${target_alias}
+tooldir='${exec_prefix}'/${target_noncanonical}
build_tooldir=${tooldir}
# Create a .gdbinit file which runs the one in srcdir
@@ -2942,7 +5314,7 @@ if test $? = 0 ; then
if test -s conftest || test -s conftest.exe ; then
we_are_ok=yes
fi
-fi
+fi
case $we_are_ok in
no)
echo 1>&2 "*** The command '${CC} -o conftest ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} conftest.c' failed."
@@ -3036,11 +5408,10 @@ INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g`
# Check whether --enable-bootstrap or --disable-bootstrap was given.
if test "${enable_bootstrap+set}" = set; then
enableval="$enable_bootstrap"
- :
+
else
enable_bootstrap=default
-fi
-
+fi;
# Issue errors and warnings for invalid/strange bootstrap combinations.
case "$configdirs" in
@@ -3066,16 +5437,21 @@ case "$have_compiler:$host:$target:$enable_bootstrap" in
# Other configurations, but we have a compiler. Assume the user knows
# what he's doing.
yes:*:*:yes)
- echo "configure: warning: trying to bootstrap a cross compiler" 1>&2
+ { echo "$as_me:$LINENO: WARNING: trying to bootstrap a cross compiler" >&5
+echo "$as_me: WARNING: trying to bootstrap a cross compiler" >&2;}
;;
# No compiler: if they passed --enable-bootstrap explicitly, fail
no:*:*:yes)
- { echo "configure: error: cannot bootstrap without a compiler" 1>&2; exit 1; } ;;
+ { { echo "$as_me:$LINENO: error: cannot bootstrap without a compiler" >&5
+echo "$as_me: error: cannot bootstrap without a compiler" >&2;}
+ { (exit 1); exit 1; }; } ;;
# Fail if wrong command line
*)
- { echo "configure: error: invalid option for --enable-bootstrap" 1>&2; exit 1; }
+ { { echo "$as_me:$LINENO: error: invalid option for --enable-bootstrap" >&5
+echo "$as_me: error: invalid option for --enable-bootstrap" >&2;}
+ { (exit 1); exit 1; }; }
;;
esac
@@ -3101,7 +5477,7 @@ for module in ${build_configdirs} ; do
done
for module in ${configdirs} ; do
if test -z "${no_recursion}"; then
- for file in stage*-${module}/Makefile ${module}/Makefile; do
+ for file in stage*-${module}/Makefile prev-${module}/Makefile ${module}/Makefile; do
if test -f ${file}; then
echo 1>&2 "*** removing ${file} to force reconfigure"
rm -f ${file}
@@ -3135,9 +5511,8 @@ extrasub="$extrasub
# Check whether --enable-serial-configure or --disable-serial-configure was given.
if test "${enable_serial_configure+set}" = set; then
enableval="$enable_serial_configure"
- :
-fi
+fi;
case ${enable_serial_configure} in
yes)
@@ -3182,46 +5557,93 @@ serialization_dependencies=serdep.tmp
# Base args. Strip norecursion, cache-file, srcdir, host, build,
-# target and nonopt. These are the ones we might not want to pass
-# down to subconfigures. Also strip program-prefix, program-suffix,
-# and program-transform-name, so that we can pass down a consistent
-# program-transform-name. If autoconf has put single quotes around
-# any of these arguments (because they contain shell metacharacters)
-# then this will fail; in practice this only happens for
-# --program-transform-name, so be sure to override --program-transform-name
-# at the end of the argument list.
-# These will be expanded by make, so quote '$'.
-cat <<\EOF_SED > conftestsed
-s/ --no[^ ]*/ /g
-s/ --c[a-z-]*[= ][^ ]*//g
-s/ --sr[a-z-]*[= ][^ ]*//g
-s/ --ho[a-z-]*[= ][^ ]*//g
-s/ --bu[a-z-]*[= ][^ ]*//g
-s/ --t[a-z-]*[= ][^ ]*//g
-s/ --program-[pst][a-z-]*[= ][^ ]*//g
-s/ -cache-file[= ][^ ]*//g
-s/ -srcdir[= ][^ ]*//g
-s/ -host[= ][^ ]*//g
-s/ -build[= ][^ ]*//g
-s/ -target[= ][^ ]*//g
-s/ -program-prefix[= ][^ ]*//g
-s/ -program-suffix[= ][^ ]*//g
-s/ -program-transform-name[= ][^ ]*//g
-s/ [^' -][^ ]* / /
-s/^ *//;s/ *$//
-s,\$,$$,g
-EOF_SED
-sed -f conftestsed <<EOF_SED > conftestsed.out
- ${ac_configure_args}
-EOF_SED
-baseargs=`cat conftestsed.out`
-rm -f conftestsed conftestsed.out
+# target, nonopt, and variable assignments. These are the ones we
+# might not want to pass down to subconfigures. Also strip
+# program-prefix, program-suffix, and program-transform-name, so that
+# we can pass down a consistent program-transform-name.
+baseargs=
+keep_next=no
+skip_next=no
+eval "set -- $ac_configure_args"
+for ac_arg
+do
+ if test X"$skip_next" = X"yes"; then
+ skip_next=no
+ continue
+ fi
+ if test X"$keep_next" = X"yes"; then
+ case $ac_arg in
+ *\'*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ baseargs="$baseargs '$ac_arg'"
+ keep_next=no
+ continue
+ fi
+
+ # Handle separated arguments. Based on the logic generated by
+ # autoconf 2.59.
+ 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)
+ separate_arg=no
+ ;;
+ -*)
+ separate_arg=yes
+ ;;
+ *)
+ separate_arg=no
+ ;;
+ esac
+
+ case "$ac_arg" in
+ --no*)
+ continue
+ ;;
+ --c* | \
+ --sr* | \
+ --ho* | \
+ --bu* | \
+ --t* | \
+ --program-* | \
+ -cache_file* | \
+ -srcdir* | \
+ -host* | \
+ -build* | \
+ -target* | \
+ -program-prefix* | \
+ -program-suffix* | \
+ -program-transform-name* )
+ skip_next=$separate_arg
+ continue
+ ;;
+ -*)
+ # An option. Add it.
+ case $ac_arg in
+ *\'*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ baseargs="$baseargs '$ac_arg'"
+ keep_next=$separate_arg
+ ;;
+ *)
+ # Either a variable assignment, or a nonopt (triplet). Don't
+ # pass it down; let the Makefile handle this.
+ continue
+ ;;
+ esac
+done
+# Remove the initial space we just introduced and, as these will be
+# expanded by make, quote '$'.
+baseargs=`echo "x$baseargs" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
# Add in --program-transform-name, after --program-prefix and
# --program-suffix have been applied to it. Autoconf has already
# doubled dollar signs and backslashes in program_transform_name; we want
# the backslashes un-doubled, and then the entire thing wrapped in single
-# quotes, because this will be expanded first by make and then by the shell.
+# quotes, because this will be expanded first by make and then by the shell.
# Also, because we want to override the logic in subdir configure scripts to
# choose program_transform_name, replace any s,x,x, with s,y,y,.
sed -e "s,\\\\\\\\,\\\\,g; s,','\\\\'',g; s/s,x,x,/s,y,y,/" <<EOF_SED > conftestsed.out
@@ -3234,7 +5656,7 @@ baseargs="$baseargs --program-transform-name='${gcc_transform_name}'"
# For the build-side libraries, we just need to pretend we're native,
# and not use the same cache file. Multilibs are neither needed nor
# desired.
-build_configargs="--cache-file=../config.cache --build=${build_alias} --host=${build_alias} --target=${target_alias} ${baseargs}"
+build_configargs="--cache-file=../config.cache ${baseargs}"
# For host modules, accept cache file option, or specification as blank.
case "${cache_file}" in
@@ -3248,7 +5670,7 @@ esac
# Host dirs don't like to share a cache file either, horribly enough.
# This seems to be due to autoconf 2.5x stupidity.
-host_configargs="--cache-file=./config.cache --build=${build_alias} --host=${host_alias} --target=${target_alias} ${extra_host_args} ${baseargs}"
+host_configargs="--cache-file=./config.cache ${extra_host_args} ${baseargs}"
target_configargs=${baseargs}
@@ -3258,7 +5680,7 @@ target_configargs=${baseargs}
# sorts of decisions they want to make on this basis. Please consider
# this option to be deprecated. FIXME.
if test x${is_cross_compiler} = xyes ; then
- target_configargs="--with-cross-host=${host_alias} ${target_configargs}"
+ target_configargs="--with-cross-host=${host_noncanonical} ${target_configargs}"
fi
# Default to --enable-multilib.
@@ -3284,7 +5706,7 @@ fi
# Pass the appropriate --build, --host, --target and --cache-file arguments.
# We need to pass --target, as newer autoconf's requires consistency
# for target_alias and gcc doesn't manage it consistently.
-target_configargs="--cache-file=./config.cache --build=${build_alias} --host=${target_alias} --target=${target_alias} ${target_configargs}"
+target_configargs="--cache-file=./config.cache ${target_configargs}"
FLAGS_FOR_TARGET=
case " $target_configdirs " in
@@ -3336,6 +5758,11 @@ case " $target_configdirs " in
esac
;;
esac
+case "$target" in
+*-mingw*)
+ # Can't be handled as Cygwin above since Mingw does not use newlib.
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/winsup/mingw -L$$r/$(TARGET_SUBDIR)/winsup/w32api/lib -isystem $$s/winsup/mingw/include -isystem $$s/winsup/w32api/include' ;;
+esac
# Allow the user to override the flags for
# our build compiler if desired.
@@ -3356,6 +5783,23 @@ if test "x${use_gnu_ld}" = x &&
FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(HOST_SUBDIR)/ld'
fi
+# Search for other target-specific linker scripts and such.
+case "${target}" in
+ m32c-*-* )
+ if test -d ${srcdir}/libgloss/m32c; then
+ # This is for crt0.o
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$$r/$(TARGET_SUBDIR)/libgloss/m32c'
+ # This is for r8c.ld
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/libgloss/m32c'
+ # This is for libnosys.a
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/libgloss/libnosys'
+ fi
+ ;;
+ mep*)
+ FLAGS_FOR_TARGET="$FLAGS_FOR_TARGET -mlibrary"
+ ;;
+esac
+
# Makefile fragments.
for frag in host_makefile_frag target_makefile_frag alphaieee_frag ospace_frag;
do
@@ -3400,36 +5844,42 @@ MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
for ac_prog in 'bison -y' byacc yacc
do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3407: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_YACC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$YACC"; then
ac_cv_prog_YACC="$YACC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_YACC="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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"
+YACC=$ac_cv_prog_YACC
if test -n "$YACC"; then
- echo "$ac_t""$YACC" 1>&6
+ echo "$as_me:$LINENO: result: $YACC" >&5
+echo "${ECHO_T}$YACC" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-test -n "$YACC" && break
+ test -n "$YACC" && break
done
test -n "$YACC" || YACC="$MISSING bison -y"
@@ -3440,36 +5890,42 @@ esac
for ac_prog in bison
do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3447: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_BISON+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$BISON"; then
ac_cv_prog_BISON="$BISON" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_BISON="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_BISON="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-BISON="$ac_cv_prog_BISON"
+BISON=$ac_cv_prog_BISON
if test -n "$BISON"; then
- echo "$ac_t""$BISON" 1>&6
+ echo "$as_me:$LINENO: result: $BISON" >&5
+echo "${ECHO_T}$BISON" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-test -n "$BISON" && break
+ test -n "$BISON" && break
done
test -n "$BISON" || BISON="$MISSING bison"
@@ -3479,36 +5935,42 @@ esac
for ac_prog in gm4 gnum4 m4
do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3486: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_M4'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_M4+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$M4"; then
ac_cv_prog_M4="$M4" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_M4="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_M4="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-M4="$ac_cv_prog_M4"
+M4=$ac_cv_prog_M4
if test -n "$M4"; then
- echo "$ac_t""$M4" 1>&6
+ echo "$as_me:$LINENO: result: $M4" >&5
+echo "${ECHO_T}$M4" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-test -n "$M4" && break
+ test -n "$M4" && break
done
test -n "$M4" || M4="$MISSING m4"
@@ -3518,36 +5980,42 @@ esac
for ac_prog in flex lex
do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3525: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LEX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$LEX"; then
ac_cv_prog_LEX="$LEX" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_LEX="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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"
+LEX=$ac_cv_prog_LEX
if test -n "$LEX"; then
- echo "$ac_t""$LEX" 1>&6
+ echo "$as_me:$LINENO: result: $LEX" >&5
+echo "${ECHO_T}$LEX" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-test -n "$LEX" && break
+ test -n "$LEX" && break
done
test -n "$LEX" || LEX="$MISSING flex"
@@ -3558,36 +6026,42 @@ esac
for ac_prog in flex
do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3565: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_FLEX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$FLEX"; then
ac_cv_prog_FLEX="$FLEX" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_FLEX="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_FLEX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-FLEX="$ac_cv_prog_FLEX"
+FLEX=$ac_cv_prog_FLEX
if test -n "$FLEX"; then
- echo "$ac_t""$FLEX" 1>&6
+ echo "$as_me:$LINENO: result: $FLEX" >&5
+echo "${ECHO_T}$FLEX" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-test -n "$FLEX" && break
+ test -n "$FLEX" && break
done
test -n "$FLEX" || FLEX="$MISSING flex"
@@ -3597,36 +6071,42 @@ esac
for ac_prog in makeinfo
do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3604: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_MAKEINFO+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$MAKEINFO"; then
ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_MAKEINFO="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_MAKEINFO="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-MAKEINFO="$ac_cv_prog_MAKEINFO"
+MAKEINFO=$ac_cv_prog_MAKEINFO
if test -n "$MAKEINFO"; then
- echo "$ac_t""$MAKEINFO" 1>&6
+ echo "$as_me:$LINENO: result: $MAKEINFO" >&5
+echo "${ECHO_T}$MAKEINFO" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-test -n "$MAKEINFO" && break
+ test -n "$MAKEINFO" && break
done
test -n "$MAKEINFO" || MAKEINFO="$MISSING makeinfo"
@@ -3650,36 +6130,42 @@ esac
for ac_prog in expect
do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3657: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_EXPECT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_EXPECT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$EXPECT"; then
ac_cv_prog_EXPECT="$EXPECT" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_EXPECT="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_EXPECT="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-EXPECT="$ac_cv_prog_EXPECT"
+EXPECT=$ac_cv_prog_EXPECT
if test -n "$EXPECT"; then
- echo "$ac_t""$EXPECT" 1>&6
+ echo "$as_me:$LINENO: result: $EXPECT" >&5
+echo "${ECHO_T}$EXPECT" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-test -n "$EXPECT" && break
+ test -n "$EXPECT" && break
done
test -n "$EXPECT" || EXPECT="expect"
@@ -3691,42 +6177,48 @@ esac
for ac_prog in runtest
do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3698: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RUNTEST'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RUNTEST+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$RUNTEST"; then
ac_cv_prog_RUNTEST="$RUNTEST" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RUNTEST="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_RUNTEST="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-RUNTEST="$ac_cv_prog_RUNTEST"
+RUNTEST=$ac_cv_prog_RUNTEST
if test -n "$RUNTEST"; then
- echo "$ac_t""$RUNTEST" 1>&6
+ echo "$as_me:$LINENO: result: $RUNTEST" >&5
+echo "${ECHO_T}$RUNTEST" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-test -n "$RUNTEST" && break
+ test -n "$RUNTEST" && break
done
test -n "$RUNTEST" || RUNTEST="runtest"
case " $configdirs " in
*" dejagnu "*)
- test $host = $build && RUNTEST='$$r/$(HOST_SUBDIR)/dejagnu/runtest'
+ test $host = $build && RUNTEST='$$s/$(HOST_SUBDIR)/dejagnu/runtest'
;;
esac
@@ -3737,68 +6229,128 @@ test -n "$host_alias" && ncn_tool_prefix=$host_alias-
ncn_target_tool_prefix=
test -n "$target_alias" && ncn_target_tool_prefix=$target_alias-
- for ncn_progname in ar; do
+
+
+if test -n "$AR"; then
+ ac_cv_prog_AR=$AR
+elif test -n "$ac_cv_prog_AR"; then
+ AR=$ac_cv_prog_AR
+fi
+
+if test -n "$ac_cv_prog_AR"; then
+ for ncn_progname in ar; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_AR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+for ncn_progname in ar; do
if test -n "$ncn_tool_prefix"; then
# Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3746: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_AR="${ncn_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_AR="${ncn_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-AR="$ac_cv_prog_AR"
+AR=$ac_cv_prog_AR
if test -n "$AR"; then
- echo "$ac_t""$AR" 1>&6
+ echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_AR" && test $build = $host ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3777: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_AR="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_AR="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-AR="$ac_cv_prog_AR"
+AR=$ac_cv_prog_AR
if test -n "$AR"; then
- echo "$ac_t""$AR" 1>&6
+ echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_AR" && break
done
@@ -3812,68 +6364,128 @@ if test -z "$ac_cv_prog_AR" ; then
fi
fi
- for ncn_progname in as; do
+
+
+if test -n "$AS"; then
+ ac_cv_prog_AS=$AS
+elif test -n "$ac_cv_prog_AS"; then
+ AS=$ac_cv_prog_AS
+fi
+
+if test -n "$ac_cv_prog_AS"; then
+ for ncn_progname in as; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_AS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AS"; then
+ ac_cv_prog_AS="$AS" # 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_AS="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+AS=$ac_cv_prog_AS
+if test -n "$AS"; then
+ echo "$as_me:$LINENO: result: $AS" >&5
+echo "${ECHO_T}$AS" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+for ncn_progname in as; do
if test -n "$ncn_tool_prefix"; then
# Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3821: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$AS"; then
ac_cv_prog_AS="$AS" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_AS="${ncn_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_AS="${ncn_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-AS="$ac_cv_prog_AS"
+AS=$ac_cv_prog_AS
if test -n "$AS"; then
- echo "$ac_t""$AS" 1>&6
+ echo "$as_me:$LINENO: result: $AS" >&5
+echo "${ECHO_T}$AS" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_AS" && test $build = $host ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3852: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$AS"; then
ac_cv_prog_AS="$AS" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_AS="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_AS="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-AS="$ac_cv_prog_AS"
+AS=$ac_cv_prog_AS
if test -n "$AS"; then
- echo "$ac_t""$AS" 1>&6
+ echo "$as_me:$LINENO: result: $AS" >&5
+echo "${ECHO_T}$AS" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_AS" && break
done
@@ -3887,68 +6499,128 @@ if test -z "$ac_cv_prog_AS" ; then
fi
fi
- for ncn_progname in dlltool; do
+
+
+if test -n "$DLLTOOL"; then
+ ac_cv_prog_DLLTOOL=$DLLTOOL
+elif test -n "$ac_cv_prog_DLLTOOL"; then
+ DLLTOOL=$ac_cv_prog_DLLTOOL
+fi
+
+if test -n "$ac_cv_prog_DLLTOOL"; then
+ for ncn_progname in dlltool; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_DLLTOOL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$DLLTOOL"; then
+ ac_cv_prog_DLLTOOL="$DLLTOOL" # 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_DLLTOOL="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+ echo "$as_me:$LINENO: result: $DLLTOOL" >&5
+echo "${ECHO_T}$DLLTOOL" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+for ncn_progname in dlltool; do
if test -n "$ncn_tool_prefix"; then
# Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3896: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_DLLTOOL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$DLLTOOL"; then
ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_DLLTOOL="${ncn_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_DLLTOOL="${ncn_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-DLLTOOL="$ac_cv_prog_DLLTOOL"
+DLLTOOL=$ac_cv_prog_DLLTOOL
if test -n "$DLLTOOL"; then
- echo "$ac_t""$DLLTOOL" 1>&6
+ echo "$as_me:$LINENO: result: $DLLTOOL" >&5
+echo "${ECHO_T}$DLLTOOL" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_DLLTOOL" && test $build = $host ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3927: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_DLLTOOL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$DLLTOOL"; then
ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_DLLTOOL="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_DLLTOOL="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-DLLTOOL="$ac_cv_prog_DLLTOOL"
+DLLTOOL=$ac_cv_prog_DLLTOOL
if test -n "$DLLTOOL"; then
- echo "$ac_t""$DLLTOOL" 1>&6
+ echo "$as_me:$LINENO: result: $DLLTOOL" >&5
+echo "${ECHO_T}$DLLTOOL" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_DLLTOOL" && break
done
@@ -3962,68 +6634,128 @@ if test -z "$ac_cv_prog_DLLTOOL" ; then
fi
fi
- for ncn_progname in ld; do
+
+
+if test -n "$LD"; then
+ ac_cv_prog_LD=$LD
+elif test -n "$ac_cv_prog_LD"; then
+ LD=$ac_cv_prog_LD
+fi
+
+if test -n "$ac_cv_prog_LD"; then
+ for ncn_progname in ld; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_LD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$LD"; then
+ ac_cv_prog_LD="$LD" # 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_LD="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+LD=$ac_cv_prog_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
+
+ done
+fi
+
+for ncn_progname in ld; do
if test -n "$ncn_tool_prefix"; then
# Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3971: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$LD"; then
ac_cv_prog_LD="$LD" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_LD="${ncn_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_LD="${ncn_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-LD="$ac_cv_prog_LD"
+LD=$ac_cv_prog_LD
if test -n "$LD"; then
- echo "$ac_t""$LD" 1>&6
+ echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_LD" && test $build = $host ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4002: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$LD"; then
ac_cv_prog_LD="$LD" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_LD="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_LD="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-LD="$ac_cv_prog_LD"
+LD=$ac_cv_prog_LD
if test -n "$LD"; then
- echo "$ac_t""$LD" 1>&6
+ echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_LD" && break
done
@@ -4037,68 +6769,128 @@ if test -z "$ac_cv_prog_LD" ; then
fi
fi
- for ncn_progname in lipo; do
+
+
+if test -n "$LIPO"; then
+ ac_cv_prog_LIPO=$LIPO
+elif test -n "$ac_cv_prog_LIPO"; then
+ LIPO=$ac_cv_prog_LIPO
+fi
+
+if test -n "$ac_cv_prog_LIPO"; then
+ for ncn_progname in lipo; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_LIPO+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$LIPO"; then
+ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LIPO="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+ echo "$as_me:$LINENO: result: $LIPO" >&5
+echo "${ECHO_T}$LIPO" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+for ncn_progname in lipo; do
if test -n "$ncn_tool_prefix"; then
# Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4046: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LIPO'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LIPO+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$LIPO"; then
ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_LIPO="${ncn_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_LIPO="${ncn_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-LIPO="$ac_cv_prog_LIPO"
+LIPO=$ac_cv_prog_LIPO
if test -n "$LIPO"; then
- echo "$ac_t""$LIPO" 1>&6
+ echo "$as_me:$LINENO: result: $LIPO" >&5
+echo "${ECHO_T}$LIPO" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_LIPO" && test $build = $host ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4077: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LIPO'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LIPO+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$LIPO"; then
ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_LIPO="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_LIPO="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-LIPO="$ac_cv_prog_LIPO"
+LIPO=$ac_cv_prog_LIPO
if test -n "$LIPO"; then
- echo "$ac_t""$LIPO" 1>&6
+ echo "$as_me:$LINENO: result: $LIPO" >&5
+echo "${ECHO_T}$LIPO" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_LIPO" && break
done
@@ -4112,68 +6904,128 @@ if test -z "$ac_cv_prog_LIPO" ; then
fi
fi
- for ncn_progname in nm; do
+
+
+if test -n "$NM"; then
+ ac_cv_prog_NM=$NM
+elif test -n "$ac_cv_prog_NM"; then
+ NM=$ac_cv_prog_NM
+fi
+
+if test -n "$ac_cv_prog_NM"; then
+ for ncn_progname in nm; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_NM+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$NM"; then
+ ac_cv_prog_NM="$NM" # 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_NM="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+NM=$ac_cv_prog_NM
+if test -n "$NM"; then
+ echo "$as_me:$LINENO: result: $NM" >&5
+echo "${ECHO_T}$NM" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+for ncn_progname in nm; do
if test -n "$ncn_tool_prefix"; then
# Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4121: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_NM+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$NM"; then
ac_cv_prog_NM="$NM" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_NM="${ncn_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_NM="${ncn_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-NM="$ac_cv_prog_NM"
+NM=$ac_cv_prog_NM
if test -n "$NM"; then
- echo "$ac_t""$NM" 1>&6
+ echo "$as_me:$LINENO: result: $NM" >&5
+echo "${ECHO_T}$NM" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_NM" && test $build = $host ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4152: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_NM+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$NM"; then
ac_cv_prog_NM="$NM" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_NM="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_NM="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-NM="$ac_cv_prog_NM"
+NM=$ac_cv_prog_NM
if test -n "$NM"; then
- echo "$ac_t""$NM" 1>&6
+ echo "$as_me:$LINENO: result: $NM" >&5
+echo "${ECHO_T}$NM" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_NM" && break
done
@@ -4187,68 +7039,128 @@ if test -z "$ac_cv_prog_NM" ; then
fi
fi
- for ncn_progname in ranlib; do
+
+
+if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB=$RANLIB
+elif test -n "$ac_cv_prog_RANLIB"; then
+ RANLIB=$ac_cv_prog_RANLIB
+fi
+
+if test -n "$ac_cv_prog_RANLIB"; then
+ for ncn_progname in ranlib; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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="${ncn_progname}"
+ 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
+
+ done
+fi
+
+for ncn_progname in ranlib; do
if test -n "$ncn_tool_prefix"; then
# Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4196: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RANLIB="${ncn_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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="${ncn_tool_prefix}${ncn_progname}"
+ 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"
+RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- echo "$ac_t""$RANLIB" 1>&6
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_RANLIB" && test $build = $host ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4227: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RANLIB="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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="${ncn_progname}"
+ 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"
+RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- echo "$ac_t""$RANLIB" 1>&6
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_RANLIB" && break
done
@@ -4257,68 +7169,128 @@ if test -z "$ac_cv_prog_RANLIB" ; then
RANLIB=":"
fi
- for ncn_progname in strip; do
+
+
+if test -n "$STRIP"; then
+ ac_cv_prog_STRIP=$STRIP
+elif test -n "$ac_cv_prog_STRIP"; then
+ STRIP=$ac_cv_prog_STRIP
+fi
+
+if test -n "$ac_cv_prog_STRIP"; then
+ for ncn_progname in strip; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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="${ncn_progname}"
+ 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
+
+ done
+fi
+
+for ncn_progname in strip; do
if test -n "$ncn_tool_prefix"; then
# Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4266: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$STRIP"; then
ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_STRIP="${ncn_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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="${ncn_tool_prefix}${ncn_progname}"
+ 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"
+STRIP=$ac_cv_prog_STRIP
if test -n "$STRIP"; then
- echo "$ac_t""$STRIP" 1>&6
+ echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_STRIP" && test $build = $host ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4297: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$STRIP"; then
ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_STRIP="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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="${ncn_progname}"
+ 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"
+STRIP=$ac_cv_prog_STRIP
if test -n "$STRIP"; then
- echo "$ac_t""$STRIP" 1>&6
+ echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_STRIP" && break
done
@@ -4327,68 +7299,128 @@ if test -z "$ac_cv_prog_STRIP" ; then
STRIP=":"
fi
- for ncn_progname in windres; do
+
+
+if test -n "$WINDRES"; then
+ ac_cv_prog_WINDRES=$WINDRES
+elif test -n "$ac_cv_prog_WINDRES"; then
+ WINDRES=$ac_cv_prog_WINDRES
+fi
+
+if test -n "$ac_cv_prog_WINDRES"; then
+ for ncn_progname in windres; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_WINDRES+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$WINDRES"; then
+ ac_cv_prog_WINDRES="$WINDRES" # 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_WINDRES="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+WINDRES=$ac_cv_prog_WINDRES
+if test -n "$WINDRES"; then
+ echo "$as_me:$LINENO: result: $WINDRES" >&5
+echo "${ECHO_T}$WINDRES" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+for ncn_progname in windres; do
if test -n "$ncn_tool_prefix"; then
# Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4336: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_WINDRES+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$WINDRES"; then
ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_WINDRES="${ncn_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_WINDRES="${ncn_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-WINDRES="$ac_cv_prog_WINDRES"
+WINDRES=$ac_cv_prog_WINDRES
if test -n "$WINDRES"; then
- echo "$ac_t""$WINDRES" 1>&6
+ echo "$as_me:$LINENO: result: $WINDRES" >&5
+echo "${ECHO_T}$WINDRES" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_WINDRES" && test $build = $host ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4367: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_WINDRES+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$WINDRES"; then
ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_WINDRES="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_WINDRES="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-WINDRES="$ac_cv_prog_WINDRES"
+WINDRES=$ac_cv_prog_WINDRES
if test -n "$WINDRES"; then
- echo "$ac_t""$WINDRES" 1>&6
+ echo "$as_me:$LINENO: result: $WINDRES" >&5
+echo "${ECHO_T}$WINDRES" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_WINDRES" && break
done
@@ -4402,68 +7434,128 @@ if test -z "$ac_cv_prog_WINDRES" ; then
fi
fi
- for ncn_progname in objcopy; do
+
+
+if test -n "$OBJCOPY"; then
+ ac_cv_prog_OBJCOPY=$OBJCOPY
+elif test -n "$ac_cv_prog_OBJCOPY"; then
+ OBJCOPY=$ac_cv_prog_OBJCOPY
+fi
+
+if test -n "$ac_cv_prog_OBJCOPY"; then
+ for ncn_progname in objcopy; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_OBJCOPY+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$OBJCOPY"; then
+ ac_cv_prog_OBJCOPY="$OBJCOPY" # 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_OBJCOPY="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+OBJCOPY=$ac_cv_prog_OBJCOPY
+if test -n "$OBJCOPY"; then
+ echo "$as_me:$LINENO: result: $OBJCOPY" >&5
+echo "${ECHO_T}$OBJCOPY" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+for ncn_progname in objcopy; do
if test -n "$ncn_tool_prefix"; then
# Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4411: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_OBJCOPY+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$OBJCOPY"; then
ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_OBJCOPY="${ncn_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_OBJCOPY="${ncn_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-OBJCOPY="$ac_cv_prog_OBJCOPY"
+OBJCOPY=$ac_cv_prog_OBJCOPY
if test -n "$OBJCOPY"; then
- echo "$ac_t""$OBJCOPY" 1>&6
+ echo "$as_me:$LINENO: result: $OBJCOPY" >&5
+echo "${ECHO_T}$OBJCOPY" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_OBJCOPY" && test $build = $host ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4442: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_OBJCOPY+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$OBJCOPY"; then
ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_OBJCOPY="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_OBJCOPY="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-OBJCOPY="$ac_cv_prog_OBJCOPY"
+OBJCOPY=$ac_cv_prog_OBJCOPY
if test -n "$OBJCOPY"; then
- echo "$ac_t""$OBJCOPY" 1>&6
+ echo "$as_me:$LINENO: result: $OBJCOPY" >&5
+echo "${ECHO_T}$OBJCOPY" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_OBJCOPY" && break
done
@@ -4477,68 +7569,128 @@ if test -z "$ac_cv_prog_OBJCOPY" ; then
fi
fi
- for ncn_progname in objdump; do
+
+
+if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP=$OBJDUMP
+elif test -n "$ac_cv_prog_OBJDUMP"; then
+ OBJDUMP=$ac_cv_prog_OBJDUMP
+fi
+
+if test -n "$ac_cv_prog_OBJDUMP"; then
+ for ncn_progname in objdump; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_OBJDUMP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OBJDUMP="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ echo "$as_me:$LINENO: result: $OBJDUMP" >&5
+echo "${ECHO_T}$OBJDUMP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+for ncn_progname in objdump; do
if test -n "$ncn_tool_prefix"; then
# Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4486: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$OBJDUMP"; then
ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_OBJDUMP="${ncn_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_OBJDUMP="${ncn_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-OBJDUMP="$ac_cv_prog_OBJDUMP"
+OBJDUMP=$ac_cv_prog_OBJDUMP
if test -n "$OBJDUMP"; then
- echo "$ac_t""$OBJDUMP" 1>&6
+ echo "$as_me:$LINENO: result: $OBJDUMP" >&5
+echo "${ECHO_T}$OBJDUMP" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_OBJDUMP" && test $build = $host ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4517: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$OBJDUMP"; then
ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_OBJDUMP="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_OBJDUMP="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-OBJDUMP="$ac_cv_prog_OBJDUMP"
+OBJDUMP=$ac_cv_prog_OBJDUMP
if test -n "$OBJDUMP"; then
- echo "$ac_t""$OBJDUMP" 1>&6
+ echo "$as_me:$LINENO: result: $OBJDUMP" >&5
+echo "${ECHO_T}$OBJDUMP" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_OBJDUMP" && break
done
@@ -4559,6 +7711,7 @@ fi
# Target tools.
+
# Check whether --with-build-time-tools or --without-build-time-tools was given.
if test "${with_build_time_tools+set}" = set; then
withval="$with_build_time_tools"
@@ -4566,24 +7719,74 @@ if test "${with_build_time_tools+set}" = set; then
x/*) ;;
*)
with_build_time_tools=
- echo "configure: warning: argument to --with-build-time-tools must be an absolute path" 1>&2
+ { echo "$as_me:$LINENO: WARNING: argument to --with-build-time-tools must be an absolute path" >&5
+echo "$as_me: WARNING: argument to --with-build-time-tools must be an absolute path" >&2;}
;;
esac
else
with_build_time_tools=
+fi;
+
+
+
+if test -n "$CC_FOR_TARGET"; then
+ ac_cv_prog_CC_FOR_TARGET=$CC_FOR_TARGET
+elif test -n "$ac_cv_prog_CC_FOR_TARGET"; then
+ CC_FOR_TARGET=$ac_cv_prog_CC_FOR_TARGET
fi
+if test -n "$ac_cv_prog_CC_FOR_TARGET"; then
+ for ncn_progname in cc gcc; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC_FOR_TARGET"; then
+ ac_cv_prog_CC_FOR_TARGET="$CC_FOR_TARGET" # 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_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC_FOR_TARGET=$ac_cv_prog_CC_FOR_TARGET
+if test -n "$CC_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $CC_FOR_TARGET" >&5
+echo "${ECHO_T}$CC_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
- if test -n "$with_build_time_tools"; then
+ done
+fi
+
+if test -z "$ac_cv_prog_CC_FOR_TARGET" && test -n "$with_build_time_tools"; then
for ncn_progname in cc gcc; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:4581: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_CC_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -4593,69 +7796,81 @@ if test -z "$ac_cv_prog_CC_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4598: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC_FOR_TARGET"; then
ac_cv_prog_CC_FOR_TARGET="$CC_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-CC_FOR_TARGET="$ac_cv_prog_CC_FOR_TARGET"
+CC_FOR_TARGET=$ac_cv_prog_CC_FOR_TARGET
if test -n "$CC_FOR_TARGET"; then
- echo "$ac_t""$CC_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $CC_FOR_TARGET" >&5
+echo "${ECHO_T}$CC_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_CC_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4629: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC_FOR_TARGET"; then
ac_cv_prog_CC_FOR_TARGET="$CC_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-CC_FOR_TARGET="$ac_cv_prog_CC_FOR_TARGET"
+CC_FOR_TARGET=$ac_cv_prog_CC_FOR_TARGET
if test -n "$CC_FOR_TARGET"; then
- echo "$ac_t""$CC_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $CC_FOR_TARGET" >&5
+echo "${ECHO_T}$CC_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_CC_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_CC_FOR_TARGET" ; then
set dummy cc gcc
if test $build = $target ; then
@@ -4663,18 +7878,70 @@ if test -z "$ac_cv_prog_CC_FOR_TARGET" ; then
else
CC_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
+else
+ CC_FOR_TARGET="$ac_cv_prog_CC_FOR_TARGET"
+fi
+
+
+
+if test -n "$CXX_FOR_TARGET"; then
+ ac_cv_prog_CXX_FOR_TARGET=$CXX_FOR_TARGET
+elif test -n "$ac_cv_prog_CXX_FOR_TARGET"; then
+ CXX_FOR_TARGET=$ac_cv_prog_CXX_FOR_TARGET
fi
- if test -n "$with_build_time_tools"; then
+if test -n "$ac_cv_prog_CXX_FOR_TARGET"; then
for ncn_progname in c++ g++ cxx gxx; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:4672: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_CXX_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CXX_FOR_TARGET"; then
+ ac_cv_prog_CXX_FOR_TARGET="$CXX_FOR_TARGET" # 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_CXX_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CXX_FOR_TARGET=$ac_cv_prog_CXX_FOR_TARGET
+if test -n "$CXX_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $CXX_FOR_TARGET" >&5
+echo "${ECHO_T}$CXX_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+if test -z "$ac_cv_prog_CXX_FOR_TARGET" && test -n "$with_build_time_tools"; then
+ for ncn_progname in c++ g++ cxx gxx; do
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_CXX_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -4684,69 +7951,81 @@ if test -z "$ac_cv_prog_CXX_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4689: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CXX_FOR_TARGET"; then
ac_cv_prog_CXX_FOR_TARGET="$CXX_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CXX_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_CXX_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-CXX_FOR_TARGET="$ac_cv_prog_CXX_FOR_TARGET"
+CXX_FOR_TARGET=$ac_cv_prog_CXX_FOR_TARGET
if test -n "$CXX_FOR_TARGET"; then
- echo "$ac_t""$CXX_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $CXX_FOR_TARGET" >&5
+echo "${ECHO_T}$CXX_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_CXX_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4720: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CXX_FOR_TARGET"; then
ac_cv_prog_CXX_FOR_TARGET="$CXX_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CXX_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_CXX_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-CXX_FOR_TARGET="$ac_cv_prog_CXX_FOR_TARGET"
+CXX_FOR_TARGET=$ac_cv_prog_CXX_FOR_TARGET
if test -n "$CXX_FOR_TARGET"; then
- echo "$ac_t""$CXX_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $CXX_FOR_TARGET" >&5
+echo "${ECHO_T}$CXX_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_CXX_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_CXX_FOR_TARGET" ; then
set dummy c++ g++ cxx gxx
if test $build = $target ; then
@@ -4754,18 +8033,70 @@ if test -z "$ac_cv_prog_CXX_FOR_TARGET" ; then
else
CXX_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
+else
+ CXX_FOR_TARGET="$ac_cv_prog_CXX_FOR_TARGET"
+fi
+
+
+
+if test -n "$GCC_FOR_TARGET"; then
+ ac_cv_prog_GCC_FOR_TARGET=$GCC_FOR_TARGET
+elif test -n "$ac_cv_prog_GCC_FOR_TARGET"; then
+ GCC_FOR_TARGET=$ac_cv_prog_GCC_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_GCC_FOR_TARGET"; then
+ for ncn_progname in gcc; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_GCC_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$GCC_FOR_TARGET"; then
+ ac_cv_prog_GCC_FOR_TARGET="$GCC_FOR_TARGET" # 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_GCC_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+GCC_FOR_TARGET=$ac_cv_prog_GCC_FOR_TARGET
+if test -n "$GCC_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $GCC_FOR_TARGET" >&5
+echo "${ECHO_T}$GCC_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
fi
- if test -n "$with_build_time_tools"; then
+if test -z "$ac_cv_prog_GCC_FOR_TARGET" && test -n "$with_build_time_tools"; then
for ncn_progname in gcc; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:4763: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_GCC_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -4775,83 +8106,147 @@ if test -z "$ac_cv_prog_GCC_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4780: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_GCC_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$GCC_FOR_TARGET"; then
ac_cv_prog_GCC_FOR_TARGET="$GCC_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_GCC_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_GCC_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-GCC_FOR_TARGET="$ac_cv_prog_GCC_FOR_TARGET"
+GCC_FOR_TARGET=$ac_cv_prog_GCC_FOR_TARGET
if test -n "$GCC_FOR_TARGET"; then
- echo "$ac_t""$GCC_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $GCC_FOR_TARGET" >&5
+echo "${ECHO_T}$GCC_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_GCC_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4811: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_GCC_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$GCC_FOR_TARGET"; then
ac_cv_prog_GCC_FOR_TARGET="$GCC_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_GCC_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_GCC_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-GCC_FOR_TARGET="$ac_cv_prog_GCC_FOR_TARGET"
+GCC_FOR_TARGET=$ac_cv_prog_GCC_FOR_TARGET
if test -n "$GCC_FOR_TARGET"; then
- echo "$ac_t""$GCC_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $GCC_FOR_TARGET" >&5
+echo "${ECHO_T}$GCC_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_GCC_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_GCC_FOR_TARGET" ; then
GCC_FOR_TARGET="${CC_FOR_TARGET}"
+else
+ GCC_FOR_TARGET="$ac_cv_prog_GCC_FOR_TARGET"
+fi
+
+
+
+if test -n "$GCJ_FOR_TARGET"; then
+ ac_cv_prog_GCJ_FOR_TARGET=$GCJ_FOR_TARGET
+elif test -n "$ac_cv_prog_GCJ_FOR_TARGET"; then
+ GCJ_FOR_TARGET=$ac_cv_prog_GCJ_FOR_TARGET
fi
- if test -n "$with_build_time_tools"; then
+if test -n "$ac_cv_prog_GCJ_FOR_TARGET"; then
for ncn_progname in gcj; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:4849: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_GCJ_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$GCJ_FOR_TARGET"; then
+ ac_cv_prog_GCJ_FOR_TARGET="$GCJ_FOR_TARGET" # 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_GCJ_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+GCJ_FOR_TARGET=$ac_cv_prog_GCJ_FOR_TARGET
+if test -n "$GCJ_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $GCJ_FOR_TARGET" >&5
+echo "${ECHO_T}$GCJ_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+if test -z "$ac_cv_prog_GCJ_FOR_TARGET" && test -n "$with_build_time_tools"; then
+ for ncn_progname in gcj; do
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_GCJ_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -4861,69 +8256,81 @@ if test -z "$ac_cv_prog_GCJ_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4866: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_GCJ_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$GCJ_FOR_TARGET"; then
ac_cv_prog_GCJ_FOR_TARGET="$GCJ_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_GCJ_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_GCJ_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-GCJ_FOR_TARGET="$ac_cv_prog_GCJ_FOR_TARGET"
+GCJ_FOR_TARGET=$ac_cv_prog_GCJ_FOR_TARGET
if test -n "$GCJ_FOR_TARGET"; then
- echo "$ac_t""$GCJ_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $GCJ_FOR_TARGET" >&5
+echo "${ECHO_T}$GCJ_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_GCJ_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4897: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_GCJ_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$GCJ_FOR_TARGET"; then
ac_cv_prog_GCJ_FOR_TARGET="$GCJ_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_GCJ_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_GCJ_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-GCJ_FOR_TARGET="$ac_cv_prog_GCJ_FOR_TARGET"
+GCJ_FOR_TARGET=$ac_cv_prog_GCJ_FOR_TARGET
if test -n "$GCJ_FOR_TARGET"; then
- echo "$ac_t""$GCJ_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $GCJ_FOR_TARGET" >&5
+echo "${ECHO_T}$GCJ_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_GCJ_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_GCJ_FOR_TARGET" ; then
set dummy gcj
if test $build = $target ; then
@@ -4931,18 +8338,70 @@ if test -z "$ac_cv_prog_GCJ_FOR_TARGET" ; then
else
GCJ_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
+else
+ GCJ_FOR_TARGET="$ac_cv_prog_GCJ_FOR_TARGET"
+fi
+
+
+
+if test -n "$GFORTRAN_FOR_TARGET"; then
+ ac_cv_prog_GFORTRAN_FOR_TARGET=$GFORTRAN_FOR_TARGET
+elif test -n "$ac_cv_prog_GFORTRAN_FOR_TARGET"; then
+ GFORTRAN_FOR_TARGET=$ac_cv_prog_GFORTRAN_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_GFORTRAN_FOR_TARGET"; then
+ for ncn_progname in gfortran; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_GFORTRAN_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$GFORTRAN_FOR_TARGET"; then
+ ac_cv_prog_GFORTRAN_FOR_TARGET="$GFORTRAN_FOR_TARGET" # 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_GFORTRAN_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+GFORTRAN_FOR_TARGET=$ac_cv_prog_GFORTRAN_FOR_TARGET
+if test -n "$GFORTRAN_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $GFORTRAN_FOR_TARGET" >&5
+echo "${ECHO_T}$GFORTRAN_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
fi
- if test -n "$with_build_time_tools"; then
+if test -z "$ac_cv_prog_GFORTRAN_FOR_TARGET" && test -n "$with_build_time_tools"; then
for ncn_progname in gfortran; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:4940: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_GFORTRAN_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -4952,69 +8411,81 @@ if test -z "$ac_cv_prog_GFORTRAN_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4957: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_GFORTRAN_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$GFORTRAN_FOR_TARGET"; then
ac_cv_prog_GFORTRAN_FOR_TARGET="$GFORTRAN_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_GFORTRAN_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_GFORTRAN_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-GFORTRAN_FOR_TARGET="$ac_cv_prog_GFORTRAN_FOR_TARGET"
+GFORTRAN_FOR_TARGET=$ac_cv_prog_GFORTRAN_FOR_TARGET
if test -n "$GFORTRAN_FOR_TARGET"; then
- echo "$ac_t""$GFORTRAN_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $GFORTRAN_FOR_TARGET" >&5
+echo "${ECHO_T}$GFORTRAN_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_GFORTRAN_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4988: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_GFORTRAN_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$GFORTRAN_FOR_TARGET"; then
ac_cv_prog_GFORTRAN_FOR_TARGET="$GFORTRAN_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_GFORTRAN_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_GFORTRAN_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-GFORTRAN_FOR_TARGET="$ac_cv_prog_GFORTRAN_FOR_TARGET"
+GFORTRAN_FOR_TARGET=$ac_cv_prog_GFORTRAN_FOR_TARGET
if test -n "$GFORTRAN_FOR_TARGET"; then
- echo "$ac_t""$GFORTRAN_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $GFORTRAN_FOR_TARGET" >&5
+echo "${ECHO_T}$GFORTRAN_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_GFORTRAN_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_GFORTRAN_FOR_TARGET" ; then
set dummy gfortran
if test $build = $target ; then
@@ -5022,52 +8493,8 @@ if test -z "$ac_cv_prog_GFORTRAN_FOR_TARGET" ; then
else
GFORTRAN_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
-fi
-
-
-
-# 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
-
-
-
-if test "x$exec_prefix" = xNONE; then
- if test "x$prefix" = xNONE; then
- gcc_cv_tool_prefix=$ac_default_prefix
- else
- gcc_cv_tool_prefix=$prefix
- fi
else
- gcc_cv_tool_prefix=$exec_prefix
-fi
-
-# If there is no compiler in the tree, use the PATH only. In any
-# case, if there is no compiler in the tree nobody should use
-# AS_FOR_TARGET and LD_FOR_TARGET.
-if test x$host = x$build && test -f $srcdir/gcc/BASE-VER; then
- gcc_version=`cat $srcdir/gcc/BASE-VER`
- gcc_cv_tool_dirs="$gcc_cv_tool_prefix/libexec/gcc/$target_noncanonical/$gcc_version$PATH_SEPARATOR"
- gcc_cv_tool_dirs="$gcc_cv_tool_dirs$gcc_cv_tool_prefix/libexec/gcc/$target_noncanonical$PATH_SEPARATOR"
- gcc_cv_tool_dirs="$gcc_cv_tool_dirs/usr/lib/gcc/$target_noncanonical/$gcc_version$PATH_SEPARATOR"
- gcc_cv_tool_dirs="$gcc_cv_tool_dirs/usr/lib/gcc/$target_noncanonical$PATH_SEPARATOR"
- gcc_cv_tool_dirs="$gcc_cv_tool_dirs$gcc_cv_tool_prefix/$target_noncanonical/bin/$target_noncanonical/$gcc_version$PATH_SEPARATOR"
- gcc_cv_tool_dirs="$gcc_cv_tool_dirs$gcc_cv_tool_prefix/$target_noncanonical/bin$PATH_SEPARATOR"
-else
- gcc_cv_tool_dirs=
-fi
-
-if test x$build = x$target && test -n "$md_exec_prefix"; then
- gcc_cv_tool_dirs="$gcc_cv_tool_dirs$md_exec_prefix$PATH_SEPARATOR"
+ GFORTRAN_FOR_TARGET="$ac_cv_prog_GFORTRAN_FOR_TARGET"
fi
@@ -5090,69 +8517,125 @@ rm conftest.c
if test -z "$ac_cv_path_AR_FOR_TARGET" ; then
if test -n "$with_build_time_tools"; then
- echo $ac_n "checking for ar in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:5095: checking for ar in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for ar in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ar in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/ar; then
AR_FOR_TARGET=`cd $with_build_time_tools && pwd`/ar
ac_cv_path_AR_FOR_TARGET=$AR_FOR_TARGET
- echo "$ac_t""$ac_cv_path_AR_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $ac_cv_path_AR_FOR_TARGET" >&5
+echo "${ECHO_T}$ac_cv_path_AR_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
elif test $build != $host && test $have_gcc_for_target = yes; then
AR_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=ar`
- test $AR_FOR_TARGET=ar && AR_FOR_TARGET=
- ac_cv_path_AR_FOR_TARGET=$AR_FOR_TARGET
+ test $AR_FOR_TARGET = ar && AR_FOR_TARGET=
+ test -n "$AR_FOR_TARGET" && ac_cv_path_AR_FOR_TARGET=$AR_FOR_TARGET
fi
fi
-if test -z "$ac_cv_path_AR_FOR_TARGET" ; then
+if test -z "$ac_cv_path_AR_FOR_TARGET" && test -n "$gcc_cv_tool_dirs"; then
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5113: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_AR_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_AR_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- case "$AR_FOR_TARGET" in
- /*)
+ case $AR_FOR_TARGET in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_AR_FOR_TARGET="$AR_FOR_TARGET" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_AR_FOR_TARGET="$AR_FOR_TARGET" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$gcc_cv_tool_dirs"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_AR_FOR_TARGET="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $gcc_cv_tool_dirs
+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_AR_FOR_TARGET="$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
+
;;
esac
fi
-AR_FOR_TARGET="$ac_cv_path_AR_FOR_TARGET"
+AR_FOR_TARGET=$ac_cv_path_AR_FOR_TARGET
+
if test -n "$AR_FOR_TARGET"; then
- echo "$ac_t""$AR_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $AR_FOR_TARGET" >&5
+echo "${ECHO_T}$AR_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_path_AR_FOR_TARGET" ; then
- if test -n "$with_build_time_tools"; then
+
+
+if test -n "$AR_FOR_TARGET"; then
+ ac_cv_prog_AR_FOR_TARGET=$AR_FOR_TARGET
+elif test -n "$ac_cv_prog_AR_FOR_TARGET"; then
+ AR_FOR_TARGET=$ac_cv_prog_AR_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_AR_FOR_TARGET"; then
for ncn_progname in ar; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:5150: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_AR_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AR_FOR_TARGET"; then
+ ac_cv_prog_AR_FOR_TARGET="$AR_FOR_TARGET" # 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_AR_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+AR_FOR_TARGET=$ac_cv_prog_AR_FOR_TARGET
+if test -n "$AR_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $AR_FOR_TARGET" >&5
+echo "${ECHO_T}$AR_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+if test -z "$ac_cv_prog_AR_FOR_TARGET" && test -n "$with_build_time_tools"; then
+ for ncn_progname in ar; do
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_AR_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -5162,69 +8645,81 @@ if test -z "$ac_cv_prog_AR_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5167: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$AR_FOR_TARGET"; then
ac_cv_prog_AR_FOR_TARGET="$AR_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_AR_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_AR_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-AR_FOR_TARGET="$ac_cv_prog_AR_FOR_TARGET"
+AR_FOR_TARGET=$ac_cv_prog_AR_FOR_TARGET
if test -n "$AR_FOR_TARGET"; then
- echo "$ac_t""$AR_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $AR_FOR_TARGET" >&5
+echo "${ECHO_T}$AR_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_AR_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5198: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$AR_FOR_TARGET"; then
ac_cv_prog_AR_FOR_TARGET="$AR_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_AR_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_AR_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-AR_FOR_TARGET="$ac_cv_prog_AR_FOR_TARGET"
+AR_FOR_TARGET=$ac_cv_prog_AR_FOR_TARGET
if test -n "$AR_FOR_TARGET"; then
- echo "$ac_t""$AR_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $AR_FOR_TARGET" >&5
+echo "${ECHO_T}$AR_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_AR_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_AR_FOR_TARGET" ; then
set dummy ar
if test $build = $target ; then
@@ -5232,6 +8727,8 @@ if test -z "$ac_cv_prog_AR_FOR_TARGET" ; then
else
AR_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
+else
+ AR_FOR_TARGET="$ac_cv_prog_AR_FOR_TARGET"
fi
else
@@ -5243,69 +8740,125 @@ fi
if test -z "$ac_cv_path_AS_FOR_TARGET" ; then
if test -n "$with_build_time_tools"; then
- echo $ac_n "checking for as in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:5248: checking for as in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for as in $with_build_time_tools" >&5
+echo $ECHO_N "checking for as in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/as; then
AS_FOR_TARGET=`cd $with_build_time_tools && pwd`/as
ac_cv_path_AS_FOR_TARGET=$AS_FOR_TARGET
- echo "$ac_t""$ac_cv_path_AS_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $ac_cv_path_AS_FOR_TARGET" >&5
+echo "${ECHO_T}$ac_cv_path_AS_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
elif test $build != $host && test $have_gcc_for_target = yes; then
AS_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=as`
- test $AS_FOR_TARGET=as && AS_FOR_TARGET=
- ac_cv_path_AS_FOR_TARGET=$AS_FOR_TARGET
+ test $AS_FOR_TARGET = as && AS_FOR_TARGET=
+ test -n "$AS_FOR_TARGET" && ac_cv_path_AS_FOR_TARGET=$AS_FOR_TARGET
fi
fi
-if test -z "$ac_cv_path_AS_FOR_TARGET" ; then
+if test -z "$ac_cv_path_AS_FOR_TARGET" && test -n "$gcc_cv_tool_dirs"; then
# Extract the first word of "as", so it can be a program name with args.
set dummy as; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5266: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_AS_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_AS_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- case "$AS_FOR_TARGET" in
- /*)
+ case $AS_FOR_TARGET in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_AS_FOR_TARGET="$AS_FOR_TARGET" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_AS_FOR_TARGET="$AS_FOR_TARGET" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$gcc_cv_tool_dirs"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_AS_FOR_TARGET="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $gcc_cv_tool_dirs
+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_AS_FOR_TARGET="$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
+
;;
esac
fi
-AS_FOR_TARGET="$ac_cv_path_AS_FOR_TARGET"
+AS_FOR_TARGET=$ac_cv_path_AS_FOR_TARGET
+
if test -n "$AS_FOR_TARGET"; then
- echo "$ac_t""$AS_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $AS_FOR_TARGET" >&5
+echo "${ECHO_T}$AS_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_path_AS_FOR_TARGET" ; then
- if test -n "$with_build_time_tools"; then
+
+
+if test -n "$AS_FOR_TARGET"; then
+ ac_cv_prog_AS_FOR_TARGET=$AS_FOR_TARGET
+elif test -n "$ac_cv_prog_AS_FOR_TARGET"; then
+ AS_FOR_TARGET=$ac_cv_prog_AS_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_AS_FOR_TARGET"; then
+ for ncn_progname in as; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_AS_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AS_FOR_TARGET"; then
+ ac_cv_prog_AS_FOR_TARGET="$AS_FOR_TARGET" # 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_AS_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+AS_FOR_TARGET=$ac_cv_prog_AS_FOR_TARGET
+if test -n "$AS_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $AS_FOR_TARGET" >&5
+echo "${ECHO_T}$AS_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+if test -z "$ac_cv_prog_AS_FOR_TARGET" && test -n "$with_build_time_tools"; then
for ncn_progname in as; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:5303: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_AS_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -5315,69 +8868,81 @@ if test -z "$ac_cv_prog_AS_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5320: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AS_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$AS_FOR_TARGET"; then
ac_cv_prog_AS_FOR_TARGET="$AS_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_AS_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_AS_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-AS_FOR_TARGET="$ac_cv_prog_AS_FOR_TARGET"
+AS_FOR_TARGET=$ac_cv_prog_AS_FOR_TARGET
if test -n "$AS_FOR_TARGET"; then
- echo "$ac_t""$AS_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $AS_FOR_TARGET" >&5
+echo "${ECHO_T}$AS_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_AS_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5351: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AS_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$AS_FOR_TARGET"; then
ac_cv_prog_AS_FOR_TARGET="$AS_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_AS_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_AS_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-AS_FOR_TARGET="$ac_cv_prog_AS_FOR_TARGET"
+AS_FOR_TARGET=$ac_cv_prog_AS_FOR_TARGET
if test -n "$AS_FOR_TARGET"; then
- echo "$ac_t""$AS_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $AS_FOR_TARGET" >&5
+echo "${ECHO_T}$AS_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_AS_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_AS_FOR_TARGET" ; then
set dummy as
if test $build = $target ; then
@@ -5385,6 +8950,8 @@ if test -z "$ac_cv_prog_AS_FOR_TARGET" ; then
else
AS_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
+else
+ AS_FOR_TARGET="$ac_cv_prog_AS_FOR_TARGET"
fi
else
@@ -5396,69 +8963,125 @@ fi
if test -z "$ac_cv_path_DLLTOOL_FOR_TARGET" ; then
if test -n "$with_build_time_tools"; then
- echo $ac_n "checking for dlltool in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:5401: checking for dlltool in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for dlltool in $with_build_time_tools" >&5
+echo $ECHO_N "checking for dlltool in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/dlltool; then
DLLTOOL_FOR_TARGET=`cd $with_build_time_tools && pwd`/dlltool
ac_cv_path_DLLTOOL_FOR_TARGET=$DLLTOOL_FOR_TARGET
- echo "$ac_t""$ac_cv_path_DLLTOOL_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $ac_cv_path_DLLTOOL_FOR_TARGET" >&5
+echo "${ECHO_T}$ac_cv_path_DLLTOOL_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
elif test $build != $host && test $have_gcc_for_target = yes; then
DLLTOOL_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=dlltool`
- test $DLLTOOL_FOR_TARGET=dlltool && DLLTOOL_FOR_TARGET=
- ac_cv_path_DLLTOOL_FOR_TARGET=$DLLTOOL_FOR_TARGET
+ test $DLLTOOL_FOR_TARGET = dlltool && DLLTOOL_FOR_TARGET=
+ test -n "$DLLTOOL_FOR_TARGET" && ac_cv_path_DLLTOOL_FOR_TARGET=$DLLTOOL_FOR_TARGET
fi
fi
-if test -z "$ac_cv_path_DLLTOOL_FOR_TARGET" ; then
+if test -z "$ac_cv_path_DLLTOOL_FOR_TARGET" && test -n "$gcc_cv_tool_dirs"; then
# Extract the first word of "dlltool", so it can be a program name with args.
set dummy dlltool; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5419: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_DLLTOOL_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- case "$DLLTOOL_FOR_TARGET" in
- /*)
+ case $DLLTOOL_FOR_TARGET in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_DLLTOOL_FOR_TARGET="$DLLTOOL_FOR_TARGET" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_DLLTOOL_FOR_TARGET="$DLLTOOL_FOR_TARGET" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$gcc_cv_tool_dirs"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_DLLTOOL_FOR_TARGET="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $gcc_cv_tool_dirs
+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_DLLTOOL_FOR_TARGET="$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
+
;;
esac
fi
-DLLTOOL_FOR_TARGET="$ac_cv_path_DLLTOOL_FOR_TARGET"
+DLLTOOL_FOR_TARGET=$ac_cv_path_DLLTOOL_FOR_TARGET
+
if test -n "$DLLTOOL_FOR_TARGET"; then
- echo "$ac_t""$DLLTOOL_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $DLLTOOL_FOR_TARGET" >&5
+echo "${ECHO_T}$DLLTOOL_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_path_DLLTOOL_FOR_TARGET" ; then
- if test -n "$with_build_time_tools"; then
+
+
+if test -n "$DLLTOOL_FOR_TARGET"; then
+ ac_cv_prog_DLLTOOL_FOR_TARGET=$DLLTOOL_FOR_TARGET
+elif test -n "$ac_cv_prog_DLLTOOL_FOR_TARGET"; then
+ DLLTOOL_FOR_TARGET=$ac_cv_prog_DLLTOOL_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_DLLTOOL_FOR_TARGET"; then
for ncn_progname in dlltool; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:5456: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_DLLTOOL_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$DLLTOOL_FOR_TARGET"; then
+ ac_cv_prog_DLLTOOL_FOR_TARGET="$DLLTOOL_FOR_TARGET" # 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_DLLTOOL_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+DLLTOOL_FOR_TARGET=$ac_cv_prog_DLLTOOL_FOR_TARGET
+if test -n "$DLLTOOL_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $DLLTOOL_FOR_TARGET" >&5
+echo "${ECHO_T}$DLLTOOL_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+if test -z "$ac_cv_prog_DLLTOOL_FOR_TARGET" && test -n "$with_build_time_tools"; then
+ for ncn_progname in dlltool; do
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_DLLTOOL_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -5468,69 +9091,81 @@ if test -z "$ac_cv_prog_DLLTOOL_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5473: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_DLLTOOL_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$DLLTOOL_FOR_TARGET"; then
ac_cv_prog_DLLTOOL_FOR_TARGET="$DLLTOOL_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_DLLTOOL_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_DLLTOOL_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-DLLTOOL_FOR_TARGET="$ac_cv_prog_DLLTOOL_FOR_TARGET"
+DLLTOOL_FOR_TARGET=$ac_cv_prog_DLLTOOL_FOR_TARGET
if test -n "$DLLTOOL_FOR_TARGET"; then
- echo "$ac_t""$DLLTOOL_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $DLLTOOL_FOR_TARGET" >&5
+echo "${ECHO_T}$DLLTOOL_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_DLLTOOL_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5504: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_DLLTOOL_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$DLLTOOL_FOR_TARGET"; then
ac_cv_prog_DLLTOOL_FOR_TARGET="$DLLTOOL_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_DLLTOOL_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_DLLTOOL_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-DLLTOOL_FOR_TARGET="$ac_cv_prog_DLLTOOL_FOR_TARGET"
+DLLTOOL_FOR_TARGET=$ac_cv_prog_DLLTOOL_FOR_TARGET
if test -n "$DLLTOOL_FOR_TARGET"; then
- echo "$ac_t""$DLLTOOL_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $DLLTOOL_FOR_TARGET" >&5
+echo "${ECHO_T}$DLLTOOL_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_DLLTOOL_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_DLLTOOL_FOR_TARGET" ; then
set dummy dlltool
if test $build = $target ; then
@@ -5538,6 +9173,8 @@ if test -z "$ac_cv_prog_DLLTOOL_FOR_TARGET" ; then
else
DLLTOOL_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
+else
+ DLLTOOL_FOR_TARGET="$ac_cv_prog_DLLTOOL_FOR_TARGET"
fi
else
@@ -5549,69 +9186,125 @@ fi
if test -z "$ac_cv_path_LD_FOR_TARGET" ; then
if test -n "$with_build_time_tools"; then
- echo $ac_n "checking for ld in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:5554: checking for ld in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for ld in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ld in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/ld; then
LD_FOR_TARGET=`cd $with_build_time_tools && pwd`/ld
ac_cv_path_LD_FOR_TARGET=$LD_FOR_TARGET
- echo "$ac_t""$ac_cv_path_LD_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $ac_cv_path_LD_FOR_TARGET" >&5
+echo "${ECHO_T}$ac_cv_path_LD_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
elif test $build != $host && test $have_gcc_for_target = yes; then
LD_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=ld`
- test $LD_FOR_TARGET=ld && LD_FOR_TARGET=
- ac_cv_path_LD_FOR_TARGET=$LD_FOR_TARGET
+ test $LD_FOR_TARGET = ld && LD_FOR_TARGET=
+ test -n "$LD_FOR_TARGET" && ac_cv_path_LD_FOR_TARGET=$LD_FOR_TARGET
fi
fi
-if test -z "$ac_cv_path_LD_FOR_TARGET" ; then
+if test -z "$ac_cv_path_LD_FOR_TARGET" && test -n "$gcc_cv_tool_dirs"; then
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5572: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_LD_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_LD_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- case "$LD_FOR_TARGET" in
- /*)
+ case $LD_FOR_TARGET in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_LD_FOR_TARGET="$LD_FOR_TARGET" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_LD_FOR_TARGET="$LD_FOR_TARGET" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$gcc_cv_tool_dirs"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_LD_FOR_TARGET="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $gcc_cv_tool_dirs
+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_LD_FOR_TARGET="$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
+
;;
esac
fi
-LD_FOR_TARGET="$ac_cv_path_LD_FOR_TARGET"
+LD_FOR_TARGET=$ac_cv_path_LD_FOR_TARGET
+
if test -n "$LD_FOR_TARGET"; then
- echo "$ac_t""$LD_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $LD_FOR_TARGET" >&5
+echo "${ECHO_T}$LD_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_path_LD_FOR_TARGET" ; then
- if test -n "$with_build_time_tools"; then
+
+
+if test -n "$LD_FOR_TARGET"; then
+ ac_cv_prog_LD_FOR_TARGET=$LD_FOR_TARGET
+elif test -n "$ac_cv_prog_LD_FOR_TARGET"; then
+ LD_FOR_TARGET=$ac_cv_prog_LD_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_LD_FOR_TARGET"; then
for ncn_progname in ld; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:5609: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_LD_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$LD_FOR_TARGET"; then
+ ac_cv_prog_LD_FOR_TARGET="$LD_FOR_TARGET" # 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_LD_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+LD_FOR_TARGET=$ac_cv_prog_LD_FOR_TARGET
+if test -n "$LD_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $LD_FOR_TARGET" >&5
+echo "${ECHO_T}$LD_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+if test -z "$ac_cv_prog_LD_FOR_TARGET" && test -n "$with_build_time_tools"; then
+ for ncn_progname in ld; do
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_LD_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -5621,69 +9314,81 @@ if test -z "$ac_cv_prog_LD_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5626: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LD_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$LD_FOR_TARGET"; then
ac_cv_prog_LD_FOR_TARGET="$LD_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_LD_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_LD_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-LD_FOR_TARGET="$ac_cv_prog_LD_FOR_TARGET"
+LD_FOR_TARGET=$ac_cv_prog_LD_FOR_TARGET
if test -n "$LD_FOR_TARGET"; then
- echo "$ac_t""$LD_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $LD_FOR_TARGET" >&5
+echo "${ECHO_T}$LD_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_LD_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5657: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LD_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$LD_FOR_TARGET"; then
ac_cv_prog_LD_FOR_TARGET="$LD_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_LD_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_LD_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-LD_FOR_TARGET="$ac_cv_prog_LD_FOR_TARGET"
+LD_FOR_TARGET=$ac_cv_prog_LD_FOR_TARGET
if test -n "$LD_FOR_TARGET"; then
- echo "$ac_t""$LD_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $LD_FOR_TARGET" >&5
+echo "${ECHO_T}$LD_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_LD_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_LD_FOR_TARGET" ; then
set dummy ld
if test $build = $target ; then
@@ -5691,6 +9396,8 @@ if test -z "$ac_cv_prog_LD_FOR_TARGET" ; then
else
LD_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
+else
+ LD_FOR_TARGET="$ac_cv_prog_LD_FOR_TARGET"
fi
else
@@ -5702,69 +9409,125 @@ fi
if test -z "$ac_cv_path_LIPO_FOR_TARGET" ; then
if test -n "$with_build_time_tools"; then
- echo $ac_n "checking for lipo in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:5707: checking for lipo in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for lipo in $with_build_time_tools" >&5
+echo $ECHO_N "checking for lipo in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/lipo; then
LIPO_FOR_TARGET=`cd $with_build_time_tools && pwd`/lipo
ac_cv_path_LIPO_FOR_TARGET=$LIPO_FOR_TARGET
- echo "$ac_t""$ac_cv_path_LIPO_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $ac_cv_path_LIPO_FOR_TARGET" >&5
+echo "${ECHO_T}$ac_cv_path_LIPO_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
elif test $build != $host && test $have_gcc_for_target = yes; then
LIPO_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=lipo`
- test $LIPO_FOR_TARGET=lipo && LIPO_FOR_TARGET=
- ac_cv_path_LIPO_FOR_TARGET=$LIPO_FOR_TARGET
+ test $LIPO_FOR_TARGET = lipo && LIPO_FOR_TARGET=
+ test -n "$LIPO_FOR_TARGET" && ac_cv_path_LIPO_FOR_TARGET=$LIPO_FOR_TARGET
fi
fi
-if test -z "$ac_cv_path_LIPO_FOR_TARGET" ; then
+if test -z "$ac_cv_path_LIPO_FOR_TARGET" && test -n "$gcc_cv_tool_dirs"; then
# Extract the first word of "lipo", so it can be a program name with args.
set dummy lipo; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5725: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_LIPO_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_LIPO_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- case "$LIPO_FOR_TARGET" in
- /*)
+ case $LIPO_FOR_TARGET in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_LIPO_FOR_TARGET="$LIPO_FOR_TARGET" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_LIPO_FOR_TARGET="$LIPO_FOR_TARGET" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$gcc_cv_tool_dirs"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_LIPO_FOR_TARGET="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $gcc_cv_tool_dirs
+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_LIPO_FOR_TARGET="$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
+
;;
esac
fi
-LIPO_FOR_TARGET="$ac_cv_path_LIPO_FOR_TARGET"
+LIPO_FOR_TARGET=$ac_cv_path_LIPO_FOR_TARGET
+
if test -n "$LIPO_FOR_TARGET"; then
- echo "$ac_t""$LIPO_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $LIPO_FOR_TARGET" >&5
+echo "${ECHO_T}$LIPO_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_path_LIPO_FOR_TARGET" ; then
- if test -n "$with_build_time_tools"; then
+
+
+if test -n "$LIPO_FOR_TARGET"; then
+ ac_cv_prog_LIPO_FOR_TARGET=$LIPO_FOR_TARGET
+elif test -n "$ac_cv_prog_LIPO_FOR_TARGET"; then
+ LIPO_FOR_TARGET=$ac_cv_prog_LIPO_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_LIPO_FOR_TARGET"; then
for ncn_progname in lipo; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:5762: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_LIPO_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$LIPO_FOR_TARGET"; then
+ ac_cv_prog_LIPO_FOR_TARGET="$LIPO_FOR_TARGET" # 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_LIPO_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+LIPO_FOR_TARGET=$ac_cv_prog_LIPO_FOR_TARGET
+if test -n "$LIPO_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $LIPO_FOR_TARGET" >&5
+echo "${ECHO_T}$LIPO_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+if test -z "$ac_cv_prog_LIPO_FOR_TARGET" && test -n "$with_build_time_tools"; then
+ for ncn_progname in lipo; do
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_LIPO_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -5774,69 +9537,81 @@ if test -z "$ac_cv_prog_LIPO_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5779: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LIPO_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$LIPO_FOR_TARGET"; then
ac_cv_prog_LIPO_FOR_TARGET="$LIPO_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_LIPO_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_LIPO_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-LIPO_FOR_TARGET="$ac_cv_prog_LIPO_FOR_TARGET"
+LIPO_FOR_TARGET=$ac_cv_prog_LIPO_FOR_TARGET
if test -n "$LIPO_FOR_TARGET"; then
- echo "$ac_t""$LIPO_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $LIPO_FOR_TARGET" >&5
+echo "${ECHO_T}$LIPO_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_LIPO_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5810: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LIPO_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$LIPO_FOR_TARGET"; then
ac_cv_prog_LIPO_FOR_TARGET="$LIPO_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_LIPO_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_LIPO_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-LIPO_FOR_TARGET="$ac_cv_prog_LIPO_FOR_TARGET"
+LIPO_FOR_TARGET=$ac_cv_prog_LIPO_FOR_TARGET
if test -n "$LIPO_FOR_TARGET"; then
- echo "$ac_t""$LIPO_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $LIPO_FOR_TARGET" >&5
+echo "${ECHO_T}$LIPO_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_LIPO_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_LIPO_FOR_TARGET" ; then
set dummy lipo
if test $build = $target ; then
@@ -5844,6 +9619,8 @@ if test -z "$ac_cv_prog_LIPO_FOR_TARGET" ; then
else
LIPO_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
+else
+ LIPO_FOR_TARGET="$ac_cv_prog_LIPO_FOR_TARGET"
fi
else
@@ -5855,69 +9632,125 @@ fi
if test -z "$ac_cv_path_NM_FOR_TARGET" ; then
if test -n "$with_build_time_tools"; then
- echo $ac_n "checking for nm in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:5860: checking for nm in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for nm in $with_build_time_tools" >&5
+echo $ECHO_N "checking for nm in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/nm; then
NM_FOR_TARGET=`cd $with_build_time_tools && pwd`/nm
ac_cv_path_NM_FOR_TARGET=$NM_FOR_TARGET
- echo "$ac_t""$ac_cv_path_NM_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $ac_cv_path_NM_FOR_TARGET" >&5
+echo "${ECHO_T}$ac_cv_path_NM_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
elif test $build != $host && test $have_gcc_for_target = yes; then
NM_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=nm`
- test $NM_FOR_TARGET=nm && NM_FOR_TARGET=
- ac_cv_path_NM_FOR_TARGET=$NM_FOR_TARGET
+ test $NM_FOR_TARGET = nm && NM_FOR_TARGET=
+ test -n "$NM_FOR_TARGET" && ac_cv_path_NM_FOR_TARGET=$NM_FOR_TARGET
fi
fi
-if test -z "$ac_cv_path_NM_FOR_TARGET" ; then
+if test -z "$ac_cv_path_NM_FOR_TARGET" && test -n "$gcc_cv_tool_dirs"; then
# Extract the first word of "nm", so it can be a program name with args.
set dummy nm; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5878: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_NM_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_NM_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- case "$NM_FOR_TARGET" in
- /*)
+ case $NM_FOR_TARGET in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_NM_FOR_TARGET="$NM_FOR_TARGET" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_NM_FOR_TARGET="$NM_FOR_TARGET" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$gcc_cv_tool_dirs"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_NM_FOR_TARGET="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $gcc_cv_tool_dirs
+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_NM_FOR_TARGET="$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
+
;;
esac
fi
-NM_FOR_TARGET="$ac_cv_path_NM_FOR_TARGET"
+NM_FOR_TARGET=$ac_cv_path_NM_FOR_TARGET
+
if test -n "$NM_FOR_TARGET"; then
- echo "$ac_t""$NM_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $NM_FOR_TARGET" >&5
+echo "${ECHO_T}$NM_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_path_NM_FOR_TARGET" ; then
- if test -n "$with_build_time_tools"; then
+
+
+if test -n "$NM_FOR_TARGET"; then
+ ac_cv_prog_NM_FOR_TARGET=$NM_FOR_TARGET
+elif test -n "$ac_cv_prog_NM_FOR_TARGET"; then
+ NM_FOR_TARGET=$ac_cv_prog_NM_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_NM_FOR_TARGET"; then
+ for ncn_progname in nm; do
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_NM_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$NM_FOR_TARGET"; then
+ ac_cv_prog_NM_FOR_TARGET="$NM_FOR_TARGET" # 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_NM_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+NM_FOR_TARGET=$ac_cv_prog_NM_FOR_TARGET
+if test -n "$NM_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $NM_FOR_TARGET" >&5
+echo "${ECHO_T}$NM_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+if test -z "$ac_cv_prog_NM_FOR_TARGET" && test -n "$with_build_time_tools"; then
for ncn_progname in nm; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:5915: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_NM_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -5927,69 +9760,81 @@ if test -z "$ac_cv_prog_NM_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5932: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_NM_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$NM_FOR_TARGET"; then
ac_cv_prog_NM_FOR_TARGET="$NM_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_NM_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_NM_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-NM_FOR_TARGET="$ac_cv_prog_NM_FOR_TARGET"
+NM_FOR_TARGET=$ac_cv_prog_NM_FOR_TARGET
if test -n "$NM_FOR_TARGET"; then
- echo "$ac_t""$NM_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $NM_FOR_TARGET" >&5
+echo "${ECHO_T}$NM_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_NM_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5963: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_NM_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$NM_FOR_TARGET"; then
ac_cv_prog_NM_FOR_TARGET="$NM_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_NM_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_NM_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-NM_FOR_TARGET="$ac_cv_prog_NM_FOR_TARGET"
+NM_FOR_TARGET=$ac_cv_prog_NM_FOR_TARGET
if test -n "$NM_FOR_TARGET"; then
- echo "$ac_t""$NM_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $NM_FOR_TARGET" >&5
+echo "${ECHO_T}$NM_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_NM_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_NM_FOR_TARGET" ; then
set dummy nm
if test $build = $target ; then
@@ -5997,6 +9842,8 @@ if test -z "$ac_cv_prog_NM_FOR_TARGET" ; then
else
NM_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
+else
+ NM_FOR_TARGET="$ac_cv_prog_NM_FOR_TARGET"
fi
else
@@ -6008,69 +9855,125 @@ fi
if test -z "$ac_cv_path_OBJDUMP_FOR_TARGET" ; then
if test -n "$with_build_time_tools"; then
- echo $ac_n "checking for objdump in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:6013: checking for objdump in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for objdump in $with_build_time_tools" >&5
+echo $ECHO_N "checking for objdump in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/objdump; then
OBJDUMP_FOR_TARGET=`cd $with_build_time_tools && pwd`/objdump
ac_cv_path_OBJDUMP_FOR_TARGET=$OBJDUMP_FOR_TARGET
- echo "$ac_t""$ac_cv_path_OBJDUMP_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $ac_cv_path_OBJDUMP_FOR_TARGET" >&5
+echo "${ECHO_T}$ac_cv_path_OBJDUMP_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
elif test $build != $host && test $have_gcc_for_target = yes; then
OBJDUMP_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=objdump`
- test $OBJDUMP_FOR_TARGET=objdump && OBJDUMP_FOR_TARGET=
- ac_cv_path_OBJDUMP_FOR_TARGET=$OBJDUMP_FOR_TARGET
+ test $OBJDUMP_FOR_TARGET = objdump && OBJDUMP_FOR_TARGET=
+ test -n "$OBJDUMP_FOR_TARGET" && ac_cv_path_OBJDUMP_FOR_TARGET=$OBJDUMP_FOR_TARGET
fi
fi
-if test -z "$ac_cv_path_OBJDUMP_FOR_TARGET" ; then
+if test -z "$ac_cv_path_OBJDUMP_FOR_TARGET" && test -n "$gcc_cv_tool_dirs"; then
# Extract the first word of "objdump", so it can be a program name with args.
set dummy objdump; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6031: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_OBJDUMP_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- case "$OBJDUMP_FOR_TARGET" in
- /*)
+ case $OBJDUMP_FOR_TARGET in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_OBJDUMP_FOR_TARGET="$OBJDUMP_FOR_TARGET" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_OBJDUMP_FOR_TARGET="$OBJDUMP_FOR_TARGET" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$gcc_cv_tool_dirs"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_OBJDUMP_FOR_TARGET="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $gcc_cv_tool_dirs
+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_OBJDUMP_FOR_TARGET="$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
+
;;
esac
fi
-OBJDUMP_FOR_TARGET="$ac_cv_path_OBJDUMP_FOR_TARGET"
+OBJDUMP_FOR_TARGET=$ac_cv_path_OBJDUMP_FOR_TARGET
+
if test -n "$OBJDUMP_FOR_TARGET"; then
- echo "$ac_t""$OBJDUMP_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $OBJDUMP_FOR_TARGET" >&5
+echo "${ECHO_T}$OBJDUMP_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_path_OBJDUMP_FOR_TARGET" ; then
- if test -n "$with_build_time_tools"; then
+
+
+if test -n "$OBJDUMP_FOR_TARGET"; then
+ ac_cv_prog_OBJDUMP_FOR_TARGET=$OBJDUMP_FOR_TARGET
+elif test -n "$ac_cv_prog_OBJDUMP_FOR_TARGET"; then
+ OBJDUMP_FOR_TARGET=$ac_cv_prog_OBJDUMP_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_OBJDUMP_FOR_TARGET"; then
for ncn_progname in objdump; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:6068: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_OBJDUMP_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$OBJDUMP_FOR_TARGET"; then
+ ac_cv_prog_OBJDUMP_FOR_TARGET="$OBJDUMP_FOR_TARGET" # 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_OBJDUMP_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+OBJDUMP_FOR_TARGET=$ac_cv_prog_OBJDUMP_FOR_TARGET
+if test -n "$OBJDUMP_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $OBJDUMP_FOR_TARGET" >&5
+echo "${ECHO_T}$OBJDUMP_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+if test -z "$ac_cv_prog_OBJDUMP_FOR_TARGET" && test -n "$with_build_time_tools"; then
+ for ncn_progname in objdump; do
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_OBJDUMP_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -6080,69 +9983,81 @@ if test -z "$ac_cv_prog_OBJDUMP_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6085: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_OBJDUMP_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$OBJDUMP_FOR_TARGET"; then
ac_cv_prog_OBJDUMP_FOR_TARGET="$OBJDUMP_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_OBJDUMP_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_OBJDUMP_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-OBJDUMP_FOR_TARGET="$ac_cv_prog_OBJDUMP_FOR_TARGET"
+OBJDUMP_FOR_TARGET=$ac_cv_prog_OBJDUMP_FOR_TARGET
if test -n "$OBJDUMP_FOR_TARGET"; then
- echo "$ac_t""$OBJDUMP_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $OBJDUMP_FOR_TARGET" >&5
+echo "${ECHO_T}$OBJDUMP_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_OBJDUMP_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6116: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_OBJDUMP_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$OBJDUMP_FOR_TARGET"; then
ac_cv_prog_OBJDUMP_FOR_TARGET="$OBJDUMP_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_OBJDUMP_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_OBJDUMP_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-OBJDUMP_FOR_TARGET="$ac_cv_prog_OBJDUMP_FOR_TARGET"
+OBJDUMP_FOR_TARGET=$ac_cv_prog_OBJDUMP_FOR_TARGET
if test -n "$OBJDUMP_FOR_TARGET"; then
- echo "$ac_t""$OBJDUMP_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $OBJDUMP_FOR_TARGET" >&5
+echo "${ECHO_T}$OBJDUMP_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_OBJDUMP_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_OBJDUMP_FOR_TARGET" ; then
set dummy objdump
if test $build = $target ; then
@@ -6150,6 +10065,8 @@ if test -z "$ac_cv_prog_OBJDUMP_FOR_TARGET" ; then
else
OBJDUMP_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
+else
+ OBJDUMP_FOR_TARGET="$ac_cv_prog_OBJDUMP_FOR_TARGET"
fi
else
@@ -6161,69 +10078,125 @@ fi
if test -z "$ac_cv_path_RANLIB_FOR_TARGET" ; then
if test -n "$with_build_time_tools"; then
- echo $ac_n "checking for ranlib in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:6166: checking for ranlib in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for ranlib in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ranlib in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/ranlib; then
RANLIB_FOR_TARGET=`cd $with_build_time_tools && pwd`/ranlib
ac_cv_path_RANLIB_FOR_TARGET=$RANLIB_FOR_TARGET
- echo "$ac_t""$ac_cv_path_RANLIB_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $ac_cv_path_RANLIB_FOR_TARGET" >&5
+echo "${ECHO_T}$ac_cv_path_RANLIB_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
elif test $build != $host && test $have_gcc_for_target = yes; then
RANLIB_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=ranlib`
- test $RANLIB_FOR_TARGET=ranlib && RANLIB_FOR_TARGET=
- ac_cv_path_RANLIB_FOR_TARGET=$RANLIB_FOR_TARGET
+ test $RANLIB_FOR_TARGET = ranlib && RANLIB_FOR_TARGET=
+ test -n "$RANLIB_FOR_TARGET" && ac_cv_path_RANLIB_FOR_TARGET=$RANLIB_FOR_TARGET
fi
fi
-if test -z "$ac_cv_path_RANLIB_FOR_TARGET" ; then
+if test -z "$ac_cv_path_RANLIB_FOR_TARGET" && test -n "$gcc_cv_tool_dirs"; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6184: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_RANLIB_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_RANLIB_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- case "$RANLIB_FOR_TARGET" in
- /*)
+ case $RANLIB_FOR_TARGET in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_RANLIB_FOR_TARGET="$RANLIB_FOR_TARGET" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_RANLIB_FOR_TARGET="$RANLIB_FOR_TARGET" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$gcc_cv_tool_dirs"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_RANLIB_FOR_TARGET="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $gcc_cv_tool_dirs
+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_RANLIB_FOR_TARGET="$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
+
;;
esac
fi
-RANLIB_FOR_TARGET="$ac_cv_path_RANLIB_FOR_TARGET"
+RANLIB_FOR_TARGET=$ac_cv_path_RANLIB_FOR_TARGET
+
if test -n "$RANLIB_FOR_TARGET"; then
- echo "$ac_t""$RANLIB_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $RANLIB_FOR_TARGET" >&5
+echo "${ECHO_T}$RANLIB_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_path_RANLIB_FOR_TARGET" ; then
- if test -n "$with_build_time_tools"; then
+
+
+if test -n "$RANLIB_FOR_TARGET"; then
+ ac_cv_prog_RANLIB_FOR_TARGET=$RANLIB_FOR_TARGET
+elif test -n "$ac_cv_prog_RANLIB_FOR_TARGET"; then
+ RANLIB_FOR_TARGET=$ac_cv_prog_RANLIB_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_RANLIB_FOR_TARGET"; then
for ncn_progname in ranlib; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:6221: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$RANLIB_FOR_TARGET"; then
+ ac_cv_prog_RANLIB_FOR_TARGET="$RANLIB_FOR_TARGET" # 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_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+RANLIB_FOR_TARGET=$ac_cv_prog_RANLIB_FOR_TARGET
+if test -n "$RANLIB_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $RANLIB_FOR_TARGET" >&5
+echo "${ECHO_T}$RANLIB_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+if test -z "$ac_cv_prog_RANLIB_FOR_TARGET" && test -n "$with_build_time_tools"; then
+ for ncn_progname in ranlib; do
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_RANLIB_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -6233,69 +10206,81 @@ if test -z "$ac_cv_prog_RANLIB_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6238: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$RANLIB_FOR_TARGET"; then
ac_cv_prog_RANLIB_FOR_TARGET="$RANLIB_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RANLIB_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-RANLIB_FOR_TARGET="$ac_cv_prog_RANLIB_FOR_TARGET"
+RANLIB_FOR_TARGET=$ac_cv_prog_RANLIB_FOR_TARGET
if test -n "$RANLIB_FOR_TARGET"; then
- echo "$ac_t""$RANLIB_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $RANLIB_FOR_TARGET" >&5
+echo "${ECHO_T}$RANLIB_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_RANLIB_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6269: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$RANLIB_FOR_TARGET"; then
ac_cv_prog_RANLIB_FOR_TARGET="$RANLIB_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RANLIB_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-RANLIB_FOR_TARGET="$ac_cv_prog_RANLIB_FOR_TARGET"
+RANLIB_FOR_TARGET=$ac_cv_prog_RANLIB_FOR_TARGET
if test -n "$RANLIB_FOR_TARGET"; then
- echo "$ac_t""$RANLIB_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $RANLIB_FOR_TARGET" >&5
+echo "${ECHO_T}$RANLIB_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_RANLIB_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_RANLIB_FOR_TARGET" ; then
set dummy ranlib
if test $build = $target ; then
@@ -6303,6 +10288,8 @@ if test -z "$ac_cv_prog_RANLIB_FOR_TARGET" ; then
else
RANLIB_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
+else
+ RANLIB_FOR_TARGET="$ac_cv_prog_RANLIB_FOR_TARGET"
fi
else
@@ -6314,69 +10301,125 @@ fi
if test -z "$ac_cv_path_STRIP_FOR_TARGET" ; then
if test -n "$with_build_time_tools"; then
- echo $ac_n "checking for strip in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:6319: checking for strip in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for strip in $with_build_time_tools" >&5
+echo $ECHO_N "checking for strip in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/strip; then
STRIP_FOR_TARGET=`cd $with_build_time_tools && pwd`/strip
ac_cv_path_STRIP_FOR_TARGET=$STRIP_FOR_TARGET
- echo "$ac_t""$ac_cv_path_STRIP_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $ac_cv_path_STRIP_FOR_TARGET" >&5
+echo "${ECHO_T}$ac_cv_path_STRIP_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
elif test $build != $host && test $have_gcc_for_target = yes; then
STRIP_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=strip`
- test $STRIP_FOR_TARGET=strip && STRIP_FOR_TARGET=
- ac_cv_path_STRIP_FOR_TARGET=$STRIP_FOR_TARGET
+ test $STRIP_FOR_TARGET = strip && STRIP_FOR_TARGET=
+ test -n "$STRIP_FOR_TARGET" && ac_cv_path_STRIP_FOR_TARGET=$STRIP_FOR_TARGET
fi
fi
-if test -z "$ac_cv_path_STRIP_FOR_TARGET" ; then
+if test -z "$ac_cv_path_STRIP_FOR_TARGET" && test -n "$gcc_cv_tool_dirs"; then
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6337: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_STRIP_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_STRIP_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- case "$STRIP_FOR_TARGET" in
- /*)
+ case $STRIP_FOR_TARGET in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_STRIP_FOR_TARGET="$STRIP_FOR_TARGET" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_STRIP_FOR_TARGET="$STRIP_FOR_TARGET" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$gcc_cv_tool_dirs"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_STRIP_FOR_TARGET="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $gcc_cv_tool_dirs
+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_STRIP_FOR_TARGET="$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
+
;;
esac
fi
-STRIP_FOR_TARGET="$ac_cv_path_STRIP_FOR_TARGET"
+STRIP_FOR_TARGET=$ac_cv_path_STRIP_FOR_TARGET
+
if test -n "$STRIP_FOR_TARGET"; then
- echo "$ac_t""$STRIP_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $STRIP_FOR_TARGET" >&5
+echo "${ECHO_T}$STRIP_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_path_STRIP_FOR_TARGET" ; then
- if test -n "$with_build_time_tools"; then
+
+
+if test -n "$STRIP_FOR_TARGET"; then
+ ac_cv_prog_STRIP_FOR_TARGET=$STRIP_FOR_TARGET
+elif test -n "$ac_cv_prog_STRIP_FOR_TARGET"; then
+ STRIP_FOR_TARGET=$ac_cv_prog_STRIP_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_STRIP_FOR_TARGET"; then
for ncn_progname in strip; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:6374: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$STRIP_FOR_TARGET"; then
+ ac_cv_prog_STRIP_FOR_TARGET="$STRIP_FOR_TARGET" # 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_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+STRIP_FOR_TARGET=$ac_cv_prog_STRIP_FOR_TARGET
+if test -n "$STRIP_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $STRIP_FOR_TARGET" >&5
+echo "${ECHO_T}$STRIP_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+if test -z "$ac_cv_prog_STRIP_FOR_TARGET" && test -n "$with_build_time_tools"; then
+ for ncn_progname in strip; do
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_STRIP_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -6386,69 +10429,81 @@ if test -z "$ac_cv_prog_STRIP_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6391: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$STRIP_FOR_TARGET"; then
ac_cv_prog_STRIP_FOR_TARGET="$STRIP_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_STRIP_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-STRIP_FOR_TARGET="$ac_cv_prog_STRIP_FOR_TARGET"
+STRIP_FOR_TARGET=$ac_cv_prog_STRIP_FOR_TARGET
if test -n "$STRIP_FOR_TARGET"; then
- echo "$ac_t""$STRIP_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $STRIP_FOR_TARGET" >&5
+echo "${ECHO_T}$STRIP_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_STRIP_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6422: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$STRIP_FOR_TARGET"; then
ac_cv_prog_STRIP_FOR_TARGET="$STRIP_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_STRIP_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-STRIP_FOR_TARGET="$ac_cv_prog_STRIP_FOR_TARGET"
+STRIP_FOR_TARGET=$ac_cv_prog_STRIP_FOR_TARGET
if test -n "$STRIP_FOR_TARGET"; then
- echo "$ac_t""$STRIP_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $STRIP_FOR_TARGET" >&5
+echo "${ECHO_T}$STRIP_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_STRIP_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_STRIP_FOR_TARGET" ; then
set dummy strip
if test $build = $target ; then
@@ -6456,6 +10511,8 @@ if test -z "$ac_cv_prog_STRIP_FOR_TARGET" ; then
else
STRIP_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
+else
+ STRIP_FOR_TARGET="$ac_cv_prog_STRIP_FOR_TARGET"
fi
else
@@ -6467,69 +10524,125 @@ fi
if test -z "$ac_cv_path_WINDRES_FOR_TARGET" ; then
if test -n "$with_build_time_tools"; then
- echo $ac_n "checking for windres in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:6472: checking for windres in $with_build_time_tools" >&5
+ echo "$as_me:$LINENO: checking for windres in $with_build_time_tools" >&5
+echo $ECHO_N "checking for windres in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/windres; then
WINDRES_FOR_TARGET=`cd $with_build_time_tools && pwd`/windres
ac_cv_path_WINDRES_FOR_TARGET=$WINDRES_FOR_TARGET
- echo "$ac_t""$ac_cv_path_WINDRES_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $ac_cv_path_WINDRES_FOR_TARGET" >&5
+echo "${ECHO_T}$ac_cv_path_WINDRES_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
elif test $build != $host && test $have_gcc_for_target = yes; then
WINDRES_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=windres`
- test $WINDRES_FOR_TARGET=windres && WINDRES_FOR_TARGET=
- ac_cv_path_WINDRES_FOR_TARGET=$WINDRES_FOR_TARGET
+ test $WINDRES_FOR_TARGET = windres && WINDRES_FOR_TARGET=
+ test -n "$WINDRES_FOR_TARGET" && ac_cv_path_WINDRES_FOR_TARGET=$WINDRES_FOR_TARGET
fi
fi
-if test -z "$ac_cv_path_WINDRES_FOR_TARGET" ; then
+if test -z "$ac_cv_path_WINDRES_FOR_TARGET" && test -n "$gcc_cv_tool_dirs"; then
# Extract the first word of "windres", so it can be a program name with args.
set dummy windres; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6490: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_WINDRES_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_WINDRES_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- case "$WINDRES_FOR_TARGET" in
- /*)
+ case $WINDRES_FOR_TARGET in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_WINDRES_FOR_TARGET="$WINDRES_FOR_TARGET" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_WINDRES_FOR_TARGET="$WINDRES_FOR_TARGET" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$gcc_cv_tool_dirs"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_WINDRES_FOR_TARGET="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $gcc_cv_tool_dirs
+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_WINDRES_FOR_TARGET="$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
+
;;
esac
fi
-WINDRES_FOR_TARGET="$ac_cv_path_WINDRES_FOR_TARGET"
+WINDRES_FOR_TARGET=$ac_cv_path_WINDRES_FOR_TARGET
+
if test -n "$WINDRES_FOR_TARGET"; then
- echo "$ac_t""$WINDRES_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $WINDRES_FOR_TARGET" >&5
+echo "${ECHO_T}$WINDRES_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_path_WINDRES_FOR_TARGET" ; then
- if test -n "$with_build_time_tools"; then
+
+
+if test -n "$WINDRES_FOR_TARGET"; then
+ ac_cv_prog_WINDRES_FOR_TARGET=$WINDRES_FOR_TARGET
+elif test -n "$ac_cv_prog_WINDRES_FOR_TARGET"; then
+ WINDRES_FOR_TARGET=$ac_cv_prog_WINDRES_FOR_TARGET
+fi
+
+if test -n "$ac_cv_prog_WINDRES_FOR_TARGET"; then
for ncn_progname in windres; do
- echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6
-echo "configure:6527: checking for ${ncn_progname} in $with_build_time_tools" >&5
+ # Extract the first word of "${ncn_progname}", so it can be a program name with args.
+set dummy ${ncn_progname}; 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_WINDRES_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$WINDRES_FOR_TARGET"; then
+ ac_cv_prog_WINDRES_FOR_TARGET="$WINDRES_FOR_TARGET" # 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_WINDRES_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+WINDRES_FOR_TARGET=$ac_cv_prog_WINDRES_FOR_TARGET
+if test -n "$WINDRES_FOR_TARGET"; then
+ echo "$as_me:$LINENO: result: $WINDRES_FOR_TARGET" >&5
+echo "${ECHO_T}$WINDRES_FOR_TARGET" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ done
+fi
+
+if test -z "$ac_cv_prog_WINDRES_FOR_TARGET" && test -n "$with_build_time_tools"; then
+ for ncn_progname in windres; do
+ echo "$as_me:$LINENO: checking for ${ncn_progname} in $with_build_time_tools" >&5
+echo $ECHO_N "checking for ${ncn_progname} in $with_build_time_tools... $ECHO_C" >&6
if test -x $with_build_time_tools/${ncn_progname}; then
ac_cv_prog_WINDRES_FOR_TARGET=$with_build_time_tools/${ncn_progname}
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
break
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
done
fi
@@ -6539,69 +10652,81 @@ if test -z "$ac_cv_prog_WINDRES_FOR_TARGET"; then
if test -n "$ncn_target_tool_prefix"; then
# Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6544: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_WINDRES_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$WINDRES_FOR_TARGET"; then
ac_cv_prog_WINDRES_FOR_TARGET="$WINDRES_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_WINDRES_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_WINDRES_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-WINDRES_FOR_TARGET="$ac_cv_prog_WINDRES_FOR_TARGET"
+WINDRES_FOR_TARGET=$ac_cv_prog_WINDRES_FOR_TARGET
if test -n "$WINDRES_FOR_TARGET"; then
- echo "$ac_t""$WINDRES_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $WINDRES_FOR_TARGET" >&5
+echo "${ECHO_T}$WINDRES_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_WINDRES_FOR_TARGET" && test $build = $target ; then
# Extract the first word of "${ncn_progname}", so it can be a program name with args.
set dummy ${ncn_progname}; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6575: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_WINDRES_FOR_TARGET+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$WINDRES_FOR_TARGET"; then
ac_cv_prog_WINDRES_FOR_TARGET="$WINDRES_FOR_TARGET" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_WINDRES_FOR_TARGET="${ncn_progname}"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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_WINDRES_FOR_TARGET="${ncn_progname}"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-WINDRES_FOR_TARGET="$ac_cv_prog_WINDRES_FOR_TARGET"
+WINDRES_FOR_TARGET=$ac_cv_prog_WINDRES_FOR_TARGET
if test -n "$WINDRES_FOR_TARGET"; then
- echo "$ac_t""$WINDRES_FOR_TARGET" 1>&6
+ echo "$as_me:$LINENO: result: $WINDRES_FOR_TARGET" >&5
+echo "${ECHO_T}$WINDRES_FOR_TARGET" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+
fi
test -n "$ac_cv_prog_WINDRES_FOR_TARGET" && break
done
fi
-
+
if test -z "$ac_cv_prog_WINDRES_FOR_TARGET" ; then
set dummy windres
if test $build = $target ; then
@@ -6609,6 +10734,8 @@ if test -z "$ac_cv_prog_WINDRES_FOR_TARGET" ; then
else
WINDRES_FOR_TARGET="${ncn_target_tool_prefix}$2"
fi
+else
+ WINDRES_FOR_TARGET="$ac_cv_prog_WINDRES_FOR_TARGET"
fi
else
@@ -6618,15 +10745,18 @@ fi
RAW_CXX_FOR_TARGET="$CXX_FOR_TARGET"
-echo $ac_n "checking where to find the target ar""... $ac_c" 1>&6
-echo "configure:6623: checking where to find the target ar" >&5
+echo "$as_me:$LINENO: checking where to find the target ar" >&5
+echo $ECHO_N "checking where to find the target ar... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$AR_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $AR_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $AR_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -6634,32 +10764,41 @@ else
*" binutils "*) ;;
*) ok=no ;;
esac
-
+
if test $ok = yes; then
# An in-tree tool is available and we can use it
AR_FOR_TARGET='$$r/$(HOST_SUBDIR)/binutils/ar'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$AR_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $AR_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $AR_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
AR_FOR_TARGET='$(AR)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target as""... $ac_c" 1>&6
-echo "configure:6656: checking where to find the target as" >&5
+
+echo "$as_me:$LINENO: checking where to find the target as" >&5
+echo $ECHO_N "checking where to find the target as... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$AS_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $AS_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $AS_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -6667,32 +10806,41 @@ else
*" gas "*) ;;
*) ok=no ;;
esac
-
+
if test $ok = yes; then
# An in-tree tool is available and we can use it
AS_FOR_TARGET='$$r/$(HOST_SUBDIR)/gas/as-new'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$AS_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $AS_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $AS_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
AS_FOR_TARGET='$(AS)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target cc""... $ac_c" 1>&6
-echo "configure:6689: checking where to find the target cc" >&5
+
+echo "$as_me:$LINENO: checking where to find the target cc" >&5
+echo $ECHO_N "checking where to find the target cc... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$CC_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $CC_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $CC_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -6700,32 +10848,41 @@ else
*" gcc "*) ;;
*) ok=no ;;
esac
-
+
if test $ok = yes; then
# An in-tree tool is available and we can use it
CC_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$CC_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $CC_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $CC_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
CC_FOR_TARGET='$(CC)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target c++""... $ac_c" 1>&6
-echo "configure:6722: checking where to find the target c++" >&5
+
+echo "$as_me:$LINENO: checking where to find the target c++" >&5
+echo $ECHO_N "checking where to find the target c++... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$CXX_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $CXX_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $CXX_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -6740,28 +10897,37 @@ else
if test $ok = yes; then
# An in-tree tool is available and we can use it
CXX_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/g++ -B$$r/$(HOST_SUBDIR)/gcc/ -nostdinc++ `test ! -f $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags || $(SHELL) $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags --build-includes` -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$CXX_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $CXX_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $CXX_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
CXX_FOR_TARGET='$(CXX)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target c++ for libstdc++""... $ac_c" 1>&6
-echo "configure:6758: checking where to find the target c++ for libstdc++" >&5
+
+echo "$as_me:$LINENO: checking where to find the target c++ for libstdc++" >&5
+echo $ECHO_N "checking where to find the target c++ for libstdc++... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$RAW_CXX_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $RAW_CXX_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $RAW_CXX_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -6776,28 +10942,37 @@ else
if test $ok = yes; then
# An in-tree tool is available and we can use it
RAW_CXX_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/xgcc -shared-libgcc -B$$r/$(HOST_SUBDIR)/gcc -nostdinc++ -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$RAW_CXX_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $RAW_CXX_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $RAW_CXX_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
RAW_CXX_FOR_TARGET='$(CXX)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target dlltool""... $ac_c" 1>&6
-echo "configure:6794: checking where to find the target dlltool" >&5
+
+echo "$as_me:$LINENO: checking where to find the target dlltool" >&5
+echo $ECHO_N "checking where to find the target dlltool... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$DLLTOOL_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $DLLTOOL_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $DLLTOOL_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -6805,32 +10980,41 @@ else
*" binutils "*) ;;
*) ok=no ;;
esac
-
+
if test $ok = yes; then
# An in-tree tool is available and we can use it
DLLTOOL_FOR_TARGET='$$r/$(HOST_SUBDIR)/binutils/dlltool'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$DLLTOOL_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $DLLTOOL_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $DLLTOOL_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
DLLTOOL_FOR_TARGET='$(DLLTOOL)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target gcc""... $ac_c" 1>&6
-echo "configure:6827: checking where to find the target gcc" >&5
+
+echo "$as_me:$LINENO: checking where to find the target gcc" >&5
+echo $ECHO_N "checking where to find the target gcc... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$GCC_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $GCC_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $GCC_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -6838,32 +11022,41 @@ else
*" gcc "*) ;;
*) ok=no ;;
esac
-
+
if test $ok = yes; then
# An in-tree tool is available and we can use it
GCC_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$GCC_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $GCC_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $GCC_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
GCC_FOR_TARGET='$()'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target gcj""... $ac_c" 1>&6
-echo "configure:6860: checking where to find the target gcj" >&5
+
+echo "$as_me:$LINENO: checking where to find the target gcj" >&5
+echo $ECHO_N "checking where to find the target gcj... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$GCJ_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $GCJ_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $GCJ_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -6878,28 +11071,37 @@ else
if test $ok = yes; then
# An in-tree tool is available and we can use it
GCJ_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/gcj -B$$r/$(HOST_SUBDIR)/gcc/'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$GCJ_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $GCJ_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $GCJ_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
GCJ_FOR_TARGET='$(GCJ)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target gfortran""... $ac_c" 1>&6
-echo "configure:6896: checking where to find the target gfortran" >&5
+
+echo "$as_me:$LINENO: checking where to find the target gfortran" >&5
+echo $ECHO_N "checking where to find the target gfortran... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$GFORTRAN_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $GFORTRAN_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $GFORTRAN_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -6914,28 +11116,37 @@ else
if test $ok = yes; then
# An in-tree tool is available and we can use it
GFORTRAN_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/gfortran -B$$r/$(HOST_SUBDIR)/gcc/'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$GFORTRAN_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $GFORTRAN_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $GFORTRAN_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
GFORTRAN_FOR_TARGET='$(GFORTRAN)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target ld""... $ac_c" 1>&6
-echo "configure:6932: checking where to find the target ld" >&5
+
+echo "$as_me:$LINENO: checking where to find the target ld" >&5
+echo $ECHO_N "checking where to find the target ld... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$LD_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $LD_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $LD_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -6943,55 +11154,72 @@ else
*" ld "*) ;;
*) ok=no ;;
esac
-
+
if test $ok = yes; then
# An in-tree tool is available and we can use it
LD_FOR_TARGET='$$r/$(HOST_SUBDIR)/ld/ld-new'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$LD_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $LD_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $LD_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
LD_FOR_TARGET='$(LD)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target lipo""... $ac_c" 1>&6
-echo "configure:6965: checking where to find the target lipo" >&5
+
+echo "$as_me:$LINENO: checking where to find the target lipo" >&5
+echo $ECHO_N "checking where to find the target lipo... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$LIPO_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $LIPO_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $LIPO_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
if expr "x$LIPO_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $LIPO_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $LIPO_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
LIPO_FOR_TARGET='$(LIPO)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target nm""... $ac_c" 1>&6
-echo "configure:6988: checking where to find the target nm" >&5
+
+echo "$as_me:$LINENO: checking where to find the target nm" >&5
+echo $ECHO_N "checking where to find the target nm... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$NM_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $NM_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $NM_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -6999,32 +11227,41 @@ else
*" binutils "*) ;;
*) ok=no ;;
esac
-
+
if test $ok = yes; then
# An in-tree tool is available and we can use it
NM_FOR_TARGET='$$r/$(HOST_SUBDIR)/binutils/nm-new'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$NM_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $NM_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $NM_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
NM_FOR_TARGET='$(NM)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target objdump""... $ac_c" 1>&6
-echo "configure:7021: checking where to find the target objdump" >&5
+
+echo "$as_me:$LINENO: checking where to find the target objdump" >&5
+echo $ECHO_N "checking where to find the target objdump... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$OBJDUMP_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $OBJDUMP_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $OBJDUMP_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -7032,32 +11269,41 @@ else
*" binutils "*) ;;
*) ok=no ;;
esac
-
+
if test $ok = yes; then
# An in-tree tool is available and we can use it
OBJDUMP_FOR_TARGET='$$r/$(HOST_SUBDIR)/binutils/objdump'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$OBJDUMP_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $OBJDUMP_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $OBJDUMP_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
OBJDUMP_FOR_TARGET='$(OBJDUMP)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target ranlib""... $ac_c" 1>&6
-echo "configure:7054: checking where to find the target ranlib" >&5
+
+echo "$as_me:$LINENO: checking where to find the target ranlib" >&5
+echo $ECHO_N "checking where to find the target ranlib... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$RANLIB_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $RANLIB_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $RANLIB_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -7065,32 +11311,41 @@ else
*" binutils "*) ;;
*) ok=no ;;
esac
-
+
if test $ok = yes; then
# An in-tree tool is available and we can use it
RANLIB_FOR_TARGET='$$r/$(HOST_SUBDIR)/binutils/ranlib'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$RANLIB_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $RANLIB_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $RANLIB_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
RANLIB_FOR_TARGET='$(RANLIB)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target strip""... $ac_c" 1>&6
-echo "configure:7087: checking where to find the target strip" >&5
+
+echo "$as_me:$LINENO: checking where to find the target strip" >&5
+echo $ECHO_N "checking where to find the target strip... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$STRIP_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $STRIP_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $STRIP_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -7098,32 +11353,41 @@ else
*" binutils "*) ;;
*) ok=no ;;
esac
-
+
if test $ok = yes; then
# An in-tree tool is available and we can use it
STRIP_FOR_TARGET='$$r/$(HOST_SUBDIR)/binutils/strip'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$STRIP_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $STRIP_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $STRIP_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
STRIP_FOR_TARGET='$(STRIP)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
-echo $ac_n "checking where to find the target windres""... $ac_c" 1>&6
-echo "configure:7120: checking where to find the target windres" >&5
+
+echo "$as_me:$LINENO: checking where to find the target windres" >&5
+echo $ECHO_N "checking where to find the target windres... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$WINDRES_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $WINDRES_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $WINDRES_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
else
ok=yes
@@ -7131,27 +11395,33 @@ else
*" binutils "*) ;;
*) ok=no ;;
esac
-
+
if test $ok = yes; then
# An in-tree tool is available and we can use it
WINDRES_FOR_TARGET='$$r/$(HOST_SUBDIR)/binutils/windres'
- echo "$ac_t""just compiled" 1>&6
+ echo "$as_me:$LINENO: result: just compiled" >&5
+echo "${ECHO_T}just compiled" >&6
elif expr "x$WINDRES_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$ac_t""pre-installed in `dirname $WINDRES_FOR_TARGET`" 1>&6
+ ac_dir=`dirname $WINDRES_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
WINDRES_FOR_TARGET='$(WINDRES)'
- echo "$ac_t""host tool" 1>&6
+ echo "$as_me:$LINENO: result: host tool" >&5
+echo "${ECHO_T}host tool" >&6
else
# We need a cross tool
- echo "$ac_t""pre-installed" 1>&6
+ echo "$as_me:$LINENO: result: pre-installed" >&5
+echo "${ECHO_T}pre-installed" >&6
fi
fi
+
# Certain tools may need extra flags.
AR_FOR_TARGET=${AR_FOR_TARGET}${extra_arflags_for_target}
RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${extra_ranlibflags_for_target}
@@ -7176,17 +11446,17 @@ fi
-echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:7181: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "$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 "$ac_t""$USE_MAINTAINER_MODE" 1>&6
+fi;
+echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
if test "$USE_MAINTAINER_MODE" = yes; then
@@ -7195,7 +11465,7 @@ if test "$USE_MAINTAINER_MODE" = yes; then
else
MAINTAINER_MODE_TRUE='#'
MAINTAINER_MODE_FALSE=
-fi
+fi
MAINT=$MAINTAINER_MODE_TRUE
# ---------------------
@@ -7210,26 +11480,101 @@ case $build in
yes) stage1_cflags="-g -Wa,-J" ;;
*) stage1_cflags="-g -J" ;;
esac ;;
- powerpc-*-darwin*)
- # The spiffy cpp-precomp chokes on some legitimate constructs in GCC
- # sources; use -no-cpp-precomp to get to GNU cpp.
- # Apple's GCC has bugs in designated initializer handling, so disable
- # that too.
- stage1_cflags="-g -no-cpp-precomp -DHAVE_DESIGNATED_INITIALIZERS=0"
- ;;
esac
+# This is aimed to mimic bootstrap with a non-GCC compiler to catch problems.
+if test "$GCC" = yes; then
+ saved_CFLAGS="$CFLAGS"
+
+ # Pass -fkeep-inline-functions for stage 1 if the GCC version supports it.
+ CFLAGS="$CFLAGS -fkeep-inline-functions"
+ echo "$as_me:$LINENO: checking whether -fkeep-inline-functions is supported" >&5
+echo $ECHO_N "checking whether -fkeep-inline-functions is supported... $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. */
+
+#if (__GNUC__ < 3) \
+ || (__GNUC__ == 3 && (__GNUC_MINOR__ < 3 \
+ || (__GNUC_MINOR__ == 3 && __GNUC_PATCHLEVEL__ < 1)))
+#error http://gcc.gnu.org/PR29382
+#endif
+
+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
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; stage1_cflags="$stage1_cflags -fkeep-inline-functions"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+ CFLAGS="$saved_CFLAGS"
+fi
+
+
+
+# Enable --enable-checking in stage1 of the compiler.
+# Check whether --enable-stage1-checking or --disable-stage1-checking was given.
+if test "${enable_stage1_checking+set}" = set; then
+ enableval="$enable_stage1_checking"
+ stage1_checking=--enable-checking=${enable_stage1_checking}
+else
+ if test "x$enable_checking" = xno; then
+ stage1_checking=--enable-checking
+else
+ stage1_checking=--enable-checking${enable_checking+=}$enable_checking
+fi
+fi;
+
# Enable -Werror in bootstrap stage2 and later.
-# Change the default to "no" on release branches.
# Check whether --enable-werror or --disable-werror was given.
if test "${enable_werror+set}" = set; then
enableval="$enable_werror"
- :
+
else
+ if test -d ${srcdir}/gcc && test x"`cat $srcdir/gcc/DEV-PHASE`" = xexperimental; then
enable_werror=yes
+else
+ enable_werror=no
fi
-
+fi;
case ${enable_werror} in
yes) stage2_werror_flag="--enable-werror-always" ;;
*) stage2_werror_flag="" ;;
@@ -7237,13 +11582,14 @@ esac
# Flags needed to enable html installing and building
+
# Check whether --with-datarootdir or --without-datarootdir was given.
if test "${with_datarootdir+set}" = set; then
withval="$with_datarootdir"
datarootdir="\${prefix}/${withval}"
else
datarootdir="\${prefix}/share"
-fi
+fi;
# Check whether --with-docdir or --without-docdir was given.
@@ -7252,7 +11598,16 @@ if test "${with_docdir+set}" = set; then
docdir="\${prefix}/${withval}"
else
docdir="\${datarootdir}/doc"
-fi
+fi;
+
+
+# Check whether --with-pdfdir or --without-pdfdir was given.
+if test "${with_pdfdir+set}" = set; then
+ withval="$with_pdfdir"
+ pdfdir="\${prefix}/${withval}"
+else
+ pdfdir="\${docdir}"
+fi;
# Check whether --with-htmldir or --without-htmldir was given.
@@ -7261,76 +11616,88 @@ if test "${with_htmldir+set}" = set; then
htmldir="\${prefix}/${withval}"
else
htmldir="\${docdir}"
-fi
+fi;
-trap '' 1 2 15
-cat > confcache <<\EOF
+ ac_config_files="$ac_config_files Makefile"
+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. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
+# 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.
#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
#
-EOF
+# `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 \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
+{
+ (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
- echo "updating cache $cache_file"
- cat confcache > $cache_file
+ 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
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
+# 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[ ]*=[^:]*$/d'
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
fi
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
-
# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
@@ -7341,13 +11708,13 @@ trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
cat >confdef2opt.sed <<\_ACEOF
t clear
: clear
-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
t quote
-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
t quote
d
: quote
-s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
+s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
s,\[,\\&,g
s,\],\\&,g
s,\$,$$,g
@@ -7364,286 +11731,918 @@ DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
rm -f confdef2opt.sed
-# Without the "./", some shells look in PATH for config.status.
-: ${CONFIG_STATUS=./config.status}
+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
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
-# Generated automatically by configure.
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${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.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
+# configure, is in config.log if it exists.
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
+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
- case "\$ac_option" in
+ 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
+
+Configuration files:
+$config_files
+
+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)
- echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
- -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.13"
- exit 0 ;;
- -help | --help | --hel | --he | --h)
- echo "\$ac_cs_usage"; exit 0 ;;
- *) echo "\$ac_cs_usage"; exit 1 ;;
+ 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_given_srcdir=$srcdir
-ac_given_INSTALL="$INSTALL"
+ac_configure_extra_args=
-trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@SHELL@%$SHELL%g
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@FFLAGS@%$FFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@host@%$host%g
-s%@host_alias@%$host_alias%g
-s%@host_cpu@%$host_cpu%g
-s%@host_vendor@%$host_vendor%g
-s%@host_os@%$host_os%g
-s%@target@%$target%g
-s%@target_alias@%$target_alias%g
-s%@target_cpu@%$target_cpu%g
-s%@target_vendor@%$target_vendor%g
-s%@target_os@%$target_os%g
-s%@build@%$build%g
-s%@build_alias@%$build_alias%g
-s%@build_cpu@%$build_cpu%g
-s%@build_vendor@%$build_vendor%g
-s%@build_os@%$build_os%g
-s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
-s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
-s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@LN@%$LN%g
-s%@LN_S@%$LN_S%g
-s%@TOPLEVEL_CONFIGURE_ARGUMENTS@%$TOPLEVEL_CONFIGURE_ARGUMENTS%g
-s%@build_subdir@%$build_subdir%g
-s%@host_subdir@%$host_subdir%g
-s%@target_subdir@%$target_subdir%g
-s%@CC@%$CC%g
-s%@GNATBIND@%$GNATBIND%g
-s%@do_compare@%$do_compare%g
-s%@gmplibs@%$gmplibs%g
-s%@gmpinc@%$gmpinc%g
-s%@stage1_languages@%$stage1_languages%g
-s%@SYSROOT_CFLAGS_FOR_TARGET@%$SYSROOT_CFLAGS_FOR_TARGET%g
+_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
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ *) { { 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
+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,@build_noncanonical@,$build_noncanonical,;t t
+s,@host_noncanonical@,$host_noncanonical,;t t
+s,@target_noncanonical@,$target_noncanonical,;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,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@LN@,$LN,;t t
+s,@LN_S@,$LN_S,;t t
+s,@TOPLEVEL_CONFIGURE_ARGUMENTS@,$TOPLEVEL_CONFIGURE_ARGUMENTS,;t t
+s,@build_libsubdir@,$build_libsubdir,;t t
+s,@build_subdir@,$build_subdir,;t t
+s,@host_subdir@,$host_subdir,;t t
+s,@target_subdir@,$target_subdir,;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,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@GNATBIND@,$GNATBIND,;t t
+s,@ac_ct_GNATBIND@,$ac_ct_GNATBIND,;t t
+s,@GNATMAKE@,$GNATMAKE,;t t
+s,@ac_ct_GNATMAKE@,$ac_ct_GNATMAKE,;t t
+s,@do_compare@,$do_compare,;t t
+s,@gmplibs@,$gmplibs,;t t
+s,@gmpinc@,$gmpinc,;t t
+s,@stage1_languages@,$stage1_languages,;t t
+s,@SYSROOT_CFLAGS_FOR_TARGET@,$SYSROOT_CFLAGS_FOR_TARGET,;t t
+s,@RPATH_ENVVAR@,$RPATH_ENVVAR,;t t
+s,@tooldir@,$tooldir,;t t
+s,@build_tooldir@,$build_tooldir,;t t
+s,@CONFIGURE_GDB_TK@,$CONFIGURE_GDB_TK,;t t
+s,@GDB_TK@,$GDB_TK,;t t
+s,@INSTALL_GDB_TK@,$INSTALL_GDB_TK,;t t
+s,@build_configargs@,$build_configargs,;t t
+s,@build_configdirs@,$build_configdirs,;t t
+s,@host_configargs@,$host_configargs,;t t
+s,@configdirs@,$configdirs,;t t
+s,@target_configargs@,$target_configargs,;t t
+s,@CC_FOR_BUILD@,$CC_FOR_BUILD,;t t
+s,@config_shell@,$config_shell,;t t
+s,@YACC@,$YACC,;t t
+s,@BISON@,$BISON,;t t
+s,@M4@,$M4,;t t
+s,@LEX@,$LEX,;t t
+s,@FLEX@,$FLEX,;t t
+s,@MAKEINFO@,$MAKEINFO,;t t
+s,@EXPECT@,$EXPECT,;t t
+s,@RUNTEST@,$RUNTEST,;t t
+s,@AR@,$AR,;t t
+s,@AS@,$AS,;t t
+s,@DLLTOOL@,$DLLTOOL,;t t
+s,@LD@,$LD,;t t
+s,@LIPO@,$LIPO,;t t
+s,@NM@,$NM,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@STRIP@,$STRIP,;t t
+s,@WINDRES@,$WINDRES,;t t
+s,@OBJCOPY@,$OBJCOPY,;t t
+s,@OBJDUMP@,$OBJDUMP,;t t
+s,@CFLAGS_FOR_BUILD@,$CFLAGS_FOR_BUILD,;t t
+s,@CC_FOR_TARGET@,$CC_FOR_TARGET,;t t
+s,@CXX_FOR_TARGET@,$CXX_FOR_TARGET,;t t
+s,@GCC_FOR_TARGET@,$GCC_FOR_TARGET,;t t
+s,@GCJ_FOR_TARGET@,$GCJ_FOR_TARGET,;t t
+s,@GFORTRAN_FOR_TARGET@,$GFORTRAN_FOR_TARGET,;t t
+s,@AR_FOR_TARGET@,$AR_FOR_TARGET,;t t
+s,@AS_FOR_TARGET@,$AS_FOR_TARGET,;t t
+s,@DLLTOOL_FOR_TARGET@,$DLLTOOL_FOR_TARGET,;t t
+s,@LD_FOR_TARGET@,$LD_FOR_TARGET,;t t
+s,@LIPO_FOR_TARGET@,$LIPO_FOR_TARGET,;t t
+s,@NM_FOR_TARGET@,$NM_FOR_TARGET,;t t
+s,@OBJDUMP_FOR_TARGET@,$OBJDUMP_FOR_TARGET,;t t
+s,@RANLIB_FOR_TARGET@,$RANLIB_FOR_TARGET,;t t
+s,@STRIP_FOR_TARGET@,$STRIP_FOR_TARGET,;t t
+s,@WINDRES_FOR_TARGET@,$WINDRES_FOR_TARGET,;t t
+s,@RAW_CXX_FOR_TARGET@,$RAW_CXX_FOR_TARGET,;t t
+s,@FLAGS_FOR_TARGET@,$FLAGS_FOR_TARGET,;t t
+s,@COMPILER_AS_FOR_TARGET@,$COMPILER_AS_FOR_TARGET,;t t
+s,@COMPILER_LD_FOR_TARGET@,$COMPILER_LD_FOR_TARGET,;t t
+s,@COMPILER_NM_FOR_TARGET@,$COMPILER_NM_FOR_TARGET,;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,@stage1_cflags@,$stage1_cflags,;t t
+s,@stage1_checking@,$stage1_checking,;t t
+s,@stage2_werror_flag@,$stage2_werror_flag,;t t
+s,@datarootdir@,$datarootdir,;t t
+s,@docdir@,$docdir,;t t
+s,@pdfdir@,$pdfdir,;t t
+s,@htmldir@,$htmldir,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
/@serialization_dependencies@/r $serialization_dependencies
-s%@serialization_dependencies@%%g
+s,@serialization_dependencies@,,;t t
/@host_makefile_frag@/r $host_makefile_frag
-s%@host_makefile_frag@%%g
+s,@host_makefile_frag@,,;t t
/@target_makefile_frag@/r $target_makefile_frag
-s%@target_makefile_frag@%%g
+s,@target_makefile_frag@,,;t t
/@alphaieee_frag@/r $alphaieee_frag
-s%@alphaieee_frag@%%g
+s,@alphaieee_frag@,,;t t
/@ospace_frag@/r $ospace_frag
-s%@ospace_frag@%%g
-s%@RPATH_ENVVAR@%$RPATH_ENVVAR%g
-s%@tooldir@%$tooldir%g
-s%@build_tooldir@%$build_tooldir%g
-s%@CONFIGURE_GDB_TK@%$CONFIGURE_GDB_TK%g
-s%@GDB_TK@%$GDB_TK%g
-s%@INSTALL_GDB_TK@%$INSTALL_GDB_TK%g
-s%@build_configargs@%$build_configargs%g
-s%@build_configdirs@%$build_configdirs%g
-s%@host_configargs@%$host_configargs%g
-s%@configdirs@%$configdirs%g
-s%@target_configargs@%$target_configargs%g
-s%@CC_FOR_BUILD@%$CC_FOR_BUILD%g
-s%@config_shell@%$config_shell%g
-s%@YACC@%$YACC%g
-s%@BISON@%$BISON%g
-s%@M4@%$M4%g
-s%@LEX@%$LEX%g
-s%@FLEX@%$FLEX%g
-s%@MAKEINFO@%$MAKEINFO%g
-s%@EXPECT@%$EXPECT%g
-s%@RUNTEST@%$RUNTEST%g
-s%@AR@%$AR%g
-s%@AS@%$AS%g
-s%@DLLTOOL@%$DLLTOOL%g
-s%@LD@%$LD%g
-s%@LIPO@%$LIPO%g
-s%@NM@%$NM%g
-s%@RANLIB@%$RANLIB%g
-s%@STRIP@%$STRIP%g
-s%@WINDRES@%$WINDRES%g
-s%@OBJCOPY@%$OBJCOPY%g
-s%@OBJDUMP@%$OBJDUMP%g
-s%@CXX@%$CXX%g
-s%@CFLAGS_FOR_BUILD@%$CFLAGS_FOR_BUILD%g
-s%@CC_FOR_TARGET@%$CC_FOR_TARGET%g
-s%@CXX_FOR_TARGET@%$CXX_FOR_TARGET%g
-s%@GCC_FOR_TARGET@%$GCC_FOR_TARGET%g
-s%@GCJ_FOR_TARGET@%$GCJ_FOR_TARGET%g
-s%@GFORTRAN_FOR_TARGET@%$GFORTRAN_FOR_TARGET%g
-s%@AR_FOR_TARGET@%$AR_FOR_TARGET%g
-s%@AS_FOR_TARGET@%$AS_FOR_TARGET%g
-s%@DLLTOOL_FOR_TARGET@%$DLLTOOL_FOR_TARGET%g
-s%@LD_FOR_TARGET@%$LD_FOR_TARGET%g
-s%@LIPO_FOR_TARGET@%$LIPO_FOR_TARGET%g
-s%@NM_FOR_TARGET@%$NM_FOR_TARGET%g
-s%@OBJDUMP_FOR_TARGET@%$OBJDUMP_FOR_TARGET%g
-s%@RANLIB_FOR_TARGET@%$RANLIB_FOR_TARGET%g
-s%@STRIP_FOR_TARGET@%$STRIP_FOR_TARGET%g
-s%@WINDRES_FOR_TARGET@%$WINDRES_FOR_TARGET%g
-s%@FLAGS_FOR_TARGET@%$FLAGS_FOR_TARGET%g
-s%@RAW_CXX_FOR_TARGET@%$RAW_CXX_FOR_TARGET%g
-s%@COMPILER_AS_FOR_TARGET@%$COMPILER_AS_FOR_TARGET%g
-s%@COMPILER_LD_FOR_TARGET@%$COMPILER_LD_FOR_TARGET%g
-s%@COMPILER_NM_FOR_TARGET@%$COMPILER_NM_FOR_TARGET%g
-s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g
-s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g
-s%@MAINT@%$MAINT%g
-s%@stage1_cflags@%$stage1_cflags%g
-s%@stage2_werror_flag@%$stage2_werror_flag%g
-s%@datarootdir@%$datarootdir%g
-s%@docdir@%$docdir%g
-s%@htmldir@%$htmldir%g
-
+s,@ospace_frag@,,;t t
CEOF
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-
-# 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_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # 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" conftest.subs > conftest.s$ac_file
- else
- sed "${ac_end}q" conftest.subs > conftest.s$ac_file
- fi
- if test ! -s conftest.s$ac_file; then
- ac_more_lines=false
- rm -f conftest.s$ac_file
- else
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f conftest.s$ac_file"
+_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
- ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
fi
- ac_file=`expr $ac_file + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ 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
-done
-if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
-fi
-EOF
+fi # test -n "$CONFIG_FILES"
-cat >> $CONFIG_STATUS <<EOF
-
-CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+_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
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.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
- # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
- # A "../" for each directory in $ac_dir_suffix.
- ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ # 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
- ac_dir_suffix= ac_dots=
- fi
+ 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=.
- case "$ac_given_srcdir" in
- .) srcdir=.
- if test -z "$ac_dots"; then top_srcdir=.
- else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
- /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+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.
- srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
- top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
- case "$ac_given_INSTALL" in
- [/$]*) INSTALL="$ac_given_INSTALL" ;;
- *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
- 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 creating "$ac_file"
- rm -f "$ac_file"
- configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
- case "$ac_file" in
- *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
- *) ac_comsub= ;;
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
esac
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-s%@INSTALL@%$INSTALL%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
+ 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
-EOF
-cat >> $CONFIG_STATUS <<EOF
+done
+_ACEOF
-EOF
-cat >> $CONFIG_STATUS <<\EOF
+cat >>$CONFIG_STATUS <<\_ACEOF
-exit 0
-EOF
+{ (exit 0); exit 0; }
+_ACEOF
chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+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/configure.ac b/configure.ac
new file mode 100644
index 000000000000..0b4fc3333f83
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,2639 @@
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+# 2001, 2002, 2003, 2004, 2005, 2006, 2007 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.
+
+##############################################################################
+### WARNING: this file contains embedded tabs. Do not run untabify on this file.
+
+sinclude(config/acx.m4)
+
+AC_INIT(move-if-change)
+AC_PREREQ(2.59)
+
+# Find the build, host, and target systems.
+ACX_NONCANONICAL_BUILD
+ACX_NONCANONICAL_HOST
+ACX_NONCANONICAL_TARGET
+
+dnl Autoconf 2.5x and later will set a default program prefix if
+dnl --target was used, even if it was the same as --host. Disable
+dnl that behavior. This must be done before AC_CANONICAL_SYSTEM
+dnl to take effect.
+test "$host_noncanonical" = "$target_noncanonical" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_transform_name=s,y,y,
+
+AC_CANONICAL_SYSTEM
+AC_ARG_PROGRAM
+
+m4_pattern_allow([^AS_FOR_TARGET$])dnl
+
+# Get 'install' or 'install-sh' and its variants.
+AC_PROG_INSTALL
+ACX_PROG_LN
+AC_PROG_LN_S
+
+### we might need to use some other shell than /bin/sh for running subshells
+### If we are on Windows, search for the shell. This will permit people
+### to not have /bin/sh, but to be able to see /SOME/PATH/sh configure
+### without also having to set CONFIG_SHELL. This code will work when
+### using bash, which sets OSTYPE.
+case "${OSTYPE}" in
+*win32*)
+ if test x${CONFIG_SHELL} = x ; then
+ if test ! -f /bin/sh ; then
+ if test x${SHELL} != x && test -f ${SHELL} ; then
+ CONFIG_SHELL=${SHELL}
+ export CONFIG_SHELL
+ else
+ for prog in sh sh.exe bash bash.exe; do
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:"
+ for dir in $PATH; do
+ test -z "$dir" && dir=.
+ if test -f $dir/$prog; then
+ CONFIG_SHELL=$dir/$prog
+ export CONFIG_SHELL
+ break
+ fi
+ done
+ IFS="$save_ifs"
+ test -n "${CONFIG_SHELL}" && break
+ done
+ fi
+ fi
+ fi
+ ;;
+esac
+
+config_shell=${CONFIG_SHELL-/bin/sh}
+
+progname=$0
+# if PWD already has a value, it is probably wrong.
+if test -n "$PWD" ; then PWD=`${PWDCMD-pwd}`; fi
+
+# Export original configure arguments for use by sub-configures.
+# Quote arguments with shell meta charatcers.
+TOPLEVEL_CONFIGURE_ARGUMENTS=
+set -- "$progname" "$@"
+for ac_arg
+do
+ case "$ac_arg" in
+ *" "*|*" "*|*[[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\']]*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
+ # if the argument is of the form -foo=baz, quote the baz part only
+ ac_arg=`echo "'$ac_arg'" | sed "s/^'\([[-a-zA-Z0-9]]*=\)/\\1'/"` ;;
+ *) ;;
+ esac
+ # Add the quoted argument to the list.
+ TOPLEVEL_CONFIGURE_ARGUMENTS="$TOPLEVEL_CONFIGURE_ARGUMENTS $ac_arg"
+done
+# Remove the initial space we just introduced and, as these will be
+# expanded by make, quote '$'.
+TOPLEVEL_CONFIGURE_ARGUMENTS=`echo "x$TOPLEVEL_CONFIGURE_ARGUMENTS" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
+AC_SUBST(TOPLEVEL_CONFIGURE_ARGUMENTS)
+
+moveifchange=${srcdir}/move-if-change
+
+srcpwd=`cd ${srcdir} ; ${PWDCMD-pwd}`
+
+# We pass INSTALL explicitly to sub-makes. Make sure that it is not
+# a relative path.
+if test "$INSTALL" = "${srcdir}/install-sh -c"; then
+ INSTALL="${srcpwd}/install-sh -c"
+fi
+
+# Set srcdir to "." if that's what it is.
+# This is important for multilib support.
+pwd=`${PWDCMD-pwd}`
+if test "${pwd}" = "${srcpwd}" ; then
+ srcdir=.
+fi
+
+topsrcdir=$srcpwd
+
+extra_host_args=
+
+### To add a new directory to the tree, first choose whether it is a target
+### or a host dependent tool. Then put it into the appropriate list
+### (library or tools, host or target), doing a dependency sort.
+
+# Subdirs will be configured in the order listed in build_configdirs,
+# configdirs, or target_configdirs; see the serialization section below.
+
+# Dependency sorting is only needed when *configuration* must be done in
+# a particular order. In all cases a dependency should be specified in
+# the Makefile, whether or not it's implicitly specified here.
+
+# Double entries in build_configdirs, configdirs, or target_configdirs may
+# cause circular dependencies and break everything horribly.
+
+# these library is used by various programs built for the build
+# environment
+#
+build_libs="build-libiberty"
+
+# these tools are built for the build environment
+build_tools="build-texinfo build-byacc build-flex build-bison build-m4 build-fixincludes"
+
+# these libraries are used by various programs built for the host environment
+#
+host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr"
+
+# these tools are built for the host environment
+# Note, the powerpc-eabi build depends on sim occurring before gdb in order to
+# know that we are building the simulator.
+# binutils, gas and ld appear in that order because it makes sense to run
+# "make check" in that particular order.
+host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar gnattools"
+
+# libgcj represents the runtime libraries only used by gcj.
+libgcj="target-libffi \
+ target-zlib \
+ target-qthreads \
+ target-libjava"
+
+# these libraries are built for the target environment, and are built after
+# the host libraries and the host tools (which may be a cross compiler)
+#
+target_libraries="target-libgcc \
+ target-libiberty \
+ target-libgloss \
+ target-newlib \
+ target-libstdc++-v3 \
+ target-libmudflap \
+ target-libssp \
+ target-libgfortran \
+ target-boehm-gc \
+ ${libgcj} \
+ target-libobjc \
+ target-libada \
+ target-libgomp"
+
+# these tools are built using the target libraries, and are intended to
+# run only in the target environment
+#
+# note: any program that *uses* libraries that are in the "target_libraries"
+# list belongs in this list. those programs are also very likely
+# candidates for the "native_only" list which follows
+#
+target_tools="target-examples target-groff target-gperf target-rda"
+
+################################################################################
+
+## All tools belong in one of the four categories, and are assigned above
+## We assign ${configdirs} this way to remove all embedded newlines. This
+## is important because configure will choke if they ever get through.
+## ${configdirs} is directories we build using the host tools.
+## ${target_configdirs} is directories we build using the target tools.
+configdirs=`echo ${host_libs} ${host_tools}`
+target_configdirs=`echo ${target_libraries} ${target_tools}`
+build_configdirs=`echo ${build_libs} ${build_tools}`
+
+################################################################################
+
+srcname="gnu development package"
+
+# This gets set non-empty for some net releases of packages.
+appdirs=""
+
+# Define is_cross_compiler to save on calls to 'test'.
+is_cross_compiler=
+if test x"${host}" = x"${target}" ; then
+ is_cross_compiler=no
+else
+ is_cross_compiler=yes
+fi
+
+# Find the build and target subdir names.
+GCC_TOPLEV_SUBDIRS
+
+# Skipdirs are removed silently.
+skipdirs=
+# Noconfigdirs are removed loudly.
+noconfigdirs=""
+
+use_gnu_ld=
+# Make sure we don't let GNU ld be added if we didn't want it.
+if test x$with_gnu_ld = xno ; then
+ use_gnu_ld=no
+ noconfigdirs="$noconfigdirs ld"
+fi
+
+use_gnu_as=
+# Make sure we don't let GNU as be added if we didn't want it.
+if test x$with_gnu_as = xno ; then
+ use_gnu_as=no
+ noconfigdirs="$noconfigdirs gas"
+fi
+
+# some tools are so dependent upon X11 that if we're not building with X,
+# it's not even worth trying to configure, much less build, that tool.
+
+case ${with_x} in
+ yes | "") ;; # the default value for this tree is that X11 is available
+ no)
+ skipdirs="${skipdirs} tk itcl libgui"
+ # We won't be able to build gdbtk without X.
+ enable_gdbtk=no
+ ;;
+ *) echo "*** bad value \"${with_x}\" for -with-x flag; ignored" 1>&2 ;;
+esac
+
+# Some tools are only suitable for building in a "native" situation.
+# Remove these if host!=target.
+native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf"
+
+# Similarly, some are only suitable for cross toolchains.
+# Remove these if host=target.
+cross_only="target-libgloss target-newlib target-opcodes"
+
+case $is_cross_compiler in
+ no) skipdirs="${skipdirs} ${cross_only}" ;;
+ yes) skipdirs="${skipdirs} ${native_only}" ;;
+esac
+
+# If both --with-headers and --with-libs are specified, default to
+# --without-newlib.
+if test x"${with_headers}" != x && test x"${with_headers}" != xno \
+ && test x"${with_libs}" != x && test x"${with_libs}" != xno ; then
+ if test x"${with_newlib}" = x ; then
+ with_newlib=no
+ fi
+fi
+
+# Recognize --with-newlib/--without-newlib.
+case ${with_newlib} in
+ no) skipdirs="${skipdirs} target-newlib" ;;
+ yes) skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'` ;;
+esac
+
+# Configure extra directories which are host specific
+
+case "${host}" in
+ *-cygwin*)
+ configdirs="$configdirs libtermcap" ;;
+esac
+
+# A target can indicate whether a language isn't supported for some reason.
+# Only spaces may be used in this macro; not newlines or tabs.
+unsupported_languages=
+
+# Remove more programs from consideration, based on the host or
+# target this usually means that a port of the program doesn't
+# exist yet.
+
+case "${host}" in
+ hppa*64*-*-*)
+ noconfigdirs="$noconfigdirs byacc"
+ ;;
+ i[[3456789]]86-*-vsta)
+ noconfigdirs="$noconfigdirs tcl expect dejagnu make texinfo bison patch flex byacc send-pr gprof uudecode dejagnu diff guile perl itcl gnuserv gettext"
+ ;;
+ i[[3456789]]86-*-go32* | i[[3456789]]86-*-msdosdjgpp*)
+ noconfigdirs="$noconfigdirs tcl tk expect dejagnu send-pr uudecode guile itcl gnuserv libffi"
+ ;;
+ x86_64-*-mingw*)
+ noconfigdirs="$noconfigdirs expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool newlib"
+ ;;
+ i[[3456789]]86-*-mingw32*)
+ # noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl itcl gnuserv"
+ noconfigdirs="$noconfigdirs expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool newlib"
+ ;;
+ i[[3456789]]86-*-beos*)
+ noconfigdirs="$noconfigdirs tk itcl libgui gdb"
+ ;;
+ *-*-cygwin*)
+ noconfigdirs="$noconfigdirs autoconf automake send-pr rcs guile perl"
+ ;;
+ *-*-netbsd*)
+ noconfigdirs="$noconfigdirs rcs"
+ ;;
+ ppc*-*-pe)
+ noconfigdirs="$noconfigdirs patch diff make tk tcl expect dejagnu autoconf automake texinfo bison send-pr gprof rcs guile perl itcl gnuserv"
+ ;;
+ powerpc-*-beos*)
+ noconfigdirs="$noconfigdirs tk itcl libgui gdb dejagnu readline"
+ ;;
+esac
+
+
+AC_ARG_ENABLE(libada,
+[ --enable-libada Builds libada directory],
+ENABLE_LIBADA=$enableval,
+ENABLE_LIBADA=yes)
+if test "${ENABLE_LIBADA}" != "yes" ; then
+ noconfigdirs="$noconfigdirs gnattools"
+fi
+
+AC_ARG_ENABLE(libssp,
+[ --enable-libssp Builds libssp directory],
+ENABLE_LIBSSP=$enableval,
+ENABLE_LIBSSP=yes)
+
+# Save it here so that, even in case of --enable-libgcj, if the Java
+# front-end isn't enabled, we still get libgcj disabled.
+libgcj_saved=$libgcj
+case $enable_libgcj in
+yes)
+ # If we reset it here, it won't get added to noconfigdirs in the
+ # target-specific build rules, so it will be forcibly enabled
+ # (unless the Java language itself isn't enabled).
+ libgcj=
+ ;;
+no)
+ # Make sure we get it printed in the list of not supported target libs.
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+esac
+
+
+# Disable libmudflap on some systems.
+if test x$enable_libmudflap = x ; then
+ case "${target}" in
+ *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc* | *-*-uclinux*)
+ # Enable libmudflap by default in GNU and friends.
+ ;;
+ *-*-freebsd*)
+ # Enable libmudflap by default in FreeBSD.
+ ;;
+ *)
+ # Disable it by default everywhere else.
+ noconfigdirs="$noconfigdirs target-libmudflap"
+ ;;
+ esac
+fi
+
+# Disable libgomp on non POSIX hosted systems.
+if test x$enable_libgomp = x ; then
+ # Enable libgomp by default on hosted POSIX systems.
+ case "${target}" in
+ *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
+ ;;
+ *-*-netbsd* | *-*-freebsd* | *-*-openbsd*)
+ ;;
+ *-*-solaris2* | *-*-sysv4* | *-*-irix6* | *-*-osf* | *-*-hpux11*)
+ ;;
+ *-*-darwin* | *-*-aix*)
+ ;;
+ *)
+ noconfigdirs="$noconfigdirs target-libgomp"
+ ;;
+ esac
+fi
+
+
+case "${target}" in
+ *-*-chorusos)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
+ ;;
+ powerpc-*-darwin* | i[[3456789]]86-*-darwin*)
+ noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof"
+ noconfigdirs="$noconfigdirs sim target-rda"
+ ;;
+ *-*-darwin*)
+ noconfigdirs="$noconfigdirs ld gas gdb gprof"
+ noconfigdirs="$noconfigdirs sim target-rda"
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ *-*-freebsd[[12]] | *-*-freebsd[[12]].* | *-*-freebsd*aout*)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
+ ;;
+ *-*-freebsd*)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+ if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
+ && test -f /usr/local/include/gmp.h; then
+ with_gmp=/usr/local
+ fi
+
+ # Skip some stuff that's unsupported on some FreeBSD configurations.
+ case "${target}" in
+ i*86-*-*) ;;
+ alpha*-*-*) ;;
+ *)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ esac
+ ;;
+ *-*-kaos*)
+ # Remove unsupported stuff on all kaOS configurations.
+ skipdirs="target-libiberty ${libgcj} target-libstdc++-v3 target-librx"
+ skipdirs="$skipdirs target-libobjc target-examples target-groff target-gperf"
+ skipdirs="$skipdirs zlib fastjar target-libjava target-boehm-gc target-zlib"
+ noconfigdirs="$noconfigdirs target-libgloss"
+ ;;
+ *-*-netbsd*)
+ # Skip some stuff on all NetBSD configurations.
+ noconfigdirs="$noconfigdirs target-newlib target-libiberty target-libgloss"
+
+ # Skip some stuff that's unsupported on some NetBSD configurations.
+ case "${target}" in
+ i*86-*-netbsdelf*) ;;
+ arm*-*-netbsdelf*) ;;
+ *)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ esac
+ ;;
+ *-*-netware*)
+ noconfigdirs="$noconfigdirs target-newlib target-libiberty target-libgloss ${libgcj} target-libmudflap"
+ ;;
+ *-*-rtems*)
+ noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+ ;;
+ # The tpf target doesn't support gdb yet.
+ *-*-tpf*)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libiberty ${libgcj} target-libmudflap gdb tcl tk libgui itcl"
+ ;;
+ *-*-uclinux*)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss target-rda ${libgcj}"
+ ;;
+ *-*-vxworks*)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libiberty target-libstdc++-v3 ${libgcj}"
+ ;;
+ alpha*-dec-osf*)
+ # ld works, but does not support shared libraries.
+ # newlib is not 64 bit ready. I'm not sure about fileutils.
+ # gas doesn't generate exception information.
+ noconfigdirs="$noconfigdirs gas ld fileutils target-newlib target-libgloss"
+ ;;
+ alpha*-*-*vms*)
+ noconfigdirs="$noconfigdirs gdb ld target-newlib target-libgloss ${libgcj}"
+ ;;
+ alpha*-*-linux*)
+ # newlib is not 64 bit ready
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+ ;;
+ alpha*-*-*)
+ # newlib is not 64 bit ready
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
+ ;;
+ am33_2.0-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+ sh-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+ sh*-*-pe|mips*-*-pe|*arm-wince-pe)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ noconfigdirs="$noconfigdirs target-examples"
+ noconfigdirs="$noconfigdirs target-libiberty texinfo send-pr"
+ noconfigdirs="$noconfigdirs tcl tk itcl libgui sim"
+ noconfigdirs="$noconfigdirs expect dejagnu"
+ # the C++ libraries don't build on top of CE's C libraries
+ noconfigdirs="$noconfigdirs target-libstdc++-v3"
+ noconfigdirs="$noconfigdirs target-newlib"
+ case "${host}" in
+ *-*-cygwin*) ;; # keep gdb and readline
+ *) noconfigdirs="$noconfigdirs gdb readline"
+ ;;
+ esac
+ ;;
+ arc-*-*)
+ noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+ ;;
+ arm-semi-aof )
+ ;;
+ arm-*-coff | strongarm-*-coff | xscale-*-coff)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ ;;
+ arm*-*-linux-gnueabi)
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ noconfigdirs="$noconfigdirs target-libjava target-libobjc"
+ case ${with_newlib} in
+ no) noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+ esac
+ ;;
+ arm*-*-symbianelf*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-libiberty"
+ ;;
+ arm-*-pe*)
+ noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+ ;;
+ thumb-*-coff)
+ noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+ ;;
+ thumb-*-elf)
+ noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+ ;;
+ thumb-*-pe)
+ noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+ ;;
+ arm-*-riscix*)
+ noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
+ ;;
+ avr-*-*)
+ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
+ ;;
+ bfin-*-*)
+ noconfigdirs="$noconfigdirs gdb"
+ if test x${is_cross_compiler} != xno ; then
+ target_configdirs="${target_configdirs} target-bsp target-cygmon"
+ fi
+ ;;
+ c4x-*-* | tic4x-*-*)
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
+ ;;
+ c54x*-*-* | tic54x-*-*)
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} gcc gdb newlib"
+ ;;
+ cris-*-* | crisv32-*-*)
+ unsupported_languages="$unsupported_languages java"
+ case "${target}" in
+ *-*-aout)
+ unsupported_languages="$unsupported_languages fortran"
+ noconfigdirs="$noconfigdirs target-libffi target-boehm-gc";;
+ *-*-elf)
+ unsupported_languages="$unsupported_languages fortran"
+ noconfigdirs="$noconfigdirs target-boehm-gc";;
+ *-*-linux*)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss";;
+ *)
+ unsupported_languages="$unsupported_languages fortran"
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss";;
+ esac
+ ;;
+ crx-*-*)
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-mudflap ${libgcj}"
+ ;;
+ d10v-*-*)
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
+ ;;
+ d30v-*-*)
+ noconfigdirs="$noconfigdirs ${libgcj} gdb"
+ ;;
+ fr30-*-elf*)
+ noconfigdirs="$noconfigdirs ${libgcj} gdb"
+ ;;
+ frv-*-*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ h8300*-*-*)
+ noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+ ;;
+ h8500-*-*)
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
+ ;;
+ hppa1.1-*-osf* | hppa1.1-*-bsd* )
+ ;;
+ hppa*64*-*-linux* | parisc*64*-*-linux*)
+ # In this case, it's because the hppa64-linux target is for
+ # the kernel only at this point and has no libc, and thus no
+ # headers, crt*.o, etc., all of which are needed by these.
+ noconfigdirs="$noconfigdirs target-zlib"
+ ;;
+ parisc*-*-linux* | hppa*-*-linux*)
+ ;;
+ hppa*-*-*elf* | \
+ hppa*-*-lites* | \
+ hppa*-*-openbsd* | \
+ hppa*64*-*-*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ hppa*-hp-hpux11*)
+ noconfigdirs="$noconfigdirs ld shellutils"
+ ;;
+ hppa*-*-*)
+ # According to Alexandre Oliva <aoliva@redhat.com>, libjava won't
+ # build on HP-UX 10.20.
+ noconfigdirs="$noconfigdirs ld shellutils ${libgcj}"
+ ;;
+ i960-*-*)
+ noconfigdirs="$noconfigdirs ${libgcj} gdb"
+ ;;
+ ia64*-*-elf*)
+ # No gdb support yet.
+ noconfigdirs="$noconfigdirs readline mmalloc libgui itcl gdb"
+ ;;
+ ia64*-**-hpux*)
+ # No gdb or ld support yet.
+ noconfigdirs="$noconfigdirs ${libgcj} readline mmalloc libgui itcl gdb ld"
+ ;;
+ i370-*-opened*)
+ ;;
+ i[[3456789]]86-*-coff | i[[3456789]]86-*-elf)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ i[[3456789]]86-*-linux*)
+ # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+ # not build java stuff by default.
+ case "${target}" in
+ *-*-*libc1*)
+ noconfigdirs="$noconfigdirs ${libgcj}";;
+ esac
+
+ # This section makes it possible to build newlib natively on linux.
+ # If we are using a cross compiler then don't configure newlib.
+ if test x${is_cross_compiler} != xno ; then
+ noconfigdirs="$noconfigdirs target-newlib"
+ fi
+ noconfigdirs="$noconfigdirs target-libgloss"
+ # If we are not using a cross compiler, do configure newlib.
+ # Note however, that newlib will only be configured in this situation
+ # if the --with-newlib option has been given, because otherwise
+ # 'target-newlib' will appear in skipdirs.
+ ;;
+ i[[3456789]]86-*-mingw32*)
+ target_configdirs="$target_configdirs target-winsup"
+ noconfigdirs="$noconfigdirs expect target-libgloss target-newlib ${libgcj}"
+ ;;
+ x86_64-*-mingw*)
+ target_configdirs="$target_configdirs target-winsup"
+ noconfigdirs="$noconfigdirs expect target-libgloss target-newlib ${libgcj}"
+ ;;
+ *-*-cygwin*)
+ target_configdirs="$target_configdirs target-libtermcap target-winsup"
+ noconfigdirs="$noconfigdirs target-gperf target-libgloss ${libgcj}"
+ # always build newlib if winsup directory is present.
+ if test -d "$srcdir/winsup/cygwin"; then
+ skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
+ elif test -d "$srcdir/newlib"; then
+ echo "Warning: winsup/cygwin is missing so newlib can't be built."
+ fi
+ ;;
+ i[[3456789]]86-moss-msdos | i[[3456789]]86-*-moss* | \
+ i[[3456789]]86-*-uwin* | i[[3456789]]86-*-interix* )
+ ;;
+ i[[3456789]]86-*-pe)
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
+ ;;
+ i[[3456789]]86-*-sco3.2v5*)
+ # The linker does not yet know about weak symbols in COFF,
+ # and is not configured to handle mixed ELF and COFF.
+ noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
+ ;;
+ i[[3456789]]86-*-sco*)
+ noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
+ ;;
+ i[[3456789]]86-*-solaris2*)
+ noconfigdirs="$noconfigdirs target-libgloss"
+ ;;
+ i[[3456789]]86-*-sysv4*)
+ noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+ ;;
+ i[[3456789]]86-*-beos*)
+ noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
+ ;;
+ i[[3456789]]86-*-rdos*)
+ noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss"
+ ;;
+ m32r-*-*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
+ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
+ ;;
+ m68k-*-elf*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ m68k-*-coff*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ mcore-*-pe*)
+ # The EPOC C++ environment does not support exceptions or rtti,
+ # and so building libstdc++-v3 tends not to always work.
+ noconfigdirs="$noconfigdirs target-libstdc++-v3"
+ ;;
+ mmix-*-*)
+ noconfigdirs="$noconfigdirs target-libffi target-boehm-gc gdb libgloss"
+ unsupported_languages="$unsupported_languages fortran java"
+ ;;
+ mn10200-*-*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ mn10300-*-*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ mt-*-*)
+ noconfigdirs="$noconfigdirs sim"
+ ;;
+ powerpc-*-aix*)
+ # copied from rs6000-*-* entry
+ noconfigdirs="$noconfigdirs gprof target-libgloss target-libssp ${libgcj}"
+ ;;
+ powerpc*-*-winnt* | powerpc*-*-pe* | ppc*-*-pe)
+ target_configdirs="$target_configdirs target-winsup"
+ noconfigdirs="$noconfigdirs gdb tcl tk make expect target-libgloss itcl gnuserv ${libgcj}"
+ # always build newlib.
+ skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
+ ;;
+ # This is temporary until we can link against shared libraries
+ powerpcle-*-solaris*)
+ noconfigdirs="$noconfigdirs gdb sim make tcl tk expect itcl gnuserv ${libgcj}"
+ ;;
+ powerpc-*-beos*)
+ noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
+ ;;
+ powerpc-*-eabi)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ powerpc-*-eabi* | powerpcle-*-eabi* | powerpc-*-rtems* )
+ ;;
+ rs6000-*-lynxos*)
+ noconfigdirs="$noconfigdirs target-newlib gprof ${libgcj}"
+ ;;
+ rs6000-*-aix*)
+ noconfigdirs="$noconfigdirs gprof target-libgloss target-libssp ${libgcj}"
+ ;;
+ rs6000-*-*)
+ noconfigdirs="$noconfigdirs gprof ${libgcj}"
+ ;;
+ m68k-apollo-*)
+ noconfigdirs="$noconfigdirs ld binutils gprof target-libgloss ${libgcj}"
+ ;;
+ mips*-*-irix5*)
+ noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
+ ;;
+ mips*-*-irix6*)
+ # Linking libjava exceeds command-line length limits on at least
+ # IRIX 6.2, but not on IRIX 6.5.
+ # Also, boehm-gc won't build on IRIX 6.5, according to Jeffrey Oldham
+ # <oldham@codesourcery.com>
+ noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
+ ;;
+ mips*-*-bsd*)
+ noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
+ ;;
+ mips64*-*-linux*)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
+ ;;
+ mips*-*-linux*)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+ ;;
+ mips*-*-*)
+ noconfigdirs="$noconfigdirs gprof ${libgcj}"
+ ;;
+ romp-*-*)
+ noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
+ ;;
+ sh-*-* | sh64-*-*)
+ case "${host}" in
+ i[[3456789]]86-*-vsta) ;; # don't add gprof back in
+ i[[3456789]]86-*-go32*) ;; # don't add gprof back in
+ i[[3456789]]86-*-msdosdjgpp*) ;; # don't add gprof back in
+ *) skipdirs=`echo " ${skipdirs} " | sed -e 's/ gprof / /'` ;;
+ esac
+ noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+ ;;
+ sparc-*-elf*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ sparc64-*-elf*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ sparclite-*-*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ sparc-*-sunos4*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ if test x${is_cross_compiler} != xno ; then
+ noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss"
+ else
+ use_gnu_ld=no
+ fi
+ ;;
+ sparc-*-solaris2.[[0-6]] | sparc-*-solaris2.[[0-6]].*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ sparc-*-solaris* | sparc64-*-solaris* | sparcv9-*-solaris*)
+ ;;
+ spu-*-*)
+ skipdirs="target-libssp"
+ ;;
+ v810-*-*)
+ noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld target-libstdc++-v3 opcodes target-libgloss ${libgcj}"
+ ;;
+ v850-*-*)
+ noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+ ;;
+ v850e-*-*)
+ noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+ ;;
+ v850ea-*-*)
+ noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+ ;;
+ vax-*-vms)
+ noconfigdirs="$noconfigdirs bfd binutils gdb ld target-newlib opcodes target-libgloss ${libgcj}"
+ ;;
+ vax-*-*)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
+ ;;
+ xtensa-*-*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+ ip2k-*-*)
+ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
+ ;;
+ *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+ ;;
+ *-*-lynxos*)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
+ ;;
+ *-*-*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+esac
+
+# If we aren't building newlib, then don't build libgloss, since libgloss
+# depends upon some newlib header files.
+case "${noconfigdirs}" in
+ *target-libgloss*) ;;
+ *target-newlib*) noconfigdirs="$noconfigdirs target-libgloss" ;;
+esac
+
+# Work in distributions that contain no compiler tools, like Autoconf.
+tentative_cc=""
+host_makefile_frag=/dev/null
+if test -d ${srcdir}/config ; then
+case "${host}" in
+ m68k-hp-hpux*)
+ # Avoid "too much defining" errors from HPUX compiler.
+ tentative_cc="cc -Wp,-H256000"
+ # If "ar" in $PATH is GNU ar, the symbol table may need rebuilding.
+ # If it's HP/UX ar, this should be harmless.
+ RANLIB="ar ts"
+ ;;
+ m68k-apollo-sysv*)
+ tentative_cc="cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DUSG"
+ ;;
+ m68k-apollo-bsd*)
+ #None of the Apollo compilers can compile gas or binutils. The preprocessor
+ # chokes on bfd, the compiler won't let you assign integers to enums, and
+ # other problems. Defining CC to gcc is a questionable way to say "don't use
+ # the apollo compiler" (the preferred version of GCC could be called cc,
+ # or whatever), but I'm not sure leaving CC as cc is any better...
+ #CC=cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DNO_STDARG
+ # Used to have BISON=yacc.
+ tentative_cc=gcc
+ ;;
+ m88k-dg-dgux*)
+ tentative_cc="gcc -Wall -ansi -D__using_DGUX"
+ ;;
+ m88k-harris-cxux*)
+ # Under CX/UX, we want to tell the compiler to use ANSI mode.
+ tentative_cc="cc -Xa"
+ host_makefile_frag="config/mh-cxux"
+ ;;
+ m88k-motorola-sysv*)
+ ;;
+ mips*-dec-ultrix*)
+ tentative_cc="cc -Wf,-XNg1000"
+ host_makefile_frag="config/mh-decstation"
+ ;;
+ mips*-nec-sysv4*)
+ # The C compiler on NEC MIPS SVR4 needs bigger tables.
+ tentative_cc="cc -ZXNd=5000 -ZXNg=1000"
+ host_makefile_frag="config/mh-necv4"
+ ;;
+ mips*-sgi-irix4*)
+ # Tell compiler to use K&R C. We can't compile under the SGI Ansi
+ # environment. Also bump switch table size so that cp-parse will
+ # compile. Bump string length limit so linker builds.
+ tentative_cc="cc -cckr -Wf,-XNg1500 -Wf,-XNk1000 -Wf,-XNh2000 -Wf,-XNl8192"
+ ;;
+ mips*-*-sysv4*)
+ host_makefile_frag="config/mh-sysv4"
+ ;;
+ mips*-*-sysv*)
+ # This is for a MIPS running RISC/os 4.52C.
+
+ # This is needed for GDB, but needs to be in the top-level make because
+ # if a library is compiled with the bsd headers and gets linked with the
+ # sysv system libraries all hell can break loose (e.g. a jmp_buf might be
+ # a different size).
+ # ptrace(2) apparently has problems in the BSD environment. No workaround is
+ # known except to select the sysv environment. Could we use /proc instead?
+ # These "sysv environments" and "bsd environments" often end up being a pain.
+ #
+ # This is not part of CFLAGS because perhaps not all C compilers have this
+ # option.
+ tentative_cc="cc -systype sysv"
+ ;;
+ i370-ibm-opened*)
+ tentative_cc="c89"
+ ;;
+ i[[3456789]]86-*-sysv5*)
+ host_makefile_frag="config/mh-sysv5"
+ ;;
+ i[[3456789]]86-*-dgux*)
+ tentative_cc="gcc -Wall -ansi -D__using_DGUX"
+ host_makefile_frag="config/mh-dgux386"
+ ;;
+ i[[3456789]]86-ncr-sysv4.3*)
+ # The MetaWare compiler will generate a copyright message unless you
+ # turn it off by adding the -Hnocopyr flag.
+ tentative_cc="cc -Hnocopyr"
+ ;;
+ i[[3456789]]86-ncr-sysv4*)
+ # for an NCR 3000 (i486/SVR4) system.
+ # The NCR 3000 ships with a MetaWare compiler installed as /bin/cc.
+ # This compiler not only emits obnoxious copyright messages every time
+ # you run it, but it chokes and dies on a whole bunch of GNU source
+ # files. Default to using the AT&T compiler installed in /usr/ccs/ATT/cc.
+ tentative_cc="/usr/ccs/ATT/cc"
+ host_makefile_frag="config/mh-ncr3000"
+ ;;
+ i[[3456789]]86-*-sco3.2v5*)
+ ;;
+ i[[3456789]]86-*-sco*)
+ # The native C compiler botches some simple uses of const. Unfortunately,
+ # it doesn't defined anything like "__sco__" for us to test for in ansidecl.h.
+ tentative_cc="cc -Dconst="
+ host_makefile_frag="config/mh-sco"
+ ;;
+ i[[3456789]]86-*-udk*)
+ host_makefile_frag="config/mh-sysv5"
+ ;;
+ i[[3456789]]86-*-solaris2*)
+ host_makefile_frag="config/mh-sysv4"
+ ;;
+ i[[3456789]]86-*-msdosdjgpp*)
+ host_makefile_frag="config/mh-djgpp"
+ ;;
+ *-cygwin*)
+ host_makefile_frag="config/mh-cygwin"
+ ;;
+ *-mingw32*)
+ ;;
+ *-mingw64*)
+ ;;
+ *-interix*)
+ host_makefile_frag="config/mh-interix"
+ ;;
+ vax-*-ultrix2*)
+ # The old BSD pcc isn't up to compiling parts of gdb so use gcc
+ tentative_cc=gcc
+ ;;
+ *-*-solaris2*)
+ host_makefile_frag="config/mh-solaris"
+ ;;
+ m68k-sun-sunos*)
+ # Sun's C compiler needs the -J flag to be able to compile cp-parse.c
+ # without overflowing the jump tables (-J says to use a 32 bit table)
+ tentative_cc="cc -J"
+ ;;
+ *-hp-hpux*)
+ tentative_cc="cc -Wp,-H256000"
+ ;;
+ *-*-hiux*)
+ tentative_cc="cc -Wp,-H256000"
+ ;;
+ rs6000-*-lynxos*)
+ # /bin/cc is less than useful for our purposes. Always use GCC
+ tentative_cc="/usr/cygnus/progressive/bin/gcc"
+ host_makefile_frag="config/mh-lynxrs6k"
+ ;;
+ powerpc-*-darwin*)
+ host_makefile_frag="config/mh-ppc-darwin"
+ ;;
+ powerpc-*-aix*)
+ host_makefile_frag="config/mh-ppc-aix"
+ ;;
+ rs6000-*-aix*)
+ host_makefile_frag="config/mh-ppc-aix"
+ ;;
+ *-*-lynxos*)
+ # /bin/cc is less than useful for our purposes. Always use GCC
+ tentative_cc="/bin/gcc"
+ ;;
+ *-*-sysv4*)
+ host_makefile_frag="config/mh-sysv4"
+ ;;
+ # This is placed last to prevent interfering with the cases above.
+ i[[3456789]]86-*-*)
+ # Build the stage2 and stage3 compilers with -fomit-frame-pointer.
+ host_makefile_frag="config/mh-x86omitfp"
+ ;;
+esac
+fi
+
+# If we aren't going to be using gcc, see if we can extract a definition
+# of CC from the fragment.
+# Actually, use the 'pre-extracted' version above.
+if test -z "${CC}" && test "${build}" = "${host}" ; then
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:"
+ found=
+ for dir in $PATH; do
+ test -z "$dir" && dir=.
+ if test -f $dir/gcc; then
+ found=yes
+ break
+ fi
+ done
+ IFS="$save_ifs"
+ if test -z "${found}" && test -n "${tentative_cc}" ; then
+ CC=$tentative_cc
+ fi
+fi
+
+if test "${build}" != "${host}" ; then
+ CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
+else
+ CC_FOR_BUILD="\$(CC)"
+fi
+
+AC_PROG_CC
+AC_PROG_CXX
+
+# We must set the default linker to the linker used by gcc for the correct
+# operation of libtool. If LD is not defined and we are using gcc, try to
+# set the LD default to the ld used by gcc.
+if test -z "$LD"; then
+ if test "$GCC" = yes; then
+ case $build in
+ *-*-mingw*)
+ gcc_prog_ld=`$CC -print-prog-name=ld 2>&1 | tr -d '\015'` ;;
+ *)
+ gcc_prog_ld=`$CC -print-prog-name=ld 2>&1` ;;
+ esac
+ case $gcc_prog_ld in
+ # Accept absolute paths.
+ [[\\/]* | [A-Za-z]:[\\/]*)]
+ LD="$gcc_prog_ld" ;;
+ esac
+ fi
+fi
+
+ACX_PROG_GNAT
+ACX_PROG_CMP_IGNORE_INITIAL
+
+# Check for GMP and MPFR
+gmplibs="-lmpfr -lgmp"
+gmpinc=
+have_gmp=no
+
+# Specify a location for mpfr
+# check for this first so it ends up on the link line before gmp.
+AC_ARG_WITH(mpfr-dir, [ --with-mpfr-dir=PATH This option has been REMOVED],
+ AC_MSG_ERROR([The --with-mpfr-dir=PATH option has been removed.
+Use --with-mpfr=PATH or --with-mpfr-include=PATH plus --with-mpfr-lib=PATH]))
+
+AC_ARG_WITH(mpfr, [ --with-mpfr=PATH Specify prefix directory for installed MPFR package
+ Equivalent to --with-mpfr-include=PATH/include
+ plus --with-mpfr-lib=PATH/lib])
+AC_ARG_WITH(mpfr_include, [ --with-mpfr-include=PATH
+ Specify directory for installed MPFR include files])
+AC_ARG_WITH(mpfr_lib, [ --with-mpfr-lib=PATH Specify the directory for the installed MPFR library])
+
+if test "x$with_mpfr" != x; then
+ gmplibs="-L$with_mpfr/lib $gmplibs"
+ gmpinc="-I$with_mpfr/include"
+fi
+if test "x$with_mpfr_include" != x; then
+ gmpinc="-I$with_mpfr_include"
+fi
+if test "x$with_mpfr_lib" != x; then
+ gmplibs="-L$with_mpfr_lib $gmplibs"
+fi
+if test "x$with_mpfr$with_mpfr_include$with_mpfr_lib" = x && test -d ${srcdir}/mpfr; then
+ gmplibs='-L$$r/$(HOST_SUBDIR)/mpfr/.libs -L$$r/$(HOST_SUBDIR)/mpfr/_libs '"$gmplibs"
+ gmpinc='-I$$r/$(HOST_SUBDIR)/mpfr -I$$s/mpfr '"$gmpinc"
+ # Do not test the mpfr version. Assume that it is sufficient, since
+ # it is in the source tree, and the library has not been built yet
+ # but it would be included on the link line in the version check below
+ # hence making the test fail.
+ have_gmp=yes
+fi
+
+# Specify a location for gmp
+AC_ARG_WITH(gmp-dir, [ --with-gmp-dir=PATH This option has been REMOVED],
+ AC_MSG_ERROR([The --with-gmp-dir=PATH option has been removed.
+Use --with-gmp=PATH or --with-gmp-include=PATH plus --with-gmp-lib=PATH]))
+
+AC_ARG_WITH(gmp, [ --with-gmp=PATH Specify prefix directory for the installed GMP package
+ Equivalent to --with-gmp-include=PATH/include
+ plus --with-gmp-lib=PATH/lib])
+AC_ARG_WITH(gmp_include, [ --with-gmp-include=PATH Specify directory for installed GMP include files])
+AC_ARG_WITH(gmp_lib, [ --with-gmp-lib=PATH Specify the directory for the installed GMP library])
+
+
+if test "x$with_gmp" != x; then
+ gmplibs="-L$with_gmp/lib $gmplibs"
+ gmpinc="-I$with_gmp/include $gmpinc"
+fi
+if test "x$with_gmp_include" != x; then
+ gmpinc="-I$with_gmp_include $gmpinc"
+fi
+if test "x$with_gmp_lib" != x; then
+ gmplibs="-L$with_gmp_lib $gmplibs"
+fi
+if test "x$with_gmp$with_gmp_include$with_gmp_lib" = x && test -d ${srcdir}/gmp; then
+ gmplibs='-L$$r/$(HOST_SUBDIR)/gmp/.libs -L$$r/$(HOST_SUBDIR)/gmp/_libs '"$gmplibs"
+ gmpinc='-I$$r/$(HOST_SUBDIR)/gmp -I$$s/gmp '"$gmpinc"
+ # Do not test the gmp version. Assume that it is sufficient, since
+ # it is in the source tree, and the library has not been built yet
+ # but it would be included on the link line in the version check below
+ # hence making the test fail.
+ have_gmp=yes
+fi
+
+if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then
+ have_gmp=yes
+ saved_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $gmpinc"
+ # Check GMP actually works
+ AC_MSG_CHECKING([for correct version of gmp.h])
+ AC_TRY_COMPILE([#include "gmp.h"],[
+ #if __GNU_MP_VERSION < 4 || (__GNU_MP_VERSION == 4 && __GNU_MP_VERSION_MINOR < 1)
+ choke me
+ #endif
+ ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); have_gmp=no])
+
+ if test x"$have_gmp" = xyes; then
+ saved_LIBS="$LIBS"
+ LIBS="$LIBS $gmplibs"
+ dnl MPFR 2.2.0 is acceptable but buggy, MPFR 2.2.1 is better.
+ AC_MSG_CHECKING([for correct version of mpfr.h])
+ AC_TRY_LINK([#include <gmp.h>
+ #include <mpfr.h>],[
+ #if MPFR_VERSION < MPFR_VERSION_NUM(2,2,0)
+ choke me
+ #endif
+ mpfr_t n;
+ mpfr_t x;
+ int t;
+ mpfr_init (n);
+ mpfr_init (x);
+ mpfr_atan2 (n, n, x, GMP_RNDN);
+ mpfr_erfc (n, x, GMP_RNDN);
+ mpfr_subnormalize (x, t, GMP_RNDN);
+ ], [AC_TRY_LINK([#include <gmp.h>
+ #include <mpfr.h>],[
+ #if MPFR_VERSION < MPFR_VERSION_NUM(2,2,1)
+ choke me
+ #endif
+ mpfr_t n; mpfr_init(n);
+ ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([buggy but acceptable])])],
+ [AC_MSG_RESULT([no]); have_gmp=no])
+ LIBS="$saved_LIBS"
+ fi
+ CFLAGS="$saved_CFLAGS"
+
+ if test x$have_gmp != xyes; then
+ AC_MSG_ERROR([Building GCC requires GMP 4.1+ and MPFR 2.2.1+.
+Try the --with-gmp and/or --with-mpfr options to specify their locations.
+Copies of these libraries' source code can be found at their respective
+hosting sites as well as at ftp://gcc.gnu.org/pub/gcc/infrastructure/.
+See also http://gcc.gnu.org/install/prerequisites.html for additional info.
+If you obtained GMP and/or MPFR from a vendor distribution package, make
+sure that you have installed both the libraries and the header files.
+They may be located in separate packages.])
+ fi
+fi
+
+# Flags needed for both GMP and/or MPFR
+AC_SUBST(gmplibs)
+AC_SUBST(gmpinc)
+
+# By default, C is the only stage 1 language.
+stage1_languages=,c,
+
+# Figure out what language subdirectories are present.
+# Look if the user specified --enable-languages="..."; if not, use
+# the environment variable $LANGUAGES if defined. $LANGUAGES might
+# go away some day.
+# NB: embedded tabs in this IF block -- do not untabify
+if test -d ${srcdir}/gcc; then
+ if test x"${enable_languages+set}" != xset; then
+ if test x"${LANGUAGES+set}" = xset; then
+ enable_languages="${LANGUAGES}"
+ echo configure.in: warning: setting LANGUAGES is deprecated, use --enable-languages instead 1>&2
+ else
+ enable_languages=all
+ fi
+ else
+ if test x"${enable_languages}" = x ||
+ test x"${enable_languages}" = xyes;
+ then
+ echo configure.in: --enable-languages needs at least one language argument 1>&2
+ exit 1
+ fi
+ fi
+ enable_languages=`echo "${enable_languages}" | sed -e 's/[[ ,]][[ ,]]*/,/g' -e 's/,$//'`
+
+ # 'f95' is the old name for the 'fortran' language. We issue a warning
+ # and make the substitution.
+ case ,${enable_languages}, in
+ *,f95,*)
+ echo configure.in: warning: 'f95' as language name is deprecated, use 'fortran' instead 1>&2
+ enable_languages=`echo "${enable_languages}" | sed -e 's/f95/fortran/g'`
+ ;;
+ esac
+
+ # First scan to see if an enabled language requires some other language.
+ # We assume that a given config-lang.in will list all the language
+ # front ends it requires, even if some are required indirectly.
+ for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
+ case ${lang_frag} in
+ ..) ;;
+ # The odd quoting in the next line works around
+ # an apparent bug in bash 1.12 on linux.
+ ${srcdir}/gcc/[[*]]/config-lang.in) ;;
+ *)
+ # From the config-lang.in, get $language, $lang_requires
+ language=
+ lang_requires=
+ . ${lang_frag}
+ for other in ${lang_requires} ; do
+ case ,${enable_languages}, in
+ *,$other,*) ;;
+ *,all,*) ;;
+ *,$language,*)
+ echo " \`$other' language required by \`$language'; enabling" 1>&2
+ enable_languages="${enable_languages},${other}"
+ ;;
+ esac
+ done
+ ;;
+ esac
+ done
+
+ new_enable_languages=,c,
+ missing_languages=`echo ",$enable_languages," | sed -e s/,all,/,/ -e s/,c,/,/ `
+ potential_languages=,c,
+
+ for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
+ case ${lang_frag} in
+ ..) ;;
+ # The odd quoting in the next line works around
+ # an apparent bug in bash 1.12 on linux.
+ ${srcdir}/gcc/[[*]]/config-lang.in) ;;
+ *)
+ # From the config-lang.in, get $language, $target_libs,
+ # $lang_dirs, $boot_language, and $build_by_default
+ language=
+ target_libs=
+ lang_dirs=
+ subdir_requires=
+ boot_language=no
+ build_by_default=yes
+ . ${lang_frag}
+ if test x${language} = x; then
+ echo "${lang_frag} doesn't set \$language." 1>&2
+ exit 1
+ fi
+
+ case ,${enable_languages}, in
+ *,${language},*)
+ # Language was explicitly selected; include it.
+ add_this_lang=yes
+ ;;
+ *,all,*)
+ # 'all' was selected, select it if it is a default language
+ add_this_lang=${build_by_default}
+ ;;
+ *)
+ add_this_lang=no
+ ;;
+ esac
+
+ # Disable languages that need other directories if these aren't available.
+ for i in $subdir_requires; do
+ test -f "$srcdir/gcc/$i/config-lang.in" && continue
+ case ,${enable_languages}, in
+ *,${language},*)
+ # Specifically requested language; tell them.
+ AC_MSG_ERROR([The gcc/$i directory contains parts of $language but is missing])
+ ;;
+ *)
+ # Silently disable.
+ add_this_lang=unsupported
+ ;;
+ esac
+ done
+
+ # Disable Ada if no preexisting GNAT is available.
+ case ,${enable_languages},:${language}:${have_gnat} in
+ *,${language},*:ada:no)
+ # Specifically requested language; tell them.
+ AC_MSG_ERROR([GNAT is required to build $language])
+ ;;
+ *:ada:no)
+ # Silently disable.
+ add_this_lang=unsupported
+ ;;
+ esac
+
+ # Disable a language that is unsupported by the target.
+ case " $unsupported_languages " in
+ *" $language "*)
+ add_this_lang=unsupported
+ ;;
+ esac
+
+ case $add_this_lang in
+ unsupported)
+ # Remove language-dependent dirs.
+ eval noconfigdirs='"$noconfigdirs "'\"$target_libs $lang_dirs\"
+ ;;
+ no)
+ # Remove language-dependent dirs; still show language as supported.
+ eval noconfigdirs='"$noconfigdirs "'\"$target_libs $lang_dirs\"
+ potential_languages="${potential_languages}${language},"
+ ;;
+ yes)
+ new_enable_languages="${new_enable_languages}${language},"
+ potential_languages="${potential_languages}${language},"
+ missing_languages=`echo "$missing_languages" | sed "s/,$language,/,/"`
+ case ${boot_language} in
+ yes)
+ # Add to (comma-separated) list of stage 1 languages.
+ stage1_languages="${stage1_languages}${language},"
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+
+ AC_ARG_ENABLE(stage1-languages,
+[ --enable-stage1-languages[=all] choose additional languages to build during
+ stage1. Mostly useful for compiler development.],
+ [case ,${enable_stage1_languages}, in
+ ,no,|,,)
+ # Set it to something that will have no effect in the loop below
+ enable_stage1_languages=c ;;
+ ,yes,)
+ enable_stage1_languages=`echo $new_enable_languages | \
+ sed -e "s/^,//" -e "s/,$//" ` ;;
+ *,all,*)
+ enable_stage1_languages=`echo ,$enable_stage1_languages, | \
+ sed -e "s/,all,/$new_enable_languages/" -e "s/^,//" -e "s/,$//" ` ;;
+ esac
+
+ # Add "good" languages from enable_stage1_languages to stage1_languages,
+ # while "bad" languages go in missing_languages. Leave no duplicates.
+ for i in `echo $enable_stage1_languages | sed 's/,/ /g' `; do
+ case $potential_languages in
+ *,$i,*)
+ case $stage1_languages in
+ *,$i,*) ;;
+ *) stage1_languages="$stage1_languages$i," ;;
+ esac ;;
+ *)
+ case $missing_languages in
+ *,$i,*) ;;
+ *) missing_languages="$missing_languages$i," ;;
+ esac ;;
+ esac
+ done])
+
+ # Remove leading/trailing commas that were added for simplicity
+ potential_languages=`echo "$potential_languages" | sed -e "s/^,//" -e "s/,$//"`
+ missing_languages=`echo "$missing_languages" | sed -e "s/^,//" -e "s/,$//"`
+ stage1_languages=`echo "$stage1_languages" | sed -e "s/^,//" -e "s/,$//"`
+ new_enable_languages=`echo "$new_enable_languages" | sed -e "s/^,//" -e "s/,$//"`
+
+ if test "x$missing_languages" != x; then
+ AC_MSG_ERROR([
+The following requested languages could not be built: ${missing_languages}
+Supported languages are: ${potential_languages}])
+ fi
+ if test "x$new_enable_languages" != "x$enable_languages"; then
+ echo The following languages will be built: ${new_enable_languages}
+ enable_languages="$new_enable_languages"
+ fi
+
+ AC_SUBST(stage1_languages)
+ ac_configure_args=`echo " $ac_configure_args" | sed -e "s/ '--enable-languages=[[^ ]]*'//g" -e "s/$/ '--enable-languages="$enable_languages"'/" `
+fi
+
+# Handle --disable-<component> generically.
+for dir in $configdirs $build_configdirs $target_configdirs ; do
+ dirname=`echo $dir | sed -e s/target-//g -e s/build-//g -e s/-/_/g`
+ if eval test x\${enable_${dirname}} "=" xno ; then
+ noconfigdirs="$noconfigdirs $dir"
+ fi
+done
+
+# Check for Boehm's garbage collector
+AC_ARG_ENABLE(objc-gc,
+[ --enable-objc-gc enable the use of Boehm's garbage collector with
+ the GNU Objective-C runtime.],
+[case ,${enable_languages},:${enable_objc_gc}:${noconfigdirs} in
+ *,objc,*:*:yes:*target-boehm-gc*)
+ AC_MSG_ERROR([Boehm's garbage collector was requested yet not supported in this configuration])
+ ;;
+esac])
+
+# Make sure we only build Boehm's garbage collector if required.
+case ,${enable_languages},:${enable_objc_gc} in
+ *,objc,*:yes)
+ # Keep target-boehm-gc if requested for Objective-C.
+ ;;
+ *)
+ # Otherwise remove target-boehm-gc depending on target-libjava.
+ if echo " ${noconfigdirs} " | grep "target-libjava" >/dev/null 2>&1; then
+ noconfigdirs="$noconfigdirs target-boehm-gc"
+ fi
+ ;;
+esac
+
+# Remove the entries in $skipdirs and $noconfigdirs from $configdirs,
+# $build_configdirs and $target_configdirs.
+# If we have the source for $noconfigdirs entries, add them to $notsupp.
+
+notsupp=""
+for dir in . $skipdirs $noconfigdirs ; do
+ dirname=`echo $dir | sed -e s/target-//g -e s/build-//g`
+ if test $dir != . && echo " ${configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
+ configdirs=`echo " ${configdirs} " | sed -e "s/ ${dir} / /"`
+ if test -r $srcdir/$dirname/configure ; then
+ if echo " ${skipdirs} " | grep " ${dir} " >/dev/null 2>&1; then
+ true
+ else
+ notsupp="$notsupp $dir"
+ fi
+ fi
+ fi
+ if test $dir != . && echo " ${build_configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
+ build_configdirs=`echo " ${build_configdirs} " | sed -e "s/ ${dir} / /"`
+ if test -r $srcdir/$dirname/configure ; then
+ if echo " ${skipdirs} " | grep " ${dir} " >/dev/null 2>&1; then
+ true
+ else
+ notsupp="$notsupp $dir"
+ fi
+ fi
+ fi
+ if test $dir != . && echo " ${target_configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
+ target_configdirs=`echo " ${target_configdirs} " | sed -e "s/ ${dir} / /"`
+ if test -r $srcdir/$dirname/configure ; then
+ if echo " ${skipdirs} " | grep " ${dir} " >/dev/null 2>&1; then
+ true
+ else
+ notsupp="$notsupp $dir"
+ fi
+ fi
+ fi
+done
+
+# Sometimes the tools are distributed with libiberty but with no other
+# libraries. In that case, we don't want to build target-libiberty.
+# Don't let libgcc imply libiberty either.
+if test -n "${target_configdirs}" ; then
+ libgcc=
+ others=
+ for i in `echo ${target_configdirs} | sed -e s/target-//g` ; do
+ if test "$i" = "libgcc"; then
+ libgcc=target-libgcc
+ elif test "$i" != "libiberty" ; then
+ if test -r $srcdir/$i/configure ; then
+ others=yes;
+ break;
+ fi
+ fi
+ done
+ if test -z "${others}" ; then
+ target_configdirs=$libgcc
+ fi
+fi
+
+# Quietly strip out all directories which aren't configurable in this tree.
+# This relies on all configurable subdirectories being autoconfiscated, which
+# is now the case.
+build_configdirs_all="$build_configdirs"
+build_configdirs=
+for i in ${build_configdirs_all} ; do
+ j=`echo $i | sed -e s/build-//g`
+ if test -f ${srcdir}/$j/configure ; then
+ build_configdirs="${build_configdirs} $i"
+ fi
+done
+
+configdirs_all="$configdirs"
+configdirs=
+for i in ${configdirs_all} ; do
+ if test -f ${srcdir}/$i/configure ; then
+ configdirs="${configdirs} $i"
+ fi
+done
+
+target_configdirs_all="$target_configdirs"
+target_configdirs=
+for i in ${target_configdirs_all} ; do
+ j=`echo $i | sed -e s/target-//g`
+ if test -f ${srcdir}/$j/configure ; then
+ target_configdirs="${target_configdirs} $i"
+ fi
+done
+
+# Produce a warning message for the subdirs we can't configure.
+# This isn't especially interesting in the Cygnus tree, but in the individual
+# FSF releases, it's important to let people know when their machine isn't
+# supported by the one or two programs in a package.
+
+if test -n "${notsupp}" && test -z "${norecursion}" ; then
+ # If $appdirs is non-empty, at least one of those directories must still
+ # be configured, or we error out. (E.g., if the gas release supports a
+ # specified target in some subdirs but not the gas subdir, we shouldn't
+ # pretend that all is well.)
+ if test -n "$appdirs" ; then
+ for dir in $appdirs ; do
+ if test -r $dir/Makefile.in ; then
+ if echo " ${configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
+ appdirs=""
+ break
+ fi
+ if echo " ${target_configdirs} " | grep " target-${dir} " >/dev/null 2>&1; then
+ appdirs=""
+ break
+ fi
+ fi
+ done
+ if test -n "$appdirs" ; then
+ echo "*** This configuration is not supported by this package." 1>&2
+ exit 1
+ fi
+ fi
+ # Okay, some application will build, or we don't care to check. Still
+ # notify of subdirs not getting built.
+ echo "*** This configuration is not supported in the following subdirectories:" 1>&2
+ echo " ${notsupp}" 1>&2
+ echo " (Any other directories should still work fine.)" 1>&2
+fi
+
+case "$host" in
+ *msdosdjgpp*)
+ enable_gdbtk=no ;;
+esac
+
+# To find our prefix, in gcc_cv_tool_prefix.
+ACX_TOOL_DIRS
+
+copy_dirs=
+
+AC_ARG_WITH([build-sysroot],
+ [ --with-build-sysroot=sysroot
+ use sysroot as the system root during the build],
+ [if test x"$withval" != x ; then
+ SYSROOT_CFLAGS_FOR_TARGET="--sysroot=$withval"
+ fi],
+ [SYSROOT_CFLAGS_FOR_TARGET=])
+AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET)
+
+# Handle --with-headers=XXX. If the value is not "yes", the contents of
+# the named directory are copied to $(tooldir)/sys-include.
+if test x"${with_headers}" != x && test x"${with_headers}" != xno ; then
+ if test x${is_cross_compiler} = xno ; then
+ echo 1>&2 '***' --with-headers is only supported when cross compiling
+ exit 1
+ fi
+ if test x"${with_headers}" != xyes ; then
+ x=${gcc_cv_tool_prefix}
+ copy_dirs="${copy_dirs} ${with_headers} $x/${target_noncanonical}/sys-include"
+ fi
+fi
+
+# Handle --with-libs=XXX. If the value is not "yes", the contents of
+# the name directories are copied to $(tooldir)/lib. Multiple directories
+# are permitted.
+if test x"${with_libs}" != x && test x"${with_libs}" != xno ; then
+ if test x${is_cross_compiler} = xno ; then
+ echo 1>&2 '***' --with-libs is only supported when cross compiling
+ exit 1
+ fi
+ if test x"${with_libs}" != xyes ; then
+ # Copy the libraries in reverse order, so that files in the first named
+ # library override files in subsequent libraries.
+ x=${gcc_cv_tool_prefix}
+ for l in ${with_libs}; do
+ copy_dirs="$l $x/${target_noncanonical}/lib ${copy_dirs}"
+ done
+ fi
+fi
+
+# Set with_gnu_as and with_gnu_ld as appropriate.
+#
+# This is done by determining whether or not the appropriate directory
+# is available, and by checking whether or not specific configurations
+# have requested that this magic not happen.
+#
+# The command line options always override the explicit settings in
+# configure.in, and the settings in configure.in override this magic.
+#
+# If the default for a toolchain is to use GNU as and ld, and you don't
+# want to do that, then you should use the --without-gnu-as and
+# --without-gnu-ld options for the configure script.
+
+if test x${use_gnu_as} = x &&
+ echo " ${configdirs} " | grep " gas " > /dev/null 2>&1 ; then
+ with_gnu_as=yes
+ extra_host_args="$extra_host_args --with-gnu-as"
+fi
+
+if test x${use_gnu_ld} = x &&
+ echo " ${configdirs} " | grep " ld " > /dev/null 2>&1 ; then
+ with_gnu_ld=yes
+ extra_host_args="$extra_host_args --with-gnu-ld"
+fi
+
+# If using newlib, add --with-newlib to the extra_host_args so that gcc/configure
+# can detect this case.
+
+if test x${with_newlib} != xno && echo " ${target_configdirs} " | grep " target-newlib " > /dev/null 2>&1 ; then
+ with_newlib=yes
+ extra_host_args="$extra_host_args --with-newlib"
+fi
+
+# Handle ${copy_dirs}
+set fnord ${copy_dirs}
+shift
+while test $# != 0 ; do
+ if test -f $2/COPIED && test x"`cat $2/COPIED`" = x"$1" ; then
+ :
+ else
+ echo Copying $1 to $2
+
+ # Use the install script to create the directory and all required
+ # parent directories.
+ if test -d $2 ; then
+ :
+ else
+ echo >config.temp
+ ${srcdir}/install-sh -c -m 644 config.temp $2/COPIED
+ fi
+
+ # Copy the directory, assuming we have tar.
+ # FIXME: Should we use B in the second tar? Not all systems support it.
+ (cd $1; tar -cf - .) | (cd $2; tar -xpf -)
+
+ # It is the responsibility of the user to correctly adjust all
+ # symlinks. If somebody can figure out how to handle them correctly
+ # here, feel free to add the code.
+
+ echo $1 > $2/COPIED
+ fi
+ shift; shift
+done
+
+# Determine a target-dependent exec_prefix that the installed
+# gcc will search in. Keep this list sorted by triplet, with
+# the *-*-osname triplets last.
+md_exec_prefix=
+case "${target}" in
+ alpha*-*-*vms*)
+ md_exec_prefix=/gnu/lib/gcc-lib
+ ;;
+ i[34567]86-pc-msdosdjgpp*)
+ md_exec_prefix=/dev/env/DJDIR/bin
+ ;;
+ i[34567]86-*-sco3.2v5*)
+ if test $with_gnu_as = yes; then
+ md_exec_prefix=/usr/gnu/bin
+ else
+ md_exec_prefix=/usr/ccs/bin/elf
+ fi
+ ;;
+
+ mn10300-*-* | \
+ powerpc-*-chorusos* | \
+ powerpc*-*-eabi* | \
+ powerpc*-*-sysv* | \
+ powerpc*-*-kaos* | \
+ s390x-ibm-tpf*)
+ md_exec_prefix=/usr/ccs/bin
+ ;;
+ sparc64-*-elf*)
+ ;;
+ v850*-*-*)
+ md_exec_prefix=/usr/ccs/bin
+ ;;
+ xtensa-*-elf*)
+ ;;
+
+ *-*-beos* | \
+ *-*-elf* | \
+ *-*-hpux* | \
+ *-*-netware* | \
+ *-*-nto-qnx* | \
+ *-*-rtems* | \
+ *-*-solaris2* | \
+ *-*-sysv[45]* | \
+ *-*-vxworks* | \
+ *-wrs-windiss)
+ md_exec_prefix=/usr/ccs/bin
+ ;;
+esac
+
+extra_arflags_for_target=
+extra_nmflags_for_target=
+extra_ranlibflags_for_target=
+target_makefile_frag=/dev/null
+case "${target}" in
+ mep*-*-*)
+ target_makefile_frag="config/mt-mep"
+ ;;
+ spu-*-*)
+ target_makefile_frag="config/mt-spu"
+ ;;
+ *-*-netware*)
+ target_makefile_frag="config/mt-netware"
+ ;;
+ *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
+ target_makefile_frag="config/mt-gnu"
+ ;;
+ *-*-aix4.[[3456789]]* | *-*-aix[[56789]].*)
+ # nm and ar from AIX 4.3 and above require -X32_64 flag to all ar and nm
+ # commands to handle both 32-bit and 64-bit objects. These flags are
+ # harmless if we're using GNU nm or ar.
+ extra_arflags_for_target=" -X32_64"
+ extra_nmflags_for_target=" -B -X32_64"
+ ;;
+ *-*-darwin*)
+ # ranlib from Darwin requires the -c flag to look at common symbols.
+ extra_ranlibflags_for_target=" -c"
+ ;;
+ mips*-*-pe | sh*-*-pe | *arm-wince-pe)
+ target_makefile_frag="config/mt-wince"
+ ;;
+esac
+
+alphaieee_frag=/dev/null
+case $target in
+ alpha*-*-*)
+ # This just makes sure to use the -mieee option to build target libs.
+ # This should probably be set individually by each library.
+ alphaieee_frag="config/mt-alphaieee"
+ ;;
+esac
+
+# If --enable-target-optspace always use -Os instead of -O2 to build
+# the target libraries, similarly if it is not specified, use -Os
+# on selected platforms.
+ospace_frag=/dev/null
+case "${enable_target_optspace}:${target}" in
+ yes:*)
+ ospace_frag="config/mt-ospace"
+ ;;
+ :d30v-*)
+ ospace_frag="config/mt-d30v"
+ ;;
+ :m32r-* | :d10v-* | :fr30-*)
+ ospace_frag="config/mt-ospace"
+ ;;
+ no:* | :*)
+ ;;
+ *)
+ echo "*** bad value \"${enable_target_optspace}\" for --enable-target-optspace flag; ignored" 1>&2
+ ;;
+esac
+
+# Default to using --with-stabs for certain targets.
+if test x${with_stabs} = x ; then
+ case "${target}" in
+ mips*-*-irix[[56]]*)
+ ;;
+ mips*-*-* | alpha*-*-osf*)
+ with_stabs=yes;
+ extra_host_args="${extra_host_args} --with-stabs"
+ ;;
+ esac
+fi
+
+# hpux11 in 64bit mode has libraries in a weird place. Arrange to find
+# them automatically.
+case "${host}" in
+ hppa*64*-*-hpux11*)
+ extra_host_args="$extra_host_args -x-libraries=/usr/lib/pa20_64 -x-includes=/usr/X11R6/include"
+ ;;
+esac
+
+# Some systems (e.g., one of the i386-aix systems the gas testers are
+# using) don't handle "\$" correctly, so don't use it here.
+tooldir='${exec_prefix}'/${target_noncanonical}
+build_tooldir=${tooldir}
+
+# Create a .gdbinit file which runs the one in srcdir
+# and tells GDB to look there for source files.
+
+if test -r ${srcdir}/.gdbinit ; then
+ case ${srcdir} in
+ .) ;;
+ *) cat > ./.gdbinit <<EOF
+# ${NO_EDIT}
+dir ${srcdir}
+dir .
+source ${srcdir}/.gdbinit
+EOF
+ ;;
+ esac
+fi
+
+# Make sure that the compiler is able to generate an executable. If it
+# can't, we are probably in trouble. We don't care whether we can run the
+# executable--we might be using a cross compiler--we only care whether it
+# can be created. At this point the main configure script has set CC.
+we_are_ok=no
+echo "int main () { return 0; }" > conftest.c
+${CC} -o conftest ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} conftest.c
+if test $? = 0 ; then
+ if test -s conftest || test -s conftest.exe ; then
+ we_are_ok=yes
+ fi
+fi
+case $we_are_ok in
+ no)
+ echo 1>&2 "*** The command '${CC} -o conftest ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} conftest.c' failed."
+ echo 1>&2 "*** You must set the environment variable CC to a working compiler."
+ rm -f conftest*
+ exit 1
+ ;;
+esac
+rm -f conftest*
+
+# The Solaris /usr/ucb/cc compiler does not appear to work.
+case "${host}" in
+ sparc-sun-solaris2*)
+ CCBASE="`echo ${CC-cc} | sed 's/ .*$//'`"
+ if test "`type $CCBASE | sed 's/^[[^/]]*//'`" = "/usr/ucb/cc" ; then
+ could_use=
+ test -d /opt/SUNWspro/bin && could_use="/opt/SUNWspro/bin"
+ if test -d /opt/cygnus/bin ; then
+ if test "$could_use" = "" ; then
+ could_use="/opt/cygnus/bin"
+ else
+ could_use="$could_use or /opt/cygnus/bin"
+ fi
+ fi
+ if test "$could_use" = "" ; then
+ echo "Warning: compilation may fail because you're using"
+ echo "/usr/ucb/cc. You should change your PATH or CC "
+ echo "variable and rerun configure."
+ else
+ echo "Warning: compilation may fail because you're using"
+ echo "/usr/ucb/cc, when you should use the C compiler from"
+ echo "$could_use. You should change your"
+ echo "PATH or CC variable and rerun configure."
+ fi
+ fi
+ ;;
+esac
+
+case "${host}" in
+ *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;;
+ *-*-darwin* | *-*-rhapsody* ) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;;
+ *) RPATH_ENVVAR=LD_LIBRARY_PATH ;;
+esac
+
+# Record target_configdirs and the configure arguments for target and
+# build configuration in Makefile.
+target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`
+build_configdirs=`echo "${build_configdirs}" | sed -e 's/build-//g'`
+
+# Determine whether gdb needs tk/tcl or not.
+# Use 'maybe' since enable_gdbtk might be true even if tk isn't available
+# and in that case we want gdb to be built without tk. Ugh!
+# In fact I believe gdb is the *only* package directly dependent on tk,
+# so we should be able to put the 'maybe's in unconditionally and
+# leave out the maybe dependencies when enable_gdbtk is false. I'm not
+# 100% sure that that's safe though.
+
+gdb_tk="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-libgui"
+case "$enable_gdbtk" in
+ no)
+ GDB_TK="" ;;
+ yes)
+ GDB_TK="${gdb_tk}" ;;
+ *)
+ # Only add the dependency on gdbtk when GDBtk is part of the gdb
+ # distro. Eventually someone will fix this and move Insight, nee
+ # gdbtk to a separate directory.
+ if test -d ${srcdir}/gdb/gdbtk ; then
+ GDB_TK="${gdb_tk}"
+ else
+ GDB_TK=""
+ fi
+ ;;
+esac
+CONFIGURE_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-configure-/g`
+INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g`
+
+# Strip out unwanted targets.
+
+# While at that, we remove Makefiles if we were started for recursive
+# configuration, so that the top-level Makefile reconfigures them,
+# like we used to do when configure itself was recursive.
+
+# Loop over modules. $extrasub must be used with care, limiting as
+# much as possible the usage of range addresses. That's because autoconf
+# splits the sed script to overcome limits in the number of commands,
+# and relying on carefully-timed sed passes may turn out to be very hard
+# to maintain later. In this particular case, you just have to be careful
+# not to nest @if/@endif pairs, because configure will not warn you at all.
+
+AC_ARG_ENABLE([bootstrap],
+[ --enable-bootstrap Enable bootstrapping [yes if native build]],,
+enable_bootstrap=default)
+
+# Issue errors and warnings for invalid/strange bootstrap combinations.
+case "$configdirs" in
+ *gcc*) have_compiler=yes ;;
+ *) have_compiler=no ;;
+esac
+
+case "$have_compiler:$host:$target:$enable_bootstrap" in
+ *:*:*:no) ;;
+
+ # Default behavior. Enable bootstrap if we have a compiler
+ # and we are in a native configuration.
+ yes:$build:$build:default)
+ enable_bootstrap=yes ;;
+
+ *:*:*:default)
+ enable_bootstrap=no ;;
+
+ # We have a compiler and we are in a native configuration, bootstrap is ok
+ yes:$build:$build:yes)
+ ;;
+
+ # Other configurations, but we have a compiler. Assume the user knows
+ # what he's doing.
+ yes:*:*:yes)
+ AC_MSG_WARN([trying to bootstrap a cross compiler])
+ ;;
+
+ # No compiler: if they passed --enable-bootstrap explicitly, fail
+ no:*:*:yes)
+ AC_MSG_ERROR([cannot bootstrap without a compiler]) ;;
+
+ # Fail if wrong command line
+ *)
+ AC_MSG_ERROR([invalid option for --enable-bootstrap])
+ ;;
+esac
+
+# Adjust the toplevel makefile according to whether bootstrap was selected.
+case "$enable_bootstrap" in
+ yes)
+ bootstrap_suffix=bootstrap ;;
+ no)
+ bootstrap_suffix=no-bootstrap ;;
+esac
+
+for module in ${build_configdirs} ; do
+ if test -z "${no_recursion}" \
+ && test -f ${build_subdir}/${module}/Makefile; then
+ echo 1>&2 "*** removing ${build_subdir}/${module}/Makefile to force reconfigure"
+ rm -f ${build_subdir}/${module}/Makefile
+ fi
+ extrasub="$extrasub
+/^@if build-$module\$/d
+/^@endif build-$module\$/d
+/^@if build-$module-$bootstrap_suffix\$/d
+/^@endif build-$module-$bootstrap_suffix\$/d"
+done
+for module in ${configdirs} ; do
+ if test -z "${no_recursion}"; then
+ for file in stage*-${module}/Makefile prev-${module}/Makefile ${module}/Makefile; do
+ if test -f ${file}; then
+ echo 1>&2 "*** removing ${file} to force reconfigure"
+ rm -f ${file}
+ fi
+ done
+ fi
+ extrasub="$extrasub
+/^@if $module\$/d
+/^@endif $module\$/d
+/^@if $module-$bootstrap_suffix\$/d
+/^@endif $module-$bootstrap_suffix\$/d"
+done
+for module in ${target_configdirs} ; do
+ if test -z "${no_recursion}" \
+ && test -f ${target_subdir}/${module}/Makefile; then
+ echo 1>&2 "*** removing ${target_subdir}/${module}/Makefile to force reconfigure"
+ rm -f ${target_subdir}/${module}/Makefile
+ fi
+ extrasub="$extrasub
+/^@if target-$module\$/d
+/^@endif target-$module\$/d
+/^@if target-$module-$bootstrap_suffix\$/d
+/^@endif target-$module-$bootstrap_suffix\$/d"
+done
+
+extrasub="$extrasub
+/^@if /,/^@endif /d"
+
+# Create the serialization dependencies. This uses a temporary file.
+
+AC_ARG_ENABLE([serial-configure],
+[ --enable-serial-[{host,target,build}-]configure
+ Force sequential configuration of
+ sub-packages for the host, target or build
+ machine, or all sub-packages])
+
+case ${enable_serial_configure} in
+ yes)
+ enable_serial_build_configure=yes
+ enable_serial_host_configure=yes
+ enable_serial_target_configure=yes
+ ;;
+esac
+
+# These force 'configure's to be done one at a time, to avoid problems
+# with contention over a shared config.cache.
+rm -f serdep.tmp
+echo '# serdep.tmp' > serdep.tmp
+olditem=
+test "x${enable_serial_build_configure}" = xyes &&
+for item in ${build_configdirs} ; do
+ case ${olditem} in
+ "") ;;
+ *) echo "configure-build-${item}: configure-build-${olditem}" >> serdep.tmp ;;
+ esac
+ olditem=${item}
+done
+olditem=
+test "x${enable_serial_host_configure}" = xyes &&
+for item in ${configdirs} ; do
+ case ${olditem} in
+ "") ;;
+ *) echo "configure-${item}: configure-${olditem}" >> serdep.tmp ;;
+ esac
+ olditem=${item}
+done
+olditem=
+test "x${enable_serial_target_configure}" = xyes &&
+for item in ${target_configdirs} ; do
+ case ${olditem} in
+ "") ;;
+ *) echo "configure-target-${item}: configure-target-${olditem}" >> serdep.tmp ;;
+ esac
+ olditem=${item}
+done
+serialization_dependencies=serdep.tmp
+AC_SUBST_FILE(serialization_dependencies)
+
+# Base args. Strip norecursion, cache-file, srcdir, host, build,
+# target, nonopt, and variable assignments. These are the ones we
+# might not want to pass down to subconfigures. Also strip
+# program-prefix, program-suffix, and program-transform-name, so that
+# we can pass down a consistent program-transform-name.
+baseargs=
+keep_next=no
+skip_next=no
+eval "set -- $ac_configure_args"
+for ac_arg
+do
+ if test X"$skip_next" = X"yes"; then
+ skip_next=no
+ continue
+ fi
+ if test X"$keep_next" = X"yes"; then
+ case $ac_arg in
+ *\'*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ baseargs="$baseargs '$ac_arg'"
+ keep_next=no
+ continue
+ fi
+
+ # Handle separated arguments. Based on the logic generated by
+ # autoconf 2.59.
+ 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)
+ separate_arg=no
+ ;;
+ -*)
+ separate_arg=yes
+ ;;
+ *)
+ separate_arg=no
+ ;;
+ esac
+
+ case "$ac_arg" in
+ --no*)
+ continue
+ ;;
+ --c* | \
+ --sr* | \
+ --ho* | \
+ --bu* | \
+ --t* | \
+ --program-* | \
+ -cache_file* | \
+ -srcdir* | \
+ -host* | \
+ -build* | \
+ -target* | \
+ -program-prefix* | \
+ -program-suffix* | \
+ -program-transform-name* )
+ skip_next=$separate_arg
+ continue
+ ;;
+ -*)
+ # An option. Add it.
+ case $ac_arg in
+ *\'*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ baseargs="$baseargs '$ac_arg'"
+ keep_next=$separate_arg
+ ;;
+ *)
+ # Either a variable assignment, or a nonopt (triplet). Don't
+ # pass it down; let the Makefile handle this.
+ continue
+ ;;
+ esac
+done
+# Remove the initial space we just introduced and, as these will be
+# expanded by make, quote '$'.
+baseargs=`echo "x$baseargs" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
+
+# Add in --program-transform-name, after --program-prefix and
+# --program-suffix have been applied to it. Autoconf has already
+# doubled dollar signs and backslashes in program_transform_name; we want
+# the backslashes un-doubled, and then the entire thing wrapped in single
+# quotes, because this will be expanded first by make and then by the shell.
+# Also, because we want to override the logic in subdir configure scripts to
+# choose program_transform_name, replace any s,x,x, with s,y,y,.
+sed -e "s,\\\\\\\\,\\\\,g; s,','\\\\'',g; s/s,x,x,/s,y,y,/" <<EOF_SED > conftestsed.out
+${program_transform_name}
+EOF_SED
+gcc_transform_name=`cat conftestsed.out`
+rm -f conftestsed.out
+baseargs="$baseargs --program-transform-name='${gcc_transform_name}'"
+
+# For the build-side libraries, we just need to pretend we're native,
+# and not use the same cache file. Multilibs are neither needed nor
+# desired.
+build_configargs="--cache-file=../config.cache ${baseargs}"
+
+# For host modules, accept cache file option, or specification as blank.
+case "${cache_file}" in
+"") # empty
+ cache_file_option="" ;;
+/* | [[A-Za-z]]:[[\\/]]* ) # absolute path
+ cache_file_option="--cache-file=${cache_file}" ;;
+*) # relative path
+ cache_file_option="--cache-file=../${cache_file}" ;;
+esac
+
+# Host dirs don't like to share a cache file either, horribly enough.
+# This seems to be due to autoconf 2.5x stupidity.
+host_configargs="--cache-file=./config.cache ${extra_host_args} ${baseargs}"
+
+target_configargs=${baseargs}
+
+# Passing a --with-cross-host argument lets the target libraries know
+# whether they are being built with a cross-compiler or being built
+# native. However, it would be better to use other mechanisms to make the
+# sorts of decisions they want to make on this basis. Please consider
+# this option to be deprecated. FIXME.
+if test x${is_cross_compiler} = xyes ; then
+ target_configargs="--with-cross-host=${host_noncanonical} ${target_configargs}"
+fi
+
+# Default to --enable-multilib.
+if test x${enable_multilib} = x ; then
+ target_configargs="--enable-multilib ${target_configargs}"
+fi
+
+# Pass --with-newlib if appropriate. Note that target_configdirs has
+# changed from the earlier setting of with_newlib.
+if test x${with_newlib} != xno && echo " ${target_configdirs} " | grep " newlib " > /dev/null 2>&1 && test -d ${srcdir}/newlib ; then
+ target_configargs="--with-newlib ${target_configargs}"
+fi
+
+# Different target subdirs use different values of certain variables
+# (notably CXX). Worse, multilibs use *lots* of different values.
+# Worse yet, autoconf 2.5x makes some of these 'precious', meaning that
+# it doesn't automatically accept command-line overrides of them.
+# This means it's not safe for target subdirs to share a cache file,
+# which is disgusting, but there you have it. Hopefully this can be
+# fixed in future. It's still worthwhile to use a cache file for each
+# directory. I think.
+
+# Pass the appropriate --build, --host, --target and --cache-file arguments.
+# We need to pass --target, as newer autoconf's requires consistency
+# for target_alias and gcc doesn't manage it consistently.
+target_configargs="--cache-file=./config.cache ${target_configargs}"
+
+FLAGS_FOR_TARGET=
+case " $target_configdirs " in
+ *" newlib "*)
+ case " $target_configargs " in
+ *" --with-newlib "*)
+ case "$target" in
+ *-cygwin*)
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/winsup -L$$r/$(TARGET_SUBDIR)/winsup/cygwin -L$$r/$(TARGET_SUBDIR)/winsup/w32api/lib -isystem $$s/winsup/include -isystem $$s/winsup/cygwin/include -isystem $$s/winsup/w32api/include' ;;
+ esac
+
+ # If we're not building GCC, don't discard standard headers.
+ if test -d ${srcdir}/gcc; then
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -nostdinc'
+
+ if test "${build}" != "${host}"; then
+ # On Canadian crosses, CC_FOR_TARGET will have already been set
+ # by `configure', so we won't have an opportunity to add -Bgcc/
+ # to it. This is right: we don't want to search that directory
+ # for binaries, but we want the header files in there, so add
+ # them explicitly.
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -isystem $$r/$(HOST_SUBDIR)/gcc/include'
+
+ # Someone might think of using the pre-installed headers on
+ # Canadian crosses, in case the installed compiler is not fully
+ # compatible with the compiler being built. In this case, it
+ # would be better to flag an error than risking having
+ # incompatible object files being constructed. We can't
+ # guarantee that an error will be flagged, but let's hope the
+ # compiler will do it, when presented with incompatible header
+ # files.
+ fi
+ fi
+
+ case "${target}-${is_cross_compiler}" in
+ i[[3456789]]86-*-linux*-no)
+ # Here host == target, so we don't need to build gcc,
+ # so we don't want to discard standard headers.
+ FLAGS_FOR_TARGET=`echo " $FLAGS_FOR_TARGET " | sed -e 's/ -nostdinc / /'`
+ ;;
+ *)
+ # If we're building newlib, use its generic headers last, but search
+ # for any libc-related directories first (so make it the last -B
+ # switch).
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$$r/$(TARGET_SUBDIR)/newlib/ -isystem $$r/$(TARGET_SUBDIR)/newlib/targ-include -isystem $$s/newlib/libc/include'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+esac
+case "$target" in
+*-mingw*)
+ # Can't be handled as Cygwin above since Mingw does not use newlib.
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/winsup/mingw -L$$r/$(TARGET_SUBDIR)/winsup/w32api/lib -isystem $$s/winsup/mingw/include -isystem $$s/winsup/w32api/include' ;;
+esac
+
+# Allow the user to override the flags for
+# our build compiler if desired.
+CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
+
+# On Canadian crosses, we'll be searching the right directories for
+# the previously-installed cross compiler, so don't bother to add
+# flags for directories within the install tree of the compiler
+# being built; programs in there won't even run.
+if test "${build}" = "${host}" && test -d ${srcdir}/gcc; then
+ # Search for pre-installed headers if nothing else fits.
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$(build_tooldir)/bin/ -B$(build_tooldir)/lib/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include'
+fi
+
+if test "x${use_gnu_ld}" = x &&
+ echo " ${configdirs} " | grep " ld " > /dev/null ; then
+ # Arrange for us to find uninstalled linker scripts.
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(HOST_SUBDIR)/ld'
+fi
+
+# Search for other target-specific linker scripts and such.
+case "${target}" in
+ m32c-*-* )
+ if test -d ${srcdir}/libgloss/m32c; then
+ # This is for crt0.o
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$$r/$(TARGET_SUBDIR)/libgloss/m32c'
+ # This is for r8c.ld
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/libgloss/m32c'
+ # This is for libnosys.a
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/libgloss/libnosys'
+ fi
+ ;;
+ mep*)
+ FLAGS_FOR_TARGET="$FLAGS_FOR_TARGET -mlibrary"
+ ;;
+esac
+
+# Makefile fragments.
+for frag in host_makefile_frag target_makefile_frag alphaieee_frag ospace_frag;
+do
+ eval fragval=\$$frag
+ if test $fragval != /dev/null; then
+ eval $frag=${srcdir}/$fragval
+ fi
+done
+AC_SUBST_FILE(host_makefile_frag)
+AC_SUBST_FILE(target_makefile_frag)
+AC_SUBST_FILE(alphaieee_frag)
+AC_SUBST_FILE(ospace_frag)
+
+# Miscellanea: directories, flags, etc.
+AC_SUBST(RPATH_ENVVAR)
+AC_SUBST(tooldir)
+AC_SUBST(build_tooldir)
+AC_SUBST(CONFIGURE_GDB_TK)
+AC_SUBST(GDB_TK)
+AC_SUBST(INSTALL_GDB_TK)
+
+# Build module lists & subconfigure args.
+AC_SUBST(build_configargs)
+AC_SUBST(build_configdirs)
+
+# Host module lists & subconfigure args.
+AC_SUBST(host_configargs)
+AC_SUBST(configdirs)
+
+# Target module lists & subconfigure args.
+AC_SUBST(target_configargs)
+
+
+# Build tools.
+AC_SUBST(CC_FOR_BUILD)
+AC_SUBST(config_shell)
+
+# Generate default definitions for YACC, M4, LEX and other programs that run
+# on the build machine. These are used if the Makefile can't locate these
+# programs in objdir.
+MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
+
+AC_CHECK_PROGS([YACC], ['bison -y' byacc yacc], [$MISSING bison -y])
+case " $build_configdirs " in
+ *" bison "*) YACC='$$r/$(BUILD_SUBDIR)/bison/tests/bison -y' ;;
+ *" byacc "*) YACC='$$r/$(BUILD_SUBDIR)/byacc/byacc' ;;
+esac
+
+AC_CHECK_PROGS([BISON], [bison], [$MISSING bison])
+case " $build_configdirs " in
+ *" bison "*) BISON='$$r/$(BUILD_SUBDIR)/bison/tests/bison' ;;
+esac
+
+AC_CHECK_PROGS([M4], [gm4 gnum4 m4], [$MISSING m4])
+case " $build_configdirs " in
+ *" m4 "*) M4='$$r/$(BUILD_SUBDIR)/m4/m4' ;;
+esac
+
+AC_CHECK_PROGS([LEX], [flex lex], [$MISSING flex])
+case " $build_configdirs " in
+ *" flex "*) LEX='$$r/$(BUILD_SUBDIR)/flex/flex' ;;
+ *" lex "*) LEX='$$r/$(BUILD_SUBDIR)/lex/lex' ;;
+esac
+
+AC_CHECK_PROGS([FLEX], [flex], [$MISSING flex])
+case " $build_configdirs " in
+ *" flex "*) FLEX='$$r/$(BUILD_SUBDIR)/flex/flex' ;;
+esac
+
+AC_CHECK_PROGS([MAKEINFO], makeinfo, [$MISSING makeinfo])
+case " $build_configdirs " in
+ *" texinfo "*) MAKEINFO='$$r/$(BUILD_SUBDIR)/texinfo/makeinfo/makeinfo' ;;
+ *)
+changequote(,)
+ # For an installed makeinfo, we require it to be from texinfo 4.4 or
+ # higher, else we use the "missing" dummy.
+ if ${MAKEINFO} --version \
+ | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[4-9]|[5-9])' >/dev/null 2>&1; then
+ :
+ else
+ MAKEINFO="$MISSING makeinfo"
+ fi
+ ;;
+changequote([,])
+esac
+
+# FIXME: expect and dejagnu may become build tools?
+
+AC_CHECK_PROGS(EXPECT, expect, expect)
+case " $configdirs " in
+ *" expect "*)
+ test $host = $build && EXPECT='$$r/$(HOST_SUBDIR)/expect/expect'
+ ;;
+esac
+
+AC_CHECK_PROGS(RUNTEST, runtest, runtest)
+case " $configdirs " in
+ *" dejagnu "*)
+ test $host = $build && RUNTEST='$$s/$(HOST_SUBDIR)/dejagnu/runtest'
+ ;;
+esac
+
+
+# Host tools.
+NCN_STRICT_CHECK_TOOLS(AR, ar)
+NCN_STRICT_CHECK_TOOLS(AS, as)
+NCN_STRICT_CHECK_TOOLS(DLLTOOL, dlltool)
+NCN_STRICT_CHECK_TOOLS(LD, ld)
+NCN_STRICT_CHECK_TOOLS(LIPO, lipo)
+NCN_STRICT_CHECK_TOOLS(NM, nm)
+NCN_STRICT_CHECK_TOOLS(RANLIB, ranlib, :)
+NCN_STRICT_CHECK_TOOLS(STRIP, strip, :)
+NCN_STRICT_CHECK_TOOLS(WINDRES, windres)
+NCN_STRICT_CHECK_TOOLS(OBJCOPY, objcopy)
+NCN_STRICT_CHECK_TOOLS(OBJDUMP, objdump)
+AC_SUBST(CC)
+AC_SUBST(CXX)
+AC_SUBST(CFLAGS)
+AC_SUBST(CFLAGS_FOR_BUILD)
+AC_SUBST(CXXFLAGS)
+
+# Target tools.
+AC_ARG_WITH([build-time-tools],
+ [ --with-build-time-tools=path
+ use given path to find target tools during the build],
+ [case x"$withval" in
+ x/*) ;;
+ *)
+ with_build_time_tools=
+ AC_MSG_WARN([argument to --with-build-time-tools must be an absolute path])
+ ;;
+ esac],
+ [with_build_time_tools=])
+
+NCN_STRICT_CHECK_TARGET_TOOLS(CC_FOR_TARGET, cc gcc)
+NCN_STRICT_CHECK_TARGET_TOOLS(CXX_FOR_TARGET, c++ g++ cxx gxx)
+NCN_STRICT_CHECK_TARGET_TOOLS(GCC_FOR_TARGET, gcc, ${CC_FOR_TARGET})
+NCN_STRICT_CHECK_TARGET_TOOLS(GCJ_FOR_TARGET, gcj)
+NCN_STRICT_CHECK_TARGET_TOOLS(GFORTRAN_FOR_TARGET, gfortran)
+
+ACX_CHECK_INSTALLED_TARGET_TOOL(AR_FOR_TARGET, ar)
+ACX_CHECK_INSTALLED_TARGET_TOOL(AS_FOR_TARGET, as)
+ACX_CHECK_INSTALLED_TARGET_TOOL(DLLTOOL_FOR_TARGET, dlltool)
+ACX_CHECK_INSTALLED_TARGET_TOOL(LD_FOR_TARGET, ld)
+ACX_CHECK_INSTALLED_TARGET_TOOL(LIPO_FOR_TARGET, lipo)
+ACX_CHECK_INSTALLED_TARGET_TOOL(NM_FOR_TARGET, nm)
+ACX_CHECK_INSTALLED_TARGET_TOOL(OBJDUMP_FOR_TARGET, objdump)
+ACX_CHECK_INSTALLED_TARGET_TOOL(RANLIB_FOR_TARGET, ranlib, :)
+ACX_CHECK_INSTALLED_TARGET_TOOL(STRIP_FOR_TARGET, strip)
+ACX_CHECK_INSTALLED_TARGET_TOOL(WINDRES_FOR_TARGET, windres)
+
+RAW_CXX_FOR_TARGET="$CXX_FOR_TARGET"
+
+GCC_TARGET_TOOL(ar, AR_FOR_TARGET, AR, [binutils/ar])
+GCC_TARGET_TOOL(as, AS_FOR_TARGET, AS, [gas/as-new])
+GCC_TARGET_TOOL(cc, CC_FOR_TARGET, CC, [gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/])
+GCC_TARGET_TOOL(c++, CXX_FOR_TARGET, CXX,
+ [gcc/g++ -B$$r/$(HOST_SUBDIR)/gcc/ -nostdinc++ `test ! -f $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags || $(SHELL) $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags --build-includes` -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs],
+ c++)
+GCC_TARGET_TOOL(c++ for libstdc++, RAW_CXX_FOR_TARGET, CXX,
+ [gcc/xgcc -shared-libgcc -B$$r/$(HOST_SUBDIR)/gcc -nostdinc++ -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs],
+ c++)
+GCC_TARGET_TOOL(dlltool, DLLTOOL_FOR_TARGET, DLLTOOL, [binutils/dlltool])
+GCC_TARGET_TOOL(gcc, GCC_FOR_TARGET, , [gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/])
+GCC_TARGET_TOOL(gcj, GCJ_FOR_TARGET, GCJ,
+ [gcc/gcj -B$$r/$(HOST_SUBDIR)/gcc/], java)
+GCC_TARGET_TOOL(gfortran, GFORTRAN_FOR_TARGET, GFORTRAN,
+ [gcc/gfortran -B$$r/$(HOST_SUBDIR)/gcc/], fortran)
+GCC_TARGET_TOOL(ld, LD_FOR_TARGET, LD, [ld/ld-new])
+GCC_TARGET_TOOL(lipo, LIPO_FOR_TARGET, LIPO)
+GCC_TARGET_TOOL(nm, NM_FOR_TARGET, NM, [binutils/nm-new])
+GCC_TARGET_TOOL(objdump, OBJDUMP_FOR_TARGET, OBJDUMP, [binutils/objdump])
+GCC_TARGET_TOOL(ranlib, RANLIB_FOR_TARGET, RANLIB, [binutils/ranlib])
+GCC_TARGET_TOOL(strip, STRIP_FOR_TARGET, STRIP, [binutils/strip])
+GCC_TARGET_TOOL(windres, WINDRES_FOR_TARGET, WINDRES, [binutils/windres])
+
+AC_SUBST(FLAGS_FOR_TARGET)
+AC_SUBST(RAW_CXX_FOR_TARGET)
+
+# Certain tools may need extra flags.
+AR_FOR_TARGET=${AR_FOR_TARGET}${extra_arflags_for_target}
+RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${extra_ranlibflags_for_target}
+NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target}
+
+# When building target libraries, except in a Canadian cross, we use
+# the same toolchain as the compiler we just built.
+COMPILER_AS_FOR_TARGET='$(AS_FOR_TARGET)'
+COMPILER_LD_FOR_TARGET='$(LD_FOR_TARGET)'
+COMPILER_NM_FOR_TARGET='$(NM_FOR_TARGET)'
+if test $host = $build; then
+ case " $configdirs " in
+ *" gcc "*)
+ COMPILER_AS_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/as'
+ COMPILER_LD_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/collect-ld'
+ COMPILER_NM_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/nm'${extra_nmflags_for_target}
+ ;;
+ esac
+fi
+
+AC_SUBST(COMPILER_AS_FOR_TARGET)
+AC_SUBST(COMPILER_LD_FOR_TARGET)
+AC_SUBST(COMPILER_NM_FOR_TARGET)
+
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+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)
+AC_SUBST(MAINTAINER_MODE_TRUE)
+AC_SUBST(MAINTAINER_MODE_FALSE)
+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
+AC_SUBST(MAINT)dnl
+
+# ---------------------
+# GCC bootstrap support
+# ---------------------
+
+# Stage specific cflags for build.
+stage1_cflags="-g"
+case $build in
+ vax-*-*)
+ case ${GCC} in
+ yes) stage1_cflags="-g -Wa,-J" ;;
+ *) stage1_cflags="-g -J" ;;
+ esac ;;
+esac
+
+# This is aimed to mimic bootstrap with a non-GCC compiler to catch problems.
+if test "$GCC" = yes; then
+ saved_CFLAGS="$CFLAGS"
+
+ # Pass -fkeep-inline-functions for stage 1 if the GCC version supports it.
+ CFLAGS="$CFLAGS -fkeep-inline-functions"
+ AC_MSG_CHECKING([whether -fkeep-inline-functions is supported])
+ AC_TRY_COMPILE([
+#if (__GNUC__ < 3) \
+ || (__GNUC__ == 3 && (__GNUC_MINOR__ < 3 \
+ || (__GNUC_MINOR__ == 3 && __GNUC_PATCHLEVEL__ < 1)))
+#error http://gcc.gnu.org/PR29382
+#endif
+ ],,
+ [AC_MSG_RESULT([yes]); stage1_cflags="$stage1_cflags -fkeep-inline-functions"],
+ [AC_MSG_RESULT([no])])
+
+ CFLAGS="$saved_CFLAGS"
+fi
+
+AC_SUBST(stage1_cflags)
+
+# Enable --enable-checking in stage1 of the compiler.
+AC_ARG_ENABLE(stage1-checking,
+[ --enable-stage1-checking[=all] choose additional checking for stage1
+ of the compiler.],
+[stage1_checking=--enable-checking=${enable_stage1_checking}],
+[if test "x$enable_checking" = xno; then
+ stage1_checking=--enable-checking
+else
+ stage1_checking=--enable-checking${enable_checking+=}$enable_checking
+fi])
+AC_SUBST(stage1_checking)
+
+# Enable -Werror in bootstrap stage2 and later.
+AC_ARG_ENABLE(werror,
+[ --enable-werror enable -Werror in bootstrap stage2 and later], [],
+[if test -d ${srcdir}/gcc && test x"`cat $srcdir/gcc/DEV-PHASE`" = xexperimental; then
+ enable_werror=yes
+else
+ enable_werror=no
+fi])
+case ${enable_werror} in
+ yes) stage2_werror_flag="--enable-werror-always" ;;
+ *) stage2_werror_flag="" ;;
+esac
+AC_SUBST(stage2_werror_flag)
+
+# Flags needed to enable html installing and building
+AC_ARG_WITH(datarootdir,
+[ --with-datarootdir Use datarootdir as the data root directory.],
+[datarootdir="\${prefix}/${withval}"],
+[datarootdir="\${prefix}/share"])
+
+AC_ARG_WITH(docdir,
+[ --with-docdir Install documentation in this directory.],
+[docdir="\${prefix}/${withval}"],
+[docdir="\${datarootdir}/doc"])
+
+AC_ARG_WITH(pdfdir,
+[ --with-pdfdir Install pdf in this directory.],
+[pdfdir="\${prefix}/${withval}"],
+[pdfdir="\${docdir}"])
+
+AC_ARG_WITH(htmldir,
+[ --with-htmldir Install html in this directory.],
+[htmldir="\${prefix}/${withval}"],
+[htmldir="\${docdir}"])
+
+AC_SUBST(datarootdir)
+AC_SUBST(docdir)
+AC_SUBST(pdfdir)
+AC_SUBST(htmldir)
+
+AC_OUTPUT(Makefile)
diff --git a/configure.in b/configure.in
deleted file mode 100644
index b6ef515e01d1..000000000000
--- a/configure.in
+++ /dev/null
@@ -1,2407 +0,0 @@
-# Copyright (C) 1992, 1993, 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.
-
-##############################################################################
-### WARNING: this file contains embedded tabs. Do not run untabify on this file.
-
-sinclude(config/acx.m4)
-
-AC_INIT(move-if-change)
-AC_PREREQ(2.13)
-AC_CANONICAL_SYSTEM
-AC_ARG_PROGRAM
-
-# Get 'install' or 'install-sh' and its variants.
-AC_PROG_INSTALL
-ACX_PROG_LN
-AC_PROG_LN_S
-
-### we might need to use some other shell than /bin/sh for running subshells
-### If we are on Windows, search for the shell. This will permit people
-### to not have /bin/sh, but to be able to see /SOME/PATH/sh configure
-### without also having to set CONFIG_SHELL. This code will work when
-### using bash, which sets OSTYPE.
-case "${OSTYPE}" in
-*win32*)
- if test x${CONFIG_SHELL} = x ; then
- if test ! -f /bin/sh ; then
- if test x${SHELL} != x && test -f ${SHELL} ; then
- CONFIG_SHELL=${SHELL}
- export CONFIG_SHELL
- else
- for prog in sh sh.exe bash bash.exe; do
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:"
- for dir in $PATH; do
- test -z "$dir" && dir=.
- if test -f $dir/$prog; then
- CONFIG_SHELL=$dir/$prog
- export CONFIG_SHELL
- break
- fi
- done
- IFS="$save_ifs"
- test -n "${CONFIG_SHELL}" && break
- done
- fi
- fi
- fi
- ;;
-esac
-
-config_shell=${CONFIG_SHELL-/bin/sh}
-
-progname=$0
-# if PWD already has a value, it is probably wrong.
-if test -n "$PWD" ; then PWD=`${PWDCMD-pwd}`; fi
-
-# Export original configure arguments for use by sub-configures. These
-# will be expanded by make, so quote '$'.
-tmp="$progname $@"
-sed -e 's,\$,$$,g' <<EOF_SED > conftestsed.out
-$tmp
-EOF_SED
-TOPLEVEL_CONFIGURE_ARGUMENTS=`cat conftestsed.out`
-rm -f conftestsed.out
-AC_SUBST(TOPLEVEL_CONFIGURE_ARGUMENTS)
-
-moveifchange=${srcdir}/move-if-change
-
-srcpwd=`cd ${srcdir} ; ${PWDCMD-pwd}`
-
-# We pass INSTALL explicitly to sub-makes. Make sure that it is not
-# a relative path.
-if test "$INSTALL" = "${srcdir}/install-sh -c"; then
- INSTALL="${srcpwd}/install-sh -c"
-fi
-
-# Set srcdir to "." if that's what it is.
-# This is important for multilib support.
-pwd=`${PWDCMD-pwd}`
-if test "${pwd}" = "${srcpwd}" ; then
- srcdir=.
-fi
-
-topsrcdir=$srcpwd
-
-extra_host_args=
-
-### To add a new directory to the tree, first choose whether it is a target
-### or a host dependent tool. Then put it into the appropriate list
-### (library or tools, host or target), doing a dependency sort.
-
-# Subdirs will be configured in the order listed in build_configdirs,
-# configdirs, or target_configdirs; see the serialization section below.
-
-# Dependency sorting is only needed when *configuration* must be done in
-# a particular order. In all cases a dependency should be specified in
-# the Makefile, whether or not it's implicitly specified here.
-
-# Double entries in build_configdirs, configdirs, or target_configdirs may
-# cause circular dependencies and break everything horribly.
-
-# these library is used by various programs built for the build
-# environment
-#
-build_libs="build-libiberty"
-
-# these tools are built for the build environment
-build_tools="build-texinfo build-byacc build-flex build-bison build-m4 build-fixincludes"
-
-# these libraries are used by various programs built for the host environment
-#
-host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber"
-
-# these tools are built for the host environment
-# Note, the powerpc-eabi build depends on sim occurring before gdb in order to
-# know that we are building the simulator.
-# binutils, gas and ld appear in that order because it makes sense to run
-# "make check" in that particular order.
-host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar gnattools"
-
-# libgcj represents the runtime libraries only used by gcj.
-libgcj="target-libffi \
- target-boehm-gc \
- target-zlib \
- target-qthreads \
- target-libjava"
-
-# these libraries are built for the target environment, and are built after
-# the host libraries and the host tools (which may be a cross compiler)
-#
-target_libraries="target-libiberty \
- target-libgloss \
- target-newlib \
- target-libstdc++-v3 \
- target-libmudflap \
- target-libssp \
- target-libgcc-math \
- target-libgfortran \
- ${libgcj} \
- target-libobjc \
- target-libada \
- target-libgomp"
-
-# these tools are built using the target libraries, and are intended to
-# run only in the target environment
-#
-# note: any program that *uses* libraries that are in the "target_libraries"
-# list belongs in this list. those programs are also very likely
-# candidates for the "native_only" list which follows
-#
-target_tools="target-examples target-groff target-gperf target-rda"
-
-################################################################################
-
-## All tools belong in one of the four categories, and are assigned above
-## We assign ${configdirs} this way to remove all embedded newlines. This
-## is important because configure will choke if they ever get through.
-## ${configdirs} is directories we build using the host tools.
-## ${target_configdirs} is directories we build using the target tools.
-configdirs=`echo ${host_libs} ${host_tools}`
-target_configdirs=`echo ${target_libraries} ${target_tools}`
-build_configdirs=`echo ${build_libs} ${build_tools}`
-
-################################################################################
-
-srcname="gnu development package"
-
-# This gets set non-empty for some net releases of packages.
-appdirs=""
-
-# Define is_cross_compiler to save on calls to 'test'.
-is_cross_compiler=
-if test x"${host}" = x"${target}" ; then
- is_cross_compiler=no
-else
- is_cross_compiler=yes
-fi
-
-# Find the build and target subdir names.
-GCC_TOPLEV_SUBDIRS
-
-# Skipdirs are removed silently.
-skipdirs=
-# Noconfigdirs are removed loudly.
-noconfigdirs=""
-
-use_gnu_ld=
-# Make sure we don't let GNU ld be added if we didn't want it.
-if test x$with_gnu_ld = xno ; then
- use_gnu_ld=no
- noconfigdirs="$noconfigdirs ld"
-fi
-
-use_gnu_as=
-# Make sure we don't let GNU as be added if we didn't want it.
-if test x$with_gnu_as = xno ; then
- use_gnu_as=no
- noconfigdirs="$noconfigdirs gas"
-fi
-
-# some tools are so dependent upon X11 that if we're not building with X,
-# it's not even worth trying to configure, much less build, that tool.
-
-case ${with_x} in
- yes | "") ;; # the default value for this tree is that X11 is available
- no)
- skipdirs="${skipdirs} tk itcl libgui"
- # We won't be able to build gdbtk without X.
- enable_gdbtk=no
- ;;
- *) echo "*** bad value \"${with_x}\" for -with-x flag; ignored" 1>&2 ;;
-esac
-
-# Some tools are only suitable for building in a "native" situation.
-# Remove these if host!=target.
-native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff gprof target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf"
-
-# Similarly, some are only suitable for cross toolchains.
-# Remove these if host=target.
-cross_only="target-libgloss target-newlib target-opcodes"
-
-case $is_cross_compiler in
- no) skipdirs="${skipdirs} ${cross_only}" ;;
- yes) skipdirs="${skipdirs} ${native_only}" ;;
-esac
-
-# If both --with-headers and --with-libs are specified, default to
-# --without-newlib.
-if test x"${with_headers}" != x && test x"${with_headers}" != xno \
- && test x"${with_libs}" != x && test x"${with_libs}" != xno ; then
- if test x"${with_newlib}" = x ; then
- with_newlib=no
- fi
-fi
-
-# Recognize --with-newlib/--without-newlib.
-case ${with_newlib} in
- no) skipdirs="${skipdirs} target-newlib" ;;
- yes) skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'` ;;
-esac
-
-# Configure extra directories which are host specific
-
-case "${host}" in
- *-cygwin*)
- configdirs="$configdirs libtermcap" ;;
-esac
-
-# A target can indicate whether a language isn't supported for some reason.
-# Only spaces may be used in this macro; not newlines or tabs.
-unsupported_languages=
-
-# Remove more programs from consideration, based on the host or
-# target this usually means that a port of the program doesn't
-# exist yet.
-
-case "${host}" in
- hppa*64*-*-*)
- noconfigdirs="$noconfigdirs byacc"
- ;;
- i[[3456789]]86-*-vsta)
- noconfigdirs="$noconfigdirs tcl expect dejagnu make texinfo bison patch flex byacc send-pr gprof uudecode dejagnu diff guile perl itcl gnuserv gettext"
- ;;
- i[[3456789]]86-*-go32* | i[[3456789]]86-*-msdosdjgpp*)
- noconfigdirs="$noconfigdirs tcl tk expect dejagnu send-pr uudecode guile itcl gnuserv libffi"
- ;;
- i[[3456789]]86-*-mingw32*)
- # noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl itcl gnuserv"
- noconfigdirs="$noconfigdirs expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool"
- ;;
- i[[3456789]]86-*-beos*)
- noconfigdirs="$noconfigdirs tk itcl libgui gdb"
- ;;
- *-*-cygwin*)
- noconfigdirs="$noconfigdirs autoconf automake send-pr rcs guile perl"
- ;;
- *-*-netbsd*)
- noconfigdirs="$noconfigdirs rcs"
- ;;
- ppc*-*-pe)
- noconfigdirs="$noconfigdirs patch diff make tk tcl expect dejagnu autoconf automake texinfo bison send-pr gprof rcs guile perl itcl gnuserv"
- ;;
- powerpc-*-beos*)
- noconfigdirs="$noconfigdirs tk itcl libgui gdb dejagnu readline"
- ;;
-esac
-
-
-AC_ARG_ENABLE(libada,
-[ --enable-libada Builds libada directory],
-ENABLE_LIBADA=$enableval,
-ENABLE_LIBADA=yes)
-if test "${ENABLE_LIBADA}" != "yes" ; then
- noconfigdirs="$noconfigdirs gnattools"
-fi
-
-AC_ARG_ENABLE(libssp,
-[ --enable-libssp Builds libssp directory],
-ENABLE_LIBSSP=$enableval,
-ENABLE_LIBSSP=yes)
-
-# Set the default so we build libgcc-math for ix86 and x86_64
-AC_ARG_ENABLE(libgcc-math,
-[ --enable-libgcc-math Builds libgcc-math directory],,
-[
-case "${target}" in
- i?86-* | x86_64-* )
- enable_libgcc_math=yes ;;
- *)
- enable_libgcc_math=no ;;
-esac
-])
-
-# Save it here so that, even in case of --enable-libgcj, if the Java
-# front-end isn't enabled, we still get libgcj disabled.
-libgcj_saved=$libgcj
-case $enable_libgcj in
-yes)
- # If we reset it here, it won't get added to noconfigdirs in the
- # target-specific build rules, so it will be forcibly enabled
- # (unless the Java language itself isn't enabled).
- libgcj=
- ;;
-no)
- # Make sure we get it printed in the list of not supported target libs.
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
-esac
-
-
-# Disable libmudflap on some systems.
-if test x$enable_libmudflap = x ; then
- case "${target}" in
- *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
- # Enable libmudflap by default in GNU and friends.
- ;;
- *-*-freebsd*)
- # Enable libmudflap by default in FreeBSD.
- ;;
- *)
- # Disable it by default everywhere else.
- noconfigdirs="$noconfigdirs target-libmudflap"
- ;;
- esac
-fi
-
-# Disable libgomp on non POSIX hosted systems.
-if test x$enable_libgomp = x ; then
- # Enable libgomp by default on hosted POSIX systems.
- case "${target}" in
- *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
- ;;
- *-*-netbsd* | *-*-freebsd* | *-*-openbsd*)
- ;;
- *-*-solaris2* | *-*-sysv4* | *-*-irix* | *-*-osf* | *-*-hpux*)
- ;;
- *-*-darwin* | *-*-aix*)
- ;;
- *)
- noconfigdirs="$noconfigdirs target-libgomp"
- ;;
- esac
-fi
-
-
-case "${target}" in
- *-*-chorusos)
- noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
- ;;
- powerpc-*-darwin*)
- noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof"
- noconfigdirs="$noconfigdirs sim target-rda"
- ;;
- *-*-darwin*)
- noconfigdirs="$noconfigdirs ld gas gdb gprof"
- noconfigdirs="$noconfigdirs sim target-rda"
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- *-*-freebsd[[12]] | *-*-freebsd[[12]].* | *-*-freebsd*aout*)
- noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
- ;;
- *-*-freebsd*)
- noconfigdirs="$noconfigdirs target-newlib target-libgloss"
- if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
- && test -f /usr/local/include/gmp.h; then
- with_gmp=/usr/local
- fi
-
- # Skip some stuff that's unsupported on some FreeBSD configurations.
- case "${target}" in
- i*86-*-*) ;;
- alpha*-*-*) ;;
- *)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- esac
- ;;
- *-*-kaos*)
- # Remove unsupported stuff on all kaOS configurations.
- skipdirs="target-libiberty ${libgcj} target-libstdc++-v3 target-librx"
- skipdirs="$skipdirs target-libobjc target-examples target-groff target-gperf"
- skipdirs="$skipdirs zlib fastjar target-libjava target-boehm-gc target-zlib"
- noconfigdirs="$noconfigdirs target-libgloss"
- ;;
- *-*-netbsd*)
- # Skip some stuff on all NetBSD configurations.
- noconfigdirs="$noconfigdirs target-newlib target-libiberty target-libgloss"
-
- # Skip some stuff that's unsupported on some NetBSD configurations.
- case "${target}" in
- i*86-*-netbsdelf*) ;;
- arm*-*-netbsdelf*) ;;
- *)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- esac
- ;;
- *-*-netware*)
- noconfigdirs="$noconfigdirs target-newlib target-libiberty target-libgloss ${libgcj} target-libmudflap"
- ;;
- *-*-rtems*)
- noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
- ;;
- # The tpf target doesn't support gdb yet.
- *-*-tpf*)
- noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libiberty ${libgcj} target-libmudflap gdb tcl tk libgui itcl"
- ;;
- *-*-uclinux*)
- noconfigdirs="$noconfigdirs target-newlib target-libgloss target-rda ${libgcj}"
- ;;
- *-*-vxworks*)
- noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libiberty target-libstdc++-v3 ${libgcj}"
- ;;
- m32c-*-*)
- noconfigdirs="$noconfigdirs target-libstdc++-v3"
- ;;
- alpha*-dec-osf*)
- # ld works, but does not support shared libraries.
- # newlib is not 64 bit ready. I'm not sure about fileutils.
- # gas doesn't generate exception information.
- noconfigdirs="$noconfigdirs gas ld fileutils target-newlib target-libgloss"
- ;;
- alpha*-*-*vms*)
- noconfigdirs="$noconfigdirs gdb ld target-newlib target-libgloss ${libgcj}"
- ;;
- alpha*-*-linux*)
- # newlib is not 64 bit ready
- noconfigdirs="$noconfigdirs target-newlib target-libgloss"
- ;;
- alpha*-*-*)
- # newlib is not 64 bit ready
- noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
- ;;
- am33_2.0-*-linux*)
- noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
- ;;
- sh-*-linux*)
- noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
- ;;
- sh*-*-pe|mips*-*-pe|*arm-wince-pe)
- noconfigdirs="$noconfigdirs ${libgcj}"
- noconfigdirs="$noconfigdirs target-examples"
- noconfigdirs="$noconfigdirs target-libiberty texinfo send-pr"
- noconfigdirs="$noconfigdirs tcl tk itcl libgui sim"
- noconfigdirs="$noconfigdirs expect dejagnu"
- # the C++ libraries don't build on top of CE's C libraries
- noconfigdirs="$noconfigdirs target-libstdc++-v3"
- noconfigdirs="$noconfigdirs target-newlib"
- case "${host}" in
- *-*-cygwin*) ;; # keep gdb and readline
- *) noconfigdirs="$noconfigdirs gdb readline"
- ;;
- esac
- ;;
- arc-*-*)
- noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
- ;;
- arm-semi-aof )
- ;;
- arm-*-coff | strongarm-*-coff | xscale-*-coff)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )
- noconfigdirs="$noconfigdirs target-libffi target-qthreads"
- ;;
- arm*-*-linux-gnueabi)
- noconfigdirs="$noconfigdirs target-libffi target-qthreads"
- noconfigdirs="$noconfigdirs target-libjava target-libobjc"
- ;;
- arm*-*-symbianelf*)
- noconfigdirs="$noconfigdirs ${libgcj} target-libiberty"
- ;;
- arm-*-pe*)
- noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
- ;;
- thumb-*-coff)
- noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
- ;;
- thumb-*-elf)
- noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
- ;;
- thumb-*-pe)
- noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
- ;;
- arm-*-riscix*)
- noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
- ;;
- avr-*-*)
- noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
- ;;
- bfin-*-*)
- noconfigdirs="$noconfigdirs target-libgloss gdb"
- if test x${is_cross_compiler} != xno ; then
- target_configdirs="${target_configdirs} target-bsp target-cygmon"
- fi
- ;;
- c4x-*-* | tic4x-*-*)
- noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
- ;;
- c54x*-*-* | tic54x-*-*)
- noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} gcc gdb newlib"
- ;;
- cris-*-* | crisv32-*-*)
- unsupported_languages="$unsupported_languages java"
- case "${target}" in
- *-*-aout)
- unsupported_languages="$unsupported_languages fortran"
- noconfigdirs="$noconfigdirs target-libffi target-boehm-gc";;
- *-*-elf)
- unsupported_languages="$unsupported_languages fortran"
- noconfigdirs="$noconfigdirs target-boehm-gc";;
- *-*-linux*)
- noconfigdirs="$noconfigdirs target-newlib target-libgloss";;
- *)
- unsupported_languages="$unsupported_languages fortran"
- noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss";;
- esac
- ;;
- crx-*-*)
- noconfigdirs="$noconfigdirs target-libstdc++-v3 target-mudflap ${libgcj}"
- ;;
- d10v-*-*)
- noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
- ;;
- d30v-*-*)
- noconfigdirs="$noconfigdirs ${libgcj} gdb"
- ;;
- fr30-*-elf*)
- noconfigdirs="$noconfigdirs ${libgcj} gdb"
- ;;
- frv-*-*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- h8300*-*-*)
- noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
- ;;
- h8500-*-*)
- noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
- ;;
- hppa1.1-*-osf* | hppa1.1-*-bsd* )
- ;;
- hppa*64*-*-linux* | parisc*64*-*-linux*)
- # In this case, it's because the hppa64-linux target is for
- # the kernel only at this point and has no libc, and thus no
- # headers, crt*.o, etc., all of which are needed by these.
- noconfigdirs="$noconfigdirs target-zlib"
- ;;
- parisc*-*-linux* | hppa*-*-linux*)
- ;;
- hppa*-*-*elf* | \
- hppa*-*-lites* | \
- hppa*-*-openbsd* | \
- hppa*64*-*-*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- hppa*-*-*)
- # According to Alexandre Oliva <aoliva@redhat.com>, libjava won't
- # build on HP-UX 10.20.
- noconfigdirs="$noconfigdirs ld shellutils ${libgcj}"
- ;;
- i960-*-*)
- noconfigdirs="$noconfigdirs ${libgcj} gdb"
- ;;
- ia64*-*-elf*)
- # No gdb support yet.
- noconfigdirs="$noconfigdirs readline mmalloc libgui itcl gdb"
- ;;
- ia64*-**-hpux*)
- # No gdb or ld support yet.
- noconfigdirs="$noconfigdirs ${libgcj} readline mmalloc libgui itcl gdb ld"
- ;;
- i370-*-opened*)
- ;;
- i[[3456789]]86-*-coff | i[[3456789]]86-*-elf)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- i[[3456789]]86-*-linux*)
- # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
- # not build java stuff by default.
- case "${target}" in
- *-*-*libc1*)
- noconfigdirs="$noconfigdirs ${libgcj}";;
- esac
-
- # This section makes it possible to build newlib natively on linux.
- # If we are using a cross compiler then don't configure newlib.
- if test x${is_cross_compiler} != xno ; then
- noconfigdirs="$noconfigdirs target-newlib"
- fi
- noconfigdirs="$noconfigdirs target-libgloss"
- # If we are not using a cross compiler, do configure newlib.
- # Note however, that newlib will only be configured in this situation
- # if the --with-newlib option has been given, because otherwise
- # 'target-newlib' will appear in skipdirs.
- ;;
- i[[3456789]]86-*-mingw32*)
- target_configdirs="$target_configdirs target-mingw"
- noconfigdirs="$noconfigdirs expect target-libgloss ${libgcj}"
-
- # Can't build gdb for mingw32 if not native.
- case "${host}" in
- i[[3456789]]86-*-mingw32) ;; # keep gdb tcl tk expect etc.
- *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl gnuserv"
- ;;
- esac
- ;;
- *-*-cygwin*)
- target_configdirs="$target_configdirs target-libtermcap target-winsup"
- noconfigdirs="$noconfigdirs target-gperf target-libgloss ${libgcj}"
- # always build newlib if winsup directory is present.
- if test -d "$srcdir/winsup"; then
- skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
- elif test -d "$srcdir/newlib"; then
- echo "Warning: winsup is missing so newlib can't be built."
- fi
-
- # Can't build gdb for Cygwin if not native.
- case "${host}" in
- *-*-cygwin*) ;; # keep gdb tcl tk expect etc.
- *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl libgui gnuserv"
- ;;
- esac
- ;;
- i[[3456789]]86-moss-msdos | i[[3456789]]86-*-moss* | \
- i[[3456789]]86-*-uwin* | i[[3456789]]86-*-interix* )
- ;;
- i[[3456789]]86-*-pe)
- noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
- ;;
- i[[3456789]]86-*-sco3.2v5*)
- # The linker does not yet know about weak symbols in COFF,
- # and is not configured to handle mixed ELF and COFF.
- noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
- ;;
- i[[3456789]]86-*-sco*)
- noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
- ;;
- i[[3456789]]86-*-solaris2*)
- noconfigdirs="$noconfigdirs target-libgloss"
- ;;
- i[[3456789]]86-*-sysv4*)
- noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
- ;;
- i[[3456789]]86-*-beos*)
- noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
- ;;
- i[[3456789]]86-*-rdos*)
- noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss"
- ;;
- m32r-*-*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
- noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
- ;;
- m68k-*-elf*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- m68k-*-coff*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- mcore-*-pe*)
- # The EPOC C++ environment does not support exceptions or rtti,
- # and so building libstdc++-v3 tends not to always work.
- noconfigdirs="$noconfigdirs target-libstdc++-v3"
- ;;
- mmix-*-*)
- noconfigdirs="$noconfigdirs target-libffi target-boehm-gc gdb libgloss"
- unsupported_languages="$unsupported_languages fortran java"
- ;;
- mn10200-*-*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- mn10300-*-*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- mt-*-*)
- noconfigdirs="$noconfigdirs sim"
- ;;
- powerpc-*-aix*)
- # copied from rs6000-*-* entry
- noconfigdirs="$noconfigdirs gprof target-libgloss target-libssp ${libgcj}"
- ;;
- powerpc*-*-winnt* | powerpc*-*-pe* | ppc*-*-pe)
- target_configdirs="$target_configdirs target-winsup"
- noconfigdirs="$noconfigdirs gdb tcl tk make expect target-libgloss itcl gnuserv ${libgcj}"
- # always build newlib.
- skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
- ;;
- # This is temporary until we can link against shared libraries
- powerpcle-*-solaris*)
- noconfigdirs="$noconfigdirs gdb sim make tcl tk expect itcl gnuserv ${libgcj}"
- ;;
- powerpc-*-beos*)
- noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
- ;;
- powerpc-*-eabi)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- powerpc-*-eabi* | powerpcle-*-eabi* | powerpc-*-rtems* )
- ;;
- rs6000-*-lynxos*)
- noconfigdirs="$noconfigdirs target-newlib gprof ${libgcj}"
- ;;
- rs6000-*-aix*)
- noconfigdirs="$noconfigdirs gprof target-libgloss target-libssp ${libgcj}"
- ;;
- rs6000-*-*)
- noconfigdirs="$noconfigdirs gprof ${libgcj}"
- ;;
- m68k-apollo-*)
- noconfigdirs="$noconfigdirs ld binutils gprof target-libgloss ${libgcj}"
- ;;
- mips*-*-irix5*)
- noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
- ;;
- mips*-*-irix6*)
- # Linking libjava exceeds command-line length limits on at least
- # IRIX 6.2, but not on IRIX 6.5.
- # Also, boehm-gc won't build on IRIX 6.5, according to Jeffrey Oldham
- # <oldham@codesourcery.com>
- noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
- ;;
- mips*-dec-bsd*)
- noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
- ;;
- mips*-*-bsd*)
- noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
- ;;
- mipstx39-*-*)
- noconfigdirs="$noconfigdirs gprof ${libgcj}" # same as generic mips
- ;;
- mips64*-*-linux*)
- noconfigdirs="$noconfigdirs target-newlib ${libgcj}"
- ;;
- mips*-*-linux*)
- noconfigdirs="$noconfigdirs target-newlib target-libgloss"
- ;;
- mips*-*-*)
- noconfigdirs="$noconfigdirs gprof ${libgcj}"
- ;;
- romp-*-*)
- noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
- ;;
- sh-*-* | sh64-*-*)
- case "${host}" in
- i[[3456789]]86-*-vsta) ;; # don't add gprof back in
- i[[3456789]]86-*-go32*) ;; # don't add gprof back in
- i[[3456789]]86-*-msdosdjgpp*) ;; # don't add gprof back in
- *) skipdirs=`echo " ${skipdirs} " | sed -e 's/ gprof / /'` ;;
- esac
- noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
- ;;
- sparc-*-elf*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- sparc64-*-elf*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- sparclite-*-*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- sparc-*-sunos4*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- if test x${is_cross_compiler} != xno ; then
- noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss"
- else
- use_gnu_ld=no
- fi
- ;;
- sparc-*-solaris2.[[0-6]] | sparc-*-solaris2.[[0-6]].*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- sparc-*-solaris* | sparc64-*-solaris* | sparcv9-*-solaris*)
- ;;
- v810-*-*)
- noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld target-libstdc++-v3 opcodes target-libgloss ${libgcj}"
- ;;
- v850-*-*)
- noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
- ;;
- v850e-*-*)
- noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
- ;;
- v850ea-*-*)
- noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
- ;;
- vax-*-vms)
- noconfigdirs="$noconfigdirs bfd binutils gdb ld target-newlib opcodes target-libgloss ${libgcj}"
- ;;
- vax-*-*)
- noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
- ;;
- xtensa-*-*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
- ip2k-*-*)
- noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
- ;;
- *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
- noconfigdirs="$noconfigdirs target-newlib target-libgloss"
- ;;
- *-*-lynxos*)
- noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
- ;;
- *-*-*)
- noconfigdirs="$noconfigdirs ${libgcj}"
- ;;
-esac
-
-# If we aren't building newlib, then don't build libgloss, since libgloss
-# depends upon some newlib header files.
-case "${noconfigdirs}" in
- *target-libgloss*) ;;
- *target-newlib*) noconfigdirs="$noconfigdirs target-libgloss" ;;
-esac
-
-# Work in distributions that contain no compiler tools, like Autoconf.
-tentative_cc=""
-host_makefile_frag=/dev/null
-if test -d ${srcdir}/config ; then
-case "${host}" in
- m68k-hp-hpux*)
- # Avoid "too much defining" errors from HPUX compiler.
- tentative_cc="cc -Wp,-H256000"
- # If "ar" in $PATH is GNU ar, the symbol table may need rebuilding.
- # If it's HP/UX ar, this should be harmless.
- RANLIB="ar ts"
- ;;
- m68k-apollo-sysv*)
- tentative_cc="cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DUSG"
- ;;
- m68k-apollo-bsd*)
- #None of the Apollo compilers can compile gas or binutils. The preprocessor
- # chokes on bfd, the compiler won't let you assign integers to enums, and
- # other problems. Defining CC to gcc is a questionable way to say "don't use
- # the apollo compiler" (the preferred version of GCC could be called cc,
- # or whatever), but I'm not sure leaving CC as cc is any better...
- #CC=cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DNO_STDARG
- # Used to have BISON=yacc.
- tentative_cc=gcc
- ;;
- m88k-dg-dgux*)
- tentative_cc="gcc -Wall -ansi -D__using_DGUX"
- ;;
- m88k-harris-cxux*)
- # Under CX/UX, we want to tell the compiler to use ANSI mode.
- tentative_cc="cc -Xa"
- host_makefile_frag="config/mh-cxux"
- ;;
- m88k-motorola-sysv*)
- ;;
- mips*-dec-ultrix*)
- tentative_cc="cc -Wf,-XNg1000"
- host_makefile_frag="config/mh-decstation"
- ;;
- mips*-nec-sysv4*)
- # The C compiler on NEC MIPS SVR4 needs bigger tables.
- tentative_cc="cc -ZXNd=5000 -ZXNg=1000"
- host_makefile_frag="config/mh-necv4"
- ;;
- mips*-sgi-irix4*)
- # Tell compiler to use K&R C. We can't compile under the SGI Ansi
- # environment. Also bump switch table size so that cp-parse will
- # compile. Bump string length limit so linker builds.
- tentative_cc="cc -cckr -Wf,-XNg1500 -Wf,-XNk1000 -Wf,-XNh2000 -Wf,-XNl8192"
- ;;
- mips*-*-sysv4*)
- host_makefile_frag="config/mh-sysv4"
- ;;
- mips*-*-sysv*)
- # This is for a MIPS running RISC/os 4.52C.
-
- # This is needed for GDB, but needs to be in the top-level make because
- # if a library is compiled with the bsd headers and gets linked with the
- # sysv system libraries all hell can break loose (e.g. a jmp_buf might be
- # a different size).
- # ptrace(2) apparently has problems in the BSD environment. No workaround is
- # known except to select the sysv environment. Could we use /proc instead?
- # These "sysv environments" and "bsd environments" often end up being a pain.
- #
- # This is not part of CFLAGS because perhaps not all C compilers have this
- # option.
- tentative_cc="cc -systype sysv"
- ;;
- i370-ibm-opened*)
- tentative_cc="c89"
- ;;
- i[[3456789]]86-*-sysv5*)
- host_makefile_frag="config/mh-sysv5"
- ;;
- i[[3456789]]86-*-dgux*)
- tentative_cc="gcc -Wall -ansi -D__using_DGUX"
- host_makefile_frag="config/mh-dgux386"
- ;;
- i[[3456789]]86-ncr-sysv4.3*)
- # The MetaWare compiler will generate a copyright message unless you
- # turn it off by adding the -Hnocopyr flag.
- tentative_cc="cc -Hnocopyr"
- ;;
- i[[3456789]]86-ncr-sysv4*)
- # for an NCR 3000 (i486/SVR4) system.
- # The NCR 3000 ships with a MetaWare compiler installed as /bin/cc.
- # This compiler not only emits obnoxious copyright messages every time
- # you run it, but it chokes and dies on a whole bunch of GNU source
- # files. Default to using the AT&T compiler installed in /usr/ccs/ATT/cc.
- tentative_cc="/usr/ccs/ATT/cc"
- host_makefile_frag="config/mh-ncr3000"
- ;;
- i[[3456789]]86-*-sco3.2v5*)
- ;;
- i[[3456789]]86-*-sco*)
- # The native C compiler botches some simple uses of const. Unfortunately,
- # it doesn't defined anything like "__sco__" for us to test for in ansidecl.h.
- tentative_cc="cc -Dconst="
- host_makefile_frag="config/mh-sco"
- ;;
- i[[3456789]]86-*-udk*)
- host_makefile_frag="config/mh-sysv5"
- ;;
- i[[3456789]]86-*-solaris2*)
- host_makefile_frag="config/mh-sysv4"
- ;;
- i[[3456789]]86-*-msdosdjgpp*)
- host_makefile_frag="config/mh-djgpp"
- ;;
- *-cygwin*)
- host_makefile_frag="config/mh-cygwin"
- ;;
- *-mingw32*)
- ;;
- *-interix*)
- host_makefile_frag="config/mh-interix"
- ;;
- vax-*-ultrix2*)
- # The old BSD pcc isn't up to compiling parts of gdb so use gcc
- tentative_cc=gcc
- ;;
- *-*-solaris2*)
- host_makefile_frag="config/mh-solaris"
- ;;
- m68k-sun-sunos*)
- # Sun's C compiler needs the -J flag to be able to compile cp-parse.c
- # without overflowing the jump tables (-J says to use a 32 bit table)
- tentative_cc="cc -J"
- ;;
- *-hp-hpux*)
- tentative_cc="cc -Wp,-H256000"
- ;;
- *-*-hiux*)
- tentative_cc="cc -Wp,-H256000"
- ;;
- rs6000-*-lynxos*)
- # /bin/cc is less than useful for our purposes. Always use GCC
- tentative_cc="/usr/cygnus/progressive/bin/gcc"
- host_makefile_frag="config/mh-lynxrs6k"
- ;;
- powerpc-*-darwin*)
- host_makefile_frag="config/mh-ppc-darwin"
- ;;
- powerpc-*-aix*)
- host_makefile_frag="config/mh-ppc-aix"
- ;;
- rs6000-*-aix*)
- host_makefile_frag="config/mh-ppc-aix"
- ;;
- *-*-lynxos*)
- # /bin/cc is less than useful for our purposes. Always use GCC
- tentative_cc="/bin/gcc"
- ;;
- *-*-sysv4*)
- host_makefile_frag="config/mh-sysv4"
- ;;
- # This is placed last to prevent interfering with the cases above.
- i[[3456789]]86-*-*)
- # Build the stage2 and stage3 compilers with -fomit-frame-pointer.
- host_makefile_frag="config/mh-x86omitfp"
- ;;
-esac
-fi
-
-# If we aren't going to be using gcc, see if we can extract a definition
-# of CC from the fragment.
-# Actually, use the 'pre-extracted' version above.
-if test -z "${CC}" && test "${build}" = "${host}" ; then
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:"
- found=
- for dir in $PATH; do
- test -z "$dir" && dir=.
- if test -f $dir/gcc; then
- found=yes
- break
- fi
- done
- IFS="$save_ifs"
- if test -z "${found}" && test -n "${tentative_cc}" ; then
- CC=$tentative_cc
- fi
-fi
-
-if test "${build}" != "${host}" ; then
- # If we are doing a Canadian Cross, in which the host and build systems
- # are not the same, we set reasonable default values for the tools.
-
- CC=${CC-${host_alias}-gcc}
- CFLAGS=${CFLAGS-"-g -O2"}
- CXX=${CXX-${host_alias}-c++}
- CXXFLAGS=${CXXFLAGS-"-g -O2"}
- CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
-
-else
- # Set reasonable default values for some tools even if not Canadian.
- # Of course, these are different reasonable default values, originally
- # specified directly in the Makefile.
- # We don't export, so that autoconf can do its job.
- # Note that all these settings are above the fragment inclusion point
- # in Makefile.in, so can still be overridden by fragments.
- # This is all going to change when we autoconfiscate...
-
- CC_FOR_BUILD="\$(CC)"
- AC_PROG_CC
-
- # We must set the default linker to the linker used by gcc for the correct
- # operation of libtool. If LD is not defined and we are using gcc, try to
- # set the LD default to the ld used by gcc.
- if test -z "$LD"; then
- if test "$GCC" = yes; then
- case $build in
- *-*-mingw*)
- gcc_prog_ld=`$CC -print-prog-name=ld 2>&1 | tr -d '\015'` ;;
- *)
- gcc_prog_ld=`$CC -print-prog-name=ld 2>&1` ;;
- esac
- case $gcc_prog_ld in
- # Accept absolute paths.
- [[\\/]* | [A-Za-z]:[\\/]*)]
- LD="$gcc_prog_ld" ;;
- esac
- fi
- fi
-
- CXX=${CXX-"c++"}
- CFLAGS=${CFLAGS-"-g"}
- CXXFLAGS=${CXXFLAGS-"-g -O2"}
-fi
-
-ACX_PROG_GNAT
-ACX_PROG_CMP_IGNORE_INITIAL
-
-# Check for GMP and MPFR
-gmplibs=
-gmpinc=
-have_gmp=yes
-# Specify a location for mpfr
-# check for this first so it ends up on the link line before gmp.
-AC_ARG_WITH(mpfr-dir, [ --with-mpfr-dir=PATH Specify source directory for MPFR library])
-
-if test "x$with_mpfr_dir" != x; then
- gmpinc="-I$with_mpfr_dir"
- gmplibs="$with_mpfr_dir/libmpfr.a"
-else
- gmplibs="-lmpfr"
-fi
-
-AC_ARG_WITH(mpfr, [ --with-mpfr=PATH Specify directory for installed MPFR library])
-
-if test "x$with_mpfr" != x; then
- gmplibs="-L$with_mpfr/lib $gmplibs"
- gmpinc="-I$with_mpfr/include"
-fi
-
-# Specify a location for gmp
-AC_ARG_WITH(gmp-dir, [ --with-gmp-dir=PATH Specify source directory for GMP library])
-
-if test "x$with_gmp_dir" != x; then
- gmpinc="$gmpinc -I$with_gmp_dir"
- if test -f "$with_gmp_dir/.libs/libgmp.a"; then
- gmplibs="$gmplibs $with_gmp_dir/.libs/libgmp.a"
- elif test -f "$with_gmp_dir/_libs/libgmp.a"; then
- gmplibs="$gmplibs $with_gmp_dir/_libs/libgmp.a"
- fi
- # One of the later tests will catch the error if neither library is present.
-else
- gmplibs="$gmplibs -lgmp"
-fi
-
-AC_ARG_WITH(gmp, [ --with-gmp=PATH Specify directory for installed GMP library])
-
-if test "x$with_gmp" != x; then
- gmplibs="-L$with_gmp/lib $gmplibs"
- gmpinc="-I$with_gmp/include $gmpinc"
-fi
-
-saved_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS $gmpinc"
-# Check GMP actually works
-AC_MSG_CHECKING([for correct version of gmp.h])
-AC_TRY_COMPILE([#include "gmp.h"],[
-#if __GNU_MP_VERSION < 3
-choke me
-#endif
-], [AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no]); have_gmp=no])
-
-if test x"$have_gmp" = xyes; then
- AC_MSG_CHECKING([for MPFR])
-
- saved_LIBS="$LIBS"
- LIBS="$LIBS $gmplibs"
- AC_TRY_LINK([#include <gmp.h>
-#include <mpfr.h>], [mpfr_t n; mpfr_init(n);],
- [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); have_gmp=no])
- LIBS="$saved_LIBS"
- CFLAGS="$saved_CFLAGS"
-fi
-
-# Flags needed for both GMP and/or MPFR
-AC_SUBST(gmplibs)
-AC_SUBST(gmpinc)
-
-# By default, C is the only stage 1 language.
-stage1_languages=c
-AC_SUBST(stage1_languages)
-
-# Figure out what language subdirectories are present.
-# Look if the user specified --enable-languages="..."; if not, use
-# the environment variable $LANGUAGES if defined. $LANGUAGES might
-# go away some day.
-# NB: embedded tabs in this IF block -- do not untabify
-if test -d ${srcdir}/gcc; then
- if test x"${enable_languages+set}" != xset; then
- if test x"${LANGUAGES+set}" = xset; then
- enable_languages="${LANGUAGES}"
- echo configure.in: warning: setting LANGUAGES is deprecated, use --enable-languages instead 1>&2
- else
- enable_languages=all
- fi
- else
- if test x"${enable_languages}" = x ||
- test x"${enable_languages}" = xyes;
- then
- echo configure.in: --enable-languages needs at least one language argument 1>&2
- exit 1
- fi
- fi
- enable_languages=`echo "${enable_languages}" | sed -e 's/[[ ,]][[ ,]]*/,/g' -e 's/,$//'`
-
- # 'f95' is the old name for the 'fortran' language. We issue a warning
- # and make the substitution.
- case ,${enable_languages}, in
- *,f95,*)
- echo configure.in: warning: 'f95' as language name is deprecated, use 'fortran' instead 1>&2
- enable_languages=`echo "${enable_languages}" | sed -e 's/f95/fortran/g'`
- ;;
- esac
-
- # First scan to see if an enabled language requires some other language.
- # We assume that a given config-lang.in will list all the language
- # front ends it requires, even if some are required indirectly.
- for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
- case ${lang_frag} in
- ..) ;;
- # The odd quoting in the next line works around
- # an apparent bug in bash 1.12 on linux.
- ${srcdir}/gcc/[[*]]/config-lang.in) ;;
- *)
- # From the config-lang.in, get $language, $lang_requires
- language=
- lang_requires=
- . ${lang_frag}
- for other in ${lang_requires} ; do
- case ,${enable_languages}, in
- *,$other,*) ;;
- *,all,*) ;;
- *,$language,*)
- echo " \`$other' language required by \`$language'; enabling" 1>&2
- enable_languages="${enable_languages},${other}"
- ;;
- esac
- done
- ;;
- esac
- done
-
- new_enable_languages=c
- missing_languages=`echo ",$enable_languages," | sed -e s/,all,/,/ -e s/,c,/,/ `
- potential_languages=c
-
- for lang_frag in ${srcdir}/gcc/*/config-lang.in .. ; do
- case ${lang_frag} in
- ..) ;;
- # The odd quoting in the next line works around
- # an apparent bug in bash 1.12 on linux.
- ${srcdir}/gcc/[[*]]/config-lang.in) ;;
- *)
- # From the config-lang.in, get $language, $target_libs,
- # $lang_dirs, $boot_language, and $build_by_default
- language=
- target_libs=
- lang_dirs=
- boot_language=
- build_by_default=
- need_gmp=
- . ${lang_frag}
- potential_languages="${potential_languages},${language}"
- # This is quite sensitive to the ordering of the case statement arms.
- case ,${enable_languages},:${language}:${have_gnat}:${build_by_default} in
- *::*:*)
- echo "${lang_frag} doesn't set \$language." 1>&2
- exit 1
- ;;
- *:ada:no:*)
- # Ada was requested with no preexisting GNAT. Disable unconditionally.
- add_this_lang=no
- ;;
- *,${language},*:*:*:*)
- # Language was explicitly selected; include it.
- add_this_lang=yes
- ;;
- *,all,*:*:*:no)
- # 'all' was selected, but this is not a default language
- # so do not include it.
- add_this_lang=no
- ;;
- *,all,*:*:*:*)
- # 'all' was selected and this is a default language; include it.
- add_this_lang=yes
- ;;
- *)
- add_this_lang=no
- ;;
- esac
-
- # Disable languages that need GMP if it isn't available.
- case ,${enable_languages},:${have_gmp}:${need_gmp} in
- *,${language},*:no:yes)
- # Specifically requested language; tell them.
- AC_MSG_ERROR([GMP with MPFR support is required to build $language])
- ;;
- *:no:yes)
- # Silently disable.
- add_this_lang=no
- ;;
- esac
-
- # Disable a language that is unsupported by the target.
- case " $unsupported_languages " in
- *" $language "*)
- add_this_lang=no
- ;;
- esac
-
- case $add_this_lang in
- no)
- # Remove language-dependent dirs.
- eval noconfigdirs='"$noconfigdirs "'\"$target_libs $lang_dirs\"
- ;;
- *)
- new_enable_languages="$new_enable_languages,$language"
- missing_languages=`echo "$missing_languages" | sed "s/,$language,/,/"`
- case ${boot_language} in
- yes)
- # Add to (comma-separated) list of stage 1 languages.
- stage1_languages="${stage1_languages},${language}"
- ;;
- esac
- ;;
- esac
- ;;
- esac
- done
-
- missing_languages=`echo "$missing_languages" | sed -e "s/^,//" -e "s/,$//"`
- if test "x$missing_languages" != x; then
- AC_MSG_ERROR([
-The following requested languages could not be built: ${missing_languages}
-Recognised languages are: ${potential_languages}])
- fi
-
- if test "x$new_enable_languages" != "x$enable_languages"; then
- echo The following languages will be built: ${new_enable_languages}
- fi
- enable_languages="$new_enable_languages"
- ac_configure_args=`echo " $ac_configure_args" | sed -e 's/ --enable-languages=[[^ ]]*//' -e 's/$/ --enable-languages='"$enable_languages"/ `
-fi
-
-# Handle --disable-<component> generically.
-for dir in $configdirs $build_configdirs $target_configdirs ; do
- dirname=`echo $dir | sed -e s/target-//g -e s/build-//g -e s/-/_/g`
- if eval test x\${enable_${dirname}} "=" xno ; then
- noconfigdirs="$noconfigdirs $dir"
- fi
-done
-
-# Remove the entries in $skipdirs and $noconfigdirs from $configdirs,
-# $build_configdirs and $target_configdirs.
-# If we have the source for $noconfigdirs entries, add them to $notsupp.
-
-notsupp=""
-for dir in . $skipdirs $noconfigdirs ; do
- dirname=`echo $dir | sed -e s/target-//g -e s/build-//g`
- if test $dir != . && echo " ${configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
- configdirs=`echo " ${configdirs} " | sed -e "s/ ${dir} / /"`
- if test -r $srcdir/$dirname/configure ; then
- if echo " ${skipdirs} " | grep " ${dir} " >/dev/null 2>&1; then
- true
- else
- notsupp="$notsupp $dir"
- fi
- fi
- fi
- if test $dir != . && echo " ${build_configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
- build_configdirs=`echo " ${build_configdirs} " | sed -e "s/ ${dir} / /"`
- if test -r $srcdir/$dirname/configure ; then
- if echo " ${skipdirs} " | grep " ${dir} " >/dev/null 2>&1; then
- true
- else
- notsupp="$notsupp $dir"
- fi
- fi
- fi
- if test $dir != . && echo " ${target_configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
- target_configdirs=`echo " ${target_configdirs} " | sed -e "s/ ${dir} / /"`
- if test -r $srcdir/$dirname/configure ; then
- if echo " ${skipdirs} " | grep " ${dir} " >/dev/null 2>&1; then
- true
- else
- notsupp="$notsupp $dir"
- fi
- fi
- fi
-done
-
-# Sometimes the tools are distributed with libiberty but with no other
-# libraries. In that case, we don't want to build target-libiberty.
-if test -n "${target_configdirs}" ; then
- others=
- for i in `echo ${target_configdirs} | sed -e s/target-//g` ; do
- if test "$i" != "libiberty" ; then
- if test -r $srcdir/$i/configure ; then
- others=yes;
- break;
- fi
- fi
- done
- if test -z "${others}" ; then
- target_configdirs=
- fi
-fi
-
-# Quietly strip out all directories which aren't configurable in this tree.
-# This relies on all configurable subdirectories being autoconfiscated, which
-# is now the case.
-build_configdirs_all="$build_configdirs"
-build_configdirs=
-for i in ${build_configdirs_all} ; do
- j=`echo $i | sed -e s/build-//g`
- if test -f ${srcdir}/$j/configure ; then
- build_configdirs="${build_configdirs} $i"
- fi
-done
-
-configdirs_all="$configdirs"
-configdirs=
-for i in ${configdirs_all} ; do
- if test -f ${srcdir}/$i/configure ; then
- configdirs="${configdirs} $i"
- fi
-done
-
-target_configdirs_all="$target_configdirs"
-target_configdirs=
-for i in ${target_configdirs_all} ; do
- j=`echo $i | sed -e s/target-//g`
- if test -f ${srcdir}/$j/configure ; then
- target_configdirs="${target_configdirs} $i"
- fi
-done
-
-# Produce a warning message for the subdirs we can't configure.
-# This isn't especially interesting in the Cygnus tree, but in the individual
-# FSF releases, it's important to let people know when their machine isn't
-# supported by the one or two programs in a package.
-
-if test -n "${notsupp}" && test -z "${norecursion}" ; then
- # If $appdirs is non-empty, at least one of those directories must still
- # be configured, or we error out. (E.g., if the gas release supports a
- # specified target in some subdirs but not the gas subdir, we shouldn't
- # pretend that all is well.)
- if test -n "$appdirs" ; then
- for dir in $appdirs ; do
- if test -r $dir/Makefile.in ; then
- if echo " ${configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
- appdirs=""
- break
- fi
- if echo " ${target_configdirs} " | grep " target-${dir} " >/dev/null 2>&1; then
- appdirs=""
- break
- fi
- fi
- done
- if test -n "$appdirs" ; then
- echo "*** This configuration is not supported by this package." 1>&2
- exit 1
- fi
- fi
- # Okay, some application will build, or we don't care to check. Still
- # notify of subdirs not getting built.
- echo "*** This configuration is not supported in the following subdirectories:" 1>&2
- echo " ${notsupp}" 1>&2
- echo " (Any other directories should still work fine.)" 1>&2
-fi
-
-case "$host" in
- *msdosdjgpp*)
- enable_gdbtk=no ;;
-esac
-
-copy_dirs=
-
-AC_ARG_WITH([build-sysroot],
- [ --with-build-sysroot=sysroot
- use sysroot as the system root during the build],
- [if test x"$withval" != x ; then
- SYSROOT_CFLAGS_FOR_TARGET="--sysroot=$withval"
- fi],
- [SYSROOT_CFLAGS_FOR_TARGET=])
-AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET)
-
-# Handle --with-headers=XXX. If the value is not "yes", the contents of
-# the named directory are copied to $(tooldir)/sys-include.
-if test x"${with_headers}" != x && test x"${with_headers}" != xno ; then
- if test x${is_cross_compiler} = xno ; then
- echo 1>&2 '***' --with-headers is only supported when cross compiling
- exit 1
- fi
- if test x"${with_headers}" != xyes ; then
- case "${exec_prefixoption}" in
- "") x=${prefix} ;;
- *) x=${exec_prefix} ;;
- esac
- copy_dirs="${copy_dirs} ${with_headers} $x/${target_alias}/sys-include"
- fi
-fi
-
-# Handle --with-libs=XXX. If the value is not "yes", the contents of
-# the name directories are copied to $(tooldir)/lib. Multiple directories
-# are permitted.
-if test x"${with_libs}" != x && test x"${with_libs}" != xno ; then
- if test x${is_cross_compiler} = xno ; then
- echo 1>&2 '***' --with-libs is only supported when cross compiling
- exit 1
- fi
- if test x"${with_libs}" != xyes ; then
- # Copy the libraries in reverse order, so that files in the first named
- # library override files in subsequent libraries.
- case "${exec_prefixoption}" in
- "") x=${prefix} ;;
- *) x=${exec_prefix} ;;
- esac
- for l in ${with_libs}; do
- copy_dirs="$l $x/${target_alias}/lib ${copy_dirs}"
- done
- fi
-fi
-
-# Set with_gnu_as and with_gnu_ld as appropriate.
-#
-# This is done by determining whether or not the appropriate directory
-# is available, and by checking whether or not specific configurations
-# have requested that this magic not happen.
-#
-# The command line options always override the explicit settings in
-# configure.in, and the settings in configure.in override this magic.
-#
-# If the default for a toolchain is to use GNU as and ld, and you don't
-# want to do that, then you should use the --without-gnu-as and
-# --without-gnu-ld options for the configure script.
-
-if test x${use_gnu_as} = x &&
- echo " ${configdirs} " | grep " gas " > /dev/null 2>&1 ; then
- with_gnu_as=yes
- extra_host_args="$extra_host_args --with-gnu-as"
-fi
-
-if test x${use_gnu_ld} = x &&
- echo " ${configdirs} " | grep " ld " > /dev/null 2>&1 ; then
- with_gnu_ld=yes
- extra_host_args="$extra_host_args --with-gnu-ld"
-fi
-
-# If using newlib, add --with-newlib to the extra_host_args so that gcc/configure
-# can detect this case.
-
-if test x${with_newlib} != xno && echo " ${target_configdirs} " | grep " target-newlib " > /dev/null 2>&1 ; then
- with_newlib=yes
- extra_host_args="$extra_host_args --with-newlib"
-fi
-
-# Handle ${copy_dirs}
-set fnord ${copy_dirs}
-shift
-while test $# != 0 ; do
- if test -f $2/COPIED && test x"`cat $2/COPIED`" = x"$1" ; then
- :
- else
- echo Copying $1 to $2
-
- # Use the install script to create the directory and all required
- # parent directories.
- if test -d $2 ; then
- :
- else
- echo >config.temp
- ${srcdir}/install-sh -c -m 644 config.temp $2/COPIED
- fi
-
- # Copy the directory, assuming we have tar.
- # FIXME: Should we use B in the second tar? Not all systems support it.
- (cd $1; tar -cf - .) | (cd $2; tar -xpf -)
-
- # It is the responsibility of the user to correctly adjust all
- # symlinks. If somebody can figure out how to handle them correctly
- # here, feel free to add the code.
-
- echo $1 > $2/COPIED
- fi
- shift; shift
-done
-
-# Determine a target-dependent exec_prefix that the installed
-# gcc will search in. Keep this list sorted by triplet, with
-# the *-*-osname triplets last.
-md_exec_prefix=
-case "${target}" in
- alpha*-*-*vms*)
- md_exec_prefix=/gnu/lib/gcc-lib
- ;;
- i[34567]86-pc-msdosdjgpp*)
- md_exec_prefix=/dev/env/DJDIR/bin
- ;;
- i[34567]86-*-sco3.2v5*)
- if test $with_gnu_as = yes; then
- md_exec_prefix=/usr/gnu/bin
- else
- md_exec_prefix=/usr/ccs/bin/elf
- fi
- ;;
-
- mn10300-*-* | \
- powerpc-*-chorusos* | \
- powerpc*-*-eabi* | \
- powerpc*-*-sysv* | \
- powerpc*-*-kaos* | \
- s390x-ibm-tpf*)
- md_exec_prefix=/usr/ccs/bin
- ;;
- sparc64-*-elf*)
- ;;
- v850*-*-*)
- md_exec_prefix=/usr/ccs/bin
- ;;
- xtensa-*-elf*)
- ;;
-
- *-*-beos* | \
- *-*-elf* | \
- *-*-hpux* | \
- *-*-netware* | \
- *-*-nto-qnx* | \
- *-*-rtems* | \
- *-*-solaris2* | \
- *-*-sysv[45]* | \
- *-*-vxworks* | \
- *-wrs-windiss)
- md_exec_prefix=/usr/ccs/bin
- ;;
-esac
-
-extra_arflags_for_target=
-extra_nmflags_for_target=
-extra_ranlibflags_for_target=
-target_makefile_frag=/dev/null
-case "${target}" in
- *-*-netware*)
- target_makefile_frag="config/mt-netware"
- ;;
- *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
- target_makefile_frag="config/mt-gnu"
- ;;
- *-*-aix4.[[3456789]]* | *-*-aix[[56789]].*)
- # nm and ar from AIX 4.3 and above require -X32_64 flag to all ar and nm
- # commands to handle both 32-bit and 64-bit objects. These flags are
- # harmless if we're using GNU nm or ar.
- extra_arflags_for_target=" -X32_64"
- extra_nmflags_for_target=" -B -X32_64"
- ;;
- *-*-darwin*)
- # ranlib from Darwin requires the -c flag to look at common symbols.
- extra_ranlibflags_for_target=" -c"
- ;;
- mips*-*-pe | sh*-*-pe | *arm-wince-pe)
- target_makefile_frag="config/mt-wince"
- ;;
-esac
-
-alphaieee_frag=/dev/null
-case $target in
- alpha*-*-*)
- # This just makes sure to use the -mieee option to build target libs.
- # This should probably be set individually by each library.
- alphaieee_frag="config/mt-alphaieee"
- ;;
-esac
-
-# If --enable-target-optspace always use -Os instead of -O2 to build
-# the target libraries, similarly if it is not specified, use -Os
-# on selected platforms.
-ospace_frag=/dev/null
-case "${enable_target_optspace}:${target}" in
- yes:*)
- ospace_frag="config/mt-ospace"
- ;;
- :d30v-*)
- ospace_frag="config/mt-d30v"
- ;;
- :m32r-* | :d10v-* | :fr30-*)
- ospace_frag="config/mt-ospace"
- ;;
- no:* | :*)
- ;;
- *)
- echo "*** bad value \"${enable_target_optspace}\" for --enable-target-optspace flag; ignored" 1>&2
- ;;
-esac
-
-# Default to using --with-stabs for certain targets.
-if test x${with_stabs} = x ; then
- case "${target}" in
- mips*-*-irix[[56]]*)
- ;;
- mips*-*-* | alpha*-*-osf*)
- with_stabs=yes;
- extra_host_args="${extra_host_args} --with-stabs"
- ;;
- esac
-fi
-
-# hpux11 in 64bit mode has libraries in a weird place. Arrange to find
-# them automatically.
-case "${host}" in
- hppa*64*-*-hpux11*)
- extra_host_args="$extra_host_args -x-libraries=/usr/lib/pa20_64 -x-includes=/usr/X11R6/include"
- ;;
-esac
-
-# Some systems (e.g., one of the i386-aix systems the gas testers are
-# using) don't handle "\$" correctly, so don't use it here.
-tooldir='${exec_prefix}'/${target_alias}
-build_tooldir=${tooldir}
-
-# Create a .gdbinit file which runs the one in srcdir
-# and tells GDB to look there for source files.
-
-if test -r ${srcdir}/.gdbinit ; then
- case ${srcdir} in
- .) ;;
- *) cat > ./.gdbinit <<EOF
-# ${NO_EDIT}
-dir ${srcdir}
-dir .
-source ${srcdir}/.gdbinit
-EOF
- ;;
- esac
-fi
-
-# Make sure that the compiler is able to generate an executable. If it
-# can't, we are probably in trouble. We don't care whether we can run the
-# executable--we might be using a cross compiler--we only care whether it
-# can be created. At this point the main configure script has set CC.
-we_are_ok=no
-echo "int main () { return 0; }" > conftest.c
-${CC} -o conftest ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} conftest.c
-if test $? = 0 ; then
- if test -s conftest || test -s conftest.exe ; then
- we_are_ok=yes
- fi
-fi
-case $we_are_ok in
- no)
- echo 1>&2 "*** The command '${CC} -o conftest ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} conftest.c' failed."
- echo 1>&2 "*** You must set the environment variable CC to a working compiler."
- rm -f conftest*
- exit 1
- ;;
-esac
-rm -f conftest*
-
-# The Solaris /usr/ucb/cc compiler does not appear to work.
-case "${host}" in
- sparc-sun-solaris2*)
- CCBASE="`echo ${CC-cc} | sed 's/ .*$//'`"
- if test "`type $CCBASE | sed 's/^[[^/]]*//'`" = "/usr/ucb/cc" ; then
- could_use=
- test -d /opt/SUNWspro/bin && could_use="/opt/SUNWspro/bin"
- if test -d /opt/cygnus/bin ; then
- if test "$could_use" = "" ; then
- could_use="/opt/cygnus/bin"
- else
- could_use="$could_use or /opt/cygnus/bin"
- fi
- fi
- if test "$could_use" = "" ; then
- echo "Warning: compilation may fail because you're using"
- echo "/usr/ucb/cc. You should change your PATH or CC "
- echo "variable and rerun configure."
- else
- echo "Warning: compilation may fail because you're using"
- echo "/usr/ucb/cc, when you should use the C compiler from"
- echo "$could_use. You should change your"
- echo "PATH or CC variable and rerun configure."
- fi
- fi
- ;;
-esac
-
-case "${host}" in
- *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;;
- *-*-darwin* | *-*-rhapsody* ) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;;
- *) RPATH_ENVVAR=LD_LIBRARY_PATH ;;
-esac
-
-# Record target_configdirs and the configure arguments for target and
-# build configuration in Makefile.
-target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`
-build_configdirs=`echo "${build_configdirs}" | sed -e 's/build-//g'`
-
-# Determine whether gdb needs tk/tcl or not.
-# Use 'maybe' since enable_gdbtk might be true even if tk isn't available
-# and in that case we want gdb to be built without tk. Ugh!
-# In fact I believe gdb is the *only* package directly dependent on tk,
-# so we should be able to put the 'maybe's in unconditionally and
-# leave out the maybe dependencies when enable_gdbtk is false. I'm not
-# 100% sure that that's safe though.
-
-gdb_tk="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-libgui"
-case "$enable_gdbtk" in
- no)
- GDB_TK="" ;;
- yes)
- GDB_TK="${gdb_tk}" ;;
- *)
- # Only add the dependency on gdbtk when GDBtk is part of the gdb
- # distro. Eventually someone will fix this and move Insight, nee
- # gdbtk to a separate directory.
- if test -d ${srcdir}/gdb/gdbtk ; then
- GDB_TK="${gdb_tk}"
- else
- GDB_TK=""
- fi
- ;;
-esac
-CONFIGURE_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-configure-/g`
-INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g`
-
-# Strip out unwanted targets.
-
-# While at that, we remove Makefiles if we were started for recursive
-# configuration, so that the top-level Makefile reconfigures them,
-# like we used to do when configure itself was recursive.
-
-# Loop over modules. $extrasub must be used with care, limiting as
-# much as possible the usage of range addresses. That's because autoconf
-# splits the sed script to overcome limits in the number of commands,
-# and relying on carefully-timed sed passes may turn out to be very hard
-# to maintain later. In this particular case, you just have to be careful
-# not to nest @if/@endif pairs, because configure will not warn you at all.
-
-AC_ARG_ENABLE([bootstrap],
-[ --enable-bootstrap Enable bootstrapping [yes if native build]],,
-enable_bootstrap=default)
-
-# Issue errors and warnings for invalid/strange bootstrap combinations.
-case "$configdirs" in
- *gcc*) have_compiler=yes ;;
- *) have_compiler=no ;;
-esac
-
-case "$have_compiler:$host:$target:$enable_bootstrap" in
- *:*:*:no) ;;
-
- # Default behavior. Enable bootstrap if we have a compiler
- # and we are in a native configuration.
- yes:$build:$build:default)
- enable_bootstrap=yes ;;
-
- *:*:*:default)
- enable_bootstrap=no ;;
-
- # We have a compiler and we are in a native configuration, bootstrap is ok
- yes:$build:$build:yes)
- ;;
-
- # Other configurations, but we have a compiler. Assume the user knows
- # what he's doing.
- yes:*:*:yes)
- AC_MSG_WARN([trying to bootstrap a cross compiler])
- ;;
-
- # No compiler: if they passed --enable-bootstrap explicitly, fail
- no:*:*:yes)
- AC_MSG_ERROR([cannot bootstrap without a compiler]) ;;
-
- # Fail if wrong command line
- *)
- AC_MSG_ERROR([invalid option for --enable-bootstrap])
- ;;
-esac
-
-# Adjust the toplevel makefile according to whether bootstrap was selected.
-case "$enable_bootstrap" in
- yes)
- bootstrap_suffix=bootstrap ;;
- no)
- bootstrap_suffix=no-bootstrap ;;
-esac
-
-for module in ${build_configdirs} ; do
- if test -z "${no_recursion}" \
- && test -f ${build_subdir}/${module}/Makefile; then
- echo 1>&2 "*** removing ${build_subdir}/${module}/Makefile to force reconfigure"
- rm -f ${build_subdir}/${module}/Makefile
- fi
- extrasub="$extrasub
-/^@if build-$module\$/d
-/^@endif build-$module\$/d
-/^@if build-$module-$bootstrap_suffix\$/d
-/^@endif build-$module-$bootstrap_suffix\$/d"
-done
-for module in ${configdirs} ; do
- if test -z "${no_recursion}"; then
- for file in stage*-${module}/Makefile ${module}/Makefile; do
- if test -f ${file}; then
- echo 1>&2 "*** removing ${file} to force reconfigure"
- rm -f ${file}
- fi
- done
- fi
- extrasub="$extrasub
-/^@if $module\$/d
-/^@endif $module\$/d
-/^@if $module-$bootstrap_suffix\$/d
-/^@endif $module-$bootstrap_suffix\$/d"
-done
-for module in ${target_configdirs} ; do
- if test -z "${no_recursion}" \
- && test -f ${target_subdir}/${module}/Makefile; then
- echo 1>&2 "*** removing ${target_subdir}/${module}/Makefile to force reconfigure"
- rm -f ${target_subdir}/${module}/Makefile
- fi
- extrasub="$extrasub
-/^@if target-$module\$/d
-/^@endif target-$module\$/d
-/^@if target-$module-$bootstrap_suffix\$/d
-/^@endif target-$module-$bootstrap_suffix\$/d"
-done
-
-extrasub="$extrasub
-/^@if /,/^@endif /d"
-
-# Create the serialization dependencies. This uses a temporary file.
-
-AC_ARG_ENABLE([serial-configure],
-[ --enable-serial-[{host,target,build}-]configure
- Force sequential configuration of
- sub-packages for the host, target or build
- machine, or all sub-packages])
-
-case ${enable_serial_configure} in
- yes)
- enable_serial_build_configure=yes
- enable_serial_host_configure=yes
- enable_serial_target_configure=yes
- ;;
-esac
-
-# These force 'configure's to be done one at a time, to avoid problems
-# with contention over a shared config.cache.
-rm -f serdep.tmp
-echo '# serdep.tmp' > serdep.tmp
-olditem=
-test "x${enable_serial_build_configure}" = xyes &&
-for item in ${build_configdirs} ; do
- case ${olditem} in
- "") ;;
- *) echo "configure-build-${item}: configure-build-${olditem}" >> serdep.tmp ;;
- esac
- olditem=${item}
-done
-olditem=
-test "x${enable_serial_host_configure}" = xyes &&
-for item in ${configdirs} ; do
- case ${olditem} in
- "") ;;
- *) echo "configure-${item}: configure-${olditem}" >> serdep.tmp ;;
- esac
- olditem=${item}
-done
-olditem=
-test "x${enable_serial_target_configure}" = xyes &&
-for item in ${target_configdirs} ; do
- case ${olditem} in
- "") ;;
- *) echo "configure-target-${item}: configure-target-${olditem}" >> serdep.tmp ;;
- esac
- olditem=${item}
-done
-serialization_dependencies=serdep.tmp
-AC_SUBST_FILE(serialization_dependencies)
-
-# Base args. Strip norecursion, cache-file, srcdir, host, build,
-# target and nonopt. These are the ones we might not want to pass
-# down to subconfigures. Also strip program-prefix, program-suffix,
-# and program-transform-name, so that we can pass down a consistent
-# program-transform-name. If autoconf has put single quotes around
-# any of these arguments (because they contain shell metacharacters)
-# then this will fail; in practice this only happens for
-# --program-transform-name, so be sure to override --program-transform-name
-# at the end of the argument list.
-# These will be expanded by make, so quote '$'.
-cat <<\EOF_SED > conftestsed
-s/ --no[[^ ]]*/ /g
-s/ --c[[a-z-]]*[[= ]][[^ ]]*//g
-s/ --sr[[a-z-]]*[[= ]][[^ ]]*//g
-s/ --ho[[a-z-]]*[[= ]][[^ ]]*//g
-s/ --bu[[a-z-]]*[[= ]][[^ ]]*//g
-s/ --t[[a-z-]]*[[= ]][[^ ]]*//g
-s/ --program-[[pst]][[a-z-]]*[[= ]][[^ ]]*//g
-s/ -cache-file[[= ]][[^ ]]*//g
-s/ -srcdir[[= ]][[^ ]]*//g
-s/ -host[[= ]][[^ ]]*//g
-s/ -build[[= ]][[^ ]]*//g
-s/ -target[[= ]][[^ ]]*//g
-s/ -program-prefix[[= ]][[^ ]]*//g
-s/ -program-suffix[[= ]][[^ ]]*//g
-s/ -program-transform-name[[= ]][[^ ]]*//g
-s/ [[^' -][^ ]*] / /
-s/^ *//;s/ *$//
-s,\$,$$,g
-EOF_SED
-sed -f conftestsed <<EOF_SED > conftestsed.out
- ${ac_configure_args}
-EOF_SED
-baseargs=`cat conftestsed.out`
-rm -f conftestsed conftestsed.out
-
-# Add in --program-transform-name, after --program-prefix and
-# --program-suffix have been applied to it. Autoconf has already
-# doubled dollar signs and backslashes in program_transform_name; we want
-# the backslashes un-doubled, and then the entire thing wrapped in single
-# quotes, because this will be expanded first by make and then by the shell.
-# Also, because we want to override the logic in subdir configure scripts to
-# choose program_transform_name, replace any s,x,x, with s,y,y,.
-sed -e "s,\\\\\\\\,\\\\,g; s,','\\\\'',g; s/s,x,x,/s,y,y,/" <<EOF_SED > conftestsed.out
-${program_transform_name}
-EOF_SED
-gcc_transform_name=`cat conftestsed.out`
-rm -f conftestsed.out
-baseargs="$baseargs --program-transform-name='${gcc_transform_name}'"
-
-# For the build-side libraries, we just need to pretend we're native,
-# and not use the same cache file. Multilibs are neither needed nor
-# desired.
-build_configargs="--cache-file=../config.cache --build=${build_alias} --host=${build_alias} --target=${target_alias} ${baseargs}"
-
-# For host modules, accept cache file option, or specification as blank.
-case "${cache_file}" in
-"") # empty
- cache_file_option="" ;;
-/* | [[A-Za-z]]:[[\\/]]* ) # absolute path
- cache_file_option="--cache-file=${cache_file}" ;;
-*) # relative path
- cache_file_option="--cache-file=../${cache_file}" ;;
-esac
-
-# Host dirs don't like to share a cache file either, horribly enough.
-# This seems to be due to autoconf 2.5x stupidity.
-host_configargs="--cache-file=./config.cache --build=${build_alias} --host=${host_alias} --target=${target_alias} ${extra_host_args} ${baseargs}"
-
-target_configargs=${baseargs}
-
-# Passing a --with-cross-host argument lets the target libraries know
-# whether they are being built with a cross-compiler or being built
-# native. However, it would be better to use other mechanisms to make the
-# sorts of decisions they want to make on this basis. Please consider
-# this option to be deprecated. FIXME.
-if test x${is_cross_compiler} = xyes ; then
- target_configargs="--with-cross-host=${host_alias} ${target_configargs}"
-fi
-
-# Default to --enable-multilib.
-if test x${enable_multilib} = x ; then
- target_configargs="--enable-multilib ${target_configargs}"
-fi
-
-# Pass --with-newlib if appropriate. Note that target_configdirs has
-# changed from the earlier setting of with_newlib.
-if test x${with_newlib} != xno && echo " ${target_configdirs} " | grep " newlib " > /dev/null 2>&1 && test -d ${srcdir}/newlib ; then
- target_configargs="--with-newlib ${target_configargs}"
-fi
-
-# Different target subdirs use different values of certain variables
-# (notably CXX). Worse, multilibs use *lots* of different values.
-# Worse yet, autoconf 2.5x makes some of these 'precious', meaning that
-# it doesn't automatically accept command-line overrides of them.
-# This means it's not safe for target subdirs to share a cache file,
-# which is disgusting, but there you have it. Hopefully this can be
-# fixed in future. It's still worthwhile to use a cache file for each
-# directory. I think.
-
-# Pass the appropriate --build, --host, --target and --cache-file arguments.
-# We need to pass --target, as newer autoconf's requires consistency
-# for target_alias and gcc doesn't manage it consistently.
-target_configargs="--cache-file=./config.cache --build=${build_alias} --host=${target_alias} --target=${target_alias} ${target_configargs}"
-
-FLAGS_FOR_TARGET=
-case " $target_configdirs " in
- *" newlib "*)
- case " $target_configargs " in
- *" --with-newlib "*)
- case "$target" in
- *-cygwin*)
- FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/winsup -L$$r/$(TARGET_SUBDIR)/winsup/cygwin -L$$r/$(TARGET_SUBDIR)/winsup/w32api/lib -isystem $$s/winsup/include -isystem $$s/winsup/cygwin/include -isystem $$s/winsup/w32api/include' ;;
- esac
-
- # If we're not building GCC, don't discard standard headers.
- if test -d ${srcdir}/gcc; then
- FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -nostdinc'
-
- if test "${build}" != "${host}"; then
- # On Canadian crosses, CC_FOR_TARGET will have already been set
- # by `configure', so we won't have an opportunity to add -Bgcc/
- # to it. This is right: we don't want to search that directory
- # for binaries, but we want the header files in there, so add
- # them explicitly.
- FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -isystem $$r/$(HOST_SUBDIR)/gcc/include'
-
- # Someone might think of using the pre-installed headers on
- # Canadian crosses, in case the installed compiler is not fully
- # compatible with the compiler being built. In this case, it
- # would be better to flag an error than risking having
- # incompatible object files being constructed. We can't
- # guarantee that an error will be flagged, but let's hope the
- # compiler will do it, when presented with incompatible header
- # files.
- fi
- fi
-
- case "${target}-${is_cross_compiler}" in
- i[[3456789]]86-*-linux*-no)
- # Here host == target, so we don't need to build gcc,
- # so we don't want to discard standard headers.
- FLAGS_FOR_TARGET=`echo " $FLAGS_FOR_TARGET " | sed -e 's/ -nostdinc / /'`
- ;;
- *)
- # If we're building newlib, use its generic headers last, but search
- # for any libc-related directories first (so make it the last -B
- # switch).
- FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$$r/$(TARGET_SUBDIR)/newlib/ -isystem $$r/$(TARGET_SUBDIR)/newlib/targ-include -isystem $$s/newlib/libc/include'
- ;;
- esac
- ;;
- esac
- ;;
-esac
-
-# Allow the user to override the flags for
-# our build compiler if desired.
-CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
-
-# On Canadian crosses, we'll be searching the right directories for
-# the previously-installed cross compiler, so don't bother to add
-# flags for directories within the install tree of the compiler
-# being built; programs in there won't even run.
-if test "${build}" = "${host}" && test -d ${srcdir}/gcc; then
- # Search for pre-installed headers if nothing else fits.
- FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$(build_tooldir)/bin/ -B$(build_tooldir)/lib/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include'
-fi
-
-if test "x${use_gnu_ld}" = x &&
- echo " ${configdirs} " | grep " ld " > /dev/null ; then
- # Arrange for us to find uninstalled linker scripts.
- FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(HOST_SUBDIR)/ld'
-fi
-
-# Makefile fragments.
-for frag in host_makefile_frag target_makefile_frag alphaieee_frag ospace_frag;
-do
- eval fragval=\$$frag
- if test $fragval != /dev/null; then
- eval $frag=${srcdir}/$fragval
- fi
-done
-AC_SUBST_FILE(host_makefile_frag)
-AC_SUBST_FILE(target_makefile_frag)
-AC_SUBST_FILE(alphaieee_frag)
-AC_SUBST_FILE(ospace_frag)
-
-# Miscellanea: directories, flags, etc.
-AC_SUBST(RPATH_ENVVAR)
-AC_SUBST(tooldir)
-AC_SUBST(build_tooldir)
-AC_SUBST(CONFIGURE_GDB_TK)
-AC_SUBST(GDB_TK)
-AC_SUBST(INSTALL_GDB_TK)
-
-# Build module lists & subconfigure args.
-AC_SUBST(build_configargs)
-AC_SUBST(build_configdirs)
-
-# Host module lists & subconfigure args.
-AC_SUBST(host_configargs)
-AC_SUBST(configdirs)
-
-# Target module lists & subconfigure args.
-AC_SUBST(target_configargs)
-
-
-# Build tools.
-AC_SUBST(CC_FOR_BUILD)
-AC_SUBST(config_shell)
-
-# Generate default definitions for YACC, M4, LEX and other programs that run
-# on the build machine. These are used if the Makefile can't locate these
-# programs in objdir.
-MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
-
-AC_CHECK_PROGS([YACC], ['bison -y' byacc yacc], [$MISSING bison -y])
-case " $build_configdirs " in
- *" bison "*) YACC='$$r/$(BUILD_SUBDIR)/bison/tests/bison -y' ;;
- *" byacc "*) YACC='$$r/$(BUILD_SUBDIR)/byacc/byacc' ;;
-esac
-
-AC_CHECK_PROGS([BISON], [bison], [$MISSING bison])
-case " $build_configdirs " in
- *" bison "*) BISON='$$r/$(BUILD_SUBDIR)/bison/tests/bison' ;;
-esac
-
-AC_CHECK_PROGS([M4], [gm4 gnum4 m4], [$MISSING m4])
-case " $build_configdirs " in
- *" m4 "*) M4='$$r/$(BUILD_SUBDIR)/m4/m4' ;;
-esac
-
-AC_CHECK_PROGS([LEX], [flex lex], [$MISSING flex])
-case " $build_configdirs " in
- *" flex "*) LEX='$$r/$(BUILD_SUBDIR)/flex/flex' ;;
- *" lex "*) LEX='$$r/$(BUILD_SUBDIR)/lex/lex' ;;
-esac
-
-AC_CHECK_PROGS([FLEX], [flex], [$MISSING flex])
-case " $build_configdirs " in
- *" flex "*) FLEX='$$r/$(BUILD_SUBDIR)/flex/flex' ;;
-esac
-
-AC_CHECK_PROGS([MAKEINFO], makeinfo, [$MISSING makeinfo])
-case " $build_configdirs " in
- *" texinfo "*) MAKEINFO='$$r/$(BUILD_SUBDIR)/texinfo/makeinfo/makeinfo' ;;
- *)
-changequote(,)
- # For an installed makeinfo, we require it to be from texinfo 4.4 or
- # higher, else we use the "missing" dummy.
- if ${MAKEINFO} --version \
- | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[4-9]|[5-9])' >/dev/null 2>&1; then
- :
- else
- MAKEINFO="$MISSING makeinfo"
- fi
- ;;
-changequote([,])
-esac
-
-# FIXME: expect and dejagnu may become build tools?
-
-AC_CHECK_PROGS(EXPECT, expect, expect)
-case " $configdirs " in
- *" expect "*)
- test $host = $build && EXPECT='$$r/$(HOST_SUBDIR)/expect/expect'
- ;;
-esac
-
-AC_CHECK_PROGS(RUNTEST, runtest, runtest)
-case " $configdirs " in
- *" dejagnu "*)
- test $host = $build && RUNTEST='$$r/$(HOST_SUBDIR)/dejagnu/runtest'
- ;;
-esac
-
-
-# Host tools.
-NCN_STRICT_CHECK_TOOLS(AR, ar)
-NCN_STRICT_CHECK_TOOLS(AS, as)
-NCN_STRICT_CHECK_TOOLS(DLLTOOL, dlltool)
-NCN_STRICT_CHECK_TOOLS(LD, ld)
-NCN_STRICT_CHECK_TOOLS(LIPO, lipo)
-NCN_STRICT_CHECK_TOOLS(NM, nm)
-NCN_STRICT_CHECK_TOOLS(RANLIB, ranlib, :)
-NCN_STRICT_CHECK_TOOLS(STRIP, strip, :)
-NCN_STRICT_CHECK_TOOLS(WINDRES, windres)
-NCN_STRICT_CHECK_TOOLS(OBJCOPY, objcopy)
-NCN_STRICT_CHECK_TOOLS(OBJDUMP, objdump)
-AC_SUBST(CC)
-AC_SUBST(CXX)
-AC_SUBST(CFLAGS)
-AC_SUBST(CFLAGS_FOR_BUILD)
-AC_SUBST(CXXFLAGS)
-
-# Target tools.
-AC_ARG_WITH([build-time-tools],
- [ --with-build-time-tools=path
- use given path to find target tools during the build],
- [case x"$withval" in
- x/*) ;;
- *)
- with_build_time_tools=
- AC_MSG_WARN([argument to --with-build-time-tools must be an absolute path])
- ;;
- esac],
- [with_build_time_tools=])
-
-NCN_STRICT_CHECK_TARGET_TOOLS(CC_FOR_TARGET, cc gcc)
-NCN_STRICT_CHECK_TARGET_TOOLS(CXX_FOR_TARGET, c++ g++ cxx gxx)
-NCN_STRICT_CHECK_TARGET_TOOLS(GCC_FOR_TARGET, gcc, ${CC_FOR_TARGET})
-NCN_STRICT_CHECK_TARGET_TOOLS(GCJ_FOR_TARGET, gcj)
-NCN_STRICT_CHECK_TARGET_TOOLS(GFORTRAN_FOR_TARGET, gfortran)
-
-ACX_CHECK_INSTALLED_TARGET_TOOL(AR_FOR_TARGET, ar)
-ACX_CHECK_INSTALLED_TARGET_TOOL(AS_FOR_TARGET, as)
-ACX_CHECK_INSTALLED_TARGET_TOOL(DLLTOOL_FOR_TARGET, dlltool)
-ACX_CHECK_INSTALLED_TARGET_TOOL(LD_FOR_TARGET, ld)
-ACX_CHECK_INSTALLED_TARGET_TOOL(LIPO_FOR_TARGET, lipo)
-ACX_CHECK_INSTALLED_TARGET_TOOL(NM_FOR_TARGET, nm)
-ACX_CHECK_INSTALLED_TARGET_TOOL(OBJDUMP_FOR_TARGET, objdump)
-ACX_CHECK_INSTALLED_TARGET_TOOL(RANLIB_FOR_TARGET, ranlib, :)
-ACX_CHECK_INSTALLED_TARGET_TOOL(STRIP_FOR_TARGET, strip)
-ACX_CHECK_INSTALLED_TARGET_TOOL(WINDRES_FOR_TARGET, windres)
-
-RAW_CXX_FOR_TARGET="$CXX_FOR_TARGET"
-
-GCC_TARGET_TOOL(ar, AR_FOR_TARGET, AR, [binutils/ar])
-GCC_TARGET_TOOL(as, AS_FOR_TARGET, AS, [gas/as-new])
-GCC_TARGET_TOOL(cc, CC_FOR_TARGET, CC, [gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/])
-GCC_TARGET_TOOL(c++, CXX_FOR_TARGET, CXX,
- [gcc/g++ -B$$r/$(HOST_SUBDIR)/gcc/ -nostdinc++ `test ! -f $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags || $(SHELL) $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags --build-includes` -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs],
- c++)
-GCC_TARGET_TOOL(c++ for libstdc++, RAW_CXX_FOR_TARGET, CXX,
- [gcc/xgcc -shared-libgcc -B$$r/$(HOST_SUBDIR)/gcc -nostdinc++ -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs],
- c++)
-GCC_TARGET_TOOL(dlltool, DLLTOOL_FOR_TARGET, DLLTOOL, [binutils/dlltool])
-GCC_TARGET_TOOL(gcc, GCC_FOR_TARGET, , [gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/])
-GCC_TARGET_TOOL(gcj, GCJ_FOR_TARGET, GCJ,
- [gcc/gcj -B$$r/$(HOST_SUBDIR)/gcc/], java)
-GCC_TARGET_TOOL(gfortran, GFORTRAN_FOR_TARGET, GFORTRAN,
- [gcc/gfortran -B$$r/$(HOST_SUBDIR)/gcc/], fortran)
-GCC_TARGET_TOOL(ld, LD_FOR_TARGET, LD, [ld/ld-new])
-GCC_TARGET_TOOL(lipo, LIPO_FOR_TARGET, LIPO)
-GCC_TARGET_TOOL(nm, NM_FOR_TARGET, NM, [binutils/nm-new])
-GCC_TARGET_TOOL(objdump, OBJDUMP_FOR_TARGET, OBJDUMP, [binutils/objdump])
-GCC_TARGET_TOOL(ranlib, RANLIB_FOR_TARGET, RANLIB, [binutils/ranlib])
-GCC_TARGET_TOOL(strip, STRIP_FOR_TARGET, STRIP, [binutils/strip])
-GCC_TARGET_TOOL(windres, WINDRES_FOR_TARGET, WINDRES, [binutils/windres])
-
-AC_SUBST(FLAGS_FOR_TARGET)
-AC_SUBST(RAW_CXX_FOR_TARGET)
-
-# Certain tools may need extra flags.
-AR_FOR_TARGET=${AR_FOR_TARGET}${extra_arflags_for_target}
-RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${extra_ranlibflags_for_target}
-NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target}
-
-# When building target libraries, except in a Canadian cross, we use
-# the same toolchain as the compiler we just built.
-COMPILER_AS_FOR_TARGET='$(AS_FOR_TARGET)'
-COMPILER_LD_FOR_TARGET='$(LD_FOR_TARGET)'
-COMPILER_NM_FOR_TARGET='$(NM_FOR_TARGET)'
-if test $host = $build; then
- case " $configdirs " in
- *" gcc "*)
- COMPILER_AS_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/as'
- COMPILER_LD_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/collect-ld'
- COMPILER_NM_FOR_TARGET='$$r/$(HOST_SUBDIR)/gcc/nm'${extra_nmflags_for_target}
- ;;
- esac
-fi
-
-AC_SUBST(COMPILER_AS_FOR_TARGET)
-AC_SUBST(COMPILER_LD_FOR_TARGET)
-AC_SUBST(COMPILER_NM_FOR_TARGET)
-
-AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
-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)
-AC_SUBST(MAINTAINER_MODE_TRUE)
-AC_SUBST(MAINTAINER_MODE_FALSE)
-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
-AC_SUBST(MAINT)dnl
-
-# ---------------------
-# GCC bootstrap support
-# ---------------------
-
-# Stage specific cflags for build.
-stage1_cflags="-g"
-case $build in
- vax-*-*)
- case ${GCC} in
- yes) stage1_cflags="-g -Wa,-J" ;;
- *) stage1_cflags="-g -J" ;;
- esac ;;
- powerpc-*-darwin*)
- # The spiffy cpp-precomp chokes on some legitimate constructs in GCC
- # sources; use -no-cpp-precomp to get to GNU cpp.
- # Apple's GCC has bugs in designated initializer handling, so disable
- # that too.
- stage1_cflags="-g -no-cpp-precomp -DHAVE_DESIGNATED_INITIALIZERS=0"
- ;;
-esac
-AC_SUBST(stage1_cflags)
-
-# Enable -Werror in bootstrap stage2 and later.
-# Change the default to "no" on release branches.
-AC_ARG_ENABLE(werror,
-[ --enable-werror enable -Werror in bootstrap stage2 and later], [],
-[enable_werror=yes])
-case ${enable_werror} in
- yes) stage2_werror_flag="--enable-werror-always" ;;
- *) stage2_werror_flag="" ;;
-esac
-AC_SUBST(stage2_werror_flag)
-
-# Flags needed to enable html installing and building
-AC_ARG_WITH(datarootdir,
-[ --with-datarootdir Use datarootdir as the data root directory.],
-[datarootdir="\${prefix}/${withval}"],
-[datarootdir="\${prefix}/share"])
-
-AC_ARG_WITH(docdir,
-[ --with-docdir Install documentation in this directory.],
-[docdir="\${prefix}/${withval}"],
-[docdir="\${datarootdir}/doc"])
-
-AC_ARG_WITH(htmldir,
-[ --with-htmldir Install html in this directory.],
-[htmldir="\${prefix}/${withval}"],
-[htmldir="\${docdir}"])
-
-AC_SUBST(datarootdir)
-AC_SUBST(docdir)
-AC_SUBST(htmldir)
-
-AC_OUTPUT(Makefile)
diff --git a/cpu/ChangeLog b/cpu/ChangeLog
index c0019d8f1c81..1fa7b9be4ab1 100644
--- a/cpu/ChangeLog
+++ b/cpu/ChangeLog
@@ -1,3 +1,39 @@
+2007-04-30 Mark Salter <msalter@sadr.localdomain>
+
+ * frv.cpu (spr-names): Support new coprocessor SPR registers.
+
+2007-04-20 Nick Clifton <nickc@redhat.com>
+
+ * xc16x.cpu: Restore after accidentally overwriting this file with
+ xc16x.opc.
+
+2007-03-29 DJ Delorie <dj@redhat.com>
+
+ * m32c.cpu (Imm-8-s4n): Fix print hook.
+ (Lab-24-8, Lab-32-8, Lab-40-8): Fix.
+ (arith-jnz-imm4-dst-defn): Make relaxable.
+ (arith-jnz16-imm4-dst-defn): Fix encodings.
+
+2007-03-20 DJ Delorie <dj@redhat.com>
+
+ * m32c.cpu (f-dsp-40-u20, f-dsp-48-u20, Dsp-40-u20, Dsp-40-u20,
+ mem20): New.
+ (src16-16-20-An-relative-*): New.
+ (dst16-*-20-An-relative-*): New.
+ (dst16-16-16sa-*): New
+ (dst16-16-16ar-*): New
+ (dst32-16-16sa-Unprefixed-*): New
+ (jsri): Fix operands.
+ (setzx): Fix encoding.
+
+2007-03-08 Alan Modra <amodra@bigpond.net.au>
+
+ * m32r.opc: Formatting.
+
+2006-05-22 Nick Clifton <nickc@redhat.com>
+
+ * iq2000.cpu: Fix include paths for iq2000m.cpu and iq10.cpu.
+
2006-04-10 DJ Delorie <dj@redhat.com>
* m32c.opc (parse_unsigned_bitbase): Take a new parameter which
diff --git a/cpu/frv.cpu b/cpu/frv.cpu
index 03f22a55358d..bae036dbed82 100644
--- a/cpu/frv.cpu
+++ b/cpu/frv.cpu
@@ -2808,12 +2808,21 @@
(dbmr20 2084) (dbmr21 2085) (dbmr22 2086) (dbmr23 2087)
(dbmr30 2088) (dbmr31 2089) (dbmr32 2090) (dbmr33 2091)
- (cpcfr 2092) (cpcr 2093) (cpsr 2094)
+ (cpcfr 2304) (cpcr 2305) (cpsr 2306) (cptr 2307)
+ (cphsr0 2308) (cphsr1 2309) (cpesr0 2320) (cpesr1 2321)
+ (cpemr0 2322) (cpemr1 2323)
- (cpesr0 2096) (cpesr1 2097)
- (cpemr0 2098) (cpemr1 2099)
+ (iperr0 2324) (iperr1 2325) (ipjsr 2326) (ipjrr 2327)
+ (ipcsr0 2336) (ipcsr1 2337) (ipcwer0 2338) (ipcwer1 2339)
+ (ipcwr 2340)
- (ihsr8 3848)
+ (mbhsr 2352) (mbssr 2353) (mbrsr 2354) (mbsdr 2355)
+ (mbrdr 2356) (mbsmr 2357) (mbstr0 2359) (mbstr1 2360)
+
+ (slpr 2368) (sldr 2369) (slhsr 2370) (sltr 2371)
+ (slwr 2372)
+
+ (ihsr8 3848) (ihsr9 3849) (ihsr10 3850)
)
)
diff --git a/cpu/iq2000.cpu b/cpu/iq2000.cpu
index e186c7b515b3..acb2648e0ae7 100644
--- a/cpu/iq2000.cpu
+++ b/cpu/iq2000.cpu
@@ -1173,10 +1173,7 @@
(if (keep-mach? (iq2000))
-(include "../../cpu/iq2000m.cpu"))
+(include "iq2000m.cpu"))
(if (keep-mach? (iq10))
-(include "../../cpu/iq10.cpu"))
-
-
-
+(include "iq10.cpu"))
diff --git a/cpu/m32c.cpu b/cpu/m32c.cpu
index a645a48b59bb..69eec8275d95 100644
--- a/cpu/m32c.cpu
+++ b/cpu/m32c.cpu
@@ -624,6 +624,18 @@
(and USI (sll UHI value 16) #xff0000))) ; extract
)
+(df f-dsp-40-u20 "20 bit unsigned" (all-isas) 40 20 UINT
+ ((value pc) (or USI
+ (or USI
+ (and (srl value 16) #x0000ff)
+ (and value #x00ff00))
+ (and (sll value 16) #x0f0000))) ; insert
+ ((value pc) (or USI
+ (or USI
+ (and USI (srl UHI value 16) #x0000ff)
+ (and USI value #x00ff00))
+ (and USI (sll UHI value 16) #x0f0000))) ; extract
+)
(df f-dsp-40-u24 "24 bit unsigned" (all-isas) 40 24 UINT
((value pc) (or USI
(or USI
@@ -649,6 +661,17 @@
)
)
+(dnmf f-dsp-48-u20 "20 bit unsigned" (all-isas) UINT
+ (f-dsp-48-u16 f-dsp-64-u8)
+ (sequence () ; insert
+ (set (ifield f-dsp-64-u8) (and (srl (ifield f-dsp-48-u20) 16) #x0f))
+ (set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-u20) #xffff))
+ )
+ (sequence () ; extract
+ (set (ifield f-dsp-48-u20) (or (and (ifield f-dsp-48-u16) #xffff)
+ (and (sll (ifield f-dsp-64-u8) 16) #x0f0000)))
+ )
+)
(dnmf f-dsp-48-u24 "24 bit unsigned" (all-isas) UINT
(f-dsp-48-u16 f-dsp-64-u8)
(sequence () ; insert
@@ -1877,6 +1900,10 @@
h-sint DFLT f-dsp-40-s16
((parse "signed16")) () ()
)
+(define-full-operand Dsp-40-u20 "unsigned 20 bit displacement at offset 40 bits" (all-isas)
+ h-uint DFLT f-dsp-40-u20
+ ((parse "unsigned20")) () ()
+)
(define-full-operand Dsp-40-u24 "unsigned 24 bit displacement at offset 40 bits" (all-isas)
h-uint DFLT f-dsp-40-u24
((parse "unsigned24")) () ()
@@ -1897,6 +1924,10 @@
h-sint DFLT f-dsp-48-s16
((parse "signed16")) () ()
)
+(define-full-operand Dsp-48-u20 "unsigned 24 bit displacement at offset 40 bits" (all-isas)
+ h-uint DFLT f-dsp-48-u20
+ ((parse "unsigned24")) () ()
+)
(define-full-operand Dsp-48-u24 "unsigned 24 bit displacement at offset 48 bits" (all-isas)
h-uint DFLT f-dsp-48-u24
((parse "unsigned24")) () ()
@@ -1908,7 +1939,7 @@
)
(define-full-operand Imm-8-s4n "negated 4 bit immediate at offset 8 bits" (all-isas)
h-sint DFLT f-imm-8-s4
- ((parse "signed4n")) () ()
+ ((parse "signed4n") (print "signed4n")) () ()
)
(define-full-operand Imm-sh-8-s4 "signed 4 bit shift immediate at offset 8 bits" (all-isas)
h-shimm DFLT f-imm-8-s4
@@ -2115,9 +2146,9 @@
(dnop Lab-8-16 "16 bit label" (all-isas RELAX) h-iaddr f-lab-8-16)
(dnop Lab-8-24 "24 bit label" (all-isas RELAX) h-iaddr f-lab-8-24)
(dnop Lab-16-8 "8 bit label" (all-isas RELAX) h-iaddr f-lab-16-8)
-(dnop Lab-24-8 "8 bit label" (all-isas) h-iaddr f-lab-24-8)
-(dnop Lab-32-8 "8 bit label" (all-isas) h-iaddr f-lab-32-8)
-(dnop Lab-40-8 "8 bit label" (all-isas) h-iaddr f-lab-40-8)
+(dnop Lab-24-8 "8 bit label" (all-isas RELAX) h-iaddr f-lab-24-8)
+(dnop Lab-32-8 "8 bit label" (all-isas RELAX) h-iaddr f-lab-32-8)
+(dnop Lab-40-8 "8 bit label" (all-isas RELAX) h-iaddr f-lab-40-8)
;-------------------------------------------------------------
; Condition code bits
@@ -2209,6 +2240,9 @@
(define-pmacro (mem16 mode address)
(mem mode (and #xffff address)))
+(define-pmacro (mem20 mode address)
+ (mem mode (and #xfffff address)))
+
(define-pmacro (mem32 mode address)
(mem mode (and #xffffff address)))
@@ -2441,6 +2475,19 @@
(getter (mem16 xmode (add Dsp-16-u16 Src16An)))
(setter (set (mem16 xmode (add Dsp-16-u16 Src16An)) newval))
)
+ (define-derived-operand
+ (name (.sym src16-16-20-An-relative- xmode))
+ (comment (.str "m16c dsp:20[An] relative destination " xmode))
+ (attrs (machine 16))
+ (mode xmode)
+ (args (Src16An Dsp-16-u20))
+ (syntax "${Dsp-16-u20}[$Src16An]")
+ (base-ifield f-8-4)
+ (encoding (+ (f-8-2 3) (f-10-1 0) Dsp-16-u20 Src16An))
+ (ifield-assertion (andif (eq f-8-2 3) (eq f-10-1 0)))
+ (getter (mem20 xmode (add Dsp-16-u20 Src16An)))
+ (setter (set (mem20 xmode (add Dsp-16-u20 Src16An)) newval))
+ )
)
)
@@ -3157,6 +3204,19 @@
(getter (mem16 xmode (add (.sym Dsp- offset -u16) Dst16An)))
(setter (set (mem16 xmode (add (.sym Dsp- offset -u16) Dst16An)) newval))
)
+ (define-derived-operand
+ (name (.sym dst16- offset -20-An-relative- xmode))
+ (comment (.str "m16c dsp:20[An] relative destination " xmode))
+ (attrs (machine 16))
+ (mode xmode)
+ (args (Dst16An (.sym Dsp- offset -u20)))
+ (syntax (.str "${Dsp-" offset "-u20}[$Dst16An]"))
+ (base-ifield f-12-4)
+ (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u20) Dst16An))
+ (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
+ (getter (mem16 xmode (add (.sym Dsp- offset -u20) Dst16An)))
+ (setter (set (mem16 xmode (add (.sym Dsp- offset -u20) Dst16An)) newval))
+ )
)
)
@@ -4727,6 +4787,25 @@
(.sym dst16-16-16-absolute- xmode)
)
)
+ (define-anyof-operand
+ (name (.sym dst16-16-16sa- xmode))
+ (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
+ (attrs (machine 16))
+ (mode xmode)
+ (choices
+ (.sym dst16-16-16-SB-relative- xmode)
+ (.sym dst16-16-16-absolute- xmode)
+ )
+ )
+ (define-anyof-operand
+ (name (.sym dst16-16-20ar- xmode))
+ (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
+ (attrs (machine 16))
+ (mode xmode)
+ (choices
+ (.sym dst16-16-20-An-relative- xmode)
+ )
+ )
)
)
@@ -5096,6 +5175,17 @@
)
)
(define-anyof-operand
+ (name (.sym dst32-16-16sa-Unprefixed- xmode))
+ (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
+ (attrs (machine 32))
+ (mode xmode)
+ (choices
+ (.sym dst32-16-16-SB-relative-Unprefixed- xmode)
+ (.sym dst32-16-16-FB-relative-Unprefixed- xmode)
+ (.sym dst32-16-16-absolute-Unprefixed- xmode)
+ )
+ )
+ (define-anyof-operand
(name (.sym dst32-16-24-Unprefixed- xmode))
(comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
(attrs (machine 32))
@@ -6591,7 +6681,7 @@
(define-pmacro (arith-jnz-imm4-dst-defn mach src dstgroup label mode wstr op encoding sem)
(dni (.sym op mach wstr - imm4 - dstgroup)
(.str op wstr " " mach "-imm4-" dstgroup "-" label "-" mode)
- ((machine mach))
+ (RL_JUMP RELAXABLE (machine mach))
(.str op wstr " #${" src "},${dst" mach "-" dstgroup "-" mode "},${" label "}")
encoding
(sem mode src (.sym dst mach - dstgroup - mode) label)
@@ -6605,10 +6695,10 @@
(+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-basic- mode) Lab-16-8)
sem)
(arith-jnz-imm4-dst-defn 16 (.sym Imm-8- i4n) 16-16 Lab-32-8 mode wstr op
- (+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-16-16- mode) Lab-16-8)
+ (+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-16-16- mode) Lab-32-8)
sem)
(arith-jnz-imm4-dst-defn 16 (.sym Imm-8- i4n) 16-8 Lab-24-8 mode wstr op
- (+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-16-8- mode) Lab-16-8)
+ (+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-16-8- mode) Lab-24-8)
sem)
)
)
@@ -8246,28 +8336,27 @@
)
)
; jsri.w dst (m16 #1 m32 #1))
+(jsri-defn w dst16-16-20ar-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
+ dst32-16-24-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 4)
+(jsri-defn w dst16-16-16sa-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
+ dst32-16-16sa-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 4)
(jsri-defn w dst16-16-8-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
dst32-16-8-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 3)
-(jsri-defn w dst16-16-16-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
- dst32-16-16-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 4)
(jsri-defn w dst16-basic-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
dst32-basic-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 2)
-(dni jsri32.w "jsr.w dst32-16-24-Unprefixed-HI" (RL_1ADDR (machine 32))
- ("jsri.w ${dst32-16-24-Unprefixed-HI}")
- (+ (f-0-4 #xC) (f-7-1 1) dst32-16-24-Unprefixed-HI (f-10-2 #x1) (f-12-4 #xF))
- (jsr32-sem 6 dst32-16-24-Unprefixed-HI)
- ())
; jsri.a (m16 #2 m32 #2)
+(jsri-defn a dst16-16-20ar-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
+ dst32-16-24-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 4)
(jsri-defn a dst16-16-8-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
dst32-16-8-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 3)
-(jsri-defn a dst16-16-16-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
- dst32-16-16-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 4)
+(jsri-defn a dst16-16-16sa-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
+ dst32-16-16sa-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 4)
(jsri-defn a dst16-basic-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
dst32-basic-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 2)
(dni jsri32.a "jsr.w dst32-16-24-Unprefixed-HI" (RL_1ADDR (machine 32))
- ("jsri.w ${dst32-16-24-Unprefixed-SI}")
+ ("jsri.a ${dst32-16-24-Unprefixed-SI}")
(+ (f-0-4 #x9) (f-7-1 0) dst32-16-24-Unprefixed-SI (f-10-2 #x0) (f-12-4 #x1))
(jsr32-sem 6 dst32-16-24-Unprefixed-SI)
())
@@ -10233,7 +10322,7 @@
())
(dni stzx16-imm8-imm8-abs16 "stzx #Imm8,#Imm8,abs16" ((machine 16))
("stzx #${Imm-8-QI},#${Imm-32-QI},${Dsp-16-u16}")
- (+ (f-0-4 #xD) (f-4-4 #xE) Imm-8-QI Dsp-16-u16 Imm-32-QI)
+ (+ (f-0-4 #xD) (f-4-4 #xF) Imm-8-QI Dsp-16-u16 Imm-32-QI)
(stzx-sem QI Imm-8-QI Imm-32-QI (mem16 QI Dsp-16-u16))
())
; stzx.BW #imm,dst (m32)
diff --git a/cpu/m32r.opc b/cpu/m32r.opc
index ab69d078c864..c51078c34341 100644
--- a/cpu/m32r.opc
+++ b/cpu/m32r.opc
@@ -1,6 +1,6 @@
/* M32R opcode support. -*- C -*-
- Copyright 1998, 1999, 2000, 2001, 2004, 2005
+ Copyright 1998, 1999, 2000, 2001, 2004, 2005, 2007
Free Software Foundation, Inc.
Contributed by Red Hat Inc; developed under contract from
@@ -126,7 +126,7 @@ parse_hi16 (CGEN_CPU_DESC cd,
return MISSING_CLOSING_PARENTHESIS;
++*strp;
if (errmsg == NULL
- && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
+ && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
{
value >>= 16;
value &= 0xffff;
@@ -138,17 +138,17 @@ parse_hi16 (CGEN_CPU_DESC cd,
{
*strp += 6;
errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32R_HI16_SLO,
- & result_type, & value);
+ & result_type, & value);
if (**strp != ')')
return MISSING_CLOSING_PARENTHESIS;
++*strp;
if (errmsg == NULL
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
- {
- value += 0x8000;
- value >>= 16;
+ {
+ value += 0x8000;
+ value >>= 16;
value &= 0xffff;
- }
+ }
*valuep = value;
return errmsg;
}
@@ -183,7 +183,7 @@ parse_slo16 (CGEN_CPU_DESC cd,
++*strp;
if (errmsg == NULL
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
- value = ((value & 0xffff) ^ 0x8000) - 0x8000;
+ value = ((value & 0xffff) ^ 0x8000) - 0x8000;
*valuep = value;
return errmsg;
}
@@ -247,7 +247,7 @@ parse_ulo16 (CGEN_CPU_DESC cd,
do \
{ \
if (CGEN_BOOL_ATTR ((attrs), CGEN_OPERAND_HASH_PREFIX)) \
- (*info->fprintf_func) (info->stream, "#"); \
+ (*info->fprintf_func) (info->stream, "#"); \
} \
while (0)
@@ -284,7 +284,7 @@ my_print_insn (CGEN_CPU_DESC cd,
/* Read the base part of the insn. */
status = (*info->read_memory_func) (pc - ((!big_p && (pc & 3) != 0) ? 2 : 0),
- buf, buflen, info);
+ buf, buflen, info);
if (status != 0)
{
(*info->memory_error_func) (status, pc, info);
diff --git a/cpu/xc16x.cpu b/cpu/xc16x.cpu
index 29eaff3f44b8..5537094fc42f 100644
--- a/cpu/xc16x.cpu
+++ b/cpu/xc16x.cpu
@@ -1,245 +1,3129 @@
-/* XC16X opcode support. -*- C -*-
-
- Copyright 2006 Free Software Foundation, Inc.
-
- Contributed by KPIT Cummins Infosystems Ltd.; developed under contract
- from Infineon Systems, GMBH , Germany.
-
- This file is part of the GNU Binutils.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 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, 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-
-/* This file is an addendum to xc16x.cpu. Heavy use of C code isn't
- appropriate in .cpu files, so it resides here. This especially applies
- to assembly/disassembly where parsing/printing can be quite involved.
- Such things aren't really part of the specification of the cpu, per se,
- so .cpu files provide the general framework and .opc files handle the
- nitty-gritty details as necessary.
-
- Each section is delimited with start and end markers.
-
- <arch>-opc.h additions use: "-- opc.h"
- <arch>-opc.c additions use: "-- opc.c"
- <arch>-asm.c additions use: "-- asm.c"
- <arch>-dis.c additions use: "-- dis.c"
- <arch>-ibd.h additions use: "-- ibd.h" */
-
-/* -- opc.h */
-
-#define CGEN_DIS_HASH_SIZE 8
-#define CGEN_DIS_HASH(buf,value) (((* (unsigned char*) (buf)) >> 3) % CGEN_DIS_HASH_SIZE)
-
-/* -- */
-
-/* -- opc.c */
-
-/* -- */
-
-/* -- asm.c */
-/* Handle '#' prefixes (i.e. skip over them). */
-
-static const char *
-parse_hash (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
- const char **strp,
- int opindex ATTRIBUTE_UNUSED,
- long *valuep ATTRIBUTE_UNUSED)
-{
- if (**strp == '#')
- {
- ++*strp;
- return NULL;
- }
- return _("Missing '#' prefix");
-}
-
-/* Handle '.' prefixes (i.e. skip over them). */
-
-static const char *
-parse_dot (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
- const char **strp,
- int opindex ATTRIBUTE_UNUSED,
- long *valuep ATTRIBUTE_UNUSED)
-{
- if (**strp == '.')
- {
- ++*strp;
- return NULL;
- }
- return _("Missing '.' prefix");
-}
-
-/* Handle 'pof:' prefixes (i.e. skip over them). */
-
-static const char *
-parse_pof (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
- const char **strp,
- int opindex ATTRIBUTE_UNUSED,
- long *valuep ATTRIBUTE_UNUSED)
-{
- if (strncasecmp (*strp, "pof:", 4) == 0)
- {
- *strp += 4;
- return NULL;
- }
- return _("Missing 'pof:' prefix");
-}
-
-/* Handle 'pag:' prefixes (i.e. skip over them). */
-
-static const char *
-parse_pag (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
- const char **strp,
- int opindex ATTRIBUTE_UNUSED,
- long *valuep ATTRIBUTE_UNUSED)
-{
- if (strncasecmp (*strp, "pag:", 4) == 0)
- {
- *strp += 4;
- return NULL;
- }
- return _("Missing 'pag:' prefix");
-}
-
-/* Handle 'sof' prefixes (i.e. skip over them). */
-
-static const char *
-parse_sof (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
- const char **strp,
- int opindex ATTRIBUTE_UNUSED,
- long *valuep ATTRIBUTE_UNUSED)
-{
- if (strncasecmp (*strp, "sof:", 4) == 0)
- {
- *strp += 4;
- return NULL;
- }
- return _("Missing 'sof:' prefix");
-}
-
-/* Handle 'seg' prefixes (i.e. skip over them). */
-
-static const char *
-parse_seg (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
- const char **strp,
- int opindex ATTRIBUTE_UNUSED,
- long *valuep ATTRIBUTE_UNUSED)
-{
- if (strncasecmp (*strp, "seg:", 4) == 0)
- {
- *strp += 4;
- return NULL;
- }
- return _("Missing 'seg:' prefix");
-}
-/* -- */
-
-/* -- dis.c */
-
-#define CGEN_PRINT_NORMAL(cd, info, value, attrs, pc, length) \
- do \
- { \
- if (CGEN_BOOL_ATTR ((attrs), CGEN_OPERAND_DOT_PREFIX)) \
- info->fprintf_func (info->stream, "."); \
- if (CGEN_BOOL_ATTR ((attrs), CGEN_OPERAND_POF_PREFIX)) \
- info->fprintf_func (info->stream, "#pof:"); \
- if (CGEN_BOOL_ATTR ((attrs), CGEN_OPERAND_PAG_PREFIX)) \
- info->fprintf_func (info->stream, "#pag:"); \
- } \
- while (0)
-
-/* Print a 'pof:' prefix to an operand. */
-
-static void
-print_pof (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
- void * dis_info ATTRIBUTE_UNUSED,
- long value ATTRIBUTE_UNUSED,
- unsigned int attrs ATTRIBUTE_UNUSED,
- bfd_vma pc ATTRIBUTE_UNUSED,
- int length ATTRIBUTE_UNUSED)
-{
-}
-
-/* Print a 'pag:' prefix to an operand. */
-
-static void
-print_pag (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
- void * dis_info ATTRIBUTE_UNUSED,
- long value ATTRIBUTE_UNUSED,
- unsigned int attrs ATTRIBUTE_UNUSED,
- bfd_vma pc ATTRIBUTE_UNUSED,
- int length ATTRIBUTE_UNUSED)
-{
-}
-
-/* Print a 'sof:' prefix to an operand. */
-
-static void
-print_sof (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
- void * dis_info,
- long value ATTRIBUTE_UNUSED,
- unsigned int attrs ATTRIBUTE_UNUSED,
- bfd_vma pc ATTRIBUTE_UNUSED,
- int length ATTRIBUTE_UNUSED)
-{
- disassemble_info *info = (disassemble_info *) dis_info;
-
- info->fprintf_func (info->stream, "sof:");
-}
-
-/* Print a 'seg:' prefix to an operand. */
-
-static void
-print_seg (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
- void * dis_info,
- long value ATTRIBUTE_UNUSED,
- unsigned int attrs ATTRIBUTE_UNUSED,
- bfd_vma pc ATTRIBUTE_UNUSED,
- int length ATTRIBUTE_UNUSED)
-{
- disassemble_info *info = (disassemble_info *) dis_info;
-
- info->fprintf_func (info->stream, "seg:");
-}
-
-/* Print a '#' prefix to an operand. */
-
-static void
-print_hash (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
- void * dis_info,
- long value ATTRIBUTE_UNUSED,
- unsigned int attrs ATTRIBUTE_UNUSED,
- bfd_vma pc ATTRIBUTE_UNUSED,
- int length ATTRIBUTE_UNUSED)
-{
- disassemble_info *info = (disassemble_info *) dis_info;
-
- info->fprintf_func (info->stream, "#");
-}
-
-/* Print a '.' prefix to an operand. */
-
-static void
-print_dot (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
- void * dis_info ATTRIBUTE_UNUSED,
- long value ATTRIBUTE_UNUSED,
- unsigned int attrs ATTRIBUTE_UNUSED,
- bfd_vma pc ATTRIBUTE_UNUSED,
- int length ATTRIBUTE_UNUSED)
-{
-}
-
-/* -- */
+; Infineon XC16X CPU description. -*- Scheme -*-
+;
+; Copyright 2006 Free Software Foundation, Inc.
+;
+; Contributed by KPIT Cummins Infosystems Ltd.; developed under contract
+; from Infineon Systems, GMBH , Germany.
+;
+; This file is part of the GNU Binutils.
+;
+; This program is free software; you can redistribute it and/or modify
+; it under the terms of the GNU General Public License as published by
+; the Free Software Foundation; either version 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, 51 Franklin Street - Fifth Floor, Boston, MA
+; 02110-1301, USA.
+
+(include "simplify.inc")
+
+; define-arch appears first
+
+(define-arch
+ (name xc16x) ; name of cpu family
+ (comment "Infineon XC16X")
+ (default-alignment aligned)
+ (insn-lsb0? #t)
+ (machs xc16x)
+ (isas xc16x)
+)
+
+; Attributes.
+; An attribute to describe which pipeline an insn runs in generally OS.
+(define-attr
+ (for insn)
+ (type enum)
+ (name PIPE)
+ (comment "parallel execution pipeline selection")
+ (values NONE OS)
+)
+
+; Instruction set parameters.
+
+(define-isa
+ (name xc16x)
+ (default-insn-bitsize 32)
+ (base-insn-bitsize 32)
+ (default-insn-word-bitsize 16)
+ (decode-assist (15 14 13 12))
+ ; The XC16X fetches 1 insn at a time.
+ (liw-insns 1)
+ (parallel-insns 1)
+)
+
+; Cpu family definitions.
+
+(define-cpu
+ ; cpu names must be distinct from the architecture name and machine names.
+ ; The "b" suffix stands for "base" and is the convention.
+ ; The "f" suffix stands for "family" and is the convention.
+ (name xc16xbf)
+ (comment "Infineon XC16X base family")
+ (endian little)
+ (insn-chunk-bitsize 32)
+ (word-bitsize 16)
+ (parallel-insns 1)
+)
+
+(define-mach
+ (name xc16x)
+ (comment "Infineon XC16X cpu")
+ (cpu xc16xbf)
+)
+
+; Model descriptions.
+
+(define-model
+ (name xc16x) (comment "XC16X") (attrs)
+ (mach xc16x)
+
+ (pipeline p-mem "" () ((prefetch) (fetch) (decode) (address) (memory) (execute) (writeback)))
+
+ ; `state' is a list of variables for recording model state
+ (state
+ ; bit mask of h-gr registers, =1 means value being loaded from memory
+ (h-gr UINT)
+ )
+
+ (unit u-exec "Execution Unit" ()
+ 1 1 ; issue done
+ () ; state
+ ((dr INT -1) (sr INT -1)) ; inputs
+ ((dr INT -1)) ; outputs
+ () ; profile action (default)
+ )
+ (unit u-cmp "Compare Unit" ()
+ 1 1 ; issue done
+ () ; state
+ ((src1 INT -1) (src2 INT -1)) ; inputs
+ () ; outputs
+ () ; profile action (default)
+ )
+ (unit u-cti "Jump & Call Unit" ()
+ 1 1 ; issue done
+ () ; state
+ ((condbit) (sr INT -1)) ; inputs
+ ((pc)) ; outputs
+ () ; profile action (default)
+ )
+ (unit u-mov "Data Movement Unit" ()
+ 1 1 ; issue done
+ () ;state
+ ((dr INT -1) (sr INT -1)) ; inputs
+ ((dr INT -1)) ; output
+ () ; profile action (default)
+ )
+ )
+
+; Instruction fields.
+;
+; Attributes:
+; PCREL-ADDR: pc relative value (for reloc and disassembly purposes)
+; ABS-ADDR: absolute address (for reloc and disassembly purposes)
+; RELOC: there is a relocation associated with this field (experiment)
+
+(define-attr
+ (for ifield operand)
+ (type boolean)
+ (name RELOC)
+ (comment "there is a reloc associated with this field (experiment)")
+)
+
+(dnf f-op1 "op1" () 7 4)
+(dnf f-op2 "op2" () 3 4)
+(dnf f-condcode "condcode" () 7 4) ;condition code required in other jmps and calls
+(dnf f-icondcode "indrct condcode" () 15 4) ;condition code required in other jmpi and calli
+(dnf f-rcond "relative-cond" () 7 4) ;condition code required in JMPR
+(dnf f-qcond "qbit" () 7 4) ;used in enum of bset/bclear macro
+(dnf f-extccode "extended condcode" () 15 5) ;condition code required in other jmpa and calla
+(dnf f-r0 "r0" () 9 2) ;required where 2 bit register used(only R0-R3)
+(dnf f-r1 "r1" () 15 4)
+(dnf f-r2 "r2" () 11 4)
+(dnf f-r3 "r3" () 12 4)
+(dnf f-r4 "r4" () 11 4)
+(dnf f-uimm2 "uimm2" () 13 2) ;used for immediate data,eg in ADD,MOV insns
+(dnf f-uimm3 "uimm3" () 10 3) ;used for immediate data,eg in ADD,SUB insns
+(dnf f-uimm4 "uimm4" () 15 4) ;used for immediate data,eg in MOV insns
+(dnf f-uimm7 "uimm7" (PCREL-ADDR RELOC) 15 7) ;used in TRAP
+(dnf f-uimm8 "uimm8" () 23 8) ;used in immediate byte data,eg in ADDB,MOVB insns
+(dnf f-uimm16 "uimm16" () 31 16) ;used for immediate word data
+(dnf f-memory "memory" () 31 16) ; used for memory operands
+(dnf f-memgr8 "memory" () 31 16) ; memory location of gr
+(dnf f-rel8 "rel8" (PCREL-ADDR RELOC) 15 8) ;used in JMPR,CALLR
+(dnf f-relhi8 "relhi8" (PCREL-ADDR RELOC) 23 8) ;used in JB,JBC,JNB,JNBS
+(dnf f-reg8 "reg8" () 15 8) ;required where 8bit gp register used
+(dnf f-regmem8 "regmem8" () 15 8) ;required where 8bit register used
+(dnf f-regoff8 "regoff8" () 15 8) ;required for offset calc
+(dnf f-reghi8 "reghi8" () 23 8) ;required where 8bit register number used
+(dnf f-regb8 "regb8" () 15 8) ;required for byte registers RL0,RH0, till RL8,RH8
+(dnf f-seg8 "seg8" () 15 8) ;used as segment number in JMPS,CALLS
+(dnf f-segnum8 "segnum8" () 23 8) ;used in EXTS,EXTSR
+(dnf f-mask8 "mask8" () 23 8) ;used as mask in BFLDH,BFLDL insns
+(dnf f-pagenum "page num" () 25 10);used in EXTP,EXTPR
+(dnf f-datahi8 "datahi8" () 31 8) ;used for filling with const data
+(dnf f-data8 "data8" () 23 8) ;used for filling with const data
+(dnf f-offset16 "address offset16" (ABS-ADDR RELOC) 31 16) ;used in JMPS,JMPA,CALLA,CALLS
+(dnf f-op-bit1 "gap of 1 bit" () 11 1) ;used for filling with const data
+(dnf f-op-bit2 "gap of 2 bits" () 11 2) ;used for filling with const data
+(dnf f-op-bit4 "gap of 4 bits" () 11 4) ;used for filling with const data
+(dnf f-op-bit3 "gap of 3 bits" () 10 3) ;used in CALLA, JMPA
+(dnf f-op-2bit "gap of 2 bits" () 10 2) ;used in CALLA
+(dnf f-op-bitone "gap of 1 bit " () 10 1) ;used in JMPA
+(dnf f-op-onebit "gap of 1 bit " () 9 1) ;used in JMPA
+(dnf f-op-1bit "gap of 1 bit " () 8 1) ;used in JMPA, CALLA
+(dnf f-op-lbit4 "gap of 4 bits" () 15 4) ;used for filling with const data
+(dnf f-op-lbit2 "gap of 2 bits" () 15 2) ;used for filling with const data
+(dnf f-op-bit8 "gap of 8 bits" () 31 8) ;used for filling with const data
+(dnf f-op-bit16 "gap of 16 bits" () 31 16) ;used for filling with const data
+(dnf f-qbit "qbit" () 7 4) ;used in bit field of bset/bclear
+(dnf f-qlobit "qlobit" () 31 4) ;used for filling with const data
+(dnf f-qhibit "qhibit" () 27 4) ;used for filling with const data
+(dnf f-qlobit2 "qlobit2" () 27 2) ;used for filling with const data
+(dnf f-pof "upof16" () 31 16) ; used for memory operands
+
+; Enums.
+; insn-op1: bits 0-3
+(define-normal-insn-enum insn-op1 "insn format enums" () OP1_ f-op1
+ ("0" "1" "2" "3" "4" "5" "6" "7"
+ "8" "9" "10" "11" "12" "13" "14" "15")
+)
+
+; insn-op2: bits 4-7
+(define-normal-insn-enum insn-op2 "op2 enums" () OP2_ f-op2
+ ("0" "1" "2" "3" "4" "5" "6" "7"
+ "8" "9" "10" "11" "12" "13" "14" "15")
+)
+
+;/*for bclr/bset*/
+; insn-rcond: bits 0-3
+(define-normal-insn-enum insn-qcond "bit set/clear enums" () QBIT_ f-qcond
+ (("0" 0) ("1" 1) ("2" 2) ("3" 3) ("4" 4) ("5" 5) ("6" 6) ("7" 7) ("8" 8) ("9" 9) ("10" 10)
+ ("11" 11) ("12" 12) ("13" 13) ("14" 14) ("15" 15))
+)
+;/************/
+; insn-rcond: bits 0-3
+(define-normal-insn-enum insn-rcond "relative jump condition code op2 enums" () COND_ f-rcond
+ (("UC" 0) ("NET" 1) ("Z" 2) ("NE_NZ" 3) ("V" 4) ("NV" 5) ("N" 6) ("NN" 7)
+ ("C" 8) ("NC" 9) ("SGT" 10) ("SLE" 11) ("SLT" 12) ("SGE" 13) ("UGT" 14) ("ULE" 15)
+ ("EQ" 2) ("NE" 3) ("ULT" 8) ("UGE" 9))
+)
+
+
+
+; Hardware pieces.
+; These entries list the elements of the raw hardware.
+; They're also used to provide tables and other elements of the assembly
+; language.
+
+(dnh h-pc "program counter" (PC) (pc) () () ())
+
+(define-keyword
+ (name gr-names)
+ (print-name h-gr)
+ (prefix "")
+ (values (r0 0) (r1 1) (r2 2) (r3 3) (r4 4) (r5 5) (r6 6) (r7 7)
+ (r8 8) (r9 9) (r10 10) (r11 11) (r12 12) (r13 13) (r14 14) (r15 15))
+
+)
+(define-hardware
+ (name h-gr)
+ (comment "general registers")
+ (attrs PROFILE CACHE-ADDR)
+ (type register HI (16))
+ (indices extern-keyword gr-names)
+)
+
+(define-keyword
+ (name ext-names)
+ (print-name h-ext)
+ (prefix "")
+ (values (0x1 0) (0x2 1) (0x3 2) (0x4 3)
+ ("1" 0) ("2" 1) ("3" 2) ("4" 3))
+
+)
+
+(define-hardware
+ (name h-ext)
+ (comment "ext values")
+ (attrs PROFILE CACHE-ADDR)
+ (type register HI (8))
+ (indices extern-keyword ext-names)
+)
+
+(define-keyword
+ (name psw-names)
+ (print-name h-psw)
+ (prefix "")
+ (values ("IEN" 136) ("r0.11" 240) ("r1.11" 241) ("r2.11" 242) ("r3.11" 243) ("r4.11" 244)
+ ("r5.11" 245) ("r6.11" 246) ("r7.11" 247) ("r8.11" 248)
+ ("r9.11" 249) ("r10.11" 250) ("r11.11" 251) ("r12.11" 252)
+ ("r13.11" 253) ("r14.11" 254) ("r15.11" 255))
+)
+
+(define-hardware
+ (name h-psw)
+ (comment "ext values")
+ (attrs PROFILE CACHE-ADDR)
+ (type register HI (1))
+ (indices extern-keyword psw-names)
+)
+
+(define-keyword
+ (name grb-names)
+ (print-name h-grb)
+ (prefix "")
+ (values (rl0 0) (rh0 1) (rl1 2) (rh1 3) (rl2 4) (rh2 5) (rl3 6) (rh3 7)
+ (rl4 8) (rh4 9) (rl5 10) (rh5 11) (rl6 12) (rh6 13) (rl7 14) (rh7 15))
+)
+
+(define-hardware
+ (name h-grb)
+ (comment "general registers")
+ (attrs PROFILE CACHE-ADDR)
+ (type register QI (16))
+ (indices extern-keyword grb-names)
+)
+
+(define-keyword
+ (name conditioncode-names)
+ (print-name h-cc)
+ (prefix "")
+ (values (cc_UC 0) (cc_NET 1) (cc_Z 2) (cc_EQ 2) (cc_NZ 3) (cc_NE 3) (cc_V 4) (cc_NV 5) (cc_N 6) (cc_NN 7) (cc_ULT 8) (cc_UGE 9)
+ (cc_C 8) (cc_NC 9) (cc_SGT 10) (cc_SLE 11) (cc_SLT 12) (cc_SGE 13) (cc_UGT 14)
+ (cc_ULE 15))
+)
+(define-hardware
+ (name h-cc)
+ (comment "condition codes")
+ (attrs PROFILE CACHE-ADDR)
+ (type register QI (16))
+ (indices extern-keyword conditioncode-names)
+)
+
+(define-keyword
+ (name extconditioncode-names)
+ (print-name h-ecc)
+ (prefix "")
+ (values(cc_UC 0) (cc_NET 2) (cc_Z 4) (cc_EQ 4) (cc_NZ 6) (cc_NE 6) (cc_V 8) (cc_NV 10) (cc_N 12) (cc_NN 14) (cc_ULT 16) (cc_UGE 18) (cc_C 16) (cc_NC 18) (cc_SGT 20)
+ (cc_SLE 22) (cc_SLT 24) (cc_SGE 26) (cc_UGT 28) (cc_ULE 30) (cc_nusr0 1)
+ (cc_nusr1 3) (cc_usr0 5) (cc_usr1 7))
+)
+(define-hardware
+ (name h-ecc)
+ (comment "extended condition codes")
+ (attrs PROFILE CACHE-ADDR)
+ (type register QI (4))
+ (indices extern-keyword extconditioncode-names)
+)
+
+(define-keyword
+ (name grb8-names)
+ (print-name h-grb8)
+ (prefix "")
+ (values (dpp0 0) (dpp1 1) (dpp2 2) (dpp3 3)
+ (psw 136) (cp 8) (mdl 7) (mdh 6)
+ (mdc 135) (sp 9) (csp 4) (vecseg 137)
+ (stkov 10) (stkun 11) (cpucon1 12) (cpucon2 13)
+ (zeros 142) (ones 143) (spseg 134) (tfr 214)
+ (rl0 240) (rh0 241) (rl1 242) (rh1 243) (rl2 244) (rh2 245) (rl3 246) (rh3 247)
+ (rl4 248) (rh4 249) (rl5 250) (rh5 251) (rl6 252) (rh6 253) (rl7 254) (rh7 255))
+)
+
+(define-hardware
+ (name h-grb8)
+ (comment "general byte registers")
+ (attrs PROFILE CACHE-ADDR)
+ (type register QI (36))
+ (indices extern-keyword grb8-names)
+)
+
+(define-keyword
+ (name r8-names)
+ (print-name h-r8)
+ (prefix "")
+ (values (dpp0 0) (dpp1 1) (dpp2 2) (dpp3 3)
+ (psw 136) (cp 8) (mdl 7) (mdh 6)
+ (mdc 135) (sp 9) (csp 4) (vecseg 137)
+ (stkov 10) (stkun 11) (cpucon1 12) (cpucon2 13)
+ (zeros 142) (ones 143) (spseg 134) (tfr 214)
+ (r0 240) (r1 241) (r2 242) (r3 243) (r4 244) (r5 245) (r6 246) (r7 247)
+ (r8 248) (r9 249) (r10 250) (r11 251) (r12 252) (r13 253) (r14 254) (r15 255))
+)
+
+(define-hardware
+ (name h-r8)
+ (comment "registers")
+ (attrs PROFILE CACHE-ADDR)
+ (type register HI (36))
+ (indices extern-keyword r8-names)
+)
+
+(define-keyword
+ (name regmem8-names)
+ (print-name h-regmem8)
+ (prefix "")
+ (values (dpp0 0) (dpp1 1) (dpp2 2) (dpp3 3)
+ (psw 136) (cp 8) (mdl 7) (mdh 6)
+ (mdc 135) (sp 9) (csp 4) (vecseg 137)
+ (stkov 10) (stkun 11) (cpucon1 12) (cpucon2 13)
+ (zeros 142) (ones 143) (spseg 134) (tfr 214)
+ (r0 240) (r1 241) (r2 242) (r3 243) (r4 244) (r5 245) (r6 246) (r7 247)
+ (r8 248) (r9 249) (r10 250) (r11 251) (r12 252) (r13 253) (r14 254) (r15 255))
+)
+
+(define-hardware
+ (name h-regmem8)
+ (comment "registers")
+ (attrs )
+ (type register HI (16))
+ (indices extern-keyword regmem8-names)
+)
+
+(define-keyword
+ (name regdiv8-names)
+ (print-name h-regdiv8)
+ (prefix "")
+ (values (r0 0) (r1 17) (r2 34) (r3 51) (r4 68) (r5 85) (r6 102) (r7 119)
+ (r8 136) (r9 153) (r10 170) (r11 187) (r12 204) (r13 221) (r14 238) (r15 255))
+)
+
+(define-hardware
+ (name h-regdiv8)
+ (comment "division insn registers")
+ (attrs PROFILE CACHE-ADDR)
+ (type register HI (16))
+ (indices extern-keyword regdiv8-names)
+)
+
+(define-keyword
+ (name reg0-name)
+ (print-name h-reg0)
+ (prefix "")
+ (values (0x1 1) (0x2 2) (0x3 3) (0x4 4) (0x5 5) (0x6 6) (0x7 7) (0x8 8) (0x9 9) (0xa 10) (0xb 11)
+ (0xc 12) (0xd 13) (0xe 14) (0xf 15)
+ ("1" 1) ("2" 2) ("3" 3) ("4" 4) ("5" 5) ("6" 6) ("7" 7) ("8" 8) ("9" 9) ("10" 10) ("11" 11)
+ ("12" 12) ("13" 13) ("14" 14) ("15" 15))
+)
+
+(define-hardware
+ (name h-r0)
+ (comment "for 4-bit data excuding 0")
+ (attrs PROFILE CACHE-ADDR)
+ (type register HI (30))
+ (indices extern-keyword reg0-name)
+)
+
+(define-keyword
+ (name reg0-name1)
+ (print-name h-reg01)
+ (prefix "")
+ (values (0x1 1) (0x2 2) (0x3 3) (0x4 4) (0x5 5) (0x6 6) (0x7 7)
+ ("1" 1) ("2" 2) ("3" 3) ("4" 4) ("5" 5) ("6" 6) ("7" 7))
+)
+
+(define-hardware
+ (name h-r01)
+ (comment "for 4-bit data excuding 0")
+ (attrs PROFILE CACHE-ADDR)
+ (type register HI (14))
+ (indices extern-keyword reg0-name1)
+)
+
+(define-keyword
+ (name regbmem8-names)
+ (print-name h-regbmem8)
+ (prefix "")
+ (values (dpp0 0) (dpp1 1) (dpp2 2) (dpp3 3)
+ (psw 136) (cp 8) (mdl 7) (mdh 6)
+ (mdc 135) (sp 9) (csp 4) (vecseg 137)
+ (stkov 10) (stkun 11) (cpucon1 12) (cpucon2 13)
+ (zeros 142) (ones 143) (spseg 134) (tfr 214)
+ (rl0 240) (rh0 241) (rl1 242) (rh1 243) (rl2 244) (rh2 245) (rl3 246) (rh3 247)
+ (rl4 248) (rh4 249) (rl5 250) (rh5 251) (rl6 252) (rh6 253) (rl7 254) (rh7 255))
+)
+
+(define-hardware
+ (name h-regbmem8)
+ (comment "registers")
+ (attrs PROFILE CACHE-ADDR)
+ (type register HI (36))
+ (indices extern-keyword regbmem8-names)
+)
+
+(define-keyword
+ (name memgr8-names)
+ (print-name h-memgr8)
+ (prefix "")
+ (values (dpp0 65024) (dpp1 65026) (dpp2 65028) (dpp3 65030)
+ (psw 65296) (cp 65040) (mdl 65038) (mdh 65036)
+ (mdc 65294) (sp 65042) (csp 65032) (vecseg 65298)
+ (stkov 65044) (stkun 65046) (cpucon1 65048) (cpucon2 65050)
+ (zeros 65308) (ones 65310) (spseg 65292) (tfr 65452) )
+)
+
+(define-hardware
+ (name h-memgr8)
+ (comment "memory location of registers")
+ (attrs )
+ (type register HI (20))
+ (indices extern-keyword memgr8-names)
+)
+
+(dsh h-cond "condition bit" () (register BI)) ;any bit from PSW while comparison
+; This bit is part of the PSW register
+(dsh h-cbit "carry bit" () (register BI))
+
+(dsh h-sgtdis "segmentation enable bit" () (register BI)) ;0 means segmentation enabled
+
+;Instruction operands
+; -- layer between the assembler and the raw hardware description
+; -- the main means of manipulating instruction fields in the semantic code
+
+; XC16X specific operand attributes:
+
+(define-attr
+ (for operand)
+ (type boolean)
+ (name HASH-PREFIX)
+ (comment "immediates have an optional '#' prefix")
+)
+
+(define-attr
+ (for operand)
+ (type boolean)
+ (name DOT-PREFIX)
+ (comment "bit addr have an optional '.' prefix")
+)
+
+(define-attr
+ (for operand)
+ (type boolean)
+ (name POF-PREFIX)
+ (comment "page offset ")
+)
+
+(define-attr
+ (for operand)
+ (type boolean)
+ (name PAG-PREFIX)
+ (comment "page ")
+)
+
+(define-attr
+ (for operand)
+ (type boolean)
+ (name SOF-PREFIX)
+ (comment "segment offset selection")
+)
+
+(define-attr
+ (for operand)
+ (type boolean)
+ (name SEG-PREFIX)
+ (comment "segment")
+)
+
+(dnop sr "source register" () h-gr f-r2)
+(dnop dr "destination register" () h-gr f-r1)
+(dnop dri "destination register" () h-gr f-r4)
+(dnop srb "source register" () h-grb f-r2)
+(dnop drb "destination register" () h-grb f-r1)
+(dnop sr2 "2 bit source register" () h-gr f-r0)
+(dnop src1 "source register 1" () h-gr f-r1)
+(dnop src2 "source register 2" () h-gr f-r2)
+(dnop srdiv "source register 2" () h-regdiv8 f-reg8)
+(dnop RegNam "PSW bits" () h-psw f-reg8)
+(dnop uimm2 "2 bit unsigned number" (HASH-PREFIX) h-ext f-uimm2)
+(dnop uimm3 "3 bit unsigned number" (HASH-PREFIX) h-r01 f-uimm3)
+(dnop uimm4 "4 bit unsigned number" (HASH-PREFIX) h-uint f-uimm4)
+(dnop uimm7 "7 bit trap number" (HASH-PREFIX) h-uint f-uimm7)
+(dnop uimm8 "8 bit unsigned immediate" (HASH-PREFIX) h-uint f-uimm8)
+(dnop uimm16 "16 bit unsigned immediate" (HASH-PREFIX) h-uint f-uimm16)
+(dnop upof16 "16 bit unsigned immediate" (POF-PREFIX) h-addr f-memory)
+(dnop reg8 "8 bit word register number" () h-r8 f-reg8)
+(dnop regmem8 "8 bit word register number" () h-regmem8 f-regmem8)
+(dnop regbmem8 "8 bit byte register number" () h-regbmem8 f-regmem8)
+(dnop regoff8 "8 bit word register number" () h-r8 f-regoff8)
+(dnop reghi8 "8 bit word register number" () h-r8 f-reghi8)
+(dnop regb8 "8 bit byte register number" () h-grb8 f-regb8)
+(dnop genreg "8 bit word register number" () h-r8 f-regb8)
+(dnop seg "8 bit segment number" () h-uint f-seg8)
+(dnop seghi8 "8 bit hi segment number" () h-uint f-segnum8)
+(dnop caddr "16 bit address offset" () h-addr f-offset16)
+(dnop rel "8 bit signed relative offset" () h-sint f-rel8)
+(dnop relhi "hi 8 bit signed relative offset" () h-sint f-relhi8)
+(dnop condbit "condition bit" (SEM-ONLY) h-cond f-nil)
+(dnop bit1 "gap of 1 bit" () h-uint f-op-bit1)
+(dnop bit2 "gap of 2 bits" () h-uint f-op-bit2)
+(dnop bit4 "gap of 4 bits" () h-uint f-op-bit4)
+(dnop lbit4 "gap of 4 bits" () h-uint f-op-lbit4)
+(dnop lbit2 "gap of 2 bits" () h-uint f-op-lbit2)
+(dnop bit8 "gap of 8 bits" () h-uint f-op-bit8)
+(dnop u4 "gap of 4 bits" () h-r0 f-uimm4)
+(dnop bitone "field of 1 bit" () h-uint f-op-onebit)
+(dnop bit01 "field of 1 bit" () h-uint f-op-1bit)
+(dnop cond "condition code" () h-cc f-condcode)
+(dnop icond "indirect condition code" () h-cc f-icondcode)
+(dnop extcond "extended condition code" () h-ecc f-extccode)
+(dnop memory "16 bit memory" () h-addr f-memory)
+(dnop memgr8 "16 bit memory" () h-memgr8 f-memgr8)
+(dnop cbit "carry bit" (SEM-ONLY) h-cbit f-nil)
+(dnop qbit "bit addr" (DOT-PREFIX) h-uint f-qbit)
+(dnop qlobit "bit addr" (DOT-PREFIX) h-uint f-qlobit)
+(dnop qhibit "bit addr" (DOT-PREFIX) h-uint f-qhibit)
+(dnop mask8 "8 bit mask" (HASH-PREFIX) h-uint f-mask8)
+(dnop masklo8 "8 bit mask" (HASH-PREFIX) h-uint f-datahi8)
+(dnop pagenum "10 bit page number" (HASH-PREFIX) h-uint f-pagenum)
+(dnop data8 "8 bit data" (HASH-PREFIX) h-uint f-data8)
+(dnop datahi8 "8 bit data" (HASH-PREFIX) h-uint f-datahi8)
+(dnop sgtdisbit "segmentation enable bit" (SEM-ONLY) h-sgtdis f-nil)
+(dnop upag16 "16 bit unsigned immediate" (PAG-PREFIX) h-uint f-uimm16)
+(dnop useg8 "8 bit segment " (SEG-PREFIX) h-uint f-seg8)
+(dnop useg16 "16 bit address offset" (SEG-PREFIX) h-uint f-offset16)
+(dnop usof16 "16 bit address offset" (SOF-PREFIX) h-uint f-offset16)
+
+; define hash operator
+(define-operand (name hash) (comment "# prefix") (attrs)
+ (type h-sint)
+ (index f-nil)
+ (handlers (parse "hash") (print "hash"))
+)
+
+; define dot operator
+(define-operand (name dot) (comment ". prefix") (attrs)
+ (type h-sint)
+ (index f-nil)
+ (handlers (parse "dot") (print "dot"))
+)
+
+; define pof operator
+(define-operand (name pof) (comment "pof: prefix") (attrs)
+ (type h-sint)
+ (index f-nil)
+ (handlers (parse "pof") (print "pof"))
+)
+
+; define pag operator
+(define-operand (name pag) (comment "pag: prefix") (attrs)
+ (type h-sint)
+ (index f-nil)
+ (handlers (parse "pag") (print "pag"))
+)
+
+; define sof operator
+(define-operand (name sof) (comment "sof: prefix") (attrs)
+ (type h-sint)
+ (index f-nil)
+ (handlers (parse "sof") (print "sof"))
+)
+
+; define seg operator
+(define-operand (name segm) (comment "seg: prefix") (attrs)
+ (type h-sint)
+ (index f-nil)
+ (handlers (parse "seg") (print "seg"))
+)
+
+; IDOC attribute for instruction documentation.
+(define-attr
+ (for insn)
+ (type enum)
+ (name IDOC)
+ (comment "insn kind for documentation")
+ (attrs META)
+ (values
+ (MOVE - () "Data Movement")
+ (ALU - () "Arithmatic & logical")
+ (CMP - () "Compare")
+ (JMP - () "Jump & Call")
+ (MISC - () "Miscellaneous")
+ (SYSC - () "System control")
+ )
+)
+
+; Include the instruction set descriptions from their respective
+; source files.
+
+;Arithmatic insns
+;******************************************************************
+
+;add/sub register and immediate
+(define-pmacro (arithmetic16 name insn insn1 opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$"dir"$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 (mem HI op2)))
+ ()
+ )
+)
+(arithmetic16 addrpof add add OP1_0 OP2_2 reg8 upof16 HI "pof")
+(arithmetic16 subrpof sub sub OP1_2 OP2_2 reg8 upof16 HI "pof")
+(arithmetic16 addbrpof addb add OP1_0 OP2_3 regb8 upof16 QI "pof")
+(arithmetic16 subbrpof subb sub OP1_2 OP2_3 regb8 upof16 QI "pof")
+(arithmetic16 addrpag add add OP1_0 OP2_2 reg8 upag16 HI "pag")
+(arithmetic16 subrpag sub sub OP1_2 OP2_2 reg8 upag16 HI "pag")
+(arithmetic16 addbrpag addb add OP1_0 OP2_3 regb8 upag16 QI "pag")
+(arithmetic16 subbrpag subb sub OP1_2 OP2_3 regb8 upag16 QI "pag")
+
+;add/sub register and immediate
+(define-pmacro (arithmetic17 name insn insn1 opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$"dir"$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 (mem HI op2) cbit))
+ ()
+ )
+)
+(arithmetic17 addcrpof addc addc OP1_1 OP2_2 reg8 upof16 HI "pof")
+(arithmetic17 subcrpof subc subc OP1_3 OP2_2 reg8 upof16 HI "pof")
+(arithmetic17 addcbrpof addcb addc OP1_1 OP2_3 regb8 upof16 QI "pof")
+(arithmetic17 subcbrpof subcb subc OP1_3 OP2_3 regb8 upof16 QI "pof")
+(arithmetic17 addcrpag addc addc OP1_1 OP2_2 reg8 upag16 HI "pag")
+(arithmetic17 subcrpag subc subc OP1_3 OP2_2 reg8 upag16 HI "pag")
+(arithmetic17 addcbrpag addcb addc OP1_1 OP2_3 regb8 upag16 QI "pag")
+(arithmetic17 subcbrpag subcb subc OP1_3 OP2_3 regb8 upag16 QI "pag")
+
+;add/sub register and immediate
+(define-pmacro (arithmetic18 name insn insn1 opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"dir"$"op1 ",$"op2)
+ (+ opc1 opc2 op2 op1)
+ (set (mem HI op1) (insn1 (mem HI op1) op2 ))
+ ()
+ )
+)
+(arithmetic18 addrpofr add add OP1_0 OP2_4 upof16 reg8 HI "pof")
+(arithmetic18 subrpofr sub sub OP1_2 OP2_4 upof16 reg8 HI "pof")
+(arithmetic18 addbrpofr addb add OP1_0 OP2_5 upof16 regb8 QI "pof")
+(arithmetic18 subbrpofr subb sub OP1_2 OP2_5 upof16 regb8 QI "pof")
+
+;add/sub register and immediate
+(define-pmacro (arithmetic19 name insn insn1 opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"dir"$"op1 ",$"op2)
+ (+ opc1 opc2 op2 op1)
+ (set (mem HI op1) (insn1 mode (mem HI op1) op2 cbit))
+ ()
+ )
+)
+(arithmetic19 addcrpofr addc addc OP1_1 OP2_4 upof16 reg8 HI "pof")
+(arithmetic19 subcrpofr subc subc OP1_3 OP2_4 upof16 reg8 HI "pof")
+(arithmetic19 addcbrpofr addcb addc OP1_1 OP2_5 upof16 regb8 QI "pof")
+(arithmetic19 subcbrpofr subcb subc OP1_3 OP2_5 upof16 regb8 QI "pof")
+
+;add/sub register and immediate
+(define-pmacro (arithmetic20 name insn insn1 opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"dir"$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+(arithmetic20 addrhpof add add OP1_0 OP2_6 reg8 uimm16 HI "pof")
+(arithmetic20 subrhpof sub sub OP1_2 OP2_6 reg8 uimm16 HI "pof")
+(arithmetic20 addbrhpof add add OP1_0 OP2_6 reg8 uimm16 HI "pag")
+(arithmetic20 subbrhpof sub sub OP1_2 OP2_6 reg8 uimm16 HI "pag")
+
+;add/sub register and immediate
+(define-pmacro (arithmetic21 name insn insn1 opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"dir"$"op2)
+ (+ opc1 opc2 op1 (f-op-bit1 0) op2)
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+(arithmetic21 addrhpof3 add add OP1_0 OP2_8 dr uimm3 HI "pof")
+(arithmetic21 subrhpof3 sub sub OP1_2 OP2_8 dr uimm3 HI "pof")
+(arithmetic21 addbrhpag3 addb add OP1_0 OP2_9 drb uimm3 QI "pag")
+(arithmetic21 subbrhpag3 subb sub OP1_2 OP2_9 drb uimm3 QI "pag")
+(arithmetic21 addrhpag3 add add OP1_0 OP2_8 dr uimm3 HI "pag")
+(arithmetic21 subrhpag3 sub sub OP1_2 OP2_8 dr uimm3 HI "pag")
+(arithmetic21 addbrhpof3 addb add OP1_0 OP2_9 drb uimm3 QI "pof")
+(arithmetic21 subbrhpof3 subb sub OP1_2 OP2_9 drb uimm3 QI "pof")
+
+;add/sub register and immediate
+(define-pmacro (arithmetic22 name insn insn1 opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"dir"$"op2)
+ (+ opc1 opc2 op1 op2 (f-op-bit8 0))
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+(arithmetic22 addrbhpof addb add OP1_0 OP2_7 regb8 uimm8 QI "pof")
+(arithmetic22 subrbhpof subb sub OP1_2 OP2_7 regb8 uimm8 QI "pof")
+(arithmetic22 addbrhpag addb add OP1_0 OP2_7 regb8 uimm8 QI "pag")
+(arithmetic22 subbrhpag subb sub OP1_2 OP2_7 regb8 uimm8 QI "pag")
+
+;add/sub register and immediate
+(define-pmacro (arithmetic23 name insn insn1 opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"dir"$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 op2 cbit))
+ ()
+ )
+)
+(arithmetic23 addcrhpof addc addc OP1_1 OP2_6 reg8 uimm16 HI "pof")
+(arithmetic23 subcrhpof subc subc OP1_3 OP2_6 reg8 uimm16 HI "pof")
+(arithmetic23 addcbrhpof addc addc OP1_1 OP2_6 reg8 uimm16 HI "pag")
+(arithmetic23 subcbrhpof subc subc OP1_3 OP2_6 reg8 uimm16 HI "pag")
+
+;add/sub register and immediate
+(define-pmacro (arithmetic24 name insn insn1 opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"dir"$"op2)
+ (+ opc1 opc2 op1 (f-op-bit1 0) op2)
+ (set mode op1 (insn1 mode op1 op2 cbit))
+ ()
+ )
+)
+(arithmetic24 addcrhpof3 addc addc OP1_1 OP2_8 dr uimm3 HI "pof")
+(arithmetic24 subcrhpof3 subc subc OP1_3 OP2_8 dr uimm3 HI "pof")
+(arithmetic24 addcbrhpag3 addcb addc OP1_1 OP2_9 drb uimm3 QI "pag")
+(arithmetic24 subcbrhpag3 subcb subc OP1_3 OP2_9 drb uimm3 QI "pag")
+(arithmetic24 addcrhpag3 addc addc OP1_1 OP2_8 dr uimm3 HI "pag")
+(arithmetic24 subcrhpag3 subc subc OP1_3 OP2_8 dr uimm3 HI "pag")
+(arithmetic24 addcbrhpof3 addcb addc OP1_1 OP2_9 drb uimm3 QI "pof")
+(arithmetic24 subcbrhpof3 subcb subc OP1_3 OP2_9 drb uimm3 QI "pof")
+
+;add/sub register and immediate
+(define-pmacro (arithmetic25 name insn insn1 opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"dir"$"op2)
+ (+ opc1 opc2 op1 op2 (f-op-bit8 0))
+ (set mode op1 (insn1 mode op1 op2 cbit))
+ ()
+ )
+)
+(arithmetic25 addcrbhpof addcb addc OP1_1 OP2_7 regb8 uimm8 QI "pof")
+(arithmetic25 subcrbhpof subcb subc OP1_3 OP2_7 regb8 uimm8 QI "pof")
+(arithmetic25 addcbrhpag addcb addc OP1_1 OP2_7 regb8 uimm8 QI "pag")
+(arithmetic25 subcbrhpag subcb subc OP1_3 OP2_7 regb8 uimm8 QI "pag")
+
+;add/sub register and immediate
+(define-pmacro (arithmetic10 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"op2)
+ (+ opc1 opc2 op1 (f-op-bit1 0) op2)
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+(arithmetic10 addri add add OP1_0 OP2_8 dr uimm3 HI)
+(arithmetic10 subri sub sub OP1_2 OP2_8 dr uimm3 HI)
+(arithmetic10 addbri addb add OP1_0 OP2_9 drb uimm3 QI)
+(arithmetic10 subbri subb sub OP1_2 OP2_9 drb uimm3 QI)
+
+;add/sub register and immediate
+(define-pmacro (arithmetic11 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+(arithmetic11 addrim add add OP1_0 OP2_6 reg8 uimm16 HI)
+(arithmetic11 subrim sub sub OP1_2 OP2_6 reg8 uimm16 HI)
+
+;add/sub register and immediate
+(define-pmacro (arithmetic12 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"op2)
+ (+ opc1 opc2 op1 op2 (f-op-bit8 0))
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+(arithmetic12 addbrim addb add OP1_0 OP2_7 regb8 uimm8 QI)
+(arithmetic12 subbrim subb sub OP1_2 OP2_7 regb8 uimm8 QI)
+
+;add/sub register and immediate with carry
+(define-pmacro (arithmetic13 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"op2)
+ (+ opc1 opc2 op1 (f-op-bit1 0) op2)
+ (set mode op1 (insn1 mode op1 op2 cbit))
+ ()
+ )
+)
+(arithmetic13 addcri addc addc OP1_1 OP2_8 dr uimm3 HI)
+(arithmetic13 subcri subc subc OP1_3 OP2_8 dr uimm3 HI)
+(arithmetic13 addcbri addcb addc OP1_1 OP2_9 drb uimm3 QI)
+(arithmetic13 subcbri subcb subc OP1_3 OP2_9 drb uimm3 QI)
+
+;add/sub register and immediate with carry
+(define-pmacro (arithmetic14 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 op2 cbit))
+ ()
+ )
+)
+(arithmetic14 addcrim addc addc OP1_1 OP2_6 reg8 uimm16 HI)
+(arithmetic14 subcrim subc subc OP1_3 OP2_6 reg8 uimm16 HI)
+
+;add/sub register and immediate with carry
+(define-pmacro (arithmetic15 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"op2)
+ (+ opc1 opc2 op1 op2 (f-op-bit8 0))
+ (set mode op1 (insn1 mode op1 op2 cbit))
+ ()
+ )
+)
+(arithmetic15 addcbrim addcb addc OP1_1 OP2_7 regb8 uimm8 QI)
+(arithmetic15 subcbrim subcb subc OP1_3 OP2_7 regb8 uimm8 QI)
+
+
+;add/sub registers
+(define-pmacro (arithmetic name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+(arithmetic addr add add OP1_0 OP2_0 dr sr HI)
+(arithmetic subr sub sub OP1_2 OP2_0 dr sr HI)
+(arithmetic addbr addb add OP1_0 OP2_1 drb srb QI)
+(arithmetic subbr subb sub OP1_2 OP2_1 drb srb QI)
+
+;add/sub register and indirect memory
+(define-pmacro (arithmetic1 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",[$"op2"]")
+ (+ opc1 opc2 op1 (f-op-bit2 2) op2)
+ (set mode op1 (insn1 mode op1 (mem HI op2)))
+ ()
+ )
+)
+(arithmetic1 add2 add add OP1_0 OP2_8 dr sr2 HI)
+(arithmetic1 sub2 sub sub OP1_2 OP2_8 dr sr2 HI)
+(arithmetic1 addb2 addb add OP1_0 OP2_9 drb sr2 QI)
+(arithmetic1 subb2 subb sub OP1_2 OP2_9 drb sr2 QI)
+
+;add/sub register and indirect memory post increment
+(define-pmacro (arithmetic2 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",[$"op2"+]")
+ (+ opc1 opc2 op1 (f-op-bit2 3) op2)
+ (sequence ()
+ (set mode op1 (insn1 mode op1 (mem HI op2)))
+ (set HI op2 (add HI op2 (const 2)))
+ )
+ ()
+ )
+)
+(arithmetic2 add2i add add OP1_0 OP2_8 dr sr2 HI)
+(arithmetic2 sub2i sub sub OP1_2 OP2_8 dr sr2 HI)
+(arithmetic2 addb2i addb add OP1_0 OP2_9 drb sr2 QI)
+(arithmetic2 subb2i subb sub OP1_2 OP2_9 drb sr2 QI)
+
+;add/sub registers with carry
+(define-pmacro (arithmetic3 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 op2 cbit))
+ ()
+ )
+)
+(arithmetic3 addcr addc addc OP1_1 OP2_0 dr sr HI)
+(arithmetic3 subcr subc subc OP1_3 OP2_0 dr sr HI)
+(arithmetic3 addbcr addcb addc OP1_1 OP2_1 drb srb QI)
+(arithmetic3 subbcr subcb subc OP1_3 OP2_1 drb srb QI)
+
+
+;add/sub register and indirect memory
+(define-pmacro (arithmetic4 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",[$"op2"]")
+ (+ opc1 opc2 op1 (f-op-bit2 2) op2)
+ (set mode op1 (insn1 mode op1 (mem HI op2) cbit))
+ ()
+ )
+)
+(arithmetic4 addcr2 addc addc OP1_1 OP2_8 dr sr2 HI)
+(arithmetic4 subcr2 subc subc OP1_3 OP2_8 dr sr2 HI)
+(arithmetic4 addbcr2 addcb addc OP1_1 OP2_9 drb sr2 QI)
+(arithmetic4 subbcr2 subcb subc OP1_3 OP2_9 drb sr2 QI)
+
+;add/sub register and indirect memory post increment
+(define-pmacro (arithmetic5 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",[$"op2"+]")
+ (+ opc1 opc2 op1 (f-op-bit2 3) op2)
+ (sequence ()
+ (set mode op1 (insn1 mode op1 (mem HI op2) cbit))
+ (set HI op2 (add HI op2 (const 2)))
+ )
+ ()
+ )
+)
+(arithmetic5 addcr2i addc addc OP1_1 OP2_8 dr sr2 HI)
+(arithmetic5 subcr2i subc subc OP1_3 OP2_8 dr sr2 HI)
+(arithmetic5 addbcr2i addcb addc OP1_1 OP2_9 drb sr2 QI)
+(arithmetic5 subbcr2i subcb subc OP1_3 OP2_9 drb sr2 QI)
+
+;add/sub register and direct memory
+(define-pmacro (arithmetic6 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+
+;add/sub register and direct memory
+(define-pmacro (arithmetic7 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op2 op1)
+ (set (mem HI op1) (insn1 (mem HI op1) op2))
+ ()
+ )
+)
+(arithmetic6 addrm2 add add OP1_0 OP2_2 regmem8 memgr8 HI)
+(arithmetic7 addrm3 add add OP1_0 OP2_4 memgr8 regmem8 HI)
+(arithmetic6 addrm add add OP1_0 OP2_2 reg8 memory HI)
+(arithmetic7 addrm1 add add OP1_0 OP2_4 memory reg8 HI)
+(arithmetic6 subrm3 sub sub OP1_2 OP2_2 regmem8 memgr8 HI)
+(arithmetic7 subrm2 sub sub OP1_2 OP2_4 memgr8 regmem8 HI)
+(arithmetic6 subrm1 sub sub OP1_2 OP2_2 reg8 memory HI)
+(arithmetic7 subrm sub sub OP1_2 OP2_4 memory reg8 HI)
+(arithmetic6 addbrm2 addb add OP1_0 OP2_3 regbmem8 memgr8 QI)
+(arithmetic7 addbrm3 addb add OP1_0 OP2_5 memgr8 regbmem8 QI)
+(arithmetic6 addbrm addb add OP1_0 OP2_3 regb8 memory QI)
+(arithmetic7 addbrm1 addb add OP1_0 OP2_5 memory regb8 QI)
+(arithmetic6 subbrm3 subb sub OP1_2 OP2_3 regbmem8 memgr8 QI)
+(arithmetic7 subbrm2 subb sub OP1_2 OP2_5 memgr8 regbmem8 QI)
+(arithmetic6 subbrm1 subb sub OP1_2 OP2_3 regb8 memory QI)
+(arithmetic7 subbrm subb sub OP1_2 OP2_5 memory regb8 QI)
+
+;add/sub registers with carry
+(define-pmacro (arithmetic8 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 op2 cbit))
+ ()
+ )
+)
+
+;add/sub registers with carry
+(define-pmacro (arithmetic9 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op2 op1)
+ (set (mem HI op1) (insn1 (mem HI op1) op2 cbit))
+ ()
+ )
+)
+(arithmetic8 addcrm2 addc addc OP1_1 OP2_2 regmem8 memgr8 HI)
+(arithmetic9 addcrm3 addc addc OP1_1 OP2_4 memgr8 regmem8 HI)
+(arithmetic8 addcrm addc addc OP1_1 OP2_2 reg8 memory HI)
+(arithmetic9 addcrm1 addc addc OP1_1 OP2_4 memory reg8 HI)
+(arithmetic8 subcrm3 subc subc OP1_3 OP2_2 regmem8 memgr8 HI)
+(arithmetic9 subcrm2 subc subc OP1_3 OP2_4 memgr8 regmem8 HI)
+(arithmetic8 subcrm1 subc subc OP1_3 OP2_2 reg8 memory HI)
+(arithmetic9 subcrm subc subc OP1_3 OP2_4 memory reg8 HI)
+(arithmetic8 addcbrm2 addcb addc OP1_1 OP2_3 regbmem8 memgr8 QI)
+(arithmetic9 addcbrm3 addcb addc OP1_1 OP2_5 memgr8 regbmem8 QI)
+(arithmetic8 addcbrm addcb addc OP1_1 OP2_3 regb8 memory QI)
+(arithmetic9 addcbrm1 addcb addc OP1_1 OP2_5 memory regb8 QI)
+(arithmetic8 subcbrm3 subcb subc OP1_3 OP2_3 regbmem8 memgr8 QI)
+(arithmetic9 subcbrm2 subcb subc OP1_3 OP2_5 memgr8 regbmem8 QI)
+(arithmetic8 subcbrm1 subcb subc OP1_3 OP2_3 regb8 memory QI)
+(arithmetic9 subcbrm subcb subc OP1_3 OP2_5 memory regb8 QI)
+
+; MUL Rwn,Rwm
+(dni muls "signed multiplication"
+ ((PIPE OS) (IDOC ALU))
+ "mul $src1,$src2"
+ (+ OP1_0 OP2_11 src1 src2)
+ (reg SI h-md 0)
+ ()
+)
+; MULU Rwn,Rwm
+(dni mulu "unsigned multiplication"
+ ((PIPE OS) (IDOC ALU))
+ "mulu $src1,$src2"
+ (+ OP1_1 OP2_11 src1 src2)
+ (reg SI h-md 0)
+ ()
+)
+; DIV Rwn
+(dni div "16-by-16 signed division"
+ ((PIPE OS) (IDOC ALU))
+ "div $srdiv"
+ (+ OP1_4 OP2_11 srdiv )
+ (sequence ()
+ (set HI (reg HI h-cr 6) (div HI (reg HI h-cr 6) srdiv))
+ (set HI (reg HI h-cr 7) (mod HI (reg HI h-cr 6) srdiv))
+ )
+ ()
+)
+; DIVL Rwn
+(dni divl "32-by16 signed division"
+ ((PIPE OS) (IDOC ALU))
+ "divl $srdiv"
+ (+ OP1_6 OP2_11 srdiv )
+ (sequence ()
+ (set HI (reg HI h-cr 6) (div SI (reg SI h-md 0) srdiv))
+ (set HI (reg HI h-cr 7) (mod SI (reg SI h-md 0) srdiv))
+ )
+ ()
+)
+; DIVLU Rwn
+(dni divlu "32-by16 unsigned division"
+ ((PIPE OS) (IDOC ALU))
+ "divlu $srdiv"
+ (+ OP1_7 OP2_11 srdiv )
+ (sequence ()
+ (set HI (reg HI h-cr 6) (udiv SI (reg SI h-md 0) srdiv))
+ (set HI (reg HI h-cr 7) (umod SI (reg SI h-md 0) srdiv))
+ )
+ ()
+)
+; DIVU Rwn
+(dni divu "16-by-16 unsigned division"
+ ((PIPE OS) (IDOC ALU))
+ "divu $srdiv"
+ (+ OP1_5 OP2_11 srdiv )
+ (sequence ()
+ (set HI (reg HI h-cr 6) (udiv HI (reg HI h-cr 6) srdiv))
+ (set HI (reg HI h-cr 7) (umod HI (reg HI h-cr 6) srdiv))
+ )
+ ()
+)
+
+;Integer one's complement
+; CPL Rwn
+(dni cpl "Integer Ones complement"
+ ((PIPE OS) (IDOC MISC))
+ "cpl $dr"
+ (+ OP1_9 OP2_1 dr (f-op-bit4 0))
+ (set dr (inv HI dr))
+ ()
+)
+
+;Bytes one's complement
+; CPLB Rbn
+(dni cplb "Byte Ones complement"
+ ((PIPE OS) (IDOC MISC))
+ "cplb $drb"
+ (+ OP1_11 OP2_1 drb (f-op-bit4 0))
+ (set drb (inv QI drb))
+ ()
+)
+;Integer two's complement
+; NEG Rwn
+(dni neg "Integer two's complement"
+ ((PIPE OS) (IDOC MISC))
+ "neg $dr"
+ (+ OP1_8 OP2_1 dr (f-op-bit4 0))
+ (set dr (neg HI dr))
+ ()
+)
+;Bytes two's complement
+; NEGB Rbn
+(dni negb "byte twos complement"
+ ((PIPE OS) (IDOC MISC))
+ "negb $drb"
+ (+ OP1_10 OP2_1 drb (f-op-bit4 0))
+ (set drb (neg QI drb))
+ ()
+)
+
+;****************************************************************
+;logical insn
+;****************************************************************
+;and/or/xor registers
+(define-pmacro (logical name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "logical" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+
+(logical andr and and OP1_6 OP2_0 dr sr HI)
+(logical orr or or OP1_7 OP2_0 dr sr HI)
+(logical xorr xor xor OP1_5 OP2_0 dr sr HI)
+(logical andbr andb and OP1_6 OP2_1 drb srb QI)
+(logical orbr orb or OP1_7 OP2_1 drb srb QI)
+(logical xorbr xorb xor OP1_5 OP2_1 drb srb QI)
+
+;and/or/xor register and immediate
+(define-pmacro (logical1 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "logical" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"op2)
+ (+ opc1 opc2 op1 (f-op-bit1 0) op2)
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+(logical1 andri and and OP1_6 OP2_8 dr uimm3 HI)
+(logical1 orri or or OP1_7 OP2_8 dr uimm3 HI)
+(logical1 xorri xor xor OP1_5 OP2_8 dr uimm3 HI)
+(logical1 andbri andb and OP1_6 OP2_9 drb uimm3 QI)
+(logical1 orbri orb or OP1_7 OP2_9 drb uimm3 QI)
+(logical1 xorbri xorb xor OP1_5 OP2_9 drb uimm3 QI)
+
+;and/or/xor register and immediate
+(define-pmacro (logical2 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "logical" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+(logical2 andrim and and OP1_6 OP2_6 reg8 uimm16 HI)
+(logical2 orrim or or OP1_7 OP2_6 reg8 uimm16 HI)
+(logical2 xorrim xor xor OP1_5 OP2_6 reg8 uimm16 HI)
+
+;and/or/xor register and immediate
+(define-pmacro (logical3 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "logical" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"op2)
+ (+ opc1 opc2 op1 op2 (f-op-bit8 0))
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+(logical3 andbrim andb and OP1_6 OP2_7 regb8 uimm8 QI)
+(logical3 orbrim orb or OP1_7 OP2_7 regb8 uimm8 QI)
+(logical3 xorbrim xorb xor OP1_5 OP2_7 regb8 uimm8 QI)
+
+;and/or/xor register and indirect memory
+(define-pmacro (logical4 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "logical" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",[$"op2"]")
+ (+ opc1 opc2 op1 (f-op-bit2 2) op2)
+ (set mode op1 (insn1 mode op1 (mem HI op2)))
+ ()
+ )
+)
+(logical4 and2 and and OP1_6 OP2_8 dr sr2 HI)
+(logical4 or2 or or OP1_7 OP2_8 dr sr2 HI)
+(logical4 xor2 xor xor OP1_5 OP2_8 dr sr2 HI)
+(logical4 andb2 andb and OP1_6 OP2_9 drb sr2 QI)
+(logical4 orb2 orb or OP1_7 OP2_9 drb sr2 QI)
+(logical4 xorb2 xorb xor OP1_5 OP2_9 drb sr2 QI)
+
+;and/or/xor register and indirect memory post increment
+(define-pmacro (logical5 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "logical" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",[$"op2"+]")
+ (+ opc1 opc2 op1 (f-op-bit2 3) op2)
+ (sequence ()
+ (set mode op1 (insn1 mode op1 (mem HI op2)))
+ (set HI op2 (add HI op2 (const 2)))
+ )
+ ()
+ )
+)
+(logical5 and2i and and OP1_6 OP2_8 dr sr2 HI)
+(logical5 or2i or or OP1_7 OP2_8 dr sr2 HI)
+(logical5 xor2i xor xor OP1_5 OP2_8 dr sr2 HI)
+(logical5 andb2i andb and OP1_6 OP2_9 drb sr2 QI)
+(logical5 orb2i orb or OP1_7 OP2_9 drb sr2 QI)
+(logical5 xorb2i xorb xor OP1_5 OP2_9 drb sr2 QI)
+
+;add/sub register and immediate
+(define-pmacro (logical7 name insn insn1 opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"dir"$"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set (mem HI op1) (insn1 (mem HI op1) op2 ))
+ ()
+ )
+)
+(logical7 andpofr and and OP1_6 OP2_2 reg8 upof16 HI "pof")
+(logical7 orpofr or or OP1_7 OP2_2 reg8 upof16 HI "pof")
+(logical7 xorpofr xor xor OP1_5 OP2_2 reg8 upof16 HI "pof")
+(logical7 andbpofr andb and OP1_6 OP2_3 regb8 upof16 QI "pof")
+(logical7 orbpofr orb or OP1_7 OP2_3 regb8 upof16 QI "pof")
+(logical7 xorbpofr xorb xor OP1_5 OP2_3 regb8 upof16 QI "pof")
+
+;add/sub register and immediate
+(define-pmacro (logical8 name insn insn1 opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"dir"$"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set (mem HI op1) (insn1 (mem HI op1) op2 ))
+ ()
+ )
+)
+(logical8 andrpofr and and OP1_6 OP2_4 upof16 reg8 HI "pof")
+(logical8 orrpofr or or OP1_7 OP2_4 upof16 reg8 HI "pof")
+(logical8 xorrpofr xor xor OP1_5 OP2_4 upof16 reg8 HI "pof")
+(logical8 andbrpofr andb and OP1_6 OP2_5 upof16 regb8 QI "pof")
+(logical8 orbrpofr orb or OP1_7 OP2_5 upof16 regb8 QI "pof")
+(logical8 xorbrpofr xorb xor OP1_5 OP2_5 upof16 regb8 QI "pof")
+
+;and/or/xor register and direct memory
+(define-pmacro (logical6 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+
+;and/or/xor register and direct memory
+(define-pmacro (logical7 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "arithmetic" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op2 op1)
+ (set (mem HI op1) (insn1 (mem HI op1) op2))
+ ()
+ )
+)
+(logical6 andrm2 and and OP1_6 OP2_2 regmem8 memgr8 HI)
+(logical7 andrm3 and and OP1_6 OP2_4 memgr8 regmem8 HI)
+(logical6 andrm and and OP1_6 OP2_2 reg8 memory HI)
+(logical7 andrm1 and and OP1_6 OP2_4 memory reg8 HI)
+(logical6 orrm3 or or OP1_7 OP2_2 regmem8 memgr8 HI)
+(logical7 orrm2 or or OP1_7 OP2_4 memgr8 regmem8 HI)
+(logical6 orrm1 or or OP1_7 OP2_2 reg8 memory HI)
+(logical7 orrm or or OP1_7 OP2_4 memory reg8 HI)
+(logical6 xorrm3 xor xor OP1_5 OP2_2 regmem8 memgr8 HI)
+(logical7 xorrm2 xor xor OP1_5 OP2_4 memgr8 regmem8 HI)
+(logical6 xorrm1 xor xor OP1_5 OP2_2 reg8 memory HI)
+(logical7 xorrm xor xor OP1_5 OP2_4 memory reg8 HI)
+(logical6 andbrm2 andb and OP1_6 OP2_3 regbmem8 memgr8 QI)
+(logical7 andbrm3 andb and OP1_6 OP2_5 memgr8 regbmem8 QI)
+(logical6 andbrm andb and OP1_6 OP2_3 regb8 memory QI)
+(logical7 andbrm1 andb and OP1_6 OP2_5 memory regb8 QI)
+(logical6 orbrm3 orb or OP1_7 OP2_3 regbmem8 memgr8 QI)
+(logical7 orbrm2 orb or OP1_7 OP2_5 memgr8 regbmem8 QI)
+(logical6 orbrm1 orb or OP1_7 OP2_3 regb8 memory QI)
+(logical7 orbrm orb or OP1_7 OP2_5 memory regb8 QI)
+(logical6 xorbrm3 xorb xor OP1_5 OP2_3 regbmem8 memgr8 QI)
+(logical7 xorbrm2 xorb xor OP1_5 OP2_5 memgr8 regbmem8 QI)
+(logical6 xorbrm1 xorb xor OP1_5 OP2_3 regb8 memory QI)
+(logical7 xorbrm xorb xor OP1_5 OP2_5 memory regb8 QI)
+
+;****************************************************************
+;logical insn
+;****************************************************************
+;mov registers
+(define-pmacro (move name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "mov registers" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 op2)
+ ()
+ )
+)
+(move movr mov OP1_15 OP2_0 dr sr HI)
+(move movrb movb OP1_15 OP2_1 drb srb HI)
+
+;mov register and immediate
+(define-pmacro (move1 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op1 ",$hash$"op2)
+ (+ opc1 opc2 op2 op1)
+ (set mode op1 op2)
+ ()
+ )
+)
+(move1 movri mov OP1_14 OP2_0 dri u4 HI)
+(move1 movbri movb OP1_14 OP2_1 srb u4 QI)
+
+; MOV Rwn,#data16
+(dni movi "move immediate to register"
+ ((PIPE OS) (IDOC MOVE))
+ "mov $reg8,$hash$uimm16"
+ (+ OP1_14 OP2_6 reg8 uimm16)
+ (set HI reg8 uimm16)
+ ()
+)
+
+; MOVB reg,#data8
+(dni movbi "move immediate to register"
+ ((PIPE OS) (IDOC MOVE))
+ "movb $regb8,$hash$uimm8"
+ (+ OP1_14 OP2_7 regb8 uimm8 (f-op-bit8 0))
+ (set QI regb8 uimm8)
+ ()
+)
+
+;move and indirect memory
+(define-pmacro (mov2 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op1 ",[$"op2"]")
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (mem HI op2))
+ ()
+ )
+)
+(mov2 movr2 mov OP1_10 OP2_8 dr sr HI)
+(mov2 movbr2 movb OP1_10 OP2_9 drb sr QI)
+
+;move and indirect memory
+(define-pmacro (mov3 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " [$"op2 "],$"op1)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (mem HI op2))
+ ()
+ )
+)
+(mov3 movri2 mov OP1_11 OP2_8 dr sr HI)
+(mov3 movbri2 movb OP1_11 OP2_9 drb sr QI)
+
+;move and indirect memory
+(define-pmacro (mov4 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " [-$"op2 "],$"op1)
+ (+ opc1 opc2 op1 op2)
+ (sequence HI ()
+ (set op1 (sub op2 (const HI 2)))
+ (set HI (mem HI op2) op1)
+ )
+ ()
+ )
+)
+(mov4 movri3 mov OP1_8 OP2_8 dr sr HI)
+(mov4 movbri3 movb OP1_8 OP2_9 drb sr QI)
+
+;mov register and indirect memory post increment
+(define-pmacro (mov5 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op1 ",[$"op2"+]")
+ (+ opc1 opc2 op1 op2)
+ (sequence ()
+ (set mode op1 (mem HI op2))
+ (set HI op2 (add HI op2 (const 2)))
+ )
+ ()
+ )
+)
+(mov5 mov2i mov OP1_9 OP2_8 dr sr HI)
+(mov5 movb2i movb OP1_9 OP2_9 drb sr HI)
+
+;mov indirect memory
+(define-pmacro (mov6 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " [$"op1 "],[$"op2"]")
+ (+ opc1 opc2 op1 op2)
+ (set HI (mem HI op1) (mem HI op2))
+ ()
+ )
+)
+(mov6 mov6i mov OP1_12 OP2_8 dr sr HI)
+(mov6 movb6i movb OP1_12 OP2_9 dr sr HI)
+
+;mov indirect memory
+(define-pmacro (mov7 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " [$"op1 "+],[$"op2"]")
+ (+ opc1 opc2 op1 op2)
+ (sequence ()
+ (set mode (mem mode op1) (mem mode op2))
+ (set mode op1 (add mode op1 (const mode 2)))
+ )
+ ()
+ )
+)
+(mov7 mov7i mov OP1_13 OP2_8 dr sr HI)
+(mov7 movb7i movb OP1_13 OP2_9 dr sr HI)
+
+;mov indirect memory
+(define-pmacro (mov8 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " [$"op1 "],[$"op2"+]")
+ (+ opc1 opc2 op1 op2)
+ (sequence ()
+ (set mode (mem mode op1) (mem mode op2))
+ (set mode op2 (add mode op2 (const mode 2)))
+ )
+ ()
+ )
+)
+(mov8 mov8i mov OP1_14 OP2_8 dr sr HI)
+(mov8 movb8i movb OP1_14 OP2_9 dr sr HI)
+
+;mov indirect memory
+(define-pmacro (mov9 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op1 ",[$"op2"+$hash$"uimm16"]")
+ (+ opc1 opc2 op1 op2 uimm16)
+ (sequence mode ((mode tmp1))
+ (set mode tmp1 (add HI op2 uimm16))
+ (set mode op1 (mem HI tmp1))
+ )
+ ()
+ )
+)
+(mov9 mov9i mov OP1_13 OP2_4 dr sr HI)
+(mov9 movb9i movb OP1_15 OP2_4 drb sr QI)
+
+;mov indirect memory
+(define-pmacro (mov10 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " [$"op2"+$hash$"uimm16 "],$"op1)
+ (+ opc1 opc2 op1 op2 uimm16)
+ (sequence mode ((mode tmp1))
+ (set mode tmp1 (add HI op1 uimm16))
+ (set mode (mem HI tmp1) op1)
+ )
+ ()
+ )
+)
+(mov10 mov10i mov OP1_12 OP2_4 dr sr HI)
+(mov10 movb10i movb OP1_14 OP2_4 drb sr QI)
+
+;move and indirect memory
+(define-pmacro (mov11 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " [$"op1 "],$"op2)
+ (+ opc1 opc2 (f-op-lbit4 0) op1 op2)
+ (set (mem mode op1) (mem HI op2))
+ ()
+ )
+)
+(mov11 movri11 mov OP1_8 OP2_4 src2 memory HI)
+(mov11 movbri11 movb OP1_10 OP2_4 src2 memory HI)
+
+;move and indirect memory
+(define-pmacro (mov12 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op2 ",[$"op1"]")
+ (+ opc1 opc2 (f-op-lbit4 0) op1 op2)
+ (set (mem HI op2) (mem mode op1))
+ ()
+ )
+)
+(mov12 movri12 mov OP1_9 OP2_4 src2 memory HI)
+(mov12 movbri12 movb OP1_11 OP2_4 src2 memory HI)
+
+(define-pmacro (movemem3 name insn opc1 opc2 op1 op2 dir)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op1 ",$hash$"dir"$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set HI op1 op2)
+ ()
+ )
+)
+(movemem3 movehm5 mov OP1_14 OP2_6 regoff8 upof16 "pof")
+(movemem3 movehm6 mov OP1_14 OP2_6 regoff8 upag16 "pag")
+(movemem3 movehm7 mov OP1_14 OP2_6 regoff8 useg16 "segm")
+(movemem3 movehm8 mov OP1_14 OP2_6 regoff8 usof16 "sof")
+
+(define-pmacro (movemem4 name insn opc1 opc2 op1 op2 dir)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op1 ",$hash$"dir"$"op2)
+ (+ opc1 opc2 op1 op2 (f-op-bit8 0))
+ (set QI op1 op2)
+ ()
+ )
+)
+(movemem4 movehm9 movb OP1_14 OP2_7 regb8 uimm8 "pof")
+(movemem4 movehm10 movb OP1_14 OP2_7 regoff8 uimm8 "pag")
+
+(define-pmacro (movemem name insn opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op1 ",$"dir"$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (mem HI op2))
+ ()
+ )
+)
+(movemem movrmp mov OP1_15 OP2_2 regoff8 upof16 HI "pof")
+(movemem movrmp1 movb OP1_15 OP2_3 regb8 upof16 QI "pof")
+(movemem movrmp2 mov OP1_15 OP2_2 regoff8 upag16 HI "pag")
+(movemem movrmp3 movb OP1_15 OP2_3 regb8 upag16 QI "pag")
+
+(define-pmacro (movemem1 name insn opc1 opc2 op1 op2 dir)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"dir"$"op1 ",$"op2)
+ (+ opc1 opc2 op2 op1)
+ (set (mem HI op1) op2 )
+ ()
+ )
+)
+(movemem1 movrmp4 mov OP1_15 OP2_6 upof16 regoff8 "pof")
+(movemem1 movrmp5 movb OP1_15 OP2_7 upof16 regb8 "pof")
+
+(define-pmacro (movemem2 name insn opc1 opc2 op1 op2 mode dir)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op1 ",$hash$"dir"$"op2)
+ (+ opc1 opc2 op2 op1)
+ (set mode op1 op2)
+ ()
+ )
+)
+(movemem2 movehm1 mov OP1_14 OP2_0 dri u4 HI "pof")
+(movemem2 movehm2 movb OP1_14 OP2_1 srb u4 QI "pof")
+(movemem2 movehm3 mov OP1_14 OP2_0 dri u4 HI "pag")
+(movemem2 movehm4 movb OP1_14 OP2_1 srb u4 QI "pag")
+
+;move register and direct memory
+(define-pmacro (move12 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (mem HI op2))
+ ()
+ )
+)
+
+;move register and direct memory
+(define-pmacro (move13 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op2 op1)
+ (set (mem HI op1) op2)
+ ()
+ )
+)
+(move12 mve12 mov OP1_15 OP2_2 regmem8 memgr8 HI)
+(move13 mve13 mov OP1_15 OP2_6 memgr8 regmem8 HI)
+(move12 mover12 mov OP1_15 OP2_2 reg8 memory HI)
+(move13 mvr13 mov OP1_15 OP2_6 memory reg8 HI)
+(move12 mver12 movb OP1_15 OP2_3 regbmem8 memgr8 QI)
+(move13 mver13 movb OP1_15 OP2_7 memgr8 regbmem8 QI)
+(move12 movr12 movb OP1_15 OP2_3 regb8 memory QI)
+(move13 movr13 movb OP1_15 OP2_7 memory regb8 QI)
+
+; MOVBS Rw,Rb
+(dni movbsrr "mov byte register with sign extension to word register"
+ ((PIPE OS) (IDOC MOVE))
+ "movbs $sr,$drb"
+ (+ OP1_13 OP2_0 drb sr)
+ (sequence ()
+ (if QI (and QI drb (const 128))
+ (set HI sr (or HI (const HI 65280) drb)))
+ (set HI sr (and HI (const HI 255) drb))
+ )
+ ()
+)
+
+; MOVBZ Rw,Rb
+(dni movbzrr "mov byte register with zero extension to word register"
+ ((PIPE OS) (IDOC MOVE))
+ "movbz $sr,$drb"
+ (+ OP1_12 OP2_0 drb sr)
+ (set HI sr (and HI (const HI 255) drb))
+ ()
+)
+
+; MOVBS reg,POF mem
+(dni movbsrpofm "mov memory to byte register"
+ ((PIPE OS) (IDOC MOVE))
+ "movbs $regmem8,$pof$upof16"
+ (+ OP1_13 OP2_2 regmem8 upof16)
+ (set QI regmem8 (mem HI upof16))
+ ()
+)
+
+; MOVBS pof,reg
+(dni movbspofmr "mov memory to byte register"
+ ((PIPE OS) (IDOC MOVE))
+ "movbs $pof$upof16,$regbmem8"
+ (+ OP1_13 OP2_5 upof16 regbmem8 )
+ (set QI (mem HI upof16) regbmem8)
+ ()
+)
+
+; MOVBZ reg,POF mem
+(dni movbzrpofm "mov memory to byte register"
+ ((PIPE OS) (IDOC MOVE))
+ "movbz $reg8,$pof$upof16"
+ (+ OP1_12 OP2_2 reg8 upof16)
+ (set QI reg8 (mem HI upof16))
+ ()
+)
+
+; MOVBZ pof,reg
+(dni movbzpofmr "mov memory to byte register"
+ ((PIPE OS) (IDOC MOVE))
+ "movbz $pof$upof16,$regb8"
+ (+ OP1_12 OP2_5 upof16 regb8 )
+ (set QI (mem HI upof16) regb8)
+ ()
+)
+
+;move register and direct memory
+(define-pmacro (move14 name insn opc1 opc2 op1 op2 )
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set HI op1 (and HI (const HI 255) (mem QI op2)))
+ ()
+ )
+)
+
+;move register and direct memory
+(define-pmacro (move15 name insn opc1 opc2 op1 op2 )
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op2 op1)
+ (set HI (mem HI op1) (and HI (const HI 255) op2))
+ ()
+ )
+)
+(move14 movebs14 movbs OP1_13 OP2_2 regmem8 memgr8 )
+(move15 movebs15 movbs OP1_13 OP2_5 memgr8 regbmem8 )
+(move14 moverbs14 movbs OP1_13 OP2_2 reg8 memory )
+(move15 movrbs15 movbs OP1_13 OP2_5 memory regb8 )
+(move14 movebz14 movbz OP1_12 OP2_2 regmem8 memgr8 )
+(move15 movebz15 movbz OP1_12 OP2_5 memgr8 regbmem8 )
+(move14 moverbz14 movbz OP1_12 OP2_2 reg8 memory )
+(move15 movrbz15 movbz OP1_12 OP2_5 memory regb8 )
+
+
+;mov registers
+(define-pmacro (moveb1 name insn opc1 opc2 op1 op2)
+ (dni name
+ (.str name "move" )
+ ((PIPE OS) (IDOC MOVE))
+ (.str insn " $"op2 ",$"op1)
+ (+ opc1 opc2 op1 op2)
+ (sequence ()
+ (if QI (and QI op1 (const 128))
+ (set HI op2 (or HI (const HI 65280) op1)))
+ (set HI op2 (and HI (const HI 255) op1))
+ )
+ ()
+ )
+)
+(moveb1 movrbs movbs OP1_13 OP2_0 drb sr )
+(moveb1 movrbz movbz OP1_12 OP2_0 drb sr )
+
+
+
+;jump and call insns
+;******************************************************************
+;Absolute conditional jump
+(define-pmacro (jmpabs name insn)
+ (dni name
+ (.str name "Absolute conditional jump" )
+ ((PIPE OS) (IDOC JMP))
+ (.str insn " $extcond,$caddr")
+ (+ OP1_14 OP2_10 extcond (f-op-bitone 0) bitone bit01 caddr)
+ (sequence ((HI tmp1) (HI tmp2))
+ (set tmp1 (mem HI caddr))
+ (set tmp2 (sub HI pc (mem HI caddr)))
+ (if (gt tmp2 (const 0)) (lt tmp2 (const 32)) (eq tmp2 (const 32))
+ (set bitone (const 1)))
+ (if (lt tmp2 (const 0)) (eq tmp2 (const 0)) (gt tmp2 (const 32))
+ (set bitone (const 0)))
+ (if (eq extcond (const 1) (ne extcond cc_Z))
+ (set bit01 (const 0))
+ (set HI pc (mem HI caddr)))
+ (if (ne extcond (const 1) (eq extcond cc_Z))
+ (set bit01 (const 1))
+ (set HI pc (add HI pc (const 2))))
+ )
+ ()
+ )
+)
+
+(jmpabs jmpa0 jmpa+)
+(jmpabs jmpa1 jmpa)
+
+; JMPA- cc,caddr
+(dni jmpa- "Absolute conditional jump"
+ (COND-CTI (PIPE OS) (IDOC JMP))
+ "jmpa- $extcond,$caddr"
+ (+ OP1_14 OP2_10 extcond (f-op-bitone 0) bitone (f-op-1bit 1) caddr)
+ (sequence ((HI tmp1) (HI tmp2))
+ (set tmp1 (mem HI caddr))
+ (set tmp2 (sub HI pc (mem HI caddr)))
+ (if (gt tmp2 (const 0)) (lt tmp2 (const 32)) (eq tmp2 (const 32))
+ (set bitone (const 1)))
+ (if (lt tmp2 (const 0)) (eq tmp2 (const 0)) (gt tmp2 (const 32))
+ (set bitone (const 0)))
+ (set HI pc (add HI pc (const 2)))
+ )
+ ()
+)
+
+; JMPI cc,[Rwn]
+(dni jmpi "Indirect conditional jump"
+ (COND-CTI (PIPE OS) (IDOC JMP))
+ "jmpi $icond,[$sr]"
+ (+ OP1_9 OP2_12 icond sr)
+ (sequence ()
+ (if (eq icond (const 1))
+ (set HI pc (mem HI sr)))
+ (set HI pc (add HI pc (const 2)))
+ )
+ ()
+)
+
+(define-pmacro (jmprel name insn opc1)
+ (dni name
+ (.str name "conditional" )
+ (COND-CTI (PIPE OS) (IDOC JMP))
+ (.str insn " $cond,$rel")
+ (+ opc1 OP2_13 rel)
+ (sequence ()
+ (if (eq cond (const 1))
+ (sequence ()
+ (if QI (lt QI rel (const 0))
+ (sequence ()
+ (neg QI rel)
+ (add QI rel (const 1))
+ (mul QI rel (const 2))
+ (set HI pc (sub HI pc rel))
+ ))
+ (set HI pc (add HI pc (mul QI rel (const 2))))
+ )
+ )
+ (set HI pc pc)
+ )
+ ()
+ )
+)
+
+(jmprel jmpr_nenz jmpr COND_NE_NZ )
+(jmprel jmpr_sgt jmpr COND_SGT )
+(jmprel jmpr_z jmpr COND_Z )
+(jmprel jmpr_v jmpr COND_V )
+(jmprel jmpr_nv jmpr COND_NV )
+(jmprel jmpr_n jmpr COND_N )
+(jmprel jmpr_nn jmpr COND_NN )
+(jmprel jmpr_c jmpr COND_C )
+(jmprel jmpr_nc jmpr COND_NC )
+(jmprel jmpr_eq jmpr COND_EQ )
+(jmprel jmpr_ne jmpr COND_NE )
+(jmprel jmpr_ult jmpr COND_ULT )
+(jmprel jmpr_ule jmpr COND_ULE )
+(jmprel jmpr_uge jmpr COND_UGE )
+(jmprel jmpr_ugt jmpr COND_UGT )
+(jmprel jmpr_sle jmpr COND_SLE )
+(jmprel jmpr_sge jmpr COND_SGE )
+(jmprel jmpr_net jmpr COND_NET )
+(jmprel jmpr_uc jmpr COND_UC )
+(jmprel jmpr_slt jmpr COND_SLT )
+
+
+
+
+; JMPS seg,caddr
+(dni jmpseg "absolute inter-segment jump"
+ (UNCOND-CTI(PIPE OS) (IDOC JMP))
+ "jmps $hash$segm$useg8,$hash$sof$usof16"
+ (+ OP1_15 OP2_10 seg usof16)
+ (sequence ()
+ (if QI (eq BI sgtdisbit (const BI 0))
+ (set QI (reg h-cr 10) useg8))
+ (nop)
+ (set HI pc usof16)
+ )
+ ()
+)
+
+; JMPS seg,caddr
+(dni jmps "absolute inter-segment jump"
+ (UNCOND-CTI(PIPE OS) (IDOC JMP))
+ "jmps $seg,$caddr"
+ (+ OP1_15 OP2_10 seg caddr)
+ (sequence ()
+ (if QI (eq BI sgtdisbit (const BI 0))
+ (set QI (reg h-cr 10) seg))
+ (nop)
+ (set HI pc caddr)
+ )
+ ()
+)
+
+
+;relative jump if bit set
+;JB bitaddrQ.q,rel
+(dni jb "relative jump if bit set"
+ ((PIPE OS) (IDOC JMP))
+ "jb $genreg$dot$qlobit,$relhi"
+ (+ OP1_8 OP2_10 genreg relhi qlobit (f-qhibit 0))
+ (sequence ((HI tmp1) (HI tmp2))
+ (set HI tmp1 genreg)
+ (set HI tmp2 (const 1))
+ (sll HI tmp2 qlobit)
+ (set HI tmp2 (and tmp1 tmp2))
+ (if (eq tmp2 (const 1))
+ (sequence ()
+ (if QI (lt QI relhi (const 0))
+ (set HI pc (add HI pc (mul QI relhi (const 2)))))
+ ))
+ (set HI pc (add HI pc (const 4)))
+ )
+ ()
+)
+
+;relative jump if bit set and clear bit
+;JBC bitaddrQ.q,rel
+(dni jbc "relative jump if bit set and clear bit"
+ ((PIPE OS) (IDOC JMP))
+ "jbc $genreg$dot$qlobit,$relhi"
+ (+ OP1_10 OP2_10 genreg relhi qlobit (f-qhibit 0))
+ (sequence ((HI tmp1) (HI tmp2))
+ (set HI tmp1 genreg)
+ (set HI tmp2 (const 1))
+ (sll HI tmp2 qlobit)
+ (set HI tmp2 (and tmp1 tmp2))
+ (if (eq tmp2 (const 1))
+ (sequence ()
+ (if QI (lt QI relhi (const 0))
+ (set tmp2 (const 1))
+ (set tmp1 genreg)
+ (sll tmp2 qlobit)
+ (inv tmp2)
+ (set HI tmp1(and tmp1 tmp2))
+ (set HI genreg tmp1)
+ (set HI pc (add HI pc (mul QI relhi (const 2)))))
+ ))
+ (set HI pc (add HI pc (const 4)))
+ )
+ ()
+)
+
+;relative jump if bit set
+;JNB bitaddrQ.q,rel
+(dni jnb "relative jump if bit not set"
+ ((PIPE OS) (IDOC JMP))
+ "jnb $genreg$dot$qlobit,$relhi"
+ (+ OP1_9 OP2_10 genreg relhi qlobit (f-qhibit 0))
+ (sequence ((HI tmp1) (HI tmp2))
+ (set HI tmp1 genreg)
+ (set HI tmp2 (const 1))
+ (sll HI tmp2 qlobit)
+ (set HI tmp2 (and tmp1 tmp2))
+ (if (eq tmp2 (const 0))
+ (sequence ()
+ (if QI (lt QI relhi (const 0))
+ (set HI pc (add HI pc (mul QI relhi (const 2)))))
+ ))
+ (set HI pc (add HI pc (const 4)))
+ )
+ ()
+)
+
+;relative jump if bit not set and set bit
+;JNBS bitaddrQ.q,rel
+(dni jnbs "relative jump if bit not set and set bit"
+ ((PIPE OS) (IDOC JMP))
+ "jnbs $genreg$dot$qlobit,$relhi"
+ (+ OP1_11 OP2_10 genreg relhi qlobit (f-qhibit 0))
+ (sequence ((HI tmp1) (HI tmp2))
+ (set HI tmp1 genreg)
+ (set HI tmp2 (const 1))
+ (sll HI tmp2 qlobit)
+ (set HI tmp2 (and tmp1 tmp2))
+ (if (eq tmp2 (const 0))
+ (sequence ()
+ (if QI (lt QI relhi (const 0))
+ (set tmp2 (const 1))
+ (set tmp1 reg8)
+ (sll tmp2 qbit)
+ (set BI tmp1(or tmp1 tmp2))
+ (set HI reg8 tmp1)
+ (set HI pc (add HI pc (mul QI relhi (const 2)))))
+ ))
+ (set HI pc (add HI pc (const 4)))
+ )
+ ()
+)
+
+
+;Absolute conditional call
+(define-pmacro (callabs name insn)
+ (dni name
+ (.str name "Absolute conditional call" )
+ ((PIPE OS) (IDOC JMP))
+ (.str insn " $extcond,$caddr")
+ (+ OP1_12 OP2_10 extcond (f-op-2bit 0) bit01 caddr)
+ (sequence ()
+ (if (eq extcond (const 1))
+ (set bit01 (const 0))
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) pc)
+ (set HI pc (mem HI caddr)))
+ (if (ne extcond (const 1))
+ (set bit01 (const 1))
+ (set HI pc (add HI pc (const 2))))
+ )
+ ()
+ )
+)
+
+(callabs calla0 calla+)
+(callabs calla1 calla)
+
+; CALLA- cc,caddr
+(dni calla- "Absolute conditional call"
+ (COND-CTI (PIPE OS) (IDOC JMP))
+ "calla- $extcond,$caddr"
+ (+ OP1_12 OP2_10 extcond (f-op-bit3 1) caddr)
+ (sequence ()
+ (if (eq extcond (const 1))
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) pc)
+ (set HI pc (mem HI caddr)))
+ (set HI pc (add HI pc (const 2)))
+ )
+ ()
+)
+
+; CALLI cc,[Rwn]
+(dni calli "indirect subroutine call"
+ (COND-CTI (PIPE OS) (IDOC JMP))
+ "calli $icond,[$sr]"
+ (+ OP1_10 OP2_11 icond sr)
+ (sequence ()
+ (if (eq icond (const 1))
+ (sequence ()
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) pc)
+ (set HI pc (mem HI sr))
+ )
+ )
+ (set HI pc (add HI pc (const 2)))
+ )
+ ()
+)
+
+; CALLR rel
+(dni callr "Call subroutine with PC relative signed 8 bit offset"
+ ( COND-CTI (PIPE OS) (IDOC JMP))
+ "callr $rel"
+ (+ OP1_11 OP2_11 rel)
+ (sequence ()
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) pc)
+ (sequence ()
+ (if QI (lt QI rel (const 0))
+ (sequence ()
+ (neg QI rel)
+ (add QI rel (const 1))
+ (mul QI rel (const 2))
+ (set HI pc (sub HI pc rel))
+ ))
+ (set HI pc (add HI pc (mul QI rel (const 2))))
+ )
+ )
+ ()
+)
+
+
+; CALLS seg,caddr
+(dni callseg "call inter-segment subroutine"
+ (UNCOND-CTI (PIPE OS) (IDOC JMP))
+ "calls $hash$segm$useg8,$hash$sof$usof16"
+ (+ OP1_13 OP2_10 useg8 usof16)
+ (sequence ()
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) (reg h-cr 10))
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) pc)
+ (if QI (eq BI sgtdisbit (const BI 0))
+ (set QI (reg h-cr 10) useg8))
+ (nop)
+ (set HI pc usof16)
+ )
+ ()
+)
+
+; CALLS seg,caddr
+(dni calls "call inter-segment subroutine"
+ (UNCOND-CTI (PIPE OS) (IDOC JMP))
+ "calls $seg,$caddr"
+ (+ OP1_13 OP2_10 seg caddr)
+ (sequence ()
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) (reg h-cr 10))
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) pc)
+ (if QI (eq BI sgtdisbit (const BI 0))
+ (set QI (reg h-cr 10) seg))
+ (nop)
+ (set HI pc caddr)
+ )
+ ()
+)
+
+; PCALL reg,caddr
+(dni pcall "push word and call absolute subroutine"
+ (UNCOND-CTI (PIPE OS) (IDOC JMP))
+ "pcall $reg8,$caddr"
+ (+ OP1_14 OP2_2 reg8 caddr)
+ (sequence ((HI tmp1))
+ (set HI tmp1 reg8)
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) tmp1)
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) pc)
+ (set HI pc caddr)
+ )
+ ()
+)
+
+; TRAP #uimm7
+(dni trap "software trap"
+ (UNCOND-CTI (PIPE OS) (IDOC JMP))
+ "trap $hash$uimm7"
+ (+ OP1_9 OP2_11 uimm7 (f-op-1bit 0))
+ (sequence ()
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) (reg h-cr 4))
+ (if QI (eq BI sgtdisbit (const BI 0))
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) (reg h-cr 10) )
+ )
+ (nop)
+ (set HI (reg h-cr 10) (reg h-cr 11))
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) pc)
+ (set HI pc (mul QI uimm7 (const 4)))
+ )
+ ()
+)
+
+;Return insns
+; RET
+(dni ret "return from subroutine"
+ (UNCOND-CTI (PIPE OS) (IDOC JMP))
+ "ret"
+ (+ OP1_12 OP2_11 (f-op-bit8 0))
+ (sequence ()
+ (set HI pc (mem HI (reg h-cr 9)))
+ (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
+ )
+ ()
+)
+
+; RETS
+(dni rets "return from inter-segment sunroutine"
+ (UNCOND-CTI (PIPE OS) (IDOC JMP))
+ "rets"
+ (+ OP1_13 OP2_11 (f-op-bit8 0))
+ (sequence ()
+ (set HI pc (mem HI (reg h-cr 9)))
+ (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
+ (if QI (eq BI sgtdisbit (const BI 0))
+ (set HI (reg h-cr 10) (mem HI (reg h-cr 9)))
+ )
+ (nop)
+ (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
+ )
+ ()
+)
+
+; RETP reg
+(dni retp "return from subroutine and pop word register"
+ (UNCOND-CTI (PIPE OS) (IDOC JMP))
+ "retp $reg8"
+ (+ OP1_14 OP2_11 reg8)
+ (sequence ((HI tmp1))
+ (set HI pc (mem HI (reg h-cr 9)))
+ (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
+ (set HI tmp1 (mem HI (reg h-cr 9)))
+ (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
+ (set HI reg8 tmp1)
+ )
+ ()
+)
+
+; RETI
+(dni reti "return from ISR"
+ (UNCOND-CTI (PIPE OS) (IDOC JMP))
+ "reti"
+ (+ OP1_15 OP2_11 (f-op-lbit4 8) (f-op-bit4 8))
+ (sequence ()
+ (set HI pc (mem HI (reg h-cr 9)))
+ (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
+ (if QI (eq BI sgtdisbit (const BI 0))
+ (sequence ()
+ (set HI (reg h-cr 10) (mem HI (reg h-cr 9)))
+ (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
+ )
+ )
+ (nop)
+ (set HI (reg h-cr 4) (mem HI (reg h-cr 9)))
+ (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
+ )
+ ()
+)
+
+;stack operation insn
+;******************************************************************
+; POP reg
+(dni pop "restore register from system stack"
+ ((PIPE OS) (IDOC MISC))
+ "pop $reg8"
+ (+ OP1_15 OP2_12 reg8)
+ (sequence ((HI tmp1))
+ (set HI tmp1 (mem HI (reg h-cr 9)))
+ (set (reg h-cr 9) (add HI (reg h-cr 9) (const 2)))
+ (set HI reg8 tmp1)
+ )
+ ()
+)
+
+; PUSH reg
+(dni push "save register on system stack"
+ ((PIPE OS) (IDOC MISC))
+ "push $reg8"
+ (+ OP1_14 OP2_12 reg8)
+ (sequence ((HI tmp1))
+ (set HI tmp1 reg8)
+ (set (reg h-cr 9) (sub HI (reg h-cr 9) (const 2)))
+ (set HI (mem HI (reg h-cr 9)) tmp1)
+ )
+ ()
+)
+
+;context switching insns
+; SCXT reg,#data16
+(dni scxti "Push word register on stack and update same with immediate data"
+ ((PIPE OS) (IDOC MISC))
+ "scxt $reg8,$hash$uimm16"
+ (+ OP1_12 OP2_6 reg8 uimm16)
+ (sequence ((HI tmp1) (HI tmp2))
+ (set HI tmp1 reg8)
+ (set HI tmp2 uimm16)
+ (sub HI (reg HI h-cr 9) (const 2))
+ (set HI (reg HI h-cr 9) tmp1)
+ (set HI reg8 tmp2)
+ )
+ ()
+)
+
+; SCXT reg,POF mem
+(dni scxtrpofm "mov memory to byte register"
+ ((PIPE OS) (IDOC MOVE))
+ "scxt $reg8,$pof$upof16"
+ (+ OP1_13 OP2_6 reg8 upof16)
+ (set QI reg8 (mem HI upof16))
+ ()
+)
+
+; SCXT regmem8,memgr8
+(dni scxtmg "Push word register on stack and update same with direct memory"
+ ((PIPE OS) (IDOC MISC))
+ "scxt $regmem8,$memgr8"
+ (+ OP1_13 OP2_6 regmem8 memgr8)
+ (sequence ((HI tmp1) (HI tmp2))
+ (set HI tmp1 regmem8)
+ (set HI tmp2 memgr8)
+ (sub HI (reg HI h-cr 9) (const 2))
+ (set HI (reg HI h-cr 9) tmp1)
+ (set HI regmem8 tmp2)
+ )
+ ()
+)
+
+; SCXT reg,mem
+(dni scxtm "Push word register on stack and update same with direct memory"
+ ((PIPE OS) (IDOC MISC))
+ "scxt $reg8,$memory"
+ (+ OP1_13 OP2_6 reg8 memory)
+ (sequence ((HI tmp1) (HI tmp2))
+ (set HI tmp1 reg8)
+ (set HI tmp2 memory)
+ (sub HI (reg HI h-cr 9) (const 2))
+ (set HI (reg HI h-cr 9) tmp1)
+ (set HI reg8 tmp2)
+ )
+ ()
+)
+
+;No operation
+; NOP
+(dni nop "nop"
+ ((PIPE OS) (IDOC MISC))
+ "nop"
+ (+ OP1_12 OP2_12 (f-op-bit8 0))
+ ()
+ ()
+)
+
+;*********system control instructions *********************/
+
+(define-pmacro (sysctrl name insn opc1 opc2 op1 op2 op3)
+ (dni name
+ (.str name "miscellaneous" )
+ ((PIPE OS) (IDOC MISC))
+ (.str insn )
+ (+ opc1 opc2 (f-op-lbit4 op1) (f-op-bit4 op2) (f-data8 op3) (f-op-bit8 op3))
+ ()
+ ()
+ )
+)
+(sysctrl srstm srst OP1_11 OP2_7 4 8 183 )
+(sysctrl idlem idle OP1_8 OP2_7 7 8 135)
+(sysctrl pwrdnm pwrdn OP1_9 OP2_7 6 8 151)
+(sysctrl diswdtm diswdt OP1_10 OP2_5 5 10 165)
+(sysctrl enwdtm enwdt OP1_8 OP2_5 7 10 133)
+(sysctrl einitm einit OP1_11 OP2_5 4 10 181)
+(sysctrl srvwdtm srvwdt OP1_10 OP2_7 5 8 167 )
+
+;s/w brk
+; SBRK
+(dni sbrk "sbrk"
+ ((PIPE OS) (IDOC MISC))
+ "sbrk"
+ (+ OP1_8 OP2_12 (f-op-bit8 0))
+ ()
+ ()
+)
+
+; atomic sequence
+; ATOMIC #irang2
+(dni atomic "begin atomic sequence"
+ ((PIPE OS) (IDOC SYSC))
+ "atomic $hash$uimm2"
+ (+ OP1_13 OP2_1 (f-op-lbit2 0) uimm2 (f-op-bit4 0))
+ (sequence ((HI count))
+ (set HI count uimm2)
+ (cond HI
+ ((ne HI count (const 0))
+ (sequence ()
+ (set HI pc (add HI pc (const 2)))
+ (set HI count (sub HI count (const 1)))
+ ))
+ )
+ (set HI count (const 0))
+ )
+ ()
+)
+
+;extended register sequence
+; EXTR #irang2
+(dni extr "begin extended register sequence"
+ ((PIPE OS) (IDOC SYSC))
+ "extr $hash$uimm2"
+ (+ OP1_13 OP2_1 (f-op-lbit2 2) uimm2 (f-op-bit4 0))
+ (sequence ((HI count))
+ (set HI count uimm2)
+ (cond HI
+ ((ne HI count (const 0))
+ (sequence ()
+ (set HI pc (add HI pc (const 2)))
+ (set HI count (sub HI count (const 1)))
+ ))
+ )
+ (set HI count (const 0))
+ )
+ ()
+)
+
+;extended page sequence
+; EXTP Rw,#irang2
+(dni extp "begin extended page sequence"
+ ((PIPE OS) (IDOC SYSC))
+ "extp $sr,$hash$uimm2"
+ (+ OP1_13 OP2_12 (f-op-lbit2 1) uimm2 sr)
+ (sequence ((HI count))
+ (set HI count uimm2)
+ (cond HI
+ ((ne HI count (const 0))
+ (sequence ()
+ (set HI pc (add HI pc (const 2)))
+ (set HI count (sub HI count (const 1)))
+ ))
+ )
+ (set HI count (const 0))
+ )
+ ()
+)
+
+;extended page sequence
+; EXTP #pag10,#irang2
+(dni extp1 "begin extended page sequence"
+ ((PIPE OS) (IDOC SYSC))
+ "extp $hash$pagenum,$hash$uimm2"
+ (+ OP1_13 OP2_7 (f-op-lbit2 1) uimm2 (f-op-bit4 0) pagenum (f-qlobit 0) (f-qlobit2 0))
+ (sequence ((HI count))
+ (set HI count uimm2)
+ (cond HI
+ ((ne HI count (const 0))
+ (sequence ()
+ (set HI pc (add HI pc (const 2)))
+ (set HI count (sub HI count (const 1)))
+ ))
+ )
+ (set HI count (const 0))
+ )
+ ()
+)
+
+; EXTP #pag10,#irang2
+(dni extpg1 "begin extended page sequence"
+ ((PIPE OS) (IDOC SYSC))
+ "extp $hash$pag$upag16,$hash$uimm2"
+ (+ OP1_13 OP2_7 (f-op-lbit2 1) uimm2 (f-op-bit4 0) upag16 )
+ (sequence ((HI count))
+ (set HI count uimm2)
+ (cond HI
+ ((ne HI count (const 0))
+ (sequence ()
+ (set HI pc (add HI pc (const 2)))
+ (set HI count (sub HI count (const 1)))
+ ))
+ )
+ (set HI count (const 0))
+ )
+ ()
+)
+
+;extended page and register sequence
+; EXTPR Rw,#irang2
+(dni extpr "begin extended page and register sequence"
+ ((PIPE OS) (IDOC SYSC))
+ "extpr $sr,$hash$uimm2"
+ (+ OP1_13 OP2_12 (f-op-lbit2 3) uimm2 sr)
+ (sequence ((HI count))
+ (set HI count uimm2)
+ (cond HI
+ ((ne HI count (const 0))
+ (sequence ()
+ (set HI pc (add HI pc (const 2)))
+ (set HI count (sub HI count (const 1)))
+ ))
+ )
+ (set HI count (const 0))
+ )
+ ()
+)
+
+;extended page and register sequence
+; EXTPR #pag10,#irang2
+(dni extpr1 "begin extended page sequence"
+ ((PIPE OS) (IDOC SYSC))
+ "extpr $hash$pagenum,$hash$uimm2"
+ (+ OP1_13 OP2_7 (f-op-lbit2 3) uimm2 (f-op-bit4 0) pagenum (f-qlobit 0) (f-qlobit2 0))
+ (sequence ((HI count))
+ (set HI count uimm2)
+ (cond HI
+ ((ne HI count (const 0))
+ (sequence ()
+ (set HI pc (add HI pc (const 2)))
+ (set HI count (sub HI count (const 1)))
+ ))
+ )
+ (set HI count (const 0))
+ )
+ ()
+)
+
+;extended segment sequence
+; EXTS Rw,#irang2
+(dni exts "begin extended segment sequence"
+ ((PIPE OS) (IDOC SYSC))
+ "exts $sr,$hash$uimm2"
+ (+ OP1_13 OP2_12 (f-op-lbit2 0) uimm2 sr)
+ (sequence ((HI count))
+ (set HI count uimm2)
+ (cond HI
+ ((ne HI count (const 0))
+ (sequence ()
+ (set HI pc (add HI pc (const 2)))
+ (set HI count (sub HI count (const 1)))
+ ))
+ )
+ (set HI count (const 0))
+ )
+ ()
+)
+
+;extended segment sequence
+; EXTS #seg8,#irang2
+(dni exts1 "begin extended segment sequence"
+ ((PIPE OS) (IDOC SYSC))
+ "exts $hash$seghi8,$hash$uimm2"
+ (+ OP1_13 OP2_7 (f-op-lbit2 0) uimm2 (f-op-bit4 0) seghi8 (f-op-bit8 0))
+ (sequence ((HI count))
+ (set HI count uimm2)
+ (cond HI
+ ((ne HI count (const 0))
+ (sequence ()
+ (set HI pc (add HI pc (const 2)))
+ (set HI count (sub HI count (const 1)))
+ ))
+ )
+ (set HI count (const 0))
+ )
+ ()
+)
+
+;extended segment register sequence
+; EXTSR Rwm,#irang2
+(dni extsr "begin extended segment and register sequence"
+ ((PIPE OS) (IDOC SYSC))
+ "extsr $sr,$hash$uimm2"
+ (+ OP1_13 OP2_12 (f-op-lbit2 2) uimm2 sr)
+ (sequence ((HI count))
+ (set HI count uimm2)
+ (cond HI
+ ((ne HI count (const 0))
+ (sequence ()
+ (set HI pc (add HI pc (const 2)))
+ (set HI count (sub HI count (const 1)))
+ ))
+ )
+ (set HI count (const 0))
+ )
+ ()
+)
+
+;extended segment register sequence
+; EXTSR #pag10,#irang2
+(dni extsr1 "begin extended segment and register sequence"
+ ((PIPE OS) (IDOC SYSC))
+ "extsr $hash$seghi8,$hash$uimm2"
+ (+ OP1_13 OP2_7 (f-op-lbit2 2) uimm2 (f-op-bit4 0) seghi8 (f-op-bit8 0))
+ (sequence ((HI count))
+ (set HI count uimm2)
+ (cond HI
+ ((ne HI count (const 0))
+ (sequence ()
+ (set HI pc (add HI pc (const 2)))
+ (set HI count (sub HI count (const 1)))
+ ))
+ )
+ (set HI count (const 0))
+ )
+ ()
+)
+
+;prioritize register
+;PRIOR Rwn,Rwm
+(dni prior "add registers"
+ ((PIPE OS) (IDOC ALU))
+ "prior $dr,$sr"
+ (+ OP1_2 OP2_11 dr sr)
+ (sequence ((HI count) (HI tmp1) (HI tmp2))
+ (set HI count (const 0))
+ (set HI tmp1 sr)
+ (set HI tmp2 (and tmp1 (const 32768)))
+ (cond HI
+ ((ne HI tmp2 (const 1)) (ne HI sr (const 0))
+ (sll HI tmp1 (const 1))
+ (set HI tmp2 (and tmp1 (const 32768)))
+ (set HI count (add HI count (const 1)))
+ )
+ )
+ (set HI dr count)
+ )
+ ()
+)
+
+
+;bit instructions
+;******************************************************************
+;bit clear
+(define-pmacro (bclear name insn opc1)
+ (dni name
+ (.str name "bit clear" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $reg8$dot$qbit")
+ (+ opc1 OP2_14 reg8)
+ (sequence ((HI tmp1) (HI tmp2))
+ (set tmp2 (const 1))
+ (set tmp1 reg8)
+ (sll tmp2 qbit)
+ (inv tmp2)
+ (set BI tmp1(and tmp1 tmp2))
+ (set HI reg8 tmp1))
+ ()
+ )
+)
+
+;clear direct bit
+(dni bclr18 "bit logical MOVN"
+ ((PIPE OS) (IDOC ALU))
+ "bclr $RegNam"
+ (+ OP1_11 OP2_14 RegNam)
+ (sequence ((HI tmp1) (HI tmp2))
+ (set tmp2 (const 1))
+ (set tmp1 reg8)
+ (sll tmp2 qbit)
+ (inv tmp2)
+ (set BI tmp1(and tmp1 tmp2))
+ (set HI reg8 tmp1))
+ ()
+)
+
+
+(bclear bclr0 bclr QBIT_0 )
+(bclear bclr1 bclr QBIT_1 )
+(bclear bclr2 bclr QBIT_2 )
+(bclear bclr3 bclr QBIT_3 )
+(bclear bclr4 bclr QBIT_4 )
+(bclear bclr5 bclr QBIT_5 )
+(bclear bclr6 bclr QBIT_6 )
+(bclear bclr7 bclr QBIT_7 )
+(bclear bclr8 bclr QBIT_8 )
+(bclear bclr9 bclr QBIT_9 )
+(bclear bclr10 bclr QBIT_10 )
+(bclear bclr11 bclr QBIT_11 )
+(bclear bclr12 bclr QBIT_12 )
+(bclear bclr13 bclr QBIT_13 )
+(bclear bclr14 bclr QBIT_14 )
+(bclear bclr15 bclr QBIT_15 )
+
+;set direct bit
+(dni bset19 "bit logical MOVN"
+ ((PIPE OS) (IDOC ALU))
+ "bset $RegNam"
+ (+ OP1_11 OP2_15 RegNam)
+ (sequence ((HI tmp1) (HI tmp2))
+ (set tmp2 (const 1))
+ (set tmp1 reg8)
+ (sll tmp2 qbit)
+ (set BI tmp1(or tmp1 tmp2))
+ (set HI reg8 tmp1))
+ ()
+)
+
+;bit set
+(define-pmacro (bitset name insn opc1)
+ (dni name
+ (.str name "bit set" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $reg8$dot$qbit")
+ (+ opc1 OP2_15 reg8)
+ (sequence ((HI tmp1) (HI tmp2))
+ (set tmp2 (const 1))
+ (set tmp1 reg8)
+ (sll tmp2 qbit)
+ (set BI tmp1(or tmp1 tmp2))
+ (set HI reg8 tmp1))
+ ()
+ )
+)
+
+
+(bitset bset0 bset QBIT_0 )
+(bitset bset1 bset QBIT_1 )
+(bitset bset2 bset QBIT_2 )
+(bitset bset3 bset QBIT_3 )
+(bitset bset4 bset QBIT_4 )
+(bitset bset5 bset QBIT_5 )
+(bitset bset6 bset QBIT_6 )
+(bitset bset7 bset QBIT_7 )
+(bitset bset8 bset QBIT_8 )
+(bitset bset9 bset QBIT_9 )
+(bitset bset10 bset QBIT_10 )
+(bitset bset11 bset QBIT_11 )
+(bitset bset12 bset QBIT_12 )
+(bitset bset13 bset QBIT_13 )
+(bitset bset14 bset QBIT_14 )
+(bitset bset15 bset QBIT_15 )
+
+;mov direct bit
+;BMOV bitaddrZ.z,bitaddrQ.q
+(dni bmov "bit logical MOV"
+ ((PIPE OS) (IDOC ALU))
+ "bmov $reghi8$dot$qhibit,$reg8$dot$qlobit"
+ (+ OP1_4 OP2_10 reg8 reghi8 qhibit qlobit)
+ (sequence ((HI tmp1) (HI tmp2) (HI tmp3) (HI tmp4))
+ (set HI tmp1 reghi8)
+ (set HI tmp2 reg8)
+ (set tmp3 (const 1))
+ (set tmp4 (const 1))
+ (sll tmp3 qlobit)
+ (sll tmp4 qhibit)
+ (and tmp1 tmp3)
+ (and tmp2 tmp4)
+ (set BI tmp1 tmp2)
+ (set HI reghi8 tmp1)
+ (set HI reg8 tmp2))
+ ()
+)
+
+;movn direct bit
+;BMOVN bitaddrZ.z,bitaddrQ.q
+(dni bmovn "bit logical MOVN"
+ ((PIPE OS) (IDOC ALU))
+ "bmovn $reghi8$dot$qhibit,$reg8$dot$qlobit"
+ (+ OP1_3 OP2_10 reg8 reghi8 qhibit qlobit)
+ (sequence ((HI tmp1) (HI tmp2) (HI tmp3) (HI tmp4))
+ (set HI tmp1 reghi8)
+ (set HI tmp2 reg8)
+ (set tmp3 (const 1))
+ (set tmp4 (const 1))
+ (sll tmp3 qlobit)
+ (sll tmp4 qhibit)
+ (and tmp1 tmp3)
+ (and tmp2 tmp4)
+ (inv HI tmp2)
+ (set BI tmp1 tmp2)
+ (set HI reghi8 tmp1)
+ (set HI reg8 tmp2))
+ ()
+)
+
+;and direct bit
+;BAND bitaddrZ.z,bitaddrQ.q
+(dni band "bit logical AND"
+ ((PIPE OS) (IDOC ALU))
+ "band $reghi8$dot$qhibit,$reg8$dot$qlobit"
+ (+ OP1_6 OP2_10 reg8 reghi8 qhibit qlobit)
+ (sequence ((HI tmp1) (HI tmp2) (HI tmp3) (HI tmp4))
+ (set HI tmp1 reghi8)
+ (set HI tmp2 reg8)
+ (set tmp3 (const 1))
+ (set tmp4 (const 1))
+ (sll tmp3 qlobit)
+ (sll tmp4 qhibit)
+ (and tmp1 tmp3)
+ (and tmp2 tmp4)
+ (set BI tmp1(and tmp1 tmp2))
+ (set HI reghi8 tmp1)
+ (set HI reg8 tmp2))
+ ()
+)
+
+;or direct bit
+;BOR bitaddrZ.z,bitaddrQ.q
+(dni bor "bit logical OR"
+ ((PIPE OS) (IDOC ALU))
+ "bor $reghi8$dot$qhibit,$reg8$dot$qlobit"
+ (+ OP1_5 OP2_10 reg8 reghi8 qhibit qlobit)
+ (sequence ((HI tmp1) (HI tmp2) (HI tmp3) (HI tmp4))
+ (set HI tmp1 reghi8)
+ (set HI tmp2 reg8)
+ (set tmp3 (const 1))
+ (set tmp4 (const 1))
+ (sll tmp3 qlobit)
+ (sll tmp4 qhibit)
+ (and tmp1 tmp3)
+ (and tmp2 tmp4)
+ (set BI tmp1(or tmp1 tmp2))
+ (set HI reghi8 tmp1)
+ (set HI reg8 tmp2))
+ ()
+)
+
+;xor direct bit
+;BXOR bitaddrZ.z,bitaddrQ.q
+(dni bxor "bit logical XOR"
+ ((PIPE OS) (IDOC ALU))
+ "bxor $reghi8$dot$qhibit,$reg8$dot$qlobit"
+ (+ OP1_7 OP2_10 reg8 reghi8 qhibit qlobit)
+ (sequence ((HI tmp1) (HI tmp2) (HI tmp3) (HI tmp4))
+ (set HI tmp1 reghi8)
+ (set HI tmp2 reg8)
+ (set tmp3 (const 1))
+ (set tmp4 (const 1))
+ (sll tmp3 qlobit)
+ (sll tmp4 qhibit)
+ (and tmp1 tmp3)
+ (and tmp2 tmp4)
+ (set BI tmp1(xor tmp1 tmp2))
+ (set HI reghi8 tmp1)
+ (set HI reg8 tmp2))
+ ()
+)
+
+;cmp direct bit to bit
+;BCMP bitaddrZ.z,bitaddrQ.q
+(dni bcmp "bit to bit compare"
+ ((PIPE OS) (IDOC ALU))
+ "bcmp $reghi8$dot$qhibit,$reg8$dot$qlobit"
+ (+ OP1_2 OP2_10 reg8 reghi8 qhibit qlobit)
+ (sequence ((HI tmp1) (HI tmp2) (HI tmp3) (HI tmp4))
+ (set HI tmp1 reghi8)
+ (set HI tmp2 reg8)
+ (set tmp3 (const 1))
+ (set tmp4 (const 1))
+ (sll tmp3 qlobit)
+ (sll tmp4 qhibit)
+ (and tmp1 tmp3)
+ (and tmp2 tmp4)
+ (set BI tmp1(xor tmp1 tmp2))
+ (set HI reghi8 tmp1)
+ (set HI reg8 tmp2))
+ ()
+)
+
+;bit field low byte
+;BFLDL op1,op2,op3
+(dni bfldl "bit field low byte"
+ ((PIPE OS) (IDOC MOVE))
+ "bfldl $reg8,$hash$mask8,$hash$datahi8"
+ (+ OP1_0 OP2_10 reg8 mask8 datahi8)
+ (sequence ((HI tmp1) (QI tmp2) (QI tmp3))
+ (set HI tmp1 reg8)
+ (set QI tmp2 mask8)
+ (set QI tmp3 datahi8)
+ (inv QI tmp2)
+ (set HI tmp1 (and tmp1 tmp2))
+ (set HI tmp1 (or tmp1 tmp3))
+ (set HI reg8 tmp1)
+ )
+ ()
+)
+
+;bit field high byte
+;BFLDH op1,op2,op3
+(dni bfldh "bit field high byte"
+ ((PIPE OS) (IDOC MOVE))
+ "bfldh $reg8,$hash$masklo8,$hash$data8"
+ (+ OP1_1 OP2_10 reg8 masklo8 data8)
+ (sequence ((HI tmp1) (HI tmp2) (HI tmp3))
+ (set HI tmp1 reg8)
+ (set QI tmp2 masklo8)
+ (set HI tmp3 data8)
+ (sll tmp2 (const 8))
+ (inv HI tmp2)
+ (sll tmp3 (const 8))
+ (set HI tmp1 (and tmp1 tmp2))
+ (set HI tmp1 (or tmp1 tmp3))
+ (set HI reg8 tmp1)
+ )
+ ()
+)
+
+;/**********compare instructions******************
+
+;Compare register
+;CMP Rwn,Rwm
+(dni cmpr "compare two registers"
+ ((PIPE OS) (IDOC CMP))
+ "cmp $src1,$src2"
+ (+ OP1_4 OP2_0 src1 src2)
+ (set condbit (lt HI src1 src2))
+ ()
+)
+
+;Compare byte register
+;CMPB Rbn,Rbm
+(dni cmpbr "compare two byte registers"
+ ((PIPE OS) (IDOC CMP))
+ "cmpb $drb,$srb"
+ (+ OP1_4 OP2_1 drb srb)
+ (set condbit (lt QI drb srb))
+ ()
+)
+
+(define-pmacro (cmp1 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "compare" )
+ ((PIPE OS) (IDOC CMP))
+ (.str insn " $"op1 ",$hash$"op2)
+ (+ opc1 opc2 op1 (f-op-bit1 0) op2)
+ (set condbit (lt mode op1 op2))
+ ()
+ )
+)
+(cmp1 cmpri cmp OP1_4 OP2_8 src1 uimm3 HI)
+(cmp1 cmpbri cmpb OP1_4 OP2_9 drb uimm3 QI)
+
+; CMP Rwn,#data16
+(dni cmpi "compare"
+ ((PIPE OS) (IDOC CMP))
+ "cmp $reg8,$hash$uimm16"
+ (+ OP1_4 OP2_6 reg8 uimm16)
+ (set condbit (lt HI reg8 uimm16))
+ ()
+)
+
+; CMPB reg,#data8
+(dni cmpbi "compare"
+ ((PIPE OS) (IDOC CMP))
+ "cmpb $regb8,$hash$uimm8"
+ (+ OP1_4 OP2_7 regb8 uimm8 (f-op-bit8 0))
+ (set condbit (lt QI regb8 uimm8))
+ ()
+)
+
+;compare reg and indirect memory
+(define-pmacro (cmp2 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "compare" )
+ ((PIPE OS) (IDOC CMP))
+ (.str insn " $"op1 ",[$"op2"]")
+ (+ opc1 opc2 op1 (f-op-bit2 2) op2)
+ (set condbit (lt mode op1 op2))
+ ()
+ )
+)
+(cmp2 cmpr2 cmp OP1_4 OP2_8 dr sr2 HI)
+(cmp2 cmpbr2 cmpb OP1_4 OP2_9 drb sr2 QI)
+
+;compare register and indirect memory post increment
+(define-pmacro (cmp3 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "compare" )
+ ((PIPE OS) (IDOC CMP))
+ (.str insn " $"op1 ",[$"op2"+]")
+ (+ opc1 opc2 op1 (f-op-bit2 3) op2)
+ (sequence ()
+ (set condbit (lt mode op1 op2))
+ (set HI op2 (add HI op2 (const 2)))
+ )
+ ()
+ )
+)
+(cmp3 cmp2i cmp OP1_4 OP2_8 dr sr2 HI)
+(cmp3 cmpb2i cmpb OP1_4 OP2_9 drb sr2 QI)
+
+;compare register and direct memory
+(define-pmacro (cmp4 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "compare" )
+ ((PIPE OS) (IDOC CMP))
+ (.str insn " $"op1 ",$pof$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set condbit (lt HI op1 (mem HI op2)))
+ ()
+ )
+)
+(cmp4 cmp04 cmp OP1_4 OP2_2 reg8 upof16 HI)
+(cmp4 cmpb4 cmpb OP1_4 OP2_3 regb8 upof16 QI)
+
+;compare register and direct memory
+(define-pmacro (cmp4 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "compare" )
+ ((PIPE OS) (IDOC CMP))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set condbit (lt HI op1 (mem HI op2)))
+ ()
+ )
+)
+(cmp4 cmp004 cmp OP1_4 OP2_2 regmem8 memgr8 HI)
+(cmp4 cmp0004 cmp OP1_4 OP2_2 reg8 memory HI)
+(cmp4 cmpb04 cmpb OP1_4 OP2_3 regbmem8 memgr8 QI)
+(cmp4 cmpb004 cmpb OP1_4 OP2_3 regb8 memory QI)
+
+;compare register and immediate
+(define-pmacro (cmp5 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "compare" )
+ ((PIPE OS) (IDOC CMP))
+ (.str insn " $"op1 ",$hash$"op2)
+ (+ opc1 opc2 op2 op1)
+ (sequence ()
+ (set condbit (lt HI op1 op2))
+ (set mode op1 (sub HI op1 (const 1)))
+ )
+ ()
+ )
+)
+(cmp5 cmpd1ri cmpd1 OP1_10 OP2_0 sr uimm4 HI)
+(cmp5 cmpd2ri cmpd2 OP1_11 OP2_0 sr uimm4 HI)
+(cmp5 cmpi1ri cmpi1 OP1_8 OP2_0 sr uimm4 HI)
+(cmp5 cmpi2ri cmpi2 OP1_9 OP2_0 sr uimm4 HI)
+(cmp5 cmpd1rim cmpd1 OP1_10 OP2_6 reg8 uimm16 HI)
+(cmp5 cmpd2rim cmpd2 OP1_11 OP2_6 reg8 uimm16 HI)
+(cmp5 cmpi1rim cmpi1 OP1_8 OP2_6 reg8 uimm16 HI)
+(cmp5 cmpi2rim cmpi2 OP1_9 OP2_6 reg8 uimm16 HI)
+
+;compare register and direct memory
+(define-pmacro (cmp6 name insn opc1 opc2 op1 op2 mode )
+ (dni name
+ (.str name "compare" )
+ ((PIPE OS) (IDOC CMP))
+ (.str insn " $"op1 ",$pof$"op2)
+ (+ opc1 opc2 op1 op2)
+ (sequence ()
+ (set condbit (lt HI op1 (mem HI op2)))
+ (set mode op1 (sub HI op1 (const 1)))
+ )
+ ()
+ )
+)
+(cmp6 cmpd1rp cmpd1 OP1_10 OP2_2 reg8 upof16 HI )
+(cmp6 cmpd2rp cmpd2 OP1_11 OP2_2 reg8 upof16 HI )
+(cmp6 cmpi1rp cmpi1 OP1_8 OP2_2 reg8 upof16 HI )
+(cmp6 cmpi2rp cmpi2 OP1_9 OP2_2 reg8 upof16 HI )
+
+;compare register and direct memory
+(define-pmacro (cmp7 name insn opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "compare" )
+ ((PIPE OS) (IDOC CMP))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (sequence ()
+ (set condbit (lt HI op1 (mem HI op2)))
+ (set mode op1 (sub HI op1 (const 1)))
+ )
+ ()
+ )
+)
+(cmp7 cmpd1rm cmpd1 OP1_10 OP2_2 regmem8 memgr8 HI)
+(cmp7 cmpd2rm cmpd2 OP1_11 OP2_2 regmem8 memgr8 HI)
+(cmp7 cmpi1rm cmpi1 OP1_8 OP2_2 regmem8 memgr8 HI)
+(cmp7 cmpi2rm cmpi2 OP1_9 OP2_2 regmem8 memgr8 HI)
+(cmp7 cmpd1rmi cmpd1 OP1_10 OP2_2 reg8 memory HI)
+(cmp7 cmpd2rmi cmpd2 OP1_11 OP2_2 reg8 memory HI)
+(cmp7 cmpi1rmi cmpi1 OP1_8 OP2_2 reg8 memory HI)
+(cmp7 cmpi2rmi cmpi2 OP1_9 OP2_2 reg8 memory HI)
+
+
+;Shift and rotate insns
+;****************************************************************
+(define-pmacro (shift name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "shift" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$"op2)
+ (+ opc1 opc2 op1 op2)
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+(shift shlr shl sll OP1_4 OP2_12 dr sr HI)
+(shift shrr shr srl OP1_6 OP2_12 dr sr HI)
+(shift rolr rol rol OP1_0 OP2_12 dr sr HI)
+(shift rorr ror ror OP1_2 OP2_12 dr sr HI)
+(shift ashrr ashr sra OP1_10 OP2_12 dr sr HI)
+
+(define-pmacro (shift1 name insn insn1 opc1 opc2 op1 op2 mode)
+ (dni name
+ (.str name "shift" )
+ ((PIPE OS) (IDOC ALU))
+ (.str insn " $"op1 ",$hash$"op2)
+ (+ opc1 opc2 op2 op1)
+ (set mode op1 (insn1 mode op1 op2))
+ ()
+ )
+)
+(shift1 shlri shl sll OP1_5 OP2_12 sr uimm4 HI)
+(shift1 shrri shr srl OP1_7 OP2_12 sr uimm4 HI)
+(shift1 rolri rol rol OP1_1 OP2_12 sr uimm4 HI)
+(shift1 rorri ror ror OP1_3 OP2_12 sr uimm4 HI)
+(shift1 ashrri ashr sra OP1_11 OP2_12 sr uimm4 HI)
diff --git a/djunpack.bat b/djunpack.bat
new file mode 100755
index 000000000000..f09f5ed3251f
--- /dev/null
+++ b/djunpack.bat
@@ -0,0 +1,52 @@
+@echo off
+Rem
+Rem WARNING WARNING WARNING: This file needs to have DOS CRLF end-of-line
+Rem format, or else stock DOS/Windows shells will refuse to run it.
+Rem
+Rem This batch file unpacks the GDB distribution while simultaneously
+Rem renaming some of the files whose names are invalid on DOS or conflict
+Rem with other file names after truncation to DOS 8+3 namespace.
+Rem
+Rem Invoke like this:
+Rem
+Rem djunpack gdb-XYZ.tar
+Rem
+Rem where XYZ is the version number. If the argument includes leading
+Rem directories, it MUST use backslashes, not forward slashes.
+Rem
+Rem The following 2 lines need to be changed with each new GDB release, to
+Rem be identical to the name of the top-level directory where the GDB
+Rem distribution unpacks itself.
+set GDBVER=gdb-5.0
+if "%GDBVER%"=="gdb-5.0" GoTo EnvOk
+Rem If their environment space is too small, re-exec with a larger one
+command.com /e:4096 /c %0 %1
+GoTo End
+:EnvOk
+if not exist %1 GoTo NoArchive
+djtar -x -p -o %GDBVER%/gdb/config/djgpp/fnchange.lst %1 > fnchange.tmp
+Rem The following uses a feature of COPY whereby it does not copy
+Rem empty files. We need that because the previous line will create
+Rem an empty fnchange.tmp even if the command failed for some reason.
+copy fnchange.tmp junk.tmp > nul
+if not exist junk.tmp GoTo NoDjTar
+del junk.tmp
+sed -e 's,@V@,%GDBVER%,g' < fnchange.tmp > fnchange.lst
+Rem See the comment above about the reason for using COPY.
+copy fnchange.lst junk.tmp > nul
+if not exist junk.tmp GoTo NoSed
+del junk.tmp
+djtar -x -n fnchange.lst %1
+GoTo End
+:NoSed
+echo FAIL: Sed is not available.
+GoTo End
+:NoDjTar
+echo FAIL: DJTAR is not available or no fnchange.lst file in %1.
+GoTo End
+:NoArchive
+echo FAIL: the file %1 does not seem to exist.
+echo Remember that %1 cannot use forward slashes, only backslashes.
+GoTo End
+:End
+set GDBVER=
diff --git a/elfcpp/README b/elfcpp/README
new file mode 100644
index 000000000000..9eb07e8c4794
--- /dev/null
+++ b/elfcpp/README
@@ -0,0 +1,9 @@
+elfcpp is a C++ library for reading and writing ELF information. This
+was written to support gold, the ELF linker, and may not be generally
+useful.
+
+elfcpp does not do file I/O. It deals only with offsets and memory
+data.
+
+For efficiency, most accessors are templates with two arguments: the
+ELF file class (32 or 64 bits) and the endianness.
diff --git a/elfcpp/elfcpp.h b/elfcpp/elfcpp.h
new file mode 100644
index 000000000000..305487f8bf03
--- /dev/null
+++ b/elfcpp/elfcpp.h
@@ -0,0 +1,1622 @@
+// elfcpp.h -- main header file for elfcpp -*- C++ -*-
+
+// This is the external interface for elfcpp.
+
+#ifndef ELFCPP_H
+#define ELFCPP_H
+
+#include "elfcpp_config.h"
+#include "elfcpp_swap.h"
+
+#include <stdint.h>
+
+namespace elfcpp
+{
+
+// Basic ELF types.
+
+// These types are always the same size.
+
+typedef uint16_t Elf_Half;
+typedef uint32_t Elf_Word;
+typedef int32_t Elf_Sword;
+typedef uint64_t Elf_Xword;
+typedef int64_t Elf_Sxword;
+
+// These types vary in size depending on the ELF file class. The
+// template parameter should be 32 or 64.
+
+template<int size>
+struct Elf_types;
+
+template<>
+struct Elf_types<32>
+{
+ typedef uint32_t Elf_Addr;
+ typedef uint32_t Elf_Off;
+ typedef uint32_t Elf_WXword;
+ typedef int32_t Elf_Swxword;
+};
+
+template<>
+struct Elf_types<64>
+{
+ typedef uint64_t Elf_Addr;
+ typedef uint64_t Elf_Off;
+ typedef uint64_t Elf_WXword;
+ typedef int64_t Elf_Swxword;
+};
+
+// Offsets within the Ehdr e_ident field.
+
+const int EI_MAG0 = 0;
+const int EI_MAG1 = 1;
+const int EI_MAG2 = 2;
+const int EI_MAG3 = 3;
+const int EI_CLASS = 4;
+const int EI_DATA = 5;
+const int EI_VERSION = 6;
+const int EI_OSABI = 7;
+const int EI_ABIVERSION = 8;
+const int EI_PAD = 9;
+const int EI_NIDENT = 16;
+
+// The valid values found in Ehdr e_ident[EI_MAG0 through EI_MAG3].
+
+const int ELFMAG0 = 0x7f;
+const int ELFMAG1 = 'E';
+const int ELFMAG2 = 'L';
+const int ELFMAG3 = 'F';
+
+// The valid values found in Ehdr e_ident[EI_CLASS].
+
+enum
+{
+ ELFCLASSNONE = 0,
+ ELFCLASS32 = 1,
+ ELFCLASS64 = 2
+};
+
+// The valid values found in Ehdr e_ident[EI_DATA].
+
+enum
+{
+ ELFDATANONE = 0,
+ ELFDATA2LSB = 1,
+ ELFDATA2MSB = 2
+};
+
+// The valid values found in Ehdr e_ident[EI_VERSION] and e_version.
+
+enum
+{
+ EV_NONE = 0,
+ EV_CURRENT = 1
+};
+
+// The valid values found in Ehdr e_ident[EI_OSABI].
+
+enum ELFOSABI
+{
+ ELFOSABI_NONE = 0,
+ ELFOSABI_HPUX = 1,
+ ELFOSABI_NETBSD = 2,
+ // ELFOSABI_LINUX is not listed in the ELF standard.
+ ELFOSABI_LINUX = 3,
+ // ELFOSABI_HURD is not listed in the ELF standard.
+ ELFOSABI_HURD = 4,
+ ELFOSABI_SOLARIS = 6,
+ ELFOSABI_AIX = 7,
+ ELFOSABI_IRIX = 8,
+ ELFOSABI_FREEBSD = 9,
+ ELFOSABI_TRU64 = 10,
+ ELFOSABI_MODESTO = 11,
+ ELFOSABI_OPENBSD = 12,
+ ELFOSABI_OPENVMS = 13,
+ ELFOSABI_NSK = 14,
+ ELFOSABI_AROS = 15,
+ // A GNU extension for the ARM.
+ ELFOSABI_ARM = 97,
+ // A GNU extension for the MSP.
+ ELFOSABI_STANDALONE = 255
+};
+
+// The valid values found in the Ehdr e_type field.
+
+enum ET
+{
+ ET_NONE = 0,
+ ET_REL = 1,
+ ET_EXEC = 2,
+ ET_DYN = 3,
+ ET_CORE = 4,
+ ET_LOOS = 0xfe00,
+ ET_HIOS = 0xfeff,
+ ET_LOPROC = 0xff00,
+ ET_HIPROC = 0xffff
+};
+
+// The valid values found in the Ehdr e_machine field.
+
+enum EM
+{
+ EM_NONE = 0,
+ EM_M32 = 1,
+ EM_SPARC = 2,
+ EM_386 = 3,
+ EM_68K = 4,
+ EM_88K = 5,
+ // 6 used to be EM_486
+ EM_860 = 7,
+ EM_MIPS = 8,
+ EM_S370 = 9,
+ EM_MIPS_RS3_LE = 10,
+ // 11 was the old Sparc V9 ABI.
+ // 12 through 14 are reserved.
+ EM_PARISC = 15,
+ // 16 is reserved.
+ // Some old PowerPC object files use 17.
+ EM_VPP500 = 17,
+ EM_SPARC32PLUS = 18,
+ EM_960 = 19,
+ EM_PPC = 20,
+ EM_PPC64 = 21,
+ EM_S390 = 22,
+ // 23 through 35 are served.
+ EM_V800 = 36,
+ EM_FR20 = 37,
+ EM_RH32 = 38,
+ EM_RCE = 39,
+ EM_ARM = 40,
+ EM_ALPHA = 41,
+ EM_SH = 42,
+ EM_SPARCV9 = 43,
+ EM_TRICORE = 44,
+ EM_ARC = 45,
+ EM_H8_300 = 46,
+ EM_H8_300H = 47,
+ EM_H8S = 48,
+ EM_H8_500 = 49,
+ EM_IA_64 = 50,
+ EM_MIPS_X = 51,
+ EM_COLDFIRE = 52,
+ EM_68HC12 = 53,
+ EM_MMA = 54,
+ EM_PCP = 55,
+ EM_NCPU = 56,
+ EM_NDR1 = 57,
+ EM_STARCORE = 58,
+ EM_ME16 = 59,
+ EM_ST100 = 60,
+ EM_TINYJ = 61,
+ EM_X86_64 = 62,
+ EM_PDSP = 63,
+ EM_PDP10 = 64,
+ EM_PDP11 = 65,
+ EM_FX66 = 66,
+ EM_ST9PLUS = 67,
+ EM_ST7 = 68,
+ EM_68HC16 = 69,
+ EM_68HC11 = 70,
+ EM_68HC08 = 71,
+ EM_68HC05 = 72,
+ EM_SVX = 73,
+ EM_ST19 = 74,
+ EM_VAX = 75,
+ EM_CRIS = 76,
+ EM_JAVELIN = 77,
+ EM_FIREPATH = 78,
+ EM_ZSP = 79,
+ EM_MMIX = 80,
+ EM_HUANY = 81,
+ EM_PRISM = 82,
+ EM_AVR = 83,
+ EM_FR30 = 84,
+ EM_D10V = 85,
+ EM_D30V = 86,
+ EM_V850 = 87,
+ EM_M32R = 88,
+ EM_MN10300 = 89,
+ EM_MN10200 = 90,
+ EM_PJ = 91,
+ EM_OPENRISC = 92,
+ EM_ARC_A5 = 93,
+ EM_XTENSA = 94,
+ EM_VIDEOCORE = 95,
+ EM_TMM_GPP = 96,
+ EM_NS32K = 97,
+ EM_TPC = 98,
+ // Some old picoJava object files use 99 (EM_PJ is correct).
+ EM_SNP1K = 99,
+ EM_ST200 = 100,
+ EM_IP2K = 101,
+ EM_MAX = 102,
+ EM_CR = 103,
+ EM_F2MC16 = 104,
+ EM_MSP430 = 105,
+ EM_BLACKFIN = 106,
+ EM_SE_C33 = 107,
+ EM_SEP = 108,
+ EM_ARCA = 109,
+ EM_UNICORE = 110,
+ EM_ALTERA_NIOS2 = 113,
+ EM_CRX = 114,
+ // The Morph MT.
+ EM_MT = 0x2530,
+ // DLX.
+ EM_DLX = 0x5aa5,
+ // FRV.
+ EM_FRV = 0x5441,
+ // Infineon Technologies 16-bit microcontroller with C166-V2 core.
+ EM_X16X = 0x4688,
+ // Xstorym16
+ EM_XSTORMY16 = 0xad45,
+ // Renesas M32C
+ EM_M32C = 0xfeb0,
+ // Vitesse IQ2000
+ EM_IQ2000 = 0xfeba,
+ // NIOS
+ EM_NIOS32 = 0xfebb
+ // Old AVR objects used 0x1057 (EM_AVR is correct).
+ // Old MSP430 objects used 0x1059 (EM_MSP430 is correct).
+ // Old FR30 objects used 0x3330 (EM_FR30 is correct).
+ // Old OpenRISC objects used 0x3426 and 0x8472 (EM_OPENRISC is correct).
+ // Old D10V objects used 0x7650 (EM_D10V is correct).
+ // Old D30V objects used 0x7676 (EM_D30V is correct).
+ // Old IP2X objects used 0x8217 (EM_IP2K is correct).
+ // Old PowerPC objects used 0x9025 (EM_PPC is correct).
+ // Old Alpha objects used 0x9026 (EM_ALPHA is correct).
+ // Old M32R objects used 0x9041 (EM_M32R is correct).
+ // Old V850 objects used 0x9080 (EM_V850 is correct).
+ // Old S/390 objects used 0xa390 (EM_S390 is correct).
+ // Old Xtensa objects used 0xabc7 (EM_XTENSA is correct).
+ // Old MN10300 objects used 0xbeef (EM_MN10300 is correct).
+ // Old MN10200 objects used 0xdead (EM_MN10200 is correct).
+};
+
+// Special section indices.
+
+enum
+{
+ SHN_UNDEF = 0,
+ SHN_LORESERVE = 0xff00,
+ SHN_LOPROC = 0xff00,
+ SHN_HIPROC = 0xff1f,
+ SHN_LOOS = 0xff20,
+ SHN_HIOS = 0xff3f,
+ SHN_ABS = 0xfff1,
+ SHN_COMMON = 0xfff2,
+ SHN_XINDEX = 0xffff,
+ SHN_HIRESERVE = 0xffff
+};
+
+// The valid values found in the Shdr sh_type field.
+
+enum SHT
+{
+ SHT_NULL = 0,
+ SHT_PROGBITS = 1,
+ SHT_SYMTAB = 2,
+ SHT_STRTAB = 3,
+ SHT_RELA = 4,
+ SHT_HASH = 5,
+ SHT_DYNAMIC = 6,
+ SHT_NOTE = 7,
+ SHT_NOBITS = 8,
+ SHT_REL = 9,
+ SHT_SHLIB = 10,
+ SHT_DYNSYM = 11,
+ SHT_INIT_ARRAY = 14,
+ SHT_FINI_ARRAY = 15,
+ SHT_PREINIT_ARRAY = 16,
+ SHT_GROUP = 17,
+ SHT_SYMTAB_SHNDX = 18,
+ SHT_LOOS = 0x60000000,
+ SHT_HIOS = 0x6fffffff,
+ SHT_LOPROC = 0x70000000,
+ SHT_HIPROC = 0x7fffffff,
+ SHT_LOUSER = 0x80000000,
+ SHT_HIUSER = 0xffffffff,
+ // The remaining values are not in the standard.
+ // List of prelink dependencies.
+ SHT_GNU_LIBLIST = 0x6ffffff7,
+ // Versions defined by file.
+ SHT_SUNW_verdef = 0x6ffffffd,
+ SHT_GNU_verdef = 0x6ffffffd,
+ // Versions needed by file.
+ SHT_SUNW_verneed = 0x6ffffffe,
+ SHT_GNU_verneed = 0x6ffffffe,
+ // Symbol versions,
+ SHT_SUNW_versym = 0x6fffffff,
+ SHT_GNU_versym = 0x6fffffff,
+};
+
+// The valid bit flags found in the Shdr sh_flags field.
+
+enum SHF
+{
+ SHF_WRITE = 0x1,
+ SHF_ALLOC = 0x2,
+ SHF_EXECINSTR = 0x4,
+ SHF_MERGE = 0x10,
+ SHF_STRINGS = 0x20,
+ SHF_INFO_LINK = 0x40,
+ SHF_LINK_ORDER = 0x80,
+ SHF_OS_NONCONFORMING = 0x100,
+ SHF_GROUP = 0x200,
+ SHF_TLS = 0x400,
+ SHF_MASKOS = 0x0ff00000,
+ SHF_MASKPROC = 0xf0000000
+};
+
+// Bit flags which appear in the first 32-bit word of the section data
+// of a SHT_GROUP section.
+
+enum
+{
+ GRP_COMDAT = 0x1,
+ GRP_MASKOS = 0x0ff00000,
+ GRP_MASKPROC = 0xf0000000
+};
+
+// The valid values found in the Phdr p_type field.
+
+enum PT
+{
+ PT_NULL = 0,
+ PT_LOAD = 1,
+ PT_DYNAMIC = 2,
+ PT_INTERP = 3,
+ PT_NOTE = 4,
+ PT_SHLIB = 5,
+ PT_PHDR = 6,
+ PT_TLS = 7,
+ PT_LOOS = 0x60000000,
+ PT_HIOS = 0x6fffffff,
+ PT_LOPROC = 0x70000000,
+ PT_HIPROC = 0x7fffffff,
+ // The remaining values are not in the standard.
+ // Frame unwind information.
+ PT_GNU_EH_FRAME = 0x6474e550,
+ PT_SUNW_EH_FRAME = 0x6474e550,
+ // Stack flags.
+ PT_GNU_STACK = 0x6474e551,
+ // Read only after relocation.
+ PT_GNU_RELRO = 0x6474e552
+};
+
+// The valid bit flags found in the Phdr p_flags field.
+
+enum PF
+{
+ PF_X = 0x1,
+ PF_W = 0x2,
+ PF_R = 0x4,
+ PF_MASKOS = 0x0ff00000,
+ PF_MASKPROC = 0xf0000000
+};
+
+// Symbol binding from Sym st_info field.
+
+enum STB
+{
+ STB_LOCAL = 0,
+ STB_GLOBAL = 1,
+ STB_WEAK = 2,
+ STB_LOOS = 10,
+ STB_HIOS = 12,
+ STB_LOPROC = 13,
+ STB_HIPROC = 15
+};
+
+// Symbol types from Sym st_info field.
+
+enum STT
+{
+ STT_NOTYPE = 0,
+ STT_OBJECT = 1,
+ STT_FUNC = 2,
+ STT_SECTION = 3,
+ STT_FILE = 4,
+ STT_COMMON = 5,
+ STT_TLS = 6,
+ STT_LOOS = 10,
+ STT_HIOS = 12,
+ STT_LOPROC = 13,
+ STT_HIPROC = 15
+};
+
+inline STB
+elf_st_bind(unsigned char info)
+{
+ return static_cast<STB>(info >> 4);
+}
+
+inline STT
+elf_st_type(unsigned char info)
+{
+ return static_cast<STT>(info & 0xf);
+}
+
+inline unsigned char
+elf_st_info(STB bind, STT type)
+{
+ return ((static_cast<unsigned char>(bind) << 4)
+ + (static_cast<unsigned char>(type) & 0xf));
+}
+
+// Symbol visibility from Sym st_other field.
+
+enum STV
+{
+ STV_DEFAULT = 0,
+ STV_INTERNAL = 1,
+ STV_HIDDEN = 2,
+ STV_PROTECTED = 3
+};
+
+inline STV
+elf_st_visibility(unsigned char other)
+{
+ return static_cast<STV>(other & 0x3);
+}
+
+inline unsigned char
+elf_st_nonvis(unsigned char other)
+{
+ return static_cast<STV>(other >> 2);
+}
+
+inline unsigned char
+elf_st_other(STV vis, unsigned char nonvis)
+{
+ return ((nonvis << 2)
+ + (static_cast<unsigned char>(vis) & 3));
+}
+
+// Reloc information from Rel/Rela r_info field.
+
+template<int size>
+unsigned int
+elf_r_sym(typename Elf_types<size>::Elf_WXword);
+
+template<>
+inline unsigned int
+elf_r_sym<32>(Elf_Word v)
+{
+ return v >> 8;
+}
+
+template<>
+inline unsigned int
+elf_r_sym<64>(Elf_Xword v)
+{
+ return v >> 32;
+}
+
+template<int size>
+unsigned int
+elf_r_type(typename Elf_types<size>::Elf_WXword);
+
+template<>
+inline unsigned int
+elf_r_type<32>(Elf_Word v)
+{
+ return v & 0xff;
+}
+
+template<>
+inline unsigned int
+elf_r_type<64>(Elf_Xword v)
+{
+ return v & 0xffffffff;
+}
+
+template<int size>
+typename Elf_types<size>::Elf_WXword
+elf_r_info(unsigned int s, unsigned int t);
+
+template<>
+inline Elf_Word
+elf_r_info<32>(unsigned int s, unsigned int t)
+{
+ return (s << 8) + (t & 0xff);
+}
+
+template<>
+inline Elf_Xword
+elf_r_info<64>(unsigned int s, unsigned int t)
+{
+ return (static_cast<Elf_Xword>(s) << 32) + (t & 0xffffffff);
+}
+
+// Dynamic tags found in the PT_DYNAMIC segment.
+
+enum DT
+{
+ DT_NULL = 0,
+ DT_NEEDED = 1,
+ DT_PLTRELSZ = 2,
+ DT_PLTGOT = 3,
+ DT_HASH = 4,
+ DT_STRTAB = 5,
+ DT_SYMTAB = 6,
+ DT_RELA = 7,
+ DT_RELASZ = 8,
+ DT_RELAENT = 9,
+ DT_STRSZ = 10,
+ DT_SYMENT = 11,
+ DT_INIT = 12,
+ DT_FINI = 13,
+ DT_SONAME = 14,
+ DT_RPATH = 15,
+ DT_SYMBOLIC = 16,
+ DT_REL = 17,
+ DT_RELSZ = 18,
+ DT_RELENT = 19,
+ DT_PLTREL = 20,
+ DT_DEBUG = 21,
+ DT_TEXTREL = 22,
+ DT_JMPREL = 23,
+ DT_BIND_NOW = 24,
+ DT_INIT_ARRAY = 25,
+ DT_FINI_ARRAY = 26,
+ DT_INIT_ARRAYSZ = 27,
+ DT_FINI_ARRAYSZ = 28,
+ DT_RUNPATH = 29,
+ DT_FLAGS = 30,
+ DT_ENCODING = 32,
+ DT_PREINIT_ARRAY = 33,
+ DT_PREINIT_ARRAYSZ = 33,
+ DT_LOOS = 0x6000000d,
+ DT_HIOS = 0x6ffff000,
+ DT_LOPROC = 0x70000000,
+ DT_HIPROC = 0x7fffffff,
+
+ // The remaining values are extensions used by GNU or Solaris.
+ DT_VALRNGLO = 0x6ffffd00,
+ DT_GNU_PRELINKED = 0x6ffffdf5,
+ DT_GNU_CONFLICTSZ = 0x6ffffdf6,
+ DT_GNU_LIBLISTSZ = 0x6ffffdf7,
+ DT_CHECKSUM = 0x6ffffdf8,
+ DT_PLTPADSZ = 0x6ffffdf9,
+ DT_MOVEENT = 0x6ffffdfa,
+ DT_MOVESZ = 0x6ffffdfb,
+ DT_FEATURE = 0x6ffffdfc,
+ DT_POSFLAG_1 = 0x6ffffdfd,
+ DT_SYMINSZ = 0x6ffffdfe,
+ DT_SYMINENT = 0x6ffffdff,
+ DT_VALRNGHI = 0x6ffffdff,
+
+ DT_ADDRRNGLO = 0x6ffffe00,
+ DT_GNU_HASH = 0x6ffffef5,
+ DT_TLSDESC_PLT = 0x6ffffef6,
+ DT_TLSDESC_GOT = 0x6ffffef7,
+ DT_GNU_CONFLICT = 0x6ffffef8,
+ DT_GNU_LIBLIST = 0x6ffffef9,
+ DT_CONFIG = 0x6ffffefa,
+ DT_DEPAUDIT = 0x6ffffefb,
+ DT_AUDIT = 0x6ffffefc,
+ DT_PLTPAD = 0x6ffffefd,
+ DT_MOVETAB = 0x6ffffefe,
+ DT_SYMINFO = 0x6ffffeff,
+ DT_ADDRRNGHI = 0x6ffffeff,
+
+ DT_RELACOUNT = 0x6ffffff9,
+ DT_RELCOUNT = 0x6ffffffa,
+ DT_FLAGS_1 = 0x6ffffffb,
+ DT_VERDEF = 0x6ffffffc,
+ DT_VERDEFNUM = 0x6ffffffd,
+ DT_VERNEED = 0x6ffffffe,
+ DT_VERNEEDNUM = 0x6fffffff,
+
+ DT_VERSYM = 0x6ffffff0,
+
+ DT_AUXILIARY = 0x7ffffffd,
+ DT_USED = 0x7ffffffe,
+ DT_FILTER = 0x7fffffff
+};
+
+// Flags found in the DT_FLAGS dynamic element.
+
+enum DF
+{
+ DF_ORIGIN = 0x1,
+ DF_SYMBOLIC = 0x2,
+ DF_TEXTREL = 0x4,
+ DF_BIND_NOW = 0x8,
+ DF_STATIC_TLS = 0x10
+};
+
+// Version numbers which appear in the vd_version field of a Verdef
+// structure.
+
+const int VER_DEF_NONE = 0;
+const int VER_DEF_CURRENT = 1;
+
+// Version numbers which appear in the vn_version field of a Verneed
+// structure.
+
+const int VER_NEED_NONE = 0;
+const int VER_NEED_CURRENT = 1;
+
+// Bit flags which appear in vd_flags of Verdef and vna_flags of
+// Vernaux.
+
+const int VER_FLG_BASE = 0x1;
+const int VER_FLG_WEAK = 0x2;
+
+// Special constants found in the SHT_GNU_versym entries.
+
+const int VER_NDX_LOCAL = 0;
+const int VER_NDX_GLOBAL = 1;
+
+// A SHT_GNU_versym section holds 16-bit words. This bit is set if
+// the symbol is hidden and can only be seen when referenced using an
+// explicit version number. This is a GNU extension.
+
+const int VERSYM_HIDDEN = 0x8000;
+
+// This is the mask for the rest of the data in a word read from a
+// SHT_GNU_versym section.
+
+const int VERSYM_VERSION = 0x7fff;
+
+} // End namespace elfcpp.
+
+// Include internal details after defining the types.
+#include "elfcpp_internal.h"
+
+namespace elfcpp
+{
+
+// The offset of the ELF file header in the ELF file.
+
+const int file_header_offset = 0;
+
+// ELF structure sizes.
+
+template<int size>
+struct Elf_sizes
+{
+ // Size of ELF file header.
+ static const int ehdr_size = sizeof(internal::Ehdr_data<size>);
+ // Size of ELF segment header.
+ static const int phdr_size = sizeof(internal::Phdr_data<size>);
+ // Size of ELF section header.
+ static const int shdr_size = sizeof(internal::Shdr_data<size>);
+ // Size of ELF symbol table entry.
+ static const int sym_size = sizeof(internal::Sym_data<size>);
+ // Sizes of ELF reloc entries.
+ static const int rel_size = sizeof(internal::Rel_data<size>);
+ static const int rela_size = sizeof(internal::Rela_data<size>);
+ // Size of ELF dynamic entry.
+ static const int dyn_size = sizeof(internal::Dyn_data<size>);
+ // Size of ELF version structures.
+ static const int verdef_size = sizeof(internal::Verdef_data);
+ static const int verdaux_size = sizeof(internal::Verdaux_data);
+ static const int verneed_size = sizeof(internal::Verneed_data);
+ static const int vernaux_size = sizeof(internal::Vernaux_data);
+};
+
+// Accessor class for the ELF file header.
+
+template<int size, bool big_endian>
+class Ehdr
+{
+ public:
+ Ehdr(const unsigned char* p)
+ : p_(reinterpret_cast<const internal::Ehdr_data<size>*>(p))
+ { }
+
+ template<typename File>
+ Ehdr(File* file, typename File::Location loc)
+ : p_(reinterpret_cast<const internal::Ehdr_data<size>*>(
+ file->view(loc.file_offset, loc.data_size).data()))
+ { }
+
+ const unsigned char*
+ get_e_ident() const
+ { return this->p_->e_ident; }
+
+ Elf_Half
+ get_e_type() const
+ { return Convert<16, big_endian>::convert_host(this->p_->e_type); }
+
+ Elf_Half
+ get_e_machine() const
+ { return Convert<16, big_endian>::convert_host(this->p_->e_machine); }
+
+ Elf_Word
+ get_e_version() const
+ { return Convert<32, big_endian>::convert_host(this->p_->e_version); }
+
+ typename Elf_types<size>::Elf_Addr
+ get_e_entry() const
+ { return Convert<size, big_endian>::convert_host(this->p_->e_entry); }
+
+ typename Elf_types<size>::Elf_Off
+ get_e_phoff() const
+ { return Convert<size, big_endian>::convert_host(this->p_->e_phoff); }
+
+ typename Elf_types<size>::Elf_Off
+ get_e_shoff() const
+ { return Convert<size, big_endian>::convert_host(this->p_->e_shoff); }
+
+ Elf_Word
+ get_e_flags() const
+ { return Convert<32, big_endian>::convert_host(this->p_->e_flags); }
+
+ Elf_Half
+ get_e_ehsize() const
+ { return Convert<16, big_endian>::convert_host(this->p_->e_ehsize); }
+
+ Elf_Half
+ get_e_phentsize() const
+ { return Convert<16, big_endian>::convert_host(this->p_->e_phentsize); }
+
+ Elf_Half
+ get_e_phnum() const
+ { return Convert<16, big_endian>::convert_host(this->p_->e_phnum); }
+
+ Elf_Half
+ get_e_shentsize() const
+ { return Convert<16, big_endian>::convert_host(this->p_->e_shentsize); }
+
+ Elf_Half
+ get_e_shnum() const
+ { return Convert<16, big_endian>::convert_host(this->p_->e_shnum); }
+
+ Elf_Half
+ get_e_shstrndx() const
+ { return Convert<16, big_endian>::convert_host(this->p_->e_shstrndx); }
+
+ private:
+ const internal::Ehdr_data<size>* p_;
+};
+
+// Write class for the ELF file header.
+
+template<int size, bool big_endian>
+class Ehdr_write
+{
+ public:
+ Ehdr_write(unsigned char* p)
+ : p_(reinterpret_cast<internal::Ehdr_data<size>*>(p))
+ { }
+
+ void
+ put_e_ident(const unsigned char v[EI_NIDENT]) const
+ { memcpy(this->p_->e_ident, v, EI_NIDENT); }
+
+ void
+ put_e_type(Elf_Half v)
+ { this->p_->e_type = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ put_e_machine(Elf_Half v)
+ { this->p_->e_machine = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ put_e_version(Elf_Word v)
+ { this->p_->e_version = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ put_e_entry(typename Elf_types<size>::Elf_Addr v)
+ { this->p_->e_entry = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_e_phoff(typename Elf_types<size>::Elf_Off v)
+ { this->p_->e_phoff = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_e_shoff(typename Elf_types<size>::Elf_Off v)
+ { this->p_->e_shoff = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_e_flags(Elf_Word v)
+ { this->p_->e_flags = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ put_e_ehsize(Elf_Half v)
+ { this->p_->e_ehsize = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ put_e_phentsize(Elf_Half v)
+ { this->p_->e_phentsize = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ put_e_phnum(Elf_Half v)
+ { this->p_->e_phnum = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ put_e_shentsize(Elf_Half v)
+ { this->p_->e_shentsize = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ put_e_shnum(Elf_Half v)
+ { this->p_->e_shnum = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ put_e_shstrndx(Elf_Half v)
+ { this->p_->e_shstrndx = Convert<16, big_endian>::convert_host(v); }
+
+ private:
+ internal::Ehdr_data<size>* p_;
+};
+
+// Accessor class for an ELF section header.
+
+template<int size, bool big_endian>
+class Shdr
+{
+ public:
+ Shdr(const unsigned char* p)
+ : p_(reinterpret_cast<const internal::Shdr_data<size>*>(p))
+ { }
+
+ template<typename File>
+ Shdr(File* file, typename File::Location loc)
+ : p_(reinterpret_cast<const internal::Shdr_data<size>*>(
+ file->view(loc.file_offset, loc.data_size).data()))
+ { }
+
+ Elf_Word
+ get_sh_name() const
+ { return Convert<32, big_endian>::convert_host(this->p_->sh_name); }
+
+ Elf_Word
+ get_sh_type() const
+ { return Convert<32, big_endian>::convert_host(this->p_->sh_type); }
+
+ typename Elf_types<size>::Elf_WXword
+ get_sh_flags() const
+ { return Convert<size, big_endian>::convert_host(this->p_->sh_flags); }
+
+ typename Elf_types<size>::Elf_Addr
+ get_sh_addr() const
+ { return Convert<size, big_endian>::convert_host(this->p_->sh_addr); }
+
+ typename Elf_types<size>::Elf_Off
+ get_sh_offset() const
+ { return Convert<size, big_endian>::convert_host(this->p_->sh_offset); }
+
+ typename Elf_types<size>::Elf_WXword
+ get_sh_size() const
+ { return Convert<size, big_endian>::convert_host(this->p_->sh_size); }
+
+ Elf_Word
+ get_sh_link() const
+ { return Convert<32, big_endian>::convert_host(this->p_->sh_link); }
+
+ Elf_Word
+ get_sh_info() const
+ { return Convert<32, big_endian>::convert_host(this->p_->sh_info); }
+
+ typename Elf_types<size>::Elf_WXword
+ get_sh_addralign() const
+ { return
+ Convert<size, big_endian>::convert_host(this->p_->sh_addralign); }
+
+ typename Elf_types<size>::Elf_WXword
+ get_sh_entsize() const
+ { return Convert<size, big_endian>::convert_host(this->p_->sh_entsize); }
+
+ private:
+ const internal::Shdr_data<size>* p_;
+};
+
+// Write class for an ELF section header.
+
+template<int size, bool big_endian>
+class Shdr_write
+{
+ public:
+ Shdr_write(unsigned char* p)
+ : p_(reinterpret_cast<internal::Shdr_data<size>*>(p))
+ { }
+
+ void
+ put_sh_name(Elf_Word v)
+ { this->p_->sh_name = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ put_sh_type(Elf_Word v)
+ { this->p_->sh_type = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ put_sh_flags(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->sh_flags = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_sh_addr(typename Elf_types<size>::Elf_Addr v)
+ { this->p_->sh_addr = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_sh_offset(typename Elf_types<size>::Elf_Off v)
+ { this->p_->sh_offset = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_sh_size(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->sh_size = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_sh_link(Elf_Word v)
+ { this->p_->sh_link = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ put_sh_info(Elf_Word v)
+ { this->p_->sh_info = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ put_sh_addralign(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->sh_addralign = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_sh_entsize(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->sh_entsize = Convert<size, big_endian>::convert_host(v); }
+
+ private:
+ internal::Shdr_data<size>* p_;
+};
+
+// Accessor class for an ELF segment header.
+
+template<int size, bool big_endian>
+class Phdr
+{
+ public:
+ Phdr(const unsigned char* p)
+ : p_(reinterpret_cast<const internal::Phdr_data<size>*>(p))
+ { }
+
+ template<typename File>
+ Phdr(File* file, typename File::Location loc)
+ : p_(reinterpret_cast<internal::Phdr_data<size>*>(
+ file->view(loc.file_offset, loc.data_size).data()))
+ { }
+
+ Elf_Word
+ get_p_type() const
+ { return Convert<32, big_endian>::convert_host(this->p_->p_type); }
+
+ typename Elf_types<size>::Elf_Off
+ get_p_offset() const
+ { return Convert<size, big_endian>::convert_host(this->p_->p_offset); }
+
+ typename Elf_types<size>::Elf_Addr
+ get_p_vaddr() const
+ { return Convert<size, big_endian>::convert_host(this->p_->p_vaddr); }
+
+ typename Elf_types<size>::Elf_Addr
+ get_p_paddr() const
+ { return Convert<size, big_endian>::convert_host(this->p_->p_paddr); }
+
+ typename Elf_types<size>::Elf_WXword
+ get_p_filesz() const
+ { return Convert<size, big_endian>::convert_host(this->p_->p_filesz); }
+
+ typename Elf_types<size>::Elf_WXword
+ get_p_memsz() const
+ { return Convert<size, big_endian>::convert_host(this->p_->p_memsz); }
+
+ Elf_Word
+ get_p_flags() const
+ { return Convert<32, big_endian>::convert_host(this->p_->p_flags); }
+
+ typename Elf_types<size>::Elf_WXword
+ get_p_align() const
+ { return Convert<size, big_endian>::convert_host(this->p_->p_align); }
+
+ private:
+ const internal::Phdr_data<size>* p_;
+};
+
+// Write class for an ELF segment header.
+
+template<int size, bool big_endian>
+class Phdr_write
+{
+ public:
+ Phdr_write(unsigned char* p)
+ : p_(reinterpret_cast<internal::Phdr_data<size>*>(p))
+ { }
+
+ void
+ put_p_type(Elf_Word v)
+ { this->p_->p_type = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ put_p_offset(typename Elf_types<size>::Elf_Off v)
+ { this->p_->p_offset = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_p_vaddr(typename Elf_types<size>::Elf_Addr v)
+ { this->p_->p_vaddr = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_p_paddr(typename Elf_types<size>::Elf_Addr v)
+ { this->p_->p_paddr = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_p_filesz(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->p_filesz = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_p_memsz(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->p_memsz = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_p_flags(Elf_Word v)
+ { this->p_->p_flags = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ put_p_align(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->p_align = Convert<size, big_endian>::convert_host(v); }
+
+ private:
+ internal::Phdr_data<size>* p_;
+};
+
+// Accessor class for an ELF symbol table entry.
+
+template<int size, bool big_endian>
+class Sym
+{
+ public:
+ Sym(const unsigned char* p)
+ : p_(reinterpret_cast<const internal::Sym_data<size>*>(p))
+ { }
+
+ template<typename File>
+ Sym(File* file, typename File::Location loc)
+ : p_(reinterpret_cast<const internal::Sym_data<size>*>(
+ file->view(loc.file_offset, loc.data_size).data()))
+ { }
+
+ Elf_Word
+ get_st_name() const
+ { return Convert<32, big_endian>::convert_host(this->p_->st_name); }
+
+ typename Elf_types<size>::Elf_Addr
+ get_st_value() const
+ { return Convert<size, big_endian>::convert_host(this->p_->st_value); }
+
+ typename Elf_types<size>::Elf_WXword
+ get_st_size() const
+ { return Convert<size, big_endian>::convert_host(this->p_->st_size); }
+
+ unsigned char
+ get_st_info() const
+ { return this->p_->st_info; }
+
+ STB
+ get_st_bind() const
+ { return elf_st_bind(this->get_st_info()); }
+
+ STT
+ get_st_type() const
+ { return elf_st_type(this->get_st_info()); }
+
+ unsigned char
+ get_st_other() const
+ { return this->p_->st_other; }
+
+ STV
+ get_st_visibility() const
+ { return elf_st_visibility(this->get_st_other()); }
+
+ unsigned char
+ get_st_nonvis() const
+ { return elf_st_nonvis(this->get_st_other()); }
+
+ Elf_Half
+ get_st_shndx() const
+ { return Convert<16, big_endian>::convert_host(this->p_->st_shndx); }
+
+ private:
+ const internal::Sym_data<size>* p_;
+};
+
+// Writer class for an ELF symbol table entry.
+
+template<int size, bool big_endian>
+class Sym_write
+{
+ public:
+ Sym_write(unsigned char* p)
+ : p_(reinterpret_cast<internal::Sym_data<size>*>(p))
+ { }
+
+ void
+ put_st_name(Elf_Word v)
+ { this->p_->st_name = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ put_st_value(typename Elf_types<size>::Elf_Addr v)
+ { this->p_->st_value = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_st_size(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->st_size = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_st_info(unsigned char v)
+ { this->p_->st_info = v; }
+
+ void
+ put_st_info(STB bind, STT type)
+ { this->p_->st_info = elf_st_info(bind, type); }
+
+ void
+ put_st_other(unsigned char v)
+ { this->p_->st_other = v; }
+
+ void
+ put_st_other(STV vis, unsigned char nonvis)
+ { this->p_->st_other = elf_st_other(vis, nonvis); }
+
+ void
+ put_st_shndx(Elf_Half v)
+ { this->p_->st_shndx = Convert<16, big_endian>::convert_host(v); }
+
+ Sym<size, big_endian>
+ sym()
+ { return Sym<size, big_endian>(reinterpret_cast<unsigned char*>(this->p_)); }
+
+ private:
+ internal::Sym_data<size>* p_;
+};
+
+// Accessor classes for an ELF REL relocation entry.
+
+template<int size, bool big_endian>
+class Rel
+{
+ public:
+ Rel(const unsigned char* p)
+ : p_(reinterpret_cast<const internal::Rel_data<size>*>(p))
+ { }
+
+ template<typename File>
+ Rel(File* file, typename File::Location loc)
+ : p_(reinterpret_cast<const internal::Rel_data<size>*>(
+ file->view(loc.file_offset, loc.data_size).data()))
+ { }
+
+ typename Elf_types<size>::Elf_Addr
+ get_r_offset() const
+ { return Convert<size, big_endian>::convert_host(this->p_->r_offset); }
+
+ typename Elf_types<size>::Elf_WXword
+ get_r_info() const
+ { return Convert<size, big_endian>::convert_host(this->p_->r_info); }
+
+ private:
+ const internal::Rel_data<size>* p_;
+};
+
+// Writer class for an ELF Rel relocation.
+
+template<int size, bool big_endian>
+class Rel_write
+{
+ public:
+ Rel_write(unsigned char* p)
+ : p_(reinterpret_cast<internal::Rel_data<size>*>(p))
+ { }
+
+ void
+ put_r_offset(typename Elf_types<size>::Elf_Addr v)
+ { this->p_->r_offset = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_r_info(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->r_info = Convert<size, big_endian>::convert_host(v); }
+
+ private:
+ internal::Rel_data<size>* p_;
+};
+
+// Accessor class for an ELF Rela relocation.
+
+template<int size, bool big_endian>
+class Rela
+{
+ public:
+ Rela(const unsigned char* p)
+ : p_(reinterpret_cast<const internal::Rela_data<size>*>(p))
+ { }
+
+ template<typename File>
+ Rela(File* file, typename File::Location loc)
+ : p_(reinterpret_cast<const internal::Rela_data<size>*>(
+ file->view(loc.file_offset, loc.data_size).data()))
+ { }
+
+ typename Elf_types<size>::Elf_Addr
+ get_r_offset() const
+ { return Convert<size, big_endian>::convert_host(this->p_->r_offset); }
+
+ typename Elf_types<size>::Elf_WXword
+ get_r_info() const
+ { return Convert<size, big_endian>::convert_host(this->p_->r_info); }
+
+ typename Elf_types<size>::Elf_Swxword
+ get_r_addend() const
+ { return Convert<size, big_endian>::convert_host(this->p_->r_addend); }
+
+ private:
+ const internal::Rela_data<size>* p_;
+};
+
+// Writer class for an ELF Rela relocation.
+
+template<int size, bool big_endian>
+class Rela_write
+{
+ public:
+ Rela_write(unsigned char* p)
+ : p_(reinterpret_cast<internal::Rela_data<size>*>(p))
+ { }
+
+ void
+ put_r_offset(typename Elf_types<size>::Elf_Addr v)
+ { this->p_->r_offset = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_r_info(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->r_info = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_r_addend(typename Elf_types<size>::Elf_Swxword v)
+ { this->p_->r_addend = Convert<size, big_endian>::convert_host(v); }
+
+ private:
+ internal::Rela_data<size>* p_;
+};
+
+// Accessor classes for entries in the ELF SHT_DYNAMIC section aka
+// PT_DYNAMIC segment.
+
+template<int size, bool big_endian>
+class Dyn
+{
+ public:
+ Dyn(const unsigned char* p)
+ : p_(reinterpret_cast<const internal::Dyn_data<size>*>(p))
+ { }
+
+ template<typename File>
+ Dyn(File* file, typename File::Location loc)
+ : p_(reinterpret_cast<const internal::Dyn_data<size>*>(
+ file->view(loc.file_offset, loc.data_size).data()))
+ { }
+
+ typename Elf_types<size>::Elf_Swxword
+ get_d_tag() const
+ { return Convert<size, big_endian>::convert_host(this->p_->d_tag); }
+
+ typename Elf_types<size>::Elf_WXword
+ get_d_val() const
+ { return Convert<size, big_endian>::convert_host(this->p_->d_val); }
+
+ typename Elf_types<size>::Elf_Addr
+ get_d_ptr() const
+ { return Convert<size, big_endian>::convert_host(this->p_->d_val); }
+
+ private:
+ const internal::Dyn_data<size>* p_;
+};
+
+// Write class for an entry in the SHT_DYNAMIC section.
+
+template<int size, bool big_endian>
+class Dyn_write
+{
+ public:
+ Dyn_write(unsigned char* p)
+ : p_(reinterpret_cast<internal::Dyn_data<size>*>(p))
+ { }
+
+ void
+ put_d_tag(typename Elf_types<size>::Elf_Swxword v)
+ { this->p_->d_tag = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_d_val(typename Elf_types<size>::Elf_WXword v)
+ { this->p_->d_val = Convert<size, big_endian>::convert_host(v); }
+
+ void
+ put_d_ptr(typename Elf_types<size>::Elf_Addr v)
+ { this->p_->d_val = Convert<size, big_endian>::convert_host(v); }
+
+ private:
+ internal::Dyn_data<size>* p_;
+};
+
+// Accessor classes for entries in the ELF SHT_GNU_verdef section.
+
+template<int size, bool big_endian>
+class Verdef
+{
+ public:
+ Verdef(const unsigned char* p)
+ : p_(reinterpret_cast<const internal::Verdef_data*>(p))
+ { }
+
+ template<typename File>
+ Verdef(File* file, typename File::Location loc)
+ : p_(reinterpret_cast<const internal::Verdef_data*>(
+ file->view(loc.file_offset, loc.data_size).data()))
+ { }
+
+ Elf_Half
+ get_vd_version() const
+ { return Convert<16, big_endian>::convert_host(this->p_->vd_version); }
+
+ Elf_Half
+ get_vd_flags() const
+ { return Convert<16, big_endian>::convert_host(this->p_->vd_flags); }
+
+ Elf_Half
+ get_vd_ndx() const
+ { return Convert<16, big_endian>::convert_host(this->p_->vd_ndx); }
+
+ Elf_Half
+ get_vd_cnt() const
+ { return Convert<16, big_endian>::convert_host(this->p_->vd_cnt); }
+
+ Elf_Word
+ get_vd_hash() const
+ { return Convert<32, big_endian>::convert_host(this->p_->vd_hash); }
+
+ Elf_Word
+ get_vd_aux() const
+ { return Convert<32, big_endian>::convert_host(this->p_->vd_aux); }
+
+ Elf_Word
+ get_vd_next() const
+ { return Convert<32, big_endian>::convert_host(this->p_->vd_next); }
+
+ private:
+ const internal::Verdef_data* p_;
+};
+
+template<int size, bool big_endian>
+class Verdef_write
+{
+ public:
+ Verdef_write(unsigned char* p)
+ : p_(reinterpret_cast<internal::Verdef_data*>(p))
+ { }
+
+ void
+ set_vd_version(Elf_Half v)
+ { this->p_->vd_version = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ set_vd_flags(Elf_Half v)
+ { this->p_->vd_flags = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ set_vd_ndx(Elf_Half v)
+ { this->p_->vd_ndx = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ set_vd_cnt(Elf_Half v)
+ { this->p_->vd_cnt = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ set_vd_hash(Elf_Word v)
+ { this->p_->vd_hash = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ set_vd_aux(Elf_Word v)
+ { this->p_->vd_aux = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ set_vd_next(Elf_Word v)
+ { this->p_->vd_next = Convert<32, big_endian>::convert_host(v); }
+
+ private:
+ internal::Verdef_data* p_;
+};
+
+// Accessor classes for auxiliary entries in the ELF SHT_GNU_verdef
+// section.
+
+template<int size, bool big_endian>
+class Verdaux
+{
+ public:
+ Verdaux(const unsigned char* p)
+ : p_(reinterpret_cast<const internal::Verdaux_data*>(p))
+ { }
+
+ template<typename File>
+ Verdaux(File* file, typename File::Location loc)
+ : p_(reinterpret_cast<const internal::Verdaux_data*>(
+ file->view(loc.file_offset, loc.data_size).data()))
+ { }
+
+ Elf_Word
+ get_vda_name() const
+ { return Convert<32, big_endian>::convert_host(this->p_->vda_name); }
+
+ Elf_Word
+ get_vda_next() const
+ { return Convert<32, big_endian>::convert_host(this->p_->vda_next); }
+
+ private:
+ const internal::Verdaux_data* p_;
+};
+
+template<int size, bool big_endian>
+class Verdaux_write
+{
+ public:
+ Verdaux_write(unsigned char* p)
+ : p_(reinterpret_cast<internal::Verdaux_data*>(p))
+ { }
+
+ void
+ set_vda_name(Elf_Word v)
+ { this->p_->vda_name = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ set_vda_next(Elf_Word v)
+ { this->p_->vda_next = Convert<32, big_endian>::convert_host(v); }
+
+ private:
+ internal::Verdaux_data* p_;
+};
+
+// Accessor classes for entries in the ELF SHT_GNU_verneed section.
+
+template<int size, bool big_endian>
+class Verneed
+{
+ public:
+ Verneed(const unsigned char* p)
+ : p_(reinterpret_cast<const internal::Verneed_data*>(p))
+ { }
+
+ template<typename File>
+ Verneed(File* file, typename File::Location loc)
+ : p_(reinterpret_cast<const internal::Verneed_data*>(
+ file->view(loc.file_offset, loc.data_size).data()))
+ { }
+
+ Elf_Half
+ get_vn_version() const
+ { return Convert<16, big_endian>::convert_host(this->p_->vn_version); }
+
+ Elf_Half
+ get_vn_cnt() const
+ { return Convert<16, big_endian>::convert_host(this->p_->vn_cnt); }
+
+ Elf_Word
+ get_vn_file() const
+ { return Convert<32, big_endian>::convert_host(this->p_->vn_file); }
+
+ Elf_Word
+ get_vn_aux() const
+ { return Convert<32, big_endian>::convert_host(this->p_->vn_aux); }
+
+ Elf_Word
+ get_vn_next() const
+ { return Convert<32, big_endian>::convert_host(this->p_->vn_next); }
+
+ private:
+ const internal::Verneed_data* p_;
+};
+
+template<int size, bool big_endian>
+class Verneed_write
+{
+ public:
+ Verneed_write(unsigned char* p)
+ : p_(reinterpret_cast<internal::Verneed_data*>(p))
+ { }
+
+ void
+ set_vn_version(Elf_Half v)
+ { this->p_->vn_version = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ set_vn_cnt(Elf_Half v)
+ { this->p_->vn_cnt = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ set_vn_file(Elf_Word v)
+ { this->p_->vn_file = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ set_vn_aux(Elf_Word v)
+ { this->p_->vn_aux = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ set_vn_next(Elf_Word v)
+ { this->p_->vn_next = Convert<32, big_endian>::convert_host(v); }
+
+ private:
+ internal::Verneed_data* p_;
+};
+
+// Accessor classes for auxiliary entries in the ELF SHT_GNU_verneed
+// section.
+
+template<int size, bool big_endian>
+class Vernaux
+{
+ public:
+ Vernaux(const unsigned char* p)
+ : p_(reinterpret_cast<const internal::Vernaux_data*>(p))
+ { }
+
+ template<typename File>
+ Vernaux(File* file, typename File::Location loc)
+ : p_(reinterpret_cast<const internal::Vernaux_data*>(
+ file->view(loc.file_offset, loc.data_size).data()))
+ { }
+
+ Elf_Word
+ get_vna_hash() const
+ { return Convert<32, big_endian>::convert_host(this->p_->vna_hash); }
+
+ Elf_Half
+ get_vna_flags() const
+ { return Convert<16, big_endian>::convert_host(this->p_->vna_flags); }
+
+ Elf_Half
+ get_vna_other() const
+ { return Convert<16, big_endian>::convert_host(this->p_->vna_other); }
+
+ Elf_Word
+ get_vna_name() const
+ { return Convert<32, big_endian>::convert_host(this->p_->vna_name); }
+
+ Elf_Word
+ get_vna_next() const
+ { return Convert<32, big_endian>::convert_host(this->p_->vna_next); }
+
+ private:
+ const internal::Vernaux_data* p_;
+};
+
+template<int size, bool big_endian>
+class Vernaux_write
+{
+ public:
+ Vernaux_write(unsigned char* p)
+ : p_(reinterpret_cast<internal::Vernaux_data*>(p))
+ { }
+
+ void
+ set_vna_hash(Elf_Word v)
+ { this->p_->vna_hash = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ set_vna_flags(Elf_Half v)
+ { this->p_->vna_flags = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ set_vna_other(Elf_Half v)
+ { this->p_->vna_other = Convert<16, big_endian>::convert_host(v); }
+
+ void
+ set_vna_name(Elf_Word v)
+ { this->p_->vna_name = Convert<32, big_endian>::convert_host(v); }
+
+ void
+ set_vna_next(Elf_Word v)
+ { this->p_->vna_next = Convert<32, big_endian>::convert_host(v); }
+
+ private:
+ internal::Vernaux_data* p_;
+};
+
+} // End namespace elfcpp.
+
+#endif // !defined(ELFPCP_H)
diff --git a/bfd/doc/elfcode.texi b/elfcpp/elfcpp_config.h
index e69de29bb2d1..e69de29bb2d1 100644
--- a/bfd/doc/elfcode.texi
+++ b/elfcpp/elfcpp_config.h
diff --git a/elfcpp/elfcpp_file.h b/elfcpp/elfcpp_file.h
new file mode 100644
index 000000000000..c9563eeed74f
--- /dev/null
+++ b/elfcpp/elfcpp_file.h
@@ -0,0 +1,278 @@
+// elfcpp_file.h -- file access for elfcpp -*- C++ -*-
+
+// This header file defines the class Elf_file which can be used to
+// read useful data from an ELF file. The functions here are all
+// templates which take a file interface object as a parameter. This
+// type must have a subtype View. This type must support two methods:
+// View view(off_t file_offset, off_t data_size)
+// returns a View for the specified part of the file.
+// void error(const char* printf_format, ...)
+// prints an error message and does not return. The subtype View must
+// support a method
+// const unsigned char* data()
+// which returns a pointer to a buffer containing the requested data.
+// This general interface is used to read data from the file. Objects
+// of type View will never survive longer than the elfcpp function.
+
+// Some of these functions must return a reference to part of the
+// file. To use these, the file interface must support a subtype
+// Location:
+// Location(off_t file_offset, off_t data_size)
+// To use this in conjunction with the accessors types Shdr, etc., the
+// file interface should support an overload of view:
+// View view(Location)
+// This permits writing
+// elfcpp::Shdr shdr(file, ef.section_header(n));
+
+#ifndef ELFPCP_FILE_H
+#define ELFCPP_FILE_H
+
+#include <string>
+#include <cstring>
+
+namespace elfcpp
+{
+
+// This object is used to read an ELF file.
+// SIZE: The size of file, 32 or 64.
+// BIG_ENDIAN: Whether the file is in big-endian format.
+// FILE: A file reading type as described above.
+
+template<int size, bool big_endian, typename File>
+class Elf_file
+{
+ private:
+ typedef Elf_file<size, big_endian, File> This;
+
+ public:
+ static const int ehdr_size = Elf_sizes<size>::ehdr_size;
+ static const int phdr_size = Elf_sizes<size>::phdr_size;
+ static const int shdr_size = Elf_sizes<size>::shdr_size;
+ static const int sym_size = Elf_sizes<size>::sym_size;
+ static const int rel_size = Elf_sizes<size>::rel_size;
+ static const int rela_size = Elf_sizes<size>::rela_size;
+
+ typedef Ehdr<size, big_endian> Ef_ehdr;
+ typedef Phdr<size, big_endian> Ef_phdr;
+ typedef Shdr<size, big_endian> Ef_shdr;
+ typedef Sym<size, big_endian> Ef_sym;
+
+ // Construct an Elf_file given an ELF file header.
+ Elf_file(File* file, const Ef_ehdr& ehdr)
+ { this->construct(file, ehdr); }
+
+ // Construct an ELF file.
+ inline
+ Elf_file(File* file);
+
+ // Return the file offset to the section headers.
+ off_t
+ shoff() const
+ { return this->shoff_; }
+
+ // Return the number of sections.
+ unsigned int
+ shnum()
+ {
+ this->initialize_shnum();
+ return this->shnum_;
+ }
+
+ // Return the section index of the section name string table.
+ unsigned int
+ shstrndx()
+ {
+ this->initialize_shnum();
+ return this->shstrndx_;
+ }
+
+ // Return the location of the header of section SHNDX.
+ typename File::Location
+ section_header(unsigned int shndx)
+ {
+ return typename File::Location(this->section_header_offset(shndx),
+ shdr_size);
+ }
+
+ // Return the name of section SHNDX.
+ std::string
+ section_name(unsigned int shndx);
+
+ // Return the location of the contents of section SHNDX.
+ typename File::Location
+ section_contents(unsigned int shndx);
+
+ // Return the flags of section SHNDX.
+ typename Elf_types<size>::Elf_WXword
+ section_flags(unsigned int shndx);
+
+ private:
+ // Shared constructor code.
+ void
+ construct(File* file, const Ef_ehdr& ehdr);
+
+ // Initialize shnum_ and shstrndx_.
+ void
+ initialize_shnum();
+
+ // Return the file offset of the header of section SHNDX.
+ off_t
+ section_header_offset(unsigned int shndx);
+
+ // The file we are reading.
+ File* file_;
+ // The file offset to the section headers.
+ off_t shoff_;
+ // The number of sections.
+ unsigned int shnum_;
+ // The section index of the section name string table.
+ unsigned int shstrndx_;
+};
+
+// Template function definitions.
+
+// Construct an Elf_file given an ELF file header.
+
+template<int size, bool big_endian, typename File>
+void
+Elf_file<size, big_endian, File>::construct(File* file, const Ef_ehdr& ehdr)
+{
+ this->file_ = file;
+ this->shoff_ = ehdr.get_e_shoff();
+ this->shnum_ = ehdr.get_e_shnum();
+ this->shstrndx_ = ehdr.get_e_shstrndx();
+ if (ehdr.get_e_ehsize() != This::ehdr_size)
+ file->error(_("bad e_ehsize (%d != %d)"),
+ ehdr.get_e_ehsize(), This::ehdr_size);
+ if (ehdr.get_e_shentsize() != This::shdr_size)
+ file->error(_("bad e_shentsize (%d != %d)"),
+ ehdr.get_e_shentsize(), This::shdr_size);
+}
+
+// Construct an ELF file.
+
+template<int size, bool big_endian, typename File>
+inline
+Elf_file<size, big_endian, File>::Elf_file(File* file)
+{
+ typename File::View v(file->view(file_header_offset, This::ehdr_size));
+ this->construct(file, Ef_ehdr(v.data()));
+}
+
+// Initialize the shnum_ and shstrndx_ fields, handling overflow.
+
+template<int size, bool big_endian, typename File>
+void
+Elf_file<size, big_endian, File>::initialize_shnum()
+{
+ if ((this->shnum_ == 0 || this->shstrndx_ == SHN_XINDEX)
+ && this->shoff_ != 0)
+ {
+ typename File::View v(this->file_->view(this->shoff_, This::shdr_size));
+ Ef_shdr shdr(v.data());
+ if (this->shnum_ == 0)
+ this->shnum_ = shdr.get_sh_size();
+ if (this->shstrndx_ == SHN_XINDEX)
+ this->shstrndx_ = shdr.get_sh_link();
+ }
+}
+
+// Return the file offset of the section header of section SHNDX.
+
+template<int size, bool big_endian, typename File>
+off_t
+Elf_file<size, big_endian, File>::section_header_offset(unsigned int shndx)
+{
+ if (shndx >= this->shnum())
+ this->file_->error(_("section_header_offset: bad shndx %u >= %u"),
+ shndx, this->shnum());
+ return this->shoff_ + This::shdr_size * shndx;
+}
+
+// Return the name of section SHNDX.
+
+template<int size, bool big_endian, typename File>
+std::string
+Elf_file<size, big_endian, File>::section_name(unsigned int shndx)
+{
+ File* const file = this->file_;
+
+ // Get the section name offset.
+ unsigned int sh_name;
+ {
+ typename File::View v(file->view(this->section_header_offset(shndx),
+ This::shdr_size));
+ Ef_shdr shdr(v.data());
+ sh_name = shdr.get_sh_name();
+ }
+
+ // Get the file offset for the section name string table data.
+ off_t shstr_off;
+ off_t shstr_size;
+ {
+ const unsigned int shstrndx = this->shstrndx_;
+ typename File::View v(file->view(this->section_header_offset(shstrndx),
+ This::shdr_size));
+ Ef_shdr shstr_shdr(v.data());
+ shstr_off = shstr_shdr.get_sh_offset();
+ shstr_size = shstr_shdr.get_sh_size();
+ }
+
+ if (sh_name >= shstr_size)
+ file->error(_("bad section name offset for section %u: %u"),
+ shndx, sh_name);
+
+ typename File::View v(file->view(shstr_off, shstr_size));
+
+ const unsigned char* datau = v.data();
+ const char* data = reinterpret_cast<const char*>(datau);
+ const void* p = ::memchr(data + sh_name, '\0', shstr_size - sh_name);
+ if (p == NULL)
+ file->error(_("missing null terminator for name of section %u"),
+ shndx);
+
+ size_t len = static_cast<const char*>(p) - (data + sh_name);
+
+ return std::string(data + sh_name, len);
+}
+
+// Return the contents of section SHNDX.
+
+template<int size, bool big_endian, typename File>
+typename File::Location
+Elf_file<size, big_endian, File>::section_contents(unsigned int shndx)
+{
+ File* const file = this->file_;
+
+ if (shndx >= this->shnum())
+ file->error(_("section_contents: bad shndx %u >= %u"),
+ shndx, this->shnum());
+
+ typename File::View v(file->view(this->section_header_offset(shndx),
+ This::shdr_size));
+ Ef_shdr shdr(v.data());
+ return typename File::Location(shdr.get_sh_offset(), shdr.get_sh_size());
+}
+
+// Return the section flags of section SHNDX.
+
+template<int size, bool big_endian, typename File>
+typename Elf_types<size>::Elf_WXword
+Elf_file<size, big_endian, File>::section_flags(unsigned int shndx)
+{
+ File* const file = this->file_;
+
+ if (shndx >= this->shnum())
+ file->error(_("section_flags: bad shndx %u >= %u"),
+ shndx, this->shnum());
+
+ typename File::View v(file->view(this->section_header_offset(shndx),
+ This::shdr_size));
+
+ Ef_shdr shdr(v.data());
+ return shdr.get_sh_flags();
+}
+
+} // End namespace elfcpp.
+
+#endif // !defined(ELFCPP_FILE_H)
diff --git a/elfcpp/elfcpp_internal.h b/elfcpp/elfcpp_internal.h
new file mode 100644
index 000000000000..7a2b5d4836bd
--- /dev/null
+++ b/elfcpp/elfcpp_internal.h
@@ -0,0 +1,213 @@
+// elfcpp_internal.h -- internals for elfcpp -*- C++ -*-
+
+// This is included by elfcpp.h, the external interface, but holds
+// information which we want to keep private.
+
+#include "elfcpp_config.h"
+
+#ifndef ELFCPP_INTERNAL_H
+#define ELFCPP_INTERNAL_H
+
+namespace elfcpp
+{
+
+namespace internal
+{
+
+// The ELF file header.
+
+template<int size>
+struct Ehdr_data
+{
+ unsigned char e_ident[EI_NIDENT];
+ Elf_Half e_type;
+ Elf_Half e_machine;
+ Elf_Word e_version;
+ typename Elf_types<size>::Elf_Addr e_entry;
+ typename Elf_types<size>::Elf_Off e_phoff;
+ typename Elf_types<size>::Elf_Off e_shoff;
+ Elf_Word e_flags;
+ Elf_Half e_ehsize;
+ Elf_Half e_phentsize;
+ Elf_Half e_phnum;
+ Elf_Half e_shentsize;
+ Elf_Half e_shnum;
+ Elf_Half e_shstrndx;
+};
+
+// An ELF section header.
+
+template<int size>
+struct Shdr_data
+{
+ Elf_Word sh_name;
+ Elf_Word sh_type;
+ typename Elf_types<size>::Elf_WXword sh_flags;
+ typename Elf_types<size>::Elf_Addr sh_addr;
+ typename Elf_types<size>::Elf_Off sh_offset;
+ typename Elf_types<size>::Elf_WXword sh_size;
+ Elf_Word sh_link;
+ Elf_Word sh_info;
+ typename Elf_types<size>::Elf_WXword sh_addralign;
+ typename Elf_types<size>::Elf_WXword sh_entsize;
+};
+
+// An ELF segment header. We use template specialization for the
+// 32-bit and 64-bit versions because the fields are in a different
+// order.
+
+template<int size>
+struct Phdr_data;
+
+template<>
+struct Phdr_data<32>
+{
+ Elf_Word p_type;
+ Elf_types<32>::Elf_Off p_offset;
+ Elf_types<32>::Elf_Addr p_vaddr;
+ Elf_types<32>::Elf_Addr p_paddr;
+ Elf_Word p_filesz;
+ Elf_Word p_memsz;
+ Elf_Word p_flags;
+ Elf_Word p_align;
+};
+
+template<>
+struct Phdr_data<64>
+{
+ Elf_Word p_type;
+ Elf_Word p_flags;
+ Elf_types<64>::Elf_Off p_offset;
+ Elf_types<64>::Elf_Addr p_vaddr;
+ Elf_types<64>::Elf_Addr p_paddr;
+ Elf_Xword p_filesz;
+ Elf_Xword p_memsz;
+ Elf_Xword p_align;
+};
+
+// An ELF symbol table entry. We use template specialization for the
+// 32-bit and 64-bit versions because the fields are in a different
+// order.
+
+template<int size>
+struct Sym_data;
+
+template<>
+struct Sym_data<32>
+{
+ Elf_Word st_name;
+ Elf_types<32>::Elf_Addr st_value;
+ Elf_Word st_size;
+ unsigned char st_info;
+ unsigned char st_other;
+ Elf_Half st_shndx;
+};
+
+template<>
+struct Sym_data<64>
+{
+ Elf_Word st_name;
+ unsigned char st_info;
+ unsigned char st_other;
+ Elf_Half st_shndx;
+ Elf_types<64>::Elf_Addr st_value;
+ Elf_Xword st_size;
+};
+
+// ELF relocation table entries.
+
+template<int size>
+struct Rel_data
+{
+ typename Elf_types<size>::Elf_Addr r_offset;
+ typename Elf_types<size>::Elf_WXword r_info;
+};
+
+template<int size>
+struct Rela_data
+{
+ typename Elf_types<size>::Elf_Addr r_offset;
+ typename Elf_types<size>::Elf_WXword r_info;
+ typename Elf_types<size>::Elf_Swxword r_addend;
+};
+
+// An entry in the ELF SHT_DYNAMIC section aka PT_DYNAMIC segment.
+
+template<int size>
+struct Dyn_data
+{
+ typename Elf_types<size>::Elf_Swxword d_tag;
+ typename Elf_types<size>::Elf_WXword d_val;
+};
+
+// An entry in a SHT_GNU_verdef section. This structure is the same
+// in 32-bit and 64-bit ELF files.
+
+struct Verdef_data
+{
+ // Version number of structure (VER_DEF_*).
+ Elf_Half vd_version;
+ // Bit flags (VER_FLG_*).
+ Elf_Half vd_flags;
+ // Version index.
+ Elf_Half vd_ndx;
+ // Number of auxiliary Verdaux entries.
+ Elf_Half vd_cnt;
+ // Hash of name.
+ Elf_Word vd_hash;
+ // Byte offset to first Verdaux entry.
+ Elf_Word vd_aux;
+ // Byte offset to next Verdef entry.
+ Elf_Word vd_next;
+};
+
+// An auxiliary entry in a SHT_GNU_verdef section. This structure is
+// the same in 32-bit and 64-bit ELF files.
+
+struct Verdaux_data
+{
+ // Offset in string table of version name.
+ Elf_Word vda_name;
+ // Byte offset to next Verdaux entry.
+ Elf_Word vda_next;
+};
+
+// An entry in a SHT_GNU_verneed section. This structure is the same
+// in 32-bit and 64-bit ELF files.
+
+struct Verneed_data
+{
+ // Version number of structure (VER_NEED_*).
+ Elf_Half vn_version;
+ // Number of auxiliary Vernaux entries.
+ Elf_Half vn_cnt;
+ // Offset in string table of library name.
+ Elf_Word vn_file;
+ // Byte offset to first Vernaux entry.
+ Elf_Word vn_aux;
+ // Byt eoffset to next Verneed entry.
+ Elf_Word vn_next;
+};
+
+// An auxiliary entry in a SHT_GNU_verneed section. This structure is
+// the same in 32-bit and 64-bit ELF files.
+
+struct Vernaux_data
+{
+ // Hash of dependency name.
+ Elf_Word vna_hash;
+ // Bit flags (VER_FLG_*).
+ Elf_Half vna_flags;
+ // Version index used in SHT_GNU_versym entries.
+ Elf_Half vna_other;
+ // Offset in string table of version name.
+ Elf_Word vna_name;
+ // Byte offset to next Vernaux entry.
+ Elf_Word vna_next;
+};
+
+} // End namespace internal.
+
+} // End namespace elfcpp.
+
+#endif // !defined(ELFCPP_INTERNAL_H)
diff --git a/elfcpp/elfcpp_swap.h b/elfcpp/elfcpp_swap.h
new file mode 100644
index 000000000000..71b02eb8d368
--- /dev/null
+++ b/elfcpp/elfcpp_swap.h
@@ -0,0 +1,350 @@
+// elfcpp_swap.h -- Handle swapping for elfcpp -*- C++ -*-
+
+// This header file defines basic template classes to efficiently swap
+// numbers between host form and target form. When the host and
+// target have the same endianness, these turn into no-ops.
+
+#ifndef ELFCPP_SWAP_H
+#define ELFCPP_SWAP_H
+
+#include <stdint.h>
+#include <endian.h>
+#include <byteswap.h>
+
+namespace elfcpp
+{
+
+// Endian simply indicates whether the host is big endian or not.
+
+struct Endian
+{
+ public:
+ // Used for template specializations.
+ static const bool host_big_endian = __BYTE_ORDER == __BIG_ENDIAN;
+};
+
+// Valtype_base is a template based on size (8, 16, 32, 64) which
+// defines the type Valtype as the unsigned integer of the specified
+// size.
+
+template<int size>
+struct Valtype_base;
+
+template<>
+struct Valtype_base<8>
+{
+ typedef unsigned char Valtype;
+};
+
+template<>
+struct Valtype_base<16>
+{
+ typedef uint16_t Valtype;
+};
+
+template<>
+struct Valtype_base<32>
+{
+ typedef uint32_t Valtype;
+};
+
+template<>
+struct Valtype_base<64>
+{
+ typedef uint64_t Valtype;
+};
+
+// Convert_endian is a template based on size and on whether the host
+// and target have the same endianness. It defines the type Valtype
+// as Valtype_base does, and also defines a function convert_host
+// which takes an argument of type Valtype and returns the same value,
+// but swapped if the host and target have different endianness.
+
+template<int size, bool same_endian>
+struct Convert_endian;
+
+template<int size>
+struct Convert_endian<size, true>
+{
+ typedef typename Valtype_base<size>::Valtype Valtype;
+
+ static inline Valtype
+ convert_host(Valtype v)
+ { return v; }
+};
+
+template<>
+struct Convert_endian<8, false>
+{
+ typedef Valtype_base<8>::Valtype Valtype;
+
+ static inline Valtype
+ convert_host(Valtype v)
+ { return v; }
+};
+
+template<>
+struct Convert_endian<16, false>
+{
+ typedef Valtype_base<16>::Valtype Valtype;
+
+ static inline Valtype
+ convert_host(Valtype v)
+ { return bswap_16(v); }
+};
+
+template<>
+struct Convert_endian<32, false>
+{
+ typedef Valtype_base<32>::Valtype Valtype;
+
+ static inline Valtype
+ convert_host(Valtype v)
+ { return bswap_32(v); }
+};
+
+template<>
+struct Convert_endian<64, false>
+{
+ typedef Valtype_base<64>::Valtype Valtype;
+
+ static inline Valtype
+ convert_host(Valtype v)
+ { return bswap_64(v); }
+};
+
+// Convert is a template based on size and on whether the target is
+// big endian. It defines Valtype and convert_host like
+// Convert_endian. That is, it is just like Convert_endian except in
+// the meaning of the second template parameter.
+
+template<int size, bool big_endian>
+struct Convert
+{
+ typedef typename Valtype_base<size>::Valtype Valtype;
+
+ static inline Valtype
+ convert_host(Valtype v)
+ {
+ return Convert_endian<size, big_endian == Endian::host_big_endian>
+ ::convert_host(v);
+ }
+};
+
+// Swap is a template based on size and on whether the target is big
+// endian. It defines the type Valtype and the functions readval and
+// writeval. The functions read and write values of the appropriate
+// size out of buffers, swapping them if necessary. readval and
+// writeval are overloaded to take pointers to the appropriate type or
+// pointers to unsigned char.
+
+template<int size, bool big_endian>
+struct Swap
+{
+ typedef typename Valtype_base<size>::Valtype Valtype;
+
+ static inline Valtype
+ readval(const Valtype* wv)
+ { return Convert<size, big_endian>::convert_host(*wv); }
+
+ static inline void
+ writeval(Valtype* wv, Valtype v)
+ { *wv = Convert<size, big_endian>::convert_host(v); }
+
+ static inline Valtype
+ readval(const unsigned char* wv)
+ { return readval(reinterpret_cast<const Valtype*>(wv)); }
+
+ static inline void
+ writeval(unsigned char* wv, Valtype v)
+ { writeval(reinterpret_cast<Valtype*>(wv), v); }
+};
+
+// We need to specialize the 8-bit version of Swap to avoid
+// conflicting overloads, since both versions of readval and writeval
+// will have the same type parameters.
+
+template<bool big_endian>
+struct Swap<8, big_endian>
+{
+ typedef typename Valtype_base<8>::Valtype Valtype;
+
+ static inline Valtype
+ readval(const Valtype* wv)
+ { return *wv; }
+
+ static inline void
+ writeval(Valtype* wv, Valtype v)
+ { *wv = v; }
+};
+
+// Swap_unaligned is a template based on size and on whether the
+// target is big endian. It defines the type Valtype and the
+// functions readval and writeval. The functions read and write
+// values of the appropriate size out of buffers which may be
+// misaligned.
+
+template<int size, bool big_endian>
+struct Swap_unaligned;
+
+template<bool big_endian>
+struct Swap_unaligned<8, big_endian>
+{
+ typedef typename Valtype_base<8>::Valtype Valtype;
+
+ static inline Valtype
+ readval(const unsigned char* wv)
+ { return *wv; }
+
+ static inline void
+ writeval(unsigned char* wv, Valtype v)
+ { *wv = v; }
+};
+
+template<>
+struct Swap_unaligned<16, false>
+{
+ typedef Valtype_base<16>::Valtype Valtype;
+
+ static inline Valtype
+ readval(const unsigned char* wv)
+ {
+ return (wv[1] << 8) | wv[0];
+ }
+
+ static inline void
+ writeval(unsigned char* wv, Valtype v)
+ {
+ wv[1] = v >> 8;
+ wv[0] = v;
+ }
+};
+
+template<>
+struct Swap_unaligned<16, true>
+{
+ typedef Valtype_base<16>::Valtype Valtype;
+
+ static inline Valtype
+ readval(const unsigned char* wv)
+ {
+ return (wv[0] << 8) | wv[1];
+ }
+
+ static inline void
+ writeval(unsigned char* wv, Valtype v)
+ {
+ wv[0] = v >> 8;
+ wv[1] = v;
+ }
+};
+
+template<>
+struct Swap_unaligned<32, false>
+{
+ typedef Valtype_base<32>::Valtype Valtype;
+
+ static inline Valtype
+ readval(const unsigned char* wv)
+ {
+ return (wv[3] << 24) | (wv[2] << 16) | (wv[1] << 8) | wv[0];
+ }
+
+ static inline void
+ writeval(unsigned char* wv, Valtype v)
+ {
+ wv[3] = v >> 24;
+ wv[2] = v >> 16;
+ wv[1] = v >> 8;
+ wv[0] = v;
+ }
+};
+
+template<>
+struct Swap_unaligned<32, true>
+{
+ typedef Valtype_base<32>::Valtype Valtype;
+
+ static inline Valtype
+ readval(const unsigned char* wv)
+ {
+ return (wv[0] << 24) | (wv[1] << 16) | (wv[2] << 8) | wv[3];
+ }
+
+ static inline void
+ writeval(unsigned char* wv, Valtype v)
+ {
+ wv[0] = v >> 24;
+ wv[1] = v >> 16;
+ wv[2] = v >> 8;
+ wv[3] = v;
+ }
+};
+
+template<>
+struct Swap_unaligned<64, false>
+{
+ typedef Valtype_base<64>::Valtype Valtype;
+
+ static inline Valtype
+ readval(const unsigned char* wv)
+ {
+ return ((static_cast<Valtype>(wv[7]) << 56)
+ | (static_cast<Valtype>(wv[6]) << 48)
+ | (static_cast<Valtype>(wv[5]) << 40)
+ | (static_cast<Valtype>(wv[4]) << 32)
+ | (static_cast<Valtype>(wv[3]) << 24)
+ | (static_cast<Valtype>(wv[2]) << 16)
+ | (static_cast<Valtype>(wv[1]) << 8)
+ | static_cast<Valtype>(wv[0]));
+ }
+
+ static inline void
+ writeval(unsigned char* wv, Valtype v)
+ {
+ wv[7] = v >> 56;
+ wv[6] = v >> 48;
+ wv[5] = v >> 40;
+ wv[4] = v >> 32;
+ wv[3] = v >> 24;
+ wv[2] = v >> 16;
+ wv[1] = v >> 8;
+ wv[0] = v;
+ }
+};
+
+template<>
+struct Swap_unaligned<64, true>
+{
+ typedef Valtype_base<64>::Valtype Valtype;
+
+ static inline Valtype
+ readval(const unsigned char* wv)
+ {
+ return ((static_cast<Valtype>(wv[0]) << 56)
+ | (static_cast<Valtype>(wv[1]) << 48)
+ | (static_cast<Valtype>(wv[2]) << 40)
+ | (static_cast<Valtype>(wv[3]) << 32)
+ | (static_cast<Valtype>(wv[4]) << 24)
+ | (static_cast<Valtype>(wv[5]) << 16)
+ | (static_cast<Valtype>(wv[6]) << 8)
+ | static_cast<Valtype>(wv[7]));
+ }
+
+ static inline void
+ writeval(unsigned char* wv, Valtype v)
+ {
+ wv[7] = v >> 56;
+ wv[6] = v >> 48;
+ wv[5] = v >> 40;
+ wv[4] = v >> 32;
+ wv[3] = v >> 24;
+ wv[2] = v >> 16;
+ wv[1] = v >> 8;
+ wv[0] = v;
+ }
+};
+
+} // End namespace elfcpp.
+
+#endif // !defined(ELFCPP_SWAP_H)
diff --git a/elfcpp/i386.h b/elfcpp/i386.h
new file mode 100644
index 000000000000..01efd87b97ad
--- /dev/null
+++ b/elfcpp/i386.h
@@ -0,0 +1,63 @@
+// i386.h -- ELF definitions specific to EM_386 -*- C++ -*-
+
+#ifndef ELFCPP_I386_H
+#define ELFCPP_I386_H
+
+namespace elfcpp
+{
+
+enum
+{
+ R_386_NONE = 0,
+ R_386_32 = 1,
+ R_386_PC32 = 2,
+ R_386_GOT32 = 3,
+ R_386_PLT32 = 4,
+ R_386_COPY = 5,
+ R_386_GLOB_DAT = 6,
+ R_386_JUMP_SLOT = 7,
+ R_386_RELATIVE = 8,
+ R_386_GOTOFF = 9,
+ R_386_GOTPC = 10,
+ // Used by Sun.
+ R_386_32PLT = 11,
+ // TLS extensions.
+ R_386_TLS_TPOFF = 14,
+ R_386_TLS_IE = 15,
+ R_386_TLS_GOTIE = 16,
+ R_386_TLS_LE = 17,
+ R_386_TLS_GD = 18,
+ R_386_TLS_LDM = 19,
+ // GNU extensions.
+ R_386_16 = 20,
+ R_386_PC16 = 21,
+ R_386_8 = 22,
+ R_386_PC8 = 23,
+ // More TLS relocs.
+ R_386_TLS_GD_32 = 24,
+ R_386_TLS_GD_PUSH = 25,
+ R_386_TLS_GD_CALL = 26,
+ R_386_TLS_GD_POP = 27,
+ R_386_TLS_LDM_32 = 28,
+ R_386_TLS_LDM_PUSH = 29,
+ R_386_TLS_LDM_CALL = 30,
+ R_386_TLS_LDM_POP = 31,
+ R_386_TLS_LDO_32 = 32,
+ R_386_TLS_IE_32 = 33,
+ R_386_TLS_LE_32 = 34,
+ R_386_TLS_DTPMOD32 = 35,
+ R_386_TLS_DTPOFF32 = 36,
+ R_386_TLS_TPOFF32 = 37,
+ R_386_TLS_GOTDESC = 39,
+ R_386_TLS_DESC_CALL = 40,
+ R_386_TLS_DESC = 41,
+ // Used by Intel.
+ R_386_USED_BY_INTEL_200 = 200,
+ // GNU vtable garbage collection extensions.
+ R_386_GNU_VTINHERIT = 250,
+ R_386_GNU_VTENTRY = 251
+};
+
+} // End namespace elfcpp.
+
+#endif // !defined(ELFCPP_I386_H)
diff --git a/etc/ChangeLog b/etc/ChangeLog
index a5959c70a704..42e16c1acd77 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,26 @@
+2007-04-04 Eric Christopher <echristo@apple.com>
+
+ Move from gcc:
+ 2007-04-04 Zack Weinberg <zack@mrtock.ucsd.edu>
+
+ * texi2pod.pl: Correct handling of @itemize with no argument.
+
+ 2007-02-16 Matthias Klose <doko@debian.org>
+
+ * texi2pod.pl: Handle @subsubsection, ignore @anchor.
+
+ 2007-02-06 Richard Sandiford <richard@codesourcery.com>
+
+ * texi2pod.pl: Handle @multitable.
+
+2007-03-27 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in: Add support for "pdf" and "install-pdf" targets.
+
+2006-12-19 Paolo Bonzini <bonzini@gnu.org>
+
+ * configure.texi: Fix botched commit.
+
2006-05-31 Daniel Jacobowitz <dan@codesourcery.com>
* texi2pod.pl: Correct handling of absolute @include.
@@ -16,15 +39,15 @@
2006-02-27 Carlos O'Donell <carlos@codesourcery.com>
- * Makefile.in: TEXI2HTML uses makeinfo. Define
+ * Makefile.in: TEXI2HTML uses makeinfo. Define
HTMLFILES. Add html targets.
- * configure.texi: Use ifnottex. Add alternative
+ * configure.texi: Use ifnottex. Add alternative
image format specifier as jpg.
* standards.texi: Use ifnottex.
2005-10-21 Mark Mitchell <mark@codesourcery.com>
- * texi2pod.pl: Substitue for @value even when part of @include.
+ * texi2pod.pl: Substitue for @value even when part of @include.
2005-10-21 Bob Wilson <bob.wilson@acm.org>
@@ -594,4 +617,3 @@ Mon Nov 16 16:50:43 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
Sun Oct 11 16:05:48 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
* intro.texi: added INFO-DIR-ENTRY
-
diff --git a/etc/Makefile.in b/etc/Makefile.in
index 7d0607d960c8..9642e076c1d1 100644
--- a/etc/Makefile.in
+++ b/etc/Makefile.in
@@ -28,6 +28,7 @@ man9dir = $(mandir)/man9
datarootdir = @datarootdir@
docdir = @docdir@
infodir = @infodir@
+pdfdir = @docdir@
htmldir = @htmldir@
SHELL = /bin/sh
@@ -42,6 +43,9 @@ MAKEINFO = `if [ -f ../texinfo/makeinfo/makeinfo ]; \
TEXI2DVI = `if [ -f ../texinfo/util/texi2dvi ]; \
then echo ../texinfo/util/texi2dvi; \
else echo texi2dvi; fi`
+TEXI2PDF = `if [ -f ../texinfo/util/texi2dvi ]; \
+ then echo "../texinfo/util/texi2dvi --pdf"; \
+ else echo "texi2dvi --pdf"; fi`
TEXI2HTML = `if [ -f ../texinfo/makeinfo/makeinfo ]; \
then echo "../texinfo/makeinfo/makeinfo --html"; \
else echo "makeinfo --html"; fi`
@@ -56,6 +60,7 @@ TEXIDIR = $(srcdir)/../texinfo
INFOFILES = standards.info configure.info
DVIFILES = standards.dvi configure.dvi
+PDFFILES = standards.pdf configure.pdf
HTMLFILES = standards.html configure.html
all: info
@@ -126,6 +131,32 @@ dvi:
fi; \
done
+pdf:
+ for f in $(PDFFILES); do \
+ if test -f $(srcdir)/`echo $$f | sed -e 's/.pdf$$/.texi/'`; then \
+ if $(MAKE) "TEXI2PDF=$(TEXI2PDF)" $$f; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
+ fi; \
+ done
+
+install-pdf: pdf
+ $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(pdfdir)/etc
+ if test ! -f standards.pdf; then cd $(srcdir); fi; \
+ if test -f standards.pdf; then \
+ for i in standards.pdf*; do \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(pdfdir)/etc/$$i; \
+ done; \
+ fi
+ if test ! -f configure.pdf; then cd $(srcdir); fi; \
+ if test -f configure.pdf; then \
+ for i in configure.pdf*; do \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(pdfdir)/etc/$$i; \
+ done; \
+ fi
+
standards.info: $(srcdir)/standards.texi $(srcdir)/make-stds.texi
$(MAKEINFO) --no-split -I$(srcdir) -o standards.info $(srcdir)/standards.texi
@@ -138,6 +169,9 @@ standards.dvi: $(srcdir)/standards.texi
standards.ps: standards.dvi
$(DVIPS) standards.dvi -o standards.ps
+standards.pdf: $(srcdir)/standards.texi
+ TEXINPUTS=$(TEXIDIR):$$TEXINPUTS $(TEXI2PDF) $(srcdir)/standards.texi
+
# makeinfo requires images to be in the current directory.
configure.info: $(srcdir)/configure.texi $(srcdir)/configdev.tin $(srcdir)/configbuild.tin
rm -f configdev.txt configbuild.txt
@@ -166,6 +200,13 @@ configure.ps: configure.dvi $(srcdir)/configdev.ein $(srcdir)/configbuild.ein
$(DVIPS) configure.dvi -o configure.ps
rm -f configdev.eps configbuild.eps
+configure.pdf: $(srcdir)/configure.texi $(srcdir)/configdev.tin $(srcdir)/configbuild.tin $(srcdir)/configdev.ein $(srcdir)/configbuild.ein
+ rm -f configdev.pdf configbuild.pdf
+ epstopdf $(srcdir)/configdev.ein -outfile=configdev.pdf
+ epstopdf $(srcdir)/configbuild.ein -outfile=configbuild.pdf
+ TEXINPUTS=$(TEXIDIR):$$TEXINPUTS $(TEXI2PDF) $(srcdir)/configure.texi
+ rm -f configdev.pdf configbuild.pdf
+
configure.html: $(srcdir)/configure.texi
cp $(srcdir)/configdev.jin configdev.jpg
cp $(srcdir)/configbuild.jin configbuild.jpg
diff --git a/etc/configure.info b/etc/configure.info
deleted file mode 100644
index 78cc7eba30c4..000000000000
--- a/etc/configure.info
+++ /dev/null
@@ -1,2773 +0,0 @@
-This is configure.info, produced by makeinfo version 4.8 from
-.././etc/configure.texi.
-
-INFO-DIR-SECTION GNU admin
-START-INFO-DIR-ENTRY
-* configure: (configure). The GNU configure and build system
-END-INFO-DIR-ENTRY
-
- This file documents the GNU configure and build system.
-
- Copyright (C) 1998 Cygnus Solutions.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Foundation.
-
-
-File: configure.info, Node: Top, Next: Introduction, Up: (dir)
-
-GNU configure and build system
-******************************
-
-The GNU configure and build system.
-
-* Menu:
-
-* Introduction:: Introduction.
-* Getting Started:: Getting Started.
-* Files:: Files.
-* Configuration Names:: Configuration Names.
-* Cross Compilation Tools:: Cross Compilation Tools.
-* Canadian Cross:: Canadian Cross.
-* Cygnus Configure:: Cygnus Configure.
-* Multilibs:: Multilibs.
-* FAQ:: Frequently Asked Questions.
-* Index:: Index.
-
-
-File: configure.info, Node: Introduction, Next: Getting Started, Prev: Top, Up: Top
-
-1 Introduction
-**************
-
-This document describes the GNU configure and build systems. It
-describes how autoconf, automake, libtool, and make fit together. It
-also includes a discussion of the older Cygnus configure system.
-
- This document does not describe in detail how to use each of the
-tools; see the respective manuals for that. Instead, it describes
-which files the developer must write, which files are machine generated
-and how they are generated, and where certain common problems should be
-addressed.
-
- This document draws on several sources, including the autoconf
-manual by David MacKenzie (*note autoconf overview: (autoconf)Top.),
-the automake manual by David MacKenzie and Tom Tromey (*note automake
-overview: (automake)Top.), the libtool manual by Gordon Matzigkeit
-(*note libtool overview: (libtool)Top.), and the Cygnus configure
-manual by K. Richard Pixley.
-
-* Menu:
-
-* Goals:: Goals.
-* Tools:: The tools.
-* History:: History.
-* Building:: Building.
-
-
-File: configure.info, Node: Goals, Next: Tools, Up: Introduction
-
-1.1 Goals
-=========
-
-The GNU configure and build system has two main goals.
-
- The first is to simplify the development of portable programs. The
-system permits the developer to concentrate on writing the program,
-simplifying many details of portability across Unix and even Windows
-systems, and permitting the developer to describe how to build the
-program using simple rules rather than complex Makefiles.
-
- The second is to simplify the building of programs distributed as
-source code. All programs are built using a simple, standardized, two
-step process. The program builder need not install any special tools in
-order to build the program.
-
-
-File: configure.info, Node: Tools, Next: History, Prev: Goals, Up: Introduction
-
-1.2 Tools
-=========
-
-The GNU configure and build system is comprised of several different
-tools. Program developers must build and install all of these tools.
-
- People who just want to build programs from distributed sources
-normally do not need any special tools beyond a Unix shell, a make
-program, and a C compiler.
-
-autoconf
- provides a general portability framework, based on testing the
- features of the host system at build time.
-
-automake
- a system for describing how to build a program, permitting the
- developer to write a simplified `Makefile'.
-
-libtool
- a standardized approach to building shared libraries.
-
-gettext
- provides a framework for translation of text messages into other
- languages; not really discussed in this document.
-
-m4
- autoconf requires the GNU version of m4; the standard Unix m4 does
- not suffice.
-
-perl
- automake requires perl.
-
-
-File: configure.info, Node: History, Next: Building, Prev: Tools, Up: Introduction
-
-1.3 History
-===========
-
-This is a very brief and probably inaccurate history.
-
- As the number of Unix variants increased during the 1980s, it became
-harder to write programs which could run on all variants. While it was
-often possible to use `#ifdef' to identify particular systems,
-developers frequently did not have access to every system, and the
-characteristics of some systems changed from version to version.
-
- By 1992, at least three different approaches had been developed:
- * The Metaconfig program, by Larry Wall, Harlan Stenn, and Raphael
- Manfredi.
-
- * The Cygnus configure script, by K. Richard Pixley, and the gcc
- configure script, by Richard Stallman. These use essentially the
- same approach, and the developers communicated regularly.
-
- * The autoconf program, by David MacKenzie.
-
- The Metaconfig program is still used for Perl and a few other
-programs. It is part of the Dist package. I do not know if it is
-being developed.
-
- In 1994, David MacKenzie and others modified autoconf to incorporate
-all the features of Cygnus configure. Since then, there has been a
-slow but steady conversion of GNU programs from Cygnus configure to
-autoconf. gcc has been converted, eliminating the gcc configure script.
-
- GNU autoconf was regularly maintained until late 1996. As of this
-writing in June, 1998, it has no public maintainer.
-
- Most programs are built using the make program, which requires the
-developer to write Makefiles describing how to build the programs.
-Since most programs are built in pretty much the same way, this led to a
-lot of duplication.
-
- The X Window system is built using the imake tool, which uses a
-database of rules to eliminate the duplication. However, building a
-tool which was developed using imake requires that the builder have
-imake installed, violating one of the goals of the GNU system.
-
- The new BSD make provides a standard library of Makefile fragments,
-which permits developers to write very simple Makefiles. However, this
-requires that the builder install the new BSD make program.
-
- In 1994, David MacKenzie wrote the first version of automake, which
-permitted writing a simple build description which was converted into a
-Makefile which could be used by the standard make program. In 1995, Tom
-Tromey completely rewrote automake in Perl, and he continues to enhance
-it.
-
- Various free packages built libraries, and by around 1995 several
-included support to build shared libraries on various platforms.
-However, there was no consistent approach. In early 1996, Gordon
-Matzigkeit began working on libtool, which provided a standardized
-approach to building shared libraries. This was integrated into
-automake from the start.
-
- The development of automake and libtool was driven by the GNITS
-project, a group of GNU maintainers who designed standardized tools to
-help meet the GNU coding standards.
-
-
-File: configure.info, Node: Building, Prev: History, Up: Introduction
-
-1.4 Building
-============
-
-Most readers of this document should already know how to build a tool by
-running `configure' and `make'. This section may serve as a quick
-introduction or reminder.
-
- Building a tool is normally as simple as running `configure'
-followed by `make'. You should normally run `configure' from an empty
-directory, using some path to refer to the `configure' script in the
-source directory. The directory in which you run `configure' is called
-the "object directory".
-
- In order to use a object directory which is different from the source
-directory, you must be using the GNU version of `make', which has the
-required `VPATH' support. Despite this restriction, using a different
-object directory is highly recommended:
- * It keeps the files generated during the build from cluttering up
- your sources.
-
- * It permits you to remove the built files by simply removing the
- entire build directory.
-
- * It permits you to build from the same sources with several sets of
- configure options simultaneously.
-
- If you don't have GNU `make', you will have to run `configure' in
-the source directory. All GNU packages should support this; in
-particular, GNU packages should not assume the presence of GNU `make'.
-
- After running `configure', you can build the tools by running `make'.
-
- To install the tools, run `make install'. Installing the tools will
-copy the programs and any required support files to the "installation
-directory". The location of the installation directory is controlled
-by `configure' options, as described below.
-
- In the Cygnus tree at present, the info files are built and
-installed as a separate step. To build them, run `make info'. To
-install them, run `make install-info'. The equivalent html files are
-also built and installed in a separate step. To build the html files,
-run `make html'. To install the html files run `make install-html'.
-
- All `configure' scripts support a wide variety of options. The most
-interesting ones are `--with' and `--enable' options which are
-generally specific to particular tools. You can usually use the
-`--help' option to get a list of interesting options for a particular
-configure script.
-
- The only generic options you are likely to use are the `--prefix'
-and `--exec-prefix' options. These options are used to specify the
-installation directory.
-
- The directory named by the `--prefix' option will hold machine
-independent files such as info files.
-
- The directory named by the `--exec-prefix' option, which is normally
-a subdirectory of the `--prefix' directory, will hold machine dependent
-files such as executables.
-
- The default for `--prefix' is `/usr/local'. The default for
-`--exec-prefix' is the value used for `--prefix'.
-
- The convention used in Cygnus releases is to use a `--prefix' option
-of `/usr/cygnus/RELEASE', where RELEASE is the name of the release, and
-to use a `--exec-prefix' option of `/usr/cygnus/RELEASE/H-HOST', where
-HOST is the configuration name of the host system (*note Configuration
-Names::).
-
- Do not use either the source or the object directory as the
-installation directory. That will just lead to confusion.
-
-
-File: configure.info, Node: Getting Started, Next: Files, Prev: Introduction, Up: Top
-
-2 Getting Started
-*****************
-
-To start using the GNU configure and build system with your software
-package, you must write three files, and you must run some tools to
-manually generate additional files.
-
-* Menu:
-
-* Write configure.in:: Write configure.in.
-* Write Makefile.am:: Write Makefile.am.
-* Write acconfig.h:: Write acconfig.h.
-* Generate files:: Generate files.
-* Getting Started Example:: Example.
-
-
-File: configure.info, Node: Write configure.in, Next: Write Makefile.am, Up: Getting Started
-
-2.1 Write configure.in
-======================
-
-You must first write the file `configure.in'. This is an autoconf
-input file, and the autoconf manual describes in detail what this file
-should look like.
-
- You will write tests in your `configure.in' file to check for
-conditions that may change from one system to another, such as the
-presence of particular header files or functions.
-
- For example, not all systems support the `gettimeofday' function.
-If you want to use the `gettimeofday' function when it is available,
-and to use some other function when it is not, you would check for this
-by putting `AC_CHECK_FUNCS(gettimeofday)' in `configure.in'.
-
- When the configure script is run at build time, this will arrange to
-define the preprocessor macro `HAVE_GETTIMEOFDAY' to the value 1 if the
-`gettimeofday' function is available, and to not define the macro at
-all if the function is not available. Your code can then use `#ifdef'
-to test whether it is safe to call `gettimeofday'.
-
- If you have an existing body of code, the `autoscan' program may
-help identify potential portability problems, and hence configure tests
-that you will want to use. *Note Invoking autoscan: (autoconf)Invoking
-autoscan.
-
- Another handy tool for an existing body of code is `ifnames'. This
-will show you all the preprocessor conditionals that the code already
-uses. *Note Invoking ifnames: (autoconf)Invoking ifnames.
-
- Besides the portability tests which are specific to your particular
-package, every `configure.in' file should contain the following macros.
-
-`AC_INIT'
- This macro takes a single argument, which is the name of a file in
- your package. For example, `AC_INIT(foo.c)'.
-
-`AC_PREREQ(VERSION)'
- This macro is optional. It may be used to indicate the version of
- `autoconf' that you are using. This will prevent users from
- running an earlier version of `autoconf' and perhaps getting an
- invalid `configure' script. For example, `AC_PREREQ(2.12)'.
-
-`AM_INIT_AUTOMAKE'
- This macro takes two arguments: the name of the package, and a
- version number. For example, `AM_INIT_AUTOMAKE(foo, 1.0)'. (This
- macro is not needed if you are not using automake).
-
-`AM_CONFIG_HEADER'
- This macro names the header file which will hold the preprocessor
- macro definitions at run time. Normally this should be
- `config.h'. Your sources would then use `#include "config.h"' to
- include it.
-
- This macro may optionally name the input file for that header
- file; by default, this is `config.h.in', but that file name works
- poorly on DOS filesystems. Therefore, it is often better to name
- it explicitly as `config.in'.
-
- This is what you should normally put in `configure.in':
- AM_CONFIG_HEADER(config.h:config.in)
-
- (If you are not using automake, use `AC_CONFIG_HEADER' rather than
- `AM_CONFIG_HEADER').
-
-`AM_MAINTAINER_MODE'
- This macro always appears in Cygnus configure scripts. Other
- programs may or may not use it.
-
- If this macro is used, the `--enable-maintainer-mode' option is
- required to enable automatic rebuilding of generated files used by
- the configure system. This of course requires that developers be
- aware of, and use, that option.
-
- If this macro is not used, then the generated files will always be
- rebuilt automatically. This will cause problems if the wrong
- versions of autoconf, automake, or others are in the builder's
- `PATH'.
-
- (If you are not using automake, you do not need to use this macro).
-
-`AC_EXEEXT'
- Either this macro or `AM_EXEEXT' always appears in Cygnus configure
- files. Other programs may or may not use one of them.
-
- This macro looks for the executable suffix used on the host
- system. On Unix systems, this is the empty string. On Windows
- systems, this is `.exe'. This macro directs automake to use the
- executable suffix as appropriate when creating programs. This
- macro does not take any arguments.
-
- The `AC_EXEEXT' form is new, and is part of a Cygnus patch to
- autoconf to support compiling with Visual C++. Older programs use
- `AM_EXEEXT' instead.
-
- (Programs which do not use automake use neither `AC_EXEEXT' nor
- `AM_EXEEXT').
-
-`AC_PROG_CC'
- If you are writing C code, you will normally want to use this
- macro. It locates the C compiler to use. It does not take any
- arguments.
-
- However, if this `configure.in' file is for a library which is to
- be compiled by a cross compiler which may not fully work, then you
- will not want to use `AC_PROG_CC'. Instead, you will want to use a
- variant which does not call the macro `AC_PROG_CC_WORKS'. Examples
- can be found in various `configure.in' files for libraries that are
- compiled with cross compilers, such as libiberty or libgloss.
- This is essentially a bug in autoconf, and there will probably be
- a better workaround at some point.
-
-`AC_PROG_CXX'
- If you are writing C++ code, you will want to use this macro. It
- locates the C++ compiler to use. It does not take any arguments.
- The same cross compiler comments apply as for `AC_PROG_CC'.
-
-`AM_PROG_LIBTOOL'
- If you want to build libraries, and you want to permit them to be
- shared, or you want to link against libraries which were built
- using libtool, then you will need this macro. This macro is
- required in order to use libtool.
-
- By default, this will cause all libraries to be built as shared
- libraries. To prevent this-to change the default-use
- `AM_DISABLE_SHARED' before `AM_PROG_LIBTOOL'. The configure
- options `--enable-shared' and `--disable-shared' may be used to
- override the default at build time.
-
-`AC_DEFINE(_GNU_SOURCE)'
- GNU packages should normally include this line before any other
- feature tests. This defines the macro `_GNU_SOURCE' when
- compiling, which directs the libc header files to provide the
- standard GNU system interfaces including all GNU extensions. If
- this macro is not defined, certain GNU extensions may not be
- available.
-
-`AC_OUTPUT'
- This macro takes a list of file names which the configure process
- should produce. This is normally a list of one or more `Makefile'
- files in different directories. If your package lives entirely in
- a single directory, you would use simply `AC_OUTPUT(Makefile)'.
- If you also have, for example, a `lib' subdirectory, you would use
- `AC_OUTPUT(Makefile lib/Makefile)'.
-
- If you want to use locally defined macros in your `configure.in'
-file, then you will need to write a `acinclude.m4' file which defines
-them (if not using automake, this file is called `aclocal.m4').
-Alternatively, you can put separate macros in an `m4' subdirectory, and
-put `ACLOCAL_AMFLAGS = -I m4' in your `Makefile.am' file so that the
-`aclocal' program will be able to find them.
-
- The different macro prefixes indicate which tool defines the macro.
-Macros which start with `AC_' are part of autoconf. Macros which start
-with `AM_' are provided by automake or libtool.
-
-
-File: configure.info, Node: Write Makefile.am, Next: Write acconfig.h, Prev: Write configure.in, Up: Getting Started
-
-2.2 Write Makefile.am
-=====================
-
-You must write the file `Makefile.am'. This is an automake input file,
-and the automake manual describes in detail what this file should look
-like.
-
- The automake commands in `Makefile.am' mostly look like variable
-assignments in a `Makefile'. automake recognizes special variable
-names, and automatically add make rules to the output as needed.
-
- There will be one `Makefile.am' file for each directory in your
-package. For each directory with subdirectories, the `Makefile.am'
-file should contain the line
- SUBDIRS = DIR DIR ...
- where each DIR is the name of a subdirectory.
-
- For each `Makefile.am', there should be a corresponding `Makefile'
-in the `AC_OUTPUT' macro in `configure.in'.
-
- Every `Makefile.am' written at Cygnus should contain the line
- AUTOMAKE_OPTIONS = cygnus
- This puts automake into Cygnus mode. See the automake manual for
-details.
-
- You may to include the version number of `automake' that you are
-using on the `AUTOMAKE_OPTIONS' line. For example,
- AUTOMAKE_OPTIONS = cygnus 1.3
- This will prevent users from running an earlier version of
-`automake' and perhaps getting an invalid `Makefile.in'.
-
- If your package builds a program, then in the directory where that
-program is built you will normally want a line like
- bin_PROGRAMS = PROGRAM
- where PROGRAM is the name of the program. You will then want a line
-like
- PROGRAM_SOURCES = FILE FILE ...
- where each FILE is the name of a source file to link into the
-program (e.g., `foo.c').
-
- If your package builds a library, and you do not want the library to
-ever be built as a shared library, then in the directory where that
-library is built you will normally want a line like
- lib_LIBRARIES = libNAME.a
- where `libNAME.a' is the name of the library. You will then want a
-line like
- libNAME_a_SOURCES = FILE FILE ...
- where each FILE is the name of a source file to add to the library.
-
- If your package builds a library, and you want to permit building the
-library as a shared library, then in the directory where that library is
-built you will normally want a line like
- lib_LTLIBRARIES = libNAME.la
- The use of `LTLIBRARIES', and the `.la' extension, indicate a
-library to be built using libtool. As usual, you will then want a line
-like
- libNAME_la_SOURCES = FILE FILE ...
-
- The strings `bin' and `lib' that appear above in `bin_PROGRAMS' and
-`lib_LIBRARIES' are not arbitrary. They refer to particular
-directories, which may be set by the `--bindir' and `--libdir' options
-to `configure'. If those options are not used, the default values are
-based on the `--prefix' or `--exec-prefix' options to `configure'. It
-is possible to use other names if the program or library should be
-installed in some other directory.
-
- The `Makefile.am' file may also contain almost anything that may
-appear in a normal `Makefile'. automake also supports many other
-special variables, as well as conditionals.
-
- See the automake manual for more information.
-
-
-File: configure.info, Node: Write acconfig.h, Next: Generate files, Prev: Write Makefile.am, Up: Getting Started
-
-2.3 Write acconfig.h
-====================
-
-If you are generating a portability header file, (i.e., you are using
-`AM_CONFIG_HEADER' in `configure.in'), then you will have to write a
-`acconfig.h' file. It will have to contain the following lines.
-
- /* Name of package. */
- #undef PACKAGE
-
- /* Version of package. */
- #undef VERSION
-
- This requirement is really a bug in the system, and the requirement
-may be eliminated at some later date.
-
- The `acconfig.h' file will also similar comment and `#undef' lines
-for any unusual macros in the `configure.in' file, including any macro
-which appears in a `AC_DEFINE' macro.
-
- In particular, if you are writing a GNU package and therefore include
-`AC_DEFINE(_GNU_SOURCE)' in `configure.in' as suggested above, you will
-need lines like this in `acconfig.h':
- /* Enable GNU extensions. */
- #undef _GNU_SOURCE
-
- Normally the `autoheader' program will inform you of any such
-requirements by printing an error message when it is run. However, if
-you do anything particular odd in your `configure.in' file, you will
-have to make sure that the right entries appear in `acconfig.h', since
-otherwise the results of the tests may not be available in the
-`config.h' file which your code will use.
-
- (Thee `PACKAGE' and `VERSION' lines are not required if you are not
-using automake, and in that case you may not need a `acconfig.h' file
-at all).
-
-
-File: configure.info, Node: Generate files, Next: Getting Started Example, Prev: Write acconfig.h, Up: Getting Started
-
-2.4 Generate files
-==================
-
-Once you have written `configure.in', `Makefile.am', `acconfig.h', and
-possibly `acinclude.m4', you must use autoconf and automake programs to
-produce the first versions of the generated files. This is done by
-executing the following sequence of commands.
-
- aclocal
- autoconf
- autoheader
- automake
-
- The `aclocal' and `automake' commands are part of the automake
-package, and the `autoconf' and `autoheader' commands are part of the
-autoconf package.
-
- If you are using a `m4' subdirectory for your macros, you will need
-to use the `-I m4' option when you run `aclocal'.
-
- If you are not using the Cygnus tree, use the `-a' option when
-running `automake' command in order to copy the required support files
-into your source directory.
-
- If you are using libtool, you must build and install the libtool
-package with the same `--prefix' and `--exec-prefix' options as you
-used with the autoconf and automake packages. You must do this before
-running any of the above commands. If you are not using the Cygnus
-tree, you will need to run the `libtoolize' program to copy the libtool
-support files into your directory.
-
- Once you have managed to run these commands without getting any
-errors, you should create a new empty directory, and run the `configure'
-script which will have been created by `autoconf' with the
-`--enable-maintainer-mode' option. This will give you a set of
-Makefiles which will include rules to automatically rebuild all the
-generated files.
-
- After doing that, whenever you have changed some of the input files
-and want to regenerated the other files, go to your object directory
-and run `make'. Doing this is more reliable than trying to rebuild the
-files manually, because there are complex order dependencies and it is
-easy to forget something.
-
-
-File: configure.info, Node: Getting Started Example, Prev: Generate files, Up: Getting Started
-
-2.5 Example
-===========
-
-Let's consider a trivial example.
-
- Suppose we want to write a simple version of `touch'. Our program,
-which we will call `poke', will take a single file name argument, and
-use the `utime' system call to set the modification and access times of
-the file to the current time. We want this program to be highly
-portable.
-
- We'll first see what this looks like without using autoconf and
-automake, and then see what it looks like with them.
-
-* Menu:
-
-* Getting Started Example 1:: First Try.
-* Getting Started Example 2:: Second Try.
-* Getting Started Example 3:: Third Try.
-* Generate Files in Example:: Generate Files.
-
-
-File: configure.info, Node: Getting Started Example 1, Next: Getting Started Example 2, Up: Getting Started Example
-
-2.5.1 First Try
----------------
-
-Here is our first try at `poke.c'. Note that we've written it without
-ANSI/ISO C prototypes, since we want it to be highly portable.
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <utime.h>
-
- int
- main (argc, argv)
- int argc;
- char **argv;
- {
- if (argc != 2)
- {
- fprintf (stderr, "Usage: poke file\n");
- exit (1);
- }
-
- if (utime (argv[1], NULL) < 0)
- {
- perror ("utime");
- exit (1);
- }
-
- exit (0);
- }
-
- We also write a simple `Makefile'.
-
- CC = gcc
- CFLAGS = -g -O2
-
- all: poke
-
- poke: poke.o
- $(CC) -o poke $(CFLAGS) $(LDFLAGS) poke.o
-
- So far, so good.
-
- Unfortunately, there are a few problems.
-
- On older Unix systems derived from BSD 4.3, the `utime' system call
-does not accept a second argument of `NULL'. On those systems, we need
-to pass a pointer to `struct utimbuf' structure. Unfortunately, even
-older systems don't define that structure; on those systems, we need to
-pass an array of two `long' values.
-
- The header file `stdlib.h' was invented by ANSI C, and older systems
-don't have a copy. We included it above to get a declaration of `exit'.
-
- We can find some of these portability problems by running
-`autoscan', which will create a `configure.scan' file which we can use
-as a prototype for our `configure.in' file. I won't show the output,
-but it will notice the potential problems with `utime' and `stdlib.h'.
-
- In our `Makefile', we don't provide any way to install the program.
-This doesn't matter much for such a simple example, but a real program
-will need an `install' target. For that matter, we will also want a
-`clean' target.
-
-
-File: configure.info, Node: Getting Started Example 2, Next: Getting Started Example 3, Prev: Getting Started Example 1, Up: Getting Started Example
-
-2.5.2 Second Try
-----------------
-
-Here is our second try at this program.
-
- We modify `poke.c' to use preprocessor macros to control what
-features are available. (I've cheated a bit by using the same macro
-names which autoconf will use).
-
- #include <stdio.h>
-
- #ifdef STDC_HEADERS
- #include <stdlib.h>
- #endif
-
- #include <sys/types.h>
-
- #ifdef HAVE_UTIME_H
- #include <utime.h>
- #endif
-
- #ifndef HAVE_UTIME_NULL
-
- #include <time.h>
-
- #ifndef HAVE_STRUCT_UTIMBUF
-
- struct utimbuf
- {
- long actime;
- long modtime;
- };
-
- #endif
-
- static int
- utime_now (file)
- char *file;
- {
- struct utimbuf now;
-
- now.actime = now.modtime = time (NULL);
- return utime (file, &now);
- }
-
- #define utime(f, p) utime_now (f)
-
- #endif /* HAVE_UTIME_NULL */
-
- int
- main (argc, argv)
- int argc;
- char **argv;
- {
- if (argc != 2)
- {
- fprintf (stderr, "Usage: poke file\n");
- exit (1);
- }
-
- if (utime (argv[1], NULL) < 0)
- {
- perror ("utime");
- exit (1);
- }
-
- exit (0);
- }
-
- Here is the associated `Makefile'. We've added support for the
-preprocessor flags we use. We've also added `install' and `clean'
-targets.
-
- # Set this to your installation directory.
- bindir = /usr/local/bin
-
- # Uncomment this if you have the standard ANSI/ISO C header files.
- # STDC_HDRS = -DSTDC_HEADERS
-
- # Uncomment this if you have utime.h.
- # UTIME_H = -DHAVE_UTIME_H
-
- # Uncomment this if utime (FILE, NULL) works on your system.
- # UTIME_NULL = -DHAVE_UTIME_NULL
-
- # Uncomment this if struct utimbuf is defined in utime.h.
- # UTIMBUF = -DHAVE_STRUCT_UTIMBUF
-
- CC = gcc
- CFLAGS = -g -O2
-
- ALL_CFLAGS = $(STDC_HDRS) $(UTIME_H) $(UTIME_NULL) $(UTIMBUF) $(CFLAGS)
-
- all: poke
-
- poke: poke.o
- $(CC) -o poke $(ALL_CFLAGS) $(LDFLAGS) poke.o
-
- .c.o:
- $(CC) -c $(ALL_CFLAGS) poke.c
-
- install: poke
- cp poke $(bindir)/poke
-
- clean:
- rm poke poke.o
-
- Some problems with this approach should be clear.
-
- Users who want to compile poke will have to know how `utime' works
-on their systems, so that they can uncomment the `Makefile' correctly.
-
- The installation is done using `cp', but many systems have an
-`install' program which may be used, and which supports optional
-features such as stripping debugging information out of the installed
-binary.
-
- The use of `Makefile' variables like `CC', `CFLAGS' and `LDFLAGS'
-follows the requirements of the GNU standards. This is convenient for
-all packages, since it reduces surprises for users. However, it is
-easy to get the details wrong, and wind up with a slightly nonstandard
-distribution.
-
-
-File: configure.info, Node: Getting Started Example 3, Next: Generate Files in Example, Prev: Getting Started Example 2, Up: Getting Started Example
-
-2.5.3 Third Try
----------------
-
-For our third try at this program, we will write a `configure.in'
-script to discover the configuration features on the host system, rather
-than requiring the user to edit the `Makefile'. We will also write a
-`Makefile.am' rather than a `Makefile'.
-
- The only change to `poke.c' is to add a line at the start of the
-file:
- #include "config.h"
-
- The new `configure.in' file is as follows.
-
- AC_INIT(poke.c)
- AM_INIT_AUTOMAKE(poke, 1.0)
- AM_CONFIG_HEADER(config.h:config.in)
- AC_PROG_CC
- AC_HEADER_STDC
- AC_CHECK_HEADERS(utime.h)
- AC_EGREP_HEADER(utimbuf, utime.h, AC_DEFINE(HAVE_STRUCT_UTIMBUF))
- AC_FUNC_UTIME_NULL
- AC_OUTPUT(Makefile)
-
- The first four macros in this file, and the last one, were described
-above; see *Note Write configure.in::. If we omit these macros, then
-when we run `automake' we will get a reminder that we need them.
-
- The other macros are standard autoconf macros.
-
-`AC_HEADER_STDC'
- Check for standard C headers.
-
-`AC_CHECK_HEADERS'
- Check whether a particular header file exists.
-
-`AC_EGREP_HEADER'
- Check for a particular string in a particular header file, in this
- case checking for `utimbuf' in `utime.h'.
-
-`AC_FUNC_UTIME_NULL'
- Check whether `utime' accepts a NULL second argument to set the
- file change time to the current time.
-
- See the autoconf manual for a more complete description.
-
- The new `Makefile.am' file is as follows. Note how simple this is
-compared to our earlier `Makefile'.
-
- bin_PROGRAMS = poke
-
- poke_SOURCES = poke.c
-
- This means that we should build a single program name `poke'. It
-should be installed in the binary directory, which we called `bindir'
-earlier. The program `poke' is built from the source file `poke.c'.
-
- We must also write a `acconfig.h' file. Besides `PACKAGE' and
-`VERSION', which must be mentioned for all packages which use automake,
-we must include `HAVE_STRUCT_UTIMBUF', since we mentioned it in an
-`AC_DEFINE'.
-
- /* Name of package. */
- #undef PACKAGE
-
- /* Version of package. */
- #undef VERSION
-
- /* Whether utime.h defines struct utimbuf. */
- #undef HAVE_STRUCT_UTIMBUF
-
-
-File: configure.info, Node: Generate Files in Example, Prev: Getting Started Example 3, Up: Getting Started Example
-
-2.5.4 Generate Files
---------------------
-
-We must now generate the other files, using the following commands.
-
- aclocal
- autoconf
- autoheader
- automake
-
- When we run `autoheader', it will remind us of any macros we forgot
-to add to `acconfig.h'.
-
- When we run `automake', it will want to add some files to our
-distribution. It will add them automatically if we use the
-`--add-missing' option.
-
- By default, `automake' will run in GNU mode, which means that it
-will want us to create certain additional files; as of this writing, it
-will want `NEWS', `README', `AUTHORS', and `ChangeLog', all of which
-are files which should appear in a standard GNU distribution. We can
-either add those files, or run `automake' with the `--foreign' option.
-
- Running these tools will generate the following files, all of which
-are described in the next chapter.
-
- * `aclocal.m4'
-
- * `configure'
-
- * `config.in'
-
- * `Makefile.in'
-
- * `stamp-h.in'
-
-
-File: configure.info, Node: Files, Next: Configuration Names, Prev: Getting Started, Up: Top
-
-3 Files
-*******
-
-As was seen in the previous chapter, the GNU configure and build system
-uses a number of different files. The developer must write a few files.
-The others are generated by various tools.
-
- The system is rather flexible, and can be used in many different
-ways. In describing the files that it uses, I will describe the common
-case, and mention some other cases that may arise.
-
-* Menu:
-
-* Developer Files:: Developer Files.
-* Build Files:: Build Files.
-* Support Files:: Support Files.
-
-
-File: configure.info, Node: Developer Files, Next: Build Files, Up: Files
-
-3.1 Developer Files
-===================
-
-This section describes the files written or generated by the developer
-of a package.
-
-* Menu:
-
-* Developer Files Picture:: Developer Files Picture.
-* Written Developer Files:: Written Developer Files.
-* Generated Developer Files:: Generated Developer Files.
-
-
-File: configure.info, Node: Developer Files Picture, Next: Written Developer Files, Up: Developer Files
-
-3.1.1 Developer Files Picture
------------------------------
-
-Here is a picture of the files which are written by the developer, the
-generated files which would be included with a complete source
-distribution, and the tools which create those files. The file names
-are plain text and the tool names are enclosed by `*' characters (e.g.,
-`autoheader' is the name of a tool, not the name of a file).
-
- acconfig.h configure.in Makefile.am
- | | |
- | --------------+---------------------- |
- | | | | |
- v v | acinclude.m4 | |
- *autoheader* | | v v
- | | v --->*automake*
- v |--->*aclocal* | |
- config.in | | | v
- | v | Makefile.in
- | aclocal.m4---
- | |
- v v
- *autoconf*
- |
- v
- configure
-
-
-File: configure.info, Node: Written Developer Files, Next: Generated Developer Files, Prev: Developer Files Picture, Up: Developer Files
-
-3.1.2 Written Developer Files
------------------------------
-
-The following files would be written by the developer.
-
-`configure.in'
- This is the configuration script. This script contains
- invocations of autoconf macros. It may also contain ordinary
- shell script code. This file will contain feature tests for
- portability issues. The last thing in the file will normally be
- an `AC_OUTPUT' macro listing which files to create when the
- builder runs the configure script. This file is always required
- when using the GNU configure system. *Note Write configure.in::.
-
-`Makefile.am'
- This is the automake input file. It describes how the code should
- be built. It consists of definitions of automake variables. It
- may also contain ordinary Makefile targets. This file is only
- needed when using automake (newer tools normally use automake, but
- there are still older tools which have not been converted, in
- which the developer writes `Makefile.in' directly). *Note Write
- Makefile.am::.
-
-`acconfig.h'
- When the configure script creates a portability header file, by
- using `AM_CONFIG_HEADER' (or, if not using automake,
- `AC_CONFIG_HEADER'), this file is used to describe macros which are
- not recognized by the `autoheader' command. This is normally a
- fairly uninteresting file, consisting of a collection of `#undef'
- lines with comments. Normally any call to `AC_DEFINE' in
- `configure.in' will require a line in this file. *Note Write
- acconfig.h::.
-
-`acinclude.m4'
- This file is not always required. It defines local autoconf
- macros. These macros may then be used in `configure.in'. If you
- don't need any local autoconf macros, then you don't need this
- file at all. In fact, in general, you never need local autoconf
- macros, since you can put everything in `configure.in', but
- sometimes a local macro is convenient.
-
- Newer tools may omit `acinclude.m4', and instead use a
- subdirectory, typically named `m4', and define `ACLOCAL_AMFLAGS =
- -I m4' in `Makefile.am' to force `aclocal' to look there for macro
- definitions. The macro definitions are then placed in separate
- files in that directory.
-
- The `acinclude.m4' file is only used when using automake; in older
- tools, the developer writes `aclocal.m4' directly, if it is needed.
-
-
-File: configure.info, Node: Generated Developer Files, Prev: Written Developer Files, Up: Developer Files
-
-3.1.3 Generated Developer Files
--------------------------------
-
-The following files would be generated by the developer.
-
- When using automake, these files are normally not generated manually
-after the first time. Instead, the generated `Makefile' contains rules
-to automatically rebuild the files as required. When
-`AM_MAINTAINER_MODE' is used in `configure.in' (the normal case in
-Cygnus code), the automatic rebuilding rules will only be defined if
-you configure using the `--enable-maintainer-mode' option.
-
- When using automatic rebuilding, it is important to ensure that all
-the various tools have been built and installed on your `PATH'. Using
-automatic rebuilding is highly recommended, so much so that I'm not
-going to explain what you have to do if you don't use it.
-
-`configure'
- This is the configure script which will be run when building the
- package. This is generated by `autoconf' from `configure.in' and
- `aclocal.m4'. This is a shell script.
-
-`Makefile.in'
- This is the file which the configure script will turn into the
- `Makefile' at build time. This file is generated by `automake'
- from `Makefile.am'. If you aren't using automake, you must write
- this file yourself. This file is pretty much a normal `Makefile',
- with some configure substitutions for certain variables.
-
-`aclocal.m4'
- This file is created by the `aclocal' program, based on the
- contents of `configure.in' and `acinclude.m4' (or, as noted in the
- description of `acinclude.m4' above, on the contents of an `m4'
- subdirectory). This file contains definitions of autoconf macros
- which `autoconf' will use when generating the file `configure'.
- These autoconf macros may be defined by you in `acinclude.m4' or
- they may be defined by other packages such as automake, libtool or
- gettext. If you aren't using automake, you will normally write
- this file yourself; in that case, if `configure.in' uses only
- standard autoconf macros, this file will not be needed at all.
-
-`config.in'
- This file is created by `autoheader' based on `acconfig.h' and
- `configure.in'. At build time, the configure script will define
- some of the macros in it to create `config.h', which may then be
- included by your program. This permits your C code to use
- preprocessor conditionals to change its behaviour based on the
- characteristics of the host system. This file may also be called
- `config.h.in'.
-
-`stamp.h-in'
- This rather uninteresting file, which I omitted from the picture,
- is generated by `automake'. It always contains the string
- `timestamp'. It is used as a timestamp file indicating whether
- `config.in' is up to date. Using a timestamp file means that
- `config.in' can be marked as up to date without actually changing
- its modification time. This is useful since `config.in' depends
- upon `configure.in', but it is easy to change `configure.in' in a
- way which does not affect `config.in'.
-
-
-File: configure.info, Node: Build Files, Next: Support Files, Prev: Developer Files, Up: Files
-
-3.2 Build Files
-===============
-
-This section describes the files which are created at configure and
-build time. These are the files which somebody who builds the package
-will see.
-
- Of course, the developer will also build the package. The
-distinction between developer files and build files is not that the
-developer does not see the build files, but that somebody who only
-builds the package does not have to worry about the developer files.
-
-* Menu:
-
-* Build Files Picture:: Build Files Picture.
-* Build Files Description:: Build Files Description.
-
-
-File: configure.info, Node: Build Files Picture, Next: Build Files Description, Up: Build Files
-
-3.2.1 Build Files Picture
--------------------------
-
-Here is a picture of the files which will be created at build time.
-`config.status' is both a created file and a shell script which is run
-to create other files, and the picture attempts to show that.
-
- config.in *configure* Makefile.in
- | | |
- | v |
- | config.status |
- | | |
- *config.status*<======+==========>*config.status*
- | |
- v v
- config.h Makefile
-
-
-File: configure.info, Node: Build Files Description, Prev: Build Files Picture, Up: Build Files
-
-3.2.2 Build Files Description
------------------------------
-
-This is a description of the files which are created at build time.
-
-`config.status'
- The first step in building a package is to run the `configure'
- script. The `configure' script will create the file
- `config.status', which is itself a shell script. When you first
- run `configure', it will automatically run `config.status'. An
- `Makefile' derived from an automake generated `Makefile.in' will
- contain rules to automatically run `config.status' again when
- necessary to recreate certain files if their inputs change.
-
-`Makefile'
- This is the file which make will read to build the program. The
- `config.status' script will transform `Makefile.in' into
- `Makefile'.
-
-`config.h'
- This file defines C preprocessor macros which C code can use to
- adjust its behaviour on different systems. The `config.status'
- script will transform `config.in' into `config.h'.
-
-`config.cache'
- This file did not fit neatly into the picture, and I omitted it.
- It is used by the `configure' script to cache results between
- runs. This can be an important speedup. If you modify
- `configure.in' in such a way that the results of old tests should
- change (perhaps you have added a new library to `LDFLAGS'), then
- you will have to remove `config.cache' to force the tests to be
- rerun.
-
- The autoconf manual explains how to set up a site specific cache
- file. This can speed up running `configure' scripts on your
- system.
-
-`stamp.h'
- This file, which I omitted from the picture, is similar to
- `stamp-h.in'. It is used as a timestamp file indicating whether
- `config.h' is up to date. This is useful since `config.h' depends
- upon `config.status', but it is easy for `config.status' to change
- in a way which does not affect `config.h'.
-
-
-File: configure.info, Node: Support Files, Prev: Build Files, Up: Files
-
-3.3 Support Files
-=================
-
-The GNU configure and build system requires several support files to be
-included with your distribution. You do not normally need to concern
-yourself with these. If you are using the Cygnus tree, most are already
-present. Otherwise, they will be installed with your source by
-`automake' (with the `--add-missing' option) and `libtoolize'.
-
- You don't have to put the support files in the top level directory.
-You can put them in a subdirectory, and use the `AC_CONFIG_AUX_DIR'
-macro in `configure.in' to tell `automake' and the `configure' script
-where they are.
-
- In this section, I describe the support files, so that you can know
-what they are and why they are there.
-
-`ABOUT-NLS'
- Added by automake if you are using gettext. This is a
- documentation file about the gettext project.
-
-`ansi2knr.c'
- Used by an automake generated `Makefile' if you put `ansi2knr' in
- `AUTOMAKE_OPTIONS' in `Makefile.am'. This permits compiling ANSI
- C code with a K&R C compiler.
-
-`ansi2knr.1'
- The man page which goes with `ansi2knr.c'.
-
-`config.guess'
- A shell script which determines the configuration name for the
- system on which it is run.
-
-`config.sub'
- A shell script which canonicalizes a configuration name entered by
- a user.
-
-`elisp-comp'
- Used to compile Emacs LISP files.
-
-`install-sh'
- A shell script which installs a program. This is used if the
- configure script can not find an install binary.
-
-`ltconfig'
- Used by libtool. This is a shell script which configures libtool
- for the particular system on which it is used.
-
-`ltmain.sh'
- Used by libtool. This is the actual libtool script which is used,
- after it is configured by `ltconfig' to build a library.
-
-`mdate-sh'
- A shell script used by an automake generated `Makefile' to pretty
- print the modification time of a file. This is used to maintain
- version numbers for texinfo files.
-
-`missing'
- A shell script used if some tool is missing entirely. This is
- used by an automake generated `Makefile' to avoid certain sorts of
- timestamp problems.
-
-`mkinstalldirs'
- A shell script which creates a directory, including all parent
- directories. This is used by an automake generated `Makefile'
- during installation.
-
-`texinfo.tex'
- Required if you have any texinfo files. This is used when
- converting Texinfo files into DVI using `texi2dvi' and TeX.
-
-`ylwrap'
- A shell script used by an automake generated `Makefile' to run
- programs like `bison', `yacc', `flex', and `lex'. These programs
- default to producing output files with a fixed name, and the
- `ylwrap' script runs them in a subdirectory to avoid file name
- conflicts when using a parallel make program.
-
-
-File: configure.info, Node: Configuration Names, Next: Cross Compilation Tools, Prev: Files, Up: Top
-
-4 Configuration Names
-*********************
-
-The GNU configure system names all systems using a "configuration
-name". All such names used to be triplets (they may now contain four
-parts in certain cases), and the term "configuration triplet" is still
-seen.
-
-* Menu:
-
-* Configuration Name Definition:: Configuration Name Definition.
-* Using Configuration Names:: Using Configuration Names.
-
-
-File: configure.info, Node: Configuration Name Definition, Next: Using Configuration Names, Up: Configuration Names
-
-4.1 Configuration Name Definition
-=================================
-
-This is a string of the form CPU-MANUFACTURER-OPERATING_SYSTEM. In
-some cases, this is extended to a four part form:
-CPU-MANUFACTURER-KERNEL-OPERATING_SYSTEM.
-
- When using a configuration name in a configure option, it is normally
-not necessary to specify an entire name. In particular, the
-MANUFACTURER field is often omitted, leading to strings such as
-`i386-linux' or `sparc-sunos'. The shell script `config.sub' will
-translate these shortened strings into the canonical form. autoconf
-will arrange for `config.sub' to be run automatically when it is needed.
-
- The fields of a configuration name are as follows:
-
-CPU
- The type of processor. This is typically something like `i386' or
- `sparc'. More specific variants are used as well, such as
- `mipsel' to indicate a little endian MIPS processor.
-
-MANUFACTURER
- A somewhat freeform field which indicates the manufacturer of the
- system. This is often simply `unknown'. Other common strings are
- `pc' for an IBM PC compatible system, or the name of a workstation
- vendor, such as `sun'.
-
-OPERATING_SYSTEM
- The name of the operating system which is run on the system. This
- will be something like `solaris2.5' or `irix6.3'. There is no
- particular restriction on the version number, and strings like
- `aix4.1.4.0' are seen. For an embedded system, which has no
- operating system, this field normally indicates the type of object
- file format, such as `elf' or `coff'.
-
-KERNEL
- This is used mainly for GNU/Linux. A typical GNU/Linux
- configuration name is `i586-pc-linux-gnulibc1'. In this case the
- kernel, `linux', is separated from the operating system,
- `gnulibc1'.
-
- The shell script `config.guess' will normally print the correct
-configuration name for the system on which it is run. It does by
-running `uname' and by examining other characteristics of the system.
-
- Because `config.guess' can normally determine the configuration name
-for a machine, it is normally only necessary to specify a configuration
-name when building a cross-compiler or when building using a
-cross-compiler.
-
-
-File: configure.info, Node: Using Configuration Names, Prev: Configuration Name Definition, Up: Configuration Names
-
-4.2 Using Configuration Names
-=============================
-
-A configure script will sometimes have to make a decision based on a
-configuration name. You will need to do this if you have to compile
-code differently based on something which can not be tested using a
-standard autoconf feature test.
-
- It is normally better to test for particular features, rather than to
-test for a particular system. This is because as Unix evolves,
-different systems copy features from one another. Even if you need to
-determine whether the feature is supported based on a configuration
-name, you should define a macro which describes the feature, rather than
-defining a macro which describes the particular system you are on.
-
- Testing for a particular system is normally done using a case
-statement in `configure.in'. The case statement might look something
-like the following, assuming that `host' is a shell variable holding a
-canonical configuration name (which will be the case if `configure.in'
-uses the `AC_CANONICAL_HOST' or `AC_CANONICAL_SYSTEM' macro).
-
- case "${host}" in
- i[3-7]86-*-linux-gnu*) do something ;;
- sparc*-sun-solaris2.[56789]*) do something ;;
- sparc*-sun-solaris*) do something ;;
- mips*-*-elf*) do something ;;
- esac
-
- It is particularly important to use `*' after the operating system
-field, in order to match the version number which will be generated by
-`config.guess'.
-
- In most cases you must be careful to match a range of processor
-types. For most processor families, a trailing `*' suffices, as in
-`mips*' above. For the i386 family, something along the lines of
-`i[3-7]86' suffices at present. For the m68k family, you will need
-something like `m68*'. Of course, if you do not need to match on the
-processor, it is simpler to just replace the entire field by a `*', as
-in `*-*-irix*'.
-
-
-File: configure.info, Node: Cross Compilation Tools, Next: Canadian Cross, Prev: Configuration Names, Up: Top
-
-5 Cross Compilation Tools
-*************************
-
-The GNU configure and build system can be used to build "cross
-compilation" tools. A cross compilation tool is a tool which runs on
-one system and produces code which runs on another system.
-
-* Menu:
-
-* Cross Compilation Concepts:: Cross Compilation Concepts.
-* Host and Target:: Host and Target.
-* Using the Host Type:: Using the Host Type.
-* Specifying the Target:: Specifying the Target.
-* Using the Target Type:: Using the Target Type.
-* Cross Tools in the Cygnus Tree:: Cross Tools in the Cygnus Tree
-
-
-File: configure.info, Node: Cross Compilation Concepts, Next: Host and Target, Up: Cross Compilation Tools
-
-5.1 Cross Compilation Concepts
-==============================
-
-A compiler which produces programs which run on a different system is a
-cross compilation compiler, or simply a "cross compiler". Similarly,
-we speak of cross assemblers, cross linkers, etc.
-
- In the normal case, a compiler produces code which runs on the same
-system as the one on which the compiler runs. When it is necessary to
-distinguish this case from the cross compilation case, such a compiler
-is called a "native compiler". Similarly, we speak of native
-assemblers, etc.
-
- Although the debugger is not strictly speaking a compilation tool,
-it is nevertheless meaningful to speak of a cross debugger: a debugger
-which is used to debug code which runs on another system. Everything
-that is said below about configuring cross compilation tools applies to
-the debugger as well.
-
-
-File: configure.info, Node: Host and Target, Next: Using the Host Type, Prev: Cross Compilation Concepts, Up: Cross Compilation Tools
-
-5.2 Host and Target
-===================
-
-When building cross compilation tools, there are two different systems
-involved: the system on which the tools will run, and the system for
-which the tools generate code.
-
- The system on which the tools will run is called the "host" system.
-
- The system for which the tools generate code is called the "target"
-system.
-
- For example, suppose you have a compiler which runs on a GNU/Linux
-system and generates ELF programs for a MIPS embedded system. In this
-case the GNU/Linux system is the host, and the MIPS ELF system is the
-target. Such a compiler could be called a GNU/Linux cross MIPS ELF
-compiler, or, equivalently, a `i386-linux-gnu' cross `mips-elf'
-compiler.
-
- Naturally, most programs are not cross compilation tools. For those
-programs, it does not make sense to speak of a target. It only makes
-sense to speak of a target for tools like `gcc' or the `binutils' which
-actually produce running code. For example, it does not make sense to
-speak of the target of a tool like `bison' or `make'.
-
- Most cross compilation tools can also serve as native tools. For a
-native compilation tool, it is still meaningful to speak of a target.
-For a native tool, the target is the same as the host. For example, for
-a GNU/Linux native compiler, the host is GNU/Linux, and the target is
-also GNU/Linux.
-
-
-File: configure.info, Node: Using the Host Type, Next: Specifying the Target, Prev: Host and Target, Up: Cross Compilation Tools
-
-5.3 Using the Host Type
-=======================
-
-In almost all cases the host system is the system on which you run the
-`configure' script, and on which you build the tools (for the case when
-they differ, *note Canadian Cross::).
-
- If your configure script needs to know the configuration name of the
-host system, and the package is not a cross compilation tool and
-therefore does not have a target, put `AC_CANONICAL_HOST' in
-`configure.in'. This macro will arrange to define a few shell
-variables when the `configure' script is run.
-
-`host'
- The canonical configuration name of the host. This will normally
- be determined by running the `config.guess' shell script, although
- the user is permitted to override this by using an explicit
- `--host' option.
-
-`host_alias'
- In the unusual case that the user used an explicit `--host' option,
- this will be the argument to `--host'. In the normal case, this
- will be the same as the `host' variable.
-
-`host_cpu'
-`host_vendor'
-`host_os'
- The first three parts of the canonical configuration name.
-
- The shell variables may be used by putting shell code in
-`configure.in'. For an example, see *Note Using Configuration Names::.
-
-
-File: configure.info, Node: Specifying the Target, Next: Using the Target Type, Prev: Using the Host Type, Up: Cross Compilation Tools
-
-5.4 Specifying the Target
-=========================
-
-By default, the `configure' script will assume that the target is the
-same as the host. This is the more common case; for example, it leads
-to a native compiler rather than a cross compiler.
-
- If you want to build a cross compilation tool, you must specify the
-target explicitly by using the `--target' option when you run
-`configure'. The argument to `--target' is the configuration name of
-the system for which you wish to generate code. *Note Configuration
-Names::.
-
- For example, to build tools which generate code for a MIPS ELF
-embedded system, you would use `--target mips-elf'.
-
-
-File: configure.info, Node: Using the Target Type, Next: Cross Tools in the Cygnus Tree, Prev: Specifying the Target, Up: Cross Compilation Tools
-
-5.5 Using the Target Type
-=========================
-
-When writing `configure.in' for a cross compilation tool, you will need
-to use information about the target. To do this, put
-`AC_CANONICAL_SYSTEM' in `configure.in'.
-
- `AC_CANONICAL_SYSTEM' will look for a `--target' option and
-canonicalize it using the `config.sub' shell script. It will also run
-`AC_CANONICAL_HOST' (*note Using the Host Type::).
-
- The target type will be recorded in the following shell variables.
-Note that the host versions of these variables will also be defined by
-`AC_CANONICAL_HOST'.
-
-`target'
- The canonical configuration name of the target.
-
-`target_alias'
- The argument to the `--target' option. If the user did not specify
- a `--target' option, this will be the same as `host_alias'.
-
-`target_cpu'
-`target_vendor'
-`target_os'
- The first three parts of the canonical target configuration name.
-
- Note that if `host' and `target' are the same string, you can assume
-a native configuration. If they are different, you can assume a cross
-configuration.
-
- It is arguably possible for `host' and `target' to represent the
-same system, but for the strings to not be identical. For example, if
-`config.guess' returns `sparc-sun-sunos4.1.4', and somebody configures
-with `--target sparc-sun-sunos4.1', then the slight differences between
-the two versions of SunOS may be unimportant for your tool. However,
-in the general case it can be quite difficult to determine whether the
-differences between two configuration names are significant or not.
-Therefore, by convention, if the user specifies a `--target' option
-without specifying a `--host' option, it is assumed that the user wants
-to configure a cross compilation tool.
-
- The variables `target' and `target_alias' should be handled
-differently.
-
- In general, whenever the user may actually see a string,
-`target_alias' should be used. This includes anything which may appear
-in the file system, such as a directory name or part of a tool name.
-It also includes any tool output, unless it is clearly labelled as the
-canonical target configuration name. This permits the user to use the
-`--target' option to specify how the tool will appear to the outside
-world.
-
- On the other hand, when checking for characteristics of the target
-system, `target' should be used. This is because a wide variety of
-`--target' options may map into the same canonical configuration name.
-You should not attempt to duplicate the canonicalization done by
-`config.sub' in your own code.
-
- By convention, cross tools are installed with a prefix of the
-argument used with the `--target' option, also known as `target_alias'
-(*note Using the Target Type::). If the user does not use the
-`--target' option, and thus is building a native tool, no prefix is
-used.
-
- For example, if gcc is configured with `--target mips-elf', then the
-installed binary will be named `mips-elf-gcc'. If gcc is configured
-without a `--target' option, then the installed binary will be named
-`gcc'.
-
- The autoconf macro `AC_ARG_PROGRAM' will handle this for you. If
-you are using automake, no more need be done; the programs will
-automatically be installed with the correct prefixes. Otherwise, see
-the autoconf documentation for `AC_ARG_PROGRAM'.
-
-
-File: configure.info, Node: Cross Tools in the Cygnus Tree, Prev: Using the Target Type, Up: Cross Compilation Tools
-
-5.6 Cross Tools in the Cygnus Tree
-==================================
-
-The Cygnus tree is used for various packages including gdb, the GNU
-binutils, and egcs. It is also, of course, used for Cygnus releases.
-
- In the Cygnus tree, the top level `configure' script uses the old
-Cygnus configure system, not autoconf. The top level `Makefile.in' is
-written to build packages based on what is in the source tree, and
-supports building a large number of tools in a single
-`configure'/`make' step.
-
- The Cygnus tree may be configured with a `--target' option. The
-`--target' option applies recursively to every subdirectory, and
-permits building an entire set of cross tools at once.
-
-* Menu:
-
-* Host and Target Libraries:: Host and Target Libraries.
-* Target Library Configure Scripts:: Target Library Configure Scripts.
-* Make Targets in Cygnus Tree:: Make Targets in Cygnus Tree.
-* Target libiberty:: Target libiberty
-
-
-File: configure.info, Node: Host and Target Libraries, Next: Target Library Configure Scripts, Up: Cross Tools in the Cygnus Tree
-
-5.6.1 Host and Target Libraries
--------------------------------
-
-The Cygnus tree distinguishes host libraries from target libraries.
-
- Host libraries are built with the compiler used to build the programs
-which run on the host, which is called the host compiler. This includes
-libraries such as `bfd' and `tcl'. These libraries are built with the
-host compiler, and are linked into programs like the binutils or gcc
-which run on the host.
-
- Target libraries are built with the target compiler. If gcc is
-present in the source tree, then the target compiler is the gcc that is
-built using the host compiler. Target libraries are libraries such as
-`newlib' and `libstdc++'. These libraries are not linked into the host
-programs, but are instead made available for use with programs built
-with the target compiler.
-
- For the rest of this section, assume that gcc is present in the
-source tree, so that it will be used to build the target libraries.
-
- There is a complication here. The configure process needs to know
-which compiler you are going to use to build a tool; otherwise, the
-feature tests will not work correctly. The Cygnus tree handles this by
-not configuring the target libraries until the target compiler is
-built. In order to permit everything to build using a single
-`configure'/`make', the configuration of the target libraries is
-actually triggered during the make step.
-
- When the target libraries are configured, the `--target' option is
-not used. Instead, the `--host' option is used with the argument of
-the `--target' option for the overall configuration. If no `--target'
-option was used for the overall configuration, the `--host' option will
-be passed with the output of the `config.guess' shell script. Any
-`--build' option is passed down unchanged.
-
- This translation of configuration options is done because since the
-target libraries are compiled with the target compiler, they are being
-built in order to run on the target of the overall configuration. By
-the definition of host, this means that their host system is the same as
-the target system of the overall configuration.
-
- The same process is used for both a native configuration and a cross
-configuration. Even when using a native configuration, the target
-libraries will be configured and built using the newly built compiler.
-This is particularly important for the C++ libraries, since there is no
-reason to assume that the C++ compiler used to build the host tools (if
-there even is one) uses the same ABI as the g++ compiler which will be
-used to build the target libraries.
-
- There is one difference between a native configuration and a cross
-configuration. In a native configuration, the target libraries are
-normally configured and built as siblings of the host tools. In a cross
-configuration, the target libraries are normally built in a subdirectory
-whose name is the argument to `--target'. This is mainly for
-historical reasons.
-
- To summarize, running `configure' in the Cygnus tree configures all
-the host libraries and tools, but does not configure any of the target
-libraries. Running `make' then does the following steps:
-
- * Build the host libraries.
-
- * Build the host programs, including gcc. Note that we call gcc
- both a host program (since it runs on the host) and a target
- compiler (since it generates code for the target).
-
- * Using the newly built target compiler, configure the target
- libraries.
-
- * Build the target libraries.
-
- The steps need not be done in precisely this order, since they are
-actually controlled by `Makefile' targets.
-
-
-File: configure.info, Node: Target Library Configure Scripts, Next: Make Targets in Cygnus Tree, Prev: Host and Target Libraries, Up: Cross Tools in the Cygnus Tree
-
-5.6.2 Target Library Configure Scripts
---------------------------------------
-
-There are a few things you must know in order to write a configure
-script for a target library. This is just a quick sketch, and beginners
-shouldn't worry if they don't follow everything here.
-
- The target libraries are configured and built using a newly built
-target compiler. There may not be any startup files or libraries for
-this target compiler. In fact, those files will probably be built as
-part of some target library, which naturally means that they will not
-exist when your target library is configured.
-
- This means that the configure script for a target library may not use
-any test which requires doing a link. This unfortunately includes many
-useful autoconf macros, such as `AC_CHECK_FUNCS'. autoconf macros
-which do a compile but not a link, such as `AC_CHECK_HEADERS', may be
-used.
-
- This is a severe restriction, but normally not a fatal one, as target
-libraries can often assume the presence of other target libraries, and
-thus know which functions will be available.
-
- As of this writing, the autoconf macro `AC_PROG_CC' does a link to
-make sure that the compiler works. This may fail in a target library,
-so target libraries must use a different set of macros to locate the
-compiler. See the `configure.in' file in a directory like `libiberty'
-or `libgloss' for an example.
-
- As noted in the previous section, target libraries are sometimes
-built in directories which are siblings to the host tools, and are
-sometimes built in a subdirectory. The `--with-target-subdir' configure
-option will be passed when the library is configured. Its value will be
-an empty string if the target library is a sibling. Its value will be
-the name of the subdirectory if the target library is in a subdirectory.
-
- If the overall build is not a native build (i.e., the overall
-configure used the `--target' option), then the library will be
-configured with the `--with-cross-host' option. The value of this
-option will be the host system of the overall build. Recall that the
-host system of the library will be the target of the overall build. If
-the overall build is a native build, the `--with-cross-host' option
-will not be used.
-
- A library which can be built both standalone and as a target library
-may want to install itself into different directories depending upon the
-case. When built standalone, or when built native, the library should
-be installed in `$(libdir)'. When built as a target library which is
-not native, the library should be installed in `$(tooldir)/lib'. The
-`--with-cross-host' option may be used to distinguish these cases.
-
- This same test of `--with-cross-host' may be used to see whether it
-is OK to use link tests in the configure script. If the
-`--with-cross-host' option is not used, then the library is being built
-either standalone or native, and a link should work.
-
-
-File: configure.info, Node: Make Targets in Cygnus Tree, Next: Target libiberty, Prev: Target Library Configure Scripts, Up: Cross Tools in the Cygnus Tree
-
-5.6.3 Make Targets in Cygnus Tree
----------------------------------
-
-The top level `Makefile' in the Cygnus tree defines targets for every
-known subdirectory.
-
- For every subdirectory DIR which holds a host library or program,
-the `Makefile' target `all-DIR' will build that library or program.
-
- There are dependencies among host tools. For example, building gcc
-requires first building gas, because the gcc build process invokes the
-target assembler. These dependencies are reflected in the top level
-`Makefile'.
-
- For every subdirectory DIR which holds a target library, the
-`Makefile' target `configure-target-DIR' will configure that library.
-The `Makefile' target `all-target-DIR' will build that library.
-
- Every `configure-target-DIR' target depends upon `all-gcc', since
-gcc, the target compiler, is required to configure the tool. Every
-`all-target-DIR' target depends upon the corresponding
-`configure-target-DIR' target.
-
- There are several other targets which may be of interest for each
-directory: `install-DIR', `clean-DIR', and `check-DIR'. There are also
-corresponding `target' versions of these for the target libraries ,
-such as `install-target-DIR'.
-
-
-File: configure.info, Node: Target libiberty, Prev: Make Targets in Cygnus Tree, Up: Cross Tools in the Cygnus Tree
-
-5.6.4 Target libiberty
-----------------------
-
-The `libiberty' subdirectory is currently a special case, in that it is
-the only directory which is built both using the host compiler and
-using the target compiler.
-
- This is because the files in `libiberty' are used when building the
-host tools, and they are also incorporated into the `libstdc++' target
-library as support code.
-
- This duality does not pose any particular difficulties. It means
-that there are targets for both `all-libiberty' and
-`all-target-libiberty'.
-
- In a native configuration, when target libraries are not built in a
-subdirectory, the same objects are normally used as both the host build
-and the target build. This is normally OK, since libiberty contains
-only C code, and in a native configuration the results of the host
-compiler and the target compiler are normally interoperable.
-
- Irix 6 is again an exception here, since the SGI native compiler
-defaults to using the `O32' ABI, and gcc defaults to using the `N32'
-ABI. On Irix 6, the target libraries are built in a subdirectory even
-for a native configuration, avoiding this problem.
-
- There are currently no other libraries built for both the host and
-the target, but there is no conceptual problem with adding more.
-
-
-File: configure.info, Node: Canadian Cross, Next: Cygnus Configure, Prev: Cross Compilation Tools, Up: Top
-
-6 Canadian Cross
-****************
-
-It is possible to use the GNU configure and build system to build a
-program which will run on a system which is different from the system on
-which the tools are built. In other words, it is possible to build
-programs using a cross compiler.
-
- This is referred to as a "Canadian Cross".
-
-* Menu:
-
-* Canadian Cross Example:: Canadian Cross Example.
-* Canadian Cross Concepts:: Canadian Cross Concepts.
-* Build Cross Host Tools:: Build Cross Host Tools.
-* Build and Host Options:: Build and Host Options.
-* CCross not in Cygnus Tree:: Canadian Cross not in Cygnus Tree.
-* CCross in Cygnus Tree:: Canadian Cross in Cygnus Tree.
-* Supporting Canadian Cross:: Supporting Canadian Cross.
-
-
-File: configure.info, Node: Canadian Cross Example, Next: Canadian Cross Concepts, Up: Canadian Cross
-
-6.1 Canadian Cross Example
-==========================
-
-Here is an example of a Canadian Cross.
-
- While running on a GNU/Linux, you can build a program which will run
-on a Solaris system. You would use a GNU/Linux cross Solaris compiler
-to build the program.
-
- Of course, you could not run the resulting program on your GNU/Linux
-system. You would have to copy it over to a Solaris system before you
-would run it.
-
- Of course, you could also simply build the programs on the Solaris
-system in the first place. However, perhaps the Solaris system is not
-available for some reason; perhaps you actually don't have one, but you
-want to build the tools for somebody else to use. Or perhaps your
-GNU/Linux system is much faster than your Solaris system.
-
- A Canadian Cross build is most frequently used when building
-programs to run on a non-Unix system, such as DOS or Windows. It may
-be simpler to configure and build on a Unix system than to support the
-configuration machinery on a non-Unix system.
-
-
-File: configure.info, Node: Canadian Cross Concepts, Next: Build Cross Host Tools, Prev: Canadian Cross Example, Up: Canadian Cross
-
-6.2 Canadian Cross Concepts
-===========================
-
-When building a Canadian Cross, there are at least two different systems
-involved: the system on which the tools are being built, and the system
-on which the tools will run.
-
- The system on which the tools are being built is called the "build"
-system.
-
- The system on which the tools will run is called the host system.
-
- For example, if you are building a Solaris program on a GNU/Linux
-system, as in the previous section, the build system would be GNU/Linux,
-and the host system would be Solaris.
-
- It is, of course, possible to build a cross compiler using a Canadian
-Cross (i.e., build a cross compiler using a cross compiler). In this
-case, the system for which the resulting cross compiler generates code
-is called the target system. (For a more complete discussion of host
-and target systems, *note Host and Target::).
-
- An example of building a cross compiler using a Canadian Cross would
-be building a Windows cross MIPS ELF compiler on a GNU/Linux system. In
-this case the build system would be GNU/Linux, the host system would be
-Windows, and the target system would be MIPS ELF.
-
- The name Canadian Cross comes from the case when the build, host, and
-target systems are all different. At the time that these issues were
-all being hashed out, Canada had three national political parties.
-
-
-File: configure.info, Node: Build Cross Host Tools, Next: Build and Host Options, Prev: Canadian Cross Concepts, Up: Canadian Cross
-
-6.3 Build Cross Host Tools
-==========================
-
-In order to configure a program for a Canadian Cross build, you must
-first build and install the set of cross tools you will use to build the
-program.
-
- These tools will be build cross host tools. That is, they will run
-on the build system, and will produce code that runs on the host system.
-
- It is easy to confuse the meaning of build and host here. Always
-remember that the build system is where you are doing the build, and the
-host system is where the resulting program will run. Therefore, you
-need a build cross host compiler.
-
- In general, you must have a complete cross environment in order to do
-the build. This normally means a cross compiler, cross assembler, and
-so forth, as well as libraries and include files for the host system.
-
-
-File: configure.info, Node: Build and Host Options, Next: CCross not in Cygnus Tree, Prev: Build Cross Host Tools, Up: Canadian Cross
-
-6.4 Build and Host Options
-==========================
-
-When you run `configure', you must use both the `--build' and `--host'
-options.
-
- The `--build' option is used to specify the configuration name of
-the build system. This can normally be the result of running the
-`config.guess' shell script, and it is reasonable to use
-`--build=`config.guess`'.
-
- The `--host' option is used to specify the configuration name of the
-host system.
-
- As we explained earlier, `config.guess' is used to set the default
-value for the `--host' option (*note Using the Host Type::). We can
-now see that since `config.guess' returns the type of system on which
-it is run, it really identifies the build system. Since the host
-system is normally the same as the build system (i.e., people do not
-normally build using a cross compiler), it is reasonable to use the
-result of `config.guess' as the default for the host system when the
-`--host' option is not used.
-
- It might seem that if the `--host' option were used without the
-`--build' option that the configure script could run `config.guess' to
-determine the build system, and presume a Canadian Cross if the result
-of `config.guess' differed from the `--host' option. However, for
-historical reasons, some configure scripts are routinely run using an
-explicit `--host' option, rather than using the default from
-`config.guess'. As noted earlier, it is difficult or impossible to
-reliably compare configuration names (*note Using the Target Type::).
-Therefore, by convention, if the `--host' option is used, but the
-`--build' option is not used, then the build system defaults to the
-host system.
-
-
-File: configure.info, Node: CCross not in Cygnus Tree, Next: CCross in Cygnus Tree, Prev: Build and Host Options, Up: Canadian Cross
-
-6.5 Canadian Cross not in Cygnus Tree.
-======================================
-
-If you are not using the Cygnus tree, you must explicitly specify the
-cross tools which you want to use to build the program. This is done by
-setting environment variables before running the `configure' script.
-
- You must normally set at least the environment variables `CC', `AR',
-and `RANLIB' to the cross tools which you want to use to build.
-
- For some programs, you must set additional cross tools as well, such
-as `AS', `LD', or `NM'.
-
- You would set these environment variables to the build cross tools
-which you are going to use.
-
- For example, if you are building a Solaris program on a GNU/Linux
-system, and your GNU/Linux cross Solaris compiler were named
-`solaris-gcc', then you would set the environment variable `CC' to
-`solaris-gcc'.
-
-
-File: configure.info, Node: CCross in Cygnus Tree, Next: Supporting Canadian Cross, Prev: CCross not in Cygnus Tree, Up: Canadian Cross
-
-6.6 Canadian Cross in Cygnus Tree
-=================================
-
-This section describes configuring and building a Canadian Cross when
-using the Cygnus tree.
-
-* Menu:
-
-* Standard Cygnus CCross:: Building a Normal Program.
-* Cross Cygnus CCross:: Building a Cross Program.
-
-
-File: configure.info, Node: Standard Cygnus CCross, Next: Cross Cygnus CCross, Up: CCross in Cygnus Tree
-
-6.6.1 Building a Normal Program
--------------------------------
-
-When configuring a Canadian Cross in the Cygnus tree, all the
-appropriate environment variables are automatically set to `HOST-TOOL',
-where HOST is the value used for the `--host' option, and TOOL is the
-name of the tool (e.g., `gcc', `as', etc.). These tools must be on
-your `PATH'.
-
- Adding a prefix of HOST will give the usual name for the build cross
-host tools. To see this, consider that when these cross tools were
-built, they were configured to run on the build system and to produce
-code for the host system. That is, they were configured with a
-`--target' option that is the same as the system which we are now
-calling the host. Recall that the default name for installed cross
-tools uses the target system as a prefix (*note Using the Target
-Type::). Since that is the system which we are now calling the host,
-HOST is the right prefix to use.
-
- For example, if you configure with `--build=i386-linux-gnu' and
-`--host=solaris', then the Cygnus tree will automatically default to
-using the compiler `solaris-gcc'. You must have previously built and
-installed this compiler, probably by doing a build with no `--host'
-option and with a `--target' option of `solaris'.
-
-
-File: configure.info, Node: Cross Cygnus CCross, Prev: Standard Cygnus CCross, Up: CCross in Cygnus Tree
-
-6.6.2 Building a Cross Program
-------------------------------
-
-There are additional considerations if you want to build a cross
-compiler, rather than a native compiler, in the Cygnus tree using a
-Canadian Cross.
-
- When you build a cross compiler using the Cygnus tree, then the
-target libraries will normally be built with the newly built target
-compiler (*note Host and Target Libraries::). However, this will not
-work when building with a Canadian Cross. This is because the newly
-built target compiler will be a program which runs on the host system,
-and therefore will not be able to run on the build system.
-
- Therefore, when building a cross compiler with the Cygnus tree, you
-must first install a set of build cross target tools. These tools will
-be used when building the target libraries.
-
- Note that this is not a requirement of a Canadian Cross in general.
-For example, it would be possible to build just the host cross target
-tools on the build system, to copy the tools to the host system, and to
-build the target libraries on the host system. The requirement for
-build cross target tools is imposed by the Cygnus tree, which expects
-to be able to build both host programs and target libraries in a single
-`configure'/`make' step. Because it builds these in a single step, it
-expects to be able to build the target libraries on the build system,
-which means that it must use a build cross target toolchain.
-
- For example, suppose you want to build a Windows cross MIPS ELF
-compiler on a GNU/Linux system. You must have previously installed
-both a GNU/Linux cross Windows compiler and a GNU/Linux cross MIPS ELF
-compiler.
-
- In order to build the Windows (configuration name `i386-cygwin32')
-cross MIPS ELF (configure name `mips-elf') compiler, you might execute
-the following commands (long command lines are broken across lines with
-a trailing backslash as a continuation character).
-
- mkdir linux-x-cygwin32
- cd linux-x-cygwin32
- SRCDIR/configure --target i386-cygwin32 --prefix=INSTALLDIR \
- --exec-prefix=INSTALLDIR/H-i386-linux
- make
- make install
- cd ..
- mkdir linux-x-mips-elf
- cd linux-x-mips-elf
- SRCDIR/configure --target mips-elf --prefix=INSTALLDIR \
- --exec-prefix=INSTALLDIR/H-i386-linux
- make
- make install
- cd ..
- mkdir cygwin32-x-mips-elf
- cd cygwin32-x-mips-elf
- SRCDIR/configure --build=i386-linux-gnu --host=i386-cygwin32 \
- --target=mips-elf --prefix=WININSTALLDIR \
- --exec-prefix=WININSTALLDIR/H-i386-cygwin32
- make
- make install
-
- You would then copy the contents of WININSTALLDIR over to the
-Windows machine, and run the resulting programs.
-
-
-File: configure.info, Node: Supporting Canadian Cross, Prev: CCross in Cygnus Tree, Up: Canadian Cross
-
-6.7 Supporting Canadian Cross
-=============================
-
-If you want to make it possible to build a program you are developing
-using a Canadian Cross, you must take some care when writing your
-configure and make rules. Simple cases will normally work correctly.
-However, it is not hard to write configure and make tests which will
-fail in a Canadian Cross.
-
-* Menu:
-
-* CCross in Configure:: Supporting Canadian Cross in Configure Scripts.
-* CCross in Make:: Supporting Canadian Cross in Makefiles.
-
-
-File: configure.info, Node: CCross in Configure, Next: CCross in Make, Up: Supporting Canadian Cross
-
-6.7.1 Supporting Canadian Cross in Configure Scripts
-----------------------------------------------------
-
-In a `configure.in' file, after calling `AC_PROG_CC', you can find out
-whether this is a Canadian Cross configure by examining the shell
-variable `cross_compiling'. In a Canadian Cross, which means that the
-compiler is a cross compiler, `cross_compiling' will be `yes'. In a
-normal configuration, `cross_compiling' will be `no'.
-
- You ordinarily do not need to know the type of the build system in a
-configure script. However, if you do need that information, you can get
-it by using the macro `AC_CANONICAL_SYSTEM', the same macro that is
-used to determine the target system. This macro will set the variables
-`build', `build_alias', `build_cpu', `build_vendor', and `build_os',
-which correspond to the similar `target' and `host' variables, except
-that they describe the build system.
-
- When writing tests in `configure.in', you must remember that you
-want to test the host environment, not the build environment.
-
- Macros like `AC_CHECK_FUNCS' which use the compiler will test the
-host environment. That is because the tests will be done by running the
-compiler, which is actually a build cross host compiler. If the
-compiler can find the function, that means that the function is present
-in the host environment.
-
- Tests like `test -f /dev/ptyp0', on the other hand, will test the
-build environment. Remember that the configure script is running on the
-build system, not the host system. If your configure scripts examines
-files, those files will be on the build system. Whatever you determine
-based on those files may or may not be the case on the host system.
-
- Most autoconf macros will work correctly for a Canadian Cross. The
-main exception is `AC_TRY_RUN'. This macro tries to compile and run a
-test program. This will fail in a Canadian Cross, because the program
-will be compiled for the host system, which means that it will not run
-on the build system.
-
- The `AC_TRY_RUN' macro provides an optional argument to tell the
-configure script what to do in a Canadian Cross. If that argument is
-not present, you will get a warning when you run `autoconf':
- warning: AC_TRY_RUN called without default to allow cross compiling
- This tells you that the resulting `configure' script will not work
-with a Canadian Cross.
-
- In some cases while it may better to perform a test at configure
-time, it is also possible to perform the test at run time. In such a
-case you can use the cross compiling argument to `AC_TRY_RUN' to tell
-your program that the test could not be performed at configure time.
-
- There are a few other autoconf macros which will not work correctly
-with a Canadian Cross: a partial list is `AC_FUNC_GETPGRP',
-`AC_FUNC_SETPGRP', `AC_FUNC_SETVBUF_REVERSED', and
-`AC_SYS_RESTARTABLE_SYSCALLS'. The `AC_CHECK_SIZEOF' macro is
-generally not very useful with a Canadian Cross; it permits an optional
-argument indicating the default size, but there is no way to know what
-the correct default should be.
-
-
-File: configure.info, Node: CCross in Make, Prev: CCross in Configure, Up: Supporting Canadian Cross
-
-6.7.2 Supporting Canadian Cross in Makefiles.
----------------------------------------------
-
-The main Canadian Cross issue in a `Makefile' arises when you want to
-use a subsidiary program to generate code or data which you will then
-include in your real program.
-
- If you compile this subsidiary program using `$(CC)' in the usual
-way, you will not be able to run it. This is because `$(CC)' will
-build a program for the host system, but the program is being built on
-the build system.
-
- You must instead use a compiler for the build system, rather than the
-host system. In the Cygnus tree, this make variable `$(CC_FOR_BUILD)'
-will hold a compiler for the build system.
-
- Note that you should not include `config.h' in a file you are
-compiling with `$(CC_FOR_BUILD)'. The `configure' script will build
-`config.h' with information for the host system. However, you are
-compiling the file using a compiler for the build system (a native
-compiler). Subsidiary programs are normally simple filters which do no
-user interaction, and it is normally possible to write them in a highly
-portable fashion so that the absence of `config.h' is not crucial.
-
- The gcc `Makefile.in' shows a complex situation in which certain
-files, such as `rtl.c', must be compiled into both subsidiary programs
-run on the build system and into the final program. This approach may
-be of interest for advanced build system hackers. Note that the build
-system compiler is rather confusingly called `HOST_CC'.
-
-
-File: configure.info, Node: Cygnus Configure, Next: Multilibs, Prev: Canadian Cross, Up: Top
-
-7 Cygnus Configure
-******************
-
-The Cygnus configure script predates autoconf. All of its interesting
-features have been incorporated into autoconf. No new programs should
-be written to use the Cygnus configure script.
-
- However, the Cygnus configure script is still used in a few places:
-at the top of the Cygnus tree and in a few target libraries in the
-Cygnus tree. Until those uses have been replaced with autoconf, some
-brief notes are appropriate here. This is not complete documentation,
-but it should be possible to use this as a guide while examining the
-scripts themselves.
-
-* Menu:
-
-* Cygnus Configure Basics:: Cygnus Configure Basics.
-* Cygnus Configure in C++ Libraries:: Cygnus Configure in C++ Libraries.
-
-
-File: configure.info, Node: Cygnus Configure Basics, Next: Cygnus Configure in C++ Libraries, Up: Cygnus Configure
-
-7.1 Cygnus Configure Basics
-===========================
-
-Cygnus configure does not use any generated files; there is no program
-corresponding to `autoconf'. Instead, there is a single shell script
-named `configure' which may be found at the top of the Cygnus tree.
-This shell script was written by hand; it was not generated by
-autoconf, and it is incorrect, and indeed harmful, to run `autoconf' in
-the top level of a Cygnus tree.
-
- Cygnus configure works in a particular directory by examining the
-file `configure.in' in that directory. That file is broken into four
-separate shell scripts.
-
- The first is the contents of `configure.in' up to a line that starts
-with `# per-host:'. This is the common part.
-
- The second is the rest of `configure.in' up to a line that starts
-with `# per-target:'. This is the per host part.
-
- The third is the rest of `configure.in' up to a line that starts
-with `# post-target:'. This is the per target part.
-
- The fourth is the remainder of `configure.in'. This is the post
-target part.
-
- If any of these comment lines are missing, the corresponding shell
-script is empty.
-
- Cygnus configure will first execute the common part. This must set
-the shell variable `srctrigger' to the name of a source file, to
-confirm that Cygnus configure is looking at the right directory. This
-may set the shell variables `package_makefile_frag' and
-`package_makefile_rules_frag'.
-
- Cygnus configure will next set the `build' and `host' shell
-variables, and execute the per host part. This may set the shell
-variable `host_makefile_frag'.
-
- Cygnus configure will next set the `target' variable, and execute
-the per target part. This may set the shell variable
-`target_makefile_frag'.
-
- Any of these scripts may set the `subdirs' shell variable. This
-variable is a list of subdirectories where a `Makefile.in' file may be
-found. Cygnus configure will automatically look for a `Makefile.in'
-file in the current directory. The `subdirs' shell variable is not
-normally used, and I believe that the only directory which uses it at
-present is `newlib'.
-
- For each `Makefile.in', Cygnus configure will automatically create a
-`Makefile' by adding definitions for `make' variables such as `host'
-and `target', and automatically editing the values of `make' variables
-such as `prefix' if they are present.
-
- Also, if any of the `makefile_frag' shell variables are set, Cygnus
-configure will interpret them as file names relative to either the
-working directory or the source directory, and will read the contents of
-the file into the generated `Makefile'. The file contents will be read
-in after the first line in `Makefile.in' which starts with `####'.
-
- These `Makefile' fragments are used to customize behaviour for a
-particular host or target. They serve to select particular files to
-compile, and to define particular preprocessor macros by providing
-values for `make' variables which are then used during compilation.
-Cygnus configure, unlike autoconf, normally does not do feature tests,
-and normally requires support to be added manually for each new host.
-
- The `Makefile' fragment support is similar to the autoconf
-`AC_SUBST_FILE' macro.
-
- After creating each `Makefile', the post target script will be run
-(i.e., it may be run several times). This script may further customize
-the `Makefile'. When it is run, the shell variable `Makefile' will
-hold the name of the `Makefile', including the appropriate directory
-component.
-
- Like an autoconf generated `configure' script, Cygnus configure will
-create a file named `config.status' which, when run, will automatically
-recreate the configuration. The `config.status' file will simply
-execute the Cygnus configure script again with the appropriate
-arguments.
-
- Any of the parts of `configure.in' may set the shell variables
-`files' and `links'. Cygnus configure will set up symlinks from the
-names in `links' to the files named in `files'. This is similar to the
-autoconf `AC_LINK_FILES' macro.
-
- Finally, any of the parts of `configure.in' may set the shell
-variable `configdirs' to a set of subdirectories. If it is set, Cygnus
-configure will recursively run the configure process in each
-subdirectory. If the subdirectory uses Cygnus configure, it will
-contain a `configure.in' file but no `configure' file, in which case
-Cygnus configure will invoke itself recursively. If the subdirectory
-has a `configure' file, Cygnus configure assumes that it is an autoconf
-generated `configure' script, and simply invokes it directly.
-
-
-File: configure.info, Node: Cygnus Configure in C++ Libraries, Prev: Cygnus Configure Basics, Up: Cygnus Configure
-
-7.2 Cygnus Configure in C++ Libraries
-=====================================
-
-The C++ library configure system, written by Per Bothner, deserves
-special mention. It uses Cygnus configure, but it does feature testing
-like that done by autoconf generated `configure' scripts. This
-approach is used in the libraries `libio', `libstdc++', and `libg++'.
-
- Most of the `Makefile' information is written out by the shell
-script `libio/config.shared'. Each `configure.in' file sets certain
-shell variables, and then invokes `config.shared' to create two package
-`Makefile' fragments. These fragments are then incorporated into the
-resulting `Makefile' by the Cygnus configure script.
-
- The file `_G_config.h' is created in the `libio' object directory by
-running the shell script `libio/gen-params'. This shell script uses
-feature tests to define macros and typedefs in `_G_config.h'.
-
-
-File: configure.info, Node: Multilibs, Next: FAQ, Prev: Cygnus Configure, Up: Top
-
-8 Multilibs
-***********
-
-For some targets gcc may have different processor requirements depending
-upon command line options. An obvious example is the `-msoft-float'
-option supported on several processors. This option means that the
-floating point registers are not available, which means that floating
-point operations must be done by calling an emulation subroutine rather
-than by using machine instructions.
-
- For such options, gcc is often configured to compile target libraries
-twice: once with `-msoft-float' and once without. When gcc compiles
-target libraries more than once, the resulting libraries are called
-"multilibs".
-
- Multilibs are not really part of the GNU configure and build system,
-but we discuss them here since they require support in the `configure'
-scripts and `Makefile's used for target libraries.
-
-* Menu:
-
-* Multilibs in gcc:: Multilibs in gcc.
-* Multilibs in Target Libraries:: Multilibs in Target Libraries.
-
-
-File: configure.info, Node: Multilibs in gcc, Next: Multilibs in Target Libraries, Up: Multilibs
-
-8.1 Multilibs in gcc
-====================
-
-In gcc, multilibs are defined by setting the variable
-`MULTILIB_OPTIONS' in the target `Makefile' fragment. Several other
-`MULTILIB' variables may also be defined there. *Note The Target
-Makefile Fragment: (gcc)Target Fragment.
-
- If you have built gcc, you can see what multilibs it uses by running
-it with the `-print-multi-lib' option. The output `.;' means that no
-multilibs are used. In general, the output is a sequence of lines, one
-per multilib. The first part of each line, up to the `;', is the name
-of the multilib directory. The second part is a list of compiler
-options separated by `@' characters.
-
- Multilibs are built in a tree of directories. The top of the tree,
-represented by `.' in the list of multilib directories, is the default
-library to use when no special compiler options are used. The
-subdirectories of the tree hold versions of the library to use when
-particular compiler options are used.
-
-
-File: configure.info, Node: Multilibs in Target Libraries, Prev: Multilibs in gcc, Up: Multilibs
-
-8.2 Multilibs in Target Libraries
-=================================
-
-The target libraries in the Cygnus tree are automatically built with
-multilibs. That means that each library is built multiple times.
-
- This default is set in the top level `configure.in' file, by adding
-`--enable-multilib' to the list of arguments passed to configure when
-it is run for the target libraries (*note Host and Target Libraries::).
-
- Each target library uses the shell script `config-ml.in', written by
-Doug Evans, to prepare to build target libraries. This shell script is
-invoked after the `Makefile' has been created by the `configure'
-script. If multilibs are not enabled, it does nothing, otherwise it
-modifies the `Makefile' to support multilibs.
-
- The `config-ml.in' script makes one copy of the `Makefile' for each
-multilib in the appropriate subdirectory. When configuring in the
-source directory (which is not recommended), it will build a symlink
-tree of the sources in each subdirectory.
-
- The `config-ml.in' script sets several variables in the various
-`Makefile's. The `Makefile.in' must have definitions for these
-variables already; `config-ml.in' simply changes the existing values.
-The `Makefile' should use default values for these variables which will
-do the right thing in the subdirectories.
-
-`MULTISRCTOP'
- `config-ml.in' will set this to a sequence of `../' strings, where
- the number of strings is the number of multilib levels in the
- source tree. The default value should be the empty string.
-
-`MULTIBUILDTOP'
- `config-ml.in' will set this to a sequence of `../' strings, where
- the number of strings is number of multilib levels in the object
- directory. The default value should be the empty string. This
- will differ from `MULTISRCTOP' when configuring in the source tree
- (which is not recommended).
-
-`MULTIDIRS'
- In the top level `Makefile' only, `config-ml.in' will set this to
- the list of multilib subdirectories. The default value should be
- the empty string.
-
-`MULTISUBDIR'
- `config-ml.in' will set this to the installed subdirectory name to
- use for this subdirectory, with a leading `/'. The default value
- shold be the empty string.
-
-`MULTIDO'
-`MULTICLEAN'
- In the top level `Makefile' only, `config-ml.in' will set these
- variables to commands to use when doing a recursive make. These
- variables should both default to the string `true', so that by
- default nothing happens.
-
- All references to the parent of the source directory should use the
-variable `MULTISRCTOP'. Instead of writing `$(srcdir)/..', you must
-write `$(srcdir)/$(MULTISRCTOP)..'.
-
- Similarly, references to the parent of the object directory should
-use the variable `MULTIBUILDTOP'.
-
- In the installation target, the libraries should be installed in the
-subdirectory `MULTISUBDIR'. Instead of installing
-`$(libdir)/libfoo.a', install `$(libdir)$(MULTISUBDIR)/libfoo.a'.
-
- The `config-ml.in' script also modifies the top level `Makefile' to
-add `multi-do' and `multi-clean' targets which are used when building
-multilibs.
-
- The default target of the `Makefile' should include the following
-command:
- @$(MULTIDO) $(FLAGS_TO_PASS) DO=all multi-do
- This assumes that `$(FLAGS_TO_PASS)' is defined as a set of
-variables to pass to a recursive invocation of `make'. This will build
-all the multilibs. Note that the default value of `MULTIDO' is `true',
-so by default this command will do nothing. It will only do something
-in the top level `Makefile' if multilibs were enabled.
-
- The `install' target of the `Makefile' should include the following
-command:
- @$(MULTIDO) $(FLAGS_TO_PASS) DO=install multi-do
-
- In general, any operation, other than clean, which should be
-performed on all the multilibs should use a `$(MULTIDO)' line, setting
-the variable `DO' to the target of each recursive call to `make'.
-
- The `clean' targets (`clean', `mostlyclean', etc.) should use
-`$(MULTICLEAN)'. For example, the `clean' target should do this:
- @$(MULTICLEAN) DO=clean multi-clean
-
-
-File: configure.info, Node: FAQ, Next: Index, Prev: Multilibs, Up: Top
-
-9 Frequently Asked Questions
-****************************
-
-Which do I run first, `autoconf' or `automake'?
- Except when you first add autoconf or automake support to a
- package, you shouldn't run either by hand. Instead, configure
- with the `--enable-maintainer-mode' option, and let `make' take
- care of it.
-
-`autoconf' says something about undefined macros.
- This means that you have macros in your `configure.in' which are
- not defined by `autoconf'. You may be using an old version of
- `autoconf'; try building and installing a newer one. Make sure the
- newly installled `autoconf' is first on your `PATH'. Also, see
- the next question.
-
-My `configure' script has stuff like `CY_GNU_GETTEXT' in it.
- This means that you have macros in your `configure.in' which should
- be defined in your `aclocal.m4' file, but aren't. This usually
- means that `aclocal' was not able to appropriate definitions of the
- macros. Make sure that you have installed all the packages you
- need. In particular, make sure that you have installed libtool
- (this is where `AM_PROG_LIBTOOL' is defined) and gettext (this is
- where `CY_GNU_GETTEXT' is defined, at least in the Cygnus version
- of gettext).
-
-My `Makefile' has `@' characters in it.
- This may mean that you tried to use an autoconf substitution in
- your `Makefile.in' without adding the appropriate `AC_SUBST' call
- to your `configure' script. Or it may just mean that you need to
- rebuild `Makefile' in your build directory. To rebuild `Makefile'
- from `Makefile.in', run the shell script `config.status' with no
- arguments. If you need to force `configure' to run again, first
- run `config.status --recheck'. These runs are normally done
- automatically by `Makefile' targets, but if your `Makefile' has
- gotten messed up you'll need to help them along.
-
-Why do I have to run both `config.status --recheck' and `config.status'?
- Normally, you don't; they will be run automatically by `Makefile'
- targets. If you do need to run them, use `config.status --recheck'
- to run the `configure' script again with the same arguments as the
- first time you ran it. Use `config.status' (with no arguments) to
- regenerate all files (`Makefile', `config.h', etc.) based on the
- results of the configure script. The two cases are separate
- because it isn't always necessary to regenerate all the files
- after running `config.status --recheck'. The `Makefile' targets
- generated by automake will use the environment variables
- `CONFIG_FILES' and `CONFIG_HEADERS' to only regenerate files as
- they are needed.
-
-What is the Cygnus tree?
- The Cygnus tree is used for various packages including gdb, the GNU
- binutils, and egcs. It is also, of course, used for Cygnus
- releases. It is the build system which was developed at Cygnus,
- using the Cygnus configure script. It permits building many
- different packages with a single configure and make. The
- configure scripts in the tree are being converted to autoconf, but
- the general build structure remains intact.
-
-Why do I have to keep rebuilding and reinstalling the tools?
- I know, it's a pain. Unfortunately, there are bugs in the tools
- themselves which need to be fixed, and each time that happens
- everybody who uses the tools need to reinstall new versions of
- them. I don't know if there is going to be a clever fix until the
- tools stabilize.
-
-Why not just have a Cygnus tree `make' target to update the tools?
- The tools unfortunately need to be installed before they can be
- used. That means that they must be built using an appropriate
- prefix, and it seems unwise to assume that every configuration
- uses an appropriate prefix. It might be possible to make them
- work in place, or it might be possible to install them in some
- subdirectory; so far these approaches have not been implemented.
-
-
-File: configure.info, Node: Index, Prev: FAQ, Up: Top
-
-Index
-*****
-
-
-* Menu:
-
-* --build option: Build and Host Options.
- (line 9)
-* --host option: Build and Host Options.
- (line 14)
-* --target option: Specifying the Target.
- (line 10)
-* _GNU_SOURCE: Write configure.in. (line 134)
-* AC_CANONICAL_HOST: Using the Host Type. (line 10)
-* AC_CANONICAL_SYSTEM: Using the Target Type.
- (line 6)
-* AC_CONFIG_HEADER: Write configure.in. (line 66)
-* AC_EXEEXT: Write configure.in. (line 86)
-* AC_INIT: Write configure.in. (line 38)
-* AC_OUTPUT: Write configure.in. (line 142)
-* AC_PREREQ: Write configure.in. (line 42)
-* AC_PROG_CC: Write configure.in. (line 103)
-* AC_PROG_CXX: Write configure.in. (line 117)
-* acconfig.h: Written Developer Files.
- (line 27)
-* acconfig.h, writing: Write acconfig.h. (line 6)
-* acinclude.m4: Written Developer Files.
- (line 37)
-* aclocal.m4: Generated Developer Files.
- (line 33)
-* AM_CONFIG_HEADER: Write configure.in. (line 53)
-* AM_DISABLE_SHARED: Write configure.in. (line 127)
-* AM_EXEEXT: Write configure.in. (line 86)
-* AM_INIT_AUTOMAKE: Write configure.in. (line 48)
-* AM_MAINTAINER_MODE: Write configure.in. (line 70)
-* AM_PROG_LIBTOOL: Write configure.in. (line 122)
-* AM_PROG_LIBTOOL in configure: FAQ. (line 19)
-* build option: Build and Host Options.
- (line 9)
-* building with a cross compiler: Canadian Cross. (line 6)
-* canadian cross: Canadian Cross. (line 6)
-* canadian cross in configure: CCross in Configure. (line 6)
-* canadian cross in cygnus tree: CCross in Cygnus Tree.
- (line 6)
-* canadian cross in makefile: CCross in Make. (line 6)
-* canadian cross, configuring: Build and Host Options.
- (line 6)
-* canonical system names: Configuration Names. (line 6)
-* config.cache: Build Files Description.
- (line 28)
-* config.h: Build Files Description.
- (line 23)
-* config.h.in: Generated Developer Files.
- (line 45)
-* config.in: Generated Developer Files.
- (line 45)
-* config.status: Build Files Description.
- (line 9)
-* config.status --recheck: FAQ. (line 40)
-* configuration names: Configuration Names. (line 6)
-* configuration triplets: Configuration Names. (line 6)
-* configure: Generated Developer Files.
- (line 21)
-* configure build system: Build and Host Options.
- (line 9)
-* configure host: Build and Host Options.
- (line 14)
-* configure target: Specifying the Target.
- (line 10)
-* configure.in: Written Developer Files.
- (line 9)
-* configure.in, writing: Write configure.in. (line 6)
-* configuring a canadian cross: Build and Host Options.
- (line 6)
-* cross compiler: Cross Compilation Concepts.
- (line 6)
-* cross compiler, building with: Canadian Cross. (line 6)
-* cross tools: Cross Compilation Tools.
- (line 6)
-* CY_GNU_GETTEXT in configure: FAQ. (line 19)
-* cygnus configure: Cygnus Configure. (line 6)
-* goals: Goals. (line 6)
-* history: History. (line 6)
-* host names: Configuration Names. (line 6)
-* host option: Build and Host Options.
- (line 14)
-* host system: Host and Target. (line 6)
-* host triplets: Configuration Names. (line 6)
-* HOST_CC: CCross in Make. (line 27)
-* libg++ configure: Cygnus Configure in C++ Libraries.
- (line 6)
-* libio configure: Cygnus Configure in C++ Libraries.
- (line 6)
-* libstdc++ configure: Cygnus Configure in C++ Libraries.
- (line 6)
-* Makefile: Build Files Description.
- (line 18)
-* Makefile, garbage characters: FAQ. (line 29)
-* Makefile.am: Written Developer Files.
- (line 18)
-* Makefile.am, writing: Write Makefile.am. (line 6)
-* Makefile.in: Generated Developer Files.
- (line 26)
-* multilibs: Multilibs. (line 6)
-* stamp-h: Build Files Description.
- (line 41)
-* stamp-h.in: Generated Developer Files.
- (line 54)
-* system names: Configuration Names. (line 6)
-* system types: Configuration Names. (line 6)
-* target option: Specifying the Target.
- (line 10)
-* target system: Host and Target. (line 6)
-* triplets: Configuration Names. (line 6)
-* undefined macros: FAQ. (line 12)
-
-
-
-Tag Table:
-Node: Top978
-Node: Introduction1506
-Node: Goals2588
-Node: Tools3312
-Node: History4306
-Node: Building7304
-Node: Getting Started10567
-Node: Write configure.in11080
-Node: Write Makefile.am18331
-Node: Write acconfig.h21508
-Node: Generate files23045
-Node: Getting Started Example25011
-Node: Getting Started Example 125766
-Node: Getting Started Example 227687
-Node: Getting Started Example 330682
-Node: Generate Files in Example33046
-Node: Files34136
-Node: Developer Files34747
-Node: Developer Files Picture35127
-Node: Written Developer Files36415
-Node: Generated Developer Files38967
-Node: Build Files42111
-Node: Build Files Picture42772
-Node: Build Files Description43536
-Node: Support Files45542
-Node: Configuration Names48424
-Node: Configuration Name Definition48924
-Node: Using Configuration Names51247
-Node: Cross Compilation Tools53217
-Node: Cross Compilation Concepts53908
-Node: Host and Target54876
-Node: Using the Host Type56377
-Node: Specifying the Target57726
-Node: Using the Target Type58515
-Node: Cross Tools in the Cygnus Tree61946
-Node: Host and Target Libraries63003
-Node: Target Library Configure Scripts66752
-Node: Make Targets in Cygnus Tree69844
-Node: Target libiberty71192
-Node: Canadian Cross72579
-Node: Canadian Cross Example73420
-Node: Canadian Cross Concepts74539
-Node: Build Cross Host Tools76051
-Node: Build and Host Options77003
-Node: CCross not in Cygnus Tree78789
-Node: CCross in Cygnus Tree79767
-Node: Standard Cygnus CCross80188
-Node: Cross Cygnus CCross81552
-Node: Supporting Canadian Cross84352
-Node: CCross in Configure84967
-Node: CCross in Make88135
-Node: Cygnus Configure89738
-Node: Cygnus Configure Basics90573
-Node: Cygnus Configure in C++ Libraries95251
-Node: Multilibs96258
-Node: Multilibs in gcc97303
-Node: Multilibs in Target Libraries98381
-Node: FAQ102572
-Node: Index106672
-
-End Tag Table
diff --git a/etc/standards.info b/etc/standards.info
deleted file mode 100644
index 4fc9776e594c..000000000000
--- a/etc/standards.info
+++ /dev/null
@@ -1,4930 +0,0 @@
-This is standards.info, produced by makeinfo version 4.8 from
-.././etc/standards.texi.
-
-START-INFO-DIR-ENTRY
-* Standards: (standards). GNU coding standards.
-END-INFO-DIR-ENTRY
-
- GNU Coding Standards Copyright (C) 1992, 1993, 1994, 1995, 1996,
-1997, 1998, 1999, 2000, 2001 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".
-
-
-File: standards.info, Node: Top, Next: Preface, Prev: (dir), Up: (dir)
-
-Version
-*******
-
-Last updated February 14, 2002.
-
-* Menu:
-
-* Preface:: About the GNU Coding Standards
-* Legal Issues:: Keeping Free Software Free
-* Design Advice:: General Program Design
-* Program Behavior:: Program Behavior for All Programs
-* Writing C:: Making The Best Use of C
-* Documentation:: Documenting Programs
-* Managing Releases:: The Release Process
-* References:: References to Non-Free Software or Documentation
-* Copying This Manual:: How to Make Copies of This Manual
-* Index::
-
-
-File: standards.info, Node: Preface, Next: Legal Issues, Prev: Top, Up: Top
-
-1 About the GNU Coding Standards
-********************************
-
-The GNU Coding Standards were written by Richard Stallman and other GNU
-Project volunteers. Their purpose is to make the GNU system clean,
-consistent, and easy to install. This document can also be read as a
-guide to writing portable, robust and reliable programs. It focuses on
-programs written in C, but many of the rules and principles are useful
-even if you write in another programming language. The rules often
-state reasons for writing in a certain way.
-
- This release of the GNU Coding Standards was last updated February
-14, 2002.
-
- If you did not obtain this file directly from the GNU project and
-recently, please check for a newer version. You can ftp the GNU Coding
-Standards from any GNU FTP host in the directory `/pub/gnu/standards/'.
-The GNU Coding Standards are available there in several different
-formats: `standards.text', `standards.info', and `standards.dvi', as
-well as the Texinfo "source" which is divided in two files:
-`standards.texi' and `make-stds.texi'. The GNU Coding Standards are
-also available on the GNU World Wide Web server:
-`http://www.gnu.org/prep/standards_toc.html'.
-
- Corrections or suggestions for this document should be sent to
-<bug-standards@gnu.org>. If you make a suggestion, please include a
-suggested new wording for it; our time is limited. We prefer a context
-diff to the `standards.texi' or `make-stds.texi' files, but if you
-don't have those files, please mail your suggestion anyway.
-
- These standards cover the minimum of what is important when writing a
-GNU package. Likely, the needs for additional standards will come up.
-Sometimes, you might suggest that such standards be added to this
-document. If you think your standards would be generally useful, please
-do suggest them.
-
- You should also set standards for your package on many questions not
-addressed or not firmly specified here. The most important point is to
-be self-consistent--try to stick to the conventions you pick, and try
-to document them as much as possible. That way, your program will be
-more maintainable by others.
-
-
-File: standards.info, Node: Legal Issues, Next: Design Advice, Prev: Preface, Up: Top
-
-2 Keeping Free Software Free
-****************************
-
-This node discusses how you can make sure that GNU software avoids
-legal difficulties, and other related issues.
-
-* Menu:
-
-* Reading Non-Free Code:: Referring to Proprietary Programs
-* Contributions:: Accepting Contributions
-* Trademarks:: How We Deal with Trademark Issues
-
-
-File: standards.info, Node: Reading Non-Free Code, Next: Contributions, Up: Legal Issues
-
-2.1 Referring to Proprietary Programs
-=====================================
-
-Don't in any circumstances refer to Unix source code for or during your
-work on GNU! (Or to any other proprietary programs.)
-
- If you have a vague recollection of the internals of a Unix program,
-this does not absolutely mean you can't write an imitation of it, but
-do try to organize the imitation internally along different lines,
-because this is likely to make the details of the Unix version
-irrelevant and dissimilar to your results.
-
- For example, Unix utilities were generally optimized to minimize
-memory use; if you go for speed instead, your program will be very
-different. You could keep the entire input file in core and scan it
-there instead of using stdio. Use a smarter algorithm discovered more
-recently than the Unix program. Eliminate use of temporary files. Do
-it in one pass instead of two (we did this in the assembler).
-
- Or, on the contrary, emphasize simplicity instead of speed. For some
-applications, the speed of today's computers makes simpler algorithms
-adequate.
-
- Or go for generality. For example, Unix programs often have static
-tables or fixed-size strings, which make for arbitrary limits; use
-dynamic allocation instead. Make sure your program handles NULs and
-other funny characters in the input files. Add a programming language
-for extensibility and write part of the program in that language.
-
- Or turn some parts of the program into independently usable
-libraries. Or use a simple garbage collector instead of tracking
-precisely when to free memory, or use a new GNU facility such as
-obstacks.
-
-
-File: standards.info, Node: Contributions, Next: Trademarks, Prev: Reading Non-Free Code, Up: Legal Issues
-
-2.2 Accepting Contributions
-===========================
-
-If the program you are working on is copyrighted by the Free Software
-Foundation, then when someone else sends you a piece of code to add to
-the program, we need legal papers to use it--just as we asked you to
-sign papers initially. _Each_ person who makes a nontrivial
-contribution to a program must sign some sort of legal papers in order
-for us to have clear title to the program; the main author alone is not
-enough.
-
- So, before adding in any contributions from other people, please tell
-us, so we can arrange to get the papers. Then wait until we tell you
-that we have received the signed papers, before you actually use the
-contribution.
-
- This applies both before you release the program and afterward. If
-you receive diffs to fix a bug, and they make significant changes, we
-need legal papers for that change.
-
- This also applies to comments and documentation files. For copyright
-law, comments and code are just text. Copyright applies to all kinds of
-text, so we need legal papers for all kinds.
-
- We know it is frustrating to ask for legal papers; it's frustrating
-for us as well. But if you don't wait, you are going out on a limb--for
-example, what if the contributor's employer won't sign a disclaimer?
-You might have to take that code out again!
-
- You don't need papers for changes of a few lines here or there, since
-they are not significant for copyright purposes. Also, you don't need
-papers if all you get from the suggestion is some ideas, not actual code
-which you use. For example, if someone send you one implementation, but
-you write a different implementation of the same idea, you don't need to
-get papers.
-
- The very worst thing is if you forget to tell us about the other
-contributor. We could be very embarrassed in court some day as a
-result.
-
- We have more detailed advice for maintainers of programs; if you have
-reached the stage of actually maintaining a program for GNU (whether
-released or not), please ask us for a copy.
-
-
-File: standards.info, Node: Trademarks, Prev: Contributions, Up: Legal Issues
-
-2.3 Trademarks
-==============
-
-Please do not include any trademark acknowledgements in GNU software
-packages or documentation.
-
- Trademark acknowledgements are the statements that such-and-such is a
-trademark of so-and-so. The GNU Project has no objection to the basic
-idea of trademarks, but these acknowledgements feel like kowtowing, so
-we don't use them. There is no legal requirement for them.
-
- What is legally required, as regards other people's trademarks, is to
-avoid using them in ways which a reader might read as naming or labeling
-our own programs or activities. For example, since "Objective C" is
-(or at least was) a trademark, we made sure to say that we provide a
-"compiler for the Objective C language" rather than an "Objective C
-compiler". The latter is meant to be short for the former, but it does
-not explicitly state the relationship, so it could be misinterpreted as
-using "Objective C" as a label for the compiler rather than for the
-language.
-
-
-File: standards.info, Node: Design Advice, Next: Program Behavior, Prev: Legal Issues, Up: Top
-
-3 General Program Design
-************************
-
-This node discusses some of the issues you should take into account
-when designing your program.
-
-* Menu:
-
-* Source Language:: Which languges to use.
-* Compatibility:: Compatibility with other implementations
-* Using Extensions:: Using non-standard features
-* Standard C:: Using Standard C features
-* Conditional Compilation:: Compiling Code Only If A Conditional is True
-
-
-File: standards.info, Node: Source Language, Next: Compatibility, Up: Design Advice
-
-3.1 Which Languages to Use
-==========================
-
-When you want to use a language that gets compiled and runs at high
-speed, the best language to use is C. Using another language is like
-using a non-standard feature: it will cause trouble for users. Even if
-GCC supports the other language, users may find it inconvenient to have
-to install the compiler for that other language in order to build your
-program. For example, if you write your program in C++, people will
-have to install the GNU C++ compiler in order to compile your program.
-
- C has one other advantage over C++ and other compiled languages: more
-people know C, so more people will find it easy to read and modify the
-program if it is written in C.
-
- So in general it is much better to use C, rather than the comparable
-alternatives.
-
- But there are two exceptions to that conclusion:
-
- * It is no problem to use another language to write a tool
- specifically intended for use with that language. That is because
- the only people who want to build the tool will be those who have
- installed the other language anyway.
-
- * If an application is of interest only to a narrow part of the
- community, then the question of which language it is written in
- has less effect on other people, so you may as well please
- yourself.
-
- Many programs are designed to be extensible: they include an
-interpreter for a language that is higher level than C. Often much of
-the program is written in that language, too. The Emacs editor
-pioneered this technique.
-
- The standard extensibility interpreter for GNU software is GUILE,
-which implements the language Scheme (an especially clean and simple
-dialect of Lisp). `http://www.gnu.org/software/guile/'. We don't
-reject programs written in other "scripting languages" such as Perl and
-Python, but using GUILE is very important for the overall consistency of
-the GNU system.
-
-
-File: standards.info, Node: Compatibility, Next: Using Extensions, Prev: Source Language, Up: Design Advice
-
-3.2 Compatibility with Other Implementations
-============================================
-
-With occasional exceptions, utility programs and libraries for GNU
-should be upward compatible with those in Berkeley Unix, and upward
-compatible with Standard C if Standard C specifies their behavior, and
-upward compatible with POSIX if POSIX specifies their behavior.
-
- When these standards conflict, it is useful to offer compatibility
-modes for each of them.
-
- Standard C and POSIX prohibit many kinds of extensions. Feel free
-to make the extensions anyway, and include a `--ansi', `--posix', or
-`--compatible' option to turn them off. However, if the extension has
-a significant chance of breaking any real programs or scripts, then it
-is not really upward compatible. So you should try to redesign its
-interface to make it upward compatible.
-
- Many GNU programs suppress extensions that conflict with POSIX if the
-environment variable `POSIXLY_CORRECT' is defined (even if it is
-defined with a null value). Please make your program recognize this
-variable if appropriate.
-
- When a feature is used only by users (not by programs or command
-files), and it is done poorly in Unix, feel free to replace it
-completely with something totally different and better. (For example,
-`vi' is replaced with Emacs.) But it is nice to offer a compatible
-feature as well. (There is a free `vi' clone, so we offer it.)
-
- Additional useful features are welcome regardless of whether there
-is any precedent for them.
-
-
-File: standards.info, Node: Using Extensions, Next: Standard C, Prev: Compatibility, Up: Design Advice
-
-3.3 Using Non-standard Features
-===============================
-
-Many GNU facilities that already exist support a number of convenient
-extensions over the comparable Unix facilities. Whether to use these
-extensions in implementing your program is a difficult question.
-
- On the one hand, using the extensions can make a cleaner program.
-On the other hand, people will not be able to build the program unless
-the other GNU tools are available. This might cause the program to
-work on fewer kinds of machines.
-
- With some extensions, it might be easy to provide both alternatives.
-For example, you can define functions with a "keyword" `INLINE' and
-define that as a macro to expand into either `inline' or nothing,
-depending on the compiler.
-
- In general, perhaps it is best not to use the extensions if you can
-straightforwardly do without them, but to use the extensions if they
-are a big improvement.
-
- An exception to this rule are the large, established programs (such
-as Emacs) which run on a great variety of systems. Using GNU
-extensions in such programs would make many users unhappy, so we don't
-do that.
-
- Another exception is for programs that are used as part of
-compilation: anything that must be compiled with other compilers in
-order to bootstrap the GNU compilation facilities. If these require
-the GNU compiler, then no one can compile them without having them
-installed already. That would be extremely troublesome in certain
-cases.
-
-
-File: standards.info, Node: Standard C, Next: Conditional Compilation, Prev: Using Extensions, Up: Design Advice
-
-3.4 Standard C and Pre-Standard C
-=================================
-
-1989 Standard C is widespread enough now that it is ok to use its
-features in new programs. There is one exception: do not ever use the
-"trigraph" feature of Standard C.
-
- 1999 Standard C is not widespread yet, so please do not require its
-features in programs. It is ok to use its features if they are present.
-
- However, it is easy to support pre-standard compilers in most
-programs, so if you know how to do that, feel free. If a program you
-are maintaining has such support, you should try to keep it working.
-
- To support pre-standard C, instead of writing function definitions in
-standard prototype form,
-
- int
- foo (int x, int y)
- ...
-
-write the definition in pre-standard style like this,
-
- int
- foo (x, y)
- int x, y;
- ...
-
-and use a separate declaration to specify the argument prototype:
-
- int foo (int, int);
-
- You need such a declaration anyway, in a header file, to get the
-benefit of prototypes in all the files where the function is called.
-And once you have the declaration, you normally lose nothing by writing
-the function definition in the pre-standard style.
-
- This technique does not work for integer types narrower than `int'.
-If you think of an argument as being of a type narrower than `int',
-declare it as `int' instead.
-
- There are a few special cases where this technique is hard to use.
-For example, if a function argument needs to hold the system type
-`dev_t', you run into trouble, because `dev_t' is shorter than `int' on
-some machines; but you cannot use `int' instead, because `dev_t' is
-wider than `int' on some machines. There is no type you can safely use
-on all machines in a non-standard definition. The only way to support
-non-standard C and pass such an argument is to check the width of
-`dev_t' using Autoconf and choose the argument type accordingly. This
-may not be worth the trouble.
-
- In order to support pre-standard compilers that do not recognize
-prototypes, you may want to use a preprocessor macro like this:
-
- /* Declare the prototype for a general external function. */
- #if defined (__STDC__) || defined (WINDOWSNT)
- #define P_(proto) proto
- #else
- #define P_(proto) ()
- #endif
-
-
-File: standards.info, Node: Conditional Compilation, Prev: Standard C, Up: Design Advice
-
-3.5 Conditional Compilation
-===========================
-
-When supporting configuration options already known when building your
-program we prefer using `if (... )' over conditional compilation, as in
-the former case the compiler is able to perform more extensive checking
-of all possible code paths.
-
- For example, please write
-
- if (HAS_FOO)
- ...
- else
- ...
-
- instead of:
-
- #ifdef HAS_FOO
- ...
- #else
- ...
- #endif
-
- A modern compiler such as GCC will generate exactly the same code in
-both cases, and we have been using similar techniques with good success
-in several projects.
-
- While this is not a silver bullet solving all portability problems,
-following this policy would have saved the GCC project alone many person
-hours if not days per year.
-
- In the case of function-like macros like `REVERSIBLE_CC_MODE' in GCC
-which cannot be simply used in `if( ...)' statements, there is an easy
-workaround. Simply introduce another macro `HAS_REVERSIBLE_CC_MODE' as
-in the following example:
-
- #ifdef REVERSIBLE_CC_MODE
- #define HAS_REVERSIBLE_CC_MODE 1
- #else
- #define HAS_REVERSIBLE_CC_MODE 0
- #endif
-
-
-File: standards.info, Node: Program Behavior, Next: Writing C, Prev: Design Advice, Up: Top
-
-4 Program Behavior for All Programs
-***********************************
-
-This node describes conventions for writing robust software. It also
-describes general standards for error messages, the command line
-interface, and how libraries should behave.
-
-* Menu:
-
-* Semantics:: Writing robust programs
-* Libraries:: Library behavior
-* Errors:: Formatting error messages
-* User Interfaces:: Standards about interfaces generally
-* Graphical Interfaces:: Standards for graphical interfaces
-* Command-Line Interfaces:: Standards for command line interfaces
-* Option Table:: Table of long options
-* Memory Usage:: When and how to care about memory needs
-* File Usage:: Which files to use, and where
-
-
-File: standards.info, Node: Semantics, Next: Libraries, Up: Program Behavior
-
-4.1 Writing Robust Programs
-===========================
-
-Avoid arbitrary limits on the length or number of _any_ data structure,
-including file names, lines, files, and symbols, by allocating all data
-structures dynamically. In most Unix utilities, "long lines are
-silently truncated". This is not acceptable in a GNU utility.
-
- Utilities reading files should not drop NUL characters, or any other
-nonprinting characters _including those with codes above 0177_. The
-only sensible exceptions would be utilities specifically intended for
-interface to certain types of terminals or printers that can't handle
-those characters. Whenever possible, try to make programs work
-properly with sequences of bytes that represent multibyte characters,
-using encodings such as UTF-8 and others.
-
- Check every system call for an error return, unless you know you
-wish to ignore errors. Include the system error text (from `perror' or
-equivalent) in _every_ error message resulting from a failing system
-call, as well as the name of the file if any and the name of the
-utility. Just "cannot open foo.c" or "stat failed" is not sufficient.
-
- Check every call to `malloc' or `realloc' to see if it returned
-zero. Check `realloc' even if you are making the block smaller; in a
-system that rounds block sizes to a power of 2, `realloc' may get a
-different block if you ask for less space.
-
- In Unix, `realloc' can destroy the storage block if it returns zero.
-GNU `realloc' does not have this bug: if it fails, the original block
-is unchanged. Feel free to assume the bug is fixed. If you wish to
-run your program on Unix, and wish to avoid lossage in this case, you
-can use the GNU `malloc'.
-
- You must expect `free' to alter the contents of the block that was
-freed. Anything you want to fetch from the block, you must fetch before
-calling `free'.
-
- If `malloc' fails in a noninteractive program, make that a fatal
-error. In an interactive program (one that reads commands from the
-user), it is better to abort the command and return to the command
-reader loop. This allows the user to kill other processes to free up
-virtual memory, and then try the command again.
-
- Use `getopt_long' to decode arguments, unless the argument syntax
-makes this unreasonable.
-
- When static storage is to be written in during program execution, use
-explicit C code to initialize it. Reserve C initialized declarations
-for data that will not be changed.
-
- Try to avoid low-level interfaces to obscure Unix data structures
-(such as file directories, utmp, or the layout of kernel memory), since
-these are less likely to work compatibly. If you need to find all the
-files in a directory, use `readdir' or some other high-level interface.
-These are supported compatibly by GNU.
-
- The preferred signal handling facilities are the BSD variant of
-`signal', and the POSIX `sigaction' function; the alternative USG
-`signal' interface is an inferior design.
-
- Nowadays, using the POSIX signal functions may be the easiest way to
-make a program portable. If you use `signal', then on GNU/Linux
-systems running GNU libc version 1, you should include `bsd/signal.h'
-instead of `signal.h', so as to get BSD behavior. It is up to you
-whether to support systems where `signal' has only the USG behavior, or
-give up on them.
-
- In error checks that detect "impossible" conditions, just abort.
-There is usually no point in printing any message. These checks
-indicate the existence of bugs. Whoever wants to fix the bugs will have
-to read the source code and run a debugger. So explain the problem with
-comments in the source. The relevant data will be in variables, which
-are easy to examine with the debugger, so there is no point moving them
-elsewhere.
-
- Do not use a count of errors as the exit status for a program.
-_That does not work_, because exit status values are limited to 8 bits
-(0 through 255). A single run of the program might have 256 errors; if
-you try to return 256 as the exit status, the parent process will see 0
-as the status, and it will appear that the program succeeded.
-
- If you make temporary files, check the `TMPDIR' environment
-variable; if that variable is defined, use the specified directory
-instead of `/tmp'.
-
- In addition, be aware that there is a possible security problem when
-creating temporary files in world-writable directories. In C, you can
-avoid this problem by creating temporary files in this manner:
-
- fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0600);
-
-or by using the `mkstemps' function from libiberty.
-
- In bash, use `set -C' to avoid this problem.
-
-
-File: standards.info, Node: Libraries, Next: Errors, Prev: Semantics, Up: Program Behavior
-
-4.2 Library Behavior
-====================
-
-Try to make library functions reentrant. If they need to do dynamic
-storage allocation, at least try to avoid any nonreentrancy aside from
-that of `malloc' itself.
-
- Here are certain name conventions for libraries, to avoid name
-conflicts.
-
- Choose a name prefix for the library, more than two characters long.
-All external function and variable names should start with this prefix.
-In addition, there should only be one of these in any given library
-member. This usually means putting each one in a separate source file.
-
- An exception can be made when two external symbols are always used
-together, so that no reasonable program could use one without the
-other; then they can both go in the same file.
-
- External symbols that are not documented entry points for the user
-should have names beginning with `_'. The `_' should be followed by
-the chosen name prefix for the library, to prevent collisions with
-other libraries. These can go in the same files with user entry points
-if you like.
-
- Static functions and variables can be used as you like and need not
-fit any naming convention.
-
-
-File: standards.info, Node: Errors, Next: User Interfaces, Prev: Libraries, Up: Program Behavior
-
-4.3 Formatting Error Messages
-=============================
-
-Error messages from compilers should look like this:
-
- SOURCE-FILE-NAME:LINENO: MESSAGE
-
-If you want to mention the column number, use this format:
-
- SOURCE-FILE-NAME:LINENO:COLUMN: MESSAGE
-
-Line numbers should start from 1 at the beginning of the file, and
-column numbers should start from 1 at the beginning of the line. (Both
-of these conventions are chosen for compatibility.) Calculate column
-numbers assuming that space and all ASCII printing characters have
-equal width, and assuming tab stops every 8 columns.
-
- Error messages from other noninteractive programs should look like
-this:
-
- PROGRAM:SOURCE-FILE-NAME:LINENO: MESSAGE
-
-when there is an appropriate source file, or like this:
-
- PROGRAM: MESSAGE
-
-when there is no relevant source file.
-
- If you want to mention the column number, use this format:
-
- PROGRAM:SOURCE-FILE-NAME:LINENO:COLUMN: MESSAGE
-
- In an interactive program (one that is reading commands from a
-terminal), it is better not to include the program name in an error
-message. The place to indicate which program is running is in the
-prompt or with the screen layout. (When the same program runs with
-input from a source other than a terminal, it is not interactive and
-would do best to print error messages using the noninteractive style.)
-
- The string MESSAGE should not begin with a capital letter when it
-follows a program name and/or file name. Also, it should not end with
-a period.
-
- Error messages from interactive programs, and other messages such as
-usage messages, should start with a capital letter. But they should not
-end with a period.
-
-
-File: standards.info, Node: User Interfaces, Next: Graphical Interfaces, Prev: Errors, Up: Program Behavior
-
-4.4 Standards for Interfaces Generally
-======================================
-
-Please don't make the behavior of a utility depend on the name used to
-invoke it. It is useful sometimes to make a link to a utility with a
-different name, and that should not change what it does.
-
- Instead, use a run time option or a compilation switch or both to
-select among the alternate behaviors.
-
- Likewise, please don't make the behavior of the program depend on the
-type of output device it is used with. Device independence is an
-important principle of the system's design; do not compromise it merely
-to save someone from typing an option now and then. (Variation in error
-message syntax when using a terminal is ok, because that is a side issue
-that people do not depend on.)
-
- If you think one behavior is most useful when the output is to a
-terminal, and another is most useful when the output is a file or a
-pipe, then it is usually best to make the default behavior the one that
-is useful with output to a terminal, and have an option for the other
-behavior.
-
- Compatibility requires certain programs to depend on the type of
-output device. It would be disastrous if `ls' or `sh' did not do so in
-the way all users expect. In some of these cases, we supplement the
-program with a preferred alternate version that does not depend on the
-output device type. For example, we provide a `dir' program much like
-`ls' except that its default output format is always multi-column
-format.
-
-
-File: standards.info, Node: Graphical Interfaces, Next: Command-Line Interfaces, Prev: User Interfaces, Up: Program Behavior
-
-4.5 Standards for Graphical Interfaces
-======================================
-
-When you write a program that provides a graphical user interface,
-please make it work with X Windows and the GTK toolkit unless the
-functionality specifically requires some alternative (for example,
-"displaying jpeg images while in console mode").
-
- In addition, please provide a command-line interface to control the
-functionality. (In many cases, the graphical user interface can be a
-separate program which invokes the command-line program.) This is so
-that the same jobs can be done from scripts.
-
- Please also consider providing a CORBA interface (for use from
-GNOME), a library interface (for use from C), and perhaps a
-keyboard-driven console interface (for use by users from console mode).
-Once you are doing the work to provide the functionality and the
-graphical interface, these won't be much extra work.
-
-
-File: standards.info, Node: Command-Line Interfaces, Next: Option Table, Prev: Graphical Interfaces, Up: Program Behavior
-
-4.6 Standards for Command Line Interfaces
-=========================================
-
-It is a good idea to follow the POSIX guidelines for the command-line
-options of a program. The easiest way to do this is to use `getopt' to
-parse them. Note that the GNU version of `getopt' will normally permit
-options anywhere among the arguments unless the special argument `--'
-is used. This is not what POSIX specifies; it is a GNU extension.
-
- Please define long-named options that are equivalent to the
-single-letter Unix-style options. We hope to make GNU more user
-friendly this way. This is easy to do with the GNU function
-`getopt_long'.
-
- One of the advantages of long-named options is that they can be
-consistent from program to program. For example, users should be able
-to expect the "verbose" option of any GNU program which has one, to be
-spelled precisely `--verbose'. To achieve this uniformity, look at the
-table of common long-option names when you choose the option names for
-your program (*note Option Table::).
-
- It is usually a good idea for file names given as ordinary arguments
-to be input files only; any output files would be specified using
-options (preferably `-o' or `--output'). Even if you allow an output
-file name as an ordinary argument for compatibility, try to provide an
-option as another way to specify it. This will lead to more consistency
-among GNU utilities, and fewer idiosyncracies for users to remember.
-
- All programs should support two standard options: `--version' and
-`--help'.
-
-`--version'
- This option should direct the program to print information about
- its name, version, origin and legal status, all on standard
- output, and then exit successfully. Other options and arguments
- should be ignored once this is seen, and the program should not
- perform its normal function.
-
- The first line is meant to be easy for a program to parse; the
- version number proper starts after the last space. In addition,
- it contains the canonical name for this program, in this format:
-
- GNU Emacs 19.30
-
- The program's name should be a constant string; _don't_ compute it
- from `argv[0]'. The idea is to state the standard or canonical
- name for the program, not its file name. There are other ways to
- find out the precise file name where a command is found in `PATH'.
-
- If the program is a subsidiary part of a larger package, mention
- the package name in parentheses, like this:
-
- emacsserver (GNU Emacs) 19.30
-
- If the package has a version number which is different from this
- program's version number, you can mention the package version
- number just before the close-parenthesis.
-
- If you *need* to mention the version numbers of libraries which
- are distributed separately from the package which contains this
- program, you can do so by printing an additional line of version
- info for each library you want to mention. Use the same format
- for these lines as for the first line.
-
- Please do not mention all of the libraries that the program uses
- "just for completeness"--that would produce a lot of unhelpful
- clutter. Please mention library version numbers only if you find
- in practice that they are very important to you in debugging.
-
- The following line, after the version number line or lines, should
- be a copyright notice. If more than one copyright notice is
- called for, put each on a separate line.
-
- Next should follow a brief statement that the program is free
- software, and that users are free to copy and change it on certain
- conditions. If the program is covered by the GNU GPL, say so
- here. Also mention that there is no warranty, to the extent
- permitted by law.
-
- It is ok to finish the output with a list of the major authors of
- the program, as a way of giving credit.
-
- Here's an example of output that follows these rules:
-
- GNU Emacs 19.34.5
- Copyright (C) 1996 Free Software Foundation, Inc.
- GNU Emacs comes with NO WARRANTY,
- to the extent permitted by law.
- You may redistribute copies of GNU Emacs
- under the terms of the GNU General Public License.
- For more information about these matters,
- see the files named COPYING.
-
- You should adapt this to your program, of course, filling in the
- proper year, copyright holder, name of program, and the references
- to distribution terms, and changing the rest of the wording as
- necessary.
-
- This copyright notice only needs to mention the most recent year in
- which changes were made--there's no need to list the years for
- previous versions' changes. You don't have to mention the name of
- the program in these notices, if that is inconvenient, since it
- appeared in the first line.
-
- Translations of the above lines must preserve the validity of the
- copyright notices (*note Internationalization::). If the
- translation's character set supports it, the `(C)' should be
- replaced with the copyright symbol, as follows:
-
- (the official copyright symbol, which is the letter C in a circle);
-
- Write the word "Copyright" exactly like that, in English. Do not
- translate it into another language. International treaties
- recognize the English word "Copyright"; translations into other
- languages do not have legal significance.
-
-`--help'
- This option should output brief documentation for how to invoke the
- program, on standard output, then exit successfully. Other
- options and arguments should be ignored once this is seen, and the
- program should not perform its normal function.
-
- Near the end of the `--help' option's output there should be a line
- that says where to mail bug reports. It should have this format:
-
- Report bugs to MAILING-ADDRESS.
-
-
-File: standards.info, Node: Option Table, Next: Memory Usage, Prev: Command-Line Interfaces, Up: Program Behavior
-
-4.7 Table of Long Options
-=========================
-
-Here is a table of long options used by GNU programs. It is surely
-incomplete, but we aim to list all the options that a new program might
-want to be compatible with. If you use names not already in the table,
-please send <bug-standards@gnu.org> a list of them, with their
-meanings, so we can update the table.
-
-`after-date'
- `-N' in `tar'.
-
-`all'
- `-a' in `du', `ls', `nm', `stty', `uname', and `unexpand'.
-
-`all-text'
- `-a' in `diff'.
-
-`almost-all'
- `-A' in `ls'.
-
-`append'
- `-a' in `etags', `tee', `time'; `-r' in `tar'.
-
-`archive'
- `-a' in `cp'.
-
-`archive-name'
- `-n' in `shar'.
-
-`arglength'
- `-l' in `m4'.
-
-`ascii'
- `-a' in `diff'.
-
-`assign'
- `-v' in `gawk'.
-
-`assume-new'
- `-W' in Make.
-
-`assume-old'
- `-o' in Make.
-
-`auto-check'
- `-a' in `recode'.
-
-`auto-pager'
- `-a' in `wdiff'.
-
-`auto-reference'
- `-A' in `ptx'.
-
-`avoid-wraps'
- `-n' in `wdiff'.
-
-`background'
- For server programs, run in the background.
-
-`backward-search'
- `-B' in `ctags'.
-
-`basename'
- `-f' in `shar'.
-
-`batch'
- Used in GDB.
-
-`baud'
- Used in GDB.
-
-`before'
- `-b' in `tac'.
-
-`binary'
- `-b' in `cpio' and `diff'.
-
-`bits-per-code'
- `-b' in `shar'.
-
-`block-size'
- Used in `cpio' and `tar'.
-
-`blocks'
- `-b' in `head' and `tail'.
-
-`break-file'
- `-b' in `ptx'.
-
-`brief'
- Used in various programs to make output shorter.
-
-`bytes'
- `-c' in `head', `split', and `tail'.
-
-`c++'
- `-C' in `etags'.
-
-`catenate'
- `-A' in `tar'.
-
-`cd'
- Used in various programs to specify the directory to use.
-
-`changes'
- `-c' in `chgrp' and `chown'.
-
-`classify'
- `-F' in `ls'.
-
-`colons'
- `-c' in `recode'.
-
-`command'
- `-c' in `su'; `-x' in GDB.
-
-`compare'
- `-d' in `tar'.
-
-`compat'
- Used in `gawk'.
-
-`compress'
- `-Z' in `tar' and `shar'.
-
-`concatenate'
- `-A' in `tar'.
-
-`confirmation'
- `-w' in `tar'.
-
-`context'
- Used in `diff'.
-
-`copyleft'
- `-W copyleft' in `gawk'.
-
-`copyright'
- `-C' in `ptx', `recode', and `wdiff'; `-W copyright' in `gawk'.
-
-`core'
- Used in GDB.
-
-`count'
- `-q' in `who'.
-
-`count-links'
- `-l' in `du'.
-
-`create'
- Used in `tar' and `cpio'.
-
-`cut-mark'
- `-c' in `shar'.
-
-`cxref'
- `-x' in `ctags'.
-
-`date'
- `-d' in `touch'.
-
-`debug'
- `-d' in Make and `m4'; `-t' in Bison.
-
-`define'
- `-D' in `m4'.
-
-`defines'
- `-d' in Bison and `ctags'.
-
-`delete'
- `-D' in `tar'.
-
-`dereference'
- `-L' in `chgrp', `chown', `cpio', `du', `ls', and `tar'.
-
-`dereference-args'
- `-D' in `du'.
-
-`device'
- Specify an I/O device (special file name).
-
-`diacritics'
- `-d' in `recode'.
-
-`dictionary-order'
- `-d' in `look'.
-
-`diff'
- `-d' in `tar'.
-
-`digits'
- `-n' in `csplit'.
-
-`directory'
- Specify the directory to use, in various programs. In `ls', it
- means to show directories themselves rather than their contents.
- In `rm' and `ln', it means to not treat links to directories
- specially.
-
-`discard-all'
- `-x' in `strip'.
-
-`discard-locals'
- `-X' in `strip'.
-
-`dry-run'
- `-n' in Make.
-
-`ed'
- `-e' in `diff'.
-
-`elide-empty-files'
- `-z' in `csplit'.
-
-`end-delete'
- `-x' in `wdiff'.
-
-`end-insert'
- `-z' in `wdiff'.
-
-`entire-new-file'
- `-N' in `diff'.
-
-`environment-overrides'
- `-e' in Make.
-
-`eof'
- `-e' in `xargs'.
-
-`epoch'
- Used in GDB.
-
-`error-limit'
- Used in `makeinfo'.
-
-`error-output'
- `-o' in `m4'.
-
-`escape'
- `-b' in `ls'.
-
-`exclude-from'
- `-X' in `tar'.
-
-`exec'
- Used in GDB.
-
-`exit'
- `-x' in `xargs'.
-
-`exit-0'
- `-e' in `unshar'.
-
-`expand-tabs'
- `-t' in `diff'.
-
-`expression'
- `-e' in `sed'.
-
-`extern-only'
- `-g' in `nm'.
-
-`extract'
- `-i' in `cpio'; `-x' in `tar'.
-
-`faces'
- `-f' in `finger'.
-
-`fast'
- `-f' in `su'.
-
-`fatal-warnings'
- `-E' in `m4'.
-
-`file'
- `-f' in `info', `gawk', Make, `mt', and `tar'; `-n' in `sed'; `-r'
- in `touch'.
-
-`field-separator'
- `-F' in `gawk'.
-
-`file-prefix'
- `-b' in Bison.
-
-`file-type'
- `-F' in `ls'.
-
-`files-from'
- `-T' in `tar'.
-
-`fill-column'
- Used in `makeinfo'.
-
-`flag-truncation'
- `-F' in `ptx'.
-
-`fixed-output-files'
- `-y' in Bison.
-
-`follow'
- `-f' in `tail'.
-
-`footnote-style'
- Used in `makeinfo'.
-
-`force'
- `-f' in `cp', `ln', `mv', and `rm'.
-
-`force-prefix'
- `-F' in `shar'.
-
-`foreground'
- For server programs, run in the foreground; in other words, don't
- do anything special to run the server in the background.
-
-`format'
- Used in `ls', `time', and `ptx'.
-
-`freeze-state'
- `-F' in `m4'.
-
-`fullname'
- Used in GDB.
-
-`gap-size'
- `-g' in `ptx'.
-
-`get'
- `-x' in `tar'.
-
-`graphic'
- `-i' in `ul'.
-
-`graphics'
- `-g' in `recode'.
-
-`group'
- `-g' in `install'.
-
-`gzip'
- `-z' in `tar' and `shar'.
-
-`hashsize'
- `-H' in `m4'.
-
-`header'
- `-h' in `objdump' and `recode'
-
-`heading'
- `-H' in `who'.
-
-`help'
- Used to ask for brief usage information.
-
-`here-delimiter'
- `-d' in `shar'.
-
-`hide-control-chars'
- `-q' in `ls'.
-
-`html'
- In `makeinfo', output HTML.
-
-`idle'
- `-u' in `who'.
-
-`ifdef'
- `-D' in `diff'.
-
-`ignore'
- `-I' in `ls'; `-x' in `recode'.
-
-`ignore-all-space'
- `-w' in `diff'.
-
-`ignore-backups'
- `-B' in `ls'.
-
-`ignore-blank-lines'
- `-B' in `diff'.
-
-`ignore-case'
- `-f' in `look' and `ptx'; `-i' in `diff' and `wdiff'.
-
-`ignore-errors'
- `-i' in Make.
-
-`ignore-file'
- `-i' in `ptx'.
-
-`ignore-indentation'
- `-I' in `etags'.
-
-`ignore-init-file'
- `-f' in Oleo.
-
-`ignore-interrupts'
- `-i' in `tee'.
-
-`ignore-matching-lines'
- `-I' in `diff'.
-
-`ignore-space-change'
- `-b' in `diff'.
-
-`ignore-zeros'
- `-i' in `tar'.
-
-`include'
- `-i' in `etags'; `-I' in `m4'.
-
-`include-dir'
- `-I' in Make.
-
-`incremental'
- `-G' in `tar'.
-
-`info'
- `-i', `-l', and `-m' in Finger.
-
-`init-file'
- In some programs, specify the name of the file to read as the
- user's init file.
-
-`initial'
- `-i' in `expand'.
-
-`initial-tab'
- `-T' in `diff'.
-
-`inode'
- `-i' in `ls'.
-
-`interactive'
- `-i' in `cp', `ln', `mv', `rm'; `-e' in `m4'; `-p' in `xargs';
- `-w' in `tar'.
-
-`intermix-type'
- `-p' in `shar'.
-
-`iso-8601'
- Used in `date'
-
-`jobs'
- `-j' in Make.
-
-`just-print'
- `-n' in Make.
-
-`keep-going'
- `-k' in Make.
-
-`keep-files'
- `-k' in `csplit'.
-
-`kilobytes'
- `-k' in `du' and `ls'.
-
-`language'
- `-l' in `etags'.
-
-`less-mode'
- `-l' in `wdiff'.
-
-`level-for-gzip'
- `-g' in `shar'.
-
-`line-bytes'
- `-C' in `split'.
-
-`lines'
- Used in `split', `head', and `tail'.
-
-`link'
- `-l' in `cpio'.
-
-`lint'
-`lint-old'
- Used in `gawk'.
-
-`list'
- `-t' in `cpio'; `-l' in `recode'.
-
-`list'
- `-t' in `tar'.
-
-`literal'
- `-N' in `ls'.
-
-`load-average'
- `-l' in Make.
-
-`login'
- Used in `su'.
-
-`machine'
- No listing of which programs already use this; someone should
- check to see if any actually do, and tell <gnu@gnu.org>.
-
-`macro-name'
- `-M' in `ptx'.
-
-`mail'
- `-m' in `hello' and `uname'.
-
-`make-directories'
- `-d' in `cpio'.
-
-`makefile'
- `-f' in Make.
-
-`mapped'
- Used in GDB.
-
-`max-args'
- `-n' in `xargs'.
-
-`max-chars'
- `-n' in `xargs'.
-
-`max-lines'
- `-l' in `xargs'.
-
-`max-load'
- `-l' in Make.
-
-`max-procs'
- `-P' in `xargs'.
-
-`mesg'
- `-T' in `who'.
-
-`message'
- `-T' in `who'.
-
-`minimal'
- `-d' in `diff'.
-
-`mixed-uuencode'
- `-M' in `shar'.
-
-`mode'
- `-m' in `install', `mkdir', and `mkfifo'.
-
-`modification-time'
- `-m' in `tar'.
-
-`multi-volume'
- `-M' in `tar'.
-
-`name-prefix'
- `-a' in Bison.
-
-`nesting-limit'
- `-L' in `m4'.
-
-`net-headers'
- `-a' in `shar'.
-
-`new-file'
- `-W' in Make.
-
-`no-builtin-rules'
- `-r' in Make.
-
-`no-character-count'
- `-w' in `shar'.
-
-`no-check-existing'
- `-x' in `shar'.
-
-`no-common'
- `-3' in `wdiff'.
-
-`no-create'
- `-c' in `touch'.
-
-`no-defines'
- `-D' in `etags'.
-
-`no-deleted'
- `-1' in `wdiff'.
-
-`no-dereference'
- `-d' in `cp'.
-
-`no-inserted'
- `-2' in `wdiff'.
-
-`no-keep-going'
- `-S' in Make.
-
-`no-lines'
- `-l' in Bison.
-
-`no-piping'
- `-P' in `shar'.
-
-`no-prof'
- `-e' in `gprof'.
-
-`no-regex'
- `-R' in `etags'.
-
-`no-sort'
- `-p' in `nm'.
-
-`no-split'
- Used in `makeinfo'.
-
-`no-static'
- `-a' in `gprof'.
-
-`no-time'
- `-E' in `gprof'.
-
-`no-timestamp'
- `-m' in `shar'.
-
-`no-validate'
- Used in `makeinfo'.
-
-`no-wait'
- Used in `emacsclient'.
-
-`no-warn'
- Used in various programs to inhibit warnings.
-
-`node'
- `-n' in `info'.
-
-`nodename'
- `-n' in `uname'.
-
-`nonmatching'
- `-f' in `cpio'.
-
-`nstuff'
- `-n' in `objdump'.
-
-`null'
- `-0' in `xargs'.
-
-`number'
- `-n' in `cat'.
-
-`number-nonblank'
- `-b' in `cat'.
-
-`numeric-sort'
- `-n' in `nm'.
-
-`numeric-uid-gid'
- `-n' in `cpio' and `ls'.
-
-`nx'
- Used in GDB.
-
-`old-archive'
- `-o' in `tar'.
-
-`old-file'
- `-o' in Make.
-
-`one-file-system'
- `-l' in `tar', `cp', and `du'.
-
-`only-file'
- `-o' in `ptx'.
-
-`only-prof'
- `-f' in `gprof'.
-
-`only-time'
- `-F' in `gprof'.
-
-`options'
- `-o' in `getopt', `fdlist', `fdmount', `fdmountd', and `fdumount'.
-
-`output'
- In various programs, specify the output file name.
-
-`output-prefix'
- `-o' in `shar'.
-
-`override'
- `-o' in `rm'.
-
-`overwrite'
- `-c' in `unshar'.
-
-`owner'
- `-o' in `install'.
-
-`paginate'
- `-l' in `diff'.
-
-`paragraph-indent'
- Used in `makeinfo'.
-
-`parents'
- `-p' in `mkdir' and `rmdir'.
-
-`pass-all'
- `-p' in `ul'.
-
-`pass-through'
- `-p' in `cpio'.
-
-`port'
- `-P' in `finger'.
-
-`portability'
- `-c' in `cpio' and `tar'.
-
-`posix'
- Used in `gawk'.
-
-`prefix-builtins'
- `-P' in `m4'.
-
-`prefix'
- `-f' in `csplit'.
-
-`preserve'
- Used in `tar' and `cp'.
-
-`preserve-environment'
- `-p' in `su'.
-
-`preserve-modification-time'
- `-m' in `cpio'.
-
-`preserve-order'
- `-s' in `tar'.
-
-`preserve-permissions'
- `-p' in `tar'.
-
-`print'
- `-l' in `diff'.
-
-`print-chars'
- `-L' in `cmp'.
-
-`print-data-base'
- `-p' in Make.
-
-`print-directory'
- `-w' in Make.
-
-`print-file-name'
- `-o' in `nm'.
-
-`print-symdefs'
- `-s' in `nm'.
-
-`printer'
- `-p' in `wdiff'.
-
-`prompt'
- `-p' in `ed'.
-
-`proxy'
- Specify an HTTP proxy.
-
-`query-user'
- `-X' in `shar'.
-
-`question'
- `-q' in Make.
-
-`quiet'
- Used in many programs to inhibit the usual output. *Note_* every
- program accepting `--quiet' should accept `--silent' as a synonym.
-
-`quiet-unshar'
- `-Q' in `shar'
-
-`quote-name'
- `-Q' in `ls'.
-
-`rcs'
- `-n' in `diff'.
-
-`re-interval'
- Used in `gawk'.
-
-`read-full-blocks'
- `-B' in `tar'.
-
-`readnow'
- Used in GDB.
-
-`recon'
- `-n' in Make.
-
-`record-number'
- `-R' in `tar'.
-
-`recursive'
- Used in `chgrp', `chown', `cp', `ls', `diff', and `rm'.
-
-`reference-limit'
- Used in `makeinfo'.
-
-`references'
- `-r' in `ptx'.
-
-`regex'
- `-r' in `tac' and `etags'.
-
-`release'
- `-r' in `uname'.
-
-`reload-state'
- `-R' in `m4'.
-
-`relocation'
- `-r' in `objdump'.
-
-`rename'
- `-r' in `cpio'.
-
-`replace'
- `-i' in `xargs'.
-
-`report-identical-files'
- `-s' in `diff'.
-
-`reset-access-time'
- `-a' in `cpio'.
-
-`reverse'
- `-r' in `ls' and `nm'.
-
-`reversed-ed'
- `-f' in `diff'.
-
-`right-side-defs'
- `-R' in `ptx'.
-
-`same-order'
- `-s' in `tar'.
-
-`same-permissions'
- `-p' in `tar'.
-
-`save'
- `-g' in `stty'.
-
-`se'
- Used in GDB.
-
-`sentence-regexp'
- `-S' in `ptx'.
-
-`separate-dirs'
- `-S' in `du'.
-
-`separator'
- `-s' in `tac'.
-
-`sequence'
- Used by `recode' to chose files or pipes for sequencing passes.
-
-`shell'
- `-s' in `su'.
-
-`show-all'
- `-A' in `cat'.
-
-`show-c-function'
- `-p' in `diff'.
-
-`show-ends'
- `-E' in `cat'.
-
-`show-function-line'
- `-F' in `diff'.
-
-`show-tabs'
- `-T' in `cat'.
-
-`silent'
- Used in many programs to inhibit the usual output. *Note_* every
- program accepting `--silent' should accept `--quiet' as a synonym.
-
-`size'
- `-s' in `ls'.
-
-`socket'
- Specify a file descriptor for a network server to use for its
- socket, instead of opening and binding a new socket. This
- provides a way to run, in a nonpriveledged process, a server that
- normally needs a reserved port number.
-
-`sort'
- Used in `ls'.
-
-`source'
- `-W source' in `gawk'.
-
-`sparse'
- `-S' in `tar'.
-
-`speed-large-files'
- `-H' in `diff'.
-
-`split-at'
- `-E' in `unshar'.
-
-`split-size-limit'
- `-L' in `shar'.
-
-`squeeze-blank'
- `-s' in `cat'.
-
-`start-delete'
- `-w' in `wdiff'.
-
-`start-insert'
- `-y' in `wdiff'.
-
-`starting-file'
- Used in `tar' and `diff' to specify which file within a directory
- to start processing with.
-
-`statistics'
- `-s' in `wdiff'.
-
-`stdin-file-list'
- `-S' in `shar'.
-
-`stop'
- `-S' in Make.
-
-`strict'
- `-s' in `recode'.
-
-`strip'
- `-s' in `install'.
-
-`strip-all'
- `-s' in `strip'.
-
-`strip-debug'
- `-S' in `strip'.
-
-`submitter'
- `-s' in `shar'.
-
-`suffix'
- `-S' in `cp', `ln', `mv'.
-
-`suffix-format'
- `-b' in `csplit'.
-
-`sum'
- `-s' in `gprof'.
-
-`summarize'
- `-s' in `du'.
-
-`symbolic'
- `-s' in `ln'.
-
-`symbols'
- Used in GDB and `objdump'.
-
-`synclines'
- `-s' in `m4'.
-
-`sysname'
- `-s' in `uname'.
-
-`tabs'
- `-t' in `expand' and `unexpand'.
-
-`tabsize'
- `-T' in `ls'.
-
-`terminal'
- `-T' in `tput' and `ul'. `-t' in `wdiff'.
-
-`text'
- `-a' in `diff'.
-
-`text-files'
- `-T' in `shar'.
-
-`time'
- Used in `ls' and `touch'.
-
-`timeout'
- Specify how long to wait before giving up on some operation.
-
-`to-stdout'
- `-O' in `tar'.
-
-`total'
- `-c' in `du'.
-
-`touch'
- `-t' in Make, `ranlib', and `recode'.
-
-`trace'
- `-t' in `m4'.
-
-`traditional'
- `-t' in `hello'; `-W traditional' in `gawk'; `-G' in `ed', `m4',
- and `ptx'.
-
-`tty'
- Used in GDB.
-
-`typedefs'
- `-t' in `ctags'.
-
-`typedefs-and-c++'
- `-T' in `ctags'.
-
-`typeset-mode'
- `-t' in `ptx'.
-
-`uncompress'
- `-z' in `tar'.
-
-`unconditional'
- `-u' in `cpio'.
-
-`undefine'
- `-U' in `m4'.
-
-`undefined-only'
- `-u' in `nm'.
-
-`update'
- `-u' in `cp', `ctags', `mv', `tar'.
-
-`usage'
- Used in `gawk'; same as `--help'.
-
-`uuencode'
- `-B' in `shar'.
-
-`vanilla-operation'
- `-V' in `shar'.
-
-`verbose'
- Print more information about progress. Many programs support this.
-
-`verify'
- `-W' in `tar'.
-
-`version'
- Print the version number.
-
-`version-control'
- `-V' in `cp', `ln', `mv'.
-
-`vgrind'
- `-v' in `ctags'.
-
-`volume'
- `-V' in `tar'.
-
-`what-if'
- `-W' in Make.
-
-`whole-size-limit'
- `-l' in `shar'.
-
-`width'
- `-w' in `ls' and `ptx'.
-
-`word-regexp'
- `-W' in `ptx'.
-
-`writable'
- `-T' in `who'.
-
-`zeros'
- `-z' in `gprof'.
-
-
-File: standards.info, Node: Memory Usage, Next: File Usage, Prev: Option Table, Up: Program Behavior
-
-4.8 Memory Usage
-================
-
-If a program typically uses just a few meg of memory, don't bother
-making any effort to reduce memory usage. For example, if it is
-impractical for other reasons to operate on files more than a few meg
-long, it is reasonable to read entire input files into core to operate
-on them.
-
- However, for programs such as `cat' or `tail', that can usefully
-operate on very large files, it is important to avoid using a technique
-that would artificially limit the size of files it can handle. If a
-program works by lines and could be applied to arbitrary user-supplied
-input files, it should keep only a line in memory, because this is not
-very hard and users will want to be able to operate on input files that
-are bigger than will fit in core all at once.
-
- If your program creates complicated data structures, just make them
-in core and give a fatal error if `malloc' returns zero.
-
-
-File: standards.info, Node: File Usage, Prev: Memory Usage, Up: Program Behavior
-
-4.9 File Usage
-==============
-
-Programs should be prepared to operate when `/usr' and `/etc' are
-read-only file systems. Thus, if the program manages log files, lock
-files, backup files, score files, or any other files which are modified
-for internal purposes, these files should not be stored in `/usr' or
-`/etc'.
-
- There are two exceptions. `/etc' is used to store system
-configuration information; it is reasonable for a program to modify
-files in `/etc' when its job is to update the system configuration.
-Also, if the user explicitly asks to modify one file in a directory, it
-is reasonable for the program to store other files in the same
-directory.
-
-
-File: standards.info, Node: Writing C, Next: Documentation, Prev: Program Behavior, Up: Top
-
-5 Making The Best Use of C
-**************************
-
-This node provides advice on how best to use the C language when
-writing GNU software.
-
-* Menu:
-
-* Formatting:: Formatting Your Source Code
-* Comments:: Commenting Your Work
-* Syntactic Conventions:: Clean Use of C Constructs
-* Names:: Naming Variables, Functions, and Files
-* System Portability:: Portability between different operating systems
-* CPU Portability:: Supporting the range of CPU types
-* System Functions:: Portability and ``standard'' library functions
-* Internationalization:: Techniques for internationalization
-* Mmap:: How you can safely use `mmap'.
-
-
-File: standards.info, Node: Formatting, Next: Comments, Up: Writing C
-
-5.1 Formatting Your Source Code
-===============================
-
-It is important to put the open-brace that starts the body of a C
-function in column zero, and avoid putting any other open-brace or
-open-parenthesis or open-bracket in column zero. Several tools look
-for open-braces in column zero to find the beginnings of C functions.
-These tools will not work on code not formatted that way.
-
- It is also important for function definitions to start the name of
-the function in column zero. This helps people to search for function
-definitions, and may also help certain tools recognize them. Thus, the
-proper format is this:
-
- static char *
- concat (s1, s2) /* Name starts in column zero here */
- char *s1, *s2;
- { /* Open brace in column zero here */
- ...
- }
-
-or, if you want to use Standard C syntax, format the definition like
-this:
-
- static char *
- concat (char *s1, char *s2)
- {
- ...
- }
-
- In Standard C, if the arguments don't fit nicely on one line, split
-it like this:
-
- int
- lots_of_args (int an_integer, long a_long, short a_short,
- double a_double, float a_float)
- ...
-
- The rest of this section gives our recommendations for other aspects
-of C formatting style, which is also the default style of the `indent'
-program in version 1.2 and newer. It corresponds to the options
-
- -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2
- -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -psl -nsc -nsob
-
- We don't think of these recommendations as requirements, because it
-causes no problems for users if two different programs have different
-formatting styles.
-
- But whatever style you use, please use it consistently, since a
-mixture of styles within one program tends to look ugly. If you are
-contributing changes to an existing program, please follow the style of
-that program.
-
- For the body of the function, our recommended style looks like this:
-
- if (x < foo (y, z))
- haha = bar[4] + 5;
- else
- {
- while (z)
- {
- haha += foo (z, z);
- z--;
- }
- return ++x + bar ();
- }
-
- We find it easier to read a program when it has spaces before the
-open-parentheses and after the commas. Especially after the commas.
-
- When you split an expression into multiple lines, split it before an
-operator, not after one. Here is the right way:
-
- if (foo_this_is_long && bar > win (x, y, z)
- && remaining_condition)
-
- Try to avoid having two operators of different precedence at the same
-level of indentation. For example, don't write this:
-
- mode = (inmode[j] == VOIDmode
- || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])
- ? outmode[j] : inmode[j]);
-
- Instead, use extra parentheses so that the indentation shows the
-nesting:
-
- mode = ((inmode[j] == VOIDmode
- || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])))
- ? outmode[j] : inmode[j]);
-
- Insert extra parentheses so that Emacs will indent the code properly.
-For example, the following indentation looks nice if you do it by hand,
-
- v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
- + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000;
-
-but Emacs would alter it. Adding a set of parentheses produces
-something that looks equally nice, and which Emacs will preserve:
-
- v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
- + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000);
-
- Format do-while statements like this:
-
- do
- {
- a = foo (a);
- }
- while (a > 0);
-
- Please use formfeed characters (control-L) to divide the program into
-pages at logical places (but not within a function). It does not matter
-just how long the pages are, since they do not have to fit on a printed
-page. The formfeeds should appear alone on lines by themselves.
-
-
-File: standards.info, Node: Comments, Next: Syntactic Conventions, Prev: Formatting, Up: Writing C
-
-5.2 Commenting Your Work
-========================
-
-Every program should start with a comment saying briefly what it is for.
-Example: `fmt - filter for simple filling of text'.
-
- Please write the comments in a GNU program in English, because
-English is the one language that nearly all programmers in all
-countries can read. If you do not write English well, please write
-comments in English as well as you can, then ask other people to help
-rewrite them. If you can't write comments in English, please find
-someone to work with you and translate your comments into English.
-
- Please put a comment on each function saying what the function does,
-what sorts of arguments it gets, and what the possible values of
-arguments mean and are used for. It is not necessary to duplicate in
-words the meaning of the C argument declarations, if a C type is being
-used in its customary fashion. If there is anything nonstandard about
-its use (such as an argument of type `char *' which is really the
-address of the second character of a string, not the first), or any
-possible values that would not work the way one would expect (such as,
-that strings containing newlines are not guaranteed to work), be sure
-to say so.
-
- Also explain the significance of the return value, if there is one.
-
- Please put two spaces after the end of a sentence in your comments,
-so that the Emacs sentence commands will work. Also, please write
-complete sentences and capitalize the first word. If a lower-case
-identifier comes at the beginning of a sentence, don't capitalize it!
-Changing the spelling makes it a different identifier. If you don't
-like starting a sentence with a lower case letter, write the sentence
-differently (e.g., "The identifier lower-case is ...").
-
- The comment on a function is much clearer if you use the argument
-names to speak about the argument values. The variable name itself
-should be lower case, but write it in upper case when you are speaking
-about the value rather than the variable itself. Thus, "the inode
-number NODE_NUM" rather than "an inode".
-
- There is usually no purpose in restating the name of the function in
-the comment before it, because the reader can see that for himself.
-There might be an exception when the comment is so long that the
-function itself would be off the bottom of the screen.
-
- There should be a comment on each static variable as well, like this:
-
- /* Nonzero means truncate lines in the display;
- zero means continue them. */
- int truncate_lines;
-
- Every `#endif' should have a comment, except in the case of short
-conditionals (just a few lines) that are not nested. The comment should
-state the condition of the conditional that is ending, _including its
-sense_. `#else' should have a comment describing the condition _and
-sense_ of the code that follows. For example:
-
- #ifdef foo
- ...
- #else /* not foo */
- ...
- #endif /* not foo */
- #ifdef foo
- ...
- #endif /* foo */
-
-but, by contrast, write the comments this way for a `#ifndef':
-
- #ifndef foo
- ...
- #else /* foo */
- ...
- #endif /* foo */
- #ifndef foo
- ...
- #endif /* not foo */
-
-
-File: standards.info, Node: Syntactic Conventions, Next: Names, Prev: Comments, Up: Writing C
-
-5.3 Clean Use of C Constructs
-=============================
-
-Please explicitly declare the types of all objects. For example, you
-should explicitly declare all arguments to functions, and you should
-declare functions to return `int' rather than omitting the `int'.
-
- Some programmers like to use the GCC `-Wall' option, and change the
-code whenever it issues a warning. If you want to do this, then do.
-Other programmers prefer not to use `-Wall', because it gives warnings
-for valid and legitimate code which they do not want to change. If you
-want to do this, then do. The compiler should be your servant, not
-your master.
-
- Declarations of external functions and functions to appear later in
-the source file should all go in one place near the beginning of the
-file (somewhere before the first function definition in the file), or
-else should go in a header file. Don't put `extern' declarations inside
-functions.
-
- It used to be common practice to use the same local variables (with
-names like `tem') over and over for different values within one
-function. Instead of doing this, it is better declare a separate local
-variable for each distinct purpose, and give it a name which is
-meaningful. This not only makes programs easier to understand, it also
-facilitates optimization by good compilers. You can also move the
-declaration of each local variable into the smallest scope that includes
-all its uses. This makes the program even cleaner.
-
- Don't use local variables or parameters that shadow global
-identifiers.
-
- Don't declare multiple variables in one declaration that spans lines.
-Start a new declaration on each line, instead. For example, instead of
-this:
-
- int foo,
- bar;
-
-write either this:
-
- int foo, bar;
-
-or this:
-
- int foo;
- int bar;
-
-(If they are global variables, each should have a comment preceding it
-anyway.)
-
- When you have an `if'-`else' statement nested in another `if'
-statement, always put braces around the `if'-`else'. Thus, never write
-like this:
-
- if (foo)
- if (bar)
- win ();
- else
- lose ();
-
-always like this:
-
- if (foo)
- {
- if (bar)
- win ();
- else
- lose ();
- }
-
- If you have an `if' statement nested inside of an `else' statement,
-either write `else if' on one line, like this,
-
- if (foo)
- ...
- else if (bar)
- ...
-
-with its `then'-part indented like the preceding `then'-part, or write
-the nested `if' within braces like this:
-
- if (foo)
- ...
- else
- {
- if (bar)
- ...
- }
-
- Don't declare both a structure tag and variables or typedefs in the
-same declaration. Instead, declare the structure tag separately and
-then use it to declare the variables or typedefs.
-
- Try to avoid assignments inside `if'-conditions. For example, don't
-write this:
-
- if ((foo = (char *) malloc (sizeof *foo)) == 0)
- fatal ("virtual memory exhausted");
-
-instead, write this:
-
- foo = (char *) malloc (sizeof *foo);
- if (foo == 0)
- fatal ("virtual memory exhausted");
-
- Don't make the program ugly to placate `lint'. Please don't insert
-any casts to `void'. Zero without a cast is perfectly fine as a null
-pointer constant, except when calling a varargs function.
-
-
-File: standards.info, Node: Names, Next: System Portability, Prev: Syntactic Conventions, Up: Writing C
-
-5.4 Naming Variables, Functions, and Files
-==========================================
-
-The names of global variables and functions in a program serve as
-comments of a sort. So don't choose terse names--instead, look for
-names that give useful information about the meaning of the variable or
-function. In a GNU program, names should be English, like other
-comments.
-
- Local variable names can be shorter, because they are used only
-within one context, where (presumably) comments explain their purpose.
-
- Try to limit your use of abbreviations in symbol names. It is ok to
-make a few abbreviations, explain what they mean, and then use them
-frequently, but don't use lots of obscure abbreviations.
-
- Please use underscores to separate words in a name, so that the Emacs
-word commands can be useful within them. Stick to lower case; reserve
-upper case for macros and `enum' constants, and for name-prefixes that
-follow a uniform convention.
-
- For example, you should use names like `ignore_space_change_flag';
-don't use names like `iCantReadThis'.
-
- Variables that indicate whether command-line options have been
-specified should be named after the meaning of the option, not after
-the option-letter. A comment should state both the exact meaning of
-the option and its letter. For example,
-
- /* Ignore changes in horizontal whitespace (-b). */
- int ignore_space_change_flag;
-
- When you want to define names with constant integer values, use
-`enum' rather than `#define'. GDB knows about enumeration constants.
-
- You might want to make sure that none of the file names would
-conflict the files were loaded onto an MS-DOS file system which
-shortens the names. You can use the program `doschk' to test for this.
-
- Some GNU programs were designed to limit themselves to file names of
-14 characters or less, to avoid file name conflicts if they are read
-into older System V systems. Please preserve this feature in the
-existing GNU programs that have it, but there is no need to do this in
-new GNU programs. `doschk' also reports file names longer than 14
-characters.
-
-
-File: standards.info, Node: System Portability, Next: CPU Portability, Prev: Names, Up: Writing C
-
-5.5 Portability between System Types
-====================================
-
-In the Unix world, "portability" refers to porting to different Unix
-versions. For a GNU program, this kind of portability is desirable, but
-not paramount.
-
- The primary purpose of GNU software is to run on top of the GNU
-kernel, compiled with the GNU C compiler, on various types of CPU. So
-the kinds of portability that are absolutely necessary are quite
-limited. But it is important to support Linux-based GNU systems, since
-they are the form of GNU that is popular.
-
- Beyond that, it is good to support the other free operating systems
-(*BSD), and it is nice to support other Unix-like systems if you want
-to. Supporting a variety of Unix-like systems is desirable, although
-not paramount. It is usually not too hard, so you may as well do it.
-But you don't have to consider it an obligation, if it does turn out to
-be hard.
-
- The easiest way to achieve portability to most Unix-like systems is
-to use Autoconf. It's unlikely that your program needs to know more
-information about the host platform than Autoconf can provide, simply
-because most of the programs that need such knowledge have already been
-written.
-
- Avoid using the format of semi-internal data bases (e.g.,
-directories) when there is a higher-level alternative (`readdir').
-
- As for systems that are not like Unix, such as MSDOS, Windows, the
-Macintosh, VMS, and MVS, supporting them is often a lot of work. When
-that is the case, it is better to spend your time adding features that
-will be useful on GNU and GNU/Linux, rather than on supporting other
-incompatible systems.
-
- It is a good idea to define the "feature test macro" `_GNU_SOURCE'
-when compiling your C files. When you compile on GNU or GNU/Linux,
-this will enable the declarations of GNU library extension functions,
-and that will usually give you a compiler error message if you define
-the same function names in some other way in your program. (You don't
-have to actually _use_ these functions, if you prefer to make the
-program more portable to other systems.)
-
- But whether or not you use these GNU extensions, you should avoid
-using their names for any other meanings. Doing so would make it hard
-to move your code into other GNU programs.
-
-
-File: standards.info, Node: CPU Portability, Next: System Functions, Prev: System Portability, Up: Writing C
-
-5.6 Portability between CPUs
-============================
-
-Even GNU systems will differ because of differences among CPU
-types--for example, difference in byte ordering and alignment
-requirements. It is absolutely essential to handle these differences.
-However, don't make any effort to cater to the possibility that an
-`int' will be less than 32 bits. We don't support 16-bit machines in
-GNU.
-
- Similarly, don't make any effort to cater to the possibility that
-`long' will be smaller than predefined types like `size_t'. For
-example, the following code is ok:
-
- printf ("size = %lu\n", (unsigned long) sizeof array);
- printf ("diff = %ld\n", (long) (pointer2 - pointer1));
-
- 1989 Standard C requires this to work, and we know of only one
-counterexample: 64-bit programs on Microsoft Windows IA-64. We will
-leave it to those who want to port GNU programs to that environment to
-figure out how to do it.
-
- Predefined file-size types like `off_t' are an exception: they are
-longer than `long' on many platforms, so code like the above won't work
-with them. One way to print an `off_t' value portably is to print its
-digits yourself, one by one.
-
- Don't assume that the address of an `int' object is also the address
-of its least-significant byte. This is false on big-endian machines.
-Thus, don't make the following mistake:
-
- int c;
- ...
- while ((c = getchar()) != EOF)
- write(file_descriptor, &c, 1);
-
- When calling functions, you need not worry about the difference
-between pointers of various types, or between pointers and integers.
-On most machines, there's no difference anyway. As for the few
-machines where there is a difference, all of them support Standard C
-prototypes, so you can use prototypes (perhaps conditionalized to be
-active only in Standard C) to make the code work on those systems.
-
- In certain cases, it is ok to pass integer and pointer arguments
-indiscriminately to the same function, and use no prototype on any
-system. For example, many GNU programs have error-reporting functions
-that pass their arguments along to `printf' and friends:
-
- error (s, a1, a2, a3)
- char *s;
- char *a1, *a2, *a3;
- {
- fprintf (stderr, "error: ");
- fprintf (stderr, s, a1, a2, a3);
- }
-
-In practice, this works on all machines, since a pointer is generally
-the widest possible kind of argument; it is much simpler than any
-"correct" alternative. Be sure _not_ to use a prototype for such
-functions.
-
- If you have decided to use Standard C, then you can instead define
-`error' using `stdarg.h', and pass the arguments along to `vfprintf'.
-
- Avoid casting pointers to integers if you can. Such casts greatly
-reduce portability, and in most programs they are easy to avoid. In the
-cases where casting pointers to integers is essential--such as, a Lisp
-interpreter which stores type information as well as an address in one
-word--you'll have to make explicit provisions to handle different word
-sizes. You will also need to make provision for systems in which the
-normal range of addresses you can get from `malloc' starts far away
-from zero.
-
-
-File: standards.info, Node: System Functions, Next: Internationalization, Prev: CPU Portability, Up: Writing C
-
-5.7 Calling System Functions
-============================
-
-C implementations differ substantially. Standard C reduces but does
-not eliminate the incompatibilities; meanwhile, many GNU packages still
-support pre-standard compilers because this is not hard to do. This
-chapter gives recommendations for how to use the more-or-less standard C
-library functions to avoid unnecessary loss of portability.
-
- * Don't use the return value of `sprintf'. It returns the number of
- characters written on some systems, but not on all systems.
-
- * Be aware that `vfprintf' is not always available.
-
- * `main' should be declared to return type `int'. It should
- terminate either by calling `exit' or by returning the integer
- status code; make sure it cannot ever return an undefined value.
-
- * Don't declare system functions explicitly.
-
- Almost any declaration for a system function is wrong on some
- system. To minimize conflicts, leave it to the system header
- files to declare system functions. If the headers don't declare a
- function, let it remain undeclared.
-
- While it may seem unclean to use a function without declaring it,
- in practice this works fine for most system library functions on
- the systems where this really happens; thus, the disadvantage is
- only theoretical. By contrast, actual declarations have
- frequently caused actual conflicts.
-
- * If you must declare a system function, don't specify the argument
- types. Use an old-style declaration, not a Standard C prototype.
- The more you specify about the function, the more likely a
- conflict.
-
- * In particular, don't unconditionally declare `malloc' or `realloc'.
-
- Most GNU programs use those functions just once, in functions
- conventionally named `xmalloc' and `xrealloc'. These functions
- call `malloc' and `realloc', respectively, and check the results.
-
- Because `xmalloc' and `xrealloc' are defined in your program, you
- can declare them in other files without any risk of type conflict.
-
- On most systems, `int' is the same length as a pointer; thus, the
- calls to `malloc' and `realloc' work fine. For the few
- exceptional systems (mostly 64-bit machines), you can use
- *conditionalized* declarations of `malloc' and `realloc'--or put
- these declarations in configuration files specific to those
- systems.
-
- * The string functions require special treatment. Some Unix systems
- have a header file `string.h'; others have `strings.h'. Neither
- file name is portable. There are two things you can do: use
- Autoconf to figure out which file to include, or don't include
- either file.
-
- * If you don't include either strings file, you can't get
- declarations for the string functions from the header file in the
- usual way.
-
- That causes less of a problem than you might think. The newer
- standard string functions should be avoided anyway because many
- systems still don't support them. The string functions you can
- use are these:
-
- strcpy strncpy strcat strncat
- strlen strcmp strncmp
- strchr strrchr
-
- The copy and concatenate functions work fine without a declaration
- as long as you don't use their values. Using their values without
- a declaration fails on systems where the width of a pointer
- differs from the width of `int', and perhaps in other cases. It
- is trivial to avoid using their values, so do that.
-
- The compare functions and `strlen' work fine without a declaration
- on most systems, possibly all the ones that GNU software runs on.
- You may find it necessary to declare them *conditionally* on a few
- systems.
-
- The search functions must be declared to return `char *'. Luckily,
- there is no variation in the data type they return. But there is
- variation in their names. Some systems give these functions the
- names `index' and `rindex'; other systems use the names `strchr'
- and `strrchr'. Some systems support both pairs of names, but
- neither pair works on all systems.
-
- You should pick a single pair of names and use it throughout your
- program. (Nowadays, it is better to choose `strchr' and `strrchr'
- for new programs, since those are the standard names.) Declare
- both of those names as functions returning `char *'. On systems
- which don't support those names, define them as macros in terms of
- the other pair. For example, here is what to put at the beginning
- of your file (or in a header) if you want to use the names
- `strchr' and `strrchr' throughout:
-
- #ifndef HAVE_STRCHR
- #define strchr index
- #endif
- #ifndef HAVE_STRRCHR
- #define strrchr rindex
- #endif
-
- char *strchr ();
- char *strrchr ();
-
- Here we assume that `HAVE_STRCHR' and `HAVE_STRRCHR' are macros
-defined in systems where the corresponding functions exist. One way to
-get them properly defined is to use Autoconf.
-
-
-File: standards.info, Node: Internationalization, Next: Mmap, Prev: System Functions, Up: Writing C
-
-5.8 Internationalization
-========================
-
-GNU has a library called GNU gettext that makes it easy to translate the
-messages in a program into various languages. You should use this
-library in every program. Use English for the messages as they appear
-in the program, and let gettext provide the way to translate them into
-other languages.
-
- Using GNU gettext involves putting a call to the `gettext' macro
-around each string that might need translation--like this:
-
- printf (gettext ("Processing file `%s'..."));
-
-This permits GNU gettext to replace the string `"Processing file
-`%s'..."' with a translated version.
-
- Once a program uses gettext, please make a point of writing calls to
-`gettext' when you add new strings that call for translation.
-
- Using GNU gettext in a package involves specifying a "text domain
-name" for the package. The text domain name is used to separate the
-translations for this package from the translations for other packages.
-Normally, the text domain name should be the same as the name of the
-package--for example, `fileutils' for the GNU file utilities.
-
- To enable gettext to work well, avoid writing code that makes
-assumptions about the structure of words or sentences. When you want
-the precise text of a sentence to vary depending on the data, use two or
-more alternative string constants each containing a complete sentences,
-rather than inserting conditionalized words or phrases into a single
-sentence framework.
-
- Here is an example of what not to do:
-
- printf ("%d file%s processed", nfiles,
- nfiles != 1 ? "s" : "");
-
-The problem with that example is that it assumes that plurals are made
-by adding `s'. If you apply gettext to the format string, like this,
-
- printf (gettext ("%d file%s processed"), nfiles,
- nfiles != 1 ? "s" : "");
-
-the message can use different words, but it will still be forced to use
-`s' for the plural. Here is a better way:
-
- printf ((nfiles != 1 ? "%d files processed"
- : "%d file processed"),
- nfiles);
-
-This way, you can apply gettext to each of the two strings
-independently:
-
- printf ((nfiles != 1 ? gettext ("%d files processed")
- : gettext ("%d file processed")),
- nfiles);
-
-This can be any method of forming the plural of the word for "file", and
-also handles languages that require agreement in the word for
-"processed".
-
- A similar problem appears at the level of sentence structure with
-this code:
-
- printf ("# Implicit rule search has%s been done.\n",
- f->tried_implicit ? "" : " not");
-
-Adding `gettext' calls to this code cannot give correct results for all
-languages, because negation in some languages requires adding words at
-more than one place in the sentence. By contrast, adding `gettext'
-calls does the job straightfowardly if the code starts out like this:
-
- printf (f->tried_implicit
- ? "# Implicit rule search has been done.\n",
- : "# Implicit rule search has not been done.\n");
-
-
-File: standards.info, Node: Mmap, Prev: Internationalization, Up: Writing C
-
-5.9 Mmap
-========
-
-Don't assume that `mmap' either works on all files or fails for all
-files. It may work on some files and fail on others.
-
- The proper way to use `mmap' is to try it on the specific file for
-which you want to use it--and if `mmap' doesn't work, fall back on
-doing the job in another way using `read' and `write'.
-
- The reason this precaution is needed is that the GNU kernel (the
-HURD) provides a user-extensible file system, in which there can be many
-different kinds of "ordinary files." Many of them support `mmap', but
-some do not. It is important to make programs handle all these kinds
-of files.
-
-
-File: standards.info, Node: Documentation, Next: Managing Releases, Prev: Writing C, Up: Top
-
-6 Documenting Programs
-**********************
-
-A GNU program should ideally come with full free documentation, adequate
-for both reference and tutorial purposes. If the package can be
-programmed or extended, the documentation should cover programming or
-extending it, as well as just using it.
-
-* Menu:
-
-* GNU Manuals:: Writing proper manuals.
-* Doc Strings and Manuals:: Compiling doc strings doesn't make a manual.
-* Manual Structure Details:: Specific structure conventions.
-* License for Manuals:: Writing the distribution terms for a manual.
-* Manual Credits:: Giving credit to documentation contributors.
-* Printed Manuals:: Mentioning the printed manual.
-* NEWS File:: NEWS files supplement manuals.
-* Change Logs:: Recording Changes
-* Man Pages:: Man pages are secondary.
-* Reading other Manuals:: How far you can go in learning
- from other manuals.
-
-
-File: standards.info, Node: GNU Manuals, Next: Doc Strings and Manuals, Up: Documentation
-
-6.1 GNU Manuals
-===============
-
-The preferred document format for the GNU system is the Texinfo
-formatting language. Every GNU package should (ideally) have
-documentation in Texinfo both for reference and for learners. Texinfo
-makes it possible to produce a good quality formatted book, using TeX,
-and to generate an Info file. It is also possible to generate HTML
-output from Texinfo source. See the Texinfo manual, either the
-hardcopy, or the on-line version available through `info' or the Emacs
-Info subsystem (`C-h i').
-
- Nowadays some other formats such as Docbook and Sgmltexi can be
-converted automatically into Texinfo. It is ok to produce the Texinfo
-documentation by conversion this way, as long as it gives good results.
-
- Programmers often find it most natural to structure the documentation
-following the structure of the implementation, which they know. But
-this structure is not necessarily good for explaining how to use the
-program; it may be irrelevant and confusing for a user.
-
- At every level, from the sentences in a paragraph to the grouping of
-topics into separate manuals, the right way to structure documentation
-is according to the concepts and questions that a user will have in mind
-when reading it. Sometimes this structure of ideas matches the
-structure of the implementation of the software being documented--but
-often they are different. Often the most important part of learning to
-write good documentation is learning to notice when you are structuring
-the documentation like the implementation, and think about better
-alternatives.
-
- For example, each program in the GNU system probably ought to be
-documented in one manual; but this does not mean each program should
-have its own manual. That would be following the structure of the
-implementation, rather than the structure that helps the user
-understand.
-
- Instead, each manual should cover a coherent _topic_. For example,
-instead of a manual for `diff' and a manual for `diff3', we have one
-manual for "comparison of files" which covers both of those programs,
-as well as `cmp'. By documenting these programs together, we can make
-the whole subject clearer.
-
- The manual which discusses a program should certainly document all of
-the program's command-line options and all of its commands. It should
-give examples of their use. But don't organize the manual as a list of
-features. Instead, organize it logically, by subtopics. Address the
-questions that a user will ask when thinking about the job that the
-program does.
-
- In general, a GNU manual should serve both as tutorial and reference.
-It should be set up for convenient access to each topic through Info,
-and for reading straight through (appendixes aside). A GNU manual
-should give a good introduction to a beginner reading through from the
-start, and should also provide all the details that hackers want. The
-Bison manual is a good example of this--please take a look at it to see
-what we mean.
-
- That is not as hard as it first sounds. Arrange each chapter as a
-logical breakdown of its topic, but order the sections, and write their
-text, so that reading the chapter straight through makes sense. Do
-likewise when structuring the book into chapters, and when structuring a
-section into paragraphs. The watchword is, _at each point, address the
-most fundamental and important issue raised by the preceding text._
-
- If necessary, add extra chapters at the beginning of the manual which
-are purely tutorial and cover the basics of the subject. These provide
-the framework for a beginner to understand the rest of the manual. The
-Bison manual provides a good example of how to do this.
-
- To serve as a reference, a manual should have an Index that list all
-the functions, variables, options, and important concepts that are part
-of the program. One combined Index should do for a short manual, but
-sometimes for a complex package it is better to use multiple indices.
-The Texinfo manual includes advice on preparing good index entries, see
-*Note Making Index Entries: (texinfo)Index Entries, and see *Note
-Defining the Entries of an Index: (texinfo)Indexing Commands.
-
- Don't use Unix man pages as a model for how to write GNU
-documentation; most of them are terse, badly structured, and give
-inadequate explanation of the underlying concepts. (There are, of
-course, some exceptions.) Also, Unix man pages use a particular format
-which is different from what we use in GNU manuals.
-
- Please include an email address in the manual for where to report
-bugs _in the manual_.
-
- Please do not use the term "pathname" that is used in Unix
-documentation; use "file name" (two words) instead. We use the term
-"path" only for search paths, which are lists of directory names.
-
- Please do not use the term "illegal" to refer to erroneous input to a
-computer program. Please use "invalid" for this, and reserve the term
-"illegal" for activities punishable by law.
-
-
-File: standards.info, Node: Doc Strings and Manuals, Next: Manual Structure Details, Prev: GNU Manuals, Up: Documentation
-
-6.2 Doc Strings and Manuals
-===========================
-
-Some programming systems, such as Emacs, provide a documentation string
-for each function, command or variable. You may be tempted to write a
-reference manual by compiling the documentation strings and writing a
-little additional text to go around them--but you must not do it. That
-approach is a fundamental mistake. The text of well-written
-documentation strings will be entirely wrong for a manual.
-
- A documentation string needs to stand alone--when it appears on the
-screen, there will be no other text to introduce or explain it.
-Meanwhile, it can be rather informal in style.
-
- The text describing a function or variable in a manual must not stand
-alone; it appears in the context of a section or subsection. Other text
-at the beginning of the section should explain some of the concepts, and
-should often make some general points that apply to several functions or
-variables. The previous descriptions of functions and variables in the
-section will also have given information about the topic. A description
-written to stand alone would repeat some of that information; this
-redundance looks bad. Meanwhile, the informality that is acceptable in
-a documentation string is totally unacceptable in a manual.
-
- The only good way to use documentation strings in writing a good
-manual is to use them as a source of information for writing good text.
-
-
-File: standards.info, Node: Manual Structure Details, Next: License for Manuals, Prev: Doc Strings and Manuals, Up: Documentation
-
-6.3 Manual Structure Details
-============================
-
-The title page of the manual should state the version of the programs or
-packages documented in the manual. The Top node of the manual should
-also contain this information. If the manual is changing more
-frequently than or independent of the program, also state a version
-number for the manual in both of these places.
-
- Each program documented in the manual should have a node named
-`PROGRAM Invocation' or `Invoking PROGRAM'. This node (together with
-its subnodes, if any) should describe the program's command line
-arguments and how to run it (the sort of information people would look
-in a man page for). Start with an `@example' containing a template for
-all the options and arguments that the program uses.
-
- Alternatively, put a menu item in some menu whose item name fits one
-of the above patterns. This identifies the node which that item points
-to as the node for this purpose, regardless of the node's actual name.
-
- The `--usage' feature of the Info reader looks for such a node or
-menu item in order to find the relevant text, so it is essential for
-every Texinfo file to have one.
-
- If one manual describes several programs, it should have such a node
-for each program described in the manual.
-
-
-File: standards.info, Node: License for Manuals, Next: Manual Credits, Prev: Manual Structure Details, Up: Documentation
-
-6.4 License for Manuals
-=======================
-
-Please use the GNU Free Documentation License for all GNU manuals that
-are more than a few pages long. Likewise for a collection of short
-documents--you only need one copy of the GNU FDL for the whole
-collection. For a single short document, you can use a very permissive
-non-copyleft license, to avoid taking up space with a long license.
-
- See `http://www.gnu.org/copyleft/fdl-howto.html' for more explanation
-of how to employ the GFDL.
-
- Note that it is not obligatory to include a copy of the GNU GPL or
-GNU LGPL in a manual whose license is neither the GPL nor the LGPL. It
-can be a good idea to include the program's license in a large manual;
-in a short manual, whose size would be increased considerably by
-including the program's license, it is probably better not to include
-it.
-
-
-File: standards.info, Node: Manual Credits, Next: Printed Manuals, Prev: License for Manuals, Up: Documentation
-
-6.5 Manual Credits
-==================
-
-Please credit the principal human writers of the manual as the authors,
-on the title page of the manual. If a company sponsored the work, thank
-the company in a suitable place in the manual, but do not cite the
-company as an author.
-
-
-File: standards.info, Node: Printed Manuals, Next: NEWS File, Prev: Manual Credits, Up: Documentation
-
-6.6 Printed Manuals
-===================
-
-The FSF publishes some GNU manuals in printed form. To encourage sales
-of these manuals, the on-line versions of the manual should mention at
-the very start that the printed manual is available and should point at
-information for getting it--for instance, with a link to the page
-`http://www.gnu.org/order/order.html'. This should not be included in
-the printed manual, though, because there it is redundant.
-
- It is also useful to explain in the on-line forms of the manual how
-the user can print out the manual from the sources.
-
-
-File: standards.info, Node: NEWS File, Next: Change Logs, Prev: Printed Manuals, Up: Documentation
-
-6.7 The NEWS File
-=================
-
-In addition to its manual, the package should have a file named `NEWS'
-which contains a list of user-visible changes worth mentioning. In
-each new release, add items to the front of the file and identify the
-version they pertain to. Don't discard old items; leave them in the
-file after the newer items. This way, a user upgrading from any
-previous version can see what is new.
-
- If the `NEWS' file gets very long, move some of the older items into
-a file named `ONEWS' and put a note at the end referring the user to
-that file.
-
-
-File: standards.info, Node: Change Logs, Next: Man Pages, Prev: NEWS File, Up: Documentation
-
-6.8 Change Logs
-===============
-
-Keep a change log to describe all the changes made to program source
-files. The purpose of this is so that people investigating bugs in the
-future will know about the changes that might have introduced the bug.
-Often a new bug can be found by looking at what was recently changed.
-More importantly, change logs can help you eliminate conceptual
-inconsistencies between different parts of a program, by giving you a
-history of how the conflicting concepts arose and who they came from.
-
-* Menu:
-
-* Change Log Concepts::
-* Style of Change Logs::
-* Simple Changes::
-* Conditional Changes::
-* Indicating the Part Changed::
-
-
-File: standards.info, Node: Change Log Concepts, Next: Style of Change Logs, Up: Change Logs
-
-6.8.1 Change Log Concepts
--------------------------
-
-You can think of the change log as a conceptual "undo list" which
-explains how earlier versions were different from the current version.
-People can see the current version; they don't need the change log to
-tell them what is in it. What they want from a change log is a clear
-explanation of how the earlier version differed.
-
- The change log file is normally called `ChangeLog' and covers an
-entire directory. Each directory can have its own change log, or a
-directory can use the change log of its parent directory-it's up to you.
-
- Another alternative is to record change log information with a
-version control system such as RCS or CVS. This can be converted
-automatically to a `ChangeLog' file using `rcs2log'; in Emacs, the
-command `C-x v a' (`vc-update-change-log') does the job.
-
- There's no need to describe the full purpose of the changes or how
-they work together. If you think that a change calls for explanation,
-you're probably right. Please do explain it--but please put the
-explanation in comments in the code, where people will see it whenever
-they see the code. For example, "New function" is enough for the
-change log when you add a function, because there should be a comment
-before the function definition to explain what it does.
-
- However, sometimes it is useful to write one line to describe the
-overall purpose of a batch of changes.
-
- The easiest way to add an entry to `ChangeLog' is with the Emacs
-command `M-x add-change-log-entry'. An entry should have an asterisk,
-the name of the changed file, and then in parentheses the name of the
-changed functions, variables or whatever, followed by a colon. Then
-describe the changes you made to that function or variable.
-
-
-File: standards.info, Node: Style of Change Logs, Next: Simple Changes, Prev: Change Log Concepts, Up: Change Logs
-
-6.8.2 Style of Change Logs
---------------------------
-
-Here are some simple examples of change log entries, starting with the
-header line that says who made the change and when, followed by
-descriptions of specific changes. (These examples are drawn from Emacs
-and GCC.)
-
- 1998-08-17 Richard Stallman <rms@gnu.org>
-
- * register.el (insert-register): Return nil.
- (jump-to-register): Likewise.
-
- * sort.el (sort-subr): Return nil.
-
- * tex-mode.el (tex-bibtex-file, tex-file, tex-region):
- Restart the tex shell if process is gone or stopped.
- (tex-shell-running): New function.
-
- * expr.c (store_one_arg): Round size up for move_block_to_reg.
- (expand_call): Round up when emitting USE insns.
- * stmt.c (assign_parms): Round size up for move_block_from_reg.
-
- It's important to name the changed function or variable in full.
-Don't abbreviate function or variable names, and don't combine them.
-Subsequent maintainers will often search for a function name to find all
-the change log entries that pertain to it; if you abbreviate the name,
-they won't find it when they search.
-
- For example, some people are tempted to abbreviate groups of function
-names by writing `* register.el ({insert,jump-to}-register)'; this is
-not a good idea, since searching for `jump-to-register' or
-`insert-register' would not find that entry.
-
- Separate unrelated change log entries with blank lines. When two
-entries represent parts of the same change, so that they work together,
-then don't put blank lines between them. Then you can omit the file
-name and the asterisk when successive entries are in the same file.
-
- Break long lists of function names by closing continued lines with
-`)', rather than `,', and opening the continuation with `(' as in this
-example:
-
- * keyboard.c (menu_bar_items, tool_bar_items)
- (Fexecute_extended_command): Deal with `keymap' property.
-
-
-File: standards.info, Node: Simple Changes, Next: Conditional Changes, Prev: Style of Change Logs, Up: Change Logs
-
-6.8.3 Simple Changes
---------------------
-
-Certain simple kinds of changes don't need much detail in the change
-log.
-
- When you change the calling sequence of a function in a simple
-fashion, and you change all the callers of the function to use the new
-calling sequence, there is no need to make individual entries for all
-the callers that you changed. Just write in the entry for the function
-being called, "All callers changed"--like this:
-
- * keyboard.c (Fcommand_execute): New arg SPECIAL.
- All callers changed.
-
- When you change just comments or doc strings, it is enough to write
-an entry for the file, without mentioning the functions. Just "Doc
-fixes" is enough for the change log.
-
- There's no need to make change log entries for documentation files.
-This is because documentation is not susceptible to bugs that are hard
-to fix. Documentation does not consist of parts that must interact in a
-precisely engineered fashion. To correct an error, you need not know
-the history of the erroneous passage; it is enough to compare what the
-documentation says with the way the program actually works.
-
-
-File: standards.info, Node: Conditional Changes, Next: Indicating the Part Changed, Prev: Simple Changes, Up: Change Logs
-
-6.8.4 Conditional Changes
--------------------------
-
-C programs often contain compile-time `#if' conditionals. Many changes
-are conditional; sometimes you add a new definition which is entirely
-contained in a conditional. It is very useful to indicate in the
-change log the conditions for which the change applies.
-
- Our convention for indicating conditional changes is to use square
-brackets around the name of the condition.
-
- Here is a simple example, describing a change which is conditional
-but does not have a function or entity name associated with it:
-
- * xterm.c [SOLARIS2]: Include string.h.
-
- Here is an entry describing a new definition which is entirely
-conditional. This new definition for the macro `FRAME_WINDOW_P' is
-used only when `HAVE_X_WINDOWS' is defined:
-
- * frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined.
-
- Here is an entry for a change within the function `init_display',
-whose definition as a whole is unconditional, but the changes themselves
-are contained in a `#ifdef HAVE_LIBNCURSES' conditional:
-
- * dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
-
- Here is an entry for a change that takes affect only when a certain
-macro is _not_ defined:
-
- (gethostname) [!HAVE_SOCKETS]: Replace with winsock version.
-
-
-File: standards.info, Node: Indicating the Part Changed, Prev: Conditional Changes, Up: Change Logs
-
-6.8.5 Indicating the Part Changed
----------------------------------
-
-Indicate the part of a function which changed by using angle brackets
-enclosing an indication of what the changed part does. Here is an entry
-for a change in the part of the function `sh-while-getopts' that deals
-with `sh' commands:
-
- * progmodes/sh-script.el (sh-while-getopts) <sh>: Handle case that
- user-specified option string is empty.
-
-
-File: standards.info, Node: Man Pages, Next: Reading other Manuals, Prev: Change Logs, Up: Documentation
-
-6.9 Man Pages
-=============
-
-In the GNU project, man pages are secondary. It is not necessary or
-expected for every GNU program to have a man page, but some of them do.
-It's your choice whether to include a man page in your program.
-
- When you make this decision, consider that supporting a man page
-requires continual effort each time the program is changed. The time
-you spend on the man page is time taken away from more useful work.
-
- For a simple program which changes little, updating the man page may
-be a small job. Then there is little reason not to include a man page,
-if you have one.
-
- For a large program that changes a great deal, updating a man page
-may be a substantial burden. If a user offers to donate a man page,
-you may find this gift costly to accept. It may be better to refuse
-the man page unless the same person agrees to take full responsibility
-for maintaining it--so that you can wash your hands of it entirely. If
-this volunteer later ceases to do the job, then don't feel obliged to
-pick it up yourself; it may be better to withdraw the man page from the
-distribution until someone else agrees to update it.
-
- When a program changes only a little, you may feel that the
-discrepancies are small enough that the man page remains useful without
-updating. If so, put a prominent note near the beginning of the man
-page explaining that you don't maintain it and that the Texinfo manual
-is more authoritative. The note should say how to access the Texinfo
-documentation.
-
-
-File: standards.info, Node: Reading other Manuals, Prev: Man Pages, Up: Documentation
-
-6.10 Reading other Manuals
-==========================
-
-There may be non-free books or documentation files that describe the
-program you are documenting.
-
- It is ok to use these documents for reference, just as the author of
-a new algebra textbook can read other books on algebra. A large portion
-of any non-fiction book consists of facts, in this case facts about how
-a certain program works, and these facts are necessarily the same for
-everyone who writes about the subject. But be careful not to copy your
-outline structure, wording, tables or examples from preexisting non-free
-documentation. Copying from free documentation may be ok; please check
-with the FSF about the individual case.
-
-
-File: standards.info, Node: Managing Releases, Next: References, Prev: Documentation, Up: Top
-
-7 The Release Process
-*********************
-
-Making a release is more than just bundling up your source files in a
-tar file and putting it up for FTP. You should set up your software so
-that it can be configured to run on a variety of systems. Your Makefile
-should conform to the GNU standards described below, and your directory
-layout should also conform to the standards discussed below. Doing so
-makes it easy to include your package into the larger framework of all
-GNU software.
-
-* Menu:
-
-* Configuration:: How Configuration Should Work
-* Makefile Conventions:: Makefile Conventions
-* Releases:: Making Releases
-
-
-File: standards.info, Node: Configuration, Next: Makefile Conventions, Up: Managing Releases
-
-7.1 How Configuration Should Work
-=================================
-
-Each GNU distribution should come with a shell script named
-`configure'. This script is given arguments which describe the kind of
-machine and system you want to compile the program for.
-
- The `configure' script must record the configuration options so that
-they affect compilation.
-
- One way to do this is to make a link from a standard name such as
-`config.h' to the proper configuration file for the chosen system. If
-you use this technique, the distribution should _not_ contain a file
-named `config.h'. This is so that people won't be able to build the
-program without configuring it first.
-
- Another thing that `configure' can do is to edit the Makefile. If
-you do this, the distribution should _not_ contain a file named
-`Makefile'. Instead, it should include a file `Makefile.in' which
-contains the input used for editing. Once again, this is so that people
-won't be able to build the program without configuring it first.
-
- If `configure' does write the `Makefile', then `Makefile' should
-have a target named `Makefile' which causes `configure' to be rerun,
-setting up the same configuration that was set up last time. The files
-that `configure' reads should be listed as dependencies of `Makefile'.
-
- All the files which are output from the `configure' script should
-have comments at the beginning explaining that they were generated
-automatically using `configure'. This is so that users won't think of
-trying to edit them by hand.
-
- The `configure' script should write a file named `config.status'
-which describes which configuration options were specified when the
-program was last configured. This file should be a shell script which,
-if run, will recreate the same configuration.
-
- The `configure' script should accept an option of the form
-`--srcdir=DIRNAME' to specify the directory where sources are found (if
-it is not the current directory). This makes it possible to build the
-program in a separate directory, so that the actual source directory is
-not modified.
-
- If the user does not specify `--srcdir', then `configure' should
-check both `.' and `..' to see if it can find the sources. If it finds
-the sources in one of these places, it should use them from there.
-Otherwise, it should report that it cannot find the sources, and should
-exit with nonzero status.
-
- Usually the easy way to support `--srcdir' is by editing a
-definition of `VPATH' into the Makefile. Some rules may need to refer
-explicitly to the specified source directory. To make this possible,
-`configure' can add to the Makefile a variable named `srcdir' whose
-value is precisely the specified directory.
-
- The `configure' script should also take an argument which specifies
-the type of system to build the program for. This argument should look
-like this:
-
- CPU-COMPANY-SYSTEM
-
- For example, a Sun 3 might be `m68k-sun-sunos4.1'.
-
- The `configure' script needs to be able to decode all plausible
-alternatives for how to describe a machine. Thus, `sun3-sunos4.1'
-would be a valid alias. For many programs, `vax-dec-ultrix' would be
-an alias for `vax-dec-bsd', simply because the differences between
-Ultrix and BSD are rarely noticeable, but a few programs might need to
-distinguish them.
-
- There is a shell script called `config.sub' that you can use as a
-subroutine to validate system types and canonicalize aliases.
-
- Other options are permitted to specify in more detail the software
-or hardware present on the machine, and include or exclude optional
-parts of the package:
-
-`--enable-FEATURE[=PARAMETER]'
- Configure the package to build and install an optional user-level
- facility called FEATURE. This allows users to choose which
- optional features to include. Giving an optional PARAMETER of
- `no' should omit FEATURE, if it is built by default.
-
- No `--enable' option should *ever* cause one feature to replace
- another. No `--enable' option should ever substitute one useful
- behavior for another useful behavior. The only proper use for
- `--enable' is for questions of whether to build part of the program
- or exclude it.
-
-`--with-PACKAGE'
- The package PACKAGE will be installed, so configure this package
- to work with PACKAGE.
-
- Possible values of PACKAGE include `gnu-as' (or `gas'), `gnu-ld',
- `gnu-libc', `gdb', `x', and `x-toolkit'.
-
- Do not use a `--with' option to specify the file name to use to
- find certain files. That is outside the scope of what `--with'
- options are for.
-
- All `configure' scripts should accept all of these "detail" options,
-whether or not they make any difference to the particular package at
-hand. In particular, they should accept any option that starts with
-`--with-' or `--enable-'. This is so users will be able to configure
-an entire GNU source tree at once with a single set of options.
-
- You will note that the categories `--with-' and `--enable-' are
-narrow: they *do not* provide a place for any sort of option you might
-think of. That is deliberate. We want to limit the possible
-configuration options in GNU software. We do not want GNU programs to
-have idiosyncratic configuration options.
-
- Packages that perform part of the compilation process may support
-cross-compilation. In such a case, the host and target machines for the
-program may be different.
-
- The `configure' script should normally treat the specified type of
-system as both the host and the target, thus producing a program which
-works for the same type of machine that it runs on.
-
- To configure a cross-compiler, cross-assembler, or what have you, you
-should specify a target different from the host, using the configure
-option `--target=TARGETTYPE'. The syntax for TARGETTYPE is the same as
-for the host type. So the command would look like this:
-
- ./configure HOSTTYPE --target=TARGETTYPE
-
- Programs for which cross-operation is not meaningful need not accept
-the `--target' option, because configuring an entire operating system
-for cross-operation is not a meaningful operation.
-
- Bootstrapping a cross-compiler requires compiling it on a machine
-other than the host it will run on. Compilation packages accept a
-configuration option `--build=BUILDTYPE' for specifying the
-configuration on which you will compile them, but the configure script
-should normally guess the build machine type (using `config.guess'), so
-this option is probably not necessary. The host and target types
-normally default from the build type, so in bootstrapping a
-cross-compiler you must specify them both explicitly.
-
- Some programs have ways of configuring themselves automatically. If
-your program is set up to do this, your `configure' script can simply
-ignore most of its arguments.
-
-
-File: standards.info, Node: Makefile Conventions, Next: Releases, Prev: Configuration, Up: Managing Releases
-
-7.2 Makefile Conventions
-========================
-
-This node describes conventions for writing the Makefiles for GNU
-programs. Using Automake will help you write a Makefile that follows
-these conventions.
-
-* Menu:
-
-* Makefile Basics:: General Conventions for Makefiles
-* Utilities in Makefiles:: Utilities in Makefiles
-* Command Variables:: Variables for Specifying Commands
-* Directory Variables:: Variables for Installation Directories
-* Standard Targets:: Standard Targets for Users
-* Install Command Categories:: Three categories of commands in the `install'
- rule: normal, pre-install and post-install.
-
-
-File: standards.info, Node: Makefile Basics, Next: Utilities in Makefiles, Up: Makefile Conventions
-
-7.2.1 General Conventions for Makefiles
----------------------------------------
-
-Every Makefile should contain this line:
-
- SHELL = /bin/sh
-
-to avoid trouble on systems where the `SHELL' variable might be
-inherited from the environment. (This is never a problem with GNU
-`make'.)
-
- Different `make' programs have incompatible suffix lists and
-implicit rules, and this sometimes creates confusion or misbehavior. So
-it is a good idea to set the suffix list explicitly using only the
-suffixes you need in the particular Makefile, like this:
-
- .SUFFIXES:
- .SUFFIXES: .c .o
-
-The first line clears out the suffix list, the second introduces all
-suffixes which may be subject to implicit rules in this Makefile.
-
- Don't assume that `.' is in the path for command execution. When
-you need to run programs that are a part of your package during the
-make, please make sure that it uses `./' if the program is built as
-part of the make or `$(srcdir)/' if the file is an unchanging part of
-the source code. Without one of these prefixes, the current search
-path is used.
-
- The distinction between `./' (the "build directory") and
-`$(srcdir)/' (the "source directory") is important because users can
-build in a separate directory using the `--srcdir' option to
-`configure'. A rule of the form:
-
- foo.1 : foo.man sedscript
- sed -e sedscript foo.man > foo.1
-
-will fail when the build directory is not the source directory, because
-`foo.man' and `sedscript' are in the source directory.
-
- When using GNU `make', relying on `VPATH' to find the source file
-will work in the case where there is a single dependency file, since
-the `make' automatic variable `$<' will represent the source file
-wherever it is. (Many versions of `make' set `$<' only in implicit
-rules.) A Makefile target like
-
- foo.o : bar.c
- $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o
-
-should instead be written as
-
- foo.o : bar.c
- $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@
-
-in order to allow `VPATH' to work correctly. When the target has
-multiple dependencies, using an explicit `$(srcdir)' is the easiest way
-to make the rule work well. For example, the target above for `foo.1'
-is best written as:
-
- foo.1 : foo.man sedscript
- sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@
-
- GNU distributions usually contain some files which are not source
-files--for example, Info files, and the output from Autoconf, Automake,
-Bison or Flex. Since these files normally appear in the source
-directory, they should always appear in the source directory, not in the
-build directory. So Makefile rules to update them should put the
-updated files in the source directory.
-
- However, if a file does not appear in the distribution, then the
-Makefile should not put it in the source directory, because building a
-program in ordinary circumstances should not modify the source directory
-in any way.
-
- Try to make the build and installation targets, at least (and all
-their subtargets) work correctly with a parallel `make'.
-
-
-File: standards.info, Node: Utilities in Makefiles, Next: Command Variables, Prev: Makefile Basics, Up: Makefile Conventions
-
-7.2.2 Utilities in Makefiles
-----------------------------
-
-Write the Makefile commands (and any shell scripts, such as
-`configure') to run in `sh', not in `csh'. Don't use any special
-features of `ksh' or `bash'.
-
- The `configure' script and the Makefile rules for building and
-installation should not use any utilities directly except these:
-
- cat cmp cp diff echo egrep expr false grep install-info
- ln ls mkdir mv pwd rm rmdir sed sleep sort tar test touch true
-
- The compression program `gzip' can be used in the `dist' rule.
-
- Stick to the generally supported options for these programs. For
-example, don't use `mkdir -p', convenient as it may be, because most
-systems don't support it.
-
- It is a good idea to avoid creating symbolic links in makefiles,
-since a few systems don't support them.
-
- The Makefile rules for building and installation can also use
-compilers and related programs, but should do so via `make' variables
-so that the user can substitute alternatives. Here are some of the
-programs we mean:
-
- ar bison cc flex install ld ldconfig lex
- make makeinfo ranlib texi2dvi yacc
-
- Use the following `make' variables to run those programs:
-
- $(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX)
- $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC)
-
- When you use `ranlib' or `ldconfig', you should make sure nothing
-bad happens if the system does not have the program in question.
-Arrange to ignore an error from that command, and print a message before
-the command to tell the user that failure of this command does not mean
-a problem. (The Autoconf `AC_PROG_RANLIB' macro can help with this.)
-
- If you use symbolic links, you should implement a fallback for
-systems that don't have symbolic links.
-
- Additional utilities that can be used via Make variables are:
-
- chgrp chmod chown mknod
-
- It is ok to use other utilities in Makefile portions (or scripts)
-intended only for particular systems where you know those utilities
-exist.
-
-
-File: standards.info, Node: Command Variables, Next: Directory Variables, Prev: Utilities in Makefiles, Up: Makefile Conventions
-
-7.2.3 Variables for Specifying Commands
----------------------------------------
-
-Makefiles should provide variables for overriding certain commands,
-options, and so on.
-
- In particular, you should run most utility programs via variables.
-Thus, if you use Bison, have a variable named `BISON' whose default
-value is set with `BISON = bison', and refer to it with `$(BISON)'
-whenever you need to use Bison.
-
- File management utilities such as `ln', `rm', `mv', and so on, need
-not be referred to through variables in this way, since users don't
-need to replace them with other programs.
-
- Each program-name variable should come with an options variable that
-is used to supply options to the program. Append `FLAGS' to the
-program-name variable name to get the options variable name--for
-example, `BISONFLAGS'. (The names `CFLAGS' for the C compiler,
-`YFLAGS' for yacc, and `LFLAGS' for lex, are exceptions to this rule,
-but we keep them because they are standard.) Use `CPPFLAGS' in any
-compilation command that runs the preprocessor, and use `LDFLAGS' in
-any compilation command that does linking as well as in any direct use
-of `ld'.
-
- If there are C compiler options that _must_ be used for proper
-compilation of certain files, do not include them in `CFLAGS'. Users
-expect to be able to specify `CFLAGS' freely themselves. Instead,
-arrange to pass the necessary options to the C compiler independently
-of `CFLAGS', by writing them explicitly in the compilation commands or
-by defining an implicit rule, like this:
-
- CFLAGS = -g
- ALL_CFLAGS = -I. $(CFLAGS)
- .c.o:
- $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
-
- Do include the `-g' option in `CFLAGS', because that is not
-_required_ for proper compilation. You can consider it a default that
-is only recommended. If the package is set up so that it is compiled
-with GCC by default, then you might as well include `-O' in the default
-value of `CFLAGS' as well.
-
- Put `CFLAGS' last in the compilation command, after other variables
-containing compiler options, so the user can use `CFLAGS' to override
-the others.
-
- `CFLAGS' should be used in every invocation of the C compiler, both
-those which do compilation and those which do linking.
-
- Every Makefile should define the variable `INSTALL', which is the
-basic command for installing a file into the system.
-
- Every Makefile should also define the variables `INSTALL_PROGRAM'
-and `INSTALL_DATA'. (The default for `INSTALL_PROGRAM' should be
-`$(INSTALL)'; the default for `INSTALL_DATA' should be `${INSTALL} -m
-644'.) Then it should use those variables as the commands for actual
-installation, for executables and nonexecutables respectively. Use
-these variables as follows:
-
- $(INSTALL_PROGRAM) foo $(bindir)/foo
- $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a
-
- Optionally, you may prepend the value of `DESTDIR' to the target
-filename. Doing this allows the installer to create a snapshot of the
-installation to be copied onto the real target filesystem later. Do not
-set the value of `DESTDIR' in your Makefile, and do not include it in
-any installed files. With support for `DESTDIR', the above examples
-become:
-
- $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo
- $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a
-
-Always use a file name, not a directory name, as the second argument of
-the installation commands. Use a separate command for each file to be
-installed.
-
-
-File: standards.info, Node: Directory Variables, Next: Standard Targets, Prev: Command Variables, Up: Makefile Conventions
-
-7.2.4 Variables for Installation Directories
---------------------------------------------
-
-Installation directories should always be named by variables, so it is
-easy to install in a nonstandard place. The standard names for these
-variables are described below. They are based on a standard filesystem
-layout; variants of it are used in SVR4, 4.4BSD, GNU/Linux, Ultrix v4,
-and other modern operating systems.
-
- These two variables set the root for the installation. All the other
-installation directories should be subdirectories of one of these two,
-and nothing should be directly installed into these two directories.
-
-`prefix'
- A prefix used in constructing the default values of the variables
- listed below. The default value of `prefix' should be
- `/usr/local'. When building the complete GNU system, the prefix
- will be empty and `/usr' will be a symbolic link to `/'. (If you
- are using Autoconf, write it as `@prefix@'.)
-
- Running `make install' with a different value of `prefix' from the
- one used to build the program should _not_ recompile the program.
-
-`exec_prefix'
- A prefix used in constructing the default values of some of the
- variables listed below. The default value of `exec_prefix' should
- be `$(prefix)'. (If you are using Autoconf, write it as
- `@exec_prefix@'.)
-
- Generally, `$(exec_prefix)' is used for directories that contain
- machine-specific files (such as executables and subroutine
- libraries), while `$(prefix)' is used directly for other
- directories.
-
- Running `make install' with a different value of `exec_prefix'
- from the one used to build the program should _not_ recompile the
- program.
-
- Executable programs are installed in one of the following
-directories.
-
-`bindir'
- The directory for installing executable programs that users can
- run. This should normally be `/usr/local/bin', but write it as
- `$(exec_prefix)/bin'. (If you are using Autoconf, write it as
- `@bindir@'.)
-
-`sbindir'
- The directory for installing executable programs that can be run
- from the shell, but are only generally useful to system
- administrators. This should normally be `/usr/local/sbin', but
- write it as `$(exec_prefix)/sbin'. (If you are using Autoconf,
- write it as `@sbindir@'.)
-
-`libexecdir'
- The directory for installing executable programs to be run by other
- programs rather than by users. This directory should normally be
- `/usr/local/libexec', but write it as `$(exec_prefix)/libexec'.
- (If you are using Autoconf, write it as `@libexecdir@'.)
-
- Data files used by the program during its execution are divided into
-categories in two ways.
-
- * Some files are normally modified by programs; others are never
- normally modified (though users may edit some of these).
-
- * Some files are architecture-independent and can be shared by all
- machines at a site; some are architecture-dependent and can be
- shared only by machines of the same kind and operating system;
- others may never be shared between two machines.
-
- This makes for six different possibilities. However, we want to
-discourage the use of architecture-dependent files, aside from object
-files and libraries. It is much cleaner to make other data files
-architecture-independent, and it is generally not hard.
-
- Therefore, here are the variables Makefiles should use to specify
-directories:
-
-`datadir'
- The directory for installing read-only architecture independent
- data files. This should normally be `/usr/local/share', but write
- it as `$(prefix)/share'. (If you are using Autoconf, write it as
- `@datadir@'.) As a special exception, see `$(infodir)' and
- `$(includedir)' below.
-
-`sysconfdir'
- The directory for installing read-only data files that pertain to a
- single machine-that is to say, files for configuring a host.
- Mailer and network configuration files, `/etc/passwd', and so
- forth belong here. All the files in this directory should be
- ordinary ASCII text files. This directory should normally be
- `/usr/local/etc', but write it as `$(prefix)/etc'. (If you are
- using Autoconf, write it as `@sysconfdir@'.)
-
- Do not install executables here in this directory (they probably
- belong in `$(libexecdir)' or `$(sbindir)'). Also do not install
- files that are modified in the normal course of their use (programs
- whose purpose is to change the configuration of the system
- excluded). Those probably belong in `$(localstatedir)'.
-
-`sharedstatedir'
- The directory for installing architecture-independent data files
- which the programs modify while they run. This should normally be
- `/usr/local/com', but write it as `$(prefix)/com'. (If you are
- using Autoconf, write it as `@sharedstatedir@'.)
-
-`localstatedir'
- The directory for installing data files which the programs modify
- while they run, and that pertain to one specific machine. Users
- should never need to modify files in this directory to configure
- the package's operation; put such configuration information in
- separate files that go in `$(datadir)' or `$(sysconfdir)'.
- `$(localstatedir)' should normally be `/usr/local/var', but write
- it as `$(prefix)/var'. (If you are using Autoconf, write it as
- `@localstatedir@'.)
-
-`libdir'
- The directory for object files and libraries of object code. Do
- not install executables here, they probably ought to go in
- `$(libexecdir)' instead. The value of `libdir' should normally be
- `/usr/local/lib', but write it as `$(exec_prefix)/lib'. (If you
- are using Autoconf, write it as `@libdir@'.)
-
-`infodir'
- The directory for installing the Info files for this package. By
- default, it should be `/usr/local/info', but it should be written
- as `$(prefix)/info'. (If you are using Autoconf, write it as
- `@infodir@'.)
-
-`lispdir'
- The directory for installing any Emacs Lisp files in this package.
- By default, it should be `/usr/local/share/emacs/site-lisp', but
- it should be written as `$(prefix)/share/emacs/site-lisp'.
-
- If you are using Autoconf, write the default as `@lispdir@'. In
- order to make `@lispdir@' work, you need the following lines in
- your `configure.in' file:
-
- lispdir='${datadir}/emacs/site-lisp'
- AC_SUBST(lispdir)
-
-`includedir'
- The directory for installing header files to be included by user
- programs with the C `#include' preprocessor directive. This
- should normally be `/usr/local/include', but write it as
- `$(prefix)/include'. (If you are using Autoconf, write it as
- `@includedir@'.)
-
- Most compilers other than GCC do not look for header files in
- directory `/usr/local/include'. So installing the header files
- this way is only useful with GCC. Sometimes this is not a problem
- because some libraries are only really intended to work with GCC.
- But some libraries are intended to work with other compilers.
- They should install their header files in two places, one
- specified by `includedir' and one specified by `oldincludedir'.
-
-`oldincludedir'
- The directory for installing `#include' header files for use with
- compilers other than GCC. This should normally be `/usr/include'.
- (If you are using Autoconf, you can write it as `@oldincludedir@'.)
-
- The Makefile commands should check whether the value of
- `oldincludedir' is empty. If it is, they should not try to use
- it; they should cancel the second installation of the header files.
-
- A package should not replace an existing header in this directory
- unless the header came from the same package. Thus, if your Foo
- package provides a header file `foo.h', then it should install the
- header file in the `oldincludedir' directory if either (1) there
- is no `foo.h' there or (2) the `foo.h' that exists came from the
- Foo package.
-
- To tell whether `foo.h' came from the Foo package, put a magic
- string in the file--part of a comment--and `grep' for that string.
-
- Unix-style man pages are installed in one of the following:
-
-`mandir'
- The top-level directory for installing the man pages (if any) for
- this package. It will normally be `/usr/local/man', but you should
- write it as `$(prefix)/man'. (If you are using Autoconf, write it
- as `@mandir@'.)
-
-`man1dir'
- The directory for installing section 1 man pages. Write it as
- `$(mandir)/man1'.
-
-`man2dir'
- The directory for installing section 2 man pages. Write it as
- `$(mandir)/man2'
-
-`...'
- *Don't make the primary documentation for any GNU software be a
- man page. Write a manual in Texinfo instead. Man pages are just
- for the sake of people running GNU software on Unix, which is a
- secondary application only.*
-
-`manext'
- The file name extension for the installed man page. This should
- contain a period followed by the appropriate digit; it should
- normally be `.1'.
-
-`man1ext'
- The file name extension for installed section 1 man pages.
-
-`man2ext'
- The file name extension for installed section 2 man pages.
-
-`...'
- Use these names instead of `manext' if the package needs to
- install man pages in more than one section of the manual.
-
- And finally, you should set the following variable:
-
-`srcdir'
- The directory for the sources being compiled. The value of this
- variable is normally inserted by the `configure' shell script.
- (If you are using Autconf, use `srcdir = @srcdir@'.)
-
- For example:
-
- # Common prefix for installation directories.
- # NOTE: This directory must exist when you start the install.
- prefix = /usr/local
- exec_prefix = $(prefix)
- # Where to put the executable for the command `gcc'.
- bindir = $(exec_prefix)/bin
- # Where to put the directories used by the compiler.
- libexecdir = $(exec_prefix)/libexec
- # Where to put the Info files.
- infodir = $(prefix)/info
-
- If your program installs a large number of files into one of the
-standard user-specified directories, it might be useful to group them
-into a subdirectory particular to that program. If you do this, you
-should write the `install' rule to create these subdirectories.
-
- Do not expect the user to include the subdirectory name in the value
-of any of the variables listed above. The idea of having a uniform set
-of variable names for installation directories is to enable the user to
-specify the exact same values for several different GNU packages. In
-order for this to be useful, all the packages must be designed so that
-they will work sensibly when the user does so.
-
-
-File: standards.info, Node: Standard Targets, Next: Install Command Categories, Prev: Directory Variables, Up: Makefile Conventions
-
-7.2.5 Standard Targets for Users
---------------------------------
-
-All GNU programs should have the following targets in their Makefiles:
-
-`all'
- Compile the entire program. This should be the default target.
- This target need not rebuild any documentation files; Info files
- should normally be included in the distribution, and DVI files
- should be made only when explicitly asked for.
-
- By default, the Make rules should compile and link with `-g', so
- that executable programs have debugging symbols. Users who don't
- mind being helpless can strip the executables later if they wish.
-
-`install'
- Compile the program and copy the executables, libraries, and so on
- to the file names where they should reside for actual use. If
- there is a simple test to verify that a program is properly
- installed, this target should run that test.
-
- Do not strip executables when installing them. Devil-may-care
- users can use the `install-strip' target to do that.
-
- If possible, write the `install' target rule so that it does not
- modify anything in the directory where the program was built,
- provided `make all' has just been done. This is convenient for
- building the program under one user name and installing it under
- another.
-
- The commands should create all the directories in which files are
- to be installed, if they don't already exist. This includes the
- directories specified as the values of the variables `prefix' and
- `exec_prefix', as well as all subdirectories that are needed. One
- way to do this is by means of an `installdirs' target as described
- below.
-
- Use `-' before any command for installing a man page, so that
- `make' will ignore any errors. This is in case there are systems
- that don't have the Unix man page documentation system installed.
-
- The way to install Info files is to copy them into `$(infodir)'
- with `$(INSTALL_DATA)' (*note Command Variables::), and then run
- the `install-info' program if it is present. `install-info' is a
- program that edits the Info `dir' file to add or update the menu
- entry for the given Info file; it is part of the Texinfo package.
- Here is a sample rule to install an Info file:
-
- $(DESTDIR)$(infodir)/foo.info: foo.info
- $(POST_INSTALL)
- # There may be a newer info file in . than in srcdir.
- -if test -f foo.info; then d=.; \
- else d=$(srcdir); fi; \
- $(INSTALL_DATA) $$d/foo.info $(DESTDIR)$@; \
- # Run install-info only if it exists.
- # Use `if' instead of just prepending `-' to the
- # line so we notice real errors from install-info.
- # We use `$(SHELL) -c' because some shells do not
- # fail gracefully when there is an unknown command.
- if $(SHELL) -c 'install-info --version' \
- >/dev/null 2>&1; then \
- install-info --dir-file=$(DESTDIR)$(infodir)/dir \
- $(DESTDIR)$(infodir)/foo.info; \
- else true; fi
-
- When writing the `install' target, you must classify all the
- commands into three categories: normal ones, "pre-installation"
- commands and "post-installation" commands. *Note Install Command
- Categories::.
-
-`uninstall'
- Delete all the installed files--the copies that the `install'
- target creates.
-
- This rule should not modify the directories where compilation is
- done, only the directories where files are installed.
-
- The uninstallation commands are divided into three categories,
- just like the installation commands. *Note Install Command
- Categories::.
-
-`install-strip'
- Like `install', but strip the executable files while installing
- them. In simple cases, this target can use the `install' target in
- a simple way:
-
- install-strip:
- $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \
- install
-
- But if the package installs scripts as well as real executables,
- the `install-strip' target can't just refer to the `install'
- target; it has to strip the executables but not the scripts.
-
- `install-strip' should not strip the executables in the build
- directory which are being copied for installation. It should only
- strip the copies that are installed.
-
- Normally we do not recommend stripping an executable unless you
- are sure the program has no bugs. However, it can be reasonable
- to install a stripped executable for actual execution while saving
- the unstripped executable elsewhere in case there is a bug.
-
-`clean'
- Delete all files from the current directory that are normally
- created by building the program. Don't delete the files that
- record the configuration. Also preserve files that could be made
- by building, but normally aren't because the distribution comes
- with them.
-
- Delete `.dvi' files here if they are not part of the distribution.
-
-`distclean'
- Delete all files from the current directory that are created by
- configuring or building the program. If you have unpacked the
- source and built the program without creating any other files,
- `make distclean' should leave only the files that were in the
- distribution.
-
-`mostlyclean'
- Like `clean', but may refrain from deleting a few files that people
- normally don't want to recompile. For example, the `mostlyclean'
- target for GCC does not delete `libgcc.a', because recompiling it
- is rarely necessary and takes a lot of time.
-
-`maintainer-clean'
- Delete almost everything from the current directory that can be
- reconstructed with this Makefile. This typically includes
- everything deleted by `distclean', plus more: C source files
- produced by Bison, tags tables, Info files, and so on.
-
- The reason we say "almost everything" is that running the command
- `make maintainer-clean' should not delete `configure' even if
- `configure' can be remade using a rule in the Makefile. More
- generally, `make maintainer-clean' should not delete anything that
- needs to exist in order to run `configure' and then begin to build
- the program. This is the only exception; `maintainer-clean' should
- delete everything else that can be rebuilt.
-
- The `maintainer-clean' target is intended to be used by a
- maintainer of the package, not by ordinary users. You may need
- special tools to reconstruct some of the files that `make
- maintainer-clean' deletes. Since these files are normally
- included in the distribution, we don't take care to make them easy
- to reconstruct. If you find you need to unpack the full
- distribution again, don't blame us.
-
- To help make users aware of this, the commands for the special
- `maintainer-clean' target should start with these two:
-
- @echo 'This command is intended for maintainers to use; it'
- @echo 'deletes files that may need special tools to rebuild.'
-
-`TAGS'
- Update a tags table for this program.
-
-`info'
- Generate any Info files needed. The best way to write the rules
- is as follows:
-
- info: foo.info
-
- foo.info: foo.texi chap1.texi chap2.texi
- $(MAKEINFO) $(srcdir)/foo.texi
-
- You must define the variable `MAKEINFO' in the Makefile. It should
- run the `makeinfo' program, which is part of the Texinfo
- distribution.
-
- Normally a GNU distribution comes with Info files, and that means
- the Info files are present in the source directory. Therefore,
- the Make rule for an info file should update it in the source
- directory. When users build the package, ordinarily Make will not
- update the Info files because they will already be up to date.
-
-`dvi'
- Generate DVI files for all Texinfo documentation. For example:
-
- dvi: foo.dvi
-
- foo.dvi: foo.texi chap1.texi chap2.texi
- $(TEXI2DVI) $(srcdir)/foo.texi
-
- You must define the variable `TEXI2DVI' in the Makefile. It should
- run the program `texi2dvi', which is part of the Texinfo
- distribution.(1) Alternatively, write just the dependencies, and
- allow GNU `make' to provide the command.
-
-`dist'
- Create a distribution tar file for this program. The tar file
- should be set up so that the file names in the tar file start with
- a subdirectory name which is the name of the package it is a
- distribution for. This name can include the version number.
-
- For example, the distribution tar file of GCC version 1.40 unpacks
- into a subdirectory named `gcc-1.40'.
-
- The easiest way to do this is to create a subdirectory
- appropriately named, use `ln' or `cp' to install the proper files
- in it, and then `tar' that subdirectory.
-
- Compress the tar file with `gzip'. For example, the actual
- distribution file for GCC version 1.40 is called `gcc-1.40.tar.gz'.
-
- The `dist' target should explicitly depend on all non-source files
- that are in the distribution, to make sure they are up to date in
- the distribution. *Note Making Releases: Releases.
-
-`check'
- Perform self-tests (if any). The user must build the program
- before running the tests, but need not install the program; you
- should write the self-tests so that they work when the program is
- built but not installed.
-
- The following targets are suggested as conventional names, for
-programs in which they are useful.
-
-`installcheck'
- Perform installation tests (if any). The user must build and
- install the program before running the tests. You should not
- assume that `$(bindir)' is in the search path.
-
-`installdirs'
- It's useful to add a target named `installdirs' to create the
- directories where files are installed, and their parent
- directories. There is a script called `mkinstalldirs' which is
- convenient for this; you can find it in the Texinfo package. You
- can use a rule like this:
-
- # Make sure all installation directories (e.g. $(bindir))
- # actually exist by making them if necessary.
- installdirs: mkinstalldirs
- $(srcdir)/mkinstalldirs $(bindir) $(datadir) \
- $(libdir) $(infodir) \
- $(mandir)
-
- or, if you wish to support `DESTDIR',
-
- # Make sure all installation directories (e.g. $(bindir))
- # actually exist by making them if necessary.
- installdirs: mkinstalldirs
- $(srcdir)/mkinstalldirs \
- $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \
- $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \
- $(DESTDIR)$(mandir)
-
- This rule should not modify the directories where compilation is
- done. It should do nothing but create installation directories.
-
- ---------- Footnotes ----------
-
- (1) `texi2dvi' uses TeX to do the real work of formatting. TeX is
-not distributed with Texinfo.
-
-
-File: standards.info, Node: Install Command Categories, Prev: Standard Targets, Up: Makefile Conventions
-
-7.2.6 Install Command Categories
---------------------------------
-
-When writing the `install' target, you must classify all the commands
-into three categories: normal ones, "pre-installation" commands and
-"post-installation" commands.
-
- Normal commands move files into their proper places, and set their
-modes. They may not alter any files except the ones that come entirely
-from the package they belong to.
-
- Pre-installation and post-installation commands may alter other
-files; in particular, they can edit global configuration files or data
-bases.
-
- Pre-installation commands are typically executed before the normal
-commands, and post-installation commands are typically run after the
-normal commands.
-
- The most common use for a post-installation command is to run
-`install-info'. This cannot be done with a normal command, since it
-alters a file (the Info directory) which does not come entirely and
-solely from the package being installed. It is a post-installation
-command because it needs to be done after the normal command which
-installs the package's Info files.
-
- Most programs don't need any pre-installation commands, but we have
-the feature just in case it is needed.
-
- To classify the commands in the `install' rule into these three
-categories, insert "category lines" among them. A category line
-specifies the category for the commands that follow.
-
- A category line consists of a tab and a reference to a special Make
-variable, plus an optional comment at the end. There are three
-variables you can use, one for each category; the variable name
-specifies the category. Category lines are no-ops in ordinary execution
-because these three Make variables are normally undefined (and you
-_should not_ define them in the makefile).
-
- Here are the three possible category lines, each with a comment that
-explains what it means:
-
- $(PRE_INSTALL) # Pre-install commands follow.
- $(POST_INSTALL) # Post-install commands follow.
- $(NORMAL_INSTALL) # Normal commands follow.
-
- If you don't use a category line at the beginning of the `install'
-rule, all the commands are classified as normal until the first category
-line. If you don't use any category lines, all the commands are
-classified as normal.
-
- These are the category lines for `uninstall':
-
- $(PRE_UNINSTALL) # Pre-uninstall commands follow.
- $(POST_UNINSTALL) # Post-uninstall commands follow.
- $(NORMAL_UNINSTALL) # Normal commands follow.
-
- Typically, a pre-uninstall command would be used for deleting entries
-from the Info directory.
-
- If the `install' or `uninstall' target has any dependencies which
-act as subroutines of installation, then you should start _each_
-dependency's commands with a category line, and start the main target's
-commands with a category line also. This way, you can ensure that each
-command is placed in the right category regardless of which of the
-dependencies actually run.
-
- Pre-installation and post-installation commands should not run any
-programs except for these:
-
- [ basename bash cat chgrp chmod chown cmp cp dd diff echo
- egrep expand expr false fgrep find getopt grep gunzip gzip
- hostname install install-info kill ldconfig ln ls md5sum
- mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee
- test touch true uname xargs yes
-
- The reason for distinguishing the commands in this way is for the
-sake of making binary packages. Typically a binary package contains
-all the executables and other files that need to be installed, and has
-its own method of installing them--so it does not need to run the normal
-installation commands. But installing the binary package does need to
-execute the pre-installation and post-installation commands.
-
- Programs to build binary packages work by extracting the
-pre-installation and post-installation commands. Here is one way of
-extracting the pre-installation commands:
-
- make -n install -o all \
- PRE_INSTALL=pre-install \
- POST_INSTALL=post-install \
- NORMAL_INSTALL=normal-install \
- | gawk -f pre-install.awk
-
-where the file `pre-install.awk' could contain this:
-
- $0 ~ /^\t[ \t]*(normal_install|post_install)[ \t]*$/ {on = 0}
- on {print $0}
- $0 ~ /^\t[ \t]*pre_install[ \t]*$/ {on = 1}
-
- The resulting file of pre-installation commands is executed as a
-shell script as part of installing the binary package.
-
-
-File: standards.info, Node: Releases, Prev: Makefile Conventions, Up: Managing Releases
-
-7.3 Making Releases
-===================
-
-Package the distribution of `Foo version 69.96' up in a gzipped tar
-file with the name `foo-69.96.tar.gz'. It should unpack into a
-subdirectory named `foo-69.96'.
-
- Building and installing the program should never modify any of the
-files contained in the distribution. This means that all the files
-that form part of the program in any way must be classified into "source
-files" and "non-source files". Source files are written by humans and
-never changed automatically; non-source files are produced from source
-files by programs under the control of the Makefile.
-
- The distribution should contain a file named `README' which gives
-the name of the package, and a general description of what it does. It
-is also good to explain the purpose of each of the first-level
-subdirectories in the package, if there are any. The `README' file
-should either state the version number of the package, or refer to where
-in the package it can be found.
-
- The `README' file should refer to the file `INSTALL', which should
-contain an explanation of the installation procedure.
-
- The `README' file should also refer to the file which contains the
-copying conditions. The GNU GPL, if used, should be in a file called
-`COPYING'. If the GNU LGPL is used, it should be in a file called
-`COPYING.LIB'.
-
- Naturally, all the source files must be in the distribution. It is
-okay to include non-source files in the distribution, provided they are
-up-to-date and machine-independent, so that building the distribution
-normally will never modify them. We commonly include non-source files
-produced by Bison, `lex', TeX, and `makeinfo'; this helps avoid
-unnecessary dependencies between our distributions, so that users can
-install whichever packages they want to install.
-
- Non-source files that might actually be modified by building and
-installing the program should *never* be included in the distribution.
-So if you do distribute non-source files, always make sure they are up
-to date when you make a new distribution.
-
- Make sure that the directory into which the distribution unpacks (as
-well as any subdirectories) are all world-writable (octal mode 777).
-This is so that old versions of `tar' which preserve the ownership and
-permissions of the files from the tar archive will be able to extract
-all the files even if the user is unprivileged.
-
- Make sure that all the files in the distribution are world-readable.
-
- Make sure that no file name in the distribution is more than 14
-characters long. Likewise, no file created by building the program
-should have a name longer than 14 characters. The reason for this is
-that some systems adhere to a foolish interpretation of the POSIX
-standard, and refuse to open a longer name, rather than truncating as
-they did in the past.
-
- Don't include any symbolic links in the distribution itself. If the
-tar file contains symbolic links, then people cannot even unpack it on
-systems that don't support symbolic links. Also, don't use multiple
-names for one file in different directories, because certain file
-systems cannot handle this and that prevents unpacking the distribution.
-
- Try to make sure that all the file names will be unique on MS-DOS. A
-name on MS-DOS consists of up to 8 characters, optionally followed by a
-period and up to three characters. MS-DOS will truncate extra
-characters both before and after the period. Thus, `foobarhacker.c'
-and `foobarhacker.o' are not ambiguous; they are truncated to
-`foobarha.c' and `foobarha.o', which are distinct.
-
- Include in your distribution a copy of the `texinfo.tex' you used to
-test print any `*.texinfo' or `*.texi' files.
-
- Likewise, if your program uses small GNU software packages like
-regex, getopt, obstack, or termcap, include them in the distribution
-file. Leaving them out would make the distribution file a little
-smaller at the expense of possible inconvenience to a user who doesn't
-know what other files to get.
-
-
-File: standards.info, Node: References, Next: Copying This Manual, Prev: Managing Releases, Up: Top
-
-8 References to Non-Free Software and Documentation
-***************************************************
-
-A GNU program should not recommend use of any non-free program. We
-can't stop some people from writing proprietary programs, or stop other
-people from using them, but we can and should avoid helping to
-advertise them to new potential customers. Proprietary software is a
-social and ethical problem, and the point of GNU is to solve that
-problem.
-
- When a non-free program or system is well known, you can mention it
-in passing--that is harmless, since users who might want to use it
-probably already know about it. For instance, it is fine to explain
-how to build your package on top of some non-free operating system, or
-how to use it together with some widely used non-free program.
-
- However, you should give only the necessary information to help those
-who already use the non-free program to use your program with it--don't
-give, or refer to, any further information about the proprietary
-program, and don't imply that the proprietary program enhances your
-program, or that its existence is in any way a good thing. The goal
-should be that people already using the proprietary program will get
-the advice they need about how to use your free program, while people
-who don't already use the proprietary program will not see anything to
-lead them to take an interest in it.
-
- If a non-free program or system is obscure in your program's domain,
-your program should not mention or support it at all, since doing so
-would tend to popularize the non-free program more than it popularizes
-your program. (You cannot hope to find many additional users among the
-users of Foobar if the users of Foobar are few.)
-
- A GNU package should not refer the user to any non-free documentation
-for free software. Free documentation that can be included in free
-operating systems is essential for completing the GNU system, so it is
-a major focus of the GNU Project; to recommend use of documentation
-that we are not allowed to use in GNU would undermine the efforts to
-get documentation that we can include. So GNU packages should never
-recommend non-free documentation.
-
-
-File: standards.info, Node: Copying This Manual, Next: Index, Prev: References, Up: Top
-
-Appendix A Copying This Manual
-******************************
-
-* Menu:
-
-* GNU Free Documentation License:: License for copying this manual
-
-
-File: standards.info, Node: GNU Free Documentation License, Up: Copying This Manual
-
-Appendix B GNU Free Documentation License
-*****************************************
-
- Version 1.1, March 2000
-
- Copyright (C) 2000 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 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: standards.info, Node: Index, Prev: Copying This Manual, Up: Top
-
-Index
-*****
-
-
-* Menu:
-
-* #endif, commenting: Comments. (line 54)
-* --help option: Command-Line Interfaces.
- (line 119)
-* --version option: Command-Line Interfaces.
- (line 34)
-* -Wall compiler option: Syntactic Conventions.
- (line 10)
-* accepting contributions: Contributions. (line 6)
-* address for bug reports: Command-Line Interfaces.
- (line 125)
-* ANSI C standard: Standard C. (line 6)
-* arbitrary limits on data: Semantics. (line 6)
-* autoconf: System Portability. (line 23)
-* avoiding proprietary code: Reading Non-Free Code.
- (line 6)
-* behavior, dependent on program's name: User Interfaces. (line 6)
-* binary packages: Install Command Categories.
- (line 80)
-* bindir: Directory Variables. (line 45)
-* braces, in C source: Formatting. (line 6)
-* bug reports: Command-Line Interfaces.
- (line 125)
-* canonical name of a program: Command-Line Interfaces.
- (line 41)
-* casting pointers to integers: CPU Portability. (line 67)
-* change logs: Change Logs. (line 6)
-* change logs, conditional changes: Conditional Changes. (line 6)
-* change logs, style: Style of Change Logs.
- (line 6)
-* command-line arguments, decoding: Semantics. (line 46)
-* command-line interface: Command-Line Interfaces.
- (line 6)
-* commenting: Comments. (line 6)
-* compatibility with C and POSIX standards: Compatibility. (line 6)
-* compiler warnings: Syntactic Conventions.
- (line 10)
-* conditional changes, and change logs: Conditional Changes. (line 6)
-* conditionals, comments for: Comments. (line 54)
-* configure: Configuration. (line 6)
-* control-L: Formatting. (line 114)
-* conventions for makefiles: Makefile Conventions.
- (line 6)
-* corba: Graphical Interfaces.
- (line 16)
-* credits for manuals: Manual Credits. (line 6)
-* data types, and portability: CPU Portability. (line 6)
-* declaration for system functions: System Functions. (line 21)
-* documentation: Documentation. (line 6)
-* doschk: Names. (line 38)
-* downloading this manual: Preface. (line 17)
-* error messages: Semantics. (line 19)
-* error messages, formatting: Errors. (line 6)
-* exec_prefix: Directory Variables. (line 27)
-* expressions, splitting: Formatting. (line 77)
-* file usage: File Usage. (line 6)
-* file-name limitations: Names. (line 38)
-* formatting error messages: Errors. (line 6)
-* formatting source code: Formatting. (line 6)
-* formfeed: Formatting. (line 114)
-* function argument, declaring: Syntactic Conventions.
- (line 6)
-* function prototypes: Standard C. (line 17)
-* getopt: Command-Line Interfaces.
- (line 6)
-* gettext: Internationalization.
- (line 6)
-* gnome: Graphical Interfaces.
- (line 16)
-* graphical user interface: Graphical Interfaces.
- (line 6)
-* gtk: Graphical Interfaces.
- (line 6)
-* GUILE: Source Language. (line 38)
-* implicit int: Syntactic Conventions.
- (line 6)
-* impossible conditions: Semantics. (line 70)
-* internationalization: Internationalization.
- (line 6)
-* legal aspects: Legal Issues. (line 6)
-* legal papers: Contributions. (line 6)
-* libexecdir: Directory Variables. (line 58)
-* libraries: Libraries. (line 6)
-* library functions, and portability: System Functions. (line 6)
-* license for manuals: License for Manuals. (line 6)
-* lint: Syntactic Conventions.
- (line 109)
-* long option names: Option Table. (line 6)
-* long-named options: Command-Line Interfaces.
- (line 12)
-* makefile, conventions for: Makefile Conventions.
- (line 6)
-* malloc return value: Semantics. (line 25)
-* man pages: Man Pages. (line 6)
-* manual structure: Manual Structure Details.
- (line 6)
-* memory allocation failure: Semantics. (line 25)
-* memory usage: Memory Usage. (line 6)
-* message text, and internationalization: Internationalization.
- (line 29)
-* mmap: Mmap. (line 6)
-* multiple variables in a line: Syntactic Conventions.
- (line 35)
-* names of variables, functions, and files: Names. (line 6)
-* NEWS file: NEWS File. (line 6)
-* non-POSIX systems, and portability: System Portability. (line 32)
-* non-standard extensions: Using Extensions. (line 6)
-* NUL characters: Semantics. (line 11)
-* open brace: Formatting. (line 6)
-* optional features, configure-time: Configuration. (line 76)
-* options for compatibility: Compatibility. (line 14)
-* output device and program's behavior: User Interfaces. (line 13)
-* packaging: Releases. (line 6)
-* portability, and data types: CPU Portability. (line 6)
-* portability, and library functions: System Functions. (line 6)
-* portability, between system types: System Portability. (line 6)
-* POSIX compatibility: Compatibility. (line 6)
-* POSIXLY_CORRECT, environment variable: Compatibility. (line 21)
-* post-installation commands: Install Command Categories.
- (line 6)
-* pre-installation commands: Install Command Categories.
- (line 6)
-* prefix: Directory Variables. (line 17)
-* program configuration: Configuration. (line 6)
-* program design: Design Advice. (line 6)
-* program name and its behavior: User Interfaces. (line 6)
-* program's canonical name: Command-Line Interfaces.
- (line 41)
-* programming languges: Source Language. (line 6)
-* proprietary programs: Reading Non-Free Code.
- (line 6)
-* README file: Releases. (line 17)
-* references to non-free material: References. (line 6)
-* releasing: Managing Releases. (line 6)
-* sbindir: Directory Variables. (line 51)
-* signal handling: Semantics. (line 59)
-* spaces before open-paren: Formatting. (line 71)
-* standard command-line options: Command-Line Interfaces.
- (line 31)
-* standards for makefiles: Makefile Conventions.
- (line 6)
-* string library functions: System Functions. (line 55)
-* syntactic conventions: Syntactic Conventions.
- (line 6)
-* table of long options: Option Table. (line 6)
-* temporary files: Semantics. (line 84)
-* temporary variables: Syntactic Conventions.
- (line 23)
-* texinfo.tex, in a distribution: Releases. (line 73)
-* TMPDIR environment variable: Semantics. (line 84)
-* trademarks: Trademarks. (line 6)
-* where to obtain standards.texi: Preface. (line 17)
-
-
-
-Tag Table:
-Node: Top696
-Node: Preface1396
-Node: Legal Issues3616
-Node: Reading Non-Free Code4080
-Node: Contributions5808
-Node: Trademarks7962
-Node: Design Advice9025
-Node: Source Language9609
-Node: Compatibility11621
-Node: Using Extensions13249
-Node: Standard C14825
-Node: Conditional Compilation17228
-Node: Program Behavior18527
-Node: Semantics19446
-Node: Libraries24139
-Node: Errors25384
-Node: User Interfaces27165
-Node: Graphical Interfaces28770
-Node: Command-Line Interfaces29805
-Node: Option Table35876
-Node: Memory Usage50885
-Node: File Usage51910
-Node: Writing C52658
-Node: Formatting53508
-Node: Comments57571
-Node: Syntactic Conventions60873
-Node: Names64285
-Node: System Portability66494
-Node: CPU Portability68879
-Node: System Functions72135
-Node: Internationalization77332
-Node: Mmap80485
-Node: Documentation81195
-Node: GNU Manuals82300
-Node: Doc Strings and Manuals87357
-Node: Manual Structure Details88910
-Node: License for Manuals90328
-Node: Manual Credits91302
-Node: Printed Manuals91695
-Node: NEWS File92381
-Node: Change Logs93059
-Node: Change Log Concepts93813
-Node: Style of Change Logs95677
-Node: Simple Changes97712
-Node: Conditional Changes98956
-Node: Indicating the Part Changed100378
-Node: Man Pages100905
-Node: Reading other Manuals102529
-Node: Managing Releases103320
-Node: Configuration104083
-Node: Makefile Conventions110988
-Node: Makefile Basics111794
-Node: Utilities in Makefiles114968
-Node: Command Variables117113
-Node: Directory Variables120690
-Node: Standard Targets131584
-Ref: Standard Targets-Footnote-1142824
-Node: Install Command Categories142924
-Node: Releases147506
-Node: References151594
-Node: Copying This Manual153879
-Node: GNU Free Documentation License154115
-Node: Index173816
-
-End Tag Table
diff --git a/etc/texi2pod.pl b/etc/texi2pod.pl
index ed0d102a1a59..cd0ffd9435f7 100644
--- a/etc/texi2pod.pl
+++ b/etc/texi2pod.pl
@@ -162,6 +162,8 @@ while(<$inf>) {
} elsif ($ended =~ /^(?:itemize|enumerate|[fv]?table)$/) {
$_ = "\n=back\n";
$ic = pop @icstack;
+ } elsif ($ended eq "multitable") {
+ $_ = "\n=back\n";
} else {
die "unknown command \@end $ended at line $.\n";
}
@@ -252,6 +254,8 @@ while(<$inf>) {
and $_ = "\n=head2 $1\n";
/^\@subsection\s+(.+)$/
and $_ = "\n=head3 $1\n";
+ /^\@subsubsection\s+(.+)$/
+ and $_ = "\n=head4 $1\n";
# Block command handlers:
/^\@itemize(?:\s+(\@[a-z]+|\*|-))?/ and do {
@@ -260,7 +264,7 @@ while(<$inf>) {
if (defined $1) {
$ic = $1;
} else {
- $ic = '@bullet';
+ $ic = '*';
}
$_ = "\n=over 4\n";
$endw = "itemize";
@@ -278,6 +282,12 @@ while(<$inf>) {
$endw = "enumerate";
};
+ /^\@multitable\s.*/ and do {
+ push @endwstack, $endw;
+ $endw = "multitable";
+ $_ = "\n=over 4\n";
+ };
+
/^\@([fv]?table)\s+(\@[a-z]+)/ and do {
push @endwstack, $endw;
push @icstack, $ic;
@@ -297,6 +307,16 @@ while(<$inf>) {
$_ = ""; # need a paragraph break
};
+ /^\@item\s+(.*\S)\s*$/ and $endw eq "multitable" and do {
+ @columns = ();
+ for $column (split (/\s*\@tab\s*/, $1)) {
+ # @strong{...} is used a @headitem work-alike
+ $column =~ s/^\@strong{(.*)}$/$1/;
+ push @columns, $column;
+ }
+ $_ = "\n=item ".join (" : ", @columns)."\n";
+ };
+
/^\@itemx?\s*(.+)?$/ and do {
if (defined $1) {
# Entity escapes prevent munging by the <> processing below.
@@ -382,6 +402,9 @@ sub postprocess
s/\@gol//g;
s/\@\*\s*\n?//g;
+ # Anchors are thrown away
+ s/\@anchor\{(?:[^\}]*)\}//g;
+
# @uref can take one, two, or three arguments, with different
# semantics each time. @url and @email are just like @uref with
# one argument, for our purposes.
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 1723944a36e8..704e6f90d4fe 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,758 +1,1294 @@
-2006-07-19 Mat Hostetter <mat@lcs.mit.edu>
+2007-07-03 Nathan Sidwell <nathan@codesourcery.com>
- * symbols.c (report_op_error): Fix pasto. Don't use as_bad_where
- when file and line unknown.
+ * config/tc-m68k.c (m68k_ip): Add j & K operand types.
+ (install_operand): Add E encoding.
+ (md_begin): Check and skip initial '.' arg character.
+ (get_num): Add 0..511 case.
-2006-06-07 Joseph S. Myers <joseph@codesourcery.com>
+2007-07-03 Alan Modra <amodra@bigpond.net.au>
- * po/Make-in (pdf, ps): New dummy targets.
+ PR 4713
+ * config/obj-elf.c (elf_ecoff_set_ext): Make static when OBJ_MAYBE_ELF.
+ * config/obj-elf.h (obj_ecoff_set_ext): Comment.
-2006-06-02 Joseph S. Myers <joseph@codesourcery.com>
+2007-07-03 Mikkel Lauritsen <renard@nospam.dk>
- * doc/Makefile.am (TEXI2DVI): Define.
+ PR 4722
+ * app.c (do_scrub_chars <state 5>): Check for output buffer full
+ after memcpy.
+
+2007-07-02 Joseph Myers <joseph@codesourcery.com>
+
+ * config/tc-mips.c (s_dtprelword, s_dtpreldword,
+ s_dtprel_internal): New.
+ (mips_pseudo_table): Add .dtprelword and .dtpreldword.
+ (md_apply_fix): Handle BFD_RELOC_MIPS_TLS_DTPREL32 and
+ BFD_RELOC_MIPS_TLS_DTPREL64.
+
+2007-07-02 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * config.in: Regenerate.
* doc/Makefile.in: Regenerate.
- * doc/c-arc.texi: Fix typo.
+ * po/POTFILES.in: Regenerate.
+ * po/gas.pot: Regenerate.
-2006-05-30 Nick Clifton <nickc@redhat.com>
+2007-07-02 Alan Modra <amodra@bigpond.net.au>
- * po/es.po: Updated Spanish translation.
+ * config/tc-ppc.c (ppc_pe_section): Comment out code assigning
+ coff section flag values to bfd section flag.
-2006-05-25 Nathan Sidwell <nathan@codesourcery.com>
+2007-06-30 H.J. Lu <hongjiu.lu@intel.com>
- * gas/config/tc-m68k.c (m68k_init_arch): Move checking of
- cfloat/m68881 to correct architecture before using it.
+ * aclocal.m4: Regenerated.
+ * doc/Makefile.in: Likewise.
+ * Makefile.in: Likewise.
-2006-05-16 Nick Clifton <nickc@redhat.com>
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
- * Import these patches from the mainline:
+ * as.c (main): Only call create_obj_attrs_section if IS_ELF.
- 2006-05-16 Bjoern Haase <bjoern.m.haase@web.de>
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
- * config/tc-avr.h (TC_VALIDATE_FIX): Allow fixups for immediate
- constant values.
+ * as.c (create_obj_attrs_section): New.
+ (main): Call create_obj_attrs_section for ELF.
+ * read.c (s_gnu_attribute, skip_whitespace, skip_past_char,
+ skip_past_comma, s_vendor_attribute): New.
+ (potable): Add gnu_attribute for ELF.
+ * read.h (s_vendor_attribute): Declare.
+ * config/tc-arm.c (s_arm_eabi_attribute): Replace by wrapper
+ round s_vendor_attribute.
+ (aeabi_set_public_attributes): Update for new attributes
+ interfaces.
+ (arm_md_end): Remove attributes contents setting now done
+ generically.
- 2006-05-05 Bjoern Haase <bjoern.m.haase@web.de>
+2007-06-29 M R Swami Reddy <MR.Swami.Redd@nsc.com>
- * gas/config/tc-avr.h (TC_VALIDATE_FIX): Define. Disable fixups
- for PMEM related expressions.
+ * Makefile.am: Add CR16 related entry.
+ * Makefile.in: Regenerate.
+ * config/tc-cr16.h: New file
+ * config/tc-cr16.c: New file
+ * doc/c-cr16.texi: New file for cr16
+ * doc/all.texi: Entry for cr16
+ * doc/Makefile.am: Added c-cr16.texi
+ * doc/Makefile.in: Regenerate
+ * doc/as.texinfo: Entry for CR16 target
+ * NEWS: Announce the support for the new target.
-2006-05-11 Thiemo Seufer <ths@mips.com>
+2007-06-26 Paul Brook <paul@codesourcery.com>
- * config/tc-mips.c (append_insn): Don't check the range of j or
- jal addresses.
+ * config/tc-arm.c (parse_operands): Accept generic coprocessor regs
+ for OP_RVC.
+ (reg_names): Add fpinst, pfinst2, mvfr0 and mvfr1.
-2006-05-10 Alan Modra <amodra@bigpond.net.au>
+2007-06-25 H.J. Lu <hongjiu.lu@intel.com>
- * dwarf2dbg.c (get_line_subseg): Attach new struct line_seg to end
- of list rather than beginning.
+ * config/tc-i386.c (process_operands): Replace regKludge
+ with RegKludge.
-2006-05-10 Alan Modra <amodra@bigpond.net.au>
+2007-06-25 Richard Sandiford <richard@codesourcery.com>
- * write.c (relax_segment): Add pass count arg. Don't error on
- negative org/space on first two passes.
- (relax_seg_info): New struct.
- (relax_seg, write_object_file): Adjust.
- * write.h (relax_segment): Update prototype.
+ * config/tc-mips.h (TC_SYMFIELD_TYPE): New.
+ * config/tc-mips.c (append_insn): Record which symbols have
+ R_MIPS16_26 relocations against them.
+ (mips_fix_adjustable): Don't reduce relocations against such symbols.
-2006-05-02 Joseph Myers <joseph@codesourcery.com>
+2007-06-22 Sterling Augustine <sterling@tensilica.com>
- * config/tc-arm.c (do_iwmmxt_wldstbh): Don't multiply offset by 4
- here.
- (md_apply_fix3): Multiply offset by 4 here for
- BFD_RELOC_ARM_CP_OFF_IMM_S2 and BFD_RELOC_ARM_T32_CP_OFF_IMM_S2.
+ * config/tc-xtensa.c (xg_assembly_relax): Comment termination rules.
+ (frag_format_size): Handle RELAX_IMMED_STEP3.
+ (xtensa_relax_frag, md_convert_frag): Likewise.
+ * config/tc-xtensa.h (xtensa_relax_statesE): Add RELAX_IMMED_STEP3.
+ (RELAX_IMMED_MAXSTEPS): Adjust.
+ * config/xtensa-relax.c (widen_spec_list): Add transitions from
+ wide branches to branch-over-jumps.
+ (build_transition): Handle wide branches in transition patterns.
+
+2007-06-22 H.J. Lu <hongjiu.lu@intel.com>
-2006-05-02 Daniel Jacobowitz <dan@codesourcery.com>
+ * config/tc-i386.c (disp_size): New.
+ (imm_size): Likewise.
+ (output_disp): Use disp_size and imm_size.
+ (output_imm): Use imm_size.
- * doc/Makefile.am (AM_MAKEINFOFLAGS): New.
- (TEXI2POD): Use AM_MAKEINFOFLAGS.
- (asconfig.texi): Don't set top_srcdir.
- * doc/as.texinfo: Don't use top_srcdir.
- * aclocal.m4, Makefile.in, doc/Makefile.in: Regenerated.
+2007-06-19 Sterling Augustine <sterling@tensilica.com>
-2006-05-02 Paul Brook <paul@codesourcery.com>
+ * config/tc-xtensa.h (struct xtensa_frag_type): Update comment about
+ use of literal_frag field.
+ * config/tc-xtensa.c (xtensa_mark_literal_pool_location): Record frag
+ in the literal_frag field.
+ (xtensa_move_literals): Use it here instead of searching. Update
+ literal_frag field with new value.
- * config/tc-arm.c (arm_optimize_expr): New function.
- * config/tc-arm.h (md_optimize_expr): Define
- (arm_optimize_expr): Add prototype.
- (TC_FORCE_RELOCATION_SUB_SAME): Define.
+2007-06-14 Paul Brook <paul@codesourcery.com>
-2006-05-01 James Lemke <jwlemke@wasabisystems.com>
+ * config/tc-arm.c (do_t_mov_cmp): Handle shift by register and
+ narrow shift by immediate.
- * subsegs.c (subseg_set_rest): Always set seginfp->frchainP if NULL.
+2007-06-14 H.J. Lu <hongjiu.lu@intel.com>
-2006-04-25 Bob Wilson <bob.wilson@acm.org>
+ * Makefile.am (ACLOCAL_AMFLAGS): Add -I ../config -I ../bfd.
- * config/xtensa-relax.c (widen_spec_list): Use new "WIDE.<opcode>"
- syntax instead of hardcoded opcodes with ".w18" suffixes.
- (wide_branch_opcode): New.
- (build_transition): Use it to check for wide branch opcodes with
- either ".w18" or ".w15" suffixes.
+ * acinclude.m4: Don't include m4 files.
+ (BFD_BINARY_FOPEN): Removed.
+ Remove libtool kludge.
-2006-04-25 Bob Wilson <bob.wilson@acm.org>
+ * Makefile.in: Regenerated.
+ * doc/Makefile.in: Likewise.
+ * aclocal.m4: Likewise.
+ * configure: Likewise.
- * config/tc-xtensa.c (xtensa_create_literal_symbol,
- xg_assemble_literal, xg_assemble_literal_space): Do not set the
- frag's is_literal flag.
+2007-06-11 Sterling Augustine <sterling@tensilica.com>
+ Bob Wilson <bob.wilson@acm.org>
+
+ * config/tc-xtensa.c (XTENSA_PROP_INSN_NO_TRANSFORM): Renamed to...
+ (XTENSA_PROP_NO_TRANSFORM): ...this.
+ (frag_flags_struct): Move is_no_transform out of the insn sub-struct.
+ (xtensa_mark_frags_for_org): New.
+ (xtensa_handle_align): Set RELAX_ORG frag subtype for rs_org.
+ (xtensa_post_relax_hook): Call xtensa_mark_frags_for_org.
+ (get_frag_property_flags): Adjust reference to is_no_transform flag.
+ (xtensa_frag_flags_combinable): Likewise.
+ (frag_flags_to_number): Likewise. Use XTENSA_PROP_NO_TRANSFORM.
+ * config/tc-xtensa.h (xtensa_relax_statesE): Add RELAX_ORG.
+
+2007-06-06 Paul Brook <paul@codesourcery.com>
-2006-04-25 Bob Wilson <bob.wilson@acm.org>
+ * config/tc-arm.c (s_align): Pad code sections appropriately.
- * config/xtensa-relax.c (XCHAL_HAVE_WIDE_BRANCHES): Provide default.
+2007-06-05 Paul Brook <paul@codesourcery.com>
-2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+ * config/tc-arm.c (insns): Correct Thumb-2 ldrd/strd opcodes.
- * po/POTFILES.in: Regenerated.
+2007-06-05 Nick Clifton <nickc@redhat.com>
-2006-04-14 Sterling Augustine <sterling@tensilica.com>
+ PR gas/4587
+ * config/tc-sparc.c (sparc_ip): Terminate tls_ops array.
- * config/tc-xtensa.c (emit_single_op): Do not relax MOVI
- instructions when such transformations have been disabled.
+2007-06-05 Alan Modra <amodra@bigpond.net.au>
-2006-04-10 Sterling Augustine <sterling@tensilica.com>
+ * config/tc-spu.c (spu_cons): Use deferred_expression. Handle
+ number@ppu.
+ (tc_gen_reloc): Abort if neither addsy or subsy is set.
+ (md_apply_fix): Don't attempt to resolve SPU_PPU relocs.
+ * config/tc-spu.h (md_operand): Handle @ppu without sym.
- * config/tc-xtensa.c (xg_assemble_vliw_tokens): Record loop target
- symbols in RELAX[_CHECK]_ALIGN_NEXT_OPCODE frags.
- (xtensa_fix_close_loop_end_frags): Use the recorded values instead of
- decoding the loop instructions. Remove current_offset variable.
- (xtensa_fix_short_loop_frags): Likewise.
- (min_bytes_to_other_loop_end): Remove current_offset argument.
+2007-05-31 Paul Brook <paul@codesourcery.com>
-2006-04-09 Arnold Metselaar <arnold.metselaar@planet.nl>
+ * config/tc-arm.c (insns): Allow strex on M profile cores.
- * config/tc-z80.c (z80_optimize_expr): Removed; redundant since 2006-04-04.
- * config/tc-z80.h (z80_optimize_expr, md_optimize_expr): Removed.
+2007-05-29 David S. Miller <davem@davemloft.net>
+ Jakub Jelinek <jakub@redhat.com>
-2006-04-07 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+ PR gas/4558
+ * config/tc-sparc.c (md_apply_fix): Fix relocation overflow checks
+ for BFD_RELOC_SPARC_WDISP16 and BFD_RELOC_SPARC_WDISP19.
- * gas/config/tc-avr.c (mcu_types): Add support for attiny261,
- attiny461, attiny861, attiny25, attiny45, attiny85,attiny24,
- attiny44, attiny84, at90pwm2, at90pwm3, atmega164, atmega324,
- atmega644, atmega329, atmega3290, atmega649, atmega6490,
- atmega406, atmega640, atmega1280, atmega1281, at90can32,
- at90can64, at90usb646, at90usb647, at90usb1286 and
- at90usb1287.
- Move atmega48 and atmega88 from AVR_ISA_M8 to AVR_ISA_PWMx.
+2007-05-29 Alan Modra <amodra@bigpond.net.au>
-2006-04-07 Paul Brook <paul@codesourcery.com>
+ * config/tc-spu.h: Wrap in #ifndef/#endif. Delete coff macros.
- * config/tc-arm.c (parse_operands): Set default error message.
+2007-05-29 Alan Modra <amodra@bigpond.net.au>
-2006-04-07 Paul Brook <paul@codesourcery.com>
+ * config/tc-ppc.c: Convert to ISO C.
+ * config/tc-ppc.c: Likewise.
- * config/tc-arm.c (parse_tb): Set inst.error before returning FAIL.
+2007-05-29 Alan Modra <amodra@bigpond.net.au>
-2006-04-07 Paul Brook <paul@codesourcery.com>
+ * write.h (EXEC_MACHINE_TYPE): Delete.
+ (string_byte_count, section_alignment): Delete.
- * config/tc-arm.c (md_apply_fix): Set H bit on blx instruction.
+2007-05-28 Nathan Sidwell <nathan@codesourcery.com>
-2006-04-07 Paul Brook <paul@codesourcery.com>
+ * app.c (do_scrub_chars): Cope with \ at end of buffer.
- * config/tc-arm.c (THUMB2_LOAD_BIT): Define.
- (move_or_literal_pool): Handle Thumb-2 instructions.
- (do_t_ldst): Call move_or_literal_pool for =N addressing modes.
+2007-05-26 Alan Modra <amodra@bigpond.net.au>
-2006-04-07 Alan Modra <amodra@bigpond.net.au>
+ * config/tc-ppc.c (ppc_insert_operand): Truncate sign bits in
+ top 32 bits of 64 bit value if so doing results in passing
+ range check. Rewrite sign extension fudges similarly. Enable
+ fudges for powerpc64 too. Report user value if range check
+ fails rather than fudged value. Negate PPC_OPERAND_NEGATIVE
+ range rather than value, also to report user value on failure.
- PR 2512.
- * config/tc-i386.c (match_template): Move 64-bit operand tests
- inside loop.
+2007-03-25 Paul Brook <paul@codesourcery.com>
-2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
+ * config/tc-arm.c (T2_SUBS_PC_LR): Define.
+ (do_t_add_sub): Correctly encode subs pc, lr, #const.
+ (do_t_mov_cmp): Correctly encode movs pc, lr.
- * po/Make-in: Add install-html target.
- * Makefile.am: Add install-html and install-html-recursive targets.
- * Makefile.in: Regenerate.
- * configure.in: AC_SUBST datarootdir, docdir, htmldir.
+2007-05-24 Steve Ellcey <sje@cup.hp.com>
+
+ * Makefile.in: Regnerate.
* configure: Regenerate.
- * doc/Makefile.am: Add install-html and install-html-am targets.
+ * aclocal.m4: Regenerate.
* doc/Makefile.in: Regenerate.
-2006-04-06 Alan Modra <amodra@bigpond.net.au>
+2007-05-22 Bob Wilson <bob.wilson@acm.org>
+
+ * doc/c-xtensa.texi (Xtensa Automatic Alignment): Remove statements
+ and index entries about automatic alignment of ENTRY instructions.
+
+2007-05-22 Nick Clifton <nickc@redhat.com>
+
+ * doc/as.texinfo: Use @copying around the copyright notice.
+
+2007-05-18 Joseph Myers <joseph@codesourcery.com>
+
+ * config/tc-mips.c (s_mipsset): Use generic s_set for directives
+ containing a comma.
+
+2007-05-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/4517
+ 2003-06-05 Michal Ludvig <mludvig@suse.cz>
+ * doc/as.texinfo: Document new directives: .cfi_restore,
+ .cfi_undefined, .cfi_same_value, .cfi_return_column,
+ .cfi_remember_state and .cfi_restore_state.
+
+2007-05-17 Nathan Sidwell <nathan@codesourcery.com>
+
+ * config/tc-m68k.c (md_apply_fix): Show value of out of range
+ fixups in error message.
+ (md_conver_frag_1): Propagate the fix source location and use
+ as_bad_where rather than fatal, for better error messages.
+
+2007-05-16 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (v7m_psrs): Add uppercase PSR names and xpsr.
+
+2007-05-15 Mark Shinwell <shinwell@codesourcery.com>
+
+ * app.c (do_scrub_chars): Don't damage \@ pseudo-variables.
+
+2007-05-15 Vincent Riviere <vincent.riviere@freesbee.fr>
+
+ PR gas/3041
+ * config/tc-m68k.c (relaxable_symbol): Make sure that the correct
+ addend is stored for relocs against weak symbols.
+ (md_apply_fix): So not loose track of addend for relocs against
+ weak symbols.
+
+2007-05-14 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (md_parse_option): Fix parsing of -O option.
+
+2007-05-14 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * config/tc-score.c (data_op2, validate_immediate): Fix bug for
+ addri, addri.c, subi, and subi.c when immediate number is hex.
+ (score_insns): Remove subis and subis.c.
+ (do_sub_rdi16): Delete.
+
+2007-05-11 Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-spu.c (md_pseudo_table): Add int, long, quad. Call
+ spu_cons for word.
+ (md_assemble): Tidy use of insn.flag.
+ (get_imm): Likewise. Handle uppercase input too.
+ (spu_cons): New function.
+ * config/tc-spu.h (tc_fix_adjustable): Don't adjust SPU_PPU relocs.
+ (TC_FORCE_RELOCATION): Don't resolve them either.
+
+2007-05-05 Mark Shinwell <shinwell@codesourcery.com>
+
+ * config/tc-arm.c (md_apply_fix): Generate more accurate
+ diagnostic when 8-bit immediate range is exceeded for
+ BFD_RELOC_ARM_OFFSET_IMM8.
+
+2007-05-04 Alan Modra <amodra@bigpond.net.au>
+
+ PR gas/4460
+ * config/tc-i386.c (lex_got): Don't replace the reloc token with
+ a space if we already have a space.
+
+2007-05-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (match_template): Don't explicitly check
+ suffix for crc32 in Intel mode.
+ (process_suffix): Issue an error for crc32 if the operand size
+ is ambiguous.
+
+2007-05-03 Vincent Riviere <vincent.riviere@freesbee.fr>
+ Nick Clifton <nickc@redhat.com>
+
+ PR gas/3041
+ * config/tc-m68k.c (relaxable_symbol): Do not relax weak symbols.
+ (tc_gen_reloc): Adjust the addend of relocs against weak symbols.
+ (md_apply_fix): Put zero values into the frags referencing weak
+ symbols.
+
+2007-05-02 Alan Modra <amodra@bigpond.net.au>
+
+ PR 4448
+ * config/tc-ppc.c (ppc_insert_operand): Don't increase min for
+ PPC_OPERAND_PLUS1.
+
+2007-05-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (match_template): Check suffix for crc32 in
+ Intel mdoe.
+ (process_suffix): Default the suffix of 8bit crc32 to
+ BYTE_MNEM_SUFFIX.
+ (check_byte_reg): Skip check for 8bit crc32.
+
+2007-04-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (md_assemble): Use register_prefix in
+ error/warning message.
+ (check_byte_reg): Likewise.
+ (check_long_reg): Likewise.
+ (check_qword_reg): Likewise.
+ (check_word_reg): Likewise.
+ (process_operands): Likewise.
+
+2007-04-30 Alan Modra <amodra@bigpond.net.au>
+
+ PR 4436
+ * config/tc-ppc.c (ppc_insert_operand): Disable range check if
+ min > max.
+
+2007-04-28 Thiemo Seufer <ths@networkno.de>
+
+ * config/tc-mips.c: Fix comment.
+
+2007-04-26 Anatoly Sokolov <aesok@post.ru>
+
+ * config/tc-avr.c (mcu_types): Add support for atmega8hva and
+ atmega16hva devices. Move at90usb82 device to 'avr5' architecture.
+ * doc/c-avr.texi: Document new devices.
+
+2007-04-24 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2007-04-23 Nathan Sidwell <nathan@codesourcery.com>
+
+ * config/tc-m68k.c (mcf54455_ctrl): New.
+ (HAVE_LONG_DISP, HAVE_LONG_CALL, HAVE_LONG_COND): New.
+ (m68k_archs): Add isac.
+ (m68k_cpus): Add 54455 family.
+ (m68k_ip): Split Bg into Bb, Bs, Bg.
+ (m68k_elf_final_processing): Add ISA_C.
+ * doc/c-m68k.texi (M680x0 Options): Add isac.
- * frags.c (frag_offset_fixed_p): Reinitialise offset before
- second scan.
+2007-04-22 Alan Modra <amodra@bigpond.net.au>
-2006-04-05 Richard Sandiford <richard@codesourcery.com>
- Daniel Jacobowitz <dan@codesourcery.com>
+ * read.c (read_a_source_file): Skip multiple spaces to
+ cover hack in mmix md_start_line_hook which overwrites a
+ colon with a space. Delete sermon and needless assertion.
- * config/tc-sparc.c (sparc_target_format): Handle TE_VXWORKS.
- (GOTT_BASE, GOTT_INDEX): New.
- (tc_gen_reloc): Don't alter relocations against GOTT_BASE and
- GOTT_INDEX when generating VxWorks PIC.
- * configure.tgt (sparc*-*-vxworks*): Remove this special case;
- use the generic *-*-vxworks* stanza instead.
+2007-04-21 Alan Modra <amodra@bigpond.net.au>
-2006-04-04 Alan Modra <amodra@bigpond.net.au>
+ * config/atof-vax.c (atof_vax_sizeof): Change return type to unsigned.
+ (md_atof): Make number_of_chars unsigned. Revert last change.
+ * config/tc-or32.c (md_apply_fix): Delete bogus assertions.
+ * config/tc-sh.c (sh_optimize_expr): Only define for OBJ_ELF.
+ * config/tc-sh.h (md_optimize_expr): Likewise.
+ * config/tc-sh64.c (shmedia_md_pcrel_from_section): Delete bogus
+ assertion.
+ * config/tc-xtensa.c (convert_frag_immed_finish_loop): Likewise.
- PR 997
- * frags.c (frag_offset_fixed_p): New function.
- * frags.h (frag_offset_fixed_p): Declare.
- * expr.c (expr): Use frag_offset_fixed_p when simplifying subtraction.
- (resolve_expression): Likewise.
+2007-04-21 Nick Clifton <nickc@redhat.com>
-2006-04-03 Sterling Augustine <sterling@tensilica.com>
+ * config/atof-vax.c (md_atof): Fix comparison inside know().
- * config/tc-xtensa.c (init_op_placement_info_table): Check for formats
- of the same length but different numbers of slots.
+ * config/tc-ia64.c (emit_one_bundle): Fix typo.
-2006-03-30 Andreas Schwab <schwab@suse.de>
+2007-04-21 Alan Modra <amodra@bigpond.net.au>
- * configure.in: Fix help string for --enable-targets option.
+ * expr.c (expr): Assert on rankarg, not rank which can be unsigned.
+ * read.c (read_a_source_file): Remove buffer_limit[-1] assertion.
+ Don't skip over NUL char.
+ (pseudo_set): Set X_op for registers to O_register.
+ * symbols.c (symbol_clone): Remove assertion that sym is defined.
+ (resolve_symbol_value): Resolve O_register symbols.
+ * config/tc-i386.c (parse_real_register): Don't use i386_float_regtab.
+ Instead find st(0) by hash lookup.
+ * config/tc-ppc.c (ppc_macro): Warning fix.
+
+ * as.h (ENABLE_CHECKING): Default define to 0.
+ (know): Assert if ENABLE_CHECKING.
+ (struct relax_type): Remove superfluous declaration.
+ * configure.in (--enable-checking): New.
* configure: Regenerate.
+ * config.in: Regenerate.
+ * config/tc-ppc.c (ppc_setup_opcodes): Do checks when ENABLE_CHECKING.
+ Check for duplicate powerpc_operands entries.
+
+2007-04-20 Nathan Sidwell <nathan@codesourcery.com>
+
+ * config/tc-m68k.c (mcf5253_ctrl): New.
+ (mcf52223_ctrl): New.
+ (m68k_cpus): Add 5253, 52221, 52223.
+
+ * config/m68k-parse.h (RAMBAR_ALT): New.
+ * config/tc-m68k.c (mcf5206_ctrl, mcf5307_ctrl): New.
+ (mcf_ctrl, mcf5208_ctrl, mcf5210a_ctrl, mcf5213_ctrl, mcf52235_ctrl,
+ mcf5225_ctrl, mcf5235_ctrl, mcf5271_ctrl, mcf5275_ctrl,
+ mcf5282_ctrl, mcf5329_ctrl, mcf5373_ctrl, mcfv4e_ctrl,
+ mcf5475_ctrl, mcf5485_ctrl): Add RAMBAR synonym for
+ RAMBAR1.
+ (mcf5272_ctrl): Add RAMBAR0, replace add RAMBAR with RAMBAR_ALT.
+ (m68k_cpus): Adjust 5206, 5206e & 5307 entries.
+ (m68k_ip) <Case J>: Detect when RAMBAR_ALT should be used. Add it
+ to control register mapping.
+
+2007-04-20 Alan Modra <amodra@bigpond.net.au>
+
+ * messages.c (as_internal_value_out_of_range): Fix typo in
+ error message. Return after printing domain error.
+ * config/tc-ppc.c (ppc_insert_operand): Preserve low zero bits
+ in max when shifting right.
+
+2007-04-20 Alan Modra <amodra@bigpond.net.au>
-2006-03-28 Nathan Sidwell <nathan@codesourcery.com>
-
- * gas/config/tc-m68k.c (find_cf_chip): Merge into ...
- (m68k_ip): ... here. Use for all chips. Protect against buffer
- overrun and avoid excessive copying.
-
- * config/tc-m68k.c (m68000_control_regs, m68010_control_regs,
- m68020_control_regs, m68040_control_regs, m68060_control_regs,
- mcf_control_regs, mcf5208_control_regs, mcf5213_control_regs,
- mcf5329_control_regs, mcf5249_control_regs, mcf528x_control_regs,
- mcfv4e_control_regs, m68010_control_regs): Rename and reorder to ...
- (m68000_ctrl, m68010_ctrl, m68020_ctrl, m68040_ctrl, m68060_ctrl,
- mcf_ctrl, mcf5208_ctrl, mcf5213_ctrl, mcf5235_ctrl, mcf5249_ctrl,
- mcf5216_ctrl, mcf5250_ctrl, mcf5271_ctrl, mcf5272_ctrl,
- mcf5282_ctrl, mcfv4e_ctrl): ... these.
- (mcf5275_ctrl, mcf5329_ctrl, mcf5373_ctrl): New.
- (struct m68k_cpu): Change chip field to control_regs.
- (current_chip): Remove.
- (control_regs): New.
- (m68k_archs, m68k_extensions): Adjust.
- (m68k_cpus): Reorder to be in cpu number order. Adjust.
- (CPU_ALLOW_MC, CPU_ALLOW_NEGATION): Remove.
- (find_cf_chip): Reimplement for new organization of cpu table.
- (select_control_regs): Remove.
- (mri_chip): Adjust.
- (struct save_opts): Save control regs, not chip.
- (s_save, s_restore): Adjust.
- (m68k_lookup_cpu): Give deprecated warning when necessary.
- (m68k_init_arch): Adjust.
- (md_show_usage): Adjust for new cpu table organization.
-
-2006-03-25 Bernd Schmidt <bernd.schmidt@analog.com>
-
- * config/bfin-defs.h (Expr_Node_Type enum): Add Expr_Node_GOT_Reloc.
- * config/bfin-lex.l: Recognize GOT17M4 and FUNCDESC_GOT17M4.
- * config/bfin-parse.y: Include "libbfd.h", "elf/common.h" and
- "elf/bfin.h".
- (GOT17M4, FUNCDESC_GOT17M4): New tokens of type <value>.
- (any_gotrel): New rule.
- (got): Use it, and create Expr_Node_GOT_Reloc nodes.
- * config/tc-bfin.c: Include "libbfd.h", "elf/common.h" and
- "elf/bfin.h".
- (DEFAULT_FLAGS, bfin_flags, bfin_pic_flag): New.
- (bfin_pic_ptr): New function.
- (md_pseudo_table): Add it for ".picptr".
- (OPTION_FDPIC): New macro.
- (md_longopts): Add -mfdpic.
- (md_parse_option): Handle it.
- (md_begin): Set BFD flags.
- (md_apply_fix3, bfin_fix_adjustable): Handle new relocs.
- (bfin_gen_ldstidxi): Adjust to match the trees that the parser gives
- us for GOT relocs.
- * Makefile.am (bfin-parse.o): Update dependencies.
- (DEPTC_bfin_elf): Likewise.
+ * messages.c (as_internal_value_out_of_range): Extend to report
+ errors for values with invalid low bits set.
+ * config/tc-ppc.c (ppc_setup_opcodes): Check powerpc_operands bitm
+ fields. Check that operands and opcode fields are disjoint.
+ (ppc_insert_operand): Check operands using mask rather than bit
+ count. Check low bits too. Handle PPC_OPERAND_PLUS1. Adjust
+ insertion code.
+ (md_apply_fix): Adjust for struct powerpc_operand change.
+
+2007-04-19 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (md_assemble): Only allow 16-bit instructions on
+ Thumb-1. Add sanity check for bogus relaxations.
+
+2007-04-19 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (insns): Allow rsb and rsbs on Thumb-1.
+
+2007-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
* Makefile.in: Regenerate.
-2006-03-25 Richard Sandiford <richard@codesourcery.com>
+2007-04-19 Nathan Froyd <froydnj@codesourcery.com>
- * config/tc-m68k.c (m68k_cpus): Change cpu_cf5208 entries to use
- mcfemac instead of mcfmac.
+ * doc/c-ppc.texi (PowerPC-Opts): Document -me500, -me500x2, -mspe.
-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>
+2007-04-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * doc/c-i386.texi; Document .ssse3, .sse4.1, .sse4.2 and .sse4.
+
+2007-04-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (cpu_arch): Add .sse4.2 and .sse4.
+ (match_template): Handle operand size for crc32 in SSE4.2.
+ (process_suffix): Handle operand type for crc32 in SSE4.2.
+ (output_insn): Support SSE4.2.
+
+2007-04-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (cpu_arch): Add .sse4.1.
+ (process_operands): Adjust implicit operand for blendvpd,
+ blendvps and pblendvb in SSE4.1.
+ (output_insn): Support SSE4.1.
+
+2007-04-18 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (do_t_rsb): Use 16-bit encoding when possible.
+
+2007-04-16 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * config/tc-sh.c (sh_handle_align): Call as_bad_where instead
+ of as_warn_where for misaligned data.
+
+2007-04-15 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * config/tc-sh.c (align_test_frag_offset_fixed_p): Handle
+ rs_fill frags.
+
+2007-04-14 Steve Ellcey <sje@cup.hp.com>
+
+ * Makefile.am: Add ACLOCAL_AMFLAGS.
+ * Makefile.in: Regenerate.
- * config/tc-mips.c (mips_target_format): Handle vxworks targets.
- (md_begin): Complain about -G being used for PIC. Don't change
- the text, data and bss alignments on VxWorks.
- (reloc_needs_lo_p): Don't return true for R_MIPS_GOT16 when
- generating VxWorks PIC.
- (load_address): Extend SVR4_PIC handling to VXWORKS_PIC.
- (macro): Likewise, but do not treat la $25 specially for
- VxWorks PIC, and do not handle jal.
- (OPTION_MVXWORKS_PIC): New macro.
- (md_longopts): Add -mvxworks-pic.
- (md_parse_option): Don't complain about using PIC and -G together here.
- Handle OPTION_MVXWORKS_PIC.
- (md_estimate_size_before_relax): Always use the first relaxation
- sequence on VxWorks.
- * config/tc-mips.h (VXWORKS_PIC): New.
+2007-04-14 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-2006-03-21 Paul Brook <paul@codesourcery.com>
+ * config/tc-sh.c (align_test_frag_offset_fixed_p): New.
+ (sh_optimize_expr): Likewise.
+ * config/tc-sh.h (md_optimize_expr): Define.
+ (sh_optimize_expr): Prototype.
- * config/tc-arm.c (md_apply_fix): Fix typo in offset mask.
+2007-04-06 Matt Thomas <matt@netbsd.org>
-2006-03-21 Sterling Augustine <sterling@tensilica.com>
+ * config/tc-vax.c (vax_cons): Added to support %pcrel{8,16,32}(exp)
+ to emit pcrel relocations by DWARF2 in non-code sections. Borrowed
+ heavily from tc-sparc.c. (vax_cons_fix_new): Likewise.
- * config/tc-xtensa.c (enforce_three_byte_loop_align): New flag.
- (xtensa_setup_hw_workarounds): Set this new flag for older hardware.
- (get_loop_align_size): New.
- (xtensa_end): Skip xtensa_mark_narrow_branches when not aligning.
- (xtensa_mark_zcl_first_insns): Prevent widening of first loop frag.
- (get_text_align_power): Rewrite to handle inputs in the range 2-8.
- (get_noop_aligned_address): Use get_loop_align_size.
- (get_aligned_diff): Likewise.
+2007-04-04 Kazu Hirata <kazu@codesourcery.com>
-2006-03-21 Paul Brook <paul@codesourcery.com>
+ * config/tc-m68k.c (HAVE_LONG_BRANCH): Add fido_a.
- * config/tc-arm.c (insns): Correct opcodes for ldrbt and strbt.
+2007-04-04 Paul Brook <paul@codesourcery.com>
-2006-03-20 Paul Brook <paul@codesourcery.com>
+ * config/tc-arm.c (do_neon_ext): Enforce immediate range.
+ (insns): Use I15 for vext.
- * config/tc-arm.c (BAD_BRANCH, BAD_NOT_IT): Define.
- (do_t_branch): Encode branches inside IT blocks as unconditional.
- (do_t_cps): New function.
- (do_t_blx, do_t_bkpt, do_t_branch23, do_t_bx, do_t_bxj, do_t_cpsi,
- do_t_czb, do_t_it, do_t_setend, do_t_tb): Add IT constaints.
- (opcode_lookup): Allow conditional suffixes on all instructions in
- Thumb mode.
- (md_assemble): Advance condexec state before checking for errors.
- (insns): Use do_t_cps.
+2007-04-04 Paul Brook <paul@codesourcery.com>
-2006-03-20 Paul Brook <paul@codesourcery.com>
+ * configure.tgt: Loosen checks for arm uclinux eabi targets.
- * config/tc-arm.c (output_relax_insn): Call dwarf2_emit_insn before
- outputting the insn.
+2007-04-02 Sterling Augustine <sterling@tensilica.com>
-2006-03-18 Jan-Benedict Glaw <jbglaw@lug-owl.de>
+ * config/tc-xtensa.c (xtensa_flush_pending_output): Check
+ outputting_stabs_line_debug.
- * config/tc-vax.c: Update copyright year.
- * config/tc-vax.h: Likewise.
+2007-03-26 Anatoly Sokolov <aesok@post.ru>
-2006-03-18 Jan-Benedict Glaw <jbglaw@lug-owl.de>
+ * config/tc-avr.c (mcu_types): Add support for at90pwm1, at90usb82,
+ at90usb162, atmega325p, atmega329p, atmega3250p and atmega3290p
+ devices.
+ * doc/c-avr.texi: Document new devices.
- * config/tc-vax.c (md_chars_to_number): Used only locally, so
- make it static.
- * config/tc-vax.h (md_chars_to_number): Remove obsolete declaration.
+2007-04-02 Richard Sandiford <richard@codesourcery.com>
-2006-03-17 Paul Brook <paul@codesourcery.com>
+ * doc/as.texinfo: Add -mvxworks-pic to the list of MIPS options.
+ * doc/c-mips.texi (-KPIC, -mvxworks-pic): Document.
+ * config/tc-mips.c (md_show_usage): Mention -mvxworks-pic.
- * config/tc-arm.c (insns): Add ldm and stm.
+2007-03-30 Sterling Augustine <sterling@tensilica.com>
+ Bob Wilson <bob.wilson@acm.org>
-2006-03-17 Ben Elliston <bje@au.ibm.com>
+ * config/tc-xtensa.c (xtensa_move_labels): Remove loops_ok argument.
+ Do not check is_loop_target flag.
+ (xtensa_frob_label): Adjust calls to xtensa_move_labels.
+ (xg_assemble_vliw_tokens): Likewise. Also avoid calling
+ xtensa_move_labels for alignment of loop opcodes.
+
+2007-03-30 H.J. Lu <hongjiu.lu@intel.com>
- PR gas/2446
- * doc/as.texinfo (Ident): Document this directive more thoroughly.
+ * config/tc-i386.c (process_suffix): Reindent a bit.
-2006-03-16 Paul Brook <paul@codesourcery.com>
+2007-03-30 Paul Brook <paul@codesourcery.com>
- * config/tc-arm.c (insns): Add "svc".
+ * config/tc-arm.c (encode_thumb2_ldmstm): New function.
+ (do_t_ldmstm): Generate 16-bit push/pop. Use encode_thumb2_ldmstm.
+ (do_t_push_pop): Use encode_thumb2_ldmstm.
-2006-03-13 Bob Wilson <bob.wilson@acm.org>
+2007-03-29 DJ Delorie <dj@redhat.com>
- * config/tc-xtensa.c (xg_translate_sysreg_op): Remove has_underbar
- flag and avoid double underscore prefixes.
+ * config/tc-m32c.c (rl_for, relaxable): Protect argument.
+ (md_relax_table): Add entries for ADJNZ macros.
+ (M32C_Macros): Add ADJNZ macros.
+ (subtype_mappings): Add entries for ADJNZ macros.
+ (insn_to_subtype): Check for adjnz and sbjnz insns.
+ (md_estimate_size_before_relax): Pass insn to insn_to_subtype.
+ (md_convert_frag): Convert adjnz and sbjnz.
-2006-03-10 Paul Brook <paul@codesourcery.com>
+2007-03-29 Nick Clifton <nickc@redhat.com>
- * config/tc-arm.c (md_begin): Handle EABIv5.
- (arm_eabis): Add EF_ARM_EABI_VER5.
- * doc/c-arm.texi: Document -meabi=5.
+ * itbl-ops.c (itbl_entry): Remove unnecessary and excessively long
+ initialization.
+ * itbl-ops.h (enum e_processor): Initialise the e_nprocs field
+ using ITBL_NUMBER_OF_PROCESSORS.
+ * itbl-parse.y (yyerror): Remove use of redundant macro PARAMS.
-2006-03-10 Ben Elliston <bje@au.ibm.com>
+2007-03-28 H.J. Lu <hongjiu.lu@intel.com>
- * app.c (do_scrub_chars): Simplify string handling.
+ * config/tc-i386.c (build_modrm_byte): For instructions with 2
+ register operands, encode destination in i.rm.regmem if its
+ RegMem bit is set.
-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>
+2007-03-28 Richard Sandiford <richard@codesourcery.com>
Phil Edwards <phil@codesourcery.com>
- * config/tc-arm.c (md_apply_fix): Install a value of zero into a
- BFD_RELOC_ARM_OFFSET_IMM field if we're going to generate a RELA
- R_ARM_ABS12 reloc.
- (tc_gen_reloc): Keep the original fx_offset for RELA pc-relative
- relocs, but adjust by md_pcrel_from_section. Create R_ARM_ABS12
- relocations for BFD_RELOC_ARM_OFFSET_IMM on RELA targets.
-
-2006-03-06 Bob Wilson <bob.wilson@acm.org>
-
- * config/tc-xtensa.c (xtensa_post_relax_hook): Generate literal tables
- even when using the text-section-literals option.
-
-2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
-
- * config/tc-m68k.c (m68k_extensions): Allow 'float' on both m68k
- and cf.
- (m68k_ip): <case 'J'> Check we have some control regs.
- (md_parse_option): Allow raw arch switch.
- (m68k_init_arch): Better detection of arch/cpu mismatch. Detect
- whether 68881 or cfloat was meant by -mfloat.
- (md_show_usage): Adjust extension display.
- (m68k_elf_final_processing): Adjust.
-
-2006-03-03 Bjoern Haase <bjoern.m.haase@web.de>
-
- * config/tc-avr.c (avr_mod_hash_value): New function.
- (md_apply_fix, exp_mod): Use BFD_RELOC_HH8_LDI and
- BFD_RELOC_MS8_LDI for hlo8() and hhi8()
- (md_begin): Set linkrelax variable to 1, use avr_mod_hash_value
- instead of int avr_ldi_expression: use avr_mod_hash_value instead
- of (int).
- (tc_gen_reloc): Handle substractions of symbols, if possible do
- fixups, abort otherwise.
- * config/tc-avr.h (TC_LINKRELAX_FIXUP, TC_VALIDATE_FIX,
- tc_fix_adjustable): Define.
+ * doc/as.texinfo: Put the contents after the title page rather
+ than at the end of the document.
+
+2007-03-27 Alan Modra <amodra@bigpond.net.au>
+
+ * NEWS: Mention ".reloc".
+
+2007-03-26 Sterling Augustine <sterling@tensilica.com>
-2006-03-02 James E Wilson <wilson@specifix.com>
+ * config/tc-xtensa.c (xg_translate_idioms): Allow assembly idioms
+ in FLIX instructions.
+
+2007-03-26 Julian Brown <julian@codesourcery.com>
- * config/tc-ia64.c (emit_one_bundle): For IA64_OPCODE_LAST, if we
- change the template, then clear md.slot[curr].end_of_insn_group.
+ * config/tc-arm.c (arm_it): Add immisfloat field.
+ (parse_qfloat_immediate): Disallow integer syntax for floating-point
+ immediates. Fix hex immediates, handle 0.0 and -0.0 specially.
+ (parse_neon_mov): Set immisfloat bit for operand if it parsed as a
+ float.
+ (neon_cmode_for_move_imm): Reject non-float immediates for float
+ operands.
+ (neon_move_immediate): Pass immisfloat bit to neon_cmode_for_move_imm.
-2006-02-28 Jan Beulich <jbeulich@novell.com>
+2007-03-26 Julian Brown <julian@codesourcery.com>
- * macro.c (get_any_string): Don't insert quotes for <>-quoted input.
+ * doc/c-arm.texi: Add documentation for .dn/.qn directives.
-2006-02-28 Jan Beulich <jbeulich@novell.com>
+2007-03-26 Alan Modra <amodra@bigpond.net.au>
- PR/1070
- * macro.c (getstring): Don't treat parentheses special anymore.
- (get_any_string): Don't consider '(' and ')' as quoting anymore.
- Special-case '(', ')', '[', and ']' when dealing with non-quoting
- characters.
+ * doc/as.texinfo (Reloc): Document.
+ * read.c (potable): Add "reloc".
+ (s_reloc): New function.
+ * write.c (reloc_list): New global var.
+ (resolve_reloc_expr_symbols): New function.
+ (write_object_file): Call it.
+ (write_relocs): Process reloc_list.
+ * write.h (struct reloc_list): New.
+ (reloc_list): Declare.
-2006-02-28 Mat <mat@csail.mit.edu>
+2007-03-24 Paul Brook <paul@codesourcery.com>
- * dwarf2dbg.c (get_filenum): Don't inadvertently decrease files_in_use.
+ * config/tc-arm.c (do_t_ldmstm): Error on Thumb-2 addressing modes.
-2006-02-27 Jakub Jelinek <jakub@redhat.com>
+2007-03-24 Paul Brook <paul@codesourcery.com>
+ Mark Shinwell <shinwell@codesourcery.com>
- * dw2gencfi.c (struct fde_entry, struct cie_entry): Add signal_frame
- field.
- (CFI_signal_frame): Define.
- (cfi_pseudo_table): Add .cfi_signal_frame.
- (dot_cfi): Handle CFI_signal_frame.
- (output_cie): Handle cie->signal_frame.
- (select_cie_for_fde): Don't share CIE if signal_frame flag is
- different. Copy signal_frame from FDE to newly created CIE.
- * doc/as.texinfo: Document .cfi_signal_frame.
+ * config/tc-arm.c (operand_parse_code): Add OP_oRRw.
+ (parse_operands): Don't expect comma if first operand missing.
+ Handle OP_oRRw.
+ (do_srs): Encode register number, checking it is r13. Update comment.
+ (insns): Update SRS entries to take a register.
-2006-02-27 Carlos O'Donell <carlos@codesourcery.com>
+2007-03-23 H.J. Lu <hongjiu.lu@intel.com>
- * doc/Makefile.am: Add html target.
- * doc/Makefile.in: Regenerate.
- * po/Make-in: Add html target.
-
-2006-02-27 H.J. Lu <hongjiu.lu@intel.com>
-
- * config/tc-i386.c (output_insn): Support Intel Merom New
- Instructions.
-
- * config/tc-i386.h (CpuMNI): New.
- (CpuUnknownFlags): Add CpuMNI.
-
-2006-02-24 David S. Miller <davem@sunset.davemloft.net>
-
- * config/tc-sparc.c (priv_reg_table): Add entry for "gl".
- (hpriv_reg_table): New table for hyperprivileged registers.
- (sparc_ip): New cases '$' and '%' for wrhpr/rdhpr hyperprivileged
- register encoding.
-
-2006-02-24 DJ Delorie <dj@redhat.com>
-
- * config/tc-m32c.h (md_apply_fix): Define to m32c_apply_fix.
- (tc_gen_reloc): Don't define.
- * config/tc-m32c.c (rl_for, relaxable): New convenience macros.
- (OPTION_LINKRELAX): New.
- (md_longopts): Add it.
- (m32c_relax): New.
- (md_parse_options): Set it.
- (md_assemble): Emit relaxation relocs as needed.
- (md_convert_frag): Emit relaxation relocs as needed.
- (md_cgen_lookup_reloc): Add LAB_8_8 and LAB_8_16.
- (m32c_apply_fix): New.
- (tc_gen_reloc): New.
- (m32c_force_relocation): Force out jump relocs when relaxing.
- (m32c_fix_adjustable): Return false if relaxing.
-
-2006-02-24 Paul Brook <paul@codesourcery.com>
-
- * config/arm/tc-arm.c (arm_ext_v6_notm, arm_ext_div, arm_ext_v7,
- arm_ext_v7a, arm_ext_v7r, arm_ext_v7m): New variables.
- (struct asm_barrier_opt): Define.
- (arm_v7m_psr_hsh, arm_barrier_opt_hsh): New variables.
- (parse_psr): Accept V7M psr names.
- (parse_barrier): New function.
- (enum operand_parse_code): Add OP_oBARRIER.
- (parse_operands): Implement OP_oBARRIER.
- (do_barrier): New function.
- (do_dbg, do_pli, do_t_barrier, do_t_dbg, do_t_div): New functions.
- (do_t_cpsi): Add V7M restrictions.
- (do_t_mrs, do_t_msr): Validate V7M variants.
- (md_assemble): Check for NULL variants.
- (v7m_psrs, barrier_opt_names): New tables.
- (insns): Add V7 instructions. Mark V6 instructions absent from V7M.
- (md_begin): Initialize arm_v7m_psr_hsh and arm_barrier_opt_hsh.
- (arm_cpu_option_table): Add Cortex-M3, R4 and A8.
- (arm_arch_option_table): Add armv7, armv7a, armv7r and armv7m.
- (struct cpu_arch_ver_table): Define.
- (cpu_arch_ver): New.
- (aeabi_set_public_attributes): Use cpu_arch_ver. Set
- Tag_CPU_arch_profile.
- * doc/c-arm.texi: Document new cpu and arch options.
-
-2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
-
- * config/tc-ia64.c (operand_match): Handle IA64_OPND_IMMU5b.
-
-2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
-
- * config/tc-ia64.c: Update copyright years.
-
-2006-02-22 H.J. Lu <hongjiu.lu@intel.com>
-
- * config/tc-ia64.c (specify_resource): Add the rule 17 from
- SDM 2.2.
-
-2005-02-22 Paul Brook <paul@codesourcery.com>
-
- * config/tc-arm.c (do_pld): Remove incorrect write to
- inst.instruction.
- (encode_thumb32_addr_mode): Use correct operand.
-
-2006-02-21 Paul Brook <paul@codesourcery.com>
-
- * config/tc-arm.c (md_apply_fix): Fix off-by-one errors.
-
-2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
- Anil Paranjape <anilp1@kpitcummins.com>
- Shilin Shakti <shilins@kpitcummins.com>
-
- * Makefile.am: Add xc16x related entry.
+ * config/tc-i386.c (md_begin): Allow '.' in mnemonic.
+
+2007-03-23 Mark Shinwell <shinwell@codesourcery.com>
+
+ * config/tc-arm.c (md_apply_fix): Turn CBZ instructions that
+ attempt to jump to the next instruction into NOPs.
+
+2007-03-23 Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-spu.c: Don't include opcode/spu.h.
+ (md_assemble): Set tc_fix_data.insn_tag and arg_format.
+ (md_apply_fix): Adjust.
+ * config/tc-spu.h: Include opcode/spu.h.
+ (struct tc_fix_info): New.
+ (TC_FIX_TYPE, TC_INIT_FIX_DATA): Adjust.
+ (TC_FORCE_RELOCATION): Define.
+
+2007-03-22 Joseph Myers <joseph@codesourcery.com>
+
+ * doc/as.texinfo: Include VERSION_PACKAGE when reporting version.
+
+2007-03-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (process_suffix): Check 0x90 instead of
+ xchg for xchg %rax,%rax.
+
+2007-03-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c: Replace REX_MODE64, REX_EXTX, REX_EXTY
+ and REX_EXTZ with REX_W, REX_R, REX_X and REX_B respectively.
+
+2007-03-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/4218
+ * config/tc-i386.c (match_template): Properly handle 64bit mode
+ "xchg %eax, %eax".
+
+2007-03-21 Anton Ertl <anton@mips.complang.tuw>
+
+ PR gas/4124
+ * config/tc-alpha.c (emit_ustX): Fix ustq code generation.
+
+2007-03-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am: Run dep-am.
+ * Makefile.in: Regenerated.
+
+ * config/tc-i386.c: Don't include "opcodes/i386-opc.h".
+
+ * config/tc-i386.h: Include "opcodes/i386-opc.h".
+ (NOP_OPCODE): Removed.
+ (template): Likewise.
+
+2007-03-21 Andreas Schwab <schwab@suse.de>
+
+ * config/tc-i386.h (NOP_OPCODE): Restore.
+
+2007-03-18 Mark Shinwell <shinwell@codesourcery.com>
+
+ * config/tc-arm.c (do_mul): Don't warn about overlapping
+ Rd and Rm operands when assembling for v6 or above.
+ Correctly capitalize register names in the messages.
+ (do_mlas): Likewise. Delete spurious blank line.
+
+2007-03-16 Kazu Hirata <kazu@codesourcery.com>
+
+ * config/tc-m68k.c (m68k_cpus): Add an entry for fidoa.
+
+2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (md_begin): Use i386_regtab_size to scan
+ i386_regtab.
+ (parse_register): Use i386_regtab_size instead of ARRAY_SIZE
+ on i386_regtab.
+
+2007-03-15 Alexandre Oliva <aoliva@redhat.com>
+
+ PR gas/4184
+ * app.c (do_scrub_chars): PUT after setting states.
+
+2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerated.
+
+ * config/tc-i386.c: Include "opcodes/i386-opc.h" instead of
+ "opcode/i386.h".
+ (md_begin): Check reg_name != NULL for the last entry in
+ i386_regtab.
+
+ * config/tc-i386.h: Move many entries to opcode/i386.h and
+ opcodes/i386-opc.h.
+
+ * configure.in (need_opcodes): Set true for i386.
+ * configure: Regenerated.
+
+2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (REPORT_BUGS_TO): Removed.
+ (INCLUDES): Remove -DREPORT_BUGS_TO.
+ * Makefile.in: Regenerated.
+
+ * configure.in (--with-bugurl): Removed.
+ * configure: Regenerated.
+
+ * doc/Makefile.am (as_TEXINFOS): Remove gasver.texi.
+ (AM_MAKEINFOFLAGS): Add -I ../../bfd/doc.
+ (TEXI2DVI): Likewise.
+ (gasver.texi): Removed.
+ (MOSTLYCLEANFILES): Remove gasver.texi.
+ (as.1): Don't depend on gasver.texi.
+ * doc/Makefile.in: Regenerated.
+
+ * doc/as.texi: Include bfdver.texi instead of gasver.texi.
+
+2007-03-14 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * config/tc-arm.c (arm_copy_symbol_attributes): New.
+ * config/tc-arm.h (arm_copy_symbol_attributes): Declare.
+ (TC_COPY_SYMBOL_ATTRIBUTES): Define.
+ * gas/symbols.c (copy_symbol_attributes): Use
+ TC_COPY_SYMBOL_ATTRIBUTES.
+
+2007-03-14 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (T16_32_TAB): Fix dec_sp encoding.
+
+2007-03-14 Alan Modra <amodra@bigpond.net.au>
+
+ PR 4029
+ * write.c (relax_segment): Insert extra alignment padding
+ to break infinite relax loop when given impossible
+ gcc_except_table assembly.
+
+2007-03-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (md_assemble): Use Opcode_XXX instead of XXX
+ on i.tm.base_opcode.
+ (match_template): Likewise.
+ (process_operands): Use ~0x3 mask to match MOV_AX_DISP32.
+
+ * config/tc-i386.h (Opcode_D): New.
+ (Opcode_FloatR): Likewise.
+ (Opcode_FloatD): Likewise.
+ (D): Redefined.
+ (W): Likewise.
+ (FloatMF): Likewise.
+ (FloatR): Likewise.
+ (FloatD): Likewise.
+
+2007-03-09 Alexandre Oliva <aoliva@redhat.com>
+
+ * app.c (do_scrub_chars): Recognize comments after # line "file".
+ * read.c (get_linefile_number): New.
+ (s_app_line): Accept ill-formed .linefile lines as comments.
+
+2007-03-09 Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-i386.h (WORKING_DOT_WORD): Define.
+
+2007-03-09 Alexandre Oliva <aoliva@redhat.com>
+
+ * app.c (do_scrub_chars): Turn #<line>"file"flags into .linefile.
+ * as.h (new_logical_line_flags): New.
+ * input-scrub.c (new_logical_line): Turned into wrapper for...
+ (new_logical_line_flags): this. Handle flags.
+ * read.c (potable): Add linefile. Adjust appline argument.
+ (s_app_file): Fake .appfiles no more.
+ (s_app_line): For .linefile, accept file name and flags.
+
+2007-03-08 Alan Modra <amodra@bigpond.net.au>
+
+ * symbols.c (symbol_relc_make_sym): Comment typo fixes.
+
+2007-03-08 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
* Makefile.in: Regenerate.
- * configure.in: Added xc16x related entry.
- * configure: Regenerate.
- * config/tc-xc16x.h: New file
- * config/tc-xc16x.c: New file
- * doc/c-xc16x.texi: New file for xc16x
- * doc/all.texi: Entry for xc16x
- * doc/Makefile.texi: Added c-xc16x.texi
- * NEWS: Announce the support for the new target.
+ * po/POTFILES.in: Regenerate.
-2006-02-16 Nick Hudson <nick.hudson@dsl.pipex.com>
+2007-03-07 Joseph Myers <joseph@codesourcery.com>
- * configure.tgt: set emulation for mips-*-netbsd*
+ * configure.in (REPORT_BUGS_TEXI): Define to Texinfo version of
+ bug-reporting URL.
+ * doc/Makefile.am (gasver.texi): Define BUGURL.
+ * doc/as.texinfo: Use BUGURL.
+ * Makefile.in, configure, doc/Makefile.in: Regenerate.
-2006-02-14 Jakub Jelinek <jakub@redhat.com>
+2007-03-06 Andreas Krebbel <krebbel1@de.ibm.com>
- * config.in: Rebuilt.
+ * config/tc-s390.c (md_parse_option): z9-ec option added.
-2006-02-13 Bob Wilson <bob.wilson@acm.org>
+2007-03-02 Paul Brook <paul@codesourcery.com>
- * config/tc-xtensa.c (xg_add_opcode_fix): Number operands starting
- from 1, not 0, in error messages.
- (md_assemble): Simplify special-case check for ENTRY instructions.
- (tinsn_has_invalid_symbolic_operands): Do not include opcode and
- operand in error message.
+ * config/tc-arm.c (relax_immediate): Always return positive values.
+ (relaxed_symbol_addr): New function.
+ (relax_adr, relax_branch): Use it.
+ (arm_relax_frag): Pass strect argument. Adjust infinite loop check.
-2006-02-13 Joseph S. Myers <joseph@codesourcery.com>
+2007-03-01 Joseph Myers <joseph@codesourcery.com>
- * configure.tgt (arm-*-linux-gnueabi*): Change to
- arm-*-linux-*eabi*.
+ * as.c (parse_args): Update copyright date.
-2006-02-10 Nick Clifton <nickc@redhat.com>
+2007-02-28 Nathan Sidwell <nathan@codesourcery.com>
- * config/tc-crx.c (check_range): Ensure that the sign bit of a
- 32-bit value is propagated into the upper bits of a 64-bit long.
+ * configure.tgt (sh-*-uclinux, sh[12]-*-uclinux): Specify as elf.
- * config/tc-arc.c (init_opcode_tables): Fix cast.
- (arc_extoper, md_operand): Likewise.
+2007-02-28 Nick Clifton <nickc@redhat.com>
-2006-02-09 David Heine <dlheine@tensilica.com>
+ PR gas/3797
+ * config/tc-d10v.c (do_assemble): Do not generate error messages,
+ just return -1 whenever a problem is encountered.
+ (md_assemble): If do_assemble returns -1 generate a non-fatal
+ error message and return.
- * config/tc-xtensa.c (xg_assembly_relax): Increment steps_taken for
- each relaxation step.
+ PR gas/2623
+ * config/tc-msp430.c (line_separator_char): Change to '{'.
-2006-02-09 Eric Botcazou <ebotcazou@libertysurf.fr>
-
- * configure.in (CHECK_DECLS): Add vsnprintf.
+2007-02-27 Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-m68hc11.c (fixup24): Correct fixup size.
+ (build_jump_insn): Likewise.
+ (build_insn): Likewise.
+ (s_m68hc11_relax): Likewise.
+
+2007-02-27 Alan Modra <amodra@bigpond.net.au>
+
+ * config/obj-elf.c (elf_frob_file): frag_wane any new frags.
+
+2007-02-25 Mark Shinwell <shinwell@codesourcery.com>
+
+ * config/tc-arm.c (do_vfp_nsyn_pop): Use fldmias/fldmiad.
+
+2007-02-23 Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-mn10300.c (md_convert_frag): Correct fixup size.
+ (md_assemble): Likewise.
+
+2007-02-22 Alan Modra <amodra@bigpond.net.au>
+
+ * write.c (size_seg): Always clear SEC_RELOC here.
+ (install_reloc): New function, extracted from..
+ (write_relocs): ..here. Combine RELOC_EXPANSION_POSSIBLE code
+ with !RELOC_EXPANSION_POSSIBLE code. Don't add fr_offset when
+ testing frag size. Set SEC_RELOC here.
+
+2007-02-21 Alan Modra <amodra@bigpond.net.au>
+
+ PR 4082
+ * config/tc-avr.h (TC_FX_SIZE_SLACK): Define.
+
+2007-02-20 Thiemo Seufer <ths@mips.com>
+
+ * doc/c-mips.texi: Document 74kc, 74kf, 74kx.
+
+2007-02-20 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (mips_cpu_info_table): Add 74K configurations.
+
+2007-02-20 Thiemo Seufer <ths@mips.com>
+ Chao-Ying Fu <fu@mips.com>
+
+ * config/tc-mips.c (mips_set_options, mips_opts, file_ase_dspr2,
+ ISA_SUPPORTS_DSPR2_ASE, MIPS_CPU_ASE_DSPR2): Add DSP R2 ASE support.
+ (macro_build): Add case '2'.
+ (macro): Expand M_BALIGN to nop, packrl.ph or balign.
+ (validate_mips_insn): Add support for balign instruction.
+ (mips_ip): Handle DSP R2 instructions. Support balign instruction.
+ (OPTION_DSPR2, OPTION_NO_DSPR2, OPTION_COMPAT_ARCH_BASE,
+ md_parse_option, mips_after_parse_args): Add -mdspr2 and -mno-dspr2
+ command line options.
+ (s_mipsset): Add support for .set dspr2 and .set nodspr2 directives.
+ (md_show_usage): Add -mdspr2 and -mno-dspr2 help output.
+ * doc/c-mips.texi, doc/as.texinfo: Document -mdspr2, -mno-dspr2,
+ .set dspr2, .set nodspr2.
+
+2007-02-20 Nathan Sidwell <nathan@codesourcery.com>
+
+ * config/tc-m68k.c (mcf5210a_ctrl, mcf52235_ctrl, mcf5225_ctrl): New.
+ (m68k_cpus): Add 5210a..5211a, 52230..52235 5224..5225.
+
+2007-02-18 Alan Modra <amodra@bigpond.net.au>
+
+ * write.c (TC_FX_SIZE_SLACK): Define.
+ (write_relocs): Reinstate check for fixup within frag.
+ * config/tc-bfin.h (TC_FX_SIZE_SLACK): Define.
+ * config/tc-h8300.h (TC_FX_SIZE_SLACK): Define.
+ * config/tc-mmix.h (TC_FX_SIZE_SLACK): Define.
+ * config/tc-sh.h (TC_FX_SIZE_SLACK): Define.
+ * config/tc-xstormy16.h (TC_FX_SIZE_SLACK): Define.
+
+2007-02-17 Mark Mitchell <mark@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+ Vladimir Prus <vladimir@codesourcery.com
+ Joseph Myers <joseph@codesourcery.com>
+
+ * configure.in (--with-bugurl): New option.
+ * configure: Regenerate.
+ * dep-in.sed: Remove bin-bugs.h.
+ * Makefile.am (REPORT_BUGS_TO): Define.
+ (INCLUDES): Define REPORT_BUGS_TO.
+ (DEP_INCLUDES): Likewise.
+ ($(OBJS)): No longer depend on bin-bugs.h.
+ * Makefile.in: Regenerate.
+ * doc/Makefile.in: Regenerate.
+ * as.c (show_usage): Don't print empty REPORT_BUGS_TO.
+ * as.h: Remove include of bin-bugs.h.
+
+2007-02-17 Alan Modra <amodra@bigpond.net.au>
+
+ * write.c: White space fixes.
+ (fixup_segment): Move symbol_mri_common_p adjustments..
+ (write_relocs): ..and symbol_equated_reloc_p adjustments..
+ (adjust_reloc_syms): ..to here.
+
+2007-02-16 Alan Modra <amodra@bigpond.net.au>
+
+ * subsegs.c (subseg_change, subseg_get): Use xcalloc rather than
+ xmalloc, memset. Don't bother assigning NULL to known zero mem.
+ (subseg_set_rest): Remove unnecessary cast.
+ * write.c: Include libbfd.h. Replace PTR with void * throughout.
+ Remove unnecessary forward declarations and casts.
+ (set_symtab): Delete extern bfd_alloc.
+ (fixup_segment): Move.
+
+2007-02-15 Nathan Sidwell <nathan@codesourcery.com>
+
+ * config/m68k-parse.h (m68k_register): Add ROMBAR0, ASID.
+ * config/tc-m68k.c (mcfv4e_ctrl): Add ColdFire specific names.
+ (mcf5475_ctrl, mcf5485_ctrl): New.
+ (m68k_cpus): Use mcf5485_ctrl and mcf5485_ctrl for those families.
+ (m68k_ip): Add ASID, MMUBAR, ROMBAR0 handling.
+ (init_table): Add asid, mmubar, adjust rombar0.
+
+2007-02-14 Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-i386.h (Seg2ShortForm, Seg3ShortForm): Delete.
+ * config/tc-i386.c: Wrap overly long lines, whitespace fixes.
+ (process_operands): Move old Seg2ShortForm and Seg3ShortForm
+ code, and test for these insns using a combination of
+ opcode_modifier and operand_types.
+
+2007-02-07 Paul Brook <paul@codesourcery.com>
+
+ * configure.tgt: Add arm*-*-uclinux-*eabi.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+ Richard Sandiford <rsandifo@redhat.com>
+ DJ Delorie <dj@redhat.com>
+ Stan Cox <scox@redhat.com>
+ Jim Blandy <jimb@redhat.com>
+ Nick Clifton <nickc@redhat.com>
+ Jim Wilson <wilson@redhat.com>
+ Frank Ch. Eigler <fche@redhat.com>
+ Graydon Hoare <graydon@redhat.com>
+ Ben Elliston <bje@redhat.com>
+ John Healy <jhealy@redhat.com>
+ Richard Henderson <rth@redhat.com>
+
+ * Makefile.am (CPU_TYPES): Add mep.
+ (TARGET_CPU_CFILES): Add tc-mep.c.
+ (TARGET_CPU_HFILES): Add tc-mep.h.
+ (DEPTC_mep_elf): New variable.
+ (DEPTC_mep_coff): Likewise.
+ (DEPOBJ_mep_coff, DEPOBJ_mep_elf, DEP_mep_coff, DEP_mep_elf): Likewise.
+ * configure.in: Support mep.
+ * configure.tgt: Likewise.
+ * config/tc-mep.c: New file.
+ * config/obj-elf.c: New file.
+ * config/tc-mep.c: New file.
+ * config/tc-mep.h: New file.
+ * testsuite/gas/mep: New testsuite with content.
+ * Makefile.in: Regenerate.
* configure: Regenerate.
- * messages.c (errno.h, stdarg.h, varargs.h, va_list): Do not
- include/declare here, but...
- * as.h: Move code detecting VARARGS idiom to the top.
- (errno.h, stdarg.h, varargs.h, va_list): ...here.
- (vsnprintf): Declare if not already declared.
-
-2006-02-08 H.J. Lu <hongjiu.lu@intel.com>
-
- * as.c (close_output_file): New.
- (main): Register close_output_file with xatexit before
- dump_statistics. Don't call output_file_close.
-
-2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
-
- * config/tc-m68k.c (mcf5208_control_regs, mcf5213_control_regs,
- mcf5329_control_regs): New.
- (not_current_architecture, selected_arch, selected_cpu): New.
- (m68k_archs, m68k_extensions): New.
- (archs): Renamed to ...
- (m68k_cpus): ... here. Adjust.
- (n_arches): Remove.
- (md_pseudo_table): Add arch and cpu directives.
- (find_cf_chip, m68k_ip): Adjust table scanning.
- (no_68851, no_68881): Remove.
- (md_assemble): Lazily initialize.
- (select_control_regs): Adjust cpu names. Add 5208, 5213, 5329.
- (md_init_after_args): Move functionality to m68k_init_arch.
- (mri_chip): Adjust table scanning.
- (md_parse_option): Reimplement 'm' processing to add -march & -mcpu
- options with saner parsing.
- (m68k_lookup_cpu, m68k_set_arch, m68k_set_cpu, m68k_set_extension,
- m68k_init_arch): New.
- (s_m68k_cpu, s_m68k_arch): New.
- (md_show_usage): Adjust.
- (m68k_elf_final_processing): Set CF EF flags.
- * config/tc-m68k.h (m68k_init_after_args): Remove.
- (tc_init_after_args): Remove.
- * doc/c-m68k.texi (M68K-Opts): Document -march, -mcpu options.
- (M68k-Directives): Document .arch and .cpu directives.
-
-2006-02-05 Arnold Metselaar <arnold.metselaar@planet.nl>
-
- * config/tc-z80.c (z80_start_line_hook): allow .equ and .defl as
- synonyms for equ and defl.
- (z80_cons_fix_new): New function.
- (emit_byte): Disallow relative jumps to absolute locations.
- (emit_data): Only handle defb, prototype changed, because defb is
- now handled as pseudo-op rather than an instruction.
- (instab): Entries for defb,defw,db,dw moved from here...
- (md_pseudo_table): ... to here, use generic cons() for defw,dw.
- Add entries for def24,def32,d24,d32.
- (md_assemble): Improved error handling.
- (md_apply_fix): New case BFD_RELOC_24, set fixP->fx_no_overflow to one.
- * config/tc-z80.h (TC_CONS_FIX_NEW): Define.
- (z80_cons_fix_new): Declare.
- * doc/c-z80.texi (defb, db): Mention warning on overflow.
- (def24,d24,def32,d32): New pseudo-ops.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * cgen.c (gas_cgen_install_complex_reloc): Removed.
+ (complex_reloc_installation_howto): Removed.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+ Graydon Hoare <graydon@redhat.com>
+ DJ Delorie <dj@redhat.com>
+ Catherine Moore <clm@redhat.com>
+ Michael Chastain <chastain@redhat.com>
+ Frank Ch. Eigler <fche@redhat.com>
+
+ * symbols.c (use_complex_relocs_for): New, to decide
+ when to use complex relocs. Add signed RELC support.
+ (resolve_symbol_value): Call use_complex_relocs_for. Unconditionally
+ encode expression symbols as mangled complex relocation symbols (when
+ compiled with -DOBJ_COMPLEX_RELOC).
+ (symbol_relc_make_sym,value,expr): New traversal/conversion routines.
+ * cgen.c (gas_cgen_md_apply_fix3): Only set signed_p if RELC. Call
+ encode_addend with new args. Modify to get start, length from
+ ifield whenever it is set. Also change condition on which
+ self-describing relocs are encoded. Add hook into
+ gas_cgen_encode_addend.
+ (queue_fixup_recursively): Add signed RELC support. Change from masked
+ expr to trunc flag. Restore assignment of sub-field value to
+ temporary in fixups array. Reflect changed meaning of last arg to
+ queue_fixup_recursively.
+ (fixup): Add cgen_maybe_multi_ifield member.
+ (make_right_shifted_expr): New function.
+ (queue_fixup): Change to recursive function that fragments
+ fixups if operand has a multi-ifield.
+ (gas_cgen_parse_operand): Add RELC code to wrap expressions in
+ symbols, call weak_operand_overflow_check, and fragment call
+ queue_fixup with operand fields.
+ (gas_cgen_finish_insn) Modify to manage ifield pointer.
+ (weak_operand_overflow_check): New function to try to select
+ insns correctly.
+ (gas_cgen_encode_addend): New function for relc.
+ (gas_cgen_install_complex_reloc): Likewise.
+ (gas_cgen_tc_gen_reloc): Add hook into gas_cgen_install_complex_reloc.
+ * write.h (struct fix): Add msb_field_p to fx_cgen sub-struct. Add
+ cgen_maybe_multi_ifield field to fx_cgen substructure.
+ * cgen.h (GAS_CGEN_MAX_FIXUPS): Bump from 3 up to 32.
+ * symbols.h (symbol_relc_make_sym,value,expr): New prototypes.
+
+2007-02-03 DJ Delorie <dj@delorie.com>
+
+ * config/tc-m32c.c (m32c_cons_fix_new): New. Added to support 3
+ byte relocs.
+ * config/tc-m32c.h (TC_CONS_FIX_NEW): Define.
+ (m32c_cons_fix_new): Prototype.
+
+2007-02-02 Bob Wilson <bob.wilson@acm.org>
+
+ * config/tc-xtensa.c (xg_build_to_insn): Use tinsn_init.
+ (xg_expand_assembly_insn, istack_push_space, istack_pop): Likewise.
-2006-02-02 Paul Brook <paul@codesourcery.com>
-
- * config/tc-arm.c (do_shift): Remove Thumb-1 constraint.
-
-2005-02-02 Paul Brook <paul@codesourcery.com>
-
- * config/tc-arm.c (T2_OPCODE_MASK, T2_DATA_OP_SHIFT, T2_OPCODE_AND,
- T2_OPCODE_BIC, T2_OPCODE_ORR, T2_OPCODE_ORN, T2_OPCODE_EOR,
- T2_OPCODE_ADD, T2_OPCODE_ADC, T2_OPCODE_SBC, T2_OPCODE_SUB,
- T2_OPCODE_RSB): Define.
- (thumb32_negate_data_op): New function.
- (md_apply_fix): Use it.
-
-2006-01-31 Bob Wilson <bob.wilson@acm.org>
-
- * config/xtensa-istack.h (TInsn): Remove record_fix and sub_symbol
- fields.
- * config/tc-xtensa.h (xtensa_frag_type): Remove slot_sub_symbols field.
- * config/tc-xtensa.c (md_apply_fix): Check for unexpected uses of
- subtracted symbols.
- (relaxation_requirements): Add pfinish_frag argument and use it to
- replace setting tinsn->record_fix fields.
- (xg_assemble_vliw_tokens): Adjust calls to relaxation_requirements
- and vinsn_to_insnbuf. Remove references to record_fix and
- slot_sub_symbols fields.
- (xtensa_mark_narrow_branches): Delete unused code.
- (is_narrow_branch_guaranteed_in_range): Handle expr that is not just
- a symbol.
- (convert_frag_immed): Adjust vinsn_to_insnbuf call and do not set
- record_fix fields.
- (tinsn_immed_from_frag): Remove code for handling slot_sub_symbols.
- (vinsn_to_insnbuf): Change use of record_fixup argument, replacing use
- of the record_fix field. Simplify error messages for unexpected
- symbolic operands.
- (set_expr_symbol_offset_diff): Delete.
-
-2006-01-31 Paul Brook <paul@codesourcery.com>
-
- * config/tc-arm.c (arm_reg_parse): Check if reg is non-NULL.
-
-2006-01-31 Paul Brook <paul@codesourcery.com>
- Richard Earnshaw <rearnsha@arm.com>
-
- * config/tc-arm.c: Use arm_feature_set.
- (arm_ext_*, arm_arch_full, arm_arch_t2, arm_arch_none,
- arm_cext_iwmmxt, arm_cext_xscale, arm_cext_maverick, fpu_fpa_ext_v1,
- fpu_fpa_ext_v2, fpu_vfp_ext_v1xd, fpu_vfp_ext_v1, fpu_vfp_ext_v2):
- New variables.
- (insns): Use them.
- (md_atof, opcode_select, opcode_select, md_assemble, md_assemble,
- md_begin, arm_parse_extension, arm_parse_cpu, arm_parse_arch,
- arm_parse_fpu, arm_parse_float_abi, aeabi_set_public_attributes,
- s_arm_cpu, s_arm_arch, s_arm_fpu): Use macros for accessing CPU
- feature flags.
- (arm_legacy_option_table, arm_option_cpu_value_table): New types.
- (arm_opts): Move old cpu/arch options from here...
- (arm_legacy_opts): ... to here.
- (md_parse_option): Search arm_legacy_opts.
- (arm_cpus, arm_archs, arm_extensions, arm_fpus)
- (arm_float_abis, arm_eabis): Make const.
-
-2006-01-25 Bob Wilson <bob.wilson@acm.org>
-
- * config/tc-xtensa.c (md_apply_fix): Set value to zero for PLT relocs.
-
-2006-01-21 Jie Zhang <jie.zhang@analog.com>
-
- * config/bfin-parse.y (asm_1): Check value range for 16 bit immediate
- in load immediate intruction.
-
-2006-01-21 Jie Zhang <jie.zhang@analog.com>
-
- * config/bfin-parse.y (value_match): Use correct conversion
- specifications in template string for __FILE__ and __LINE__.
- (binary): Ditto.
- (unary): Ditto.
-
-2006-01-18 Alexandre Oliva <aoliva@redhat.com>
-
- Introduce TLS descriptors for i386 and x86_64.
- * config/tc-i386.c (tc_i386_fix_adjustable): Handle
- BFD_RELOC_386_TLS_GOTDESC, BFD_RELOC_386_TLS_DESC_CALL,
- BFD_RELOC_X86_64_GOTPC32_TLSDESC, BFD_RELOC_X86_64_TLSDESC_CALL.
- (optimize_disp): Emit fix up for BFD_RELOC_386_TLS_DESC_CALL and
- BFD_RELOC_X86_64_TLSDESC_CALL immediately, and clear the
- displacement bits.
- (build_modrm_byte): Set up zero modrm for TLS desc calls.
- (lex_got): Handle @tlsdesc and @tlscall.
- (md_apply_fix, tc_gen_reloc): Handle the new relocations.
-
-2006-01-11 Nick Clifton <nickc@redhat.com>
-
- Fixes for building on 64-bit hosts:
- * config/tc-avr.c (mod_index): New union to allow conversion
- between pointers and integers.
- (md_begin, avr_ldi_expression): Use it.
- * config/tc-i370.c (md_assemble): Add cast for argument to print
- statement.
- * config/tc-tic54x.c (subsym_substitute): Likewise.
- * config/tc-mn10200.c (md_assemble): Use a union to convert the
- opindex field of fr_cgen structure into a pointer so that it can
- be stored in a frag.
- * config/tc-mn10300.c (md_assemble): Likewise.
- * config/tc-frv.c (frv_debug_tomcat): Use %p to print pointer
- types.
- * config/tc-v850.c: Replace uses of (int) casts with correct
- types.
-
-2006-01-09 H.J. Lu <hongjiu.lu@intel.com>
-
- PR gas/2117
- * symbols.c (snapshot_symbol): Don't change a defined symbol.
-
-2006-01-03 Hans-Peter Nilsson <hp@bitrange.com>
-
- PR gas/2101
- * config/tc-mmix.c (mmix_handle_mmixal): Don't treat #[0-9][FB] as
- a local-label reference.
-
-For older changes see ChangeLog-2005
+2007-02-02 Bob Wilson <bob.wilson@acm.org>
+
+ * config/tc-xtensa.c (SUFFIX_MAP, suffix_relocs): New.
+ (xtensa_elf_suffix): Use suffix_relocs instead of local mapping table.
+ (map_suffix_reloc_to_operator): New.
+ (map_operator_to_reloc): New.
+ (expression_maybe_register): Fix incorrect test of return value from
+ xtensa_elf_suffix. Rearrange to use map_suffix_reloc_to_operator.
+ (xg_assemble_literal, convert_frag_immed): Use map_operator_to_reloc.
+
+2007-02-02 Bob Wilson <bob.wilson@acm.org>
+
+ * config/xtensa-istack.h (struct tinsn_struct): Delete fixup field.
+ (tinsn_get_tok): Delete prototype.
+ * config/tc-xtensa.c (tinsn_get_tok): Delete.
+
+2007-02-02 Bob Wilson <bob.wilson@acm.org>
+
+ * config/xtensa-relax.h (struct build_instr): Delete id field.
+ * config/xtensa-relax.c (widen_spec_list): Remove zeros from LITERAL
+ and LABEL tokens.
+ (append_literal_op, append_label_op): Remove litnum/labnum arguments;
+ set op_data fields to zero.
+ (parse_id_constant): Delete.
+ (build_transition): Remove code to handle numbered literals and labels.
+
+2007-02-02 Bob Wilson <bob.wilson@acm.org>
+
+ * config/xtensa-relax.c (build_transition): Remove code after as_fatal.
+ (build_transition_table): Likewise.
+
+2007-02-01 Bob Wilson <bob.wilson@acm.org>
+
+ * config/tc-xtensa.c (xg_add_opcode_fix, md_apply_fix): Delete use of
+ fx_tcbit.
+ * config/tc-xtensa.h (TC_FORCE_RELOCATION_LOCAL): Remove.
+
+2007-02-02 Alan Modra <amodra@bigpond.net.au>
+
+ * write.h (struct fix <fx_pcrel_adjust, fx_size>): Move.
+ (struct fix <fx_plt>): Rename to tcbit2.
+ * write.c (fix_new_internal): Adjust.
+ (TC_FORCE_RELOCATION_LOCAL): Don't test fx_plt.
+ * config/tc-arm.h (TC_FORCE_RELOCATION_LOCAL): Likewise.
+ * config/tc-cris.h (TC_FORCE_RELOCATION_LOCAL): Likewise.
+ * config/tc-i386.h (TC_FORCE_RELOCATION_LOCAL): Likewise.
+ * config/tc-i960.h (TC_FORCE_RELOCATION_LOCAL): Likewise.
+ * config/tc-sh.h (TC_FORCE_RELOCATION_LOCAL): Likewise.
+ * config/tc-sh64.h (TC_FORCE_RELOCATION_LOCAL): Likewise.
+ * config/tc-sparc.h (TC_FORCE_RELOCATION_LOCAL): Likewise.
+ * config/tc-msp430.c (msp430_force_relocation_local): Likewise.
+ * config/tc-ia64.c (emit_one_bundle): Don't set fx_plt.
+ * config/tc-ia64.h (TC_FORCE_RELOCATION_LOCAL): Don't test fx_plt.
+ Instead, compare fx_r_type.
+ * config/tc-xtensa.c (xg_add_opcode_fix, md_apply_fix): Use
+ fx_tcbit in place of fx_plt.
+ * config/tc-xtensa.h (TC_FORCE_RELOCATION_LOCAL): Define.
+ * doc/internals.texi (TC_FORCE_RELOCATION_LOCAL): Remove reference
+ to fx_plt.
+
+2007-01-30 Nick Clifton <nickc@redhat.com>
+
+ * as.c (main): Mark symbols created via the --defsym command line
+ option as volatile so that they can be overridden later on by a
+ .set directive. This maintains compatibility with the behaviour
+ of earlier versions of the assembler.
+ * doc/as.texinfo (--defsym): Document that the defined symbol's
+ value can be overridden via a .set directive.
+
+2007-01-28 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (swap_imm_operands): Renamed to ...
+ (swap_2_operands): This. Take 2 ints.
+ (md_assemble): Updated.
+ (swap_operands): Call swap_2_operands to swap 2 operands.
+
+2007-01-24 DJ Delorie <dj@redhat.com>
+
+ * config/tc-m32c.c (md_pseudo_table): Add .3byte.
+
+2007-01-22 Nick Clifton <nickc@redhat.com>
+
+ PR gas/3871
+ * tc-score.c: Remove unnecessary uses of _().
+ Make the err_msg[] a file level local array in order to save
+ storage space.
+ Remove unnecessary sprintf()s.
+
+2007-01-18 Mei Ligang <ligang@sunnorth.com.cn>
+
+ PR gas/3871
+ * config/tc-score.c : Using _() for const string.
+ Do not assign inst.error with a local string pointer.
+ (md_section_align): Pad section.
+
+2007-01-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (build_modrm_byte): Check number of operands
+ when procssing memory/register operand.
+
+2007-01-12 Nick Clifton <nickc@redhat.com>
+
+ PR gas/3856
+ * macro.c (expand_irp): Do not ignore spaces inside quoted
+ strings.
+
+2007-01-12 Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-spu.h (TC_RELOC_RTSYM_LOC_FIXUP): Delete.
+ * config/tc-m32r.h (TC_RELOC_RTSYM_LOC_FIXUP): Delete.
+ * config/tc-mn10300.h (TC_RELOC_RTSYM_LOC_FIXUP): Delete.
+ (TC_FORCE_RELOCATION): Define.
+ (TC_FORCE_RELOCATION_LOCAL): Define.
+ * config/tc-mn10300.c (mn10300_fix_adjustable): Adjust.
+
+2007-01-12 Alan Modra <amodra@bigpond.net.au>
+
+ * input-file.c (input_file_open): Check fgets return.
+
+2007-01-11 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (do_t_add_sub): Use Rd and Rs.
+
+2007-01-11 Nick Clifton <nickc@redhat.com>
+
+ PR gas/3707
+ * config/tc-arm.c (md_begin): Cope with an NULL mcpu_fpu_opt
+ variable.
+
+ * config/tc-mcore.c (md_number_to_chars): Use
+ number_to_chars_{big|little}endian.
+
+2007-01-08 Kazu Hirata <kazu@codesourcery.com>
+
+ * config/tc-m68k.c (m68k_archs, m68k_cpus): Treat Fido as an
+ architecture by itself.
+ (m68k_ip): Don't issue a warning for tbl instructions on fido.
+ (m68k_elf_final_processing): Treat Fido as an architecture by
+ itself.
+
+2007-01-08 Kai Tietz <kai.tietz@onevision.com>
+
+ * configure.tgt: Renamed target x86_64-*-mingw64 to x86_64-*-mingw*
+
+2007-01-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (set_intel_syntax): Update set_intel_syntax
+ depending on allow_naked_reg.
+
+2007-01-04 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (do_cpsi): Set mmod bit for 2 argument form.
+
+2007-01-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/3830
+ * config/tc-i386.c (register_prefix): New.
+ (set_intel_syntax): Set set_intel_syntax to "" if register
+ prefix isn't needed.
+ (check_byte_reg): Use register_prefix for error message.
+ (check_long_reg): Likewise.
+ (check_qword_reg): Likewise.
+ (check_word_reg): Likewise.
+
+2006-01-04 Julian Brown <julian@codesourcery.com>
+
+ * config/tc-arm.c (do_neon_shl_imm): Swap rN, rM.
+ (do_neon_qshl_imm): Likewise.
+ (do_neon_rshl): New function. Handle rounding variants of
+ v{q}shl-by-register.
+ (insns): Use do_neon_rshl for vrshl, vqrshl.
+
+2007-01-04 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (NEON_ENC_TAB): Fix encoding of vclt, vcle, vaclt
+ and vacle.
+
+2007-01-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (swap_operands): Remove branches.
+
+2007-01-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c: Update copyright year.
+ * config/tc-i386.h: Likewise.
+
+2007-01-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (smallest_imm_type): Return unsigned int
+ instead of int.
+
+2007-01-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c: Convert to ISO C90 formatting
+ * config/tc-i386.h: Likewise.
+
+2007-01-03 David Daney <ddaney@avtrex.com>
+
+ * config/tc-mips.c (md_show_usage): Clean up -mno-shared
+ documentation.
+
+For older changes see ChangeLog-2006
Local Variables:
mode: change-log
diff --git a/gas/ChangeLog-2006 b/gas/ChangeLog-2006
new file mode 100644
index 000000000000..dc933e5b0508
--- /dev/null
+++ b/gas/ChangeLog-2006
@@ -0,0 +1,2756 @@
+2006-12-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.h (ShiftCount): Fix a comment typo.
+
+2006-12-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (md_show_usage): Mention --32/--64.
+
+2006-12-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (build_modrm_byte): Handle shift count
+ register with 3 operands.
+
+2006-12-28 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (process_operands): Check i.reg_operands
+ and increment i.operands when adding a register operand.
+ (build_modrm_byte): Fix 4 operand instruction handling.
+
+2006-12-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (disp_expressions): Use MAX_MEMORY_OPERANDS
+ for array size instead of 2.
+ (im_expressions): Use MAX_IMMEDIATE_OPERANDS for for array size
+ instead of 2.
+ (i386_immediate): Update immediate operand overflow error
+ message.
+ (i386_displacement): Check displacement operand overflow.
+
+2006-12-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c: Document tc-i386.c, not i386.c.
+
+2006-12-27 Kazu Hirata <kazu@codesourcery.com>
+
+ * config/m68k-parse.h (m68k_register): Add CAC and MBB.
+ * config/tc-m68k.c (fido_ctrl): New.
+ (m68k_archs): Use fido_ctrl for -mfidoa.
+ (m68k_cpus): Use fido_ctrl on fido-*-*.
+ (m68k_ip): Add support for CAC and MBB.
+ (init_table): Add CAC and MBB.
+
+2006-12-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (i386_immediate): Remove prototype.
+
+2006-12-25 Kazu Hirata <kazu@codesourcery.com>
+
+ * config/tc-m68k.c (cpu_of_arch): Add fido.
+ (m68k_archs, m68k_cpu): Add entries for fido.
+ (m68k_elf_final_processing): Handle EF_M68K_CPU32_FIDO_A.
+
+2006-12-25 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * config/tc-score.c (build_lw_pic): Rename as build_lwst_pic.
+ Delete the code handling large constant for PIC.
+ Modify some comments.
+ (score_relax_frag): Decrease insn_addr in certain situation.
+ (s_score_cprestore): Change .cprestore syntax from ".cprestore offset"
+ to ".cprestore reg, offset".
+
+2006-12-23 Kazu Hirata <kazu@codesourcery.com>
+
+ * configure.tgt: Recognize fido.
+
+2006-12-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c: Add a blank line bewteen function bodies.
+
+2006-12-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (build_modrm_byte): Reformat to 72 columns.
+
+2006-12-14 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (YFLAGS): Define.
+ * Makefile.in: Regenerated.
+
+2006-12-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (match_template): Simplify 3 and 4 operand
+ match.
+
+2006-12-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (build_modrm_byte): Set the Operand_PCrel
+ bit only.
+
+2006-12-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (match_template): Use a for loop to set
+ operand_types array.
+
+2006-12-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/3712
+ * config/tc-i386.c (match_template): Use MAX_OPERANDS for the
+ number of operands. Issue an error if MAX_OPERANDS != 4. Add
+ the 4th operand check.
+
+2006-12-13 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (arm_arch_option_table): Add v7-{a,r,m}.
+ * doc/c-arm.texi: Fix spelling of ARMv7 profile variants.
+
+2006-12-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.h (WordMem): Document it for 64 bit memory
+ reference.
+
+2006-12-12 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * doc/Makefile.am (as_TEXINFOS): Set.
+ (as.info as.dvi as.html): Delete rule.
+ * doc/Makefile.in: Regenerated.
+
+2006-12-11 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.in: Define GENINSRC_NEVER.
+ * doc/Makefile.am (as.info): Remove srcdir prefix.
+ (MAINTAINERCLEANFILES): Add info file.
+ (DISTCLEANFILES): Pretend to add info file.
+ * po/Make-in (.po.gmo): Put gmo files in objdir.
+ * configure, Makefile.in, doc/Makefile.in: Regenerated.
+
+2006-12-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.h (template): Use MAX_OPERANDS instead of 4
+ for operand_types array.
+
+2006-12-08 Christian Groessler <chris@groessler.org>
+
+ * config/tc-z8k.c (whatreg): Add comment describing function.
+ Return NULL if symbol name characters follow the register number.
+ (parse_reg): Use NULL instead of 0 for pointer values. Stop
+ processing if whatreg returned NULL.
+
+2006-12-07 Kazu Hirata <kazu@codesourcery.com>
+
+ * config/tc-m68k.c: Update uses of EF_M68K_*.
+
+2006-12-06 H.J. Lu <hjl@gnu.org>
+
+ * config/tc-i386.h: Change the prefix order to SEG_PREFIX,
+ ADDR_PREFIX, DATA_PREFIX, LOCKREP_PREFIX.
+
+2006-12-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR gas/3607
+ * subsegs.c (subseg_set_rest): Clear frch_cfi_data field.
+
+2006-12-01 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (arm_force_relocation): Return 1 for relocs against
+ function symbols.
+
+2006-11-29 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (arm_is_eabi): New function.
+ * config/tc-arm.h (arm_is_eabi): New prototype.
+ (THUMB_IS_FUNC): Use ELF function type for EABI objects.
+ * doc/c-arm.texi (.thumb_func): Update documentation.
+
+2006-11-29 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (do_vfp_sp_const, do_vfp_dp_const): Fix operans
+ encoding.
+
+2006-11-27 Sterling Augustine <sterling@tensilica.com>
+
+ * config/tc-xtensa.c (xtensa_sanity_check): Check for RELAX_IMMED
+ as the first slot_subtype, not the frag subtype.
+
+2006-11-27 Bob Wilson <bob.wilson@acm.org>
+
+ * config/tc-xtensa.c (XSHAL_ABI): Add default definition.
+ (directive_state): Disable scheduling by default.
+ (xtensa_add_config_info): New.
+ (xtensa_end): Call xtensa_add_config_info.
+
+2006-11-27 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/tc-sparc.c (tc_gen_reloc): Turn aligned relocs into
+ their unaligned counterparts in debugging sections.
+
+2006-11-24 Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-spu.c (md_pseudo_table): Add eqv and .eqv.
+
+2006-11-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * config/tc-arm.h (md_cons_align): Define.
+ (mapping_state): New prototype.
+ * config/tc-arm.c (mapping_state): Make global.
+
+2006-11-22 Alan Modra <amodra@bigpond.net.au>
+
+ * config/obj-elf.c (obj_elf_version): Use memcpy rather than strcpy.
+
+2006-11-16 Mei ligang <ligang@sunnorth.com.cn>
+
+ * config/tc-score.c (score_relax_frag): If next frag contains 32 bit
+ branch instruction, handle it specially.
+ (score_insns): Modify 32 bit branch instruction.
+
+2006-11-16 Alan Modra <amodra@bigpond.net.au>
+
+ * symbols.c (resolve_symbol_value): Formatting.
+
+2006-11-15 Jan Beulich <jbeulich@novell.com>
+
+ PR/3469
+ * symbols.c (symbol_clone): Mark symbol ending up not on symbol
+ chain by linking it to itself.
+ (resolve_symbol_value): Also check symbol_shadow_p().
+ (symbol_shadow_p): New.
+ * symbols.h (symbol_shadow_p): Declare.
+
+2006-11-12 Mark Shinwell <shinwell@codesourcery.com>
+
+ * config/tc-arm.c (do_t_czb): Rename to do_t_cbz.
+ (insns): Adjust accordingly.
+ (md_apply_fix): Alter comments to use CBZ instead of CZB.
+
+2006-11-10 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * config/tc-arm.c (arm_fix_adjustable) [OBJ_COFF]: Delete.
+ (arm_fix_adjustable) [OBJ_ELF]: Use it on coff targets too.
+
+2006-11-10 Nick Clifton <nickc@redhat.com>
+
+ PR gas/3456:
+ * config/obj-elf.c (obj_elf_version): Do not include the name
+ field's padding in the namesz value.
+
+2006-11-09 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c: Fix outdated comment.
+
+2006-11-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.h (CpuPNI): Removed.
+ (CpuUnknownFlags): Replace CpuPNI with CpuSSE3.
+ * config/tc-i386.c (md_assemble): Likewise.
+
+2006-11-08 Alan Modra <amodra@bigpond.net.au>
+
+ * symbols.c (symbol_create, symbol_clone): Don't set udata.p.
+
+2006-11-06 David Daney <ddaney@avtrex.com>
+
+ * config/tc-mips.c (pic_need_relax): Return true for section symbols.
+
+2006-11-06 Thiemo Seufer <ths@mips.com>
+
+ * doc/c-mips.texi (-march): Document sb1a.
+
+2006-11-06 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (mips_cpu_info_table): Remove 24k/24ke aliases.
+ 34k always has DSP ASE.
+
+2006-11-03 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (md_pcrel_from_section): Disallow PC relative
+ MIPS16 instructions referencing other sections, unless they are
+ external branches.
+
+2006-11-03 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (mips_cpu_info_table): The 25Kf is a MIPS64
+ release 1 CPU.
+
+2006-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ * dw2gencfi.c (struct fde_entry): Add per_encoding, lsda_encoding,
+ personality and lsda.
+ (struct cie_entry): Add per_encoding, lsda_encoding and personality.
+ (alloc_fde_entry): Initialize per_encoding and lsda_encoding.
+ (cfi_pseudo_table): Handle .cfi_personality and .cfi_lsda.
+ (dot_cfi_personality, dot_cfi_lsda, encoding_size): New functions.
+ (output_cie): Output personality including its encoding and LSDA encoding.
+ (output_fde): Output LSDA.
+ (select_cie_for_fde): Don't share CIE if personality, its encoding or
+ LSDA encoding are different. Copy the 3 fields from fde_entry to
+ cie_entry.
+ * doc/as.texinfo (.cfi_personality, .cfi_lsda): Document.
+
+ * subsegs.h (struct frchain): Add frch_cfi_data field.
+ * dw2gencfi.c: Include subsegs.h.
+ (cur_fde_data, last_address, cur_cfa_offset, cfa_save_stack): Removed.
+ (struct frch_cfi_data): New type.
+ (unused_cfi_data): New variable.
+ (alloc_fde_entry): Move cur_fde_data, last_address, cur_cfa_offset
+ and cfa_save_stack static vars into a structure pointed from
+ each frchain.
+ (alloc_cfi_insn_data, cfi_new_fde, cfi_end_fde, cfi_set_return_column,
+ cfi_add_advance_loc, cfi_add_CFA_def_cfa, cfi_add_CFA_def_cfa_offset,
+ cfi_add_CFA_remember_state, cfi_add_CFA_restore_state, dot_cfi,
+ dot_cfi_escape, dot_cfi_startproc, dot_cfi_endproc, cfi_finish):
+ Likewise.
+
+2006-11-02 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * config/tc-h8300.c (build_bytes): Fix const warning.
+
+2006-11-01 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * tc-score.c (do16_rdrs): Handle not! instruction especially.
+
+2006-10-31 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (arm_adjust_symtab): Don't use STT_ARM_16BIT
+ for EABIv4.
+
+2006-10-31 Paul Brook <paul@codesourcery.com>
+
+ gas/
+ * config/tc-arm.c (object_arch): New variable.
+ (s_arm_object_arch): New function.
+ (md_pseudo_table): Add object_arch.
+ (aeabi_set_public_attributes): Obey object_arch.
+ * doc/c-arm.texi: Document .object_arch.
+
+2006-10-31 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * tc-score.c (data_op2): Check invalid operands.
+ (my_get_expression): Const operand of some instructions can not be
+ symbol in assembly.
+ (get_insn_class_from_type): Handle instruction type Insn_internal.
+ (do_macro_ldst_label): Modify inst.type.
+ (Insn_PIC): Delete.
+ (data_op2): The immediate value in lw is 15 bit signed.
+
+2006-10-29 Randolph Chung <tausq@debian.org>
+
+ * config/tc-hppa.c (hppa_cfi_frame_initial_instructions)
+ (hppa_regname_to_dw2regnum): New funcions.
+ * config/tc-hppa.h [OBJ_ELF] (TARGET_USE_CFIPOP): Define.
+ (tc_cfi_frame_initial_instructions)
+ (tc_regname_to_dw2regnum): Define.
+ (hppa_cfi_frame_initial_instructions)
+ (hppa_regname_to_dw2regnum): Declare.
+ (DWARF2_LINE_MIN_INSN_LENGTH, DWARF2_DEFAULT_RETURN_COLUMN)
+ (DWARF2_CIE_DATA_ALIGNMENT): Define.
+
+2006-10-29 Nick Clifton <nickc@redhat.com>
+
+ * config/tc-spu.c (md_assemble): Cast printf string size parameter
+ to int in order to avoid a compiler warning.
+
+2006-10-27 Andrew Stubbs <andrew.stubbs@st.com>
+
+ * config/tc-sh.c (md_assemble): Define size of branches.
+
+2006-10-26 Ben Elliston <bje@au.ibm.com>
+
+ * dw2gencfi.c (cfi_add_CFA_offset):
+ Assert DWARF2_CIE_DATA_ALIGNMENT is non-zero.
+
+ * write.c (chain_frchains_together_1): Assert that this function
+ never returns a pointer to the auto variable `dummy'.
+
+2006-10-25 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
+ Yukishige Shibata <shibata@rd.scei.sony.co.jp>
+ Nobuhisa Fujinami <fnami@rd.scei.sony.co.jp>
+ Takeaki Fukuoka <fukuoka@rd.scei.sony.co.jp>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-spu.c: New file.
+ * config/tc-spu.h: New file.
+ * configure.tgt: Add SPU support.
+ * Makefile.am: Likewise. Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * po/POTFILES.in: Regenerate.
+
+2006-10-25 Ben Elliston <bje@au.ibm.com>
+
+ * expr.c (expr): Replace O_add case in switch (op_left) explaining
+ why it can never occur.
+
+2006-10-24 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ * doc/c-ppc.texi (-mcell): Document.
+ * config/tc-ppc.c (parse_cpu): Parse -mcell.
+ (md_show_usage): Document -mcell.
+
+2006-10-23 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+
+ * doc/c-i386.texi : Document amdfam10,.sse4a and .abm in cpu_type.
+
+2006-10-23 Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-m68hc11.c (md_assemble): Quiet warning.
+
+2006-10-19 Mike Frysinger <vapier@gentoo.org>
+
+ * config/tc-i386.c (md_parse_option): Use CONST_STRNEQ.
+ (x86_64_section_letter): Likewise.
+
+2006-10-19 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * config/tc-score.c (build_relax_frag): Compute correct
+ tc_frag_data.fixp.
+
+2006-10-18 Roy Marples <uberlord@gentoo.org>
+
+ * config/tc-sparc.c (md_parse_option): Treat any target starting with
+ elf32-sparc as a viable target for the -32 switch and any target
+ starting with elf64-sparc as a viable target for the -64 switch.
+ (sparc_target_format): For 64-bit ELF flavoured output use
+ ELF_TARGET_FORMAT64 while for 32-bit ELF flavoured output use
+ ELF_TARGET_FORMAT.
+ * config/tc-sparc.h (ELF_TARGET_FORMAT, ELF_TARGET_FORMAT64): Define.
+
+2006-10-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
+
+2006-10-16 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * input-scrub.c (input_scrub_next_buffer): Use TC_EOL_IN_INSN
+ in addition to testing for '\n'.
+ (TC_EOL_IN_INSN): Provide a default definition if necessary.
+
+2006-10-13 Sterling Augstine <sterling@tensilica.com>
+
+ * dwarf2dbg.c (out_debug_info): Use TC_DWARF2_EMIT_OFFSET to emit
+ a disjoint DW_AT range.
+
+2006-10-13 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * config/tc-score.c (md_show_usage): Print -KPIC option usage.
+
+2006-10-08 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (parse_big_immediate): 64-bit host fix.
+ (parse_operands): Use parse_big_immediate for OP_NILO.
+ (neon_cmode_for_logic_imm): Try smaller element sizes.
+ (neon_cmode_for_move_imm): Ditto.
+ (do_neon_logic): Handle .i64 pseudo-op.
+
+2006-09-29 Alan Modra <amodra@bigpond.net.au>
+
+ * po/POTFILES.in: Regenerate.
+
+2006-09-28 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.h (CpuMNI): Renamed to ...
+ (CpuSSSE3): This.
+ (CpuUnknownFlags): Updated.
+ (processor_type): Replace PROCESSOR_YONAH with PROCESSOR_CORE
+ and PROCESSOR_MEROM with PROCESSOR_CORE2.
+ * config/tc-i386.c: Updated.
+ * doc/c-i386.texi: Likewise.
+
+ * config/tc-i386.c (cpu_arch): Add ".ssse3", "core" and "core2".
+
+2006-09-28 Bridge Wu <mingqiao.wu@gmail.com>
+
+ * config/tc-arm.c (md_apply_fix): Do not clear write_back bit.
+
+2006-09-27 Nick Clifton <nickc@redhat.com>
+
+ * output-file.c (output_file_close): Prevent an infinite loop
+ reporting that stdoutput could not be closed.
+
+2006-09-26 Mark Shinwell <shinwell@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+ Ian Lance Taylor <ian@wasabisystems.com>
+ Ben Elliston <bje@wasabisystems.com>
+
+ * config/tc-arm.c (arm_cext_iwmmxt2): New.
+ (enum operand_parse_code): New code OP_RIWR_I32z.
+ (parse_operands): Handle OP_RIWR_I32z.
+ (do_iwmmxt_wmerge): New function.
+ (do_iwmmxt_wldstd): Handle iwmmxt2 case where second operand is
+ a register.
+ (do_iwmmxt_wrwrwr_or_imm5): New function.
+ (insns): Mark instructions as RIWR_I32z as appropriate.
+ Also add torvsc<b,h,w>, wabs<b,h,w>, wabsdiff<b,h,w>,
+ waddbhus<l,m>, waddhc, waddwc, waddsubhx, wavg4{r}, wmaddu{x,n},
+ wmadds{x,n}, wmerge, wmiaxy{n}, wmiawxy{n}, wmul<sm,um>{r},
+ wmulw<um,sm,l>{r}, wqmiaxy{n}, wqmulm{r}, wqmulwm{r}, wsubaddhx.
+ (md_begin): Handle IWMMXT2.
+ (arm_cpus): Add iwmmxt2.
+ (arm_extensions): Likewise.
+ (arm_archs): Likewise.
+
+2006-09-25 Bob Wilson <bob.wilson@acm.org>
+
+ * doc/as.texinfo (Overview): Revise description of --keep-locals.
+ Add xref to "Symbol Names".
+ (L): Refer to "local symbols" instead of "local labels". Move
+ definition to "Symbol Names" section; add xref to that section.
+ (Symbol Names): Use "Local Symbol Names" section to define local
+ symbols. Add "Local Labels" heading for description of temporary
+ forward/backward labels, and refer to those as "local labels".
+
+2006-09-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3235
+ * config/tc-i386.c (match_template): Check address size prefix
+ to turn Disp64/Disp32/Disp16 operand into Disp32/Disp16/Disp32
+ operand.
+
+2006-09-22 Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-ppc.c (ppc_symbol_chars): Remove '+' and '-'.
+
+2006-09-22 Alan Modra <amodra@bigpond.net.au>
+
+ * as.h (as_perror): Delete declaration.
+ * gdbinit.in (as_perror): Delete breakpoint.
+ * messages.c (as_perror): Delete function.
+ * doc/internals.texi: Remove as_perror description.
+ * listing.c (listing_print: Don't use as_perror.
+ * output-file.c (output_file_create, output_file_close): Likewise.
+ * symbols.c (symbol_create, symbol_clone): Likewise.
+ * write.c (write_contents): Likewise.
+ * config/obj-som.c (obj_som_version, obj_som_copyright): Likewise.
+ * config/tc-tic54x.c (tic54x_mlib): Likewise.
+
+2006-09-22 Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-ppc.c (md_section_align): Don't round up address for ELF.
+ (ppc_handle_align): New function.
+ * config/tc-ppc.h (HANDLE_ALIGN): Use ppc_handle_align.
+ (SUB_SEGMENT_ALIGN): Define as zero.
+
+2006-09-20 Bob Wilson <bob.wilson@acm.org>
+
+ * doc/as.texinfo: Fix cross reference usage, typos and grammar.
+ (Overview): Skip cross reference in man page.
+
+2006-09-20 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * configure.in: Add new target x86_64-pc-mingw64.
+ * configure: Regenerate.
+ * configure.tgt: Add new target x86_64-pc-mingw64.
+ * config/obj-coff.h: Add handling for TE_PEP target specific code
+ and definitions.
+ * config/tc-i386.c: Add new targets.
+ (md_parse_option): Add targets to OPTION_64.
+ (x86_64_target_format): Add new method for setup proper default
+ target cpu mode.
+ * config/te-pep.h: Add new target definition header.
+ (TE_PEP): New macro: Identifies new target architecture.
+ (COFF_WITH_pex64): Set proper includes in bfd.
+ * NEWS: Mention new target.
+
+2006-09-18 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * config/bfin-parse.y (binary): Change sub of const to add of negated
+ const.
+
+2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * config/tc-score.c: New file.
+ * config/tc-score.h: Newf file.
+ * configure.tgt: Add Score target.
+ * Makefile.am: Add Score files.
+ * Makefile.in: Regenerate.
+ * NEWS: Mention new target support.
+
+2006-09-16 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (s_arm_unwind_movsp): Add offset argument.
+ * doc/c-arm.texi (movsp): Document offset argument.
+
+2006-09-16 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (thumb32_negate_data_op): Consistently use
+ unsigned int to avoid 64-bit host problems.
+
+2006-09-15 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * config/bfin-parse.y (binary): Do some more constant folding for
+ additions.
+
+2006-09-13 Jan Beulich <jbeulich@novell.com>
+
+ * input-file.c (input_file_give_next_buffer): Demote as_bad to
+ as_warn.
+
+2006-09-13 Alan Modra <amodra@bigpond.net.au>
+
+ PR gas/3165
+ * config/tc-sh (DWARF2_CIE_DATA_ALIGNMENT): Wrap negative number
+ in parens.
+
+2006-09-13 Alan Modra <amodra@bigpond.net.au>
+
+ * input-file.c (input_file_open): Replace as_perror with as_bad
+ so that gas exits with error on file errors. Correct error
+ message.
+ (input_file_get, input_file_give_next_buffer): Likewise.
+ * input-file.h: Update comment.
+
+2006-09-11 Tomas Frydrych <dr.tomas@yahoo.co.uk>
+
+ PR gas/3172
+ * config/tc-arm.c (parse_typed_reg_or_scalar): Accept wCg class
+ registers as a sub-class of wC registers.
+
+2006-09-11 Alan Modra <amodra@bigpond.net.au>
+
+ PR gas/3165
+ * config/tc-mips.h (enum dwarf2_format): Forward declare.
+ (DWARF2_CIE_DATA_ALIGNMENT): Wrap negative number in parens.
+ * config/tc-alpha.h (DWARF2_CIE_DATA_ALIGNMENT): Likewise.
+ * config/tc-arm.h (DWARF2_CIE_DATA_ALIGNMENT): Likewise.
+
+2006-09-08 Nick Clifton <nickc@redhat.com>
+
+ PR gas/3129
+ * doc/as.texinfo (Macro): Improve documentation about separating
+ macro arguments from following text.
+
+2006-09-08 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (insns): Allow ARM IT pseudo-insn on all cores.
+
+2006-09-07 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (parse_operands): Mark operand as present.
+
+2006-09-04 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (do_neon_dyadic_if_i): Remove.
+ (do_neon_dyadic_if_i_d): Avoid setting U bit.
+ (do_neon_mac_maybe_scalar): Ditto.
+ (do_neon_dyadic_narrow): Force operand type to NT_integer.
+ (insns): Remove out of date comments.
+
+2006-08-29 Nick Clifton <nickc@redhat.com>
+
+ * read.c (s_align): Initialize the 'stopc' variable to prevent
+ compiler complaints about it being used without being
+ initialized.
+ (s_comm_internal, s_mri_common, s_fail, s_globl, s_space,
+ s_float_space, s_struct, cons_worker, equals): Likewise.
+
+2006-08-29 Malcolm Parsons <malcolm.parsons@gmail.com>
+
+ * ecoff.c (ecoff_directive_val): Fix message typo.
+ * config/tc-ns32k.c (convert_iif): Likewise.
+ * config/tc-sh64.c (shmedia_check_limits): Likewise.
+
+2006-08-25 Sterling Augustine <sterling@tensilica.com>
+ Bob Wilson <bob.wilson@acm.org>
+
+ * config/tc-xtensa.c (xtensa_mark_literal_pool_location): Do not check
+ the state of the absolute_literals directive. Remove align frag at
+ the start of the literal pool position.
+
+2006-08-25 Bob Wilson <bob.wilson@acm.org>
+
+ * doc/c-xtensa.texi: Add @group commands in examples.
+
+2006-08-24 Bob Wilson <bob.wilson@acm.org>
+
+ * config/tc-xtensa.c (FINI_LITERAL_SECTION_NAME): Delete.
+ (INIT_LITERAL_SECTION_NAME): Delete.
+ (lit_state struct): Remove segment names, init_lit_seg, and
+ fini_lit_seg. Add lit_prefix and current_text_seg.
+ (init_literal_head_h, init_literal_head): Delete.
+ (fini_literal_head_h, fini_literal_head): Delete.
+ (xtensa_begin_directive): Move argument parsing to
+ xtensa_literal_prefix function.
+ (xtensa_end_directive): Deallocate lit_prefix field of lit_state.
+ (xtensa_literal_prefix): Parse the directive argument here and
+ record it in the lit_prefix field. Remove code to derive literal
+ section names.
+ (linkonce_len): New.
+ (get_is_linkonce_section): Use linkonce_len. Check for any
+ ".gnu.linkonce.*" section, not just text sections.
+ (md_begin): Remove initialization of deleted lit_state fields.
+ (xtensa_reorder_segments, xtensa_post_relax_hook): Remove references
+ to init_literal_head and fini_literal_head.
+ (xtensa_move_literals): Likewise. Skip literals for .init and .fini
+ when traversing literal_head list.
+ (match_section_group): New.
+ (cache_literal_section): Rewrite to determine the literal section
+ name on the fly, create the section and return it.
+ (xtensa_switch_to_literal_fragment): Adjust for cache_literal_section.
+ (xtensa_switch_to_non_abs_literal_fragment): Likewise.
+ (xtensa_create_property_segments, xtensa_create_xproperty_segments):
+ Use xtensa_get_property_section from bfd.
+ (retrieve_xtensa_section): Delete.
+ * doc/c-xtensa.texi (Xtensa Options): Fix --text-section-literals
+ description to refer to plural literal sections and add xref to
+ the Literal Directive section.
+ (Literal Directive): Describe new rules for deriving literal section
+ names. Add footnote for special case of .init/.fini with
+ --text-section-literals.
+ (Literal Prefix Directive): Replace old naming rules with xref to the
+ Literal Directive section.
+
+2006-08-21 Joseph Myers <joseph@codesourcery.com>
+
+ * config/tc-arm.c (s_arm_unwind_save_mmxwr): Correct condition for
+ merging with previous long opcode.
+
+2006-08-22 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * Makefile.am (TARG_ENV_HFILES): Add te-wince-pe.h.
+ * Makefile.in: Regenerate.
+ * config/tc-arm.h [TARGET_FORMAT]: ARM wince bfd names were
+ renamed. Adjust.
+
+2006-08-16 Julian Brown <julian@codesourcery.com>
+
+ * config/tc-arm.c (md_assemble): Improve diagnostic when attempting
+ to use ARM instructions on non-ARM-supporting cores.
+ (autoselect_thumb_from_cpu_variant): New function. Switch on Thumb
+ mode automatically based on cpu variant.
+ (md_begin): Call above function.
+
+2006-08-16 Julian Brown <julian@codesourcery.com>
+
+ * config/tc-arm.c (opcode_lookup): Allow Neon type suffixes to be
+ recognized in non-unified syntax mode.
+
+2006-08-15 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+ David Ung <davidu@mips.com>
+
+ * configure.tgt: Handle mips*-sde-elf*.
+
+2006-08-12 Thiemo Seufer <ths@networkno.de>
+
+ * config/tc-mips.c (mips16_ip): Fix argument register handling
+ for restore instruction.
+
+2006-08-08 Bob Wilson <bob.wilson@acm.org>
+
+ * dwarf2dbg.c (DWARF2_USE_FIXED_ADVANCE_PC): New.
+ (out_sleb128): New.
+ (out_fixed_inc_line_addr): New.
+ (process_entries): Use out_fixed_inc_line_addr when
+ DWARF2_USE_FIXED_ADVANCE_PC is set.
+ * config/tc-xtensa.h (DWARF2_USE_FIXED_ADVANCE_PC): Define.
+
+2006-08-08 DJ Delorie <dj@redhat.com>
+
+ * config/tc-sh.c (sh_frob_section): Canonicalize pointers to local
+ vs full symbols so that we never have more than one pointer value
+ for any given symbol in our symbol table.
+
+2006-08-08 Sterling Augustine <sterling@tensilica.com>
+
+ * dwarf2dbg.c (out_debug_info): Add new parameter ranges_seg
+ and emit DW_AT_ranges when code in compilation unit is not
+ contiguous.
+ (out_debug_abbrev): Emit DW_AT_ranges abbreviation if code in
+ is not contiguous.
+ (dwarf2_finish): Create and pass ranges_seg to out_debug_info.
+ (out_debug_ranges): New function to emit .debug_ranges section
+ when code is not contiguous.
+
+2006-08-08 Nick Clifton <nickc@redhat.com>
+
+ * config/tc-arm.c (WARN_DEPRECATED): Enable.
+
+2006-08-05 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * config/tc-arm.c: Move "dwarf2dbg.h" inclusion out of OBJ_ELF
+ only block.
+ (pe_directive_secrel) [TE_PE]: New function.
+ (md_pseudo_table) [!OBJ_ELF]: Handle 2byte, 4byte, 8byte, file,
+ loc, loc_mark_labels.
+ [TE_PE]: Handle secrel32.
+ (output_relax_insn): Remove OBJ_ELF around dwarf2_emit_insn
+ call.
+ (output_inst): Remove OBJ_ELF around dwarf2_emit_insn call.
+ (arm_frob_label): Remove OBJ_ELF around dwarf2_emit_label call.
+ (md_section_align): Only round section sizes here for AOUT
+ targets.
+ (tc_arm_regname_to_dw2regnum): Move out for OBJ_ELF only block.
+ (tc_pe_dwarf2_emit_offset): New function.
+ (md_apply_fix) [TE_PE]: Handle BFD_RELOC_32_SECREL.
+ (cons_fix_new_arm): Handle O_secrel.
+ * config/tc-arm.h : Move DWARF2_LINE_MIN_INSN_LENGTH,
+ DWARF2_DEFAULT_RETURN_COLUMN and DWARF2_CIE_DATA_ALIGNMENT out
+ of OBJ_ELF only block.
+ [TE_PE]: Define O_secrel, TC_DWARF2_EMIT_OFFSET, and declare
+ tc_pe_dwarf2_emit_offset.
+
+2006-08-04 Richard Sandiford <richard@codesourcery.com>
+
+ * config/tc-sh.c (apply_full_field_fix): New function.
+ (md_apply_fix): Use it instead of md_number_to_chars. Do not fill
+ in fx_addnumber for BFD_RELOC_32_PLT_PCREL.
+ (tc_gen_reloc): Use fx_addnumber rather than 0 as the default case.
+ * config/tc-sh.h (TARGET_FORMAT): Override for TE_VXWORKS.
+
+2006-08-03 Nick Clifton <nickc@redhat.com>
+
+ PR gas/2991
+ * config.in: Regenerate.
+
+2006-08-03 Joseph Myers <joseph@codesourcery.com>
+
+ * config/tc-arm.c (parse_operands): Handle invalid register name
+ for OP_RIWR_RIWC.
+
+2006-08-03 Joseph Myers <joseph@codesourcery.com>
+
+ * config/tc-arm.c (enum operand_parse_code): Add OP_RIWC_RIWG.
+ (parse_operands): Handle it.
+ (insns): Use it for tmcr and tmrc.
+
+2006-08-02 Petr Salinger <Petr.Salinger@seznam.cz>
+
+ PR binutils/2983
+ * config/tc-i386.c (md_parse_option): Treat any target starting
+ with elf64_x86_64 as a viable target for the -64 switch.
+ (i386_target_format): For 64-bit ELF flavoured output use
+ ELF_TARGET_FORMAT64.
+ * config/tc-i386.h (ELF_TARGET_FORMAT64): Define.
+
+2006-08-02 Nick Clifton <nickc@redhat.com>
+
+ PR gas/2991
+ * acinclude.m4 (BFD_BINARY_FOPEN): Import this function from
+ bfd/aclocal.m4.
+ * configure.in: Run BFD_BINARY_FOPEN.
+ * configure: Regenerate.
+ * as.h: Look at USE_BINARY_FOPEN to decide which fopen-*.h header
+ file to include.
+
+2006-08-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (md_assemble): Don't update
+ cpu_arch_isa_flags.
+
+2006-08-01 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (md_section_align): Check ELF-ness at runtime.
+
+2006-08-01 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (macro_build_lui): Fix comment formatting.
+ (md_apply_fix): Likewise. Unify handling of BFD_RELOC_RVA,
+ BFD_RELOC_32 and BFD_RELOC_16.
+ (s_align, s_cpload, s_cplocal, s_cprestore, s_mips_stab,
+ md_convert_frag, md_obj_end): Fix comment formatting.
+
+2006-07-31 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (md_apply_fix, tc_gen_reloc): Remove special
+ handling for BFD_RELOC_MIPS16_JMP.
+
+2006-07-24 Andreas Schwab <schwab@suse.de>
+
+ PR/2756
+ * read.c (read_a_source_file): Ignore unknown text after line
+ comment character. Fix misleading comment.
+
+2006-07-24 Ralk Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/all.texi, doc/as.texinfo, doc/c-arc.texi, doc/c-arm.texi,
+ doc/c-avr.texi, doc/c-bfin.texi, doc/c-i386.texi,
+ doc/c-i960.texi, doc/c-m32r.texi, doc/c-m68k.texi,
+ doc/c-mmix.texi, doc/c-pdp11.texi, doc/c-ppc.texi,
+ doc/c-tic54x.texi, doc/c-v850.texi, doc/c-xtensa.texi,
+ doc/c-z80.texi, doc/internals.texi: Fix some typos.
+
+2006-07-21 Nick Clifton <nickc@redhat.com>
+
+ * config/tc-sh.c (md_longopts): Add -EL and -EB for use by the
+ linker testsuite.
+
+2006-07-20 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * config/tc-mips.c (md_parse_option): Don't infer optimisation
+ options from debug options.
+
+2006-07-20 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (mips_fix_adjustable): Handle BFD_RELOC_MIPS16_JMP.
+ (tc_gen_reloc): Handle mips16 jumps to section symbol offsets.
+
+2006-07-19 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (insns): Fix rbit Arm opcode.
+
+2006-07-18 Paul Brook <paul@codesourcery.com>
+
+ * tc-arm.c (do_t_add_sub): Use addw/subw when source is PC.
+ (md_convert_frag): Use correct reloc for add_pc. Use
+ BFD_RELOC_ARM_T32_ADD_IMM for normal add/sum.
+ (md_apply_fix): Handle BFD_RELOC_ARM_T32_ADD_IMM.
+ (arm_force_relocation): Handle BFD_RELOC_ARM_T32_ADD_IMM.
+
+2006-07-17 Mat Hostetter <mat@lcs.mit.edu>
+
+ * symbols.c (report_op_error): Fix pasto. Don't use as_bad_where
+ when file and line unknown.
+
+2006-07-17 Thiemo Seufer <ths@mips.com>
+
+ * read.c (s_struct): Use IS_ELF.
+ * config/tc-mips.c (md_begin, mips16_mark_labels, mips_ip,
+ md_parse_option, s_change_sec, pic_need_relax, mips_fix_adjustable,
+ tc_gen_reloc, mips_frob_file_after_relocs, s_mips_end, s_mips_frame,
+ s_mips_mask): Likewise.
+
+2006-07-16 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+
+ * read.c (s_struct): Handle ELF section changing.
+ * config/tc-mips.c (s_align): Leave enabling auto-align to the
+ generic code.
+ (s_change_sec): Try section changing only if we output ELF.
+
+2006-07-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (cpu_arch): Remove Cpu086, CpuAthlon and
+ CpuAmdFam10.
+ (smallest_imm_type): Remove Cpu086.
+ (i386_target_format): Likewise.
+
+ * config/tc-i386.h: Remove Cpu086, CpuAthlon and CpuAmdFam10.
+ Update CpuXXX.
+
+2006-07-13 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+ Michael Meissner <michael.meissner@amd.com>
+
+ * config/tc-i386.h (PROCESSOR_AMDFAM10): New processor_type.
+ (CpuSSE4a, CpuABM, CpuAmdFam10): New Cpu directives.
+ * config/tc-i386.c (cpu_arch): Add support for AmdFam10
+ architecture.
+ (i386_align_code): Ditto.
+ (md_assemble_code): Add support for insertq/extrq instructions,
+ swapping as needed for intel syntax.
+ (swap_imm_operands): New function to swap immediate operands.
+ (swap_operands): Deal with 4 operand instructions.
+ (build_modrm_byte): Add support for insertq instruction.
+
+2006-07-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.h (Size64): Fix a typo in comment.
+
+2006-07-12 Nick Clifton <nickc@redhat.com>
+
+ * config/tc-sh.c (md_apply_fix): Do not allow the generic code in
+ fixup_segment() to repeat a range check on a value that has
+ already been checked here.
+
+2006-07-07 James E Wilson <wilson@specifix.com>
+
+ * config/tc-mips.c (mips_cpu_info_table): Add sb1a.
+
+2006-07-06 Mohammed Adnène Trojette <adn@diwi.org>
+ Nick Clifton <nickc@redhat.com>
+
+ PR binutils/2877
+ * doc/as.texi: Fix spelling typo: branchs => branches.
+ * doc/c-m68hc11.texi: Likewise.
+ * config/tc-m68hc11.c: Likewise.
+ Support old spelling of command line switch for backwards
+ compatibility.
+
+2006-07-04 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+
+ * config/tc-mips.c (s_is_linkonce): New function.
+ (mips16_mark_labels): Don't adjust mips16 symbol addresses for
+ weak, external, and linkonce symbols.
+ (pic_need_relax): Use s_is_linkonce.
+
+2006-06-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * doc/as.texinfo (Org): Remove space.
+ (P2align): Add "@var{abs-expr},".
+
+2006-06-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (cpu_arch_tune_set): New.
+ (cpu_arch_isa): Likewise.
+ (i386_align_code): Use xchg %ax,%ax for 2 byte nop. Optimize
+ nops with short or long nop sequences based on -march=/.arch
+ and -mtune=.
+ (set_cpu_arch): Set cpu_arch_isa. If cpu_arch_tune_set is 0,
+ set cpu_arch_tune and cpu_arch_tune_flags.
+ (md_parse_option): For -march=, set cpu_arch_isa and set
+ cpu_arch_tune and cpu_arch_tune_flags if cpu_arch_tune_set is
+ 0. Set cpu_arch_tune_set to 1 for -mtune=.
+ (i386_target_format): Don't set cpu_arch_tune.
+
+2006-06-23 Nigel Stephens <nigel@mips.com>
+
+ * config/tc-mips.c (nopic_need_relax): Handle -fdata-sections
+ generated .sbss.* and .gnu.linkonce.sb.*.
+
+2006-06-23 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+
+ * config/tc-mips.h (TC_SEGMENT_INFO_TYPE): Declare per-segment
+ label_list.
+ * config/tc-mips.c (label_list): Define per-segment label_list.
+ (mips_clear_insn_labels, mips_move_labels, mips16_mark_labels,
+ append_insn, s_align, s_cons, s_float_cons, s_gpword, s_gpdword,
+ mips_from_file_after_relocs, mips_define_label): Use per-segment
+ label_list.
+
+2006-06-22 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (ISA_SUPPORTS_MIPS16E): New macro.
+ (append_insn): Use it.
+ (md_apply_fix): Whitespace formatting.
+ (md_begin, append_insn, macro, macro2, mips16_immed, mips_align,
+ mips16_extended_frag): Remove register specifier.
+ (md_convert_frag): Likewise. Use TRUE ans FALSE instead of numeric
+ constants.
+
+2006-06-21 Mark Shinwell <shinwell@codesourcery.com>
+
+ * config/tc-arm.c (s_arm_unwind_save_vfp_armv6): New. Parse
+ a directive saving VFP registers for ARMv6 or later.
+ (s_arm_unwind_save): Add parameter arch_v6 and call
+ s_arm_unwind_save_vfp or s_arm_unwind_save_vfp_armv6 as
+ appropriate.
+ (md_pseudo_table): Add entry for new "vsave" directive.
+ * doc/c-arm.texi: Correct error in example for "save"
+ directive (fstmdf -> fstmdx). Also document "vsave" directive.
+
+2006-06-18 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+ Anatoly Sokolov <aesok@post.ru>
+
+ * config/tc-avr.c (mcu_types): Add support for atmega165p, atmega169p
+ and atmega644p devices. Rename atmega164/atmega324 devices to
+ atmega164p/atmega324p.
+ * doc/c-avr.texi: Document new mcu and arch options.
+
+2006-06-17 Nick Clifton <nickc@redhat.com>
+
+ * config/tc-arm.c (enum parse_operand_result): Move outside of
+ #ifdef OBJ_ELF so that non-ELF targeted ARM ports can build.
+
+2006-06-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.h (processor_type): New.
+ (arch_entry): Add type.
+
+ * config/tc-i386.c (cpu_arch_tune): New.
+ (cpu_arch_tune_flags): Likewise.
+ (cpu_arch_isa_flags): Likewise.
+ (cpu_arch): Updated.
+ (set_cpu_arch): Also update cpu_arch_isa_flags.
+ (md_assemble): Update cpu_arch_isa_flags.
+ (OPTION_MARCH): New.
+ (OPTION_MTUNE): Likewise.
+ (md_longopts): Add -march= and -mtune=.
+ (md_parse_option): Support -march= and -mtune=.
+ (md_show_usage): Add -march=CPU/-mtune=CPU.
+ (i386_target_format): Also update cpu_arch_isa_flags,
+ cpu_arch_tune and cpu_arch_tune_flags.
+
+ * doc/as.texinfo: Add -march=CPU/-mtune=CPU.
+
+ * doc/c-i386.texi: Document -march=CPU/-mtune=CPU.
+
+2006-06-15 Mark Shinwell <shinwell@codesourcery.com>
+
+ * config/tc-arm.c (enum parse_operand_result): New.
+ (struct group_reloc_table_entry): New.
+ (enum group_reloc_type): New.
+ (group_reloc_table): New array.
+ (find_group_reloc_table_entry): New function.
+ (parse_shifter_operand_group_reloc): New function.
+ (parse_address_main): New function, incorporating code
+ from the old parse_address function. To be used via...
+ (parse_address): wrapper for parse_address_main; and
+ (parse_address_group_reloc): new function, likewise.
+ (enum operand_parse_code): New codes OP_SHG, OP_ADDRGLDR,
+ OP_ADDRGLDRS, OP_ADDRGLDC.
+ (parse_operands): Support for these new operand codes.
+ New macro po_misc_or_fail_no_backtrack.
+ (encode_arm_cp_address): Preserve group relocations.
+ (insns): Modify to use the above operand codes where group
+ relocations are permitted.
+ (md_apply_fix): Handle the group relocations
+ ALU_PC_G0_NC through LDC_SB_G2.
+ (tc_gen_reloc): Likewise.
+ (arm_force_relocation): Leave group relocations for the linker.
+ (arm_fix_adjustable): Likewise.
+
+2006-06-15 Julian Brown <julian@codesourcery.com>
+
+ * config/tc-arm.c (do_vfp_nsyn_ldr_str): Remove, fold into...
+ (do_neon_ldr_str): Always defer to VFP encoding routines, which handle
+ relocs properly.
+
+2006-06-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (process_suffix): Don't add rex64 for
+ "xchg %rax,%rax".
+
+2006-06-09 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (mips_ip): Maintain argument count.
+
+2006-06-09 Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-iq2000.c: Include sb.h.
+
+2006-06-08 Nigel Stephens <nigel@mips.com>
+
+ * config/tc-mips.c (mips_pseudo_table): Add "origin" and "repeat"
+ aliases for better compatibility with SGI tools.
+
+2006-06-08 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.in (BFDLIB, BFDVER_H, ALL_OBJ_DEPS): Delete.
+ * Makefile.am (GASLIBS): Expand @BFDLIB@.
+ (BFDVER_H): Delete.
+ (OBJS): Expand @ALL_OBJ_DEPS@. Depend on all fopen-*.h variants.
+ (obj-aout.o): Depend on $(DEP_@target_get_type@_aout)
+ (obj-coff.o, obj-ecoff.o, obj-elf.o): Similarly.
+ Run "make dep-am".
+ * dep-in.sed: Don't substitute bfdver.h. Do remove symcat.h.
+ * Makefile.in: Regenerate.
+ * doc/Makefile.in: Regenerate.
+ * configure: Regenerate.
+
+2006-06-07 Joseph S. Myers <joseph@codesourcery.com>
+
+ * po/Make-in (pdf, ps): New dummy targets.
+
+2006-06-07 Julian Brown <julian@codesourcery.com>
+
+ * config/tc-arm.c (stdarg.h): include.
+ (arm_it): Add uncond_value field. Add isvec and issingle to operand
+ array.
+ (arm_reg_type): Add REG_TYPE_VFSD (single or double VFP reg) and
+ REG_TYPE_NSDQ (single, double or quad vector reg).
+ (reg_expected_msgs): Update.
+ (BAD_FPU): Add macro for unsupported FPU instruction error.
+ (parse_neon_type): Support 'd' as an alias for .f64.
+ (parse_typed_reg_or_scalar): Support REG_TYPE_VFSD, REG_TYPE_NSDQ
+ sets of registers.
+ (parse_vfp_reg_list): Don't update first arg on error.
+ (parse_neon_mov): Support extra syntax for VFP moves.
+ (operand_parse_code): Add OP_RVSD, OP_RNSDQ, OP_VRSDLST, OP_RVSD_IO,
+ OP_RNSDQ_RNSC, OP_RVC_PSR, OP_APSR_RR, OP_oRNSDQ.
+ (parse_operands): Support isvec, issingle operands fields, new parse
+ codes above.
+ (do_vfp_nsyn_mrs, do_vfp_nsyn_msr): New functions. Support VFP mrs,
+ msr variants.
+ (do_mrs, do_msr, do_t_mrs, do_t_msr): Add support for above.
+ (NEON_ENC_TAB): Add vnmul, vnmla, vnmls, vcmp, vcmpz, vcmpe, vcmpez.
+ (NEON_ENC_SINGLE, NEON_ENC_DOUBLE): Define macros.
+ (NEON_SHAPE_DEF): New macro. Define table of possible instruction
+ shapes.
+ (neon_shape): Redefine in terms of above.
+ (neon_shape_class): New enumeration, table of shape classes.
+ (neon_shape_el): New enumeration. One element of a shape.
+ (neon_shape_el_size): Register widths of above, where appropriate.
+ (neon_shape_info): New struct. Info for shape table.
+ (neon_shape_tab): New array.
+ (neon_type_mask): Add N_F64, N_VFP. Update N_MAX_NONSPECIAL.
+ (neon_check_shape): Rewrite as...
+ (neon_select_shape): New function to classify instruction shapes,
+ driven by new table neon_shape_tab array.
+ (neon_quad): New function. Return 1 if shape should set Q flag in
+ instructions (or equivalent), 0 otherwise.
+ (type_chk_of_el_type): Support F64.
+ (el_type_of_type_chk): Likewise.
+ (neon_check_type): Add support for VFP type checking (VFP data
+ elements fill their containing registers).
+ (do_vfp_cond_or_thumb): Fill in condition field in ARM mode, or 0xE
+ in thumb mode for VFP instructions.
+ (do_vfp_nsyn_opcode): New function. Look up the opcode in argument,
+ and encode the current instruction as if it were that opcode.
+ (try_vfp_nsyn): New. If this looks like a VFP instruction with ARGS
+ arguments, call function in PFN.
+ (do_vfp_nsyn_add_sub, do_vfp_nsyn_mla_mls, do_vfp_nsyn_mul)
+ (do_vfp_nsyn_abs_neg, do_vfp_nsyn_ldm_stm, do_vfp_nsyn_ldr_str)
+ (do_vfp_nsyn_sqrt, do_vfp_nsyn_div, do_vfp_nsyn_nmul)
+ (do_vfp_nsyn_cmp, nsyn_insert_sp, do_vfp_nsyn_push)
+ (do_vfp_nsyn_pop, do_vfp_nsyn_cvt, do_vfp_nsyn_cvtz): New functions.
+ Redirect Neon-syntax VFP instructions to VFP instruction handlers.
+ (do_neon_dyadic_i_su, do_neon_dyadic_i64_su, do_neon_shl_imm)
+ (do_neon_qshl_imm, do_neon_logic, do_neon_bitfield)
+ (neon_dyadic_misc, neon_compare, do_neon_tst, do_neon_qdmulh)
+ (do_neon_fcmp_absolute, do_neon_step, do_neon_sli, do_neon_sri)
+ (do_neon_qshlu_imm, neon_move_immediate, do_neon_mvn, do_neon_ext)
+ (do_neon_rev, do_neon_dup, do_neon_rshift_round_imm, do_neon_trn)
+ (do_neon_zip_uzp, do_neon_sat_abs_neg, do_neon_pair_long)
+ (do_neon_recip_est, do_neon_cls, do_neon_clz, do_neon_cnt)
+ (do_neon_swp): Use neon_select_shape not neon_check_shape. Use
+ neon_quad.
+ (vfp_or_neon_is_neon): New function. Call if a mnemonic shared
+ between VFP and Neon turns out to belong to Neon. Perform
+ architecture check and fill in condition field if appropriate.
+ (do_neon_addsub_if_i, do_neon_mac_maybe_scalar, do_neon_abs_neg)
+ (do_neon_cvt): Add support for VFP variants of instructions.
+ (neon_cvt_flavour): Extend to cover VFP conversions.
+ (do_neon_mov): Rewrite to use neon_select_shape. Add support for VFP
+ vmov variants.
+ (do_neon_ldr_str): Handle single-precision VFP load/store.
+ (do_neon_ld_st_interleave, do_neon_ld_st_lane, do_neon_ld_dup): Use
+ NS_NULL not NS_IGNORE.
+ (opcode_tag): Add OT_csuffixF for operands which either take a
+ conditional suffix, or have 0xF in the condition field.
+ (md_assemble): Add support for OT_csuffixF.
+ (NCE): Replace macro with...
+ (NCE_tag, NCE, NCEF): New macros.
+ (nCE): Replace macro with...
+ (nCE_tag, nCE, nCEF): New macros.
+ (insns): Add support for VFP insns or VFP versions of insns msr,
+ mrs, vsqrt, vdiv, vnmul, vnmla, vnmls, vcmp, vcmpe, vpush, vpop,
+ vcvtz, vmul, vmla, vmls, vadd, vsub, vabs, vneg, vldm, vldmia,
+ vldbdb, vstm, vstmia, vstmdb, vldr, vstr, vcvt, vmov. Group shared
+ VFP/Neon insns together.
+
+2006-06-07 Alan Modra <amodra@bigpond.net.au>
+ Ladislav Michl <ladis@linux-mips.org>
+
+ * app.c: Don't include headers already included by as.h.
+ * as.c: Likewise.
+ * atof-generic.c: Likewise.
+ * cgen.c: Likewise.
+ * dwarf2dbg.c: Likewise.
+ * expr.c: Likewise.
+ * input-file.c: Likewise.
+ * input-scrub.c: Likewise.
+ * macro.c: Likewise.
+ * output-file.c: Likewise.
+ * read.c: Likewise.
+ * sb.c: Likewise.
+ * config/bfin-lex.l: Likewise.
+ * config/obj-coff.h: Likewise.
+ * config/obj-elf.h: Likewise.
+ * config/obj-som.h: Likewise.
+ * config/tc-arc.c: Likewise.
+ * config/tc-arm.c: Likewise.
+ * config/tc-avr.c: Likewise.
+ * config/tc-bfin.c: Likewise.
+ * config/tc-cris.c: Likewise.
+ * config/tc-d10v.c: Likewise.
+ * config/tc-d30v.c: Likewise.
+ * config/tc-dlx.h: Likewise.
+ * config/tc-fr30.c: Likewise.
+ * config/tc-frv.c: Likewise.
+ * config/tc-h8300.c: Likewise.
+ * config/tc-hppa.c: Likewise.
+ * config/tc-i370.c: Likewise.
+ * config/tc-i860.c: Likewise.
+ * config/tc-i960.c: Likewise.
+ * config/tc-ip2k.c: Likewise.
+ * config/tc-iq2000.c: Likewise.
+ * config/tc-m32c.c: Likewise.
+ * config/tc-m32r.c: Likewise.
+ * config/tc-maxq.c: Likewise.
+ * config/tc-mcore.c: Likewise.
+ * config/tc-mips.c: Likewise.
+ * config/tc-mmix.c: Likewise.
+ * config/tc-mn10200.c: Likewise.
+ * config/tc-mn10300.c: Likewise.
+ * config/tc-msp430.c: Likewise.
+ * config/tc-mt.c: Likewise.
+ * config/tc-ns32k.c: Likewise.
+ * config/tc-openrisc.c: Likewise.
+ * config/tc-ppc.c: Likewise.
+ * config/tc-s390.c: Likewise.
+ * config/tc-sh.c: Likewise.
+ * config/tc-sh64.c: Likewise.
+ * config/tc-sparc.c: Likewise.
+ * config/tc-tic30.c: Likewise.
+ * config/tc-tic4x.c: Likewise.
+ * config/tc-tic54x.c: Likewise.
+ * config/tc-v850.c: Likewise.
+ * config/tc-vax.c: Likewise.
+ * config/tc-xc16x.c: Likewise.
+ * config/tc-xstormy16.c: Likewise.
+ * config/tc-xtensa.c: Likewise.
+ * config/tc-z80.c: Likewise.
+ * config/tc-z8k.c: Likewise.
+ * macro.h: Don't include sb.h or ansidecl.h.
+ * sb.h: Don't include stdio.h or ansidecl.h.
+ * cond.c: Include sb.h.
+ * itbl-lex.l: Include as.h instead of other system headers.
+ * itbl-parse.y: Likewise.
+ * itbl-ops.c: Similarly.
+ * itbl-ops.h: Don't include as.h or ansidecl.h.
+ * config/bfin-defs.h: Don't include bfd.h or as.h.
+ * config/bfin-parse.y: Include as.h instead of other system headers.
+
+2006-06-06 Ben Elliston <bje@au.ibm.com>
+ Anton Blanchard <anton@samba.org>
+
+ * config/tc-ppc.c (parse_cpu): Handle "-mpower6".
+ (md_show_usage): Document it.
+ (ppc_setup_opcodes): Test power6 opcode flag bits.
+ * doc/c-ppc.texi (PowerPC-Opts): Document "-mpower6".
+
+2006-06-06 Thiemo Seufer <ths@mips.com>
+ Chao-ying Fu <fu@mips.com>
+
+ * config/tc-mips.c (ISA_SUPPORTS_DSP64): New macro.
+ (CPU_HAS_MIPS3D, CPU_HAS_MDMX, CPU_HAS_DSP, CPU_HAS_MT): Delete.
+ (macro_build): Update comment.
+ (mips_ip): Allow DSP64 instructions for MIPS64R2.
+ (mips_after_parse_args): Remove uses of CPU_HAS_MIPS3D and
+ CPU_HAS_MDMX.
+ (mips_cpu_info): Fix formatting. Add MIPS_CPU_ASE_MIPS3D and
+ MIPS_CPU_ASE_MDMX flags for sb1.
+
+2006-06-05 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (macro_build): Use INSERT_OPERAND wherew
+ appropriate.
+ (mips16_macro_build): Use MIPS16_INSERT_OPERAND where appropriate.
+ (mips_ip): Make overflowed/underflowed constant arguments in DSP
+ and MT instructions a fatal error. Use INSERT_OPERAND where
+ appropriate. Improve warnings for break and wait code overflows.
+ Use symbolic constant of OP_MASK_COPZ.
+ (mips16_ip): Use MIPS16_INSERT_OPERAND where appropriate.
+
+2006-06-05 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/Make-in (top_builddir): Define.
+
+2006-06-02 Joseph S. Myers <joseph@codesourcery.com>
+
+ * doc/Makefile.am (TEXI2DVI): Define.
+ * doc/Makefile.in: Regenerate.
+ * doc/c-arc.texi: Fix typo.
+
+2006-06-01 Alan Modra <amodra@bigpond.net.au>
+
+ * config/obj-ieee.c: Delete.
+ * config/obj-ieee.h: Delete.
+ * Makefile.am (OBJ_FORMATS): Remove ieee.
+ (OBJ_FORMAT_CFILES, OBJ_FORMAT_HFILES): Similarly.
+ (obj-ieee.o): Remove rule.
+ * Makefile.in: Regenerate.
+ * configure.in (atof): Remove tahoe.
+ (OBJ_MAYBE_IEEE): Don't define.
+ * configure: Regenerate.
+ * config.in: Regenerate.
+ * doc/Makefile.in: Regenerate.
+ * po/POTFILES.in: Regenerate.
+
+2006-05-31 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am: Replace INTLLIBS and INTLDEPS with LIBINTL
+ and LIBINTL_DEP everywhere.
+ (INTLLIBS): Remove.
+ (INCLUDES, DEP_INCLUDES): Use @INCINTL@.
+ * acinclude.m4: Include new gettext macros.
+ * configure.in: Use ZW_GNU_GETTEXT_SISTER_DIR and AM_PO_SUBDIRS.
+ Remove local code for po/Makefile.
+ * Makefile.in, configure, doc/Makefile.in: Regenerated.
+
+2006-05-30 Nick Clifton <nickc@redhat.com>
+
+ * po/es.po: Updated Spanish translation.
+
+2006-05-06 Denis Chertykov <denisc@overta.ru>
+
+ * doc/c-avr.texi: New file.
+ * doc/Makefile.am (CPU_DOCS): Add c-avr.texi
+ * doc/all.texi: Set AVR
+ * doc/as.texinfo: Include c-avr.texi
+
+2006-05-28 Jie Zhang <jie.zhang@analog.com>
+
+ * config/bfin-parse.y (check_macfunc): Loose the condition of
+ calling check_multiply_halfregs ().
+
+2006-05-25 Jie Zhang <jie.zhang@analog.com>
+
+ * config/bfin-parse.y (asm_1): Better check and deal with
+ vector and scalar Multiply 16-Bit Operands instructions.
+
+2006-05-24 Nick Clifton <nickc@redhat.com>
+
+ * config/tc-hppa.c: Convert to ISO C90 format.
+ * config/tc-hppa.h: Likewise.
+
+2006-05-24 Carlos O'Donell <carlos@systemhalted.org>
+ Randolph Chung <randolph@tausq.org>
+
+ * config/tc-hppa.c (is_tls_gdidx, is_tls_ldidx, is_tls_dtpoff,
+ is_tls_ieoff, is_tls_leoff): Define.
+ (fix_new_hppa): Handle TLS.
+ (cons_fix_new_hppa): Likewise.
+ (pa_ip): Likewise.
+ (md_apply_fix): Handle TLS relocs.
+ * config/tc-hppa.h (hppa_fix_adjustable): Handle TLS.
+
+2006-05-24 Bjoern Haase <bjoern.m.haase@web.de>
+
+ * config/tc-avr.c: Add new cpu targets avr6, avr2560 and avr2561.
+
+2006-05-23 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ [ gas/ChangeLog ]
+ * config/tc-mips.c (ISA_SUPPORTS_SMARTMIPS): Rename.
+ (ISA_SUPPORTS_DSP_ASE, ISA_SUPPORTS_MT_ASE, ISA_HAS_64BIT_FPRS,
+ ISA_HAS_MXHC1): New macros.
+ (HAVE_32BIT_FPRS): Use ISA_HAS_64BIT_FPRS instead of
+ ISA_HAS_64BIT_REGS. Formatting fixes. Improved comments.
+ (mips_cpu_info): Change to use combined ASE/IS_ISA flag.
+ (MIPS_CPU_IS_ISA, MIPS_CPU_ASE_SMARTMIPS, MIPS_CPU_ASE_DSP,
+ MIPS_CPU_ASE_MT, MIPS_CPU_ASE_MIPS3D, MIPS_CPU_ASE_MDMX): New defines.
+ (mips_after_parse_args): Change default handling of float register
+ size to account for 32bit code with 64bit FP. Better sanity checking
+ of ISA/ASE/ABI option combinations.
+ (s_mipsset): Support switching of GPR and FPR sizes via
+ .set {g,f}p={32,64,default}. Better sanity checking for .set ASE
+ options.
+ (mips_elf_final_processing): We should record the use of 64bit FP
+ registers in 32bit code but we don't, because ELF header flags are
+ a scarce ressource.
+ (mips_cpu_info_table): Add ASE flags for CPUs with mandatory ASE
+ extensions. Add 4ksc, 4kec, 4kem, 4kep, 4ksd, m4kp, 24kec, 24kef,
+ 24kex, 34kc, 34kf, 34kx, 25kf CPU definitions.
+ (mips_cpu_info_from_isa): Use MIPS_CPU_IS_ISA.
+ * doc/c-mips.texi: Document .set {g,f}p={32,64,default}. Document
+ missing -march options. Document .set arch=CPU. Move .set smartmips
+ to ASE page. Use @code for .set FOO examples.
+
+2006-05-23 Jie Zhang <jie.zhang@analog.com>
+
+ * config/tc-bfin.c (bfin_start_line_hook): Bump line counters
+ if needed.
+
+2006-05-23 Jie Zhang <jie.zhang@analog.com>
+
+ * config/bfin-defs.h (bfin_equals): Remove declaration.
+ * config/bfin-parse.y (asm_1): Remove "expr ASSIGN expr".
+ * config/tc-bfin.c (bfin_name_is_register): Remove.
+ (bfin_equals): Remove.
+ * config/tc-bfin.h (TC_EQUAL_IN_INSN): Redefine as 1.
+ (bfin_name_is_register): Remove declaration.
+
+2006-05-19 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * config/tc-mipc.c (ISA_HAS_ODD_SINGLE_FPR): New define.
+ (mips_oddfpreg_ok): New function.
+ (mips_ip): Use it.
+
+2006-05-19 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+
+ * config/tc-mips.h (tc_mips_regname_to_dw2regnum): Declare.
+ * config/tc-mipc.c (ABI_NEEDS_64BIT_REGS, ISA_HAS_64BIT_REGS,
+ ISA_HAS_DROR, ISA_HAS_ROR): Reformat.
+ (regname, RTYPE_MASK, RTYPE_NUM, RTYPE_FPU, RTYPE_FCC, RTYPE_VEC,
+ RTYPE_GP, RTYPE_CP0, RTYPE_PC, RTYPE_ACC, RTYPE_CCC, RNUM_MASK,
+ RWARN, GENERIC_REGISTER_NUMBERS, FPU_REGISTER_NAMES,
+ FPU_CONDITION_CODE_NAMES, COPROC_CONDITION_CODE_NAMES,
+ N32N64_SYMBOLIC_REGISTER_NAMES, O32_SYMBOLIC_REGISTER_NAMES,
+ SYMBOLIC_REGISTER_NAMES, MIPS16_SPECIAL_REGISTER_NAMES,
+ MDMX_VECTOR_REGISTER_NAMES, MIPS_DSP_ACCUMULATOR_NAMES, reg_names,
+ reg_names_o32, reg_names_n32n64): Define register classes.
+ (reg_lookup): New function, use register classes.
+ (md_begin): Reserve register names in the symbol table. Simplify
+ OBJ_ELF defines.
+ (mips_ip): Fix comment formatting. Handle symbolic COP0 registers.
+ Use reg_lookup.
+ (mips16_ip): Use reg_lookup.
+ (tc_get_register): Likewise.
+ (tc_mips_regname_to_dw2regnum): New function.
+
+2006-05-19 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-arm.c, config/tc-arm.h (tc_arm_regname_to_dw2regnum):
+ Un-constify string argument.
+ * config/tc-i386.c, config/tc-i386.h (tc_x86_regname_to_dw2regnum):
+ Likewise.
+ * config/tc-m68k.c, config/tc-m68k.h (tc_m68k_regname_to_dw2regnum):
+ Likewise.
+ * config/tc-ppc.c, config/tc-ppc.h (tc_ppc_regname_to_dw2regnum):
+ Likewise.
+ * config/tc-s390.c, config/tc-s390.h (tc_s390_regname_to_dw2regnum):
+ Likewise.
+ * config/tc-sh.c, config/tc-sh.h (sh_regname_to_dw2regnum):
+ Likewise.
+ * config/tc-sparc.c, config/tc-sparc.h (sparc_regname_to_dw2regnum):
+ Likewise.
+
+2006-05-19 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gas/config/tc-m68k.c (m68k_init_arch): Move checking of
+ cfloat/m68881 to correct architecture before using it.
+
+2006-05-16 Bjoern Haase <bjoern.m.haase@web.de>
+
+ * config/tc-avr.h (TC_VALIDATE_FIX): Allow fixups for immediate
+ constant values.
+
+2006-05-15 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (arm_adjust_symtab): Use
+ bfd_is_arm_special_symbol_name.
+
+2006-05-15 Bob Wilson <bob.wilson@acm.org>
+
+ * config/tc-xtensa.c (is_direct_call_opcode, is_branch_jmp_to_next,
+ xg_assemble_vliw_tokens, xtensa_mark_narrow_branches,
+ xtensa_fix_short_loop_frags, is_local_forward_loop, relax_frag_immed):
+ Handle errors from calls to xtensa_opcode_is_* functions.
+
+2006-05-14 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (macro_build): Test for currently active
+ mips16 option.
+ (mips16_ip): Reject invalid opcodes.
+
+2006-05-11 Carlos O'Donell <carlos@codesourcery.com>
+
+ * doc/as.texinfo: Rename "Index" to "AS Index",
+ and "ABORT" to "ABORT (COFF)".
+
+2006-05-11 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (parse_half): New function.
+ (operand_parse_code): Remove OP_Iffff. Add OP_HALF.
+ (parse_operands): Ditto.
+ (do_mov16): Reject invalid relocations.
+ (do_t_mov16): Ditto. Use Thumb reloc numbers.
+ (insns): Replace Iffff with HALF.
+ (md_apply_fix): Add MOVW and MOVT relocs.
+ (tc_gen_reloc): Ditto.
+ * doc/c-arm.texi: Document relocation operators
+
+2006-05-11 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (arm_fix_adjustable): Return 0 for function symbols.
+
+2006-05-11 Thiemo Seufer <ths@mips.com>
+
+ * config/tc-mips.c (append_insn): Don't check the range of j or
+ jal addresses.
+
+2006-05-11 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * config/tc-arm.c (md_pcrel_from_section): Force a bias for
+ relocs against external symbols for WinCE targets.
+ (md_apply_fix): Likewise.
+
+2006-05-09 David Ung <davidu@mips.com>
+
+ * config/tc-mips.c (append_insn): Only warn about an out-of-range
+ j or jal address.
+
+2006-05-09 Nick Clifton <nickc@redhat.com>
+
+ * config/tc-arm.c (arm_fix_adjustable): For COFF, convert fixups
+ against symbols which are not going to be placed into the symbol
+ table.
+
+2006-05-09 Ben Elliston <bje@au.ibm.com>
+
+ * expr.c (operand): Remove `if (0 && ..)' statement and
+ subsequently unused target_op label. Collapse `if (1 || ..)'
+ statement.
+ * app.c (do_scrub_chars): Remove unused case 0, as it is handled
+ separately above the switch.
+
+2006-05-08 Nick Clifton <nickc@redhat.com>
+
+ PR gas/2623
+ * config/tc-msp430.c (line_separator_character): Define as |.
+
+2006-05-08 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+ David Ung <davidu@mips.com>
+
+ * config/tc-mips.c (mips_set_options): Add ase_smartmips flag.
+ (mips_opts): Likewise.
+ (file_ase_smartmips): New variable.
+ (ISA_HAS_ROR): SmartMIPS implements rotate instructions.
+ (macro_build): Handle SmartMIPS instructions.
+ (mips_ip): Likewise.
+ (md_longopts): Add argument handling for smartmips.
+ (md_parse_options, mips_after_parse_args): Likewise.
+ (s_mipsset): Add .set smartmips support.
+ (md_show_usage): Document -msmartmips/-mno-smartmips.
+ * doc/as.texinfo: Document -msmartmips/-mno-smartmips and
+ .set smartmips.
+ * doc/c-mips.texi: Likewise.
+
+2006-05-08 Alan Modra <amodra@bigpond.net.au>
+
+ * write.c (relax_segment): Add pass count arg. Don't error on
+ negative org/space on first two passes.
+ (relax_seg_info): New struct.
+ (relax_seg, write_object_file): Adjust.
+ * write.h (relax_segment): Update prototype.
+
+2006-05-05 Julian Brown <julian@codesourcery.com>
+
+ * config/tc-arm.c (parse_vfp_reg_list): Improve register bounds
+ checking.
+ (do_neon_mov): Enable several VMOV variants for VFP. Add suitable
+ architecture version checks.
+ (insns): Allow overlapping instructions to be used in VFP mode.
+
+2006-05-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/2598
+ * config/obj-elf.c (obj_elf_change_section): Allow user
+ specified SHF_ALPHA_GPREL.
+
+2006-05-05 Bjoern Haase <bjoern.m.haase@web.de>
+
+ * gas/config/tc-avr.h (TC_VALIDATE_FIX): Define. Disable fixups
+ for PMEM related expressions.
+
+2006-05-05 Nick Clifton <nickc@redhat.com>
+
+ PR gas/2582
+ * dwarf2dbg.c (INSERT_DIR_SEPARATOR): New macro. Handles the
+ insertion of a directory separator character into a string at a
+ given offset. Uses heuristics to decide when to use a backslash
+ character rather than a forward-slash character.
+ (dwarf2_directive_loc): Use the macro.
+ (out_debug_info): Likewise.
+
+2006-05-05 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+
+ * config/tc-mips.c (macro_build): Add case 'k' to handle cache
+ instruction.
+ (macro): Add new case M_CACHE_AB.
+
+2006-05-04 Kazu Hirata <kazu@codesourcery.com>
+
+ * config/tc-arm.c (opcode_tag): Add OT_cinfix3_deprecated.
+ (opcode_lookup): Issue a warning for opcode with
+ OT_cinfix3_deprecated. Otherwise treat OT_cinfix3_deprecated
+ identical to OT_cinfix3.
+ (TxC3w, TC3w, tC3w): New.
+ (insns): Use tC3w and TC3w for comparison instructions with
+ 's' suffix.
+
+2006-05-04 Alan Modra <amodra@bigpond.net.au>
+
+ * subsegs.h (struct frchain): Delete frch_seg.
+ (frchain_root): Delete.
+ (seg_info): Define as macro.
+ * subsegs.c (frchain_root): Delete.
+ (abs_seg_info, und_seg_info, absolute_frchain): Delete.
+ (subsegs_begin, subseg_change): Adjust for above.
+ (subseg_set_rest): Likewise. Add new frchain structs to seginfo
+ rather than to one big list.
+ (subseg_get): Don't special case abs, und sections.
+ (subseg_new, subseg_force_new): Don't set frchainP here.
+ (seg_info): Delete.
+ (subsegs_print_statistics): Adjust frag chain control list traversal.
+ * debug.c (dmp_frags): Likewise.
+ * dwarf2dbg.c (first_frag_for_seg): Don't start looking for frag
+ at frchain_root. Make use of known frchain ordering.
+ (last_frag_for_seg): Likewise.
+ (get_frag_fix): Likewise. Add seg param.
+ (process_entries, out_debug_aranges): Adjust get_frag_fix calls.
+ * write.c (chain_frchains_together_1): Adjust for struct frchain.
+ (SUB_SEGMENT_ALIGN): Likewise.
+ (subsegs_finish): Adjust frchain list traversal.
+ * config/tc-xtensa.c (xtensa_cleanup_align_frags): Likewise.
+ (xtensa_fix_target_frags, xtensa_mark_narrow_branches): Likewise.
+ (xtensa_mark_zcl_first_insns, xtensa_fix_a0_b_retw_frags): Likewise.
+ (xtensa_fix_b_j_loop_end_frags): Likewise.
+ (xtensa_fix_close_loop_end_frags): Likewise.
+ (xtensa_fix_short_loop_frags, xtensa_sanity_check): Likewise.
+ (retrieve_segment_info): Delete frch_seg initialisation.
+
+2006-05-03 Alan Modra <amodra@bigpond.net.au>
+
+ * subsegs.c (subseg_get): Don't call obj_sec_set_private_data.
+ * config/obj-elf.h (obj_sec_set_private_data): Delete.
+ * config/tc-hppa.c (tc_gen_reloc): Don't use bfd_abs_symbol.
+ * config/tc-mn10300.c (tc_gen_reloc): Likewise.
+
+2006-05-02 Joseph Myers <joseph@codesourcery.com>
+
+ * config/tc-arm.c (do_iwmmxt_wldstbh): Don't multiply offset by 4
+ here.
+ (md_apply_fix3): Multiply offset by 4 here for
+ BFD_RELOC_ARM_CP_OFF_IMM_S2 and BFD_RELOC_ARM_T32_CP_OFF_IMM_S2.
+
+2006-05-02 H.J. Lu <hongjiu.lu@intel.com>
+ Jan Beulich <jbeulich@novell.com>
+
+ * config/tc-i386.c (output_invalid_buf): Change size for
+ unsigned char.
+ * config/tc-tic30.c (output_invalid_buf): Likewise.
+
+ * config/tc-i386.c (output_invalid): Cast none-ascii char to
+ unsigned char.
+ * config/tc-tic30.c (output_invalid): Likewise.
+
+2006-05-02 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * doc/Makefile.am (AM_MAKEINFOFLAGS): New.
+ (TEXI2POD): Use AM_MAKEINFOFLAGS.
+ (asconfig.texi): Don't set top_srcdir.
+ * doc/as.texinfo: Don't use top_srcdir.
+ * aclocal.m4, Makefile.in, doc/Makefile.in: Regenerated.
+
+2006-05-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (output_invalid_buf): Change size to 16.
+ * config/tc-tic30.c (output_invalid_buf): Likewise.
+
+ * config/tc-i386.c (output_invalid): Use snprintf instead of
+ sprintf.
+ * config/tc-ia64.c (declare_register_set): Likewise.
+ (emit_one_bundle): Likewise.
+ (check_dependencies): Likewise.
+ * config/tc-tic30.c (output_invalid): Likewise.
+
+2006-05-02 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (arm_optimize_expr): New function.
+ * config/tc-arm.h (md_optimize_expr): Define
+ (arm_optimize_expr): Add prototype.
+ (TC_FORCE_RELOCATION_SUB_SAME): Define.
+
+2006-05-02 Ben Elliston <bje@au.ibm.com>
+
+ * config/obj-elf.h (ELF_TARGET_SYMBOL_FIELDS): Make single bit
+ field unsigned.
+
+ * sb.h (sb_list_vector): Move to sb.c.
+ * sb.c (free_list): Use type of sb_list_vector directly.
+ (sb_build): Fix off-by-one error in assertion about `size'.
+
+2006-05-01 Ben Elliston <bje@au.ibm.com>
+
+ * listing.c (listing_listing): Remove useless loop.
+ * macro.c (macro_expand): Remove is_positional local variable.
+ * read.c (s_comm_internal): Simplify `if' condition 1 || x -> 1
+ and simplify surrounding expressions, where possible.
+ (assign_symbol): Likewise.
+ (s_weakref): Likewise.
+ * symbols.c (colon): Likewise.
+
+2006-05-01 James Lemke <jwlemke@wasabisystems.com>
+
+ * subsegs.c (subseg_set_rest): Always set seginfp->frchainP if NULL.
+
+2006-04-30 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+
+ * config/tc-mips.c (validate_mips_insn): Handling of udi cases.
+ (mips_immed): New table that records various handling of udi
+ instruction patterns.
+ (mips_ip): Adds udi handling.
+
+2006-04-28 Alan Modra <amodra@bigpond.net.au>
+
+ * dwarf2dbg.c (get_line_subseg): Attach new struct line_seg to end
+ of list rather than beginning.
+
+2006-04-26 Julian Brown <julian@codesourcery.com>
+
+ * gas/config/tc-arm.c (neon_is_quarter_float): Move, and rename to...
+ (is_quarter_float): Rename from above. Simplify slightly.
+ (parse_qfloat_immediate): Parse a "quarter precision" floating-point
+ number.
+ (parse_neon_mov): Parse floating-point constants.
+ (neon_qfloat_bits): Fix encoding.
+ (neon_cmode_for_move_imm): Tweak to use floating-point encoding in
+ preference to integer encoding when using the F32 type.
+
+2006-04-26 Julian Brown <julian@codesourcery.com>
+
+ * config/tc-arm.c (neon_el_type): Make NT_invtype be the zero (so
+ zero-initialising structures containing it will lead to invalid types).
+ (arm_it): Add vectype to each operand.
+ (NTA_HASTYPE, NTA_HASINDEX): Constants used in neon_typed_alias
+ defined field.
+ (neon_typed_alias): New structure. Extra information for typed
+ register aliases.
+ (reg_entry): Add neon type info field.
+ (arm_reg_parse): Remove RTYPE argument (revert to previous arguments).
+ Break out alternative syntax for coprocessor registers, etc. into...
+ (arm_reg_alt_syntax): New function. Alternate syntax handling broken
+ out from arm_reg_parse.
+ (parse_neon_type): Move. Return SUCCESS/FAIL.
+ (first_error): New function. Call to ensure first error which occurs is
+ reported.
+ (parse_neon_operand_type): Parse exactly one type.
+ (NEON_ALL_LANES, NEON_INTERLEAVE_LANES): Move.
+ (parse_typed_reg_or_scalar): New function. Handle core of both
+ arm_typed_reg_parse and parse_scalar.
+ (arm_typed_reg_parse): Parse a register with an optional type.
+ (NEON_SCALAR_REG, NEON_SCALAR_INDEX): Extract parts of parse_scalar
+ result.
+ (parse_scalar): Parse a Neon scalar with optional type.
+ (parse_reg_list): Use first_error.
+ (parse_vfp_reg_list): Use arm_typed_reg_parse instead of arm_reg_parse.
+ (neon_alias_types_same): New function. Return true if two (alias) types
+ are the same.
+ (parse_neon_el_struct_list): Use parse_typed_reg_or_scalar. Return type
+ of elements.
+ (insert_reg_alias): Return new reg_entry not void.
+ (insert_neon_reg_alias): New function. Insert type/index information as
+ well as register for alias.
+ (create_neon_reg_alias): New function. Parse .dn/.qn directives and
+ make typed register aliases accordingly.
+ (s_dn, s_qn): New functions. Handle incorrectly used .dn/.qn at start
+ of line.
+ (s_unreq): Delete type information if present.
+ (s_arm_unwind_save_mmxwr): Remove arg 3 from arm_reg_parse calls.
+ (s_arm_unwind_save_mmxwcg): Likewise.
+ (s_arm_unwind_movsp): Likewise.
+ (s_arm_unwind_setfp): Likewise.
+ (parse_shift): Likewise.
+ (parse_shifter_operand): Likewise.
+ (parse_address): Likewise.
+ (parse_tb): Likewise.
+ (tc_arm_regname_to_dw2regnum): Likewise.
+ (md_pseudo_table): Add dn, qn.
+ (parse_neon_mov): Handle typed operands.
+ (parse_operands): Likewise.
+ (neon_type_mask): Add N_SIZ.
+ (N_ALLMODS): New macro.
+ (neon_check_shape): Fix typo in NS_DDD_QQQ case. Use first_error.
+ (el_type_of_type_chk): Add some safeguards.
+ (modify_types_allowed): Fix logic bug.
+ (neon_check_type): Handle operands with types.
+ (neon_three_same): Remove redundant optional arg handling.
+ (do_neon_dyadic_i64_su, do_neon_shl_imm, do_neon_qshl_imm)
+ (do_neon_logic, do_neon_qdmulh, do_neon_fcmp_absolute)
+ (do_neon_step): Adjust accordingly.
+ (neon_cmode_for_logic_imm): Use first_error.
+ (do_neon_bitfield): Call neon_check_type.
+ (neon_dyadic): Rename to...
+ (neon_dyadic_misc): ...this. New name for neon_dyadic. Add bitfield
+ to allow modification of type of the destination.
+ (do_neon_dyadic_if_su, do_neon_dyadic_if_i, do_neon_dyadic_if_i_d)
+ (do_neon_addsub_if_i, do_neon_mul): Adjust accordingly.
+ (do_neon_compare): Make destination be an untyped bitfield.
+ (neon_scalar_for_mul): Use NEON_SCALAR_REG, NEON_SCALAR_INDEX.
+ (neon_mul_mac): Return early in case of errors.
+ (neon_move_immediate): Use first_error.
+ (neon_mac_reg_scalar_long): Fix type to include scalar.
+ (do_neon_dup): Likewise.
+ (do_neon_mov): Likewise (in several places).
+ (do_neon_tbl_tbx): Fix type.
+ (do_neon_ld_st_interleave, neon_alignment_bit, do_neon_ld_st_lane)
+ (do_neon_ld_dup): Exit early in case of errors and/or use
+ first_error.
+ (opcode_lookup): Update for parse_neon_type returning SUCCESS/FAIL.
+ Handle .dn/.qn directives.
+ (REGDEF): Add zero for reg_entry neon field.
+
+2006-04-26 Julian Brown <julian@codesourcery.com>
+
+ * config/tc-arm.c (limits.h): Include.
+ (fpu_arch_vfp_v3, fpu_vfp_ext_v3, fpu_neon_ext_v1)
+ (fpu_vfp_v3_or_neon_ext): Declare constants.
+ (neon_el_type): New enumeration of types for Neon vector elements.
+ (neon_type_el): New struct. Define type and size of a vector element.
+ (NEON_MAX_TYPE_ELS): Define constant. The maximum number of types per
+ instruction.
+ (neon_type): Define struct. The type of an instruction.
+ (arm_it): Add 'vectype' for the current instruction.
+ (isscalar, immisalign, regisimm, isquad): New predicates for operands.
+ (vfp_sp_reg_pos): Rename to...
+ (vfp_reg_pos): ...this, and add VFP_REG_Dd, VFP_REG_Dm, VFP_REG_Dn
+ tags.
+ (arm_reg_type): Add REG_TYPE_NQ (Neon Q register) and REG_TYPE_NDQ
+ (Neon D or Q register).
+ (reg_expected_msgs): Sync with above. Allow VFD to mean VFP or Neon D
+ register.
+ (GE_OPT_PREFIX_BIG): Define constant, for use in...
+ (my_get_expression): Allow above constant as argument to accept
+ 64-bit constants with optional prefix.
+ (arm_reg_parse): Add extra argument to return the specific type of
+ register in when either a D or Q register (REG_TYPE_NDQ) is
+ requested. Can be NULL.
+ (parse_scalar): New function. Parse Neon scalar (vector reg and index).
+ (parse_reg_list): Update for new arm_reg_parse args.
+ (parse_vfp_reg_list): Allow parsing of Neon D/Q register lists.
+ (parse_neon_el_struct_list): New function. Parse element/structure
+ register lists for VLD<n>/VST<n> instructions.
+ (s_arm_unwind_save_vfp): Update for new parse_vfp_reg_list args.
+ (s_arm_unwind_save_mmxwr): Likewise.
+ (s_arm_unwind_save_mmxwcg): Likewise.
+ (s_arm_unwind_movsp): Likewise.
+ (s_arm_unwind_setfp): Likewise.
+ (parse_big_immediate): New function. Parse an immediate, which may be
+ 64 bits wide. Put results in inst.operands[i].
+ (parse_shift): Update for new arm_reg_parse args.
+ (parse_address): Likewise. Add parsing of alignment specifiers.
+ (parse_neon_mov): Parse the operands of a VMOV instruction.
+ (operand_parse_code): Add OP_RND, OP_RNQ, OP_RNDQ, OP_RNSC, OP_NRDLST,
+ OP_NSTRLST, OP_NILO, OP_RNDQ_I0, OP_RR_RNSC, OP_RNDQ_RNSC, OP_RND_RNSC,
+ OP_VMOV, OP_RNDQ_IMVNb, OP_RNDQ_I63b, OP_I0, OP_I16z, OP_I32z, OP_I64,
+ OP_I64z, OP_oI32b, OP_oRND, OP_oRNQ, OP_oRNDQ.
+ (parse_operands): Handle new codes above.
+ (encode_arm_vfp_sp_reg): Rename to...
+ (encode_arm_vfp_reg): ...this. Handle D regs (0-31) too. Complain if
+ selected VFP version only supports D0-D15.
+ (do_vfp_sp_monadic, do_vfp_sp_dyadic, do_vfp_sp_compare_z)
+ (do_vfp_dp_sp_cvt, do_vfp_reg_from_sp, do_vfp_reg2_from_sp2)
+ (do_vfp_sp_from_reg, do_vfp_sp2_from_reg2, do_vfp_sp_ldst)
+ (do_vfp_dp_ldst, vfp_sp_ldstm, vfp_dp_ldstm): Update for new
+ encode_arm_vfp_reg name, and allow 32 D regs.
+ (do_vfp_dp_rd_rm, do_vfp_dp_rn_rd, do_vfp_dp_rd_rn, do_vfp_dp_rd_rn_rm)
+ (do_vfp_rm_rd_rn): New functions to encode VFP insns allowing 32 D
+ regs.
+ (do_vfp_sp_const, do_vfp_dp_const, vfp_conv, do_vfp_sp_conv_16)
+ (do_vfp_dp_conv_16, do_vfp_sp_conv_32, do_vfp_dp_conv_32): Handle
+ constant-load and conversion insns introduced with VFPv3.
+ (neon_tab_entry): New struct.
+ (NEON_ENC_TAB): Bit patterns for overloaded Neon instructions, and
+ those which are the targets of pseudo-instructions.
+ (neon_opc): Enumerate opcodes, use as indices into...
+ (neon_enc_tab): ...this. Hold data from NEON_ENC_TAB.
+ (NEON_ENC_INTEGER, NEON_ENC_ARMREG, NEON_ENC_POLY, NEON_ENC_FLOAT)
+ (NEON_ENC_SCALAR, NEON_ENC_IMMED, NEON_ENC_INTERLV, NEON_ENC_LANE)
+ (NEON_ENC_DUP): Define meaningful helper macros to look up values in
+ neon_enc_tab.
+ (neon_shape): Enumerate shapes (permitted register widths, etc.) for
+ Neon instructions.
+ (neon_type_mask): New. Compact type representation for type checking.
+ (N_SU_ALL, N_SU_32, N_SU_16_64, N_SUF_32, N_I_ALL, N_IF_32): Common
+ permitted type combinations.
+ (N_IGNORE_TYPE): New macro.
+ (neon_check_shape): New function. Check an instruction shape for
+ multiple alternatives. Return the specific shape for the current
+ instruction.
+ (neon_modify_type_size): New function. Modify a vector type and size,
+ depending on the bit mask in argument 1.
+ (neon_type_promote): New function. Convert a given "key" type (of an
+ operand) into the correct type for a different operand, based on a bit
+ mask.
+ (type_chk_of_el_type): New function. Convert a type and size into the
+ compact representation used for type checking.
+ (el_type_of_type_ckh): New function. Reverse of above (only when a
+ single bit is set in the bit mask).
+ (modify_types_allowed): New function. Alter a mask of allowed types
+ based on a bit mask of modifications.
+ (neon_check_type): New function. Check the type of the current
+ instruction against the variable argument list. The "key" type of the
+ instruction is returned.
+ (neon_dp_fixup): New function. Fill in and modify instruction bits for
+ a Neon data-processing instruction depending on whether we're in ARM
+ mode or Thumb-2 mode.
+ (neon_logbits): New function.
+ (neon_three_same, neon_two_same, do_neon_dyadic_i_su)
+ (do_neon_dyadic_i64_su, neon_imm_shift, do_neon_shl_imm)
+ (do_neon_qshl_imm, neon_cmode_for_logic_imm, neon_bits_same_in_bytes)
+ (neon_squash_bits, neon_is_quarter_float, neon_qfloat_bits)
+ (neon_cmode_for_move_imm, neon_write_immbits, neon_invert_size)
+ (do_neon_logic, do_neon_bitfield, neon_dyadic, do_neon_dyadic_if_su)
+ (do_neon_dyadic_if_su_d, do_neon_dyadic_if_i, do_neon_dyadic_if_i_d)
+ (do_neon_addsub_if_i, neon_exchange_operands, neon_compare)
+ (do_neon_cmp, do_neon_cmp_inv, do_neon_ceq, neon_scalar_for_mul)
+ (neon_mul_mac, do_neon_mac_maybe_scalar, do_neon_tst, do_neon_mul)
+ (do_neon_qdmulh, do_neon_fcmp_absolute, do_neon_fcmp_absolute_inv)
+ (do_neon_step, do_neon_abs_neg, do_neon_sli, do_neon_sri)
+ (do_neon_qshlu_imm, do_neon_qmovn, do_neon_qmovun)
+ (do_neon_rshift_sat_narrow, do_neon_rshift_sat_narrow_u, do_neon_movn)
+ (do_neon_rshift_narrow, do_neon_shll, neon_cvt_flavour, do_neon_cvt)
+ (neon_move_immediate, do_neon_mvn, neon_mixed_length)
+ (do_neon_dyadic_long, do_neon_abal, neon_mac_reg_scalar_long)
+ (do_neon_mac_maybe_scalar_long, do_neon_dyadic_wide, do_neon_vmull)
+ (do_neon_ext, do_neon_rev, do_neon_dup, do_neon_mov)
+ (do_neon_rshift_round_imm, do_neon_movl, do_neon_trn, do_neon_zip_uzp)
+ (do_neon_sat_abs_neg, do_neon_pair_long, do_neon_recip_est)
+ (do_neon_cls, do_neon_clz, do_neon_cnt, do_neon_swp, do_neon_tbl_tbx)
+ (do_neon_ldm_stm, do_neon_ldr_str, do_neon_ld_st_interleave)
+ (neon_alignment_bit, do_neon_ld_st_lane, do_neon_ld_dup)
+ (do_neon_ldx_stx): New functions. Neon bit encoding and encoding
+ helpers.
+ (parse_neon_type): New function. Parse Neon type specifier.
+ (opcode_lookup): Allow parsing of Neon type specifiers.
+ (REGNUM2, REGSETH, REGSET2): New macros.
+ (reg_names): Add new VFPv3 and Neon registers.
+ (NUF, nUF, NCE, nCE): New macros for opcode table.
+ (insns): More VFP registers allowed in fcpyd, fmdhr, fmdlr, fmrdh,
+ fmrdl, fabsd, fnegd, fsqrtd, faddd, fsubd, fmuld, fdivd, fmacd, fmscd,
+ fnmuld, fnmacd, fnmscd, fcmpd, fcmpzd, fcmped, fcmpezd, fmdrr, fmrrd.
+ Add Neon instructions vaba, vhadd, vrhadd, vhsub, vqadd, vqsub, vrshl,
+ vqrshl, vshl, vqshl{u}, vand, vbic, vorr, vorn, veor, vbsl, vbit, vbif,
+ vabd, vmax, vmin, vcge, vcgt, vclt, vcle, vceq, vpmax, vpmin, vmla,
+ vmls, vpadd, vadd, vsub, vtst, vmul, vqdmulh, vqrdmulh, vacge, vacgt,
+ vaclt, vacle, vrecps, vrsqrts, vabs, vneg, v{r}shr, v{r}sra, vsli,
+ vsri, vqshrn, vq{r}shr{u}n, v{r}shrn, vshll, vcvt, vmov, vmvn, vabal,
+ vabdl, vaddl, vsubl, vmlal, vmlsl, vaddw, vsubw, v{r}addhn, v{r}subhn,
+ vqdmlal, vqdmlsl, vqdmull, vmull, vext, vrev64, vrev32, vrev16, vdup,
+ vmovl, v{q}movn, vzip, vuzp, vqabs, vqneg, vpadal, vpaddl, vrecpe,
+ vrsqrte, vcls, vclz, vcnt, vswp, vtrn, vtbl, vtbx, vldm, vstm, vldr,
+ vstr, vld[1234], vst[1234], fconst[sd], f[us][lh]to[sd],
+ fto[us][lh][sd].
+ (tc_arm_regname_to_dw2regnum): Update for arm_reg_parse args.
+ (arm_cpu_option_table): Add Neon and VFPv3 to Cortex-A8.
+ (arm_option_cpu_value): Add vfp3 and neon.
+ (aeabi_set_public_attributes): Support VFPv3 and NEON attributes. Fix
+ VFPv1 attribute.
+
+2006-04-25 Bob Wilson <bob.wilson@acm.org>
+
+ * config/xtensa-relax.c (widen_spec_list): Use new "WIDE.<opcode>"
+ syntax instead of hardcoded opcodes with ".w18" suffixes.
+ (wide_branch_opcode): New.
+ (build_transition): Use it to check for wide branch opcodes with
+ either ".w18" or ".w15" suffixes.
+
+2006-04-25 Bob Wilson <bob.wilson@acm.org>
+
+ * config/tc-xtensa.c (xtensa_create_literal_symbol,
+ xg_assemble_literal, xg_assemble_literal_space): Do not set the
+ frag's is_literal flag.
+
+2006-04-25 Bob Wilson <bob.wilson@acm.org>
+
+ * config/xtensa-relax.c (XCHAL_HAVE_WIDE_BRANCHES): Provide default.
+
+2006-04-23 Kazu Hirata <kazu@codesourcery.com>
+
+ * config/obj-coff.c, config/tc-arm.c, config/tc-bfin.c,
+ config/tc-cris.c, config/tc-crx.c, config/tc-i386.c,
+ config/tc-ia64.c, config/tc-maxq.c, config/tc-maxq.h,
+ config/tc-mips.c, config/tc-msp430.c, config/tc-sh.c,
+ config/tc-tic4x.c, config/tc-xtensa.c: Fix comment typos.
+
+2005-04-20 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (s_arm_arch, s_arm_cpu, s_arm_fpu): Enable for
+ all targets.
+ (md_pseudo_table): Enable .arch, .cpu and .fpu for all targets.
+
+2006-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (CPU_TYPES): Add maxq and mt. Sort.
+ (CPU_OBJ_VALID): Change sense of COFF test to default to invalid.
+ Make some cpus unsupported on ELF. Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2006-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.in (--enable-targets): Indent help message.
+ * configure: Regenerate.
+
+2006-04-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/2533
+ * config/tc-i386.c (i386_immediate): Check illegal immediate
+ register operand.
+
+2006-04-18 Alan Modra <amodra@bigpond.net.au>
+
+ * config/tc-i386.c: Formatting.
+ (output_disp, output_imm): ISO C90 params.
+
+ * frags.c (frag_offset_fixed_p): Constify args.
+ * frags.h (frag_offset_fixed_p): Ditto.
+
+ * config/tc-dlx.h (tc_coff_symbol_emit_hook): Delete.
+ (COFF_MAGIC): Delete.
+
+ * config/tc-xc16x.h (TC_LINKRELAX_FIXUP): Delete.
+
+2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/POTFILES.in: Regenerated.
+
+2006-04-16 Mark Mitchell <mark@codesourcery.com>
+
+ * doc/as.texinfo: Mention that some .type syntaxes are not
+ supported on all architectures.
+
+2006-04-14 Sterling Augustine <sterling@tensilica.com>
+
+ * config/tc-xtensa.c (emit_single_op): Do not relax MOVI
+ instructions when such transformations have been disabled.
+
+2006-04-10 Sterling Augustine <sterling@tensilica.com>
+
+ * config/tc-xtensa.c (xg_assemble_vliw_tokens): Record loop target
+ symbols in RELAX[_CHECK]_ALIGN_NEXT_OPCODE frags.
+ (xtensa_fix_close_loop_end_frags): Use the recorded values instead of
+ decoding the loop instructions. Remove current_offset variable.
+ (xtensa_fix_short_loop_frags): Likewise.
+ (min_bytes_to_other_loop_end): Remove current_offset argument.
+
+2006-04-09 Arnold Metselaar <arnold.metselaar@planet.nl>
+
+ * config/tc-z80.c (z80_optimize_expr): Removed.
+ * config/tc-z80.h (z80_optimize_expr, md_optimize_expr): Removed.
+
+2006-04-07 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+
+ * gas/config/tc-avr.c (mcu_types): Add support for attiny261,
+ attiny461, attiny861, attiny25, attiny45, attiny85,attiny24,
+ attiny44, attiny84, at90pwm2, at90pwm3, atmega164, atmega324,
+ atmega644, atmega329, atmega3290, atmega649, atmega6490,
+ atmega406, atmega640, atmega1280, atmega1281, at90can32,
+ at90can64, at90usb646, at90usb647, at90usb1286 and
+ at90usb1287.
+ Move atmega48 and atmega88 from AVR_ISA_M8 to AVR_ISA_PWMx.
+
+2006-04-07 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (parse_operands): Set default error message.
+
+2006-04-07 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (parse_tb): Set inst.error before returning FAIL.
+
+2006-04-07 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (md_apply_fix): Set H bit on blx instruction.
+
+2006-04-07 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (THUMB2_LOAD_BIT): Define.
+ (move_or_literal_pool): Handle Thumb-2 instructions.
+ (do_t_ldst): Call move_or_literal_pool for =N addressing modes.
+
+2006-04-07 Alan Modra <amodra@bigpond.net.au>
+
+ PR 2512.
+ * config/tc-i386.c (match_template): Move 64-bit operand tests
+ inside loop.
+
+2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
+
+ * po/Make-in: Add install-html target.
+ * Makefile.am: Add install-html and install-html-recursive targets.
+ * Makefile.in: Regenerate.
+ * configure.in: AC_SUBST datarootdir, docdir, htmldir.
+ * configure: Regenerate.
+ * doc/Makefile.am: Add install-html and install-html-am targets.
+ * doc/Makefile.in: Regenerate.
+
+2006-04-06 Alan Modra <amodra@bigpond.net.au>
+
+ * frags.c (frag_offset_fixed_p): Reinitialise offset before
+ second scan.
+
+2006-04-05 Richard Sandiford <richard@codesourcery.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+
+ * config/tc-sparc.c (sparc_target_format): Handle TE_VXWORKS.
+ (GOTT_BASE, GOTT_INDEX): New.
+ (tc_gen_reloc): Don't alter relocations against GOTT_BASE and
+ GOTT_INDEX when generating VxWorks PIC.
+ * configure.tgt (sparc*-*-vxworks*): Remove this special case;
+ use the generic *-*-vxworks* stanza instead.
+
+2006-04-04 Alan Modra <amodra@bigpond.net.au>
+
+ PR 997
+ * frags.c (frag_offset_fixed_p): New function.
+ * frags.h (frag_offset_fixed_p): Declare.
+ * expr.c (expr): Use frag_offset_fixed_p when simplifying subtraction.
+ (resolve_expression): Likewise.
+
+2006-04-03 Sterling Augustine <sterling@tensilica.com>
+
+ * config/tc-xtensa.c (init_op_placement_info_table): Check for formats
+ of the same length but different numbers of slots.
+
+2006-03-30 Andreas Schwab <schwab@suse.de>
+
+ * configure.in: Fix help string for --enable-targets option.
+ * configure: Regenerate.
+
+2006-03-28 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gas/config/tc-m68k.c (find_cf_chip): Merge into ...
+ (m68k_ip): ... here. Use for all chips. Protect against buffer
+ overrun and avoid excessive copying.
+
+ * config/tc-m68k.c (m68000_control_regs, m68010_control_regs,
+ m68020_control_regs, m68040_control_regs, m68060_control_regs,
+ mcf_control_regs, mcf5208_control_regs, mcf5213_control_regs,
+ mcf5329_control_regs, mcf5249_control_regs, mcf528x_control_regs,
+ mcfv4e_control_regs, m68010_control_regs): Rename and reorder to ...
+ (m68000_ctrl, m68010_ctrl, m68020_ctrl, m68040_ctrl, m68060_ctrl,
+ mcf_ctrl, mcf5208_ctrl, mcf5213_ctrl, mcf5235_ctrl, mcf5249_ctrl,
+ mcf5216_ctrl, mcf5250_ctrl, mcf5271_ctrl, mcf5272_ctrl,
+ mcf5282_ctrl, mcfv4e_ctrl): ... these.
+ (mcf5275_ctrl, mcf5329_ctrl, mcf5373_ctrl): New.
+ (struct m68k_cpu): Change chip field to control_regs.
+ (current_chip): Remove.
+ (control_regs): New.
+ (m68k_archs, m68k_extensions): Adjust.
+ (m68k_cpus): Reorder to be in cpu number order. Adjust.
+ (CPU_ALLOW_MC, CPU_ALLOW_NEGATION): Remove.
+ (find_cf_chip): Reimplement for new organization of cpu table.
+ (select_control_regs): Remove.
+ (mri_chip): Adjust.
+ (struct save_opts): Save control regs, not chip.
+ (s_save, s_restore): Adjust.
+ (m68k_lookup_cpu): Give deprecated warning when necessary.
+ (m68k_init_arch): Adjust.
+ (md_show_usage): Adjust for new cpu table organization.
+
+2006-03-25 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * config/bfin-defs.h (Expr_Node_Type enum): Add Expr_Node_GOT_Reloc.
+ * config/bfin-lex.l: Recognize GOT17M4 and FUNCDESC_GOT17M4.
+ * config/bfin-parse.y: Include "libbfd.h", "elf/common.h" and
+ "elf/bfin.h".
+ (GOT17M4, FUNCDESC_GOT17M4): New tokens of type <value>.
+ (any_gotrel): New rule.
+ (got): Use it, and create Expr_Node_GOT_Reloc nodes.
+ * config/tc-bfin.c: Include "libbfd.h", "elf/common.h" and
+ "elf/bfin.h".
+ (DEFAULT_FLAGS, bfin_flags, bfin_pic_flag): New.
+ (bfin_pic_ptr): New function.
+ (md_pseudo_table): Add it for ".picptr".
+ (OPTION_FDPIC): New macro.
+ (md_longopts): Add -mfdpic.
+ (md_parse_option): Handle it.
+ (md_begin): Set BFD flags.
+ (md_apply_fix3, bfin_fix_adjustable): Handle new relocs.
+ (bfin_gen_ldstidxi): Adjust to match the trees that the parser gives
+ us for GOT relocs.
+ * Makefile.am (bfin-parse.o): Update dependencies.
+ (DEPTC_bfin_elf): Likewise.
+ * Makefile.in: Regenerate.
+
+2006-03-25 Richard Sandiford <richard@codesourcery.com>
+
+ * config/tc-m68k.c (m68k_cpus): Change cpu_cf5208 entries to use
+ mcfemac instead of mcfmac.
+
+2006-03-23 Michael Matz <matz@suse.de>
+
+ * config/tc-i386.c (type_names): Correct placement of 'static'.
+ (reloc): Map some more relocs to their 64 bit counterpart when
+ size is 8.
+ (output_insn): Work around breakage if DEBUG386 is defined.
+ (output_disp): A BFD_RELOC_64 with GOT_symbol as operand also
+ needs to be mapped to BFD_RELOC_X86_64_GOTPC64 or
+ BFD_RELOC_X86_64_GOTPC32. Also x86-64 handles pcrel addressing
+ different from i386.
+ (output_imm): Ditto.
+ (lex_got): Recognize @PLTOFF and @GOTPLT. Make @GOT accept also
+ Imm64.
+ (md_convert_frag): Jumps can now be larger than 2GB away, error
+ out in that case.
+ (tc_gen_reloc): New relocs are passed through. BFD_RELOC_64
+ and BFD_RELOC_64_PCREL are mapped to BFD_RELOC_X86_64_GOTPC64.
+
+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>
+
+ * config/tc-mips.c (mips_target_format): Handle vxworks targets.
+ (md_begin): Complain about -G being used for PIC. Don't change
+ the text, data and bss alignments on VxWorks.
+ (reloc_needs_lo_p): Don't return true for R_MIPS_GOT16 when
+ generating VxWorks PIC.
+ (load_address): Extend SVR4_PIC handling to VXWORKS_PIC.
+ (macro): Likewise, but do not treat la $25 specially for
+ VxWorks PIC, and do not handle jal.
+ (OPTION_MVXWORKS_PIC): New macro.
+ (md_longopts): Add -mvxworks-pic.
+ (md_parse_option): Don't complain about using PIC and -G together here.
+ Handle OPTION_MVXWORKS_PIC.
+ (md_estimate_size_before_relax): Always use the first relaxation
+ sequence on VxWorks.
+ * config/tc-mips.h (VXWORKS_PIC): New.
+
+2006-03-21 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (md_apply_fix): Fix typo in offset mask.
+
+2006-03-21 Sterling Augustine <sterling@tensilica.com>
+
+ * config/tc-xtensa.c (enforce_three_byte_loop_align): New flag.
+ (xtensa_setup_hw_workarounds): Set this new flag for older hardware.
+ (get_loop_align_size): New.
+ (xtensa_end): Skip xtensa_mark_narrow_branches when not aligning.
+ (xtensa_mark_zcl_first_insns): Prevent widening of first loop frag.
+ (get_text_align_power): Rewrite to handle inputs in the range 2-8.
+ (get_noop_aligned_address): Use get_loop_align_size.
+ (get_aligned_diff): Likewise.
+
+2006-03-21 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (insns): Correct opcodes for ldrbt and strbt.
+
+2006-03-20 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (BAD_BRANCH, BAD_NOT_IT): Define.
+ (do_t_branch): Encode branches inside IT blocks as unconditional.
+ (do_t_cps): New function.
+ (do_t_blx, do_t_bkpt, do_t_branch23, do_t_bx, do_t_bxj, do_t_cpsi,
+ do_t_czb, do_t_it, do_t_setend, do_t_tb): Add IT constaints.
+ (opcode_lookup): Allow conditional suffixes on all instructions in
+ Thumb mode.
+ (md_assemble): Advance condexec state before checking for errors.
+ (insns): Use do_t_cps.
+
+2006-03-20 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (output_relax_insn): Call dwarf2_emit_insn before
+ outputting the insn.
+
+2006-03-18 Jan-Benedict Glaw <jbglaw@lug-owl.de>
+
+ * config/tc-vax.c: Update copyright year.
+ * config/tc-vax.h: Likewise.
+
+2006-03-18 Jan-Benedict Glaw <jbglaw@lug-owl.de>
+
+ * config/tc-vax.c (md_chars_to_number): Used only locally, so
+ make it static.
+ * config/tc-vax.h (md_chars_to_number): Remove obsolete declaration.
+
+2006-03-17 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (insns): Add ldm and stm.
+
+2006-03-17 Ben Elliston <bje@au.ibm.com>
+
+ PR gas/2446
+ * doc/as.texinfo (Ident): Document this directive more thoroughly.
+
+2006-03-16 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (insns): Add "svc".
+
+2006-03-13 Bob Wilson <bob.wilson@acm.org>
+
+ * config/tc-xtensa.c (xg_translate_sysreg_op): Remove has_underbar
+ flag and avoid double underscore prefixes.
+
+2006-03-10 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (md_begin): Handle EABIv5.
+ (arm_eabis): Add EF_ARM_EABI_VER5.
+ * doc/c-arm.texi: Document -meabi=5.
+
+2006-03-10 Ben Elliston <bje@au.ibm.com>
+
+ * app.c (do_scrub_chars): Simplify string handling.
+
+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>
+
+ * config/tc-arm.c (md_apply_fix): Install a value of zero into a
+ BFD_RELOC_ARM_OFFSET_IMM field if we're going to generate a RELA
+ R_ARM_ABS12 reloc.
+ (tc_gen_reloc): Keep the original fx_offset for RELA pc-relative
+ relocs, but adjust by md_pcrel_from_section. Create R_ARM_ABS12
+ relocations for BFD_RELOC_ARM_OFFSET_IMM on RELA targets.
+
+2006-03-06 Bob Wilson <bob.wilson@acm.org>
+
+ * config/tc-xtensa.c (xtensa_post_relax_hook): Generate literal tables
+ even when using the text-section-literals option.
+
+2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * config/tc-m68k.c (m68k_extensions): Allow 'float' on both m68k
+ and cf.
+ (m68k_ip): <case 'J'> Check we have some control regs.
+ (md_parse_option): Allow raw arch switch.
+ (m68k_init_arch): Better detection of arch/cpu mismatch. Detect
+ whether 68881 or cfloat was meant by -mfloat.
+ (md_show_usage): Adjust extension display.
+ (m68k_elf_final_processing): Adjust.
+
+2006-03-03 Bjoern Haase <bjoern.m.haase@web.de>
+
+ * config/tc-avr.c (avr_mod_hash_value): New function.
+ (md_apply_fix, exp_mod): Use BFD_RELOC_HH8_LDI and
+ BFD_RELOC_MS8_LDI for hlo8() and hhi8()
+ (md_begin): Set linkrelax variable to 1, use avr_mod_hash_value
+ instead of int avr_ldi_expression: use avr_mod_hash_value instead
+ of (int).
+ (tc_gen_reloc): Handle substractions of symbols, if possible do
+ fixups, abort otherwise.
+ * config/tc-avr.h (TC_LINKRELAX_FIXUP, TC_VALIDATE_FIX,
+ tc_fix_adjustable): Define.
+
+2006-03-02 James E Wilson <wilson@specifix.com>
+
+ * config/tc-ia64.c (emit_one_bundle): For IA64_OPCODE_LAST, if we
+ change the template, then clear md.slot[curr].end_of_insn_group.
+
+2006-02-28 Jan Beulich <jbeulich@novell.com>
+
+ * macro.c (get_any_string): Don't insert quotes for <>-quoted input.
+
+2006-02-28 Jan Beulich <jbeulich@novell.com>
+
+ PR/1070
+ * macro.c (getstring): Don't treat parentheses special anymore.
+ (get_any_string): Don't consider '(' and ')' as quoting anymore.
+ Special-case '(', ')', '[', and ']' when dealing with non-quoting
+ characters.
+
+2006-02-28 Mat <mat@csail.mit.edu>
+
+ * dwarf2dbg.c (get_filenum): Don't inadvertently decrease files_in_use.
+
+2006-02-27 Jakub Jelinek <jakub@redhat.com>
+
+ * dw2gencfi.c (struct fde_entry, struct cie_entry): Add signal_frame
+ field.
+ (CFI_signal_frame): Define.
+ (cfi_pseudo_table): Add .cfi_signal_frame.
+ (dot_cfi): Handle CFI_signal_frame.
+ (output_cie): Handle cie->signal_frame.
+ (select_cie_for_fde): Don't share CIE if signal_frame flag is
+ different. Copy signal_frame from FDE to newly created CIE.
+ * doc/as.texinfo: Document .cfi_signal_frame.
+
+2006-02-27 Carlos O'Donell <carlos@codesourcery.com>
+
+ * doc/Makefile.am: Add html target.
+ * doc/Makefile.in: Regenerate.
+ * po/Make-in: Add html target.
+
+2006-02-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (output_insn): Support Intel Merom New
+ Instructions.
+
+ * config/tc-i386.h (CpuMNI): New.
+ (CpuUnknownFlags): Add CpuMNI.
+
+2006-02-24 David S. Miller <davem@sunset.davemloft.net>
+
+ * config/tc-sparc.c (priv_reg_table): Add entry for "gl".
+ (hpriv_reg_table): New table for hyperprivileged registers.
+ (sparc_ip): New cases '$' and '%' for wrhpr/rdhpr hyperprivileged
+ register encoding.
+
+2006-02-24 DJ Delorie <dj@redhat.com>
+
+ * config/tc-m32c.h (md_apply_fix): Define to m32c_apply_fix.
+ (tc_gen_reloc): Don't define.
+ * config/tc-m32c.c (rl_for, relaxable): New convenience macros.
+ (OPTION_LINKRELAX): New.
+ (md_longopts): Add it.
+ (m32c_relax): New.
+ (md_parse_options): Set it.
+ (md_assemble): Emit relaxation relocs as needed.
+ (md_convert_frag): Emit relaxation relocs as needed.
+ (md_cgen_lookup_reloc): Add LAB_8_8 and LAB_8_16.
+ (m32c_apply_fix): New.
+ (tc_gen_reloc): New.
+ (m32c_force_relocation): Force out jump relocs when relaxing.
+ (m32c_fix_adjustable): Return false if relaxing.
+
+2006-02-24 Paul Brook <paul@codesourcery.com>
+
+ * config/arm/tc-arm.c (arm_ext_v6_notm, arm_ext_div, arm_ext_v7,
+ arm_ext_v7a, arm_ext_v7r, arm_ext_v7m): New variables.
+ (struct asm_barrier_opt): Define.
+ (arm_v7m_psr_hsh, arm_barrier_opt_hsh): New variables.
+ (parse_psr): Accept V7M psr names.
+ (parse_barrier): New function.
+ (enum operand_parse_code): Add OP_oBARRIER.
+ (parse_operands): Implement OP_oBARRIER.
+ (do_barrier): New function.
+ (do_dbg, do_pli, do_t_barrier, do_t_dbg, do_t_div): New functions.
+ (do_t_cpsi): Add V7M restrictions.
+ (do_t_mrs, do_t_msr): Validate V7M variants.
+ (md_assemble): Check for NULL variants.
+ (v7m_psrs, barrier_opt_names): New tables.
+ (insns): Add V7 instructions. Mark V6 instructions absent from V7M.
+ (md_begin): Initialize arm_v7m_psr_hsh and arm_barrier_opt_hsh.
+ (arm_cpu_option_table): Add Cortex-M3, R4 and A8.
+ (arm_arch_option_table): Add armv7, armv7a, armv7r and armv7m.
+ (struct cpu_arch_ver_table): Define.
+ (cpu_arch_ver): New.
+ (aeabi_set_public_attributes): Use cpu_arch_ver. Set
+ Tag_CPU_arch_profile.
+ * doc/c-arm.texi: Document new cpu and arch options.
+
+2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-ia64.c (operand_match): Handle IA64_OPND_IMMU5b.
+
+2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-ia64.c: Update copyright years.
+
+2006-02-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-ia64.c (specify_resource): Add the rule 17 from
+ SDM 2.2.
+
+2005-02-22 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (do_pld): Remove incorrect write to
+ inst.instruction.
+ (encode_thumb32_addr_mode): Use correct operand.
+
+2006-02-21 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (md_apply_fix): Fix off-by-one errors.
+
+2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
+ Anil Paranjape <anilp1@kpitcummins.com>
+ Shilin Shakti <shilins@kpitcummins.com>
+
+ * Makefile.am: Add xc16x related entry.
+ * Makefile.in: Regenerate.
+ * configure.in: Added xc16x related entry.
+ * configure: Regenerate.
+ * config/tc-xc16x.h: New file
+ * config/tc-xc16x.c: New file
+ * doc/c-xc16x.texi: New file for xc16x
+ * doc/all.texi: Entry for xc16x
+ * doc/Makefile.texi: Added c-xc16x.texi
+ * NEWS: Announce the support for the new target.
+
+2006-02-16 Nick Hudson <nick.hudson@dsl.pipex.com>
+
+ * configure.tgt: set emulation for mips-*-netbsd*
+
+2006-02-14 Jakub Jelinek <jakub@redhat.com>
+
+ * config.in: Rebuilt.
+
+2006-02-13 Bob Wilson <bob.wilson@acm.org>
+
+ * config/tc-xtensa.c (xg_add_opcode_fix): Number operands starting
+ from 1, not 0, in error messages.
+ (md_assemble): Simplify special-case check for ENTRY instructions.
+ (tinsn_has_invalid_symbolic_operands): Do not include opcode and
+ operand in error message.
+
+2006-02-13 Joseph S. Myers <joseph@codesourcery.com>
+
+ * configure.tgt (arm-*-linux-gnueabi*): Change to
+ arm-*-linux-*eabi*.
+
+2006-02-10 Nick Clifton <nickc@redhat.com>
+
+ * config/tc-crx.c (check_range): Ensure that the sign bit of a
+ 32-bit value is propagated into the upper bits of a 64-bit long.
+
+ * config/tc-arc.c (init_opcode_tables): Fix cast.
+ (arc_extoper, md_operand): Likewise.
+
+2006-02-09 David Heine <dlheine@tensilica.com>
+
+ * config/tc-xtensa.c (xg_assembly_relax): Increment steps_taken for
+ each relaxation step.
+
+2006-02-09 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * configure.in (CHECK_DECLS): Add vsnprintf.
+ * configure: Regenerate.
+ * messages.c (errno.h, stdarg.h, varargs.h, va_list): Do not
+ include/declare here, but...
+ * as.h: Move code detecting VARARGS idiom to the top.
+ (errno.h, stdarg.h, varargs.h, va_list): ...here.
+ (vsnprintf): Declare if not already declared.
+
+2006-02-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * as.c (close_output_file): New.
+ (main): Register close_output_file with xatexit before
+ dump_statistics. Don't call output_file_close.
+
+2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
+
+ * config/tc-m68k.c (mcf5208_control_regs, mcf5213_control_regs,
+ mcf5329_control_regs): New.
+ (not_current_architecture, selected_arch, selected_cpu): New.
+ (m68k_archs, m68k_extensions): New.
+ (archs): Renamed to ...
+ (m68k_cpus): ... here. Adjust.
+ (n_arches): Remove.
+ (md_pseudo_table): Add arch and cpu directives.
+ (find_cf_chip, m68k_ip): Adjust table scanning.
+ (no_68851, no_68881): Remove.
+ (md_assemble): Lazily initialize.
+ (select_control_regs): Adjust cpu names. Add 5208, 5213, 5329.
+ (md_init_after_args): Move functionality to m68k_init_arch.
+ (mri_chip): Adjust table scanning.
+ (md_parse_option): Reimplement 'm' processing to add -march & -mcpu
+ options with saner parsing.
+ (m68k_lookup_cpu, m68k_set_arch, m68k_set_cpu, m68k_set_extension,
+ m68k_init_arch): New.
+ (s_m68k_cpu, s_m68k_arch): New.
+ (md_show_usage): Adjust.
+ (m68k_elf_final_processing): Set CF EF flags.
+ * config/tc-m68k.h (m68k_init_after_args): Remove.
+ (tc_init_after_args): Remove.
+ * doc/c-m68k.texi (M68K-Opts): Document -march, -mcpu options.
+ (M68k-Directives): Document .arch and .cpu directives.
+
+2006-02-05 Arnold Metselaar <arnold.metselaar@planet.nl>
+
+ * config/tc-z80.c (z80_start_line_hook): allow .equ and .defl as
+ synonyms for equ and defl.
+ (z80_cons_fix_new): New function.
+ (emit_byte): Disallow relative jumps to absolute locations.
+ (emit_data): Only handle defb, prototype changed, because defb is
+ now handled as pseudo-op rather than an instruction.
+ (instab): Entries for defb,defw,db,dw moved from here...
+ (md_pseudo_table): ... to here, use generic cons() for defw,dw.
+ Add entries for def24,def32,d24,d32.
+ (md_assemble): Improved error handling.
+ (md_apply_fix): New case BFD_RELOC_24, set fixP->fx_no_overflow to one.
+ * config/tc-z80.h (TC_CONS_FIX_NEW): Define.
+ (z80_cons_fix_new): Declare.
+ * doc/c-z80.texi (defb, db): Mention warning on overflow.
+ (def24,d24,def32,d32): New pseudo-ops.
+
+2006-02-02 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (do_shift): Remove Thumb-1 constraint.
+
+2005-02-02 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (T2_OPCODE_MASK, T2_DATA_OP_SHIFT, T2_OPCODE_AND,
+ T2_OPCODE_BIC, T2_OPCODE_ORR, T2_OPCODE_ORN, T2_OPCODE_EOR,
+ T2_OPCODE_ADD, T2_OPCODE_ADC, T2_OPCODE_SBC, T2_OPCODE_SUB,
+ T2_OPCODE_RSB): Define.
+ (thumb32_negate_data_op): New function.
+ (md_apply_fix): Use it.
+
+2006-01-31 Bob Wilson <bob.wilson@acm.org>
+
+ * config/xtensa-istack.h (TInsn): Remove record_fix and sub_symbol
+ fields.
+ * config/tc-xtensa.h (xtensa_frag_type): Remove slot_sub_symbols field.
+ * config/tc-xtensa.c (md_apply_fix): Check for unexpected uses of
+ subtracted symbols.
+ (relaxation_requirements): Add pfinish_frag argument and use it to
+ replace setting tinsn->record_fix fields.
+ (xg_assemble_vliw_tokens): Adjust calls to relaxation_requirements
+ and vinsn_to_insnbuf. Remove references to record_fix and
+ slot_sub_symbols fields.
+ (xtensa_mark_narrow_branches): Delete unused code.
+ (is_narrow_branch_guaranteed_in_range): Handle expr that is not just
+ a symbol.
+ (convert_frag_immed): Adjust vinsn_to_insnbuf call and do not set
+ record_fix fields.
+ (tinsn_immed_from_frag): Remove code for handling slot_sub_symbols.
+ (vinsn_to_insnbuf): Change use of record_fixup argument, replacing use
+ of the record_fix field. Simplify error messages for unexpected
+ symbolic operands.
+ (set_expr_symbol_offset_diff): Delete.
+
+2006-01-31 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (arm_reg_parse): Check if reg is non-NULL.
+
+2006-01-31 Paul Brook <paul@codesourcery.com>
+ Richard Earnshaw <rearnsha@arm.com>
+
+ * config/tc-arm.c: Use arm_feature_set.
+ (arm_ext_*, arm_arch_full, arm_arch_t2, arm_arch_none,
+ arm_cext_iwmmxt, arm_cext_xscale, arm_cext_maverick, fpu_fpa_ext_v1,
+ fpu_fpa_ext_v2, fpu_vfp_ext_v1xd, fpu_vfp_ext_v1, fpu_vfp_ext_v2):
+ New variables.
+ (insns): Use them.
+ (md_atof, opcode_select, opcode_select, md_assemble, md_assemble,
+ md_begin, arm_parse_extension, arm_parse_cpu, arm_parse_arch,
+ arm_parse_fpu, arm_parse_float_abi, aeabi_set_public_attributes,
+ s_arm_cpu, s_arm_arch, s_arm_fpu): Use macros for accessing CPU
+ feature flags.
+ (arm_legacy_option_table, arm_option_cpu_value_table): New types.
+ (arm_opts): Move old cpu/arch options from here...
+ (arm_legacy_opts): ... to here.
+ (md_parse_option): Search arm_legacy_opts.
+ (arm_cpus, arm_archs, arm_extensions, arm_fpus)
+ (arm_float_abis, arm_eabis): Make const.
+
+2006-01-25 Bob Wilson <bob.wilson@acm.org>
+
+ * config/tc-xtensa.c (md_apply_fix): Set value to zero for PLT relocs.
+
+2006-01-21 Jie Zhang <jie.zhang@analog.com>
+
+ * config/bfin-parse.y (asm_1): Check value range for 16 bit immediate
+ in load immediate intruction.
+
+2006-01-21 Jie Zhang <jie.zhang@analog.com>
+
+ * config/bfin-parse.y (value_match): Use correct conversion
+ specifications in template string for __FILE__ and __LINE__.
+ (binary): Ditto.
+ (unary): Ditto.
+
+2006-01-18 Alexandre Oliva <aoliva@redhat.com>
+
+ Introduce TLS descriptors for i386 and x86_64.
+ * config/tc-i386.c (tc_i386_fix_adjustable): Handle
+ BFD_RELOC_386_TLS_GOTDESC, BFD_RELOC_386_TLS_DESC_CALL,
+ BFD_RELOC_X86_64_GOTPC32_TLSDESC, BFD_RELOC_X86_64_TLSDESC_CALL.
+ (optimize_disp): Emit fix up for BFD_RELOC_386_TLS_DESC_CALL and
+ BFD_RELOC_X86_64_TLSDESC_CALL immediately, and clear the
+ displacement bits.
+ (build_modrm_byte): Set up zero modrm for TLS desc calls.
+ (lex_got): Handle @tlsdesc and @tlscall.
+ (md_apply_fix, tc_gen_reloc): Handle the new relocations.
+
+2006-01-11 Nick Clifton <nickc@redhat.com>
+
+ Fixes for building on 64-bit hosts:
+ * config/tc-avr.c (mod_index): New union to allow conversion
+ between pointers and integers.
+ (md_begin, avr_ldi_expression): Use it.
+ * config/tc-i370.c (md_assemble): Add cast for argument to print
+ statement.
+ * config/tc-tic54x.c (subsym_substitute): Likewise.
+ * config/tc-mn10200.c (md_assemble): Use a union to convert the
+ opindex field of fr_cgen structure into a pointer so that it can
+ be stored in a frag.
+ * config/tc-mn10300.c (md_assemble): Likewise.
+ * config/tc-frv.c (frv_debug_tomcat): Use %p to print pointer
+ types.
+ * config/tc-v850.c: Replace uses of (int) casts with correct
+ types.
+
+2006-01-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/2117
+ * symbols.c (snapshot_symbol): Don't change a defined symbol.
+
+2006-01-03 Hans-Peter Nilsson <hp@bitrange.com>
+
+ PR gas/2101
+ * config/tc-mmix.c (mmix_handle_mmixal): Don't treat #[0-9][FB] as
+ a local-label reference.
+
+For older changes see ChangeLog-2005
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/gas/Makefile.am b/gas/Makefile.am
index 08b9842fc6be..670423660d01 100644
--- a/gas/Makefile.am
+++ b/gas/Makefile.am
@@ -1,9 +1,7 @@
## Process this file with automake to generate Makefile.in
-## Work around apparent automake bug.
-INTLLIBS = @INTLLIBS@
-
AUTOMAKE_OPTIONS = 1.8 cygnus dejagnu
+ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd
SUBDIRS = doc po
# Automake should figure this out on its own. It doesn't, because
@@ -15,6 +13,10 @@ tooldir = $(exec_prefix)/$(target_alias)
YACC = `if [ -f ../bison/bison ] ; then echo ../bison/bison -y -L../bison/bison ; else echo @YACC@ ; fi`
LEX = `if [ -f ../flex/flex ] ; then echo ../flex/flex ; else echo @LEX@ ; fi`
+# We have to set this, because autoconf 2.59 does not substitute YFLAGS.
+# Autoconf 2.61 does, so this can be removed when we upgrade.
+YFLAGS =
+
WARN_CFLAGS = @WARN_CFLAGS@
NO_WERROR = @NO_WERROR@
AM_CFLAGS = $(WARN_CFLAGS)
@@ -33,7 +35,7 @@ ATOF_TARG_C = $(srcdir)/config/atof-@atof@.c
ATOF_TARG_O = atof-@atof@.o
# use @target_cpu_type@ for refering to configured target name
-IT_HDRS=itbl-parse.h $(srcdir)/itbl-ops.h
+IT_HDRS=itbl-parse.h $(srcdir)/itbl-ops.h
IT_SRCS=itbl-parse.c itbl-lex.c $(srcdir)/itbl-ops.c
IT_DEPS=$(srcdir)/itbl-parse.y $(srcdir)/itbl-lex.l $(srcdir)/config/itbl-@target_cpu_type@.h
IT_OBJS=itbl-parse.o itbl-lex.o itbl-ops.o
@@ -46,6 +48,7 @@ CPU_TYPES = \
arm \
avr \
bfin \
+ cr16 \
cris \
crx \
d10v \
@@ -55,22 +58,25 @@ CPU_TYPES = \
frv \
h8300 \
hppa \
- ia64 \
i370 \
i386 \
i860 \
i960 \
+ ia64 \
ip2k \
m32c \
m32r \
m68hc11 \
m68k \
+ maxq \
mcore \
+ mep \
mips \
mmix \
mn10200 \
mn10300 \
msp430 \
+ mt \
ns32k \
openrisc \
or32 \
@@ -78,16 +84,18 @@ CPU_TYPES = \
pj \
ppc \
s390 \
+ score \
sh \
sh64 \
sparc \
+ spu \
tic30 \
tic4x \
tic54x \
- vax \
v850 \
- xstormy16 \
+ vax \
xc16x \
+ xstormy16 \
xtensa \
z80 \
z8k
@@ -100,8 +108,7 @@ OBJ_FORMATS = \
coff \
ecoff \
elf \
- evax \
- ieee
+ evax
# This is an sh case which sets valid according to whether the CPU
# type in the shell variable c and the OS type in the shell variable o
@@ -116,16 +123,20 @@ CPU_OBJ_VALID = \
arm | cris | i386 | m68k | ns32k | pdp11 | sparc | tic30 | vax) \
valid=yes ;; \
esac ;; \
- coff) valid=yes; \
+ coff) \
case $$c in \
- cris | i860 | mmix | sh64) \
- valid= ;; \
+ arm | h8300 | i386 | i960 | m68k | maxq | mcore | mips | or32 \
+ | ppc | sh | sparc | tic* | xscale | z80 | z8k) \
+ valid=yes ;; \
esac ;; \
ecoff) \
case $$c in \
mips | alpha) valid=yes ;; \
esac ;; \
- elf) valid=yes ;; \
+ elf) valid=yes ; \
+ case $$c in \
+ maxq | ns32k | tic* | z80 | z8k) valid= ;; \
+ esac ;; \
evax) \
case $$c in \
alpha) valid=yes ;; \
@@ -230,6 +241,7 @@ TARGET_CPU_CFILES = \
config/tc-arm.c \
config/tc-avr.c \
config/tc-bfin.c \
+ config/tc-cr16.c \
config/tc-cris.c \
config/tc-crx.c \
config/tc-d10v.c \
@@ -250,6 +262,7 @@ TARGET_CPU_CFILES = \
config/tc-m68hc11.c \
config/tc-m68k.c \
config/tc-mcore.c \
+ config/tc-mep.c \
config/tc-mips.c \
config/tc-mmix.c \
config/tc-mn10200.c \
@@ -262,9 +275,11 @@ TARGET_CPU_CFILES = \
config/tc-pj.c \
config/tc-ppc.c \
config/tc-s390.c \
+ config/tc-score.c \
config/tc-sh.c \
config/tc-sh64.c \
config/tc-sparc.c \
+ config/tc-spu.c \
config/tc-tic30.c \
config/tc-tic54x.c \
config/tc-vax.c \
@@ -281,6 +296,7 @@ TARGET_CPU_HFILES = \
config/tc-arm.h \
config/tc-avr.h \
config/tc-bfin.h \
+ config/tc-cr16.h \
config/tc-cris.h \
config/tc-crx.h \
config/tc-d10v.h \
@@ -301,6 +317,7 @@ TARGET_CPU_HFILES = \
config/tc-m68hc11.h \
config/tc-m68k.h \
config/tc-mcore.h \
+ config/tc-mep.h \
config/tc-mips.h \
config/tc-mmix.h \
config/tc-mn10200.h \
@@ -313,9 +330,11 @@ TARGET_CPU_HFILES = \
config/tc-pj.h \
config/tc-ppc.h \
config/tc-s390.h \
+ config/tc-score.h \
config/tc-sh.h \
config/tc-sh64.h \
config/tc-sparc.h \
+ config/tc-spu.h \
config/tc-tic30.h \
config/tc-tic54x.h \
config/tc-vax.h \
@@ -334,7 +353,6 @@ OBJ_FORMAT_CFILES = \
config/obj-ecoff.c \
config/obj-elf.c \
config/obj-evax.c \
- config/obj-ieee.c \
config/obj-som.c
OBJ_FORMAT_HFILES = \
@@ -343,7 +361,6 @@ OBJ_FORMAT_HFILES = \
config/obj-ecoff.h \
config/obj-elf.h \
config/obj-evax.h \
- config/obj-ieee.h \
config/obj-som.h
# Emulation header files in config
@@ -381,7 +398,8 @@ TARG_ENV_HFILES = \
config/te-sun3.h \
config/te-svr4.h \
config/te-symbian.h \
- config/te-tmips.h
+ config/te-tmips.h \
+ config/te-wince-pe.h
# Multi files in config
@@ -464,13 +482,18 @@ INCDIR = $(BASEDIR)/include
# Both . and srcdir are used, in that order,
# so that tm.h and config.h will be found in the compilation
# subdirectory rather than in the source directory.
-INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(srcdir)/config -I$(INCDIR) -I$(srcdir)/.. -I$(BFDDIR) -I$(srcdir)/../intl -I../intl -DLOCALEDIR="\"$(datadir)/locale\""
+INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(srcdir)/config \
+ -I$(INCDIR) -I$(srcdir)/.. -I$(BFDDIR) @INCINTL@ \
+ -DLOCALEDIR="\"$(datadir)/locale\""
# This should be parallel to INCLUDES, but should replace $(srcdir)
# with $${srcdir}, and should work in a subdirectory. This is used
# when building dependencies, because the dependency building is done
# in a subdirectory.
-DEP_INCLUDES = -D_GNU_SOURCE -I.. -I$${srcdir} -I../../bfd -I$${srcdir}/config -I$${srcdir}/../include -I$${srcdir}/.. -I$${srcdir}/../bfd -I$${srcdir}/../intl -I../../intl -DLOCALEDIR="\"$(datadir)/locale\""
+DEP_INCLUDES = -D_GNU_SOURCE -I.. -I$${srcdir} -I../../bfd \
+ -I$${srcdir}/config -I$${srcdir}/../include -I$${srcdir}/.. \
+ -I$${srcdir}/../bfd @INCINTL@ \
+ -DLOCALEDIR="\"$(datadir)/locale\""
DEP_FLAGS = -DOBJ_MAYBE_ELF \
-I. -I.. -I$${srcdir} -I../../bfd $(DEP_INCLUDES)
@@ -478,25 +501,22 @@ DEP_FLAGS = -DOBJ_MAYBE_ELF \
# How to link with both our special library facilities
# and the system's installed libraries.
-GASLIBS = @OPCODES_LIB@ @BFDLIB@ ../libiberty/libiberty.a
+GASLIBS = @OPCODES_LIB@ ../bfd/libbfd.la ../libiberty/libiberty.a
# Files to be copied away after each stage in building.
STAGESTUFF = *.o $(noinst_PROGRAMS)
-BFDVER_H = @BFDVER_H@
-
-$(OBJS): @ALL_OBJ_DEPS@
-
as_new_SOURCES = $(GAS_CFILES)
as_new_LDADD = $(TARG_CPU_O) $(OBJ_FORMAT_O) $(ATOF_TARG_O) \
- $(extra_objects) $(GASLIBS) $(INTLLIBS) $(LIBM)
+ $(extra_objects) $(GASLIBS) $(LIBINTL) $(LIBM)
as_new_DEPENDENCIES = $(TARG_CPU_O) $(OBJ_FORMAT_O) $(ATOF_TARG_O) \
- $(extra_objects) $(GASLIBS) $(INTLDEPS)
+ $(extra_objects) $(GASLIBS) $(LIBINTL_DEP)
# Stuff that every object file depends upon. If anything is removed
# from this list, remove it from dep-in.sed as well.
-$(OBJS): $(INCDIR)/bin-bugs.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(INCDIR)/progress.h $(INCDIR)/fopen-same.h \
+$(OBJS): ../bfd/bfd.h $(INCDIR)/symcat.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h $(INCDIR)/progress.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/fopen-bin.h $(INCDIR)/fopen-vms.h \
$(OBJ_FORMAT_H) $(TARG_CPU_H) $(TARG_ENV_H) \
as.h asintl.h bignum.h bit_fix.h config.h emul.h expr.h flonum.h \
frags.h hash.h listing.h obj.h read.h symbols.h tc.h write.h
@@ -540,18 +560,16 @@ ecoff.o : ecoff.c ecoff.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \
# We need all these explicit rules for the multi stuff. Because of
# these rules, we don't need one for OBJ_FORMAT_O.
-obj-aout.o : $(srcdir)/config/obj-aout.c
+obj-aout.o : $(srcdir)/config/obj-aout.c $(DEP_@target_cpu_type@_aout)
$(COMPILE) -c $(srcdir)/config/obj-aout.c
-obj-coff.o: $(srcdir)/config/obj-coff.c
+obj-coff.o: $(srcdir)/config/obj-coff.c $(DEP_@target_cpu_type@_coff)
$(COMPILE) -c $(srcdir)/config/obj-coff.c
-obj-ecoff.o : $(srcdir)/config/obj-ecoff.c
+obj-ecoff.o : $(srcdir)/config/obj-ecoff.c $(DEP_@target_cpu_type@_ecoff)
$(COMPILE) -c $(srcdir)/config/obj-ecoff.c
-obj-elf.o : $(srcdir)/config/obj-elf.c
+obj-elf.o : $(srcdir)/config/obj-elf.c $(DEP_@target_cpu_type@_elf)
$(COMPILE) -c $(srcdir)/config/obj-elf.c
obj-evax.o : $(srcdir)/config/obj-evax.c
$(COMPILE) -c $(srcdir)/config/obj-evax.c
-obj-ieee.o : $(srcdir)/config/obj-ieee.c
- $(COMPILE) -c $(srcdir)/config/obj-ieee.c
obj-multi.o : $(srcdir)/config/obj-multi.c
$(COMPILE) -c $(srcdir)/config/obj-multi.c
obj-som.o : $(srcdir)/config/obj-som.c
@@ -602,7 +620,7 @@ m68k-parse.c: $(srcdir)/config/m68k-parse.y
rm -f m68k-parse.y; \
else true; fi
# Disable -Werror, if it has been enabled, since old versions of bison/
-# yacc will produce working code which contain compile time warnings.
+# yacc will produce working code which contain compile time warnings.
m68k-parse.o: m68k-parse.c $(srcdir)/config/m68k-parse.h
$(COMPILE) -c $< $(NO_WERROR)
@@ -629,12 +647,12 @@ bfin-lex.o: bfin-lex.c bfin-parse.h $(srcdir)/config/bfin-defs.h
itbl-lex.c: $(srcdir)/itbl-lex.l
# Disable -Werror, if it has been enabled, since old versions of bison/
-# yacc will produce working code which contain compile time warnings.
+# yacc will produce working code which contain compile time warnings.
itbl-lex.o: itbl-lex.c itbl-parse.h $(srcdir)/itbl-lex.h
$(COMPILE) -c $< $(NO_WERROR)
# Disable -Werror, if it has been enabled, since old versions of bison/
-# yacc will produce working code which contain compile time warnings.
+# yacc will produce working code which contain compile time warnings.
itbl-parse.o: itbl-parse.c itbl-parse.h $(srcdir)/itbl-ops.h $(srcdir)/itbl-lex.h
$(COMPILE) -c $< $(NO_WERROR)
@@ -988,582 +1006,443 @@ dep-am: DEP
.PHONY: dep dep-in dep-am
AMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW.
-DEPTC_alpha_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-alpha.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h ecoff.h $(INCDIR)/opcode/alpha.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h $(INCDIR)/safe-ctype.h $(srcdir)/config/atof-vax.c
-DEPTC_alpha_ecoff = $(INCDIR)/symcat.h $(srcdir)/config/obj-ecoff.h \
- $(srcdir)/config/tc-alpha.h ecoff.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/ecoff.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/opcode/alpha.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h $(INCDIR)/safe-ctype.h $(srcdir)/config/atof-vax.c
-DEPTC_alpha_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-alpha.h \
+DEPTC_alpha_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-alpha.h \
+ ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
subsegs.h $(INCDIR)/obstack.h struc-symbol.h ecoff.h \
- $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h $(INCDIR)/opcode/alpha.h \
- $(INCDIR)/elf/alpha.h $(INCDIR)/elf/reloc-macros.h \
- dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/safe-ctype.h \
- $(srcdir)/config/atof-vax.c
-DEPTC_alpha_evax = $(INCDIR)/symcat.h $(srcdir)/config/obj-evax.h \
- $(srcdir)/config/tc-alpha.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h ecoff.h $(INCDIR)/opcode/alpha.h dw2gencfi.h \
+ $(INCDIR)/opcode/alpha.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ $(INCDIR)/safe-ctype.h $(srcdir)/config/atof-vax.c
+DEPTC_alpha_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-alpha.h subsegs.h \
+ $(INCDIR)/obstack.h struc-symbol.h ecoff.h $(INCDIR)/coff/sym.h \
+ $(INCDIR)/coff/ecoff.h $(INCDIR)/opcode/alpha.h $(INCDIR)/elf/alpha.h \
+ $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h dw2gencfi.h \
$(INCDIR)/elf/dwarf2.h $(INCDIR)/safe-ctype.h $(srcdir)/config/atof-vax.c
-DEPTC_arc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-arc.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h struc-symbol.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+DEPTC_alpha_evax = $(srcdir)/config/obj-evax.h $(srcdir)/config/tc-alpha.h \
+ subsegs.h $(INCDIR)/obstack.h struc-symbol.h ecoff.h \
+ $(INCDIR)/opcode/alpha.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ $(INCDIR)/safe-ctype.h $(srcdir)/config/atof-vax.c
+DEPTC_arc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h dwarf2dbg.h \
+ struc-symbol.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/arc.h $(srcdir)/../opcodes/arc-ext.h \
$(INCDIR)/elf/arc.h $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h
-DEPTC_arc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h \
- dwarf2dbg.h struc-symbol.h $(INCDIR)/safe-ctype.h subsegs.h \
- $(INCDIR)/obstack.h $(INCDIR)/opcode/arc.h $(srcdir)/../opcodes/arc-ext.h \
- $(INCDIR)/elf/arc.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_arm_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-arm.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/arm.h
-DEPTC_arm_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-arm.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h subsegs.h \
- $(INCDIR)/obstack.h $(INCDIR)/opcode/arm.h
-DEPTC_arm_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/arm.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h \
- dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
-DEPTC_avr_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-avr.h $(INCDIR)/coff/internal.h \
+DEPTC_arm_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-arm.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h $(INCDIR)/opcode/arm.h \
+ dwarf2dbg.h
+DEPTC_arm_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-arm.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/avr.h
-DEPTC_avr_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h $(INCDIR)/opcode/arm.h \
+ dwarf2dbg.h
+DEPTC_arm_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h $(INCDIR)/opcode/arm.h \
+ $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h dw2gencfi.h \
+ $(INCDIR)/elf/dwarf2.h dwarf2dbg.h
+DEPTC_avr_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/avr.h
-DEPTC_bfin_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-bfin.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h struc-symbol.h \
- $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h dwarf2dbg.h \
- $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h \
- $(srcdir)/config/bfin-aux.h $(INCDIR)/opcode/bfin.h \
- $(srcdir)/config/bfin-defs.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/bfin.h $(BFDDIR)/libbfd.h
-DEPTC_bfin_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h \
- dwarf2dbg.h struc-symbol.h $(srcdir)/config/bfin-defs.h \
- $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h $(srcdir)/config/bfin-aux.h \
- $(INCDIR)/opcode/bfin.h $(srcdir)/config/bfin-defs.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/bfin.h $(BFDDIR)/libbfd.h
-DEPTC_cris_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-cris.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
+DEPTC_bfin_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h dwarf2dbg.h \
+ struc-symbol.h $(srcdir)/config/bfin-defs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/safe-ctype.h dwarf2dbg.h $(BFDDIR)/libbfd.h \
+ $(INCDIR)/hashtab.h $(INCDIR)/elf/common.h $(INCDIR)/elf/bfin.h \
+ $(INCDIR)/elf/reloc-macros.h $(srcdir)/config/bfin-aux.h \
+ $(srcdir)/config/bfin-defs.h $(INCDIR)/opcode/bfin.h
+DEPTC_cr16_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cr16.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h dwarf2dbg.h $(INCDIR)/opcode/cr16.h \
+ $(INCDIR)/elf/cr16.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/cris.h \
+ dwarf2dbg.h
+DEPTC_cris_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/cris.h dwarf2dbg.h
-DEPTC_cris_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/cris.h
-DEPTC_crx_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-crx.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- dwarf2dbg.h $(INCDIR)/opcode/crx.h $(INCDIR)/elf/crx.h \
- $(INCDIR)/elf/reloc-macros.h
-DEPTC_crx_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-crx.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/crx.h \
+DEPTC_crx_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-crx.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h dwarf2dbg.h $(INCDIR)/opcode/crx.h \
$(INCDIR)/elf/crx.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_d10v_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-d10v.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+DEPTC_d10v_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d10v.h $(INCDIR)/safe-ctype.h \
subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/d10v.h \
$(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_d10v_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d10v.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/d10v.h $(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_d30v_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-d30v.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+DEPTC_d30v_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d30v.h $(INCDIR)/safe-ctype.h \
subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/d30v.h
-DEPTC_d30v_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
+DEPTC_dlx_elf = $(INCDIR)/safe-ctype.h $(srcdir)/config/obj-elf.h \
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d30v.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-dlx.h \
+ dwarf2dbg.h $(srcdir)/config/tc-dlx.h $(INCDIR)/opcode/dlx.h
+DEPTC_fr30_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-fr30.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/d30v.h
-DEPTC_dlx_coff = $(INCDIR)/safe-ctype.h $(INCDIR)/symcat.h \
- $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-dlx.h \
- $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/opcode/dlx.h
-DEPTC_dlx_elf = $(INCDIR)/safe-ctype.h $(INCDIR)/symcat.h \
- $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
- $(srcdir)/config/tc-dlx.h dwarf2dbg.h $(INCDIR)/opcode/dlx.h
-DEPTC_fr30_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-fr30.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/fr30-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/fr30-opc.h cgen.h
-DEPTC_fr30_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-fr30.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(srcdir)/../opcodes/fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/fr30-opc.h \
- cgen.h
-DEPTC_frv_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-frv.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/frv-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/frv-opc.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(srcdir)/../opcodes/fr30-opc.h cgen.h
+DEPTC_frv_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-frv.h subsegs.h \
+ $(INCDIR)/obstack.h $(srcdir)/../opcodes/frv-desc.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/frv-opc.h \
cgen.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/frv.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_frv_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-frv.h \
- subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/frv-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/frv-opc.h cgen.h $(BFDDIR)/libbfd.h \
- $(INCDIR)/hashtab.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_h8300_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-h8300.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/h8300.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h \
- $(INCDIR)/opcode/h8300.h $(INCDIR)/safe-ctype.h
-DEPTC_h8300_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-h8300.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/h8300.h \
+DEPTC_h8300_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-h8300.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/h8300.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
+ dwarf2dbg.h $(INCDIR)/opcode/h8300.h $(INCDIR)/safe-ctype.h
+DEPTC_h8300_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-h8300.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h $(INCDIR)/opcode/h8300.h \
$(INCDIR)/safe-ctype.h $(INCDIR)/elf/h8.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_hppa_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-hppa.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(BFDDIR)/libhppa.h $(INCDIR)/opcode/hppa.h
-DEPTC_hppa_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h \
- $(BFDDIR)/elf32-hppa.h $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h \
+DEPTC_hppa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h $(BFDDIR)/elf32-hppa.h \
+ $(BFDDIR)/elf-bfd.h $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h \
$(INCDIR)/elf/reloc-macros.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/hppa.h \
- dwarf2dbg.h
-DEPTC_ia64_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ia64.h $(INCDIR)/opcode/ia64.h \
- $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h
-DEPTC_ia64_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ia64.h \
- $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/safe-ctype.h dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h
-DEPTC_i370_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-i370.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h struc-symbol.h $(INCDIR)/opcode/i370.h
-DEPTC_i370_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i370.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ subsegs.h $(INCDIR)/obstack.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ $(BFDDIR)/libhppa.h $(INCDIR)/opcode/hppa.h dwarf2dbg.h
+DEPTC_i370_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i370.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
struc-symbol.h $(INCDIR)/opcode/i370.h $(INCDIR)/elf/i370.h \
$(INCDIR)/elf/reloc-macros.h
-DEPTC_i386_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-i386.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
+DEPTC_i386_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-i386.h \
+ $(srcdir)/../opcodes/i386-opc.h $(INCDIR)/opcode/i386.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h dw2gencfi.h \
+ $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_i386_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i386.h \
+ $(srcdir)/../opcodes/i386-opc.h $(INCDIR)/opcode/i386.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h dw2gencfi.h \
+ $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_i386_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i386.h $(srcdir)/../opcodes/i386-opc.h \
+ $(INCDIR)/opcode/i386.h dwarf2dbg.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h dw2gencfi.h \
+ $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_i860_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i860.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/i386.h \
- $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_i386_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-i386.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h subsegs.h \
- $(INCDIR)/obstack.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
- $(INCDIR)/opcode/i386.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_i386_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i386.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/i386.h \
- $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_i860_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i860.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/i860.h $(INCDIR)/elf/i860.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_i960_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-i960.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/i960.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h $(INCDIR)/opcode/i960.h
-DEPTC_i960_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i960.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
+DEPTC_i960_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i960.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/i960.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/i960.h
-DEPTC_ip2k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ip2k.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/ip2k-opc.h \
- cgen.h $(INCDIR)/elf/common.h $(INCDIR)/elf/ip2k.h \
- $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h
-DEPTC_ip2k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ip2k.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/ip2k-desc.h \
+DEPTC_i960_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i960.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h $(INCDIR)/opcode/i960.h
+DEPTC_ia64_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ia64.h $(INCDIR)/opcode/ia64.h \
+ $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/safe-ctype.h \
+ dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/ia64.h \
+ $(INCDIR)/elf/ia64.h
+DEPTC_ip2k_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ip2k.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/ip2k-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/ip2k-opc.h cgen.h $(INCDIR)/elf/ip2k.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/ip2k-opc.h \
+ cgen.h $(INCDIR)/elf/common.h $(INCDIR)/elf/ip2k.h \
$(INCDIR)/elf/reloc-macros.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h
-DEPTC_m32c_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m32c.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/m32c-opc.h \
- $(srcdir)/../opcodes/cgen-types.h $(srcdir)/../opcodes/cgen-ops.h \
- cgen.h $(INCDIR)/elf/common.h $(INCDIR)/elf/m32c.h \
- $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h \
- $(INCDIR)/safe-ctype.h
-DEPTC_m32c_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32c.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/m32c-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/m32c-opc.h $(srcdir)/../opcodes/cgen-types.h \
- $(srcdir)/../opcodes/cgen-ops.h cgen.h $(INCDIR)/elf/m32c.h \
- $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h \
- $(INCDIR)/safe-ctype.h
-DEPTC_m32r_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m32r.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/m32r-desc.h \
+DEPTC_m32c_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32c.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/m32c-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/m32c-opc.h \
+ $(srcdir)/../opcodes/cgen-types.h ../bfd/bfd_stdint.h \
+ $(srcdir)/../opcodes/cgen-ops.h cgen.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/m32c.h $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/libbfd.h \
+ $(INCDIR)/hashtab.h $(INCDIR)/safe-ctype.h
+DEPTC_m32r_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32r.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(srcdir)/../opcodes/m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/opcode/cgen-bitset.h \
$(srcdir)/../opcodes/m32r-opc.h cgen.h $(INCDIR)/elf/m32r.h \
$(INCDIR)/elf/reloc-macros.h
-DEPTC_m32r_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32r.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/m32r-opc.h \
- cgen.h $(INCDIR)/elf/m32r.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_m68hc11_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m68hc11.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h subsegs.h \
- $(INCDIR)/obstack.h $(INCDIR)/opcode/m68hc11.h dwarf2dbg.h \
- $(INCDIR)/elf/m68hc11.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_m68hc11_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68hc11.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/m68hc11.h $(INCDIR)/elf/m68hc11.h \
+DEPTC_m68hc11_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68hc11.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/opcode/m68hc11.h dwarf2dbg.h $(INCDIR)/elf/m68hc11.h \
$(INCDIR)/elf/reloc-macros.h
-DEPTC_m68k_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-m68k.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h subsegs.h \
- dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/m68k.h \
+DEPTC_m68k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-m68k.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h \
+ dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/m68k.h \
$(srcdir)/config/m68k-parse.h
-DEPTC_m68k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m68k.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
- subsegs.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
- $(INCDIR)/opcode/m68k.h $(srcdir)/config/m68k-parse.h
-DEPTC_m68k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68k.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h subsegs.h \
- dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/m68k.h \
+DEPTC_m68k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-m68k.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h \
+ dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/m68k.h \
+ $(srcdir)/config/m68k-parse.h
+DEPTC_m68k_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68k.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h \
+ dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/m68k.h \
$(srcdir)/config/m68k-parse.h $(INCDIR)/elf/m68k.h \
$(INCDIR)/elf/reloc-macros.h
-DEPTC_mcore_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mcore.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/mcore.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mcore-opc.h \
- $(INCDIR)/safe-ctype.h
-DEPTC_mcore_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mcore.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mcore-opc.h \
+DEPTC_maxq_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-maxq.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/maxq.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h $(srcdir)/config/tc-maxq.h \
+ $(INCDIR)/opcode/maxq.h
+DEPTC_mcore_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mcore.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/mcore.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
+ $(srcdir)/../opcodes/mcore-opc.h $(INCDIR)/safe-ctype.h
+DEPTC_mcore_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mcore.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mcore-opc.h \
$(INCDIR)/safe-ctype.h $(INCDIR)/elf/mcore.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_mips_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mips.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/opcode/mips.h itbl-ops.h dwarf2dbg.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+DEPTC_mep_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
$(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
- $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h ecoff.h \
- $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h
-DEPTC_mips_ecoff = $(INCDIR)/symcat.h $(srcdir)/config/obj-ecoff.h \
- $(srcdir)/config/tc-mips.h ecoff.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/ecoff.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mep.h dwarf2dbg.h \
+ dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mep-desc.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/mep-opc.h \
+ cgen.h $(INCDIR)/elf/common.h $(INCDIR)/elf/mep.h $(INCDIR)/elf/reloc-macros.h \
+ $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h $(INCDIR)/xregex.h \
+ $(INCDIR)/xregex2.h
+DEPTC_mips_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mips.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/safe-ctype.h $(INCDIR)/opcode/mips.h itbl-ops.h \
dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(srcdir)/config/obj-elf.h \
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/mips.h \
- $(INCDIR)/elf/reloc-macros.h
-DEPTC_mips_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mips.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h \
+ ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h
+DEPTC_mips_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-mips.h \
+ ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
subsegs.h $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h \
$(INCDIR)/opcode/mips.h itbl-ops.h dwarf2dbg.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h \
+ $(INCDIR)/elf/dwarf2.h $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h \
+ ecoff.h
+DEPTC_mips_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mips.h subsegs.h \
+ $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/mips.h \
+ itbl-ops.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ $(srcdir)/config/obj-elf.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h \
ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h
-DEPTC_mmix_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mmix.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/elf/mmix.h \
+DEPTC_mmix_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mmix.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/elf/mmix.h \
$(INCDIR)/elf/reloc-macros.h $(INCDIR)/opcode/mmix.h \
- $(INCDIR)/safe-ctype.h
-DEPTC_mn10200_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mn10200.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/mn10200.h
-DEPTC_mn10200_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10200.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/safe-ctype.h dwarf2dbg.h $(INCDIR)/obstack.h
+DEPTC_mn10200_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10200.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/mn10200.h
-DEPTC_mn10300_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mn10300.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/mn10300.h \
- dwarf2dbg.h
-DEPTC_mn10300_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/mn10300.h
-DEPTC_msp430_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-msp430.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/msp430.h $(INCDIR)/safe-ctype.h dwarf2dbg.h
-DEPTC_msp430_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/msp430.h \
- $(INCDIR)/safe-ctype.h
-DEPTC_ns32k_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-ns32k.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/opcode/ns32k.h $(INCDIR)/obstack.h
-DEPTC_ns32k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ns32k.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ns32k.h \
+DEPTC_mn10300_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/opcode/mn10300.h dwarf2dbg.h
+DEPTC_msp430_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/msp430.h \
+ $(INCDIR)/safe-ctype.h dwarf2dbg.h
+DEPTC_mt_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mt.h dwarf2dbg.h \
+ dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mt-desc.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/mt-opc.h \
+ cgen.h $(INCDIR)/elf/common.h $(INCDIR)/elf/mt.h $(INCDIR)/elf/reloc-macros.h \
+ $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h
+DEPTC_ns32k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-ns32k.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ns32k.h \
$(INCDIR)/obstack.h
-DEPTC_ns32k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h \
- dwarf2dbg.h $(INCDIR)/opcode/ns32k.h $(INCDIR)/obstack.h
-DEPTC_openrisc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-openrisc.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/openrisc-opc.h \
- cgen.h
-DEPTC_openrisc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-openrisc.h \
+DEPTC_openrisc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-openrisc.h \
dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/openrisc-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/openrisc-opc.h cgen.h
-DEPTC_or32_coff = $(INCDIR)/safe-ctype.h $(INCDIR)/symcat.h \
- $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-or32.h \
- $(INCDIR)/coff/internal.h $(INCDIR)/coff/or32.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/opcode/or32.h $(INCDIR)/elf/or32.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/openrisc-opc.h \
+ cgen.h
+DEPTC_or32_coff = $(INCDIR)/safe-ctype.h $(srcdir)/config/obj-coff.h \
+ $(srcdir)/config/tc-or32.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/or32.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/opcode/or32.h $(INCDIR)/elf/or32.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_or32_elf = $(INCDIR)/safe-ctype.h $(srcdir)/config/obj-elf.h \
+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-or32.h \
+ dwarf2dbg.h $(INCDIR)/opcode/or32.h $(INCDIR)/elf/or32.h \
$(INCDIR)/elf/reloc-macros.h
-DEPTC_or32_elf = $(INCDIR)/safe-ctype.h $(INCDIR)/symcat.h \
- $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
- $(srcdir)/config/tc-or32.h dwarf2dbg.h $(INCDIR)/opcode/or32.h \
- $(INCDIR)/elf/or32.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_pdp11_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-pdp11.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/pdp11.h
-DEPTC_pdp11_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-pdp11.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+DEPTC_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
$(INCDIR)/opcode/pdp11.h
-DEPTC_pdp11_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pdp11.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/pdp11.h
-DEPTC_pj_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-pj.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/opcode/pj.h
-DEPTC_pj_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pj.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/pj.h
-DEPTC_ppc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ppc.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+DEPTC_pdp11_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pdp11.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/pdp11.h
+DEPTC_pj_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pj.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/pj.h
+DEPTC_ppc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ppc.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h subsegs.h \
+ $(INCDIR)/obstack.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ $(INCDIR)/opcode/ppc.h
+DEPTC_ppc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/ppc.h
-DEPTC_ppc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/ppc.h \
- $(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_s390_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-s390.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h \
- dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/s390.h \
- $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_s390_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-s390.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/s390.h \
- $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_sh_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-sh.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/sh-opc.h \
- $(INCDIR)/safe-ctype.h struc-symbol.h dwarf2dbg.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h
-DEPTC_sh_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h \
- subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/sh-opc.h \
- $(INCDIR)/safe-ctype.h struc-symbol.h $(INCDIR)/elf/sh.h \
- $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h
-DEPTC_sh64_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh64.h \
- $(srcdir)/config/tc-sh.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
- $(BFDDIR)/elf32-sh64.h $(INCDIR)/safe-ctype.h $(srcdir)/../opcodes/sh64-opc.h \
+ $(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h
+DEPTC_s390_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-s390.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ struc-symbol.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ $(INCDIR)/opcode/s390.h $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_score_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-score.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/opcode/score-inst.h $(INCDIR)/opcode/score-datadep.h \
+ struc-symbol.h $(INCDIR)/elf/score.h $(INCDIR)/elf/reloc-macros.h \
+ dwarf2dbg.h
+DEPTC_sh_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sh.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
+ $(srcdir)/../opcodes/sh-opc.h $(INCDIR)/safe-ctype.h \
+ struc-symbol.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
+DEPTC_sh_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h subsegs.h \
+ $(INCDIR)/obstack.h $(srcdir)/../opcodes/sh-opc.h $(INCDIR)/safe-ctype.h \
+ struc-symbol.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
+ dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
+DEPTC_sh64_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh64.h $(srcdir)/config/tc-sh.h \
+ $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/elf32-sh64.h \
+ $(INCDIR)/safe-ctype.h $(srcdir)/../opcodes/sh64-opc.h \
$(srcdir)/config/tc-sh.c subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/sh-opc.h struc-symbol.h dwarf2dbg.h \
+ $(srcdir)/../opcodes/sh-opc.h $(INCDIR)/safe-ctype.h \
+ struc-symbol.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
+DEPTC_sparc_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-sparc.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/sparc.h \
dw2gencfi.h $(INCDIR)/elf/dwarf2.h
-DEPTC_sparc_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-sparc.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
+DEPTC_sparc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sparc.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/sparc.h \
+ dw2gencfi.h $(INCDIR)/elf/dwarf2.h
+DEPTC_sparc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sparc.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/sparc.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
-DEPTC_sparc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-sparc.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h subsegs.h \
- $(INCDIR)/obstack.h $(INCDIR)/opcode/sparc.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h
-DEPTC_sparc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sparc.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/sparc.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
- $(INCDIR)/elf/sparc.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_tic30_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-tic30.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/tic30.h
-DEPTC_tic30_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-tic30.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/tic30.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/tic30.h
-DEPTC_tic30_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic30.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/tic30.h
-DEPTC_tic4x_coff = $(INCDIR)/safe-ctype.h $(INCDIR)/symcat.h \
- $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic4x.h \
- $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic4x.h $(INCDIR)/coff/ti.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/tic4x.h \
- subsegs.h $(INCDIR)/obstack.h
-DEPTC_tic4x_elf = $(INCDIR)/safe-ctype.h $(INCDIR)/symcat.h \
- $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
- $(srcdir)/config/tc-tic4x.h dwarf2dbg.h $(INCDIR)/opcode/tic4x.h \
- subsegs.h $(INCDIR)/obstack.h
-DEPTC_tic54x_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-tic54x.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h sb.h macro.h \
- subsegs.h $(INCDIR)/obstack.h struc-symbol.h $(INCDIR)/opcode/tic54x.h
-DEPTC_tic54x_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic54x.h \
- $(INCDIR)/safe-ctype.h sb.h macro.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/opcode/tic54x.h $(srcdir)/config/obj-coff.h \
+ $(INCDIR)/elf/sparc.h $(INCDIR)/elf/reloc-macros.h \
+ dwarf2dbg.h
+DEPTC_spu_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-spu.h $(INCDIR)/opcode/spu.h \
+ $(INCDIR)/opcode/spu-insns.h dwarf2dbg.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h $(INCDIR)/opcode/spu-insns.h
+DEPTC_tic30_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-tic30.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/opcode/tic30.h
+DEPTC_tic30_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic30.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic30.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/opcode/tic30.h
+DEPTC_tic4x_coff = $(INCDIR)/safe-ctype.h $(srcdir)/config/obj-coff.h \
+ $(srcdir)/config/tc-tic4x.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/tic4x.h $(INCDIR)/coff/ti.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/opcode/tic4x.h subsegs.h \
+ $(INCDIR)/obstack.h $(INCDIR)/obstack.h
+DEPTC_tic54x_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic54x.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h \
- $(BFDDIR)/libcoff.h
-DEPTC_vax_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-vax.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(srcdir)/config/vax-inst.h $(INCDIR)/obstack.h subsegs.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/vax.h
-DEPTC_vax_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-vax.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(srcdir)/config/vax-inst.h \
- $(INCDIR)/obstack.h subsegs.h $(INCDIR)/safe-ctype.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ sb.h macro.h subsegs.h $(INCDIR)/obstack.h struc-symbol.h \
+ $(INCDIR)/opcode/tic54x.h $(srcdir)/config/obj-coff.h
+DEPTC_v850_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-v850.h $(INCDIR)/elf/v850.h \
+ $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/v850.h \
+ dwarf2dbg.h
+DEPTC_vax_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-vax.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(srcdir)/config/vax-inst.h \
+ $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h \
$(INCDIR)/opcode/vax.h
-DEPTC_vax_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-vax.h \
- dwarf2dbg.h $(srcdir)/config/vax-inst.h $(INCDIR)/obstack.h \
- subsegs.h $(INCDIR)/safe-ctype.h $(INCDIR)/elf/vax.h \
+DEPTC_vax_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-vax.h dwarf2dbg.h \
+ $(srcdir)/config/vax-inst.h $(INCDIR)/obstack.h subsegs.h \
+ $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h $(INCDIR)/elf/vax.h \
$(INCDIR)/elf/reloc-macros.h $(INCDIR)/opcode/vax.h
-DEPTC_v850_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-v850.h $(INCDIR)/elf/v850.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/v850.h dwarf2dbg.h
-DEPTC_v850_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-v850.h \
- $(INCDIR)/elf/v850.h $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h \
+DEPTC_xc16x_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xc16x.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/v850.h
-DEPTC_xstormy16_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-xstormy16.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/xstormy16-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/xstormy16-opc.h \
- cgen.h
-DEPTC_xstormy16_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xstormy16.h \
+ $(srcdir)/../opcodes/xc16x-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(srcdir)/../opcodes/xc16x-opc.h cgen.h dwarf2dbg.h \
+ $(INCDIR)/elf/xc16x.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_xstormy16_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xstormy16.h \
dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/xstormy16-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/xstormy16-opc.h cgen.h
-DEPTC_xc16x_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xc16x.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/xc16x-desc.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/xc16x-opc.h cgen.h
-DEPTC_xtensa_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xtensa.h \
- $(INCDIR)/xtensa-isa.h $(INCDIR)/xtensa-config.h sb.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/xstormy16-opc.h \
+ cgen.h
+DEPTC_xtensa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xtensa.h $(INCDIR)/xtensa-isa.h \
+ $(INCDIR)/xtensa-config.h sb.h $(INCDIR)/safe-ctype.h \
+ $(srcdir)/config/tc-xtensa.h subsegs.h $(INCDIR)/obstack.h \
$(srcdir)/config/xtensa-relax.h $(srcdir)/config/xtensa-istack.h \
- dwarf2dbg.h struc-symbol.h
-DEPTC_z80_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-z80.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/z80.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h subsegs.h \
- $(INCDIR)/obstack.h
-DEPTC_z80_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-z80.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h
-DEPTC_z8k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-z8k.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/z8k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h $(srcdir)/../opcodes/z8k-opc.h
-DEPTC_z8k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-z8k.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h $(srcdir)/../opcodes/z8k-opc.h
+ dwarf2dbg.h struc-symbol.h $(INCDIR)/xtensa-config.h
+DEPTC_z80_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-z80.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/z80.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h
+DEPTC_z8k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-z8k.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/z8k.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ $(srcdir)/../opcodes/z8k-opc.h
DEPTC_hppa_som = $(srcdir)/config/tc-hppa.h subsegs.h \
$(INCDIR)/obstack.h $(BFDDIR)/libhppa.h $(INCDIR)/opcode/hppa.h \
$(BFDDIR)/som.h
@@ -1572,483 +1451,364 @@ DEPTC_i386_multi = $(DEPTC_i386_aout) $(DEPTC_i386_coff) \
DEPTC_mips_multi = $(DEPTC_mips_coff) $(DEPTC_mips_ecoff) \
$(DEPTC_mips_elf)
DEPTC_cris_multi = $(DEPTC_cris_aout) $(DEPTC_cris_elf)
-DEPOBJ_alpha_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-alpha.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_alpha_ecoff = $(INCDIR)/symcat.h $(srcdir)/config/obj-ecoff.h \
- $(srcdir)/config/tc-alpha.h ecoff.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(BFDDIR)/libecoff.h
-DEPOBJ_alpha_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-alpha.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h ecoff.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/ecoff.h $(INCDIR)/elf/alpha.h $(INCDIR)/elf/reloc-macros.h \
+DEPOBJ_alpha_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-alpha.h \
+ ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
+ $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+ $(BFDDIR)/libecoff.h
+DEPOBJ_alpha_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-alpha.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
+ $(INCDIR)/elf/alpha.h $(INCDIR)/elf/reloc-macros.h \
$(INCDIR)/aout/aout64.h
-DEPOBJ_alpha_evax = $(INCDIR)/symcat.h $(srcdir)/config/obj-evax.h \
- $(srcdir)/config/tc-alpha.h
-DEPOBJ_arc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-arc.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_arc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_arm_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-arm.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
-DEPOBJ_arm_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-arm.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_arm_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h \
+DEPOBJ_alpha_evax = $(srcdir)/config/obj-evax.h $(srcdir)/config/tc-alpha.h
+DEPOBJ_arc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_avr_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-avr.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_avr_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_bfin_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-bfin.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_bfin_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_cris_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-cris.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
-DEPOBJ_cris_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_crx_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-crx.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_crx_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-crx.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_d10v_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-d10v.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_arm_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-arm.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
+DEPOBJ_arm_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-arm.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_d10v_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d10v.h \
+ subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_arm_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_avr_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_d30v_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-d30v.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_d30v_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d30v.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_bfin_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_dlx_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-dlx.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_dlx_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-dlx.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_fr30_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-fr30.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_fr30_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-fr30.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_frv_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-frv.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_frv_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-frv.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
+DEPOBJ_cris_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_h8300_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-h8300.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/h8300.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_h8300_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-h8300.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_hppa_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-hppa.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_crx_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-crx.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_d10v_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d10v.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_d30v_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d30v.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_dlx_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-dlx.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_fr30_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-fr30.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_frv_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-frv.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_h8300_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-h8300.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/h8300.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_hppa_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h \
- $(BFDDIR)/elf32-hppa.h $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h \
+ subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_h8300_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-h8300.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_hppa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h $(BFDDIR)/elf32-hppa.h \
+ $(BFDDIR)/elf-bfd.h $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h \
$(INCDIR)/elf/reloc-macros.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h \
- $(INCDIR)/aout/aout64.h
-DEPOBJ_ia64_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ia64.h $(INCDIR)/opcode/ia64.h \
- $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_ia64_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ia64.h \
- $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_i370_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i370.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_i370_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-i370.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/elf/i370.h \
+ $(INCDIR)/elf/reloc-macros.h $(INCDIR)/aout/aout64.h
+DEPOBJ_i386_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-i386.h \
+ $(srcdir)/../opcodes/i386-opc.h $(INCDIR)/opcode/i386.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
+DEPOBJ_i386_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i386.h \
+ $(srcdir)/../opcodes/i386-opc.h $(INCDIR)/opcode/i386.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_i370_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i370.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/elf/i370.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/aout/aout64.h
-DEPOBJ_i386_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-i386.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
-DEPOBJ_i386_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-i386.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_i386_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i386.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h \
+ subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_i386_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i386.h $(srcdir)/../opcodes/i386-opc.h \
+ $(INCDIR)/opcode/i386.h dwarf2dbg.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h \
$(INCDIR)/aout/aout64.h
-DEPOBJ_i860_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i860.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_i960_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-i960.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/i960.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_i960_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i960.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_ip2k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ip2k.h $(INCDIR)/coff/internal.h \
+DEPOBJ_i860_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i860.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_i960_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i960.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/i960.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_i960_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i960.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_ia64_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ia64.h $(INCDIR)/opcode/ia64.h \
+ $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_ip2k_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ip2k.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_m32c_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32c.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_m32r_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32r.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_m68hc11_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68hc11.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_m68k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-m68k.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
+DEPOBJ_m68k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-m68k.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_ip2k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ip2k.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_m32c_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m32c.h $(INCDIR)/coff/internal.h \
+ subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_m68k_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68k.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_maxq_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-maxq.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/maxq.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_m32c_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32c.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_m32r_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m32r.h $(INCDIR)/coff/internal.h \
+ subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_mcore_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mcore.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/mcore.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_m32r_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32r.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_m68hc11_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m68hc11.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_m68hc11_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68hc11.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_m68k_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-m68k.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
-DEPOBJ_m68k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m68k.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_m68k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68k.h \
+ subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_mcore_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mcore.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_mcore_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mcore.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/mcore.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_mcore_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mcore.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_mips_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mips.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_mips_ecoff = $(INCDIR)/symcat.h $(srcdir)/config/obj-ecoff.h \
- $(srcdir)/config/tc-mips.h ecoff.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(BFDDIR)/libecoff.h
-DEPOBJ_mips_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mips.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_mep_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mep.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h ecoff.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/ecoff.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/aout/aout64.h
-DEPOBJ_mmix_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mmix.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_mn10200_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mn10200.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_mn10200_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10200.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_mn10300_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mn10300.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_mn10300_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_msp430_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-msp430.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/elf/mep.h \
+ $(INCDIR)/elf/reloc-macros.h $(INCDIR)/aout/aout64.h
+DEPOBJ_mips_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mips.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_msp430_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h \
+ subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_mips_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-mips.h \
+ ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
+ $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+ $(BFDDIR)/libecoff.h
+DEPOBJ_mips_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mips.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
+ $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/aout/aout64.h
+DEPOBJ_mmix_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mmix.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_mn10200_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10200.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_mn10300_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_msp430_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_mt_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mt.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_ns32k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-ns32k.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
+DEPOBJ_openrisc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-openrisc.h \
dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_ns32k_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-ns32k.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
-DEPOBJ_ns32k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ns32k.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_or32_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-or32.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/or32.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_or32_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-or32.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
+DEPOBJ_pdp11_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pdp11.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_pj_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pj.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_ppc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ppc.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_ppc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/elf/ppc.h \
+ $(INCDIR)/elf/reloc-macros.h $(INCDIR)/aout/aout64.h
+DEPOBJ_s390_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-s390.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_score_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-score.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_sh_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sh.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_ns32k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_openrisc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-openrisc.h $(INCDIR)/coff/internal.h \
+ subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_sh_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_sh64_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh64.h $(srcdir)/config/tc-sh.h \
+ $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/elf32-sh64.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_sparc_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-sparc.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
+DEPOBJ_sparc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sparc.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_openrisc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-openrisc.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_or32_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-or32.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/or32.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_or32_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-or32.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_pdp11_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-pdp11.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
-DEPOBJ_pdp11_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-pdp11.h $(INCDIR)/coff/internal.h \
+ subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_sparc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sparc.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_spu_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-spu.h $(INCDIR)/opcode/spu.h \
+ $(INCDIR)/opcode/spu-insns.h dwarf2dbg.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_tic30_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-tic30.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
+DEPOBJ_tic30_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic30.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic30.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_pdp11_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pdp11.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_pj_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-pj.h $(INCDIR)/coff/internal.h \
+ subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_tic4x_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic4x.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic4x.h $(INCDIR)/coff/ti.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_pj_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pj.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_ppc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ppc.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_ppc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/aout/aout64.h
-DEPOBJ_s390_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-s390.h $(INCDIR)/coff/internal.h \
+ subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_tic54x_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic54x.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_s390_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-s390.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_sh_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-sh.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_sh_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h \
+ subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_v850_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-v850.h $(INCDIR)/elf/v850.h \
+ $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_vax_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-vax.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
+DEPOBJ_vax_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-vax.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_sh64_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh64.h \
- $(srcdir)/config/tc-sh.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
- $(BFDDIR)/elf32-sh64.h $(INCDIR)/safe-ctype.h subsegs.h \
$(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_sparc_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-sparc.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
-DEPOBJ_sparc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-sparc.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_sparc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sparc.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_tic30_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-tic30.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
-DEPOBJ_tic30_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-tic30.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/tic30.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_tic30_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic30.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_tic4x_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-tic4x.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/tic4x.h $(INCDIR)/coff/ti.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_tic4x_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic4x.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_tic54x_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-tic54x.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_tic54x_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic54x.h \
+DEPOBJ_xc16x_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xc16x.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_vax_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-vax.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
-DEPOBJ_vax_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-vax.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_vax_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-vax.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_xstormy16_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xstormy16.h \
dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_v850_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-v850.h $(INCDIR)/elf/v850.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_v850_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-v850.h \
- $(INCDIR)/elf/v850.h $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_xstormy16_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-xstormy16.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_xtensa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xtensa.h $(INCDIR)/xtensa-isa.h \
+ $(INCDIR)/xtensa-config.h $(INCDIR)/safe-ctype.h subsegs.h \
+ $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_z80_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-z80.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/z80.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-DEPOBJ_xstormy16_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xstormy16.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_xc16x_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xc16x.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_xtensa_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xtensa.h \
- $(INCDIR)/xtensa-isa.h $(INCDIR)/xtensa-config.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h \
- $(INCDIR)/aout/aout64.h
-DEPOBJ_z80_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-z80.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/z80.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_z80_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-z80.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-DEPOBJ_z8k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-z8k.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/z8k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-DEPOBJ_z8k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-z8k.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+ subsegs.h $(INCDIR)/obstack.h
+DEPOBJ_z8k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-z8k.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/z8k.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
+ subsegs.h $(INCDIR)/obstack.h
DEPOBJ_hppa_som = $(srcdir)/config/obj-som.h subsegs.h \
$(INCDIR)/obstack.h $(BFDDIR)/libhppa.h $(BFDDIR)/som.h \
$(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
@@ -2057,354 +1817,309 @@ DEPOBJ_i386_multi = $(DEPOBJ_i386_aout) $(DEPOBJ_i386_coff) \
DEPOBJ_mips_multi = $(DEPOBJ_mips_coff) $(DEPOBJ_mips_ecoff) \
$(DEPOBJ_mips_elf)
DEPOBJ_cris_multi = $(DEPOBJ_cris_aout) $(DEPOBJ_cris_elf)
-DEP_alpha_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-alpha.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
DEP_alpha_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-alpha.h \
ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h
-DEP_alpha_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-alpha.h
+DEP_alpha_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-alpha.h
DEP_alpha_evax = $(srcdir)/config/obj-evax.h $(srcdir)/config/tc-alpha.h
-DEP_arc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-arc.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_arc_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h \
- dwarf2dbg.h
+DEP_arc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_arm_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-arm.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
DEP_arm_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-arm.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/arm.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_arm_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h
-DEP_avr_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-avr.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_avr_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h \
- dwarf2dbg.h
-DEP_bfin_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-bfin.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_bfin_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h \
- dwarf2dbg.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+DEP_arm_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h
+DEP_avr_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_bfin_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_cr16_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cr16.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
-DEP_cris_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h \
- dwarf2dbg.h
-DEP_crx_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-crx.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_crx_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-crx.h \
- dwarf2dbg.h
-DEP_d10v_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-d10v.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_d10v_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d10v.h
-DEP_d30v_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-d30v.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_d30v_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d30v.h
-DEP_dlx_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-dlx.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_dlx_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-dlx.h \
- dwarf2dbg.h
-DEP_fr30_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-fr30.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_fr30_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-fr30.h \
- dwarf2dbg.h
-DEP_frv_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-frv.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_frv_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-frv.h
+DEP_cris_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_crx_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-crx.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_d10v_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d10v.h
+DEP_d30v_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d30v.h
+DEP_dlx_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-dlx.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_fr30_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-fr30.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_frv_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-frv.h
DEP_h8300_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-h8300.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/h8300.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_h8300_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-h8300.h \
- dwarf2dbg.h
-DEP_hppa_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-hppa.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_hppa_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h \
- $(BFDDIR)/elf32-hppa.h $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h \
- $(INCDIR)/elf/reloc-macros.h
-DEP_ia64_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ia64.h \
- $(INCDIR)/opcode/ia64.h $(INCDIR)/symcat.h $(INCDIR)/elf/ia64.h \
- $(INCDIR)/elf/reloc-macros.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/h8300.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_ia64_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ia64.h \
- $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h
-DEP_i370_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i370.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_i370_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i370.h \
- dwarf2dbg.h
+DEP_h8300_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-h8300.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/h8300.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h
+DEP_hppa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h $(BFDDIR)/elf32-hppa.h \
+ $(BFDDIR)/elf-bfd.h $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h \
+ $(INCDIR)/elf/reloc-macros.h
+DEP_i370_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i370.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_i386_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-i386.h \
+ $(srcdir)/../opcodes/i386-opc.h $(INCDIR)/opcode/i386.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
DEP_i386_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i386.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/i386.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_i386_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i386.h \
- dwarf2dbg.h
-DEP_i860_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i860.h \
- dwarf2dbg.h
-DEP_i960_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i960.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/i960.h \
+ $(srcdir)/../opcodes/i386-opc.h $(INCDIR)/opcode/i386.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_i960_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i960.h \
- dwarf2dbg.h
-DEP_ip2k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ip2k.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_ip2k_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ip2k.h \
- dwarf2dbg.h
-DEP_m32c_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-m32c.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_m32c_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32c.h \
- dwarf2dbg.h
-DEP_m32r_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-m32r.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
+DEP_i386_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i386.h $(srcdir)/../opcodes/i386-opc.h \
+ $(INCDIR)/opcode/i386.h dwarf2dbg.h $(srcdir)/config/obj-coff.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h
+DEP_i860_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i860.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_i960_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i960.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/i960.h $(BFDDIR)/libcoff.h \
$(INCDIR)/bfdlink.h
-DEP_m32r_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32r.h \
- dwarf2dbg.h
-DEP_m68hc11_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-m68hc11.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/m68k.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_m68hc11_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68hc11.h \
- dwarf2dbg.h
+DEP_i960_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i960.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/i960.h $(BFDDIR)/libcoff.h
+DEP_ia64_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ia64.h $(INCDIR)/opcode/ia64.h \
+ $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h
+DEP_ip2k_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ip2k.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_m32c_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32c.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_m32r_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32r.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_m68hc11_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68hc11.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h
DEP_m68k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-m68k.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
DEP_m68k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-m68k.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/m68k.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_m68k_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68k.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+DEP_m68k_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68k.h
+DEP_maxq_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-maxq.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/maxq.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
DEP_mcore_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mcore.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/mcore.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_mcore_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mcore.h \
- dwarf2dbg.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/mcore.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+DEP_mcore_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mcore.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/mcore.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h
+DEP_mep_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mep.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_mips_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mips.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/mipspe.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
DEP_mips_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-mips.h \
ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h
-DEP_mips_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mips.h
-DEP_mmix_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mmix.h \
- dwarf2dbg.h
-DEP_mn10200_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mn10200.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_mn10200_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10200.h \
- dwarf2dbg.h
-DEP_mn10300_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mn10300.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_mn10300_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h \
- dwarf2dbg.h
-DEP_msp430_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-msp430.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_msp430_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h \
- dwarf2dbg.h
+DEP_mips_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mips.h
+DEP_mmix_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mmix.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_mn10200_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10200.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_mn10300_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_msp430_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_mt_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mt.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_ns32k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-ns32k.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
-DEP_ns32k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ns32k.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_ns32k_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h \
- dwarf2dbg.h
-DEP_openrisc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-openrisc.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_openrisc_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-openrisc.h \
- dwarf2dbg.h
+DEP_openrisc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-openrisc.h \
+ dwarf2dbg.h $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_or32_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-or32.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/or32.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_or32_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-or32.h \
- dwarf2dbg.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/or32.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h
+DEP_or32_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-or32.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/or32.h $(BFDDIR)/libcoff.h
DEP_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
-DEP_pdp11_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pdp11.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_pdp11_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pdp11.h \
- dwarf2dbg.h
-DEP_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_pj_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pj.h \
- dwarf2dbg.h
+DEP_pdp11_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pdp11.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_pj_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pj.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_ppc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ppc.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/rs6000.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_ppc_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h \
- dwarf2dbg.h
-DEP_s390_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-s390.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h \
$(INCDIR)/bfdlink.h
-DEP_s390_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-s390.h \
- dwarf2dbg.h
+DEP_ppc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h
+DEP_s390_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-s390.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_score_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-score.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_sh_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sh.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_sh_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h
-DEP_sh64_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh64.h \
- $(srcdir)/config/tc-sh.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
- $(BFDDIR)/elf32-sh64.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+DEP_sh_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h
+DEP_sh64_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh64.h $(srcdir)/config/tc-sh.h \
+ $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/elf32-sh64.h
DEP_sparc_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-sparc.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
DEP_sparc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sparc.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sparc.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_sparc_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sparc.h \
- dwarf2dbg.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+DEP_sparc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sparc.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h
+DEP_spu_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-spu.h $(INCDIR)/opcode/spu.h \
+ $(INCDIR)/opcode/spu-insns.h dwarf2dbg.h $(srcdir)/config/obj-coff.h \
+ $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h
DEP_tic30_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-tic30.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
DEP_tic30_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic30.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic30.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_tic30_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic30.h \
- dwarf2dbg.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic30.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
DEP_tic4x_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic4x.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic4x.h \
- $(INCDIR)/coff/ti.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_tic4x_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic4x.h \
- dwarf2dbg.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic4x.h $(INCDIR)/coff/ti.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
DEP_tic54x_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic54x.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic54x.h \
- $(INCDIR)/coff/ti.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_tic54x_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic54x.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+DEP_v850_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-v850.h $(INCDIR)/elf/v850.h \
+ $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h $(srcdir)/config/obj-coff.h \
+ $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h
DEP_vax_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-vax.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
-DEP_vax_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-vax.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_vax_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-vax.h \
- dwarf2dbg.h
-DEP_v850_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-v850.h \
- $(INCDIR)/elf/v850.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/symcat.h \
- $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_v850_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-v850.h \
- $(INCDIR)/elf/v850.h $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h
-DEP_xstormy16_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-xstormy16.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-DEP_xstormy16_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xstormy16.h \
- dwarf2dbg.h
-DEP_xc16x_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xc16x.h
-DEP_xtensa_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xtensa.h \
- $(INCDIR)/xtensa-isa.h $(INCDIR)/xtensa-config.h
+DEP_vax_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-vax.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_xc16x_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xc16x.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_xstormy16_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xstormy16.h \
+ dwarf2dbg.h $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
+DEP_xtensa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xtensa.h $(INCDIR)/xtensa-isa.h \
+ $(INCDIR)/xtensa-config.h
DEP_z80_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-z80.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/z80.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_z80_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-z80.h \
- dwarf2dbg.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/z80.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
DEP_z8k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-z8k.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/z8k.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_z8k_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-z8k.h \
- dwarf2dbg.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/z8k.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
DEP_hppa_som = $(BFDDIR)/som.h
DEP_i386_multi = $(DEP_i386_aout) $(DEP_i386_coff) \
$(DEP_i386_elf)
@@ -2413,66 +2128,52 @@ DEP_mips_multi = $(DEP_mips_coff) $(DEP_mips_ecoff) \
DEP_cris_multi = $(DEP_cris_aout) $(DEP_cris_elf)
BMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING ABOVE.
#MKDEP DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW.
-app.o: app.c $(INCDIR)/symcat.h
-as.o: as.c $(INCDIR)/symcat.h subsegs.h $(INCDIR)/obstack.h \
- output-file.h sb.h macro.h dwarf2dbg.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h $(BFDVER_H)
-atof-generic.o: atof-generic.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h
-cond.o: cond.c $(INCDIR)/symcat.h macro.h sb.h $(INCDIR)/obstack.h
-depend.o: depend.c $(INCDIR)/symcat.h
-dwarf2dbg.o: dwarf2dbg.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
- dwarf2dbg.h $(INCDIR)/filenames.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/elf/dwarf2.h
-dw2gencfi.o: dw2gencfi.c $(INCDIR)/symcat.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h
-ecoff.o: ecoff.c $(INCDIR)/symcat.h ecoff.h
-ehopt.o: ehopt.c $(INCDIR)/symcat.h subsegs.h $(INCDIR)/obstack.h \
+app.o: app.c
+as.o: as.c subsegs.h $(INCDIR)/obstack.h output-file.h \
+ sb.h macro.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ ../bfd/bfdver.h
+atof-generic.o: atof-generic.c $(INCDIR)/safe-ctype.h
+cond.o: cond.c sb.h macro.h $(INCDIR)/obstack.h
+depend.o: depend.c
+dwarf2dbg.o: dwarf2dbg.c $(INCDIR)/safe-ctype.h dwarf2dbg.h \
+ $(INCDIR)/filenames.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/elf/dwarf2.h
-expr.o: expr.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/obstack.h
-flonum-copy.o: flonum-copy.c $(INCDIR)/symcat.h
+dw2gencfi.o: dw2gencfi.c dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ subsegs.h $(INCDIR)/obstack.h
+ecoff.o: ecoff.c ecoff.h
+ehopt.o: ehopt.c subsegs.h $(INCDIR)/obstack.h $(INCDIR)/elf/dwarf2.h
+expr.o: expr.c $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h
+flonum-copy.o: flonum-copy.c
flonum-konst.o: flonum-konst.c
flonum-mult.o: flonum-mult.c
-frags.o: frags.c $(INCDIR)/symcat.h subsegs.h $(INCDIR)/obstack.h
-hash.o: hash.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/obstack.h
-input-file.o: input-file.c $(INCDIR)/symcat.h input-file.h \
- $(INCDIR)/safe-ctype.h
-input-scrub.o: input-scrub.c $(INCDIR)/symcat.h input-file.h \
- sb.h
-listing.o: listing.c $(INCDIR)/symcat.h $(INCDIR)/obstack.h \
- $(INCDIR)/safe-ctype.h input-file.h subsegs.h
-literal.o: literal.c $(INCDIR)/symcat.h subsegs.h $(INCDIR)/obstack.h
-macro.o: macro.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
- sb.h macro.h
-messages.o: messages.c $(INCDIR)/symcat.h
-output-file.o: output-file.c $(INCDIR)/symcat.h output-file.h
-read.o: read.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h sb.h macro.h ecoff.h \
- dw2gencfi.h $(INCDIR)/elf/dwarf2.h
-sb.o: sb.c sb.h $(INCDIR)/symcat.h
-stabs.o: stabs.c $(INCDIR)/symcat.h $(INCDIR)/obstack.h \
- subsegs.h ecoff.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
-subsegs.o: subsegs.c $(INCDIR)/symcat.h subsegs.h $(INCDIR)/obstack.h
-symbols.o: symbols.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/obstack.h subsegs.h struc-symbol.h
-write.o: write.c $(INCDIR)/symcat.h subsegs.h $(INCDIR)/obstack.h \
- output-file.h dwarf2dbg.h
-itbl-ops.o: itbl-ops.c itbl-ops.h $(INCDIR)/symcat.h
-e-crisaout.o: $(srcdir)/config/e-crisaout.c $(INCDIR)/symcat.h \
- emul-target.h
-e-criself.o: $(srcdir)/config/e-criself.c $(INCDIR)/symcat.h \
- emul-target.h
-e-i386aout.o: $(srcdir)/config/e-i386aout.c $(INCDIR)/symcat.h \
- emul-target.h
-e-i386coff.o: $(srcdir)/config/e-i386coff.c $(INCDIR)/symcat.h \
- emul-target.h
-e-i386elf.o: $(srcdir)/config/e-i386elf.c $(INCDIR)/symcat.h \
- emul-target.h
-e-mipsecoff.o: $(srcdir)/config/e-mipsecoff.c $(INCDIR)/symcat.h \
- emul-target.h
-e-mipself.o: $(srcdir)/config/e-mipself.c $(INCDIR)/symcat.h \
- emul-target.h
+frags.o: frags.c subsegs.h $(INCDIR)/obstack.h
+hash.o: hash.c $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h
+input-file.o: input-file.c input-file.h $(INCDIR)/safe-ctype.h
+input-scrub.o: input-scrub.c input-file.h sb.h
+listing.o: listing.c $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h \
+ input-file.h subsegs.h
+literal.o: literal.c subsegs.h $(INCDIR)/obstack.h
+macro.o: macro.c $(INCDIR)/safe-ctype.h sb.h macro.h
+messages.o: messages.c
+output-file.o: output-file.c output-file.h
+read.o: read.c $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ sb.h macro.h ecoff.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
+sb.o: sb.c sb.h
+stabs.o: stabs.c $(INCDIR)/obstack.h subsegs.h ecoff.h \
+ $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
+subsegs.o: subsegs.c subsegs.h $(INCDIR)/obstack.h
+symbols.o: symbols.c $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
+ subsegs.h struc-symbol.h
+write.o: write.c subsegs.h $(INCDIR)/obstack.h output-file.h \
+ dwarf2dbg.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h
+itbl-ops.o: itbl-ops.c itbl-ops.h
+e-crisaout.o: $(srcdir)/config/e-crisaout.c emul-target.h
+e-criself.o: $(srcdir)/config/e-criself.c emul-target.h
+e-i386aout.o: $(srcdir)/config/e-i386aout.c emul-target.h
+e-i386coff.o: $(srcdir)/config/e-i386coff.c emul-target.h
+e-i386elf.o: $(srcdir)/config/e-i386elf.c emul-target.h
+e-mipsecoff.o: $(srcdir)/config/e-mipsecoff.c emul-target.h
+e-mipself.o: $(srcdir)/config/e-mipself.c emul-target.h
$(OBJS): $(DEP_@target_cpu_type@_@obj_format@)
$(TARG_CPU_O): $(DEPTC_@target_cpu_type@_@obj_format@)
$(OBJ_FORMAT_O): $(DEPOBJ_@target_cpu_type@_@obj_format@)
diff --git a/gas/Makefile.in b/gas/Makefile.in
index 4cc485f9683a..6a43ccaeb489 100644
--- a/gas/Makefile.in
+++ b/gas/Makefile.in
@@ -51,9 +51,16 @@ DIST_COMMON = $(srcdir)/../config.guess $(srcdir)/../config.sub NEWS \
$(srcdir)/../config.sub
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
- $(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/../libtool.m4 \
- $(top_srcdir)/../gettext.m4 $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \
+ $(top_srcdir)/../bfd/warning.m4 \
+ $(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/gettext-sister.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/nls.m4 $(top_srcdir)/../config/po.m4 \
+ $(top_srcdir)/../config/progtest.m4 \
+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
+ $(top_srcdir)/acinclude.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 \
@@ -78,7 +85,7 @@ am__DEPENDENCIES_1 = tc-@target_cpu_type@.o
am__DEPENDENCIES_2 = obj-@obj_format@.o
am__DEPENDENCIES_3 = atof-@atof@.o
am__DEPENDENCIES_4 =
-am__DEPENDENCIES_5 = ../libiberty/libiberty.a
+am__DEPENDENCIES_5 = ../bfd/libbfd.la ../libiberty/libiberty.a
am_itbl_test_OBJECTS = itbl-parse.$(OBJEXT) itbl-lex.$(OBJEXT)
itbl_test_OBJECTS = $(am_itbl_test_OBJECTS)
itbl_test_DEPENDENCIES = itbl-tops.o itbl-test.o $(am__DEPENDENCIES_5)
@@ -88,11 +95,11 @@ depcomp =
am__depfiles_maybe =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
LTLEXCOMPILE = $(LIBTOOL) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
@@ -114,16 +121,14 @@ DEJATOOL = $(PACKAGE)
RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
-ALL_OBJ_DEPS = @ALL_OBJ_DEPS@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
+AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
-BFDLIB = @BFDLIB@
-BFDVER_H = @BFDVER_H@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
@@ -135,29 +140,32 @@ CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
+DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
+FGREP = @FGREP@
GDBINIT = @GDBINIT@
-GMOFILES = @GMOFILES@
+GENCAT = @GENCAT@
+GENINSRC_NEVER_FALSE = @GENINSRC_NEVER_FALSE@
+GENINSRC_NEVER_TRUE = @GENINSRC_NEVER_TRUE@
GMSGFMT = @GMSGFMT@
-GT_NO = @GT_NO@
-GT_YES = @GT_YES@
-INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
+GREP = @GREP@
+INCINTL = @INCINTL@
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@
+LD = @LD@
LDFLAGS = @LDFLAGS@
LEX = `if [ -f ../flex/flex ] ; then echo ../flex/flex ; else echo @LEX@ ; fi`
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBINTL = @LIBINTL@
+LIBINTL_DEP = @LIBINTL_DEP@
LIBM = @LIBM@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -170,6 +178,8 @@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
NO_WERROR = @NO_WERROR@
OBJEXT = @OBJEXT@
OPCODES_LIB = @OPCODES_LIB@
@@ -180,19 +190,20 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-POFILES = @POFILES@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
-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../bison/bison ; else echo @YACC@ ; fi`
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
@@ -225,10 +236,10 @@ includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
install_tooldir = @install_tooldir@
-l = @l@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
obj_format = @obj_format@
@@ -246,11 +257,16 @@ target_os = @target_os@
target_vendor = @target_vendor@
te_file = @te_file@
AUTOMAKE_OPTIONS = 1.8 cygnus dejagnu
+ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd
SUBDIRS = doc po
# Automake should figure this out on its own. It doesn't, because
# of the "cygnus" option. But distclean still wants it.
DIST_SUBDIRS = $(SUBDIRS)
tooldir = $(exec_prefix)/$(target_alias)
+
+# We have to set this, because autoconf 2.59 does not substitute YFLAGS.
+# Autoconf 2.61 does, so this can be removed when we upgrade.
+YFLAGS =
AM_CFLAGS = $(WARN_CFLAGS)
MKDEP = gcc -MM
TARG_CPU = @target_cpu_type@
@@ -265,7 +281,7 @@ ATOF_TARG_C = $(srcdir)/config/atof-@atof@.c
ATOF_TARG_O = atof-@atof@.o
# use @target_cpu_type@ for refering to configured target name
-IT_HDRS = itbl-parse.h $(srcdir)/itbl-ops.h
+IT_HDRS = itbl-parse.h $(srcdir)/itbl-ops.h
IT_SRCS = itbl-parse.c itbl-lex.c $(srcdir)/itbl-ops.c
IT_DEPS = $(srcdir)/itbl-parse.y $(srcdir)/itbl-lex.l $(srcdir)/config/itbl-@target_cpu_type@.h
IT_OBJS = itbl-parse.o itbl-lex.o itbl-ops.o
@@ -277,6 +293,7 @@ CPU_TYPES = \
arm \
avr \
bfin \
+ cr16 \
cris \
crx \
d10v \
@@ -286,22 +303,25 @@ CPU_TYPES = \
frv \
h8300 \
hppa \
- ia64 \
i370 \
i386 \
i860 \
i960 \
+ ia64 \
ip2k \
m32c \
m32r \
m68hc11 \
m68k \
+ maxq \
mcore \
+ mep \
mips \
mmix \
mn10200 \
mn10300 \
msp430 \
+ mt \
ns32k \
openrisc \
or32 \
@@ -309,16 +329,18 @@ CPU_TYPES = \
pj \
ppc \
s390 \
+ score \
sh \
sh64 \
sparc \
+ spu \
tic30 \
tic4x \
tic54x \
- vax \
v850 \
- xstormy16 \
+ vax \
xc16x \
+ xstormy16 \
xtensa \
z80 \
z8k
@@ -331,8 +353,7 @@ OBJ_FORMATS = \
coff \
ecoff \
elf \
- evax \
- ieee
+ evax
# This is an sh case which sets valid according to whether the CPU
@@ -347,16 +368,20 @@ CPU_OBJ_VALID = \
arm | cris | i386 | m68k | ns32k | pdp11 | sparc | tic30 | vax) \
valid=yes ;; \
esac ;; \
- coff) valid=yes; \
+ coff) \
case $$c in \
- cris | i860 | mmix | sh64) \
- valid= ;; \
+ arm | h8300 | i386 | i960 | m68k | maxq | mcore | mips | or32 \
+ | ppc | sh | sparc | tic* | xscale | z80 | z8k) \
+ valid=yes ;; \
esac ;; \
ecoff) \
case $$c in \
mips | alpha) valid=yes ;; \
esac ;; \
- elf) valid=yes ;; \
+ elf) valid=yes ; \
+ case $$c in \
+ maxq | ns32k | tic* | z80 | z8k) valid= ;; \
+ esac ;; \
evax) \
case $$c in \
alpha) valid=yes ;; \
@@ -459,6 +484,7 @@ TARGET_CPU_CFILES = \
config/tc-arm.c \
config/tc-avr.c \
config/tc-bfin.c \
+ config/tc-cr16.c \
config/tc-cris.c \
config/tc-crx.c \
config/tc-d10v.c \
@@ -479,6 +505,7 @@ TARGET_CPU_CFILES = \
config/tc-m68hc11.c \
config/tc-m68k.c \
config/tc-mcore.c \
+ config/tc-mep.c \
config/tc-mips.c \
config/tc-mmix.c \
config/tc-mn10200.c \
@@ -491,9 +518,11 @@ TARGET_CPU_CFILES = \
config/tc-pj.c \
config/tc-ppc.c \
config/tc-s390.c \
+ config/tc-score.c \
config/tc-sh.c \
config/tc-sh64.c \
config/tc-sparc.c \
+ config/tc-spu.c \
config/tc-tic30.c \
config/tc-tic54x.c \
config/tc-vax.c \
@@ -510,6 +539,7 @@ TARGET_CPU_HFILES = \
config/tc-arm.h \
config/tc-avr.h \
config/tc-bfin.h \
+ config/tc-cr16.h \
config/tc-cris.h \
config/tc-crx.h \
config/tc-d10v.h \
@@ -530,6 +560,7 @@ TARGET_CPU_HFILES = \
config/tc-m68hc11.h \
config/tc-m68k.h \
config/tc-mcore.h \
+ config/tc-mep.h \
config/tc-mips.h \
config/tc-mmix.h \
config/tc-mn10200.h \
@@ -542,9 +573,11 @@ TARGET_CPU_HFILES = \
config/tc-pj.h \
config/tc-ppc.h \
config/tc-s390.h \
+ config/tc-score.h \
config/tc-sh.h \
config/tc-sh64.h \
config/tc-sparc.h \
+ config/tc-spu.h \
config/tc-tic30.h \
config/tc-tic54x.h \
config/tc-vax.h \
@@ -563,7 +596,6 @@ OBJ_FORMAT_CFILES = \
config/obj-ecoff.c \
config/obj-elf.c \
config/obj-evax.c \
- config/obj-ieee.c \
config/obj-som.c
OBJ_FORMAT_HFILES = \
@@ -572,7 +604,6 @@ OBJ_FORMAT_HFILES = \
config/obj-ecoff.h \
config/obj-elf.h \
config/obj-evax.h \
- config/obj-ieee.h \
config/obj-som.h
@@ -610,7 +641,8 @@ TARG_ENV_HFILES = \
config/te-sun3.h \
config/te-svr4.h \
config/te-symbian.h \
- config/te-tmips.h
+ config/te-tmips.h \
+ config/te-wince-pe.h
# Multi files in config
@@ -681,29 +713,36 @@ INCDIR = $(BASEDIR)/include
# Both . and srcdir are used, in that order,
# so that tm.h and config.h will be found in the compilation
# subdirectory rather than in the source directory.
-INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(srcdir)/config -I$(INCDIR) -I$(srcdir)/.. -I$(BFDDIR) -I$(srcdir)/../intl -I../intl -DLOCALEDIR="\"$(datadir)/locale\""
+INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(srcdir)/config \
+ -I$(INCDIR) -I$(srcdir)/.. -I$(BFDDIR) @INCINTL@ \
+ -DLOCALEDIR="\"$(datadir)/locale\""
+
# This should be parallel to INCLUDES, but should replace $(srcdir)
# with $${srcdir}, and should work in a subdirectory. This is used
# when building dependencies, because the dependency building is done
# in a subdirectory.
-DEP_INCLUDES = -D_GNU_SOURCE -I.. -I$${srcdir} -I../../bfd -I$${srcdir}/config -I$${srcdir}/../include -I$${srcdir}/.. -I$${srcdir}/../bfd -I$${srcdir}/../intl -I../../intl -DLOCALEDIR="\"$(datadir)/locale\""
+DEP_INCLUDES = -D_GNU_SOURCE -I.. -I$${srcdir} -I../../bfd \
+ -I$${srcdir}/config -I$${srcdir}/../include -I$${srcdir}/.. \
+ -I$${srcdir}/../bfd @INCINTL@ \
+ -DLOCALEDIR="\"$(datadir)/locale\""
+
DEP_FLAGS = -DOBJ_MAYBE_ELF \
-I. -I.. -I$${srcdir} -I../../bfd $(DEP_INCLUDES)
# How to link with both our special library facilities
# and the system's installed libraries.
-GASLIBS = @OPCODES_LIB@ @BFDLIB@ ../libiberty/libiberty.a
+GASLIBS = @OPCODES_LIB@ ../bfd/libbfd.la ../libiberty/libiberty.a
# Files to be copied away after each stage in building.
STAGESTUFF = *.o $(noinst_PROGRAMS)
as_new_SOURCES = $(GAS_CFILES)
as_new_LDADD = $(TARG_CPU_O) $(OBJ_FORMAT_O) $(ATOF_TARG_O) \
- $(extra_objects) $(GASLIBS) $(INTLLIBS) $(LIBM)
+ $(extra_objects) $(GASLIBS) $(LIBINTL) $(LIBM)
as_new_DEPENDENCIES = $(TARG_CPU_O) $(OBJ_FORMAT_O) $(ATOF_TARG_O) \
- $(extra_objects) $(GASLIBS) $(INTLDEPS)
+ $(extra_objects) $(GASLIBS) $(LIBINTL_DEP)
EXPECT = expect
RUNTEST = runtest
@@ -729,687 +768,520 @@ DEP_FILE_DEPS = $(CFILES) $(HFILES) $(TARGET_CPU_CFILES) \
CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/configure.in $(srcdir)/configure.tgt
AMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW.
-DEPTC_alpha_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-alpha.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h ecoff.h $(INCDIR)/opcode/alpha.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h $(INCDIR)/safe-ctype.h $(srcdir)/config/atof-vax.c
+DEPTC_alpha_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-alpha.h \
+ ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
+ subsegs.h $(INCDIR)/obstack.h struc-symbol.h ecoff.h \
+ $(INCDIR)/opcode/alpha.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ $(INCDIR)/safe-ctype.h $(srcdir)/config/atof-vax.c
-DEPTC_alpha_ecoff = $(INCDIR)/symcat.h $(srcdir)/config/obj-ecoff.h \
- $(srcdir)/config/tc-alpha.h ecoff.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/ecoff.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/opcode/alpha.h dw2gencfi.h \
+DEPTC_alpha_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-alpha.h subsegs.h \
+ $(INCDIR)/obstack.h struc-symbol.h ecoff.h $(INCDIR)/coff/sym.h \
+ $(INCDIR)/coff/ecoff.h $(INCDIR)/opcode/alpha.h $(INCDIR)/elf/alpha.h \
+ $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h dw2gencfi.h \
$(INCDIR)/elf/dwarf2.h $(INCDIR)/safe-ctype.h $(srcdir)/config/atof-vax.c
-DEPTC_alpha_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-alpha.h \
+DEPTC_alpha_evax = $(srcdir)/config/obj-evax.h $(srcdir)/config/tc-alpha.h \
subsegs.h $(INCDIR)/obstack.h struc-symbol.h ecoff.h \
- $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h $(INCDIR)/opcode/alpha.h \
- $(INCDIR)/elf/alpha.h $(INCDIR)/elf/reloc-macros.h \
- dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/safe-ctype.h \
- $(srcdir)/config/atof-vax.c
-
-DEPTC_alpha_evax = $(INCDIR)/symcat.h $(srcdir)/config/obj-evax.h \
- $(srcdir)/config/tc-alpha.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h ecoff.h $(INCDIR)/opcode/alpha.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h $(INCDIR)/safe-ctype.h $(srcdir)/config/atof-vax.c
+ $(INCDIR)/opcode/alpha.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ $(INCDIR)/safe-ctype.h $(srcdir)/config/atof-vax.c
-DEPTC_arc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-arc.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h struc-symbol.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+DEPTC_arc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h dwarf2dbg.h \
+ struc-symbol.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/arc.h $(srcdir)/../opcodes/arc-ext.h \
$(INCDIR)/elf/arc.h $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h
-DEPTC_arc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h \
- dwarf2dbg.h struc-symbol.h $(INCDIR)/safe-ctype.h subsegs.h \
- $(INCDIR)/obstack.h $(INCDIR)/opcode/arc.h $(srcdir)/../opcodes/arc-ext.h \
- $(INCDIR)/elf/arc.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_arm_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-arm.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h $(INCDIR)/opcode/arm.h \
+ dwarf2dbg.h
-DEPTC_arm_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-arm.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/arm.h
+DEPTC_arm_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-arm.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h $(INCDIR)/opcode/arm.h \
+ dwarf2dbg.h
-DEPTC_arm_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-arm.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h subsegs.h \
- $(INCDIR)/obstack.h $(INCDIR)/opcode/arm.h
+DEPTC_arm_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h $(INCDIR)/opcode/arm.h \
+ $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h dw2gencfi.h \
+ $(INCDIR)/elf/dwarf2.h dwarf2dbg.h
-DEPTC_arm_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h \
+DEPTC_avr_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/arm.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h \
- dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
+ $(INCDIR)/opcode/avr.h
-DEPTC_avr_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-avr.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/avr.h
+DEPTC_bfin_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h dwarf2dbg.h \
+ struc-symbol.h $(srcdir)/config/bfin-defs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/safe-ctype.h dwarf2dbg.h $(BFDDIR)/libbfd.h \
+ $(INCDIR)/hashtab.h $(INCDIR)/elf/common.h $(INCDIR)/elf/bfin.h \
+ $(INCDIR)/elf/reloc-macros.h $(srcdir)/config/bfin-aux.h \
+ $(srcdir)/config/bfin-defs.h $(INCDIR)/opcode/bfin.h
+
+DEPTC_cr16_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cr16.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h dwarf2dbg.h $(INCDIR)/opcode/cr16.h \
+ $(INCDIR)/elf/cr16.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_avr_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/avr.h
+DEPTC_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/cris.h \
+ dwarf2dbg.h
-DEPTC_bfin_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-bfin.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h struc-symbol.h \
- $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h dwarf2dbg.h \
- $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h \
- $(srcdir)/config/bfin-aux.h $(INCDIR)/opcode/bfin.h \
- $(srcdir)/config/bfin-defs.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/bfin.h $(BFDDIR)/libbfd.h
-
-DEPTC_bfin_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h \
- dwarf2dbg.h struc-symbol.h $(srcdir)/config/bfin-defs.h \
- $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h $(srcdir)/config/bfin-aux.h \
- $(INCDIR)/opcode/bfin.h $(srcdir)/config/bfin-defs.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/bfin.h $(BFDDIR)/libbfd.h
-
-DEPTC_cris_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-cris.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
+DEPTC_cris_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/cris.h dwarf2dbg.h
-DEPTC_cris_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/cris.h
-
-DEPTC_crx_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-crx.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- dwarf2dbg.h $(INCDIR)/opcode/crx.h $(INCDIR)/elf/crx.h \
- $(INCDIR)/elf/reloc-macros.h
-
-DEPTC_crx_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-crx.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/crx.h \
+DEPTC_crx_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-crx.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h dwarf2dbg.h $(INCDIR)/opcode/crx.h \
$(INCDIR)/elf/crx.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_d10v_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-d10v.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+DEPTC_d10v_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d10v.h $(INCDIR)/safe-ctype.h \
subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/d10v.h \
$(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_d10v_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d10v.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/d10v.h $(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h
-
-DEPTC_d30v_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-d30v.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+DEPTC_d30v_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d30v.h $(INCDIR)/safe-ctype.h \
subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/d30v.h
-DEPTC_d30v_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
+DEPTC_dlx_elf = $(INCDIR)/safe-ctype.h $(srcdir)/config/obj-elf.h \
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d30v.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/d30v.h
-
-DEPTC_dlx_coff = $(INCDIR)/safe-ctype.h $(INCDIR)/symcat.h \
- $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-dlx.h \
- $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/opcode/dlx.h
-
-DEPTC_dlx_elf = $(INCDIR)/safe-ctype.h $(INCDIR)/symcat.h \
- $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
- $(srcdir)/config/tc-dlx.h dwarf2dbg.h $(INCDIR)/opcode/dlx.h
-
-DEPTC_fr30_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-fr30.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/fr30-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/fr30-opc.h cgen.h
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-dlx.h \
+ dwarf2dbg.h $(srcdir)/config/tc-dlx.h $(INCDIR)/opcode/dlx.h
-DEPTC_fr30_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-fr30.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+DEPTC_fr30_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-fr30.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(srcdir)/../opcodes/fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/fr30-opc.h \
- cgen.h
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(srcdir)/../opcodes/fr30-opc.h cgen.h
-DEPTC_frv_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-frv.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/frv-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/frv-opc.h \
+DEPTC_frv_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-frv.h subsegs.h \
+ $(INCDIR)/obstack.h $(srcdir)/../opcodes/frv-desc.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/frv-opc.h \
cgen.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/frv.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_frv_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-frv.h \
- subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/frv-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/frv-opc.h cgen.h $(BFDDIR)/libbfd.h \
- $(INCDIR)/hashtab.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/reloc-macros.h
-
-DEPTC_h8300_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-h8300.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/h8300.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h \
- $(INCDIR)/opcode/h8300.h $(INCDIR)/safe-ctype.h
+DEPTC_h8300_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-h8300.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/h8300.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
+ dwarf2dbg.h $(INCDIR)/opcode/h8300.h $(INCDIR)/safe-ctype.h
-DEPTC_h8300_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-h8300.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/h8300.h \
+DEPTC_h8300_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-h8300.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h $(INCDIR)/opcode/h8300.h \
$(INCDIR)/safe-ctype.h $(INCDIR)/elf/h8.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_hppa_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-hppa.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(BFDDIR)/libhppa.h $(INCDIR)/opcode/hppa.h
-
-DEPTC_hppa_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h \
- $(BFDDIR)/elf32-hppa.h $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h \
+DEPTC_hppa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h $(BFDDIR)/elf32-hppa.h \
+ $(BFDDIR)/elf-bfd.h $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h \
$(INCDIR)/elf/reloc-macros.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/hppa.h \
- dwarf2dbg.h
-
-DEPTC_ia64_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ia64.h $(INCDIR)/opcode/ia64.h \
- $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h
+ subsegs.h $(INCDIR)/obstack.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ $(BFDDIR)/libhppa.h $(INCDIR)/opcode/hppa.h dwarf2dbg.h
-DEPTC_ia64_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ia64.h \
- $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/safe-ctype.h dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h
-
-DEPTC_i370_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-i370.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h struc-symbol.h $(INCDIR)/opcode/i370.h
-
-DEPTC_i370_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i370.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+DEPTC_i370_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i370.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
struc-symbol.h $(INCDIR)/opcode/i370.h $(INCDIR)/elf/i370.h \
$(INCDIR)/elf/reloc-macros.h
-DEPTC_i386_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-i386.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/i386.h \
- $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_i386_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-i386.h \
+ $(srcdir)/../opcodes/i386-opc.h $(INCDIR)/opcode/i386.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h dw2gencfi.h \
+ $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_i386_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-i386.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h subsegs.h \
- $(INCDIR)/obstack.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
- $(INCDIR)/opcode/i386.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_i386_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i386.h \
+ $(srcdir)/../opcodes/i386-opc.h $(INCDIR)/opcode/i386.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h dw2gencfi.h \
+ $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_i386_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i386.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/i386.h \
- $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_i386_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i386.h $(srcdir)/../opcodes/i386-opc.h \
+ $(INCDIR)/opcode/i386.h dwarf2dbg.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h dw2gencfi.h \
+ $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_i860_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i860.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+DEPTC_i860_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i860.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/i860.h $(INCDIR)/elf/i860.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_i960_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-i960.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/i960.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h $(INCDIR)/opcode/i960.h
-
-DEPTC_i960_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i960.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
+DEPTC_i960_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i960.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/i960.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/i960.h
-DEPTC_ip2k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ip2k.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/ip2k-opc.h \
- cgen.h $(INCDIR)/elf/common.h $(INCDIR)/elf/ip2k.h \
- $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h
+DEPTC_i960_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i960.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h $(INCDIR)/opcode/i960.h
-DEPTC_ip2k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ip2k.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/ip2k-desc.h \
+DEPTC_ia64_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ia64.h $(INCDIR)/opcode/ia64.h \
+ $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/safe-ctype.h \
+ dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/ia64.h \
+ $(INCDIR)/elf/ia64.h
+
+DEPTC_ip2k_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ip2k.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/ip2k-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/ip2k-opc.h cgen.h $(INCDIR)/elf/ip2k.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/ip2k-opc.h \
+ cgen.h $(INCDIR)/elf/common.h $(INCDIR)/elf/ip2k.h \
$(INCDIR)/elf/reloc-macros.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h
-DEPTC_m32c_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m32c.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/m32c-opc.h \
- $(srcdir)/../opcodes/cgen-types.h $(srcdir)/../opcodes/cgen-ops.h \
- cgen.h $(INCDIR)/elf/common.h $(INCDIR)/elf/m32c.h \
- $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h \
- $(INCDIR)/safe-ctype.h
-
-DEPTC_m32c_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32c.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/m32c-desc.h \
+DEPTC_m32c_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32c.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/m32c-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/m32c-opc.h $(srcdir)/../opcodes/cgen-types.h \
- $(srcdir)/../opcodes/cgen-ops.h cgen.h $(INCDIR)/elf/m32c.h \
- $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h \
- $(INCDIR)/safe-ctype.h
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/m32c-opc.h \
+ $(srcdir)/../opcodes/cgen-types.h ../bfd/bfd_stdint.h \
+ $(srcdir)/../opcodes/cgen-ops.h cgen.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/m32c.h $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/libbfd.h \
+ $(INCDIR)/hashtab.h $(INCDIR)/safe-ctype.h
-DEPTC_m32r_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m32r.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/m32r-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+DEPTC_m32r_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32r.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(srcdir)/../opcodes/m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/opcode/cgen-bitset.h \
$(srcdir)/../opcodes/m32r-opc.h cgen.h $(INCDIR)/elf/m32r.h \
$(INCDIR)/elf/reloc-macros.h
-DEPTC_m32r_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32r.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/m32r-opc.h \
- cgen.h $(INCDIR)/elf/m32r.h $(INCDIR)/elf/reloc-macros.h
-
-DEPTC_m68hc11_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m68hc11.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h subsegs.h \
- $(INCDIR)/obstack.h $(INCDIR)/opcode/m68hc11.h dwarf2dbg.h \
- $(INCDIR)/elf/m68hc11.h $(INCDIR)/elf/reloc-macros.h
-
-DEPTC_m68hc11_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68hc11.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/m68hc11.h $(INCDIR)/elf/m68hc11.h \
+DEPTC_m68hc11_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68hc11.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/opcode/m68hc11.h dwarf2dbg.h $(INCDIR)/elf/m68hc11.h \
$(INCDIR)/elf/reloc-macros.h
-DEPTC_m68k_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-m68k.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h subsegs.h \
- dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/m68k.h \
+DEPTC_m68k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-m68k.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h \
+ dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/m68k.h \
$(srcdir)/config/m68k-parse.h
-DEPTC_m68k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m68k.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
- subsegs.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
- $(INCDIR)/opcode/m68k.h $(srcdir)/config/m68k-parse.h
+DEPTC_m68k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-m68k.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h \
+ dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/m68k.h \
+ $(srcdir)/config/m68k-parse.h
-DEPTC_m68k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68k.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h subsegs.h \
- dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/m68k.h \
+DEPTC_m68k_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68k.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h \
+ dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/m68k.h \
$(srcdir)/config/m68k-parse.h $(INCDIR)/elf/m68k.h \
$(INCDIR)/elf/reloc-macros.h
-DEPTC_mcore_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mcore.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/mcore.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mcore-opc.h \
- $(INCDIR)/safe-ctype.h
+DEPTC_maxq_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-maxq.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/maxq.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h $(srcdir)/config/tc-maxq.h \
+ $(INCDIR)/opcode/maxq.h
-DEPTC_mcore_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mcore.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mcore-opc.h \
+DEPTC_mcore_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mcore.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/mcore.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
+ $(srcdir)/../opcodes/mcore-opc.h $(INCDIR)/safe-ctype.h
+
+DEPTC_mcore_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mcore.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mcore-opc.h \
$(INCDIR)/safe-ctype.h $(INCDIR)/elf/mcore.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_mips_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mips.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/opcode/mips.h itbl-ops.h dwarf2dbg.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+DEPTC_mep_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
$(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
- $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h ecoff.h \
- $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mep.h dwarf2dbg.h \
+ dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mep-desc.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/mep-opc.h \
+ cgen.h $(INCDIR)/elf/common.h $(INCDIR)/elf/mep.h $(INCDIR)/elf/reloc-macros.h \
+ $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h $(INCDIR)/xregex.h \
+ $(INCDIR)/xregex2.h
-DEPTC_mips_ecoff = $(INCDIR)/symcat.h $(srcdir)/config/obj-ecoff.h \
- $(srcdir)/config/tc-mips.h ecoff.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/ecoff.h subsegs.h $(INCDIR)/obstack.h \
+DEPTC_mips_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mips.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/safe-ctype.h $(INCDIR)/opcode/mips.h itbl-ops.h \
dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(srcdir)/config/obj-elf.h \
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/mips.h \
- $(INCDIR)/elf/reloc-macros.h
+ $(INCDIR)/elf/external.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h \
+ ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h
-DEPTC_mips_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mips.h \
+DEPTC_mips_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-mips.h \
+ ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
subsegs.h $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h \
$(INCDIR)/opcode/mips.h itbl-ops.h dwarf2dbg.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h \
+ $(INCDIR)/elf/dwarf2.h $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h \
+ ecoff.h
+
+DEPTC_mips_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mips.h subsegs.h \
+ $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/mips.h \
+ itbl-ops.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ $(srcdir)/config/obj-elf.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h \
ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h
-DEPTC_mmix_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mmix.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/elf/mmix.h \
+DEPTC_mmix_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mmix.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/elf/mmix.h \
$(INCDIR)/elf/reloc-macros.h $(INCDIR)/opcode/mmix.h \
- $(INCDIR)/safe-ctype.h
-
-DEPTC_mn10200_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mn10200.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/mn10200.h
+ $(INCDIR)/safe-ctype.h dwarf2dbg.h $(INCDIR)/obstack.h
-DEPTC_mn10200_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10200.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+DEPTC_mn10200_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10200.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/mn10200.h
-DEPTC_mn10300_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mn10300.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/mn10300.h \
- dwarf2dbg.h
-
-DEPTC_mn10300_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/mn10300.h
-
-DEPTC_msp430_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-msp430.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/msp430.h $(INCDIR)/safe-ctype.h dwarf2dbg.h
+DEPTC_mn10300_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/opcode/mn10300.h dwarf2dbg.h
-DEPTC_msp430_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h \
- dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/msp430.h \
- $(INCDIR)/safe-ctype.h
+DEPTC_msp430_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/msp430.h \
+ $(INCDIR)/safe-ctype.h dwarf2dbg.h
-DEPTC_ns32k_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-ns32k.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/opcode/ns32k.h $(INCDIR)/obstack.h
+DEPTC_mt_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mt.h dwarf2dbg.h \
+ dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mt-desc.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/mt-opc.h \
+ cgen.h $(INCDIR)/elf/common.h $(INCDIR)/elf/mt.h $(INCDIR)/elf/reloc-macros.h \
+ $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h
-DEPTC_ns32k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ns32k.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ns32k.h \
+DEPTC_ns32k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-ns32k.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ns32k.h \
$(INCDIR)/obstack.h
-DEPTC_ns32k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h \
- dwarf2dbg.h $(INCDIR)/opcode/ns32k.h $(INCDIR)/obstack.h
-
-DEPTC_openrisc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-openrisc.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/openrisc-opc.h \
- cgen.h
-
-DEPTC_openrisc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-openrisc.h \
+DEPTC_openrisc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-openrisc.h \
dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/openrisc-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/openrisc-opc.h cgen.h
-
-DEPTC_or32_coff = $(INCDIR)/safe-ctype.h $(INCDIR)/symcat.h \
- $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-or32.h \
- $(INCDIR)/coff/internal.h $(INCDIR)/coff/or32.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/opcode/or32.h $(INCDIR)/elf/or32.h \
- $(INCDIR)/elf/reloc-macros.h
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/openrisc-opc.h \
+ cgen.h
-DEPTC_or32_elf = $(INCDIR)/safe-ctype.h $(INCDIR)/symcat.h \
- $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
- $(srcdir)/config/tc-or32.h dwarf2dbg.h $(INCDIR)/opcode/or32.h \
- $(INCDIR)/elf/or32.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_or32_coff = $(INCDIR)/safe-ctype.h $(srcdir)/config/obj-coff.h \
+ $(srcdir)/config/tc-or32.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/or32.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/opcode/or32.h $(INCDIR)/elf/or32.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_pdp11_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-pdp11.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/pdp11.h
+DEPTC_or32_elf = $(INCDIR)/safe-ctype.h $(srcdir)/config/obj-elf.h \
+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-or32.h \
+ dwarf2dbg.h $(INCDIR)/opcode/or32.h $(INCDIR)/elf/or32.h \
+ $(INCDIR)/elf/reloc-macros.h
-DEPTC_pdp11_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-pdp11.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+DEPTC_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
$(INCDIR)/opcode/pdp11.h
-DEPTC_pdp11_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pdp11.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/pdp11.h
+DEPTC_pdp11_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pdp11.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/pdp11.h
-DEPTC_pj_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-pj.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/opcode/pj.h
+DEPTC_pj_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pj.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/pj.h
-DEPTC_pj_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pj.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/pj.h
+DEPTC_ppc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ppc.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h subsegs.h \
+ $(INCDIR)/obstack.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ $(INCDIR)/opcode/ppc.h
-DEPTC_ppc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ppc.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+DEPTC_ppc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/ppc.h
-
-DEPTC_ppc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/ppc.h \
- $(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h
+ $(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h
-DEPTC_s390_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-s390.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h \
- dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/s390.h \
- $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_s390_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-s390.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ struc-symbol.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ $(INCDIR)/opcode/s390.h $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_s390_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-s390.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/opcode/s390.h \
- $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h
-
-DEPTC_sh_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-sh.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/sh-opc.h \
- $(INCDIR)/safe-ctype.h struc-symbol.h dwarf2dbg.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h
+DEPTC_score_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-score.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/opcode/score-inst.h $(INCDIR)/opcode/score-datadep.h \
+ struc-symbol.h $(INCDIR)/elf/score.h $(INCDIR)/elf/reloc-macros.h \
+ dwarf2dbg.h
-DEPTC_sh_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h \
- subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/sh-opc.h \
- $(INCDIR)/safe-ctype.h struc-symbol.h $(INCDIR)/elf/sh.h \
- $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h
+DEPTC_sh_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sh.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
+ $(srcdir)/../opcodes/sh-opc.h $(INCDIR)/safe-ctype.h \
+ struc-symbol.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
-DEPTC_sh64_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh64.h \
- $(srcdir)/config/tc-sh.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
- $(BFDDIR)/elf32-sh64.h $(INCDIR)/safe-ctype.h $(srcdir)/../opcodes/sh64-opc.h \
+DEPTC_sh_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h subsegs.h \
+ $(INCDIR)/obstack.h $(srcdir)/../opcodes/sh-opc.h $(INCDIR)/safe-ctype.h \
+ struc-symbol.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
+ dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
+
+DEPTC_sh64_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh64.h $(srcdir)/config/tc-sh.h \
+ $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/elf32-sh64.h \
+ $(INCDIR)/safe-ctype.h $(srcdir)/../opcodes/sh64-opc.h \
$(srcdir)/config/tc-sh.c subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/sh-opc.h struc-symbol.h dwarf2dbg.h \
- dw2gencfi.h $(INCDIR)/elf/dwarf2.h
+ $(srcdir)/../opcodes/sh-opc.h $(INCDIR)/safe-ctype.h \
+ struc-symbol.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
-DEPTC_sparc_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-sparc.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/sparc.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
+DEPTC_sparc_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-sparc.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/sparc.h \
+ dw2gencfi.h $(INCDIR)/elf/dwarf2.h
-DEPTC_sparc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-sparc.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h subsegs.h \
- $(INCDIR)/obstack.h $(INCDIR)/opcode/sparc.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h
+DEPTC_sparc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sparc.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/sparc.h \
+ dw2gencfi.h $(INCDIR)/elf/dwarf2.h
-DEPTC_sparc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sparc.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+DEPTC_sparc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sparc.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/sparc.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
- $(INCDIR)/elf/sparc.h $(INCDIR)/elf/reloc-macros.h
-
-DEPTC_tic30_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-tic30.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/tic30.h
-
-DEPTC_tic30_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-tic30.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/tic30.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/tic30.h
+ $(INCDIR)/elf/sparc.h $(INCDIR)/elf/reloc-macros.h \
+ dwarf2dbg.h
-DEPTC_tic30_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic30.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/tic30.h
+DEPTC_spu_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-spu.h $(INCDIR)/opcode/spu.h \
+ $(INCDIR)/opcode/spu-insns.h dwarf2dbg.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h dwarf2dbg.h $(INCDIR)/opcode/spu-insns.h
-DEPTC_tic4x_coff = $(INCDIR)/safe-ctype.h $(INCDIR)/symcat.h \
- $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic4x.h \
- $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic4x.h $(INCDIR)/coff/ti.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/tic4x.h \
- subsegs.h $(INCDIR)/obstack.h
+DEPTC_tic30_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-tic30.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/opcode/tic30.h
-DEPTC_tic4x_elf = $(INCDIR)/safe-ctype.h $(INCDIR)/symcat.h \
- $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
- $(srcdir)/config/tc-tic4x.h dwarf2dbg.h $(INCDIR)/opcode/tic4x.h \
- subsegs.h $(INCDIR)/obstack.h
+DEPTC_tic30_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic30.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic30.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/opcode/tic30.h
-DEPTC_tic54x_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-tic54x.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h sb.h macro.h \
- subsegs.h $(INCDIR)/obstack.h struc-symbol.h $(INCDIR)/opcode/tic54x.h
+DEPTC_tic4x_coff = $(INCDIR)/safe-ctype.h $(srcdir)/config/obj-coff.h \
+ $(srcdir)/config/tc-tic4x.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/tic4x.h $(INCDIR)/coff/ti.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/opcode/tic4x.h subsegs.h \
+ $(INCDIR)/obstack.h $(INCDIR)/obstack.h
-DEPTC_tic54x_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic54x.h \
- $(INCDIR)/safe-ctype.h sb.h macro.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/opcode/tic54x.h $(srcdir)/config/obj-coff.h \
+DEPTC_tic54x_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic54x.h \
$(INCDIR)/coff/internal.h $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h \
- $(BFDDIR)/libcoff.h
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ sb.h macro.h subsegs.h $(INCDIR)/obstack.h struc-symbol.h \
+ $(INCDIR)/opcode/tic54x.h $(srcdir)/config/obj-coff.h
-DEPTC_vax_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-vax.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(srcdir)/config/vax-inst.h $(INCDIR)/obstack.h subsegs.h \
- $(INCDIR)/safe-ctype.h $(INCDIR)/opcode/vax.h
+DEPTC_v850_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-v850.h $(INCDIR)/elf/v850.h \
+ $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/v850.h \
+ dwarf2dbg.h
-DEPTC_vax_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-vax.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(srcdir)/config/vax-inst.h \
- $(INCDIR)/obstack.h subsegs.h $(INCDIR)/safe-ctype.h \
+DEPTC_vax_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-vax.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(srcdir)/config/vax-inst.h \
+ $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h \
$(INCDIR)/opcode/vax.h
-DEPTC_vax_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-vax.h \
- dwarf2dbg.h $(srcdir)/config/vax-inst.h $(INCDIR)/obstack.h \
- subsegs.h $(INCDIR)/safe-ctype.h $(INCDIR)/elf/vax.h \
+DEPTC_vax_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-vax.h dwarf2dbg.h \
+ $(srcdir)/config/vax-inst.h $(INCDIR)/obstack.h subsegs.h \
+ $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h $(INCDIR)/elf/vax.h \
$(INCDIR)/elf/reloc-macros.h $(INCDIR)/opcode/vax.h
-DEPTC_v850_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-v850.h $(INCDIR)/elf/v850.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/v850.h dwarf2dbg.h
-
-DEPTC_v850_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-v850.h \
- $(INCDIR)/elf/v850.h $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h \
+DEPTC_xc16x_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xc16x.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/opcode/v850.h
-
-DEPTC_xstormy16_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-xstormy16.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/xstormy16-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/xstormy16-opc.h \
- cgen.h
+ $(srcdir)/../opcodes/xc16x-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(srcdir)/../opcodes/xc16x-opc.h cgen.h dwarf2dbg.h \
+ $(INCDIR)/elf/xc16x.h $(INCDIR)/elf/reloc-macros.h
-DEPTC_xstormy16_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xstormy16.h \
+DEPTC_xstormy16_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xstormy16.h \
dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/xstormy16-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/xstormy16-opc.h cgen.h
-
-DEPTC_xc16x_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xc16x.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- $(srcdir)/../opcodes/xc16x-desc.h $(INCDIR)/opcode/cgen.h \
- $(srcdir)/../opcodes/xc16x-opc.h cgen.h
+ $(INCDIR)/opcode/cgen-bitset.h $(srcdir)/../opcodes/xstormy16-opc.h \
+ cgen.h
-DEPTC_xtensa_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xtensa.h \
- $(INCDIR)/xtensa-isa.h $(INCDIR)/xtensa-config.h sb.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+DEPTC_xtensa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xtensa.h $(INCDIR)/xtensa-isa.h \
+ $(INCDIR)/xtensa-config.h sb.h $(INCDIR)/safe-ctype.h \
+ $(srcdir)/config/tc-xtensa.h subsegs.h $(INCDIR)/obstack.h \
$(srcdir)/config/xtensa-relax.h $(srcdir)/config/xtensa-istack.h \
- dwarf2dbg.h struc-symbol.h
-
-DEPTC_z80_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-z80.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/z80.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h subsegs.h \
- $(INCDIR)/obstack.h
-
-DEPTC_z80_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-z80.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h
+ dwarf2dbg.h struc-symbol.h $(INCDIR)/xtensa-config.h
-DEPTC_z8k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-z8k.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/z8k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h $(srcdir)/../opcodes/z8k-opc.h
+DEPTC_z80_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-z80.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/z80.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h
-DEPTC_z8k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-z8k.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h $(srcdir)/../opcodes/z8k-opc.h
+DEPTC_z8k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-z8k.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/z8k.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
+ $(srcdir)/../opcodes/z8k-opc.h
DEPTC_hppa_som = $(srcdir)/config/tc-hppa.h subsegs.h \
$(INCDIR)/obstack.h $(BFDDIR)/libhppa.h $(INCDIR)/opcode/hppa.h \
@@ -1422,588 +1294,439 @@ DEPTC_mips_multi = $(DEPTC_mips_coff) $(DEPTC_mips_ecoff) \
$(DEPTC_mips_elf)
DEPTC_cris_multi = $(DEPTC_cris_aout) $(DEPTC_cris_elf)
-DEPOBJ_alpha_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-alpha.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+DEPOBJ_alpha_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-alpha.h \
+ ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
+ $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+ $(BFDDIR)/libecoff.h
-DEPOBJ_alpha_ecoff = $(INCDIR)/symcat.h $(srcdir)/config/obj-ecoff.h \
- $(srcdir)/config/tc-alpha.h ecoff.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(BFDDIR)/libecoff.h
+DEPOBJ_alpha_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-alpha.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
+ $(INCDIR)/elf/alpha.h $(INCDIR)/elf/reloc-macros.h \
+ $(INCDIR)/aout/aout64.h
-DEPOBJ_alpha_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-alpha.h \
+DEPOBJ_alpha_evax = $(srcdir)/config/obj-evax.h $(srcdir)/config/tc-alpha.h
+DEPOBJ_arc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h ecoff.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/ecoff.h $(INCDIR)/elf/alpha.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/aout/aout64.h
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_alpha_evax = $(INCDIR)/symcat.h $(srcdir)/config/obj-evax.h \
- $(srcdir)/config/tc-alpha.h
+DEPOBJ_arm_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-arm.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
-DEPOBJ_arc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-arc.h $(INCDIR)/coff/internal.h \
+DEPOBJ_arm_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-arm.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-
-DEPOBJ_arc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_arm_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-arm.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
+ subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_arm_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-arm.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_arm_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_arm_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h \
+DEPOBJ_avr_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_avr_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-avr.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-
-DEPOBJ_avr_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_bfin_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-bfin.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_bfin_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_bfin_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_cris_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-cris.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
+DEPOBJ_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
-DEPOBJ_cris_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_cris_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_crx_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-crx.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+DEPOBJ_crx_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-crx.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_crx_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-crx.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_d10v_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d10v.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_d10v_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-d10v.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+DEPOBJ_d30v_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d30v.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_d10v_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d10v.h \
+DEPOBJ_dlx_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-dlx.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_d30v_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-d30v.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_d30v_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d30v.h \
+DEPOBJ_fr30_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-fr30.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_dlx_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-dlx.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_dlx_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-dlx.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_frv_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-frv.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_fr30_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-fr30.h $(INCDIR)/coff/internal.h \
+DEPOBJ_h8300_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-h8300.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/h8300.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+ subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_fr30_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-fr30.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_h8300_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-h8300.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_frv_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-frv.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+DEPOBJ_hppa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h $(BFDDIR)/elf32-hppa.h \
+ $(BFDDIR)/elf-bfd.h $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h \
+ $(INCDIR)/elf/reloc-macros.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_frv_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-frv.h \
+DEPOBJ_i370_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i370.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_h8300_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-h8300.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/h8300.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/elf/i370.h \
+ $(INCDIR)/elf/reloc-macros.h $(INCDIR)/aout/aout64.h
-DEPOBJ_h8300_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-h8300.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_i386_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-i386.h \
+ $(srcdir)/../opcodes/i386-opc.h $(INCDIR)/opcode/i386.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
-DEPOBJ_hppa_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-hppa.h $(INCDIR)/coff/internal.h \
+DEPOBJ_i386_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i386.h \
+ $(srcdir)/../opcodes/i386-opc.h $(INCDIR)/opcode/i386.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+ subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_hppa_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h \
- $(BFDDIR)/elf32-hppa.h $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h \
- $(INCDIR)/elf/reloc-macros.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h \
+DEPOBJ_i386_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i386.h $(srcdir)/../opcodes/i386-opc.h \
+ $(INCDIR)/opcode/i386.h dwarf2dbg.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h \
$(INCDIR)/aout/aout64.h
-DEPOBJ_ia64_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ia64.h $(INCDIR)/opcode/ia64.h \
- $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-
-DEPOBJ_ia64_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ia64.h \
- $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h \
+DEPOBJ_i860_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i860.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_i370_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-i370.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+DEPOBJ_i960_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i960.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/i960.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_i370_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i370.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/elf/i370.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/aout/aout64.h
+DEPOBJ_i960_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i960.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_i386_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-i386.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
+DEPOBJ_ia64_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ia64.h $(INCDIR)/opcode/ia64.h \
+ $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_i386_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-i386.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_ip2k_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ip2k.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_i386_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i386.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/aout/aout64.h
+DEPOBJ_m32c_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32c.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_i860_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i860.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_m32r_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32r.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_i960_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-i960.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/i960.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_m68hc11_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68hc11.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_i960_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i960.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_m68k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-m68k.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
-DEPOBJ_ip2k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ip2k.h $(INCDIR)/coff/internal.h \
+DEPOBJ_m68k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-m68k.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+ subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_ip2k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ip2k.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_m68k_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68k.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_m32c_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m32c.h $(INCDIR)/coff/internal.h \
+DEPOBJ_maxq_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-maxq.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/maxq.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-
-DEPOBJ_m32c_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32c.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+ subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_m32r_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m32r.h $(INCDIR)/coff/internal.h \
+DEPOBJ_mcore_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mcore.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/mcore.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-
-DEPOBJ_m32r_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32r.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_m68hc11_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m68hc11.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-
-DEPOBJ_m68hc11_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68hc11.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_m68k_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-m68k.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
-
-DEPOBJ_m68k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-m68k.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
+ subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_m68k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68k.h \
+DEPOBJ_mcore_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mcore.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_mcore_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mcore.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/mcore.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-
-DEPOBJ_mcore_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mcore.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_mips_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mips.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-
-DEPOBJ_mips_ecoff = $(INCDIR)/symcat.h $(srcdir)/config/obj-ecoff.h \
- $(srcdir)/config/tc-mips.h ecoff.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(BFDDIR)/libecoff.h
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_mips_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mips.h \
+DEPOBJ_mep_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mep.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h ecoff.h $(INCDIR)/coff/sym.h \
- $(INCDIR)/coff/ecoff.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/aout/aout64.h
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/elf/mep.h \
+ $(INCDIR)/elf/reloc-macros.h $(INCDIR)/aout/aout64.h
-DEPOBJ_mmix_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mmix.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_mn10200_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mn10200.h $(INCDIR)/coff/internal.h \
+DEPOBJ_mips_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mips.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-
-DEPOBJ_mn10200_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10200.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+ subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_mn10300_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-mn10300.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+DEPOBJ_mips_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-mips.h \
+ ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
+ $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+ $(BFDDIR)/libecoff.h
-DEPOBJ_mn10300_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_mips_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mips.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
+ $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/aout/aout64.h
-DEPOBJ_msp430_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-msp430.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+DEPOBJ_mmix_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mmix.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_msp430_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_mn10200_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10200.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_ns32k_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-ns32k.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
+DEPOBJ_mn10300_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_ns32k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ns32k.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+DEPOBJ_msp430_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_ns32k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_mt_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mt.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_openrisc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-openrisc.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+DEPOBJ_ns32k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-ns32k.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
-DEPOBJ_openrisc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-openrisc.h \
+DEPOBJ_openrisc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-openrisc.h \
dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_or32_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-or32.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/or32.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_or32_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-or32.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/or32.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_or32_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-or32.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_or32_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-or32.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_pdp11_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-pdp11.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
+DEPOBJ_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
-DEPOBJ_pdp11_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-pdp11.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+DEPOBJ_pdp11_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pdp11.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_pdp11_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pdp11.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_pj_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pj.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_pj_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-pj.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+DEPOBJ_ppc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ppc.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_pj_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pj.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_ppc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/elf/ppc.h \
+ $(INCDIR)/elf/reloc-macros.h $(INCDIR)/aout/aout64.h
-DEPOBJ_ppc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-ppc.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_s390_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-s390.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_ppc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/aout/aout64.h
+DEPOBJ_score_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-score.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_s390_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-s390.h $(INCDIR)/coff/internal.h \
+DEPOBJ_sh_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sh.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-
-DEPOBJ_s390_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-s390.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+ subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_sh_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-sh.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_sh_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_sh_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h \
+DEPOBJ_sh64_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh64.h $(srcdir)/config/tc-sh.h \
+ $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/elf32-sh64.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_sh64_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh64.h \
- $(srcdir)/config/tc-sh.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
- $(BFDDIR)/elf32-sh64.h $(INCDIR)/safe-ctype.h subsegs.h \
$(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_sparc_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-sparc.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
-
-DEPOBJ_sparc_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-sparc.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
-
-DEPOBJ_sparc_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sparc.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_tic30_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-tic30.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
-
-DEPOBJ_tic30_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-tic30.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/tic30.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_sparc_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-sparc.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
-DEPOBJ_tic30_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic30.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_sparc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sparc.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
+ subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_tic4x_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-tic4x.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/tic4x.h $(INCDIR)/coff/ti.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_sparc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sparc.h dwarf2dbg.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_tic4x_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic4x.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_spu_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-spu.h $(INCDIR)/opcode/spu.h \
+ $(INCDIR)/opcode/spu-insns.h dwarf2dbg.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_tic54x_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-tic54x.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_tic30_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-tic30.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
-DEPOBJ_tic54x_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic54x.h \
- $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
+DEPOBJ_tic30_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic30.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic30.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
+ subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_vax_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
- $(srcdir)/config/tc-vax.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
+DEPOBJ_tic4x_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic4x.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic4x.h $(INCDIR)/coff/ti.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
+ subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_vax_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-vax.h $(INCDIR)/coff/internal.h \
+DEPOBJ_tic54x_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic54x.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
+ subsegs.h $(INCDIR)/obstack.h
-DEPOBJ_vax_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-vax.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_v850_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-v850.h $(INCDIR)/elf/v850.h \
+ $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h $(INCDIR)/safe-ctype.h \
+ subsegs.h $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_v850_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-v850.h $(INCDIR)/elf/v850.h $(INCDIR)/elf/reloc-macros.h \
- $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
- $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_vax_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-vax.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
-DEPOBJ_v850_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-v850.h \
- $(INCDIR)/elf/v850.h $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h \
+DEPOBJ_vax_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-vax.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_xstormy16_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-xstormy16.h $(INCDIR)/coff/internal.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
- subsegs.h
-
-DEPOBJ_xstormy16_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xstormy16.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_xc16x_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xc16x.h \
+DEPOBJ_xc16x_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xc16x.h dwarf2dbg.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-
-DEPOBJ_xtensa_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xtensa.h \
- $(INCDIR)/xtensa-isa.h $(INCDIR)/xtensa-config.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h \
- $(INCDIR)/aout/aout64.h
-
-DEPOBJ_z80_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-z80.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/z80.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_z80_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-z80.h \
+DEPOBJ_xstormy16_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xstormy16.h \
dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+ $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_z8k_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
- $(srcdir)/config/tc-z8k.h $(INCDIR)/coff/internal.h \
- $(INCDIR)/coff/z8k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_xtensa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xtensa.h $(INCDIR)/xtensa-isa.h \
+ $(INCDIR)/xtensa-config.h $(INCDIR)/safe-ctype.h subsegs.h \
+ $(INCDIR)/obstack.h $(INCDIR)/obstack.h struc-symbol.h \
+ dwarf2dbg.h $(INCDIR)/aout/aout64.h
-DEPOBJ_z8k_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-z8k.h \
- dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
- struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_z80_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-z80.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/z80.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
+ subsegs.h $(INCDIR)/obstack.h
+
+DEPOBJ_z8k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-z8k.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/z8k.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
+ subsegs.h $(INCDIR)/obstack.h
DEPOBJ_hppa_som = $(srcdir)/config/obj-som.h subsegs.h \
$(INCDIR)/obstack.h $(BFDDIR)/libhppa.h $(BFDDIR)/som.h \
@@ -2016,458 +1739,385 @@ DEPOBJ_mips_multi = $(DEPOBJ_mips_coff) $(DEPOBJ_mips_ecoff) \
$(DEPOBJ_mips_elf)
DEPOBJ_cris_multi = $(DEPOBJ_cris_aout) $(DEPOBJ_cris_elf)
-DEP_alpha_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-alpha.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-
DEP_alpha_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-alpha.h \
ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h
-DEP_alpha_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-alpha.h
+DEP_alpha_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-alpha.h
DEP_alpha_evax = $(srcdir)/config/obj-evax.h $(srcdir)/config/tc-alpha.h
-DEP_arc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-arc.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-
-DEP_arc_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h \
- dwarf2dbg.h
+DEP_arc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_arm_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-arm.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
DEP_arm_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-arm.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/arm.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-
-DEP_arm_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_avr_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-avr.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_arm_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h
-DEP_avr_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h \
- dwarf2dbg.h
+DEP_avr_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_bfin_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-bfin.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_bfin_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_bfin_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h \
- dwarf2dbg.h
+DEP_cr16_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cr16.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
-DEP_cris_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h \
- dwarf2dbg.h
-
-DEP_crx_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-crx.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-
-DEP_crx_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-crx.h \
- dwarf2dbg.h
-
-DEP_d10v_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-d10v.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-
-DEP_d10v_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d10v.h
-
-DEP_d30v_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-d30v.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-
-DEP_d30v_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d30v.h
+DEP_cris_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cris.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_dlx_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-dlx.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_crx_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-crx.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_dlx_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-dlx.h \
- dwarf2dbg.h
+DEP_d10v_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d10v.h
-DEP_fr30_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-fr30.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_d30v_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-d30v.h
-DEP_fr30_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-fr30.h \
- dwarf2dbg.h
+DEP_dlx_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-dlx.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_frv_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-frv.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_fr30_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-fr30.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_frv_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-frv.h
+DEP_frv_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-frv.h
DEP_h8300_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-h8300.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/h8300.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-
-DEP_h8300_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-h8300.h \
- dwarf2dbg.h
-
-DEP_hppa_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-hppa.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-
-DEP_hppa_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h \
- $(BFDDIR)/elf32-hppa.h $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h \
- $(INCDIR)/elf/reloc-macros.h
-
-DEP_ia64_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ia64.h \
- $(INCDIR)/opcode/ia64.h $(INCDIR)/symcat.h $(INCDIR)/elf/ia64.h \
- $(INCDIR)/elf/reloc-macros.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/h8300.h $(INCDIR)/coff/external.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_ia64_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ia64.h \
- $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h
+DEP_h8300_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-h8300.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/h8300.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h
-DEP_i370_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i370.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_hppa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-hppa.h $(BFDDIR)/elf32-hppa.h \
+ $(BFDDIR)/elf-bfd.h $(BFDDIR)/libhppa.h $(INCDIR)/elf/hppa.h \
+ $(INCDIR)/elf/reloc-macros.h
-DEP_i370_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i370.h \
- dwarf2dbg.h
+DEP_i370_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i370.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_i386_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-i386.h \
+ $(srcdir)/../opcodes/i386-opc.h $(INCDIR)/opcode/i386.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
DEP_i386_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i386.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/i386.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+ $(srcdir)/../opcodes/i386-opc.h $(INCDIR)/opcode/i386.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_i386_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i386.h \
- dwarf2dbg.h
+DEP_i386_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i386.h $(srcdir)/../opcodes/i386-opc.h \
+ $(INCDIR)/opcode/i386.h dwarf2dbg.h $(srcdir)/config/obj-coff.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/x86_64.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h
-DEP_i860_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i860.h \
- dwarf2dbg.h
+DEP_i860_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i860.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_i960_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-i960.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/i960.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-
-DEP_i960_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i960.h \
- dwarf2dbg.h
-
-DEP_ip2k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ip2k.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/i960.h $(BFDDIR)/libcoff.h \
$(INCDIR)/bfdlink.h
-DEP_ip2k_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ip2k.h \
- dwarf2dbg.h
-
-DEP_m32c_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-m32c.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_i960_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-i960.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/i960.h $(BFDDIR)/libcoff.h
-DEP_m32c_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32c.h \
- dwarf2dbg.h
+DEP_ia64_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ia64.h $(INCDIR)/opcode/ia64.h \
+ $(INCDIR)/elf/ia64.h $(INCDIR)/elf/reloc-macros.h
-DEP_m32r_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-m32r.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_ip2k_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ip2k.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_m32r_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32r.h \
- dwarf2dbg.h
+DEP_m32c_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32c.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_m68hc11_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-m68hc11.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/m68k.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+DEP_m32r_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m32r.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_m68hc11_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68hc11.h \
- dwarf2dbg.h
+DEP_m68hc11_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68hc11.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h
DEP_m68k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-m68k.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
DEP_m68k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-m68k.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/m68k.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_m68k_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68k.h
+DEP_m68k_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-m68k.h
+
+DEP_maxq_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-maxq.h \
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/maxq.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
DEP_mcore_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mcore.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/mcore.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/mcore.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_mcore_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mcore.h \
- dwarf2dbg.h
+DEP_mcore_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mcore.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/mcore.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h
+
+DEP_mep_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mep.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_mips_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mips.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/mipspe.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
DEP_mips_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-mips.h \
ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h
-DEP_mips_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mips.h
-
-DEP_mmix_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mmix.h \
- dwarf2dbg.h
-
-DEP_mn10200_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mn10200.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_mips_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mips.h
-DEP_mn10200_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10200.h \
- dwarf2dbg.h
+DEP_mmix_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mmix.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_mn10300_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mn10300.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_mn10200_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10200.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_mn10300_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h \
- dwarf2dbg.h
+DEP_mn10300_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_msp430_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-msp430.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_msp430_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_msp430_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h \
- dwarf2dbg.h
+DEP_mt_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mt.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_ns32k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-ns32k.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
-DEP_ns32k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ns32k.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-
-DEP_ns32k_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h \
- dwarf2dbg.h
-
-DEP_openrisc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-openrisc.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-
-DEP_openrisc_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-openrisc.h \
- dwarf2dbg.h
+DEP_openrisc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-openrisc.h \
+ dwarf2dbg.h $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_or32_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-or32.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/or32.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/or32.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h
-DEP_or32_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-or32.h \
- dwarf2dbg.h
+DEP_or32_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-or32.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/or32.h $(BFDDIR)/libcoff.h
DEP_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
-DEP_pdp11_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pdp11.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-
-DEP_pdp11_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pdp11.h \
- dwarf2dbg.h
-
-DEP_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_pdp11_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pdp11.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_pj_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pj.h \
- dwarf2dbg.h
+DEP_pj_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-pj.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_ppc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ppc.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/rs6000.h \
- $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h
-DEP_ppc_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h \
- dwarf2dbg.h
+DEP_ppc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h
-DEP_s390_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-s390.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_s390_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-s390.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_s390_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-s390.h \
- dwarf2dbg.h
+DEP_score_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-score.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
DEP_sh_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sh.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_sh_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h
+DEP_sh_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h
-DEP_sh64_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh64.h \
- $(srcdir)/config/tc-sh.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
- $(BFDDIR)/elf32-sh64.h
+DEP_sh64_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh64.h $(srcdir)/config/tc-sh.h \
+ $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/elf32-sh64.h
DEP_sparc_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-sparc.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
DEP_sparc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sparc.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sparc.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_sparc_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sparc.h \
- dwarf2dbg.h
+DEP_sparc_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sparc.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h
+
+DEP_spu_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-spu.h $(INCDIR)/opcode/spu.h \
+ $(INCDIR)/opcode/spu-insns.h dwarf2dbg.h $(srcdir)/config/obj-coff.h \
+ $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h
DEP_tic30_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-tic30.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
DEP_tic30_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic30.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic30.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-
-DEP_tic30_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic30.h \
- dwarf2dbg.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic30.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
DEP_tic4x_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic4x.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic4x.h \
- $(INCDIR)/coff/ti.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-
-DEP_tic4x_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic4x.h \
- dwarf2dbg.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic4x.h $(INCDIR)/coff/ti.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
DEP_tic54x_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-tic54x.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic54x.h \
- $(INCDIR)/coff/ti.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-DEP_tic54x_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-tic54x.h
+DEP_v850_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-v850.h $(INCDIR)/elf/v850.h \
+ $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h $(srcdir)/config/obj-coff.h \
+ $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h
DEP_vax_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-vax.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
-DEP_vax_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-vax.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
-
-DEP_vax_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-vax.h \
- dwarf2dbg.h
-
-DEP_v850_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-v850.h \
- $(INCDIR)/elf/v850.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/symcat.h \
- $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-
-DEP_v850_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-v850.h \
- $(INCDIR)/elf/v850.h $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h
-
-DEP_xstormy16_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-xstormy16.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
- $(INCDIR)/bfdlink.h
+DEP_vax_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-vax.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_xstormy16_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xstormy16.h \
- dwarf2dbg.h
+DEP_xc16x_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xc16x.h dwarf2dbg.h \
+ $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_xc16x_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xc16x.h
+DEP_xstormy16_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xstormy16.h \
+ dwarf2dbg.h $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h
-DEP_xtensa_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xtensa.h \
- $(INCDIR)/xtensa-isa.h $(INCDIR)/xtensa-config.h
+DEP_xtensa_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(srcdir)/config/tc-xtensa.h $(INCDIR)/xtensa-isa.h \
+ $(INCDIR)/xtensa-config.h
DEP_z80_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-z80.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/z80.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-
-DEP_z80_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-z80.h \
- dwarf2dbg.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/z80.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
DEP_z8k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-z8k.h \
- $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/z8k.h \
- $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
-
-DEP_z8k_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-z8k.h \
- dwarf2dbg.h
+ $(INCDIR)/coff/internal.h $(INCDIR)/coff/z8k.h $(INCDIR)/coff/external.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
DEP_hppa_som = $(BFDDIR)/som.h
DEP_i386_multi = $(DEP_i386_aout) $(DEP_i386_coff) \
@@ -2489,15 +2139,15 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
- echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
- cd $(srcdir) && $(AUTOMAKE) --foreign \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --cygnus '; \
+ cd $(srcdir) && $(AUTOMAKE) --cygnus \
&& exit 0; \
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign Makefile
+ $(AUTOMAKE) --cygnus Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -2856,12 +2506,11 @@ po/POTFILES.in: @MAINT@ Makefile
diststuff: $(EXTRA_DIST) info
all: info
-$(OBJS): @ALL_OBJ_DEPS@
-
# Stuff that every object file depends upon. If anything is removed
# from this list, remove it from dep-in.sed as well.
-$(OBJS): $(INCDIR)/bin-bugs.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(INCDIR)/progress.h $(INCDIR)/fopen-same.h \
+$(OBJS): ../bfd/bfd.h $(INCDIR)/symcat.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h $(INCDIR)/progress.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/fopen-bin.h $(INCDIR)/fopen-vms.h \
$(OBJ_FORMAT_H) $(TARG_CPU_H) $(TARG_ENV_H) \
as.h asintl.h bignum.h bit_fix.h config.h emul.h expr.h flonum.h \
frags.h hash.h listing.h obj.h read.h symbols.h tc.h write.h
@@ -2901,18 +2550,16 @@ ecoff.o : ecoff.c ecoff.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \
# We need all these explicit rules for the multi stuff. Because of
# these rules, we don't need one for OBJ_FORMAT_O.
-obj-aout.o : $(srcdir)/config/obj-aout.c
+obj-aout.o : $(srcdir)/config/obj-aout.c $(DEP_@target_cpu_type@_aout)
$(COMPILE) -c $(srcdir)/config/obj-aout.c
-obj-coff.o: $(srcdir)/config/obj-coff.c
+obj-coff.o: $(srcdir)/config/obj-coff.c $(DEP_@target_cpu_type@_coff)
$(COMPILE) -c $(srcdir)/config/obj-coff.c
-obj-ecoff.o : $(srcdir)/config/obj-ecoff.c
+obj-ecoff.o : $(srcdir)/config/obj-ecoff.c $(DEP_@target_cpu_type@_ecoff)
$(COMPILE) -c $(srcdir)/config/obj-ecoff.c
-obj-elf.o : $(srcdir)/config/obj-elf.c
+obj-elf.o : $(srcdir)/config/obj-elf.c $(DEP_@target_cpu_type@_elf)
$(COMPILE) -c $(srcdir)/config/obj-elf.c
obj-evax.o : $(srcdir)/config/obj-evax.c
$(COMPILE) -c $(srcdir)/config/obj-evax.c
-obj-ieee.o : $(srcdir)/config/obj-ieee.c
- $(COMPILE) -c $(srcdir)/config/obj-ieee.c
obj-multi.o : $(srcdir)/config/obj-multi.c
$(COMPILE) -c $(srcdir)/config/obj-multi.c
obj-som.o : $(srcdir)/config/obj-som.c
@@ -2959,7 +2606,7 @@ m68k-parse.c: $(srcdir)/config/m68k-parse.y
rm -f m68k-parse.y; \
else true; fi
# Disable -Werror, if it has been enabled, since old versions of bison/
-# yacc will produce working code which contain compile time warnings.
+# yacc will produce working code which contain compile time warnings.
m68k-parse.o: m68k-parse.c $(srcdir)/config/m68k-parse.h
$(COMPILE) -c $< $(NO_WERROR)
@@ -2986,12 +2633,12 @@ bfin-lex.o: bfin-lex.c bfin-parse.h $(srcdir)/config/bfin-defs.h
itbl-lex.c: $(srcdir)/itbl-lex.l
# Disable -Werror, if it has been enabled, since old versions of bison/
-# yacc will produce working code which contain compile time warnings.
+# yacc will produce working code which contain compile time warnings.
itbl-lex.o: itbl-lex.c itbl-parse.h $(srcdir)/itbl-lex.h
$(COMPILE) -c $< $(NO_WERROR)
# Disable -Werror, if it has been enabled, since old versions of bison/
-# yacc will produce working code which contain compile time warnings.
+# yacc will produce working code which contain compile time warnings.
itbl-parse.o: itbl-parse.c itbl-parse.h $(srcdir)/itbl-ops.h $(srcdir)/itbl-lex.h
$(COMPILE) -c $< $(NO_WERROR)
@@ -3319,66 +2966,52 @@ dep-am: DEP
# ANYTHING CHANGED OR ADDED BETWEEN THE WARNING LINES MAY GO AWAY.
.PHONY: dep dep-in dep-am
#MKDEP DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW.
-app.o: app.c $(INCDIR)/symcat.h
-as.o: as.c $(INCDIR)/symcat.h subsegs.h $(INCDIR)/obstack.h \
- output-file.h sb.h macro.h dwarf2dbg.h dw2gencfi.h \
- $(INCDIR)/elf/dwarf2.h $(BFDVER_H)
-atof-generic.o: atof-generic.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h
-cond.o: cond.c $(INCDIR)/symcat.h macro.h sb.h $(INCDIR)/obstack.h
-depend.o: depend.c $(INCDIR)/symcat.h
-dwarf2dbg.o: dwarf2dbg.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
- dwarf2dbg.h $(INCDIR)/filenames.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/elf/dwarf2.h
-dw2gencfi.o: dw2gencfi.c $(INCDIR)/symcat.h dw2gencfi.h \
+app.o: app.c
+as.o: as.c subsegs.h $(INCDIR)/obstack.h output-file.h \
+ sb.h macro.h dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ ../bfd/bfdver.h
+atof-generic.o: atof-generic.c $(INCDIR)/safe-ctype.h
+cond.o: cond.c sb.h macro.h $(INCDIR)/obstack.h
+depend.o: depend.c
+dwarf2dbg.o: dwarf2dbg.c $(INCDIR)/safe-ctype.h dwarf2dbg.h \
+ $(INCDIR)/filenames.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/elf/dwarf2.h
-ecoff.o: ecoff.c $(INCDIR)/symcat.h ecoff.h
-ehopt.o: ehopt.c $(INCDIR)/symcat.h subsegs.h $(INCDIR)/obstack.h \
- $(INCDIR)/elf/dwarf2.h
-expr.o: expr.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/obstack.h
-flonum-copy.o: flonum-copy.c $(INCDIR)/symcat.h
+dw2gencfi.o: dw2gencfi.c dw2gencfi.h $(INCDIR)/elf/dwarf2.h \
+ subsegs.h $(INCDIR)/obstack.h
+ecoff.o: ecoff.c ecoff.h
+ehopt.o: ehopt.c subsegs.h $(INCDIR)/obstack.h $(INCDIR)/elf/dwarf2.h
+expr.o: expr.c $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h
+flonum-copy.o: flonum-copy.c
flonum-konst.o: flonum-konst.c
flonum-mult.o: flonum-mult.c
-frags.o: frags.c $(INCDIR)/symcat.h subsegs.h $(INCDIR)/obstack.h
-hash.o: hash.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/obstack.h
-input-file.o: input-file.c $(INCDIR)/symcat.h input-file.h \
- $(INCDIR)/safe-ctype.h
-input-scrub.o: input-scrub.c $(INCDIR)/symcat.h input-file.h \
- sb.h
-listing.o: listing.c $(INCDIR)/symcat.h $(INCDIR)/obstack.h \
- $(INCDIR)/safe-ctype.h input-file.h subsegs.h
-literal.o: literal.c $(INCDIR)/symcat.h subsegs.h $(INCDIR)/obstack.h
-macro.o: macro.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
- sb.h macro.h
-messages.o: messages.c $(INCDIR)/symcat.h
-output-file.o: output-file.c $(INCDIR)/symcat.h output-file.h
-read.o: read.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
- subsegs.h $(INCDIR)/obstack.h sb.h macro.h ecoff.h \
- dw2gencfi.h $(INCDIR)/elf/dwarf2.h
-sb.o: sb.c sb.h $(INCDIR)/symcat.h
-stabs.o: stabs.c $(INCDIR)/symcat.h $(INCDIR)/obstack.h \
- subsegs.h ecoff.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
-subsegs.o: subsegs.c $(INCDIR)/symcat.h subsegs.h $(INCDIR)/obstack.h
-symbols.o: symbols.c $(INCDIR)/symcat.h $(INCDIR)/safe-ctype.h \
- $(INCDIR)/obstack.h subsegs.h struc-symbol.h
-write.o: write.c $(INCDIR)/symcat.h subsegs.h $(INCDIR)/obstack.h \
- output-file.h dwarf2dbg.h
-itbl-ops.o: itbl-ops.c itbl-ops.h $(INCDIR)/symcat.h
-e-crisaout.o: $(srcdir)/config/e-crisaout.c $(INCDIR)/symcat.h \
- emul-target.h
-e-criself.o: $(srcdir)/config/e-criself.c $(INCDIR)/symcat.h \
- emul-target.h
-e-i386aout.o: $(srcdir)/config/e-i386aout.c $(INCDIR)/symcat.h \
- emul-target.h
-e-i386coff.o: $(srcdir)/config/e-i386coff.c $(INCDIR)/symcat.h \
- emul-target.h
-e-i386elf.o: $(srcdir)/config/e-i386elf.c $(INCDIR)/symcat.h \
- emul-target.h
-e-mipsecoff.o: $(srcdir)/config/e-mipsecoff.c $(INCDIR)/symcat.h \
- emul-target.h
-e-mipself.o: $(srcdir)/config/e-mipself.c $(INCDIR)/symcat.h \
- emul-target.h
+frags.o: frags.c subsegs.h $(INCDIR)/obstack.h
+hash.o: hash.c $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h
+input-file.o: input-file.c input-file.h $(INCDIR)/safe-ctype.h
+input-scrub.o: input-scrub.c input-file.h sb.h
+listing.o: listing.c $(INCDIR)/obstack.h $(INCDIR)/safe-ctype.h \
+ input-file.h subsegs.h
+literal.o: literal.c subsegs.h $(INCDIR)/obstack.h
+macro.o: macro.c $(INCDIR)/safe-ctype.h sb.h macro.h
+messages.o: messages.c
+output-file.o: output-file.c output-file.h
+read.o: read.c $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ sb.h macro.h ecoff.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
+sb.o: sb.c sb.h
+stabs.o: stabs.c $(INCDIR)/obstack.h subsegs.h ecoff.h \
+ $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
+subsegs.o: subsegs.c subsegs.h $(INCDIR)/obstack.h
+symbols.o: symbols.c $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
+ subsegs.h struc-symbol.h
+write.o: write.c subsegs.h $(INCDIR)/obstack.h output-file.h \
+ dwarf2dbg.h $(BFDDIR)/libbfd.h $(INCDIR)/hashtab.h
+itbl-ops.o: itbl-ops.c itbl-ops.h
+e-crisaout.o: $(srcdir)/config/e-crisaout.c emul-target.h
+e-criself.o: $(srcdir)/config/e-criself.c emul-target.h
+e-i386aout.o: $(srcdir)/config/e-i386aout.c emul-target.h
+e-i386coff.o: $(srcdir)/config/e-i386coff.c emul-target.h
+e-i386elf.o: $(srcdir)/config/e-i386elf.c emul-target.h
+e-mipsecoff.o: $(srcdir)/config/e-mipsecoff.c emul-target.h
+e-mipself.o: $(srcdir)/config/e-mipself.c emul-target.h
$(OBJS): $(DEP_@target_cpu_type@_@obj_format@)
$(TARG_CPU_O): $(DEPTC_@target_cpu_type@_@obj_format@)
$(OBJ_FORMAT_O): $(DEPOBJ_@target_cpu_type@_@obj_format@)
diff --git a/gas/NEWS b/gas/NEWS
index 4b4d029685ab..bf278ef65a88 100644
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -1,4 +1,12 @@
-*- text -*-
+* Support for the National Semiconductor CR16 target has been added.
+
+* Added gas .reloc pseudo. This is a low-level interface for creating
+ relocations.
+
+* Add support for x86_64 PE+ target.
+
+* Add support for Score target.
* Support for the Infineon XC16X has been added by KPIT Cummins Infosystems.
diff --git a/gas/acinclude.m4 b/gas/acinclude.m4
index 0946e724f126..fa4c1bc6e9f5 100644
--- a/gas/acinclude.m4
+++ b/gas/acinclude.m4
@@ -1,5 +1,3 @@
-sinclude(../bfd/warning.m4)
-
dnl GAS_CHECK_DECL_NEEDED(name, typedefname, typedef, headers)
AC_DEFUN([GAS_CHECK_DECL_NEEDED],[
AC_MSG_CHECKING(whether declaration is required for $1)
@@ -56,19 +54,3 @@ for _gas_uniq_i in _gas_uniq_dummy [$]_gas_uniq_list ; do
done
$1=[$]_gas_uniq_newlist
])dnl
-
-sinclude(../libtool.m4)
-dnl The lines below arrange for aclocal not to bring libtool.m4
-dnl AM_PROG_LIBTOOL into aclocal.m4, while still arranging for automake
-dnl to add a definition of LIBTOOL to Makefile.in.
-ifelse(yes,no,[
-AC_DEFUN([AM_PROG_LIBTOOL],)
-AC_DEFUN([AC_CHECK_LIBM],)
-AC_SUBST(LIBTOOL)
-])
-
-sinclude(../gettext.m4)
-ifelse(yes,no,[
-AC_DEFUN([CY_WITH_NLS],)
-AC_SUBST(INTLLIBS)
-])
diff --git a/gas/aclocal.m4 b/gas/aclocal.m4
index cd4267338b72..1182e3622d19 100644
--- a/gas/aclocal.m4
+++ b/gas/aclocal.m4
@@ -480,27 +480,6 @@ AC_DEFUN([AM_PROG_INSTALL_SH],
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.
#
@@ -910,4 +889,16 @@ AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
+m4_include([../bfd/acinclude.m4])
+m4_include([../bfd/warning.m4])
+m4_include([../config/depstand.m4])
+m4_include([../config/gettext-sister.m4])
+m4_include([../config/lead-dot.m4])
+m4_include([../config/nls.m4])
+m4_include([../config/po.m4])
+m4_include([../config/progtest.m4])
+m4_include([../libtool.m4])
+m4_include([../ltoptions.m4])
+m4_include([../ltsugar.m4])
+m4_include([../ltversion.m4])
m4_include([acinclude.m4])
diff --git a/gas/app.c b/gas/app.c
index 275ad68ebb0b..e5f177801fdb 100644
--- a/gas/app.c
+++ b/gas/app.c
@@ -1,6 +1,6 @@
/* This is the Assembler Pre-Processor
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003
+ 1999, 2000, 2001, 2002, 2003, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -21,13 +21,12 @@
02110-1301, USA. */
/* Modified by Allen Wirfs-Brock, Instantiations Inc 2/90. */
-/* App, the assembler pre-processor. This pre-processor strips out excess
- spaces, turns single-quoted characters into a decimal constant, and turns
- # <number> <filename> <garbage> into a .line <number>\n.file <filename>
- pair. This needs better error-handling. */
+/* App, the assembler pre-processor. This pre-processor strips out
+ excess spaces, turns single-quoted characters into a decimal
+ constant, and turns the # in # <number> <filename> <garbage> into a
+ .linefile. This needs better error-handling. */
-#include <stdio.h>
-#include "as.h" /* For BAD_CASE() only. */
+#include "as.h"
#if (__STDC__ != 1)
#ifndef const
@@ -352,11 +351,11 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen)
1: After first whitespace on line (flush more white)
2: After first non-white (opcode) on line (keep 1white)
3: after second white on line (into operands) (flush white)
- 4: after putting out a .line, put out digits
+ 4: after putting out a .linefile, put out digits
5: parsing a string, then go to old-state
6: putting out \ escape in a "d string.
- 7: After putting out a .appfile, put out string.
- 8: After putting out a .appfile string, flush until newline.
+ 7: no longer used
+ 8: no longer used
9: After seeing symbol char in state 3 (keep 1white after symchar)
10: After seeing whitespace in state 9 (keep white before symchar)
11: After seeing a symbol character in state 0 (eg a label definition)
@@ -511,14 +510,10 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen)
ch = GET ();
if (ch == '"')
{
- UNGET (ch);
- if (scrub_m68k_mri)
- out_string = "\n\tappfile ";
- else
- out_string = "\n\t.appfile ";
- old_state = 7;
- state = -1;
- PUT (*out_string++);
+ quotechar = ch;
+ state = 5;
+ old_state = 3;
+ PUT (ch);
}
else
{
@@ -555,6 +550,8 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen)
memcpy (to, from, len);
to += len;
from += len;
+ if (to >= toend)
+ goto tofull;
}
}
@@ -639,24 +636,6 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen)
PUT (ch);
continue;
- case 7:
- ch = GET ();
- quotechar = ch;
- state = 5;
- old_state = 8;
- PUT (ch);
- continue;
-
- case 8:
- do
- ch = GET ();
- while (ch != '\n' && ch != EOF);
- if (ch == EOF)
- goto fromeof;
- state = 0;
- PUT (ch);
- continue;
-
#ifdef DOUBLEBAR_PARALLEL
case 13:
ch = GET ();
@@ -888,9 +867,6 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen)
switch (state)
{
- case 0:
- state++;
- goto recycle; /* Punted leading sp */
case 1:
/* We can arrive here if we leave a leading whitespace
character at the beginning of a line. */
@@ -1200,9 +1176,9 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen)
old_state = 4;
state = -1;
if (scrub_m68k_mri)
- out_string = "\tappline ";
+ out_string = "\tlinefile ";
else
- out_string = "\t.appline ";
+ out_string = "\t.linefile ";
PUT (*out_string++);
break;
}
@@ -1245,6 +1221,15 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen)
if ((symver_state != NULL) && (*symver_state == 0))
goto de_fault;
#endif
+
+#ifdef TC_ARM
+ /* For the ARM, care is needed not to damage occurrences of \@
+ by stripping the @ onwards. Yuck. */
+ if (to > tostart && *(to - 1) == '\\')
+ /* Do not treat the @ as a start-of-comment. */
+ goto de_fault;
+#endif
+
#ifdef WARN_COMMENTS
if (!found_comment)
as_where (&found_comment_file, &found_comment);
@@ -1377,7 +1362,15 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen)
the space. We don't have enough information to
make the right choice, so here we are making the
choice which is more likely to be correct. */
- PUT (' ');
+ if (to + 1 >= toend)
+ {
+ /* If we're near the end of the buffer, save the
+ character for the next time round. Otherwise
+ we'll lose our state. */
+ UNGET (ch);
+ goto tofull;
+ }
+ *to++ = ' ';
}
state = 3;
diff --git a/gas/as.c b/gas/as.c
index 727a1dd40ee5..b05f9d514a30 100644
--- a/gas/as.c
+++ b/gas/as.c
@@ -1,6 +1,6 @@
/* as.c - GAS main program.
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -31,8 +31,6 @@
Since no-one else says they will support them in future: I
don't support them now. */
-#include "ansidecl.h"
-
#define COMMON
#include "as.h"
@@ -42,7 +40,6 @@
#include "macro.h"
#include "dwarf2dbg.h"
#include "dw2gencfi.h"
-#include "hash.h"
#include "bfdver.h"
#ifdef HAVE_ITBL_CPU
@@ -352,7 +349,9 @@ Options:\n\
md_show_usage (stream);
fputc ('\n', stream);
- fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
+
+ if (REPORT_BUGS_TO[0] && stream == stdout)
+ fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
}
/* Since it is easy to do here we interpret the special arg "-"
@@ -591,7 +590,7 @@ parse_args (int * pargc, char *** pargv)
case OPTION_VERSION:
/* This output is intended to follow the GNU standards document. */
printf (_("GNU assembler %s\n"), BFD_VERSION_STRING);
- printf (_("Copyright 2005 Free Software Foundation, Inc.\n"));
+ printf (_("Copyright 2007 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"));
@@ -1032,6 +1031,33 @@ perform_an_assembly_pass (int argc, char ** argv)
read_a_source_file ("");
}
+#ifdef OBJ_ELF
+static void
+create_obj_attrs_section (void)
+{
+ segT s;
+ char *p;
+ addressT addr;
+ offsetT size;
+ const char *name;
+
+ size = bfd_elf_obj_attr_size (stdoutput);
+ if (size)
+ {
+ name = get_elf_backend_data (stdoutput)->obj_attrs_section;
+ if (!name)
+ name = ".gnu.attributes";
+ s = subseg_new (name, 0);
+ elf_section_type (s)
+ = get_elf_backend_data (stdoutput)->obj_attrs_section_type;
+ bfd_set_section_flags (stdoutput, s, SEC_READONLY | SEC_DATA);
+ addr = frag_now_fix ();
+ p = frag_more (size);
+ bfd_elf_set_obj_attr_contents (stdoutput, (bfd_byte *)p, size);
+ }
+}
+#endif
+
int
main (int argc, char ** argv)
@@ -1125,6 +1151,11 @@ main (int argc, char ** argv)
sym = symbol_new (defsyms->name, absolute_section, defsyms->value,
&zero_address_frag);
+ /* Make symbols defined on the command line volatile, so that they
+ can be redefined inside a source file. This makes this assembler's
+ behaviour compatible with earlier versions, but it may not be
+ completely intuitive. */
+ S_SET_VOLATILE (sym);
symbol_table_insert (sym);
next = defsyms->next;
free (defsyms);
@@ -1142,6 +1173,11 @@ main (int argc, char ** argv)
md_end ();
#endif
+#ifdef OBJ_ELF
+ if (IS_ELF)
+ create_obj_attrs_section ();
+#endif
+
#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
if ((flag_execstack || flag_noexecstack)
&& OUTPUT_FLAVOR == bfd_target_elf_flavour)
diff --git a/gas/as.h b/gas/as.h
index 2f92c2ed7748..4ea63abeea92 100644
--- a/gas/as.h
+++ b/gas/as.h
@@ -1,6 +1,6 @@
/* as.h - global header file
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -37,7 +37,6 @@
If TEST is #defined, then we are testing a module: #define COMMON as "". */
#include "config.h"
-#include "bin-bugs.h"
/* This is the code recommended in the autoconf documentation, almost
verbatim. If it doesn't work for you, let me know, and notify
@@ -210,7 +209,7 @@ extern int vsnprintf(char *, size_t, const char *, va_list);
#endif /* __FILE__ */
#ifndef FOPEN_WB
-#if defined GO32 || defined __MINGW32__
+#ifdef USE_BINARY_FOPEN
#include "fopen-bin.h"
#else
#include "fopen-same.h"
@@ -259,7 +258,11 @@ typedef addressT valueT;
#endif
/* COMMON now defined */
-#ifdef DEBUG
+#ifndef ENABLE_CHECKING
+#define ENABLE_CHECKING 0
+#endif
+
+#if ENABLE_CHECKING || defined (DEBUG)
#ifndef know
#define know(p) assert(p) /* Verify our assumptions! */
#endif /* not yet defined */
@@ -544,7 +547,6 @@ void cond_finish_check (int);
void cond_exit_macro (int);
int seen_at_least_1_file (void);
void app_pop (char *);
-void as_perror (const char *, const char *);
void as_where (char **, unsigned int *);
void bump_line_counters (void);
void do_scrub_begin (int);
@@ -552,6 +554,7 @@ void input_scrub_begin (void);
void input_scrub_close (void);
void input_scrub_end (void);
int new_logical_line (char *, int);
+int new_logical_line_flags (char *, int, int);
void subsegs_begin (void);
void subseg_change (segT, int);
segT subseg_new (const char *, subsegT);
@@ -567,7 +570,6 @@ segT subseg_get (const char *, int);
struct expressionS;
struct fix;
typedef struct symbol symbolS;
-struct relax_type;
typedef struct frag fragS;
/* literal.c */
diff --git a/gas/atof-generic.c b/gas/atof-generic.c
index 6a5c2f15b3cc..3021c4c861bb 100644
--- a/gas/atof-generic.c
+++ b/gas/atof-generic.c
@@ -1,6 +1,6 @@
/* atof_generic.c - turn a string of digits into a Flonum
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000,
- 2001, 2003, 2005 Free Software Foundation, Inc.
+ 2001, 2003, 2005, 2006 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -19,8 +19,6 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include <string.h>
-
#include "as.h"
#include "safe-ctype.h"
diff --git a/gas/bfin-lex.c b/gas/bfin-lex.c
deleted file mode 100644
index cfc1fe7f30c0..000000000000
--- a/gas/bfin-lex.c
+++ /dev/null
@@ -1,3368 +0,0 @@
-/* A lexical scanner generated by flex */
-
-/* Scanner skeleton version:
- * $Header: /cvs/src/src/gas/Attic/bfin-lex.c,v 1.1.2.1 2006/04/16 18:36:43 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 238
-#define YY_END_OF_BUFFER 239
-static yyconst short int yy_accept[559] =
- { 0,
- 0, 0, 0, 0, 239, 237, 235, 235, 220, 233,
- 219, 218, 200, 201, 216, 214, 211, 210, 203, 232,
- 232, 202, 221, 199, 195, 237, 224, 233, 148, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 70, 233,
- 233, 233, 54, 19, 18, 233, 12, 10, 8, 7,
- 189, 188, 187, 233, 185, 183, 233, 233, 233, 233,
- 233, 233, 217, 215, 213, 212, 0, 209, 204, 0,
- 0, 0, 232, 234, 0, 232, 234, 198, 196, 222,
- 194, 193, 178, 175, 233, 233, 233, 150, 151, 233,
- 233, 149, 0, 147, 233, 140, 233, 233, 136, 233,
-
- 125, 233, 123, 233, 233, 233, 233, 233, 233, 233,
- 103, 102, 101, 233, 100, 99, 233, 233, 97, 233,
- 95, 94, 93, 91, 233, 85, 233, 233, 77, 86,
- 233, 71, 69, 233, 233, 233, 233, 65, 233, 233,
- 233, 59, 233, 56, 233, 233, 53, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 25,
- 233, 233, 233, 233, 233, 15, 14, 233, 233, 159,
- 233, 186, 233, 184, 223, 233, 233, 95, 233, 233,
- 233, 205, 207, 206, 208, 0, 0, 232, 232, 232,
- 232, 197, 191, 192, 233, 233, 171, 152, 153, 233,
-
- 233, 162, 163, 233, 154, 156, 232, 233, 233, 233,
- 233, 233, 233, 124, 233, 233, 119, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 179, 98, 233, 233,
- 233, 233, 233, 233, 80, 83, 78, 81, 233, 233,
- 233, 79, 82, 233, 67, 66, 233, 63, 62, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 44,
- 39, 38, 37, 36, 35, 34, 233, 32, 31, 233,
- 233, 233, 233, 233, 233, 233, 21, 233, 233, 16,
- 13, 233, 9, 233, 233, 233, 233, 233, 233, 233,
- 236, 190, 170, 168, 177, 176, 169, 167, 174, 173,
-
- 233, 233, 233, 155, 157, 146, 233, 233, 233, 233,
- 139, 138, 233, 127, 233, 233, 118, 233, 233, 233,
- 233, 111, 110, 233, 233, 233, 233, 233, 233, 233,
- 105, 104, 233, 233, 233, 96, 233, 92, 89, 84,
- 74, 233, 233, 68, 64, 233, 61, 60, 58, 57,
- 233, 55, 45, 233, 50, 47, 49, 46, 48, 233,
- 233, 43, 42, 233, 233, 233, 233, 233, 27, 24,
- 23, 233, 233, 233, 233, 233, 233, 228, 233, 227,
- 233, 233, 233, 233, 160, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 122, 233, 117, 116, 233,
-
- 233, 233, 233, 233, 233, 233, 233, 108, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 2, 182,
- 52, 41, 40, 33, 233, 233, 233, 30, 233, 22,
- 233, 233, 233, 172, 231, 233, 233, 233, 233, 233,
- 164, 161, 145, 144, 143, 142, 141, 233, 233, 233,
- 233, 126, 121, 233, 233, 233, 233, 233, 51, 233,
- 233, 107, 233, 233, 233, 233, 233, 88, 87, 90,
- 233, 233, 73, 72, 29, 233, 233, 233, 20, 233,
- 233, 233, 229, 233, 226, 165, 166, 233, 233, 233,
- 233, 233, 233, 120, 233, 114, 113, 233, 233, 233,
-
- 5, 106, 233, 180, 233, 233, 233, 233, 28, 233,
- 233, 17, 11, 233, 233, 233, 233, 135, 133, 134,
- 132, 129, 233, 115, 233, 6, 109, 233, 233, 3,
- 233, 76, 1, 26, 230, 225, 137, 130, 131, 233,
- 233, 233, 233, 233, 128, 233, 233, 4, 75, 233,
- 233, 112, 233, 233, 233, 233, 181, 0
- } ;
-
-static yyconst int yy_ec[256] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 4, 1, 5, 6, 7, 8, 1, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 1, 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, 57, 58,
- 59, 1, 60, 61, 62, 1, 63, 64, 35, 36,
-
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 65, 48, 49, 66, 51, 67, 53, 54, 55, 56,
- 57, 58, 1, 68, 1, 69, 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[70] =
- { 0,
- 1, 1, 2, 1, 1, 3, 1, 1, 1, 1,
- 1, 1, 1, 1, 3, 1, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 1, 1, 1, 1,
- 1, 1, 5, 4, 5, 5, 5, 4, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 1, 1,
- 1, 3, 5, 4, 3, 3, 3, 1, 1
- } ;
-
-static yyconst short int yy_base[565] =
- { 0,
- 0, 0, 32, 33, 814, 815, 815, 815, 815, 0,
- 815, 783, 815, 815, 782, 60, 815, 61, 800, 113,
- 44, 815, 815, 54, 75, 779, 815, 161, 221, 59,
- 84, 42, 92, 105, 109, 148, 756, 271, 141, 48,
- 110, 322, 372, 421, 153, 757, 60, 787, 0, 0,
- 815, 815, 776, 741, 58, 815, 141, 64, 763, 43,
- 61, 0, 815, 815, 815, 815, 105, 815, 815, 129,
- 792, 210, 225, 235, 472, 275, 815, 772, 815, 815,
- 815, 145, 786, 785, 748, 163, 757, 0, 0, 263,
- 185, 0, 0, 782, 131, 0, 759, 97, 154, 751,
-
- 0, 753, 0, 736, 757, 752, 742, 69, 736, 279,
- 773, 741, 0, 156, 0, 0, 157, 749, 770, 740,
- 0, 0, 732, 0, 737, 766, 196, 199, 0, 153,
- 226, 247, 765, 723, 732, 220, 280, 0, 221, 740,
- 170, 761, 740, 0, 250, 728, 758, 731, 252, 735,
- 257, 308, 260, 248, 269, 288, 281, 729, 730, 753,
- 710, 725, 714, 713, 710, 0, 0, 714, 298, 0,
- 742, 815, 219, 815, 815, 707, 715, 714, 711, 174,
- 712, 815, 815, 815, 815, 744, 138, 356, 408, 0,
- 0, 815, 815, 724, 312, 343, 0, 0, 0, 714,
-
- 711, 0, 0, 249, 700, 699, 0, 232, 369, 695,
- 303, 711, 703, 0, 700, 701, 375, 337, 337, 122,
- 238, 338, 378, 347, 239, 709, 725, 0, 356, 318,
- 705, 722, 692, 363, 0, 0, 0, 0, 691, 390,
- 697, 0, 0, 372, 0, 0, 689, 0, 0, 700,
- 684, 699, 403, 690, 684, 393, 436, 680, 474, 431,
- 0, 0, 0, 0, 0, 0, 684, 0, 0, 398,
- 678, 401, 690, 681, 437, 680, 0, 690, 401, 0,
- 0, 662, 0, 657, 671, 684, 667, 676, 680, 676,
- 705, 815, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 669, 676, 434, 0, 0, 0, 669, 659, 674, 448,
- 0, 659, 466, 694, 673, 670, 439, 661, 411, 654,
- 660, 0, 0, 419, 422, 647, 649, 450, 665, 470,
- 0, 0, 664, 675, 462, 0, 636, 0, 682, 0,
- 634, 642, 656, 0, 0, 656, 0, 0, 0, 0,
- 657, 0, 0, 654, 0, 0, 0, 0, 0, 671,
- 672, 0, 0, 652, 652, 470, 649, 471, 470, 0,
- 0, 650, 646, 632, 637, 614, 640, 617, 627, 0,
- 640, 630, 521, 474, 0, 466, 619, 475, 630, 477,
- 633, 624, 485, 625, 614, 0, 618, 0, 0, 620,
-
- 623, 625, 626, 611, 491, 628, 611, 0, 619, 625,
- 622, 613, 622, 495, 503, 487, 608, 497, 0, 0,
- 0, 0, 0, 0, 615, 517, 603, 0, 612, 0,
- 613, 614, 519, 0, 609, 609, 501, 605, 624, 625,
- 0, 0, 0, 0, 0, 0, 0, 604, 537, 609,
- 595, 0, 623, 597, 508, 510, 594, 588, 0, 590,
- 600, 0, 511, 585, 614, 532, 597, 0, 0, 0,
- 596, 586, 0, 0, 0, 514, 594, 517, 0, 518,
- 574, 583, 0, 593, 0, 0, 0, 589, 544, 315,
- 578, 582, 538, 0, 568, 0, 0, 586, 578, 520,
-
- 0, 0, 575, 0, 551, 554, 563, 564, 0, 521,
- 548, 0, 0, 543, 556, 522, 418, 0, 0, 0,
- 0, 0, 558, 0, 535, 0, 0, 524, 528, 0,
- 424, 0, 0, 0, 0, 0, 0, 0, 0, 403,
- 388, 378, 324, 279, 0, 272, 529, 0, 0, 531,
- 538, 0, 262, 168, 82, 83, 0, 815, 603, 608,
- 92, 613, 615, 617
- } ;
-
-static yyconst short int yy_def[565] =
- { 0,
- 558, 1, 1, 1, 558, 558, 558, 558, 558, 559,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 560,
- 561, 558, 558, 558, 558, 558, 558, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 558, 558, 558, 28, 558, 558, 559, 36, 38, 42,
- 559, 559, 558, 558, 558, 558, 558, 558, 558, 558,
- 562, 558, 558, 558, 558, 558, 558, 558, 558, 558,
- 558, 558, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 563, 559, 559, 559, 559, 559, 559, 559,
-
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 558, 559, 558, 558, 559, 559, 559, 559, 559,
- 559, 558, 558, 558, 558, 562, 562, 558, 558, 75,
- 564, 558, 558, 558, 559, 559, 559, 559, 559, 559,
-
- 559, 559, 559, 559, 559, 559, 563, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 562, 558, 559, 559, 559, 559, 559, 559, 559, 559,
-
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
-
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
-
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 0, 558, 558,
- 558, 558, 558, 558
- } ;
-
-static yyconst short int yy_nxt[885] =
- { 0,
- 6, 7, 8, 9, 6, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 10, 19, 20, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 10, 38, 39, 40, 41, 42, 10, 43,
- 44, 45, 46, 47, 48, 49, 10, 50, 51, 52,
- 53, 10, 54, 29, 41, 43, 45, 55, 56, 57,
- 57, 65, 58, 58, 68, 59, 59, 77, 80, 60,
- 60, 77, 78, 79, 61, 61, 109, 174, 93, 66,
- 69, 100, 180, 101, 137, 76, 93, 110, 138, 177,
-
- 169, 178, 102, 557, 81, 103, 181, 77, 180, 104,
- 170, 168, 137, 93, 93, 105, 182, 106, 183, 219,
- 107, 100, 220, 103, 108, 175, 556, 67, 70, 73,
- 73, 73, 73, 73, 73, 73, 73, 73, 73, 111,
- 184, 113, 185, 211, 112, 93, 74, 106, 187, 116,
- 74, 114, 117, 291, 139, 140, 115, 133, 133, 133,
- 133, 211, 141, 118, 119, 119, 119, 119, 75, 114,
- 322, 115, 323, 134, 193, 194, 74, 83, 84, 198,
- 199, 135, 209, 120, 176, 121, 136, 122, 111, 164,
- 165, 555, 166, 112, 85, 86, 167, 209, 123, 239,
-
- 124, 205, 206, 134, 87, 212, 88, 227, 228, 89,
- 289, 90, 235, 236, 91, 237, 238, 239, 92, 256,
- 212, 252, 227, 228, 85, 93, 188, 188, 188, 188,
- 188, 188, 188, 188, 188, 188, 252, 94, 94, 94,
- 94, 189, 189, 189, 189, 189, 189, 189, 189, 189,
- 189, 188, 188, 188, 188, 188, 188, 188, 188, 188,
- 188, 95, 240, 242, 243, 241, 247, 250, 96, 197,
- 97, 306, 324, 325, 326, 306, 98, 99, 331, 554,
- 268, 303, 332, 284, 247, 250, 97, 126, 126, 126,
- 126, 76, 76, 76, 76, 76, 76, 76, 76, 76,
-
- 76, 255, 201, 259, 127, 128, 202, 129, 261, 267,
- 268, 303, 203, 222, 204, 269, 255, 130, 259, 550,
- 270, 131, 132, 261, 549, 267, 223, 248, 203, 204,
- 224, 249, 272, 269, 127, 130, 271, 132, 142, 142,
- 142, 142, 142, 142, 262, 224, 249, 272, 263, 282,
- 270, 293, 312, 264, 143, 294, 144, 336, 265, 519,
- 548, 336, 520, 266, 282, 145, 295, 296, 312, 321,
- 327, 146, 188, 188, 188, 188, 188, 188, 188, 188,
- 188, 188, 297, 320, 143, 328, 298, 146, 147, 147,
- 147, 147, 147, 147, 147, 147, 330, 299, 300, 321,
-
- 327, 320, 340, 307, 148, 335, 340, 317, 149, 318,
- 329, 344, 330, 308, 319, 344, 547, 150, 151, 309,
- 310, 335, 546, 152, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 148, 310, 151, 317, 152, 153,
- 329, 342, 349, 401, 352, 545, 349, 365, 360, 361,
- 367, 404, 374, 154, 405, 155, 342, 156, 157, 352,
- 158, 159, 538, 365, 544, 539, 367, 374, 160, 353,
- 362, 161, 162, 401, 363, 353, 370, 163, 398, 353,
- 371, 404, 399, 154, 405, 385, 389, 162, 190, 190,
- 190, 190, 190, 190, 190, 190, 190, 190, 390, 353,
-
- 385, 408, 410, 429, 191, 191, 191, 191, 191, 191,
- 355, 413, 392, 393, 356, 443, 408, 450, 394, 357,
- 471, 426, 428, 472, 358, 442, 445, 413, 447, 359,
- 392, 443, 410, 429, 191, 191, 426, 428, 439, 440,
- 442, 445, 459, 447, 467, 441, 468, 450, 474, 476,
- 471, 481, 484, 469, 489, 490, 491, 459, 470, 496,
- 467, 497, 502, 474, 505, 509, 517, 484, 511, 512,
- 523, 527, 533, 537, 496, 551, 497, 502, 543, 476,
- 509, 481, 552, 511, 512, 542, 527, 533, 537, 553,
- 541, 518, 540, 551, 505, 536, 535, 552, 534, 532,
-
- 523, 531, 530, 529, 553, 62, 62, 62, 72, 528,
- 72, 72, 72, 186, 526, 186, 186, 186, 207, 207,
- 191, 191, 525, 524, 522, 521, 516, 515, 514, 513,
- 510, 508, 507, 506, 504, 503, 501, 500, 499, 498,
- 495, 494, 493, 492, 488, 487, 486, 485, 483, 482,
- 480, 479, 478, 477, 475, 473, 466, 465, 464, 463,
- 462, 461, 460, 458, 457, 456, 455, 454, 453, 452,
- 451, 449, 448, 446, 444, 438, 437, 436, 414, 435,
- 434, 433, 432, 431, 430, 427, 425, 424, 423, 422,
- 421, 420, 419, 418, 417, 416, 415, 414, 412, 411,
-
- 409, 407, 406, 403, 402, 400, 397, 396, 395, 391,
- 388, 387, 386, 384, 383, 187, 382, 381, 380, 379,
- 378, 377, 376, 375, 373, 372, 369, 368, 366, 364,
- 354, 351, 350, 348, 347, 346, 345, 343, 341, 339,
- 338, 337, 334, 333, 316, 315, 314, 313, 311, 305,
- 304, 302, 301, 292, 187, 290, 288, 287, 286, 285,
- 283, 281, 280, 279, 278, 277, 276, 275, 274, 273,
- 260, 258, 257, 256, 254, 253, 251, 246, 245, 244,
- 234, 233, 232, 231, 230, 229, 226, 225, 221, 218,
- 217, 216, 215, 214, 213, 210, 208, 200, 197, 196,
-
- 195, 192, 187, 179, 173, 172, 171, 168, 125, 82,
- 71, 64, 63, 558, 5, 558, 558, 558, 558, 558,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
- 558, 558, 558, 558
- } ;
-
-static yyconst short int yy_chk[885] =
- { 0,
- 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, 3,
- 4, 16, 3, 4, 18, 3, 4, 21, 25, 3,
- 4, 21, 24, 24, 3, 4, 32, 55, 31, 16,
- 18, 30, 60, 30, 40, 561, 33, 32, 40, 58,
-
- 47, 58, 30, 556, 25, 30, 61, 21, 60, 30,
- 47, 61, 40, 35, 41, 30, 67, 31, 67, 108,
- 31, 30, 108, 30, 31, 55, 555, 16, 18, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 33,
- 70, 34, 70, 98, 33, 57, 20, 31, 187, 35,
- 20, 34, 35, 187, 41, 41, 34, 39, 39, 39,
- 39, 98, 41, 35, 36, 36, 36, 36, 20, 34,
- 220, 34, 220, 39, 82, 82, 20, 28, 28, 86,
- 86, 39, 95, 36, 57, 36, 39, 36, 57, 45,
- 45, 554, 45, 57, 28, 28, 45, 95, 36, 130,
-
- 36, 91, 91, 39, 28, 99, 28, 114, 117, 28,
- 180, 28, 127, 127, 28, 128, 128, 130, 28, 180,
- 99, 141, 114, 117, 28, 29, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 141, 29, 29, 29,
- 29, 73, 73, 73, 73, 73, 73, 73, 73, 73,
- 73, 74, 74, 74, 74, 74, 74, 74, 74, 74,
- 74, 29, 131, 132, 132, 131, 136, 139, 29, 173,
- 29, 208, 221, 221, 221, 208, 29, 29, 225, 553,
- 154, 204, 225, 173, 136, 139, 29, 38, 38, 38,
- 38, 76, 76, 76, 76, 76, 76, 76, 76, 76,
-
- 76, 145, 90, 149, 38, 38, 90, 38, 151, 153,
- 154, 204, 90, 110, 90, 155, 145, 38, 149, 546,
- 156, 38, 38, 151, 544, 153, 110, 137, 90, 90,
- 110, 137, 157, 155, 38, 38, 156, 38, 42, 42,
- 42, 42, 42, 42, 152, 110, 137, 157, 152, 169,
- 156, 195, 211, 152, 42, 195, 42, 230, 152, 490,
- 543, 230, 490, 152, 169, 42, 195, 195, 211, 219,
- 222, 42, 188, 188, 188, 188, 188, 188, 188, 188,
- 188, 188, 196, 218, 42, 222, 196, 42, 43, 43,
- 43, 43, 43, 43, 43, 43, 224, 196, 196, 219,
-
- 222, 218, 234, 209, 43, 229, 234, 217, 43, 217,
- 223, 244, 224, 209, 217, 244, 542, 43, 43, 209,
- 209, 229, 541, 43, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 43, 209, 43, 217, 43, 44,
- 223, 240, 253, 319, 256, 540, 253, 270, 260, 260,
- 272, 324, 279, 44, 325, 44, 240, 44, 44, 256,
- 44, 44, 517, 270, 531, 517, 272, 279, 44, 257,
- 260, 44, 44, 319, 260, 257, 275, 44, 317, 257,
- 275, 324, 317, 44, 325, 303, 310, 44, 75, 75,
- 75, 75, 75, 75, 75, 75, 75, 75, 310, 257,
-
- 303, 328, 330, 369, 75, 75, 75, 75, 75, 75,
- 259, 335, 313, 313, 259, 386, 328, 393, 313, 259,
- 416, 366, 368, 416, 259, 384, 388, 335, 390, 259,
- 313, 386, 330, 369, 75, 75, 366, 368, 383, 383,
- 384, 388, 405, 390, 414, 383, 415, 393, 418, 426,
- 416, 433, 437, 415, 449, 449, 449, 405, 415, 455,
- 414, 456, 463, 418, 466, 476, 489, 437, 478, 480,
- 493, 500, 510, 516, 455, 547, 456, 463, 529, 426,
- 476, 433, 550, 478, 480, 528, 500, 510, 516, 551,
- 525, 489, 523, 547, 466, 515, 514, 550, 511, 508,
-
- 493, 507, 506, 505, 551, 559, 559, 559, 560, 503,
- 560, 560, 560, 562, 499, 562, 562, 562, 563, 563,
- 564, 564, 498, 495, 492, 491, 488, 484, 482, 481,
- 477, 472, 471, 467, 465, 464, 461, 460, 458, 457,
- 454, 453, 451, 450, 448, 440, 439, 438, 436, 435,
- 432, 431, 429, 427, 425, 417, 413, 412, 411, 410,
- 409, 407, 406, 404, 403, 402, 401, 400, 397, 395,
- 394, 392, 391, 389, 387, 382, 381, 379, 378, 377,
- 376, 375, 374, 373, 372, 367, 365, 364, 361, 360,
- 354, 351, 346, 343, 342, 341, 339, 337, 334, 333,
-
- 329, 327, 326, 321, 320, 318, 316, 315, 314, 312,
- 309, 308, 307, 302, 301, 291, 290, 289, 288, 287,
- 286, 285, 284, 282, 278, 276, 274, 273, 271, 267,
- 258, 255, 254, 252, 251, 250, 247, 241, 239, 233,
- 232, 231, 227, 226, 216, 215, 213, 212, 210, 206,
- 205, 201, 200, 194, 186, 181, 179, 178, 177, 176,
- 171, 168, 165, 164, 163, 162, 161, 160, 159, 158,
- 150, 148, 147, 146, 143, 142, 140, 135, 134, 133,
- 126, 125, 123, 120, 119, 118, 112, 111, 109, 107,
- 106, 105, 104, 102, 100, 97, 94, 87, 85, 84,
-
- 83, 78, 71, 59, 54, 53, 48, 46, 37, 26,
- 19, 15, 12, 5, 558, 558, 558, 558, 558, 558,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
- 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
- 558, 558, 558, 558
- } ;
-
-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 "bfin-lex.l"
-#define INITIAL 0
-/* bfin-lex.l ADI Blackfin lexer
- Copyright 2005
- Free Software Foundation, Inc.
-
- This file is part of GAS, the GNU Assembler.
-
- GAS is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- GAS is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GAS; see the file COPYING. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-#line 22 "bfin-lex.l"
-
-#include <stdlib.h>
-#include <string.h>
-#include "bfin-defs.h"
-#include "bfin-parse.h"
-#include "as.h"
-
-static long parse_int (char **end);
-static int parse_halfreg (Register *r, int cl, char *hr);
-static int parse_reg (Register *r, int type, char *rt);
-int yylex (void);
-
-#define _REG yylval.reg
-
-
-/* Define Start States ... Actually we will use exclusion.
- If no start state is specified it should match any state
- and <INITIAL> would match some keyword rules only with
- initial. */
-#define KEYWORD 1
-
-#line 788 "bfin-lex.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 45 "bfin-lex.l"
-
-#line 952 "bfin-lex.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 >= 559 )
- 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] != 815 );
-
-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 46 "bfin-lex.l"
-_REG.regno = REG_sftreset; return REG;
- YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 47 "bfin-lex.l"
-_REG.regno = REG_omode; return REG;
- YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 48 "bfin-lex.l"
-_REG.regno = REG_idle_req; return REG;
- YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 49 "bfin-lex.l"
-_REG.regno = REG_hwerrcause; return REG;
- YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 50 "bfin-lex.l"
-_REG.regno = REG_excause; return REG;
- YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 51 "bfin-lex.l"
-_REG.regno = REG_emucause; return REG;
- YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 52 "bfin-lex.l"
-return Z;
- YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 53 "bfin-lex.l"
-return X;
- YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 54 "bfin-lex.l"
-yylval.value = M_W32; return MMOD;
- YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 55 "bfin-lex.l"
-return W;
- YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 56 "bfin-lex.l"
-return VIT_MAX;
- YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 57 "bfin-lex.l"
-return V; /* Special: V is a statflag and a modifier. */
- YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 58 "bfin-lex.l"
-_REG.regno = REG_USP; return REG;
- YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 59 "bfin-lex.l"
-return TL;
- YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 60 "bfin-lex.l"
-return TH;
- YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 61 "bfin-lex.l"
-yylval.value = M_TFU; return MMOD;
- YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 62 "bfin-lex.l"
-return TESTSET;
- YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 63 "bfin-lex.l"
-yylval.value = M_T; return MMOD;
- YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 64 "bfin-lex.l"
-return S;
- YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 65 "bfin-lex.l"
-_REG.regno = REG_SYSCFG; return REG;
- YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 66 "bfin-lex.l"
-return STI;
- YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 67 "bfin-lex.l"
-return SSYNC;
- YY_BREAK
-case 23:
-YY_RULE_SETUP
-#line 68 "bfin-lex.l"
-_REG.regno = REG_SP; return HALF_REG;
- YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 69 "bfin-lex.l"
-_REG.regno = REG_SP | F_REG_HIGH; return HALF_REG;
- YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 70 "bfin-lex.l"
-_REG.regno = REG_SP; return REG;
- YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 71 "bfin-lex.l"
-return SIGNBITS;
- YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 72 "bfin-lex.l"
-return SIGN;
- YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 73 "bfin-lex.l"
-_REG.regno = REG_SEQSTAT; return REG;
- YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 74 "bfin-lex.l"
-return SEARCH;
- YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 75 "bfin-lex.l"
-return SHIFT;
- YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 76 "bfin-lex.l"
-return SCO;
- YY_BREAK
-case 32:
-YY_RULE_SETUP
-#line 78 "bfin-lex.l"
-return SAA;
- YY_BREAK
-case 33:
-YY_RULE_SETUP
-#line 79 "bfin-lex.l"
-yylval.value = M_S2RND; return MMOD;
- YY_BREAK
-case 34:
-YY_RULE_SETUP
-#line 80 "bfin-lex.l"
-return RTX;
- YY_BREAK
-case 35:
-YY_RULE_SETUP
-#line 81 "bfin-lex.l"
-return RTS;
- YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 82 "bfin-lex.l"
-return RTN;
- YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 83 "bfin-lex.l"
-return RTI;
- YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 84 "bfin-lex.l"
-return RTE;
- YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 85 "bfin-lex.l"
-return ROT;
- YY_BREAK
-case 40:
-YY_RULE_SETUP
-#line 86 "bfin-lex.l"
-return RND20;
- YY_BREAK
-case 41:
-YY_RULE_SETUP
-#line 87 "bfin-lex.l"
-return RND12;
- YY_BREAK
-case 42:
-YY_RULE_SETUP
-#line 88 "bfin-lex.l"
-return RNDL;
- YY_BREAK
-case 43:
-YY_RULE_SETUP
-#line 89 "bfin-lex.l"
-return RNDH;
- YY_BREAK
-case 44:
-YY_RULE_SETUP
-#line 90 "bfin-lex.l"
-return RND;
- YY_BREAK
-case 45:
-YY_RULE_SETUP
-#line 92 "bfin-lex.l"
-return parse_halfreg(&yylval.reg, T_REG_R, yytext);
- YY_BREAK
-case 46:
-YY_RULE_SETUP
-#line 94 "bfin-lex.l"
-_REG.regno = REG_RETS; return REG;
- YY_BREAK
-case 47:
-YY_RULE_SETUP
-#line 95 "bfin-lex.l"
-_REG.regno = REG_RETI; return REG;
- YY_BREAK
-case 48:
-YY_RULE_SETUP
-#line 96 "bfin-lex.l"
-_REG.regno = REG_RETX; return REG;
- YY_BREAK
-case 49:
-YY_RULE_SETUP
-#line 97 "bfin-lex.l"
-_REG.regno = REG_RETN; return REG;
- YY_BREAK
-case 50:
-YY_RULE_SETUP
-#line 98 "bfin-lex.l"
-_REG.regno = REG_RETE; return REG;
- YY_BREAK
-case 51:
-YY_RULE_SETUP
-#line 99 "bfin-lex.l"
-_REG.regno = REG_EMUDAT; return REG;
- YY_BREAK
-case 52:
-YY_RULE_SETUP
-#line 100 "bfin-lex.l"
-return RAISE;
- YY_BREAK
-case 53:
-YY_RULE_SETUP
-#line 102 "bfin-lex.l"
-return parse_reg (&yylval.reg, T_REG_R, yytext);
- YY_BREAK
-case 54:
-YY_RULE_SETUP
-#line 104 "bfin-lex.l"
-return R;
- YY_BREAK
-case 55:
-YY_RULE_SETUP
-#line 105 "bfin-lex.l"
-return PRNT;
- YY_BREAK
-case 56:
-YY_RULE_SETUP
-#line 106 "bfin-lex.l"
-return PC;
- YY_BREAK
-case 57:
-YY_RULE_SETUP
-#line 107 "bfin-lex.l"
-return PACK;
- YY_BREAK
-case 58:
-YY_RULE_SETUP
-#line 109 "bfin-lex.l"
-return parse_halfreg (&yylval.reg, T_REG_P, yytext);
- YY_BREAK
-case 59:
-YY_RULE_SETUP
-#line 110 "bfin-lex.l"
-return parse_reg (&yylval.reg, T_REG_P, yytext);
- YY_BREAK
-case 60:
-YY_RULE_SETUP
-#line 112 "bfin-lex.l"
-return OUTC;
- YY_BREAK
-case 61:
-YY_RULE_SETUP
-#line 113 "bfin-lex.l"
-return ONES;
- YY_BREAK
-case 62:
-YY_RULE_SETUP
-#line 115 "bfin-lex.l"
-return NOT;
- YY_BREAK
-case 63:
-YY_RULE_SETUP
-#line 116 "bfin-lex.l"
-return NOP;
- YY_BREAK
-case 64:
-YY_RULE_SETUP
-#line 117 "bfin-lex.l"
-return MNOP;
- YY_BREAK
-case 65:
-YY_RULE_SETUP
-#line 118 "bfin-lex.l"
-return NS;
- YY_BREAK
-case 66:
-YY_RULE_SETUP
-#line 121 "bfin-lex.l"
-return MIN;
- YY_BREAK
-case 67:
-YY_RULE_SETUP
-#line 122 "bfin-lex.l"
-return MAX;
- YY_BREAK
-case 68:
-YY_RULE_SETUP
-#line 124 "bfin-lex.l"
-return parse_halfreg (&yylval.reg, T_REG_M, yytext);
- YY_BREAK
-case 69:
-YY_RULE_SETUP
-#line 125 "bfin-lex.l"
-return parse_reg (&yylval.reg, T_REG_M, yytext);
- YY_BREAK
-case 70:
-YY_RULE_SETUP
-#line 127 "bfin-lex.l"
-return M;
- YY_BREAK
-case 71:
-YY_RULE_SETUP
-#line 128 "bfin-lex.l"
-return LT;
- YY_BREAK
-case 72:
-YY_RULE_SETUP
-#line 129 "bfin-lex.l"
-return LSHIFT;
- YY_BREAK
-case 73:
-YY_RULE_SETUP
-#line 130 "bfin-lex.l"
-return LSETUP;
- YY_BREAK
-case 74:
-YY_RULE_SETUP
-#line 131 "bfin-lex.l"
-return LOOP;
- YY_BREAK
-case 75:
-YY_RULE_SETUP
-#line 132 "bfin-lex.l"
-return LOOP_BEGIN;
- YY_BREAK
-case 76:
-YY_RULE_SETUP
-#line 133 "bfin-lex.l"
-return LOOP_END;
- YY_BREAK
-case 77:
-YY_RULE_SETUP
-#line 135 "bfin-lex.l"
-return LE;
- YY_BREAK
-case 78:
-YY_RULE_SETUP
-#line 136 "bfin-lex.l"
-_REG.regno = REG_LC0; return REG;
- YY_BREAK
-case 79:
-YY_RULE_SETUP
-#line 137 "bfin-lex.l"
-_REG.regno = REG_LT0; return REG;
- YY_BREAK
-case 80:
-YY_RULE_SETUP
-#line 138 "bfin-lex.l"
-_REG.regno = REG_LB0; return REG;
- YY_BREAK
-case 81:
-YY_RULE_SETUP
-#line 139 "bfin-lex.l"
-_REG.regno = REG_LC1; return REG;
- YY_BREAK
-case 82:
-YY_RULE_SETUP
-#line 140 "bfin-lex.l"
-_REG.regno = REG_LT1; return REG;
- YY_BREAK
-case 83:
-YY_RULE_SETUP
-#line 141 "bfin-lex.l"
-_REG.regno = REG_LB1; return REG;
- YY_BREAK
-case 84:
-YY_RULE_SETUP
-#line 143 "bfin-lex.l"
-return parse_halfreg (&yylval.reg, T_REG_L, yytext);
- YY_BREAK
-case 85:
-YY_RULE_SETUP
-#line 144 "bfin-lex.l"
-return parse_reg (&yylval.reg, T_REG_L, yytext);
- YY_BREAK
-case 86:
-YY_RULE_SETUP
-#line 145 "bfin-lex.l"
-return LO;
- YY_BREAK
-case 87:
-YY_RULE_SETUP
-#line 146 "bfin-lex.l"
-{ BEGIN 0; return JUMP_DOT_S;}
- YY_BREAK
-case 88:
-YY_RULE_SETUP
-#line 147 "bfin-lex.l"
-{ BEGIN 0; return JUMP_DOT_L;}
- YY_BREAK
-case 89:
-YY_RULE_SETUP
-#line 148 "bfin-lex.l"
-{ BEGIN 0; return JUMP;}
- YY_BREAK
-case 90:
-YY_RULE_SETUP
-#line 149 "bfin-lex.l"
-{ BEGIN 0; return JUMP_DOT_L; }
- YY_BREAK
-case 91:
-YY_RULE_SETUP
-#line 150 "bfin-lex.l"
-yylval.value = M_IU; return MMOD;
- YY_BREAK
-case 92:
-YY_RULE_SETUP
-#line 151 "bfin-lex.l"
-yylval.value = M_ISS2; return MMOD;
- YY_BREAK
-case 93:
-YY_RULE_SETUP
-#line 152 "bfin-lex.l"
-yylval.value = M_IS; return MMOD;
- YY_BREAK
-case 94:
-YY_RULE_SETUP
-#line 153 "bfin-lex.l"
-yylval.value = M_IH; return MMOD;
- YY_BREAK
-case 95:
-YY_RULE_SETUP
-#line 154 "bfin-lex.l"
-return IF;
- YY_BREAK
-case 96:
-YY_RULE_SETUP
-#line 155 "bfin-lex.l"
-return parse_halfreg (&yylval.reg, T_REG_I, yytext);
- YY_BREAK
-case 97:
-YY_RULE_SETUP
-#line 156 "bfin-lex.l"
-return parse_reg (&yylval.reg, T_REG_I, yytext);
- YY_BREAK
-case 98:
-YY_RULE_SETUP
-#line 157 "bfin-lex.l"
-return HLT;
- YY_BREAK
-case 99:
-YY_RULE_SETUP
-#line 158 "bfin-lex.l"
-return HI;
- YY_BREAK
-case 100:
-YY_RULE_SETUP
-#line 159 "bfin-lex.l"
-return GT;
- YY_BREAK
-case 101:
-YY_RULE_SETUP
-#line 160 "bfin-lex.l"
-return GE;
- YY_BREAK
-case 102:
-YY_RULE_SETUP
-#line 161 "bfin-lex.l"
-yylval.value = M_FU; return MMOD;
- YY_BREAK
-case 103:
-YY_RULE_SETUP
-#line 162 "bfin-lex.l"
-_REG.regno = REG_FP; return REG;
- YY_BREAK
-case 104:
-YY_RULE_SETUP
-#line 163 "bfin-lex.l"
-_REG.regno = REG_FP; return HALF_REG;
- YY_BREAK
-case 105:
-YY_RULE_SETUP
-#line 164 "bfin-lex.l"
-_REG.regno = REG_FP | F_REG_HIGH; return HALF_REG;
- YY_BREAK
-case 106:
-YY_RULE_SETUP
-#line 166 "bfin-lex.l"
-return EXTRACT;
- YY_BREAK
-case 107:
-YY_RULE_SETUP
-#line 167 "bfin-lex.l"
-return EXPADJ;
- YY_BREAK
-case 108:
-YY_RULE_SETUP
-#line 168 "bfin-lex.l"
-return EXCPT;
- YY_BREAK
-case 109:
-YY_RULE_SETUP
-#line 169 "bfin-lex.l"
-return EMUEXCPT;
- YY_BREAK
-case 110:
-YY_RULE_SETUP
-#line 170 "bfin-lex.l"
-return DIVS;
- YY_BREAK
-case 111:
-YY_RULE_SETUP
-#line 171 "bfin-lex.l"
-return DIVQ;
- YY_BREAK
-case 112:
-YY_RULE_SETUP
-#line 172 "bfin-lex.l"
-return DISALGNEXCPT;
- YY_BREAK
-case 113:
-YY_RULE_SETUP
-#line 173 "bfin-lex.l"
-return DEPOSIT;
- YY_BREAK
-case 114:
-YY_RULE_SETUP
-#line 174 "bfin-lex.l"
-return DBGHALT;
- YY_BREAK
-case 115:
-YY_RULE_SETUP
-#line 175 "bfin-lex.l"
-return DBGCMPLX;
- YY_BREAK
-case 116:
-YY_RULE_SETUP
-#line 176 "bfin-lex.l"
-return DBGAL;
- YY_BREAK
-case 117:
-YY_RULE_SETUP
-#line 177 "bfin-lex.l"
-return DBGAH;
- YY_BREAK
-case 118:
-YY_RULE_SETUP
-#line 178 "bfin-lex.l"
-return DBGA;
- YY_BREAK
-case 119:
-YY_RULE_SETUP
-#line 179 "bfin-lex.l"
-return DBG;
- YY_BREAK
-case 120:
-YY_RULE_SETUP
-#line 180 "bfin-lex.l"
-{ _REG.regno = REG_CYCLES2; return REG; }
- YY_BREAK
-case 121:
-YY_RULE_SETUP
-#line 181 "bfin-lex.l"
-{ _REG.regno = REG_CYCLES; return REG; }
- YY_BREAK
-case 122:
-YY_RULE_SETUP
-#line 182 "bfin-lex.l"
-return CSYNC;
- YY_BREAK
-case 123:
-YY_RULE_SETUP
-#line 183 "bfin-lex.l"
-return CO;
- YY_BREAK
-case 124:
-YY_RULE_SETUP
-#line 184 "bfin-lex.l"
-return CLI;
- YY_BREAK
-case 125:
-YY_RULE_SETUP
-#line 186 "bfin-lex.l"
-_REG.regno = REG_CC; return CCREG;
- YY_BREAK
-case 126:
-YY_RULE_SETUP
-#line 187 "bfin-lex.l"
-{ BEGIN 0; return CALL;}
- YY_BREAK
-case 127:
-YY_RULE_SETUP
-#line 188 "bfin-lex.l"
-{ BEGIN 0; return CALL;}
- YY_BREAK
-case 128:
-YY_RULE_SETUP
-#line 189 "bfin-lex.l"
-return BYTEUNPACK;
- YY_BREAK
-case 129:
-YY_RULE_SETUP
-#line 190 "bfin-lex.l"
-return BYTEPACK;
- YY_BREAK
-case 130:
-YY_RULE_SETUP
-#line 191 "bfin-lex.l"
-return BYTEOP16M;
- YY_BREAK
-case 131:
-YY_RULE_SETUP
-#line 192 "bfin-lex.l"
-return BYTEOP16P;
- YY_BREAK
-case 132:
-YY_RULE_SETUP
-#line 193 "bfin-lex.l"
-return BYTEOP3P;
- YY_BREAK
-case 133:
-YY_RULE_SETUP
-#line 194 "bfin-lex.l"
-return BYTEOP2M;
- YY_BREAK
-case 134:
-YY_RULE_SETUP
-#line 195 "bfin-lex.l"
-return BYTEOP2P;
- YY_BREAK
-case 135:
-YY_RULE_SETUP
-#line 196 "bfin-lex.l"
-return BYTEOP1P;
- YY_BREAK
-case 136:
-YY_RULE_SETUP
-#line 197 "bfin-lex.l"
-return BY;
- YY_BREAK
-case 137:
-YY_RULE_SETUP
-#line 198 "bfin-lex.l"
-return BXORSHIFT;
- YY_BREAK
-case 138:
-YY_RULE_SETUP
-#line 199 "bfin-lex.l"
-return BXOR;
- YY_BREAK
-case 139:
-YY_RULE_SETUP
-#line 201 "bfin-lex.l"
-return BREV;
- YY_BREAK
-case 140:
-YY_RULE_SETUP
-#line 202 "bfin-lex.l"
-return BP;
- YY_BREAK
-case 141:
-YY_RULE_SETUP
-#line 203 "bfin-lex.l"
-return BITTST;
- YY_BREAK
-case 142:
-YY_RULE_SETUP
-#line 204 "bfin-lex.l"
-return BITTGL;
- YY_BREAK
-case 143:
-YY_RULE_SETUP
-#line 205 "bfin-lex.l"
-return BITSET;
- YY_BREAK
-case 144:
-YY_RULE_SETUP
-#line 206 "bfin-lex.l"
-return BITMUX;
- YY_BREAK
-case 145:
-YY_RULE_SETUP
-#line 207 "bfin-lex.l"
-return BITCLR;
- YY_BREAK
-case 146:
-YY_RULE_SETUP
-#line 208 "bfin-lex.l"
-return parse_halfreg (&yylval.reg, T_REG_B, yytext);
- YY_BREAK
-case 147:
-YY_RULE_SETUP
-#line 209 "bfin-lex.l"
-return parse_reg (&yylval.reg, T_REG_B, yytext);
- YY_BREAK
-case 148:
-YY_RULE_SETUP
-#line 210 "bfin-lex.l"
-return B;
- YY_BREAK
-case 149:
-YY_RULE_SETUP
-#line 211 "bfin-lex.l"
-_REG.regno = S_AZ; return STATUS_REG;
- YY_BREAK
-case 150:
-YY_RULE_SETUP
-#line 212 "bfin-lex.l"
-_REG.regno = S_AN; return STATUS_REG;
- YY_BREAK
-case 151:
-YY_RULE_SETUP
-#line 213 "bfin-lex.l"
-_REG.regno = S_AQ; return STATUS_REG;
- YY_BREAK
-case 152:
-YY_RULE_SETUP
-#line 214 "bfin-lex.l"
-_REG.regno = S_AC0; return STATUS_REG;
- YY_BREAK
-case 153:
-YY_RULE_SETUP
-#line 215 "bfin-lex.l"
-_REG.regno = S_AC1; return STATUS_REG;
- YY_BREAK
-case 154:
-YY_RULE_SETUP
-#line 216 "bfin-lex.l"
-_REG.regno = S_AV0; return STATUS_REG;
- YY_BREAK
-case 155:
-YY_RULE_SETUP
-#line 217 "bfin-lex.l"
-_REG.regno = S_AV0S; return STATUS_REG;
- YY_BREAK
-case 156:
-YY_RULE_SETUP
-#line 218 "bfin-lex.l"
-_REG.regno = S_AV1; return STATUS_REG;
- YY_BREAK
-case 157:
-YY_RULE_SETUP
-#line 219 "bfin-lex.l"
-_REG.regno = S_AV1S; return STATUS_REG;
- YY_BREAK
-case 158:
-YY_RULE_SETUP
-#line 220 "bfin-lex.l"
-_REG.regno = S_V; return STATUS_REG;
- YY_BREAK
-case 159:
-YY_RULE_SETUP
-#line 221 "bfin-lex.l"
-_REG.regno = S_VS; return STATUS_REG;
- YY_BREAK
-case 160:
-YY_RULE_SETUP
-#line 224 "bfin-lex.l"
-_REG.regno = REG_ASTAT; return REG;
- YY_BREAK
-case 161:
-YY_RULE_SETUP
-#line 225 "bfin-lex.l"
-return ASHIFT;
- YY_BREAK
-case 162:
-YY_RULE_SETUP
-#line 226 "bfin-lex.l"
-return ASL;
- YY_BREAK
-case 163:
-YY_RULE_SETUP
-#line 227 "bfin-lex.l"
-return ASR;
- YY_BREAK
-case 164:
-YY_RULE_SETUP
-#line 228 "bfin-lex.l"
-return ALIGN8;
- YY_BREAK
-case 165:
-YY_RULE_SETUP
-#line 229 "bfin-lex.l"
-return ALIGN16;
- YY_BREAK
-case 166:
-YY_RULE_SETUP
-#line 230 "bfin-lex.l"
-return ALIGN24;
- YY_BREAK
-case 167:
-YY_RULE_SETUP
-#line 231 "bfin-lex.l"
-return A_ONE_DOT_L;
- YY_BREAK
-case 168:
-YY_RULE_SETUP
-#line 232 "bfin-lex.l"
-return A_ZERO_DOT_L;
- YY_BREAK
-case 169:
-YY_RULE_SETUP
-#line 233 "bfin-lex.l"
-return A_ONE_DOT_H;
- YY_BREAK
-case 170:
-YY_RULE_SETUP
-#line 234 "bfin-lex.l"
-return A_ZERO_DOT_H;
- YY_BREAK
-case 171:
-YY_RULE_SETUP
-#line 235 "bfin-lex.l"
-return ABS;
- YY_BREAK
-case 172:
-YY_RULE_SETUP
-#line 236 "bfin-lex.l"
-return ABORT;
- YY_BREAK
-case 173:
-YY_RULE_SETUP
-#line 237 "bfin-lex.l"
-_REG.regno = REG_A1x; return REG;
- YY_BREAK
-case 174:
-YY_RULE_SETUP
-#line 238 "bfin-lex.l"
-_REG.regno = REG_A1w; return REG;
- YY_BREAK
-case 175:
-YY_RULE_SETUP
-#line 239 "bfin-lex.l"
-_REG.regno = REG_A1; return REG_A_DOUBLE_ONE;
- YY_BREAK
-case 176:
-YY_RULE_SETUP
-#line 240 "bfin-lex.l"
-_REG.regno = REG_A0x; return REG;
- YY_BREAK
-case 177:
-YY_RULE_SETUP
-#line 241 "bfin-lex.l"
-_REG.regno = REG_A0w; return REG;
- YY_BREAK
-case 178:
-YY_RULE_SETUP
-#line 242 "bfin-lex.l"
-_REG.regno = REG_A0; return REG_A_DOUBLE_ZERO;
- YY_BREAK
-case 179:
-YY_RULE_SETUP
-#line 243 "bfin-lex.l"
-return GOT;
- YY_BREAK
-case 180:
-YY_RULE_SETUP
-#line 244 "bfin-lex.l"
-return GOT17M4;
- YY_BREAK
-case 181:
-YY_RULE_SETUP
-#line 245 "bfin-lex.l"
-return FUNCDESC_GOT17M4;
- YY_BREAK
-case 182:
-YY_RULE_SETUP
-#line 246 "bfin-lex.l"
-return PLTPC;
- YY_BREAK
-case 183:
-YY_RULE_SETUP
-#line 249 "bfin-lex.l"
-return TILDA;
- YY_BREAK
-case 184:
-YY_RULE_SETUP
-#line 250 "bfin-lex.l"
-return _BAR_ASSIGN;
- YY_BREAK
-case 185:
-YY_RULE_SETUP
-#line 251 "bfin-lex.l"
-return BAR;
- YY_BREAK
-case 186:
-YY_RULE_SETUP
-#line 252 "bfin-lex.l"
-return _CARET_ASSIGN;
- YY_BREAK
-case 187:
-YY_RULE_SETUP
-#line 253 "bfin-lex.l"
-return CARET;
- YY_BREAK
-case 188:
-YY_RULE_SETUP
-#line 254 "bfin-lex.l"
-return RBRACK;
- YY_BREAK
-case 189:
-YY_RULE_SETUP
-#line 255 "bfin-lex.l"
-return LBRACK;
- YY_BREAK
-case 190:
-YY_RULE_SETUP
-#line 256 "bfin-lex.l"
-return _GREATER_GREATER_GREATER_THAN_ASSIGN;
- YY_BREAK
-case 191:
-YY_RULE_SETUP
-#line 257 "bfin-lex.l"
-return _GREATER_GREATER_ASSIGN;
- YY_BREAK
-case 192:
-YY_RULE_SETUP
-#line 258 "bfin-lex.l"
-return _GREATER_GREATER_GREATER;
- YY_BREAK
-case 193:
-YY_RULE_SETUP
-#line 259 "bfin-lex.l"
-return GREATER_GREATER;
- YY_BREAK
-case 194:
-YY_RULE_SETUP
-#line 260 "bfin-lex.l"
-return _ASSIGN_ASSIGN;
- YY_BREAK
-case 195:
-YY_RULE_SETUP
-#line 261 "bfin-lex.l"
-return ASSIGN;
- YY_BREAK
-case 196:
-YY_RULE_SETUP
-#line 262 "bfin-lex.l"
-return _LESS_THAN_ASSIGN;
- YY_BREAK
-case 197:
-YY_RULE_SETUP
-#line 263 "bfin-lex.l"
-return _LESS_LESS_ASSIGN;
- YY_BREAK
-case 198:
-YY_RULE_SETUP
-#line 264 "bfin-lex.l"
-return LESS_LESS;
- YY_BREAK
-case 199:
-YY_RULE_SETUP
-#line 265 "bfin-lex.l"
-return LESS_THAN;
- YY_BREAK
-case 200:
-YY_RULE_SETUP
-#line 266 "bfin-lex.l"
-return LPAREN;
- YY_BREAK
-case 201:
-YY_RULE_SETUP
-#line 267 "bfin-lex.l"
-return RPAREN;
- YY_BREAK
-case 202:
-YY_RULE_SETUP
-#line 268 "bfin-lex.l"
-return COLON;
- YY_BREAK
-case 203:
-YY_RULE_SETUP
-#line 269 "bfin-lex.l"
-return SLASH;
- YY_BREAK
-case 204:
-YY_RULE_SETUP
-#line 270 "bfin-lex.l"
-return _MINUS_ASSIGN;
- YY_BREAK
-case 205:
-YY_RULE_SETUP
-#line 271 "bfin-lex.l"
-return _PLUS_BAR_PLUS;
- YY_BREAK
-case 206:
-YY_RULE_SETUP
-#line 272 "bfin-lex.l"
-return _MINUS_BAR_PLUS;
- YY_BREAK
-case 207:
-YY_RULE_SETUP
-#line 273 "bfin-lex.l"
-return _PLUS_BAR_MINUS;
- YY_BREAK
-case 208:
-YY_RULE_SETUP
-#line 274 "bfin-lex.l"
-return _MINUS_BAR_MINUS;
- YY_BREAK
-case 209:
-YY_RULE_SETUP
-#line 275 "bfin-lex.l"
-return _MINUS_MINUS;
- YY_BREAK
-case 210:
-YY_RULE_SETUP
-#line 276 "bfin-lex.l"
-return MINUS;
- YY_BREAK
-case 211:
-YY_RULE_SETUP
-#line 277 "bfin-lex.l"
-return COMMA;
- YY_BREAK
-case 212:
-YY_RULE_SETUP
-#line 278 "bfin-lex.l"
-return _PLUS_ASSIGN;
- YY_BREAK
-case 213:
-YY_RULE_SETUP
-#line 279 "bfin-lex.l"
-return _PLUS_PLUS;
- YY_BREAK
-case 214:
-YY_RULE_SETUP
-#line 280 "bfin-lex.l"
-return PLUS;
- YY_BREAK
-case 215:
-YY_RULE_SETUP
-#line 281 "bfin-lex.l"
-return _STAR_ASSIGN;
- YY_BREAK
-case 216:
-YY_RULE_SETUP
-#line 282 "bfin-lex.l"
-return STAR;
- YY_BREAK
-case 217:
-YY_RULE_SETUP
-#line 283 "bfin-lex.l"
-return _AMPERSAND_ASSIGN;
- YY_BREAK
-case 218:
-YY_RULE_SETUP
-#line 284 "bfin-lex.l"
-return AMPERSAND;
- YY_BREAK
-case 219:
-YY_RULE_SETUP
-#line 285 "bfin-lex.l"
-return PERCENT;
- YY_BREAK
-case 220:
-YY_RULE_SETUP
-#line 286 "bfin-lex.l"
-return BANG;
- YY_BREAK
-case 221:
-YY_RULE_SETUP
-#line 287 "bfin-lex.l"
-return SEMICOLON;
- YY_BREAK
-case 222:
-YY_RULE_SETUP
-#line 288 "bfin-lex.l"
-return _ASSIGN_BANG;
- YY_BREAK
-case 223:
-YY_RULE_SETUP
-#line 289 "bfin-lex.l"
-return DOUBLE_BAR;
- YY_BREAK
-case 224:
-YY_RULE_SETUP
-#line 290 "bfin-lex.l"
-return AT;
- YY_BREAK
-case 225:
-YY_RULE_SETUP
-#line 291 "bfin-lex.l"
-return PREFETCH;
- YY_BREAK
-case 226:
-YY_RULE_SETUP
-#line 292 "bfin-lex.l"
-return UNLINK;
- YY_BREAK
-case 227:
-YY_RULE_SETUP
-#line 293 "bfin-lex.l"
-return LINK;
- YY_BREAK
-case 228:
-YY_RULE_SETUP
-#line 294 "bfin-lex.l"
-return IDLE;
- YY_BREAK
-case 229:
-YY_RULE_SETUP
-#line 295 "bfin-lex.l"
-return IFLUSH;
- YY_BREAK
-case 230:
-YY_RULE_SETUP
-#line 296 "bfin-lex.l"
-return FLUSHINV;
- YY_BREAK
-case 231:
-YY_RULE_SETUP
-#line 297 "bfin-lex.l"
-return FLUSH;
- YY_BREAK
-case 232:
-YY_RULE_SETUP
-#line 298 "bfin-lex.l"
-{
- yylval.value = parse_int (&yytext);
- return NUMBER;
- }
- YY_BREAK
-case 233:
-YY_RULE_SETUP
-#line 302 "bfin-lex.l"
-{
- yylval.symbol = symbol_find_or_make (yytext);
- symbol_mark_used (yylval.symbol);
- return SYMBOL;
- }
- YY_BREAK
-case 234:
-YY_RULE_SETUP
-#line 307 "bfin-lex.l"
-{
- char *name;
- char *ref = strdup (yytext);
- if (ref[1] == 'b' || ref[1] == 'B')
- {
- name = fb_label_name ((int) (ref[0] - '0'), 0);
- yylval.symbol = symbol_find (name);
-
- if ((yylval.symbol != NULL)
- && (S_IS_DEFINED (yylval.symbol)))
- return SYMBOL;
- as_bad ("backward reference to unknown label %d:",
- (int) (ref[0] - '0'));
- }
- else if (ref[1] == 'f' || ref[1] == 'F')
- {
- /* Forward reference. Expect symbol to be undefined or
- unknown. undefined: seen it before. unknown: never seen
- it before.
-
- Construct a local label name, then an undefined symbol.
- Just return it as never seen before. */
-
- name = fb_label_name ((int) (ref[0] - '0'), 1);
- yylval.symbol = symbol_find_or_make (name);
- /* We have no need to check symbol properties. */
- return SYMBOL;
- }
- }
- YY_BREAK
-case 235:
-YY_RULE_SETUP
-#line 336 "bfin-lex.l"
-;
- YY_BREAK
-case 236:
-YY_RULE_SETUP
-#line 337 "bfin-lex.l"
-;
- YY_BREAK
-case 237:
-YY_RULE_SETUP
-#line 338 "bfin-lex.l"
-return yytext[0];
- YY_BREAK
-case 238:
-YY_RULE_SETUP
-#line 339 "bfin-lex.l"
-ECHO;
- YY_BREAK
-#line 2260 "bfin-lex.c"
-case YY_STATE_EOF(INITIAL):
-case YY_STATE_EOF(KEYWORD):
- yyterminate();
-
- 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 >= 559 )
- 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 >= 559 )
- 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 == 558);
-
- 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 339 "bfin-lex.l"
-
-static long parse_int (char **end)
-{
- char fmt = '\0';
- int not_done = 1;
- int shiftvalue = 0;
- char * char_bag;
- long value = 0;
- char c;
- char *arg = *end;
-
- while (*arg && *arg == ' ')
- arg++;
-
- switch (*arg)
- {
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- fmt = 'd';
- break;
-
- case '0': /* Accept different formated integers hex octal and binary. */
- {
- c = *++arg;
- arg++;
- if (c == 'x' || c == 'X') /* Hex input. */
- fmt = 'h';
- else if (c == 'b' || c == 'B')
- fmt = 'b';
- else if (c == '.')
- fmt = 'f';
- else
- { /* Octal. */
- arg--;
- fmt = 'o';
- }
- break;
- }
-
- case 'd':
- case 'D':
- case 'h':
- case 'H':
- case 'o':
- case 'O':
- case 'b':
- case 'B':
- case 'f':
- case 'F':
- {
- fmt = *arg++;
- if (*arg == '#')
- arg++;
- }
- }
-
- switch (fmt)
- {
- case 'h':
- case 'H':
- shiftvalue = 4;
- char_bag = "0123456789ABCDEFabcdef";
- break;
-
- case 'o':
- case 'O':
- shiftvalue = 3;
- char_bag = "01234567";
- break;
-
- case 'b':
- case 'B':
- shiftvalue = 1;
- char_bag = "01";
- break;
-
-/* The assembler allows for fractional constants to be created
- by either the 0.xxxx or the f#xxxx format
-
- i.e. 0.5 would result in 0x4000
-
- note .5 would result in the identifier .5.
-
- The assembler converts to fractional format 1.15 by the simple rule:
-
- value = (short) (finput * (1 << 15)). */
-
- case 'f':
- case 'F':
- {
- float fval = 0.0;
- float pos = 10.0;
- while (1)
- {
- int c;
- c = *arg++;
-
- if (c >= '0' && c <= '9')
- {
- float digit = (c - '0') / pos;
- fval = fval + digit;
- pos = pos * 10.0;
- }
- else
- {
- *--arg = c;
- value = (short) (fval * (1 << 15));
- break;
- }
- }
- *end = arg+1;
- return value;
- }
-
- case 'd':
- case 'D':
- default:
- {
- while (1)
- {
- int c;
- c = *arg++;
- if (c >= '0' && c <= '9')
- value = (value * 10) + (c - '0');
- else
- {
- /* Constants that are suffixed with k|K are multiplied by 1024
- This suffix is only allowed on decimal constants. */
- if (c == 'k' || c == 'K')
- value *= 1024;
- else
- *--arg = c;
- break;
- }
- }
- *end = arg+1;
- return value;
- }
- }
-
- while (not_done)
- {
- char c;
- c = *arg++;
- if (c == 0 || !index (char_bag, c))
- {
- not_done = 0;
- *--arg = c;
- }
- else
- {
- if (c >= 'a' && c <= 'z')
- c = c - ('a' - '9') + 1;
- else if (c >= 'A' && c <= 'Z')
- c = c - ('A' - '9') + 1;
-
- c -= '0';
- value = (value << shiftvalue) + c;
- }
- }
- *end = arg+1;
- return value;
-}
-
-
-static int parse_reg (Register *r, int cl, char *rt)
-{
- r->regno = cl | (rt[1] - '0');
- return REG;
-}
-
-static int parse_halfreg (Register *r, int cl, char *rt)
-{
- r->regno = cl | (rt[1] - '0');
-
- switch (rt[3])
- {
- case 'b':
- case 'B':
- return BYTE_DREG;
-
- case 'l':
- case 'L':
- break;
-
- case 'h':
- case 'H':
- r->regno |= F_REG_HIGH;
- break;
- }
-
- return HALF_REG;
-}
-
-/* Our start state is KEYWORD as we have
- command keywords such as PREFETCH. */
-
-void
-set_start_state (void)
-{
- BEGIN KEYWORD;
-}
-
-
-#ifndef yywrap
-int
-yywrap ()
-{
- return 1;
-}
-#endif
diff --git a/gas/bfin-parse.c b/gas/bfin-parse.c
deleted file mode 100644
index bc6728b659ba..000000000000
--- a/gas/bfin-parse.c
+++ /dev/null
@@ -1,7491 +0,0 @@
-/* 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 {
- BYTEOP16P = 258,
- BYTEOP16M = 259,
- BYTEOP1P = 260,
- BYTEOP2P = 261,
- BYTEOP2M = 262,
- BYTEOP3P = 263,
- BYTEUNPACK = 264,
- BYTEPACK = 265,
- PACK = 266,
- SAA = 267,
- ALIGN8 = 268,
- ALIGN16 = 269,
- ALIGN24 = 270,
- VIT_MAX = 271,
- EXTRACT = 272,
- DEPOSIT = 273,
- EXPADJ = 274,
- SEARCH = 275,
- ONES = 276,
- SIGN = 277,
- SIGNBITS = 278,
- LINK = 279,
- UNLINK = 280,
- REG = 281,
- PC = 282,
- CCREG = 283,
- BYTE_DREG = 284,
- REG_A_DOUBLE_ZERO = 285,
- REG_A_DOUBLE_ONE = 286,
- A_ZERO_DOT_L = 287,
- A_ZERO_DOT_H = 288,
- A_ONE_DOT_L = 289,
- A_ONE_DOT_H = 290,
- HALF_REG = 291,
- NOP = 292,
- RTI = 293,
- RTS = 294,
- RTX = 295,
- RTN = 296,
- RTE = 297,
- HLT = 298,
- IDLE = 299,
- STI = 300,
- CLI = 301,
- CSYNC = 302,
- SSYNC = 303,
- EMUEXCPT = 304,
- RAISE = 305,
- EXCPT = 306,
- LSETUP = 307,
- LOOP = 308,
- LOOP_BEGIN = 309,
- LOOP_END = 310,
- DISALGNEXCPT = 311,
- JUMP = 312,
- JUMP_DOT_S = 313,
- JUMP_DOT_L = 314,
- CALL = 315,
- ABORT = 316,
- NOT = 317,
- TILDA = 318,
- BANG = 319,
- AMPERSAND = 320,
- BAR = 321,
- PERCENT = 322,
- CARET = 323,
- BXOR = 324,
- MINUS = 325,
- PLUS = 326,
- STAR = 327,
- SLASH = 328,
- NEG = 329,
- MIN = 330,
- MAX = 331,
- ABS = 332,
- DOUBLE_BAR = 333,
- _PLUS_BAR_PLUS = 334,
- _PLUS_BAR_MINUS = 335,
- _MINUS_BAR_PLUS = 336,
- _MINUS_BAR_MINUS = 337,
- _MINUS_MINUS = 338,
- _PLUS_PLUS = 339,
- SHIFT = 340,
- LSHIFT = 341,
- ASHIFT = 342,
- BXORSHIFT = 343,
- _GREATER_GREATER_GREATER_THAN_ASSIGN = 344,
- ROT = 345,
- LESS_LESS = 346,
- GREATER_GREATER = 347,
- _GREATER_GREATER_GREATER = 348,
- _LESS_LESS_ASSIGN = 349,
- _GREATER_GREATER_ASSIGN = 350,
- DIVS = 351,
- DIVQ = 352,
- ASSIGN = 353,
- _STAR_ASSIGN = 354,
- _BAR_ASSIGN = 355,
- _CARET_ASSIGN = 356,
- _AMPERSAND_ASSIGN = 357,
- _MINUS_ASSIGN = 358,
- _PLUS_ASSIGN = 359,
- _ASSIGN_BANG = 360,
- _LESS_THAN_ASSIGN = 361,
- _ASSIGN_ASSIGN = 362,
- GE = 363,
- LT = 364,
- LE = 365,
- GT = 366,
- LESS_THAN = 367,
- FLUSHINV = 368,
- FLUSH = 369,
- IFLUSH = 370,
- PREFETCH = 371,
- PRNT = 372,
- OUTC = 373,
- WHATREG = 374,
- TESTSET = 375,
- ASL = 376,
- ASR = 377,
- B = 378,
- W = 379,
- NS = 380,
- S = 381,
- CO = 382,
- SCO = 383,
- TH = 384,
- TL = 385,
- BP = 386,
- BREV = 387,
- X = 388,
- Z = 389,
- M = 390,
- MMOD = 391,
- R = 392,
- RND = 393,
- RNDL = 394,
- RNDH = 395,
- RND12 = 396,
- RND20 = 397,
- V = 398,
- LO = 399,
- HI = 400,
- BITTGL = 401,
- BITCLR = 402,
- BITSET = 403,
- BITTST = 404,
- BITMUX = 405,
- DBGAL = 406,
- DBGAH = 407,
- DBGHALT = 408,
- DBG = 409,
- DBGA = 410,
- DBGCMPLX = 411,
- IF = 412,
- COMMA = 413,
- BY = 414,
- COLON = 415,
- SEMICOLON = 416,
- RPAREN = 417,
- LPAREN = 418,
- LBRACK = 419,
- RBRACK = 420,
- STATUS_REG = 421,
- MNOP = 422,
- SYMBOL = 423,
- NUMBER = 424,
- GOT = 425,
- GOT17M4 = 426,
- FUNCDESC_GOT17M4 = 427,
- AT = 428,
- PLTPC = 429
- };
-#endif
-/* Tokens. */
-#define BYTEOP16P 258
-#define BYTEOP16M 259
-#define BYTEOP1P 260
-#define BYTEOP2P 261
-#define BYTEOP2M 262
-#define BYTEOP3P 263
-#define BYTEUNPACK 264
-#define BYTEPACK 265
-#define PACK 266
-#define SAA 267
-#define ALIGN8 268
-#define ALIGN16 269
-#define ALIGN24 270
-#define VIT_MAX 271
-#define EXTRACT 272
-#define DEPOSIT 273
-#define EXPADJ 274
-#define SEARCH 275
-#define ONES 276
-#define SIGN 277
-#define SIGNBITS 278
-#define LINK 279
-#define UNLINK 280
-#define REG 281
-#define PC 282
-#define CCREG 283
-#define BYTE_DREG 284
-#define REG_A_DOUBLE_ZERO 285
-#define REG_A_DOUBLE_ONE 286
-#define A_ZERO_DOT_L 287
-#define A_ZERO_DOT_H 288
-#define A_ONE_DOT_L 289
-#define A_ONE_DOT_H 290
-#define HALF_REG 291
-#define NOP 292
-#define RTI 293
-#define RTS 294
-#define RTX 295
-#define RTN 296
-#define RTE 297
-#define HLT 298
-#define IDLE 299
-#define STI 300
-#define CLI 301
-#define CSYNC 302
-#define SSYNC 303
-#define EMUEXCPT 304
-#define RAISE 305
-#define EXCPT 306
-#define LSETUP 307
-#define LOOP 308
-#define LOOP_BEGIN 309
-#define LOOP_END 310
-#define DISALGNEXCPT 311
-#define JUMP 312
-#define JUMP_DOT_S 313
-#define JUMP_DOT_L 314
-#define CALL 315
-#define ABORT 316
-#define NOT 317
-#define TILDA 318
-#define BANG 319
-#define AMPERSAND 320
-#define BAR 321
-#define PERCENT 322
-#define CARET 323
-#define BXOR 324
-#define MINUS 325
-#define PLUS 326
-#define STAR 327
-#define SLASH 328
-#define NEG 329
-#define MIN 330
-#define MAX 331
-#define ABS 332
-#define DOUBLE_BAR 333
-#define _PLUS_BAR_PLUS 334
-#define _PLUS_BAR_MINUS 335
-#define _MINUS_BAR_PLUS 336
-#define _MINUS_BAR_MINUS 337
-#define _MINUS_MINUS 338
-#define _PLUS_PLUS 339
-#define SHIFT 340
-#define LSHIFT 341
-#define ASHIFT 342
-#define BXORSHIFT 343
-#define _GREATER_GREATER_GREATER_THAN_ASSIGN 344
-#define ROT 345
-#define LESS_LESS 346
-#define GREATER_GREATER 347
-#define _GREATER_GREATER_GREATER 348
-#define _LESS_LESS_ASSIGN 349
-#define _GREATER_GREATER_ASSIGN 350
-#define DIVS 351
-#define DIVQ 352
-#define ASSIGN 353
-#define _STAR_ASSIGN 354
-#define _BAR_ASSIGN 355
-#define _CARET_ASSIGN 356
-#define _AMPERSAND_ASSIGN 357
-#define _MINUS_ASSIGN 358
-#define _PLUS_ASSIGN 359
-#define _ASSIGN_BANG 360
-#define _LESS_THAN_ASSIGN 361
-#define _ASSIGN_ASSIGN 362
-#define GE 363
-#define LT 364
-#define LE 365
-#define GT 366
-#define LESS_THAN 367
-#define FLUSHINV 368
-#define FLUSH 369
-#define IFLUSH 370
-#define PREFETCH 371
-#define PRNT 372
-#define OUTC 373
-#define WHATREG 374
-#define TESTSET 375
-#define ASL 376
-#define ASR 377
-#define B 378
-#define W 379
-#define NS 380
-#define S 381
-#define CO 382
-#define SCO 383
-#define TH 384
-#define TL 385
-#define BP 386
-#define BREV 387
-#define X 388
-#define Z 389
-#define M 390
-#define MMOD 391
-#define R 392
-#define RND 393
-#define RNDL 394
-#define RNDH 395
-#define RND12 396
-#define RND20 397
-#define V 398
-#define LO 399
-#define HI 400
-#define BITTGL 401
-#define BITCLR 402
-#define BITSET 403
-#define BITTST 404
-#define BITMUX 405
-#define DBGAL 406
-#define DBGAH 407
-#define DBGHALT 408
-#define DBG 409
-#define DBGA 410
-#define DBGCMPLX 411
-#define IF 412
-#define COMMA 413
-#define BY 414
-#define COLON 415
-#define SEMICOLON 416
-#define RPAREN 417
-#define LPAREN 418
-#define LBRACK 419
-#define RBRACK 420
-#define STATUS_REG 421
-#define MNOP 422
-#define SYMBOL 423
-#define NUMBER 424
-#define GOT 425
-#define GOT17M4 426
-#define FUNCDESC_GOT17M4 427
-#define AT 428
-#define PLTPC 429
-
-
-
-
-/* Copy the first part of user declarations. */
-#line 21 "bfin-parse.y"
-
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <obstack.h>
-
-#include "bfin-aux.h" // opcode generating auxiliaries
-#include "libbfd.h"
-#include "elf/common.h"
-#include "elf/bfin.h"
-
-#define DSP32ALU(aopcde, HL, dst1, dst0, src0, src1, s, x, aop) \
- bfin_gen_dsp32alu (HL, aopcde, aop, s, x, dst0, dst1, src0, src1)
-
-#define DSP32MAC(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \
- bfin_gen_dsp32mac (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \
- dst, src0, src1, w0)
-
-#define DSP32MULT(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \
- bfin_gen_dsp32mult (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \
- dst, src0, src1, w0)
-
-#define DSP32SHIFT(sopcde, dst0, src0, src1, sop, hls) \
- bfin_gen_dsp32shift (sopcde, dst0, src0, src1, sop, hls)
-
-#define DSP32SHIFTIMM(sopcde, dst0, immag, src1, sop, hls) \
- bfin_gen_dsp32shiftimm (sopcde, dst0, immag, src1, sop, hls)
-
-#define LDIMMHALF_R(reg, h, s, z, hword) \
- bfin_gen_ldimmhalf (reg, h, s, z, hword, 1)
-
-#define LDIMMHALF_R5(reg, h, s, z, hword) \
- bfin_gen_ldimmhalf (reg, h, s, z, hword, 2)
-
-#define LDSTIDXI(ptr, reg, w, sz, z, offset) \
- bfin_gen_ldstidxi (ptr, reg, w, sz, z, offset)
-
-#define LDST(ptr, reg, aop, sz, z, w) \
- bfin_gen_ldst (ptr, reg, aop, sz, z, w)
-
-#define LDSTII(ptr, reg, offset, w, op) \
- bfin_gen_ldstii (ptr, reg, offset, w, op)
-
-#define DSPLDST(i, m, reg, aop, w) \
- bfin_gen_dspldst (i, reg, aop, w, m)
-
-#define LDSTPMOD(ptr, reg, idx, aop, w) \
- bfin_gen_ldstpmod (ptr, reg, aop, w, idx)
-
-#define LDSTIIFP(offset, reg, w) \
- bfin_gen_ldstiifp (reg, offset, w)
-
-#define LOGI2OP(dst, src, opc) \
- bfin_gen_logi2op (opc, src, dst.regno & CODE_MASK)
-
-#define ALU2OP(dst, src, opc) \
- bfin_gen_alu2op (dst, src, opc)
-
-#define BRCC(t, b, offset) \
- bfin_gen_brcc (t, b, offset)
-
-#define UJUMP(offset) \
- bfin_gen_ujump (offset)
-
-#define PROGCTRL(prgfunc, poprnd) \
- bfin_gen_progctrl (prgfunc, poprnd)
-
-#define PUSHPOPMULTIPLE(dr, pr, d, p, w) \
- bfin_gen_pushpopmultiple (dr, pr, d, p, w)
-
-#define PUSHPOPREG(reg, w) \
- bfin_gen_pushpopreg (reg, w)
-
-#define CALLA(addr, s) \
- bfin_gen_calla (addr, s)
-
-#define LINKAGE(r, framesize) \
- bfin_gen_linkage (r, framesize)
-
-#define COMPI2OPD(dst, src, op) \
- bfin_gen_compi2opd (dst, src, op)
-
-#define COMPI2OPP(dst, src, op) \
- bfin_gen_compi2opp (dst, src, op)
-
-#define DAGMODIK(i, op) \
- bfin_gen_dagmodik (i, op)
-
-#define DAGMODIM(i, m, op, br) \
- bfin_gen_dagmodim (i, m, op, br)
-
-#define COMP3OP(dst, src0, src1, opc) \
- bfin_gen_comp3op (src0, src1, dst, opc)
-
-#define PTR2OP(dst, src, opc) \
- bfin_gen_ptr2op (dst, src, opc)
-
-#define CCFLAG(x, y, opc, i, g) \
- bfin_gen_ccflag (x, y, opc, i, g)
-
-#define CCMV(src, dst, t) \
- bfin_gen_ccmv (src, dst, t)
-
-#define CACTRL(reg, a, op) \
- bfin_gen_cactrl (reg, a, op)
-
-#define LOOPSETUP(soffset, c, rop, eoffset, reg) \
- bfin_gen_loopsetup (soffset, c, rop, eoffset, reg)
-
-#define HL2(r1, r0) (IS_H (r1) << 1 | IS_H (r0))
-#define IS_RANGE(bits, expr, sign, mul) \
- value_match(expr, bits, sign, mul, 1)
-#define IS_URANGE(bits, expr, sign, mul) \
- value_match(expr, bits, sign, mul, 0)
-#define IS_CONST(expr) (expr->type == Expr_Node_Constant)
-#define IS_RELOC(expr) (expr->type != Expr_Node_Constant)
-#define IS_IMM(expr, bits) value_match (expr, bits, 0, 1, 1)
-#define IS_UIMM(expr, bits) value_match (expr, bits, 0, 1, 0)
-
-#define IS_PCREL4(expr) \
- (value_match (expr, 4, 0, 2, 0))
-
-#define IS_LPPCREL10(expr) \
- (value_match (expr, 10, 0, 2, 0))
-
-#define IS_PCREL10(expr) \
- (value_match (expr, 10, 0, 2, 1))
-
-#define IS_PCREL12(expr) \
- (value_match (expr, 12, 0, 2, 1))
-
-#define IS_PCREL24(expr) \
- (value_match (expr, 24, 0, 2, 1))
-
-
-static int value_match (Expr_Node *expr, int sz, int sign, int mul, int issigned);
-
-extern FILE *errorf;
-extern INSTR_T insn;
-
-static Expr_Node *binary (Expr_Op_Type, Expr_Node *, Expr_Node *);
-static Expr_Node *unary (Expr_Op_Type, Expr_Node *);
-
-static void notethat (char *format, ...);
-
-char *current_inputline;
-extern char *yytext;
-int yyerror (char *msg);
-
-void error (char *format, ...)
-{
- va_list ap;
- char buffer[2000];
-
- va_start (ap, format);
- vsprintf (buffer, format, ap);
- va_end (ap);
-
- as_bad (buffer);
-}
-
-int
-yyerror (char *msg)
-{
- if (msg[0] == '\0')
- error ("%s", msg);
-
- else if (yytext[0] != ';')
- error ("%s. Input text was %s.", msg, yytext);
- else
- error ("%s.", msg);
-
- return -1;
-}
-
-static int
-in_range_p (Expr_Node *expr, int from, int to, unsigned int mask)
-{
- int val = EXPR_VALUE (expr);
- if (expr->type != Expr_Node_Constant)
- return 0;
- if (val < from || val > to)
- return 0;
- return (val & mask) == 0;
-}
-
-extern int yylex (void);
-
-#define imm3(x) EXPR_VALUE (x)
-#define imm4(x) EXPR_VALUE (x)
-#define uimm4(x) EXPR_VALUE (x)
-#define imm5(x) EXPR_VALUE (x)
-#define uimm5(x) EXPR_VALUE (x)
-#define imm6(x) EXPR_VALUE (x)
-#define imm7(x) EXPR_VALUE (x)
-#define imm16(x) EXPR_VALUE (x)
-#define uimm16s4(x) ((EXPR_VALUE (x)) >> 2)
-#define uimm16(x) EXPR_VALUE (x)
-
-/* Return true if a value is inside a range. */
-#define IN_RANGE(x, low, high) \
- (((EXPR_VALUE(x)) >= (low)) && (EXPR_VALUE(x)) <= ((high)))
-
-/* Auxiliary functions. */
-
-static void
-neg_value (Expr_Node *expr)
-{
- expr->value.i_value = -expr->value.i_value;
-}
-
-static int
-valid_dreg_pair (Register *reg1, Expr_Node *reg2)
-{
- if (!IS_DREG (*reg1))
- {
- yyerror ("Dregs expected");
- return 0;
- }
-
- if (reg1->regno != 1 && reg1->regno != 3)
- {
- yyerror ("Bad register pair");
- return 0;
- }
-
- if (imm7 (reg2) != reg1->regno - 1)
- {
- yyerror ("Bad register pair");
- return 0;
- }
-
- reg1->regno--;
- return 1;
-}
-
-static int
-check_multiply_halfregs (Macfunc *aa, Macfunc *ab)
-{
- if ((!REG_EQUAL (aa->s0, ab->s0) && !REG_EQUAL (aa->s0, ab->s1))
- || (!REG_EQUAL (aa->s1, ab->s1) && !REG_EQUAL (aa->s1, ab->s0)))
- return yyerror ("Source multiplication register mismatch");
-
- return 0;
-}
-
-
-/* Check (vector) mac funcs and ops. */
-
-static int
-check_macfuncs (Macfunc *aa, Opt_mode *opa,
- Macfunc *ab, Opt_mode *opb)
-{
- /* Variables for swapping. */
- Macfunc mtmp;
- Opt_mode otmp;
-
- /* If a0macfunc comes before a1macfunc, swap them. */
-
- if (aa->n == 0)
- {
- /* (M) is not allowed here. */
- if (opa->MM != 0)
- return yyerror ("(M) not allowed with A0MAC");
- if (ab->n != 1)
- return yyerror ("Vector AxMACs can't be same");
-
- mtmp = *aa; *aa = *ab; *ab = mtmp;
- otmp = *opa; *opa = *opb; *opb = otmp;
- }
- else
- {
- if (opb->MM != 0)
- return yyerror ("(M) not allowed with A0MAC");
- if (opa->mod != 0)
- return yyerror ("Bad opt mode");
- if (ab->n != 0)
- return yyerror ("Vector AxMACs can't be same");
- }
-
- /* If both ops are != 3, we have multiply_halfregs in both
- assignment_or_macfuncs. */
- if (aa->op == ab->op && aa->op != 3)
- {
- if (check_multiply_halfregs (aa, ab) < 0)
- return -1;
- }
- else
- {
- /* Only one of the assign_macfuncs has a half reg multiply
- Evil trick: Just 'OR' their source register codes:
- We can do that, because we know they were initialized to 0
- in the rules that don't use multiply_halfregs. */
- aa->s0.regno |= (ab->s0.regno & CODE_MASK);
- aa->s1.regno |= (ab->s1.regno & CODE_MASK);
- }
-
- if (aa->w == ab->w && aa->P != ab->P)
- {
- return yyerror ("macfuncs must differ");
- if (aa->w && (aa->dst.regno - ab->dst.regno != 1))
- return yyerror ("Destination Dregs must differ by one");
- }
- /* We assign to full regs, thus obey even/odd rules. */
- else if ((aa->w && aa->P && IS_EVEN (aa->dst))
- || (ab->w && ab->P && !IS_EVEN (ab->dst)))
- return yyerror ("Even/Odd register assignment mismatch");
- /* We assign to half regs, thus obey hi/low rules. */
- else if ( (aa->w && !aa->P && !IS_H (aa->dst))
- || (ab->w && !aa->P && IS_H (ab->dst)))
- return yyerror ("High/Low register assignment mismatch");
-
- /* Make sure first macfunc has got both P flags ORed. */
- aa->P |= ab->P;
-
- /* Make sure mod flags get ORed, too. */
- opb->mod |= opa->mod;
- return 0;
-}
-
-
-static int
-is_group1 (INSTR_T x)
-{
- /* Group1 is dpsLDST, LDSTpmod, LDST, LDSTiiFP, LDSTii. */
- if ((x->value & 0xc000) == 0x8000 || (x->value == 0x0000))
- return 1;
-
- return 0;
-}
-
-static int
-is_group2 (INSTR_T x)
-{
- if ((((x->value & 0xfc00) == 0x9c00) /* dspLDST. */
- && !((x->value & 0xfde0) == 0x9c60) /* dagMODim. */
- && !((x->value & 0xfde0) == 0x9ce0) /* dagMODim with bit rev. */
- && !((x->value & 0xfde0) == 0x9d60)) /* pick dagMODik. */
- || (x->value == 0x0000))
- return 1;
- return 0;
-}
-
-
-
-/* Enabling traces. */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages. */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table. */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 366 "bfin-parse.y"
-typedef union YYSTYPE {
- INSTR_T instr;
- Expr_Node *expr;
- SYMBOL_T symbol;
- long value;
- Register reg;
- Macfunc macfunc;
- struct { int r0; int s0; int x0; int aop; } modcodes;
- struct { int r0; } r0;
- Opt_mode mod;
-} YYSTYPE;
-/* Line 196 of yacc.c. */
-#line 790 "bfin-parse.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 802 "bfin-parse.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 149
-/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 1315
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 175
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 47
-/* YYNRULES -- Number of rules. */
-#define YYNRULES 349
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 1024
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
-#define YYUNDEFTOK 2
-#define YYMAXUTOK 429
-
-#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, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 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, 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, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174
-};
-
-#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, 4, 6, 9, 16, 21, 23, 25,
- 28, 34, 36, 43, 50, 54, 58, 76, 94, 106,
- 118, 130, 143, 156, 169, 175, 179, 183, 187, 196,
- 210, 223, 237, 251, 265, 274, 292, 299, 309, 313,
- 320, 324, 330, 337, 346, 355, 358, 361, 366, 370,
- 373, 378, 382, 389, 394, 402, 410, 414, 418, 425,
- 429, 434, 438, 442, 446, 458, 470, 480, 486, 492,
- 502, 508, 514, 521, 528, 534, 540, 546, 553, 560,
- 566, 568, 572, 576, 580, 584, 589, 594, 604, 614,
- 620, 628, 633, 640, 646, 653, 661, 671, 680, 689,
- 701, 711, 716, 722, 729, 737, 744, 749, 756, 762,
- 769, 776, 781, 790, 801, 812, 825, 831, 838, 844,
- 851, 856, 861, 866, 874, 884, 894, 904, 911, 918,
- 925, 934, 943, 950, 956, 962, 971, 976, 984, 986,
- 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1007,
- 1010, 1015, 1020, 1027, 1034, 1037, 1040, 1045, 1048, 1051,
- 1054, 1057, 1060, 1063, 1070, 1077, 1083, 1088, 1092, 1096,
- 1100, 1104, 1108, 1112, 1117, 1120, 1125, 1128, 1133, 1136,
- 1141, 1144, 1152, 1161, 1170, 1178, 1186, 1194, 1204, 1212,
- 1221, 1231, 1240, 1247, 1255, 1264, 1274, 1283, 1291, 1299,
- 1306, 1310, 1322, 1330, 1342, 1350, 1354, 1357, 1359, 1367,
- 1377, 1389, 1393, 1399, 1407, 1409, 1412, 1415, 1420, 1422,
- 1429, 1436, 1443, 1445, 1447, 1448, 1454, 1460, 1464, 1468,
- 1472, 1476, 1477, 1479, 1481, 1483, 1485, 1487, 1488, 1492,
- 1493, 1497, 1501, 1502, 1506, 1510, 1516, 1522, 1523, 1527,
- 1531, 1532, 1536, 1540, 1541, 1545, 1549, 1553, 1559, 1565,
- 1566, 1570, 1571, 1575, 1577, 1579, 1581, 1583, 1584, 1588,
- 1592, 1596, 1602, 1608, 1610, 1612, 1614, 1615, 1619, 1620,
- 1624, 1629, 1634, 1636, 1638, 1640, 1642, 1644, 1646, 1648,
- 1650, 1654, 1658, 1662, 1666, 1672, 1678, 1684, 1690, 1694,
- 1698, 1704, 1710, 1711, 1713, 1715, 1718, 1721, 1724, 1728,
- 1730, 1736, 1742, 1746, 1749, 1752, 1755, 1759, 1761, 1763,
- 1765, 1767, 1771, 1775, 1779, 1783, 1785, 1787, 1789, 1791,
- 1795, 1797, 1799, 1803, 1805, 1807, 1811, 1814, 1817, 1819,
- 1823, 1827, 1831, 1835, 1839, 1843, 1847, 1851, 1855, 1859
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const short int yyrhs[] =
-{
- 176, 0, -1, -1, 177, -1, 178, 161, -1, 178,
- 78, 178, 78, 178, 161, -1, 178, 78, 178, 161,
- -1, 1, -1, 167, -1, 209, 180, -1, 209, 180,
- 158, 209, 180, -1, 56, -1, 26, 98, 163, 208,
- 179, 162, -1, 36, 98, 163, 208, 179, 162, -1,
- 33, 98, 36, -1, 35, 98, 36, -1, 163, 26,
- 158, 26, 162, 98, 3, 163, 26, 160, 220, 158,
- 26, 160, 220, 162, 193, -1, 163, 26, 158, 26,
- 162, 98, 4, 163, 26, 160, 220, 158, 26, 160,
- 220, 162, 193, -1, 163, 26, 158, 26, 162, 98,
- 9, 26, 160, 220, 193, -1, 163, 26, 158, 26,
- 162, 98, 20, 26, 163, 192, 162, -1, 26, 98,
- 34, 71, 35, 158, 26, 98, 32, 71, 33, -1,
- 26, 98, 179, 71, 179, 158, 26, 98, 179, 70,
- 179, 185, -1, 26, 98, 26, 202, 26, 158, 26,
- 98, 26, 202, 26, 185, -1, 26, 98, 26, 201,
- 26, 158, 26, 98, 26, 201, 26, 186, -1, 26,
- 98, 77, 26, 190, -1, 206, 77, 179, -1, 32,
- 98, 36, -1, 34, 98, 36, -1, 26, 98, 195,
- 163, 26, 158, 26, 162, -1, 26, 98, 5, 163,
- 26, 160, 220, 158, 26, 160, 220, 162, 194, -1,
- 26, 98, 5, 163, 26, 160, 220, 158, 26, 160,
- 220, 162, -1, 26, 98, 6, 163, 26, 160, 220,
- 158, 26, 160, 220, 162, 203, -1, 26, 98, 7,
- 163, 26, 160, 220, 158, 26, 160, 220, 162, 203,
- -1, 26, 98, 8, 163, 26, 160, 220, 158, 26,
- 160, 220, 162, 204, -1, 26, 98, 10, 163, 26,
- 158, 26, 162, -1, 36, 98, 36, 98, 22, 163,
- 36, 162, 72, 36, 71, 22, 163, 36, 162, 72,
- 36, -1, 26, 98, 26, 202, 26, 185, -1, 26,
- 98, 200, 163, 26, 158, 26, 162, 190, -1, 206,
- 70, 179, -1, 36, 98, 36, 202, 36, 185, -1,
- 206, 206, 220, -1, 206, 179, 163, 126, 162, -1,
- 36, 98, 26, 163, 138, 162, -1, 36, 98, 26,
- 202, 26, 163, 141, 162, -1, 36, 98, 26, 202,
- 26, 163, 142, 162, -1, 206, 179, -1, 206, 26,
- -1, 26, 98, 36, 187, -1, 36, 98, 220, -1,
- 206, 220, -1, 26, 98, 220, 188, -1, 36, 98,
- 26, -1, 26, 98, 26, 201, 26, 184, -1, 26,
- 98, 29, 187, -1, 206, 77, 179, 158, 206, 77,
- 179, -1, 206, 70, 179, 158, 206, 70, 179, -1,
- 207, 179, 196, -1, 26, 103, 220, -1, 26, 104,
- 26, 163, 132, 162, -1, 26, 103, 26, -1, 179,
- 104, 179, 196, -1, 26, 104, 26, -1, 26, 104,
- 220, -1, 26, 99, 26, -1, 12, 163, 26, 160,
- 220, 158, 26, 160, 220, 162, 193, -1, 206, 179,
- 163, 126, 162, 158, 206, 179, 163, 126, 162, -1,
- 26, 98, 163, 26, 71, 26, 162, 91, 220, -1,
- 26, 98, 26, 66, 26, -1, 26, 98, 26, 68,
- 26, -1, 26, 98, 26, 71, 163, 26, 91, 220,
- 162, -1, 28, 98, 179, 107, 179, -1, 28, 98,
- 179, 112, 179, -1, 28, 98, 26, 112, 26, 197,
- -1, 28, 98, 26, 112, 220, 197, -1, 28, 98,
- 26, 107, 26, -1, 28, 98, 26, 107, 220, -1,
- 28, 98, 179, 106, 179, -1, 28, 98, 26, 106,
- 26, 197, -1, 28, 98, 26, 106, 220, 197, -1,
- 26, 98, 26, 65, 26, -1, 213, -1, 26, 98,
- 26, -1, 28, 98, 26, -1, 26, 98, 28, -1,
- 28, 105, 28, -1, 36, 98, 211, 180, -1, 26,
- 98, 211, 180, -1, 36, 98, 211, 180, 158, 36,
- 98, 211, 180, -1, 26, 98, 211, 180, 158, 26,
- 98, 211, 180, -1, 206, 87, 179, 159, 36, -1,
- 36, 98, 87, 36, 159, 36, 191, -1, 206, 179,
- 91, 220, -1, 26, 98, 26, 91, 220, 189, -1,
- 36, 98, 36, 91, 220, -1, 36, 98, 36, 91,
- 220, 191, -1, 26, 98, 87, 26, 159, 36, 189,
- -1, 36, 98, 19, 163, 26, 158, 36, 162, 190,
- -1, 36, 98, 19, 163, 36, 158, 36, 162, -1,
- 26, 98, 18, 163, 26, 158, 26, 162, -1, 26,
- 98, 18, 163, 26, 158, 26, 162, 163, 133, 162,
- -1, 26, 98, 17, 163, 26, 158, 36, 162, 187,
- -1, 206, 179, 93, 220, -1, 206, 86, 179, 159,
- 36, -1, 36, 98, 86, 36, 159, 36, -1, 26,
- 98, 86, 26, 159, 36, 190, -1, 26, 98, 85,
- 26, 159, 36, -1, 206, 179, 92, 220, -1, 26,
- 98, 26, 92, 220, 190, -1, 36, 98, 36, 92,
- 220, -1, 36, 98, 36, 93, 220, 191, -1, 26,
- 98, 26, 93, 220, 189, -1, 36, 98, 21, 26,
- -1, 26, 98, 11, 163, 36, 158, 36, 162, -1,
- 36, 98, 28, 98, 88, 163, 179, 158, 26, 162,
- -1, 36, 98, 28, 98, 69, 163, 179, 158, 26,
- 162, -1, 36, 98, 28, 98, 69, 163, 179, 158,
- 179, 158, 28, 162, -1, 206, 90, 179, 159, 36,
- -1, 26, 98, 90, 26, 159, 36, -1, 206, 90,
- 179, 159, 220, -1, 26, 98, 90, 26, 159, 220,
- -1, 36, 98, 23, 179, -1, 36, 98, 23, 26,
- -1, 36, 98, 23, 36, -1, 36, 98, 16, 163,
- 26, 162, 181, -1, 26, 98, 16, 163, 26, 158,
- 26, 162, 181, -1, 150, 163, 26, 158, 26, 158,
- 179, 162, 181, -1, 206, 88, 163, 179, 158, 179,
- 158, 28, 162, -1, 147, 163, 26, 158, 220, 162,
- -1, 148, 163, 26, 158, 220, 162, -1, 146, 163,
- 26, 158, 220, 162, -1, 28, 105, 149, 163, 26,
- 158, 220, 162, -1, 28, 98, 149, 163, 26, 158,
- 220, 162, -1, 157, 64, 28, 26, 98, 26, -1,
- 157, 28, 26, 98, 26, -1, 157, 64, 28, 57,
- 220, -1, 157, 64, 28, 57, 220, 163, 131, 162,
- -1, 157, 28, 57, 220, -1, 157, 28, 57, 220,
- 163, 131, 162, -1, 37, -1, 39, -1, 38, -1,
- 40, -1, 41, -1, 42, -1, 44, -1, 47, -1,
- 48, -1, 49, -1, 46, 26, -1, 45, 26, -1,
- 57, 163, 26, 162, -1, 60, 163, 26, 162, -1,
- 60, 163, 27, 71, 26, 162, -1, 57, 163, 27,
- 71, 26, 162, -1, 50, 220, -1, 51, 220, -1,
- 120, 163, 26, 162, -1, 57, 220, -1, 58, 220,
- -1, 59, 220, -1, 59, 218, -1, 60, 220, -1,
- 60, 218, -1, 97, 163, 26, 158, 26, 162, -1,
- 96, 163, 26, 158, 26, 162, -1, 26, 98, 70,
- 26, 189, -1, 26, 98, 63, 26, -1, 26, 95,
- 26, -1, 26, 95, 220, -1, 26, 89, 26, -1,
- 26, 94, 26, -1, 26, 94, 220, -1, 26, 89,
- 220, -1, 114, 164, 26, 165, -1, 114, 199, -1,
- 113, 164, 26, 165, -1, 113, 199, -1, 115, 164,
- 26, 165, -1, 115, 199, -1, 116, 164, 26, 165,
- -1, 116, 199, -1, 123, 164, 26, 205, 165, 98,
- 26, -1, 123, 164, 26, 202, 220, 165, 98, 26,
- -1, 124, 164, 26, 202, 220, 165, 98, 26, -1,
- 124, 164, 26, 205, 165, 98, 26, -1, 124, 164,
- 26, 205, 165, 98, 36, -1, 164, 26, 202, 220,
- 165, 98, 26, -1, 26, 98, 124, 164, 26, 202,
- 220, 165, 187, -1, 36, 98, 124, 164, 26, 205,
- 165, -1, 26, 98, 124, 164, 26, 205, 165, 187,
- -1, 26, 98, 124, 164, 26, 84, 26, 165, 187,
- -1, 36, 98, 124, 164, 26, 84, 26, 165, -1,
- 164, 26, 205, 165, 98, 26, -1, 164, 26, 84,
- 26, 165, 98, 26, -1, 124, 164, 26, 84, 26,
- 165, 98, 36, -1, 26, 98, 123, 164, 26, 202,
- 220, 165, 187, -1, 26, 98, 123, 164, 26, 205,
- 165, 187, -1, 26, 98, 164, 26, 84, 26, 165,
- -1, 26, 98, 164, 26, 202, 217, 165, -1, 26,
- 98, 164, 26, 205, 165, -1, 220, 98, 220, -1,
- 198, 98, 163, 26, 160, 220, 158, 26, 160, 220,
- 162, -1, 198, 98, 163, 26, 160, 220, 162, -1,
- 163, 26, 160, 220, 158, 26, 160, 220, 162, 98,
- 199, -1, 163, 26, 160, 220, 162, 98, 199, -1,
- 198, 98, 26, -1, 24, 220, -1, 25, -1, 52,
- 163, 220, 158, 220, 162, 26, -1, 52, 163, 220,
- 158, 220, 162, 26, 98, 26, -1, 52, 163, 220,
- 158, 220, 162, 26, 98, 26, 92, 220, -1, 53,
- 220, 26, -1, 53, 220, 26, 98, 26, -1, 53,
- 220, 26, 98, 26, 92, 220, -1, 154, -1, 154,
- 179, -1, 154, 26, -1, 156, 163, 26, 162, -1,
- 153, -1, 155, 163, 36, 158, 220, 162, -1, 152,
- 163, 26, 158, 220, 162, -1, 151, 163, 26, 158,
- 220, 162, -1, 30, -1, 31, -1, -1, 163, 135,
- 158, 136, 162, -1, 163, 136, 158, 135, 162, -1,
- 163, 136, 162, -1, 163, 135, 162, -1, 163, 121,
- 162, -1, 163, 122, 162, -1, -1, 126, -1, 127,
- -1, 128, -1, 121, -1, 122, -1, -1, 163, 182,
- 162, -1, -1, 163, 125, 162, -1, 163, 126, 162,
- -1, -1, 163, 183, 162, -1, 163, 182, 162, -1,
- 163, 183, 158, 182, 162, -1, 163, 182, 158, 183,
- 162, -1, -1, 163, 134, 162, -1, 163, 133, 162,
- -1, -1, 163, 133, 162, -1, 163, 134, 162, -1,
- -1, 163, 125, 162, -1, 163, 126, 162, -1, 163,
- 143, 162, -1, 163, 143, 158, 126, 162, -1, 163,
- 126, 158, 143, 162, -1, -1, 163, 143, 162, -1,
- -1, 163, 126, 162, -1, 108, -1, 111, -1, 110,
- -1, 109, -1, -1, 163, 137, 162, -1, 163, 137,
- 162, -1, 163, 136, 162, -1, 163, 136, 158, 137,
- 162, -1, 163, 137, 158, 136, 162, -1, 13, -1,
- 14, -1, 15, -1, -1, 163, 136, 162, -1, -1,
- 163, 136, 162, -1, 164, 83, 26, 165, -1, 164,
- 26, 84, 165, -1, 75, -1, 76, -1, 79, -1,
- 80, -1, 81, -1, 82, -1, 71, -1, 70, -1,
- 163, 140, 162, -1, 163, 129, 162, -1, 163, 139,
- 162, -1, 163, 130, 162, -1, 163, 140, 158, 137,
- 162, -1, 163, 129, 158, 137, 162, -1, 163, 139,
- 158, 137, 162, -1, 163, 130, 158, 137, 162, -1,
- 163, 144, 162, -1, 163, 145, 162, -1, 163, 144,
- 158, 137, 162, -1, 163, 145, 158, 137, 162, -1,
- -1, 84, -1, 83, -1, 179, 98, -1, 179, 103,
- -1, 179, 104, -1, 26, 98, 179, -1, 210, -1,
- 26, 98, 163, 210, 162, -1, 36, 98, 163, 210,
- 162, -1, 36, 98, 179, -1, 206, 211, -1, 208,
- 211, -1, 207, 211, -1, 36, 72, 36, -1, 98,
- -1, 100, -1, 102, -1, 101, -1, 28, 212, 166,
- -1, 28, 212, 143, -1, 166, 212, 28, -1, 143,
- 212, 28, -1, 168, -1, 170, -1, 171, -1, 172,
- -1, 214, 173, 215, -1, 216, -1, 220, -1, 214,
- 173, 174, -1, 169, -1, 214, -1, 163, 221, 162,
- -1, 63, 221, -1, 70, 221, -1, 221, -1, 221,
- 72, 221, -1, 221, 73, 221, -1, 221, 67, 221,
- -1, 221, 71, 221, -1, 221, 70, 221, -1, 221,
- 91, 221, -1, 221, 92, 221, -1, 221, 65, 221,
- -1, 221, 68, 221, -1, 221, 66, 221, -1, 219,
- -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const unsigned short int yyrline[] =
-{
- 0, 567, 567, 568, 580, 582, 615, 642, 653, 657,
- 692, 712, 717, 727, 737, 742, 747, 763, 779, 791,
- 801, 814, 833, 851, 874, 896, 901, 911, 922, 933,
- 947, 962, 978, 994, 1010, 1021, 1035, 1061, 1079, 1084,
- 1090, 1102, 1113, 1124, 1135, 1146, 1157, 1168, 1194, 1208,
- 1218, 1263, 1282, 1293, 1304, 1315, 1326, 1337, 1353, 1370,
- 1386, 1397, 1408, 1439, 1450, 1463, 1474, 1513, 1523, 1533,
- 1553, 1563, 1573, 1583, 1594, 1602, 1612, 1622, 1633, 1657,
- 1668, 1674, 1685, 1696, 1707, 1715, 1736, 1761, 1788, 1822,
- 1836, 1847, 1861, 1895, 1905, 1915, 1940, 1952, 1970, 1981,
- 1992, 2003, 2016, 2027, 2038, 2049, 2060, 2071, 2104, 2114,
- 2127, 2147, 2158, 2169, 2182, 2195, 2206, 2217, 2228, 2239,
- 2249, 2260, 2271, 2283, 2294, 2305, 2316, 2329, 2341, 2353,
- 2364, 2375, 2386, 2398, 2410, 2421, 2432, 2443, 2453, 2459,
- 2465, 2471, 2477, 2483, 2489, 2495, 2501, 2507, 2513, 2524,
- 2535, 2546, 2557, 2568, 2579, 2590, 2596, 2607, 2618, 2629,
- 2640, 2651, 2661, 2674, 2682, 2690, 2714, 2725, 2736, 2747,
- 2758, 2769, 2781, 2794, 2803, 2814, 2825, 2837, 2848, 2859,
- 2870, 2884, 2896, 2911, 2930, 2941, 2959, 2993, 3011, 3028,
- 3039, 3050, 3061, 3082, 3101, 3114, 3128, 3140, 3156, 3196,
- 3229, 3237, 3253, 3272, 3286, 3305, 3321, 3329, 3338, 3349,
- 3361, 3375, 3383, 3393, 3405, 3410, 3415, 3421, 3429, 3435,
- 3441, 3447, 3460, 3464, 3474, 3478, 3483, 3488, 3493, 3500,
- 3504, 3511, 3515, 3520, 3525, 3533, 3537, 3544, 3548, 3556,
- 3561, 3567, 3576, 3581, 3587, 3593, 3599, 3608, 3611, 3615,
- 3622, 3625, 3629, 3636, 3641, 3647, 3653, 3659, 3664, 3672,
- 3675, 3682, 3685, 3692, 3696, 3700, 3704, 3711, 3714, 3721,
- 3726, 3733, 3740, 3752, 3756, 3760, 3767, 3770, 3780, 3783,
- 3792, 3798, 3807, 3811, 3818, 3822, 3826, 3830, 3837, 3841,
- 3848, 3856, 3864, 3872, 3880, 3887, 3894, 3902, 3912, 3917,
- 3922, 3927, 3935, 3938, 3942, 3951, 3958, 3965, 3972, 3987,
- 3993, 4001, 4009, 4027, 4034, 4041, 4051, 4064, 4068, 4072,
- 4076, 4083, 4089, 4095, 4101, 4111, 4120, 4122, 4124, 4128,
- 4136, 4140, 4147, 4153, 4159, 4163, 4167, 4171, 4177, 4183,
- 4187, 4191, 4195, 4199, 4203, 4207, 4211, 4215, 4219, 4223
-};
-#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", "BYTEOP16P", "BYTEOP16M", "BYTEOP1P",
- "BYTEOP2P", "BYTEOP2M", "BYTEOP3P", "BYTEUNPACK", "BYTEPACK", "PACK",
- "SAA", "ALIGN8", "ALIGN16", "ALIGN24", "VIT_MAX", "EXTRACT", "DEPOSIT",
- "EXPADJ", "SEARCH", "ONES", "SIGN", "SIGNBITS", "LINK", "UNLINK", "REG",
- "PC", "CCREG", "BYTE_DREG", "REG_A_DOUBLE_ZERO", "REG_A_DOUBLE_ONE",
- "A_ZERO_DOT_L", "A_ZERO_DOT_H", "A_ONE_DOT_L", "A_ONE_DOT_H", "HALF_REG",
- "NOP", "RTI", "RTS", "RTX", "RTN", "RTE", "HLT", "IDLE", "STI", "CLI",
- "CSYNC", "SSYNC", "EMUEXCPT", "RAISE", "EXCPT", "LSETUP", "LOOP",
- "LOOP_BEGIN", "LOOP_END", "DISALGNEXCPT", "JUMP", "JUMP_DOT_S",
- "JUMP_DOT_L", "CALL", "ABORT", "NOT", "TILDA", "BANG", "AMPERSAND",
- "BAR", "PERCENT", "CARET", "BXOR", "MINUS", "PLUS", "STAR", "SLASH",
- "NEG", "MIN", "MAX", "ABS", "DOUBLE_BAR", "_PLUS_BAR_PLUS",
- "_PLUS_BAR_MINUS", "_MINUS_BAR_PLUS", "_MINUS_BAR_MINUS", "_MINUS_MINUS",
- "_PLUS_PLUS", "SHIFT", "LSHIFT", "ASHIFT", "BXORSHIFT",
- "_GREATER_GREATER_GREATER_THAN_ASSIGN", "ROT", "LESS_LESS",
- "GREATER_GREATER", "_GREATER_GREATER_GREATER", "_LESS_LESS_ASSIGN",
- "_GREATER_GREATER_ASSIGN", "DIVS", "DIVQ", "ASSIGN", "_STAR_ASSIGN",
- "_BAR_ASSIGN", "_CARET_ASSIGN", "_AMPERSAND_ASSIGN", "_MINUS_ASSIGN",
- "_PLUS_ASSIGN", "_ASSIGN_BANG", "_LESS_THAN_ASSIGN", "_ASSIGN_ASSIGN",
- "GE", "LT", "LE", "GT", "LESS_THAN", "FLUSHINV", "FLUSH", "IFLUSH",
- "PREFETCH", "PRNT", "OUTC", "WHATREG", "TESTSET", "ASL", "ASR", "B", "W",
- "NS", "S", "CO", "SCO", "TH", "TL", "BP", "BREV", "X", "Z", "M", "MMOD",
- "R", "RND", "RNDL", "RNDH", "RND12", "RND20", "V", "LO", "HI", "BITTGL",
- "BITCLR", "BITSET", "BITTST", "BITMUX", "DBGAL", "DBGAH", "DBGHALT",
- "DBG", "DBGA", "DBGCMPLX", "IF", "COMMA", "BY", "COLON", "SEMICOLON",
- "RPAREN", "LPAREN", "LBRACK", "RBRACK", "STATUS_REG", "MNOP", "SYMBOL",
- "NUMBER", "GOT", "GOT17M4", "FUNCDESC_GOT17M4", "AT", "PLTPC", "$accept",
- "statement", "asm", "asm_1", "REG_A", "opt_mode", "asr_asl", "sco",
- "asr_asl_0", "amod0", "amod1", "amod2", "xpmod", "xpmod1", "vsmod",
- "vmod", "smod", "searchmod", "aligndir", "byteop_mod", "c_align",
- "w32_or_nothing", "iu_or_nothing", "reg_with_predec", "reg_with_postinc",
- "min_max", "op_bar_op", "plus_minus", "rnd_op", "b3_op", "post_op",
- "a_assign", "a_minusassign", "a_plusassign", "assign_macfunc",
- "a_macfunc", "multiply_halfregs", "cc_op", "ccstat", "symbol",
- "any_gotrel", "got", "got_or_expr", "pltpc", "eterm", "expr", "expr_1", 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, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 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, 372, 373, 374,
- 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
- 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
- 395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
- 405, 406, 407, 408, 409, 410, 411, 412, 413, 414,
- 415, 416, 417, 418, 419, 420, 421, 422, 423, 424,
- 425, 426, 427, 428, 429
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const unsigned char yyr1[] =
-{
- 0, 175, 176, 176, 177, 177, 177, 177, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 179, 179, 180, 180, 180, 180, 180, 181,
- 181, 182, 182, 182, 182, 183, 183, 184, 184, 185,
- 185, 185, 186, 186, 186, 186, 186, 187, 187, 187,
- 188, 188, 188, 189, 189, 189, 189, 189, 189, 190,
- 190, 191, 191, 192, 192, 192, 192, 193, 193, 194,
- 194, 194, 194, 195, 195, 195, 196, 196, 197, 197,
- 198, 199, 200, 200, 201, 201, 201, 201, 202, 202,
- 203, 203, 203, 203, 203, 203, 203, 203, 204, 204,
- 204, 204, 205, 205, 205, 206, 207, 208, 209, 209,
- 209, 209, 209, 210, 210, 210, 211, 212, 212, 212,
- 212, 213, 213, 213, 213, 214, 215, 215, 215, 216,
- 217, 217, 218, 219, 219, 219, 219, 219, 220, 221,
- 221, 221, 221, 221, 221, 221, 221, 221, 221, 221
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const unsigned char yyr2[] =
-{
- 0, 2, 0, 1, 2, 6, 4, 1, 1, 2,
- 5, 1, 6, 6, 3, 3, 17, 17, 11, 11,
- 11, 12, 12, 12, 5, 3, 3, 3, 8, 13,
- 12, 13, 13, 13, 8, 17, 6, 9, 3, 6,
- 3, 5, 6, 8, 8, 2, 2, 4, 3, 2,
- 4, 3, 6, 4, 7, 7, 3, 3, 6, 3,
- 4, 3, 3, 3, 11, 11, 9, 5, 5, 9,
- 5, 5, 6, 6, 5, 5, 5, 6, 6, 5,
- 1, 3, 3, 3, 3, 4, 4, 9, 9, 5,
- 7, 4, 6, 5, 6, 7, 9, 8, 8, 11,
- 9, 4, 5, 6, 7, 6, 4, 6, 5, 6,
- 6, 4, 8, 10, 10, 12, 5, 6, 5, 6,
- 4, 4, 4, 7, 9, 9, 9, 6, 6, 6,
- 8, 8, 6, 5, 5, 8, 4, 7, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
- 4, 4, 6, 6, 2, 2, 4, 2, 2, 2,
- 2, 2, 2, 6, 6, 5, 4, 3, 3, 3,
- 3, 3, 3, 4, 2, 4, 2, 4, 2, 4,
- 2, 7, 8, 8, 7, 7, 7, 9, 7, 8,
- 9, 8, 6, 7, 8, 9, 8, 7, 7, 6,
- 3, 11, 7, 11, 7, 3, 2, 1, 7, 9,
- 11, 3, 5, 7, 1, 2, 2, 4, 1, 6,
- 6, 6, 1, 1, 0, 5, 5, 3, 3, 3,
- 3, 0, 1, 1, 1, 1, 1, 0, 3, 0,
- 3, 3, 0, 3, 3, 5, 5, 0, 3, 3,
- 0, 3, 3, 0, 3, 3, 3, 5, 5, 0,
- 3, 0, 3, 1, 1, 1, 1, 0, 3, 3,
- 3, 5, 5, 1, 1, 1, 0, 3, 0, 3,
- 4, 4, 1, 1, 1, 1, 1, 1, 1, 1,
- 3, 3, 3, 3, 5, 5, 5, 5, 3, 3,
- 5, 5, 0, 1, 1, 2, 2, 2, 3, 1,
- 5, 5, 3, 2, 2, 2, 3, 1, 1, 1,
- 1, 3, 3, 3, 3, 1, 1, 1, 1, 3,
- 1, 1, 3, 1, 1, 3, 2, 2, 1, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 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, 7, 0, 0, 207, 0, 0, 222, 223, 0,
- 0, 0, 0, 0, 138, 140, 139, 141, 142, 143,
- 144, 0, 0, 145, 146, 147, 0, 0, 0, 0,
- 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 218, 214, 0, 0, 0, 0, 0,
- 0, 8, 325, 333, 0, 3, 0, 0, 0, 0,
- 0, 0, 224, 309, 80, 334, 349, 0, 338, 0,
- 0, 206, 0, 0, 0, 0, 0, 0, 0, 317,
- 318, 320, 319, 0, 0, 0, 0, 0, 0, 0,
- 149, 148, 154, 155, 0, 0, 0, 157, 158, 334,
- 160, 159, 0, 162, 161, 336, 337, 0, 0, 0,
- 176, 0, 174, 0, 178, 0, 180, 0, 0, 0,
- 317, 0, 0, 0, 0, 0, 0, 0, 216, 215,
- 0, 0, 0, 0, 0, 0, 302, 0, 0, 1,
- 0, 4, 305, 306, 307, 0, 46, 0, 0, 0,
- 0, 0, 0, 0, 45, 0, 313, 49, 276, 315,
- 314, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 169, 172, 170, 171, 167,
- 168, 0, 0, 0, 0, 0, 0, 273, 274, 275,
- 0, 0, 0, 81, 83, 247, 0, 247, 0, 0,
- 282, 283, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 308, 0, 0, 224, 250, 63, 59, 57, 61,
- 62, 82, 0, 0, 84, 0, 322, 321, 26, 14,
- 27, 15, 0, 0, 0, 0, 51, 0, 0, 0,
- 0, 0, 0, 312, 224, 48, 0, 211, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 302, 302, 324, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 335, 289, 288, 304,
- 303, 0, 0, 0, 323, 0, 276, 205, 0, 0,
- 38, 25, 0, 0, 0, 0, 0, 0, 0, 0,
- 40, 0, 56, 0, 0, 0, 200, 346, 348, 341,
- 347, 343, 342, 339, 340, 344, 345, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 288, 284, 285, 286, 287, 0, 0, 0, 0, 0,
- 0, 53, 0, 47, 166, 253, 259, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 302,
- 0, 0, 0, 86, 0, 50, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 111, 121, 122,
- 120, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 85, 0, 0, 150, 0, 332,
- 151, 0, 0, 0, 0, 175, 173, 177, 179, 156,
- 303, 0, 0, 303, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 217, 0, 136, 0, 0, 0, 0,
- 0, 0, 0, 280, 0, 6, 60, 0, 316, 0,
- 0, 0, 0, 0, 0, 91, 106, 101, 0, 0,
- 0, 228, 0, 227, 0, 0, 224, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 79, 67, 68,
- 0, 253, 259, 253, 237, 239, 0, 0, 0, 0,
- 165, 0, 24, 0, 0, 0, 0, 302, 302, 0,
- 307, 0, 310, 303, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 278, 278, 74, 75, 278, 278, 0,
- 76, 70, 71, 0, 0, 0, 0, 0, 0, 0,
- 0, 93, 108, 261, 0, 239, 0, 0, 302, 0,
- 311, 0, 0, 212, 0, 0, 0, 0, 281, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 133, 0, 0, 134, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 102, 89, 0, 116,
- 118, 41, 277, 0, 0, 0, 0, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 92,
- 107, 110, 0, 231, 52, 0, 0, 36, 249, 248,
- 0, 0, 0, 0, 0, 105, 259, 253, 117, 119,
- 0, 0, 303, 0, 0, 0, 12, 0, 334, 330,
- 0, 331, 199, 0, 0, 0, 0, 251, 252, 58,
- 0, 77, 78, 72, 73, 0, 0, 0, 0, 0,
- 42, 0, 0, 0, 0, 94, 109, 0, 39, 103,
- 261, 303, 0, 13, 0, 0, 0, 153, 152, 164,
- 163, 0, 0, 0, 0, 0, 129, 127, 128, 0,
- 221, 220, 219, 0, 132, 0, 0, 0, 0, 0,
- 0, 192, 5, 0, 0, 0, 0, 0, 225, 226,
- 0, 308, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 232, 233, 234, 0, 0,
- 0, 0, 0, 254, 0, 255, 0, 256, 260, 104,
- 95, 0, 247, 0, 0, 247, 0, 197, 0, 198,
- 0, 0, 0, 0, 0, 0, 0, 0, 123, 0,
- 0, 0, 0, 0, 0, 0, 0, 90, 0, 188,
- 0, 208, 213, 0, 181, 0, 0, 184, 185, 0,
- 137, 0, 0, 0, 0, 0, 0, 0, 204, 193,
- 186, 0, 202, 55, 54, 0, 0, 0, 0, 0,
- 0, 0, 34, 112, 0, 247, 98, 0, 0, 238,
- 0, 240, 241, 0, 0, 0, 247, 196, 247, 247,
- 189, 0, 326, 327, 328, 329, 0, 28, 259, 224,
- 279, 131, 130, 0, 0, 259, 97, 43, 44, 0,
- 0, 262, 0, 191, 224, 0, 182, 194, 183, 0,
- 135, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 124, 100, 0, 69, 0,
- 0, 0, 258, 257, 195, 190, 187, 66, 0, 37,
- 88, 229, 230, 96, 0, 0, 0, 0, 87, 209,
- 125, 0, 0, 0, 0, 0, 0, 126, 0, 267,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 114,
- 0, 113, 0, 0, 0, 0, 267, 263, 266, 265,
- 264, 0, 0, 0, 0, 0, 64, 0, 0, 0,
- 0, 99, 242, 239, 20, 239, 0, 0, 210, 0,
- 0, 18, 19, 203, 201, 65, 0, 30, 0, 0,
- 0, 231, 23, 22, 21, 115, 0, 0, 0, 268,
- 0, 29, 0, 31, 32, 0, 33, 235, 236, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 244, 231, 243, 0, 0, 0, 0,
- 270, 0, 269, 0, 291, 0, 293, 0, 292, 0,
- 290, 0, 298, 0, 299, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 246, 245,
- 0, 267, 267, 271, 272, 295, 297, 296, 294, 300,
- 301, 35, 16, 17
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const short int yydefgoto[] =
-{
- -1, 64, 65, 66, 364, 172, 748, 718, 960, 604,
- 607, 942, 351, 375, 490, 492, 655, 911, 916, 951,
- 222, 312, 641, 68, 120, 223, 348, 291, 953, 956,
- 292, 365, 366, 71, 72, 73, 170, 94, 74, 75,
- 815, 629, 630, 110, 76, 77, 78
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -903
-static const short int yypact[] =
-{
- 697, -903, -94, 277, -903, 676, 315, -903, -903, 23,
- 32, 41, 58, 65, -903, -903, -903, -903, -903, -903,
- -903, 121, 158, -903, -903, -903, 277, 277, 29, 277,
- -903, 318, 277, 277, 320, 277, 277, 94, 100, 64,
- 104, 108, 131, 137, 152, 165, 376, 160, 171, 176,
- 182, 219, 238, -903, 566, 244, 251, 79, 96, 44,
- 376, -903, -903, -903, 350, -903, -57, 187, 337, 63,
- 245, 394, 278, -903, -903, -903, -903, 349, 563, 436,
- 277, -903, 146, 159, 167, 489, 438, 186, 188, 37,
- -903, -903, -903, 15, -118, 446, 462, 480, 485, 28,
- -903, -903, -903, -903, 277, 513, 50, -903, -903, 353,
- -903, -903, 85, -903, -903, -903, -903, 521, 534, 537,
- -903, 542, -903, 567, -903, 575, -903, 578, 583, 585,
- -903, 619, 590, 598, 630, 651, 656, 680, -903, -903,
- 677, 693, 62, 692, 204, 470, 200, 698, 712, -903,
- 886, -903, -903, -903, 180, -6, -903, 419, 302, 180,
- 180, 180, 589, 180, 97, 277, -903, -903, 595, -903,
- -903, 297, 568, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 591, -903, -903, -903, -903, -903,
- -903, 599, 600, 601, 603, 605, 606, -903, -903, -903,
- 609, 613, 614, 580, -903, 615, 688, -38, 210, 226,
- -903, -903, 735, 755, 756, 757, 759, 622, 623, 98,
- 762, 718, 627, 628, 278, 629, -903, -903, -903, 632,
- -903, 205, 633, 332, -903, 634, -903, -903, -903, -903,
- -903, -903, 635, 636, 774, 449, -25, 703, 227, 766,
- 768, 641, 302, -903, 278, -903, 648, 709, 647, 743,
- 642, 653, 747, 661, 664, -62, -31, -19, 16, 662,
- 326, 372, -903, 665, 667, 668, 669, 670, 671, 672,
- 673, 733, 277, 84, 806, 277, -903, -903, -903, -903,
- 808, 277, 674, 690, -903, -16, 595, -903, 810, 801,
- 683, 684, 679, 699, 180, 700, 277, 277, 277, 730,
- -903, 721, -903, -26, 116, 520, -903, 441, 616, -903,
- 457, 313, 313, -903, -903, 500, 500, 277, 836, 841,
- 842, 843, 844, 835, 846, 848, 849, 850, 851, 852,
- 716, -903, -903, -903, -903, 277, 277, 277, 855, 856,
- 316, -903, 857, -903, -903, 722, 723, 725, 732, 734,
- 736, 868, 870, 826, 487, 394, 394, 245, 737, 389,
- 180, 877, 878, 748, 324, -903, 773, 243, 268, 300,
- 881, 180, 180, 180, 882, 883, 189, -903, -903, -903,
- -903, 775, 903, 110, 277, 277, 277, 918, 905, 788,
- 789, 924, 245, 790, 793, 277, 927, -903, 928, -903,
- -903, 929, 931, 932, 794, -903, -903, -903, -903, -903,
- -903, 277, 795, 935, 277, 797, 277, 277, 277, 937,
- 277, 277, 277, -903, 938, 802, 869, 277, 804, 179,
- 803, 805, 871, -903, 886, -903, -903, 811, -903, 180,
- 180, 936, 940, 815, 72, -903, -903, -903, 816, 817,
- 845, -903, 853, -903, 879, 887, 278, 822, 824, 827,
- 829, 830, 828, 833, 834, 837, 838, -903, -903, -903,
- 967, 722, 723, 722, -66, 92, 832, 854, 839, 95,
- -903, 860, -903, 962, 968, 969, 124, 326, 474, 981,
- -903, 858, -903, 982, 277, 847, 859, 861, 863, 985,
- 862, 864, 865, 867, 867, -903, -903, 867, 867, 873,
- -903, -903, -903, 888, 866, 889, 890, 894, 872, 895,
- 896, 897, -903, 897, 898, 899, 977, 978, 426, 901,
- -903, 979, 902, 926, 904, 906, 907, 908, -903, 880,
- 925, 892, 900, 946, 909, 910, 911, 893, 912, 913,
- 914, -903, 891, 999, 915, 983, 1041, 984, 986, 987,
- 1051, 919, 277, 988, 1009, 1006, -903, -903, 180, -903,
- -903, 930, -903, 933, 934, 2, 6, -903, 1061, 277,
- 277, 277, 277, 1063, 1054, 1065, 1056, 1067, 1003, -903,
- -903, -903, 1071, 427, -903, 1072, 455, -903, -903, -903,
- 1073, 939, 190, 209, 941, -903, 723, 722, -903, -903,
- 277, 942, 1074, 277, 943, 944, -903, 945, 947, -903,
- 948, -903, -903, 1076, 1078, 1079, 1011, -903, -903, -903,
- 975, -903, -903, -903, -903, 277, 277, 949, 1080, 1081,
- -903, 497, 180, 180, 989, -903, -903, 1082, -903, -903,
- 897, 1088, 954, -903, 1023, 1096, 277, -903, -903, -903,
- -903, 1025, 1098, 1027, 1028, 191, -903, -903, -903, 180,
- -903, -903, -903, 965, -903, 997, 357, 970, 971, 1103,
- 1105, -903, -903, 246, 180, 180, 974, 180, -903, -903,
- 180, -903, 180, 973, 976, 980, 990, 991, 992, 993,
- 994, 995, 996, 277, 1038, -903, -903, -903, 998, 1039,
- 1000, 1001, 1042, -903, 1002, -903, 1013, -903, -903, -903,
- -903, 1004, 615, 1005, 1007, 615, 1050, -903, 533, -903,
- 1044, 1012, 1014, 394, 1015, 1016, 1017, 477, -903, 1018,
- 1019, 1020, 1021, 1008, 1010, 1022, 1024, -903, 1026, -903,
- 394, 1045, -903, 1118, -903, 1110, 1121, -903, -903, 1030,
- -903, 1031, 1032, 1033, 1124, 1125, 277, 1126, -903, -903,
- -903, 1127, -903, -903, -903, 1131, 180, 277, 1135, 1138,
- 1139, 1141, -903, -903, 949, 615, 1034, 1036, 1145, -903,
- 1147, -903, -903, 1143, 1037, 1040, 615, -903, 615, 615,
- -903, 277, -903, -903, -903, -903, 180, -903, 723, 278,
- -903, -903, -903, 1043, 1046, 723, -903, -903, -903, 588,
- 1159, -903, 1115, -903, 278, 1162, -903, -903, -903, 949,
- -903, 1163, 1164, 1047, 1048, 1052, 1116, 1049, 1053, 1055,
- 1057, 1060, 1062, 1064, 1066, -903, -903, 1068, -903, 586,
- 624, 1123, -903, -903, -903, -903, -903, -903, 1133, -903,
- -903, -903, -903, -903, 1059, 1058, 1069, 1168, -903, 1114,
- -903, 1070, 1075, 277, 582, 1112, 277, -903, 1086, 1077,
- 277, 277, 277, 277, 1083, 1187, 1191, 1190, 180, -903,
- 1197, -903, 1156, 277, 277, 277, 1077, -903, -903, -903,
- -903, 1084, 971, 1085, 1087, 1091, -903, 1089, 1090, 1092,
- 1093, -903, 1094, 899, -903, 899, 1097, 1207, -903, 1095,
- 1100, -903, -903, -903, -903, -903, 1099, 1101, 1102, 1102,
- 1104, 456, -903, -903, -903, -903, 1106, 1206, 1208, -903,
- 579, -903, 229, -903, -903, 555, -903, -903, -903, 264,
- 448, 1200, 1108, 1111, 463, 464, 465, 479, 482, 516,
- 517, 518, 596, -903, 427, -903, 1113, 277, 277, 1107,
- -903, 1120, -903, 1129, -903, 1136, -903, 1137, -903, 1140,
- -903, 1142, -903, 1144, -903, 1122, 1128, 1161, 1130, 1132,
- 1134, 1146, 1148, 1149, 1150, 1151, 1152, 1153, -903, -903,
- 1201, 1077, 1077, -903, -903, -903, -903, -903, -903, -903,
- -903, -903, -903, -903
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const short int yypgoto[] =
-{
- -903, -903, -903, -134, 17, -219, -716, -902, 266, -903,
- -520, -903, -201, -903, -443, -472, -478, -903, -788, -903,
- -903, 952, -275, -903, -39, -903, 380, -196, 303, -903,
- -252, 4, 8, -162, 955, -210, -58, 49, -903, -20,
- -903, -903, -903, 1209, -903, -3, 25
-};
-
-/* 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 -3
-static const short int yytable[] =
-{
- 81, 122, 124, 126, 69, 373, 353, 349, 70, 368,
- 600, 166, 169, 109, 109, 658, 295, 67, 422, 425,
- 297, 150, 414, 102, 103, 236, 105, 224, 107, 108,
- 111, 114, 7, 8, 299, 404, 7, 8, 599, 959,
- 601, 254, 403, 234, 242, 287, 288, 243, 237, 244,
- 392, 245, 398, 414, 246, 656, 247, 367, 7, 8,
- 115, 116, 444, 231, 248, 414, 167, 7, 8, 79,
- 146, 139, 996, 165, 421, 424, 258, 259, 855, 186,
- 188, 190, 225, 145, 228, 230, 164, 168, 281, 156,
- 402, 35, 602, 7, 8, 131, 255, 603, 36, 157,
- 414, 256, 221, 415, 151, 145, 233, 142, 579, 148,
- 436, 261, 262, 35, 249, 250, 253, 505, 931, 282,
- 36, 95, 144, 880, 363, 350, 35, 147, 7, 8,
- 96, 145, 460, 158, 416, 35, 461, 145, 391, 97,
- 159, 437, 36, 143, 729, 445, 417, 100, 35, 160,
- 161, 162, 251, 163, 69, 36, 98, 298, 70, 35,
- 618, 35, 310, 99, 235, 700, 36, 67, 36, 702,
- 316, 296, 185, 504, 730, 300, 301, 302, 303, 529,
- 305, 418, 757, 116, 101, 187, 232, 35, 306, 307,
- 308, 252, 104, 189, 36, 152, 62, 63, 530, 317,
- 318, 319, 320, 321, 322, 323, 324, 325, 326, 35,
- 7, 8, 227, 80, 229, 525, 36, 767, 62, 63,
- 611, 612, 35, 1022, 1023, 526, 80, 768, 119, 36,
- 35, 62, 63, 115, 116, 80, 354, 36, 613, 642,
- 62, 63, 643, 644, 145, 621, 624, 587, 80, 35,
- 605, 35, 355, 62, 63, 606, 36, 117, 36, 80,
- 309, 80, 390, 118, 62, 63, 62, 63, 121, 513,
- 287, 288, 123, 35, 462, 7, 8, 145, 463, 435,
- 36, 157, 439, 289, 290, 152, 662, 80, 441, 35,
- 153, 154, 62, 63, 515, 125, 36, 287, 288, 299,
- 127, 620, 623, 455, 456, 457, 35, 166, 169, 80,
- 571, 377, 378, 36, 62, 63, 128, 379, 394, 395,
- 396, 453, 80, 132, 467, 397, 517, 62, 63, 129,
- 80, 35, 7, 8, 133, 62, 63, 566, 36, 134,
- 35, 567, 481, 482, 483, 135, 869, 36, 724, 80,
- 149, 80, 725, 873, 62, 63, 62, 63, 966, 967,
- 772, 773, 284, 35, 285, 35, 774, 726, 968, 969,
- 36, 727, 36, 80, 514, 516, 518, 775, 62, 63,
- 176, 35, 136, 35, 501, 180, 181, 506, 36, 80,
- 36, 531, 532, 533, 62, 63, 287, 288, 520, 521,
- 522, 137, 542, 943, 781, 944, 80, 140, 782, 289,
- 420, 62, 63, 89, 141, 90, 91, 92, 549, 539,
- 93, 552, 972, 554, 555, 556, 973, 558, 559, 560,
- 157, 80, 313, 314, 564, 155, 62, 63, 381, 382,
- 80, 171, 287, 288, 383, 62, 63, 173, 69, 486,
- 487, 580, 70, 574, 575, 289, 423, 510, 511, 287,
- 288, 67, 184, 80, 226, 80, 573, 573, 62, 63,
- 62, 63, 289, 503, 130, 388, 90, 91, 92, 7,
- 8, 106, 238, 112, 628, 389, 62, 63, 62, 63,
- 368, 299, 403, 619, 191, 192, 193, 194, 239, 195,
- 196, 631, 197, 198, 199, 200, 201, 202, 176, 289,
- 661, 178, 179, 180, 181, 203, 240, 204, 205, 7,
- 8, 241, 174, 206, 176, 207, 260, 178, 179, 180,
- 181, 807, 182, 183, 810, 174, 175, 176, 177, 257,
- 178, 179, 180, 181, 287, 288, 464, 263, 182, 183,
- 7, 8, 208, 715, 716, 717, 465, 289, 622, 209,
- 264, 182, 183, 265, 210, 211, 212, 176, 266, 693,
- 178, 179, 180, 181, 213, 214, 215, 957, 958, 216,
- 720, 721, 715, 716, 717, 152, 704, 705, 706, 707,
- 153, 500, 138, 267, 856, 696, 7, 8, 823, 824,
- 870, 268, 701, 253, 269, 864, 974, 865, 866, 270,
- 975, 271, 217, 218, 874, 878, 273, 731, 7, 8,
- 734, 979, 981, 983, 274, 980, 982, 984, 174, 175,
- 176, 177, 286, 178, 179, 180, 181, 985, 751, 752,
- 987, 986, 745, 746, 988, 337, 338, 272, 339, 778,
- 287, 340, 219, 220, 182, 183, 275, 62, 63, 341,
- 342, 343, 344, 762, 896, 341, 342, 343, 344, 753,
- 754, 345, 346, 347, 989, 991, 993, 276, 990, 992,
- 994, 174, 277, 176, 177, 819, 178, 179, 180, 181,
- 907, 908, 909, 910, 287, 288, 769, -2, 1, 970,
- 971, 786, 834, 812, 813, 814, 278, 182, 183, 2,
- 797, 783, 784, 279, 573, 964, 965, 957, 958, 280,
- 283, 3, 4, 5, 293, 6, 315, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 294, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 327, 304, 30, 31, 32, 33, 34, 311, 352,
- 35, 356, 328, 329, 330, 82, 331, 36, 332, 333,
- 83, 84, 334, 845, 85, 86, 335, 336, 350, 87,
- 88, 357, 358, 359, 850, 360, 361, 362, 369, 370,
- 371, 372, 374, 37, 38, 376, 380, 384, 385, 386,
- 387, 393, 399, 849, 400, 401, 405, 406, 867, 407,
- 39, 40, 41, 42, 408, 410, 409, 43, 411, 412,
- 44, 45, 413, 426, 419, 427, 428, 429, 430, 431,
- 432, 434, 438, 868, 440, 433, 447, 448, 451, 442,
- 46, 449, 450, 47, 48, 49, 875, 50, 51, 52,
- 53, 54, 55, 56, 57, 443, 458, 459, 452, 454,
- 58, 59, 468, 60, 61, 62, 63, 469, 470, 471,
- 472, 473, 474, 933, 475, 476, 477, 478, 479, 480,
- 906, 484, 485, 913, 493, 489, 491, 917, 918, 919,
- 920, 494, 488, 495, 497, 496, 498, 499, 2, 502,
- 928, 929, 930, 507, 508, 512, 509, 519, 523, 524,
- 3, 4, 5, 527, 6, 925, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 528,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 534, 535, 30, 31, 32, 33, 34, 536, 537, 35,
- 538, 541, 540, 543, 544, 545, 36, 546, 547, 548,
- 550, 551, 553, 557, 561, 562, 565, 563, 568, 570,
- 569, 572, 576, 578, 998, 999, 577, 585, 581, 582,
- 588, 583, 37, 38, 589, 586, 593, 590, 584, 591,
- 592, 594, 595, 598, 608, 596, 597, 610, 615, 39,
- 40, 41, 42, 614, 616, 617, 43, 625, 627, 44,
- 45, 636, 632, 659, 660, 664, 609, 633, 666, 634,
- 626, 635, 683, 672, 637, 684, 638, 639, 647, 46,
- 640, 645, 47, 48, 49, 651, 50, 51, 52, 53,
- 54, 55, 56, 57, 675, 671, 646, 648, 649, 58,
- 59, 679, 60, 61, 62, 63, 650, 673, 652, 653,
- 654, 657, 606, 663, 665, 674, 667, 687, 668, 669,
- 670, 676, 677, 678, 680, 681, 682, 691, 685, 694,
- 692, 686, 688, 695, 689, 690, 152, 703, 697, 708,
- 709, 710, 711, 712, 713, 698, 699, 714, 719, 722,
- 733, 723, 740, 728, 741, 742, 736, 732, 735, 743,
- 737, 744, 747, 739, 758, 755, 749, 750, 756, 759,
- 738, 760, 761, 763, 764, 765, 766, 770, 771, 779,
- 776, 780, 785, 787, 788, 777, 798, 800, 789, 805,
- 803, 811, 816, 835, 836, 804, 837, 838, 790, 791,
- 843, 844, 846, 847, 792, 793, 794, 795, 796, 848,
- 799, 851, 801, 802, 852, 853, 829, 854, 830, 806,
- 808, 859, 809, 860, 817, 861, 818, 820, 821, 822,
- 825, 826, 827, 828, 831, 876, 832, 877, 879, 881,
- 882, 833, 839, 840, 897, 841, 842, 857, 858, 862,
- 414, 894, 863, 898, 902, 871, 903, 883, 872, 886,
- 912, 884, 914, 922, 885, 887, 900, 923, 888, 889,
- 890, 899, 891, 924, 892, 926, 893, 927, 936, 946,
- 904, 901, 962, 1010, 963, 905, 976, 1021, 995, 895,
- 915, 0, 954, 113, 1000, 921, 932, 934, 446, 935,
- 0, 937, 938, 947, 939, 940, 1001, 941, 948, 945,
- 0, 949, 0, 0, 950, 952, 1002, 955, 977, 961,
- 466, 978, 0, 1003, 1004, 997, 0, 1005, 0, 1006,
- 0, 1007, 0, 0, 1008, 0, 0, 0, 0, 0,
- 1009, 0, 1011, 0, 1012, 0, 1013, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1014, 0,
- 1015, 1016, 1017, 1018, 1019, 1020
-};
-
-static const short int yycheck[] =
-{
- 3, 40, 41, 42, 0, 224, 207, 203, 0, 219,
- 482, 69, 70, 33, 34, 535, 150, 0, 270, 271,
- 26, 78, 84, 26, 27, 143, 29, 85, 31, 32,
- 33, 34, 30, 31, 72, 254, 30, 31, 481, 941,
- 483, 99, 252, 28, 16, 70, 71, 19, 166, 21,
- 246, 23, 248, 84, 26, 533, 28, 219, 30, 31,
- 35, 36, 78, 26, 36, 84, 69, 30, 31, 163,
- 26, 54, 974, 69, 270, 271, 26, 27, 794, 82,
- 83, 84, 85, 58, 87, 88, 69, 70, 26, 26,
- 252, 63, 158, 30, 31, 46, 99, 163, 70, 36,
- 84, 104, 85, 165, 161, 80, 89, 28, 36, 60,
- 26, 26, 27, 63, 86, 87, 99, 369, 906, 57,
- 70, 98, 26, 839, 26, 163, 63, 83, 30, 31,
- 98, 106, 158, 70, 165, 63, 162, 112, 163, 98,
- 77, 57, 70, 64, 616, 161, 165, 26, 63, 86,
- 87, 88, 124, 90, 150, 70, 98, 163, 150, 63,
- 36, 63, 165, 98, 149, 163, 70, 150, 70, 163,
- 173, 154, 26, 369, 617, 158, 159, 160, 161, 69,
- 163, 165, 660, 158, 26, 26, 149, 63, 91, 92,
- 93, 163, 163, 26, 70, 98, 168, 169, 88, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 63,
- 30, 31, 26, 163, 26, 26, 70, 26, 168, 169,
- 125, 126, 63, 1011, 1012, 36, 163, 36, 164, 70,
- 63, 168, 169, 208, 209, 163, 26, 70, 143, 514,
- 168, 169, 517, 518, 219, 497, 498, 466, 163, 63,
- 158, 63, 26, 168, 169, 163, 70, 163, 70, 163,
- 163, 163, 245, 163, 168, 169, 168, 169, 164, 26,
- 70, 71, 164, 63, 158, 30, 31, 252, 162, 282,
- 70, 36, 285, 83, 84, 98, 538, 163, 291, 63,
- 103, 104, 168, 169, 26, 164, 70, 70, 71, 72,
- 163, 497, 498, 306, 307, 308, 63, 365, 366, 163,
- 444, 106, 107, 70, 168, 169, 164, 112, 91, 92,
- 93, 304, 163, 163, 327, 98, 26, 168, 169, 164,
- 163, 63, 30, 31, 163, 168, 169, 158, 70, 163,
- 63, 162, 345, 346, 347, 163, 818, 70, 158, 163,
- 0, 163, 162, 825, 168, 169, 168, 169, 129, 130,
- 3, 4, 158, 63, 160, 63, 9, 158, 139, 140,
- 70, 162, 70, 163, 377, 378, 379, 20, 168, 169,
- 67, 63, 163, 63, 367, 72, 73, 370, 70, 163,
- 70, 394, 395, 396, 168, 169, 70, 71, 381, 382,
- 383, 163, 405, 923, 158, 925, 163, 163, 162, 83,
- 84, 168, 169, 98, 163, 100, 101, 102, 421, 402,
- 105, 424, 158, 426, 427, 428, 162, 430, 431, 432,
- 36, 163, 135, 136, 437, 98, 168, 169, 106, 107,
- 163, 163, 70, 71, 112, 168, 169, 98, 444, 133,
- 134, 454, 444, 449, 450, 83, 84, 133, 134, 70,
- 71, 444, 26, 163, 26, 163, 449, 450, 168, 169,
- 168, 169, 83, 84, 98, 26, 100, 101, 102, 30,
- 31, 163, 36, 163, 504, 36, 168, 169, 168, 169,
- 700, 72, 702, 496, 5, 6, 7, 8, 36, 10,
- 11, 504, 13, 14, 15, 16, 17, 18, 67, 83,
- 84, 70, 71, 72, 73, 26, 36, 28, 29, 30,
- 31, 36, 65, 34, 67, 36, 173, 70, 71, 72,
- 73, 732, 91, 92, 735, 65, 66, 67, 68, 26,
- 70, 71, 72, 73, 70, 71, 26, 26, 91, 92,
- 30, 31, 63, 126, 127, 128, 36, 83, 84, 70,
- 26, 91, 92, 26, 75, 76, 77, 67, 26, 572,
- 70, 71, 72, 73, 85, 86, 87, 121, 122, 90,
- 125, 126, 126, 127, 128, 98, 589, 590, 591, 592,
- 103, 104, 26, 26, 795, 578, 30, 31, 121, 122,
- 819, 26, 585, 586, 26, 806, 158, 808, 809, 26,
- 162, 26, 123, 124, 26, 834, 26, 620, 30, 31,
- 623, 158, 158, 158, 26, 162, 162, 162, 65, 66,
- 67, 68, 162, 70, 71, 72, 73, 158, 141, 142,
- 158, 162, 645, 646, 162, 65, 66, 28, 68, 688,
- 70, 71, 163, 164, 91, 92, 26, 168, 169, 79,
- 80, 81, 82, 666, 860, 79, 80, 81, 82, 652,
- 653, 91, 92, 93, 158, 158, 158, 26, 162, 162,
- 162, 65, 26, 67, 68, 743, 70, 71, 72, 73,
- 108, 109, 110, 111, 70, 71, 679, 0, 1, 144,
- 145, 697, 760, 170, 171, 172, 26, 91, 92, 12,
- 713, 694, 695, 36, 697, 136, 137, 121, 122, 26,
- 28, 24, 25, 26, 26, 28, 158, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 28, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 160, 163, 56, 57, 58, 59, 60, 163, 71,
- 63, 26, 163, 163, 163, 89, 163, 70, 163, 163,
- 94, 95, 163, 776, 98, 99, 163, 163, 163, 103,
- 104, 26, 26, 26, 787, 26, 164, 164, 26, 71,
- 163, 163, 163, 96, 97, 163, 163, 163, 163, 163,
- 26, 98, 36, 786, 36, 164, 158, 98, 811, 162,
- 113, 114, 115, 116, 71, 162, 174, 120, 71, 158,
- 123, 124, 158, 158, 162, 158, 158, 158, 158, 158,
- 158, 98, 26, 816, 26, 162, 26, 36, 159, 165,
- 143, 158, 158, 146, 147, 148, 829, 150, 151, 152,
- 153, 154, 155, 156, 157, 165, 126, 136, 159, 159,
- 163, 164, 26, 166, 167, 168, 169, 26, 26, 26,
- 26, 36, 26, 912, 26, 26, 26, 26, 26, 163,
- 883, 26, 26, 886, 159, 163, 163, 890, 891, 892,
- 893, 159, 35, 159, 26, 159, 26, 71, 12, 162,
- 903, 904, 905, 26, 26, 132, 158, 26, 26, 26,
- 24, 25, 26, 138, 28, 898, 30, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 26,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 22, 36, 56, 57, 58, 59, 60, 159, 159, 63,
- 26, 158, 162, 26, 26, 26, 70, 26, 26, 165,
- 165, 26, 165, 26, 26, 163, 162, 98, 165, 98,
- 165, 160, 36, 158, 977, 978, 36, 98, 162, 162,
- 158, 136, 96, 97, 160, 98, 158, 160, 135, 160,
- 160, 158, 158, 26, 162, 158, 158, 158, 36, 113,
- 114, 115, 116, 143, 36, 36, 120, 26, 26, 123,
- 124, 26, 165, 36, 36, 36, 162, 158, 92, 158,
- 162, 158, 131, 98, 162, 26, 162, 162, 162, 143,
- 163, 158, 146, 147, 148, 163, 150, 151, 152, 153,
- 154, 155, 156, 157, 98, 165, 158, 158, 158, 163,
- 164, 158, 166, 167, 168, 169, 162, 165, 163, 163,
- 163, 163, 163, 162, 162, 165, 162, 26, 162, 162,
- 162, 162, 162, 162, 162, 162, 162, 26, 163, 70,
- 161, 98, 98, 77, 98, 98, 98, 26, 158, 26,
- 36, 26, 36, 26, 91, 162, 162, 26, 26, 26,
- 26, 162, 26, 162, 26, 26, 162, 165, 165, 98,
- 165, 136, 163, 165, 26, 126, 36, 36, 36, 165,
- 173, 98, 26, 98, 26, 98, 98, 162, 131, 26,
- 160, 26, 158, 160, 158, 164, 98, 98, 158, 126,
- 98, 91, 98, 98, 26, 143, 36, 26, 158, 158,
- 26, 26, 26, 26, 162, 162, 162, 162, 162, 28,
- 162, 26, 162, 162, 26, 26, 158, 26, 158, 165,
- 165, 26, 165, 26, 162, 32, 162, 162, 162, 162,
- 162, 162, 162, 162, 162, 26, 162, 72, 26, 26,
- 26, 165, 162, 162, 71, 163, 163, 163, 162, 162,
- 84, 133, 162, 70, 36, 162, 92, 160, 162, 160,
- 98, 163, 126, 26, 162, 162, 158, 26, 163, 162,
- 160, 162, 160, 33, 160, 28, 160, 71, 137, 22,
- 160, 162, 26, 72, 26, 160, 36, 36, 972, 859,
- 163, -1, 939, 34, 137, 162, 162, 162, 296, 162,
- -1, 162, 162, 158, 162, 162, 136, 163, 158, 162,
- -1, 162, -1, -1, 163, 163, 137, 163, 160, 163,
- 315, 160, -1, 137, 137, 162, -1, 137, -1, 137,
- -1, 137, -1, -1, 162, -1, -1, -1, -1, -1,
- 162, -1, 162, -1, 162, -1, 162, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 162, -1,
- 162, 162, 162, 162, 162, 162
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
-static const unsigned char yystos[] =
-{
- 0, 1, 12, 24, 25, 26, 28, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 56, 57, 58, 59, 60, 63, 70, 96, 97, 113,
- 114, 115, 116, 120, 123, 124, 143, 146, 147, 148,
- 150, 151, 152, 153, 154, 155, 156, 157, 163, 164,
- 166, 167, 168, 169, 176, 177, 178, 179, 198, 206,
- 207, 208, 209, 210, 213, 214, 219, 220, 221, 163,
- 163, 220, 89, 94, 95, 98, 99, 103, 104, 98,
- 100, 101, 102, 105, 212, 98, 98, 98, 98, 98,
- 26, 26, 220, 220, 163, 220, 163, 220, 220, 214,
- 218, 220, 163, 218, 220, 221, 221, 163, 163, 164,
- 199, 164, 199, 164, 199, 164, 199, 163, 164, 164,
- 98, 212, 163, 163, 163, 163, 163, 163, 26, 179,
- 163, 163, 28, 64, 26, 221, 26, 83, 212, 0,
- 78, 161, 98, 103, 104, 98, 26, 36, 70, 77,
- 86, 87, 88, 90, 179, 206, 211, 220, 179, 211,
- 211, 163, 180, 98, 65, 66, 67, 68, 70, 71,
- 72, 73, 91, 92, 26, 26, 220, 26, 220, 26,
- 220, 5, 6, 7, 8, 10, 11, 13, 14, 15,
- 16, 17, 18, 26, 28, 29, 34, 36, 63, 70,
- 75, 76, 77, 85, 86, 87, 90, 123, 124, 163,
- 164, 179, 195, 200, 211, 220, 26, 26, 220, 26,
- 220, 26, 149, 179, 28, 149, 143, 166, 36, 36,
- 36, 36, 16, 19, 21, 23, 26, 28, 36, 86,
- 87, 124, 163, 179, 211, 220, 220, 26, 26, 27,
- 173, 26, 27, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 28, 26, 26, 26, 26, 26, 26, 36,
- 26, 26, 57, 28, 158, 160, 162, 70, 71, 83,
- 84, 202, 205, 26, 28, 178, 179, 26, 163, 72,
- 179, 179, 179, 179, 163, 179, 91, 92, 93, 163,
- 220, 163, 196, 135, 136, 158, 220, 221, 221, 221,
- 221, 221, 221, 221, 221, 221, 221, 160, 163, 163,
- 163, 163, 163, 163, 163, 163, 163, 65, 66, 68,
- 71, 79, 80, 81, 82, 91, 92, 93, 201, 202,
- 163, 187, 71, 187, 26, 26, 26, 26, 26, 26,
- 26, 164, 164, 26, 179, 206, 207, 208, 210, 26,
- 71, 163, 163, 180, 163, 188, 163, 106, 107, 112,
- 163, 106, 107, 112, 163, 163, 163, 26, 26, 36,
- 179, 163, 202, 98, 91, 92, 93, 98, 202, 36,
- 36, 164, 208, 210, 180, 158, 98, 162, 71, 174,
- 162, 71, 158, 158, 84, 165, 165, 165, 165, 162,
- 84, 202, 205, 84, 202, 205, 158, 158, 158, 158,
- 158, 158, 158, 162, 98, 220, 26, 57, 26, 220,
- 26, 220, 165, 165, 78, 161, 196, 26, 36, 158,
- 158, 159, 159, 179, 159, 220, 220, 220, 126, 136,
- 158, 162, 158, 162, 26, 36, 209, 220, 26, 26,
- 26, 26, 26, 36, 26, 26, 26, 26, 26, 26,
- 163, 220, 220, 220, 26, 26, 133, 134, 35, 163,
- 189, 163, 190, 159, 159, 159, 159, 26, 26, 71,
- 104, 179, 162, 84, 202, 205, 179, 26, 26, 158,
- 133, 134, 132, 26, 220, 26, 220, 26, 220, 26,
- 179, 179, 179, 26, 26, 26, 36, 138, 26, 69,
- 88, 220, 220, 220, 22, 36, 159, 159, 26, 179,
- 162, 158, 220, 26, 26, 26, 26, 26, 165, 220,
- 165, 26, 220, 165, 220, 220, 220, 26, 220, 220,
- 220, 26, 163, 98, 220, 162, 158, 162, 165, 165,
- 98, 178, 160, 179, 206, 206, 36, 36, 158, 36,
- 220, 162, 162, 136, 135, 98, 98, 180, 158, 160,
- 160, 160, 160, 158, 158, 158, 158, 158, 26, 189,
- 190, 189, 158, 163, 184, 158, 163, 185, 162, 162,
- 158, 125, 126, 143, 143, 36, 36, 36, 36, 220,
- 202, 205, 84, 202, 205, 26, 162, 26, 214, 216,
- 217, 220, 165, 158, 158, 158, 26, 162, 162, 162,
- 163, 197, 197, 197, 197, 158, 158, 162, 158, 158,
- 162, 163, 163, 163, 163, 191, 191, 163, 185, 36,
- 36, 84, 205, 162, 36, 162, 92, 162, 162, 162,
- 162, 165, 98, 165, 165, 98, 162, 162, 162, 158,
- 162, 162, 162, 131, 26, 163, 98, 26, 98, 98,
- 98, 26, 161, 220, 70, 77, 179, 158, 162, 162,
- 163, 179, 163, 26, 220, 220, 220, 220, 26, 36,
- 26, 36, 26, 91, 26, 126, 127, 128, 182, 26,
- 125, 126, 26, 162, 158, 162, 158, 162, 162, 190,
- 189, 220, 165, 26, 220, 165, 162, 165, 173, 165,
- 26, 26, 26, 98, 136, 220, 220, 163, 181, 36,
- 36, 141, 142, 179, 179, 126, 36, 191, 26, 165,
- 98, 26, 220, 98, 26, 98, 98, 26, 36, 179,
- 162, 131, 3, 4, 9, 20, 160, 164, 199, 26,
- 26, 158, 162, 179, 179, 158, 206, 160, 158, 158,
- 158, 158, 162, 162, 162, 162, 162, 220, 98, 162,
- 98, 162, 162, 98, 143, 126, 165, 187, 165, 165,
- 187, 91, 170, 171, 172, 215, 98, 162, 162, 211,
- 162, 162, 162, 121, 122, 162, 162, 162, 162, 158,
- 158, 162, 162, 165, 211, 98, 26, 36, 26, 162,
- 162, 163, 163, 26, 26, 220, 26, 26, 28, 179,
- 220, 26, 26, 26, 26, 181, 187, 163, 162, 26,
- 26, 32, 162, 162, 187, 187, 187, 220, 179, 190,
- 180, 162, 162, 190, 26, 179, 26, 72, 180, 26,
- 181, 26, 26, 160, 163, 162, 160, 162, 163, 162,
- 160, 160, 160, 160, 133, 201, 202, 71, 70, 162,
- 158, 162, 36, 92, 160, 160, 220, 108, 109, 110,
- 111, 192, 98, 220, 126, 163, 193, 220, 220, 220,
- 220, 162, 26, 26, 33, 179, 28, 71, 220, 220,
- 220, 193, 162, 199, 162, 162, 137, 162, 162, 162,
- 162, 163, 186, 185, 185, 162, 22, 158, 158, 162,
- 163, 194, 163, 203, 203, 163, 204, 121, 122, 182,
- 183, 163, 26, 26, 136, 137, 129, 130, 139, 140,
- 144, 145, 158, 162, 158, 162, 36, 160, 160, 158,
- 162, 158, 162, 158, 162, 158, 162, 158, 162, 158,
- 162, 158, 162, 158, 162, 183, 182, 162, 220, 220,
- 137, 136, 137, 137, 137, 137, 137, 137, 162, 162,
- 72, 162, 162, 162, 162, 162, 162, 162, 162, 162,
- 162, 36, 193, 193
-};
-
-#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 3:
-#line 569 "bfin-parse.y"
- {
- insn = (yyvsp[0].instr);
- if (insn == (INSTR_T) 0)
- return NO_INSN_GENERATED;
- else if (insn == (INSTR_T) - 1)
- return SEMANTIC_ERROR;
- else
- return INSN_GENERATED;
- }
- break;
-
- case 5:
-#line 583 "bfin-parse.y"
- {
- if (((yyvsp[-5].instr)->value & 0xf800) == 0xc000)
- {
- if (is_group1 ((yyvsp[-3].instr)) && is_group2 ((yyvsp[-1].instr)))
- (yyval.instr) = bfin_gen_multi_instr ((yyvsp[-5].instr), (yyvsp[-3].instr), (yyvsp[-1].instr));
- else if (is_group2 ((yyvsp[-3].instr)) && is_group1 ((yyvsp[-1].instr)))
- (yyval.instr) = bfin_gen_multi_instr ((yyvsp[-5].instr), (yyvsp[-1].instr), (yyvsp[-3].instr));
- else
- return yyerror ("Wrong 16 bit instructions groups, slot 2 and slot 3 must be 16-bit instrution group");
- }
- else if (((yyvsp[-3].instr)->value & 0xf800) == 0xc000)
- {
- if (is_group1 ((yyvsp[-5].instr)) && is_group2 ((yyvsp[-1].instr)))
- (yyval.instr) = bfin_gen_multi_instr ((yyvsp[-3].instr), (yyvsp[-5].instr), (yyvsp[-1].instr));
- else if (is_group2 ((yyvsp[-5].instr)) && is_group1 ((yyvsp[-1].instr)))
- (yyval.instr) = bfin_gen_multi_instr ((yyvsp[-3].instr), (yyvsp[-1].instr), (yyvsp[-5].instr));
- else
- return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 3 must be 16-bit instrution group");
- }
- else if (((yyvsp[-1].instr)->value & 0xf800) == 0xc000)
- {
- if (is_group1 ((yyvsp[-5].instr)) && is_group2 ((yyvsp[-3].instr)))
- (yyval.instr) = bfin_gen_multi_instr ((yyvsp[-1].instr), (yyvsp[-5].instr), (yyvsp[-3].instr));
- else if (is_group2 ((yyvsp[-5].instr)) && is_group1 ((yyvsp[-3].instr)))
- (yyval.instr) = bfin_gen_multi_instr ((yyvsp[-1].instr), (yyvsp[-3].instr), (yyvsp[-5].instr));
- else
- return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be 16-bit instrution group");
- }
- else
- error ("\nIllegal Multi Issue Construct, at least any one of the slot must be DSP32 instruction group\n");
- }
- break;
-
- case 6:
-#line 616 "bfin-parse.y"
- {
- if (((yyvsp[-3].instr)->value & 0xf800) == 0xc000)
- {
- if (is_group1 ((yyvsp[-1].instr)))
- (yyval.instr) = bfin_gen_multi_instr ((yyvsp[-3].instr), (yyvsp[-1].instr), 0);
- else if (is_group2 ((yyvsp[-1].instr)))
- (yyval.instr) = bfin_gen_multi_instr ((yyvsp[-3].instr), 0, (yyvsp[-1].instr));
- else
- return yyerror ("Wrong 16 bit instructions groups, slot 2 must be the 16-bit instruction group");
- }
- else if (((yyvsp[-1].instr)->value & 0xf800) == 0xc000)
- {
- if (is_group1 ((yyvsp[-3].instr)))
- (yyval.instr) = bfin_gen_multi_instr ((yyvsp[-1].instr), (yyvsp[-3].instr), 0);
- else if (is_group2 ((yyvsp[-3].instr)))
- (yyval.instr) = bfin_gen_multi_instr ((yyvsp[-1].instr), 0, (yyvsp[-3].instr));
- else
- return yyerror ("Wrong 16 bit instructions groups, slot 1 must be the 16-bit instruction group");
- }
- else if (is_group1 ((yyvsp[-3].instr)) && is_group2 ((yyvsp[-1].instr)))
- (yyval.instr) = bfin_gen_multi_instr (0, (yyvsp[-3].instr), (yyvsp[-1].instr));
- else if (is_group2 ((yyvsp[-3].instr)) && is_group1 ((yyvsp[-1].instr)))
- (yyval.instr) = bfin_gen_multi_instr (0, (yyvsp[-1].instr), (yyvsp[-3].instr));
- else
- return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be the 16-bit instruction group");
- }
- break;
-
- case 7:
-#line 643 "bfin-parse.y"
- {
- (yyval.instr) = 0;
- yyerror ("");
- yyerrok;
- }
- break;
-
- case 8:
-#line 654 "bfin-parse.y"
- {
- (yyval.instr) = DSP32MAC (3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0);
- }
- break;
-
- case 9:
-#line 658 "bfin-parse.y"
- {
- int op0, op1;
- int w0 = 0, w1 = 0;
- int h00, h10, h01, h11;
-
- if ((yyvsp[-1].macfunc).n == 0)
- {
- if ((yyvsp[0].mod).MM)
- return yyerror ("(m) not allowed with a0 unit");
- op1 = 3;
- op0 = (yyvsp[-1].macfunc).op;
- w1 = 0;
- w0 = (yyvsp[-1].macfunc).w;
- h00 = IS_H ((yyvsp[-1].macfunc).s0);
- h10 = IS_H ((yyvsp[-1].macfunc).s1);
- h01 = h11 = 0;
- }
- else
- {
- op1 = (yyvsp[-1].macfunc).op;
- op0 = 3;
- w1 = (yyvsp[-1].macfunc).w;
- w0 = 0;
- h00 = h10 = 0;
- h01 = IS_H ((yyvsp[-1].macfunc).s0);
- h11 = IS_H ((yyvsp[-1].macfunc).s1);
- }
- (yyval.instr) = DSP32MAC (op1, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, w1, (yyvsp[-1].macfunc).P, h01, h11, h00, h10,
- &(yyvsp[-1].macfunc).dst, op0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, w0);
- }
- break;
-
- case 10:
-#line 693 "bfin-parse.y"
- {
- Register *dst;
-
- if (check_macfuncs (&(yyvsp[-4].macfunc), &(yyvsp[-3].mod), &(yyvsp[-1].macfunc), &(yyvsp[0].mod)) < 0)
- return -1;
- notethat ("assign_macfunc (.), assign_macfunc (.)\n");
-
- if ((yyvsp[-4].macfunc).w)
- dst = &(yyvsp[-4].macfunc).dst;
- else
- dst = &(yyvsp[-1].macfunc).dst;
-
- (yyval.instr) = DSP32MAC ((yyvsp[-4].macfunc).op, (yyvsp[-3].mod).MM, (yyvsp[0].mod).mod, (yyvsp[-4].macfunc).w, (yyvsp[-4].macfunc).P,
- IS_H ((yyvsp[-4].macfunc).s0), IS_H ((yyvsp[-4].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
- dst, (yyvsp[-1].macfunc).op, &(yyvsp[-4].macfunc).s0, &(yyvsp[-4].macfunc).s1, (yyvsp[-1].macfunc).w);
- }
- break;
-
- case 11:
-#line 713 "bfin-parse.y"
- {
- notethat ("dsp32alu: DISALGNEXCPT\n");
- (yyval.instr) = DSP32ALU (18, 0, 0, 0, 0, 0, 0, 0, 3);
- }
- break;
-
- case 12:
-#line 718 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-5].reg)) && !IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
- {
- notethat ("dsp32alu: dregs = ( A0 += A1 )\n");
- (yyval.instr) = DSP32ALU (11, 0, 0, &(yyvsp[-5].reg), 0, 0, 0, 0, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 13:
-#line 728 "bfin-parse.y"
- {
- if (!IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
- {
- notethat ("dsp32alu: dregs_half = ( A0 += A1 )\n");
- (yyval.instr) = DSP32ALU (11, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), 0, 0, 0, 0, 1);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 14:
-#line 738 "bfin-parse.y"
- {
- notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n");
- (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 0);
- }
- break;
-
- case 15:
-#line 743 "bfin-parse.y"
- {
- notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n");
- (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 2);
- }
- break;
-
- case 16:
-#line 749 "bfin-parse.y"
- {
- if (!IS_DREG ((yyvsp[-15].reg)) || !IS_DREG ((yyvsp[-13].reg)))
- return yyerror ("Dregs expected");
- else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
- return yyerror ("Bad dreg pair");
- else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
- return yyerror ("Bad dreg pair");
- else
- {
- notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16P (dregs_pair , dregs_pair ) (half)\n");
- (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[-15].reg), &(yyvsp[-13].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 0);
- }
- }
- break;
-
- case 17:
-#line 765 "bfin-parse.y"
- {
- if (!IS_DREG ((yyvsp[-15].reg)) || !IS_DREG((yyvsp[-13].reg)))
- return yyerror ("Dregs expected");
- else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
- return yyerror ("Bad dreg pair");
- else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
- return yyerror ("Bad dreg pair");
- else
- {
- notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16M (dregs_pair , dregs_pair ) (aligndir)\n");
- (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[-15].reg), &(yyvsp[-13].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 1);
- }
- }
- break;
-
- case 18:
-#line 780 "bfin-parse.y"
- {
- if (!IS_DREG ((yyvsp[-9].reg)) || !IS_DREG ((yyvsp[-7].reg)))
- return yyerror ("Dregs expected");
- else if (!valid_dreg_pair (&(yyvsp[-3].reg), (yyvsp[-1].expr)))
- return yyerror ("Bad dreg pair");
- else
- {
- notethat ("dsp32alu: (dregs , dregs ) = BYTEUNPACK dregs_pair (aligndir)\n");
- (yyval.instr) = DSP32ALU (24, 0, &(yyvsp[-9].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, (yyvsp[0].r0).r0, 0, 1);
- }
- }
- break;
-
- case 19:
-#line 792 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-9].reg)) && IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)))
- {
- notethat ("dsp32alu: (dregs , dregs ) = SEARCH dregs (searchmod)\n");
- (yyval.instr) = DSP32ALU (13, 0, &(yyvsp[-9].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, 0, 0, (yyvsp[-1].r0).r0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 20:
-#line 803 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-10].reg)) && IS_DREG ((yyvsp[-4].reg)))
- {
- notethat ("dsp32alu: dregs = A1.l + A1.h, dregs = A0.l + A0.h \n");
- (yyval.instr) = DSP32ALU (12, 0, &(yyvsp[-10].reg), &(yyvsp[-4].reg), 0, 0, 0, 0, 1);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 21:
-#line 815 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-5].reg)) && !REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg))
- && IS_A1 ((yyvsp[-3].reg)) && !IS_A1 ((yyvsp[-1].reg)))
- {
- notethat ("dsp32alu: dregs = A1 + A0 , dregs = A1 - A0 (amod1)\n");
- (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), 0, 0, (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 0);
-
- }
- else if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-5].reg)) && !REG_SAME ((yyvsp[-9].reg), (yyvsp[-7].reg))
- && !IS_A1 ((yyvsp[-3].reg)) && IS_A1 ((yyvsp[-1].reg)))
- {
- notethat ("dsp32alu: dregs = A0 + A1 , dregs = A0 - A1 (amod1)\n");
- (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), 0, 0, (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 1);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 22:
-#line 834 "bfin-parse.y"
- {
- if ((yyvsp[-8].r0).r0 == (yyvsp[-2].r0).r0)
- return yyerror ("Operators must differ");
-
- if (IS_DREG ((yyvsp[-11].reg)) && IS_DREG ((yyvsp[-9].reg)) && IS_DREG ((yyvsp[-7].reg))
- && REG_SAME ((yyvsp[-9].reg), (yyvsp[-3].reg)) && REG_SAME ((yyvsp[-7].reg), (yyvsp[-1].reg)))
- {
- notethat ("dsp32alu: dregs = dregs + dregs,"
- "dregs = dregs - dregs (amod1)\n");
- (yyval.instr) = DSP32ALU (4, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &(yyvsp[-9].reg), &(yyvsp[-7].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, 2);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 23:
-#line 852 "bfin-parse.y"
- {
- if (!REG_SAME ((yyvsp[-9].reg), (yyvsp[-3].reg)) || !REG_SAME ((yyvsp[-7].reg), (yyvsp[-1].reg)))
- return yyerror ("Differing source registers");
-
- if (!IS_DREG ((yyvsp[-11].reg)) || !IS_DREG ((yyvsp[-9].reg)) || !IS_DREG ((yyvsp[-7].reg)) || !IS_DREG ((yyvsp[-5].reg)))
- return yyerror ("Dregs expected");
-
-
- if ((yyvsp[-8].r0).r0 == 1 && (yyvsp[-2].r0).r0 == 2)
- {
- notethat ("dsp32alu: dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n");
- (yyval.instr) = DSP32ALU (1, 1, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &(yyvsp[-9].reg), &(yyvsp[-7].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).r0);
- }
- else if ((yyvsp[-8].r0).r0 == 0 && (yyvsp[-2].r0).r0 == 3)
- {
- notethat ("dsp32alu: dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n");
- (yyval.instr) = DSP32ALU (1, 0, &(yyvsp[-11].reg), &(yyvsp[-5].reg), &(yyvsp[-9].reg), &(yyvsp[-7].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).r0);
- }
- else
- return yyerror ("Bar operand mismatch");
- }
- break;
-
- case 24:
-#line 875 "bfin-parse.y"
- {
- int op;
-
- if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-1].reg)))
- {
- if ((yyvsp[0].r0).r0)
- {
- notethat ("dsp32alu: dregs = ABS dregs (v)\n");
- op = 6;
- }
- else
- {
- /* Vector version of ABS. */
- notethat ("dsp32alu: dregs = ABS dregs\n");
- op = 7;
- }
- (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, 0, 0, 2);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 25:
-#line 897 "bfin-parse.y"
- {
- notethat ("dsp32alu: Ax = ABS Ax\n");
- (yyval.instr) = DSP32ALU (16, IS_A1 ((yyvsp[-2].reg)), 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[0].reg)));
- }
- break;
-
- case 26:
-#line 902 "bfin-parse.y"
- {
- if (IS_DREG_L ((yyvsp[0].reg)))
- {
- notethat ("dsp32alu: A0.l = reg_half\n");
- (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 0);
- }
- else
- return yyerror ("A0.l = Rx.l expected");
- }
- break;
-
- case 27:
-#line 912 "bfin-parse.y"
- {
- if (IS_DREG_L ((yyvsp[0].reg)))
- {
- notethat ("dsp32alu: A1.l = reg_half\n");
- (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[0].reg)), 0, 0, &(yyvsp[0].reg), 0, 0, 0, 2);
- }
- else
- return yyerror ("A1.l = Rx.l expected");
- }
- break;
-
- case 28:
-#line 923 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
- {
- notethat ("dsp32shift: dregs = ALIGN8 (dregs , dregs )\n");
- (yyval.instr) = DSP32SHIFT (13, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[-5].r0).r0, 0);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 29:
-#line 934 "bfin-parse.y"
- {
- if (!IS_DREG ((yyvsp[-12].reg)))
- return yyerror ("Dregs expected");
- else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
- return yyerror ("Bad dreg pair");
- else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
- return yyerror ("Bad dreg pair");
- else
- {
- notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n");
- (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, 0, (yyvsp[0].modcodes).r0);
- }
- }
- break;
-
- case 30:
-#line 948 "bfin-parse.y"
- {
- if (!IS_DREG ((yyvsp[-11].reg)))
- return yyerror ("Dregs expected");
- else if (!valid_dreg_pair (&(yyvsp[-7].reg), (yyvsp[-5].expr)))
- return yyerror ("Bad dreg pair");
- else if (!valid_dreg_pair (&(yyvsp[-3].reg), (yyvsp[-1].expr)))
- return yyerror ("Bad dreg pair");
- else
- {
- notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n");
- (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[-11].reg), &(yyvsp[-7].reg), &(yyvsp[-3].reg), 0, 0, 0);
- }
- }
- break;
-
- case 31:
-#line 964 "bfin-parse.y"
- {
- if (!IS_DREG ((yyvsp[-12].reg)))
- return yyerror ("Dregs expected");
- else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
- return yyerror ("Bad dreg pair");
- else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
- return yyerror ("Bad dreg pair");
- else
- {
- notethat ("dsp32alu: dregs = BYTEOP2P (dregs_pair , dregs_pair ) (rnd_op)\n");
- (yyval.instr) = DSP32ALU (22, (yyvsp[0].modcodes).r0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).aop);
- }
- }
- break;
-
- case 32:
-#line 980 "bfin-parse.y"
- {
- if (!IS_DREG ((yyvsp[-12].reg)))
- return yyerror ("Dregs expected");
- else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
- return yyerror ("Bad dreg pair");
- else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
- return yyerror ("Bad dreg pair");
- else
- {
- notethat ("dsp32alu: dregs = BYTEOP2P (dregs_pair , dregs_pair ) (rnd_op)\n");
- (yyval.instr) = DSP32ALU (22, (yyvsp[0].modcodes).r0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, 0, (yyvsp[0].modcodes).x0);
- }
- }
- break;
-
- case 33:
-#line 996 "bfin-parse.y"
- {
- if (!IS_DREG ((yyvsp[-12].reg)))
- return yyerror ("Dregs expected");
- else if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
- return yyerror ("Bad dreg pair");
- else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
- return yyerror ("Bad dreg pair");
- else
- {
- notethat ("dsp32alu: dregs = BYTEOP3P (dregs_pair , dregs_pair ) (b3_op)\n");
- (yyval.instr) = DSP32ALU (23, (yyvsp[0].modcodes).x0, 0, &(yyvsp[-12].reg), &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].modcodes).s0, 0, 0);
- }
- }
- break;
-
- case 34:
-#line 1011 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
- {
- notethat ("dsp32alu: dregs = BYTEPACK (dregs , dregs )\n");
- (yyval.instr) = DSP32ALU (24, 0, 0, &(yyvsp[-7].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), 0, 0, 0);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 35:
-#line 1023 "bfin-parse.y"
- {
- if (IS_HCOMPL ((yyvsp[-16].reg), (yyvsp[-14].reg)) && IS_HCOMPL ((yyvsp[-10].reg), (yyvsp[-3].reg)) && IS_HCOMPL ((yyvsp[-7].reg), (yyvsp[0].reg)))
- {
- notethat ("dsp32alu: dregs_hi = dregs_lo ="
- "SIGN (dregs_hi) * dregs_hi + "
- "SIGN (dregs_lo) * dregs_lo \n");
-
- (yyval.instr) = DSP32ALU (12, 0, 0, &(yyvsp[-16].reg), &(yyvsp[-10].reg), &(yyvsp[-7].reg), 0, 0, 0);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 36:
-#line 1036 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
- {
- if ((yyvsp[0].modcodes).aop == 0)
- {
- /* No saturation flag specified, generate the 16 bit variant. */
- notethat ("COMP3op: dregs = dregs +- dregs\n");
- (yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), (yyvsp[-2].r0).r0);
- }
- else
- {
- /* Saturation flag specified, generate the 32 bit variant. */
- notethat ("dsp32alu: dregs = dregs +- dregs (amod1)\n");
- (yyval.instr) = DSP32ALU (4, 0, 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[-2].r0).r0);
- }
- }
- else
- if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg)) && (yyvsp[-2].r0).r0 == 0)
- {
- notethat ("COMP3op: pregs = pregs + pregs\n");
- (yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), 5);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 37:
-#line 1062 "bfin-parse.y"
- {
- int op;
-
- if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)))
- {
- if ((yyvsp[0].r0).r0)
- op = 6;
- else
- op = 7;
-
- notethat ("dsp32alu: dregs = {MIN|MAX} (dregs, dregs)\n");
- (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[-8].reg), &(yyvsp[-4].reg), &(yyvsp[-2].reg), 0, 0, (yyvsp[-6].r0).r0);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 38:
-#line 1080 "bfin-parse.y"
- {
- notethat ("dsp32alu: Ax = - Ax\n");
- (yyval.instr) = DSP32ALU (14, IS_A1 ((yyvsp[-2].reg)), 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[0].reg)));
- }
- break;
-
- case 39:
-#line 1085 "bfin-parse.y"
- {
- notethat ("dsp32alu: dregs_lo = dregs_lo +- dregs_lo (amod1)\n");
- (yyval.instr) = DSP32ALU (2 | (yyvsp[-2].r0).r0, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg),
- (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, HL2 ((yyvsp[-3].reg), (yyvsp[-1].reg)));
- }
- break;
-
- case 40:
-#line 1091 "bfin-parse.y"
- {
- if (EXPR_VALUE ((yyvsp[0].expr)) == 0 && !REG_SAME ((yyvsp[-2].reg), (yyvsp[-1].reg)))
- {
- notethat ("dsp32alu: A1 = A0 = 0\n");
- (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 0, 0, 2);
- }
- else
- return yyerror ("Bad value, 0 expected");
- }
- break;
-
- case 41:
-#line 1103 "bfin-parse.y"
- {
- if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-3].reg)))
- {
- notethat ("dsp32alu: Ax = Ax (S)\n");
- (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 1, 0, IS_A1 ((yyvsp[-4].reg)));
- }
- else
- return yyerror ("Registers must be equal");
- }
- break;
-
- case 42:
-#line 1114 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-3].reg)))
- {
- notethat ("dsp32alu: dregs_half = dregs (RND)\n");
- (yyval.instr) = DSP32ALU (12, IS_H ((yyvsp[-5].reg)), 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 0, 0, 3);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 43:
-#line 1125 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)))
- {
- notethat ("dsp32alu: dregs_half = dregs (+-) dregs (RND12)\n");
- (yyval.instr) = DSP32ALU (5, IS_H ((yyvsp[-7].reg)), 0, &(yyvsp[-7].reg), &(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 0, (yyvsp[-4].r0).r0);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 44:
-#line 1136 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)))
- {
- notethat ("dsp32alu: dregs_half = dregs -+ dregs (RND20)\n");
- (yyval.instr) = DSP32ALU (5, IS_H ((yyvsp[-7].reg)), 0, &(yyvsp[-7].reg), &(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 1, (yyvsp[-4].r0).r0 | 2);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 45:
-#line 1147 "bfin-parse.y"
- {
- if (!REG_SAME ((yyvsp[-1].reg), (yyvsp[0].reg)))
- {
- notethat ("dsp32alu: An = Am\n");
- (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[-1].reg)), 0, 3);
- }
- else
- return yyerror ("Accu reg arguments must differ");
- }
- break;
-
- case 46:
-#line 1158 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("dsp32alu: An = dregs\n");
- (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[0].reg), 0, 1, 0, IS_A1 ((yyvsp[-1].reg)) << 1);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 47:
-#line 1169 "bfin-parse.y"
- {
- if (!IS_H ((yyvsp[-1].reg)))
- {
- if ((yyvsp[-3].reg).regno == REG_A0x && IS_DREG ((yyvsp[-1].reg)))
- {
- notethat ("dsp32alu: A0.x = dregs_lo\n");
- (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[-1].reg), 0, 0, 0, 1);
- }
- else if ((yyvsp[-3].reg).regno == REG_A1x && IS_DREG ((yyvsp[-1].reg)))
- {
- notethat ("dsp32alu: A1.x = dregs_lo\n");
- (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[-1].reg), 0, 0, 0, 3);
- }
- else if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
- {
- notethat ("ALU2op: dregs = dregs_lo\n");
- (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 10 | ((yyvsp[0].r0).r0 ? 0: 1));
- }
- else
- return yyerror ("Register mismatch");
- }
- else
- return yyerror ("Low reg expected");
- }
- break;
-
- case 48:
-#line 1195 "bfin-parse.y"
- {
- notethat ("LDIMMhalf: pregs_half = imm16\n");
-
- if (!IS_DREG ((yyvsp[-2].reg)) && !IS_PREG ((yyvsp[-2].reg)) && !IS_IREG ((yyvsp[-2].reg))
- && !IS_MREG ((yyvsp[-2].reg)) && !IS_BREG ((yyvsp[-2].reg)) && !IS_LREG ((yyvsp[-2].reg)))
- return yyerror ("Wrong register for load immediate");
-
- if (!IS_IMM ((yyvsp[0].expr), 16) && !IS_UIMM ((yyvsp[0].expr), 16))
- return yyerror ("Constant out of range");
-
- (yyval.instr) = LDIMMHALF_R (&(yyvsp[-2].reg), IS_H ((yyvsp[-2].reg)), 0, 0, (yyvsp[0].expr));
- }
- break;
-
- case 49:
-#line 1209 "bfin-parse.y"
- {
- notethat ("dsp32alu: An = 0\n");
-
- if (imm7 ((yyvsp[0].expr)) != 0)
- return yyerror ("0 expected");
-
- (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[-1].reg)));
- }
- break;
-
- case 50:
-#line 1219 "bfin-parse.y"
- {
- if (!IS_DREG ((yyvsp[-3].reg)) && !IS_PREG ((yyvsp[-3].reg)) && !IS_IREG ((yyvsp[-3].reg))
- && !IS_MREG ((yyvsp[-3].reg)) && !IS_BREG ((yyvsp[-3].reg)) && !IS_LREG ((yyvsp[-3].reg)))
- return yyerror ("Wrong register for load immediate");
-
- if ((yyvsp[0].r0).r0 == 0)
- {
- /* 7 bit immediate value if possible.
- We will check for that constant value for efficiency
- If it goes to reloc, it will be 16 bit. */
- if (IS_CONST ((yyvsp[-1].expr)) && IS_IMM ((yyvsp[-1].expr), 7) && IS_DREG ((yyvsp[-3].reg)))
- {
- notethat ("COMPI2opD: dregs = imm7 (x) \n");
- (yyval.instr) = COMPI2OPD (&(yyvsp[-3].reg), imm7 ((yyvsp[-1].expr)), 0);
- }
- else if (IS_CONST ((yyvsp[-1].expr)) && IS_IMM ((yyvsp[-1].expr), 7) && IS_PREG ((yyvsp[-3].reg)))
- {
- notethat ("COMPI2opP: pregs = imm7 (x)\n");
- (yyval.instr) = COMPI2OPP (&(yyvsp[-3].reg), imm7 ((yyvsp[-1].expr)), 0);
- }
- else
- {
- if (IS_CONST ((yyvsp[-1].expr)) && !IS_IMM ((yyvsp[-1].expr), 16))
- return yyerror ("Immediate value out of range");
-
- notethat ("LDIMMhalf: regs = luimm16 (x)\n");
- /* reg, H, S, Z. */
- (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[-3].reg), 0, 1, 0, (yyvsp[-1].expr));
- }
- }
- else
- {
- /* (z) There is no 7 bit zero extended instruction.
- If the expr is a relocation, generate it. */
-
- if (IS_CONST ((yyvsp[-1].expr)) && !IS_UIMM ((yyvsp[-1].expr), 16))
- return yyerror ("Immediate value out of range");
-
- notethat ("LDIMMhalf: regs = luimm16 (x)\n");
- /* reg, H, S, Z. */
- (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[-3].reg), 0, 0, 1, (yyvsp[-1].expr));
- }
- }
- break;
-
- case 51:
-#line 1264 "bfin-parse.y"
- {
- if (IS_H ((yyvsp[-2].reg)))
- return yyerror ("Low reg expected");
-
- if (IS_DREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_A0x)
- {
- notethat ("dsp32alu: dregs_lo = A0.x\n");
- (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[-2].reg), 0, 0, 0, 0, 0);
- }
- else if (IS_DREG ((yyvsp[-2].reg)) && (yyvsp[0].reg).regno == REG_A1x)
- {
- notethat ("dsp32alu: dregs_lo = A1.x\n");
- (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[-2].reg), 0, 0, 0, 0, 1);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 52:
-#line 1283 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
- {
- notethat ("dsp32alu: dregs = dregs .|. dregs (amod0)\n");
- (yyval.instr) = DSP32ALU (0, 0, 0, &(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-1].reg), (yyvsp[0].modcodes).s0, (yyvsp[0].modcodes).x0, (yyvsp[-2].r0).r0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 53:
-#line 1294 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
- {
- notethat ("ALU2op: dregs = dregs_byte\n");
- (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 12 | ((yyvsp[0].r0).r0 ? 0: 1));
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 54:
-#line 1305 "bfin-parse.y"
- {
- if (REG_SAME ((yyvsp[-6].reg), (yyvsp[-4].reg)) && REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)) && !REG_SAME ((yyvsp[-6].reg), (yyvsp[-2].reg)))
- {
- notethat ("dsp32alu: A1 = ABS A1 , A0 = ABS A0\n");
- (yyval.instr) = DSP32ALU (16, 0, 0, 0, 0, 0, 0, 0, 3);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 55:
-#line 1316 "bfin-parse.y"
- {
- if (REG_SAME ((yyvsp[-6].reg), (yyvsp[-4].reg)) && REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)) && !REG_SAME ((yyvsp[-6].reg), (yyvsp[-2].reg)))
- {
- notethat ("dsp32alu: A1 = - A1 , A0 = - A0\n");
- (yyval.instr) = DSP32ALU (14, 0, 0, 0, 0, 0, 0, 0, 3);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 56:
-#line 1327 "bfin-parse.y"
- {
- if (!IS_A1 ((yyvsp[-2].reg)) && IS_A1 ((yyvsp[-1].reg)))
- {
- notethat ("dsp32alu: A0 -= A1\n");
- (yyval.instr) = DSP32ALU (11, 0, 0, 0, 0, 0, (yyvsp[0].r0).r0, 0, 3);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 57:
-#line 1338 "bfin-parse.y"
- {
- if (IS_IREG ((yyvsp[-2].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 4)
- {
- notethat ("dagMODik: iregs -= 4\n");
- (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 3);
- }
- else if (IS_IREG ((yyvsp[-2].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 2)
- {
- notethat ("dagMODik: iregs -= 2\n");
- (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 1);
- }
- else
- return yyerror ("Register or value mismatch");
- }
- break;
-
- case 58:
-#line 1354 "bfin-parse.y"
- {
- if (IS_IREG ((yyvsp[-5].reg)) && IS_MREG ((yyvsp[-3].reg)))
- {
- notethat ("dagMODim: iregs += mregs (opt_brev)\n");
- /* i, m, op, br. */
- (yyval.instr) = DAGMODIM (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 0, 1);
- }
- else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
- {
- notethat ("PTR2op: pregs += pregs (BREV )\n");
- (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 5);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 59:
-#line 1371 "bfin-parse.y"
- {
- if (IS_IREG ((yyvsp[-2].reg)) && IS_MREG ((yyvsp[0].reg)))
- {
- notethat ("dagMODim: iregs -= mregs\n");
- (yyval.instr) = DAGMODIM (&(yyvsp[-2].reg), &(yyvsp[0].reg), 1, 0);
- }
- else if (IS_PREG ((yyvsp[-2].reg)) && IS_PREG ((yyvsp[0].reg)))
- {
- notethat ("PTR2op: pregs -= pregs\n");
- (yyval.instr) = PTR2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 60:
-#line 1387 "bfin-parse.y"
- {
- if (!IS_A1 ((yyvsp[-3].reg)) && IS_A1 ((yyvsp[-1].reg)))
- {
- notethat ("dsp32alu: A0 += A1 (W32)\n");
- (yyval.instr) = DSP32ALU (11, 0, 0, 0, 0, 0, (yyvsp[0].r0).r0, 0, 2);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 61:
-#line 1398 "bfin-parse.y"
- {
- if (IS_IREG ((yyvsp[-2].reg)) && IS_MREG ((yyvsp[0].reg)))
- {
- notethat ("dagMODim: iregs += mregs\n");
- (yyval.instr) = DAGMODIM (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0, 0);
- }
- else
- return yyerror ("iregs += mregs expected");
- }
- break;
-
- case 62:
-#line 1409 "bfin-parse.y"
- {
- if (IS_IREG ((yyvsp[-2].reg)))
- {
- if (EXPR_VALUE ((yyvsp[0].expr)) == 4)
- {
- notethat ("dagMODik: iregs += 4\n");
- (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 2);
- }
- else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
- {
- notethat ("dagMODik: iregs += 2\n");
- (yyval.instr) = DAGMODIK (&(yyvsp[-2].reg), 0);
- }
- else
- return yyerror ("iregs += [ 2 | 4 ");
- }
- else if (IS_PREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 7))
- {
- notethat ("COMPI2opP: pregs += imm7\n");
- (yyval.instr) = COMPI2OPP (&(yyvsp[-2].reg), imm7 ((yyvsp[0].expr)), 1);
- }
- else if (IS_DREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 7))
- {
- notethat ("COMPI2opD: dregs += imm7\n");
- (yyval.instr) = COMPI2OPD (&(yyvsp[-2].reg), imm7 ((yyvsp[0].expr)), 1);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 63:
-#line 1440 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("ALU2op: dregs *= dregs\n");
- (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 3);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 64:
-#line 1451 "bfin-parse.y"
- {
- if (!valid_dreg_pair (&(yyvsp[-8].reg), (yyvsp[-6].expr)))
- return yyerror ("Bad dreg pair");
- else if (!valid_dreg_pair (&(yyvsp[-4].reg), (yyvsp[-2].expr)))
- return yyerror ("Bad dreg pair");
- else
- {
- notethat ("dsp32alu: SAA (dregs_pair , dregs_pair ) (aligndir)\n");
- (yyval.instr) = DSP32ALU (18, 0, 0, 0, &(yyvsp[-8].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0, 0);
- }
- }
- break;
-
- case 65:
-#line 1464 "bfin-parse.y"
- {
- if (REG_SAME ((yyvsp[-10].reg), (yyvsp[-9].reg)) && REG_SAME ((yyvsp[-4].reg), (yyvsp[-3].reg)) && !REG_SAME ((yyvsp[-10].reg), (yyvsp[-4].reg)))
- {
- notethat ("dsp32alu: A1 = A1 (S) , A0 = A0 (S)\n");
- (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 1, 0, 2);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 66:
-#line 1475 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg))
- && REG_SAME ((yyvsp[-8].reg), (yyvsp[-5].reg)))
- {
- if (EXPR_VALUE ((yyvsp[0].expr)) == 1)
- {
- notethat ("ALU2op: dregs = (dregs + dregs) << 1\n");
- (yyval.instr) = ALU2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 4);
- }
- else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
- {
- notethat ("ALU2op: dregs = (dregs + dregs) << 2\n");
- (yyval.instr) = ALU2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 5);
- }
- else
- return yyerror ("Bad shift value");
- }
- else if (IS_PREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg))
- && REG_SAME ((yyvsp[-8].reg), (yyvsp[-5].reg)))
- {
- if (EXPR_VALUE ((yyvsp[0].expr)) == 1)
- {
- notethat ("PTR2op: pregs = (pregs + pregs) << 1\n");
- (yyval.instr) = PTR2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 6);
- }
- else if (EXPR_VALUE ((yyvsp[0].expr)) == 2)
- {
- notethat ("PTR2op: pregs = (pregs + pregs) << 2\n");
- (yyval.instr) = PTR2OP (&(yyvsp[-8].reg), &(yyvsp[-3].reg), 7);
- }
- else
- return yyerror ("Bad shift value");
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 67:
-#line 1514 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("COMP3op: dregs = dregs | dregs\n");
- (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 3);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 68:
-#line 1524 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("COMP3op: dregs = dregs ^ dregs\n");
- (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 4);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 69:
-#line 1534 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-6].reg)) && IS_PREG ((yyvsp[-3].reg)))
- {
- if (EXPR_VALUE ((yyvsp[-1].expr)) == 1)
- {
- notethat ("COMP3op: pregs = pregs + (pregs << 1)\n");
- (yyval.instr) = COMP3OP (&(yyvsp[-8].reg), &(yyvsp[-6].reg), &(yyvsp[-3].reg), 6);
- }
- else if (EXPR_VALUE ((yyvsp[-1].expr)) == 2)
- {
- notethat ("COMP3op: pregs = pregs + (pregs << 2)\n");
- (yyval.instr) = COMP3OP (&(yyvsp[-8].reg), &(yyvsp[-6].reg), &(yyvsp[-3].reg), 7);
- }
- else
- return yyerror ("Bad shift value");
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 70:
-#line 1554 "bfin-parse.y"
- {
- if (!REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)))
- {
- notethat ("CCflag: CC = A0 == A1\n");
- (yyval.instr) = CCFLAG (0, 0, 5, 0, 0);
- }
- else
- return yyerror ("CC register expected");
- }
- break;
-
- case 71:
-#line 1564 "bfin-parse.y"
- {
- if (!REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)))
- {
- notethat ("CCflag: CC = A0 < A1\n");
- (yyval.instr) = CCFLAG (0, 0, 6, 0, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 72:
-#line 1574 "bfin-parse.y"
- {
- if (REG_CLASS((yyvsp[-3].reg)) == REG_CLASS((yyvsp[-1].reg)))
- {
- notethat ("CCflag: CC = dpregs < dpregs\n");
- (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK, (yyvsp[0].r0).r0, 0, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
- }
- else
- return yyerror ("Compare only of same register class");
- }
- break;
-
- case 73:
-#line 1584 "bfin-parse.y"
- {
- if (((yyvsp[0].r0).r0 == 1 && IS_IMM ((yyvsp[-1].expr), 3))
- || ((yyvsp[0].r0).r0 == 3 && IS_UIMM ((yyvsp[-1].expr), 3)))
- {
- notethat ("CCflag: CC = dpregs < (u)imm3\n");
- (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), imm3 ((yyvsp[-1].expr)), (yyvsp[0].r0).r0, 1, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
- }
- else
- return yyerror ("Bad constant value");
- }
- break;
-
- case 74:
-#line 1595 "bfin-parse.y"
- {
- if (REG_CLASS((yyvsp[-2].reg)) == REG_CLASS((yyvsp[0].reg)))
- {
- notethat ("CCflag: CC = dpregs == dpregs\n");
- (yyval.instr) = CCFLAG (&(yyvsp[-2].reg), (yyvsp[0].reg).regno & CODE_MASK, 0, 0, IS_PREG ((yyvsp[-2].reg)) ? 1 : 0);
- }
- }
- break;
-
- case 75:
-#line 1603 "bfin-parse.y"
- {
- if (IS_IMM ((yyvsp[0].expr), 3))
- {
- notethat ("CCflag: CC = dpregs == imm3\n");
- (yyval.instr) = CCFLAG (&(yyvsp[-2].reg), imm3 ((yyvsp[0].expr)), 0, 1, IS_PREG ((yyvsp[-2].reg)) ? 1 : 0);
- }
- else
- return yyerror ("Bad constant range");
- }
- break;
-
- case 76:
-#line 1613 "bfin-parse.y"
- {
- if (!REG_SAME ((yyvsp[-2].reg), (yyvsp[0].reg)))
- {
- notethat ("CCflag: CC = A0 <= A1\n");
- (yyval.instr) = CCFLAG (0, 0, 7, 0, 0);
- }
- else
- return yyerror ("CC register expected");
- }
- break;
-
- case 77:
-#line 1623 "bfin-parse.y"
- {
- if (REG_CLASS((yyvsp[-3].reg)) == REG_CLASS((yyvsp[-1].reg)))
- {
- notethat ("CCflag: CC = pregs <= pregs (..)\n");
- (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK,
- 1 + (yyvsp[0].r0).r0, 0, IS_PREG ((yyvsp[-3].reg)) ? 1 : 0);
- }
- else
- return yyerror ("Compare only of same register class");
- }
- break;
-
- case 78:
-#line 1634 "bfin-parse.y"
- {
- if (((yyvsp[0].r0).r0 == 1 && IS_IMM ((yyvsp[-1].expr), 3))
- || ((yyvsp[0].r0).r0 == 3 && IS_UIMM ((yyvsp[-1].expr), 3)))
- {
- if (IS_DREG ((yyvsp[-3].reg)))
- {
- notethat ("CCflag: CC = dregs <= (u)imm3\n");
- /* x y opc I G */
- (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), imm3 ((yyvsp[-1].expr)), 1 + (yyvsp[0].r0).r0, 1, 0);
- }
- else if (IS_PREG ((yyvsp[-3].reg)))
- {
- notethat ("CCflag: CC = pregs <= (u)imm3\n");
- /* x y opc I G */
- (yyval.instr) = CCFLAG (&(yyvsp[-3].reg), imm3 ((yyvsp[-1].expr)), 1 + (yyvsp[0].r0).r0, 1, 1);
- }
- else
- return yyerror ("Dreg or Preg expected");
- }
- else
- return yyerror ("Bad constant value");
- }
- break;
-
- case 79:
-#line 1658 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("COMP3op: dregs = dregs & dregs\n");
- (yyval.instr) = COMP3OP (&(yyvsp[-4].reg), &(yyvsp[-2].reg), &(yyvsp[0].reg), 2);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 80:
-#line 1669 "bfin-parse.y"
- {
- notethat ("CC2stat operation\n");
- (yyval.instr) = bfin_gen_cc2stat ((yyvsp[0].modcodes).r0, (yyvsp[0].modcodes).x0, (yyvsp[0].modcodes).s0);
- }
- break;
-
- case 81:
-#line 1675 "bfin-parse.y"
- {
- if (IS_ALLREG ((yyvsp[-2].reg)) && IS_ALLREG ((yyvsp[0].reg)))
- {
- notethat ("REGMV: allregs = allregs\n");
- (yyval.instr) = bfin_gen_regmv (&(yyvsp[0].reg), &(yyvsp[-2].reg));
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 82:
-#line 1686 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("CC2dreg: CC = dregs\n");
- (yyval.instr) = bfin_gen_cc2dreg (1, &(yyvsp[0].reg));
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 83:
-#line 1697 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-2].reg)))
- {
- notethat ("CC2dreg: dregs = CC\n");
- (yyval.instr) = bfin_gen_cc2dreg (0, &(yyvsp[-2].reg));
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 84:
-#line 1708 "bfin-parse.y"
- {
- notethat ("CC2dreg: CC =! CC\n");
- (yyval.instr) = bfin_gen_cc2dreg (3, 0);
- }
- break;
-
- case 85:
-#line 1716 "bfin-parse.y"
- {
- notethat ("dsp32mult: dregs_half = multiply_halfregs (opt_mode)\n");
-
- if (!IS_H ((yyvsp[-3].reg)) && (yyvsp[0].mod).MM)
- return yyerror ("(M) not allowed with MAC0");
-
- if (IS_H ((yyvsp[-3].reg)))
- {
- (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 0,
- IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), 0, 0,
- &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 0);
- }
- else
- {
- (yyval.instr) = DSP32MULT (0, 0, (yyvsp[0].mod).mod, 0, 0,
- 0, 0, IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
- &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 1);
- }
- }
- break;
-
- case 86:
-#line 1737 "bfin-parse.y"
- {
- /* Odd registers can use (M). */
- if (!IS_DREG ((yyvsp[-3].reg)))
- return yyerror ("Dreg expected");
-
- if (!IS_EVEN ((yyvsp[-3].reg)))
- {
- notethat ("dsp32mult: dregs = multiply_halfregs (opt_mode)\n");
-
- (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 1,
- IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), 0, 0,
- &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 0);
- }
- else if ((yyvsp[0].mod).MM == 0)
- {
- notethat ("dsp32mult: dregs = multiply_halfregs opt_mode\n");
- (yyval.instr) = DSP32MULT (0, 0, (yyvsp[0].mod).mod, 0, 1,
- 0, 0, IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
- &(yyvsp[-3].reg), 0, &(yyvsp[-1].macfunc).s0, &(yyvsp[-1].macfunc).s1, 1);
- }
- else
- return yyerror ("Register or mode mismatch");
- }
- break;
-
- case 87:
-#line 1763 "bfin-parse.y"
- {
- if (!IS_DREG ((yyvsp[-8].reg)) || !IS_DREG ((yyvsp[-3].reg)))
- return yyerror ("Dregs expected");
-
- if (check_multiply_halfregs (&(yyvsp[-6].macfunc), &(yyvsp[-1].macfunc)) < 0)
- return -1;
-
- if (IS_H ((yyvsp[-8].reg)) && !IS_H ((yyvsp[-3].reg)))
- {
- notethat ("dsp32mult: dregs_hi = multiply_halfregs mxd_mod, "
- "dregs_lo = multiply_halfregs opt_mode\n");
- (yyval.instr) = DSP32MULT (0, (yyvsp[-5].mod).MM, (yyvsp[0].mod).mod, 1, 0,
- IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
- &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
- }
- else if (!IS_H ((yyvsp[-8].reg)) && IS_H ((yyvsp[-3].reg)) && (yyvsp[-5].mod).MM == 0)
- {
- (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 0,
- IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1),
- &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
- }
- else
- return yyerror ("Multfunc Register or mode mismatch");
- }
- break;
-
- case 88:
-#line 1789 "bfin-parse.y"
- {
- if (!IS_DREG ((yyvsp[-8].reg)) || !IS_DREG ((yyvsp[-3].reg)))
- return yyerror ("Dregs expected");
-
- if (check_multiply_halfregs (&(yyvsp[-6].macfunc), &(yyvsp[-1].macfunc)) < 0)
- return -1;
-
- notethat ("dsp32mult: dregs = multiply_halfregs mxd_mod, "
- "dregs = multiply_halfregs opt_mode\n");
- if (IS_EVEN ((yyvsp[-8].reg)))
- {
- if ((yyvsp[-3].reg).regno - (yyvsp[-8].reg).regno != 1 || (yyvsp[-5].mod).MM != 0)
- return yyerror ("Dest registers or mode mismatch");
-
- /* op1 MM mmod */
- (yyval.instr) = DSP32MULT (0, 0, (yyvsp[0].mod).mod, 1, 1,
- IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1), IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1),
- &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
-
- }
- else
- {
- if ((yyvsp[-8].reg).regno - (yyvsp[-3].reg).regno != 1)
- return yyerror ("Dest registers mismatch");
-
- (yyval.instr) = DSP32MULT (0, (yyvsp[0].mod).MM, (yyvsp[0].mod).mod, 1, 1,
- IS_H ((yyvsp[-6].macfunc).s0), IS_H ((yyvsp[-6].macfunc).s1), IS_H ((yyvsp[-1].macfunc).s0), IS_H ((yyvsp[-1].macfunc).s1),
- &(yyvsp[-8].reg), 0, &(yyvsp[-6].macfunc).s0, &(yyvsp[-6].macfunc).s1, 1);
- }
- }
- break;
-
- case 89:
-#line 1823 "bfin-parse.y"
- {
- if (!REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)))
- return yyerror ("Aregs must be same");
-
- if (IS_DREG ((yyvsp[0].reg)) && !IS_H ((yyvsp[0].reg)))
- {
- notethat ("dsp32shift: A0 = ASHIFT A0 BY dregs_lo\n");
- (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 0, IS_A1 ((yyvsp[-4].reg)));
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 90:
-#line 1837 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-1].reg)))
- {
- notethat ("dsp32shift: dregs_half = ASHIFT dregs_half BY dregs_lo\n");
- (yyval.instr) = DSP32SHIFT (0, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-6].reg), (yyvsp[-3].reg)));
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 91:
-#line 1848 "bfin-parse.y"
- {
- if (!REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)))
- return yyerror ("Aregs must be same");
-
- if (IS_UIMM ((yyvsp[0].expr), 5))
- {
- notethat ("dsp32shiftimm: A0 = A0 << uimm5\n");
- (yyval.instr) = DSP32SHIFTIMM (3, 0, imm5 ((yyvsp[0].expr)), 0, 0, IS_A1 ((yyvsp[-3].reg)));
- }
- else
- return yyerror ("Bad shift value");
- }
- break;
-
- case 92:
-#line 1862 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
- {
- if ((yyvsp[0].modcodes).r0)
- {
- /* Vector? */
- notethat ("dsp32shiftimm: dregs = dregs << expr (V, .)\n");
- (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), imm4 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0 ? 1 : 2, 0);
- }
- else
- {
- notethat ("dsp32shiftimm: dregs = dregs << uimm5 (.)\n");
- (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), imm6 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0 ? 1 : 2, 0);
- }
- }
- else if ((yyvsp[0].modcodes).s0 == 0 && IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
- {
- if (EXPR_VALUE ((yyvsp[-1].expr)) == 2)
- {
- notethat ("PTR2op: pregs = pregs << 2\n");
- (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 1);
- }
- else if (EXPR_VALUE ((yyvsp[-1].expr)) == 1)
- {
- notethat ("COMP3op: pregs = pregs << 1\n");
- (yyval.instr) = COMP3OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), &(yyvsp[-3].reg), 5);
- }
- else
- return yyerror ("Bad shift value");
- }
- else
- return yyerror ("Bad shift value or register");
- }
- break;
-
- case 93:
-#line 1896 "bfin-parse.y"
- {
- if (IS_UIMM ((yyvsp[0].expr), 4))
- {
- notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n");
- (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[-4].reg), imm5 ((yyvsp[0].expr)), &(yyvsp[-2].reg), 2, HL2 ((yyvsp[-4].reg), (yyvsp[-2].reg)));
- }
- else
- return yyerror ("Bad shift value");
- }
- break;
-
- case 94:
-#line 1906 "bfin-parse.y"
- {
- if (IS_UIMM ((yyvsp[-1].expr), 4))
- {
- notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n");
- (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[-5].reg), imm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-5].reg), (yyvsp[-3].reg)));
- }
- else
- return yyerror ("Bad shift value");
- }
- break;
-
- case 95:
-#line 1916 "bfin-parse.y"
- {
- int op;
-
- if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-1].reg)))
- {
- if ((yyvsp[0].modcodes).r0)
- {
- op = 1;
- notethat ("dsp32shift: dregs = ASHIFT dregs BY "
- "dregs_lo (V, .)\n");
- }
- else
- {
-
- op = 2;
- notethat ("dsp32shift: dregs = ASHIFT dregs BY dregs_lo (.)\n");
- }
- (yyval.instr) = DSP32SHIFT (op, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 96:
-#line 1941 "bfin-parse.y"
- {
- if (IS_DREG_L ((yyvsp[-8].reg)) && IS_DREG_L ((yyvsp[-4].reg)) && IS_DREG_L ((yyvsp[-2].reg)))
- {
- notethat ("dsp32shift: dregs_lo = EXPADJ (dregs , dregs_lo )\n");
- (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
- }
- else
- return yyerror ("Bad shift value or register");
- }
- break;
-
- case 97:
-#line 1953 "bfin-parse.y"
- {
- if (IS_DREG_L ((yyvsp[-7].reg)) && IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
- {
- notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_lo, dregs_lo)\n");
- (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
- }
- else if (IS_DREG_L ((yyvsp[-7].reg)) && IS_DREG_H ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
- {
- notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_hi, dregs_lo)\n");
- (yyval.instr) = DSP32SHIFT (7, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 3, 0);
- }
- else
- return yyerror ("Bad shift value or register");
- }
- break;
-
- case 98:
-#line 1971 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
- {
- notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs )\n");
- (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 99:
-#line 1982 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-10].reg)) && IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-4].reg)))
- {
- notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs ) (X)\n");
- (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-10].reg), &(yyvsp[-4].reg), &(yyvsp[-6].reg), 3, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 100:
-#line 1993 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG_L ((yyvsp[-2].reg)))
- {
- notethat ("dsp32shift: dregs = EXTRACT (dregs, dregs_lo ) (.)\n");
- (yyval.instr) = DSP32SHIFT (10, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 101:
-#line 2004 "bfin-parse.y"
- {
- if (!REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)))
- return yyerror ("Aregs must be same");
-
- if (IS_UIMM ((yyvsp[0].expr), 5))
- {
- notethat ("dsp32shiftimm: Ax = Ax >>> uimm5\n");
- (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[0].expr)), 0, 0, IS_A1 ((yyvsp[-3].reg)));
- }
- else
- return yyerror ("Shift value range error");
- }
- break;
-
- case 102:
-#line 2017 "bfin-parse.y"
- {
- if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
- {
- notethat ("dsp32shift: Ax = LSHIFT Ax BY dregs_lo\n");
- (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 1, IS_A1 ((yyvsp[-4].reg)));
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 103:
-#line 2028 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
- {
- notethat ("dsp32shift: dregs_lo = LSHIFT dregs_hi BY dregs_lo\n");
- (yyval.instr) = DSP32SHIFT (0, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 2, HL2 ((yyvsp[-5].reg), (yyvsp[-2].reg)));
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 104:
-#line 2039 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG_L ((yyvsp[-1].reg)))
- {
- notethat ("dsp32shift: dregs = LSHIFT dregs BY dregs_lo (V )\n");
- (yyval.instr) = DSP32SHIFT ((yyvsp[0].r0).r0 ? 1: 2, &(yyvsp[-6].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), 2, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 105:
-#line 2050 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
- {
- notethat ("dsp32shift: dregs = SHIFT dregs BY dregs_lo\n");
- (yyval.instr) = DSP32SHIFT (2, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 2, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 106:
-#line 2061 "bfin-parse.y"
- {
- if (REG_SAME ((yyvsp[-3].reg), (yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 6) >= 0)
- {
- notethat ("dsp32shiftimm: Ax = Ax >> imm6\n");
- (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[0].expr)), 0, 1, IS_A1 ((yyvsp[-3].reg)));
- }
- else
- return yyerror ("Accu register expected");
- }
- break;
-
- case 107:
-#line 2072 "bfin-parse.y"
- {
- if ((yyvsp[0].r0).r0 == 1)
- {
- if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
- {
- notethat ("dsp32shiftimm: dregs = dregs >> uimm5 (V)\n");
- (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), 2, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- else
- {
- if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
- {
- notethat ("dsp32shiftimm: dregs = dregs >> uimm5\n");
- (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), -imm6 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), 2, 0);
- }
- else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && EXPR_VALUE ((yyvsp[-1].expr)) == 2)
- {
- notethat ("PTR2op: pregs = pregs >> 2\n");
- (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 3);
- }
- else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)) && EXPR_VALUE ((yyvsp[-1].expr)) == 1)
- {
- notethat ("PTR2op: pregs = pregs >> 1\n");
- (yyval.instr) = PTR2OP (&(yyvsp[-5].reg), &(yyvsp[-3].reg), 4);
- }
- else
- return yyerror ("Register mismatch");
- }
- }
- break;
-
- case 108:
-#line 2105 "bfin-parse.y"
- {
- if (IS_UIMM ((yyvsp[0].expr), 5))
- {
- notethat ("dsp32shiftimm: dregs_half = dregs_half >> uimm5\n");
- (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[-4].reg), -uimm5 ((yyvsp[0].expr)), &(yyvsp[-2].reg), 2, HL2 ((yyvsp[-4].reg), (yyvsp[-2].reg)));
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 109:
-#line 2115 "bfin-parse.y"
- {
- if (IS_UIMM ((yyvsp[-1].expr), 5))
- {
- notethat ("dsp32shiftimm: dregs_half = dregs_half >>> uimm5\n");
- (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg),
- (yyvsp[0].modcodes).s0, HL2 ((yyvsp[-5].reg), (yyvsp[-3].reg)));
- }
- else
- return yyerror ("Register or modifier mismatch");
- }
- break;
-
- case 110:
-#line 2128 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
- {
- if ((yyvsp[0].modcodes).r0)
- {
- /* Vector? */
- notethat ("dsp32shiftimm: dregs = dregs >>> uimm5 (V, .)\n");
- (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
- }
- else
- {
- notethat ("dsp32shiftimm: dregs = dregs >>> uimm5 (.)\n");
- (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), -uimm5 ((yyvsp[-1].expr)), &(yyvsp[-3].reg), (yyvsp[0].modcodes).s0, 0);
- }
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 111:
-#line 2148 "bfin-parse.y"
- {
- if (IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("dsp32shift: dregs_lo = ONES dregs\n");
- (yyval.instr) = DSP32SHIFT (6, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 3, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 112:
-#line 2159 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-7].reg)) && IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
- {
- notethat ("dsp32shift: dregs = PACK (dregs_hi , dregs_hi )\n");
- (yyval.instr) = DSP32SHIFT (4, &(yyvsp[-7].reg), &(yyvsp[-1].reg), &(yyvsp[-3].reg), HL2 ((yyvsp[-3].reg), (yyvsp[-1].reg)), 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 113:
-#line 2170 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-9].reg))
- && (yyvsp[-3].reg).regno == REG_A0
- && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-9].reg)) && !IS_A1 ((yyvsp[-3].reg)))
- {
- notethat ("dsp32shift: dregs_lo = CC = BXORSHIFT (A0 , dregs )\n");
- (yyval.instr) = DSP32SHIFT (11, &(yyvsp[-9].reg), &(yyvsp[-1].reg), 0, 0, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 114:
-#line 2183 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-9].reg))
- && (yyvsp[-3].reg).regno == REG_A0
- && IS_DREG ((yyvsp[-1].reg)) && !IS_H ((yyvsp[-9].reg)) && !IS_A1 ((yyvsp[-3].reg)))
- {
- notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , dregs)\n");
- (yyval.instr) = DSP32SHIFT (11, &(yyvsp[-9].reg), &(yyvsp[-1].reg), 0, 1, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 115:
-#line 2196 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-11].reg)) && !IS_H ((yyvsp[-11].reg)) && !REG_SAME ((yyvsp[-5].reg), (yyvsp[-3].reg)))
- {
- notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , A1 , CC)\n");
- (yyval.instr) = DSP32SHIFT (12, &(yyvsp[-11].reg), 0, 0, 1, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 116:
-#line 2207 "bfin-parse.y"
- {
- if (REG_SAME ((yyvsp[-4].reg), (yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
- {
- notethat ("dsp32shift: Ax = ROT Ax BY dregs_lo\n");
- (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[0].reg), 0, 2, IS_A1 ((yyvsp[-4].reg)));
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 117:
-#line 2218 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_DREG_L ((yyvsp[0].reg)))
- {
- notethat ("dsp32shift: dregs = ROT dregs BY dregs_lo\n");
- (yyval.instr) = DSP32SHIFT (2, &(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-2].reg), 3, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 118:
-#line 2229 "bfin-parse.y"
- {
- if (IS_IMM ((yyvsp[0].expr), 6))
- {
- notethat ("dsp32shiftimm: An = ROT An BY imm6\n");
- (yyval.instr) = DSP32SHIFTIMM (3, 0, imm6 ((yyvsp[0].expr)), 0, 2, IS_A1 ((yyvsp[-4].reg)));
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 119:
-#line 2240 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-5].reg)) && IS_DREG ((yyvsp[-2].reg)) && IS_IMM ((yyvsp[0].expr), 6))
- {
- (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[-5].reg), imm6 ((yyvsp[0].expr)), &(yyvsp[-2].reg), 3, IS_A1 ((yyvsp[-5].reg)));
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 120:
-#line 2250 "bfin-parse.y"
- {
- if (IS_DREG_L ((yyvsp[-3].reg)))
- {
- notethat ("dsp32shift: dregs_lo = SIGNBITS An\n");
- (yyval.instr) = DSP32SHIFT (6, &(yyvsp[-3].reg), 0, 0, IS_A1 ((yyvsp[0].reg)), 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 121:
-#line 2261 "bfin-parse.y"
- {
- if (IS_DREG_L ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("dsp32shift: dregs_lo = SIGNBITS dregs\n");
- (yyval.instr) = DSP32SHIFT (5, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 0, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 122:
-#line 2272 "bfin-parse.y"
- {
- if (IS_DREG_L ((yyvsp[-3].reg)))
- {
- notethat ("dsp32shift: dregs_lo = SIGNBITS dregs_lo\n");
- (yyval.instr) = DSP32SHIFT (5, &(yyvsp[-3].reg), 0, &(yyvsp[0].reg), 1 + IS_H ((yyvsp[0].reg)), 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 123:
-#line 2284 "bfin-parse.y"
- {
- if (IS_DREG_L ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-2].reg)))
- {
- notethat ("dsp32shift: dregs_lo = VIT_MAX (dregs) (..)\n");
- (yyval.instr) = DSP32SHIFT (9, &(yyvsp[-6].reg), 0, &(yyvsp[-2].reg), ((yyvsp[0].r0).r0 ? 0 : 1), 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 124:
-#line 2295 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-8].reg)) && IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-2].reg)))
- {
- notethat ("dsp32shift: dregs = VIT_MAX (dregs, dregs) (ASR)\n");
- (yyval.instr) = DSP32SHIFT (9, &(yyvsp[-8].reg), &(yyvsp[-2].reg), &(yyvsp[-4].reg), 2 | ((yyvsp[0].r0).r0 ? 0 : 1), 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 125:
-#line 2306 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-6].reg)) && IS_DREG ((yyvsp[-4].reg)) && !IS_A1 ((yyvsp[-2].reg)))
- {
- notethat ("dsp32shift: BITMUX (dregs , dregs , A0) (ASR)\n");
- (yyval.instr) = DSP32SHIFT (8, 0, &(yyvsp[-6].reg), &(yyvsp[-4].reg), (yyvsp[0].r0).r0, 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 126:
-#line 2317 "bfin-parse.y"
- {
- if (!IS_A1 ((yyvsp[-8].reg)) && !IS_A1 ((yyvsp[-5].reg)) && IS_A1 ((yyvsp[-3].reg)))
- {
- notethat ("dsp32shift: A0 = BXORSHIFT (A0 , A1 , CC )\n");
- (yyval.instr) = DSP32SHIFT (12, 0, 0, 0, 0, 0);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 127:
-#line 2330 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
- {
- notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
- (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 4);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 128:
-#line 2342 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
- {
- notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
- (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 2);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 129:
-#line 2354 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
- {
- notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
- (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 3);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 130:
-#line 2365 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
- {
- notethat ("LOGI2op: CC =! BITTST (dregs , uimm5 )\n");
- (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 0);
- }
- else
- return yyerror ("Register mismatch or value error");
- }
- break;
-
- case 131:
-#line 2376 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-3].reg)) && IS_UIMM ((yyvsp[-1].expr), 5))
- {
- notethat ("LOGI2op: CC = BITTST (dregs , uimm5 )\n");
- (yyval.instr) = LOGI2OP ((yyvsp[-3].reg), uimm5 ((yyvsp[-1].expr)), 1);
- }
- else
- return yyerror ("Register mismatch or value error");
- }
- break;
-
- case 132:
-#line 2387 "bfin-parse.y"
- {
- if ((IS_DREG ((yyvsp[-2].reg)) || IS_PREG ((yyvsp[-2].reg)))
- && (IS_DREG ((yyvsp[0].reg)) || IS_PREG ((yyvsp[0].reg))))
- {
- notethat ("ccMV: IF ! CC gregs = gregs\n");
- (yyval.instr) = CCMV (&(yyvsp[0].reg), &(yyvsp[-2].reg), 0);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 133:
-#line 2399 "bfin-parse.y"
- {
- if ((IS_DREG ((yyvsp[0].reg)) || IS_PREG ((yyvsp[0].reg)))
- && (IS_DREG ((yyvsp[-2].reg)) || IS_PREG ((yyvsp[-2].reg))))
- {
- notethat ("ccMV: IF CC gregs = gregs\n");
- (yyval.instr) = CCMV (&(yyvsp[0].reg), &(yyvsp[-2].reg), 1);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 134:
-#line 2411 "bfin-parse.y"
- {
- if (IS_PCREL10 ((yyvsp[0].expr)))
- {
- notethat ("BRCC: IF !CC JUMP pcrel11m2\n");
- (yyval.instr) = BRCC (0, 0, (yyvsp[0].expr));
- }
- else
- return yyerror ("Bad jump offset");
- }
- break;
-
- case 135:
-#line 2422 "bfin-parse.y"
- {
- if (IS_PCREL10 ((yyvsp[-3].expr)))
- {
- notethat ("BRCC: IF !CC JUMP pcrel11m2\n");
- (yyval.instr) = BRCC (0, 1, (yyvsp[-3].expr));
- }
- else
- return yyerror ("Bad jump offset");
- }
- break;
-
- case 136:
-#line 2433 "bfin-parse.y"
- {
- if (IS_PCREL10 ((yyvsp[0].expr)))
- {
- notethat ("BRCC: IF CC JUMP pcrel11m2\n");
- (yyval.instr) = BRCC (1, 0, (yyvsp[0].expr));
- }
- else
- return yyerror ("Bad jump offset");
- }
- break;
-
- case 137:
-#line 2444 "bfin-parse.y"
- {
- if (IS_PCREL10 ((yyvsp[-3].expr)))
- {
- notethat ("BRCC: IF !CC JUMP pcrel11m2\n");
- (yyval.instr) = BRCC (1, 1, (yyvsp[-3].expr));
- }
- else
- return yyerror ("Bad jump offset");
- }
- break;
-
- case 138:
-#line 2454 "bfin-parse.y"
- {
- notethat ("ProgCtrl: NOP\n");
- (yyval.instr) = PROGCTRL (0, 0);
- }
- break;
-
- case 139:
-#line 2460 "bfin-parse.y"
- {
- notethat ("ProgCtrl: RTS\n");
- (yyval.instr) = PROGCTRL (1, 0);
- }
- break;
-
- case 140:
-#line 2466 "bfin-parse.y"
- {
- notethat ("ProgCtrl: RTI\n");
- (yyval.instr) = PROGCTRL (1, 1);
- }
- break;
-
- case 141:
-#line 2472 "bfin-parse.y"
- {
- notethat ("ProgCtrl: RTX\n");
- (yyval.instr) = PROGCTRL (1, 2);
- }
- break;
-
- case 142:
-#line 2478 "bfin-parse.y"
- {
- notethat ("ProgCtrl: RTN\n");
- (yyval.instr) = PROGCTRL (1, 3);
- }
- break;
-
- case 143:
-#line 2484 "bfin-parse.y"
- {
- notethat ("ProgCtrl: RTE\n");
- (yyval.instr) = PROGCTRL (1, 4);
- }
- break;
-
- case 144:
-#line 2490 "bfin-parse.y"
- {
- notethat ("ProgCtrl: IDLE\n");
- (yyval.instr) = PROGCTRL (2, 0);
- }
- break;
-
- case 145:
-#line 2496 "bfin-parse.y"
- {
- notethat ("ProgCtrl: CSYNC\n");
- (yyval.instr) = PROGCTRL (2, 3);
- }
- break;
-
- case 146:
-#line 2502 "bfin-parse.y"
- {
- notethat ("ProgCtrl: SSYNC\n");
- (yyval.instr) = PROGCTRL (2, 4);
- }
- break;
-
- case 147:
-#line 2508 "bfin-parse.y"
- {
- notethat ("ProgCtrl: EMUEXCPT\n");
- (yyval.instr) = PROGCTRL (2, 5);
- }
- break;
-
- case 148:
-#line 2514 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("ProgCtrl: CLI dregs\n");
- (yyval.instr) = PROGCTRL (3, (yyvsp[0].reg).regno & CODE_MASK);
- }
- else
- return yyerror ("Dreg expected for CLI");
- }
- break;
-
- case 149:
-#line 2525 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("ProgCtrl: STI dregs\n");
- (yyval.instr) = PROGCTRL (4, (yyvsp[0].reg).regno & CODE_MASK);
- }
- else
- return yyerror ("Dreg expected for STI");
- }
- break;
-
- case 150:
-#line 2536 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[-1].reg)))
- {
- notethat ("ProgCtrl: JUMP (pregs )\n");
- (yyval.instr) = PROGCTRL (5, (yyvsp[-1].reg).regno & CODE_MASK);
- }
- else
- return yyerror ("Bad register for indirect jump");
- }
- break;
-
- case 151:
-#line 2547 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[-1].reg)))
- {
- notethat ("ProgCtrl: CALL (pregs )\n");
- (yyval.instr) = PROGCTRL (6, (yyvsp[-1].reg).regno & CODE_MASK);
- }
- else
- return yyerror ("Bad register for indirect call");
- }
- break;
-
- case 152:
-#line 2558 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[-1].reg)))
- {
- notethat ("ProgCtrl: CALL (PC + pregs )\n");
- (yyval.instr) = PROGCTRL (7, (yyvsp[-1].reg).regno & CODE_MASK);
- }
- else
- return yyerror ("Bad register for indirect call");
- }
- break;
-
- case 153:
-#line 2569 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[-1].reg)))
- {
- notethat ("ProgCtrl: JUMP (PC + pregs )\n");
- (yyval.instr) = PROGCTRL (8, (yyvsp[-1].reg).regno & CODE_MASK);
- }
- else
- return yyerror ("Bad register for indirect jump");
- }
- break;
-
- case 154:
-#line 2580 "bfin-parse.y"
- {
- if (IS_UIMM ((yyvsp[0].expr), 4))
- {
- notethat ("ProgCtrl: RAISE uimm4\n");
- (yyval.instr) = PROGCTRL (9, uimm4 ((yyvsp[0].expr)));
- }
- else
- return yyerror ("Bad value for RAISE");
- }
- break;
-
- case 155:
-#line 2591 "bfin-parse.y"
- {
- notethat ("ProgCtrl: EMUEXCPT\n");
- (yyval.instr) = PROGCTRL (10, uimm4 ((yyvsp[0].expr)));
- }
- break;
-
- case 156:
-#line 2597 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[-1].reg)))
- {
- notethat ("ProgCtrl: TESTSET (pregs )\n");
- (yyval.instr) = PROGCTRL (11, (yyvsp[-1].reg).regno & CODE_MASK);
- }
- else
- return yyerror ("Preg expected");
- }
- break;
-
- case 157:
-#line 2608 "bfin-parse.y"
- {
- if (IS_PCREL12 ((yyvsp[0].expr)))
- {
- notethat ("UJUMP: JUMP pcrel12\n");
- (yyval.instr) = UJUMP ((yyvsp[0].expr));
- }
- else
- return yyerror ("Bad value for relative jump");
- }
- break;
-
- case 158:
-#line 2619 "bfin-parse.y"
- {
- if (IS_PCREL12 ((yyvsp[0].expr)))
- {
- notethat ("UJUMP: JUMP_DOT_S pcrel12\n");
- (yyval.instr) = UJUMP((yyvsp[0].expr));
- }
- else
- return yyerror ("Bad value for relative jump");
- }
- break;
-
- case 159:
-#line 2630 "bfin-parse.y"
- {
- if (IS_PCREL24 ((yyvsp[0].expr)))
- {
- notethat ("CALLa: jump.l pcrel24\n");
- (yyval.instr) = CALLA ((yyvsp[0].expr), 0);
- }
- else
- return yyerror ("Bad value for long jump");
- }
- break;
-
- case 160:
-#line 2641 "bfin-parse.y"
- {
- if (IS_PCREL24 ((yyvsp[0].expr)))
- {
- notethat ("CALLa: jump.l pcrel24\n");
- (yyval.instr) = CALLA ((yyvsp[0].expr), 2);
- }
- else
- return yyerror ("Bad value for long jump");
- }
- break;
-
- case 161:
-#line 2652 "bfin-parse.y"
- {
- if (IS_PCREL24 ((yyvsp[0].expr)))
- {
- notethat ("CALLa: CALL pcrel25m2\n");
- (yyval.instr) = CALLA ((yyvsp[0].expr), 1);
- }
- else
- return yyerror ("Bad call address");
- }
- break;
-
- case 162:
-#line 2662 "bfin-parse.y"
- {
- if (IS_PCREL24 ((yyvsp[0].expr)))
- {
- notethat ("CALLa: CALL pcrel25m2\n");
- (yyval.instr) = CALLA ((yyvsp[0].expr), 2);
- }
- else
- return yyerror ("Bad call address");
- }
- break;
-
- case 163:
-#line 2675 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
- (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 8);
- else
- return yyerror ("Bad registers for DIVQ");
- }
- break;
-
- case 164:
-#line 2683 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[-1].reg)))
- (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[-1].reg), 9);
- else
- return yyerror ("Bad registers for DIVS");
- }
- break;
-
- case 165:
-#line 2691 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[-1].reg)))
- {
- if ((yyvsp[0].modcodes).r0 == 0 && (yyvsp[0].modcodes).s0 == 0 && (yyvsp[0].modcodes).aop == 0)
- {
- notethat ("ALU2op: dregs = - dregs\n");
- (yyval.instr) = ALU2OP (&(yyvsp[-4].reg), &(yyvsp[-1].reg), 14);
- }
- else if ((yyvsp[0].modcodes).r0 == 1 && (yyvsp[0].modcodes).s0 == 0 && (yyvsp[0].modcodes).aop == 3)
- {
- notethat ("dsp32alu: dregs = - dregs (.)\n");
- (yyval.instr) = DSP32ALU (15, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, (yyvsp[0].modcodes).s0, 0, 3);
- }
- else
- {
- notethat ("dsp32alu: dregs = - dregs (.)\n");
- (yyval.instr) = DSP32ALU (7, 0, 0, &(yyvsp[-4].reg), &(yyvsp[-1].reg), 0, (yyvsp[0].modcodes).s0, 0, 3);
- }
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 166:
-#line 2715 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-3].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("ALU2op: dregs = ~dregs\n");
- (yyval.instr) = ALU2OP (&(yyvsp[-3].reg), &(yyvsp[0].reg), 15);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 167:
-#line 2726 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("ALU2op: dregs >>= dregs\n");
- (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 1);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 168:
-#line 2737 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
- {
- notethat ("LOGI2op: dregs >>= uimm5\n");
- (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 6);
- }
- else
- return yyerror ("Dregs expected or value error");
- }
- break;
-
- case 169:
-#line 2748 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("ALU2op: dregs >>>= dregs\n");
- (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 0);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 170:
-#line 2759 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("ALU2op: dregs <<= dregs\n");
- (yyval.instr) = ALU2OP (&(yyvsp[-2].reg), &(yyvsp[0].reg), 2);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 171:
-#line 2770 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
- {
- notethat ("LOGI2op: dregs <<= uimm5\n");
- (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 7);
- }
- else
- return yyerror ("Dregs expected or const value error");
- }
- break;
-
- case 172:
-#line 2782 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-2].reg)) && IS_UIMM ((yyvsp[0].expr), 5))
- {
- notethat ("LOGI2op: dregs >>>= uimm5\n");
- (yyval.instr) = LOGI2OP ((yyvsp[-2].reg), uimm5 ((yyvsp[0].expr)), 5);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 173:
-#line 2795 "bfin-parse.y"
- {
- notethat ("CaCTRL: FLUSH [ pregs ]\n");
- if (IS_PREG ((yyvsp[-1].reg)))
- (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 2);
- else
- return yyerror ("Bad register(s) for FLUSH");
- }
- break;
-
- case 174:
-#line 2804 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[0].reg)))
- {
- notethat ("CaCTRL: FLUSH [ pregs ++ ]\n");
- (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 2);
- }
- else
- return yyerror ("Bad register(s) for FLUSH");
- }
- break;
-
- case 175:
-#line 2815 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[-1].reg)))
- {
- notethat ("CaCTRL: FLUSHINV [ pregs ]\n");
- (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 1);
- }
- else
- return yyerror ("Bad register(s) for FLUSH");
- }
- break;
-
- case 176:
-#line 2826 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[0].reg)))
- {
- notethat ("CaCTRL: FLUSHINV [ pregs ++ ]\n");
- (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 1);
- }
- else
- return yyerror ("Bad register(s) for FLUSH");
- }
- break;
-
- case 177:
-#line 2838 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[-1].reg)))
- {
- notethat ("CaCTRL: IFLUSH [ pregs ]\n");
- (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 3);
- }
- else
- return yyerror ("Bad register(s) for FLUSH");
- }
- break;
-
- case 178:
-#line 2849 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[0].reg)))
- {
- notethat ("CaCTRL: IFLUSH [ pregs ++ ]\n");
- (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 3);
- }
- else
- return yyerror ("Bad register(s) for FLUSH");
- }
- break;
-
- case 179:
-#line 2860 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[-1].reg)))
- {
- notethat ("CaCTRL: PREFETCH [ pregs ]\n");
- (yyval.instr) = CACTRL (&(yyvsp[-1].reg), 0, 0);
- }
- else
- return yyerror ("Bad register(s) for PREFETCH");
- }
- break;
-
- case 180:
-#line 2871 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[0].reg)))
- {
- notethat ("CaCTRL: PREFETCH [ pregs ++ ]\n");
- (yyval.instr) = CACTRL (&(yyvsp[0].reg), 1, 0);
- }
- else
- return yyerror ("Bad register(s) for PREFETCH");
- }
- break;
-
- case 181:
-#line 2885 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("LDST: B [ pregs <post_op> ] = dregs\n");
- (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 2, 0, 1);
- }
- else
- return yyerror ("Register mismatch");
- }
- break;
-
- case 182:
-#line 2897 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[-5].reg)) && IS_RANGE(16, (yyvsp[-3].expr), (yyvsp[-4].r0).r0, 1) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("LDST: B [ pregs + imm16 ] = dregs\n");
- if ((yyvsp[-4].r0).r0)
- neg_value ((yyvsp[-3].expr));
- (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 2, 0, (yyvsp[-3].expr));
- }
- else
- return yyerror ("Register mismatch or const size wrong");
- }
- break;
-
- case 183:
-#line 2912 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[-5].reg)) && IS_URANGE (4, (yyvsp[-3].expr), (yyvsp[-4].r0).r0, 2) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("LDSTii: W [ pregs +- uimm5m2 ] = dregs\n");
- (yyval.instr) = LDSTII (&(yyvsp[-5].reg), &(yyvsp[0].reg), (yyvsp[-3].expr), 1, 1);
- }
- else if (IS_PREG ((yyvsp[-5].reg)) && IS_RANGE(16, (yyvsp[-3].expr), (yyvsp[-4].r0).r0, 2) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("LDSTidxI: W [ pregs + imm17m2 ] = dregs\n");
- if ((yyvsp[-4].r0).r0)
- neg_value ((yyvsp[-3].expr));
- (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 1, 0, (yyvsp[-3].expr));
- }
- else
- return yyerror ("Bad register(s) or wrong constant size");
- }
- break;
-
- case 184:
-#line 2931 "bfin-parse.y"
- {
- if (IS_PREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("LDST: W [ pregs <post_op> ] = dregs\n");
- (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1, 0, 1);
- }
- else
- return yyerror ("Bad register(s) for STORE");
- }
- break;
-
- case 185:
-#line 2942 "bfin-parse.y"
- {
- if (IS_IREG ((yyvsp[-4].reg)))
- {
- notethat ("dspLDST: W [ iregs <post_op> ] = dregs_half\n");
- (yyval.instr) = DSPLDST (&(yyvsp[-4].reg), 1 + IS_H ((yyvsp[0].reg)), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1);
- }
- else if ((yyvsp[-3].modcodes).x0 == 2 && IS_PREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("LDSTpmod: W [ pregs <post_op>] = dregs_half\n");
- (yyval.instr) = LDSTPMOD (&(yyvsp[-4].reg), &(yyvsp[0].reg), &(yyvsp[-4].reg), 1 + IS_H ((yyvsp[0].reg)), 1);
-
- }
- else
- return yyerror ("Bad register(s) for STORE");
- }
- break;
-
- case 186:
-#line 2960 "bfin-parse.y"
- {
- Expr_Node *tmp = (yyvsp[-3].expr);
- int ispreg = IS_PREG ((yyvsp[0].reg));
-
- if (!IS_PREG ((yyvsp[-5].reg)))
- return yyerror ("Preg expected for indirect");
-
- if (!IS_DREG ((yyvsp[0].reg)) && !ispreg)
- return yyerror ("Bad source register for STORE");
-
- if ((yyvsp[-4].r0).r0)
- tmp = unary (Expr_Op_Type_NEG, tmp);
-
- if (in_range_p (tmp, 0, 63, 3))
- {
- notethat ("LDSTii: dpregs = [ pregs + uimm6m4 ]\n");
- (yyval.instr) = LDSTII (&(yyvsp[-5].reg), &(yyvsp[0].reg), tmp, 1, ispreg ? 3 : 0);
- }
- else if ((yyvsp[-5].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3))
- {
- notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n");
- tmp = unary (Expr_Op_Type_NEG, tmp);
- (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[0].reg), 1);
- }
- else if (in_range_p (tmp, -131072, 131071, 3))
- {
- notethat ("LDSTidxI: [ pregs + imm18m4 ] = dpregs\n");
- (yyval.instr) = LDSTIDXI (&(yyvsp[-5].reg), &(yyvsp[0].reg), 1, 0, ispreg ? 1: 0, tmp);
- }
- else
- return yyerror ("Displacement out of range for store");
- }
- break;
-
- case 187:
-#line 2994 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-4].reg)) && IS_URANGE (4, (yyvsp[-2].expr), (yyvsp[-3].r0).r0, 2))
- {
- notethat ("LDSTii: dregs = W [ pregs + uimm4s2 ] (.)\n");
- (yyval.instr) = LDSTII (&(yyvsp[-4].reg), &(yyvsp[-8].reg), (yyvsp[-2].expr), 0, 1 << (yyvsp[0].r0).r0);
- }
- else if (IS_DREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-4].reg)) && IS_RANGE(16, (yyvsp[-2].expr), (yyvsp[-3].r0).r0, 2))
- {
- notethat ("LDSTidxI: dregs = W [ pregs + imm17m2 ] (.)\n");
- if ((yyvsp[-3].r0).r0)
- neg_value ((yyvsp[-2].expr));
- (yyval.instr) = LDSTIDXI (&(yyvsp[-4].reg), &(yyvsp[-8].reg), 0, 1, (yyvsp[0].r0).r0, (yyvsp[-2].expr));
- }
- else
- return yyerror ("Bad register or constant for LOAD");
- }
- break;
-
- case 188:
-#line 3012 "bfin-parse.y"
- {
- if (IS_IREG ((yyvsp[-2].reg)))
- {
- notethat ("dspLDST: dregs_half = W [ iregs ]\n");
- (yyval.instr) = DSPLDST(&(yyvsp[-2].reg), 1 + IS_H ((yyvsp[-6].reg)), &(yyvsp[-6].reg), (yyvsp[-1].modcodes).x0, 0);
- }
- else if ((yyvsp[-1].modcodes).x0 == 2 && IS_DREG ((yyvsp[-6].reg)) && IS_PREG ((yyvsp[-2].reg)))
- {
- notethat ("LDSTpmod: dregs_half = W [ pregs ]\n");
- (yyval.instr) = LDSTPMOD (&(yyvsp[-2].reg), &(yyvsp[-6].reg), &(yyvsp[-2].reg), 1 + IS_H ((yyvsp[-6].reg)), 0);
- }
- else
- return yyerror ("Bad register or post_op for LOAD");
- }
- break;
-
- case 189:
-#line 3029 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-7].reg)) && IS_PREG ((yyvsp[-3].reg)))
- {
- notethat ("LDST: dregs = W [ pregs <post_op> ] (.)\n");
- (yyval.instr) = LDST (&(yyvsp[-3].reg), &(yyvsp[-7].reg), (yyvsp[-2].modcodes).x0, 1, (yyvsp[0].r0).r0, 0);
- }
- else
- return yyerror ("Bad register for LOAD");
- }
- break;
-
- case 190:
-#line 3040 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-4].reg)) && IS_PREG ((yyvsp[-2].reg)))
- {
- notethat ("LDSTpmod: dregs = W [ pregs ++ pregs ] (.)\n");
- (yyval.instr) = LDSTPMOD (&(yyvsp[-4].reg), &(yyvsp[-8].reg), &(yyvsp[-2].reg), 3, (yyvsp[0].r0).r0);
- }
- else
- return yyerror ("Bad register for LOAD");
- }
- break;
-
- case 191:
-#line 3051 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-7].reg)) && IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg)))
- {
- notethat ("LDSTpmod: dregs_half = W [ pregs ++ pregs ]\n");
- (yyval.instr) = LDSTPMOD (&(yyvsp[-3].reg), &(yyvsp[-7].reg), &(yyvsp[-1].reg), 1 + IS_H ((yyvsp[-7].reg)), 0);
- }
- else
- return yyerror ("Bad register for LOAD");
- }
- break;
-
- case 192:
-#line 3062 "bfin-parse.y"
- {
- if (IS_IREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("dspLDST: [ iregs <post_op> ] = dregs\n");
- (yyval.instr) = DSPLDST(&(yyvsp[-4].reg), 0, &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 1);
- }
- else if (IS_PREG ((yyvsp[-4].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- notethat ("LDST: [ pregs <post_op> ] = dregs\n");
- (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 0, 0, 1);
- }
- else if (IS_PREG ((yyvsp[-4].reg)) && IS_PREG ((yyvsp[0].reg)))
- {
- notethat ("LDST: [ pregs <post_op> ] = pregs\n");
- (yyval.instr) = LDST (&(yyvsp[-4].reg), &(yyvsp[0].reg), (yyvsp[-3].modcodes).x0, 0, 1, 1);
- }
- else
- return yyerror ("Bad register for STORE");
- }
- break;
-
- case 193:
-#line 3083 "bfin-parse.y"
- {
- if (! IS_DREG ((yyvsp[0].reg)))
- return yyerror ("Expected Dreg for last argument");
-
- if (IS_IREG ((yyvsp[-5].reg)) && IS_MREG ((yyvsp[-3].reg)))
- {
- notethat ("dspLDST: [ iregs ++ mregs ] = dregs\n");
- (yyval.instr) = DSPLDST(&(yyvsp[-5].reg), (yyvsp[-3].reg).regno & CODE_MASK, &(yyvsp[0].reg), 3, 1);
- }
- else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
- {
- notethat ("LDSTpmod: [ pregs ++ pregs ] = dregs\n");
- (yyval.instr) = LDSTPMOD (&(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-3].reg), 0, 1);
- }
- else
- return yyerror ("Bad register for STORE");
- }
- break;
-
- case 194:
-#line 3102 "bfin-parse.y"
- {
- if (!IS_DREG ((yyvsp[0].reg)))
- return yyerror ("Expect Dreg as last argument");
- if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-3].reg)))
- {
- notethat ("LDSTpmod: W [ pregs ++ pregs ] = dregs_half\n");
- (yyval.instr) = LDSTPMOD (&(yyvsp[-5].reg), &(yyvsp[0].reg), &(yyvsp[-3].reg), 1 + IS_H ((yyvsp[0].reg)), 1);
- }
- else
- return yyerror ("Bad register for STORE");
- }
- break;
-
- case 195:
-#line 3115 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-8].reg)) && IS_PREG ((yyvsp[-4].reg)) && IS_RANGE(16, (yyvsp[-2].expr), (yyvsp[-3].r0).r0, 1))
- {
- notethat ("LDSTidxI: dregs = B [ pregs + imm16 ] (%c)\n",
- (yyvsp[0].r0).r0 ? 'X' : 'Z');
- if ((yyvsp[-3].r0).r0)
- neg_value ((yyvsp[-2].expr));
- (yyval.instr) = LDSTIDXI (&(yyvsp[-4].reg), &(yyvsp[-8].reg), 0, 2, (yyvsp[0].r0).r0, (yyvsp[-2].expr));
- }
- else
- return yyerror ("Bad register or value for LOAD");
- }
- break;
-
- case 196:
-#line 3129 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-7].reg)) && IS_PREG ((yyvsp[-3].reg)))
- {
- notethat ("LDST: dregs = B [ pregs <post_op> ] (%c)\n",
- (yyvsp[0].r0).r0 ? 'X' : 'Z');
- (yyval.instr) = LDST (&(yyvsp[-3].reg), &(yyvsp[-7].reg), (yyvsp[-2].modcodes).x0, 2, (yyvsp[0].r0).r0, 0);
- }
- else
- return yyerror ("Bad register for LOAD");
- }
- break;
-
- case 197:
-#line 3141 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-6].reg)) && IS_IREG ((yyvsp[-3].reg)) && IS_MREG ((yyvsp[-1].reg)))
- {
- notethat ("dspLDST: dregs = [ iregs ++ mregs ]\n");
- (yyval.instr) = DSPLDST(&(yyvsp[-3].reg), (yyvsp[-1].reg).regno & CODE_MASK, &(yyvsp[-6].reg), 3, 0);
- }
- else if (IS_DREG ((yyvsp[-6].reg)) && IS_PREG ((yyvsp[-3].reg)) && IS_PREG ((yyvsp[-1].reg)))
- {
- notethat ("LDSTpmod: dregs = [ pregs ++ pregs ]\n");
- (yyval.instr) = LDSTPMOD (&(yyvsp[-3].reg), &(yyvsp[-6].reg), &(yyvsp[-1].reg), 0, 0);
- }
- else
- return yyerror ("Bad register for LOAD");
- }
- break;
-
- case 198:
-#line 3157 "bfin-parse.y"
- {
- Expr_Node *tmp = (yyvsp[-1].expr);
- int ispreg = IS_PREG ((yyvsp[-6].reg));
- int isgot = IS_RELOC((yyvsp[-1].expr));
-
- if (!IS_PREG ((yyvsp[-3].reg)))
- return yyerror ("Preg expected for indirect");
-
- if (!IS_DREG ((yyvsp[-6].reg)) && !ispreg)
- return yyerror ("Bad destination register for LOAD");
-
- if ((yyvsp[-2].r0).r0)
- tmp = unary (Expr_Op_Type_NEG, tmp);
-
- if(isgot){
- notethat ("LDSTidxI: dpregs = [ pregs + sym@got ]\n");
- (yyval.instr) = LDSTIDXI (&(yyvsp[-3].reg), &(yyvsp[-6].reg), 0, 0, ispreg ? 1: 0, tmp);
- }
- else if (in_range_p (tmp, 0, 63, 3))
- {
- notethat ("LDSTii: dpregs = [ pregs + uimm7m4 ]\n");
- (yyval.instr) = LDSTII (&(yyvsp[-3].reg), &(yyvsp[-6].reg), tmp, 0, ispreg ? 3 : 0);
- }
- else if ((yyvsp[-3].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3))
- {
- notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n");
- tmp = unary (Expr_Op_Type_NEG, tmp);
- (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[-6].reg), 0);
- }
- else if (in_range_p (tmp, -131072, 131071, 3))
- {
- notethat ("LDSTidxI: dpregs = [ pregs + imm18m4 ]\n");
- (yyval.instr) = LDSTIDXI (&(yyvsp[-3].reg), &(yyvsp[-6].reg), 0, 0, ispreg ? 1: 0, tmp);
-
- }
- else
- return yyerror ("Displacement out of range for load");
- }
- break;
-
- case 199:
-#line 3197 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-5].reg)) && IS_IREG ((yyvsp[-2].reg)))
- {
- notethat ("dspLDST: dregs = [ iregs <post_op> ]\n");
- (yyval.instr) = DSPLDST (&(yyvsp[-2].reg), 0, &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0);
- }
- else if (IS_DREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-2].reg)))
- {
- notethat ("LDST: dregs = [ pregs <post_op> ]\n");
- (yyval.instr) = LDST (&(yyvsp[-2].reg), &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0, 0, 0);
- }
- else if (IS_PREG ((yyvsp[-5].reg)) && IS_PREG ((yyvsp[-2].reg)))
- {
- if (REG_SAME ((yyvsp[-5].reg), (yyvsp[-2].reg)) && (yyvsp[-1].modcodes).x0 != 2)
- return yyerror ("Pregs can't be same");
-
- notethat ("LDST: pregs = [ pregs <post_op> ]\n");
- (yyval.instr) = LDST (&(yyvsp[-2].reg), &(yyvsp[-5].reg), (yyvsp[-1].modcodes).x0, 0, 1, 0);
- }
- else if ((yyvsp[-2].reg).regno == REG_SP && IS_ALLREG ((yyvsp[-5].reg)) && (yyvsp[-1].modcodes).x0 == 0)
- {
- notethat ("PushPopReg: allregs = [ SP ++ ]\n");
- (yyval.instr) = PUSHPOPREG (&(yyvsp[-5].reg), 0);
- }
- else
- return yyerror ("Bad register or value");
- }
- break;
-
- case 200:
-#line 3230 "bfin-parse.y"
- {
- bfin_equals ((yyvsp[-2].expr));
- (yyval.instr) = 0;
- }
- break;
-
- case 201:
-#line 3238 "bfin-parse.y"
- {
- if ((yyvsp[-10].reg).regno != REG_SP)
- yyerror ("Stack Pointer expected");
- if ((yyvsp[-7].reg).regno == REG_R7
- && IN_RANGE ((yyvsp[-5].expr), 0, 7)
- && (yyvsp[-3].reg).regno == REG_P5
- && IN_RANGE ((yyvsp[-1].expr), 0, 5))
- {
- notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim , P5 : reglim )\n");
- (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-5].expr)), imm5 ((yyvsp[-1].expr)), 1, 1, 1);
- }
- else
- return yyerror ("Bad register for PushPopMultiple");
- }
- break;
-
- case 202:
-#line 3254 "bfin-parse.y"
- {
- if ((yyvsp[-6].reg).regno != REG_SP)
- yyerror ("Stack Pointer expected");
-
- if ((yyvsp[-3].reg).regno == REG_R7 && IN_RANGE ((yyvsp[-1].expr), 0, 7))
- {
- notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim )\n");
- (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-1].expr)), 0, 1, 0, 1);
- }
- else if ((yyvsp[-3].reg).regno == REG_P5 && IN_RANGE ((yyvsp[-1].expr), 0, 6))
- {
- notethat ("PushPopMultiple: [ -- SP ] = (P5 : reglim )\n");
- (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[-1].expr)), 0, 1, 1);
- }
- else
- return yyerror ("Bad register for PushPopMultiple");
- }
- break;
-
- case 203:
-#line 3273 "bfin-parse.y"
- {
- if ((yyvsp[0].reg).regno != REG_SP)
- yyerror ("Stack Pointer expected");
- if ((yyvsp[-9].reg).regno == REG_R7 && (IN_RANGE ((yyvsp[-7].expr), 0, 7))
- && (yyvsp[-5].reg).regno == REG_P5 && (IN_RANGE ((yyvsp[-3].expr), 0, 6)))
- {
- notethat ("PushPopMultiple: (R7 : reglim , P5 : reglim ) = [ SP ++ ]\n");
- (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-7].expr)), imm5 ((yyvsp[-3].expr)), 1, 1, 0);
- }
- else
- return yyerror ("Bad register range for PushPopMultiple");
- }
- break;
-
- case 204:
-#line 3287 "bfin-parse.y"
- {
- if ((yyvsp[0].reg).regno != REG_SP)
- yyerror ("Stack Pointer expected");
-
- if ((yyvsp[-5].reg).regno == REG_R7 && IN_RANGE ((yyvsp[-3].expr), 0, 7))
- {
- notethat ("PushPopMultiple: (R7 : reglim ) = [ SP ++ ]\n");
- (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[-3].expr)), 0, 1, 0, 0);
- }
- else if ((yyvsp[-5].reg).regno == REG_P5 && IN_RANGE ((yyvsp[-3].expr), 0, 6))
- {
- notethat ("PushPopMultiple: (P5 : reglim ) = [ SP ++ ]\n");
- (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[-3].expr)), 0, 1, 0);
- }
- else
- return yyerror ("Bad register range for PushPopMultiple");
- }
- break;
-
- case 205:
-#line 3306 "bfin-parse.y"
- {
- if ((yyvsp[-2].reg).regno != REG_SP)
- yyerror ("Stack Pointer expected");
-
- if (IS_ALLREG ((yyvsp[0].reg)))
- {
- notethat ("PushPopReg: [ -- SP ] = allregs\n");
- (yyval.instr) = PUSHPOPREG (&(yyvsp[0].reg), 1);
- }
- else
- return yyerror ("Bad register for PushPopReg");
- }
- break;
-
- case 206:
-#line 3322 "bfin-parse.y"
- {
- if (IS_URANGE (16, (yyvsp[0].expr), 0, 4))
- (yyval.instr) = LINKAGE (0, uimm16s4 ((yyvsp[0].expr)));
- else
- return yyerror ("Bad constant for LINK");
- }
- break;
-
- case 207:
-#line 3330 "bfin-parse.y"
- {
- notethat ("linkage: UNLINK\n");
- (yyval.instr) = LINKAGE (1, 0);
- }
- break;
-
- case 208:
-#line 3339 "bfin-parse.y"
- {
- if (IS_PCREL4 ((yyvsp[-4].expr)) && IS_LPPCREL10 ((yyvsp[-2].expr)) && IS_CREG ((yyvsp[0].reg)))
- {
- notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters\n");
- (yyval.instr) = LOOPSETUP ((yyvsp[-4].expr), &(yyvsp[0].reg), 0, (yyvsp[-2].expr), 0);
- }
- else
- return yyerror ("Bad register or values for LSETUP");
-
- }
- break;
-
- case 209:
-#line 3350 "bfin-parse.y"
- {
- if (IS_PCREL4 ((yyvsp[-6].expr)) && IS_LPPCREL10 ((yyvsp[-4].expr))
- && IS_PREG ((yyvsp[0].reg)) && IS_CREG ((yyvsp[-2].reg)))
- {
- notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs\n");
- (yyval.instr) = LOOPSETUP ((yyvsp[-6].expr), &(yyvsp[-2].reg), 1, (yyvsp[-4].expr), &(yyvsp[0].reg));
- }
- else
- return yyerror ("Bad register or values for LSETUP");
- }
- break;
-
- case 210:
-#line 3362 "bfin-parse.y"
- {
- if (IS_PCREL4 ((yyvsp[-8].expr)) && IS_LPPCREL10 ((yyvsp[-6].expr))
- && IS_PREG ((yyvsp[-2].reg)) && IS_CREG ((yyvsp[-4].reg))
- && EXPR_VALUE ((yyvsp[0].expr)) == 1)
- {
- notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs >> 1\n");
- (yyval.instr) = LOOPSETUP ((yyvsp[-8].expr), &(yyvsp[-4].reg), 3, (yyvsp[-6].expr), &(yyvsp[-2].reg));
- }
- else
- return yyerror ("Bad register or values for LSETUP");
- }
- break;
-
- case 211:
-#line 3376 "bfin-parse.y"
- {
- if (!IS_RELOC ((yyvsp[-1].expr)))
- return yyerror ("Invalid expression in loop statement");
- if (!IS_CREG ((yyvsp[0].reg)))
- return yyerror ("Invalid loop counter register");
- (yyval.instr) = bfin_gen_loop ((yyvsp[-1].expr), &(yyvsp[0].reg), 0, 0);
- }
- break;
-
- case 212:
-#line 3384 "bfin-parse.y"
- {
- if (IS_RELOC ((yyvsp[-3].expr)) && IS_PREG ((yyvsp[0].reg)) && IS_CREG ((yyvsp[-2].reg)))
- {
- notethat ("Loop: LOOP expr counters = pregs\n");
- (yyval.instr) = bfin_gen_loop ((yyvsp[-3].expr), &(yyvsp[-2].reg), 1, &(yyvsp[0].reg));
- }
- else
- return yyerror ("Bad register or values for LOOP");
- }
- break;
-
- case 213:
-#line 3394 "bfin-parse.y"
- {
- if (IS_RELOC ((yyvsp[-5].expr)) && IS_PREG ((yyvsp[-2].reg)) && IS_CREG ((yyvsp[-4].reg)) && EXPR_VALUE ((yyvsp[0].expr)) == 1)
- {
- notethat ("Loop: LOOP expr counters = pregs >> 1\n");
- (yyval.instr) = bfin_gen_loop ((yyvsp[-5].expr), &(yyvsp[-4].reg), 3, &(yyvsp[-2].reg));
- }
- else
- return yyerror ("Bad register or values for LOOP");
- }
- break;
-
- case 214:
-#line 3406 "bfin-parse.y"
- {
- notethat ("pseudoDEBUG: DBG\n");
- (yyval.instr) = bfin_gen_pseudodbg (3, 7, 0);
- }
- break;
-
- case 215:
-#line 3411 "bfin-parse.y"
- {
- notethat ("pseudoDEBUG: DBG REG_A\n");
- (yyval.instr) = bfin_gen_pseudodbg (3, IS_A1 ((yyvsp[0].reg)), 0);
- }
- break;
-
- case 216:
-#line 3416 "bfin-parse.y"
- {
- notethat ("pseudoDEBUG: DBG allregs\n");
- (yyval.instr) = bfin_gen_pseudodbg (0, (yyvsp[0].reg).regno & CODE_MASK, (yyvsp[0].reg).regno & CLASS_MASK);
- }
- break;
-
- case 217:
-#line 3422 "bfin-parse.y"
- {
- if (!IS_DREG ((yyvsp[-1].reg)))
- return yyerror ("Dregs expected");
- notethat ("pseudoDEBUG: DBGCMPLX (dregs )\n");
- (yyval.instr) = bfin_gen_pseudodbg (3, 6, (yyvsp[-1].reg).regno & CODE_MASK);
- }
- break;
-
- case 218:
-#line 3430 "bfin-parse.y"
- {
- notethat ("psedoDEBUG: DBGHALT\n");
- (yyval.instr) = bfin_gen_pseudodbg (3, 5, 0);
- }
- break;
-
- case 219:
-#line 3436 "bfin-parse.y"
- {
- notethat ("pseudodbg_assert: DBGA (dregs_lo , uimm16 )\n");
- (yyval.instr) = bfin_gen_pseudodbg_assert (IS_H ((yyvsp[-3].reg)), &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
- }
- break;
-
- case 220:
-#line 3442 "bfin-parse.y"
- {
- notethat ("pseudodbg_assert: DBGAH (dregs , uimm16 )\n");
- (yyval.instr) = bfin_gen_pseudodbg_assert (3, &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
- }
- break;
-
- case 221:
-#line 3448 "bfin-parse.y"
- {
- notethat ("psedodbg_assert: DBGAL (dregs , uimm16 )\n");
- (yyval.instr) = bfin_gen_pseudodbg_assert (2, &(yyvsp[-3].reg), uimm16 ((yyvsp[-1].expr)));
- }
- break;
-
- case 222:
-#line 3461 "bfin-parse.y"
- {
- (yyval.reg) = (yyvsp[0].reg);
- }
- break;
-
- case 223:
-#line 3465 "bfin-parse.y"
- {
- (yyval.reg) = (yyvsp[0].reg);
- }
- break;
-
- case 224:
-#line 3474 "bfin-parse.y"
- {
- (yyval.mod).MM = 0;
- (yyval.mod).mod = 0;
- }
- break;
-
- case 225:
-#line 3479 "bfin-parse.y"
- {
- (yyval.mod).MM = 1;
- (yyval.mod).mod = (yyvsp[-1].value);
- }
- break;
-
- case 226:
-#line 3484 "bfin-parse.y"
- {
- (yyval.mod).MM = 1;
- (yyval.mod).mod = (yyvsp[-3].value);
- }
- break;
-
- case 227:
-#line 3489 "bfin-parse.y"
- {
- (yyval.mod).MM = 0;
- (yyval.mod).mod = (yyvsp[-1].value);
- }
- break;
-
- case 228:
-#line 3494 "bfin-parse.y"
- {
- (yyval.mod).MM = 1;
- (yyval.mod).mod = 0;
- }
- break;
-
- case 229:
-#line 3501 "bfin-parse.y"
- {
- (yyval.r0).r0 = 1;
- }
- break;
-
- case 230:
-#line 3505 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 231:
-#line 3511 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 0;
- (yyval.modcodes).x0 = 0;
- }
- break;
-
- case 232:
-#line 3516 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 1;
- (yyval.modcodes).x0 = 0;
- }
- break;
-
- case 233:
-#line 3521 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 0;
- (yyval.modcodes).x0 = 1;
- }
- break;
-
- case 234:
-#line 3526 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 1;
- (yyval.modcodes).x0 = 1;
- }
- break;
-
- case 235:
-#line 3534 "bfin-parse.y"
- {
- (yyval.r0).r0 = 1;
- }
- break;
-
- case 236:
-#line 3538 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 237:
-#line 3544 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 0;
- (yyval.modcodes).x0 = 0;
- }
- break;
-
- case 238:
-#line 3549 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
- (yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
- }
- break;
-
- case 239:
-#line 3556 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 0;
- (yyval.modcodes).x0 = 0;
- (yyval.modcodes).aop = 0;
- }
- break;
-
- case 240:
-#line 3562 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 0;
- (yyval.modcodes).x0 = 0;
- (yyval.modcodes).aop = 1;
- }
- break;
-
- case 241:
-#line 3568 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 1;
- (yyval.modcodes).x0 = 0;
- (yyval.modcodes).aop = 1;
- }
- break;
-
- case 242:
-#line 3576 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 0;
- (yyval.modcodes).s0 = 0;
- (yyval.modcodes).x0 = 0;
- }
- break;
-
- case 243:
-#line 3582 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 2 + (yyvsp[-1].r0).r0;
- (yyval.modcodes).s0 = 0;
- (yyval.modcodes).x0 = 0;
- }
- break;
-
- case 244:
-#line 3588 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 0;
- (yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
- (yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
- }
- break;
-
- case 245:
-#line 3594 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 2 + (yyvsp[-3].r0).r0;
- (yyval.modcodes).s0 = (yyvsp[-1].modcodes).s0;
- (yyval.modcodes).x0 = (yyvsp[-1].modcodes).x0;
- }
- break;
-
- case 246:
-#line 3600 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 2 + (yyvsp[-1].r0).r0;
- (yyval.modcodes).s0 = (yyvsp[-3].modcodes).s0;
- (yyval.modcodes).x0 = (yyvsp[-3].modcodes).x0;
- }
- break;
-
- case 247:
-#line 3608 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 248:
-#line 3612 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 249:
-#line 3616 "bfin-parse.y"
- {
- (yyval.r0).r0 = 1;
- }
- break;
-
- case 250:
-#line 3622 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 251:
-#line 3626 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 252:
-#line 3630 "bfin-parse.y"
- {
- (yyval.r0).r0 = 1;
- }
- break;
-
- case 253:
-#line 3636 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 0;
- (yyval.modcodes).s0 = 0;
- (yyval.modcodes).aop = 0;
- }
- break;
-
- case 254:
-#line 3642 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 0;
- (yyval.modcodes).s0 = 0;
- (yyval.modcodes).aop = 3;
- }
- break;
-
- case 255:
-#line 3648 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 0;
- (yyval.modcodes).s0 = 1;
- (yyval.modcodes).aop = 3;
- }
- break;
-
- case 256:
-#line 3654 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 1;
- (yyval.modcodes).s0 = 0;
- (yyval.modcodes).aop = 3;
- }
- break;
-
- case 257:
-#line 3660 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 1;
- (yyval.modcodes).s0 = 1;
- }
- break;
-
- case 258:
-#line 3665 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 1;
- (yyval.modcodes).s0 = 1;
- }
- break;
-
- case 259:
-#line 3672 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 260:
-#line 3676 "bfin-parse.y"
- {
- (yyval.r0).r0 = 1;
- }
- break;
-
- case 261:
-#line 3682 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 0;
- }
- break;
-
- case 262:
-#line 3686 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 1;
- }
- break;
-
- case 263:
-#line 3693 "bfin-parse.y"
- {
- (yyval.r0).r0 = 1;
- }
- break;
-
- case 264:
-#line 3697 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 265:
-#line 3701 "bfin-parse.y"
- {
- (yyval.r0).r0 = 3;
- }
- break;
-
- case 266:
-#line 3705 "bfin-parse.y"
- {
- (yyval.r0).r0 = 2;
- }
- break;
-
- case 267:
-#line 3711 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 268:
-#line 3715 "bfin-parse.y"
- {
- (yyval.r0).r0 = 1;
- }
- break;
-
- case 269:
-#line 3722 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 0;
- (yyval.modcodes).s0 = 1;
- }
- break;
-
- case 270:
-#line 3727 "bfin-parse.y"
- {
- if ((yyvsp[-1].value) != M_T)
- return yyerror ("Bad modifier");
- (yyval.modcodes).r0 = 1;
- (yyval.modcodes).s0 = 0;
- }
- break;
-
- case 271:
-#line 3734 "bfin-parse.y"
- {
- if ((yyvsp[-3].value) != M_T)
- return yyerror ("Bad modifier");
- (yyval.modcodes).r0 = 1;
- (yyval.modcodes).s0 = 1;
- }
- break;
-
- case 272:
-#line 3741 "bfin-parse.y"
- {
- if ((yyvsp[-1].value) != M_T)
- return yyerror ("Bad modifier");
- (yyval.modcodes).r0 = 1;
- (yyval.modcodes).s0 = 1;
- }
- break;
-
- case 273:
-#line 3753 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 274:
-#line 3757 "bfin-parse.y"
- {
- (yyval.r0).r0 = 1;
- }
- break;
-
- case 275:
-#line 3761 "bfin-parse.y"
- {
- (yyval.r0).r0 = 2;
- }
- break;
-
- case 276:
-#line 3767 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 277:
-#line 3771 "bfin-parse.y"
- {
- if ((yyvsp[-1].value) == M_W32)
- (yyval.r0).r0 = 1;
- else
- return yyerror ("Only (W32) allowed");
- }
- break;
-
- case 278:
-#line 3780 "bfin-parse.y"
- {
- (yyval.r0).r0 = 1;
- }
- break;
-
- case 279:
-#line 3784 "bfin-parse.y"
- {
- if ((yyvsp[-1].value) == M_IU)
- (yyval.r0).r0 = 3;
- else
- return yyerror ("(IU) expected");
- }
- break;
-
- case 280:
-#line 3793 "bfin-parse.y"
- {
- (yyval.reg) = (yyvsp[-1].reg);
- }
- break;
-
- case 281:
-#line 3799 "bfin-parse.y"
- {
- (yyval.reg) = (yyvsp[-2].reg);
- }
- break;
-
- case 282:
-#line 3808 "bfin-parse.y"
- {
- (yyval.r0).r0 = 1;
- }
- break;
-
- case 283:
-#line 3812 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 284:
-#line 3819 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 285:
-#line 3823 "bfin-parse.y"
- {
- (yyval.r0).r0 = 1;
- }
- break;
-
- case 286:
-#line 3827 "bfin-parse.y"
- {
- (yyval.r0).r0 = 2;
- }
- break;
-
- case 287:
-#line 3831 "bfin-parse.y"
- {
- (yyval.r0).r0 = 3;
- }
- break;
-
- case 288:
-#line 3838 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 289:
-#line 3842 "bfin-parse.y"
- {
- (yyval.r0).r0 = 1;
- }
- break;
-
- case 290:
-#line 3849 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 1; /* HL. */
- (yyval.modcodes).s0 = 0; /* s. */
- (yyval.modcodes).x0 = 0; /* x. */
- (yyval.modcodes).aop = 0; /* aop. */
- }
- break;
-
- case 291:
-#line 3857 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 1; /* HL. */
- (yyval.modcodes).s0 = 0; /* s. */
- (yyval.modcodes).x0 = 0; /* x. */
- (yyval.modcodes).aop = 1; /* aop. */
- }
- break;
-
- case 292:
-#line 3865 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 0; /* HL. */
- (yyval.modcodes).s0 = 0; /* s. */
- (yyval.modcodes).x0 = 0; /* x. */
- (yyval.modcodes).aop = 0; /* aop. */
- }
- break;
-
- case 293:
-#line 3873 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 0; /* HL. */
- (yyval.modcodes).s0 = 0; /* s. */
- (yyval.modcodes).x0 = 0; /* x. */
- (yyval.modcodes).aop = 1;
- }
- break;
-
- case 294:
-#line 3881 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 1; /* HL. */
- (yyval.modcodes).s0 = 1; /* s. */
- (yyval.modcodes).x0 = 0; /* x. */
- (yyval.modcodes).aop = 0; /* aop. */
- }
- break;
-
- case 295:
-#line 3888 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 1; /* HL. */
- (yyval.modcodes).s0 = 1; /* s. */
- (yyval.modcodes).x0 = 0; /* x. */
- (yyval.modcodes).aop = 1; /* aop. */
- }
- break;
-
- case 296:
-#line 3895 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 0; /* HL. */
- (yyval.modcodes).s0 = 1; /* s. */
- (yyval.modcodes).x0 = 0; /* x. */
- (yyval.modcodes).aop = 0; /* aop. */
- }
- break;
-
- case 297:
-#line 3903 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 0; /* HL. */
- (yyval.modcodes).s0 = 1; /* s. */
- (yyval.modcodes).x0 = 0; /* x. */
- (yyval.modcodes).aop = 1; /* aop. */
- }
- break;
-
- case 298:
-#line 3913 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 0; /* s. */
- (yyval.modcodes).x0 = 0; /* HL. */
- }
- break;
-
- case 299:
-#line 3918 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 0; /* s. */
- (yyval.modcodes).x0 = 1; /* HL. */
- }
- break;
-
- case 300:
-#line 3923 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 1; /* s. */
- (yyval.modcodes).x0 = 0; /* HL. */
- }
- break;
-
- case 301:
-#line 3928 "bfin-parse.y"
- {
- (yyval.modcodes).s0 = 1; /* s. */
- (yyval.modcodes).x0 = 1; /* HL. */
- }
- break;
-
- case 302:
-#line 3935 "bfin-parse.y"
- {
- (yyval.modcodes).x0 = 2;
- }
- break;
-
- case 303:
-#line 3939 "bfin-parse.y"
- {
- (yyval.modcodes).x0 = 0;
- }
- break;
-
- case 304:
-#line 3943 "bfin-parse.y"
- {
- (yyval.modcodes).x0 = 1;
- }
- break;
-
- case 305:
-#line 3952 "bfin-parse.y"
- {
- (yyval.reg) = (yyvsp[-1].reg);
- }
- break;
-
- case 306:
-#line 3959 "bfin-parse.y"
- {
- (yyval.reg) = (yyvsp[-1].reg);
- }
- break;
-
- case 307:
-#line 3966 "bfin-parse.y"
- {
- (yyval.reg) = (yyvsp[-1].reg);
- }
- break;
-
- case 308:
-#line 3973 "bfin-parse.y"
- {
- (yyval.macfunc).w = 1;
- (yyval.macfunc).P = 1;
- (yyval.macfunc).n = IS_A1 ((yyvsp[0].reg));
- (yyval.macfunc).op = 3;
- (yyval.macfunc).dst = (yyvsp[-2].reg);
- (yyval.macfunc).s0.regno = 0;
- (yyval.macfunc).s1.regno = 0;
-
- if (IS_A1 ((yyvsp[0].reg)) && IS_EVEN ((yyvsp[-2].reg)))
- return yyerror ("Cannot move A1 to even register");
- else if (!IS_A1 ((yyvsp[0].reg)) && !IS_EVEN ((yyvsp[-2].reg)))
- return yyerror ("Cannot move A0 to odd register");
- }
- break;
-
- case 309:
-#line 3988 "bfin-parse.y"
- {
- (yyval.macfunc) = (yyvsp[0].macfunc);
- (yyval.macfunc).w = 0; (yyval.macfunc).P = 0;
- (yyval.macfunc).dst.regno = 0;
- }
- break;
-
- case 310:
-#line 3994 "bfin-parse.y"
- {
- (yyval.macfunc) = (yyvsp[-1].macfunc);
- (yyval.macfunc).w = 1;
- (yyval.macfunc).P = 1;
- (yyval.macfunc).dst = (yyvsp[-4].reg);
- }
- break;
-
- case 311:
-#line 4002 "bfin-parse.y"
- {
- (yyval.macfunc) = (yyvsp[-1].macfunc);
- (yyval.macfunc).w = 1;
- (yyval.macfunc).P = 0;
- (yyval.macfunc).dst = (yyvsp[-4].reg);
- }
- break;
-
- case 312:
-#line 4010 "bfin-parse.y"
- {
- (yyval.macfunc).w = 1;
- (yyval.macfunc).P = 0;
- (yyval.macfunc).n = IS_A1 ((yyvsp[0].reg));
- (yyval.macfunc).op = 3;
- (yyval.macfunc).dst = (yyvsp[-2].reg);
- (yyval.macfunc).s0.regno = 0;
- (yyval.macfunc).s1.regno = 0;
-
- if (IS_A1 ((yyvsp[0].reg)) && !IS_H ((yyvsp[-2].reg)))
- return yyerror ("Cannot move A1 to low half of register");
- else if (!IS_A1 ((yyvsp[0].reg)) && IS_H ((yyvsp[-2].reg)))
- return yyerror ("Cannot move A0 to high half of register");
- }
- break;
-
- case 313:
-#line 4028 "bfin-parse.y"
- {
- (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
- (yyval.macfunc).op = 0;
- (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
- (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
- }
- break;
-
- case 314:
-#line 4035 "bfin-parse.y"
- {
- (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
- (yyval.macfunc).op = 1;
- (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
- (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
- }
- break;
-
- case 315:
-#line 4042 "bfin-parse.y"
- {
- (yyval.macfunc).n = IS_A1 ((yyvsp[-1].reg));
- (yyval.macfunc).op = 2;
- (yyval.macfunc).s0 = (yyvsp[0].macfunc).s0;
- (yyval.macfunc).s1 = (yyvsp[0].macfunc).s1;
- }
- break;
-
- case 316:
-#line 4052 "bfin-parse.y"
- {
- if (IS_DREG ((yyvsp[-2].reg)) && IS_DREG ((yyvsp[0].reg)))
- {
- (yyval.macfunc).s0 = (yyvsp[-2].reg);
- (yyval.macfunc).s1 = (yyvsp[0].reg);
- }
- else
- return yyerror ("Dregs expected");
- }
- break;
-
- case 317:
-#line 4065 "bfin-parse.y"
- {
- (yyval.r0).r0 = 0;
- }
- break;
-
- case 318:
-#line 4069 "bfin-parse.y"
- {
- (yyval.r0).r0 = 1;
- }
- break;
-
- case 319:
-#line 4073 "bfin-parse.y"
- {
- (yyval.r0).r0 = 2;
- }
- break;
-
- case 320:
-#line 4077 "bfin-parse.y"
- {
- (yyval.r0).r0 = 3;
- }
- break;
-
- case 321:
-#line 4084 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = (yyvsp[0].reg).regno;
- (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
- (yyval.modcodes).s0 = 0;
- }
- break;
-
- case 322:
-#line 4090 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 0x18;
- (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
- (yyval.modcodes).s0 = 0;
- }
- break;
-
- case 323:
-#line 4096 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = (yyvsp[-2].reg).regno;
- (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
- (yyval.modcodes).s0 = 1;
- }
- break;
-
- case 324:
-#line 4102 "bfin-parse.y"
- {
- (yyval.modcodes).r0 = 0x18;
- (yyval.modcodes).x0 = (yyvsp[-1].r0).r0;
- (yyval.modcodes).s0 = 1;
- }
- break;
-
- case 325:
-#line 4112 "bfin-parse.y"
- {
- Expr_Node_Value val;
- val.s_value = S_GET_NAME((yyvsp[0].symbol));
- (yyval.expr) = Expr_Node_Create (Expr_Node_Reloc, val, NULL, NULL);
- }
- break;
-
- case 326:
-#line 4121 "bfin-parse.y"
- { (yyval.value) = BFD_RELOC_BFIN_GOT; }
- break;
-
- case 327:
-#line 4123 "bfin-parse.y"
- { (yyval.value) = BFD_RELOC_BFIN_GOT17M4; }
- break;
-
- case 328:
-#line 4125 "bfin-parse.y"
- { (yyval.value) = BFD_RELOC_BFIN_FUNCDESC_GOT17M4; }
- break;
-
- case 329:
-#line 4129 "bfin-parse.y"
- {
- Expr_Node_Value val;
- val.i_value = (yyvsp[0].value);
- (yyval.expr) = Expr_Node_Create (Expr_Node_GOT_Reloc, val, (yyvsp[-2].expr), NULL);
- }
- break;
-
- case 330:
-#line 4137 "bfin-parse.y"
- {
- (yyval.expr) = (yyvsp[0].expr);
- }
- break;
-
- case 331:
-#line 4141 "bfin-parse.y"
- {
- (yyval.expr) = (yyvsp[0].expr);
- }
- break;
-
- case 332:
-#line 4148 "bfin-parse.y"
- {
- (yyval.expr) = (yyvsp[-2].expr);
- }
- break;
-
- case 333:
-#line 4154 "bfin-parse.y"
- {
- Expr_Node_Value val;
- val.i_value = (yyvsp[0].value);
- (yyval.expr) = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
- }
- break;
-
- case 334:
-#line 4160 "bfin-parse.y"
- {
- (yyval.expr) = (yyvsp[0].expr);
- }
- break;
-
- case 335:
-#line 4164 "bfin-parse.y"
- {
- (yyval.expr) = (yyvsp[-1].expr);
- }
- break;
-
- case 336:
-#line 4168 "bfin-parse.y"
- {
- (yyval.expr) = unary (Expr_Op_Type_COMP, (yyvsp[0].expr));
- }
- break;
-
- case 337:
-#line 4172 "bfin-parse.y"
- {
- (yyval.expr) = unary (Expr_Op_Type_NEG, (yyvsp[0].expr));
- }
- break;
-
- case 338:
-#line 4178 "bfin-parse.y"
- {
- (yyval.expr) = (yyvsp[0].expr);
- }
- break;
-
- case 339:
-#line 4184 "bfin-parse.y"
- {
- (yyval.expr) = binary (Expr_Op_Type_Mult, (yyvsp[-2].expr), (yyvsp[0].expr));
- }
- break;
-
- case 340:
-#line 4188 "bfin-parse.y"
- {
- (yyval.expr) = binary (Expr_Op_Type_Div, (yyvsp[-2].expr), (yyvsp[0].expr));
- }
- break;
-
- case 341:
-#line 4192 "bfin-parse.y"
- {
- (yyval.expr) = binary (Expr_Op_Type_Mod, (yyvsp[-2].expr), (yyvsp[0].expr));
- }
- break;
-
- case 342:
-#line 4196 "bfin-parse.y"
- {
- (yyval.expr) = binary (Expr_Op_Type_Add, (yyvsp[-2].expr), (yyvsp[0].expr));
- }
- break;
-
- case 343:
-#line 4200 "bfin-parse.y"
- {
- (yyval.expr) = binary (Expr_Op_Type_Sub, (yyvsp[-2].expr), (yyvsp[0].expr));
- }
- break;
-
- case 344:
-#line 4204 "bfin-parse.y"
- {
- (yyval.expr) = binary (Expr_Op_Type_Lshift, (yyvsp[-2].expr), (yyvsp[0].expr));
- }
- break;
-
- case 345:
-#line 4208 "bfin-parse.y"
- {
- (yyval.expr) = binary (Expr_Op_Type_Rshift, (yyvsp[-2].expr), (yyvsp[0].expr));
- }
- break;
-
- case 346:
-#line 4212 "bfin-parse.y"
- {
- (yyval.expr) = binary (Expr_Op_Type_BAND, (yyvsp[-2].expr), (yyvsp[0].expr));
- }
- break;
-
- case 347:
-#line 4216 "bfin-parse.y"
- {
- (yyval.expr) = binary (Expr_Op_Type_LOR, (yyvsp[-2].expr), (yyvsp[0].expr));
- }
- break;
-
- case 348:
-#line 4220 "bfin-parse.y"
- {
- (yyval.expr) = binary (Expr_Op_Type_BOR, (yyvsp[-2].expr), (yyvsp[0].expr));
- }
- break;
-
- case 349:
-#line 4224 "bfin-parse.y"
- {
- (yyval.expr) = (yyvsp[0].expr);
- }
- break;
-
-
- default: break;
- }
-
-/* Line 1126 of yacc.c. */
-#line 7065 "bfin-parse.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 4230 "bfin-parse.y"
-
-
-EXPR_T
-mkexpr (int x, SYMBOL_T s)
-{
- EXPR_T e = (EXPR_T) ALLOCATE (sizeof (struct expression_cell));
- e->value = x;
- EXPR_SYMBOL(e) = s;
- return e;
-}
-
-static int
-value_match (Expr_Node *expr, int sz, int sign, int mul, int issigned)
-{
- long umax = (1L << sz) - 1;
- long min = -1L << (sz - 1);
- long max = (1L << (sz - 1)) - 1;
-
- long v = EXPR_VALUE (expr);
-
- if ((v % mul) != 0)
- {
- error ("%s:%d: Value Error -- Must align to %d\n", __FILE__, __LINE__, mul);
- return 0;
- }
-
- v /= mul;
-
- if (sign)
- v = -v;
-
- if (issigned)
- {
- if (v >= min && v <= max) return 1;
-
-#ifdef DEBUG
- fprintf(stderr, "signed value %lx out of range\n", v * mul);
-#endif
- return 0;
- }
- if (v <= umax && v >= 0)
- return 1;
-#ifdef DEBUG
- fprintf(stderr, "unsigned value %lx out of range\n", v * mul);
-#endif
- return 0;
-}
-
-/* Return the expression structure that allows symbol operations.
- If the left and right children are constants, do the operation. */
-static Expr_Node *
-binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y)
-{
- if (x->type == Expr_Node_Constant && y->type == Expr_Node_Constant)
- {
- switch (op)
- {
- case Expr_Op_Type_Add:
- x->value.i_value += y->value.i_value;
- break;
- case Expr_Op_Type_Sub:
- x->value.i_value -= y->value.i_value;
- break;
- case Expr_Op_Type_Mult:
- x->value.i_value *= y->value.i_value;
- break;
- case Expr_Op_Type_Div:
- if (y->value.i_value == 0)
- error ("Illegal Expression: Division by zero.");
- else
- x->value.i_value /= y->value.i_value;
- break;
- case Expr_Op_Type_Mod:
- x->value.i_value %= y->value.i_value;
- break;
- case Expr_Op_Type_Lshift:
- x->value.i_value <<= y->value.i_value;
- break;
- case Expr_Op_Type_Rshift:
- x->value.i_value >>= y->value.i_value;
- break;
- case Expr_Op_Type_BAND:
- x->value.i_value &= y->value.i_value;
- break;
- case Expr_Op_Type_BOR:
- x->value.i_value |= y->value.i_value;
- break;
- case Expr_Op_Type_BXOR:
- x->value.i_value ^= y->value.i_value;
- break;
- case Expr_Op_Type_LAND:
- x->value.i_value = x->value.i_value && y->value.i_value;
- break;
- case Expr_Op_Type_LOR:
- x->value.i_value = x->value.i_value || y->value.i_value;
- break;
-
- default:
- error ("%s:%d: Internal compiler error\n", __FILE__, __LINE__);
- }
- return x;
- }
- else
- {
- /* Create a new expression structure. */
- Expr_Node_Value val;
- val.op_value = op;
- return Expr_Node_Create (Expr_Node_Binop, val, x, y);
- }
-}
-
-static Expr_Node *
-unary (Expr_Op_Type op, Expr_Node *x)
-{
- if (x->type == Expr_Node_Constant)
- {
- switch (op)
- {
- case Expr_Op_Type_NEG:
- x->value.i_value = -x->value.i_value;
- break;
- case Expr_Op_Type_COMP:
- x->value.i_value = ~x->value.i_value;
- break;
- default:
- error ("%s:%d: Internal compiler error\n", __FILE__, __LINE__);
- }
- return x;
- }
- else
- {
- /* Create a new expression structure. */
- Expr_Node_Value val;
- val.op_value = op;
- return Expr_Node_Create (Expr_Node_Unop, val, x, NULL);
- }
-}
-
-int debug_codeselection = 0;
-static void
-notethat (char *format, ...)
-{
- va_list ap;
- va_start (ap, format);
- if (debug_codeselection)
- {
- vfprintf (errorf, format, ap);
- }
- va_end (ap);
-}
-
-#ifdef TEST
-main (int argc, char **argv)
-{
- yyparse();
-}
-#endif
-
-
diff --git a/gas/bfin-parse.h b/gas/bfin-parse.h
deleted file mode 100644
index 06403c81ec03..000000000000
--- a/gas/bfin-parse.h
+++ /dev/null
@@ -1,406 +0,0 @@
-/* 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 {
- BYTEOP16P = 258,
- BYTEOP16M = 259,
- BYTEOP1P = 260,
- BYTEOP2P = 261,
- BYTEOP2M = 262,
- BYTEOP3P = 263,
- BYTEUNPACK = 264,
- BYTEPACK = 265,
- PACK = 266,
- SAA = 267,
- ALIGN8 = 268,
- ALIGN16 = 269,
- ALIGN24 = 270,
- VIT_MAX = 271,
- EXTRACT = 272,
- DEPOSIT = 273,
- EXPADJ = 274,
- SEARCH = 275,
- ONES = 276,
- SIGN = 277,
- SIGNBITS = 278,
- LINK = 279,
- UNLINK = 280,
- REG = 281,
- PC = 282,
- CCREG = 283,
- BYTE_DREG = 284,
- REG_A_DOUBLE_ZERO = 285,
- REG_A_DOUBLE_ONE = 286,
- A_ZERO_DOT_L = 287,
- A_ZERO_DOT_H = 288,
- A_ONE_DOT_L = 289,
- A_ONE_DOT_H = 290,
- HALF_REG = 291,
- NOP = 292,
- RTI = 293,
- RTS = 294,
- RTX = 295,
- RTN = 296,
- RTE = 297,
- HLT = 298,
- IDLE = 299,
- STI = 300,
- CLI = 301,
- CSYNC = 302,
- SSYNC = 303,
- EMUEXCPT = 304,
- RAISE = 305,
- EXCPT = 306,
- LSETUP = 307,
- LOOP = 308,
- LOOP_BEGIN = 309,
- LOOP_END = 310,
- DISALGNEXCPT = 311,
- JUMP = 312,
- JUMP_DOT_S = 313,
- JUMP_DOT_L = 314,
- CALL = 315,
- ABORT = 316,
- NOT = 317,
- TILDA = 318,
- BANG = 319,
- AMPERSAND = 320,
- BAR = 321,
- PERCENT = 322,
- CARET = 323,
- BXOR = 324,
- MINUS = 325,
- PLUS = 326,
- STAR = 327,
- SLASH = 328,
- NEG = 329,
- MIN = 330,
- MAX = 331,
- ABS = 332,
- DOUBLE_BAR = 333,
- _PLUS_BAR_PLUS = 334,
- _PLUS_BAR_MINUS = 335,
- _MINUS_BAR_PLUS = 336,
- _MINUS_BAR_MINUS = 337,
- _MINUS_MINUS = 338,
- _PLUS_PLUS = 339,
- SHIFT = 340,
- LSHIFT = 341,
- ASHIFT = 342,
- BXORSHIFT = 343,
- _GREATER_GREATER_GREATER_THAN_ASSIGN = 344,
- ROT = 345,
- LESS_LESS = 346,
- GREATER_GREATER = 347,
- _GREATER_GREATER_GREATER = 348,
- _LESS_LESS_ASSIGN = 349,
- _GREATER_GREATER_ASSIGN = 350,
- DIVS = 351,
- DIVQ = 352,
- ASSIGN = 353,
- _STAR_ASSIGN = 354,
- _BAR_ASSIGN = 355,
- _CARET_ASSIGN = 356,
- _AMPERSAND_ASSIGN = 357,
- _MINUS_ASSIGN = 358,
- _PLUS_ASSIGN = 359,
- _ASSIGN_BANG = 360,
- _LESS_THAN_ASSIGN = 361,
- _ASSIGN_ASSIGN = 362,
- GE = 363,
- LT = 364,
- LE = 365,
- GT = 366,
- LESS_THAN = 367,
- FLUSHINV = 368,
- FLUSH = 369,
- IFLUSH = 370,
- PREFETCH = 371,
- PRNT = 372,
- OUTC = 373,
- WHATREG = 374,
- TESTSET = 375,
- ASL = 376,
- ASR = 377,
- B = 378,
- W = 379,
- NS = 380,
- S = 381,
- CO = 382,
- SCO = 383,
- TH = 384,
- TL = 385,
- BP = 386,
- BREV = 387,
- X = 388,
- Z = 389,
- M = 390,
- MMOD = 391,
- R = 392,
- RND = 393,
- RNDL = 394,
- RNDH = 395,
- RND12 = 396,
- RND20 = 397,
- V = 398,
- LO = 399,
- HI = 400,
- BITTGL = 401,
- BITCLR = 402,
- BITSET = 403,
- BITTST = 404,
- BITMUX = 405,
- DBGAL = 406,
- DBGAH = 407,
- DBGHALT = 408,
- DBG = 409,
- DBGA = 410,
- DBGCMPLX = 411,
- IF = 412,
- COMMA = 413,
- BY = 414,
- COLON = 415,
- SEMICOLON = 416,
- RPAREN = 417,
- LPAREN = 418,
- LBRACK = 419,
- RBRACK = 420,
- STATUS_REG = 421,
- MNOP = 422,
- SYMBOL = 423,
- NUMBER = 424,
- GOT = 425,
- GOT17M4 = 426,
- FUNCDESC_GOT17M4 = 427,
- AT = 428,
- PLTPC = 429
- };
-#endif
-/* Tokens. */
-#define BYTEOP16P 258
-#define BYTEOP16M 259
-#define BYTEOP1P 260
-#define BYTEOP2P 261
-#define BYTEOP2M 262
-#define BYTEOP3P 263
-#define BYTEUNPACK 264
-#define BYTEPACK 265
-#define PACK 266
-#define SAA 267
-#define ALIGN8 268
-#define ALIGN16 269
-#define ALIGN24 270
-#define VIT_MAX 271
-#define EXTRACT 272
-#define DEPOSIT 273
-#define EXPADJ 274
-#define SEARCH 275
-#define ONES 276
-#define SIGN 277
-#define SIGNBITS 278
-#define LINK 279
-#define UNLINK 280
-#define REG 281
-#define PC 282
-#define CCREG 283
-#define BYTE_DREG 284
-#define REG_A_DOUBLE_ZERO 285
-#define REG_A_DOUBLE_ONE 286
-#define A_ZERO_DOT_L 287
-#define A_ZERO_DOT_H 288
-#define A_ONE_DOT_L 289
-#define A_ONE_DOT_H 290
-#define HALF_REG 291
-#define NOP 292
-#define RTI 293
-#define RTS 294
-#define RTX 295
-#define RTN 296
-#define RTE 297
-#define HLT 298
-#define IDLE 299
-#define STI 300
-#define CLI 301
-#define CSYNC 302
-#define SSYNC 303
-#define EMUEXCPT 304
-#define RAISE 305
-#define EXCPT 306
-#define LSETUP 307
-#define LOOP 308
-#define LOOP_BEGIN 309
-#define LOOP_END 310
-#define DISALGNEXCPT 311
-#define JUMP 312
-#define JUMP_DOT_S 313
-#define JUMP_DOT_L 314
-#define CALL 315
-#define ABORT 316
-#define NOT 317
-#define TILDA 318
-#define BANG 319
-#define AMPERSAND 320
-#define BAR 321
-#define PERCENT 322
-#define CARET 323
-#define BXOR 324
-#define MINUS 325
-#define PLUS 326
-#define STAR 327
-#define SLASH 328
-#define NEG 329
-#define MIN 330
-#define MAX 331
-#define ABS 332
-#define DOUBLE_BAR 333
-#define _PLUS_BAR_PLUS 334
-#define _PLUS_BAR_MINUS 335
-#define _MINUS_BAR_PLUS 336
-#define _MINUS_BAR_MINUS 337
-#define _MINUS_MINUS 338
-#define _PLUS_PLUS 339
-#define SHIFT 340
-#define LSHIFT 341
-#define ASHIFT 342
-#define BXORSHIFT 343
-#define _GREATER_GREATER_GREATER_THAN_ASSIGN 344
-#define ROT 345
-#define LESS_LESS 346
-#define GREATER_GREATER 347
-#define _GREATER_GREATER_GREATER 348
-#define _LESS_LESS_ASSIGN 349
-#define _GREATER_GREATER_ASSIGN 350
-#define DIVS 351
-#define DIVQ 352
-#define ASSIGN 353
-#define _STAR_ASSIGN 354
-#define _BAR_ASSIGN 355
-#define _CARET_ASSIGN 356
-#define _AMPERSAND_ASSIGN 357
-#define _MINUS_ASSIGN 358
-#define _PLUS_ASSIGN 359
-#define _ASSIGN_BANG 360
-#define _LESS_THAN_ASSIGN 361
-#define _ASSIGN_ASSIGN 362
-#define GE 363
-#define LT 364
-#define LE 365
-#define GT 366
-#define LESS_THAN 367
-#define FLUSHINV 368
-#define FLUSH 369
-#define IFLUSH 370
-#define PREFETCH 371
-#define PRNT 372
-#define OUTC 373
-#define WHATREG 374
-#define TESTSET 375
-#define ASL 376
-#define ASR 377
-#define B 378
-#define W 379
-#define NS 380
-#define S 381
-#define CO 382
-#define SCO 383
-#define TH 384
-#define TL 385
-#define BP 386
-#define BREV 387
-#define X 388
-#define Z 389
-#define M 390
-#define MMOD 391
-#define R 392
-#define RND 393
-#define RNDL 394
-#define RNDH 395
-#define RND12 396
-#define RND20 397
-#define V 398
-#define LO 399
-#define HI 400
-#define BITTGL 401
-#define BITCLR 402
-#define BITSET 403
-#define BITTST 404
-#define BITMUX 405
-#define DBGAL 406
-#define DBGAH 407
-#define DBGHALT 408
-#define DBG 409
-#define DBGA 410
-#define DBGCMPLX 411
-#define IF 412
-#define COMMA 413
-#define BY 414
-#define COLON 415
-#define SEMICOLON 416
-#define RPAREN 417
-#define LPAREN 418
-#define LBRACK 419
-#define RBRACK 420
-#define STATUS_REG 421
-#define MNOP 422
-#define SYMBOL 423
-#define NUMBER 424
-#define GOT 425
-#define GOT17M4 426
-#define FUNCDESC_GOT17M4 427
-#define AT 428
-#define PLTPC 429
-
-
-
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 366 "bfin-parse.y"
-typedef union YYSTYPE {
- INSTR_T instr;
- Expr_Node *expr;
- SYMBOL_T symbol;
- long value;
- Register reg;
- Macfunc macfunc;
- struct { int r0; int s0; int x0; int aop; } modcodes;
- struct { int r0; } r0;
- Opt_mode mod;
-} YYSTYPE;
-/* Line 1447 of yacc.c. */
-#line 398 "bfin-parse.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/gas/cgen.c b/gas/cgen.c
index 363c05e5318a..5b0694b03e22 100644
--- a/gas/cgen.c
+++ b/gas/cgen.c
@@ -1,6 +1,6 @@
/* GAS interface for targets using CGEN: Cpu tools GENerator.
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -19,16 +19,34 @@
Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
#include <setjmp.h>
-#include "ansidecl.h"
-#include "libiberty.h"
-#include "bfd.h"
+#include "as.h"
#include "symcat.h"
#include "cgen-desc.h"
-#include "as.h"
#include "subsegs.h"
#include "cgen.h"
#include "dwarf2dbg.h"
+#include "symbols.h"
+#include "struc-symbol.h"
+
+#ifdef OBJ_COMPLEX_RELC
+static expressionS * make_right_shifted_expr
+ (expressionS *, const int, const int);
+
+static unsigned long gas_cgen_encode_addend
+ (const unsigned long, const unsigned long, const unsigned long, \
+ const unsigned long, const unsigned long, const unsigned long, \
+ const unsigned long);
+
+static char * weak_operand_overflow_check
+ (const expressionS *, const CGEN_OPERAND *);
+
+static void queue_fixup_recursively
+ (const int, const int, expressionS *, \
+ const CGEN_MAYBE_MULTI_IFLD *, const int, const int);
+
+static int rightshift = 0;
+#endif
static void queue_fixup (int, int, expressionS *);
/* Opcode table descriptor, must be set by md_begin. */
@@ -66,6 +84,8 @@ struct fixup
int opindex;
int opinfo;
expressionS exp;
+ struct cgen_maybe_multi_ifield * field;
+ int msb_field_p;
};
static struct fixup fixups[GAS_CGEN_MAX_FIXUPS];
@@ -249,6 +269,8 @@ gas_cgen_record_fixup (frag, where, insn, length, operand, opinfo, symbol, offse
+ (int) operand->type));
fixP->fx_cgen.insn = insn;
fixP->fx_cgen.opinfo = opinfo;
+ fixP->fx_cgen.field = NULL;
+ fixP->fx_cgen.msb_field_p = 0;
return fixP;
}
@@ -287,10 +309,26 @@ gas_cgen_record_fixup_exp (frag, where, insn, length, operand, opinfo, exp)
+ (int) operand->type));
fixP->fx_cgen.insn = insn;
fixP->fx_cgen.opinfo = opinfo;
+ fixP->fx_cgen.field = NULL;
+ fixP->fx_cgen.msb_field_p = 0;
return fixP;
}
+#ifdef OBJ_COMPLEX_RELC
+static symbolS *
+expr_build_binary (operatorT op, symbolS * s1, symbolS * s2)
+{
+ expressionS e;
+
+ e.X_op = op;
+ e.X_add_symbol = s1;
+ e.X_op_symbol = s2;
+ e.X_add_number = 0;
+ return make_expr_symbol (& e);
+}
+#endif
+
/* Used for communication between the next two procedures. */
static jmp_buf expr_jmp_buf;
static int expr_jmp_buf_p;
@@ -308,7 +346,12 @@ static int expr_jmp_buf_p;
const char *
gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP)
+
+#ifdef OBJ_COMPLEX_RELC
+ CGEN_CPU_DESC cd;
+#else
CGEN_CPU_DESC cd ATTRIBUTE_UNUSED;
+#endif
enum cgen_parse_operand_type want;
const char **strP;
int opindex;
@@ -329,6 +372,13 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP)
const char *errmsg;
expressionS exp;
+#ifdef OBJ_COMPLEX_RELC
+ volatile int signed_p = 0;
+ symbolS * stmp = NULL;
+ bfd_reloc_code_real_type reloc_type;
+ const CGEN_OPERAND * operand;
+ fixS dummy_fixup;
+#endif
if (want == CGEN_PARSE_OPERAND_INIT)
{
gas_cgen_init_parse ();
@@ -386,9 +436,82 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP)
break;
de_fault:
default:
+#ifdef OBJ_COMPLEX_RELC
+ /* Look up operand, check to see if there's an obvious
+ overflow (this helps disambiguate some insn parses). */
+ operand = cgen_operand_lookup_by_num (cd, opindex);
+ errmsg = weak_operand_overflow_check (& exp, operand);
+
+ if (! errmsg)
+ {
+ /* Fragment the expression as necessary, and queue a reloc. */
+ memset (& dummy_fixup, 0, sizeof (fixS));
+
+ reloc_type = md_cgen_lookup_reloc (0, operand, & dummy_fixup);
+
+ if (exp.X_op == O_symbol
+ && reloc_type == BFD_RELOC_RELC
+ && exp.X_add_symbol->sy_value.X_op == O_constant
+ && exp.X_add_symbol->bsym->section != expr_section
+ && exp.X_add_symbol->bsym->section != absolute_section
+ && exp.X_add_symbol->bsym->section != undefined_section)
+ {
+ /* Local labels will have been (eagerly) turned into constants
+ by now, due to the inappropriately deep insight of the
+ expression parser. Unfortunately make_expr_symbol
+ prematurely dives into the symbol evaluator, and in this
+ case it gets a bad answer, so we manually create the
+ expression symbol we want here. */
+ stmp = symbol_create (FAKE_LABEL_NAME, expr_section, 0,
+ & zero_address_frag);
+ symbol_set_value_expression (stmp, & exp);
+ }
+ else
+ stmp = make_expr_symbol (& exp);
+
+ /* If this is a pc-relative RELC operand, we
+ need to subtract "." from the expression. */
+ if (reloc_type == BFD_RELOC_RELC
+ && CGEN_OPERAND_ATTR_VALUE (operand, CGEN_OPERAND_PCREL_ADDR))
+ stmp = expr_build_binary (O_subtract, stmp, expr_build_dot ());
+
+ /* FIXME: this is not a perfect heuristic for figuring out
+ whether an operand is signed: it only works when the operand
+ is an immediate. it's not terribly likely that any other
+ values will be signed relocs, but it's possible. */
+ if (operand && (operand->hw_type == HW_H_SINT))
+ signed_p = 1;
+
+ if (stmp->bsym && (stmp->bsym->section == expr_section))
+ {
+ if (signed_p)
+ stmp->bsym->flags |= BSF_SRELC;
+ else
+ stmp->bsym->flags |= BSF_RELC;
+ }
+
+ /* Now package it all up for the fixup emitter. */
+ exp.X_op = O_symbol;
+ exp.X_op_symbol = 0;
+ exp.X_add_symbol = stmp;
+ exp.X_add_number = 0;
+
+ /* Re-init rightshift quantity, just in case. */
+ rightshift = operand->length;
+ queue_fixup_recursively (opindex, opinfo_1, & exp,
+ (reloc_type == BFD_RELOC_RELC) ?
+ & (operand->index_fields) : 0,
+ signed_p, -1);
+ }
+ * resultP = errmsg
+ ? CGEN_PARSE_OPERAND_RESULT_ERROR
+ : CGEN_PARSE_OPERAND_RESULT_QUEUED;
+ *valueP = 0;
+#else
queue_fixup (opindex, opinfo_1, &exp);
*valueP = 0;
*resultP = CGEN_PARSE_OPERAND_RESULT_QUEUED;
+#endif
break;
}
@@ -556,6 +679,8 @@ gas_cgen_finish_insn (insn, buf, length, relax_p, result)
insn, length, operand,
fixups[i].opinfo,
&fixups[i].exp);
+ fixP->fx_cgen.field = fixups[i].field;
+ fixP->fx_cgen.msb_field_p = fixups[i].msb_field_p;
if (result)
result->fixups[i] = fixP;
}
@@ -567,6 +692,167 @@ gas_cgen_finish_insn (insn, buf, length, relax_p, result)
}
}
+#ifdef OBJ_COMPLEX_RELC
+/* Queue many fixups, recursively. If the field is a multi-ifield,
+ repeatedly queue its sub-parts, right shifted to fit into the field (we
+ assume here multi-fields represent a left-to-right, MSB0-LSB0
+ reading). */
+
+static void
+queue_fixup_recursively (const int opindex,
+ const int opinfo,
+ expressionS * expP,
+ const CGEN_MAYBE_MULTI_IFLD * field,
+ const int signed_p,
+ const int part_of_multi)
+{
+ if (field && field->count)
+ {
+ int i;
+
+ for (i = 0; i < field->count; ++ i)
+ queue_fixup_recursively (opindex, opinfo, expP,
+ & (field->val.multi[i]), signed_p, i);
+ }
+ else
+ {
+ expressionS * new_exp = expP;
+
+#ifdef DEBUG
+ printf ("queueing fixup for field %s\n",
+ (field ? field->val.leaf->name : "??"));
+ print_symbol_value (expP->X_add_symbol);
+#endif
+ if (field && part_of_multi != -1)
+ {
+ rightshift -= field->val.leaf->length;
+
+ /* Shift reloc value by number of bits remaining after this
+ field. */
+ if (rightshift)
+ new_exp = make_right_shifted_expr (expP, rightshift, signed_p);
+ }
+
+ /* Truncate reloc values to length, *after* leftmost one. */
+ fixups[num_fixups].msb_field_p = (part_of_multi <= 0);
+ fixups[num_fixups].field = (CGEN_MAYBE_MULTI_IFLD *) field;
+
+ queue_fixup (opindex, opinfo, new_exp);
+ }
+}
+
+/* Encode the self-describing RELC reloc format's addend. */
+
+static unsigned long
+gas_cgen_encode_addend (const unsigned long start, /* in bits */
+ const unsigned long len, /* in bits */
+ const unsigned long oplen, /* in bits */
+ const unsigned long wordsz, /* in bytes */
+ const unsigned long chunksz, /* in bytes */
+ const unsigned long signed_p,
+ const unsigned long trunc_p)
+{
+ unsigned long res = 0L;
+
+ res |= start & 0x3F;
+ res |= (oplen & 0x3F) << 6;
+ res |= (len & 0x3F) << 12;
+ res |= (wordsz & 0xF) << 18;
+ res |= (chunksz & 0xF) << 22;
+ res |= (CGEN_INSN_LSB0_P ? 1 : 0) << 27;
+ res |= signed_p << 28;
+ res |= trunc_p << 29;
+
+ return res;
+}
+
+/* Purpose: make a weak check that the expression doesn't overflow the
+ operand it's to be inserted into.
+
+ Rationale: some insns used to use %operators to disambiguate during a
+ parse. when these %operators are translated to expressions by the macro
+ expander, the ambiguity returns. we attempt to disambiguate by field
+ size.
+
+ Method: check to see if the expression's top node is an O_and operator,
+ and the mask is larger than the operand length. This would be an
+ overflow, so signal it by returning an error string. Any other case is
+ ambiguous, so we assume it's OK and return NULL. */
+
+static char *
+weak_operand_overflow_check (const expressionS * exp,
+ const CGEN_OPERAND * operand)
+{
+ const unsigned long len = operand->length;
+ unsigned long mask;
+ unsigned long opmask = (((1L << (len - 1)) - 1) << 1) | 1;
+
+ if (!exp)
+ return NULL;
+
+ if (exp->X_op != O_bit_and)
+ {
+ /* Check for implicit overflow flag. */
+ if (CGEN_OPERAND_ATTR_VALUE
+ (operand, CGEN_OPERAND_RELOC_IMPLIES_OVERFLOW))
+ return _("a reloc on this operand implies an overflow");
+ return NULL;
+ }
+
+ mask = exp->X_add_number;
+
+ if (exp->X_add_symbol &&
+ exp->X_add_symbol->sy_value.X_op == O_constant)
+ mask |= exp->X_add_symbol->sy_value.X_add_number;
+
+ if (exp->X_op_symbol &&
+ exp->X_op_symbol->sy_value.X_op == O_constant)
+ mask |= exp->X_op_symbol->sy_value.X_add_number;
+
+ /* Want to know if mask covers more bits than opmask.
+ this is the same as asking if mask has any bits not in opmask,
+ or whether (mask & ~opmask) is nonzero. */
+ if (mask && (mask & ~opmask))
+ {
+#ifdef DEBUG
+ printf ("overflow: (mask = %8.8x, ~opmask = %8.8x, AND = %8.8x)\n",
+ mask, ~opmask, (mask & ~opmask));
+#endif
+ return _("operand mask overflow");
+ }
+
+ return NULL;
+}
+
+
+static expressionS *
+make_right_shifted_expr (expressionS * exp,
+ const int amount,
+ const int signed_p)
+{
+ symbolS * stmp = 0;
+ expressionS * new_exp;
+
+ stmp = expr_build_binary (O_right_shift,
+ make_expr_symbol (exp),
+ expr_build_uconstant (amount));
+
+ if (signed_p)
+ stmp->bsym->flags |= BSF_SRELC;
+ else
+ stmp->bsym->flags |= BSF_RELC;
+
+ /* Then wrap that in a "symbol expr" for good measure. */
+ new_exp = xmalloc (sizeof (expressionS));
+ memset (new_exp, 0, sizeof (expressionS));
+ new_exp->X_op = O_symbol;
+ new_exp->X_op_symbol = 0;
+ new_exp->X_add_symbol = stmp;
+ new_exp->X_add_number = 0;
+
+ return new_exp;
+}
+#endif
/* Apply a fixup to the object code. This is called for all the
fixups we generated by the call to fix_new_exp, above. In the call
above we used a reloc code which was the largest legal reloc code
@@ -605,6 +891,30 @@ gas_cgen_md_apply_fix (fixP, valP, seg)
bfd_reloc_code_real_type reloc_type;
CGEN_FIELDS *fields = alloca (CGEN_CPU_SIZEOF_FIELDS (cd));
const CGEN_INSN *insn = fixP->fx_cgen.insn;
+ int start;
+ int length;
+ int signed_p = 0;
+
+ if (fixP->fx_cgen.field)
+ {
+ /* Use the twisty little pointer path
+ back to the ifield if it exists. */
+ start = fixP->fx_cgen.field->val.leaf->start;
+ length = fixP->fx_cgen.field->val.leaf->length;
+ }
+ else
+ {
+ /* Or the far less useful operand-size guesstimate. */
+ start = operand->start;
+ length = operand->length;
+ }
+
+ /* FIXME: this is not a perfect heuristic for figuring out
+ whether an operand is signed: it only works when the operand
+ is an immediate. it's not terribly likely that any other
+ values will be signed relocs, but it's possible. */
+ if (operand && (operand->hw_type == HW_H_SINT))
+ signed_p = 1;
/* If the reloc has been fully resolved finish the operand here. */
/* FIXME: This duplicates the capabilities of code in BFD. */
@@ -647,6 +957,18 @@ gas_cgen_md_apply_fix (fixP, valP, seg)
partial_inplace == false. */
reloc_type = md_cgen_lookup_reloc (insn, operand, fixP);
+#ifdef OBJ_COMPLEX_RELC
+ if (reloc_type == BFD_RELOC_RELC)
+ {
+ /* Change addend to "self-describing" form,
+ for BFD to handle in the linker. */
+ value = gas_cgen_encode_addend (start, operand->length,
+ length, fixP->fx_size,
+ cd->insn_chunk_bitsize / 8,
+ signed_p,
+ ! (fixP->fx_cgen.msb_field_p));
+ }
+#endif
if (reloc_type != BFD_RELOC_NONE)
fixP->fx_r_type = reloc_type;
@@ -702,7 +1024,6 @@ gas_cgen_tc_gen_reloc (section, fixP)
fixS * fixP;
{
arelent *reloc;
-
reloc = (arelent *) xmalloc (sizeof (arelent));
reloc->howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
@@ -740,3 +1061,4 @@ gas_cgen_begin ()
else
cgen_clear_signed_overflow_ok (gas_cgen_cpu_desc);
}
+
diff --git a/gas/cond.c b/gas/cond.c
index d6c32acc2532..d76e4d98d9a2 100644
--- a/gas/cond.c
+++ b/gas/cond.c
@@ -1,6 +1,6 @@
/* cond.c - conditional assembly pseudo-ops, and .include
Copyright 1990, 1991, 1992, 1993, 1995, 1997, 1998, 2000, 2001, 2002,
- 2003 Free Software Foundation, Inc.
+ 2003, 2006 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -20,6 +20,7 @@
02110-1301, USA. */
#include "as.h"
+#include "sb.h"
#include "macro.h"
#include "obstack.h"
diff --git a/gas/config.in b/gas/config.in
index b15d8024aba2..20d5df9a4e2f 100644
--- a/gas/config.in
+++ b/gas/config.in
@@ -29,7 +29,11 @@
/* Supported emulations. */
#undef EMULATIONS
-/* Define to 1 if NLS is requested */
+/* Define if you want run-time sanity checks. */
+#undef ENABLE_CHECKING
+
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
#undef ENABLE_NLS
/* Define to 1 if you have `alloca', as a function or macro. */
@@ -39,12 +43,6 @@
*/
#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
-
/* Is the prototype for getopt in <unistd.h> in the expected format? */
#undef HAVE_DECL_GETOPT
@@ -52,60 +50,24 @@
don't. */
#undef HAVE_DECL_VSNPRINTF
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
/* Define to 1 if you have the <errno.h> header file. */
#undef HAVE_ERRNO_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 <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 <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 `remove' function. */
#undef HAVE_REMOVE
/* 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 <stdarg.h> header file. */
#undef HAVE_STDARG_H
@@ -115,24 +77,12 @@
/* 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/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
@@ -145,24 +95,16 @@
/* Define to 1 if you have the `unlink' function. */
#undef HAVE_UNLINK
-/* Define to 1 if you have the <values.h> header file. */
-#undef HAVE_VALUES_H
-
/* Define to 1 if you have the <varargs.h> header file. */
#undef HAVE_VARARGS_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
-
/* Using i386 COFF? */
#undef I386COFF
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#undef LT_OBJDIR
+
/* Using m68k COFF? */
#undef M68KCOFF
@@ -217,9 +159,6 @@
/* generic support? */
#undef OBJ_MAYBE_GENERIC
-/* IEEE support? */
-#undef OBJ_MAYBE_IEEE
-
/* SOM support? */
#undef OBJ_MAYBE_SOM
@@ -282,6 +221,9 @@
/* Target vendor. */
#undef TARGET_VENDOR
+/* Use b modifier when opening binary files? */
+#undef USE_BINARY_FOPEN
+
/* Use emulation support? */
#undef USE_EMULATIONS
@@ -302,17 +244,8 @@
`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/gas/config/atof-vax.c b/gas/config/atof-vax.c
index 75756904fb89..fe9f8b9b1063 100644
--- a/gas/config/atof-vax.c
+++ b/gas/config/atof-vax.c
@@ -1,5 +1,5 @@
/* atof_vax.c - turn a Flonum into a VAX floating point number
- Copyright 1987, 1992, 1993, 1995, 1997, 1999, 2000, 2005
+ Copyright 1987, 1992, 1993, 1995, 1997, 1999, 2000, 2005, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -35,7 +35,7 @@ int flonum_gen2vax (int, FLONUM_TYPE *, LITTLENUM_TYPE *);
/* Number of chars in flonum type 'letter'. */
-static int
+static unsigned int
atof_vax_sizeof (int letter)
{
int return_value;
@@ -395,7 +395,7 @@ md_atof (int what_statement_type,
{
LITTLENUM_TYPE words[MAXIMUM_NUMBER_OF_LITTLENUMS];
char kind_of_float;
- int number_of_chars;
+ unsigned int number_of_chars;
LITTLENUM_TYPE *littlenumP;
switch (what_statement_type)
diff --git a/gas/config/bfin-defs.h b/gas/config/bfin-defs.h
index 48bacb3ed7d4..f94107136cf7 100644
--- a/gas/config/bfin-defs.h
+++ b/gas/config/bfin-defs.h
@@ -1,5 +1,5 @@
/* bfin-defs.h ADI Blackfin gas header file
- Copyright 2005
+ Copyright 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -22,9 +22,6 @@
#ifndef BFIN_PARSE_H
#define BFIN_PARSE_H
-#include <bfd.h>
-#include "as.h"
-
#define PCREL 1
#define CODE_FRAG_SIZE 4096 /* 1 page. */
@@ -374,7 +371,6 @@ void semantic_error_2 (char *syntax);
EXPR_T mkexpr (int, SYMBOL_T);
-extern void bfin_equals (Expr_Node *sym);
/* Defined in bfin-lex.l. */
void set_start_state (void);
diff --git a/gas/config/bfin-lex.l b/gas/config/bfin-lex.l
index 3a0077cd9854..21f284541324 100644
--- a/gas/config/bfin-lex.l
+++ b/gas/config/bfin-lex.l
@@ -1,5 +1,5 @@
/* bfin-lex.l ADI Blackfin lexer
- Copyright 2005
+ Copyright 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -20,11 +20,9 @@
02110-1301, USA. */
%{
-#include <stdlib.h>
-#include <string.h>
+#include "as.h"
#include "bfin-defs.h"
#include "bfin-parse.h"
-#include "as.h"
static long parse_int (char **end);
static int parse_halfreg (Register *r, int cl, char *hr);
diff --git a/gas/config/bfin-parse.y b/gas/config/bfin-parse.y
index 917c2d27ba0f..b3416aa1130a 100644
--- a/gas/config/bfin-parse.y
+++ b/gas/config/bfin-parse.y
@@ -1,5 +1,5 @@
/* bfin-parse.y ADI Blackfin parser
- Copyright 2005
+ Copyright 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -20,8 +20,7 @@
02110-1301, USA. */
%{
-#include <stdio.h>
-#include <stdarg.h>
+#include "as.h"
#include <obstack.h>
#include "bfin-aux.h" // opcode generating auxiliaries
@@ -298,9 +297,10 @@ check_macfuncs (Macfunc *aa, Opt_mode *opa,
return yyerror ("Vector AxMACs can't be same");
}
- /* If both ops are != 3, we have multiply_halfregs in both
+ /* If both ops are one of 0, 1, or 2, we have multiply_halfregs in both
assignment_or_macfuncs. */
- if (aa->op == ab->op && aa->op != 3)
+ if (aa->op < 3 && aa->op >=0
+ && ab->op < 3 && ab->op >= 0)
{
if (check_multiply_halfregs (aa, ab) < 0)
return -1;
@@ -1730,7 +1730,7 @@ asm_1:
$$ = DSP32MULT (0, 0, $4.mod, 0, 0,
0, 0, IS_H ($3.s0), IS_H ($3.s1),
&$1, 0, &$3.s0, &$3.s1, 1);
- }
+ }
}
| REG ASSIGN multiply_halfregs opt_mode
@@ -1739,6 +1739,9 @@ asm_1:
if (!IS_DREG ($1))
return yyerror ("Dreg expected");
+ if (IS_EVEN ($1) && $4.MM)
+ return yyerror ("(M) not allowed with MAC0");
+
if (!IS_EVEN ($1))
{
notethat ("dsp32mult: dregs = multiply_halfregs (opt_mode)\n");
@@ -1747,15 +1750,13 @@ asm_1:
IS_H ($3.s0), IS_H ($3.s1), 0, 0,
&$1, 0, &$3.s0, &$3.s1, 0);
}
- else if ($4.MM == 0)
+ else
{
notethat ("dsp32mult: dregs = multiply_halfregs opt_mode\n");
$$ = DSP32MULT (0, 0, $4.mod, 0, 1,
0, 0, IS_H ($3.s0), IS_H ($3.s1),
&$1, 0, &$3.s0, &$3.s1, 1);
}
- else
- return yyerror ("Register or mode mismatch");
}
| HALF_REG ASSIGN multiply_halfregs opt_mode COMMA
@@ -1764,57 +1765,56 @@ asm_1:
if (!IS_DREG ($1) || !IS_DREG ($6))
return yyerror ("Dregs expected");
+ if (!IS_HCOMPL($1, $6))
+ return yyerror ("Dest registers mismatch");
+
if (check_multiply_halfregs (&$3, &$8) < 0)
return -1;
- if (IS_H ($1) && !IS_H ($6))
- {
- notethat ("dsp32mult: dregs_hi = multiply_halfregs mxd_mod, "
- "dregs_lo = multiply_halfregs opt_mode\n");
- $$ = DSP32MULT (0, $4.MM, $9.mod, 1, 0,
- IS_H ($3.s0), IS_H ($3.s1), IS_H ($8.s0), IS_H ($8.s1),
- &$1, 0, &$3.s0, &$3.s1, 1);
- }
- else if (!IS_H ($1) && IS_H ($6) && $4.MM == 0)
- {
- $$ = DSP32MULT (0, $9.MM, $9.mod, 1, 0,
- IS_H ($8.s0), IS_H ($8.s1), IS_H ($3.s0), IS_H ($3.s1),
- &$1, 0, &$3.s0, &$3.s1, 1);
- }
+ if ((!IS_H ($1) && $4.MM)
+ || (!IS_H ($6) && $9.MM))
+ return yyerror ("(M) not allowed with MAC0");
+
+ notethat ("dsp32mult: dregs_hi = multiply_halfregs mxd_mod, "
+ "dregs_lo = multiply_halfregs opt_mode\n");
+
+ if (IS_H ($1))
+ $$ = DSP32MULT (0, $4.MM, $9.mod, 1, 0,
+ IS_H ($3.s0), IS_H ($3.s1), IS_H ($8.s0), IS_H ($8.s1),
+ &$1, 0, &$3.s0, &$3.s1, 1);
else
- return yyerror ("Multfunc Register or mode mismatch");
+ $$ = DSP32MULT (0, $9.MM, $9.mod, 1, 0,
+ IS_H ($8.s0), IS_H ($8.s1), IS_H ($3.s0), IS_H ($3.s1),
+ &$1, 0, &$3.s0, &$3.s1, 1);
}
- | REG ASSIGN multiply_halfregs opt_mode COMMA REG ASSIGN multiply_halfregs opt_mode
+ | REG ASSIGN multiply_halfregs opt_mode COMMA REG ASSIGN multiply_halfregs opt_mode
{
if (!IS_DREG ($1) || !IS_DREG ($6))
return yyerror ("Dregs expected");
+ if ((IS_EVEN ($1) && $6.regno - $1.regno != 1)
+ || (IS_EVEN ($6) && $1.regno - $6.regno != 1))
+ return yyerror ("Dest registers mismatch");
+
if (check_multiply_halfregs (&$3, &$8) < 0)
return -1;
+ if ((IS_EVEN ($1) && $4.MM)
+ || (IS_EVEN ($6) && $9.MM))
+ return yyerror ("(M) not allowed with MAC0");
+
notethat ("dsp32mult: dregs = multiply_halfregs mxd_mod, "
"dregs = multiply_halfregs opt_mode\n");
- if (IS_EVEN ($1))
- {
- if ($6.regno - $1.regno != 1 || $4.MM != 0)
- return yyerror ("Dest registers or mode mismatch");
- /* op1 MM mmod */
- $$ = DSP32MULT (0, 0, $9.mod, 1, 1,
- IS_H ($8.s0), IS_H ($8.s1), IS_H ($3.s0), IS_H ($3.s1),
- &$1, 0, &$3.s0, &$3.s1, 1);
-
- }
+ if (IS_EVEN ($1))
+ $$ = DSP32MULT (0, $9.MM, $9.mod, 1, 1,
+ IS_H ($8.s0), IS_H ($8.s1), IS_H ($3.s0), IS_H ($3.s1),
+ &$1, 0, &$3.s0, &$3.s1, 1);
else
- {
- if ($1.regno - $6.regno != 1)
- return yyerror ("Dest registers mismatch");
-
- $$ = DSP32MULT (0, $9.MM, $9.mod, 1, 1,
- IS_H ($3.s0), IS_H ($3.s1), IS_H ($8.s0), IS_H ($8.s1),
- &$1, 0, &$3.s0, &$3.s1, 1);
- }
+ $$ = DSP32MULT (0, $4.MM, $9.mod, 1, 1,
+ IS_H ($3.s0), IS_H ($3.s1), IS_H ($8.s0), IS_H ($8.s1),
+ &$1, 0, &$3.s0, &$3.s1, 1);
}
@@ -3223,16 +3223,6 @@ asm_1:
}
-
-/* Expression Assignment. */
-
- | expr ASSIGN expr
- {
- bfin_equals ($1);
- $$ = 0;
- }
-
-
/* PushPopMultiple. */
| reg_with_predec ASSIGN LPAREN REG COLON expr COMMA REG COLON expr RPAREN
{
@@ -4280,6 +4270,8 @@ value_match (Expr_Node *expr, int sz, int sign, int mul, int issigned)
static Expr_Node *
binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y)
{
+ Expr_Node_Value val;
+
if (x->type == Expr_Node_Constant && y->type == Expr_Node_Constant)
{
switch (op)
@@ -4329,13 +4321,32 @@ binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y)
}
return x;
}
- else
+ /* Canonicalize order to EXPR OP CONSTANT. */
+ if (x->type == Expr_Node_Constant)
{
- /* Create a new expression structure. */
- Expr_Node_Value val;
- val.op_value = op;
- return Expr_Node_Create (Expr_Node_Binop, val, x, y);
- }
+ Expr_Node *t = x;
+ x = y;
+ y = t;
+ }
+ /* Canonicalize subtraction of const to addition of negated const. */
+ if (op == Expr_Op_Type_Sub && y->type == Expr_Node_Constant)
+ {
+ op = Expr_Op_Type_Add;
+ y->value.i_value = -y->value.i_value;
+ }
+ if (y->type == Expr_Node_Constant && x->type == Expr_Node_Binop
+ && x->Right_Child->type == Expr_Node_Constant)
+ {
+ if (op == x->value.op_value && x->value.op_value == Expr_Op_Type_Add)
+ {
+ x->Right_Child->value.i_value += y->value.i_value;
+ return x;
+ }
+ }
+
+ /* Create a new expression structure. */
+ val.op_value = op;
+ return Expr_Node_Create (Expr_Node_Binop, val, x, y);
}
static Expr_Node *
diff --git a/gas/config/m68k-parse.h b/gas/config/m68k-parse.h
index e7af8536a805..4351609cc38e 100644
--- a/gas/config/m68k-parse.h
+++ b/gas/config/m68k-parse.h
@@ -113,9 +113,12 @@ enum m68k_register
BUSCR, /* 68060 added these. */
PCR,
ROMBAR, /* mcf5200 added these. */
+ RAMBAR_ALT, /* Some CF chips have RAMBAR using
+ RAMBAR0's number */
RAMBAR0,
RAMBAR1,
MMUBAR, /* mcfv4e added these. */
+ ROMBAR0, /* mcfv4e added these. */
ROMBAR1, /* mcfv4e added these. */
MPCR, EDRAMBAR, SECMBAR, /* mcfv4e added these. */
PCR1U0, PCR1L0, PCR1U1, PCR1L1,/* mcfv4e added these. */
@@ -126,7 +129,10 @@ enum m68k_register
FLASHBAR, RAMBAR, /* mcf528x added these. */
MBAR2, /* mcf5249 added this. */
MBAR,
-#define last_movec_reg MBAR
+ ASID, /* m5475. */
+ CAC, /* fido added this. */
+ MBB,
+#define last_movec_reg MBB
/* End of movec ordering constraints. */
FPI,
diff --git a/gas/config/obj-coff.c b/gas/config/obj-coff.c
index a5a76ff3da0a..1ac8a138f082 100644
--- a/gas/config/obj-coff.c
+++ b/gas/config/obj-coff.c
@@ -1026,7 +1026,7 @@ weak_name2altname (const char * name)
}
/* Return the name of the weak symbol corresponding to an
- alterate symbol. */
+ alternate symbol. */
static const char *
weak_altname2name (const char * name)
@@ -1579,7 +1579,7 @@ obj_coff_section (int ignore ATTRIBUTE_UNUSED)
if (! load_removed)
flags |= SEC_LOAD;
/* Note - the READONLY flag is set here, even for the 'x'
- attrbiute in order to be compatible with the MSVC
+ attribute in order to be compatible with the MSVC
linker. */
if (! readonly_removed)
flags |= SEC_READONLY;
diff --git a/gas/config/obj-coff.h b/gas/config/obj-coff.h
index 6fcbc9f06cbb..d2b212565ef1 100644
--- a/gas/config/obj-coff.h
+++ b/gas/config/obj-coff.h
@@ -1,6 +1,6 @@
/* coff object file format
Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS.
@@ -27,8 +27,6 @@
#include "targ-cpu.h"
-#include "bfd.h"
-
/* This internal_lineno crap is to stop namespace pollution from the
bfd internal coff headerfile. */
#define internal_lineno bfd_internal_lineno
@@ -57,16 +55,30 @@
#endif
#ifdef TC_I386
+#ifndef TE_PEP
+#include "coff/x86_64.h"
+#else
#include "coff/i386.h"
+#endif
#ifdef TE_PE
+#ifdef TE_PEP
+extern const char * x86_64_target_format (void);
+#define TARGET_FORMAT x86_64_target_format ()
+#define COFF_TARGET_FORMAT "pe-x86-64"
+#else
#define TARGET_FORMAT "pe-i386"
#endif
+#endif
#ifndef TARGET_FORMAT
+#ifdef TE_PEP
+#define TARGET_FORMAT "coff-x86-64"
+#else
#define TARGET_FORMAT "coff-i386"
#endif
#endif
+#endif
#ifdef TC_M68K
#include "coff/m68k.h"
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index f922149cae0d..2f93990e721d 100644
--- a/gas/config/obj-elf.c
+++ b/gas/config/obj-elf.c
@@ -1,6 +1,7 @@
/* ELF object file format
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -57,6 +58,10 @@
#include "elf/x86-64.h"
#endif
+#ifdef TC_MEP
+#include "elf/mep.h"
+#endif
+
static void obj_elf_line (int);
static void obj_elf_size (int);
static void obj_elf_type (int);
@@ -632,6 +637,11 @@ obj_elf_change_section (const char *name,
else if (attr == SHF_EXECINSTR
&& strcmp (name, ".note.GNU-stack") == 0)
override = TRUE;
+#ifdef TC_ALPHA
+ /* A section on Alpha may have SHF_ALPHA_GPREL. */
+ else if ((attr & ~ssect->attr) == SHF_ALPHA_GPREL)
+ override = TRUE;
+#endif
else
{
if (group_name == NULL)
@@ -1414,11 +1424,12 @@ obj_elf_version (int ignore ATTRIBUTE_UNUSED)
Elf_Internal_Note i_note;
Elf_External_Note e_note;
asection *note_secp = NULL;
- int len;
SKIP_WHITESPACE ();
if (*input_line_pointer == '\"')
{
+ unsigned int len;
+
++input_line_pointer; /* -> 1st char of string. */
name = input_line_pointer;
@@ -1429,19 +1440,19 @@ obj_elf_version (int ignore ATTRIBUTE_UNUSED)
*(input_line_pointer - 1) = '\0';
*input_line_pointer = c;
- /* create the .note section */
-
+ /* Create the .note section. */
note_secp = subseg_new (".note", 0);
bfd_set_section_flags (stdoutput,
note_secp,
SEC_HAS_CONTENTS | SEC_READONLY);
- /* process the version string */
-
- len = strlen (name);
+ /* Process the version string. */
+ len = strlen (name) + 1;
- i_note.namesz = ((len + 1) + 3) & ~3; /* round this to word boundary */
- i_note.descsz = 0; /* no description */
+ /* PR 3456: Although the name field is padded out to an 4-byte
+ boundary, the namesz field should not be adjusted. */
+ i_note.namesz = len;
+ i_note.descsz = 0; /* No description. */
i_note.type = NT_VERSION;
p = frag_more (sizeof (e_note.namesz));
md_number_to_chars (p, i_note.namesz, sizeof (e_note.namesz));
@@ -1449,17 +1460,16 @@ obj_elf_version (int ignore ATTRIBUTE_UNUSED)
md_number_to_chars (p, i_note.descsz, sizeof (e_note.descsz));
p = frag_more (sizeof (e_note.type));
md_number_to_chars (p, i_note.type, sizeof (e_note.type));
- p = frag_more (len + 1);
- strcpy (p, name);
+ p = frag_more (len);
+ memcpy (p, name, len);
frag_align (2, 0, 0);
subseg_set (seg, subseg);
}
else
- {
- as_bad (_("expected quoted string"));
- }
+ as_bad (_("expected quoted string"));
+
demand_empty_rest_of_line ();
}
@@ -1684,6 +1694,9 @@ adjust_stab_sections (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED)
this at the moment, so we do it ourselves. We save the information
in the symbol. */
+#ifdef OBJ_MAYBE_ELF
+static
+#endif
void
elf_ecoff_set_ext (symbolS *sym, struct ecoff_extr *ext)
{
@@ -1978,6 +1991,7 @@ elf_frob_file (void)
bfd_set_section_size (stdoutput, s, size);
s->contents = (unsigned char *) frag_more (size);
frag_now->fr_fix = frag_now_fix_octets ();
+ frag_wane (frag_now);
}
#ifdef elf_tc_final_processing
diff --git a/gas/config/obj-elf.h b/gas/config/obj-elf.h
index 7ff9ef09aa3c..29356ab3b06a 100644
--- a/gas/config/obj-elf.h
+++ b/gas/config/obj-elf.h
@@ -1,6 +1,6 @@
/* ELF object file format.
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -34,8 +34,6 @@
#define OUTPUT_FLAVOR bfd_target_elf_flavour
#endif
-#include "bfd.h"
-
#define BYTES_IN_WORD 4 /* for now */
#include "bfd/elf-bfd.h"
@@ -83,15 +81,13 @@ struct elf_obj_sy
#define OBJ_SYMFIELD_TYPE struct elf_obj_sy
/* Symbol fields used by the ELF back end. */
-#define ELF_TARGET_SYMBOL_FIELDS int local:1;
+#define ELF_TARGET_SYMBOL_FIELDS unsigned int local:1;
/* Don't change this; change ELF_TARGET_SYMBOL_FIELDS instead. */
#ifndef TARGET_SYMBOL_FIELDS
#define TARGET_SYMBOL_FIELDS ELF_TARGET_SYMBOL_FIELDS
#endif
-/* #include "targ-cpu.h" */
-
#ifndef FALSE
#define FALSE 0
#define TRUE !FALSE
@@ -134,13 +130,6 @@ int elf_s_get_other (symbolS *);
extern asection *gdb_section;
-#ifndef obj_sec_set_private_data
-#define obj_sec_set_private_data(B, S) \
- if (! BFD_SEND ((B), _new_section_hook, ((B), (S)))) \
- as_fatal (_("can't allocate ELF private section data: %s"), \
- bfd_errmsg (bfd_get_error ()))
-#endif
-
#ifndef obj_frob_file
#define obj_frob_file elf_frob_file
#endif
@@ -247,6 +236,7 @@ extern void elf_pop_insert (void);
#endif
#ifndef OBJ_MAYBE_ELF
+/* If OBJ_MAYBE_ELF then obj-multi.h will define obj_ecoff_set_ext. */
#define obj_ecoff_set_ext elf_ecoff_set_ext
struct ecoff_extr;
extern void elf_ecoff_set_ext (symbolS *, struct ecoff_extr *);
diff --git a/gas/config/obj-ieee.c b/gas/config/obj-ieee.c
deleted file mode 100644
index bac46757c131..000000000000
--- a/gas/config/obj-ieee.c
+++ /dev/null
@@ -1,613 +0,0 @@
-/* obj-format for ieee-695 records.
- Copyright 1991, 1992, 1993, 1994, 1997, 2000, 2001, 2002, 2003, 2005
- Free Software Foundation, Inc.
-
- This file is part of GAS, the GNU Assembler.
-
- GAS is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- GAS is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GAS; see the file COPYING. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-/* Created by Steve Chamberlain <steve@cygnus.com>. */
-
-/* This will hopefully become the port through which bfd and gas talk,
- for the moment, only ieee is known to work well. */
-
-#include "bfd.h"
-#include "as.h"
-#include "subsegs.h"
-#include "output-file.h"
-#include "frags.h"
-
-bfd *abfd;
-
-/* How many addresses does the .align take? */
-
-static relax_addressT
-relax_align (address, alignment)
- /* Address now. */
- register relax_addressT address;
-
- /* Alignment (binary). */
- register long alignment;
-{
- relax_addressT mask;
- relax_addressT new_address;
-
- mask = ~((~0) << alignment);
- new_address = (address + mask) & (~mask);
- return (new_address - address);
-}
-
-/* Calculate the size of the frag chain
- and create a bfd section to contain all of it. */
-
-static void
-size_section (abfd, idx)
- bfd *abfd;
- unsigned int idx;
-{
- asection *sec;
- unsigned int size = 0;
- fragS *frag = segment_info[idx].frag_root;
-
- while (frag)
- {
- if (frag->fr_address != size)
- {
- printf (_("Out of step\n"));
- size = frag->fr_address;
- }
- size += frag->fr_fix;
- switch (frag->fr_type)
- {
- case rs_fill:
- case rs_org:
- size += frag->fr_offset * frag->fr_var;
- break;
- case rs_align:
- case rs_align_code:
- {
- addressT off;
-
- off = relax_align (size, frag->fr_offset);
- if (frag->fr_subtype != 0 && off > frag->fr_subtype)
- off = 0;
- size += off;
- }
- }
- frag = frag->fr_next;
- }
- if (size)
- {
- char *name = segment_info[idx].name;
-
- if (name == (char *) NULL)
- name = ".data";
-
- segment_info[idx].user_stuff =
- (char *) (sec = bfd_make_section (abfd, name));
- /* Make it output through itself. */
- sec->output_section = sec;
- sec->flags |= SEC_HAS_CONTENTS;
- bfd_set_section_size (abfd, sec, size);
- }
-}
-
-/* Run through a frag chain and write out the data to go with it. */
-
-static void
-fill_section (abfd, idx)
- bfd *abfd;
- unsigned int idx;
-{
- asection *sec = segment_info[idx].user_stuff;
-
- if (sec)
- {
- fragS *frag = segment_info[idx].frag_root;
- unsigned int offset = 0;
- while (frag)
- {
- unsigned int fill_size;
- unsigned int count;
- switch (frag->fr_type)
- {
- case rs_fill:
- case rs_align:
- case rs_org:
- if (frag->fr_fix)
- {
- bfd_set_section_contents (abfd,
- sec,
- frag->fr_literal,
- frag->fr_address,
- frag->fr_fix);
- }
- offset += frag->fr_fix;
- fill_size = frag->fr_var;
- if (fill_size)
- {
- unsigned int off = frag->fr_fix;
- for (count = frag->fr_offset; count; count--)
- {
- bfd_set_section_contents (abfd, sec,
- frag->fr_literal +
- frag->fr_fix,
- frag->fr_address + off,
- fill_size);
- off += fill_size;
- }
- }
- break;
- default:
- abort ();
- }
- frag = frag->fr_next;
- }
- }
-}
-
-/* Count the relocations in a chain. */
-
-static unsigned int
-count_entries_in_chain (idx)
- unsigned int idx;
-{
- unsigned int nrelocs;
- fixS *fixup_ptr;
-
- /* Count the relocations. */
- fixup_ptr = segment_info[idx].fix_root;
- nrelocs = 0;
- while (fixup_ptr != (fixS *) NULL)
- {
- fixup_ptr = fixup_ptr->fx_next;
- nrelocs++;
- }
- return nrelocs;
-}
-
-/* Output all the relocations for a section. */
-
-void
-do_relocs_for (idx)
- unsigned int idx;
-{
- unsigned int nrelocs;
- arelent **reloc_ptr_vector;
- arelent *reloc_vector;
- asymbol **ptrs;
- asection *section = (asection *) (segment_info[idx].user_stuff);
- unsigned int i;
- fixS *from;
-
- if (section)
- {
- nrelocs = count_entries_in_chain (idx);
-
- reloc_ptr_vector =
- (arelent **) malloc ((nrelocs + 1) * sizeof (arelent *));
- reloc_vector = (arelent *) malloc (nrelocs * sizeof (arelent));
- ptrs = (asymbol **) malloc (nrelocs * sizeof (asymbol *));
- from = segment_info[idx].fix_root;
- for (i = 0; i < nrelocs; i++)
- {
- arelent *to = reloc_vector + i;
- asymbol *s;
- reloc_ptr_vector[i] = to;
- to->howto = (reloc_howto_type *) (from->fx_r_type);
-
- s = &(from->fx_addsy->sy_symbol.sy);
- to->address = ((char *) (from->fx_frag->fr_address +
- from->fx_where))
- - ((char *) (&(from->fx_frag->fr_literal)));
- to->addend = from->fx_offset;
- /* If we know the symbol which we want to relocate to, turn
- this reloaction into a section relative.
-
- If this relocation is pcrelative, and we know the
- destination, we still want to keep the relocation - since
- the linker might relax some of the bytes, but it stops
- being pc relative and turns into an absolute relocation. */
- if (s)
- {
- if ((s->flags & BSF_UNDEFINED) == 0)
- {
- to->section = s->section;
-
- /* We can refer directly to the value field here,
- rather than using S_GET_VALUE, because this is
- only called after do_symbols, which sets up the
- value field. */
- to->addend += s->value;
-
- to->sym_ptr_ptr = 0;
- if (to->howto->pcrel_offset)
- /* This is a pcrel relocation, the addend should
- be adjusted. */
- to->addend -= to->address + 1;
- }
- else
- {
- to->section = 0;
- *ptrs = &(from->fx_addsy->sy_symbol.sy);
- to->sym_ptr_ptr = ptrs;
-
- if (to->howto->pcrel_offset)
- /* This is a pcrel relocation, the addend should
- be adjusted. */
- to->addend -= to->address - 1;
- }
- }
- else
- to->section = 0;
-
- ptrs++;
- from = from->fx_next;
- }
-
- /* Attach to the section. */
- section->orelocation = reloc_ptr_vector;
- section->reloc_count = nrelocs;
- section->flags |= SEC_LOAD;
- }
-}
-
-/* Do the symbols. */
-
-static void
-do_symbols (abfd)
- bfd *abfd;
-{
- extern symbolS *symbol_rootP;
- symbolS *ptr;
- asymbol **symbol_ptr_vec;
- asymbol *symbol_vec;
- unsigned int count = 0;
- unsigned int index;
-
- for (ptr = symbol_rootP;
- ptr != (symbolS *) NULL;
- ptr = ptr->sy_next)
- {
- if (SEG_NORMAL (ptr->sy_symbol.seg))
- {
- ptr->sy_symbol.sy.section =
- (asection *) (segment_info[ptr->sy_symbol.seg].user_stuff);
- S_SET_VALUE (ptr, S_GET_VALUE (ptr));
- if (ptr->sy_symbol.sy.flags == 0)
- ptr->sy_symbol.sy.flags = BSF_LOCAL;
- }
- else
- {
- switch (ptr->sy_symbol.seg)
- {
- case SEG_ABSOLUTE:
- ptr->sy_symbol.sy.flags |= BSF_ABSOLUTE;
- ptr->sy_symbol.sy.section = 0;
- break;
- case SEG_UNKNOWN:
- ptr->sy_symbol.sy.flags = BSF_UNDEFINED;
- ptr->sy_symbol.sy.section = 0;
- break;
- default:
- abort ();
- }
- }
- ptr->sy_symbol.sy.value = S_GET_VALUE (ptr);
- count++;
- }
- symbol_ptr_vec = (asymbol **) malloc ((count + 1) * sizeof (asymbol *));
-
- index = 0;
- for (ptr = symbol_rootP;
- ptr != (symbolS *) NULL;
- ptr = ptr->sy_next)
- {
- symbol_ptr_vec[index] = &(ptr->sy_symbol.sy);
- index++;
- }
- symbol_ptr_vec[index] = 0;
- abfd->outsymbols = symbol_ptr_vec;
- abfd->symcount = count;
-}
-
-/* The generic as->bfd converter. Other backends may have special case
- code. */
-
-void
-bfd_as_write_hook ()
-{
- int i;
-
- for (i = SEG_E0; i < SEG_UNKNOWN; i++)
- size_section (abfd, i);
-
- for (i = SEG_E0; i < SEG_UNKNOWN; i++)
- fill_section (abfd, i);
-
- do_symbols (abfd);
-
- for (i = SEG_E0; i < SEG_UNKNOWN; i++)
- do_relocs_for (i);
-}
-
-S_SET_SEGMENT (x, y)
- symbolS *x;
- int y;
-{
- x->sy_symbol.seg = y;
-}
-
-S_IS_DEFINED (x)
- symbolS *x;
-{
- if (SEG_NORMAL (x->sy_symbol.seg))
- {
- return 1;
- }
- switch (x->sy_symbol.seg)
- {
- case SEG_UNKNOWN:
- return 0;
- default:
- abort ();
- }
-}
-
-S_IS_EXTERNAL (x)
-{
- abort ();
-}
-
-S_GET_DESC (x)
-{
- abort ();
-}
-
-S_GET_SEGMENT (x)
- symbolS *x;
-{
- return x->sy_symbol.seg;
-}
-
-S_SET_EXTERNAL (x)
- symbolS *x;
-{
- x->sy_symbol.sy.flags |= BSF_GLOBAL | BSF_EXPORT;
-}
-
-S_SET_NAME (x, y)
- symbolS *x;
- char *y;
-{
- x->sy_symbol.sy.name = y;
-}
-
-S_GET_OTHER (x)
-{
- abort ();
-}
-
-S_IS_DEBUG (x)
-{
- abort ();
-}
-
-#ifndef segment_name
-char *
-segment_name ()
-{
- abort ();
-}
-#endif
-
-void
-obj_read_begin_hook ()
-{
-}
-
-static void
-obj_ieee_section (ignore)
- int ignore;
-{
- extern char *input_line_pointer;
- extern char is_end_of_line[];
- char *p = input_line_pointer;
- char *s = p;
- int i;
-
- /* Look up the name, if it doesn't exist, make it. */
- while (*p && *p != ' ' && *p != ',' && !is_end_of_line[*p])
- {
- p++;
- }
- for (i = SEG_E0; i < SEG_UNKNOWN; i++)
- {
- if (segment_info[i].hadone)
- {
- if (strncmp (segment_info[i].name, s, p - s) == 0)
- goto ok;
- }
- else
- break;
- }
- if (i == SEG_UNKNOWN)
- {
- as_bad (_("too many sections"));
- return;
- }
-
- segment_info[i].hadone = 1;
- segment_info[i].name = malloc (p - s + 1);
- memcpy (segment_info[i].name, s, p - s);
- segment_info[i].name[p - s] = 0;
-ok:
- subseg_set (i, 0);
- while (!is_end_of_line[*p])
- p++;
- input_line_pointer = p;
-}
-
-const pseudo_typeS obj_pseudo_table[] =
-{
- {"section", obj_ieee_section, 0},
- {"data.b" , cons , 1},
- {"data.w" , cons , 2},
- {"data.l" , cons , 4},
- {"export" , s_globl , 0},
- {"option" , s_ignore , 0},
- {"end" , s_ignore , 0},
- {"import" , s_ignore , 0},
- {"sdata" , stringer , 0},
- 0,
-};
-
-void
-obj_symbol_new_hook (symbolP)
- symbolS *symbolP;
-{
- symbolP->sy_symbol.sy.the_bfd = abfd;
-}
-
-#if 1
-
-#ifndef SUB_SEGMENT_ALIGN
-#ifdef HANDLE_ALIGN
-/* The last subsegment gets an alignment corresponding to the alignment
- of the section. This allows proper nop-filling at the end of
- code-bearing sections. */
-#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) \
- (!(FRCHAIN)->frch_next || (FRCHAIN)->frch_next->frch_seg != (SEG) \
- ? get_recorded_alignment (SEG) : 0)
-#else
-#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 2
-#endif
-#endif
-
-extern void
-write_object_file ()
-{
- int i;
- struct frchain *frchain_ptr;
- struct frag *frag_ptr;
-
- abfd = bfd_openw (out_file_name, "ieee");
-
- if (abfd == 0)
- {
- as_perror (_("FATAL: Can't create %s"), out_file_name);
- exit (EXIT_FAILURE);
- }
- bfd_set_format (abfd, bfd_object);
- bfd_set_arch_mach (abfd, bfd_arch_h8300, 0);
- subseg_set (1, 0);
- subseg_set (2, 0);
- subseg_set (3, 0);
-
- /* Run through all the sub-segments and align them up. Also
- close any open frags. We tack a .fill onto the end of the
- frag chain so that any .align's size can be worked by looking
- at the next frag. */
- for (frchain_ptr = frchain_root;
- frchain_ptr != (struct frchain *) NULL;
- frchain_ptr = frchain_ptr->frch_next)
- {
- int alignment;
-
- subseg_set (frchain_ptr->frch_seg, frchain_ptr->frch_subseg);
-
- alignment = SUB_SEGMENT_ALIGN (now_seg, frchain_ptr)
-
-#ifdef md_do_align
- md_do_align (alignment, (char *) NULL, 0, 0, alignment_done);
-#endif
- if (subseg_text_p (now_seg))
- frag_align_code (alignment, 0);
- else
- frag_align (alignment, 0, 0);
-
-#ifdef md_do_align
- alignment_done:
-#endif
-
- frag_wane (frag_now);
- frag_now->fr_fix = 0;
- know (frag_now->fr_next == NULL);
- }
-
- /* Now build one big frag chain for each segment, linked through
- fr_next. */
- for (i = SEG_E0; i < SEG_UNKNOWN; i++)
- {
- fragS **prev_frag_ptr_ptr;
- struct frchain *next_frchain_ptr;
-
- segment_info[i].frag_root = segment_info[i].frchainP->frch_root;
- }
-
- for (i = SEG_E0; i < SEG_UNKNOWN; i++)
- relax_segment (segment_info[i].frag_root, i);
-
- /* Relaxation has completed. Freeze all syms. */
- finalize_syms = 1;
-
- /* Now the addresses of the frags are correct within the segment. */
-
- bfd_as_write_hook ();
- bfd_close (abfd);
-}
-
-#endif
-
-H_SET_TEXT_SIZE (a, b)
-{
- abort ();
-}
-
-H_GET_TEXT_SIZE ()
-{
- abort ();
-}
-
-H_SET_BSS_SIZE ()
-{
- abort ();
-}
-
-H_SET_STRING_SIZE ()
-{
- abort ();
-}
-
-H_SET_RELOCATION_SIZE ()
-{
- abort ();
-}
-
-H_SET_MAGIC_NUMBER ()
-{
- abort ();
-}
-
-H_GET_FILE_SIZE ()
-{
- abort ();
-}
-
-H_GET_TEXT_RELOCATION_SIZE ()
-{
- abort ();
-}
diff --git a/gas/config/obj-ieee.h b/gas/config/obj-ieee.h
deleted file mode 100644
index 29654296e83f..000000000000
--- a/gas/config/obj-ieee.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* This file is obj-ieee.h
- Copyright 1987, 1988, 1989, 1990, 1991, 1992, 2000, 2002, 2003
- Free Software Foundation, Inc.
-
- This file is part of GAS, the GNU Assembler.
-
- GAS is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- GAS is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GAS; see the file COPYING. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-#include "bfd.h"
-
-typedef struct
-{
- asymbol sy;
- int seg;
-}
-obj_symbol_type;
-
-#define S_GET_NAME(s) (((s)->sy_symbol.sy.name))
-
-/* Return true for symbols that should not be reduced to section
- symbols or eliminated from expressions, because they may be
- overridden by the linker. */
-#define S_FORCE_RELOC(s, strict) (!SEG_NORMAL (x->sy_symbol.seg))
-
-typedef struct
- {
- int x;
- }
-object_headers;
-
-int lineno_rootP;
-
-#define IEEE_STYLE
diff --git a/gas/config/obj-som.c b/gas/config/obj-som.c
index 571330efcb42..f41df58182b6 100644
--- a/gas/config/obj-som.c
+++ b/gas/config/obj-som.c
@@ -1,5 +1,5 @@
/* SOM object file format.
- Copyright 1993, 1994, 1998, 2000, 2002, 2003, 2004, 2005
+ Copyright 1993, 1994, 1998, 2000, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -150,12 +150,9 @@ obj_som_version (int unused ATTRIBUTE_UNUSED)
version_seen = 1;
if (!bfd_som_attach_aux_hdr (stdoutput, VERSION_AUX_ID, version))
- {
- bfd_perror (stdoutput->filename);
- as_perror (_("FATAL: Attaching version header %s"),
- stdoutput->filename);
- exit (EXIT_FAILURE);
- }
+ as_fatal (_("attaching version header %s: %s"),
+ stdoutput->filename, bfd_errmsg (bfd_get_error ()));
+
*input_line_pointer = c;
demand_empty_rest_of_line ();
}
@@ -195,12 +192,9 @@ obj_som_copyright (int unused ATTRIBUTE_UNUSED)
copyright_seen = 1;
if (!bfd_som_attach_aux_hdr (stdoutput, COPYRIGHT_AUX_ID, copyright))
- {
- bfd_perror (stdoutput->filename);
- as_perror (_("FATAL: Attaching copyright header %s"),
- stdoutput->filename);
- exit (EXIT_FAILURE);
- }
+ as_fatal (_("attaching copyright header %s: %s"),
+ stdoutput->filename, bfd_errmsg (bfd_get_error ()));
+
*input_line_pointer = c;
demand_empty_rest_of_line ();
}
diff --git a/gas/config/obj-som.h b/gas/config/obj-som.h
index 85f3f72bb404..16ca21e1c6e5 100644
--- a/gas/config/obj-som.h
+++ b/gas/config/obj-som.h
@@ -1,5 +1,5 @@
/* SOM object file format.
- Copyright 1993, 1994, 1995, 1998, 2000, 2004, 2005
+ Copyright 1993, 1994, 1995, 1998, 2000, 2004, 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -27,7 +27,6 @@
#define OBJ_SOM 1
-#include "bfd.h"
#include "bfd/som.h"
#include "targ-cpu.h"
diff --git a/gas/config/tc-alpha.c b/gas/config/tc-alpha.c
index 3765b08c73a5..e8f0bad55f34 100644
--- a/gas/config/tc-alpha.c
+++ b/gas/config/tc-alpha.c
@@ -1,6 +1,6 @@
/* tc-alpha.c - Processor-specific code for the DEC Alpha AXP CPU.
Copyright 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
Contributed by Carnegie Mellon University, 1993.
Written by Alessandro Forin, based on earlier gas-1.38 target CPU files.
Modified by Ken Raeburn for gas-2.x and ECOFF support.
@@ -2383,15 +2383,15 @@ emit_ustX (const expressionS *tok,
newtok[2] = newtok[0];
assemble_tokens ("or", newtok, 3, 1);
- /* Emit "stq_u $t9, 0($at)". */
- set_tok_reg (newtok[0], AXP_REG_T9);
- set_tok_const (newtok[1], 0);
- set_tok_preg (newtok[2], AXP_REG_AT);
- assemble_tokens ("stq_u", newtok, 3, 1);
-
/* Emit "stq_u $t10, size-1($at)". */
set_tok_reg (newtok[0], AXP_REG_T10);
set_tok_const (newtok[1], (1 << lgsize) - 1);
+ set_tok_preg (newtok[2], AXP_REG_AT);
+ assemble_tokens ("stq_u", newtok, 3, 1);
+
+ /* Emit "stq_u $t9, 0($at)". */
+ set_tok_reg (newtok[0], AXP_REG_T9);
+ set_tok_const (newtok[1], 0);
assemble_tokens ("stq_u", newtok, 3, 1);
}
diff --git a/gas/config/tc-alpha.h b/gas/config/tc-alpha.h
index 42e004e41482..d28ab9ff35a5 100644
--- a/gas/config/tc-alpha.h
+++ b/gas/config/tc-alpha.h
@@ -1,6 +1,6 @@
/* This file is tc-alpha.h
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
- 2005
+ 2005, 2006
Free Software Foundation, Inc.
Written by Ken Raeburn <raeburn@cygnus.com>.
@@ -180,4 +180,4 @@ extern void alpha_cfi_frame_initial_instructions (void);
#define DWARF2_LINE_MIN_INSN_LENGTH 4
#define DWARF2_DEFAULT_RETURN_COLUMN 26
-#define DWARF2_CIE_DATA_ALIGNMENT -8
+#define DWARF2_CIE_DATA_ALIGNMENT (-8)
diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c
index 525b54083fb9..490f327efd4c 100644
--- a/gas/config/tc-arc.c
+++ b/gas/config/tc-arc.c
@@ -20,8 +20,6 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include <stdio.h>
-#include "libiberty.h"
#include "as.h"
#include "struc-symbol.h"
#include "safe-ctype.h"
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index ae420b353471..ac88be63c458 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -1,6 +1,6 @@
/* tc-arm.c -- Assemble for the ARM
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005
+ 2004, 2005, 2006
Free Software Foundation, Inc.
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
Modified by David Taylor (dtaylor@armltd.co.uk)
@@ -25,28 +25,24 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include <string.h>
+#include <limits.h>
+#include <stdarg.h>
#define NO_RELOC 0
#include "as.h"
#include "safe-ctype.h"
-
-/* Need TARGET_CPU. */
-#include "config.h"
#include "subsegs.h"
#include "obstack.h"
-#include "symbols.h"
-#include "listing.h"
#include "opcode/arm.h"
#ifdef OBJ_ELF
#include "elf/arm.h"
-#include "dwarf2dbg.h"
#include "dw2gencfi.h"
#endif
-/* XXX Set this to 1 after the next binutils release. */
-#define WARN_DEPRECATED 0
+#include "dwarf2dbg.h"
+
+#define WARN_DEPRECATED 1
#ifdef OBJ_ELF
/* Must be at least the size of the largest unwind opcode (currently two). */
@@ -90,6 +86,15 @@ static unsigned int marked_pr_dependency = 0;
#endif /* OBJ_ELF */
+/* Results from operand parsing worker functions. */
+
+typedef enum
+{
+ PARSE_OPERAND_SUCCESS,
+ PARSE_OPERAND_FAIL,
+ PARSE_OPERAND_FAIL_NO_BACKTRACK
+} parse_operand_result;
+
enum arm_float_abi
{
ARM_FLOAT_ABI_HARD,
@@ -150,11 +155,14 @@ static const arm_feature_set *mcpu_fpu_opt = NULL;
static const arm_feature_set *march_cpu_opt = NULL;
static const arm_feature_set *march_fpu_opt = NULL;
static const arm_feature_set *mfpu_opt = NULL;
+static const arm_feature_set *object_arch = NULL;
/* Constants for known architecture features. */
static const arm_feature_set fpu_default = FPU_DEFAULT;
static const arm_feature_set fpu_arch_vfp_v1 = FPU_ARCH_VFP_V1;
static const arm_feature_set fpu_arch_vfp_v2 = FPU_ARCH_VFP_V2;
+static const arm_feature_set fpu_arch_vfp_v3 = FPU_ARCH_VFP_V3;
+static const arm_feature_set fpu_arch_neon_v1 = FPU_ARCH_NEON_V1;
static const arm_feature_set fpu_arch_fpa = FPU_ARCH_FPA;
static const arm_feature_set fpu_any_hard = FPU_ANY_HARD;
static const arm_feature_set fpu_arch_maverick = FPU_ARCH_MAVERICK;
@@ -194,6 +202,8 @@ static const arm_feature_set arm_arch_full = ARM_FEATURE (-1, -1);
static const arm_feature_set arm_arch_t2 = ARM_ARCH_THUMB2;
static const arm_feature_set arm_arch_none = ARM_ARCH_NONE;
+static const arm_feature_set arm_cext_iwmmxt2 =
+ ARM_FEATURE (0, ARM_CEXT_IWMMXT2);
static const arm_feature_set arm_cext_iwmmxt =
ARM_FEATURE (0, ARM_CEXT_IWMMXT);
static const arm_feature_set arm_cext_xscale =
@@ -206,6 +216,10 @@ static const arm_feature_set fpu_vfp_ext_v1xd =
ARM_FEATURE (0, FPU_VFP_EXT_V1xD);
static const arm_feature_set fpu_vfp_ext_v1 = ARM_FEATURE (0, FPU_VFP_EXT_V1);
static const arm_feature_set fpu_vfp_ext_v2 = ARM_FEATURE (0, FPU_VFP_EXT_V2);
+static const arm_feature_set fpu_vfp_ext_v3 = ARM_FEATURE (0, FPU_VFP_EXT_V3);
+static const arm_feature_set fpu_neon_ext_v1 = ARM_FEATURE (0, FPU_NEON_EXT_V1);
+static const arm_feature_set fpu_vfp_v3_or_neon_ext =
+ ARM_FEATURE (0, FPU_NEON_EXT_V1 | FPU_VFP_EXT_V3);
static int mfloat_abi_opt = -1;
/* Record user cpu selection for object attributes. */
@@ -218,6 +232,12 @@ static int meabi_flags = EABI_DEFAULT;
# else
static int meabi_flags = EF_ARM_EABI_UNKNOWN;
# endif
+
+bfd_boolean
+arm_is_eabi(void)
+{
+ return (EF_ARM_EABI_VERSION (meabi_flags) >= EF_ARM_EABI_VER4);
+}
#endif
#ifdef OBJ_ELF
@@ -256,6 +276,31 @@ static int thumb_mode = 0;
static bfd_boolean unified_syntax = FALSE;
+enum neon_el_type
+{
+ NT_invtype,
+ NT_untyped,
+ NT_integer,
+ NT_float,
+ NT_poly,
+ NT_signed,
+ NT_unsigned
+};
+
+struct neon_type_el
+{
+ enum neon_el_type type;
+ unsigned size;
+};
+
+#define NEON_MAX_TYPE_ELS 4
+
+struct neon_type
+{
+ struct neon_type_el el[NEON_MAX_TYPE_ELS];
+ unsigned elems;
+};
+
struct arm_it
{
const char * error;
@@ -263,6 +308,11 @@ struct arm_it
int size;
int size_req;
int cond;
+ /* "uncond_value" is set to the value in place of the conditional field in
+ unconditional versions of the instruction, or -1 if nothing is
+ appropriate. */
+ int uncond_value;
+ struct neon_type vectype;
/* Set to the opcode if the instruction needs relaxation.
Zero if the instruction is not relaxed. */
unsigned long relax;
@@ -277,9 +327,19 @@ struct arm_it
{
unsigned reg;
signed int imm;
+ struct neon_type_el vectype;
unsigned present : 1; /* Operand present. */
unsigned isreg : 1; /* Operand was a register. */
unsigned immisreg : 1; /* .imm field is a second register. */
+ unsigned isscalar : 1; /* Operand is a (Neon) scalar. */
+ unsigned immisalign : 1; /* Immediate is an alignment specifier. */
+ unsigned immisfloat : 1; /* Immediate was parsed as a float. */
+ /* Note: we abuse "regisimm" to mean "is Neon register" in VMOV
+ instructions. This allows us to disambiguate ARM <-> vector insns. */
+ unsigned regisimm : 1; /* 64-bit immediate, reg forms high 32 bits. */
+ unsigned isvec : 1; /* Is a single, double or quad VFP/Neon reg. */
+ unsigned isquad : 1; /* Operand is Neon quad-precision register. */
+ unsigned issingle : 1; /* Operand is VFP single-precision register. */
unsigned hasreloc : 1; /* Operand has relocation suffix. */
unsigned writeback : 1; /* Operand has trailing ! */
unsigned preind : 1; /* Preindexed address. */
@@ -355,9 +415,10 @@ struct reloc_entry
bfd_reloc_code_real_type reloc;
};
-enum vfp_sp_reg_pos
+enum vfp_reg_pos
{
- VFP_REG_Sd, VFP_REG_Sm, VFP_REG_Sn
+ VFP_REG_Sd, VFP_REG_Sm, VFP_REG_Sn,
+ VFP_REG_Dd, VFP_REG_Dm, VFP_REG_Dn
};
enum vfp_ldstm_type
@@ -365,6 +426,17 @@ enum vfp_ldstm_type
VFP_LDSTMIA, VFP_LDSTMDB, VFP_LDSTMIAX, VFP_LDSTMDBX
};
+/* Bits for DEFINED field in neon_typed_alias. */
+#define NTA_HASTYPE 1
+#define NTA_HASINDEX 2
+
+struct neon_typed_alias
+{
+ unsigned char defined;
+ unsigned char index;
+ struct neon_type_el eltype;
+};
+
/* ARM register categories. This includes coprocessor numbers and various
architecture extensions' registers. */
enum arm_reg_type
@@ -375,6 +447,10 @@ enum arm_reg_type
REG_TYPE_FN,
REG_TYPE_VFS,
REG_TYPE_VFD,
+ REG_TYPE_NQ,
+ REG_TYPE_VFSD,
+ REG_TYPE_NDQ,
+ REG_TYPE_NSDQ,
REG_TYPE_VFC,
REG_TYPE_MVF,
REG_TYPE_MVD,
@@ -388,13 +464,17 @@ enum arm_reg_type
REG_TYPE_XSCALE,
};
-/* Structure for a hash table entry for a register. */
+/* Structure for a hash table entry for a register.
+ If TYPE is REG_TYPE_VFD or REG_TYPE_NQ, the NEON field can point to extra
+ information which states whether a vector type or index is specified (for a
+ register alias created with .dn or .qn). Otherwise NEON should be NULL. */
struct reg_entry
{
- const char *name;
- unsigned char number;
- unsigned char type;
- unsigned char builtin;
+ const char *name;
+ unsigned char number;
+ unsigned char type;
+ unsigned char builtin;
+ struct neon_typed_alias *neon;
};
/* Diagnostics used when we don't get a register of the expected type. */
@@ -405,7 +485,11 @@ const char *const reg_expected_msgs[] =
N_("co-processor register expected"),
N_("FPA register expected"),
N_("VFP single precision register expected"),
- N_("VFP double precision register expected"),
+ N_("VFP/Neon double precision register expected"),
+ N_("Neon quad precision register expected"),
+ N_("VFP single or double precision register expected"),
+ N_("Neon double or quad precision register expected"),
+ N_("VFP single, double or Neon quad precision register expected"),
N_("VFP system register expected"),
N_("Maverick MVF register expected"),
N_("Maverick MVD register expected"),
@@ -465,11 +549,14 @@ struct asm_opcode
#define INDEX_UP 0x00800000
#define WRITE_BACK 0x00200000
#define LDM_TYPE_2_OR_3 0x00400000
+#define CPSI_MMOD 0x00020000
#define LITERAL_MASK 0xf000f000
#define OPCODE_MASK 0xfe1fffff
#define V4_STR_BIT 0x00000020
+#define T2_SUBS_PC_LR 0xf3de8f00
+
#define DATA_OP_SHIFT 21
#define T2_OPCODE_MASK 0xfe1fffff
@@ -571,6 +658,7 @@ struct asm_opcode
#define BAD_ADDR_MODE _("instruction does not accept this addressing mode");
#define BAD_BRANCH _("branch must be last instruction in IT block")
#define BAD_NOT_IT _("instruction not allowed in IT block")
+#define BAD_FPU _("selected FPU does not support instruction")
static struct hash_control *arm_ops_hsh;
static struct hash_control *arm_cond_hsh;
@@ -691,6 +779,9 @@ static int in_my_get_expression = 0;
#define GE_NO_PREFIX 0
#define GE_IMM_PREFIX 1
#define GE_OPT_PREFIX 2
+/* This is a bit of a hack. Use an optional prefix, and also allow big (64-bit)
+ immediates, as can be used in Neon VMVN and VMOV immediate instructions. */
+#define GE_OPT_PREFIX_BIG 3
static int
my_get_expression (expressionS * ep, char ** str, int prefix_mode)
@@ -700,7 +791,8 @@ my_get_expression (expressionS * ep, char ** str, int prefix_mode)
/* In unified syntax, all prefixes are optional. */
if (unified_syntax)
- prefix_mode = GE_OPT_PREFIX;
+ prefix_mode = (prefix_mode == GE_OPT_PREFIX_BIG) ? prefix_mode
+ : GE_OPT_PREFIX;
switch (prefix_mode)
{
@@ -714,6 +806,7 @@ my_get_expression (expressionS * ep, char ** str, int prefix_mode)
(*str)++;
break;
case GE_OPT_PREFIX:
+ case GE_OPT_PREFIX_BIG:
if (is_immediate_prefix (**str))
(*str)++;
break;
@@ -755,11 +848,12 @@ my_get_expression (expressionS * ep, char ** str, int prefix_mode)
/* Get rid of any bignums now, so that we don't generate an error for which
we can't establish a line number later on. Big numbers are never valid
in instructions, which is where this routine is always called. */
- if (ep->X_op == O_big
- || (ep->X_add_symbol
- && (walk_no_bignums (ep->X_add_symbol)
- || (ep->X_op_symbol
- && walk_no_bignums (ep->X_op_symbol)))))
+ if (prefix_mode != GE_OPT_PREFIX_BIG
+ && (ep->X_op == O_big
+ || (ep->X_add_symbol
+ && (walk_no_bignums (ep->X_add_symbol)
+ || (ep->X_op_symbol
+ && walk_no_bignums (ep->X_op_symbol))))))
{
inst.error = _("invalid constant");
*str = input_line_pointer;
@@ -939,18 +1033,10 @@ arm_reg_parse_multi (char **ccp)
return reg;
}
-/* As above, but the register must be of type TYPE, and the return
- value is the register number or FAIL. */
-
static int
-arm_reg_parse (char **ccp, enum arm_reg_type type)
+arm_reg_alt_syntax (char **ccp, char *start, struct reg_entry *reg,
+ enum arm_reg_type type)
{
- char *start = *ccp;
- struct reg_entry *reg = arm_reg_parse_multi (ccp);
-
- if (reg && reg->type == type)
- return reg->number;
-
/* Alternative syntaxes are accepted for a few register classes. */
switch (type)
{
@@ -982,10 +1068,354 @@ arm_reg_parse (char **ccp, enum arm_reg_type type)
break;
}
+ return FAIL;
+}
+
+/* As arm_reg_parse_multi, but the register must be of type TYPE, and the
+ return value is the register number or FAIL. */
+
+static int
+arm_reg_parse (char **ccp, enum arm_reg_type type)
+{
+ char *start = *ccp;
+ struct reg_entry *reg = arm_reg_parse_multi (ccp);
+ int ret;
+
+ /* Do not allow a scalar (reg+index) to parse as a register. */
+ if (reg && reg->neon && (reg->neon->defined & NTA_HASINDEX))
+ return FAIL;
+
+ if (reg && reg->type == type)
+ return reg->number;
+
+ if ((ret = arm_reg_alt_syntax (ccp, start, reg, type)) != FAIL)
+ return ret;
+
*ccp = start;
return FAIL;
}
+/* Parse a Neon type specifier. *STR should point at the leading '.'
+ character. Does no verification at this stage that the type fits the opcode
+ properly. E.g.,
+
+ .i32.i32.s16
+ .s32.f32
+ .u16
+
+ Can all be legally parsed by this function.
+
+ Fills in neon_type struct pointer with parsed information, and updates STR
+ to point after the parsed type specifier. Returns SUCCESS if this was a legal
+ type, FAIL if not. */
+
+static int
+parse_neon_type (struct neon_type *type, char **str)
+{
+ char *ptr = *str;
+
+ if (type)
+ type->elems = 0;
+
+ while (type->elems < NEON_MAX_TYPE_ELS)
+ {
+ enum neon_el_type thistype = NT_untyped;
+ unsigned thissize = -1u;
+
+ if (*ptr != '.')
+ break;
+
+ ptr++;
+
+ /* Just a size without an explicit type. */
+ if (ISDIGIT (*ptr))
+ goto parsesize;
+
+ switch (TOLOWER (*ptr))
+ {
+ case 'i': thistype = NT_integer; break;
+ case 'f': thistype = NT_float; break;
+ case 'p': thistype = NT_poly; break;
+ case 's': thistype = NT_signed; break;
+ case 'u': thistype = NT_unsigned; break;
+ case 'd':
+ thistype = NT_float;
+ thissize = 64;
+ ptr++;
+ goto done;
+ default:
+ as_bad (_("unexpected character `%c' in type specifier"), *ptr);
+ return FAIL;
+ }
+
+ ptr++;
+
+ /* .f is an abbreviation for .f32. */
+ if (thistype == NT_float && !ISDIGIT (*ptr))
+ thissize = 32;
+ else
+ {
+ parsesize:
+ thissize = strtoul (ptr, &ptr, 10);
+
+ if (thissize != 8 && thissize != 16 && thissize != 32
+ && thissize != 64)
+ {
+ as_bad (_("bad size %d in type specifier"), thissize);
+ return FAIL;
+ }
+ }
+
+ done:
+ if (type)
+ {
+ type->el[type->elems].type = thistype;
+ type->el[type->elems].size = thissize;
+ type->elems++;
+ }
+ }
+
+ /* Empty/missing type is not a successful parse. */
+ if (type->elems == 0)
+ return FAIL;
+
+ *str = ptr;
+
+ return SUCCESS;
+}
+
+/* Errors may be set multiple times during parsing or bit encoding
+ (particularly in the Neon bits), but usually the earliest error which is set
+ will be the most meaningful. Avoid overwriting it with later (cascading)
+ errors by calling this function. */
+
+static void
+first_error (const char *err)
+{
+ if (!inst.error)
+ inst.error = err;
+}
+
+/* Parse a single type, e.g. ".s32", leading period included. */
+static int
+parse_neon_operand_type (struct neon_type_el *vectype, char **ccp)
+{
+ char *str = *ccp;
+ struct neon_type optype;
+
+ if (*str == '.')
+ {
+ if (parse_neon_type (&optype, &str) == SUCCESS)
+ {
+ if (optype.elems == 1)
+ *vectype = optype.el[0];
+ else
+ {
+ first_error (_("only one type should be specified for operand"));
+ return FAIL;
+ }
+ }
+ else
+ {
+ first_error (_("vector type expected"));
+ return FAIL;
+ }
+ }
+ else
+ return FAIL;
+
+ *ccp = str;
+
+ return SUCCESS;
+}
+
+/* Special meanings for indices (which have a range of 0-7), which will fit into
+ a 4-bit integer. */
+
+#define NEON_ALL_LANES 15
+#define NEON_INTERLEAVE_LANES 14
+
+/* Parse either a register or a scalar, with an optional type. Return the
+ register number, and optionally fill in the actual type of the register
+ when multiple alternatives were given (NEON_TYPE_NDQ) in *RTYPE, and
+ type/index information in *TYPEINFO. */
+
+static int
+parse_typed_reg_or_scalar (char **ccp, enum arm_reg_type type,
+ enum arm_reg_type *rtype,
+ struct neon_typed_alias *typeinfo)
+{
+ char *str = *ccp;
+ struct reg_entry *reg = arm_reg_parse_multi (&str);
+ struct neon_typed_alias atype;
+ struct neon_type_el parsetype;
+
+ atype.defined = 0;
+ atype.index = -1;
+ atype.eltype.type = NT_invtype;
+ atype.eltype.size = -1;
+
+ /* Try alternate syntax for some types of register. Note these are mutually
+ exclusive with the Neon syntax extensions. */
+ if (reg == NULL)
+ {
+ int altreg = arm_reg_alt_syntax (&str, *ccp, reg, type);
+ if (altreg != FAIL)
+ *ccp = str;
+ if (typeinfo)
+ *typeinfo = atype;
+ return altreg;
+ }
+
+ /* Undo polymorphism when a set of register types may be accepted. */
+ if ((type == REG_TYPE_NDQ
+ && (reg->type == REG_TYPE_NQ || reg->type == REG_TYPE_VFD))
+ || (type == REG_TYPE_VFSD
+ && (reg->type == REG_TYPE_VFS || reg->type == REG_TYPE_VFD))
+ || (type == REG_TYPE_NSDQ
+ && (reg->type == REG_TYPE_VFS || reg->type == REG_TYPE_VFD
+ || reg->type == REG_TYPE_NQ))
+ || (type == REG_TYPE_MMXWC
+ && (reg->type == REG_TYPE_MMXWCG)))
+ type = reg->type;
+
+ if (type != reg->type)
+ return FAIL;
+
+ if (reg->neon)
+ atype = *reg->neon;
+
+ if (parse_neon_operand_type (&parsetype, &str) == SUCCESS)
+ {
+ if ((atype.defined & NTA_HASTYPE) != 0)
+ {
+ first_error (_("can't redefine type for operand"));
+ return FAIL;
+ }
+ atype.defined |= NTA_HASTYPE;
+ atype.eltype = parsetype;
+ }
+
+ if (skip_past_char (&str, '[') == SUCCESS)
+ {
+ if (type != REG_TYPE_VFD)
+ {
+ first_error (_("only D registers may be indexed"));
+ return FAIL;
+ }
+
+ if ((atype.defined & NTA_HASINDEX) != 0)
+ {
+ first_error (_("can't change index for operand"));
+ return FAIL;
+ }
+
+ atype.defined |= NTA_HASINDEX;
+
+ if (skip_past_char (&str, ']') == SUCCESS)
+ atype.index = NEON_ALL_LANES;
+ else
+ {
+ expressionS exp;
+
+ my_get_expression (&exp, &str, GE_NO_PREFIX);
+
+ if (exp.X_op != O_constant)
+ {
+ first_error (_("constant expression required"));
+ return FAIL;
+ }
+
+ if (skip_past_char (&str, ']') == FAIL)
+ return FAIL;
+
+ atype.index = exp.X_add_number;
+ }
+ }
+
+ if (typeinfo)
+ *typeinfo = atype;
+
+ if (rtype)
+ *rtype = type;
+
+ *ccp = str;
+
+ return reg->number;
+}
+
+/* Like arm_reg_parse, but allow allow the following extra features:
+ - If RTYPE is non-zero, return the (possibly restricted) type of the
+ register (e.g. Neon double or quad reg when either has been requested).
+ - If this is a Neon vector type with additional type information, fill
+ in the struct pointed to by VECTYPE (if non-NULL).
+ This function will fault on encountering a scalar.
+*/
+
+static int
+arm_typed_reg_parse (char **ccp, enum arm_reg_type type,
+ enum arm_reg_type *rtype, struct neon_type_el *vectype)
+{
+ struct neon_typed_alias atype;
+ char *str = *ccp;
+ int reg = parse_typed_reg_or_scalar (&str, type, rtype, &atype);
+
+ if (reg == FAIL)
+ return FAIL;
+
+ /* Do not allow a scalar (reg+index) to parse as a register. */
+ if ((atype.defined & NTA_HASINDEX) != 0)
+ {
+ first_error (_("register operand expected, but got scalar"));
+ return FAIL;
+ }
+
+ if (vectype)
+ *vectype = atype.eltype;
+
+ *ccp = str;
+
+ return reg;
+}
+
+#define NEON_SCALAR_REG(X) ((X) >> 4)
+#define NEON_SCALAR_INDEX(X) ((X) & 15)
+
+/* Parse a Neon scalar. Most of the time when we're parsing a scalar, we don't
+ have enough information to be able to do a good job bounds-checking. So, we
+ just do easy checks here, and do further checks later. */
+
+static int
+parse_scalar (char **ccp, int elsize, struct neon_type_el *type)
+{
+ int reg;
+ char *str = *ccp;
+ struct neon_typed_alias atype;
+
+ reg = parse_typed_reg_or_scalar (&str, REG_TYPE_VFD, NULL, &atype);
+
+ if (reg == FAIL || (atype.defined & NTA_HASINDEX) == 0)
+ return FAIL;
+
+ if (atype.index == NEON_ALL_LANES)
+ {
+ first_error (_("scalar must have an index"));
+ return FAIL;
+ }
+ else if (atype.index >= 64 / elsize)
+ {
+ first_error (_("scalar index out of range"));
+ return FAIL;
+ }
+
+ if (type)
+ *type = atype.eltype;
+
+ *ccp = str;
+
+ return reg * 16 + atype.index;
+}
+
/* Parse an ARM register list. Returns the bitmask, or FAIL. */
static long
parse_reg_list (char ** strp)
@@ -1011,7 +1441,7 @@ parse_reg_list (char ** strp)
if ((reg = arm_reg_parse (&str, REG_TYPE_RN)) == FAIL)
{
- inst.error = _(reg_expected_msgs[REG_TYPE_RN]);
+ first_error (_(reg_expected_msgs[REG_TYPE_RN]));
return FAIL;
}
@@ -1021,7 +1451,7 @@ parse_reg_list (char ** strp)
if (reg <= cur_reg)
{
- inst.error = _("bad range in register list");
+ first_error (_("bad range in register list"));
return FAIL;
}
@@ -1052,7 +1482,7 @@ parse_reg_list (char ** strp)
if (*str++ != '}')
{
- inst.error = _("missing `}'");
+ first_error (_("missing `}'"));
return FAIL;
}
}
@@ -1111,55 +1541,117 @@ parse_reg_list (char ** strp)
return range;
}
+/* Types of registers in a list. */
+
+enum reg_list_els
+{
+ REGLIST_VFP_S,
+ REGLIST_VFP_D,
+ REGLIST_NEON_D
+};
+
/* Parse a VFP register list. If the string is invalid return FAIL.
Otherwise return the number of registers, and set PBASE to the first
- register. Double precision registers are matched if DP is nonzero. */
+ register. Parses registers of type ETYPE.
+ If REGLIST_NEON_D is used, several syntax enhancements are enabled:
+ - Q registers can be used to specify pairs of D registers
+ - { } can be omitted from around a singleton register list
+ FIXME: This is not implemented, as it would require backtracking in
+ some cases, e.g.:
+ vtbl.8 d3,d4,d5
+ This could be done (the meaning isn't really ambiguous), but doesn't
+ fit in well with the current parsing framework.
+ - 32 D registers may be used (also true for VFPv3).
+ FIXME: Types are ignored in these register lists, which is probably a
+ bug. */
static int
-parse_vfp_reg_list (char **str, unsigned int *pbase, int dp)
+parse_vfp_reg_list (char **ccp, unsigned int *pbase, enum reg_list_els etype)
{
+ char *str = *ccp;
int base_reg;
int new_base;
- int regtype;
- int max_regs;
+ enum arm_reg_type regtype = 0;
+ int max_regs = 0;
int count = 0;
int warned = 0;
unsigned long mask = 0;
int i;
- if (**str != '{')
- return FAIL;
+ if (*str != '{')
+ {
+ inst.error = _("expecting {");
+ return FAIL;
+ }
- (*str)++;
+ str++;
- if (dp)
+ switch (etype)
{
+ case REGLIST_VFP_S:
+ regtype = REG_TYPE_VFS;
+ max_regs = 32;
+ break;
+
+ case REGLIST_VFP_D:
regtype = REG_TYPE_VFD;
- max_regs = 16;
+ break;
+
+ case REGLIST_NEON_D:
+ regtype = REG_TYPE_NDQ;
+ break;
}
- else
+
+ if (etype != REGLIST_VFP_S)
{
- regtype = REG_TYPE_VFS;
- max_regs = 32;
+ /* VFPv3 allows 32 D registers. */
+ if (ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_v3))
+ {
+ max_regs = 32;
+ if (thumb_mode)
+ ARM_MERGE_FEATURE_SETS (thumb_arch_used, thumb_arch_used,
+ fpu_vfp_ext_v3);
+ else
+ ARM_MERGE_FEATURE_SETS (arm_arch_used, arm_arch_used,
+ fpu_vfp_ext_v3);
+ }
+ else
+ max_regs = 16;
}
base_reg = max_regs;
do
{
- new_base = arm_reg_parse (str, regtype);
+ int setmask = 1, addregs = 1;
+
+ new_base = arm_typed_reg_parse (&str, regtype, &regtype, NULL);
+
if (new_base == FAIL)
{
- inst.error = gettext (reg_expected_msgs[regtype]);
+ first_error (_(reg_expected_msgs[regtype]));
return FAIL;
}
+
+ if (new_base >= max_regs)
+ {
+ first_error (_("register out of range in list"));
+ return FAIL;
+ }
+
+ /* Note: a value of 2 * n is returned for the register Q<n>. */
+ if (regtype == REG_TYPE_NQ)
+ {
+ setmask = 3;
+ addregs = 2;
+ }
if (new_base < base_reg)
base_reg = new_base;
- if (mask & (1 << new_base))
+ if (mask & (setmask << new_base))
{
- inst.error = _("invalid register list");
+ first_error (_("invalid register list"));
return FAIL;
}
@@ -1169,43 +1661,53 @@ parse_vfp_reg_list (char **str, unsigned int *pbase, int dp)
warned = 1;
}
- mask |= 1 << new_base;
- count++;
+ mask |= setmask << new_base;
+ count += addregs;
- if (**str == '-') /* We have the start of a range expression */
+ if (*str == '-') /* We have the start of a range expression */
{
int high_range;
- (*str)++;
+ str++;
- if ((high_range = arm_reg_parse (str, regtype)) == FAIL)
+ if ((high_range = arm_typed_reg_parse (&str, regtype, NULL, NULL))
+ == FAIL)
{
inst.error = gettext (reg_expected_msgs[regtype]);
return FAIL;
}
+ if (high_range >= max_regs)
+ {
+ first_error (_("register out of range in list"));
+ return FAIL;
+ }
+
+ if (regtype == REG_TYPE_NQ)
+ high_range = high_range + 1;
+
if (high_range <= new_base)
{
inst.error = _("register range not in ascending order");
return FAIL;
}
- for (new_base++; new_base <= high_range; new_base++)
+ for (new_base += addregs; new_base <= high_range; new_base += addregs)
{
- if (mask & (1 << new_base))
+ if (mask & (setmask << new_base))
{
inst.error = _("invalid register list");
return FAIL;
}
- mask |= 1 << new_base;
- count++;
+ mask |= setmask << new_base;
+ count += addregs;
}
}
}
- while (skip_past_comma (str) != FAIL);
+ while (skip_past_comma (&str) != FAIL);
- (*str)++;
+ str++;
/* Sanity check -- should have raised a parse error above. */
if (count == 0 || count > max_regs)
@@ -1224,9 +1726,204 @@ parse_vfp_reg_list (char **str, unsigned int *pbase, int dp)
}
}
+ *ccp = str;
+
return count;
}
+/* True if two alias types are the same. */
+
+static int
+neon_alias_types_same (struct neon_typed_alias *a, struct neon_typed_alias *b)
+{
+ if (!a && !b)
+ return 1;
+
+ if (!a || !b)
+ return 0;
+
+ if (a->defined != b->defined)
+ return 0;
+
+ if ((a->defined & NTA_HASTYPE) != 0
+ && (a->eltype.type != b->eltype.type
+ || a->eltype.size != b->eltype.size))
+ return 0;
+
+ if ((a->defined & NTA_HASINDEX) != 0
+ && (a->index != b->index))
+ return 0;
+
+ return 1;
+}
+
+/* Parse element/structure lists for Neon VLD<n> and VST<n> instructions.
+ The base register is put in *PBASE.
+ The lane (or one of the NEON_*_LANES constants) is placed in bits [3:0] of
+ the return value.
+ The register stride (minus one) is put in bit 4 of the return value.
+ Bits [6:5] encode the list length (minus one).
+ The type of the list elements is put in *ELTYPE, if non-NULL. */
+
+#define NEON_LANE(X) ((X) & 0xf)
+#define NEON_REG_STRIDE(X) ((((X) >> 4) & 1) + 1)
+#define NEON_REGLIST_LENGTH(X) ((((X) >> 5) & 3) + 1)
+
+static int
+parse_neon_el_struct_list (char **str, unsigned *pbase,
+ struct neon_type_el *eltype)
+{
+ char *ptr = *str;
+ int base_reg = -1;
+ int reg_incr = -1;
+ int count = 0;
+ int lane = -1;
+ int leading_brace = 0;
+ enum arm_reg_type rtype = REG_TYPE_NDQ;
+ int addregs = 1;
+ const char *const incr_error = "register stride must be 1 or 2";
+ const char *const type_error = "mismatched element/structure types in list";
+ struct neon_typed_alias firsttype;
+
+ if (skip_past_char (&ptr, '{') == SUCCESS)
+ leading_brace = 1;
+
+ do
+ {
+ struct neon_typed_alias atype;
+ int getreg = parse_typed_reg_or_scalar (&ptr, rtype, &rtype, &atype);
+
+ if (getreg == FAIL)
+ {
+ first_error (_(reg_expected_msgs[rtype]));
+ return FAIL;
+ }
+
+ if (base_reg == -1)
+ {
+ base_reg = getreg;
+ if (rtype == REG_TYPE_NQ)
+ {
+ reg_incr = 1;
+ addregs = 2;
+ }
+ firsttype = atype;
+ }
+ else if (reg_incr == -1)
+ {
+ reg_incr = getreg - base_reg;
+ if (reg_incr < 1 || reg_incr > 2)
+ {
+ first_error (_(incr_error));
+ return FAIL;
+ }
+ }
+ else if (getreg != base_reg + reg_incr * count)
+ {
+ first_error (_(incr_error));
+ return FAIL;
+ }
+
+ if (!neon_alias_types_same (&atype, &firsttype))
+ {
+ first_error (_(type_error));
+ return FAIL;
+ }
+
+ /* Handle Dn-Dm or Qn-Qm syntax. Can only be used with non-indexed list
+ modes. */
+ if (ptr[0] == '-')
+ {
+ struct neon_typed_alias htype;
+ int hireg, dregs = (rtype == REG_TYPE_NQ) ? 2 : 1;
+ if (lane == -1)
+ lane = NEON_INTERLEAVE_LANES;
+ else if (lane != NEON_INTERLEAVE_LANES)
+ {
+ first_error (_(type_error));
+ return FAIL;
+ }
+ if (reg_incr == -1)
+ reg_incr = 1;
+ else if (reg_incr != 1)
+ {
+ first_error (_("don't use Rn-Rm syntax with non-unit stride"));
+ return FAIL;
+ }
+ ptr++;
+ hireg = parse_typed_reg_or_scalar (&ptr, rtype, NULL, &htype);
+ if (hireg == FAIL)
+ {
+ first_error (_(reg_expected_msgs[rtype]));
+ return FAIL;
+ }
+ if (!neon_alias_types_same (&htype, &firsttype))
+ {
+ first_error (_(type_error));
+ return FAIL;
+ }
+ count += hireg + dregs - getreg;
+ continue;
+ }
+
+ /* If we're using Q registers, we can't use [] or [n] syntax. */
+ if (rtype == REG_TYPE_NQ)
+ {
+ count += 2;
+ continue;
+ }
+
+ if ((atype.defined & NTA_HASINDEX) != 0)
+ {
+ if (lane == -1)
+ lane = atype.index;
+ else if (lane != atype.index)
+ {
+ first_error (_(type_error));
+ return FAIL;
+ }
+ }
+ else if (lane == -1)
+ lane = NEON_INTERLEAVE_LANES;
+ else if (lane != NEON_INTERLEAVE_LANES)
+ {
+ first_error (_(type_error));
+ return FAIL;
+ }
+ count++;
+ }
+ while ((count != 1 || leading_brace) && skip_past_comma (&ptr) != FAIL);
+
+ /* No lane set by [x]. We must be interleaving structures. */
+ if (lane == -1)
+ lane = NEON_INTERLEAVE_LANES;
+
+ /* Sanity check. */
+ if (lane == -1 || base_reg == -1 || count < 1 || count > 4
+ || (count > 1 && reg_incr == -1))
+ {
+ first_error (_("error parsing element/structure list"));
+ return FAIL;
+ }
+
+ if ((count > 1 || leading_brace) && skip_past_char (&ptr, '}') == FAIL)
+ {
+ first_error (_("expected }"));
+ return FAIL;
+ }
+
+ if (reg_incr == -1)
+ reg_incr = 1;
+
+ if (eltype)
+ *eltype = firsttype.eltype;
+
+ *pbase = base_reg;
+ *str = ptr;
+
+ return lane | ((reg_incr - 1) << 4) | ((count - 1) << 5);
+}
+
/* Parse an explicit relocation suffix on an expression. This is
either nothing, or a word in parentheses. Note that if !OBJ_ELF,
arm_reloc_hsh contains no entries, so this function can only
@@ -1258,7 +1955,7 @@ parse_reloc (char **str)
/* Directives: register aliases. */
-static void
+static struct reg_entry *
insert_reg_alias (char *str, int number, int type)
{
struct reg_entry *new;
@@ -1274,7 +1971,7 @@ insert_reg_alias (char *str, int number, int type)
else if (new->number != number || new->type != type)
as_warn (_("ignoring redefinition of register alias '%s'"), str);
- return;
+ return 0;
}
name = xstrdup (str);
@@ -1284,9 +1981,31 @@ insert_reg_alias (char *str, int number, int type)
new->number = number;
new->type = type;
new->builtin = FALSE;
+ new->neon = NULL;
if (hash_insert (arm_reg_hsh, name, (PTR) new))
abort ();
+
+ return new;
+}
+
+static void
+insert_neon_reg_alias (char *str, int number, int type,
+ struct neon_typed_alias *atype)
+{
+ struct reg_entry *reg = insert_reg_alias (str, number, type);
+
+ if (!reg)
+ {
+ first_error (_("attempt to redefine typed alias"));
+ return;
+ }
+
+ if (atype)
+ {
+ reg->neon = xmalloc (sizeof (struct neon_typed_alias));
+ *reg->neon = *atype;
+ }
}
/* Look for the .req directive. This is of the form:
@@ -1354,6 +2073,148 @@ create_register_alias (char * newname, char *p)
return 1;
}
+/* Create a Neon typed/indexed register alias using directives, e.g.:
+ X .dn d5.s32[1]
+ Y .qn 6.s16
+ Z .dn d7
+ T .dn Z[0]
+ These typed registers can be used instead of the types specified after the
+ Neon mnemonic, so long as all operands given have types. Types can also be
+ specified directly, e.g.:
+ vadd d0.s32, d1.s32, d2.s32
+*/
+
+static int
+create_neon_reg_alias (char *newname, char *p)
+{
+ enum arm_reg_type basetype;
+ struct reg_entry *basereg;
+ struct reg_entry mybasereg;
+ struct neon_type ntype;
+ struct neon_typed_alias typeinfo;
+ char *namebuf, *nameend;
+ int namelen;
+
+ typeinfo.defined = 0;
+ typeinfo.eltype.type = NT_invtype;
+ typeinfo.eltype.size = -1;
+ typeinfo.index = -1;
+
+ nameend = p;
+
+ if (strncmp (p, " .dn ", 5) == 0)
+ basetype = REG_TYPE_VFD;
+ else if (strncmp (p, " .qn ", 5) == 0)
+ basetype = REG_TYPE_NQ;
+ else
+ return 0;
+
+ p += 5;
+
+ if (*p == '\0')
+ return 0;
+
+ basereg = arm_reg_parse_multi (&p);
+
+ if (basereg && basereg->type != basetype)
+ {
+ as_bad (_("bad type for register"));
+ return 0;
+ }
+
+ if (basereg == NULL)
+ {
+ expressionS exp;
+ /* Try parsing as an integer. */
+ my_get_expression (&exp, &p, GE_NO_PREFIX);
+ if (exp.X_op != O_constant)
+ {
+ as_bad (_("expression must be constant"));
+ return 0;
+ }
+ basereg = &mybasereg;
+ basereg->number = (basetype == REG_TYPE_NQ) ? exp.X_add_number * 2
+ : exp.X_add_number;
+ basereg->neon = 0;
+ }
+
+ if (basereg->neon)
+ typeinfo = *basereg->neon;
+
+ if (parse_neon_type (&ntype, &p) == SUCCESS)
+ {
+ /* We got a type. */
+ if (typeinfo.defined & NTA_HASTYPE)
+ {
+ as_bad (_("can't redefine the type of a register alias"));
+ return 0;
+ }
+
+ typeinfo.defined |= NTA_HASTYPE;
+ if (ntype.elems != 1)
+ {
+ as_bad (_("you must specify a single type only"));
+ return 0;
+ }
+ typeinfo.eltype = ntype.el[0];
+ }
+
+ if (skip_past_char (&p, '[') == SUCCESS)
+ {
+ expressionS exp;
+ /* We got a scalar index. */
+
+ if (typeinfo.defined & NTA_HASINDEX)
+ {
+ as_bad (_("can't redefine the index of a scalar alias"));
+ return 0;
+ }
+
+ my_get_expression (&exp, &p, GE_NO_PREFIX);
+
+ if (exp.X_op != O_constant)
+ {
+ as_bad (_("scalar index must be constant"));
+ return 0;
+ }
+
+ typeinfo.defined |= NTA_HASINDEX;
+ typeinfo.index = exp.X_add_number;
+
+ if (skip_past_char (&p, ']') == FAIL)
+ {
+ as_bad (_("expecting ]"));
+ return 0;
+ }
+ }
+
+ namelen = nameend - newname;
+ namebuf = alloca (namelen + 1);
+ strncpy (namebuf, newname, namelen);
+ namebuf[namelen] = '\0';
+
+ insert_neon_reg_alias (namebuf, basereg->number, basetype,
+ typeinfo.defined != 0 ? &typeinfo : NULL);
+
+ /* Insert name in all uppercase. */
+ for (p = namebuf; *p; p++)
+ *p = TOUPPER (*p);
+
+ if (strncmp (namebuf, newname, namelen))
+ insert_neon_reg_alias (namebuf, basereg->number, basetype,
+ typeinfo.defined != 0 ? &typeinfo : NULL);
+
+ /* Insert name in all lowercase. */
+ for (p = namebuf; *p; p++)
+ *p = TOLOWER (*p);
+
+ if (strncmp (namebuf, newname, namelen))
+ insert_neon_reg_alias (namebuf, basereg->number, basetype,
+ typeinfo.defined != 0 ? &typeinfo : NULL);
+
+ return 1;
+}
+
/* Should never be called, as .req goes between the alias and the
register name, not at the beginning of the line. */
static void
@@ -1362,6 +2223,18 @@ s_req (int a ATTRIBUTE_UNUSED)
as_bad (_("invalid syntax for .req directive"));
}
+static void
+s_dn (int a ATTRIBUTE_UNUSED)
+{
+ as_bad (_("invalid syntax for .dn directive"));
+}
+
+static void
+s_qn (int a ATTRIBUTE_UNUSED)
+{
+ as_bad (_("invalid syntax for .qn directive"));
+}
+
/* The .unreq directive deletes an alias which was previously defined
by .req. For example:
@@ -1399,6 +2272,8 @@ s_unreq (int a ATTRIBUTE_UNUSED)
{
hash_delete (arm_reg_hsh, name);
free ((char *) reg->name);
+ if (reg->neon)
+ free (reg->neon);
free (reg);
}
}
@@ -1417,7 +2292,7 @@ s_unreq (int a ATTRIBUTE_UNUSED)
static enum mstate mapstate = MAP_UNDEFINED;
-static void
+void
mapping_state (enum mstate state)
{
symbolS * symbolP;
@@ -1738,6 +2613,7 @@ static void
s_align (int unused ATTRIBUTE_UNUSED)
{
int temp;
+ bfd_boolean fill_p;
long temp_fill;
long max_alignment = 15;
@@ -1754,16 +2630,25 @@ s_align (int unused ATTRIBUTE_UNUSED)
{
input_line_pointer++;
temp_fill = get_absolute_expression ();
+ fill_p = TRUE;
}
else
- temp_fill = 0;
+ {
+ fill_p = FALSE;
+ temp_fill = 0;
+ }
if (!temp)
temp = 2;
/* Only make a frag if we HAVE to. */
if (temp && !need_pass_2)
- frag_align (temp, (int) temp_fill, 0);
+ {
+ if (!fill_p && subseg_text_p (now_seg))
+ frag_align_code (temp, 0);
+ else
+ frag_align (temp, (int) temp_fill, 0);
+ }
demand_empty_rest_of_line ();
record_alignment (now_seg, temp);
@@ -2414,7 +3299,57 @@ s_arm_unwind_save_fpa (int reg)
}
-/* Parse a directive saving VFP registers. */
+/* Parse a directive saving VFP registers for ARMv6 and above. */
+
+static void
+s_arm_unwind_save_vfp_armv6 (void)
+{
+ int count;
+ unsigned int start;
+ valueT op;
+ int num_vfpv3_regs = 0;
+ int num_regs_below_16;
+
+ count = parse_vfp_reg_list (&input_line_pointer, &start, REGLIST_VFP_D);
+ if (count == FAIL)
+ {
+ as_bad (_("expected register list"));
+ ignore_rest_of_line ();
+ return;
+ }
+
+ demand_empty_rest_of_line ();
+
+ /* We always generate FSTMD/FLDMD-style unwinding opcodes (rather
+ than FSTMX/FLDMX-style ones). */
+
+ /* Generate opcode for (VFPv3) registers numbered in the range 16 .. 31. */
+ if (start >= 16)
+ num_vfpv3_regs = count;
+ else if (start + count > 16)
+ num_vfpv3_regs = start + count - 16;
+
+ if (num_vfpv3_regs > 0)
+ {
+ int start_offset = start > 16 ? start - 16 : 0;
+ op = 0xc800 | (start_offset << 4) | (num_vfpv3_regs - 1);
+ add_unwind_opcode (op, 2);
+ }
+
+ /* Generate opcode for registers numbered in the range 0 .. 15. */
+ num_regs_below_16 = num_vfpv3_regs > 0 ? 16 - (int) start : count;
+ assert (num_regs_below_16 + num_vfpv3_regs == count);
+ if (num_regs_below_16 > 0)
+ {
+ op = 0xc900 | (start << 4) | (num_regs_below_16 - 1);
+ add_unwind_opcode (op, 2);
+ }
+
+ unwind.frame_size += count * 8;
+}
+
+
+/* Parse a directive saving VFP registers for pre-ARMv6. */
static void
s_arm_unwind_save_vfp (void)
@@ -2423,7 +3358,7 @@ s_arm_unwind_save_vfp (void)
unsigned int reg;
valueT op;
- count = parse_vfp_reg_list (&input_line_pointer, &reg, 1);
+ count = parse_vfp_reg_list (&input_line_pointer, &reg, REGLIST_VFP_D);
if (count == FAIL)
{
as_bad (_("expected register list"));
@@ -2502,7 +3437,7 @@ s_arm_unwind_save_mmxwr (void)
demand_empty_rest_of_line ();
- /* Generate any deferred opcodes becuuse we're going to be looking at
+ /* Generate any deferred opcodes because we're going to be looking at
the list. */
flush_pending_unwind ();
@@ -2538,7 +3473,7 @@ s_arm_unwind_save_mmxwr (void)
op = 0xffff << (reg - 1);
if (reg > 0
- || ((mask & op) == (1u << (reg - 1))))
+ && ((mask & op) == (1u << (reg - 1))))
{
op = (1 << (reg + i + 1)) - 1;
op &= ~((1 << reg) - 1);
@@ -2635,7 +3570,7 @@ s_arm_unwind_save_mmxwcg (void)
demand_empty_rest_of_line ();
- /* Generate any deferred opcodes becuuse we're going to be looking at
+ /* Generate any deferred opcodes because we're going to be looking at
the list. */
flush_pending_unwind ();
@@ -2652,10 +3587,11 @@ error:
}
-/* Parse an unwind_save directive. */
+/* Parse an unwind_save directive.
+ If the argument is non-zero, this is a .vsave directive. */
static void
-s_arm_unwind_save (int ignored ATTRIBUTE_UNUSED)
+s_arm_unwind_save (int arch_v6)
{
char *peek;
struct reg_entry *reg;
@@ -2692,7 +3628,12 @@ s_arm_unwind_save (int ignored ATTRIBUTE_UNUSED)
return;
case REG_TYPE_RN: s_arm_unwind_save_core (); return;
- case REG_TYPE_VFD: s_arm_unwind_save_vfp (); return;
+ case REG_TYPE_VFD:
+ if (arch_v6)
+ s_arm_unwind_save_vfp_armv6 ();
+ else
+ s_arm_unwind_save_vfp ();
+ return;
case REG_TYPE_MMXWR: s_arm_unwind_save_mmxwr (); return;
case REG_TYPE_MMXWCG: s_arm_unwind_save_mmxwcg (); return;
@@ -2710,6 +3651,7 @@ s_arm_unwind_movsp (int ignored ATTRIBUTE_UNUSED)
{
int reg;
valueT op;
+ int offset;
reg = arm_reg_parse (&input_line_pointer, REG_TYPE_RN);
if (reg == FAIL)
@@ -2718,6 +3660,16 @@ s_arm_unwind_movsp (int ignored ATTRIBUTE_UNUSED)
ignore_rest_of_line ();
return;
}
+
+ /* Optional constant. */
+ if (skip_past_comma (&input_line_pointer) != FAIL)
+ {
+ if (immediate_for_directive (&offset) == FAIL)
+ return;
+ }
+ else
+ offset = 0;
+
demand_empty_rest_of_line ();
if (reg == REG_SP || reg == REG_PC)
@@ -2735,7 +3687,7 @@ s_arm_unwind_movsp (int ignored ATTRIBUTE_UNUSED)
/* Record the information for later. */
unwind.fp_reg = reg;
- unwind.fp_offset = unwind.frame_size;
+ unwind.fp_offset = unwind.frame_size - offset;
unwind.sp_restored = 1;
}
@@ -2818,7 +3770,7 @@ static void
s_arm_unwind_raw (int ignored ATTRIBUTE_UNUSED)
{
expressionS exp;
- /* This is an arbitary limit. */
+ /* This is an arbitrary limit. */
unsigned char op[16];
int count;
@@ -2877,90 +3829,36 @@ s_arm_unwind_raw (int ignored ATTRIBUTE_UNUSED)
static void
s_arm_eabi_attribute (int ignored ATTRIBUTE_UNUSED)
{
- expressionS exp;
- bfd_boolean is_string;
- int tag;
- unsigned int i = 0;
- char *s = NULL;
- char saved_char;
+ s_vendor_attribute (OBJ_ATTR_PROC);
+}
+#endif /* OBJ_ELF */
- expression (& exp);
- if (exp.X_op != O_constant)
- goto bad;
+static void s_arm_arch (int);
+static void s_arm_object_arch (int);
+static void s_arm_cpu (int);
+static void s_arm_fpu (int);
- tag = exp.X_add_number;
- if (tag == 4 || tag == 5 || tag == 32 || (tag > 32 && (tag & 1) != 0))
- is_string = 1;
- else
- is_string = 0;
+#ifdef TE_PE
- if (skip_past_comma (&input_line_pointer) == FAIL)
- goto bad;
- if (tag == 32 || !is_string)
- {
- expression (& exp);
- if (exp.X_op != O_constant)
- {
- as_bad (_("expected numeric constant"));
- ignore_rest_of_line ();
- return;
- }
- i = exp.X_add_number;
- }
- if (tag == Tag_compatibility
- && skip_past_comma (&input_line_pointer) == FAIL)
- {
- as_bad (_("expected comma"));
- ignore_rest_of_line ();
- return;
- }
- if (is_string)
- {
- skip_whitespace(input_line_pointer);
- if (*input_line_pointer != '"')
- goto bad_string;
- input_line_pointer++;
- s = input_line_pointer;
- while (*input_line_pointer && *input_line_pointer != '"')
- input_line_pointer++;
- if (*input_line_pointer != '"')
- goto bad_string;
- saved_char = *input_line_pointer;
- *input_line_pointer = 0;
- }
- else
- {
- s = NULL;
- saved_char = 0;
- }
-
- if (tag == Tag_compatibility)
- elf32_arm_add_eabi_attr_compat (stdoutput, i, s);
- else if (is_string)
- elf32_arm_add_eabi_attr_string (stdoutput, tag, s);
- else
- elf32_arm_add_eabi_attr_int (stdoutput, tag, i);
+static void
+pe_directive_secrel (int dummy ATTRIBUTE_UNUSED)
+{
+ expressionS exp;
- if (s)
+ do
{
- *input_line_pointer = saved_char;
- input_line_pointer++;
+ expression (&exp);
+ if (exp.X_op == O_symbol)
+ exp.X_op = O_secrel;
+
+ emit_expr (&exp, 4);
}
+ while (*input_line_pointer++ == ',');
+
+ input_line_pointer--;
demand_empty_rest_of_line ();
- return;
-bad_string:
- as_bad (_("bad string constant"));
- ignore_rest_of_line ();
- return;
-bad:
- as_bad (_("expected <tag> , <value>"));
- ignore_rest_of_line ();
}
-
-static void s_arm_arch (int);
-static void s_arm_cpu (int);
-static void s_arm_fpu (int);
-#endif /* OBJ_ELF */
+#endif /* TE_PE */
/* This table describes all the machine specific pseudo-ops the assembler
has to support. The fields are:
@@ -2972,6 +3870,9 @@ const pseudo_typeS md_pseudo_table[] =
{
/* Never called because '.req' does not start a line. */
{ "req", s_req, 0 },
+ /* Following two are likewise never called. */
+ { "dn", s_dn, 0 },
+ { "qn", s_qn, 0 },
{ "unreq", s_unreq, 0 },
{ "bss", s_bss, 0 },
{ "align", s_align, 0 },
@@ -2985,6 +3886,10 @@ const pseudo_typeS md_pseudo_table[] =
{ "ltorg", s_ltorg, 0 },
{ "pool", s_ltorg, 0 },
{ "syntax", s_syntax, 0 },
+ { "cpu", s_arm_cpu, 0 },
+ { "arch", s_arm_arch, 0 },
+ { "object_arch", s_arm_object_arch, 0 },
+ { "fpu", s_arm_fpu, 0 },
#ifdef OBJ_ELF
{ "word", s_arm_elf_cons, 4 },
{ "long", s_arm_elf_cons, 4 },
@@ -2996,20 +3901,30 @@ const pseudo_typeS md_pseudo_table[] =
{ "personalityindex", s_arm_unwind_personalityindex, 0 },
{ "handlerdata", s_arm_unwind_handlerdata, 0 },
{ "save", s_arm_unwind_save, 0 },
+ { "vsave", s_arm_unwind_save, 1 },
{ "movsp", s_arm_unwind_movsp, 0 },
{ "pad", s_arm_unwind_pad, 0 },
{ "setfp", s_arm_unwind_setfp, 0 },
{ "unwind_raw", s_arm_unwind_raw, 0 },
- { "cpu", s_arm_cpu, 0 },
- { "arch", s_arm_arch, 0 },
- { "fpu", s_arm_fpu, 0 },
{ "eabi_attribute", s_arm_eabi_attribute, 0 },
#else
{ "word", cons, 4},
+
+ /* These are used for dwarf. */
+ {"2byte", cons, 2},
+ {"4byte", cons, 4},
+ {"8byte", cons, 8},
+ /* These are used for dwarf2. */
+ { "file", (void (*) (int)) dwarf2_directive_file, 0 },
+ { "loc", dwarf2_directive_loc, 0 },
+ { "loc_mark_labels", dwarf2_directive_loc_mark_labels, 0 },
#endif
{ "extend", float_cons, 'x' },
{ "ldouble", float_cons, 'x' },
{ "packed", float_cons, 'p' },
+#ifdef TE_PE
+ {"secrel32", pe_directive_secrel, 0},
+#endif
{ 0, 0, 0 }
};
@@ -3043,6 +3958,58 @@ parse_immediate (char **str, int *val, int min, int max,
return SUCCESS;
}
+/* Less-generic immediate-value read function with the possibility of loading a
+ big (64-bit) immediate, as required by Neon VMOV, VMVN and logic immediate
+ instructions. Puts the result directly in inst.operands[i]. */
+
+static int
+parse_big_immediate (char **str, int i)
+{
+ expressionS exp;
+ char *ptr = *str;
+
+ my_get_expression (&exp, &ptr, GE_OPT_PREFIX_BIG);
+
+ if (exp.X_op == O_constant)
+ {
+ inst.operands[i].imm = exp.X_add_number & 0xffffffff;
+ /* If we're on a 64-bit host, then a 64-bit number can be returned using
+ O_constant. We have to be careful not to break compilation for
+ 32-bit X_add_number, though. */
+ if ((exp.X_add_number & ~0xffffffffl) != 0)
+ {
+ /* X >> 32 is illegal if sizeof (exp.X_add_number) == 4. */
+ inst.operands[i].reg = ((exp.X_add_number >> 16) >> 16) & 0xffffffff;
+ inst.operands[i].regisimm = 1;
+ }
+ }
+ else if (exp.X_op == O_big
+ && LITTLENUM_NUMBER_OF_BITS * exp.X_add_number > 32
+ && LITTLENUM_NUMBER_OF_BITS * exp.X_add_number <= 64)
+ {
+ unsigned parts = 32 / LITTLENUM_NUMBER_OF_BITS, j, idx = 0;
+ /* Bignums have their least significant bits in
+ generic_bignum[0]. Make sure we put 32 bits in imm and
+ 32 bits in reg, in a (hopefully) portable way. */
+ assert (parts != 0);
+ inst.operands[i].imm = 0;
+ for (j = 0; j < parts; j++, idx++)
+ inst.operands[i].imm |= generic_bignum[idx]
+ << (LITTLENUM_NUMBER_OF_BITS * j);
+ inst.operands[i].reg = 0;
+ for (j = 0; j < parts; j++, idx++)
+ inst.operands[i].reg |= generic_bignum[idx]
+ << (LITTLENUM_NUMBER_OF_BITS * j);
+ inst.operands[i].regisimm = 1;
+ }
+ else
+ return FAIL;
+
+ *str = ptr;
+
+ return SUCCESS;
+}
+
/* Returns the pseudo-register number of an FPA immediate constant,
or FAIL if there isn't a valid constant here. */
@@ -3134,6 +4101,80 @@ parse_fpa_immediate (char ** str)
return FAIL;
}
+/* Returns 1 if a number has "quarter-precision" float format
+ 0baBbbbbbc defgh000 00000000 00000000. */
+
+static int
+is_quarter_float (unsigned imm)
+{
+ int bs = (imm & 0x20000000) ? 0x3e000000 : 0x40000000;
+ return (imm & 0x7ffff) == 0 && ((imm & 0x7e000000) ^ bs) == 0;
+}
+
+/* Parse an 8-bit "quarter-precision" floating point number of the form:
+ 0baBbbbbbc defgh000 00000000 00000000.
+ The zero and minus-zero cases need special handling, since they can't be
+ encoded in the "quarter-precision" float format, but can nonetheless be
+ loaded as integer constants. */
+
+static unsigned
+parse_qfloat_immediate (char **ccp, int *immed)
+{
+ char *str = *ccp;
+ char *fpnum;
+ LITTLENUM_TYPE words[MAX_LITTLENUMS];
+ int found_fpchar = 0;
+
+ skip_past_char (&str, '#');
+
+ /* We must not accidentally parse an integer as a floating-point number. Make
+ sure that the value we parse is not an integer by checking for special
+ characters '.' or 'e'.
+ FIXME: This is a horrible hack, but doing better is tricky because type
+ information isn't in a very usable state at parse time. */
+ fpnum = str;
+ skip_whitespace (fpnum);
+
+ if (strncmp (fpnum, "0x", 2) == 0)
+ return FAIL;
+ else
+ {
+ for (; *fpnum != '\0' && *fpnum != ' ' && *fpnum != '\n'; fpnum++)
+ if (*fpnum == '.' || *fpnum == 'e' || *fpnum == 'E')
+ {
+ found_fpchar = 1;
+ break;
+ }
+
+ if (!found_fpchar)
+ return FAIL;
+ }
+
+ if ((str = atof_ieee (str, 's', words)) != NULL)
+ {
+ unsigned fpword = 0;
+ int i;
+
+ /* Our FP word must be 32 bits (single-precision FP). */
+ for (i = 0; i < 32 / LITTLENUM_NUMBER_OF_BITS; i++)
+ {
+ fpword <<= LITTLENUM_NUMBER_OF_BITS;
+ fpword |= words[i];
+ }
+
+ if (is_quarter_float (fpword) || (fpword & 0x7fffffff) == 0)
+ *immed = fpword;
+ else
+ return FAIL;
+
+ *ccp = str;
+
+ return SUCCESS;
+ }
+
+ return FAIL;
+}
+
/* Shift operands. */
enum shift_kind
{
@@ -3317,6 +4358,168 @@ parse_shifter_operand (char **str, int i)
return SUCCESS;
}
+/* Group relocation information. Each entry in the table contains the
+ textual name of the relocation as may appear in assembler source
+ and must end with a colon.
+ Along with this textual name are the relocation codes to be used if
+ the corresponding instruction is an ALU instruction (ADD or SUB only),
+ an LDR, an LDRS, or an LDC. */
+
+struct group_reloc_table_entry
+{
+ const char *name;
+ int alu_code;
+ int ldr_code;
+ int ldrs_code;
+ int ldc_code;
+};
+
+typedef enum
+{
+ /* Varieties of non-ALU group relocation. */
+
+ GROUP_LDR,
+ GROUP_LDRS,
+ GROUP_LDC
+} group_reloc_type;
+
+static struct group_reloc_table_entry group_reloc_table[] =
+ { /* Program counter relative: */
+ { "pc_g0_nc",
+ BFD_RELOC_ARM_ALU_PC_G0_NC, /* ALU */
+ 0, /* LDR */
+ 0, /* LDRS */
+ 0 }, /* LDC */
+ { "pc_g0",
+ BFD_RELOC_ARM_ALU_PC_G0, /* ALU */
+ BFD_RELOC_ARM_LDR_PC_G0, /* LDR */
+ BFD_RELOC_ARM_LDRS_PC_G0, /* LDRS */
+ BFD_RELOC_ARM_LDC_PC_G0 }, /* LDC */
+ { "pc_g1_nc",
+ BFD_RELOC_ARM_ALU_PC_G1_NC, /* ALU */
+ 0, /* LDR */
+ 0, /* LDRS */
+ 0 }, /* LDC */
+ { "pc_g1",
+ BFD_RELOC_ARM_ALU_PC_G1, /* ALU */
+ BFD_RELOC_ARM_LDR_PC_G1, /* LDR */
+ BFD_RELOC_ARM_LDRS_PC_G1, /* LDRS */
+ BFD_RELOC_ARM_LDC_PC_G1 }, /* LDC */
+ { "pc_g2",
+ BFD_RELOC_ARM_ALU_PC_G2, /* ALU */
+ BFD_RELOC_ARM_LDR_PC_G2, /* LDR */
+ BFD_RELOC_ARM_LDRS_PC_G2, /* LDRS */
+ BFD_RELOC_ARM_LDC_PC_G2 }, /* LDC */
+ /* Section base relative */
+ { "sb_g0_nc",
+ BFD_RELOC_ARM_ALU_SB_G0_NC, /* ALU */
+ 0, /* LDR */
+ 0, /* LDRS */
+ 0 }, /* LDC */
+ { "sb_g0",
+ BFD_RELOC_ARM_ALU_SB_G0, /* ALU */
+ BFD_RELOC_ARM_LDR_SB_G0, /* LDR */
+ BFD_RELOC_ARM_LDRS_SB_G0, /* LDRS */
+ BFD_RELOC_ARM_LDC_SB_G0 }, /* LDC */
+ { "sb_g1_nc",
+ BFD_RELOC_ARM_ALU_SB_G1_NC, /* ALU */
+ 0, /* LDR */
+ 0, /* LDRS */
+ 0 }, /* LDC */
+ { "sb_g1",
+ BFD_RELOC_ARM_ALU_SB_G1, /* ALU */
+ BFD_RELOC_ARM_LDR_SB_G1, /* LDR */
+ BFD_RELOC_ARM_LDRS_SB_G1, /* LDRS */
+ BFD_RELOC_ARM_LDC_SB_G1 }, /* LDC */
+ { "sb_g2",
+ BFD_RELOC_ARM_ALU_SB_G2, /* ALU */
+ BFD_RELOC_ARM_LDR_SB_G2, /* LDR */
+ BFD_RELOC_ARM_LDRS_SB_G2, /* LDRS */
+ BFD_RELOC_ARM_LDC_SB_G2 } }; /* LDC */
+
+/* Given the address of a pointer pointing to the textual name of a group
+ relocation as may appear in assembler source, attempt to find its details
+ in group_reloc_table. The pointer will be updated to the character after
+ the trailing colon. On failure, FAIL will be returned; SUCCESS
+ otherwise. On success, *entry will be updated to point at the relevant
+ group_reloc_table entry. */
+
+static int
+find_group_reloc_table_entry (char **str, struct group_reloc_table_entry **out)
+{
+ unsigned int i;
+ for (i = 0; i < ARRAY_SIZE (group_reloc_table); i++)
+ {
+ int length = strlen (group_reloc_table[i].name);
+
+ if (strncasecmp (group_reloc_table[i].name, *str, length) == 0 &&
+ (*str)[length] == ':')
+ {
+ *out = &group_reloc_table[i];
+ *str += (length + 1);
+ return SUCCESS;
+ }
+ }
+
+ return FAIL;
+}
+
+/* Parse a <shifter_operand> for an ARM data processing instruction
+ (as for parse_shifter_operand) where group relocations are allowed:
+
+ #<immediate>
+ #<immediate>, <rotate>
+ #:<group_reloc>:<expression>
+ <Rm>
+ <Rm>, <shift>
+
+ where <group_reloc> is one of the strings defined in group_reloc_table.
+ The hashes are optional.
+
+ Everything else is as for parse_shifter_operand. */
+
+static parse_operand_result
+parse_shifter_operand_group_reloc (char **str, int i)
+{
+ /* Determine if we have the sequence of characters #: or just :
+ coming next. If we do, then we check for a group relocation.
+ If we don't, punt the whole lot to parse_shifter_operand. */
+
+ if (((*str)[0] == '#' && (*str)[1] == ':')
+ || (*str)[0] == ':')
+ {
+ struct group_reloc_table_entry *entry;
+
+ if ((*str)[0] == '#')
+ (*str) += 2;
+ else
+ (*str)++;
+
+ /* Try to parse a group relocation. Anything else is an error. */
+ if (find_group_reloc_table_entry (str, &entry) == FAIL)
+ {
+ inst.error = _("unknown group relocation");
+ return PARSE_OPERAND_FAIL_NO_BACKTRACK;
+ }
+
+ /* We now have the group relocation table entry corresponding to
+ the name in the assembler source. Next, we parse the expression. */
+ if (my_get_expression (&inst.reloc.exp, str, GE_NO_PREFIX))
+ return PARSE_OPERAND_FAIL_NO_BACKTRACK;
+
+ /* Record the relocation type (always the ALU variant here). */
+ inst.reloc.type = entry->alu_code;
+ assert (inst.reloc.type != 0);
+
+ return PARSE_OPERAND_SUCCESS;
+ }
+ else
+ return parse_shifter_operand (str, i) == SUCCESS
+ ? PARSE_OPERAND_SUCCESS : PARSE_OPERAND_FAIL;
+
+ /* Never reached. */
+}
+
/* Parse all forms of an ARM address expression. Information is written
to inst.operands[i] and/or inst.reloc.
@@ -3349,8 +4552,9 @@ parse_shifter_operand (char **str, int i)
It is the caller's responsibility to check for addressing modes not
supported by the instruction, and to set inst.reloc.type. */
-static int
-parse_address (char **str, int i)
+static parse_operand_result
+parse_address_main (char **str, int i, int group_relocations,
+ group_reloc_type group_type)
{
char *p = *str;
int reg;
@@ -3368,16 +4572,16 @@ parse_address (char **str, int i)
/* else a load-constant pseudo op, no special treatment needed here */
if (my_get_expression (&inst.reloc.exp, &p, GE_NO_PREFIX))
- return FAIL;
+ return PARSE_OPERAND_FAIL;
*str = p;
- return SUCCESS;
+ return PARSE_OPERAND_SUCCESS;
}
if ((reg = arm_reg_parse (&p, REG_TYPE_RN)) == FAIL)
{
inst.error = _(reg_expected_msgs[REG_TYPE_RN]);
- return FAIL;
+ return PARSE_OPERAND_FAIL;
}
inst.operands[i].reg = reg;
inst.operands[i].isreg = 1;
@@ -3396,8 +4600,25 @@ parse_address (char **str, int i)
if (skip_past_comma (&p) == SUCCESS)
if (parse_shift (&p, i, SHIFT_IMMEDIATE) == FAIL)
- return FAIL;
+ return PARSE_OPERAND_FAIL;
}
+ else if (skip_past_char (&p, ':') == SUCCESS)
+ {
+ /* FIXME: '@' should be used here, but it's filtered out by generic
+ code before we get to see it here. This may be subject to
+ change. */
+ expressionS exp;
+ my_get_expression (&exp, &p, GE_NO_PREFIX);
+ if (exp.X_op != O_constant)
+ {
+ inst.error = _("alignment must be constant");
+ return PARSE_OPERAND_FAIL;
+ }
+ inst.operands[i].imm = exp.X_add_number << 8;
+ inst.operands[i].immisalign = 1;
+ /* Alignments are not pre-indexes. */
+ inst.operands[i].preind = 0;
+ }
else
{
if (inst.operands[i].negative)
@@ -3405,15 +4626,68 @@ parse_address (char **str, int i)
inst.operands[i].negative = 0;
p--;
}
- if (my_get_expression (&inst.reloc.exp, &p, GE_IMM_PREFIX))
- return FAIL;
+
+ if (group_relocations &&
+ ((*p == '#' && *(p + 1) == ':') || *p == ':'))
+
+ {
+ struct group_reloc_table_entry *entry;
+
+ /* Skip over the #: or : sequence. */
+ if (*p == '#')
+ p += 2;
+ else
+ p++;
+
+ /* Try to parse a group relocation. Anything else is an
+ error. */
+ if (find_group_reloc_table_entry (&p, &entry) == FAIL)
+ {
+ inst.error = _("unknown group relocation");
+ return PARSE_OPERAND_FAIL_NO_BACKTRACK;
+ }
+
+ /* We now have the group relocation table entry corresponding to
+ the name in the assembler source. Next, we parse the
+ expression. */
+ if (my_get_expression (&inst.reloc.exp, &p, GE_NO_PREFIX))
+ return PARSE_OPERAND_FAIL_NO_BACKTRACK;
+
+ /* Record the relocation type. */
+ switch (group_type)
+ {
+ case GROUP_LDR:
+ inst.reloc.type = entry->ldr_code;
+ break;
+
+ case GROUP_LDRS:
+ inst.reloc.type = entry->ldrs_code;
+ break;
+
+ case GROUP_LDC:
+ inst.reloc.type = entry->ldc_code;
+ break;
+
+ default:
+ assert (0);
+ }
+
+ if (inst.reloc.type == 0)
+ {
+ inst.error = _("this group relocation is not allowed on this instruction");
+ return PARSE_OPERAND_FAIL_NO_BACKTRACK;
+ }
+ }
+ else
+ if (my_get_expression (&inst.reloc.exp, &p, GE_IMM_PREFIX))
+ return PARSE_OPERAND_FAIL;
}
}
if (skip_past_char (&p, ']') == FAIL)
{
inst.error = _("']' expected");
- return FAIL;
+ return PARSE_OPERAND_FAIL;
}
if (skip_past_char (&p, '!') == SUCCESS)
@@ -3426,20 +4700,20 @@ parse_address (char **str, int i)
/* [Rn], {expr} - unindexed, with option */
if (parse_immediate (&p, &inst.operands[i].imm,
0, 255, TRUE) == FAIL)
- return FAIL;
+ return PARSE_OPERAND_FAIL;
if (skip_past_char (&p, '}') == FAIL)
{
inst.error = _("'}' expected at end of 'option' field");
- return FAIL;
+ return PARSE_OPERAND_FAIL;
}
if (inst.operands[i].preind)
{
inst.error = _("cannot combine index with option");
- return FAIL;
+ return PARSE_OPERAND_FAIL;
}
*str = p;
- return SUCCESS;
+ return PARSE_OPERAND_SUCCESS;
}
else
{
@@ -3449,7 +4723,7 @@ parse_address (char **str, int i)
if (inst.operands[i].preind)
{
inst.error = _("cannot combine pre- and post-indexing");
- return FAIL;
+ return PARSE_OPERAND_FAIL;
}
if (*p == '+') p++;
@@ -3457,12 +4731,17 @@ parse_address (char **str, int i)
if ((reg = arm_reg_parse (&p, REG_TYPE_RN)) != FAIL)
{
- inst.operands[i].imm = reg;
+ /* We might be using the immediate for alignment already. If we
+ are, OR the register number into the low-order bits. */
+ if (inst.operands[i].immisalign)
+ inst.operands[i].imm |= reg;
+ else
+ inst.operands[i].imm = reg;
inst.operands[i].immisreg = 1;
if (skip_past_comma (&p) == SUCCESS)
if (parse_shift (&p, i, SHIFT_IMMEDIATE) == FAIL)
- return FAIL;
+ return PARSE_OPERAND_FAIL;
}
else
{
@@ -3472,7 +4751,7 @@ parse_address (char **str, int i)
p--;
}
if (my_get_expression (&inst.reloc.exp, &p, GE_IMM_PREFIX))
- return FAIL;
+ return PARSE_OPERAND_FAIL;
}
}
}
@@ -3486,6 +4765,59 @@ parse_address (char **str, int i)
inst.reloc.exp.X_add_number = 0;
}
*str = p;
+ return PARSE_OPERAND_SUCCESS;
+}
+
+static int
+parse_address (char **str, int i)
+{
+ return parse_address_main (str, i, 0, 0) == PARSE_OPERAND_SUCCESS
+ ? SUCCESS : FAIL;
+}
+
+static parse_operand_result
+parse_address_group_reloc (char **str, int i, group_reloc_type type)
+{
+ return parse_address_main (str, i, 1, type);
+}
+
+/* Parse an operand for a MOVW or MOVT instruction. */
+static int
+parse_half (char **str)
+{
+ char * p;
+
+ p = *str;
+ skip_past_char (&p, '#');
+ if (strncasecmp (p, ":lower16:", 9) == 0)
+ inst.reloc.type = BFD_RELOC_ARM_MOVW;
+ else if (strncasecmp (p, ":upper16:", 9) == 0)
+ inst.reloc.type = BFD_RELOC_ARM_MOVT;
+
+ if (inst.reloc.type != BFD_RELOC_UNUSED)
+ {
+ p += 9;
+ skip_whitespace(p);
+ }
+
+ if (my_get_expression (&inst.reloc.exp, &p, GE_NO_PREFIX))
+ return FAIL;
+
+ if (inst.reloc.type == BFD_RELOC_UNUSED)
+ {
+ if (inst.reloc.exp.X_op != O_constant)
+ {
+ inst.error = _("constant expression expected");
+ return FAIL;
+ }
+ if (inst.reloc.exp.X_add_number < 0
+ || inst.reloc.exp.X_add_number > 0xffff)
+ {
+ inst.error = _("immediate value out of range");
+ return FAIL;
+ }
+ }
+ *str = p;
return SUCCESS;
}
@@ -3752,6 +5084,228 @@ parse_tb (char **str)
return SUCCESS;
}
+/* Parse the operands of a Neon VMOV instruction. See do_neon_mov for more
+ information on the types the operands can take and how they are encoded.
+ Up to four operands may be read; this function handles setting the
+ ".present" field for each read operand itself.
+ Updates STR and WHICH_OPERAND if parsing is successful and returns SUCCESS,
+ else returns FAIL. */
+
+static int
+parse_neon_mov (char **str, int *which_operand)
+{
+ int i = *which_operand, val;
+ enum arm_reg_type rtype;
+ char *ptr = *str;
+ struct neon_type_el optype;
+
+ if ((val = parse_scalar (&ptr, 8, &optype)) != FAIL)
+ {
+ /* Case 4: VMOV<c><q>.<size> <Dn[x]>, <Rd>. */
+ inst.operands[i].reg = val;
+ inst.operands[i].isscalar = 1;
+ inst.operands[i].vectype = optype;
+ inst.operands[i++].present = 1;
+
+ if (skip_past_comma (&ptr) == FAIL)
+ goto wanted_comma;
+
+ if ((val = arm_reg_parse (&ptr, REG_TYPE_RN)) == FAIL)
+ goto wanted_arm;
+
+ inst.operands[i].reg = val;
+ inst.operands[i].isreg = 1;
+ inst.operands[i].present = 1;
+ }
+ else if ((val = arm_typed_reg_parse (&ptr, REG_TYPE_NSDQ, &rtype, &optype))
+ != FAIL)
+ {
+ /* Cases 0, 1, 2, 3, 5 (D only). */
+ if (skip_past_comma (&ptr) == FAIL)
+ goto wanted_comma;
+
+ inst.operands[i].reg = val;
+ inst.operands[i].isreg = 1;
+ inst.operands[i].isquad = (rtype == REG_TYPE_NQ);
+ inst.operands[i].issingle = (rtype == REG_TYPE_VFS);
+ inst.operands[i].isvec = 1;
+ inst.operands[i].vectype = optype;
+ inst.operands[i++].present = 1;
+
+ if ((val = arm_reg_parse (&ptr, REG_TYPE_RN)) != FAIL)
+ {
+ /* Case 5: VMOV<c><q> <Dm>, <Rd>, <Rn>.
+ Case 13: VMOV <Sd>, <Rm> */
+ inst.operands[i].reg = val;
+ inst.operands[i].isreg = 1;
+ inst.operands[i].present = 1;
+
+ if (rtype == REG_TYPE_NQ)
+ {
+ first_error (_("can't use Neon quad register here"));
+ return FAIL;
+ }
+ else if (rtype != REG_TYPE_VFS)
+ {
+ i++;
+ if (skip_past_comma (&ptr) == FAIL)
+ goto wanted_comma;
+ if ((val = arm_reg_parse (&ptr, REG_TYPE_RN)) == FAIL)
+ goto wanted_arm;
+ inst.operands[i].reg = val;
+ inst.operands[i].isreg = 1;
+ inst.operands[i].present = 1;
+ }
+ }
+ else if (parse_qfloat_immediate (&ptr, &inst.operands[i].imm) == SUCCESS)
+ /* Case 2: VMOV<c><q>.<dt> <Qd>, #<float-imm>
+ Case 3: VMOV<c><q>.<dt> <Dd>, #<float-imm>
+ Case 10: VMOV.F32 <Sd>, #<imm>
+ Case 11: VMOV.F64 <Dd>, #<imm> */
+ inst.operands[i].immisfloat = 1;
+ else if (parse_big_immediate (&ptr, i) == SUCCESS)
+ /* Case 2: VMOV<c><q>.<dt> <Qd>, #<imm>
+ Case 3: VMOV<c><q>.<dt> <Dd>, #<imm> */
+ ;
+ else if ((val = arm_typed_reg_parse (&ptr, REG_TYPE_NSDQ, &rtype,
+ &optype)) != FAIL)
+ {
+ /* Case 0: VMOV<c><q> <Qd>, <Qm>
+ Case 1: VMOV<c><q> <Dd>, <Dm>
+ Case 8: VMOV.F32 <Sd>, <Sm>
+ Case 15: VMOV <Sd>, <Se>, <Rn>, <Rm> */
+
+ inst.operands[i].reg = val;
+ inst.operands[i].isreg = 1;
+ inst.operands[i].isquad = (rtype == REG_TYPE_NQ);
+ inst.operands[i].issingle = (rtype == REG_TYPE_VFS);
+ inst.operands[i].isvec = 1;
+ inst.operands[i].vectype = optype;
+ inst.operands[i].present = 1;
+
+ if (skip_past_comma (&ptr) == SUCCESS)
+ {
+ /* Case 15. */
+ i++;
+
+ if ((val = arm_reg_parse (&ptr, REG_TYPE_RN)) == FAIL)
+ goto wanted_arm;
+
+ inst.operands[i].reg = val;
+ inst.operands[i].isreg = 1;
+ inst.operands[i++].present = 1;
+
+ if (skip_past_comma (&ptr) == FAIL)
+ goto wanted_comma;
+
+ if ((val = arm_reg_parse (&ptr, REG_TYPE_RN)) == FAIL)
+ goto wanted_arm;
+
+ inst.operands[i].reg = val;
+ inst.operands[i].isreg = 1;
+ inst.operands[i++].present = 1;
+ }
+ }
+ else
+ {
+ first_error (_("expected <Rm> or <Dm> or <Qm> operand"));
+ return FAIL;
+ }
+ }
+ else if ((val = arm_reg_parse (&ptr, REG_TYPE_RN)) != FAIL)
+ {
+ /* Cases 6, 7. */
+ inst.operands[i].reg = val;
+ inst.operands[i].isreg = 1;
+ inst.operands[i++].present = 1;
+
+ if (skip_past_comma (&ptr) == FAIL)
+ goto wanted_comma;
+
+ if ((val = parse_scalar (&ptr, 8, &optype)) != FAIL)
+ {
+ /* Case 6: VMOV<c><q>.<dt> <Rd>, <Dn[x]> */
+ inst.operands[i].reg = val;
+ inst.operands[i].isscalar = 1;
+ inst.operands[i].present = 1;
+ inst.operands[i].vectype = optype;
+ }
+ else if ((val = arm_reg_parse (&ptr, REG_TYPE_RN)) != FAIL)
+ {
+ /* Case 7: VMOV<c><q> <Rd>, <Rn>, <Dm> */
+ inst.operands[i].reg = val;
+ inst.operands[i].isreg = 1;
+ inst.operands[i++].present = 1;
+
+ if (skip_past_comma (&ptr) == FAIL)
+ goto wanted_comma;
+
+ if ((val = arm_typed_reg_parse (&ptr, REG_TYPE_VFSD, &rtype, &optype))
+ == FAIL)
+ {
+ first_error (_(reg_expected_msgs[REG_TYPE_VFSD]));
+ return FAIL;
+ }
+
+ inst.operands[i].reg = val;
+ inst.operands[i].isreg = 1;
+ inst.operands[i].isvec = 1;
+ inst.operands[i].issingle = (rtype == REG_TYPE_VFS);
+ inst.operands[i].vectype = optype;
+ inst.operands[i].present = 1;
+
+ if (rtype == REG_TYPE_VFS)
+ {
+ /* Case 14. */
+ i++;
+ if (skip_past_comma (&ptr) == FAIL)
+ goto wanted_comma;
+ if ((val = arm_typed_reg_parse (&ptr, REG_TYPE_VFS, NULL,
+ &optype)) == FAIL)
+ {
+ first_error (_(reg_expected_msgs[REG_TYPE_VFS]));
+ return FAIL;
+ }
+ inst.operands[i].reg = val;
+ inst.operands[i].isreg = 1;
+ inst.operands[i].isvec = 1;
+ inst.operands[i].issingle = 1;
+ inst.operands[i].vectype = optype;
+ inst.operands[i].present = 1;
+ }
+ }
+ else if ((val = arm_typed_reg_parse (&ptr, REG_TYPE_VFS, NULL, &optype))
+ != FAIL)
+ {
+ /* Case 13. */
+ inst.operands[i].reg = val;
+ inst.operands[i].isreg = 1;
+ inst.operands[i].isvec = 1;
+ inst.operands[i].issingle = 1;
+ inst.operands[i].vectype = optype;
+ inst.operands[i++].present = 1;
+ }
+ }
+ else
+ {
+ first_error (_("parse error"));
+ return FAIL;
+ }
+
+ /* Successfully parsed the operands. Update args. */
+ *which_operand = i;
+ *str = ptr;
+ return SUCCESS;
+
+ wanted_comma:
+ first_error (_("expected comma"));
+ return FAIL;
+
+ wanted_arm:
+ first_error (_(reg_expected_msgs[REG_TYPE_RN]));
+ return FAIL;
+}
+
/* Matcher codes for parse_operands. */
enum operand_parse_code
{
@@ -3765,7 +5319,13 @@ enum operand_parse_code
OP_RCN, /* Coprocessor register */
OP_RF, /* FPA register */
OP_RVS, /* VFP single precision register */
- OP_RVD, /* VFP double precision register */
+ OP_RVD, /* VFP double precision register (0..15) */
+ OP_RND, /* Neon double precision register (0..31) */
+ OP_RNQ, /* Neon quad precision register */
+ OP_RVSD, /* VFP single or double precision register */
+ OP_RNDQ, /* Neon double or quad precision register */
+ OP_RNSDQ, /* Neon single, double or quad precision register */
+ OP_RNSC, /* Neon scalar D[X] */
OP_RVC, /* VFP control register */
OP_RMF, /* Maverick F register */
OP_RMD, /* Maverick D register */
@@ -3781,16 +5341,36 @@ enum operand_parse_code
OP_REGLST, /* ARM register list */
OP_VRSLST, /* VFP single-precision register list */
OP_VRDLST, /* VFP double-precision register list */
-
+ OP_VRSDLST, /* VFP single or double-precision register list (& quad) */
+ OP_NRDLST, /* Neon double-precision register list (d0-d31, qN aliases) */
+ OP_NSTRLST, /* Neon element/structure list */
+
+ OP_NILO, /* Neon immediate/logic operands 2 or 2+3. (VBIC, VORR...) */
+ OP_RNDQ_I0, /* Neon D or Q reg, or immediate zero. */
+ OP_RVSD_I0, /* VFP S or D reg, or immediate zero. */
+ OP_RR_RNSC, /* ARM reg or Neon scalar. */
+ OP_RNSDQ_RNSC, /* Vector S, D or Q reg, or Neon scalar. */
+ OP_RNDQ_RNSC, /* Neon D or Q reg, or Neon scalar. */
+ OP_RND_RNSC, /* Neon D reg, or Neon scalar. */
+ OP_VMOV, /* Neon VMOV operands. */
+ OP_RNDQ_IMVNb,/* Neon D or Q reg, or immediate good for VMVN. */
+ OP_RNDQ_I63b, /* Neon D or Q reg, or immediate for shift. */
+ OP_RIWR_I32z, /* iWMMXt wR register, or immediate 0 .. 32 for iWMMXt2. */
+
+ OP_I0, /* immediate zero */
OP_I7, /* immediate value 0 .. 7 */
OP_I15, /* 0 .. 15 */
OP_I16, /* 1 .. 16 */
+ OP_I16z, /* 0 .. 16 */
OP_I31, /* 0 .. 31 */
OP_I31w, /* 0 .. 31, optional trailing ! */
OP_I32, /* 1 .. 32 */
+ OP_I32z, /* 0 .. 32 */
+ OP_I63, /* 0 .. 63 */
OP_I63s, /* -64 .. 63 */
+ OP_I64, /* 1 .. 64 */
+ OP_I64z, /* 0 .. 64 */
OP_I255, /* 0 .. 255 */
- OP_Iffff, /* 0 .. 65535 */
OP_I4b, /* immediate, prefix optional, 1 .. 4 */
OP_I7b, /* 0 .. 7 */
@@ -3798,10 +5378,15 @@ enum operand_parse_code
OP_I31b, /* 0 .. 31 */
OP_SH, /* shifter operand */
+ OP_SHG, /* shifter operand with possible group relocation */
OP_ADDR, /* Memory address expression (any mode) */
+ OP_ADDRGLDR, /* Mem addr expr (any mode) with possible LDR group reloc */
+ OP_ADDRGLDRS, /* Mem addr expr (any mode) with possible LDRS group reloc */
+ OP_ADDRGLDC, /* Mem addr expr (any mode) with possible LDC group reloc */
OP_EXP, /* arbitrary expression */
OP_EXPi, /* same, with optional immediate prefix */
OP_EXPr, /* same, with optional relocation suffix */
+ OP_HALF, /* 0 .. 65535 or low/high reloc. */
OP_CPSF, /* CPS flags */
OP_ENDI, /* Endianness specifier */
@@ -3809,20 +5394,30 @@ enum operand_parse_code
OP_COND, /* conditional code */
OP_TB, /* Table branch. */
+ OP_RVC_PSR, /* CPSR/SPSR mask for msr, or VFP control register. */
+ OP_APSR_RR, /* ARM register or "APSR_nzcv". */
+
OP_RRnpc_I0, /* ARM register or literal 0 */
OP_RR_EXr, /* ARM register or expression with opt. reloc suff. */
OP_RR_EXi, /* ARM register or expression with imm prefix */
OP_RF_IF, /* FPA register or immediate */
OP_RIWR_RIWC, /* iWMMXt R or C reg */
+ OP_RIWC_RIWG, /* iWMMXt wC or wCG reg */
/* Optional operands. */
OP_oI7b, /* immediate, prefix optional, 0 .. 7 */
OP_oI31b, /* 0 .. 31 */
+ OP_oI32b, /* 1 .. 32 */
OP_oIffffb, /* 0 .. 65535 */
OP_oI255c, /* curly-brace enclosed, 0 .. 255 */
OP_oRR, /* ARM register */
OP_oRRnpc, /* ARM register, not the PC */
+ OP_oRRw, /* ARM register, not r15, optional trailing ! */
+ OP_oRND, /* Optional Neon double precision register */
+ OP_oRNQ, /* Optional Neon quad precision register */
+ OP_oRNDQ, /* Optional Neon double or quad precision register */
+ OP_oRNSDQ, /* Optional single, double or quad precision vector register */
OP_oSHll, /* LSL immediate */
OP_oSHar, /* ASR immediate */
OP_oSHllar, /* LSL or ASR immediate */
@@ -3843,30 +5438,44 @@ parse_operands (char *str, const unsigned char *pattern)
char *backtrack_pos = 0;
const char *backtrack_error = 0;
int i, val, backtrack_index = 0;
+ enum arm_reg_type rtype;
+ parse_operand_result result;
#define po_char_or_fail(chr) do { \
if (skip_past_char (&str, chr) == FAIL) \
goto bad_args; \
} while (0)
-#define po_reg_or_fail(regtype) do { \
- val = arm_reg_parse (&str, regtype); \
- if (val == FAIL) \
- { \
- inst.error = _(reg_expected_msgs[regtype]); \
- goto failure; \
- } \
- inst.operands[i].reg = val; \
- inst.operands[i].isreg = 1; \
+#define po_reg_or_fail(regtype) do { \
+ val = arm_typed_reg_parse (&str, regtype, &rtype, \
+ &inst.operands[i].vectype); \
+ if (val == FAIL) \
+ { \
+ first_error (_(reg_expected_msgs[regtype])); \
+ goto failure; \
+ } \
+ inst.operands[i].reg = val; \
+ inst.operands[i].isreg = 1; \
+ inst.operands[i].isquad = (rtype == REG_TYPE_NQ); \
+ inst.operands[i].issingle = (rtype == REG_TYPE_VFS); \
+ inst.operands[i].isvec = (rtype == REG_TYPE_VFS \
+ || rtype == REG_TYPE_VFD \
+ || rtype == REG_TYPE_NQ); \
} while (0)
-#define po_reg_or_goto(regtype, label) do { \
- val = arm_reg_parse (&str, regtype); \
- if (val == FAIL) \
- goto label; \
- \
- inst.operands[i].reg = val; \
- inst.operands[i].isreg = 1; \
+#define po_reg_or_goto(regtype, label) do { \
+ val = arm_typed_reg_parse (&str, regtype, &rtype, \
+ &inst.operands[i].vectype); \
+ if (val == FAIL) \
+ goto label; \
+ \
+ inst.operands[i].reg = val; \
+ inst.operands[i].isreg = 1; \
+ inst.operands[i].isquad = (rtype == REG_TYPE_NQ); \
+ inst.operands[i].issingle = (rtype == REG_TYPE_VFS); \
+ inst.operands[i].isvec = (rtype == REG_TYPE_VFS \
+ || rtype == REG_TYPE_VFD \
+ || rtype == REG_TYPE_NQ); \
} while (0)
#define po_imm_or_fail(min, max, popt) do { \
@@ -3875,11 +5484,27 @@ parse_operands (char *str, const unsigned char *pattern)
inst.operands[i].imm = val; \
} while (0)
+#define po_scalar_or_goto(elsz, label) do { \
+ val = parse_scalar (&str, elsz, &inst.operands[i].vectype); \
+ if (val == FAIL) \
+ goto label; \
+ inst.operands[i].reg = val; \
+ inst.operands[i].isscalar = 1; \
+} while (0)
+
#define po_misc_or_fail(expr) do { \
if (expr) \
goto failure; \
} while (0)
+#define po_misc_or_fail_no_backtrack(expr) do { \
+ result = expr; \
+ if (result == PARSE_OPERAND_FAIL_NO_BACKTRACK)\
+ backtrack_pos = 0; \
+ if (result != PARSE_OPERAND_SUCCESS) \
+ goto failure; \
+} while (0)
+
skip_whitespace (str);
for (i = 0; upat[i] != OP_stop; i++)
@@ -3893,7 +5518,7 @@ parse_operands (char *str, const unsigned char *pattern)
backtrack_index = i;
}
- if (i > 0)
+ if (i > 0 && (i > 1 || inst.operands[0].present))
po_char_or_fail (',');
switch (upat[i])
@@ -3908,7 +5533,15 @@ parse_operands (char *str, const unsigned char *pattern)
case OP_RF: po_reg_or_fail (REG_TYPE_FN); break;
case OP_RVS: po_reg_or_fail (REG_TYPE_VFS); break;
case OP_RVD: po_reg_or_fail (REG_TYPE_VFD); break;
- case OP_RVC: po_reg_or_fail (REG_TYPE_VFC); break;
+ case OP_oRND:
+ case OP_RND: po_reg_or_fail (REG_TYPE_VFD); break;
+ case OP_RVC:
+ po_reg_or_goto (REG_TYPE_VFC, coproc_reg);
+ break;
+ /* Also accept generic coprocessor regs for unknown registers. */
+ coproc_reg:
+ po_reg_or_fail (REG_TYPE_CN);
+ break;
case OP_RMF: po_reg_or_fail (REG_TYPE_MVF); break;
case OP_RMD: po_reg_or_fail (REG_TYPE_MVD); break;
case OP_RMFX: po_reg_or_fail (REG_TYPE_MVFX); break;
@@ -3919,6 +5552,126 @@ parse_operands (char *str, const unsigned char *pattern)
case OP_RIWC: po_reg_or_fail (REG_TYPE_MMXWC); break;
case OP_RIWG: po_reg_or_fail (REG_TYPE_MMXWCG); break;
case OP_RXA: po_reg_or_fail (REG_TYPE_XSCALE); break;
+ case OP_oRNQ:
+ case OP_RNQ: po_reg_or_fail (REG_TYPE_NQ); break;
+ case OP_oRNDQ:
+ case OP_RNDQ: po_reg_or_fail (REG_TYPE_NDQ); break;
+ case OP_RVSD: po_reg_or_fail (REG_TYPE_VFSD); break;
+ case OP_oRNSDQ:
+ case OP_RNSDQ: po_reg_or_fail (REG_TYPE_NSDQ); break;
+
+ /* Neon scalar. Using an element size of 8 means that some invalid
+ scalars are accepted here, so deal with those in later code. */
+ case OP_RNSC: po_scalar_or_goto (8, failure); break;
+
+ /* WARNING: We can expand to two operands here. This has the potential
+ to totally confuse the backtracking mechanism! It will be OK at
+ least as long as we don't try to use optional args as well,
+ though. */
+ case OP_NILO:
+ {
+ po_reg_or_goto (REG_TYPE_NDQ, try_imm);
+ inst.operands[i].present = 1;
+ i++;
+ skip_past_comma (&str);
+ po_reg_or_goto (REG_TYPE_NDQ, one_reg_only);
+ break;
+ one_reg_only:
+ /* Optional register operand was omitted. Unfortunately, it's in
+ operands[i-1] and we need it to be in inst.operands[i]. Fix that
+ here (this is a bit grotty). */
+ inst.operands[i] = inst.operands[i-1];
+ inst.operands[i-1].present = 0;
+ break;
+ try_imm:
+ /* There's a possibility of getting a 64-bit immediate here, so
+ we need special handling. */
+ if (parse_big_immediate (&str, i) == FAIL)
+ {
+ inst.error = _("immediate value is out of range");
+ goto failure;
+ }
+ }
+ break;
+
+ case OP_RNDQ_I0:
+ {
+ po_reg_or_goto (REG_TYPE_NDQ, try_imm0);
+ break;
+ try_imm0:
+ po_imm_or_fail (0, 0, TRUE);
+ }
+ break;
+
+ case OP_RVSD_I0:
+ po_reg_or_goto (REG_TYPE_VFSD, try_imm0);
+ break;
+
+ case OP_RR_RNSC:
+ {
+ po_scalar_or_goto (8, try_rr);
+ break;
+ try_rr:
+ po_reg_or_fail (REG_TYPE_RN);
+ }
+ break;
+
+ case OP_RNSDQ_RNSC:
+ {
+ po_scalar_or_goto (8, try_nsdq);
+ break;
+ try_nsdq:
+ po_reg_or_fail (REG_TYPE_NSDQ);
+ }
+ break;
+
+ case OP_RNDQ_RNSC:
+ {
+ po_scalar_or_goto (8, try_ndq);
+ break;
+ try_ndq:
+ po_reg_or_fail (REG_TYPE_NDQ);
+ }
+ break;
+
+ case OP_RND_RNSC:
+ {
+ po_scalar_or_goto (8, try_vfd);
+ break;
+ try_vfd:
+ po_reg_or_fail (REG_TYPE_VFD);
+ }
+ break;
+
+ case OP_VMOV:
+ /* WARNING: parse_neon_mov can move the operand counter, i. If we're
+ not careful then bad things might happen. */
+ po_misc_or_fail (parse_neon_mov (&str, &i) == FAIL);
+ break;
+
+ case OP_RNDQ_IMVNb:
+ {
+ po_reg_or_goto (REG_TYPE_NDQ, try_mvnimm);
+ break;
+ try_mvnimm:
+ /* There's a possibility of getting a 64-bit immediate here, so
+ we need special handling. */
+ if (parse_big_immediate (&str, i) == FAIL)
+ {
+ inst.error = _("immediate value is out of range");
+ goto failure;
+ }
+ }
+ break;
+
+ case OP_RNDQ_I63b:
+ {
+ po_reg_or_goto (REG_TYPE_NDQ, try_shimm);
+ break;
+ try_shimm:
+ po_imm_or_fail (0, 63, TRUE);
+ }
+ break;
case OP_RRnpcb:
po_char_or_fail ('[');
@@ -3927,6 +5680,7 @@ parse_operands (char *str, const unsigned char *pattern)
break;
case OP_RRw:
+ case OP_oRRw:
po_reg_or_fail (REG_TYPE_RN);
if (skip_past_char (&str, '!') == SUCCESS)
inst.operands[i].writeback = 1;
@@ -3936,11 +5690,15 @@ parse_operands (char *str, const unsigned char *pattern)
case OP_I7: po_imm_or_fail ( 0, 7, FALSE); break;
case OP_I15: po_imm_or_fail ( 0, 15, FALSE); break;
case OP_I16: po_imm_or_fail ( 1, 16, FALSE); break;
+ case OP_I16z: po_imm_or_fail ( 0, 16, FALSE); break;
case OP_I31: po_imm_or_fail ( 0, 31, FALSE); break;
case OP_I32: po_imm_or_fail ( 1, 32, FALSE); break;
+ case OP_I32z: po_imm_or_fail ( 0, 32, FALSE); break;
case OP_I63s: po_imm_or_fail (-64, 63, FALSE); break;
+ case OP_I63: po_imm_or_fail ( 0, 63, FALSE); break;
+ case OP_I64: po_imm_or_fail ( 1, 64, FALSE); break;
+ case OP_I64z: po_imm_or_fail ( 0, 64, FALSE); break;
case OP_I255: po_imm_or_fail ( 0, 255, FALSE); break;
- case OP_Iffff: po_imm_or_fail ( 0, 0xffff, FALSE); break;
case OP_I4b: po_imm_or_fail ( 1, 4, TRUE); break;
case OP_oI7b:
@@ -3948,6 +5706,7 @@ parse_operands (char *str, const unsigned char *pattern)
case OP_I15b: po_imm_or_fail ( 0, 15, TRUE); break;
case OP_oI31b:
case OP_I31b: po_imm_or_fail ( 0, 31, TRUE); break;
+ case OP_oI32b: po_imm_or_fail ( 1, 32, TRUE); break;
case OP_oIffffb: po_imm_or_fail ( 0, 0xffff, TRUE); break;
/* Immediate variants */
@@ -4005,6 +5764,11 @@ parse_operands (char *str, const unsigned char *pattern)
}
break;
+ /* Operand for MOVW or MOVT. */
+ case OP_HALF:
+ po_misc_or_fail (parse_half (&str));
+ break;
+
/* Register or expression */
case OP_RR_EXr: po_reg_or_goto (REG_TYPE_RN, EXPr); break;
case OP_RR_EXi: po_reg_or_goto (REG_TYPE_RN, EXPi); break;
@@ -4027,13 +5791,17 @@ parse_operands (char *str, const unsigned char *pattern)
inst.operands[i].isreg = 1;
break;
+ case OP_RIWR_I32z: po_reg_or_goto (REG_TYPE_MMXWR, I32z); break;
+ I32z: po_imm_or_fail (0, 32, FALSE); break;
+
/* Two kinds of register */
case OP_RIWR_RIWC:
{
struct reg_entry *rege = arm_reg_parse_multi (&str);
- if (rege->type != REG_TYPE_MMXWR
- && rege->type != REG_TYPE_MMXWC
- && rege->type != REG_TYPE_MMXWCG)
+ if (!rege
+ || (rege->type != REG_TYPE_MMXWR
+ && rege->type != REG_TYPE_MMXWC
+ && rege->type != REG_TYPE_MMXWCG))
{
inst.error = _("iWMMXt data or control register expected");
goto failure;
@@ -4043,6 +5811,21 @@ parse_operands (char *str, const unsigned char *pattern)
}
break;
+ case OP_RIWC_RIWG:
+ {
+ struct reg_entry *rege = arm_reg_parse_multi (&str);
+ if (!rege
+ || (rege->type != REG_TYPE_MMXWC
+ && rege->type != REG_TYPE_MMXWCG))
+ {
+ inst.error = _("iWMMXt control register expected");
+ goto failure;
+ }
+ inst.operands[i].reg = rege->number;
+ inst.operands[i].isreg = 1;
+ }
+ break;
+
/* Misc */
case OP_CPSF: val = parse_cps_flags (&str); break;
case OP_ENDI: val = parse_endian_specifier (&str); break;
@@ -4051,6 +5834,41 @@ parse_operands (char *str, const unsigned char *pattern)
case OP_COND: val = parse_cond (&str); break;
case OP_oBARRIER:val = parse_barrier (&str); break;
+ case OP_RVC_PSR:
+ po_reg_or_goto (REG_TYPE_VFC, try_psr);
+ inst.operands[i].isvec = 1; /* Mark VFP control reg as vector. */
+ break;
+ try_psr:
+ val = parse_psr (&str);
+ break;
+
+ case OP_APSR_RR:
+ po_reg_or_goto (REG_TYPE_RN, try_apsr);
+ break;
+ try_apsr:
+ /* Parse "APSR_nvzc" operand (for FMSTAT-equivalent MRS
+ instruction). */
+ if (strncasecmp (str, "APSR_", 5) == 0)
+ {
+ unsigned found = 0;
+ str += 5;
+ while (found < 15)
+ switch (*str++)
+ {
+ case 'c': found = (found & 1) ? 16 : found | 1; break;
+ case 'n': found = (found & 2) ? 16 : found | 2; break;
+ case 'z': found = (found & 4) ? 16 : found | 4; break;
+ case 'v': found = (found & 8) ? 16 : found | 8; break;
+ default: found = 16;
+ }
+ if (found != 15)
+ goto failure;
+ inst.operands[i].isvec = 1;
+ }
+ else
+ goto failure;
+ break;
+
case OP_TB:
po_misc_or_fail (parse_tb (&str));
break;
@@ -4066,22 +5884,65 @@ parse_operands (char *str, const unsigned char *pattern)
break;
case OP_VRSLST:
- val = parse_vfp_reg_list (&str, &inst.operands[i].reg, 0);
+ val = parse_vfp_reg_list (&str, &inst.operands[i].reg, REGLIST_VFP_S);
break;
case OP_VRDLST:
- val = parse_vfp_reg_list (&str, &inst.operands[i].reg, 1);
+ val = parse_vfp_reg_list (&str, &inst.operands[i].reg, REGLIST_VFP_D);
break;
+ case OP_VRSDLST:
+ /* Allow Q registers too. */
+ val = parse_vfp_reg_list (&str, &inst.operands[i].reg,
+ REGLIST_NEON_D);
+ if (val == FAIL)
+ {
+ inst.error = NULL;
+ val = parse_vfp_reg_list (&str, &inst.operands[i].reg,
+ REGLIST_VFP_S);
+ inst.operands[i].issingle = 1;
+ }
+ break;
+
+ case OP_NRDLST:
+ val = parse_vfp_reg_list (&str, &inst.operands[i].reg,
+ REGLIST_NEON_D);
+ break;
+
+ case OP_NSTRLST:
+ val = parse_neon_el_struct_list (&str, &inst.operands[i].reg,
+ &inst.operands[i].vectype);
+ break;
+
/* Addressing modes */
case OP_ADDR:
po_misc_or_fail (parse_address (&str, i));
break;
+ case OP_ADDRGLDR:
+ po_misc_or_fail_no_backtrack (
+ parse_address_group_reloc (&str, i, GROUP_LDR));
+ break;
+
+ case OP_ADDRGLDRS:
+ po_misc_or_fail_no_backtrack (
+ parse_address_group_reloc (&str, i, GROUP_LDRS));
+ break;
+
+ case OP_ADDRGLDC:
+ po_misc_or_fail_no_backtrack (
+ parse_address_group_reloc (&str, i, GROUP_LDC));
+ break;
+
case OP_SH:
po_misc_or_fail (parse_shifter_operand (&str, i));
break;
+ case OP_SHG:
+ po_misc_or_fail_no_backtrack (
+ parse_shifter_operand_group_reloc (&str, i));
+ break;
+
case OP_oSHll:
po_misc_or_fail (parse_shift (&str, i, SHIFT_LSL_IMMEDIATE));
break;
@@ -4107,6 +5968,7 @@ parse_operands (char *str, const unsigned char *pattern)
case OP_RRnpc:
case OP_RRnpcb:
case OP_RRw:
+ case OP_oRRw:
case OP_RRnpc_I0:
if (inst.operands[i].isreg && inst.operands[i].reg == REG_PC)
inst.error = BAD_PC;
@@ -4116,11 +5978,15 @@ parse_operands (char *str, const unsigned char *pattern)
case OP_ENDI:
case OP_oROR:
case OP_PSR:
+ case OP_RVC_PSR:
case OP_COND:
case OP_oBARRIER:
case OP_REGLST:
case OP_VRSLST:
case OP_VRDLST:
+ case OP_VRSDLST:
+ case OP_NRDLST:
+ case OP_NSTRLST:
if (val == FAIL)
goto failure;
inst.operands[i].imm = val;
@@ -4178,6 +6044,7 @@ parse_operands (char *str, const unsigned char *pattern)
#undef po_reg_or_fail
#undef po_reg_or_goto
#undef po_imm_or_fail
+#undef po_scalar_or_fail
/* Shorthand macro for instruction encoding functions issuing errors. */
#define constraint(expr, err) do { \
@@ -4236,11 +6103,30 @@ encode_thumb32_immediate (unsigned int val)
return FAIL;
}
-/* Encode a VFP SP register number into inst.instruction. */
+/* Encode a VFP SP or DP register number into inst.instruction. */
static void
-encode_arm_vfp_sp_reg (int reg, enum vfp_sp_reg_pos pos)
-{
+encode_arm_vfp_reg (int reg, enum vfp_reg_pos pos)
+{
+ if ((pos == VFP_REG_Dd || pos == VFP_REG_Dn || pos == VFP_REG_Dm)
+ && reg > 15)
+ {
+ if (ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_v3))
+ {
+ if (thumb_mode)
+ ARM_MERGE_FEATURE_SETS (thumb_arch_used, thumb_arch_used,
+ fpu_vfp_ext_v3);
+ else
+ ARM_MERGE_FEATURE_SETS (arm_arch_used, arm_arch_used,
+ fpu_vfp_ext_v3);
+ }
+ else
+ {
+ first_error (_("D register out of range for selected VFP version"));
+ return;
+ }
+ }
+
switch (pos)
{
case VFP_REG_Sd:
@@ -4255,6 +6141,18 @@ encode_arm_vfp_sp_reg (int reg, enum vfp_sp_reg_pos pos)
inst.instruction |= ((reg >> 1) << 0) | ((reg & 1) << 5);
break;
+ case VFP_REG_Dd:
+ inst.instruction |= ((reg & 15) << 12) | ((reg >> 4) << 22);
+ break;
+
+ case VFP_REG_Dn:
+ inst.instruction |= ((reg & 15) << 16) | ((reg >> 4) << 7);
+ break;
+
+ case VFP_REG_Dm:
+ inst.instruction |= (reg & 15) | ((reg >> 4) << 5);
+ break;
+
default:
abort ();
}
@@ -4399,7 +6297,8 @@ encode_arm_addr_mode_3 (int i, bfd_boolean is_t)
into a coprocessor load/store instruction. If wb_ok is false,
reject use of writeback; if unind_ok is false, reject use of
unindexed addressing. If reloc_override is not 0, use it instead
- of BFD_ARM_CP_OFF_IMM. */
+ of BFD_ARM_CP_OFF_IMM, unless the initial relocation is a group one
+ (in which case it is preserved). */
static int
encode_arm_cp_address (int i, int wb_ok, int unind_ok, int reloc_override)
@@ -4441,10 +6340,16 @@ encode_arm_cp_address (int i, int wb_ok, int unind_ok, int reloc_override)
if (reloc_override)
inst.reloc.type = reloc_override;
- else if (thumb_mode)
- inst.reloc.type = BFD_RELOC_ARM_T32_CP_OFF_IMM;
- else
- inst.reloc.type = BFD_RELOC_ARM_CP_OFF_IMM;
+ else if ((inst.reloc.type < BFD_RELOC_ARM_ALU_PC_G0_NC
+ || inst.reloc.type > BFD_RELOC_ARM_LDC_SB_G2)
+ && inst.reloc.type != BFD_RELOC_ARM_LDR_PC_G0)
+ {
+ if (thumb_mode)
+ inst.reloc.type = BFD_RELOC_ARM_T32_CP_OFF_IMM;
+ else
+ inst.reloc.type = BFD_RELOC_ARM_CP_OFF_IMM;
+ }
+
return SUCCESS;
}
@@ -4570,7 +6475,7 @@ static void
do_rd_rm_rn (void)
{
unsigned Rn = inst.operands[2].reg;
- /* Enforce resutrictions on SWP instruction. */
+ /* Enforce restrictions on SWP instruction. */
if ((inst.instruction & 0x0fbfffff) == 0x01000090)
constraint (Rn == inst.operands[0].reg || Rn == inst.operands[1].reg,
_("Rn must not overlap other operands"));
@@ -4894,7 +6799,11 @@ static void
do_cpsi (void)
{
inst.instruction |= inst.operands[0].imm << 6;
- inst.instruction |= inst.operands[1].imm;
+ if (inst.operands[1].present)
+ {
+ inst.instruction |= CPSI_MMOD;
+ inst.instruction |= inst.operands[1].imm;
+ }
}
static void
@@ -5112,17 +7021,16 @@ do_lstc (void)
static void
do_mlas (void)
{
- /* This restriction does not apply to mls (nor to mla in v6, but
- that's hard to detect at present). */
+ /* This restriction does not apply to mls (nor to mla in v6 or later). */
if (inst.operands[0].reg == inst.operands[1].reg
+ && !ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6)
&& !(inst.instruction & 0x00400000))
- as_tsktsk (_("rd and rm should be different in mla"));
+ as_tsktsk (_("Rd and Rm should be different in mla"));
inst.instruction |= inst.operands[0].reg << 16;
inst.instruction |= inst.operands[1].reg;
inst.instruction |= inst.operands[2].reg << 8;
inst.instruction |= inst.operands[3].reg << 12;
-
}
static void
@@ -5136,15 +7044,62 @@ do_mov (void)
static void
do_mov16 (void)
{
+ bfd_vma imm;
+ bfd_boolean top;
+
+ top = (inst.instruction & 0x00400000) != 0;
+ constraint (top && inst.reloc.type == BFD_RELOC_ARM_MOVW,
+ _(":lower16: not allowed this instruction"));
+ constraint (!top && inst.reloc.type == BFD_RELOC_ARM_MOVT,
+ _(":upper16: not allowed instruction"));
inst.instruction |= inst.operands[0].reg << 12;
- /* The value is in two pieces: 0:11, 16:19. */
- inst.instruction |= (inst.operands[1].imm & 0x00000fff);
- inst.instruction |= (inst.operands[1].imm & 0x0000f000) << 4;
+ if (inst.reloc.type == BFD_RELOC_UNUSED)
+ {
+ imm = inst.reloc.exp.X_add_number;
+ /* The value is in two pieces: 0:11, 16:19. */
+ inst.instruction |= (imm & 0x00000fff);
+ inst.instruction |= (imm & 0x0000f000) << 4;
+ }
+}
+
+static void do_vfp_nsyn_opcode (const char *);
+
+static int
+do_vfp_nsyn_mrs (void)
+{
+ if (inst.operands[0].isvec)
+ {
+ if (inst.operands[1].reg != 1)
+ first_error (_("operand 1 must be FPSCR"));
+ memset (&inst.operands[0], '\0', sizeof (inst.operands[0]));
+ memset (&inst.operands[1], '\0', sizeof (inst.operands[1]));
+ do_vfp_nsyn_opcode ("fmstat");
+ }
+ else if (inst.operands[1].isvec)
+ do_vfp_nsyn_opcode ("fmrx");
+ else
+ return FAIL;
+
+ return SUCCESS;
+}
+
+static int
+do_vfp_nsyn_msr (void)
+{
+ if (inst.operands[0].isvec)
+ do_vfp_nsyn_opcode ("fmxr");
+ else
+ return FAIL;
+
+ return SUCCESS;
}
static void
do_mrs (void)
{
+ if (do_vfp_nsyn_mrs () == SUCCESS)
+ return;
+
/* mrs only accepts CPSR/SPSR/CPSR_all/SPSR_all. */
constraint ((inst.operands[1].imm & (PSR_c|PSR_x|PSR_s|PSR_f))
!= (PSR_c|PSR_f),
@@ -5160,6 +7115,9 @@ do_mrs (void)
static void
do_msr (void)
{
+ if (do_vfp_nsyn_msr () == SUCCESS)
+ return;
+
inst.instruction |= inst.operands[0].imm;
if (inst.operands[1].isreg)
inst.instruction |= inst.operands[1].reg;
@@ -5180,8 +7138,9 @@ do_mul (void)
inst.instruction |= inst.operands[1].reg;
inst.instruction |= inst.operands[2].reg << 8;
- if (inst.operands[0].reg == inst.operands[1].reg)
- as_tsktsk (_("rd and rm should be different in mul"));
+ if (inst.operands[0].reg == inst.operands[1].reg
+ && !ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6))
+ as_tsktsk (_("Rd and Rm should be different in mul"));
}
/* Long Multiply Parser
@@ -5447,13 +7406,25 @@ do_smul (void)
inst.instruction |= inst.operands[2].reg << 8;
}
-/* ARM V6 srs (argument parse). */
+/* ARM V6 srs (argument parse). The variable fields in the encoding are
+ the same for both ARM and Thumb-2. */
static void
do_srs (void)
{
- inst.instruction |= inst.operands[0].imm;
- if (inst.operands[0].writeback)
+ int reg;
+
+ if (inst.operands[0].present)
+ {
+ reg = inst.operands[0].reg;
+ constraint (reg != 13, _("SRS base register must be r13"));
+ }
+ else
+ reg = 13;
+
+ inst.instruction |= reg << 16;
+ inst.instruction |= inst.operands[1].imm;
+ if (inst.operands[0].writeback || inst.operands[1].writeback)
inst.instruction |= WRITE_BACK;
}
@@ -5542,43 +7513,43 @@ do_sxth (void)
static void
do_vfp_sp_monadic (void)
{
- encode_arm_vfp_sp_reg (inst.operands[0].reg, VFP_REG_Sd);
- encode_arm_vfp_sp_reg (inst.operands[1].reg, VFP_REG_Sm);
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Sd);
+ encode_arm_vfp_reg (inst.operands[1].reg, VFP_REG_Sm);
}
static void
do_vfp_sp_dyadic (void)
{
- encode_arm_vfp_sp_reg (inst.operands[0].reg, VFP_REG_Sd);
- encode_arm_vfp_sp_reg (inst.operands[1].reg, VFP_REG_Sn);
- encode_arm_vfp_sp_reg (inst.operands[2].reg, VFP_REG_Sm);
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Sd);
+ encode_arm_vfp_reg (inst.operands[1].reg, VFP_REG_Sn);
+ encode_arm_vfp_reg (inst.operands[2].reg, VFP_REG_Sm);
}
static void
do_vfp_sp_compare_z (void)
{
- encode_arm_vfp_sp_reg (inst.operands[0].reg, VFP_REG_Sd);
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Sd);
}
static void
do_vfp_dp_sp_cvt (void)
{
- inst.instruction |= inst.operands[0].reg << 12;
- encode_arm_vfp_sp_reg (inst.operands[1].reg, VFP_REG_Sm);
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Dd);
+ encode_arm_vfp_reg (inst.operands[1].reg, VFP_REG_Sm);
}
static void
do_vfp_sp_dp_cvt (void)
{
- encode_arm_vfp_sp_reg (inst.operands[0].reg, VFP_REG_Sd);
- inst.instruction |= inst.operands[1].reg;
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Sd);
+ encode_arm_vfp_reg (inst.operands[1].reg, VFP_REG_Dm);
}
static void
do_vfp_reg_from_sp (void)
{
inst.instruction |= inst.operands[0].reg << 12;
- encode_arm_vfp_sp_reg (inst.operands[1].reg, VFP_REG_Sn);
+ encode_arm_vfp_reg (inst.operands[1].reg, VFP_REG_Sn);
}
static void
@@ -5588,13 +7559,13 @@ do_vfp_reg2_from_sp2 (void)
_("only two consecutive VFP SP registers allowed here"));
inst.instruction |= inst.operands[0].reg << 12;
inst.instruction |= inst.operands[1].reg << 16;
- encode_arm_vfp_sp_reg (inst.operands[2].reg, VFP_REG_Sm);
+ encode_arm_vfp_reg (inst.operands[2].reg, VFP_REG_Sm);
}
static void
do_vfp_sp_from_reg (void)
{
- encode_arm_vfp_sp_reg (inst.operands[0].reg, VFP_REG_Sn);
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Sn);
inst.instruction |= inst.operands[1].reg << 12;
}
@@ -5603,7 +7574,7 @@ do_vfp_sp2_from_reg2 (void)
{
constraint (inst.operands[0].imm != 2,
_("only two consecutive VFP SP registers allowed here"));
- encode_arm_vfp_sp_reg (inst.operands[0].reg, VFP_REG_Sm);
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Sm);
inst.instruction |= inst.operands[1].reg << 12;
inst.instruction |= inst.operands[2].reg << 16;
}
@@ -5611,14 +7582,14 @@ do_vfp_sp2_from_reg2 (void)
static void
do_vfp_sp_ldst (void)
{
- encode_arm_vfp_sp_reg (inst.operands[0].reg, VFP_REG_Sd);
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Sd);
encode_arm_cp_address (1, FALSE, TRUE, 0);
}
static void
do_vfp_dp_ldst (void)
{
- inst.instruction |= inst.operands[0].reg << 12;
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Dd);
encode_arm_cp_address (1, FALSE, TRUE, 0);
}
@@ -5632,7 +7603,7 @@ vfp_sp_ldstm (enum vfp_ldstm_type ldstm_type)
constraint (ldstm_type != VFP_LDSTMIA,
_("this addressing mode requires base-register writeback"));
inst.instruction |= inst.operands[0].reg << 16;
- encode_arm_vfp_sp_reg (inst.operands[1].reg, VFP_REG_Sd);
+ encode_arm_vfp_reg (inst.operands[1].reg, VFP_REG_Sd);
inst.instruction |= inst.operands[1].imm;
}
@@ -5648,7 +7619,7 @@ vfp_dp_ldstm (enum vfp_ldstm_type ldstm_type)
_("this addressing mode requires base-register writeback"));
inst.instruction |= inst.operands[0].reg << 16;
- inst.instruction |= inst.operands[1].reg << 12;
+ encode_arm_vfp_reg (inst.operands[1].reg, VFP_REG_Dd);
count = inst.operands[1].imm << 1;
if (ldstm_type == VFP_LDSTMIAX || ldstm_type == VFP_LDSTMDBX)
@@ -5692,6 +7663,103 @@ do_vfp_xp_ldstmdb (void)
{
vfp_dp_ldstm (VFP_LDSTMDBX);
}
+
+static void
+do_vfp_dp_rd_rm (void)
+{
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Dd);
+ encode_arm_vfp_reg (inst.operands[1].reg, VFP_REG_Dm);
+}
+
+static void
+do_vfp_dp_rn_rd (void)
+{
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Dn);
+ encode_arm_vfp_reg (inst.operands[1].reg, VFP_REG_Dd);
+}
+
+static void
+do_vfp_dp_rd_rn (void)
+{
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Dd);
+ encode_arm_vfp_reg (inst.operands[1].reg, VFP_REG_Dn);
+}
+
+static void
+do_vfp_dp_rd_rn_rm (void)
+{
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Dd);
+ encode_arm_vfp_reg (inst.operands[1].reg, VFP_REG_Dn);
+ encode_arm_vfp_reg (inst.operands[2].reg, VFP_REG_Dm);
+}
+
+static void
+do_vfp_dp_rd (void)
+{
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Dd);
+}
+
+static void
+do_vfp_dp_rm_rd_rn (void)
+{
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Dm);
+ encode_arm_vfp_reg (inst.operands[1].reg, VFP_REG_Dd);
+ encode_arm_vfp_reg (inst.operands[2].reg, VFP_REG_Dn);
+}
+
+/* VFPv3 instructions. */
+static void
+do_vfp_sp_const (void)
+{
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Sd);
+ inst.instruction |= (inst.operands[1].imm & 0xf0) << 12;
+ inst.instruction |= (inst.operands[1].imm & 0x0f);
+}
+
+static void
+do_vfp_dp_const (void)
+{
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Dd);
+ inst.instruction |= (inst.operands[1].imm & 0xf0) << 12;
+ inst.instruction |= (inst.operands[1].imm & 0x0f);
+}
+
+static void
+vfp_conv (int srcsize)
+{
+ unsigned immbits = srcsize - inst.operands[1].imm;
+ inst.instruction |= (immbits & 1) << 5;
+ inst.instruction |= (immbits >> 1);
+}
+
+static void
+do_vfp_sp_conv_16 (void)
+{
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Sd);
+ vfp_conv (16);
+}
+
+static void
+do_vfp_dp_conv_16 (void)
+{
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Dd);
+ vfp_conv (16);
+}
+
+static void
+do_vfp_sp_conv_32 (void)
+{
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Sd);
+ vfp_conv (32);
+}
+
+static void
+do_vfp_dp_conv_32 (void)
+{
+ encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Dd);
+ vfp_conv (32);
+}
+
/* FPA instructions. Also in a logical order. */
@@ -5740,6 +7808,7 @@ do_fpa_ldmstm (void)
encode_arm_cp_address (2, TRUE, TRUE, 0);
}
+
/* iWMMXt instructions: strictly in alphabetical order. */
@@ -5790,6 +7859,15 @@ do_iwmmxt_waligni (void)
}
static void
+do_iwmmxt_wmerge (void)
+{
+ inst.instruction |= inst.operands[0].reg << 12;
+ inst.instruction |= inst.operands[1].reg << 16;
+ inst.instruction |= inst.operands[2].reg;
+ inst.instruction |= inst.operands[3].imm << 21;
+}
+
+static void
do_iwmmxt_wmov (void)
{
/* WMOV rD, rN is an alias for WOR rD, rN, rN. */
@@ -5828,7 +7906,23 @@ static void
do_iwmmxt_wldstd (void)
{
inst.instruction |= inst.operands[0].reg << 12;
- encode_arm_cp_address (1, TRUE, FALSE, 0);
+ if (ARM_CPU_HAS_FEATURE (cpu_variant, arm_cext_iwmmxt2)
+ && inst.operands[1].immisreg)
+ {
+ inst.instruction &= ~0x1a000ff;
+ inst.instruction |= (0xf << 28);
+ if (inst.operands[1].preind)
+ inst.instruction |= PRE_INDEX;
+ if (!inst.operands[1].negative)
+ inst.instruction |= INDEX_UP;
+ if (inst.operands[1].writeback)
+ inst.instruction |= WRITE_BACK;
+ inst.instruction |= inst.operands[1].reg << 16;
+ inst.instruction |= inst.reloc.exp.X_add_number << 4;
+ inst.instruction |= inst.operands[1].imm;
+ }
+ else
+ encode_arm_cp_address (1, TRUE, FALSE, 0);
}
static void
@@ -5848,6 +7942,56 @@ do_iwmmxt_wzero (void)
inst.instruction |= inst.operands[0].reg << 12;
inst.instruction |= inst.operands[0].reg << 16;
}
+
+static void
+do_iwmmxt_wrwrwr_or_imm5 (void)
+{
+ if (inst.operands[2].isreg)
+ do_rd_rn_rm ();
+ else {
+ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_cext_iwmmxt2),
+ _("immediate operand requires iWMMXt2"));
+ do_rd_rn ();
+ if (inst.operands[2].imm == 0)
+ {
+ switch ((inst.instruction >> 20) & 0xf)
+ {
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ /* w...h wrd, wrn, #0 -> wrorh wrd, wrn, #16. */
+ inst.operands[2].imm = 16;
+ inst.instruction = (inst.instruction & 0xff0fffff) | (0x7 << 20);
+ break;
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ /* w...w wrd, wrn, #0 -> wrorw wrd, wrn, #32. */
+ inst.operands[2].imm = 32;
+ inst.instruction = (inst.instruction & 0xff0fffff) | (0xb << 20);
+ break;
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ {
+ /* w...d wrd, wrn, #0 -> wor wrd, wrn, wrn. */
+ unsigned long wrn;
+ wrn = (inst.instruction >> 16) & 0xf;
+ inst.instruction &= 0xff0fff0f;
+ inst.instruction |= wrn;
+ /* Bail out here; the instruction is now assembled. */
+ return;
+ }
+ }
+ }
+ /* Map 32 -> 0, etc. */
+ inst.operands[2].imm &= 0x1f;
+ inst.instruction |= (0xf << 28) | ((inst.operands[2].imm & 0x10) << 4) | (inst.operands[2].imm & 0xf);
+ }
+}
/* Cirrus Maverick instructions. Simple 2-, 3-, and 4-register
operations first, then control, shift, and load/store. */
@@ -6082,7 +8226,7 @@ encode_thumb32_addr_mode (int i, bfd_boolean is_t, bfd_boolean is_d)
X(cpsie, b660, f3af8400), \
X(cpsid, b670, f3af8600), \
X(cpy, 4600, ea4f0000), \
- X(dec_sp,80dd, f1bd0d00), \
+ X(dec_sp,80dd, f1ad0d00), \
X(eor, 4040, ea800000), \
X(eors, 4040, ea900000), \
X(inc_sp,00dd, f10d0d00), \
@@ -6200,13 +8344,13 @@ do_t_add_sub (void)
narrow = (current_it_mask != 0);
if (!inst.operands[2].isreg)
{
+ int add;
+
+ add = (inst.instruction == T_MNEM_add
+ || inst.instruction == T_MNEM_adds);
opcode = 0;
if (inst.size_req != 4)
{
- int add;
-
- add = (inst.instruction == T_MNEM_add
- || inst.instruction == T_MNEM_adds);
/* Attempt to use a narrow opcode, with relaxation if
appropriate. */
if (Rd == REG_SP && Rs == REG_SP && !flags)
@@ -6236,12 +8380,38 @@ do_t_add_sub (void)
if (inst.size_req == 4
|| (inst.size_req != 2 && !opcode))
{
- /* ??? Convert large immediates to addw/subw. */
- inst.instruction = THUMB_OP32 (inst.instruction);
- inst.instruction = (inst.instruction & 0xe1ffffff) | 0x10000000;
- inst.instruction |= inst.operands[0].reg << 8;
- inst.instruction |= inst.operands[1].reg << 16;
- inst.reloc.type = BFD_RELOC_ARM_T32_IMMEDIATE;
+ if (Rd == REG_PC)
+ {
+ constraint (Rs != REG_LR || inst.instruction != T_MNEM_subs,
+ _("only SUBS PC, LR, #const allowed"));
+ constraint (inst.reloc.exp.X_op != O_constant,
+ _("expression too complex"));
+ constraint (inst.reloc.exp.X_add_number < 0
+ || inst.reloc.exp.X_add_number > 0xff,
+ _("immediate value out of range"));
+ inst.instruction = T2_SUBS_PC_LR
+ | inst.reloc.exp.X_add_number;
+ inst.reloc.type = BFD_RELOC_UNUSED;
+ return;
+ }
+ else if (Rs == REG_PC)
+ {
+ /* Always use addw/subw. */
+ inst.instruction = add ? 0xf20f0000 : 0xf2af0000;
+ inst.reloc.type = BFD_RELOC_ARM_T32_IMM12;
+ }
+ else
+ {
+ inst.instruction = THUMB_OP32 (inst.instruction);
+ inst.instruction = (inst.instruction & 0xe1ffffff)
+ | 0x10000000;
+ if (flags)
+ inst.reloc.type = BFD_RELOC_ARM_T32_IMMEDIATE;
+ else
+ inst.reloc.type = BFD_RELOC_ARM_T32_ADD_IMM;
+ }
+ inst.instruction |= Rd << 8;
+ inst.instruction |= Rs << 16;
}
}
else
@@ -6807,7 +8977,7 @@ do_t_cpy (void)
}
static void
-do_t_czb (void)
+do_t_cbz (void)
{
constraint (current_it_mask, BAD_NOT_IT);
constraint (inst.operands[0].reg > 7, BAD_HIREG);
@@ -6871,6 +9041,68 @@ do_t_it (void)
inst.instruction |= cond << 4;
}
+/* Helper function used for both push/pop and ldm/stm. */
+static void
+encode_thumb2_ldmstm (int base, unsigned mask, bfd_boolean writeback)
+{
+ bfd_boolean load;
+
+ load = (inst.instruction & (1 << 20)) != 0;
+
+ if (mask & (1 << 13))
+ inst.error = _("SP not allowed in register list");
+ if (load)
+ {
+ if (mask & (1 << 14)
+ && mask & (1 << 15))
+ inst.error = _("LR and PC should not both be in register list");
+
+ if ((mask & (1 << base)) != 0
+ && writeback)
+ as_warn (_("base register should not be in register list "
+ "when written back"));
+ }
+ else
+ {
+ if (mask & (1 << 15))
+ inst.error = _("PC not allowed in register list");
+
+ if (mask & (1 << base))
+ as_warn (_("value stored for r%d is UNPREDICTABLE"), base);
+ }
+
+ if ((mask & (mask - 1)) == 0)
+ {
+ /* Single register transfers implemented as str/ldr. */
+ if (writeback)
+ {
+ if (inst.instruction & (1 << 23))
+ inst.instruction = 0x00000b04; /* ia! -> [base], #4 */
+ else
+ inst.instruction = 0x00000d04; /* db! -> [base, #-4]! */
+ }
+ else
+ {
+ if (inst.instruction & (1 << 23))
+ inst.instruction = 0x00800000; /* ia -> [base] */
+ else
+ inst.instruction = 0x00000c04; /* db -> [base, #-4] */
+ }
+
+ inst.instruction |= 0xf8400000;
+ if (load)
+ inst.instruction |= 0x00100000;
+
+ mask = ffs(mask) - 1;
+ mask <<= 12;
+ }
+ else if (writeback)
+ inst.instruction |= WRITE_BACK;
+
+ inst.instruction |= mask;
+ inst.instruction |= base << 16;
+}
+
static void
do_t_ldmstm (void)
{
@@ -6882,60 +9114,60 @@ do_t_ldmstm (void)
if (unified_syntax)
{
+ bfd_boolean narrow;
+ unsigned mask;
+
+ narrow = FALSE;
/* See if we can use a 16-bit instruction. */
if (inst.instruction < 0xffff /* not ldmdb/stmdb */
&& inst.size_req != 4
- && inst.operands[0].reg <= 7
- && !(inst.operands[1].imm & ~0xff)
- && (inst.instruction == T_MNEM_stmia
- ? inst.operands[0].writeback
- : (inst.operands[0].writeback
- == !(inst.operands[1].imm & (1 << inst.operands[0].reg)))))
- {
- if (inst.instruction == T_MNEM_stmia
- && (inst.operands[1].imm & (1 << inst.operands[0].reg))
- && (inst.operands[1].imm & ((1 << inst.operands[0].reg) - 1)))
- as_warn (_("value stored for r%d is UNPREDICTABLE"),
- inst.operands[0].reg);
-
- inst.instruction = THUMB_OP16 (inst.instruction);
- inst.instruction |= inst.operands[0].reg << 8;
- inst.instruction |= inst.operands[1].imm;
- }
- else
+ && !(inst.operands[1].imm & ~0xff))
{
- if (inst.operands[1].imm & (1 << 13))
- as_warn (_("SP should not be in register list"));
- if (inst.instruction == T_MNEM_stmia)
+ mask = 1 << inst.operands[0].reg;
+
+ if (inst.operands[0].reg <= 7
+ && (inst.instruction == T_MNEM_stmia
+ ? inst.operands[0].writeback
+ : (inst.operands[0].writeback
+ == !(inst.operands[1].imm & mask))))
{
- if (inst.operands[1].imm & (1 << 15))
- as_warn (_("PC should not be in register list"));
- if (inst.operands[1].imm & (1 << inst.operands[0].reg))
+ if (inst.instruction == T_MNEM_stmia
+ && (inst.operands[1].imm & mask)
+ && (inst.operands[1].imm & (mask - 1)))
as_warn (_("value stored for r%d is UNPREDICTABLE"),
inst.operands[0].reg);
+
+ inst.instruction = THUMB_OP16 (inst.instruction);
+ inst.instruction |= inst.operands[0].reg << 8;
+ inst.instruction |= inst.operands[1].imm;
+ narrow = TRUE;
}
- else
+ else if (inst.operands[0] .reg == REG_SP
+ && inst.operands[0].writeback)
{
- if (inst.operands[1].imm & (1 << 14)
- && inst.operands[1].imm & (1 << 15))
- as_warn (_("LR and PC should not both be in register list"));
- if ((inst.operands[1].imm & (1 << inst.operands[0].reg))
- && inst.operands[0].writeback)
- as_warn (_("base register should not be in register list "
- "when written back"));
+ inst.instruction = THUMB_OP16 (inst.instruction == T_MNEM_stmia
+ ? T_MNEM_push : T_MNEM_pop);
+ inst.instruction |= inst.operands[1].imm;
+ narrow = TRUE;
}
+ }
+
+ if (!narrow)
+ {
if (inst.instruction < 0xffff)
inst.instruction = THUMB_OP32 (inst.instruction);
- inst.instruction |= inst.operands[0].reg << 16;
- inst.instruction |= inst.operands[1].imm;
- if (inst.operands[0].writeback)
- inst.instruction |= WRITE_BACK;
+
+ encode_thumb2_ldmstm(inst.operands[0].reg, inst.operands[1].imm,
+ inst.operands[0].writeback);
}
}
else
{
constraint (inst.operands[0].reg > 7
|| (inst.operands[1].imm & ~0xff), BAD_HIREG);
+ constraint (inst.instruction != T_MNEM_ldmia
+ && inst.instruction != T_MNEM_stmia,
+ _("Thumb-2 instruction only valid in unified syntax"));
if (inst.instruction == T_MNEM_stmia)
{
if (!inst.operands[0].writeback)
@@ -7209,6 +9441,16 @@ do_t_mov_cmp (void)
|| inst.operands[1].shifted)
narrow = FALSE;
+ /* MOVS PC, LR is encoded as SUBS PC, LR, #0. */
+ if (opcode == T_MNEM_movs && inst.operands[1].isreg
+ && !inst.operands[1].shifted
+ && inst.operands[0].reg == REG_PC
+ && inst.operands[1].reg == REG_LR)
+ {
+ inst.instruction = T2_SUBS_PC_LR;
+ return;
+ }
+
if (!inst.operands[1].isreg)
{
/* Immediate operand. */
@@ -7231,11 +9473,98 @@ do_t_mov_cmp (void)
inst.reloc.type = BFD_RELOC_ARM_T32_IMMEDIATE;
}
}
+ else if (inst.operands[1].shifted && inst.operands[1].immisreg
+ && (inst.instruction == T_MNEM_mov
+ || inst.instruction == T_MNEM_movs))
+ {
+ /* Register shifts are encoded as separate shift instructions. */
+ bfd_boolean flags = (inst.instruction == T_MNEM_movs);
+
+ if (current_it_mask)
+ narrow = !flags;
+ else
+ narrow = flags;
+
+ if (inst.size_req == 4)
+ narrow = FALSE;
+
+ if (!low_regs || inst.operands[1].imm > 7)
+ narrow = FALSE;
+
+ if (inst.operands[0].reg != inst.operands[1].reg)
+ narrow = FALSE;
+
+ switch (inst.operands[1].shift_kind)
+ {
+ case SHIFT_LSL:
+ opcode = narrow ? T_OPCODE_LSL_R : THUMB_OP32 (T_MNEM_lsl);
+ break;
+ case SHIFT_ASR:
+ opcode = narrow ? T_OPCODE_ASR_R : THUMB_OP32 (T_MNEM_asr);
+ break;
+ case SHIFT_LSR:
+ opcode = narrow ? T_OPCODE_LSR_R : THUMB_OP32 (T_MNEM_lsr);
+ break;
+ case SHIFT_ROR:
+ opcode = narrow ? T_OPCODE_ROR_R : THUMB_OP32 (T_MNEM_ror);
+ break;
+ default:
+ abort();
+ }
+
+ inst.instruction = opcode;
+ if (narrow)
+ {
+ inst.instruction |= inst.operands[0].reg;
+ inst.instruction |= inst.operands[1].imm << 3;
+ }
+ else
+ {
+ if (flags)
+ inst.instruction |= CONDS_BIT;
+
+ inst.instruction |= inst.operands[0].reg << 8;
+ inst.instruction |= inst.operands[1].reg << 16;
+ inst.instruction |= inst.operands[1].imm;
+ }
+ }
else if (!narrow)
{
- inst.instruction = THUMB_OP32 (inst.instruction);
- inst.instruction |= inst.operands[0].reg << r0off;
- encode_thumb32_shifted_operand (1);
+ /* Some mov with immediate shift have narrow variants.
+ Register shifts are handled above. */
+ if (low_regs && inst.operands[1].shifted
+ && (inst.instruction == T_MNEM_mov
+ || inst.instruction == T_MNEM_movs))
+ {
+ if (current_it_mask)
+ narrow = (inst.instruction == T_MNEM_mov);
+ else
+ narrow = (inst.instruction == T_MNEM_movs);
+ }
+
+ if (narrow)
+ {
+ switch (inst.operands[1].shift_kind)
+ {
+ case SHIFT_LSL: inst.instruction = T_OPCODE_LSL_I; break;
+ case SHIFT_LSR: inst.instruction = T_OPCODE_LSR_I; break;
+ case SHIFT_ASR: inst.instruction = T_OPCODE_ASR_I; break;
+ default: narrow = FALSE; break;
+ }
+ }
+
+ if (narrow)
+ {
+ inst.instruction |= inst.operands[0].reg;
+ inst.instruction |= inst.operands[1].reg << 3;
+ inst.reloc.type = BFD_RELOC_ARM_THUMB_SHIFT;
+ }
+ else
+ {
+ inst.instruction = THUMB_OP32 (inst.instruction);
+ inst.instruction |= inst.operands[0].reg << r0off;
+ encode_thumb32_shifted_operand (1);
+ }
}
else
switch (inst.instruction)
@@ -7310,11 +9639,30 @@ do_t_mov_cmp (void)
static void
do_t_mov16 (void)
{
+ bfd_vma imm;
+ bfd_boolean top;
+
+ top = (inst.instruction & 0x00800000) != 0;
+ if (inst.reloc.type == BFD_RELOC_ARM_MOVW)
+ {
+ constraint (top, _(":lower16: not allowed this instruction"));
+ inst.reloc.type = BFD_RELOC_ARM_THUMB_MOVW;
+ }
+ else if (inst.reloc.type == BFD_RELOC_ARM_MOVT)
+ {
+ constraint (!top, _(":upper16: not allowed this instruction"));
+ inst.reloc.type = BFD_RELOC_ARM_THUMB_MOVT;
+ }
+
inst.instruction |= inst.operands[0].reg << 8;
- inst.instruction |= (inst.operands[1].imm & 0xf000) << 4;
- inst.instruction |= (inst.operands[1].imm & 0x0800) << 15;
- inst.instruction |= (inst.operands[1].imm & 0x0700) << 4;
- inst.instruction |= (inst.operands[1].imm & 0x00ff);
+ if (inst.reloc.type == BFD_RELOC_UNUSED)
+ {
+ imm = inst.reloc.exp.X_add_number;
+ inst.instruction |= (imm & 0xf000) << 4;
+ inst.instruction |= (imm & 0x0800) << 15;
+ inst.instruction |= (imm & 0x0700) << 4;
+ inst.instruction |= (imm & 0x00ff);
+ }
}
static void
@@ -7388,6 +9736,10 @@ static void
do_t_mrs (void)
{
int flags;
+
+ if (do_vfp_nsyn_mrs () == SUCCESS)
+ return;
+
flags = inst.operands[1].imm & (PSR_c|PSR_x|PSR_s|PSR_f|SPSR_BIT);
if (flags == 0)
{
@@ -7415,6 +9767,9 @@ do_t_msr (void)
{
int flags;
+ if (do_vfp_nsyn_msr () == SUCCESS)
+ return;
+
constraint (!inst.operands[1].isreg,
_("Thumb encoding does not support an immediate here"));
flags = inst.operands[0].imm;
@@ -7589,7 +9944,7 @@ do_t_push_pop (void)
mask = inst.operands[0].imm;
if ((mask & ~0xff) == 0)
- inst.instruction = THUMB_OP16 (inst.instruction);
+ inst.instruction = THUMB_OP16 (inst.instruction) | mask;
else if ((inst.instruction == T_MNEM_push
&& (mask & ~0xff) == 1 << REG_LR)
|| (inst.instruction == T_MNEM_pop
@@ -7597,43 +9952,18 @@ do_t_push_pop (void)
{
inst.instruction = THUMB_OP16 (inst.instruction);
inst.instruction |= THUMB_PP_PC_LR;
- mask &= 0xff;
+ inst.instruction |= mask & 0xff;
}
else if (unified_syntax)
{
- if (mask & (1 << 13))
- inst.error = _("SP not allowed in register list");
- if (inst.instruction == T_MNEM_push)
- {
- if (mask & (1 << 15))
- inst.error = _("PC not allowed in register list");
- }
- else
- {
- if (mask & (1 << 14)
- && mask & (1 << 15))
- inst.error = _("LR and PC should not both be in register list");
- }
- if ((mask & (mask - 1)) == 0)
- {
- /* Single register push/pop implemented as str/ldr. */
- if (inst.instruction == T_MNEM_push)
- inst.instruction = 0xf84d0d04; /* str reg, [sp, #-4]! */
- else
- inst.instruction = 0xf85d0b04; /* ldr reg, [sp], #4 */
- mask = ffs(mask) - 1;
- mask <<= 12;
- }
- else
- inst.instruction = THUMB_OP32 (inst.instruction);
+ inst.instruction = THUMB_OP32 (inst.instruction);
+ encode_thumb2_ldmstm(13, mask, TRUE);
}
else
{
inst.error = _("invalid register list to push/pop instruction");
return;
}
-
- inst.instruction |= mask;
}
static void
@@ -7678,8 +10008,37 @@ do_t_rsb (void)
inst.instruction |= Rs << 16;
if (!inst.operands[2].isreg)
{
- inst.instruction = (inst.instruction & 0xe1ffffff) | 0x10000000;
- inst.reloc.type = BFD_RELOC_ARM_T32_IMMEDIATE;
+ bfd_boolean narrow;
+
+ if ((inst.instruction & 0x00100000) != 0)
+ narrow = (current_it_mask == 0);
+ else
+ narrow = (current_it_mask != 0);
+
+ if (Rd > 7 || Rs > 7)
+ narrow = FALSE;
+
+ if (inst.size_req == 4 || !unified_syntax)
+ narrow = FALSE;
+
+ if (inst.reloc.exp.X_op != O_constant
+ || inst.reloc.exp.X_add_number != 0)
+ narrow = FALSE;
+
+ /* Turn rsb #0 into 16-bit neg. We should probably do this via
+ relaxation, but it doesn't seem worth the hassle. */
+ if (narrow)
+ {
+ inst.reloc.type = BFD_RELOC_UNUSED;
+ inst.instruction = THUMB_OP16 (T_MNEM_negs);
+ inst.instruction |= Rs << 3;
+ inst.instruction |= Rd;
+ }
+ else
+ {
+ inst.instruction = (inst.instruction & 0xe1ffffff) | 0x10000000;
+ inst.reloc.type = BFD_RELOC_ARM_T32_IMMEDIATE;
+ }
}
else
encode_thumb32_shifted_operand (2);
@@ -7997,6 +10356,3387 @@ do_t_usat16 (void)
inst.instruction |= inst.operands[1].imm;
inst.instruction |= inst.operands[2].reg << 16;
}
+
+/* Neon instruction encoder helpers. */
+
+/* Encodings for the different types for various Neon opcodes. */
+
+/* An "invalid" code for the following tables. */
+#define N_INV -1u
+
+struct neon_tab_entry
+{
+ unsigned integer;
+ unsigned float_or_poly;
+ unsigned scalar_or_imm;
+};
+
+/* Map overloaded Neon opcodes to their respective encodings. */
+#define NEON_ENC_TAB \
+ X(vabd, 0x0000700, 0x1200d00, N_INV), \
+ X(vmax, 0x0000600, 0x0000f00, N_INV), \
+ X(vmin, 0x0000610, 0x0200f00, N_INV), \
+ X(vpadd, 0x0000b10, 0x1000d00, N_INV), \
+ X(vpmax, 0x0000a00, 0x1000f00, N_INV), \
+ X(vpmin, 0x0000a10, 0x1200f00, N_INV), \
+ X(vadd, 0x0000800, 0x0000d00, N_INV), \
+ X(vsub, 0x1000800, 0x0200d00, N_INV), \
+ X(vceq, 0x1000810, 0x0000e00, 0x1b10100), \
+ X(vcge, 0x0000310, 0x1000e00, 0x1b10080), \
+ X(vcgt, 0x0000300, 0x1200e00, 0x1b10000), \
+ /* Register variants of the following two instructions are encoded as
+ vcge / vcgt with the operands reversed. */ \
+ X(vclt, 0x0000300, 0x1200e00, 0x1b10200), \
+ X(vcle, 0x0000310, 0x1000e00, 0x1b10180), \
+ X(vmla, 0x0000900, 0x0000d10, 0x0800040), \
+ X(vmls, 0x1000900, 0x0200d10, 0x0800440), \
+ X(vmul, 0x0000910, 0x1000d10, 0x0800840), \
+ X(vmull, 0x0800c00, 0x0800e00, 0x0800a40), /* polynomial not float. */ \
+ X(vmlal, 0x0800800, N_INV, 0x0800240), \
+ X(vmlsl, 0x0800a00, N_INV, 0x0800640), \
+ X(vqdmlal, 0x0800900, N_INV, 0x0800340), \
+ X(vqdmlsl, 0x0800b00, N_INV, 0x0800740), \
+ X(vqdmull, 0x0800d00, N_INV, 0x0800b40), \
+ X(vqdmulh, 0x0000b00, N_INV, 0x0800c40), \
+ X(vqrdmulh, 0x1000b00, N_INV, 0x0800d40), \
+ X(vshl, 0x0000400, N_INV, 0x0800510), \
+ X(vqshl, 0x0000410, N_INV, 0x0800710), \
+ X(vand, 0x0000110, N_INV, 0x0800030), \
+ X(vbic, 0x0100110, N_INV, 0x0800030), \
+ X(veor, 0x1000110, N_INV, N_INV), \
+ X(vorn, 0x0300110, N_INV, 0x0800010), \
+ X(vorr, 0x0200110, N_INV, 0x0800010), \
+ X(vmvn, 0x1b00580, N_INV, 0x0800030), \
+ X(vshll, 0x1b20300, N_INV, 0x0800a10), /* max shift, immediate. */ \
+ X(vcvt, 0x1b30600, N_INV, 0x0800e10), /* integer, fixed-point. */ \
+ X(vdup, 0xe800b10, N_INV, 0x1b00c00), /* arm, scalar. */ \
+ X(vld1, 0x0200000, 0x0a00000, 0x0a00c00), /* interlv, lane, dup. */ \
+ X(vst1, 0x0000000, 0x0800000, N_INV), \
+ X(vld2, 0x0200100, 0x0a00100, 0x0a00d00), \
+ X(vst2, 0x0000100, 0x0800100, N_INV), \
+ X(vld3, 0x0200200, 0x0a00200, 0x0a00e00), \
+ X(vst3, 0x0000200, 0x0800200, N_INV), \
+ X(vld4, 0x0200300, 0x0a00300, 0x0a00f00), \
+ X(vst4, 0x0000300, 0x0800300, N_INV), \
+ X(vmovn, 0x1b20200, N_INV, N_INV), \
+ X(vtrn, 0x1b20080, N_INV, N_INV), \
+ X(vqmovn, 0x1b20200, N_INV, N_INV), \
+ X(vqmovun, 0x1b20240, N_INV, N_INV), \
+ X(vnmul, 0xe200a40, 0xe200b40, N_INV), \
+ X(vnmla, 0xe000a40, 0xe000b40, N_INV), \
+ X(vnmls, 0xe100a40, 0xe100b40, N_INV), \
+ X(vcmp, 0xeb40a40, 0xeb40b40, N_INV), \
+ X(vcmpz, 0xeb50a40, 0xeb50b40, N_INV), \
+ X(vcmpe, 0xeb40ac0, 0xeb40bc0, N_INV), \
+ X(vcmpez, 0xeb50ac0, 0xeb50bc0, N_INV)
+
+enum neon_opc
+{
+#define X(OPC,I,F,S) N_MNEM_##OPC
+NEON_ENC_TAB
+#undef X
+};
+
+static const struct neon_tab_entry neon_enc_tab[] =
+{
+#define X(OPC,I,F,S) { (I), (F), (S) }
+NEON_ENC_TAB
+#undef X
+};
+
+#define NEON_ENC_INTEGER(X) (neon_enc_tab[(X) & 0x0fffffff].integer)
+#define NEON_ENC_ARMREG(X) (neon_enc_tab[(X) & 0x0fffffff].integer)
+#define NEON_ENC_POLY(X) (neon_enc_tab[(X) & 0x0fffffff].float_or_poly)
+#define NEON_ENC_FLOAT(X) (neon_enc_tab[(X) & 0x0fffffff].float_or_poly)
+#define NEON_ENC_SCALAR(X) (neon_enc_tab[(X) & 0x0fffffff].scalar_or_imm)
+#define NEON_ENC_IMMED(X) (neon_enc_tab[(X) & 0x0fffffff].scalar_or_imm)
+#define NEON_ENC_INTERLV(X) (neon_enc_tab[(X) & 0x0fffffff].integer)
+#define NEON_ENC_LANE(X) (neon_enc_tab[(X) & 0x0fffffff].float_or_poly)
+#define NEON_ENC_DUP(X) (neon_enc_tab[(X) & 0x0fffffff].scalar_or_imm)
+#define NEON_ENC_SINGLE(X) \
+ ((neon_enc_tab[(X) & 0x0fffffff].integer) | ((X) & 0xf0000000))
+#define NEON_ENC_DOUBLE(X) \
+ ((neon_enc_tab[(X) & 0x0fffffff].float_or_poly) | ((X) & 0xf0000000))
+
+/* Define shapes for instruction operands. The following mnemonic characters
+ are used in this table:
+
+ F - VFP S<n> register
+ D - Neon D<n> register
+ Q - Neon Q<n> register
+ I - Immediate
+ S - Scalar
+ R - ARM register
+ L - D<n> register list
+
+ This table is used to generate various data:
+ - enumerations of the form NS_DDR to be used as arguments to
+ neon_select_shape.
+ - a table classifying shapes into single, double, quad, mixed.
+ - a table used to drive neon_select_shape.
+*/
+
+#define NEON_SHAPE_DEF \
+ X(3, (D, D, D), DOUBLE), \
+ X(3, (Q, Q, Q), QUAD), \
+ X(3, (D, D, I), DOUBLE), \
+ X(3, (Q, Q, I), QUAD), \
+ X(3, (D, D, S), DOUBLE), \
+ X(3, (Q, Q, S), QUAD), \
+ X(2, (D, D), DOUBLE), \
+ X(2, (Q, Q), QUAD), \
+ X(2, (D, S), DOUBLE), \
+ X(2, (Q, S), QUAD), \
+ X(2, (D, R), DOUBLE), \
+ X(2, (Q, R), QUAD), \
+ X(2, (D, I), DOUBLE), \
+ X(2, (Q, I), QUAD), \
+ X(3, (D, L, D), DOUBLE), \
+ X(2, (D, Q), MIXED), \
+ X(2, (Q, D), MIXED), \
+ X(3, (D, Q, I), MIXED), \
+ X(3, (Q, D, I), MIXED), \
+ X(3, (Q, D, D), MIXED), \
+ X(3, (D, Q, Q), MIXED), \
+ X(3, (Q, Q, D), MIXED), \
+ X(3, (Q, D, S), MIXED), \
+ X(3, (D, Q, S), MIXED), \
+ X(4, (D, D, D, I), DOUBLE), \
+ X(4, (Q, Q, Q, I), QUAD), \
+ X(2, (F, F), SINGLE), \
+ X(3, (F, F, F), SINGLE), \
+ X(2, (F, I), SINGLE), \
+ X(2, (F, D), MIXED), \
+ X(2, (D, F), MIXED), \
+ X(3, (F, F, I), MIXED), \
+ X(4, (R, R, F, F), SINGLE), \
+ X(4, (F, F, R, R), SINGLE), \
+ X(3, (D, R, R), DOUBLE), \
+ X(3, (R, R, D), DOUBLE), \
+ X(2, (S, R), SINGLE), \
+ X(2, (R, S), SINGLE), \
+ X(2, (F, R), SINGLE), \
+ X(2, (R, F), SINGLE)
+
+#define S2(A,B) NS_##A##B
+#define S3(A,B,C) NS_##A##B##C
+#define S4(A,B,C,D) NS_##A##B##C##D
+
+#define X(N, L, C) S##N L
+
+enum neon_shape
+{
+ NEON_SHAPE_DEF,
+ NS_NULL
+};
+
+#undef X
+#undef S2
+#undef S3
+#undef S4
+
+enum neon_shape_class
+{
+ SC_SINGLE,
+ SC_DOUBLE,
+ SC_QUAD,
+ SC_MIXED
+};
+
+#define X(N, L, C) SC_##C
+
+static enum neon_shape_class neon_shape_class[] =
+{
+ NEON_SHAPE_DEF
+};
+
+#undef X
+
+enum neon_shape_el
+{
+ SE_F,
+ SE_D,
+ SE_Q,
+ SE_I,
+ SE_S,
+ SE_R,
+ SE_L
+};
+
+/* Register widths of above. */
+static unsigned neon_shape_el_size[] =
+{
+ 32,
+ 64,
+ 128,
+ 0,
+ 32,
+ 32,
+ 0
+};
+
+struct neon_shape_info
+{
+ unsigned els;
+ enum neon_shape_el el[NEON_MAX_TYPE_ELS];
+};
+
+#define S2(A,B) { SE_##A, SE_##B }
+#define S3(A,B,C) { SE_##A, SE_##B, SE_##C }
+#define S4(A,B,C,D) { SE_##A, SE_##B, SE_##C, SE_##D }
+
+#define X(N, L, C) { N, S##N L }
+
+static struct neon_shape_info neon_shape_tab[] =
+{
+ NEON_SHAPE_DEF
+};
+
+#undef X
+#undef S2
+#undef S3
+#undef S4
+
+/* Bit masks used in type checking given instructions.
+ 'N_EQK' means the type must be the same as (or based on in some way) the key
+ type, which itself is marked with the 'N_KEY' bit. If the 'N_EQK' bit is
+ set, various other bits can be set as well in order to modify the meaning of
+ the type constraint. */
+
+enum neon_type_mask
+{
+ N_S8 = 0x000001,
+ N_S16 = 0x000002,
+ N_S32 = 0x000004,
+ N_S64 = 0x000008,
+ N_U8 = 0x000010,
+ N_U16 = 0x000020,
+ N_U32 = 0x000040,
+ N_U64 = 0x000080,
+ N_I8 = 0x000100,
+ N_I16 = 0x000200,
+ N_I32 = 0x000400,
+ N_I64 = 0x000800,
+ N_8 = 0x001000,
+ N_16 = 0x002000,
+ N_32 = 0x004000,
+ N_64 = 0x008000,
+ N_P8 = 0x010000,
+ N_P16 = 0x020000,
+ N_F32 = 0x040000,
+ N_F64 = 0x080000,
+ N_KEY = 0x100000, /* key element (main type specifier). */
+ N_EQK = 0x200000, /* given operand has the same type & size as the key. */
+ N_VFP = 0x400000, /* VFP mode: operand size must match register width. */
+ N_DBL = 0x000001, /* if N_EQK, this operand is twice the size. */
+ N_HLF = 0x000002, /* if N_EQK, this operand is half the size. */
+ N_SGN = 0x000004, /* if N_EQK, this operand is forced to be signed. */
+ N_UNS = 0x000008, /* if N_EQK, this operand is forced to be unsigned. */
+ N_INT = 0x000010, /* if N_EQK, this operand is forced to be integer. */
+ N_FLT = 0x000020, /* if N_EQK, this operand is forced to be float. */
+ N_SIZ = 0x000040, /* if N_EQK, this operand is forced to be size-only. */
+ N_UTYP = 0,
+ N_MAX_NONSPECIAL = N_F64
+};
+
+#define N_ALLMODS (N_DBL | N_HLF | N_SGN | N_UNS | N_INT | N_FLT | N_SIZ)
+
+#define N_SU_ALL (N_S8 | N_S16 | N_S32 | N_S64 | N_U8 | N_U16 | N_U32 | N_U64)
+#define N_SU_32 (N_S8 | N_S16 | N_S32 | N_U8 | N_U16 | N_U32)
+#define N_SU_16_64 (N_S16 | N_S32 | N_S64 | N_U16 | N_U32 | N_U64)
+#define N_SUF_32 (N_SU_32 | N_F32)
+#define N_I_ALL (N_I8 | N_I16 | N_I32 | N_I64)
+#define N_IF_32 (N_I8 | N_I16 | N_I32 | N_F32)
+
+/* Pass this as the first type argument to neon_check_type to ignore types
+ altogether. */
+#define N_IGNORE_TYPE (N_KEY | N_EQK)
+
+/* Select a "shape" for the current instruction (describing register types or
+ sizes) from a list of alternatives. Return NS_NULL if the current instruction
+ doesn't fit. For non-polymorphic shapes, checking is usually done as a
+ function of operand parsing, so this function doesn't need to be called.
+ Shapes should be listed in order of decreasing length. */
+
+static enum neon_shape
+neon_select_shape (enum neon_shape shape, ...)
+{
+ va_list ap;
+ enum neon_shape first_shape = shape;
+
+ /* Fix missing optional operands. FIXME: we don't know at this point how
+ many arguments we should have, so this makes the assumption that we have
+ > 1. This is true of all current Neon opcodes, I think, but may not be
+ true in the future. */
+ if (!inst.operands[1].present)
+ inst.operands[1] = inst.operands[0];
+
+ va_start (ap, shape);
+
+ for (; shape != NS_NULL; shape = va_arg (ap, int))
+ {
+ unsigned j;
+ int matches = 1;
+
+ for (j = 0; j < neon_shape_tab[shape].els; j++)
+ {
+ if (!inst.operands[j].present)
+ {
+ matches = 0;
+ break;
+ }
+
+ switch (neon_shape_tab[shape].el[j])
+ {
+ case SE_F:
+ if (!(inst.operands[j].isreg
+ && inst.operands[j].isvec
+ && inst.operands[j].issingle
+ && !inst.operands[j].isquad))
+ matches = 0;
+ break;
+
+ case SE_D:
+ if (!(inst.operands[j].isreg
+ && inst.operands[j].isvec
+ && !inst.operands[j].isquad
+ && !inst.operands[j].issingle))
+ matches = 0;
+ break;
+
+ case SE_R:
+ if (!(inst.operands[j].isreg
+ && !inst.operands[j].isvec))
+ matches = 0;
+ break;
+
+ case SE_Q:
+ if (!(inst.operands[j].isreg
+ && inst.operands[j].isvec
+ && inst.operands[j].isquad
+ && !inst.operands[j].issingle))
+ matches = 0;
+ break;
+
+ case SE_I:
+ if (!(!inst.operands[j].isreg
+ && !inst.operands[j].isscalar))
+ matches = 0;
+ break;
+
+ case SE_S:
+ if (!(!inst.operands[j].isreg
+ && inst.operands[j].isscalar))
+ matches = 0;
+ break;
+
+ case SE_L:
+ break;
+ }
+ }
+ if (matches)
+ break;
+ }
+
+ va_end (ap);
+
+ if (shape == NS_NULL && first_shape != NS_NULL)
+ first_error (_("invalid instruction shape"));
+
+ return shape;
+}
+
+/* True if SHAPE is predominantly a quadword operation (most of the time, this
+ means the Q bit should be set). */
+
+static int
+neon_quad (enum neon_shape shape)
+{
+ return neon_shape_class[shape] == SC_QUAD;
+}
+
+static void
+neon_modify_type_size (unsigned typebits, enum neon_el_type *g_type,
+ unsigned *g_size)
+{
+ /* Allow modification to be made to types which are constrained to be
+ based on the key element, based on bits set alongside N_EQK. */
+ if ((typebits & N_EQK) != 0)
+ {
+ if ((typebits & N_HLF) != 0)
+ *g_size /= 2;
+ else if ((typebits & N_DBL) != 0)
+ *g_size *= 2;
+ if ((typebits & N_SGN) != 0)
+ *g_type = NT_signed;
+ else if ((typebits & N_UNS) != 0)
+ *g_type = NT_unsigned;
+ else if ((typebits & N_INT) != 0)
+ *g_type = NT_integer;
+ else if ((typebits & N_FLT) != 0)
+ *g_type = NT_float;
+ else if ((typebits & N_SIZ) != 0)
+ *g_type = NT_untyped;
+ }
+}
+
+/* Return operand OPNO promoted by bits set in THISARG. KEY should be the "key"
+ operand type, i.e. the single type specified in a Neon instruction when it
+ is the only one given. */
+
+static struct neon_type_el
+neon_type_promote (struct neon_type_el *key, unsigned thisarg)
+{
+ struct neon_type_el dest = *key;
+
+ assert ((thisarg & N_EQK) != 0);
+
+ neon_modify_type_size (thisarg, &dest.type, &dest.size);
+
+ return dest;
+}
+
+/* Convert Neon type and size into compact bitmask representation. */
+
+static enum neon_type_mask
+type_chk_of_el_type (enum neon_el_type type, unsigned size)
+{
+ switch (type)
+ {
+ case NT_untyped:
+ switch (size)
+ {
+ case 8: return N_8;
+ case 16: return N_16;
+ case 32: return N_32;
+ case 64: return N_64;
+ default: ;
+ }
+ break;
+
+ case NT_integer:
+ switch (size)
+ {
+ case 8: return N_I8;
+ case 16: return N_I16;
+ case 32: return N_I32;
+ case 64: return N_I64;
+ default: ;
+ }
+ break;
+
+ case NT_float:
+ switch (size)
+ {
+ case 32: return N_F32;
+ case 64: return N_F64;
+ default: ;
+ }
+ break;
+
+ case NT_poly:
+ switch (size)
+ {
+ case 8: return N_P8;
+ case 16: return N_P16;
+ default: ;
+ }
+ break;
+
+ case NT_signed:
+ switch (size)
+ {
+ case 8: return N_S8;
+ case 16: return N_S16;
+ case 32: return N_S32;
+ case 64: return N_S64;
+ default: ;
+ }
+ break;
+
+ case NT_unsigned:
+ switch (size)
+ {
+ case 8: return N_U8;
+ case 16: return N_U16;
+ case 32: return N_U32;
+ case 64: return N_U64;
+ default: ;
+ }
+ break;
+
+ default: ;
+ }
+
+ return N_UTYP;
+}
+
+/* Convert compact Neon bitmask type representation to a type and size. Only
+ handles the case where a single bit is set in the mask. */
+
+static int
+el_type_of_type_chk (enum neon_el_type *type, unsigned *size,
+ enum neon_type_mask mask)
+{
+ if ((mask & N_EQK) != 0)
+ return FAIL;
+
+ if ((mask & (N_S8 | N_U8 | N_I8 | N_8 | N_P8)) != 0)
+ *size = 8;
+ else if ((mask & (N_S16 | N_U16 | N_I16 | N_16 | N_P16)) != 0)
+ *size = 16;
+ else if ((mask & (N_S32 | N_U32 | N_I32 | N_32 | N_F32)) != 0)
+ *size = 32;
+ else if ((mask & (N_S64 | N_U64 | N_I64 | N_64 | N_F64)) != 0)
+ *size = 64;
+ else
+ return FAIL;
+
+ if ((mask & (N_S8 | N_S16 | N_S32 | N_S64)) != 0)
+ *type = NT_signed;
+ else if ((mask & (N_U8 | N_U16 | N_U32 | N_U64)) != 0)
+ *type = NT_unsigned;
+ else if ((mask & (N_I8 | N_I16 | N_I32 | N_I64)) != 0)
+ *type = NT_integer;
+ else if ((mask & (N_8 | N_16 | N_32 | N_64)) != 0)
+ *type = NT_untyped;
+ else if ((mask & (N_P8 | N_P16)) != 0)
+ *type = NT_poly;
+ else if ((mask & (N_F32 | N_F64)) != 0)
+ *type = NT_float;
+ else
+ return FAIL;
+
+ return SUCCESS;
+}
+
+/* Modify a bitmask of allowed types. This is only needed for type
+ relaxation. */
+
+static unsigned
+modify_types_allowed (unsigned allowed, unsigned mods)
+{
+ unsigned size;
+ enum neon_el_type type;
+ unsigned destmask;
+ int i;
+
+ destmask = 0;
+
+ for (i = 1; i <= N_MAX_NONSPECIAL; i <<= 1)
+ {
+ if (el_type_of_type_chk (&type, &size, allowed & i) == SUCCESS)
+ {
+ neon_modify_type_size (mods, &type, &size);
+ destmask |= type_chk_of_el_type (type, size);
+ }
+ }
+
+ return destmask;
+}
+
+/* Check type and return type classification.
+ The manual states (paraphrase): If one datatype is given, it indicates the
+ type given in:
+ - the second operand, if there is one
+ - the operand, if there is no second operand
+ - the result, if there are no operands.
+ This isn't quite good enough though, so we use a concept of a "key" datatype
+ which is set on a per-instruction basis, which is the one which matters when
+ only one data type is written.
+ Note: this function has side-effects (e.g. filling in missing operands). All
+ Neon instructions should call it before performing bit encoding. */
+
+static struct neon_type_el
+neon_check_type (unsigned els, enum neon_shape ns, ...)
+{
+ va_list ap;
+ unsigned i, pass, key_el = 0;
+ unsigned types[NEON_MAX_TYPE_ELS];
+ enum neon_el_type k_type = NT_invtype;
+ unsigned k_size = -1u;
+ struct neon_type_el badtype = {NT_invtype, -1};
+ unsigned key_allowed = 0;
+
+ /* Optional registers in Neon instructions are always (not) in operand 1.
+ Fill in the missing operand here, if it was omitted. */
+ if (els > 1 && !inst.operands[1].present)
+ inst.operands[1] = inst.operands[0];
+
+ /* Suck up all the varargs. */
+ va_start (ap, ns);
+ for (i = 0; i < els; i++)
+ {
+ unsigned thisarg = va_arg (ap, unsigned);
+ if (thisarg == N_IGNORE_TYPE)
+ {
+ va_end (ap);
+ return badtype;
+ }
+ types[i] = thisarg;
+ if ((thisarg & N_KEY) != 0)
+ key_el = i;
+ }
+ va_end (ap);
+
+ if (inst.vectype.elems > 0)
+ for (i = 0; i < els; i++)
+ if (inst.operands[i].vectype.type != NT_invtype)
+ {
+ first_error (_("types specified in both the mnemonic and operands"));
+ return badtype;
+ }
+
+ /* Duplicate inst.vectype elements here as necessary.
+ FIXME: No idea if this is exactly the same as the ARM assembler,
+ particularly when an insn takes one register and one non-register
+ operand. */
+ if (inst.vectype.elems == 1 && els > 1)
+ {
+ unsigned j;
+ inst.vectype.elems = els;
+ inst.vectype.el[key_el] = inst.vectype.el[0];
+ for (j = 0; j < els; j++)
+ if (j != key_el)
+ inst.vectype.el[j] = neon_type_promote (&inst.vectype.el[key_el],
+ types[j]);
+ }
+ else if (inst.vectype.elems == 0 && els > 0)
+ {
+ unsigned j;
+ /* No types were given after the mnemonic, so look for types specified
+ after each operand. We allow some flexibility here; as long as the
+ "key" operand has a type, we can infer the others. */
+ for (j = 0; j < els; j++)
+ if (inst.operands[j].vectype.type != NT_invtype)
+ inst.vectype.el[j] = inst.operands[j].vectype;
+
+ if (inst.operands[key_el].vectype.type != NT_invtype)
+ {
+ for (j = 0; j < els; j++)
+ if (inst.operands[j].vectype.type == NT_invtype)
+ inst.vectype.el[j] = neon_type_promote (&inst.vectype.el[key_el],
+ types[j]);
+ }
+ else
+ {
+ first_error (_("operand types can't be inferred"));
+ return badtype;
+ }
+ }
+ else if (inst.vectype.elems != els)
+ {
+ first_error (_("type specifier has the wrong number of parts"));
+ return badtype;
+ }
+
+ for (pass = 0; pass < 2; pass++)
+ {
+ for (i = 0; i < els; i++)
+ {
+ unsigned thisarg = types[i];
+ unsigned types_allowed = ((thisarg & N_EQK) != 0 && pass != 0)
+ ? modify_types_allowed (key_allowed, thisarg) : thisarg;
+ enum neon_el_type g_type = inst.vectype.el[i].type;
+ unsigned g_size = inst.vectype.el[i].size;
+
+ /* Decay more-specific signed & unsigned types to sign-insensitive
+ integer types if sign-specific variants are unavailable. */
+ if ((g_type == NT_signed || g_type == NT_unsigned)
+ && (types_allowed & N_SU_ALL) == 0)
+ g_type = NT_integer;
+
+ /* If only untyped args are allowed, decay any more specific types to
+ them. Some instructions only care about signs for some element
+ sizes, so handle that properly. */
+ if ((g_size == 8 && (types_allowed & N_8) != 0)
+ || (g_size == 16 && (types_allowed & N_16) != 0)
+ || (g_size == 32 && (types_allowed & N_32) != 0)
+ || (g_size == 64 && (types_allowed & N_64) != 0))
+ g_type = NT_untyped;
+
+ if (pass == 0)
+ {
+ if ((thisarg & N_KEY) != 0)
+ {
+ k_type = g_type;
+ k_size = g_size;
+ key_allowed = thisarg & ~N_KEY;
+ }
+ }
+ else
+ {
+ if ((thisarg & N_VFP) != 0)
+ {
+ enum neon_shape_el regshape = neon_shape_tab[ns].el[i];
+ unsigned regwidth = neon_shape_el_size[regshape], match;
+
+ /* In VFP mode, operands must match register widths. If we
+ have a key operand, use its width, else use the width of
+ the current operand. */
+ if (k_size != -1u)
+ match = k_size;
+ else
+ match = g_size;
+
+ if (regwidth != match)
+ {
+ first_error (_("operand size must match register width"));
+ return badtype;
+ }
+ }
+
+ if ((thisarg & N_EQK) == 0)
+ {
+ unsigned given_type = type_chk_of_el_type (g_type, g_size);
+
+ if ((given_type & types_allowed) == 0)
+ {
+ first_error (_("bad type in Neon instruction"));
+ return badtype;
+ }
+ }
+ else
+ {
+ enum neon_el_type mod_k_type = k_type;
+ unsigned mod_k_size = k_size;
+ neon_modify_type_size (thisarg, &mod_k_type, &mod_k_size);
+ if (g_type != mod_k_type || g_size != mod_k_size)
+ {
+ first_error (_("inconsistent types in Neon instruction"));
+ return badtype;
+ }
+ }
+ }
+ }
+ }
+
+ return inst.vectype.el[key_el];
+}
+
+/* Neon-style VFP instruction forwarding. */
+
+/* Thumb VFP instructions have 0xE in the condition field. */
+
+static void
+do_vfp_cond_or_thumb (void)
+{
+ if (thumb_mode)
+ inst.instruction |= 0xe0000000;
+ else
+ inst.instruction |= inst.cond << 28;
+}
+
+/* Look up and encode a simple mnemonic, for use as a helper function for the
+ Neon-style VFP syntax. This avoids duplication of bits of the insns table,
+ etc. It is assumed that operand parsing has already been done, and that the
+ operands are in the form expected by the given opcode (this isn't necessarily
+ the same as the form in which they were parsed, hence some massaging must
+ take place before this function is called).
+ Checks current arch version against that in the looked-up opcode. */
+
+static void
+do_vfp_nsyn_opcode (const char *opname)
+{
+ const struct asm_opcode *opcode;
+
+ opcode = hash_find (arm_ops_hsh, opname);
+
+ if (!opcode)
+ abort ();
+
+ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant,
+ thumb_mode ? *opcode->tvariant : *opcode->avariant),
+ _(BAD_FPU));
+
+ if (thumb_mode)
+ {
+ inst.instruction = opcode->tvalue;
+ opcode->tencode ();
+ }
+ else
+ {
+ inst.instruction = (inst.cond << 28) | opcode->avalue;
+ opcode->aencode ();
+ }
+}
+
+static void
+do_vfp_nsyn_add_sub (enum neon_shape rs)
+{
+ int is_add = (inst.instruction & 0x0fffffff) == N_MNEM_vadd;
+
+ if (rs == NS_FFF)
+ {
+ if (is_add)
+ do_vfp_nsyn_opcode ("fadds");
+ else
+ do_vfp_nsyn_opcode ("fsubs");
+ }
+ else
+ {
+ if (is_add)
+ do_vfp_nsyn_opcode ("faddd");
+ else
+ do_vfp_nsyn_opcode ("fsubd");
+ }
+}
+
+/* Check operand types to see if this is a VFP instruction, and if so call
+ PFN (). */
+
+static int
+try_vfp_nsyn (int args, void (*pfn) (enum neon_shape))
+{
+ enum neon_shape rs;
+ struct neon_type_el et;
+
+ switch (args)
+ {
+ case 2:
+ rs = neon_select_shape (NS_FF, NS_DD, NS_NULL);
+ et = neon_check_type (2, rs,
+ N_EQK | N_VFP, N_F32 | N_F64 | N_KEY | N_VFP);
+ break;
+
+ case 3:
+ rs = neon_select_shape (NS_FFF, NS_DDD, NS_NULL);
+ et = neon_check_type (3, rs,
+ N_EQK | N_VFP, N_EQK | N_VFP, N_F32 | N_F64 | N_KEY | N_VFP);
+ break;
+
+ default:
+ abort ();
+ }
+
+ if (et.type != NT_invtype)
+ {
+ pfn (rs);
+ return SUCCESS;
+ }
+ else
+ inst.error = NULL;
+
+ return FAIL;
+}
+
+static void
+do_vfp_nsyn_mla_mls (enum neon_shape rs)
+{
+ int is_mla = (inst.instruction & 0x0fffffff) == N_MNEM_vmla;
+
+ if (rs == NS_FFF)
+ {
+ if (is_mla)
+ do_vfp_nsyn_opcode ("fmacs");
+ else
+ do_vfp_nsyn_opcode ("fmscs");
+ }
+ else
+ {
+ if (is_mla)
+ do_vfp_nsyn_opcode ("fmacd");
+ else
+ do_vfp_nsyn_opcode ("fmscd");
+ }
+}
+
+static void
+do_vfp_nsyn_mul (enum neon_shape rs)
+{
+ if (rs == NS_FFF)
+ do_vfp_nsyn_opcode ("fmuls");
+ else
+ do_vfp_nsyn_opcode ("fmuld");
+}
+
+static void
+do_vfp_nsyn_abs_neg (enum neon_shape rs)
+{
+ int is_neg = (inst.instruction & 0x80) != 0;
+ neon_check_type (2, rs, N_EQK | N_VFP, N_F32 | N_F64 | N_VFP | N_KEY);
+
+ if (rs == NS_FF)
+ {
+ if (is_neg)
+ do_vfp_nsyn_opcode ("fnegs");
+ else
+ do_vfp_nsyn_opcode ("fabss");
+ }
+ else
+ {
+ if (is_neg)
+ do_vfp_nsyn_opcode ("fnegd");
+ else
+ do_vfp_nsyn_opcode ("fabsd");
+ }
+}
+
+/* Encode single-precision (only!) VFP fldm/fstm instructions. Double precision
+ insns belong to Neon, and are handled elsewhere. */
+
+static void
+do_vfp_nsyn_ldm_stm (int is_dbmode)
+{
+ int is_ldm = (inst.instruction & (1 << 20)) != 0;
+ if (is_ldm)
+ {
+ if (is_dbmode)
+ do_vfp_nsyn_opcode ("fldmdbs");
+ else
+ do_vfp_nsyn_opcode ("fldmias");
+ }
+ else
+ {
+ if (is_dbmode)
+ do_vfp_nsyn_opcode ("fstmdbs");
+ else
+ do_vfp_nsyn_opcode ("fstmias");
+ }
+}
+
+static void
+do_vfp_nsyn_sqrt (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_FF, NS_DD, NS_NULL);
+ neon_check_type (2, rs, N_EQK | N_VFP, N_F32 | N_F64 | N_KEY | N_VFP);
+
+ if (rs == NS_FF)
+ do_vfp_nsyn_opcode ("fsqrts");
+ else
+ do_vfp_nsyn_opcode ("fsqrtd");
+}
+
+static void
+do_vfp_nsyn_div (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_FFF, NS_DDD, NS_NULL);
+ neon_check_type (3, rs, N_EQK | N_VFP, N_EQK | N_VFP,
+ N_F32 | N_F64 | N_KEY | N_VFP);
+
+ if (rs == NS_FFF)
+ do_vfp_nsyn_opcode ("fdivs");
+ else
+ do_vfp_nsyn_opcode ("fdivd");
+}
+
+static void
+do_vfp_nsyn_nmul (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_FFF, NS_DDD, NS_NULL);
+ neon_check_type (3, rs, N_EQK | N_VFP, N_EQK | N_VFP,
+ N_F32 | N_F64 | N_KEY | N_VFP);
+
+ if (rs == NS_FFF)
+ {
+ inst.instruction = NEON_ENC_SINGLE (inst.instruction);
+ do_vfp_sp_dyadic ();
+ }
+ else
+ {
+ inst.instruction = NEON_ENC_DOUBLE (inst.instruction);
+ do_vfp_dp_rd_rn_rm ();
+ }
+ do_vfp_cond_or_thumb ();
+}
+
+static void
+do_vfp_nsyn_cmp (void)
+{
+ if (inst.operands[1].isreg)
+ {
+ enum neon_shape rs = neon_select_shape (NS_FF, NS_DD, NS_NULL);
+ neon_check_type (2, rs, N_EQK | N_VFP, N_F32 | N_F64 | N_KEY | N_VFP);
+
+ if (rs == NS_FF)
+ {
+ inst.instruction = NEON_ENC_SINGLE (inst.instruction);
+ do_vfp_sp_monadic ();
+ }
+ else
+ {
+ inst.instruction = NEON_ENC_DOUBLE (inst.instruction);
+ do_vfp_dp_rd_rm ();
+ }
+ }
+ else
+ {
+ enum neon_shape rs = neon_select_shape (NS_FI, NS_DI, NS_NULL);
+ neon_check_type (2, rs, N_F32 | N_F64 | N_KEY | N_VFP, N_EQK);
+
+ switch (inst.instruction & 0x0fffffff)
+ {
+ case N_MNEM_vcmp:
+ inst.instruction += N_MNEM_vcmpz - N_MNEM_vcmp;
+ break;
+ case N_MNEM_vcmpe:
+ inst.instruction += N_MNEM_vcmpez - N_MNEM_vcmpe;
+ break;
+ default:
+ abort ();
+ }
+
+ if (rs == NS_FI)
+ {
+ inst.instruction = NEON_ENC_SINGLE (inst.instruction);
+ do_vfp_sp_compare_z ();
+ }
+ else
+ {
+ inst.instruction = NEON_ENC_DOUBLE (inst.instruction);
+ do_vfp_dp_rd ();
+ }
+ }
+ do_vfp_cond_or_thumb ();
+}
+
+static void
+nsyn_insert_sp (void)
+{
+ inst.operands[1] = inst.operands[0];
+ memset (&inst.operands[0], '\0', sizeof (inst.operands[0]));
+ inst.operands[0].reg = 13;
+ inst.operands[0].isreg = 1;
+ inst.operands[0].writeback = 1;
+ inst.operands[0].present = 1;
+}
+
+static void
+do_vfp_nsyn_push (void)
+{
+ nsyn_insert_sp ();
+ if (inst.operands[1].issingle)
+ do_vfp_nsyn_opcode ("fstmdbs");
+ else
+ do_vfp_nsyn_opcode ("fstmdbd");
+}
+
+static void
+do_vfp_nsyn_pop (void)
+{
+ nsyn_insert_sp ();
+ if (inst.operands[1].issingle)
+ do_vfp_nsyn_opcode ("fldmias");
+ else
+ do_vfp_nsyn_opcode ("fldmiad");
+}
+
+/* Fix up Neon data-processing instructions, ORing in the correct bits for
+ ARM mode or Thumb mode and moving the encoded bit 24 to bit 28. */
+
+static unsigned
+neon_dp_fixup (unsigned i)
+{
+ if (thumb_mode)
+ {
+ /* The U bit is at bit 24 by default. Move to bit 28 in Thumb mode. */
+ if (i & (1 << 24))
+ i |= 1 << 28;
+
+ i &= ~(1 << 24);
+
+ i |= 0xef000000;
+ }
+ else
+ i |= 0xf2000000;
+
+ return i;
+}
+
+/* Turn a size (8, 16, 32, 64) into the respective bit number minus 3
+ (0, 1, 2, 3). */
+
+static unsigned
+neon_logbits (unsigned x)
+{
+ return ffs (x) - 4;
+}
+
+#define LOW4(R) ((R) & 0xf)
+#define HI1(R) (((R) >> 4) & 1)
+
+/* Encode insns with bit pattern:
+
+ |28/24|23|22 |21 20|19 16|15 12|11 8|7|6|5|4|3 0|
+ | U |x |D |size | Rn | Rd |x x x x|N|Q|M|x| Rm |
+
+ SIZE is passed in bits. -1 means size field isn't changed, in case it has a
+ different meaning for some instruction. */
+
+static void
+neon_three_same (int isquad, int ubit, int size)
+{
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg) << 16;
+ inst.instruction |= HI1 (inst.operands[1].reg) << 7;
+ inst.instruction |= LOW4 (inst.operands[2].reg);
+ inst.instruction |= HI1 (inst.operands[2].reg) << 5;
+ inst.instruction |= (isquad != 0) << 6;
+ inst.instruction |= (ubit != 0) << 24;
+ if (size != -1)
+ inst.instruction |= neon_logbits (size) << 20;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+}
+
+/* Encode instructions of the form:
+
+ |28/24|23|22|21 20|19 18|17 16|15 12|11 7|6|5|4|3 0|
+ | U |x |D |x x |size |x x | Rd |x x x x x|Q|M|x| Rm |
+
+ Don't write size if SIZE == -1. */
+
+static void
+neon_two_same (int qbit, int ubit, int size)
+{
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg);
+ inst.instruction |= HI1 (inst.operands[1].reg) << 5;
+ inst.instruction |= (qbit != 0) << 6;
+ inst.instruction |= (ubit != 0) << 24;
+
+ if (size != -1)
+ inst.instruction |= neon_logbits (size) << 18;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+}
+
+/* Neon instruction encoders, in approximate order of appearance. */
+
+static void
+do_neon_dyadic_i_su (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (3, rs,
+ N_EQK, N_EQK, N_SU_32 | N_KEY);
+ neon_three_same (neon_quad (rs), et.type == NT_unsigned, et.size);
+}
+
+static void
+do_neon_dyadic_i64_su (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (3, rs,
+ N_EQK, N_EQK, N_SU_ALL | N_KEY);
+ neon_three_same (neon_quad (rs), et.type == NT_unsigned, et.size);
+}
+
+static void
+neon_imm_shift (int write_ubit, int uval, int isquad, struct neon_type_el et,
+ unsigned immbits)
+{
+ unsigned size = et.size >> 3;
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg);
+ inst.instruction |= HI1 (inst.operands[1].reg) << 5;
+ inst.instruction |= (isquad != 0) << 6;
+ inst.instruction |= immbits << 16;
+ inst.instruction |= (size >> 3) << 7;
+ inst.instruction |= (size & 0x7) << 19;
+ if (write_ubit)
+ inst.instruction |= (uval != 0) << 24;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+}
+
+static void
+do_neon_shl_imm (void)
+{
+ if (!inst.operands[2].isreg)
+ {
+ enum neon_shape rs = neon_select_shape (NS_DDI, NS_QQI, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs, N_EQK, N_KEY | N_I_ALL);
+ inst.instruction = NEON_ENC_IMMED (inst.instruction);
+ neon_imm_shift (FALSE, 0, neon_quad (rs), et, inst.operands[2].imm);
+ }
+ else
+ {
+ enum neon_shape rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (3, rs,
+ N_EQK, N_SU_ALL | N_KEY, N_EQK | N_SGN);
+ unsigned int tmp;
+
+ /* VSHL/VQSHL 3-register variants have syntax such as:
+ vshl.xx Dd, Dm, Dn
+ whereas other 3-register operations encoded by neon_three_same have
+ syntax like:
+ vadd.xx Dd, Dn, Dm
+ (i.e. with Dn & Dm reversed). Swap operands[1].reg and operands[2].reg
+ here. */
+ tmp = inst.operands[2].reg;
+ inst.operands[2].reg = inst.operands[1].reg;
+ inst.operands[1].reg = tmp;
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+ neon_three_same (neon_quad (rs), et.type == NT_unsigned, et.size);
+ }
+}
+
+static void
+do_neon_qshl_imm (void)
+{
+ if (!inst.operands[2].isreg)
+ {
+ enum neon_shape rs = neon_select_shape (NS_DDI, NS_QQI, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs, N_EQK, N_SU_ALL | N_KEY);
+
+ inst.instruction = NEON_ENC_IMMED (inst.instruction);
+ neon_imm_shift (TRUE, et.type == NT_unsigned, neon_quad (rs), et,
+ inst.operands[2].imm);
+ }
+ else
+ {
+ enum neon_shape rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (3, rs,
+ N_EQK, N_SU_ALL | N_KEY, N_EQK | N_SGN);
+ unsigned int tmp;
+
+ /* See note in do_neon_shl_imm. */
+ tmp = inst.operands[2].reg;
+ inst.operands[2].reg = inst.operands[1].reg;
+ inst.operands[1].reg = tmp;
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+ neon_three_same (neon_quad (rs), et.type == NT_unsigned, et.size);
+ }
+}
+
+static void
+do_neon_rshl (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (3, rs,
+ N_EQK, N_EQK, N_SU_ALL | N_KEY);
+ unsigned int tmp;
+
+ tmp = inst.operands[2].reg;
+ inst.operands[2].reg = inst.operands[1].reg;
+ inst.operands[1].reg = tmp;
+ neon_three_same (neon_quad (rs), et.type == NT_unsigned, et.size);
+}
+
+static int
+neon_cmode_for_logic_imm (unsigned immediate, unsigned *immbits, int size)
+{
+ /* Handle .I8 pseudo-instructions. */
+ if (size == 8)
+ {
+ /* Unfortunately, this will make everything apart from zero out-of-range.
+ FIXME is this the intended semantics? There doesn't seem much point in
+ accepting .I8 if so. */
+ immediate |= immediate << 8;
+ size = 16;
+ }
+
+ if (size >= 32)
+ {
+ if (immediate == (immediate & 0x000000ff))
+ {
+ *immbits = immediate;
+ return 0x1;
+ }
+ else if (immediate == (immediate & 0x0000ff00))
+ {
+ *immbits = immediate >> 8;
+ return 0x3;
+ }
+ else if (immediate == (immediate & 0x00ff0000))
+ {
+ *immbits = immediate >> 16;
+ return 0x5;
+ }
+ else if (immediate == (immediate & 0xff000000))
+ {
+ *immbits = immediate >> 24;
+ return 0x7;
+ }
+ if ((immediate & 0xffff) != (immediate >> 16))
+ goto bad_immediate;
+ immediate &= 0xffff;
+ }
+
+ if (immediate == (immediate & 0x000000ff))
+ {
+ *immbits = immediate;
+ return 0x9;
+ }
+ else if (immediate == (immediate & 0x0000ff00))
+ {
+ *immbits = immediate >> 8;
+ return 0xb;
+ }
+
+ bad_immediate:
+ first_error (_("immediate value out of range"));
+ return FAIL;
+}
+
+/* True if IMM has form 0bAAAAAAAABBBBBBBBCCCCCCCCDDDDDDDD for bits
+ A, B, C, D. */
+
+static int
+neon_bits_same_in_bytes (unsigned imm)
+{
+ return ((imm & 0x000000ff) == 0 || (imm & 0x000000ff) == 0x000000ff)
+ && ((imm & 0x0000ff00) == 0 || (imm & 0x0000ff00) == 0x0000ff00)
+ && ((imm & 0x00ff0000) == 0 || (imm & 0x00ff0000) == 0x00ff0000)
+ && ((imm & 0xff000000) == 0 || (imm & 0xff000000) == 0xff000000);
+}
+
+/* For immediate of above form, return 0bABCD. */
+
+static unsigned
+neon_squash_bits (unsigned imm)
+{
+ return (imm & 0x01) | ((imm & 0x0100) >> 7) | ((imm & 0x010000) >> 14)
+ | ((imm & 0x01000000) >> 21);
+}
+
+/* Compress quarter-float representation to 0b...000 abcdefgh. */
+
+static unsigned
+neon_qfloat_bits (unsigned imm)
+{
+ return ((imm >> 19) & 0x7f) | ((imm >> 24) & 0x80);
+}
+
+/* Returns CMODE. IMMBITS [7:0] is set to bits suitable for inserting into
+ the instruction. *OP is passed as the initial value of the op field, and
+ may be set to a different value depending on the constant (i.e.
+ "MOV I64, 0bAAAAAAAABBBB..." which uses OP = 1 despite being MOV not
+ MVN). If the immediate looks like a repeated parttern then also
+ try smaller element sizes. */
+
+static int
+neon_cmode_for_move_imm (unsigned immlo, unsigned immhi, int float_p,
+ unsigned *immbits, int *op, int size,
+ enum neon_el_type type)
+{
+ /* Only permit float immediates (including 0.0/-0.0) if the operand type is
+ float. */
+ if (type == NT_float && !float_p)
+ return FAIL;
+
+ if (type == NT_float && is_quarter_float (immlo) && immhi == 0)
+ {
+ if (size != 32 || *op == 1)
+ return FAIL;
+ *immbits = neon_qfloat_bits (immlo);
+ return 0xf;
+ }
+
+ if (size == 64)
+ {
+ if (neon_bits_same_in_bytes (immhi)
+ && neon_bits_same_in_bytes (immlo))
+ {
+ if (*op == 1)
+ return FAIL;
+ *immbits = (neon_squash_bits (immhi) << 4)
+ | neon_squash_bits (immlo);
+ *op = 1;
+ return 0xe;
+ }
+
+ if (immhi != immlo)
+ return FAIL;
+ }
+
+ if (size >= 32)
+ {
+ if (immlo == (immlo & 0x000000ff))
+ {
+ *immbits = immlo;
+ return 0x0;
+ }
+ else if (immlo == (immlo & 0x0000ff00))
+ {
+ *immbits = immlo >> 8;
+ return 0x2;
+ }
+ else if (immlo == (immlo & 0x00ff0000))
+ {
+ *immbits = immlo >> 16;
+ return 0x4;
+ }
+ else if (immlo == (immlo & 0xff000000))
+ {
+ *immbits = immlo >> 24;
+ return 0x6;
+ }
+ else if (immlo == ((immlo & 0x0000ff00) | 0x000000ff))
+ {
+ *immbits = (immlo >> 8) & 0xff;
+ return 0xc;
+ }
+ else if (immlo == ((immlo & 0x00ff0000) | 0x0000ffff))
+ {
+ *immbits = (immlo >> 16) & 0xff;
+ return 0xd;
+ }
+
+ if ((immlo & 0xffff) != (immlo >> 16))
+ return FAIL;
+ immlo &= 0xffff;
+ }
+
+ if (size >= 16)
+ {
+ if (immlo == (immlo & 0x000000ff))
+ {
+ *immbits = immlo;
+ return 0x8;
+ }
+ else if (immlo == (immlo & 0x0000ff00))
+ {
+ *immbits = immlo >> 8;
+ return 0xa;
+ }
+
+ if ((immlo & 0xff) != (immlo >> 8))
+ return FAIL;
+ immlo &= 0xff;
+ }
+
+ if (immlo == (immlo & 0x000000ff))
+ {
+ /* Don't allow MVN with 8-bit immediate. */
+ if (*op == 1)
+ return FAIL;
+ *immbits = immlo;
+ return 0xe;
+ }
+
+ return FAIL;
+}
+
+/* Write immediate bits [7:0] to the following locations:
+
+ |28/24|23 19|18 16|15 4|3 0|
+ | a |x x x x x|b c d|x x x x x x x x x x x x|e f g h|
+
+ This function is used by VMOV/VMVN/VORR/VBIC. */
+
+static void
+neon_write_immbits (unsigned immbits)
+{
+ inst.instruction |= immbits & 0xf;
+ inst.instruction |= ((immbits >> 4) & 0x7) << 16;
+ inst.instruction |= ((immbits >> 7) & 0x1) << 24;
+}
+
+/* Invert low-order SIZE bits of XHI:XLO. */
+
+static void
+neon_invert_size (unsigned *xlo, unsigned *xhi, int size)
+{
+ unsigned immlo = xlo ? *xlo : 0;
+ unsigned immhi = xhi ? *xhi : 0;
+
+ switch (size)
+ {
+ case 8:
+ immlo = (~immlo) & 0xff;
+ break;
+
+ case 16:
+ immlo = (~immlo) & 0xffff;
+ break;
+
+ case 64:
+ immhi = (~immhi) & 0xffffffff;
+ /* fall through. */
+
+ case 32:
+ immlo = (~immlo) & 0xffffffff;
+ break;
+
+ default:
+ abort ();
+ }
+
+ if (xlo)
+ *xlo = immlo;
+
+ if (xhi)
+ *xhi = immhi;
+}
+
+static void
+do_neon_logic (void)
+{
+ if (inst.operands[2].present && inst.operands[2].isreg)
+ {
+ enum neon_shape rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL);
+ neon_check_type (3, rs, N_IGNORE_TYPE);
+ /* U bit and size field were set as part of the bitmask. */
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+ neon_three_same (neon_quad (rs), 0, -1);
+ }
+ else
+ {
+ enum neon_shape rs = neon_select_shape (NS_DI, NS_QI, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_I8 | N_I16 | N_I32 | N_I64 | N_F32 | N_KEY, N_EQK);
+ enum neon_opc opcode = inst.instruction & 0x0fffffff;
+ unsigned immbits;
+ int cmode;
+
+ if (et.type == NT_invtype)
+ return;
+
+ inst.instruction = NEON_ENC_IMMED (inst.instruction);
+
+ immbits = inst.operands[1].imm;
+ if (et.size == 64)
+ {
+ /* .i64 is a pseudo-op, so the immediate must be a repeating
+ pattern. */
+ if (immbits != (inst.operands[1].regisimm ?
+ inst.operands[1].reg : 0))
+ {
+ /* Set immbits to an invalid constant. */
+ immbits = 0xdeadbeef;
+ }
+ }
+
+ switch (opcode)
+ {
+ case N_MNEM_vbic:
+ cmode = neon_cmode_for_logic_imm (immbits, &immbits, et.size);
+ break;
+
+ case N_MNEM_vorr:
+ cmode = neon_cmode_for_logic_imm (immbits, &immbits, et.size);
+ break;
+
+ case N_MNEM_vand:
+ /* Pseudo-instruction for VBIC. */
+ neon_invert_size (&immbits, 0, et.size);
+ cmode = neon_cmode_for_logic_imm (immbits, &immbits, et.size);
+ break;
+
+ case N_MNEM_vorn:
+ /* Pseudo-instruction for VORR. */
+ neon_invert_size (&immbits, 0, et.size);
+ cmode = neon_cmode_for_logic_imm (immbits, &immbits, et.size);
+ break;
+
+ default:
+ abort ();
+ }
+
+ if (cmode == FAIL)
+ return;
+
+ inst.instruction |= neon_quad (rs) << 6;
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= cmode << 8;
+ neon_write_immbits (immbits);
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+ }
+}
+
+static void
+do_neon_bitfield (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL);
+ neon_check_type (3, rs, N_IGNORE_TYPE);
+ neon_three_same (neon_quad (rs), 0, -1);
+}
+
+static void
+neon_dyadic_misc (enum neon_el_type ubit_meaning, unsigned types,
+ unsigned destbits)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (3, rs, N_EQK | destbits, N_EQK,
+ types | N_KEY);
+ if (et.type == NT_float)
+ {
+ inst.instruction = NEON_ENC_FLOAT (inst.instruction);
+ neon_three_same (neon_quad (rs), 0, -1);
+ }
+ else
+ {
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+ neon_three_same (neon_quad (rs), et.type == ubit_meaning, et.size);
+ }
+}
+
+static void
+do_neon_dyadic_if_su (void)
+{
+ neon_dyadic_misc (NT_unsigned, N_SUF_32, 0);
+}
+
+static void
+do_neon_dyadic_if_su_d (void)
+{
+ /* This version only allow D registers, but that constraint is enforced during
+ operand parsing so we don't need to do anything extra here. */
+ neon_dyadic_misc (NT_unsigned, N_SUF_32, 0);
+}
+
+static void
+do_neon_dyadic_if_i_d (void)
+{
+ /* The "untyped" case can't happen. Do this to stop the "U" bit being
+ affected if we specify unsigned args. */
+ neon_dyadic_misc (NT_untyped, N_IF_32, 0);
+}
+
+enum vfp_or_neon_is_neon_bits
+{
+ NEON_CHECK_CC = 1,
+ NEON_CHECK_ARCH = 2
+};
+
+/* Call this function if an instruction which may have belonged to the VFP or
+ Neon instruction sets, but turned out to be a Neon instruction (due to the
+ operand types involved, etc.). We have to check and/or fix-up a couple of
+ things:
+
+ - Make sure the user hasn't attempted to make a Neon instruction
+ conditional.
+ - Alter the value in the condition code field if necessary.
+ - Make sure that the arch supports Neon instructions.
+
+ Which of these operations take place depends on bits from enum
+ vfp_or_neon_is_neon_bits.
+
+ WARNING: This function has side effects! If NEON_CHECK_CC is used and the
+ current instruction's condition is COND_ALWAYS, the condition field is
+ changed to inst.uncond_value. This is necessary because instructions shared
+ between VFP and Neon may be conditional for the VFP variants only, and the
+ unconditional Neon version must have, e.g., 0xF in the condition field. */
+
+static int
+vfp_or_neon_is_neon (unsigned check)
+{
+ /* Conditions are always legal in Thumb mode (IT blocks). */
+ if (!thumb_mode && (check & NEON_CHECK_CC))
+ {
+ if (inst.cond != COND_ALWAYS)
+ {
+ first_error (_(BAD_COND));
+ return FAIL;
+ }
+ if (inst.uncond_value != -1)
+ inst.instruction |= inst.uncond_value << 28;
+ }
+
+ if ((check & NEON_CHECK_ARCH)
+ && !ARM_CPU_HAS_FEATURE (cpu_variant, fpu_neon_ext_v1))
+ {
+ first_error (_(BAD_FPU));
+ return FAIL;
+ }
+
+ return SUCCESS;
+}
+
+static void
+do_neon_addsub_if_i (void)
+{
+ if (try_vfp_nsyn (3, do_vfp_nsyn_add_sub) == SUCCESS)
+ return;
+
+ if (vfp_or_neon_is_neon (NEON_CHECK_CC | NEON_CHECK_ARCH) == FAIL)
+ return;
+
+ /* The "untyped" case can't happen. Do this to stop the "U" bit being
+ affected if we specify unsigned args. */
+ neon_dyadic_misc (NT_untyped, N_IF_32 | N_I64, 0);
+}
+
+/* Swaps operands 1 and 2. If operand 1 (optional arg) was omitted, we want the
+ result to be:
+ V<op> A,B (A is operand 0, B is operand 2)
+ to mean:
+ V<op> A,B,A
+ not:
+ V<op> A,B,B
+ so handle that case specially. */
+
+static void
+neon_exchange_operands (void)
+{
+ void *scratch = alloca (sizeof (inst.operands[0]));
+ if (inst.operands[1].present)
+ {
+ /* Swap operands[1] and operands[2]. */
+ memcpy (scratch, &inst.operands[1], sizeof (inst.operands[0]));
+ inst.operands[1] = inst.operands[2];
+ memcpy (&inst.operands[2], scratch, sizeof (inst.operands[0]));
+ }
+ else
+ {
+ inst.operands[1] = inst.operands[2];
+ inst.operands[2] = inst.operands[0];
+ }
+}
+
+static void
+neon_compare (unsigned regtypes, unsigned immtypes, int invert)
+{
+ if (inst.operands[2].isreg)
+ {
+ if (invert)
+ neon_exchange_operands ();
+ neon_dyadic_misc (NT_unsigned, regtypes, N_SIZ);
+ }
+ else
+ {
+ enum neon_shape rs = neon_select_shape (NS_DDI, NS_QQI, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_EQK | N_SIZ, immtypes | N_KEY);
+
+ inst.instruction = NEON_ENC_IMMED (inst.instruction);
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg);
+ inst.instruction |= HI1 (inst.operands[1].reg) << 5;
+ inst.instruction |= neon_quad (rs) << 6;
+ inst.instruction |= (et.type == NT_float) << 10;
+ inst.instruction |= neon_logbits (et.size) << 18;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+ }
+}
+
+static void
+do_neon_cmp (void)
+{
+ neon_compare (N_SUF_32, N_S8 | N_S16 | N_S32 | N_F32, FALSE);
+}
+
+static void
+do_neon_cmp_inv (void)
+{
+ neon_compare (N_SUF_32, N_S8 | N_S16 | N_S32 | N_F32, TRUE);
+}
+
+static void
+do_neon_ceq (void)
+{
+ neon_compare (N_IF_32, N_IF_32, FALSE);
+}
+
+/* For multiply instructions, we have the possibility of 16-bit or 32-bit
+ scalars, which are encoded in 5 bits, M : Rm.
+ For 16-bit scalars, the register is encoded in Rm[2:0] and the index in
+ M:Rm[3], and for 32-bit scalars, the register is encoded in Rm[3:0] and the
+ index in M. */
+
+static unsigned
+neon_scalar_for_mul (unsigned scalar, unsigned elsize)
+{
+ unsigned regno = NEON_SCALAR_REG (scalar);
+ unsigned elno = NEON_SCALAR_INDEX (scalar);
+
+ switch (elsize)
+ {
+ case 16:
+ if (regno > 7 || elno > 3)
+ goto bad_scalar;
+ return regno | (elno << 3);
+
+ case 32:
+ if (regno > 15 || elno > 1)
+ goto bad_scalar;
+ return regno | (elno << 4);
+
+ default:
+ bad_scalar:
+ first_error (_("scalar out of range for multiply instruction"));
+ }
+
+ return 0;
+}
+
+/* Encode multiply / multiply-accumulate scalar instructions. */
+
+static void
+neon_mul_mac (struct neon_type_el et, int ubit)
+{
+ unsigned scalar;
+
+ /* Give a more helpful error message if we have an invalid type. */
+ if (et.type == NT_invtype)
+ return;
+
+ scalar = neon_scalar_for_mul (inst.operands[2].reg, et.size);
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg) << 16;
+ inst.instruction |= HI1 (inst.operands[1].reg) << 7;
+ inst.instruction |= LOW4 (scalar);
+ inst.instruction |= HI1 (scalar) << 5;
+ inst.instruction |= (et.type == NT_float) << 8;
+ inst.instruction |= neon_logbits (et.size) << 20;
+ inst.instruction |= (ubit != 0) << 24;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+}
+
+static void
+do_neon_mac_maybe_scalar (void)
+{
+ if (try_vfp_nsyn (3, do_vfp_nsyn_mla_mls) == SUCCESS)
+ return;
+
+ if (vfp_or_neon_is_neon (NEON_CHECK_CC | NEON_CHECK_ARCH) == FAIL)
+ return;
+
+ if (inst.operands[2].isscalar)
+ {
+ enum neon_shape rs = neon_select_shape (NS_DDS, NS_QQS, NS_NULL);
+ struct neon_type_el et = neon_check_type (3, rs,
+ N_EQK, N_EQK, N_I16 | N_I32 | N_F32 | N_KEY);
+ inst.instruction = NEON_ENC_SCALAR (inst.instruction);
+ neon_mul_mac (et, neon_quad (rs));
+ }
+ else
+ {
+ /* The "untyped" case can't happen. Do this to stop the "U" bit being
+ affected if we specify unsigned args. */
+ neon_dyadic_misc (NT_untyped, N_IF_32, 0);
+ }
+}
+
+static void
+do_neon_tst (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (3, rs,
+ N_EQK, N_EQK, N_8 | N_16 | N_32 | N_KEY);
+ neon_three_same (neon_quad (rs), 0, et.size);
+}
+
+/* VMUL with 3 registers allows the P8 type. The scalar version supports the
+ same types as the MAC equivalents. The polynomial type for this instruction
+ is encoded the same as the integer type. */
+
+static void
+do_neon_mul (void)
+{
+ if (try_vfp_nsyn (3, do_vfp_nsyn_mul) == SUCCESS)
+ return;
+
+ if (vfp_or_neon_is_neon (NEON_CHECK_CC | NEON_CHECK_ARCH) == FAIL)
+ return;
+
+ if (inst.operands[2].isscalar)
+ do_neon_mac_maybe_scalar ();
+ else
+ neon_dyadic_misc (NT_poly, N_I8 | N_I16 | N_I32 | N_F32 | N_P8, 0);
+}
+
+static void
+do_neon_qdmulh (void)
+{
+ if (inst.operands[2].isscalar)
+ {
+ enum neon_shape rs = neon_select_shape (NS_DDS, NS_QQS, NS_NULL);
+ struct neon_type_el et = neon_check_type (3, rs,
+ N_EQK, N_EQK, N_S16 | N_S32 | N_KEY);
+ inst.instruction = NEON_ENC_SCALAR (inst.instruction);
+ neon_mul_mac (et, neon_quad (rs));
+ }
+ else
+ {
+ enum neon_shape rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (3, rs,
+ N_EQK, N_EQK, N_S16 | N_S32 | N_KEY);
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+ /* The U bit (rounding) comes from bit mask. */
+ neon_three_same (neon_quad (rs), 0, et.size);
+ }
+}
+
+static void
+do_neon_fcmp_absolute (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL);
+ neon_check_type (3, rs, N_EQK, N_EQK, N_F32 | N_KEY);
+ /* Size field comes from bit mask. */
+ neon_three_same (neon_quad (rs), 1, -1);
+}
+
+static void
+do_neon_fcmp_absolute_inv (void)
+{
+ neon_exchange_operands ();
+ do_neon_fcmp_absolute ();
+}
+
+static void
+do_neon_step (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL);
+ neon_check_type (3, rs, N_EQK, N_EQK, N_F32 | N_KEY);
+ neon_three_same (neon_quad (rs), 0, -1);
+}
+
+static void
+do_neon_abs_neg (void)
+{
+ enum neon_shape rs;
+ struct neon_type_el et;
+
+ if (try_vfp_nsyn (2, do_vfp_nsyn_abs_neg) == SUCCESS)
+ return;
+
+ if (vfp_or_neon_is_neon (NEON_CHECK_CC | NEON_CHECK_ARCH) == FAIL)
+ return;
+
+ rs = neon_select_shape (NS_DD, NS_QQ, NS_NULL);
+ et = neon_check_type (2, rs, N_EQK, N_S8 | N_S16 | N_S32 | N_F32 | N_KEY);
+
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg);
+ inst.instruction |= HI1 (inst.operands[1].reg) << 5;
+ inst.instruction |= neon_quad (rs) << 6;
+ inst.instruction |= (et.type == NT_float) << 10;
+ inst.instruction |= neon_logbits (et.size) << 18;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+}
+
+static void
+do_neon_sli (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDI, NS_QQI, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_EQK, N_8 | N_16 | N_32 | N_64 | N_KEY);
+ int imm = inst.operands[2].imm;
+ constraint (imm < 0 || (unsigned)imm >= et.size,
+ _("immediate out of range for insert"));
+ neon_imm_shift (FALSE, 0, neon_quad (rs), et, imm);
+}
+
+static void
+do_neon_sri (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDI, NS_QQI, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_EQK, N_8 | N_16 | N_32 | N_64 | N_KEY);
+ int imm = inst.operands[2].imm;
+ constraint (imm < 1 || (unsigned)imm > et.size,
+ _("immediate out of range for insert"));
+ neon_imm_shift (FALSE, 0, neon_quad (rs), et, et.size - imm);
+}
+
+static void
+do_neon_qshlu_imm (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDI, NS_QQI, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_EQK | N_UNS, N_S8 | N_S16 | N_S32 | N_S64 | N_KEY);
+ int imm = inst.operands[2].imm;
+ constraint (imm < 0 || (unsigned)imm >= et.size,
+ _("immediate out of range for shift"));
+ /* Only encodes the 'U present' variant of the instruction.
+ In this case, signed types have OP (bit 8) set to 0.
+ Unsigned types have OP set to 1. */
+ inst.instruction |= (et.type == NT_unsigned) << 8;
+ /* The rest of the bits are the same as other immediate shifts. */
+ neon_imm_shift (FALSE, 0, neon_quad (rs), et, imm);
+}
+
+static void
+do_neon_qmovn (void)
+{
+ struct neon_type_el et = neon_check_type (2, NS_DQ,
+ N_EQK | N_HLF, N_SU_16_64 | N_KEY);
+ /* Saturating move where operands can be signed or unsigned, and the
+ destination has the same signedness. */
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+ if (et.type == NT_unsigned)
+ inst.instruction |= 0xc0;
+ else
+ inst.instruction |= 0x80;
+ neon_two_same (0, 1, et.size / 2);
+}
+
+static void
+do_neon_qmovun (void)
+{
+ struct neon_type_el et = neon_check_type (2, NS_DQ,
+ N_EQK | N_HLF | N_UNS, N_S16 | N_S32 | N_S64 | N_KEY);
+ /* Saturating move with unsigned results. Operands must be signed. */
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+ neon_two_same (0, 1, et.size / 2);
+}
+
+static void
+do_neon_rshift_sat_narrow (void)
+{
+ /* FIXME: Types for narrowing. If operands are signed, results can be signed
+ or unsigned. If operands are unsigned, results must also be unsigned. */
+ struct neon_type_el et = neon_check_type (2, NS_DQI,
+ N_EQK | N_HLF, N_SU_16_64 | N_KEY);
+ int imm = inst.operands[2].imm;
+ /* This gets the bounds check, size encoding and immediate bits calculation
+ right. */
+ et.size /= 2;
+
+ /* VQ{R}SHRN.I<size> <Dd>, <Qm>, #0 is a synonym for
+ VQMOVN.I<size> <Dd>, <Qm>. */
+ if (imm == 0)
+ {
+ inst.operands[2].present = 0;
+ inst.instruction = N_MNEM_vqmovn;
+ do_neon_qmovn ();
+ return;
+ }
+
+ constraint (imm < 1 || (unsigned)imm > et.size,
+ _("immediate out of range"));
+ neon_imm_shift (TRUE, et.type == NT_unsigned, 0, et, et.size - imm);
+}
+
+static void
+do_neon_rshift_sat_narrow_u (void)
+{
+ /* FIXME: Types for narrowing. If operands are signed, results can be signed
+ or unsigned. If operands are unsigned, results must also be unsigned. */
+ struct neon_type_el et = neon_check_type (2, NS_DQI,
+ N_EQK | N_HLF | N_UNS, N_S16 | N_S32 | N_S64 | N_KEY);
+ int imm = inst.operands[2].imm;
+ /* This gets the bounds check, size encoding and immediate bits calculation
+ right. */
+ et.size /= 2;
+
+ /* VQSHRUN.I<size> <Dd>, <Qm>, #0 is a synonym for
+ VQMOVUN.I<size> <Dd>, <Qm>. */
+ if (imm == 0)
+ {
+ inst.operands[2].present = 0;
+ inst.instruction = N_MNEM_vqmovun;
+ do_neon_qmovun ();
+ return;
+ }
+
+ constraint (imm < 1 || (unsigned)imm > et.size,
+ _("immediate out of range"));
+ /* FIXME: The manual is kind of unclear about what value U should have in
+ VQ{R}SHRUN instructions, but U=0, op=0 definitely encodes VRSHR, so it
+ must be 1. */
+ neon_imm_shift (TRUE, 1, 0, et, et.size - imm);
+}
+
+static void
+do_neon_movn (void)
+{
+ struct neon_type_el et = neon_check_type (2, NS_DQ,
+ N_EQK | N_HLF, N_I16 | N_I32 | N_I64 | N_KEY);
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+ neon_two_same (0, 1, et.size / 2);
+}
+
+static void
+do_neon_rshift_narrow (void)
+{
+ struct neon_type_el et = neon_check_type (2, NS_DQI,
+ N_EQK | N_HLF, N_I16 | N_I32 | N_I64 | N_KEY);
+ int imm = inst.operands[2].imm;
+ /* This gets the bounds check, size encoding and immediate bits calculation
+ right. */
+ et.size /= 2;
+
+ /* If immediate is zero then we are a pseudo-instruction for
+ VMOVN.I<size> <Dd>, <Qm> */
+ if (imm == 0)
+ {
+ inst.operands[2].present = 0;
+ inst.instruction = N_MNEM_vmovn;
+ do_neon_movn ();
+ return;
+ }
+
+ constraint (imm < 1 || (unsigned)imm > et.size,
+ _("immediate out of range for narrowing operation"));
+ neon_imm_shift (FALSE, 0, 0, et, et.size - imm);
+}
+
+static void
+do_neon_shll (void)
+{
+ /* FIXME: Type checking when lengthening. */
+ struct neon_type_el et = neon_check_type (2, NS_QDI,
+ N_EQK | N_DBL, N_I8 | N_I16 | N_I32 | N_KEY);
+ unsigned imm = inst.operands[2].imm;
+
+ if (imm == et.size)
+ {
+ /* Maximum shift variant. */
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg);
+ inst.instruction |= HI1 (inst.operands[1].reg) << 5;
+ inst.instruction |= neon_logbits (et.size) << 18;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+ }
+ else
+ {
+ /* A more-specific type check for non-max versions. */
+ et = neon_check_type (2, NS_QDI,
+ N_EQK | N_DBL, N_SU_32 | N_KEY);
+ inst.instruction = NEON_ENC_IMMED (inst.instruction);
+ neon_imm_shift (TRUE, et.type == NT_unsigned, 0, et, imm);
+ }
+}
+
+/* Check the various types for the VCVT instruction, and return which version
+ the current instruction is. */
+
+static int
+neon_cvt_flavour (enum neon_shape rs)
+{
+#define CVT_VAR(C,X,Y) \
+ et = neon_check_type (2, rs, whole_reg | (X), whole_reg | (Y)); \
+ if (et.type != NT_invtype) \
+ { \
+ inst.error = NULL; \
+ return (C); \
+ }
+ struct neon_type_el et;
+ unsigned whole_reg = (rs == NS_FFI || rs == NS_FD || rs == NS_DF
+ || rs == NS_FF) ? N_VFP : 0;
+ /* The instruction versions which take an immediate take one register
+ argument, which is extended to the width of the full register. Thus the
+ "source" and "destination" registers must have the same width. Hack that
+ here by making the size equal to the key (wider, in this case) operand. */
+ unsigned key = (rs == NS_QQI || rs == NS_DDI || rs == NS_FFI) ? N_KEY : 0;
+
+ CVT_VAR (0, N_S32, N_F32);
+ CVT_VAR (1, N_U32, N_F32);
+ CVT_VAR (2, N_F32, N_S32);
+ CVT_VAR (3, N_F32, N_U32);
+
+ whole_reg = N_VFP;
+
+ /* VFP instructions. */
+ CVT_VAR (4, N_F32, N_F64);
+ CVT_VAR (5, N_F64, N_F32);
+ CVT_VAR (6, N_S32, N_F64 | key);
+ CVT_VAR (7, N_U32, N_F64 | key);
+ CVT_VAR (8, N_F64 | key, N_S32);
+ CVT_VAR (9, N_F64 | key, N_U32);
+ /* VFP instructions with bitshift. */
+ CVT_VAR (10, N_F32 | key, N_S16);
+ CVT_VAR (11, N_F32 | key, N_U16);
+ CVT_VAR (12, N_F64 | key, N_S16);
+ CVT_VAR (13, N_F64 | key, N_U16);
+ CVT_VAR (14, N_S16, N_F32 | key);
+ CVT_VAR (15, N_U16, N_F32 | key);
+ CVT_VAR (16, N_S16, N_F64 | key);
+ CVT_VAR (17, N_U16, N_F64 | key);
+
+ return -1;
+#undef CVT_VAR
+}
+
+/* Neon-syntax VFP conversions. */
+
+static void
+do_vfp_nsyn_cvt (enum neon_shape rs, int flavour)
+{
+ const char *opname = 0;
+
+ if (rs == NS_DDI || rs == NS_QQI || rs == NS_FFI)
+ {
+ /* Conversions with immediate bitshift. */
+ const char *enc[] =
+ {
+ "ftosls",
+ "ftouls",
+ "fsltos",
+ "fultos",
+ NULL,
+ NULL,
+ "ftosld",
+ "ftould",
+ "fsltod",
+ "fultod",
+ "fshtos",
+ "fuhtos",
+ "fshtod",
+ "fuhtod",
+ "ftoshs",
+ "ftouhs",
+ "ftoshd",
+ "ftouhd"
+ };
+
+ if (flavour >= 0 && flavour < (int) ARRAY_SIZE (enc))
+ {
+ opname = enc[flavour];
+ constraint (inst.operands[0].reg != inst.operands[1].reg,
+ _("operands 0 and 1 must be the same register"));
+ inst.operands[1] = inst.operands[2];
+ memset (&inst.operands[2], '\0', sizeof (inst.operands[2]));
+ }
+ }
+ else
+ {
+ /* Conversions without bitshift. */
+ const char *enc[] =
+ {
+ "ftosis",
+ "ftouis",
+ "fsitos",
+ "fuitos",
+ "fcvtsd",
+ "fcvtds",
+ "ftosid",
+ "ftouid",
+ "fsitod",
+ "fuitod"
+ };
+
+ if (flavour >= 0 && flavour < (int) ARRAY_SIZE (enc))
+ opname = enc[flavour];
+ }
+
+ if (opname)
+ do_vfp_nsyn_opcode (opname);
+}
+
+static void
+do_vfp_nsyn_cvtz (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_FF, NS_FD, NS_NULL);
+ int flavour = neon_cvt_flavour (rs);
+ const char *enc[] =
+ {
+ "ftosizs",
+ "ftouizs",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "ftosizd",
+ "ftouizd"
+ };
+
+ if (flavour >= 0 && flavour < (int) ARRAY_SIZE (enc) && enc[flavour])
+ do_vfp_nsyn_opcode (enc[flavour]);
+}
+
+static void
+do_neon_cvt (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDI, NS_QQI, NS_FFI, NS_DD, NS_QQ,
+ NS_FD, NS_DF, NS_FF, NS_NULL);
+ int flavour = neon_cvt_flavour (rs);
+
+ /* VFP rather than Neon conversions. */
+ if (flavour >= 4)
+ {
+ do_vfp_nsyn_cvt (rs, flavour);
+ return;
+ }
+
+ switch (rs)
+ {
+ case NS_DDI:
+ case NS_QQI:
+ {
+ if (vfp_or_neon_is_neon (NEON_CHECK_CC | NEON_CHECK_ARCH) == FAIL)
+ return;
+
+ /* Fixed-point conversion with #0 immediate is encoded as an
+ integer conversion. */
+ if (inst.operands[2].present && inst.operands[2].imm == 0)
+ goto int_encode;
+ unsigned immbits = 32 - inst.operands[2].imm;
+ unsigned enctab[] = { 0x0000100, 0x1000100, 0x0, 0x1000000 };
+ inst.instruction = NEON_ENC_IMMED (inst.instruction);
+ if (flavour != -1)
+ inst.instruction |= enctab[flavour];
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg);
+ inst.instruction |= HI1 (inst.operands[1].reg) << 5;
+ inst.instruction |= neon_quad (rs) << 6;
+ inst.instruction |= 1 << 21;
+ inst.instruction |= immbits << 16;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+ }
+ break;
+
+ case NS_DD:
+ case NS_QQ:
+ int_encode:
+ {
+ unsigned enctab[] = { 0x100, 0x180, 0x0, 0x080 };
+
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+
+ if (vfp_or_neon_is_neon (NEON_CHECK_CC | NEON_CHECK_ARCH) == FAIL)
+ return;
+
+ if (flavour != -1)
+ inst.instruction |= enctab[flavour];
+
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg);
+ inst.instruction |= HI1 (inst.operands[1].reg) << 5;
+ inst.instruction |= neon_quad (rs) << 6;
+ inst.instruction |= 2 << 18;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+ }
+ break;
+
+ default:
+ /* Some VFP conversions go here (s32 <-> f32, u32 <-> f32). */
+ do_vfp_nsyn_cvt (rs, flavour);
+ }
+}
+
+static void
+neon_move_immediate (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DI, NS_QI, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_I8 | N_I16 | N_I32 | N_I64 | N_F32 | N_KEY, N_EQK);
+ unsigned immlo, immhi = 0, immbits;
+ int op, cmode, float_p;
+
+ constraint (et.type == NT_invtype,
+ _("operand size must be specified for immediate VMOV"));
+
+ /* We start out as an MVN instruction if OP = 1, MOV otherwise. */
+ op = (inst.instruction & (1 << 5)) != 0;
+
+ immlo = inst.operands[1].imm;
+ if (inst.operands[1].regisimm)
+ immhi = inst.operands[1].reg;
+
+ constraint (et.size < 32 && (immlo & ~((1 << et.size) - 1)) != 0,
+ _("immediate has bits set outside the operand size"));
+
+ float_p = inst.operands[1].immisfloat;
+
+ if ((cmode = neon_cmode_for_move_imm (immlo, immhi, float_p, &immbits, &op,
+ et.size, et.type)) == FAIL)
+ {
+ /* Invert relevant bits only. */
+ neon_invert_size (&immlo, &immhi, et.size);
+ /* Flip from VMOV/VMVN to VMVN/VMOV. Some immediate types are unavailable
+ with one or the other; those cases are caught by
+ neon_cmode_for_move_imm. */
+ op = !op;
+ if ((cmode = neon_cmode_for_move_imm (immlo, immhi, float_p, &immbits,
+ &op, et.size, et.type)) == FAIL)
+ {
+ first_error (_("immediate out of range"));
+ return;
+ }
+ }
+
+ inst.instruction &= ~(1 << 5);
+ inst.instruction |= op << 5;
+
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= neon_quad (rs) << 6;
+ inst.instruction |= cmode << 8;
+
+ neon_write_immbits (immbits);
+}
+
+static void
+do_neon_mvn (void)
+{
+ if (inst.operands[1].isreg)
+ {
+ enum neon_shape rs = neon_select_shape (NS_DD, NS_QQ, NS_NULL);
+
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg);
+ inst.instruction |= HI1 (inst.operands[1].reg) << 5;
+ inst.instruction |= neon_quad (rs) << 6;
+ }
+ else
+ {
+ inst.instruction = NEON_ENC_IMMED (inst.instruction);
+ neon_move_immediate ();
+ }
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+}
+
+/* Encode instructions of form:
+
+ |28/24|23|22|21 20|19 16|15 12|11 8|7|6|5|4|3 0|
+ | U |x |D |size | Rn | Rd |x x x x|N|x|M|x| Rm |
+
+*/
+
+static void
+neon_mixed_length (struct neon_type_el et, unsigned size)
+{
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg) << 16;
+ inst.instruction |= HI1 (inst.operands[1].reg) << 7;
+ inst.instruction |= LOW4 (inst.operands[2].reg);
+ inst.instruction |= HI1 (inst.operands[2].reg) << 5;
+ inst.instruction |= (et.type == NT_unsigned) << 24;
+ inst.instruction |= neon_logbits (size) << 20;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+}
+
+static void
+do_neon_dyadic_long (void)
+{
+ /* FIXME: Type checking for lengthening op. */
+ struct neon_type_el et = neon_check_type (3, NS_QDD,
+ N_EQK | N_DBL, N_EQK, N_SU_32 | N_KEY);
+ neon_mixed_length (et, et.size);
+}
+
+static void
+do_neon_abal (void)
+{
+ struct neon_type_el et = neon_check_type (3, NS_QDD,
+ N_EQK | N_INT | N_DBL, N_EQK, N_SU_32 | N_KEY);
+ neon_mixed_length (et, et.size);
+}
+
+static void
+neon_mac_reg_scalar_long (unsigned regtypes, unsigned scalartypes)
+{
+ if (inst.operands[2].isscalar)
+ {
+ struct neon_type_el et = neon_check_type (3, NS_QDS,
+ N_EQK | N_DBL, N_EQK, regtypes | N_KEY);
+ inst.instruction = NEON_ENC_SCALAR (inst.instruction);
+ neon_mul_mac (et, et.type == NT_unsigned);
+ }
+ else
+ {
+ struct neon_type_el et = neon_check_type (3, NS_QDD,
+ N_EQK | N_DBL, N_EQK, scalartypes | N_KEY);
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+ neon_mixed_length (et, et.size);
+ }
+}
+
+static void
+do_neon_mac_maybe_scalar_long (void)
+{
+ neon_mac_reg_scalar_long (N_S16 | N_S32 | N_U16 | N_U32, N_SU_32);
+}
+
+static void
+do_neon_dyadic_wide (void)
+{
+ struct neon_type_el et = neon_check_type (3, NS_QQD,
+ N_EQK | N_DBL, N_EQK | N_DBL, N_SU_32 | N_KEY);
+ neon_mixed_length (et, et.size);
+}
+
+static void
+do_neon_dyadic_narrow (void)
+{
+ struct neon_type_el et = neon_check_type (3, NS_QDD,
+ N_EQK | N_DBL, N_EQK, N_I16 | N_I32 | N_I64 | N_KEY);
+ /* Operand sign is unimportant, and the U bit is part of the opcode,
+ so force the operand type to integer. */
+ et.type = NT_integer;
+ neon_mixed_length (et, et.size / 2);
+}
+
+static void
+do_neon_mul_sat_scalar_long (void)
+{
+ neon_mac_reg_scalar_long (N_S16 | N_S32, N_S16 | N_S32);
+}
+
+static void
+do_neon_vmull (void)
+{
+ if (inst.operands[2].isscalar)
+ do_neon_mac_maybe_scalar_long ();
+ else
+ {
+ struct neon_type_el et = neon_check_type (3, NS_QDD,
+ N_EQK | N_DBL, N_EQK, N_SU_32 | N_P8 | N_KEY);
+ if (et.type == NT_poly)
+ inst.instruction = NEON_ENC_POLY (inst.instruction);
+ else
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+ /* For polynomial encoding, size field must be 0b00 and the U bit must be
+ zero. Should be OK as-is. */
+ neon_mixed_length (et, et.size);
+ }
+}
+
+static void
+do_neon_ext (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDDI, NS_QQQI, NS_NULL);
+ struct neon_type_el et = neon_check_type (3, rs,
+ N_EQK, N_EQK, N_8 | N_16 | N_32 | N_64 | N_KEY);
+ unsigned imm = (inst.operands[3].imm * et.size) / 8;
+ constraint (imm >= (neon_quad (rs) ? 16 : 8), _("shift out of range"));
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg) << 16;
+ inst.instruction |= HI1 (inst.operands[1].reg) << 7;
+ inst.instruction |= LOW4 (inst.operands[2].reg);
+ inst.instruction |= HI1 (inst.operands[2].reg) << 5;
+ inst.instruction |= neon_quad (rs) << 6;
+ inst.instruction |= imm << 8;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+}
+
+static void
+do_neon_rev (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DD, NS_QQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_EQK, N_8 | N_16 | N_32 | N_KEY);
+ unsigned op = (inst.instruction >> 7) & 3;
+ /* N (width of reversed regions) is encoded as part of the bitmask. We
+ extract it here to check the elements to be reversed are smaller.
+ Otherwise we'd get a reserved instruction. */
+ unsigned elsize = (op == 2) ? 16 : (op == 1) ? 32 : (op == 0) ? 64 : 0;
+ assert (elsize != 0);
+ constraint (et.size >= elsize,
+ _("elements must be smaller than reversal region"));
+ neon_two_same (neon_quad (rs), 1, et.size);
+}
+
+static void
+do_neon_dup (void)
+{
+ if (inst.operands[1].isscalar)
+ {
+ enum neon_shape rs = neon_select_shape (NS_DS, NS_QS, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_EQK, N_8 | N_16 | N_32 | N_KEY);
+ unsigned sizebits = et.size >> 3;
+ unsigned dm = NEON_SCALAR_REG (inst.operands[1].reg);
+ int logsize = neon_logbits (et.size);
+ unsigned x = NEON_SCALAR_INDEX (inst.operands[1].reg) << logsize;
+
+ if (vfp_or_neon_is_neon (NEON_CHECK_CC) == FAIL)
+ return;
+
+ inst.instruction = NEON_ENC_SCALAR (inst.instruction);
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (dm);
+ inst.instruction |= HI1 (dm) << 5;
+ inst.instruction |= neon_quad (rs) << 6;
+ inst.instruction |= x << 17;
+ inst.instruction |= sizebits << 16;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+ }
+ else
+ {
+ enum neon_shape rs = neon_select_shape (NS_DR, NS_QR, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_8 | N_16 | N_32 | N_KEY, N_EQK);
+ /* Duplicate ARM register to lanes of vector. */
+ inst.instruction = NEON_ENC_ARMREG (inst.instruction);
+ switch (et.size)
+ {
+ case 8: inst.instruction |= 0x400000; break;
+ case 16: inst.instruction |= 0x000020; break;
+ case 32: inst.instruction |= 0x000000; break;
+ default: break;
+ }
+ inst.instruction |= LOW4 (inst.operands[1].reg) << 12;
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 16;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 7;
+ inst.instruction |= neon_quad (rs) << 21;
+ /* The encoding for this instruction is identical for the ARM and Thumb
+ variants, except for the condition field. */
+ do_vfp_cond_or_thumb ();
+ }
+}
+
+/* VMOV has particularly many variations. It can be one of:
+ 0. VMOV<c><q> <Qd>, <Qm>
+ 1. VMOV<c><q> <Dd>, <Dm>
+ (Register operations, which are VORR with Rm = Rn.)
+ 2. VMOV<c><q>.<dt> <Qd>, #<imm>
+ 3. VMOV<c><q>.<dt> <Dd>, #<imm>
+ (Immediate loads.)
+ 4. VMOV<c><q>.<size> <Dn[x]>, <Rd>
+ (ARM register to scalar.)
+ 5. VMOV<c><q> <Dm>, <Rd>, <Rn>
+ (Two ARM registers to vector.)
+ 6. VMOV<c><q>.<dt> <Rd>, <Dn[x]>
+ (Scalar to ARM register.)
+ 7. VMOV<c><q> <Rd>, <Rn>, <Dm>
+ (Vector to two ARM registers.)
+ 8. VMOV.F32 <Sd>, <Sm>
+ 9. VMOV.F64 <Dd>, <Dm>
+ (VFP register moves.)
+ 10. VMOV.F32 <Sd>, #imm
+ 11. VMOV.F64 <Dd>, #imm
+ (VFP float immediate load.)
+ 12. VMOV <Rd>, <Sm>
+ (VFP single to ARM reg.)
+ 13. VMOV <Sd>, <Rm>
+ (ARM reg to VFP single.)
+ 14. VMOV <Rd>, <Re>, <Sn>, <Sm>
+ (Two ARM regs to two VFP singles.)
+ 15. VMOV <Sd>, <Se>, <Rn>, <Rm>
+ (Two VFP singles to two ARM regs.)
+
+ These cases can be disambiguated using neon_select_shape, except cases 1/9
+ and 3/11 which depend on the operand type too.
+
+ All the encoded bits are hardcoded by this function.
+
+ Cases 4, 6 may be used with VFPv1 and above (only 32-bit transfers!).
+ Cases 5, 7 may be used with VFPv2 and above.
+
+ FIXME: Some of the checking may be a bit sloppy (in a couple of cases you
+ can specify a type where it doesn't make sense to, and is ignored).
+*/
+
+static void
+do_neon_mov (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_RRFF, NS_FFRR, NS_DRR, NS_RRD,
+ NS_QQ, NS_DD, NS_QI, NS_DI, NS_SR, NS_RS, NS_FF, NS_FI, NS_RF, NS_FR,
+ NS_NULL);
+ struct neon_type_el et;
+ const char *ldconst = 0;
+
+ switch (rs)
+ {
+ case NS_DD: /* case 1/9. */
+ et = neon_check_type (2, rs, N_EQK, N_F64 | N_KEY);
+ /* It is not an error here if no type is given. */
+ inst.error = NULL;
+ if (et.type == NT_float && et.size == 64)
+ {
+ do_vfp_nsyn_opcode ("fcpyd");
+ break;
+ }
+ /* fall through. */
+
+ case NS_QQ: /* case 0/1. */
+ {
+ if (vfp_or_neon_is_neon (NEON_CHECK_CC | NEON_CHECK_ARCH) == FAIL)
+ return;
+ /* The architecture manual I have doesn't explicitly state which
+ value the U bit should have for register->register moves, but
+ the equivalent VORR instruction has U = 0, so do that. */
+ inst.instruction = 0x0200110;
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg);
+ inst.instruction |= HI1 (inst.operands[1].reg) << 5;
+ inst.instruction |= LOW4 (inst.operands[1].reg) << 16;
+ inst.instruction |= HI1 (inst.operands[1].reg) << 7;
+ inst.instruction |= neon_quad (rs) << 6;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+ }
+ break;
+
+ case NS_DI: /* case 3/11. */
+ et = neon_check_type (2, rs, N_EQK, N_F64 | N_KEY);
+ inst.error = NULL;
+ if (et.type == NT_float && et.size == 64)
+ {
+ /* case 11 (fconstd). */
+ ldconst = "fconstd";
+ goto encode_fconstd;
+ }
+ /* fall through. */
+
+ case NS_QI: /* case 2/3. */
+ if (vfp_or_neon_is_neon (NEON_CHECK_CC | NEON_CHECK_ARCH) == FAIL)
+ return;
+ inst.instruction = 0x0800010;
+ neon_move_immediate ();
+ inst.instruction = neon_dp_fixup (inst.instruction);
+ break;
+
+ case NS_SR: /* case 4. */
+ {
+ unsigned bcdebits = 0;
+ struct neon_type_el et = neon_check_type (2, NS_NULL,
+ N_8 | N_16 | N_32 | N_KEY, N_EQK);
+ int logsize = neon_logbits (et.size);
+ unsigned dn = NEON_SCALAR_REG (inst.operands[0].reg);
+ unsigned x = NEON_SCALAR_INDEX (inst.operands[0].reg);
+
+ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_v1),
+ _(BAD_FPU));
+ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_neon_ext_v1)
+ && et.size != 32, _(BAD_FPU));
+ constraint (et.type == NT_invtype, _("bad type for scalar"));
+ constraint (x >= 64 / et.size, _("scalar index out of range"));
+
+ switch (et.size)
+ {
+ case 8: bcdebits = 0x8; break;
+ case 16: bcdebits = 0x1; break;
+ case 32: bcdebits = 0x0; break;
+ default: ;
+ }
+
+ bcdebits |= x << logsize;
+
+ inst.instruction = 0xe000b10;
+ do_vfp_cond_or_thumb ();
+ inst.instruction |= LOW4 (dn) << 16;
+ inst.instruction |= HI1 (dn) << 7;
+ inst.instruction |= inst.operands[1].reg << 12;
+ inst.instruction |= (bcdebits & 3) << 5;
+ inst.instruction |= (bcdebits >> 2) << 21;
+ }
+ break;
+
+ case NS_DRR: /* case 5 (fmdrr). */
+ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_v2),
+ _(BAD_FPU));
+
+ inst.instruction = 0xc400b10;
+ do_vfp_cond_or_thumb ();
+ inst.instruction |= LOW4 (inst.operands[0].reg);
+ inst.instruction |= HI1 (inst.operands[0].reg) << 5;
+ inst.instruction |= inst.operands[1].reg << 12;
+ inst.instruction |= inst.operands[2].reg << 16;
+ break;
+
+ case NS_RS: /* case 6. */
+ {
+ struct neon_type_el et = neon_check_type (2, NS_NULL,
+ N_EQK, N_S8 | N_S16 | N_U8 | N_U16 | N_32 | N_KEY);
+ unsigned logsize = neon_logbits (et.size);
+ unsigned dn = NEON_SCALAR_REG (inst.operands[1].reg);
+ unsigned x = NEON_SCALAR_INDEX (inst.operands[1].reg);
+ unsigned abcdebits = 0;
+
+ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_v1),
+ _(BAD_FPU));
+ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_neon_ext_v1)
+ && et.size != 32, _(BAD_FPU));
+ constraint (et.type == NT_invtype, _("bad type for scalar"));
+ constraint (x >= 64 / et.size, _("scalar index out of range"));
+
+ switch (et.size)
+ {
+ case 8: abcdebits = (et.type == NT_signed) ? 0x08 : 0x18; break;
+ case 16: abcdebits = (et.type == NT_signed) ? 0x01 : 0x11; break;
+ case 32: abcdebits = 0x00; break;
+ default: ;
+ }
+
+ abcdebits |= x << logsize;
+ inst.instruction = 0xe100b10;
+ do_vfp_cond_or_thumb ();
+ inst.instruction |= LOW4 (dn) << 16;
+ inst.instruction |= HI1 (dn) << 7;
+ inst.instruction |= inst.operands[0].reg << 12;
+ inst.instruction |= (abcdebits & 3) << 5;
+ inst.instruction |= (abcdebits >> 2) << 21;
+ }
+ break;
+
+ case NS_RRD: /* case 7 (fmrrd). */
+ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_v2),
+ _(BAD_FPU));
+
+ inst.instruction = 0xc500b10;
+ do_vfp_cond_or_thumb ();
+ inst.instruction |= inst.operands[0].reg << 12;
+ inst.instruction |= inst.operands[1].reg << 16;
+ inst.instruction |= LOW4 (inst.operands[2].reg);
+ inst.instruction |= HI1 (inst.operands[2].reg) << 5;
+ break;
+
+ case NS_FF: /* case 8 (fcpys). */
+ do_vfp_nsyn_opcode ("fcpys");
+ break;
+
+ case NS_FI: /* case 10 (fconsts). */
+ ldconst = "fconsts";
+ encode_fconstd:
+ if (is_quarter_float (inst.operands[1].imm))
+ {
+ inst.operands[1].imm = neon_qfloat_bits (inst.operands[1].imm);
+ do_vfp_nsyn_opcode (ldconst);
+ }
+ else
+ first_error (_("immediate out of range"));
+ break;
+
+ case NS_RF: /* case 12 (fmrs). */
+ do_vfp_nsyn_opcode ("fmrs");
+ break;
+
+ case NS_FR: /* case 13 (fmsr). */
+ do_vfp_nsyn_opcode ("fmsr");
+ break;
+
+ /* The encoders for the fmrrs and fmsrr instructions expect three operands
+ (one of which is a list), but we have parsed four. Do some fiddling to
+ make the operands what do_vfp_reg2_from_sp2 and do_vfp_sp2_from_reg2
+ expect. */
+ case NS_RRFF: /* case 14 (fmrrs). */
+ constraint (inst.operands[3].reg != inst.operands[2].reg + 1,
+ _("VFP registers must be adjacent"));
+ inst.operands[2].imm = 2;
+ memset (&inst.operands[3], '\0', sizeof (inst.operands[3]));
+ do_vfp_nsyn_opcode ("fmrrs");
+ break;
+
+ case NS_FFRR: /* case 15 (fmsrr). */
+ constraint (inst.operands[1].reg != inst.operands[0].reg + 1,
+ _("VFP registers must be adjacent"));
+ inst.operands[1] = inst.operands[2];
+ inst.operands[2] = inst.operands[3];
+ inst.operands[0].imm = 2;
+ memset (&inst.operands[3], '\0', sizeof (inst.operands[3]));
+ do_vfp_nsyn_opcode ("fmsrr");
+ break;
+
+ default:
+ abort ();
+ }
+}
+
+static void
+do_neon_rshift_round_imm (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DDI, NS_QQI, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs, N_EQK, N_SU_ALL | N_KEY);
+ int imm = inst.operands[2].imm;
+
+ /* imm == 0 case is encoded as VMOV for V{R}SHR. */
+ if (imm == 0)
+ {
+ inst.operands[2].present = 0;
+ do_neon_mov ();
+ return;
+ }
+
+ constraint (imm < 1 || (unsigned)imm > et.size,
+ _("immediate out of range for shift"));
+ neon_imm_shift (TRUE, et.type == NT_unsigned, neon_quad (rs), et,
+ et.size - imm);
+}
+
+static void
+do_neon_movl (void)
+{
+ struct neon_type_el et = neon_check_type (2, NS_QD,
+ N_EQK | N_DBL, N_SU_32 | N_KEY);
+ unsigned sizebits = et.size >> 3;
+ inst.instruction |= sizebits << 19;
+ neon_two_same (0, et.type == NT_unsigned, -1);
+}
+
+static void
+do_neon_trn (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DD, NS_QQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_EQK, N_8 | N_16 | N_32 | N_KEY);
+ inst.instruction = NEON_ENC_INTEGER (inst.instruction);
+ neon_two_same (neon_quad (rs), 1, et.size);
+}
+
+static void
+do_neon_zip_uzp (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DD, NS_QQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_EQK, N_8 | N_16 | N_32 | N_KEY);
+ if (rs == NS_DD && et.size == 32)
+ {
+ /* Special case: encode as VTRN.32 <Dd>, <Dm>. */
+ inst.instruction = N_MNEM_vtrn;
+ do_neon_trn ();
+ return;
+ }
+ neon_two_same (neon_quad (rs), 1, et.size);
+}
+
+static void
+do_neon_sat_abs_neg (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DD, NS_QQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_EQK, N_S8 | N_S16 | N_S32 | N_KEY);
+ neon_two_same (neon_quad (rs), 1, et.size);
+}
+
+static void
+do_neon_pair_long (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DD, NS_QQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs, N_EQK, N_SU_32 | N_KEY);
+ /* Unsigned is encoded in OP field (bit 7) for these instruction. */
+ inst.instruction |= (et.type == NT_unsigned) << 7;
+ neon_two_same (neon_quad (rs), 1, et.size);
+}
+
+static void
+do_neon_recip_est (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DD, NS_QQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_EQK | N_FLT, N_F32 | N_U32 | N_KEY);
+ inst.instruction |= (et.type == NT_float) << 8;
+ neon_two_same (neon_quad (rs), 1, et.size);
+}
+
+static void
+do_neon_cls (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DD, NS_QQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_EQK, N_S8 | N_S16 | N_S32 | N_KEY);
+ neon_two_same (neon_quad (rs), 1, et.size);
+}
+
+static void
+do_neon_clz (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DD, NS_QQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_EQK, N_I8 | N_I16 | N_I32 | N_KEY);
+ neon_two_same (neon_quad (rs), 1, et.size);
+}
+
+static void
+do_neon_cnt (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DD, NS_QQ, NS_NULL);
+ struct neon_type_el et = neon_check_type (2, rs,
+ N_EQK | N_INT, N_8 | N_KEY);
+ neon_two_same (neon_quad (rs), 1, et.size);
+}
+
+static void
+do_neon_swp (void)
+{
+ enum neon_shape rs = neon_select_shape (NS_DD, NS_QQ, NS_NULL);
+ neon_two_same (neon_quad (rs), 1, -1);
+}
+
+static void
+do_neon_tbl_tbx (void)
+{
+ unsigned listlenbits;
+ neon_check_type (3, NS_DLD, N_EQK, N_EQK, N_8 | N_KEY);
+
+ if (inst.operands[1].imm < 1 || inst.operands[1].imm > 4)
+ {
+ first_error (_("bad list length for table lookup"));
+ return;
+ }
+
+ listlenbits = inst.operands[1].imm - 1;
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= LOW4 (inst.operands[1].reg) << 16;
+ inst.instruction |= HI1 (inst.operands[1].reg) << 7;
+ inst.instruction |= LOW4 (inst.operands[2].reg);
+ inst.instruction |= HI1 (inst.operands[2].reg) << 5;
+ inst.instruction |= listlenbits << 8;
+
+ inst.instruction = neon_dp_fixup (inst.instruction);
+}
+
+static void
+do_neon_ldm_stm (void)
+{
+ /* P, U and L bits are part of bitmask. */
+ int is_dbmode = (inst.instruction & (1 << 24)) != 0;
+ unsigned offsetbits = inst.operands[1].imm * 2;
+
+ if (inst.operands[1].issingle)
+ {
+ do_vfp_nsyn_ldm_stm (is_dbmode);
+ return;
+ }
+
+ constraint (is_dbmode && !inst.operands[0].writeback,
+ _("writeback (!) must be used for VLDMDB and VSTMDB"));
+
+ constraint (inst.operands[1].imm < 1 || inst.operands[1].imm > 16,
+ _("register list must contain at least 1 and at most 16 "
+ "registers"));
+
+ inst.instruction |= inst.operands[0].reg << 16;
+ inst.instruction |= inst.operands[0].writeback << 21;
+ inst.instruction |= LOW4 (inst.operands[1].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[1].reg) << 22;
+
+ inst.instruction |= offsetbits;
+
+ do_vfp_cond_or_thumb ();
+}
+
+static void
+do_neon_ldr_str (void)
+{
+ int is_ldr = (inst.instruction & (1 << 20)) != 0;
+
+ if (inst.operands[0].issingle)
+ {
+ if (is_ldr)
+ do_vfp_nsyn_opcode ("flds");
+ else
+ do_vfp_nsyn_opcode ("fsts");
+ }
+ else
+ {
+ if (is_ldr)
+ do_vfp_nsyn_opcode ("fldd");
+ else
+ do_vfp_nsyn_opcode ("fstd");
+ }
+}
+
+/* "interleave" version also handles non-interleaving register VLD1/VST1
+ instructions. */
+
+static void
+do_neon_ld_st_interleave (void)
+{
+ struct neon_type_el et = neon_check_type (1, NS_NULL,
+ N_8 | N_16 | N_32 | N_64);
+ unsigned alignbits = 0;
+ unsigned idx;
+ /* The bits in this table go:
+ 0: register stride of one (0) or two (1)
+ 1,2: register list length, minus one (1, 2, 3, 4).
+ 3,4: <n> in instruction type, minus one (VLD<n> / VST<n>).
+ We use -1 for invalid entries. */
+ const int typetable[] =
+ {
+ 0x7, -1, 0xa, -1, 0x6, -1, 0x2, -1, /* VLD1 / VST1. */
+ -1, -1, 0x8, 0x9, -1, -1, 0x3, -1, /* VLD2 / VST2. */
+ -1, -1, -1, -1, 0x4, 0x5, -1, -1, /* VLD3 / VST3. */
+ -1, -1, -1, -1, -1, -1, 0x0, 0x1 /* VLD4 / VST4. */
+ };
+ int typebits;
+
+ if (et.type == NT_invtype)
+ return;
+
+ if (inst.operands[1].immisalign)
+ switch (inst.operands[1].imm >> 8)
+ {
+ case 64: alignbits = 1; break;
+ case 128:
+ if (NEON_REGLIST_LENGTH (inst.operands[0].imm) == 3)
+ goto bad_alignment;
+ alignbits = 2;
+ break;
+ case 256:
+ if (NEON_REGLIST_LENGTH (inst.operands[0].imm) == 3)
+ goto bad_alignment;
+ alignbits = 3;
+ break;
+ default:
+ bad_alignment:
+ first_error (_("bad alignment"));
+ return;
+ }
+
+ inst.instruction |= alignbits << 4;
+ inst.instruction |= neon_logbits (et.size) << 6;
+
+ /* Bits [4:6] of the immediate in a list specifier encode register stride
+ (minus 1) in bit 4, and list length in bits [5:6]. We put the <n> of
+ VLD<n>/VST<n> in bits [9:8] of the initial bitmask. Suck it out here, look
+ up the right value for "type" in a table based on this value and the given
+ list style, then stick it back. */
+ idx = ((inst.operands[0].imm >> 4) & 7)
+ | (((inst.instruction >> 8) & 3) << 3);
+
+ typebits = typetable[idx];
+
+ constraint (typebits == -1, _("bad list type for instruction"));
+
+ inst.instruction &= ~0xf00;
+ inst.instruction |= typebits << 8;
+}
+
+/* Check alignment is valid for do_neon_ld_st_lane and do_neon_ld_dup.
+ *DO_ALIGN is set to 1 if the relevant alignment bit should be set, 0
+ otherwise. The variable arguments are a list of pairs of legal (size, align)
+ values, terminated with -1. */
+
+static int
+neon_alignment_bit (int size, int align, int *do_align, ...)
+{
+ va_list ap;
+ int result = FAIL, thissize, thisalign;
+
+ if (!inst.operands[1].immisalign)
+ {
+ *do_align = 0;
+ return SUCCESS;
+ }
+
+ va_start (ap, do_align);
+
+ do
+ {
+ thissize = va_arg (ap, int);
+ if (thissize == -1)
+ break;
+ thisalign = va_arg (ap, int);
+
+ if (size == thissize && align == thisalign)
+ result = SUCCESS;
+ }
+ while (result != SUCCESS);
+
+ va_end (ap);
+
+ if (result == SUCCESS)
+ *do_align = 1;
+ else
+ first_error (_("unsupported alignment for instruction"));
+
+ return result;
+}
+
+static void
+do_neon_ld_st_lane (void)
+{
+ struct neon_type_el et = neon_check_type (1, NS_NULL, N_8 | N_16 | N_32);
+ int align_good, do_align = 0;
+ int logsize = neon_logbits (et.size);
+ int align = inst.operands[1].imm >> 8;
+ int n = (inst.instruction >> 8) & 3;
+ int max_el = 64 / et.size;
+
+ if (et.type == NT_invtype)
+ return;
+
+ constraint (NEON_REGLIST_LENGTH (inst.operands[0].imm) != n + 1,
+ _("bad list length"));
+ constraint (NEON_LANE (inst.operands[0].imm) >= max_el,
+ _("scalar index out of range"));
+ constraint (n != 0 && NEON_REG_STRIDE (inst.operands[0].imm) == 2
+ && et.size == 8,
+ _("stride of 2 unavailable when element size is 8"));
+
+ switch (n)
+ {
+ case 0: /* VLD1 / VST1. */
+ align_good = neon_alignment_bit (et.size, align, &do_align, 16, 16,
+ 32, 32, -1);
+ if (align_good == FAIL)
+ return;
+ if (do_align)
+ {
+ unsigned alignbits = 0;
+ switch (et.size)
+ {
+ case 16: alignbits = 0x1; break;
+ case 32: alignbits = 0x3; break;
+ default: ;
+ }
+ inst.instruction |= alignbits << 4;
+ }
+ break;
+
+ case 1: /* VLD2 / VST2. */
+ align_good = neon_alignment_bit (et.size, align, &do_align, 8, 16, 16, 32,
+ 32, 64, -1);
+ if (align_good == FAIL)
+ return;
+ if (do_align)
+ inst.instruction |= 1 << 4;
+ break;
+
+ case 2: /* VLD3 / VST3. */
+ constraint (inst.operands[1].immisalign,
+ _("can't use alignment with this instruction"));
+ break;
+
+ case 3: /* VLD4 / VST4. */
+ align_good = neon_alignment_bit (et.size, align, &do_align, 8, 32,
+ 16, 64, 32, 64, 32, 128, -1);
+ if (align_good == FAIL)
+ return;
+ if (do_align)
+ {
+ unsigned alignbits = 0;
+ switch (et.size)
+ {
+ case 8: alignbits = 0x1; break;
+ case 16: alignbits = 0x1; break;
+ case 32: alignbits = (align == 64) ? 0x1 : 0x2; break;
+ default: ;
+ }
+ inst.instruction |= alignbits << 4;
+ }
+ break;
+
+ default: ;
+ }
+
+ /* Reg stride of 2 is encoded in bit 5 when size==16, bit 6 when size==32. */
+ if (n != 0 && NEON_REG_STRIDE (inst.operands[0].imm) == 2)
+ inst.instruction |= 1 << (4 + logsize);
+
+ inst.instruction |= NEON_LANE (inst.operands[0].imm) << (logsize + 5);
+ inst.instruction |= logsize << 10;
+}
+
+/* Encode single n-element structure to all lanes VLD<n> instructions. */
+
+static void
+do_neon_ld_dup (void)
+{
+ struct neon_type_el et = neon_check_type (1, NS_NULL, N_8 | N_16 | N_32);
+ int align_good, do_align = 0;
+
+ if (et.type == NT_invtype)
+ return;
+
+ switch ((inst.instruction >> 8) & 3)
+ {
+ case 0: /* VLD1. */
+ assert (NEON_REG_STRIDE (inst.operands[0].imm) != 2);
+ align_good = neon_alignment_bit (et.size, inst.operands[1].imm >> 8,
+ &do_align, 16, 16, 32, 32, -1);
+ if (align_good == FAIL)
+ return;
+ switch (NEON_REGLIST_LENGTH (inst.operands[0].imm))
+ {
+ case 1: break;
+ case 2: inst.instruction |= 1 << 5; break;
+ default: first_error (_("bad list length")); return;
+ }
+ inst.instruction |= neon_logbits (et.size) << 6;
+ break;
+
+ case 1: /* VLD2. */
+ align_good = neon_alignment_bit (et.size, inst.operands[1].imm >> 8,
+ &do_align, 8, 16, 16, 32, 32, 64, -1);
+ if (align_good == FAIL)
+ return;
+ constraint (NEON_REGLIST_LENGTH (inst.operands[0].imm) != 2,
+ _("bad list length"));
+ if (NEON_REG_STRIDE (inst.operands[0].imm) == 2)
+ inst.instruction |= 1 << 5;
+ inst.instruction |= neon_logbits (et.size) << 6;
+ break;
+
+ case 2: /* VLD3. */
+ constraint (inst.operands[1].immisalign,
+ _("can't use alignment with this instruction"));
+ constraint (NEON_REGLIST_LENGTH (inst.operands[0].imm) != 3,
+ _("bad list length"));
+ if (NEON_REG_STRIDE (inst.operands[0].imm) == 2)
+ inst.instruction |= 1 << 5;
+ inst.instruction |= neon_logbits (et.size) << 6;
+ break;
+
+ case 3: /* VLD4. */
+ {
+ int align = inst.operands[1].imm >> 8;
+ align_good = neon_alignment_bit (et.size, align, &do_align, 8, 32,
+ 16, 64, 32, 64, 32, 128, -1);
+ if (align_good == FAIL)
+ return;
+ constraint (NEON_REGLIST_LENGTH (inst.operands[0].imm) != 4,
+ _("bad list length"));
+ if (NEON_REG_STRIDE (inst.operands[0].imm) == 2)
+ inst.instruction |= 1 << 5;
+ if (et.size == 32 && align == 128)
+ inst.instruction |= 0x3 << 6;
+ else
+ inst.instruction |= neon_logbits (et.size) << 6;
+ }
+ break;
+
+ default: ;
+ }
+
+ inst.instruction |= do_align << 4;
+}
+
+/* Disambiguate VLD<n> and VST<n> instructions, and fill in common bits (those
+ apart from bits [11:4]. */
+
+static void
+do_neon_ldx_stx (void)
+{
+ switch (NEON_LANE (inst.operands[0].imm))
+ {
+ case NEON_INTERLEAVE_LANES:
+ inst.instruction = NEON_ENC_INTERLV (inst.instruction);
+ do_neon_ld_st_interleave ();
+ break;
+
+ case NEON_ALL_LANES:
+ inst.instruction = NEON_ENC_DUP (inst.instruction);
+ do_neon_ld_dup ();
+ break;
+
+ default:
+ inst.instruction = NEON_ENC_LANE (inst.instruction);
+ do_neon_ld_st_lane ();
+ }
+
+ /* L bit comes from bit mask. */
+ inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
+ inst.instruction |= HI1 (inst.operands[0].reg) << 22;
+ inst.instruction |= inst.operands[1].reg << 16;
+
+ if (inst.operands[1].postind)
+ {
+ int postreg = inst.operands[1].imm & 0xf;
+ constraint (!inst.operands[1].immisreg,
+ _("post-index must be a register"));
+ constraint (postreg == 0xd || postreg == 0xf,
+ _("bad register for post-index"));
+ inst.instruction |= postreg;
+ }
+ else if (inst.operands[1].writeback)
+ {
+ inst.instruction |= 0xd;
+ }
+ else
+ inst.instruction |= 0xf;
+
+ if (thumb_mode)
+ inst.instruction |= 0xf9000000;
+ else
+ inst.instruction |= 0xf4000000;
+}
+
/* Overall per-instruction processing. */
@@ -8045,11 +13785,9 @@ output_relax_insn (void)
symbolS *sym;
int offset;
-#ifdef OBJ_ELF
/* The size of the instruction is unknown, so tie the debug info to the
start of the instruction. */
dwarf2_emit_insn (0);
-#endif
switch (inst.reloc.exp.X_op)
{
@@ -8117,9 +13855,7 @@ output_inst (const char * str)
inst.size, & inst.reloc.exp, inst.reloc.pc_rel,
inst.reloc.type);
-#ifdef OBJ_ELF
dwarf2_emit_insn (inst.size);
-#endif
}
/* Tag values used in struct asm_opcode's tag field. */
@@ -8130,9 +13866,14 @@ enum opcode_tag
OT_unconditionalF, /* Instruction cannot be conditionalized
and carries 0xF in its ARM condition field. */
OT_csuffix, /* Instruction takes a conditional suffix. */
+ OT_csuffixF, /* Some forms of the instruction take a conditional
+ suffix, others place 0xF where the condition field
+ would be. */
OT_cinfix3, /* Instruction takes a conditional infix,
beginning at character index 3. (In
unified mode, it becomes a suffix.) */
+ OT_cinfix3_deprecated, /* The same as OT_cinfix3. This is used for
+ tsts, cmps, cmns, and teqs. */
OT_cinfix3_legacy, /* Legacy instruction takes a conditional infix at
character index 3, even in unified mode. Used for
legacy instructions where suffix and infix forms
@@ -8211,27 +13952,46 @@ opcode_lookup (char **str)
const struct asm_opcode *opcode;
const struct asm_cond *cond;
char save[2];
+ bfd_boolean neon_supported;
+
+ neon_supported = ARM_CPU_HAS_FEATURE (cpu_variant, fpu_neon_ext_v1);
/* Scan up to the end of the mnemonic, which must end in white space,
- '.' (in unified mode only), or end of string. */
+ '.' (in unified mode, or for Neon instructions), or end of string. */
for (base = end = *str; *end != '\0'; end++)
- if (*end == ' ' || (unified_syntax && *end == '.'))
+ if (*end == ' ' || ((unified_syntax || neon_supported) && *end == '.'))
break;
if (end == base)
return 0;
- /* Handle a possible width suffix. */
+ /* Handle a possible width suffix and/or Neon type suffix. */
if (end[0] == '.')
{
- if (end[1] == 'w' && (end[2] == ' ' || end[2] == '\0'))
+ int offset = 2;
+
+ /* The .w and .n suffixes are only valid if the unified syntax is in
+ use. */
+ if (unified_syntax && end[1] == 'w')
inst.size_req = 4;
- else if (end[1] == 'n' && (end[2] == ' ' || end[2] == '\0'))
+ else if (unified_syntax && end[1] == 'n')
inst.size_req = 2;
else
- return 0;
+ offset = 0;
+
+ inst.vectype.elems = 0;
- *str = end + 2;
+ *str = end + offset;
+
+ if (end[offset] == '.')
+ {
+ /* See if we have a Neon type suffix (possible in either unified or
+ non-unified ARM syntax mode). */
+ if (parse_neon_type (&inst.vectype, str) == FAIL)
+ return 0;
+ }
+ else if (end[offset] != '\0' && end[offset] != ' ')
+ return 0;
}
else
*str = end;
@@ -8276,12 +14036,14 @@ opcode_lookup (char **str)
break;
case OT_cinfix3:
+ case OT_cinfix3_deprecated:
case OT_odd_infix_unc:
if (!unified_syntax)
return 0;
/* else fall through */
case OT_csuffix:
+ case OT_csuffixF:
case OT_csuf_or_in3:
inst.cond = cond->value;
return opcode;
@@ -8322,11 +14084,16 @@ opcode_lookup (char **str)
memmove (affix + 2, affix, (end - affix) - 2);
memcpy (affix, save, 2);
- if (opcode && (opcode->tag == OT_cinfix3 || opcode->tag == OT_csuf_or_in3
- || opcode->tag == OT_cinfix3_legacy))
+ if (opcode
+ && (opcode->tag == OT_cinfix3
+ || opcode->tag == OT_cinfix3_deprecated
+ || opcode->tag == OT_csuf_or_in3
+ || opcode->tag == OT_cinfix3_legacy))
{
/* step CM */
- if (unified_syntax && opcode->tag == OT_cinfix3)
+ if (unified_syntax
+ && (opcode->tag == OT_cinfix3
+ || opcode->tag == OT_cinfix3_deprecated))
as_warn (_("conditional infixes are deprecated in unified syntax"));
inst.cond = cond->value;
@@ -8357,13 +14124,21 @@ md_assemble (char *str)
if (!opcode)
{
/* It wasn't an instruction, but it might be a register alias of
- the form alias .req reg. */
- if (!create_register_alias (str, p))
+ the form alias .req reg, or a Neon .dn/.qn directive. */
+ if (!create_register_alias (str, p)
+ && !create_neon_reg_alias (str, p))
as_bad (_("bad instruction `%s'"), str);
return;
}
+ if (opcode->tag == OT_cinfix3_deprecated)
+ as_warn (_("s suffix on comparison instruction is deprecated"));
+
+ /* The value which unconditional instructions should have in place of the
+ condition field. */
+ inst.uncond_value = (opcode->tag == OT_csuffixF) ? 0xf : -1;
+
if (thumb_mode)
{
arm_feature_set variant;
@@ -8387,6 +14162,14 @@ md_assemble (char *str)
return;
}
+ if (!ARM_CPU_HAS_FEATURE (variant, arm_ext_v6t2) && !inst.size_req)
+ {
+ /* Implicit require narrow instructions on Thumb-1. This avoids
+ relaxation accidentally introducing Thumb-2 instructions. */
+ if (opcode->tencode != do_t_blx && opcode->tencode != do_t_branch23)
+ inst.size_req = 2;
+ }
+
/* Check conditional suffixes. */
if (current_it_mask)
{
@@ -8428,10 +14211,15 @@ md_assemble (char *str)
return;
}
}
+
+ /* Something has gone badly wrong if we try to relax a fixed size
+ instruction. */
+ assert (inst.size_req == 0 || !inst.relax);
+
ARM_MERGE_FEATURE_SETS (thumb_arch_used, thumb_arch_used,
*opcode->tvariant);
/* Many Thumb-2 instructions also have Thumb-1 variants, so explicitly
- set those bits when Thumb-2 32-bit instuctions are seen. ie.
+ set those bits when Thumb-2 32-bit instructions are seen. ie.
anything other than bl/blx.
This is overly pessimistic for relaxable instructions. */
if ((inst.size == 4 && (inst.instruction & 0xf800e800) != 0xf000e800)
@@ -8439,7 +14227,7 @@ md_assemble (char *str)
ARM_MERGE_FEATURE_SETS (thumb_arch_used, thumb_arch_used,
arm_ext_v6t2);
}
- else
+ else if (ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v1))
{
/* Check that this instruction is supported for this CPU. */
if (!opcode->avariant ||
@@ -8472,6 +14260,12 @@ md_assemble (char *str)
ARM_MERGE_FEATURE_SETS (arm_arch_used, arm_arch_used,
*opcode->avariant);
}
+ else
+ {
+ as_bad (_("attempt to use an ARM instruction on a Thumb-only processor "
+ "-- `%s'"), str);
+ return;
+ }
output_inst (str);
}
@@ -8537,9 +14331,7 @@ arm_frob_label (symbolS * sym)
label_is_thumb_function_name = FALSE;
}
-#ifdef OBJ_ELF
dwarf2_emit_label (sym);
-#endif
}
int
@@ -8573,13 +14365,24 @@ arm_canonicalize_symbol_name (char * name)
should appear in both upper and lowercase variants. Some registers
also have mixed-case names. */
-#define REGDEF(s,n,t) { #s, n, REG_TYPE_##t, TRUE }
+#define REGDEF(s,n,t) { #s, n, REG_TYPE_##t, TRUE, 0 }
#define REGNUM(p,n,t) REGDEF(p##n, n, t)
+#define REGNUM2(p,n,t) REGDEF(p##n, 2 * n, t)
#define REGSET(p,t) \
REGNUM(p, 0,t), REGNUM(p, 1,t), REGNUM(p, 2,t), REGNUM(p, 3,t), \
REGNUM(p, 4,t), REGNUM(p, 5,t), REGNUM(p, 6,t), REGNUM(p, 7,t), \
REGNUM(p, 8,t), REGNUM(p, 9,t), REGNUM(p,10,t), REGNUM(p,11,t), \
REGNUM(p,12,t), REGNUM(p,13,t), REGNUM(p,14,t), REGNUM(p,15,t)
+#define REGSETH(p,t) \
+ REGNUM(p,16,t), REGNUM(p,17,t), REGNUM(p,18,t), REGNUM(p,19,t), \
+ REGNUM(p,20,t), REGNUM(p,21,t), REGNUM(p,22,t), REGNUM(p,23,t), \
+ REGNUM(p,24,t), REGNUM(p,25,t), REGNUM(p,26,t), REGNUM(p,27,t), \
+ REGNUM(p,28,t), REGNUM(p,29,t), REGNUM(p,30,t), REGNUM(p,31,t)
+#define REGSET2(p,t) \
+ REGNUM2(p, 0,t), REGNUM2(p, 1,t), REGNUM2(p, 2,t), REGNUM2(p, 3,t), \
+ REGNUM2(p, 4,t), REGNUM2(p, 5,t), REGNUM2(p, 6,t), REGNUM2(p, 7,t), \
+ REGNUM2(p, 8,t), REGNUM2(p, 9,t), REGNUM2(p,10,t), REGNUM2(p,11,t), \
+ REGNUM2(p,12,t), REGNUM2(p,13,t), REGNUM2(p,14,t), REGNUM2(p,15,t)
static const struct reg_entry reg_names[] =
{
@@ -8618,24 +14421,24 @@ static const struct reg_entry reg_names[] =
REGNUM(F,4,FN), REGNUM(F,5,FN), REGNUM(F,6,FN), REGNUM(F,7, FN),
/* VFP SP registers. */
- REGSET(s,VFS),
- REGNUM(s,16,VFS), REGNUM(s,17,VFS), REGNUM(s,18,VFS), REGNUM(s,19,VFS),
- REGNUM(s,20,VFS), REGNUM(s,21,VFS), REGNUM(s,22,VFS), REGNUM(s,23,VFS),
- REGNUM(s,24,VFS), REGNUM(s,25,VFS), REGNUM(s,26,VFS), REGNUM(s,27,VFS),
- REGNUM(s,28,VFS), REGNUM(s,29,VFS), REGNUM(s,30,VFS), REGNUM(s,31,VFS),
-
- REGSET(S,VFS),
- REGNUM(S,16,VFS), REGNUM(S,17,VFS), REGNUM(S,18,VFS), REGNUM(S,19,VFS),
- REGNUM(S,20,VFS), REGNUM(S,21,VFS), REGNUM(S,22,VFS), REGNUM(S,23,VFS),
- REGNUM(S,24,VFS), REGNUM(S,25,VFS), REGNUM(S,26,VFS), REGNUM(S,27,VFS),
- REGNUM(S,28,VFS), REGNUM(S,29,VFS), REGNUM(S,30,VFS), REGNUM(S,31,VFS),
+ REGSET(s,VFS), REGSET(S,VFS),
+ REGSETH(s,VFS), REGSETH(S,VFS),
/* VFP DP Registers. */
- REGSET(d,VFD), REGSET(D,VFS),
+ REGSET(d,VFD), REGSET(D,VFD),
+ /* Extra Neon DP registers. */
+ REGSETH(d,VFD), REGSETH(D,VFD),
+
+ /* Neon QP registers. */
+ REGSET2(q,NQ), REGSET2(Q,NQ),
/* VFP control registers. */
REGDEF(fpsid,0,VFC), REGDEF(fpscr,1,VFC), REGDEF(fpexc,8,VFC),
REGDEF(FPSID,0,VFC), REGDEF(FPSCR,1,VFC), REGDEF(FPEXC,8,VFC),
+ REGDEF(fpinst,9,VFC), REGDEF(fpinst2,10,VFC),
+ REGDEF(FPINST,9,VFC), REGDEF(FPINST2,10,VFC),
+ REGDEF(mvfr0,7,VFC), REGDEF(mvfr1,6,VFC),
+ REGDEF(MVFR0,7,VFC), REGDEF(MVFR1,6,VFC),
/* Maverick DSP coprocessor registers. */
REGSET(mvf,MVF), REGSET(mvd,MVD), REGSET(mvfx,MVFX), REGSET(mvdx,MVDX),
@@ -8752,20 +14555,21 @@ static const struct asm_psr psrs[] =
/* Table of V7M psr names. */
static const struct asm_psr v7m_psrs[] =
{
- {"apsr", 0 },
- {"iapsr", 1 },
- {"eapsr", 2 },
- {"psr", 3 },
- {"ipsr", 5 },
- {"epsr", 6 },
- {"iepsr", 7 },
- {"msp", 8 },
- {"psp", 9 },
- {"primask", 16},
- {"basepri", 17},
- {"basepri_max", 18},
- {"faultmask", 19},
- {"control", 20}
+ {"apsr", 0 }, {"APSR", 0 },
+ {"iapsr", 1 }, {"IAPSR", 1 },
+ {"eapsr", 2 }, {"EAPSR", 2 },
+ {"psr", 3 }, {"PSR", 3 },
+ {"xpsr", 3 }, {"XPSR", 3 }, {"xPSR", 3 },
+ {"ipsr", 5 }, {"IPSR", 5 },
+ {"epsr", 6 }, {"EPSR", 6 },
+ {"iepsr", 7 }, {"IEPSR", 7 },
+ {"msp", 8 }, {"MSP", 8 },
+ {"psp", 9 }, {"PSP", 9 },
+ {"primask", 16}, {"PRIMASK", 16},
+ {"basepri", 17}, {"BASEPRI", 17},
+ {"basepri_max", 18}, {"BASEPRI_MAX", 18},
+ {"faultmask", 19}, {"FAULTMASK", 19},
+ {"control", 20}, {"CONTROL", 20}
};
/* Table of all shift-in-operand names. */
@@ -8858,10 +14662,17 @@ static struct asm_barrier_opt barrier_opt_names[] =
#define TxC3(mnem, op, top, nops, ops, ae, te) \
{ #mnem, OPS##nops ops, OT_cinfix3, 0x##op, top, ARM_VARIANT, \
THUMB_VARIANT, do_##ae, do_##te }
+#define TxC3w(mnem, op, top, nops, ops, ae, te) \
+ { #mnem, OPS##nops ops, OT_cinfix3_deprecated, 0x##op, top, ARM_VARIANT, \
+ THUMB_VARIANT, do_##ae, do_##te }
#define TC3(mnem, aop, top, nops, ops, ae, te) \
TxC3(mnem, aop, 0x##top, nops, ops, ae, te)
+#define TC3w(mnem, aop, top, nops, ops, ae, te) \
+ TxC3w(mnem, aop, 0x##top, nops, ops, ae, te)
#define tC3(mnem, aop, top, nops, ops, ae, te) \
TxC3(mnem, aop, T_MNEM_##top, nops, ops, ae, te)
+#define tC3w(mnem, aop, top, nops, ops, ae, te) \
+ TxC3w(mnem, aop, T_MNEM_##top, nops, ops, ae, te)
/* Mnemonic with a conditional infix in an unusual place. Each and every variant has to
appear in the condition table. */
@@ -8970,6 +14781,42 @@ static struct asm_barrier_opt barrier_opt_names[] =
#define UF(mnem, op, nops, ops, ae) \
{ #mnem, OPS##nops ops, OT_unconditionalF, 0x##op, 0, ARM_VARIANT, 0, do_##ae, NULL }
+/* Neon data-processing. ARM versions are unconditional with cond=0xf.
+ The Thumb and ARM variants are mostly the same (bits 0-23 and 24/28), so we
+ use the same encoding function for each. */
+#define NUF(mnem, op, nops, ops, enc) \
+ { #mnem, OPS##nops ops, OT_unconditionalF, 0x##op, 0x##op, \
+ ARM_VARIANT, THUMB_VARIANT, do_##enc, do_##enc }
+
+/* Neon data processing, version which indirects through neon_enc_tab for
+ the various overloaded versions of opcodes. */
+#define nUF(mnem, op, nops, ops, enc) \
+ { #mnem, OPS##nops ops, OT_unconditionalF, N_MNEM_##op, N_MNEM_##op, \
+ ARM_VARIANT, THUMB_VARIANT, do_##enc, do_##enc }
+
+/* Neon insn with conditional suffix for the ARM version, non-overloaded
+ version. */
+#define NCE_tag(mnem, op, nops, ops, enc, tag) \
+ { #mnem, OPS##nops ops, tag, 0x##op, 0x##op, ARM_VARIANT, \
+ THUMB_VARIANT, do_##enc, do_##enc }
+
+#define NCE(mnem, op, nops, ops, enc) \
+ NCE_tag(mnem, op, nops, ops, enc, OT_csuffix)
+
+#define NCEF(mnem, op, nops, ops, enc) \
+ NCE_tag(mnem, op, nops, ops, enc, OT_csuffixF)
+
+/* Neon insn with conditional suffix for the ARM version, overloaded types. */
+#define nCE_tag(mnem, op, nops, ops, enc, tag) \
+ { #mnem, OPS##nops ops, tag, N_MNEM_##op, N_MNEM_##op, \
+ ARM_VARIANT, THUMB_VARIANT, do_##enc, do_##enc }
+
+#define nCE(mnem, op, nops, ops, enc) \
+ nCE_tag(mnem, op, nops, ops, enc, OT_csuffix)
+
+#define nCEF(mnem, op, nops, ops, enc) \
+ nCE_tag(mnem, op, nops, ops, enc, OT_csuffixF)
+
#define do_0 0
/* Thumb-only, unconditional. */
@@ -8985,8 +14832,8 @@ static const struct asm_opcode insns[] =
tC3(eors, 0300000, eors, 3, (RR, oRR, SH), arit, t_arit3c),
tCE(sub, 0400000, sub, 3, (RR, oRR, SH), arit, t_add_sub),
tC3(subs, 0500000, subs, 3, (RR, oRR, SH), arit, t_add_sub),
- tCE(add, 0800000, add, 3, (RR, oRR, SH), arit, t_add_sub),
- tC3(adds, 0900000, adds, 3, (RR, oRR, SH), arit, t_add_sub),
+ tCE(add, 0800000, add, 3, (RR, oRR, SHG), arit, t_add_sub),
+ tC3(adds, 0900000, adds, 3, (RR, oRR, SHG), arit, t_add_sub),
tCE(adc, 0a00000, adc, 3, (RR, oRR, SH), arit, t_arit3c),
tC3(adcs, 0b00000, adcs, 3, (RR, oRR, SH), arit, t_arit3c),
tCE(sbc, 0c00000, sbc, 3, (RR, oRR, SH), arit, t_arit3),
@@ -9000,13 +14847,13 @@ static const struct asm_opcode insns[] =
for setting PSR flag bits. They are obsolete in V6 and do not
have Thumb equivalents. */
tCE(tst, 1100000, tst, 2, (RR, SH), cmp, t_mvn_tst),
- tC3(tsts, 1100000, tst, 2, (RR, SH), cmp, t_mvn_tst),
+ tC3w(tsts, 1100000, tst, 2, (RR, SH), cmp, t_mvn_tst),
CL(tstp, 110f000, 2, (RR, SH), cmp),
tCE(cmp, 1500000, cmp, 2, (RR, SH), cmp, t_mov_cmp),
- tC3(cmps, 1500000, cmp, 2, (RR, SH), cmp, t_mov_cmp),
+ tC3w(cmps, 1500000, cmp, 2, (RR, SH), cmp, t_mov_cmp),
CL(cmpp, 150f000, 2, (RR, SH), cmp),
tCE(cmn, 1700000, cmn, 2, (RR, SH), cmp, t_mvn_tst),
- tC3(cmns, 1700000, cmn, 2, (RR, SH), cmp, t_mvn_tst),
+ tC3w(cmns, 1700000, cmn, 2, (RR, SH), cmp, t_mvn_tst),
CL(cmnp, 170f000, 2, (RR, SH), cmp),
tCE(mov, 1a00000, mov, 2, (RR, SH), mov, t_mov_cmp),
@@ -9014,10 +14861,10 @@ static const struct asm_opcode insns[] =
tCE(mvn, 1e00000, mvn, 2, (RR, SH), mov, t_mvn_tst),
tC3(mvns, 1f00000, mvns, 2, (RR, SH), mov, t_mvn_tst),
- tCE(ldr, 4100000, ldr, 2, (RR, ADDR), ldst, t_ldst),
- tC3(ldrb, 4500000, ldrb, 2, (RR, ADDR), ldst, t_ldst),
- tCE(str, 4000000, str, 2, (RR, ADDR), ldst, t_ldst),
- tC3(strb, 4400000, strb, 2, (RR, ADDR), ldst, t_ldst),
+ tCE(ldr, 4100000, ldr, 2, (RR, ADDRGLDR),ldst, t_ldst),
+ tC3(ldrb, 4500000, ldrb, 2, (RR, ADDRGLDR),ldst, t_ldst),
+ tCE(str, 4000000, str, 2, (RR, ADDRGLDR),ldst, t_ldst),
+ tC3(strb, 4400000, strb, 2, (RR, ADDRGLDR),ldst, t_ldst),
tCE(stm, 8800000, stmia, 2, (RRw, REGLST), ldmstm, t_ldmstm),
tC3(stmia, 8800000, stmia, 2, (RRw, REGLST), ldmstm, t_ldmstm),
@@ -9050,6 +14897,10 @@ static const struct asm_opcode insns[] =
tCE(push, 92d0000, push, 1, (REGLST), push_pop, t_push_pop),
tCE(pop, 8bd0000, pop, 1, (REGLST), push_pop, t_push_pop),
+ /* These may simplify to neg. */
+ TCE(rsb, 0600000, ebc00000, 3, (RR, oRR, SH), arit, t_rsb),
+ TC3(rsbs, 0700000, ebd00000, 3, (RR, oRR, SH), arit, t_rsb),
+
#undef THUMB_VARIANT
#define THUMB_VARIANT &arm_ext_v6
TCE(cpy, 1a00000, 4600, 2, (RR, RR), rd_rm, t_cpy),
@@ -9057,10 +14908,8 @@ static const struct asm_opcode insns[] =
/* V1 instructions with no Thumb analogue prior to V6T2. */
#undef THUMB_VARIANT
#define THUMB_VARIANT &arm_ext_v6t2
- TCE(rsb, 0600000, ebc00000, 3, (RR, oRR, SH), arit, t_rsb),
- TC3(rsbs, 0700000, ebd00000, 3, (RR, oRR, SH), arit, t_rsb),
TCE(teq, 1300000, ea900f00, 2, (RR, SH), cmp, t_mvn_tst),
- TC3(teqs, 1300000, ea900f00, 2, (RR, SH), cmp, t_mvn_tst),
+ TC3w(teqs, 1300000, ea900f00, 2, (RR, SH), cmp, t_mvn_tst),
CL(teqp, 130f000, 2, (RR, SH), cmp),
TC3(ldrt, 4300000, f8500e00, 2, (RR, ADDR), ldstt, t_ldstt),
@@ -9101,10 +14950,10 @@ static const struct asm_opcode insns[] =
/* Generic coprocessor instructions. */
TCE(cdp, e000000, ee000000, 6, (RCP, I15b, RCN, RCN, RCN, oI7b), cdp, cdp),
- TCE(ldc, c100000, ec100000, 3, (RCP, RCN, ADDR), lstc, lstc),
- TC3(ldcl, c500000, ec500000, 3, (RCP, RCN, ADDR), lstc, lstc),
- TCE(stc, c000000, ec000000, 3, (RCP, RCN, ADDR), lstc, lstc),
- TC3(stcl, c400000, ec400000, 3, (RCP, RCN, ADDR), lstc, lstc),
+ TCE(ldc, c100000, ec100000, 3, (RCP, RCN, ADDRGLDC), lstc, lstc),
+ TC3(ldcl, c500000, ec500000, 3, (RCP, RCN, ADDRGLDC), lstc, lstc),
+ TCE(stc, c000000, ec000000, 3, (RCP, RCN, ADDRGLDC), lstc, lstc),
+ TC3(stcl, c400000, ec400000, 3, (RCP, RCN, ADDRGLDC), lstc, lstc),
TCE(mcr, e000010, ee000010, 6, (RCP, I7b, RR, RCN, RCN, oI7b), co_reg, co_reg),
TCE(mrc, e100010, ee100010, 6, (RCP, I7b, RR, RCN, RCN, oI7b), co_reg, co_reg),
@@ -9115,8 +14964,8 @@ static const struct asm_opcode insns[] =
#undef ARM_VARIANT
#define ARM_VARIANT &arm_ext_v3 /* ARM 6 Status register instructions. */
- TCE(mrs, 10f0000, f3ef8000, 2, (RR, PSR), mrs, t_mrs),
- TCE(msr, 120f000, f3808000, 2, (PSR, RR_EXi), msr, t_msr),
+ TCE(mrs, 10f0000, f3ef8000, 2, (APSR_RR, RVC_PSR), mrs, t_mrs),
+ TCE(msr, 120f000, f3808000, 2, (RVC_PSR, RR_EXi), msr, t_msr),
#undef ARM_VARIANT
#define ARM_VARIANT &arm_ext_v3m /* ARM 7M long multiplies. */
@@ -9133,12 +14982,12 @@ static const struct asm_opcode insns[] =
#define ARM_VARIANT &arm_ext_v4 /* ARM Architecture 4. */
#undef THUMB_VARIANT
#define THUMB_VARIANT &arm_ext_v4t
- tC3(ldrh, 01000b0, ldrh, 2, (RR, ADDR), ldstv4, t_ldst),
- tC3(strh, 00000b0, strh, 2, (RR, ADDR), ldstv4, t_ldst),
- tC3(ldrsh, 01000f0, ldrsh, 2, (RR, ADDR), ldstv4, t_ldst),
- tC3(ldrsb, 01000d0, ldrsb, 2, (RR, ADDR), ldstv4, t_ldst),
- tCM(ld,sh, 01000f0, ldrsh, 2, (RR, ADDR), ldstv4, t_ldst),
- tCM(ld,sb, 01000d0, ldrsb, 2, (RR, ADDR), ldstv4, t_ldst),
+ tC3(ldrh, 01000b0, ldrh, 2, (RR, ADDRGLDRS), ldstv4, t_ldst),
+ tC3(strh, 00000b0, strh, 2, (RR, ADDRGLDRS), ldstv4, t_ldst),
+ tC3(ldrsh, 01000f0, ldrsh, 2, (RR, ADDRGLDRS), ldstv4, t_ldst),
+ tC3(ldrsb, 01000d0, ldrsb, 2, (RR, ADDRGLDRS), ldstv4, t_ldst),
+ tCM(ld,sh, 01000f0, ldrsh, 2, (RR, ADDRGLDRS), ldstv4, t_ldst),
+ tCM(ld,sb, 01000d0, ldrsb, 2, (RR, ADDRGLDRS), ldstv4, t_ldst),
#undef ARM_VARIANT
#define ARM_VARIANT &arm_ext_v4t_5
@@ -9159,10 +15008,10 @@ static const struct asm_opcode insns[] =
#undef THUMB_VARIANT
#define THUMB_VARIANT &arm_ext_v6t2
TCE(clz, 16f0f10, fab0f080, 2, (RRnpc, RRnpc), rd_rm, t_clz),
- TUF(ldc2, c100000, fc100000, 3, (RCP, RCN, ADDR), lstc, lstc),
- TUF(ldc2l, c500000, fc500000, 3, (RCP, RCN, ADDR), lstc, lstc),
- TUF(stc2, c000000, fc000000, 3, (RCP, RCN, ADDR), lstc, lstc),
- TUF(stc2l, c400000, fc400000, 3, (RCP, RCN, ADDR), lstc, lstc),
+ TUF(ldc2, c100000, fc100000, 3, (RCP, RCN, ADDRGLDC), lstc, lstc),
+ TUF(ldc2l, c500000, fc500000, 3, (RCP, RCN, ADDRGLDC), lstc, lstc),
+ TUF(stc2, c000000, fc000000, 3, (RCP, RCN, ADDRGLDC), lstc, lstc),
+ TUF(stc2l, c400000, fc400000, 3, (RCP, RCN, ADDRGLDC), lstc, lstc),
TUF(cdp2, e000000, fe000000, 6, (RCP, I15b, RCN, RCN, RCN, oI7b), cdp, cdp),
TUF(mcr2, e000010, fe000010, 6, (RCP, I7b, RR, RCN, RCN, oI7b), co_reg, co_reg),
TUF(mrc2, e100010, fe100010, 6, (RCP, I7b, RR, RCN, RCN, oI7b), co_reg, co_reg),
@@ -9198,8 +15047,8 @@ static const struct asm_opcode insns[] =
#undef ARM_VARIANT
#define ARM_VARIANT &arm_ext_v5e /* ARM Architecture 5TE. */
TUF(pld, 450f000, f810f000, 1, (ADDR), pld, t_pld),
- TC3(ldrd, 00000d0, e9500000, 3, (RRnpc, oRRnpc, ADDR), ldrd, t_ldstd),
- TC3(strd, 00000f0, e9400000, 3, (RRnpc, oRRnpc, ADDR), ldrd, t_ldstd),
+ TC3(ldrd, 00000d0, e8500000, 3, (RRnpc, oRRnpc, ADDRGLDRS), ldrd, t_ldstd),
+ TC3(strd, 00000f0, e8400000, 3, (RRnpc, oRRnpc, ADDRGLDRS), ldrd, t_ldstd),
TCE(mcrr, c400000, ec400000, 5, (RCP, I15b, RRnpc, RRnpc, RCN), co_reg2c, co_reg2c),
TCE(mrrc, c500000, ec500000, 5, (RCP, I15b, RRnpc, RRnpc, RCN), co_reg2c, co_reg2c),
@@ -9226,6 +15075,7 @@ static const struct asm_opcode insns[] =
#undef THUMB_VARIANT
#define THUMB_VARIANT &arm_ext_v6t2
TCE(ldrex, 1900f9f, e8500f00, 2, (RRnpc, ADDR), ldrex, t_ldrex),
+ TCE(strex, 1800f90, e8400000, 3, (RRnpc, RRnpc, ADDR), strex, t_strex),
TUF(mcrr2, c400000, fc400000, 5, (RCP, I15b, RRnpc, RRnpc, RCN), co_reg2c, co_reg2c),
TUF(mrrc2, c500000, fc500000, 5, (RCP, I15b, RRnpc, RRnpc, RCN), co_reg2c, co_reg2c),
@@ -9309,12 +15159,11 @@ static const struct asm_opcode insns[] =
TCE(smuadx, 700f030, fb20f010, 3, (RRnpc, RRnpc, RRnpc), smul, t_simd),
TCE(smusd, 700f050, fb40f000, 3, (RRnpc, RRnpc, RRnpc), smul, t_simd),
TCE(smusdx, 700f070, fb40f010, 3, (RRnpc, RRnpc, RRnpc), smul, t_simd),
- TUF(srsia, 8cd0500, e980c000, 1, (I31w), srs, srs),
- UF(srsib, 9cd0500, 1, (I31w), srs),
- UF(srsda, 84d0500, 1, (I31w), srs),
- TUF(srsdb, 94d0500, e800c000, 1, (I31w), srs, srs),
+ TUF(srsia, 8c00500, e980c000, 2, (oRRw, I31w), srs, srs),
+ UF(srsib, 9c00500, 2, (oRRw, I31w), srs),
+ UF(srsda, 8400500, 2, (oRRw, I31w), srs),
+ TUF(srsdb, 9400500, e800c000, 2, (oRRw, I31w), srs, srs),
TCE(ssat16, 6a00f30, f3200000, 3, (RRnpc, I16, RRnpc), ssat16, t_ssat16),
- TCE(strex, 1800f90, e8400000, 3, (RRnpc, RRnpc, ADDR), strex, t_strex),
TCE(umaal, 0400090, fbe00060, 4, (RRnpc, RRnpc, RRnpc, RRnpc),smlal, t_mlal),
TCE(usad8, 780f010, fb70f000, 3, (RRnpc, RRnpc, RRnpc), smul, t_simd),
TCE(usada8, 7800010, fb700000, 4, (RRnpc, RRnpc, RRnpc, RRnpc),smla, t_mla),
@@ -9354,18 +15203,20 @@ static const struct asm_opcode insns[] =
TCE(ubfx, 7e00050, f3c00000, 4, (RR, RR, I31, I32), bfx, t_bfx),
TCE(mls, 0600090, fb000010, 4, (RRnpc, RRnpc, RRnpc, RRnpc), mlas, t_mla),
- TCE(movw, 3000000, f2400000, 2, (RRnpc, Iffff), mov16, t_mov16),
- TCE(movt, 3400000, f2c00000, 2, (RRnpc, Iffff), mov16, t_mov16),
- TCE(rbit, 3ff0f30, fa90f0a0, 2, (RR, RR), rd_rm, t_rbit),
+ TCE(movw, 3000000, f2400000, 2, (RRnpc, HALF), mov16, t_mov16),
+ TCE(movt, 3400000, f2c00000, 2, (RRnpc, HALF), mov16, t_mov16),
+ TCE(rbit, 6ff0f30, fa90f0a0, 2, (RR, RR), rd_rm, t_rbit),
TC3(ldrht, 03000b0, f8300e00, 2, (RR, ADDR), ldsttv4, t_ldstt),
TC3(ldrsht, 03000f0, f9300e00, 2, (RR, ADDR), ldsttv4, t_ldstt),
TC3(ldrsbt, 03000d0, f9100e00, 2, (RR, ADDR), ldsttv4, t_ldstt),
TC3(strht, 02000b0, f8200e00, 2, (RR, ADDR), ldsttv4, t_ldstt),
- UT(cbnz, b900, 2, (RR, EXP), t_czb),
- UT(cbz, b100, 2, (RR, EXP), t_czb),
- /* ARM does not really have an IT instruction. */
+ UT(cbnz, b900, 2, (RR, EXP), t_cbz),
+ UT(cbz, b100, 2, (RR, EXP), t_cbz),
+ /* ARM does not really have an IT instruction, so always allow it. */
+#undef ARM_VARIANT
+#define ARM_VARIANT &arm_ext_v1
TUE(it, 0, bf08, 1, (COND), it, t_it),
TUE(itt, 0, bf0c, 1, (COND), it, t_it),
TUE(ite, 0, bf04, 1, (COND), it, t_it),
@@ -9415,15 +15266,15 @@ static const struct asm_opcode insns[] =
cCE(wfc, e400110, 1, (RR), rd),
cCE(rfc, e500110, 1, (RR), rd),
- cCL(ldfs, c100100, 2, (RF, ADDR), rd_cpaddr),
- cCL(ldfd, c108100, 2, (RF, ADDR), rd_cpaddr),
- cCL(ldfe, c500100, 2, (RF, ADDR), rd_cpaddr),
- cCL(ldfp, c508100, 2, (RF, ADDR), rd_cpaddr),
+ cCL(ldfs, c100100, 2, (RF, ADDRGLDC), rd_cpaddr),
+ cCL(ldfd, c108100, 2, (RF, ADDRGLDC), rd_cpaddr),
+ cCL(ldfe, c500100, 2, (RF, ADDRGLDC), rd_cpaddr),
+ cCL(ldfp, c508100, 2, (RF, ADDRGLDC), rd_cpaddr),
- cCL(stfs, c000100, 2, (RF, ADDR), rd_cpaddr),
- cCL(stfd, c008100, 2, (RF, ADDR), rd_cpaddr),
- cCL(stfe, c400100, 2, (RF, ADDR), rd_cpaddr),
- cCL(stfp, c408100, 2, (RF, ADDR), rd_cpaddr),
+ cCL(stfs, c000100, 2, (RF, ADDRGLDC), rd_cpaddr),
+ cCL(stfd, c008100, 2, (RF, ADDRGLDC), rd_cpaddr),
+ cCL(stfe, c400100, 2, (RF, ADDRGLDC), rd_cpaddr),
+ cCL(stfp, c408100, 2, (RF, ADDRGLDC), rd_cpaddr),
cCL(mvfs, e008100, 2, (RF, RF_IF), rd_rm),
cCL(mvfsp, e008120, 2, (RF, RF_IF), rd_rm),
@@ -9866,8 +15717,8 @@ static const struct asm_opcode insns[] =
cCE(fmxr, ee00a10, 2, (RVC, RR), rn_rd),
/* Memory operations. */
- cCE(flds, d100a00, 2, (RVS, ADDR), vfp_sp_ldst),
- cCE(fsts, d000a00, 2, (RVS, ADDR), vfp_sp_ldst),
+ cCE(flds, d100a00, 2, (RVS, ADDRGLDC), vfp_sp_ldst),
+ cCE(fsts, d000a00, 2, (RVS, ADDRGLDC), vfp_sp_ldst),
cCE(fldmias, c900a00, 2, (RRw, VRSLST), vfp_sp_ldstmia),
cCE(fldmfds, c900a00, 2, (RRw, VRSLST), vfp_sp_ldstmia),
cCE(fldmdbs, d300a00, 2, (RRw, VRSLST), vfp_sp_ldstmdb),
@@ -9910,13 +15761,13 @@ static const struct asm_opcode insns[] =
#undef ARM_VARIANT
#define ARM_VARIANT &fpu_vfp_ext_v1 /* VFP V1 (Double precision). */
/* Moves and type conversions. */
- cCE(fcpyd, eb00b40, 2, (RVD, RVD), rd_rm),
+ cCE(fcpyd, eb00b40, 2, (RVD, RVD), vfp_dp_rd_rm),
cCE(fcvtds, eb70ac0, 2, (RVD, RVS), vfp_dp_sp_cvt),
cCE(fcvtsd, eb70bc0, 2, (RVS, RVD), vfp_sp_dp_cvt),
- cCE(fmdhr, e200b10, 2, (RVD, RR), rn_rd),
- cCE(fmdlr, e000b10, 2, (RVD, RR), rn_rd),
- cCE(fmrdh, e300b10, 2, (RR, RVD), rd_rn),
- cCE(fmrdl, e100b10, 2, (RR, RVD), rd_rn),
+ cCE(fmdhr, e200b10, 2, (RVD, RR), vfp_dp_rn_rd),
+ cCE(fmdlr, e000b10, 2, (RVD, RR), vfp_dp_rn_rd),
+ cCE(fmrdh, e300b10, 2, (RR, RVD), vfp_dp_rd_rn),
+ cCE(fmrdl, e100b10, 2, (RR, RVD), vfp_dp_rd_rn),
cCE(fsitod, eb80bc0, 2, (RVD, RVS), vfp_dp_sp_cvt),
cCE(fuitod, eb80b40, 2, (RVD, RVS), vfp_dp_sp_cvt),
cCE(ftosid, ebd0b40, 2, (RVS, RVD), vfp_sp_dp_cvt),
@@ -9925,8 +15776,8 @@ static const struct asm_opcode insns[] =
cCE(ftouizd, ebc0bc0, 2, (RVS, RVD), vfp_sp_dp_cvt),
/* Memory operations. */
- cCE(fldd, d100b00, 2, (RVD, ADDR), vfp_dp_ldst),
- cCE(fstd, d000b00, 2, (RVD, ADDR), vfp_dp_ldst),
+ cCE(fldd, d100b00, 2, (RVD, ADDRGLDC), vfp_dp_ldst),
+ cCE(fstd, d000b00, 2, (RVD, ADDRGLDC), vfp_dp_ldst),
cCE(fldmiad, c900b00, 2, (RRw, VRDLST), vfp_dp_ldstmia),
cCE(fldmfdd, c900b00, 2, (RRw, VRDLST), vfp_dp_ldstmia),
cCE(fldmdbd, d300b00, 2, (RRw, VRDLST), vfp_dp_ldstmdb),
@@ -9937,34 +15788,347 @@ static const struct asm_opcode insns[] =
cCE(fstmfdd, d200b00, 2, (RRw, VRDLST), vfp_dp_ldstmdb),
/* Monadic operations. */
- cCE(fabsd, eb00bc0, 2, (RVD, RVD), rd_rm),
- cCE(fnegd, eb10b40, 2, (RVD, RVD), rd_rm),
- cCE(fsqrtd, eb10bc0, 2, (RVD, RVD), rd_rm),
+ cCE(fabsd, eb00bc0, 2, (RVD, RVD), vfp_dp_rd_rm),
+ cCE(fnegd, eb10b40, 2, (RVD, RVD), vfp_dp_rd_rm),
+ cCE(fsqrtd, eb10bc0, 2, (RVD, RVD), vfp_dp_rd_rm),
/* Dyadic operations. */
- cCE(faddd, e300b00, 3, (RVD, RVD, RVD), rd_rn_rm),
- cCE(fsubd, e300b40, 3, (RVD, RVD, RVD), rd_rn_rm),
- cCE(fmuld, e200b00, 3, (RVD, RVD, RVD), rd_rn_rm),
- cCE(fdivd, e800b00, 3, (RVD, RVD, RVD), rd_rn_rm),
- cCE(fmacd, e000b00, 3, (RVD, RVD, RVD), rd_rn_rm),
- cCE(fmscd, e100b00, 3, (RVD, RVD, RVD), rd_rn_rm),
- cCE(fnmuld, e200b40, 3, (RVD, RVD, RVD), rd_rn_rm),
- cCE(fnmacd, e000b40, 3, (RVD, RVD, RVD), rd_rn_rm),
- cCE(fnmscd, e100b40, 3, (RVD, RVD, RVD), rd_rn_rm),
+ cCE(faddd, e300b00, 3, (RVD, RVD, RVD), vfp_dp_rd_rn_rm),
+ cCE(fsubd, e300b40, 3, (RVD, RVD, RVD), vfp_dp_rd_rn_rm),
+ cCE(fmuld, e200b00, 3, (RVD, RVD, RVD), vfp_dp_rd_rn_rm),
+ cCE(fdivd, e800b00, 3, (RVD, RVD, RVD), vfp_dp_rd_rn_rm),
+ cCE(fmacd, e000b00, 3, (RVD, RVD, RVD), vfp_dp_rd_rn_rm),
+ cCE(fmscd, e100b00, 3, (RVD, RVD, RVD), vfp_dp_rd_rn_rm),
+ cCE(fnmuld, e200b40, 3, (RVD, RVD, RVD), vfp_dp_rd_rn_rm),
+ cCE(fnmacd, e000b40, 3, (RVD, RVD, RVD), vfp_dp_rd_rn_rm),
+ cCE(fnmscd, e100b40, 3, (RVD, RVD, RVD), vfp_dp_rd_rn_rm),
/* Comparisons. */
- cCE(fcmpd, eb40b40, 2, (RVD, RVD), rd_rm),
- cCE(fcmpzd, eb50b40, 1, (RVD), rd),
- cCE(fcmped, eb40bc0, 2, (RVD, RVD), rd_rm),
- cCE(fcmpezd, eb50bc0, 1, (RVD), rd),
+ cCE(fcmpd, eb40b40, 2, (RVD, RVD), vfp_dp_rd_rm),
+ cCE(fcmpzd, eb50b40, 1, (RVD), vfp_dp_rd),
+ cCE(fcmped, eb40bc0, 2, (RVD, RVD), vfp_dp_rd_rm),
+ cCE(fcmpezd, eb50bc0, 1, (RVD), vfp_dp_rd),
#undef ARM_VARIANT
#define ARM_VARIANT &fpu_vfp_ext_v2
cCE(fmsrr, c400a10, 3, (VRSLST, RR, RR), vfp_sp2_from_reg2),
cCE(fmrrs, c500a10, 3, (RR, RR, VRSLST), vfp_reg2_from_sp2),
- cCE(fmdrr, c400b10, 3, (RVD, RR, RR), rm_rd_rn),
- cCE(fmrrd, c500b10, 3, (RR, RR, RVD), rd_rn_rm),
+ cCE(fmdrr, c400b10, 3, (RVD, RR, RR), vfp_dp_rm_rd_rn),
+ cCE(fmrrd, c500b10, 3, (RR, RR, RVD), vfp_dp_rd_rn_rm),
+
+/* Instructions which may belong to either the Neon or VFP instruction sets.
+ Individual encoder functions perform additional architecture checks. */
+#undef ARM_VARIANT
+#define ARM_VARIANT &fpu_vfp_ext_v1xd
+#undef THUMB_VARIANT
+#define THUMB_VARIANT &fpu_vfp_ext_v1xd
+ /* These mnemonics are unique to VFP. */
+ NCE(vsqrt, 0, 2, (RVSD, RVSD), vfp_nsyn_sqrt),
+ NCE(vdiv, 0, 3, (RVSD, RVSD, RVSD), vfp_nsyn_div),
+ nCE(vnmul, vnmul, 3, (RVSD, RVSD, RVSD), vfp_nsyn_nmul),
+ nCE(vnmla, vnmla, 3, (RVSD, RVSD, RVSD), vfp_nsyn_nmul),
+ nCE(vnmls, vnmls, 3, (RVSD, RVSD, RVSD), vfp_nsyn_nmul),
+ nCE(vcmp, vcmp, 2, (RVSD, RVSD_I0), vfp_nsyn_cmp),
+ nCE(vcmpe, vcmpe, 2, (RVSD, RVSD_I0), vfp_nsyn_cmp),
+ NCE(vpush, 0, 1, (VRSDLST), vfp_nsyn_push),
+ NCE(vpop, 0, 1, (VRSDLST), vfp_nsyn_pop),
+ NCE(vcvtz, 0, 2, (RVSD, RVSD), vfp_nsyn_cvtz),
+
+ /* Mnemonics shared by Neon and VFP. */
+ nCEF(vmul, vmul, 3, (RNSDQ, oRNSDQ, RNSDQ_RNSC), neon_mul),
+ nCEF(vmla, vmla, 3, (RNSDQ, oRNSDQ, RNSDQ_RNSC), neon_mac_maybe_scalar),
+ nCEF(vmls, vmls, 3, (RNSDQ, oRNSDQ, RNSDQ_RNSC), neon_mac_maybe_scalar),
+
+ nCEF(vadd, vadd, 3, (RNSDQ, oRNSDQ, RNSDQ), neon_addsub_if_i),
+ nCEF(vsub, vsub, 3, (RNSDQ, oRNSDQ, RNSDQ), neon_addsub_if_i),
+
+ NCEF(vabs, 1b10300, 2, (RNSDQ, RNSDQ), neon_abs_neg),
+ NCEF(vneg, 1b10380, 2, (RNSDQ, RNSDQ), neon_abs_neg),
+
+ NCE(vldm, c900b00, 2, (RRw, VRSDLST), neon_ldm_stm),
+ NCE(vldmia, c900b00, 2, (RRw, VRSDLST), neon_ldm_stm),
+ NCE(vldmdb, d100b00, 2, (RRw, VRSDLST), neon_ldm_stm),
+ NCE(vstm, c800b00, 2, (RRw, VRSDLST), neon_ldm_stm),
+ NCE(vstmia, c800b00, 2, (RRw, VRSDLST), neon_ldm_stm),
+ NCE(vstmdb, d000b00, 2, (RRw, VRSDLST), neon_ldm_stm),
+ NCE(vldr, d100b00, 2, (RVSD, ADDRGLDC), neon_ldr_str),
+ NCE(vstr, d000b00, 2, (RVSD, ADDRGLDC), neon_ldr_str),
+
+ nCEF(vcvt, vcvt, 3, (RNSDQ, RNSDQ, oI32b), neon_cvt),
+
+ /* NOTE: All VMOV encoding is special-cased! */
+ NCE(vmov, 0, 1, (VMOV), neon_mov),
+ NCE(vmovq, 0, 1, (VMOV), neon_mov),
+#undef THUMB_VARIANT
+#define THUMB_VARIANT &fpu_neon_ext_v1
+#undef ARM_VARIANT
+#define ARM_VARIANT &fpu_neon_ext_v1
+ /* Data processing with three registers of the same length. */
+ /* integer ops, valid types S8 S16 S32 U8 U16 U32. */
+ NUF(vaba, 0000710, 3, (RNDQ, RNDQ, RNDQ), neon_dyadic_i_su),
+ NUF(vabaq, 0000710, 3, (RNQ, RNQ, RNQ), neon_dyadic_i_su),
+ NUF(vhadd, 0000000, 3, (RNDQ, oRNDQ, RNDQ), neon_dyadic_i_su),
+ NUF(vhaddq, 0000000, 3, (RNQ, oRNQ, RNQ), neon_dyadic_i_su),
+ NUF(vrhadd, 0000100, 3, (RNDQ, oRNDQ, RNDQ), neon_dyadic_i_su),
+ NUF(vrhaddq, 0000100, 3, (RNQ, oRNQ, RNQ), neon_dyadic_i_su),
+ NUF(vhsub, 0000200, 3, (RNDQ, oRNDQ, RNDQ), neon_dyadic_i_su),
+ NUF(vhsubq, 0000200, 3, (RNQ, oRNQ, RNQ), neon_dyadic_i_su),
+ /* integer ops, valid types S8 S16 S32 S64 U8 U16 U32 U64. */
+ NUF(vqadd, 0000010, 3, (RNDQ, oRNDQ, RNDQ), neon_dyadic_i64_su),
+ NUF(vqaddq, 0000010, 3, (RNQ, oRNQ, RNQ), neon_dyadic_i64_su),
+ NUF(vqsub, 0000210, 3, (RNDQ, oRNDQ, RNDQ), neon_dyadic_i64_su),
+ NUF(vqsubq, 0000210, 3, (RNQ, oRNQ, RNQ), neon_dyadic_i64_su),
+ NUF(vrshl, 0000500, 3, (RNDQ, oRNDQ, RNDQ), neon_rshl),
+ NUF(vrshlq, 0000500, 3, (RNQ, oRNQ, RNQ), neon_rshl),
+ NUF(vqrshl, 0000510, 3, (RNDQ, oRNDQ, RNDQ), neon_rshl),
+ NUF(vqrshlq, 0000510, 3, (RNQ, oRNQ, RNQ), neon_rshl),
+ /* If not immediate, fall back to neon_dyadic_i64_su.
+ shl_imm should accept I8 I16 I32 I64,
+ qshl_imm should accept S8 S16 S32 S64 U8 U16 U32 U64. */
+ nUF(vshl, vshl, 3, (RNDQ, oRNDQ, RNDQ_I63b), neon_shl_imm),
+ nUF(vshlq, vshl, 3, (RNQ, oRNQ, RNDQ_I63b), neon_shl_imm),
+ nUF(vqshl, vqshl, 3, (RNDQ, oRNDQ, RNDQ_I63b), neon_qshl_imm),
+ nUF(vqshlq, vqshl, 3, (RNQ, oRNQ, RNDQ_I63b), neon_qshl_imm),
+ /* Logic ops, types optional & ignored. */
+ nUF(vand, vand, 2, (RNDQ, NILO), neon_logic),
+ nUF(vandq, vand, 2, (RNQ, NILO), neon_logic),
+ nUF(vbic, vbic, 2, (RNDQ, NILO), neon_logic),
+ nUF(vbicq, vbic, 2, (RNQ, NILO), neon_logic),
+ nUF(vorr, vorr, 2, (RNDQ, NILO), neon_logic),
+ nUF(vorrq, vorr, 2, (RNQ, NILO), neon_logic),
+ nUF(vorn, vorn, 2, (RNDQ, NILO), neon_logic),
+ nUF(vornq, vorn, 2, (RNQ, NILO), neon_logic),
+ nUF(veor, veor, 3, (RNDQ, oRNDQ, RNDQ), neon_logic),
+ nUF(veorq, veor, 3, (RNQ, oRNQ, RNQ), neon_logic),
+ /* Bitfield ops, untyped. */
+ NUF(vbsl, 1100110, 3, (RNDQ, RNDQ, RNDQ), neon_bitfield),
+ NUF(vbslq, 1100110, 3, (RNQ, RNQ, RNQ), neon_bitfield),
+ NUF(vbit, 1200110, 3, (RNDQ, RNDQ, RNDQ), neon_bitfield),
+ NUF(vbitq, 1200110, 3, (RNQ, RNQ, RNQ), neon_bitfield),
+ NUF(vbif, 1300110, 3, (RNDQ, RNDQ, RNDQ), neon_bitfield),
+ NUF(vbifq, 1300110, 3, (RNQ, RNQ, RNQ), neon_bitfield),
+ /* Int and float variants, types S8 S16 S32 U8 U16 U32 F32. */
+ nUF(vabd, vabd, 3, (RNDQ, oRNDQ, RNDQ), neon_dyadic_if_su),
+ nUF(vabdq, vabd, 3, (RNQ, oRNQ, RNQ), neon_dyadic_if_su),
+ nUF(vmax, vmax, 3, (RNDQ, oRNDQ, RNDQ), neon_dyadic_if_su),
+ nUF(vmaxq, vmax, 3, (RNQ, oRNQ, RNQ), neon_dyadic_if_su),
+ nUF(vmin, vmin, 3, (RNDQ, oRNDQ, RNDQ), neon_dyadic_if_su),
+ nUF(vminq, vmin, 3, (RNQ, oRNQ, RNQ), neon_dyadic_if_su),
+ /* Comparisons. Types S8 S16 S32 U8 U16 U32 F32. Non-immediate versions fall
+ back to neon_dyadic_if_su. */
+ nUF(vcge, vcge, 3, (RNDQ, oRNDQ, RNDQ_I0), neon_cmp),
+ nUF(vcgeq, vcge, 3, (RNQ, oRNQ, RNDQ_I0), neon_cmp),
+ nUF(vcgt, vcgt, 3, (RNDQ, oRNDQ, RNDQ_I0), neon_cmp),
+ nUF(vcgtq, vcgt, 3, (RNQ, oRNQ, RNDQ_I0), neon_cmp),
+ nUF(vclt, vclt, 3, (RNDQ, oRNDQ, RNDQ_I0), neon_cmp_inv),
+ nUF(vcltq, vclt, 3, (RNQ, oRNQ, RNDQ_I0), neon_cmp_inv),
+ nUF(vcle, vcle, 3, (RNDQ, oRNDQ, RNDQ_I0), neon_cmp_inv),
+ nUF(vcleq, vcle, 3, (RNQ, oRNQ, RNDQ_I0), neon_cmp_inv),
+ /* Comparison. Type I8 I16 I32 F32. */
+ nUF(vceq, vceq, 3, (RNDQ, oRNDQ, RNDQ_I0), neon_ceq),
+ nUF(vceqq, vceq, 3, (RNQ, oRNQ, RNDQ_I0), neon_ceq),
+ /* As above, D registers only. */
+ nUF(vpmax, vpmax, 3, (RND, oRND, RND), neon_dyadic_if_su_d),
+ nUF(vpmin, vpmin, 3, (RND, oRND, RND), neon_dyadic_if_su_d),
+ /* Int and float variants, signedness unimportant. */
+ nUF(vmlaq, vmla, 3, (RNQ, oRNQ, RNDQ_RNSC), neon_mac_maybe_scalar),
+ nUF(vmlsq, vmls, 3, (RNQ, oRNQ, RNDQ_RNSC), neon_mac_maybe_scalar),
+ nUF(vpadd, vpadd, 3, (RND, oRND, RND), neon_dyadic_if_i_d),
+ /* Add/sub take types I8 I16 I32 I64 F32. */
+ nUF(vaddq, vadd, 3, (RNQ, oRNQ, RNQ), neon_addsub_if_i),
+ nUF(vsubq, vsub, 3, (RNQ, oRNQ, RNQ), neon_addsub_if_i),
+ /* vtst takes sizes 8, 16, 32. */
+ NUF(vtst, 0000810, 3, (RNDQ, oRNDQ, RNDQ), neon_tst),
+ NUF(vtstq, 0000810, 3, (RNQ, oRNQ, RNQ), neon_tst),
+ /* VMUL takes I8 I16 I32 F32 P8. */
+ nUF(vmulq, vmul, 3, (RNQ, oRNQ, RNDQ_RNSC), neon_mul),
+ /* VQD{R}MULH takes S16 S32. */
+ nUF(vqdmulh, vqdmulh, 3, (RNDQ, oRNDQ, RNDQ_RNSC), neon_qdmulh),
+ nUF(vqdmulhq, vqdmulh, 3, (RNQ, oRNQ, RNDQ_RNSC), neon_qdmulh),
+ nUF(vqrdmulh, vqrdmulh, 3, (RNDQ, oRNDQ, RNDQ_RNSC), neon_qdmulh),
+ nUF(vqrdmulhq, vqrdmulh, 3, (RNQ, oRNQ, RNDQ_RNSC), neon_qdmulh),
+ NUF(vacge, 0000e10, 3, (RNDQ, oRNDQ, RNDQ), neon_fcmp_absolute),
+ NUF(vacgeq, 0000e10, 3, (RNQ, oRNQ, RNQ), neon_fcmp_absolute),
+ NUF(vacgt, 0200e10, 3, (RNDQ, oRNDQ, RNDQ), neon_fcmp_absolute),
+ NUF(vacgtq, 0200e10, 3, (RNQ, oRNQ, RNQ), neon_fcmp_absolute),
+ NUF(vaclt, 0200e10, 3, (RNDQ, oRNDQ, RNDQ), neon_fcmp_absolute_inv),
+ NUF(vacltq, 0200e10, 3, (RNQ, oRNQ, RNQ), neon_fcmp_absolute_inv),
+ NUF(vacle, 0000e10, 3, (RNDQ, oRNDQ, RNDQ), neon_fcmp_absolute_inv),
+ NUF(vacleq, 0000e10, 3, (RNQ, oRNQ, RNQ), neon_fcmp_absolute_inv),
+ NUF(vrecps, 0000f10, 3, (RNDQ, oRNDQ, RNDQ), neon_step),
+ NUF(vrecpsq, 0000f10, 3, (RNQ, oRNQ, RNQ), neon_step),
+ NUF(vrsqrts, 0200f10, 3, (RNDQ, oRNDQ, RNDQ), neon_step),
+ NUF(vrsqrtsq, 0200f10, 3, (RNQ, oRNQ, RNQ), neon_step),
+
+ /* Two address, int/float. Types S8 S16 S32 F32. */
+ NUF(vabsq, 1b10300, 2, (RNQ, RNQ), neon_abs_neg),
+ NUF(vnegq, 1b10380, 2, (RNQ, RNQ), neon_abs_neg),
+
+ /* Data processing with two registers and a shift amount. */
+ /* Right shifts, and variants with rounding.
+ Types accepted S8 S16 S32 S64 U8 U16 U32 U64. */
+ NUF(vshr, 0800010, 3, (RNDQ, oRNDQ, I64z), neon_rshift_round_imm),
+ NUF(vshrq, 0800010, 3, (RNQ, oRNQ, I64z), neon_rshift_round_imm),
+ NUF(vrshr, 0800210, 3, (RNDQ, oRNDQ, I64z), neon_rshift_round_imm),
+ NUF(vrshrq, 0800210, 3, (RNQ, oRNQ, I64z), neon_rshift_round_imm),
+ NUF(vsra, 0800110, 3, (RNDQ, oRNDQ, I64), neon_rshift_round_imm),
+ NUF(vsraq, 0800110, 3, (RNQ, oRNQ, I64), neon_rshift_round_imm),
+ NUF(vrsra, 0800310, 3, (RNDQ, oRNDQ, I64), neon_rshift_round_imm),
+ NUF(vrsraq, 0800310, 3, (RNQ, oRNQ, I64), neon_rshift_round_imm),
+ /* Shift and insert. Sizes accepted 8 16 32 64. */
+ NUF(vsli, 1800510, 3, (RNDQ, oRNDQ, I63), neon_sli),
+ NUF(vsliq, 1800510, 3, (RNQ, oRNQ, I63), neon_sli),
+ NUF(vsri, 1800410, 3, (RNDQ, oRNDQ, I64), neon_sri),
+ NUF(vsriq, 1800410, 3, (RNQ, oRNQ, I64), neon_sri),
+ /* QSHL{U} immediate accepts S8 S16 S32 S64 U8 U16 U32 U64. */
+ NUF(vqshlu, 1800610, 3, (RNDQ, oRNDQ, I63), neon_qshlu_imm),
+ NUF(vqshluq, 1800610, 3, (RNQ, oRNQ, I63), neon_qshlu_imm),
+ /* Right shift immediate, saturating & narrowing, with rounding variants.
+ Types accepted S16 S32 S64 U16 U32 U64. */
+ NUF(vqshrn, 0800910, 3, (RND, RNQ, I32z), neon_rshift_sat_narrow),
+ NUF(vqrshrn, 0800950, 3, (RND, RNQ, I32z), neon_rshift_sat_narrow),
+ /* As above, unsigned. Types accepted S16 S32 S64. */
+ NUF(vqshrun, 0800810, 3, (RND, RNQ, I32z), neon_rshift_sat_narrow_u),
+ NUF(vqrshrun, 0800850, 3, (RND, RNQ, I32z), neon_rshift_sat_narrow_u),
+ /* Right shift narrowing. Types accepted I16 I32 I64. */
+ NUF(vshrn, 0800810, 3, (RND, RNQ, I32z), neon_rshift_narrow),
+ NUF(vrshrn, 0800850, 3, (RND, RNQ, I32z), neon_rshift_narrow),
+ /* Special case. Types S8 S16 S32 U8 U16 U32. Handles max shift variant. */
+ nUF(vshll, vshll, 3, (RNQ, RND, I32), neon_shll),
+ /* CVT with optional immediate for fixed-point variant. */
+ nUF(vcvtq, vcvt, 3, (RNQ, RNQ, oI32b), neon_cvt),
+
+ nUF(vmvn, vmvn, 2, (RNDQ, RNDQ_IMVNb), neon_mvn),
+ nUF(vmvnq, vmvn, 2, (RNQ, RNDQ_IMVNb), neon_mvn),
+
+ /* Data processing, three registers of different lengths. */
+ /* Dyadic, long insns. Types S8 S16 S32 U8 U16 U32. */
+ NUF(vabal, 0800500, 3, (RNQ, RND, RND), neon_abal),
+ NUF(vabdl, 0800700, 3, (RNQ, RND, RND), neon_dyadic_long),
+ NUF(vaddl, 0800000, 3, (RNQ, RND, RND), neon_dyadic_long),
+ NUF(vsubl, 0800200, 3, (RNQ, RND, RND), neon_dyadic_long),
+ /* If not scalar, fall back to neon_dyadic_long.
+ Vector types as above, scalar types S16 S32 U16 U32. */
+ nUF(vmlal, vmlal, 3, (RNQ, RND, RND_RNSC), neon_mac_maybe_scalar_long),
+ nUF(vmlsl, vmlsl, 3, (RNQ, RND, RND_RNSC), neon_mac_maybe_scalar_long),
+ /* Dyadic, widening insns. Types S8 S16 S32 U8 U16 U32. */
+ NUF(vaddw, 0800100, 3, (RNQ, oRNQ, RND), neon_dyadic_wide),
+ NUF(vsubw, 0800300, 3, (RNQ, oRNQ, RND), neon_dyadic_wide),
+ /* Dyadic, narrowing insns. Types I16 I32 I64. */
+ NUF(vaddhn, 0800400, 3, (RND, RNQ, RNQ), neon_dyadic_narrow),
+ NUF(vraddhn, 1800400, 3, (RND, RNQ, RNQ), neon_dyadic_narrow),
+ NUF(vsubhn, 0800600, 3, (RND, RNQ, RNQ), neon_dyadic_narrow),
+ NUF(vrsubhn, 1800600, 3, (RND, RNQ, RNQ), neon_dyadic_narrow),
+ /* Saturating doubling multiplies. Types S16 S32. */
+ nUF(vqdmlal, vqdmlal, 3, (RNQ, RND, RND_RNSC), neon_mul_sat_scalar_long),
+ nUF(vqdmlsl, vqdmlsl, 3, (RNQ, RND, RND_RNSC), neon_mul_sat_scalar_long),
+ nUF(vqdmull, vqdmull, 3, (RNQ, RND, RND_RNSC), neon_mul_sat_scalar_long),
+ /* VMULL. Vector types S8 S16 S32 U8 U16 U32 P8, scalar types
+ S16 S32 U16 U32. */
+ nUF(vmull, vmull, 3, (RNQ, RND, RND_RNSC), neon_vmull),
+
+ /* Extract. Size 8. */
+ NUF(vext, 0b00000, 4, (RNDQ, oRNDQ, RNDQ, I15), neon_ext),
+ NUF(vextq, 0b00000, 4, (RNQ, oRNQ, RNQ, I15), neon_ext),
+
+ /* Two registers, miscellaneous. */
+ /* Reverse. Sizes 8 16 32 (must be < size in opcode). */
+ NUF(vrev64, 1b00000, 2, (RNDQ, RNDQ), neon_rev),
+ NUF(vrev64q, 1b00000, 2, (RNQ, RNQ), neon_rev),
+ NUF(vrev32, 1b00080, 2, (RNDQ, RNDQ), neon_rev),
+ NUF(vrev32q, 1b00080, 2, (RNQ, RNQ), neon_rev),
+ NUF(vrev16, 1b00100, 2, (RNDQ, RNDQ), neon_rev),
+ NUF(vrev16q, 1b00100, 2, (RNQ, RNQ), neon_rev),
+ /* Vector replicate. Sizes 8 16 32. */
+ nCE(vdup, vdup, 2, (RNDQ, RR_RNSC), neon_dup),
+ nCE(vdupq, vdup, 2, (RNQ, RR_RNSC), neon_dup),
+ /* VMOVL. Types S8 S16 S32 U8 U16 U32. */
+ NUF(vmovl, 0800a10, 2, (RNQ, RND), neon_movl),
+ /* VMOVN. Types I16 I32 I64. */
+ nUF(vmovn, vmovn, 2, (RND, RNQ), neon_movn),
+ /* VQMOVN. Types S16 S32 S64 U16 U32 U64. */
+ nUF(vqmovn, vqmovn, 2, (RND, RNQ), neon_qmovn),
+ /* VQMOVUN. Types S16 S32 S64. */
+ nUF(vqmovun, vqmovun, 2, (RND, RNQ), neon_qmovun),
+ /* VZIP / VUZP. Sizes 8 16 32. */
+ NUF(vzip, 1b20180, 2, (RNDQ, RNDQ), neon_zip_uzp),
+ NUF(vzipq, 1b20180, 2, (RNQ, RNQ), neon_zip_uzp),
+ NUF(vuzp, 1b20100, 2, (RNDQ, RNDQ), neon_zip_uzp),
+ NUF(vuzpq, 1b20100, 2, (RNQ, RNQ), neon_zip_uzp),
+ /* VQABS / VQNEG. Types S8 S16 S32. */
+ NUF(vqabs, 1b00700, 2, (RNDQ, RNDQ), neon_sat_abs_neg),
+ NUF(vqabsq, 1b00700, 2, (RNQ, RNQ), neon_sat_abs_neg),
+ NUF(vqneg, 1b00780, 2, (RNDQ, RNDQ), neon_sat_abs_neg),
+ NUF(vqnegq, 1b00780, 2, (RNQ, RNQ), neon_sat_abs_neg),
+ /* Pairwise, lengthening. Types S8 S16 S32 U8 U16 U32. */
+ NUF(vpadal, 1b00600, 2, (RNDQ, RNDQ), neon_pair_long),
+ NUF(vpadalq, 1b00600, 2, (RNQ, RNQ), neon_pair_long),
+ NUF(vpaddl, 1b00200, 2, (RNDQ, RNDQ), neon_pair_long),
+ NUF(vpaddlq, 1b00200, 2, (RNQ, RNQ), neon_pair_long),
+ /* Reciprocal estimates. Types U32 F32. */
+ NUF(vrecpe, 1b30400, 2, (RNDQ, RNDQ), neon_recip_est),
+ NUF(vrecpeq, 1b30400, 2, (RNQ, RNQ), neon_recip_est),
+ NUF(vrsqrte, 1b30480, 2, (RNDQ, RNDQ), neon_recip_est),
+ NUF(vrsqrteq, 1b30480, 2, (RNQ, RNQ), neon_recip_est),
+ /* VCLS. Types S8 S16 S32. */
+ NUF(vcls, 1b00400, 2, (RNDQ, RNDQ), neon_cls),
+ NUF(vclsq, 1b00400, 2, (RNQ, RNQ), neon_cls),
+ /* VCLZ. Types I8 I16 I32. */
+ NUF(vclz, 1b00480, 2, (RNDQ, RNDQ), neon_clz),
+ NUF(vclzq, 1b00480, 2, (RNQ, RNQ), neon_clz),
+ /* VCNT. Size 8. */
+ NUF(vcnt, 1b00500, 2, (RNDQ, RNDQ), neon_cnt),
+ NUF(vcntq, 1b00500, 2, (RNQ, RNQ), neon_cnt),
+ /* Two address, untyped. */
+ NUF(vswp, 1b20000, 2, (RNDQ, RNDQ), neon_swp),
+ NUF(vswpq, 1b20000, 2, (RNQ, RNQ), neon_swp),
+ /* VTRN. Sizes 8 16 32. */
+ nUF(vtrn, vtrn, 2, (RNDQ, RNDQ), neon_trn),
+ nUF(vtrnq, vtrn, 2, (RNQ, RNQ), neon_trn),
+
+ /* Table lookup. Size 8. */
+ NUF(vtbl, 1b00800, 3, (RND, NRDLST, RND), neon_tbl_tbx),
+ NUF(vtbx, 1b00840, 3, (RND, NRDLST, RND), neon_tbl_tbx),
+
+#undef THUMB_VARIANT
+#define THUMB_VARIANT &fpu_vfp_v3_or_neon_ext
+#undef ARM_VARIANT
+#define ARM_VARIANT &fpu_vfp_v3_or_neon_ext
+ /* Neon element/structure load/store. */
+ nUF(vld1, vld1, 2, (NSTRLST, ADDR), neon_ldx_stx),
+ nUF(vst1, vst1, 2, (NSTRLST, ADDR), neon_ldx_stx),
+ nUF(vld2, vld2, 2, (NSTRLST, ADDR), neon_ldx_stx),
+ nUF(vst2, vst2, 2, (NSTRLST, ADDR), neon_ldx_stx),
+ nUF(vld3, vld3, 2, (NSTRLST, ADDR), neon_ldx_stx),
+ nUF(vst3, vst3, 2, (NSTRLST, ADDR), neon_ldx_stx),
+ nUF(vld4, vld4, 2, (NSTRLST, ADDR), neon_ldx_stx),
+ nUF(vst4, vst4, 2, (NSTRLST, ADDR), neon_ldx_stx),
+
+#undef THUMB_VARIANT
+#define THUMB_VARIANT &fpu_vfp_ext_v3
+#undef ARM_VARIANT
+#define ARM_VARIANT &fpu_vfp_ext_v3
+ cCE(fconsts, eb00a00, 2, (RVS, I255), vfp_sp_const),
+ cCE(fconstd, eb00b00, 2, (RVD, I255), vfp_dp_const),
+ cCE(fshtos, eba0a40, 2, (RVS, I16z), vfp_sp_conv_16),
+ cCE(fshtod, eba0b40, 2, (RVD, I16z), vfp_dp_conv_16),
+ cCE(fsltos, eba0ac0, 2, (RVS, I32), vfp_sp_conv_32),
+ cCE(fsltod, eba0bc0, 2, (RVD, I32), vfp_dp_conv_32),
+ cCE(fuhtos, ebb0a40, 2, (RVS, I16z), vfp_sp_conv_16),
+ cCE(fuhtod, ebb0b40, 2, (RVD, I16z), vfp_dp_conv_16),
+ cCE(fultos, ebb0ac0, 2, (RVS, I32), vfp_sp_conv_32),
+ cCE(fultod, ebb0bc0, 2, (RVD, I32), vfp_dp_conv_32),
+ cCE(ftoshs, ebe0a40, 2, (RVS, I16z), vfp_sp_conv_16),
+ cCE(ftoshd, ebe0b40, 2, (RVD, I16z), vfp_dp_conv_16),
+ cCE(ftosls, ebe0ac0, 2, (RVS, I32), vfp_sp_conv_32),
+ cCE(ftosld, ebe0bc0, 2, (RVD, I32), vfp_dp_conv_32),
+ cCE(ftouhs, ebf0a40, 2, (RVS, I16z), vfp_sp_conv_16),
+ cCE(ftouhd, ebf0b40, 2, (RVD, I16z), vfp_dp_conv_16),
+ cCE(ftouls, ebf0ac0, 2, (RVS, I32), vfp_sp_conv_32),
+ cCE(ftould, ebf0bc0, 2, (RVD, I32), vfp_dp_conv_32),
+
+#undef THUMB_VARIANT
#undef ARM_VARIANT
#define ARM_VARIANT &arm_cext_xscale /* Intel XScale extensions. */
cCE(mia, e200010, 3, (RXA, RRnpc, RRnpc), xsc_mia),
@@ -9996,7 +16160,7 @@ static const struct asm_opcode insns[] =
cCE(tinsrb, e600010, 3, (RIWR, RR, I7), iwmmxt_tinsr),
cCE(tinsrh, e600050, 3, (RIWR, RR, I7), iwmmxt_tinsr),
cCE(tinsrw, e600090, 3, (RIWR, RR, I7), iwmmxt_tinsr),
- cCE(tmcr, e000110, 2, (RIWC, RR), rn_rd),
+ cCE(tmcr, e000110, 2, (RIWC_RIWG, RR), rn_rd),
cCE(tmcrr, c400000, 3, (RIWR, RR, RR), rm_rd_rn),
cCE(tmia, e200010, 3, (RIWR, RR, RR), iwmmxt_tmia),
cCE(tmiaph, e280010, 3, (RIWR, RR, RR), iwmmxt_tmia),
@@ -10007,7 +16171,7 @@ static const struct asm_opcode insns[] =
cCE(tmovmskb, e100030, 2, (RR, RIWR), rd_rn),
cCE(tmovmskh, e500030, 2, (RR, RIWR), rd_rn),
cCE(tmovmskw, e900030, 2, (RR, RIWR), rd_rn),
- cCE(tmrc, e100110, 2, (RR, RIWC), rd_rn),
+ cCE(tmrc, e100110, 2, (RR, RIWC_RIWG), rd_rn),
cCE(tmrrc, c500000, 3, (RR, RR, RIWR), rd_rn_rm),
cCE(torcb, e13f150, 1, (RR), iwmmxt_tandorc),
cCE(torch, e53f150, 1, (RR), iwmmxt_tandorc),
@@ -10078,34 +16242,34 @@ static const struct asm_opcode insns[] =
cCE(wpackwus, e900080, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
cCE(wpackdss, ef00080, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
cCE(wpackdus, ed00080, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
- cCE(wrorh, e700040, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wrorh, e700040, 3, (RIWR, RIWR, RIWR_I32z),iwmmxt_wrwrwr_or_imm5),
cCE(wrorhg, e700148, 3, (RIWR, RIWR, RIWG), rd_rn_rm),
- cCE(wrorw, eb00040, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wrorw, eb00040, 3, (RIWR, RIWR, RIWR_I32z),iwmmxt_wrwrwr_or_imm5),
cCE(wrorwg, eb00148, 3, (RIWR, RIWR, RIWG), rd_rn_rm),
- cCE(wrord, ef00040, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wrord, ef00040, 3, (RIWR, RIWR, RIWR_I32z),iwmmxt_wrwrwr_or_imm5),
cCE(wrordg, ef00148, 3, (RIWR, RIWR, RIWG), rd_rn_rm),
cCE(wsadb, e000120, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
cCE(wsadbz, e100120, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
cCE(wsadh, e400120, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
cCE(wsadhz, e500120, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
cCE(wshufh, e0001e0, 3, (RIWR, RIWR, I255), iwmmxt_wshufh),
- cCE(wsllh, e500040, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wsllh, e500040, 3, (RIWR, RIWR, RIWR_I32z),iwmmxt_wrwrwr_or_imm5),
cCE(wsllhg, e500148, 3, (RIWR, RIWR, RIWG), rd_rn_rm),
- cCE(wsllw, e900040, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wsllw, e900040, 3, (RIWR, RIWR, RIWR_I32z),iwmmxt_wrwrwr_or_imm5),
cCE(wsllwg, e900148, 3, (RIWR, RIWR, RIWG), rd_rn_rm),
- cCE(wslld, ed00040, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wslld, ed00040, 3, (RIWR, RIWR, RIWR_I32z),iwmmxt_wrwrwr_or_imm5),
cCE(wslldg, ed00148, 3, (RIWR, RIWR, RIWG), rd_rn_rm),
- cCE(wsrah, e400040, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wsrah, e400040, 3, (RIWR, RIWR, RIWR_I32z),iwmmxt_wrwrwr_or_imm5),
cCE(wsrahg, e400148, 3, (RIWR, RIWR, RIWG), rd_rn_rm),
- cCE(wsraw, e800040, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wsraw, e800040, 3, (RIWR, RIWR, RIWR_I32z),iwmmxt_wrwrwr_or_imm5),
cCE(wsrawg, e800148, 3, (RIWR, RIWR, RIWG), rd_rn_rm),
- cCE(wsrad, ec00040, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wsrad, ec00040, 3, (RIWR, RIWR, RIWR_I32z),iwmmxt_wrwrwr_or_imm5),
cCE(wsradg, ec00148, 3, (RIWR, RIWR, RIWG), rd_rn_rm),
- cCE(wsrlh, e600040, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wsrlh, e600040, 3, (RIWR, RIWR, RIWR_I32z),iwmmxt_wrwrwr_or_imm5),
cCE(wsrlhg, e600148, 3, (RIWR, RIWR, RIWG), rd_rn_rm),
- cCE(wsrlw, ea00040, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wsrlw, ea00040, 3, (RIWR, RIWR, RIWR_I32z),iwmmxt_wrwrwr_or_imm5),
cCE(wsrlwg, ea00148, 3, (RIWR, RIWR, RIWG), rd_rn_rm),
- cCE(wsrld, ee00040, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wsrld, ee00040, 3, (RIWR, RIWR, RIWR_I32z),iwmmxt_wrwrwr_or_imm5),
cCE(wsrldg, ee00148, 3, (RIWR, RIWR, RIWG), rd_rn_rm),
cCE(wstrb, c000000, 2, (RIWR, ADDR), iwmmxt_wldstbh),
cCE(wstrh, c400000, 2, (RIWR, ADDR), iwmmxt_wldstbh),
@@ -10142,15 +16306,75 @@ static const struct asm_opcode insns[] =
cCE(wzero, e300000, 1, (RIWR), iwmmxt_wzero),
#undef ARM_VARIANT
+#define ARM_VARIANT &arm_cext_iwmmxt2 /* Intel Wireless MMX technology, version 2. */
+ cCE(torvscb, e13f190, 1, (RR), iwmmxt_tandorc),
+ cCE(torvsch, e53f190, 1, (RR), iwmmxt_tandorc),
+ cCE(torvscw, e93f190, 1, (RR), iwmmxt_tandorc),
+ cCE(wabsb, e2001c0, 2, (RIWR, RIWR), rd_rn),
+ cCE(wabsh, e6001c0, 2, (RIWR, RIWR), rd_rn),
+ cCE(wabsw, ea001c0, 2, (RIWR, RIWR), rd_rn),
+ cCE(wabsdiffb, e1001c0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wabsdiffh, e5001c0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wabsdiffw, e9001c0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(waddbhusl, e2001a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(waddbhusm, e6001a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(waddhc, e600180, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(waddwc, ea00180, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(waddsubhx, ea001a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wavg4, e400000, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wavg4r, e500000, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmaddsn, ee00100, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmaddsx, eb00100, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmaddun, ec00100, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmaddux, e900100, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmerge, e000080, 4, (RIWR, RIWR, RIWR, I7), iwmmxt_wmerge),
+ cCE(wmiabb, e0000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiabt, e1000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiatb, e2000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiatt, e3000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiabbn, e4000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiabtn, e5000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiatbn, e6000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiattn, e7000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiawbb, e800120, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiawbt, e900120, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiawtb, ea00120, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiawtt, eb00120, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiawbbn, ec00120, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiawbtn, ed00120, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiawtbn, ee00120, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmiawttn, ef00120, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmulsmr, ef00100, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmulumr, ed00100, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmulwumr, ec000c0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmulwsmr, ee000c0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmulwum, ed000c0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmulwsm, ef000c0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wmulwl, eb000c0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wqmiabb, e8000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wqmiabt, e9000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wqmiatb, ea000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wqmiatt, eb000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wqmiabbn, ec000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wqmiabtn, ed000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wqmiatbn, ee000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wqmiattn, ef000a0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wqmulm, e100080, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wqmulmr, e300080, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wqmulwm, ec000e0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wqmulwmr, ee000e0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+ cCE(wsubaddhx, ed001c0, 3, (RIWR, RIWR, RIWR), rd_rn_rm),
+
+#undef ARM_VARIANT
#define ARM_VARIANT &arm_cext_maverick /* Cirrus Maverick instructions. */
- cCE(cfldrs, c100400, 2, (RMF, ADDR), rd_cpaddr),
- cCE(cfldrd, c500400, 2, (RMD, ADDR), rd_cpaddr),
- cCE(cfldr32, c100500, 2, (RMFX, ADDR), rd_cpaddr),
- cCE(cfldr64, c500500, 2, (RMDX, ADDR), rd_cpaddr),
- cCE(cfstrs, c000400, 2, (RMF, ADDR), rd_cpaddr),
- cCE(cfstrd, c400400, 2, (RMD, ADDR), rd_cpaddr),
- cCE(cfstr32, c000500, 2, (RMFX, ADDR), rd_cpaddr),
- cCE(cfstr64, c400500, 2, (RMDX, ADDR), rd_cpaddr),
+ cCE(cfldrs, c100400, 2, (RMF, ADDRGLDC), rd_cpaddr),
+ cCE(cfldrd, c500400, 2, (RMD, ADDRGLDC), rd_cpaddr),
+ cCE(cfldr32, c100500, 2, (RMFX, ADDRGLDC), rd_cpaddr),
+ cCE(cfldr64, c500500, 2, (RMDX, ADDRGLDC), rd_cpaddr),
+ cCE(cfstrs, c000400, 2, (RMF, ADDRGLDC), rd_cpaddr),
+ cCE(cfstrd, c400400, 2, (RMD, ADDRGLDC), rd_cpaddr),
+ cCE(cfstr32, c000500, 2, (RMFX, ADDRGLDC), rd_cpaddr),
+ cCE(cfstr64, c400500, 2, (RMDX, ADDRGLDC), rd_cpaddr),
cCE(cfmvsr, e000450, 2, (RMF, RR), rn_rd),
cCE(cfmvrs, e100450, 2, (RR, RMF), rd_rn),
cCE(cfmvdlr, e000410, 2, (RMD, RR), rn_rd),
@@ -10235,6 +16459,10 @@ static const struct asm_opcode insns[] =
#undef UE
#undef UF
#undef UT
+#undef NUF
+#undef nUF
+#undef NCE
+#undef nCE
#undef OPS0
#undef OPS1
#undef OPS2
@@ -10428,7 +16656,10 @@ md_convert_frag (bfd *abfd, segT asec ATTRIBUTE_UNUSED, fragS *fragp)
insn = THUMB_OP32 (opcode);
insn |= (old_op & 0xf0) << 4;
put_thumb32_insn (buf, insn);
- reloc_type = BFD_RELOC_ARM_T32_IMMEDIATE;
+ if (opcode == T_MNEM_add_pc)
+ reloc_type = BFD_RELOC_ARM_T32_IMM12;
+ else
+ reloc_type = BFD_RELOC_ARM_T32_ADD_IMM;
}
else
reloc_type = BFD_RELOC_ARM_THUMB_ADD;
@@ -10445,7 +16676,10 @@ md_convert_frag (bfd *abfd, segT asec ATTRIBUTE_UNUSED, fragS *fragp)
insn |= (old_op & 0xf0) << 4;
insn |= (old_op & 0xf) << 16;
put_thumb32_insn (buf, insn);
- reloc_type = BFD_RELOC_ARM_T32_IMMEDIATE;
+ if (insn & (1 << 20))
+ reloc_type = BFD_RELOC_ARM_T32_ADD_IMM;
+ else
+ reloc_type = BFD_RELOC_ARM_T32_IMMEDIATE;
}
else
reloc_type = BFD_RELOC_ARM_THUMB_ADD;
@@ -10479,16 +16713,42 @@ relax_immediate (fragS *fragp, int size, int shift)
offset = fragp->fr_offset;
/* Force misaligned offsets to 32-bit variant. */
if (offset & low)
- return -4;
+ return 4;
if (offset & ~mask)
return 4;
return 2;
}
+/* Get the address of a symbol during relaxation. */
+static addressT
+relaxed_symbol_addr(fragS *fragp, long stretch)
+{
+ fragS *sym_frag;
+ addressT addr;
+ symbolS *sym;
+
+ sym = fragp->fr_symbol;
+ sym_frag = symbol_get_frag (sym);
+ know (S_GET_SEGMENT (sym) != absolute_section
+ || sym_frag == &zero_address_frag);
+ addr = S_GET_VALUE (sym) + fragp->fr_offset;
+
+ /* If frag has yet to be reached on this pass, assume it will
+ move by STRETCH just as we did. If this is not so, it will
+ be because some frag between grows, and that will force
+ another pass. */
+
+ if (stretch != 0
+ && sym_frag->relax_marker != fragp->relax_marker)
+ addr += stretch;
+
+ return addr;
+}
+
/* Return the size of a relaxable adr pseudo-instruction or PC-relative
load. */
static int
-relax_adr (fragS *fragp, asection *sec)
+relax_adr (fragS *fragp, asection *sec, long stretch)
{
addressT addr;
offsetT val;
@@ -10498,14 +16758,12 @@ relax_adr (fragS *fragp, asection *sec)
|| sec != S_GET_SEGMENT (fragp->fr_symbol))
return 4;
- val = S_GET_VALUE(fragp->fr_symbol) + fragp->fr_offset;
+ val = relaxed_symbol_addr(fragp, stretch);
addr = fragp->fr_address + fragp->fr_fix;
addr = (addr + 4) & ~3;
- /* Fix the insn as the 4-byte version if the target address is not
- sufficiently aligned. This is prevents an infinite loop when two
- instructions have contradictory range/alignment requirements. */
+ /* Force misaligned targets to 32-bit variant. */
if (val & 3)
- return -4;
+ return 4;
val -= addr;
if (val < 0 || val > 1020)
return 4;
@@ -10532,7 +16790,7 @@ relax_addsub (fragS *fragp, asection *sec)
size of the offset field in the narrow instruction. */
static int
-relax_branch (fragS *fragp, asection *sec, int bits)
+relax_branch (fragS *fragp, asection *sec, int bits, long stretch)
{
addressT addr;
offsetT val;
@@ -10543,7 +16801,7 @@ relax_branch (fragS *fragp, asection *sec, int bits)
|| sec != S_GET_SEGMENT (fragp->fr_symbol))
return 4;
- val = S_GET_VALUE(fragp->fr_symbol) + fragp->fr_offset;
+ val = relaxed_symbol_addr(fragp, stretch);
addr = fragp->fr_address + fragp->fr_fix + 4;
val -= addr;
@@ -10559,7 +16817,7 @@ relax_branch (fragS *fragp, asection *sec, int bits)
the current size of the frag should change. */
int
-arm_relax_frag (asection *sec, fragS *fragp, long stretch ATTRIBUTE_UNUSED)
+arm_relax_frag (asection *sec, fragS *fragp, long stretch)
{
int oldsize;
int newsize;
@@ -10568,7 +16826,7 @@ arm_relax_frag (asection *sec, fragS *fragp, long stretch ATTRIBUTE_UNUSED)
switch (fragp->fr_subtype)
{
case T_MNEM_ldr_pc2:
- newsize = relax_adr(fragp, sec);
+ newsize = relax_adr(fragp, sec, stretch);
break;
case T_MNEM_ldr_pc:
case T_MNEM_ldr_sp:
@@ -10588,7 +16846,7 @@ arm_relax_frag (asection *sec, fragS *fragp, long stretch ATTRIBUTE_UNUSED)
newsize = relax_immediate(fragp, 5, 0);
break;
case T_MNEM_adr:
- newsize = relax_adr(fragp, sec);
+ newsize = relax_adr(fragp, sec, stretch);
break;
case T_MNEM_mov:
case T_MNEM_movs:
@@ -10597,10 +16855,10 @@ arm_relax_frag (asection *sec, fragS *fragp, long stretch ATTRIBUTE_UNUSED)
newsize = relax_immediate(fragp, 8, 0);
break;
case T_MNEM_b:
- newsize = relax_branch(fragp, sec, 11);
+ newsize = relax_branch(fragp, sec, 11, stretch);
break;
case T_MNEM_bcond:
- newsize = relax_branch(fragp, sec, 8);
+ newsize = relax_branch(fragp, sec, 8, stretch);
break;
case T_MNEM_add_sp:
case T_MNEM_add_pc:
@@ -10619,14 +16877,18 @@ arm_relax_frag (asection *sec, fragS *fragp, long stretch ATTRIBUTE_UNUSED)
default:
abort();
}
- if (newsize < 0)
+
+ fragp->fr_var = newsize;
+ /* Freeze wide instructions that are at or before the same location as
+ in the previous pass. This avoids infinite loops.
+ Don't freeze them unconditionally because targets may be artificialy
+ misaligned by the expansion of preceeding frags. */
+ if (stretch <= 0 && newsize > 2)
{
- fragp->fr_var = -newsize;
md_convert_frag (sec->owner, sec, fragp);
frag_wane(fragp);
- return -(newsize + oldsize);
}
- fragp->fr_var = newsize;
+
return newsize - oldsize;
}
@@ -10636,12 +16898,22 @@ valueT
md_section_align (segT segment ATTRIBUTE_UNUSED,
valueT size)
{
-#ifdef OBJ_ELF
- return size;
-#else
- /* Round all sects to multiple of 4. */
- return (size + 3) & ~3;
+#if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
+ if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
+ {
+ /* For a.out, force the section size to be aligned. If we don't do
+ this, BFD will align it for us, but it will not write out the
+ final bytes of the section. This may be a bug in BFD, but it is
+ easier to fix it here since that is how the other a.out targets
+ work. */
+ int align;
+
+ align = bfd_get_section_alignment (stdoutput, segment);
+ size = ((size + (1 << align) - 1) & ((valueT) -1 << align));
+ }
#endif
+
+ return size;
}
/* This is called from HANDLE_ALIGN in write.c. Fill in the contents
@@ -10893,7 +17165,7 @@ finish_unwind_opcodes (void)
if (unwind.fp_used)
{
- /* Adjust sp as neccessary. */
+ /* Adjust sp as necessary. */
unwind.pending_offset += unwind.fp_offset - unwind.frame_size;
flush_pending_unwind ();
@@ -11141,12 +17413,22 @@ create_unwind_entry (int have_data)
return 0;
}
+
+/* Initialize the DWARF-2 unwind information for this procedure. */
+
+void
+tc_arm_frame_initial_instructions (void)
+{
+ cfi_add_CFA_def_cfa (REG_SP, 0);
+}
+#endif /* OBJ_ELF */
+
/* Convert REGNAME to a DWARF-2 register number. */
int
-tc_arm_regname_to_dw2regnum (const char *regname)
+tc_arm_regname_to_dw2regnum (char *regname)
{
- int reg = arm_reg_parse ((char **) &regname, REG_TYPE_RN);
+ int reg = arm_reg_parse (&regname, REG_TYPE_RN);
if (reg == FAIL)
return -1;
@@ -11154,15 +17436,18 @@ tc_arm_regname_to_dw2regnum (const char *regname)
return reg;
}
-/* Initialize the DWARF-2 unwind information for this procedure. */
-
+#ifdef TE_PE
void
-tc_arm_frame_initial_instructions (void)
+tc_pe_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
{
- cfi_add_CFA_def_cfa (REG_SP, 0);
-}
-#endif /* OBJ_ELF */
+ expressionS expr;
+ expr.X_op = O_secrel;
+ expr.X_add_symbol = symbol;
+ expr.X_add_number = 0;
+ emit_expr (&expr, size);
+}
+#endif
/* MD interface: Symbol and relocation handling. */
@@ -11179,10 +17464,16 @@ md_pcrel_from_section (fixS * fixP, segT seg)
/* If this is pc-relative and we are going to emit a relocation
then we just want to put out any pipeline compensation that the linker
- will need. Otherwise we want to use the calculated base. */
+ will need. Otherwise we want to use the calculated base.
+ For WinCE we skip the bias for externals as well, since this
+ is how the MS ARM-CE assembler behaves and we want to be compatible. */
if (fixP->fx_pcrel
&& ((fixP->fx_addsy && S_GET_SEGMENT (fixP->fx_addsy) != seg)
- || arm_force_relocation (fixP)))
+ || (arm_force_relocation (fixP)
+#ifdef TE_WINCE
+ && !S_IS_EXTERNAL (fixP->fx_addsy)
+#endif
+ )))
base = 0;
switch (fixP->fx_r_type)
@@ -11219,6 +17510,17 @@ md_pcrel_from_section (fixS * fixP, segT seg)
case BFD_RELOC_ARM_PCREL_BLX:
case BFD_RELOC_ARM_PLT32:
#ifdef TE_WINCE
+ /* When handling fixups immediately, because we have already
+ discovered the value of a symbol, or the address of the frag involved
+ we must account for the offset by +8, as the OS loader will never see the reloc.
+ see fixup_segment() in write.c
+ The S_IS_EXTERNAL test handles the case of global symbols.
+ Those need the calculated base, not just the pipe compensation the linker will need. */
+ if (fixP->fx_pcrel
+ && fixP->fx_addsy != NULL
+ && (S_GET_SEGMENT (fixP->fx_addsy) == seg)
+ && (S_IS_EXTERNAL (fixP->fx_addsy) || !arm_force_relocation (fixP)))
+ return base + 8;
return base;
#else
return base + 8;
@@ -11406,11 +17708,11 @@ negate_data_op (unsigned long * instruction,
/* Like negate_data_op, but for Thumb-2. */
static unsigned int
-thumb32_negate_data_op (offsetT *instruction, offsetT value)
+thumb32_negate_data_op (offsetT *instruction, unsigned int value)
{
int op, new_inst;
int rd;
- offsetT negated, inverted;
+ unsigned int negated, inverted;
negated = encode_thumb32_immediate (-value);
inverted = encode_thumb32_immediate (~value);
@@ -11471,7 +17773,7 @@ thumb32_negate_data_op (offsetT *instruction, offsetT value)
return FAIL;
}
- if (value == FAIL)
+ if (value == (unsigned int)FAIL)
return FAIL;
*instruction &= T2_OPCODE_MASK;
@@ -11528,6 +17830,7 @@ md_apply_fix (fixS * fixP,
assert (fixP->fx_r_type <= BFD_RELOC_UNUSED);
/* Note whether this will delete the relocation. */
+
if (fixP->fx_addsy == 0 && !fixP->fx_pcrel)
fixP->fx_done = 1;
@@ -11676,7 +17979,7 @@ md_apply_fix (fixS * fixP,
as_bad_where (fixP->fx_file, fixP->fx_line,
_("invalid literal constant: pool needs to be closer"));
else
- as_bad (_("bad immediate value for half-word offset (%ld)"),
+ as_bad (_("bad immediate value for 8-bit offset (%ld)"),
(long) value);
break;
}
@@ -11835,6 +18138,7 @@ md_apply_fix (fixS * fixP,
break;
case BFD_RELOC_ARM_T32_IMMEDIATE:
+ case BFD_RELOC_ARM_T32_ADD_IMM:
case BFD_RELOC_ARM_T32_IMM12:
case BFD_RELOC_ARM_T32_ADD_PC12:
/* We claim that this fixup has been processed here,
@@ -11855,15 +18159,21 @@ md_apply_fix (fixS * fixP,
newval <<= 16;
newval |= md_chars_to_number (buf+2, THUMB_SIZE);
- /* FUTURE: Implement analogue of negate_data_op for T32. */
- if (fixP->fx_r_type == BFD_RELOC_ARM_T32_IMMEDIATE)
+ newimm = FAIL;
+ if (fixP->fx_r_type == BFD_RELOC_ARM_T32_IMMEDIATE
+ || fixP->fx_r_type == BFD_RELOC_ARM_T32_ADD_IMM)
{
newimm = encode_thumb32_immediate (value);
if (newimm == (unsigned int) FAIL)
newimm = thumb32_negate_data_op (&newval, value);
}
- else
+ if (fixP->fx_r_type != BFD_RELOC_ARM_T32_IMMEDIATE
+ && newimm == (unsigned int) FAIL)
{
+ /* Turn add/sum into addw/subw. */
+ if (fixP->fx_r_type == BFD_RELOC_ARM_T32_ADD_IMM)
+ newval = (newval & 0xfeffffff) | 0x02000000;
+
/* 12 bit immediate for addw/subw. */
if (value < 0)
{
@@ -11977,18 +18287,34 @@ md_apply_fix (fixS * fixP,
}
break;
- case BFD_RELOC_THUMB_PCREL_BRANCH7: /* CZB */
- /* CZB can only branch forward. */
- if (value & ~0x7e)
- as_bad_where (fixP->fx_file, fixP->fx_line,
- _("branch out of range"));
+ case BFD_RELOC_THUMB_PCREL_BRANCH7: /* CBZ */
+ /* CBZ can only branch forward. */
- if (fixP->fx_done || !seg->use_rela_p)
+ /* Attempts to use CBZ to branch to the next instruction
+ (which, strictly speaking, are prohibited) will be turned into
+ no-ops.
+
+ FIXME: It may be better to remove the instruction completely and
+ perform relaxation. */
+ if (value == -2)
{
newval = md_chars_to_number (buf, THUMB_SIZE);
- newval |= ((value & 0x3e) << 2) | ((value & 0x40) << 3);
+ newval = 0xbf00; /* NOP encoding T1 */
md_number_to_chars (buf, newval, THUMB_SIZE);
}
+ else
+ {
+ if (value & ~0x7e)
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("branch out of range"));
+
+ if (fixP->fx_done || !seg->use_rela_p)
+ {
+ newval = md_chars_to_number (buf, THUMB_SIZE);
+ newval |= ((value & 0x3e) << 2) | ((value & 0x40) << 3);
+ md_number_to_chars (buf, newval, THUMB_SIZE);
+ }
+ }
break;
case BFD_RELOC_THUMB_PCREL_BRANCH9: /* Conditional branch. */
@@ -12129,8 +18455,15 @@ md_apply_fix (fixS * fixP,
case BFD_RELOC_ARM_ROSEGREL32:
case BFD_RELOC_ARM_SBREL32:
case BFD_RELOC_32_PCREL:
+#ifdef TE_PE
+ case BFD_RELOC_32_SECREL:
+#endif
if (fixP->fx_done || !seg->use_rela_p)
- md_number_to_chars (buf, value, 4);
+#ifdef TE_WINCE
+ /* For WinCE we only do this for pcrel fixups. */
+ if (fixP->fx_done || fixP->fx_pcrel)
+#endif
+ md_number_to_chars (buf, value, 4);
break;
#ifdef OBJ_ELF
@@ -12165,8 +18498,6 @@ md_apply_fix (fixS * fixP,
newval = get_thumb32_insn (buf);
newval &= 0xff7fff00;
newval |= (value >> 2) | (sign ? INDEX_UP : 0);
- if (value == 0)
- newval &= ~WRITE_BACK;
if (fixP->fx_r_type == BFD_RELOC_ARM_CP_OFF_IMM
|| fixP->fx_r_type == BFD_RELOC_ARM_CP_OFF_IMM_S2)
md_number_to_chars (buf, newval, INSN_SIZE);
@@ -12358,6 +18689,216 @@ md_apply_fix (fixS * fixP,
fixP->fx_done = 0;
return;
+ case BFD_RELOC_ARM_MOVW:
+ case BFD_RELOC_ARM_MOVT:
+ case BFD_RELOC_ARM_THUMB_MOVW:
+ case BFD_RELOC_ARM_THUMB_MOVT:
+ if (fixP->fx_done || !seg->use_rela_p)
+ {
+ /* REL format relocations are limited to a 16-bit addend. */
+ if (!fixP->fx_done)
+ {
+ if (value < -0x1000 || value > 0xffff)
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("offset too big"));
+ }
+ else if (fixP->fx_r_type == BFD_RELOC_ARM_MOVT
+ || fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVT)
+ {
+ value >>= 16;
+ }
+
+ if (fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVW
+ || fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVT)
+ {
+ newval = get_thumb32_insn (buf);
+ newval &= 0xfbf08f00;
+ newval |= (value & 0xf000) << 4;
+ newval |= (value & 0x0800) << 15;
+ newval |= (value & 0x0700) << 4;
+ newval |= (value & 0x00ff);
+ put_thumb32_insn (buf, newval);
+ }
+ else
+ {
+ newval = md_chars_to_number (buf, 4);
+ newval &= 0xfff0f000;
+ newval |= value & 0x0fff;
+ newval |= (value & 0xf000) << 4;
+ md_number_to_chars (buf, newval, 4);
+ }
+ }
+ return;
+
+ case BFD_RELOC_ARM_ALU_PC_G0_NC:
+ case BFD_RELOC_ARM_ALU_PC_G0:
+ case BFD_RELOC_ARM_ALU_PC_G1_NC:
+ case BFD_RELOC_ARM_ALU_PC_G1:
+ case BFD_RELOC_ARM_ALU_PC_G2:
+ case BFD_RELOC_ARM_ALU_SB_G0_NC:
+ case BFD_RELOC_ARM_ALU_SB_G0:
+ case BFD_RELOC_ARM_ALU_SB_G1_NC:
+ case BFD_RELOC_ARM_ALU_SB_G1:
+ case BFD_RELOC_ARM_ALU_SB_G2:
+ assert (!fixP->fx_done);
+ if (!seg->use_rela_p)
+ {
+ bfd_vma insn;
+ bfd_vma encoded_addend;
+ bfd_vma addend_abs = abs (value);
+
+ /* Check that the absolute value of the addend can be
+ expressed as an 8-bit constant plus a rotation. */
+ encoded_addend = encode_arm_immediate (addend_abs);
+ if (encoded_addend == (unsigned int) FAIL)
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("the offset 0x%08lX is not representable"),
+ addend_abs);
+
+ /* Extract the instruction. */
+ insn = md_chars_to_number (buf, INSN_SIZE);
+
+ /* If the addend is positive, use an ADD instruction.
+ Otherwise use a SUB. Take care not to destroy the S bit. */
+ insn &= 0xff1fffff;
+ if (value < 0)
+ insn |= 1 << 22;
+ else
+ insn |= 1 << 23;
+
+ /* Place the encoded addend into the first 12 bits of the
+ instruction. */
+ insn &= 0xfffff000;
+ insn |= encoded_addend;
+
+ /* Update the instruction. */
+ md_number_to_chars (buf, insn, INSN_SIZE);
+ }
+ break;
+
+ case BFD_RELOC_ARM_LDR_PC_G0:
+ case BFD_RELOC_ARM_LDR_PC_G1:
+ case BFD_RELOC_ARM_LDR_PC_G2:
+ case BFD_RELOC_ARM_LDR_SB_G0:
+ case BFD_RELOC_ARM_LDR_SB_G1:
+ case BFD_RELOC_ARM_LDR_SB_G2:
+ assert (!fixP->fx_done);
+ if (!seg->use_rela_p)
+ {
+ bfd_vma insn;
+ bfd_vma addend_abs = abs (value);
+
+ /* Check that the absolute value of the addend can be
+ encoded in 12 bits. */
+ if (addend_abs >= 0x1000)
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("bad offset 0x%08lX (only 12 bits available for the magnitude)"),
+ addend_abs);
+
+ /* Extract the instruction. */
+ insn = md_chars_to_number (buf, INSN_SIZE);
+
+ /* If the addend is negative, clear bit 23 of the instruction.
+ Otherwise set it. */
+ if (value < 0)
+ insn &= ~(1 << 23);
+ else
+ insn |= 1 << 23;
+
+ /* Place the absolute value of the addend into the first 12 bits
+ of the instruction. */
+ insn &= 0xfffff000;
+ insn |= addend_abs;
+
+ /* Update the instruction. */
+ md_number_to_chars (buf, insn, INSN_SIZE);
+ }
+ break;
+
+ case BFD_RELOC_ARM_LDRS_PC_G0:
+ case BFD_RELOC_ARM_LDRS_PC_G1:
+ case BFD_RELOC_ARM_LDRS_PC_G2:
+ case BFD_RELOC_ARM_LDRS_SB_G0:
+ case BFD_RELOC_ARM_LDRS_SB_G1:
+ case BFD_RELOC_ARM_LDRS_SB_G2:
+ assert (!fixP->fx_done);
+ if (!seg->use_rela_p)
+ {
+ bfd_vma insn;
+ bfd_vma addend_abs = abs (value);
+
+ /* Check that the absolute value of the addend can be
+ encoded in 8 bits. */
+ if (addend_abs >= 0x100)
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("bad offset 0x%08lX (only 8 bits available for the magnitude)"),
+ addend_abs);
+
+ /* Extract the instruction. */
+ insn = md_chars_to_number (buf, INSN_SIZE);
+
+ /* If the addend is negative, clear bit 23 of the instruction.
+ Otherwise set it. */
+ if (value < 0)
+ insn &= ~(1 << 23);
+ else
+ insn |= 1 << 23;
+
+ /* Place the first four bits of the absolute value of the addend
+ into the first 4 bits of the instruction, and the remaining
+ four into bits 8 .. 11. */
+ insn &= 0xfffff0f0;
+ insn |= (addend_abs & 0xf) | ((addend_abs & 0xf0) << 4);
+
+ /* Update the instruction. */
+ md_number_to_chars (buf, insn, INSN_SIZE);
+ }
+ break;
+
+ case BFD_RELOC_ARM_LDC_PC_G0:
+ case BFD_RELOC_ARM_LDC_PC_G1:
+ case BFD_RELOC_ARM_LDC_PC_G2:
+ case BFD_RELOC_ARM_LDC_SB_G0:
+ case BFD_RELOC_ARM_LDC_SB_G1:
+ case BFD_RELOC_ARM_LDC_SB_G2:
+ assert (!fixP->fx_done);
+ if (!seg->use_rela_p)
+ {
+ bfd_vma insn;
+ bfd_vma addend_abs = abs (value);
+
+ /* Check that the absolute value of the addend is a multiple of
+ four and, when divided by four, fits in 8 bits. */
+ if (addend_abs & 0x3)
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("bad offset 0x%08lX (must be word-aligned)"),
+ addend_abs);
+
+ if ((addend_abs >> 2) > 0xff)
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("bad offset 0x%08lX (must be an 8-bit number of words)"),
+ addend_abs);
+
+ /* Extract the instruction. */
+ insn = md_chars_to_number (buf, INSN_SIZE);
+
+ /* If the addend is negative, clear bit 23 of the instruction.
+ Otherwise set it. */
+ if (value < 0)
+ insn &= ~(1 << 23);
+ else
+ insn |= 1 << 23;
+
+ /* Place the addend (divided by four) into the first eight
+ bits of the instruction. */
+ insn &= 0xfffffff0;
+ insn |= addend_abs >> 2;
+
+ /* Update the instruction. */
+ md_number_to_chars (buf, insn, INSN_SIZE);
+ }
+ break;
+
case BFD_RELOC_UNUSED:
default:
as_bad_where (fixP->fx_file, fixP->fx_line,
@@ -12412,6 +18953,34 @@ tc_gen_reloc (asection *section, fixS *fixp)
break;
}
+ case BFD_RELOC_ARM_MOVW:
+ if (fixp->fx_pcrel)
+ {
+ code = BFD_RELOC_ARM_MOVW_PCREL;
+ break;
+ }
+
+ case BFD_RELOC_ARM_MOVT:
+ if (fixp->fx_pcrel)
+ {
+ code = BFD_RELOC_ARM_MOVT_PCREL;
+ break;
+ }
+
+ case BFD_RELOC_ARM_THUMB_MOVW:
+ if (fixp->fx_pcrel)
+ {
+ code = BFD_RELOC_ARM_THUMB_MOVW_PCREL;
+ break;
+ }
+
+ case BFD_RELOC_ARM_THUMB_MOVT:
+ if (fixp->fx_pcrel)
+ {
+ code = BFD_RELOC_ARM_THUMB_MOVT_PCREL;
+ break;
+ }
+
case BFD_RELOC_NONE:
case BFD_RELOC_ARM_PCREL_BRANCH:
case BFD_RELOC_ARM_PCREL_BLX:
@@ -12425,6 +18994,9 @@ tc_gen_reloc (asection *section, fixS *fixp)
case BFD_RELOC_THUMB_PCREL_BLX:
case BFD_RELOC_VTABLE_ENTRY:
case BFD_RELOC_VTABLE_INHERIT:
+#ifdef TE_PE
+ case BFD_RELOC_32_SECREL:
+#endif
code = fixp->fx_r_type;
break;
@@ -12449,6 +19021,34 @@ tc_gen_reloc (asection *section, fixS *fixp)
case BFD_RELOC_ARM_TLS_LDO32:
case BFD_RELOC_ARM_PCREL_CALL:
case BFD_RELOC_ARM_PCREL_JUMP:
+ case BFD_RELOC_ARM_ALU_PC_G0_NC:
+ case BFD_RELOC_ARM_ALU_PC_G0:
+ case BFD_RELOC_ARM_ALU_PC_G1_NC:
+ case BFD_RELOC_ARM_ALU_PC_G1:
+ case BFD_RELOC_ARM_ALU_PC_G2:
+ case BFD_RELOC_ARM_LDR_PC_G0:
+ case BFD_RELOC_ARM_LDR_PC_G1:
+ case BFD_RELOC_ARM_LDR_PC_G2:
+ case BFD_RELOC_ARM_LDRS_PC_G0:
+ case BFD_RELOC_ARM_LDRS_PC_G1:
+ case BFD_RELOC_ARM_LDRS_PC_G2:
+ case BFD_RELOC_ARM_LDC_PC_G0:
+ case BFD_RELOC_ARM_LDC_PC_G1:
+ case BFD_RELOC_ARM_LDC_PC_G2:
+ case BFD_RELOC_ARM_ALU_SB_G0_NC:
+ case BFD_RELOC_ARM_ALU_SB_G0:
+ case BFD_RELOC_ARM_ALU_SB_G1_NC:
+ case BFD_RELOC_ARM_ALU_SB_G1:
+ case BFD_RELOC_ARM_ALU_SB_G2:
+ case BFD_RELOC_ARM_LDR_SB_G0:
+ case BFD_RELOC_ARM_LDR_SB_G1:
+ case BFD_RELOC_ARM_LDR_SB_G2:
+ case BFD_RELOC_ARM_LDRS_SB_G0:
+ case BFD_RELOC_ARM_LDRS_SB_G1:
+ case BFD_RELOC_ARM_LDRS_SB_G2:
+ case BFD_RELOC_ARM_LDC_SB_G0:
+ case BFD_RELOC_ARM_LDC_SB_G1:
+ case BFD_RELOC_ARM_LDC_SB_G2:
code = fixp->fx_r_type;
break;
@@ -12579,6 +19179,14 @@ cons_fix_new_arm (fragS * frag,
break;
}
+#ifdef TE_PE
+ if (exp->X_op == O_secrel)
+ {
+ exp->X_op = O_symbol;
+ type = BFD_RELOC_32_SECREL;
+ }
+#endif
+
fix_new_exp (frag, where, (int) size, exp, pcrel, type);
}
@@ -12612,34 +19220,31 @@ arm_force_relocation (struct fix * fixp)
if (fixp->fx_r_type == BFD_RELOC_ARM_IMMEDIATE
|| fixp->fx_r_type == BFD_RELOC_ARM_OFFSET_IMM
|| fixp->fx_r_type == BFD_RELOC_ARM_ADRL_IMMEDIATE
+ || fixp->fx_r_type == BFD_RELOC_ARM_T32_ADD_IMM
|| fixp->fx_r_type == BFD_RELOC_ARM_T32_IMMEDIATE
|| fixp->fx_r_type == BFD_RELOC_ARM_T32_IMM12
|| fixp->fx_r_type == BFD_RELOC_ARM_T32_ADD_PC12)
return 0;
- return generic_force_reloc (fixp);
-}
-
-#ifdef OBJ_COFF
-/* This is a little hack to help the gas/arm/adrl.s test. It prevents
- local labels from being added to the output symbol table when they
- are used with the ADRL pseudo op. The ADRL relocation should always
- be resolved before the binbary is emitted, so it is safe to say that
- it is adjustable. */
+ /* Always leave these relocations for the linker. */
+ if ((fixp->fx_r_type >= BFD_RELOC_ARM_ALU_PC_G0_NC
+ && fixp->fx_r_type <= BFD_RELOC_ARM_LDC_SB_G2)
+ || fixp->fx_r_type == BFD_RELOC_ARM_LDR_PC_G0)
+ return 1;
-bfd_boolean
-arm_fix_adjustable (fixS * fixP)
-{
- if (fixP->fx_r_type == BFD_RELOC_ARM_ADRL_IMMEDIATE)
+ /* Always generate relocations against function symbols. */
+ if (fixp->fx_r_type == BFD_RELOC_32
+ && fixp->fx_addsy
+ && (symbol_get_bfdsym (fixp->fx_addsy)->flags & BSF_FUNCTION))
return 1;
- return 0;
+
+ return generic_force_reloc (fixp);
}
-#endif
-#ifdef OBJ_ELF
-/* Relocations against Thumb function names must be left unadjusted,
- so that the linker can use this information to correctly set the
- bottom bit of their addresses. The MIPS version of this function
+#if defined (OBJ_ELF) || defined (OBJ_COFF)
+/* Relocations against function names must be left unadjusted,
+ so that the linker can use this information to generate interworking
+ stubs. The MIPS version of this function
also prevents relocations that are mips-16 specific, but I do not
know why it does this.
@@ -12656,6 +19261,10 @@ arm_fix_adjustable (fixS * fixP)
if (fixP->fx_addsy == NULL)
return 1;
+ /* Preserve relocations against symbols with function type. */
+ if (symbol_get_bfdsym (fixP->fx_addsy)->flags & BSF_FUNCTION)
+ return 0;
+
if (THUMB_IS_FUNC (fixP->fx_addsy)
&& fixP->fx_subsy == NULL)
return 0;
@@ -12677,8 +19286,17 @@ arm_fix_adjustable (fixS * fixP)
|| fixP->fx_r_type == BFD_RELOC_ARM_TARGET2)
return 0;
+ /* Similarly for group relocations. */
+ if ((fixP->fx_r_type >= BFD_RELOC_ARM_ALU_PC_G0_NC
+ && fixP->fx_r_type <= BFD_RELOC_ARM_LDC_SB_G2)
+ || fixP->fx_r_type == BFD_RELOC_ARM_LDR_PC_G0)
+ return 0;
+
return 1;
}
+#endif /* defined (OBJ_ELF) || defined (OBJ_COFF) */
+
+#ifdef OBJ_ELF
const char *
elf32_arm_target_format (void)
@@ -12789,14 +19407,15 @@ arm_adjust_symtab (void)
elf_sym = elf_symbol (symbol_get_bfdsym (sym));
bind = ELF_ST_BIND (elf_sym->internal_elf_sym.st_info);
- if (! bfd_is_arm_mapping_symbol_name (elf_sym->symbol.name))
+ if (! bfd_is_arm_special_symbol_name (elf_sym->symbol.name,
+ BFD_ARM_SPECIAL_SYM_TYPE_ANY))
{
/* If it's a .thumb_func, declare it as so,
otherwise tag label as .code 16. */
if (THUMB_IS_FUNC (sym))
elf_sym->internal_elf_sym.st_info =
ELF_ST_INFO (bind, STT_ARM_TFUNC);
- else
+ else if (EF_ARM_EABI_VERSION (meabi_flags) < EF_ARM_EABI_VER4)
elf_sym->internal_elf_sym.st_info =
ELF_ST_INFO (bind, STT_ARM_16BIT);
}
@@ -12817,6 +19436,16 @@ set_constant_flonums (void)
abort ();
}
+/* Auto-select Thumb mode if it's the only available instruction set for the
+ given architecture. */
+
+static void
+autoselect_thumb_from_cpu_variant (void)
+{
+ if (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v1))
+ opcode_select (16);
+}
+
void
md_begin (void)
{
@@ -12894,9 +19523,9 @@ md_begin (void)
if (!mfpu_opt)
{
- if (!mcpu_cpu_opt)
+ if (mcpu_cpu_opt != NULL)
mfpu_opt = &fpu_default;
- else if (ARM_CPU_HAS_FEATURE (*mcpu_fpu_opt, arm_ext_v5))
+ else if (mcpu_fpu_opt != NULL && ARM_CPU_HAS_FEATURE (*mcpu_fpu_opt, arm_ext_v5))
mfpu_opt = &fpu_arch_vfp_v2;
else
mfpu_opt = &fpu_arch_fpa;
@@ -12917,6 +19546,8 @@ md_begin (void)
ARM_MERGE_FEATURE_SETS (cpu_variant, *mcpu_cpu_opt, *mfpu_opt);
+ autoselect_thumb_from_cpu_variant ();
+
arm_arch_used = thumb_arch_used = arm_arch_none;
#if defined OBJ_COFF || defined OBJ_ELF
@@ -12992,7 +19623,9 @@ md_begin (void)
#endif
/* Record the CPU type as well. */
- if (ARM_CPU_HAS_FEATURE (cpu_variant, arm_cext_iwmmxt))
+ if (ARM_CPU_HAS_FEATURE (cpu_variant, arm_cext_iwmmxt2))
+ mach = bfd_mach_arm_iWMMXt2;
+ else if (ARM_CPU_HAS_FEATURE (cpu_variant, arm_cext_iwmmxt))
mach = bfd_mach_arm_iWMMXt;
else if (ARM_CPU_HAS_FEATURE (cpu_variant, arm_cext_xscale))
mach = bfd_mach_arm_XScale;
@@ -13362,13 +19995,16 @@ static const struct arm_cpu_option_table arm_cpus[] =
{"arm1156t2f-s", ARM_ARCH_V6T2, FPU_ARCH_VFP_V2, NULL},
{"arm1176jz-s", ARM_ARCH_V6ZK, FPU_NONE, NULL},
{"arm1176jzf-s", ARM_ARCH_V6ZK, FPU_ARCH_VFP_V2, NULL},
- {"cortex-a8", ARM_ARCH_V7A, FPU_ARCH_VFP_V2, NULL},
+ {"cortex-a8", ARM_ARCH_V7A, ARM_FEATURE(0, FPU_VFP_V3
+ | FPU_NEON_EXT_V1),
+ NULL},
{"cortex-r4", ARM_ARCH_V7R, FPU_NONE, NULL},
{"cortex-m3", ARM_ARCH_V7M, FPU_NONE, NULL},
/* ??? XSCALE is really an architecture. */
{"xscale", ARM_ARCH_XSCALE, FPU_ARCH_VFP_V2, NULL},
/* ??? iwmmxt is not a processor. */
{"iwmmxt", ARM_ARCH_IWMMXT, FPU_ARCH_VFP_V2, NULL},
+ {"iwmmxt2", ARM_ARCH_IWMMXT2,FPU_ARCH_VFP_V2, NULL},
{"i80200", ARM_ARCH_XSCALE, FPU_ARCH_VFP_V2, NULL},
/* Maverick */
{"ep9312", ARM_FEATURE(ARM_AEXT_V4T, ARM_CEXT_MAVERICK), FPU_ARCH_MAVERICK, "ARM920T"},
@@ -13413,11 +20049,17 @@ static const struct arm_arch_option_table arm_archs[] =
{"armv6zt2", ARM_ARCH_V6ZT2, FPU_ARCH_VFP},
{"armv6zkt2", ARM_ARCH_V6ZKT2, FPU_ARCH_VFP},
{"armv7", ARM_ARCH_V7, FPU_ARCH_VFP},
+ /* The official spelling of the ARMv7 profile variants is the dashed form.
+ Accept the non-dashed form for compatibility with old toolchains. */
{"armv7a", ARM_ARCH_V7A, FPU_ARCH_VFP},
{"armv7r", ARM_ARCH_V7R, FPU_ARCH_VFP},
{"armv7m", ARM_ARCH_V7M, FPU_ARCH_VFP},
+ {"armv7-a", ARM_ARCH_V7A, FPU_ARCH_VFP},
+ {"armv7-r", ARM_ARCH_V7R, FPU_ARCH_VFP},
+ {"armv7-m", ARM_ARCH_V7M, FPU_ARCH_VFP},
{"xscale", ARM_ARCH_XSCALE, FPU_ARCH_VFP},
{"iwmmxt", ARM_ARCH_IWMMXT, FPU_ARCH_VFP},
+ {"iwmmxt2", ARM_ARCH_IWMMXT2,FPU_ARCH_VFP},
{NULL, ARM_ARCH_NONE, ARM_ARCH_NONE}
};
@@ -13433,6 +20075,7 @@ static const struct arm_option_cpu_value_table arm_extensions[] =
{"maverick", ARM_FEATURE (0, ARM_CEXT_MAVERICK)},
{"xscale", ARM_FEATURE (0, ARM_CEXT_XSCALE)},
{"iwmmxt", ARM_FEATURE (0, ARM_CEXT_IWMMXT)},
+ {"iwmmxt2", ARM_FEATURE (0, ARM_CEXT_IWMMXT2)},
{NULL, ARM_ARCH_NONE}
};
@@ -13452,6 +20095,7 @@ static const struct arm_option_cpu_value_table arm_fpus[] =
{"softvfp+vfp", FPU_ARCH_VFP_V2},
{"vfp", FPU_ARCH_VFP_V2},
{"vfp9", FPU_ARCH_VFP_V2},
+ {"vfp3", FPU_ARCH_VFP_V3},
{"vfp10", FPU_ARCH_VFP_V2},
{"vfp10-r0", FPU_ARCH_VFP_V1},
{"vfpxd", FPU_ARCH_VFP_V1xD},
@@ -13460,6 +20104,7 @@ static const struct arm_option_cpu_value_table arm_fpus[] =
{"arm1136jfs", FPU_ARCH_VFP_V2},
{"arm1136jf-s", FPU_ARCH_VFP_V2},
{"maverick", FPU_ARCH_MAVERICK},
+ {"neon", FPU_ARCH_VFP_V3_PLUS_NEON_V1},
{NULL, ARM_ARCH_NONE}
};
@@ -13855,7 +20500,13 @@ aeabi_set_public_attributes (void)
ARM_MERGE_FEATURE_SETS (flags, arm_arch_used, thumb_arch_used);
ARM_MERGE_FEATURE_SETS (flags, flags, *mfpu_opt);
ARM_MERGE_FEATURE_SETS (flags, flags, selected_cpu);
-
+ /*Allow the user to override the reported architecture. */
+ if (object_arch)
+ {
+ ARM_CLEAR_FEATURE (flags, flags, arm_arch_any);
+ ARM_MERGE_FEATURE_SETS (flags, flags, *object_arch);
+ }
+
tmp = flags;
arch = 0;
for (p = cpu_arch_ver; p->val; p++)
@@ -13881,57 +20532,56 @@ aeabi_set_public_attributes (void)
for (i = 0; p[i]; i++)
p[i] = TOUPPER (p[i]);
}
- elf32_arm_add_eabi_attr_string (stdoutput, 5, p);
+ bfd_elf_add_proc_attr_string (stdoutput, 5, p);
}
/* Tag_CPU_arch. */
- elf32_arm_add_eabi_attr_int (stdoutput, 6, arch);
+ bfd_elf_add_proc_attr_int (stdoutput, 6, arch);
/* Tag_CPU_arch_profile. */
if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v7a))
- elf32_arm_add_eabi_attr_int (stdoutput, 7, 'A');
+ bfd_elf_add_proc_attr_int (stdoutput, 7, 'A');
else if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v7r))
- elf32_arm_add_eabi_attr_int (stdoutput, 7, 'R');
+ bfd_elf_add_proc_attr_int (stdoutput, 7, 'R');
else if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v7m))
- elf32_arm_add_eabi_attr_int (stdoutput, 7, 'M');
+ bfd_elf_add_proc_attr_int (stdoutput, 7, 'M');
/* Tag_ARM_ISA_use. */
if (ARM_CPU_HAS_FEATURE (arm_arch_used, arm_arch_full))
- elf32_arm_add_eabi_attr_int (stdoutput, 8, 1);
+ bfd_elf_add_proc_attr_int (stdoutput, 8, 1);
/* Tag_THUMB_ISA_use. */
if (ARM_CPU_HAS_FEATURE (thumb_arch_used, arm_arch_full))
- elf32_arm_add_eabi_attr_int (stdoutput, 9,
+ bfd_elf_add_proc_attr_int (stdoutput, 9,
ARM_CPU_HAS_FEATURE (thumb_arch_used, arm_arch_t2) ? 2 : 1);
/* Tag_VFP_arch. */
- if (ARM_CPU_HAS_FEATURE (thumb_arch_used, fpu_arch_vfp_v2)
- || ARM_CPU_HAS_FEATURE (arm_arch_used, fpu_arch_vfp_v2))
- elf32_arm_add_eabi_attr_int (stdoutput, 10, 2);
- else if (ARM_CPU_HAS_FEATURE (thumb_arch_used, fpu_arch_vfp_v1)
- || ARM_CPU_HAS_FEATURE (arm_arch_used, fpu_arch_vfp_v1))
- elf32_arm_add_eabi_attr_int (stdoutput, 10, 1);
+ if (ARM_CPU_HAS_FEATURE (thumb_arch_used, fpu_vfp_ext_v3)
+ || ARM_CPU_HAS_FEATURE (arm_arch_used, fpu_vfp_ext_v3))
+ bfd_elf_add_proc_attr_int (stdoutput, 10, 3);
+ else if (ARM_CPU_HAS_FEATURE (thumb_arch_used, fpu_vfp_ext_v2)
+ || ARM_CPU_HAS_FEATURE (arm_arch_used, fpu_vfp_ext_v2))
+ bfd_elf_add_proc_attr_int (stdoutput, 10, 2);
+ else if (ARM_CPU_HAS_FEATURE (thumb_arch_used, fpu_vfp_ext_v1)
+ || ARM_CPU_HAS_FEATURE (arm_arch_used, fpu_vfp_ext_v1)
+ || ARM_CPU_HAS_FEATURE (thumb_arch_used, fpu_vfp_ext_v1xd)
+ || ARM_CPU_HAS_FEATURE (arm_arch_used, fpu_vfp_ext_v1xd))
+ bfd_elf_add_proc_attr_int (stdoutput, 10, 1);
/* Tag_WMMX_arch. */
if (ARM_CPU_HAS_FEATURE (thumb_arch_used, arm_cext_iwmmxt)
|| ARM_CPU_HAS_FEATURE (arm_arch_used, arm_cext_iwmmxt))
- elf32_arm_add_eabi_attr_int (stdoutput, 11, 1);
+ bfd_elf_add_proc_attr_int (stdoutput, 11, 1);
+ /* Tag_NEON_arch. */
+ if (ARM_CPU_HAS_FEATURE (thumb_arch_used, fpu_neon_ext_v1)
+ || ARM_CPU_HAS_FEATURE (arm_arch_used, fpu_neon_ext_v1))
+ bfd_elf_add_proc_attr_int (stdoutput, 12, 1);
}
-/* Add the .ARM.attributes section. */
+/* Add the default contents for the .ARM.attributes section. */
void
arm_md_end (void)
{
- segT s;
- char *p;
- addressT addr;
- offsetT size;
-
if (EF_ARM_EABI_VERSION (meabi_flags) < EF_ARM_EABI_VER4)
return;
aeabi_set_public_attributes ();
- size = elf32_arm_eabi_attr_size (stdoutput);
- s = subseg_new (".ARM.attributes", 0);
- bfd_set_section_flags (stdoutput, s, SEC_READONLY | SEC_DATA);
- addr = frag_now_fix ();
- p = frag_more (size);
- elf32_arm_set_eabi_attr_contents (stdoutput, (bfd_byte *)p, size);
}
+#endif /* OBJ_ELF */
/* Parse a .cpu directive. */
@@ -14009,6 +20659,37 @@ s_arm_arch (int ignored ATTRIBUTE_UNUSED)
}
+/* Parse a .object_arch directive. */
+
+static void
+s_arm_object_arch (int ignored ATTRIBUTE_UNUSED)
+{
+ const struct arm_arch_option_table *opt;
+ char saved_char;
+ char *name;
+
+ name = input_line_pointer;
+ while (*input_line_pointer && !ISSPACE(*input_line_pointer))
+ input_line_pointer++;
+ saved_char = *input_line_pointer;
+ *input_line_pointer = 0;
+
+ /* Skip the first "all" entry. */
+ for (opt = arm_archs + 1; opt->name != NULL; opt++)
+ if (streq (opt->name, name))
+ {
+ object_arch = &opt->value;
+ *input_line_pointer = saved_char;
+ demand_empty_rest_of_line ();
+ return;
+ }
+
+ as_bad (_("unknown architecture `%s'\n"), name);
+ *input_line_pointer = saved_char;
+ ignore_rest_of_line ();
+}
+
+
/* Parse a .fpu directive. */
static void
@@ -14038,5 +20719,10 @@ s_arm_fpu (int ignored ATTRIBUTE_UNUSED)
*input_line_pointer = saved_char;
ignore_rest_of_line ();
}
-#endif /* OBJ_ELF */
+/* Copy symbol information. */
+void
+arm_copy_symbol_attributes (symbolS *dest, symbolS *src)
+{
+ ARM_GET_FLAG (dest) = ARM_GET_FLAG (src);
+}
diff --git a/gas/config/tc-arm.h b/gas/config/tc-arm.h
index f2615770c47d..d6dee9b1a9aa 100644
--- a/gas/config/tc-arm.h
+++ b/gas/config/tc-arm.h
@@ -1,6 +1,6 @@
/* This file is tc-arm.h
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
Modified by David Taylor (dtaylor@armltd.co.uk)
@@ -66,6 +66,8 @@ struct fix;
# if defined TE_PE
# if defined TE_EPOC
# define TARGET_FORMAT (target_big_endian ? "epoc-pe-arm-big" : "epoc-pe-arm-little")
+# elif defined TE_WINCE
+# define TARGET_FORMAT (target_big_endian ? "pe-arm-wince-big" : "pe-arm-wince-little")
# else
# define TARGET_FORMAT (target_big_endian ? "pe-arm-big" : "pe-arm-little")
# endif
@@ -98,6 +100,7 @@ extern int arm_optimize_expr (expressionS *, operatorT, expressionS *);
#ifdef OBJ_ELF
#define md_end arm_md_end
extern void arm_md_end (void);
+bfd_boolean arm_is_eabi (void);
#endif
/* NOTE: The fake label creation in stabs.c:s_stab_generic() has
@@ -120,12 +123,30 @@ extern void arm_md_end (void);
#define ARM_IS_THUMB(s) (ARM_GET_FLAG (s) & ARM_FLAG_THUMB)
#define ARM_IS_INTERWORK(s) (ARM_GET_FLAG (s) & ARM_FLAG_INTERWORK)
+#ifdef OBJ_ELF
+
+/* For ELF objects THUMB_IS_FUNC is inferred from
+ ARM_IS_TUMB and the function type. */
+#define THUMB_IS_FUNC(s) \
+ ((arm_is_eabi () \
+ && (ARM_IS_THUMB (s)) \
+ && (symbol_get_bfdsym (s)->flags & BSF_FUNCTION)) \
+ || (ARM_GET_FLAG (s) & THUMB_FLAG_FUNC))
+
+#else
#define THUMB_IS_FUNC(s) (ARM_GET_FLAG (s) & THUMB_FLAG_FUNC)
+#endif
#define ARM_SET_THUMB(s,t) ((t) ? ARM_SET_FLAG (s, ARM_FLAG_THUMB) : ARM_RESET_FLAG (s, ARM_FLAG_THUMB))
#define ARM_SET_INTERWORK(s,t) ((t) ? ARM_SET_FLAG (s, ARM_FLAG_INTERWORK) : ARM_RESET_FLAG (s, ARM_FLAG_INTERWORK))
#define THUMB_SET_FUNC(s,t) ((t) ? ARM_SET_FLAG (s, THUMB_FLAG_FUNC) : ARM_RESET_FLAG (s, THUMB_FLAG_FUNC))
+void arm_copy_symbol_attributes (symbolS *, symbolS *);
+#ifndef TC_COPY_SYMBOL_ATTRIBUTES
+#define TC_COPY_SYMBOL_ATTRIBUTES(DEST, SRC) \
+ (arm_copy_symbol_attributes (DEST, SRC))
+#endif
+
#define TC_START_LABEL(C,STR) (c == ':' || (c == '/' && arm_data_in_code ()))
#define tc_canonicalize_symbol_name(str) arm_canonicalize_symbol_name (str);
#define obj_adjust_symtab() arm_adjust_symtab ()
@@ -146,7 +167,6 @@ extern void arm_md_end (void);
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
(!(FIX)->fx_pcrel \
- || (FIX)->fx_plt \
|| (FIX)->fx_r_type == BFD_RELOC_ARM_GOT32 \
|| (FIX)->fx_r_type == BFD_RELOC_32 \
|| TC_FORCE_RELOCATION (FIX))
@@ -175,14 +195,27 @@ extern void arm_md_end (void);
goto LABEL; \
}
+#define DWARF2_LINE_MIN_INSN_LENGTH 2
+
+/* The lr register is r14. */
+#define DWARF2_DEFAULT_RETURN_COLUMN 14
+
+/* Registers are generally saved at negative offsets to the CFA. */
+#define DWARF2_CIE_DATA_ALIGNMENT (-4)
+
#ifdef OBJ_ELF
-# define DWARF2_LINE_MIN_INSN_LENGTH 2
# define obj_frob_symbol(sym, punt) armelf_frob_symbol ((sym), & (punt))
# define md_elf_section_change_hook() arm_elf_change_section ()
# define md_elf_section_type(str, len) arm_elf_section_type (str, len)
# define GLOBAL_OFFSET_TABLE_NAME "_GLOBAL_OFFSET_TABLE_"
# define TC_SEGMENT_INFO_TYPE struct arm_segment_info_type
+/* This is not really an alignment operation, but it's something we
+ need to do at the same time: whenever we are figuring out the
+ alignment for data, we should check whether a $d symbol is
+ necessary. */
+# define md_cons_align(nbytes) mapping_state (MAP_DATA)
+
enum mstate
{
MAP_UNDEFINED = 0, /* Must be zero, for seginfo in new sections. */
@@ -191,6 +224,8 @@ enum mstate
MAP_THUMB
};
+void mapping_state (enum mstate);
+
struct arm_segment_info_type
{
enum mstate mapstate;
@@ -200,12 +235,6 @@ struct arm_segment_info_type
/* We want .cfi_* pseudo-ops for generating unwind info. */
#define TARGET_USE_CFIPOP 1
-/* The lr register is r14. */
-#define DWARF2_DEFAULT_RETURN_COLUMN 14
-
-/* Registers are generally saved at negative offsets to the CFA. */
-#define DWARF2_CIE_DATA_ALIGNMENT -4
-
/* CFI hooks. */
#define tc_regname_to_dw2regnum tc_arm_regname_to_dw2regnum
#define tc_cfi_frame_initial_instructions tc_arm_frame_initial_instructions
@@ -244,5 +273,14 @@ extern void arm_init_frag (struct frag *);
extern void arm_handle_align (struct frag *);
extern bfd_boolean arm_fix_adjustable (struct fix *);
extern int arm_elf_section_type (const char *, size_t);
-extern int tc_arm_regname_to_dw2regnum (const char *regname);
+extern int tc_arm_regname_to_dw2regnum (char *regname);
extern void tc_arm_frame_initial_instructions (void);
+
+#ifdef TE_PE
+
+#define O_secrel O_md1
+
+#define TC_DWARF2_EMIT_OFFSET tc_pe_dwarf2_emit_offset
+void tc_pe_dwarf2_emit_offset (symbolS *, unsigned int);
+
+#endif /* TE_PE */
diff --git a/gas/config/tc-avr.c b/gas/config/tc-avr.c
index 7a95033d53a3..2de962dd2b2a 100644
--- a/gas/config/tc-avr.c
+++ b/gas/config/tc-avr.c
@@ -21,11 +21,9 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
-#include "libiberty.h"
struct avr_opcodes_s
{
@@ -63,89 +61,104 @@ struct mcu_type_s
static struct mcu_type_s mcu_types[] =
{
- {"avr1", AVR_ISA_TINY1, bfd_mach_avr1},
- {"avr2", AVR_ISA_TINY2, bfd_mach_avr2},
- {"avr3", AVR_ISA_M103, bfd_mach_avr3},
- {"avr4", AVR_ISA_M8, bfd_mach_avr4},
- {"avr5", AVR_ISA_ALL, bfd_mach_avr5},
- {"at90s1200", AVR_ISA_1200, bfd_mach_avr1},
- {"attiny10", AVR_ISA_TINY1, bfd_mach_avr1}, /* XXX -> tn11 */
- {"attiny11", AVR_ISA_TINY1, bfd_mach_avr1},
- {"attiny12", AVR_ISA_TINY1, bfd_mach_avr1},
- {"attiny15", AVR_ISA_TINY1, bfd_mach_avr1},
- {"attiny28", AVR_ISA_TINY1, bfd_mach_avr1},
- {"at90s2313", AVR_ISA_2xxx, bfd_mach_avr2},
- {"at90s2323", AVR_ISA_2xxx, bfd_mach_avr2},
- {"at90s2333", AVR_ISA_2xxx, bfd_mach_avr2}, /* XXX -> 4433 */
- {"at90s2343", AVR_ISA_2xxx, bfd_mach_avr2},
- {"attiny22", AVR_ISA_2xxx, bfd_mach_avr2}, /* XXX -> 2343 */
- {"attiny26", AVR_ISA_2xxx, bfd_mach_avr2},
- {"at90s4433", AVR_ISA_2xxx, bfd_mach_avr2},
- {"at90s4414", AVR_ISA_2xxx, bfd_mach_avr2}, /* XXX -> 8515 */
- {"at90s4434", AVR_ISA_2xxx, bfd_mach_avr2}, /* XXX -> 8535 */
- {"at90s8515", AVR_ISA_2xxx, bfd_mach_avr2},
- {"at90s8535", AVR_ISA_2xxx, bfd_mach_avr2},
- {"at90c8534", AVR_ISA_2xxx, bfd_mach_avr2},
- {"at86rf401", AVR_ISA_2xxx, bfd_mach_avr2},
- {"attiny13", AVR_ISA_TINY2, bfd_mach_avr2},
- {"attiny2313",AVR_ISA_TINY2, bfd_mach_avr2},
- {"attiny261", AVR_ISA_TINY2, bfd_mach_avr2},
- {"attiny461", AVR_ISA_TINY2, bfd_mach_avr2},
- {"attiny861", AVR_ISA_TINY2, bfd_mach_avr2},
- {"attiny24", AVR_ISA_TINY2, bfd_mach_avr2},
- {"attiny44", AVR_ISA_TINY2, bfd_mach_avr2},
- {"attiny84", AVR_ISA_TINY2, bfd_mach_avr2},
- {"attiny25", AVR_ISA_TINY2, bfd_mach_avr2},
- {"attiny45", AVR_ISA_TINY2, bfd_mach_avr2},
- {"attiny85", AVR_ISA_TINY2, bfd_mach_avr2},
- {"atmega603", AVR_ISA_M603, bfd_mach_avr3}, /* XXX -> m103 */
- {"atmega103", AVR_ISA_M103, bfd_mach_avr3},
- {"at43usb320",AVR_ISA_M103, bfd_mach_avr3},
- {"at43usb355",AVR_ISA_M603, bfd_mach_avr3},
- {"at76c711", AVR_ISA_M603, bfd_mach_avr3},
- {"atmega48", AVR_ISA_PWMx, bfd_mach_avr4},
- {"atmega8", AVR_ISA_M8, bfd_mach_avr4},
- {"atmega83", AVR_ISA_M8, bfd_mach_avr4}, /* XXX -> m8535 */
- {"atmega85", AVR_ISA_M8, bfd_mach_avr4}, /* XXX -> m8 */
- {"atmega88", AVR_ISA_PWMx, bfd_mach_avr4},
- {"atmega8515",AVR_ISA_M8, bfd_mach_avr4},
- {"atmega8535",AVR_ISA_M8, bfd_mach_avr4},
- {"at90pwm2", AVR_ISA_PWMx, bfd_mach_avr4},
- {"at90pwm3", AVR_ISA_PWMx, bfd_mach_avr4},
- {"atmega16", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega161", AVR_ISA_M161, bfd_mach_avr5},
- {"atmega162", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega163", AVR_ISA_M161, bfd_mach_avr5},
- {"atmega164", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega165", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega168", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega169", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega32", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega323", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega324", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega325", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega329", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega3250",AVR_ISA_M323, bfd_mach_avr5},
- {"atmega3290",AVR_ISA_M323, bfd_mach_avr5},
- {"atmega406", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega64", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega640", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega644", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega128", AVR_ISA_M128, bfd_mach_avr5},
- {"atmega1280",AVR_ISA_M128, bfd_mach_avr5},
- {"atmega1281",AVR_ISA_M128, bfd_mach_avr5},
- {"atmega645", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega649", AVR_ISA_M323, bfd_mach_avr5},
- {"atmega6450",AVR_ISA_M323, bfd_mach_avr5},
- {"atmega6490",AVR_ISA_M323, bfd_mach_avr5},
- {"at90can32" ,AVR_ISA_M323, bfd_mach_avr5},
- {"at90can64" ,AVR_ISA_M323, bfd_mach_avr5},
- {"at90can128",AVR_ISA_M128, bfd_mach_avr5},
+ {"avr1", AVR_ISA_TINY1, bfd_mach_avr1},
+ {"avr2", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"avr3", AVR_ISA_M103, bfd_mach_avr3},
+ {"avr4", AVR_ISA_M8, bfd_mach_avr4},
+ {"avr5", AVR_ISA_ALL, bfd_mach_avr5},
+ {"avr6", AVR_ISA_ALL, bfd_mach_avr6},
+ {"at90s1200", AVR_ISA_1200, bfd_mach_avr1},
+ {"attiny10", AVR_ISA_TINY1, bfd_mach_avr1}, /* XXX -> tn11 */
+ {"attiny11", AVR_ISA_TINY1, bfd_mach_avr1},
+ {"attiny12", AVR_ISA_TINY1, bfd_mach_avr1},
+ {"attiny15", AVR_ISA_TINY1, bfd_mach_avr1},
+ {"attiny28", AVR_ISA_TINY1, bfd_mach_avr1},
+ {"at90s2313", AVR_ISA_2xxx, bfd_mach_avr2},
+ {"at90s2323", AVR_ISA_2xxx, bfd_mach_avr2},
+ {"at90s2333", AVR_ISA_2xxx, bfd_mach_avr2}, /* XXX -> 4433 */
+ {"at90s2343", AVR_ISA_2xxx, bfd_mach_avr2},
+ {"attiny22", AVR_ISA_2xxx, bfd_mach_avr2}, /* XXX -> 2343 */
+ {"attiny26", AVR_ISA_2xxx, bfd_mach_avr2},
+ {"at90s4433", AVR_ISA_2xxx, bfd_mach_avr2},
+ {"at90s4414", AVR_ISA_2xxx, bfd_mach_avr2}, /* XXX -> 8515 */
+ {"at90s4434", AVR_ISA_2xxx, bfd_mach_avr2}, /* XXX -> 8535 */
+ {"at90s8515", AVR_ISA_2xxx, bfd_mach_avr2},
+ {"at90s8535", AVR_ISA_2xxx, bfd_mach_avr2},
+ {"at90c8534", AVR_ISA_2xxx, bfd_mach_avr2},
+ {"at86rf401", AVR_ISA_2xxx, bfd_mach_avr2},
+ {"attiny13", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny2313", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny261", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny461", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny861", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny24", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny44", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny84", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny25", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny45", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"attiny85", AVR_ISA_TINY2, bfd_mach_avr2},
+ {"atmega603", AVR_ISA_M603, bfd_mach_avr3}, /* XXX -> m103 */
+ {"atmega103", AVR_ISA_M103, bfd_mach_avr3},
+ {"at43usb320", AVR_ISA_M103, bfd_mach_avr3},
+ {"at43usb355", AVR_ISA_M603, bfd_mach_avr3},
+ {"at76c711", AVR_ISA_M603, bfd_mach_avr3},
+ {"atmega48", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"atmega8", AVR_ISA_M8, bfd_mach_avr4},
+ {"atmega83", AVR_ISA_M8, bfd_mach_avr4}, /* XXX -> m8535 */
+ {"atmega85", AVR_ISA_M8, bfd_mach_avr4}, /* XXX -> m8 */
+ {"atmega88", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"atmega8515", AVR_ISA_M8, bfd_mach_avr4},
+ {"atmega8535", AVR_ISA_M8, bfd_mach_avr4},
+ {"atmega8hva", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"at90pwm1", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"at90pwm2", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"at90pwm3", AVR_ISA_PWMx, bfd_mach_avr4},
+ {"atmega16", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega161", AVR_ISA_M161, bfd_mach_avr5},
+ {"atmega162", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega163", AVR_ISA_M161, bfd_mach_avr5},
+ {"atmega164p", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega165", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega165p", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega168", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega169", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega169p", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega32", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega323", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega324p", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega325", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega325p", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega329", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega329p", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega3250", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega3250p",AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega3290", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega3290p",AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega406", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega64", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega640", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega644", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega644p", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega128", AVR_ISA_M128, bfd_mach_avr5},
+ {"atmega1280", AVR_ISA_M128, bfd_mach_avr5},
+ {"atmega1281", AVR_ISA_M128, bfd_mach_avr5},
+ {"atmega645", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega649", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega6450", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega6490", AVR_ISA_M323, bfd_mach_avr5},
+ {"atmega16hva",AVR_ISA_M323, bfd_mach_avr5},
+ {"at90can32" , AVR_ISA_M323, bfd_mach_avr5},
+ {"at90can64" , AVR_ISA_M323, bfd_mach_avr5},
+ {"at90can128", AVR_ISA_M128, bfd_mach_avr5},
+ {"at90usb82", AVR_ISA_M323, bfd_mach_avr5},
+ {"at90usb162", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb646", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb647", AVR_ISA_M323, bfd_mach_avr5},
{"at90usb1286",AVR_ISA_M128, bfd_mach_avr5},
{"at90usb1287",AVR_ISA_M128, bfd_mach_avr5},
- {"at94k", AVR_ISA_94K, bfd_mach_avr5},
+ {"at94k", AVR_ISA_94K, bfd_mach_avr5},
+ {"atmega2560", AVR_ISA_ALL, bfd_mach_avr6},
+ {"atmega2561", AVR_ISA_ALL, bfd_mach_avr6},
{NULL, 0, 0}
};
@@ -512,7 +525,7 @@ avr_offset_expression (expressionS *exp)
if (exp->X_op == O_constant)
{
int x = exp->X_add_number;
-
+
if (x < -255 || x > 255)
as_warn (_("constant out of 8-bit range: %d"), x);
}
@@ -544,6 +557,8 @@ avr_ldi_expression (expressionS *exp)
char *tmp;
char op[8];
int mod;
+ int linker_stubs_should_be_generated = 0;
+
tmp = str;
str = extract_word (str, op, sizeof (op));
@@ -551,7 +566,7 @@ avr_ldi_expression (expressionS *exp)
if (op[0])
{
mod_index m;
-
+
m.ptr = hash_find (avr_mod_hash, op);
mod = m.index;
@@ -564,11 +579,14 @@ avr_ldi_expression (expressionS *exp)
if (*str == '(')
{
+ bfd_reloc_code_real_type reloc_to_return;
int neg_p = 0;
++str;
if (strncmp ("pm(", str, 3) == 0
+ || strncmp ("gs(",str,3) == 0
+ || strncmp ("-(gs(",str,5) == 0
|| strncmp ("-(pm(", str, 5) == 0)
{
if (HAVE_PM_P (mod))
@@ -579,6 +597,9 @@ avr_ldi_expression (expressionS *exp)
else
as_bad (_("illegal expression"));
+ if (str[0] == 'g' || str[2] == 'g')
+ linker_stubs_should_be_generated = 1;
+
if (*str == '-')
{
neg_p = 1;
@@ -610,7 +631,24 @@ avr_ldi_expression (expressionS *exp)
}
while (closes--);
- return neg_p ? EXP_MOD_NEG_RELOC (mod) : EXP_MOD_RELOC (mod);
+ reloc_to_return =
+ neg_p ? EXP_MOD_NEG_RELOC (mod) : EXP_MOD_RELOC (mod);
+ if (linker_stubs_should_be_generated)
+ {
+ switch (reloc_to_return)
+ {
+ case BFD_RELOC_AVR_LO8_LDI_PM:
+ reloc_to_return = BFD_RELOC_AVR_LO8_LDI_GS;
+ break;
+ case BFD_RELOC_AVR_HI8_LDI_PM:
+ reloc_to_return = BFD_RELOC_AVR_HI8_LDI_GS;
+ break;
+
+ default:
+ as_warn (_("expression dangerous with linker stubs"));
+ }
+ }
+ return reloc_to_return;
}
}
}
@@ -1227,7 +1265,7 @@ tc_gen_reloc (asection *seg ATTRIBUTE_UNUSED,
return NULL;
}
- /* We are dealing with two symbols defined in the same section.
+ /* We are dealing with two symbols defined in the same section.
Let us fix-up them here. */
value += S_GET_VALUE (fixp->fx_addsy);
value -= S_GET_VALUE (fixp->fx_subsy);
@@ -1310,7 +1348,8 @@ md_assemble (char *str)
static int exp_mod_pm = 0;
/* Parse special CONS expression: pm (expression)
- which is used for addressing to a program memory.
+ or alternatively: gs (expression).
+ These are used for addressing program memory.
Relocation: BFD_RELOC_AVR_16_PM. */
void
@@ -1324,10 +1363,13 @@ avr_parse_cons_expression (expressionS *exp, int nbytes)
if (nbytes == 2)
{
- char *pm_name = "pm";
- int len = strlen (pm_name);
+ char *pm_name1 = "pm";
+ char *pm_name2 = "gs";
+ int len = strlen (pm_name1);
+ /* len must be the same for both pm identifiers. */
- if (strncasecmp (input_line_pointer, pm_name, len) == 0)
+ if (strncasecmp (input_line_pointer, pm_name1, len) == 0
+ || strncasecmp (input_line_pointer, pm_name2, len) == 0)
{
input_line_pointer = skip_space (input_line_pointer + len);
diff --git a/gas/config/tc-avr.h b/gas/config/tc-avr.h
index 61fc5941cd23..02f82896531f 100644
--- a/gas/config/tc-avr.h
+++ b/gas/config/tc-avr.h
@@ -1,5 +1,6 @@
/* This file is tc-avr.h
- Copyright 1999, 2000, 2001, 2002, 2005 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2001, 2002, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Contributed by Denis Chertykov <denisc@overta.ru>
@@ -109,7 +110,7 @@ extern long md_pcrel_from_section (struct fix *, segT);
would print `12 34 56 78'. The default value is 4. */
#define LISTING_WORD_SIZE 2
-/* AVR port uses `$' as a logical line separator */
+/* AVR port uses `$' as a logical line separator. */
#define LEX_DOLLAR 0
/* An `.lcomm' directive with no explicit alignment parameter will
@@ -125,16 +126,24 @@ extern long md_pcrel_from_section (struct fix *, segT);
We will need them in case that we want to do linker relaxation.
We could in principle keep these fixups in gas when not relaxing.
However, there is no serious performance penilty when making the linker
- make the fixup work. */
-#define TC_VALIDATE_FIX(FIXP,SEG,SKIP) \
- if ( (FIXP->fx_r_type == BFD_RELOC_AVR_7_PCREL \
- || FIXP->fx_r_type == BFD_RELOC_AVR_13_PCREL \
- || FIXP->fx_r_type == BFD_RELOC_AVR_LO8_LDI_PM \
- || FIXP->fx_r_type == BFD_RELOC_AVR_HI8_LDI_PM \
- || FIXP->fx_r_type == BFD_RELOC_AVR_HH8_LDI_PM \
- || FIXP->fx_r_type == BFD_RELOC_AVR_16_PM) \
- && (FIXP->fx_addsy)) \
- { \
- goto SKIP; \
+ make the fixup work. Check also that fx_addsy is not NULL, in order to make
+ sure that the fixup refers to some sort of lable. */
+#define TC_VALIDATE_FIX(FIXP,SEG,SKIP) \
+ if ( (FIXP->fx_r_type == BFD_RELOC_AVR_7_PCREL \
+ || FIXP->fx_r_type == BFD_RELOC_AVR_13_PCREL \
+ || FIXP->fx_r_type == BFD_RELOC_AVR_LO8_LDI_PM \
+ || FIXP->fx_r_type == BFD_RELOC_AVR_LO8_LDI_GS \
+ || FIXP->fx_r_type == BFD_RELOC_AVR_HI8_LDI_PM \
+ || FIXP->fx_r_type == BFD_RELOC_AVR_HI8_LDI_GS \
+ || FIXP->fx_r_type == BFD_RELOC_AVR_HH8_LDI_PM \
+ || FIXP->fx_r_type == BFD_RELOC_AVR_LO8_LDI_PM_NEG \
+ || FIXP->fx_r_type == BFD_RELOC_AVR_HI8_LDI_PM_NEG \
+ || FIXP->fx_r_type == BFD_RELOC_AVR_HH8_LDI_PM_NEG \
+ || FIXP->fx_r_type == BFD_RELOC_AVR_16_PM) \
+ && (FIXP->fx_addsy)) \
+ { \
+ goto SKIP; \
}
+/* This target is buggy, and sets fix size too large. */
+#define TC_FX_SIZE_SLACK(FIX) 2
diff --git a/gas/config/tc-bfin.c b/gas/config/tc-bfin.c
index 43d48d624ea0..aff8ed8a8fd7 100644
--- a/gas/config/tc-bfin.c
+++ b/gas/config/tc-bfin.c
@@ -1,5 +1,5 @@
/* tc-bfin.c -- Assembler for the ADI Blackfin.
- Copyright 2005
+ Copyright 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -21,7 +21,6 @@
#include "as.h"
#include "struc-symbol.h"
-#include "obj-elf.h"
#include "bfin-defs.h"
#include "obstack.h"
#include "safe-ctype.h"
@@ -834,9 +833,14 @@ bfin_start_line_hook ()
char *c1, *label_name;
symbolS *line_label;
char *c = input_line_pointer;
+ int cr_num = 0;
while (ISSPACE (*c))
- c++;
+ {
+ if (*c == '\n')
+ cr_num++;
+ c++;
+ }
/* Look for Loop_Begin or Loop_End statements. */
@@ -902,6 +906,12 @@ bfin_start_line_hook ()
c1 = c;
while (ISALPHA (*c) || ISDIGIT (*c) || *c == '_') c++;
+ if (input_line_pointer[-1] == '\n')
+ bump_line_counters ();
+
+ while (cr_num--)
+ bump_line_counters ();
+
input_line_pointer = c;
if (maybe_end)
{
@@ -929,11 +939,7 @@ bfin_start_line_hook ()
/* Special extra functions that help bfin-parse.y perform its job. */
-#include <stdio.h>
#include <assert.h>
-#include <obstack.h>
-#include <bfd.h>
-#include "bfin-defs.h"
struct obstack mempool;
@@ -1054,7 +1060,7 @@ Expr_Node_Gen_Reloc (Expr_Node * head, int parent_reloc)
}
switch (parent_reloc)
{
- /* Some reloctions will need to allocate extra words. */
+ /* Some relocations will need to allocate extra words. */
case BFD_RELOC_BFIN_16_IMM:
case BFD_RELOC_BFIN_16_LOW:
case BFD_RELOC_BFIN_16_HIGH:
@@ -1969,42 +1975,6 @@ bfin_eol_in_insn (char *line)
}
bfd_boolean
-bfin_name_is_register (char *name)
-{
- int i;
-
- if (*name == '[' || *name == '(')
- return TRUE;
-
- if ((name[0] == 'W' || name[0] == 'w') && name[1] == '[')
- return TRUE;
-
- if ((name[0] == 'B' || name[0] == 'b') && name[1] == '[')
- return TRUE;
-
- for (i=0; bfin_reg_info[i].name != 0; i++)
- {
- if (!strcasecmp (bfin_reg_info[i].name, name))
- return TRUE;
- }
- return FALSE;
-}
-
-void
-bfin_equals (Expr_Node *sym)
-{
- char *c;
-
- c = input_line_pointer;
- while (*c != '=')
- c--;
-
- input_line_pointer = c;
-
- equals ((char *) sym->value.s_value, 1);
-}
-
-bfd_boolean
bfin_start_label (char *ptr)
{
ptr--;
diff --git a/gas/config/tc-bfin.h b/gas/config/tc-bfin.h
index 773030cbb720..e1f95a9e57c5 100644
--- a/gas/config/tc-bfin.h
+++ b/gas/config/tc-bfin.h
@@ -52,9 +52,9 @@ extern bfd_boolean bfin_start_label PARAMS ((char *));
#define TC_EOL_IN_INSN(PTR) (bfin_eol_in_insn(PTR) ? 1 : 0)
extern bfd_boolean bfin_eol_in_insn PARAMS ((char *));
-/* The instruction is permitted to contain an = character. */
-#define TC_EQUAL_IN_INSN(C, NAME) (bfin_name_is_register (NAME) ? 1 : 0)
-extern bfd_boolean bfin_name_is_register PARAMS ((char *));
+/* Almost all instructions of Blackfin contain an = character. */
+#define TC_EQUAL_IN_INSN(C, NAME) 1
+
#define NOP_OPCODE 0x0000
#define LOCAL_LABELS_FB 1
@@ -75,4 +75,7 @@ extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
/* Values passed to md_apply_fix3 don't include symbol values. */
#define MD_APPLY_SYM_VALUE(FIX) 0
+/* This target is buggy, and sets fix size too large. */
+#define TC_FX_SIZE_SLACK(FIX) 2
+
/* end of tc-bfin.h */
diff --git a/gas/config/tc-cr16.c b/gas/config/tc-cr16.c
new file mode 100644
index 000000000000..2c4c6a476849
--- /dev/null
+++ b/gas/config/tc-cr16.c
@@ -0,0 +1,2444 @@
+/* tc-cr16.c -- Assembler code for the CR16 CPU core.
+ Copyright 2007 Free Software Foundation, Inc.
+
+ Contributed by M R Swami Reddy <MR.Swami.Reddy@nsc.com>
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to the
+ Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "as.h"
+#include "safe-ctype.h"
+#include "dwarf2dbg.h"
+#include "opcode/cr16.h"
+#include "elf/cr16.h"
+
+
+/* Word is considered here as a 16-bit unsigned short int. */
+#define WORD_SHIFT 16
+
+/* Register is 2-byte size. */
+#define REG_SIZE 2
+
+/* Maximum size of a single instruction (in words). */
+#define INSN_MAX_SIZE 3
+
+/* Maximum bits which may be set in a `mask16' operand. */
+#define MAX_REGS_IN_MASK16 8
+
+/* Assign a number NUM, shifted by SHIFT bytes, into a location
+ pointed by index BYTE of array 'output_opcode'. */
+#define CR16_PRINT(BYTE, NUM, SHIFT) output_opcode[BYTE] |= (NUM << SHIFT)
+
+/* Operand errors. */
+typedef enum
+ {
+ OP_LEGAL = 0, /* Legal operand. */
+ OP_OUT_OF_RANGE, /* Operand not within permitted range. */
+ OP_NOT_EVEN /* Operand is Odd number, should be even. */
+ }
+op_err;
+
+/* Opcode mnemonics hash table. */
+static struct hash_control *cr16_inst_hash;
+/* CR16 registers hash table. */
+static struct hash_control *reg_hash;
+/* CR16 register pair hash table. */
+static struct hash_control *regp_hash;
+/* CR16 processor registers hash table. */
+static struct hash_control *preg_hash;
+/* CR16 processor registers 32 bit hash table. */
+static struct hash_control *pregp_hash;
+/* Current instruction we're assembling. */
+const inst *instruction;
+
+
+static int code_label = 0;
+
+/* Global variables. */
+
+/* Array to hold an instruction encoding. */
+long output_opcode[2];
+
+/* Nonzero means a relocatable symbol. */
+int relocatable;
+
+/* A copy of the original instruction (used in error messages). */
+char ins_parse[MAX_INST_LEN];
+
+/* The current processed argument number. */
+int cur_arg_num;
+
+/* Generic assembler global variables which must be defined by all targets. */
+
+/* Characters which always start a comment. */
+const char comment_chars[] = "#";
+
+/* Characters which start a comment at the beginning of a line. */
+const char line_comment_chars[] = "#";
+
+/* This array holds machine specific line separator characters. */
+const char line_separator_chars[] = ";";
+
+/* Chars that can be used to separate mant from exp in floating point nums. */
+const char EXP_CHARS[] = "eE";
+
+/* Chars that mean this number is a floating point constant as in 0f12.456 */
+const char FLT_CHARS[] = "f'";
+
+/* Target-specific multicharacter options, not const-declared at usage. */
+const char *md_shortopts = "";
+struct option md_longopts[] =
+{
+ {NULL, no_argument, NULL, 0}
+};
+size_t md_longopts_size = sizeof (md_longopts);
+
+static void
+l_cons (int nbytes)
+{
+ int c;
+ expressionS exp;
+
+#ifdef md_flush_pending_output
+ md_flush_pending_output ();
+#endif
+
+ if (is_it_end_of_statement ())
+ {
+ demand_empty_rest_of_line ();
+ return;
+ }
+
+#ifdef TC_ADDRESS_BYTES
+ if (nbytes == 0)
+ nbytes = TC_ADDRESS_BYTES ();
+#endif
+
+#ifdef md_cons_align
+ md_cons_align (nbytes);
+#endif
+
+ c = 0;
+ do
+ {
+ unsigned int bits_available = BITS_PER_CHAR * nbytes;
+ char *hold = input_line_pointer;
+
+ expression (&exp);
+
+ if (*input_line_pointer == ':')
+ {
+ /* Bitfields. */
+ long value = 0;
+
+ for (;;)
+ {
+ unsigned long width;
+
+ if (*input_line_pointer != ':')
+ {
+ input_line_pointer = hold;
+ break;
+ }
+ if (exp.X_op == O_absent)
+ {
+ as_warn (_("using a bit field width of zero"));
+ exp.X_add_number = 0;
+ exp.X_op = O_constant;
+ }
+
+ if (exp.X_op != O_constant)
+ {
+ *input_line_pointer = '\0';
+ as_bad (_("field width \"%s\" too complex for a bitfield"), hold);
+ *input_line_pointer = ':';
+ demand_empty_rest_of_line ();
+ return;
+ }
+
+ if ((width = exp.X_add_number) >
+ (unsigned int)(BITS_PER_CHAR * nbytes))
+ {
+ as_warn (_("field width %lu too big to fit in %d bytes: truncated to %d bits"), width, nbytes, (BITS_PER_CHAR * nbytes));
+ width = BITS_PER_CHAR * nbytes;
+ } /* Too big. */
+
+
+ if (width > bits_available)
+ {
+ /* FIXME-SOMEDAY: backing up and reparsing is wasteful. */
+ input_line_pointer = hold;
+ exp.X_add_number = value;
+ break;
+ }
+
+ /* Skip ':'. */
+ hold = ++input_line_pointer;
+
+ expression (&exp);
+ if (exp.X_op != O_constant)
+ {
+ char cache = *input_line_pointer;
+
+ *input_line_pointer = '\0';
+ as_bad (_("field value \"%s\" too complex for a bitfield"), hold);
+ *input_line_pointer = cache;
+ demand_empty_rest_of_line ();
+ return;
+ }
+
+ value |= ((~(-1 << width) & exp.X_add_number)
+ << ((BITS_PER_CHAR * nbytes) - bits_available));
+
+ if ((bits_available -= width) == 0
+ || is_it_end_of_statement ()
+ || *input_line_pointer != ',')
+ break;
+
+ hold = ++input_line_pointer;
+ expression (&exp);
+ }
+
+ exp.X_add_number = value;
+ exp.X_op = O_constant;
+ exp.X_unsigned = 1;
+ }
+
+ if ((*(input_line_pointer) == '@') && (*(input_line_pointer +1) == 'c'))
+ code_label = 1;
+ emit_expr (&exp, (unsigned int) nbytes);
+ ++c;
+ if ((*(input_line_pointer) == '@') && (*(input_line_pointer +1) == 'c'))
+ {
+ input_line_pointer +=3;
+ break;
+ }
+ }
+ while ((*input_line_pointer++ == ','));
+
+ /* Put terminator back into stream. */
+ input_line_pointer--;
+
+ demand_empty_rest_of_line ();
+}
+
+
+/* This table describes all the machine specific pseudo-ops
+ the assembler has to support. The fields are:
+ *** Pseudo-op name without dot.
+ *** Function to call to execute this pseudo-op.
+ *** Integer arg to pass to the function. */
+
+const pseudo_typeS md_pseudo_table[] =
+{
+ /* In CR16 machine, align is in bytes (not a ptwo boundary). */
+ {"align", s_align_bytes, 0},
+ {"long", l_cons, 4 },
+ {0, 0, 0}
+};
+
+/* CR16 relaxation table. */
+const relax_typeS md_relax_table[] =
+{
+ /* bCC */
+ {0xfa, -0x100, 2, 1}, /* 8 */
+ {0xfffe, -0x10000, 4, 2}, /* 16 */
+ {0xfffffe, -0x1000000, 6, 0}, /* 24 */
+};
+
+/* Return the bit size for a given operand. */
+
+static int
+get_opbits (operand_type op)
+{
+ if (op < MAX_OPRD)
+ return cr16_optab[op].bit_size;
+
+ return 0;
+}
+
+/* Return the argument type of a given operand. */
+
+static argtype
+get_optype (operand_type op)
+{
+ if (op < MAX_OPRD)
+ return cr16_optab[op].arg_type;
+ else
+ return nullargs;
+}
+
+/* Return the flags of a given operand. */
+
+static int
+get_opflags (operand_type op)
+{
+ if (op < MAX_OPRD)
+ return cr16_optab[op].flags;
+
+ return 0;
+}
+
+/* Get the cc code. */
+
+static int
+get_cc (char *cc_name)
+{
+ unsigned int i;
+
+ for (i = 0; i < cr16_num_cc; i++)
+ if (strcmp (cc_name, cr16_b_cond_tab[i]) == 0)
+ return i;
+
+ return -1;
+}
+
+/* Get the core processor register 'reg_name'. */
+
+static reg
+get_register (char *reg_name)
+{
+ const reg_entry *reg;
+
+ reg = (const reg_entry *) hash_find (reg_hash, reg_name);
+
+ if (reg != NULL)
+ return reg->value.reg_val;
+
+ return nullregister;
+}
+/* Get the core processor register-pair 'reg_name'. */
+
+static reg
+get_register_pair (char *reg_name)
+{
+ const reg_entry *reg;
+ char tmp_rp[16]="\0";
+
+ /* Add '(' and ')' to the reg pair, if its not present. */
+ if (reg_name[0] != '(')
+ {
+ tmp_rp[0] = '(';
+ strcat (tmp_rp, reg_name);
+ strcat (tmp_rp,")");
+ reg = (const reg_entry *) hash_find (regp_hash, tmp_rp);
+ }
+ else
+ reg = (const reg_entry *) hash_find (regp_hash, reg_name);
+
+ if (reg != NULL)
+ return reg->value.reg_val;
+
+ return nullregister;
+}
+
+/* Get the index register 'reg_name'. */
+
+static reg
+get_index_register (char *reg_name)
+{
+ const reg_entry *reg;
+
+ reg = (const reg_entry *) hash_find (reg_hash, reg_name);
+
+ if ((reg != NULL)
+ && ((reg->value.reg_val == 12) || (reg->value.reg_val == 13)))
+ return reg->value.reg_val;
+
+ return nullregister;
+}
+/* Get the core processor index register-pair 'reg_name'. */
+
+static reg
+get_index_register_pair (char *reg_name)
+{
+ const reg_entry *reg;
+
+ reg = (const reg_entry *) hash_find (regp_hash, reg_name);
+
+ if (reg != NULL)
+ {
+ if ((reg->value.reg_val != 1) || (reg->value.reg_val != 7)
+ || (reg->value.reg_val != 9) || (reg->value.reg_val > 10))
+ return reg->value.reg_val;
+
+ as_bad (_("Unknown register pair - index relative mode: `%d'"), reg->value.reg_val);
+ }
+
+ return nullregister;
+}
+
+/* Get the processor register 'preg_name'. */
+
+static preg
+get_pregister (char *preg_name)
+{
+ const reg_entry *preg;
+
+ preg = (const reg_entry *) hash_find (preg_hash, preg_name);
+
+ if (preg != NULL)
+ return preg->value.preg_val;
+
+ return nullpregister;
+}
+
+/* Get the processor register 'preg_name 32 bit'. */
+
+static preg
+get_pregisterp (char *preg_name)
+{
+ const reg_entry *preg;
+
+ preg = (const reg_entry *) hash_find (pregp_hash, preg_name);
+
+ if (preg != NULL)
+ return preg->value.preg_val;
+
+ return nullpregister;
+}
+
+
+/* Round up a section size to the appropriate boundary. */
+
+valueT
+md_section_align (segT seg, valueT val)
+{
+ /* Round .text section to a multiple of 2. */
+ if (seg == text_section)
+ return (val + 1) & ~1;
+ return val;
+}
+
+/* Parse an operand that is machine-specific (remove '*'). */
+
+void
+md_operand (expressionS * exp)
+{
+ char c = *input_line_pointer;
+
+ switch (c)
+ {
+ case '*':
+ input_line_pointer++;
+ expression (exp);
+ break;
+ default:
+ break;
+ }
+}
+
+/* Reset global variables before parsing a new instruction. */
+
+static void
+reset_vars (char *op)
+{
+ cur_arg_num = relocatable = 0;
+ memset (& output_opcode, '\0', sizeof (output_opcode));
+
+ /* Save a copy of the original OP (used in error messages). */
+ strncpy (ins_parse, op, sizeof ins_parse - 1);
+ ins_parse [sizeof ins_parse - 1] = 0;
+}
+
+/* This macro decides whether a particular reloc is an entry in a
+ switch table. It is used when relaxing, because the linker needs
+ to know about all such entries so that it can adjust them if
+ necessary. */
+
+#define SWITCH_TABLE(fix) \
+ ( (fix)->fx_addsy != NULL \
+ && (fix)->fx_subsy != NULL \
+ && S_GET_SEGMENT ((fix)->fx_addsy) == \
+ S_GET_SEGMENT ((fix)->fx_subsy) \
+ && S_GET_SEGMENT (fix->fx_addsy) != undefined_section \
+ && ( (fix)->fx_r_type == BFD_RELOC_CR16_NUM8 \
+ || (fix)->fx_r_type == BFD_RELOC_CR16_NUM16 \
+ || (fix)->fx_r_type == BFD_RELOC_CR16_NUM32 \
+ || (fix)->fx_r_type == BFD_RELOC_CR16_NUM32a))
+
+/* See whether we need to force a relocation into the output file.
+ This is used to force out switch and PC relative relocations when
+ relaxing. */
+
+int
+cr16_force_relocation (fixS *fix)
+{
+ /* REVISIT: Check if the "SWITCH_TABLE (fix)" should be added
+ if (generic_force_reloc (fix) || SWITCH_TABLE (fix)) */
+ if (generic_force_reloc (fix))
+ return 1;
+
+ return 0;
+}
+
+/* Record a fixup for a cons expression. */
+
+void
+cr16_cons_fix_new (fragS *frag, int offset, int len, expressionS *exp)
+{
+ int rtype;
+ switch (len)
+ {
+ default: rtype = BFD_RELOC_NONE; break;
+ case 1: rtype = BFD_RELOC_CR16_NUM8 ; break;
+ case 2: rtype = BFD_RELOC_CR16_NUM16; break;
+ case 4:
+ if (code_label)
+ {
+ rtype = BFD_RELOC_CR16_NUM32a;
+ code_label = 0;
+ }
+ else
+ rtype = BFD_RELOC_CR16_NUM32;
+ break;
+ }
+
+ fix_new_exp (frag, offset, len, exp, 0, rtype);
+}
+
+/* Generate a relocation entry for a fixup. */
+
+arelent *
+tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS * fixP)
+{
+ arelent * reloc;
+
+ reloc = xmalloc (sizeof (arelent));
+ reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
+ *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy);
+ reloc->address = fixP->fx_frag->fr_address + fixP->fx_where;
+ reloc->addend = fixP->fx_offset;
+
+ if (fixP->fx_subsy != NULL)
+ {
+ if (SWITCH_TABLE (fixP))
+ {
+ /* Keep the current difference in the addend. */
+ reloc->addend = (S_GET_VALUE (fixP->fx_addsy)
+ - S_GET_VALUE (fixP->fx_subsy) + fixP->fx_offset);
+
+ switch (fixP->fx_r_type)
+ {
+ case BFD_RELOC_CR16_NUM8:
+ fixP->fx_r_type = BFD_RELOC_CR16_NUM8;
+ break;
+ case BFD_RELOC_CR16_NUM16:
+ fixP->fx_r_type = BFD_RELOC_CR16_NUM16;
+ break;
+ case BFD_RELOC_CR16_NUM32:
+ fixP->fx_r_type = BFD_RELOC_CR16_NUM32;
+ break;
+ case BFD_RELOC_CR16_NUM32a:
+ fixP->fx_r_type = BFD_RELOC_CR16_NUM32a;
+ break;
+ default:
+ abort ();
+ break;
+ }
+ }
+ else
+ {
+ /* We only resolve difference expressions in the same section. */
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("can't resolve `%s' {%s section} - `%s' {%s section}"),
+ fixP->fx_addsy ? S_GET_NAME (fixP->fx_addsy) : "0",
+ segment_name (fixP->fx_addsy
+ ? S_GET_SEGMENT (fixP->fx_addsy)
+ : absolute_section),
+ S_GET_NAME (fixP->fx_subsy),
+ segment_name (S_GET_SEGMENT (fixP->fx_addsy)));
+ }
+ }
+
+ assert ((int) fixP->fx_r_type > 0);
+ reloc->howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
+
+ if (reloc->howto == NULL)
+ {
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("internal error: reloc %d (`%s') not supported by object file format"),
+ fixP->fx_r_type,
+ bfd_get_reloc_code_name (fixP->fx_r_type));
+ return NULL;
+ }
+ assert (!fixP->fx_pcrel == !reloc->howto->pc_relative);
+
+ return reloc;
+}
+
+/* Prepare machine-dependent frags for relaxation. */
+
+int
+md_estimate_size_before_relax (fragS *fragp, asection *seg)
+{
+ /* If symbol is undefined or located in a different section,
+ select the largest supported relocation. */
+ relax_substateT subtype;
+ relax_substateT rlx_state[] = {0, 2};
+
+ for (subtype = 0; subtype < ARRAY_SIZE (rlx_state); subtype += 2)
+ {
+ if (fragp->fr_subtype == rlx_state[subtype]
+ && (!S_IS_DEFINED (fragp->fr_symbol)
+ || seg != S_GET_SEGMENT (fragp->fr_symbol)))
+ {
+ fragp->fr_subtype = rlx_state[subtype + 1];
+ break;
+ }
+ }
+
+ if (fragp->fr_subtype >= ARRAY_SIZE (md_relax_table))
+ abort ();
+
+ return md_relax_table[fragp->fr_subtype].rlx_length;
+}
+
+void
+md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, fragS *fragP)
+{
+ /* 'opcode' points to the start of the instruction, whether
+ we need to change the instruction's fixed encoding. */
+ bfd_reloc_code_real_type reloc = BFD_RELOC_NONE;
+
+ subseg_change (sec, 0);
+
+ fix_new (fragP, fragP->fr_fix,
+ bfd_get_reloc_size (bfd_reloc_type_lookup (stdoutput, reloc)),
+ fragP->fr_symbol, fragP->fr_offset, 1, reloc);
+ fragP->fr_var = 0;
+ fragP->fr_fix += md_relax_table[fragP->fr_subtype].rlx_length;
+}
+
+/* Process machine-dependent command line options. Called once for
+ each option on the command line that the machine-independent part of
+ GAS does not understand. */
+
+int
+md_parse_option (int c ATTRIBUTE_UNUSED, char *arg ATTRIBUTE_UNUSED)
+{
+ return 0;
+}
+
+/* Machine-dependent usage-output. */
+
+void
+md_show_usage (FILE *stream ATTRIBUTE_UNUSED)
+{
+ return;
+}
+
+/* Turn a string in input_line_pointer into a floating point constant
+ of type TYPE, and store the appropriate bytes in *LITP. The number
+ of LITTLENUMS emitted is stored in *SIZEP. An error message is
+ returned, or NULL on OK. */
+
+char *
+md_atof (int type, char *litP, int *sizeP)
+{
+ int prec;
+ int i;
+ LITTLENUM_TYPE words[4];
+ char *t;
+
+ switch (type)
+ {
+ case 'f':
+ prec = 2;
+ break;
+
+ case 'd':
+ prec = 4;
+ break;
+
+ default:
+ *sizeP = 0;
+ return _("bad call to md_atof");
+ }
+
+ t = atof_ieee (input_line_pointer, type, words);
+ if (t)
+ input_line_pointer = t;
+
+ *sizeP = prec * 2;
+
+ if (! target_big_endian)
+ {
+ for (i = prec - 1; i >= 0; i--)
+ {
+ md_number_to_chars (litP, (valueT) words[i], 2);
+ litP += 2;
+ }
+ }
+ else
+ {
+ for (i = 0; i < prec; i++)
+ {
+ md_number_to_chars (litP, (valueT) words[i], 2);
+ litP += 2;
+ }
+ }
+
+ return NULL;
+}
+
+/* Apply a fixS (fixup of an instruction or data that we didn't have
+ enough info to complete immediately) to the data in a frag.
+ Since linkrelax is nonzero and TC_LINKRELAX_FIXUP is defined to disable
+ relaxation of debug sections, this function is called only when
+ fixuping relocations of debug sections. */
+
+void
+md_apply_fix (fixS *fixP, valueT *valP, segT seg)
+{
+ valueT val = * valP;
+ char *buf = fixP->fx_frag->fr_literal + fixP->fx_where;
+ fixP->fx_offset = 0;
+
+ switch (fixP->fx_r_type)
+ {
+ case BFD_RELOC_CR16_NUM8:
+ bfd_put_8 (stdoutput, (unsigned char) val, buf);
+ break;
+ case BFD_RELOC_CR16_NUM16:
+ bfd_put_16 (stdoutput, val, buf);
+ break;
+ case BFD_RELOC_CR16_NUM32:
+ bfd_put_32 (stdoutput, val, buf);
+ break;
+ case BFD_RELOC_CR16_NUM32a:
+ bfd_put_32 (stdoutput, val, buf);
+ break;
+ default:
+ /* We shouldn't ever get here because linkrelax is nonzero. */
+ abort ();
+ break;
+ }
+
+ fixP->fx_done = 0;
+
+ if (fixP->fx_addsy == NULL
+ && fixP->fx_pcrel == 0)
+ fixP->fx_done = 1;
+
+ if (fixP->fx_pcrel == 1
+ && fixP->fx_addsy != NULL
+ && S_GET_SEGMENT (fixP->fx_addsy) == seg)
+ fixP->fx_done = 1;
+}
+
+/* The location from which a PC relative jump should be calculated,
+ given a PC relative reloc. */
+
+long
+md_pcrel_from (fixS *fixp)
+{
+ return fixp->fx_frag->fr_address + fixp->fx_where;
+}
+
+static void
+initialise_reg_hash_table (struct hash_control ** hash_table,
+ const reg_entry * register_table,
+ const unsigned int num_entries)
+{
+ const reg_entry * reg;
+ const char *hashret;
+
+ if ((* hash_table = hash_new ()) == NULL)
+ as_fatal (_("Virtual memory exhausted"));
+
+ for (reg = register_table;
+ reg < (register_table + num_entries);
+ reg++)
+ {
+ hashret = hash_insert (* hash_table, reg->name, (char *) reg);
+ if (hashret)
+ as_fatal (_("Internal Error: Can't hash %s: %s"),
+ reg->name, hashret);
+ }
+}
+
+/* This function is called once, at assembler startup time. This should
+ set up all the tables, etc that the MD part of the assembler needs. */
+
+void
+md_begin (void)
+{
+ int i = 0;
+
+ /* Set up a hash table for the instructions. */
+ if ((cr16_inst_hash = hash_new ()) == NULL)
+ as_fatal (_("Virtual memory exhausted"));
+
+ while (cr16_instruction[i].mnemonic != NULL)
+ {
+ const char *hashret;
+ const char *mnemonic = cr16_instruction[i].mnemonic;
+
+ hashret = hash_insert (cr16_inst_hash, mnemonic,
+ (char *)(cr16_instruction + i));
+
+ if (hashret != NULL && *hashret != '\0')
+ as_fatal (_("Can't hash `%s': %s\n"), cr16_instruction[i].mnemonic,
+ *hashret == 0 ? _("(unknown reason)") : hashret);
+
+ /* Insert unique names into hash table. The CR16 instruction set
+ has many identical opcode names that have different opcodes based
+ on the operands. This hash table then provides a quick index to
+ the first opcode with a particular name in the opcode table. */
+ do
+ {
+ ++i;
+ }
+ while (cr16_instruction[i].mnemonic != NULL
+ && streq (cr16_instruction[i].mnemonic, mnemonic));
+ }
+
+ /* Initialize reg_hash hash table. */
+ initialise_reg_hash_table (& reg_hash, cr16_regtab, NUMREGS);
+ /* Initialize regp_hash hash table. */
+ initialise_reg_hash_table (& regp_hash, cr16_regptab, NUMREGPS);
+ /* Initialize preg_hash hash table. */
+ initialise_reg_hash_table (& preg_hash, cr16_pregtab, NUMPREGS);
+ /* Initialize pregp_hash hash table. */
+ initialise_reg_hash_table (& pregp_hash, cr16_pregptab, NUMPREGPS);
+
+ /* Set linkrelax here to avoid fixups in most sections. */
+ linkrelax = 1;
+}
+
+/* Process constants (immediate/absolute)
+ and labels (jump targets/Memory locations). */
+
+static void
+process_label_constant (char *str, ins * cr16_ins)
+{
+ char *saved_input_line_pointer;
+ int symbol_with_at = 0;
+ int symbol_with_s = 0;
+ int symbol_with_m = 0;
+ int symbol_with_l = 0;
+ argument *cur_arg = cr16_ins->arg + cur_arg_num; /* Current argument. */
+
+ saved_input_line_pointer = input_line_pointer;
+ input_line_pointer = str;
+
+ expression (&cr16_ins->exp);
+
+ switch (cr16_ins->exp.X_op)
+ {
+ case O_big:
+ case O_absent:
+ /* Missing or bad expr becomes absolute 0. */
+ as_bad (_("missing or invalid displacement expression `%s' taken as 0"),
+ str);
+ cr16_ins->exp.X_op = O_constant;
+ cr16_ins->exp.X_add_number = 0;
+ cr16_ins->exp.X_add_symbol = NULL;
+ cr16_ins->exp.X_op_symbol = NULL;
+ /* Fall through. */
+
+ case O_constant:
+ cur_arg->X_op = O_constant;
+ cur_arg->constant = cr16_ins->exp.X_add_number;
+ break;
+
+ case O_symbol:
+ case O_subtract:
+ case O_add:
+ cur_arg->X_op = O_symbol;
+ cr16_ins->rtype = BFD_RELOC_NONE;
+ relocatable = 1;
+
+ if (strneq (input_line_pointer, "@c", 2))
+ symbol_with_at = 1;
+
+ if (strneq (input_line_pointer, "@l", 2)
+ || strneq (input_line_pointer, ":l", 2))
+ symbol_with_l = 1;
+
+ if (strneq (input_line_pointer, "@m", 2)
+ || strneq (input_line_pointer, ":m", 2))
+ symbol_with_m = 1;
+
+ if (strneq (input_line_pointer, "@s", 2)
+ || strneq (input_line_pointer, ":s", 2))
+ symbol_with_s = 1;
+
+ switch (cur_arg->type)
+ {
+ case arg_cr:
+ if (IS_INSN_TYPE (LD_STOR_INS) || IS_INSN_TYPE (CSTBIT_INS))
+ {
+ if (cur_arg->size == 20)
+ cr16_ins->rtype = BFD_RELOC_CR16_REGREL20;
+ else
+ cr16_ins->rtype = BFD_RELOC_CR16_REGREL20a;
+ }
+ break;
+
+ case arg_crp:
+ if (IS_INSN_TYPE (LD_STOR_INS) || IS_INSN_TYPE (CSTBIT_INS))
+ switch (instruction->size)
+ {
+ case 1:
+ switch (cur_arg->size)
+ {
+ case 0:
+ cr16_ins->rtype = BFD_RELOC_CR16_REGREL0;
+ break;
+ case 4:
+ if (IS_INSN_MNEMONIC ("loadb") || IS_INSN_MNEMONIC ("storb"))
+ cr16_ins->rtype = BFD_RELOC_CR16_REGREL4;
+ else
+ cr16_ins->rtype = BFD_RELOC_CR16_REGREL4a;
+ break;
+ default: break;
+ }
+ break;
+ case 2:
+ cr16_ins->rtype = BFD_RELOC_CR16_REGREL16;
+ break;
+ case 3:
+ if (cur_arg->size == 20)
+ cr16_ins->rtype = BFD_RELOC_CR16_REGREL20;
+ else
+ cr16_ins->rtype = BFD_RELOC_CR16_REGREL20a;
+ break;
+ default:
+ break;
+ }
+ break;
+
+ case arg_idxr:
+ if (IS_INSN_TYPE (LD_STOR_INS) || IS_INSN_TYPE (CSTBIT_INS))
+ cr16_ins->rtype = BFD_RELOC_CR16_REGREL20;
+ break;
+
+ case arg_idxrp:
+ if (IS_INSN_TYPE (LD_STOR_INS) || IS_INSN_TYPE (CSTBIT_INS))
+ switch (instruction->size)
+ {
+ case 1: cr16_ins->rtype = BFD_RELOC_CR16_REGREL0; break;
+ case 2: cr16_ins->rtype = BFD_RELOC_CR16_REGREL14; break;
+ case 3: cr16_ins->rtype = BFD_RELOC_CR16_REGREL20; break;
+ default: break;
+ }
+ break;
+
+ case arg_c:
+ if (IS_INSN_MNEMONIC ("bal"))
+ cr16_ins->rtype = BFD_RELOC_CR16_DISP24;
+ else if (IS_INSN_TYPE (BRANCH_INS))
+ {
+ if (symbol_with_s)
+ cr16_ins->rtype = BFD_RELOC_CR16_DISP8;
+ else if (symbol_with_m)
+ cr16_ins->rtype = BFD_RELOC_CR16_DISP16;
+ else
+ cr16_ins->rtype = BFD_RELOC_CR16_DISP24;
+ }
+ else if (IS_INSN_TYPE (STOR_IMM_INS) || IS_INSN_TYPE (LD_STOR_INS)
+ || IS_INSN_TYPE (CSTBIT_INS))
+ {
+ if (symbol_with_s)
+ as_bad (_("operand %d: illegal use expression: `%s`"), cur_arg_num + 1, str);
+ if (symbol_with_m)
+ cr16_ins->rtype = BFD_RELOC_CR16_ABS20;
+ else /* Default to (symbol_with_l) */
+ cr16_ins->rtype = BFD_RELOC_CR16_ABS24;
+ }
+ else if (IS_INSN_TYPE (BRANCH_NEQ_INS))
+ cr16_ins->rtype = BFD_RELOC_CR16_DISP4;
+ break;
+
+ case arg_ic:
+ if (IS_INSN_TYPE (ARITH_INS))
+ {
+ if (symbol_with_s)
+ cr16_ins->rtype = BFD_RELOC_CR16_IMM4;
+ else if (symbol_with_m)
+ cr16_ins->rtype = BFD_RELOC_CR16_IMM20;
+ else if (symbol_with_at)
+ cr16_ins->rtype = BFD_RELOC_CR16_IMM32a;
+ else /* Default to (symbol_with_l) */
+ cr16_ins->rtype = BFD_RELOC_CR16_IMM32;
+ }
+ else if (IS_INSN_TYPE (ARITH_BYTE_INS))
+ {
+ cr16_ins->rtype = BFD_RELOC_CR16_IMM16;
+ }
+ break;
+ default:
+ break;
+ }
+ break;
+
+ default:
+ cur_arg->X_op = cr16_ins->exp.X_op;
+ break;
+ }
+
+ input_line_pointer = saved_input_line_pointer;
+ return;
+}
+
+/* Retrieve the opcode image of a given register.
+ If the register is illegal for the current instruction,
+ issue an error. */
+
+static int
+getreg_image (reg r)
+{
+ const reg_entry *reg;
+ char *reg_name;
+ int is_procreg = 0; /* Nonzero means argument should be processor reg. */
+
+ /* Check whether the register is in registers table. */
+ if (r < MAX_REG)
+ reg = cr16_regtab + r;
+ else /* Register not found. */
+ {
+ as_bad (_("Unknown register: `%d'"), r);
+ return 0;
+ }
+
+ reg_name = reg->name;
+
+/* Issue a error message when register is illegal. */
+#define IMAGE_ERR \
+ as_bad (_("Illegal register (`%s') in Instruction: `%s'"), \
+ reg_name, ins_parse); \
+ break;
+
+ switch (reg->type)
+ {
+ case CR16_R_REGTYPE:
+ if (! is_procreg)
+ return reg->image;
+ else
+ IMAGE_ERR;
+
+ case CR16_P_REGTYPE:
+ return reg->image;
+ break;
+
+ default:
+ IMAGE_ERR;
+ }
+
+ return 0;
+}
+
+/* Parsing different types of operands
+ -> constants Immediate/Absolute/Relative numbers
+ -> Labels Relocatable symbols
+ -> (reg pair base) Register pair base
+ -> (rbase) Register base
+ -> disp(rbase) Register relative
+ -> [rinx]disp(reg pair) Register index with reg pair mode
+ -> disp(rbase,ridx,scl) Register index mode. */
+
+static void
+set_operand (char *operand, ins * cr16_ins)
+{
+ char *operandS; /* Pointer to start of sub-opearand. */
+ char *operandE; /* Pointer to end of sub-opearand. */
+
+ argument *cur_arg = &cr16_ins->arg[cur_arg_num]; /* Current argument. */
+
+ /* Initialize pointers. */
+ operandS = operandE = operand;
+
+ switch (cur_arg->type)
+ {
+ case arg_ic: /* Case $0x18. */
+ operandS++;
+ case arg_c: /* Case 0x18. */
+ /* Set constant. */
+ process_label_constant (operandS, cr16_ins);
+
+ if (cur_arg->type != arg_ic)
+ cur_arg->type = arg_c;
+ break;
+
+ case arg_icr: /* Case $0x18(r1). */
+ operandS++;
+ case arg_cr: /* Case 0x18(r1). */
+ /* Set displacement constant. */
+ while (*operandE != '(')
+ operandE++;
+ *operandE = '\0';
+ process_label_constant (operandS, cr16_ins);
+ operandS = operandE;
+ case arg_rbase: /* Case (r1) or (r1,r0). */
+ operandS++;
+ /* Set register base. */
+ while (*operandE != ')')
+ operandE++;
+ *operandE = '\0';
+ if ((cur_arg->r = get_register (operandS)) == nullregister)
+ as_bad (_("Illegal register `%s' in Instruction `%s'"),
+ operandS, ins_parse);
+
+ /* set the arg->rp, if reg is "r12" or "r13" or "14" or "15" */
+ if ((cur_arg->type != arg_rbase)
+ && ((getreg_image (cur_arg->r) == 12)
+ || (getreg_image (cur_arg->r) == 13)
+ || (getreg_image (cur_arg->r) == 14)
+ || (getreg_image (cur_arg->r) == 15)))
+ {
+ cur_arg->type = arg_crp;
+ cur_arg->rp = cur_arg->r;
+ }
+ break;
+
+ case arg_crp: /* Case 0x18(r1,r0). */
+ /* Set displacement constant. */
+ while (*operandE != '(')
+ operandE++;
+ *operandE = '\0';
+ process_label_constant (operandS, cr16_ins);
+ operandS = operandE;
+ operandS++;
+ /* Set register pair base. */
+ while (*operandE != ')')
+ operandE++;
+ *operandE = '\0';
+ if ((cur_arg->rp = get_register_pair (operandS)) == nullregister)
+ as_bad (_("Illegal register pair `%s' in Instruction `%s'"),
+ operandS, ins_parse);
+ break;
+
+ case arg_idxr:
+ /* Set register pair base. */
+ if ((strchr (operandS,'(') != NULL))
+ {
+ while ((*operandE != '(') && (! ISSPACE (*operandE)))
+ operandE++;
+ if ((cur_arg->rp = get_index_register_pair (operandE)) == nullregister)
+ as_bad (_("Illegal register pair `%s' in Instruction `%s'"),
+ operandS, ins_parse);
+ *operandE++ = '\0';
+ cur_arg->type = arg_idxrp;
+ }
+ else
+ cur_arg->rp = -1;
+
+ operandE = operandS;
+ /* Set displacement constant. */
+ while (*operandE != ']')
+ operandE++;
+ process_label_constant (++operandE, cr16_ins);
+ *operandE++ = '\0';
+ operandE = operandS;
+
+ /* Set index register . */
+ operandS = strchr (operandE,'[');
+ if (operandS != NULL)
+ { /* Eliminate '[', detach from rest of operand. */
+ *operandS++ = '\0';
+
+ operandE = strchr (operandS, ']');
+
+ if (operandE == NULL)
+ as_bad (_("unmatched '['"));
+ else
+ { /* Eliminate ']' and make sure it was the last thing
+ in the string. */
+ *operandE = '\0';
+ if (*(operandE + 1) != '\0')
+ as_bad (_("garbage after index spec ignored"));
+ }
+ }
+
+ if ((cur_arg->i_r = get_index_register (operandS)) == nullregister)
+ as_bad (_("Illegal register `%s' in Instruction `%s'"),
+ operandS, ins_parse);
+ *operandE = '\0';
+ *operandS = '\0';
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* Parse a single operand.
+ operand - Current operand to parse.
+ cr16_ins - Current assembled instruction. */
+
+static void
+parse_operand (char *operand, ins * cr16_ins)
+{
+ int ret_val;
+ argument *cur_arg = cr16_ins->arg + cur_arg_num; /* Current argument. */
+
+ /* Initialize the type to NULL before parsing. */
+ cur_arg->type = nullargs;
+
+ /* Check whether this is a condition code . */
+ if ((IS_INSN_MNEMONIC ("b")) && ((ret_val = get_cc (operand)) != -1))
+ {
+ cur_arg->type = arg_cc;
+ cur_arg->cc = ret_val;
+ cur_arg->X_op = O_register;
+ return;
+ }
+
+ /* Check whether this is a general processor register. */
+ if ((ret_val = get_register (operand)) != nullregister)
+ {
+ cur_arg->type = arg_r;
+ cur_arg->r = ret_val;
+ cur_arg->X_op = 0;
+ return;
+ }
+
+ /* Check whether this is a general processor register pair. */
+ if ((operand[0] == '(')
+ && ((ret_val = get_register_pair (operand)) != nullregister))
+ {
+ cur_arg->type = arg_rp;
+ cur_arg->rp = ret_val;
+ cur_arg->X_op = O_register;
+ return;
+ }
+
+ /* Check whether the operand is a processor register.
+ For "lprd" and "sprd" instruction, only 32 bit
+ processor registers used. */
+ if (!(IS_INSN_MNEMONIC ("lprd") || (IS_INSN_MNEMONIC ("sprd")))
+ && ((ret_val = get_pregister (operand)) != nullpregister))
+ {
+ cur_arg->type = arg_pr;
+ cur_arg->pr = ret_val;
+ cur_arg->X_op = O_register;
+ return;
+ }
+
+ /* Check whether this is a processor register - 32 bit. */
+ if ((ret_val = get_pregisterp (operand)) != nullpregister)
+ {
+ cur_arg->type = arg_prp;
+ cur_arg->prp = ret_val;
+ cur_arg->X_op = O_register;
+ return;
+ }
+
+ /* Deal with special characters. */
+ switch (operand[0])
+ {
+ case '$':
+ if (strchr (operand, '(') != NULL)
+ cur_arg->type = arg_icr;
+ else
+ cur_arg->type = arg_ic;
+ goto set_params;
+ break;
+
+ case '(':
+ cur_arg->type = arg_rbase;
+ goto set_params;
+ break;
+
+ case '[':
+ cur_arg->type = arg_idxr;
+ goto set_params;
+ break;
+
+ default:
+ break;
+ }
+
+ if (strchr (operand, '(') != NULL)
+ {
+ if (strchr (operand, ',') != NULL
+ && (strchr (operand, ',') > strchr (operand, '(')))
+ cur_arg->type = arg_crp;
+ else
+ cur_arg->type = arg_cr;
+ }
+ else
+ cur_arg->type = arg_c;
+
+/* Parse an operand according to its type. */
+ set_params:
+ cur_arg->constant = 0;
+ set_operand (operand, cr16_ins);
+}
+
+/* Parse the various operands. Each operand is then analyzed to fillup
+ the fields in the cr16_ins data structure. */
+
+static void
+parse_operands (ins * cr16_ins, char *operands)
+{
+ char *operandS; /* Operands string. */
+ char *operandH, *operandT; /* Single operand head/tail pointers. */
+ int allocated = 0; /* Indicates a new operands string was allocated.*/
+ char *operand[MAX_OPERANDS];/* Separating the operands. */
+ int op_num = 0; /* Current operand number we are parsing. */
+ int bracket_flag = 0; /* Indicates a bracket '(' was found. */
+ int sq_bracket_flag = 0; /* Indicates a square bracket '[' was found. */
+
+ /* Preprocess the list of registers, if necessary. */
+ operandS = operandH = operandT = operands;
+
+ while (*operandT != '\0')
+ {
+ if (*operandT == ',' && bracket_flag != 1 && sq_bracket_flag != 1)
+ {
+ *operandT++ = '\0';
+ operand[op_num++] = strdup (operandH);
+ operandH = operandT;
+ continue;
+ }
+
+ if (*operandT == ' ')
+ as_bad (_("Illegal operands (whitespace): `%s'"), ins_parse);
+
+ if (*operandT == '(')
+ bracket_flag = 1;
+ else if (*operandT == '[')
+ sq_bracket_flag = 1;
+
+ if (*operandT == ')')
+ {
+ if (bracket_flag)
+ bracket_flag = 0;
+ else
+ as_fatal (_("Missing matching brackets : `%s'"), ins_parse);
+ }
+ else if (*operandT == ']')
+ {
+ if (sq_bracket_flag)
+ sq_bracket_flag = 0;
+ else
+ as_fatal (_("Missing matching brackets : `%s'"), ins_parse);
+ }
+
+ if (bracket_flag == 1 && *operandT == ')')
+ bracket_flag = 0;
+ else if (sq_bracket_flag == 1 && *operandT == ']')
+ sq_bracket_flag = 0;
+
+ operandT++;
+ }
+
+ /* Adding the last operand. */
+ operand[op_num++] = strdup (operandH);
+ cr16_ins->nargs = op_num;
+
+ /* Verifying correct syntax of operands (all brackets should be closed). */
+ if (bracket_flag || sq_bracket_flag)
+ as_fatal (_("Missing matching brackets : `%s'"), ins_parse);
+
+ /* Now we parse each operand separately. */
+ for (op_num = 0; op_num < cr16_ins->nargs; op_num++)
+ {
+ cur_arg_num = op_num;
+ parse_operand (operand[op_num], cr16_ins);
+ free (operand[op_num]);
+ }
+
+ if (allocated)
+ free (operandS);
+}
+
+/* Get the trap index in dispatch table, given its name.
+ This routine is used by assembling the 'excp' instruction. */
+
+static int
+gettrap (char *s)
+{
+ const trap_entry *trap;
+
+ for (trap = cr16_traps; trap < (cr16_traps + NUMTRAPS); trap++)
+ if (strcasecmp (trap->name, s) == 0)
+ return trap->entry;
+
+ /* To make compatable with CR16 4.1 tools, the below 3-lines of
+ * code added. Refer: Development Tracker item #123 */
+ for (trap = cr16_traps; trap < (cr16_traps + NUMTRAPS); trap++)
+ if (trap->entry == (unsigned int) atoi (s))
+ return trap->entry;
+
+ as_bad (_("Unknown exception: `%s'"), s);
+ return 0;
+}
+
+/* Top level module where instruction parsing starts.
+ cr16_ins - data structure holds some information.
+ operands - holds the operands part of the whole instruction. */
+
+static void
+parse_insn (ins *insn, char *operands)
+{
+ int i;
+
+ /* Handle instructions with no operands. */
+ for (i = 0; cr16_no_op_insn[i] != NULL; i++)
+ {
+ if (streq (cr16_no_op_insn[i], instruction->mnemonic))
+ {
+ insn->nargs = 0;
+ return;
+ }
+ }
+
+ /* Handle 'excp' instructions. */
+ if (IS_INSN_MNEMONIC ("excp"))
+ {
+ insn->nargs = 1;
+ insn->arg[0].type = arg_ic;
+ insn->arg[0].constant = gettrap (operands);
+ insn->arg[0].X_op = O_constant;
+ return;
+ }
+
+ if (operands != NULL)
+ parse_operands (insn, operands);
+}
+
+/* bCC instruction requires special handling. */
+static char *
+get_b_cc (char * op)
+{
+ unsigned int i;
+ char op1[5];
+
+ for (i = 1; i < strlen (op); i++)
+ op1[i-1] = op[i];
+
+ op1[i-1] = '\0';
+
+ for (i = 0; i < cr16_num_cc ; i++)
+ if (streq (op1, cr16_b_cond_tab[i]))
+ return (char *) cr16_b_cond_tab[i];
+
+ return NULL;
+}
+
+/* bCC instruction requires special handling. */
+static int
+is_bcc_insn (char * op)
+{
+ if (!(streq (op, "bal") || streq (op, "beq0b") || streq (op, "bnq0b")
+ || streq (op, "beq0w") || streq (op, "bnq0w")))
+ if ((op[0] == 'b') && (get_b_cc (op) != NULL))
+ return 1;
+ return 0;
+}
+
+/* Cinv instruction requires special handling. */
+
+static int
+check_cinv_options (char * operand)
+{
+ char *p = operand;
+ int i_used = 0, u_used = 0, d_used = 0;
+
+ while (*++p != ']')
+ {
+ if (*p == ',' || *p == ' ')
+ continue;
+
+ else if (*p == 'i')
+ i_used = 1;
+ else if (*p == 'u')
+ u_used = 1;
+ else if (*p == 'd')
+ d_used = 1;
+ else
+ as_bad (_("Illegal `cinv' parameter: `%c'"), *p);
+ }
+
+ return 0;
+}
+
+/* Retrieve the opcode image of a given register pair.
+ If the register is illegal for the current instruction,
+ issue an error. */
+
+static int
+getregp_image (reg r)
+{
+ const reg_entry *reg;
+ char *reg_name;
+
+ /* Check whether the register is in registers table. */
+ if (r < MAX_REG)
+ reg = cr16_regptab + r;
+ /* Register not found. */
+ else
+ {
+ as_bad (_("Unknown register pair: `%d'"), r);
+ return 0;
+ }
+
+ reg_name = reg->name;
+
+/* Issue a error message when register pair is illegal. */
+#define RPAIR_IMAGE_ERR \
+ as_bad (_("Illegal register pair (`%s') in Instruction: `%s'"), \
+ reg_name, ins_parse); \
+ break;
+
+ switch (reg->type)
+ {
+ case CR16_RP_REGTYPE:
+ return reg->image;
+ default:
+ RPAIR_IMAGE_ERR;
+ }
+
+ return 0;
+}
+
+/* Retrieve the opcode image of a given index register pair.
+ If the register is illegal for the current instruction,
+ issue an error. */
+
+static int
+getidxregp_image (reg r)
+{
+ const reg_entry *reg;
+ char *reg_name;
+
+ /* Check whether the register is in registers table. */
+ if (r < MAX_REG)
+ reg = cr16_regptab + r;
+ /* Register not found. */
+ else
+ {
+ as_bad (_("Unknown register pair: `%d'"), r);
+ return 0;
+ }
+
+ reg_name = reg->name;
+
+/* Issue a error message when register pair is illegal. */
+#define IDX_RPAIR_IMAGE_ERR \
+ as_bad (_("Illegal index register pair (`%s') in Instruction: `%s'"), \
+ reg_name, ins_parse); \
+
+ if (reg->type == CR16_RP_REGTYPE)
+ {
+ switch (reg->image)
+ {
+ case 0: return 0; break;
+ case 2: return 1; break;
+ case 4: return 2; break;
+ case 6: return 3; break;
+ case 8: return 4; break;
+ case 10: return 5; break;
+ case 3: return 6; break;
+ case 5: return 7; break;
+ default:
+ break;
+ }
+ }
+
+ IDX_RPAIR_IMAGE_ERR;
+ return 0;
+}
+
+/* Retrieve the opcode image of a given processort register.
+ If the register is illegal for the current instruction,
+ issue an error. */
+static int
+getprocreg_image (reg r)
+{
+ const reg_entry *reg;
+ char *reg_name;
+
+ /* Check whether the register is in registers table. */
+ if (r < MAX_PREG)
+ reg = &cr16_pregtab[r - MAX_REG];
+ /* Register not found. */
+ else
+ {
+ as_bad (_("Unknown processor register : `%d'"), r);
+ return 0;
+ }
+
+ reg_name = reg->name;
+
+/* Issue a error message when register pair is illegal. */
+#define PROCREG_IMAGE_ERR \
+ as_bad (_("Illegal processor register (`%s') in Instruction: `%s'"), \
+ reg_name, ins_parse); \
+ break;
+
+ switch (reg->type)
+ {
+ case CR16_P_REGTYPE:
+ return reg->image;
+ default:
+ PROCREG_IMAGE_ERR;
+ }
+
+ return 0;
+}
+
+/* Retrieve the opcode image of a given processort register.
+ If the register is illegal for the current instruction,
+ issue an error. */
+static int
+getprocregp_image (reg r)
+{
+ const reg_entry *reg;
+ char *reg_name;
+ int pregptab_disp = 0;
+
+ /* Check whether the register is in registers table. */
+ if (r < MAX_PREG)
+ {
+ r = r - MAX_REG;
+ switch (r)
+ {
+ case 4: pregptab_disp = 1; break;
+ case 6: pregptab_disp = 2; break;
+ case 8:
+ case 9:
+ case 10:
+ pregptab_disp = 3; break;
+ case 12:
+ pregptab_disp = 4; break;
+ case 14:
+ pregptab_disp = 5; break;
+ default: break;
+ }
+ reg = &cr16_pregptab[r - pregptab_disp];
+ }
+ /* Register not found. */
+ else
+ {
+ as_bad (_("Unknown processor register (32 bit) : `%d'"), r);
+ return 0;
+ }
+
+ reg_name = reg->name;
+
+/* Issue a error message when register pair is illegal. */
+#define PROCREGP_IMAGE_ERR \
+ as_bad (_("Illegal 32 bit - processor register (`%s') in Instruction: `%s'"),\
+ reg_name, ins_parse); \
+ break;
+
+ switch (reg->type)
+ {
+ case CR16_P_REGTYPE:
+ return reg->image;
+ default:
+ PROCREGP_IMAGE_ERR;
+ }
+
+ return 0;
+}
+
+/* Routine used to represent integer X using NBITS bits. */
+
+static long
+getconstant (long x, int nbits)
+{
+ /* The following expression avoids overflow if
+ 'nbits' is the number of bits in 'bfd_vma'. */
+ return (x & ((((1 << (nbits - 1)) - 1) << 1) | 1));
+}
+
+/* Print a constant value to 'output_opcode':
+ ARG holds the operand's type and value.
+ SHIFT represents the location of the operand to be print into.
+ NBITS determines the size (in bits) of the constant. */
+
+static void
+print_constant (int nbits, int shift, argument *arg)
+{
+ unsigned long mask = 0;
+
+ long constant = getconstant (arg->constant, nbits);
+
+ switch (nbits)
+ {
+ case 32:
+ case 28:
+ /* mask the upper part of the constant, that is, the bits
+ going to the lowest byte of output_opcode[0].
+ The upper part of output_opcode[1] is always filled,
+ therefore it is always masked with 0xFFFF. */
+ mask = (1 << (nbits - 16)) - 1;
+ /* Divide the constant between two consecutive words :
+ 0 1 2 3
+ +---------+---------+---------+---------+
+ | | X X X X | x X x X | |
+ +---------+---------+---------+---------+
+ output_opcode[0] output_opcode[1] */
+
+ CR16_PRINT (0, (constant >> WORD_SHIFT) & mask, 0);
+ CR16_PRINT (1, (constant & 0xFFFF), WORD_SHIFT);
+ break;
+
+ case 21:
+ if ((nbits == 21) && (IS_INSN_TYPE (LD_STOR_INS))) nbits = 20;
+ case 24:
+ case 22:
+ case 20:
+ /* mask the upper part of the constant, that is, the bits
+ going to the lowest byte of output_opcode[0].
+ The upper part of output_opcode[1] is always filled,
+ therefore it is always masked with 0xFFFF. */
+ mask = (1 << (nbits - 16)) - 1;
+ /* Divide the constant between two consecutive words :
+ 0 1 2 3
+ +---------+---------+---------+---------+
+ | | X X X X | - X - X | |
+ +---------+---------+---------+---------+
+ output_opcode[0] output_opcode[1] */
+
+ if ((instruction->size > 2) && (shift == WORD_SHIFT))
+ {
+ if (arg->type == arg_idxrp)
+ {
+ CR16_PRINT (0, ((constant >> WORD_SHIFT) & mask) << 8, 0);
+ CR16_PRINT (1, (constant & 0xFFFF), WORD_SHIFT);
+ }
+ else
+ {
+ CR16_PRINT (0, (((((constant >> WORD_SHIFT) & mask) << 8) & 0x0f00) | ((((constant >> WORD_SHIFT) & mask) >> 4) & 0xf)),0);
+ CR16_PRINT (1, (constant & 0xFFFF), WORD_SHIFT);
+ }
+ }
+ else
+ CR16_PRINT (0, constant, shift);
+ break;
+
+ case 14:
+ if (arg->type == arg_idxrp)
+ {
+ if (instruction->size == 2)
+ {
+ CR16_PRINT (0, ((constant)&0xf), shift); // 0-3 bits
+ CR16_PRINT (0, ((constant>>4)&0x3), (shift+20)); // 4-5 bits
+ CR16_PRINT (0, ((constant>>6)&0x3), (shift+14)); // 6-7 bits
+ CR16_PRINT (0, ((constant>>8)&0x3f), (shift+8)); // 8-13 bits
+ }
+ else
+ CR16_PRINT (0, constant, shift);
+ }
+ break;
+
+ case 16:
+ case 12:
+ /* When instruction size is 3 and 'shift' is 16, a 16-bit constant is
+ always filling the upper part of output_opcode[1]. If we mistakenly
+ write it to output_opcode[0], the constant prefix (that is, 'match')
+ will be overriden.
+ 0 1 2 3
+ +---------+---------+---------+---------+
+ | 'match' | | X X X X | |
+ +---------+---------+---------+---------+
+ output_opcode[0] output_opcode[1] */
+
+ if ((instruction->size > 2) && (shift == WORD_SHIFT))
+ CR16_PRINT (1, constant, WORD_SHIFT);
+ else
+ CR16_PRINT (0, constant, shift);
+ break;
+
+ case 8:
+ CR16_PRINT (0, ((constant/2)&0xf), shift);
+ CR16_PRINT (0, ((constant/2)>>4), (shift+8));
+ break;
+
+ default:
+ CR16_PRINT (0, constant, shift);
+ break;
+ }
+}
+
+/* Print an operand to 'output_opcode', which later on will be
+ printed to the object file:
+ ARG holds the operand's type, size and value.
+ SHIFT represents the printing location of operand.
+ NBITS determines the size (in bits) of a constant operand. */
+
+static void
+print_operand (int nbits, int shift, argument *arg)
+{
+ switch (arg->type)
+ {
+ case arg_cc:
+ CR16_PRINT (0, arg->cc, shift);
+ break;
+
+ case arg_r:
+ CR16_PRINT (0, getreg_image (arg->r), shift);
+ break;
+
+ case arg_rp:
+ CR16_PRINT (0, getregp_image (arg->rp), shift);
+ break;
+
+ case arg_pr:
+ CR16_PRINT (0, getprocreg_image (arg->pr), shift);
+ break;
+
+ case arg_prp:
+ CR16_PRINT (0, getprocregp_image (arg->prp), shift);
+ break;
+
+ case arg_idxrp:
+ /* 16 12 8 6 0
+ +-----------------------------+
+ | r_index | disp | rp_base |
+ +-----------------------------+ */
+
+ if (instruction->size == 3)
+ {
+ CR16_PRINT (0, getidxregp_image (arg->rp), 0);
+ if (getreg_image (arg->i_r) == 12)
+ CR16_PRINT (0, 0, 3);
+ else
+ CR16_PRINT (0, 1, 3);
+ }
+ else
+ {
+ CR16_PRINT (0, getidxregp_image (arg->rp), 16);
+ if (getreg_image (arg->i_r) == 12)
+ CR16_PRINT (0, 0, 19);
+ else
+ CR16_PRINT (0, 1, 19);
+ }
+ print_constant (nbits, shift, arg);
+ break;
+
+ case arg_idxr:
+ if (getreg_image (arg->i_r) == 12)
+ if (IS_INSN_MNEMONIC ("cbitb") || IS_INSN_MNEMONIC ("sbitb")
+ || IS_INSN_MNEMONIC ("tbitb"))
+ CR16_PRINT (0, 0, 23);
+ else CR16_PRINT (0, 0, 24);
+ else
+ if (IS_INSN_MNEMONIC ("cbitb") || IS_INSN_MNEMONIC ("sbitb")
+ || IS_INSN_MNEMONIC ("tbitb"))
+ CR16_PRINT (0, 1, 23);
+ else CR16_PRINT (0, 1, 24);
+
+ print_constant (nbits, shift, arg);
+ break;
+
+ case arg_ic:
+ case arg_c:
+ print_constant (nbits, shift, arg);
+ break;
+
+ case arg_rbase:
+ CR16_PRINT (0, getreg_image (arg->r), shift);
+ break;
+
+ case arg_cr:
+ print_constant (nbits, shift , arg);
+ /* Add the register argument to the output_opcode. */
+ CR16_PRINT (0, getreg_image (arg->r), (shift+16));
+ break;
+
+ case arg_crp:
+ print_constant (nbits, shift , arg);
+ if (instruction->size > 1)
+ CR16_PRINT (0, getregp_image (arg->rp), (shift + 16));
+ else if (IS_INSN_TYPE (LD_STOR_INS) || (IS_INSN_TYPE (CSTBIT_INS)))
+ {
+ if (instruction->size == 2)
+ CR16_PRINT (0, getregp_image (arg->rp), (shift - 8));
+ else if (instruction->size == 1)
+ CR16_PRINT (0, getregp_image (arg->rp), 16);
+ }
+ else
+ CR16_PRINT (0, getregp_image (arg->rp), shift);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* Retrieve the number of operands for the current assembled instruction. */
+
+static int
+get_number_of_operands (void)
+{
+ int i;
+
+ for (i = 0; instruction->operands[i].op_type && i < MAX_OPERANDS; i++)
+ ;
+ return i;
+}
+
+/* Verify that the number NUM can be represented in BITS bits (that is,
+ within its permitted range), based on the instruction's FLAGS.
+ If UPDATE is nonzero, update the value of NUM if necessary.
+ Return OP_LEGAL upon success, actual error type upon failure. */
+
+static op_err
+check_range (long *num, int bits, int unsigned flags, int update)
+{
+ long min, max;
+ int retval = OP_LEGAL;
+ long value = *num;
+
+ if (bits == 0 && value > 0) return OP_OUT_OF_RANGE;
+
+ /* For hosts witah longs bigger than 32-bits make sure that the top
+ bits of a 32-bit negative value read in by the parser are set,
+ so that the correct comparisons are made. */
+ if (value & 0x80000000)
+ value |= (-1L << 31);
+
+
+ /* Verify operand value is even. */
+ if (flags & OP_EVEN)
+ {
+ if (value % 2)
+ return OP_NOT_EVEN;
+ }
+
+ if (flags & OP_DEC)
+ {
+ value -= 1;
+ if (update)
+ *num = value;
+ }
+
+ if (flags & OP_SHIFT)
+ {
+ value >>= 1;
+ if (update)
+ *num = value;
+ }
+ else if (flags & OP_SHIFT_DEC)
+ {
+ value = (value >> 1) - 1;
+ if (update)
+ *num = value;
+ }
+
+ if (flags & OP_ABS20)
+ {
+ if (value > 0xEFFFF)
+ return OP_OUT_OF_RANGE;
+ }
+
+ if (flags & OP_ESC)
+ {
+ if (value == 0xB || value == 0x9)
+ return OP_OUT_OF_RANGE;
+ else if (value == -1)
+ {
+ if (update)
+ *num = 9;
+ return retval;
+ }
+ }
+
+ if (flags & OP_ESC1)
+ {
+ if (value > 13)
+ return OP_OUT_OF_RANGE;
+ }
+
+ if (flags & OP_SIGNED)
+ {
+ max = (1 << (bits - 1)) - 1;
+ min = - (1 << (bits - 1));
+ if ((value > max) || (value < min))
+ retval = OP_OUT_OF_RANGE;
+ }
+ else if (flags & OP_UNSIGNED)
+ {
+ max = ((((1 << (bits - 1)) - 1) << 1) | 1);
+ min = 0;
+ if (((unsigned long) value > (unsigned long) max)
+ || ((unsigned long) value < (unsigned long) min))
+ retval = OP_OUT_OF_RANGE;
+ }
+ else if (flags & OP_NEG)
+ {
+ max = - 1;
+ min = - ((1 << (bits - 1))-1);
+ if ((value > max) || (value < min))
+ retval = OP_OUT_OF_RANGE;
+ }
+ return retval;
+}
+
+/* Bunch of error checkings.
+ The checks are made after a matching instruction was found. */
+
+static void
+warn_if_needed (ins *insn)
+{
+ /* If the post-increment address mode is used and the load/store
+ source register is the same as rbase, the result of the
+ instruction is undefined. */
+ if (IS_INSN_TYPE (LD_STOR_INS_INC))
+ {
+ /* Enough to verify that one of the arguments is a simple reg. */
+ if ((insn->arg[0].type == arg_r) || (insn->arg[1].type == arg_r))
+ if (insn->arg[0].r == insn->arg[1].r)
+ as_bad (_("Same src/dest register is used (`r%d'), result is undefined"), insn->arg[0].r);
+ }
+
+ if (IS_INSN_MNEMONIC ("pop")
+ || IS_INSN_MNEMONIC ("push")
+ || IS_INSN_MNEMONIC ("popret"))
+ {
+ unsigned int count = insn->arg[0].constant, reg_val;
+
+ /* Check if count operand caused to save/retrive the RA twice
+ to generate warning message. */
+ if (insn->nargs > 2)
+ {
+ reg_val = getreg_image (insn->arg[1].r);
+
+ if ( ((reg_val == 9) && (count > 7))
+ || ((reg_val == 10) && (count > 6))
+ || ((reg_val == 11) && (count > 5))
+ || ((reg_val == 12) && (count > 4))
+ || ((reg_val == 13) && (count > 2))
+ || ((reg_val == 14) && (count > 0)))
+ as_warn (_("RA register is saved twice."));
+
+ /* Check if the third operand is "RA" or "ra" */
+ if (!(((insn->arg[2].r) == ra) || ((insn->arg[2].r) == RA)))
+ as_bad (_("`%s' Illegal use of registers."), ins_parse);
+ }
+
+ if (insn->nargs > 1)
+ {
+ reg_val = getreg_image (insn->arg[1].r);
+
+ /* If register is a register pair ie r12/r13/r14 in operand1, then
+ the count constant should be validated. */
+ if (((reg_val == 11) && (count > 7))
+ || ((reg_val == 12) && (count > 6))
+ || ((reg_val == 13) && (count > 4))
+ || ((reg_val == 14) && (count > 2))
+ || ((reg_val == 15) && (count > 0)))
+ as_bad (_("`%s' Illegal count-register combination."), ins_parse);
+ }
+ else
+ {
+ /* Check if the operand is "RA" or "ra" */
+ if (!(((insn->arg[0].r) == ra) || ((insn->arg[0].r) == RA)))
+ as_bad (_("`%s' Illegal use of register."), ins_parse);
+ }
+ }
+
+ /* Some instruction assume the stack pointer as rptr operand.
+ Issue an error when the register to be loaded is also SP. */
+ if (instruction->flags & NO_SP)
+ {
+ if (getreg_image (insn->arg[1].r) == getreg_image (sp))
+ as_bad (_("`%s' has undefined result"), ins_parse);
+ }
+
+ /* If the rptr register is specified as one of the registers to be loaded,
+ the final contents of rptr are undefined. Thus, we issue an error. */
+ if (instruction->flags & NO_RPTR)
+ {
+ if ((1 << getreg_image (insn->arg[0].r)) & insn->arg[1].constant)
+ as_bad (_("Same src/dest register is used (`r%d'),result is undefined"),
+ getreg_image (insn->arg[0].r));
+ }
+}
+
+/* In some cases, we need to adjust the instruction pointer although a
+ match was already found. Here, we gather all these cases.
+ Returns 1 if instruction pointer was adjusted, otherwise 0. */
+
+static int
+adjust_if_needed (ins *insn ATTRIBUTE_UNUSED)
+{
+ int ret_value = 0;
+
+ if ((IS_INSN_TYPE (CSTBIT_INS)) || (IS_INSN_TYPE (LD_STOR_INS)))
+ {
+ if ((instruction->operands[0].op_type == abs24)
+ && ((insn->arg[0].constant) > 0xF00000))
+ {
+ insn->arg[0].constant &= 0xFFFFF;
+ instruction--;
+ ret_value = 1;
+ }
+ }
+
+ return ret_value;
+}
+
+/* Assemble a single instruction:
+ INSN is already parsed (that is, all operand values and types are set).
+ For instruction to be assembled, we need to find an appropriate template in
+ the instruction table, meeting the following conditions:
+ 1: Has the same number of operands.
+ 2: Has the same operand types.
+ 3: Each operand size is sufficient to represent the instruction's values.
+ Returns 1 upon success, 0 upon failure. */
+
+static int
+assemble_insn (char *mnemonic, ins *insn)
+{
+ /* Type of each operand in the current template. */
+ argtype cur_type[MAX_OPERANDS];
+ /* Size (in bits) of each operand in the current template. */
+ unsigned int cur_size[MAX_OPERANDS];
+ /* Flags of each operand in the current template. */
+ unsigned int cur_flags[MAX_OPERANDS];
+ /* Instruction type to match. */
+ unsigned int ins_type;
+ /* Boolean flag to mark whether a match was found. */
+ int match = 0;
+ int i;
+ /* Nonzero if an instruction with same number of operands was found. */
+ int found_same_number_of_operands = 0;
+ /* Nonzero if an instruction with same argument types was found. */
+ int found_same_argument_types = 0;
+ /* Nonzero if a constant was found within the required range. */
+ int found_const_within_range = 0;
+ /* Argument number of an operand with invalid type. */
+ int invalid_optype = -1;
+ /* Argument number of an operand with invalid constant value. */
+ int invalid_const = -1;
+ /* Operand error (used for issuing various constant error messages). */
+ op_err op_error, const_err = OP_LEGAL;
+
+/* Retrieve data (based on FUNC) for each operand of a given instruction. */
+#define GET_CURRENT_DATA(FUNC, ARRAY) \
+ for (i = 0; i < insn->nargs; i++) \
+ ARRAY[i] = FUNC (instruction->operands[i].op_type)
+
+#define GET_CURRENT_TYPE GET_CURRENT_DATA (get_optype, cur_type)
+#define GET_CURRENT_SIZE GET_CURRENT_DATA (get_opbits, cur_size)
+#define GET_CURRENT_FLAGS GET_CURRENT_DATA (get_opflags, cur_flags)
+
+ /* Instruction has no operands -> only copy the constant opcode. */
+ if (insn->nargs == 0)
+ {
+ output_opcode[0] = BIN (instruction->match, instruction->match_bits);
+ return 1;
+ }
+
+ /* In some case, same mnemonic can appear with different instruction types.
+ For example, 'storb' is supported with 3 different types :
+ LD_STOR_INS, LD_STOR_INS_INC, STOR_IMM_INS.
+ We assume that when reaching this point, the instruction type was
+ pre-determined. We need to make sure that the type stays the same
+ during a search for matching instruction. */
+ ins_type = CR16_INS_TYPE (instruction->flags);
+
+ while (/* Check that match is still not found. */
+ match != 1
+ /* Check we didn't get to end of table. */
+ && instruction->mnemonic != NULL
+ /* Check that the actual mnemonic is still available. */
+ && IS_INSN_MNEMONIC (mnemonic)
+ /* Check that the instruction type wasn't changed. */
+ && IS_INSN_TYPE (ins_type))
+ {
+ /* Check whether number of arguments is legal. */
+ if (get_number_of_operands () != insn->nargs)
+ goto next_insn;
+ found_same_number_of_operands = 1;
+
+ /* Initialize arrays with data of each operand in current template. */
+ GET_CURRENT_TYPE;
+ GET_CURRENT_SIZE;
+ GET_CURRENT_FLAGS;
+
+ /* Check for type compatibility. */
+ for (i = 0; i < insn->nargs; i++)
+ {
+ if (cur_type[i] != insn->arg[i].type)
+ {
+ if (invalid_optype == -1)
+ invalid_optype = i + 1;
+ goto next_insn;
+ }
+ }
+ found_same_argument_types = 1;
+
+ for (i = 0; i < insn->nargs; i++)
+ {
+ /* If 'bal' instruction size is '2' and reg operand is not 'ra'
+ then goto next instruction. */
+ if (IS_INSN_MNEMONIC ("bal") && (i == 0)
+ && (instruction->size == 2) && (insn->arg[i].rp != 14))
+ goto next_insn;
+
+ /* If 'storb' instruction with 'sp' reg and 16-bit disp of
+ * reg-pair, leads to undifined trap, so this should use
+ * 20-bit disp of reg-pair. */
+ if (IS_INSN_MNEMONIC ("storb") && (instruction->size == 2)
+ && (insn->arg[i].r == 15) && (insn->arg[i + 1].type == arg_crp))
+ goto next_insn;
+
+ /* Only check range - don't update the constant's value, since the
+ current instruction may not be the last we try to match.
+ The constant's value will be updated later, right before printing
+ it to the object file. */
+ if ((insn->arg[i].X_op == O_constant)
+ && (op_error = check_range (&insn->arg[i].constant, cur_size[i],
+ cur_flags[i], 0)))
+ {
+ if (invalid_const == -1)
+ {
+ invalid_const = i + 1;
+ const_err = op_error;
+ }
+ goto next_insn;
+ }
+ /* For symbols, we make sure the relocation size (which was already
+ determined) is sufficient. */
+ else if ((insn->arg[i].X_op == O_symbol)
+ && ((bfd_reloc_type_lookup (stdoutput, insn->rtype))->bitsize
+ > cur_size[i]))
+ goto next_insn;
+ }
+ found_const_within_range = 1;
+
+ /* If we got till here -> Full match is found. */
+ match = 1;
+ break;
+
+/* Try again with next instruction. */
+next_insn:
+ instruction++;
+ }
+
+ if (!match)
+ {
+ /* We haven't found a match - instruction can't be assembled. */
+ if (!found_same_number_of_operands)
+ as_bad (_("Incorrect number of operands"));
+ else if (!found_same_argument_types)
+ as_bad (_("Illegal type of operand (arg %d)"), invalid_optype);
+ else if (!found_const_within_range)
+ {
+ switch (const_err)
+ {
+ case OP_OUT_OF_RANGE:
+ as_bad (_("Operand out of range (arg %d)"), invalid_const);
+ break;
+ case OP_NOT_EVEN:
+ as_bad (_("Operand has odd displacement (arg %d)"), invalid_const);
+ break;
+ default:
+ as_bad (_("Illegal operand (arg %d)"), invalid_const);
+ break;
+ }
+ }
+
+ return 0;
+ }
+ else
+ /* Full match - print the encoding to output file. */
+ {
+ /* Make further checkings (such that couldn't be made earlier).
+ Warn the user if necessary. */
+ warn_if_needed (insn);
+
+ /* Check whether we need to adjust the instruction pointer. */
+ if (adjust_if_needed (insn))
+ /* If instruction pointer was adjusted, we need to update
+ the size of the current template operands. */
+ GET_CURRENT_SIZE;
+
+ for (i = 0; i < insn->nargs; i++)
+ {
+ int j = instruction->flags & REVERSE_MATCH ?
+ i == 0 ? 1 :
+ i == 1 ? 0 : i :
+ i;
+
+ /* This time, update constant value before printing it. */
+ if ((insn->arg[j].X_op == O_constant)
+ && (check_range (&insn->arg[j].constant, cur_size[j],
+ cur_flags[j], 1) != OP_LEGAL))
+ as_fatal (_("Illegal operand (arg %d)"), j+1);
+ }
+
+ /* First, copy the instruction's opcode. */
+ output_opcode[0] = BIN (instruction->match, instruction->match_bits);
+
+ for (i = 0; i < insn->nargs; i++)
+ {
+ /* For BAL (ra),disp17 instuction only. And also set the
+ DISP24a relocation type. */
+ if (IS_INSN_MNEMONIC ("bal") && (instruction->size == 2) && i == 0)
+ {
+ insn->rtype = BFD_RELOC_CR16_DISP24a;
+ continue;
+ }
+ cur_arg_num = i;
+ print_operand (cur_size[i], instruction->operands[i].shift,
+ &insn->arg[i]);
+ }
+ }
+
+ return 1;
+}
+
+/* Print the instruction.
+ Handle also cases where the instruction is relaxable/relocatable. */
+
+static void
+print_insn (ins *insn)
+{
+ unsigned int i, j, insn_size;
+ char *this_frag;
+ unsigned short words[4];
+ int addr_mod;
+
+ /* Arrange the insn encodings in a WORD size array. */
+ for (i = 0, j = 0; i < 2; i++)
+ {
+ words[j++] = (output_opcode[i] >> 16) & 0xFFFF;
+ words[j++] = output_opcode[i] & 0xFFFF;
+ }
+
+ insn_size = instruction->size;
+ this_frag = frag_more (insn_size * 2);
+
+ /* Handle relocation. */
+ if ((relocatable) && (insn->rtype != BFD_RELOC_NONE))
+ {
+ reloc_howto_type *reloc_howto;
+ int size;
+
+ reloc_howto = bfd_reloc_type_lookup (stdoutput, insn->rtype);
+
+ if (!reloc_howto)
+ abort ();
+
+ size = bfd_get_reloc_size (reloc_howto);
+
+ if (size < 1 || size > 4)
+ abort ();
+
+ fix_new_exp (frag_now, this_frag - frag_now->fr_literal,
+ size, &insn->exp, reloc_howto->pc_relative,
+ insn->rtype);
+ }
+
+ /* Verify a 2-byte code alignment. */
+ addr_mod = frag_now_fix () & 1;
+ if (frag_now->has_code && frag_now->insn_addr != addr_mod)
+ as_bad (_("instruction address is not a multiple of 2"));
+ frag_now->insn_addr = addr_mod;
+ frag_now->has_code = 1;
+
+ /* Write the instruction encoding to frag. */
+ for (i = 0; i < insn_size; i++)
+ {
+ md_number_to_chars (this_frag, (valueT) words[i], 2);
+ this_frag += 2;
+ }
+}
+
+/* This is the guts of the machine-dependent assembler. OP points to a
+ machine dependent instruction. This function is supposed to emit
+ the frags/bytes it assembles to. */
+
+void
+md_assemble (char *op)
+{
+ ins cr16_ins;
+ char *param, param1[32];
+ char c;
+
+ /* Reset global variables for a new instruction. */
+ reset_vars (op);
+
+ /* Strip the mnemonic. */
+ for (param = op; *param != 0 && !ISSPACE (*param); param++)
+ ;
+ c = *param;
+ *param++ = '\0';
+
+ /* bCC instuctions and adjust the mnemonic by adding extra white spaces. */
+ if (is_bcc_insn (op))
+ {
+ strcpy (param1, get_b_cc (op));
+ op = "b";
+ strcat (param1,",");
+ strcat (param1, param);
+ param = (char *) &param1;
+ }
+
+ /* Checking the cinv options and adjust the mnemonic by removing the
+ extra white spaces. */
+ if (streq ("cinv", op))
+ {
+ /* Validate the cinv options. */
+ check_cinv_options (param);
+ strcat (op, param);
+ }
+
+ /* MAPPING - SHIFT INSN, if imm4/imm16 positive values
+ lsh[b/w] imm4/imm6, reg ==> ashu[b/w] imm4/imm16, reg
+ as CR16 core doesn't support lsh[b/w] right shift operaions. */
+ if ((streq ("lshb", op) || streq ("lshw", op) || streq ("lshd", op))
+ && (param [0] == '$'))
+ {
+ strcpy (param1, param);
+ /* Find the instruction. */
+ instruction = (const inst *) hash_find (cr16_inst_hash, op);
+ parse_operands (&cr16_ins, param1);
+ if (((&cr16_ins)->arg[0].type == arg_ic)
+ && ((&cr16_ins)->arg[0].constant >= 0))
+ {
+ if (streq ("lshb", op))
+ op = "ashub";
+ else if (streq ("lshd", op))
+ op = "ashud";
+ else
+ op = "ashuw";
+ }
+ }
+
+ /* Find the instruction. */
+ instruction = (const inst *) hash_find (cr16_inst_hash, op);
+ if (instruction == NULL)
+ {
+ as_bad (_("Unknown opcode: `%s'"), op);
+ return;
+ }
+
+ /* Tie dwarf2 debug info to the address at the start of the insn. */
+ dwarf2_emit_insn (0);
+
+ /* Parse the instruction's operands. */
+ parse_insn (&cr16_ins, param);
+
+ /* Assemble the instruction - return upon failure. */
+ if (assemble_insn (op, &cr16_ins) == 0)
+ return;
+
+ /* Print the instruction. */
+ print_insn (&cr16_ins);
+}
diff --git a/gas/config/tc-cr16.h b/gas/config/tc-cr16.h
new file mode 100644
index 000000000000..6d06151eb166
--- /dev/null
+++ b/gas/config/tc-cr16.h
@@ -0,0 +1,73 @@
+/* tc-cr16.h -- Header file for tc-cr16.c, the CR16 GAS port.
+ Copyright 2007 Free Software Foundation, Inc.
+
+ Contributed by M R Swami Reddy <MR.Swami.Reddy@nsc.com>
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to the
+ Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef TC_CR16_H
+#define TC_CR16_H
+
+#define TC_CR16 1
+
+#define TARGET_BYTES_BIG_ENDIAN 0
+
+#define TARGET_FORMAT "elf32-cr16"
+#define TARGET_ARCH bfd_arch_cr16
+
+#define WORKING_DOT_WORD
+#define LOCAL_LABEL_PREFIX '.'
+
+#define md_undefined_symbol(s) 0
+#define md_number_to_chars number_to_chars_littleendian
+
+/* We do relaxing in the assembler as well as the linker. */
+extern const struct relax_type md_relax_table[];
+#define TC_GENERIC_RELAX_TABLE md_relax_table
+
+/* We do not want to adjust any relocations to make implementation of
+ linker relaxations easier. */
+#define tc_fix_adjustable(fixP) 0
+
+/* We need to force out some relocations when relaxing. */
+#define TC_FORCE_RELOCATION(FIXP) cr16_force_relocation (FIXP)
+extern int cr16_force_relocation (struct fix *);
+
+/* Fixup debug sections since we will never relax them. */
+#define TC_LINKRELAX_FIXUP(seg) (seg->flags & SEC_ALLOC)
+
+/* CR16 instructions, with operands included, are a multiple
+ of two bytes long. */
+#define DWARF2_LINE_MIN_INSN_LENGTH 2
+
+extern void cr16_cons_fix_new (struct frag *, int, int, struct expressionS *);
+/* This is called by emit_expr when creating a reloc for a cons.
+ We could use the definition there, except that we want to handle
+ the CR16 reloc type specially, rather than the BFD_RELOC type. */
+#define TC_CONS_FIX_NEW(FRAG, OFF, LEN, EXP) \
+ cr16_cons_fix_new (FRAG, OFF, LEN, EXP)
+
+/* Give an error if a frag containing code is not aligned to a 2-byte
+ boundary. */
+#define md_frag_check(FRAGP) \
+ if ((FRAGP)->has_code \
+ && (((FRAGP)->fr_address + (FRAGP)->insn_addr) & 1) != 0) \
+ as_bad_where ((FRAGP)->fr_file, (FRAGP)->fr_line, \
+ _("instruction address is not a multiple of 2"));
+
+#endif /* TC_CR16_H */
diff --git a/gas/config/tc-cris.c b/gas/config/tc-cris.c
index 1c8e6dc64529..83e01c589545 100644
--- a/gas/config/tc-cris.c
+++ b/gas/config/tc-cris.c
@@ -1,5 +1,6 @@
/* tc-cris.c -- Assembler code for the CRIS CPU core.
- Copyright 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright 2000, 2001, 2002, 2003, 2004, 2006
+ Free Software Foundation, Inc.
Contributed by Axis Communications AB, Lund, Sweden.
Originally written for GAS 1.38.1 by Mikael Asker.
@@ -22,7 +23,6 @@
Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
@@ -991,7 +991,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT sec ATTRIBUTE_UNUSED,
break;
case ENCODE_RELAX (STATE_MUL, STATE_BYTE):
- /* This is the only time we check position and aligmnent of the
+ /* This is the only time we check position and alignment of the
placement-tracking frag. */
if (sec->alignment_power < 2)
as_bad_where (fragP->fr_file, fragP->fr_line,
diff --git a/gas/config/tc-cris.h b/gas/config/tc-cris.h
index 34e6ef8153c5..59bbc0716379 100644
--- a/gas/config/tc-cris.h
+++ b/gas/config/tc-cris.h
@@ -1,5 +1,5 @@
/* tc-cris.h -- Header file for tc-cris.c, the CRIS GAS port.
- Copyright 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Contributed by Axis Communications AB, Lund, Sweden.
@@ -99,10 +99,9 @@ extern int md_cris_force_relocation (struct fix *);
|| (RTYPE) == BFD_RELOC_CRIS_32_PLT_PCREL)
/* Make sure we don't resolve fixups for which we want to emit dynamic
- relocations. FIXME: Set fx_plt instead of using IS_CRIS_PIC_RELOC. */
+ relocations. */
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
(!(FIX)->fx_pcrel \
- || (FIX)->fx_plt \
|| IS_CRIS_PIC_RELOC ((FIX)->fx_r_type) \
|| TC_FORCE_RELOCATION (FIX))
diff --git a/gas/config/tc-crx.c b/gas/config/tc-crx.c
index 34448cd8dca7..961776f9e3a4 100644
--- a/gas/config/tc-crx.c
+++ b/gas/config/tc-crx.c
@@ -1271,7 +1271,7 @@ print_constant (int nbits, int shift, argument *arg)
/* When instruction size is 3 and 'shift' is 16, a 16-bit constant is
always filling the upper part of output_opcode[1]. If we mistakenly
write it to output_opcode[0], the constant prefix (that is, 'match')
- will be overriden.
+ will be overridden.
0 1 2 3
+---------+---------+---------+---------+
| 'match' | | X X X X | |
diff --git a/gas/config/tc-d10v.c b/gas/config/tc-d10v.c
index 6c94edbb4ef3..245162a50d9d 100644
--- a/gas/config/tc-d10v.c
+++ b/gas/config/tc-d10v.c
@@ -1,5 +1,5 @@
/* tc-d10v.c -- Assembler code for the Mitsubishi D10V
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -19,7 +19,6 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
@@ -1441,7 +1440,6 @@ do_assemble (char *str, struct d10v_opcode **opcode)
char name[20];
int nlen = 0;
expressionS myops[6];
- unsigned long insn;
/* Drop leading whitespace. */
while (*str == ' ')
@@ -1463,7 +1461,7 @@ do_assemble (char *str, struct d10v_opcode **opcode)
/* Find the first opcode with the proper name. */
*opcode = (struct d10v_opcode *) hash_find (d10v_hash, name);
if (*opcode == NULL)
- as_fatal (_("unknown opcode: %s"), name);
+ return -1;
save = input_line_pointer;
input_line_pointer = (char *) op_end;
@@ -1472,8 +1470,7 @@ do_assemble (char *str, struct d10v_opcode **opcode)
return -1;
input_line_pointer = save;
- insn = build_insn ((*opcode), myops, 0);
- return insn;
+ return build_insn ((*opcode), myops, 0);
}
/* If while processing a fixup, a reloc really needs to be created.
@@ -1779,7 +1776,7 @@ md_assemble (char *str)
prev_seg = now_seg;
prev_subseg = now_subseg;
if (prev_insn == (unsigned long) -1)
- as_fatal (_("can't find opcode "));
+ as_fatal (_("can't find previous opcode "));
fixups = fixups->next;
str = str2 + 2;
}
@@ -1789,11 +1786,10 @@ md_assemble (char *str)
if (insn == (unsigned long) -1)
{
if (extype != PACK_UNSPEC)
- {
- etype = extype;
- return;
- }
- as_fatal (_("can't find opcode "));
+ etype = extype;
+ else
+ as_bad (_("could not assemble: %s"), str);
+ return;
}
if (etype != PACK_UNSPEC)
diff --git a/gas/config/tc-d30v.c b/gas/config/tc-d30v.c
index 848ad0341f09..fb7776a39532 100644
--- a/gas/config/tc-d30v.c
+++ b/gas/config/tc-d30v.c
@@ -1,5 +1,5 @@
/* tc-d30v.c -- Assembler code for the Mitsubishi D30V
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
+ Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -19,7 +19,6 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
diff --git a/gas/config/tc-dlx.h b/gas/config/tc-dlx.h
index 309f03738163..2cf3d8163a34 100644
--- a/gas/config/tc-dlx.h
+++ b/gas/config/tc-dlx.h
@@ -1,5 +1,5 @@
/* tc-dlx.h -- Assemble for the DLX
- Copyright 2002, 2003, 2005 Free Software Foundation, Inc.
+ Copyright 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -22,10 +22,6 @@
#define TC_DLX
-#ifndef __BFD_H_SEEN__
-#include "bfd.h"
-#endif
-
/* The target BFD architecture. */
#define TARGET_ARCH bfd_arch_dlx
#define TARGET_FORMAT "elf32-dlx"
@@ -48,10 +44,6 @@ extern bfd_boolean md_dlx_fix_adjustable (struct fix *);
#define tc_unrecognized_line(c) dlx_unrecognized_line (c)
-#define tc_coff_symbol_emit_hook(a) ; /* Not used. */
-
-#define COFF_MAGIC DLXMAGIC
-
/* No shared lib support, so we don't need to ensure externally
visible symbols can be overridden. */
#define EXTERN_FORCE_RELOC 0
diff --git a/gas/config/tc-fr30.c b/gas/config/tc-fr30.c
index b0f2204c7f08..b7004c017552 100644
--- a/gas/config/tc-fr30.c
+++ b/gas/config/tc-fr30.c
@@ -1,5 +1,5 @@
/* tc-fr30.c -- Assembler for the Fujitsu FR30.
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2005
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -19,7 +19,6 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
diff --git a/gas/config/tc-frv.c b/gas/config/tc-frv.c
index a2f4ccef4a60..77787719bcdb 100644
--- a/gas/config/tc-frv.c
+++ b/gas/config/tc-frv.c
@@ -18,7 +18,6 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "subsegs.h"
#include "symcat.h"
diff --git a/gas/config/tc-h8300.c b/gas/config/tc-h8300.c
index 7db600c72bb8..bfea99207620 100644
--- a/gas/config/tc-h8300.c
+++ b/gas/config/tc-h8300.c
@@ -1,6 +1,6 @@
/* tc-h8300.c -- Assemble code for the Renesas H8/300
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000,
- 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -21,10 +21,8 @@
/* Written By Steve Chamberlain <sac@cygnus.com>. */
-#include <stdio.h>
#include "as.h"
#include "subsegs.h"
-#include "bfd.h"
#include "dwarf2dbg.h"
#define DEFINE_TABLE
@@ -1391,7 +1389,7 @@ build_bytes (const struct h8_instruction *this_try, struct h8_op *operand)
{
int i;
char *output = frag_more (this_try->length);
- op_type *nibble_ptr = this_try->opcode->data.nib;
+ const op_type *nibble_ptr = this_try->opcode->data.nib;
op_type c;
unsigned int nibble_count = 0;
int op_at[3];
diff --git a/gas/config/tc-h8300.h b/gas/config/tc-h8300.h
index bfc8f724c543..7191181e5c0c 100644
--- a/gas/config/tc-h8300.h
+++ b/gas/config/tc-h8300.h
@@ -86,3 +86,6 @@ extern int Nmode;
extern int SXmode;
#define md_operand(x)
+
+/* This target is buggy, and sets fix size too large. */
+#define TC_FX_SIZE_SLACK(FIX) 1
diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c
index 8ae5a57e9039..71968c0383d5 100644
--- a/gas/config/tc-hppa.c
+++ b/gas/config/tc-hppa.c
@@ -1,6 +1,6 @@
/* tc-hppa.c -- Assemble for the PA
Copyright 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -22,11 +22,10 @@
/* HP PA-RISC support was contributed by the Center for Software Science
at the University of Utah. */
-#include <stdio.h>
-
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
+#include "dw2gencfi.h"
#include "bfd/libhppa.h"
@@ -490,112 +489,42 @@ struct selector_entry
/* Prototypes for functions local to tc-hppa.c. */
#ifdef OBJ_SOM
-static void pa_check_current_space_and_subspace PARAMS ((void));
+static void pa_check_current_space_and_subspace (void);
#endif
#if !(defined (OBJ_ELF) && (defined (TE_LINUX) || defined (TE_NetBSD)))
-static void pa_text PARAMS ((int));
-static void pa_data PARAMS ((int));
-static void pa_comm PARAMS ((int));
+static void pa_text (int);
+static void pa_data (int);
+static void pa_comm (int);
#endif
-static fp_operand_format pa_parse_fp_format PARAMS ((char **s));
-static void pa_cons PARAMS ((int));
-static void pa_float_cons PARAMS ((int));
-static void pa_fill PARAMS ((int));
-static void pa_lcomm PARAMS ((int));
-static void pa_lsym PARAMS ((int));
-static void pa_stringer PARAMS ((int));
-static void pa_version PARAMS ((int));
-static int pa_parse_fp_cmp_cond PARAMS ((char **));
-static int get_expression PARAMS ((char *));
-static int pa_get_absolute_expression PARAMS ((struct pa_it *, char **));
-static int evaluate_absolute PARAMS ((struct pa_it *));
-static unsigned int pa_build_arg_reloc PARAMS ((char *));
-static unsigned int pa_align_arg_reloc PARAMS ((unsigned int, unsigned int));
-static int pa_parse_nullif PARAMS ((char **));
-static int pa_parse_nonneg_cmpsub_cmpltr PARAMS ((char **));
-static int pa_parse_neg_cmpsub_cmpltr PARAMS ((char **));
-static int pa_parse_neg_add_cmpltr PARAMS ((char **));
-static int pa_parse_nonneg_add_cmpltr PARAMS ((char **));
-static int pa_parse_cmpb_64_cmpltr PARAMS ((char **));
-static int pa_parse_cmpib_64_cmpltr PARAMS ((char **));
-static int pa_parse_addb_64_cmpltr PARAMS ((char **));
-static void pa_block PARAMS ((int));
-static void pa_brtab PARAMS ((int));
-static void pa_try PARAMS ((int));
-static void pa_call PARAMS ((int));
-static void pa_call_args PARAMS ((struct call_desc *));
-static void pa_callinfo PARAMS ((int));
-static void pa_copyright PARAMS ((int));
-static void pa_end PARAMS ((int));
-static void pa_enter PARAMS ((int));
-static void pa_entry PARAMS ((int));
-static void pa_equ PARAMS ((int));
-static void pa_exit PARAMS ((int));
-static void pa_export PARAMS ((int));
-static void pa_type_args PARAMS ((symbolS *, int));
-static void pa_import PARAMS ((int));
-static void pa_label PARAMS ((int));
-static void pa_leave PARAMS ((int));
-static void pa_level PARAMS ((int));
-static void pa_origin PARAMS ((int));
-static void pa_proc PARAMS ((int));
-static void pa_procend PARAMS ((int));
-static void pa_param PARAMS ((int));
-static void pa_undefine_label PARAMS ((void));
-static int need_pa11_opcode PARAMS ((void));
-static int pa_parse_number PARAMS ((char **, int));
-static label_symbol_struct *pa_get_label PARAMS ((void));
#ifdef OBJ_SOM
-static int exact_log2 PARAMS ((int));
-static void pa_compiler PARAMS ((int));
-static void pa_align PARAMS ((int));
-static void pa_space PARAMS ((int));
-static void pa_spnum PARAMS ((int));
-static void pa_subspace PARAMS ((int));
-static sd_chain_struct *create_new_space PARAMS ((char *, int, int,
+static int exact_log2 (int);
+static void pa_compiler (int);
+static void pa_align (int);
+static void pa_space (int);
+static void pa_spnum (int);
+static void pa_subspace (int);
+static sd_chain_struct *create_new_space (char *, int, int,
int, int, int,
- asection *, int));
-static ssd_chain_struct *create_new_subspace PARAMS ((sd_chain_struct *,
+ asection *, int);
+static ssd_chain_struct *create_new_subspace (sd_chain_struct *,
char *, int, int,
int, int, int, int,
int, int, int, int,
- int, asection *));
-static ssd_chain_struct *update_subspace PARAMS ((sd_chain_struct *,
+ int, asection *);
+static ssd_chain_struct *update_subspace (sd_chain_struct *,
char *, int, int, int,
int, int, int, int,
int, int, int, int,
- asection *));
-static sd_chain_struct *is_defined_space PARAMS ((char *));
-static ssd_chain_struct *is_defined_subspace PARAMS ((char *));
-static sd_chain_struct *pa_segment_to_space PARAMS ((asection *));
-static ssd_chain_struct *pa_subsegment_to_subspace PARAMS ((asection *,
- subsegT));
-static sd_chain_struct *pa_find_space_by_number PARAMS ((int));
-static unsigned int pa_subspace_start PARAMS ((sd_chain_struct *, int));
-static sd_chain_struct *pa_parse_space_stmt PARAMS ((char *, int));
-static void pa_spaces_begin PARAMS ((void));
-#endif
-static void pa_ip PARAMS ((char *));
-static void fix_new_hppa PARAMS ((fragS *, int, int, symbolS *,
- offsetT, expressionS *, int,
- bfd_reloc_code_real_type,
- enum hppa_reloc_field_selector_type_alt,
- int, unsigned int, int));
-static int is_end_of_statement PARAMS ((void));
-static int reg_name_search PARAMS ((char *));
-static int pa_chk_field_selector PARAMS ((char **));
-static int is_same_frag PARAMS ((fragS *, fragS *));
-static void process_exit PARAMS ((void));
-static unsigned int pa_stringer_aux PARAMS ((char *));
-static fp_operand_format pa_parse_fp_cnv_format PARAMS ((char **s));
-static int pa_parse_ftest_gfx_completer PARAMS ((char **));
-
-#ifdef OBJ_ELF
-static void hppa_elf_mark_end_of_function PARAMS ((void));
-static void pa_build_unwind_subspace PARAMS ((struct call_info *));
-static void pa_vtable_entry PARAMS ((int));
-static void pa_vtable_inherit PARAMS ((int));
+ asection *);
+static sd_chain_struct *is_defined_space (char *);
+static ssd_chain_struct *is_defined_subspace (char *);
+static sd_chain_struct *pa_segment_to_space (asection *);
+static ssd_chain_struct *pa_subsegment_to_subspace (asection *,
+ subsegT);
+static sd_chain_struct *pa_find_space_by_number (int);
+static unsigned int pa_subspace_start (sd_chain_struct *, int);
+static sd_chain_struct *pa_parse_space_stmt (char *, int);
#endif
/* File and globally scoped variable declarations. */
@@ -629,96 +558,6 @@ static struct hash_control *op_hash = NULL;
as they never appear followed by meaningful whitespace. */
const char hppa_symbol_chars[] = "*?=<>";
-/* Table of pseudo ops for the PA. FIXME -- how many of these
- are now redundant with the overall GAS and the object file
- dependent tables? */
-const pseudo_typeS md_pseudo_table[] =
-{
- /* align pseudo-ops on the PA specify the actual alignment requested,
- not the log2 of the requested alignment. */
-#ifdef OBJ_SOM
- {"align", pa_align, 8},
-#endif
-#ifdef OBJ_ELF
- {"align", s_align_bytes, 8},
-#endif
- {"begin_brtab", pa_brtab, 1},
- {"begin_try", pa_try, 1},
- {"block", pa_block, 1},
- {"blockz", pa_block, 0},
- {"byte", pa_cons, 1},
- {"call", pa_call, 0},
- {"callinfo", pa_callinfo, 0},
-#if defined (OBJ_ELF) && (defined (TE_LINUX) || defined (TE_NetBSD))
- {"code", obj_elf_text, 0},
-#else
- {"code", pa_text, 0},
- {"comm", pa_comm, 0},
-#endif
-#ifdef OBJ_SOM
- {"compiler", pa_compiler, 0},
-#endif
- {"copyright", pa_copyright, 0},
-#if !(defined (OBJ_ELF) && (defined (TE_LINUX) || defined (TE_NetBSD)))
- {"data", pa_data, 0},
-#endif
- {"double", pa_float_cons, 'd'},
- {"dword", pa_cons, 8},
- {"end", pa_end, 0},
- {"end_brtab", pa_brtab, 0},
-#if !(defined (OBJ_ELF) && (defined (TE_LINUX) || defined (TE_NetBSD)))
- {"end_try", pa_try, 0},
-#endif
- {"enter", pa_enter, 0},
- {"entry", pa_entry, 0},
- {"equ", pa_equ, 0},
- {"exit", pa_exit, 0},
- {"export", pa_export, 0},
- {"fill", pa_fill, 0},
- {"float", pa_float_cons, 'f'},
- {"half", pa_cons, 2},
- {"import", pa_import, 0},
- {"int", pa_cons, 4},
- {"label", pa_label, 0},
- {"lcomm", pa_lcomm, 0},
- {"leave", pa_leave, 0},
- {"level", pa_level, 0},
- {"long", pa_cons, 4},
- {"lsym", pa_lsym, 0},
-#ifdef OBJ_SOM
- {"nsubspa", pa_subspace, 1},
-#endif
- {"octa", pa_cons, 16},
- {"org", pa_origin, 0},
- {"origin", pa_origin, 0},
- {"param", pa_param, 0},
- {"proc", pa_proc, 0},
- {"procend", pa_procend, 0},
- {"quad", pa_cons, 8},
- {"reg", pa_equ, 1},
- {"short", pa_cons, 2},
- {"single", pa_float_cons, 'f'},
-#ifdef OBJ_SOM
- {"space", pa_space, 0},
- {"spnum", pa_spnum, 0},
-#endif
- {"string", pa_stringer, 0},
- {"stringz", pa_stringer, 1},
-#ifdef OBJ_SOM
- {"subspa", pa_subspace, 0},
-#endif
-#if !(defined (OBJ_ELF) && (defined (TE_LINUX) || defined (TE_NetBSD)))
- {"text", pa_text, 0},
-#endif
- {"version", pa_version, 0},
-#ifdef OBJ_ELF
- {"vtable_entry", pa_vtable_entry, 0},
- {"vtable_inherit", pa_vtable_inherit, 0},
-#endif
- {"word", pa_cons, 4},
- {NULL, 0, 0}
-};
-
/* This array holds the chars that only start a comment at the beginning of
a line. If the line seems to have the form '# 123 filename'
.line and .file directives will appear in the pre-processed output.
@@ -1215,6 +1054,26 @@ static struct default_space_dict pa_def_spaces[] =
((exp).X_op == O_subtract \
&& strcmp (S_GET_NAME ((exp).X_op_symbol), "$PIC_pcrel$0") == 0)
+#define is_tls_gdidx(exp) \
+ ((exp).X_op == O_subtract \
+ && strcmp (S_GET_NAME ((exp).X_op_symbol), "$tls_gdidx$") == 0)
+
+#define is_tls_ldidx(exp) \
+ ((exp).X_op == O_subtract \
+ && strcmp (S_GET_NAME ((exp).X_op_symbol), "$tls_ldidx$") == 0)
+
+#define is_tls_dtpoff(exp) \
+ ((exp).X_op == O_subtract \
+ && strcmp (S_GET_NAME ((exp).X_op_symbol), "$tls_dtpoff$") == 0)
+
+#define is_tls_ieoff(exp) \
+ ((exp).X_op == O_subtract \
+ && strcmp (S_GET_NAME ((exp).X_op_symbol), "$tls_ieoff$") == 0)
+
+#define is_tls_leoff(exp) \
+ ((exp).X_op == O_subtract \
+ && strcmp (S_GET_NAME ((exp).X_op_symbol), "$tls_leoff$") == 0)
+
/* We need some complex handling for stabs (sym1 - sym2). Luckily, we'll
always be able to reduce the expression to a constant, so we don't
need real complex handling yet. */
@@ -1227,7 +1086,7 @@ static struct default_space_dict pa_def_spaces[] =
proc/procend pairs match. */
void
-pa_check_eof ()
+pa_check_eof (void)
{
if (within_entry_exit)
as_fatal (_("Missing .exit\n"));
@@ -1240,7 +1099,7 @@ pa_check_eof ()
or NULL if no label_symbol_struct exists for the current space. */
static label_symbol_struct *
-pa_get_label ()
+pa_get_label (void)
{
label_symbol_struct *label_chain;
@@ -1265,8 +1124,7 @@ pa_get_label ()
this function will replace it with the new label. */
void
-pa_define_label (symbol)
- symbolS *symbol;
+pa_define_label (symbolS *symbol)
{
label_symbol_struct *label_chain = pa_get_label ();
@@ -1275,8 +1133,7 @@ pa_define_label (symbol)
else
{
/* Create a new label entry and add it to the head of the chain. */
- label_chain
- = (label_symbol_struct *) xmalloc (sizeof (label_symbol_struct));
+ label_chain = xmalloc (sizeof (label_symbol_struct));
label_chain->lss_label = symbol;
#ifdef OBJ_SOM
label_chain->lss_space = current_space;
@@ -1301,7 +1158,7 @@ pa_define_label (symbol)
If there is no label_symbol_struct entry, then no action is taken. */
static void
-pa_undefine_label ()
+pa_undefine_label (void)
{
label_symbol_struct *label_chain;
label_symbol_struct *prev_label_chain = NULL;
@@ -1340,25 +1197,21 @@ pa_undefine_label ()
tc_fix_data field. */
static void
-fix_new_hppa (frag, where, size, add_symbol, offset, exp, pcrel,
- r_type, r_field, r_format, arg_reloc, unwind_bits)
- fragS *frag;
- int where;
- int size;
- symbolS *add_symbol;
- offsetT offset;
- expressionS *exp;
- int pcrel;
- bfd_reloc_code_real_type r_type;
- enum hppa_reloc_field_selector_type_alt r_field;
- int r_format;
- unsigned int arg_reloc;
- int unwind_bits ATTRIBUTE_UNUSED;
+fix_new_hppa (fragS *frag,
+ int where,
+ int size,
+ symbolS *add_symbol,
+ offsetT offset,
+ expressionS *exp,
+ int pcrel,
+ bfd_reloc_code_real_type r_type,
+ enum hppa_reloc_field_selector_type_alt r_field,
+ int r_format,
+ unsigned int arg_reloc,
+ int unwind_bits ATTRIBUTE_UNUSED)
{
fixS *new_fix;
-
- struct hppa_fix_struct *hppa_fix = (struct hppa_fix_struct *)
- obstack_alloc (&notes, sizeof (struct hppa_fix_struct));
+ struct hppa_fix_struct *hppa_fix = obstack_alloc (&notes, sizeof (struct hppa_fix_struct));
if (exp != NULL)
new_fix = fix_new_exp (frag, where, size, exp, pcrel, r_type);
@@ -1380,30 +1233,20 @@ fix_new_hppa (frag, where, size, add_symbol, offset, exp, pcrel,
it now so as not to confuse write.c. Ditto for $PIC_pcrel$0. */
if (new_fix->fx_subsy
&& (strcmp (S_GET_NAME (new_fix->fx_subsy), "$global$") == 0
- || strcmp (S_GET_NAME (new_fix->fx_subsy), "$PIC_pcrel$0") == 0))
+ || strcmp (S_GET_NAME (new_fix->fx_subsy), "$PIC_pcrel$0") == 0
+ || strcmp (S_GET_NAME (new_fix->fx_subsy), "$tls_gdidx$") == 0
+ || strcmp (S_GET_NAME (new_fix->fx_subsy), "$tls_ldidx$") == 0
+ || strcmp (S_GET_NAME (new_fix->fx_subsy), "$tls_dtpoff$") == 0
+ || strcmp (S_GET_NAME (new_fix->fx_subsy), "$tls_ieoff$") == 0
+ || strcmp (S_GET_NAME (new_fix->fx_subsy), "$tls_leoff$") == 0))
new_fix->fx_subsy = NULL;
}
-/* Parse a .byte, .word, .long expression for the HPPA. Called by
- cons via the TC_PARSE_CONS_EXPRESSION macro. */
-
-void
-parse_cons_expression_hppa (exp)
- expressionS *exp;
-{
- hppa_field_selector = pa_chk_field_selector (&input_line_pointer);
- expression (exp);
-}
-
/* This fix_new is called by cons via TC_CONS_FIX_NEW.
hppa_field_selector is set by the parse_cons_expression_hppa. */
void
-cons_fix_new_hppa (frag, where, size, exp)
- fragS *frag;
- int where;
- int size;
- expressionS *exp;
+cons_fix_new_hppa (fragS *frag, int where, int size, expressionS *exp)
{
unsigned int rel_type;
@@ -1412,6 +1255,18 @@ cons_fix_new_hppa (frag, where, size, exp)
rel_type = R_HPPA_GOTOFF;
else if (is_PC_relative (*exp))
rel_type = R_HPPA_PCREL_CALL;
+#ifdef OBJ_ELF
+ else if (is_tls_gdidx (*exp))
+ rel_type = R_PARISC_TLS_GD21L;
+ else if (is_tls_ldidx (*exp))
+ rel_type = R_PARISC_TLS_LDM21L;
+ else if (is_tls_dtpoff (*exp))
+ rel_type = R_PARISC_TLS_LDO21L;
+ else if (is_tls_ieoff (*exp))
+ rel_type = R_PARISC_TLS_IE21L;
+ else if (is_tls_leoff (*exp))
+ rel_type = R_PARISC_TLS_LE21L;
+#endif
else if (is_complex (*exp))
rel_type = R_HPPA_COMPLEX;
else
@@ -1431,155 +1286,1936 @@ cons_fix_new_hppa (frag, where, size, exp)
hppa_field_selector = 0;
}
-/* This function is called once, at assembler startup time. It should
- set up all the tables, etc. that the MD part of the assembler will need. */
+/* Mark (via expr_end) the end of an expression (I think). FIXME. */
+
+static void
+get_expression (char *str)
+{
+ char *save_in;
+ asection *seg;
+
+ save_in = input_line_pointer;
+ input_line_pointer = str;
+ seg = expression (&the_insn.exp);
+ if (!(seg == absolute_section
+ || seg == undefined_section
+ || SEG_NORMAL (seg)))
+ {
+ as_warn (_("Bad segment in expression."));
+ expr_end = input_line_pointer;
+ input_line_pointer = save_in;
+ return;
+ }
+ expr_end = input_line_pointer;
+ input_line_pointer = save_in;
+}
+
+/* Parse a PA nullification completer (,n). Return nonzero if the
+ completer was found; return zero if no completer was found. */
+
+static int
+pa_parse_nullif (char **s)
+{
+ int nullif;
+
+ nullif = 0;
+ if (**s == ',')
+ {
+ *s = *s + 1;
+ if (strncasecmp (*s, "n", 1) == 0)
+ nullif = 1;
+ else
+ {
+ as_bad (_("Invalid Nullification: (%c)"), **s);
+ nullif = 0;
+ }
+ *s = *s + 1;
+ }
+
+ return nullif;
+}
+
+/* Turn a string in input_line_pointer into a floating point constant of type
+ type, and store the appropriate bytes in *litP. The number of LITTLENUMS
+ emitted is stored in *sizeP . An error message or NULL is returned. */
+
+#define MAX_LITTLENUMS 6
+
+char *
+md_atof (int type, char *litP, int *sizeP)
+{
+ int prec;
+ LITTLENUM_TYPE words[MAX_LITTLENUMS];
+ LITTLENUM_TYPE *wordP;
+ char *t;
+
+ switch (type)
+ {
+
+ case 'f':
+ case 'F':
+ case 's':
+ case 'S':
+ prec = 2;
+ break;
+
+ case 'd':
+ case 'D':
+ case 'r':
+ case 'R':
+ prec = 4;
+ break;
+
+ case 'x':
+ case 'X':
+ prec = 6;
+ break;
+
+ case 'p':
+ case 'P':
+ prec = 6;
+ break;
+
+ default:
+ *sizeP = 0;
+ return _("Bad call to MD_ATOF()");
+ }
+ t = atof_ieee (input_line_pointer, type, words);
+ if (t)
+ input_line_pointer = t;
+ *sizeP = prec * sizeof (LITTLENUM_TYPE);
+ for (wordP = words; prec--;)
+ {
+ md_number_to_chars (litP, (valueT) (*wordP++), sizeof (LITTLENUM_TYPE));
+ litP += sizeof (LITTLENUM_TYPE);
+ }
+ return NULL;
+}
+
+/* Write out big-endian. */
void
-md_begin ()
+md_number_to_chars (char *buf, valueT val, int n)
{
- const char *retval = NULL;
- int lose = 0;
- unsigned int i = 0;
+ number_to_chars_bigendian (buf, val, n);
+}
- last_call_info = NULL;
- call_info_root = NULL;
+/* Translate internal representation of relocation info to BFD target
+ format. */
- /* Set the default machine type. */
- if (!bfd_set_arch_mach (stdoutput, bfd_arch_hppa, DEFAULT_LEVEL))
- as_warn (_("could not set architecture and machine"));
+arelent **
+tc_gen_reloc (asection *section, fixS *fixp)
+{
+ arelent *reloc;
+ struct hppa_fix_struct *hppa_fixp;
+ static arelent *no_relocs = NULL;
+ arelent **relocs;
+ reloc_type **codes;
+ reloc_type code;
+ int n_relocs;
+ int i;
- /* Folding of text and data segments fails miserably on the PA.
- Warn user and disable "-R" option. */
- if (flag_readonly_data_in_text)
+ hppa_fixp = (struct hppa_fix_struct *) fixp->tc_fix_data;
+ if (fixp->fx_addsy == 0)
+ return &no_relocs;
+
+ assert (hppa_fixp != 0);
+ assert (section != 0);
+
+ reloc = xmalloc (sizeof (arelent));
+
+ reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
+ *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
+ codes = hppa_gen_reloc_type (stdoutput,
+ fixp->fx_r_type,
+ hppa_fixp->fx_r_format,
+ hppa_fixp->fx_r_field,
+ fixp->fx_subsy != NULL,
+ symbol_get_bfdsym (fixp->fx_addsy));
+
+ if (codes == NULL)
{
- as_warn (_("-R option not supported on this target."));
- flag_readonly_data_in_text = 0;
+ as_bad_where (fixp->fx_file, fixp->fx_line, _("Cannot handle fixup"));
+ abort ();
}
-#ifdef OBJ_SOM
- pa_spaces_begin ();
+ for (n_relocs = 0; codes[n_relocs]; n_relocs++)
+ ;
+
+ relocs = xmalloc (sizeof (arelent *) * n_relocs + 1);
+ reloc = xmalloc (sizeof (arelent) * n_relocs);
+ for (i = 0; i < n_relocs; i++)
+ relocs[i] = &reloc[i];
+
+ relocs[n_relocs] = NULL;
+
+#ifdef OBJ_ELF
+ switch (fixp->fx_r_type)
+ {
+ default:
+ assert (n_relocs == 1);
+
+ code = *codes[0];
+
+ /* Now, do any processing that is dependent on the relocation type. */
+ switch (code)
+ {
+ case R_PARISC_DLTREL21L:
+ case R_PARISC_DLTREL14R:
+ case R_PARISC_DLTREL14F:
+ case R_PARISC_PLABEL32:
+ case R_PARISC_PLABEL21L:
+ case R_PARISC_PLABEL14R:
+ /* For plabel relocations, the addend of the
+ relocation should be either 0 (no static link) or 2
+ (static link required). This adjustment is done in
+ bfd/elf32-hppa.c:elf32_hppa_relocate_section.
+
+ We also slam a zero addend into the DLT relative relocs;
+ it doesn't make a lot of sense to use any addend since
+ it gets you a different (eg unknown) DLT entry. */
+ reloc->addend = 0;
+ break;
+
+#ifdef ELF_ARG_RELOC
+ case R_PARISC_PCREL17R:
+ case R_PARISC_PCREL17F:
+ case R_PARISC_PCREL17C:
+ case R_PARISC_DIR17R:
+ case R_PARISC_DIR17F:
+ case R_PARISC_PCREL21L:
+ case R_PARISC_DIR21L:
+ reloc->addend = HPPA_R_ADDEND (hppa_fixp->fx_arg_reloc,
+ fixp->fx_offset);
+ break;
#endif
- op_hash = hash_new ();
+ case R_PARISC_DIR32:
+ /* Facilitate hand-crafted unwind info. */
+ if (strcmp (section->name, UNWIND_SECTION_NAME) == 0)
+ code = R_PARISC_SEGREL32;
+ /* Fall thru */
- while (i < NUMOPCODES)
+ default:
+ reloc->addend = fixp->fx_offset;
+ break;
+ }
+
+ reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
+ *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
+ reloc->howto = bfd_reloc_type_lookup (stdoutput,
+ (bfd_reloc_code_real_type) code);
+ reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
+
+ assert (reloc->howto && (unsigned int) code == reloc->howto->type);
+ break;
+ }
+#else /* OBJ_SOM */
+
+ /* Walk over reach relocation returned by the BFD backend. */
+ for (i = 0; i < n_relocs; i++)
{
- const char *name = pa_opcodes[i].name;
- retval = hash_insert (op_hash, name, (struct pa_opcode *) &pa_opcodes[i]);
- if (retval != NULL && *retval != '\0')
+ code = *codes[i];
+
+ relocs[i]->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
+ *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
+ relocs[i]->howto =
+ bfd_reloc_type_lookup (stdoutput,
+ (bfd_reloc_code_real_type) code);
+ relocs[i]->address = fixp->fx_frag->fr_address + fixp->fx_where;
+
+ switch (code)
{
- as_fatal (_("Internal error: can't hash `%s': %s\n"), name, retval);
- lose = 1;
+ case R_COMP2:
+ /* The only time we ever use a R_COMP2 fixup is for the difference
+ of two symbols. With that in mind we fill in all four
+ relocs now and break out of the loop. */
+ assert (i == 1);
+ relocs[0]->sym_ptr_ptr
+ = (asymbol **) bfd_abs_section_ptr->symbol_ptr_ptr;
+ relocs[0]->howto
+ = bfd_reloc_type_lookup (stdoutput,
+ (bfd_reloc_code_real_type) *codes[0]);
+ relocs[0]->address = fixp->fx_frag->fr_address + fixp->fx_where;
+ relocs[0]->addend = 0;
+ relocs[1]->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
+ *relocs[1]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
+ relocs[1]->howto
+ = bfd_reloc_type_lookup (stdoutput,
+ (bfd_reloc_code_real_type) *codes[1]);
+ relocs[1]->address = fixp->fx_frag->fr_address + fixp->fx_where;
+ relocs[1]->addend = 0;
+ relocs[2]->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
+ *relocs[2]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_subsy);
+ relocs[2]->howto
+ = bfd_reloc_type_lookup (stdoutput,
+ (bfd_reloc_code_real_type) *codes[2]);
+ relocs[2]->address = fixp->fx_frag->fr_address + fixp->fx_where;
+ relocs[2]->addend = 0;
+ relocs[3]->sym_ptr_ptr
+ = (asymbol **) bfd_abs_section_ptr->symbol_ptr_ptr;
+ relocs[3]->howto
+ = bfd_reloc_type_lookup (stdoutput,
+ (bfd_reloc_code_real_type) *codes[3]);
+ relocs[3]->address = fixp->fx_frag->fr_address + fixp->fx_where;
+ relocs[3]->addend = 0;
+ relocs[4]->sym_ptr_ptr
+ = (asymbol **) bfd_abs_section_ptr->symbol_ptr_ptr;
+ relocs[4]->howto
+ = bfd_reloc_type_lookup (stdoutput,
+ (bfd_reloc_code_real_type) *codes[4]);
+ relocs[4]->address = fixp->fx_frag->fr_address + fixp->fx_where;
+ relocs[4]->addend = 0;
+ goto done;
+ case R_PCREL_CALL:
+ case R_ABS_CALL:
+ relocs[i]->addend = HPPA_R_ADDEND (hppa_fixp->fx_arg_reloc, 0);
+ break;
+
+ case R_DLT_REL:
+ case R_DATA_PLABEL:
+ case R_CODE_PLABEL:
+ /* For plabel relocations, the addend of the
+ relocation should be either 0 (no static link) or 2
+ (static link required).
+
+ FIXME: We always assume no static link!
+
+ We also slam a zero addend into the DLT relative relocs;
+ it doesn't make a lot of sense to use any addend since
+ it gets you a different (eg unknown) DLT entry. */
+ relocs[i]->addend = 0;
+ break;
+
+ case R_N_MODE:
+ case R_S_MODE:
+ case R_D_MODE:
+ case R_R_MODE:
+ case R_FSEL:
+ case R_LSEL:
+ case R_RSEL:
+ case R_BEGIN_BRTAB:
+ case R_END_BRTAB:
+ case R_BEGIN_TRY:
+ case R_N0SEL:
+ case R_N1SEL:
+ /* There is no symbol or addend associated with these fixups. */
+ relocs[i]->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
+ *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (dummy_symbol);
+ relocs[i]->addend = 0;
+ break;
+
+ case R_END_TRY:
+ case R_ENTRY:
+ case R_EXIT:
+ /* There is no symbol associated with these fixups. */
+ relocs[i]->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
+ *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (dummy_symbol);
+ relocs[i]->addend = fixp->fx_offset;
+ break;
+
+ default:
+ relocs[i]->addend = fixp->fx_offset;
}
- do
+ }
+
+ done:
+#endif
+
+ return relocs;
+}
+
+/* Process any machine dependent frag types. */
+
+void
+md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED,
+ asection *sec ATTRIBUTE_UNUSED,
+ fragS *fragP)
+{
+ unsigned int address;
+
+ if (fragP->fr_type == rs_machine_dependent)
+ {
+ switch ((int) fragP->fr_subtype)
{
- if ((pa_opcodes[i].match & pa_opcodes[i].mask)
- != pa_opcodes[i].match)
+ case 0:
+ fragP->fr_type = rs_fill;
+ know (fragP->fr_var == 1);
+ know (fragP->fr_next);
+ address = fragP->fr_address + fragP->fr_fix;
+ if (address % fragP->fr_offset)
{
- fprintf (stderr, _("internal error: losing opcode: `%s' \"%s\"\n"),
- pa_opcodes[i].name, pa_opcodes[i].args);
- lose = 1;
+ fragP->fr_offset =
+ fragP->fr_next->fr_address
+ - fragP->fr_address
+ - fragP->fr_fix;
}
- ++i;
+ else
+ fragP->fr_offset = 0;
+ break;
}
- while (i < NUMOPCODES && !strcmp (pa_opcodes[i].name, name));
}
+}
- if (lose)
- as_fatal (_("Broken assembler. No assembly attempted."));
+/* Round up a section size to the appropriate boundary. */
+
+valueT
+md_section_align (asection *segment, valueT size)
+{
+ int align = bfd_get_section_alignment (stdoutput, segment);
+ int align2 = (1 << align) - 1;
+
+ return (size + align2) & ~align2;
+}
+
+/* Return the approximate size of a frag before relaxation has occurred. */
+
+int
+md_estimate_size_before_relax (fragS *fragP, asection *segment ATTRIBUTE_UNUSED)
+{
+ int size;
+
+ size = 0;
+
+ while ((fragP->fr_fix + size) % fragP->fr_offset)
+ size++;
+
+ return size;
+}
+
+#ifdef OBJ_ELF
+# ifdef WARN_COMMENTS
+const char *md_shortopts = "Vc";
+# else
+const char *md_shortopts = "V";
+# endif
+#else
+# ifdef WARN_COMMENTS
+const char *md_shortopts = "c";
+# else
+const char *md_shortopts = "";
+# endif
+#endif
+
+struct option md_longopts[] =
+{
+#ifdef WARN_COMMENTS
+ {"warn-comment", no_argument, NULL, 'c'},
+#endif
+ {NULL, no_argument, NULL, 0}
+};
+size_t md_longopts_size = sizeof (md_longopts);
+
+int
+md_parse_option (int c, char *arg ATTRIBUTE_UNUSED)
+{
+ switch (c)
+ {
+ default:
+ return 0;
+
+#ifdef OBJ_ELF
+ case 'V':
+ print_version_id ();
+ break;
+#endif
+#ifdef WARN_COMMENTS
+ case 'c':
+ warn_comment = 1;
+ break;
+#endif
+ }
+
+ return 1;
+}
+
+void
+md_show_usage (FILE *stream ATTRIBUTE_UNUSED)
+{
+#ifdef OBJ_ELF
+ fprintf (stream, _("\
+ -Q ignored\n"));
+#endif
+#ifdef WARN_COMMENTS
+ fprintf (stream, _("\
+ -c print a warning if a comment is found\n"));
+#endif
+}
+
+/* We have no need to default values of symbols. */
+
+symbolS *
+md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
+{
+ return NULL;
+}
+
+#if defined (OBJ_SOM) || defined (ELF_ARG_RELOC)
+#define nonzero_dibits(x) \
+ ((x) | (((x) & 0x55555555) << 1) | (((x) & 0xAAAAAAAA) >> 1))
+#define arg_reloc_stub_needed(CALLER, CALLEE) \
+ (((CALLER) ^ (CALLEE)) & nonzero_dibits (CALLER) & nonzero_dibits (CALLEE))
+#else
+#define arg_reloc_stub_needed(CALLER, CALLEE) 0
+#endif
+
+/* Apply a fixup to an instruction. */
+void
+md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
+{
+ char *fixpos;
+ struct hppa_fix_struct *hppa_fixP;
+ offsetT new_val;
+ int insn, val, fmt;
+
+ /* SOM uses R_HPPA_ENTRY and R_HPPA_EXIT relocations which can
+ never be "applied" (they are just markers). Likewise for
+ R_HPPA_BEGIN_BRTAB and R_HPPA_END_BRTAB. */
#ifdef OBJ_SOM
- /* SOM will change text_section. To make sure we never put
- anything into the old one switch to the new one now. */
- subseg_set (text_section, 0);
+ if (fixP->fx_r_type == R_HPPA_ENTRY
+ || fixP->fx_r_type == R_HPPA_EXIT
+ || fixP->fx_r_type == R_HPPA_BEGIN_BRTAB
+ || fixP->fx_r_type == R_HPPA_END_BRTAB
+ || fixP->fx_r_type == R_HPPA_BEGIN_TRY)
+ return;
+
+ /* Disgusting. We must set fx_offset ourselves -- R_HPPA_END_TRY
+ fixups are considered not adjustable, which in turn causes
+ adjust_reloc_syms to not set fx_offset. Ugh. */
+ if (fixP->fx_r_type == R_HPPA_END_TRY)
+ {
+ fixP->fx_offset = * valP;
+ return;
+ }
+#endif
+#ifdef OBJ_ELF
+ if (fixP->fx_r_type == (int) R_PARISC_GNU_VTENTRY
+ || fixP->fx_r_type == (int) R_PARISC_GNU_VTINHERIT)
+ return;
+#endif
+
+ if (fixP->fx_addsy == NULL && fixP->fx_pcrel == 0)
+ fixP->fx_done = 1;
+
+ /* There should be a HPPA specific fixup associated with the GAS fixup. */
+ hppa_fixP = (struct hppa_fix_struct *) fixP->tc_fix_data;
+ if (hppa_fixP == NULL)
+ {
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("no hppa_fixup entry for fixup type 0x%x"),
+ fixP->fx_r_type);
+ return;
+ }
+
+ fixpos = fixP->fx_frag->fr_literal + fixP->fx_where;
+
+ if (fixP->fx_size != 4 || hppa_fixP->fx_r_format == 32)
+ {
+ /* Handle constant output. */
+ number_to_chars_bigendian (fixpos, *valP, fixP->fx_size);
+ return;
+ }
+
+ insn = bfd_get_32 (stdoutput, fixpos);
+ fmt = bfd_hppa_insn2fmt (stdoutput, insn);
+
+ /* If there is a symbol associated with this fixup, then it's something
+ which will need a SOM relocation (except for some PC-relative relocs).
+ In such cases we should treat the "val" or "addend" as zero since it
+ will be added in as needed from fx_offset in tc_gen_reloc. */
+ if ((fixP->fx_addsy != NULL
+ || fixP->fx_r_type == (int) R_HPPA_NONE)
+#ifdef OBJ_SOM
+ && fmt != 32
#endif
+ )
+ new_val = ((fmt == 12 || fmt == 17 || fmt == 22) ? 8 : 0);
+#ifdef OBJ_SOM
+ /* These field selectors imply that we do not want an addend. */
+ else if (hppa_fixP->fx_r_field == e_psel
+ || hppa_fixP->fx_r_field == e_rpsel
+ || hppa_fixP->fx_r_field == e_lpsel
+ || hppa_fixP->fx_r_field == e_tsel
+ || hppa_fixP->fx_r_field == e_rtsel
+ || hppa_fixP->fx_r_field == e_ltsel)
+ new_val = ((fmt == 12 || fmt == 17 || fmt == 22) ? 8 : 0);
+#endif
+ else
+ new_val = hppa_field_adjust (* valP, 0, hppa_fixP->fx_r_field);
+ /* Handle pc-relative exceptions from above. */
+ if ((fmt == 12 || fmt == 17 || fmt == 22)
+ && fixP->fx_addsy
+ && fixP->fx_pcrel
+ && !arg_reloc_stub_needed (symbol_arg_reloc_info (fixP->fx_addsy),
+ hppa_fixP->fx_arg_reloc)
+#ifdef OBJ_ELF
+ && (* valP - 8 + 8192 < 16384
+ || (fmt == 17 && * valP - 8 + 262144 < 524288)
+ || (fmt == 22 && * valP - 8 + 8388608 < 16777216))
+#endif
#ifdef OBJ_SOM
- dummy_symbol = symbol_find_or_make ("L$dummy");
- S_SET_SEGMENT (dummy_symbol, text_section);
- /* Force the symbol to be converted to a real symbol. */
- (void) symbol_get_bfdsym (dummy_symbol);
+ && (* valP - 8 + 262144 < 524288
+ || (fmt == 22 && * valP - 8 + 8388608 < 16777216))
+#endif
+ && !S_IS_EXTERNAL (fixP->fx_addsy)
+ && !S_IS_WEAK (fixP->fx_addsy)
+ && S_GET_SEGMENT (fixP->fx_addsy) == hppa_fixP->segment
+ && !(fixP->fx_subsy
+ && S_GET_SEGMENT (fixP->fx_subsy) != hppa_fixP->segment))
+ {
+ new_val = hppa_field_adjust (* valP, 0, hppa_fixP->fx_r_field);
+ }
+
+ switch (fmt)
+ {
+ case 10:
+ CHECK_FIELD_WHERE (new_val, 8191, -8192,
+ fixP->fx_file, fixP->fx_line);
+ val = new_val;
+
+ insn = (insn & ~ 0x3ff1) | (((val & 0x1ff8) << 1)
+ | ((val & 0x2000) >> 13));
+ break;
+ case -11:
+ CHECK_FIELD_WHERE (new_val, 8191, -8192,
+ fixP->fx_file, fixP->fx_line);
+ val = new_val;
+
+ insn = (insn & ~ 0x3ff9) | (((val & 0x1ffc) << 1)
+ | ((val & 0x2000) >> 13));
+ break;
+ /* Handle all opcodes with the 'j' operand type. */
+ case 14:
+ CHECK_FIELD_WHERE (new_val, 8191, -8192,
+ fixP->fx_file, fixP->fx_line);
+ val = new_val;
+
+ insn = ((insn & ~ 0x3fff) | low_sign_unext (val, 14));
+ break;
+
+ /* Handle all opcodes with the 'k' operand type. */
+ case 21:
+ CHECK_FIELD_WHERE (new_val, 1048575, -1048576,
+ fixP->fx_file, fixP->fx_line);
+ val = new_val;
+
+ insn = (insn & ~ 0x1fffff) | re_assemble_21 (val);
+ break;
+
+ /* Handle all the opcodes with the 'i' operand type. */
+ case 11:
+ CHECK_FIELD_WHERE (new_val, 1023, -1024,
+ fixP->fx_file, fixP->fx_line);
+ val = new_val;
+
+ insn = (insn & ~ 0x7ff) | low_sign_unext (val, 11);
+ break;
+
+ /* Handle all the opcodes with the 'w' operand type. */
+ case 12:
+ CHECK_FIELD_WHERE (new_val - 8, 8191, -8192,
+ fixP->fx_file, fixP->fx_line);
+ val = new_val - 8;
+
+ insn = (insn & ~ 0x1ffd) | re_assemble_12 (val >> 2);
+ break;
+
+ /* Handle some of the opcodes with the 'W' operand type. */
+ case 17:
+ {
+ offsetT distance = * valP;
+
+ /* If this is an absolute branch (ie no link) with an out of
+ range target, then we want to complain. */
+ if (fixP->fx_r_type == (int) R_HPPA_PCREL_CALL
+ && (insn & 0xffe00000) == 0xe8000000)
+ CHECK_FIELD_WHERE (distance - 8, 262143, -262144,
+ fixP->fx_file, fixP->fx_line);
+
+ CHECK_FIELD_WHERE (new_val - 8, 262143, -262144,
+ fixP->fx_file, fixP->fx_line);
+ val = new_val - 8;
+
+ insn = (insn & ~ 0x1f1ffd) | re_assemble_17 (val >> 2);
+ break;
+ }
+
+ case 22:
+ {
+ offsetT distance = * valP;
+
+ /* If this is an absolute branch (ie no link) with an out of
+ range target, then we want to complain. */
+ if (fixP->fx_r_type == (int) R_HPPA_PCREL_CALL
+ && (insn & 0xffe00000) == 0xe8000000)
+ CHECK_FIELD_WHERE (distance - 8, 8388607, -8388608,
+ fixP->fx_file, fixP->fx_line);
+
+ CHECK_FIELD_WHERE (new_val - 8, 8388607, -8388608,
+ fixP->fx_file, fixP->fx_line);
+ val = new_val - 8;
+
+ insn = (insn & ~ 0x3ff1ffd) | re_assemble_22 (val >> 2);
+ break;
+ }
+
+ case -10:
+ val = new_val;
+ insn = (insn & ~ 0xfff1) | re_assemble_16 (val & -8);
+ break;
+
+ case -16:
+ val = new_val;
+ insn = (insn & ~ 0xfff9) | re_assemble_16 (val & -4);
+ break;
+
+ case 16:
+ val = new_val;
+ insn = (insn & ~ 0xffff) | re_assemble_16 (val);
+ break;
+
+ case 32:
+ insn = new_val;
+ break;
+
+ default:
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("Unknown relocation encountered in md_apply_fix."));
+ return;
+ }
+
+#ifdef OBJ_ELF
+ switch (fixP->fx_r_type)
+ {
+ case R_PARISC_TLS_GD21L:
+ case R_PARISC_TLS_GD14R:
+ case R_PARISC_TLS_LDM21L:
+ case R_PARISC_TLS_LDM14R:
+ case R_PARISC_TLS_LE21L:
+ case R_PARISC_TLS_LE14R:
+ case R_PARISC_TLS_IE21L:
+ case R_PARISC_TLS_IE14R:
+ if (fixP->fx_addsy)
+ S_SET_THREAD_LOCAL (fixP->fx_addsy);
+ break;
+ default:
+ break;
+ }
#endif
+
+ /* Insert the relocation. */
+ bfd_put_32 (stdoutput, insn, fixpos);
}
-/* Assemble a single instruction storing it into a frag. */
-void
-md_assemble (str)
- char *str;
+/* Exactly what point is a PC-relative offset relative TO?
+ On the PA, they're relative to the address of the offset. */
+
+long
+md_pcrel_from (fixS *fixP)
{
- char *to;
+ return fixP->fx_where + fixP->fx_frag->fr_address;
+}
- /* The had better be something to assemble. */
- assert (str);
+/* Return nonzero if the input line pointer is at the end of
+ a statement. */
- /* If we are within a procedure definition, make sure we've
- defined a label for the procedure; handle case where the
- label was defined after the .PROC directive.
+static int
+is_end_of_statement (void)
+{
+ return ((*input_line_pointer == '\n')
+ || (*input_line_pointer == ';')
+ || (*input_line_pointer == '!'));
+}
- Note there's not need to diddle with the segment or fragment
- for the label symbol in this case. We have already switched
- into the new $CODE$ subspace at this point. */
- if (within_procedure && last_call_info->start_symbol == NULL)
+#define REG_NAME_CNT (sizeof (pre_defined_registers) / sizeof (struct pd_reg))
+
+/* Given NAME, find the register number associated with that name, return
+ the integer value associated with the given name or -1 on failure. */
+
+static int
+reg_name_search (char *name)
+{
+ int middle, low, high;
+ int cmp;
+
+ low = 0;
+ high = REG_NAME_CNT - 1;
+
+ do
{
- label_symbol_struct *label_symbol = pa_get_label ();
+ middle = (low + high) / 2;
+ cmp = strcasecmp (name, pre_defined_registers[middle].name);
+ if (cmp < 0)
+ high = middle - 1;
+ else if (cmp > 0)
+ low = middle + 1;
+ else
+ return pre_defined_registers[middle].value;
+ }
+ while (low <= high);
- if (label_symbol)
+ return -1;
+}
+
+/* Read a number from S. The number might come in one of many forms,
+ the most common will be a hex or decimal constant, but it could be
+ a pre-defined register (Yuk!), or an absolute symbol.
+
+ Return 1 on success or 0 on failure. If STRICT, then a missing
+ register prefix will cause a failure. The number itself is
+ returned in `pa_number'.
+
+ IS_FLOAT indicates that a PA-89 FP register number should be
+ parsed; A `l' or `r' suffix is checked for if but 2 of IS_FLOAT is
+ not set.
+
+ pa_parse_number can not handle negative constants and will fail
+ horribly if it is passed such a constant. */
+
+static int
+pa_parse_number (char **s, int is_float)
+{
+ int num;
+ char *name;
+ char c;
+ symbolS *sym;
+ int status;
+ char *p = *s;
+ bfd_boolean have_prefix;
+
+ /* Skip whitespace before the number. */
+ while (*p == ' ' || *p == '\t')
+ p = p + 1;
+
+ pa_number = -1;
+ have_prefix = 0;
+ num = 0;
+ if (!strict && ISDIGIT (*p))
+ {
+ /* Looks like a number. */
+
+ if (*p == '0' && (*(p + 1) == 'x' || *(p + 1) == 'X'))
{
- if (label_symbol->lss_label)
+ /* The number is specified in hex. */
+ p += 2;
+ while (ISDIGIT (*p) || ((*p >= 'a') && (*p <= 'f'))
+ || ((*p >= 'A') && (*p <= 'F')))
{
- last_call_info->start_symbol = label_symbol->lss_label;
- symbol_get_bfdsym (label_symbol->lss_label)->flags
- |= BSF_FUNCTION;
-#ifdef OBJ_SOM
- /* Also handle allocation of a fixup to hold the unwind
- information when the label appears after the proc/procend. */
- if (within_entry_exit)
- {
- char *where;
- unsigned int u;
+ if (ISDIGIT (*p))
+ num = num * 16 + *p - '0';
+ else if (*p >= 'a' && *p <= 'f')
+ num = num * 16 + *p - 'a' + 10;
+ else
+ num = num * 16 + *p - 'A' + 10;
+ ++p;
+ }
+ }
+ else
+ {
+ /* The number is specified in decimal. */
+ while (ISDIGIT (*p))
+ {
+ num = num * 10 + *p - '0';
+ ++p;
+ }
+ }
- where = frag_more (0);
- u = UNWIND_LOW32 (&last_call_info->ci_unwind.descriptor);
- fix_new_hppa (frag_now, where - frag_now->fr_literal, 0,
- NULL, (offsetT) 0, NULL,
- 0, R_HPPA_ENTRY, e_fsel, 0, 0, u);
+ pa_number = num;
+
+ /* Check for a `l' or `r' suffix. */
+ if (is_float)
+ {
+ pa_number += FP_REG_BASE;
+ if (! (is_float & 2))
+ {
+ if (IS_R_SELECT (p))
+ {
+ pa_number += FP_REG_RSEL;
+ ++p;
}
-#endif
+ else if (IS_L_SELECT (p))
+ {
+ ++p;
+ }
+ }
+ }
+ }
+ else if (*p == '%')
+ {
+ /* The number might be a predefined register. */
+ have_prefix = 1;
+ name = p;
+ p++;
+ c = *p;
+ /* Tege hack: Special case for general registers as the general
+ code makes a binary search with case translation, and is VERY
+ slow. */
+ if (c == 'r')
+ {
+ p++;
+ if (*p == 'e' && *(p + 1) == 't'
+ && (*(p + 2) == '0' || *(p + 2) == '1'))
+ {
+ p += 2;
+ num = *p - '0' + 28;
+ p++;
+ }
+ else if (*p == 'p')
+ {
+ num = 2;
+ p++;
+ }
+ else if (!ISDIGIT (*p))
+ {
+ if (print_errors)
+ as_bad (_("Undefined register: '%s'."), name);
+ num = -1;
}
else
- as_bad (_("Missing function name for .PROC (corrupted label chain)"));
+ {
+ do
+ num = num * 10 + *p++ - '0';
+ while (ISDIGIT (*p));
+ }
}
else
- as_bad (_("Missing function name for .PROC"));
+ {
+ /* Do a normal register search. */
+ while (is_part_of_name (c))
+ {
+ p = p + 1;
+ c = *p;
+ }
+ *p = 0;
+ status = reg_name_search (name);
+ if (status >= 0)
+ num = status;
+ else
+ {
+ if (print_errors)
+ as_bad (_("Undefined register: '%s'."), name);
+ num = -1;
+ }
+ *p = c;
+ }
+
+ pa_number = num;
}
+ else
+ {
+ /* And finally, it could be a symbol in the absolute section which
+ is effectively a constant, or a register alias symbol. */
+ name = p;
+ c = *p;
+ while (is_part_of_name (c))
+ {
+ p = p + 1;
+ c = *p;
+ }
+ *p = 0;
+ if ((sym = symbol_find (name)) != NULL)
+ {
+ if (S_GET_SEGMENT (sym) == reg_section)
+ {
+ num = S_GET_VALUE (sym);
+ /* Well, we don't really have one, but we do have a
+ register, so... */
+ have_prefix = TRUE;
+ }
+ else if (S_GET_SEGMENT (sym) == &bfd_abs_section)
+ num = S_GET_VALUE (sym);
+ else if (!strict)
+ {
+ if (print_errors)
+ as_bad (_("Non-absolute symbol: '%s'."), name);
+ num = -1;
+ }
+ }
+ else if (!strict)
+ {
+ /* There is where we'd come for an undefined symbol
+ or for an empty string. For an empty string we
+ will return zero. That's a concession made for
+ compatibility with the braindamaged HP assemblers. */
+ if (*name == 0)
+ num = 0;
+ else
+ {
+ if (print_errors)
+ as_bad (_("Undefined absolute constant: '%s'."), name);
+ num = -1;
+ }
+ }
+ *p = c;
- /* Assemble the instruction. Results are saved into "the_insn". */
- pa_ip (str);
+ pa_number = num;
+ }
- /* Get somewhere to put the assembled instruction. */
- to = frag_more (4);
+ if (!strict || have_prefix)
+ {
+ *s = p;
+ return 1;
+ }
+ return 0;
+}
- /* Output the opcode. */
- md_number_to_chars (to, the_insn.opcode, 4);
+/* Return nonzero if the given INSN and L/R information will require
+ a new PA-1.1 opcode. */
- /* If necessary output more stuff. */
- if (the_insn.reloc != R_HPPA_NONE)
- fix_new_hppa (frag_now, (to - frag_now->fr_literal), 4, NULL,
- (offsetT) 0, &the_insn.exp, the_insn.pcrel,
- the_insn.reloc, the_insn.field_selector,
- the_insn.format, the_insn.arg_reloc, 0);
+static int
+need_pa11_opcode (void)
+{
+ if ((pa_number & FP_REG_RSEL) != 0
+ && !(the_insn.fpof1 == DBL && the_insn.fpof2 == DBL))
+ {
+ /* If this instruction is specific to a particular architecture,
+ then set a new architecture. */
+ if (bfd_get_mach (stdoutput) < pa11)
+ {
+ if (!bfd_set_arch_mach (stdoutput, bfd_arch_hppa, pa11))
+ as_warn (_("could not update architecture and machine"));
+ }
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
-#ifdef OBJ_ELF
- dwarf2_emit_insn (4);
+/* Parse a condition for a fcmp instruction. Return the numerical
+ code associated with the condition. */
+
+static int
+pa_parse_fp_cmp_cond (char **s)
+{
+ int cond, i;
+
+ cond = 0;
+
+ for (i = 0; i < 32; i++)
+ {
+ if (strncasecmp (*s, fp_cond_map[i].string,
+ strlen (fp_cond_map[i].string)) == 0)
+ {
+ cond = fp_cond_map[i].cond;
+ *s += strlen (fp_cond_map[i].string);
+ /* If not a complete match, back up the input string and
+ report an error. */
+ if (**s != ' ' && **s != '\t')
+ {
+ *s -= strlen (fp_cond_map[i].string);
+ break;
+ }
+ while (**s == ' ' || **s == '\t')
+ *s = *s + 1;
+ return cond;
+ }
+ }
+
+ as_bad (_("Invalid FP Compare Condition: %s"), *s);
+
+ /* Advance over the bogus completer. */
+ while (**s != ',' && **s != ' ' && **s != '\t')
+ *s += 1;
+
+ return 0;
+}
+
+/* Parse a graphics test complete for ftest. */
+
+static int
+pa_parse_ftest_gfx_completer (char **s)
+{
+ int value;
+
+ value = 0;
+ if (strncasecmp (*s, "acc8", 4) == 0)
+ {
+ value = 5;
+ *s += 4;
+ }
+ else if (strncasecmp (*s, "acc6", 4) == 0)
+ {
+ value = 9;
+ *s += 4;
+ }
+ else if (strncasecmp (*s, "acc4", 4) == 0)
+ {
+ value = 13;
+ *s += 4;
+ }
+ else if (strncasecmp (*s, "acc2", 4) == 0)
+ {
+ value = 17;
+ *s += 4;
+ }
+ else if (strncasecmp (*s, "acc", 3) == 0)
+ {
+ value = 1;
+ *s += 3;
+ }
+ else if (strncasecmp (*s, "rej8", 4) == 0)
+ {
+ value = 6;
+ *s += 4;
+ }
+ else if (strncasecmp (*s, "rej", 3) == 0)
+ {
+ value = 2;
+ *s += 3;
+ }
+ else
+ {
+ value = 0;
+ as_bad (_("Invalid FTEST completer: %s"), *s);
+ }
+
+ return value;
+}
+
+/* Parse an FP operand format completer returning the completer
+ type. */
+
+static fp_operand_format
+pa_parse_fp_cnv_format (char **s)
+{
+ int format;
+
+ format = SGL;
+ if (**s == ',')
+ {
+ *s += 1;
+ if (strncasecmp (*s, "sgl", 3) == 0)
+ {
+ format = SGL;
+ *s += 4;
+ }
+ else if (strncasecmp (*s, "dbl", 3) == 0)
+ {
+ format = DBL;
+ *s += 4;
+ }
+ else if (strncasecmp (*s, "quad", 4) == 0)
+ {
+ format = QUAD;
+ *s += 5;
+ }
+ else if (strncasecmp (*s, "w", 1) == 0)
+ {
+ format = W;
+ *s += 2;
+ }
+ else if (strncasecmp (*s, "uw", 2) == 0)
+ {
+ format = UW;
+ *s += 3;
+ }
+ else if (strncasecmp (*s, "dw", 2) == 0)
+ {
+ format = DW;
+ *s += 3;
+ }
+ else if (strncasecmp (*s, "udw", 3) == 0)
+ {
+ format = UDW;
+ *s += 4;
+ }
+ else if (strncasecmp (*s, "qw", 2) == 0)
+ {
+ format = QW;
+ *s += 3;
+ }
+ else if (strncasecmp (*s, "uqw", 3) == 0)
+ {
+ format = UQW;
+ *s += 4;
+ }
+ else
+ {
+ format = ILLEGAL_FMT;
+ as_bad (_("Invalid FP Operand Format: %3s"), *s);
+ }
+ }
+
+ return format;
+}
+
+/* Parse an FP operand format completer returning the completer
+ type. */
+
+static fp_operand_format
+pa_parse_fp_format (char **s)
+{
+ int format;
+
+ format = SGL;
+ if (**s == ',')
+ {
+ *s += 1;
+ if (strncasecmp (*s, "sgl", 3) == 0)
+ {
+ format = SGL;
+ *s += 4;
+ }
+ else if (strncasecmp (*s, "dbl", 3) == 0)
+ {
+ format = DBL;
+ *s += 4;
+ }
+ else if (strncasecmp (*s, "quad", 4) == 0)
+ {
+ format = QUAD;
+ *s += 5;
+ }
+ else
+ {
+ format = ILLEGAL_FMT;
+ as_bad (_("Invalid FP Operand Format: %3s"), *s);
+ }
+ }
+
+ return format;
+}
+
+/* Convert from a selector string into a selector type. */
+
+static int
+pa_chk_field_selector (char **str)
+{
+ int middle, low, high;
+ int cmp;
+ char name[4];
+
+ /* Read past any whitespace. */
+ /* FIXME: should we read past newlines and formfeeds??? */
+ while (**str == ' ' || **str == '\t' || **str == '\n' || **str == '\f')
+ *str = *str + 1;
+
+ if ((*str)[1] == '\'' || (*str)[1] == '%')
+ name[0] = TOLOWER ((*str)[0]),
+ name[1] = 0;
+ else if ((*str)[2] == '\'' || (*str)[2] == '%')
+ name[0] = TOLOWER ((*str)[0]),
+ name[1] = TOLOWER ((*str)[1]),
+ name[2] = 0;
+ else if ((*str)[3] == '\'' || (*str)[3] == '%')
+ name[0] = TOLOWER ((*str)[0]),
+ name[1] = TOLOWER ((*str)[1]),
+ name[2] = TOLOWER ((*str)[2]),
+ name[3] = 0;
+ else
+ return e_fsel;
+
+ low = 0;
+ high = sizeof (selector_table) / sizeof (struct selector_entry) - 1;
+
+ do
+ {
+ middle = (low + high) / 2;
+ cmp = strcmp (name, selector_table[middle].prefix);
+ if (cmp < 0)
+ high = middle - 1;
+ else if (cmp > 0)
+ low = middle + 1;
+ else
+ {
+ *str += strlen (name) + 1;
+#ifndef OBJ_SOM
+ if (selector_table[middle].field_selector == e_nsel)
+ return e_fsel;
#endif
+ return selector_table[middle].field_selector;
+ }
+ }
+ while (low <= high);
+
+ return e_fsel;
+}
+
+/* Parse a .byte, .word, .long expression for the HPPA. Called by
+ cons via the TC_PARSE_CONS_EXPRESSION macro. */
+
+void
+parse_cons_expression_hppa (expressionS *exp)
+{
+ hppa_field_selector = pa_chk_field_selector (&input_line_pointer);
+ expression (exp);
+}
+
+/* Evaluate an absolute expression EXP which may be modified by
+ the selector FIELD_SELECTOR. Return the value of the expression. */
+static int
+evaluate_absolute (struct pa_it *insn)
+{
+ offsetT value;
+ expressionS exp;
+ int field_selector = insn->field_selector;
+
+ exp = insn->exp;
+ value = exp.X_add_number;
+
+ return hppa_field_adjust (0, value, field_selector);
+}
+
+/* Mark (via expr_end) the end of an absolute expression. FIXME. */
+
+static int
+pa_get_absolute_expression (struct pa_it *insn, char **strp)
+{
+ char *save_in;
+
+ insn->field_selector = pa_chk_field_selector (strp);
+ save_in = input_line_pointer;
+ input_line_pointer = *strp;
+ expression (&insn->exp);
+ /* This is not perfect, but is a huge improvement over doing nothing.
+
+ The PA assembly syntax is ambiguous in a variety of ways. Consider
+ this string "4 %r5" Is that the number 4 followed by the register
+ r5, or is that 4 MOD r5?
+
+ If we get a modulo expression when looking for an absolute, we try
+ again cutting off the input string at the first whitespace character. */
+ if (insn->exp.X_op == O_modulus)
+ {
+ char *s, c;
+ int retval;
+
+ input_line_pointer = *strp;
+ s = *strp;
+ while (*s != ',' && *s != ' ' && *s != '\t')
+ s++;
+
+ c = *s;
+ *s = 0;
+
+ retval = pa_get_absolute_expression (insn, strp);
+
+ input_line_pointer = save_in;
+ *s = c;
+ return evaluate_absolute (insn);
+ }
+ /* When in strict mode we have a non-match, fix up the pointers
+ and return to our caller. */
+ if (insn->exp.X_op != O_constant && strict)
+ {
+ expr_end = input_line_pointer;
+ input_line_pointer = save_in;
+ return 0;
+ }
+ if (insn->exp.X_op != O_constant)
+ {
+ as_bad (_("Bad segment (should be absolute)."));
+ expr_end = input_line_pointer;
+ input_line_pointer = save_in;
+ return 0;
+ }
+ expr_end = input_line_pointer;
+ input_line_pointer = save_in;
+ return evaluate_absolute (insn);
+}
+
+/* Given an argument location specification return the associated
+ argument location number. */
+
+static unsigned int
+pa_build_arg_reloc (char *type_name)
+{
+
+ if (strncasecmp (type_name, "no", 2) == 0)
+ return 0;
+ if (strncasecmp (type_name, "gr", 2) == 0)
+ return 1;
+ else if (strncasecmp (type_name, "fr", 2) == 0)
+ return 2;
+ else if (strncasecmp (type_name, "fu", 2) == 0)
+ return 3;
+ else
+ as_bad (_("Invalid argument location: %s\n"), type_name);
+
+ return 0;
+}
+
+/* Encode and return an argument relocation specification for
+ the given register in the location specified by arg_reloc. */
+
+static unsigned int
+pa_align_arg_reloc (unsigned int reg, unsigned int arg_reloc)
+{
+ unsigned int new_reloc;
+
+ new_reloc = arg_reloc;
+ switch (reg)
+ {
+ case 0:
+ new_reloc <<= 8;
+ break;
+ case 1:
+ new_reloc <<= 6;
+ break;
+ case 2:
+ new_reloc <<= 4;
+ break;
+ case 3:
+ new_reloc <<= 2;
+ break;
+ default:
+ as_bad (_("Invalid argument description: %d"), reg);
+ }
+
+ return new_reloc;
+}
+
+/* Parse a non-negated compare/subtract completer returning the
+ number (for encoding in instructions) of the given completer. */
+
+static int
+pa_parse_nonneg_cmpsub_cmpltr (char **s)
+{
+ int cmpltr;
+ char *name = *s + 1;
+ char c;
+ char *save_s = *s;
+ int nullify = 0;
+
+ cmpltr = 0;
+ if (**s == ',')
+ {
+ *s += 1;
+ while (**s != ',' && **s != ' ' && **s != '\t')
+ *s += 1;
+ c = **s;
+ **s = 0x00;
+
+ if (strcmp (name, "=") == 0)
+ {
+ cmpltr = 1;
+ }
+ else if (strcmp (name, "<") == 0)
+ {
+ cmpltr = 2;
+ }
+ else if (strcmp (name, "<=") == 0)
+ {
+ cmpltr = 3;
+ }
+ else if (strcmp (name, "<<") == 0)
+ {
+ cmpltr = 4;
+ }
+ else if (strcmp (name, "<<=") == 0)
+ {
+ cmpltr = 5;
+ }
+ else if (strcasecmp (name, "sv") == 0)
+ {
+ cmpltr = 6;
+ }
+ else if (strcasecmp (name, "od") == 0)
+ {
+ cmpltr = 7;
+ }
+ /* If we have something like addb,n then there is no condition
+ completer. */
+ else if (strcasecmp (name, "n") == 0)
+ {
+ cmpltr = 0;
+ nullify = 1;
+ }
+ else
+ {
+ cmpltr = -1;
+ }
+ **s = c;
+ }
+
+ /* Reset pointers if this was really a ,n for a branch instruction. */
+ if (nullify)
+ *s = save_s;
+
+ return cmpltr;
+}
+
+/* Parse a negated compare/subtract completer returning the
+ number (for encoding in instructions) of the given completer. */
+
+static int
+pa_parse_neg_cmpsub_cmpltr (char **s)
+{
+ int cmpltr;
+ char *name = *s + 1;
+ char c;
+ char *save_s = *s;
+ int nullify = 0;
+
+ cmpltr = 0;
+ if (**s == ',')
+ {
+ *s += 1;
+ while (**s != ',' && **s != ' ' && **s != '\t')
+ *s += 1;
+ c = **s;
+ **s = 0x00;
+
+ if (strcasecmp (name, "tr") == 0)
+ {
+ cmpltr = 0;
+ }
+ else if (strcmp (name, "<>") == 0)
+ {
+ cmpltr = 1;
+ }
+ else if (strcmp (name, ">=") == 0)
+ {
+ cmpltr = 2;
+ }
+ else if (strcmp (name, ">") == 0)
+ {
+ cmpltr = 3;
+ }
+ else if (strcmp (name, ">>=") == 0)
+ {
+ cmpltr = 4;
+ }
+ else if (strcmp (name, ">>") == 0)
+ {
+ cmpltr = 5;
+ }
+ else if (strcasecmp (name, "nsv") == 0)
+ {
+ cmpltr = 6;
+ }
+ else if (strcasecmp (name, "ev") == 0)
+ {
+ cmpltr = 7;
+ }
+ /* If we have something like addb,n then there is no condition
+ completer. */
+ else if (strcasecmp (name, "n") == 0)
+ {
+ cmpltr = 0;
+ nullify = 1;
+ }
+ else
+ {
+ cmpltr = -1;
+ }
+ **s = c;
+ }
+
+ /* Reset pointers if this was really a ,n for a branch instruction. */
+ if (nullify)
+ *s = save_s;
+
+ return cmpltr;
+}
+
+/* Parse a 64 bit compare and branch completer returning the number (for
+ encoding in instructions) of the given completer.
+
+ Nonnegated comparisons are returned as 0-7, negated comparisons are
+ returned as 8-15. */
+
+static int
+pa_parse_cmpb_64_cmpltr (char **s)
+{
+ int cmpltr;
+ char *name = *s + 1;
+ char c;
+
+ cmpltr = -1;
+ if (**s == ',')
+ {
+ *s += 1;
+ while (**s != ',' && **s != ' ' && **s != '\t')
+ *s += 1;
+ c = **s;
+ **s = 0x00;
+
+ if (strcmp (name, "*") == 0)
+ {
+ cmpltr = 0;
+ }
+ else if (strcmp (name, "*=") == 0)
+ {
+ cmpltr = 1;
+ }
+ else if (strcmp (name, "*<") == 0)
+ {
+ cmpltr = 2;
+ }
+ else if (strcmp (name, "*<=") == 0)
+ {
+ cmpltr = 3;
+ }
+ else if (strcmp (name, "*<<") == 0)
+ {
+ cmpltr = 4;
+ }
+ else if (strcmp (name, "*<<=") == 0)
+ {
+ cmpltr = 5;
+ }
+ else if (strcasecmp (name, "*sv") == 0)
+ {
+ cmpltr = 6;
+ }
+ else if (strcasecmp (name, "*od") == 0)
+ {
+ cmpltr = 7;
+ }
+ else if (strcasecmp (name, "*tr") == 0)
+ {
+ cmpltr = 8;
+ }
+ else if (strcmp (name, "*<>") == 0)
+ {
+ cmpltr = 9;
+ }
+ else if (strcmp (name, "*>=") == 0)
+ {
+ cmpltr = 10;
+ }
+ else if (strcmp (name, "*>") == 0)
+ {
+ cmpltr = 11;
+ }
+ else if (strcmp (name, "*>>=") == 0)
+ {
+ cmpltr = 12;
+ }
+ else if (strcmp (name, "*>>") == 0)
+ {
+ cmpltr = 13;
+ }
+ else if (strcasecmp (name, "*nsv") == 0)
+ {
+ cmpltr = 14;
+ }
+ else if (strcasecmp (name, "*ev") == 0)
+ {
+ cmpltr = 15;
+ }
+ else
+ {
+ cmpltr = -1;
+ }
+ **s = c;
+ }
+
+ return cmpltr;
+}
+
+/* Parse a 64 bit compare immediate and branch completer returning the number
+ (for encoding in instructions) of the given completer. */
+
+static int
+pa_parse_cmpib_64_cmpltr (char **s)
+{
+ int cmpltr;
+ char *name = *s + 1;
+ char c;
+
+ cmpltr = -1;
+ if (**s == ',')
+ {
+ *s += 1;
+ while (**s != ',' && **s != ' ' && **s != '\t')
+ *s += 1;
+ c = **s;
+ **s = 0x00;
+
+ if (strcmp (name, "*<<") == 0)
+ {
+ cmpltr = 0;
+ }
+ else if (strcmp (name, "*=") == 0)
+ {
+ cmpltr = 1;
+ }
+ else if (strcmp (name, "*<") == 0)
+ {
+ cmpltr = 2;
+ }
+ else if (strcmp (name, "*<=") == 0)
+ {
+ cmpltr = 3;
+ }
+ else if (strcmp (name, "*>>=") == 0)
+ {
+ cmpltr = 4;
+ }
+ else if (strcmp (name, "*<>") == 0)
+ {
+ cmpltr = 5;
+ }
+ else if (strcasecmp (name, "*>=") == 0)
+ {
+ cmpltr = 6;
+ }
+ else if (strcasecmp (name, "*>") == 0)
+ {
+ cmpltr = 7;
+ }
+ else
+ {
+ cmpltr = -1;
+ }
+ **s = c;
+ }
+
+ return cmpltr;
+}
+
+/* Parse a non-negated addition completer returning the number
+ (for encoding in instructions) of the given completer. */
+
+static int
+pa_parse_nonneg_add_cmpltr (char **s)
+{
+ int cmpltr;
+ char *name = *s + 1;
+ char c;
+ char *save_s = *s;
+ int nullify = 0;
+
+ cmpltr = 0;
+ if (**s == ',')
+ {
+ *s += 1;
+ while (**s != ',' && **s != ' ' && **s != '\t')
+ *s += 1;
+ c = **s;
+ **s = 0x00;
+ if (strcmp (name, "=") == 0)
+ {
+ cmpltr = 1;
+ }
+ else if (strcmp (name, "<") == 0)
+ {
+ cmpltr = 2;
+ }
+ else if (strcmp (name, "<=") == 0)
+ {
+ cmpltr = 3;
+ }
+ else if (strcasecmp (name, "nuv") == 0)
+ {
+ cmpltr = 4;
+ }
+ else if (strcasecmp (name, "znv") == 0)
+ {
+ cmpltr = 5;
+ }
+ else if (strcasecmp (name, "sv") == 0)
+ {
+ cmpltr = 6;
+ }
+ else if (strcasecmp (name, "od") == 0)
+ {
+ cmpltr = 7;
+ }
+ /* If we have something like addb,n then there is no condition
+ completer. */
+ else if (strcasecmp (name, "n") == 0)
+ {
+ cmpltr = 0;
+ nullify = 1;
+ }
+ else
+ {
+ cmpltr = -1;
+ }
+ **s = c;
+ }
+
+ /* Reset pointers if this was really a ,n for a branch instruction. */
+ if (nullify)
+ *s = save_s;
+
+ return cmpltr;
+}
+
+/* Parse a negated addition completer returning the number
+ (for encoding in instructions) of the given completer. */
+
+static int
+pa_parse_neg_add_cmpltr (char **s)
+{
+ int cmpltr;
+ char *name = *s + 1;
+ char c;
+ char *save_s = *s;
+ int nullify = 0;
+
+ cmpltr = 0;
+ if (**s == ',')
+ {
+ *s += 1;
+ while (**s != ',' && **s != ' ' && **s != '\t')
+ *s += 1;
+ c = **s;
+ **s = 0x00;
+ if (strcasecmp (name, "tr") == 0)
+ {
+ cmpltr = 0;
+ }
+ else if (strcmp (name, "<>") == 0)
+ {
+ cmpltr = 1;
+ }
+ else if (strcmp (name, ">=") == 0)
+ {
+ cmpltr = 2;
+ }
+ else if (strcmp (name, ">") == 0)
+ {
+ cmpltr = 3;
+ }
+ else if (strcasecmp (name, "uv") == 0)
+ {
+ cmpltr = 4;
+ }
+ else if (strcasecmp (name, "vnz") == 0)
+ {
+ cmpltr = 5;
+ }
+ else if (strcasecmp (name, "nsv") == 0)
+ {
+ cmpltr = 6;
+ }
+ else if (strcasecmp (name, "ev") == 0)
+ {
+ cmpltr = 7;
+ }
+ /* If we have something like addb,n then there is no condition
+ completer. */
+ else if (strcasecmp (name, "n") == 0)
+ {
+ cmpltr = 0;
+ nullify = 1;
+ }
+ else
+ {
+ cmpltr = -1;
+ }
+ **s = c;
+ }
+
+ /* Reset pointers if this was really a ,n for a branch instruction. */
+ if (nullify)
+ *s = save_s;
+
+ return cmpltr;
+}
+
+/* Parse a 64 bit wide mode add and branch completer returning the number (for
+ encoding in instructions) of the given completer. */
+
+static int
+pa_parse_addb_64_cmpltr (char **s)
+{
+ int cmpltr;
+ char *name = *s + 1;
+ char c;
+ char *save_s = *s;
+ int nullify = 0;
+
+ cmpltr = 0;
+ if (**s == ',')
+ {
+ *s += 1;
+ while (**s != ',' && **s != ' ' && **s != '\t')
+ *s += 1;
+ c = **s;
+ **s = 0x00;
+ if (strcmp (name, "=") == 0)
+ {
+ cmpltr = 1;
+ }
+ else if (strcmp (name, "<") == 0)
+ {
+ cmpltr = 2;
+ }
+ else if (strcmp (name, "<=") == 0)
+ {
+ cmpltr = 3;
+ }
+ else if (strcasecmp (name, "nuv") == 0)
+ {
+ cmpltr = 4;
+ }
+ else if (strcasecmp (name, "*=") == 0)
+ {
+ cmpltr = 5;
+ }
+ else if (strcasecmp (name, "*<") == 0)
+ {
+ cmpltr = 6;
+ }
+ else if (strcasecmp (name, "*<=") == 0)
+ {
+ cmpltr = 7;
+ }
+ else if (strcmp (name, "tr") == 0)
+ {
+ cmpltr = 8;
+ }
+ else if (strcmp (name, "<>") == 0)
+ {
+ cmpltr = 9;
+ }
+ else if (strcmp (name, ">=") == 0)
+ {
+ cmpltr = 10;
+ }
+ else if (strcmp (name, ">") == 0)
+ {
+ cmpltr = 11;
+ }
+ else if (strcasecmp (name, "uv") == 0)
+ {
+ cmpltr = 12;
+ }
+ else if (strcasecmp (name, "*<>") == 0)
+ {
+ cmpltr = 13;
+ }
+ else if (strcasecmp (name, "*>=") == 0)
+ {
+ cmpltr = 14;
+ }
+ else if (strcasecmp (name, "*>") == 0)
+ {
+ cmpltr = 15;
+ }
+ /* If we have something like addb,n then there is no condition
+ completer. */
+ else if (strcasecmp (name, "n") == 0)
+ {
+ cmpltr = 0;
+ nullify = 1;
+ }
+ else
+ {
+ cmpltr = -1;
+ }
+ **s = c;
+ }
+
+ /* Reset pointers if this was really a ,n for a branch instruction. */
+ if (nullify)
+ *s = save_s;
+
+ return cmpltr;
}
/* Do the real work for assembling a single instruction. Store results
into the global "the_insn" variable. */
static void
-pa_ip (str)
- char *str;
+pa_ip (char *str)
{
char *error_message = "";
char *s, c, *argstart, *name, *save_s;
@@ -1634,9 +3270,7 @@ pa_ip (str)
}
if (comma)
- {
- *--s = ',';
- }
+ *--s = ',';
/* Mark the location where arguments for the instruction start, then
start processing them. */
@@ -1664,7 +3298,6 @@ pa_ip (str)
switch (*args)
{
-
/* End of arguments. */
case '\0':
if (*s == '\0')
@@ -2974,6 +4607,18 @@ pa_ip (str)
the_insn.reloc = R_HPPA_GOTOFF;
else if (is_PC_relative (the_insn.exp))
the_insn.reloc = R_HPPA_PCREL_CALL;
+#ifdef OBJ_ELF
+ else if (is_tls_gdidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_GD21L;
+ else if (is_tls_ldidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDM21L;
+ else if (is_tls_dtpoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDO21L;
+ else if (is_tls_ieoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_IE21L;
+ else if (is_tls_leoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LE21L;
+#endif
else
the_insn.reloc = R_HPPA;
the_insn.format = 11;
@@ -3093,6 +4738,18 @@ pa_ip (str)
the_insn.reloc = R_HPPA_GOTOFF;
else if (is_PC_relative (the_insn.exp))
the_insn.reloc = R_HPPA_PCREL_CALL;
+#ifdef OBJ_ELF
+ else if (is_tls_gdidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_GD21L;
+ else if (is_tls_ldidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDM21L;
+ else if (is_tls_dtpoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDO21L;
+ else if (is_tls_ieoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_IE21L;
+ else if (is_tls_leoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LE21L;
+#endif
else
the_insn.reloc = R_HPPA;
the_insn.format = 14;
@@ -3123,6 +4780,18 @@ pa_ip (str)
the_insn.reloc = R_HPPA_GOTOFF;
else if (is_PC_relative (the_insn.exp))
the_insn.reloc = R_HPPA_PCREL_CALL;
+#ifdef OBJ_ELF
+ else if (is_tls_gdidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_GD21L;
+ else if (is_tls_ldidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDM21L;
+ else if (is_tls_dtpoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDO21L;
+ else if (is_tls_ieoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_IE21L;
+ else if (is_tls_leoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LE21L;
+#endif
else
the_insn.reloc = R_HPPA;
the_insn.format = 14;
@@ -3147,6 +4816,18 @@ pa_ip (str)
the_insn.reloc = R_HPPA_GOTOFF;
else if (is_PC_relative (the_insn.exp))
the_insn.reloc = R_HPPA_PCREL_CALL;
+#ifdef OBJ_ELF
+ else if (is_tls_gdidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_GD21L;
+ else if (is_tls_ldidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDM21L;
+ else if (is_tls_dtpoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDO21L;
+ else if (is_tls_ieoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_IE21L;
+ else if (is_tls_leoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LE21L;
+#endif
else
the_insn.reloc = R_HPPA;
the_insn.format = 14;
@@ -3171,6 +4852,18 @@ pa_ip (str)
the_insn.reloc = R_HPPA_GOTOFF;
else if (is_PC_relative (the_insn.exp))
the_insn.reloc = R_HPPA_PCREL_CALL;
+#ifdef OBJ_ELF
+ else if (is_tls_gdidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_GD21L;
+ else if (is_tls_ldidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDM21L;
+ else if (is_tls_dtpoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDO21L;
+ else if (is_tls_ieoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_IE21L;
+ else if (is_tls_leoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LE21L;
+#endif
else
the_insn.reloc = R_HPPA;
the_insn.format = 21;
@@ -3196,6 +4889,18 @@ pa_ip (str)
the_insn.reloc = R_HPPA_GOTOFF;
else if (is_PC_relative (the_insn.exp))
the_insn.reloc = R_HPPA_PCREL_CALL;
+#ifdef OBJ_ELF
+ else if (is_tls_gdidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_GD21L;
+ else if (is_tls_ldidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDM21L;
+ else if (is_tls_dtpoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDO21L;
+ else if (is_tls_ieoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_IE21L;
+ else if (is_tls_leoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LE21L;
+#endif
else
the_insn.reloc = R_HPPA;
the_insn.format = 14;
@@ -3222,6 +4927,18 @@ pa_ip (str)
the_insn.reloc = R_HPPA_GOTOFF;
else if (is_PC_relative (the_insn.exp))
the_insn.reloc = R_HPPA_PCREL_CALL;
+#ifdef OBJ_ELF
+ else if (is_tls_gdidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_GD21L;
+ else if (is_tls_ldidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDM21L;
+ else if (is_tls_dtpoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDO21L;
+ else if (is_tls_ieoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_IE21L;
+ else if (is_tls_leoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LE21L;
+#endif
else
the_insn.reloc = R_HPPA;
the_insn.format = 14;
@@ -3248,6 +4965,18 @@ pa_ip (str)
the_insn.reloc = R_HPPA_GOTOFF;
else if (is_PC_relative (the_insn.exp))
the_insn.reloc = R_HPPA_PCREL_CALL;
+#ifdef OBJ_ELF
+ else if (is_tls_gdidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_GD21L;
+ else if (is_tls_ldidx (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDM21L;
+ else if (is_tls_dtpoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LDO21L;
+ else if (is_tls_ieoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_IE21L;
+ else if (is_tls_leoff (the_insn.exp))
+ the_insn.reloc = R_PARISC_TLS_LE21L;
+#endif
else
the_insn.reloc = R_HPPA;
the_insn.format = 14;
@@ -3992,1947 +5721,83 @@ pa_ip (str)
the_insn.opcode = opcode;
}
-/* Turn a string in input_line_pointer into a floating point constant of type
- type, and store the appropriate bytes in *litP. The number of LITTLENUMS
- emitted is stored in *sizeP . An error message or NULL is returned. */
-
-#define MAX_LITTLENUMS 6
-
-char *
-md_atof (type, litP, sizeP)
- char type;
- char *litP;
- int *sizeP;
-{
- int prec;
- LITTLENUM_TYPE words[MAX_LITTLENUMS];
- LITTLENUM_TYPE *wordP;
- char *t;
-
- switch (type)
- {
-
- case 'f':
- case 'F':
- case 's':
- case 'S':
- prec = 2;
- break;
-
- case 'd':
- case 'D':
- case 'r':
- case 'R':
- prec = 4;
- break;
-
- case 'x':
- case 'X':
- prec = 6;
- break;
-
- case 'p':
- case 'P':
- prec = 6;
- break;
-
- default:
- *sizeP = 0;
- return _("Bad call to MD_ATOF()");
- }
- t = atof_ieee (input_line_pointer, type, words);
- if (t)
- input_line_pointer = t;
- *sizeP = prec * sizeof (LITTLENUM_TYPE);
- for (wordP = words; prec--;)
- {
- md_number_to_chars (litP, (valueT) (*wordP++), sizeof (LITTLENUM_TYPE));
- litP += sizeof (LITTLENUM_TYPE);
- }
- return NULL;
-}
-
-/* Write out big-endian. */
+/* Assemble a single instruction storing it into a frag. */
void
-md_number_to_chars (buf, val, n)
- char *buf;
- valueT val;
- int n;
-{
- number_to_chars_bigendian (buf, val, n);
-}
-
-/* Translate internal representation of relocation info to BFD target
- format. */
-
-arelent **
-tc_gen_reloc (section, fixp)
- asection *section;
- fixS *fixp;
+md_assemble (char *str)
{
- arelent *reloc;
- struct hppa_fix_struct *hppa_fixp;
- static arelent *no_relocs = NULL;
- arelent **relocs;
- reloc_type **codes;
- reloc_type code;
- int n_relocs;
- int i;
-
- hppa_fixp = (struct hppa_fix_struct *) fixp->tc_fix_data;
- if (fixp->fx_addsy == 0)
- return &no_relocs;
-
- assert (hppa_fixp != 0);
- assert (section != 0);
-
- reloc = (arelent *) xmalloc (sizeof (arelent));
-
- reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
- *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
- codes = hppa_gen_reloc_type (stdoutput,
- fixp->fx_r_type,
- hppa_fixp->fx_r_format,
- hppa_fixp->fx_r_field,
- fixp->fx_subsy != NULL,
- symbol_get_bfdsym (fixp->fx_addsy));
-
- if (codes == NULL)
- {
- as_bad_where (fixp->fx_file, fixp->fx_line, _("Cannot handle fixup"));
- abort ();
- }
-
- for (n_relocs = 0; codes[n_relocs]; n_relocs++)
- ;
-
- relocs = (arelent **) xmalloc (sizeof (arelent *) * n_relocs + 1);
- reloc = (arelent *) xmalloc (sizeof (arelent) * n_relocs);
- for (i = 0; i < n_relocs; i++)
- relocs[i] = &reloc[i];
-
- relocs[n_relocs] = NULL;
-
-#ifdef OBJ_ELF
- switch (fixp->fx_r_type)
- {
- default:
- assert (n_relocs == 1);
-
- code = *codes[0];
-
- /* Now, do any processing that is dependent on the relocation type. */
- switch (code)
- {
- case R_PARISC_DLTREL21L:
- case R_PARISC_DLTREL14R:
- case R_PARISC_DLTREL14F:
- case R_PARISC_PLABEL32:
- case R_PARISC_PLABEL21L:
- case R_PARISC_PLABEL14R:
- /* For plabel relocations, the addend of the
- relocation should be either 0 (no static link) or 2
- (static link required). This adjustment is done in
- bfd/elf32-hppa.c:elf32_hppa_relocate_section.
-
- We also slam a zero addend into the DLT relative relocs;
- it doesn't make a lot of sense to use any addend since
- it gets you a different (eg unknown) DLT entry. */
- reloc->addend = 0;
- break;
-
-#ifdef ELF_ARG_RELOC
- case R_PARISC_PCREL17R:
- case R_PARISC_PCREL17F:
- case R_PARISC_PCREL17C:
- case R_PARISC_DIR17R:
- case R_PARISC_DIR17F:
- case R_PARISC_PCREL21L:
- case R_PARISC_DIR21L:
- reloc->addend = HPPA_R_ADDEND (hppa_fixp->fx_arg_reloc,
- fixp->fx_offset);
- break;
-#endif
-
- case R_PARISC_DIR32:
- /* Facilitate hand-crafted unwind info. */
- if (strcmp (section->name, UNWIND_SECTION_NAME) == 0)
- code = R_PARISC_SEGREL32;
- /* Fall thru */
-
- default:
- reloc->addend = fixp->fx_offset;
- break;
- }
+ char *to;
- reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
- *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
- reloc->howto = bfd_reloc_type_lookup (stdoutput,
- (bfd_reloc_code_real_type) code);
- reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
+ /* The had better be something to assemble. */
+ assert (str);
- assert (reloc->howto && (unsigned int) code == reloc->howto->type);
- break;
- }
-#else /* OBJ_SOM */
+ /* If we are within a procedure definition, make sure we've
+ defined a label for the procedure; handle case where the
+ label was defined after the .PROC directive.
- /* Walk over reach relocation returned by the BFD backend. */
- for (i = 0; i < n_relocs; i++)
+ Note there's not need to diddle with the segment or fragment
+ for the label symbol in this case. We have already switched
+ into the new $CODE$ subspace at this point. */
+ if (within_procedure && last_call_info->start_symbol == NULL)
{
- code = *codes[i];
-
- relocs[i]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
- *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
- relocs[i]->howto =
- bfd_reloc_type_lookup (stdoutput,
- (bfd_reloc_code_real_type) code);
- relocs[i]->address = fixp->fx_frag->fr_address + fixp->fx_where;
-
- switch (code)
- {
- case R_COMP2:
- /* The only time we ever use a R_COMP2 fixup is for the difference
- of two symbols. With that in mind we fill in all four
- relocs now and break out of the loop. */
- assert (i == 1);
- relocs[0]->sym_ptr_ptr = (asymbol **) &(bfd_abs_symbol);
- relocs[0]->howto =
- bfd_reloc_type_lookup (stdoutput,
- (bfd_reloc_code_real_type) *codes[0]);
- relocs[0]->address = fixp->fx_frag->fr_address + fixp->fx_where;
- relocs[0]->addend = 0;
- relocs[1]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
- *relocs[1]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
- relocs[1]->howto =
- bfd_reloc_type_lookup (stdoutput,
- (bfd_reloc_code_real_type) *codes[1]);
- relocs[1]->address = fixp->fx_frag->fr_address + fixp->fx_where;
- relocs[1]->addend = 0;
- relocs[2]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
- *relocs[2]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_subsy);
- relocs[2]->howto =
- bfd_reloc_type_lookup (stdoutput,
- (bfd_reloc_code_real_type) *codes[2]);
- relocs[2]->address = fixp->fx_frag->fr_address + fixp->fx_where;
- relocs[2]->addend = 0;
- relocs[3]->sym_ptr_ptr = (asymbol **) &(bfd_abs_symbol);
- relocs[3]->howto =
- bfd_reloc_type_lookup (stdoutput,
- (bfd_reloc_code_real_type) *codes[3]);
- relocs[3]->address = fixp->fx_frag->fr_address + fixp->fx_where;
- relocs[3]->addend = 0;
- relocs[4]->sym_ptr_ptr = (asymbol **) &(bfd_abs_symbol);
- relocs[4]->howto =
- bfd_reloc_type_lookup (stdoutput,
- (bfd_reloc_code_real_type) *codes[4]);
- relocs[4]->address = fixp->fx_frag->fr_address + fixp->fx_where;
- relocs[4]->addend = 0;
- goto done;
- case R_PCREL_CALL:
- case R_ABS_CALL:
- relocs[i]->addend = HPPA_R_ADDEND (hppa_fixp->fx_arg_reloc, 0);
- break;
-
- case R_DLT_REL:
- case R_DATA_PLABEL:
- case R_CODE_PLABEL:
- /* For plabel relocations, the addend of the
- relocation should be either 0 (no static link) or 2
- (static link required).
-
- FIXME: We always assume no static link!
-
- We also slam a zero addend into the DLT relative relocs;
- it doesn't make a lot of sense to use any addend since
- it gets you a different (eg unknown) DLT entry. */
- relocs[i]->addend = 0;
- break;
-
- case R_N_MODE:
- case R_S_MODE:
- case R_D_MODE:
- case R_R_MODE:
- case R_FSEL:
- case R_LSEL:
- case R_RSEL:
- case R_BEGIN_BRTAB:
- case R_END_BRTAB:
- case R_BEGIN_TRY:
- case R_N0SEL:
- case R_N1SEL:
- /* There is no symbol or addend associated with these fixups. */
- relocs[i]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
- *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (dummy_symbol);
- relocs[i]->addend = 0;
- break;
-
- case R_END_TRY:
- case R_ENTRY:
- case R_EXIT:
- /* There is no symbol associated with these fixups. */
- relocs[i]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
- *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (dummy_symbol);
- relocs[i]->addend = fixp->fx_offset;
- break;
-
- default:
- relocs[i]->addend = fixp->fx_offset;
- }
- }
-
- done:
-#endif
-
- return relocs;
-}
-
-/* Process any machine dependent frag types. */
-
-void
-md_convert_frag (abfd, sec, fragP)
- register bfd *abfd ATTRIBUTE_UNUSED;
- register asection *sec ATTRIBUTE_UNUSED;
- register fragS *fragP;
-{
- unsigned int address;
+ label_symbol_struct *label_symbol = pa_get_label ();
- if (fragP->fr_type == rs_machine_dependent)
- {
- switch ((int) fragP->fr_subtype)
+ if (label_symbol)
{
- case 0:
- fragP->fr_type = rs_fill;
- know (fragP->fr_var == 1);
- know (fragP->fr_next);
- address = fragP->fr_address + fragP->fr_fix;
- if (address % fragP->fr_offset)
+ if (label_symbol->lss_label)
{
- fragP->fr_offset =
- fragP->fr_next->fr_address
- - fragP->fr_address
- - fragP->fr_fix;
- }
- else
- fragP->fr_offset = 0;
- break;
- }
- }
-}
-
-/* Round up a section size to the appropriate boundary. */
-
-valueT
-md_section_align (segment, size)
- asection *segment;
- valueT size;
-{
- int align = bfd_get_section_alignment (stdoutput, segment);
- int align2 = (1 << align) - 1;
-
- return (size + align2) & ~align2;
-}
-
-/* Return the approximate size of a frag before relaxation has occurred. */
-int
-md_estimate_size_before_relax (fragP, segment)
- register fragS *fragP;
- asection *segment ATTRIBUTE_UNUSED;
-{
- int size;
-
- size = 0;
-
- while ((fragP->fr_fix + size) % fragP->fr_offset)
- size++;
-
- return size;
-}
-
-#ifdef OBJ_ELF
-# ifdef WARN_COMMENTS
-const char *md_shortopts = "Vc";
-# else
-const char *md_shortopts = "V";
-# endif
-#else
-# ifdef WARN_COMMENTS
-const char *md_shortopts = "c";
-# else
-const char *md_shortopts = "";
-# endif
-#endif
-
-struct option md_longopts[] = {
-#ifdef WARN_COMMENTS
- {"warn-comment", no_argument, NULL, 'c'},
-#endif
- {NULL, no_argument, NULL, 0}
-};
-size_t md_longopts_size = sizeof (md_longopts);
-
-int
-md_parse_option (c, arg)
- int c ATTRIBUTE_UNUSED;
- char *arg ATTRIBUTE_UNUSED;
-{
- switch (c)
- {
- default:
- return 0;
-
-#ifdef OBJ_ELF
- case 'V':
- print_version_id ();
- break;
-#endif
-#ifdef WARN_COMMENTS
- case 'c':
- warn_comment = 1;
- break;
-#endif
- }
-
- return 1;
-}
-
-void
-md_show_usage (stream)
- FILE *stream ATTRIBUTE_UNUSED;
-{
-#ifdef OBJ_ELF
- fprintf (stream, _("\
- -Q ignored\n"));
-#endif
-#ifdef WARN_COMMENTS
- fprintf (stream, _("\
- -c print a warning if a comment is found\n"));
-#endif
-}
-
-/* We have no need to default values of symbols. */
-
-symbolS *
-md_undefined_symbol (name)
- char *name ATTRIBUTE_UNUSED;
-{
- return 0;
-}
-
-#if defined (OBJ_SOM) || defined (ELF_ARG_RELOC)
-#define nonzero_dibits(x) \
- ((x) | (((x) & 0x55555555) << 1) | (((x) & 0xAAAAAAAA) >> 1))
-#define arg_reloc_stub_needed(CALLER, CALLEE) \
- (((CALLER) ^ (CALLEE)) & nonzero_dibits (CALLER) & nonzero_dibits (CALLEE))
-#else
-#define arg_reloc_stub_needed(CALLER, CALLEE) 0
-#endif
-
-/* Apply a fixup to an instruction. */
-
-void
-md_apply_fix (fixP, valP, seg)
- fixS *fixP;
- valueT *valP;
- segT seg ATTRIBUTE_UNUSED;
-{
- char *fixpos;
- struct hppa_fix_struct *hppa_fixP;
- offsetT new_val;
- int insn, val, fmt;
-
- /* SOM uses R_HPPA_ENTRY and R_HPPA_EXIT relocations which can
- never be "applied" (they are just markers). Likewise for
- R_HPPA_BEGIN_BRTAB and R_HPPA_END_BRTAB. */
-#ifdef OBJ_SOM
- if (fixP->fx_r_type == R_HPPA_ENTRY
- || fixP->fx_r_type == R_HPPA_EXIT
- || fixP->fx_r_type == R_HPPA_BEGIN_BRTAB
- || fixP->fx_r_type == R_HPPA_END_BRTAB
- || fixP->fx_r_type == R_HPPA_BEGIN_TRY)
- return;
-
- /* Disgusting. We must set fx_offset ourselves -- R_HPPA_END_TRY
- fixups are considered not adjustable, which in turn causes
- adjust_reloc_syms to not set fx_offset. Ugh. */
- if (fixP->fx_r_type == R_HPPA_END_TRY)
- {
- fixP->fx_offset = * valP;
- return;
- }
-#endif
-#ifdef OBJ_ELF
- if (fixP->fx_r_type == (int) R_PARISC_GNU_VTENTRY
- || fixP->fx_r_type == (int) R_PARISC_GNU_VTINHERIT)
- return;
-#endif
-
- if (fixP->fx_addsy == NULL && fixP->fx_pcrel == 0)
- fixP->fx_done = 1;
-
- /* There should be a HPPA specific fixup associated with the GAS fixup. */
- hppa_fixP = (struct hppa_fix_struct *) fixP->tc_fix_data;
- if (hppa_fixP == NULL)
- {
- as_bad_where (fixP->fx_file, fixP->fx_line,
- _("no hppa_fixup entry for fixup type 0x%x"),
- fixP->fx_r_type);
- return;
- }
-
- fixpos = fixP->fx_frag->fr_literal + fixP->fx_where;
-
- if (fixP->fx_size != 4 || hppa_fixP->fx_r_format == 32)
- {
- /* Handle constant output. */
- number_to_chars_bigendian (fixpos, *valP, fixP->fx_size);
- return;
- }
-
- insn = bfd_get_32 (stdoutput, fixpos);
- fmt = bfd_hppa_insn2fmt (stdoutput, insn);
-
- /* If there is a symbol associated with this fixup, then it's something
- which will need a SOM relocation (except for some PC-relative relocs).
- In such cases we should treat the "val" or "addend" as zero since it
- will be added in as needed from fx_offset in tc_gen_reloc. */
- if ((fixP->fx_addsy != NULL
- || fixP->fx_r_type == (int) R_HPPA_NONE)
-#ifdef OBJ_SOM
- && fmt != 32
-#endif
- )
- new_val = ((fmt == 12 || fmt == 17 || fmt == 22) ? 8 : 0);
-#ifdef OBJ_SOM
- /* These field selectors imply that we do not want an addend. */
- else if (hppa_fixP->fx_r_field == e_psel
- || hppa_fixP->fx_r_field == e_rpsel
- || hppa_fixP->fx_r_field == e_lpsel
- || hppa_fixP->fx_r_field == e_tsel
- || hppa_fixP->fx_r_field == e_rtsel
- || hppa_fixP->fx_r_field == e_ltsel)
- new_val = ((fmt == 12 || fmt == 17 || fmt == 22) ? 8 : 0);
-#endif
- else
- new_val = hppa_field_adjust (* valP, 0, hppa_fixP->fx_r_field);
-
- /* Handle pc-relative exceptions from above. */
- if ((fmt == 12 || fmt == 17 || fmt == 22)
- && fixP->fx_addsy
- && fixP->fx_pcrel
- && !arg_reloc_stub_needed (symbol_arg_reloc_info (fixP->fx_addsy),
- hppa_fixP->fx_arg_reloc)
-#ifdef OBJ_ELF
- && (* valP - 8 + 8192 < 16384
- || (fmt == 17 && * valP - 8 + 262144 < 524288)
- || (fmt == 22 && * valP - 8 + 8388608 < 16777216))
-#endif
+ last_call_info->start_symbol = label_symbol->lss_label;
+ symbol_get_bfdsym (label_symbol->lss_label)->flags
+ |= BSF_FUNCTION;
#ifdef OBJ_SOM
- && (* valP - 8 + 262144 < 524288
- || (fmt == 22 && * valP - 8 + 8388608 < 16777216))
-#endif
- && !S_IS_EXTERNAL (fixP->fx_addsy)
- && !S_IS_WEAK (fixP->fx_addsy)
- && S_GET_SEGMENT (fixP->fx_addsy) == hppa_fixP->segment
- && !(fixP->fx_subsy
- && S_GET_SEGMENT (fixP->fx_subsy) != hppa_fixP->segment))
- {
- new_val = hppa_field_adjust (* valP, 0, hppa_fixP->fx_r_field);
- }
-
- switch (fmt)
- {
- case 10:
- CHECK_FIELD_WHERE (new_val, 8191, -8192,
- fixP->fx_file, fixP->fx_line);
- val = new_val;
-
- insn = (insn & ~ 0x3ff1) | (((val & 0x1ff8) << 1)
- | ((val & 0x2000) >> 13));
- break;
- case -11:
- CHECK_FIELD_WHERE (new_val, 8191, -8192,
- fixP->fx_file, fixP->fx_line);
- val = new_val;
-
- insn = (insn & ~ 0x3ff9) | (((val & 0x1ffc) << 1)
- | ((val & 0x2000) >> 13));
- break;
- /* Handle all opcodes with the 'j' operand type. */
- case 14:
- CHECK_FIELD_WHERE (new_val, 8191, -8192,
- fixP->fx_file, fixP->fx_line);
- val = new_val;
-
- insn = ((insn & ~ 0x3fff) | low_sign_unext (val, 14));
- break;
-
- /* Handle all opcodes with the 'k' operand type. */
- case 21:
- CHECK_FIELD_WHERE (new_val, 1048575, -1048576,
- fixP->fx_file, fixP->fx_line);
- val = new_val;
-
- insn = (insn & ~ 0x1fffff) | re_assemble_21 (val);
- break;
-
- /* Handle all the opcodes with the 'i' operand type. */
- case 11:
- CHECK_FIELD_WHERE (new_val, 1023, -1024,
- fixP->fx_file, fixP->fx_line);
- val = new_val;
-
- insn = (insn & ~ 0x7ff) | low_sign_unext (val, 11);
- break;
-
- /* Handle all the opcodes with the 'w' operand type. */
- case 12:
- CHECK_FIELD_WHERE (new_val - 8, 8191, -8192,
- fixP->fx_file, fixP->fx_line);
- val = new_val - 8;
-
- insn = (insn & ~ 0x1ffd) | re_assemble_12 (val >> 2);
- break;
-
- /* Handle some of the opcodes with the 'W' operand type. */
- case 17:
- {
- offsetT distance = * valP;
-
- /* If this is an absolute branch (ie no link) with an out of
- range target, then we want to complain. */
- if (fixP->fx_r_type == (int) R_HPPA_PCREL_CALL
- && (insn & 0xffe00000) == 0xe8000000)
- CHECK_FIELD_WHERE (distance - 8, 262143, -262144,
- fixP->fx_file, fixP->fx_line);
-
- CHECK_FIELD_WHERE (new_val - 8, 262143, -262144,
- fixP->fx_file, fixP->fx_line);
- val = new_val - 8;
-
- insn = (insn & ~ 0x1f1ffd) | re_assemble_17 (val >> 2);
- break;
- }
-
- case 22:
- {
- offsetT distance = * valP;
-
- /* If this is an absolute branch (ie no link) with an out of
- range target, then we want to complain. */
- if (fixP->fx_r_type == (int) R_HPPA_PCREL_CALL
- && (insn & 0xffe00000) == 0xe8000000)
- CHECK_FIELD_WHERE (distance - 8, 8388607, -8388608,
- fixP->fx_file, fixP->fx_line);
-
- CHECK_FIELD_WHERE (new_val - 8, 8388607, -8388608,
- fixP->fx_file, fixP->fx_line);
- val = new_val - 8;
-
- insn = (insn & ~ 0x3ff1ffd) | re_assemble_22 (val >> 2);
- break;
- }
-
- case -10:
- val = new_val;
- insn = (insn & ~ 0xfff1) | re_assemble_16 (val & -8);
- break;
-
- case -16:
- val = new_val;
- insn = (insn & ~ 0xfff9) | re_assemble_16 (val & -4);
- break;
-
- case 16:
- val = new_val;
- insn = (insn & ~ 0xffff) | re_assemble_16 (val);
- break;
-
- case 32:
- insn = new_val;
- break;
-
- default:
- as_bad_where (fixP->fx_file, fixP->fx_line,
- _("Unknown relocation encountered in md_apply_fix."));
- return;
- }
-
- /* Insert the relocation. */
- bfd_put_32 (stdoutput, insn, fixpos);
-}
-
-/* Exactly what point is a PC-relative offset relative TO?
- On the PA, they're relative to the address of the offset. */
-
-long
-md_pcrel_from (fixP)
- fixS *fixP;
-{
- return fixP->fx_where + fixP->fx_frag->fr_address;
-}
-
-/* Return nonzero if the input line pointer is at the end of
- a statement. */
-
-static int
-is_end_of_statement ()
-{
- return ((*input_line_pointer == '\n')
- || (*input_line_pointer == ';')
- || (*input_line_pointer == '!'));
-}
-
-/* Read a number from S. The number might come in one of many forms,
- the most common will be a hex or decimal constant, but it could be
- a pre-defined register (Yuk!), or an absolute symbol.
-
- Return 1 on success or 0 on failure. If STRICT, then a missing
- register prefix will cause a failure. The number itself is
- returned in `pa_number'.
-
- IS_FLOAT indicates that a PA-89 FP register number should be
- parsed; A `l' or `r' suffix is checked for if but 2 of IS_FLOAT is
- not set.
-
- pa_parse_number can not handle negative constants and will fail
- horribly if it is passed such a constant. */
-
-static int
-pa_parse_number (s, is_float)
- char **s;
- int is_float;
-{
- int num;
- char *name;
- char c;
- symbolS *sym;
- int status;
- char *p = *s;
- bfd_boolean have_prefix;
-
- /* Skip whitespace before the number. */
- while (*p == ' ' || *p == '\t')
- p = p + 1;
-
- pa_number = -1;
- have_prefix = 0;
- num = 0;
- if (!strict && ISDIGIT (*p))
- {
- /* Looks like a number. */
-
- if (*p == '0' && (*(p + 1) == 'x' || *(p + 1) == 'X'))
- {
- /* The number is specified in hex. */
- p += 2;
- while (ISDIGIT (*p) || ((*p >= 'a') && (*p <= 'f'))
- || ((*p >= 'A') && (*p <= 'F')))
- {
- if (ISDIGIT (*p))
- num = num * 16 + *p - '0';
- else if (*p >= 'a' && *p <= 'f')
- num = num * 16 + *p - 'a' + 10;
- else
- num = num * 16 + *p - 'A' + 10;
- ++p;
- }
- }
- else
- {
- /* The number is specified in decimal. */
- while (ISDIGIT (*p))
- {
- num = num * 10 + *p - '0';
- ++p;
- }
- }
-
- pa_number = num;
-
- /* Check for a `l' or `r' suffix. */
- if (is_float)
- {
- pa_number += FP_REG_BASE;
- if (! (is_float & 2))
- {
- if (IS_R_SELECT (p))
- {
- pa_number += FP_REG_RSEL;
- ++p;
- }
- else if (IS_L_SELECT (p))
+ /* Also handle allocation of a fixup to hold the unwind
+ information when the label appears after the proc/procend. */
+ if (within_entry_exit)
{
- ++p;
- }
- }
- }
- }
- else if (*p == '%')
- {
- /* The number might be a predefined register. */
- have_prefix = 1;
- name = p;
- p++;
- c = *p;
- /* Tege hack: Special case for general registers as the general
- code makes a binary search with case translation, and is VERY
- slow. */
- if (c == 'r')
- {
- p++;
- if (*p == 'e' && *(p + 1) == 't'
- && (*(p + 2) == '0' || *(p + 2) == '1'))
- {
- p += 2;
- num = *p - '0' + 28;
- p++;
- }
- else if (*p == 'p')
- {
- num = 2;
- p++;
- }
- else if (!ISDIGIT (*p))
- {
- if (print_errors)
- as_bad (_("Undefined register: '%s'."), name);
- num = -1;
- }
- else
- {
- do
- num = num * 10 + *p++ - '0';
- while (ISDIGIT (*p));
- }
- }
- else
- {
- /* Do a normal register search. */
- while (is_part_of_name (c))
- {
- p = p + 1;
- c = *p;
- }
- *p = 0;
- status = reg_name_search (name);
- if (status >= 0)
- num = status;
- else
- {
- if (print_errors)
- as_bad (_("Undefined register: '%s'."), name);
- num = -1;
- }
- *p = c;
- }
+ char *where;
+ unsigned int u;
- pa_number = num;
- }
- else
- {
- /* And finally, it could be a symbol in the absolute section which
- is effectively a constant, or a register alias symbol. */
- name = p;
- c = *p;
- while (is_part_of_name (c))
- {
- p = p + 1;
- c = *p;
- }
- *p = 0;
- if ((sym = symbol_find (name)) != NULL)
- {
- if (S_GET_SEGMENT (sym) == reg_section)
- {
- num = S_GET_VALUE (sym);
- /* Well, we don't really have one, but we do have a
- register, so... */
- have_prefix = TRUE;
- }
- else if (S_GET_SEGMENT (sym) == &bfd_abs_section)
- num = S_GET_VALUE (sym);
- else if (!strict)
- {
- if (print_errors)
- as_bad (_("Non-absolute symbol: '%s'."), name);
- num = -1;
+ where = frag_more (0);
+ u = UNWIND_LOW32 (&last_call_info->ci_unwind.descriptor);
+ fix_new_hppa (frag_now, where - frag_now->fr_literal, 0,
+ NULL, (offsetT) 0, NULL,
+ 0, R_HPPA_ENTRY, e_fsel, 0, 0, u);
+ }
+#endif
}
- }
- else if (!strict)
- {
- /* There is where we'd come for an undefined symbol
- or for an empty string. For an empty string we
- will return zero. That's a concession made for
- compatibility with the braindamaged HP assemblers. */
- if (*name == 0)
- num = 0;
else
- {
- if (print_errors)
- as_bad (_("Undefined absolute constant: '%s'."), name);
- num = -1;
- }
- }
- *p = c;
-
- pa_number = num;
- }
-
- if (!strict || have_prefix)
- {
- *s = p;
- return 1;
- }
- return 0;
-}
-
-#define REG_NAME_CNT (sizeof (pre_defined_registers) / sizeof (struct pd_reg))
-
-/* Given NAME, find the register number associated with that name, return
- the integer value associated with the given name or -1 on failure. */
-
-static int
-reg_name_search (name)
- char *name;
-{
- int middle, low, high;
- int cmp;
-
- low = 0;
- high = REG_NAME_CNT - 1;
-
- do
- {
- middle = (low + high) / 2;
- cmp = strcasecmp (name, pre_defined_registers[middle].name);
- if (cmp < 0)
- high = middle - 1;
- else if (cmp > 0)
- low = middle + 1;
- else
- return pre_defined_registers[middle].value;
- }
- while (low <= high);
-
- return -1;
-}
-
-/* Return nonzero if the given INSN and L/R information will require
- a new PA-1.1 opcode. */
-
-static int
-need_pa11_opcode ()
-{
- if ((pa_number & FP_REG_RSEL) != 0
- && !(the_insn.fpof1 == DBL && the_insn.fpof2 == DBL))
- {
- /* If this instruction is specific to a particular architecture,
- then set a new architecture. */
- if (bfd_get_mach (stdoutput) < pa11)
- {
- if (!bfd_set_arch_mach (stdoutput, bfd_arch_hppa, pa11))
- as_warn (_("could not update architecture and machine"));
- }
- return TRUE;
- }
- else
- return FALSE;
-}
-
-/* Parse a condition for a fcmp instruction. Return the numerical
- code associated with the condition. */
-
-static int
-pa_parse_fp_cmp_cond (s)
- char **s;
-{
- int cond, i;
-
- cond = 0;
-
- for (i = 0; i < 32; i++)
- {
- if (strncasecmp (*s, fp_cond_map[i].string,
- strlen (fp_cond_map[i].string)) == 0)
- {
- cond = fp_cond_map[i].cond;
- *s += strlen (fp_cond_map[i].string);
- /* If not a complete match, back up the input string and
- report an error. */
- if (**s != ' ' && **s != '\t')
- {
- *s -= strlen (fp_cond_map[i].string);
- break;
- }
- while (**s == ' ' || **s == '\t')
- *s = *s + 1;
- return cond;
- }
- }
-
- as_bad (_("Invalid FP Compare Condition: %s"), *s);
-
- /* Advance over the bogus completer. */
- while (**s != ',' && **s != ' ' && **s != '\t')
- *s += 1;
-
- return 0;
-}
-
-/* Parse a graphics test complete for ftest. */
-
-static int
-pa_parse_ftest_gfx_completer (s)
- char **s;
-{
- int value;
-
- value = 0;
- if (strncasecmp (*s, "acc8", 4) == 0)
- {
- value = 5;
- *s += 4;
- }
- else if (strncasecmp (*s, "acc6", 4) == 0)
- {
- value = 9;
- *s += 4;
- }
- else if (strncasecmp (*s, "acc4", 4) == 0)
- {
- value = 13;
- *s += 4;
- }
- else if (strncasecmp (*s, "acc2", 4) == 0)
- {
- value = 17;
- *s += 4;
- }
- else if (strncasecmp (*s, "acc", 3) == 0)
- {
- value = 1;
- *s += 3;
- }
- else if (strncasecmp (*s, "rej8", 4) == 0)
- {
- value = 6;
- *s += 4;
- }
- else if (strncasecmp (*s, "rej", 3) == 0)
- {
- value = 2;
- *s += 3;
- }
- else
- {
- value = 0;
- as_bad (_("Invalid FTEST completer: %s"), *s);
- }
-
- return value;
-}
-
-/* Parse an FP operand format completer returning the completer
- type. */
-
-static fp_operand_format
-pa_parse_fp_cnv_format (s)
- char **s;
-{
- int format;
-
- format = SGL;
- if (**s == ',')
- {
- *s += 1;
- if (strncasecmp (*s, "sgl", 3) == 0)
- {
- format = SGL;
- *s += 4;
- }
- else if (strncasecmp (*s, "dbl", 3) == 0)
- {
- format = DBL;
- *s += 4;
- }
- else if (strncasecmp (*s, "quad", 4) == 0)
- {
- format = QUAD;
- *s += 5;
- }
- else if (strncasecmp (*s, "w", 1) == 0)
- {
- format = W;
- *s += 2;
- }
- else if (strncasecmp (*s, "uw", 2) == 0)
- {
- format = UW;
- *s += 3;
- }
- else if (strncasecmp (*s, "dw", 2) == 0)
- {
- format = DW;
- *s += 3;
- }
- else if (strncasecmp (*s, "udw", 3) == 0)
- {
- format = UDW;
- *s += 4;
- }
- else if (strncasecmp (*s, "qw", 2) == 0)
- {
- format = QW;
- *s += 3;
- }
- else if (strncasecmp (*s, "uqw", 3) == 0)
- {
- format = UQW;
- *s += 4;
- }
- else
- {
- format = ILLEGAL_FMT;
- as_bad (_("Invalid FP Operand Format: %3s"), *s);
- }
- }
-
- return format;
-}
-
-/* Parse an FP operand format completer returning the completer
- type. */
-
-static fp_operand_format
-pa_parse_fp_format (s)
- char **s;
-{
- int format;
-
- format = SGL;
- if (**s == ',')
- {
- *s += 1;
- if (strncasecmp (*s, "sgl", 3) == 0)
- {
- format = SGL;
- *s += 4;
- }
- else if (strncasecmp (*s, "dbl", 3) == 0)
- {
- format = DBL;
- *s += 4;
- }
- else if (strncasecmp (*s, "quad", 4) == 0)
- {
- format = QUAD;
- *s += 5;
+ as_bad (_("Missing function name for .PROC (corrupted label chain)"));
}
else
- {
- format = ILLEGAL_FMT;
- as_bad (_("Invalid FP Operand Format: %3s"), *s);
- }
+ as_bad (_("Missing function name for .PROC"));
}
- return format;
-}
-
-/* Convert from a selector string into a selector type. */
-
-static int
-pa_chk_field_selector (str)
- char **str;
-{
- int middle, low, high;
- int cmp;
- char name[4];
+ /* Assemble the instruction. Results are saved into "the_insn". */
+ pa_ip (str);
- /* Read past any whitespace. */
- /* FIXME: should we read past newlines and formfeeds??? */
- while (**str == ' ' || **str == '\t' || **str == '\n' || **str == '\f')
- *str = *str + 1;
+ /* Get somewhere to put the assembled instruction. */
+ to = frag_more (4);
- if ((*str)[1] == '\'' || (*str)[1] == '%')
- name[0] = TOLOWER ((*str)[0]),
- name[1] = 0;
- else if ((*str)[2] == '\'' || (*str)[2] == '%')
- name[0] = TOLOWER ((*str)[0]),
- name[1] = TOLOWER ((*str)[1]),
- name[2] = 0;
- else if ((*str)[3] == '\'' || (*str)[3] == '%')
- name[0] = TOLOWER ((*str)[0]),
- name[1] = TOLOWER ((*str)[1]),
- name[2] = TOLOWER ((*str)[2]),
- name[3] = 0;
- else
- return e_fsel;
+ /* Output the opcode. */
+ md_number_to_chars (to, the_insn.opcode, 4);
- low = 0;
- high = sizeof (selector_table) / sizeof (struct selector_entry) - 1;
+ /* If necessary output more stuff. */
+ if (the_insn.reloc != R_HPPA_NONE)
+ fix_new_hppa (frag_now, (to - frag_now->fr_literal), 4, NULL,
+ (offsetT) 0, &the_insn.exp, the_insn.pcrel,
+ the_insn.reloc, the_insn.field_selector,
+ the_insn.format, the_insn.arg_reloc, 0);
- do
- {
- middle = (low + high) / 2;
- cmp = strcmp (name, selector_table[middle].prefix);
- if (cmp < 0)
- high = middle - 1;
- else if (cmp > 0)
- low = middle + 1;
- else
- {
- *str += strlen (name) + 1;
-#ifndef OBJ_SOM
- if (selector_table[middle].field_selector == e_nsel)
- return e_fsel;
+#ifdef OBJ_ELF
+ dwarf2_emit_insn (4);
#endif
- return selector_table[middle].field_selector;
- }
- }
- while (low <= high);
-
- return e_fsel;
-}
-
-/* Mark (via expr_end) the end of an expression (I think). FIXME. */
-
-static int
-get_expression (str)
- char *str;
-{
- char *save_in;
- asection *seg;
-
- save_in = input_line_pointer;
- input_line_pointer = str;
- seg = expression (&the_insn.exp);
- if (!(seg == absolute_section
- || seg == undefined_section
- || SEG_NORMAL (seg)))
- {
- as_warn (_("Bad segment in expression."));
- expr_end = input_line_pointer;
- input_line_pointer = save_in;
- return 1;
- }
- expr_end = input_line_pointer;
- input_line_pointer = save_in;
- return 0;
-}
-
-/* Mark (via expr_end) the end of an absolute expression. FIXME. */
-static int
-pa_get_absolute_expression (insn, strp)
- struct pa_it *insn;
- char **strp;
-{
- char *save_in;
-
- insn->field_selector = pa_chk_field_selector (strp);
- save_in = input_line_pointer;
- input_line_pointer = *strp;
- expression (&insn->exp);
- /* This is not perfect, but is a huge improvement over doing nothing.
-
- The PA assembly syntax is ambiguous in a variety of ways. Consider
- this string "4 %r5" Is that the number 4 followed by the register
- r5, or is that 4 MOD r5?
-
- If we get a modulo expression when looking for an absolute, we try
- again cutting off the input string at the first whitespace character. */
- if (insn->exp.X_op == O_modulus)
- {
- char *s, c;
- int retval;
-
- input_line_pointer = *strp;
- s = *strp;
- while (*s != ',' && *s != ' ' && *s != '\t')
- s++;
-
- c = *s;
- *s = 0;
-
- retval = pa_get_absolute_expression (insn, strp);
-
- input_line_pointer = save_in;
- *s = c;
- return evaluate_absolute (insn);
- }
- /* When in strict mode we have a non-match, fix up the pointers
- and return to our caller. */
- if (insn->exp.X_op != O_constant && strict)
- {
- expr_end = input_line_pointer;
- input_line_pointer = save_in;
- return 0;
- }
- if (insn->exp.X_op != O_constant)
- {
- as_bad (_("Bad segment (should be absolute)."));
- expr_end = input_line_pointer;
- input_line_pointer = save_in;
- return 0;
- }
- expr_end = input_line_pointer;
- input_line_pointer = save_in;
- return evaluate_absolute (insn);
-}
-
-/* Evaluate an absolute expression EXP which may be modified by
- the selector FIELD_SELECTOR. Return the value of the expression. */
-static int
-evaluate_absolute (insn)
- struct pa_it *insn;
-{
- offsetT value;
- expressionS exp;
- int field_selector = insn->field_selector;
-
- exp = insn->exp;
- value = exp.X_add_number;
-
- return hppa_field_adjust (0, value, field_selector);
-}
-
-/* Given an argument location specification return the associated
- argument location number. */
-
-static unsigned int
-pa_build_arg_reloc (type_name)
- char *type_name;
-{
-
- if (strncasecmp (type_name, "no", 2) == 0)
- return 0;
- if (strncasecmp (type_name, "gr", 2) == 0)
- return 1;
- else if (strncasecmp (type_name, "fr", 2) == 0)
- return 2;
- else if (strncasecmp (type_name, "fu", 2) == 0)
- return 3;
- else
- as_bad (_("Invalid argument location: %s\n"), type_name);
-
- return 0;
-}
-
-/* Encode and return an argument relocation specification for
- the given register in the location specified by arg_reloc. */
-
-static unsigned int
-pa_align_arg_reloc (reg, arg_reloc)
- unsigned int reg;
- unsigned int arg_reloc;
-{
- unsigned int new_reloc;
-
- new_reloc = arg_reloc;
- switch (reg)
- {
- case 0:
- new_reloc <<= 8;
- break;
- case 1:
- new_reloc <<= 6;
- break;
- case 2:
- new_reloc <<= 4;
- break;
- case 3:
- new_reloc <<= 2;
- break;
- default:
- as_bad (_("Invalid argument description: %d"), reg);
- }
-
- return new_reloc;
-}
-
-/* Parse a PA nullification completer (,n). Return nonzero if the
- completer was found; return zero if no completer was found. */
-
-static int
-pa_parse_nullif (s)
- char **s;
-{
- int nullif;
-
- nullif = 0;
- if (**s == ',')
- {
- *s = *s + 1;
- if (strncasecmp (*s, "n", 1) == 0)
- nullif = 1;
- else
- {
- as_bad (_("Invalid Nullification: (%c)"), **s);
- nullif = 0;
- }
- *s = *s + 1;
- }
-
- return nullif;
-}
-
-/* Parse a non-negated compare/subtract completer returning the
- number (for encoding in instructions) of the given completer. */
-
-static int
-pa_parse_nonneg_cmpsub_cmpltr (s)
- char **s;
-{
- int cmpltr;
- char *name = *s + 1;
- char c;
- char *save_s = *s;
- int nullify = 0;
-
- cmpltr = 0;
- if (**s == ',')
- {
- *s += 1;
- while (**s != ',' && **s != ' ' && **s != '\t')
- *s += 1;
- c = **s;
- **s = 0x00;
-
- if (strcmp (name, "=") == 0)
- {
- cmpltr = 1;
- }
- else if (strcmp (name, "<") == 0)
- {
- cmpltr = 2;
- }
- else if (strcmp (name, "<=") == 0)
- {
- cmpltr = 3;
- }
- else if (strcmp (name, "<<") == 0)
- {
- cmpltr = 4;
- }
- else if (strcmp (name, "<<=") == 0)
- {
- cmpltr = 5;
- }
- else if (strcasecmp (name, "sv") == 0)
- {
- cmpltr = 6;
- }
- else if (strcasecmp (name, "od") == 0)
- {
- cmpltr = 7;
- }
- /* If we have something like addb,n then there is no condition
- completer. */
- else if (strcasecmp (name, "n") == 0)
- {
- cmpltr = 0;
- nullify = 1;
- }
- else
- {
- cmpltr = -1;
- }
- **s = c;
- }
-
- /* Reset pointers if this was really a ,n for a branch instruction. */
- if (nullify)
- *s = save_s;
-
- return cmpltr;
-}
-
-/* Parse a negated compare/subtract completer returning the
- number (for encoding in instructions) of the given completer. */
-
-static int
-pa_parse_neg_cmpsub_cmpltr (s)
- char **s;
-{
- int cmpltr;
- char *name = *s + 1;
- char c;
- char *save_s = *s;
- int nullify = 0;
-
- cmpltr = 0;
- if (**s == ',')
- {
- *s += 1;
- while (**s != ',' && **s != ' ' && **s != '\t')
- *s += 1;
- c = **s;
- **s = 0x00;
-
- if (strcasecmp (name, "tr") == 0)
- {
- cmpltr = 0;
- }
- else if (strcmp (name, "<>") == 0)
- {
- cmpltr = 1;
- }
- else if (strcmp (name, ">=") == 0)
- {
- cmpltr = 2;
- }
- else if (strcmp (name, ">") == 0)
- {
- cmpltr = 3;
- }
- else if (strcmp (name, ">>=") == 0)
- {
- cmpltr = 4;
- }
- else if (strcmp (name, ">>") == 0)
- {
- cmpltr = 5;
- }
- else if (strcasecmp (name, "nsv") == 0)
- {
- cmpltr = 6;
- }
- else if (strcasecmp (name, "ev") == 0)
- {
- cmpltr = 7;
- }
- /* If we have something like addb,n then there is no condition
- completer. */
- else if (strcasecmp (name, "n") == 0)
- {
- cmpltr = 0;
- nullify = 1;
- }
- else
- {
- cmpltr = -1;
- }
- **s = c;
- }
-
- /* Reset pointers if this was really a ,n for a branch instruction. */
- if (nullify)
- *s = save_s;
-
- return cmpltr;
-}
-
-/* Parse a 64 bit compare and branch completer returning the number (for
- encoding in instructions) of the given completer.
-
- Nonnegated comparisons are returned as 0-7, negated comparisons are
- returned as 8-15. */
-
-static int
-pa_parse_cmpb_64_cmpltr (s)
- char **s;
-{
- int cmpltr;
- char *name = *s + 1;
- char c;
-
- cmpltr = -1;
- if (**s == ',')
- {
- *s += 1;
- while (**s != ',' && **s != ' ' && **s != '\t')
- *s += 1;
- c = **s;
- **s = 0x00;
-
- if (strcmp (name, "*") == 0)
- {
- cmpltr = 0;
- }
- else if (strcmp (name, "*=") == 0)
- {
- cmpltr = 1;
- }
- else if (strcmp (name, "*<") == 0)
- {
- cmpltr = 2;
- }
- else if (strcmp (name, "*<=") == 0)
- {
- cmpltr = 3;
- }
- else if (strcmp (name, "*<<") == 0)
- {
- cmpltr = 4;
- }
- else if (strcmp (name, "*<<=") == 0)
- {
- cmpltr = 5;
- }
- else if (strcasecmp (name, "*sv") == 0)
- {
- cmpltr = 6;
- }
- else if (strcasecmp (name, "*od") == 0)
- {
- cmpltr = 7;
- }
- else if (strcasecmp (name, "*tr") == 0)
- {
- cmpltr = 8;
- }
- else if (strcmp (name, "*<>") == 0)
- {
- cmpltr = 9;
- }
- else if (strcmp (name, "*>=") == 0)
- {
- cmpltr = 10;
- }
- else if (strcmp (name, "*>") == 0)
- {
- cmpltr = 11;
- }
- else if (strcmp (name, "*>>=") == 0)
- {
- cmpltr = 12;
- }
- else if (strcmp (name, "*>>") == 0)
- {
- cmpltr = 13;
- }
- else if (strcasecmp (name, "*nsv") == 0)
- {
- cmpltr = 14;
- }
- else if (strcasecmp (name, "*ev") == 0)
- {
- cmpltr = 15;
- }
- else
- {
- cmpltr = -1;
- }
- **s = c;
- }
-
- return cmpltr;
-}
-
-/* Parse a 64 bit compare immediate and branch completer returning the number
- (for encoding in instructions) of the given completer. */
-
-static int
-pa_parse_cmpib_64_cmpltr (s)
- char **s;
-{
- int cmpltr;
- char *name = *s + 1;
- char c;
-
- cmpltr = -1;
- if (**s == ',')
- {
- *s += 1;
- while (**s != ',' && **s != ' ' && **s != '\t')
- *s += 1;
- c = **s;
- **s = 0x00;
-
- if (strcmp (name, "*<<") == 0)
- {
- cmpltr = 0;
- }
- else if (strcmp (name, "*=") == 0)
- {
- cmpltr = 1;
- }
- else if (strcmp (name, "*<") == 0)
- {
- cmpltr = 2;
- }
- else if (strcmp (name, "*<=") == 0)
- {
- cmpltr = 3;
- }
- else if (strcmp (name, "*>>=") == 0)
- {
- cmpltr = 4;
- }
- else if (strcmp (name, "*<>") == 0)
- {
- cmpltr = 5;
- }
- else if (strcasecmp (name, "*>=") == 0)
- {
- cmpltr = 6;
- }
- else if (strcasecmp (name, "*>") == 0)
- {
- cmpltr = 7;
- }
- else
- {
- cmpltr = -1;
- }
- **s = c;
- }
-
- return cmpltr;
-}
-
-/* Parse a non-negated addition completer returning the number
- (for encoding in instructions) of the given completer. */
-
-static int
-pa_parse_nonneg_add_cmpltr (s)
- char **s;
-{
- int cmpltr;
- char *name = *s + 1;
- char c;
- char *save_s = *s;
- int nullify = 0;
-
- cmpltr = 0;
- if (**s == ',')
- {
- *s += 1;
- while (**s != ',' && **s != ' ' && **s != '\t')
- *s += 1;
- c = **s;
- **s = 0x00;
- if (strcmp (name, "=") == 0)
- {
- cmpltr = 1;
- }
- else if (strcmp (name, "<") == 0)
- {
- cmpltr = 2;
- }
- else if (strcmp (name, "<=") == 0)
- {
- cmpltr = 3;
- }
- else if (strcasecmp (name, "nuv") == 0)
- {
- cmpltr = 4;
- }
- else if (strcasecmp (name, "znv") == 0)
- {
- cmpltr = 5;
- }
- else if (strcasecmp (name, "sv") == 0)
- {
- cmpltr = 6;
- }
- else if (strcasecmp (name, "od") == 0)
- {
- cmpltr = 7;
- }
- /* If we have something like addb,n then there is no condition
- completer. */
- else if (strcasecmp (name, "n") == 0)
- {
- cmpltr = 0;
- nullify = 1;
- }
- else
- {
- cmpltr = -1;
- }
- **s = c;
- }
-
- /* Reset pointers if this was really a ,n for a branch instruction. */
- if (nullify)
- *s = save_s;
-
- return cmpltr;
-}
-
-/* Parse a negated addition completer returning the number
- (for encoding in instructions) of the given completer. */
-
-static int
-pa_parse_neg_add_cmpltr (s)
- char **s;
-{
- int cmpltr;
- char *name = *s + 1;
- char c;
- char *save_s = *s;
- int nullify = 0;
-
- cmpltr = 0;
- if (**s == ',')
- {
- *s += 1;
- while (**s != ',' && **s != ' ' && **s != '\t')
- *s += 1;
- c = **s;
- **s = 0x00;
- if (strcasecmp (name, "tr") == 0)
- {
- cmpltr = 0;
- }
- else if (strcmp (name, "<>") == 0)
- {
- cmpltr = 1;
- }
- else if (strcmp (name, ">=") == 0)
- {
- cmpltr = 2;
- }
- else if (strcmp (name, ">") == 0)
- {
- cmpltr = 3;
- }
- else if (strcasecmp (name, "uv") == 0)
- {
- cmpltr = 4;
- }
- else if (strcasecmp (name, "vnz") == 0)
- {
- cmpltr = 5;
- }
- else if (strcasecmp (name, "nsv") == 0)
- {
- cmpltr = 6;
- }
- else if (strcasecmp (name, "ev") == 0)
- {
- cmpltr = 7;
- }
- /* If we have something like addb,n then there is no condition
- completer. */
- else if (strcasecmp (name, "n") == 0)
- {
- cmpltr = 0;
- nullify = 1;
- }
- else
- {
- cmpltr = -1;
- }
- **s = c;
- }
-
- /* Reset pointers if this was really a ,n for a branch instruction. */
- if (nullify)
- *s = save_s;
-
- return cmpltr;
-}
-
-/* Parse a 64 bit wide mode add and branch completer returning the number (for
- encoding in instructions) of the given completer. */
-
-static int
-pa_parse_addb_64_cmpltr (s)
- char **s;
-{
- int cmpltr;
- char *name = *s + 1;
- char c;
- char *save_s = *s;
- int nullify = 0;
-
- cmpltr = 0;
- if (**s == ',')
- {
- *s += 1;
- while (**s != ',' && **s != ' ' && **s != '\t')
- *s += 1;
- c = **s;
- **s = 0x00;
- if (strcmp (name, "=") == 0)
- {
- cmpltr = 1;
- }
- else if (strcmp (name, "<") == 0)
- {
- cmpltr = 2;
- }
- else if (strcmp (name, "<=") == 0)
- {
- cmpltr = 3;
- }
- else if (strcasecmp (name, "nuv") == 0)
- {
- cmpltr = 4;
- }
- else if (strcasecmp (name, "*=") == 0)
- {
- cmpltr = 5;
- }
- else if (strcasecmp (name, "*<") == 0)
- {
- cmpltr = 6;
- }
- else if (strcasecmp (name, "*<=") == 0)
- {
- cmpltr = 7;
- }
- else if (strcmp (name, "tr") == 0)
- {
- cmpltr = 8;
- }
- else if (strcmp (name, "<>") == 0)
- {
- cmpltr = 9;
- }
- else if (strcmp (name, ">=") == 0)
- {
- cmpltr = 10;
- }
- else if (strcmp (name, ">") == 0)
- {
- cmpltr = 11;
- }
- else if (strcasecmp (name, "uv") == 0)
- {
- cmpltr = 12;
- }
- else if (strcasecmp (name, "*<>") == 0)
- {
- cmpltr = 13;
- }
- else if (strcasecmp (name, "*>=") == 0)
- {
- cmpltr = 14;
- }
- else if (strcasecmp (name, "*>") == 0)
- {
- cmpltr = 15;
- }
- /* If we have something like addb,n then there is no condition
- completer. */
- else if (strcasecmp (name, "n") == 0)
- {
- cmpltr = 0;
- nullify = 1;
- }
- else
- {
- cmpltr = -1;
- }
- **s = c;
- }
-
- /* Reset pointers if this was really a ,n for a branch instruction. */
- if (nullify)
- *s = save_s;
-
- return cmpltr;
}
#ifdef OBJ_SOM
/* Handle an alignment directive. Special so that we can update the
alignment of the subspace if necessary. */
static void
-pa_align (bytes)
- int bytes;
+pa_align (int bytes)
{
/* We must have a valid space and subspace. */
pa_check_current_space_and_subspace ();
@@ -5950,8 +5815,7 @@ pa_align (bytes)
/* Handle a .BLOCK type pseudo-op. */
static void
-pa_block (z)
- int z ATTRIBUTE_UNUSED;
+pa_block (int z ATTRIBUTE_UNUSED)
{
unsigned int temp_size;
@@ -5981,8 +5845,7 @@ pa_block (z)
/* Handle a .begin_brtab and .end_brtab pseudo-op. */
static void
-pa_brtab (begin)
- int begin ATTRIBUTE_UNUSED;
+pa_brtab (int begin ATTRIBUTE_UNUSED)
{
#ifdef OBJ_SOM
@@ -6002,8 +5865,7 @@ pa_brtab (begin)
/* Handle a .begin_try and .end_try pseudo-op. */
static void
-pa_try (begin)
- int begin ATTRIBUTE_UNUSED;
+pa_try (int begin ATTRIBUTE_UNUSED)
{
#ifdef OBJ_SOM
expressionS exp;
@@ -6024,29 +5886,11 @@ pa_try (begin)
demand_empty_rest_of_line ();
}
-/* Handle a .CALL pseudo-op. This involves storing away information
- about where arguments are to be found so the linker can detect
- (and correct) argument location mismatches between caller and callee. */
-
-static void
-pa_call (unused)
- int unused ATTRIBUTE_UNUSED;
-{
-#ifdef OBJ_SOM
- /* We must have a valid space and subspace. */
- pa_check_current_space_and_subspace ();
-#endif
-
- pa_call_args (&last_call_desc);
- demand_empty_rest_of_line ();
-}
-
/* Do the dirty work of building a call descriptor which describes
where the caller placed arguments to a function call. */
static void
-pa_call_args (call_desc)
- struct call_desc *call_desc;
+pa_call_args (struct call_desc *call_desc)
{
char *name, c, *p;
unsigned int temp, arg_reloc;
@@ -6089,24 +5933,38 @@ pa_call_args (call_desc)
}
}
+/* Handle a .CALL pseudo-op. This involves storing away information
+ about where arguments are to be found so the linker can detect
+ (and correct) argument location mismatches between caller and callee. */
+
+static void
+pa_call (int unused ATTRIBUTE_UNUSED)
+{
+#ifdef OBJ_SOM
+ /* We must have a valid space and subspace. */
+ pa_check_current_space_and_subspace ();
+#endif
+
+ pa_call_args (&last_call_desc);
+ demand_empty_rest_of_line ();
+}
+
/* Return TRUE if FRAG1 and FRAG2 are the same. */
-static int
-is_same_frag (frag1, frag2)
- fragS *frag1;
- fragS *frag2;
+static bfd_boolean
+is_same_frag (fragS *frag1, fragS *frag2)
{
if (frag1 == NULL)
- return (FALSE);
+ return FALSE;
else if (frag2 == NULL)
- return (FALSE);
+ return FALSE;
else if (frag1 == frag2)
- return (TRUE);
+ return TRUE;
else if (frag2->fr_type == rs_fill && frag2->fr_fix == 0)
return (is_same_frag (frag1, frag2->fr_next));
else
- return (FALSE);
+ return FALSE;
}
#ifdef OBJ_ELF
@@ -6116,8 +5974,7 @@ is_same_frag (frag1, frag2)
of the unwind spaces. */
static void
-pa_build_unwind_subspace (call_info)
- struct call_info *call_info;
+pa_build_unwind_subspace (struct call_info *call_info)
{
asection *seg, *save_seg;
subsegT save_subseg;
@@ -6189,8 +6046,7 @@ pa_build_unwind_subspace (call_info)
.ENTER and .LEAVE. */
static void
-pa_callinfo (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_callinfo (int unused ATTRIBUTE_UNUSED)
{
char *name, c, *p;
int temp;
@@ -6332,9 +6188,9 @@ pa_callinfo (unused)
#if !(defined (OBJ_ELF) && (defined (TE_LINUX) || defined (TE_NetBSD)))
/* Switch to the text space. Like s_text, but delete our
label when finished. */
+
static void
-pa_text (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_text (int unused ATTRIBUTE_UNUSED)
{
#ifdef OBJ_SOM
current_space = is_defined_space ("$TEXT$");
@@ -6347,9 +6203,9 @@ pa_text (unused)
}
/* Switch to the data space. As usual delete our label. */
+
static void
-pa_data (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_data (int unused ATTRIBUTE_UNUSED)
{
#ifdef OBJ_SOM
current_space = is_defined_space ("$PRIVATE$");
@@ -6381,8 +6237,7 @@ pa_data (unused)
This also makes error detection all but impossible. */
static void
-pa_comm (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_comm (int unused ATTRIBUTE_UNUSED)
{
unsigned int size;
symbolS *symbol;
@@ -6415,16 +6270,15 @@ pa_comm (unused)
/* Process a .END pseudo-op. */
static void
-pa_end (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_end (int unused ATTRIBUTE_UNUSED)
{
demand_empty_rest_of_line ();
}
/* Process a .ENTER pseudo-op. This is not supported. */
+
static void
-pa_enter (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_enter (int unused ATTRIBUTE_UNUSED)
{
#ifdef OBJ_SOM
/* We must have a valid space and subspace. */
@@ -6437,9 +6291,9 @@ pa_enter (unused)
/* Process a .ENTRY pseudo-op. .ENTRY marks the beginning of the
procedure. */
+
static void
-pa_entry (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_entry (int unused ATTRIBUTE_UNUSED)
{
#ifdef OBJ_SOM
/* We must have a valid space and subspace. */
@@ -6486,10 +6340,9 @@ pa_entry (unused)
static int fudge_reg_expressions;
int
-hppa_force_reg_syms_absolute (resultP, op, rightP)
- expressionS *resultP;
- operatorT op ATTRIBUTE_UNUSED;
- expressionS *rightP;
+hppa_force_reg_syms_absolute (expressionS *resultP,
+ operatorT op ATTRIBUTE_UNUSED,
+ expressionS *rightP)
{
if (fudge_reg_expressions
&& rightP->X_op == O_register
@@ -6504,8 +6357,7 @@ hppa_force_reg_syms_absolute (resultP, op, rightP)
/* Handle a .EQU pseudo-op. */
static void
-pa_equ (reg)
- int reg;
+pa_equ (int reg)
{
label_symbol_struct *label_symbol = pa_get_label ();
symbolS *symbol;
@@ -6553,12 +6405,75 @@ pa_equ (reg)
demand_empty_rest_of_line ();
}
+#ifdef OBJ_ELF
+/* Mark the end of a function so that it's possible to compute
+ the size of the function in elf_hppa_final_processing. */
+
+static void
+hppa_elf_mark_end_of_function (void)
+{
+ /* ELF does not have EXIT relocations. All we do is create a
+ temporary symbol marking the end of the function. */
+ char *name;
+
+ if (last_call_info == NULL || last_call_info->start_symbol == NULL)
+ {
+ /* We have already warned about a missing label,
+ or other problems. */
+ return;
+ }
+
+ name = xmalloc (strlen ("L$\001end_")
+ + strlen (S_GET_NAME (last_call_info->start_symbol))
+ + 1);
+ if (name)
+ {
+ symbolS *symbolP;
+
+ strcpy (name, "L$\001end_");
+ strcat (name, S_GET_NAME (last_call_info->start_symbol));
+
+ /* If we have a .exit followed by a .procend, then the
+ symbol will have already been defined. */
+ symbolP = symbol_find (name);
+ if (symbolP)
+ {
+ /* The symbol has already been defined! This can
+ happen if we have a .exit followed by a .procend.
+
+ This is *not* an error. All we want to do is free
+ the memory we just allocated for the name and continue. */
+ xfree (name);
+ }
+ else
+ {
+ /* symbol value should be the offset of the
+ last instruction of the function */
+ symbolP = symbol_new (name, now_seg, (valueT) (frag_now_fix () - 4),
+ frag_now);
+
+ assert (symbolP);
+ S_CLEAR_EXTERNAL (symbolP);
+ symbol_table_insert (symbolP);
+ }
+
+ if (symbolP)
+ last_call_info->end_symbol = symbolP;
+ else
+ as_bad (_("Symbol '%s' could not be created."), name);
+
+ }
+ else
+ as_bad (_("No memory for symbol name."));
+}
+#endif
+
/* Helper function. Does processing for the end of a function. This
usually involves creating some relocations or building special
symbols to mark the end of the function. */
static void
-process_exit ()
+process_exit (void)
{
char *where;
@@ -6590,8 +6505,7 @@ process_exit ()
/* Process a .EXIT pseudo-op. */
static void
-pa_exit (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_exit (int unused ATTRIBUTE_UNUSED)
{
#ifdef OBJ_SOM
/* We must have a valid space and subspace. */
@@ -6618,54 +6532,10 @@ pa_exit (unused)
demand_empty_rest_of_line ();
}
-/* Process a .EXPORT directive. This makes functions external
- and provides information such as argument relocation entries
- to callers. */
-
-static void
-pa_export (unused)
- int unused ATTRIBUTE_UNUSED;
-{
- char *name, c, *p;
- symbolS *symbol;
-
- name = input_line_pointer;
- c = get_symbol_end ();
- /* Make sure the given symbol exists. */
- if ((symbol = symbol_find_or_make (name)) == NULL)
- {
- as_bad (_("Cannot define export symbol: %s\n"), name);
- p = input_line_pointer;
- *p = c;
- input_line_pointer++;
- }
- else
- {
- /* OK. Set the external bits and process argument relocations.
- For the HP, weak and global are not mutually exclusive.
- S_SET_EXTERNAL will not set BSF_GLOBAL if WEAK is set.
- Call S_SET_EXTERNAL to get the other processing. Manually
- set BSF_GLOBAL when we get back. */
- S_SET_EXTERNAL (symbol);
- symbol_get_bfdsym (symbol)->flags |= BSF_GLOBAL;
- p = input_line_pointer;
- *p = c;
- if (!is_end_of_statement ())
- {
- input_line_pointer++;
- pa_type_args (symbol, 1);
- }
- }
-
- demand_empty_rest_of_line ();
-}
-
/* Helper function to process arguments to a .EXPORT pseudo-op. */
static void
-pa_type_args (symbolP, is_export)
- symbolS *symbolP;
- int is_export;
+pa_type_args (symbolS *symbolP, int is_export)
{
char *name, c, *p;
unsigned int temp, arg_reloc;
@@ -6673,7 +6543,6 @@ pa_type_args (symbolP, is_export)
asymbol *bfdsym = symbol_get_bfdsym (symbolP);
if (strncasecmp (input_line_pointer, "absolute", 8) == 0)
-
{
input_line_pointer += 8;
bfdsym->flags &= ~BSF_FUNCTION;
@@ -6818,13 +6687,53 @@ pa_type_args (symbolP, is_export)
}
}
+/* Process a .EXPORT directive. This makes functions external
+ and provides information such as argument relocation entries
+ to callers. */
+
+static void
+pa_export (int unused ATTRIBUTE_UNUSED)
+{
+ char *name, c, *p;
+ symbolS *symbol;
+
+ name = input_line_pointer;
+ c = get_symbol_end ();
+ /* Make sure the given symbol exists. */
+ if ((symbol = symbol_find_or_make (name)) == NULL)
+ {
+ as_bad (_("Cannot define export symbol: %s\n"), name);
+ p = input_line_pointer;
+ *p = c;
+ input_line_pointer++;
+ }
+ else
+ {
+ /* OK. Set the external bits and process argument relocations.
+ For the HP, weak and global are not mutually exclusive.
+ S_SET_EXTERNAL will not set BSF_GLOBAL if WEAK is set.
+ Call S_SET_EXTERNAL to get the other processing. Manually
+ set BSF_GLOBAL when we get back. */
+ S_SET_EXTERNAL (symbol);
+ symbol_get_bfdsym (symbol)->flags |= BSF_GLOBAL;
+ p = input_line_pointer;
+ *p = c;
+ if (!is_end_of_statement ())
+ {
+ input_line_pointer++;
+ pa_type_args (symbol, 1);
+ }
+ }
+
+ demand_empty_rest_of_line ();
+}
+
/* Handle an .IMPORT pseudo-op. Any symbol referenced in a given
assembly file must either be defined in the assembly file, or
explicitly IMPORTED from another. */
static void
-pa_import (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_import (int unused ATTRIBUTE_UNUSED)
{
char *name, c, *p;
symbolS *symbol;
@@ -6875,8 +6784,7 @@ pa_import (unused)
/* Handle a .LABEL pseudo-op. */
static void
-pa_label (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_label (int unused ATTRIBUTE_UNUSED)
{
char *name, c, *p;
@@ -6905,8 +6813,7 @@ pa_label (unused)
/* Handle a .LEAVE pseudo-op. This is not supported yet. */
static void
-pa_leave (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_leave (int unused ATTRIBUTE_UNUSED)
{
#ifdef OBJ_SOM
/* We must have a valid space and subspace. */
@@ -6920,8 +6827,7 @@ pa_leave (unused)
/* Handle a .LEVEL pseudo-op. */
static void
-pa_level (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_level (int unused ATTRIBUTE_UNUSED)
{
char *level;
@@ -6961,8 +6867,7 @@ pa_level (unused)
/* Handle a .ORIGIN pseudo-op. */
static void
-pa_origin (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_origin (int unused ATTRIBUTE_UNUSED)
{
#ifdef OBJ_SOM
/* We must have a valid space and subspace. */
@@ -6977,8 +6882,7 @@ pa_origin (unused)
is for static functions. FIXME. Should share more code with .EXPORT. */
static void
-pa_param (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_param (int unused ATTRIBUTE_UNUSED)
{
char *name, c, *p;
symbolS *symbol;
@@ -7012,8 +6916,7 @@ pa_param (unused)
of a procedure from a syntactical point of view. */
static void
-pa_proc (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_proc (int unused ATTRIBUTE_UNUSED)
{
struct call_info *call_info;
@@ -7030,7 +6933,7 @@ pa_proc (unused)
within_procedure = TRUE;
/* Create another call_info structure. */
- call_info = (struct call_info *) xmalloc (sizeof (struct call_info));
+ call_info = xmalloc (sizeof (struct call_info));
if (!call_info)
as_fatal (_("Cannot allocate unwind descriptor\n"));
@@ -7082,10 +6985,8 @@ pa_proc (unused)
appropriate pseudo-ops were found within the procedure. */
static void
-pa_procend (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_procend (int unused ATTRIBUTE_UNUSED)
{
-
#ifdef OBJ_SOM
/* We must have a valid space and subspace. */
pa_check_current_space_and_subspace ();
@@ -7157,8 +7058,7 @@ pa_procend (unused)
return log2 (VALUE). Else return -1. */
static int
-exact_log2 (value)
- int value;
+exact_log2 (int value)
{
int shift = 0;
@@ -7174,7 +7074,7 @@ exact_log2 (value)
/* Check to make sure we have a valid space and subspace. */
static void
-pa_check_current_space_and_subspace ()
+pa_check_current_space_and_subspace (void)
{
if (current_space == NULL)
as_fatal (_("Not in a space.\n"));
@@ -7188,9 +7088,7 @@ pa_check_current_space_and_subspace ()
by the parameters to the .SPACE directive. */
static sd_chain_struct *
-pa_parse_space_stmt (space_name, create_flag)
- char *space_name;
- int create_flag;
+pa_parse_space_stmt (char *space_name, int create_flag)
{
char *name, *ptemp, c;
char loadable, defined, private, sort;
@@ -7198,7 +7096,7 @@ pa_parse_space_stmt (space_name, create_flag)
asection *seg = NULL;
sd_chain_struct *space;
- /* load default values */
+ /* Load default values. */
spnum = 0;
sort = 0;
loadable = TRUE;
@@ -7310,8 +7208,7 @@ pa_parse_space_stmt (space_name, create_flag)
given space, creating the new space if necessary. */
static void
-pa_space (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_space (int unused ATTRIBUTE_UNUSED)
{
char *name, c, *space_name, *save_s;
sd_chain_struct *sd_chain;
@@ -7430,8 +7327,7 @@ pa_space (unused)
/* Switch to a new space. (I think). FIXME. */
static void
-pa_spnum (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_spnum (int unused ATTRIBUTE_UNUSED)
{
char *name;
char c;
@@ -7460,8 +7356,7 @@ pa_spnum (unused)
they're broken up into subroutines. */
static void
-pa_subspace (create_new)
- int create_new;
+pa_subspace (int create_new)
{
char *name, *ss_name, c;
char loadable, code_only, comdat, common, dup_common, zero, sort;
@@ -7699,7 +7594,7 @@ pa_subspace (create_new)
/* Create default space and subspace dictionaries. */
static void
-pa_spaces_begin ()
+pa_spaces_begin (void)
{
int i;
@@ -7826,25 +7721,23 @@ pa_spaces_begin ()
by the given parameters. */
static sd_chain_struct *
-create_new_space (name, spnum, loadable, defined, private,
- sort, seg, user_defined)
- char *name;
- int spnum;
- int loadable ATTRIBUTE_UNUSED;
- int defined;
- int private;
- int sort;
- asection *seg;
- int user_defined;
+create_new_space (char *name,
+ int spnum,
+ int loadable ATTRIBUTE_UNUSED,
+ int defined,
+ int private,
+ int sort,
+ asection *seg,
+ int user_defined)
{
sd_chain_struct *chain_entry;
- chain_entry = (sd_chain_struct *) xmalloc (sizeof (sd_chain_struct));
+ chain_entry = xmalloc (sizeof (sd_chain_struct));
if (!chain_entry)
as_fatal (_("Out of memory: could not allocate new space chain entry: %s\n"),
name);
- SPACE_NAME (chain_entry) = (char *) xmalloc (strlen (name) + 1);
+ SPACE_NAME (chain_entry) = xmalloc (strlen (name) + 1);
strcpy (SPACE_NAME (chain_entry), name);
SPACE_DEFINED (chain_entry) = defined;
SPACE_USER_DEFINED (chain_entry) = user_defined;
@@ -7910,29 +7803,28 @@ create_new_space (name, spnum, loadable, defined, private,
order as defined by the SORT entries. */
static ssd_chain_struct *
-create_new_subspace (space, name, loadable, code_only, comdat, common,
- dup_common, is_zero, sort, access, space_index,
- alignment, quadrant, seg)
- sd_chain_struct *space;
- char *name;
- int loadable ATTRIBUTE_UNUSED;
- int code_only ATTRIBUTE_UNUSED;
- int comdat, common, dup_common;
- int is_zero ATTRIBUTE_UNUSED;
- int sort;
- int access;
- int space_index ATTRIBUTE_UNUSED;
- int alignment ATTRIBUTE_UNUSED;
- int quadrant;
- asection *seg;
+create_new_subspace (sd_chain_struct *space,
+ char *name,
+ int loadable ATTRIBUTE_UNUSED,
+ int code_only ATTRIBUTE_UNUSED,
+ int comdat,
+ int common,
+ int dup_common,
+ int is_zero ATTRIBUTE_UNUSED,
+ int sort,
+ int access,
+ int space_index ATTRIBUTE_UNUSED,
+ int alignment ATTRIBUTE_UNUSED,
+ int quadrant,
+ asection *seg)
{
ssd_chain_struct *chain_entry;
- chain_entry = (ssd_chain_struct *) xmalloc (sizeof (ssd_chain_struct));
+ chain_entry = xmalloc (sizeof (ssd_chain_struct));
if (!chain_entry)
as_fatal (_("Out of memory: could not allocate new subspace chain entry: %s\n"), name);
- SUBSPACE_NAME (chain_entry) = (char *) xmalloc (strlen (name) + 1);
+ SUBSPACE_NAME (chain_entry) = xmalloc (strlen (name) + 1);
strcpy (SUBSPACE_NAME (chain_entry), name);
/* Initialize subspace_defined. When we hit a .subspace directive
@@ -7986,22 +7878,20 @@ create_new_subspace (space, name, loadable, code_only, comdat, common,
various arguments. Return the modified subspace chain entry. */
static ssd_chain_struct *
-update_subspace (space, name, loadable, code_only, comdat, common, dup_common,
- sort, zero, access, space_index, alignment, quadrant, section)
- sd_chain_struct *space;
- char *name;
- int loadable ATTRIBUTE_UNUSED;
- int code_only ATTRIBUTE_UNUSED;
- int comdat;
- int common;
- int dup_common;
- int zero ATTRIBUTE_UNUSED;
- int sort;
- int access;
- int space_index ATTRIBUTE_UNUSED;
- int alignment ATTRIBUTE_UNUSED;
- int quadrant;
- asection *section;
+update_subspace (sd_chain_struct *space,
+ char *name,
+ int loadable ATTRIBUTE_UNUSED,
+ int code_only ATTRIBUTE_UNUSED,
+ int comdat,
+ int common,
+ int dup_common,
+ int sort,
+ int zero ATTRIBUTE_UNUSED,
+ int access,
+ int space_index ATTRIBUTE_UNUSED,
+ int alignment ATTRIBUTE_UNUSED,
+ int quadrant,
+ asection *section)
{
ssd_chain_struct *chain_entry;
@@ -8019,18 +7909,15 @@ update_subspace (space, name, loadable, code_only, comdat, common, dup_common,
NULL if no such space exists. */
static sd_chain_struct *
-is_defined_space (name)
- char *name;
+is_defined_space (char *name)
{
sd_chain_struct *chain_pointer;
for (chain_pointer = space_dict_root;
chain_pointer;
chain_pointer = chain_pointer->sd_next)
- {
- if (strcmp (SPACE_NAME (chain_pointer), name) == 0)
- return chain_pointer;
- }
+ if (strcmp (SPACE_NAME (chain_pointer), name) == 0)
+ return chain_pointer;
/* No mapping from segment to space was found. Return NULL. */
return NULL;
@@ -8043,8 +7930,7 @@ is_defined_space (name)
so a linear exhaustive search is OK here. */
static sd_chain_struct *
-pa_segment_to_space (seg)
- asection *seg;
+pa_segment_to_space (asection *seg)
{
sd_chain_struct *space_chain;
@@ -8052,10 +7938,8 @@ pa_segment_to_space (seg)
for (space_chain = space_dict_root;
space_chain;
space_chain = space_chain->sd_next)
- {
- if (space_chain->sd_seg == seg)
- return space_chain;
- }
+ if (space_chain->sd_seg == seg)
+ return space_chain;
/* Mapping was not found. Return NULL. */
return NULL;
@@ -8068,14 +7952,13 @@ pa_segment_to_space (seg)
the first (i.e., default) subspace is preferable in most situations.
For example, it wouldn't be desirable to merge COMDAT data with non
COMDAT data.
-
+
Uses a linear search through all the spaces and subspaces, this may
not be appropriate if we ever being placing each function in its
own subspace. */
static ssd_chain_struct *
-is_defined_subspace (name)
- char *name;
+is_defined_subspace (char *name)
{
sd_chain_struct *space_chain;
ssd_chain_struct *subspace_chain;
@@ -8105,9 +7988,7 @@ is_defined_subspace (name)
to become more efficient. */
static ssd_chain_struct *
-pa_subsegment_to_subspace (seg, subseg)
- asection *seg;
- subsegT subseg;
+pa_subsegment_to_subspace (asection *seg, subsegT subseg)
{
sd_chain_struct *space_chain;
ssd_chain_struct *subspace_chain;
@@ -8139,8 +8020,7 @@ pa_subsegment_to_subspace (seg, subseg)
that was found or NULL on failure. */
static sd_chain_struct *
-pa_find_space_by_number (number)
- int number;
+pa_find_space_by_number (int number)
{
sd_chain_struct *space_chain;
@@ -8160,9 +8040,7 @@ pa_find_space_by_number (number)
address is unknown then return zero. */
static unsigned int
-pa_subspace_start (space, quadrant)
- sd_chain_struct *space;
- int quadrant;
+pa_subspace_start (sd_chain_struct *space, int quadrant)
{
/* FIXME. Assumes everyone puts read/write data at 0x4000000, this
is not correct for the PA OSF1 port. */
@@ -8180,8 +8058,7 @@ pa_subspace_start (space, quadrant)
a string. */
static unsigned int
-pa_stringer_aux (s)
- char *s;
+pa_stringer_aux (char *s)
{
unsigned int c = *s & CHAR_MASK;
@@ -8199,8 +8076,7 @@ pa_stringer_aux (s)
/* Handle a .STRING type pseudo-op. */
static void
-pa_stringer (append_zero)
- int append_zero;
+pa_stringer (int append_zero)
{
char *s, num_buf[4];
unsigned int c;
@@ -8281,8 +8157,7 @@ pa_stringer (append_zero)
/* Handle a .VERSION pseudo-op. */
static void
-pa_version (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_version (int unused ATTRIBUTE_UNUSED)
{
obj_version (0);
pa_undefine_label ();
@@ -8293,8 +8168,7 @@ pa_version (unused)
/* Handle a .COMPILER pseudo-op. */
static void
-pa_compiler (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_compiler (int unused ATTRIBUTE_UNUSED)
{
obj_som_compiler (0);
pa_undefine_label ();
@@ -8305,8 +8179,7 @@ pa_compiler (unused)
/* Handle a .COPYRIGHT pseudo-op. */
static void
-pa_copyright (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_copyright (int unused ATTRIBUTE_UNUSED)
{
obj_copyright (0);
pa_undefine_label ();
@@ -8316,8 +8189,7 @@ pa_copyright (unused)
the latest space label. */
static void
-pa_cons (nbytes)
- int nbytes;
+pa_cons (int nbytes)
{
cons (nbytes);
pa_undefine_label ();
@@ -8326,8 +8198,7 @@ pa_cons (nbytes)
/* Like float_cons, but we need to undefine our label. */
static void
-pa_float_cons (float_type)
- int float_type;
+pa_float_cons (int float_type)
{
float_cons (float_type);
pa_undefine_label ();
@@ -8336,8 +8207,7 @@ pa_float_cons (float_type)
/* Like s_fill, but delete our label when finished. */
static void
-pa_fill (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_fill (int unused ATTRIBUTE_UNUSED)
{
#ifdef OBJ_SOM
/* We must have a valid space and subspace. */
@@ -8351,8 +8221,7 @@ pa_fill (unused)
/* Like lcomm, but delete our label when finished. */
static void
-pa_lcomm (needs_align)
- int needs_align;
+pa_lcomm (int needs_align)
{
#ifdef OBJ_SOM
/* We must have a valid space and subspace. */
@@ -8366,8 +8235,7 @@ pa_lcomm (needs_align)
/* Like lsym, but delete our label when finished. */
static void
-pa_lsym (unused)
- int unused ATTRIBUTE_UNUSED;
+pa_lsym (int unused ATTRIBUTE_UNUSED)
{
#ifdef OBJ_SOM
/* We must have a valid space and subspace. */
@@ -8378,6 +8246,79 @@ pa_lsym (unused)
pa_undefine_label ();
}
+/* This function is called once, at assembler startup time. It should
+ set up all the tables, etc. that the MD part of the assembler will need. */
+
+void
+md_begin (void)
+{
+ const char *retval = NULL;
+ int lose = 0;
+ unsigned int i = 0;
+
+ last_call_info = NULL;
+ call_info_root = NULL;
+
+ /* Set the default machine type. */
+ if (!bfd_set_arch_mach (stdoutput, bfd_arch_hppa, DEFAULT_LEVEL))
+ as_warn (_("could not set architecture and machine"));
+
+ /* Folding of text and data segments fails miserably on the PA.
+ Warn user and disable "-R" option. */
+ if (flag_readonly_data_in_text)
+ {
+ as_warn (_("-R option not supported on this target."));
+ flag_readonly_data_in_text = 0;
+ }
+
+#ifdef OBJ_SOM
+ pa_spaces_begin ();
+#endif
+
+ op_hash = hash_new ();
+
+ while (i < NUMOPCODES)
+ {
+ const char *name = pa_opcodes[i].name;
+
+ retval = hash_insert (op_hash, name, (struct pa_opcode *) &pa_opcodes[i]);
+ if (retval != NULL && *retval != '\0')
+ {
+ as_fatal (_("Internal error: can't hash `%s': %s\n"), name, retval);
+ lose = 1;
+ }
+
+ do
+ {
+ if ((pa_opcodes[i].match & pa_opcodes[i].mask)
+ != pa_opcodes[i].match)
+ {
+ fprintf (stderr, _("internal error: losing opcode: `%s' \"%s\"\n"),
+ pa_opcodes[i].name, pa_opcodes[i].args);
+ lose = 1;
+ }
+ ++i;
+ }
+ while (i < NUMOPCODES && !strcmp (pa_opcodes[i].name, name));
+ }
+
+ if (lose)
+ as_fatal (_("Broken assembler. No assembly attempted."));
+
+#ifdef OBJ_SOM
+ /* SOM will change text_section. To make sure we never put
+ anything into the old one switch to the new one now. */
+ subseg_set (text_section, 0);
+#endif
+
+#ifdef OBJ_SOM
+ dummy_symbol = symbol_find_or_make ("L$dummy");
+ S_SET_SEGMENT (dummy_symbol, text_section);
+ /* Force the symbol to be converted to a real symbol. */
+ (void) symbol_get_bfdsym (dummy_symbol);
+#endif
+}
+
/* On the PA relocations which involve function symbols must not be
adjusted. This so that the linker can know when/how to create argument
relocation stubs for indirect calls and calls to static functions.
@@ -8400,8 +8341,7 @@ pa_lsym (unused)
reductions make life a living hell for object file editors. */
int
-hppa_fix_adjustable (fixp)
- fixS *fixp;
+hppa_fix_adjustable (fixS *fixp)
{
#ifdef OBJ_ELF
reloc_type code;
@@ -8522,8 +8462,7 @@ hppa_fix_adjustable (fixp)
within GAS. */
int
-hppa_force_relocation (fixp)
- struct fix *fixp;
+hppa_force_relocation (struct fix *fixp)
{
struct hppa_fix_struct *hppa_fixp;
@@ -8597,75 +8536,13 @@ hppa_force_relocation (fixp)
/* Now for some ELF specific code. FIXME. */
#ifdef OBJ_ELF
-/* Mark the end of a function so that it's possible to compute
- the size of the function in elf_hppa_final_processing. */
-
-static void
-hppa_elf_mark_end_of_function ()
-{
- /* ELF does not have EXIT relocations. All we do is create a
- temporary symbol marking the end of the function. */
- char *name;
-
- if (last_call_info == NULL || last_call_info->start_symbol == NULL)
- {
- /* We have already warned about a missing label,
- or other problems. */
- return;
- }
-
- name = (char *) xmalloc (strlen ("L$\001end_")
- + strlen (S_GET_NAME (last_call_info->start_symbol))
- + 1);
- if (name)
- {
- symbolS *symbolP;
-
- strcpy (name, "L$\001end_");
- strcat (name, S_GET_NAME (last_call_info->start_symbol));
-
- /* If we have a .exit followed by a .procend, then the
- symbol will have already been defined. */
- symbolP = symbol_find (name);
- if (symbolP)
- {
- /* The symbol has already been defined! This can
- happen if we have a .exit followed by a .procend.
-
- This is *not* an error. All we want to do is free
- the memory we just allocated for the name and continue. */
- xfree (name);
- }
- else
- {
- /* symbol value should be the offset of the
- last instruction of the function */
- symbolP = symbol_new (name, now_seg, (valueT) (frag_now_fix () - 4),
- frag_now);
-
- assert (symbolP);
- S_CLEAR_EXTERNAL (symbolP);
- symbol_table_insert (symbolP);
- }
-
- if (symbolP)
- last_call_info->end_symbol = symbolP;
- else
- as_bad (_("Symbol '%s' could not be created."), name);
-
- }
- else
- as_bad (_("No memory for symbol name."));
-
-}
-
/* For ELF, this function serves one purpose: to setup the st_size
field of STT_FUNC symbols. To do this, we need to scan the
call_info structure list, determining st_size in by taking the
difference in the address of the beginning/end marker symbols. */
void
-elf_hppa_final_processing ()
+elf_hppa_final_processing (void)
{
struct call_info *call_info_pointer;
@@ -8683,8 +8560,7 @@ elf_hppa_final_processing ()
}
static void
-pa_vtable_entry (ignore)
- int ignore ATTRIBUTE_UNUSED;
+pa_vtable_entry (int ignore ATTRIBUTE_UNUSED)
{
struct fix *new_fix;
@@ -8692,8 +8568,8 @@ pa_vtable_entry (ignore)
if (new_fix)
{
- struct hppa_fix_struct *hppa_fix = (struct hppa_fix_struct *)
- obstack_alloc (&notes, sizeof (struct hppa_fix_struct));
+ struct hppa_fix_struct * hppa_fix = obstack_alloc (&notes, sizeof (struct hppa_fix_struct));
+
hppa_fix->fx_r_type = R_HPPA;
hppa_fix->fx_r_field = e_fsel;
hppa_fix->fx_r_format = 32;
@@ -8705,8 +8581,7 @@ pa_vtable_entry (ignore)
}
static void
-pa_vtable_inherit (ignore)
- int ignore ATTRIBUTE_UNUSED;
+pa_vtable_inherit (int ignore ATTRIBUTE_UNUSED)
{
struct fix *new_fix;
@@ -8714,8 +8589,8 @@ pa_vtable_inherit (ignore)
if (new_fix)
{
- struct hppa_fix_struct *hppa_fix = (struct hppa_fix_struct *)
- obstack_alloc (&notes, sizeof (struct hppa_fix_struct));
+ struct hppa_fix_struct * hppa_fix = obstack_alloc (&notes, sizeof (struct hppa_fix_struct));
+
hppa_fix->fx_r_type = R_HPPA;
hppa_fix->fx_r_field = e_fsel;
hppa_fix->fx_r_format = 32;
@@ -8726,3 +8601,135 @@ pa_vtable_inherit (ignore)
}
}
#endif
+
+/* Table of pseudo ops for the PA. FIXME -- how many of these
+ are now redundant with the overall GAS and the object file
+ dependent tables? */
+const pseudo_typeS md_pseudo_table[] =
+{
+ /* align pseudo-ops on the PA specify the actual alignment requested,
+ not the log2 of the requested alignment. */
+#ifdef OBJ_SOM
+ {"align", pa_align, 8},
+#endif
+#ifdef OBJ_ELF
+ {"align", s_align_bytes, 8},
+#endif
+ {"begin_brtab", pa_brtab, 1},
+ {"begin_try", pa_try, 1},
+ {"block", pa_block, 1},
+ {"blockz", pa_block, 0},
+ {"byte", pa_cons, 1},
+ {"call", pa_call, 0},
+ {"callinfo", pa_callinfo, 0},
+#if defined (OBJ_ELF) && (defined (TE_LINUX) || defined (TE_NetBSD))
+ {"code", obj_elf_text, 0},
+#else
+ {"code", pa_text, 0},
+ {"comm", pa_comm, 0},
+#endif
+#ifdef OBJ_SOM
+ {"compiler", pa_compiler, 0},
+#endif
+ {"copyright", pa_copyright, 0},
+#if !(defined (OBJ_ELF) && (defined (TE_LINUX) || defined (TE_NetBSD)))
+ {"data", pa_data, 0},
+#endif
+ {"double", pa_float_cons, 'd'},
+ {"dword", pa_cons, 8},
+ {"end", pa_end, 0},
+ {"end_brtab", pa_brtab, 0},
+#if !(defined (OBJ_ELF) && (defined (TE_LINUX) || defined (TE_NetBSD)))
+ {"end_try", pa_try, 0},
+#endif
+ {"enter", pa_enter, 0},
+ {"entry", pa_entry, 0},
+ {"equ", pa_equ, 0},
+ {"exit", pa_exit, 0},
+ {"export", pa_export, 0},
+ {"fill", pa_fill, 0},
+ {"float", pa_float_cons, 'f'},
+ {"half", pa_cons, 2},
+ {"import", pa_import, 0},
+ {"int", pa_cons, 4},
+ {"label", pa_label, 0},
+ {"lcomm", pa_lcomm, 0},
+ {"leave", pa_leave, 0},
+ {"level", pa_level, 0},
+ {"long", pa_cons, 4},
+ {"lsym", pa_lsym, 0},
+#ifdef OBJ_SOM
+ {"nsubspa", pa_subspace, 1},
+#endif
+ {"octa", pa_cons, 16},
+ {"org", pa_origin, 0},
+ {"origin", pa_origin, 0},
+ {"param", pa_param, 0},
+ {"proc", pa_proc, 0},
+ {"procend", pa_procend, 0},
+ {"quad", pa_cons, 8},
+ {"reg", pa_equ, 1},
+ {"short", pa_cons, 2},
+ {"single", pa_float_cons, 'f'},
+#ifdef OBJ_SOM
+ {"space", pa_space, 0},
+ {"spnum", pa_spnum, 0},
+#endif
+ {"string", pa_stringer, 0},
+ {"stringz", pa_stringer, 1},
+#ifdef OBJ_SOM
+ {"subspa", pa_subspace, 0},
+#endif
+#if !(defined (OBJ_ELF) && (defined (TE_LINUX) || defined (TE_NetBSD)))
+ {"text", pa_text, 0},
+#endif
+ {"version", pa_version, 0},
+#ifdef OBJ_ELF
+ {"vtable_entry", pa_vtable_entry, 0},
+ {"vtable_inherit", pa_vtable_inherit, 0},
+#endif
+ {"word", pa_cons, 4},
+ {NULL, 0, 0}
+};
+
+#ifdef OBJ_ELF
+void
+hppa_cfi_frame_initial_instructions (void)
+{
+ cfi_add_CFA_def_cfa (30, 0);
+}
+
+int
+hppa_regname_to_dw2regnum (char *regname)
+{
+ unsigned int regnum = -1;
+ unsigned int i;
+ const char *p;
+ char *q;
+ static struct { char *name; int dw2regnum; } regnames[] =
+ {
+ { "sp", 30 }, { "rp", 2 },
+ };
+
+ for (i = 0; i < ARRAY_SIZE (regnames); ++i)
+ if (strcmp (regnames[i].name, regname) == 0)
+ return regnames[i].dw2regnum;
+
+ if (regname[0] == 'r')
+ {
+ p = regname + 1;
+ regnum = strtoul (p, &q, 10);
+ if (p == q || *q || regnum >= 32)
+ return -1;
+ }
+ else if (regname[0] == 'f' && regname[1] == 'r')
+ {
+ p = regname + 2;
+ regnum = strtoul (p, &q, 10);
+ if (p == q || *q || regnum <= 4 || regnum >= 32)
+ return -1;
+ regnum += 32 - 4;
+ }
+ return regnum;
+}
+#endif
diff --git a/gas/config/tc-hppa.h b/gas/config/tc-hppa.h
index 9b3edc1878f5..f7bc8f8d97ab 100644
--- a/gas/config/tc-hppa.h
+++ b/gas/config/tc-hppa.h
@@ -1,6 +1,6 @@
/* tc-hppa.h -- Header file for the PA
Copyright 1989, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -90,15 +90,14 @@
#define ASEC_NULL (asection *)0
/* pa_define_label gets used outside of tc-hppa.c via tc_frob_label. */
-extern void pa_define_label PARAMS ((symbolS *));
-
-extern void parse_cons_expression_hppa PARAMS ((expressionS *));
-extern void cons_fix_new_hppa PARAMS ((fragS *, int, int, expressionS *));
-extern int hppa_force_relocation PARAMS ((struct fix *));
+extern void pa_define_label (symbolS *);
+extern void parse_cons_expression_hppa (expressionS *);
+extern void cons_fix_new_hppa (fragS *, int, int, expressionS *);
+extern int hppa_force_relocation (struct fix *);
/* This gets called before writing the object file to make sure
things like entry/exit and proc/procend pairs match. */
-extern void pa_check_eof PARAMS ((void));
+extern void pa_check_eof (void);
#define tc_frob_file pa_check_eof
#define tc_frob_label(sym) pa_define_label (sym)
@@ -120,7 +119,7 @@ extern const char hppa_symbol_chars[];
When used in an instruction it will always follow a comma. */
#define TC_EOL_IN_INSN(PTR) (*(PTR) == '!' && (PTR)[-1] == ',')
-int hppa_fix_adjustable PARAMS((struct fix *));
+int hppa_fix_adjustable (struct fix *);
#define tc_fix_adjustable hppa_fix_adjustable
#define EXTERN_FORCE_RELOC 1
@@ -170,17 +169,23 @@ int hppa_fix_adjustable PARAMS((struct fix *));
#define tc_frob_symbol(sym,punt) \
{ \
- if ((S_GET_SEGMENT (sym) == &bfd_und_section && ! symbol_used_p (sym) && \
- ELF_ST_VISIBILITY (S_GET_OTHER (sym)) == STV_DEFAULT) \
+ if ((S_GET_SEGMENT (sym) == &bfd_und_section \
+ && ! symbol_used_p (sym) \
+ && ELF_ST_VISIBILITY (S_GET_OTHER (sym)) == STV_DEFAULT) \
|| (S_GET_SEGMENT (sym) == &bfd_abs_section \
&& ! S_IS_EXTERNAL (sym)) \
|| strcmp (S_GET_NAME (sym), "$global$") == 0 \
- || strcmp (S_GET_NAME (sym), "$PIC_pcrel$0") == 0) \
+ || strcmp (S_GET_NAME (sym), "$PIC_pcrel$0") == 0 \
+ || strcmp (S_GET_NAME (sym), "$tls_gdidx$") == 0 \
+ || strcmp (S_GET_NAME (sym), "$tls_ldidx$") == 0 \
+ || strcmp (S_GET_NAME (sym), "$tls_dtpoff$") == 0 \
+ || strcmp (S_GET_NAME (sym), "$tls_ieoff$") == 0 \
+ || strcmp (S_GET_NAME (sym), "$tls_leoff$") == 0) \
punt = 1; \
}
#define elf_tc_final_processing elf_hppa_final_processing
-void elf_hppa_final_processing PARAMS ((void));
+void elf_hppa_final_processing (void);
#define DWARF2_LINE_MIN_INSN_LENGTH 4
#endif /* OBJ_ELF */
@@ -191,10 +196,27 @@ void elf_hppa_final_processing PARAMS ((void));
A silly fudge required for backwards compatibility. */
#define md_optimize_expr hppa_force_reg_syms_absolute
-int hppa_force_reg_syms_absolute
- PARAMS ((expressionS *, operatorT, expressionS *));
+int hppa_force_reg_syms_absolute (expressionS *, operatorT, expressionS *);
#define TC_FIX_TYPE PTR
#define TC_INIT_FIX_DATA(FIX) ((FIX)->tc_fix_data = NULL)
+#ifdef OBJ_ELF
+#define TARGET_USE_CFIPOP 1
+
+#define tc_cfi_frame_initial_instructions hppa_cfi_frame_initial_instructions
+extern void hppa_cfi_frame_initial_instructions (void);
+
+#define tc_regname_to_dw2regnum hppa_regname_to_dw2regnum
+extern int hppa_regname_to_dw2regnum (char *regname);
+
+#define DWARF2_LINE_MIN_INSN_LENGTH 4
+#define DWARF2_DEFAULT_RETURN_COLUMN 2
+#if TARGET_ARCH_SIZE == 64
+#define DWARF2_CIE_DATA_ALIGNMENT -8
+#else
+#define DWARF2_CIE_DATA_ALIGNMENT -4
+#endif
+#endif
+
#endif /* _TC_HPPA_H */
diff --git a/gas/config/tc-i370.c b/gas/config/tc-i370.c
index d87d2d9f808c..4445abeb406d 100644
--- a/gas/config/tc-i370.c
+++ b/gas/config/tc-i370.c
@@ -27,7 +27,6 @@
similarities between HLASM and the MRI assemblers, such as section
names, lack of leading . in pseudo-ops, DC and DS, etc. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index be384bc99a76..296fdcdde415 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -1,6 +1,6 @@
-/* i386.c -- Assemble code for the Intel 80386
+/* tc-i386.c -- Assemble code for the Intel 80386
Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -32,7 +32,6 @@
#include "subsegs.h"
#include "dwarf2dbg.h"
#include "dw2gencfi.h"
-#include "opcode/i386.h"
#include "elf/x86-64.h"
#ifndef REGISTER_WARNINGS
@@ -63,54 +62,39 @@
#endif
#endif
-static INLINE unsigned int mode_from_disp_size PARAMS ((unsigned int));
-static INLINE int fits_in_signed_byte PARAMS ((offsetT));
-static INLINE int fits_in_unsigned_byte PARAMS ((offsetT));
-static INLINE int fits_in_unsigned_word PARAMS ((offsetT));
-static INLINE int fits_in_signed_word PARAMS ((offsetT));
-static INLINE int fits_in_unsigned_long PARAMS ((offsetT));
-static INLINE int fits_in_signed_long PARAMS ((offsetT));
-static int smallest_imm_type PARAMS ((offsetT));
-static offsetT offset_in_range PARAMS ((offsetT, int));
-static int add_prefix PARAMS ((unsigned int));
-static void set_code_flag PARAMS ((int));
-static void set_16bit_gcc_code_flag PARAMS ((int));
-static void set_intel_syntax PARAMS ((int));
-static void set_cpu_arch PARAMS ((int));
+static void set_code_flag (int);
+static void set_16bit_gcc_code_flag (int);
+static void set_intel_syntax (int);
+static void set_cpu_arch (int);
#ifdef TE_PE
-static void pe_directive_secrel PARAMS ((int));
+static void pe_directive_secrel (int);
#endif
-static void signed_cons PARAMS ((int));
-static char *output_invalid PARAMS ((int c));
-static int i386_operand PARAMS ((char *operand_string));
-static int i386_intel_operand PARAMS ((char *operand_string, int got_a_float));
-static const reg_entry *parse_register PARAMS ((char *reg_string,
- char **end_op));
-static char *parse_insn PARAMS ((char *, char *));
-static char *parse_operands PARAMS ((char *, const char *));
-static void swap_operands PARAMS ((void));
-static void optimize_imm PARAMS ((void));
-static void optimize_disp PARAMS ((void));
-static int match_template PARAMS ((void));
-static int check_string PARAMS ((void));
-static int process_suffix PARAMS ((void));
-static int check_byte_reg PARAMS ((void));
-static int check_long_reg PARAMS ((void));
-static int check_qword_reg PARAMS ((void));
-static int check_word_reg PARAMS ((void));
-static int finalize_imm PARAMS ((void));
-static int process_operands PARAMS ((void));
-static const seg_entry *build_modrm_byte PARAMS ((void));
-static void output_insn PARAMS ((void));
-static void output_branch PARAMS ((void));
-static void output_jump PARAMS ((void));
-static void output_interseg_jump PARAMS ((void));
-static void output_imm PARAMS ((fragS *insn_start_frag,
- offsetT insn_start_off));
-static void output_disp PARAMS ((fragS *insn_start_frag,
- offsetT insn_start_off));
+static void signed_cons (int);
+static char *output_invalid (int c);
+static int i386_operand (char *);
+static int i386_intel_operand (char *, int);
+static const reg_entry *parse_register (char *, char **);
+static char *parse_insn (char *, char *);
+static char *parse_operands (char *, const char *);
+static void swap_operands (void);
+static void swap_2_operands (int, int);
+static void optimize_imm (void);
+static void optimize_disp (void);
+static int match_template (void);
+static int check_string (void);
+static int process_suffix (void);
+static int check_byte_reg (void);
+static int check_long_reg (void);
+static int check_qword_reg (void);
+static int check_word_reg (void);
+static int finalize_imm (void);
+static int process_operands (void);
+static const seg_entry *build_modrm_byte (void);
+static void output_insn (void);
+static void output_imm (fragS *, offsetT);
+static void output_disp (fragS *, offsetT);
#ifndef I386COFF
-static void s_bss PARAMS ((int));
+static void s_bss (int);
#endif
#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
static void handle_large_common (int small ATTRIBUTE_UNUSED);
@@ -271,8 +255,9 @@ static i386_insn i;
/* Possible templates for current insn. */
static const templates *current_templates;
-/* Per instruction expressionS buffers: 2 displacements & 2 immediate max. */
-static expressionS disp_expressions[2], im_expressions[2];
+/* Per instruction expressionS buffers: max displacements & immediates. */
+static expressionS disp_expressions[MAX_MEMORY_OPERANDS];
+static expressionS im_expressions[MAX_IMMEDIATE_OPERANDS];
/* Current operand we are working on. */
static int this_operand;
@@ -305,6 +290,9 @@ static int intel_syntax = 0;
/* 1 if register prefix % not required. */
static int allow_naked_reg = 0;
+/* Register prefix used for error message. */
+static const char *register_prefix = "%";
+
/* Used in 16 bit gcc mode to add an l suffix to call, ret, enter,
leave, push, and pop instructions so that gcc has the same stack
frame as in 32 bit mode. */
@@ -323,6 +311,21 @@ static const char *cpu_sub_arch_name = NULL;
/* CPU feature flags. */
static unsigned int cpu_arch_flags = CpuUnknownFlags | CpuNo64;
+/* If we have selected a cpu we are generating instructions for. */
+static int cpu_arch_tune_set = 0;
+
+/* Cpu we are generating instructions for. */
+static enum processor_type cpu_arch_tune = PROCESSOR_UNKNOWN;
+
+/* CPU feature flags of cpu we are generating instructions for. */
+static unsigned int cpu_arch_tune_flags = 0;
+
+/* CPU instruction set architecture used. */
+static enum processor_type cpu_arch_isa = PROCESSOR_UNKNOWN;
+
+/* CPU feature flags of instruction set architecture used. */
+static unsigned int cpu_arch_isa_flags = 0;
+
/* If set, conditional jumps are not automatically promoted to handle
larger than a byte offset. */
static unsigned int no_cond_jump_promotion = 0;
@@ -415,35 +418,106 @@ const relax_typeS md_relax_table[] =
{0, 0, 4, 0}
};
-static const arch_entry cpu_arch[] = {
- {"i8086", Cpu086 },
- {"i186", Cpu086|Cpu186 },
- {"i286", Cpu086|Cpu186|Cpu286 },
- {"i386", Cpu086|Cpu186|Cpu286|Cpu386 },
- {"i486", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486 },
- {"i586", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586 },
- {"i686", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686 },
- {"pentium", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586 },
- {"pentiumpro",Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686 },
- {"pentiumii", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuMMX },
- {"pentiumiii",Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuMMX|CpuMMX2|CpuSSE },
- {"pentium4", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuP4|CpuMMX|CpuMMX2|CpuSSE|CpuSSE2 },
- {"prescott", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuP4|CpuMMX|CpuMMX2|CpuSSE|CpuSSE2|CpuPNI },
- {"k6", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|CpuK6|CpuMMX },
- {"k6_2", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|CpuK6|CpuMMX|Cpu3dnow },
- {"athlon", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuK6|CpuAthlon|CpuMMX|CpuMMX2|Cpu3dnow|Cpu3dnowA },
- {"sledgehammer",Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuK6|CpuAthlon|CpuSledgehammer|CpuMMX|CpuMMX2|Cpu3dnow|Cpu3dnowA|CpuSSE|CpuSSE2 },
- {"opteron", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuK6|CpuAthlon|CpuSledgehammer|CpuMMX|CpuMMX2|Cpu3dnow|Cpu3dnowA|CpuSSE|CpuSSE2 },
- {".mmx", CpuMMX },
- {".sse", CpuMMX|CpuMMX2|CpuSSE },
- {".sse2", CpuMMX|CpuMMX2|CpuSSE|CpuSSE2 },
- {".sse3", CpuMMX|CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3 },
- {".3dnow", CpuMMX|Cpu3dnow },
- {".3dnowa", CpuMMX|CpuMMX2|Cpu3dnow|Cpu3dnowA },
- {".padlock", CpuPadLock },
- {".pacifica", CpuSVME },
- {".svme", CpuSVME },
- {NULL, 0 }
+static const arch_entry cpu_arch[] =
+{
+ {"generic32", PROCESSOR_GENERIC32,
+ Cpu186|Cpu286|Cpu386},
+ {"generic64", PROCESSOR_GENERIC64,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuP4|CpuMMX
+ |CpuMMX2|CpuSSE|CpuSSE2},
+ {"i8086", PROCESSOR_UNKNOWN,
+ 0},
+ {"i186", PROCESSOR_UNKNOWN,
+ Cpu186},
+ {"i286", PROCESSOR_UNKNOWN,
+ Cpu186|Cpu286},
+ {"i386", PROCESSOR_GENERIC32,
+ Cpu186|Cpu286|Cpu386},
+ {"i486", PROCESSOR_I486,
+ Cpu186|Cpu286|Cpu386|Cpu486},
+ {"i586", PROCESSOR_PENTIUM,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586},
+ {"i686", PROCESSOR_PENTIUMPRO,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686},
+ {"pentium", PROCESSOR_PENTIUM,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586},
+ {"pentiumpro",PROCESSOR_PENTIUMPRO,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686},
+ {"pentiumii", PROCESSOR_PENTIUMPRO,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuMMX},
+ {"pentiumiii",PROCESSOR_PENTIUMPRO,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuMMX|CpuMMX2|CpuSSE},
+ {"pentium4", PROCESSOR_PENTIUM4,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuP4|CpuMMX
+ |CpuMMX2|CpuSSE|CpuSSE2},
+ {"prescott", PROCESSOR_NOCONA,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuP4|CpuMMX
+ |CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3},
+ {"nocona", PROCESSOR_NOCONA,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuP4|CpuMMX
+ |CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3},
+ {"yonah", PROCESSOR_CORE,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuP4|CpuMMX
+ |CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3},
+ {"core", PROCESSOR_CORE,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuP4|CpuMMX
+ |CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3},
+ {"merom", PROCESSOR_CORE2,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuP4|CpuMMX
+ |CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3},
+ {"core2", PROCESSOR_CORE2,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuP4|CpuMMX
+ |CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3},
+ {"k6", PROCESSOR_K6,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|CpuK6|CpuMMX},
+ {"k6_2", PROCESSOR_K6,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|CpuK6|CpuMMX|Cpu3dnow},
+ {"athlon", PROCESSOR_ATHLON,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuK6
+ |CpuMMX|CpuMMX2|Cpu3dnow|Cpu3dnowA},
+ {"sledgehammer", PROCESSOR_K8,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuK6
+ |CpuSledgehammer|CpuMMX|CpuMMX2|Cpu3dnow|Cpu3dnowA|CpuSSE|CpuSSE2},
+ {"opteron", PROCESSOR_K8,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuK6
+ |CpuSledgehammer|CpuMMX|CpuMMX2|Cpu3dnow|Cpu3dnowA|CpuSSE|CpuSSE2},
+ {"k8", PROCESSOR_K8,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuK6
+ |CpuSledgehammer|CpuMMX|CpuMMX2|Cpu3dnow|Cpu3dnowA|CpuSSE|CpuSSE2},
+ {"amdfam10", PROCESSOR_AMDFAM10,
+ Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuK6|CpuSledgehammer
+ |CpuMMX|CpuMMX2|Cpu3dnow|Cpu3dnowA|CpuSSE|CpuSSE2|CpuSSE3|CpuSSE4a
+ |CpuABM},
+ {".mmx", PROCESSOR_UNKNOWN,
+ CpuMMX},
+ {".sse", PROCESSOR_UNKNOWN,
+ CpuMMX|CpuMMX2|CpuSSE},
+ {".sse2", PROCESSOR_UNKNOWN,
+ CpuMMX|CpuMMX2|CpuSSE|CpuSSE2},
+ {".sse3", PROCESSOR_UNKNOWN,
+ CpuMMX|CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3},
+ {".ssse3", PROCESSOR_UNKNOWN,
+ CpuMMX|CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3},
+ {".sse4.1", PROCESSOR_UNKNOWN,
+ CpuMMX|CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1},
+ {".sse4.2", PROCESSOR_UNKNOWN,
+ CpuMMX|CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4},
+ {".sse4", PROCESSOR_UNKNOWN,
+ CpuMMX|CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4},
+ {".3dnow", PROCESSOR_UNKNOWN,
+ CpuMMX|Cpu3dnow},
+ {".3dnowa", PROCESSOR_UNKNOWN,
+ CpuMMX|CpuMMX2|Cpu3dnow|Cpu3dnowA},
+ {".padlock", PROCESSOR_UNKNOWN,
+ CpuPadLock},
+ {".pacifica", PROCESSOR_UNKNOWN,
+ CpuSVME},
+ {".svme", PROCESSOR_UNKNOWN,
+ CpuSVME},
+ {".sse4a", PROCESSOR_UNKNOWN,
+ CpuMMX|CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3|CpuSSE4a},
+ {".abm", PROCESSOR_UNKNOWN,
+ CpuABM}
};
const pseudo_typeS md_pseudo_table[] =
@@ -473,7 +547,7 @@ const pseudo_typeS md_pseudo_table[] =
#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
{"largecomm", handle_large_common, 0},
#else
- {"file", (void (*) PARAMS ((int))) dwarf2_directive_file, 0},
+ {"file", (void (*) (int)) dwarf2_directive_file, 0},
{"loc", dwarf2_directive_loc, 0},
{"loc_mark_labels", dwarf2_directive_loc_mark_labels, 0},
#endif
@@ -493,9 +567,7 @@ static struct hash_control *op_hash;
static struct hash_control *reg_hash;
void
-i386_align_code (fragP, count)
- fragS *fragP;
- int count;
+i386_align_code (fragS *fragP, int count)
{
/* Various efficient no-op patterns for aligning code labels.
Note: Don't try to assemble the instructions in the comments.
@@ -503,7 +575,7 @@ i386_align_code (fragP, count)
static const char f32_1[] =
{0x90}; /* nop */
static const char f32_2[] =
- {0x89,0xf6}; /* movl %esi,%esi */
+ {0x66,0x90}; /* xchg %ax,%ax */
static const char f32_3[] =
{0x8d,0x76,0x00}; /* leal 0(%esi),%esi */
static const char f32_4[] =
@@ -563,13 +635,141 @@ i386_align_code (fragP, count)
f32_1, f32_2, f16_3, f16_4, f16_5, f16_6, f16_7, f16_8,
f32_15, f32_15, f32_15, f32_15, f32_15, f32_15, f32_15
};
+ /* nopl (%[re]ax) */
+ static const char alt_3[] =
+ {0x0f,0x1f,0x00};
+ /* nopl 0(%[re]ax) */
+ static const char alt_4[] =
+ {0x0f,0x1f,0x40,0x00};
+ /* nopl 0(%[re]ax,%[re]ax,1) */
+ static const char alt_5[] =
+ {0x0f,0x1f,0x44,0x00,0x00};
+ /* nopw 0(%[re]ax,%[re]ax,1) */
+ static const char alt_6[] =
+ {0x66,0x0f,0x1f,0x44,0x00,0x00};
+ /* nopl 0L(%[re]ax) */
+ static const char alt_7[] =
+ {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
+ /* nopl 0L(%[re]ax,%[re]ax,1) */
+ static const char alt_8[] =
+ {0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+ /* nopw 0L(%[re]ax,%[re]ax,1) */
+ static const char alt_9[] =
+ {0x66,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+ /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
+ static const char alt_10[] =
+ {0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+ /* data16
+ nopw %cs:0L(%[re]ax,%[re]ax,1) */
+ static const char alt_long_11[] =
+ {0x66,
+ 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+ /* data16
+ data16
+ nopw %cs:0L(%[re]ax,%[re]ax,1) */
+ static const char alt_long_12[] =
+ {0x66,
+ 0x66,
+ 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+ /* data16
+ data16
+ data16
+ nopw %cs:0L(%[re]ax,%[re]ax,1) */
+ static const char alt_long_13[] =
+ {0x66,
+ 0x66,
+ 0x66,
+ 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+ /* data16
+ data16
+ data16
+ data16
+ nopw %cs:0L(%[re]ax,%[re]ax,1) */
+ static const char alt_long_14[] =
+ {0x66,
+ 0x66,
+ 0x66,
+ 0x66,
+ 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+ /* data16
+ data16
+ data16
+ data16
+ data16
+ nopw %cs:0L(%[re]ax,%[re]ax,1) */
+ static const char alt_long_15[] =
+ {0x66,
+ 0x66,
+ 0x66,
+ 0x66,
+ 0x66,
+ 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+ /* nopl 0(%[re]ax,%[re]ax,1)
+ nopw 0(%[re]ax,%[re]ax,1) */
+ static const char alt_short_11[] =
+ {0x0f,0x1f,0x44,0x00,0x00,
+ 0x66,0x0f,0x1f,0x44,0x00,0x00};
+ /* nopw 0(%[re]ax,%[re]ax,1)
+ nopw 0(%[re]ax,%[re]ax,1) */
+ static const char alt_short_12[] =
+ {0x66,0x0f,0x1f,0x44,0x00,0x00,
+ 0x66,0x0f,0x1f,0x44,0x00,0x00};
+ /* nopw 0(%[re]ax,%[re]ax,1)
+ nopl 0L(%[re]ax) */
+ static const char alt_short_13[] =
+ {0x66,0x0f,0x1f,0x44,0x00,0x00,
+ 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
+ /* nopl 0L(%[re]ax)
+ nopl 0L(%[re]ax) */
+ static const char alt_short_14[] =
+ {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
+ 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
+ /* nopl 0L(%[re]ax)
+ nopl 0L(%[re]ax,%[re]ax,1) */
+ static const char alt_short_15[] =
+ {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
+ 0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+ static const char *const alt_short_patt[] = {
+ f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
+ alt_9, alt_10, alt_short_11, alt_short_12, alt_short_13,
+ alt_short_14, alt_short_15
+ };
+ static const char *const alt_long_patt[] = {
+ f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
+ alt_9, alt_10, alt_long_11, alt_long_12, alt_long_13,
+ alt_long_14, alt_long_15
+ };
if (count <= 0 || count > 15)
return;
- /* The recommended way to pad 64bit code is to use NOPs preceded by
- maximally four 0x66 prefixes. Balance the size of nops. */
- if (flag_code == CODE_64BIT)
+ /* We need to decide which NOP sequence to use for 32bit and
+ 64bit. When -mtune= is used:
+
+ 1. For PROCESSOR_I486, PROCESSOR_PENTIUM and PROCESSOR_GENERIC32,
+ f32_patt will be used.
+ 2. For PROCESSOR_K8 and PROCESSOR_AMDFAM10 in 64bit, NOPs with
+ 0x66 prefix will be used.
+ 3. For PROCESSOR_CORE2, alt_long_patt will be used.
+ 4. For PROCESSOR_PENTIUMPRO, PROCESSOR_PENTIUM4, PROCESSOR_NOCONA,
+ PROCESSOR_CORE, PROCESSOR_CORE2, PROCESSOR_K6, PROCESSOR_ATHLON
+ and PROCESSOR_GENERIC64, alt_short_patt will be used.
+
+ When -mtune= isn't used, alt_short_patt will be used if
+ cpu_arch_isa_flags has Cpu686. Otherwise, f32_patt will be used.
+
+ When -march= or .arch is used, we can't use anything beyond
+ cpu_arch_isa_flags. */
+
+ if (flag_code == CODE_16BIT)
+ {
+ memcpy (fragP->fr_literal + fragP->fr_fix,
+ f16_patt[count - 1], count);
+ if (count > 8)
+ /* Adjust jump offset. */
+ fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
+ }
+ else if (flag_code == CODE_64BIT && cpu_arch_tune == PROCESSOR_K8)
{
int i;
int nnops = (count + 3) / 4;
@@ -577,6 +777,8 @@ i386_align_code (fragP, count)
int remains = count - nnops * len;
int pos = 0;
+ /* The recommended way to pad 64bit code is to use NOPs preceded
+ by maximally four 0x66 prefixes. Balance the size of nops. */
for (i = 0; i < remains; i++)
{
memset (fragP->fr_literal + fragP->fr_fix + pos, 0x66, len);
@@ -591,57 +793,121 @@ i386_align_code (fragP, count)
}
}
else
- if (flag_code == CODE_16BIT)
- {
- memcpy (fragP->fr_literal + fragP->fr_fix,
- f16_patt[count - 1], count);
- if (count > 8)
- /* Adjust jump offset. */
- fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
- }
- else
+ {
+ const char *const *patt = NULL;
+
+ if (cpu_arch_isa == PROCESSOR_UNKNOWN)
+ {
+ /* PROCESSOR_UNKNOWN means that all ISAs may be used. */
+ switch (cpu_arch_tune)
+ {
+ case PROCESSOR_UNKNOWN:
+ /* We use cpu_arch_isa_flags to check if we SHOULD
+ optimize for Cpu686. */
+ if ((cpu_arch_isa_flags & Cpu686) != 0)
+ patt = alt_short_patt;
+ else
+ patt = f32_patt;
+ break;
+ case PROCESSOR_CORE2:
+ patt = alt_long_patt;
+ break;
+ case PROCESSOR_PENTIUMPRO:
+ case PROCESSOR_PENTIUM4:
+ case PROCESSOR_NOCONA:
+ case PROCESSOR_CORE:
+ case PROCESSOR_K6:
+ case PROCESSOR_ATHLON:
+ case PROCESSOR_K8:
+ case PROCESSOR_GENERIC64:
+ case PROCESSOR_AMDFAM10:
+ patt = alt_short_patt;
+ break;
+ case PROCESSOR_I486:
+ case PROCESSOR_PENTIUM:
+ case PROCESSOR_GENERIC32:
+ patt = f32_patt;
+ break;
+ }
+ }
+ else
+ {
+ switch (cpu_arch_tune)
+ {
+ case PROCESSOR_UNKNOWN:
+ /* When cpu_arch_isa is net, cpu_arch_tune shouldn't be
+ PROCESSOR_UNKNOWN. */
+ abort ();
+ break;
+
+ case PROCESSOR_I486:
+ case PROCESSOR_PENTIUM:
+ case PROCESSOR_PENTIUMPRO:
+ case PROCESSOR_PENTIUM4:
+ case PROCESSOR_NOCONA:
+ case PROCESSOR_CORE:
+ case PROCESSOR_K6:
+ case PROCESSOR_ATHLON:
+ case PROCESSOR_K8:
+ case PROCESSOR_AMDFAM10:
+ case PROCESSOR_GENERIC32:
+ /* We use cpu_arch_isa_flags to check if we CAN optimize
+ for Cpu686. */
+ if ((cpu_arch_isa_flags & Cpu686) != 0)
+ patt = alt_short_patt;
+ else
+ patt = f32_patt;
+ break;
+ case PROCESSOR_CORE2:
+ if ((cpu_arch_isa_flags & Cpu686) != 0)
+ patt = alt_long_patt;
+ else
+ patt = f32_patt;
+ break;
+ case PROCESSOR_GENERIC64:
+ patt = alt_short_patt;
+ break;
+ }
+ }
+
memcpy (fragP->fr_literal + fragP->fr_fix,
- f32_patt[count - 1], count);
+ patt[count - 1], count);
+ }
fragP->fr_var = count;
}
static INLINE unsigned int
-mode_from_disp_size (t)
- unsigned int t;
+mode_from_disp_size (unsigned int t)
{
return (t & Disp8) ? 1 : (t & (Disp16 | Disp32 | Disp32S)) ? 2 : 0;
}
static INLINE int
-fits_in_signed_byte (num)
- offsetT num;
+fits_in_signed_byte (offsetT num)
{
return (num >= -128) && (num <= 127);
}
static INLINE int
-fits_in_unsigned_byte (num)
- offsetT num;
+fits_in_unsigned_byte (offsetT num)
{
return (num & 0xff) == num;
}
static INLINE int
-fits_in_unsigned_word (num)
- offsetT num;
+fits_in_unsigned_word (offsetT num)
{
return (num & 0xffff) == num;
}
static INLINE int
-fits_in_signed_word (num)
- offsetT num;
+fits_in_signed_word (offsetT num)
{
return (-32768 <= num) && (num <= 32767);
}
+
static INLINE int
-fits_in_signed_long (num)
- offsetT num ATTRIBUTE_UNUSED;
+fits_in_signed_long (offsetT num ATTRIBUTE_UNUSED)
{
#ifndef BFD64
return 1;
@@ -650,9 +916,9 @@ fits_in_signed_long (num)
|| (((offsetT) -1 << 31) & num) == ((offsetT) -1 << 31));
#endif
} /* fits_in_signed_long() */
+
static INLINE int
-fits_in_unsigned_long (num)
- offsetT num ATTRIBUTE_UNUSED;
+fits_in_unsigned_long (offsetT num ATTRIBUTE_UNUSED)
{
#ifndef BFD64
return 1;
@@ -661,11 +927,10 @@ fits_in_unsigned_long (num)
#endif
} /* fits_in_unsigned_long() */
-static int
-smallest_imm_type (num)
- offsetT num;
+static unsigned int
+smallest_imm_type (offsetT num)
{
- if (cpu_arch_flags != (Cpu086 | Cpu186 | Cpu286 | Cpu386 | Cpu486 | CpuNo64))
+ if (cpu_arch_flags != (Cpu186 | Cpu286 | Cpu386 | Cpu486 | CpuNo64))
{
/* This code is disabled on the 486 because all the Imm1 forms
in the opcode table are slower on the i486. They're the
@@ -689,9 +954,7 @@ smallest_imm_type (num)
}
static offsetT
-offset_in_range (val, size)
- offsetT val;
- int size;
+offset_in_range (offsetT val, int size)
{
addressT mask;
@@ -726,8 +989,7 @@ offset_in_range (val, size)
class already exists, 1 if non rep/repne added, 2 if rep/repne
added. */
static int
-add_prefix (prefix)
- unsigned int prefix;
+add_prefix (unsigned int prefix)
{
int ret = 1;
unsigned int q;
@@ -735,9 +997,9 @@ add_prefix (prefix)
if (prefix >= REX_OPCODE && prefix < REX_OPCODE + 16
&& flag_code == CODE_64BIT)
{
- if ((i.prefix[REX_PREFIX] & prefix & REX_MODE64)
- || ((i.prefix[REX_PREFIX] & (REX_EXTX | REX_EXTY | REX_EXTZ))
- && (prefix & (REX_EXTX | REX_EXTY | REX_EXTZ))))
+ if ((i.prefix[REX_PREFIX] & prefix & REX_W)
+ || ((i.prefix[REX_PREFIX] & (REX_R | REX_X | REX_B))
+ && (prefix & (REX_R | REX_X | REX_B))))
ret = 0;
q = REX_PREFIX;
}
@@ -794,8 +1056,7 @@ add_prefix (prefix)
}
static void
-set_code_flag (value)
- int value;
+set_code_flag (int value)
{
flag_code = value;
cpu_arch_flags &= ~(Cpu64 | CpuNo64);
@@ -812,8 +1073,7 @@ set_code_flag (value)
}
static void
-set_16bit_gcc_code_flag (new_code_flag)
- int new_code_flag;
+set_16bit_gcc_code_flag (int new_code_flag)
{
flag_code = new_code_flag;
cpu_arch_flags &= ~(Cpu64 | CpuNo64);
@@ -822,8 +1082,7 @@ set_16bit_gcc_code_flag (new_code_flag)
}
static void
-set_intel_syntax (syntax_flag)
- int syntax_flag;
+set_intel_syntax (int syntax_flag)
{
/* Find out if register prefixing is specified. */
int ask_naked_reg = 0;
@@ -854,11 +1113,11 @@ set_intel_syntax (syntax_flag)
identifier_chars['%'] = intel_syntax && allow_naked_reg ? '%' : 0;
identifier_chars['$'] = intel_syntax ? '$' : 0;
+ register_prefix = allow_naked_reg ? "" : "%";
}
static void
-set_cpu_arch (dummy)
- int dummy ATTRIBUTE_UNUSED;
+set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
{
SKIP_WHITESPACE ();
@@ -866,9 +1125,9 @@ set_cpu_arch (dummy)
{
char *string = input_line_pointer;
int e = get_symbol_end ();
- int i;
+ unsigned int i;
- for (i = 0; cpu_arch[i].name; i++)
+ for (i = 0; i < ARRAY_SIZE (cpu_arch); i++)
{
if (strcmp (string, cpu_arch[i].name) == 0)
{
@@ -877,7 +1136,15 @@ set_cpu_arch (dummy)
cpu_arch_name = cpu_arch[i].name;
cpu_sub_arch_name = NULL;
cpu_arch_flags = (cpu_arch[i].flags
- | (flag_code == CODE_64BIT ? Cpu64 : CpuNo64));
+ | (flag_code == CODE_64BIT
+ ? Cpu64 : CpuNo64));
+ cpu_arch_isa = cpu_arch[i].type;
+ cpu_arch_isa_flags = cpu_arch[i].flags;
+ if (!cpu_arch_tune_set)
+ {
+ cpu_arch_tune = cpu_arch_isa;
+ cpu_arch_tune_flags = cpu_arch_isa_flags;
+ }
break;
}
if ((cpu_arch_flags | cpu_arch[i].flags) != cpu_arch_flags)
@@ -890,7 +1157,7 @@ set_cpu_arch (dummy)
return;
}
}
- if (!cpu_arch[i].name)
+ if (i >= ARRAY_SIZE (cpu_arch))
as_bad (_("no such architecture: `%s'"), string);
*input_line_pointer = e;
@@ -976,10 +1243,9 @@ md_begin ()
reg_hash = hash_new ();
{
const reg_entry *regtab;
+ unsigned int regtab_size = i386_regtab_size;
- for (regtab = i386_regtab;
- regtab < i386_regtab + sizeof (i386_regtab) / sizeof (i386_regtab[0]);
- regtab++)
+ for (regtab = i386_regtab; regtab_size--; regtab++)
{
hash_err = hash_insert (reg_hash, regtab->reg_name, (PTR) regtab);
if (hash_err)
@@ -1034,6 +1300,7 @@ md_begin ()
#endif
digit_chars['-'] = '-';
mnemonic_chars['-'] = '-';
+ mnemonic_chars['.'] = '.';
identifier_chars['_'] = '_';
identifier_chars['.'] = '.';
@@ -1063,8 +1330,7 @@ md_begin ()
}
void
-i386_print_statistics (file)
- FILE *file;
+i386_print_statistics (FILE *file)
{
hash_print_statistics (file, "i386 opcode", op_hash);
hash_print_statistics (file, "i386 register", reg_hash);
@@ -1073,16 +1339,13 @@ i386_print_statistics (file)
#ifdef DEBUG386
/* Debugging routines for md_assemble. */
-static void pi PARAMS ((char *, i386_insn *));
-static void pte PARAMS ((template *));
-static void pt PARAMS ((unsigned int));
-static void pe PARAMS ((expressionS *));
-static void ps PARAMS ((symbolS *));
+static void pte (template *);
+static void pt (unsigned int);
+static void pe (expressionS *);
+static void ps (symbolS *);
static void
-pi (line, x)
- char *line;
- i386_insn *x;
+pi (char *line, i386_insn *x)
{
unsigned int i;
@@ -1097,10 +1360,10 @@ pi (line, x)
fprintf (stdout, " sib: base %x index %x scale %x\n",
x->sib.base, x->sib.index, x->sib.scale);
fprintf (stdout, " rex: 64bit %x extX %x extY %x extZ %x\n",
- (x->rex & REX_MODE64) != 0,
- (x->rex & REX_EXTX) != 0,
- (x->rex & REX_EXTY) != 0,
- (x->rex & REX_EXTZ) != 0);
+ (x->rex & REX_W) != 0,
+ (x->rex & REX_R) != 0,
+ (x->rex & REX_X) != 0,
+ (x->rex & REX_B) != 0);
for (i = 0; i < x->operands; i++)
{
fprintf (stdout, " #%d: ", i + 1);
@@ -1117,8 +1380,7 @@ pi (line, x)
}
static void
-pte (t)
- template *t;
+pte (template *t)
{
unsigned int i;
fprintf (stdout, " %d operands ", t->operands);
@@ -1139,8 +1401,7 @@ pte (t)
}
static void
-pe (e)
- expressionS *e;
+pe (expressionS *e)
{
fprintf (stdout, " operation %d\n", e->X_op);
fprintf (stdout, " add_number %ld (%lx)\n",
@@ -1160,8 +1421,7 @@ pe (e)
}
static void
-ps (s)
- symbolS *s;
+ps (symbolS *s)
{
fprintf (stdout, "%s type %s%s",
S_GET_NAME (s),
@@ -1226,9 +1486,9 @@ pt (t)
static bfd_reloc_code_real_type
reloc (unsigned int size,
- int pcrel,
- int sign,
- bfd_reloc_code_real_type other)
+ int pcrel,
+ int sign,
+ bfd_reloc_code_real_type other)
{
if (other != NO_RELOC)
{
@@ -1237,26 +1497,26 @@ reloc (unsigned int size,
if (size == 8)
switch (other)
{
- case BFD_RELOC_X86_64_GOT32:
- return BFD_RELOC_X86_64_GOT64;
- break;
- case BFD_RELOC_X86_64_PLTOFF64:
- return BFD_RELOC_X86_64_PLTOFF64;
- break;
- case BFD_RELOC_X86_64_GOTPC32:
- other = BFD_RELOC_X86_64_GOTPC64;
- break;
- case BFD_RELOC_X86_64_GOTPCREL:
- other = BFD_RELOC_X86_64_GOTPCREL64;
- break;
- case BFD_RELOC_X86_64_TPOFF32:
- other = BFD_RELOC_X86_64_TPOFF64;
- break;
- case BFD_RELOC_X86_64_DTPOFF32:
- other = BFD_RELOC_X86_64_DTPOFF64;
- break;
- default:
- break;
+ case BFD_RELOC_X86_64_GOT32:
+ return BFD_RELOC_X86_64_GOT64;
+ break;
+ case BFD_RELOC_X86_64_PLTOFF64:
+ return BFD_RELOC_X86_64_PLTOFF64;
+ break;
+ case BFD_RELOC_X86_64_GOTPC32:
+ other = BFD_RELOC_X86_64_GOTPC64;
+ break;
+ case BFD_RELOC_X86_64_GOTPCREL:
+ other = BFD_RELOC_X86_64_GOTPCREL64;
+ break;
+ case BFD_RELOC_X86_64_TPOFF32:
+ other = BFD_RELOC_X86_64_TPOFF64;
+ break;
+ case BFD_RELOC_X86_64_DTPOFF32:
+ other = BFD_RELOC_X86_64_DTPOFF64;
+ break;
+ default:
+ break;
}
/* Sign-checking 4-byte relocations in 16-/32-bit code is pointless. */
@@ -1275,7 +1535,7 @@ reloc (unsigned int size,
else if ((reloc->complain_on_overflow == complain_overflow_signed
&& !sign)
|| (reloc->complain_on_overflow == complain_overflow_unsigned
- && sign > 0))
+ && sign > 0))
as_bad (_("relocated field and relocation type differ in signedness"));
else
return other;
@@ -1324,8 +1584,7 @@ reloc (unsigned int size,
some cases we force the original symbol to be used. */
int
-tc_i386_fix_adjustable (fixP)
- fixS *fixP ATTRIBUTE_UNUSED;
+tc_i386_fix_adjustable (fixS *fixP ATTRIBUTE_UNUSED)
{
#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
if (!IS_ELF)
@@ -1378,11 +1637,8 @@ tc_i386_fix_adjustable (fixP)
return 1;
}
-static int intel_float_operand PARAMS ((const char *mnemonic));
-
static int
-intel_float_operand (mnemonic)
- const char *mnemonic;
+intel_float_operand (const char *mnemonic)
{
/* Note that the value returned is meaningful only for opcodes with (memory)
operands, hence the code here is free to improperly handle opcodes that
@@ -1465,16 +1721,29 @@ md_assemble (line)
if (line == NULL)
return;
+ /* The order of the immediates should be reversed
+ for 2 immediates extrq and insertq instructions */
+ if ((i.imm_operands == 2)
+ && ((strcmp (mnemonic, "extrq") == 0)
+ || (strcmp (mnemonic, "insertq") == 0)))
+ {
+ swap_2_operands (0, 1);
+ /* "extrq" and insertq" are the only two instructions whose operands
+ have to be reversed even though they have two immediate operands.
+ */
+ if (intel_syntax)
+ swap_operands ();
+ }
+
/* Now we've parsed the mnemonic into a set of templates, and have the
operands at hand. */
/* All intel opcodes have reversed operands except for "bound" and
"enter". We also don't reverse intersegment "jmp" and "call"
instructions with 2 immediate operands so that the immediate segment
- precedes the offset, as it does when in AT&T mode. "enter" and the
- intersegment "jmp" and "call" instructions are the only ones that
- have two immediate operands. */
- if (intel_syntax && i.operands > 1
+ precedes the offset, as it does when in AT&T mode. */
+ if (intel_syntax
+ && i.operands > 1
&& (strcmp (mnemonic, "bound") != 0)
&& (strcmp (mnemonic, "invlpga") != 0)
&& !((i.types[0] & Imm) && (i.types[1] & Imm)))
@@ -1502,7 +1771,7 @@ md_assemble (line)
/* Undo SYSV386_COMPAT brokenness when in Intel mode. See i386.h */
if (SYSV386_COMPAT
&& (i.tm.base_opcode & 0xfffffde0) == 0xdce0)
- i.tm.base_opcode ^= FloatR;
+ i.tm.base_opcode ^= Opcode_FloatR;
/* Zap movzx and movsx suffix. The suffix may have been set from
"word ptr" or "byte ptr" on the source operand, but we'll use
@@ -1556,9 +1825,9 @@ md_assemble (line)
{
expressionS *exp;
- if ((i.tm.cpu_flags & CpuPNI) && i.operands > 0)
+ if ((i.tm.cpu_flags & CpuSSE3) && i.operands > 0)
{
- /* These Intel Prescott New Instructions have the fixed
+ /* Streaming SIMD extensions 3 Instructions have the fixed
operands with an opcode suffix which is coded in the same
place as an 8-bit immediate field would be. Here we check
those operands and remove them afterwards. */
@@ -1566,8 +1835,11 @@ md_assemble (line)
for (x = 0; x < i.operands; x++)
if (i.op[x].regs->reg_num != x)
- as_bad (_("can't use register '%%%s' as operand %d in '%s'."),
- i.op[x].regs->reg_name, x + 1, i.tm.name);
+ as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
+ register_prefix,
+ i.op[x].regs->reg_name,
+ x + 1,
+ i.tm.name);
i.operands = 0;
}
@@ -1616,7 +1888,7 @@ md_assemble (line)
}
if ((i.tm.opcode_modifier & Rex64) != 0)
- i.rex |= REX_MODE64;
+ i.rex |= REX_W;
/* For 8 bit registers we need an empty rex prefix. Also if the
instruction already has a prefix, we need to convert old
@@ -1640,8 +1912,9 @@ md_assemble (line)
{
/* In case it is "hi" register, give up. */
if (i.op[x].regs->reg_num > 3)
- as_bad (_("can't encode register '%%%s' in an instruction requiring REX prefix."),
- i.op[x].regs->reg_name);
+ as_bad (_("can't encode register '%s%s' in an "
+ "instruction requiring REX prefix."),
+ register_prefix, i.op[x].regs->reg_name);
/* Otherwise it is equivalent to the extended register.
Since the encoding doesn't change this is merely
@@ -1660,9 +1933,7 @@ md_assemble (line)
}
static char *
-parse_insn (line, mnemonic)
- char *line;
- char *mnemonic;
+parse_insn (char *line, char *mnemonic)
{
char *l = line;
char *token_start = l;
@@ -1832,9 +2103,9 @@ parse_insn (line, mnemonic)
{
if (!((t->cpu_flags & ~(Cpu64 | CpuNo64))
& ~(cpu_arch_flags & ~(Cpu64 | CpuNo64))))
- supported |= 1;
+ supported |= 1;
if (!(t->cpu_flags & (flag_code == CODE_64BIT ? CpuNo64 : Cpu64)))
- supported |= 2;
+ supported |= 2;
}
if (!(supported & 2))
{
@@ -1867,7 +2138,7 @@ parse_insn (line, mnemonic)
if (t >= current_templates->end)
{
as_bad (_("expecting string instruction after `%s'"),
- expecting_string_instruction);
+ expecting_string_instruction);
return NULL;
}
for (override.start = t; t < current_templates->end; ++t)
@@ -1881,9 +2152,7 @@ parse_insn (line, mnemonic)
}
static char *
-parse_operands (l, mnemonic)
- char *l;
- const char *mnemonic;
+parse_operands (char *l, const char *mnemonic)
{
char *token_start;
@@ -2001,24 +2270,12 @@ parse_operands (l, mnemonic)
}
static void
-swap_operands ()
+swap_2_operands (int xchg1, int xchg2)
{
union i386_op temp_op;
unsigned int temp_type;
enum bfd_reloc_code_real temp_reloc;
- int xchg1 = 0;
- int xchg2 = 0;
- if (i.operands == 2)
- {
- xchg1 = 0;
- xchg2 = 1;
- }
- else if (i.operands == 3)
- {
- xchg1 = 0;
- xchg2 = 2;
- }
temp_type = i.types[xchg2];
i.types[xchg2] = i.types[xchg1];
i.types[xchg1] = temp_type;
@@ -2028,6 +2285,22 @@ swap_operands ()
temp_reloc = i.reloc[xchg2];
i.reloc[xchg2] = i.reloc[xchg1];
i.reloc[xchg1] = temp_reloc;
+}
+
+static void
+swap_operands (void)
+{
+ switch (i.operands)
+ {
+ case 4:
+ swap_2_operands (1, i.operands - 2);
+ case 3:
+ case 2:
+ swap_2_operands (0, i.operands - 1);
+ break;
+ default:
+ abort ();
+ }
if (i.mem_operands == 2)
{
@@ -2041,7 +2314,7 @@ swap_operands ()
/* Try to ensure constant immediates are represented in the smallest
opcode possible. */
static void
-optimize_imm ()
+optimize_imm (void)
{
char guess_suffix = 0;
int op;
@@ -2131,8 +2404,10 @@ optimize_imm ()
unsigned int mask, allowed = 0;
const template *t;
- for (t = current_templates->start; t < current_templates->end; ++t)
- allowed |= t->operand_types[op];
+ for (t = current_templates->start;
+ t < current_templates->end;
+ ++t)
+ allowed |= t->operand_types[op];
switch (guess_suffix)
{
case QWORD_MNEM_SUFFIX:
@@ -2151,8 +2426,8 @@ optimize_imm ()
mask = 0;
break;
}
- if (mask & allowed)
- i.types[op] &= mask;
+ if (mask & allowed)
+ i.types[op] &= mask;
}
break;
}
@@ -2161,7 +2436,7 @@ optimize_imm ()
/* Try to use the smallest displacement type too. */
static void
-optimize_disp ()
+optimize_disp (void)
{
int op;
@@ -2225,13 +2500,20 @@ optimize_disp ()
}
static int
-match_template ()
+match_template (void)
{
/* Points to template once we've found it. */
const template *t;
- unsigned int overlap0, overlap1, overlap2;
+ unsigned int overlap0, overlap1, overlap2, overlap3;
unsigned int found_reverse_match;
int suffix_check;
+ unsigned int operand_types [MAX_OPERANDS];
+ int addr_prefix_disp;
+ unsigned int j;
+
+#if MAX_OPERANDS != 4
+# error "MAX_OPERANDS must be 4."
+#endif
#define MATCH(overlap, given, template) \
((overlap & ~JumpAbsolute) \
@@ -2249,7 +2531,11 @@ match_template ()
overlap0 = 0;
overlap1 = 0;
overlap2 = 0;
+ overlap3 = 0;
found_reverse_match = 0;
+ for (j = 0; j < MAX_OPERANDS; j++)
+ operand_types [j] = 0;
+ addr_prefix_disp = -1;
suffix_check = (i.suffix == BYTE_MNEM_SUFFIX
? No_bSuf
: (i.suffix == WORD_MNEM_SUFFIX
@@ -2265,6 +2551,8 @@ match_template ()
for (t = current_templates->start; t < current_templates->end; t++)
{
+ addr_prefix_disp = -1;
+
/* Must have right number of operands. */
if (i.operands != t->operands)
continue;
@@ -2275,6 +2563,9 @@ match_template ()
&& (t->opcode_modifier & IgnoreSize)))
continue;
+ for (j = 0; j < MAX_OPERANDS; j++)
+ operand_types [j] = t->operand_types [j];
+
/* In general, don't allow 64-bit operands in 32-bit mode. */
if (i.suffix == QWORD_MNEM_SUFFIX
&& flag_code != CODE_64BIT
@@ -2282,8 +2573,8 @@ match_template ()
? (!(t->opcode_modifier & IgnoreSize)
&& !intel_float_operand (t->name))
: intel_float_operand (t->name) != 2)
- && (!(t->operand_types[0] & (RegMMX | RegXMM))
- || !(t->operand_types[t->operands > 1] & (RegMMX | RegXMM)))
+ && (!(operand_types[0] & (RegMMX | RegXMM))
+ || !(operand_types[t->operands > 1] & (RegMMX | RegXMM)))
&& (t->base_opcode != 0x0fc7
|| t->extension_opcode != 1 /* cmpxchg8b */))
continue;
@@ -2297,66 +2588,142 @@ match_template ()
break;
}
- overlap0 = i.types[0] & t->operand_types[0];
+ /* Address size prefix will turn Disp64/Disp32/Disp16 operand
+ into Disp32/Disp16/Disp32 operand. */
+ if (i.prefix[ADDR_PREFIX] != 0)
+ {
+ unsigned int DispOn = 0, DispOff = 0;
+
+ switch (flag_code)
+ {
+ case CODE_16BIT:
+ DispOn = Disp32;
+ DispOff = Disp16;
+ break;
+ case CODE_32BIT:
+ DispOn = Disp16;
+ DispOff = Disp32;
+ break;
+ case CODE_64BIT:
+ DispOn = Disp32;
+ DispOff = Disp64;
+ break;
+ }
+
+ for (j = 0; j < MAX_OPERANDS; j++)
+ {
+ /* There should be only one Disp operand. */
+ if ((operand_types[j] & DispOff))
+ {
+ addr_prefix_disp = j;
+ operand_types[j] |= DispOn;
+ operand_types[j] &= ~DispOff;
+ break;
+ }
+ }
+ }
+
+ overlap0 = i.types[0] & operand_types[0];
switch (t->operands)
{
case 1:
- if (!MATCH (overlap0, i.types[0], t->operand_types[0]))
+ if (!MATCH (overlap0, i.types[0], operand_types[0]))
continue;
break;
case 2:
+ /* xchg %eax, %eax is a special case. It is an aliase for nop
+ only in 32bit mode and we can use opcode 0x90. In 64bit
+ mode, we can't use 0x90 for xchg %eax, %eax since it should
+ zero-extend %eax to %rax. */
+ if (flag_code == CODE_64BIT
+ && t->base_opcode == 0x90
+ && i.types [0] == (Acc | Reg32)
+ && i.types [1] == (Acc | Reg32))
+ continue;
case 3:
- overlap1 = i.types[1] & t->operand_types[1];
- if (!MATCH (overlap0, i.types[0], t->operand_types[0])
- || !MATCH (overlap1, i.types[1], t->operand_types[1])
+ case 4:
+ overlap1 = i.types[1] & operand_types[1];
+ if (!MATCH (overlap0, i.types[0], operand_types[0])
+ || !MATCH (overlap1, i.types[1], operand_types[1])
/* monitor in SSE3 is a very special case. The first
- register and the second register may have differnet
- sizes. */
+ register and the second register may have different
+ sizes. The same applies to crc32 in SSE4.2. */
|| !((t->base_opcode == 0x0f01
&& t->extension_opcode == 0xc8)
+ || t->base_opcode == 0xf20f38f1
|| CONSISTENT_REGISTER_MATCH (overlap0, i.types[0],
- t->operand_types[0],
+ operand_types[0],
overlap1, i.types[1],
- t->operand_types[1])))
+ operand_types[1])))
{
/* Check if other direction is valid ... */
if ((t->opcode_modifier & (D | FloatD)) == 0)
continue;
/* Try reversing direction of operands. */
- overlap0 = i.types[0] & t->operand_types[1];
- overlap1 = i.types[1] & t->operand_types[0];
- if (!MATCH (overlap0, i.types[0], t->operand_types[1])
- || !MATCH (overlap1, i.types[1], t->operand_types[0])
+ overlap0 = i.types[0] & operand_types[1];
+ overlap1 = i.types[1] & operand_types[0];
+ if (!MATCH (overlap0, i.types[0], operand_types[1])
+ || !MATCH (overlap1, i.types[1], operand_types[0])
|| !CONSISTENT_REGISTER_MATCH (overlap0, i.types[0],
- t->operand_types[1],
+ operand_types[1],
overlap1, i.types[1],
- t->operand_types[0]))
+ operand_types[0]))
{
/* Does not match either direction. */
continue;
}
/* found_reverse_match holds which of D or FloatDR
we've found. */
- found_reverse_match = t->opcode_modifier & (D | FloatDR);
+ if ((t->opcode_modifier & D))
+ found_reverse_match = Opcode_D;
+ else if ((t->opcode_modifier & FloatD))
+ found_reverse_match = Opcode_FloatD;
+ else
+ found_reverse_match = 0;
+ if ((t->opcode_modifier & FloatR))
+ found_reverse_match |= Opcode_FloatR;
}
- /* Found a forward 2 operand match here. */
- else if (t->operands == 3)
+ else
{
- /* Here we make use of the fact that there are no
- reverse match 3 operand instructions, and all 3
- operand instructions only need to be checked for
- register consistency between operands 2 and 3. */
- overlap2 = i.types[2] & t->operand_types[2];
- if (!MATCH (overlap2, i.types[2], t->operand_types[2])
- || !CONSISTENT_REGISTER_MATCH (overlap1, i.types[1],
- t->operand_types[1],
- overlap2, i.types[2],
- t->operand_types[2]))
+ /* Found a forward 2 operand match here. */
+ switch (t->operands)
+ {
+ case 4:
+ overlap3 = i.types[3] & operand_types[3];
+ case 3:
+ overlap2 = i.types[2] & operand_types[2];
+ break;
+ }
- continue;
+ switch (t->operands)
+ {
+ case 4:
+ if (!MATCH (overlap3, i.types[3], operand_types[3])
+ || !CONSISTENT_REGISTER_MATCH (overlap2,
+ i.types[2],
+ operand_types[2],
+ overlap3,
+ i.types[3],
+ operand_types[3]))
+ continue;
+ case 3:
+ /* Here we make use of the fact that there are no
+ reverse match 3 operand instructions, and all 3
+ operand instructions only need to be checked for
+ register consistency between operands 2 and 3. */
+ if (!MATCH (overlap2, i.types[2], operand_types[2])
+ || !CONSISTENT_REGISTER_MATCH (overlap1,
+ i.types[1],
+ operand_types[1],
+ overlap2,
+ i.types[2],
+ operand_types[2]))
+ continue;
+ break;
+ }
}
- /* Found either forward/reverse 2 or 3 operand match here:
+ /* Found either forward/reverse 2, 3 or 4 operand match here:
slip through to break. */
}
if (t->cpu_flags & ~cpu_arch_flags)
@@ -2380,7 +2747,7 @@ match_template ()
{
if (!intel_syntax
&& ((i.types[0] & JumpAbsolute)
- != (t->operand_types[0] & JumpAbsolute)))
+ != (operand_types[0] & JumpAbsolute)))
{
as_warn (_("indirect %s without `*'"), t->name);
}
@@ -2396,6 +2763,11 @@ match_template ()
/* Copy the template we found. */
i.tm = *t;
+
+ if (addr_prefix_disp != -1)
+ i.tm.operand_types[addr_prefix_disp]
+ = operand_types[addr_prefix_disp];
+
if (found_reverse_match)
{
/* If we found a reverse match we must alter the opcode
@@ -2404,15 +2776,15 @@ match_template ()
i.tm.base_opcode ^= found_reverse_match;
- i.tm.operand_types[0] = t->operand_types[1];
- i.tm.operand_types[1] = t->operand_types[0];
+ i.tm.operand_types[0] = operand_types[1];
+ i.tm.operand_types[1] = operand_types[0];
}
return 1;
}
static int
-check_string ()
+check_string (void)
{
int mem_op = (i.types[0] & AnyMem) ? 0 : 1;
if ((i.tm.operand_types[mem_op] & EsSeg) != 0)
@@ -2465,19 +2837,44 @@ process_suffix (void)
{
/* We take i.suffix from the last register operand specified,
Destination register type is more significant than source
- register type. */
- int op;
-
- for (op = i.operands; --op >= 0;)
- if ((i.types[op] & Reg)
- && !(i.tm.operand_types[op] & InOutPortReg))
- {
- i.suffix = ((i.types[op] & Reg8) ? BYTE_MNEM_SUFFIX :
- (i.types[op] & Reg16) ? WORD_MNEM_SUFFIX :
- (i.types[op] & Reg64) ? QWORD_MNEM_SUFFIX :
+ register type. crc32 in SSE4.2 prefers source register
+ type. */
+ if (i.tm.base_opcode == 0xf20f38f1)
+ {
+ if ((i.types[0] & Reg))
+ i.suffix = ((i.types[0] & Reg16) ? WORD_MNEM_SUFFIX :
LONG_MNEM_SUFFIX);
- break;
- }
+ }
+ else if (i.tm.base_opcode == 0xf20f38f0)
+ {
+ if ((i.types[0] & Reg8))
+ i.suffix = BYTE_MNEM_SUFFIX;
+ }
+
+ if (!i.suffix)
+ {
+ int op;
+
+ if (i.tm.base_opcode == 0xf20f38f1
+ || i.tm.base_opcode == 0xf20f38f0)
+ {
+ /* We have to know the operand size for crc32. */
+ as_bad (_("ambiguous memory operand size for `%s`"),
+ i.tm.name);
+ return 0;
+ }
+
+ for (op = i.operands; --op >= 0;)
+ if ((i.types[op] & Reg)
+ && !(i.tm.operand_types[op] & InOutPortReg))
+ {
+ i.suffix = ((i.types[op] & Reg8) ? BYTE_MNEM_SUFFIX :
+ (i.types[op] & Reg16) ? WORD_MNEM_SUFFIX :
+ (i.types[op] & Reg64) ? QWORD_MNEM_SUFFIX :
+ LONG_MNEM_SUFFIX);
+ break;
+ }
+ }
}
else if (i.suffix == BYTE_MNEM_SUFFIX)
{
@@ -2515,9 +2912,9 @@ process_suffix (void)
else if (intel_syntax
&& !i.suffix
&& ((i.tm.operand_types[0] & JumpAbsolute)
- || (i.tm.opcode_modifier & (JumpByte|JumpInterSegment))
- || (i.tm.base_opcode == 0x0f01 /* [ls][gi]dt */
- && i.tm.extension_opcode <= 3)))
+ || (i.tm.opcode_modifier & (JumpByte|JumpInterSegment))
+ || (i.tm.base_opcode == 0x0f01 /* [ls][gi]dt */
+ && i.tm.extension_opcode <= 3)))
{
switch (flag_code)
{
@@ -2544,19 +2941,20 @@ process_suffix (void)
{
if (i.tm.opcode_modifier & W)
{
- as_bad (_("no instruction mnemonic suffix given and no register operands; can't size instruction"));
+ as_bad (_("no instruction mnemonic suffix given and "
+ "no register operands; can't size instruction"));
return 0;
}
}
else
{
- unsigned int suffixes = ~i.tm.opcode_modifier
- & (No_bSuf
- | No_wSuf
- | No_lSuf
- | No_sSuf
- | No_xSuf
- | No_qSuf);
+ unsigned int suffixes = (~i.tm.opcode_modifier
+ & (No_bSuf
+ | No_wSuf
+ | No_lSuf
+ | No_sSuf
+ | No_xSuf
+ | No_qSuf));
if ((i.tm.opcode_modifier & W)
|| ((suffixes & (suffixes - 1))
@@ -2615,7 +3013,15 @@ process_suffix (void)
if (i.suffix == QWORD_MNEM_SUFFIX
&& flag_code == CODE_64BIT
&& (i.tm.opcode_modifier & NoRex64) == 0)
- i.rex |= REX_MODE64;
+ {
+ /* Special case for xchg %rax,%rax. It is NOP and doesn't
+ need rex64. */
+ if (i.operands != 2
+ || i.types [0] != (Acc | Reg64)
+ || i.types [1] != (Acc | Reg64)
+ || i.tm.base_opcode != 0x90)
+ i.rex |= REX_W;
+ }
/* Size floating point instruction. */
if (i.suffix == LONG_MNEM_SUFFIX)
@@ -2648,6 +3054,10 @@ check_byte_reg (void)
|| i.tm.base_opcode == 0xfbf))
continue;
+ /* crc32 doesn't generate this warning. */
+ if (i.tm.base_opcode == 0xf20f38f0)
+ continue;
+
if ((i.types[op] & WordReg) && i.op[op].regs->reg_num < 4)
{
/* Prohibit these changes in the 64bit mode, since the
@@ -2655,18 +3065,20 @@ check_byte_reg (void)
if (flag_code == CODE_64BIT
&& (i.tm.operand_types[op] & InOutPortReg) == 0)
{
- as_bad (_("Incorrect register `%%%s' used with `%c' suffix"),
- i.op[op].regs->reg_name,
+ as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
+ register_prefix, i.op[op].regs->reg_name,
i.suffix);
return 0;
}
#if REGISTER_WARNINGS
if (!quiet_warnings
&& (i.tm.operand_types[op] & InOutPortReg) == 0)
- as_warn (_("using `%%%s' instead of `%%%s' due to `%c' suffix"),
+ as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
+ register_prefix,
(i.op[op].regs + (i.types[op] & Reg16
? REGNAM_AL - REGNAM_AX
: REGNAM_AL - REGNAM_EAX))->reg_name,
+ register_prefix,
i.op[op].regs->reg_name,
i.suffix);
#endif
@@ -2678,7 +3090,8 @@ check_byte_reg (void)
| Control | Debug | Test
| FloatReg | FloatAcc))
{
- as_bad (_("`%%%s' not allowed with `%s%c'"),
+ as_bad (_("`%s%s' not allowed with `%s%c'"),
+ register_prefix,
i.op[op].regs->reg_name,
i.tm.name,
i.suffix);
@@ -2689,7 +3102,7 @@ check_byte_reg (void)
}
static int
-check_long_reg ()
+check_long_reg (void)
{
int op;
@@ -2699,7 +3112,8 @@ check_long_reg ()
if ((i.types[op] & Reg8) != 0
&& (i.tm.operand_types[op] & (Reg16 | Reg32 | Acc)) != 0)
{
- as_bad (_("`%%%s' not allowed with `%s%c'"),
+ as_bad (_("`%s%s' not allowed with `%s%c'"),
+ register_prefix,
i.op[op].regs->reg_name,
i.tm.name,
i.suffix);
@@ -2714,15 +3128,17 @@ check_long_reg ()
lowering is more complicated. */
if (flag_code == CODE_64BIT)
{
- as_bad (_("Incorrect register `%%%s' used with `%c' suffix"),
- i.op[op].regs->reg_name,
+ as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
+ register_prefix, i.op[op].regs->reg_name,
i.suffix);
return 0;
}
#if REGISTER_WARNINGS
else
- as_warn (_("using `%%%s' instead of `%%%s' due to `%c' suffix"),
+ as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
+ register_prefix,
(i.op[op].regs + REGNAM_EAX - REGNAM_AX)->reg_name,
+ register_prefix,
i.op[op].regs->reg_name,
i.suffix);
#endif
@@ -2731,8 +3147,8 @@ check_long_reg ()
else if ((i.types[op] & Reg64) != 0
&& (i.tm.operand_types[op] & (Reg32 | Acc)) != 0)
{
- as_bad (_("Incorrect register `%%%s' used with `%c' suffix"),
- i.op[op].regs->reg_name,
+ as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
+ register_prefix, i.op[op].regs->reg_name,
i.suffix);
return 0;
}
@@ -2740,7 +3156,7 @@ check_long_reg ()
}
static int
-check_qword_reg ()
+check_qword_reg (void)
{
int op;
@@ -2750,7 +3166,8 @@ check_qword_reg ()
if ((i.types[op] & Reg8) != 0
&& (i.tm.operand_types[op] & (Reg16 | Reg32 | Acc)) != 0)
{
- as_bad (_("`%%%s' not allowed with `%s%c'"),
+ as_bad (_("`%s%s' not allowed with `%s%c'"),
+ register_prefix,
i.op[op].regs->reg_name,
i.tm.name,
i.suffix);
@@ -2763,8 +3180,8 @@ check_qword_reg ()
{
/* Prohibit these changes in the 64bit mode, since the
lowering is more complicated. */
- as_bad (_("Incorrect register `%%%s' used with `%c' suffix"),
- i.op[op].regs->reg_name,
+ as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
+ register_prefix, i.op[op].regs->reg_name,
i.suffix);
return 0;
}
@@ -2772,7 +3189,7 @@ check_qword_reg ()
}
static int
-check_word_reg ()
+check_word_reg (void)
{
int op;
for (op = i.operands; --op >= 0;)
@@ -2781,7 +3198,8 @@ check_word_reg ()
if ((i.types[op] & Reg8) != 0
&& (i.tm.operand_types[op] & (Reg16 | Reg32 | Acc)) != 0)
{
- as_bad (_("`%%%s' not allowed with `%s%c'"),
+ as_bad (_("`%s%s' not allowed with `%s%c'"),
+ register_prefix,
i.op[op].regs->reg_name,
i.tm.name,
i.suffix);
@@ -2796,15 +3214,17 @@ check_word_reg ()
lowering is more complicated. */
if (flag_code == CODE_64BIT)
{
- as_bad (_("Incorrect register `%%%s' used with `%c' suffix"),
- i.op[op].regs->reg_name,
+ as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
+ register_prefix, i.op[op].regs->reg_name,
i.suffix);
return 0;
}
else
#if REGISTER_WARNINGS
- as_warn (_("using `%%%s' instead of `%%%s' due to `%c' suffix"),
+ as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
+ register_prefix,
(i.op[op].regs + REGNAM_AX - REGNAM_EAX)->reg_name,
+ register_prefix,
i.op[op].regs->reg_name,
i.suffix);
#endif
@@ -2813,7 +3233,7 @@ check_word_reg ()
}
static int
-finalize_imm ()
+finalize_imm (void)
{
unsigned int overlap0, overlap1, overlap2;
@@ -2844,7 +3264,8 @@ finalize_imm ()
&& overlap0 != Imm16 && overlap0 != Imm32S
&& overlap0 != Imm32 && overlap0 != Imm64)
{
- as_bad (_("no instruction mnemonic suffix given; can't determine immediate size"));
+ as_bad (_("no instruction mnemonic suffix given; "
+ "can't determine immediate size"));
return 0;
}
}
@@ -2877,7 +3298,9 @@ finalize_imm ()
&& overlap1 != Imm16 && overlap1 != Imm32S
&& overlap1 != Imm32 && overlap1 != Imm64)
{
- as_bad (_("no instruction mnemonic suffix given; can't determine immediate size %x %c"),overlap1, i.suffix);
+ as_bad (_("no instruction mnemonic suffix given; "
+ "can't determine immediate size %x %c"),
+ overlap1, i.suffix);
return 0;
}
}
@@ -2891,7 +3314,7 @@ finalize_imm ()
}
static int
-process_operands ()
+process_operands (void)
{
/* Default segment register this instruction will use for memory
accesses. 0 means unknown. This is only for optimizing out
@@ -2901,40 +3324,90 @@ process_operands ()
/* The imul $imm, %reg instruction is converted into
imul $imm, %reg, %reg, and the clr %reg instruction
is converted into xor %reg, %reg. */
- if (i.tm.opcode_modifier & regKludge)
- {
- unsigned int first_reg_op = (i.types[0] & Reg) ? 0 : 1;
- /* Pretend we saw the extra register operand. */
- assert (i.op[first_reg_op + 1].regs == 0);
- i.op[first_reg_op + 1].regs = i.op[first_reg_op].regs;
- i.types[first_reg_op + 1] = i.types[first_reg_op];
- i.reg_operands = 2;
+ if (i.tm.opcode_modifier & RegKludge)
+ {
+ if ((i.tm.cpu_flags & CpuSSE4_1))
+ {
+ /* The first operand in instruction blendvpd, blendvps and
+ pblendvb in SSE4.1 is implicit and must be xmm0. */
+ assert (i.operands == 3
+ && i.reg_operands >= 2
+ && i.types[0] == RegXMM);
+ if (i.op[0].regs->reg_num != 0)
+ {
+ if (intel_syntax)
+ as_bad (_("the last operand of `%s' must be `%sxmm0'"),
+ i.tm.name, register_prefix);
+ else
+ as_bad (_("the first operand of `%s' must be `%sxmm0'"),
+ i.tm.name, register_prefix);
+ return 0;
+ }
+ i.op[0] = i.op[1];
+ i.op[1] = i.op[2];
+ i.types[0] = i.types[1];
+ i.types[1] = i.types[2];
+ i.operands--;
+ i.reg_operands--;
+
+ /* We need to adjust fields in i.tm since they are used by
+ build_modrm_byte. */
+ i.tm.operand_types [0] = i.tm.operand_types [1];
+ i.tm.operand_types [1] = i.tm.operand_types [2];
+ i.tm.operands--;
+ }
+ else
+ {
+ unsigned int first_reg_op = (i.types[0] & Reg) ? 0 : 1;
+ /* Pretend we saw the extra register operand. */
+ assert (i.reg_operands == 1
+ && i.op[first_reg_op + 1].regs == 0);
+ i.op[first_reg_op + 1].regs = i.op[first_reg_op].regs;
+ i.types[first_reg_op + 1] = i.types[first_reg_op];
+ i.operands++;
+ i.reg_operands++;
+ }
}
if (i.tm.opcode_modifier & ShortForm)
{
- /* The register or float register operand is in operand 0 or 1. */
- unsigned int op = (i.types[0] & (Reg | FloatReg)) ? 0 : 1;
- /* Register goes in low 3 bits of opcode. */
- i.tm.base_opcode |= i.op[op].regs->reg_num;
- if ((i.op[op].regs->reg_flags & RegRex) != 0)
- i.rex |= REX_EXTZ;
- if (!quiet_warnings && (i.tm.opcode_modifier & Ugh) != 0)
+ if (i.types[0] & (SReg2 | SReg3))
{
- /* Warn about some common errors, but press on regardless.
- The first case can be generated by gcc (<= 2.8.1). */
- if (i.operands == 2)
+ if (i.tm.base_opcode == POP_SEG_SHORT
+ && i.op[0].regs->reg_num == 1)
{
- /* Reversed arguments on faddp, fsubp, etc. */
- as_warn (_("translating to `%s %%%s,%%%s'"), i.tm.name,
- i.op[1].regs->reg_name,
- i.op[0].regs->reg_name);
+ as_bad (_("you can't `pop %%cs'"));
+ return 0;
}
- else
+ i.tm.base_opcode |= (i.op[0].regs->reg_num << 3);
+ if ((i.op[0].regs->reg_flags & RegRex) != 0)
+ i.rex |= REX_B;
+ }
+ else
+ {
+ /* The register or float register operand is in operand 0 or 1. */
+ unsigned int op = (i.types[0] & (Reg | FloatReg)) ? 0 : 1;
+ /* Register goes in low 3 bits of opcode. */
+ i.tm.base_opcode |= i.op[op].regs->reg_num;
+ if ((i.op[op].regs->reg_flags & RegRex) != 0)
+ i.rex |= REX_B;
+ if (!quiet_warnings && (i.tm.opcode_modifier & Ugh) != 0)
{
- /* Extraneous `l' suffix on fp insn. */
- as_warn (_("translating to `%s %%%s'"), i.tm.name,
- i.op[0].regs->reg_name);
+ /* Warn about some common errors, but press on regardless.
+ The first case can be generated by gcc (<= 2.8.1). */
+ if (i.operands == 2)
+ {
+ /* Reversed arguments on faddp, fsubp, etc. */
+ as_warn (_("translating to `%s %s%s,%s%s'"), i.tm.name,
+ register_prefix, i.op[1].regs->reg_name,
+ register_prefix, i.op[0].regs->reg_name);
+ }
+ else
+ {
+ /* Extraneous `l' suffix on fp insn. */
+ as_warn (_("translating to `%s %s%s'"), i.tm.name,
+ register_prefix, i.op[0].regs->reg_name);
+ }
}
}
}
@@ -2946,19 +3419,7 @@ process_operands ()
default_seg = build_modrm_byte ();
}
- else if (i.tm.opcode_modifier & (Seg2ShortForm | Seg3ShortForm))
- {
- if (i.tm.base_opcode == POP_SEG_SHORT
- && i.op[0].regs->reg_num == 1)
- {
- as_bad (_("you can't `pop %%cs'"));
- return 0;
- }
- i.tm.base_opcode |= (i.op[0].regs->reg_num << 3);
- if ((i.op[0].regs->reg_flags & RegRex) != 0)
- i.rex |= REX_EXTZ;
- }
- else if ((i.tm.base_opcode & ~(D | W)) == MOV_AX_DISP32)
+ else if ((i.tm.base_opcode & ~0x3) == MOV_AX_DISP32)
{
default_seg = &ds;
}
@@ -2988,7 +3449,7 @@ process_operands ()
}
static const seg_entry *
-build_modrm_byte ()
+build_modrm_byte (void)
{
const seg_entry *default_seg = 0;
@@ -2997,11 +3458,33 @@ build_modrm_byte ()
if (i.reg_operands == 2)
{
unsigned int source, dest;
- source = ((i.types[0]
- & (Reg | RegMMX | RegXMM
- | SReg2 | SReg3
- | Control | Debug | Test))
- ? 0 : 1);
+
+ switch (i.operands)
+ {
+ case 2:
+ source = 0;
+ break;
+ case 3:
+ /* When there are 3 operands, one of them may be immediate,
+ which may be the first or the last operand. Otherwise,
+ the first operand must be shift count register (cl). */
+ assert (i.imm_operands == 1
+ || (i.imm_operands == 0
+ && (i.types[0] & ShiftCount)));
+ source = (i.types[0] & (Imm | ShiftCount)) ? 1 : 0;
+ break;
+ case 4:
+ /* When there are 4 operands, the first two must be immediate
+ operands. The source operand will be the 3rd one. */
+ assert (i.imm_operands == 2
+ && (i.types[0] & Imm)
+ && (i.types[1] & Imm));
+ source = 2;
+ break;
+ default:
+ abort ();
+ }
+
dest = source + 1;
i.rm.mode = 3;
@@ -3011,29 +3494,29 @@ build_modrm_byte ()
destination operand, then we assume the source operand may
sometimes be a memory operand and so we need to store the
destination in the i.rm.reg field. */
- if ((i.tm.operand_types[dest] & AnyMem) == 0)
+ if ((i.tm.operand_types[dest] & (AnyMem | RegMem)) == 0)
{
i.rm.reg = i.op[dest].regs->reg_num;
i.rm.regmem = i.op[source].regs->reg_num;
if ((i.op[dest].regs->reg_flags & RegRex) != 0)
- i.rex |= REX_EXTX;
+ i.rex |= REX_R;
if ((i.op[source].regs->reg_flags & RegRex) != 0)
- i.rex |= REX_EXTZ;
+ i.rex |= REX_B;
}
else
{
i.rm.reg = i.op[source].regs->reg_num;
i.rm.regmem = i.op[dest].regs->reg_num;
if ((i.op[dest].regs->reg_flags & RegRex) != 0)
- i.rex |= REX_EXTZ;
+ i.rex |= REX_B;
if ((i.op[source].regs->reg_flags & RegRex) != 0)
- i.rex |= REX_EXTX;
+ i.rex |= REX_R;
}
- if (flag_code != CODE_64BIT && (i.rex & (REX_EXTX | REX_EXTZ)))
+ if (flag_code != CODE_64BIT && (i.rex & (REX_R | REX_B)))
{
if (!((i.types[0] | i.types[1]) & Control))
abort ();
- i.rex &= ~(REX_EXTX | REX_EXTZ);
+ i.rex &= ~(REX_R | REX_B);
add_prefix (LOCK_PREFIX_OPCODE);
}
}
@@ -3042,9 +3525,12 @@ build_modrm_byte ()
if (i.mem_operands)
{
unsigned int fake_zero_displacement = 0;
- unsigned int op = ((i.types[0] & AnyMem)
- ? 0
- : (i.types[1] & AnyMem) ? 1 : 2);
+ unsigned int op;
+
+ for (op = 0; op < i.operands; op++)
+ if ((i.types[op] & AnyMem))
+ break;
+ assert (op < i.operands);
default_seg = &ds;
@@ -3065,9 +3551,11 @@ build_modrm_byte ()
i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
i.sib.base = NO_BASE_REGISTER;
i.sib.index = NO_INDEX_REGISTER;
- i.types[op] = ((i.prefix[ADDR_PREFIX] == 0) ? Disp32S : Disp32);
+ i.types[op] = ((i.prefix[ADDR_PREFIX] == 0)
+ ? Disp32S : Disp32);
}
- else if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
+ else if ((flag_code == CODE_16BIT)
+ ^ (i.prefix[ADDR_PREFIX] != 0))
{
i.rm.regmem = NO_BASE_REGISTER_16;
i.types[op] = Disp16;
@@ -3090,7 +3578,7 @@ build_modrm_byte ()
else
i.types[op] |= Disp32S;
if ((i.index_reg->reg_flags & RegRex) != 0)
- i.rex |= REX_EXTY;
+ i.rex |= REX_X;
}
}
/* RIP addressing for 64bit mode. */
@@ -3099,7 +3587,7 @@ build_modrm_byte ()
i.rm.regmem = NO_BASE_REGISTER;
i.types[op] &= ~ Disp;
i.types[op] |= Disp32S;
- i.flags[op] = Operand_PCrel;
+ i.flags[op] |= Operand_PCrel;
if (! i.disp_operands)
fake_zero_displacement = 1;
}
@@ -3137,11 +3625,13 @@ build_modrm_byte ()
{
if (flag_code == CODE_64BIT
&& (i.types[op] & Disp))
- i.types[op] = (i.types[op] & Disp8) | (i.prefix[ADDR_PREFIX] == 0 ? Disp32S : Disp32);
+ i.types[op] = ((i.types[op] & Disp8)
+ | (i.prefix[ADDR_PREFIX] == 0
+ ? Disp32S : Disp32));
i.rm.regmem = i.base_reg->reg_num;
if ((i.base_reg->reg_flags & RegRex) != 0)
- i.rex |= REX_EXTZ;
+ i.rex |= REX_B;
i.sib.base = i.base_reg->reg_num;
/* x86-64 ignores REX prefix bit here to avoid decoder
complications. */
@@ -3178,7 +3668,7 @@ build_modrm_byte ()
i.sib.index = i.index_reg->reg_num;
i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
if ((i.index_reg->reg_flags & RegRex) != 0)
- i.rex |= REX_EXTY;
+ i.rex |= REX_X;
}
if (i.disp_operands
@@ -3211,31 +3701,28 @@ build_modrm_byte ()
registers are coded into the i.rm.reg field. */
if (i.reg_operands)
{
- unsigned int op =
- ((i.types[0]
- & (Reg | RegMMX | RegXMM
- | SReg2 | SReg3
- | Control | Debug | Test))
- ? 0
- : ((i.types[1]
- & (Reg | RegMMX | RegXMM
- | SReg2 | SReg3
- | Control | Debug | Test))
- ? 1
- : 2));
+ unsigned int op;
+
+ for (op = 0; op < i.operands; op++)
+ if ((i.types[op] & (Reg | RegMMX | RegXMM
+ | SReg2 | SReg3
+ | Control | Debug | Test)))
+ break;
+ assert (op < i.operands);
+
/* If there is an extension opcode to put here, the register
number must be put into the regmem field. */
if (i.tm.extension_opcode != None)
{
i.rm.regmem = i.op[op].regs->reg_num;
if ((i.op[op].regs->reg_flags & RegRex) != 0)
- i.rex |= REX_EXTZ;
+ i.rex |= REX_B;
}
else
{
i.rm.reg = i.op[op].regs->reg_num;
if ((i.op[op].regs->reg_flags & RegRex) != 0)
- i.rex |= REX_EXTX;
+ i.rex |= REX_R;
}
/* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we
@@ -3253,7 +3740,7 @@ build_modrm_byte ()
}
static void
-output_branch ()
+output_branch (void)
{
char *p;
int code16;
@@ -3331,7 +3818,7 @@ output_branch ()
}
static void
-output_jump ()
+output_jump (void)
{
char *p;
int size;
@@ -3397,7 +3884,7 @@ output_jump ()
}
static void
-output_interseg_jump ()
+output_interseg_jump (void)
{
char *p;
int size;
@@ -3461,7 +3948,7 @@ output_interseg_jump ()
}
static void
-output_insn ()
+output_insn (void)
{
fragS *insn_start_frag;
offsetT insn_start_off;
@@ -3488,10 +3975,12 @@ output_insn ()
unsigned char *q;
unsigned int prefix;
- /* All opcodes on i386 have either 1 or 2 bytes. Merom New
- Instructions have 3 bytes. We may use one more higher byte
- to specify a prefix the instruction requires. */
- if ((i.tm.cpu_flags & CpuMNI) != 0)
+ /* All opcodes on i386 have either 1 or 2 bytes. SSSE3 and
+ SSE4 instructions have 3 bytes. We may use one more higher
+ byte to specify a prefix the instruction requires. Exclude
+ instructions which are in both SSE4 and ABM. */
+ if ((i.tm.cpu_flags & (CpuSSSE3 | CpuSSE4)) != 0
+ && (i.tm.cpu_flags & CpuABM) == 0)
{
if (i.tm.base_opcode & 0xff000000)
{
@@ -3504,7 +3993,7 @@ output_insn ()
prefix = (i.tm.base_opcode >> 16) & 0xff;
if ((i.tm.cpu_flags & CpuPadLock) != 0)
{
-check_prefix:
+ check_prefix:
if (prefix != REPE_PREFIX_OPCODE
|| i.prefix[LOCKREP_PREFIX] != REPE_PREFIX_OPCODE)
add_prefix (prefix);
@@ -3532,7 +4021,8 @@ check_prefix:
}
else
{
- if ((i.tm.cpu_flags & CpuMNI) != 0)
+ if ((i.tm.cpu_flags & (CpuSSSE3 | CpuSSE4)) != 0
+ && (i.tm.cpu_flags & CpuABM) == 0)
{
p = frag_more (3);
*p++ = (i.tm.base_opcode >> 16) & 0xff;
@@ -3586,10 +4076,42 @@ check_prefix:
#endif /* DEBUG386 */
}
+/* Return the size of the displacement operand N. */
+
+static int
+disp_size (unsigned int n)
+{
+ int size = 4;
+ if (i.types[n] & (Disp8 | Disp16 | Disp64))
+ {
+ size = 2;
+ if (i.types[n] & Disp8)
+ size = 1;
+ if (i.types[n] & Disp64)
+ size = 8;
+ }
+ return size;
+}
+
+/* Return the size of the immediate operand N. */
+
+static int
+imm_size (unsigned int n)
+{
+ int size = 4;
+ if (i.types[n] & (Imm8 | Imm8S | Imm16 | Imm64))
+ {
+ size = 2;
+ if (i.types[n] & (Imm8 | Imm8S))
+ size = 1;
+ if (i.types[n] & Imm64)
+ size = 8;
+ }
+ return size;
+}
+
static void
-output_disp (insn_start_frag, insn_start_off)
- fragS *insn_start_frag;
- offsetT insn_start_off;
+output_disp (fragS *insn_start_frag, offsetT insn_start_off)
{
char *p;
unsigned int n;
@@ -3600,18 +4122,9 @@ output_disp (insn_start_frag, insn_start_off)
{
if (i.op[n].disps->X_op == O_constant)
{
- int size;
+ int size = disp_size (n);
offsetT val;
- size = 4;
- if (i.types[n] & (Disp8 | Disp16 | Disp64))
- {
- size = 2;
- if (i.types[n] & Disp8)
- size = 1;
- if (i.types[n] & Disp64)
- size = 8;
- }
val = offset_in_range (i.op[n].disps->X_add_number,
size);
p = frag_more (size);
@@ -3620,45 +4133,32 @@ output_disp (insn_start_frag, insn_start_off)
else
{
enum bfd_reloc_code_real reloc_type;
- int size = 4;
- int sign = 0;
+ int size = disp_size (n);
+ int sign = (i.types[n] & Disp32S) != 0;
int pcrel = (i.flags[n] & Operand_PCrel) != 0;
+ /* We can't have 8 bit displacement here. */
+ assert ((i.types[n] & Disp8) == 0);
+
/* The PC relative address is computed relative
to the instruction boundary, so in case immediate
fields follows, we need to adjust the value. */
if (pcrel && i.imm_operands)
{
- int imm_size = 4;
unsigned int n1;
+ int sz = 0;
for (n1 = 0; n1 < i.operands; n1++)
if (i.types[n1] & Imm)
{
- if (i.types[n1] & (Imm8 | Imm8S | Imm16 | Imm64))
- {
- imm_size = 2;
- if (i.types[n1] & (Imm8 | Imm8S))
- imm_size = 1;
- if (i.types[n1] & Imm64)
- imm_size = 8;
- }
- break;
+ /* Only one immediate is allowed for PC
+ relative address. */
+ assert (sz == 0);
+ sz = imm_size (n1);
+ i.op[n].disps->X_add_number -= sz;
}
/* We should find the immediate. */
- if (n1 == i.operands)
- abort ();
- i.op[n].disps->X_add_number -= imm_size;
- }
-
- if (i.types[n] & Disp32S)
- sign = 1;
-
- if (i.types[n] & (Disp16 | Disp64))
- {
- size = 2;
- if (i.types[n] & Disp64)
- size = 8;
+ assert (sz != 0);
}
p = frag_more (size);
@@ -3712,9 +4212,7 @@ output_disp (insn_start_frag, insn_start_off)
}
static void
-output_imm (insn_start_frag, insn_start_off)
- fragS *insn_start_frag;
- offsetT insn_start_off;
+output_imm (fragS *insn_start_frag, offsetT insn_start_off)
{
char *p;
unsigned int n;
@@ -3725,18 +4223,9 @@ output_imm (insn_start_frag, insn_start_off)
{
if (i.op[n].imms->X_op == O_constant)
{
- int size;
+ int size = imm_size (n);
offsetT val;
- size = 4;
- if (i.types[n] & (Imm8 | Imm8S | Imm16 | Imm64))
- {
- size = 2;
- if (i.types[n] & (Imm8 | Imm8S))
- size = 1;
- else if (i.types[n] & Imm64)
- size = 8;
- }
val = offset_in_range (i.op[n].imms->X_add_number,
size);
p = frag_more (size);
@@ -3749,21 +4238,15 @@ output_imm (insn_start_frag, insn_start_off)
non-absolute imms). Try to support other
sizes ... */
enum bfd_reloc_code_real reloc_type;
- int size = 4;
- int sign = 0;
+ int size = imm_size (n);
+ int sign;
if ((i.types[n] & (Imm32S))
&& (i.suffix == QWORD_MNEM_SUFFIX
|| (!i.suffix && (i.tm.opcode_modifier & No_lSuf))))
sign = 1;
- if (i.types[n] & (Imm8 | Imm8S | Imm16 | Imm64))
- {
- size = 2;
- if (i.types[n] & (Imm8 | Imm8S))
- size = 1;
- if (i.types[n] & Imm64)
- size = 8;
- }
+ else
+ sign = 0;
p = frag_more (size);
reloc_type = reloc (size, 0, sign, i.reloc[n]);
@@ -3857,10 +4340,8 @@ static enum bfd_reloc_code_real got_reloc = NO_RELOC;
static int cons_sign = -1;
void
-x86_cons_fix_new (fragS *frag,
- unsigned int off,
- unsigned int len,
- expressionS *exp)
+x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
+ expressionS *exp)
{
enum bfd_reloc_code_real r = reloc (len, 0, cons_sign, got_reloc);
@@ -3891,8 +4372,8 @@ x86_cons_fix_new (fragS *frag,
input line. Otherwise return NULL. */
static char *
lex_got (enum bfd_reloc_code_real *reloc,
- int *adjust,
- unsigned int *types)
+ int *adjust,
+ unsigned int *types)
{
/* Some of the relocations depend on the size of what field is to
be relocated. But in our callers i386_immediate and i386_displacement
@@ -3904,23 +4385,57 @@ lex_got (enum bfd_reloc_code_real *reloc,
const enum bfd_reloc_code_real rel[2];
const unsigned int types64;
} gotrel[] = {
- { "PLTOFF", { 0, BFD_RELOC_X86_64_PLTOFF64 }, Imm64 },
- { "PLT", { BFD_RELOC_386_PLT32, BFD_RELOC_X86_64_PLT32 }, Imm32|Imm32S|Disp32 },
- { "GOTPLT", { 0, BFD_RELOC_X86_64_GOTPLT64 }, Imm64|Disp64 },
- { "GOTOFF", { BFD_RELOC_386_GOTOFF, BFD_RELOC_X86_64_GOTOFF64 }, Imm64|Disp64 },
- { "GOTPCREL", { 0, BFD_RELOC_X86_64_GOTPCREL }, Imm32|Imm32S|Disp32 },
- { "TLSGD", { BFD_RELOC_386_TLS_GD, BFD_RELOC_X86_64_TLSGD }, Imm32|Imm32S|Disp32 },
- { "TLSLDM", { BFD_RELOC_386_TLS_LDM, 0 }, 0 },
- { "TLSLD", { 0, BFD_RELOC_X86_64_TLSLD }, Imm32|Imm32S|Disp32 },
- { "GOTTPOFF", { BFD_RELOC_386_TLS_IE_32, BFD_RELOC_X86_64_GOTTPOFF }, Imm32|Imm32S|Disp32 },
- { "TPOFF", { BFD_RELOC_386_TLS_LE_32, BFD_RELOC_X86_64_TPOFF32 }, Imm32|Imm32S|Imm64|Disp32|Disp64 },
- { "NTPOFF", { BFD_RELOC_386_TLS_LE, 0 }, 0 },
- { "DTPOFF", { BFD_RELOC_386_TLS_LDO_32, BFD_RELOC_X86_64_DTPOFF32 }, Imm32|Imm32S|Imm64|Disp32|Disp64 },
- { "GOTNTPOFF",{ BFD_RELOC_386_TLS_GOTIE, 0 }, 0 },
- { "INDNTPOFF",{ BFD_RELOC_386_TLS_IE, 0 }, 0 },
- { "GOT", { BFD_RELOC_386_GOT32, BFD_RELOC_X86_64_GOT32 }, Imm32|Imm32S|Disp32|Imm64 },
- { "TLSDESC", { BFD_RELOC_386_TLS_GOTDESC, BFD_RELOC_X86_64_GOTPC32_TLSDESC }, Imm32|Imm32S|Disp32 },
- { "TLSCALL", { BFD_RELOC_386_TLS_DESC_CALL, BFD_RELOC_X86_64_TLSDESC_CALL }, Imm32|Imm32S|Disp32 }
+ { "PLTOFF", { 0,
+ BFD_RELOC_X86_64_PLTOFF64 },
+ Imm64 },
+ { "PLT", { BFD_RELOC_386_PLT32,
+ BFD_RELOC_X86_64_PLT32 },
+ Imm32 | Imm32S | Disp32 },
+ { "GOTPLT", { 0,
+ BFD_RELOC_X86_64_GOTPLT64 },
+ Imm64 | Disp64 },
+ { "GOTOFF", { BFD_RELOC_386_GOTOFF,
+ BFD_RELOC_X86_64_GOTOFF64 },
+ Imm64 | Disp64 },
+ { "GOTPCREL", { 0,
+ BFD_RELOC_X86_64_GOTPCREL },
+ Imm32 | Imm32S | Disp32 },
+ { "TLSGD", { BFD_RELOC_386_TLS_GD,
+ BFD_RELOC_X86_64_TLSGD },
+ Imm32 | Imm32S | Disp32 },
+ { "TLSLDM", { BFD_RELOC_386_TLS_LDM,
+ 0 },
+ 0 },
+ { "TLSLD", { 0,
+ BFD_RELOC_X86_64_TLSLD },
+ Imm32 | Imm32S | Disp32 },
+ { "GOTTPOFF", { BFD_RELOC_386_TLS_IE_32,
+ BFD_RELOC_X86_64_GOTTPOFF },
+ Imm32 | Imm32S | Disp32 },
+ { "TPOFF", { BFD_RELOC_386_TLS_LE_32,
+ BFD_RELOC_X86_64_TPOFF32 },
+ Imm32 | Imm32S | Imm64 | Disp32 | Disp64 },
+ { "NTPOFF", { BFD_RELOC_386_TLS_LE,
+ 0 },
+ 0 },
+ { "DTPOFF", { BFD_RELOC_386_TLS_LDO_32,
+ BFD_RELOC_X86_64_DTPOFF32 },
+ Imm32 | Imm32S | Imm64 | Disp32 | Disp64 },
+ { "GOTNTPOFF",{ BFD_RELOC_386_TLS_GOTIE,
+ 0 },
+ 0 },
+ { "INDNTPOFF",{ BFD_RELOC_386_TLS_IE,
+ 0 },
+ 0 },
+ { "GOT", { BFD_RELOC_386_GOT32,
+ BFD_RELOC_X86_64_GOT32 },
+ Imm32 | Imm32S | Disp32 | Imm64 },
+ { "TLSDESC", { BFD_RELOC_386_TLS_GOTDESC,
+ BFD_RELOC_X86_64_GOTPC32_TLSDESC },
+ Imm32 | Imm32S | Disp32 },
+ { "TLSCALL", { BFD_RELOC_386_TLS_DESC_CALL,
+ BFD_RELOC_X86_64_TLSDESC_CALL },
+ Imm32 | Imm32S | Disp32 }
};
char *cp;
unsigned int j;
@@ -3951,7 +4466,7 @@ lex_got (enum bfd_reloc_code_real *reloc,
if (types)
{
if (flag_code != CODE_64BIT)
- *types = Imm32|Disp32;
+ *types = Imm32 | Disp32;
else
*types = gotrel[j].types64;
}
@@ -3959,9 +4474,6 @@ lex_got (enum bfd_reloc_code_real *reloc,
if (GOT_symbol == NULL)
GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME);
- /* Replace the relocation token with ' ', so that
- errors like foo@GOTOFF1 will be detected. */
-
/* The length of the first part of our input line. */
first = cp - input_line_pointer;
@@ -3977,9 +4489,12 @@ lex_got (enum bfd_reloc_code_real *reloc,
be necessary, but be safe. */
tmpbuf = xmalloc (first + second + 2);
memcpy (tmpbuf, input_line_pointer, first);
- tmpbuf[first] = ' ';
- memcpy (tmpbuf + first + 1, past_reloc, second);
- tmpbuf[first + second + 1] = '\0';
+ if (second != 0 && *past_reloc != ' ')
+ /* Replace the relocation token with ' ', so that
+ errors like foo@GOTOFF1 will be detected. */
+ tmpbuf[first++] = ' ';
+ memcpy (tmpbuf + first, past_reloc, second);
+ tmpbuf[first + second] = '\0';
return tmpbuf;
}
@@ -3994,9 +4509,7 @@ lex_got (enum bfd_reloc_code_real *reloc,
}
void
-x86_cons (exp, size)
- expressionS *exp;
- int size;
+x86_cons (expressionS *exp, int size)
{
if (size == 4 || (object_64bit && size == 8))
{
@@ -4058,11 +4571,8 @@ pe_directive_secrel (dummy)
}
#endif
-static int i386_immediate PARAMS ((char *));
-
static int
-i386_immediate (imm_start)
- char *imm_start;
+i386_immediate (char *imm_start)
{
char *save_input_line_pointer;
char *gotfree_input_line;
@@ -4072,7 +4582,8 @@ i386_immediate (imm_start)
if (i.imm_operands == MAX_IMMEDIATE_OPERANDS)
{
- as_bad (_("only 1 or 2 immediate operands are allowed"));
+ as_bad (_("at most %d immediate operands are allowed"),
+ MAX_IMMEDIATE_OPERANDS);
return 0;
}
@@ -4114,9 +4625,10 @@ i386_immediate (imm_start)
/* Size it properly later. */
i.types[this_operand] |= Imm64;
/* If BFD64, sign extend val. */
- if (!use_rela_relocations)
- if ((exp->X_add_number & ~(((addressT) 2 << 31) - 1)) == 0)
- exp->X_add_number = (exp->X_add_number ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
+ if (!use_rela_relocations
+ && (exp->X_add_number & ~(((addressT) 2 << 31) - 1)) == 0)
+ exp->X_add_number
+ = (exp->X_add_number ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
}
#if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
else if (OUTPUT_FLAVOR == bfd_target_aout_flavour
@@ -4131,6 +4643,11 @@ i386_immediate (imm_start)
return 0;
}
#endif
+ else if (!intel_syntax && exp->X_op == O_register)
+ {
+ as_bad (_("illegal immediate register operand %s"), imm_start);
+ return 0;
+ }
else
{
/* This is an address. The size of the address will be
@@ -4143,11 +4660,8 @@ i386_immediate (imm_start)
return 1;
}
-static char *i386_scale PARAMS ((char *));
-
static char *
-i386_scale (scale)
- char *scale;
+i386_scale (char *scale)
{
offsetT val;
char *save = input_line_pointer;
@@ -4194,12 +4708,8 @@ i386_scale (scale)
return scale;
}
-static int i386_displacement PARAMS ((char *, char *));
-
static int
-i386_displacement (disp_start, disp_end)
- char *disp_start;
- char *disp_end;
+i386_displacement (char *disp_start, char *disp_end)
{
expressionS *exp;
segT exp_seg = 0;
@@ -4208,6 +4718,13 @@ i386_displacement (disp_start, disp_end)
int bigdisp, override;
unsigned int types = Disp;
+ if (i.disp_operands == MAX_MEMORY_OPERANDS)
+ {
+ as_bad (_("at most %d displacement operands are allowed"),
+ MAX_MEMORY_OPERANDS);
+ return 0;
+ }
+
if ((i.types[this_operand] & JumpAbsolute)
|| !(current_templates->start->opcode_modifier & (Jump | JumpDword)))
{
@@ -4224,9 +4741,9 @@ i386_displacement (disp_start, disp_end)
if (flag_code == CODE_64BIT)
{
if (!bigdisp)
- bigdisp = (override || i.suffix == WORD_MNEM_SUFFIX)
- ? Disp16
- : Disp32S | Disp32;
+ bigdisp = ((override || i.suffix == WORD_MNEM_SUFFIX)
+ ? Disp16
+ : Disp32S | Disp32);
else if (!override)
bigdisp = Disp64 | Disp32S | Disp32;
}
@@ -4374,14 +4891,11 @@ i386_displacement (disp_start, disp_end)
return 1;
}
-static int i386_index_check PARAMS ((const char *));
-
/* Make sure the memory operand we've been dealt is valid.
Return 1 on success, 0 on a failure. */
static int
-i386_index_check (operand_string)
- const char *operand_string;
+i386_index_check (const char *operand_string)
{
int ok;
#if INFER_ADDR_PREFIX
@@ -4403,9 +4917,9 @@ i386_index_check (operand_string)
else if (flag_code == CODE_64BIT)
RegXX = i.prefix[ADDR_PREFIX] == 0 ? Reg64 : Reg32;
else
- RegXX = (flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0)
- ? Reg16
- : Reg32;
+ RegXX = ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0)
+ ? Reg16
+ : Reg32);
if (!i.base_reg
|| !(i.base_reg->reg_type & Acc)
|| !(i.base_reg->reg_type & RegXX)
@@ -4414,17 +4928,17 @@ i386_index_check (operand_string)
ok = 0;
}
else if (flag_code == CODE_64BIT)
- {
- unsigned RegXX = (i.prefix[ADDR_PREFIX] == 0 ? Reg64 : Reg32);
-
- if ((i.base_reg
- && ((i.base_reg->reg_type & RegXX) == 0)
- && (i.base_reg->reg_type != BaseIndex
- || i.index_reg))
- || (i.index_reg
- && ((i.index_reg->reg_type & (RegXX | BaseIndex))
- != (RegXX | BaseIndex))))
- ok = 0;
+ {
+ unsigned RegXX = (i.prefix[ADDR_PREFIX] == 0 ? Reg64 : Reg32);
+
+ if ((i.base_reg
+ && ((i.base_reg->reg_type & RegXX) == 0)
+ && (i.base_reg->reg_type != BaseIndex
+ || i.index_reg))
+ || (i.index_reg
+ && ((i.index_reg->reg_type & (RegXX | BaseIndex))
+ != (RegXX | BaseIndex))))
+ ok = 0;
}
else
{
@@ -4466,8 +4980,9 @@ i386_index_check (operand_string)
FIXME. There doesn't seem to be any real need for separate
Disp16 and Disp32 flags. The same goes for Imm16 and Imm32.
Removing them would probably clean up the code quite a lot. */
- if (flag_code != CODE_64BIT && (i.types[this_operand] & (Disp16 | Disp32)))
- i.types[this_operand] ^= (Disp16 | Disp32);
+ if (flag_code != CODE_64BIT
+ && (i.types[this_operand] & (Disp16 | Disp32)))
+ i.types[this_operand] ^= (Disp16 | Disp32);
fudged = 1;
goto tryprefix;
}
@@ -4487,8 +5002,7 @@ i386_index_check (operand_string)
on error. */
static int
-i386_operand (operand_string)
- char *operand_string;
+i386_operand (char *operand_string)
{
const reg_entry *r;
char *end_op;
@@ -4646,7 +5160,8 @@ i386_operand (operand_string)
++base_string;
if (*base_string == ','
- || ((i.base_reg = parse_register (base_string, &end_op)) != NULL))
+ || ((i.base_reg = parse_register (base_string, &end_op))
+ != NULL))
{
displacement_string_end = temp_string;
@@ -4666,7 +5181,8 @@ i386_operand (operand_string)
if (is_space_char (*base_string))
++base_string;
- if ((i.index_reg = parse_register (base_string, &end_op)) != NULL)
+ if ((i.index_reg = parse_register (base_string, &end_op))
+ != NULL)
{
base_string = end_op;
if (is_space_char (*base_string))
@@ -4679,7 +5195,8 @@ i386_operand (operand_string)
}
else if (*base_string != ')')
{
- as_bad (_("expecting `,' or `)' after index register in `%s'"),
+ as_bad (_("expecting `,' or `)' "
+ "after index register in `%s'"),
operand_string);
return 0;
}
@@ -4703,21 +5220,24 @@ i386_operand (operand_string)
++base_string;
if (*base_string != ')')
{
- as_bad (_("expecting `)' after scale factor in `%s'"),
+ as_bad (_("expecting `)' "
+ "after scale factor in `%s'"),
operand_string);
return 0;
}
}
else if (!i.index_reg)
{
- as_bad (_("expecting index register or scale factor after `,'; got '%c'"),
+ as_bad (_("expecting index register or scale factor "
+ "after `,'; got '%c'"),
*base_string);
return 0;
}
}
else if (*base_string != ')')
{
- as_bad (_("expecting `,' or `)' after base register in `%s'"),
+ as_bad (_("expecting `,' or `)' "
+ "after base register in `%s'"),
operand_string);
return 0;
}
@@ -4933,7 +5453,8 @@ md_convert_frag (abfd, sec, fragP)
{
if (no_cond_jump_promotion
&& TYPE_FROM_RELAX_STATE (fragP->fr_subtype) != UNCOND_JUMP)
- as_warn_where (fragP->fr_file, fragP->fr_line, _("long jump required"));
+ as_warn_where (fragP->fr_file, fragP->fr_line,
+ _("long jump required"));
switch (fragP->fr_subtype)
{
@@ -4984,8 +5505,8 @@ md_convert_frag (abfd, sec, fragP)
if (DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype) == 4
&& object_64bit
&& ((addressT) (displacement_from_opcode_start - extension
- + ((addressT) 1 << 31))
- > (((addressT) 2 << 31) - 1)))
+ + ((addressT) 1 << 31))
+ > (((addressT) 2 << 31) - 1)))
{
as_bad_where (fragP->fr_file, fragP->fr_line,
_("jump target out of range"));
@@ -5250,16 +5771,17 @@ md_atof (type, litP, sizeP)
return 0;
}
-static char output_invalid_buf[8];
+static char output_invalid_buf[sizeof (unsigned char) * 2 + 6];
static char *
-output_invalid (c)
- int c;
+output_invalid (int c)
{
if (ISPRINT (c))
- sprintf (output_invalid_buf, "'%c'", c);
+ snprintf (output_invalid_buf, sizeof (output_invalid_buf),
+ "'%c'", c);
else
- sprintf (output_invalid_buf, "(0x%x)", (unsigned) c);
+ snprintf (output_invalid_buf, sizeof (output_invalid_buf),
+ "(0x%x)", (unsigned char) c);
return output_invalid_buf;
}
@@ -5310,14 +5832,16 @@ parse_real_register (char *reg_string, char **end_op)
++s;
if (*s >= '0' && *s <= '7')
{
- r = &i386_float_regtab[*s - '0'];
+ int fpr = *s - '0';
++s;
if (is_space_char (*s))
++s;
if (*s == ')')
{
*end_op = s + 1;
- return r;
+ r = hash_find (reg_hash, "st(0)");
+ know (r);
+ return r + fpr;
}
}
/* We have "%st(" then garbage. */
@@ -5359,7 +5883,8 @@ parse_register (char *reg_string, char **end_op)
const expressionS *e = symbol_get_value_expression (symbolP);
know (e->X_op == O_register);
- know (e->X_add_number >= 0 && (valueT) e->X_add_number < ARRAY_SIZE (i386_regtab));
+ know (e->X_add_number >= 0
+ && (valueT) e->X_add_number < i386_regtab_size);
r = i386_regtab + e->X_add_number;
*end_op = input_line_pointer;
}
@@ -5417,22 +5942,27 @@ const char *md_shortopts = "qn";
#define OPTION_32 (OPTION_MD_BASE + 0)
#define OPTION_64 (OPTION_MD_BASE + 1)
#define OPTION_DIVIDE (OPTION_MD_BASE + 2)
+#define OPTION_MARCH (OPTION_MD_BASE + 3)
+#define OPTION_MTUNE (OPTION_MD_BASE + 4)
-struct option md_longopts[] = {
+struct option md_longopts[] =
+{
{"32", no_argument, NULL, OPTION_32},
-#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
+#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined(TE_PEP)
{"64", no_argument, NULL, OPTION_64},
#endif
{"divide", no_argument, NULL, OPTION_DIVIDE},
+ {"march", required_argument, NULL, OPTION_MARCH},
+ {"mtune", required_argument, NULL, OPTION_MTUNE},
{NULL, no_argument, NULL, 0}
};
size_t md_longopts_size = sizeof (md_longopts);
int
-md_parse_option (c, arg)
- int c;
- char *arg ATTRIBUTE_UNUSED;
+md_parse_option (int c, char *arg)
{
+ unsigned int i;
+
switch (c)
{
case 'n':
@@ -5462,14 +5992,18 @@ md_parse_option (c, arg)
/* -s: On i386 Solaris, this tells the native assembler to use
.stab instead of .stab.excl. We always use .stab anyhow. */
break;
-
+#endif
+#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined(TE_PEP)
case OPTION_64:
{
const char **list, **l;
list = bfd_target_list ();
for (l = list; *l != NULL; l++)
- if (strcmp (*l, "elf64-x86-64") == 0)
+ if (CONST_STRNEQ (*l, "elf64-x86-64")
+ || strcmp (*l, "coff-x86-64") == 0
+ || strcmp (*l, "pe-x86-64") == 0
+ || strcmp (*l, "pei-x86-64") == 0)
{
default_arch = "x86_64";
break;
@@ -5502,6 +6036,44 @@ md_parse_option (c, arg)
#endif
break;
+ case OPTION_MARCH:
+ if (*arg == '.')
+ as_fatal (_("Invalid -march= option: `%s'"), arg);
+ for (i = 0; i < ARRAY_SIZE (cpu_arch); i++)
+ {
+ if (strcmp (arg, cpu_arch [i].name) == 0)
+ {
+ cpu_arch_isa = cpu_arch[i].type;
+ cpu_arch_isa_flags = cpu_arch[i].flags;
+ if (!cpu_arch_tune_set)
+ {
+ cpu_arch_tune = cpu_arch_isa;
+ cpu_arch_tune_flags = cpu_arch_isa_flags;
+ }
+ break;
+ }
+ }
+ if (i >= ARRAY_SIZE (cpu_arch))
+ as_fatal (_("Invalid -march= option: `%s'"), arg);
+ break;
+
+ case OPTION_MTUNE:
+ if (*arg == '.')
+ as_fatal (_("Invalid -mtune= option: `%s'"), arg);
+ for (i = 0; i < ARRAY_SIZE (cpu_arch); i++)
+ {
+ if (strcmp (arg, cpu_arch [i].name) == 0)
+ {
+ cpu_arch_tune_set = 1;
+ cpu_arch_tune = cpu_arch [i].type;
+ cpu_arch_tune_flags = cpu_arch[i].flags;
+ break;
+ }
+ }
+ if (i >= ARRAY_SIZE (cpu_arch))
+ as_fatal (_("Invalid -mtune= option: `%s'"), arg);
+ break;
+
default:
return 0;
}
@@ -5525,6 +6097,10 @@ md_show_usage (stream)
fprintf (stream, _("\
-s ignored\n"));
#endif
+#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined(TE_PEP)
+ fprintf (stream, _("\
+ --32/--64 generate 32bit/64bit code\n"));
+#endif
#ifdef SVR4_COMMENT_CHARS
fprintf (stream, _("\
--divide do not treat `/' as a comment character\n"));
@@ -5532,7 +6108,32 @@ md_show_usage (stream)
fprintf (stream, _("\
--divide ignored\n"));
#endif
+ fprintf (stream, _("\
+ -march=CPU/-mtune=CPU generate code/optimize for CPU, where CPU is one of:\n\
+ i386, i486, pentium, pentiumpro, pentium4, nocona,\n\
+ core, core2, k6, athlon, k8, generic32, generic64\n"));
+
+}
+
+#if defined(TE_PEP)
+const char *
+x86_64_target_format (void)
+{
+ if (strcmp (default_arch, "x86_64") == 0)
+ {
+ set_code_flag (CODE_64BIT);
+ return COFF_TARGET_FORMAT;
+ }
+ else if (strcmp (default_arch, "i386") == 0)
+ {
+ set_code_flag (CODE_32BIT);
+ return "coff-i386";
+ }
+
+ as_fatal (_("Unknown architecture"));
+ return NULL;
}
+#endif
#if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
|| defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
@@ -5540,12 +6141,28 @@ md_show_usage (stream)
/* Pick the target format to use. */
const char *
-i386_target_format ()
+i386_target_format (void)
{
if (!strcmp (default_arch, "x86_64"))
- set_code_flag (CODE_64BIT);
+ {
+ set_code_flag (CODE_64BIT);
+ if (cpu_arch_isa_flags == 0)
+ cpu_arch_isa_flags = Cpu186|Cpu286|Cpu386|Cpu486
+ |Cpu586|Cpu686|CpuP4|CpuMMX|CpuMMX2
+ |CpuSSE|CpuSSE2;
+ if (cpu_arch_tune_flags == 0)
+ cpu_arch_tune_flags = Cpu186|Cpu286|Cpu386|Cpu486
+ |Cpu586|Cpu686|CpuP4|CpuMMX|CpuMMX2
+ |CpuSSE|CpuSSE2;
+ }
else if (!strcmp (default_arch, "i386"))
- set_code_flag (CODE_32BIT);
+ {
+ set_code_flag (CODE_32BIT);
+ if (cpu_arch_isa_flags == 0)
+ cpu_arch_isa_flags = Cpu186|Cpu286|Cpu386;
+ if (cpu_arch_tune_flags == 0)
+ cpu_arch_tune_flags = Cpu186|Cpu286|Cpu386;
+ }
else
as_fatal (_("Unknown architecture"));
switch (OUTPUT_FLAVOR)
@@ -5566,7 +6183,7 @@ i386_target_format ()
object_64bit = 1;
use_rela_relocations = 1;
}
- return flag_code == CODE_64BIT ? "elf64-x86-64" : ELF_TARGET_FORMAT;
+ return flag_code == CODE_64BIT ? ELF_TARGET_FORMAT64 : ELF_TARGET_FORMAT;
}
#endif
default:
@@ -5578,7 +6195,8 @@ i386_target_format ()
#endif /* OBJ_MAYBE_ more than one */
#if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
-void i386_elf_emit_arch_note ()
+void
+i386_elf_emit_arch_note (void)
{
if (IS_ELF && cpu_arch_name != NULL)
{
@@ -5669,8 +6287,7 @@ md_section_align (segment, size)
size, since the offset is always the last part of the insn. */
long
-md_pcrel_from (fixP)
- fixS *fixP;
+md_pcrel_from (fixS *fixP)
{
return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
}
@@ -5678,8 +6295,7 @@ md_pcrel_from (fixP)
#ifndef I386COFF
static void
-s_bss (ignore)
- int ignore ATTRIBUTE_UNUSED;
+s_bss (int ignore ATTRIBUTE_UNUSED)
{
int temp;
@@ -5695,8 +6311,7 @@ s_bss (ignore)
#endif
void
-i386_validate_fix (fixp)
- fixS *fixp;
+i386_validate_fix (fixS *fixp)
{
if (fixp->fx_subsy && fixp->fx_subsy == GOT_symbol)
{
@@ -6045,8 +6660,8 @@ struct intel_parser_s
int got_a_float; /* Whether the operand is a float. */
int op_modifier; /* Operand modifier. */
int is_mem; /* 1 if operand is memory reference. */
- int in_offset; /* >=1 if parsing operand of offset. */
- int in_bracket; /* >=1 if parsing operand in brackets. */
+ int in_offset; /* >=1 if parsing operand of offset. */
+ int in_bracket; /* >=1 if parsing operand in brackets. */
const reg_entry *reg; /* Last register reference found. */
char *disp; /* Displacement string being built. */
char *next_operand; /* Resume point when splitting operands. */
@@ -6085,22 +6700,19 @@ static struct intel_token cur_token, prev_token;
#define T_SHR 15
/* Prototypes for intel parser functions. */
-static int intel_match_token PARAMS ((int code));
-static void intel_get_token PARAMS ((void));
-static void intel_putback_token PARAMS ((void));
-static int intel_expr PARAMS ((void));
-static int intel_e04 PARAMS ((void));
-static int intel_e05 PARAMS ((void));
-static int intel_e06 PARAMS ((void));
-static int intel_e09 PARAMS ((void));
-static int intel_bracket_expr PARAMS ((void));
-static int intel_e10 PARAMS ((void));
-static int intel_e11 PARAMS ((void));
+static int intel_match_token (int);
+static void intel_putback_token (void);
+static void intel_get_token (void);
+static int intel_expr (void);
+static int intel_e04 (void);
+static int intel_e05 (void);
+static int intel_e06 (void);
+static int intel_e09 (void);
+static int intel_e10 (void);
+static int intel_e11 (void);
static int
-i386_intel_operand (operand_string, got_a_float)
- char *operand_string;
- int got_a_float;
+i386_intel_operand (char *operand_string, int got_a_float)
{
int ret;
char *p;
@@ -6190,7 +6802,7 @@ i386_intel_operand (operand_string, got_a_float)
ret = i386_immediate (intel_parser.disp);
if (intel_parser.next_operand && this_operand >= MAX_OPERANDS - 1)
- ret = 0;
+ ret = 0;
if (!ret || !intel_parser.next_operand)
break;
intel_parser.op_string = intel_parser.next_operand;
@@ -6210,7 +6822,7 @@ i386_intel_operand (operand_string, got_a_float)
expr' cmpOp e04 expr'
| Empty */
static int
-intel_expr ()
+intel_expr (void)
{
/* XXX Implement the comparison operators. */
return intel_e04 ();
@@ -6221,7 +6833,7 @@ intel_expr ()
e04' addOp e05 e04'
| Empty */
static int
-intel_e04 ()
+intel_e04 (void)
{
int nregs = -1;
@@ -6250,7 +6862,7 @@ intel_e04 ()
e05' binOp e06 e05'
| Empty */
static int
-intel_e05 ()
+intel_e05 (void)
{
int nregs = ~NUM_ADDRESS_REGS;
@@ -6259,7 +6871,9 @@ intel_e05 ()
if (!intel_e06())
return 0;
- if (cur_token.code == '&' || cur_token.code == '|' || cur_token.code == '^')
+ if (cur_token.code == '&'
+ || cur_token.code == '|'
+ || cur_token.code == '^')
{
char str[2];
@@ -6285,7 +6899,7 @@ intel_e05 ()
e06' mulOp e09 e06'
| Empty */
static int
-intel_e06 ()
+intel_e06 (void)
{
int nregs = ~NUM_ADDRESS_REGS;
@@ -6294,7 +6908,9 @@ intel_e06 ()
if (!intel_e09())
return 0;
- if (cur_token.code == '*' || cur_token.code == '/' || cur_token.code == '%')
+ if (cur_token.code == '*'
+ || cur_token.code == '/'
+ || cur_token.code == '%')
{
char str[2];
@@ -6309,7 +6925,7 @@ intel_e06 ()
else
break;
- intel_match_token (cur_token.code);
+ intel_match_token (cur_token.code);
if (nregs < 0)
nregs = ~nregs;
@@ -6331,7 +6947,7 @@ intel_e06 ()
| : e10 e09'
| Empty */
static int
-intel_e09 ()
+intel_e09 (void)
{
int nregs = ~NUM_ADDRESS_REGS;
int in_offset = 0;
@@ -6545,7 +7161,7 @@ intel_e09 ()
}
static int
-intel_bracket_expr ()
+intel_bracket_expr (void)
{
int was_offset = intel_parser.op_modifier & (1 << T_OFFSET);
const char *start = intel_parser.op_string;
@@ -6581,7 +7197,7 @@ intel_bracket_expr ()
intel_parser.op_modifier &= ~was_offset;
}
else
- strcat (intel_parser.disp, "[");
+ strcat (intel_parser.disp, "[");
/* Add a '+' to the displacement string if necessary. */
if (*intel_parser.disp != '\0'
@@ -6606,7 +7222,8 @@ intel_bracket_expr ()
/* Defer the warning until all of the operand was parsed. */
intel_parser.is_mem = -1;
else if (!quiet_warnings)
- as_warn (_("`[%.*s]' taken to mean just `%.*s'"), len, start, len, start);
+ as_warn (_("`[%.*s]' taken to mean just `%.*s'"),
+ len, start, len, start);
}
}
intel_parser.op_modifier |= was_offset;
@@ -6621,7 +7238,7 @@ intel_bracket_expr ()
e10' [ expr ] e10'
| Empty */
static int
-intel_e10 ()
+intel_e10 (void)
{
if (!intel_e11 ())
return 0;
@@ -6651,7 +7268,7 @@ intel_e10 ()
| id
| constant */
static int
-intel_e11 ()
+intel_e11 (void)
{
switch (cur_token.code)
{
@@ -6696,7 +7313,8 @@ intel_e11 ()
{
if (!(reg->reg_type & (SReg2 | SReg3)))
{
- as_bad (_("`%s' is not a valid segment register"), reg->reg_name);
+ as_bad (_("`%s' is not a valid segment register"),
+ reg->reg_name);
return 0;
}
else if (i.seg[i.mem_operands])
@@ -6886,7 +7504,8 @@ intel_e11 ()
/* Get the next token to check for register scaling. */
intel_match_token (cur_token.code);
- /* Check if this constant is a scaling factor for an index register. */
+ /* Check if this constant is a scaling factor for an
+ index register. */
if (cur_token.code == '*')
{
if (intel_match_token ('*') && cur_token.code == T_REG)
@@ -6895,14 +7514,17 @@ intel_e11 ()
if (!intel_parser.in_bracket)
{
- as_bad (_("Register scaling only allowed in memory operands"));
+ as_bad (_("Register scaling only allowed "
+ "in memory operands"));
return 0;
}
- if (reg->reg_type & Reg16) /* Disallow things like [1*si]. */
- reg = i386_regtab + REGNAM_AX + 4; /* sp is invalid as index */
+ /* Disallow things like [1*si].
+ sp and esp are invalid as index. */
+ if (reg->reg_type & Reg16)
+ reg = i386_regtab + REGNAM_AX + 4;
else if (i.index_reg)
- reg = i386_regtab + REGNAM_EAX + 4; /* esp is invalid as index */
+ reg = i386_regtab + REGNAM_EAX + 4;
/* The constant is followed by `* reg', so it must be
a valid scale. */
@@ -6952,8 +7574,7 @@ intel_e11 ()
/* Match the given token against cur_token. If they match, read the next
token from the operand string. */
static int
-intel_match_token (code)
- int code;
+intel_match_token (int code)
{
if (cur_token.code == code)
{
@@ -6969,7 +7590,7 @@ intel_match_token (code)
/* Read a new token from intel_parser.op_string and store it in cur_token. */
static void
-intel_get_token ()
+intel_get_token (void)
{
char *end_op;
const reg_entry *reg;
@@ -7154,7 +7775,7 @@ intel_get_token ()
/* Put cur_token back into the token stream and make cur_token point to
prev_token. */
static void
-intel_putback_token ()
+intel_putback_token (void)
{
if (cur_token.code != T_NIL)
{
@@ -7170,7 +7791,7 @@ intel_putback_token ()
}
int
-tc_x86_regname_to_dw2regnum (const char *regname)
+tc_x86_regname_to_dw2regnum (char *regname)
{
unsigned int regnum;
unsigned int regnames_count;
@@ -7281,16 +7902,16 @@ x86_64_section_letter (int letter, char **ptr_msg)
return SHF_X86_64_LARGE;
*ptr_msg = _("Bad .section directive: want a,l,w,x,M,S,G,T in string");
- }
+ }
else
- *ptr_msg = _("Bad .section directive: want a,w,x,M,S,G,T in string");
+ *ptr_msg = _("Bad .section directive: want a,w,x,M,S,G,T in string");
return -1;
}
int
x86_64_section_word (char *str, size_t len)
{
- if (len == 5 && flag_code == CODE_64BIT && strncmp (str, "large", 5) == 0)
+ if (len == 5 && flag_code == CODE_64BIT && CONST_STRNEQ (str, "large"))
return SHF_X86_64_LARGE;
return -1;
diff --git a/gas/config/tc-i386.h b/gas/config/tc-i386.h
index 98517041dadd..51638b080337 100644
--- a/gas/config/tc-i386.h
+++ b/gas/config/tc-i386.h
@@ -1,6 +1,6 @@
/* tc-i386.h -- Header file for tc-i386.c
Copyright 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -23,6 +23,8 @@
#ifndef TC_I386
#define TC_I386 1
+#include "opcodes/i386-opc.h"
+
struct fix;
#define TARGET_BYTES_BIG_ENDIAN 0
@@ -55,6 +57,7 @@ extern unsigned long i386_mach (void);
#ifdef TE_FreeBSD
#define ELF_TARGET_FORMAT "elf32-i386-freebsd"
+#define ELF_TARGET_FORMAT64 "elf64-x86-64-freebsd"
#elif defined (TE_VXWORKS)
#define ELF_TARGET_FORMAT "elf32-i386-vxworks"
#endif
@@ -63,9 +66,13 @@ extern unsigned long i386_mach (void);
#define ELF_TARGET_FORMAT "elf32-i386"
#endif
+#ifndef ELF_TARGET_FORMAT64
+#define ELF_TARGET_FORMAT64 "elf64-x86-64"
+#endif
+
#if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
|| defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
-extern const char *i386_target_format PARAMS ((void));
+extern const char *i386_target_format (void);
#define TARGET_FORMAT i386_target_format ()
#else
#ifdef OBJ_ELF
@@ -78,7 +85,7 @@ extern const char *i386_target_format PARAMS ((void));
#if (defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF))
#define md_end i386_elf_emit_arch_note
-extern void i386_elf_emit_arch_note PARAMS ((void));
+extern void i386_elf_emit_arch_note (void);
#endif
#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 0
@@ -91,18 +98,16 @@ extern const char extra_symbol_chars[];
extern const char *i386_comment_chars;
#define tc_comment_chars i386_comment_chars
-#define MAX_OPERANDS 3 /* max operands per insn */
-#define MAX_IMMEDIATE_OPERANDS 2/* max immediates per insn (lcall, ljmp) */
-#define MAX_MEMORY_OPERANDS 2 /* max memory refs per insn (string ops) */
-
/* Prefixes will be emitted in the order defined below.
WAIT_PREFIX must be the first prefix since FWAIT is really is an
- instruction, and so must come before any prefixes. */
+ instruction, and so must come before any prefixes.
+ The preferred prefix order is SEG_PREFIX, ADDR_PREFIX, DATA_PREFIX,
+ LOCKREP_PREFIX. */
#define WAIT_PREFIX 0
-#define LOCKREP_PREFIX 1
+#define SEG_PREFIX 1
#define ADDR_PREFIX 2
#define DATA_PREFIX 3
-#define SEG_PREFIX 4
+#define LOCKREP_PREFIX 4
#define REX_PREFIX 5 /* must come last. */
#define MAX_PREFIXES 6 /* max prefixes per opcode */
@@ -111,21 +116,6 @@ extern const char *i386_comment_chars;
#define IMMEDIATE_PREFIX '$'
#define ABSOLUTE_PREFIX '*'
-#define TWO_BYTE_OPCODE_ESCAPE 0x0f
-#define NOP_OPCODE (char) 0x90
-
-/* register numbers */
-#define EBP_REG_NUM 5
-#define ESP_REG_NUM 4
-
-/* modrm_byte.regmem for twobyte escape */
-#define ESCAPE_TO_TWO_BYTE_ADDRESSING ESP_REG_NUM
-/* index_base_byte.index for no index register addressing */
-#define NO_INDEX_REGISTER ESP_REG_NUM
-/* index_base_byte.base for no base register addressing */
-#define NO_BASE_REGISTER EBP_REG_NUM
-#define NO_BASE_REGISTER_16 6
-
/* these are the instruction mnemonic suffixes. */
#define WORD_MNEM_SUFFIX 'w'
#define BYTE_MNEM_SUFFIX 'b'
@@ -135,184 +125,8 @@ extern const char *i386_comment_chars;
/* Intel Syntax */
#define LONG_DOUBLE_MNEM_SUFFIX 'x'
-/* modrm.mode = REGMEM_FIELD_HAS_REG when a register is in there */
-#define REGMEM_FIELD_HAS_REG 0x3/* always = 0x3 */
-#define REGMEM_FIELD_HAS_MEM (~REGMEM_FIELD_HAS_REG)
-
#define END_OF_INSN '\0'
-typedef struct
-{
- /* instruction name sans width suffix ("mov" for movl insns) */
- char *name;
-
- /* how many operands */
- unsigned int operands;
-
- /* base_opcode is the fundamental opcode byte without optional
- prefix(es). */
- unsigned int base_opcode;
-
- /* extension_opcode is the 3 bit extension for group <n> insns.
- This field is also used to store the 8-bit opcode suffix for the
- AMD 3DNow! instructions.
- If this template has no extension opcode (the usual case) use None */
- unsigned int extension_opcode;
-#define None 0xffff /* If no extension_opcode is possible. */
-
- /* cpu feature flags */
- unsigned int cpu_flags;
-#define Cpu086 0x1 /* Any old cpu will do, 0 does the same */
-#define Cpu186 0x2 /* i186 or better required */
-#define Cpu286 0x4 /* i286 or better required */
-#define Cpu386 0x8 /* i386 or better required */
-#define Cpu486 0x10 /* i486 or better required */
-#define Cpu586 0x20 /* i585 or better required */
-#define Cpu686 0x40 /* i686 or better required */
-#define CpuP4 0x80 /* Pentium4 or better required */
-#define CpuK6 0x100 /* AMD K6 or better required*/
-#define CpuAthlon 0x200 /* AMD Athlon or better required*/
-#define CpuSledgehammer 0x400 /* Sledgehammer or better required */
-#define CpuMMX 0x800 /* MMX support required */
-#define CpuMMX2 0x1000 /* extended MMX support (with SSE or 3DNow!Ext) required */
-#define CpuSSE 0x2000 /* Streaming SIMD extensions required */
-#define CpuSSE2 0x4000 /* Streaming SIMD extensions 2 required */
-#define Cpu3dnow 0x8000 /* 3dnow! support required */
-#define Cpu3dnowA 0x10000 /* 3dnow!Extensions support required */
-#define CpuSSE3 0x20000 /* Streaming SIMD extensions 3 required */
-#define CpuPNI CpuSSE3 /* Prescott New Instructions required */
-#define CpuPadLock 0x40000 /* VIA PadLock required */
-#define CpuSVME 0x80000 /* AMD Secure Virtual Machine Ext-s required */
-#define CpuVMX 0x100000 /* VMX Instructions required */
-#define CpuMNI 0x200000 /* Merom New Instructions required */
-
- /* These flags are set by gas depending on the flag_code. */
-#define Cpu64 0x4000000 /* 64bit support required */
-#define CpuNo64 0x8000000 /* Not supported in the 64bit mode */
-
- /* The default value for unknown CPUs - enable all features to avoid problems. */
-#define CpuUnknownFlags (Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686 \
- |CpuP4|CpuSledgehammer|CpuMMX|CpuMMX2|CpuSSE|CpuSSE2|CpuPNI|CpuVMX \
- |Cpu3dnow|Cpu3dnowA|CpuK6|CpuAthlon|CpuPadLock|CpuSVME|CpuMNI)
-
- /* the bits in opcode_modifier are used to generate the final opcode from
- the base_opcode. These bits also are used to detect alternate forms of
- the same instruction */
- unsigned int opcode_modifier;
-
- /* opcode_modifier bits: */
-#define W 0x1 /* set if operands can be words or dwords
- encoded the canonical way */
-#define D 0x2 /* D = 0 if Reg --> Regmem;
- D = 1 if Regmem --> Reg: MUST BE 0x2 */
-#define Modrm 0x4
-#define FloatR 0x8 /* src/dest swap for floats: MUST BE 0x8 */
-#define ShortForm 0x10 /* register is in low 3 bits of opcode */
-#define FloatMF 0x20 /* FP insn memory format bit, sized by 0x4 */
-#define Jump 0x40 /* special case for jump insns. */
-#define JumpDword 0x80 /* call and jump */
-#define JumpByte 0x100 /* loop and jecxz */
-#define JumpInterSegment 0x200 /* special case for intersegment leaps/calls */
-#define FloatD 0x400 /* direction for float insns: MUST BE 0x400 */
-#define Seg2ShortForm 0x800 /* encoding of load segment reg insns */
-#define Seg3ShortForm 0x1000 /* fs/gs segment register insns. */
-#define Size16 0x2000 /* needs size prefix if in 32-bit mode */
-#define Size32 0x4000 /* needs size prefix if in 16-bit mode */
-#define Size64 0x8000 /* needs size prefix if in 16-bit mode */
-#define IgnoreSize 0x10000 /* instruction ignores operand size prefix */
-#define DefaultSize 0x20000 /* default insn size depends on mode */
-#define No_bSuf 0x40000 /* b suffix on instruction illegal */
-#define No_wSuf 0x80000 /* w suffix on instruction illegal */
-#define No_lSuf 0x100000 /* l suffix on instruction illegal */
-#define No_sSuf 0x200000 /* s suffix on instruction illegal */
-#define No_qSuf 0x400000 /* q suffix on instruction illegal */
-#define No_xSuf 0x800000 /* x suffix on instruction illegal */
-#define FWait 0x1000000 /* instruction needs FWAIT */
-#define IsString 0x2000000 /* quick test for string instructions */
-#define regKludge 0x4000000 /* fake an extra reg operand for clr, imul */
-#define IsPrefix 0x8000000 /* opcode is a prefix */
-#define ImmExt 0x10000000 /* instruction has extension in 8 bit imm */
-#define NoRex64 0x20000000 /* instruction don't need Rex64 prefix. */
-#define Rex64 0x40000000 /* instruction require Rex64 prefix. */
-#define Ugh 0x80000000 /* deprecated fp insn, gets a warning */
-
- /* operand_types[i] describes the type of operand i. This is made
- by OR'ing together all of the possible type masks. (e.g.
- 'operand_types[i] = Reg|Imm' specifies that operand i can be
- either a register or an immediate operand. */
- unsigned int operand_types[3];
-
- /* operand_types[i] bits */
- /* register */
-#define Reg8 0x1 /* 8 bit reg */
-#define Reg16 0x2 /* 16 bit reg */
-#define Reg32 0x4 /* 32 bit reg */
-#define Reg64 0x8 /* 64 bit reg */
- /* immediate */
-#define Imm8 0x10 /* 8 bit immediate */
-#define Imm8S 0x20 /* 8 bit immediate sign extended */
-#define Imm16 0x40 /* 16 bit immediate */
-#define Imm32 0x80 /* 32 bit immediate */
-#define Imm32S 0x100 /* 32 bit immediate sign extended */
-#define Imm64 0x200 /* 64 bit immediate */
-#define Imm1 0x400 /* 1 bit immediate */
- /* memory */
-#define BaseIndex 0x800
- /* Disp8,16,32 are used in different ways, depending on the
- instruction. For jumps, they specify the size of the PC relative
- displacement, for baseindex type instructions, they specify the
- size of the offset relative to the base register, and for memory
- offset instructions such as `mov 1234,%al' they specify the size of
- the offset relative to the segment base. */
-#define Disp8 0x1000 /* 8 bit displacement */
-#define Disp16 0x2000 /* 16 bit displacement */
-#define Disp32 0x4000 /* 32 bit displacement */
-#define Disp32S 0x8000 /* 32 bit signed displacement */
-#define Disp64 0x10000 /* 64 bit displacement */
- /* specials */
-#define InOutPortReg 0x20000 /* register to hold in/out port addr = dx */
-#define ShiftCount 0x40000 /* register to hold shift cound = cl */
-#define Control 0x80000 /* Control register */
-#define Debug 0x100000 /* Debug register */
-#define Test 0x200000 /* Test register */
-#define FloatReg 0x400000 /* Float register */
-#define FloatAcc 0x800000 /* Float stack top %st(0) */
-#define SReg2 0x1000000 /* 2 bit segment register */
-#define SReg3 0x2000000 /* 3 bit segment register */
-#define Acc 0x4000000 /* Accumulator %al or %ax or %eax */
-#define JumpAbsolute 0x8000000
-#define RegMMX 0x10000000 /* MMX register */
-#define RegXMM 0x20000000 /* XMM registers in PIII */
-#define EsSeg 0x40000000 /* String insn operand with fixed es segment */
-
- /* InvMem is for instructions with a modrm byte that only allow a
- general register encoding in the i.tm.mode and i.tm.regmem fields,
- eg. control reg moves. They really ought to support a memory form,
- but don't, so we add an InvMem flag to the register operand to
- indicate that it should be encoded in the i.tm.regmem field. */
-#define InvMem 0x80000000
-
-#define Reg (Reg8|Reg16|Reg32|Reg64) /* gen'l register */
-#define WordReg (Reg16|Reg32|Reg64)
-#define ImplicitRegister (InOutPortReg|ShiftCount|Acc|FloatAcc)
-#define Imm (Imm8|Imm8S|Imm16|Imm32S|Imm32|Imm64) /* gen'l immediate */
-#define EncImm (Imm8|Imm16|Imm32|Imm32S) /* Encodable gen'l immediate */
-#define Disp (Disp8|Disp16|Disp32|Disp32S|Disp64) /* General displacement */
-#define AnyMem (Disp8|Disp16|Disp32|Disp32S|BaseIndex|InvMem) /* General memory */
- /* The following aliases are defined because the opcode table
- carefully specifies the allowed memory types for each instruction.
- At the moment we can only tell a memory reference size by the
- instruction suffix, so there's not much point in defining Mem8,
- Mem16, Mem32 and Mem64 opcode modifiers - We might as well just use
- the suffix directly to check memory operands. */
-#define LLongMem AnyMem /* 64 bits (or more) */
-#define LongMem AnyMem /* 32 bit memory ref */
-#define ShortMem AnyMem /* 16 bit memory ref */
-#define WordMem AnyMem /* 16 or 32 bit memory ref */
-#define ByteMem AnyMem /* 8 bit memory ref */
-}
-template;
-
/*
'templates' is for grouping together 'template' structures for opcodes
of the same name. This is only used for storing the insns in the grand
@@ -327,25 +141,6 @@ typedef struct
}
templates;
-/* these are for register name --> number & type hash lookup */
-typedef struct
-{
- char *reg_name;
- unsigned int reg_type;
- unsigned int reg_flags;
-#define RegRex 0x1 /* Extended register. */
-#define RegRex64 0x2 /* Extended 8 bit register. */
- unsigned int reg_num;
-}
-reg_entry;
-
-typedef struct
-{
- char *seg_name;
- unsigned int seg_prefix;
-}
-seg_entry;
-
/* 386 operand encoding bytes: see 386 book for details of this. */
typedef struct
{
@@ -357,16 +152,6 @@ modrm_byte;
/* x86-64 extension prefix. */
typedef int rex_byte;
-#define REX_OPCODE 0x40
-
-/* Indicates 64 bit operand size. */
-#define REX_MODE64 8
-/* High extension to reg field of modrm byte. */
-#define REX_EXTX 4
-/* High extension to SIB index field. */
-#define REX_EXTY 2
-/* High extension to base field of modrm or SIB, or reg field of opcode. */
-#define REX_EXTZ 1
/* 386 opcode byte to code indirect addressing. */
typedef struct
@@ -377,11 +162,30 @@ typedef struct
}
sib_byte;
-/* x86 arch names and features */
+enum processor_type
+{
+ PROCESSOR_UNKNOWN,
+ PROCESSOR_I486,
+ PROCESSOR_PENTIUM,
+ PROCESSOR_PENTIUMPRO,
+ PROCESSOR_PENTIUM4,
+ PROCESSOR_NOCONA,
+ PROCESSOR_CORE,
+ PROCESSOR_CORE2,
+ PROCESSOR_K6,
+ PROCESSOR_ATHLON,
+ PROCESSOR_K8,
+ PROCESSOR_GENERIC32,
+ PROCESSOR_GENERIC64,
+ PROCESSOR_AMDFAM10
+};
+
+/* x86 arch names, types and features */
typedef struct
{
- const char *name; /* arch name */
- unsigned int flags; /* cpu feature flags */
+ const char *name; /* arch name */
+ enum processor_type type; /* arch type */
+ unsigned int flags; /* cpu feature flags */
}
arch_entry;
@@ -393,22 +197,22 @@ arch_entry;
#if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) && !defined (LEX_AT)
#define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) x86_cons (EXP, NBYTES)
-extern void x86_cons PARAMS ((expressionS *, int));
+extern void x86_cons (expressionS *, int);
#endif
#define TC_CONS_FIX_NEW(FRAG,OFF,LEN,EXP) x86_cons_fix_new(FRAG, OFF, LEN, EXP)
extern void x86_cons_fix_new
- PARAMS ((fragS *, unsigned int, unsigned int, expressionS *));
+ (fragS *, unsigned int, unsigned int, expressionS *);
#define DIFF_EXPR_OK /* foo-. gets turned into PC relative relocs */
#define NO_RELOC BFD_RELOC_NONE
-void i386_validate_fix PARAMS ((struct fix *));
+void i386_validate_fix (struct fix *);
#define TC_VALIDATE_FIX(FIX,SEGTYPE,SKIP) i386_validate_fix(FIX)
#define tc_fix_adjustable(X) tc_i386_fix_adjustable(X)
-extern int tc_i386_fix_adjustable PARAMS ((struct fix *));
+extern int tc_i386_fix_adjustable (struct fix *);
/* Values passed to md_apply_fix don't include the symbol value. */
#define MD_APPLY_SYM_VALUE(FIX) 0
@@ -432,7 +236,6 @@ extern int tc_i386_fix_adjustable PARAMS ((struct fix *));
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
(!(FIX)->fx_pcrel \
- || (FIX)->fx_plt \
|| (FIX)->fx_r_type == BFD_RELOC_386_PLT32 \
|| (FIX)->fx_r_type == BFD_RELOC_386_GOT32 \
|| (FIX)->fx_r_type == BFD_RELOC_386_GOTPC \
@@ -460,7 +263,7 @@ if ((n) \
#define MAX_MEM_FOR_RS_ALIGN_CODE 15
-extern void i386_align_code PARAMS ((fragS *, int));
+extern void i386_align_code (fragS *, int);
#define HANDLE_ALIGN(fragP) \
if (fragP->fr_type == rs_align_code) \
@@ -468,16 +271,18 @@ if (fragP->fr_type == rs_align_code) \
- fragP->fr_address \
- fragP->fr_fix));
-void i386_print_statistics PARAMS ((FILE *));
+void i386_print_statistics (FILE *);
#define tc_print_statistics i386_print_statistics
#define md_number_to_chars number_to_chars_littleendian
#ifdef SCO_ELF
#define tc_init_after_args() sco_id ()
-extern void sco_id PARAMS ((void));
+extern void sco_id (void);
#endif
+#define WORKING_DOT_WORD 1
+
/* We want .cfi_* pseudo-ops for generating unwind info. */
#define TARGET_USE_CFIPOP 1
@@ -488,17 +293,17 @@ extern int x86_cie_data_alignment;
#define DWARF2_CIE_DATA_ALIGNMENT x86_cie_data_alignment
#define tc_regname_to_dw2regnum tc_x86_regname_to_dw2regnum
-extern int tc_x86_regname_to_dw2regnum PARAMS ((const char *regname));
+extern int tc_x86_regname_to_dw2regnum (char *);
#define tc_cfi_frame_initial_instructions tc_x86_frame_initial_instructions
-extern void tc_x86_frame_initial_instructions PARAMS ((void));
+extern void tc_x86_frame_initial_instructions (void);
#define md_elf_section_type(str,len) i386_elf_section_type (str, len)
-extern int i386_elf_section_type PARAMS ((const char *, size_t len));
+extern int i386_elf_section_type (const char *, size_t);
/* Support for SHF_X86_64_LARGE */
-extern int x86_64_section_word PARAMS ((char *, size_t));
-extern int x86_64_section_letter PARAMS ((int letter, char **ptr_msg));
+extern int x86_64_section_word (char *, size_t);
+extern int x86_64_section_letter (int, char **);
#define md_elf_section_letter(LETTER, PTR_MSG) x86_64_section_letter (LETTER, PTR_MSG)
#define md_elf_section_word(STR, LEN) x86_64_section_word (STR, LEN)
diff --git a/gas/config/tc-i860.c b/gas/config/tc-i860.c
index 4a87c540576b..c5aca38e4502 100644
--- a/gas/config/tc-i860.c
+++ b/gas/config/tc-i860.c
@@ -1,6 +1,6 @@
/* tc-i860.c -- Assembler for the Intel i860 architecture.
- Copyright 1989, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003
- Free Software Foundation, Inc.
+ Copyright 1989, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002,
+ 2003, 2006 Free Software Foundation, Inc.
Brought back from the dead and completely reworked
by Jason Eckhardt <jle@cygnus.com>.
@@ -21,8 +21,6 @@
with GAS; see the file COPYING. If not, write to the Free Software
Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-#include <stdio.h>
-#include <string.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
diff --git a/gas/config/tc-i960.c b/gas/config/tc-i960.c
index a3206bbf2d0e..0af3a80c35e9 100644
--- a/gas/config/tc-i960.c
+++ b/gas/config/tc-i960.c
@@ -1,6 +1,6 @@
/* tc-i960.c - All the i80960-specific stuff
Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2005
+ 1999, 2000, 2001, 2002, 2003, 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS.
@@ -63,8 +63,6 @@
less than 4096 is specified, in which case we need neither a fixup nor
a relocation directive. */
-#include <stdio.h>
-
#include "as.h"
#include "safe-ctype.h"
diff --git a/gas/config/tc-i960.h b/gas/config/tc-i960.h
index 05db36e40d5c..c5c33d37e07f 100644
--- a/gas/config/tc-i960.h
+++ b/gas/config/tc-i960.h
@@ -1,6 +1,6 @@
/* tc-i960.h - Basic 80960 instruction formats.
Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003
+ 2000, 2001, 2002, 2003, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -139,7 +139,6 @@ extern int reloc_callj PARAMS ((struct fix *));
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
(!(FIX)->fx_pcrel \
- || (FIX)->fx_plt \
|| TC_FORCE_RELOCATION (FIX) \
|| reloc_callj (FIX))
diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c
index 426b60f589aa..5ed9ba82ad2e 100644
--- a/gas/config/tc-ia64.c
+++ b/gas/config/tc-ia64.c
@@ -1,5 +1,5 @@
/* tc-ia64.c -- Assembler for the HP/Intel IA-64 architecture.
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
@@ -5634,7 +5634,7 @@ declare_register_set (prefix, num_regs, base_regnum)
for (i = 0; i < num_regs; ++i)
{
- sprintf (name, "%s%u", prefix, i);
+ snprintf (name, sizeof (name), "%s%u", prefix, i);
declare_register (name, base_regnum + i);
}
}
@@ -6691,7 +6691,7 @@ emit_one_bundle ()
int addr_mod;
first = (md.curr_slot + NUM_SLOTS - md.num_slots_in_use) % NUM_SLOTS;
- know (first >= 0 & first < NUM_SLOTS);
+ know (first >= 0 && first < NUM_SLOTS);
n = MIN (3, md.num_slots_in_use);
/* Determine template: user user_template if specified, best match
@@ -6971,7 +6971,8 @@ emit_one_bundle ()
else
as_fatal ("emit_one_bundle: unexpected dynamic op");
- sprintf (mnemonic, "%s.%c", idesc->name, "?imbfxx"[insn_unit]);
+ snprintf (mnemonic, sizeof (mnemonic), "%s.%c",
+ idesc->name, "?imbfxx"[insn_unit]);
opnd1 = idesc->operands[0];
opnd2 = idesc->operands[1];
ia64_free_opcode (idesc);
@@ -7066,7 +7067,6 @@ emit_one_bundle ()
fix = fix_new_exp (frag_now, frag_now_fix () - 16 + i, 8,
&ifix->expr, ifix->is_pcrel, ifix->code);
fix->tc_fix_data.opnd = ifix->opnd;
- fix->fx_plt = (fix->fx_r_type == BFD_RELOC_IA64_PLTOFF22);
fix->fx_file = md.slot[curr].src_file;
fix->fx_line = md.slot[curr].src_line;
}
@@ -10544,12 +10544,15 @@ check_dependencies (idesc)
int certain = (matchtype == 1 && CURR_SLOT.qp_regno == 0);
if (path != 0)
- sprintf (pathmsg, " when entry is at label '%s'",
+ snprintf (pathmsg, sizeof (pathmsg),
+ " when entry is at label '%s'",
md.entry_labels[path - 1]);
if (matchtype == 1 && rs->index >= 0)
- sprintf (indexmsg, ", specific resource number is %d",
+ snprintf (indexmsg, sizeof (indexmsg),
+ ", specific resource number is %d",
rs->index);
- sprintf (msg, "Use of '%s' %s %s dependency '%s' (%s)%s%s",
+ snprintf (msg, sizeof (msg),
+ "Use of '%s' %s %s dependency '%s' (%s)%s%s",
idesc->name,
(certain ? "violates" : "may violate"),
dv_mode[dep->mode], dep->name,
@@ -11862,7 +11865,7 @@ struct alias
{
char *file; /* The file where the directive is seen. */
unsigned int line; /* The line number the directive is at. */
- const char *name; /* The orignale name of the symbol. */
+ const char *name; /* The original name of the symbol. */
};
/* Called for .alias and .secalias directives. If SECTION is 1, it is
diff --git a/gas/config/tc-ia64.h b/gas/config/tc-ia64.h
index c17494beb16b..b851b9f37eb4 100644
--- a/gas/config/tc-ia64.h
+++ b/gas/config/tc-ia64.h
@@ -1,5 +1,5 @@
/* tc-ia64.h -- Header file for tc-ia64.c.
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
@@ -315,5 +315,5 @@ typedef struct unwind_record
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
((FIX)->fx_r_type != BFD_RELOC_UNUSED \
&& (!(FIX)->fx_pcrel \
- || (FIX)->fx_plt \
+ || (FIX)->fx_r_type == BFD_RELOC_IA64_PLTOFF22 \
|| TC_FORCE_RELOCATION (FIX)))
diff --git a/gas/config/tc-ip2k.c b/gas/config/tc-ip2k.c
index 10e9e2f3fa20..7c3f77513d81 100644
--- a/gas/config/tc-ip2k.c
+++ b/gas/config/tc-ip2k.c
@@ -1,5 +1,5 @@
/* tc-ip2k.c -- Assembler for the Scenix IP2xxx.
- Copyright (C) 2000, 2002, 2003, 2005 Free Software Foundation.
+ Copyright (C) 2000, 2002, 2003, 2005, 2006 Free Software Foundation.
This file is part of GAS, the GNU Assembler.
@@ -18,7 +18,6 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "subsegs.h"
#include "symcat.h"
diff --git a/gas/config/tc-iq2000.c b/gas/config/tc-iq2000.c
index 0d689c09a219..b7fddc5be3fd 100644
--- a/gas/config/tc-iq2000.c
+++ b/gas/config/tc-iq2000.c
@@ -1,5 +1,5 @@
/* tc-iq2000.c -- Assembler for the Sitera IQ2000.
- Copyright (C) 2003, 2004, 2005 Free Software Foundation.
+ Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation.
This file is part of GAS, the GNU Assembler.
@@ -18,7 +18,6 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
@@ -29,7 +28,7 @@
#include "elf/common.h"
#include "elf/iq2000.h"
#include "libbfd.h"
-#include "hash.h"
+#include "sb.h"
#include "macro.h"
/* Structure to hold all of the different components describing
diff --git a/gas/config/tc-m32c.c b/gas/config/tc-m32c.c
index 5f174d39c0d2..8194a673084a 100644
--- a/gas/config/tc-m32c.c
+++ b/gas/config/tc-m32c.c
@@ -1,5 +1,5 @@
/* tc-m32c.c -- Assembler for the Renesas M32C.
- Copyright (C) 2005 Free Software Foundation.
+ Copyright (C) 2005, 2006 Free Software Foundation.
Contributed by RedHat.
This file is part of GAS, the GNU Assembler.
@@ -19,7 +19,6 @@
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <stdio.h>
#include "as.h"
#include "subsegs.h"
#include "symcat.h"
@@ -29,9 +28,7 @@
#include "elf/common.h"
#include "elf/m32c.h"
#include "libbfd.h"
-#include "libiberty.h"
#include "safe-ctype.h"
-#include "bfd.h"
/* Structure to hold all of the different components
describing an individual instruction. */
@@ -55,8 +52,8 @@ typedef struct
}
m32c_insn;
-#define rl_for(insn) (CGEN_ATTR_CGEN_INSN_RL_TYPE_VALUE (&(insn.insn->base->attrs)))
-#define relaxable(insn) (CGEN_ATTR_CGEN_INSN_RELAXABLE_VALUE (&(insn.insn->base->attrs)))
+#define rl_for(_insn) (CGEN_ATTR_CGEN_INSN_RL_TYPE_VALUE (&((_insn).insn->base->attrs)))
+#define relaxable(_insn) (CGEN_ATTR_CGEN_INSN_RELAXABLE_VALUE (&((_insn).insn->base->attrs)))
const char comment_chars[] = ";";
const char line_comment_chars[] = "#";
@@ -154,6 +151,7 @@ s_bss (int ignore ATTRIBUTE_UNUSED)
const pseudo_typeS md_pseudo_table[] =
{
{ "bss", s_bss, 0},
+ { "3byte", cons, 3 },
{ "word", cons, 4 },
{ NULL, NULL, 0 }
};
@@ -450,7 +448,12 @@ const relax_typeS md_relax_table[] =
/* 19 */ { 32767, -32768, 3, 20 }, /* jsr16.w */
/* 20 */ { 0, 0, 4, 0 }, /* jsr16.a */
/* 21 */ { 32767, -32768, 3, 11 }, /* jsr32.w */
- /* 22 */ { 0, 0, 4, 0 } /* jsr32.a */
+ /* 22 */ { 0, 0, 4, 0 }, /* jsr32.a */
+
+ /* 23 */ { 0, 0, 3, 0 }, /* adjnz pc8 */
+ /* 24 */ { 0, 0, 4, 0 }, /* adjnz disp8 pc8 */
+ /* 25 */ { 0, 0, 5, 0 }, /* adjnz disp16 pc8 */
+ /* 26 */ { 0, 0, 6, 0 } /* adjnz disp24 pc8 */
};
enum {
@@ -460,6 +463,11 @@ enum {
M32C_MACRO_JCND16_A,
M32C_MACRO_JCND32_W,
M32C_MACRO_JCND32_A,
+ /* the digit is the array index of the pcrel byte */
+ M32C_MACRO_ADJNZ_2,
+ M32C_MACRO_ADJNZ_3,
+ M32C_MACRO_ADJNZ_4,
+ M32C_MACRO_ADJNZ_5,
} M32C_Macros;
static struct {
@@ -496,7 +504,12 @@ static struct {
/* 19 */ { M32C_INSN_JSR16_W, 3, M32C_INSN_JSR16_A, 2 },
/* 20 */ { M32C_INSN_JSR16_A, 4, M32C_INSN_JSR16_A, 0 },
/* 21 */ { M32C_INSN_JSR32_W, 3, M32C_INSN_JSR32_A, 2 },
- /* 22 */ { M32C_INSN_JSR32_A, 4, M32C_INSN_JSR32_A, 0 }
+ /* 22 */ { M32C_INSN_JSR32_A, 4, M32C_INSN_JSR32_A, 0 },
+
+ /* 23 */ { -M32C_MACRO_ADJNZ_2, 3, -M32C_MACRO_ADJNZ_2, 0 },
+ /* 24 */ { -M32C_MACRO_ADJNZ_3, 4, -M32C_MACRO_ADJNZ_3, 0 },
+ /* 25 */ { -M32C_MACRO_ADJNZ_4, 5, -M32C_MACRO_ADJNZ_4, 0 },
+ /* 26 */ { -M32C_MACRO_ADJNZ_5, 6, -M32C_MACRO_ADJNZ_5, 0 }
};
#define NUM_MAPPINGS (sizeof (subtype_mappings) / sizeof (subtype_mappings[0]))
@@ -511,11 +524,21 @@ m32c_prepare_relax_scan (fragS *fragP, offsetT *aim, relax_substateT this_state)
}
static int
-insn_to_subtype (int insn)
+insn_to_subtype (int inum, const CGEN_INSN *insn)
{
unsigned int i;
+
+ if (insn
+ && (strncmp (insn->base->mnemonic, "adjnz", 5) == 0
+ || strncmp (insn->base->mnemonic, "sbjnz", 5) == 0))
+ {
+ i = 23 + insn->base->bitsize/8 - 3;
+ /*printf("mapping %d used for %s\n", i, insn->base->mnemonic);*/
+ return i;
+ }
+
for (i=0; i<NUM_MAPPINGS; i++)
- if (insn == subtype_mappings[i].insn)
+ if (inum == subtype_mappings[i].insn)
{
/*printf("mapping %d used\n", i);*/
return i;
@@ -540,14 +563,14 @@ md_estimate_size_before_relax (fragS * fragP, segT segment ATTRIBUTE_UNUSED)
int where = fragP->fr_opcode - fragP->fr_literal;
if (fragP->fr_subtype == 1)
- fragP->fr_subtype = insn_to_subtype (fragP->fr_cgen.insn->base->num);
+ fragP->fr_subtype = insn_to_subtype (fragP->fr_cgen.insn->base->num, fragP->fr_cgen.insn);
if (S_GET_SEGMENT (fragP->fr_symbol) != segment)
{
int new_insn;
new_insn = subtype_mappings[fragP->fr_subtype].insn_for_extern;
- fragP->fr_subtype = insn_to_subtype (new_insn);
+ fragP->fr_subtype = insn_to_subtype (new_insn, 0);
}
if (fragP->fr_cgen.insn->base
@@ -835,6 +858,26 @@ md_convert_frag (bfd * abfd ATTRIBUTE_UNUSED,
rl_addend = 0x41;
break;
+ case -M32C_MACRO_ADJNZ_2:
+ rl_addend = 0x31;
+ op[2] = addend;
+ operand = M32C_OPERAND_LAB_16_8;
+ break;
+ case -M32C_MACRO_ADJNZ_3:
+ rl_addend = 0x41;
+ op[3] = addend;
+ operand = M32C_OPERAND_LAB_24_8;
+ break;
+ case -M32C_MACRO_ADJNZ_4:
+ rl_addend = 0x51;
+ op[4] = addend;
+ operand = M32C_OPERAND_LAB_32_8;
+ break;
+ case -M32C_MACRO_ADJNZ_5:
+ rl_addend = 0x61;
+ op[5] = addend;
+ operand = M32C_OPERAND_LAB_40_8;
+ break;
default:
@@ -860,15 +903,16 @@ md_convert_frag (bfd * abfd ATTRIBUTE_UNUSED,
|| (m32c_relax && (operand != M32C_OPERAND_LAB_5_3
&& operand != M32C_OPERAND_LAB32_JMP_S)))
{
+ fixS *fixP;
assert (fragP->fr_cgen.insn != 0);
- gas_cgen_record_fixup (fragP,
- where,
- fragP->fr_cgen.insn,
- (fragP->fr_fix - where) * 8,
- cgen_operand_lookup_by_num (gas_cgen_cpu_desc,
- operand),
- fragP->fr_cgen.opinfo,
- fragP->fr_symbol, fragP->fr_offset);
+ fixP = gas_cgen_record_fixup (fragP,
+ where,
+ fragP->fr_cgen.insn,
+ (fragP->fr_fix - where) * 8,
+ cgen_operand_lookup_by_num (gas_cgen_cpu_desc,
+ operand),
+ fragP->fr_cgen.opinfo,
+ fragP->fr_symbol, fragP->fr_offset);
}
}
@@ -1021,6 +1065,37 @@ md_cgen_lookup_reloc (const CGEN_INSN * insn ATTRIBUTE_UNUSED,
}
void
+m32c_cons_fix_new (fragS * frag,
+ int where,
+ int size,
+ expressionS *exp)
+{
+ bfd_reloc_code_real_type type;
+
+ switch (size)
+ {
+ case 1:
+ type = BFD_RELOC_8;
+ break;
+ case 2:
+ type = BFD_RELOC_16;
+ break;
+ case 3:
+ type = BFD_RELOC_24;
+ break;
+ case 4:
+ default:
+ type = BFD_RELOC_32;
+ break;
+ case 8:
+ type = BFD_RELOC_64;
+ break;
+ }
+
+ fix_new_exp (frag, where, (int) size, exp, 0, type);
+}
+
+void
m32c_apply_fix (struct fix *f, valueT *t, segT s)
{
if (f->fx_r_type == BFD_RELOC_M32C_RL_JUMP
diff --git a/gas/config/tc-m32c.h b/gas/config/tc-m32c.h
index 3cdd1a14e4f4..697e130e19d5 100644
--- a/gas/config/tc-m32c.h
+++ b/gas/config/tc-m32c.h
@@ -57,6 +57,10 @@ extern bfd_boolean m32c_fix_adjustable PARAMS ((struct fix *));
#define TC_FORCE_RELOCATION(fix) m32c_force_relocation (fix)
extern int m32c_force_relocation PARAMS ((struct fix *));
+#define TC_CONS_FIX_NEW(FRAG, WHERE, NBYTES, EXP) \
+ m32c_cons_fix_new (FRAG, WHERE, NBYTES, EXP)
+extern void m32c_cons_fix_new (fragS *, int, int, expressionS *);
+
extern const struct relax_type md_relax_table[];
#define TC_GENERIC_RELAX_TABLE md_relax_table
diff --git a/gas/config/tc-m32r.c b/gas/config/tc-m32r.c
index 51b160a98f76..bec2a8ced1ac 100644
--- a/gas/config/tc-m32r.c
+++ b/gas/config/tc-m32r.c
@@ -1,6 +1,6 @@
/* tc-m32r.c -- Assembler for the Renesas M32R.
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -19,7 +19,6 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
diff --git a/gas/config/tc-m32r.h b/gas/config/tc-m32r.h
index 69fe9453cc36..e5373cc160fa 100644
--- a/gas/config/tc-m32r.h
+++ b/gas/config/tc-m32r.h
@@ -1,6 +1,6 @@
/* tc-m32r.h -- Header file for tc-m32r.c.
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2007 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -88,13 +88,6 @@ extern bfd_boolean m32r_fix_adjustable (struct fix *);
obj_fix_adjustable() says it is not adjustable. */
#define TC_FIX_ADJUSTABLE(fixP) obj_fix_adjustable (fixP)
-#define TC_RELOC_RTSYM_LOC_FIXUP(FIX) \
- ((FIX)->fx_addsy == NULL \
- || (! S_IS_EXTERNAL ((FIX)->fx_addsy) \
- && ! S_IS_WEAK ((FIX)->fx_addsy) \
- && S_IS_DEFINED ((FIX)->fx_addsy) \
- && ! S_IS_COMMON ((FIX)->fx_addsy)))
-
#define tc_frob_file_before_fix() m32r_frob_file ()
extern void m32r_frob_file (void);
diff --git a/gas/config/tc-m68hc11.c b/gas/config/tc-m68hc11.c
index e6d4235d7699..822174fa11ea 100644
--- a/gas/config/tc-m68hc11.c
+++ b/gas/config/tc-m68hc11.c
@@ -1,5 +1,5 @@
/* tc-m68hc11.c -- Assembler code for the Motorola 68HC11 & 68HC12.
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Stephane Carrez (stcarrez@nerim.fr)
@@ -210,7 +210,7 @@ static void s_m68hc11_mark_symbol (int);
jmp L
Setting the flag forbidds this. */
-static short flag_fixed_branchs = 0;
+static short flag_fixed_branches = 0;
/* Force to use long jumps (absolute) instead of relative branches. */
static short flag_force_long_jumps = 0;
@@ -290,10 +290,12 @@ const char *md_shortopts = "Sm:";
struct option md_longopts[] = {
#define OPTION_FORCE_LONG_BRANCH (OPTION_MD_BASE)
- {"force-long-branchs", no_argument, NULL, OPTION_FORCE_LONG_BRANCH},
+ {"force-long-branches", no_argument, NULL, OPTION_FORCE_LONG_BRANCH},
+ {"force-long-branchs", no_argument, NULL, OPTION_FORCE_LONG_BRANCH}, /* Misspelt version kept for backwards compatibility. */
-#define OPTION_SHORT_BRANCHS (OPTION_MD_BASE + 1)
- {"short-branchs", no_argument, NULL, OPTION_SHORT_BRANCHS},
+#define OPTION_SHORT_BRANCHES (OPTION_MD_BASE + 1)
+ {"short-branches", no_argument, NULL, OPTION_SHORT_BRANCHES},
+ {"short-branchs", no_argument, NULL, OPTION_SHORT_BRANCHES}, /* Misspelt version kept for backwards compatibility. */
#define OPTION_STRICT_DIRECT_MODE (OPTION_MD_BASE + 2)
{"strict-direct-mode", no_argument, NULL, OPTION_STRICT_DIRECT_MODE},
@@ -374,8 +376,8 @@ Motorola 68HC11/68HC12/68HCS12 options:\n\
-mlong use 32-bit int ABI\n\
-mshort-double use 32-bit double ABI\n\
-mlong-double use 64-bit double ABI (default)\n\
- --force-long-branchs always turn relative branchs into absolute ones\n\
- -S,--short-branchs do not turn relative branchs into absolute ones\n\
+ --force-long-branches always turn relative branches into absolute ones\n\
+ -S,--short-branches do not turn relative branches into absolute ones\n\
when the offset is out of range\n\
--strict-direct-mode do not turn the direct mode into extended mode\n\
when the instruction does not support direct mode\n\
@@ -447,9 +449,9 @@ md_parse_option (int c, char *arg)
switch (c)
{
/* -S means keep external to 2 bit offset rather than 16 bit one. */
- case OPTION_SHORT_BRANCHS:
+ case OPTION_SHORT_BRANCHES:
case 'S':
- flag_fixed_branchs = 1;
+ flag_fixed_branches = 1;
break;
case OPTION_FORCE_LONG_BRANCH:
@@ -1516,7 +1518,7 @@ fixup24 (expressionS *oper, int mode, int opmode ATTRIBUTE_UNUSED)
fixS *fixp;
/* Now create a 24-bit fixup. */
- fixp = fix_new_exp (frag_now, f - frag_now->fr_literal, 2,
+ fixp = fix_new_exp (frag_now, f - frag_now->fr_literal, 3,
oper, FALSE, BFD_RELOC_M68HC11_24);
number_to_chars_bigendian (f, 0, 3);
}
@@ -1587,12 +1589,12 @@ build_jump_insn (struct m68hc11_opcode *opcode, operand operands[],
if ((jmp_mode == 0 && flag_force_long_jumps)
|| (operands[0].exp.X_op == O_constant
&& (!check_range (n, opcode->format) &&
- (jmp_mode == 1 || flag_fixed_branchs == 0))))
+ (jmp_mode == 1 || flag_fixed_branches == 0))))
{
frag = frag_now;
where = frag_now_fix ();
- fix_new (frag_now, frag_now_fix (), 1,
+ fix_new (frag_now, frag_now_fix (), 0,
&abs_symbol, 0, 1, BFD_RELOC_M68HC11_RL_JUMP);
if (code == M6811_BSR || code == M6811_BRA || code == M6812_BSR)
@@ -1652,7 +1654,7 @@ build_jump_insn (struct m68hc11_opcode *opcode, operand operands[],
frag = frag_now;
where = frag_now_fix ();
- fix_new (frag_now, frag_now_fix (), 1,
+ fix_new (frag_now, frag_now_fix (), 0,
&abs_symbol, 0, 1, BFD_RELOC_M68HC11_RL_JUMP);
f = m68hc11_new_insn (2);
@@ -1667,11 +1669,11 @@ build_jump_insn (struct m68hc11_opcode *opcode, operand operands[],
frag = frag_now;
where = frag_now_fix ();
- fix_new (frag_now, frag_now_fix (), 1,
+ fix_new (frag_now, frag_now_fix (), 0,
&abs_symbol, 0, 1, BFD_RELOC_M68HC11_RL_JUMP);
/* Branch offset must fit in 8-bits, don't do some relax. */
- if (jmp_mode == 0 && flag_fixed_branchs)
+ if (jmp_mode == 0 && flag_fixed_branches)
{
opcode = m68hc11_new_insn (1);
number_to_chars_bigendian (opcode, code, 1);
@@ -1753,7 +1755,7 @@ build_dbranch_insn (struct m68hc11_opcode *opcode, operand operands[],
if ((jmp_mode == 0 && flag_force_long_jumps)
|| (operands[1].exp.X_op == O_constant
&& (!check_range (n, M6812_OP_IBCC_MARKER) &&
- (jmp_mode == 1 || flag_fixed_branchs == 0))))
+ (jmp_mode == 1 || flag_fixed_branches == 0))))
{
f = frag_more (2);
code ^= 0x20;
@@ -1784,7 +1786,7 @@ build_dbranch_insn (struct m68hc11_opcode *opcode, operand operands[],
else
{
/* Branch offset must fit in 8-bits, don't do some relax. */
- if (jmp_mode == 0 && flag_fixed_branchs)
+ if (jmp_mode == 0 && flag_fixed_branches)
{
fixup8 (&operands[0].exp, M6811_OP_JUMP_REL, M6811_OP_JUMP_REL);
}
@@ -2100,7 +2102,7 @@ build_insn (struct m68hc11_opcode *opcode, operand operands[],
format = opcode->format;
if (format & M6811_OP_BRANCH)
- fix_new (frag_now, frag_now_fix (), 1,
+ fix_new (frag_now, frag_now_fix (), 0,
&abs_symbol, 0, 1, BFD_RELOC_M68HC11_RL_JUMP);
if (format & OP_EXTENDED)
@@ -2455,7 +2457,7 @@ md_assemble (char *str)
char name[20];
int nlen = 0;
operand operands[M6811_MAX_OPERANDS];
- int nb_operands;
+ int nb_operands = 0;
int branch_optimize = 0;
int alias_id = -1;
@@ -2484,8 +2486,8 @@ md_assemble (char *str)
opc = (struct m68hc11_opcode_def *) hash_find (m68hc11_hash, name);
/* If it's not recognized, look for 'jbsr' and 'jbxx'. These are
- pseudo insns for relative branch. For these branchs, we always
- optimize them (turned into absolute branchs) even if --short-branchs
+ pseudo insns for relative branch. For these branches, we always
+ optimize them (turned into absolute branches) even if --short-branches
is given. */
if (opc == NULL && name[0] == 'j' && name[1] == 'b')
{
@@ -2702,7 +2704,7 @@ s_m68hc11_relax (int ignore ATTRIBUTE_UNUSED)
return;
}
- fix_new_exp (frag_now, frag_now_fix (), 2, &ex, 1,
+ fix_new_exp (frag_now, frag_now_fix (), 0, &ex, 1,
BFD_RELOC_M68HC11_RL_GROUP);
demand_empty_rest_of_line ();
@@ -3018,7 +3020,7 @@ md_estimate_size_before_relax (fragS *fragP, asection *segment)
|| IS_OPCODE (fragP->fr_opcode[0], M6811_BRA)
|| IS_OPCODE (fragP->fr_opcode[0], M6812_BSR));
- if (flag_fixed_branchs)
+ if (flag_fixed_branches)
as_bad_where (fragP->fr_file, fragP->fr_line,
_("bra or bsr with undefined symbol."));
diff --git a/gas/config/tc-m68k.c b/gas/config/tc-m68k.c
index 6cf85d7e603a..32c985324c26 100644
--- a/gas/config/tc-m68k.c
+++ b/gas/config/tc-m68k.c
@@ -1,6 +1,6 @@
/* tc-m68k.c -- Assemble for the m68k family
Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -173,62 +173,130 @@ static const enum m68k_register m68060_ctrl[] = {
};
static const enum m68k_register mcf_ctrl[] = {
CACR, TC, ACR0, ACR1, ACR2, ACR3, VBR, ROMBAR,
- RAMBAR0, RAMBAR1, MBAR,
+ RAMBAR0, RAMBAR1, RAMBAR, MBAR,
+ 0
+};
+static const enum m68k_register mcf5206_ctrl[] = {
+ CACR, ACR0, ACR1, VBR, RAMBAR0, RAMBAR_ALT, MBAR,
0
};
static const enum m68k_register mcf5208_ctrl[] = {
- CACR, ACR0, ACR1, VBR, RAMBAR1,
+ CACR, ACR0, ACR1, VBR, RAMBAR, RAMBAR1,
+ 0
+};
+static const enum m68k_register mcf5210a_ctrl[] = {
+ VBR, CACR, ACR0, ACR1, ROMBAR, RAMBAR, RAMBAR1, MBAR,
0
};
static const enum m68k_register mcf5213_ctrl[] = {
- VBR, RAMBAR, FLASHBAR,
+ VBR, RAMBAR, RAMBAR1, FLASHBAR,
0
};
static const enum m68k_register mcf5216_ctrl[] = {
- VBR, CACR, ACR0, ACR1, FLASHBAR, RAMBAR,
+ VBR, CACR, ACR0, ACR1, FLASHBAR, RAMBAR, RAMBAR1,
+ 0
+};
+static const enum m68k_register mcf52223_ctrl[] = {
+ VBR, CACR, ACR0, ACR1, FLASHBAR, RAMBAR, RAMBAR1,
+ 0
+};
+static const enum m68k_register mcf52235_ctrl[] = {
+ VBR, FLASHBAR, RAMBAR, RAMBAR1,
+ 0
+};
+static const enum m68k_register mcf5225_ctrl[] = {
+ VBR, CACR, ACR0, ACR1, FLASHBAR, RAMBAR, MBAR, RAMBAR1,
0
};
static const enum m68k_register mcf5235_ctrl[] = {
- VBR, CACR, ACR0, ACR1, RAMBAR,
+ VBR, CACR, ACR0, ACR1, RAMBAR, RAMBAR1,
0
};
static const enum m68k_register mcf5249_ctrl[] = {
- VBR, CACR, ACR0, ACR1, RAMBAR0, RAMBAR1, MBAR, MBAR2,
+ VBR, CACR, ACR0, ACR1, RAMBAR0, RAMBAR1, RAMBAR, MBAR, MBAR2,
0
};
static const enum m68k_register mcf5250_ctrl[] = {
VBR,
0
};
+static const enum m68k_register mcf5253_ctrl[] = {
+ VBR, CACR, ACR0, ACR1, RAMBAR0, RAMBAR1, MBAR,
+ 0
+};
static const enum m68k_register mcf5271_ctrl[] = {
- VBR, CACR, ACR0, ACR1, RAMBAR,
+ VBR, CACR, ACR0, ACR1, RAMBAR, RAMBAR1,
0
};
static const enum m68k_register mcf5272_ctrl[] = {
- VBR, CACR, ACR0, ACR1, ROMBAR, RAMBAR, MBAR,
+ VBR, CACR, ACR0, ACR1, ROMBAR, RAMBAR_ALT, RAMBAR0, MBAR,
0
};
static const enum m68k_register mcf5275_ctrl[] = {
- VBR, CACR, ACR0, ACR1, RAMBAR,
+ VBR, CACR, ACR0, ACR1, RAMBAR, RAMBAR1,
0
};
static const enum m68k_register mcf5282_ctrl[] = {
- VBR, CACR, ACR0, ACR1, FLASHBAR, RAMBAR,
+ VBR, CACR, ACR0, ACR1, FLASHBAR, RAMBAR, RAMBAR1,
+ 0
+};
+static const enum m68k_register mcf5307_ctrl[] = {
+ CACR, ACR0, ACR1, VBR, RAMBAR0, RAMBAR_ALT, MBAR,
0
};
static const enum m68k_register mcf5329_ctrl[] = {
- VBR, CACR, ACR0, ACR1, RAMBAR,
+ VBR, CACR, ACR0, ACR1, RAMBAR, RAMBAR1,
0
};
static const enum m68k_register mcf5373_ctrl[] = {
- VBR, CACR, ACR0, ACR1, RAMBAR,
+ VBR, CACR, ACR0, ACR1, RAMBAR, RAMBAR1,
0
};
static const enum m68k_register mcfv4e_ctrl[] = {
- CACR, TC, ITT0, ITT1, DTT0, DTT1, BUSCR, VBR, PC, ROMBAR,
- ROMBAR1, RAMBAR0, RAMBAR1, MPCR, EDRAMBAR, SECMBAR, MBAR, MBAR0, MBAR1,
+ CACR, ASID, ACR0, ACR1, ACR2, ACR3, MMUBAR,
+ VBR, PC, ROMBAR0, ROMBAR1, RAMBAR0, RAMBAR1,
+ MBAR, SECMBAR,
+ MPCR /* Multiprocessor Control register */,
+ EDRAMBAR /* Embedded DRAM Base Address Register */,
+ /* Permutation control registers. */
PCR1U0, PCR1L0, PCR1U1, PCR1L1, PCR2U0, PCR2L0, PCR2U1, PCR2L1,
PCR3U0, PCR3L0, PCR3U1, PCR3L1,
+ /* Legacy names */
+ TC /* ASID */, BUSCR /* MMUBAR */,
+ ITT0 /* ACR0 */, ITT1 /* ACR1 */, DTT0 /* ACR2 */, DTT1 /* ACR3 */,
+ MBAR1 /* MBAR */, MBAR2 /* SECMBAR */, MBAR0 /* SECMBAR */,
+ ROMBAR /* ROMBAR0 */, RAMBAR /* RAMBAR1 */,
+ 0
+};
+static const enum m68k_register mcf54455_ctrl[] = {
+ CACR, ASID, ACR0, ACR1, ACR2, ACR3, MMUBAR,
+ VBR, PC, RAMBAR1, MBAR,
+ /* Legacy names */
+ TC /* ASID */, BUSCR /* MMUBAR */,
+ ITT0 /* ACR0 */, ITT1 /* ACR1 */, DTT0 /* ACR2 */, DTT1 /* ACR3 */,
+ MBAR1 /* MBAR */, RAMBAR /* RAMBAR1 */,
+ 0
+};
+static const enum m68k_register mcf5475_ctrl[] = {
+ CACR, ASID, ACR0, ACR1, ACR2, ACR3, MMUBAR,
+ VBR, PC, RAMBAR0, RAMBAR1, MBAR,
+ /* Legacy names */
+ TC /* ASID */, BUSCR /* MMUBAR */,
+ ITT0 /* ACR0 */, ITT1 /* ACR1 */, DTT0 /* ACR2 */, DTT1 /* ACR3 */,
+ MBAR1 /* MBAR */, RAMBAR /* RAMBAR1 */,
+ 0
+};
+static const enum m68k_register mcf5485_ctrl[] = {
+ CACR, ASID, ACR0, ACR1, ACR2, ACR3, MMUBAR,
+ VBR, PC, RAMBAR0, RAMBAR1, MBAR,
+ /* Legacy names */
+ TC /* ASID */, BUSCR /* MMUBAR */,
+ ITT0 /* ACR0 */, ITT1 /* ACR1 */, DTT0 /* ACR2 */, DTT1 /* ACR3 */,
+ MBAR1 /* MBAR */, RAMBAR /* RAMBAR1 */,
+ 0
+};
+static const enum m68k_register fido_ctrl[] = {
+ SFC, DFC, USP, VBR, CAC, MBB,
0
};
#define cpu32_ctrl m68010_ctrl
@@ -284,14 +352,21 @@ struct m68k_it
reloc[5]; /* Five is enough??? */
};
-#define cpu_of_arch(x) ((x) & (m68000up | mcfisa_a))
+#define cpu_of_arch(x) ((x) & (m68000up | mcfisa_a | fido_a))
#define float_of_arch(x) ((x) & mfloat)
#define mmu_of_arch(x) ((x) & mmmu)
#define arch_coldfire_p(x) ((x) & mcfisa_a)
#define arch_coldfire_fpu(x) ((x) & cfloat)
/* Macros for determining if cpu supports a specific addressing mode. */
-#define HAVE_LONG_BRANCH(x) ((x) & (m68020|m68030|m68040|m68060|cpu32|mcfisa_b))
+#define HAVE_LONG_DISP(x) \
+ ((x) & (m68020|m68030|m68040|m68060|cpu32|fido_a|mcfisa_b|mcfisa_c))
+#define HAVE_LONG_CALL(x) \
+ ((x) & (m68020|m68030|m68040|m68060|cpu32|fido_a|mcfisa_b|mcfisa_c))
+#define HAVE_LONG_COND(x) \
+ ((x) & (m68020|m68030|m68040|m68060|cpu32|fido_a|mcfisa_b|mcfisa_c))
+#define HAVE_LONG_BRANCH(x) \
+ ((x) & (m68020|m68030|m68040|m68060|cpu32|fido_a|mcfisa_b))
static struct m68k_it the_ins; /* The instruction being assembled. */
@@ -421,9 +496,11 @@ static const struct m68k_cpu m68k_archs[] =
{m68040, m68040_ctrl, "68040", 0},
{m68060, m68060_ctrl, "68060", 0},
{cpu32|m68881, cpu32_ctrl, "cpu32", 0},
+ {fido_a, fido_ctrl, "fidoa", 0},
{mcfisa_a|mcfhwdiv, NULL, "isaa", 0},
{mcfisa_a|mcfhwdiv|mcfisa_aa|mcfusp, NULL, "isaaplus", 0},
{mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp, NULL, "isab", 0},
+ {mcfisa_a|mcfhwdiv|mcfisa_c|mcfusp, NULL, "isac", 0},
{mcfisa_a|mcfhwdiv|mcfisa_b|mcfmac|mcfusp, mcf_ctrl, "cfv4", 0},
{mcfisa_a|mcfhwdiv|mcfisa_b|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "cfv4e", 0},
{0,0,NULL, 0}
@@ -486,13 +563,16 @@ static const struct m68k_cpu m68k_cpus[] =
{mcfisa_a, mcf_ctrl, "5200", 0},
{mcfisa_a, mcf_ctrl, "5202", 1},
{mcfisa_a, mcf_ctrl, "5204", 1},
- {mcfisa_a, mcf_ctrl, "5206", 1},
+ {mcfisa_a, mcf5206_ctrl, "5206", 1},
- {mcfisa_a|mcfhwdiv|mcfmac, mcf_ctrl, "5206e", 0},
+ {mcfisa_a|mcfhwdiv|mcfmac, mcf5206_ctrl, "5206e", 0},
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5208_ctrl, "5207", -1},
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5208_ctrl, "5208", 0},
+ {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, mcf5210a_ctrl, "5210a", 0},
+ {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, mcf5210a_ctrl, "5211a", 1},
+
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, mcf5213_ctrl, "5211", -1},
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, mcf5213_ctrl, "5212", -1},
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, mcf5213_ctrl, "5213", 0},
@@ -501,6 +581,17 @@ static const struct m68k_cpu m68k_cpus[] =
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5216_ctrl, "5216", 0},
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5216_ctrl, "521x", 2},
+ {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, mcf52223_ctrl, "52221", -1},
+ {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, mcf52223_ctrl, "52223", 0},
+
+ {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf52235_ctrl, "52230", -1},
+ {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf52235_ctrl, "52233", -1},
+ {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf52235_ctrl, "52234", -1},
+ {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf52235_ctrl, "52235", 0},
+
+ {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, mcf5225_ctrl, "5224", -1},
+ {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, mcf5225_ctrl, "5225", 0},
+
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5235_ctrl, "5232", -1},
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5235_ctrl, "5233", -1},
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5235_ctrl, "5234", -1},
@@ -509,6 +600,7 @@ static const struct m68k_cpu m68k_cpus[] =
{mcfisa_a|mcfhwdiv|mcfemac, mcf5249_ctrl, "5249", 0},
{mcfisa_a|mcfhwdiv|mcfemac, mcf5250_ctrl, "5250", 0},
+ {mcfisa_a|mcfhwdiv|mcfemac, mcf5253_ctrl, "5253", 0},
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5271_ctrl, "5270", -1},
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5271_ctrl, "5271", 0},
@@ -523,7 +615,7 @@ static const struct m68k_cpu m68k_cpus[] =
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5282_ctrl, "5282", -1},
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5282_ctrl, "528x", 0},
- {mcfisa_a|mcfhwdiv|mcfmac, mcf_ctrl, "5307", 0},
+ {mcfisa_a|mcfhwdiv|mcfmac, mcf5307_ctrl, "5307", 0},
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5329_ctrl, "5327", -1},
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5329_ctrl, "5328", -1},
@@ -535,23 +627,33 @@ static const struct m68k_cpu m68k_cpus[] =
{mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, mcf5373_ctrl, "537x", 0},
{mcfisa_a|mcfisa_b|mcfhwdiv|mcfmac, mcf_ctrl, "5407",0},
+
+ {mcfisa_a|mcfisa_c|mcfhwdiv|mcfemac|mcfusp, mcf54455_ctrl, "54450", -1},
+ {mcfisa_a|mcfisa_c|mcfhwdiv|mcfemac|mcfusp, mcf54455_ctrl, "54451", -1},
+ {mcfisa_a|mcfisa_c|mcfhwdiv|mcfemac|mcfusp, mcf54455_ctrl, "54452", -1},
+ {mcfisa_a|mcfisa_c|mcfhwdiv|mcfemac|mcfusp, mcf54455_ctrl, "54453", -1},
+ {mcfisa_a|mcfisa_c|mcfhwdiv|mcfemac|mcfusp, mcf54455_ctrl, "54454", -1},
+ {mcfisa_a|mcfisa_c|mcfhwdiv|mcfemac|mcfusp, mcf54455_ctrl, "54455", 0},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "5470", -1},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "5471", -1},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "5472", -1},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "5473", -1},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "5474", -1},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "5475", -1},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "547x", 0},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5475_ctrl, "5470", -1},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5475_ctrl, "5471", -1},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5475_ctrl, "5472", -1},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5475_ctrl, "5473", -1},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5475_ctrl, "5474", -1},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5475_ctrl, "5475", -1},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5475_ctrl, "547x", 0},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "5480", -1},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "5481", -1},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "5482", -1},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "5483", -1},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "5484", -1},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "5485", -1},
- {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "548x", 0},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5485_ctrl, "5480", -1},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5485_ctrl, "5481", -1},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5485_ctrl, "5482", -1},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5485_ctrl, "5483", -1},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5485_ctrl, "5484", -1},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5485_ctrl, "5485", -1},
+ {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcf5485_ctrl, "548x", 0},
+ {fido_a, fido_ctrl, "fidoa", 0},
+ {fido_a, fido_ctrl, "fido", 1},
+
{0,NULL,NULL, 0}
};
@@ -957,7 +1059,9 @@ tc_m68k_fix_adjustable (fixS *fixP)
#define get_reloc_code(SIZE,PCREL,OTHER) NO_RELOC
-#define relaxable_symbol(symbol) 1
+/* PR gas/3041 Weak symbols are not relaxable
+ because they must be treated as extern. */
+#define relaxable_symbol(symbol) (!(S_IS_WEAK (symbol)))
#endif /* OBJ_ELF */
@@ -1051,6 +1155,14 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
#ifndef OBJ_ELF
if (fixp->fx_pcrel)
reloc->addend = fixp->fx_addnumber;
+ else if (OUTPUT_FLAVOR == bfd_target_aout_flavour
+ && fixp->fx_addsy
+ && S_IS_WEAK (fixp->fx_addsy)
+ && ! bfd_is_und_section (S_GET_SEGMENT (fixp->fx_addsy)))
+ /* PR gas/3041 Adjust addend in order to force bfd_install_relocation()
+ to put the symbol offset into frags referencing a weak symbol. */
+ reloc->addend = fixp->fx_addnumber
+ - (S_GET_VALUE (fixp->fx_addsy) * 2);
else
reloc->addend = 0;
#else
@@ -1685,8 +1797,18 @@ m68k_ip (char *instring)
const enum m68k_register *rp;
for (rp = control_regs; *rp; rp++)
- if (*rp == opP->reg)
- break;
+ {
+ if (*rp == opP->reg)
+ break;
+ /* In most CPUs RAMBAR refers to control reg
+ c05 (RAMBAR1), but a few CPUs have it
+ refer to c04 (RAMBAR0). */
+ else if (*rp == RAMBAR_ALT && opP->reg == RAMBAR)
+ {
+ opP->reg = RAMBAR_ALT;
+ break;
+ }
+ }
if (*rp == 0)
losing++;
}
@@ -1843,6 +1965,22 @@ m68k_ip (char *instring)
losing++;
break;
+ case 'j':
+ if (opP->mode != IMMED)
+ losing++;
+ else if (opP->disp.exp.X_op != O_constant
+ || TRUNC (opP->disp.exp.X_add_number) - 1 > 7)
+ losing++;
+ break;
+
+ case 'K':
+ if (opP->mode != IMMED)
+ losing++;
+ else if (opP->disp.exp.X_op != O_constant
+ || TRUNC (opP->disp.exp.X_add_number) > 511)
+ losing++;
+ break;
+
/* JF these are out of order. We could put them
in order if we were willing to put up with
bunches of #ifdef m68851s in the code.
@@ -2061,29 +2199,31 @@ m68k_ip (char *instring)
if (!cpu->alias && (cpu->arch & ok_arch))
{
const struct m68k_cpu *alias;
-
+ int seen_master = 0;
+
if (any)
APPEND (", ");
any = 0;
APPEND (cpu->name);
- APPEND (" [");
- if (cpu != m68k_cpus)
- for (alias = cpu - 1; alias->alias; alias--)
+ for (alias = cpu; alias != m68k_cpus; alias--)
+ if (alias[-1].alias >= 0)
+ break;
+ for (; !seen_master || alias->alias > 0; alias++)
{
- if (any)
- APPEND (", ");
- APPEND (alias->name);
- any = 1;
+ if (!alias->alias)
+ seen_master = 1;
+ else
+ {
+ if (any)
+ APPEND (", ");
+ else
+ APPEND (" [");
+ APPEND (alias->name);
+ any = 1;
+ }
}
- for (alias = cpu + 1; alias->alias; alias++)
- {
- if (any)
- APPEND (", ");
- APPEND (alias->name);
- any = 1;
- }
-
- APPEND ("]");
+ if (any)
+ APPEND ("]");
any = 1;
}
if (paren)
@@ -2116,6 +2256,8 @@ m68k_ip (char *instring)
for (s = the_ins.args, opP = &the_ins.operands[0]; *s; s += 2, opP++)
{
+ int have_disp = 0;
+
/* This switch is a doozy.
Watch the first step; its a big one! */
switch (s[0])
@@ -2775,6 +2917,7 @@ m68k_ip (char *instring)
case 'B':
tmpreg = get_num (&opP->disp, 90);
+
switch (s[1])
{
case 'B':
@@ -2786,23 +2929,36 @@ m68k_ip (char *instring)
break;
case 'L':
long_branch:
- if (! HAVE_LONG_BRANCH (current_architecture))
- as_warn (_("Can't use long branches on 68000/68010/5200"));
the_ins.opcode[0] |= 0xff;
add_fix ('l', &opP->disp, 1, 0);
addword (0);
addword (0);
break;
- case 'g':
- if (subs (&opP->disp)) /* We can't relax it. */
- goto long_branch;
-
+ case 'g': /* Conditional branch */
+ have_disp = HAVE_LONG_CALL (current_architecture);
+ goto var_branch;
+
+ case 'b': /* Unconditional branch */
+ have_disp = HAVE_LONG_BRANCH (current_architecture);
+ goto var_branch;
+
+ case 's': /* Unconditional subroutine */
+ have_disp = HAVE_LONG_CALL (current_architecture);
+
+ var_branch:
+ if (subs (&opP->disp) /* We can't relax it. */
#ifdef OBJ_ELF
- /* If the displacement needs pic relocation it cannot be
- relaxed. */
- if (opP->disp.pic_reloc != pic_none)
- goto long_branch;
+ /* If the displacement needs pic relocation it cannot be
+ relaxed. */
+ || opP->disp.pic_reloc != pic_none
#endif
+ || 0)
+ {
+ if (!have_disp)
+ as_warn (_("Can't use long branches on this architecture"));
+ goto long_branch;
+ }
+
/* This could either be a symbol, or an absolute
address. If it's an absolute address, turn it into
an absolute jump right here and keep it out of the
@@ -2828,7 +2984,7 @@ m68k_ip (char *instring)
/* Now we know it's going into the relaxer. Now figure
out which mode. We try in this order of preference:
long branch, absolute jump, byte/word branches only. */
- if (HAVE_LONG_BRANCH (current_architecture))
+ if (have_disp)
add_frag (adds (&opP->disp),
SEXT (offs (&opP->disp)),
TAB (BRANCHBWL, SZ_UNDEF));
@@ -2857,7 +3013,7 @@ m68k_ip (char *instring)
jumps. */
if (((the_ins.opcode[0] & 0xf0f8) == 0x50c8)
&& (HAVE_LONG_BRANCH (current_architecture)
- || (! flag_keep_pcrel)))
+ || ! flag_keep_pcrel))
{
if (HAVE_LONG_BRANCH (current_architecture))
add_frag (adds (&opP->disp),
@@ -2955,6 +3111,7 @@ m68k_ip (char *instring)
tmpreg = 0x002;
break;
case TC:
+ case ASID:
tmpreg = 0x003;
break;
case ACR0:
@@ -2974,6 +3131,7 @@ m68k_ip (char *instring)
tmpreg = 0x007;
break;
case BUSCR:
+ case MMUBAR:
tmpreg = 0x008;
break;
@@ -3005,6 +3163,7 @@ m68k_ip (char *instring)
tmpreg = 0x808;
break;
case ROMBAR:
+ case ROMBAR0:
tmpreg = 0xC00;
break;
case ROMBAR1:
@@ -3012,6 +3171,7 @@ m68k_ip (char *instring)
break;
case FLASHBAR:
case RAMBAR0:
+ case RAMBAR_ALT:
tmpreg = 0xC04;
break;
case RAMBAR:
@@ -3069,6 +3229,12 @@ m68k_ip (char *instring)
case PCR3U1:
tmpreg = 0xD0F;
break;
+ case CAC:
+ tmpreg = 0xFFE;
+ break;
+ case MBB:
+ tmpreg = 0xFFF;
+ break;
default:
abort ();
}
@@ -3332,6 +3498,14 @@ m68k_ip (char *instring)
tmpreg = 0;
install_operand (s[1], tmpreg);
break;
+ case 'j':
+ tmpreg = get_num (&opP->disp, 10);
+ install_operand (s[1], tmpreg - 1);
+ break;
+ case 'K':
+ tmpreg = get_num (&opP->disp, 65);
+ install_operand (s[1], tmpreg);
+ break;
default:
abort ();
}
@@ -3400,6 +3574,9 @@ install_operand (int mode, int val)
case 'd':
the_ins.opcode[0] |= val << 9;
break;
+ case 'E':
+ the_ins.opcode[1] |= val << 9;
+ break;
case '1':
the_ins.opcode[1] |= val << 12;
break;
@@ -3744,7 +3921,7 @@ static const struct init_entry init_table[] =
{ "dacr0", DTT0 }, /* Data Access Control Register 0. */
{ "dacr1", DTT1 }, /* Data Access Control Register 0. */
- /* mcf5200 versions of same. The ColdFire programmer's reference
+ /* Coldfire versions of same. The ColdFire programmer's reference
manual indicated that the order is 2,3,0,1, but Ken Rose
<rose@netcom.com> says that 0,1,2,3 is the correct order. */
{ "acr0", ACR0 }, /* Access Control Unit 0. */
@@ -3754,12 +3931,14 @@ static const struct init_entry init_table[] =
{ "tc", TC }, /* MMU Translation Control Register. */
{ "tcr", TC },
+ { "asid", ASID },
{ "mmusr", MMUSR }, /* MMU Status Register. */
{ "srp", SRP }, /* User Root Pointer. */
{ "urp", URP }, /* Supervisor Root Pointer. */
{ "buscr", BUSCR },
+ { "mmubar", MMUBAR },
{ "pcr", PCR },
{ "rombar", ROMBAR }, /* ROM Base Address Register. */
@@ -3769,7 +3948,7 @@ static const struct init_entry init_table[] =
{ "mbar0", MBAR0 }, /* mcfv4e registers. */
{ "mbar1", MBAR1 }, /* mcfv4e registers. */
- { "rombar0", ROMBAR }, /* mcfv4e registers. */
+ { "rombar0", ROMBAR0 }, /* mcfv4e registers. */
{ "rombar1", ROMBAR1 }, /* mcfv4e registers. */
{ "mpcr", MPCR }, /* mcfv4e registers. */
{ "edrambar", EDRAMBAR }, /* mcfv4e registers. */
@@ -3793,6 +3972,9 @@ static const struct init_entry init_table[] =
{ "rambar", RAMBAR }, /* mcf528x registers. */
{ "mbar2", MBAR2 }, /* mcf5249 registers. */
+
+ { "cac", CAC }, /* fido registers. */
+ { "mbb", MBB }, /* fido registers. */
/* End of control registers. */
{ "ac", AC },
@@ -4207,14 +4389,28 @@ md_begin (void)
{
ins = m68k_sorted_opcodes[i];
- /* We *could* ignore insns that don't match our
- arch here by just leaving them out of the hash. */
+ /* We must enter all insns into the table, because .arch and
+ .cpu directives can change things. */
slak->m_operands = ins->args;
- slak->m_opnum = strlen (slak->m_operands) / 2;
slak->m_arch = ins->arch;
slak->m_opcode = ins->opcode;
- /* This is kludgey. */
- slak->m_codenum = ((ins->match) & 0xffffL) ? 2 : 1;
+
+ /* In most cases we can determine the number of opcode words
+ by checking the second word of the mask. Unfortunately
+ some instructions have 2 opcode words, but no fixed bits
+ in the second word. A leading dot in the operands
+ string also indicates 2 opcodes. */
+ if (*slak->m_operands == '.')
+ {
+ slak->m_operands++;
+ slak->m_codenum = 2;
+ }
+ else if (ins->match & 0xffffL)
+ slak->m_codenum = 2;
+ else
+ slak->m_codenum = 1;
+ slak->m_opnum = strlen (slak->m_operands) / 2;
+
if (i + 1 != m68k_numopcodes
&& !strcmp (ins->name, m68k_sorted_opcodes[i + 1]->name))
{
@@ -4547,6 +4743,14 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
S_SET_WEAK (fixP->fx_addsy);
return;
}
+#elif defined(OBJ_AOUT)
+ /* PR gas/3041 Do not fix frags referencing a weak symbol. */
+ if (fixP->fx_addsy && S_IS_WEAK (fixP->fx_addsy))
+ {
+ memset (buf, 0, fixP->fx_size);
+ fixP->fx_addnumber = val; /* Remember value for emit_reloc. */
+ return;
+ }
#endif
if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
@@ -4597,7 +4801,8 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
if ((addressT) val > upper_limit
&& (val > 0 || val < lower_limit))
- as_bad_where (fixP->fx_file, fixP->fx_line, _("value out of range"));
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("value %ld out of range"), (long)val);
/* A one byte PC-relative reloc means a short branch. We can't use
a short branch with a value of 0 or -1, because those indicate
@@ -4610,7 +4815,8 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
&& (fixP->fx_addsy == NULL
|| S_IS_DEFINED (fixP->fx_addsy))
&& (val == 0 || val == -1))
- as_bad_where (fixP->fx_file, fixP->fx_line, _("invalid byte branch offset"));
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("invalid byte branch offset"));
}
/* *fragP has been relaxed to its final size, and now needs to have
@@ -4621,7 +4827,7 @@ static void
md_convert_frag_1 (fragS *fragP)
{
long disp;
- fixS *fixP;
+ fixS *fixP = NULL;
/* Address in object code of the displacement. */
register int object_address = fragP->fr_fix + fragP->fr_address;
@@ -4656,35 +4862,37 @@ md_convert_frag_1 (fragS *fragP)
case TAB (BRABSJCOND, SHORT):
case TAB (BRANCHBW, SHORT):
fragP->fr_opcode[1] = 0x00;
- fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,
- 1, RELAX_RELOC_PC16);
+ fixP = fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol,
+ fragP->fr_offset, 1, RELAX_RELOC_PC16);
fragP->fr_fix += 2;
break;
case TAB (BRANCHBWL, LONG):
fragP->fr_opcode[1] = (char) 0xFF;
- fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
- 1, RELAX_RELOC_PC32);
+ fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
+ fragP->fr_offset, 1, RELAX_RELOC_PC32);
fragP->fr_fix += 4;
break;
case TAB (BRABSJUNC, LONG):
if (fragP->fr_opcode[0] == 0x61) /* jbsr */
{
if (flag_keep_pcrel)
- as_fatal (_("Tried to convert PC relative BSR to absolute JSR"));
+ as_bad_where (fragP->fr_file, fragP->fr_line,
+ _("Conversion of PC relative BSR to absolute JSR"));
fragP->fr_opcode[0] = 0x4E;
fragP->fr_opcode[1] = (char) 0xB9; /* JSR with ABSL LONG operand. */
- fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
- 0, RELAX_RELOC_ABS32);
+ fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
+ fragP->fr_offset, 0, RELAX_RELOC_ABS32);
fragP->fr_fix += 4;
}
else if (fragP->fr_opcode[0] == 0x60) /* jbra */
{
if (flag_keep_pcrel)
- as_fatal (_("Tried to convert PC relative branch to absolute jump"));
+ as_bad_where (fragP->fr_file, fragP->fr_line,
+ _("Conversion of PC relative branch to absolute jump"));
fragP->fr_opcode[0] = 0x4E;
fragP->fr_opcode[1] = (char) 0xF9; /* JMP with ABSL LONG operand. */
- fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
- 0, RELAX_RELOC_ABS32);
+ fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
+ fragP->fr_offset, 0, RELAX_RELOC_ABS32);
fragP->fr_fix += 4;
}
else
@@ -4696,7 +4904,8 @@ md_convert_frag_1 (fragS *fragP)
break;
case TAB (BRABSJCOND, LONG):
if (flag_keep_pcrel)
- as_fatal (_("Tried to convert PC relative conditional branch to absolute jump"));
+ as_bad_where (fragP->fr_file, fragP->fr_line,
+ _("Conversion of PC relative conditional branch to absolute jump"));
/* Only Bcc 68000 instructions can come here
Change bcc into b!cc/jmp absl long. */
@@ -4709,26 +4918,26 @@ md_convert_frag_1 (fragS *fragP)
*buffer_address++ = 0x4e; /* put in jmp long (0x4ef9) */
*buffer_address++ = (char) 0xf9;
fragP->fr_fix += 2; /* Account for jmp instruction. */
- fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
- fragP->fr_offset, 0, RELAX_RELOC_ABS32);
+ fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
+ fragP->fr_offset, 0, RELAX_RELOC_ABS32);
fragP->fr_fix += 4;
break;
case TAB (FBRANCH, SHORT):
know ((fragP->fr_opcode[1] & 0x40) == 0);
- fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,
- 1, RELAX_RELOC_PC16);
+ fixP = fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol,
+ fragP->fr_offset, 1, RELAX_RELOC_PC16);
fragP->fr_fix += 2;
break;
case TAB (FBRANCH, LONG):
fragP->fr_opcode[1] |= 0x40; /* Turn on LONG bit. */
- fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
- 1, RELAX_RELOC_PC32);
+ fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
+ fragP->fr_offset, 1, RELAX_RELOC_PC32);
fragP->fr_fix += 4;
break;
case TAB (DBCCLBR, SHORT):
case TAB (DBCCABSJ, SHORT):
- fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,
- 1, RELAX_RELOC_PC16);
+ fixP = fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol,
+ fragP->fr_offset, 1, RELAX_RELOC_PC16);
fragP->fr_fix += 2;
break;
case TAB (DBCCLBR, LONG):
@@ -4736,7 +4945,8 @@ md_convert_frag_1 (fragS *fragP)
Change dbcc into dbcc/bral.
JF: these used to be fr_opcode[2-7], but that's wrong. */
if (flag_keep_pcrel)
- as_fatal (_("Tried to convert DBcc to absolute jump"));
+ as_bad_where (fragP->fr_file, fragP->fr_line,
+ _("Conversion of DBcc to absolute jump"));
*buffer_address++ = 0x00; /* Branch offset = 4. */
*buffer_address++ = 0x04;
@@ -4746,8 +4956,8 @@ md_convert_frag_1 (fragS *fragP)
*buffer_address++ = (char) 0xff;
fragP->fr_fix += 6; /* Account for bra/jmp instructions. */
- fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset, 1,
- RELAX_RELOC_PC32);
+ fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
+ fragP->fr_offset, 1, RELAX_RELOC_PC32);
fragP->fr_fix += 4;
break;
case TAB (DBCCABSJ, LONG):
@@ -4755,7 +4965,8 @@ md_convert_frag_1 (fragS *fragP)
Change dbcc into dbcc/jmp.
JF: these used to be fr_opcode[2-7], but that's wrong. */
if (flag_keep_pcrel)
- as_fatal (_("Tried to convert PC relative conditional branch to absolute jump"));
+ as_bad_where (fragP->fr_file, fragP->fr_line,
+ _("Conversion of PC relative conditional branch to absolute jump"));
*buffer_address++ = 0x00; /* Branch offset = 4. */
*buffer_address++ = 0x04;
@@ -4765,15 +4976,15 @@ md_convert_frag_1 (fragS *fragP)
*buffer_address++ = (char) 0xf9;
fragP->fr_fix += 6; /* Account for bra/jmp instructions. */
- fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset, 0,
- RELAX_RELOC_ABS32);
+ fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
+ fragP->fr_offset, 0, RELAX_RELOC_ABS32);
fragP->fr_fix += 4;
break;
case TAB (PCREL1632, SHORT):
fragP->fr_opcode[1] &= ~0x3F;
fragP->fr_opcode[1] |= 0x3A; /* 072 - mode 7.2 */
- fix_new (fragP, (int) (fragP->fr_fix), 2, fragP->fr_symbol,
- fragP->fr_offset, 1, RELAX_RELOC_PC16);
+ fixP = fix_new (fragP, (int) (fragP->fr_fix), 2, fragP->fr_symbol,
+ fragP->fr_offset, 1, RELAX_RELOC_PC16);
fragP->fr_fix += 2;
break;
case TAB (PCREL1632, LONG):
@@ -4813,24 +5024,29 @@ md_convert_frag_1 (fragS *fragP)
fragP->fr_fix += 4;
break;
case TAB (ABSTOPCREL, SHORT):
- fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,
- 1, RELAX_RELOC_PC16);
+ fixP = fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol,
+ fragP->fr_offset, 1, RELAX_RELOC_PC16);
fragP->fr_fix += 2;
break;
case TAB (ABSTOPCREL, LONG):
if (flag_keep_pcrel)
- as_fatal (_("Tried to convert PC relative conditional branch to absolute jump"));
+ as_fatal (_("Conversion of PC relative displacement to absolute"));
/* The thing to do here is force it to ABSOLUTE LONG, since
ABSTOPCREL is really trying to shorten an ABSOLUTE address anyway. */
if ((fragP->fr_opcode[1] & 0x3F) != 0x3A)
abort ();
fragP->fr_opcode[1] &= ~0x3F;
fragP->fr_opcode[1] |= 0x39; /* Mode 7.1 */
- fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, fragP->fr_offset,
- 0, RELAX_RELOC_ABS32);
+ fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
+ fragP->fr_offset, 0, RELAX_RELOC_ABS32);
fragP->fr_fix += 4;
break;
}
+ if (fixP)
+ {
+ fixP->fx_file = fragP->fr_file;
+ fixP->fx_line = fragP->fr_line;
+ }
}
void
@@ -5054,6 +5270,7 @@ md_create_long_jump (char *ptr, addressT from_addr, addressT to_addr,
50: absolute 0:127 only
55: absolute -64:63 only
60: absolute -128:127 only
+ 65: absolute 0:511 only
70: absolute 0:4095 only
80: absolute -1, 1:7 only
90: No bignums. */
@@ -5109,6 +5326,10 @@ get_num (struct m68k_exp *exp, int ok)
if ((valueT) SEXT (offs (exp)) + 128 > 255)
goto outrange;
break;
+ case 65:
+ if ((valueT) TRUNC (offs (exp)) > 511)
+ goto outrange;
+ break;
case 70:
if ((valueT) TRUNC (offs (exp)) > 4095)
{
@@ -7497,6 +7718,8 @@ m68k_elf_final_processing (void)
/* Set file-specific flags if this is a cpu32 processor. */
if (cpu_of_arch (current_architecture) & cpu32)
flags |= EF_M68K_CPU32;
+ else if (cpu_of_arch (current_architecture) & fido_a)
+ flags |= EF_M68K_FIDO;
else if ((cpu_of_arch (current_architecture) & m68000up)
&& !(cpu_of_arch (current_architecture) & m68020up))
flags |= EF_M68K_M68000;
@@ -7505,24 +7728,25 @@ m68k_elf_final_processing (void)
{
static const unsigned isa_features[][2] =
{
- {EF_M68K_ISA_A_NODIV, mcfisa_a},
- {EF_M68K_ISA_A, mcfisa_a|mcfhwdiv},
- {EF_M68K_ISA_A_PLUS,mcfisa_a|mcfisa_aa|mcfhwdiv|mcfusp},
- {EF_M68K_ISA_B_NOUSP,mcfisa_a|mcfisa_b|mcfhwdiv},
- {EF_M68K_ISA_B, mcfisa_a|mcfisa_b|mcfhwdiv|mcfusp},
+ {EF_M68K_CF_ISA_A_NODIV,mcfisa_a},
+ {EF_M68K_CF_ISA_A, mcfisa_a|mcfhwdiv},
+ {EF_M68K_CF_ISA_A_PLUS, mcfisa_a|mcfisa_aa|mcfhwdiv|mcfusp},
+ {EF_M68K_CF_ISA_B_NOUSP,mcfisa_a|mcfisa_b|mcfhwdiv},
+ {EF_M68K_CF_ISA_B, mcfisa_a|mcfisa_b|mcfhwdiv|mcfusp},
+ {EF_M68K_CF_ISA_C, mcfisa_a|mcfisa_c|mcfhwdiv|mcfusp},
{0,0},
};
static const unsigned mac_features[][2] =
{
- {EF_M68K_MAC, mcfmac},
- {EF_M68K_EMAC, mcfemac},
+ {EF_M68K_CF_MAC, mcfmac},
+ {EF_M68K_CF_EMAC, mcfemac},
{0,0},
};
unsigned ix;
unsigned pattern;
pattern = (current_architecture
- & (mcfisa_a|mcfisa_aa|mcfisa_b|mcfhwdiv|mcfusp));
+ & (mcfisa_a|mcfisa_aa|mcfisa_b|mcfisa_c|mcfhwdiv|mcfusp));
for (ix = 0; isa_features[ix][1]; ix++)
{
if (pattern == isa_features[ix][1])
@@ -7539,7 +7763,7 @@ m68k_elf_final_processing (void)
else
{
if (current_architecture & cfloat)
- flags |= EF_M68K_FLOAT | EF_M68K_CFV4E;
+ flags |= EF_M68K_CF_FLOAT | EF_M68K_CFV4E;
pattern = current_architecture & (mcfmac|mcfemac);
if (pattern)
@@ -7562,7 +7786,7 @@ m68k_elf_final_processing (void)
#endif
int
-tc_m68k_regname_to_dw2regnum (const char *regname)
+tc_m68k_regname_to_dw2regnum (char *regname)
{
unsigned int regnum;
static const char *const regnames[] =
diff --git a/gas/config/tc-m68k.h b/gas/config/tc-m68k.h
index fc05a9264e6a..f1464fdbfc57 100644
--- a/gas/config/tc-m68k.h
+++ b/gas/config/tc-m68k.h
@@ -174,7 +174,7 @@ extern struct relax_type md_relax_table[];
#define DWARF2_CIE_DATA_ALIGNMENT (-4)
#define tc_regname_to_dw2regnum tc_m68k_regname_to_dw2regnum
-extern int tc_m68k_regname_to_dw2regnum (const char *regname);
+extern int tc_m68k_regname_to_dw2regnum (char *regname);
#define tc_cfi_frame_initial_instructions tc_m68k_frame_initial_instructions
extern void tc_m68k_frame_initial_instructions (void);
diff --git a/gas/config/tc-maxq.c b/gas/config/tc-maxq.c
index c1a11afc05fd..293d70003981 100644
--- a/gas/config/tc-maxq.c
+++ b/gas/config/tc-maxq.c
@@ -1,6 +1,6 @@
/* tc-maxq.c -- assembler code for a MAXQ chip.
- Copyright 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2004, 2005, 2006 Free Software Foundation, Inc.
Contributed by HCL Technologies Pvt. Ltd.
@@ -34,10 +34,6 @@
#define MAXQ10S 1
#endif
-#ifndef _STRING_H
-#include "string.h"
-#endif
-
#ifndef DEFAULT_ARCH
#define DEFAULT_ARCH "MAXQ20"
#endif
@@ -451,7 +447,7 @@ maxq20_cons_fix_new (fragS * frag, unsigned int off, unsigned int len,
}
/* GAS will call this for every rs_machine_dependent fragment. The
- instruction is compleated using the data from the relaxation pass. It may
+ instruction is completed using the data from the relaxation pass. It may
also create any necessary relocations. */
void
md_convert_frag (bfd * headers ATTRIBUTE_UNUSED,
@@ -687,7 +683,7 @@ const pseudo_typeS md_pseudo_table[] =
#define SET_PFX_ARG(x) (PFX_INSN[1] = x)
-/* This function sets the PFX value coresponding to the specs. Source
+/* This function sets the PFX value corresponding to the specs. Source
Destination Index Selection ---------------------------------- Write To|
SourceRegRange | Dest Addr Range
------------------------------------------------------ PFX[0] | 0h-Fh |
@@ -1150,7 +1146,7 @@ maxq20_immediate (char *imm_start)
return 1;
}
- /* Check For Sign Charcater. */
+ /* Check For Sign Character. */
sign_val = 0;
do
@@ -1600,7 +1596,7 @@ maxq20_operand (char *operand_string)
return 1;
}
- /* Get the origanal string. */
+ /* Get the original string. */
memcpy (op_string, operand_string, strlen (operand_string) + 1);
ii = strlen (operand_string) + 1;
@@ -3101,7 +3097,7 @@ md_assemble (char *line)
if (!match_filters ())
return;
- /* Check for the approprate PFX register. */
+ /* Check for the appropriate PFX register. */
set_prefix ();
pfx_for_imm_val (0);
diff --git a/gas/config/tc-maxq.h b/gas/config/tc-maxq.h
index 12b7a9497acc..dfa37f59ed65 100644
--- a/gas/config/tc-maxq.h
+++ b/gas/config/tc-maxq.h
@@ -1,4 +1,4 @@
-/* tc-maxq.h -- Header file for the asssembler(MAXQ)
+/* tc-maxq.h -- Header file for the assembler(MAXQ)
Copyright 2004, 2005 Free Software Foundation, Inc.
@@ -116,10 +116,10 @@ extern void maxq20_cons_fix_new (fragS *, unsigned int, unsigned int, expression
extern void maxq_number_to_chars (char *, valueT, int);
/* If this macro is defined, it is a pointer to a NULL terminated list of
- chracters which may appear in an operand. GAS already assumes that all
- alphanumeric chracters, and '$', '.', and '_' may appear in an
+ characters which may appear in an operand. GAS already assumes that all
+ alphanumeric characters, and '$', '.', and '_' may appear in an
operand("symbol_char"in app.c). This macro may be defined to treat
- additional chracters as appearing in an operand. This affects the way in
+ additional characters as appearing in an operand. This affects the way in
which GAS removes whitespaces before passing the string to md_assemble. */
#define tc_symbol_chars_extra_symbol_chars
diff --git a/gas/config/tc-mcore.c b/gas/config/tc-mcore.c
index a795a5550362..e4adf0583542 100644
--- a/gas/config/tc-mcore.c
+++ b/gas/config/tc-mcore.c
@@ -1,5 +1,5 @@
/* tc-mcore.c -- Assemble code for M*Core
- Copyright 1999, 2000, 2001, 2002, 2003, 2005
+ Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -19,14 +19,11 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
-#include "bfd.h"
#include "subsegs.h"
#define DEFINE_TABLE
#include "../opcodes/mcore-opc.h"
#include "safe-ctype.h"
-#include <string.h>
#ifdef OBJ_ELF
#include "elf/mcore.h"
@@ -2173,24 +2170,10 @@ md_estimate_size_before_relax (fragS * fragP, segT segment_type)
void
md_number_to_chars (char * ptr, valueT use, int nbytes)
{
- if (! target_big_endian)
- switch (nbytes)
- {
- case 4: ptr[3] = (use >> 24) & 0xff; /* Fall through. */
- case 3: ptr[2] = (use >> 16) & 0xff; /* Fall through. */
- case 2: ptr[1] = (use >> 8) & 0xff; /* Fall through. */
- case 1: ptr[0] = (use >> 0) & 0xff; break;
- default: abort ();
- }
+ if (target_big_endian)
+ number_to_chars_bigendian (ptr, use, nbytes);
else
- switch (nbytes)
- {
- case 4: *ptr++ = (use >> 24) & 0xff; /* Fall through. */
- case 3: *ptr++ = (use >> 16) & 0xff; /* Fall through. */
- case 2: *ptr++ = (use >> 8) & 0xff; /* Fall through. */
- case 1: *ptr++ = (use >> 0) & 0xff; break;
- default: abort ();
- }
+ number_to_chars_littleendian (ptr, use, nbytes);
}
/* Round up a section size to the appropriate boundary. */
diff --git a/gas/config/tc-mep.c b/gas/config/tc-mep.c
new file mode 100644
index 000000000000..b3b17d3c7a15
--- /dev/null
+++ b/gas/config/tc-mep.c
@@ -0,0 +1,1886 @@
+/* tc-mep.c -- Assembler for the Toshiba Media Processor.
+ Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation.
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to
+ the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#include <stdio.h>
+#include "as.h"
+#include "dwarf2dbg.h"
+#include "subsegs.h"
+#include "symcat.h"
+#include "opcodes/mep-desc.h"
+#include "opcodes/mep-opc.h"
+#include "cgen.h"
+#include "elf/common.h"
+#include "elf/mep.h"
+#include "libbfd.h"
+#include "xregex.h"
+
+/* Structure to hold all of the different components describing
+ an individual instruction. */
+typedef struct
+{
+ const CGEN_INSN * insn;
+ const CGEN_INSN * orig_insn;
+ CGEN_FIELDS fields;
+#if CGEN_INT_INSN_P
+ CGEN_INSN_INT buffer [1];
+#define INSN_VALUE(buf) (*(buf))
+#else
+ unsigned char buffer [CGEN_MAX_INSN_SIZE];
+#define INSN_VALUE(buf) (buf)
+#endif
+ char * addr;
+ fragS * frag;
+ int num_fixups;
+ fixS * fixups [GAS_CGEN_MAX_FIXUPS];
+ int indices [MAX_OPERAND_INSTANCES];
+} mep_insn;
+
+static int mode = CORE; /* Start in core mode. */
+static int pluspresent = 0;
+static int allow_disabled_registers = 0;
+static int library_flag = 0;
+
+/* We're going to need to store all of the instructions along with
+ their fixups so that we can parallelization grouping rules. */
+
+static mep_insn saved_insns[MAX_SAVED_FIXUP_CHAINS];
+static int num_insns_saved = 0;
+
+const char comment_chars[] = "#";
+const char line_comment_chars[] = ";#";
+const char line_separator_chars[] = ";";
+const char EXP_CHARS[] = "eE";
+const char FLT_CHARS[] = "dD";
+
+static void mep_switch_to_vliw_mode (int);
+static void mep_switch_to_core_mode (int);
+static void mep_s_vtext (int);
+static void mep_noregerr (int);
+
+/* The target specific pseudo-ops which we support. */
+const pseudo_typeS md_pseudo_table[] =
+{
+ { "word", cons, 4 },
+ { "file", (void (*) (int)) dwarf2_directive_file, 0 },
+ { "loc", dwarf2_directive_loc, 0 },
+ { "vliw", mep_switch_to_vliw_mode, 0 },
+ { "core", mep_switch_to_core_mode, 0 },
+ { "vtext", mep_s_vtext, 0 },
+ { "noregerr", mep_noregerr, 0 },
+ { NULL, NULL, 0 }
+};
+
+/* Relocations against symbols are done in two
+ parts, with a HI relocation and a LO relocation. Each relocation
+ has only 16 bits of space to store an addend. This means that in
+ order for the linker to handle carries correctly, it must be able
+ to locate both the HI and the LO relocation. This means that the
+ relocations must appear in order in the relocation table.
+
+ In order to implement this, we keep track of each unmatched HI
+ relocation. We then sort them so that they immediately precede the
+ corresponding LO relocation. */
+
+struct mep_hi_fixup
+{
+ struct mep_hi_fixup * next; /* Next HI fixup. */
+ fixS * fixp; /* This fixup. */
+ segT seg; /* The section this fixup is in. */
+};
+
+/* The list of unmatched HI relocs. */
+static struct mep_hi_fixup * mep_hi_fixup_list;
+
+
+#define OPTION_EB (OPTION_MD_BASE + 0)
+#define OPTION_EL (OPTION_MD_BASE + 1)
+#define OPTION_CONFIG (OPTION_MD_BASE + 2)
+#define OPTION_AVERAGE (OPTION_MD_BASE + 3)
+#define OPTION_NOAVERAGE (OPTION_MD_BASE + 4)
+#define OPTION_MULT (OPTION_MD_BASE + 5)
+#define OPTION_NOMULT (OPTION_MD_BASE + 6)
+#define OPTION_DIV (OPTION_MD_BASE + 7)
+#define OPTION_NODIV (OPTION_MD_BASE + 8)
+#define OPTION_BITOPS (OPTION_MD_BASE + 9)
+#define OPTION_NOBITOPS (OPTION_MD_BASE + 10)
+#define OPTION_LEADZ (OPTION_MD_BASE + 11)
+#define OPTION_NOLEADZ (OPTION_MD_BASE + 12)
+#define OPTION_ABSDIFF (OPTION_MD_BASE + 13)
+#define OPTION_NOABSDIFF (OPTION_MD_BASE + 14)
+#define OPTION_MINMAX (OPTION_MD_BASE + 15)
+#define OPTION_NOMINMAX (OPTION_MD_BASE + 16)
+#define OPTION_CLIP (OPTION_MD_BASE + 17)
+#define OPTION_NOCLIP (OPTION_MD_BASE + 18)
+#define OPTION_SATUR (OPTION_MD_BASE + 19)
+#define OPTION_NOSATUR (OPTION_MD_BASE + 20)
+#define OPTION_COP32 (OPTION_MD_BASE + 21)
+#define OPTION_REPEAT (OPTION_MD_BASE + 25)
+#define OPTION_NOREPEAT (OPTION_MD_BASE + 26)
+#define OPTION_DEBUG (OPTION_MD_BASE + 27)
+#define OPTION_NODEBUG (OPTION_MD_BASE + 28)
+#define OPTION_LIBRARY (OPTION_MD_BASE + 29)
+
+struct option md_longopts[] = {
+ { "EB", no_argument, NULL, OPTION_EB},
+ { "EL", no_argument, NULL, OPTION_EL},
+ { "mconfig", required_argument, NULL, OPTION_CONFIG},
+ { "maverage", no_argument, NULL, OPTION_AVERAGE},
+ { "mno-average", no_argument, NULL, OPTION_NOAVERAGE},
+ { "mmult", no_argument, NULL, OPTION_MULT},
+ { "mno-mult", no_argument, NULL, OPTION_NOMULT},
+ { "mdiv", no_argument, NULL, OPTION_DIV},
+ { "mno-div", no_argument, NULL, OPTION_NODIV},
+ { "mbitops", no_argument, NULL, OPTION_BITOPS},
+ { "mno-bitops", no_argument, NULL, OPTION_NOBITOPS},
+ { "mleadz", no_argument, NULL, OPTION_LEADZ},
+ { "mno-leadz", no_argument, NULL, OPTION_NOLEADZ},
+ { "mabsdiff", no_argument, NULL, OPTION_ABSDIFF},
+ { "mno-absdiff", no_argument, NULL, OPTION_NOABSDIFF},
+ { "mminmax", no_argument, NULL, OPTION_MINMAX},
+ { "mno-minmax", no_argument, NULL, OPTION_NOMINMAX},
+ { "mclip", no_argument, NULL, OPTION_CLIP},
+ { "mno-clip", no_argument, NULL, OPTION_NOCLIP},
+ { "msatur", no_argument, NULL, OPTION_SATUR},
+ { "mno-satur", no_argument, NULL, OPTION_NOSATUR},
+ { "mcop32", no_argument, NULL, OPTION_COP32},
+ { "mdebug", no_argument, NULL, OPTION_DEBUG},
+ { "mno-debug", no_argument, NULL, OPTION_NODEBUG},
+ { "mlibrary", no_argument, NULL, OPTION_LIBRARY},
+ { NULL, 0, NULL, 0 } };
+size_t md_longopts_size = sizeof (md_longopts);
+
+const char * md_shortopts = "";
+static int optbits = 0;
+static int optbitset = 0;
+
+int
+md_parse_option (int c, char *arg ATTRIBUTE_UNUSED)
+{
+ int i, idx;
+ switch (c)
+ {
+ case OPTION_EB:
+ target_big_endian = 1;
+ break;
+ case OPTION_EL:
+ target_big_endian = 0;
+ break;
+ case OPTION_CONFIG:
+ idx = 0;
+ for (i=1; mep_config_map[i].name; i++)
+ if (strcmp (mep_config_map[i].name, arg) == 0)
+ {
+ idx = i;
+ break;
+ }
+ if (!idx)
+ {
+ fprintf (stderr, "Error: unknown configuration %s\n", arg);
+ return 0;
+ }
+ mep_config_index = idx;
+ target_big_endian = mep_config_map[idx].big_endian;
+ break;
+ case OPTION_AVERAGE:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_AVE_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_AVE_INSN;
+ break;
+ case OPTION_NOAVERAGE:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_AVE_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_AVE_INSN;
+ break;
+ case OPTION_MULT:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_MUL_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_MUL_INSN;
+ break;
+ case OPTION_NOMULT:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_MUL_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_MUL_INSN;
+ break;
+ case OPTION_DIV:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_DIV_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_DIV_INSN;
+ break;
+ case OPTION_NODIV:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_DIV_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_DIV_INSN;
+ break;
+ case OPTION_BITOPS:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_BIT_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_BIT_INSN;
+ break;
+ case OPTION_NOBITOPS:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_BIT_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_BIT_INSN;
+ break;
+ case OPTION_LEADZ:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_LDZ_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_LDZ_INSN;
+ break;
+ case OPTION_NOLEADZ:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_LDZ_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_LDZ_INSN;
+ break;
+ case OPTION_ABSDIFF:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_ABS_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_ABS_INSN;
+ break;
+ case OPTION_NOABSDIFF:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_ABS_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_ABS_INSN;
+ break;
+ case OPTION_MINMAX:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_MINMAX_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_MINMAX_INSN;
+ break;
+ case OPTION_NOMINMAX:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_MINMAX_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_MINMAX_INSN;
+ break;
+ case OPTION_CLIP:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_CLIP_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_CLIP_INSN;
+ break;
+ case OPTION_NOCLIP:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_CLIP_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_CLIP_INSN;
+ break;
+ case OPTION_SATUR:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_SAT_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_SAT_INSN;
+ break;
+ case OPTION_NOSATUR:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_SAT_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_SAT_INSN;
+ break;
+ case OPTION_COP32:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_CP_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_CP_INSN;
+ break;
+ case OPTION_DEBUG:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_DEBUG_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_DEBUG_INSN;
+ break;
+ case OPTION_NODEBUG:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_DEBUG_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_DEBUG_INSN;
+ break;
+ case OPTION_LIBRARY:
+ library_flag = EF_MEP_LIBRARY;
+ break;
+ case OPTION_REPEAT:
+ case OPTION_NOREPEAT:
+ break;
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+void
+md_show_usage (FILE *stream)
+{
+ fprintf (stream, _("MeP specific command line options:\n\
+ -EB assemble for a big endian system (default)\n\
+ -EL assemble for a little endian system\n\
+ -mconfig=<name> specify a chip configuration to use\n\
+ -maverage -mno-average -mmult -mno-mult -mdiv -mno-div\n\
+ -mbitops -mno-bitops -mleadz -mno-leadz -mabsdiff -mno-absdiff\n\
+ -mminmax -mno-minmax -mclip -mno-clip -msatur -mno-satur -mcop32\n\
+ enable/disable the given opcodes\n\
+\n\
+ If -mconfig is given, the other -m options modify it. Otherwise,\n\
+ if no -m options are given, all core opcodes are enabled;\n\
+ if any enabling -m options are given, only those are enabled;\n\
+ if only disabling -m options are given, only those are disabled.\n\
+"));
+ if (mep_config_map[1].name)
+ {
+ int i;
+ fprintf (stream, " -mconfig=STR specify the configuration to use\n");
+ fprintf (stream, " Configurations:");
+ for (i=0; mep_config_map[i].name; i++)
+ fprintf (stream, " %s", mep_config_map[i].name);
+ fprintf (stream, "\n");
+ }
+}
+
+
+
+static void
+mep_check_for_disabled_registers (mep_insn *insn)
+{
+ static int initted = 0;
+ static int has_mul_div = 0;
+ static int has_cop = 0;
+ static int has_debug = 0;
+ unsigned int b, r;
+
+ if (allow_disabled_registers)
+ return;
+
+#if !CGEN_INT_INSN_P
+ if (target_big_endian)
+ b = insn->buffer[0] * 256 + insn->buffer[1];
+ else
+ b = insn->buffer[1] * 256 + insn->buffer[0];
+#else
+ b = insn->buffer[0];
+#endif
+
+ if ((b & 0xfffff00e) == 0x7008 /* stc */
+ || (b & 0xfffff00e) == 0x700a /* ldc */)
+ {
+ if (!initted)
+ {
+ initted = 1;
+ if ((MEP_OMASK & (1 << CGEN_INSN_OPTIONAL_MUL_INSN))
+ || (MEP_OMASK & (1 << CGEN_INSN_OPTIONAL_DIV_INSN)))
+ has_mul_div = 1;
+ if (MEP_OMASK & (1 << CGEN_INSN_OPTIONAL_DEBUG_INSN))
+ has_debug = 1;
+ if (MEP_OMASK & (1 << CGEN_INSN_OPTIONAL_CP_INSN))
+ has_cop = 1;
+ }
+
+ r = ((b & 0x00f0) >> 4) | ((b & 0x0001) << 4);
+ switch (r)
+ {
+ case 7: /* $hi */
+ case 8: /* $lo */
+ if (!has_mul_div)
+ as_bad ("$hi and $lo are disabled when MUL and DIV are off");
+ break;
+ case 12: /* $mb0 */
+ case 13: /* $me0 */
+ case 14: /* $mb1 */
+ case 15: /* $me1 */
+ if (!has_cop)
+ as_bad ("$mb0, $me0, $mb1, and $me1 are disabled when COP is off");
+ break;
+ case 24: /* $dbg */
+ case 25: /* $depc */
+ if (!has_debug)
+ as_bad ("$dbg and $depc are disabled when DEBUG is off");
+ break;
+ }
+ }
+}
+
+static int
+mep_machine (void)
+{
+ switch (MEP_CPU)
+ {
+ default: break;
+ case EF_MEP_CPU_C2: return bfd_mach_mep;
+ case EF_MEP_CPU_C3: return bfd_mach_mep;
+ case EF_MEP_CPU_C4: return bfd_mach_mep;
+ case EF_MEP_CPU_H1: return bfd_mach_mep_h1;
+ }
+
+ return bfd_mach_mep;
+}
+
+/* The MeP version of the cgen parse_operand function. The only difference
+ from the standard version is that we want to avoid treating '$foo' and
+ '($foo...)' as references to a symbol called '$foo'. The chances are
+ that '$foo' is really a misspelt register. */
+
+static const char *
+mep_parse_operand (CGEN_CPU_DESC cd, enum cgen_parse_operand_type want,
+ const char **strP, int opindex, int opinfo,
+ enum cgen_parse_operand_result *resultP, bfd_vma *valueP)
+{
+ if (want == CGEN_PARSE_OPERAND_INTEGER || want == CGEN_PARSE_OPERAND_ADDRESS)
+ {
+ const char *next;
+
+ next = *strP;
+ while (*next == '(')
+ next++;
+ if (*next == '$')
+ return "Not a valid literal";
+ }
+ return gas_cgen_parse_operand (cd, want, strP, opindex, opinfo,
+ resultP, valueP);
+}
+
+void
+md_begin ()
+{
+ /* Initialize the `cgen' interface. */
+
+ /* If the user specifies no options, we default to allowing
+ everything. If the user specifies any enabling options, we
+ default to allowing only what is specified. If the user
+ specifies only disabling options, we only disable what is
+ specified. If the user specifies options and a config, the
+ options modify the config. */
+ if (optbits && mep_config_index == 0)
+ MEP_OMASK = optbits;
+ else
+ MEP_OMASK = (MEP_OMASK & ~optbitset) | optbits;
+
+ /* Set the machine number and endian. */
+ gas_cgen_cpu_desc = mep_cgen_cpu_open (CGEN_CPU_OPEN_MACHS, 0,
+ CGEN_CPU_OPEN_ENDIAN,
+ target_big_endian
+ ? CGEN_ENDIAN_BIG
+ : CGEN_ENDIAN_LITTLE,
+ CGEN_CPU_OPEN_ISAS, 0,
+ CGEN_CPU_OPEN_END);
+ mep_cgen_init_asm (gas_cgen_cpu_desc);
+
+ /* This is a callback from cgen to gas to parse operands. */
+ cgen_set_parse_operand_fn (gas_cgen_cpu_desc, mep_parse_operand);
+
+ /* Identify the architecture. */
+ bfd_default_set_arch_mach (stdoutput, bfd_arch_mep, mep_machine ());
+
+ /* Store the configuration number and core. */
+ bfd_set_private_flags (stdoutput, MEP_CPU | MEP_CONFIG | library_flag);
+
+ /* Initialize the array we'll be using to store fixups. */
+ gas_cgen_initialize_saved_fixups_array();
+}
+
+/* Variant of mep_cgen_assemble_insn. Assemble insn STR of cpu CD as a
+ coprocessor instruction, if possible, into FIELDS, BUF, and INSN. */
+
+static const CGEN_INSN *
+mep_cgen_assemble_cop_insn (CGEN_CPU_DESC cd,
+ const char *str,
+ CGEN_FIELDS *fields,
+ CGEN_INSN_BYTES_PTR buf,
+ const struct cgen_insn *pinsn)
+{
+ const char *start;
+ CGEN_INSN_LIST *ilist;
+ const char *errmsg = NULL;
+
+ /* The instructions are stored in hashed lists. */
+ ilist = CGEN_ASM_LOOKUP_INSN (gas_cgen_cpu_desc,
+ CGEN_INSN_MNEMONIC (pinsn));
+
+ start = str;
+ for ( ; ilist != NULL ; ilist = CGEN_ASM_NEXT_INSN (ilist))
+ {
+ const CGEN_INSN *insn = ilist->insn;
+ if (strcmp (CGEN_INSN_MNEMONIC (ilist->insn),
+ CGEN_INSN_MNEMONIC (pinsn)) == 0
+ && MEP_INSN_COP_P (ilist->insn)
+ && mep_cgen_insn_supported (cd, insn))
+ {
+ str = start;
+
+ /* skip this insn if str doesn't look right lexically */
+ if (CGEN_INSN_RX (insn) != NULL &&
+ regexec ((regex_t *) CGEN_INSN_RX (insn), str, 0, NULL, 0) == REG_NOMATCH)
+ continue;
+
+ /* Allow parse/insert handlers to obtain length of insn. */
+ CGEN_FIELDS_BITSIZE (fields) = CGEN_INSN_BITSIZE (insn);
+
+ errmsg = CGEN_PARSE_FN (cd, insn) (cd, insn, & str, fields);
+ if (errmsg != NULL)
+ continue;
+
+ errmsg = CGEN_INSERT_FN (cd, insn) (cd, insn, fields, buf,
+ (bfd_vma) 0);
+ if (errmsg != NULL)
+ continue;
+
+ return insn;
+ }
+ }
+ return pinsn;
+}
+
+static void
+mep_save_insn (mep_insn insn)
+{
+ /* Consider change MAX_SAVED_FIXUP_CHAINS to MAX_PARALLEL_INSNS. */
+ if (num_insns_saved < 0 || num_insns_saved >= MAX_SAVED_FIXUP_CHAINS)
+ {
+ as_fatal("index into saved_insns[] out of bounds.");
+ return;
+ }
+ saved_insns[num_insns_saved] = insn;
+ gas_cgen_save_fixups(num_insns_saved);
+ num_insns_saved++;
+}
+
+static void
+mep_check_parallel32_scheduling (void)
+{
+ int insn0iscopro, insn1iscopro, insn0length, insn1length;
+
+ /* More than two instructions means that either someone is referring to
+ an internally parallel core or an internally parallel coprocessor,
+ neither of which are supported at this time. */
+ if ( num_insns_saved > 2 )
+ as_fatal("Internally paralled cores and coprocessors not supported.");
+
+ /* If there are no insns saved, that's ok. Just return. This will
+ happen when mep_process_saved_insns is called when the end of the
+ source file is reached and there are no insns left to be processed. */
+ if (num_insns_saved == 0)
+ return;
+
+ /* Check some of the attributes of the first insn. */
+ insn0iscopro = MEP_INSN_COP_P (saved_insns[0].insn);
+ insn0length = CGEN_FIELDS_BITSIZE (& saved_insns[0].fields);
+
+ if (num_insns_saved == 2)
+ {
+ /* Check some of the attributes of the first insn. */
+ insn1iscopro = MEP_INSN_COP_P (saved_insns[1].insn);
+ insn1length = CGEN_FIELDS_BITSIZE (& saved_insns[1].fields);
+
+ if ((insn0iscopro && !insn1iscopro)
+ || (insn1iscopro && !insn0iscopro))
+ {
+ /* We have one core and one copro insn. If their sizes
+ add up to 32, then the combination is valid. */
+ if (insn0length + insn1length == 32)
+ return;
+ else
+ as_bad ("core and copro insn lengths must total 32 bits.");
+ }
+ else
+ as_bad ("vliw group must consist of 1 core and 1 copro insn.");
+ }
+ else
+ {
+ /* If we arrive here, we have one saved instruction. There are a
+ number of possible cases:
+
+ 1. The instruction is a 32 bit core or coprocessor insn and
+ can be executed by itself. Valid.
+
+ 2. The instrucion is a core instruction for which a cop nop
+ exists. In this case, insert the cop nop into the saved
+ insn array after the core insn and return. Valid.
+
+ 3. The instruction is a coprocessor insn for which a core nop
+ exists. In this case, move the coprocessor insn to the
+ second element of the array and put the nop in the first
+ element then return. Valid.
+
+ 4. The instruction is a core or coprocessor instruction for
+ which there is no matching coprocessor or core nop to use
+ to form a valid vliw insn combination. In this case, we
+ we have to abort. */
+
+ if (insn0length > 32)
+ as_fatal ("Cannot use 48- or 64-bit insns with a 32 bit datapath.");
+
+ if (insn0length == 32)
+ return;
+
+ /* Insn is smaller than datapath. If there are no matching
+ nops for this insn, then terminate assembly. */
+ if (CGEN_INSN_ATTR_VALUE (saved_insns[0].insn,
+ CGEN_INSN_VLIW32_NO_MATCHING_NOP))
+ as_fatal ("No valid nop.");
+
+ /* At this point we know that we have a single 16-bit insn that has
+ a matching nop. We have to assemble it and put it into the saved
+ insn and fixup chain arrays. */
+
+ if (insn0iscopro)
+ {
+ char *errmsg;
+ mep_insn insn;
+
+ /* Move the insn and it's fixups to the second element of the
+ saved insns arrary and insert a 16 bit core nope into the
+ first element. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, "nop",
+ &insn.fields, insn.buffer,
+ &errmsg);
+ if (!insn.insn)
+ {
+ as_bad ("%s", errmsg);
+ return;
+ }
+
+ /* Move the insn in element 0 to element 1 and insert the
+ nop into element 0. Move the fixups in element 0 to
+ element 1 and save the current fixups to element 0.
+ Really there aren't any fixups at this point because we're
+ inserting a nop but we might as well be general so that
+ if there's ever a need to insert a general insn, we'll
+ have an example. */
+ saved_insns[1] = saved_insns[0];
+ saved_insns[0] = insn;
+ num_insns_saved++;
+ gas_cgen_swap_fixups (0);
+ gas_cgen_save_fixups (1);
+ }
+ else
+ {
+ char * errmsg;
+ mep_insn insn;
+ int insn_num = saved_insns[0].insn->base->num;
+
+ /* Use 32 bit branches and skip the nop. */
+ if (insn_num == MEP_INSN_BSR12
+ || insn_num == MEP_INSN_BEQZ
+ || insn_num == MEP_INSN_BNEZ)
+ return;
+
+ /* Insert a 16-bit coprocessor nop. Note that at the time */
+ /* this was done, no 16-bit coprocessor nop was defined. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, "cpnop16",
+ &insn.fields, insn.buffer,
+ &errmsg);
+ if (!insn.insn)
+ {
+ as_bad ("%s", errmsg);
+ return;
+ }
+
+ /* Now put the insn and fixups into the arrays. */
+ mep_save_insn (insn);
+ }
+ }
+}
+
+static void
+mep_check_parallel64_scheduling (void)
+{
+ int insn0iscopro, insn1iscopro, insn0length, insn1length;
+
+ /* More than two instructions means that someone is referring to an
+ internally parallel core or an internally parallel coprocessor. */
+ /* These are not currently supported. */
+ if (num_insns_saved > 2)
+ as_fatal ("Internally parallel cores of coprocessors not supported.");
+
+ /* If there are no insns saved, that's ok. Just return. This will
+ happen when mep_process_saved_insns is called when the end of the
+ source file is reached and there are no insns left to be processed. */
+ if (num_insns_saved == 0)
+ return;
+
+ /* Check some of the attributes of the first insn. */
+ insn0iscopro = MEP_INSN_COP_P (saved_insns[0].insn);
+ insn0length = CGEN_FIELDS_BITSIZE (& saved_insns[0].fields);
+
+ if (num_insns_saved == 2)
+ {
+ /* Check some of the attributes of the first insn. */
+ insn1iscopro = MEP_INSN_COP_P (saved_insns[1].insn);
+ insn1length = CGEN_FIELDS_BITSIZE (& saved_insns[1].fields);
+
+ if ((insn0iscopro && !insn1iscopro)
+ || (insn1iscopro && !insn0iscopro))
+ {
+ /* We have one core and one copro insn. If their sizes
+ add up to 64, then the combination is valid. */
+ if (insn0length + insn1length == 64)
+ return;
+ else
+ as_bad ("core and copro insn lengths must total 64 bits.");
+ }
+ else
+ as_bad ("vliw group must consist of 1 core and 1 copro insn.");
+ }
+ else
+ {
+ /* If we arrive here, we have one saved instruction. There are a
+ number of possible cases:
+
+ 1. The instruction is a 64 bit coprocessor insn and can be
+ executed by itself. Valid.
+
+ 2. The instrucion is a core instruction for which a cop nop
+ exists. In this case, insert the cop nop into the saved
+ insn array after the core insn and return. Valid.
+
+ 3. The instruction is a coprocessor insn for which a core nop
+ exists. In this case, move the coprocessor insn to the
+ second element of the array and put the nop in the first
+ element then return. Valid.
+
+ 4. The instruction is a core or coprocessor instruction for
+ which there is no matching coprocessor or core nop to use
+ to form a valid vliw insn combination. In this case, we
+ we have to abort. */
+
+ /* If the insn is 64 bits long, it can run alone. The size check
+ is done indepependantly of whether the insn is core or copro
+ in case 64 bit coprocessor insns are added later. */
+ if (insn0length == 64)
+ return;
+
+ /* Insn is smaller than datapath. If there are no matching
+ nops for this insn, then terminate assembly. */
+ if (CGEN_INSN_ATTR_VALUE (saved_insns[0].insn,
+ CGEN_INSN_VLIW64_NO_MATCHING_NOP))
+ as_fatal ("No valid nop.");
+
+ if (insn0iscopro)
+ {
+ char *errmsg;
+ mep_insn insn;
+ int i;
+
+ /* Initialize the insn buffer. */
+ for (i = 0; i < 64; i++)
+ insn.buffer[i] = '\0';
+
+ /* We have a coprocessor insn. At this point in time there
+ are is 32-bit core nop. There is only a 16-bit core
+ nop. The idea is to allow for a relatively arbitrary
+ coprocessor to be specified. We aren't looking at
+ trying to cover future changes in the core at this time
+ since it is assumed that the core will remain fairly
+ static. If there ever are 32 or 48 bit core nops added,
+ they will require entries below. */
+
+ if (insn0length == 48)
+ {
+ /* Move the insn and fixups to the second element of the
+ arrays then assemble and insert a 16 bit core nop. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, "nop",
+ & insn.fields, insn.buffer,
+ & errmsg);
+ }
+ else
+ {
+ /* If this is reached, then we have a single coprocessor
+ insn that is not 48 bits long, but for which the assembler
+ thinks there is a matching core nop. If a 32-bit core
+ nop has been added, then make the necessary changes and
+ handle its assembly and insertion here. Otherwise,
+ go figure out why either:
+
+ 1. The assembler thinks that there is a 32-bit core nop
+ to match a 32-bit coprocessor insn, or
+ 2. The assembler thinks that there is a 48-bit core nop
+ to match a 16-bit coprocessor insn. */
+
+ as_fatal ("Assembler expects a non-existent core nop.");
+ }
+
+ if (!insn.insn)
+ {
+ as_bad ("%s", errmsg);
+ return;
+ }
+
+ /* Move the insn in element 0 to element 1 and insert the
+ nop into element 0. Move the fixups in element 0 to
+ element 1 and save the current fixups to element 0.
+ Really there aren't any fixups at this point because we're
+ inserting a nop but we might as well be general so that
+ if there's ever a need to insert a general insn, we'll
+ have an example. */
+
+ saved_insns[1] = saved_insns[0];
+ saved_insns[0] = insn;
+ num_insns_saved++;
+ gas_cgen_swap_fixups(0);
+ gas_cgen_save_fixups(1);
+
+ }
+ else
+ {
+ char * errmsg;
+ mep_insn insn;
+ int i;
+
+ /* Initialize the insn buffer */
+ for (i = 0; i < 64; i++)
+ insn.buffer[i] = '\0';
+
+ /* We have a core insn. We have to handle all possible nop
+ lengths. If a coprocessor doesn't have a nop of a certain
+ length but there exists core insns that when combined with
+ a nop of that length would fill the datapath, those core
+ insns will be flagged with the VLIW_NO_CORRESPONDING_NOP
+ attribute. That will ensure that when used in a way that
+ requires a nop to be inserted, assembly will terminate
+ before reaching this section of code. This guarantees
+ that cases below which would result in the attempted
+ insertion of nop that doesn't exist will never be entered. */
+ if (insn0length == 16)
+ {
+ /* Insert 48 bit coprocessor nop. */
+ /* Assemble it and put it into the arrays. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, "cpnop48",
+ &insn.fields, insn.buffer,
+ &errmsg);
+ }
+ else if (insn0length == 32)
+ {
+ /* Insert 32 bit coprocessor nop. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, "cpnop32",
+ &insn.fields, insn.buffer,
+ &errmsg);
+ }
+ else if (insn0length == 48)
+ {
+ /* Insert 16 bit coprocessor nop. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, "cpnop16",
+ &insn.fields, insn.buffer,
+ &errmsg);
+ }
+ else
+ /* Core insn has an invalid length. Something has gone wrong. */
+ as_fatal ("Core insn has invalid length! Something is wrong!");
+
+ if (!insn.insn)
+ {
+ as_bad ("%s", errmsg);
+ return;
+ }
+
+ /* Now put the insn and fixups into the arrays. */
+ mep_save_insn (insn);
+ }
+ }
+}
+
+/* The scheduling functions are just filters for invalid combinations.
+ If there is a violation, they terminate assembly. Otherise they
+ just fall through. Succesful combinations cause no side effects
+ other than valid nop insertion. */
+
+static void
+mep_check_parallel_scheduling (void)
+{
+ /* This is where we will eventually read the config information
+ and choose which scheduling checking function to call. */
+ if (MEP_VLIW64)
+ mep_check_parallel64_scheduling ();
+ else
+ mep_check_parallel32_scheduling ();
+}
+
+static void
+mep_process_saved_insns (void)
+{
+ int i;
+
+ gas_cgen_save_fixups (MAX_SAVED_FIXUP_CHAINS - 1);
+
+ /* We have to check for valid scheduling here. */
+ mep_check_parallel_scheduling ();
+
+ /* If the last call didn't cause assembly to terminate, we have
+ a valid vliw insn/insn pair saved. Restore this instructions'
+ fixups and process the insns. */
+ for (i = 0;i<num_insns_saved;i++)
+ {
+ gas_cgen_restore_fixups (i);
+ gas_cgen_finish_insn (saved_insns[i].insn, saved_insns[i].buffer,
+ CGEN_FIELDS_BITSIZE (& saved_insns[i].fields),
+ 1, NULL);
+ }
+ gas_cgen_restore_fixups (MAX_SAVED_FIXUP_CHAINS - 1);
+
+ /* Clear the fixups and reset the number insn saved to 0. */
+ gas_cgen_initialize_saved_fixups_array ();
+ num_insns_saved = 0;
+ listing_prev_line ();
+}
+
+void
+md_assemble (char * str)
+{
+ static CGEN_BITSET* isas = NULL;
+ char * errmsg;
+
+ /* Initialize GAS's cgen interface for a new instruction. */
+ gas_cgen_init_parse ();
+
+ /* There are two possible modes: core and vliw. We have to assemble
+ differently for each.
+
+ Core Mode: We assemble normally. All instructions are on a
+ single line and are made up of one mnemonic and one
+ set of operands.
+ VLIW Mode: Vliw combinations are indicated as follows:
+
+ core insn
+ + copro insn
+
+ We want to handle the general case where more than
+ one instruction can be preceeded by a +. This will
+ happen later if we add support for internally parallel
+ coprocessors. We'll make the parsing nice and general
+ so that it can handle an arbitrary number of insns
+ with leading +'s. The actual checking for valid
+ combinations is done elsewhere. */
+
+ /* Initialize the isa to refer to the core. */
+ if (isas == NULL)
+ isas = cgen_bitset_copy (& MEP_CORE_ISA);
+ else
+ {
+ cgen_bitset_clear (isas);
+ cgen_bitset_union (isas, & MEP_CORE_ISA, isas);
+ }
+ gas_cgen_cpu_desc->isas = isas;
+
+ if (mode == VLIW)
+ {
+ /* VLIW mode. */
+
+ int thisInsnIsCopro = 0;
+ mep_insn insn;
+ int i;
+
+ /* Initialize the insn buffer */
+
+ if (! CGEN_INT_INSN_P)
+ for (i=0; i < CGEN_MAX_INSN_SIZE; i++)
+ insn.buffer[i]='\0';
+
+ /* Can't tell core / copro insns apart at parse time! */
+ cgen_bitset_union (isas, & MEP_COP_ISA, isas);
+
+ /* Assemble the insn so we can examine its attributes. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, str,
+ &insn.fields, insn.buffer,
+ &errmsg);
+ if (!insn.insn)
+ {
+ as_bad ("%s", errmsg);
+ return;
+ }
+ mep_check_for_disabled_registers (&insn);
+
+ /* Check to see if it's a coprocessor instruction. */
+ thisInsnIsCopro = MEP_INSN_COP_P (insn.insn);
+
+ if (!thisInsnIsCopro)
+ {
+ insn.insn = mep_cgen_assemble_cop_insn (gas_cgen_cpu_desc, str,
+ &insn.fields, insn.buffer,
+ insn.insn);
+ thisInsnIsCopro = MEP_INSN_COP_P (insn.insn);
+ mep_check_for_disabled_registers (&insn);
+ }
+
+ if (pluspresent)
+ {
+ /* A plus was present. */
+ /* Check for a + with a core insn and abort if found. */
+ if (!thisInsnIsCopro)
+ {
+ as_fatal("A core insn cannot be preceeded by a +.\n");
+ return;
+ }
+
+ if (num_insns_saved > 0)
+ {
+ /* There are insns in the queue. Add this one. */
+ mep_save_insn (insn);
+ }
+ else
+ {
+ /* There are no insns in the queue and a plus is present.
+ This is a syntax error. Let's not tolerate this.
+ We can relax this later if necessary. */
+ as_bad (_("Invalid use of parallelization operator."));
+ return;
+ }
+ }
+ else
+ {
+ /* No plus was present. */
+ if (num_insns_saved > 0)
+ {
+ /* There are insns saved and we came across an insn without a
+ leading +. That's the signal to process the saved insns
+ before proceeding then treat the current insn as the first
+ in a new vliw group. */
+ mep_process_saved_insns ();
+ num_insns_saved = 0;
+ /* mep_save_insn (insn); */
+ }
+ mep_save_insn (insn);
+#if 0
+ else
+ {
+
+ /* Core Insn. Add it to the beginning of the queue. */
+ mep_save_insn (insn);
+ /* gas_cgen_save_fixups(num_insns_saved); */
+ }
+#endif
+ }
+
+ pluspresent = 0;
+ }
+ else
+ {
+ /* Core mode. */
+
+ /* Only single instructions are assembled in core mode. */
+ mep_insn insn;
+
+ /* If a leading '+' was present, issue an error.
+ That's not allowed in core mode. */
+ if (pluspresent)
+ {
+ as_bad (_("Leading plus sign not allowed in core mode"));
+ return;
+ }
+
+ insn.insn = mep_cgen_assemble_insn
+ (gas_cgen_cpu_desc, str, & insn.fields, insn.buffer, & errmsg);
+
+ if (!insn.insn)
+ {
+ as_bad ("%s", errmsg);
+ return;
+ }
+ gas_cgen_finish_insn (insn.insn, insn.buffer,
+ CGEN_FIELDS_BITSIZE (& insn.fields), 1, NULL);
+ mep_check_for_disabled_registers (&insn);
+ }
+}
+
+valueT
+md_section_align (segT segment, valueT size)
+{
+ int align = bfd_get_section_alignment (stdoutput, segment);
+ return ((size + (1 << align) - 1) & (-1 << align));
+}
+
+
+symbolS *
+md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
+{
+ return 0;
+}
+
+/* Interface to relax_segment. */
+
+
+const relax_typeS md_relax_table[] =
+{
+ /* The fields are:
+ 1) most positive reach of this state,
+ 2) most negative reach of this state,
+ 3) how many bytes this mode will have in the variable part of the frag
+ 4) which index into the table to try if we can't fit into this one. */
+ /* Note that we use "beq" because "jmp" has a peculiarity - it cannot
+ jump to addresses with any bits 27..24 set. So, we use beq as a
+ 17-bit pc-relative branch to avoid using jmp, just in case. */
+
+ /* 0 */ { 0, 0, 0, 0 }, /* unused */
+ /* 1 */ { 0, 0, 0, 0 }, /* marker for "don't know yet" */
+
+ /* 2 */ { 2047, -2048, 0, 3 }, /* bsr12 */
+ /* 3 */ { 0, 0, 2, 0 }, /* bsr16 */
+
+ /* 4 */ { 2047, -2048, 0, 5 }, /* bra */
+ /* 5 */ { 65535, -65536, 2, 6 }, /* beq $0,$0 */
+ /* 6 */ { 0, 0, 2, 0 }, /* jmp24 */
+
+ /* 7 */ { 65535, -65536, 0, 8 }, /* beqi */
+ /* 8 */ { 0, 0, 4, 0 }, /* bnei/jmp */
+
+ /* 9 */ { 127, -128, 0, 10 }, /* beqz */
+ /* 10 */ { 65535, -65536, 2, 11 }, /* beqi */
+ /* 11 */ { 0, 0, 4, 0 }, /* bnei/jmp */
+
+ /* 12 */ { 65535, -65536, 0, 13 }, /* bnei */
+ /* 13 */ { 0, 0, 4, 0 }, /* beqi/jmp */
+
+ /* 14 */ { 127, -128, 0, 15 }, /* bnez */
+ /* 15 */ { 65535, -65536, 2, 16 }, /* bnei */
+ /* 16 */ { 0, 0, 4, 0 }, /* beqi/jmp */
+
+ /* 17 */ { 65535, -65536, 0, 13 }, /* bgei */
+ /* 18 */ { 0, 0, 4, 0 },
+ /* 19 */ { 65535, -65536, 0, 13 }, /* blti */
+ /* 20 */ { 0, 0, 4, 0 },
+ /* 19 */ { 65535, -65536, 0, 13 }, /* bcpeq */
+ /* 20 */ { 0, 0, 4, 0 },
+ /* 19 */ { 65535, -65536, 0, 13 }, /* bcpne */
+ /* 20 */ { 0, 0, 4, 0 },
+ /* 19 */ { 65535, -65536, 0, 13 }, /* bcpat */
+ /* 20 */ { 0, 0, 4, 0 },
+ /* 19 */ { 65535, -65536, 0, 13 }, /* bcpaf */
+ /* 20 */ { 0, 0, 4, 0 }
+};
+
+/* Pseudo-values for 64 bit "insns" which are combinations of two 32
+ bit insns. */
+typedef enum {
+ MEP_PSEUDO64_NONE,
+ MEP_PSEUDO64_16BITCC,
+ MEP_PSEUDO64_32BITCC,
+} MepPseudo64Values;
+
+static struct {
+ int insn;
+ int growth;
+ int insn_for_extern;
+} subtype_mappings[] = {
+ { 0, 0, 0 },
+ { 0, 0, 0 },
+ { MEP_INSN_BSR12, 0, MEP_INSN_BSR24 },
+ { MEP_INSN_BSR24, 2, MEP_INSN_BSR24 },
+ { MEP_INSN_BRA, 0, MEP_INSN_BRA },
+ { MEP_INSN_BEQ, 2, MEP_INSN_BEQ },
+ { MEP_INSN_JMP, 2, MEP_INSN_JMP },
+ { MEP_INSN_BEQI, 0, MEP_INSN_BEQI },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BEQZ, 0, MEP_INSN_BEQZ },
+ { MEP_INSN_BEQI, 2, MEP_INSN_BEQI },
+ { -1, 4, MEP_PSEUDO64_16BITCC },
+ { MEP_INSN_BNEI, 0, MEP_INSN_BNEI },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BNEZ, 0, MEP_INSN_BNEZ },
+ { MEP_INSN_BNEI, 2, MEP_INSN_BNEI },
+ { -1, 4, MEP_PSEUDO64_16BITCC },
+ { MEP_INSN_BGEI, 0, MEP_INSN_BGEI },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BLTI, 0, MEP_INSN_BLTI },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BCPEQ, 0, MEP_INSN_BCPEQ },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BCPNE, 0, MEP_INSN_BCPNE },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BCPAT, 0, MEP_INSN_BCPAT },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BCPAF, 0, MEP_INSN_BCPAF },
+ { -1, 4, MEP_PSEUDO64_32BITCC }
+};
+#define NUM_MAPPINGS (sizeof (subtype_mappings) / sizeof (subtype_mappings[0]))
+
+void
+mep_prepare_relax_scan (fragS *fragP, offsetT *aim, relax_substateT this_state)
+{
+ symbolS *symbolP = fragP->fr_symbol;
+ if (symbolP && !S_IS_DEFINED (symbolP))
+ *aim = 0;
+ /* Adjust for MeP pcrel not being relative to the next opcode. */
+ *aim += 2 + md_relax_table[this_state].rlx_length;
+}
+
+static int
+insn_to_subtype (int insn)
+{
+ unsigned int i;
+ for (i=0; i<NUM_MAPPINGS; i++)
+ if (insn == subtype_mappings[i].insn)
+ return i;
+ abort ();
+}
+
+/* Return an initial guess of the length by which a fragment must grow
+ to hold a branch to reach its destination. Also updates fr_type
+ and fr_subtype as necessary.
+
+ Called just before doing relaxation. Any symbol that is now
+ undefined will not become defined. The guess for fr_var is
+ ACTUALLY the growth beyond fr_fix. Whatever we do to grow fr_fix
+ or fr_var contributes to our returned value. Although it may not
+ be explicit in the frag, pretend fr_var starts with a 0 value. */
+
+int
+md_estimate_size_before_relax (fragS * fragP, segT segment)
+{
+ if (fragP->fr_subtype == 1)
+ fragP->fr_subtype = insn_to_subtype (fragP->fr_cgen.insn->base->num);
+
+ if (S_GET_SEGMENT (fragP->fr_symbol) != segment)
+ {
+ int new_insn;
+
+ new_insn = subtype_mappings[fragP->fr_subtype].insn_for_extern;
+ fragP->fr_subtype = insn_to_subtype (new_insn);
+ }
+
+ if (MEP_VLIW && ! MEP_VLIW64
+ && (bfd_get_section_flags (stdoutput, segment) & SEC_MEP_VLIW))
+ {
+ /* Use 32 bit branches for vliw32 so the vliw word is not split. */
+ switch (fragP->fr_cgen.insn->base->num)
+ {
+ case MEP_INSN_BSR12:
+ fragP->fr_subtype = insn_to_subtype
+ (subtype_mappings[fragP->fr_subtype].insn_for_extern);
+ break;
+ case MEP_INSN_BEQZ:
+ fragP->fr_subtype ++;
+ break;
+ case MEP_INSN_BNEZ:
+ fragP->fr_subtype ++;
+ break;
+ }
+ }
+
+ if (fragP->fr_cgen.insn->base
+ && fragP->fr_cgen.insn->base->num
+ != subtype_mappings[fragP->fr_subtype].insn)
+ {
+ int new_insn= subtype_mappings[fragP->fr_subtype].insn;
+ if (new_insn != -1)
+ {
+ fragP->fr_cgen.insn = (fragP->fr_cgen.insn
+ - fragP->fr_cgen.insn->base->num
+ + new_insn);
+ }
+ }
+
+ return subtype_mappings[fragP->fr_subtype].growth;
+}
+
+/* *fragP has been relaxed to its final size, and now needs to have
+ the bytes inside it modified to conform to the new size.
+
+ Called after relaxation is finished.
+ fragP->fr_type == rs_machine_dependent.
+ fragP->fr_subtype is the subtype of what the address relaxed to. */
+
+static int
+target_address_for (fragS *frag)
+{
+ int rv = frag->fr_offset;
+ symbolS *sym = frag->fr_symbol;
+
+ if (sym)
+ rv += S_GET_VALUE (sym);
+
+ return rv;
+}
+
+void
+md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED,
+ segT sec ATTRIBUTE_UNUSED,
+ fragS *fragP)
+{
+ int addend, rn, bit = 0;
+ int operand;
+ int where = fragP->fr_opcode - fragP->fr_literal;
+ int e = target_big_endian ? 0 : 1;
+
+ addend = target_address_for (fragP) - (fragP->fr_address + where);
+
+ if (subtype_mappings[fragP->fr_subtype].insn == -1)
+ {
+ fragP->fr_fix += subtype_mappings[fragP->fr_subtype].growth;
+ switch (subtype_mappings[fragP->fr_subtype].insn_for_extern)
+ {
+ case MEP_PSEUDO64_16BITCC:
+ fragP->fr_opcode[1^e] = ((fragP->fr_opcode[1^e] & 1) ^ 1) | 0x06;
+ fragP->fr_opcode[2^e] = 0xd8;
+ fragP->fr_opcode[3^e] = 0x08;
+ fragP->fr_opcode[4^e] = 0;
+ fragP->fr_opcode[5^e] = 0;
+ where += 2;
+ break;
+ case MEP_PSEUDO64_32BITCC:
+ if (fragP->fr_opcode[0^e] & 0x10)
+ fragP->fr_opcode[1^e] ^= 0x01;
+ else
+ fragP->fr_opcode[1^e] ^= 0x04;
+ fragP->fr_opcode[2^e] = 0;
+ fragP->fr_opcode[3^e] = 4;
+ fragP->fr_opcode[4^e] = 0xd8;
+ fragP->fr_opcode[5^e] = 0x08;
+ fragP->fr_opcode[6^e] = 0;
+ fragP->fr_opcode[7^e] = 0;
+ where += 4;
+ break;
+ default:
+ abort ();
+ }
+ fragP->fr_cgen.insn = (fragP->fr_cgen.insn
+ - fragP->fr_cgen.insn->base->num
+ + MEP_INSN_JMP);
+ operand = MEP_OPERAND_PCABS24A2;
+ }
+ else
+ switch (fragP->fr_cgen.insn->base->num)
+ {
+ case MEP_INSN_BSR12:
+ fragP->fr_opcode[0^e] = 0xb0 | ((addend >> 8) & 0x0f);
+ fragP->fr_opcode[1^e] = 0x01 | (addend & 0xfe);
+ operand = MEP_OPERAND_PCREL12A2;
+ break;
+
+ case MEP_INSN_BSR24:
+ fragP->fr_fix += 2;
+ fragP->fr_opcode[0^e] = 0xd8 | ((addend >> 5) & 0x07);
+ fragP->fr_opcode[1^e] = 0x09 | ((addend << 3) & 0xf0);
+ fragP->fr_opcode[2^e] = 0x00 | ((addend >>16) & 0xff);
+ fragP->fr_opcode[3^e] = 0x00 | ((addend >> 8) & 0xff);
+ operand = MEP_OPERAND_PCREL24A2;
+ break;
+
+ case MEP_INSN_BRA:
+ fragP->fr_opcode[0^e] = 0xb0 | ((addend >> 8) & 0x0f);
+ fragP->fr_opcode[1^e] = 0x00 | (addend & 0xfe);
+ operand = MEP_OPERAND_PCREL12A2;
+ break;
+
+ case MEP_INSN_BEQ:
+ /* The default relax_frag doesn't change the state if there is no
+ growth, so we must manually handle converting out-of-range BEQ
+ instructions to JMP. */
+ if (addend <= 65535 && addend >= -65536)
+ {
+ fragP->fr_fix += 2;
+ fragP->fr_opcode[0^e] = 0xe0;
+ fragP->fr_opcode[1^e] = 0x01;
+ fragP->fr_opcode[2^e] = 0x00 | ((addend >> 9) & 0xff);
+ fragP->fr_opcode[3^e] = 0x00 | ((addend >> 1) & 0xff);
+ operand = MEP_OPERAND_PCREL17A2;
+ break;
+ }
+ /* ...FALLTHROUGH... */
+
+ case MEP_INSN_JMP:
+ addend = target_address_for (fragP);
+ fragP->fr_fix += 2;
+ fragP->fr_opcode[0^e] = 0xd8 | ((addend >> 5) & 0x07);
+ fragP->fr_opcode[1^e] = 0x08 | ((addend << 3) & 0xf0);
+ fragP->fr_opcode[2^e] = 0x00 | ((addend >>16) & 0xff);
+ fragP->fr_opcode[3^e] = 0x00 | ((addend >> 8) & 0xff);
+ operand = MEP_OPERAND_PCABS24A2;
+ break;
+
+ case MEP_INSN_BNEZ:
+ bit = 1;
+ case MEP_INSN_BEQZ:
+ fragP->fr_opcode[1^e] = bit | (addend & 0xfe);
+ operand = MEP_OPERAND_PCREL8A2;
+ break;
+
+ case MEP_INSN_BNEI:
+ bit = 4;
+ case MEP_INSN_BEQI:
+ if (subtype_mappings[fragP->fr_subtype].growth)
+ {
+ fragP->fr_fix += subtype_mappings[fragP->fr_subtype].growth;
+ rn = fragP->fr_opcode[0^e] & 0x0f;
+ fragP->fr_opcode[0^e] = 0xe0 | rn;
+ fragP->fr_opcode[1^e] = bit;
+ }
+ fragP->fr_opcode[2^e] = 0x00 | ((addend >> 9) & 0xff);
+ fragP->fr_opcode[3^e] = 0x00 | ((addend >> 1) & 0xff);
+ operand = MEP_OPERAND_PCREL17A2;
+ break;
+
+ case MEP_INSN_BLTI:
+ case MEP_INSN_BGEI:
+ case MEP_INSN_BCPEQ:
+ case MEP_INSN_BCPNE:
+ case MEP_INSN_BCPAT:
+ case MEP_INSN_BCPAF:
+ /* No opcode change needed, just operand. */
+ fragP->fr_opcode[2^e] = (addend >> 9) & 0xff;
+ fragP->fr_opcode[3^e] = (addend >> 1) & 0xff;
+ operand = MEP_OPERAND_PCREL17A2;
+ break;
+
+ default:
+ abort ();
+ }
+
+ if (S_GET_SEGMENT (fragP->fr_symbol) != sec
+ || operand == MEP_OPERAND_PCABS24A2)
+ {
+ assert (fragP->fr_cgen.insn != 0);
+ gas_cgen_record_fixup (fragP,
+ where,
+ fragP->fr_cgen.insn,
+ (fragP->fr_fix - where) * 8,
+ cgen_operand_lookup_by_num (gas_cgen_cpu_desc,
+ operand),
+ fragP->fr_cgen.opinfo,
+ fragP->fr_symbol, fragP->fr_offset);
+ }
+}
+
+
+/* Functions concerning relocs. */
+
+void
+mep_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
+{
+ /* If we already know the fixup value, adjust it in the same
+ way that the linker would have done. */
+ if (fixP->fx_addsy == 0)
+ switch (fixP->fx_cgen.opinfo)
+ {
+ case BFD_RELOC_MEP_LOW16:
+ *valP = ((long)(*valP & 0xffff)) << 16 >> 16;
+ break;
+ case BFD_RELOC_MEP_HI16U:
+ *valP >>= 16;
+ break;
+ case BFD_RELOC_MEP_HI16S:
+ *valP = (*valP + 0x8000) >> 16;
+ break;
+ }
+
+ /* Now call cgen's md_aply_fix. */
+ gas_cgen_md_apply_fix (fixP, valP, seg);
+}
+
+long
+md_pcrel_from_section (fixS *fixP, segT sec)
+{
+ if (fixP->fx_addsy != (symbolS *) NULL
+ && (! S_IS_DEFINED (fixP->fx_addsy)
+ || S_GET_SEGMENT (fixP->fx_addsy) != sec))
+ /* The symbol is undefined (or is defined but not in this section).
+ Let the linker figure it out. */
+ return 0;
+
+ /* Return the address of the opcode - cgen adjusts for opcode size
+ itself, to be consistent with the disassembler, which must do
+ so. */
+ return fixP->fx_where + fixP->fx_frag->fr_address;
+}
+
+/* Return the bfd reloc type for OPERAND of INSN at fixup FIXP.
+ Returns BFD_RELOC_NONE if no reloc type can be found.
+ *FIXP may be modified if desired. */
+
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define MAP(n) case MEP_OPERAND_##n: return BFD_RELOC_MEP_##n;
+#else
+#define MAP(n) case MEP_OPERAND_/**/n: return BFD_RELOC_MEP_/**/n;
+#endif
+
+bfd_reloc_code_real_type
+md_cgen_lookup_reloc (const CGEN_INSN *insn ATTRIBUTE_UNUSED,
+ const CGEN_OPERAND *operand,
+ fixS *fixP)
+{
+ enum bfd_reloc_code_real reloc = fixP->fx_cgen.opinfo;
+ static char printed[MEP_OPERAND_MAX] = { 0 };
+
+ /* If there's a reloc here, it's because the parser saw a %foo() and
+ is giving us the correct reloc to use, or because we converted to
+ a different size reloc below and want to avoid "converting" more
+ than once. */
+ if (reloc && reloc != BFD_RELOC_NONE)
+ return reloc;
+
+ switch (operand->type)
+ {
+ MAP (PCREL8A2); /* beqz */
+ MAP (PCREL12A2); /* bsr16 */
+ MAP (PCREL17A2); /* beqi */
+ MAP (PCREL24A2); /* bsr24 */
+ MAP (PCABS24A2); /* jmp */
+ MAP (UIMM24); /* mov */
+ MAP (ADDR24A4); /* sw/lw */
+
+ /* The rest of the relocs should be generated by the parser,
+ for things such as %tprel(), etc. */
+ case MEP_OPERAND_SIMM16:
+#ifdef OBJ_COMPLEX_RELC
+ /* coalescing this into RELOC_MEP_16 is actually a bug,
+ since it's a signed operand. let the relc code handle it. */
+ return BFD_RELOC_RELC;
+#endif
+
+ case MEP_OPERAND_UIMM16:
+ case MEP_OPERAND_SDISP16:
+ case MEP_OPERAND_CODE16:
+ fixP->fx_where += 2;
+ /* to avoid doing the above add twice */
+ fixP->fx_cgen.opinfo = BFD_RELOC_MEP_16;
+ return BFD_RELOC_MEP_16;
+
+ default:
+#ifdef OBJ_COMPLEX_RELC
+ /* this is not an error, yet.
+ pass it to the linker. */
+ return BFD_RELOC_RELC;
+#endif
+ if (printed[operand->type])
+ return BFD_RELOC_NONE;
+ printed[operand->type] = 1;
+
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("Don't know how to relocate plain operands of type %s"),
+ operand->name);
+
+ /* Print some helpful hints for the user. */
+ switch (operand->type)
+ {
+ case MEP_OPERAND_UDISP7:
+ case MEP_OPERAND_UDISP7A2:
+ case MEP_OPERAND_UDISP7A4:
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("Perhaps you are missing %%tpoff()?"));
+ break;
+ default:
+ break;
+ }
+ return BFD_RELOC_NONE;
+ }
+}
+
+/* Called while parsing an instruction to create a fixup.
+ We need to check for HI16 relocs and queue them up for later sorting. */
+
+fixS *
+mep_cgen_record_fixup_exp (fragS *frag,
+ int where,
+ const CGEN_INSN *insn,
+ int length,
+ const CGEN_OPERAND *operand,
+ int opinfo,
+ expressionS *exp)
+{
+ fixS * fixP = gas_cgen_record_fixup_exp (frag, where, insn, length,
+ operand, opinfo, exp);
+ return fixP;
+}
+
+/* Return BFD reloc type from opinfo field in a fixS.
+ It's tricky using fx_r_type in mep_frob_file because the values
+ are BFD_RELOC_UNUSED + operand number. */
+#define FX_OPINFO_R_TYPE(f) ((f)->fx_cgen.opinfo)
+
+/* Sort any unmatched HI16 relocs so that they immediately precede
+ the corresponding LO16 reloc. This is called before md_apply_fix and
+ tc_gen_reloc. */
+
+void
+mep_frob_file ()
+{
+ struct mep_hi_fixup * l;
+
+ for (l = mep_hi_fixup_list; l != NULL; l = l->next)
+ {
+ segment_info_type * seginfo;
+ int pass;
+
+ assert (FX_OPINFO_R_TYPE (l->fixp) == BFD_RELOC_HI16
+ || FX_OPINFO_R_TYPE (l->fixp) == BFD_RELOC_LO16);
+
+ /* Check quickly whether the next fixup happens to be a matching low. */
+ if (l->fixp->fx_next != NULL
+ && FX_OPINFO_R_TYPE (l->fixp->fx_next) == BFD_RELOC_LO16
+ && l->fixp->fx_addsy == l->fixp->fx_next->fx_addsy
+ && l->fixp->fx_offset == l->fixp->fx_next->fx_offset)
+ continue;
+
+ /* Look through the fixups for this segment for a matching
+ `low'. When we find one, move the high just in front of it.
+ We do this in two passes. In the first pass, we try to find
+ a unique `low'. In the second pass, we permit multiple
+ high's relocs for a single `low'. */
+ seginfo = seg_info (l->seg);
+ for (pass = 0; pass < 2; pass++)
+ {
+ fixS * f;
+ fixS * prev;
+
+ prev = NULL;
+ for (f = seginfo->fix_root; f != NULL; f = f->fx_next)
+ {
+ /* Check whether this is a `low' fixup which matches l->fixp. */
+ if (FX_OPINFO_R_TYPE (f) == BFD_RELOC_LO16
+ && f->fx_addsy == l->fixp->fx_addsy
+ && f->fx_offset == l->fixp->fx_offset
+ && (pass == 1
+ || prev == NULL
+ || (FX_OPINFO_R_TYPE (prev) != BFD_RELOC_HI16)
+ || prev->fx_addsy != f->fx_addsy
+ || prev->fx_offset != f->fx_offset))
+ {
+ fixS ** pf;
+
+ /* Move l->fixp before f. */
+ for (pf = &seginfo->fix_root;
+ * pf != l->fixp;
+ pf = & (* pf)->fx_next)
+ assert (* pf != NULL);
+
+ * pf = l->fixp->fx_next;
+
+ l->fixp->fx_next = f;
+ if (prev == NULL)
+ seginfo->fix_root = l->fixp;
+ else
+ prev->fx_next = l->fixp;
+
+ break;
+ }
+
+ prev = f;
+ }
+
+ if (f != NULL)
+ break;
+
+ if (pass == 1)
+ as_warn_where (l->fixp->fx_file, l->fixp->fx_line,
+ _("Unmatched high relocation"));
+ }
+ }
+}
+
+/* See whether we need to force a relocation into the output file. */
+
+int
+mep_force_relocation (fixS *fixp)
+{
+ if ( fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
+ || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
+ return 1;
+
+ /* Allow branches to global symbols to be resolved at assembly time.
+ This is consistent with way relaxable branches are handled, since
+ branches to both global and local symbols are relaxed. It also
+ corresponds to the assumptions made in md_pcrel_from_section. */
+ return S_FORCE_RELOC (fixp->fx_addsy, !fixp->fx_pcrel);
+}
+
+/* Write a value out to the object file, using the appropriate endianness. */
+
+void
+md_number_to_chars (char *buf, valueT val, int n)
+{
+ if (target_big_endian)
+ number_to_chars_bigendian (buf, val, n);
+ else
+ number_to_chars_littleendian (buf, val, n);
+}
+
+/* Turn a string in input_line_pointer into a floating point constant
+ of type type, and store the appropriate bytes in *litP. The number
+ of LITTLENUMS emitted is stored in *sizeP . An error message is
+ returned, or NULL on OK. */
+
+/* Equal to MAX_PRECISION in atof-ieee.c */
+#define MAX_LITTLENUMS 6
+
+char *
+md_atof (int type, char *litP, int *sizeP)
+{
+ int i;
+ int prec;
+ LITTLENUM_TYPE words [MAX_LITTLENUMS];
+ char * t;
+
+ switch (type)
+ {
+ case 'f':
+ case 'F':
+ case 's':
+ case 'S':
+ prec = 2;
+ break;
+
+ case 'd':
+ case 'D':
+ case 'r':
+ case 'R':
+ prec = 4;
+ break;
+
+ /* FIXME: Some targets allow other format chars for bigger sizes here. */
+ default:
+ *sizeP = 0;
+ return _("Bad call to md_atof()");
+ }
+
+ t = atof_ieee (input_line_pointer, type, words);
+ if (t)
+ input_line_pointer = t;
+ * sizeP = prec * sizeof (LITTLENUM_TYPE);
+
+ for (i = 0; i < prec; i++)
+ {
+ md_number_to_chars (litP, (valueT) words[i],
+ sizeof (LITTLENUM_TYPE));
+ litP += sizeof (LITTLENUM_TYPE);
+ }
+
+ return 0;
+}
+
+
+bfd_boolean
+mep_fix_adjustable (fixS *fixP)
+{
+ bfd_reloc_code_real_type reloc_type;
+
+ if ((int) fixP->fx_r_type >= (int) BFD_RELOC_UNUSED)
+ {
+ const CGEN_INSN *insn = NULL;
+ int opindex = (int) fixP->fx_r_type - (int) BFD_RELOC_UNUSED;
+ const CGEN_OPERAND *operand
+ = cgen_operand_lookup_by_num(gas_cgen_cpu_desc, opindex);
+ reloc_type = md_cgen_lookup_reloc (insn, operand, fixP);
+ }
+ else
+ reloc_type = fixP->fx_r_type;
+
+ if (fixP->fx_addsy == NULL)
+ return 1;
+
+ /* Prevent all adjustments to global symbols. */
+ if (S_IS_EXTERNAL (fixP->fx_addsy))
+ return 0;
+
+ if (S_IS_WEAK (fixP->fx_addsy))
+ return 0;
+
+ /* We need the symbol name for the VTABLE entries */
+ if (reloc_type == BFD_RELOC_VTABLE_INHERIT
+ || reloc_type == BFD_RELOC_VTABLE_ENTRY)
+ return 0;
+
+ return 1;
+}
+
+int
+mep_elf_section_letter (int letter, char **ptrmsg)
+{
+ if (letter == 'v')
+ return SHF_MEP_VLIW;
+
+ *ptrmsg = _("Bad .section directive: want a,v,w,x,M,S in string");
+ return 0;
+}
+
+flagword
+mep_elf_section_flags (flagword flags, int attr, int type ATTRIBUTE_UNUSED)
+{
+ if (attr & SHF_MEP_VLIW)
+ flags |= SEC_MEP_VLIW;
+ return flags;
+}
+
+/* In vliw mode, the default section is .vtext. We have to be able
+ to switch into .vtext using only the .vtext directive. */
+
+static segT
+mep_vtext_section (void)
+{
+ static segT vtext_section;
+
+ if (! vtext_section)
+ {
+ flagword applicable = bfd_applicable_section_flags (stdoutput);
+ vtext_section = subseg_new (VTEXT_SECTION_NAME, 0);
+ bfd_set_section_flags (stdoutput, vtext_section,
+ applicable & (SEC_ALLOC | SEC_LOAD | SEC_RELOC
+ | SEC_CODE | SEC_READONLY
+ | SEC_MEP_VLIW));
+ }
+
+ return vtext_section;
+}
+
+static void
+mep_s_vtext (int ignore ATTRIBUTE_UNUSED)
+{
+ int temp;
+
+ /* Record previous_section and previous_subsection. */
+ obj_elf_section_change_hook ();
+
+ temp = get_absolute_expression ();
+ subseg_set (mep_vtext_section (), (subsegT) temp);
+ demand_empty_rest_of_line ();
+}
+
+static void
+mep_switch_to_core_mode (int dummy ATTRIBUTE_UNUSED)
+{
+ mep_process_saved_insns ();
+ pluspresent = 0;
+ mode = CORE;
+}
+
+static void
+mep_switch_to_vliw_mode (int dummy ATTRIBUTE_UNUSED)
+{
+ if (! MEP_VLIW)
+ as_bad (_(".vliw unavailable when VLIW is disabled."));
+ mode = VLIW;
+ /* Switch into .vtext here too. */
+ /* mep_s_vtext(); */
+}
+
+/* This is an undocumented pseudo-op used to disable gas's
+ "disabled_registers" check. Used for code which checks for those
+ registers at runtime. */
+static void
+mep_noregerr (int i ATTRIBUTE_UNUSED)
+{
+ allow_disabled_registers = 1;
+}
+
+/* mep_unrecognized_line: This is called when a line that can't be parsed
+ is encountered. We use it to check for a leading '+' sign which indicates
+ that the current instruction is a coprocessor instruction that is to be
+ parallelized with a previous core insn. This function accepts the '+' and
+ rejects all other characters that might indicate garbage at the beginning
+ of the line. The '+' character gets lost as the calling loop continues,
+ so we need to indicate that we saw it. */
+
+int
+mep_unrecognized_line (int ch)
+{
+ switch (ch)
+ {
+ case '+':
+ pluspresent = 1;
+ return 1; /* '+' indicates an instruction to be parallelized. */
+ default:
+ return 0; /* If it's not a '+', the line can't be parsed. */
+ }
+}
+
+void
+mep_cleanup (void)
+{
+ /* Take care of any insns left to be parallelized when the file ends.
+ This is mainly here to handle the case where the file ends with an
+ insn preceeded by a + or the file ends unexpectedly. */
+ if (mode == VLIW)
+ mep_process_saved_insns ();
+}
+
+int
+mep_flush_pending_output (void)
+{
+ if (mode == VLIW)
+ {
+ mep_process_saved_insns ();
+ pluspresent = 0;
+ }
+
+ return 1;
+}
diff --git a/gas/config/tc-mep.h b/gas/config/tc-mep.h
new file mode 100644
index 000000000000..1d48bd4c9a4a
--- /dev/null
+++ b/gas/config/tc-mep.h
@@ -0,0 +1,119 @@
+/* tc-mep.h -- Header file for tc-mep.c.
+ Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to
+ the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#define TC_MEP
+
+/* Support computed relocations. */
+#define OBJ_COMPLEX_RELC
+
+/* Support many operands per instruction. */
+#define GAS_CGEN_MAX_FIXUPS 10
+
+#define LISTING_HEADER "MEP GAS "
+
+/* The target BFD architecture. */
+#define TARGET_ARCH bfd_arch_mep
+
+#define TARGET_FORMAT (target_big_endian ? "elf32-mep" : "elf32-mep-little")
+
+/* This is the default. */
+#define TARGET_BYTES_BIG_ENDIAN 1
+
+/* Permit temporary numeric labels. */
+#define LOCAL_LABELS_FB 1
+
+/* .-foo gets turned into PC relative relocs. */
+#define DIFF_EXPR_OK
+
+/* We don't need to handle .word strangely. */
+#define WORKING_DOT_WORD
+
+/* Values passed to md_apply_fix don't include the symbol value. */
+#define MD_APPLY_SYM_VALUE(FIX) 0
+
+#define MD_APPLY_FIX
+#define md_apply_fix mep_apply_fix
+extern void mep_apply_fix (struct fix *, valueT *, segT);
+
+/* Call md_pcrel_from_section(), not md_pcrel_from(). */
+#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section (FIXP, SEC)
+extern long md_pcrel_from_section (struct fix *, segT);
+
+#define tc_frob_file() mep_frob_file ()
+extern void mep_frob_file (void);
+
+#define tc_fix_adjustable(fixP) mep_fix_adjustable (fixP)
+extern bfd_boolean mep_fix_adjustable (struct fix *);
+
+/* After creating a fixup for an instruction operand, we need
+ to check for HI16 relocs and queue them up for later sorting. */
+#define md_cgen_record_fixup_exp mep_cgen_record_fixup_exp
+
+/* When relaxing, we need to emit various relocs we otherwise wouldn't. */
+#define TC_FORCE_RELOCATION(fix) mep_force_relocation (fix)
+extern int mep_force_relocation (struct fix *);
+
+#define tc_gen_reloc gas_cgen_tc_gen_reloc
+
+extern void gas_cgen_md_operand (expressionS *);
+#define md_operand(x) gas_cgen_md_operand (x)
+
+#define md_flush_pending_output() mep_flush_pending_output()
+extern int mep_flush_pending_output(void);
+
+extern const struct relax_type md_relax_table[];
+#define TC_GENERIC_RELAX_TABLE md_relax_table
+
+/* Account for inserting a jmp after the insn. */
+#define TC_CGEN_MAX_RELAX(insn, len) ((len) + 4)
+
+extern void mep_prepare_relax_scan (fragS *, offsetT *, relax_substateT);
+#define md_prepare_relax_scan(FRAGP, ADDR, AIM, STATE, TYPE) \
+ mep_prepare_relax_scan (FRAGP, &AIM, STATE)
+
+#define skip_whitespace(str) while (*(str) == ' ') ++(str)
+
+/* Support for core/vliw mode switching. */
+#define CORE 0
+#define VLIW 1
+#define MAX_PARALLEL_INSNS 56 /* From email from Toshiba. */
+#define VTEXT_SECTION_NAME ".vtext"
+
+/* Needed to process pending instructions when a label is encountered. */
+#define TC_START_LABEL(ch, ptr) ((ch == ':') && mep_flush_pending_output ())
+
+#define tc_unrecognized_line(c) mep_unrecognized_line (c)
+extern int mep_unrecognized_line (int);
+#define md_cleanup mep_cleanup
+extern void mep_cleanup (void);
+
+#define md_elf_section_letter mep_elf_section_letter
+extern int mep_elf_section_letter (int, char **);
+#define md_elf_section_flags mep_elf_section_flags
+extern flagword mep_elf_section_flags (flagword, int, int);
+
+#define ELF_TC_SPECIAL_SECTIONS \
+ { VTEXT_SECTION_NAME, SHT_PROGBITS, SHF_ALLOC|SHF_EXECINSTR|SHF_MEP_VLIW },
+
+/* The values of the following enum are for use with parinsnum, which
+ is a variable in md_assemble that keeps track of whether or not the
+ next instruction is expected to be the first or second instrucion in
+ a parallelization group. */
+typedef enum exp_par_insn_{FIRST, SECOND} EXP_PAR_INSN;
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index c885205dad47..c2867bec72b0 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -1,6 +1,6 @@
/* tc-mips.c -- assemble code for a MIPS chip.
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
Contributed by the OSF and Ralph Campbell.
Written by Keith Knowles and Ralph Campbell, working independently.
Modified for ECOFF and R4000 support by Ian Lance Taylor of Cygnus
@@ -28,8 +28,6 @@
#include "subsegs.h"
#include "safe-ctype.h"
-#include <stdarg.h>
-
#include "opcode/mips.h"
#include "itbl-ops.h"
#include "dwarf2dbg.h"
@@ -150,7 +148,7 @@ struct mips_cl_insn
/* True if this entry cannot be moved from its current position. */
unsigned int fixed_p : 1;
- /* True if this instruction occured in a .set noreorder block. */
+ /* True if this instruction occurred in a .set noreorder block. */
unsigned int noreorder_p : 1;
/* True for mips16 instructions that jump to an absolute address. */
@@ -193,7 +191,9 @@ struct mips_set_options
command line options, and based on the default architecture. */
int ase_mips3d;
int ase_mdmx;
+ int ase_smartmips;
int ase_dsp;
+ int ase_dspr2;
int ase_mt;
/* Whether we are assembling for the mips16 processor. 0 if we are
not, 1 if we are, and -1 if the value has not been initialized.
@@ -245,7 +245,7 @@ static int file_mips_fp32 = -1;
static struct mips_set_options mips_opts =
{
- ISA_UNKNOWN, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, CPU_UNKNOWN, FALSE
+ ISA_UNKNOWN, -1, -1, 0, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, CPU_UNKNOWN, FALSE
};
/* These variables are filled in with the masks of registers used.
@@ -261,6 +261,11 @@ static int file_mips_isa = ISA_UNKNOWN;
command line (e.g., by -march). */
static int file_ase_mips16;
+#define ISA_SUPPORTS_MIPS16E (mips_opts.isa == ISA_MIPS32 \
+ || mips_opts.isa == ISA_MIPS32R2 \
+ || mips_opts.isa == ISA_MIPS64 \
+ || mips_opts.isa == ISA_MIPS64R2)
+
/* True if -mips3d was passed or implied by arguments passed on the
command line (e.g., by -march). */
static int file_ase_mips3d;
@@ -269,14 +274,36 @@ static int file_ase_mips3d;
command line (e.g., by -march). */
static int file_ase_mdmx;
+/* True if -msmartmips was passed or implied by arguments passed on the
+ command line (e.g., by -march). */
+static int file_ase_smartmips;
+
+#define ISA_SUPPORTS_SMARTMIPS (mips_opts.isa == ISA_MIPS32 \
+ || mips_opts.isa == ISA_MIPS32R2)
+
/* True if -mdsp was passed or implied by arguments passed on the
command line (e.g., by -march). */
static int file_ase_dsp;
+#define ISA_SUPPORTS_DSP_ASE (mips_opts.isa == ISA_MIPS32R2 \
+ || mips_opts.isa == ISA_MIPS64R2)
+
+#define ISA_SUPPORTS_DSP64_ASE (mips_opts.isa == ISA_MIPS64R2)
+
+/* True if -mdspr2 was passed or implied by arguments passed on the
+ command line (e.g., by -march). */
+static int file_ase_dspr2;
+
+#define ISA_SUPPORTS_DSPR2_ASE (mips_opts.isa == ISA_MIPS32R2 \
+ || mips_opts.isa == ISA_MIPS64R2)
+
/* True if -mmt was passed or implied by arguments passed on the
command line (e.g., by -march). */
static int file_ase_mt;
+#define ISA_SUPPORTS_MT_ASE (mips_opts.isa == ISA_MIPS32R2 \
+ || mips_opts.isa == ISA_MIPS64R2)
+
/* The argument of the -march= flag. The architecture we are assembling. */
static int file_mips_arch = CPU_UNKNOWN;
static const char *mips_arch_string;
@@ -293,41 +320,61 @@ static int mips_32bitmode = 0;
#define ABI_NEEDS_32BIT_REGS(ABI) ((ABI) == O32_ABI)
/* Likewise 64-bit registers. */
-#define ABI_NEEDS_64BIT_REGS(ABI) \
- ((ABI) == N32_ABI \
- || (ABI) == N64_ABI \
+#define ABI_NEEDS_64BIT_REGS(ABI) \
+ ((ABI) == N32_ABI \
+ || (ABI) == N64_ABI \
|| (ABI) == O64_ABI)
-/* Return true if ISA supports 64 bit gp register instructions. */
-#define ISA_HAS_64BIT_REGS(ISA) ( \
- (ISA) == ISA_MIPS3 \
- || (ISA) == ISA_MIPS4 \
- || (ISA) == ISA_MIPS5 \
- || (ISA) == ISA_MIPS64 \
- || (ISA) == ISA_MIPS64R2 \
- )
+/* Return true if ISA supports 64 bit wide gp registers. */
+#define ISA_HAS_64BIT_REGS(ISA) \
+ ((ISA) == ISA_MIPS3 \
+ || (ISA) == ISA_MIPS4 \
+ || (ISA) == ISA_MIPS5 \
+ || (ISA) == ISA_MIPS64 \
+ || (ISA) == ISA_MIPS64R2)
+
+/* Return true if ISA supports 64 bit wide float registers. */
+#define ISA_HAS_64BIT_FPRS(ISA) \
+ ((ISA) == ISA_MIPS3 \
+ || (ISA) == ISA_MIPS4 \
+ || (ISA) == ISA_MIPS5 \
+ || (ISA) == ISA_MIPS32R2 \
+ || (ISA) == ISA_MIPS64 \
+ || (ISA) == ISA_MIPS64R2)
/* Return true if ISA supports 64-bit right rotate (dror et al.)
instructions. */
-#define ISA_HAS_DROR(ISA) ( \
- (ISA) == ISA_MIPS64R2 \
- )
+#define ISA_HAS_DROR(ISA) \
+ ((ISA) == ISA_MIPS64R2)
/* Return true if ISA supports 32-bit right rotate (ror et al.)
instructions. */
-#define ISA_HAS_ROR(ISA) ( \
- (ISA) == ISA_MIPS32R2 \
- || (ISA) == ISA_MIPS64R2 \
- )
+#define ISA_HAS_ROR(ISA) \
+ ((ISA) == ISA_MIPS32R2 \
+ || (ISA) == ISA_MIPS64R2 \
+ || mips_opts.ase_smartmips)
+
+/* Return true if ISA supports single-precision floats in odd registers. */
+#define ISA_HAS_ODD_SINGLE_FPR(ISA) \
+ ((ISA) == ISA_MIPS32 \
+ || (ISA) == ISA_MIPS32R2 \
+ || (ISA) == ISA_MIPS64 \
+ || (ISA) == ISA_MIPS64R2)
+
+/* Return true if ISA supports move to/from high part of a 64-bit
+ floating-point register. */
+#define ISA_HAS_MXHC1(ISA) \
+ ((ISA) == ISA_MIPS32R2 \
+ || (ISA) == ISA_MIPS64R2)
#define HAVE_32BIT_GPRS \
- (mips_opts.gp32 || ! ISA_HAS_64BIT_REGS (mips_opts.isa))
+ (mips_opts.gp32 || !ISA_HAS_64BIT_REGS (mips_opts.isa))
#define HAVE_32BIT_FPRS \
- (mips_opts.fp32 || ! ISA_HAS_64BIT_REGS (mips_opts.isa))
+ (mips_opts.fp32 || !ISA_HAS_64BIT_FPRS (mips_opts.isa))
-#define HAVE_64BIT_GPRS (! HAVE_32BIT_GPRS)
-#define HAVE_64BIT_FPRS (! HAVE_32BIT_FPRS)
+#define HAVE_64BIT_GPRS (!HAVE_32BIT_GPRS)
+#define HAVE_64BIT_FPRS (!HAVE_32BIT_FPRS)
#define HAVE_NEWABI (mips_abi == N32_ABI || mips_abi == N64_ABI)
@@ -367,22 +414,6 @@ static int mips_32bitmode = 0;
(strncmp (TARGET_CPU, "mips16", sizeof ("mips16") - 1) == 0 \
|| strncmp (TARGET_CANONICAL, "mips-lsi-elf", sizeof ("mips-lsi-elf") - 1) == 0)
-/* Return true if the given CPU supports the MIPS3D ASE. */
-#define CPU_HAS_MIPS3D(cpu) ((cpu) == CPU_SB1 \
- )
-
-/* Return true if the given CPU supports the MDMX ASE. */
-#define CPU_HAS_MDMX(cpu) (FALSE \
- )
-
-/* Return true if the given CPU supports the DSP ASE. */
-#define CPU_HAS_DSP(cpu) (FALSE \
- )
-
-/* Return true if the given CPU supports the MT ASE. */
-#define CPU_HAS_MT(cpu) (FALSE \
- )
-
/* True if CPU has a dror instruction. */
#define CPU_HAS_DROR(CPU) ((CPU) == CPU_VR5400 || (CPU) == CPU_VR5500)
@@ -476,7 +507,7 @@ static int mips_any_noreorder;
an mfhi/mflo instruction is read in the next two instructions. */
static int mips_7000_hilo_fix;
-/* The size of the small data section. */
+/* The size of objects in the small data section. */
static unsigned int g_switch_value = 8;
/* Whether the -G option was used. */
static int g_switch_seen = 0;
@@ -993,6 +1024,8 @@ static void s_cpsetup (int);
static void s_cplocal (int);
static void s_cprestore (int);
static void s_cpreturn (int);
+static void s_dtprelword (int);
+static void s_dtpreldword (int);
static void s_gpvalue (int);
static void s_gpword (int);
static void s_gpdword (int);
@@ -1018,11 +1051,19 @@ static int validate_mips_insn (const struct mips_opcode *);
struct mips_cpu_info
{
const char *name; /* CPU or ISA name. */
- int is_isa; /* Is this an ISA? (If 0, a CPU.) */
+ int flags; /* ASEs available, or ISA flag. */
int isa; /* ISA level. */
int cpu; /* CPU number (default CPU if ISA). */
};
+#define MIPS_CPU_IS_ISA 0x0001 /* Is this an ISA? (If 0, a CPU.) */
+#define MIPS_CPU_ASE_SMARTMIPS 0x0002 /* CPU implements SmartMIPS ASE */
+#define MIPS_CPU_ASE_DSP 0x0004 /* CPU implements DSP ASE */
+#define MIPS_CPU_ASE_MT 0x0008 /* CPU implements MT ASE */
+#define MIPS_CPU_ASE_MIPS3D 0x0010 /* CPU implements MIPS-3D ASE */
+#define MIPS_CPU_ASE_MDMX 0x0020 /* CPU implements MDMX ASE */
+#define MIPS_CPU_ASE_DSPR2 0x0040 /* CPU implements DSP R2 ASE */
+
static const struct mips_cpu_info *mips_parse_cpu (const char *, const char *);
static const struct mips_cpu_info *mips_cpu_info_from_isa (int);
static const struct mips_cpu_info *mips_cpu_info_from_arch (int);
@@ -1042,8 +1083,7 @@ static const struct mips_cpu_info *mips_cpu_info_from_arch (int);
The following pseudo-ops from the Kane and Heinrich MIPS book are
not MIPS CPU specific, but are also not specific to the object file
format. This file is probably the best place to define them, but
- they are not currently supported: .asm0, .endr, .lab, .repeat,
- .struct. */
+ they are not currently supported: .asm0, .endr, .lab, .struct. */
static const pseudo_typeS mips_pseudo_table[] =
{
@@ -1059,6 +1099,8 @@ static const pseudo_typeS mips_pseudo_table[] =
{"cplocal", s_cplocal, 0},
{"cprestore", s_cprestore, 0},
{"cpreturn", s_cpreturn, 0},
+ {"dtprelword", s_dtprelword, 0},
+ {"dtpreldword", s_dtpreldword, 0},
{"gpvalue", s_gpvalue, 0},
{"gpword", s_gpword, 0},
{"gpdword", s_gpdword, 0},
@@ -1073,6 +1115,8 @@ static const pseudo_typeS mips_pseudo_table[] =
{"half", s_cons, 1},
{"dword", s_cons, 3},
{"weakext", s_mips_weakext, 0},
+ {"origin", s_org, 0},
+ {"repeat", s_rept, 0},
/* These pseudo-ops are defined in read.c, but must be overridden
here for one reason or another. */
@@ -1136,8 +1180,8 @@ struct insn_label_list
symbolS *label;
};
-static struct insn_label_list *insn_labels;
static struct insn_label_list *free_insn_labels;
+#define label_list tc_segment_info_data
static void mips_clear_insn_labels (void);
@@ -1145,12 +1189,19 @@ static inline void
mips_clear_insn_labels (void)
{
register struct insn_label_list **pl;
+ segment_info_type *si;
- for (pl = &free_insn_labels; *pl != NULL; pl = &(*pl)->next)
- ;
- *pl = insn_labels;
- insn_labels = NULL;
+ if (now_seg)
+ {
+ for (pl = &free_insn_labels; *pl != NULL; pl = &(*pl)->next)
+ ;
+
+ si = seg_info (now_seg);
+ *pl = si->label_list;
+ si->label_list = NULL;
+ }
}
+
static char *expr_end;
@@ -1393,13 +1444,302 @@ init_vr4120_conflicts (void)
#undef CONFLICT
}
-/* This function is called once, at assembler startup time. It should
- set up all the tables, etc. that the MD part of the assembler will need. */
+struct regname {
+ const char *name;
+ unsigned int num;
+};
+
+#define RTYPE_MASK 0x1ff00
+#define RTYPE_NUM 0x00100
+#define RTYPE_FPU 0x00200
+#define RTYPE_FCC 0x00400
+#define RTYPE_VEC 0x00800
+#define RTYPE_GP 0x01000
+#define RTYPE_CP0 0x02000
+#define RTYPE_PC 0x04000
+#define RTYPE_ACC 0x08000
+#define RTYPE_CCC 0x10000
+#define RNUM_MASK 0x000ff
+#define RWARN 0x80000
+
+#define GENERIC_REGISTER_NUMBERS \
+ {"$0", RTYPE_NUM | 0}, \
+ {"$1", RTYPE_NUM | 1}, \
+ {"$2", RTYPE_NUM | 2}, \
+ {"$3", RTYPE_NUM | 3}, \
+ {"$4", RTYPE_NUM | 4}, \
+ {"$5", RTYPE_NUM | 5}, \
+ {"$6", RTYPE_NUM | 6}, \
+ {"$7", RTYPE_NUM | 7}, \
+ {"$8", RTYPE_NUM | 8}, \
+ {"$9", RTYPE_NUM | 9}, \
+ {"$10", RTYPE_NUM | 10}, \
+ {"$11", RTYPE_NUM | 11}, \
+ {"$12", RTYPE_NUM | 12}, \
+ {"$13", RTYPE_NUM | 13}, \
+ {"$14", RTYPE_NUM | 14}, \
+ {"$15", RTYPE_NUM | 15}, \
+ {"$16", RTYPE_NUM | 16}, \
+ {"$17", RTYPE_NUM | 17}, \
+ {"$18", RTYPE_NUM | 18}, \
+ {"$19", RTYPE_NUM | 19}, \
+ {"$20", RTYPE_NUM | 20}, \
+ {"$21", RTYPE_NUM | 21}, \
+ {"$22", RTYPE_NUM | 22}, \
+ {"$23", RTYPE_NUM | 23}, \
+ {"$24", RTYPE_NUM | 24}, \
+ {"$25", RTYPE_NUM | 25}, \
+ {"$26", RTYPE_NUM | 26}, \
+ {"$27", RTYPE_NUM | 27}, \
+ {"$28", RTYPE_NUM | 28}, \
+ {"$29", RTYPE_NUM | 29}, \
+ {"$30", RTYPE_NUM | 30}, \
+ {"$31", RTYPE_NUM | 31}
+
+#define FPU_REGISTER_NAMES \
+ {"$f0", RTYPE_FPU | 0}, \
+ {"$f1", RTYPE_FPU | 1}, \
+ {"$f2", RTYPE_FPU | 2}, \
+ {"$f3", RTYPE_FPU | 3}, \
+ {"$f4", RTYPE_FPU | 4}, \
+ {"$f5", RTYPE_FPU | 5}, \
+ {"$f6", RTYPE_FPU | 6}, \
+ {"$f7", RTYPE_FPU | 7}, \
+ {"$f8", RTYPE_FPU | 8}, \
+ {"$f9", RTYPE_FPU | 9}, \
+ {"$f10", RTYPE_FPU | 10}, \
+ {"$f11", RTYPE_FPU | 11}, \
+ {"$f12", RTYPE_FPU | 12}, \
+ {"$f13", RTYPE_FPU | 13}, \
+ {"$f14", RTYPE_FPU | 14}, \
+ {"$f15", RTYPE_FPU | 15}, \
+ {"$f16", RTYPE_FPU | 16}, \
+ {"$f17", RTYPE_FPU | 17}, \
+ {"$f18", RTYPE_FPU | 18}, \
+ {"$f19", RTYPE_FPU | 19}, \
+ {"$f20", RTYPE_FPU | 20}, \
+ {"$f21", RTYPE_FPU | 21}, \
+ {"$f22", RTYPE_FPU | 22}, \
+ {"$f23", RTYPE_FPU | 23}, \
+ {"$f24", RTYPE_FPU | 24}, \
+ {"$f25", RTYPE_FPU | 25}, \
+ {"$f26", RTYPE_FPU | 26}, \
+ {"$f27", RTYPE_FPU | 27}, \
+ {"$f28", RTYPE_FPU | 28}, \
+ {"$f29", RTYPE_FPU | 29}, \
+ {"$f30", RTYPE_FPU | 30}, \
+ {"$f31", RTYPE_FPU | 31}
+
+#define FPU_CONDITION_CODE_NAMES \
+ {"$fcc0", RTYPE_FCC | 0}, \
+ {"$fcc1", RTYPE_FCC | 1}, \
+ {"$fcc2", RTYPE_FCC | 2}, \
+ {"$fcc3", RTYPE_FCC | 3}, \
+ {"$fcc4", RTYPE_FCC | 4}, \
+ {"$fcc5", RTYPE_FCC | 5}, \
+ {"$fcc6", RTYPE_FCC | 6}, \
+ {"$fcc7", RTYPE_FCC | 7}
+
+#define COPROC_CONDITION_CODE_NAMES \
+ {"$cc0", RTYPE_FCC | RTYPE_CCC | 0}, \
+ {"$cc1", RTYPE_FCC | RTYPE_CCC | 1}, \
+ {"$cc2", RTYPE_FCC | RTYPE_CCC | 2}, \
+ {"$cc3", RTYPE_FCC | RTYPE_CCC | 3}, \
+ {"$cc4", RTYPE_FCC | RTYPE_CCC | 4}, \
+ {"$cc5", RTYPE_FCC | RTYPE_CCC | 5}, \
+ {"$cc6", RTYPE_FCC | RTYPE_CCC | 6}, \
+ {"$cc7", RTYPE_FCC | RTYPE_CCC | 7}
+
+#define N32N64_SYMBOLIC_REGISTER_NAMES \
+ {"$a4", RTYPE_GP | 8}, \
+ {"$a5", RTYPE_GP | 9}, \
+ {"$a6", RTYPE_GP | 10}, \
+ {"$a7", RTYPE_GP | 11}, \
+ {"$ta0", RTYPE_GP | 8}, /* alias for $a4 */ \
+ {"$ta1", RTYPE_GP | 9}, /* alias for $a5 */ \
+ {"$ta2", RTYPE_GP | 10}, /* alias for $a6 */ \
+ {"$ta3", RTYPE_GP | 11}, /* alias for $a7 */ \
+ {"$t0", RTYPE_GP | 12}, \
+ {"$t1", RTYPE_GP | 13}, \
+ {"$t2", RTYPE_GP | 14}, \
+ {"$t3", RTYPE_GP | 15}
+
+#define O32_SYMBOLIC_REGISTER_NAMES \
+ {"$t0", RTYPE_GP | 8}, \
+ {"$t1", RTYPE_GP | 9}, \
+ {"$t2", RTYPE_GP | 10}, \
+ {"$t3", RTYPE_GP | 11}, \
+ {"$t4", RTYPE_GP | 12}, \
+ {"$t5", RTYPE_GP | 13}, \
+ {"$t6", RTYPE_GP | 14}, \
+ {"$t7", RTYPE_GP | 15}, \
+ {"$ta0", RTYPE_GP | 12}, /* alias for $t4 */ \
+ {"$ta1", RTYPE_GP | 13}, /* alias for $t5 */ \
+ {"$ta2", RTYPE_GP | 14}, /* alias for $t6 */ \
+ {"$ta3", RTYPE_GP | 15} /* alias for $t7 */
+
+/* Remaining symbolic register names */
+#define SYMBOLIC_REGISTER_NAMES \
+ {"$zero", RTYPE_GP | 0}, \
+ {"$at", RTYPE_GP | 1}, \
+ {"$AT", RTYPE_GP | 1}, \
+ {"$v0", RTYPE_GP | 2}, \
+ {"$v1", RTYPE_GP | 3}, \
+ {"$a0", RTYPE_GP | 4}, \
+ {"$a1", RTYPE_GP | 5}, \
+ {"$a2", RTYPE_GP | 6}, \
+ {"$a3", RTYPE_GP | 7}, \
+ {"$s0", RTYPE_GP | 16}, \
+ {"$s1", RTYPE_GP | 17}, \
+ {"$s2", RTYPE_GP | 18}, \
+ {"$s3", RTYPE_GP | 19}, \
+ {"$s4", RTYPE_GP | 20}, \
+ {"$s5", RTYPE_GP | 21}, \
+ {"$s6", RTYPE_GP | 22}, \
+ {"$s7", RTYPE_GP | 23}, \
+ {"$t8", RTYPE_GP | 24}, \
+ {"$t9", RTYPE_GP | 25}, \
+ {"$k0", RTYPE_GP | 26}, \
+ {"$kt0", RTYPE_GP | 26}, \
+ {"$k1", RTYPE_GP | 27}, \
+ {"$kt1", RTYPE_GP | 27}, \
+ {"$gp", RTYPE_GP | 28}, \
+ {"$sp", RTYPE_GP | 29}, \
+ {"$s8", RTYPE_GP | 30}, \
+ {"$fp", RTYPE_GP | 30}, \
+ {"$ra", RTYPE_GP | 31}
+
+#define MIPS16_SPECIAL_REGISTER_NAMES \
+ {"$pc", RTYPE_PC | 0}
+
+#define MDMX_VECTOR_REGISTER_NAMES \
+ /* {"$v0", RTYPE_VEC | 0}, clash with REG 2 above */ \
+ /* {"$v1", RTYPE_VEC | 1}, clash with REG 3 above */ \
+ {"$v2", RTYPE_VEC | 2}, \
+ {"$v3", RTYPE_VEC | 3}, \
+ {"$v4", RTYPE_VEC | 4}, \
+ {"$v5", RTYPE_VEC | 5}, \
+ {"$v6", RTYPE_VEC | 6}, \
+ {"$v7", RTYPE_VEC | 7}, \
+ {"$v8", RTYPE_VEC | 8}, \
+ {"$v9", RTYPE_VEC | 9}, \
+ {"$v10", RTYPE_VEC | 10}, \
+ {"$v11", RTYPE_VEC | 11}, \
+ {"$v12", RTYPE_VEC | 12}, \
+ {"$v13", RTYPE_VEC | 13}, \
+ {"$v14", RTYPE_VEC | 14}, \
+ {"$v15", RTYPE_VEC | 15}, \
+ {"$v16", RTYPE_VEC | 16}, \
+ {"$v17", RTYPE_VEC | 17}, \
+ {"$v18", RTYPE_VEC | 18}, \
+ {"$v19", RTYPE_VEC | 19}, \
+ {"$v20", RTYPE_VEC | 20}, \
+ {"$v21", RTYPE_VEC | 21}, \
+ {"$v22", RTYPE_VEC | 22}, \
+ {"$v23", RTYPE_VEC | 23}, \
+ {"$v24", RTYPE_VEC | 24}, \
+ {"$v25", RTYPE_VEC | 25}, \
+ {"$v26", RTYPE_VEC | 26}, \
+ {"$v27", RTYPE_VEC | 27}, \
+ {"$v28", RTYPE_VEC | 28}, \
+ {"$v29", RTYPE_VEC | 29}, \
+ {"$v30", RTYPE_VEC | 30}, \
+ {"$v31", RTYPE_VEC | 31}
+
+#define MIPS_DSP_ACCUMULATOR_NAMES \
+ {"$ac0", RTYPE_ACC | 0}, \
+ {"$ac1", RTYPE_ACC | 1}, \
+ {"$ac2", RTYPE_ACC | 2}, \
+ {"$ac3", RTYPE_ACC | 3}
+
+static const struct regname reg_names[] = {
+ GENERIC_REGISTER_NUMBERS,
+ FPU_REGISTER_NAMES,
+ FPU_CONDITION_CODE_NAMES,
+ COPROC_CONDITION_CODE_NAMES,
+
+ /* The $txx registers depends on the abi,
+ these will be added later into the symbol table from
+ one of the tables below once mips_abi is set after
+ parsing of arguments from the command line. */
+ SYMBOLIC_REGISTER_NAMES,
+
+ MIPS16_SPECIAL_REGISTER_NAMES,
+ MDMX_VECTOR_REGISTER_NAMES,
+ MIPS_DSP_ACCUMULATOR_NAMES,
+ {0, 0}
+};
+
+static const struct regname reg_names_o32[] = {
+ O32_SYMBOLIC_REGISTER_NAMES,
+ {0, 0}
+};
+
+static const struct regname reg_names_n32n64[] = {
+ N32N64_SYMBOLIC_REGISTER_NAMES,
+ {0, 0}
+};
+
+static int
+reg_lookup (char **s, unsigned int types, unsigned int *regnop)
+{
+ symbolS *symbolP;
+ char *e;
+ char save_c;
+ int reg = -1;
+
+ /* Find end of name. */
+ e = *s;
+ if (is_name_beginner (*e))
+ ++e;
+ while (is_part_of_name (*e))
+ ++e;
+
+ /* Terminate name. */
+ save_c = *e;
+ *e = '\0';
+
+ /* Look for a register symbol. */
+ if ((symbolP = symbol_find (*s)) && S_GET_SEGMENT (symbolP) == reg_section)
+ {
+ int r = S_GET_VALUE (symbolP);
+ if (r & types)
+ reg = r & RNUM_MASK;
+ else if ((types & RTYPE_VEC) && (r & ~1) == (RTYPE_GP | 2))
+ /* Convert GP reg $v0/1 to MDMX reg $v0/1! */
+ reg = (r & RNUM_MASK) - 2;
+ }
+ /* Else see if this is a register defined in an itbl entry. */
+ else if ((types & RTYPE_GP) && itbl_have_entries)
+ {
+ char *n = *s;
+ unsigned long r;
+
+ if (*n == '$')
+ ++n;
+ if (itbl_get_reg_val (n, &r))
+ reg = r & RNUM_MASK;
+ }
+
+ /* Advance to next token if a register was recognised. */
+ if (reg >= 0)
+ *s = e;
+ else if (types & RWARN)
+ as_warn ("Unrecognized register name `%s'", *s);
+
+ *e = save_c;
+ if (regnop)
+ *regnop = reg;
+ return reg >= 0;
+}
+
+/* This function is called once, at assembler startup time. It should set up
+ all the tables, etc. that the MD part of the assembler will need. */
void
md_begin (void)
{
- register const char *retval = NULL;
+ const char *retval = NULL;
int i = 0;
int broken = 0;
@@ -1481,46 +1821,20 @@ md_begin (void)
/* We add all the general register names to the symbol table. This
helps us detect invalid uses of them. */
- for (i = 0; i < 32; i++)
- {
- char buf[5];
-
- sprintf (buf, "$%d", i);
- symbol_table_insert (symbol_new (buf, reg_section, i,
+ for (i = 0; reg_names[i].name; i++)
+ symbol_table_insert (symbol_new (reg_names[i].name, reg_section,
+ reg_names[i].num, // & RNUM_MASK,
+ &zero_address_frag));
+ if (HAVE_NEWABI)
+ for (i = 0; reg_names_n32n64[i].name; i++)
+ symbol_table_insert (symbol_new (reg_names_n32n64[i].name, reg_section,
+ reg_names_n32n64[i].num, // & RNUM_MASK,
&zero_address_frag));
- }
- symbol_table_insert (symbol_new ("$ra", reg_section, RA,
- &zero_address_frag));
- symbol_table_insert (symbol_new ("$fp", reg_section, FP,
- &zero_address_frag));
- symbol_table_insert (symbol_new ("$sp", reg_section, SP,
- &zero_address_frag));
- symbol_table_insert (symbol_new ("$gp", reg_section, GP,
- &zero_address_frag));
- symbol_table_insert (symbol_new ("$at", reg_section, AT,
- &zero_address_frag));
- symbol_table_insert (symbol_new ("$kt0", reg_section, KT0,
- &zero_address_frag));
- symbol_table_insert (symbol_new ("$kt1", reg_section, KT1,
- &zero_address_frag));
- symbol_table_insert (symbol_new ("$zero", reg_section, ZERO,
- &zero_address_frag));
- symbol_table_insert (symbol_new ("$pc", reg_section, -1,
- &zero_address_frag));
-
- /* If we don't add these register names to the symbol table, they
- may end up being added as regular symbols by operand(), and then
- make it to the object file as undefined in case they're not
- regarded as local symbols. They're local in o32, since `$' is a
- local symbol prefix, but not in n32 or n64. */
- for (i = 0; i < 8; i++)
- {
- char buf[6];
-
- sprintf (buf, "$fcc%i", i);
- symbol_table_insert (symbol_new (buf, reg_section, -1,
+ else
+ for (i = 0; reg_names_o32[i].name; i++)
+ symbol_table_insert (symbol_new (reg_names_o32[i].name, reg_section,
+ reg_names_o32[i].num, // & RNUM_MASK,
&zero_address_frag));
- }
mips_no_prev_insn ();
@@ -1535,7 +1849,8 @@ md_begin (void)
bfd_set_gp_size (stdoutput, g_switch_value);
- if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
+#ifdef OBJ_ELF
+ if (IS_ELF)
{
/* On a native system other than VxWorks, sections must be aligned
to 16 byte boundaries. When configured for an embedded ELF
@@ -1573,9 +1888,7 @@ md_begin (void)
bfd_set_section_flags (stdoutput, sec, flags);
bfd_set_section_alignment (stdoutput, sec, HAVE_NEWABI ? 3 : 2);
-#ifdef OBJ_ELF
mips_regmask_frag = frag_more (sizeof (Elf32_External_RegInfo));
-#endif
}
else
{
@@ -1585,7 +1898,6 @@ md_begin (void)
bfd_set_section_flags (stdoutput, sec, flags);
bfd_set_section_alignment (stdoutput, sec, 3);
-#ifdef OBJ_ELF
/* Set up the option header. */
{
Elf_Internal_Options opthdr;
@@ -1602,7 +1914,6 @@ md_begin (void)
mips_regmask_frag = frag_more (sizeof (Elf64_External_RegInfo));
}
-#endif
}
if (ECOFF_DEBUGGING)
@@ -1612,8 +1923,7 @@ md_begin (void)
SEC_HAS_CONTENTS | SEC_READONLY);
(void) bfd_set_section_alignment (stdoutput, sec, 2);
}
-#ifdef OBJ_ELF
- else if (OUTPUT_FLAVOR == bfd_target_elf_flavour && mips_flag_pdr)
+ else if (mips_flag_pdr)
{
pdr_seg = subseg_new (".pdr", (subsegT) 0);
(void) bfd_set_section_flags (stdoutput, pdr_seg,
@@ -1621,11 +1931,11 @@ md_begin (void)
| SEC_DEBUGGING);
(void) bfd_set_section_alignment (stdoutput, pdr_seg, 2);
}
-#endif
subseg_set (seg, subseg);
}
}
+#endif /* OBJ_ELF */
if (! ECOFF_DEBUGGING)
md_obj_begin ();
@@ -1824,10 +2134,11 @@ reg_needs_delay (unsigned int reg)
static void
mips_move_labels (void)
{
+ segment_info_type *si = seg_info (now_seg);
struct insn_label_list *l;
valueT val;
- for (l = insn_labels; l != NULL; l = l->next)
+ for (l = si->label_list; l != NULL; l = l->next)
{
assert (S_GET_SEGMENT (l->label) == now_seg);
symbol_set_frag (l->label, frag_now);
@@ -1839,6 +2150,28 @@ mips_move_labels (void)
}
}
+static bfd_boolean
+s_is_linkonce (symbolS *sym, segT from_seg)
+{
+ bfd_boolean linkonce = FALSE;
+ segT symseg = S_GET_SEGMENT (sym);
+
+ if (symseg != from_seg && !S_IS_LOCAL (sym))
+ {
+ if ((bfd_get_section_flags (stdoutput, symseg) & SEC_LINK_ONCE))
+ linkonce = TRUE;
+#ifdef OBJ_ELF
+ /* The GNU toolchain uses an extension for ELF: a section
+ beginning with the magic string .gnu.linkonce is a
+ linkonce section. */
+ if (strncmp (segment_name (symseg), ".gnu.linkonce",
+ sizeof ".gnu.linkonce" - 1) == 0)
+ linkonce = TRUE;
+#endif
+ }
+ return linkonce;
+}
+
/* Mark instruction labels in mips16 mode. This permits the linker to
handle them specially, such as generating jalx instructions when
needed. We also make them odd for the duration of the assembly, in
@@ -1850,21 +2183,29 @@ mips_move_labels (void)
static void
mips16_mark_labels (void)
{
- if (mips_opts.mips16)
- {
- struct insn_label_list *l;
- valueT val;
+ segment_info_type *si = seg_info (now_seg);
+ struct insn_label_list *l;
- for (l = insn_labels; l != NULL; l = l->next)
- {
-#ifdef OBJ_ELF
- if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
- S_SET_OTHER (l->label, STO_MIPS16);
+ if (!mips_opts.mips16)
+ return;
+
+ for (l = si->label_list; l != NULL; l = l->next)
+ {
+ symbolS *label = l->label;
+
+#if defined(OBJ_ELF) || defined(OBJ_MAYBE_ELF)
+ if (IS_ELF)
+ S_SET_OTHER (label, STO_MIPS16);
#endif
- val = S_GET_VALUE (l->label);
- if ((val & 1) == 0)
- S_SET_VALUE (l->label, val + 1);
- }
+ if ((S_GET_VALUE (label) & 1) == 0
+ /* Don't adjust the address if the label is global or weak, or
+ in a link-once section, since we'll be emitting symbol reloc
+ references to it which will be patched up by the linker, and
+ the final value of the symbol may or may not be MIPS16. */
+ && ! S_IS_WEAK (label)
+ && ! S_IS_EXTERNAL (label)
+ && ! s_is_linkonce (label, now_seg))
+ S_SET_VALUE (label, S_GET_VALUE (label) | 1);
}
}
@@ -2189,9 +2530,10 @@ static void
append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
bfd_reloc_code_real_type *reloc_type)
{
- register unsigned long prev_pinfo, pinfo;
+ unsigned long prev_pinfo, pinfo;
relax_stateT prev_insn_frag_type = 0;
bfd_boolean relaxed_branch = FALSE;
+ segment_info_type *si = seg_info (now_seg);
/* Mark instruction labels in mips16 mode. */
mips16_mark_labels ();
@@ -2454,6 +2796,11 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
reloc_type[0] == BFD_RELOC_16_PCREL_S2,
reloc_type[0]);
+ /* Tag symbols that have a R_MIPS16_26 relocation against them. */
+ if (reloc_type[0] == BFD_RELOC_MIPS16_JMP
+ && ip->fixp[0]->fx_addsy)
+ *symbol_get_tc (ip->fixp[0]->fx_addsy) = 1;
+
/* These relocations can have an addend that won't fit in
4 octets for 64bit assembly. */
if (HAVE_64BIT_GPRS
@@ -2608,7 +2955,7 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
whether there is a label on this instruction. If
there are any branches to anything other than a
label, users must use .set noreorder. */
- || insn_labels != NULL
+ || si->label_list != NULL
/* If the previous instruction is in a variant frag
other than this branch's one, we cannot do the swap.
This does not apply to the mips16, which uses variant
@@ -2715,10 +3062,7 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
if (mips_opts.mips16
&& (pinfo & INSN_UNCOND_BRANCH_DELAY)
&& (pinfo & (MIPS16_INSN_READ_X | MIPS16_INSN_READ_31))
- && (mips_opts.isa == ISA_MIPS32
- || mips_opts.isa == ISA_MIPS32R2
- || mips_opts.isa == ISA_MIPS64
- || mips_opts.isa == ISA_MIPS64R2))
+ && ISA_SUPPORTS_MIPS16E)
{
/* Convert MIPS16 jr/jalr into a "compact" jump. */
ip->insn_opcode |= 0x0080;
@@ -3000,16 +3344,24 @@ macro_build (expressionS *ep, const char *name, const char *fmt, ...)
assert (mo);
assert (strcmp (name, mo->name) == 0);
- /* Search until we get a match for NAME. It is assumed here that
- macros will never generate MDMX or MIPS-3D instructions. */
- while (strcmp (fmt, mo->args) != 0
- || mo->pinfo == INSN_MACRO
- || !OPCODE_IS_MEMBER (mo,
+ while (1)
+ {
+ /* Search until we get a match for NAME. It is assumed here that
+ macros will never generate MDMX, MIPS-3D, or MT instructions. */
+ if (strcmp (fmt, mo->args) == 0
+ && mo->pinfo != INSN_MACRO
+ && OPCODE_IS_MEMBER (mo,
(mips_opts.isa
- | (file_ase_mips16 ? INSN_MIPS16 : 0)),
+ | (mips_opts.mips16 ? INSN_MIPS16 : 0)
+ | (mips_opts.ase_dsp ? INSN_DSP : 0)
+ | ((mips_opts.ase_dsp && ISA_SUPPORTS_DSP64_ASE)
+ ? INSN_DSP64 : 0)
+ | (mips_opts.ase_dspr2 ? INSN_DSPR2 : 0)
+ | (mips_opts.ase_smartmips ? INSN_SMARTMIPS : 0)),
mips_opts.arch)
- || (mips_opts.arch == CPU_R4650 && (mo->pinfo & FP_D) != 0))
- {
+ && (mips_opts.arch != CPU_R4650 || (mo->pinfo & FP_D) == 0))
+ break;
+
++mo;
assert (mo->name);
assert (strcmp (name, mo->name) == 0);
@@ -3060,6 +3412,10 @@ macro_build (expressionS *ep, const char *name, const char *fmt, ...)
}
continue;
+ case '2':
+ INSERT_OPERAND (BP, insn, va_arg (args, int));
+ continue;
+
case 't':
case 'w':
case 'E':
@@ -3187,7 +3543,11 @@ macro_build (expressionS *ep, const char *name, const char *fmt, ...)
continue;
case 'C':
- insn.insn_opcode |= va_arg (args, unsigned long);
+ INSERT_OPERAND (COPZ, insn, va_arg (args, unsigned long));
+ continue;
+
+ case 'k':
+ INSERT_OPERAND (CACHE, insn, va_arg (args, unsigned long));
continue;
default:
@@ -3271,7 +3631,7 @@ mips16_macro_build (expressionS *ep, const char *name, const char *fmt,
regno = va_arg (args, int);
regno = ((regno & 7) << 2) | ((regno & 0x18) >> 3);
- insn.insn_opcode |= regno << MIPS16OP_SH_REG32R;
+ MIPS16_INSERT_OPERAND (REG32R, insn, regno);
}
continue;
@@ -3387,7 +3747,7 @@ macro_build_lui (expressionS *ep, int regnum)
if (high_expr.X_op == O_constant)
{
- /* we can compute the instruction now without a relocation entry */
+ /* We can compute the instruction now without a relocation entry. */
high_expr.X_add_number = ((high_expr.X_add_number + 0x8000)
>> 16) & 0xffff;
*r = BFD_RELOC_UNUSED;
@@ -4164,7 +4524,7 @@ add_got_offset_hilo (int dest, expressionS *local, int tmp)
static void
macro (struct mips_cl_insn *ip)
{
- register int treg, sreg, dreg, breg;
+ int treg, sreg, dreg, breg;
int tempreg;
int mask;
int used_at = 0;
@@ -4284,6 +4644,22 @@ macro (struct mips_cl_insn *ip)
macro_build (NULL, s2, "d,v,t", treg, sreg, AT);
break;
+ case M_BALIGN:
+ switch (imm_expr.X_add_number)
+ {
+ case 0:
+ macro_build (NULL, "nop", "");
+ break;
+ case 2:
+ macro_build (NULL, "packrl.ph", "d,s,t", treg, treg, sreg);
+ break;
+ default:
+ macro_build (NULL, "balign", "t,s,2", treg, sreg,
+ (int)imm_expr.X_add_number);
+ break;
+ }
+ break;
+
case M_BEQ_I:
s = "beq";
goto beq_i;
@@ -5814,6 +6190,9 @@ macro (struct mips_cl_insn *ip)
case M_SCD_AB:
s = "scd";
goto st;
+ case M_CACHE_AB:
+ s = "cache";
+ goto st;
case M_SDC1_AB:
if (mips_opts.arch == CPU_R4650)
{
@@ -5851,6 +6230,8 @@ macro (struct mips_cl_insn *ip)
|| mask == M_L_DAB
|| mask == M_S_DAB)
fmt = "T,o(b)";
+ else if (mask == M_CACHE_AB)
+ fmt = "k,o(b)";
else if (coproc)
fmt = "E,o(b)";
else
@@ -6763,7 +7144,7 @@ macro (struct mips_cl_insn *ip)
static void
macro2 (struct mips_cl_insn *ip)
{
- register int treg, sreg, dreg, breg;
+ int treg, sreg, dreg, breg;
int tempreg;
int mask;
int used_at;
@@ -7808,6 +8189,10 @@ validate_mips_insn (const struct mips_opcode *opc)
case '+':
switch (c = *p++)
{
+ case '1': USE_BITS (OP_MASK_UDI1, OP_SH_UDI1); break;
+ case '2': USE_BITS (OP_MASK_UDI2, OP_SH_UDI2); break;
+ case '3': USE_BITS (OP_MASK_UDI3, OP_SH_UDI3); break;
+ case '4': USE_BITS (OP_MASK_UDI4, OP_SH_UDI4); break;
case 'A': USE_BITS (OP_MASK_SHAMT, OP_SH_SHAMT); break;
case 'B': USE_BITS (OP_MASK_INSMSB, OP_SH_INSMSB); break;
case 'C': USE_BITS (OP_MASK_EXTMSBD, OP_SH_EXTMSBD); break;
@@ -7882,6 +8267,7 @@ validate_mips_insn (const struct mips_opcode *opc)
case '%': USE_BITS (OP_MASK_VECALIGN, OP_SH_VECALIGN); break;
case '[': break;
case ']': break;
+ case '2': USE_BITS (OP_MASK_BP, OP_SH_BP); break;
case '3': USE_BITS (OP_MASK_SA3, OP_SH_SA3); break;
case '4': USE_BITS (OP_MASK_SA4, OP_SH_SA4); break;
case '5': USE_BITS (OP_MASK_IMM8, OP_SH_IMM8); break;
@@ -7913,6 +8299,62 @@ validate_mips_insn (const struct mips_opcode *opc)
return 1;
}
+/* UDI immediates. */
+struct mips_immed {
+ char type;
+ unsigned int shift;
+ unsigned long mask;
+ const char * desc;
+};
+
+static const struct mips_immed mips_immed[] = {
+ { '1', OP_SH_UDI1, OP_MASK_UDI1, 0},
+ { '2', OP_SH_UDI2, OP_MASK_UDI2, 0},
+ { '3', OP_SH_UDI3, OP_MASK_UDI3, 0},
+ { '4', OP_SH_UDI4, OP_MASK_UDI4, 0},
+ { 0,0,0,0 }
+};
+
+/* Check whether an odd floating-point register is allowed. */
+static int
+mips_oddfpreg_ok (const struct mips_opcode *insn, int argnum)
+{
+ const char *s = insn->name;
+
+ if (insn->pinfo == INSN_MACRO)
+ /* Let a macro pass, we'll catch it later when it is expanded. */
+ return 1;
+
+ if (ISA_HAS_ODD_SINGLE_FPR (mips_opts.isa))
+ {
+ /* Allow odd registers for single-precision ops. */
+ switch (insn->pinfo & (FP_S | FP_D))
+ {
+ case FP_S:
+ case 0:
+ return 1; /* both single precision - ok */
+ case FP_D:
+ return 0; /* both double precision - fail */
+ default:
+ break;
+ }
+
+ /* Cvt.w.x and cvt.x.w allow an odd register for a 'w' or 's' operand. */
+ s = strchr (insn->name, '.');
+ if (argnum == 2)
+ s = s != NULL ? strchr (s + 1, '.') : NULL;
+ return (s != NULL && (s[1] == 'w' || s[1] == 's'));
+ }
+
+ /* Single-precision coprocessor loads and moves are OK too. */
+ if ((insn->pinfo & FP_S)
+ && (insn->pinfo & (INSN_COPROC_MEMORY_DELAY | INSN_STORE_MEMORY
+ | INSN_LOAD_COPROC_DELAY | INSN_COPROC_MOVE_DELAY)))
+ return 1;
+
+ return 0;
+}
+
/* This routine assembles an instruction into its binary format. As a
side effect, it sets one of the global variables imm_reloc or
offset_reloc to the type of relocation to do if one of the operands
@@ -7933,6 +8375,8 @@ mips_ip (char *str, struct mips_cl_insn *ip)
char *s_reset;
char save_c = 0;
offsetT min_range, max_range;
+ int argnum;
+ unsigned int rtype;
insn_error = NULL;
@@ -7993,11 +8437,18 @@ mips_ip (char *str, struct mips_cl_insn *ip)
if (OPCODE_IS_MEMBER (insn,
(mips_opts.isa
+ /* We don't check for mips_opts.mips16 here since
+ we want to allow jalx if -mips16 was specified
+ on the command line. */
| (file_ase_mips16 ? INSN_MIPS16 : 0)
| (mips_opts.ase_mdmx ? INSN_MDMX : 0)
| (mips_opts.ase_dsp ? INSN_DSP : 0)
+ | ((mips_opts.ase_dsp && ISA_SUPPORTS_DSP64_ASE)
+ ? INSN_DSP64 : 0)
+ | (mips_opts.ase_dspr2 ? INSN_DSPR2 : 0)
| (mips_opts.ase_mt ? INSN_MT : 0)
- | (mips_opts.ase_mips3d ? INSN_MIPS3D : 0)),
+ | (mips_opts.ase_mips3d ? INSN_MIPS3D : 0)
+ | (mips_opts.ase_smartmips ? INSN_SMARTMIPS : 0)),
mips_opts.arch))
ok = TRUE;
else
@@ -8036,6 +8487,7 @@ mips_ip (char *str, struct mips_cl_insn *ip)
create_insn (ip, insn);
insn_error = NULL;
+ argnum = 1;
for (args = insn->args;; ++args)
{
int is_mdmx;
@@ -8049,16 +8501,29 @@ mips_ip (char *str, struct mips_cl_insn *ip)
return;
break;
+ case '2': /* dsp 2-bit unsigned immediate in bit 11 */
+ my_getExpression (&imm_expr, s);
+ check_absolute_expr (ip, &imm_expr);
+ if ((unsigned long) imm_expr.X_add_number != 1
+ && (unsigned long) imm_expr.X_add_number != 3)
+ {
+ as_bad (_("BALIGN immediate not 1 or 3 (%lu)"),
+ (unsigned long) imm_expr.X_add_number);
+ }
+ INSERT_OPERAND (BP, *ip, imm_expr.X_add_number);
+ imm_expr.X_op = O_absent;
+ s = expr_end;
+ continue;
+
case '3': /* dsp 3-bit unsigned immediate in bit 21 */
my_getExpression (&imm_expr, s);
check_absolute_expr (ip, &imm_expr);
if (imm_expr.X_add_number & ~OP_MASK_SA3)
{
- as_warn (_("DSP immediate not in range 0..%d (%lu)"),
- OP_MASK_SA3, (unsigned long) imm_expr.X_add_number);
- imm_expr.X_add_number &= OP_MASK_SA3;
+ as_bad (_("DSP immediate not in range 0..%d (%lu)"),
+ OP_MASK_SA3, (unsigned long) imm_expr.X_add_number);
}
- ip->insn_opcode |= imm_expr.X_add_number << OP_SH_SA3;
+ INSERT_OPERAND (SA3, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
@@ -8068,11 +8533,10 @@ mips_ip (char *str, struct mips_cl_insn *ip)
check_absolute_expr (ip, &imm_expr);
if (imm_expr.X_add_number & ~OP_MASK_SA4)
{
- as_warn (_("DSP immediate not in range 0..%d (%lu)"),
- OP_MASK_SA4, (unsigned long) imm_expr.X_add_number);
- imm_expr.X_add_number &= OP_MASK_SA4;
+ as_bad (_("DSP immediate not in range 0..%d (%lu)"),
+ OP_MASK_SA4, (unsigned long) imm_expr.X_add_number);
}
- ip->insn_opcode |= imm_expr.X_add_number << OP_SH_SA4;
+ INSERT_OPERAND (SA4, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
@@ -8082,11 +8546,10 @@ mips_ip (char *str, struct mips_cl_insn *ip)
check_absolute_expr (ip, &imm_expr);
if (imm_expr.X_add_number & ~OP_MASK_IMM8)
{
- as_warn (_("DSP immediate not in range 0..%d (%lu)"),
- OP_MASK_IMM8, (unsigned long) imm_expr.X_add_number);
- imm_expr.X_add_number &= OP_MASK_IMM8;
+ as_bad (_("DSP immediate not in range 0..%d (%lu)"),
+ OP_MASK_IMM8, (unsigned long) imm_expr.X_add_number);
}
- ip->insn_opcode |= imm_expr.X_add_number << OP_SH_IMM8;
+ INSERT_OPERAND (IMM8, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
@@ -8096,11 +8559,10 @@ mips_ip (char *str, struct mips_cl_insn *ip)
check_absolute_expr (ip, &imm_expr);
if (imm_expr.X_add_number & ~OP_MASK_RS)
{
- as_warn (_("DSP immediate not in range 0..%d (%lu)"),
- OP_MASK_RS, (unsigned long) imm_expr.X_add_number);
- imm_expr.X_add_number &= OP_MASK_RS;
+ as_bad (_("DSP immediate not in range 0..%d (%lu)"),
+ OP_MASK_RS, (unsigned long) imm_expr.X_add_number);
}
- ip->insn_opcode |= imm_expr.X_add_number << OP_SH_RS;
+ INSERT_OPERAND (RS, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
@@ -8111,7 +8573,7 @@ mips_ip (char *str, struct mips_cl_insn *ip)
{
regno = s[3] - '0';
s += 4;
- ip->insn_opcode |= regno << OP_SH_DSPACC;
+ INSERT_OPERAND (DSPACC, *ip, regno);
continue;
}
else
@@ -8123,12 +8585,11 @@ mips_ip (char *str, struct mips_cl_insn *ip)
check_absolute_expr (ip, &imm_expr);
if (imm_expr.X_add_number & ~OP_MASK_WRDSP)
{
- as_warn (_("DSP immediate not in range 0..%d (%lu)"),
- OP_MASK_WRDSP,
- (unsigned long) imm_expr.X_add_number);
- imm_expr.X_add_number &= OP_MASK_WRDSP;
+ as_bad (_("DSP immediate not in range 0..%d (%lu)"),
+ OP_MASK_WRDSP,
+ (unsigned long) imm_expr.X_add_number);
}
- ip->insn_opcode |= imm_expr.X_add_number << OP_SH_WRDSP;
+ INSERT_OPERAND (WRDSP, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
@@ -8139,7 +8600,7 @@ mips_ip (char *str, struct mips_cl_insn *ip)
{
regno = s[3] - '0';
s += 4;
- ip->insn_opcode |= regno << OP_SH_DSPACC_S;
+ INSERT_OPERAND (DSPACC_S, *ip, regno);
continue;
}
else
@@ -8154,13 +8615,11 @@ mips_ip (char *str, struct mips_cl_insn *ip)
if (imm_expr.X_add_number < min_range ||
imm_expr.X_add_number > max_range)
{
- as_warn (_("DSP immediate not in range %ld..%ld (%ld)"),
- (long) min_range, (long) max_range,
- (long) imm_expr.X_add_number);
+ as_bad (_("DSP immediate not in range %ld..%ld (%ld)"),
+ (long) min_range, (long) max_range,
+ (long) imm_expr.X_add_number);
}
- imm_expr.X_add_number &= OP_MASK_DSPSFT;
- ip->insn_opcode |= ((unsigned long) imm_expr.X_add_number
- << OP_SH_DSPSFT);
+ INSERT_OPERAND (DSPSFT, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
@@ -8170,12 +8629,11 @@ mips_ip (char *str, struct mips_cl_insn *ip)
check_absolute_expr (ip, &imm_expr);
if (imm_expr.X_add_number & ~OP_MASK_RDDSP)
{
- as_warn (_("DSP immediate not in range 0..%d (%lu)"),
- OP_MASK_RDDSP,
- (unsigned long) imm_expr.X_add_number);
- imm_expr.X_add_number &= OP_MASK_RDDSP;
+ as_bad (_("DSP immediate not in range 0..%d (%lu)"),
+ OP_MASK_RDDSP,
+ (unsigned long) imm_expr.X_add_number);
}
- ip->insn_opcode |= imm_expr.X_add_number << OP_SH_RDDSP;
+ INSERT_OPERAND (RDDSP, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
@@ -8188,13 +8646,11 @@ mips_ip (char *str, struct mips_cl_insn *ip)
if (imm_expr.X_add_number < min_range ||
imm_expr.X_add_number > max_range)
{
- as_warn (_("DSP immediate not in range %ld..%ld (%ld)"),
- (long) min_range, (long) max_range,
- (long) imm_expr.X_add_number);
+ as_bad (_("DSP immediate not in range %ld..%ld (%ld)"),
+ (long) min_range, (long) max_range,
+ (long) imm_expr.X_add_number);
}
- imm_expr.X_add_number &= OP_MASK_DSPSFT_7;
- ip->insn_opcode |= ((unsigned long) imm_expr.X_add_number
- << OP_SH_DSPSFT_7);
+ INSERT_OPERAND (DSPSFT_7, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
@@ -8207,41 +8663,33 @@ mips_ip (char *str, struct mips_cl_insn *ip)
if (imm_expr.X_add_number < min_range ||
imm_expr.X_add_number > max_range)
{
- as_warn (_("DSP immediate not in range %ld..%ld (%ld)"),
- (long) min_range, (long) max_range,
- (long) imm_expr.X_add_number);
+ as_bad (_("DSP immediate not in range %ld..%ld (%ld)"),
+ (long) min_range, (long) max_range,
+ (long) imm_expr.X_add_number);
}
- imm_expr.X_add_number &= OP_MASK_IMM10;
- ip->insn_opcode |= ((unsigned long) imm_expr.X_add_number
- << OP_SH_IMM10);
+ INSERT_OPERAND (IMM10, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
- case '!': /* mt 1-bit unsigned immediate in bit 5 */
+ case '!': /* MT usermode flag bit. */
my_getExpression (&imm_expr, s);
check_absolute_expr (ip, &imm_expr);
if (imm_expr.X_add_number & ~OP_MASK_MT_U)
- {
- as_warn (_("MT immediate not in range 0..%d (%lu)"),
- OP_MASK_MT_U, (unsigned long) imm_expr.X_add_number);
- imm_expr.X_add_number &= OP_MASK_MT_U;
- }
- ip->insn_opcode |= imm_expr.X_add_number << OP_SH_MT_U;
+ as_bad (_("MT usermode bit not 0 or 1 (%lu)"),
+ (unsigned long) imm_expr.X_add_number);
+ INSERT_OPERAND (MT_U, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
- case '$': /* mt 1-bit unsigned immediate in bit 4 */
+ case '$': /* MT load high flag bit. */
my_getExpression (&imm_expr, s);
check_absolute_expr (ip, &imm_expr);
if (imm_expr.X_add_number & ~OP_MASK_MT_H)
- {
- as_warn (_("MT immediate not in range 0..%d (%lu)"),
- OP_MASK_MT_H, (unsigned long) imm_expr.X_add_number);
- imm_expr.X_add_number &= OP_MASK_MT_H;
- }
- ip->insn_opcode |= imm_expr.X_add_number << OP_SH_MT_H;
+ as_bad (_("MT load high bit not 0 or 1 (%lu)"),
+ (unsigned long) imm_expr.X_add_number);
+ INSERT_OPERAND (MT_H, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
@@ -8252,7 +8700,7 @@ mips_ip (char *str, struct mips_cl_insn *ip)
{
regno = s[3] - '0';
s += 4;
- ip->insn_opcode |= regno << OP_SH_MTACC_T;
+ INSERT_OPERAND (MTACC_T, *ip, regno);
continue;
}
else
@@ -8265,7 +8713,7 @@ mips_ip (char *str, struct mips_cl_insn *ip)
{
regno = s[3] - '0';
s += 4;
- ip->insn_opcode |= regno << OP_SH_MTACC_D;
+ INSERT_OPERAND (MTACC_D, *ip, regno);
continue;
}
else
@@ -8273,6 +8721,7 @@ mips_ip (char *str, struct mips_cl_insn *ip)
break;
case ',':
+ ++argnum;
if (*s++ == *args)
continue;
s--;
@@ -8318,6 +8767,34 @@ mips_ip (char *str, struct mips_cl_insn *ip)
case '+': /* Opcode extension character. */
switch (*++args)
{
+ case '1': /* UDI immediates. */
+ case '2':
+ case '3':
+ case '4':
+ {
+ const struct mips_immed *imm = mips_immed;
+
+ while (imm->type && imm->type != *args)
+ ++imm;
+ if (! imm->type)
+ internalError ();
+ my_getExpression (&imm_expr, s);
+ check_absolute_expr (ip, &imm_expr);
+ if ((unsigned long) imm_expr.X_add_number & ~imm->mask)
+ {
+ as_warn (_("Illegal %s number (%lu, 0x%lx)"),
+ imm->desc ? imm->desc : ip->insn_mo->name,
+ (unsigned long) imm_expr.X_add_number,
+ (unsigned long) imm_expr.X_add_number);
+ imm_expr.X_add_number &= imm->mask;
+ }
+ ip->insn_opcode |= ((unsigned long) imm_expr.X_add_number
+ << imm->shift);
+ imm_expr.X_op = O_absent;
+ s = expr_end;
+ }
+ continue;
+
case 'A': /* ins/ext position, becomes LSB. */
limlo = 0;
limhi = 31;
@@ -8424,11 +8901,11 @@ do_msbd:
s = expr_end;
continue;
- case 'T': /* Coprocessor register */
+ case 'T': /* Coprocessor register. */
/* +T is for disassembly only; never match. */
break;
- case 't': /* Coprocessor register number */
+ case 't': /* Coprocessor register number. */
if (s[0] == '$' && ISDIGIT (s[1]))
{
++s;
@@ -8444,7 +8921,7 @@ do_msbd:
as_bad (_("Invalid register number (%d)"), regno);
else
{
- ip->insn_opcode |= regno << OP_SH_RT;
+ INSERT_OPERAND (RT, *ip, regno);
continue;
}
}
@@ -8507,8 +8984,9 @@ do_msbd:
case 'c': /* break code */
my_getExpression (&imm_expr, s);
check_absolute_expr (ip, &imm_expr);
- if ((unsigned long) imm_expr.X_add_number > 1023)
- as_warn (_("Illegal break code (%lu)"),
+ if ((unsigned long) imm_expr.X_add_number > OP_MASK_CODE)
+ as_warn (_("Code for %s not in range 0..1023 (%lu)"),
+ ip->insn_mo->name,
(unsigned long) imm_expr.X_add_number);
INSERT_OPERAND (CODE, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
@@ -8518,8 +8996,9 @@ do_msbd:
case 'q': /* lower break code */
my_getExpression (&imm_expr, s);
check_absolute_expr (ip, &imm_expr);
- if ((unsigned long) imm_expr.X_add_number > 1023)
- as_warn (_("Illegal lower break code (%lu)"),
+ if ((unsigned long) imm_expr.X_add_number > OP_MASK_CODE2)
+ as_warn (_("Lower code for %s not in range 0..1023 (%lu)"),
+ ip->insn_mo->name,
(unsigned long) imm_expr.X_add_number);
INSERT_OPERAND (CODE2, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
@@ -8530,7 +9009,8 @@ do_msbd:
my_getExpression (&imm_expr, s);
check_absolute_expr (ip, &imm_expr);
if ((unsigned long) imm_expr.X_add_number > OP_MASK_CODE20)
- as_warn (_("Illegal 20-bit code (%lu)"),
+ as_warn (_("Code for %s not in range 0..1048575 (%lu)"),
+ ip->insn_mo->name,
(unsigned long) imm_expr.X_add_number);
INSERT_OPERAND (CODE20, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
@@ -8540,13 +9020,13 @@ do_msbd:
case 'C': /* Coprocessor code */
my_getExpression (&imm_expr, s);
check_absolute_expr (ip, &imm_expr);
- if ((unsigned long) imm_expr.X_add_number >= (1 << 25))
+ if ((unsigned long) imm_expr.X_add_number > OP_MASK_COPZ)
{
as_warn (_("Coproccesor code > 25 bits (%lu)"),
(unsigned long) imm_expr.X_add_number);
- imm_expr.X_add_number &= ((1 << 25) - 1);
+ imm_expr.X_add_number &= OP_MASK_COPZ;
}
- ip->insn_opcode |= imm_expr.X_add_number;
+ INSERT_OPERAND (COPZ, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
@@ -8555,14 +9035,17 @@ do_msbd:
my_getExpression (&imm_expr, s);
check_absolute_expr (ip, &imm_expr);
if ((unsigned long) imm_expr.X_add_number > OP_MASK_CODE19)
- as_warn (_("Illegal 19-bit code (%lu)"),
- (unsigned long) imm_expr.X_add_number);
+ {
+ as_warn (_("Illegal 19-bit code (%lu)"),
+ (unsigned long) imm_expr.X_add_number);
+ imm_expr.X_add_number &= OP_MASK_CODE19;
+ }
INSERT_OPERAND (CODE19, *ip, imm_expr.X_add_number);
imm_expr.X_op = O_absent;
s = expr_end;
continue;
- case 'P': /* Performance register */
+ case 'P': /* Performance register. */
my_getExpression (&imm_expr, s);
check_absolute_expr (ip, &imm_expr);
if (imm_expr.X_add_number != 0 && imm_expr.X_add_number != 1)
@@ -8573,6 +9056,20 @@ do_msbd:
s = expr_end;
continue;
+ case 'G': /* Coprocessor destination register. */
+ if (((ip->insn_opcode >> OP_SH_OP) & OP_MASK_OP) == OP_OP_COP0)
+ ok = reg_lookup (&s, RTYPE_NUM | RTYPE_CP0, &regno);
+ else
+ ok = reg_lookup (&s, RTYPE_NUM | RTYPE_GP, &regno);
+ INSERT_OPERAND (RD, *ip, regno);
+ if (ok)
+ {
+ lastregno = regno;
+ continue;
+ }
+ else
+ break;
+
case 'b': /* base register */
case 'd': /* destination register */
case 's': /* source register */
@@ -8581,106 +9078,22 @@ do_msbd:
case 'v': /* both dest and source */
case 'w': /* both dest and target */
case 'E': /* coprocessor target register */
- case 'G': /* coprocessor destination register */
case 'K': /* 'rdhwr' destination register */
case 'x': /* ignore register name */
case 'z': /* must be zero register */
case 'U': /* destination register (clo/clz). */
case 'g': /* coprocessor destination register */
- s_reset = s;
- if (s[0] == '$')
+ s_reset = s;
+ if (*args == 'E' || *args == 'K')
+ ok = reg_lookup (&s, RTYPE_NUM, &regno);
+ else
+ {
+ ok = reg_lookup (&s, RTYPE_NUM | RTYPE_GP, &regno);
+ if (regno == AT && ! mips_opts.noat)
+ as_warn ("Used $at without \".set noat\"");
+ }
+ if (ok)
{
- if (ISDIGIT (s[1]))
- {
- ++s;
- regno = 0;
- do
- {
- regno *= 10;
- regno += *s - '0';
- ++s;
- }
- while (ISDIGIT (*s));
- if (regno > 31)
- as_bad (_("Invalid register number (%d)"), regno);
- }
- else if (*args == 'E' || *args == 'G' || *args == 'K')
- goto notreg;
- else
- {
- if (s[1] == 'r' && s[2] == 'a')
- {
- s += 3;
- regno = RA;
- }
- else if (s[1] == 'f' && s[2] == 'p')
- {
- s += 3;
- regno = FP;
- }
- else if (s[1] == 's' && s[2] == 'p')
- {
- s += 3;
- regno = SP;
- }
- else if (s[1] == 'g' && s[2] == 'p')
- {
- s += 3;
- regno = GP;
- }
- else if (s[1] == 'a' && s[2] == 't')
- {
- s += 3;
- regno = AT;
- }
- else if (s[1] == 'k' && s[2] == 't' && s[3] == '0')
- {
- s += 4;
- regno = KT0;
- }
- else if (s[1] == 'k' && s[2] == 't' && s[3] == '1')
- {
- s += 4;
- regno = KT1;
- }
- else if (s[1] == 'z' && s[2] == 'e' && s[3] == 'r' && s[4] == 'o')
- {
- s += 5;
- regno = ZERO;
- }
- else if (itbl_have_entries)
- {
- char *p, *n;
- unsigned long r;
-
- p = s + 1; /* advance past '$' */
- n = itbl_get_field (&p); /* n is name */
-
- /* See if this is a register defined in an
- itbl entry. */
- if (itbl_get_reg_val (n, &r))
- {
- /* Get_field advances to the start of
- the next field, so we need to back
- rack to the end of the last field. */
- if (p)
- s = p - 1;
- else
- s = strchr (s, '\0');
- regno = r;
- }
- else
- goto notreg;
- }
- else
- goto notreg;
- }
- if (regno == AT
- && ! mips_opts.noat
- && *args != 'E'
- && *args != 'G'
- && *args != 'K')
- as_warn (_("Used $at without \".set noat\""));
c = *args;
if (*s == ' ')
++s;
@@ -8746,7 +9159,6 @@ do_msbd:
lastregno = regno;
continue;
}
- notreg:
switch (*args++)
{
case 'r':
@@ -8799,40 +9211,22 @@ do_msbd:
case 'R': /* floating point source register */
case 'V':
case 'W':
+ rtype = RTYPE_FPU;
+ if (is_mdmx
+ || (mips_opts.ase_mdmx
+ && (ip->insn_mo->pinfo & FP_D)
+ && (ip->insn_mo->pinfo & (INSN_COPROC_MOVE_DELAY
+ | INSN_COPROC_MEMORY_DELAY
+ | INSN_LOAD_COPROC_DELAY
+ | INSN_LOAD_MEMORY_DELAY
+ | INSN_STORE_MEMORY))))
+ rtype |= RTYPE_VEC;
s_reset = s;
- /* Accept $fN for FP and MDMX register numbers, and in
- addition accept $vN for MDMX register numbers. */
- if ((s[0] == '$' && s[1] == 'f' && ISDIGIT (s[2]))
- || (is_mdmx != 0 && s[0] == '$' && s[1] == 'v'
- && ISDIGIT (s[2])))
+ if (reg_lookup (&s, rtype, &regno))
{
- s += 2;
- regno = 0;
- do
- {
- regno *= 10;
- regno += *s - '0';
- ++s;
- }
- while (ISDIGIT (*s));
-
- if (regno > 31)
- as_bad (_("Invalid float register number (%d)"), regno);
-
if ((regno & 1) != 0
&& HAVE_32BIT_FPRS
- && ! (strcmp (str, "mtc1") == 0
- || strcmp (str, "mfc1") == 0
- || strcmp (str, "lwc1") == 0
- || strcmp (str, "swc1") == 0
- || strcmp (str, "l.s") == 0
- || strcmp (str, "s.s") == 0
- || strcmp (str, "mftc1") == 0
- || strcmp (str, "mfthc1") == 0
- || strcmp (str, "cftc1") == 0
- || strcmp (str, "mttc1") == 0
- || strcmp (str, "mtthc1") == 0
- || strcmp (str, "cttc1") == 0))
+ && ! mips_oddfpreg_ok (ip->insn_mo, argnum))
as_warn (_("Float register should be even, was %d"),
regno);
@@ -9094,15 +9488,14 @@ do_msbd:
break;
}
new_seg = subseg_new (newname, (subsegT) 0);
- if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
+ if (IS_ELF)
bfd_set_section_flags (stdoutput, new_seg,
(SEC_ALLOC
| SEC_LOAD
| SEC_READONLY
| SEC_DATA));
frag_align (*args == 'l' ? 2 : 3, 0, 0);
- if (OUTPUT_FLAVOR == bfd_target_elf_flavour
- && strcmp (TARGET_OS, "elf") != 0)
+ if (IS_ELF && strcmp (TARGET_OS, "elf") != 0)
record_alignment (new_seg, 4);
else
record_alignment (new_seg, *args == 'l' ? 2 : 3);
@@ -9220,19 +9613,11 @@ do_msbd:
case 'N': /* 3 bit branch condition code */
case 'M': /* 3 bit compare condition code */
- if (strncmp (s, "$fcc", 4) != 0)
+ rtype = RTYPE_CCC;
+ if (ip->insn_mo->pinfo & (FP_D| FP_S))
+ rtype |= RTYPE_FCC;
+ if (!reg_lookup (&s, rtype, &regno))
break;
- s += 4;
- regno = 0;
- do
- {
- regno *= 10;
- regno += *s - '0';
- ++s;
- }
- while (ISDIGIT (*s));
- if (regno > 7)
- as_bad (_("Invalid condition code register $fcc%d"), regno);
if ((strcmp(str + strlen(str) - 3, ".ps") == 0
|| strcmp(str + strlen(str) - 5, "any2f") == 0
|| strcmp(str + strlen(str) - 5, "any2t") == 0)
@@ -9399,8 +9784,38 @@ mips16_ip (char *str, struct mips_cl_insn *ip)
argsstart = s;
for (;;)
{
+ bfd_boolean ok;
+
assert (strcmp (insn->name, str) == 0);
+ if (OPCODE_IS_MEMBER (insn, mips_opts.isa, mips_opts.arch))
+ ok = TRUE;
+ else
+ ok = FALSE;
+
+ if (! ok)
+ {
+ if (insn + 1 < &mips16_opcodes[bfd_mips16_num_opcodes]
+ && strcmp (insn->name, insn[1].name) == 0)
+ {
+ ++insn;
+ continue;
+ }
+ else
+ {
+ if (!insn_error)
+ {
+ static char buf[100];
+ sprintf (buf,
+ _("opcode not supported on this processor: %s (%s)"),
+ mips_cpu_info_from_arch (mips_opts.arch)->name,
+ mips_cpu_info_from_isa (mips_opts.isa)->name);
+ insn_error = buf;
+ }
+ return;
+ }
+ }
+
create_insn (ip, insn);
imm_expr.X_op = O_absent;
imm_reloc[0] = BFD_RELOC_UNUSED;
@@ -9513,70 +9928,19 @@ mips16_ip (char *str, struct mips_cl_insn *ip)
case 'R':
case 'X':
case 'Y':
- if (s[0] != '$')
- break;
- s_reset = s;
- if (ISDIGIT (s[1]))
+ s_reset = s;
+ if (!reg_lookup (&s, RTYPE_NUM | RTYPE_GP, &regno))
{
- ++s;
- regno = 0;
- do
- {
- regno *= 10;
- regno += *s - '0';
- ++s;
- }
- while (ISDIGIT (*s));
- if (regno > 31)
- {
- as_bad (_("invalid register number (%d)"), regno);
- regno = 2;
- }
- }
- else
- {
- if (s[1] == 'r' && s[2] == 'a')
- {
- s += 3;
- regno = RA;
- }
- else if (s[1] == 'f' && s[2] == 'p')
- {
- s += 3;
- regno = FP;
- }
- else if (s[1] == 's' && s[2] == 'p')
- {
- s += 3;
- regno = SP;
- }
- else if (s[1] == 'g' && s[2] == 'p')
- {
- s += 3;
- regno = GP;
- }
- else if (s[1] == 'a' && s[2] == 't')
- {
- s += 3;
- regno = AT;
- }
- else if (s[1] == 'k' && s[2] == 't' && s[3] == '0')
- {
- s += 4;
- regno = KT0;
- }
- else if (s[1] == 'k' && s[2] == 't' && s[3] == '1')
- {
- s += 4;
- regno = KT1;
- }
- else if (s[1] == 'z' && s[2] == 'e' && s[3] == 'r' && s[4] == 'o')
+ if (c == 'v' || c == 'w')
{
- s += 5;
- regno = ZERO;
+ if (c == 'v')
+ MIPS16_INSERT_OPERAND (RX, *ip, lastregno);
+ else
+ MIPS16_INSERT_OPERAND (RY, *ip, lastregno);
+ ++args;
+ continue;
}
- else
- break;
+ break;
}
if (*s == ' ')
@@ -9782,29 +10146,18 @@ mips16_ip (char *str, struct mips_cl_insn *ip)
mask = 7 << 3;
while (*s != '\0')
{
- int freg, reg1, reg2;
+ unsigned int freg, reg1, reg2;
while (*s == ' ' || *s == ',')
++s;
- if (*s != '$')
- {
- as_bad (_("can't parse register list"));
- break;
- }
- ++s;
- if (*s != 'f')
+ if (reg_lookup (&s, RTYPE_GP | RTYPE_NUM, &reg1))
freg = 0;
+ else if (reg_lookup (&s, RTYPE_FPU, &reg1))
+ freg = 1;
else
{
- freg = 1;
- ++s;
- }
- reg1 = 0;
- while (ISDIGIT (*s))
- {
- reg1 *= 10;
- reg1 += *s - '0';
- ++s;
+ as_bad (_("can't parse register list"));
+ break;
}
if (*s == ' ')
++s;
@@ -9813,25 +10166,11 @@ mips16_ip (char *str, struct mips_cl_insn *ip)
else
{
++s;
- if (*s != '$')
- break;
- ++s;
- if (freg)
+ if (!reg_lookup (&s, freg ? RTYPE_FPU
+ : (RTYPE_GP | RTYPE_NUM), &reg2))
{
- if (*s == 'f')
- ++s;
- else
- {
- as_bad (_("invalid register list"));
- break;
- }
- }
- reg2 = 0;
- while (ISDIGIT (*s))
- {
- reg2 *= 10;
- reg2 += *s - '0';
- ++s;
+ as_bad (_("invalid register list"));
+ break;
}
}
if (freg && reg1 == 0 && reg2 == 0 && c == 'L')
@@ -9896,46 +10235,33 @@ mips16_ip (char *str, struct mips_cl_insn *ip)
continue;
}
- if (*s != '$')
+ if (! reg_lookup (&s, RTYPE_GP | RTYPE_NUM, &reg1))
{
as_bad (_("can't parse register list"));
break;
}
- ++s;
- reg1 = 0;
- while (ISDIGIT (*s))
- {
- reg1 *= 10;
- reg1 += *s - '0';
- ++s;
- }
- SKIP_SPACE_TABS (s);
+ while (*s == ' ')
+ ++s;
+
if (*s != '-')
reg2 = reg1;
else
{
++s;
- if (*s != '$')
+ if (! reg_lookup (&s, RTYPE_GP | RTYPE_NUM, &reg2)
+ || reg2 < reg1)
{
as_bad (_("can't parse register list"));
break;
}
- ++s;
- reg2 = 0;
- while (ISDIGIT (*s))
- {
- reg2 *= 10;
- reg2 += *s - '0';
- ++s;
- }
}
while (reg1 <= reg2)
{
if (reg1 >= 4 && reg1 <= 7)
{
- if (c == 'm' && !seen_framesz)
+ if (!seen_framesz)
/* args $a0-$a3 */
args |= 1 << (reg1 - 4);
else
@@ -10147,7 +10473,7 @@ mips16_immed (char *file, unsigned int line, int type, offsetT val,
unsigned long *insn, bfd_boolean *use_extend,
unsigned short *extend)
{
- register const struct mips16_immed_operand *op;
+ const struct mips16_immed_operand *op;
int mintiny, maxtiny;
bfd_boolean needext;
@@ -10557,9 +10883,17 @@ struct option md_longopts[] =
{"mmt", no_argument, NULL, OPTION_MT},
#define OPTION_NO_MT (OPTION_ASE_BASE + 9)
{"mno-mt", no_argument, NULL, OPTION_NO_MT},
+#define OPTION_SMARTMIPS (OPTION_ASE_BASE + 10)
+ {"msmartmips", no_argument, NULL, OPTION_SMARTMIPS},
+#define OPTION_NO_SMARTMIPS (OPTION_ASE_BASE + 11)
+ {"mno-smartmips", no_argument, NULL, OPTION_NO_SMARTMIPS},
+#define OPTION_DSPR2 (OPTION_ASE_BASE + 12)
+ {"mdspr2", no_argument, NULL, OPTION_DSPR2},
+#define OPTION_NO_DSPR2 (OPTION_ASE_BASE + 13)
+ {"mno-dspr2", no_argument, NULL, OPTION_NO_DSPR2},
/* Old-style architecture options. Don't add more of these. */
-#define OPTION_COMPAT_ARCH_BASE (OPTION_ASE_BASE + 10)
+#define OPTION_COMPAT_ARCH_BASE (OPTION_ASE_BASE + 14)
#define OPTION_M4650 (OPTION_COMPAT_ARCH_BASE + 0)
{"m4650", no_argument, NULL, OPTION_M4650},
#define OPTION_NO_M4650 (OPTION_COMPAT_ARCH_BASE + 1)
@@ -10711,7 +11045,7 @@ md_parse_option (int c, char *arg)
break;
case 'O':
- if (arg && arg[1] == '0')
+ if (arg && arg[0] == '0')
mips_optimize = 1;
else
mips_optimize = 2;
@@ -10722,11 +11056,6 @@ md_parse_option (int c, char *arg)
mips_debug = 2;
else
mips_debug = atoi (arg);
- /* When the MIPS assembler sees -g or -g2, it does not do
- optimizations which limit full symbolic debugging. We take
- that to be equivalent to -O0. */
- if (mips_debug == 2)
- mips_optimize = 1;
break;
case OPTION_MIPS1:
@@ -10815,10 +11144,22 @@ md_parse_option (int c, char *arg)
case OPTION_DSP:
mips_opts.ase_dsp = 1;
+ mips_opts.ase_dspr2 = 0;
break;
case OPTION_NO_DSP:
mips_opts.ase_dsp = 0;
+ mips_opts.ase_dspr2 = 0;
+ break;
+
+ case OPTION_DSPR2:
+ mips_opts.ase_dspr2 = 1;
+ mips_opts.ase_dsp = 1;
+ break;
+
+ case OPTION_NO_DSPR2:
+ mips_opts.ase_dspr2 = 0;
+ mips_opts.ase_dsp = 0;
break;
case OPTION_MT:
@@ -10847,6 +11188,14 @@ md_parse_option (int c, char *arg)
mips_opts.ase_mips3d = 0;
break;
+ case OPTION_SMARTMIPS:
+ mips_opts.ase_smartmips = 1;
+ break;
+
+ case OPTION_NO_SMARTMIPS:
+ mips_opts.ase_smartmips = 0;
+ break;
+
case OPTION_FIX_VR4120:
mips_fix_vr4120 = 1;
break;
@@ -10892,7 +11241,7 @@ md_parse_option (int c, char *arg)
select SVR4_PIC, and -non_shared to select no PIC. This is
intended to be compatible with Irix 5. */
case OPTION_CALL_SHARED:
- if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
+ if (!IS_ELF)
{
as_bad (_("-call_shared is supported only for ELF format"));
return 0;
@@ -10902,7 +11251,7 @@ md_parse_option (int c, char *arg)
break;
case OPTION_NON_SHARED:
- if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
+ if (!IS_ELF)
{
as_bad (_("-non_shared is supported only for ELF format"));
return 0;
@@ -10928,7 +11277,7 @@ md_parse_option (int c, char *arg)
/* The -32, -n32 and -64 options are shortcuts for -mabi=32, -mabi=n32
and -mabi=64. */
case OPTION_32:
- if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
+ if (!IS_ELF)
{
as_bad (_("-32 is supported for ELF format only"));
return 0;
@@ -10937,7 +11286,7 @@ md_parse_option (int c, char *arg)
break;
case OPTION_N32:
- if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
+ if (!IS_ELF)
{
as_bad (_("-n32 is supported for ELF format only"));
return 0;
@@ -10946,13 +11295,13 @@ md_parse_option (int c, char *arg)
break;
case OPTION_64:
- if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
+ if (!IS_ELF)
{
as_bad (_("-64 is supported for ELF format only"));
return 0;
}
mips_abi = N64_ABI;
- if (! support_64bit_objects())
+ if (!support_64bit_objects())
as_fatal (_("No compiled in support for 64 bit object file format"));
break;
#endif /* OBJ_ELF */
@@ -10975,7 +11324,7 @@ md_parse_option (int c, char *arg)
#ifdef OBJ_ELF
case OPTION_MABI:
- if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
+ if (!IS_ELF)
{
as_bad (_("-mabi is supported for ELF format only"));
return 0;
@@ -11147,14 +11496,43 @@ mips_after_parse_args (void)
|| !ISA_HAS_64BIT_REGS (mips_opts.isa));
}
- /* ??? GAS treats single-float processors as though they had 64-bit
- float registers (although it complains when double-precision
- instructions are used). As things stand, saying they have 32-bit
- registers would lead to spurious "register must be even" messages.
- So here we assume float registers are always the same size as
- integer ones, unless the user says otherwise. */
- if (file_mips_fp32 < 0)
- file_mips_fp32 = file_mips_gp32;
+ switch (file_mips_fp32)
+ {
+ default:
+ case -1:
+ /* No user specified float register size.
+ ??? GAS treats single-float processors as though they had 64-bit
+ float registers (although it complains when double-precision
+ instructions are used). As things stand, saying they have 32-bit
+ registers would lead to spurious "register must be even" messages.
+ So here we assume float registers are never smaller than the
+ integer ones. */
+ if (file_mips_gp32 == 0)
+ /* 64-bit integer registers implies 64-bit float registers. */
+ file_mips_fp32 = 0;
+ else if ((mips_opts.ase_mips3d > 0 || mips_opts.ase_mdmx > 0)
+ && ISA_HAS_64BIT_FPRS (mips_opts.isa))
+ /* -mips3d and -mdmx imply 64-bit float registers, if possible. */
+ file_mips_fp32 = 0;
+ else
+ /* 32-bit float registers. */
+ file_mips_fp32 = 1;
+ break;
+
+ /* The user specified the size of the float registers. Check if it
+ agrees with the ABI and ISA. */
+ case 0:
+ if (!ISA_HAS_64BIT_FPRS (mips_opts.isa))
+ as_bad (_("-mfp64 used with a 32-bit fpu"));
+ else if (ABI_NEEDS_32BIT_REGS (mips_abi)
+ && !ISA_HAS_MXHC1 (mips_opts.isa))
+ as_warn (_("-mfp64 used with a 32-bit ABI"));
+ break;
+ case 1:
+ if (ABI_NEEDS_64BIT_REGS (mips_abi))
+ as_warn (_("-mfp32 used with a 64-bit ABI"));
+ break;
+ }
/* End of GCC-shared inference code. */
@@ -11173,19 +11551,51 @@ mips_after_parse_args (void)
if (mips_opts.mips16 == -1)
mips_opts.mips16 = (CPU_HAS_MIPS16 (file_mips_arch)) ? 1 : 0;
if (mips_opts.ase_mips3d == -1)
- mips_opts.ase_mips3d = (CPU_HAS_MIPS3D (file_mips_arch)) ? 1 : 0;
+ mips_opts.ase_mips3d = ((arch_info->flags & MIPS_CPU_ASE_MIPS3D)
+ && file_mips_fp32 == 0) ? 1 : 0;
+ if (mips_opts.ase_mips3d && file_mips_fp32 == 1)
+ as_bad (_("-mfp32 used with -mips3d"));
+
if (mips_opts.ase_mdmx == -1)
- mips_opts.ase_mdmx = (CPU_HAS_MDMX (file_mips_arch)) ? 1 : 0;
+ mips_opts.ase_mdmx = ((arch_info->flags & MIPS_CPU_ASE_MDMX)
+ && file_mips_fp32 == 0) ? 1 : 0;
+ if (mips_opts.ase_mdmx && file_mips_fp32 == 1)
+ as_bad (_("-mfp32 used with -mdmx"));
+
+ if (mips_opts.ase_smartmips == -1)
+ mips_opts.ase_smartmips = (arch_info->flags & MIPS_CPU_ASE_SMARTMIPS) ? 1 : 0;
+ if (mips_opts.ase_smartmips && !ISA_SUPPORTS_SMARTMIPS)
+ as_warn ("%s ISA does not support SmartMIPS",
+ mips_cpu_info_from_isa (mips_opts.isa)->name);
+
if (mips_opts.ase_dsp == -1)
- mips_opts.ase_dsp = (CPU_HAS_DSP (file_mips_arch)) ? 1 : 0;
+ mips_opts.ase_dsp = (arch_info->flags & MIPS_CPU_ASE_DSP) ? 1 : 0;
+ if (mips_opts.ase_dsp && !ISA_SUPPORTS_DSP_ASE)
+ as_warn ("%s ISA does not support DSP ASE",
+ mips_cpu_info_from_isa (mips_opts.isa)->name);
+
+ if (mips_opts.ase_dspr2 == -1)
+ {
+ mips_opts.ase_dspr2 = (arch_info->flags & MIPS_CPU_ASE_DSPR2) ? 1 : 0;
+ mips_opts.ase_dsp = (arch_info->flags & MIPS_CPU_ASE_DSP) ? 1 : 0;
+ }
+ if (mips_opts.ase_dspr2 && !ISA_SUPPORTS_DSPR2_ASE)
+ as_warn ("%s ISA does not support DSP R2 ASE",
+ mips_cpu_info_from_isa (mips_opts.isa)->name);
+
if (mips_opts.ase_mt == -1)
- mips_opts.ase_mt = (CPU_HAS_MT (file_mips_arch)) ? 1 : 0;
+ mips_opts.ase_mt = (arch_info->flags & MIPS_CPU_ASE_MT) ? 1 : 0;
+ if (mips_opts.ase_mt && !ISA_SUPPORTS_MT_ASE)
+ as_warn ("%s ISA does not support MT ASE",
+ mips_cpu_info_from_isa (mips_opts.isa)->name);
file_mips_isa = mips_opts.isa;
file_ase_mips16 = mips_opts.mips16;
file_ase_mips3d = mips_opts.ase_mips3d;
file_ase_mdmx = mips_opts.ase_mdmx;
+ file_ase_smartmips = mips_opts.ase_smartmips;
file_ase_dsp = mips_opts.ase_dsp;
+ file_ase_dspr2 = mips_opts.ase_dspr2;
file_ase_mt = mips_opts.ase_mt;
mips_opts.gp32 = file_mips_gp32;
mips_opts.fp32 = file_mips_fp32;
@@ -11220,6 +11630,10 @@ md_pcrel_from (fixS *fixP)
/* Return the address of the delay slot. */
return addr + 4;
default:
+ /* We have no relocation type for PC relative MIPS16 instructions. */
+ if (fixP->fx_addsy && S_GET_SEGMENT (fixP->fx_addsy) != now_seg)
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("PC relative MIPS16 instruction references a different section"));
return addr;
}
}
@@ -11402,11 +11816,12 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|| fixP->fx_r_type == BFD_RELOC_CTOR
|| fixP->fx_r_type == BFD_RELOC_MIPS_SUB
|| fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
- || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY);
+ || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY
+ || fixP->fx_r_type == BFD_RELOC_MIPS_TLS_DTPREL64);
buf = (bfd_byte *) (fixP->fx_frag->fr_literal + fixP->fx_where);
- assert (! fixP->fx_pcrel || fixP->fx_r_type == BFD_RELOC_16_PCREL_S2);
+ assert (!fixP->fx_pcrel || fixP->fx_r_type == BFD_RELOC_16_PCREL_S2);
/* Don't treat parts of a composite relocation as done. There are two
reasons for this:
@@ -11418,13 +11833,15 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
constants. The easiest way of dealing with the pathological
exceptions is to generate a relocation against STN_UNDEF and
leave everything up to the linker. */
- if (fixP->fx_addsy == NULL && ! fixP->fx_pcrel && fixP->fx_tcbit == 0)
+ if (fixP->fx_addsy == NULL && !fixP->fx_pcrel && fixP->fx_tcbit == 0)
fixP->fx_done = 1;
switch (fixP->fx_r_type)
{
case BFD_RELOC_MIPS_TLS_GD:
case BFD_RELOC_MIPS_TLS_LDM:
+ case BFD_RELOC_MIPS_TLS_DTPREL32:
+ case BFD_RELOC_MIPS_TLS_DTPREL64:
case BFD_RELOC_MIPS_TLS_DTPREL_HI16:
case BFD_RELOC_MIPS_TLS_DTPREL_LO16:
case BFD_RELOC_MIPS_TLS_GOTTPREL:
@@ -11463,14 +11880,8 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
case BFD_RELOC_MIPS16_GPREL:
case BFD_RELOC_MIPS16_HI16:
case BFD_RELOC_MIPS16_HI16_S:
- /* Nothing needed to do. The value comes from the reloc entry */
- break;
-
case BFD_RELOC_MIPS16_JMP:
- /* We currently always generate a reloc against a symbol, which
- means that we don't want an addend even if the symbol is
- defined. */
- *valP = 0;
+ /* Nothing needed to do. The value comes from the reloc entry. */
break;
case BFD_RELOC_64:
@@ -11498,18 +11909,12 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
case BFD_RELOC_RVA:
case BFD_RELOC_32:
- /* If we are deleting this reloc entry, we must fill in the
- value now. This can happen if we have a .word which is not
- resolved when it appears but is later defined. */
- if (fixP->fx_done)
- md_number_to_chars ((char *) buf, *valP, 4);
- break;
-
case BFD_RELOC_16:
/* If we are deleting this reloc entry, we must fill in the
- value now. */
+ value now. This can happen if we have a .word which is not
+ resolved when it appears but is later defined. */
if (fixP->fx_done)
- md_number_to_chars ((char *) buf, *valP, 2);
+ md_number_to_chars ((char *) buf, *valP, fixP->fx_size);
break;
case BFD_RELOC_LO16:
@@ -11534,15 +11939,13 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
as_bad_where (fixP->fx_file, fixP->fx_line,
_("Branch to misaligned address (%lx)"), (long) *valP);
- /*
- * We need to save the bits in the instruction since fixup_segment()
- * might be deleting the relocation entry (i.e., a branch within
- * the current segment).
- */
+ /* We need to save the bits in the instruction since fixup_segment()
+ might be deleting the relocation entry (i.e., a branch within
+ the current segment). */
if (! fixP->fx_done)
break;
- /* update old instruction data */
+ /* Update old instruction data. */
if (target_big_endian)
insn = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
else
@@ -11642,21 +12045,17 @@ mips_align (int to, int fill, symbolS *label)
static void
s_align (int x ATTRIBUTE_UNUSED)
{
- register int temp;
- register long temp_fill;
+ int temp;
+ long temp_fill;
long max_alignment = 15;
- /*
-
- o Note that the assembler pulls down any immediately preceding label
+ /* o Note that the assembler pulls down any immediately preceding label
to the aligned address.
- o It's not documented but auto alignment is reinstated by
+ o It's not documented but auto alignment is reinstated by
a .align pseudo instruction.
- o Note also that after auto alignment is turned off the mips assembler
+ o Note also that after auto alignment is turned off the mips assembler
issues an error on attempt to assemble an improperly aligned data item.
- We don't.
-
- */
+ We don't. */
temp = get_absolute_expression ();
if (temp > max_alignment)
@@ -11675,9 +12074,11 @@ s_align (int x ATTRIBUTE_UNUSED)
temp_fill = 0;
if (temp)
{
+ segment_info_type *si = seg_info (now_seg);
+ struct insn_label_list *l = si->label_list;
+ /* Auto alignment should be switched on by next section change. */
auto_align = 1;
- mips_align (temp, (int) temp_fill,
- insn_labels != NULL ? insn_labels->label : NULL);
+ mips_align (temp, (int) temp_fill, l != NULL ? l->label : NULL);
}
else
{
@@ -11699,7 +12100,8 @@ s_change_sec (int sec)
as it would not be appropriate to use it in the section changing
functions in read.c, since obj-elf.c intercepts those. FIXME:
This should be cleaner, somehow. */
- obj_elf_section_change_hook ();
+ if (IS_ELF)
+ obj_elf_section_change_hook ();
#endif
mips_emit_delays ();
@@ -11719,7 +12121,7 @@ s_change_sec (int sec)
case 'r':
seg = subseg_new (RDATA_SECTION_NAME,
(subsegT) get_absolute_expression ());
- if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
+ if (IS_ELF)
{
bfd_set_section_flags (stdoutput, seg, (SEC_ALLOC | SEC_LOAD
| SEC_READONLY | SEC_RELOC
@@ -11732,7 +12134,7 @@ s_change_sec (int sec)
case 's':
seg = subseg_new (".sdata", (subsegT) get_absolute_expression ());
- if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
+ if (IS_ELF)
{
bfd_set_section_flags (stdoutput, seg,
SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA);
@@ -11758,7 +12160,7 @@ s_change_section (int ignore ATTRIBUTE_UNUSED)
int section_entry_size;
int section_alignment;
- if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
+ if (!IS_ELF)
return;
section_name = input_line_pointer;
@@ -11803,7 +12205,7 @@ s_change_section (int ignore ATTRIBUTE_UNUSED)
There's nothing really harmful in this, since bfd will correct
SHT_PROGBITS to SHT_MIPS_DWARF before writing out the file. But it
- means that, for backwards compatibiltiy, the special_section entries
+ means that, for backwards compatibility, the special_section entries
for dwarf sections must use SHT_PROGBITS rather than SHT_MIPS_DWARF.
Even so, we shouldn't force users of the MIPS .section syntax to
@@ -11830,9 +12232,11 @@ mips_enable_auto_align (void)
static void
s_cons (int log_size)
{
+ segment_info_type *si = seg_info (now_seg);
+ struct insn_label_list *l = si->label_list;
symbolS *label;
- label = insn_labels != NULL ? insn_labels->label : NULL;
+ label = l != NULL ? l->label : NULL;
mips_emit_delays ();
if (log_size > 0 && auto_align)
mips_align (log_size, 0, label);
@@ -11843,9 +12247,11 @@ s_cons (int log_size)
static void
s_float_cons (int type)
{
+ segment_info_type *si = seg_info (now_seg);
+ struct insn_label_list *l = si->label_list;
symbolS *label;
- label = insn_labels != NULL ? insn_labels->label : NULL;
+ label = l != NULL ? l->label : NULL;
mips_emit_delays ();
@@ -12032,12 +12438,43 @@ s_mipsset (int x ATTRIBUTE_UNUSED)
{
mips_opts.nobopt = 1;
}
+ else if (strcmp (name, "gp=default") == 0)
+ mips_opts.gp32 = file_mips_gp32;
+ else if (strcmp (name, "gp=32") == 0)
+ mips_opts.gp32 = 1;
+ else if (strcmp (name, "gp=64") == 0)
+ {
+ if (!ISA_HAS_64BIT_REGS (mips_opts.isa))
+ as_warn ("%s isa does not support 64-bit registers",
+ mips_cpu_info_from_isa (mips_opts.isa)->name);
+ mips_opts.gp32 = 0;
+ }
+ else if (strcmp (name, "fp=default") == 0)
+ mips_opts.fp32 = file_mips_fp32;
+ else if (strcmp (name, "fp=32") == 0)
+ mips_opts.fp32 = 1;
+ else if (strcmp (name, "fp=64") == 0)
+ {
+ if (!ISA_HAS_64BIT_FPRS (mips_opts.isa))
+ as_warn ("%s isa does not support 64-bit floating point registers",
+ mips_cpu_info_from_isa (mips_opts.isa)->name);
+ mips_opts.fp32 = 0;
+ }
else if (strcmp (name, "mips16") == 0
|| strcmp (name, "MIPS-16") == 0)
mips_opts.mips16 = 1;
else if (strcmp (name, "nomips16") == 0
|| strcmp (name, "noMIPS-16") == 0)
mips_opts.mips16 = 0;
+ else if (strcmp (name, "smartmips") == 0)
+ {
+ if (!ISA_SUPPORTS_SMARTMIPS)
+ as_warn ("%s ISA does not support SmartMIPS ASE",
+ mips_cpu_info_from_isa (mips_opts.isa)->name);
+ mips_opts.ase_smartmips = 1;
+ }
+ else if (strcmp (name, "nosmartmips") == 0)
+ mips_opts.ase_smartmips = 0;
else if (strcmp (name, "mips3d") == 0)
mips_opts.ase_mips3d = 1;
else if (strcmp (name, "nomips3d") == 0)
@@ -12047,11 +12484,38 @@ s_mipsset (int x ATTRIBUTE_UNUSED)
else if (strcmp (name, "nomdmx") == 0)
mips_opts.ase_mdmx = 0;
else if (strcmp (name, "dsp") == 0)
- mips_opts.ase_dsp = 1;
+ {
+ if (!ISA_SUPPORTS_DSP_ASE)
+ as_warn ("%s ISA does not support DSP ASE",
+ mips_cpu_info_from_isa (mips_opts.isa)->name);
+ mips_opts.ase_dsp = 1;
+ mips_opts.ase_dspr2 = 0;
+ }
else if (strcmp (name, "nodsp") == 0)
- mips_opts.ase_dsp = 0;
+ {
+ mips_opts.ase_dsp = 0;
+ mips_opts.ase_dspr2 = 0;
+ }
+ else if (strcmp (name, "dspr2") == 0)
+ {
+ if (!ISA_SUPPORTS_DSPR2_ASE)
+ as_warn ("%s ISA does not support DSP R2 ASE",
+ mips_cpu_info_from_isa (mips_opts.isa)->name);
+ mips_opts.ase_dspr2 = 1;
+ mips_opts.ase_dsp = 1;
+ }
+ else if (strcmp (name, "nodspr2") == 0)
+ {
+ mips_opts.ase_dspr2 = 0;
+ mips_opts.ase_dsp = 0;
+ }
else if (strcmp (name, "mt") == 0)
- mips_opts.ase_mt = 1;
+ {
+ if (!ISA_SUPPORTS_MT_ASE)
+ as_warn ("%s ISA does not support MT ASE",
+ mips_cpu_info_from_isa (mips_opts.isa)->name);
+ mips_opts.ase_mt = 1;
+ }
else if (strcmp (name, "nomt") == 0)
mips_opts.ase_mt = 0;
else if (strncmp (name, "mips", 4) == 0 || strncmp (name, "arch=", 5) == 0)
@@ -12162,6 +12626,14 @@ s_mipsset (int x ATTRIBUTE_UNUSED)
mips_opts.sym32 = TRUE;
else if (strcmp (name, "nosym32") == 0)
mips_opts.sym32 = FALSE;
+ else if (strchr (name, ','))
+ {
+ /* Generic ".set" directive; use the generic handler. */
+ *input_line_pointer = ch;
+ input_line_pointer = name;
+ s_set (0);
+ return;
+ }
else
{
as_warn (_("Tried to set unrecognized symbol: %s\n"), name);
@@ -12269,8 +12741,7 @@ s_cpload (int ignore ATTRIBUTE_UNUSED)
The -mno-shared option replaces the last three instructions with
lui $gp,%hi(_gp)
- addiu $gp,$gp,%lo(_gp)
- */
+ addiu $gp,$gp,%lo(_gp) */
static void
s_cpsetup (int ignore ATTRIBUTE_UNUSED)
@@ -12372,7 +12843,7 @@ static void
s_cplocal (int ignore ATTRIBUTE_UNUSED)
{
/* If we are not generating SVR4 PIC code, or if this is not NewABI code,
- .cplocal is ignored. */
+ .cplocal is ignored. */
if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
{
s_ignore (0);
@@ -12421,8 +12892,8 @@ s_cprestore (int ignore ATTRIBUTE_UNUSED)
ld $gp, offset($sp)
If a register $reg2 was given there, it results in:
- daddu $gp, $reg2, $0
- */
+ daddu $gp, $reg2, $0 */
+
static void
s_cpreturn (int ignore ATTRIBUTE_UNUSED)
{
@@ -12454,6 +12925,52 @@ s_cpreturn (int ignore ATTRIBUTE_UNUSED)
demand_empty_rest_of_line ();
}
+/* Handle the .dtprelword and .dtpreldword pseudo-ops. They generate
+ a 32-bit or 64-bit DTP-relative relocation (BYTES says which) for
+ use in DWARF debug information. */
+
+static void
+s_dtprel_internal (size_t bytes)
+{
+ expressionS ex;
+ char *p;
+
+ expression (&ex);
+
+ if (ex.X_op != O_symbol)
+ {
+ as_bad (_("Unsupported use of %s"), (bytes == 8
+ ? ".dtpreldword"
+ : ".dtprelword"));
+ ignore_rest_of_line ();
+ }
+
+ p = frag_more (bytes);
+ md_number_to_chars (p, 0, bytes);
+ fix_new_exp (frag_now, p - frag_now->fr_literal, bytes, &ex, FALSE,
+ (bytes == 8
+ ? BFD_RELOC_MIPS_TLS_DTPREL64
+ : BFD_RELOC_MIPS_TLS_DTPREL32));
+
+ demand_empty_rest_of_line ();
+}
+
+/* Handle .dtprelword. */
+
+static void
+s_dtprelword (int ignore ATTRIBUTE_UNUSED)
+{
+ s_dtprel_internal (4);
+}
+
+/* Handle .dtpreldword. */
+
+static void
+s_dtpreldword (int ignore ATTRIBUTE_UNUSED)
+{
+ s_dtprel_internal (8);
+}
+
/* Handle the .gpvalue pseudo-op. This is used when generating NewABI PIC
code. It sets the offset to use in gp_rel relocations. */
@@ -12479,6 +12996,8 @@ s_gpvalue (int ignore ATTRIBUTE_UNUSED)
static void
s_gpword (int ignore ATTRIBUTE_UNUSED)
{
+ segment_info_type *si;
+ struct insn_label_list *l;
symbolS *label;
expressionS ex;
char *p;
@@ -12490,7 +13009,9 @@ s_gpword (int ignore ATTRIBUTE_UNUSED)
return;
}
- label = insn_labels != NULL ? insn_labels->label : NULL;
+ si = seg_info (now_seg);
+ l = si->label_list;
+ label = l != NULL ? l->label : NULL;
mips_emit_delays ();
if (auto_align)
mips_align (2, 0, label);
@@ -12515,6 +13036,8 @@ s_gpword (int ignore ATTRIBUTE_UNUSED)
static void
s_gpdword (int ignore ATTRIBUTE_UNUSED)
{
+ segment_info_type *si;
+ struct insn_label_list *l;
symbolS *label;
expressionS ex;
char *p;
@@ -12526,7 +13049,9 @@ s_gpdword (int ignore ATTRIBUTE_UNUSED)
return;
}
- label = insn_labels != NULL ? insn_labels->label : NULL;
+ si = seg_info (now_seg);
+ l = si->label_list;
+ label = l != NULL ? l->label : NULL;
mips_emit_delays ();
if (auto_align)
mips_align (3, 0, label);
@@ -12608,8 +13133,7 @@ s_mips_stab (int type)
s_stab (type);
}
-/* Handle the .weakext pseudo-op as defined in Kane and Heinrich.
- */
+/* Handle the .weakext pseudo-op as defined in Kane and Heinrich. */
static void
s_mips_weakext (int ignore ATTRIBUTE_UNUSED)
@@ -12663,73 +13187,11 @@ s_mips_weakext (int ignore ATTRIBUTE_UNUSED)
int
tc_get_register (int frame)
{
- int reg;
+ unsigned int reg;
SKIP_WHITESPACE ();
- if (*input_line_pointer++ != '$')
- {
- as_warn (_("expected `$'"));
- reg = ZERO;
- }
- else if (ISDIGIT (*input_line_pointer))
- {
- reg = get_absolute_expression ();
- if (reg < 0 || reg >= 32)
- {
- as_warn (_("Bad register number"));
- reg = ZERO;
- }
- }
- else
- {
- if (strncmp (input_line_pointer, "ra", 2) == 0)
- {
- reg = RA;
- input_line_pointer += 2;
- }
- else if (strncmp (input_line_pointer, "fp", 2) == 0)
- {
- reg = FP;
- input_line_pointer += 2;
- }
- else if (strncmp (input_line_pointer, "sp", 2) == 0)
- {
- reg = SP;
- input_line_pointer += 2;
- }
- else if (strncmp (input_line_pointer, "gp", 2) == 0)
- {
- reg = GP;
- input_line_pointer += 2;
- }
- else if (strncmp (input_line_pointer, "at", 2) == 0)
- {
- reg = AT;
- input_line_pointer += 2;
- }
- else if (strncmp (input_line_pointer, "kt0", 3) == 0)
- {
- reg = KT0;
- input_line_pointer += 3;
- }
- else if (strncmp (input_line_pointer, "kt1", 3) == 0)
- {
- reg = KT1;
- input_line_pointer += 3;
- }
- else if (strncmp (input_line_pointer, "zero", 4) == 0)
- {
- reg = ZERO;
- input_line_pointer += 4;
- }
- else
- {
- as_warn (_("Unrecognized register name"));
- reg = ZERO;
- while (ISALNUM(*input_line_pointer))
- input_line_pointer++;
- }
- }
+ if (! reg_lookup (&input_line_pointer, RWARN | RTYPE_NUM | RTYPE_GP, &reg))
+ reg = 0;
if (frame)
{
mips_frame_reg = reg != 0 ? reg : SP;
@@ -12744,16 +13206,17 @@ md_section_align (asection *seg, valueT addr)
{
int align = bfd_get_section_alignment (stdoutput, seg);
-#ifdef OBJ_ELF
- /* We don't need to align ELF sections to the full alignment.
- However, Irix 5 may prefer that we align them at least to a 16
- byte boundary. We don't bother to align the sections if we are
- targeted for an embedded system. */
- if (strcmp (TARGET_OS, "elf") == 0)
- return addr;
- if (align > 4)
- align = 4;
-#endif
+ if (IS_ELF)
+ {
+ /* We don't need to align ELF sections to the full alignment.
+ However, Irix 5 may prefer that we align them at least to a 16
+ byte boundary. We don't bother to align the sections if we
+ are targeted for an embedded system. */
+ if (strcmp (TARGET_OS, "elf") == 0)
+ return addr;
+ if (align > 4)
+ align = 4;
+ }
return ((addr + (1 << align) - 1) & (-1 << align));
}
@@ -12819,6 +13282,8 @@ nopic_need_relax (symbolS *sym, int before_relaxing)
change = (strcmp (segname, ".sdata") != 0
&& strcmp (segname, ".sbss") != 0
&& strncmp (segname, ".sdata.", 7) != 0
+ && strncmp (segname, ".sbss.", 6) != 0
+ && strncmp (segname, ".gnu.linkonce.sb.", 17) != 0
&& strncmp (segname, ".gnu.linkonce.s.", 16) != 0);
}
return change;
@@ -12835,48 +13300,32 @@ static bfd_boolean
pic_need_relax (symbolS *sym, asection *segtype)
{
asection *symsec;
- bfd_boolean linkonce;
/* Handle the case of a symbol equated to another symbol. */
while (symbol_equated_reloc_p (sym))
{
symbolS *n;
- /* It's possible to get a loop here in a badly written
- program. */
+ /* It's possible to get a loop here in a badly written program. */
n = symbol_get_value_expression (sym)->X_add_symbol;
if (n == sym)
break;
sym = n;
}
- symsec = S_GET_SEGMENT (sym);
-
- /* duplicate the test for LINK_ONCE sections as in adjust_reloc_syms */
- linkonce = FALSE;
- if (symsec != segtype && ! S_IS_LOCAL (sym))
- {
- if ((bfd_get_section_flags (stdoutput, symsec) & SEC_LINK_ONCE)
- != 0)
- linkonce = TRUE;
+ if (symbol_section_p (sym))
+ return TRUE;
- /* The GNU toolchain uses an extension for ELF: a section
- beginning with the magic string .gnu.linkonce is a linkonce
- section. */
- if (strncmp (segment_name (symsec), ".gnu.linkonce",
- sizeof ".gnu.linkonce" - 1) == 0)
- linkonce = TRUE;
- }
+ symsec = S_GET_SEGMENT (sym);
/* This must duplicate the test in adjust_reloc_syms. */
return (symsec != &bfd_und_section
&& symsec != &bfd_abs_section
- && ! bfd_is_com_section (symsec)
- && !linkonce
+ && !bfd_is_com_section (symsec)
+ && !s_is_linkonce (sym, segtype)
#ifdef OBJ_ELF
/* A global or weak symbol is treated as external. */
- && (OUTPUT_FLAVOR != bfd_target_elf_flavour
- || (! S_IS_WEAK (sym) && ! S_IS_EXTERNAL (sym)))
+ && (!IS_ELF || (! S_IS_WEAK (sym) && ! S_IS_EXTERNAL (sym)))
#endif
);
}
@@ -12889,7 +13338,7 @@ static int
mips16_extended_frag (fragS *fragp, asection *sec, long stretch)
{
int type;
- register const struct mips16_immed_operand *op;
+ const struct mips16_immed_operand *op;
offsetT val;
int mintiny, maxtiny;
segT symsec;
@@ -13192,11 +13641,6 @@ md_estimate_size_before_relax (fragS *fragp, asection *segtype)
int
mips_fix_adjustable (fixS *fixp)
{
- /* Don't adjust MIPS16 jump relocations, so we don't have to worry
- about the format of the offset in the .o file. */
- if (fixp->fx_r_type == BFD_RELOC_MIPS16_JMP)
- return 0;
-
if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
|| fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
return 0;
@@ -13226,11 +13670,50 @@ mips_fix_adjustable (fixS *fixp)
return 0;
#ifdef OBJ_ELF
- /* Don't adjust relocations against mips16 symbols, so that the linker
- can find them if it needs to set up a stub. */
- if (OUTPUT_FLAVOR == bfd_target_elf_flavour
- && S_GET_OTHER (fixp->fx_addsy) == STO_MIPS16
- && fixp->fx_subsy == NULL)
+ /* R_MIPS16_26 relocations against non-MIPS16 functions might resolve
+ to a floating-point stub. The same is true for non-R_MIPS16_26
+ relocations against MIPS16 functions; in this case, the stub becomes
+ the function's canonical address.
+
+ Floating-point stubs are stored in unique .mips16.call.* or
+ .mips16.fn.* sections. If a stub T for function F is in section S,
+ the first relocation in section S must be against F; this is how the
+ linker determines the target function. All relocations that might
+ resolve to T must also be against F. We therefore have the following
+ restrictions, which are given in an intentionally-redundant way:
+
+ 1. We cannot reduce R_MIPS16_26 relocations against non-MIPS16
+ symbols.
+
+ 2. We cannot reduce a stub's relocations against non-MIPS16 symbols
+ if that stub might be used.
+
+ 3. We cannot reduce non-R_MIPS16_26 relocations against MIPS16
+ symbols.
+
+ 4. We cannot reduce a stub's relocations against MIPS16 symbols if
+ that stub might be used.
+
+ There is a further restriction:
+
+ 5. We cannot reduce R_MIPS16_26 relocations against MIPS16 symbols
+ on targets with in-place addends; the relocation field cannot
+ encode the low bit.
+
+ For simplicity, we deal with (3)-(5) by not reducing _any_ relocation
+ against a MIPS16 symbol.
+
+ We deal with (1)-(2) by saying that, if there's a R_MIPS16_26
+ relocation against some symbol R, no relocation against R may be
+ reduced. (Note that this deals with (2) as well as (1) because
+ relocations against global symbols will never be reduced on ELF
+ targets.) This approach is a little simpler than trying to detect
+ stub sections, and gives the "all or nothing" per-symbol consistency
+ that we have for MIPS16 symbols. */
+ if (IS_ELF
+ && fixp->fx_subsy == NULL
+ && (S_GET_OTHER (fixp->fx_addsy) == STO_MIPS16
+ || *symbol_get_tc (fixp->fx_addsy)))
return 0;
#endif
@@ -13260,7 +13743,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
/* At this point, fx_addnumber is "symbol offset - pcrel address".
Relocations want only the symbol offset. */
reloc->addend = fixp->fx_addnumber + reloc->address;
- if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
+ if (!IS_ELF)
{
/* A gruesome hack which is a result of the gruesome gas
reloc handling. What's worse, for COFF (as opposed to
@@ -13359,7 +13842,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
exp.X_add_number = fragp->fr_offset;
fixp = fix_new_exp (fragp, buf - (bfd_byte *)fragp->fr_literal,
- 4, &exp, 1, BFD_RELOC_16_PCREL_S2);
+ 4, &exp, TRUE, BFD_RELOC_16_PCREL_S2);
fixp->fx_file = fragp->fr_file;
fixp->fx_line = fragp->fr_line;
@@ -13391,14 +13874,14 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
case 0:
/* bltz 0x04000000 bgez 0x04010000
- bltzal 0x04100000 bgezal 0x04110000 */
+ bltzal 0x04100000 bgezal 0x04110000 */
assert ((insn & 0xfc0e0000) == 0x04000000);
insn ^= 0x00010000;
break;
case 1:
/* beq 0x10000000 bne 0x14000000
- blez 0x18000000 bgtz 0x1c000000 */
+ blez 0x18000000 bgtz 0x1c000000 */
insn ^= 0x04000000;
break;
@@ -13412,8 +13895,8 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
/* Clear the and-link bit. */
assert ((insn & 0xfc1c0000) == 0x04100000);
- /* bltzal 0x04100000 bgezal 0x04110000
- bltzall 0x04120000 bgezall 0x04130000 */
+ /* bltzal 0x04100000 bgezal 0x04110000
+ bltzall 0x04120000 bgezall 0x04130000 */
insn &= ~0x00100000;
}
@@ -13438,7 +13921,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
md_number_to_chars ((char *) buf, insn, 4);
buf += 4;
- /* Nop */
+ /* nop */
md_number_to_chars ((char *) buf, 0, 4);
buf += 4;
@@ -13476,7 +13959,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
exp.X_add_number = fragp->fr_offset;
fixp = fix_new_exp (fragp, buf - (bfd_byte *)fragp->fr_literal,
- 4, &exp, 0, BFD_RELOC_MIPS_JMP);
+ 4, &exp, FALSE, BFD_RELOC_MIPS_JMP);
fixp->fx_file = fragp->fr_file;
fixp->fx_line = fragp->fr_line;
@@ -13498,7 +13981,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
}
fixp = fix_new_exp (fragp, buf - (bfd_byte *)fragp->fr_literal,
- 4, &exp, 0, BFD_RELOC_MIPS_GOT16);
+ 4, &exp, FALSE, BFD_RELOC_MIPS_GOT16);
fixp->fx_file = fragp->fr_file;
fixp->fx_line = fragp->fr_line;
@@ -13516,7 +13999,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
insn = HAVE_64BIT_ADDRESSES ? 0x64210000 : 0x24210000;
fixp = fix_new_exp (fragp, buf - (bfd_byte *)fragp->fr_literal,
- 4, &exp, 0, BFD_RELOC_LO16);
+ 4, &exp, FALSE, BFD_RELOC_LO16);
fixp->fx_file = fragp->fr_file;
fixp->fx_line = fragp->fr_line;
@@ -13545,7 +14028,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
if (RELAX_MIPS16_P (fragp->fr_subtype))
{
int type;
- register const struct mips16_immed_operand *op;
+ const struct mips16_immed_operand *op;
bfd_boolean small, ext;
offsetT val;
bfd_byte *buf;
@@ -13699,7 +14182,7 @@ mips_frob_file_after_relocs (void)
asymbol **syms;
unsigned int count, i;
- if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
+ if (!IS_ELF)
return;
syms = bfd_get_outsymbols (stdoutput);
@@ -13727,6 +14210,7 @@ mips_frob_file_after_relocs (void)
void
mips_define_label (symbolS *sym)
{
+ segment_info_type *si = seg_info (now_seg);
struct insn_label_list *l;
if (free_insn_labels == NULL)
@@ -13738,8 +14222,8 @@ mips_define_label (symbolS *sym)
}
l->label = sym;
- l->next = insn_labels;
- insn_labels = l;
+ l->next = si->label_list;
+ si->label_list = l;
#ifdef OBJ_ELF
dwarf2_emit_label (sym);
@@ -13801,6 +14285,7 @@ mips_elf_final_processing (void)
/* Set MIPS ELF flags for ASEs. */
/* We may need to define a new flag for DSP ASE, and set this flag when
file_ase_dsp is true. */
+ /* Same for DSP R2. */
/* We may need to define a new flag for MT ASE, and set this flag when
file_ase_mt is true. */
if (file_ase_mips16)
@@ -13831,6 +14316,12 @@ mips_elf_final_processing (void)
if (mips_32bitmode)
elf_elfheader (stdoutput)->e_flags |= EF_MIPS_32BITMODE;
+
+#if 0 /* XXX FIXME */
+ /* 32 bit code with 64 bit FP registers. */
+ if (!file_mips_fp32 && ABI_NEEDS_32BIT_REGS (mips_abi))
+ elf_elfheader (stdoutput)->e_flags |= ???;
+#endif
}
#endif /* OBJ_ELF || OBJ_MAYBE_ELF */
@@ -13891,7 +14382,7 @@ md_obj_begin (void)
static void
md_obj_end (void)
{
- /* check for premature end, nesting errors, etc */
+ /* Check for premature end, nesting errors, etc. */
if (cur_proc_ptr)
as_warn (_("missing .end at end of assembly"));
}
@@ -14048,8 +14539,7 @@ s_mips_end (int x ATTRIBUTE_UNUSED)
}
/* Generate a .pdr section. */
- if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING
- && mips_flag_pdr)
+ if (IS_ELF && !ECOFF_DEBUGGING && mips_flag_pdr)
{
segT saved_seg = now_seg;
subsegT saved_subseg = now_subseg;
@@ -14143,7 +14633,7 @@ static void
s_mips_frame (int ignore ATTRIBUTE_UNUSED)
{
#ifdef OBJ_ELF
- if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING)
+ if (IS_ELF && !ECOFF_DEBUGGING)
{
long val;
@@ -14186,7 +14676,7 @@ static void
s_mips_mask (int reg_type)
{
#ifdef OBJ_ELF
- if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING)
+ if (IS_ELF && !ECOFF_DEBUGGING)
{
long mask, off;
@@ -14233,72 +14723,102 @@ s_mips_mask (int reg_type)
static const struct mips_cpu_info mips_cpu_info_table[] =
{
/* Entries for generic ISAs */
- { "mips1", 1, ISA_MIPS1, CPU_R3000 },
- { "mips2", 1, ISA_MIPS2, CPU_R6000 },
- { "mips3", 1, ISA_MIPS3, CPU_R4000 },
- { "mips4", 1, ISA_MIPS4, CPU_R8000 },
- { "mips5", 1, ISA_MIPS5, CPU_MIPS5 },
- { "mips32", 1, ISA_MIPS32, CPU_MIPS32 },
- { "mips32r2", 1, ISA_MIPS32R2, CPU_MIPS32R2 },
- { "mips64", 1, ISA_MIPS64, CPU_MIPS64 },
- { "mips64r2", 1, ISA_MIPS64R2, CPU_MIPS64R2 },
+ { "mips1", MIPS_CPU_IS_ISA, ISA_MIPS1, CPU_R3000 },
+ { "mips2", MIPS_CPU_IS_ISA, ISA_MIPS2, CPU_R6000 },
+ { "mips3", MIPS_CPU_IS_ISA, ISA_MIPS3, CPU_R4000 },
+ { "mips4", MIPS_CPU_IS_ISA, ISA_MIPS4, CPU_R8000 },
+ { "mips5", MIPS_CPU_IS_ISA, ISA_MIPS5, CPU_MIPS5 },
+ { "mips32", MIPS_CPU_IS_ISA, ISA_MIPS32, CPU_MIPS32 },
+ { "mips32r2", MIPS_CPU_IS_ISA, ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "mips64", MIPS_CPU_IS_ISA, ISA_MIPS64, CPU_MIPS64 },
+ { "mips64r2", MIPS_CPU_IS_ISA, ISA_MIPS64R2, CPU_MIPS64R2 },
/* MIPS I */
- { "r3000", 0, ISA_MIPS1, CPU_R3000 },
- { "r2000", 0, ISA_MIPS1, CPU_R3000 },
- { "r3900", 0, ISA_MIPS1, CPU_R3900 },
+ { "r3000", 0, ISA_MIPS1, CPU_R3000 },
+ { "r2000", 0, ISA_MIPS1, CPU_R3000 },
+ { "r3900", 0, ISA_MIPS1, CPU_R3900 },
/* MIPS II */
- { "r6000", 0, ISA_MIPS2, CPU_R6000 },
+ { "r6000", 0, ISA_MIPS2, CPU_R6000 },
/* MIPS III */
- { "r4000", 0, ISA_MIPS3, CPU_R4000 },
- { "r4010", 0, ISA_MIPS2, CPU_R4010 },
- { "vr4100", 0, ISA_MIPS3, CPU_VR4100 },
- { "vr4111", 0, ISA_MIPS3, CPU_R4111 },
- { "vr4120", 0, ISA_MIPS3, CPU_VR4120 },
- { "vr4130", 0, ISA_MIPS3, CPU_VR4120 },
- { "vr4181", 0, ISA_MIPS3, CPU_R4111 },
- { "vr4300", 0, ISA_MIPS3, CPU_R4300 },
- { "r4400", 0, ISA_MIPS3, CPU_R4400 },
- { "r4600", 0, ISA_MIPS3, CPU_R4600 },
- { "orion", 0, ISA_MIPS3, CPU_R4600 },
- { "r4650", 0, ISA_MIPS3, CPU_R4650 },
+ { "r4000", 0, ISA_MIPS3, CPU_R4000 },
+ { "r4010", 0, ISA_MIPS2, CPU_R4010 },
+ { "vr4100", 0, ISA_MIPS3, CPU_VR4100 },
+ { "vr4111", 0, ISA_MIPS3, CPU_R4111 },
+ { "vr4120", 0, ISA_MIPS3, CPU_VR4120 },
+ { "vr4130", 0, ISA_MIPS3, CPU_VR4120 },
+ { "vr4181", 0, ISA_MIPS3, CPU_R4111 },
+ { "vr4300", 0, ISA_MIPS3, CPU_R4300 },
+ { "r4400", 0, ISA_MIPS3, CPU_R4400 },
+ { "r4600", 0, ISA_MIPS3, CPU_R4600 },
+ { "orion", 0, ISA_MIPS3, CPU_R4600 },
+ { "r4650", 0, ISA_MIPS3, CPU_R4650 },
/* MIPS IV */
- { "r8000", 0, ISA_MIPS4, CPU_R8000 },
- { "r10000", 0, ISA_MIPS4, CPU_R10000 },
- { "r12000", 0, ISA_MIPS4, CPU_R12000 },
- { "vr5000", 0, ISA_MIPS4, CPU_R5000 },
- { "vr5400", 0, ISA_MIPS4, CPU_VR5400 },
- { "vr5500", 0, ISA_MIPS4, CPU_VR5500 },
- { "rm5200", 0, ISA_MIPS4, CPU_R5000 },
- { "rm5230", 0, ISA_MIPS4, CPU_R5000 },
- { "rm5231", 0, ISA_MIPS4, CPU_R5000 },
- { "rm5261", 0, ISA_MIPS4, CPU_R5000 },
- { "rm5721", 0, ISA_MIPS4, CPU_R5000 },
- { "rm7000", 0, ISA_MIPS4, CPU_RM7000 },
- { "rm9000", 0, ISA_MIPS4, CPU_RM9000 },
+ { "r8000", 0, ISA_MIPS4, CPU_R8000 },
+ { "r10000", 0, ISA_MIPS4, CPU_R10000 },
+ { "r12000", 0, ISA_MIPS4, CPU_R12000 },
+ { "vr5000", 0, ISA_MIPS4, CPU_R5000 },
+ { "vr5400", 0, ISA_MIPS4, CPU_VR5400 },
+ { "vr5500", 0, ISA_MIPS4, CPU_VR5500 },
+ { "rm5200", 0, ISA_MIPS4, CPU_R5000 },
+ { "rm5230", 0, ISA_MIPS4, CPU_R5000 },
+ { "rm5231", 0, ISA_MIPS4, CPU_R5000 },
+ { "rm5261", 0, ISA_MIPS4, CPU_R5000 },
+ { "rm5721", 0, ISA_MIPS4, CPU_R5000 },
+ { "rm7000", 0, ISA_MIPS4, CPU_RM7000 },
+ { "rm9000", 0, ISA_MIPS4, CPU_RM9000 },
/* MIPS 32 */
- { "4kc", 0, ISA_MIPS32, CPU_MIPS32 },
- { "4km", 0, ISA_MIPS32, CPU_MIPS32 },
- { "4kp", 0, ISA_MIPS32, CPU_MIPS32 },
-
- /* MIPS32 Release 2 */
- { "m4k", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
- { "24k", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
- { "24kc", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
- { "24kf", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
- { "24kx", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "4kc", 0, ISA_MIPS32, CPU_MIPS32 },
+ { "4km", 0, ISA_MIPS32, CPU_MIPS32 },
+ { "4kp", 0, ISA_MIPS32, CPU_MIPS32 },
+ { "4ksc", MIPS_CPU_ASE_SMARTMIPS, ISA_MIPS32, CPU_MIPS32 },
+
+ /* MIPS 32 Release 2 */
+ { "4kec", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "4kem", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "4kep", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "4ksd", MIPS_CPU_ASE_SMARTMIPS, ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "m4k", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "m4kp", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "24kc", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "24kf", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "24kx", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
+ /* 24KE is a 24K with DSP ASE, other ASEs are optional. */
+ { "24kec", MIPS_CPU_ASE_DSP, ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "24kef", MIPS_CPU_ASE_DSP, ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "24kex", MIPS_CPU_ASE_DSP, ISA_MIPS32R2, CPU_MIPS32R2 },
+ /* 34K is a 24K with DSP and MT ASE, other ASEs are optional. */
+ { "34kc", MIPS_CPU_ASE_DSP | MIPS_CPU_ASE_MT,
+ ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "34kf", MIPS_CPU_ASE_DSP | MIPS_CPU_ASE_MT,
+ ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "34kx", MIPS_CPU_ASE_DSP | MIPS_CPU_ASE_MT,
+ ISA_MIPS32R2, CPU_MIPS32R2 },
+ /* 74K with DSP and DSPR2 ASE, other ASEs are optional. */
+ { "74kc", MIPS_CPU_ASE_DSP | MIPS_CPU_ASE_DSPR2,
+ ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "74kf", MIPS_CPU_ASE_DSP | MIPS_CPU_ASE_DSPR2,
+ ISA_MIPS32R2, CPU_MIPS32R2 },
+ { "74kx", MIPS_CPU_ASE_DSP | MIPS_CPU_ASE_DSPR2,
+ ISA_MIPS32R2, CPU_MIPS32R2 },
/* MIPS 64 */
- { "5kc", 0, ISA_MIPS64, CPU_MIPS64 },
- { "5kf", 0, ISA_MIPS64, CPU_MIPS64 },
- { "20kc", 0, ISA_MIPS64, CPU_MIPS64 },
+ { "5kc", 0, ISA_MIPS64, CPU_MIPS64 },
+ { "5kf", 0, ISA_MIPS64, CPU_MIPS64 },
+ { "20kc", MIPS_CPU_ASE_MIPS3D, ISA_MIPS64, CPU_MIPS64 },
+ { "25kf", MIPS_CPU_ASE_MIPS3D, ISA_MIPS64, CPU_MIPS64 },
+
+ /* MIPS 64 Release 2 */
/* Broadcom SB-1 CPU core */
- { "sb1", 0, ISA_MIPS64, CPU_SB1 },
+ { "sb1", MIPS_CPU_ASE_MIPS3D | MIPS_CPU_ASE_MDMX,
+ ISA_MIPS64, CPU_SB1 },
+ /* Broadcom SB-1A CPU core */
+ { "sb1a", MIPS_CPU_ASE_MIPS3D | MIPS_CPU_ASE_MDMX,
+ ISA_MIPS64, CPU_SB1 },
/* End marker */
{ NULL, 0, 0, 0 }
@@ -14413,7 +14933,7 @@ mips_cpu_info_from_isa (int isa)
int i;
for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
- if (mips_cpu_info_table[i].is_isa
+ if ((mips_cpu_info_table[i].flags & MIPS_CPU_IS_ISA)
&& isa == mips_cpu_info_table[i].isa)
return (&mips_cpu_info_table[i]);
@@ -14507,9 +15027,15 @@ MIPS options:\n\
-mips16 generate mips16 instructions\n\
-no-mips16 do not generate mips16 instructions\n"));
fprintf (stream, _("\
+-msmartmips generate smartmips instructions\n\
+-mno-smartmips do not generate smartmips instructions\n"));
+ fprintf (stream, _("\
-mdsp generate DSP instructions\n\
-mno-dsp do not generate DSP instructions\n"));
fprintf (stream, _("\
+-mdspr2 generate DSP R2 instructions\n\
+-mno-dspr2 do not generate DSP R2 instructions\n"));
+ fprintf (stream, _("\
-mmt generate MT instructions\n\
-mno-mt do not generate MT instructions\n"));
fprintf (stream, _("\
@@ -14517,7 +15043,6 @@ MIPS options:\n\
-mfix-vr4130 work around VR4130 mflo/mfhi errata\n\
-mgp32 use 32-bit GPRs, regardless of the chosen ISA\n\
-mfp32 use 32-bit FPRs, regardless of the chosen ISA\n\
--mno-shared optimize output for executables\n\
-msym32 assume all symbols have 32-bit values\n\
-O0 remove unneeded NOPs, do not swap branches\n\
-O remove unneeded NOPs and swap branches\n\
@@ -14527,11 +15052,12 @@ MIPS options:\n\
#ifdef OBJ_ELF
fprintf (stream, _("\
-KPIC, -call_shared generate SVR4 position independent code\n\
+-mvxworks-pic generate VxWorks position independent code\n\
-non_shared do not generate position independent code\n\
-xgot assume a 32 bit GOT\n\
-mpdr, -mno-pdr enable/disable creation of .pdr sections\n\
-mshared, -mno-shared disable/enable .cpload optimization for\n\
- non-shared code\n\
+ position dependent (non shared) code\n\
-mabi=ABI create ABI conformant object file for:\n"));
first = 1;
@@ -14582,3 +15108,14 @@ mips_cfi_frame_initial_instructions (void)
cfi_add_CFA_def_cfa_register (SP);
}
+int
+tc_mips_regname_to_dw2regnum (char *regname)
+{
+ unsigned int regnum = -1;
+ unsigned int reg;
+
+ if (reg_lookup (&regname, RTYPE_GP | RTYPE_NUM, &reg))
+ regnum = reg;
+
+ return regnum;
+}
diff --git a/gas/config/tc-mips.h b/gas/config/tc-mips.h
index 5665d3decdd7..117417cfed5f 100644
--- a/gas/config/tc-mips.h
+++ b/gas/config/tc-mips.h
@@ -1,6 +1,6 @@
/* tc-mips.h -- header file for tc-mips.c.
- Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
+ Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2006 Free Software Foundation, Inc.
Contributed by the OSF and Ralph Campbell.
Written by Keith Knowles and Ralph Campbell, working independently.
Modified for ECOFF support by Ian Lance Taylor of Cygnus Support.
@@ -58,6 +58,12 @@ extern void mips_handle_align (struct frag *);
#define MAX_MEM_FOR_RS_ALIGN_CODE (1 + 2)
+struct insn_label_list;
+#define TC_SEGMENT_INFO_TYPE struct insn_label_list *
+
+/* This field is nonzero if the symbol is the target of a MIPS16 jump. */
+#define TC_SYMFIELD_TYPE int
+
/* Tell assembler that we have an itbl_mips.h header file to include. */
#define HAVE_ITBL_CPU
@@ -149,6 +155,7 @@ extern void mips_emit_delays (void);
extern void mips_enable_auto_align (void);
#define md_elf_section_change_hook() mips_enable_auto_align()
+enum dwarf2_format;
extern enum dwarf2_format mips_dwarf2_format (void);
#define DWARF2_FORMAT() mips_dwarf2_format ()
@@ -160,7 +167,10 @@ extern int mips_dwarf2_addr_size (void);
#define tc_cfi_frame_initial_instructions mips_cfi_frame_initial_instructions
extern void mips_cfi_frame_initial_instructions (void);
+#define tc_regname_to_dw2regnum tc_mips_regname_to_dw2regnum
+extern int tc_mips_regname_to_dw2regnum (char *regname);
+
#define DWARF2_DEFAULT_RETURN_COLUMN 31
-#define DWARF2_CIE_DATA_ALIGNMENT -4
+#define DWARF2_CIE_DATA_ALIGNMENT (-4)
#endif /* TC_MIPS */
diff --git a/gas/config/tc-mmix.c b/gas/config/tc-mmix.c
index c1a8d536b18c..ff522f62ad75 100644
--- a/gas/config/tc-mmix.c
+++ b/gas/config/tc-mmix.c
@@ -1,5 +1,6 @@
/* tc-mmix.c -- Assembler for Don Knuth's MMIX.
- Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation.
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation.
This file is part of GAS, the GNU Assembler.
@@ -26,11 +27,9 @@
compatible syntax, but the main purpose is to serve GCC. */
-#include <stdio.h>
#include <limits.h>
#include "as.h"
#include "subsegs.h"
-#include "bfd.h"
#include "elf/mmix.h"
#include "opcode/mmix.h"
#include "safe-ctype.h"
diff --git a/gas/config/tc-mmix.h b/gas/config/tc-mmix.h
index 61bc881d1268..b4ab0c7482fc 100644
--- a/gas/config/tc-mmix.h
+++ b/gas/config/tc-mmix.h
@@ -221,3 +221,6 @@ extern void mmix_md_do_align (int, char *, int, int);
sequences sprinkled in, we can get unaligned DWARF2 offsets, so let's
explicitly say one byte. */
#define DWARF2_LINE_MIN_INSN_LENGTH 1
+
+/* This target is buggy, and sets fix size too large. */
+#define TC_FX_SIZE_SLACK(FIX) 6
diff --git a/gas/config/tc-mn10200.c b/gas/config/tc-mn10200.c
index 909652ef6e0e..9eecf47ea58a 100644
--- a/gas/config/tc-mn10200.c
+++ b/gas/config/tc-mn10200.c
@@ -19,7 +19,6 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
diff --git a/gas/config/tc-mn10300.c b/gas/config/tc-mn10300.c
index 102c2eacef84..306e90c12e72 100644
--- a/gas/config/tc-mn10300.c
+++ b/gas/config/tc-mn10300.c
@@ -1,6 +1,6 @@
/* tc-mn10300.c -- Assembler code for the Matsushita 10300
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- 2006 Free Software Foundation, Inc.
+ 2006, 2007 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -19,7 +19,6 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
@@ -692,7 +691,7 @@ void
md_show_usage (stream)
FILE *stream;
{
- fprintf (stream, _("MN10300 options:\n\
+ fprintf (stream, _("MN10300 assembler options:\n\
none yet\n"));
}
@@ -1020,7 +1019,7 @@ md_convert_frag (abfd, sec, fragP)
int offset = fragP->fr_fix;
fragP->fr_literal[offset] = 0xcc;
- fix_new (fragP, fragP->fr_fix + 1, 4, fragP->fr_symbol,
+ fix_new (fragP, fragP->fr_fix + 1, 2, fragP->fr_symbol,
fragP->fr_offset + 1, 1, BFD_RELOC_16_PCREL);
fragP->fr_var = 0;
fragP->fr_fix += 3;
@@ -2281,17 +2280,8 @@ keep_going:
abort ();
}
- /* Convert the size of the reloc into what fix_new_exp wants. */
- reloc_size = reloc_size / 8;
- if (reloc_size == 8)
- reloc_size = 0;
- else if (reloc_size == 16)
- reloc_size = 1;
- else if (reloc_size == 32)
- reloc_size = 2;
-
fixP = fix_new_exp (frag_now, f - frag_now->fr_literal + offset,
- reloc_size, &fixups[i].exp, pcrel,
+ reloc_size / 8, &fixups[i].exp, pcrel,
((bfd_reloc_code_real_type) reloc));
if (pcrel)
@@ -2407,7 +2397,8 @@ tc_gen_reloc (seg, fixp)
break;
default:
- reloc->sym_ptr_ptr = (asymbol **) &bfd_abs_symbol;
+ reloc->sym_ptr_ptr
+ = (asymbol **) bfd_abs_section_ptr->symbol_ptr_ptr;
return reloc;
}
}
@@ -2545,7 +2536,7 @@ bfd_boolean
mn10300_fix_adjustable (fixp)
struct fix *fixp;
{
- if (! TC_RELOC_RTSYM_LOC_FIXUP (fixp))
+ if (TC_FORCE_RELOCATION_LOCAL (fixp))
return 0;
if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
diff --git a/gas/config/tc-mn10300.h b/gas/config/tc-mn10300.h
index dff663d29adf..8f5c81356de6 100644
--- a/gas/config/tc-mn10300.h
+++ b/gas/config/tc-mn10300.h
@@ -1,5 +1,5 @@
/* tc-mn10300.h -- Header file for tc-mn10300.c.
- Copyright 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -26,15 +26,15 @@
#define DIFF_EXPR_OK
#define GLOBAL_OFFSET_TABLE_NAME "_GLOBAL_OFFSET_TABLE_"
-#define TC_RELOC_RTSYM_LOC_FIXUP(FIX) \
- ((FIX)->fx_r_type != BFD_RELOC_32_PLT_PCREL \
- && (FIX)->fx_r_type != BFD_RELOC_MN10300_GOT32 \
- && (FIX)->fx_r_type != BFD_RELOC_32_GOT_PCREL \
- && ((FIX)->fx_addsy == NULL \
- || (! S_IS_EXTERNAL ((FIX)->fx_addsy) \
- && ! S_IS_WEAK ((FIX)->fx_addsy) \
- && S_IS_DEFINED ((FIX)->fx_addsy) \
- && ! S_IS_COMMON ((FIX)->fx_addsy))))
+#define TC_FORCE_RELOCATION(FIX) \
+ (generic_force_reloc (FIX))
+
+#define TC_FORCE_RELOCATION_LOCAL(FIX) \
+ (!(FIX)->fx_pcrel \
+ || (FIX)->fx_r_type == BFD_RELOC_32_PLT_PCREL \
+ || (FIX)->fx_r_type == BFD_RELOC_MN10300_GOT32 \
+ || (FIX)->fx_r_type == BFD_RELOC_32_GOT_PCREL \
+ || TC_FORCE_RELOCATION (FIX))
#define md_parse_name(name, exprP, mode, nextcharP) \
mn10300_parse_name ((name), (exprP), (mode), (nextcharP))
diff --git a/gas/config/tc-msp430.c b/gas/config/tc-msp430.c
index 6978b85a3e1a..6bf21549d456 100644
--- a/gas/config/tc-msp430.c
+++ b/gas/config/tc-msp430.c
@@ -1,6 +1,7 @@
/* tc-msp430.c -- Assembler code for the Texas Instruments MSP430
- Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Contributed by Dmitry Diky <diwil@mail.ru>
This file is part of GAS, the GNU Assembler.
@@ -20,9 +21,6 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
#include <limits.h>
#define PUSH_1X_WORKAROUND
@@ -34,7 +32,7 @@
/*
We will disable polymorphs by default because it is dangerous.
- The potencial problem here is the following: assume we got the
+ The potential problem here is the following: assume we got the
following code:
jump .l1
@@ -168,7 +166,7 @@ static struct hcodes_s msp430_hcodes[] =
const char comment_chars[] = ";";
const char line_comment_chars[] = "#";
-const char line_separator_chars[] = "";
+const char line_separator_chars[] = "{";
const char EXP_CHARS[] = "eE";
const char FLT_CHARS[] = "dD";
@@ -487,7 +485,7 @@ skip_space (char * s)
return s;
}
-/* Extract one word from FROM and copy it to TO. Delimeters are ",;\n" */
+/* Extract one word from FROM and copy it to TO. Delimiters are ",;\n" */
static char *
extract_operand (char * from, char * to, int limit)
@@ -1918,7 +1916,6 @@ msp430_force_relocation_local(fixS *fixp)
return 1;
else
return (!fixp->fx_pcrel
- || fixp->fx_plt
|| generic_force_reloc(fixp));
}
diff --git a/gas/config/tc-mt.c b/gas/config/tc-mt.c
index f9a610e049c1..f2b9aa813069 100644
--- a/gas/config/tc-mt.c
+++ b/gas/config/tc-mt.c
@@ -1,5 +1,5 @@
/* tc-mt.c -- Assembler for the Morpho Technologies mt .
- Copyright (C) 2005 Free Software Foundation.
+ Copyright (C) 2005, 2006 Free Software Foundation.
This file is part of GAS, the GNU Assembler.
@@ -18,7 +18,6 @@
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <stdio.h>
#include "as.h"
#include "dwarf2dbg.h"
#include "subsegs.h"
diff --git a/gas/config/tc-ns32k.c b/gas/config/tc-ns32k.c
index 1a8c3cb3eea8..58e124e76e01 100644
--- a/gas/config/tc-ns32k.c
+++ b/gas/config/tc-ns32k.c
@@ -1,6 +1,6 @@
/* ns32k.c -- Assemble on the National Semiconductor 32k series
Copyright 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2005
+ 2001, 2002, 2003, 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -22,8 +22,6 @@
/*#define SHOW_NUM 1*//* Uncomment for debugging. */
-#include <stdio.h>
-
#include "as.h"
#include "opcode/ns32k.h"
@@ -1863,7 +1861,7 @@ convert_iif (void)
size = 4;
else
{
- as_bad (_("Displacement to large for :d"));
+ as_bad (_("Displacement too large for :d"));
size = 4;
}
}
diff --git a/gas/config/tc-openrisc.c b/gas/config/tc-openrisc.c
index 50597a7f9dc9..b27e022fecd1 100644
--- a/gas/config/tc-openrisc.c
+++ b/gas/config/tc-openrisc.c
@@ -1,5 +1,5 @@
/* tc-openrisc.c -- Assembler for the OpenRISC family.
- Copyright 2001, 2002, 2003, 2005 Free Software Foundation.
+ Copyright 2001, 2002, 2003, 2005, 2006 Free Software Foundation.
Contributed by Johan Rydberg, jrydberg@opencores.org
This file is part of GAS, the GNU Assembler.
@@ -19,7 +19,6 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "subsegs.h"
#include "symcat.h"
diff --git a/gas/config/tc-or32.c b/gas/config/tc-or32.c
index 3099e9f58626..1d98b73f9771 100644
--- a/gas/config/tc-or32.c
+++ b/gas/config/tc-or32.c
@@ -1,5 +1,6 @@
/* Assembly backend for the OpenRISC 1000.
- Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2005, 2007
+ Free Software Foundation, Inc.
Contributed by Damjan Lampret <lampret@opencores.org>.
Modified bu Johan Rydberg, <johan.rydberg@netinsight.se>.
Based upon a29k port.
@@ -616,9 +617,6 @@ md_apply_fix (fixS * fixP, valueT * val, segT seg ATTRIBUTE_UNUSED)
fixP->fx_addnumber = t_val; /* Remember value for emit_reloc. */
- know (fixP->fx_size == 4);
- know (fixP->fx_r_type < BFD_RELOC_NONE);
-
switch (fixP->fx_r_type)
{
case BFD_RELOC_32: /* XXXXXXXX pattern in a word. */
diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
index d5bdb9e643ea..a86a3bea92c6 100644
--- a/gas/config/tc-ppc.c
+++ b/gas/config/tc-ppc.c
@@ -1,6 +1,6 @@
/* tc-ppc.c -- Assemble for the PowerPC or POWER (RS/6000)
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of GAS, the GNU Assembler.
@@ -20,7 +20,6 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
@@ -85,67 +84,57 @@ static int set_target_endian = 0;
static bfd_boolean reg_names_p = TARGET_REG_NAMES_P;
-static bfd_boolean register_name PARAMS ((expressionS *));
-static void ppc_set_cpu PARAMS ((void));
-static unsigned long ppc_insert_operand
- PARAMS ((unsigned long insn, const struct powerpc_operand *operand,
- offsetT val, char *file, unsigned int line));
-static void ppc_macro PARAMS ((char *str, const struct powerpc_macro *macro));
-static void ppc_byte PARAMS ((int));
+static void ppc_macro (char *, const struct powerpc_macro *);
+static void ppc_byte (int);
#if defined (OBJ_XCOFF) || defined (OBJ_ELF)
-static int ppc_is_toc_sym PARAMS ((symbolS *sym));
-static void ppc_tc PARAMS ((int));
-static void ppc_machine PARAMS ((int));
+static void ppc_tc (int);
+static void ppc_machine (int);
#endif
#ifdef OBJ_XCOFF
-static void ppc_comm PARAMS ((int));
-static void ppc_bb PARAMS ((int));
-static void ppc_bc PARAMS ((int));
-static void ppc_bf PARAMS ((int));
-static void ppc_biei PARAMS ((int));
-static void ppc_bs PARAMS ((int));
-static void ppc_eb PARAMS ((int));
-static void ppc_ec PARAMS ((int));
-static void ppc_ef PARAMS ((int));
-static void ppc_es PARAMS ((int));
-static void ppc_csect PARAMS ((int));
-static void ppc_change_csect PARAMS ((symbolS *, offsetT));
-static void ppc_function PARAMS ((int));
-static void ppc_extern PARAMS ((int));
-static void ppc_lglobl PARAMS ((int));
-static void ppc_section PARAMS ((int));
-static void ppc_named_section PARAMS ((int));
-static void ppc_stabx PARAMS ((int));
-static void ppc_rename PARAMS ((int));
-static void ppc_toc PARAMS ((int));
-static void ppc_xcoff_cons PARAMS ((int));
-static void ppc_vbyte PARAMS ((int));
+static void ppc_comm (int);
+static void ppc_bb (int);
+static void ppc_bc (int);
+static void ppc_bf (int);
+static void ppc_biei (int);
+static void ppc_bs (int);
+static void ppc_eb (int);
+static void ppc_ec (int);
+static void ppc_ef (int);
+static void ppc_es (int);
+static void ppc_csect (int);
+static void ppc_change_csect (symbolS *, offsetT);
+static void ppc_function (int);
+static void ppc_extern (int);
+static void ppc_lglobl (int);
+static void ppc_section (int);
+static void ppc_named_section (int);
+static void ppc_stabx (int);
+static void ppc_rename (int);
+static void ppc_toc (int);
+static void ppc_xcoff_cons (int);
+static void ppc_vbyte (int);
#endif
#ifdef OBJ_ELF
-static bfd_reloc_code_real_type ppc_elf_suffix PARAMS ((char **, expressionS *));
-static void ppc_elf_cons PARAMS ((int));
-static void ppc_elf_rdata PARAMS ((int));
-static void ppc_elf_lcomm PARAMS ((int));
-static void ppc_elf_validate_fix PARAMS ((fixS *, segT));
-static void ppc_apuinfo_section_add PARAMS ((unsigned int apu, unsigned int version));
+static void ppc_elf_cons (int);
+static void ppc_elf_rdata (int);
+static void ppc_elf_lcomm (int);
#endif
#ifdef TE_PE
-static void ppc_set_current_section PARAMS ((segT));
-static void ppc_previous PARAMS ((int));
-static void ppc_pdata PARAMS ((int));
-static void ppc_ydata PARAMS ((int));
-static void ppc_reldata PARAMS ((int));
-static void ppc_rdata PARAMS ((int));
-static void ppc_ualong PARAMS ((int));
-static void ppc_znop PARAMS ((int));
-static void ppc_pe_comm PARAMS ((int));
-static void ppc_pe_section PARAMS ((int));
-static void ppc_pe_function PARAMS ((int));
-static void ppc_pe_tocd PARAMS ((int));
+static void ppc_previous (int);
+static void ppc_pdata (int);
+static void ppc_ydata (int);
+static void ppc_reldata (int);
+static void ppc_rdata (int);
+static void ppc_ualong (int);
+static void ppc_znop (int);
+static void ppc_pe_comm (int);
+static void ppc_pe_section (int);
+static void ppc_pe_function (int);
+static void ppc_pe_tocd (int);
#endif
/* Generic assembler global variables which must be defined by all
@@ -183,11 +172,9 @@ const char EXP_CHARS[] = "eE";
as in 0d1.0. */
const char FLT_CHARS[] = "dD";
-/* '+' and '-' can be used as postfix predicate predictors for conditional
- branches. So they need to be accepted as symbol characters.
- Also, anything that can start an operand needs to be mentioned here,
+/* Anything that can start an operand needs to be mentioned here,
to stop the input scrubber eating whitespace. */
-const char ppc_symbol_chars[] = "+-%[";
+const char ppc_symbol_chars[] = "%[";
/* The dwarf2 data alignment, adjusted for 32 or 64 bit. */
int ppc_cie_data_alignment;
@@ -567,14 +554,8 @@ static const struct pd_reg pre_defined_registers[] =
/* Given NAME, find the register number associated with that name, return
the integer value associated with the given name or -1 on failure. */
-static int reg_name_search
- PARAMS ((const struct pd_reg *, int, const char * name));
-
static int
-reg_name_search (regs, regcount, name)
- const struct pd_reg *regs;
- int regcount;
- const char *name;
+reg_name_search (const struct pd_reg *regs, int regcount, const char *name)
{
int middle, low, high;
int cmp;
@@ -611,8 +592,7 @@ reg_name_search (regs, regcount, name)
*/
static bfd_boolean
-register_name (expressionP)
- expressionS *expressionP;
+register_name (expressionS *expressionP)
{
int reg_number;
char *name;
@@ -679,9 +659,7 @@ static const struct pd_reg cr_names[] =
expression. */
int
-ppc_parse_name (name, expr)
- const char *name;
- expressionS *expr;
+ppc_parse_name (const char *name, expressionS *expr)
{
int val;
@@ -917,6 +895,18 @@ parse_cpu (const char *arg)
| PPC_OPCODE_64 | PPC_OPCODE_POWER4
| PPC_OPCODE_POWER5);
}
+ else if (strcmp (arg, "power6") == 0)
+ {
+ ppc_cpu = (PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC
+ | PPC_OPCODE_64 | PPC_OPCODE_POWER4
+ | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6);
+ }
+ else if (strcmp (arg, "cell") == 0)
+ {
+ ppc_cpu = (PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC
+ | PPC_OPCODE_64 | PPC_OPCODE_POWER4
+ | PPC_OPCODE_CELL);
+ }
/* -mcom means assemble for the common intersection between Power
and PowerPC. At present, we just allow the union, rather
than the intersection. */
@@ -932,9 +922,7 @@ parse_cpu (const char *arg)
}
int
-md_parse_option (c, arg)
- int c;
- char *arg;
+md_parse_option (int c, char *arg)
{
switch (c)
{
@@ -1088,8 +1076,7 @@ md_parse_option (c, arg)
}
void
-md_show_usage (stream)
- FILE *stream;
+md_show_usage (FILE *stream)
{
fprintf (stream, _("\
PowerPC options:\n\
@@ -1112,6 +1099,8 @@ PowerPC options:\n\
-mbooke, mbooke32 generate code for 32-bit PowerPC BookE\n\
-mpower4 generate code for Power4 architecture\n\
-mpower5 generate code for Power5 architecture\n\
+-mpower6 generate code for Power6 architecture\n\
+-mcell generate code for Cell Broadband Engine architecture\n\
-mcom generate code Power/PowerPC common instructions\n\
-many generate code for any architecture (PWR/PWRX/PPC)\n"));
fprintf (stream, _("\
@@ -1140,7 +1129,7 @@ PowerPC options:\n\
/* Set ppc_cpu if it is not already set. */
static void
-ppc_set_cpu ()
+ppc_set_cpu (void)
{
const char *default_os = TARGET_OS;
const char *default_cpu = TARGET_CPU;
@@ -1168,7 +1157,7 @@ ppc_set_cpu ()
are called well before md_begin, when the output file is opened. */
enum bfd_architecture
-ppc_arch ()
+ppc_arch (void)
{
const char *default_cpu = TARGET_CPU;
ppc_set_cpu ();
@@ -1190,7 +1179,7 @@ ppc_arch ()
}
unsigned long
-ppc_mach ()
+ppc_mach (void)
{
if (ppc_obj64)
return bfd_mach_ppc64;
@@ -1201,7 +1190,7 @@ ppc_mach ()
}
extern char*
-ppc_target_format ()
+ppc_target_format (void)
{
#ifdef OBJ_COFF
#ifdef TE_PE
@@ -1233,11 +1222,11 @@ ppc_target_format ()
static void
ppc_setup_opcodes (void)
{
- register const struct powerpc_opcode *op;
+ const struct powerpc_opcode *op;
const struct powerpc_opcode *op_end;
const struct powerpc_macro *macro;
const struct powerpc_macro *macro_end;
- bfd_boolean dup_insn = FALSE;
+ bfd_boolean bad_insn = FALSE;
if (ppc_hash != NULL)
hash_die (ppc_hash);
@@ -1247,10 +1236,77 @@ ppc_setup_opcodes (void)
/* Insert the opcodes into a hash table. */
ppc_hash = hash_new ();
+ if (ENABLE_CHECKING)
+ {
+ unsigned int i;
+
+ /* Check operand masks. Code here and in the disassembler assumes
+ all the 1's in the mask are contiguous. */
+ for (i = 0; i < num_powerpc_operands; ++i)
+ {
+ unsigned long mask = powerpc_operands[i].bitm;
+ unsigned long right_bit;
+ unsigned int j;
+
+ right_bit = mask & -mask;
+ mask += right_bit;
+ right_bit = mask & -mask;
+ if (mask != right_bit)
+ {
+ as_bad (_("powerpc_operands[%d].bitm invalid"), i);
+ bad_insn = TRUE;
+ }
+ for (j = i + 1; j < num_powerpc_operands; ++j)
+ if (memcmp (&powerpc_operands[i], &powerpc_operands[j],
+ sizeof (powerpc_operands[0])) == 0)
+ {
+ as_bad (_("powerpc_operands[%d] duplicates powerpc_operands[%d]"),
+ j, i);
+ bad_insn = TRUE;
+ }
+ }
+ }
+
op_end = powerpc_opcodes + powerpc_num_opcodes;
for (op = powerpc_opcodes; op < op_end; op++)
{
- know ((op->opcode & op->mask) == op->opcode);
+ if (ENABLE_CHECKING)
+ {
+ const unsigned char *o;
+ unsigned long omask = op->mask;
+
+ /* The mask had better not trim off opcode bits. */
+ if ((op->opcode & omask) != op->opcode)
+ {
+ as_bad (_("mask trims opcode bits for %s"),
+ op->name);
+ bad_insn = TRUE;
+ }
+
+ /* The operands must not overlap the opcode or each other. */
+ for (o = op->operands; *o; ++o)
+ if (*o >= num_powerpc_operands)
+ {
+ as_bad (_("operand index error for %s"),
+ op->name);
+ bad_insn = TRUE;
+ }
+ else
+ {
+ const struct powerpc_operand *operand = &powerpc_operands[*o];
+ if (operand->shift >= 0)
+ {
+ unsigned long mask = operand->bitm << operand->shift;
+ if (omask & mask)
+ {
+ as_bad (_("operand %d overlap in %s"),
+ (int) (o - op->operands), op->name);
+ bad_insn = TRUE;
+ }
+ omask |= mask;
+ }
+ }
+ }
if ((op->flags & ppc_cpu & ~(PPC_OPCODE_32 | PPC_OPCODE_64)) != 0
&& ((op->flags & (PPC_OPCODE_32 | PPC_OPCODE_64)) == 0
@@ -1270,11 +1326,14 @@ ppc_setup_opcodes (void)
== (ppc_cpu & PPC_OPCODE_POWER4)))
&& ((op->flags & PPC_OPCODE_POWER5) == 0
|| ((op->flags & PPC_OPCODE_POWER5)
- == (ppc_cpu & PPC_OPCODE_POWER5))))
+ == (ppc_cpu & PPC_OPCODE_POWER5)))
+ && ((op->flags & PPC_OPCODE_POWER6) == 0
+ || ((op->flags & PPC_OPCODE_POWER6)
+ == (ppc_cpu & PPC_OPCODE_POWER6))))
{
const char *retval;
- retval = hash_insert (ppc_hash, op->name, (PTR) op);
+ retval = hash_insert (ppc_hash, op->name, (void *) op);
if (retval != NULL)
{
/* Ignore Power duplicates for -m601. */
@@ -1282,16 +1341,16 @@ ppc_setup_opcodes (void)
&& (op->flags & PPC_OPCODE_POWER) != 0)
continue;
- as_bad (_("Internal assembler error for instruction %s"),
+ as_bad (_("duplicate instruction %s"),
op->name);
- dup_insn = TRUE;
+ bad_insn = TRUE;
}
}
}
if ((ppc_cpu & PPC_OPCODE_ANY) != 0)
for (op = powerpc_opcodes; op < op_end; op++)
- hash_insert (ppc_hash, op->name, (PTR) op);
+ hash_insert (ppc_hash, op->name, (void *) op);
/* Insert the macros into a hash table. */
ppc_macro_hash = hash_new ();
@@ -1303,16 +1362,16 @@ ppc_setup_opcodes (void)
{
const char *retval;
- retval = hash_insert (ppc_macro_hash, macro->name, (PTR) macro);
+ retval = hash_insert (ppc_macro_hash, macro->name, (void *) macro);
if (retval != (const char *) NULL)
{
- as_bad (_("Internal assembler error for macro %s"), macro->name);
- dup_insn = TRUE;
+ as_bad (_("duplicate macro %s"), macro->name);
+ bad_insn = TRUE;
}
}
}
- if (dup_insn)
+ if (bad_insn)
abort ();
}
@@ -1321,7 +1380,7 @@ ppc_setup_opcodes (void)
opened. */
void
-md_begin ()
+md_begin (void)
{
ppc_set_cpu ();
@@ -1364,7 +1423,7 @@ md_begin ()
}
void
-ppc_cleanup ()
+ppc_cleanup (void)
{
#ifdef OBJ_ELF
if (ppc_apuinfo_list == NULL)
@@ -1426,54 +1485,60 @@ ppc_cleanup ()
/* Insert an operand value into an instruction. */
static unsigned long
-ppc_insert_operand (insn, operand, val, file, line)
- unsigned long insn;
- const struct powerpc_operand *operand;
- offsetT val;
- char *file;
- unsigned int line;
+ppc_insert_operand (unsigned long insn,
+ const struct powerpc_operand *operand,
+ offsetT val,
+ char *file,
+ unsigned int line)
{
- if (operand->bits != 32)
+ long min, max, right;
+
+ max = operand->bitm;
+ right = max & -max;
+ min = 0;
+
+ if ((operand->flags & PPC_OPERAND_SIGNED) != 0)
{
- long min, max;
- offsetT test;
+ if ((operand->flags & PPC_OPERAND_SIGNOPT) == 0)
+ max = (max >> 1) & -right;
+ min = ~max & -right;
+ }
- if ((operand->flags & PPC_OPERAND_SIGNED) != 0)
- {
- if ((operand->flags & PPC_OPERAND_SIGNOPT) != 0)
- max = (1 << operand->bits) - 1;
- else
- max = (1 << (operand->bits - 1)) - 1;
- min = - (1 << (operand->bits - 1));
+ if ((operand->flags & PPC_OPERAND_PLUS1) != 0)
+ max++;
- if (!ppc_obj64)
- {
- /* Some people write 32 bit hex constants with the sign
- extension done by hand. This shouldn't really be
- valid, but, to permit this code to assemble on a 64
- bit host, we sign extend the 32 bit value. */
- if (val > 0
- && (val & (offsetT) 0x80000000) != 0
- && (val & (offsetT) 0xffffffff) == val)
- {
- val -= 0x80000000;
- val -= 0x80000000;
- }
- }
- }
- else
- {
- max = (1 << operand->bits) - 1;
- min = 0;
- }
+ if ((operand->flags & PPC_OPERAND_NEGATIVE) != 0)
+ {
+ long tmp = min;
+ min = -max;
+ max = -tmp;
+ }
- if ((operand->flags & PPC_OPERAND_NEGATIVE) != 0)
- test = - val;
- else
- test = val;
+ if (min <= max)
+ {
+ /* Some people write constants with the sign extension done by
+ hand but only up to 32 bits. This shouldn't really be valid,
+ but, to permit this code to assemble on a 64-bit host, we
+ sign extend the 32-bit value to 64 bits if so doing makes the
+ value valid. */
+ if (val > max
+ && (offsetT) (val - 0x80000000 - 0x80000000) >= min
+ && (offsetT) (val - 0x80000000 - 0x80000000) <= max
+ && ((val - 0x80000000 - 0x80000000) & (right - 1)) == 0)
+ val = val - 0x80000000 - 0x80000000;
- if (test < (offsetT) min || test > (offsetT) max)
- as_bad_value_out_of_range (_("operand"), test, (offsetT) min, (offsetT) max, file, line);
+ /* Similarly, people write expressions like ~(1<<15), and expect
+ this to be OK for a 32-bit unsigned value. */
+ else if (val < min
+ && (offsetT) (val + 0x80000000 + 0x80000000) >= min
+ && (offsetT) (val + 0x80000000 + 0x80000000) <= max
+ && ((val + 0x80000000 + 0x80000000) & (right - 1)) == 0)
+ val = val + 0x80000000 + 0x80000000;
+
+ else if (val < min
+ || val > max
+ || (val & (right - 1)) != 0)
+ as_bad_value_out_of_range (_("operand"), val, min, max, file, line);
}
if (operand->insert)
@@ -1486,8 +1551,7 @@ ppc_insert_operand (insn, operand, val, file, line)
as_bad_where (file, line, errmsg);
}
else
- insn |= (((long) val & ((1 << operand->bits) - 1))
- << operand->shift);
+ insn |= ((long) val & operand->bitm) << operand->shift;
return insn;
}
@@ -1496,9 +1560,7 @@ ppc_insert_operand (insn, operand, val, file, line)
#ifdef OBJ_ELF
/* Parse @got, etc. and return the desired relocation. */
static bfd_reloc_code_real_type
-ppc_elf_suffix (str_p, exp_p)
- char **str_p;
- expressionS *exp_p;
+ppc_elf_suffix (char **str_p, expressionS *exp_p)
{
struct map_bfd {
char *string;
@@ -1676,8 +1738,7 @@ ppc_elf_suffix (str_p, exp_p)
/* Like normal .long/.short/.word, except support @got, etc.
Clobbers input_line_pointer, checks end-of-line. */
static void
-ppc_elf_cons (nbytes)
- register int nbytes; /* 1=.byte, 2=.word, 4=.long, 8=.llong. */
+ppc_elf_cons (int nbytes /* 1=.byte, 2=.word, 4=.long, 8=.llong */)
{
expressionS exp;
bfd_reloc_code_real_type reloc;
@@ -1732,8 +1793,7 @@ ppc_elf_cons (nbytes)
/* Solaris pseduo op to change to the .rodata section. */
static void
-ppc_elf_rdata (xxx)
- int xxx;
+ppc_elf_rdata (int xxx)
{
char *save_line = input_line_pointer;
static char section[] = ".rodata\n";
@@ -1747,14 +1807,13 @@ ppc_elf_rdata (xxx)
/* Pseudo op to make file scope bss items. */
static void
-ppc_elf_lcomm (xxx)
- int xxx ATTRIBUTE_UNUSED;
+ppc_elf_lcomm (int xxx ATTRIBUTE_UNUSED)
{
- register char *name;
- register char c;
- register char *p;
+ char *name;
+ char c;
+ char *p;
offsetT size;
- register symbolS *symbolP;
+ symbolS *symbolP;
offsetT align;
segT old_sec;
int old_subsec;
@@ -1857,9 +1916,7 @@ ppc_elf_lcomm (xxx)
fixups for word relocations in writable segments, so we can adjust
them at runtime. */
static void
-ppc_elf_validate_fix (fixp, seg)
- fixS *fixp;
- segT seg;
+ppc_elf_validate_fix (fixS *fixp, segT seg)
{
if (fixp->fx_done || fixp->fx_pcrel)
return;
@@ -1904,7 +1961,7 @@ ppc_elf_validate_fix (fixp, seg)
function descriptor sym if the corresponding code sym is used. */
void
-ppc_frob_file_before_adjust ()
+ppc_frob_file_before_adjust (void)
{
symbolS *symp;
asection *toc;
@@ -1987,8 +2044,7 @@ enum toc_size_qualifier
};
static int
-parse_toc_entry (toc_kind)
- enum toc_size_qualifier *toc_kind;
+parse_toc_entry (enum toc_size_qualifier *toc_kind)
{
char *start;
char *toc_spec;
@@ -2052,8 +2108,7 @@ parse_toc_entry (toc_kind)
#ifdef OBJ_ELF
#define APUID(a,v) ((((a) & 0xffff) << 16) | ((v) & 0xffff))
static void
-ppc_apuinfo_section_add (apu, version)
- unsigned int apu, version;
+ppc_apuinfo_section_add (unsigned int apu, unsigned int version)
{
unsigned int i;
@@ -2099,8 +2154,7 @@ struct ppc_fixup
/* This routine is called for each instruction to be assembled. */
void
-md_assemble (str)
- char *str;
+md_assemble (char *str)
{
char *s;
const struct powerpc_opcode *opcode;
@@ -2724,16 +2778,14 @@ md_assemble (str)
around operands here. */
static void
-ppc_macro (str, macro)
- char *str;
- const struct powerpc_macro *macro;
+ppc_macro (char *str, const struct powerpc_macro *macro)
{
char *operands[10];
unsigned int count;
char *s;
unsigned int len;
const char *format;
- int arg;
+ unsigned int arg;
char *send;
char *complete;
@@ -2771,7 +2823,7 @@ ppc_macro (str, macro)
else
{
arg = strtol (format + 1, &send, 10);
- know (send != format && arg >= 0 && arg < count);
+ know (send != format && arg < count);
len += strlen (operands[arg]);
format = send;
}
@@ -2802,9 +2854,7 @@ ppc_macro (str, macro)
/* For ELF, add support for SHF_EXCLUDE and SHT_ORDERED. */
int
-ppc_section_letter (letter, ptr_msg)
- int letter;
- char **ptr_msg;
+ppc_section_letter (int letter, char **ptr_msg)
{
if (letter == 'e')
return SHF_EXCLUDE;
@@ -2814,9 +2864,7 @@ ppc_section_letter (letter, ptr_msg)
}
int
-ppc_section_word (str, len)
- char *str;
- size_t len;
+ppc_section_word (char *str, size_t len)
{
if (len == 7 && strncmp (str, "exclude", 7) == 0)
return SHF_EXCLUDE;
@@ -2825,9 +2873,7 @@ ppc_section_word (str, len)
}
int
-ppc_section_type (str, len)
- char *str;
- size_t len;
+ppc_section_type (char *str, size_t len)
{
if (len == 7 && strncmp (str, "ordered", 7) == 0)
return SHT_ORDERED;
@@ -2836,10 +2882,7 @@ ppc_section_type (str, len)
}
int
-ppc_section_flags (flags, attr, type)
- int flags;
- int attr;
- int type;
+ppc_section_flags (int flags, int attr, int type)
{
if (type == SHT_ORDERED)
flags |= SEC_ALLOC | SEC_LOAD | SEC_SORT_ENTRIES;
@@ -2858,8 +2901,7 @@ ppc_section_flags (flags, attr, type)
pseudo-op, but it can also take a single ASCII string. */
static void
-ppc_byte (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_byte (int ignore ATTRIBUTE_UNUSED)
{
if (*input_line_pointer != '\"')
{
@@ -2903,8 +2945,7 @@ static bfd_boolean ppc_stab_symbol;
aligns .comm and .lcomm to 4 bytes. */
static void
-ppc_comm (lcomm)
- int lcomm;
+ppc_comm (int lcomm)
{
asection *current_seg = now_seg;
subsegT current_subseg = now_subseg;
@@ -3058,8 +3099,7 @@ ppc_comm (lcomm)
optional second argument is the alignment (the default is 2). */
static void
-ppc_csect (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_csect (int ignore ATTRIBUTE_UNUSED)
{
char *name;
char endc;
@@ -3094,9 +3134,7 @@ ppc_csect (ignore)
/* Change to a different csect. */
static void
-ppc_change_csect (sym, align)
- symbolS *sym;
- offsetT align;
+ppc_change_csect (symbolS *sym, offsetT align)
{
if (S_IS_DEFINED (sym))
subseg_set (S_GET_SEGMENT (sym), symbol_get_tc (sym)->subseg);
@@ -3196,8 +3234,7 @@ ppc_change_csect (sym, align)
convenience of people who aren't used to XCOFF. */
static void
-ppc_section (type)
- int type;
+ppc_section (int type)
{
const char *name;
symbolS *sym;
@@ -3221,8 +3258,7 @@ ppc_section (type)
we do permit the user to name the text or data section. */
static void
-ppc_named_section (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_named_section (int ignore ATTRIBUTE_UNUSED)
{
char *user_name;
const char *real_name;
@@ -3256,8 +3292,7 @@ ppc_named_section (ignore)
/* The .extern pseudo-op. We create an undefined symbol. */
static void
-ppc_extern (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_extern (int ignore ATTRIBUTE_UNUSED)
{
char *name;
char endc;
@@ -3275,8 +3310,7 @@ ppc_extern (ignore)
/* The .lglobl pseudo-op. Keep the symbol in the symbol table. */
static void
-ppc_lglobl (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_lglobl (int ignore ATTRIBUTE_UNUSED)
{
char *name;
char endc;
@@ -3298,8 +3332,7 @@ ppc_lglobl (ignore)
although I don't know why it bothers. */
static void
-ppc_rename (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_rename (int ignore ATTRIBUTE_UNUSED)
{
char *name;
char endc;
@@ -3334,8 +3367,7 @@ ppc_rename (ignore)
always zero, and I am assuming it is the type. */
static void
-ppc_stabx (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_stabx (int ignore ATTRIBUTE_UNUSED)
{
char *name;
int len;
@@ -3461,8 +3493,7 @@ ppc_stabx (ignore)
gets an aux entry like that used for a csect. */
static void
-ppc_function (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_function (int ignore ATTRIBUTE_UNUSED)
{
char *name;
char endc;
@@ -3555,8 +3586,7 @@ ppc_function (ignore)
static symbolS *saved_bi_sym = 0;
static void
-ppc_bf (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_bf (int ignore ATTRIBUTE_UNUSED)
{
symbolS *sym;
@@ -3591,8 +3621,7 @@ ppc_bf (ignore)
most recent ".bf" symbol. */
static void
-ppc_ef (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_ef (int ignore ATTRIBUTE_UNUSED)
{
symbolS *sym;
@@ -3616,8 +3645,7 @@ ppc_ef (ignore)
is encountered. */
static void
-ppc_biei (ei)
- int ei;
+ppc_biei (int ei)
{
static symbolS *last_biei;
@@ -3671,8 +3699,7 @@ ppc_biei (ei)
.bs symbol is the index of this csect symbol. */
static void
-ppc_bs (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_bs (int ignore ATTRIBUTE_UNUSED)
{
char *name;
char endc;
@@ -3707,8 +3734,7 @@ ppc_bs (ignore)
/* The .es pseudo-op. Generate a C_ESTART symbol named .es. */
static void
-ppc_es (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_es (int ignore ATTRIBUTE_UNUSED)
{
symbolS *sym;
@@ -3732,8 +3758,7 @@ ppc_es (ignore)
line number. */
static void
-ppc_bb (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_bb (int ignore ATTRIBUTE_UNUSED)
{
symbolS *sym;
@@ -3759,8 +3784,7 @@ ppc_bb (ignore)
line number. */
static void
-ppc_eb (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_eb (int ignore ATTRIBUTE_UNUSED)
{
symbolS *sym;
@@ -3784,8 +3808,7 @@ ppc_eb (ignore)
specified name. */
static void
-ppc_bc (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_bc (int ignore ATTRIBUTE_UNUSED)
{
char *name;
int len;
@@ -3807,8 +3830,7 @@ ppc_bc (ignore)
/* The .ec pseudo-op. This just creates a C_ECOMM symbol. */
static void
-ppc_ec (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_ec (int ignore ATTRIBUTE_UNUSED)
{
symbolS *sym;
@@ -3827,8 +3849,7 @@ ppc_ec (ignore)
/* The .toc pseudo-op. Switch to the .toc subsegment. */
static void
-ppc_toc (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_toc (int ignore ATTRIBUTE_UNUSED)
{
if (ppc_toc_csect != (symbolS *) NULL)
subseg_set (data_section, symbol_get_tc (ppc_toc_csect)->subseg);
@@ -3874,8 +3895,7 @@ ppc_toc (ignore)
.short pseudo-op, and we want to be compatible. */
static void
-ppc_xcoff_cons (log_size)
- int log_size;
+ppc_xcoff_cons (int log_size)
{
frag_align (log_size, 0, 0);
record_alignment (now_seg, log_size);
@@ -3883,8 +3903,7 @@ ppc_xcoff_cons (log_size)
}
static void
-ppc_vbyte (dummy)
- int dummy ATTRIBUTE_UNUSED;
+ppc_vbyte (int dummy ATTRIBUTE_UNUSED)
{
expressionS exp;
int byte_count;
@@ -3927,8 +3946,7 @@ ppc_vbyte (dummy)
the first argument is simply ignored. */
static void
-ppc_tc (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_tc (int ignore ATTRIBUTE_UNUSED)
{
#ifdef OBJ_XCOFF
@@ -4014,8 +4032,7 @@ ppc_tc (ignore)
/* Pseudo-op .machine. */
static void
-ppc_machine (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_machine (int ignore ATTRIBUTE_UNUSED)
{
char *cpu_string;
#define MAX_HISTORY 100
@@ -4078,8 +4095,7 @@ ppc_machine (ignore)
/* See whether a symbol is in the TOC section. */
static int
-ppc_is_toc_sym (sym)
- symbolS *sym;
+ppc_is_toc_sym (symbolS *sym)
{
#ifdef OBJ_XCOFF
return symbol_get_tc (sym)->class == XMC_TC;
@@ -4100,8 +4116,7 @@ ppc_is_toc_sym (sym)
/* Set the current section. */
static void
-ppc_set_current_section (new)
- segT new;
+ppc_set_current_section (segT new)
{
ppc_previous_section = ppc_current_section;
ppc_current_section = new;
@@ -4113,8 +4128,7 @@ ppc_set_current_section (new)
warnings: "No previous section" */
static void
-ppc_previous (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_previous (int ignore ATTRIBUTE_UNUSED)
{
symbolS *tmp;
@@ -4145,8 +4159,7 @@ ppc_previous (ignore)
handling, debugging, etc. */
static void
-ppc_pdata (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_pdata (int ignore ATTRIBUTE_UNUSED)
{
if (pdata_section == 0)
{
@@ -4180,8 +4193,7 @@ ppc_pdata (ignore)
debugging, etc. */
static void
-ppc_ydata (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_ydata (int ignore ATTRIBUTE_UNUSED)
{
if (ydata_section == 0)
{
@@ -4217,8 +4229,7 @@ ppc_ydata (ignore)
function descriptors, etc. */
static void
-ppc_reldata (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_reldata (int ignore ATTRIBUTE_UNUSED)
{
if (reldata_section == 0)
{
@@ -4248,8 +4259,7 @@ ppc_reldata (ignore)
3 - double word aligned (that would be 4 byte boundary) */
static void
-ppc_rdata (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_rdata (int ignore ATTRIBUTE_UNUSED)
{
if (rdata_section == 0)
{
@@ -4275,8 +4285,7 @@ ppc_rdata (ignore)
warnings: None */
static void
-ppc_ualong (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_ualong (int ignore ATTRIBUTE_UNUSED)
{
/* Try for long. */
cons (4);
@@ -4290,8 +4299,7 @@ ppc_ualong (ignore)
warnings: Missing symbol name */
static void
-ppc_znop (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_znop (int ignore ATTRIBUTE_UNUSED)
{
unsigned long insn;
const struct powerpc_opcode *opcode;
@@ -4343,14 +4351,13 @@ ppc_znop (ignore)
warnings: */
static void
-ppc_pe_comm (lcomm)
- int lcomm;
+ppc_pe_comm (int lcomm)
{
- register char *name;
- register char c;
- register char *p;
+ char *name;
+ char c;
+ char *p;
offsetT temp;
- register symbolS *symbolP;
+ symbolS *symbolP;
offsetT align;
name = input_line_pointer;
@@ -4473,8 +4480,7 @@ ppc_pe_comm (lcomm)
*/
void
-ppc_pe_section (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_pe_section (int ignore ATTRIBUTE_UNUSED)
{
/* Strip out the section name. */
char *section_name;
@@ -4562,7 +4568,7 @@ ppc_pe_section (ignore)
case 'R': /* Remove section at link time */
flags |= SEC_NEVER_LOAD;
break;
-
+#if IFLICT_BRAIN_DAMAGE
/* Section Protection */
case 'r': /* section is readable */
flags |= IMAGE_SCN_MEM_READ;
@@ -4606,7 +4612,7 @@ ppc_pe_section (ignore)
flags |= IMAGE_SCN_ALIGN_64BYTES;
align = 6;
break;
-
+#endif
default:
as_bad (_("unknown section attribute '%c'"),
*input_line_pointer);
@@ -4632,12 +4638,10 @@ ppc_pe_section (ignore)
}
bfd_set_section_alignment (stdoutput, sec, align);
-
}
static void
-ppc_pe_function (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_pe_function (int ignore ATTRIBUTE_UNUSED)
{
char *name;
char endc;
@@ -4659,8 +4663,7 @@ ppc_pe_function (ignore)
}
static void
-ppc_pe_tocd (ignore)
- int ignore ATTRIBUTE_UNUSED;
+ppc_pe_tocd (int ignore ATTRIBUTE_UNUSED)
{
if (tocdata_section == 0)
{
@@ -4685,8 +4688,7 @@ ppc_pe_tocd (ignore)
/* Don't adjust TOC relocs to use the section symbol. */
int
-ppc_pe_fix_adjustable (fix)
- fixS *fix;
+ppc_pe_fix_adjustable (fixS *fix)
{
return fix->fx_r_type != BFD_RELOC_PPC_TOC16;
}
@@ -4701,8 +4703,7 @@ ppc_pe_fix_adjustable (fix)
any, to use square brackets, and to be in upper case. */
char *
-ppc_canonicalize_symbol_name (name)
- char *name;
+ppc_canonicalize_symbol_name (char *name)
{
char *s;
@@ -4739,8 +4740,7 @@ ppc_canonicalize_symbol_name (name)
called whenever a new symbol is created. */
void
-ppc_symbol_new_hook (sym)
- symbolS *sym;
+ppc_symbol_new_hook (symbolS *sym)
{
struct ppc_tc_sy *tc;
const char *s;
@@ -4828,8 +4828,7 @@ ppc_symbol_new_hook (sym)
follows the csect symbol. */
void
-ppc_frob_label (sym)
- symbolS *sym;
+ppc_frob_label (symbolS *sym)
{
if (ppc_current_csect != (symbolS *) NULL)
{
@@ -4859,8 +4858,7 @@ static bfd_boolean ppc_saw_abs;
symbol table. */
int
-ppc_frob_symbol (sym)
- symbolS *sym;
+ppc_frob_symbol (symbolS *sym)
{
static symbolS *ppc_last_function;
static symbolS *set_end;
@@ -5123,7 +5121,7 @@ ppc_frob_symbol (sym)
absolute symbols. */
void
-ppc_adjust_symtab ()
+ppc_adjust_symtab (void)
{
symbolS *sym;
@@ -5169,8 +5167,7 @@ ppc_adjust_symtab ()
turn. */
void
-ppc_frob_section (sec)
- asection *sec;
+ppc_frob_section (asection *sec)
{
static bfd_vma vma = 0;
@@ -5187,10 +5184,7 @@ ppc_frob_section (sec)
returned, or NULL on OK. */
char *
-md_atof (type, litp, sizep)
- int type;
- char *litp;
- int *sizep;
+md_atof (int type, char *litp, int *sizep)
{
int prec;
LITTLENUM_TYPE words[4];
@@ -5242,10 +5236,7 @@ md_atof (type, litp, sizep)
endianness. */
void
-md_number_to_chars (buf, val, n)
- char *buf;
- valueT val;
- int n;
+md_number_to_chars (char *buf, valueT val, int n)
{
if (target_big_endian)
number_to_chars_bigendian (buf, val, n);
@@ -5256,21 +5247,22 @@ md_number_to_chars (buf, val, n)
/* Align a section (I don't know why this is machine dependent). */
valueT
-md_section_align (seg, addr)
- asection *seg;
- valueT addr;
+md_section_align (asection *seg ATTRIBUTE_UNUSED, valueT addr)
{
+#ifdef OBJ_ELF
+ return addr;
+#else
int align = bfd_get_section_alignment (stdoutput, seg);
return ((addr + (1 << align) - 1) & (-1 << align));
+#endif
}
/* We don't have any form of relaxing. */
int
-md_estimate_size_before_relax (fragp, seg)
- fragS *fragp ATTRIBUTE_UNUSED;
- asection *seg ATTRIBUTE_UNUSED;
+md_estimate_size_before_relax (fragS *fragp ATTRIBUTE_UNUSED,
+ asection *seg ATTRIBUTE_UNUSED)
{
abort ();
return 0;
@@ -5279,10 +5271,9 @@ md_estimate_size_before_relax (fragp, seg)
/* Convert a machine dependent frag. We never generate these. */
void
-md_convert_frag (abfd, sec, fragp)
- bfd *abfd ATTRIBUTE_UNUSED;
- asection *sec ATTRIBUTE_UNUSED;
- fragS *fragp ATTRIBUTE_UNUSED;
+md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED,
+ asection *sec ATTRIBUTE_UNUSED,
+ fragS *fragp ATTRIBUTE_UNUSED)
{
abort ();
}
@@ -5290,8 +5281,7 @@ md_convert_frag (abfd, sec, fragp)
/* We have no need to default values of symbols. */
symbolS *
-md_undefined_symbol (name)
- char *name ATTRIBUTE_UNUSED;
+md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
{
return 0;
}
@@ -5302,9 +5292,7 @@ md_undefined_symbol (name)
given a PC relative reloc. */
long
-md_pcrel_from_section (fixp, sec)
- fixS *fixp;
- segT sec ATTRIBUTE_UNUSED;
+md_pcrel_from_section (fixS *fixp, segT sec ATTRIBUTE_UNUSED)
{
return fixp->fx_frag->fr_address + fixp->fx_where;
}
@@ -5317,8 +5305,7 @@ md_pcrel_from_section (fixp, sec)
corresponding .tc symbol. */
int
-ppc_fix_adjustable (fix)
- fixS *fix;
+ppc_fix_adjustable (fixS *fix)
{
valueT val = resolve_symbol_value (fix->fx_addsy);
segT symseg = S_GET_SEGMENT (fix->fx_addsy);
@@ -5443,8 +5430,7 @@ ppc_fix_adjustable (fix)
between two csects in the same section. */
int
-ppc_force_relocation (fix)
- fixS *fix;
+ppc_force_relocation (fixS *fix)
{
/* At this point fix->fx_addsy should already have been converted to
a csect symbol. If the csect does not include the fragment, then
@@ -5469,8 +5455,7 @@ ppc_force_relocation (fix)
will be emitted for a fixup. */
int
-ppc_force_relocation (fix)
- fixS *fix;
+ppc_force_relocation (fixS *fix)
{
/* Branch prediction relocations must force a relocation, as must
the vtable description relocs. */
@@ -5495,8 +5480,7 @@ ppc_force_relocation (fix)
}
int
-ppc_fix_adjustable (fix)
- fixS *fix;
+ppc_fix_adjustable (fixS *fix)
{
return (fix->fx_r_type != BFD_RELOC_16_GOTOFF
&& fix->fx_r_type != BFD_RELOC_LO16_GOTOFF
@@ -5510,6 +5494,47 @@ ppc_fix_adjustable (fix)
}
#endif
+/* Implement HANDLE_ALIGN. This writes the NOP pattern into an
+ rs_align_code frag. */
+
+void
+ppc_handle_align (struct frag *fragP)
+{
+ valueT count = (fragP->fr_next->fr_address
+ - (fragP->fr_address + fragP->fr_fix));
+
+ if (count != 0 && (count & 3) == 0)
+ {
+ char *dest = fragP->fr_literal + fragP->fr_fix;
+
+ fragP->fr_var = 4;
+ md_number_to_chars (dest, 0x60000000, 4);
+
+ if ((ppc_cpu & PPC_OPCODE_POWER6) != 0)
+ {
+ /* For power6, we want the last nop to be a group terminating
+ one, "ori 1,1,0". Do this by inserting an rs_fill frag
+ immediately after this one, with its address set to the last
+ nop location. This will automatically reduce the number of
+ nops in the current frag by one. */
+ if (count > 4)
+ {
+ struct frag *group_nop = xmalloc (SIZEOF_STRUCT_FRAG + 4);
+
+ memcpy (group_nop, fragP, SIZEOF_STRUCT_FRAG);
+ group_nop->fr_address = group_nop->fr_next->fr_address - 4;
+ group_nop->fr_fix = 0;
+ group_nop->fr_offset = 1;
+ group_nop->fr_type = rs_fill;
+ fragP->fr_next = group_nop;
+ dest = group_nop->fr_literal;
+ }
+
+ md_number_to_chars (dest, 0x60210000, 4);
+ }
+ }
+}
+
/* Apply a fixup to the object code. This is called for all the
fixups we generated by the call to fix_new_exp, above. In the call
above we used a reloc code which was the largest legal reloc code
@@ -5520,10 +5545,7 @@ ppc_fix_adjustable (fix)
fixup. */
void
-md_apply_fix (fixP, valP, seg)
- fixS *fixP;
- valueT * valP;
- segT seg ATTRIBUTE_UNUSED;
+md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
{
valueT value = * valP;
@@ -5580,7 +5602,7 @@ md_apply_fix (fixP, valP, seg)
csect. Other usages, such as `.long sym', generate relocs. This
is the documented behaviour of non-TOC symbols. */
if ((operand->flags & PPC_OPERAND_PARENS) != 0
- && operand->bits == 16
+ && (operand->bitm & 0xfff0) == 0xfff0
&& operand->shift == 0
&& (operand->insert == NULL || ppc_obj64)
&& fixP->fx_addsy != NULL
@@ -5618,11 +5640,11 @@ md_apply_fix (fixP, valP, seg)
We are only prepared to turn a few of the operands into
relocs. */
if ((operand->flags & PPC_OPERAND_RELATIVE) != 0
- && operand->bits == 26
+ && operand->bitm == 0x3fffffc
&& operand->shift == 0)
fixP->fx_r_type = BFD_RELOC_PPC_B26;
else if ((operand->flags & PPC_OPERAND_RELATIVE) != 0
- && operand->bits == 16
+ && operand->bitm == 0xfffc
&& operand->shift == 0)
{
fixP->fx_r_type = BFD_RELOC_PPC_B16;
@@ -5633,11 +5655,11 @@ md_apply_fix (fixP, valP, seg)
#endif
}
else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0
- && operand->bits == 26
+ && operand->bitm == 0x3fffffc
&& operand->shift == 0)
fixP->fx_r_type = BFD_RELOC_PPC_BA26;
else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0
- && operand->bits == 16
+ && operand->bitm == 0xfffc
&& operand->shift == 0)
{
fixP->fx_r_type = BFD_RELOC_PPC_BA16;
@@ -5649,7 +5671,7 @@ md_apply_fix (fixP, valP, seg)
}
#if defined (OBJ_XCOFF) || defined (OBJ_ELF)
else if ((operand->flags & PPC_OPERAND_PARENS) != 0
- && operand->bits == 16
+ && (operand->bitm & 0xfff0) == 0xfff0
&& operand->shift == 0)
{
if (ppc_is_toc_sym (fixP->fx_addsy))
@@ -6047,9 +6069,7 @@ md_apply_fix (fixP, valP, seg)
/* Generate a reloc for a fixup. */
arelent *
-tc_gen_reloc (seg, fixp)
- asection *seg ATTRIBUTE_UNUSED;
- fixS *fixp;
+tc_gen_reloc (asection *seg ATTRIBUTE_UNUSED, fixS *fixp)
{
arelent *reloc;
@@ -6072,13 +6092,13 @@ tc_gen_reloc (seg, fixp)
}
void
-ppc_cfi_frame_initial_instructions ()
+ppc_cfi_frame_initial_instructions (void)
{
cfi_add_CFA_def_cfa (1, 0);
}
int
-tc_ppc_regname_to_dw2regnum (const char *regname)
+tc_ppc_regname_to_dw2regnum (char *regname)
{
unsigned int regnum = -1;
unsigned int i;
diff --git a/gas/config/tc-ppc.h b/gas/config/tc-ppc.h
index f7c2da619cbc..1e856497959a 100644
--- a/gas/config/tc-ppc.h
+++ b/gas/config/tc-ppc.h
@@ -1,6 +1,6 @@
/* tc-ppc.h -- Header file for tc-ppc.c.
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of GAS, the GNU Assembler.
@@ -42,15 +42,15 @@ struct fix;
/* The target BFD architecture. */
#define TARGET_ARCH (ppc_arch ())
#define TARGET_MACH (ppc_mach ())
-extern enum bfd_architecture ppc_arch PARAMS ((void));
-extern unsigned long ppc_mach PARAMS ((void));
+extern enum bfd_architecture ppc_arch (void);
+extern unsigned long ppc_mach (void);
/* Whether or not the target is big endian */
extern int target_big_endian;
/* The target BFD format. */
#define TARGET_FORMAT (ppc_target_format ())
-extern char *ppc_target_format PARAMS ((void));
+extern char *ppc_target_format (void);
/* Permit temporary numeric labels. */
#define LOCAL_LABELS_FB 1
@@ -78,31 +78,12 @@ extern char *ppc_target_format PARAMS ((void));
#define MAX_MEM_FOR_RS_ALIGN_CODE 4
#define HANDLE_ALIGN(FRAGP) \
- if ((FRAGP)->fr_type == rs_align_code) \
- { \
- valueT count = ((FRAGP)->fr_next->fr_address \
- - ((FRAGP)->fr_address + (FRAGP)->fr_fix)); \
- if (count != 0 && (count & 3) == 0) \
- { \
- char *dest = (FRAGP)->fr_literal + (FRAGP)->fr_fix; \
- \
- (FRAGP)->fr_var = 4; \
- if (target_big_endian) \
- { \
- *dest++ = 0x60; \
- *dest++ = 0; \
- *dest++ = 0; \
- *dest++ = 0; \
- } \
- else \
- { \
- *dest++ = 0; \
- *dest++ = 0; \
- *dest++ = 0; \
- *dest++ = 0x60; \
- } \
- } \
- }
+ if ((FRAGP)->fr_type == rs_align_code) \
+ ppc_handle_align (FRAGP);
+
+extern void ppc_handle_align (struct frag *);
+
+#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 0
#define md_frag_check(FRAGP) \
if ((FRAGP)->has_code \
@@ -117,7 +98,7 @@ extern char *ppc_target_format PARAMS ((void));
/* Don't adjust TOC relocs. */
#define tc_fix_adjustable(FIX) ppc_pe_fix_adjustable (FIX)
-extern int ppc_pe_fix_adjustable PARAMS ((struct fix *));
+extern int ppc_pe_fix_adjustable (struct fix *);
#endif
@@ -165,31 +146,31 @@ struct ppc_tc_sy
/* Canonicalize the symbol name. */
#define tc_canonicalize_symbol_name(name) ppc_canonicalize_symbol_name (name)
-extern char *ppc_canonicalize_symbol_name PARAMS ((char *));
+extern char *ppc_canonicalize_symbol_name (char *);
/* Get the symbol class from the name. */
#define tc_symbol_new_hook(sym) ppc_symbol_new_hook (sym)
-extern void ppc_symbol_new_hook PARAMS ((symbolS *));
+extern void ppc_symbol_new_hook (symbolS *);
/* Set the symbol class of a label based on the csect. */
#define tc_frob_label(sym) ppc_frob_label (sym)
-extern void ppc_frob_label PARAMS ((symbolS *));
+extern void ppc_frob_label (symbolS *);
/* TOC relocs requires special handling. */
#define tc_fix_adjustable(FIX) ppc_fix_adjustable (FIX)
-extern int ppc_fix_adjustable PARAMS ((struct fix *));
+extern int ppc_fix_adjustable (struct fix *);
/* We need to set the section VMA. */
#define tc_frob_section(sec) ppc_frob_section (sec)
-extern void ppc_frob_section PARAMS ((asection *));
+extern void ppc_frob_section (asection *);
/* Finish up the symbol. */
#define tc_frob_symbol(sym, punt) punt = ppc_frob_symbol (sym)
-extern int ppc_frob_symbol PARAMS ((symbolS *));
+extern int ppc_frob_symbol (symbolS *);
/* Finish up the entire symtab. */
#define tc_adjust_symtab() ppc_adjust_symtab ()
-extern void ppc_adjust_symtab PARAMS ((void));
+extern void ppc_adjust_symtab (void);
/* We also need to copy, in particular, the class of the symbol,
over what obj-coff would otherwise have copied. */
@@ -211,10 +192,10 @@ extern const char ppc_symbol_chars[];
#ifdef OBJ_ELF
/* Support for SHF_EXCLUDE and SHT_ORDERED */
-extern int ppc_section_letter PARAMS ((int, char **));
-extern int ppc_section_type PARAMS ((char *, size_t));
-extern int ppc_section_word PARAMS ((char *, size_t));
-extern int ppc_section_flags PARAMS ((int, int, int));
+extern int ppc_section_letter (int, char **);
+extern int ppc_section_type (char *, size_t);
+extern int ppc_section_word (char *, size_t);
+extern int ppc_section_flags (int, int, int);
#define md_elf_section_letter(LETTER, PTR_MSG) ppc_section_letter (LETTER, PTR_MSG)
#define md_elf_section_type(STR, LEN) ppc_section_type (STR, LEN)
@@ -226,40 +207,40 @@ extern const char *ppc_comment_chars;
/* Keep relocations relative to the GOT, or non-PC relative. */
#define tc_fix_adjustable(FIX) ppc_fix_adjustable (FIX)
-extern int ppc_fix_adjustable PARAMS ((struct fix *));
+extern int ppc_fix_adjustable (struct fix *);
/* Values passed to md_apply_fix don't include symbol values. */
#define MD_APPLY_SYM_VALUE(FIX) 0
#define tc_frob_file_before_adjust ppc_frob_file_before_adjust
-extern void ppc_frob_file_before_adjust PARAMS ((void));
+extern void ppc_frob_file_before_adjust (void);
#endif /* OBJ_ELF */
#if defined (OBJ_ELF) || defined (OBJ_XCOFF)
#define TC_FORCE_RELOCATION(FIX) ppc_force_relocation (FIX)
-extern int ppc_force_relocation PARAMS ((struct fix *));
+extern int ppc_force_relocation (struct fix *);
#endif
/* call md_pcrel_from_section, not md_pcrel_from */
#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section(FIX, SEC)
-extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
+extern long md_pcrel_from_section (struct fix *, segT);
#define md_parse_name(name, exp, mode, c) ppc_parse_name (name, exp)
-extern int ppc_parse_name PARAMS ((const char *, struct expressionS *));
+extern int ppc_parse_name (const char *, struct expressionS *);
#define md_operand(x)
#define md_cleanup() ppc_cleanup ()
- extern void ppc_cleanup PARAMS ((void));
+extern void ppc_cleanup (void);
#define TARGET_USE_CFIPOP 1
#define tc_cfi_frame_initial_instructions ppc_cfi_frame_initial_instructions
-extern void ppc_cfi_frame_initial_instructions PARAMS ((void));
+extern void ppc_cfi_frame_initial_instructions (void);
#define tc_regname_to_dw2regnum tc_ppc_regname_to_dw2regnum
-extern int tc_ppc_regname_to_dw2regnum PARAMS ((const char *regname));
+extern int tc_ppc_regname_to_dw2regnum (char *);
extern int ppc_cie_data_alignment;
diff --git a/gas/config/tc-s390.c b/gas/config/tc-s390.c
index 56b5b2594f8f..6ca31f7b43b4 100644
--- a/gas/config/tc-s390.c
+++ b/gas/config/tc-s390.c
@@ -1,5 +1,5 @@
/* tc-s390.c -- Assemble for the S390
- Copyright 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
@@ -20,7 +20,6 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
@@ -412,6 +411,8 @@ md_parse_option (c, arg)
current_cpu = S390_OPCODE_Z990;
else if (strcmp (arg + 5, "z9-109") == 0)
current_cpu = S390_OPCODE_Z9_109;
+ else if (strcmp (arg + 5, "z9-ec") == 0)
+ current_cpu = S390_OPCODE_Z9_EC;
else
{
as_bad (_("invalid switch -m%s"), arg);
@@ -2322,7 +2323,7 @@ s390_cfi_frame_initial_instructions ()
}
int
-tc_s390_regname_to_dw2regnum (const char *regname)
+tc_s390_regname_to_dw2regnum (char *regname)
{
int regnum = -1;
diff --git a/gas/config/tc-s390.h b/gas/config/tc-s390.h
index dbecfef3a553..b387c3b867dc 100644
--- a/gas/config/tc-s390.h
+++ b/gas/config/tc-s390.h
@@ -88,7 +88,7 @@ extern void s390_md_end PARAMS ((void));
extern void s390_cfi_frame_initial_instructions PARAMS ((void));
#define tc_regname_to_dw2regnum tc_s390_regname_to_dw2regnum
-extern int tc_s390_regname_to_dw2regnum PARAMS ((const char *regname));
+extern int tc_s390_regname_to_dw2regnum PARAMS ((char *regname));
extern int s390_cie_data_alignment;
diff --git a/gas/config/tc-score.c b/gas/config/tc-score.c
new file mode 100644
index 000000000000..fe45b00bad6d
--- /dev/null
+++ b/gas/config/tc-score.c
@@ -0,0 +1,6661 @@
+/* tc-score.c -- Assembler for Score
+ Copyright 2006 Free Software Foundation, Inc.
+ Contributed by:
+ Mei Ligang (ligang@sunnorth.com.cn)
+ Pei-Lin Tsai (pltsai@sunplus.com)
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to the Free
+ Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+ 02110-1301, USA. */
+
+#include "as.h"
+#include "config.h"
+#include "subsegs.h"
+#include "safe-ctype.h"
+#include "opcode/score-inst.h"
+#include "opcode/score-datadep.h"
+#include "struc-symbol.h"
+
+#ifdef OBJ_ELF
+#include "elf/score.h"
+#include "dwarf2dbg.h"
+#endif
+
+#define GP 28
+#define PIC_CALL_REG 29
+#define MAX_LITERAL_POOL_SIZE 1024
+#define FAIL 0x80000000
+#define SUCCESS 0
+#define INSN_SIZE 4
+#define INSN16_SIZE 2
+#define RELAX_INST_NUM 3
+
+/* For score5u : div/mul will pop warning message, mmu/alw/asw will pop error message. */
+#define BAD_ARGS _("bad arguments to instruction")
+#define BAD_PC _("r15 not allowed here")
+#define BAD_COND _("instruction is not conditional")
+#define ERR_NO_ACCUM _("acc0 expected")
+#define ERR_FOR_SCORE5U_MUL_DIV _("div / mul are reserved instructions")
+#define ERR_FOR_SCORE5U_MMU _("This architecture doesn't support mmu")
+#define ERR_FOR_SCORE5U_ATOMIC _("This architecture doesn't support atomic instruction")
+#define LONG_LABEL_LEN _("the label length is longer than 1024");
+#define BAD_SKIP_COMMA BAD_ARGS
+#define BAD_GARBAGE _("garbage following instruction");
+
+#define skip_whitespace(str) while (*(str) == ' ') ++(str)
+
+/* The name of the readonly data section. */
+#define RDATA_SECTION_NAME (OUTPUT_FLAVOR == bfd_target_aout_flavour \
+ ? ".data" \
+ : OUTPUT_FLAVOR == bfd_target_ecoff_flavour \
+ ? ".rdata" \
+ : OUTPUT_FLAVOR == bfd_target_coff_flavour \
+ ? ".rdata" \
+ : OUTPUT_FLAVOR == bfd_target_elf_flavour \
+ ? ".rodata" \
+ : (abort (), ""))
+
+#define RELAX_ENCODE(old, new, type, reloc1, reloc2, opt) \
+ ((relax_substateT) \
+ (((old) << 23) \
+ | ((new) << 16) \
+ | ((type) << 9) \
+ | ((reloc1) << 5) \
+ | ((reloc2) << 1) \
+ | ((opt) ? 1 : 0)))
+
+#define RELAX_OLD(i) (((i) >> 23) & 0x7f)
+#define RELAX_NEW(i) (((i) >> 16) & 0x7f)
+#define RELAX_TYPE(i) (((i) >> 9) & 0x7f)
+#define RELAX_RELOC1(i) ((valueT) ((i) >> 5) & 0xf)
+#define RELAX_RELOC2(i) ((valueT) ((i) >> 1) & 0xf)
+#define RELAX_OPT(i) ((i) & 1)
+#define RELAX_OPT_CLEAR(i) ((i) & ~1)
+
+#define SET_INSN_ERROR(s) (inst.error = (s))
+#define INSN_IS_PCE_P(s) (strstr (str, "||") != NULL)
+
+#define GET_INSN_CLASS(type) (get_insn_class_from_type (type))
+
+#define GET_INSN_SIZE(type) ((GET_INSN_CLASS (type) == INSN_CLASS_16) \
+ ? INSN16_SIZE : INSN_SIZE)
+
+/* This array holds the chars that always start a comment. If the
+ pre-processor is disabled, these aren't very useful. */
+const char comment_chars[] = "#";
+const char line_comment_chars[] = "#";
+const char line_separator_chars[] = ";";
+
+/* Chars that can be used to separate mant from exp in floating point numbers. */
+const char EXP_CHARS[] = "eE";
+const char FLT_CHARS[] = "rRsSfFdDxXeEpP";
+
+/* Used to contain constructed error messages. */
+static char err_msg[255];
+
+fragS *score_fragp = 0;
+static int fix_data_dependency = 0;
+static int warn_fix_data_dependency = 1;
+static int score7 = 1;
+static int university_version = 0;
+
+static int in_my_get_expression = 0;
+
+#define USE_GLOBAL_POINTER_OPT 1
+#define SCORE_BI_ENDIAN
+
+/* Default, pop warning message when using r1. */
+static int nor1 = 1;
+
+/* Default will do instruction relax, -O0 will set g_opt = 0. */
+static unsigned int g_opt = 1;
+
+/* The size of the small data section. */
+static unsigned int g_switch_value = 8;
+
+#ifdef OBJ_ELF
+/* Pre-defined "_GLOBAL_OFFSET_TABLE_" */
+symbolS *GOT_symbol;
+#endif
+static segT pdr_seg;
+
+enum score_pic_level score_pic = NO_PIC;
+
+#define INSN_NAME_LEN 16
+struct score_it
+{
+ char name[INSN_NAME_LEN];
+ unsigned long instruction;
+ unsigned long relax_inst;
+ int size;
+ int relax_size;
+ enum score_insn_type type;
+ char str[MAX_LITERAL_POOL_SIZE];
+ const char *error;
+ int bwarn;
+ char reg[INSN_NAME_LEN];
+ struct
+ {
+ bfd_reloc_code_real_type type;
+ expressionS exp;
+ int pc_rel;
+ }reloc;
+};
+struct score_it inst;
+
+typedef struct proc
+{
+ symbolS *isym;
+ unsigned long reg_mask;
+ unsigned long reg_offset;
+ unsigned long fpreg_mask;
+ unsigned long leaf;
+ unsigned long frame_offset;
+ unsigned long frame_reg;
+ unsigned long pc_reg;
+}
+procS;
+
+static procS cur_proc;
+static procS *cur_proc_ptr;
+static int numprocs;
+
+#define SCORE7_PIPELINE 7
+#define SCORE5_PIPELINE 5
+static int vector_size = SCORE7_PIPELINE;
+struct score_it dependency_vector[SCORE7_PIPELINE];
+
+/* Relax will need some padding for alignment. */
+#define RELAX_PAD_BYTE 3
+
+/* Number of littlenums required to hold an extended precision number. For md_atof. */
+#define NUM_FLOAT_VALS 8
+#define MAX_LITTLENUMS 6
+LITTLENUM_TYPE fp_values[NUM_FLOAT_VALS][MAX_LITTLENUMS];
+
+/* Structure for a hash table entry for a register. */
+struct reg_entry
+{
+ const char *name;
+ int number;
+};
+
+static const struct reg_entry score_rn_table[] =
+{
+ {"r0", 0}, {"r1", 1}, {"r2", 2}, {"r3", 3},
+ {"r4", 4}, {"r5", 5}, {"r6", 6}, {"r7", 7},
+ {"r8", 8}, {"r9", 9}, {"r10", 10}, {"r11", 11},
+ {"r12", 12}, {"r13", 13}, {"r14", 14}, {"r15", 15},
+ {"r16", 16}, {"r17", 17}, {"r18", 18}, {"r19", 19},
+ {"r20", 20}, {"r21", 21}, {"r22", 22}, {"r23", 23},
+ {"r24", 24}, {"r25", 25}, {"r26", 26}, {"r27", 27},
+ {"r28", 28}, {"r29", 29}, {"r30", 30}, {"r31", 31},
+ {NULL, 0}
+};
+
+static const struct reg_entry score_srn_table[] =
+{
+ {"sr0", 0}, {"sr1", 1}, {"sr2", 2},
+ {NULL, 0}
+};
+
+static const struct reg_entry score_crn_table[] =
+{
+ {"cr0", 0}, {"cr1", 1}, {"cr2", 2}, {"cr3", 3},
+ {"cr4", 4}, {"cr5", 5}, {"cr6", 6}, {"cr7", 7},
+ {"cr8", 8}, {"cr9", 9}, {"cr10", 10}, {"cr11", 11},
+ {"cr12", 12}, {"cr13", 13}, {"cr14", 14}, {"cr15", 15},
+ {"cr16", 16}, {"cr17", 17}, {"cr18", 18}, {"cr19", 19},
+ {"cr20", 20}, {"cr21", 21}, {"cr22", 22}, {"cr23", 23},
+ {"cr24", 24}, {"cr25", 25}, {"cr26", 26}, {"cr27", 27},
+ {"cr28", 28}, {"cr29", 29}, {"cr30", 30}, {"cr31", 31},
+ {NULL, 0}
+};
+
+struct reg_map
+{
+ const struct reg_entry *names;
+ int max_regno;
+ struct hash_control *htab;
+ const char *expected;
+};
+
+struct reg_map all_reg_maps[] =
+{
+ {score_rn_table, 31, NULL, N_("S+core register expected")},
+ {score_srn_table, 2, NULL, N_("S+core special-register expected")},
+ {score_crn_table, 31, NULL, N_("S+core co-processor register expected")},
+};
+
+static struct hash_control *score_ops_hsh = NULL;
+
+static struct hash_control *dependency_insn_hsh = NULL;
+
+/* Enumeration matching entries in table above. */
+enum score_reg_type
+{
+ REG_TYPE_SCORE = 0,
+#define REG_TYPE_FIRST REG_TYPE_SCORE
+ REG_TYPE_SCORE_SR = 1,
+ REG_TYPE_SCORE_CR = 2,
+ REG_TYPE_MAX = 3
+};
+
+typedef struct literalS
+{
+ struct expressionS exp;
+ struct score_it *inst;
+}
+literalT;
+
+literalT literals[MAX_LITERAL_POOL_SIZE];
+
+static void do_ldst_insn (char *);
+static void do_crdcrscrsimm5 (char *);
+static void do_ldst_unalign (char *);
+static void do_ldst_atomic (char *);
+static void do_ldst_cop (char *);
+static void do_macro_li_rdi32 (char *);
+static void do_macro_la_rdi32 (char *);
+static void do_macro_rdi32hi (char *);
+static void do_macro_rdi32lo (char *);
+static void do_macro_mul_rdrsrs (char *);
+static void do_macro_ldst_label (char *);
+static void do_branch (char *);
+static void do_jump (char *);
+static void do_empty (char *);
+static void do_rdrsrs (char *);
+static void do_rdsi16 (char *);
+static void do_rdrssi14 (char *);
+static void do_sub_rdsi16 (char *);
+static void do_sub_rdrssi14 (char *);
+static void do_rdrsi5 (char *);
+static void do_rdrsi14 (char *);
+static void do_rdi16 (char *);
+static void do_xrsi5 (char *);
+static void do_rdrs (char *);
+static void do_rdxrs (char *);
+static void do_rsrs (char *);
+static void do_rdcrs (char *);
+static void do_rdsrs (char *);
+static void do_rd (char *);
+static void do_rs (char *);
+static void do_i15 (char *);
+static void do_xi5x (char *);
+static void do_ceinst (char *);
+static void do_cache (char *);
+static void do16_rdrs (char *);
+static void do16_rs (char *);
+static void do16_xrs (char *);
+static void do16_mv_rdrs (char *);
+static void do16_hrdrs (char *);
+static void do16_rdhrs (char *);
+static void do16_rdi4 (char *);
+static void do16_rdi5 (char *);
+static void do16_xi5 (char *);
+static void do16_ldst_insn (char *);
+static void do16_ldst_imm_insn (char *);
+static void do16_push_pop (char *);
+static void do16_branch (char *);
+static void do16_jump (char *);
+static void do_rdi16_pic (char *);
+static void do_addi_s_pic (char *);
+static void do_addi_u_pic (char *);
+static void do_lw_pic (char *);
+
+static const struct asm_opcode score_ldst_insns[] =
+{
+ {"lw", 0x20000000, 0x3e000000, 0x2008, Rd_rvalueRs_SI15, do_ldst_insn},
+ {"lw", 0x06000000, 0x3e000007, 0x8000, Rd_rvalueRs_preSI12, do_ldst_insn},
+ {"lw", 0x0e000000, 0x3e000007, 0x200a, Rd_rvalueRs_postSI12, do_ldst_insn},
+ {"lh", 0x22000000, 0x3e000000, 0x2009, Rd_rvalueRs_SI15, do_ldst_insn},
+ {"lh", 0x06000001, 0x3e000007, 0x8000, Rd_rvalueRs_preSI12, do_ldst_insn},
+ {"lh", 0x0e000001, 0x3e000007, 0x8000, Rd_rvalueRs_postSI12, do_ldst_insn},
+ {"lhu", 0x24000000, 0x3e000000, 0x8000, Rd_rvalueRs_SI15, do_ldst_insn},
+ {"lhu", 0x06000002, 0x3e000007, 0x8000, Rd_rvalueRs_preSI12, do_ldst_insn},
+ {"lhu", 0x0e000002, 0x3e000007, 0x8000, Rd_rvalueRs_postSI12, do_ldst_insn},
+ {"lb", 0x26000000, 0x3e000000, 0x8000, Rd_rvalueRs_SI15, do_ldst_insn},
+ {"lb", 0x06000003, 0x3e000007, 0x8000, Rd_rvalueRs_preSI12, do_ldst_insn},
+ {"lb", 0x0e000003, 0x3e000007, 0x8000, Rd_rvalueRs_postSI12, do_ldst_insn},
+ {"sw", 0x28000000, 0x3e000000, 0x200c, Rd_lvalueRs_SI15, do_ldst_insn},
+ {"sw", 0x06000004, 0x3e000007, 0x200e, Rd_lvalueRs_preSI12, do_ldst_insn},
+ {"sw", 0x0e000004, 0x3e000007, 0x8000, Rd_lvalueRs_postSI12, do_ldst_insn},
+ {"sh", 0x2a000000, 0x3e000000, 0x200d, Rd_lvalueRs_SI15, do_ldst_insn},
+ {"sh", 0x06000005, 0x3e000007, 0x8000, Rd_lvalueRs_preSI12, do_ldst_insn},
+ {"sh", 0x0e000005, 0x3e000007, 0x8000, Rd_lvalueRs_postSI12, do_ldst_insn},
+ {"lbu", 0x2c000000, 0x3e000000, 0x200b, Rd_rvalueRs_SI15, do_ldst_insn},
+ {"lbu", 0x06000006, 0x3e000007, 0x8000, Rd_rvalueRs_preSI12, do_ldst_insn},
+ {"lbu", 0x0e000006, 0x3e000007, 0x8000, Rd_rvalueRs_postSI12, do_ldst_insn},
+ {"sb", 0x2e000000, 0x3e000000, 0x200f, Rd_lvalueRs_SI15, do_ldst_insn},
+ {"sb", 0x06000007, 0x3e000007, 0x8000, Rd_lvalueRs_preSI12, do_ldst_insn},
+ {"sb", 0x0e000007, 0x3e000007, 0x8000, Rd_lvalueRs_postSI12, do_ldst_insn},
+};
+
+static const struct asm_opcode score_insns[] =
+{
+ {"abs", 0x3800000a, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"abs.s", 0x3800004b, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"add", 0x00000010, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"add.c", 0x00000011, 0x3e0003ff, 0x2000, Rd_Rs_Rs, do_rdrsrs},
+ {"add.s", 0x38000048, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"addc", 0x00000012, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"addc.c", 0x00000013, 0x3e0003ff, 0x0009, Rd_Rs_Rs, do_rdrsrs},
+ {"addi", 0x02000000, 0x3e0e0001, 0x8000, Rd_SI16, do_rdsi16},
+ {"addi.c", 0x02000001, 0x3e0e0001, 0x8000, Rd_SI16, do_rdsi16},
+ {"addis", 0x0a000000, 0x3e0e0001, 0x8000, Rd_SI16, do_rdi16},
+ {"addis.c", 0x0a000001, 0x3e0e0001, 0x8000, Rd_SI16, do_rdi16},
+ {"addri", 0x10000000, 0x3e000001, 0x8000, Rd_Rs_SI14, do_rdrssi14},
+ {"addri.c", 0x10000001, 0x3e000001, 0x8000, Rd_Rs_SI14, do_rdrssi14},
+ {"addc!", 0x0009, 0x700f, 0x00000013, Rd_Rs, do16_rdrs},
+ {"add!", 0x2000, 0x700f, 0x00000011, Rd_Rs, do16_rdrs},
+ {"addei!", 0x6000 , 0x7087, 0x02000001, Rd_I4, do16_rdi4},
+ {"subi", 0x02000000, 0x3e0e0001, 0x8000, Rd_SI16, do_sub_rdsi16},
+ {"subi.c", 0x02000001, 0x3e0e0001, 0x8000, Rd_SI16, do_sub_rdsi16},
+ {"subri", 0x10000000, 0x3e000001, 0x8000, Rd_Rs_SI14, do_sub_rdrssi14},
+ {"subri.c", 0x10000001, 0x3e000001, 0x8000, Rd_Rs_SI14, do_sub_rdrssi14},
+ {"and", 0x00000020, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"and.c", 0x00000021, 0x3e0003ff, 0x2004, Rd_Rs_Rs, do_rdrsrs},
+ {"andi", 0x02080000, 0x3e0e0001, 0x8000, Rd_I16, do_rdi16},
+ {"andi.c", 0x02080001, 0x3e0e0001, 0x8000, Rd_I16, do_rdi16},
+ {"andis", 0x0a080000, 0x3e0e0001, 0x8000, Rd_I16, do_rdi16},
+ {"andis.c", 0x0a080001, 0x3e0e0001, 0x8000, Rd_I16, do_rdi16},
+ {"andri", 0x18000000, 0x3e000001, 0x8000, Rd_Rs_I14, do_rdrsi14},
+ {"andri.c", 0x18000001, 0x3e000001, 0x8000, Rd_Rs_I14, do_rdrsi14},
+ {"and!", 0x2004, 0x700f, 0x00000021, Rd_Rs, do16_rdrs},
+ {"bcs", 0x08000000, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"bcc", 0x08000400, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"bcnz", 0x08003800, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"bcsl", 0x08000001, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bccl", 0x08000401, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bcnzl", 0x08003801, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bcs!", 0x4000, 0x7f00, 0x08000000, PC_DISP8div2, do16_branch},
+ {"bcc!", 0x4100, 0x7f00, 0x08000400, PC_DISP8div2, do16_branch},
+ {"bcnz!", 0x4e00, 0x7f00, 0x08003800, PC_DISP8div2, do16_branch},
+ {"beq", 0x08001000, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"beql", 0x08001001, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"beq!", 0x4400, 0x7f00, 0x08001000, PC_DISP8div2, do16_branch},
+ {"bgtu", 0x08000800, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"bgt", 0x08001800, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"bge", 0x08002000, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"bgtul", 0x08000801, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bgtl", 0x08001801, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bgel", 0x08002001, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bgtu!", 0x4200, 0x7f00, 0x08000800, PC_DISP8div2, do16_branch},
+ {"bgt!", 0x4600, 0x7f00, 0x08001800, PC_DISP8div2, do16_branch},
+ {"bge!", 0x4800, 0x7f00, 0x08002000, PC_DISP8div2, do16_branch},
+ {"bitclr.c", 0x00000029, 0x3e0003ff, 0x6004, Rd_Rs_I5, do_rdrsi5},
+ {"bitrev", 0x3800000c, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"bitset.c", 0x0000002b, 0x3e0003ff, 0x6005, Rd_Rs_I5, do_rdrsi5},
+ {"bittst.c", 0x0000002d, 0x3e0003ff, 0x6006, x_Rs_I5, do_xrsi5},
+ {"bittgl.c", 0x0000002f, 0x3e0003ff, 0x6007, Rd_Rs_I5, do_rdrsi5},
+ {"bitclr!", 0x6004, 0x7007, 0x00000029, Rd_I5, do16_rdi5},
+ {"bitset!", 0x6005, 0x7007, 0x0000002b, Rd_I5, do16_rdi5},
+ {"bittst!", 0x6006, 0x7007, 0x0000002d, Rd_I5, do16_rdi5},
+ {"bittgl!", 0x6007, 0x7007, 0x0000002f, Rd_I5, do16_rdi5},
+ {"bleu", 0x08000c00, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"ble", 0x08001c00, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"blt", 0x08002400, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"bleul", 0x08000c01, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"blel", 0x08001c01, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bltl", 0x08002401, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bl", 0x08003c01, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bleu!", 0x4300, 0x7f00, 0x08000c00, PC_DISP8div2, do16_branch},
+ {"ble!", 0x4700, 0x7f00, 0x08001c00, PC_DISP8div2, do16_branch},
+ {"blt!", 0x4900, 0x7f00, 0x08002400, PC_DISP8div2, do16_branch},
+ {"bmi", 0x08002800, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"bmil", 0x08002801, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bmi!", 0x00004a00, 0x00007f00, 0x08002800, PC_DISP8div2, do16_branch},
+ {"bne", 0x08001400, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"bnel", 0x08001401, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bne!", 0x4500, 0x7f00, 0x08001400, PC_DISP8div2, do16_branch},
+ {"bpl", 0x08002c00, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"bpll", 0x08002c01, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bpl!", 0x4b00, 0x7f00, 0x08002c00, PC_DISP8div2, do16_branch},
+ {"brcs", 0x00000008, 0x3e007fff, 0x0004, x_Rs_x, do_rs},
+ {"brcc", 0x00000408, 0x3e007fff, 0x0104, x_Rs_x, do_rs},
+ {"brgtu", 0x00000808, 0x3e007fff, 0x0204, x_Rs_x, do_rs},
+ {"brleu", 0x00000c08, 0x3e007fff, 0x0304, x_Rs_x, do_rs},
+ {"breq", 0x00001008, 0x3e007fff, 0x0404, x_Rs_x, do_rs},
+ {"brne", 0x00001408, 0x3e007fff, 0x0504, x_Rs_x, do_rs},
+ {"brgt", 0x00001808, 0x3e007fff, 0x0604, x_Rs_x, do_rs},
+ {"brle", 0x00001c08, 0x3e007fff, 0x0704, x_Rs_x, do_rs},
+ {"brge", 0x00002008, 0x3e007fff, 0x0804, x_Rs_x, do_rs},
+ {"brlt", 0x00002408, 0x3e007fff, 0x0904, x_Rs_x, do_rs},
+ {"brmi", 0x00002808, 0x3e007fff, 0x0a04, x_Rs_x, do_rs},
+ {"brpl", 0x00002c08, 0x3e007fff, 0x0b04, x_Rs_x, do_rs},
+ {"brvs", 0x00003008, 0x3e007fff, 0x0c04, x_Rs_x, do_rs},
+ {"brvc", 0x00003408, 0x3e007fff, 0x0d04, x_Rs_x, do_rs},
+ {"brcnz", 0x00003808, 0x3e007fff, 0x0e04, x_Rs_x, do_rs},
+ {"br", 0x00003c08, 0x3e007fff, 0x0f04, x_Rs_x, do_rs},
+ {"brcsl", 0x00000009, 0x3e007fff, 0x000c, x_Rs_x, do_rs},
+ {"brccl", 0x00000409, 0x3e007fff, 0x010c, x_Rs_x, do_rs},
+ {"brgtul", 0x00000809, 0x3e007fff, 0x020c, x_Rs_x, do_rs},
+ {"brleul", 0x00000c09, 0x3e007fff, 0x030c, x_Rs_x, do_rs},
+ {"breql", 0x00001009, 0x3e007fff, 0x040c, x_Rs_x, do_rs},
+ {"brnel", 0x00001409, 0x3e007fff, 0x050c, x_Rs_x, do_rs},
+ {"brgtl", 0x00001809, 0x3e007fff, 0x060c, x_Rs_x, do_rs},
+ {"brlel", 0x00001c09, 0x3e007fff, 0x070c, x_Rs_x, do_rs},
+ {"brgel", 0x00002009, 0x3e007fff, 0x080c, x_Rs_x, do_rs},
+ {"brltl", 0x00002409, 0x3e007fff, 0x090c, x_Rs_x, do_rs},
+ {"brmil", 0x00002809, 0x3e007fff, 0x0a0c, x_Rs_x, do_rs},
+ {"brpll", 0x00002c09, 0x3e007fff, 0x0b0c, x_Rs_x, do_rs},
+ {"brvsl", 0x00003009, 0x3e007fff, 0x0c0c, x_Rs_x, do_rs},
+ {"brvcl", 0x00003409, 0x3e007fff, 0x0d0c, x_Rs_x, do_rs},
+ {"brcnzl", 0x00003809, 0x3e007fff, 0x0e0c, x_Rs_x, do_rs},
+ {"brl", 0x00003c09, 0x3e007fff, 0x0f0c, x_Rs_x, do_rs},
+ {"brcs!", 0x0004, 0x7f0f, 0x00000008, x_Rs, do16_xrs},
+ {"brcc!", 0x0104, 0x7f0f, 0x00000408, x_Rs, do16_xrs},
+ {"brgtu!", 0x0204, 0x7f0f, 0x00000808, x_Rs, do16_xrs},
+ {"brleu!", 0x0304, 0x7f0f, 0x00000c08, x_Rs, do16_xrs},
+ {"breq!", 0x0404, 0x7f0f, 0x00001008, x_Rs, do16_xrs},
+ {"brne!", 0x0504, 0x7f0f, 0x00001408, x_Rs, do16_xrs},
+ {"brgt!", 0x0604, 0x7f0f, 0x00001808, x_Rs, do16_xrs},
+ {"brle!", 0x0704, 0x7f0f, 0x00001c08, x_Rs, do16_xrs},
+ {"brge!", 0x0804, 0x7f0f, 0x00002008, x_Rs, do16_xrs},
+ {"brlt!", 0x0904, 0x7f0f, 0x00002408, x_Rs, do16_xrs},
+ {"brmi!", 0x0a04, 0x7f0f, 0x00002808, x_Rs, do16_xrs},
+ {"brpl!", 0x0b04, 0x7f0f, 0x00002c08, x_Rs, do16_xrs},
+ {"brvs!", 0x0c04, 0x7f0f, 0x00003008, x_Rs, do16_xrs},
+ {"brvc!", 0x0d04, 0x7f0f, 0x00003408, x_Rs, do16_xrs},
+ {"brcnz!", 0x0e04, 0x7f0f, 0x00003808, x_Rs, do16_xrs},
+ {"br!", 0x0f04, 0x7f0f, 0x00003c08, x_Rs, do16_xrs},
+ {"brcsl!", 0x000c, 0x7f0f, 0x00000009, x_Rs, do16_xrs},
+ {"brccl!", 0x010c, 0x7f0f, 0x00000409, x_Rs, do16_xrs},
+ {"brgtul!", 0x020c, 0x7f0f, 0x00000809, x_Rs, do16_xrs},
+ {"brleul!", 0x030c, 0x7f0f, 0x00000c09, x_Rs, do16_xrs},
+ {"breql!", 0x040c, 0x7f0f, 0x00001009, x_Rs, do16_xrs},
+ {"brnel!", 0x050c, 0x7f0f, 0x00001409, x_Rs, do16_xrs},
+ {"brgtl!", 0x060c, 0x7f0f, 0x00001809, x_Rs, do16_xrs},
+ {"brlel!", 0x070c, 0x7f0f, 0x00001c09, x_Rs, do16_xrs},
+ {"brgel!", 0x080c, 0x7f0f, 0x00002009, x_Rs, do16_xrs},
+ {"brltl!", 0x090c, 0x7f0f, 0x00002409, x_Rs, do16_xrs},
+ {"brmil!", 0x0a0c, 0x7f0f, 0x00002809, x_Rs, do16_xrs},
+ {"brpll!", 0x0b0c, 0x7f0f, 0x00002c09, x_Rs, do16_xrs},
+ {"brvsl!", 0x0c0c, 0x7f0f, 0x00003009, x_Rs, do16_xrs},
+ {"brvcl!", 0x0d0c, 0x7f0f, 0x00003409, x_Rs, do16_xrs},
+ {"brcnzl!", 0x0e0c, 0x7f0f, 0x00003809, x_Rs, do16_xrs},
+ {"brl!", 0x0f0c, 0x7f0f, 0x00003c09, x_Rs, do16_xrs},
+ {"bvs", 0x08003000, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"bvc", 0x08003400, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"bvsl", 0x08003001, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bvcl", 0x08003401, 0x3e007c01, 0x8000, PC_DISP19div2, do_branch},
+ {"bvs!", 0x4c00, 0x7f00, 0x08003000, PC_DISP8div2, do16_branch},
+ {"bvc!", 0x4d00, 0x7f00, 0x08003400, PC_DISP8div2, do16_branch},
+ {"b!", 0x4f00, 0x7f00, 0x08003c00, PC_DISP8div2, do16_branch},
+ {"b", 0x08003c00, 0x3e007c01, 0x4000, PC_DISP19div2, do_branch},
+ {"cache", 0x30000000, 0x3ff00000, 0x8000, OP5_rvalueRs_SI15, do_cache},
+ {"ceinst", 0x38000000, 0x3e000000, 0x8000, I5_Rs_Rs_I5_OP5, do_ceinst},
+ {"clz", 0x3800000d, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"cmpteq.c", 0x00000019, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"cmptmi.c", 0x00100019, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"cmp.c", 0x00300019, 0x3ff003ff, 0x2003, x_Rs_Rs, do_rsrs},
+ {"cmpzteq.c", 0x0000001b, 0x3ff07fff, 0x8000, x_Rs_x, do_rs},
+ {"cmpztmi.c", 0x0010001b, 0x3ff07fff, 0x8000, x_Rs_x, do_rs},
+ {"cmpz.c", 0x0030001b, 0x3ff07fff, 0x8000, x_Rs_x, do_rs},
+ {"cmpi.c", 0x02040001, 0x3e0e0001, 0x8000, Rd_SI16, do_rdsi16},
+ {"cmp!", 0x2003, 0x700f, 0x00300019, Rd_Rs, do16_rdrs},
+ {"cop1", 0x0c00000c, 0x3e00001f, 0x8000, Rd_Rs_Rs_imm, do_crdcrscrsimm5},
+ {"cop2", 0x0c000014, 0x3e00001f, 0x8000, Rd_Rs_Rs_imm, do_crdcrscrsimm5},
+ {"cop3", 0x0c00001c, 0x3e00001f, 0x8000, Rd_Rs_Rs_imm, do_crdcrscrsimm5},
+ {"drte", 0x0c0000a4, 0x3e0003ff, 0x8000, NO_OPD, do_empty},
+ {"extsb", 0x00000058, 0x3e0003ff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"extsb.c", 0x00000059, 0x3e0003ff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"extsh", 0x0000005a, 0x3e0003ff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"extsh.c", 0x0000005b, 0x3e0003ff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"extzb", 0x0000005c, 0x3e0003ff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"extzb.c", 0x0000005d, 0x3e0003ff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"extzh", 0x0000005e, 0x3e0003ff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"extzh.c", 0x0000005f, 0x3e0003ff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"jl", 0x04000001, 0x3e000001, 0x8000, PC_DISP24div2, do_jump},
+ {"jl!", 0x3001, 0x7001, 0x04000001, PC_DISP11div2, do16_jump},
+ {"j!", 0x3000, 0x7001, 0x04000000, PC_DISP11div2, do16_jump},
+ {"j", 0x04000000, 0x3e000001, 0x8000, PC_DISP24div2, do_jump},
+ {"lbu!", 0x200b, 0x0000700f, 0x2c000000, Rd_rvalueRs, do16_ldst_insn},
+ {"lbup!", 0x7003, 0x7007, 0x2c000000, Rd_rvalueBP_I5, do16_ldst_imm_insn},
+ {"alw", 0x0000000c, 0x3e0003ff, 0x8000, Rd_rvalue32Rs, do_ldst_atomic},
+ {"lcb", 0x00000060, 0x3e0003ff, 0x8000, x_rvalueRs_post4, do_ldst_unalign},
+ {"lcw", 0x00000062, 0x3e0003ff, 0x8000, Rd_rvalueRs_post4, do_ldst_unalign},
+ {"lce", 0x00000066, 0x3e0003ff, 0x8000, Rd_rvalueRs_post4, do_ldst_unalign},
+ {"ldc1", 0x0c00000a, 0x3e00001f, 0x8000, Rd_rvalueRs_SI10, do_ldst_cop},
+ {"ldc2", 0x0c000012, 0x3e00001f, 0x8000, Rd_rvalueRs_SI10, do_ldst_cop},
+ {"ldc3", 0x0c00001a, 0x3e00001f, 0x8000, Rd_rvalueRs_SI10, do_ldst_cop},
+ {"lh!", 0x2009, 0x700f, 0x22000000, Rd_rvalueRs, do16_ldst_insn},
+ {"lhp!", 0x7001, 0x7007, 0x22000000, Rd_rvalueBP_I5, do16_ldst_imm_insn},
+ {"ldi", 0x020c0000, 0x3e0e0000, 0x5000, Rd_SI16, do_rdsi16},
+ {"ldis", 0x0a0c0000, 0x3e0e0000, 0x8000, Rd_I16, do_rdi16},
+ {"ldiu!", 0x5000, 0x7000, 0x020c0000, Rd_I8, do16_ldst_imm_insn},
+ {"lw!", 0x2008, 0x700f, 0x20000000, Rd_rvalueRs, do16_ldst_insn},
+ {"lwp!", 0x7000, 0x7007, 0x20000000, Rd_rvalueBP_I5, do16_ldst_imm_insn},
+ {"mfcel", 0x00000448, 0x3e007fff, 0x8000, Rd_x_x, do_rd},
+ {"mfcel!", 0x1001, 0x7f0f, 0x00000448, x_Rs, do16_rs},
+ {"mad", 0x38000000, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"mad.f!", 0x1004, 0x700f, 0x38000080, Rd_Rs, do16_rdrs},
+ {"madh", 0x38000203, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"madh.fs", 0x380002c3, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"madh.fs!", 0x100b, 0x700f, 0x380002c3, Rd_Rs, do16_rdrs},
+ {"madl", 0x38000002, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"madl.fs", 0x380000c2, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"madl.fs!", 0x100a, 0x700f, 0x380000c2, Rd_Rs, do16_rdrs},
+ {"madu", 0x38000020, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"madu!", 0x1005, 0x700f, 0x38000020, Rd_Rs, do16_rdrs},
+ {"mad.f", 0x38000080, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"max", 0x38000007, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"mazh", 0x38000303, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"mazh.f", 0x38000383, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"mazh.f!", 0x1009, 0x700f, 0x3800038c, Rd_Rs, do16_rdrs},
+ {"mazl", 0x38000102, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"mazl.f", 0x38000182, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"mazl.f!", 0x1008, 0x700f, 0x38000182, Rd_Rs, do16_rdrs},
+ {"mfceh", 0x00000848, 0x3e007fff, 0x8000, Rd_x_x, do_rd},
+ {"mfceh!", 0x1101, 0x7f0f, 0x00000848, x_Rs, do16_rs},
+ {"mfcehl", 0x00000c48, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mfsr", 0x00000050, 0x3e0003ff, 0x8000, Rd_x_I5, do_rdsrs},
+ {"mfcr", 0x0c000001, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mfc1", 0x0c000009, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mfc2", 0x0c000011, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mfc3", 0x0c000019, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mfcc1", 0x0c00000f, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mfcc2", 0x0c000017, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mfcc3", 0x0c00001f, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mhfl!", 0x0002, 0x700f, 0x00003c56, Rd_LowRs, do16_hrdrs},
+ {"min", 0x38000006, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"mlfh!", 0x0001, 0x700f, 0x00003c56, Rd_HighRs, do16_rdhrs},
+ {"msb", 0x38000001, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"msb.f!", 0x1006, 0x700f, 0x38000081, Rd_Rs, do16_rdrs},
+ {"msbh", 0x38000205, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"msbh.fs", 0x380002c5, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"msbh.fs!", 0x100f, 0x700f, 0x380002c5, Rd_Rs, do16_rdrs},
+ {"msbl", 0x38000004, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"msbl.fs", 0x380000c4, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"msbl.fs!", 0x100e, 0x700f, 0x380000c4, Rd_Rs, do16_rdrs},
+ {"msbu", 0x38000021, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"msbu!", 0x1007, 0x700f, 0x38000021, Rd_Rs, do16_rdrs},
+ {"msb.f", 0x38000081, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"mszh", 0x38000305, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"mszh.f", 0x38000385, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"mszh.f!", 0x100d, 0x700f, 0x38000385, Rd_Rs, do16_rdrs},
+ {"mszl", 0x38000104, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"mszl.f", 0x38000184, 0x3ff003ff, 0x8000, x_Rs_Rs, do_rsrs},
+ {"mszl.f!", 0x100c, 0x700f, 0x38000184, Rd_Rs, do16_rdrs},
+ {"mtcel!", 0x1000, 0x7f0f, 0x0000044a, x_Rs, do16_rs},
+ {"mtcel", 0x0000044a, 0x3e007fff, 0x8000, Rd_x_x, do_rd},
+ {"mtceh", 0x0000084a, 0x3e007fff, 0x8000, Rd_x_x, do_rd},
+ {"mtceh!", 0x1100, 0x7f0f, 0x0000084a, x_Rs, do16_rs},
+ {"mtcehl", 0x00000c4a, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mtsr", 0x00000052, 0x3e0003ff, 0x8000, x_Rs_I5, do_rdsrs},
+ {"mtcr", 0x0c000000, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mtc1", 0x0c000008, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mtc2", 0x0c000010, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mtc3", 0x0c000018, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mtcc1", 0x0c00000e, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mtcc2", 0x0c000016, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mtcc3", 0x0c00001e, 0x3e00001f, 0x8000, Rd_Rs_x, do_rdcrs},
+ {"mul.f!", 0x1002, 0x700f, 0x00000041, Rd_Rs, do16_rdrs},
+ {"mulu!", 0x1003, 0x700f, 0x00000042, Rd_Rs, do16_rdrs},
+ {"mvcs", 0x00000056, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mvcc", 0x00000456, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mvgtu", 0x00000856, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mvleu", 0x00000c56, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mveq", 0x00001056, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mvne", 0x00001456, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mvgt", 0x00001856, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mvle", 0x00001c56, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mvge", 0x00002056, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mvlt", 0x00002456, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mvmi", 0x00002856, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mvpl", 0x00002c56, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mvvs", 0x00003056, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mvvc", 0x00003456, 0x3e007fff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"mv", 0x00003c56, 0x3e007fff, 0x0003, Rd_Rs_x, do_rdrs},
+ {"mv!", 0x0003, 0x700f, 0x00003c56, Rd_Rs, do16_mv_rdrs},
+ {"neg", 0x0000001e, 0x3e0003ff, 0x8000, Rd_x_Rs, do_rdxrs},
+ {"neg.c", 0x0000001f, 0x3e0003ff, 0x2002, Rd_x_Rs, do_rdxrs},
+ {"neg!", 0x2002, 0x700f, 0x0000001f, Rd_Rs, do16_rdrs},
+ {"nop", 0x00000000, 0x3e0003ff, 0x0000, NO_OPD, do_empty},
+ {"not", 0x00000024, 0x3e0003ff, 0x8000, Rd_Rs_x, do_rdrs},
+ {"not.c", 0x00000025, 0x3e0003ff, 0x2006, Rd_Rs_x, do_rdrs},
+ {"nop!", 0x0000, 0x700f, 0x00000000, NO16_OPD, do_empty},
+ {"not!", 0x2006, 0x700f, 0x00000025, Rd_Rs, do16_rdrs},
+ {"or", 0x00000022, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"or.c", 0x00000023, 0x3e0003ff, 0x2005, Rd_Rs_Rs, do_rdrsrs},
+ {"ori", 0x020a0000, 0x3e0e0001, 0x8000, Rd_I16, do_rdi16},
+ {"ori.c", 0x020a0001, 0x3e0e0001, 0x8000, Rd_I16, do_rdi16},
+ {"oris", 0x0a0a0000, 0x3e0e0001, 0x8000, Rd_I16, do_rdi16},
+ {"oris.c", 0x0a0a0001, 0x3e0e0001, 0x8000, Rd_I16, do_rdi16},
+ {"orri", 0x1a000000, 0x3e000001, 0x8000, Rd_Rs_I14, do_rdrsi14},
+ {"orri.c", 0x1a000001, 0x3e000001, 0x8000, Rd_Rs_I14, do_rdrsi14},
+ {"or!", 0x2005, 0x700f, 0x00000023, Rd_Rs, do16_rdrs},
+ {"pflush", 0x0000000a, 0x3e0003ff, 0x8000, NO_OPD, do_empty},
+ {"pop!", 0x200a, 0x700f, 0x0e000000, Rd_rvalueRs, do16_push_pop},
+ {"push!", 0x200e, 0x700f, 0x06000004, Rd_lvalueRs, do16_push_pop},
+ {"ror", 0x00000038, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"ror.c", 0x00000039, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"rorc.c", 0x0000003b, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"rol", 0x0000003c, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"rol.c", 0x0000003d, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"rolc.c", 0x0000003f, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"rori", 0x00000078, 0x3e0003ff, 0x8000, Rd_Rs_I5, do_rdrsi5},
+ {"rori.c", 0x00000079, 0x3e0003ff, 0x8000, Rd_Rs_I5, do_rdrsi5},
+ {"roric.c", 0x0000007b, 0x3e0003ff, 0x8000, Rd_Rs_I5, do_rdrsi5},
+ {"roli", 0x0000007c, 0x3e0003ff, 0x8000, Rd_Rs_I5, do_rdrsi5},
+ {"roli.c", 0x0000007d, 0x3e0003ff, 0x8000, Rd_Rs_I5, do_rdrsi5},
+ {"rolic.c", 0x0000007f, 0x3e0003ff, 0x8000, Rd_Rs_I5, do_rdrsi5},
+ {"rte", 0x0c000084, 0x3e0003ff, 0x8000, NO_OPD, do_empty},
+ {"sb!", 0x200f, 0x700f, 0x2e000000, Rd_lvalueRs, do16_ldst_insn},
+ {"sbp!", 0x7007, 0x7007, 0x2e000000, Rd_lvalueBP_I5, do16_ldst_imm_insn},
+ {"asw", 0x0000000e, 0x3e0003ff, 0x8000, Rd_lvalue32Rs, do_ldst_atomic},
+ {"scb", 0x00000068, 0x3e0003ff, 0x8000, Rd_lvalueRs_post4, do_ldst_unalign},
+ {"scw", 0x0000006a, 0x3e0003ff, 0x8000, Rd_lvalueRs_post4, do_ldst_unalign},
+ {"sce", 0x0000006e, 0x3e0003ff, 0x8000, x_lvalueRs_post4, do_ldst_unalign},
+ {"sdbbp", 0x00000006, 0x3e0003ff, 0x6002, x_I5_x, do_xi5x},
+ {"sdbbp!", 0x6002, 0x7007, 0x00000006, Rd_I5, do16_xi5},
+ {"sh!", 0x200d, 0x700f, 0x2a000000, Rd_lvalueRs, do16_ldst_insn},
+ {"shp!", 0x7005, 0x7007, 0x2a000000, Rd_lvalueBP_I5, do16_ldst_imm_insn},
+ {"sleep", 0x0c0000c4, 0x3e0003ff, 0x8000, NO_OPD, do_empty},
+ {"sll", 0x00000030, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"sll.c", 0x00000031, 0x3e0003ff, 0x0008, Rd_Rs_Rs, do_rdrsrs},
+ {"sll.s", 0x3800004e, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"slli", 0x00000070, 0x3e0003ff, 0x8000, Rd_Rs_I5, do_rdrsi5},
+ {"slli.c", 0x00000071, 0x3e0003ff, 0x6001, Rd_Rs_I5, do_rdrsi5},
+ {"sll!", 0x0008, 0x700f, 0x00000031, Rd_Rs, do16_rdrs},
+ {"slli!", 0x6001, 0x7007, 0x00000071, Rd_I5, do16_rdi5},
+ {"srl", 0x00000034, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"srl.c", 0x00000035, 0x3e0003ff, 0x000a, Rd_Rs_Rs, do_rdrsrs},
+ {"sra", 0x00000036, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"sra.c", 0x00000037, 0x3e0003ff, 0x000b, Rd_Rs_Rs, do_rdrsrs},
+ {"srli", 0x00000074, 0x3e0003ff, 0x8000, Rd_Rs_I5, do_rdrsi5},
+ {"srli.c", 0x00000075, 0x3e0003ff, 0x6003, Rd_Rs_I5, do_rdrsi5},
+ {"srai", 0x00000076, 0x3e0003ff, 0x8000, Rd_Rs_I5, do_rdrsi5},
+ {"srai.c", 0x00000077, 0x3e0003ff, 0x8000, Rd_Rs_I5, do_rdrsi5},
+ {"srl!", 0x000a, 0x700f, 0x00000035, Rd_Rs, do16_rdrs},
+ {"sra!", 0x000b, 0x700f, 0x00000037, Rd_Rs, do16_rdrs},
+ {"srli!", 0x6003, 0x7007, 0x00000075, Rd_Rs, do16_rdi5},
+ {"stc1", 0x0c00000b, 0x3e00001f, 0x8000, Rd_lvalueRs_SI10, do_ldst_cop},
+ {"stc2", 0x0c000013, 0x3e00001f, 0x8000, Rd_lvalueRs_SI10, do_ldst_cop},
+ {"stc3", 0x0c00001b, 0x3e00001f, 0x8000, Rd_lvalueRs_SI10, do_ldst_cop},
+ {"sub", 0x00000014, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"sub.c", 0x00000015, 0x3e0003ff, 0x2001, Rd_Rs_Rs, do_rdrsrs},
+ {"sub.s", 0x38000049, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"subc", 0x00000016, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"subc.c", 0x00000017, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"sub!", 0x2001, 0x700f, 0x00000015, Rd_Rs, do16_rdrs},
+ {"subei!", 0x6080, 0x7087, 0x02000001, Rd_I4, do16_rdi4},
+ {"sw!", 0x200c, 0x700f, 0x28000000, Rd_lvalueRs, do16_ldst_insn},
+ {"swp!", 0x7004, 0x7007, 0x28000000, Rd_lvalueBP_I5, do16_ldst_imm_insn},
+ {"syscall", 0x00000002, 0x3e0003ff, 0x8000, I15, do_i15},
+ {"tcs", 0x00000054, 0x3e007fff, 0x0005, NO_OPD, do_empty},
+ {"tcc", 0x00000454, 0x3e007fff, 0x0105, NO_OPD, do_empty},
+ {"tcnz", 0x00003854, 0x3e007fff, 0x0e05, NO_OPD, do_empty},
+ {"tcs!", 0x0005, 0x7f0f, 0x00000054, NO16_OPD, do_empty},
+ {"tcc!", 0x0105, 0x7f0f, 0x00000454, NO16_OPD, do_empty},
+ {"tcnz!", 0x0e05, 0x7f0f, 0x00003854, NO16_OPD, do_empty},
+ {"teq", 0x00001054, 0x3e007fff, 0x0405, NO_OPD, do_empty},
+ {"teq!", 0x0405, 0x7f0f, 0x00001054, NO16_OPD, do_empty},
+ {"tgtu", 0x00000854, 0x3e007fff, 0x0205, NO_OPD, do_empty},
+ {"tgt", 0x00001854, 0x3e007fff, 0x0605, NO_OPD, do_empty},
+ {"tge", 0x00002054, 0x3e007fff, 0x0805, NO_OPD, do_empty},
+ {"tgtu!", 0x0205, 0x7f0f, 0x00000854, NO16_OPD, do_empty},
+ {"tgt!", 0x0605, 0x7f0f, 0x00001854, NO16_OPD, do_empty},
+ {"tge!", 0x0805, 0x7f0f, 0x00002054, NO16_OPD, do_empty},
+ {"tleu", 0x00000c54, 0x3e007fff, 0x0305, NO_OPD, do_empty},
+ {"tle", 0x00001c54, 0x3e007fff, 0x0705, NO_OPD, do_empty},
+ {"tlt", 0x00002454, 0x3e007fff, 0x0905, NO_OPD, do_empty},
+ {"stlb", 0x0c000004, 0x3e0003ff, 0x8000, NO_OPD, do_empty},
+ {"mftlb", 0x0c000024, 0x3e0003ff, 0x8000, NO_OPD, do_empty},
+ {"mtptlb", 0x0c000044, 0x3e0003ff, 0x8000, NO_OPD, do_empty},
+ {"mtrtlb", 0x0c000064, 0x3e0003ff, 0x8000, NO_OPD, do_empty},
+ {"tleu!", 0x0305, 0x7f0f, 0x00000c54, NO16_OPD, do_empty},
+ {"tle!", 0x0705, 0x7f0f, 0x00001c54, NO16_OPD, do_empty},
+ {"tlt!", 0x0905, 0x7f0f, 0x00002454, NO16_OPD, do_empty},
+ {"tmi", 0x00002854, 0x3e007fff, 0x0a05, NO_OPD, do_empty},
+ {"tmi!", 0x0a05, 0x7f0f, 0x00002854, NO16_OPD, do_empty},
+ {"tne", 0x00001454, 0x3e007fff, 0x0505, NO_OPD, do_empty},
+ {"tne!", 0x0505, 0x7f0f, 0x00001454, NO16_OPD, do_empty},
+ {"tpl", 0x00002c54, 0x3e007fff, 0x0b05, NO_OPD, do_empty},
+ {"tpl!", 0x0b05, 0x7f0f, 0x00002c54, NO16_OPD, do_empty},
+ {"trapcs", 0x00000004, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"trapcc", 0x00000404, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"trapgtu", 0x00000804, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"trapleu", 0x00000c04, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"trapeq", 0x00001004, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"trapne", 0x00001404, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"trapgt", 0x00001804, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"traple", 0x00001c04, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"trapge", 0x00002004, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"traplt", 0x00002404, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"trapmi", 0x00002804, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"trappl", 0x00002c04, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"trapvs", 0x00003004, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"trapvc", 0x00003404, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"trap", 0x00003c04, 0x3e007fff, 0x8000, x_I5_x, do_xi5x},
+ {"tset", 0x00003c54, 0x3e007fff, 0x0f05, NO_OPD, do_empty},
+ {"tset!", 0x0f05, 0x00007f0f, 0x00003c54, NO16_OPD, do_empty},
+ {"tvs", 0x00003054, 0x3e007fff, 0x0c05, NO_OPD, do_empty},
+ {"tvc", 0x00003454, 0x3e007fff, 0x0d05, NO_OPD, do_empty},
+ {"tvs!", 0x0c05, 0x7f0f, 0x00003054, NO16_OPD, do_empty},
+ {"tvc!", 0x0d05, 0x7f0f, 0x00003454, NO16_OPD, do_empty},
+ {"xor", 0x00000026, 0x3e0003ff, 0x8000, Rd_Rs_Rs, do_rdrsrs},
+ {"xor.c", 0x00000027, 0x3e0003ff, 0x2007, Rd_Rs_Rs, do_rdrsrs},
+ {"xor!", 0x2007, 0x700f, 0x00000027, Rd_Rs, do16_rdrs},
+ /* Macro instruction. */
+ {"li", 0x020c0000, 0x3e0e0000, 0x8000, Insn_Type_SYN, do_macro_li_rdi32},
+ /* la reg, imm32 -->(1) ldi reg, simm16
+ (2) ldis reg, %HI(imm32)
+ ori reg, %LO(imm32)
+
+ la reg, symbol -->(1) lis reg, %HI(imm32)
+ ori reg, %LO(imm32) */
+ {"la", 0x020c0000, 0x3e0e0000, 0x8000, Insn_Type_SYN, do_macro_la_rdi32},
+ {"div", 0x00000044, 0x3e0003ff, 0x8000, Insn_Type_SYN, do_macro_mul_rdrsrs},
+ {"divu", 0x00000046, 0x3e0003ff, 0x8000, Insn_Type_SYN, do_macro_mul_rdrsrs},
+ {"rem", 0x00000044, 0x3e0003ff, 0x8000, Insn_Type_SYN, do_macro_mul_rdrsrs},
+ {"remu", 0x00000046, 0x3e0003ff, 0x8000, Insn_Type_SYN, do_macro_mul_rdrsrs},
+ {"mul", 0x00000040, 0x3e0003ff, 0x8000, Insn_Type_SYN, do_macro_mul_rdrsrs},
+ {"mulu", 0x00000042, 0x3e0003ff, 0x8000, Insn_Type_SYN, do_macro_mul_rdrsrs},
+ {"maz", 0x00000040, 0x3e0003ff, 0x8000, Insn_Type_SYN, do_macro_mul_rdrsrs},
+ {"mazu", 0x00000042, 0x3e0003ff, 0x8000, Insn_Type_SYN, do_macro_mul_rdrsrs},
+ {"mul.f", 0x00000041, 0x3e0003ff, 0x8000, Insn_Type_SYN, do_macro_mul_rdrsrs},
+ {"maz.f", 0x00000041, 0x3e0003ff, 0x8000, Insn_Type_SYN, do_macro_mul_rdrsrs},
+ {"lb", INSN_LB, 0x00000000, 0x8000, Insn_Type_SYN, do_macro_ldst_label},
+ {"lbu", INSN_LBU, 0x00000000, 0x200b, Insn_Type_SYN, do_macro_ldst_label},
+ {"lh", INSN_LH, 0x00000000, 0x2009, Insn_Type_SYN, do_macro_ldst_label},
+ {"lhu", INSN_LHU, 0x00000000, 0x8000, Insn_Type_SYN, do_macro_ldst_label},
+ {"lw", INSN_LW, 0x00000000, 0x2008, Insn_Type_SYN, do_macro_ldst_label},
+ {"sb", INSN_SB, 0x00000000, 0x200f, Insn_Type_SYN, do_macro_ldst_label},
+ {"sh", INSN_SH, 0x00000000, 0x200d, Insn_Type_SYN, do_macro_ldst_label},
+ {"sw", INSN_SW, 0x00000000, 0x200c, Insn_Type_SYN, do_macro_ldst_label},
+ /* Assembler use internal. */
+ {"ld_i32hi", 0x0a0c0000, 0x3e0e0000, 0x8000, Insn_internal, do_macro_rdi32hi},
+ {"ld_i32lo", 0x020a0000, 0x3e0e0001, 0x8000, Insn_internal, do_macro_rdi32lo},
+ {"ldis_pic", 0x0a0c0000, 0x3e0e0000, 0x5000, Insn_internal, do_rdi16_pic},
+ {"addi_s_pic",0x02000000, 0x3e0e0001, 0x8000, Insn_internal, do_addi_s_pic},
+ {"addi_u_pic",0x02000000, 0x3e0e0001, 0x8000, Insn_internal, do_addi_u_pic},
+ {"lw_pic", 0x20000000, 0x3e000000, 0x8000, Insn_internal, do_lw_pic},
+};
+
+/* Next free entry in the pool. */
+int next_literal_pool_place = 0;
+
+/* Next literal pool number. */
+int lit_pool_num = 1;
+symbolS *current_poolP = NULL;
+
+
+static int
+end_of_line (char *str)
+{
+ int retval = SUCCESS;
+
+ skip_whitespace (str);
+ if (*str != '\0')
+ {
+ retval = (int) FAIL;
+
+ if (!inst.error)
+ inst.error = BAD_GARBAGE;
+ }
+
+ return retval;
+}
+
+static int
+score_reg_parse (char **ccp, struct hash_control *htab)
+{
+ char *start = *ccp;
+ char c;
+ char *p;
+ struct reg_entry *reg;
+
+ p = start;
+ if (!ISALPHA (*p) || !is_name_beginner (*p))
+ return (int) FAIL;
+
+ c = *p++;
+
+ while (ISALPHA (c) || ISDIGIT (c) || c == '_')
+ c = *p++;
+
+ *--p = 0;
+ reg = (struct reg_entry *) hash_find (htab, start);
+ *p = c;
+
+ if (reg)
+ {
+ *ccp = p;
+ return reg->number;
+ }
+ return (int) FAIL;
+}
+
+/* If shift <= 0, only return reg. */
+
+static int
+reg_required_here (char **str, int shift, enum score_reg_type reg_type)
+{
+ static char buff[MAX_LITERAL_POOL_SIZE];
+ int reg = (int) FAIL;
+ char *start = *str;
+
+ if ((reg = score_reg_parse (str, all_reg_maps[reg_type].htab)) != (int) FAIL)
+ {
+ if (reg_type == REG_TYPE_SCORE)
+ {
+ if ((reg == 1) && (nor1 == 1) && (inst.bwarn == 0))
+ {
+ as_warn (_("Using temp register(r1)"));
+ inst.bwarn = 1;
+ }
+ }
+ if (shift >= 0)
+ {
+ if (reg_type == REG_TYPE_SCORE_CR)
+ strcpy (inst.reg, score_crn_table[reg].name);
+ else if (reg_type == REG_TYPE_SCORE_SR)
+ strcpy (inst.reg, score_srn_table[reg].name);
+ else
+ strcpy (inst.reg, "");
+
+ inst.instruction |= reg << shift;
+ }
+ }
+ else
+ {
+ *str = start;
+ sprintf (buff, _("register expected, not '%.100s'"), start);
+ inst.error = buff;
+ }
+
+ return reg;
+}
+
+static int
+skip_past_comma (char **str)
+{
+ char *p = *str;
+ char c;
+ int comma = 0;
+
+ while ((c = *p) == ' ' || c == ',')
+ {
+ p++;
+ if (c == ',' && comma++)
+ {
+ inst.error = BAD_SKIP_COMMA;
+ return (int) FAIL;
+ }
+ }
+
+ if ((c == '\0') || (comma == 0))
+ {
+ inst.error = BAD_SKIP_COMMA;
+ return (int) FAIL;
+ }
+
+ *str = p;
+ return comma ? SUCCESS : (int) FAIL;
+}
+
+static void
+do_rdrsrs (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || reg_required_here (&str, 15, REG_TYPE_SCORE) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || reg_required_here (&str, 10, REG_TYPE_SCORE) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ {
+ return;
+ }
+ else
+ {
+ if ((((inst.instruction >> 15) & 0x10) == 0)
+ && (((inst.instruction >> 10) & 0x10) == 0)
+ && (((inst.instruction >> 20) & 0x10) == 0)
+ && (inst.relax_inst != 0x8000)
+ && (((inst.instruction >> 20) & 0xf) == ((inst.instruction >> 15) & 0xf)))
+ {
+ inst.relax_inst |= (((inst.instruction >> 10) & 0xf) << 4)
+ | (((inst.instruction >> 15) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+}
+
+static int
+walk_no_bignums (symbolS * sp)
+{
+ if (symbol_get_value_expression (sp)->X_op == O_big)
+ return 1;
+
+ if (symbol_get_value_expression (sp)->X_add_symbol)
+ return (walk_no_bignums (symbol_get_value_expression (sp)->X_add_symbol)
+ || (symbol_get_value_expression (sp)->X_op_symbol
+ && walk_no_bignums (symbol_get_value_expression (sp)->X_op_symbol)));
+
+ return 0;
+}
+
+static int
+my_get_expression (expressionS * ep, char **str)
+{
+ char *save_in;
+ segT seg;
+
+ save_in = input_line_pointer;
+ input_line_pointer = *str;
+ in_my_get_expression = 1;
+ seg = expression (ep);
+ in_my_get_expression = 0;
+
+ if (ep->X_op == O_illegal)
+ {
+ *str = input_line_pointer;
+ input_line_pointer = save_in;
+ inst.error = _("illegal expression");
+ return (int) FAIL;
+ }
+ /* Get rid of any bignums now, so that we don't generate an error for which
+ we can't establish a line number later on. Big numbers are never valid
+ in instructions, which is where this routine is always called. */
+ if (ep->X_op == O_big
+ || (ep->X_add_symbol
+ && (walk_no_bignums (ep->X_add_symbol)
+ || (ep->X_op_symbol && walk_no_bignums (ep->X_op_symbol)))))
+ {
+ inst.error = _("invalid constant");
+ *str = input_line_pointer;
+ input_line_pointer = save_in;
+ return (int) FAIL;
+ }
+
+ if ((ep->X_add_symbol != NULL)
+ && (inst.type != PC_DISP19div2)
+ && (inst.type != PC_DISP8div2)
+ && (inst.type != PC_DISP24div2)
+ && (inst.type != PC_DISP11div2)
+ && (inst.type != Insn_Type_SYN)
+ && (inst.type != Rd_rvalueRs_SI15)
+ && (inst.type != Rd_lvalueRs_SI15)
+ && (inst.type != Insn_internal))
+ {
+ inst.error = BAD_ARGS;
+ *str = input_line_pointer;
+ input_line_pointer = save_in;
+ return (int) FAIL;
+ }
+
+ *str = input_line_pointer;
+ input_line_pointer = save_in;
+ return SUCCESS;
+}
+
+/* Check if an immediate is valid. If so, convert it to the right format. */
+
+static int
+validate_immediate (int val, unsigned int data_type, int hex_p)
+{
+ switch (data_type)
+ {
+ case _VALUE_HI16:
+ {
+ int val_hi = ((val & 0xffff0000) >> 16);
+
+ if (score_df_range[data_type].range[0] <= val_hi
+ && val_hi <= score_df_range[data_type].range[1])
+ return val_hi;
+ }
+ break;
+
+ case _VALUE_LO16:
+ {
+ int val_lo = (val & 0xffff);
+
+ if (score_df_range[data_type].range[0] <= val_lo
+ && val_lo <= score_df_range[data_type].range[1])
+ return val_lo;
+ }
+ break;
+
+ case _VALUE:
+ return val;
+ break;
+
+ case _SIMM14:
+ if (hex_p == 1)
+ {
+ if (!(val >= -0x2000 && val <= 0x3fff))
+ {
+ return (int) FAIL;
+ }
+ }
+ else
+ {
+ if (!(val >= -8192 && val <= 8191))
+ {
+ return (int) FAIL;
+ }
+ }
+
+ return val;
+ break;
+
+ case _SIMM16_NEG:
+ if (hex_p == 1)
+ {
+ if (!(val >= -0x7fff && val <= 0xffff && val != 0x8000))
+ {
+ return (int) FAIL;
+ }
+ }
+ else
+ {
+ if (!(val >= -32767 && val <= 32768))
+ {
+ return (int) FAIL;
+ }
+ }
+
+ val = -val;
+ return val;
+ break;
+
+ default:
+ if (data_type == _SIMM14_NEG || data_type == _IMM16_NEG)
+ val = -val;
+
+ if (score_df_range[data_type].range[0] <= val
+ && val <= score_df_range[data_type].range[1])
+ return val;
+
+ break;
+ }
+
+ return (int) FAIL;
+}
+
+static int
+data_op2 (char **str, int shift, enum score_data_type data_type)
+{
+ int value;
+ char data_exp[MAX_LITERAL_POOL_SIZE];
+ char *dataptr;
+ int cnt = 0;
+ char *pp = NULL;
+
+ skip_whitespace (*str);
+ inst.error = NULL;
+ dataptr = * str;
+
+ /* Set hex_p to zero. */
+ int hex_p = 0;
+
+ while ((*dataptr != '\0') && (*dataptr != '|') && (cnt <= MAX_LITERAL_POOL_SIZE)) /* 0x7c = ='|' */
+ {
+ data_exp[cnt] = *dataptr;
+ dataptr++;
+ cnt++;
+ }
+
+ data_exp[cnt] = '\0';
+ pp = (char *)&data_exp;
+
+ if (*dataptr == '|') /* process PCE */
+ {
+ if (my_get_expression (&inst.reloc.exp, &pp) == (int) FAIL)
+ return (int) FAIL;
+ end_of_line (pp);
+ if (inst.error != 0)
+ return (int) FAIL; /* to ouptut_inst to printf out the error */
+ *str = dataptr;
+ }
+ else /* process 16 bit */
+ {
+ if (my_get_expression (&inst.reloc.exp, str) == (int) FAIL)
+ {
+ return (int) FAIL;
+ }
+
+ dataptr = (char *)data_exp;
+ for (; *dataptr != '\0'; dataptr++)
+ {
+ *dataptr = TOLOWER (*dataptr);
+ if (*dataptr == '!' || *dataptr == ' ')
+ break;
+ }
+ dataptr = (char *)data_exp;
+
+ if ((dataptr != NULL)
+ && (((strstr (dataptr, "0x")) != NULL)
+ || ((strstr (dataptr, "0X")) != NULL)))
+ {
+ hex_p = 1;
+ if ((data_type != _SIMM16_LA)
+ && (data_type != _VALUE_HI16)
+ && (data_type != _VALUE_LO16)
+ && (data_type != _IMM16)
+ && (data_type != _IMM15)
+ && (data_type != _IMM14)
+ && (data_type != _IMM4)
+ && (data_type != _IMM5)
+ && (data_type != _IMM8)
+ && (data_type != _IMM5_RSHIFT_1)
+ && (data_type != _IMM5_RSHIFT_2)
+ && (data_type != _SIMM14)
+ && (data_type != _SIMM14_NEG)
+ && (data_type != _SIMM16_NEG)
+ && (data_type != _IMM10_RSHIFT_2)
+ && (data_type != _GP_IMM15))
+ {
+ data_type += 24;
+ }
+ }
+
+ if ((inst.reloc.exp.X_add_number == 0)
+ && (inst.type != Insn_Type_SYN)
+ && (inst.type != Rd_rvalueRs_SI15)
+ && (inst.type != Rd_lvalueRs_SI15)
+ && (inst.type != Insn_internal)
+ && (((*dataptr >= 'a') && (*dataptr <= 'z'))
+ || ((*dataptr == '0') && (*(dataptr + 1) == 'x') && (*(dataptr + 2) != '0'))
+ || ((*dataptr == '+') && (*(dataptr + 1) != '0'))
+ || ((*dataptr == '-') && (*(dataptr + 1) != '0'))))
+ {
+ inst.error = BAD_ARGS;
+ return (int) FAIL;
+ }
+ }
+
+ if ((inst.reloc.exp.X_add_symbol)
+ && ((data_type == _SIMM16)
+ || (data_type == _SIMM16_NEG)
+ || (data_type == _IMM16_NEG)
+ || (data_type == _SIMM14)
+ || (data_type == _SIMM14_NEG)
+ || (data_type == _IMM5)
+ || (data_type == _IMM14)
+ || (data_type == _IMM20)
+ || (data_type == _IMM16)
+ || (data_type == _IMM15)
+ || (data_type == _IMM4)))
+ {
+ inst.error = BAD_ARGS;
+ return (int) FAIL;
+ }
+
+ if (inst.reloc.exp.X_add_symbol)
+ {
+ switch (data_type)
+ {
+ case _SIMM16_LA:
+ return (int) FAIL;
+ case _VALUE_HI16:
+ inst.reloc.type = BFD_RELOC_HI16_S;
+ inst.reloc.pc_rel = 0;
+ break;
+ case _VALUE_LO16:
+ inst.reloc.type = BFD_RELOC_LO16;
+ inst.reloc.pc_rel = 0;
+ break;
+ case _GP_IMM15:
+ inst.reloc.type = BFD_RELOC_SCORE_GPREL15;
+ inst.reloc.pc_rel = 0;
+ break;
+ case _SIMM16_pic:
+ case _IMM16_LO16_pic:
+ inst.reloc.type = BFD_RELOC_SCORE_GOT_LO16;
+ inst.reloc.pc_rel = 0;
+ break;
+ default:
+ inst.reloc.type = BFD_RELOC_32;
+ inst.reloc.pc_rel = 0;
+ break;
+ }
+ }
+ else
+ {
+ if (data_type == _IMM16_pic)
+ {
+ inst.reloc.type = BFD_RELOC_SCORE_DUMMY_HI16;
+ inst.reloc.pc_rel = 0;
+ }
+
+ if (data_type == _SIMM16_LA && inst.reloc.exp.X_unsigned == 1)
+ {
+ value = validate_immediate (inst.reloc.exp.X_add_number, _SIMM16_LA_POS, hex_p);
+ if (value == (int) FAIL) /* for advance to check if this is ldis */
+ if ((inst.reloc.exp.X_add_number & 0xffff) == 0)
+ {
+ inst.instruction |= 0x8000000;
+ inst.instruction |= ((inst.reloc.exp.X_add_number >> 16) << 1) & 0x1fffe;
+ return SUCCESS;
+ }
+ }
+ else
+ {
+ value = validate_immediate (inst.reloc.exp.X_add_number, data_type, hex_p);
+ }
+
+ if (value == (int) FAIL)
+ {
+ if ((data_type != _SIMM14_NEG) && (data_type != _SIMM16_NEG) && (data_type != _IMM16_NEG))
+ {
+ sprintf (err_msg,
+ _("invalid constant: %d bit expression not in range %d..%d"),
+ score_df_range[data_type].bits,
+ score_df_range[data_type].range[0], score_df_range[data_type].range[1]);
+ }
+ else
+ {
+ sprintf (err_msg,
+ _("invalid constant: %d bit expression not in range %d..%d"),
+ score_df_range[data_type].bits,
+ -score_df_range[data_type].range[1], -score_df_range[data_type].range[0]);
+ }
+
+ inst.error = err_msg;
+ return (int) FAIL;
+ }
+
+ if ((score_df_range[data_type].range[0] != 0) || (data_type == _IMM5_RANGE_8_31))
+ {
+ value &= (1 << score_df_range[data_type].bits) - 1;
+ }
+
+ inst.instruction |= value << shift;
+ }
+
+ if ((inst.instruction & 0xf0000000) == 0x30000000)
+ {
+ if ((((inst.instruction >> 20) & 0x1F) != 0)
+ && (((inst.instruction >> 20) & 0x1F) != 1)
+ && (((inst.instruction >> 20) & 0x1F) != 2)
+ && (((inst.instruction >> 20) & 0x1F) != 3)
+ && (((inst.instruction >> 20) & 0x1F) != 4)
+ && (((inst.instruction >> 20) & 0x1F) != 8)
+ && (((inst.instruction >> 20) & 0x1F) != 9)
+ && (((inst.instruction >> 20) & 0x1F) != 0xa)
+ && (((inst.instruction >> 20) & 0x1F) != 0xb)
+ && (((inst.instruction >> 20) & 0x1F) != 0xc)
+ && (((inst.instruction >> 20) & 0x1F) != 0xd)
+ && (((inst.instruction >> 20) & 0x1F) != 0xe)
+ && (((inst.instruction >> 20) & 0x1F) != 0x10)
+ && (((inst.instruction >> 20) & 0x1F) != 0x11)
+ && (((inst.instruction >> 20) & 0x1F) != 0x18)
+ && (((inst.instruction >> 20) & 0x1F) != 0x1A)
+ && (((inst.instruction >> 20) & 0x1F) != 0x1B)
+ && (((inst.instruction >> 20) & 0x1F) != 0x1d)
+ && (((inst.instruction >> 20) & 0x1F) != 0x1e)
+ && (((inst.instruction >> 20) & 0x1F) != 0x1f))
+ {
+ inst.error = _("invalid constant: bit expression not defined");
+ return (int) FAIL;
+ }
+ }
+
+ return SUCCESS;
+}
+
+/* Handle addi/addi.c/addis.c/cmpi.c/addis.c/ldi. */
+
+static void
+do_rdsi16 (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || data_op2 (&str, 1, _SIMM16) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ return;
+
+ /* ldi. */
+ if ((inst.instruction & 0x20c0000) == 0x20c0000)
+ {
+ if ((((inst.instruction >> 20) & 0x10) == 0x10) || ((inst.instruction & 0x1fe00) != 0))
+ {
+ inst.relax_inst = 0x8000;
+ }
+ else
+ {
+ inst.relax_inst |= (inst.instruction >> 1) & 0xff;
+ inst.relax_inst |= (((inst.instruction >> 20) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ }
+ else if (((inst.instruction >> 20) & 0x10) == 0x10)
+ {
+ inst.relax_inst = 0x8000;
+ }
+}
+
+/* Handle subi/subi.c. */
+
+static void
+do_sub_rdsi16 (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL
+ && data_op2 (&str, 1, _SIMM16_NEG) != (int) FAIL)
+ end_of_line (str);
+}
+
+/* Handle addri/addri.c. */
+
+static void
+do_rdrssi14 (char *str) /* -(2^13)~((2^13)-1) */
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL
+ && reg_required_here (&str, 15, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL)
+ data_op2 (&str, 1, _SIMM14);
+}
+
+/* Handle subri.c/subri. */
+static void
+do_sub_rdrssi14 (char *str) /* -(2^13)~((2^13)-1) */
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL
+ && reg_required_here (&str, 15, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL
+ && data_op2 (&str, 1, _SIMM14_NEG) != (int) FAIL)
+ end_of_line (str);
+}
+
+/* Handle bitclr.c/bitset.c/bittgl.c/slli.c/srai.c/srli.c/roli.c/rori.c/rolic.c. */
+static void
+do_rdrsi5 (char *str) /* 0~((2^14)-1) */
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || reg_required_here (&str, 15, REG_TYPE_SCORE) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || data_op2 (&str, 10, _IMM5) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ return;
+
+ if ((((inst.instruction >> 20) & 0x1f) == ((inst.instruction >> 15) & 0x1f))
+ && (inst.relax_inst != 0x8000) && (((inst.instruction >> 15) & 0x10) == 0))
+ {
+ inst.relax_inst |= (((inst.instruction >> 10) & 0x1f) << 3) | (((inst.instruction >> 15) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ else
+ inst.relax_inst = 0x8000;
+}
+
+/* Handle andri/orri/andri.c/orri.c. */
+
+static void
+do_rdrsi14 (char *str) /* 0 ~ ((2^14)-1) */
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL
+ && reg_required_here (&str, 15, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL
+ && data_op2 (&str, 1, _IMM14) != (int) FAIL)
+ end_of_line (str);
+}
+
+/* Handle bittst.c. */
+static void
+do_xrsi5 (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 15, REG_TYPE_SCORE) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || data_op2 (&str, 10, _IMM5) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ return;
+
+ if ((inst.relax_inst != 0x8000) && (((inst.instruction >> 15) & 0x10) == 0))
+ {
+ inst.relax_inst |= (((inst.instruction >> 10) & 0x1f) << 3) | (((inst.instruction >> 15) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ else
+ inst.relax_inst = 0x8000;
+}
+
+/* Handle addis/andi/ori/andis/oris/ldis. */
+static void
+do_rdi16 (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || data_op2 (&str, 1, _IMM16) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ return;
+ /*
+ if (((inst.instruction & 0xa0dfffe) != 0xa0c0000) || ((((inst.instruction >> 20) & 0x1f) & 0x10) == 0x10))
+ inst.relax_inst = 0x8000;
+ else
+ inst.relax_size = 2;
+ */
+}
+
+static void
+do_macro_rdi32hi (char *str)
+{
+ skip_whitespace (str);
+
+ /* Do not handle end_of_line(). */
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL)
+ data_op2 (&str, 1, _VALUE_HI16);
+}
+
+static void
+do_macro_rdi32lo (char *str)
+{
+ skip_whitespace (str);
+
+ /* Do not handle end_of_line(). */
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL)
+ data_op2 (&str, 1, _VALUE_LO16);
+}
+
+/* Handle ldis_pic. */
+
+static void
+do_rdi16_pic (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL
+ && data_op2 (&str, 1, _IMM16_pic) != (int) FAIL)
+ end_of_line (str);
+}
+
+/* Handle addi_s_pic to generate R_SCORE_GOT_LO16 . */
+
+static void
+do_addi_s_pic (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL
+ && data_op2 (&str, 1, _SIMM16_pic) != (int) FAIL)
+ end_of_line (str);
+}
+
+/* Handle addi_u_pic to generate R_SCORE_GOT_LO16 . */
+
+static void
+do_addi_u_pic (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL
+ && data_op2 (&str, 1, _IMM16_LO16_pic) != (int) FAIL)
+ end_of_line (str);
+}
+
+/* Handle mfceh/mfcel/mtceh/mtchl. */
+
+static void
+do_rd (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) != (int) FAIL)
+ end_of_line (str);
+}
+
+static void
+do_rs (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 15, REG_TYPE_SCORE) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ return;
+
+ if ((inst.relax_inst != 0x8000) && (((inst.instruction >> 15) & 0x10) == 0))
+ {
+ inst.relax_inst |= (((inst.instruction >> 10) & 0xf) << 8) | (((inst.instruction >> 15) & 0xf) << 4);
+ inst.relax_size = 2;
+ }
+ else
+ inst.relax_inst = 0x8000;
+}
+
+static void
+do_i15 (char *str)
+{
+ skip_whitespace (str);
+
+ if (data_op2 (&str, 10, _IMM15) != (int) FAIL)
+ end_of_line (str);
+}
+
+static void
+do_xi5x (char *str)
+{
+ skip_whitespace (str);
+
+ if (data_op2 (&str, 15, _IMM5) == (int) FAIL || end_of_line (str) == (int) FAIL)
+ return;
+
+ if (inst.relax_inst != 0x8000)
+ {
+ inst.relax_inst |= (((inst.instruction >> 15) & 0x1f) << 3);
+ inst.relax_size = 2;
+ }
+}
+
+static void
+do_rdrs (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || reg_required_here (&str, 15, REG_TYPE_SCORE) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ return;
+
+ if (inst.relax_inst != 0x8000)
+ {
+ if (((inst.instruction & 0x7f) == 0x56)) /* adjust mv -> mv! / mlfh! / mhfl! */
+ {
+ /* mlfh */
+ if ((((inst.instruction >> 15) & 0x10) != 0x0) && (((inst.instruction >> 20) & 0x10) == 0))
+ {
+ inst.relax_inst = 0x00000001 | (((inst.instruction >> 15) & 0xf) << 4)
+ | (((inst.instruction >> 20) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ /* mhfl */
+ else if ((((inst.instruction >> 15) & 0x10) == 0x0) && ((inst.instruction >> 20) & 0x10) != 0)
+ {
+ inst.relax_inst = 0x00000002 | (((inst.instruction >> 15) & 0xf) << 4)
+ | (((inst.instruction >> 20) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ else if ((((inst.instruction >> 15) & 0x10) == 0x0) && (((inst.instruction >> 20) & 0x10) == 0))
+ {
+ inst.relax_inst |= (((inst.instruction >> 15) & 0xf) << 4)
+ | (((inst.instruction >> 20) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ else if ((((inst.instruction >> 15) & 0x10) == 0x0) && (((inst.instruction >> 20) & 0x10) == 0))
+ {
+ inst.relax_inst |= (((inst.instruction >> 15) & 0xf) << 4)
+ | (((inst.instruction >> 20) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+}
+
+/* Handle mfcr/mtcr. */
+static void
+do_rdcrs (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL
+ && reg_required_here (&str, 15, REG_TYPE_SCORE_CR) != (int) FAIL)
+ end_of_line (str);
+}
+
+/* Handle mfsr/mtsr. */
+
+static void
+do_rdsrs (char *str)
+{
+ skip_whitespace (str);
+
+ /* mfsr */
+ if ((inst.instruction & 0xff) == 0x50)
+ {
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL
+ && reg_required_here (&str, 10, REG_TYPE_SCORE_SR) != (int) FAIL)
+ end_of_line (str);
+ }
+ else
+ {
+ if (reg_required_here (&str, 15, REG_TYPE_SCORE) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL)
+ reg_required_here (&str, 10, REG_TYPE_SCORE_SR);
+ }
+}
+
+/* Handle neg. */
+
+static void
+do_rdxrs (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || reg_required_here (&str, 10, REG_TYPE_SCORE) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ return;
+
+ if ((inst.relax_inst != 0x8000) && (((inst.instruction >> 10) & 0x10) == 0)
+ && (((inst.instruction >> 20) & 0x10) == 0))
+ {
+ inst.relax_inst |= (((inst.instruction >> 10) & 0xf) << 4) | (((inst.instruction >> 20) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ else
+ inst.relax_inst = 0x8000;
+}
+
+/* Handle cmp.c/cmp<cond>. */
+static void
+do_rsrs (char *str)
+{
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 15, REG_TYPE_SCORE) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || reg_required_here (&str, 10, REG_TYPE_SCORE) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ return;
+
+ if ((inst.relax_inst != 0x8000) && (((inst.instruction >> 20) & 0x1f) == 3)
+ && (((inst.instruction >> 10) & 0x10) == 0) && (((inst.instruction >> 15) & 0x10) == 0))
+ {
+ inst.relax_inst |= (((inst.instruction >> 10) & 0xf) << 4) | (((inst.instruction >> 15) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ else
+ inst.relax_inst = 0x8000;
+}
+
+static void
+do_ceinst (char *str)
+{
+ char *strbak;
+
+ strbak = str;
+ skip_whitespace (str);
+
+ if (data_op2 (&str, 20, _IMM5) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || reg_required_here (&str, 15, REG_TYPE_SCORE) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || reg_required_here (&str, 10, REG_TYPE_SCORE) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || data_op2 (&str, 5, _IMM5) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || data_op2 (&str, 0, _IMM5) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ {
+ return;
+ }
+ else
+ {
+ str = strbak;
+ if (data_op2 (&str, 0, _IMM25) == (int) FAIL)
+ return;
+ }
+}
+
+static int
+reglow_required_here (char **str, int shift)
+{
+ static char buff[MAX_LITERAL_POOL_SIZE];
+ int reg;
+ char *start = *str;
+
+ if ((reg = score_reg_parse (str, all_reg_maps[REG_TYPE_SCORE].htab)) != (int) FAIL)
+ {
+ if ((reg == 1) && (nor1 == 1) && (inst.bwarn == 0))
+ {
+ as_warn (_("Using temp register(r1)"));
+ inst.bwarn = 1;
+ }
+ if (reg < 16)
+ {
+ if (shift >= 0)
+ inst.instruction |= reg << shift;
+
+ return reg;
+ }
+ }
+
+ /* Restore the start point, we may have got a reg of the wrong class. */
+ *str = start;
+ sprintf (buff, _("low register(r0-r15)expected, not '%.100s'"), start);
+ inst.error = buff;
+ return (int) FAIL;
+}
+
+/* Handle addc!/add!/and!/cmp!/neg!/not!/or!/sll!/srl!/sra!/xor!/sub!. */
+static void
+do16_rdrs (char *str)
+{
+ skip_whitespace (str);
+
+ if (reglow_required_here (&str, 8) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || reglow_required_here (&str, 4) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ {
+ return;
+ }
+ else
+ {
+ if ((inst.instruction & 0x700f) == 0x2003) /* cmp! */
+ {
+ inst.relax_inst |= (((inst.instruction >> 8) & 0xf) << 15)
+ | (((inst.instruction >> 4) & 0xf) << 10);
+ }
+ else if ((inst.instruction & 0x700f) == 0x2006) /* not! */
+ {
+ inst.relax_inst |= (((inst.instruction >> 8) & 0xf) << 20)
+ | (((inst.instruction >> 4) & 0xf) << 15);
+ }
+ else
+ {
+ inst.relax_inst |= (((inst.instruction >> 8) & 0xf) << 20)
+ | (((inst.instruction >> 8) & 0xf) << 15) | (((inst.instruction >> 4) & 0xf) << 10);
+ }
+ inst.relax_size = 4;
+ }
+}
+
+static void
+do16_rs (char *str)
+{
+ int rd = 0;
+
+ skip_whitespace (str);
+
+ if ((rd = reglow_required_here (&str, 4)) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ {
+ return;
+ }
+ else
+ {
+ inst.relax_inst |= rd << 20;
+ inst.relax_size = 4;
+ }
+}
+
+/* Handle br!/brl!. */
+static void
+do16_xrs (char *str)
+{
+ skip_whitespace (str);
+
+ if (reglow_required_here (&str, 4) == (int) FAIL || end_of_line (str) == (int) FAIL)
+ {
+ return;
+ }
+ else
+ {
+ inst.relax_inst |= (((inst.instruction >> 8) & 0xf) << 10)
+ | (((inst.instruction >> 4) & 0xf) << 15);
+ inst.relax_size = 4;
+ }
+}
+
+static int
+reghigh_required_here (char **str, int shift)
+{
+ static char buff[MAX_LITERAL_POOL_SIZE];
+ int reg;
+ char *start = *str;
+
+ if ((reg = score_reg_parse (str, all_reg_maps[REG_TYPE_SCORE].htab)) != (int) FAIL)
+ {
+ if (15 < reg && reg < 32)
+ {
+ if (shift >= 0)
+ inst.instruction |= (reg & 0xf) << shift;
+
+ return reg;
+ }
+ }
+
+ *str = start;
+ sprintf (buff, _("high register(r16-r31)expected, not '%.100s'"), start);
+ inst.error = buff;
+ return (int) FAIL;
+}
+
+/* Handle mhfl!. */
+static void
+do16_hrdrs (char *str)
+{
+ skip_whitespace (str);
+
+ if (reghigh_required_here (&str, 8) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL
+ && reglow_required_here (&str, 4) != (int) FAIL
+ && end_of_line (str) != (int) FAIL)
+ {
+ inst.relax_inst |= ((((inst.instruction >> 8) & 0xf) | 0x10) << 20)
+ | (((inst.instruction >> 4) & 0xf) << 15) | (0xf << 10);
+ inst.relax_size = 4;
+ }
+}
+
+/* Handle mlfh!. */
+static void
+do16_rdhrs (char *str)
+{
+ skip_whitespace (str);
+
+ if (reglow_required_here (&str, 8) != (int) FAIL
+ && skip_past_comma (&str) != (int) FAIL
+ && reghigh_required_here (&str, 4) != (int) FAIL
+ && end_of_line (str) != (int) FAIL)
+ {
+ inst.relax_inst |= (((inst.instruction >> 8) & 0xf) << 20)
+ | ((((inst.instruction >> 4) & 0xf) | 0x10) << 15) | (0xf << 10);
+ inst.relax_size = 4;
+ }
+}
+
+/* We need to be able to fix up arbitrary expressions in some statements.
+ This is so that we can handle symbols that are an arbitrary distance from
+ the pc. The most common cases are of the form ((+/-sym -/+ . - 8) & mask),
+ which returns part of an address in a form which will be valid for
+ a data instruction. We do this by pushing the expression into a symbol
+ in the expr_section, and creating a fix for that. */
+static fixS *
+fix_new_score (fragS * frag, int where, short int size, expressionS * exp, int pc_rel, int reloc)
+{
+ fixS *new_fix;
+
+ switch (exp->X_op)
+ {
+ case O_constant:
+ case O_symbol:
+ case O_add:
+ case O_subtract:
+ new_fix = fix_new_exp (frag, where, size, exp, pc_rel, reloc);
+ break;
+ default:
+ new_fix = fix_new (frag, where, size, make_expr_symbol (exp), 0, pc_rel, reloc);
+ break;
+ }
+ return new_fix;
+}
+
+static void
+init_dependency_vector (void)
+{
+ int i;
+
+ for (i = 0; i < vector_size; i++)
+ memset (&dependency_vector[i], '\0', sizeof (dependency_vector[i]));
+
+ return;
+}
+
+static enum insn_type_for_dependency
+dependency_type_from_insn (char *insn_name)
+{
+ char name[INSN_NAME_LEN];
+ const struct insn_to_dependency *tmp;
+
+ strcpy (name, insn_name);
+ tmp = (const struct insn_to_dependency *) hash_find (dependency_insn_hsh, name);
+
+ if (tmp)
+ return tmp->type;
+
+ return D_all_insn;
+}
+
+static int
+check_dependency (char *pre_insn, char *pre_reg,
+ char *cur_insn, char *cur_reg, int *warn_or_error)
+{
+ int bubbles = 0;
+ unsigned int i;
+ enum insn_type_for_dependency pre_insn_type;
+ enum insn_type_for_dependency cur_insn_type;
+
+ pre_insn_type = dependency_type_from_insn (pre_insn);
+ cur_insn_type = dependency_type_from_insn (cur_insn);
+
+ for (i = 0; i < sizeof (data_dependency_table) / sizeof (data_dependency_table[0]); i++)
+ {
+ if ((pre_insn_type == data_dependency_table[i].pre_insn_type)
+ && (D_all_insn == data_dependency_table[i].cur_insn_type
+ || cur_insn_type == data_dependency_table[i].cur_insn_type)
+ && (strcmp (data_dependency_table[i].pre_reg, "") == 0
+ || strcmp (data_dependency_table[i].pre_reg, pre_reg) == 0)
+ && (strcmp (data_dependency_table[i].cur_reg, "") == 0
+ || strcmp (data_dependency_table[i].cur_reg, cur_reg) == 0))
+ {
+ bubbles = (score7) ? data_dependency_table[i].bubblenum_7 : data_dependency_table[i].bubblenum_5;
+ *warn_or_error = data_dependency_table[i].warn_or_error;
+ break;
+ }
+ }
+
+ return bubbles;
+}
+
+static void
+build_one_frag (struct score_it one_inst)
+{
+ char *p;
+ int relaxable_p = g_opt;
+ int relax_size = 0;
+
+ /* Start a new frag if frag_now is not empty. */
+ if (frag_now_fix () != 0)
+ {
+ if (!frag_now->tc_frag_data.is_insn)
+ frag_wane (frag_now);
+
+ frag_new (0);
+ }
+ frag_grow (20);
+
+ p = frag_more (one_inst.size);
+ md_number_to_chars (p, one_inst.instruction, one_inst.size);
+
+#ifdef OBJ_ELF
+ dwarf2_emit_insn (one_inst.size);
+#endif
+
+ relaxable_p &= (one_inst.relax_size != 0);
+ relax_size = relaxable_p ? one_inst.relax_size : 0;
+
+ p = frag_var (rs_machine_dependent, relax_size + RELAX_PAD_BYTE, 0,
+ RELAX_ENCODE (one_inst.size, one_inst.relax_size,
+ one_inst.type, 0, 0, relaxable_p),
+ NULL, 0, NULL);
+
+ if (relaxable_p)
+ md_number_to_chars (p, one_inst.relax_inst, relax_size);
+}
+
+static void
+handle_dependency (struct score_it *theinst)
+{
+ int i;
+ int warn_or_error = 0; /* warn - 0; error - 1 */
+ int bubbles = 0;
+ int remainder_bubbles = 0;
+ char cur_insn[INSN_NAME_LEN];
+ char pre_insn[INSN_NAME_LEN];
+ struct score_it nop_inst;
+ struct score_it pflush_inst;
+
+ nop_inst.instruction = 0x0000;
+ nop_inst.size = 2;
+ nop_inst.relax_inst = 0x80008000;
+ nop_inst.relax_size = 4;
+ nop_inst.type = NO16_OPD;
+
+ pflush_inst.instruction = 0x8000800a;
+ pflush_inst.size = 4;
+ pflush_inst.relax_inst = 0x8000;
+ pflush_inst.relax_size = 0;
+ pflush_inst.type = NO_OPD;
+
+ /* pflush will clear all data dependency. */
+ if (strcmp (theinst->name, "pflush") == 0)
+ {
+ init_dependency_vector ();
+ return;
+ }
+
+ /* Push current instruction to dependency_vector[0]. */
+ for (i = vector_size - 1; i > 0; i--)
+ memcpy (&dependency_vector[i], &dependency_vector[i - 1], sizeof (dependency_vector[i]));
+
+ memcpy (&dependency_vector[0], theinst, sizeof (dependency_vector[i]));
+
+ /* There is no dependency between nop and any instruction. */
+ if (strcmp (dependency_vector[0].name, "nop") == 0
+ || strcmp (dependency_vector[0].name, "nop!") == 0)
+ return;
+
+ /* "pce" is defined in insn_to_dependency_table. */
+#define PCE_NAME "pce"
+
+ if (dependency_vector[0].type == Insn_Type_PCE)
+ strcpy (cur_insn, PCE_NAME);
+ else
+ strcpy (cur_insn, dependency_vector[0].name);
+
+ for (i = 1; i < vector_size; i++)
+ {
+ /* The element of dependency_vector is NULL. */
+ if (dependency_vector[i].name[0] == '\0')
+ continue;
+
+ if (dependency_vector[i].type == Insn_Type_PCE)
+ strcpy (pre_insn, PCE_NAME);
+ else
+ strcpy (pre_insn, dependency_vector[i].name);
+
+ bubbles = check_dependency (pre_insn, dependency_vector[i].reg,
+ cur_insn, dependency_vector[0].reg, &warn_or_error);
+ remainder_bubbles = bubbles - i + 1;
+
+ if (remainder_bubbles > 0)
+ {
+ int j;
+
+ if (fix_data_dependency == 1)
+ {
+ if (remainder_bubbles <= 2)
+ {
+ if (warn_fix_data_dependency)
+ as_warn (_("Fix data dependency: %s %s -- %s %s (insert %d nop!/%d)"),
+ dependency_vector[i].name, dependency_vector[i].reg,
+ dependency_vector[0].name, dependency_vector[0].reg,
+ remainder_bubbles, bubbles);
+
+ for (j = (vector_size - 1); (j - remainder_bubbles) > 0; j--)
+ memcpy (&dependency_vector[j], &dependency_vector[j - remainder_bubbles],
+ sizeof (dependency_vector[j]));
+
+ for (j = 1; j <= remainder_bubbles; j++)
+ {
+ memset (&dependency_vector[j], '\0', sizeof (dependency_vector[j]));
+ /* Insert nop!. */
+ build_one_frag (nop_inst);
+ }
+ }
+ else
+ {
+ if (warn_fix_data_dependency)
+ as_warn (_("Fix data dependency: %s %s -- %s %s (insert 1 pflush/%d)"),
+ dependency_vector[i].name, dependency_vector[i].reg,
+ dependency_vector[0].name, dependency_vector[0].reg,
+ bubbles);
+
+ for (j = 1; j < vector_size; j++)
+ memset (&dependency_vector[j], '\0', sizeof (dependency_vector[j]));
+
+ /* Insert pflush. */
+ build_one_frag (pflush_inst);
+ }
+ }
+ else
+ {
+ if (warn_or_error)
+ {
+ as_bad (_("data dependency: %s %s -- %s %s (%d/%d bubble)"),
+ dependency_vector[i].name, dependency_vector[i].reg,
+ dependency_vector[0].name, dependency_vector[0].reg,
+ remainder_bubbles, bubbles);
+ }
+ else
+ {
+ as_warn (_("data dependency: %s %s -- %s %s (%d/%d bubble)"),
+ dependency_vector[i].name, dependency_vector[i].reg,
+ dependency_vector[0].name, dependency_vector[0].reg,
+ remainder_bubbles, bubbles);
+ }
+ }
+ }
+ }
+}
+
+static enum insn_class
+get_insn_class_from_type (enum score_insn_type type)
+{
+ enum insn_class retval = (int) FAIL;
+
+ switch (type)
+ {
+ case Rd_I4:
+ case Rd_I5:
+ case Rd_rvalueBP_I5:
+ case Rd_lvalueBP_I5:
+ case Rd_I8:
+ case PC_DISP8div2:
+ case PC_DISP11div2:
+ case Rd_Rs:
+ case Rd_HighRs:
+ case Rd_lvalueRs:
+ case Rd_rvalueRs:
+ case x_Rs:
+ case Rd_LowRs:
+ case NO16_OPD:
+ retval = INSN_CLASS_16;
+ break;
+ case Rd_Rs_I5:
+ case x_Rs_I5:
+ case x_I5_x:
+ case Rd_Rs_I14:
+ case I15:
+ case Rd_I16:
+ case Rd_SI16:
+ case Rd_rvalueRs_SI10:
+ case Rd_lvalueRs_SI10:
+ case Rd_rvalueRs_preSI12:
+ case Rd_rvalueRs_postSI12:
+ case Rd_lvalueRs_preSI12:
+ case Rd_lvalueRs_postSI12:
+ case Rd_Rs_SI14:
+ case Rd_rvalueRs_SI15:
+ case Rd_lvalueRs_SI15:
+ case PC_DISP19div2:
+ case PC_DISP24div2:
+ case Rd_Rs_Rs:
+ case x_Rs_x:
+ case x_Rs_Rs:
+ case Rd_Rs_x:
+ case Rd_x_Rs:
+ case Rd_x_x:
+ case OP5_rvalueRs_SI15:
+ case I5_Rs_Rs_I5_OP5:
+ case x_rvalueRs_post4:
+ case Rd_rvalueRs_post4:
+ case Rd_x_I5:
+ case Rd_lvalueRs_post4:
+ case x_lvalueRs_post4:
+ case Rd_Rs_Rs_imm:
+ case NO_OPD:
+ case Rd_lvalue32Rs:
+ case Rd_rvalue32Rs:
+ case Insn_GP:
+ case Insn_PIC:
+ case Insn_internal:
+ retval = INSN_CLASS_32;
+ break;
+ case Insn_Type_PCE:
+ retval = INSN_CLASS_PCE;
+ break;
+ case Insn_Type_SYN:
+ retval = INSN_CLASS_SYN;
+ break;
+ default:
+ abort ();
+ break;
+ }
+ return retval;
+}
+
+static unsigned long
+adjust_paritybit (unsigned long m_code, enum insn_class class)
+{
+ unsigned long result = 0;
+ unsigned long m_code_high = 0;
+ unsigned long m_code_low = 0;
+ unsigned long pb_high = 0;
+ unsigned long pb_low = 0;
+
+ if (class == INSN_CLASS_32)
+ {
+ pb_high = 0x80000000;
+ pb_low = 0x00008000;
+ }
+ else if (class == INSN_CLASS_16)
+ {
+ pb_high = 0;
+ pb_low = 0;
+ }
+ else if (class == INSN_CLASS_PCE)
+ {
+ pb_high = 0;
+ pb_low = 0x00008000;
+ }
+ else if (class == INSN_CLASS_SYN)
+ {
+ /* FIXME. at this time, INSN_CLASS_SYN must be 32 bit, but, instruction type should
+ be changed if macro instruction has been expanded. */
+ pb_high = 0x80000000;
+ pb_low = 0x00008000;
+ }
+ else
+ {
+ abort ();
+ }
+
+ m_code_high = m_code & 0x3fff8000;
+ m_code_low = m_code & 0x00007fff;
+ result = pb_high | (m_code_high << 1) | pb_low | m_code_low;
+ return result;
+
+}
+
+static void
+gen_insn_frag (struct score_it *part_1, struct score_it *part_2)
+{
+ char *p;
+ bfd_boolean pce_p = FALSE;
+ int relaxable_p = g_opt;
+ int relax_size = 0;
+ struct score_it *inst1 = part_1;
+ struct score_it *inst2 = part_2;
+ struct score_it backup_inst1;
+
+ pce_p = (inst2) ? TRUE : FALSE;
+ memcpy (&backup_inst1, inst1, sizeof (struct score_it));
+
+ /* Adjust instruction opcode and to be relaxed instruction opcode. */
+ if (pce_p)
+ {
+ backup_inst1.instruction = ((backup_inst1.instruction & 0x7FFF) << 15)
+ | (inst2->instruction & 0x7FFF);
+ backup_inst1.instruction = adjust_paritybit (backup_inst1.instruction, INSN_CLASS_PCE);
+ backup_inst1.relax_inst = 0x8000;
+ backup_inst1.size = INSN_SIZE;
+ backup_inst1.relax_size = 0;
+ backup_inst1.type = Insn_Type_PCE;
+ }
+ else
+ {
+ backup_inst1.instruction = adjust_paritybit (backup_inst1.instruction,
+ GET_INSN_CLASS (backup_inst1.type));
+ }
+
+ if (backup_inst1.relax_size != 0)
+ {
+ enum insn_class tmp;
+
+ tmp = (backup_inst1.size == INSN_SIZE) ? INSN_CLASS_16 : INSN_CLASS_32;
+ backup_inst1.relax_inst = adjust_paritybit (backup_inst1.relax_inst, tmp);
+ }
+
+ /* Check data dependency. */
+ handle_dependency (&backup_inst1);
+
+ /* Start a new frag if frag_now is not empty and is not instruction frag, maybe it contains
+ data produced by .ascii etc. Doing this is to make one instruction per frag. */
+ if (frag_now_fix () != 0)
+ {
+ if (!frag_now->tc_frag_data.is_insn)
+ frag_wane (frag_now);
+
+ frag_new (0);
+ }
+
+ /* Here, we must call frag_grow in order to keep the instruction frag type is
+ rs_machine_dependent.
+ For, frag_var may change frag_now->fr_type to rs_fill by calling frag_grow which
+ acturally will call frag_wane.
+ Calling frag_grow first will create a new frag_now which free size is 20 that is enough
+ for frag_var. */
+ frag_grow (20);
+
+ p = frag_more (backup_inst1.size);
+ md_number_to_chars (p, backup_inst1.instruction, backup_inst1.size);
+
+#ifdef OBJ_ELF
+ dwarf2_emit_insn (backup_inst1.size);
+#endif
+
+ /* Generate fixup structure. */
+ if (pce_p)
+ {
+ if (inst1->reloc.type != BFD_RELOC_NONE)
+ fix_new_score (frag_now, p - frag_now->fr_literal,
+ inst1->size, &inst1->reloc.exp,
+ inst1->reloc.pc_rel, inst1->reloc.type);
+
+ if (inst2->reloc.type != BFD_RELOC_NONE)
+ fix_new_score (frag_now, p - frag_now->fr_literal + 2,
+ inst2->size, &inst2->reloc.exp, inst2->reloc.pc_rel, inst2->reloc.type);
+ }
+ else
+ {
+ if (backup_inst1.reloc.type != BFD_RELOC_NONE)
+ fix_new_score (frag_now, p - frag_now->fr_literal,
+ backup_inst1.size, &backup_inst1.reloc.exp,
+ backup_inst1.reloc.pc_rel, backup_inst1.reloc.type);
+ }
+
+ /* relax_size may be 2, 4, 12 or 0, 0 indicates no relaxation. */
+ relaxable_p &= (backup_inst1.relax_size != 0);
+ relax_size = relaxable_p ? backup_inst1.relax_size : 0;
+
+ p = frag_var (rs_machine_dependent, relax_size + RELAX_PAD_BYTE, 0,
+ RELAX_ENCODE (backup_inst1.size, backup_inst1.relax_size,
+ backup_inst1.type, 0, 0, relaxable_p),
+ backup_inst1.reloc.exp.X_add_symbol, 0, NULL);
+
+ if (relaxable_p)
+ md_number_to_chars (p, backup_inst1.relax_inst, relax_size);
+
+ memcpy (inst1, &backup_inst1, sizeof (struct score_it));
+}
+
+static void
+parse_16_32_inst (char *insnstr, bfd_boolean gen_frag_p)
+{
+ char c;
+ char *p;
+ char *operator = insnstr;
+ const struct asm_opcode *opcode;
+
+ /* Parse operator and operands. */
+ skip_whitespace (operator);
+
+ for (p = operator; *p != '\0'; p++)
+ if ((*p == ' ') || (*p == '!'))
+ break;
+
+ if (*p == '!')
+ p++;
+
+ c = *p;
+ *p = '\0';
+
+ opcode = (const struct asm_opcode *) hash_find (score_ops_hsh, operator);
+ *p = c;
+
+ memset (&inst, '\0', sizeof (inst));
+ sprintf (inst.str, "%s", insnstr);
+ if (opcode)
+ {
+ inst.instruction = opcode->value;
+ inst.relax_inst = opcode->relax_value;
+ inst.type = opcode->type;
+ inst.size = GET_INSN_SIZE (inst.type);
+ inst.relax_size = 0;
+ inst.bwarn = 0;
+ sprintf (inst.name, "%s", opcode->template);
+ strcpy (inst.reg, "");
+ inst.error = NULL;
+ inst.reloc.type = BFD_RELOC_NONE;
+
+ (*opcode->parms) (p);
+
+ /* It indicates current instruction is a macro instruction if inst.bwarn equals -1. */
+ if ((inst.bwarn != -1) && (!inst.error) && (gen_frag_p))
+ gen_insn_frag (&inst, NULL);
+ }
+ else
+ inst.error = _("unrecognized opcode");
+}
+
+static int
+append_insn (char *str, bfd_boolean gen_frag_p)
+{
+ int retval = SUCCESS;
+
+ parse_16_32_inst (str, gen_frag_p);
+
+ if (inst.error)
+ {
+ retval = (int) FAIL;
+ as_bad (_("%s -- `%s'"), inst.error, inst.str);
+ inst.error = NULL;
+ }
+
+ return retval;
+}
+
+/* Handle mv! reg_high, reg_low;
+ mv! reg_low, reg_high;
+ mv! reg_low, reg_low; */
+static void
+do16_mv_rdrs (char *str)
+{
+ int reg_rd;
+ int reg_rs;
+ char *backupstr = NULL;
+
+ backupstr = str;
+ skip_whitespace (str);
+
+ if ((reg_rd = reg_required_here (&str, 8, REG_TYPE_SCORE)) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || (reg_rs = reg_required_here (&str, 4, REG_TYPE_SCORE)) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ {
+ return;
+ }
+ else
+ {
+ /* Case 1 : mv! or mlfh!. */
+ if (reg_rd < 16)
+ {
+ if (reg_rs < 16)
+ {
+ inst.relax_inst |= (((inst.instruction >> 8) & 0xf) << 20)
+ | (((inst.instruction >> 4) & 0xf) << 15) | (0xf << 10);
+ inst.relax_size = 4;
+ }
+ else
+ {
+ char append_str[MAX_LITERAL_POOL_SIZE];
+
+ sprintf (append_str, "mlfh! %s", backupstr);
+ if (append_insn (append_str, TRUE) == (int) FAIL)
+ return;
+ /* Set bwarn as -1, so macro instruction itself will not be generated frag. */
+ inst.bwarn = -1;
+ }
+ }
+ /* Case 2 : mhfl!. */
+ else
+ {
+ if (reg_rs > 16)
+ {
+ SET_INSN_ERROR (BAD_ARGS);
+ return;
+ }
+ else
+ {
+ char append_str[MAX_LITERAL_POOL_SIZE];
+
+ sprintf (append_str, "mhfl! %s", backupstr);
+ if (append_insn (append_str, TRUE) == (int) FAIL)
+ return;
+
+ /* Set bwarn as -1, so macro instruction itself will not be generated frag. */
+ inst.bwarn = -1;
+ }
+ }
+ }
+}
+
+static void
+do16_rdi4 (char *str)
+{
+ skip_whitespace (str);
+
+ if (reglow_required_here (&str, 8) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || data_op2 (&str, 3, _IMM4) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ {
+ return;
+ }
+ else
+ {
+ if (((inst.instruction >> 3) & 0x10) == 0) /* for judge is addei or subei : bit 5 =0 : addei */
+ {
+ if (((inst.instruction >> 3) & 0xf) != 0xf)
+ {
+ inst.relax_inst |= (((inst.instruction >> 8) & 0xf) << 20)
+ | ((1 << ((inst.instruction >> 3) & 0xf)) << 1);
+ inst.relax_size = 4;
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ else
+ {
+ if (((inst.instruction >> 3) & 0xf) != 0xf)
+ {
+ inst.relax_inst |= (((inst.instruction >> 8) & 0xf) << 20)
+ | (((-(1 << ((inst.instruction >> 3) & 0xf))) & 0xffff) << 1);
+ inst.relax_size = 4;
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ }
+}
+
+static void
+do16_rdi5 (char *str)
+{
+ skip_whitespace (str);
+
+ if (reglow_required_here (&str, 8) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || data_op2 (&str, 3, _IMM5) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ return;
+ else
+ {
+ inst.relax_inst |= (((inst.instruction >> 8) & 0xf) << 20)
+ | (((inst.instruction >> 8) & 0xf) << 15) | (((inst.instruction >> 3) & 0x1f) << 10);
+ inst.relax_size = 4;
+ }
+}
+
+/* Handle sdbbp. */
+static void
+do16_xi5 (char *str)
+{
+ skip_whitespace (str);
+
+ if (data_op2 (&str, 3, _IMM5) == (int) FAIL || end_of_line (str) == (int) FAIL)
+ return;
+ else
+ {
+ inst.relax_inst |= (((inst.instruction >> 3) & 0x1f) << 15);
+ inst.relax_size = 4;
+ }
+}
+
+/* Check that an immediate is word alignment or half word alignment.
+ If so, convert it to the right format. */
+static int
+validate_immediate_align (int val, unsigned int data_type)
+{
+ if (data_type == _IMM5_RSHIFT_1)
+ {
+ if (val % 2)
+ {
+ inst.error = _("address offset must be half word alignment");
+ return (int) FAIL;
+ }
+ }
+ else if ((data_type == _IMM5_RSHIFT_2) || (data_type == _IMM10_RSHIFT_2))
+ {
+ if (val % 4)
+ {
+ inst.error = _("address offset must be word alignment");
+ return (int) FAIL;
+ }
+ }
+
+ return SUCCESS;
+}
+
+static int
+exp_ldst_offset (char **str, int shift, unsigned int data_type)
+{
+ char *dataptr;
+
+ dataptr = * str;
+
+ if ((*dataptr == '0') && (*(dataptr + 1) == 'x')
+ && (data_type != _SIMM16_LA)
+ && (data_type != _VALUE_HI16)
+ && (data_type != _VALUE_LO16)
+ && (data_type != _IMM16)
+ && (data_type != _IMM15)
+ && (data_type != _IMM14)
+ && (data_type != _IMM4)
+ && (data_type != _IMM5)
+ && (data_type != _IMM8)
+ && (data_type != _IMM5_RSHIFT_1)
+ && (data_type != _IMM5_RSHIFT_2)
+ && (data_type != _SIMM14_NEG)
+ && (data_type != _IMM10_RSHIFT_2))
+ {
+ data_type += 24;
+ }
+
+ if (my_get_expression (&inst.reloc.exp, str) == (int) FAIL)
+ return (int) FAIL;
+
+ if (inst.reloc.exp.X_op == O_constant)
+ {
+ /* Need to check the immediate align. */
+ int value = validate_immediate_align (inst.reloc.exp.X_add_number, data_type);
+
+ if (value == (int) FAIL)
+ return (int) FAIL;
+
+ value = validate_immediate (inst.reloc.exp.X_add_number, data_type, 0);
+ if (value == (int) FAIL)
+ {
+ if (data_type < 30)
+ sprintf (err_msg,
+ _("invalid constant: %d bit expression not in range %d..%d"),
+ score_df_range[data_type].bits,
+ score_df_range[data_type].range[0], score_df_range[data_type].range[1]);
+ else
+ sprintf (err_msg,
+ _("invalid constant: %d bit expression not in range %d..%d"),
+ score_df_range[data_type - 24].bits,
+ score_df_range[data_type - 24].range[0], score_df_range[data_type - 24].range[1]);
+ inst.error = err_msg;
+ return (int) FAIL;
+ }
+
+ if (data_type == _IMM5_RSHIFT_1)
+ {
+ value >>= 1;
+ }
+ else if ((data_type == _IMM5_RSHIFT_2) || (data_type == _IMM10_RSHIFT_2))
+ {
+ value >>= 2;
+ }
+
+ if (score_df_range[data_type].range[0] != 0)
+ {
+ value &= (1 << score_df_range[data_type].bits) - 1;
+ }
+
+ inst.instruction |= value << shift;
+ }
+ else
+ {
+ inst.reloc.pc_rel = 0;
+ }
+
+ return SUCCESS;
+}
+
+static void
+do_ldst_insn (char *str)
+{
+ int pre_inc = 0;
+ int conflict_reg;
+ int value;
+ char * temp;
+ char *strbak;
+ char *dataptr;
+ int reg;
+ int ldst_idx = 0;
+
+ strbak = str;
+ skip_whitespace (str);
+
+ if (((conflict_reg = reg_required_here (&str, 20, REG_TYPE_SCORE)) == (int) FAIL)
+ || (skip_past_comma (&str) == (int) FAIL))
+ return;
+
+ /* ld/sw rD, [rA, simm15] ld/sw rD, [rA]+, simm12 ld/sw rD, [rA, simm12]+. */
+ if (*str == '[')
+ {
+ str++;
+ skip_whitespace (str);
+
+ if ((reg = reg_required_here (&str, 15, REG_TYPE_SCORE)) == (int) FAIL)
+ return;
+
+ /* Conflicts can occur on stores as well as loads. */
+ conflict_reg = (conflict_reg == reg);
+ skip_whitespace (str);
+ temp = str + 1; /* The latter will process decimal/hex expression. */
+
+ /* ld/sw rD, [rA]+, simm12 ld/sw rD, [rA]+. */
+ if (*str == ']')
+ {
+ str++;
+ if (*str == '+')
+ {
+ str++;
+ /* ld/sw rD, [rA]+, simm12. */
+ if (skip_past_comma (&str) == SUCCESS)
+ {
+ if ((exp_ldst_offset (&str, 3, _SIMM12) == (int) FAIL)
+ || (end_of_line (str) == (int) FAIL))
+ return;
+
+ if (conflict_reg)
+ {
+ unsigned int ldst_func = inst.instruction & OPC_PSEUDOLDST_MASK;
+
+ if ((ldst_func == INSN_LH)
+ || (ldst_func == INSN_LHU)
+ || (ldst_func == INSN_LW)
+ || (ldst_func == INSN_LB)
+ || (ldst_func == INSN_LBU))
+ {
+ inst.error = _("register same as write-back base");
+ return;
+ }
+ }
+
+ ldst_idx = inst.instruction & OPC_PSEUDOLDST_MASK;
+ inst.instruction &= ~OPC_PSEUDOLDST_MASK;
+ inst.instruction |= score_ldst_insns[ldst_idx * 3 + LDST_POST].value;
+
+ /* lw rD, [rA]+, 4 convert to pop rD, [rA]. */
+ if ((inst.instruction & 0x3e000007) == 0x0e000000)
+ {
+ /* rs = r0-r7, offset = 4 */
+ if ((((inst.instruction >> 15) & 0x18) == 0)
+ && (((inst.instruction >> 3) & 0xfff) == 4))
+ {
+ /* Relax to pophi. */
+ if ((((inst.instruction >> 20) & 0x10) == 0x10))
+ {
+ inst.relax_inst = 0x0000200a | (((inst.instruction >> 20) & 0xf)
+ << 8) | 1 << 7 |
+ (((inst.instruction >> 15) & 0x7) << 4);
+ }
+ /* Relax to pop. */
+ else
+ {
+ inst.relax_inst = 0x0000200a | (((inst.instruction >> 20) & 0xf)
+ << 8) | 0 << 7 |
+ (((inst.instruction >> 15) & 0x7) << 4);
+ }
+ inst.relax_size = 2;
+ }
+ }
+ return;
+ }
+ /* ld/sw rD, [rA]+ convert to ld/sw rD, [rA, 0]+. */
+ else
+ {
+ SET_INSN_ERROR (NULL);
+ if (end_of_line (str) == (int) FAIL)
+ {
+ return;
+ }
+
+ pre_inc = 1;
+ value = validate_immediate (inst.reloc.exp.X_add_number, _SIMM12, 0);
+ value &= (1 << score_df_range[_SIMM12].bits) - 1;
+ ldst_idx = inst.instruction & OPC_PSEUDOLDST_MASK;
+ inst.instruction &= ~OPC_PSEUDOLDST_MASK;
+ inst.instruction |= score_ldst_insns[ldst_idx * 3 + pre_inc].value;
+ inst.instruction |= value << 3;
+ inst.relax_inst = 0x8000;
+ return;
+ }
+ }
+ /* ld/sw rD, [rA] convert to ld/sw rD, [rA, simm15]. */
+ else
+ {
+ if (end_of_line (str) == (int) FAIL)
+ return;
+
+ ldst_idx = inst.instruction & OPC_PSEUDOLDST_MASK;
+ inst.instruction &= ~OPC_PSEUDOLDST_MASK;
+ inst.instruction |= score_ldst_insns[ldst_idx * 3 + LDST_NOUPDATE].value;
+
+ /* lbu rd, [rs] -> lbu! rd, [rs] */
+ if (ldst_idx == INSN_LBU)
+ {
+ inst.relax_inst = INSN16_LBU;
+ }
+ else if (ldst_idx == INSN_LH)
+ {
+ inst.relax_inst = INSN16_LH;
+ }
+ else if (ldst_idx == INSN_LW)
+ {
+ inst.relax_inst = INSN16_LW;
+ }
+ else if (ldst_idx == INSN_SB)
+ {
+ inst.relax_inst = INSN16_SB;
+ }
+ else if (ldst_idx == INSN_SH)
+ {
+ inst.relax_inst = INSN16_SH;
+ }
+ else if (ldst_idx == INSN_SW)
+ {
+ inst.relax_inst = INSN16_SW;
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+
+ /* lw/lh/lbu/sw/sh/sb, offset = 0, relax to 16 bit instruction. */
+ if ((ldst_idx == INSN_LBU)
+ || (ldst_idx == INSN_LH)
+ || (ldst_idx == INSN_LW)
+ || (ldst_idx == INSN_SB) || (ldst_idx == INSN_SH) || (ldst_idx == INSN_SW))
+ {
+ if ((((inst.instruction >> 15) & 0x10) == 0) && (((inst.instruction >> 20) & 0x10) == 0))
+ {
+ inst.relax_inst |= (2 << 12) | (((inst.instruction >> 20) & 0xf) << 8) |
+ (((inst.instruction >> 15) & 0xf) << 4);
+ inst.relax_size = 2;
+ }
+ }
+
+ return;
+ }
+ }
+ /* ld/sw rD, [rA, simm15] ld/sw rD, [rA, simm12]+. */
+ else
+ {
+ if (skip_past_comma (&str) == (int) FAIL)
+ {
+ inst.error = _("pre-indexed expression expected");
+ return;
+ }
+
+ if (my_get_expression (&inst.reloc.exp, &str) == (int) FAIL)
+ return;
+
+ skip_whitespace (str);
+ if (*str++ != ']')
+ {
+ inst.error = _("missing ]");
+ return;
+ }
+
+ skip_whitespace (str);
+ /* ld/sw rD, [rA, simm12]+. */
+ if (*str == '+')
+ {
+ str++;
+ pre_inc = 1;
+ if (conflict_reg)
+ {
+ unsigned int ldst_func = inst.instruction & OPC_PSEUDOLDST_MASK;
+
+ if ((ldst_func == INSN_LH)
+ || (ldst_func == INSN_LHU)
+ || (ldst_func == INSN_LW)
+ || (ldst_func == INSN_LB)
+ || (ldst_func == INSN_LBU))
+ {
+ inst.error = _("register same as write-back base");
+ return;
+ }
+ }
+ }
+
+ if (end_of_line (str) == (int) FAIL)
+ return;
+
+ if (inst.reloc.exp.X_op == O_constant)
+ {
+ int value;
+ unsigned int data_type;
+
+ if (pre_inc == 1)
+ data_type = _SIMM12;
+ else
+ data_type = _SIMM15;
+ dataptr = temp;
+
+ if ((*dataptr == '0') && (*(dataptr + 1) == 'x')
+ && (data_type != _SIMM16_LA)
+ && (data_type != _VALUE_HI16)
+ && (data_type != _VALUE_LO16)
+ && (data_type != _IMM16)
+ && (data_type != _IMM15)
+ && (data_type != _IMM14)
+ && (data_type != _IMM4)
+ && (data_type != _IMM5)
+ && (data_type != _IMM8)
+ && (data_type != _IMM5_RSHIFT_1)
+ && (data_type != _IMM5_RSHIFT_2)
+ && (data_type != _SIMM14_NEG)
+ && (data_type != _IMM10_RSHIFT_2))
+ {
+ data_type += 24;
+ }
+
+ value = validate_immediate (inst.reloc.exp.X_add_number, data_type, 0);
+ if (value == (int) FAIL)
+ {
+ if (data_type < 30)
+ sprintf (err_msg,
+ _("invalid constant: %d bit expression not in range %d..%d"),
+ score_df_range[data_type].bits,
+ score_df_range[data_type].range[0], score_df_range[data_type].range[1]);
+ else
+ sprintf (err_msg,
+ _("invalid constant: %d bit expression not in range %d..%d"),
+ score_df_range[data_type - 24].bits,
+ score_df_range[data_type - 24].range[0],
+ score_df_range[data_type - 24].range[1]);
+ inst.error = err_msg;
+ return;
+ }
+
+ value &= (1 << score_df_range[data_type].bits) - 1;
+ ldst_idx = inst.instruction & OPC_PSEUDOLDST_MASK;
+ inst.instruction &= ~OPC_PSEUDOLDST_MASK;
+ inst.instruction |= score_ldst_insns[ldst_idx * 3 + pre_inc].value;
+ if (pre_inc == 1)
+ inst.instruction |= value << 3;
+ else
+ inst.instruction |= value;
+
+ /* lw rD, [rA, simm15] */
+ if ((inst.instruction & 0x3e000000) == 0x20000000)
+ {
+ /* Both rD and rA are in [r0 - r15]. */
+ if ((((inst.instruction >> 15) & 0x10) == 0)
+ && (((inst.instruction >> 20) & 0x10) == 0))
+ {
+ /* simm15 = 0, lw -> lw!. */
+ if ((inst.instruction & 0x7fff) == 0)
+ {
+ inst.relax_inst |= (((inst.instruction >> 15) & 0xf) << 4)
+ | (((inst.instruction >> 20) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ /* rA = r2, lw -> lwp!. */
+ else if ((((inst.instruction >> 15) & 0xf) == 2)
+ && ((inst.instruction & 0x3) == 0)
+ && ((inst.instruction & 0x7fff) < 128))
+ {
+ inst.relax_inst = 0x7000 | (((inst.instruction >> 20) & 0xf) << 8)
+ | (((inst.instruction & 0x7fff) >> 2) << 3);
+ inst.relax_size = 2;
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ /* sw rD, [rA, simm15] */
+ else if ((inst.instruction & 0x3e000000) == 0x28000000)
+ {
+ /* Both rD and rA are in [r0 - r15]. */
+ if ((((inst.instruction >> 15) & 0x10) == 0) && (((inst.instruction >> 20) & 0x10) == 0))
+ {
+ /* simm15 = 0, sw -> sw!. */
+ if ((inst.instruction & 0x7fff) == 0)
+ {
+ inst.relax_inst |= (((inst.instruction >> 15) & 0xf) << 4)
+ | (((inst.instruction >> 20) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ /* rA = r2, sw -> swp!. */
+ else if ((((inst.instruction >> 15) & 0xf) == 2)
+ && ((inst.instruction & 0x3) == 0)
+ && ((inst.instruction & 0x7fff) < 128))
+ {
+ inst.relax_inst = 0x7004 | (((inst.instruction >> 20) & 0xf) << 8)
+ | (((inst.instruction & 0x7fff) >> 2) << 3);
+ inst.relax_size = 2;
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ /* sw rD, [rA, simm15]+ sw pre. */
+ else if ((inst.instruction & 0x3e000007) == 0x06000004)
+ {
+ /* rA is in [r0 - r7], and simm15 = -4. */
+ if ((((inst.instruction >> 15) & 0x18) == 0)
+ && (((inst.instruction >> 3) & 0xfff) == 0xffc))
+ {
+ /* sw -> pushhi!. */
+ if ((((inst.instruction >> 20) & 0x10) == 0x10))
+ {
+ inst.relax_inst = 0x0000200e | (((inst.instruction >> 20) & 0xf) << 8)
+ | 1 << 7 | (((inst.instruction >> 15) & 0x7) << 4);
+ inst.relax_size = 2;
+ }
+ /* sw -> push!. */
+ else
+ {
+ inst.relax_inst = 0x0000200e | (((inst.instruction >> 20) & 0xf) << 8)
+ | 0 << 7 | (((inst.instruction >> 15) & 0x7) << 4);
+ inst.relax_size = 2;
+ }
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ /* lh rD, [rA, simm15] */
+ else if ((inst.instruction & 0x3e000000) == 0x22000000)
+ {
+ /* Both rD and rA are in [r0 - r15]. */
+ if ((((inst.instruction >> 15) & 0x10) == 0) && (((inst.instruction >> 20) & 0x10) == 0))
+ {
+ /* simm15 = 0, lh -> lh!. */
+ if ((inst.instruction & 0x7fff) == 0)
+ {
+ inst.relax_inst |= (((inst.instruction >> 15) & 0xf) << 4)
+ | (((inst.instruction >> 20) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ /* rA = r2, lh -> lhp!. */
+ else if ((((inst.instruction >> 15) & 0xf) == 2)
+ && ((inst.instruction & 0x1) == 0)
+ && ((inst.instruction & 0x7fff) < 64))
+ {
+ inst.relax_inst = 0x7001 | (((inst.instruction >> 20) & 0xf) << 8)
+ | (((inst.instruction & 0x7fff) >> 1) << 3);
+ inst.relax_size = 2;
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ /* sh rD, [rA, simm15] */
+ else if ((inst.instruction & 0x3e000000) == 0x2a000000)
+ {
+ /* Both rD and rA are in [r0 - r15]. */
+ if ((((inst.instruction >> 15) & 0x10) == 0) && (((inst.instruction >> 20) & 0x10) == 0))
+ {
+ /* simm15 = 0, sh -> sh!. */
+ if ((inst.instruction & 0x7fff) == 0)
+ {
+ inst.relax_inst |= (((inst.instruction >> 15) & 0xf) << 4)
+ | (((inst.instruction >> 20) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ /* rA = r2, sh -> shp!. */
+ else if ((((inst.instruction >> 15) & 0xf) == 2)
+ && ((inst.instruction & 0x1) == 0)
+ && ((inst.instruction & 0x7fff) < 64))
+ {
+ inst.relax_inst = 0x7005 | (((inst.instruction >> 20) & 0xf) << 8)
+ | (((inst.instruction & 0x7fff) >> 1) << 3);
+ inst.relax_size = 2;
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ /* lbu rD, [rA, simm15] */
+ else if ((inst.instruction & 0x3e000000) == 0x2c000000)
+ {
+ /* Both rD and rA are in [r0 - r15]. */
+ if ((((inst.instruction >> 15) & 0x10) == 0) && (((inst.instruction >> 20) & 0x10) == 0))
+ {
+ /* simm15 = 0, lbu -> lbu!. */
+ if ((inst.instruction & 0x7fff) == 0)
+ {
+ inst.relax_inst |= (((inst.instruction >> 15) & 0xf) << 4)
+ | (((inst.instruction >> 20) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ /* rA = r2, lbu -> lbup!. */
+ else if ((((inst.instruction >> 15) & 0xf) == 2)
+ && ((inst.instruction & 0x7fff) < 32))
+ {
+ inst.relax_inst = 0x7003 | (((inst.instruction >> 20) & 0xf) << 8)
+ | ((inst.instruction & 0x7fff) << 3);
+ inst.relax_size = 2;
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ /* sb rD, [rA, simm15] */
+ else if ((inst.instruction & 0x3e000000) == 0x2e000000)
+ {
+ /* Both rD and rA are in [r0 - r15]. */
+ if ((((inst.instruction >> 15) & 0x10) == 0) && (((inst.instruction >> 20) & 0x10) == 0))
+ {
+ /* simm15 = 0, sb -> sb!. */
+ if ((inst.instruction & 0x7fff) == 0)
+ {
+ inst.relax_inst |= (((inst.instruction >> 15) & 0xf) << 4)
+ | (((inst.instruction >> 20) & 0xf) << 8);
+ inst.relax_size = 2;
+ }
+ /* rA = r2, sb -> sb!. */
+ else if ((((inst.instruction >> 15) & 0xf) == 2)
+ && ((inst.instruction & 0x7fff) < 32))
+ {
+ inst.relax_inst = 0x7007 | (((inst.instruction >> 20) & 0xf) << 8)
+ | ((inst.instruction & 0x7fff) << 3);
+ inst.relax_size = 2;
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+
+ return;
+ }
+ else
+ {
+ /* FIXME: may set error, for there is no ld/sw rD, [rA, label] */
+ inst.reloc.pc_rel = 0;
+ }
+ }
+ }
+ else
+ {
+ inst.error = BAD_ARGS;
+ }
+}
+
+/* Handle cache. */
+
+static void
+do_cache (char *str)
+{
+ skip_whitespace (str);
+
+ if ((data_op2 (&str, 20, _IMM5) == (int) FAIL) || (skip_past_comma (&str) == (int) FAIL))
+ {
+ return;
+ }
+ else
+ {
+ int cache_op;
+
+ cache_op = (inst.instruction >> 20) & 0x1F;
+ sprintf (inst.name, "cache %d", cache_op);
+ }
+
+ if (*str == '[')
+ {
+ str++;
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 15, REG_TYPE_SCORE) == (int) FAIL)
+ return;
+
+ skip_whitespace (str);
+
+ /* cache op, [rA] */
+ if (skip_past_comma (&str) == (int) FAIL)
+ {
+ SET_INSN_ERROR (NULL);
+ if (*str != ']')
+ {
+ inst.error = _("missing ]");
+ return;
+ }
+ str++;
+ }
+ /* cache op, [rA, simm15] */
+ else
+ {
+ if (exp_ldst_offset (&str, 0, _SIMM15) == (int) FAIL)
+ {
+ return;
+ }
+
+ skip_whitespace (str);
+ if (*str++ != ']')
+ {
+ inst.error = _("missing ]");
+ return;
+ }
+ }
+
+ if (end_of_line (str) == (int) FAIL)
+ return;
+ }
+ else
+ {
+ inst.error = BAD_ARGS;
+ }
+}
+
+static void
+do_crdcrscrsimm5 (char *str)
+{
+ char *strbak;
+
+ strbak = str;
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE_CR) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || reg_required_here (&str, 15, REG_TYPE_SCORE_CR) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL
+ || reg_required_here (&str, 10, REG_TYPE_SCORE_CR) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL)
+ {
+ str = strbak;
+ /* cop1 cop_code20. */
+ if (data_op2 (&str, 5, _IMM20) == (int) FAIL)
+ return;
+ }
+ else
+ {
+ if (data_op2 (&str, 5, _IMM5) == (int) FAIL)
+ return;
+ }
+
+ end_of_line (str);
+}
+
+/* Handle ldc/stc. */
+static void
+do_ldst_cop (char *str)
+{
+ skip_whitespace (str);
+
+ if ((reg_required_here (&str, 15, REG_TYPE_SCORE_CR) == (int) FAIL)
+ || (skip_past_comma (&str) == (int) FAIL))
+ return;
+
+ if (*str == '[')
+ {
+ str++;
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 20, REG_TYPE_SCORE) == (int) FAIL)
+ return;
+
+ skip_whitespace (str);
+
+ if (*str++ != ']')
+ {
+ if (exp_ldst_offset (&str, 5, _IMM10_RSHIFT_2) == (int) FAIL)
+ return;
+
+ skip_whitespace (str);
+ if (*str++ != ']')
+ {
+ inst.error = _("missing ]");
+ return;
+ }
+ }
+
+ end_of_line (str);
+ }
+ else
+ inst.error = BAD_ARGS;
+}
+
+static void
+do16_ldst_insn (char *str)
+{
+ skip_whitespace (str);
+
+ if ((reglow_required_here (&str, 8) == (int) FAIL) || (skip_past_comma (&str) == (int) FAIL))
+ return;
+
+ if (*str == '[')
+ {
+ int reg;
+
+ str++;
+ skip_whitespace (str);
+
+ if ((reg = reglow_required_here (&str, 4)) == (int) FAIL)
+ return;
+
+ skip_whitespace (str);
+ if (*str++ == ']')
+ {
+ if (end_of_line (str) == (int) FAIL)
+ return;
+ else
+ {
+ inst.relax_inst |= (((inst.instruction >> 8) & 0xf) << 20)
+ | (((inst.instruction >> 4) & 0xf) << 15);
+ inst.relax_size = 4;
+ }
+ }
+ else
+ {
+ inst.error = _("missing ]");
+ }
+ }
+ else
+ {
+ inst.error = BAD_ARGS;
+ }
+}
+
+/* Handle lbup!/lhp!/ldiu!/lwp!/sbp!/shp!/swp!. */
+static void
+do16_ldst_imm_insn (char *str)
+{
+ char data_exp[MAX_LITERAL_POOL_SIZE];
+ int reg_rd;
+ char *dataptr = NULL, *pp = NULL;
+ int cnt = 0;
+ int assign_data = (int) FAIL;
+ unsigned int ldst_func;
+
+ skip_whitespace (str);
+
+ if (((reg_rd = reglow_required_here (&str, 8)) == (int) FAIL)
+ || (skip_past_comma (&str) == (int) FAIL))
+ return;
+
+ skip_whitespace (str);
+ dataptr = str;
+
+ while ((*dataptr != '\0') && (*dataptr != '|') && (cnt <= MAX_LITERAL_POOL_SIZE))
+ {
+ data_exp[cnt] = *dataptr;
+ dataptr++;
+ cnt++;
+ }
+
+ data_exp[cnt] = '\0';
+ pp = &data_exp[0];
+
+ str = dataptr;
+
+ ldst_func = inst.instruction & LDST16_RI_MASK;
+ if (ldst_func == N16_LIU)
+ assign_data = exp_ldst_offset (&pp, 0, _IMM8);
+ else if (ldst_func == N16_LHP || ldst_func == N16_SHP)
+ assign_data = exp_ldst_offset (&pp, 3, _IMM5_RSHIFT_1);
+ else if (ldst_func == N16_LWP || ldst_func == N16_SWP)
+ assign_data = exp_ldst_offset (&pp, 3, _IMM5_RSHIFT_2);
+ else
+ assign_data = exp_ldst_offset (&pp, 3, _IMM5);
+
+ if ((assign_data == (int) FAIL) || (end_of_line (pp) == (int) FAIL))
+ return;
+ else
+ {
+ if ((inst.instruction & 0x7000) == N16_LIU)
+ {
+ inst.relax_inst |= ((inst.instruction >> 8) & 0xf) << 20
+ | ((inst.instruction & 0xff) << 1);
+ }
+ else if (((inst.instruction & 0x7007) == N16_LHP)
+ || ((inst.instruction & 0x7007) == N16_SHP))
+ {
+ inst.relax_inst |= ((inst.instruction >> 8) & 0xf) << 20 | 2 << 15
+ | (((inst.instruction >> 3) & 0x1f) << 1);
+ }
+ else if (((inst.instruction & 0x7007) == N16_LWP)
+ || ((inst.instruction & 0x7007) == N16_SWP))
+ {
+ inst.relax_inst |= ((inst.instruction >> 8) & 0xf) << 20 | 2 << 15
+ | (((inst.instruction >> 3) & 0x1f) << 2);
+ }
+ else if (((inst.instruction & 0x7007) == N16_LBUP)
+ || ((inst.instruction & 0x7007) == N16_SBP))
+ {
+ inst.relax_inst |= ((inst.instruction >> 8) & 0xf) << 20 | 2 << 15
+ | (((inst.instruction >> 3) & 0x1f));
+ }
+
+ inst.relax_size = 4;
+ }
+}
+
+static void
+do16_push_pop (char *str)
+{
+ int reg_rd;
+ int H_bit_mask = 0;
+
+ skip_whitespace (str);
+ if (((reg_rd = reg_required_here (&str, 8, REG_TYPE_SCORE)) == (int) FAIL)
+ || (skip_past_comma (&str) == (int) FAIL))
+ return;
+
+ if (reg_rd >= 16)
+ H_bit_mask = 1;
+
+ /* reg_required_here will change bit 12 of opcode, so we must restore bit 12. */
+ inst.instruction &= ~(1 << 12);
+
+ inst.instruction |= H_bit_mask << 7;
+
+ if (*str == '[')
+ {
+ int reg;
+
+ str++;
+ skip_whitespace (str);
+ if ((reg = reg_required_here (&str, 4, REG_TYPE_SCORE)) == (int) FAIL)
+ return;
+ else if (reg > 7)
+ {
+ if (!inst.error)
+ inst.error = _("base register nums are over 3 bit");
+
+ return;
+ }
+
+ skip_whitespace (str);
+ if ((*str++ != ']') || (end_of_line (str) == (int) FAIL))
+ {
+ if (!inst.error)
+ inst.error = _("missing ]");
+
+ return;
+ }
+
+ /* pop! */
+ if ((inst.instruction & 0xf) == 0xa)
+ {
+ if (H_bit_mask)
+ {
+ inst.relax_inst |= ((((inst.instruction >> 8) & 0xf) | 0x10) << 20)
+ | (((inst.instruction >> 4) & 0x7) << 15) | (4 << 3);
+ }
+ else
+ {
+ inst.relax_inst |= (((inst.instruction >> 8) & 0xf) << 20)
+ | (((inst.instruction >> 4) & 0x7) << 15) | (4 << 3);
+ }
+ }
+ /* push! */
+ else
+ {
+ if (H_bit_mask)
+ {
+ inst.relax_inst |= ((((inst.instruction >> 8) & 0xf) | 0x10) << 20)
+ | (((inst.instruction >> 4) & 0x7) << 15) | (((-4) & 0xfff) << 3);
+ }
+ else
+ {
+ inst.relax_inst |= (((inst.instruction >> 8) & 0xf) << 20)
+ | (((inst.instruction >> 4) & 0x7) << 15) | (((-4) & 0xfff) << 3);
+ }
+ }
+ inst.relax_size = 4;
+ }
+ else
+ {
+ inst.error = BAD_ARGS;
+ }
+}
+
+/* Handle lcb/lcw/lce/scb/scw/sce. */
+static void
+do_ldst_unalign (char *str)
+{
+ int conflict_reg;
+
+ if (university_version == 1)
+ {
+ inst.error = ERR_FOR_SCORE5U_ATOMIC;
+ return;
+ }
+
+ skip_whitespace (str);
+
+ /* lcb/scb [rA]+. */
+ if (*str == '[')
+ {
+ str++;
+ skip_whitespace (str);
+
+ if (reg_required_here (&str, 15, REG_TYPE_SCORE) == (int) FAIL)
+ return;
+
+ if (*str++ == ']')
+ {
+ if (*str++ != '+')
+ {
+ inst.error = _("missing +");
+ return;
+ }
+ }
+ else
+ {
+ inst.error = _("missing ]");
+ return;
+ }
+
+ if (end_of_line (str) == (int) FAIL)
+ return;
+ }
+ /* lcw/lce/scb/sce rD, [rA]+. */
+ else
+ {
+ if (((conflict_reg = reg_required_here (&str, 20, REG_TYPE_SCORE)) == (int) FAIL)
+ || (skip_past_comma (&str) == (int) FAIL))
+ {
+ return;
+ }
+
+ skip_whitespace (str);
+ if (*str++ == '[')
+ {
+ int reg;
+
+ skip_whitespace (str);
+ if ((reg = reg_required_here (&str, 15, REG_TYPE_SCORE)) == (int) FAIL)
+ {
+ return;
+ }
+
+ /* Conflicts can occur on stores as well as loads. */
+ conflict_reg = (conflict_reg == reg);
+ skip_whitespace (str);
+ if (*str++ == ']')
+ {
+ unsigned int ldst_func = inst.instruction & LDST_UNALIGN_MASK;
+
+ if (*str++ == '+')
+ {
+ if (conflict_reg)
+ {
+ as_warn (_("%s register same as write-back base"),
+ ((ldst_func & UA_LCE) || (ldst_func & UA_LCW)
+ ? _("destination") : _("source")));
+ }
+ }
+ else
+ {
+ inst.error = _("missing +");
+ return;
+ }
+
+ if (end_of_line (str) == (int) FAIL)
+ return;
+ }
+ else
+ {
+ inst.error = _("missing ]");
+ return;
+ }
+ }
+ else
+ {
+ inst.error = BAD_ARGS;
+ return;
+ }
+ }
+}
+
+/* Handle alw/asw. */
+static void
+do_ldst_atomic (char *str)
+{
+ if (university_version == 1)
+ {
+ inst.error = ERR_FOR_SCORE5U_ATOMIC;
+ return;
+ }
+
+ skip_whitespace (str);
+
+ if ((reg_required_here (&str, 20, REG_TYPE_SCORE) == (int) FAIL)
+ || (skip_past_comma (&str) == (int) FAIL))
+ {
+ return;
+ }
+ else
+ {
+
+ skip_whitespace (str);
+ if (*str++ == '[')
+ {
+ int reg;
+
+ skip_whitespace (str);
+ if ((reg = reg_required_here (&str, 15, REG_TYPE_SCORE)) == (int) FAIL)
+ {
+ return;
+ }
+
+ skip_whitespace (str);
+ if (*str++ != ']')
+ {
+ inst.error = _("missing ]");
+ return;
+ }
+
+ end_of_line (str);
+ }
+ else
+ inst.error = BAD_ARGS;
+ }
+}
+
+static void
+build_relax_frag (struct score_it fix_insts[RELAX_INST_NUM], int fix_num ATTRIBUTE_UNUSED,
+ struct score_it var_insts[RELAX_INST_NUM], int var_num,
+ symbolS *add_symbol)
+{
+ int i;
+ char *p;
+ fixS *fixp = NULL;
+ fixS *cur_fixp = NULL;
+ long where;
+ struct score_it inst_main;
+
+ memcpy (&inst_main, &fix_insts[0], sizeof (struct score_it));
+
+ /* Adjust instruction opcode and to be relaxed instruction opcode. */
+ inst_main.instruction = adjust_paritybit (inst_main.instruction, GET_INSN_CLASS (inst_main.type));
+ inst_main.type = Insn_PIC;
+
+ for (i = 0; i < var_num; i++)
+ {
+ inst_main.relax_size += var_insts[i].size;
+ var_insts[i].instruction = adjust_paritybit (var_insts[i].instruction,
+ GET_INSN_CLASS (var_insts[i].type));
+ }
+
+ /* Check data dependency. */
+ handle_dependency (&inst_main);
+
+ /* Start a new frag if frag_now is not empty. */
+ if (frag_now_fix () != 0)
+ {
+ if (!frag_now->tc_frag_data.is_insn)
+ {
+ frag_wane (frag_now);
+ }
+ frag_new (0);
+ }
+ frag_grow (20);
+
+ /* Write fr_fix part. */
+ p = frag_more (inst_main.size);
+ md_number_to_chars (p, inst_main.instruction, inst_main.size);
+
+ if (inst_main.reloc.type != BFD_RELOC_NONE)
+ fixp = fix_new_score (frag_now, p - frag_now->fr_literal, inst_main.size,
+ &inst_main.reloc.exp, inst_main.reloc.pc_rel, inst_main.reloc.type);
+
+ frag_now->tc_frag_data.fixp = fixp;
+ cur_fixp = frag_now->tc_frag_data.fixp;
+
+#ifdef OBJ_ELF
+ dwarf2_emit_insn (inst_main.size);
+#endif
+
+ where = p - frag_now->fr_literal + inst_main.size;
+ for (i = 0; i < var_num; i++)
+ {
+ if (i > 0)
+ where += var_insts[i - 1].size;
+
+ if (var_insts[i].reloc.type != BFD_RELOC_NONE)
+ {
+ fixp = fix_new_score (frag_now, where, var_insts[i].size,
+ &var_insts[i].reloc.exp, var_insts[i].reloc.pc_rel,
+ var_insts[i].reloc.type);
+ if (fixp)
+ {
+ if (cur_fixp)
+ {
+ cur_fixp->fx_next = fixp;
+ cur_fixp = cur_fixp->fx_next;
+ }
+ else
+ {
+ frag_now->tc_frag_data.fixp = fixp;
+ cur_fixp = frag_now->tc_frag_data.fixp;
+ }
+ }
+ }
+ }
+
+ p = frag_var (rs_machine_dependent, inst_main.relax_size + RELAX_PAD_BYTE, 0,
+ RELAX_ENCODE (inst_main.size, inst_main.relax_size, inst_main.type,
+ 0, inst_main.size, 0), add_symbol, 0, NULL);
+
+ /* Write fr_var part.
+ no calling gen_insn_frag, no fixS will be generated. */
+ for (i = 0; i < var_num; i++)
+ {
+ md_number_to_chars (p, var_insts[i].instruction, var_insts[i].size);
+ p += var_insts[i].size;
+ }
+ /* Set bwarn as -1, so macro instruction itself will not be generated frag. */
+ inst.bwarn = -1;
+}
+
+/* Build a relax frag for la instruction when generating PIC,
+ external symbol first and local symbol second. */
+
+static void
+build_la_pic (int reg_rd, expressionS exp)
+{
+ symbolS *add_symbol = exp.X_add_symbol;
+ offsetT add_number = exp.X_add_number;
+ struct score_it fix_insts[RELAX_INST_NUM];
+ struct score_it var_insts[RELAX_INST_NUM];
+ int fix_num = 0;
+ int var_num = 0;
+ char tmp[MAX_LITERAL_POOL_SIZE];
+ int r1_bak;
+
+ r1_bak = nor1;
+ nor1 = 0;
+
+ if (add_number == 0)
+ {
+ fix_num = 1;
+ var_num = 2;
+
+ /* For an external symbol, only one insn is generated;
+ For a local symbol, two insns are generated. */
+ /* Fix part
+ For an external symbol: lw rD, <sym>($gp)
+ (BFD_RELOC_SCORE_GOT15 or BFD_RELOC_SCORE_CALL15) */
+ sprintf (tmp, "lw_pic r%d, %s", reg_rd, add_symbol->bsym->name);
+ if (append_insn (tmp, FALSE) == (int) FAIL)
+ return;
+
+ if (reg_rd == PIC_CALL_REG)
+ inst.reloc.type = BFD_RELOC_SCORE_CALL15;
+ memcpy (&fix_insts[0], &inst, sizeof (struct score_it));
+
+ /* Var part
+ For a local symbol :
+ lw rD, <sym>($gp) (BFD_RELOC_SCORE_GOT15)
+ addi rD, <sym> (BFD_RELOC_GOT_LO16) */
+ inst.reloc.type = BFD_RELOC_SCORE_GOT15;
+ memcpy (&var_insts[0], &inst, sizeof (struct score_it));
+ sprintf (tmp, "addi_s_pic r%d, %s", reg_rd, add_symbol->bsym->name);
+ if (append_insn (tmp, FALSE) == (int) FAIL)
+ return;
+
+ memcpy (&var_insts[1], &inst, sizeof (struct score_it));
+ build_relax_frag (fix_insts, fix_num, var_insts, var_num, add_symbol);
+ }
+ else if (add_number >= -0x8000 && add_number <= 0x7fff)
+ {
+ /* Insn 1: lw rD, <sym>($gp) (BFD_RELOC_SCORE_GOT15) */
+ sprintf (tmp, "lw_pic r%d, %s", reg_rd, add_symbol->bsym->name);
+ if (append_insn (tmp, TRUE) == (int) FAIL)
+ return;
+
+ /* Insn 2 */
+ fix_num = 1;
+ var_num = 1;
+ /* Fix part
+ For an external symbol: addi rD, <constant> */
+ sprintf (tmp, "addi r%d, %d", reg_rd, (int)add_number);
+ if (append_insn (tmp, FALSE) == (int) FAIL)
+ return;
+
+ memcpy (&fix_insts[0], &inst, sizeof (struct score_it));
+
+ /* Var part
+ For a local symbol: addi rD, <sym>+<constant> (BFD_RELOC_GOT_LO16) */
+ sprintf (tmp, "addi_s_pic r%d, %s + %d", reg_rd, add_symbol->bsym->name, (int)add_number);
+ if (append_insn (tmp, FALSE) == (int) FAIL)
+ return;
+
+ memcpy (&var_insts[0], &inst, sizeof (struct score_it));
+ build_relax_frag (fix_insts, fix_num, var_insts, var_num, add_symbol);
+ }
+ else
+ {
+ int hi = (add_number >> 16) & 0x0000FFFF;
+ int lo = add_number & 0x0000FFFF;
+
+ /* Insn 1: lw rD, <sym>($gp) (BFD_RELOC_SCORE_GOT15) */
+ sprintf (tmp, "lw_pic r%d, %s", reg_rd, add_symbol->bsym->name);
+ if (append_insn (tmp, TRUE) == (int) FAIL)
+ return;
+
+ /* Insn 2 */
+ fix_num = 1;
+ var_num = 1;
+ /* Fix part
+ For an external symbol: ldis r1, HI%<constant> */
+ sprintf (tmp, "ldis r1, %d", hi);
+ if (append_insn (tmp, FALSE) == (int) FAIL)
+ return;
+
+ memcpy (&fix_insts[0], &inst, sizeof (struct score_it));
+
+ /* Var part
+ For a local symbol: ldis r1, HI%<constant>
+ but, if lo is outof 16 bit, make hi plus 1 */
+ if ((lo < -0x8000) || (lo > 0x7fff))
+ {
+ hi += 1;
+ }
+ sprintf (tmp, "ldis_pic r1, %d", hi);
+ if (append_insn (tmp, FALSE) == (int) FAIL)
+ return;
+
+ memcpy (&var_insts[0], &inst, sizeof (struct score_it));
+ build_relax_frag (fix_insts, fix_num, var_insts, var_num, add_symbol);
+
+ /* Insn 3 */
+ fix_num = 1;
+ var_num = 1;
+ /* Fix part
+ For an external symbol: ori r1, LO%<constant> */
+ sprintf (tmp, "ori r1, %d", lo);
+ if (append_insn (tmp, FALSE) == (int) FAIL)
+ return;
+
+ memcpy (&fix_insts[0], &inst, sizeof (struct score_it));
+
+ /* Var part
+ For a local symbol: addi r1, <sym>+LO%<constant> (BFD_RELOC_GOT_LO16) */
+ sprintf (tmp, "addi_u_pic r1, %s + %d", add_symbol->bsym->name, lo);
+ if (append_insn (tmp, FALSE) == (int) FAIL)
+ return;
+
+ memcpy (&var_insts[0], &inst, sizeof (struct score_it));
+ build_relax_frag (fix_insts, fix_num, var_insts, var_num, add_symbol);
+
+ /* Insn 4: add rD, rD, r1 */
+ sprintf (tmp, "add r%d, r%d, r1", reg_rd, reg_rd);
+ if (append_insn (tmp, TRUE) == (int) FAIL)
+ return;
+
+ /* Set bwarn as -1, so macro instruction itself will not be generated frag. */
+ inst.bwarn = -1;
+ }
+
+ nor1 = r1_bak;
+}
+
+/* Handle la. */
+static void
+do_macro_la_rdi32 (char *str)
+{
+ int reg_rd;
+
+ skip_whitespace (str);
+ if ((reg_rd = reg_required_here (&str, 20, REG_TYPE_SCORE)) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL)
+ {
+ return;
+ }
+ else
+ {
+ char append_str[MAX_LITERAL_POOL_SIZE];
+ char *keep_data = str;
+
+ /* la rd, simm16. */
+ if (data_op2 (&str, 1, _SIMM16_LA) != (int) FAIL)
+ {
+ end_of_line (str);
+ return;
+ }
+ /* la rd, imm32 or la rd, label. */
+ else
+ {
+ SET_INSN_ERROR (NULL);
+ str = keep_data;
+ if ((data_op2 (&str, 1, _VALUE_HI16) == (int) FAIL)
+ || (end_of_line (str) == (int) FAIL))
+ {
+ return;
+ }
+ else
+ {
+ if ((score_pic == NO_PIC) || (!inst.reloc.exp.X_add_symbol))
+ {
+ sprintf (append_str, "ld_i32hi r%d, %s", reg_rd, keep_data);
+ if (append_insn (append_str, TRUE) == (int) FAIL)
+ return;
+
+ sprintf (append_str, "ld_i32lo r%d, %s", reg_rd, keep_data);
+ if (append_insn (append_str, TRUE) == (int) FAIL)
+ return;
+ }
+ else
+ {
+ assert (inst.reloc.exp.X_add_symbol);
+ build_la_pic (reg_rd, inst.reloc.exp);
+ }
+
+ /* Set bwarn as -1, so macro instruction itself will not be generated frag. */
+ inst.bwarn = -1;
+ }
+ }
+ }
+}
+
+/* Handle li. */
+static void
+do_macro_li_rdi32 (char *str){
+
+ int reg_rd;
+
+ skip_whitespace (str);
+ if ((reg_rd = reg_required_here (&str, 20, REG_TYPE_SCORE)) == (int) FAIL
+ || skip_past_comma (&str) == (int) FAIL)
+ {
+ return;
+ }
+ else
+ {
+ char *keep_data = str;
+
+ /* li rd, simm16. */
+ if (data_op2 (&str, 1, _SIMM16_LA) != (int) FAIL)
+ {
+ end_of_line (str);
+ return;
+ }
+ /* li rd, imm32. */
+ else
+ {
+ char append_str[MAX_LITERAL_POOL_SIZE];
+
+ str = keep_data;
+
+ if ((data_op2 (&str, 1, _VALUE_HI16) == (int) FAIL)
+ || (end_of_line (str) == (int) FAIL))
+ {
+ return;
+ }
+ else if (inst.reloc.exp.X_add_symbol)
+ {
+ inst.error = _("li rd label isn't correct instruction form");
+ return;
+ }
+ else
+ {
+ sprintf (append_str, "ld_i32hi r%d, %s", reg_rd, keep_data);
+
+ if (append_insn (append_str, TRUE) == (int) FAIL)
+ return;
+ else
+ {
+ sprintf (append_str, "ld_i32lo r%d, %s", reg_rd, keep_data);
+ if (append_insn (append_str, TRUE) == (int) FAIL)
+ return;
+
+ /* Set bwarn as -1, so macro instruction itself will not be generated frag. */
+ inst.bwarn = -1;
+ }
+ }
+ }
+ }
+}
+
+/* Handle mul/mulu/div/divu/rem/remu. */
+static void
+do_macro_mul_rdrsrs (char *str)
+{
+ int reg_rd;
+ int reg_rs1;
+ int reg_rs2;
+ char *backupstr;
+ char append_str[MAX_LITERAL_POOL_SIZE];
+
+ if (university_version == 1)
+ as_warn ("%s", ERR_FOR_SCORE5U_MUL_DIV);
+
+ strcpy (append_str, str);
+ backupstr = append_str;
+ skip_whitespace (backupstr);
+ if (((reg_rd = reg_required_here (&backupstr, -1, REG_TYPE_SCORE)) == (int) FAIL)
+ || (skip_past_comma (&backupstr) == (int) FAIL)
+ || ((reg_rs1 = reg_required_here (&backupstr, -1, REG_TYPE_SCORE)) == (int) FAIL))
+ {
+ inst.error = BAD_ARGS;
+ return;
+ }
+
+ if (skip_past_comma (&backupstr) == (int) FAIL)
+ {
+ /* rem/remu rA, rB is error format. */
+ if (strcmp (inst.name, "rem") == 0 || strcmp (inst.name, "remu") == 0)
+ {
+ SET_INSN_ERROR (BAD_ARGS);
+ }
+ else
+ {
+ SET_INSN_ERROR (NULL);
+ do_rsrs (str);
+ }
+ return;
+ }
+ else
+ {
+ SET_INSN_ERROR (NULL);
+ if (((reg_rs2 = reg_required_here (&backupstr, -1, REG_TYPE_SCORE)) == (int) FAIL)
+ || (end_of_line (backupstr) == (int) FAIL))
+ {
+ return;
+ }
+ else
+ {
+ char append_str1[MAX_LITERAL_POOL_SIZE];
+
+ if (strcmp (inst.name, "rem") == 0)
+ {
+ sprintf (append_str, "mul r%d, r%d", reg_rs1, reg_rs2);
+ sprintf (append_str1, "mfceh r%d", reg_rd);
+ }
+ else if (strcmp (inst.name, "remu") == 0)
+ {
+ sprintf (append_str, "mulu r%d, r%d", reg_rs1, reg_rs2);
+ sprintf (append_str1, "mfceh r%d", reg_rd);
+ }
+ else
+ {
+ sprintf (append_str, "%s r%d, r%d", inst.name, reg_rs1, reg_rs2);
+ sprintf (append_str1, "mfcel r%d", reg_rd);
+ }
+
+ /* Output mul/mulu or div/divu or rem/remu. */
+ if (append_insn (append_str, TRUE) == (int) FAIL)
+ return;
+
+ /* Output mfcel or mfceh. */
+ if (append_insn (append_str1, TRUE) == (int) FAIL)
+ return;
+
+ /* Set bwarn as -1, so macro instruction itself will not be generated frag. */
+ inst.bwarn = -1;
+ }
+ }
+}
+
+static void
+exp_macro_ldst_abs (char *str)
+{
+ int reg_rd;
+ char *backupstr, *tmp;
+ char append_str[MAX_LITERAL_POOL_SIZE];
+ char verifystr[MAX_LITERAL_POOL_SIZE];
+ struct score_it inst_backup;
+ int r1_bak = 0;
+
+ r1_bak = nor1;
+ nor1 = 0;
+ memcpy (&inst_backup, &inst, sizeof (struct score_it));
+
+ strcpy (verifystr, str);
+ backupstr = verifystr;
+ skip_whitespace (backupstr);
+ if ((reg_rd = reg_required_here (&backupstr, -1, REG_TYPE_SCORE)) == (int) FAIL)
+ return;
+
+ tmp = backupstr;
+ if (skip_past_comma (&backupstr) == (int) FAIL)
+ return;
+
+ backupstr = tmp;
+ sprintf (append_str, "li r1 %s", backupstr);
+ append_insn (append_str, TRUE);
+
+ memcpy (&inst, &inst_backup, sizeof (struct score_it));
+ sprintf (append_str, " r%d, [r1,0]", reg_rd);
+ do_ldst_insn (append_str);
+
+ nor1 = r1_bak;
+}
+
+static int
+nopic_need_relax (symbolS * sym, int before_relaxing)
+{
+ if (sym == NULL)
+ return 0;
+ else if (USE_GLOBAL_POINTER_OPT && g_switch_value > 0)
+ {
+ const char *symname;
+ const char *segname;
+
+ /* Find out whether this symbol can be referenced off the $gp
+ register. It can be if it is smaller than the -G size or if
+ it is in the .sdata or .sbss section. Certain symbols can
+ not be referenced off the $gp, although it appears as though
+ they can. */
+ symname = S_GET_NAME (sym);
+ if (symname != (const char *)NULL
+ && (strcmp (symname, "eprol") == 0
+ || strcmp (symname, "etext") == 0
+ || strcmp (symname, "_gp") == 0
+ || strcmp (symname, "edata") == 0
+ || strcmp (symname, "_fbss") == 0
+ || strcmp (symname, "_fdata") == 0
+ || strcmp (symname, "_ftext") == 0
+ || strcmp (symname, "end") == 0
+ || strcmp (symname, GP_DISP_LABEL) == 0))
+ {
+ return 1;
+ }
+ else if ((!S_IS_DEFINED (sym) || S_IS_COMMON (sym)) && (0
+ /* We must defer this decision until after the whole file has been read,
+ since there might be a .extern after the first use of this symbol. */
+ || (before_relaxing
+ && S_GET_VALUE (sym) == 0)
+ || (S_GET_VALUE (sym) != 0
+ && S_GET_VALUE (sym) <= g_switch_value)))
+ {
+ return 0;
+ }
+
+ segname = segment_name (S_GET_SEGMENT (sym));
+ return (strcmp (segname, ".sdata") != 0
+ && strcmp (segname, ".sbss") != 0
+ && strncmp (segname, ".sdata.", 7) != 0
+ && strncmp (segname, ".gnu.linkonce.s.", 16) != 0);
+ }
+ /* We are not optimizing for the $gp register. */
+ else
+ return 1;
+}
+
+/* Build a relax frag for lw/st instruction when generating PIC,
+ external symbol first and local symbol second. */
+
+static void
+build_lwst_pic (int reg_rd, expressionS exp, const char *insn_name)
+{
+ symbolS *add_symbol = exp.X_add_symbol;
+ int add_number = exp.X_add_number;
+ struct score_it fix_insts[RELAX_INST_NUM];
+ struct score_it var_insts[RELAX_INST_NUM];
+ int fix_num = 0;
+ int var_num = 0;
+ char tmp[MAX_LITERAL_POOL_SIZE];
+ int r1_bak;
+
+ r1_bak = nor1;
+ nor1 = 0;
+
+ if ((add_number == 0) || (add_number >= -0x8000 && add_number <= 0x7fff))
+ {
+ fix_num = 1;
+ var_num = 2;
+
+ /* For an external symbol, two insns are generated;
+ For a local symbol, three insns are generated. */
+ /* Fix part
+ For an external symbol: lw rD, <sym>($gp)
+ (BFD_RELOC_SCORE_GOT15) */
+ sprintf (tmp, "lw_pic r1, %s", add_symbol->bsym->name);
+ if (append_insn (tmp, FALSE) == (int) FAIL)
+ return;
+
+ memcpy (&fix_insts[0], &inst, sizeof (struct score_it));
+
+ /* Var part
+ For a local symbol :
+ lw rD, <sym>($gp) (BFD_RELOC_SCORE_GOT15)
+ addi rD, <sym> (BFD_RELOC_GOT_LO16) */
+ inst.reloc.type = BFD_RELOC_SCORE_GOT15;
+ memcpy (&var_insts[0], &inst, sizeof (struct score_it));
+ sprintf (tmp, "addi_s_pic r1, %s", add_symbol->bsym->name);
+ if (append_insn (tmp, FALSE) == (int) FAIL)
+ return;
+
+ memcpy (&var_insts[1], &inst, sizeof (struct score_it));
+ build_relax_frag (fix_insts, fix_num, var_insts, var_num, add_symbol);
+
+ /* Insn 2 or Insn 3: lw/st rD, [r1, constant] */
+ sprintf (tmp, "%s r%d, [r1, %d]", insn_name, reg_rd, add_number);
+ if (append_insn (tmp, TRUE) == (int) FAIL)
+ return;
+
+ /* Set bwarn as -1, so macro instruction itself will not be generated frag. */
+ inst.bwarn = -1;
+ }
+ else
+ {
+ inst.error = _("PIC code offset overflow (max 16 signed bits)");
+ return;
+ }
+
+ nor1 = r1_bak;
+}
+
+static void
+do_macro_ldst_label (char *str)
+{
+ int i;
+ int ldst_gp_p = 0;
+ int reg_rd;
+ int r1_bak;
+ char *backup_str;
+ char *label_str;
+ char *absolute_value;
+ char append_str[3][MAX_LITERAL_POOL_SIZE];
+ char verifystr[MAX_LITERAL_POOL_SIZE];
+ struct score_it inst_backup;
+ struct score_it inst_expand[3];
+ struct score_it inst_main;
+
+ memcpy (&inst_backup, &inst, sizeof (struct score_it));
+ strcpy (verifystr, str);
+ backup_str = verifystr;
+
+ skip_whitespace (backup_str);
+ if ((reg_rd = reg_required_here (&backup_str, -1, REG_TYPE_SCORE)) == (int) FAIL)
+ return;
+
+ if (skip_past_comma (&backup_str) == (int) FAIL)
+ return;
+
+ label_str = backup_str;
+
+ /* Ld/st rD, [rA, imm] ld/st rD, [rA]+, imm ld/st rD, [rA, imm]+. */
+ if (*backup_str == '[')
+ {
+ inst.type = Rd_rvalueRs_preSI12;
+ do_ldst_insn (str);
+ return;
+ }
+
+ /* Ld/st rD, imm. */
+ absolute_value = backup_str;
+ inst.type = Rd_rvalueRs_SI15;
+ if ((my_get_expression (&inst.reloc.exp, &backup_str) == (int) FAIL)
+ || (validate_immediate (inst.reloc.exp.X_add_number, _VALUE, 0) == (int) FAIL)
+ || (end_of_line (backup_str) == (int) FAIL))
+ {
+ return;
+ }
+ else
+ {
+ if (inst.reloc.exp.X_add_symbol == 0)
+ {
+ memcpy (&inst, &inst_backup, sizeof (struct score_it));
+ exp_macro_ldst_abs (str);
+ return;
+ }
+ }
+
+ /* Ld/st rD, label. */
+ inst.type = Rd_rvalueRs_SI15;
+ backup_str = absolute_value;
+ if ((data_op2 (&backup_str, 1, _GP_IMM15) == (int) FAIL)
+ || (end_of_line (backup_str) == (int) FAIL))
+ {
+ return;
+ }
+ else
+ {
+ if (inst.reloc.exp.X_add_symbol == 0)
+ {
+ if (!inst.error)
+ inst.error = BAD_ARGS;
+
+ return;
+ }
+
+ if (score_pic == PIC)
+ {
+ int ldst_idx = 0;
+ ldst_idx = inst.instruction & OPC_PSEUDOLDST_MASK;
+ build_lwst_pic (reg_rd, inst.reloc.exp, score_ldst_insns[ldst_idx * 3 + 0].template);
+ return;
+ }
+ else
+ {
+ if ((inst.reloc.exp.X_add_number <= 0x3fff)
+ && (inst.reloc.exp.X_add_number >= -0x4000)
+ && (!nopic_need_relax (inst.reloc.exp.X_add_symbol, 1)))
+ {
+ int ldst_idx = 0;
+
+ /* Assign the real opcode. */
+ ldst_idx = inst.instruction & OPC_PSEUDOLDST_MASK;
+ inst.instruction &= ~OPC_PSEUDOLDST_MASK;
+ inst.instruction |= score_ldst_insns[ldst_idx * 3 + 0].value;
+ inst.instruction |= reg_rd << 20;
+ inst.instruction |= GP << 15;
+ inst.relax_inst = 0x8000;
+ inst.relax_size = 0;
+ ldst_gp_p = 1;
+ }
+ }
+ }
+
+ /* Backup inst. */
+ memcpy (&inst_main, &inst, sizeof (struct score_it));
+ r1_bak = nor1;
+ nor1 = 0;
+
+ /* Determine which instructions should be output. */
+ sprintf (append_str[0], "ld_i32hi r1, %s", label_str);
+ sprintf (append_str[1], "ld_i32lo r1, %s", label_str);
+ sprintf (append_str[2], "%s r%d, [r1, 0]", inst_backup.name, reg_rd);
+
+ /* Generate three instructions.
+ la r1, label
+ ld/st rd, [r1, 0] */
+ for (i = 0; i < 3; i++)
+ {
+ if (append_insn (append_str[i], FALSE) == (int) FAIL)
+ return;
+
+ memcpy (&inst_expand[i], &inst, sizeof (struct score_it));
+ }
+
+ if (ldst_gp_p)
+ {
+ char *p;
+
+ /* Adjust instruction opcode and to be relaxed instruction opcode. */
+ inst_main.instruction = adjust_paritybit (inst_main.instruction, GET_INSN_CLASS (inst_main.type));
+ inst_main.relax_size = inst_expand[0].size + inst_expand[1].size + inst_expand[2].size;
+ inst_main.type = Insn_GP;
+
+ for (i = 0; i < 3; i++)
+ inst_expand[i].instruction = adjust_paritybit (inst_expand[i].instruction
+ , GET_INSN_CLASS (inst_expand[i].type));
+
+ /* Check data dependency. */
+ handle_dependency (&inst_main);
+
+ /* Start a new frag if frag_now is not empty. */
+ if (frag_now_fix () != 0)
+ {
+ if (!frag_now->tc_frag_data.is_insn)
+ frag_wane (frag_now);
+
+ frag_new (0);
+ }
+ frag_grow (20);
+
+ /* Write fr_fix part. */
+ p = frag_more (inst_main.size);
+ md_number_to_chars (p, inst_main.instruction, inst_main.size);
+
+ if (inst_main.reloc.type != BFD_RELOC_NONE)
+ {
+ fix_new_score (frag_now, p - frag_now->fr_literal, inst_main.size,
+ &inst_main.reloc.exp, inst_main.reloc.pc_rel, inst_main.reloc.type);
+ }
+
+#ifdef OBJ_ELF
+ dwarf2_emit_insn (inst_main.size);
+#endif
+
+ /* GP instruction can not do optimization, only can do relax between
+ 1 instruction and 3 instructions. */
+ p = frag_var (rs_machine_dependent, inst_main.relax_size + RELAX_PAD_BYTE, 0,
+ RELAX_ENCODE (inst_main.size, inst_main.relax_size, inst_main.type, 0, 4, 0),
+ inst_main.reloc.exp.X_add_symbol, 0, NULL);
+
+ /* Write fr_var part.
+ no calling gen_insn_frag, no fixS will be generated. */
+ md_number_to_chars (p, inst_expand[0].instruction, inst_expand[0].size);
+ p += inst_expand[0].size;
+ md_number_to_chars (p, inst_expand[1].instruction, inst_expand[1].size);
+ p += inst_expand[1].size;
+ md_number_to_chars (p, inst_expand[2].instruction, inst_expand[2].size);
+ }
+ else
+ {
+ gen_insn_frag (&inst_expand[0], NULL);
+ gen_insn_frag (&inst_expand[1], NULL);
+ gen_insn_frag (&inst_expand[2], NULL);
+ }
+ nor1 = r1_bak;
+
+ /* Set bwarn as -1, so macro instruction itself will not be generated frag. */
+ inst.bwarn = -1;
+}
+
+static void
+do_lw_pic (char *str)
+{
+ int reg_rd;
+
+ skip_whitespace (str);
+ if (((reg_rd = reg_required_here (&str, 20, REG_TYPE_SCORE)) == (int) FAIL)
+ || (skip_past_comma (&str) == (int) FAIL)
+ || (my_get_expression (&inst.reloc.exp, &str) == (int) FAIL)
+ || (end_of_line (str) == (int) FAIL))
+ {
+ return;
+ }
+ else
+ {
+ if (inst.reloc.exp.X_add_symbol == 0)
+ {
+ if (!inst.error)
+ inst.error = BAD_ARGS;
+
+ return;
+ }
+
+ inst.instruction |= GP << 15;
+ inst.reloc.type = BFD_RELOC_SCORE_GOT15;
+ }
+}
+
+static void
+do_empty (char *str)
+{
+ str = str;
+ if (university_version == 1)
+ {
+ if (((inst.instruction & 0x3e0003ff) == 0x0c000004)
+ || ((inst.instruction & 0x3e0003ff) == 0x0c000024)
+ || ((inst.instruction & 0x3e0003ff) == 0x0c000044)
+ || ((inst.instruction & 0x3e0003ff) == 0x0c000064))
+ {
+ inst.error = ERR_FOR_SCORE5U_MMU;
+ return;
+ }
+ }
+ if (end_of_line (str) == (int) FAIL)
+ return;
+
+ if (inst.relax_inst != 0x8000)
+ {
+ if (inst.type == NO_OPD)
+ {
+ inst.relax_size = 2;
+ }
+ else
+ {
+ inst.relax_size = 4;
+ }
+ }
+}
+
+static void
+do_jump (char *str)
+{
+ char *save_in;
+
+ skip_whitespace (str);
+ if (my_get_expression (&inst.reloc.exp, &str) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ return;
+
+ if (inst.reloc.exp.X_add_symbol == 0)
+ {
+ inst.error = _("lacking label ");
+ return;
+ }
+
+ if (((inst.reloc.exp.X_add_number & 0xff000000) != 0)
+ && ((inst.reloc.exp.X_add_number & 0xff000000) != 0xff000000))
+ {
+ inst.error = _("invalid constant: 25 bit expression not in range -2^24..2^24");
+ return;
+ }
+
+ save_in = input_line_pointer;
+ input_line_pointer = str;
+ inst.reloc.type = BFD_RELOC_SCORE_JMP;
+ inst.reloc.pc_rel = 1;
+ input_line_pointer = save_in;
+}
+
+static void
+do16_jump (char *str)
+{
+ skip_whitespace (str);
+ if (my_get_expression (&inst.reloc.exp, &str) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ {
+ return;
+ }
+ else if (inst.reloc.exp.X_add_symbol == 0)
+ {
+ inst.error = _("lacking label ");
+ return;
+ }
+ else if (((inst.reloc.exp.X_add_number & 0xfffff800) != 0)
+ && ((inst.reloc.exp.X_add_number & 0xfffff800) != 0xfffff800))
+ {
+ inst.error = _("invalid constant: 12 bit expression not in range -2^11..2^11");
+ return;
+ }
+
+ inst.reloc.type = BFD_RELOC_SCORE16_JMP;
+ inst.reloc.pc_rel = 1;
+}
+
+static void
+do_branch (char *str)
+{
+ unsigned long abs_value = 0;
+
+ if (my_get_expression (&inst.reloc.exp, &str) == (int) FAIL
+ || end_of_line (str) == (int) FAIL)
+ {
+ return;
+ }
+ else if (inst.reloc.exp.X_add_symbol == 0)
+ {
+ inst.error = _("lacking label ");
+ return;
+ }
+ else if (((inst.reloc.exp.X_add_number & 0xff000000) != 0)
+ && ((inst.reloc.exp.X_add_number & 0xff000000) != 0xff000000))
+ {
+ inst.error = _("invalid constant: 20 bit expression not in range -2^19..2^19");
+ return;
+ }
+
+ inst.reloc.type = BFD_RELOC_SCORE_BRANCH;
+ inst.reloc.pc_rel = 1;
+
+ /* Branch 32 offset field : 20 bit, 16 bit branch offset field : 8 bit. */
+ inst.instruction |= (inst.reloc.exp.X_add_number & 0x3fe) | ((inst.reloc.exp.X_add_number & 0xffc00) << 5);
+
+ /* Compute 16 bit branch instruction. */
+ if ((inst.relax_inst != 0x8000) && (abs_value & 0xfffffe00) == 0)
+ {
+ inst.relax_inst |= (((inst.instruction >> 10) & 0xf) << 8);
+ inst.relax_inst |= ((inst.reloc.exp.X_add_number >> 1) & 0xff);
+ inst.relax_size = 2;
+ }
+ else
+ {
+ inst.relax_inst = 0x8000;
+ }
+}
+
+static void
+do16_branch (char *str)
+{
+ if ((my_get_expression (&inst.reloc.exp, &str) == (int) FAIL
+ || end_of_line (str) == (int) FAIL))
+ {
+ ;
+ }
+ else if (inst.reloc.exp.X_add_symbol == 0)
+ {
+ inst.error = _("lacking label");
+ }
+ else if (((inst.reloc.exp.X_add_number & 0xffffff00) != 0)
+ && ((inst.reloc.exp.X_add_number & 0xffffff00) != 0xffffff00))
+ {
+ inst.error = _("invalid constant: 9 bit expression not in range -2^8..2^8");
+ }
+ else
+ {
+ inst.reloc.type = BFD_RELOC_SCORE16_BRANCH;
+ inst.reloc.pc_rel = 1;
+ inst.instruction |= ((inst.reloc.exp.X_add_number >> 1) & 0xff);
+ }
+}
+
+/* Iterate over the base tables to create the instruction patterns. */
+static void
+build_score_ops_hsh (void)
+{
+ unsigned int i;
+ static struct obstack insn_obstack;
+
+ obstack_begin (&insn_obstack, 4000);
+ for (i = 0; i < sizeof (score_insns) / sizeof (struct asm_opcode); i++)
+ {
+ const struct asm_opcode *insn = score_insns + i;
+ unsigned len = strlen (insn->template);
+ struct asm_opcode *new;
+ char *template;
+ new = obstack_alloc (&insn_obstack, sizeof (struct asm_opcode));
+ template = obstack_alloc (&insn_obstack, len + 1);
+
+ strcpy (template, insn->template);
+ new->template = template;
+ new->parms = insn->parms;
+ new->value = insn->value;
+ new->relax_value = insn->relax_value;
+ new->type = insn->type;
+ new->bitmask = insn->bitmask;
+ hash_insert (score_ops_hsh, new->template, (void *) new);
+ }
+}
+
+static void
+build_dependency_insn_hsh (void)
+{
+ unsigned int i;
+ static struct obstack dependency_obstack;
+
+ obstack_begin (&dependency_obstack, 4000);
+ for (i = 0; i < sizeof (insn_to_dependency_table) / sizeof (insn_to_dependency_table[0]); i++)
+ {
+ const struct insn_to_dependency *tmp = insn_to_dependency_table + i;
+ unsigned len = strlen (tmp->insn_name);
+ struct insn_to_dependency *new;
+
+ new = obstack_alloc (&dependency_obstack, sizeof (struct insn_to_dependency));
+ new->insn_name = obstack_alloc (&dependency_obstack, len + 1);
+
+ strcpy (new->insn_name, tmp->insn_name);
+ new->type = tmp->type;
+ hash_insert (dependency_insn_hsh, new->insn_name, (void *) new);
+ }
+}
+
+/* Turn an integer of n bytes (in val) into a stream of bytes appropriate
+ for use in the a.out file, and stores them in the array pointed to by buf.
+ This knows about the endian-ness of the target machine and does
+ THE RIGHT THING, whatever it is. Possible values for n are 1 (byte)
+ 2 (short) and 4 (long) Floating numbers are put out as a series of
+ LITTLENUMS (shorts, here at least). */
+
+void
+md_number_to_chars (char *buf, valueT val, int n)
+{
+ if (target_big_endian)
+ number_to_chars_bigendian (buf, val, n);
+ else
+ number_to_chars_littleendian (buf, val, n);
+}
+
+static valueT
+md_chars_to_number (char *buf, int n)
+{
+ valueT result = 0;
+ unsigned char *where = (unsigned char *)buf;
+
+ if (target_big_endian)
+ {
+ while (n--)
+ {
+ result <<= 8;
+ result |= (*where++ & 255);
+ }
+ }
+ else
+ {
+ while (n--)
+ {
+ result <<= 8;
+ result |= (where[n] & 255);
+ }
+ }
+
+ return result;
+}
+
+/* Turn a string in input_line_pointer into a floating point constant
+ of type TYPE, and store the appropriate bytes in *LITP. The number
+ of LITTLENUMS emitted is stored in *SIZEP. An error message is
+ returned, or NULL on OK.
+
+ Note that fp constants aren't represent in the normal way on the ARM.
+ In big endian mode, things are as expected. However, in little endian
+ mode fp constants are big-endian word-wise, and little-endian byte-wise
+ within the words. For example, (double) 1.1 in big endian mode is
+ the byte sequence 3f f1 99 99 99 99 99 9a, and in little endian mode is
+ the byte sequence 99 99 f1 3f 9a 99 99 99. */
+
+char *
+md_atof (int type, char *litP, int *sizeP)
+{
+ int prec;
+ LITTLENUM_TYPE words[MAX_LITTLENUMS];
+ char *t;
+ int i;
+
+ switch (type)
+ {
+ case 'f':
+ case 'F':
+ case 's':
+ case 'S':
+ prec = 2;
+ break;
+ case 'd':
+ case 'D':
+ case 'r':
+ case 'R':
+ prec = 4;
+ break;
+ case 'x':
+ case 'X':
+ case 'p':
+ case 'P':
+ prec = 6;
+ break;
+ default:
+ *sizeP = 0;
+ return _("bad call to MD_ATOF()");
+ }
+
+ t = atof_ieee (input_line_pointer, type, words);
+ if (t)
+ input_line_pointer = t;
+ *sizeP = prec * 2;
+
+ if (target_big_endian)
+ {
+ for (i = 0; i < prec; i++)
+ {
+ md_number_to_chars (litP, (valueT) words[i], 2);
+ litP += 2;
+ }
+ }
+ else
+ {
+ for (i = 0; i < prec; i += 2)
+ {
+ md_number_to_chars (litP, (valueT) words[i + 1], 2);
+ md_number_to_chars (litP + 2, (valueT) words[i], 2);
+ litP += 4;
+ }
+ }
+
+ return 0;
+}
+
+/* Return true if the given symbol should be considered local for PIC. */
+
+static bfd_boolean
+pic_need_relax (symbolS *sym, asection *segtype)
+{
+ asection *symsec;
+ bfd_boolean linkonce;
+
+ /* Handle the case of a symbol equated to another symbol. */
+ while (symbol_equated_reloc_p (sym))
+ {
+ symbolS *n;
+
+ /* It's possible to get a loop here in a badly written
+ program. */
+ n = symbol_get_value_expression (sym)->X_add_symbol;
+ if (n == sym)
+ break;
+ sym = n;
+ }
+
+ symsec = S_GET_SEGMENT (sym);
+
+ /* duplicate the test for LINK_ONCE sections as in adjust_reloc_syms */
+ linkonce = FALSE;
+ if (symsec != segtype && ! S_IS_LOCAL (sym))
+ {
+ if ((bfd_get_section_flags (stdoutput, symsec) & SEC_LINK_ONCE) != 0)
+ linkonce = TRUE;
+
+ /* The GNU toolchain uses an extension for ELF: a section
+ beginning with the magic string .gnu.linkonce is a linkonce
+ section. */
+ if (strncmp (segment_name (symsec), ".gnu.linkonce",
+ sizeof ".gnu.linkonce" - 1) == 0)
+ linkonce = TRUE;
+ }
+
+ /* This must duplicate the test in adjust_reloc_syms. */
+ return (symsec != &bfd_und_section
+ && symsec != &bfd_abs_section
+ && ! bfd_is_com_section (symsec)
+ && !linkonce
+#ifdef OBJ_ELF
+ /* A global or weak symbol is treated as external. */
+ && (OUTPUT_FLAVOR != bfd_target_elf_flavour
+ || (! S_IS_WEAK (sym) && ! S_IS_EXTERNAL (sym)))
+#endif
+ );
+}
+
+static int
+judge_size_before_relax (fragS * fragp, asection *sec)
+{
+ int change = 0;
+
+ if (score_pic == NO_PIC)
+ change = nopic_need_relax (fragp->fr_symbol, 0);
+ else
+ change = pic_need_relax (fragp->fr_symbol, sec);
+
+ if (change == 1)
+ {
+ /* Only at the first time determining whether GP instruction relax should be done,
+ return the difference between insntruction size and instruction relax size. */
+ if (fragp->fr_opcode == NULL)
+ {
+ fragp->fr_fix = RELAX_NEW (fragp->fr_subtype);
+ fragp->fr_opcode = fragp->fr_literal + RELAX_RELOC1 (fragp->fr_subtype);
+ return RELAX_NEW (fragp->fr_subtype) - RELAX_OLD (fragp->fr_subtype);
+ }
+ }
+
+ return 0;
+}
+
+/* In this function, we determine whether GP instruction should do relaxation,
+ for the label being against was known now.
+ Doing this here but not in md_relax_frag() can induce iteration times
+ in stage of doing relax. */
+int
+md_estimate_size_before_relax (fragS * fragp, asection * sec ATTRIBUTE_UNUSED)
+{
+ if ((RELAX_TYPE (fragp->fr_subtype) == Insn_GP)
+ || (RELAX_TYPE (fragp->fr_subtype) == Insn_PIC))
+ return judge_size_before_relax (fragp, sec);
+
+ return 0;
+}
+
+static int
+b32_relax_to_b16 (fragS * fragp)
+{
+ int grows = 0;
+ int relaxable_p = 0;
+ int old;
+ int new;
+ int frag_addr = fragp->fr_address + fragp->insn_addr;
+
+ addressT symbol_address = 0;
+ symbolS *s;
+ offsetT offset;
+ unsigned long value;
+ unsigned long abs_value;
+
+ /* FIXME : here may be able to modify better .
+ I don't know how to get the fragp's section ,
+ so in relax stage , it may be wrong to calculate the symbol's offset when the frag's section
+ is different from the symbol's. */
+
+ old = RELAX_OLD (fragp->fr_subtype);
+ new = RELAX_NEW (fragp->fr_subtype);
+ relaxable_p = RELAX_OPT (fragp->fr_subtype);
+
+ s = fragp->fr_symbol;
+ /* b/bl immediate */
+ if (s == NULL)
+ frag_addr = 0;
+ else
+ {
+ if (s->bsym != 0)
+ symbol_address = (addressT) s->sy_frag->fr_address;
+ }
+
+ value = md_chars_to_number (fragp->fr_literal, INSN_SIZE);
+
+ /* b 32's offset : 20 bit, b 16's tolerate field : 0xff. */
+ offset = ((value & 0x3ff0000) >> 6) | (value & 0x3fe);
+ if ((offset & 0x80000) == 0x80000)
+ offset |= 0xfff00000;
+
+ abs_value = offset + symbol_address - frag_addr;
+ if ((abs_value & 0x80000000) == 0x80000000)
+ abs_value = 0xffffffff - abs_value + 1;
+
+ /* Relax branch 32 to branch 16. */
+ if (relaxable_p && (s->bsym != NULL) && ((abs_value & 0xffffff00) == 0)
+ && (S_IS_DEFINED (s) && !S_IS_COMMON (s) && !S_IS_EXTERNAL (s)))
+ {
+ /* do nothing. */
+ }
+ else
+ {
+ /* Branch 32 can not be relaxed to b 16, so clear OPT bit. */
+ fragp->fr_opcode = NULL;
+ fragp->fr_subtype = RELAX_OPT_CLEAR (fragp->fr_subtype);
+ }
+
+ return grows;
+}
+
+/* Main purpose is to determine whether one frag should do relax.
+ frag->fr_opcode indicates this point. */
+
+int
+score_relax_frag (asection * sec ATTRIBUTE_UNUSED, fragS * fragp, long stretch ATTRIBUTE_UNUSED)
+{
+ int grows = 0;
+ int insn_size;
+ int insn_relax_size;
+ int do_relax_p = 0; /* Indicate doing relaxation for this frag. */
+ int relaxable_p = 0;
+ bfd_boolean word_align_p = FALSE;
+ fragS *next_fragp;
+
+ /* If the instruction address is odd, make it half word align first. */
+ if ((fragp->fr_address) % 2 != 0)
+ {
+ if ((fragp->fr_address + fragp->insn_addr) % 2 != 0)
+ {
+ fragp->insn_addr = 1;
+ grows += 1;
+ }
+ }
+
+ word_align_p = ((fragp->fr_address + fragp->insn_addr) % 4 == 0) ? TRUE : FALSE;
+
+ /* Get instruction size and relax size after the last relaxation. */
+ if (fragp->fr_opcode)
+ {
+ insn_size = RELAX_NEW (fragp->fr_subtype);
+ insn_relax_size = RELAX_OLD (fragp->fr_subtype);
+ }
+ else
+ {
+ insn_size = RELAX_OLD (fragp->fr_subtype);
+ insn_relax_size = RELAX_NEW (fragp->fr_subtype);
+ }
+
+ /* Handle specially for GP instruction. for, judge_size_before_relax() has already determine
+ whether the GP instruction should do relax. */
+ if ((RELAX_TYPE (fragp->fr_subtype) == Insn_GP)
+ || (RELAX_TYPE (fragp->fr_subtype) == Insn_PIC))
+ {
+ if (!word_align_p)
+ {
+ if (fragp->insn_addr < 2)
+ {
+ fragp->insn_addr += 2;
+ grows += 2;
+ }
+ else
+ {
+ fragp->insn_addr -= 2;
+ grows -= 2;
+ }
+ }
+
+ if (fragp->fr_opcode)
+ fragp->fr_fix = RELAX_NEW (fragp->fr_subtype) + fragp->insn_addr;
+ else
+ fragp->fr_fix = RELAX_OLD (fragp->fr_subtype) + fragp->insn_addr;
+ }
+ else
+ {
+ if (RELAX_TYPE (fragp->fr_subtype) == PC_DISP19div2)
+ b32_relax_to_b16 (fragp);
+
+ relaxable_p = RELAX_OPT (fragp->fr_subtype);
+ next_fragp = fragp->fr_next;
+ while ((next_fragp) && (next_fragp->fr_type != rs_machine_dependent))
+ {
+ next_fragp = next_fragp->fr_next;
+ }
+
+ if (next_fragp)
+ {
+ int n_insn_size;
+ int n_relaxable_p = 0;
+
+ if (next_fragp->fr_opcode)
+ {
+ n_insn_size = RELAX_NEW (next_fragp->fr_subtype);
+ }
+ else
+ {
+ n_insn_size = RELAX_OLD (next_fragp->fr_subtype);
+ }
+
+ if (RELAX_TYPE (next_fragp->fr_subtype) == PC_DISP19div2)
+ b32_relax_to_b16 (next_fragp);
+ n_relaxable_p = RELAX_OPT (next_fragp->fr_subtype);
+
+ if (word_align_p)
+ {
+ if (insn_size == 4)
+ {
+ /* 32 -> 16. */
+ if (relaxable_p && ((n_insn_size == 2) || n_relaxable_p))
+ {
+ grows -= 2;
+ do_relax_p = 1;
+ }
+ }
+ else if (insn_size == 2)
+ {
+ /* 16 -> 32. */
+ if (relaxable_p && (((n_insn_size == 4) && !n_relaxable_p) || (n_insn_size > 4)))
+ {
+ grows += 2;
+ do_relax_p = 1;
+ }
+ }
+ else
+ {
+ abort ();
+ }
+ }
+ else
+ {
+ if (insn_size == 4)
+ {
+ /* 32 -> 16. */
+ if (relaxable_p)
+ {
+ grows -= 2;
+ do_relax_p = 1;
+ }
+ /* Make the 32 bit insturction word align. */
+ else
+ {
+ fragp->insn_addr += 2;
+ grows += 2;
+ }
+ }
+ else if (insn_size == 2)
+ {
+ /* Do nothing. */
+ }
+ else
+ {
+ abort ();
+ }
+ }
+ }
+ else
+ {
+ /* Here, try best to do relax regardless fragp->fr_next->fr_type. */
+ if (word_align_p == FALSE)
+ {
+ if (insn_size % 4 == 0)
+ {
+ /* 32 -> 16. */
+ if (relaxable_p)
+ {
+ grows -= 2;
+ do_relax_p = 1;
+ }
+ else
+ {
+ fragp->insn_addr += 2;
+ grows += 2;
+ }
+ }
+ }
+ else
+ {
+ /* Do nothing. */
+ }
+ }
+
+ /* fragp->fr_opcode indicates whether this frag should be relaxed. */
+ if (do_relax_p)
+ {
+ if (fragp->fr_opcode)
+ {
+ fragp->fr_opcode = NULL;
+ /* Guarantee estimate stage is correct. */
+ fragp->fr_fix = RELAX_OLD (fragp->fr_subtype);
+ fragp->fr_fix += fragp->insn_addr;
+ }
+ else
+ {
+ fragp->fr_opcode = fragp->fr_literal + RELAX_RELOC1 (fragp->fr_subtype);
+ /* Guarantee estimate stage is correct. */
+ fragp->fr_fix = RELAX_NEW (fragp->fr_subtype);
+ fragp->fr_fix += fragp->insn_addr;
+ }
+ }
+ else
+ {
+ if (fragp->fr_opcode)
+ {
+ /* Guarantee estimate stage is correct. */
+ fragp->fr_fix = RELAX_NEW (fragp->fr_subtype);
+ fragp->fr_fix += fragp->insn_addr;
+ }
+ else
+ {
+ /* Guarantee estimate stage is correct. */
+ fragp->fr_fix = RELAX_OLD (fragp->fr_subtype);
+ fragp->fr_fix += fragp->insn_addr;
+ }
+ }
+ }
+
+ return grows;
+}
+
+void
+md_convert_frag (bfd * abfd ATTRIBUTE_UNUSED, segT sec ATTRIBUTE_UNUSED, fragS * fragp)
+{
+ int old;
+ int new;
+ char backup[20];
+ fixS *fixp;
+
+ old = RELAX_OLD (fragp->fr_subtype);
+ new = RELAX_NEW (fragp->fr_subtype);
+
+ /* fragp->fr_opcode indicates whether this frag should be relaxed. */
+ if (fragp->fr_opcode == NULL)
+ {
+ memcpy (backup, fragp->fr_literal, old);
+ fragp->fr_fix = old;
+ }
+ else
+ {
+ memcpy (backup, fragp->fr_literal + old, new);
+ fragp->fr_fix = new;
+ }
+
+ fixp = fragp->tc_frag_data.fixp;
+ while (fixp && fixp->fx_frag == fragp && fixp->fx_where < old)
+ {
+ if (fragp->fr_opcode)
+ fixp->fx_done = 1;
+ fixp = fixp->fx_next;
+ }
+ while (fixp && fixp->fx_frag == fragp)
+ {
+ if (fragp->fr_opcode)
+ fixp->fx_where -= old + fragp->insn_addr;
+ else
+ fixp->fx_done = 1;
+ fixp = fixp->fx_next;
+ }
+
+ if (fragp->insn_addr)
+ {
+ md_number_to_chars (fragp->fr_literal, 0x0, fragp->insn_addr);
+ }
+ memcpy (fragp->fr_literal + fragp->insn_addr, backup, fragp->fr_fix);
+ fragp->fr_fix += fragp->insn_addr;
+}
+
+/* Implementation of md_frag_check.
+ Called after md_convert_frag(). */
+
+void
+score_frag_check (fragS * fragp ATTRIBUTE_UNUSED)
+{
+ know (fragp->insn_addr <= RELAX_PAD_BYTE);
+}
+
+bfd_boolean
+score_fix_adjustable (fixS * fixP)
+{
+ if (fixP->fx_addsy == NULL)
+ {
+ return 1;
+ }
+ else if (OUTPUT_FLAVOR == bfd_target_elf_flavour
+ && (S_IS_EXTERNAL (fixP->fx_addsy) || S_IS_WEAK (fixP->fx_addsy)))
+ {
+ return 0;
+ }
+ else if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
+ || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
+ {
+ return 0;
+ }
+
+ return 1;
+}
+
+/* Implementation of TC_VALIDATE_FIX.
+ Called before md_apply_fix() and after md_convert_frag(). */
+void
+score_validate_fix (fixS *fixP)
+{
+ fixP->fx_where += fixP->fx_frag->insn_addr;
+}
+
+long
+md_pcrel_from (fixS * fixP)
+{
+ long retval = 0;
+
+ if (fixP->fx_addsy
+ && (S_GET_SEGMENT (fixP->fx_addsy) == undefined_section)
+ && (fixP->fx_subsy == NULL))
+ {
+ retval = 0;
+ }
+ else
+ {
+ retval = fixP->fx_where + fixP->fx_frag->fr_address;
+ }
+
+ return retval;
+}
+
+int
+score_force_relocation (struct fix *fixp)
+{
+ int retval = 0;
+
+ if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
+ || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY
+ || fixp->fx_r_type == BFD_RELOC_SCORE_JMP
+ || fixp->fx_r_type == BFD_RELOC_SCORE_BRANCH
+ || fixp->fx_r_type == BFD_RELOC_SCORE16_JMP
+ || fixp->fx_r_type == BFD_RELOC_SCORE16_BRANCH)
+ {
+ retval = 1;
+ }
+
+ return retval;
+}
+
+/* Round up a section size to the appropriate boundary. */
+valueT
+md_section_align (segT segment ATTRIBUTE_UNUSED, valueT size)
+{
+ int align = bfd_get_section_alignment (stdoutput, segment);
+
+ return ((size + (1 << align) - 1) & (-1 << align));
+}
+
+void
+md_apply_fix (fixS *fixP, valueT *valP, segT seg)
+{
+ offsetT value = *valP;
+ offsetT abs_value = 0;
+ offsetT newval;
+ offsetT content;
+ unsigned short HI, LO;
+
+ char *buf = fixP->fx_frag->fr_literal + fixP->fx_where;
+
+ assert (fixP->fx_r_type < BFD_RELOC_UNUSED);
+ if (fixP->fx_addsy == 0 && !fixP->fx_pcrel)
+ {
+ if (fixP->fx_r_type != BFD_RELOC_SCORE_DUMMY_HI16)
+ fixP->fx_done = 1;
+ }
+
+ /* If this symbol is in a different section then we need to leave it for
+ the linker to deal with. Unfortunately, md_pcrel_from can't tell,
+ so we have to undo it's effects here. */
+ if (fixP->fx_pcrel)
+ {
+ if (fixP->fx_addsy != NULL
+ && S_IS_DEFINED (fixP->fx_addsy)
+ && S_GET_SEGMENT (fixP->fx_addsy) != seg)
+ value += md_pcrel_from (fixP);
+ }
+
+ /* Remember value for emit_reloc. */
+ fixP->fx_addnumber = value;
+
+ switch (fixP->fx_r_type)
+ {
+ case BFD_RELOC_HI16_S:
+ if (fixP->fx_done)
+ { /* For la rd, imm32. */
+ newval = md_chars_to_number (buf, INSN_SIZE);
+ HI = (value) >> 16; /* mul to 2, then take the hi 16 bit. */
+ newval |= (HI & 0x3fff) << 1;
+ newval |= ((HI >> 14) & 0x3) << 16;
+ md_number_to_chars (buf, newval, INSN_SIZE);
+ }
+ break;
+ case BFD_RELOC_LO16:
+ if (fixP->fx_done) /* For la rd, imm32. */
+ {
+ newval = md_chars_to_number (buf, INSN_SIZE);
+ LO = (value) & 0xffff;
+ newval |= (LO & 0x3fff) << 1; /* 16 bit: imm -> 14 bit in lo, 2 bit in hi. */
+ newval |= ((LO >> 14) & 0x3) << 16;
+ md_number_to_chars (buf, newval, INSN_SIZE);
+ }
+ break;
+ case BFD_RELOC_SCORE_JMP:
+ {
+ content = md_chars_to_number (buf, INSN_SIZE);
+ value = fixP->fx_offset;
+ content = (content & ~0x3ff7ffe) | ((value << 1) & 0x3ff0000) | (value & 0x7fff);
+ md_number_to_chars (buf, content, INSN_SIZE);
+ }
+ break;
+ case BFD_RELOC_SCORE_BRANCH:
+ if ((S_GET_SEGMENT (fixP->fx_addsy) != seg) || (fixP->fx_addsy != NULL && S_IS_EXTERNAL (fixP->fx_addsy)))
+ value = fixP->fx_offset;
+ else
+ fixP->fx_done = 1;
+
+ content = md_chars_to_number (buf, INSN_SIZE);
+ if ((fixP->fx_frag->fr_opcode != 0) && ((content & 0x80008000) != 0x80008000))
+ {
+ if ((value & 0x80000000) == 0x80000000)
+ abs_value = 0xffffffff - value + 1;
+ if ((abs_value & 0xffffff00) != 0)
+ {
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _(" branch relocation truncate (0x%x) [-2^8 ~ 2^8]"), (unsigned int)value);
+ return;
+ }
+ content = md_chars_to_number (buf, INSN16_SIZE);
+ content &= 0xff00;
+ content = (content & 0xff00) | ((value >> 1) & 0xff);
+ md_number_to_chars (buf, content, INSN16_SIZE);
+ fixP->fx_r_type = BFD_RELOC_SCORE16_BRANCH;
+ fixP->fx_size = 2;
+ }
+ else
+ {
+ if ((value & 0x80000000) == 0x80000000)
+ abs_value = 0xffffffff - value + 1;
+ if ((abs_value & 0xfff80000) != 0)
+ {
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _(" branch relocation truncate (0x%x) [-2^19 ~ 2^19]"), (unsigned int)value);
+ return;
+ }
+ content = md_chars_to_number (buf, INSN_SIZE);
+ content &= 0xfc00fc01;
+ content = (content & 0xfc00fc01) | (value & 0x3fe) | ((value << 6) & 0x3ff0000);
+ md_number_to_chars (buf, content, INSN_SIZE);
+ }
+ break;
+ case BFD_RELOC_SCORE16_JMP:
+ content = md_chars_to_number (buf, INSN16_SIZE);
+ content &= 0xf001;
+ value = fixP->fx_offset & 0xfff;
+ content = (content & 0xfc01) | (value & 0xffe);
+ md_number_to_chars (buf, content, INSN16_SIZE);
+ break;
+ case BFD_RELOC_SCORE16_BRANCH:
+ content = md_chars_to_number (buf, INSN_SIZE);
+ if ((fixP->fx_frag->fr_opcode != 0) && ((content & 0x80008000) == 0x80008000))
+ {
+ if ((S_GET_SEGMENT (fixP->fx_addsy) != seg) ||
+ (fixP->fx_addsy != NULL && S_IS_EXTERNAL (fixP->fx_addsy)))
+ value = fixP->fx_offset;
+ else
+ fixP->fx_done = 1;
+ if ((value & 0x80000000) == 0x80000000)
+ abs_value = 0xffffffff - value + 1;
+ if ((abs_value & 0xfff80000) != 0)
+ {
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _(" branch relocation truncate (0x%x) [-2^19 ~ 2^19]"), (unsigned int)value);
+ return;
+ }
+ content = md_chars_to_number (buf, INSN_SIZE);
+ content = (content & 0xfc00fc01) | (value & 0x3fe) | ((value << 6) & 0x3ff0000);
+ md_number_to_chars (buf, content, INSN_SIZE);
+ fixP->fx_r_type = BFD_RELOC_SCORE_BRANCH;
+ fixP->fx_size = 4;
+ break;
+ }
+ else
+ {
+ /* In differnt section. */
+ if ((S_GET_SEGMENT (fixP->fx_addsy) != seg) ||
+ (fixP->fx_addsy != NULL && S_IS_EXTERNAL (fixP->fx_addsy)))
+ value = fixP->fx_offset;
+ else
+ fixP->fx_done = 1;
+
+ if ((value & 0x80000000) == 0x80000000)
+ abs_value = 0xffffffff - value + 1;
+ if ((abs_value & 0xffffff00) != 0)
+ {
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _(" branch relocation truncate (0x%x) [-2^8 ~ 2^8]"), (unsigned int)value);
+ return;
+ }
+ content = md_chars_to_number (buf, INSN16_SIZE);
+ content = (content & 0xff00) | ((value >> 1) & 0xff);
+ md_number_to_chars (buf, content, INSN16_SIZE);
+ break;
+ }
+ case BFD_RELOC_8:
+ if (fixP->fx_done || fixP->fx_pcrel)
+ md_number_to_chars (buf, value, 1);
+#ifdef OBJ_ELF
+ else
+ {
+ value = fixP->fx_offset;
+ md_number_to_chars (buf, value, 1);
+ }
+#endif
+ break;
+
+ case BFD_RELOC_16:
+ if (fixP->fx_done || fixP->fx_pcrel)
+ md_number_to_chars (buf, value, 2);
+#ifdef OBJ_ELF
+ else
+ {
+ value = fixP->fx_offset;
+ md_number_to_chars (buf, value, 2);
+ }
+#endif
+ break;
+ case BFD_RELOC_RVA:
+ case BFD_RELOC_32:
+ if (fixP->fx_done || fixP->fx_pcrel)
+ md_number_to_chars (buf, value, 4);
+#ifdef OBJ_ELF
+ else
+ {
+ value = fixP->fx_offset;
+ md_number_to_chars (buf, value, 4);
+ }
+#endif
+ break;
+ case BFD_RELOC_VTABLE_INHERIT:
+ fixP->fx_done = 0;
+ if (fixP->fx_addsy && !S_IS_DEFINED (fixP->fx_addsy) && !S_IS_WEAK (fixP->fx_addsy))
+ S_SET_WEAK (fixP->fx_addsy);
+ break;
+ case BFD_RELOC_VTABLE_ENTRY:
+ fixP->fx_done = 0;
+ break;
+ case BFD_RELOC_SCORE_GPREL15:
+ content = md_chars_to_number (buf, INSN_SIZE);
+ if ((fixP->fx_frag->fr_opcode != 0) && ((content & 0xfc1c8000) != 0x94188000))
+ fixP->fx_r_type = BFD_RELOC_NONE;
+ fixP->fx_done = 0;
+ break;
+ case BFD_RELOC_SCORE_GOT15:
+ case BFD_RELOC_SCORE_DUMMY_HI16:
+ case BFD_RELOC_SCORE_GOT_LO16:
+ case BFD_RELOC_SCORE_CALL15:
+ case BFD_RELOC_GPREL32:
+ break;
+ case BFD_RELOC_NONE:
+ default:
+ as_bad_where (fixP->fx_file, fixP->fx_line, _("bad relocation fixup type (%d)"), fixP->fx_r_type);
+ }
+}
+
+/* Translate internal representation of relocation info to BFD target format. */
+arelent **
+tc_gen_reloc (asection * section ATTRIBUTE_UNUSED, fixS * fixp)
+{
+ static arelent *retval[MAX_RELOC_EXPANSION + 1]; /* MAX_RELOC_EXPANSION equals 2. */
+ arelent *reloc;
+ bfd_reloc_code_real_type code;
+ char *type;
+ fragS *f;
+ symbolS *s;
+ expressionS e;
+
+ reloc = retval[0] = xmalloc (sizeof (arelent));
+ retval[1] = NULL;
+
+ reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
+ *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
+ reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
+ reloc->addend = fixp->fx_offset;
+
+ /* If this is a variant frag, we may need to adjust the existing
+ reloc and generate a new one. */
+ if (fixp->fx_frag->fr_opcode != NULL && (fixp->fx_r_type == BFD_RELOC_SCORE_GPREL15))
+ {
+ /* Update instruction imm bit. */
+ offsetT newval;
+ unsigned short off;
+ char *buf;
+
+ buf = fixp->fx_frag->fr_literal + fixp->fx_frag->insn_addr;
+ newval = md_chars_to_number (buf, INSN_SIZE);
+ off = fixp->fx_offset >> 16;
+ newval |= (off & 0x3fff) << 1;
+ newval |= ((off >> 14) & 0x3) << 16;
+ md_number_to_chars (buf, newval, INSN_SIZE);
+
+ buf += INSN_SIZE;
+ newval = md_chars_to_number (buf, INSN_SIZE);
+ off = fixp->fx_offset & 0xffff;
+ newval |= ((off & 0x3fff) << 1);
+ newval |= (((off >> 14) & 0x3) << 16);
+ md_number_to_chars (buf, newval, INSN_SIZE);
+
+ retval[1] = xmalloc (sizeof (arelent));
+ retval[2] = NULL;
+ retval[1]->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
+ *retval[1]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
+ retval[1]->address = (reloc->address + RELAX_RELOC2 (fixp->fx_frag->fr_subtype));
+
+ f = fixp->fx_frag;
+ s = f->fr_symbol;
+ e = s->sy_value;
+
+ retval[1]->addend = 0;
+ retval[1]->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_LO16);
+ assert (retval[1]->howto != NULL);
+
+ fixp->fx_r_type = BFD_RELOC_HI16_S;
+ }
+
+ code = fixp->fx_r_type;
+ switch (fixp->fx_r_type)
+ {
+ case BFD_RELOC_32:
+ if (fixp->fx_pcrel)
+ {
+ code = BFD_RELOC_32_PCREL;
+ break;
+ }
+ case BFD_RELOC_HI16_S:
+ case BFD_RELOC_LO16:
+ case BFD_RELOC_SCORE_JMP:
+ case BFD_RELOC_SCORE_BRANCH:
+ case BFD_RELOC_SCORE16_JMP:
+ case BFD_RELOC_SCORE16_BRANCH:
+ case BFD_RELOC_VTABLE_ENTRY:
+ case BFD_RELOC_VTABLE_INHERIT:
+ case BFD_RELOC_SCORE_GPREL15:
+ case BFD_RELOC_SCORE_GOT15:
+ case BFD_RELOC_SCORE_DUMMY_HI16:
+ case BFD_RELOC_SCORE_GOT_LO16:
+ case BFD_RELOC_SCORE_CALL15:
+ case BFD_RELOC_GPREL32:
+ case BFD_RELOC_NONE:
+ code = fixp->fx_r_type;
+ break;
+ default:
+ type = _("<unknown>");
+ as_bad_where (fixp->fx_file, fixp->fx_line,
+ _("cannot represent %s relocation in this object file format"), type);
+ return NULL;
+ }
+
+ reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
+ if (reloc->howto == NULL)
+ {
+ as_bad_where (fixp->fx_file, fixp->fx_line,
+ _("cannot represent %s relocation in this object file format1"),
+ bfd_get_reloc_code_name (code));
+ return NULL;
+ }
+ /* HACK: Since arm ELF uses Rel instead of Rela, encode the
+ vtable entry to be used in the relocation's section offset. */
+ if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
+ reloc->address = fixp->fx_offset;
+
+ return retval;
+}
+
+void
+score_elf_final_processing (void)
+{
+ if (fix_data_dependency == 1)
+ {
+ elf_elfheader (stdoutput)->e_flags |= EF_SCORE_FIXDEP;
+ }
+ if (score_pic == PIC)
+ {
+ elf_elfheader (stdoutput)->e_flags |= EF_SCORE_PIC;
+ }
+}
+
+static void
+parse_pce_inst (char *insnstr)
+{
+ char c;
+ char *p;
+ char first[MAX_LITERAL_POOL_SIZE];
+ char second[MAX_LITERAL_POOL_SIZE];
+ struct score_it pec_part_1;
+
+ /* Get first part string of PCE. */
+ p = strstr (insnstr, "||");
+ c = *p;
+ *p = '\0';
+ sprintf (first, "%s", insnstr);
+
+ /* Get second part string of PCE. */
+ *p = c;
+ p += 2;
+ sprintf (second, "%s", p);
+
+ parse_16_32_inst (first, FALSE);
+ if (inst.error)
+ return;
+
+ memcpy (&pec_part_1, &inst, sizeof (inst));
+
+ parse_16_32_inst (second, FALSE);
+ if (inst.error)
+ return;
+
+ if ( ((pec_part_1.size == INSN_SIZE) && (inst.size == INSN_SIZE))
+ || ((pec_part_1.size == INSN_SIZE) && (inst.size == INSN16_SIZE))
+ || ((pec_part_1.size == INSN16_SIZE) && (inst.size == INSN_SIZE)))
+ {
+ inst.error = _("pce instruction error (16 bit || 16 bit)'");
+ sprintf (inst.str, insnstr);
+ return;
+ }
+
+ if (!inst.error)
+ gen_insn_frag (&pec_part_1, &inst);
+}
+
+void
+md_assemble (char *str)
+{
+ know (str);
+ know (strlen (str) < MAX_LITERAL_POOL_SIZE);
+
+ memset (&inst, '\0', sizeof (inst));
+ if (INSN_IS_PCE_P (str))
+ parse_pce_inst (str);
+ else
+ parse_16_32_inst (str, TRUE);
+
+ if (inst.error)
+ as_bad (_("%s -- `%s'"), inst.error, inst.str);
+}
+
+/* We handle all bad expressions here, so that we can report the faulty
+ instruction in the error message. */
+void
+md_operand (expressionS * expr)
+{
+ if (in_my_get_expression)
+ {
+ expr->X_op = O_illegal;
+ if (inst.error == NULL)
+ {
+ inst.error = _("bad expression");
+ }
+ }
+}
+
+const char *md_shortopts = "nO::g::G:";
+
+#ifdef SCORE_BI_ENDIAN
+#define OPTION_EB (OPTION_MD_BASE + 0)
+#define OPTION_EL (OPTION_MD_BASE + 1)
+#else
+#if TARGET_BYTES_BIG_ENDIAN
+#define OPTION_EB (OPTION_MD_BASE + 0)
+#else
+#define OPTION_EL (OPTION_MD_BASE + 1)
+#endif
+#endif
+#define OPTION_FIXDD (OPTION_MD_BASE + 2)
+#define OPTION_NWARN (OPTION_MD_BASE + 3)
+#define OPTION_SCORE5 (OPTION_MD_BASE + 4)
+#define OPTION_SCORE5U (OPTION_MD_BASE + 5)
+#define OPTION_SCORE7 (OPTION_MD_BASE + 6)
+#define OPTION_R1 (OPTION_MD_BASE + 7)
+#define OPTION_O0 (OPTION_MD_BASE + 8)
+#define OPTION_SCORE_VERSION (OPTION_MD_BASE + 9)
+#define OPTION_PIC (OPTION_MD_BASE + 10)
+
+struct option md_longopts[] =
+{
+#ifdef OPTION_EB
+ {"EB" , no_argument, NULL, OPTION_EB},
+#endif
+#ifdef OPTION_EL
+ {"EL" , no_argument, NULL, OPTION_EL},
+#endif
+ {"FIXDD" , no_argument, NULL, OPTION_FIXDD},
+ {"NWARN" , no_argument, NULL, OPTION_NWARN},
+ {"SCORE5" , no_argument, NULL, OPTION_SCORE5},
+ {"SCORE5U", no_argument, NULL, OPTION_SCORE5U},
+ {"SCORE7" , no_argument, NULL, OPTION_SCORE7},
+ {"USE_R1" , no_argument, NULL, OPTION_R1},
+ {"O0" , no_argument, NULL, OPTION_O0},
+ {"V" , no_argument, NULL, OPTION_SCORE_VERSION},
+ {"KPIC" , no_argument, NULL, OPTION_PIC},
+ {NULL , no_argument, NULL, 0}
+};
+
+size_t md_longopts_size = sizeof (md_longopts);
+
+int
+md_parse_option (int c, char *arg)
+{
+ switch (c)
+ {
+#ifdef OPTION_EB
+ case OPTION_EB:
+ target_big_endian = 1;
+ break;
+#endif
+#ifdef OPTION_EL
+ case OPTION_EL:
+ target_big_endian = 0;
+ break;
+#endif
+ case OPTION_FIXDD:
+ fix_data_dependency = 1;
+ break;
+ case OPTION_NWARN:
+ warn_fix_data_dependency = 0;
+ break;
+ case OPTION_SCORE5:
+ score7 = 0;
+ university_version = 0;
+ vector_size = SCORE5_PIPELINE;
+ break;
+ case OPTION_SCORE5U:
+ score7 = 0;
+ university_version = 1;
+ vector_size = SCORE5_PIPELINE;
+ break;
+ case OPTION_SCORE7:
+ score7 = 1;
+ university_version = 0;
+ vector_size = SCORE7_PIPELINE;
+ break;
+ case OPTION_R1:
+ nor1 = 0;
+ break;
+ case 'G':
+ g_switch_value = atoi (arg);
+ break;
+ case OPTION_O0:
+ g_opt = 0;
+ break;
+ case OPTION_SCORE_VERSION:
+ printf (_("Sunplus-v2-0-0-20060510\n"));
+ break;
+ case OPTION_PIC:
+ score_pic = PIC;
+ g_switch_value = 0; /* Must set -G num as 0 to generate PIC code. */
+ break;
+ default:
+ /* as_bad (_("unrecognized option `-%c%s'"), c, arg ? arg : ""); */
+ return 0;
+ }
+ return 1;
+}
+
+void
+md_show_usage (FILE * fp)
+{
+ fprintf (fp, _(" Score-specific assembler options:\n"));
+#ifdef OPTION_EB
+ fprintf (fp, _("\
+ -EB\t\tassemble code for a big-endian cpu\n"));
+#endif
+
+#ifdef OPTION_EL
+ fprintf (fp, _("\
+ -EL\t\tassemble code for a little-endian cpu\n"));
+#endif
+
+ fprintf (fp, _("\
+ -FIXDD\t\tassemble code for fix data dependency\n"));
+ fprintf (fp, _("\
+ -NWARN\t\tassemble code for no warning message for fix data dependency\n"));
+ fprintf (fp, _("\
+ -SCORE5\t\tassemble code for target is SCORE5\n"));
+ fprintf (fp, _("\
+ -SCORE5U\tassemble code for target is SCORE5U\n"));
+ fprintf (fp, _("\
+ -SCORE7\t\tassemble code for target is SCORE7, this is default setting\n"));
+ fprintf (fp, _("\
+ -USE_R1\t\tassemble code for no warning message when using temp register r1\n"));
+ fprintf (fp, _("\
+ -KPIC\t\tassemble code for PIC\n"));
+ fprintf (fp, _("\
+ -O0\t\tassembler will not perform any optimizations\n"));
+ fprintf (fp, _("\
+ -G gpnum\tassemble code for setting gpsize and default is 8 byte\n"));
+ fprintf (fp, _("\
+ -V \t\tSunplus release version \n"));
+}
+
+
+/* Pesudo handling functions. */
+
+/* If we change section we must dump the literal pool first. */
+static void
+s_score_bss (int ignore ATTRIBUTE_UNUSED)
+{
+ subseg_set (bss_section, (subsegT) get_absolute_expression ());
+ demand_empty_rest_of_line ();
+}
+
+static void
+s_score_text (int ignore)
+{
+ obj_elf_text (ignore);
+ record_alignment (now_seg, 2);
+}
+
+static void
+score_s_section (int ignore)
+{
+ obj_elf_section (ignore);
+ if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) != 0)
+ record_alignment (now_seg, 2);
+
+}
+
+static void
+s_change_sec (int sec)
+{
+ segT seg;
+
+#ifdef OBJ_ELF
+ /* The ELF backend needs to know that we are changing sections, so
+ that .previous works correctly. We could do something like check
+ for an obj_section_change_hook macro, but that might be confusing
+ as it would not be appropriate to use it in the section changing
+ functions in read.c, since obj-elf.c intercepts those. FIXME:
+ This should be cleaner, somehow. */
+ obj_elf_section_change_hook ();
+#endif
+ switch (sec)
+ {
+ case 'r':
+ seg = subseg_new (RDATA_SECTION_NAME, (subsegT) get_absolute_expression ());
+ bfd_set_section_flags (stdoutput, seg, (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_RELOC | SEC_DATA));
+ if (strcmp (TARGET_OS, "elf") != 0)
+ record_alignment (seg, 4);
+ demand_empty_rest_of_line ();
+ break;
+ case 's':
+ seg = subseg_new (".sdata", (subsegT) get_absolute_expression ());
+ bfd_set_section_flags (stdoutput, seg, SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA);
+ if (strcmp (TARGET_OS, "elf") != 0)
+ record_alignment (seg, 4);
+ demand_empty_rest_of_line ();
+ break;
+ }
+}
+
+static void
+s_score_mask (int reg_type ATTRIBUTE_UNUSED)
+{
+ long mask, off;
+
+ if (cur_proc_ptr == (procS *) NULL)
+ {
+ as_warn (_(".mask outside of .ent"));
+ demand_empty_rest_of_line ();
+ return;
+ }
+ if (get_absolute_expression_and_terminator (&mask) != ',')
+ {
+ as_warn (_("Bad .mask directive"));
+ --input_line_pointer;
+ demand_empty_rest_of_line ();
+ return;
+ }
+ off = get_absolute_expression ();
+ cur_proc_ptr->reg_mask = mask;
+ cur_proc_ptr->reg_offset = off;
+ demand_empty_rest_of_line ();
+}
+
+static symbolS *
+get_symbol (void)
+{
+ int c;
+ char *name;
+ symbolS *p;
+
+ name = input_line_pointer;
+ c = get_symbol_end ();
+ p = (symbolS *) symbol_find_or_make (name);
+ *input_line_pointer = c;
+ return p;
+}
+
+static long
+get_number (void)
+{
+ int negative = 0;
+ long val = 0;
+
+ if (*input_line_pointer == '-')
+ {
+ ++input_line_pointer;
+ negative = 1;
+ }
+ if (!ISDIGIT (*input_line_pointer))
+ as_bad (_("expected simple number"));
+ if (input_line_pointer[0] == '0')
+ {
+ if (input_line_pointer[1] == 'x')
+ {
+ input_line_pointer += 2;
+ while (ISXDIGIT (*input_line_pointer))
+ {
+ val <<= 4;
+ val |= hex_value (*input_line_pointer++);
+ }
+ return negative ? -val : val;
+ }
+ else
+ {
+ ++input_line_pointer;
+ while (ISDIGIT (*input_line_pointer))
+ {
+ val <<= 3;
+ val |= *input_line_pointer++ - '0';
+ }
+ return negative ? -val : val;
+ }
+ }
+ if (!ISDIGIT (*input_line_pointer))
+ {
+ printf (_(" *input_line_pointer == '%c' 0x%02x\n"), *input_line_pointer, *input_line_pointer);
+ as_warn (_("invalid number"));
+ return -1;
+ }
+ while (ISDIGIT (*input_line_pointer))
+ {
+ val *= 10;
+ val += *input_line_pointer++ - '0';
+ }
+ return negative ? -val : val;
+}
+
+/* The .aent and .ent directives. */
+
+static void
+s_score_ent (int aent)
+{
+ symbolS *symbolP;
+ int maybe_text;
+
+ symbolP = get_symbol ();
+ if (*input_line_pointer == ',')
+ ++input_line_pointer;
+ SKIP_WHITESPACE ();
+ if (ISDIGIT (*input_line_pointer) || *input_line_pointer == '-')
+ get_number ();
+
+#ifdef BFD_ASSEMBLER
+ if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) != 0)
+ maybe_text = 1;
+ else
+ maybe_text = 0;
+#else
+ if (now_seg != data_section && now_seg != bss_section)
+ maybe_text = 1;
+ else
+ maybe_text = 0;
+#endif
+ if (!maybe_text)
+ as_warn (_(".ent or .aent not in text section."));
+ if (!aent && cur_proc_ptr)
+ as_warn (_("missing .end"));
+ if (!aent)
+ {
+ cur_proc_ptr = &cur_proc;
+ cur_proc_ptr->reg_mask = 0xdeadbeaf;
+ cur_proc_ptr->reg_offset = 0xdeadbeaf;
+ cur_proc_ptr->fpreg_mask = 0xdeafbeaf;
+ cur_proc_ptr->leaf = 0xdeafbeaf;
+ cur_proc_ptr->frame_offset = 0xdeafbeaf;
+ cur_proc_ptr->frame_reg = 0xdeafbeaf;
+ cur_proc_ptr->pc_reg = 0xdeafbeaf;
+ cur_proc_ptr->isym = symbolP;
+ symbol_get_bfdsym (symbolP)->flags |= BSF_FUNCTION;
+ ++numprocs;
+ if (debug_type == DEBUG_STABS)
+ stabs_generate_asm_func (S_GET_NAME (symbolP), S_GET_NAME (symbolP));
+ }
+ demand_empty_rest_of_line ();
+}
+
+static void
+s_score_frame (int ignore ATTRIBUTE_UNUSED)
+{
+ char *backupstr;
+ char str[30];
+ long val;
+ int i = 0;
+
+ backupstr = input_line_pointer;
+
+#ifdef OBJ_ELF
+ if (cur_proc_ptr == (procS *) NULL)
+ {
+ as_warn (_(".frame outside of .ent"));
+ demand_empty_rest_of_line ();
+ return;
+ }
+ cur_proc_ptr->frame_reg = reg_required_here ((&backupstr), 0, REG_TYPE_SCORE);
+ SKIP_WHITESPACE ();
+ skip_past_comma (&backupstr);
+ while (*backupstr != ',')
+ {
+ str[i] = *backupstr;
+ i++;
+ backupstr++;
+ }
+ str[i] = '\0';
+ val = atoi (str);
+
+ SKIP_WHITESPACE ();
+ skip_past_comma (&backupstr);
+ cur_proc_ptr->frame_offset = val;
+ cur_proc_ptr->pc_reg = reg_required_here ((&backupstr), 0, REG_TYPE_SCORE);
+
+ SKIP_WHITESPACE ();
+ skip_past_comma (&backupstr);
+ i = 0;
+ while (*backupstr != '\n')
+ {
+ str[i] = *backupstr;
+ i++;
+ backupstr++;
+ }
+ str[i] = '\0';
+ val = atoi (str);
+ cur_proc_ptr->leaf = val;
+ SKIP_WHITESPACE ();
+ skip_past_comma (&backupstr);
+
+#endif /* OBJ_ELF */
+ while (input_line_pointer != backupstr)
+ input_line_pointer++;
+}
+
+/* The .end directive. */
+static void
+s_score_end (int x ATTRIBUTE_UNUSED)
+{
+ symbolS *p;
+ int maybe_text;
+
+ /* Generate a .pdr section. */
+ segT saved_seg = now_seg;
+ subsegT saved_subseg = now_subseg;
+ valueT dot;
+ expressionS exp;
+ char *fragp;
+
+ if (!is_end_of_line[(unsigned char)*input_line_pointer])
+ {
+ p = get_symbol ();
+ demand_empty_rest_of_line ();
+ }
+ else
+ p = NULL;
+
+#ifdef BFD_ASSEMBLER
+ if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) != 0)
+ maybe_text = 1;
+ else
+ maybe_text = 0;
+#else
+ if (now_seg != data_section && now_seg != bss_section)
+ maybe_text = 1;
+ else
+ maybe_text = 0;
+#endif
+
+ if (!maybe_text)
+ as_warn (_(".end not in text section"));
+ if (!cur_proc_ptr)
+ {
+ as_warn (_(".end directive without a preceding .ent directive."));
+ demand_empty_rest_of_line ();
+ return;
+ }
+ if (p != NULL)
+ {
+ assert (S_GET_NAME (p));
+ if (strcmp (S_GET_NAME (p), S_GET_NAME (cur_proc_ptr->isym)))
+ as_warn (_(".end symbol does not match .ent symbol."));
+ if (debug_type == DEBUG_STABS)
+ stabs_generate_asm_endfunc (S_GET_NAME (p), S_GET_NAME (p));
+ }
+ else
+ as_warn (_(".end directive missing or unknown symbol"));
+
+ if ((cur_proc_ptr->reg_mask == 0xdeadbeaf) ||
+ (cur_proc_ptr->reg_offset == 0xdeadbeaf) ||
+ (cur_proc_ptr->leaf == 0xdeafbeaf) ||
+ (cur_proc_ptr->frame_offset == 0xdeafbeaf) ||
+ (cur_proc_ptr->frame_reg == 0xdeafbeaf) || (cur_proc_ptr->pc_reg == 0xdeafbeaf));
+
+ else
+ {
+ dot = frag_now_fix ();
+ assert (pdr_seg);
+ subseg_set (pdr_seg, 0);
+ /* Write the symbol. */
+ exp.X_op = O_symbol;
+ exp.X_add_symbol = p;
+ exp.X_add_number = 0;
+ emit_expr (&exp, 4);
+ fragp = frag_more (7 * 4);
+ md_number_to_chars (fragp, (valueT) cur_proc_ptr->reg_mask, 4);
+ md_number_to_chars (fragp + 4, (valueT) cur_proc_ptr->reg_offset, 4);
+ md_number_to_chars (fragp + 8, (valueT) cur_proc_ptr->fpreg_mask, 4);
+ md_number_to_chars (fragp + 12, (valueT) cur_proc_ptr->leaf, 4);
+ md_number_to_chars (fragp + 16, (valueT) cur_proc_ptr->frame_offset, 4);
+ md_number_to_chars (fragp + 20, (valueT) cur_proc_ptr->frame_reg, 4);
+ md_number_to_chars (fragp + 24, (valueT) cur_proc_ptr->pc_reg, 4);
+ subseg_set (saved_seg, saved_subseg);
+
+ }
+ cur_proc_ptr = NULL;
+}
+
+/* Handle the .set pseudo-op. */
+static void
+s_score_set (int x ATTRIBUTE_UNUSED)
+{
+ int i = 0;
+ char name[MAX_LITERAL_POOL_SIZE];
+ char * orig_ilp = input_line_pointer;
+
+ while (!is_end_of_line[(unsigned char)*input_line_pointer])
+ {
+ name[i] = (char) * input_line_pointer;
+ i++;
+ ++input_line_pointer;
+ }
+
+ name[i] = '\0';
+
+ if (strcmp (name, "nwarn") == 0)
+ {
+ warn_fix_data_dependency = 0;
+ }
+ else if (strcmp (name, "fixdd") == 0)
+ {
+ fix_data_dependency = 1;
+ }
+ else if (strcmp (name, "nofixdd") == 0)
+ {
+ fix_data_dependency = 0;
+ }
+ else if (strcmp (name, "r1") == 0)
+ {
+ nor1 = 0;
+ }
+ else if (strcmp (name, "nor1") == 0)
+ {
+ nor1 = 1;
+ }
+ else if (strcmp (name, "optimize") == 0)
+ {
+ g_opt = 1;
+ }
+ else if (strcmp (name, "volatile") == 0)
+ {
+ g_opt = 0;
+ }
+ else if (strcmp (name, "pic") == 0)
+ {
+ score_pic = PIC;
+ }
+ else
+ {
+ input_line_pointer = orig_ilp;
+ s_set (0);
+ }
+}
+
+/* Handle the .cpload pseudo-op. This is used when generating PIC code. It sets the
+ $gp register for the function based on the function address, which is in the register
+ named in the argument. This uses a relocation against GP_DISP_LABEL, which is handled
+ specially by the linker. The result is:
+ ldis gp, %hi(GP_DISP_LABEL)
+ ori gp, %low(GP_DISP_LABEL)
+ add gp, gp, .cpload argument
+ The .cpload argument is normally r29. */
+
+static void
+s_score_cpload (int ignore ATTRIBUTE_UNUSED)
+{
+ int reg;
+ char insn_str[MAX_LITERAL_POOL_SIZE];
+
+ /* If we are not generating PIC code, .cpload is ignored. */
+ if (score_pic == NO_PIC)
+ {
+ s_ignore (0);
+ return;
+ }
+
+ if ((reg = reg_required_here (&input_line_pointer, -1, REG_TYPE_SCORE)) == (int) FAIL)
+ return;
+
+ demand_empty_rest_of_line ();
+
+ sprintf (insn_str, "ld_i32hi r%d, %s", GP, GP_DISP_LABEL);
+ if (append_insn (insn_str, TRUE) == (int) FAIL)
+ return;
+
+ sprintf (insn_str, "ld_i32lo r%d, %s", GP, GP_DISP_LABEL);
+ if (append_insn (insn_str, TRUE) == (int) FAIL)
+ return;
+
+ sprintf (insn_str, "add r%d, r%d, r%d", GP, GP, reg);
+ if (append_insn (insn_str, TRUE) == (int) FAIL)
+ return;
+}
+
+/* Handle the .cprestore pseudo-op. This stores $gp into a given
+ offset from $sp. The offset is remembered, and after making a PIC
+ call $gp is restored from that location. */
+
+static void
+s_score_cprestore (int ignore ATTRIBUTE_UNUSED)
+{
+ int reg;
+ int cprestore_offset;
+ char insn_str[MAX_LITERAL_POOL_SIZE];
+
+ /* If we are not generating PIC code, .cprestore is ignored. */
+ if (score_pic == NO_PIC)
+ {
+ s_ignore (0);
+ return;
+ }
+
+ if ((reg = reg_required_here (&input_line_pointer, -1, REG_TYPE_SCORE)) == (int) FAIL
+ || skip_past_comma (&input_line_pointer) == (int) FAIL)
+ {
+ return;
+ }
+
+ cprestore_offset = get_absolute_expression ();
+
+ if (cprestore_offset <= 0x3fff)
+ {
+ sprintf (insn_str, "sw r%d, [r%d, %d]", GP, reg, cprestore_offset);
+ if (append_insn (insn_str, TRUE) == (int) FAIL)
+ return;
+ }
+ else
+ {
+ int r1_bak;
+
+ r1_bak = nor1;
+ nor1 = 0;
+
+ sprintf (insn_str, "li r1, %d", cprestore_offset);
+ if (append_insn (insn_str, TRUE) == (int) FAIL)
+ return;
+
+ sprintf (insn_str, "add r1, r1, r%d", reg);
+ if (append_insn (insn_str, TRUE) == (int) FAIL)
+ return;
+
+ sprintf (insn_str, "sw r%d, [r1]", GP);
+ if (append_insn (insn_str, TRUE) == (int) FAIL)
+ return;
+
+ nor1 = r1_bak;
+ }
+
+ demand_empty_rest_of_line ();
+}
+
+/* Handle the .gpword pseudo-op. This is used when generating PIC
+ code. It generates a 32 bit GP relative reloc. */
+static void
+s_score_gpword (int ignore ATTRIBUTE_UNUSED)
+{
+ expressionS ex;
+ char *p;
+
+ /* When not generating PIC code, this is treated as .word. */
+ if (score_pic == NO_PIC)
+ {
+ cons (4);
+ return;
+ }
+ expression (&ex);
+ if (ex.X_op != O_symbol || ex.X_add_number != 0)
+ {
+ as_bad (_("Unsupported use of .gpword"));
+ ignore_rest_of_line ();
+ }
+ p = frag_more (4);
+ md_number_to_chars (p, (valueT) 0, 4);
+ fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE, BFD_RELOC_GPREL32);
+ demand_empty_rest_of_line ();
+}
+
+/* Handle the .cpadd pseudo-op. This is used when dealing with switch
+ tables in PIC code. */
+
+static void
+s_score_cpadd (int ignore ATTRIBUTE_UNUSED)
+{
+ int reg;
+ char insn_str[MAX_LITERAL_POOL_SIZE];
+
+ /* If we are not generating PIC code, .cpload is ignored. */
+ if (score_pic == NO_PIC)
+ {
+ s_ignore (0);
+ return;
+ }
+
+ if ((reg = reg_required_here (&input_line_pointer, -1, REG_TYPE_SCORE)) == (int) FAIL)
+ {
+ return;
+ }
+ demand_empty_rest_of_line ();
+
+ /* Add $gp to the register named as an argument. */
+ sprintf (insn_str, "add r%d, r%d, r%d", reg, reg, GP);
+ if (append_insn (insn_str, TRUE) == (int) FAIL)
+ return;
+}
+
+#ifndef TC_IMPLICIT_LCOMM_ALIGNMENT
+#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) \
+ do \
+ { \
+ if ((SIZE) >= 8) \
+ (P2VAR) = 3; \
+ else if ((SIZE) >= 4) \
+ (P2VAR) = 2; \
+ else if ((SIZE) >= 2) \
+ (P2VAR) = 1; \
+ else \
+ (P2VAR) = 0; \
+ } \
+ while (0)
+#endif
+
+static void
+s_score_lcomm (int bytes_p)
+{
+ char *name;
+ char c;
+ char *p;
+ int temp;
+ symbolS *symbolP;
+ segT current_seg = now_seg;
+ subsegT current_subseg = now_subseg;
+ const int max_alignment = 15;
+ int align = 0;
+ segT bss_seg = bss_section;
+ int needs_align = 0;
+
+ name = input_line_pointer;
+ c = get_symbol_end ();
+ p = input_line_pointer;
+ *p = c;
+
+ if (name == p)
+ {
+ as_bad (_("expected symbol name"));
+ discard_rest_of_line ();
+ return;
+ }
+
+ SKIP_WHITESPACE ();
+
+ /* Accept an optional comma after the name. The comma used to be
+ required, but Irix 5 cc does not generate it. */
+ if (*input_line_pointer == ',')
+ {
+ ++input_line_pointer;
+ SKIP_WHITESPACE ();
+ }
+
+ if (is_end_of_line[(unsigned char)*input_line_pointer])
+ {
+ as_bad (_("missing size expression"));
+ return;
+ }
+
+ if ((temp = get_absolute_expression ()) < 0)
+ {
+ as_warn (_("BSS length (%d) < 0 ignored"), temp);
+ ignore_rest_of_line ();
+ return;
+ }
+
+#if defined (TC_SCORE)
+ if (OUTPUT_FLAVOR == bfd_target_ecoff_flavour || OUTPUT_FLAVOR == bfd_target_elf_flavour)
+ {
+ /* For Score and Alpha ECOFF or ELF, small objects are put in .sbss. */
+ if ((unsigned)temp <= bfd_get_gp_size (stdoutput))
+ {
+ bss_seg = subseg_new (".sbss", 1);
+ seg_info (bss_seg)->bss = 1;
+#ifdef BFD_ASSEMBLER
+ if (!bfd_set_section_flags (stdoutput, bss_seg, SEC_ALLOC))
+ as_warn (_("error setting flags for \".sbss\": %s"), bfd_errmsg (bfd_get_error ()));
+#endif
+ }
+ }
+#endif
+
+ SKIP_WHITESPACE ();
+ if (*input_line_pointer == ',')
+ {
+ ++input_line_pointer;
+ SKIP_WHITESPACE ();
+
+ if (is_end_of_line[(unsigned char)*input_line_pointer])
+ {
+ as_bad (_("missing alignment"));
+ return;
+ }
+ else
+ {
+ align = get_absolute_expression ();
+ needs_align = 1;
+ }
+ }
+
+ if (!needs_align)
+ {
+ TC_IMPLICIT_LCOMM_ALIGNMENT (temp, align);
+
+ /* Still zero unless TC_IMPLICIT_LCOMM_ALIGNMENT set it. */
+ if (align)
+ record_alignment (bss_seg, align);
+ }
+
+ if (needs_align)
+ {
+ if (bytes_p)
+ {
+ /* Convert to a power of 2. */
+ if (align != 0)
+ {
+ unsigned int i;
+
+ for (i = 0; align != 0; align >>= 1, ++i)
+ ;
+ align = i - 1;
+ }
+ }
+
+ if (align > max_alignment)
+ {
+ align = max_alignment;
+ as_warn (_("alignment too large; %d assumed"), align);
+ }
+ else if (align < 0)
+ {
+ align = 0;
+ as_warn (_("alignment negative; 0 assumed"));
+ }
+
+ record_alignment (bss_seg, align);
+ }
+ else
+ {
+ /* Assume some objects may require alignment on some systems. */
+#if defined (TC_ALPHA) && ! defined (VMS)
+ if (temp > 1)
+ {
+ align = ffs (temp) - 1;
+ if (temp % (1 << align))
+ abort ();
+ }
+#endif
+ }
+
+ *p = 0;
+ symbolP = symbol_find_or_make (name);
+ *p = c;
+
+ if (
+#if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT) \
+ || defined (OBJ_BOUT) || defined (OBJ_MAYBE_BOUT))
+#ifdef BFD_ASSEMBLER
+ (OUTPUT_FLAVOR != bfd_target_aout_flavour
+ || (S_GET_OTHER (symbolP) == 0 && S_GET_DESC (symbolP) == 0)) &&
+#else
+ (S_GET_OTHER (symbolP) == 0 && S_GET_DESC (symbolP) == 0) &&
+#endif
+#endif
+ (S_GET_SEGMENT (symbolP) == bss_seg || (!S_IS_DEFINED (symbolP) && S_GET_VALUE (symbolP) == 0)))
+ {
+ char *pfrag;
+
+ subseg_set (bss_seg, 1);
+
+ if (align)
+ frag_align (align, 0, 0);
+
+ /* Detach from old frag. */
+ if (S_GET_SEGMENT (symbolP) == bss_seg)
+ symbol_get_frag (symbolP)->fr_symbol = NULL;
+
+ symbol_set_frag (symbolP, frag_now);
+ pfrag = frag_var (rs_org, 1, 1, (relax_substateT) 0, symbolP, (offsetT) temp, NULL);
+ *pfrag = 0;
+
+
+ S_SET_SEGMENT (symbolP, bss_seg);
+
+#ifdef OBJ_COFF
+ /* The symbol may already have been created with a preceding
+ ".globl" directive -- be careful not to step on storage class
+ in that case. Otherwise, set it to static. */
+ if (S_GET_STORAGE_CLASS (symbolP) != C_EXT)
+ {
+ S_SET_STORAGE_CLASS (symbolP, C_STAT);
+ }
+#endif /* OBJ_COFF */
+
+#ifdef S_SET_SIZE
+ S_SET_SIZE (symbolP, temp);
+#endif
+ }
+ else
+ as_bad (_("symbol `%s' is already defined"), S_GET_NAME (symbolP));
+
+ subseg_set (current_seg, current_subseg);
+
+ demand_empty_rest_of_line ();
+}
+
+static void
+insert_reg (const struct reg_entry *r, struct hash_control *htab)
+{
+ int i = 0;
+ int len = strlen (r->name) + 2;
+ char *buf = xmalloc (len);
+ char *buf2 = xmalloc (len);
+
+ strcpy (buf + i, r->name);
+ for (i = 0; buf[i]; i++)
+ {
+ buf2[i] = TOUPPER (buf[i]);
+ }
+ buf2[i] = '\0';
+
+ hash_insert (htab, buf, (void *) r);
+ hash_insert (htab, buf2, (void *) r);
+}
+
+static void
+build_reg_hsh (struct reg_map *map)
+{
+ const struct reg_entry *r;
+
+ if ((map->htab = hash_new ()) == NULL)
+ {
+ as_fatal (_("virtual memory exhausted"));
+ }
+ for (r = map->names; r->name != NULL; r++)
+ {
+ insert_reg (r, map->htab);
+ }
+}
+
+void
+md_begin (void)
+{
+ unsigned int i;
+ segT seg;
+ subsegT subseg;
+
+ if ((score_ops_hsh = hash_new ()) == NULL)
+ as_fatal (_("virtual memory exhausted"));
+
+ build_score_ops_hsh ();
+
+ if ((dependency_insn_hsh = hash_new ()) == NULL)
+ as_fatal (_("virtual memory exhausted"));
+
+ build_dependency_insn_hsh ();
+
+ for (i = (int)REG_TYPE_FIRST; i < (int)REG_TYPE_MAX; i++)
+ build_reg_hsh (all_reg_maps + i);
+
+ /* Initialize dependency vector. */
+ init_dependency_vector ();
+
+ bfd_set_arch_mach (stdoutput, TARGET_ARCH, 0);
+ seg = now_seg;
+ subseg = now_subseg;
+ pdr_seg = subseg_new (".pdr", (subsegT) 0);
+ (void)bfd_set_section_flags (stdoutput, pdr_seg, SEC_READONLY | SEC_RELOC | SEC_DEBUGGING);
+ (void)bfd_set_section_alignment (stdoutput, pdr_seg, 2);
+ subseg_set (seg, subseg);
+
+ if (USE_GLOBAL_POINTER_OPT)
+ bfd_set_gp_size (stdoutput, g_switch_value);
+}
+
+
+const pseudo_typeS md_pseudo_table[] =
+{
+ {"bss", s_score_bss, 0},
+ {"text", s_score_text, 0},
+ {"word", cons, 4},
+ {"long", cons, 4},
+ {"extend", float_cons, 'x'},
+ {"ldouble", float_cons, 'x'},
+ {"packed", float_cons, 'p'},
+ {"end", s_score_end, 0},
+ {"ent", s_score_ent, 0},
+ {"frame", s_score_frame, 0},
+ {"rdata", s_change_sec, 'r'},
+ {"sdata", s_change_sec, 's'},
+ {"set", s_score_set, 0},
+ {"mask", s_score_mask, 'R'},
+ {"dword", cons, 8},
+ {"lcomm", s_score_lcomm, 1},
+ {"section", score_s_section, 0},
+ {"cpload", s_score_cpload, 0},
+ {"cprestore", s_score_cprestore, 0},
+ {"gpword", s_score_gpword, 0},
+ {"cpadd", s_score_cpadd, 0},
+ {0, 0, 0}
+};
+
diff --git a/gas/config/tc-score.h b/gas/config/tc-score.h
new file mode 100644
index 000000000000..2cd403956884
--- /dev/null
+++ b/gas/config/tc-score.h
@@ -0,0 +1,83 @@
+/* tc-score.h -- Score specific file for assembler
+ Copyright 2006 Free Software Foundation, Inc.
+ Contributed by:
+ Mei Ligang (ligang@sunnorth.com.cn)
+ Pei-Lin Tsai (pltsai@sunplus.com)
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to the Free
+ Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef TC_SCORE
+#define TC_SCORE
+
+#define TARGET_ARCH bfd_arch_score
+#define WORKING_DOT_WORD
+#define DIFF_EXPR_OK
+#define RELOC_EXPANSION_POSSIBLE
+#define MAX_RELOC_EXPANSION 2
+#define MAX_MEM_FOR_RS_ALIGN_CODE (3 + 4)
+
+#define md_undefined_symbol(name) NULL
+
+#define TARGET_FORMAT (target_big_endian ? "elf32-bigscore" : "elf32-littlescore")
+
+#define md_relax_frag(segment, fragp, stretch) score_relax_frag (segment, fragp, stretch)
+extern int score_relax_frag (asection *, struct frag *, long);
+
+#define md_frag_check(fragp) score_frag_check (fragp)
+extern void score_frag_check (fragS *);
+
+#define TC_VALIDATE_FIX(FIXP, SEGTYPE, SKIP) score_validate_fix (FIXP)
+extern void score_validate_fix (struct fix *);
+
+#define TC_FORCE_RELOCATION(FIXP) score_force_relocation (FIXP)
+extern int score_force_relocation (struct fix *);
+
+#define tc_fix_adjustable(fixp) score_fix_adjustable (fixp)
+extern bfd_boolean score_fix_adjustable (struct fix *);
+
+#define elf_tc_final_processing score_elf_final_processing
+extern void score_elf_final_processing (void);
+
+struct score_tc_frag_data
+{
+ unsigned int is_insn;
+ struct fix *fixp;
+};
+
+#define TC_FRAG_TYPE struct score_tc_frag_data
+
+#define TC_FRAG_INIT(FRAGP) \
+ do \
+ { \
+ (FRAGP)->tc_frag_data.is_insn = (((FRAGP)->fr_type == rs_machine_dependent) ? 1 : 0); \
+ } \
+ while (0)
+
+#ifdef OBJ_ELF
+#define GLOBAL_OFFSET_TABLE_NAME "_GLOBAL_OFFSET_TABLE_"
+#else
+#define GLOBAL_OFFSET_TABLE_NAME "__GLOBAL_OFFSET_TABLE_"
+#endif
+
+enum score_pic_level
+{
+ NO_PIC,
+ PIC
+};
+
+#endif /*TC_SCORE */
diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c
index acf62aef21d6..5545e94cbf29 100644
--- a/gas/config/tc-sh.c
+++ b/gas/config/tc-sh.c
@@ -1,6 +1,6 @@
/* tc-sh.c -- Assemble code for the Renesas / SuperH SH
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -21,9 +21,7 @@
/* Written By Steve Chamberlain <sac@cygnus.com> */
-#include <stdio.h>
#include "as.h"
-#include "bfd.h"
#include "subsegs.h"
#define DEFINE_TABLE
#include "opcodes/sh-opc.h"
@@ -827,8 +825,97 @@ sh_elf_cons (register int nbytes)
else
demand_empty_rest_of_line ();
}
-#endif /* OBJ_ELF */
+/* The regular frag_offset_fixed_p doesn't work for rs_align_test
+ frags. */
+
+static bfd_boolean
+align_test_frag_offset_fixed_p (const fragS *frag1, const fragS *frag2,
+ bfd_vma *offset)
+{
+ const fragS *frag;
+ bfd_vma off;
+
+ /* Start with offset initialised to difference between the two frags.
+ Prior to assigning frag addresses this will be zero. */
+ off = frag1->fr_address - frag2->fr_address;
+ if (frag1 == frag2)
+ {
+ *offset = off;
+ return TRUE;
+ }
+
+ /* Maybe frag2 is after frag1. */
+ frag = frag1;
+ while (frag->fr_type == rs_fill
+ || frag->fr_type == rs_align_test)
+ {
+ if (frag->fr_type == rs_fill)
+ off += frag->fr_fix + frag->fr_offset * frag->fr_var;
+ else
+ off += frag->fr_fix;
+ frag = frag->fr_next;
+ if (frag == NULL)
+ break;
+ if (frag == frag2)
+ {
+ *offset = off;
+ return TRUE;
+ }
+ }
+
+ /* Maybe frag1 is after frag2. */
+ off = frag1->fr_address - frag2->fr_address;
+ frag = frag2;
+ while (frag->fr_type == rs_fill
+ || frag->fr_type == rs_align_test)
+ {
+ if (frag->fr_type == rs_fill)
+ off -= frag->fr_fix + frag->fr_offset * frag->fr_var;
+ else
+ off -= frag->fr_fix;
+ frag = frag->fr_next;
+ if (frag == NULL)
+ break;
+ if (frag == frag1)
+ {
+ *offset = off;
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+/* Optimize a difference of symbols which have rs_align_test frag if
+ possible. */
+
+int
+sh_optimize_expr (expressionS *l, operatorT op, expressionS *r)
+{
+ bfd_vma frag_off;
+
+ if (op == O_subtract
+ && l->X_op == O_symbol
+ && r->X_op == O_symbol
+ && S_GET_SEGMENT (l->X_add_symbol) == S_GET_SEGMENT (r->X_add_symbol)
+ && (SEG_NORMAL (S_GET_SEGMENT (l->X_add_symbol))
+ || r->X_add_symbol == l->X_add_symbol)
+ && align_test_frag_offset_fixed_p (symbol_get_frag (l->X_add_symbol),
+ symbol_get_frag (r->X_add_symbol),
+ &frag_off))
+ {
+ l->X_add_number -= r->X_add_number;
+ l->X_add_number -= frag_off / OCTETS_PER_BYTE;
+ l->X_add_number += (S_GET_VALUE (l->X_add_symbol)
+ - S_GET_VALUE (r->X_add_symbol));
+ l->X_op = O_constant;
+ l->X_add_symbol = 0;
+ return 1;
+ }
+ return 0;
+}
+#endif /* OBJ_ELF */
/* This function is called once, at assembler startup time. This should
set up all the tables, etc that the MD part of the assembler needs. */
@@ -2798,7 +2885,7 @@ md_assemble (char *str)
if (opcode == NULL)
{
/* The opcode is not in the hash table.
- This means we definately have an assembly failure,
+ This means we definitely have an assembly failure,
but the instruction may be valid in another CPU variant.
In this case emit something better than 'unknown opcode'.
Search the full table in sh-opc.h to check. */
@@ -2867,6 +2954,9 @@ md_assemble (char *str)
as_bad (_("Delayed branches not available on SH1"));
parse_exp (op_end + 1, &operand[0]);
build_relax (opcode, &operand[0]);
+
+ /* All branches are currently 16 bit. */
+ size = 2;
}
else
{
@@ -3065,6 +3155,10 @@ struct option md_longopts[] =
{"relax", no_argument, NULL, OPTION_RELAX},
{"big", no_argument, NULL, OPTION_BIG},
{"little", no_argument, NULL, OPTION_LITTLE},
+ /* The next two switches are here because the
+ generic parts of the linker testsuite uses them. */
+ {"EB", no_argument, NULL, OPTION_BIG},
+ {"EL", no_argument, NULL, OPTION_LITTLE},
{"small", no_argument, NULL, OPTION_SMALL},
{"dsp", no_argument, NULL, OPTION_DSP},
{"isa", required_argument, NULL, OPTION_ISA},
@@ -3316,6 +3410,21 @@ sh_frob_section (bfd *abfd ATTRIBUTE_UNUSED, segT sec,
for (fix = seginfo->fix_root; fix != NULL; fix = fix->fx_next)
{
symbolS *sym;
+
+ sym = fix->fx_addsy;
+ /* Check for a local_symbol. */
+ if (sym && sym->bsym == NULL)
+ {
+ struct local_symbol *ls = (struct local_symbol *)sym;
+ /* See if it's been converted. If so, canonicalize. */
+ if (local_symbol_converted_p (ls))
+ fix->fx_addsy = local_symbol_get_real_symbol (ls);
+ }
+ }
+
+ for (fix = seginfo->fix_root; fix != NULL; fix = fix->fx_next)
+ {
+ symbolS *sym;
bfd_vma val;
fixS *fscan;
struct sh_count_relocs info;
@@ -3666,7 +3775,7 @@ sh_handle_align (fragS *frag)
else if (frag->fr_type == rs_align_test)
{
if (bytes != 0)
- as_warn_where (frag->fr_file, frag->fr_line, _("misaligned data"));
+ as_bad_where (frag->fr_file, frag->fr_line, _("misaligned data"));
}
if (sh_relax
@@ -3780,6 +3889,28 @@ sh_elf_final_processing (void)
}
#endif
+/* Apply fixup FIXP to SIZE-byte field BUF given that VAL is its
+ assembly-time value. If we're generating a reloc for FIXP,
+ see whether the addend should be stored in-place or whether
+ it should be in an ELF r_addend field. */
+
+static void
+apply_full_field_fix (fixS *fixP, char *buf, bfd_vma val, int size)
+{
+ reloc_howto_type *howto;
+
+ if (fixP->fx_addsy != NULL || fixP->fx_pcrel)
+ {
+ howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
+ if (howto && !howto->partial_inplace)
+ {
+ fixP->fx_addnumber = val;
+ return;
+ }
+ }
+ md_number_to_chars (buf, val, size);
+}
+
/* Apply a fixup to the object file. */
void
@@ -3980,11 +4111,11 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
case BFD_RELOC_32:
case BFD_RELOC_32_PCREL:
- md_number_to_chars (buf, val, 4);
+ apply_full_field_fix (fixP, buf, val, 4);
break;
case BFD_RELOC_16:
- md_number_to_chars (buf, val, 2);
+ apply_full_field_fix (fixP, buf, val, 2);
break;
case BFD_RELOC_SH_USES:
@@ -4016,8 +4147,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
val = fixP->fx_offset;
if (fixP->fx_subsy)
val -= S_GET_VALUE (fixP->fx_subsy);
- fixP->fx_addnumber = val;
- md_number_to_chars (buf, val, 4);
+ apply_full_field_fix (fixP, buf, val, 4);
break;
case BFD_RELOC_SH_GOTPC:
@@ -4038,7 +4168,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
was used to store the correction, but since the expression is
not pcrel, I felt it would be confusing to do it this way. */
* valP -= 1;
- md_number_to_chars (buf, val, 4);
+ apply_full_field_fix (fixP, buf, val, 4);
break;
case BFD_RELOC_SH_TLS_GD_32:
@@ -4049,7 +4179,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
case BFD_RELOC_32_GOT_PCREL:
case BFD_RELOC_SH_GOTPLT32:
* valP = 0; /* Fully resolved at runtime. No addend. */
- md_number_to_chars (buf, 0, 4);
+ apply_full_field_fix (fixP, buf, 0, 4);
break;
case BFD_RELOC_SH_TLS_LDO_32:
@@ -4057,7 +4187,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
S_SET_THREAD_LOCAL (fixP->fx_addsy);
/* Fallthrough */
case BFD_RELOC_32_GOTOFF:
- md_number_to_chars (buf, val, 4);
+ apply_full_field_fix (fixP, buf, val, 4);
break;
#endif
@@ -4082,6 +4212,11 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
}
if (max != 0 && (val < min || val > max))
as_bad_where (fixP->fx_file, fixP->fx_line, _("offset out of range"));
+ else if (max != 0)
+ /* Stop the generic code from trying to overlow check the value as well.
+ It may not have the correct value anyway, as we do not store val back
+ into *valP. */
+ fixP->fx_no_overflow = 1;
if (fixP->fx_addsy == NULL && fixP->fx_pcrel == 0)
fixP->fx_done = 1;
@@ -4255,12 +4390,8 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
else if (shmedia_init_reloc (rel, fixp))
;
#endif
- else if (fixp->fx_pcrel)
- rel->addend = fixp->fx_addnumber;
- else if (r_type == BFD_RELOC_32 || r_type == BFD_RELOC_32_GOTOFF)
- rel->addend = fixp->fx_addnumber;
else
- rel->addend = 0;
+ rel->addend = fixp->fx_addnumber;
rel->howto = bfd_reloc_type_lookup (stdoutput, r_type);
@@ -4382,7 +4513,7 @@ sh_cfi_frame_initial_instructions (void)
}
int
-sh_regname_to_dw2regnum (const char *regname)
+sh_regname_to_dw2regnum (char *regname)
{
unsigned int regnum = -1;
unsigned int i;
diff --git a/gas/config/tc-sh.h b/gas/config/tc-sh.h
index a812036fcd51..80542f465548 100644
--- a/gas/config/tc-sh.h
+++ b/gas/config/tc-sh.h
@@ -1,6 +1,6 @@
/* This file is tc-sh.h
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -44,6 +44,14 @@ extern int sh_small;
#define md_cons_align(nbytes) sh_cons_align (nbytes)
extern void sh_cons_align (int);
+/* We need to optimize expr with taking account of rs_align_test
+ frags. */
+
+#ifdef OBJ_ELF
+#define md_optimize_expr(l,o,r) sh_optimize_expr (l, o, r)
+extern int sh_optimize_expr (expressionS *, operatorT, expressionS *);
+#endif
+
/* When relaxing, we need to generate relocations for alignment
directives. */
#define HANDLE_ALIGN(frag) sh_handle_align (frag)
@@ -81,6 +89,11 @@ extern int sh_force_relocation (struct fix *);
#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC)
extern long md_pcrel_from_section (struct fix *, segT);
+/* SH_COUNT relocs are allowed outside of frag.
+ The target is also buggy and sets fix size too large for other relocs. */
+#define TC_FX_SIZE_SLACK(FIX) \
+ ((FIX)->fx_r_type == BFD_RELOC_SH_COUNT ? -1 : 2)
+
#define IGNORE_NONSTANDARD_ESCAPES
#define LISTING_HEADER \
@@ -149,6 +162,8 @@ extern int target_big_endian;
#define TARGET_FORMAT (!target_big_endian ? "elf32-shl-nbsd" : "elf32-sh-nbsd")
#elif defined TARGET_SYMBIAN
#define TARGET_FORMAT (!target_big_endian ? "elf32-shl-symbian" : "elf32-sh-symbian")
+#elif defined (TE_VXWORKS)
+#define TARGET_FORMAT (!target_big_endian ? "elf32-shl-vxworks" : "elf32-sh-vxworks")
#else
#define TARGET_FORMAT (!target_big_endian ? "elf32-shl" : "elf32-sh")
#endif
@@ -187,7 +202,6 @@ extern bfd_boolean sh_fix_adjustable (struct fix *);
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
(!(FIX)->fx_pcrel \
- || (FIX)->fx_plt \
|| (FIX)->fx_r_type == BFD_RELOC_32_PLT_PCREL \
|| (FIX)->fx_r_type == BFD_RELOC_32_GOT_PCREL \
|| (FIX)->fx_r_type == BFD_RELOC_SH_GOTPC \
@@ -225,11 +239,11 @@ void sh_cons_fix_new (fragS *, int, int, expressionS *);
extern void sh_cfi_frame_initial_instructions (void);
#define tc_regname_to_dw2regnum sh_regname_to_dw2regnum
-extern int sh_regname_to_dw2regnum (const char *regname);
+extern int sh_regname_to_dw2regnum (char *regname);
/* All SH instructions are multiples of 16 bits. */
#define DWARF2_LINE_MIN_INSN_LENGTH 2
#define DWARF2_DEFAULT_RETURN_COLUMN 17
-#define DWARF2_CIE_DATA_ALIGNMENT -4
+#define DWARF2_CIE_DATA_ALIGNMENT (-4)
#endif /* OBJ_ELF */
diff --git a/gas/config/tc-sh64.c b/gas/config/tc-sh64.c
index 74330612e43a..a306c1b8ddf2 100644
--- a/gas/config/tc-sh64.c
+++ b/gas/config/tc-sh64.c
@@ -1,5 +1,6 @@
/* tc-sh64.c -- Assemble code for the SuperH SH SHcompact and SHmedia.
- Copyright 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation.
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation.
This file is part of GAS, the GNU Assembler.
@@ -25,7 +26,6 @@
#define HAVE_SH64
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "opcodes/sh64-opc.h"
@@ -1533,7 +1533,7 @@ shmedia_check_limits (offsetT *valp, bfd_reloc_code_real_type reloc,
case BFD_RELOC_SH_IMMU16:
if (val < 0 || val > (1 << 16) - 1)
- msg = _("invalid operand, not an 16-bit unsigned value: %d");
+ msg = _("invalid operand, not a 16-bit unsigned value: %d");
break;
case BFD_RELOC_SH_PT_16:
@@ -3035,8 +3035,6 @@ sh64_target_mach (void)
valueT
shmedia_md_pcrel_from_section (struct fix *fixP, segT sec ATTRIBUTE_UNUSED)
{
- know (fixP->fx_frag->fr_type == rs_machine_dependent);
-
/* Use the ISA for the instruction to decide which offset to use. We
can glean it from the fisup type. */
switch (fixP->fx_r_type)
diff --git a/gas/config/tc-sh64.h b/gas/config/tc-sh64.h
index 21f5d59f4c56..f31f7501b00f 100644
--- a/gas/config/tc-sh64.h
+++ b/gas/config/tc-sh64.h
@@ -1,5 +1,6 @@
/* This file is tc-sh64.h
- Copyright 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+ Copyright 2000, 2001, 2002, 2003, 2007
+ Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -79,7 +80,6 @@ extern int sh64_target_mach (void);
#undef TC_FORCE_RELOCATION_LOCAL
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
(!(FIX)->fx_pcrel \
- || (FIX)->fx_plt \
|| (FIX)->fx_r_type == BFD_RELOC_32_PLT_PCREL \
|| (FIX)->fx_r_type == BFD_RELOC_SH_PLT_LOW16 \
|| (FIX)->fx_r_type == BFD_RELOC_SH_PLT_MEDLOW16 \
diff --git a/gas/config/tc-sparc.c b/gas/config/tc-sparc.c
index 10a1411b5260..d4a409fbc345 100644
--- a/gas/config/tc-sparc.c
+++ b/gas/config/tc-sparc.c
@@ -1,6 +1,6 @@
/* tc-sparc.c -- Assemble for the SPARC
Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -19,8 +19,6 @@
to the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
-
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
@@ -339,7 +337,7 @@ sparc_target_format ()
#endif
#ifdef OBJ_ELF
- return sparc_arch_size == 64 ? "elf64-sparc" : "elf32-sparc";
+ return sparc_arch_size == 64 ? ELF64_TARGET_FORMAT : ELF_TARGET_FORMAT;
#endif
abort ();
@@ -547,12 +545,12 @@ md_parse_option (c, arg)
{
if (sparc_arch_size == 32)
{
- if (strcmp (*l, "elf32-sparc") == 0)
+ if (CONST_STRNEQ (*l, "elf32-sparc"))
break;
}
else
{
- if (strcmp (*l, "elf64-sparc") == 0)
+ if (CONST_STRNEQ (*l, "elf64-sparc"))
break;
}
}
@@ -1862,7 +1860,8 @@ sparc_ip (str, pinsn)
case '\0': /* End of args. */
if (s[0] == ',' && s[1] == '%')
{
- static const struct tls_ops {
+ static const struct tls_ops
+ {
/* The name as it appears in assembler. */
char *name;
/* strlen (name), precomputed for speed */
@@ -1871,7 +1870,9 @@ sparc_ip (str, pinsn)
int reloc;
/* 1 if call. */
int call;
- } tls_ops[] = {
+ }
+ tls_ops[] =
+ {
{ "tgd_add", 7, BFD_RELOC_SPARC_TLS_GD_ADD, 0 },
{ "tgd_call", 8, BFD_RELOC_SPARC_TLS_GD_CALL, 1 },
{ "tldm_add", 8, BFD_RELOC_SPARC_TLS_LDM_ADD, 0 },
@@ -1879,7 +1880,8 @@ sparc_ip (str, pinsn)
{ "tldo_add", 8, BFD_RELOC_SPARC_TLS_LDO_ADD, 0 },
{ "tie_ldx", 7, BFD_RELOC_SPARC_TLS_IE_LDX, 0 },
{ "tie_ld", 6, BFD_RELOC_SPARC_TLS_IE_LD, 0 },
- { "tie_add", 7, BFD_RELOC_SPARC_TLS_IE_ADD, 0 }
+ { "tie_add", 7, BFD_RELOC_SPARC_TLS_IE_ADD, 0 },
+ { NULL, 0, 0, 0 }
};
const struct tls_ops *o;
char *s1;
@@ -3311,9 +3313,9 @@ md_apply_fix (fixP, valP, segment)
break;
case BFD_RELOC_SPARC_WDISP16:
- /* FIXME: simplify. */
- if (((val > 0) && (val & ~0x3fffc))
- || ((val < 0) && (~(val - 1) & ~0x3fffc)))
+ if ((val & 3)
+ || val >= 0x1fffc
+ || val <= -(offsetT) 0x20008)
as_bad_where (fixP->fx_file, fixP->fx_line,
_("relocation overflow"));
/* FIXME: The +1 deserves a comment. */
@@ -3322,9 +3324,9 @@ md_apply_fix (fixP, valP, segment)
break;
case BFD_RELOC_SPARC_WDISP19:
- /* FIXME: simplify. */
- if (((val > 0) && (val & ~0x1ffffc))
- || ((val < 0) && (~(val - 1) & ~0x1ffffc)))
+ if ((val & 3)
+ || val >= 0xffffc
+ || val <= -(offsetT) 0x100008)
as_bad_where (fixP->fx_file, fixP->fx_line,
_("relocation overflow"));
/* FIXME: The +1 deserves a comment. */
@@ -3439,7 +3441,7 @@ md_apply_fix (fixP, valP, segment)
arelent **
tc_gen_reloc (section, fixp)
- asection *section ATTRIBUTE_UNUSED;
+ asection *section;
fixS *fixp;
{
static arelent *relocs[3];
@@ -3582,6 +3584,16 @@ tc_gen_reloc (section, fixp)
}
#endif /* defined (OBJ_ELF) || defined (OBJ_AOUT) */
+ /* Nothing is aligned in DWARF debugging sections. */
+ if (bfd_get_section_flags (stdoutput, section) & SEC_DEBUGGING)
+ switch (code)
+ {
+ case BFD_RELOC_16: code = BFD_RELOC_SPARC_UA16; break;
+ case BFD_RELOC_32: code = BFD_RELOC_SPARC_UA32; break;
+ case BFD_RELOC_64: code = BFD_RELOC_SPARC_UA64; break;
+ default: break;
+ }
+
if (code == BFD_RELOC_SPARC_OLO10)
reloc->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_LO10);
else
@@ -4602,7 +4614,7 @@ sparc_cfi_frame_initial_instructions ()
}
int
-sparc_regname_to_dw2regnum (const char *regname)
+sparc_regname_to_dw2regnum (char *regname)
{
char *p, *q;
diff --git a/gas/config/tc-sparc.h b/gas/config/tc-sparc.h
index 14da16ad627a..90c0e95d0f55 100644
--- a/gas/config/tc-sparc.h
+++ b/gas/config/tc-sparc.h
@@ -1,6 +1,7 @@
/* tc-sparc.h - Macros and type defines for the sparc.
Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002, 2003, 2005, 2007
+ Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -31,6 +32,19 @@ struct frag;
#define TARGET_ARCH bfd_arch_sparc
+#ifdef TE_FreeBSD
+#define ELF_TARGET_FORMAT "elf32-sparc-freebsd"
+#define ELF64_TARGET_FORMAT "elf64-sparc-freebsd"
+#endif
+
+#ifndef ELF_TARGET_FORMAT
+#define ELF_TARGET_FORMAT "elf32-sparc"
+#endif
+
+#ifndef ELF64_TARGET_FORMAT
+#define ELF64_TARGET_FORMAT "elf64-sparc"
+#endif
+
extern const char *sparc_target_format PARAMS ((void));
#define TARGET_FORMAT sparc_target_format ()
@@ -78,7 +92,6 @@ extern void sparc_handle_align PARAMS ((struct frag *));
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
(!(FIX)->fx_pcrel \
- || (FIX)->fx_plt \
|| (sparc_pic_code \
&& S_IS_EXTERNAL ((FIX)->fx_addsy)) \
|| TC_FORCE_RELOCATION (FIX))
@@ -171,7 +184,7 @@ extern void cons_fix_new_sparc
extern void sparc_cfi_frame_initial_instructions PARAMS ((void));
#define tc_regname_to_dw2regnum sparc_regname_to_dw2regnum
-extern int sparc_regname_to_dw2regnum PARAMS ((const char *regname));
+extern int sparc_regname_to_dw2regnum PARAMS ((char *regname));
#define tc_cfi_emit_pcrel_expr sparc_cfi_emit_pcrel_expr
extern void sparc_cfi_emit_pcrel_expr PARAMS ((expressionS *, unsigned int));
diff --git a/gas/config/tc-spu.c b/gas/config/tc-spu.c
new file mode 100644
index 000000000000..ef801df9a768
--- /dev/null
+++ b/gas/config/tc-spu.c
@@ -0,0 +1,1083 @@
+/* spu.c -- Assembler for the IBM Synergistic Processing Unit (SPU)
+
+ Copyright 2006, 2007 Free Software Foundation, Inc.
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to the Free
+ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+ 02110-1301, USA. */
+
+#include "as.h"
+#include "safe-ctype.h"
+#include "subsegs.h"
+#include "dwarf2dbg.h"
+
+const struct spu_opcode spu_opcodes[] = {
+#define APUOP(TAG,MACFORMAT,OPCODE,MNEMONIC,ASMFORMAT,DEP,PIPE) \
+ { MACFORMAT, (OPCODE) << (32-11), MNEMONIC, ASMFORMAT },
+#define APUOPFB(TAG,MACFORMAT,OPCODE,FB,MNEMONIC,ASMFORMAT,DEP,PIPE) \
+ { MACFORMAT, ((OPCODE) << (32-11)) | ((FB) << (32-18)), MNEMONIC, ASMFORMAT },
+#include "opcode/spu-insns.h"
+#undef APUOP
+#undef APUOPFB
+};
+
+static const int spu_num_opcodes =
+ sizeof (spu_opcodes) / sizeof (spu_opcodes[0]);
+
+#define MAX_RELOCS 2
+
+struct spu_insn
+{
+ unsigned int opcode;
+ expressionS exp[MAX_RELOCS];
+ int reloc_arg[MAX_RELOCS];
+ int flag[MAX_RELOCS];
+ enum spu_insns tag;
+};
+
+static const char *get_imm (const char *param, struct spu_insn *insn, int arg);
+static const char *get_reg (const char *param, struct spu_insn *insn, int arg,
+ int accept_expr);
+static int calcop (struct spu_opcode *format, const char *param,
+ struct spu_insn *insn);
+static void spu_cons (int);
+
+extern char *myname;
+static struct hash_control *op_hash = NULL;
+
+/* These bits should be turned off in the first address of every segment */
+int md_seg_align = 7;
+
+/* These chars start a comment anywhere in a source file (except inside
+ another comment */
+const char comment_chars[] = "#";
+
+/* These chars only start a comment at the beginning of a line. */
+const char line_comment_chars[] = "#";
+
+/* gods own line continuation char */
+const char line_separator_chars[] = ";";
+
+/* Chars that can be used to separate mant from exp in floating point nums */
+const char EXP_CHARS[] = "eE";
+
+/* Chars that mean this number is a floating point constant */
+/* as in 0f123.456 */
+/* or 0H1.234E-12 (see exp chars above) */
+const char FLT_CHARS[] = "dDfF";
+
+const pseudo_typeS md_pseudo_table[] =
+{
+ {"align", s_align_ptwo, 4},
+ {"bss", s_lcomm_bytes, 1},
+ {"def", s_set, 0},
+ {"dfloat", float_cons, 'd'},
+ {"ffloat", float_cons, 'f'},
+ {"global", s_globl, 0},
+ {"half", cons, 2},
+ {"int", spu_cons, 4},
+ {"long", spu_cons, 4},
+ {"quad", spu_cons, 8},
+ {"string", stringer, 1},
+ {"word", spu_cons, 4},
+ /* Force set to be treated as an instruction. */
+ {"set", NULL, 0},
+ {".set", s_set, 0},
+ /* Likewise for eqv. */
+ {"eqv", NULL, 0},
+ {".eqv", s_set, -1},
+ {"file", (void (*) PARAMS ((int))) dwarf2_directive_file, 0 },
+ {"loc", dwarf2_directive_loc, 0},
+ {0,0,0}
+};
+
+void
+md_begin (void)
+{
+ const char *retval = NULL;
+ int i;
+
+ /* initialize hash table */
+
+ op_hash = hash_new ();
+
+ /* loop until you see the end of the list */
+
+ for (i = 0; i < spu_num_opcodes; i++)
+ {
+ /* hash each mnemonic and record its position */
+
+ retval = hash_insert (op_hash, spu_opcodes[i].mnemonic, (PTR)&spu_opcodes[i]);
+
+ if (retval != NULL && strcmp (retval, "exists") != 0)
+ as_fatal (_("Can't hash instruction '%s':%s"),
+ spu_opcodes[i].mnemonic, retval);
+ }
+}
+
+const char *md_shortopts = "";
+struct option md_longopts[] = {
+#define OPTION_APUASM (OPTION_MD_BASE)
+ {"apuasm", no_argument, NULL, OPTION_APUASM},
+#define OPTION_DD2 (OPTION_MD_BASE+1)
+ {"mdd2.0", no_argument, NULL, OPTION_DD2},
+#define OPTION_DD1 (OPTION_MD_BASE+2)
+ {"mdd1.0", no_argument, NULL, OPTION_DD1},
+#define OPTION_DD3 (OPTION_MD_BASE+3)
+ {"mdd3.0", no_argument, NULL, OPTION_DD3},
+ { NULL, no_argument, NULL, 0 }
+};
+size_t md_longopts_size = sizeof (md_longopts);
+
+/* When set (by -apuasm) our assembler emulates the behaviour of apuasm.
+ * e.g. don't add bias to float conversion and don't right shift
+ * immediate values. */
+static int emulate_apuasm;
+
+/* Use the dd2.0 instructions set. The only differences are some new
+ * register names and the orx insn */
+static int use_dd2 = 1;
+
+int
+md_parse_option (int c, char *arg ATTRIBUTE_UNUSED)
+{
+ switch (c)
+ {
+ case OPTION_APUASM:
+ emulate_apuasm = 1;
+ break;
+ case OPTION_DD3:
+ use_dd2 = 1;
+ break;
+ case OPTION_DD2:
+ use_dd2 = 1;
+ break;
+ case OPTION_DD1:
+ use_dd2 = 0;
+ break;
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+void
+md_show_usage (FILE *stream)
+{
+ fputs (_("\
+SPU options:\n\
+ --apuasm emulate behaviour of apuasm\n"),
+ stream);
+}
+
+
+struct arg_encode {
+ int size;
+ int pos;
+ int rshift;
+ int lo, hi;
+ int wlo, whi;
+ bfd_reloc_code_real_type reloc;
+};
+
+static struct arg_encode arg_encode[A_MAX] = {
+ { 7, 0, 0, 0, 127, 0, -1, 0 }, /* A_T */
+ { 7, 7, 0, 0, 127, 0, -1, 0 }, /* A_A */
+ { 7, 14, 0, 0, 127, 0, -1, 0 }, /* A_B */
+ { 7, 21, 0, 0, 127, 0, -1, 0 }, /* A_C */
+ { 7, 7, 0, 0, 127, 0, -1, 0 }, /* A_S */
+ { 7, 7, 0, 0, 127, 0, -1, 0 }, /* A_H */
+ { 0, 0, 0, 0, -1, 0, -1, 0 }, /* A_P */
+ { 7, 14, 0, 0, -1, 0, -1, BFD_RELOC_SPU_IMM7 }, /* A_S3 */
+ { 7, 14, 0, -32, 31, -31, 0, BFD_RELOC_SPU_IMM7 }, /* A_S6 */
+ { 7, 14, 0, 0, -1, 0, -1, BFD_RELOC_SPU_IMM7 }, /* A_S7N */
+ { 7, 14, 0, -64, 63, -63, 0, BFD_RELOC_SPU_IMM7 }, /* A_S7 */
+ { 8, 14, 0, 0, 127, 0, -1, BFD_RELOC_SPU_IMM8 }, /* A_U7A */
+ { 8, 14, 0, 0, 127, 0, -1, BFD_RELOC_SPU_IMM8 }, /* A_U7B */
+ { 10, 14, 0, -512, 511, -128, 255, BFD_RELOC_SPU_IMM10 }, /* A_S10B */
+ { 10, 14, 0, -512, 511, 0, -1, BFD_RELOC_SPU_IMM10 }, /* A_S10 */
+ { 2, 23, 9, -1024, 1023, 0, -1, BFD_RELOC_SPU_PCREL9a }, /* A_S11 */
+ { 2, 14, 9, -1024, 1023, 0, -1, BFD_RELOC_SPU_PCREL9b }, /* A_S11I */
+ { 10, 14, 4, -8192, 8191, 0, -1, BFD_RELOC_SPU_IMM10W }, /* A_S14 */
+ { 16, 7, 0, -32768, 32767, 0, -1, BFD_RELOC_SPU_IMM16 }, /* A_S16 */
+ { 16, 7, 2, -131072, 262143, 0, -1, BFD_RELOC_SPU_IMM16W }, /* A_S18 */
+ { 16, 7, 2, -262144, 262143, 0, -1, BFD_RELOC_SPU_PCREL16 }, /* A_R18 */
+ { 7, 14, 0, 0, -1, 0, -1, BFD_RELOC_SPU_IMM7 }, /* A_U3 */
+ { 7, 14, 0, 0, 127, 0, 31, BFD_RELOC_SPU_IMM7 }, /* A_U5 */
+ { 7, 14, 0, 0, 127, 0, 63, BFD_RELOC_SPU_IMM7 }, /* A_U6 */
+ { 7, 14, 0, 0, -1, 0, -1, BFD_RELOC_SPU_IMM7 }, /* A_U7 */
+ { 14, 0, 0, 0, 16383, 0, -1, 0 }, /* A_U14 */
+ { 16, 7, 0, -32768, 65535, 0, -1, BFD_RELOC_SPU_IMM16 }, /* A_X16 */
+ { 18, 7, 0, 0, 262143, 0, -1, BFD_RELOC_SPU_IMM18 }, /* A_U18 */
+};
+
+/* Some flags for handling errors. This is very hackish and added after
+ * the fact. */
+static int syntax_error_arg;
+static const char *syntax_error_param;
+static int syntax_reg;
+
+static char *
+insn_fmt_string (struct spu_opcode *format)
+{
+ static char buf[64];
+ int len = 0;
+ int i;
+
+ len += sprintf (&buf[len], "%s\t", format->mnemonic);
+ for (i = 1; i <= format->arg[0]; i++)
+ {
+ int arg = format->arg[i];
+ char *exp;
+ if (i > 1 && arg != A_P && format->arg[i-1] != A_P)
+ buf[len++] = ',';
+ if (arg == A_P)
+ exp = "(";
+ else if (arg < A_P)
+ exp = i == syntax_error_arg ? "REG" : "reg";
+ else
+ exp = i == syntax_error_arg ? "IMM" : "imm";
+ len += sprintf (&buf[len], "%s", exp);
+ if (i > 1 && format->arg[i-1] == A_P)
+ buf[len++] = ')';
+ }
+ buf[len] = 0;
+ return buf;
+}
+
+void
+md_assemble (char *op)
+{
+ char *param, *thisfrag;
+ char c;
+ struct spu_opcode *format;
+ struct spu_insn insn;
+ int i;
+
+ assert (op);
+
+ /* skip over instruction to find parameters */
+
+ for (param = op; *param != 0 && !ISSPACE (*param); param++)
+ ;
+ c = *param;
+ *param = 0;
+
+ if (c != 0 && c != '\n')
+ param++;
+
+ /* try to find the instruction in the hash table */
+
+ if ((format = (struct spu_opcode *) hash_find (op_hash, op)) == NULL)
+ {
+ as_bad (_("Invalid mnemonic '%s'"), op);
+ return;
+ }
+
+ if (!use_dd2 && strcmp (format->mnemonic, "orx") == 0)
+ {
+ as_bad (_("'%s' is only available in DD2.0 or higher."), op);
+ return;
+ }
+
+ while (1)
+ {
+ /* try parsing this instruction into insn */
+ for (i = 0; i < MAX_RELOCS; i++)
+ {
+ insn.exp[i].X_add_symbol = 0;
+ insn.exp[i].X_op_symbol = 0;
+ insn.exp[i].X_add_number = 0;
+ insn.exp[i].X_op = O_illegal;
+ insn.reloc_arg[i] = -1;
+ insn.flag[i] = 0;
+ }
+ insn.opcode = format->opcode;
+ insn.tag = (enum spu_insns) (format - spu_opcodes);
+
+ syntax_error_arg = 0;
+ syntax_error_param = 0;
+ syntax_reg = 0;
+ if (calcop (format, param, &insn))
+ break;
+
+ /* if it doesn't parse try the next instruction */
+ if (!strcmp (format[0].mnemonic, format[1].mnemonic))
+ format++;
+ else
+ {
+ int parg = format[0].arg[syntax_error_arg-1];
+
+ as_fatal (_("Error in argument %d. Expecting: \"%s\""),
+ syntax_error_arg - (parg == A_P),
+ insn_fmt_string (format));
+ return;
+ }
+ }
+
+ if ((syntax_reg & 4)
+ && ! (insn.tag == M_RDCH
+ || insn.tag == M_RCHCNT
+ || insn.tag == M_WRCH))
+ as_warn (_("Mixing register syntax, with and without '$'."));
+ if (syntax_error_param)
+ {
+ const char *d = syntax_error_param;
+ while (*d != '$')
+ d--;
+ as_warn (_("Treating '%-*s' as a symbol."), (int)(syntax_error_param - d), d);
+ }
+
+ /* grow the current frag and plop in the opcode */
+
+ thisfrag = frag_more (4);
+ md_number_to_chars (thisfrag, insn.opcode, 4);
+
+ /* if this instruction requires labels mark it for later */
+
+ for (i = 0; i < MAX_RELOCS; i++)
+ if (insn.reloc_arg[i] >= 0)
+ {
+ fixS *fixP;
+ bfd_reloc_code_real_type reloc = arg_encode[insn.reloc_arg[i]].reloc;
+ int pcrel = 0;
+
+ if (reloc == BFD_RELOC_SPU_PCREL9a
+ || reloc == BFD_RELOC_SPU_PCREL9b
+ || reloc == BFD_RELOC_SPU_PCREL16)
+ pcrel = 1;
+ if (insn.flag[i] == 1)
+ reloc = BFD_RELOC_SPU_HI16;
+ else if (insn.flag[i] == 2)
+ reloc = BFD_RELOC_SPU_LO16;
+ fixP = fix_new_exp (frag_now,
+ thisfrag - frag_now->fr_literal,
+ 4,
+ &insn.exp[i],
+ pcrel,
+ reloc);
+ fixP->tc_fix_data.arg_format = insn.reloc_arg[i];
+ fixP->tc_fix_data.insn_tag = insn.tag;
+ }
+ dwarf2_emit_insn (4);
+}
+
+static int
+calcop (struct spu_opcode *format, const char *param, struct spu_insn *insn)
+{
+ int i;
+ int paren = 0;
+ int arg;
+
+ for (i = 1; i <= format->arg[0]; i++)
+ {
+ arg = format->arg[i];
+ syntax_error_arg = i;
+
+ while (ISSPACE (*param))
+ param++;
+ if (*param == 0 || *param == ',')
+ return 0;
+ if (arg < A_P)
+ param = get_reg (param, insn, arg, 1);
+ else if (arg > A_P)
+ param = get_imm (param, insn, arg);
+ else if (arg == A_P)
+ {
+ paren++;
+ if ('(' != *param++)
+ return 0;
+ }
+
+ if (!param)
+ return 0;
+
+ while (ISSPACE (*param))
+ param++;
+
+ if (arg != A_P && paren)
+ {
+ paren--;
+ if (')' != *param++)
+ return 0;
+ }
+ else if (i < format->arg[0]
+ && format->arg[i] != A_P
+ && format->arg[i+1] != A_P)
+ {
+ if (',' != *param++)
+ {
+ syntax_error_arg++;
+ return 0;
+ }
+ }
+ }
+ while (ISSPACE (*param))
+ param++;
+ return !paren && (*param == 0 || *param == '\n');
+}
+
+struct reg_name {
+ unsigned int regno;
+ unsigned int length;
+ char name[32];
+};
+
+#define REG_NAME(NO,NM) { NO, sizeof (NM) - 1, NM }
+
+static struct reg_name reg_name[] = {
+ REG_NAME (0, "lr"), /* link register */
+ REG_NAME (1, "sp"), /* stack pointer */
+ REG_NAME (0, "rp"), /* link register */
+ REG_NAME (127, "fp"), /* frame pointer */
+};
+
+static struct reg_name sp_reg_name[] = {
+};
+
+static struct reg_name ch_reg_name[] = {
+ REG_NAME ( 0, "SPU_RdEventStat"),
+ REG_NAME ( 1, "SPU_WrEventMask"),
+ REG_NAME ( 2, "SPU_WrEventAck"),
+ REG_NAME ( 3, "SPU_RdSigNotify1"),
+ REG_NAME ( 4, "SPU_RdSigNotify2"),
+ REG_NAME ( 7, "SPU_WrDec"),
+ REG_NAME ( 8, "SPU_RdDec"),
+ REG_NAME ( 11, "SPU_RdEventMask"), /* DD2.0 only */
+ REG_NAME ( 13, "SPU_RdMachStat"),
+ REG_NAME ( 14, "SPU_WrSRR0"),
+ REG_NAME ( 15, "SPU_RdSRR0"),
+ REG_NAME ( 28, "SPU_WrOutMbox"),
+ REG_NAME ( 29, "SPU_RdInMbox"),
+ REG_NAME ( 30, "SPU_WrOutIntrMbox"),
+ REG_NAME ( 9, "MFC_WrMSSyncReq"),
+ REG_NAME ( 12, "MFC_RdTagMask"), /* DD2.0 only */
+ REG_NAME ( 16, "MFC_LSA"),
+ REG_NAME ( 17, "MFC_EAH"),
+ REG_NAME ( 18, "MFC_EAL"),
+ REG_NAME ( 19, "MFC_Size"),
+ REG_NAME ( 20, "MFC_TagID"),
+ REG_NAME ( 21, "MFC_Cmd"),
+ REG_NAME ( 22, "MFC_WrTagMask"),
+ REG_NAME ( 23, "MFC_WrTagUpdate"),
+ REG_NAME ( 24, "MFC_RdTagStat"),
+ REG_NAME ( 25, "MFC_RdListStallStat"),
+ REG_NAME ( 26, "MFC_WrListStallAck"),
+ REG_NAME ( 27, "MFC_RdAtomicStat"),
+};
+#undef REG_NAME
+
+static const char *
+get_reg (const char *param, struct spu_insn *insn, int arg, int accept_expr)
+{
+ unsigned regno;
+ int saw_prefix = 0;
+
+ if (*param == '$')
+ {
+ saw_prefix = 1;
+ param++;
+ }
+
+ if (arg == A_H) /* Channel */
+ {
+ if ((param[0] == 'c' || param[0] == 'C')
+ && (param[1] == 'h' || param[1] == 'H')
+ && ISDIGIT (param[2]))
+ param += 2;
+ }
+ else if (arg == A_S) /* Special purpose register */
+ {
+ if ((param[0] == 's' || param[0] == 'S')
+ && (param[1] == 'p' || param[1] == 'P')
+ && ISDIGIT (param[2]))
+ param += 2;
+ }
+
+ if (ISDIGIT (*param))
+ {
+ regno = 0;
+ while (ISDIGIT (*param))
+ regno = regno * 10 + *param++ - '0';
+ }
+ else
+ {
+ struct reg_name *rn;
+ unsigned int i, n, l = 0;
+
+ if (arg == A_H) /* Channel */
+ {
+ rn = ch_reg_name;
+ n = sizeof (ch_reg_name) / sizeof (*ch_reg_name);
+ }
+ else if (arg == A_S) /* Special purpose register */
+ {
+ rn = sp_reg_name;
+ n = sizeof (sp_reg_name) / sizeof (*sp_reg_name);
+ }
+ else
+ {
+ rn = reg_name;
+ n = sizeof (reg_name) / sizeof (*reg_name);
+ }
+ regno = 128;
+ for (i = 0; i < n; i++)
+ if (rn[i].length > l
+ && 0 == strncasecmp (param, rn[i].name, rn[i].length))
+ {
+ l = rn[i].length;
+ regno = rn[i].regno;
+ }
+ param += l;
+ }
+
+ if (!use_dd2
+ && arg == A_H)
+ {
+ if (regno == 11)
+ as_bad (_("'SPU_RdEventMask' (channel 11) is only available in DD2.0 or higher."));
+ else if (regno == 12)
+ as_bad (_("'MFC_RdTagMask' (channel 12) is only available in DD2.0 or higher."));
+ }
+
+ if (regno < 128)
+ {
+ insn->opcode |= regno << arg_encode[arg].pos;
+ if ((!saw_prefix && syntax_reg == 1)
+ || (saw_prefix && syntax_reg == 2))
+ syntax_reg |= 4;
+ syntax_reg |= saw_prefix ? 1 : 2;
+ return param;
+ }
+
+ if (accept_expr)
+ {
+ char *save_ptr;
+ expressionS ex;
+ save_ptr = input_line_pointer;
+ input_line_pointer = (char *)param;
+ expression (&ex);
+ param = input_line_pointer;
+ input_line_pointer = save_ptr;
+ if (ex.X_op == O_register || ex.X_op == O_constant)
+ {
+ insn->opcode |= ex.X_add_number << arg_encode[arg].pos;
+ return param;
+ }
+ }
+ return 0;
+}
+
+static const char *
+get_imm (const char *param, struct spu_insn *insn, int arg)
+{
+ int val;
+ char *save_ptr;
+ int low = 0, high = 0;
+ int reloc_i = insn->reloc_arg[0] >= 0 ? 1 : 0;
+
+ if (strncasecmp (param, "%lo(", 4) == 0)
+ {
+ param += 3;
+ low = 1;
+ as_warn (_("Using old style, %%lo(expr), please change to PPC style, expr@l."));
+ }
+ else if (strncasecmp (param, "%hi(", 4) == 0)
+ {
+ param += 3;
+ high = 1;
+ as_warn (_("Using old style, %%hi(expr), please change to PPC style, expr@h."));
+ }
+ else if (strncasecmp (param, "%pic(", 5) == 0)
+ {
+ /* Currently we expect %pic(expr) == expr, so do nothing here.
+ i.e. for code loaded at address 0 $toc will be 0. */
+ param += 4;
+ }
+
+ if (*param == '$')
+ {
+ /* Symbols can start with $, but if this symbol matches a register
+ name, it's probably a mistake. The only way to avoid this
+ warning is to rename the symbol. */
+ struct spu_insn tmp_insn;
+ const char *np = get_reg (param, &tmp_insn, arg, 0);
+
+ if (np)
+ syntax_error_param = np;
+ }
+
+ save_ptr = input_line_pointer;
+ input_line_pointer = (char *) param;
+ expression (&insn->exp[reloc_i]);
+ param = input_line_pointer;
+ input_line_pointer = save_ptr;
+
+ /* Similar to ppc_elf_suffix in tc-ppc.c. We have so few cases to
+ handle we do it inlined here. */
+ if (param[0] == '@' && !ISALNUM (param[2]) && param[2] != '@')
+ {
+ if (param[1] == 'h' || param[1] == 'H')
+ {
+ high = 1;
+ param += 2;
+ }
+ else if (param[1] == 'l' || param[1] == 'L')
+ {
+ low = 1;
+ param += 2;
+ }
+ }
+
+ if (insn->exp[reloc_i].X_op == O_constant)
+ {
+ val = insn->exp[reloc_i].X_add_number;
+
+ if (emulate_apuasm)
+ {
+ /* Convert the value to a format we expect. */
+ val <<= arg_encode[arg].rshift;
+ if (arg == A_U7A)
+ val = 173 - val;
+ else if (arg == A_U7B)
+ val = 155 - val;
+ }
+
+ if (high)
+ val = val >> 16;
+ else if (low)
+ val = val & 0xffff;
+
+ /* Warn about out of range expressions. */
+ {
+ int hi = arg_encode[arg].hi;
+ int lo = arg_encode[arg].lo;
+ int whi = arg_encode[arg].whi;
+ int wlo = arg_encode[arg].wlo;
+
+ if (hi > lo && (val < lo || val > hi))
+ as_fatal (_("Constant expression %d out of range, [%d, %d]."),
+ val, lo, hi);
+ else if (whi > wlo && (val < wlo || val > whi))
+ as_warn (_("Constant expression %d out of range, [%d, %d]."),
+ val, wlo, whi);
+ }
+
+ if (arg == A_U7A)
+ val = 173 - val;
+ else if (arg == A_U7B)
+ val = 155 - val;
+
+ /* Branch hints have a split encoding. Do the bottom part. */
+ if (arg == A_S11 || arg == A_S11I)
+ insn->opcode |= ((val >> 2) & 0x7f);
+
+ insn->opcode |= (((val >> arg_encode[arg].rshift)
+ & ((1 << arg_encode[arg].size) - 1))
+ << arg_encode[arg].pos);
+ insn->reloc_arg[reloc_i] = -1;
+ insn->flag[reloc_i] = 0;
+ }
+ else
+ {
+ insn->reloc_arg[reloc_i] = arg;
+ if (high)
+ insn->flag[reloc_i] = 1;
+ else if (low)
+ insn->flag[reloc_i] = 2;
+ }
+
+ return param;
+}
+
+#define MAX_LITTLENUMS 6
+
+/* Turn a string in input_line_pointer into a floating point constant of type
+ type, and store the appropriate bytes in *litP. The number of LITTLENUMS
+ emitted is stored in *sizeP . An error message is returned, or NULL on OK.
+ */
+char *
+md_atof (int type, char *litP, int *sizeP)
+{
+ int prec;
+ LITTLENUM_TYPE words[MAX_LITTLENUMS];
+ LITTLENUM_TYPE *wordP;
+ char *t;
+
+ switch (type)
+ {
+ case 'f':
+ case 'F':
+ case 's':
+ case 'S':
+ prec = 2;
+ break;
+
+ case 'd':
+ case 'D':
+ case 'r':
+ case 'R':
+ prec = 4;
+ break;
+
+ case 'x':
+ case 'X':
+ prec = 6;
+ break;
+
+ case 'p':
+ case 'P':
+ prec = 6;
+ break;
+
+ default:
+ *sizeP = 0;
+ return _("Bad call to MD_ATOF()");
+ }
+ t = atof_ieee (input_line_pointer, type, words);
+ if (t)
+ input_line_pointer = t;
+
+ *sizeP = prec * sizeof (LITTLENUM_TYPE);
+ for (wordP = words; prec--;)
+ {
+ md_number_to_chars (litP, (long) (*wordP++), sizeof (LITTLENUM_TYPE));
+ litP += sizeof (LITTLENUM_TYPE);
+ }
+ return 0;
+}
+
+#ifndef WORKING_DOT_WORD
+int md_short_jump_size = 4;
+
+void
+md_create_short_jump (char *ptr,
+ addressT from_addr ATTRIBUTE_UNUSED,
+ addressT to_addr ATTRIBUTE_UNUSED,
+ fragS *frag,
+ symbolS *to_symbol)
+{
+ ptr[0] = (char) 0xc0;
+ ptr[1] = 0x00;
+ ptr[2] = 0x00;
+ ptr[3] = 0x00;
+ fix_new (frag,
+ ptr - frag->fr_literal,
+ 4,
+ to_symbol,
+ (offsetT) 0,
+ 0,
+ BFD_RELOC_SPU_PCREL16);
+}
+
+int md_long_jump_size = 4;
+
+void
+md_create_long_jump (char *ptr,
+ addressT from_addr ATTRIBUTE_UNUSED,
+ addressT to_addr ATTRIBUTE_UNUSED,
+ fragS *frag,
+ symbolS *to_symbol)
+{
+ ptr[0] = (char) 0xc0;
+ ptr[1] = 0x00;
+ ptr[2] = 0x00;
+ ptr[3] = 0x00;
+ fix_new (frag,
+ ptr - frag->fr_literal,
+ 4,
+ to_symbol,
+ (offsetT) 0,
+ 0,
+ BFD_RELOC_SPU_PCREL16);
+}
+#endif
+
+/* Support @ppu on symbols referenced in .int/.long/.word/.quad. */
+static void
+spu_cons (int nbytes)
+{
+ expressionS exp;
+
+ if (is_it_end_of_statement ())
+ {
+ demand_empty_rest_of_line ();
+ return;
+ }
+
+ do
+ {
+ deferred_expression (&exp);
+ if ((exp.X_op == O_symbol
+ || exp.X_op == O_constant)
+ && strncasecmp (input_line_pointer, "@ppu", 4) == 0)
+ {
+ char *p = frag_more (nbytes);
+ enum bfd_reloc_code_real reloc;
+
+ /* Check for identifier@suffix+constant. */
+ input_line_pointer += 4;
+ if (*input_line_pointer == '-' || *input_line_pointer == '+')
+ {
+ expressionS new_exp;
+
+ expression (&new_exp);
+ if (new_exp.X_op == O_constant)
+ exp.X_add_number += new_exp.X_add_number;
+ }
+
+ reloc = nbytes == 4 ? BFD_RELOC_SPU_PPU32 : BFD_RELOC_SPU_PPU64;
+ fix_new_exp (frag_now, p - frag_now->fr_literal, nbytes,
+ &exp, 0, reloc);
+ }
+ else
+ emit_expr (&exp, nbytes);
+ }
+ while (*input_line_pointer++ == ',');
+
+ /* Put terminator back into stream. */
+ input_line_pointer--;
+ demand_empty_rest_of_line ();
+}
+
+int
+md_estimate_size_before_relax (fragS *fragP ATTRIBUTE_UNUSED,
+ segT segment_type ATTRIBUTE_UNUSED)
+{
+ as_fatal (_("Relaxation should never occur"));
+ return -1;
+}
+
+/* If while processing a fixup, a reloc really needs to be created,
+ then it is done here. */
+
+arelent *
+tc_gen_reloc (asection *seg ATTRIBUTE_UNUSED, fixS *fixp)
+{
+ arelent *reloc;
+ reloc = (arelent *) xmalloc (sizeof (arelent));
+ reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
+ if (fixp->fx_addsy)
+ *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
+ else if (fixp->fx_subsy)
+ *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_subsy);
+ else
+ abort ();
+ reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
+ reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);
+ if (reloc->howto == (reloc_howto_type *) NULL)
+ {
+ as_bad_where (fixp->fx_file, fixp->fx_line,
+ _("reloc %d not supported by object file format"),
+ (int) fixp->fx_r_type);
+ return NULL;
+ }
+ reloc->addend = fixp->fx_addnumber;
+ return reloc;
+}
+
+/* Round up a section's size to the appropriate boundary. */
+
+valueT
+md_section_align (segT seg, valueT size)
+{
+ int align = bfd_get_section_alignment (stdoutput, seg);
+ valueT mask = ((valueT) 1 << align) - 1;
+
+ return (size + mask) & ~mask;
+}
+
+/* Where a PC relative offset is calculated from. On the spu they
+ are calculated from the beginning of the branch instruction. */
+
+long
+md_pcrel_from (fixS *fixp)
+{
+ return fixp->fx_frag->fr_address + fixp->fx_where;
+}
+
+/* Fill in rs_align_code fragments. */
+
+void
+spu_handle_align (fragS *fragp)
+{
+ static const unsigned char nop_pattern[8] = {
+ 0x40, 0x20, 0x00, 0x00, /* even nop */
+ 0x00, 0x20, 0x00, 0x00, /* odd nop */
+ };
+
+ int bytes;
+ char *p;
+
+ if (fragp->fr_type != rs_align_code)
+ return;
+
+ bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix;
+ p = fragp->fr_literal + fragp->fr_fix;
+
+ if (bytes & 3)
+ {
+ int fix = bytes & 3;
+ memset (p, 0, fix);
+ p += fix;
+ bytes -= fix;
+ fragp->fr_fix += fix;
+ }
+ if (bytes & 4)
+ {
+ memcpy (p, &nop_pattern[4], 4);
+ p += 4;
+ bytes -= 4;
+ fragp->fr_fix += 4;
+ }
+
+ memcpy (p, nop_pattern, 8);
+ fragp->fr_var = 8;
+}
+
+void
+md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
+{
+ unsigned int res;
+ valueT val = *valP;
+ char *place = fixP->fx_where + fixP->fx_frag->fr_literal;
+
+ if (fixP->fx_subsy != (symbolS *) NULL)
+ {
+ /* We can't actually support subtracting a symbol. */
+ as_bad_where (fixP->fx_file, fixP->fx_line, _("expression too complex"));
+ }
+
+ if (fixP->fx_addsy != NULL)
+ {
+ if (fixP->fx_pcrel)
+ {
+ /* Hack around bfd_install_relocation brain damage. */
+ val += fixP->fx_frag->fr_address + fixP->fx_where;
+
+ switch (fixP->fx_r_type)
+ {
+ case BFD_RELOC_32:
+ fixP->fx_r_type = BFD_RELOC_32_PCREL;
+ break;
+
+ case BFD_RELOC_SPU_PCREL16:
+ case BFD_RELOC_SPU_PCREL9a:
+ case BFD_RELOC_SPU_PCREL9b:
+ case BFD_RELOC_32_PCREL:
+ break;
+
+ default:
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("expression too complex"));
+ break;
+ }
+ }
+ }
+
+ fixP->fx_addnumber = val;
+
+ if (fixP->fx_r_type == BFD_RELOC_SPU_PPU32
+ || fixP->fx_r_type == BFD_RELOC_SPU_PPU64)
+ return;
+
+ if (fixP->fx_addsy == NULL && fixP->fx_pcrel == 0)
+ {
+ fixP->fx_done = 1;
+ res = 0;
+ if (fixP->tc_fix_data.arg_format > A_P)
+ {
+ int hi = arg_encode[fixP->tc_fix_data.arg_format].hi;
+ int lo = arg_encode[fixP->tc_fix_data.arg_format].lo;
+ if (hi > lo && ((offsetT) val < lo || (offsetT) val > hi))
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ "Relocation doesn't fit. (relocation value = 0x%lx)",
+ (long) val);
+ }
+
+ switch (fixP->fx_r_type)
+ {
+ case BFD_RELOC_8:
+ md_number_to_chars (place, val, 1);
+ return;
+
+ case BFD_RELOC_16:
+ md_number_to_chars (place, val, 2);
+ return;
+
+ case BFD_RELOC_32:
+ md_number_to_chars (place, val, 4);
+ return;
+
+ case BFD_RELOC_64:
+ md_number_to_chars (place, val, 8);
+ return;
+
+ case BFD_RELOC_SPU_IMM7:
+ res = (val & 0x7f) << 14;
+ break;
+
+ case BFD_RELOC_SPU_IMM8:
+ res = (val & 0xff) << 14;
+ break;
+
+ case BFD_RELOC_SPU_IMM10:
+ res = (val & 0x3ff) << 14;
+ break;
+
+ case BFD_RELOC_SPU_IMM10W:
+ res = (val & 0x3ff0) << 10;
+ break;
+
+ case BFD_RELOC_SPU_IMM16:
+ res = (val & 0xffff) << 7;
+ break;
+
+ case BFD_RELOC_SPU_IMM16W:
+ res = (val & 0x3fffc) << 5;
+ break;
+
+ case BFD_RELOC_SPU_IMM18:
+ res = (val & 0x3ffff) << 7;
+ break;
+
+ case BFD_RELOC_SPU_PCREL9a:
+ res = ((val & 0x1fc) >> 2) | ((val & 0x600) << 14);
+ break;
+
+ case BFD_RELOC_SPU_PCREL9b:
+ res = ((val & 0x1fc) >> 2) | ((val & 0x600) << 5);
+ break;
+
+ case BFD_RELOC_SPU_PCREL16:
+ res = (val & 0x3fffc) << 5;
+ break;
+
+ default:
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("reloc %d not supported by object file format"),
+ (int) fixP->fx_r_type);
+ }
+
+ if (res != 0)
+ {
+ place[0] |= (res >> 24) & 0xff;
+ place[1] |= (res >> 16) & 0xff;
+ place[2] |= (res >> 8) & 0xff;
+ place[3] |= (res) & 0xff;
+ }
+ }
+}
diff --git a/gas/config/tc-spu.h b/gas/config/tc-spu.h
new file mode 100644
index 000000000000..4c6c2d4566ef
--- /dev/null
+++ b/gas/config/tc-spu.h
@@ -0,0 +1,107 @@
+/* spu.h -- Assembler for spu
+
+ Copyright 2006, 2007 Free Software Foundation, Inc.
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to the Free
+ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+ 02110-1301, USA. */
+
+#ifndef TC_SPU
+#define TC_SPU 1
+
+#include "opcode/spu.h"
+
+#define TARGET_FORMAT "elf32-spu"
+#define TARGET_ARCH bfd_arch_spu
+#define TARGET_NAME "elf32-spu"
+
+#define TARGET_BYTES_BIG_ENDIAN 1
+
+struct tc_fix_info {
+ unsigned short arg_format;
+ unsigned short insn_tag;
+};
+
+/* fixS will have a member named tc_fix_data of this type. */
+#define TC_FIX_TYPE struct tc_fix_info
+#define TC_INIT_FIX_DATA(FIXP) \
+ do \
+ { \
+ (FIXP)->tc_fix_data.arg_format = 0; \
+ (FIXP)->tc_fix_data.insn_tag = 0; \
+ } \
+ while (0)
+
+/* Don't reduce function symbols to section symbols, and don't adjust
+ references to PPU symbols. */
+#define tc_fix_adjustable(FIXP) \
+ (!(S_IS_FUNCTION ((FIXP)->fx_addsy) \
+ || (FIXP)->fx_r_type == BFD_RELOC_SPU_PPU32 \
+ || (FIXP)->fx_r_type == BFD_RELOC_SPU_PPU64))
+
+/* Keep relocs on calls. Branches to function symbols are tail or
+ sibling calls. */
+#define TC_FORCE_RELOCATION(FIXP) \
+ ((FIXP)->tc_fix_data.insn_tag == M_BRSL \
+ || (FIXP)->tc_fix_data.insn_tag == M_BRASL \
+ || (((FIXP)->tc_fix_data.insn_tag == M_BR \
+ || (FIXP)->tc_fix_data.insn_tag == M_BRA) \
+ && (FIXP)->fx_addsy != NULL \
+ && S_IS_FUNCTION ((FIXP)->fx_addsy)) \
+ || (FIXP)->fx_r_type == BFD_RELOC_SPU_PPU32 \
+ || (FIXP)->fx_r_type == BFD_RELOC_SPU_PPU64 \
+ || generic_force_reloc (FIXP))
+
+/* Values passed to md_apply_fix don't include symbol values. */
+#define MD_APPLY_SYM_VALUE(FIX) 0
+
+/* The spu uses pseudo-ops with no leading period. */
+#define NO_PSEUDO_DOT 1
+
+/* Don't warn on word overflow; it happens on %hi relocs. */
+#undef WARN_SIGNED_OVERFLOW_WORD
+
+#define DIFF_EXPR_OK
+
+#define WORKING_DOT_WORD
+
+#define md_number_to_chars number_to_chars_bigendian
+
+#define md_convert_frag(b,s,f) {as_fatal (_("spu convert_frag\n"));}
+
+/* We don't need to do anything special for undefined symbols. */
+#define md_undefined_symbol(s) 0
+
+extern symbolS *section_symbol (asection *);
+#define md_operand(e) \
+ do { \
+ if (strncasecmp (input_line_pointer, "@ppu", 4) == 0) \
+ { \
+ e->X_op = O_symbol; \
+ if (abs_section_sym == NULL) \
+ abs_section_sym = section_symbol (absolute_section); \
+ e->X_add_symbol = abs_section_sym; \
+ e->X_add_number = 0; \
+ } \
+ } while (0)
+
+/* Fill in rs_align_code fragments. */
+extern void spu_handle_align PARAMS ((fragS *));
+#define HANDLE_ALIGN(frag) spu_handle_align (frag)
+
+#define MAX_MEM_FOR_RS_ALIGN_CODE (7 + 8)
+
+#endif /* TC_SPU */
diff --git a/gas/config/tc-tic30.c b/gas/config/tc-tic30.c
index b4acccc59bf5..e6ffbb8226de 100644
--- a/gas/config/tc-tic30.c
+++ b/gas/config/tc-tic30.c
@@ -1,5 +1,5 @@
/* tc-c30.c -- Assembly code for the Texas Instruments TMS320C30
- Copyright 1998, 1999, 2000, 2001, 2002, 2003
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2006
Free Software Foundation, Inc.
Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au)
@@ -28,7 +28,6 @@
#include "as.h"
#include "safe-ctype.h"
#include "opcode/tic30.h"
-#include <stdarg.h>
/* Put here all non-digit non-letter characters that may occur in an
operand. */
@@ -273,15 +272,17 @@ struct tic30_insn
struct tic30_insn insn;
static int found_parallel_insn;
-static char output_invalid_buf[8];
+static char output_invalid_buf[sizeof (unsigned char) * 2 + 6];
static char *
output_invalid (char c)
{
if (ISPRINT (c))
- sprintf (output_invalid_buf, "'%c'", c);
+ snprintf (output_invalid_buf, sizeof (output_invalid_buf),
+ "'%c'", c);
else
- sprintf (output_invalid_buf, "(0x%x)", (unsigned) c);
+ snprintf (output_invalid_buf, sizeof (output_invalid_buf),
+ "(0x%x)", (unsigned char) c);
return output_invalid_buf;
}
diff --git a/gas/config/tc-tic4x.c b/gas/config/tc-tic4x.c
index 8707180c1328..a92d6a6d22a9 100644
--- a/gas/config/tc-tic4x.c
+++ b/gas/config/tc-tic4x.c
@@ -1,5 +1,5 @@
/* tc-tic4x.c -- Assemble for the Texas Instruments TMS320C[34]x.
- Copyright (C) 1997,1998, 2002, 2003, 2005 Free Software Foundation.
+ Copyright (C) 1997,1998, 2002, 2003, 2005, 2006 Free Software Foundation.
Contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz)
@@ -45,14 +45,11 @@
o Support 'abc' constants (that is 0x616263)
*/
-#include <stdio.h>
#include "safe-ctype.h"
#include "as.h"
#include "opcode/tic4x.h"
#include "subsegs.h"
#include "obstack.h"
-#include "symbols.h"
-#include "listing.h"
/* OK, we accept a syntax similar to the other well known C30
assembly tools. With TIC4X_ALT_SYNTAX defined we are more
@@ -2640,7 +2637,7 @@ md_assemble (str)
if ((i = tic4x_operands_parse (s, insn->operands, 0)) < 0)
{
- insn->inst = NULL; /* Flag that error occured. */
+ insn->inst = NULL; /* Flag that error occurred. */
insn->parallel = 0;
insn->in_use = 0;
return;
diff --git a/gas/config/tc-tic54x.c b/gas/config/tc-tic54x.c
index f84afcd838e7..412473b98e1f 100644
--- a/gas/config/tc-tic54x.c
+++ b/gas/config/tc-tic54x.c
@@ -45,9 +45,7 @@
COFF1 limits section names to 8 characters.
Some of the default behavior changed from COFF1 to COFF2. */
-#include <stdlib.h>
#include <limits.h>
-#include <errno.h>
#include "as.h"
#include "safe-ctype.h"
#include "sb.h"
@@ -2514,8 +2512,8 @@ tic54x_mlib (ignore)
abfd = bfd_openr (path, NULL);
if (!abfd)
{
- as_bad (_("Can't open macro library file '%s' for reading."), path);
- as_perror ("%s", path);
+ as_bad (_("can't open macro library file '%s' for reading: %s"),
+ path, bfd_errmsg (bfd_get_error ()));
ignore_rest_of_line ();
return;
}
diff --git a/gas/config/tc-v850.c b/gas/config/tc-v850.c
index 798495616014..dc98bd5a1f5f 100644
--- a/gas/config/tc-v850.c
+++ b/gas/config/tc-v850.c
@@ -19,7 +19,6 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
diff --git a/gas/config/tc-vax.c b/gas/config/tc-vax.c
index b0ac3f745f36..93cacd6e69be 100644
--- a/gas/config/tc-vax.c
+++ b/gas/config/tc-vax.c
@@ -2035,8 +2035,6 @@ main (void)
We declare arrays non-local in case some of our tiny-minded machines
default to small stacks. Also, helps with some debuggers. */
-#include <stdio.h>
-
char answer[100]; /* Human types into here. */
char *p; /* */
char *myerr;
@@ -3267,3 +3265,143 @@ md_begin (void)
fP->high = &big_operand_bits[i][SIZE_OF_LARGE_NUMBER - 1];
}
}
+
+static char *vax_cons_special_reloc;
+
+void
+vax_cons (expressionS *exp, int size)
+{
+ char *save;
+
+ SKIP_WHITESPACE ();
+ vax_cons_special_reloc = NULL;
+ save = input_line_pointer;
+ if (input_line_pointer[0] == '%')
+ {
+ if (strncmp (input_line_pointer + 1, "pcrel", 5) == 0)
+ {
+ input_line_pointer += 6;
+ vax_cons_special_reloc = "pcrel";
+ }
+ if (vax_cons_special_reloc)
+ {
+ int bad = 0;
+
+ switch (size)
+ {
+ case 1:
+ if (*input_line_pointer != '8')
+ bad = 1;
+ input_line_pointer--;
+ break;
+ case 2:
+ if (input_line_pointer[0] != '1' || input_line_pointer[1] != '6')
+ bad = 1;
+ break;
+ case 4:
+ if (input_line_pointer[0] != '3' || input_line_pointer[1] != '2')
+ bad = 1;
+ break;
+ default:
+ bad = 1;
+ break;
+ }
+
+ if (bad)
+ {
+ as_bad (_("Illegal operands: Only %%r_%s%d allowed in %d-byte data fields"),
+ vax_cons_special_reloc, size * 8, size);
+ }
+ else
+ {
+ input_line_pointer += 2;
+ if (*input_line_pointer != '(')
+ {
+ as_bad (_("Illegal operands: %%r_%s%d requires arguments in ()"),
+ vax_cons_special_reloc, size * 8);
+ bad = 1;
+ }
+ }
+
+ if (bad)
+ {
+ input_line_pointer = save;
+ vax_cons_special_reloc = NULL;
+ }
+ else
+ {
+ int c;
+ char *end = ++input_line_pointer;
+ int npar = 0;
+
+ while (! is_end_of_line[(c = *end)])
+ {
+ if (c == '(')
+ npar++;
+ else if (c == ')')
+ {
+ if (!npar)
+ break;
+ npar--;
+ }
+ end++;
+ }
+
+ if (c != ')')
+ as_bad (_("Illegal operands: %%r_%s%d requires arguments in ()"),
+ vax_cons_special_reloc, size * 8);
+ else
+ {
+ *end = '\0';
+ expression (exp);
+ *end = c;
+ if (input_line_pointer != end)
+ {
+ as_bad (_("Illegal operands: %%r_%s%d requires arguments in ()"),
+ vax_cons_special_reloc, size * 8);
+ }
+ else
+ {
+ input_line_pointer++;
+ SKIP_WHITESPACE ();
+ c = *input_line_pointer;
+ if (! is_end_of_line[c] && c != ',')
+ as_bad (_("Illegal operands: garbage after %%r_%s%d()"),
+ vax_cons_special_reloc, size * 8);
+ }
+ }
+ }
+ }
+ }
+ if (vax_cons_special_reloc == NULL)
+ expression (exp);
+}
+
+/* This is called by emit_expr via TC_CONS_FIX_NEW when creating a
+ reloc for a cons. */
+
+void
+vax_cons_fix_new (fragS *frag, int where, unsigned int nbytes, expressionS *exp)
+{
+ bfd_reloc_code_real_type r;
+
+ r = (nbytes == 1 ? BFD_RELOC_8 :
+ (nbytes == 2 ? BFD_RELOC_16 : BFD_RELOC_32));
+
+ if (vax_cons_special_reloc)
+ {
+ if (*vax_cons_special_reloc == 'p')
+ {
+ switch (nbytes)
+ {
+ case 1: r = BFD_RELOC_8_PCREL; break;
+ case 2: r = BFD_RELOC_16_PCREL; break;
+ case 4: r = BFD_RELOC_32_PCREL; break;
+ default: abort ();
+ }
+ }
+ }
+
+ fix_new_exp (frag, where, (int) nbytes, exp, 0, r);
+ vax_cons_special_reloc = NULL;
+}
diff --git a/gas/config/tc-vax.h b/gas/config/tc-vax.h
index 715d54a812f6..4f16e5837d32 100644
--- a/gas/config/tc-vax.h
+++ b/gas/config/tc-vax.h
@@ -47,6 +47,13 @@
#define md_operand(x)
+#ifdef OBJ_ELF
+#define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) vax_cons (EXP, NBYTES)
+#define TC_CONS_FIX_NEW vax_cons_fix_new
+void vax_cons (expressionS *, int);
+void vax_cons_fix_new (struct frag *, int, unsigned int, struct expressionS *);
+#endif
+
extern const struct relax_type md_relax_table[];
#define TC_GENERIC_RELAX_TABLE md_relax_table
diff --git a/gas/config/tc-xc16x.c b/gas/config/tc-xc16x.c
index 7a369b42ec29..2027dbdcaace 100644
--- a/gas/config/tc-xc16x.c
+++ b/gas/config/tc-xc16x.c
@@ -20,7 +20,6 @@
02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
@@ -28,7 +27,6 @@
#include "opcodes/xc16x-desc.h"
#include "opcodes/xc16x-opc.h"
#include "cgen.h"
-#include "bfd.h"
#include "dwarf2dbg.h"
diff --git a/gas/config/tc-xc16x.h b/gas/config/tc-xc16x.h
index aa510d8e1a59..8aa6d07785f3 100644
--- a/gas/config/tc-xc16x.h
+++ b/gas/config/tc-xc16x.h
@@ -25,11 +25,6 @@
#define TARGET_ARCH bfd_arch_xc16x
-#ifdef BFD_ASSEMBLER
-/* Fixup debug sections since we will never relax them. */
-#define TC_LINKRELAX_FIXUP(seg) (seg->flags & SEC_ALLOC)
-#endif
-
#ifdef OBJ_ELF
#define TARGET_FORMAT "elf32-xc16x"
#define LOCAL_LABEL_PREFIX '.'
diff --git a/gas/config/tc-xstormy16.c b/gas/config/tc-xstormy16.c
index 29e019942457..e2f4631a8ecc 100644
--- a/gas/config/tc-xstormy16.c
+++ b/gas/config/tc-xstormy16.c
@@ -1,5 +1,6 @@
/* tc-xstormy16.c -- Assembler for the Sanyo XSTORMY16.
- Copyright 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation.
+ Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation.
This file is part of GAS, the GNU Assembler.
@@ -18,7 +19,6 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
-#include <stdio.h>
#include "as.h"
#include "subsegs.h"
#include "symcat.h"
diff --git a/gas/config/tc-xstormy16.h b/gas/config/tc-xstormy16.h
index 542587452a4c..727a4964e5c4 100644
--- a/gas/config/tc-xstormy16.h
+++ b/gas/config/tc-xstormy16.h
@@ -63,3 +63,6 @@ extern void xstormy16_cons_fix_new (fragS *f, int, int, expressionS *);
/* Minimum instruction is two bytes. */
#define DWARF2_LINE_MIN_INSN_LENGTH 2
+
+/* This target is buggy, and sets fix size too large. */
+#define TC_FX_SIZE_SLACK(FIX) 2
diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c
index d7f059e6f5ea..aef6b65e77bf 100644
--- a/gas/config/tc-xtensa.c
+++ b/gas/config/tc-xtensa.c
@@ -1,5 +1,5 @@
/* tc-xtensa.c -- Assemble Xtensa instructions.
- Copyright 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -18,13 +18,11 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
-#include <string.h>
#include <limits.h>
#include "as.h"
#include "sb.h"
#include "safe-ctype.h"
#include "tc-xtensa.h"
-#include "frags.h"
#include "subsegs.h"
#include "xtensa-relax.h"
#include "xtensa-istack.h"
@@ -32,6 +30,11 @@
#include "struc-symbol.h"
#include "xtensa-config.h"
+/* Provide default values for new configuration settings. */
+#ifndef XSHAL_ABI
+#define XSHAL_ABI 0
+#endif
+
#ifndef uint32
#define uint32 unsigned int
#endif
@@ -97,33 +100,32 @@ static bfd_boolean past_xtensa_end = FALSE;
#define LITERAL_SECTION_NAME xtensa_section_rename (".literal")
#define LIT4_SECTION_NAME xtensa_section_rename (".lit4")
-#define FINI_SECTION_NAME xtensa_section_rename (".fini")
#define INIT_SECTION_NAME xtensa_section_rename (".init")
-#define FINI_LITERAL_SECTION_NAME xtensa_section_rename (".fini.literal")
-#define INIT_LITERAL_SECTION_NAME xtensa_section_rename (".init.literal")
+#define FINI_SECTION_NAME xtensa_section_rename (".fini")
/* This type is used for the directive_stack to keep track of the
- state of the literal collection pools. */
+ state of the literal collection pools. If lit_prefix is set, it is
+ used to determine the literal section names; otherwise, the literal
+ sections are determined based on the current text section. The
+ lit_seg and lit4_seg fields cache these literal sections, with the
+ current_text_seg field used a tag to indicate whether the cached
+ values are valid. */
typedef struct lit_state_struct
{
- const char *lit_seg_name;
- const char *lit4_seg_name;
- const char *init_lit_seg_name;
- const char *fini_lit_seg_name;
+ char *lit_prefix;
+ segT current_text_seg;
segT lit_seg;
segT lit4_seg;
- segT init_lit_seg;
- segT fini_lit_seg;
} lit_state;
static lit_state default_lit_sections;
-/* We keep lists of literal segments. The seg_list type is the node
- for such a list. The *_literal_head locals are the heads of the
- various lists. All of these lists have a dummy node at the start. */
+/* We keep a list of literal segments. The seg_list type is the node
+ for this list. The literal_head pointer is the head of the list,
+ with the literal_head_h dummy node at the start. */
typedef struct seg_list_struct
{
@@ -133,10 +135,6 @@ typedef struct seg_list_struct
static seg_list literal_head_h;
static seg_list *literal_head = &literal_head_h;
-static seg_list init_literal_head_h;
-static seg_list *init_literal_head = &init_literal_head_h;
-static seg_list fini_literal_head_h;
-static seg_list *fini_literal_head = &fini_literal_head_h;
/* Lists of symbols. We keep a list of symbols that label the current
@@ -189,7 +187,9 @@ int generating_literals = 0;
/* Instruction only properties about code. */
#define XTENSA_PROP_INSN_NO_DENSITY 0x00000040
#define XTENSA_PROP_INSN_NO_REORDER 0x00000080
-#define XTENSA_PROP_INSN_NO_TRANSFORM 0x00000100
+/* Historically, NO_TRANSFORM was a property of instructions,
+ but it should apply to literals under certain circumstances. */
+#define XTENSA_PROP_NO_TRANSFORM 0x00000100
/* Branch target alignment information. This transmits information
to the linker optimization about the priority of aligning a
@@ -265,6 +265,9 @@ struct frag_flags_struct
unsigned is_data : 1;
unsigned is_unreachable : 1;
+ /* is_specific_opcode implies no_transform. */
+ unsigned is_no_transform : 1;
+
struct
{
unsigned is_loop_target : 1;
@@ -273,8 +276,6 @@ struct frag_flags_struct
unsigned is_no_density : 1;
/* no_longcalls flag does not need to be placed in the object file. */
- /* is_specific_opcode implies no_transform. */
- unsigned is_no_transform : 1;
unsigned is_no_reorder : 1;
@@ -354,6 +355,24 @@ op_placement_info_table op_placement_table;
#define O_hi16 O_md2 /* use high 16 bits of symbolic value */
#define O_lo16 O_md3 /* use low 16 bits of symbolic value */
+struct suffix_reloc_map
+{
+ char *suffix;
+ int length;
+ bfd_reloc_code_real_type reloc;
+ unsigned char operator;
+};
+
+#define SUFFIX_MAP(str, reloc, op) { str, sizeof (str) - 1, reloc, op }
+
+static struct suffix_reloc_map suffix_relocs[] =
+{
+ SUFFIX_MAP ("l", BFD_RELOC_LO16, O_lo16),
+ SUFFIX_MAP ("h", BFD_RELOC_HI16, O_hi16),
+ SUFFIX_MAP ("plt", BFD_RELOC_XTENSA_PLT, O_pltrel),
+ { (char *) 0, 0, BFD_RELOC_UNUSED, 0 }
+};
+
/* Directives. */
@@ -403,7 +422,7 @@ bfd_boolean directive_state[] =
FALSE, /* freeregs */
FALSE, /* longcalls */
FALSE, /* literal_prefix */
- TRUE, /* schedule */
+ FALSE, /* schedule */
#if XSHAL_USE_ABSOLUTE_LITERALS
TRUE /* absolute_literals */
#else
@@ -416,7 +435,7 @@ bfd_boolean directive_state[] =
static void xtensa_begin_directive (int);
static void xtensa_end_directive (int);
-static void xtensa_literal_prefix (char const *, int);
+static void xtensa_literal_prefix (void);
static void xtensa_literal_position (int);
static void xtensa_literal_pseudo (int);
static void xtensa_frequency_pseudo (int);
@@ -465,12 +484,11 @@ static void xtensa_switch_to_literal_fragment (emit_state *);
static void xtensa_switch_to_non_abs_literal_fragment (emit_state *);
static void xtensa_switch_section_emit_state (emit_state *, segT, subsegT);
static void xtensa_restore_emit_state (emit_state *);
-static void cache_literal_section
- (seg_list *, const char *, segT *, bfd_boolean);
+static segT cache_literal_section (bfd_boolean);
/* Import from elf32-xtensa.c in BFD library. */
-extern char *xtensa_get_property_section_name (asection *, const char *);
+extern asection *xtensa_get_property_section (asection *, const char *);
/* op_placement_info functions. */
@@ -944,43 +962,16 @@ xtensa_clear_insn_labels (void)
}
-/* The "loops_ok" argument is provided to allow ignoring labels that
- define loop ends. This fixes a bug where the NOPs to align a
- loop opcode were included in a previous zero-cost loop:
-
- loop a0, loopend
- <loop1 body>
- loopend:
-
- loop a2, loopend2
- <loop2 body>
-
- would become:
-
- loop a0, loopend
- <loop1 body>
- nop.n <===== bad!
- loopend:
-
- loop a2, loopend2
- <loop2 body>
-
- This argument is used to prevent moving the NOP to before the
- loop-end label, which is what you want in this special case. */
-
static void
-xtensa_move_labels (fragS *new_frag, valueT new_offset, bfd_boolean loops_ok)
+xtensa_move_labels (fragS *new_frag, valueT new_offset)
{
sym_list *lit;
for (lit = insn_labels; lit; lit = lit->next)
{
symbolS *lit_sym = lit->sym;
- if (loops_ok || ! symbol_get_tc (lit_sym)->is_loop_target)
- {
- S_SET_VALUE (lit_sym, new_offset);
- symbol_set_frag (lit_sym, new_frag);
- }
+ S_SET_VALUE (lit_sym, new_offset);
+ symbol_set_frag (lit_sym, new_frag);
}
}
@@ -1175,7 +1166,6 @@ xtensa_begin_directive (int ignore ATTRIBUTE_UNUSED)
directiveE directive;
bfd_boolean negated;
emit_state *state;
- int len;
lit_state *ls;
get_directive (&directive, &negated);
@@ -1222,20 +1212,10 @@ xtensa_begin_directive (int ignore ATTRIBUTE_UNUSED)
assert (ls);
*ls = default_lit_sections;
-
directive_push (directive_literal_prefix, negated, ls);
- /* Parse the new prefix from the input_line_pointer. */
- SKIP_WHITESPACE ();
- len = strspn (input_line_pointer,
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz_/0123456789.$");
-
/* Process the new prefix. */
- xtensa_literal_prefix (input_line_pointer, len);
-
- /* Skip the name in the input line. */
- input_line_pointer += len;
+ xtensa_literal_prefix ();
break;
case directive_freeregs:
@@ -1355,10 +1335,10 @@ xtensa_end_directive (int ignore ATTRIBUTE_UNUSED)
/* Restore the default collection sections from saved state. */
s = (lit_state *) state;
assert (s);
-
default_lit_sections = *s;
- /* free the state storage */
+ /* Free the state storage. */
+ free (s->lit_prefix);
free (s);
break;
@@ -1465,62 +1445,31 @@ xtensa_literal_pseudo (int ignored ATTRIBUTE_UNUSED)
static void
-xtensa_literal_prefix (char const *start, int len)
+xtensa_literal_prefix (void)
{
- char *name, *linkonce_suffix;
- char *newname, *newname4;
- size_t linkonce_len;
+ char *name;
+ int len;
+
+ /* Parse the new prefix from the input_line_pointer. */
+ SKIP_WHITESPACE ();
+ len = strspn (input_line_pointer,
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz_/0123456789.$");
/* Get a null-terminated copy of the name. */
name = xmalloc (len + 1);
assert (name);
-
- strncpy (name, start, len);
+ strncpy (name, input_line_pointer, len);
name[len] = 0;
- /* Allocate the sections (interesting note: the memory pointing to
- the name is actually used for the name by the new section). */
-
- newname = xmalloc (len + strlen (".literal") + 1);
- newname4 = xmalloc (len + strlen (".lit4") + 1);
+ /* Skip the name in the input line. */
+ input_line_pointer += len;
- linkonce_len = sizeof (".gnu.linkonce.") - 1;
- if (strncmp (name, ".gnu.linkonce.", linkonce_len) == 0
- && (linkonce_suffix = strchr (name + linkonce_len, '.')) != 0)
- {
- strcpy (newname, ".gnu.linkonce.literal");
- strcpy (newname4, ".gnu.linkonce.lit4");
+ default_lit_sections.lit_prefix = name;
- strcat (newname, linkonce_suffix);
- strcat (newname4, linkonce_suffix);
- }
- else
- {
- int suffix_pos = len;
-
- /* If the section name ends with ".text", then replace that suffix
- instead of appending an additional suffix. */
- if (len >= 5 && strcmp (name + len - 5, ".text") == 0)
- suffix_pos -= 5;
-
- strcpy (newname, name);
- strcpy (newname4, name);
-
- strcpy (newname + suffix_pos, ".literal");
- strcpy (newname4 + suffix_pos, ".lit4");
- }
-
- /* Note that cache_literal_section does not create a segment if
- it already exists. */
+ /* Clear cached literal sections, since the prefix has changed. */
default_lit_sections.lit_seg = NULL;
default_lit_sections.lit4_seg = NULL;
-
- /* Canonicalizing section names allows renaming literal
- sections to occur correctly. */
- default_lit_sections.lit_seg_name = tc_canonicalize_symbol_name (newname);
- default_lit_sections.lit4_seg_name = tc_canonicalize_symbol_name (newname4);
-
- free (name);
}
@@ -1619,29 +1568,12 @@ xtensa_elf_cons (int nbytes)
static bfd_reloc_code_real_type
xtensa_elf_suffix (char **str_p, expressionS *exp_p)
{
- struct map_bfd
- {
- char *string;
- int length;
- bfd_reloc_code_real_type reloc;
- };
-
char ident[20];
char *str = *str_p;
char *str2;
int ch;
int len;
- struct map_bfd *ptr;
-
-#define MAP(str,reloc) { str, sizeof (str) - 1, reloc }
-
- static struct map_bfd mapping[] =
- {
- MAP ("l", BFD_RELOC_LO16),
- MAP ("h", BFD_RELOC_HI16),
- MAP ("plt", BFD_RELOC_XTENSA_PLT),
- { (char *) 0, 0, BFD_RELOC_UNUSED }
- };
+ struct suffix_reloc_map *ptr;
if (*str++ != '@')
return BFD_RELOC_NONE;
@@ -1658,10 +1590,10 @@ xtensa_elf_suffix (char **str_p, expressionS *exp_p)
len = str2 - ident;
ch = ident[0];
- for (ptr = &mapping[0]; ptr->length > 0; ptr++)
- if (ch == ptr->string[0]
+ for (ptr = &suffix_relocs[0]; ptr->length > 0; ptr++)
+ if (ch == ptr->suffix[0]
&& len == ptr->length
- && memcmp (ident, ptr->string, ptr->length) == 0)
+ && memcmp (ident, ptr->suffix, ptr->length) == 0)
{
/* Now check for "identifier@suffix+constant". */
if (*str == '-' || *str == '+')
@@ -1689,6 +1621,49 @@ xtensa_elf_suffix (char **str_p, expressionS *exp_p)
}
+/* Find the matching operator type. */
+static unsigned char
+map_suffix_reloc_to_operator (bfd_reloc_code_real_type reloc)
+{
+ struct suffix_reloc_map *sfx;
+ unsigned char operator = (unsigned char) -1;
+
+ for (sfx = &suffix_relocs[0]; sfx->suffix; sfx++)
+ {
+ if (sfx->reloc == reloc)
+ {
+ operator = sfx->operator;
+ break;
+ }
+ }
+ assert (operator != (unsigned char) -1);
+ return operator;
+}
+
+
+/* Find the matching reloc type. */
+static bfd_reloc_code_real_type
+map_operator_to_reloc (unsigned char operator)
+{
+ struct suffix_reloc_map *sfx;
+ bfd_reloc_code_real_type reloc = BFD_RELOC_UNUSED;
+
+ for (sfx = &suffix_relocs[0]; sfx->suffix; sfx++)
+ {
+ if (sfx->operator == operator)
+ {
+ reloc = sfx->reloc;
+ break;
+ }
+ }
+
+ if (reloc == BFD_RELOC_UNUSED)
+ return BFD_RELOC_32;
+
+ return reloc;
+}
+
+
static const char *
expression_end (const char *name)
{
@@ -1789,34 +1764,32 @@ expression_maybe_register (xtensa_opcode opc, int opnd, expressionS *tok)
}
if ((tok->X_op == O_constant || tok->X_op == O_symbol)
- && (reloc = xtensa_elf_suffix (&input_line_pointer, tok))
- && (reloc != BFD_RELOC_NONE))
+ && ((reloc = xtensa_elf_suffix (&input_line_pointer, tok))
+ != BFD_RELOC_NONE))
{
- switch (reloc)
+ if (reloc == BFD_RELOC_UNUSED)
{
- default:
- case BFD_RELOC_UNUSED:
- as_bad (_("unsupported relocation"));
- break;
-
- case BFD_RELOC_XTENSA_PLT:
- tok->X_op = O_pltrel;
- break;
+ as_bad (_("unsupported relocation"));
+ return;
+ }
- case BFD_RELOC_LO16:
- if (tok->X_op == O_constant)
+ if (tok->X_op == O_constant)
+ {
+ switch (reloc)
+ {
+ case BFD_RELOC_LO16:
tok->X_add_number &= 0xffff;
- else
- tok->X_op = O_lo16;
- break;
+ return;
- case BFD_RELOC_HI16:
- if (tok->X_op == O_constant)
+ case BFD_RELOC_HI16:
tok->X_add_number = ((unsigned) tok->X_add_number) >> 16;
- else
- tok->X_op = O_hi16;
- break;
+ return;
+
+ default:
+ break;
+ }
}
+ tok->X_op = map_suffix_reloc_to_operator (reloc);
}
}
else
@@ -2340,9 +2313,6 @@ xg_translate_idioms (char **popname, int *pnum_args, char **arg_strings)
char *opname = *popname;
bfd_boolean has_underbar = FALSE;
- if (cur_vinsn.inside_bundle)
- return 0;
-
if (*opname == '_')
{
has_underbar = TRUE;
@@ -2385,7 +2355,11 @@ xg_translate_idioms (char **popname, int *pnum_args, char **arg_strings)
return 0;
}
- if (xtensa_nop_opcode == XTENSA_UNDEFINED
+ /* Don't do anything special with NOPs inside FLIX instructions. They
+ are handled elsewhere. Real NOP instructions are always available
+ in configurations with FLIX, so this should never be an issue but
+ check for it anyway. */
+ if (!cur_vinsn.inside_bundle && xtensa_nop_opcode == XTENSA_UNDEFINED
&& strcmp (opname, "nop") == 0)
{
if (use_transform () && !has_underbar && density_supported)
@@ -2589,7 +2563,7 @@ is_direct_call_opcode (xtensa_opcode opcode)
xtensa_isa isa = xtensa_default_isa;
int n, num_operands;
- if (xtensa_opcode_is_call (isa, opcode) == 0)
+ if (xtensa_opcode_is_call (isa, opcode) != 1)
return FALSE;
num_operands = xtensa_opcode_num_operands (isa, opcode);
@@ -3312,7 +3286,7 @@ xg_build_to_insn (TInsn *targ, TInsn *insn, BuildInstr *bi)
BuildOp *op;
symbolS *sym;
- memset (targ, 0, sizeof (TInsn));
+ tinsn_init (targ);
targ->linenum = insn->linenum;
switch (bi->typ)
{
@@ -3524,7 +3498,33 @@ xg_expand_to_stack (IStack *istack, TInsn *insn, int lateral_steps)
/* Relax the assembly instruction at least "min_steps".
- Return the number of steps taken. */
+ Return the number of steps taken.
+
+ For relaxation to correctly terminate, every relaxation chain must
+ terminate in one of two ways:
+
+ 1. If the chain from one instruction to the next consists entirely of
+ single instructions, then the chain *must* handle all possible
+ immediates without failing. It must not ever fail because an
+ immediate is out of range. The MOVI.N -> MOVI -> L32R relaxation
+ chain is one example. L32R loads 32 bits, and there cannot be an
+ immediate larger than 32 bits, so it satisfies this condition.
+ Single instruction relaxation chains are as defined by
+ xg_is_single_relaxable_instruction.
+
+ 2. Otherwise, the chain must end in a multi-instruction expansion: e.g.,
+ BNEZ.N -> BNEZ -> BNEZ.W15 -> BENZ.N/J
+
+ Strictly speaking, in most cases you can violate condition 1 and be OK
+ -- in particular when the last two instructions have the same single
+ size. But nevertheless, you should guarantee the above two conditions.
+
+ We could fix this so that single-instruction expansions correctly
+ terminate when they can't handle the range, but the error messages are
+ worse, and it actually turns out that in every case but one (18-bit wide
+ branches), you need a multi-instruction expansion to get the full range
+ anyway. And because 18-bit branches are handled identically to 15-bit
+ branches, there isn't any point in changing it. */
static int
xg_assembly_relax (IStack *istack,
@@ -3537,12 +3537,9 @@ xg_assembly_relax (IStack *istack,
{
int steps_taken = 0;
- /* assert (has no symbolic operands)
- Some of its immeds don't fit.
- Try to build a relaxed version.
- This may go through a couple of stages
- of single instruction transformations before
- we get there. */
+ /* Some of its immeds don't fit. Try to build a relaxed version.
+ This may go through a couple of stages of single instruction
+ transformations before we get there. */
TInsn single_target;
TInsn current_insn;
@@ -3680,8 +3677,8 @@ is_branch_jmp_to_next (TInsn *insn, fragS *fragP)
symbolS *sym;
fragS *target_frag;
- if (xtensa_opcode_is_branch (isa, insn->opcode) == 0
- && xtensa_opcode_is_jump (isa, insn->opcode) == 0)
+ if (xtensa_opcode_is_branch (isa, insn->opcode) != 1
+ && xtensa_opcode_is_jump (isa, insn->opcode) != 1)
return FALSE;
for (i = 0; i < num_ops; i++)
@@ -3861,7 +3858,7 @@ xg_expand_assembly_insn (IStack *istack, TInsn *orig_insn)
TInsn new_insn;
bfd_boolean do_expand;
- memset (&new_insn, 0, sizeof (TInsn));
+ tinsn_init (&new_insn);
/* Narrow it if we can. xg_simplify_insn now does all the
appropriate checking (e.g., for the density option). */
@@ -3923,7 +3920,9 @@ xg_expand_assembly_insn (IStack *istack, TInsn *orig_insn)
/* Return TRUE if the section flags are marked linkonce
- or the name is .gnu.linkonce*. */
+ or the name is .gnu.linkonce.*. */
+
+static int linkonce_len = sizeof (".gnu.linkonce.") - 1;
static bfd_boolean
get_is_linkonce_section (bfd *abfd ATTRIBUTE_UNUSED, segT sec)
@@ -3934,13 +3933,10 @@ get_is_linkonce_section (bfd *abfd ATTRIBUTE_UNUSED, segT sec)
link_once_flags = (flags & SEC_LINK_ONCE);
/* Flags might not be set yet. */
- if (!link_once_flags)
- {
- static size_t len = sizeof ".gnu.linkonce.t.";
+ if (!link_once_flags
+ && strncmp (segment_name (sec), ".gnu.linkonce.", linkonce_len) == 0)
+ link_once_flags = SEC_LINK_ONCE;
- if (strncmp (segment_name (sec), ".gnu.linkonce.t.", len - 1) == 0)
- link_once_flags = SEC_LINK_ONCE;
- }
return (link_once_flags != 0);
}
@@ -3992,6 +3988,8 @@ xg_assemble_literal (/* const */ TInsn *insn)
{
emit_state state;
symbolS *lit_sym = NULL;
+ bfd_reloc_code_real_type reloc;
+ char *p;
/* size = 4 for L32R. It could easily be larger when we move to
larger constants. Add a parameter later. */
@@ -4027,19 +4025,24 @@ xg_assemble_literal (/* const */ TInsn *insn)
frag_align (litalign, 0, 0);
record_alignment (now_seg, litalign);
- if (emit_val->X_op == O_pltrel)
+ switch (emit_val->X_op)
{
- char *p = frag_more (litsize);
+ case O_pltrel:
+ p = frag_more (litsize);
xtensa_set_frag_assembly_state (frag_now);
+ reloc = map_operator_to_reloc (emit_val->X_op);
if (emit_val->X_add_symbol)
emit_val->X_op = O_symbol;
else
emit_val->X_op = O_constant;
fix_new_exp (frag_now, p - frag_now->fr_literal,
- litsize, emit_val, 0, BFD_RELOC_XTENSA_PLT);
+ litsize, emit_val, 0, reloc);
+ break;
+
+ default:
+ emit_expr (emit_val, litsize);
+ break;
}
- else
- emit_expr (emit_val, litsize);
assert (frag_now->tc_frag_data.literal_frag == NULL);
frag_now->tc_frag_data.literal_frag = get_literal_pool_location (now_seg);
@@ -4160,12 +4163,6 @@ xg_add_opcode_fix (TInsn *tinsn,
the_fix = fix_new_exp (fragP, offset, fmt_length, expr,
howto->pc_relative, reloc);
the_fix->fx_no_overflow = 1;
-
- if (expr->X_add_symbol
- && (S_IS_EXTERNAL (expr->X_add_symbol)
- || S_IS_WEAK (expr->X_add_symbol)))
- the_fix->fx_plt = TRUE;
-
the_fix->tc_fix_data.X_add_symbol = expr->X_add_symbol;
the_fix->tc_fix_data.X_add_number = expr->X_add_number;
the_fix->tc_fix_data.slot = slot;
@@ -4410,7 +4407,8 @@ frag_format_size (const fragS *fragP)
/* If an instruction is about to grow, return the longer size. */
if (fragP->tc_frag_data.slot_subtypes[0] == RELAX_IMMED_STEP1
- || fragP->tc_frag_data.slot_subtypes[0] == RELAX_IMMED_STEP2)
+ || fragP->tc_frag_data.slot_subtypes[0] == RELAX_IMMED_STEP2
+ || fragP->tc_frag_data.slot_subtypes[0] == RELAX_IMMED_STEP3)
return 3;
if (fragP->tc_frag_data.slot_subtypes[0] == RELAX_NARROW)
@@ -4567,16 +4565,14 @@ xtensa_mark_literal_pool_location (void)
emit_state s;
fragS *pool_location;
- if (use_literal_section && !directive_state[directive_absolute_literals])
+ if (use_literal_section)
return;
- frag_align (2, 0, 0);
- record_alignment (now_seg, 2);
-
/* We stash info in these frags so we can later move the literal's
fixes into this frchain's fix list. */
pool_location = frag_now;
frag_now->tc_frag_data.lit_frchain = frchain_now;
+ frag_now->tc_frag_data.literal_frag = frag_now;
frag_variant (rs_machine_dependent, 0, 0,
RELAX_LITERAL_POOL_BEGIN, NULL, 0, NULL);
xtensa_set_frag_assembly_state (frag_now);
@@ -4722,6 +4718,55 @@ relaxable_section (asection *sec)
static void
+xtensa_mark_frags_for_org (void)
+{
+ segT *seclist;
+
+ /* Walk over each fragment of all of the current segments. If we find
+ a .org frag in any of the segments, mark all frags prior to it as
+ "no transform", which will prevent linker optimizations from messing
+ up the .org distance. This should be done after
+ xtensa_find_unmarked_state_frags, because we don't want to worry here
+ about that function trashing the data we save here. */
+
+ for (seclist = &stdoutput->sections;
+ seclist && *seclist;
+ seclist = &(*seclist)->next)
+ {
+ segT sec = *seclist;
+ segment_info_type *seginfo;
+ fragS *fragP;
+ flagword flags;
+ flags = bfd_get_section_flags (stdoutput, sec);
+ if (flags & SEC_DEBUGGING)
+ continue;
+ if (!(flags & SEC_ALLOC))
+ continue;
+
+ seginfo = seg_info (sec);
+ if (seginfo && seginfo->frchainP)
+ {
+ fragS *last_fragP = seginfo->frchainP->frch_root;
+ for (fragP = seginfo->frchainP->frch_root; fragP;
+ fragP = fragP->fr_next)
+ {
+ /* cvt_frag_to_fill has changed the fr_type of org frags to
+ rs_fill, so use the value as cached in rs_subtype here. */
+ if (fragP->fr_subtype == RELAX_ORG)
+ {
+ while (last_fragP != fragP->fr_next)
+ {
+ last_fragP->tc_frag_data.is_no_transform = TRUE;
+ last_fragP = last_fragP->fr_next;
+ }
+ }
+ }
+ }
+ }
+}
+
+
+static void
xtensa_find_unmarked_state_frags (void)
{
segT *seclist;
@@ -4948,12 +4993,8 @@ md_begin (void)
linkrelax = 1;
- /* Set up the .literal, .fini.literal and .init.literal sections. */
+ /* Set up the literal sections. */
memset (&default_lit_sections, 0, sizeof (default_lit_sections));
- default_lit_sections.init_lit_seg_name = INIT_LITERAL_SECTION_NAME;
- default_lit_sections.fini_lit_seg_name = FINI_LITERAL_SECTION_NAME;
- default_lit_sections.lit_seg_name = LITERAL_SECTION_NAME;
- default_lit_sections.lit4_seg_name = LIT4_SECTION_NAME;
subseg_set (current_section, current_subsec);
@@ -5044,7 +5085,7 @@ xtensa_frob_label (symbolS *sym)
frag_now->fr_symbol, frag_now->fr_offset, NULL);
xtensa_set_frag_assembly_state (frag_now);
- xtensa_move_labels (frag_now, 0, TRUE);
+ xtensa_move_labels (frag_now, 0);
}
/* No target aligning in the absolute section. */
@@ -5060,7 +5101,7 @@ xtensa_frob_label (symbolS *sym)
RELAX_DESIRE_ALIGN_IF_TARGET,
frag_now->fr_symbol, frag_now->fr_offset, NULL);
xtensa_set_frag_assembly_state (frag_now);
- xtensa_move_labels (frag_now, 0, TRUE);
+ xtensa_move_labels (frag_now, 0);
}
/* We need to mark the following properties even if we aren't aligning. */
@@ -5129,6 +5170,15 @@ xtensa_unrecognized_line (int ch)
void
xtensa_flush_pending_output (void)
{
+ /* This line fixes a bug where automatically generated gstabs info
+ separates a function label from its entry instruction, ending up
+ with the literal position between the function label and the entry
+ instruction and crashing code. It only happens with --gstabs and
+ --text-section-literals, and when several other obscure relaxation
+ conditions are met. */
+ if (outputting_stabs_line_debug)
+ return;
+
if (cur_vinsn.inside_bundle)
as_bad (_("missing closing brace"));
@@ -5325,6 +5375,9 @@ xtensa_handle_align (fragS *fragP)
as_bad_where (fragP->fr_file, fragP->fr_line,
_("unaligned entry instruction"));
}
+
+ if (linkrelax && fragP->fr_type == rs_org)
+ fragP->fr_subtype = RELAX_ORG;
}
@@ -5619,7 +5672,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg)
readable when all branch targets are encoded in relocations. */
assert (fixP->fx_addsy);
- if (S_GET_SEGMENT (fixP->fx_addsy) == seg && !fixP->fx_plt
+ if (S_GET_SEGMENT (fixP->fx_addsy) == seg
&& !S_FORCE_RELOC (fixP->fx_addsy, 1))
{
val = (S_GET_VALUE (fixP->fx_addsy) + fixP->fx_offset
@@ -6743,15 +6796,13 @@ xg_assemble_vliw_tokens (vliw_insn *vinsn)
frag_var (rs_machine_dependent, 0, 0,
RELAX_CHECK_ALIGN_NEXT_OPCODE, target_sym, 0, NULL);
xtensa_set_frag_assembly_state (frag_now);
-
- xtensa_move_labels (frag_now, 0, FALSE);
}
if (vinsn->slots[0].opcode == xtensa_entry_opcode
&& !vinsn->slots[0].is_specific_opcode)
{
xtensa_mark_literal_pool_location ();
- xtensa_move_labels (frag_now, 0, TRUE);
+ xtensa_move_labels (frag_now, 0);
frag_var (rs_align_test, 1, 1, 0, NULL, 2, NULL);
}
@@ -6831,7 +6882,7 @@ xg_assemble_vliw_tokens (vliw_insn *vinsn)
when converting them. */
/* "short_loop": Add a NOP if the loop is < 4 bytes. */
- if (xtensa_opcode_is_loop (isa, vinsn->slots[0].opcode)
+ if (xtensa_opcode_is_loop (isa, vinsn->slots[0].opcode) == 1
&& !vinsn->slots[0].is_specific_opcode)
{
if (workaround_short_loop && use_transform ())
@@ -6917,6 +6968,7 @@ static void xtensa_fix_b_j_loop_end_frags (void);
static void xtensa_fix_close_loop_end_frags (void);
static void xtensa_fix_short_loop_frags (void);
static void xtensa_sanity_check (void);
+static void xtensa_add_config_info (void);
void
xtensa_end (void)
@@ -6947,6 +6999,8 @@ xtensa_end (void)
xtensa_mark_zcl_first_insns ();
xtensa_sanity_check ();
+
+ xtensa_add_config_info ();
}
@@ -6954,44 +7008,46 @@ static void
xtensa_cleanup_align_frags (void)
{
frchainS *frchP;
+ asection *s;
- for (frchP = frchain_root; frchP; frchP = frchP->frch_next)
- {
- fragS *fragP;
- /* Walk over all of the fragments in a subsection. */
- for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
- {
- if ((fragP->fr_type == rs_align
- || fragP->fr_type == rs_align_code
- || (fragP->fr_type == rs_machine_dependent
- && (fragP->fr_subtype == RELAX_DESIRE_ALIGN
- || fragP->fr_subtype == RELAX_DESIRE_ALIGN_IF_TARGET)))
- && fragP->fr_fix == 0)
- {
- fragS *next = fragP->fr_next;
-
- while (next
- && next->fr_fix == 0
- && next->fr_type == rs_machine_dependent
- && next->fr_subtype == RELAX_DESIRE_ALIGN_IF_TARGET)
- {
- frag_wane (next);
- next = next->fr_next;
- }
- }
- /* If we don't widen branch targets, then they
- will be easier to align. */
- if (fragP->tc_frag_data.is_branch_target
- && fragP->fr_opcode == fragP->fr_literal
- && fragP->fr_type == rs_machine_dependent
- && fragP->fr_subtype == RELAX_SLOTS
- && fragP->tc_frag_data.slot_subtypes[0] == RELAX_NARROW)
- frag_wane (fragP);
- if (fragP->fr_type == rs_machine_dependent
- && fragP->fr_subtype == RELAX_UNREACHABLE)
- fragP->tc_frag_data.is_unreachable = TRUE;
- }
- }
+ for (s = stdoutput->sections; s; s = s->next)
+ for (frchP = seg_info (s)->frchainP; frchP; frchP = frchP->frch_next)
+ {
+ fragS *fragP;
+ /* Walk over all of the fragments in a subsection. */
+ for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
+ {
+ if ((fragP->fr_type == rs_align
+ || fragP->fr_type == rs_align_code
+ || (fragP->fr_type == rs_machine_dependent
+ && (fragP->fr_subtype == RELAX_DESIRE_ALIGN
+ || fragP->fr_subtype == RELAX_DESIRE_ALIGN_IF_TARGET)))
+ && fragP->fr_fix == 0)
+ {
+ fragS *next = fragP->fr_next;
+
+ while (next
+ && next->fr_fix == 0
+ && next->fr_type == rs_machine_dependent
+ && next->fr_subtype == RELAX_DESIRE_ALIGN_IF_TARGET)
+ {
+ frag_wane (next);
+ next = next->fr_next;
+ }
+ }
+ /* If we don't widen branch targets, then they
+ will be easier to align. */
+ if (fragP->tc_frag_data.is_branch_target
+ && fragP->fr_opcode == fragP->fr_literal
+ && fragP->fr_type == rs_machine_dependent
+ && fragP->fr_subtype == RELAX_SLOTS
+ && fragP->tc_frag_data.slot_subtypes[0] == RELAX_NARROW)
+ frag_wane (fragP);
+ if (fragP->fr_type == rs_machine_dependent
+ && fragP->fr_subtype == RELAX_UNREACHABLE)
+ fragP->tc_frag_data.is_unreachable = TRUE;
+ }
+ }
}
@@ -7004,26 +7060,28 @@ static void
xtensa_fix_target_frags (void)
{
frchainS *frchP;
+ asection *s;
/* When this routine is called, all of the subsections are still intact
so we walk over subsections instead of sections. */
- for (frchP = frchain_root; frchP; frchP = frchP->frch_next)
- {
- fragS *fragP;
+ for (s = stdoutput->sections; s; s = s->next)
+ for (frchP = seg_info (s)->frchainP; frchP; frchP = frchP->frch_next)
+ {
+ fragS *fragP;
- /* Walk over all of the fragments in a subsection. */
- for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
- {
- if (fragP->fr_type == rs_machine_dependent
- && fragP->fr_subtype == RELAX_DESIRE_ALIGN_IF_TARGET)
- {
- if (next_frag_is_branch_target (fragP))
- fragP->fr_subtype = RELAX_DESIRE_ALIGN;
- else
- frag_wane (fragP);
- }
- }
- }
+ /* Walk over all of the fragments in a subsection. */
+ for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
+ {
+ if (fragP->fr_type == rs_machine_dependent
+ && fragP->fr_subtype == RELAX_DESIRE_ALIGN_IF_TARGET)
+ {
+ if (next_frag_is_branch_target (fragP))
+ fragP->fr_subtype = RELAX_DESIRE_ALIGN;
+ else
+ frag_wane (fragP);
+ }
+ }
+ }
}
@@ -7033,36 +7091,38 @@ static void
xtensa_mark_narrow_branches (void)
{
frchainS *frchP;
+ asection *s;
- for (frchP = frchain_root; frchP; frchP = frchP->frch_next)
- {
- fragS *fragP;
- /* Walk over all of the fragments in a subsection. */
- for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
- {
- if (fragP->fr_type == rs_machine_dependent
- && fragP->fr_subtype == RELAX_SLOTS
- && fragP->tc_frag_data.slot_subtypes[0] == RELAX_IMMED)
- {
- vliw_insn vinsn;
-
- vinsn_from_chars (&vinsn, fragP->fr_opcode);
- tinsn_immed_from_frag (&vinsn.slots[0], fragP, 0);
-
- if (vinsn.num_slots == 1
- && xtensa_opcode_is_branch (xtensa_default_isa,
- vinsn.slots[0].opcode)
- && xg_get_single_size (vinsn.slots[0].opcode) == 2
- && is_narrow_branch_guaranteed_in_range (fragP,
- &vinsn.slots[0]))
- {
- fragP->fr_subtype = RELAX_SLOTS;
- fragP->tc_frag_data.slot_subtypes[0] = RELAX_NARROW;
- fragP->tc_frag_data.is_aligning_branch = 1;
- }
- }
- }
- }
+ for (s = stdoutput->sections; s; s = s->next)
+ for (frchP = seg_info (s)->frchainP; frchP; frchP = frchP->frch_next)
+ {
+ fragS *fragP;
+ /* Walk over all of the fragments in a subsection. */
+ for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
+ {
+ if (fragP->fr_type == rs_machine_dependent
+ && fragP->fr_subtype == RELAX_SLOTS
+ && fragP->tc_frag_data.slot_subtypes[0] == RELAX_IMMED)
+ {
+ vliw_insn vinsn;
+
+ vinsn_from_chars (&vinsn, fragP->fr_opcode);
+ tinsn_immed_from_frag (&vinsn.slots[0], fragP, 0);
+
+ if (vinsn.num_slots == 1
+ && xtensa_opcode_is_branch (xtensa_default_isa,
+ vinsn.slots[0].opcode) == 1
+ && xg_get_single_size (vinsn.slots[0].opcode) == 2
+ && is_narrow_branch_guaranteed_in_range (fragP,
+ &vinsn.slots[0]))
+ {
+ fragP->fr_subtype = RELAX_SLOTS;
+ fragP->tc_frag_data.slot_subtypes[0] = RELAX_NARROW;
+ fragP->tc_frag_data.is_aligning_branch = 1;
+ }
+ }
+ }
+ }
}
@@ -7119,48 +7179,50 @@ static void
xtensa_mark_zcl_first_insns (void)
{
frchainS *frchP;
+ asection *s;
- for (frchP = frchain_root; frchP; frchP = frchP->frch_next)
- {
- fragS *fragP;
- /* Walk over all of the fragments in a subsection. */
- for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
- {
- if (fragP->fr_type == rs_machine_dependent
- && (fragP->fr_subtype == RELAX_ALIGN_NEXT_OPCODE
- || fragP->fr_subtype == RELAX_CHECK_ALIGN_NEXT_OPCODE))
- {
- /* Find the loop frag. */
- fragS *targ_frag = next_non_empty_frag (fragP);
- /* Find the first insn frag. */
- targ_frag = next_non_empty_frag (targ_frag);
-
- /* Of course, sometimes (mostly for toy test cases) a
- zero-cost loop instruction is the last in a section. */
- if (targ_frag)
- {
- targ_frag->tc_frag_data.is_first_loop_insn = TRUE;
- /* Do not widen a frag that is the first instruction of a
- zero-cost loop. It makes that loop harder to align. */
- if (targ_frag->fr_type == rs_machine_dependent
- && targ_frag->fr_subtype == RELAX_SLOTS
- && (targ_frag->tc_frag_data.slot_subtypes[0]
- == RELAX_NARROW))
- {
- if (targ_frag->tc_frag_data.is_aligning_branch)
- targ_frag->tc_frag_data.slot_subtypes[0] = RELAX_IMMED;
- else
- {
- frag_wane (targ_frag);
- targ_frag->tc_frag_data.slot_subtypes[0] = 0;
- }
- }
- }
- if (fragP->fr_subtype == RELAX_CHECK_ALIGN_NEXT_OPCODE)
- frag_wane (fragP);
- }
- }
- }
+ for (s = stdoutput->sections; s; s = s->next)
+ for (frchP = seg_info (s)->frchainP; frchP; frchP = frchP->frch_next)
+ {
+ fragS *fragP;
+ /* Walk over all of the fragments in a subsection. */
+ for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
+ {
+ if (fragP->fr_type == rs_machine_dependent
+ && (fragP->fr_subtype == RELAX_ALIGN_NEXT_OPCODE
+ || fragP->fr_subtype == RELAX_CHECK_ALIGN_NEXT_OPCODE))
+ {
+ /* Find the loop frag. */
+ fragS *targ_frag = next_non_empty_frag (fragP);
+ /* Find the first insn frag. */
+ targ_frag = next_non_empty_frag (targ_frag);
+
+ /* Of course, sometimes (mostly for toy test cases) a
+ zero-cost loop instruction is the last in a section. */
+ if (targ_frag)
+ {
+ targ_frag->tc_frag_data.is_first_loop_insn = TRUE;
+ /* Do not widen a frag that is the first instruction of a
+ zero-cost loop. It makes that loop harder to align. */
+ if (targ_frag->fr_type == rs_machine_dependent
+ && targ_frag->fr_subtype == RELAX_SLOTS
+ && (targ_frag->tc_frag_data.slot_subtypes[0]
+ == RELAX_NARROW))
+ {
+ if (targ_frag->tc_frag_data.is_aligning_branch)
+ targ_frag->tc_frag_data.slot_subtypes[0] = RELAX_IMMED;
+ else
+ {
+ frag_wane (targ_frag);
+ targ_frag->tc_frag_data.slot_subtypes[0] = 0;
+ }
+ }
+ }
+ if (fragP->fr_subtype == RELAX_CHECK_ALIGN_NEXT_OPCODE)
+ frag_wane (fragP);
+ }
+ }
+ }
}
@@ -7175,30 +7237,32 @@ static void
xtensa_fix_a0_b_retw_frags (void)
{
frchainS *frchP;
+ asection *s;
/* When this routine is called, all of the subsections are still intact
so we walk over subsections instead of sections. */
- for (frchP = frchain_root; frchP; frchP = frchP->frch_next)
- {
- fragS *fragP;
+ for (s = stdoutput->sections; s; s = s->next)
+ for (frchP = seg_info (s)->frchainP; frchP; frchP = frchP->frch_next)
+ {
+ fragS *fragP;
- /* Walk over all of the fragments in a subsection. */
- for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
- {
- if (fragP->fr_type == rs_machine_dependent
- && fragP->fr_subtype == RELAX_ADD_NOP_IF_A0_B_RETW)
- {
- if (next_instrs_are_b_retw (fragP))
- {
- if (fragP->tc_frag_data.is_no_transform)
- as_bad (_("instruction sequence (write a0, branch, retw) may trigger hardware errata"));
- else
- relax_frag_add_nop (fragP);
- }
- frag_wane (fragP);
- }
- }
- }
+ /* Walk over all of the fragments in a subsection. */
+ for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
+ {
+ if (fragP->fr_type == rs_machine_dependent
+ && fragP->fr_subtype == RELAX_ADD_NOP_IF_A0_B_RETW)
+ {
+ if (next_instrs_are_b_retw (fragP))
+ {
+ if (fragP->tc_frag_data.is_no_transform)
+ as_bad (_("instruction sequence (write a0, branch, retw) may trigger hardware errata"));
+ else
+ relax_frag_add_nop (fragP);
+ }
+ frag_wane (fragP);
+ }
+ }
+ }
}
@@ -7285,30 +7349,32 @@ static void
xtensa_fix_b_j_loop_end_frags (void)
{
frchainS *frchP;
+ asection *s;
/* When this routine is called, all of the subsections are still intact
so we walk over subsections instead of sections. */
- for (frchP = frchain_root; frchP; frchP = frchP->frch_next)
- {
- fragS *fragP;
+ for (s = stdoutput->sections; s; s = s->next)
+ for (frchP = seg_info (s)->frchainP; frchP; frchP = frchP->frch_next)
+ {
+ fragS *fragP;
- /* Walk over all of the fragments in a subsection. */
- for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
- {
- if (fragP->fr_type == rs_machine_dependent
- && fragP->fr_subtype == RELAX_ADD_NOP_IF_PRE_LOOP_END)
- {
- if (next_instr_is_loop_end (fragP))
- {
- if (fragP->tc_frag_data.is_no_transform)
- as_bad (_("branching or jumping to a loop end may trigger hardware errata"));
- else
- relax_frag_add_nop (fragP);
- }
- frag_wane (fragP);
- }
- }
- }
+ /* Walk over all of the fragments in a subsection. */
+ for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
+ {
+ if (fragP->fr_type == rs_machine_dependent
+ && fragP->fr_subtype == RELAX_ADD_NOP_IF_PRE_LOOP_END)
+ {
+ if (next_instr_is_loop_end (fragP))
+ {
+ if (fragP->tc_frag_data.is_no_transform)
+ as_bad (_("branching or jumping to a loop end may trigger hardware errata"));
+ else
+ relax_frag_add_nop (fragP);
+ }
+ frag_wane (fragP);
+ }
+ }
+ }
}
@@ -7349,66 +7415,68 @@ static void
xtensa_fix_close_loop_end_frags (void)
{
frchainS *frchP;
+ asection *s;
/* When this routine is called, all of the subsections are still intact
so we walk over subsections instead of sections. */
- for (frchP = frchain_root; frchP; frchP = frchP->frch_next)
- {
- fragS *fragP;
+ for (s = stdoutput->sections; s; s = s->next)
+ for (frchP = seg_info (s)->frchainP; frchP; frchP = frchP->frch_next)
+ {
+ fragS *fragP;
- fragS *current_target = NULL;
+ fragS *current_target = NULL;
- /* Walk over all of the fragments in a subsection. */
- for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
- {
- if (fragP->fr_type == rs_machine_dependent
- && ((fragP->fr_subtype == RELAX_ALIGN_NEXT_OPCODE)
- || (fragP->fr_subtype == RELAX_CHECK_ALIGN_NEXT_OPCODE)))
+ /* Walk over all of the fragments in a subsection. */
+ for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
+ {
+ if (fragP->fr_type == rs_machine_dependent
+ && ((fragP->fr_subtype == RELAX_ALIGN_NEXT_OPCODE)
+ || (fragP->fr_subtype == RELAX_CHECK_ALIGN_NEXT_OPCODE)))
current_target = symbol_get_frag (fragP->fr_symbol);
- if (current_target
- && fragP->fr_type == rs_machine_dependent
- && fragP->fr_subtype == RELAX_ADD_NOP_IF_CLOSE_LOOP_END)
- {
- offsetT min_bytes;
- int bytes_added = 0;
+ if (current_target
+ && fragP->fr_type == rs_machine_dependent
+ && fragP->fr_subtype == RELAX_ADD_NOP_IF_CLOSE_LOOP_END)
+ {
+ offsetT min_bytes;
+ int bytes_added = 0;
#define REQUIRED_LOOP_DIVIDING_BYTES 12
- /* Max out at 12. */
- min_bytes = min_bytes_to_other_loop_end
- (fragP->fr_next, current_target, REQUIRED_LOOP_DIVIDING_BYTES);
-
- if (min_bytes < REQUIRED_LOOP_DIVIDING_BYTES)
- {
- if (fragP->tc_frag_data.is_no_transform)
- as_bad (_("loop end too close to another loop end may trigger hardware errata"));
- else
- {
- while (min_bytes + bytes_added
- < REQUIRED_LOOP_DIVIDING_BYTES)
- {
- int length = 3;
-
- if (fragP->fr_var < length)
- as_fatal (_("fr_var %lu < length %d"),
- (long) fragP->fr_var, length);
- else
- {
- assemble_nop (length,
- fragP->fr_literal + fragP->fr_fix);
- fragP->fr_fix += length;
- fragP->fr_var -= length;
- }
- bytes_added += length;
- }
- }
- }
- frag_wane (fragP);
- }
- assert (fragP->fr_type != rs_machine_dependent
- || fragP->fr_subtype != RELAX_ADD_NOP_IF_CLOSE_LOOP_END);
- }
- }
+ /* Max out at 12. */
+ min_bytes = min_bytes_to_other_loop_end
+ (fragP->fr_next, current_target, REQUIRED_LOOP_DIVIDING_BYTES);
+
+ if (min_bytes < REQUIRED_LOOP_DIVIDING_BYTES)
+ {
+ if (fragP->tc_frag_data.is_no_transform)
+ as_bad (_("loop end too close to another loop end may trigger hardware errata"));
+ else
+ {
+ while (min_bytes + bytes_added
+ < REQUIRED_LOOP_DIVIDING_BYTES)
+ {
+ int length = 3;
+
+ if (fragP->fr_var < length)
+ as_fatal (_("fr_var %lu < length %d"),
+ (long) fragP->fr_var, length);
+ else
+ {
+ assemble_nop (length,
+ fragP->fr_literal + fragP->fr_fix);
+ fragP->fr_fix += length;
+ fragP->fr_var -= length;
+ }
+ bytes_added += length;
+ }
+ }
+ }
+ frag_wane (fragP);
+ }
+ assert (fragP->fr_type != rs_machine_dependent
+ || fragP->fr_subtype != RELAX_ADD_NOP_IF_CLOSE_LOOP_END);
+ }
+ }
}
@@ -7512,49 +7580,51 @@ static void
xtensa_fix_short_loop_frags (void)
{
frchainS *frchP;
+ asection *s;
/* When this routine is called, all of the subsections are still intact
so we walk over subsections instead of sections. */
- for (frchP = frchain_root; frchP; frchP = frchP->frch_next)
- {
- fragS *fragP;
- fragS *current_target = NULL;
- xtensa_opcode current_opcode = XTENSA_UNDEFINED;
+ for (s = stdoutput->sections; s; s = s->next)
+ for (frchP = seg_info (s)->frchainP; frchP; frchP = frchP->frch_next)
+ {
+ fragS *fragP;
+ fragS *current_target = NULL;
+ xtensa_opcode current_opcode = XTENSA_UNDEFINED;
- /* Walk over all of the fragments in a subsection. */
- for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
- {
- if (fragP->fr_type == rs_machine_dependent
- && ((fragP->fr_subtype == RELAX_ALIGN_NEXT_OPCODE)
- || (fragP->fr_subtype == RELAX_CHECK_ALIGN_NEXT_OPCODE)))
- {
- TInsn t_insn;
- fragS *loop_frag = next_non_empty_frag (fragP);
- tinsn_from_chars (&t_insn, loop_frag->fr_opcode, 0);
- current_target = symbol_get_frag (fragP->fr_symbol);
- current_opcode = t_insn.opcode;
- assert (xtensa_opcode_is_loop (xtensa_default_isa,
- current_opcode));
- }
+ /* Walk over all of the fragments in a subsection. */
+ for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
+ {
+ if (fragP->fr_type == rs_machine_dependent
+ && ((fragP->fr_subtype == RELAX_ALIGN_NEXT_OPCODE)
+ || (fragP->fr_subtype == RELAX_CHECK_ALIGN_NEXT_OPCODE)))
+ {
+ TInsn t_insn;
+ fragS *loop_frag = next_non_empty_frag (fragP);
+ tinsn_from_chars (&t_insn, loop_frag->fr_opcode, 0);
+ current_target = symbol_get_frag (fragP->fr_symbol);
+ current_opcode = t_insn.opcode;
+ assert (xtensa_opcode_is_loop (xtensa_default_isa,
+ current_opcode) == 1);
+ }
- if (fragP->fr_type == rs_machine_dependent
- && fragP->fr_subtype == RELAX_ADD_NOP_IF_SHORT_LOOP)
- {
- if (count_insns_to_loop_end (fragP->fr_next, TRUE, 3) < 3
- && (branch_before_loop_end (fragP->fr_next)
- || (workaround_all_short_loops
- && current_opcode != XTENSA_UNDEFINED
- && current_opcode != xtensa_loop_opcode)))
- {
- if (fragP->tc_frag_data.is_no_transform)
- as_bad (_("loop containing less than three instructions may trigger hardware errata"));
- else
- relax_frag_add_nop (fragP);
- }
- frag_wane (fragP);
- }
- }
- }
+ if (fragP->fr_type == rs_machine_dependent
+ && fragP->fr_subtype == RELAX_ADD_NOP_IF_SHORT_LOOP)
+ {
+ if (count_insns_to_loop_end (fragP->fr_next, TRUE, 3) < 3
+ && (branch_before_loop_end (fragP->fr_next)
+ || (workaround_all_short_loops
+ && current_opcode != XTENSA_UNDEFINED
+ && current_opcode != xtensa_loop_opcode)))
+ {
+ if (fragP->tc_frag_data.is_no_transform)
+ as_bad (_("loop containing less than three instructions may trigger hardware errata"));
+ else
+ relax_frag_add_nop (fragP);
+ }
+ frag_wane (fragP);
+ }
+ }
+ }
}
@@ -7697,50 +7767,51 @@ xtensa_sanity_check (void)
{
char *file_name;
unsigned line;
-
frchainS *frchP;
+ asection *s;
as_where (&file_name, &line);
- for (frchP = frchain_root; frchP; frchP = frchP->frch_next)
- {
- fragS *fragP;
-
- /* Walk over all of the fragments in a subsection. */
- for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
- {
- /* Currently we only check for empty loops here. */
- if (fragP->fr_type == rs_machine_dependent
- && fragP->fr_subtype == RELAX_IMMED)
- {
- static xtensa_insnbuf insnbuf = NULL;
- TInsn t_insn;
-
- if (fragP->fr_opcode != NULL)
- {
- if (!insnbuf)
- insnbuf = xtensa_insnbuf_alloc (xtensa_default_isa);
- tinsn_from_chars (&t_insn, fragP->fr_opcode, 0);
- tinsn_immed_from_frag (&t_insn, fragP, 0);
+ for (s = stdoutput->sections; s; s = s->next)
+ for (frchP = seg_info (s)->frchainP; frchP; frchP = frchP->frch_next)
+ {
+ fragS *fragP;
- if (xtensa_opcode_is_loop (xtensa_default_isa,
- t_insn.opcode) == 1)
- {
- if (is_empty_loop (&t_insn, fragP))
- {
- new_logical_line (fragP->fr_file, fragP->fr_line);
- as_bad (_("invalid empty loop"));
- }
- if (!is_local_forward_loop (&t_insn, fragP))
- {
- new_logical_line (fragP->fr_file, fragP->fr_line);
- as_bad (_("loop target does not follow "
- "loop instruction in section"));
- }
- }
- }
- }
- }
- }
+ /* Walk over all of the fragments in a subsection. */
+ for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next)
+ {
+ if (fragP->fr_type == rs_machine_dependent
+ && fragP->fr_subtype == RELAX_SLOTS
+ && fragP->tc_frag_data.slot_subtypes[0] == RELAX_IMMED)
+ {
+ static xtensa_insnbuf insnbuf = NULL;
+ TInsn t_insn;
+
+ if (fragP->fr_opcode != NULL)
+ {
+ if (!insnbuf)
+ insnbuf = xtensa_insnbuf_alloc (xtensa_default_isa);
+ tinsn_from_chars (&t_insn, fragP->fr_opcode, 0);
+ tinsn_immed_from_frag (&t_insn, fragP, 0);
+
+ if (xtensa_opcode_is_loop (xtensa_default_isa,
+ t_insn.opcode) == 1)
+ {
+ if (is_empty_loop (&t_insn, fragP))
+ {
+ new_logical_line (fragP->fr_file, fragP->fr_line);
+ as_bad (_("invalid empty loop"));
+ }
+ if (!is_local_forward_loop (&t_insn, fragP))
+ {
+ new_logical_line (fragP->fr_file, fragP->fr_line);
+ as_bad (_("loop target does not follow "
+ "loop instruction in section"));
+ }
+ }
+ }
+ }
+ }
+ }
new_logical_line (file_name, line);
}
@@ -7806,7 +7877,7 @@ is_local_forward_loop (const TInsn *insn, fragS *fragP)
if (insn->insn_type != ITYPE_INSN)
return FALSE;
- if (xtensa_opcode_is_loop (xtensa_default_isa, insn->opcode) == 0)
+ if (xtensa_opcode_is_loop (xtensa_default_isa, insn->opcode) != 1)
return FALSE;
if (insn->ntok <= LOOP_IMMED_OPN)
@@ -7838,6 +7909,55 @@ is_local_forward_loop (const TInsn *insn, fragS *fragP)
return FALSE;
}
+
+#define XTINFO_NAME "Xtensa_Info"
+#define XTINFO_NAMESZ 12
+#define XTINFO_TYPE 1
+
+static void
+xtensa_add_config_info (void)
+{
+ asection *info_sec;
+ char *data, *p;
+ int sz;
+
+ info_sec = subseg_new (".xtensa.info", 0);
+ bfd_set_section_flags (stdoutput, info_sec, SEC_HAS_CONTENTS | SEC_READONLY);
+
+ data = xmalloc (100);
+ sprintf (data, "USE_ABSOLUTE_LITERALS=%d\nABI=%d\n",
+ XSHAL_USE_ABSOLUTE_LITERALS, XSHAL_ABI);
+ sz = strlen (data) + 1;
+
+ /* Add enough null terminators to pad to a word boundary. */
+ do
+ data[sz++] = 0;
+ while ((sz & 3) != 0);
+
+ /* Follow the standard note section layout:
+ First write the length of the name string. */
+ p = frag_more (4);
+ md_number_to_chars (p, (valueT) XTINFO_NAMESZ, 4);
+
+ /* Next comes the length of the "descriptor", i.e., the actual data. */
+ p = frag_more (4);
+ md_number_to_chars (p, (valueT) sz, 4);
+
+ /* Write the note type. */
+ p = frag_more (4);
+ md_number_to_chars (p, (valueT) XTINFO_TYPE, 4);
+
+ /* Write the name field. */
+ p = frag_more (XTINFO_NAMESZ);
+ memcpy (p, XTINFO_NAME, XTINFO_NAMESZ);
+
+ /* Finally, write the descriptor. */
+ p = frag_more (sz);
+ memcpy (p, data, sz);
+
+ free (data);
+}
+
/* Alignment Functions. */
@@ -8228,6 +8348,7 @@ xtensa_relax_frag (fragS *fragP, long stretch, int *stretched_p)
case RELAX_IMMED:
case RELAX_IMMED_STEP1:
case RELAX_IMMED_STEP2:
+ case RELAX_IMMED_STEP3:
/* Place the immediate. */
new_stretch += relax_frag_immed
(now_seg, fragP, stretch,
@@ -8612,7 +8733,7 @@ future_alignment_required (fragS *fragP, long stretch ATTRIBUTE_UNUSED)
c 0 2 1 (case 5b makes this case unnecessary)
6a 2 0 0
b 1 0 3
- c 0 1 4 (case 6b makes this case unneccesary)
+ c 0 1 4 (case 6b makes this case unnecessary)
d 1 1 1 (case 6a makes this case unnecessary)
e 0 2 2 (case 6a makes this case unnecessary)
f 0 3 0 (case 6a makes this case unnecessary)
@@ -8792,7 +8913,7 @@ relax_frag_immed (segT segP,
tinsn = cur_vinsn.slots[slot];
tinsn_immed_from_frag (&tinsn, fragP, slot);
- if (estimate_only && xtensa_opcode_is_loop (isa, tinsn.opcode))
+ if (estimate_only && xtensa_opcode_is_loop (isa, tinsn.opcode) == 1)
return 0;
if (workaround_b_j_loop_end && ! fragP->tc_frag_data.is_no_transform)
@@ -8945,6 +9066,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT sec, fragS *fragp)
case RELAX_IMMED:
case RELAX_IMMED_STEP1:
case RELAX_IMMED_STEP2:
+ case RELAX_IMMED_STEP3:
/* Place the immediate. */
convert_frag_immed
(sec, fragp,
@@ -9292,10 +9414,7 @@ convert_frag_immed (segT segP,
/* Add a fixup. */
target_seg = S_GET_SEGMENT (lit_sym);
assert (target_seg);
- if (tinsn->tok[0].X_op == O_pltrel)
- reloc_type = BFD_RELOC_XTENSA_PLT;
- else
- reloc_type = BFD_RELOC_32;
+ reloc_type = map_operator_to_reloc (tinsn->tok[0].X_op);
fix_new_exp_in_seg (target_seg, 0, lit_frag, 0, 4,
&tinsn->tok[0], FALSE, reloc_type);
break;
@@ -9476,11 +9595,6 @@ convert_frag_immed_finish_loop (segT segP, fragS *fragP, TInsn *tinsn)
target = 0;
}
- know (symbolP);
- know (symbolP->sy_frag);
- know (!(S_GET_SEGMENT (symbolP) == absolute_section)
- || symbol_get_frag (symbolP) == &zero_address_frag);
-
loop_length = target - (fragP->fr_address + fragP->fr_fix);
loop_length_hi = loop_length & ~0x0ff;
loop_length_lo = loop_length & 0x0ff;
@@ -9679,15 +9793,17 @@ xtensa_move_literals (void)
sym_list *lit;
mark_literal_frags (literal_head->next);
- mark_literal_frags (init_literal_head->next);
- mark_literal_frags (fini_literal_head->next);
if (use_literal_section)
return;
- segment = literal_head->next;
- while (segment)
+ for (segment = literal_head->next; segment; segment = segment->next)
{
+ /* Keep the literals for .init and .fini in separate sections. */
+ if (!strcmp (segment_name (segment->seg), INIT_SECTION_NAME)
+ || !strcmp (segment_name (segment->seg), FINI_SECTION_NAME))
+ continue;
+
frchain_from = seg_info (segment->seg)->frchainP;
search_frag = frchain_from->frch_root;
literal_pool = NULL;
@@ -9728,17 +9844,14 @@ xtensa_move_literals (void)
frchain_to = literal_pool->tc_frag_data.lit_frchain;
assert (frchain_to);
}
- insert_after = literal_pool;
-
- while (insert_after->fr_next->fr_subtype != RELAX_LITERAL_POOL_END)
- insert_after = insert_after->fr_next;
-
+ insert_after = literal_pool->tc_frag_data.literal_frag;
dest_seg = insert_after->fr_next->tc_frag_data.lit_seg;
*frag_splice = next_frag;
search_frag->fr_next = insert_after->fr_next;
insert_after->fr_next = search_frag;
search_frag->tc_frag_data.lit_seg = dest_seg;
+ literal_pool->tc_frag_data.literal_frag = search_frag;
/* Now move any fixups associated with this frag to the
right section. */
@@ -9771,7 +9884,6 @@ xtensa_move_literals (void)
}
frchain_from->fix_tail = NULL;
xtensa_restore_emit_state (&state);
- segment = segment->next;
}
/* Now fix up the SEGMENT value for all the literal symbols. */
@@ -9852,8 +9964,6 @@ xtensa_reorder_segments (void)
/* Now that we have the last section, push all the literal
sections to the end. */
xtensa_reorder_seg_list (literal_head, last_sec);
- xtensa_reorder_seg_list (init_literal_head, last_sec);
- xtensa_reorder_seg_list (fini_literal_head, last_sec);
/* Now perform the final error check. */
for (sec = stdoutput->sections; sec != NULL; sec = sec->next)
@@ -9871,10 +9981,8 @@ xtensa_switch_to_literal_fragment (emit_state *result)
{
if (directive_state[directive_absolute_literals])
{
- cache_literal_section (0, default_lit_sections.lit4_seg_name,
- &default_lit_sections.lit4_seg, FALSE);
- xtensa_switch_section_emit_state (result,
- default_lit_sections.lit4_seg, 0);
+ segT lit4_seg = cache_literal_section (TRUE);
+ xtensa_switch_section_emit_state (result, lit4_seg, 0);
}
else
xtensa_switch_to_non_abs_literal_fragment (result);
@@ -9888,17 +9996,11 @@ xtensa_switch_to_literal_fragment (emit_state *result)
static void
xtensa_switch_to_non_abs_literal_fragment (emit_state *result)
{
- /* When we mark a literal pool location, we want to put a frag in
- the literal pool that points to it. But to do that, we want to
- switch_to_literal_fragment. But literal sections don't have
- literal pools, so their location is always null, so we would
- recurse forever. This is kind of hacky, but it works. */
-
static bfd_boolean recursive = FALSE;
fragS *pool_location = get_literal_pool_location (now_seg);
+ segT lit_seg;
bfd_boolean is_init =
(now_seg && !strcmp (segment_name (now_seg), INIT_SECTION_NAME));
-
bfd_boolean is_fini =
(now_seg && !strcmp (segment_name (now_seg), FINI_SECTION_NAME));
@@ -9908,39 +10010,20 @@ xtensa_switch_to_non_abs_literal_fragment (emit_state *result)
&& !is_init && ! is_fini)
{
as_bad (_("literal pool location required for text-section-literals; specify with .literal_position"));
+
+ /* When we mark a literal pool location, we want to put a frag in
+ the literal pool that points to it. But to do that, we want to
+ switch_to_literal_fragment. But literal sections don't have
+ literal pools, so their location is always null, so we would
+ recurse forever. This is kind of hacky, but it works. */
+
recursive = TRUE;
xtensa_mark_literal_pool_location ();
recursive = FALSE;
}
- /* Special case: If we are in the ".fini" or ".init" section, then
- we will ALWAYS be generating to the ".fini.literal" and
- ".init.literal" sections. */
-
- if (is_init)
- {
- cache_literal_section (init_literal_head,
- default_lit_sections.init_lit_seg_name,
- &default_lit_sections.init_lit_seg, TRUE);
- xtensa_switch_section_emit_state (result,
- default_lit_sections.init_lit_seg, 0);
- }
- else if (is_fini)
- {
- cache_literal_section (fini_literal_head,
- default_lit_sections.fini_lit_seg_name,
- &default_lit_sections.fini_lit_seg, TRUE);
- xtensa_switch_section_emit_state (result,
- default_lit_sections.fini_lit_seg, 0);
- }
- else
- {
- cache_literal_section (literal_head,
- default_lit_sections.lit_seg_name,
- &default_lit_sections.lit_seg, TRUE);
- xtensa_switch_section_emit_state (result,
- default_lit_sections.lit_seg, 0);
- }
+ lit_seg = cache_literal_section (FALSE);
+ xtensa_switch_section_emit_state (result, lit_seg, 0);
if (!use_literal_section
&& !is_init && !is_fini
@@ -9984,49 +10067,129 @@ xtensa_restore_emit_state (emit_state *state)
}
-/* Get a segment of a given name. If the segment is already
- present, return it; otherwise, create a new one. */
+/* Predicate function used to look up a section in a particular group. */
-static void
-cache_literal_section (seg_list *head,
- const char *name,
- segT *pseg,
- bfd_boolean is_code)
+static bfd_boolean
+match_section_group (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *inf)
{
- segT current_section = now_seg;
- int current_subsec = now_subseg;
- segT seg;
+ const char *gname = inf;
+ const char *group_name = elf_group_name (sec);
+
+ return (group_name == gname
+ || (group_name != NULL
+ && gname != NULL
+ && strcmp (group_name, gname) == 0));
+}
- if (*pseg != 0)
- return;
- /* Check if the named section exists. */
- for (seg = stdoutput->sections; seg; seg = seg->next)
+/* Get the literal section to be used for the current text section.
+ The result may be cached in the default_lit_sections structure. */
+
+static segT
+cache_literal_section (bfd_boolean use_abs_literals)
+{
+ const char *text_name, *group_name = 0;
+ char *base_name, *name, *suffix;
+ segT *pcached;
+ segT seg, current_section;
+ int current_subsec;
+ bfd_boolean linkonce = FALSE;
+
+ /* Save the current section/subsection. */
+ current_section = now_seg;
+ current_subsec = now_subseg;
+
+ /* Clear the cached values if they are no longer valid. */
+ if (now_seg != default_lit_sections.current_text_seg)
{
- if (!strcmp (segment_name (seg), name))
- break;
+ default_lit_sections.current_text_seg = now_seg;
+ default_lit_sections.lit_seg = NULL;
+ default_lit_sections.lit4_seg = NULL;
}
- if (!seg)
+ /* Check if the literal section is already cached. */
+ if (use_abs_literals)
+ pcached = &default_lit_sections.lit4_seg;
+ else
+ pcached = &default_lit_sections.lit_seg;
+
+ if (*pcached)
+ return *pcached;
+
+ text_name = default_lit_sections.lit_prefix;
+ if (! text_name || ! *text_name)
{
- /* Create a new literal section. */
- seg = subseg_new (name, (subsegT) 0);
- if (head)
+ text_name = segment_name (current_section);
+ group_name = elf_group_name (current_section);
+ linkonce = (current_section->flags & SEC_LINK_ONCE) != 0;
+ }
+
+ base_name = use_abs_literals ? ".lit4" : ".literal";
+ if (group_name)
+ {
+ name = xmalloc (strlen (base_name) + strlen (group_name) + 2);
+ sprintf (name, "%s.%s", base_name, group_name);
+ }
+ else if (strncmp (text_name, ".gnu.linkonce.", linkonce_len) == 0)
+ {
+ suffix = strchr (text_name + linkonce_len, '.');
+
+ name = xmalloc (linkonce_len + strlen (base_name) + 1
+ + (suffix ? strlen (suffix) : 0));
+ strcpy (name, ".gnu.linkonce");
+ strcat (name, base_name);
+ if (suffix)
+ strcat (name, suffix);
+ linkonce = TRUE;
+ }
+ else
+ {
+ /* If the section name ends with ".text", then replace that suffix
+ instead of appending an additional suffix. */
+ size_t len = strlen (text_name);
+ if (len >= 5 && strcmp (text_name + len - 5, ".text") == 0)
+ len -= 5;
+
+ name = xmalloc (len + strlen (base_name) + 1);
+ strcpy (name, text_name);
+ strcpy (name + len, base_name);
+ }
+
+ /* Canonicalize section names to allow renaming literal sections.
+ The group name, if any, came from the current text section and
+ has already been canonicalized. */
+ name = tc_canonicalize_symbol_name (name);
+
+ seg = bfd_get_section_by_name_if (stdoutput, name, match_section_group,
+ (void *) group_name);
+ if (! seg)
+ {
+ flagword flags;
+
+ seg = subseg_force_new (name, 0);
+
+ if (! use_abs_literals)
{
- /* Add the newly created literal segment to the specified list. */
+ /* Add the newly created literal segment to the list. */
seg_list *n = (seg_list *) xmalloc (sizeof (seg_list));
n->seg = seg;
- n->next = head->next;
- head->next = n;
+ n->next = literal_head->next;
+ literal_head->next = n;
}
- bfd_set_section_flags (stdoutput, seg, SEC_HAS_CONTENTS |
- SEC_READONLY | SEC_ALLOC | SEC_LOAD
- | (is_code ? SEC_CODE : SEC_DATA));
+
+ flags = (SEC_HAS_CONTENTS | SEC_READONLY | SEC_ALLOC | SEC_LOAD
+ | (linkonce ? (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD) : 0)
+ | (use_abs_literals ? SEC_DATA : SEC_CODE));
+
+ elf_group_name (seg) = group_name;
+
+ bfd_set_section_flags (stdoutput, seg, flags);
bfd_set_section_alignment (stdoutput, seg, 2);
}
- *pseg = seg;
+ *pcached = seg;
subseg_set (current_section, current_subsec);
+ return seg;
}
@@ -10045,7 +10208,6 @@ static void xtensa_create_property_segments
static void xtensa_create_xproperty_segments
(frag_flags_fn, const char *, xt_section_type);
static segment_info_type *retrieve_segment_info (segT);
-static segT retrieve_xtensa_section (char *);
static bfd_boolean section_has_property (segT, frag_predicate);
static bfd_boolean section_has_xproperty (segT, frag_flags_fn);
static void add_xt_block_frags
@@ -10063,10 +10225,9 @@ void
xtensa_post_relax_hook (void)
{
xtensa_move_seg_list_to_beginning (literal_head);
- xtensa_move_seg_list_to_beginning (init_literal_head);
- xtensa_move_seg_list_to_beginning (fini_literal_head);
xtensa_find_unmarked_state_frags ();
+ xtensa_mark_frags_for_org ();
xtensa_create_property_segments (get_frag_is_literal,
NULL,
@@ -10120,9 +10281,8 @@ xtensa_create_property_segments (frag_predicate property_function,
if (section_has_property (sec, property_function))
{
- char *property_section_name =
- xtensa_get_property_section_name (sec, section_name_base);
- segT insn_sec = retrieve_xtensa_section (property_section_name);
+ segT insn_sec =
+ xtensa_get_property_section (sec, section_name_base);
segment_info_type *xt_seg_info = retrieve_segment_info (insn_sec);
xtensa_block_info **xt_blocks =
&xt_seg_info->tc_segment_info_data.blocks[sec_type];
@@ -10253,9 +10413,8 @@ xtensa_create_xproperty_segments (frag_flags_fn flag_fn,
if (section_has_xproperty (sec, flag_fn))
{
- char *property_section_name =
- xtensa_get_property_section_name (sec, section_name_base);
- segT insn_sec = retrieve_xtensa_section (property_section_name);
+ segT insn_sec =
+ xtensa_get_property_section (sec, section_name_base);
segment_info_type *xt_seg_info = retrieve_segment_info (insn_sec);
xtensa_block_info **xt_blocks =
&xt_seg_info->tc_segment_info_data.blocks[sec_type];
@@ -10384,7 +10543,6 @@ retrieve_segment_info (segT seg)
frchainP->frch_root = NULL;
frchainP->frch_last = NULL;
frchainP->frch_next = NULL;
- frchainP->frch_seg = seg;
frchainP->frch_subseg = 0;
frchainP->fix_root = NULL;
frchainP->fix_tail = NULL;
@@ -10400,29 +10558,6 @@ retrieve_segment_info (segT seg)
}
-static segT
-retrieve_xtensa_section (char *sec_name)
-{
- bfd *abfd = stdoutput;
- flagword flags, out_flags, link_once_flags;
- segT s;
-
- flags = bfd_get_section_flags (abfd, now_seg);
- link_once_flags = (flags & SEC_LINK_ONCE);
- if (link_once_flags)
- link_once_flags |= (flags & SEC_LINK_DUPLICATES);
- out_flags = (SEC_RELOC | SEC_HAS_CONTENTS | SEC_READONLY | link_once_flags);
-
- s = bfd_make_section_old_way (abfd, sec_name);
- if (s == NULL)
- as_bad (_("could not create section %s"), sec_name);
- if (!bfd_set_section_flags (abfd, s, out_flags))
- as_bad (_("invalid flag combination on section %s"), sec_name);
-
- return s;
-}
-
-
static bfd_boolean
section_has_property (segT sec, frag_predicate property_function)
{
@@ -10553,6 +10688,9 @@ get_frag_property_flags (const fragS *fragP, frag_flags *prop_flags)
xtensa_frag_flags_init (prop_flags);
if (fragP->tc_frag_data.is_literal)
prop_flags->is_literal = TRUE;
+ if (fragP->tc_frag_data.is_specific_opcode
+ || fragP->tc_frag_data.is_no_transform)
+ prop_flags->is_no_transform = TRUE;
if (fragP->tc_frag_data.is_unreachable)
prop_flags->is_unreachable = TRUE;
else if (fragP->tc_frag_data.is_insn)
@@ -10562,9 +10700,6 @@ get_frag_property_flags (const fragS *fragP, frag_flags *prop_flags)
prop_flags->insn.is_loop_target = TRUE;
if (fragP->tc_frag_data.is_branch_target)
prop_flags->insn.is_branch_target = TRUE;
- if (fragP->tc_frag_data.is_specific_opcode
- || fragP->tc_frag_data.is_no_transform)
- prop_flags->insn.is_no_transform = TRUE;
if (fragP->tc_frag_data.is_no_density)
prop_flags->insn.is_no_density = TRUE;
if (fragP->tc_frag_data.use_absolute_literals)
@@ -10602,8 +10737,8 @@ frag_flags_to_number (const frag_flags *prop_flags)
if (prop_flags->insn.is_no_density)
num |= XTENSA_PROP_INSN_NO_DENSITY;
- if (prop_flags->insn.is_no_transform)
- num |= XTENSA_PROP_INSN_NO_TRANSFORM;
+ if (prop_flags->is_no_transform)
+ num |= XTENSA_PROP_NO_TRANSFORM;
if (prop_flags->insn.is_no_reorder)
num |= XTENSA_PROP_INSN_NO_REORDER;
if (prop_flags->insn.is_abslit)
@@ -10642,8 +10777,8 @@ xtensa_frag_flags_combinable (const frag_flags *prop_flags_1,
if (prop_flags_1->insn.is_no_density !=
prop_flags_2->insn.is_no_density)
return FALSE;
- if (prop_flags_1->insn.is_no_transform !=
- prop_flags_2->insn.is_no_transform)
+ if (prop_flags_1->is_no_transform !=
+ prop_flags_2->is_no_transform)
return FALSE;
if (prop_flags_1->insn.is_no_reorder !=
prop_flags_2->insn.is_no_reorder)
@@ -10930,7 +11065,7 @@ istack_push_space (IStack *stack)
TInsn *insn;
assert (!istack_full (stack));
insn = &stack->insn[rec];
- memset (insn, 0, sizeof (TInsn));
+ tinsn_init (insn);
stack->ninsn++;
return insn;
}
@@ -10945,7 +11080,7 @@ istack_pop (IStack *stack)
int rec = stack->ninsn - 1;
assert (!istack_empty (stack));
stack->ninsn--;
- memset (&stack->insn[rec], 0, sizeof (TInsn));
+ tinsn_init (&stack->insn[rec]);
}
@@ -10958,17 +11093,6 @@ tinsn_init (TInsn *dst)
}
-/* Get the ``num''th token of the TInsn.
- It is illegal to call this if num > insn->ntoks. */
-
-expressionS *
-tinsn_get_tok (TInsn *insn, int num)
-{
- assert (num < insn->ntok);
- return &insn->tok[num];
-}
-
-
/* Return TRUE if ANY of the operands in the insn are symbolic. */
static bfd_boolean
diff --git a/gas/config/tc-xtensa.h b/gas/config/tc-xtensa.h
index 71f1ebbd3b38..40653213d311 100644
--- a/gas/config/tc-xtensa.h
+++ b/gas/config/tc-xtensa.h
@@ -1,5 +1,5 @@
/* tc-xtensa.h -- Header file for tc-xtensa.c.
- Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -131,18 +131,20 @@ enum xtensa_relax_statesE
RELAX_IMMED,
/* The last instruction in this fragment (at->fr_opcode) contains
- the value defined by fr_symbol (fr_offset = 0). If the value
- does not fit, use the specified expansion. This is similar to
- "NARROW", except that these may not be expanded in order to align
- code. */
+ an immediate or symbol. If the value does not fit, relax the
+ opcode using expansions from the relax table. */
RELAX_IMMED_STEP1,
/* The last instruction in this fragment (at->fr_opcode) contains a
- literal. It has already been expanded at least 1 step. */
+ literal. It has already been expanded 1 step. */
RELAX_IMMED_STEP2,
/* The last instruction in this fragment (at->fr_opcode) contains a
- literal. It has already been expanded at least 2 steps. */
+ literal. It has already been expanded 2 steps. */
+
+ RELAX_IMMED_STEP3,
+ /* The last instruction in this fragment (at->fr_opcode) contains a
+ literal. It has already been expanded 3 steps. */
RELAX_SLOTS,
/* There are instructions within the last VLIW instruction that need
@@ -167,12 +169,19 @@ enum xtensa_relax_statesE
branch is relaxed, then this frag will be converted to a
RELAX_UNREACHABLE frag. */
+ RELAX_ORG,
+ /* This marks the location as having previously been an rs_org frag.
+ rs_org frags are converted to fill-zero frags immediately after
+ relaxation. However, we need to remember where they were so we can
+ prevent the linker from changing the size of any frag between the
+ section start and the org frag. */
+
RELAX_NONE
};
/* This is used as a stopper to bound the number of steps that
can be taken. */
-#define RELAX_IMMED_MAXSTEPS (RELAX_IMMED_STEP2 - RELAX_IMMED)
+#define RELAX_IMMED_MAXSTEPS (RELAX_IMMED_STEP3 - RELAX_IMMED)
struct xtensa_frag_type
{
@@ -221,7 +230,9 @@ struct xtensa_frag_type
variable points to the frag where the literal will be stored. For
literal frags, this variable points to the nearest literal pool
location frag. This literal frag will be moved to after this
- location. */
+ location. For RELAX_LITERAL_POOL_BEGIN frags, this field points
+ to the frag immediately before the corresponding RELAX_LITERAL_POOL_END
+ frag, to make moving frags for this literal pool efficient. */
fragS *literal_frag;
/* The destination segment for literal frags. (Note that this is only
@@ -371,6 +382,9 @@ extern char *xtensa_section_rename (char *);
#define MD_APPLY_SYM_VALUE(FIX) 0
#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 0
+/* Use line number format that is amenable to linker relaxation. */
+#define DWARF2_USE_FIXED_ADVANCE_PC (linkrelax != 0)
+
/* Resource reservation info functions. */
diff --git a/gas/config/tc-z80.c b/gas/config/tc-z80.c
index 413e336a2c89..73b3fc831507 100644
--- a/gas/config/tc-z80.c
+++ b/gas/config/tc-z80.c
@@ -1,5 +1,5 @@
/* tc-z80.c -- Assemble code for the Zilog Z80 and ASCII R800
- Copyright 2005 Free Software Foundation, Inc.
+ Copyright 2005, 2006 Free Software Foundation, Inc.
Contributed by Arnold Metselaar <arnold_m@operamail.com>
This file is part of GAS, the GNU Assembler.
@@ -20,12 +20,8 @@
02110-1301, USA. */
#include "as.h"
-#include "listing.h"
-#include "bfd.h"
#include "safe-ctype.h"
#include "subsegs.h"
-#include "symbols.h"
-#include "libiberty.h"
/* Exported constants. */
const char comment_chars[] = ";\0";
diff --git a/gas/config/tc-z8k.c b/gas/config/tc-z8k.c
index 355ac12c2bbb..e3893668ff10 100644
--- a/gas/config/tc-z8k.c
+++ b/gas/config/tc-z8k.c
@@ -1,6 +1,6 @@
/* tc-z8k.c -- Assemble code for the Zilog Z800n
Copyright 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001, 2002, 2003,
- 2005 Free Software Foundation, Inc.
+ 2005, 2006 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -21,10 +21,7 @@
/* Written By Steve Chamberlain <sac@cygnus.com>. */
-#include <stdio.h>
-
#include "as.h"
-#include "bfd.h"
#include "safe-ctype.h"
#define DEFINE_TABLE
#include "opcodes/z8k-opc.h"
@@ -199,19 +196,34 @@ static int the_ctrl;
static int the_flags;
static int the_interrupt;
+/* Determine register number. src points to the ascii number
+ (after "rl", "rh", "r", "rr", or "rq"). If a character
+ outside the set of {0,',',')','('} follows the number,
+ return NULL to indicate that it's not a valid register
+ number. */
+
static char *
whatreg (unsigned int *reg, char *src)
{
+ unsigned int new_reg;
+
+ /* src[0] is already known to be a digit. */
if (ISDIGIT (src[1]))
{
- *reg = (src[0] - '0') * 10 + src[1] - '0';
- return src + 2;
+ new_reg = (src[0] - '0') * 10 + src[1] - '0';
+ src += 2;
}
else
{
- *reg = (src[0] - '0');
- return src + 1;
+ new_reg = (src[0] - '0');
+ src += 1;
}
+
+ if (src[0] != 0 && src[0] != ',' && src[0] != '(' && src[0] != ')')
+ return NULL;
+
+ *reg = new_reg;
+ return src;
}
/* Parse operands
@@ -234,7 +246,7 @@ whatreg (unsigned int *reg, char *src)
static char *
parse_reg (char *src, int *mode, unsigned int *reg)
{
- char *res = 0;
+ char *res = NULL;
char regno;
/* Check for stack pointer "sp" alias. */
@@ -260,9 +272,11 @@ parse_reg (char *src, int *mode, unsigned int *reg)
if (src[1] == 'r' || src[1] == 'R')
{
if (src[2] < '0' || src[2] > '9')
- return res; /* Assume no register name but a label starting with 'rr'. */
+ return NULL; /* Assume no register name but a label starting with 'rr'. */
*mode = CLASS_REG_LONG;
res = whatreg (reg, src + 2);
+ if (res == NULL)
+ return NULL; /* Not a valid register name. */
regno = *reg;
if (regno > 14)
as_bad (_("register rr%d out of range"), regno);
@@ -272,9 +286,11 @@ parse_reg (char *src, int *mode, unsigned int *reg)
else if (src[1] == 'h' || src[1] == 'H')
{
if (src[2] < '0' || src[2] > '9')
- return res; /* Assume no register name but a label starting with 'rh'. */
+ return NULL; /* Assume no register name but a label starting with 'rh'. */
*mode = CLASS_REG_BYTE;
res = whatreg (reg, src + 2);
+ if (res == NULL)
+ return NULL; /* Not a valid register name. */
regno = *reg;
if (regno > 7)
as_bad (_("register rh%d out of range"), regno);
@@ -282,9 +298,11 @@ parse_reg (char *src, int *mode, unsigned int *reg)
else if (src[1] == 'l' || src[1] == 'L')
{
if (src[2] < '0' || src[2] > '9')
- return res; /* Assume no register name but a label starting with 'rl'. */
+ return NULL; /* Assume no register name but a label starting with 'rl'. */
*mode = CLASS_REG_BYTE;
res = whatreg (reg, src + 2);
+ if (res == NULL)
+ return NULL; /* Not a valid register name. */
regno = *reg;
if (regno > 7)
as_bad (_("register rl%d out of range"), regno);
@@ -293,9 +311,11 @@ parse_reg (char *src, int *mode, unsigned int *reg)
else if (src[1] == 'q' || src[1] == 'Q')
{
if (src[2] < '0' || src[2] > '9')
- return res; /* Assume no register name but a label starting with 'rq'. */
+ return NULL; /* Assume no register name but a label starting with 'rq'. */
*mode = CLASS_REG_QUAD;
res = whatreg (reg, src + 2);
+ if (res == NULL)
+ return NULL; /* Not a valid register name. */
regno = *reg;
if (regno > 12)
as_bad (_("register rq%d out of range"), regno);
@@ -305,9 +325,11 @@ parse_reg (char *src, int *mode, unsigned int *reg)
else
{
if (src[1] < '0' || src[1] > '9')
- return res; /* Assume no register name but a label starting with 'r'. */
+ return NULL; /* Assume no register name but a label starting with 'r'. */
*mode = CLASS_REG_WORD;
res = whatreg (reg, src + 1);
+ if (res == NULL)
+ return NULL; /* Not a valid register name. */
regno = *reg;
if (regno > 15)
as_bad (_("register r%d out of range"), regno);
diff --git a/gas/config/te-pep.h b/gas/config/te-pep.h
new file mode 100644
index 000000000000..164b22d98403
--- /dev/null
+++ b/gas/config/te-pep.h
@@ -0,0 +1,10 @@
+#define TE_PEP
+#define COFF_WITH_pex64
+
+#define TE_PE
+#define LEX_AT (LEX_BEGIN_NAME | LEX_NAME) /* Can have @'s inside labels. */
+
+/* The PE format supports long section names. */
+#define COFF_LONG_SECTION_NAMES
+
+#include "obj-format.h"
diff --git a/gas/config/xtensa-istack.h b/gas/config/xtensa-istack.h
index 7d2471abd465..a6ec40b8388d 100644
--- a/gas/config/xtensa-istack.h
+++ b/gas/config/xtensa-istack.h
@@ -1,5 +1,5 @@
/* Declarations for stacks of tokenized Xtensa instructions.
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -48,8 +48,6 @@ typedef struct tinsn_struct
expressionS tok[MAX_INSN_ARGS];
unsigned linenum;
- struct fixP *fixup;
-
/* Filled out by relaxation_requirements: */
enum xtensa_relax_statesE subtype;
int literal_space;
@@ -79,7 +77,6 @@ void istack_pop (IStack *);
/* TInsn utilities. */
void tinsn_init (TInsn *);
-expressionS *tinsn_get_tok (TInsn *, int);
/* vliw_insn: bundles of TInsns. */
diff --git a/gas/config/xtensa-relax.c b/gas/config/xtensa-relax.c
index a0848820eb36..779c9076a424 100644
--- a/gas/config/xtensa-relax.c
+++ b/gas/config/xtensa-relax.c
@@ -1,5 +1,5 @@
/* Table of relaxations for Xtensa assembly.
- Copyright 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -49,8 +49,8 @@
The replacement language
INSN_REPL ::= INSN_LABEL_LIT ( ';' INSN_LABEL_LIT )*
INSN_LABEL_LIT ::= INSN_TEMPL
- | 'LABEL' num
- | 'LITERAL' num ' ' VARIABLE
+ | 'LABEL'
+ | 'LITERAL' VARIABLE
The operands in a PRECOND must be constants or variables bound by
the INSN_PATTERN.
@@ -72,12 +72,12 @@
movi.n instruction to the wide movi instruction.
A more complex example of a branch around:
- {"beqz %as,%label", "bnez %as,%LABEL0;j %label;LABEL0"}
+ {"beqz %as,%label", "bnez %as,%LABEL;j %label;LABEL"}
would convert a branch to a negated branch to the following instruction
with a jump to the original label.
An Xtensa-specific example that generates a literal:
- {"movi %at,%imm", "LITERAL0 %imm; l32r %at,%LITERAL0"}
+ {"movi %at,%imm", "LITERAL %imm; l32r %at,%LITERAL"}
will convert a movi instruction to an l32r of a literal
literal defined in the literal pool.
@@ -87,7 +87,7 @@
when the first and second operands are not the same as specified
by the "| %at!=%as" precondition clause.
{"l32i %at,%as,%imm | %at!=%as",
- "LITERAL0 %imm; l32r %at,%LITERAL0; add %at,%at,%as; l32i %at,%at,0"}
+ "LITERAL %imm; l32r %at,%LITERAL; add %at,%at,%as; l32i %at,%at,0"}
There is special case for loop instructions here, but because we do
not currently have the ability to represent the difference of two
@@ -247,7 +247,10 @@ struct string_pattern_pair_struct
addi.n a4, 0x1010
=> addi a4, 0x1010
=> addmi a4, 0x1010
- => addmi a4, 0x1000, addi a4, 0x10. */
+ => addmi a4, 0x1000, addi a4, 0x10.
+
+ See the comments in xg_assembly_relax for some important details
+ regarding how these chains must be built. */
static string_pattern_pair widen_spec_list[] =
{
@@ -268,7 +271,7 @@ static string_pattern_pair widen_spec_list[] =
/* Widening with literals or const16. */
{"movi %at,%imm ? IsaUseL32R ",
- "LITERAL0 %imm; l32r %at,%LITERAL0"},
+ "LITERAL %imm; l32r %at,%LITERAL"},
{"movi %at,%imm ? IsaUseConst16",
"const16 %at,HI16U(%imm); const16 %at,LOW16U(%imm)"},
@@ -279,19 +282,19 @@ static string_pattern_pair widen_spec_list[] =
/* In the end convert to either an l32r or const16. */
{"addmi %ar,%as,%imm | %ar!=%as ? IsaUseL32R",
- "LITERAL0 %imm; l32r %ar,%LITERAL0; add %ar,%as,%ar"},
+ "LITERAL %imm; l32r %ar,%LITERAL; add %ar,%as,%ar"},
{"addmi %ar,%as,%imm | %ar!=%as ? IsaUseConst16",
"const16 %ar,HI16U(%imm); const16 %ar,LOW16U(%imm); add %ar,%as,%ar"},
/* Widening the load instructions with too-large immediates */
{"l8ui %at,%as,%imm | %at!=%as ? IsaUseL32R",
- "LITERAL0 %imm; l32r %at,%LITERAL0; add %at,%at,%as; l8ui %at,%at,0"},
+ "LITERAL %imm; l32r %at,%LITERAL; add %at,%at,%as; l8ui %at,%at,0"},
{"l16si %at,%as,%imm | %at!=%as ? IsaUseL32R",
- "LITERAL0 %imm; l32r %at,%LITERAL0; add %at,%at,%as; l16si %at,%at,0"},
+ "LITERAL %imm; l32r %at,%LITERAL; add %at,%at,%as; l16si %at,%at,0"},
{"l16ui %at,%as,%imm | %at!=%as ? IsaUseL32R",
- "LITERAL0 %imm; l32r %at,%LITERAL0; add %at,%at,%as; l16ui %at,%at,0"},
+ "LITERAL %imm; l32r %at,%LITERAL; add %at,%at,%as; l16ui %at,%at,0"},
{"l32i %at,%as,%imm | %at!=%as ? IsaUseL32R",
- "LITERAL0 %imm; l32r %at,%LITERAL0; add %at,%at,%as; l32i %at,%at,0"},
+ "LITERAL %imm; l32r %at,%LITERAL; add %at,%at,%as; l32i %at,%at,0"},
/* Widening load instructions with const16s. */
{"l8ui %at,%as,%imm | %at!=%as ? IsaUseConst16",
@@ -307,7 +310,7 @@ static string_pattern_pair widen_spec_list[] =
hardcoded into its use is a modification of the final operand in
the instruction in bytes 9 and 12. */
{"loop %as,%label | %as!=1 ? IsaUseLoops",
- "loop %as,%LABEL0;"
+ "loop %as,%LABEL;"
"rsr.lend %as;" /* LEND */
"wsr.lbeg %as;" /* LBEG */
"addi %as, %as, 0;" /* lo8(%label-%LABEL1) */
@@ -316,11 +319,11 @@ static string_pattern_pair widen_spec_list[] =
"isync;"
"rsr.lcount %as;" /* LCOUNT */
"addi %as, %as, 1;" /* density -> addi.n %as, %as, 1 */
- "LABEL0"},
+ "LABEL"},
{"loopgtz %as,%label | %as!=1 ? IsaUseLoops",
"beqz %as,%label;"
"bltz %as,%label;"
- "loopgtz %as,%LABEL0;"
+ "loopgtz %as,%LABEL;"
"rsr.lend %as;" /* LEND */
"wsr.lbeg %as;" /* LBEG */
"addi %as, %as, 0;" /* lo8(%label-%LABEL1) */
@@ -329,10 +332,10 @@ static string_pattern_pair widen_spec_list[] =
"isync;"
"rsr.lcount %as;" /* LCOUNT */
"addi %as, %as, 1;" /* density -> addi.n %as, %as, 1 */
- "LABEL0"},
+ "LABEL"},
{"loopnez %as,%label | %as!=1 ? IsaUseLoops",
"beqz %as,%label;"
- "loopnez %as,%LABEL0;"
+ "loopnez %as,%LABEL;"
"rsr.lend %as;" /* LEND */
"wsr.lbeg %as;" /* LBEG */
"addi %as, %as, 0;" /* lo8(%label-%LABEL1) */
@@ -341,7 +344,7 @@ static string_pattern_pair widen_spec_list[] =
"isync;"
"rsr.lcount %as;" /* LCOUNT */
"addi %as, %as, 1;" /* density -> addi.n %as, %as, 1 */
- "LABEL0"},
+ "LABEL"},
/* Relaxing to wide branches. Order is important here. With wide
branches, there is more than one correct relaxation for an
@@ -376,54 +379,81 @@ static string_pattern_pair widen_spec_list[] =
/* Widening branch comparisons eq/ne to zero. Prefer relaxing to narrow
branches if the density option is available. */
- {"beqz %as,%label ? IsaUseDensityInstruction", "bnez.n %as,%LABEL0;j %label;LABEL0"},
- {"bnez %as,%label ? IsaUseDensityInstruction", "beqz.n %as,%LABEL0;j %label;LABEL0"},
- {"beqz %as,%label", "bnez %as,%LABEL0;j %label;LABEL0"},
- {"bnez %as,%label", "beqz %as,%LABEL0;j %label;LABEL0"},
+ {"beqz %as,%label ? IsaUseDensityInstruction", "bnez.n %as,%LABEL;j %label;LABEL"},
+ {"bnez %as,%label ? IsaUseDensityInstruction", "beqz.n %as,%LABEL;j %label;LABEL"},
+ {"beqz %as,%label", "bnez %as,%LABEL;j %label;LABEL"},
+ {"bnez %as,%label", "beqz %as,%LABEL;j %label;LABEL"},
+ {"WIDE.beqz %as,%label ? IsaUseDensityInstruction", "bnez.n %as,%LABEL;j %label;LABEL"},
+ {"WIDE.bnez %as,%label ? IsaUseDensityInstruction", "beqz.n %as,%LABEL;j %label;LABEL"},
+ {"WIDE.beqz %as,%label", "bnez %as,%LABEL;j %label;LABEL"},
+ {"WIDE.bnez %as,%label", "beqz %as,%LABEL;j %label;LABEL"},
/* Widening expect-taken branches. */
- {"beqzt %as,%label ? IsaUsePredictedBranches", "bnez %as,%LABEL0;j %label;LABEL0"},
- {"bnezt %as,%label ? IsaUsePredictedBranches", "beqz %as,%LABEL0;j %label;LABEL0"},
- {"beqt %as,%at,%label ? IsaUsePredictedBranches", "bne %as,%at,%LABEL0;j %label;LABEL0"},
- {"bnet %as,%at,%label ? IsaUsePredictedBranches", "beq %as,%at,%LABEL0;j %label;LABEL0"},
+ {"beqzt %as,%label ? IsaUsePredictedBranches", "bnez %as,%LABEL;j %label;LABEL"},
+ {"bnezt %as,%label ? IsaUsePredictedBranches", "beqz %as,%LABEL;j %label;LABEL"},
+ {"beqt %as,%at,%label ? IsaUsePredictedBranches", "bne %as,%at,%LABEL;j %label;LABEL"},
+ {"bnet %as,%at,%label ? IsaUsePredictedBranches", "beq %as,%at,%LABEL;j %label;LABEL"},
/* Widening branches from the Xtensa boolean option. */
- {"bt %bs,%label ? IsaUseBooleans", "bf %bs,%LABEL0;j %label;LABEL0"},
- {"bf %bs,%label ? IsaUseBooleans", "bt %bs,%LABEL0;j %label;LABEL0"},
+ {"bt %bs,%label ? IsaUseBooleans", "bf %bs,%LABEL;j %label;LABEL"},
+ {"bf %bs,%label ? IsaUseBooleans", "bt %bs,%LABEL;j %label;LABEL"},
/* Other branch-around-jump widenings. */
- {"bgez %as,%label", "bltz %as,%LABEL0;j %label;LABEL0"},
- {"bltz %as,%label", "bgez %as,%LABEL0;j %label;LABEL0"},
- {"beqi %as,%imm,%label", "bnei %as,%imm,%LABEL0;j %label;LABEL0"},
- {"bnei %as,%imm,%label", "beqi %as,%imm,%LABEL0;j %label;LABEL0"},
- {"bgei %as,%imm,%label", "blti %as,%imm,%LABEL0;j %label;LABEL0"},
- {"blti %as,%imm,%label", "bgei %as,%imm,%LABEL0;j %label;LABEL0"},
- {"bgeui %as,%imm,%label", "bltui %as,%imm,%LABEL0;j %label;LABEL0"},
- {"bltui %as,%imm,%label", "bgeui %as,%imm,%LABEL0;j %label;LABEL0"},
- {"bbci %as,%imm,%label", "bbsi %as,%imm,%LABEL0;j %label;LABEL0"},
- {"bbsi %as,%imm,%label", "bbci %as,%imm,%LABEL0;j %label;LABEL0"},
- {"beq %as,%at,%label", "bne %as,%at,%LABEL0;j %label;LABEL0"},
- {"bne %as,%at,%label", "beq %as,%at,%LABEL0;j %label;LABEL0"},
- {"bge %as,%at,%label", "blt %as,%at,%LABEL0;j %label;LABEL0"},
- {"blt %as,%at,%label", "bge %as,%at,%LABEL0;j %label;LABEL0"},
- {"bgeu %as,%at,%label", "bltu %as,%at,%LABEL0;j %label;LABEL0"},
- {"bltu %as,%at,%label", "bgeu %as,%at,%LABEL0;j %label;LABEL0"},
- {"bany %as,%at,%label", "bnone %as,%at,%LABEL0;j %label;LABEL0"},
- {"bnone %as,%at,%label", "bany %as,%at,%LABEL0;j %label;LABEL0"},
- {"ball %as,%at,%label", "bnall %as,%at,%LABEL0;j %label;LABEL0"},
- {"bnall %as,%at,%label", "ball %as,%at,%LABEL0;j %label;LABEL0"},
- {"bbc %as,%at,%label", "bbs %as,%at,%LABEL0;j %label;LABEL0"},
- {"bbs %as,%at,%label", "bbc %as,%at,%LABEL0;j %label;LABEL0"},
+ {"bgez %as,%label", "bltz %as,%LABEL;j %label;LABEL"},
+ {"bltz %as,%label", "bgez %as,%LABEL;j %label;LABEL"},
+ {"beqi %as,%imm,%label", "bnei %as,%imm,%LABEL;j %label;LABEL"},
+ {"bnei %as,%imm,%label", "beqi %as,%imm,%LABEL;j %label;LABEL"},
+ {"bgei %as,%imm,%label", "blti %as,%imm,%LABEL;j %label;LABEL"},
+ {"blti %as,%imm,%label", "bgei %as,%imm,%LABEL;j %label;LABEL"},
+ {"bgeui %as,%imm,%label", "bltui %as,%imm,%LABEL;j %label;LABEL"},
+ {"bltui %as,%imm,%label", "bgeui %as,%imm,%LABEL;j %label;LABEL"},
+ {"bbci %as,%imm,%label", "bbsi %as,%imm,%LABEL;j %label;LABEL"},
+ {"bbsi %as,%imm,%label", "bbci %as,%imm,%LABEL;j %label;LABEL"},
+ {"beq %as,%at,%label", "bne %as,%at,%LABEL;j %label;LABEL"},
+ {"bne %as,%at,%label", "beq %as,%at,%LABEL;j %label;LABEL"},
+ {"bge %as,%at,%label", "blt %as,%at,%LABEL;j %label;LABEL"},
+ {"blt %as,%at,%label", "bge %as,%at,%LABEL;j %label;LABEL"},
+ {"bgeu %as,%at,%label", "bltu %as,%at,%LABEL;j %label;LABEL"},
+ {"bltu %as,%at,%label", "bgeu %as,%at,%LABEL;j %label;LABEL"},
+ {"bany %as,%at,%label", "bnone %as,%at,%LABEL;j %label;LABEL"},
+ {"bnone %as,%at,%label", "bany %as,%at,%LABEL;j %label;LABEL"},
+ {"ball %as,%at,%label", "bnall %as,%at,%LABEL;j %label;LABEL"},
+ {"bnall %as,%at,%label", "ball %as,%at,%LABEL;j %label;LABEL"},
+ {"bbc %as,%at,%label", "bbs %as,%at,%LABEL;j %label;LABEL"},
+ {"bbs %as,%at,%label", "bbc %as,%at,%LABEL;j %label;LABEL"},
+
+ {"WIDE.bgez %as,%label", "bltz %as,%LABEL;j %label;LABEL"},
+ {"WIDE.bltz %as,%label", "bgez %as,%LABEL;j %label;LABEL"},
+ {"WIDE.beqi %as,%imm,%label", "bnei %as,%imm,%LABEL;j %label;LABEL"},
+ {"WIDE.bnei %as,%imm,%label", "beqi %as,%imm,%LABEL;j %label;LABEL"},
+ {"WIDE.bgei %as,%imm,%label", "blti %as,%imm,%LABEL;j %label;LABEL"},
+ {"WIDE.blti %as,%imm,%label", "bgei %as,%imm,%LABEL;j %label;LABEL"},
+ {"WIDE.bgeui %as,%imm,%label", "bltui %as,%imm,%LABEL;j %label;LABEL"},
+ {"WIDE.bltui %as,%imm,%label", "bgeui %as,%imm,%LABEL;j %label;LABEL"},
+ {"WIDE.bbci %as,%imm,%label", "bbsi %as,%imm,%LABEL;j %label;LABEL"},
+ {"WIDE.bbsi %as,%imm,%label", "bbci %as,%imm,%LABEL;j %label;LABEL"},
+ {"WIDE.beq %as,%at,%label", "bne %as,%at,%LABEL;j %label;LABEL"},
+ {"WIDE.bne %as,%at,%label", "beq %as,%at,%LABEL;j %label;LABEL"},
+ {"WIDE.bge %as,%at,%label", "blt %as,%at,%LABEL;j %label;LABEL"},
+ {"WIDE.blt %as,%at,%label", "bge %as,%at,%LABEL;j %label;LABEL"},
+ {"WIDE.bgeu %as,%at,%label", "bltu %as,%at,%LABEL;j %label;LABEL"},
+ {"WIDE.bltu %as,%at,%label", "bgeu %as,%at,%LABEL;j %label;LABEL"},
+ {"WIDE.bany %as,%at,%label", "bnone %as,%at,%LABEL;j %label;LABEL"},
+ {"WIDE.bnone %as,%at,%label", "bany %as,%at,%LABEL;j %label;LABEL"},
+ {"WIDE.ball %as,%at,%label", "bnall %as,%at,%LABEL;j %label;LABEL"},
+ {"WIDE.bnall %as,%at,%label", "ball %as,%at,%LABEL;j %label;LABEL"},
+ {"WIDE.bbc %as,%at,%label", "bbs %as,%at,%LABEL;j %label;LABEL"},
+ {"WIDE.bbs %as,%at,%label", "bbc %as,%at,%LABEL;j %label;LABEL"},
/* Expanding calls with literals. */
{"call0 %label,%ar0 ? IsaUseL32R",
- "LITERAL0 %label; l32r a0,%LITERAL0; callx0 a0,%ar0"},
+ "LITERAL %label; l32r a0,%LITERAL; callx0 a0,%ar0"},
{"call4 %label,%ar4 ? IsaUseL32R",
- "LITERAL0 %label; l32r a4,%LITERAL0; callx4 a4,%ar4"},
+ "LITERAL %label; l32r a4,%LITERAL; callx4 a4,%ar4"},
{"call8 %label,%ar8 ? IsaUseL32R",
- "LITERAL0 %label; l32r a8,%LITERAL0; callx8 a8,%ar8"},
+ "LITERAL %label; l32r a8,%LITERAL; callx8 a8,%ar8"},
{"call12 %label,%ar12 ? IsaUseL32R",
- "LITERAL0 %label; l32r a12,%LITERAL0; callx12 a12,%ar12"},
+ "LITERAL %label; l32r a12,%LITERAL; callx12 a12,%ar12"},
/* Expanding calls with const16. */
{"call0 %label,%ar0 ? IsaUseConst16",
@@ -615,26 +645,26 @@ append_op (BuildInstr *bi, BuildOp *b_op)
static void
-append_literal_op (BuildInstr *bi, unsigned op1, unsigned litnum)
+append_literal_op (BuildInstr *bi, unsigned op1)
{
BuildOp *b_op = (BuildOp *) xmalloc (sizeof (BuildOp));
b_op->op_num = op1;
b_op->typ = OP_LITERAL;
- b_op->op_data = litnum;
+ b_op->op_data = 0;
b_op->next = NULL;
append_op (bi, b_op);
}
static void
-append_label_op (BuildInstr *bi, unsigned op1, unsigned labnum)
+append_label_op (BuildInstr *bi, unsigned op1)
{
BuildOp *b_op = (BuildOp *) xmalloc (sizeof (BuildOp));
b_op->op_num = op1;
b_op->typ = OP_LABEL;
- b_op->op_data = labnum;
+ b_op->op_data = 0;
b_op->next = NULL;
append_op (bi, b_op);
}
@@ -982,30 +1012,6 @@ parse_constant (const char *in, unsigned *val_p)
}
-/* Match a pattern like "foo1" with
- parse_id_constant("foo1", "foo", &num).
- This may also be used to just match a number. */
-
-static bfd_boolean
-parse_id_constant (const char *in, const char *name, unsigned *val_p)
-{
- unsigned namelen = 0;
- const char *p;
-
- if (in == NULL)
- return FALSE;
-
- if (name != NULL)
- namelen = strlen (name);
-
- if (name != NULL && strncmp (in, name, namelen) != 0)
- return FALSE;
-
- p = &in[namelen];
- return parse_constant (p, val_p);
-}
-
-
static bfd_boolean
parse_special_fn (const char *name,
const char **fn_name_p,
@@ -1594,12 +1600,11 @@ build_transition (insn_pattern *initial_insn,
precond_e *precond;
insn_repl_e *r;
- unsigned label_count = 0;
- unsigned max_label_count = 0;
- bfd_boolean has_label = FALSE;
- unsigned literal_count = 0;
- opcode = xtensa_opcode_lookup (isa, initial_insn->t.opcode_name);
+ if (!wide_branch_opcode (initial_insn->t.opcode_name, ".w18", &opcode)
+ && !wide_branch_opcode (initial_insn->t.opcode_name, ".w15", &opcode))
+ opcode = xtensa_opcode_lookup (isa, initial_insn->t.opcode_name);
+
if (opcode == XTENSA_UNDEFINED)
{
/* It is OK to not be able to translate some of these opcodes. */
@@ -1661,35 +1666,26 @@ build_transition (insn_pattern *initial_insn,
{
op1 = get_opmatch (&initial_insn->t.operand_map, precond->opname1);
if (op1 == NULL)
- {
- as_fatal (_("opcode '%s': no bound opname '%s' "
- "for precondition in '%s'"),
- xtensa_opcode_name (isa, opcode),
- precond->opname1, from_string);
- return NULL;
- }
+ as_fatal (_("opcode '%s': no bound opname '%s' "
+ "for precondition in '%s'"),
+ xtensa_opcode_name (isa, opcode),
+ precond->opname1, from_string);
}
if (precond->opname2)
{
op2 = get_opmatch (&initial_insn->t.operand_map, precond->opname2);
if (op2 == NULL)
- {
- as_fatal (_("opcode '%s': no bound opname '%s' "
- "for precondition in %s"),
- xtensa_opcode_name (isa, opcode),
- precond->opname2, from_string);
- return NULL;
- }
+ as_fatal (_("opcode '%s': no bound opname '%s' "
+ "for precondition in %s"),
+ xtensa_opcode_name (isa, opcode),
+ precond->opname2, from_string);
}
if (op1 == NULL && op2 == NULL)
- {
- as_fatal (_("opcode '%s': precondition only contains "
- "constants in '%s'"),
- xtensa_opcode_name (isa, opcode), from_string);
- return NULL;
- }
+ as_fatal (_("opcode '%s': precondition only contains "
+ "constants in '%s'"),
+ xtensa_opcode_name (isa, opcode), from_string);
else if (op1 != NULL && op2 != NULL)
append_value_condition (tr, precond->cmpop,
op1->operand_num, op2->operand_num);
@@ -1704,12 +1700,11 @@ build_transition (insn_pattern *initial_insn,
tr->options = clone_req_option_list (initial_insn->options);
/* Generate the replacement instructions. Some of these
- "instructions" are actually labels and literals. The literals
- must be defined in order 0..n and a literal must be defined
- (e.g., "LITERAL0 %imm") before use (e.g., "%LITERAL0"). The
- labels must be defined in order, but they can be used before they
- are defined. Also there are a number of special operands (e.g.,
- HI24S). */
+ "instructions" are actually labels and literals. There can be at
+ most one literal and at most one label. A literal must be defined
+ (e.g., "LITERAL %imm") before use (e.g., "%LITERAL"). The labels
+ can be used before they are defined. Also there are a number of
+ special operands (e.g., HI24S). */
for (r = replace_insns->head; r != NULL; r = r->next)
{
@@ -1717,14 +1712,12 @@ build_transition (insn_pattern *initial_insn,
const char *opcode_name;
int operand_count;
opname_map_e *op;
- unsigned idnum = 0;
const char *fn_name;
const char *operand_arg_name;
bi = (BuildInstr *) xmalloc (sizeof (BuildInstr));
append_build_insn (tr, bi);
- bi->id = 0;
bi->opcode = XTENSA_UNDEFINED;
bi->ops = NULL;
bi->next = NULL;
@@ -1732,24 +1725,15 @@ build_transition (insn_pattern *initial_insn,
opcode_name = r->t.opcode_name;
operand_count = insn_templ_operand_count (&r->t);
- if (parse_id_constant (opcode_name, "LITERAL", &idnum))
+ if (strcmp (opcode_name, "LITERAL") == 0)
{
bi->typ = INSTR_LITERAL_DEF;
- bi->id = idnum;
- if (idnum != literal_count)
- as_fatal (_("generated literals must be numbered consecutively"));
- ++literal_count;
if (operand_count != 1)
as_fatal (_("expected one operand for generated literal"));
-
}
- else if (parse_id_constant (opcode_name, "LABEL", &idnum))
+ else if (strcmp (opcode_name, "LABEL") == 0)
{
bi->typ = INSTR_LABEL_DEF;
- bi->id = idnum;
- if (idnum != label_count)
- as_fatal (_("generated labels must be numbered consecutively"));
- ++label_count;
if (operand_count != 0)
as_fatal (_("expected 0 operands for generated label"));
}
@@ -1783,22 +1767,12 @@ build_transition (insn_pattern *initial_insn,
if (op_is_constant (op))
append_constant_op (bi, op->operand_num, op_get_constant (op));
- else if (parse_id_constant (op->operand_name, "%LITERAL", &idnum))
- {
- if (idnum >= literal_count)
- as_fatal (_("opcode %s: replacement "
- "literal %d >= literal_count(%d)"),
- opcode_name, idnum, literal_count);
- append_literal_op (bi, op->operand_num, idnum);
- }
- else if (parse_id_constant (op->operand_name, "%LABEL", &idnum))
- {
- has_label = TRUE;
- if (idnum > max_label_count)
- max_label_count = idnum;
- append_label_op (bi, op->operand_num, idnum);
- }
- else if (parse_id_constant (op->operand_name, "a", &idnum))
+ else if (strcmp (op->operand_name, "%LITERAL") == 0)
+ append_literal_op (bi, op->operand_num);
+ else if (strcmp (op->operand_name, "%LABEL") == 0)
+ append_label_op (bi, op->operand_num);
+ else if (op->operand_name[0] == 'a'
+ && parse_constant (op->operand_name + 1, &idnum))
append_constant_op (bi, op->operand_num, idnum);
else if (op->operand_name[0] == '%')
{
@@ -1806,14 +1780,9 @@ build_transition (insn_pattern *initial_insn,
orig_op = get_opmatch (&initial_insn->t.operand_map,
op->operand_name);
if (orig_op == NULL)
- {
- as_fatal (_("opcode %s: unidentified operand '%s' in '%s'"),
- opcode_name, op->operand_name, to_string);
-
- append_constant_op (bi, op->operand_num, 0);
- }
- else
- append_field_op (bi, op->operand_num, orig_op->operand_num);
+ as_fatal (_("opcode %s: unidentified operand '%s' in '%s'"),
+ opcode_name, op->operand_name, to_string);
+ append_field_op (bi, op->operand_num, orig_op->operand_num);
}
else if (parse_special_fn (op->operand_name,
&fn_name, &operand_arg_name))
@@ -1837,30 +1806,16 @@ build_transition (insn_pattern *initial_insn,
orig_op = get_opmatch (&initial_insn->t.operand_map,
operand_arg_name);
if (orig_op == NULL)
- {
- as_fatal (_("opcode %s: unidentified operand '%s' in '%s'"),
- opcode_name, op->operand_name, to_string);
- append_constant_op (bi, op->operand_num, 0);
- }
- else
- append_user_fn_field_op (bi, op->operand_num,
- typ, orig_op->operand_num);
+ as_fatal (_("opcode %s: unidentified operand '%s' in '%s'"),
+ opcode_name, op->operand_name, to_string);
+ append_user_fn_field_op (bi, op->operand_num,
+ typ, orig_op->operand_num);
}
else
- {
- as_fatal (_("opcode %s: could not parse operand '%s' in '%s'"),
- opcode_name, op->operand_name, to_string);
- append_constant_op (bi, op->operand_num, 0);
- }
+ as_fatal (_("opcode %s: could not parse operand '%s' in '%s'"),
+ opcode_name, op->operand_name, to_string);
}
}
- if (has_label && max_label_count >= label_count)
- {
- as_fatal (_("opcode %s: replacement label %d >= label_count(%d)"),
- xtensa_opcode_name (isa, opcode),
- max_label_count, label_count);
- return NULL;
- }
return tr;
}
@@ -1898,20 +1853,11 @@ build_transition_table (const string_pattern_pair *transitions,
init_insn_pattern (&initial_insn);
if (!parse_insn_pattern (from_string, &initial_insn))
- {
- as_fatal (_("could not parse INSN_PATTERN '%s'"), from_string);
- clear_insn_pattern (&initial_insn);
- continue;
- }
+ as_fatal (_("could not parse INSN_PATTERN '%s'"), from_string);
init_insn_repl (&replace_insns);
if (!parse_insn_repl (to_string, &replace_insns))
- {
- as_fatal (_("could not parse INSN_REPL '%s'"), to_string);
- clear_insn_pattern (&initial_insn);
- clear_insn_repl (&replace_insns);
- continue;
- }
+ as_fatal (_("could not parse INSN_REPL '%s'"), to_string);
if (transition_applies (&initial_insn, from_string, to_string))
{
diff --git a/gas/config/xtensa-relax.h b/gas/config/xtensa-relax.h
index 6ae11e379cef..fa1abb070207 100644
--- a/gas/config/xtensa-relax.h
+++ b/gas/config/xtensa-relax.h
@@ -1,5 +1,5 @@
/* Table of relaxations for Xtensa assembly.
- Copyright 2003, 2004 Free Software Foundation, Inc.
+ Copyright 2003, 2004, 2007 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -135,10 +135,7 @@ struct build_op
OPERAND: op_data is the field in the
source instruction to take the value from
and encode in the op_num field here.
- LITERAL or LABEL: op_data is the ordinal
- that identifies the appropriate one, i.e.,
- there can be more than one literal or
- label in an expansion. */
+ LITERAL or LABEL: unused. */
BuildOp *next;
};
@@ -155,8 +152,6 @@ enum instr_type
struct build_instr
{
InstrType typ;
- unsigned id; /* LITERAL_DEF or LABEL_DEF: an ordinal to
- identify which one. */
xtensa_opcode opcode; /* Unused for LITERAL_DEF or LABEL_DEF. */
BuildOp *ops;
BuildInstr *next;
diff --git a/gas/configure b/gas/configure
index dca6497031ce..d2cc2e704e04 100755
--- a/gas/configure
+++ b/gas/configure
@@ -241,6 +241,155 @@ IFS=" $as_nl"
$as_unset CDPATH
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+ ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<_LT_EOF
+$*
+_LT_EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+ if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+ then
+ break
+ fi
+ done
+ fi
+
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+ else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$ECHO" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ ECHO='print -r'
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+ else
+ # Try using printf.
+ ECHO='printf %s\n'
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "$0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ ECHO=echo
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
# Name of the host.
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
# so uname gets run too.
@@ -309,7 +458,7 @@ ac_includes_default="\
# 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 WARN_CFLAGS NO_WERROR GDBINIT cgen_cpu_prefix extra_objects target_cpu_type obj_format te_file install_tooldir atof BFDLIB OPCODES_LIB BFDVER_H ALL_OBJ_DEPS YACC LEX LEXLIB LEX_OUTPUT_ROOT CPP EGREP ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT USE_INCLUDED_LIBINTL CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB INCLUDE_LOCALE_H GT_NO GT_YES MKINSTALLDIRS l MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBM datarootdir docdir htmldir LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir 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 LIBTOOL SED EGREP FGREP GREP LD DUMPBIN ac_ct_DUMPBIN NM LN_S AR ac_ct_AR RANLIB ac_ct_RANLIB lt_ECHO CPP WARN_CFLAGS NO_WERROR GDBINIT cgen_cpu_prefix extra_objects target_cpu_type obj_format te_file install_tooldir atof OPCODES_LIB YACC LEX LEXLIB LEX_OUTPUT_ROOT USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT MKINSTALLDIRS MSGFMT MSGMERGE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT GENINSRC_NEVER_TRUE GENINSRC_NEVER_FALSE ALLOCA LIBM datarootdir docdir htmldir LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -852,14 +1001,18 @@ Optional Features:
--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
+ --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 besides the primary
+ --enable-targets alternative target configurations besides the primary
--enable-commonbfdlib build shared BFD/opcodes/libiberty library
- --enable-werror treat compile warnings as errors
- --enable-build-warnings Enable build-time compiler warnings
+ --enable-checking enable run-time checks
+ --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
@@ -867,9 +1020,9 @@ Optional Features:
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-included-gettext use the GNU gettext library included here
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
Some influential environment variables:
CC C compiler command
@@ -3072,73 +3225,264 @@ fi
+
+
+macro_version='2.1a'
+macro_revision='1.2435'
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Set options
+
+enable_dlopen=no
+
+
+enable_win32_dll=no
+
+
# 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
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
enable_shared=yes
fi;
+
+
+
+
+
+
+
+
# Check whether --enable-static 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
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
enable_static=yes
fi;
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+ withval="$with_pic"
+ pic_mode="$withval"
+else
+ pic_mode=default
+fi;
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
# Check whether --enable-fast-install 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
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
enable_fast_install=yes
fi;
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
+if test "${lt_cv_path_SED+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+
+fi
+
+SED=$lt_cv_path_SED
+
+echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+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 fgrep" >&5
+echo $ECHO_N "checking for fgrep... $ECHO_C" >&6
+if test "${ac_cv_prog_fgrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo 'ab*c' | (grep -F 'ab*c') >/dev/null 2>&1
+ then ac_cv_prog_fgrep='grep -F'
+ else ac_cv_prog_fgrep='fgrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_fgrep" >&5
+echo "${ECHO_T}$ac_cv_prog_fgrep" >&6
+ FGREP=$ac_cv_prog_fgrep
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
# Check whether --with-gnu-ld or --without-gnu-ld was given.
if test "${with_gnu_ld+set}" = set; then
withval="$with_gnu_ld"
@@ -3149,8 +3493,8 @@ 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
+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -3160,12 +3504,12 @@ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
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%/%"`
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
done
test -z "$LD" && LD="$ac_prog"
;;
@@ -3189,22 +3533,26 @@ 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-:}"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
lt_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
+ # but apparently some variants of GNU ld 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
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
test "$with_gnu_ld" != no && break
- else
+ ;;
+ *)
test "$with_gnu_ld" != yes && break
- fi
+ ;;
+ esac
fi
done
- IFS="$ac_save_ifs"
+ IFS="$lt_save_ifs"
else
lt_cv_path_LD="$LD" # Let the user override the test with a path.
fi
@@ -3226,32 +3574,31 @@ 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
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
lt_cv_prog_gnu_ld=yes
-else
+ ;;
+*)
lt_cv_prog_gnu_ld=no
-fi
+ ;;
+esac
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
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
+echo $ECHO_N "checking for BSD- or MS-compatible name lister (nm)... $ECHO_C" >&6
if test "${lt_cv_path_NM+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -3259,35 +3606,173 @@ else
# 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
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
fi
- fi
+ done
+ IFS="$lt_save_ifs"
done
- IFS="$ac_save_ifs"
- test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+ : ${lt_cv_path_NM=no}
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+ 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_DUMPBIN+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DUMPBIN="$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
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+echo "${ECHO_T}$DUMPBIN" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-NM="$lt_cv_path_NM"
-echo "$as_me:$LINENO: result: $NM" >&5
-echo "${ECHO_T}$NM" >&6
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+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_DUMPBIN+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
+echo "${ECHO_T}$ac_ct_DUMPBIN" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+test -n "$ac_ct_DUMPBIN" || ac_ct_DUMPBIN=":"
+
+ DUMPBIN=$ac_ct_DUMPBIN
+fi
+
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+echo $ECHO_N "checking the name lister ($NM) interface... $ECHO_C" >&6
+if test "${lt_cv_nm_interface+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:3761: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:3764: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:3767: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
+echo "${ECHO_T}$lt_cv_nm_interface" >&6
echo "$as_me:$LINENO: checking whether ln -s works" >&5
echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
@@ -3300,8 +3785,234 @@ else
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
+# 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
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # 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 all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`getconf ARG_MAX 2> /dev/null`
+ if test -n $lt_cv_sys_max_cmd_len; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ 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
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+echo $ECHO_N "checking whether the shell understands some XSI constructs... $ECHO_C" >&6
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+echo "$as_me:$LINENO: result: $xsi_shell" >&5
+echo "${ECHO_T}$xsi_shell" >&6
+
+
+echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+echo $ECHO_N "checking whether the shell understands \"+=\"... $ECHO_C" >&6
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+echo "$as_me:$LINENO: result: $lt_shell_append" >&5
+echo "${ECHO_T}$lt_shell_append" >&6
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+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
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6
if test "${lt_cv_deplibs_check_method+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -3314,13 +4025,13 @@ lt_cv_deplibs_check_method='unknown'
# `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.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
# If you have `file' or equivalent on your system and you're not sure
# whether `pass_all' will *always* work, you probably want this one.
case $host_os in
-aix*)
+aix4* | aix5*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -3328,39 +4039,42 @@ beos*)
lt_cv_deplibs_check_method=pass_all
;;
-bsdi4*)
+bsdi[45]*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
lt_cv_file_magic_cmd='/usr/bin/file -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
-cygwin* | mingw* |pw32*)
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
;;
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
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
@@ -3374,92 +4088,116 @@ gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-hpux10.20*|hpux11*)
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
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"
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
;;
*)
- 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"
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
;;
esac
- lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
lt_cv_deplibs_check_method=pass_all
;;
# This must be Linux ELF.
-linux-gnu*)
+linux* | k*bsd*-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]+$'
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
else
- lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
fi
;;
-newsos6)
+newos6*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
osf3* | osf4* | osf5*)
- # 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*)
+rdos*)
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*)
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
lt_cv_deplibs_check_method=pass_all
;;
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+sysv4 | sysv4.3*)
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*`
;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
fi
@@ -3467,222 +4205,29 @@ 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
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
-# 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
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
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
+if test "${ac_cv_prog_AR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -3691,7 +4236,7 @@ do
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"
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -3700,27 +4245,27 @@ 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
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&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
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
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
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -3729,30 +4274,43 @@ do
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"
+ ac_cv_prog_ac_ct_AR="ar"
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=":"
+ test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
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
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
else
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
- RANLIB=$ac_ct_RANLIB
+ AR=$ac_ct_AR
else
- RANLIB="$ac_cv_prog_RANLIB"
+ AR="$ac_cv_prog_AR"
fi
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
@@ -3833,96 +4391,471 @@ else
STRIP="$ac_cv_prog_STRIP"
fi
+test -z "$STRIP" && STRIP=:
-# 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"
+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
- pic_mode=default
+ 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
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
+else
+ echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# 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"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic"
-test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic"
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
# Some flags need to be propagated to the compiler or linker for good
# libtool support.
case $host in
-*-*-irix6*)
+ia64-*-hpux*)
# Find out which ABI we are using.
- echo '#line 3870 "configure"' > conftest.$ac_ext
+ 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
- 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"
- ;;
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
esac
- fi
fi
rm -rf conftest*
;;
-
-ia64-*-hpux*)
+*-*-irix6*)
# Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
+ echo '#line 4822 "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
- case "`/usr/bin/file conftest.o`" in
- *ELF-32*)
- HPUX_IA64_MODE="32"
- ;;
- *ELF-64*)
- HPUX_IA64_MODE="64"
- ;;
- esac
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
fi
rm -rf conftest*
;;
-x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
@@ -3930,39 +4863,45 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
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
- ;;
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
esac
fi
rm -rf conftest*
@@ -3977,9 +4916,7 @@ 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_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'
@@ -4045,112 +4982,4551 @@ echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
CFLAGS="$SAVE_CFLAGS"
fi
;;
+sparc*-*solaris*)
+ # 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
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *) LD="${LD-ld} -64" ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+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 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
+
+# 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
+
+
+
+for ac_header in dlfcn.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
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+if test "${lt_cv_objdir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
esac
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ 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_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ 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_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ 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
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:5922: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:5926: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ fi
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ lt_prog_compiler_pic='-qnocommon'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
+
+
+
+
+
-# 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.
+# Check to make sure the PIC flag actually works.
#
-# `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.
+if test -n "$lt_prog_compiler_pic"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6244: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:6248: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
+
+if test x"$lt_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
+if test "${lt_prog_compiler_static_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_static_works=yes
+ fi
+ else
+ lt_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
+
+if test x"$lt_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6349: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:6353: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6404: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:6408: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ fi
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ ld_shlibs=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ *)
+ tmp_sharedflag='-shared' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
-# 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.
+int
+main ()
{
- (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"
+
+ ;
+ 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_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+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 -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >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_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+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 -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ fi
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[012])
+ allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ ;;
+ esac
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ whole_archive_flag_spec=''
+ link_all_deplibs=yes
+ if test "$GCC" = yes ; then
+ if test "${lt_cv_apple_cc_single_mod+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi-module to the
+ # link flags.
+ echo "int foo(void){return 1;}" > conftest.c
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib ${wl}-single_module conftest.c
+ if test -f libconftest.dylib; then
+ lt_cv_apple_cc_single_mod=yes
+ rm libconftest.dylib
+ fi
+ rm conftest.$ac_ext
+ fi
+fi
+
+ output_verbose_link_cmd=echo
+ if test "X$lt_cv_apple_cc_single_mod" = Xyes ; then
+ archive_cmds='$CC -dynamiclib $single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $single_module -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ module_expsym_cmds='sed -e "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd=echo
+ archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`$ECHO $rpath/$soname` $verstring'
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ module_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat >conftest.$ac_ext <<_ACEOF
+int foo(void) {}
+_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
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+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
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
*)
- # `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"
+ ld_shlibs=no
;;
- 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
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > 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); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc=no
+ else
+ archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+withGCC=$GCC
+if test "$withGCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
else
- echo "not updating unwritable cache $cache_file"
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ if test "$host_cpu" = m68k; then
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ else
+ dynamic_linker=no
+ fi
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $withGCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+ 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
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir"; then
+ shlibpath_overrides_runpath=yes
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; }; }
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-# 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;;
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
esac
fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
else
- { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
-# 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
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $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 dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ 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_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+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 shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shl_load (); 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 shl_load
+
+/* 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 shl_load ();
+/* 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_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+ ;
+ 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_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
+else
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $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 shl_load ();
+int
+main ()
+{
+shl_load ();
+ ;
+ 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_dld_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=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_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+ echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+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 dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen (); 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 dlopen
+
+/* 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 dlopen ();
+/* 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_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+ ;
+ 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_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $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 dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ 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_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $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 dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ 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_svld_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=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_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $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 dld_link ();
+int
+main ()
+{
+dld_link ();
+ ;
+ 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_dld_dld_link=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 9201 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}
+_LT_EOF
+ 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); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 9301 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}
+_LT_EOF
+ 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); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+ echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
@@ -4165,7 +9541,8 @@ echo "$as_me: error: enable-targets option must specify target names or 'all'" >
no) enable_targets= ;;
*) enable_targets=$enableval ;;
esac
-fi; # Check whether --enable-commonbfdlib or --disable-commonbfdlib was given.
+fi;
+# Check whether --enable-commonbfdlib or --disable-commonbfdlib was given.
if test "${enable_commonbfdlib+set}" = set; then
enableval="$enable_commonbfdlib"
case "${enableval}" in
@@ -4176,6 +9553,25 @@ echo "$as_me: error: bad value ${enableval} for BFD commonbfdlib option" >&2;}
{ (exit 1); exit 1; }; } ;;
esac
fi;
+ac_checking=yes
+if grep '^RELEASE=y' ${srcdir}/../bfd/Makefile.am >/dev/null 2>/dev/null ; then
+ ac_checking=
+fi
+# Check whether --enable-checking or --disable-checking was given.
+if test "${enable_checking+set}" = set; then
+ enableval="$enable_checking"
+ case "${enableval}" in
+ no|none) ac_checking= ;;
+ *) ac_checking=yes ;;
+esac
+fi; if test x$ac_checking != x ; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_CHECKING 1
+_ACEOF
+
+fi
+
using_cgen=no
@@ -4733,7 +10129,7 @@ _ACEOF
# Do we need the opcodes library?
case ${cpu_type} in
- vax | i386 | tic30)
+ vax | tic30)
;;
*)
@@ -4779,6 +10175,10 @@ _ACEOF
esac
;;
+ mep)
+ using_cgen=yes
+ ;;
+
mips)
echo ${extra_objects} | grep -s "itbl-parse.o"
if test $? -ne 0 ; then
@@ -4896,6 +10296,19 @@ if test ${all_targets} = "yes"; then
;;
esac
;;
+ x86_64)
+ case ${obj_format} in
+ aout)
+ emulations="$emulations i386coff i386elf"
+ ;;
+ coff)
+ emulations="$emulations i386aout i386elf"
+ ;;
+ elf)
+ emulations="$emulations i386aout i386coff"
+ ;;
+ esac
+ ;;
esac
fi
@@ -4903,8 +10316,7 @@ fi
# IEEE FP. On those that don't support FP at all, usually IEEE
# is emulated.
case ${target_cpu} in
- vax | tahoe ) atof=${target_cpu} ;;
- pdp11) atof=vax ;;
+ vax | pdp11 ) atof=vax ;;
*) atof=ieee ;;
esac
@@ -4960,6 +10372,11 @@ cat >>confdefs.h <<\_ACEOF
#define M88KCOFF 1
_ACEOF
;;
+ x86_64)
+cat >>confdefs.h <<\_ACEOF
+#define I386COFF 1
+_ACEOF
+ ;;
esac
;;
esac
@@ -5069,11 +10486,6 @@ cat >>confdefs.h <<\_ACEOF
#define OBJ_MAYBE_GENERIC 1
_ACEOF
;;
- ieee)
-cat >>confdefs.h <<\_ACEOF
-#define OBJ_MAYBE_IEEE 1
-_ACEOF
- ;;
som)
cat >>confdefs.h <<\_ACEOF
#define OBJ_MAYBE_SOM 1
@@ -5134,14 +10546,6 @@ yes)
;;
esac
-BFDLIB=../bfd/libbfd.la
-BFDVER_H=../bfd/bfdver.h
-ALL_OBJ_DEPS="$ALL_OBJ_DEPS"' ../bfd/bfd.h $(INCDIR)/symcat.h'
-
-
-
-
-
@@ -6220,2479 +11624,138 @@ if test "$LEX" = :; then
fi
ALL_LINGUAS="fr tr es rw"
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_RANLIB+set}" = set; then
- 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
+# If we haven't got the data from the intl directory,
+# assume NLS is disabled.
+USE_NLS=no
+LIBINTL=
+LIBINTL_DEP=
+INCINTL=
+XGETTEXT=
+GMSGFMT=
+POSUB=
+
+if test -f ../intl/config.intl; then
+ . ../intl/config.intl
+fi
+echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
+if test x"$USE_NLS" != xyes; then
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
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
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
-
+#define ENABLE_NLS 1
_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;;
+ echo "$as_me:$LINENO: checking for catalogs to be installed" >&5
+echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6
+ # Look for .po and .gmo files in the source directory.
+ CATALOGS=
+ XLINGUAS=
+ for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
+ # If there aren't any .gmo files the shell will give us the
+ # literal string "../path/to/srcdir/po/*.gmo" which has to be
+ # weeded out.
+ case "$cat" in *\**)
+ continue;;
esac
- 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
-
+ # The quadruple backslash is collapsed to a double backslash
+ # by the backticks, then collapsed again by the double quotes,
+ # leaving us with one backslash in the sed expression (right
+ # before the dot that mustn't act as a wildcard).
+ cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
+ lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
+ # The user is allowed to set LINGUAS to a list of languages to
+ # install catalogs for. If it's empty that means "all of them."
+ if test "x$LINGUAS" = x; then
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ else
+ case "$LINGUAS" in *$lang*)
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ ;;
+ esac
+ fi
done
-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
+ LINGUAS="$XLINGUAS"
+ echo "$as_me:$LINENO: result: $LINGUAS" >&5
+echo "${ECHO_T}$LINGUAS" >&6
-fi
+ DATADIRNAME=share
+ INSTOBJEXT=.mo
+ GENCAT=gencat
-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
+ CATOBJEXT=.gmo
-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=
+ MKINSTALLDIRS=
+ if test -n "$ac_aux_dir"; then
+ case "$ac_aux_dir" in
+ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+ esac
fi
-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=
+ if test -z "$MKINSTALLDIRS"; then
+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
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 "$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.
+ # 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 "$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
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
else
- ac_cpp_err=
+ PATH_SEPARATOR=:
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
+ rm -f conf$$.sh
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
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
else
- 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
+ ac_executable_p="test -f"
fi
+rm -f conf$$.file
- 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.
+# 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
@@ -8700,137 +11763,39 @@ 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.
- ;;
+ [\\/]* | ?:[\\/]*)
+ 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"
- ;;
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
esac
fi
MSGFMT="$ac_cv_path_MSGFMT"
-if test -n "$MSGFMT"; then
+if test "$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.
+ # 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
@@ -8870,7 +11835,37 @@ else
echo "${ECHO_T}no" >&6
fi
- # Extract the first word of "xgettext", so it can be a program name with args.
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
@@ -8878,27 +11873,31 @@ 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.
- ;;
+ [\\/]* | ?:[\\/]*)
+ 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"
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
- ;;
+ ;;
esac
fi
XGETTEXT="$ac_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
+if test "$XGETTEXT" != ":"; then
echo "$as_me:$LINENO: result: $XGETTEXT" >&5
echo "${ECHO_T}$XGETTEXT" >&6
else
@@ -8906,461 +11905,103 @@ else
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
-
-
+ rm -f messages.po
- 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
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
fi
-done
-done
-
- test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
- ;;
-esac
+ rm -f conf$$.sh
fi
-GMSGFMT=$ac_cv_path_GMSGFMT
-if test -n "$GMSGFMT"; then
- echo "$as_me:$LINENO: result: $GMSGFMT" >&5
-echo "${ECHO_T}$GMSGFMT" >&6
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ ac_executable_p="test -f"
fi
+rm -f conf$$.file
- # Extract the first word of "xgettext", so it can be a program name with args.
-set dummy xgettext; ac_word=$2
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; 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
+if test "${ac_cv_path_MSGMERGE+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.
- ;;
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # 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=":"
- ;;
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+ ;;
esac
fi
-XGETTEXT="$ac_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
- echo "$as_me:$LINENO: result: $XGETTEXT" >&5
-echo "${ECHO_T}$XGETTEXT" >&6
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+echo "${ECHO_T}$MSGMERGE" >&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
+ if test "$GMSGFMT" != ":"; then
+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
else
- 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
+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+ echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6
+ GMSGFMT=":"
fi
+ 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
-
+ if test "$XGETTEXT" != ":"; then
+ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
+echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
+ XGETTEXT=":"
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=
+ rm -f messages.po
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
+ ac_config_commands="$ac_config_commands default-1"
-# 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
echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
@@ -9389,6 +12030,16 @@ fi
+if false; then
+ GENINSRC_NEVER_TRUE=
+ GENINSRC_NEVER_FALSE='#'
+else
+ GENINSRC_NEVER_TRUE='#'
+ GENINSRC_NEVER_FALSE=
+fi
+
+
+
@@ -10211,8 +12862,7 @@ yes)
LIBM=
case $host in
*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
- # These system don't have libm
- # on darwin the libm is a symbolic link to libSystem.dylib
+ # These system don't have libm, or don't need it
;;
*-ncr-sysv4.3*)
echo "$as_me:$LINENO: checking for _mwvalidcheckl in -lmw" >&5
@@ -10283,9 +12933,9 @@ if test $ac_cv_lib_mw__mwvalidcheckl = yes; then
LIBM="-lmw"
fi
- echo "$as_me:$LINENO: checking for main in -lm" >&5
-echo $ECHO_N "checking for main in -lm... $ECHO_C" >&6
-if test "${ac_cv_lib_m_main+set}" = set; then
+ echo "$as_me:$LINENO: checking for cos in -lm" >&5
+echo $ECHO_N "checking for cos in -lm... $ECHO_C" >&6
+if test "${ac_cv_lib_m_cos+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -10297,11 +12947,17 @@ 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 cos ();
int
main ()
{
-main ();
+cos ();
;
return 0;
}
@@ -10328,28 +12984,28 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_lib_m_main=yes
+ ac_cv_lib_m_cos=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_m_main=no
+ac_cv_lib_m_cos=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_m_main" >&5
-echo "${ECHO_T}$ac_cv_lib_m_main" >&6
-if test $ac_cv_lib_m_main = yes; then
+echo "$as_me:$LINENO: result: $ac_cv_lib_m_cos" >&5
+echo "${ECHO_T}$ac_cv_lib_m_cos" >&6
+if test $ac_cv_lib_m_cos = yes; then
LIBM="$LIBM -lm"
fi
;;
*)
- echo "$as_me:$LINENO: checking for main in -lm" >&5
-echo $ECHO_N "checking for main in -lm... $ECHO_C" >&6
-if test "${ac_cv_lib_m_main+set}" = set; then
+ echo "$as_me:$LINENO: checking for cos in -lm" >&5
+echo $ECHO_N "checking for cos in -lm... $ECHO_C" >&6
+if test "${ac_cv_lib_m_cos+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -10361,11 +13017,17 @@ 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 cos ();
int
main ()
{
-main ();
+cos ();
;
return 0;
}
@@ -10392,20 +13054,20 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_lib_m_main=yes
+ ac_cv_lib_m_cos=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_m_main=no
+ac_cv_lib_m_cos=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_m_main" >&5
-echo "${ECHO_T}$ac_cv_lib_m_main" >&6
-if test $ac_cv_lib_m_main = yes; then
+echo "$as_me:$LINENO: result: $ac_cv_lib_m_cos" >&5
+echo "${ECHO_T}$ac_cv_lib_m_cos" >&6
+if test $ac_cv_lib_m_cos = yes; then
LIBM="-lm"
fi
@@ -10413,6 +13075,7 @@ fi
esac
+
;;
esac
@@ -11124,6 +13787,16 @@ fi
+case "${host}" in
+*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_BINARY_FOPEN 1
+_ACEOF
+ ;;
+esac
+
+
@@ -11246,6 +13919,13 @@ 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
+if test -z "${GENINSRC_NEVER_TRUE}" && test -z "${GENINSRC_NEVER_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"GENINSRC_NEVER\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"GENINSRC_NEVER\" 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
@@ -11680,6 +14360,254 @@ cat >>$CONFIG_STATUS <<_ACEOF
#
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+ ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+ # from automake.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
target_cpu_type=${target_cpu_type}
cgen_cpu_prefix=${cgen_cpu_prefix}
obj_format=${obj_format}
@@ -11700,6 +14628,8 @@ do
"doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
"po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;;
"depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "libtool" ) CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
"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
@@ -11837,10 +14767,22 @@ 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,@LIBTOOL@,$LIBTOOL,;t t
+s,@SED@,$SED,;t t
+s,@EGREP@,$EGREP,;t t
+s,@FGREP@,$FGREP,;t t
+s,@GREP@,$GREP,;t t
+s,@LD@,$LD,;t t
+s,@DUMPBIN@,$DUMPBIN,;t t
+s,@ac_ct_DUMPBIN@,$ac_ct_DUMPBIN,;t t
+s,@NM@,$NM,;t t
s,@LN_S@,$LN_S,;t t
+s,@AR@,$AR,;t t
+s,@ac_ct_AR@,$ac_ct_AR,;t t
s,@RANLIB@,$RANLIB,;t t
s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s,@LIBTOOL@,$LIBTOOL,;t t
+s,@lt_ECHO@,$lt_ECHO,;t t
+s,@CPP@,$CPP,;t t
s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t
s,@NO_WERROR@,$NO_WERROR,;t t
s,@GDBINIT@,$GDBINIT,;t t
@@ -11851,40 +14793,32 @@ s,@obj_format@,$obj_format,;t t
s,@te_file@,$te_file,;t t
s,@install_tooldir@,$install_tooldir,;t t
s,@atof@,$atof,;t t
-s,@BFDLIB@,$BFDLIB,;t t
s,@OPCODES_LIB@,$OPCODES_LIB,;t t
-s,@BFDVER_H@,$BFDVER_H,;t t
-s,@ALL_OBJ_DEPS@,$ALL_OBJ_DEPS,;t t
s,@YACC@,$YACC,;t t
s,@LEX@,$LEX,;t t
s,@LEXLIB@,$LEXLIB,;t t
s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t
-s,@CPP@,$CPP,;t t
-s,@EGREP@,$EGREP,;t t
-s,@ALLOCA@,$ALLOCA,;t t
s,@USE_NLS@,$USE_NLS,;t t
-s,@MSGFMT@,$MSGFMT,;t t
-s,@GMSGFMT@,$GMSGFMT,;t t
+s,@LIBINTL@,$LIBINTL,;t t
+s,@LIBINTL_DEP@,$LIBINTL_DEP,;t t
+s,@INCINTL@,$INCINTL,;t t
s,@XGETTEXT@,$XGETTEXT,;t t
-s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t
+s,@GMSGFMT@,$GMSGFMT,;t t
+s,@POSUB@,$POSUB,;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,@GENCAT@,$GENCAT,;t t
+s,@CATOBJEXT@,$CATOBJEXT,;t t
s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
-s,@l@,$l,;t t
+s,@MSGFMT@,$MSGFMT,;t t
+s,@MSGMERGE@,$MSGMERGE,;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,@GENINSRC_NEVER_TRUE@,$GENINSRC_NEVER_TRUE,;t t
+s,@GENINSRC_NEVER_FALSE@,$GENINSRC_NEVER_FALSE,;t t
+s,@ALLOCA@,$ALLOCA,;t t
s,@LIBM@,$LIBM,;t t
s,@datarootdir@,$datarootdir,;t t
s,@docdir@,$docdir,;t t
@@ -12573,6 +15507,656 @@ echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
done
done
;;
+ libtool )
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# 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, a copy can be downloaded from
+# http://www.gnu.org/copyleft/gpl.html, or by writing to the Free
+# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1+=\$2"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1=\$$1\$2"
+}
+_LT_EOF
+ ;;
+ esac
+
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+ ;;
+ default-1 )
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ GMOFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
default ) rm -f targ-cpu.c targ-cpu.h obj-format.h obj-format.c targ-env.h atof-targ.c itbl-cpu.h
echo '#include "tc-'"${target_cpu_type}"'.h"' > targ-cpu.h
echo '#include "obj-'"${obj_format}"'.h"' > obj-format.h
@@ -12580,9 +16164,7 @@ done
echo '#include "itbl-'"${target_cpu_type}"'.h"' > itbl-cpu.h
if test "x$cgen_cpu_prefix" != x ; then
echo '#include "opcodes/'"${cgen_cpu_prefix}"'-desc.h"' > cgen-desc.h
- fi
-
- sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;;
+ fi ;;
esac
done
_ACEOF
diff --git a/gas/configure.in b/gas/configure.in
index fe69a51c9259..02e8e53af4fe 100644
--- a/gas/configure.in
+++ b/gas/configure.in
@@ -23,13 +23,14 @@ AM_INIT_AUTOMAKE(gas, ${BFD_VERSION})
AM_PROG_LIBTOOL
AC_ARG_ENABLE(targets,
-[ --enable-targets alternative target configurations besides the primary],
+[ --enable-targets alternative target configurations besides the primary],
[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(commonbfdlib,
[ --enable-commonbfdlib build shared BFD/opcodes/libiberty library],
[case "${enableval}" in
@@ -38,6 +39,20 @@ AC_ARG_ENABLE(commonbfdlib,
*) AC_MSG_ERROR([bad value ${enableval} for BFD commonbfdlib option]) ;;
esac])dnl
+ac_checking=yes
+if grep '^RELEASE=y' ${srcdir}/../bfd/Makefile.am >/dev/null 2>/dev/null ; then
+ ac_checking=
+fi
+AC_ARG_ENABLE(checking,
+[ --enable-checking enable run-time checks],
+[case "${enableval}" in
+ no|none) ac_checking= ;;
+ *) ac_checking=yes ;;
+esac])dnl
+if test x$ac_checking != x ; then
+ AC_DEFINE(ENABLE_CHECKING, 1, [Define if you want run-time sanity checks.])
+fi
+
using_cgen=no
AM_BINUTILS_WARNINGS
@@ -258,7 +273,7 @@ changequote([,])dnl
# Do we need the opcodes library?
case ${cpu_type} in
- vax | i386 | tic30)
+ vax | tic30)
;;
*)
@@ -304,18 +319,22 @@ changequote([,])dnl
esac
;;
+ mep)
+ using_cgen=yes
+ ;;
+
mips)
- echo ${extra_objects} | grep -s "itbl-parse.o"
+ echo ${extra_objects} | grep -s "itbl-parse.o"
if test $? -ne 0 ; then
extra_objects="$extra_objects itbl-parse.o"
fi
- echo ${extra_objects} | grep -s "itbl-lex.o"
+ echo ${extra_objects} | grep -s "itbl-lex.o"
if test $? -ne 0 ; then
extra_objects="$extra_objects itbl-lex.o"
fi
- echo ${extra_objects} | grep -s "itbl-ops.o"
+ echo ${extra_objects} | grep -s "itbl-ops.o"
if test $? -ne 0 ; then
extra_objects="$extra_objects itbl-ops.o"
fi
@@ -417,6 +436,19 @@ if test ${all_targets} = "yes"; then
;;
esac
;;
+ x86_64)
+ case ${obj_format} in
+ aout)
+ emulations="$emulations i386coff i386elf"
+ ;;
+ coff)
+ emulations="$emulations i386aout i386elf"
+ ;;
+ elf)
+ emulations="$emulations i386aout i386coff"
+ ;;
+ esac
+ ;;
esac
fi
@@ -424,8 +456,7 @@ fi
# IEEE FP. On those that don't support FP at all, usually IEEE
# is emulated.
case ${target_cpu} in
- vax | tahoe ) atof=${target_cpu} ;;
- pdp11) atof=vax ;;
+ vax | pdp11 ) atof=vax ;;
*) atof=ieee ;;
esac
@@ -462,6 +493,7 @@ case ${obj_format} in
i386) AC_DEFINE(I386COFF, 1, [Using i386 COFF?]) ;;
m68k) AC_DEFINE(M68KCOFF, 1, [Using m68k COFF?]) ;;
m88k) AC_DEFINE(M88KCOFF, 1, [Using m88k COFF?]) ;;
+ x86_64) AC_DEFINE(I386COFF, 1, [Using i386 COFF?]) ;;
esac
;;
esac
@@ -511,7 +543,6 @@ if test `set . $formats ; shift ; echo $#` -gt 1 ; then
ecoff) AC_DEFINE(OBJ_MAYBE_ECOFF, 1, [ECOFF support?]) ;;
elf) AC_DEFINE(OBJ_MAYBE_ELF, 1, [ELF support?]) ;;
generic) AC_DEFINE(OBJ_MAYBE_GENERIC, 1, [generic support?]) ;;
- ieee) AC_DEFINE(OBJ_MAYBE_IEEE, 1, [IEEE support?]) ;;
som) AC_DEFINE(OBJ_MAYBE_SOM, 1, [SOM support?]) ;;
esac
extra_objects="$extra_objects obj-$fmt.o"
@@ -556,16 +587,8 @@ yes)
;;
esac
-BFDLIB=../bfd/libbfd.la
-BFDVER_H=../bfd/bfdver.h
-ALL_OBJ_DEPS="$ALL_OBJ_DEPS"' ../bfd/bfd.h $(INCDIR)/symcat.h'
-
-AC_SUBST(BFDLIB)
AC_SUBST(OPCODES_LIB)
-AC_SUBST(BFDVER_H)
-AC_SUBST(ALL_OBJ_DEPS)
-
AC_DEFINE_UNQUOTED(TARGET_ALIAS, "${target_alias}", [Target alias.])
AC_DEFINE_UNQUOTED(TARGET_CANONICAL, "${target}", [Canonical target.])
AC_DEFINE_UNQUOTED(TARGET_CPU, "${target_cpu}", [Target CPU.])
@@ -578,9 +601,11 @@ AC_PROG_YACC
AM_PROG_LEX
ALL_LINGUAS="fr tr es rw"
-CY_GNU_GETTEXT
+ZW_GNU_GETTEXT_SISTER_DIR
+AM_PO_SUBDIRS
AM_MAINTAINER_MODE
+AM_CONDITIONAL(GENINSRC_NEVER, false)
AC_EXEEXT
AC_CHECK_HEADERS(string.h stdlib.h memory.h strings.h unistd.h stdarg.h varargs.h errno.h sys/types.h)
@@ -609,7 +634,7 @@ AC_CHECK_FUNCS(sbrk)
# do we need the math library?
case "${need_libm}" in
-yes)
+yes)
AC_CHECK_LIBM
AC_SUBST(LIBM)
;;
@@ -669,6 +694,8 @@ GAS_CHECK_DECL_NEEDED(strstr, f, char *(*f)(), $gas_test_headers)
AC_CHECK_DECLS([vsnprintf])
+BFD_BINARY_FOPEN
+
dnl Required for html and install-html targets.
AC_SUBST(datarootdir)
AC_SUBST(docdir)
@@ -691,9 +718,7 @@ AC_CONFIG_COMMANDS([default],
echo '#include "itbl-'"${target_cpu_type}"'.h"' > itbl-cpu.h
if test "x$cgen_cpu_prefix" != x ; then
echo '#include "opcodes/'"${cgen_cpu_prefix}"'-desc.h"' > cgen-desc.h
- fi
-
- sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile],
+ fi],
[target_cpu_type=${target_cpu_type}
cgen_cpu_prefix=${cgen_cpu_prefix}
obj_format=${obj_format}
diff --git a/gas/configure.tgt b/gas/configure.tgt
index 696daaa128fb..3b7fb19f3108 100644
--- a/gas/configure.tgt
+++ b/gas/configure.tgt
@@ -35,8 +35,10 @@ case ${cpu} in
arm*) cpu_type=arm endian=little ;;
bfin*) cpu_type=bfin endian=little ;;
c4x*) cpu_type=tic4x ;;
+ cr16*) cpu_type=cr16 endian=little ;;
crisv32) cpu_type=cris arch=crisv32 ;;
crx*) cpu_type=crx endian=little ;;
+ fido) cpu_type=m68k ;;
hppa*) cpu_type=hppa ;;
i[3-7]86) cpu_type=i386 arch=i386;;
ia64) cpu_type=ia64 ;;
@@ -51,6 +53,7 @@ case ${cpu} in
m6811|m6812|m68hc12) cpu_type=m68hc11 ;;
m683??) cpu_type=m68k ;;
maxq) cpu_type=maxq ;;
+ mep-*-elf) cpu_type=mep endian=big ;;
mips*el) cpu_type=mips endian=little ;;
mips*) cpu_type=mips endian=big ;;
mt) cpu_type=mt endian=big ;;
@@ -62,6 +65,8 @@ case ${cpu} in
rs6000*) cpu_type=ppc ;;
s390x*) cpu_type=s390 arch=s390x ;;
s390*) cpu_type=s390 arch=s390 ;;
+ score*l) cpu_type=score endian=little ;;
+ score*) cpu_type=score endian=big ;;
sh5le*) cpu_type=sh64 endian=little ;;
sh5*) cpu_type=sh64 endian=big ;;
sh64le*) cpu_type=sh64 endian=little ;;
@@ -77,7 +82,7 @@ case ${cpu} in
strongarm*b) cpu_type=arm endian=big ;;
strongarm*) cpu_type=arm endian=little ;;
v850*) cpu_type=v850 ;;
- x86_64) cpu_type=i386 arch=x86_64;;
+ x86_64*) cpu_type=i386 arch=x86_64;;
xscale*be|xscale*b) cpu_type=arm endian=big ;;
xscale*) cpu_type=arm endian=little ;;
xtensa*) cpu_type=xtensa arch=xtensa ;;
@@ -109,6 +114,7 @@ case ${generic_target} in
arm-*-linux*aout*) fmt=aout em=linux ;;
arm-*-linux-*eabi*) fmt=elf em=armlinuxeabi ;;
arm-*-linux-*) fmt=elf em=linux ;;
+ arm-*-uclinux*eabi*) fmt=elf em=armlinuxeabi ;;
arm-*-uclinux*) fmt=elf em=linux ;;
arm-*-netbsdelf*) fmt=elf em=nbsd ;;
arm-*-*n*bsd*) fmt=aout em=nbsd ;;
@@ -121,6 +127,7 @@ case ${generic_target} in
avr-*-*) fmt=elf bfd_gas=yes ;;
bfin-*-*) fmt=elf bfd_gas=yes ;;
bfin-*elf) fmt=elf ;;
+ cr16-*-elf*) fmt=elf ;;
cris-*-linux-* | crisv32-*-linux-*)
fmt=multi em=linux ;;
@@ -209,7 +216,11 @@ case ${generic_target} in
i386-*-pe) fmt=coff em=pe ;;
i386-*-cygwin*) fmt=coff em=pe ;;
i386-*-interix*) fmt=coff em=interix ;;
- i386-*-mingw32*) fmt=coff em=pe ;;
+ i386-*-mingw*)
+ case ${cpu} in
+ x86_64*) fmt=coff em=pep ;;
+ i*) fmt=coff em=pe ;;
+ esac ;;
i386-*-nto-qnx*) fmt=elf ;;
i386-*-*nt*) fmt=coff em=pe ;;
i386-*-chaos) fmt=elf ;;
@@ -250,6 +261,8 @@ case ${generic_target} in
maxq-*-coff) fmt=coff bfd_gas=yes ;;
+ mep-*-elf) fmt=elf ;;
+
mcore-*-elf) fmt=elf ;;
mcore-*-pe) fmt=coff em=pe bfd_gas=yes ;;
@@ -266,6 +279,7 @@ case ${generic_target} in
mips-*-riscos*) fmt=ecoff ;;
mips*-*-linux*) fmt=elf em=tmips ;;
mips-*-sysv4*MP* | mips-*-gnu*) fmt=elf em=tmips ;;
+ mips*-sde-elf*) fmt=elf em=tmips ;;
mips-*-sysv*) fmt=ecoff ;;
mips-*-elf* | mips-*-rtems*) fmt=elf ;;
mips-*-netbsd*) fmt=elf em=tmips ;;
@@ -314,6 +328,8 @@ case ${generic_target} in
s390-*-linux-*) fmt=elf em=linux ;;
s390-*-tpf*) fmt=elf ;;
+ score-*-elf) fmt=elf ;;
+
sh*-*-linux*) fmt=elf em=linux
case ${cpu} in
sh*eb) endian=big ;;
@@ -323,7 +339,7 @@ case ${generic_target} in
sh64*-*-netbsd*) fmt=elf em=nbsd ;;
sh*-*-netbsdelf*) fmt=elf em=nbsd ;;
sh*-*-symbianelf*) fmt=elf endian=little ;;
- sh-*-elf*) fmt=elf ;;
+ sh-*-elf* | sh-*-uclinux* | sh[12]-*-uclinux*) fmt=elf ;;
sh-*-coff*) fmt=coff ;;
sh-*-nto*) fmt=elf ;;
sh-*-pe*) fmt=coff em=pe bfd_gas=yes endian=little ;;
@@ -357,6 +373,8 @@ case ${generic_target} in
esac ;;
sparc-*-openbsd*) fmt=elf em=nbsd ;;
+ spu-*-elf) fmt=elf ;;
+
tic30-*-*aout*) fmt=aout bfd_gas=yes ;;
tic30-*-*coff*) fmt=coff bfd_gas=yes ;;
tic4x-*-* | c4x-*-*) fmt=coff bfd_gas=yes ;;
diff --git a/gas/debug.c b/gas/debug.c
index fe2ed8c6536f..3218fff538a3 100644
--- a/gas/debug.c
+++ b/gas/debug.c
@@ -1,5 +1,5 @@
/* This file is debug.c
- Copyright 1987, 1988, 1989, 1990, 1991, 1992, 2000
+ Copyright 1987, 1988, 1989, 1990, 1991, 1992, 2000, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -25,26 +25,28 @@
dmp_frags ()
{
+ asection *s;
frchainS *chp;
char *p;
- for (chp = frchain_root; chp; chp = chp->frch_next)
- {
- switch (chp->frch_seg)
- {
- case SEG_DATA:
- p = "Data";
- break;
- case SEG_TEXT:
- p = "Text";
- break;
- default:
- p = "???";
- break;
- }
- printf ("\nSEGMENT %s %d\n", p, chp->frch_subseg);
- dmp_frag (chp->frch_root, "\t");
- }
+ for (s = stdoutput->sections; s; s = s->next)
+ for (chp = seg_info (s)->frchainP; chp; chp = chp->frch_next)
+ {
+ switch (s)
+ {
+ case SEG_DATA:
+ p = "Data";
+ break;
+ case SEG_TEXT:
+ p = "Text";
+ break;
+ default:
+ p = "???";
+ break;
+ }
+ printf ("\nSEGMENT %s %d\n", p, chp->frch_subseg);
+ dmp_frag (chp->frch_root, "\t");
+ }
}
dmp_frag (fp, indent)
diff --git a/gas/dep-in.sed b/gas/dep-in.sed
index f23c2018fe97..d81c4609b9c0 100644
--- a/gas/dep-in.sed
+++ b/gas/dep-in.sed
@@ -12,14 +12,13 @@ s!@SRCDIR@/config!$(srcdir)/config!g
s!@SRCDIR@/\.\./opcodes!$(srcdir)/../opcodes!g
s!@TOPDIR@/opcodes!$(srcdir)/../opcodes!g
s!@SRCDIR@/!!g
-s!\.\./bfd/bfdver\.h!$(BFDVER_H)!g
s! \$(srcdir)/config/te-generic\.h!!g
-s! \.\./bfd/bfd\.h!!g
s! itbl-cpu\.h!!g
s! itbl-parse\.h!!g
s! \.\./intl/libintl\.h!!g
-s! \$(INCDIR)/bin-bugs\.h!!g
+s! \.\./bfd/bfd\.h!!g
+s! \$(INCDIR)/symcat\.h!!g
s! \$(INCDIR)/ansidecl\.h!!g
s! \$(INCDIR)/libiberty\.h!!g
s! \$(INCDIR)/progress\.h!!g
diff --git a/gas/doc/Makefile.am b/gas/doc/Makefile.am
index d48a9ccb2412..4f6ff9294c08 100644
--- a/gas/doc/Makefile.am
+++ b/gas/doc/Makefile.am
@@ -16,9 +16,12 @@ POD2MAN = pod2man --center="GNU Development Tools" \
man_MANS = as.1
info_TEXINFOS = as.texinfo
+as_TEXINFOS = asconfig.texi $(CPU_DOCS)
-AM_MAKEINFOFLAGS = -I "$(srcdir)" -I "$(top_srcdir)/../libiberty"
-TEXI2DVI = texi2dvi -I "$(srcdir)" -I "$(top_srcdir)/../libiberty"
+AM_MAKEINFOFLAGS = -I "$(srcdir)" -I "$(top_srcdir)/../libiberty" \
+ -I ../../bfd/doc
+TEXI2DVI = texi2dvi -I "$(srcdir)" -I "$(top_srcdir)/../libiberty" \
+ -I ../../bfd/doc
asconfig.texi: $(CONFIG).texi
rm -f asconfig.texi
@@ -29,7 +32,9 @@ CPU_DOCS = \
c-alpha.texi \
c-arc.texi \
c-arm.texi \
+ c-avr.texi \
c-bfin.texi \
+ c-cr16.texi \
c-d10v.texi \
c-cris.texi \
c-h8300.texi \
@@ -61,13 +66,6 @@ CPU_DOCS = \
c-z80.texi \
c-z8k.texi
-gasver.texi: $(srcdir)/../../bfd/configure
- rm -f $@
- eval `grep '^ *VERSION=' $(srcdir)/../../bfd/configure`; \
- echo "@set VERSION $$VERSION" > $@
-
-$(srcdir)/as.info as.dvi as.html: $(srcdir)/as.texinfo asconfig.texi gasver.texi $(CPU_DOCS)
-
# We want install to imply install-info as per GNU standards, despite the
# cygnus option.
install-data-local: install-info
@@ -97,7 +95,7 @@ install-html-am: $(HTMLS)
noinst_TEXINFOS = internals.texi
-MAINTAINERCLEANFILES = asconfig.texi gasver.texi
+MAINTAINERCLEANFILES = asconfig.texi
BASEDIR = $(srcdir)/../..
BFDDIR = $(BASEDIR)/bfd
@@ -112,7 +110,7 @@ info-local: $(MANS)
# Build the man page from the texinfo file
# The sed command removes the no-adjust Nroff command so that
# the man output looks standard.
-as.1: $(srcdir)/as.texinfo asconfig.texi gasver.texi $(CPU_DOCS)
+as.1: $(srcdir)/as.texinfo asconfig.texi $(CPU_DOCS)
touch $@
-$(TEXI2POD) $(MANCONF) < $(srcdir)/as.texinfo > as.pod
-($(POD2MAN) as.pod | \
@@ -120,3 +118,12 @@ as.1: $(srcdir)/as.texinfo asconfig.texi gasver.texi $(CPU_DOCS)
mv -f $@.T$$$$ $@) || \
(rm -f $@.T$$$$ && exit 1)
rm -f as.pod
+
+MAINTAINERCLEANFILES += as.info
+
+# Automake 1.9 will only build info files in the objdir if they are
+# mentioned in DISTCLEANFILES. It doesn't have to be unconditional,
+# though, so we use a bogus condition.
+if GENINSRC_NEVER
+DISTCLEANFILES = as.info
+endif
diff --git a/gas/doc/Makefile.in b/gas/doc/Makefile.in
index cd9dad2baaf8..86f3d7a42693 100644
--- a/gas/doc/Makefile.in
+++ b/gas/doc/Makefile.in
@@ -37,11 +37,19 @@ build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = doc
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ $(as_TEXINFOS)
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
- $(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/../libtool.m4 \
- $(top_srcdir)/../gettext.m4 $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \
+ $(top_srcdir)/../bfd/warning.m4 \
+ $(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/gettext-sister.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/nls.m4 $(top_srcdir)/../config/po.m4 \
+ $(top_srcdir)/../config/progtest.m4 \
+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
@@ -50,7 +58,7 @@ CONFIG_CLEAN_FILES =
depcomp =
am__depfiles_maybe =
SOURCES =
-INFO_DEPS = $(srcdir)/as.info
+INFO_DEPS = as.info
TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex
am__TEXINFO_TEX_DIR = $(top_srcdir)/../texinfo
DVIS = as.dvi
@@ -68,16 +76,14 @@ NROFF = nroff
MANS = $(man_MANS)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
-ALL_OBJ_DEPS = @ALL_OBJ_DEPS@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
+AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
-BFDLIB = @BFDLIB@
-BFDVER_H = @BFDVER_H@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
@@ -89,29 +95,32 @@ CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
+DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
+FGREP = @FGREP@
GDBINIT = @GDBINIT@
-GMOFILES = @GMOFILES@
+GENCAT = @GENCAT@
+GENINSRC_NEVER_FALSE = @GENINSRC_NEVER_FALSE@
+GENINSRC_NEVER_TRUE = @GENINSRC_NEVER_TRUE@
GMSGFMT = @GMSGFMT@
-GT_NO = @GT_NO@
-GT_YES = @GT_YES@
-INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
+GREP = @GREP@
+INCINTL = @INCINTL@
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@
+LD = @LD@
LDFLAGS = @LDFLAGS@
LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBINTL = @LIBINTL@
+LIBINTL_DEP = @LIBINTL_DEP@
LIBM = @LIBM@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -124,6 +133,8 @@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
NO_WERROR = @NO_WERROR@
OBJEXT = @OBJEXT@
OPCODES_LIB = @OPCODES_LIB@
@@ -134,19 +145,20 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-POFILES = @POFILES@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
-USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
YACC = @YACC@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
@@ -179,10 +191,10 @@ includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
install_tooldir = @install_tooldir@
-l = @l@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
obj_format = @obj_format@
@@ -212,13 +224,20 @@ POD2MAN = pod2man --center="GNU Development Tools" \
man_MANS = as.1
info_TEXINFOS = as.texinfo
-AM_MAKEINFOFLAGS = -I "$(srcdir)" -I "$(top_srcdir)/../libiberty"
-TEXI2DVI = texi2dvi -I "$(srcdir)" -I "$(top_srcdir)/../libiberty"
+as_TEXINFOS = asconfig.texi $(CPU_DOCS)
+AM_MAKEINFOFLAGS = -I "$(srcdir)" -I "$(top_srcdir)/../libiberty" \
+ -I ../../bfd/doc
+
+TEXI2DVI = texi2dvi -I "$(srcdir)" -I "$(top_srcdir)/../libiberty" \
+ -I ../../bfd/doc
+
CPU_DOCS = \
c-alpha.texi \
c-arc.texi \
c-arm.texi \
+ c-avr.texi \
c-bfin.texi \
+ c-cr16.texi \
c-d10v.texi \
c-cris.texi \
c-h8300.texi \
@@ -254,14 +273,19 @@ html__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
# This one isn't ready for prime time yet. Not even a little bit.
noinst_TEXINFOS = internals.texi
-MAINTAINERCLEANFILES = asconfig.texi gasver.texi
+MAINTAINERCLEANFILES = asconfig.texi as.info
BASEDIR = $(srcdir)/../..
BFDDIR = $(BASEDIR)/bfd
CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/configure.in
+
+# Automake 1.9 will only build info files in the objdir if they are
+# mentioned in DISTCLEANFILES. It doesn't have to be unconditional,
+# though, so we use a bogus condition.
+@GENINSRC_NEVER_TRUE@DISTCLEANFILES = as.info
all: all-am
.SUFFIXES:
-.SUFFIXES: .dvi .html .info .pdf .ps .texinfo
+.SUFFIXES: .dvi .ps
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@@ -271,9 +295,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus doc/Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/Makefile
+ $(AUTOMAKE) --cygnus doc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -301,42 +325,38 @@ clean-libtool:
distclean-libtool:
-rm -f libtool
-.texinfo.info:
+as.info: as.texinfo $(as_TEXINFOS)
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 $@ $<; \
+ -o $@ `test -f 'as.texinfo' || echo '$(srcdir)/'`as.texinfo; \
then \
rc=0; \
- cd $(srcdir); \
else \
rc=$$?; \
- cd $(srcdir) && \
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
fi; \
rm -rf $$backupdir; exit $$rc
-.texinfo.dvi:
+as.dvi: as.texinfo $(as_TEXINFOS)
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
- $(TEXI2DVI) $<
+ $(TEXI2DVI) -o $@ `test -f 'as.texinfo' || echo '$(srcdir)/'`as.texinfo
-.texinfo.pdf:
+as.pdf: as.texinfo $(as_TEXINFOS)
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
- $(TEXI2PDF) $<
+ $(TEXI2PDF) -o $@ `test -f 'as.texinfo' || echo '$(srcdir)/'`as.texinfo
-.texinfo.html:
+as.html: as.texinfo $(as_TEXINFOS)
rm -rf $(@:.html=.htp)
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
- -o $(@:.html=.htp) $<; \
+ -o $(@:.html=.htp) `test -f 'as.texinfo' || echo '$(srcdir)/'`as.texinfo; \
then \
rm -rf $@; \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
@@ -346,10 +366,6 @@ distclean-libtool:
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
exit 1; \
fi
-$(srcdir)/as.info: as.texinfo
-as.dvi: as.texinfo
-as.pdf: as.texinfo
-as.html: as.texinfo
.dvi.ps:
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
$(DVIPS) -o $@ $<
@@ -481,6 +497,7 @@ clean-generic:
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"
@@ -586,13 +603,6 @@ asconfig.texi: $(CONFIG).texi
cp $(srcdir)/$(CONFIG).texi ./asconfig.texi
chmod u+w ./asconfig.texi
-gasver.texi: $(srcdir)/../../bfd/configure
- rm -f $@
- eval `grep '^ *VERSION=' $(srcdir)/../../bfd/configure`; \
- echo "@set VERSION $$VERSION" > $@
-
-$(srcdir)/as.info as.dvi as.html: $(srcdir)/as.texinfo asconfig.texi gasver.texi $(CPU_DOCS)
-
# We want install to imply install-info as per GNU standards, despite the
# cygnus option.
install-data-local: install-info
@@ -624,7 +634,7 @@ info-local: $(MANS)
# Build the man page from the texinfo file
# The sed command removes the no-adjust Nroff command so that
# the man output looks standard.
-as.1: $(srcdir)/as.texinfo asconfig.texi gasver.texi $(CPU_DOCS)
+as.1: $(srcdir)/as.texinfo asconfig.texi $(CPU_DOCS)
touch $@
-$(TEXI2POD) $(MANCONF) < $(srcdir)/as.texinfo > as.pod
-($(POD2MAN) as.pod | \
diff --git a/gas/doc/all.texi b/gas/doc/all.texi
index 5192f5471c97..b4778bf8b283 100644
--- a/gas/doc/all.texi
+++ b/gas/doc/all.texi
@@ -29,7 +29,9 @@
@set ALPHA
@set ARC
@set ARM
+@set AVR
@set BFIN
+@set CR16
@set CRIS
@set D10V
@set D30V
@@ -63,7 +65,7 @@
@set Z80
@set Z8000
-@c Does this version of the assembler use the difference-table kluge?
+@c Does this version of the assembler use the difference-table kludge?
@set DIFF-TBL-KLUGE
@c Do all machines described use IEEE floating point?
diff --git a/gas/doc/as.1 b/gas/doc/as.1
deleted file mode 100644
index 89e3b4c2c7c8..000000000000
--- a/gas/doc/as.1
+++ /dev/null
@@ -1,1109 +0,0 @@
-.\" 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 "AS 1"
-.TH AS 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
-.SH "NAME"
-AS \- the portable GNU assembler.
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-as [\fB\-a\fR[\fBcdhlns\fR][=\fIfile\fR]] [\fB\-\-alternate\fR] [\fB\-D\fR]
- [\fB\-\-defsym\fR \fIsym\fR=\fIval\fR] [\fB\-f\fR] [\fB\-g\fR] [\fB\-\-gstabs\fR]
- [\fB\-\-gstabs+\fR] [\fB\-\-gdwarf\-2\fR] [\fB\-\-help\fR] [\fB\-I\fR \fIdir\fR] [\fB\-J\fR]
- [\fB\-K\fR] [\fB\-L\fR] [\fB\-\-listing\-lhs\-width\fR=\fI\s-1NUM\s0\fR]
- [\fB\-\-listing\-lhs\-width2\fR=\fI\s-1NUM\s0\fR] [\fB\-\-listing\-rhs\-width\fR=\fI\s-1NUM\s0\fR]
- [\fB\-\-listing\-cont\-lines\fR=\fI\s-1NUM\s0\fR] [\fB\-\-keep\-locals\fR] [\fB\-o\fR
- \fIobjfile\fR] [\fB\-R\fR] [\fB\-\-reduce\-memory\-overheads\fR] [\fB\-\-statistics\fR]
- [\fB\-v\fR] [\fB\-version\fR] [\fB\-\-version\fR] [\fB\-W\fR] [\fB\-\-warn\fR]
- [\fB\-\-fatal\-warnings\fR] [\fB\-w\fR] [\fB\-x\fR] [\fB\-Z\fR] [\fB@\fR\fI\s-1FILE\s0\fR]
- [\fB\-\-target\-help\fR] [\fItarget-options\fR]
- [\fB\-\-\fR|\fIfiles\fR ...]
-.PP
-\&\fITarget Alpha options:\fR
- [\fB\-m\fR\fIcpu\fR]
- [\fB\-mdebug\fR | \fB\-no\-mdebug\fR]
- [\fB\-relax\fR] [\fB\-g\fR] [\fB\-G\fR\fIsize\fR]
- [\fB\-F\fR] [\fB\-32addr\fR]
-.PP
-\&\fITarget \s-1ARC\s0 options:\fR
- [\fB\-marc[5|6|7|8]\fR]
- [\fB\-EB\fR|\fB\-EL\fR]
-.PP
-\&\fITarget \s-1ARM\s0 options:\fR
- [\fB\-mcpu\fR=\fIprocessor\fR[+\fIextension\fR...]]
- [\fB\-march\fR=\fIarchitecture\fR[+\fIextension\fR...]]
- [\fB\-mfpu\fR=\fIfloating-point-format\fR]
- [\fB\-mfloat\-abi\fR=\fIabi\fR]
- [\fB\-meabi\fR=\fIver\fR]
- [\fB\-mthumb\fR]
- [\fB\-EB\fR|\fB\-EL\fR]
- [\fB\-mapcs\-32\fR|\fB\-mapcs\-26\fR|\fB\-mapcs\-float\fR|
- \fB\-mapcs\-reentrant\fR]
- [\fB\-mthumb\-interwork\fR] [\fB\-k\fR]
-.PP
-\&\fITarget \s-1CRIS\s0 options:\fR
- [\fB\-\-underscore\fR | \fB\-\-no\-underscore\fR]
- [\fB\-\-pic\fR] [\fB\-N\fR]
- [\fB\-\-emulation=criself\fR | \fB\-\-emulation=crisaout\fR]
- [\fB\-\-march=v0_v10\fR | \fB\-\-march=v10\fR | \fB\-\-march=v32\fR | \fB\-\-march=common_v10_v32\fR]
-.PP
-\&\fITarget D10V options:\fR
- [\fB\-O\fR]
-.PP
-\&\fITarget D30V options:\fR
- [\fB\-O\fR|\fB\-n\fR|\fB\-N\fR]
-.PP
-\&\fITarget i386 options:\fR
- [\fB\-\-32\fR|\fB\-\-64\fR] [\fB\-n\fR]
-.PP
-\&\fITarget i960 options:\fR
- [\fB\-ACA\fR|\fB\-ACA_A\fR|\fB\-ACB\fR|\fB\-ACC\fR|\fB\-AKA\fR|\fB\-AKB\fR|
- \fB\-AKC\fR|\fB\-AMC\fR]
- [\fB\-b\fR] [\fB\-no\-relax\fR]
-.PP
-\&\fITarget \s-1IA\-64\s0 options:\fR
- [\fB\-mconstant\-gp\fR|\fB\-mauto\-pic\fR]
- [\fB\-milp32\fR|\fB\-milp64\fR|\fB\-mlp64\fR|\fB\-mp64\fR]
- [\fB\-mle\fR|\fBmbe\fR]
- [\fB\-mtune=itanium1\fR|\fB\-mtune=itanium2\fR]
- [\fB\-munwind\-check=warning\fR|\fB\-munwind\-check=error\fR]
- [\fB\-mhint.b=ok\fR|\fB\-mhint.b=warning\fR|\fB\-mhint.b=error\fR]
- [\fB\-x\fR|\fB\-xexplicit\fR] [\fB\-xauto\fR] [\fB\-xdebug\fR]
-.PP
-\&\fITarget \s-1IP2K\s0 options:\fR
- [\fB\-mip2022\fR|\fB\-mip2022ext\fR]
-.PP
-\&\fITarget M32C options:\fR
- [\fB\-m32c\fR|\fB\-m16c\fR]
-.PP
-\&\fITarget M32R options:\fR
- [\fB\-\-m32rx\fR|\fB\-\-[no\-]warn\-explicit\-parallel\-conflicts\fR|
- \fB\-\-W[n]p\fR]
-.PP
-\&\fITarget M680X0 options:\fR
- [\fB\-l\fR] [\fB\-m68000\fR|\fB\-m68010\fR|\fB\-m68020\fR|...]
-.PP
-\&\fITarget M68HC11 options:\fR
- [\fB\-m68hc11\fR|\fB\-m68hc12\fR|\fB\-m68hcs12\fR]
- [\fB\-mshort\fR|\fB\-mlong\fR]
- [\fB\-mshort\-double\fR|\fB\-mlong\-double\fR]
- [\fB\-\-force\-long\-branchs\fR] [\fB\-\-short\-branchs\fR]
- [\fB\-\-strict\-direct\-mode\fR] [\fB\-\-print\-insn\-syntax\fR]
- [\fB\-\-print\-opcodes\fR] [\fB\-\-generate\-example\fR]
-.PP
-\&\fITarget \s-1MCORE\s0 options:\fR
- [\fB\-jsri2bsr\fR] [\fB\-sifilter\fR] [\fB\-relax\fR]
- [\fB\-mcpu=[210|340]\fR]
-.PP
-\&\fITarget \s-1MIPS\s0 options:\fR
- [\fB\-nocpp\fR] [\fB\-EL\fR] [\fB\-EB\fR] [\fB\-O\fR[\fIoptimization level\fR]]
- [\fB\-g\fR[\fIdebug level\fR]] [\fB\-G\fR \fInum\fR] [\fB\-KPIC\fR] [\fB\-call_shared\fR]
- [\fB\-non_shared\fR] [\fB\-xgot\fR]
- [\fB\-mabi\fR=\fI\s-1ABI\s0\fR] [\fB\-32\fR] [\fB\-n32\fR] [\fB\-64\fR] [\fB\-mfp32\fR] [\fB\-mgp32\fR]
- [\fB\-march\fR=\fI\s-1CPU\s0\fR] [\fB\-mtune\fR=\fI\s-1CPU\s0\fR] [\fB\-mips1\fR] [\fB\-mips2\fR]
- [\fB\-mips3\fR] [\fB\-mips4\fR] [\fB\-mips5\fR] [\fB\-mips32\fR] [\fB\-mips32r2\fR]
- [\fB\-mips64\fR] [\fB\-mips64r2\fR]
- [\fB\-construct\-floats\fR] [\fB\-no\-construct\-floats\fR]
- [\fB\-trap\fR] [\fB\-no\-break\fR] [\fB\-break\fR] [\fB\-no\-trap\fR]
- [\fB\-mfix7000\fR] [\fB\-mno\-fix7000\fR]
- [\fB\-mips16\fR] [\fB\-no\-mips16\fR]
- [\fB\-mips3d\fR] [\fB\-no\-mips3d\fR]
- [\fB\-mdmx\fR] [\fB\-no\-mdmx\fR]
- [\fB\-mdsp\fR] [\fB\-mno\-dsp\fR]
- [\fB\-mmt\fR] [\fB\-mno\-mt\fR]
- [\fB\-mdebug\fR] [\fB\-no\-mdebug\fR]
- [\fB\-mpdr\fR] [\fB\-mno\-pdr\fR]
-.PP
-\&\fITarget \s-1MMIX\s0 options:\fR
- [\fB\-\-fixed\-special\-register\-names\fR] [\fB\-\-globalize\-symbols\fR]
- [\fB\-\-gnu\-syntax\fR] [\fB\-\-relax\fR] [\fB\-\-no\-predefined\-symbols\fR]
- [\fB\-\-no\-expand\fR] [\fB\-\-no\-merge\-gregs\fR] [\fB\-x\fR]
- [\fB\-\-linker\-allocated\-gregs\fR]
-.PP
-\&\fITarget \s-1PDP11\s0 options:\fR
- [\fB\-mpic\fR|\fB\-mno\-pic\fR] [\fB\-mall\fR] [\fB\-mno\-extensions\fR]
- [\fB\-m\fR\fIextension\fR|\fB\-mno\-\fR\fIextension\fR]
- [\fB\-m\fR\fIcpu\fR] [\fB\-m\fR\fImachine\fR]
-.PP
-\&\fITarget picoJava options:\fR
- [\fB\-mb\fR|\fB\-me\fR]
-.PP
-\&\fITarget PowerPC options:\fR
- [\fB\-mpwrx\fR|\fB\-mpwr2\fR|\fB\-mpwr\fR|\fB\-m601\fR|\fB\-mppc\fR|\fB\-mppc32\fR|\fB\-m603\fR|\fB\-m604\fR|
- \fB\-m403\fR|\fB\-m405\fR|\fB\-mppc64\fR|\fB\-m620\fR|\fB\-mppc64bridge\fR|\fB\-mbooke\fR|
- \fB\-mbooke32\fR|\fB\-mbooke64\fR]
- [\fB\-mcom\fR|\fB\-many\fR|\fB\-maltivec\fR] [\fB\-memb\fR]
- [\fB\-mregnames\fR|\fB\-mno\-regnames\fR]
- [\fB\-mrelocatable\fR|\fB\-mrelocatable\-lib\fR]
- [\fB\-mlittle\fR|\fB\-mlittle\-endian\fR|\fB\-mbig\fR|\fB\-mbig\-endian\fR]
- [\fB\-msolaris\fR|\fB\-mno\-solaris\fR]
-.PP
-\&\fITarget \s-1SPARC\s0 options:\fR
- [\fB\-Av6\fR|\fB\-Av7\fR|\fB\-Av8\fR|\fB\-Asparclet\fR|\fB\-Asparclite\fR
- \fB\-Av8plus\fR|\fB\-Av8plusa\fR|\fB\-Av9\fR|\fB\-Av9a\fR]
- [\fB\-xarch=v8plus\fR|\fB\-xarch=v8plusa\fR] [\fB\-bump\fR]
- [\fB\-32\fR|\fB\-64\fR]
-.PP
-\&\fITarget \s-1TIC54X\s0 options:\fR
- [\fB\-mcpu=54[123589]\fR|\fB\-mcpu=54[56]lp\fR] [\fB\-mfar\-mode\fR|\fB\-mf\fR]
- [\fB\-merrors\-to\-file\fR \fI<filename>\fR|\fB\-me\fR \fI<filename>\fR]
-.PP
-\&\fITarget Z80 options:\fR
- [\fB\-z80\fR] [\fB\-r800\fR]
- [ \fB\-ignore\-undocumented\-instructions\fR] [\fB\-Wnud\fR]
- [ \fB\-ignore\-unportable\-instructions\fR] [\fB\-Wnup\fR]
- [ \fB\-warn\-undocumented\-instructions\fR] [\fB\-Wud\fR]
- [ \fB\-warn\-unportable\-instructions\fR] [\fB\-Wup\fR]
- [ \fB\-forbid\-undocumented\-instructions\fR] [\fB\-Fud\fR]
- [ \fB\-forbid\-unportable\-instructions\fR] [\fB\-Fup\fR]
-.PP
-\&\fITarget Xtensa options:\fR
- [\fB\-\-[no\-]text\-section\-literals\fR] [\fB\-\-[no\-]absolute\-literals\fR]
- [\fB\-\-[no\-]target\-align\fR] [\fB\-\-[no\-]longcalls\fR]
- [\fB\-\-[no\-]transform\fR]
- [\fB\-\-rename\-section\fR \fIoldname\fR=\fInewname\fR]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\s-1GNU\s0 \fBas\fR is really a family of assemblers.
-If you use (or have used) the \s-1GNU\s0 assembler on one architecture, you
-should find a fairly similar environment when you use it on another
-architecture. Each version has much in common with the others,
-including object file formats, most assembler directives (often called
-\&\fIpseudo-ops\fR) and assembler syntax.
-.PP
-\&\fBas\fR is primarily intended to assemble the output of the
-\&\s-1GNU\s0 C compiler \f(CW\*(C`gcc\*(C'\fR for use by the linker
-\&\f(CW\*(C`ld\*(C'\fR. Nevertheless, we've tried to make \fBas\fR
-assemble correctly everything that other assemblers for the same
-machine would assemble.
-Any exceptions are documented explicitly.
-This doesn't mean \fBas\fR always uses the same syntax as another
-assembler for the same architecture; for example, we know of several
-incompatible versions of 680x0 assembly language syntax.
-.PP
-Each time you run \fBas\fR it assembles exactly one source
-program. The source program is made up of one or more files.
-(The standard input is also a file.)
-.PP
-You give \fBas\fR a command line that has zero or more input file
-names. The input files are read (from left file name to right). A
-command line argument (in any position) that has no special meaning
-is taken to be an input file name.
-.PP
-If you give \fBas\fR no file names it attempts to read one input file
-from the \fBas\fR standard input, which is normally your terminal. You
-may have to type \fBctl-D\fR to tell \fBas\fR there is no more program
-to assemble.
-.PP
-Use \fB\-\-\fR if you need to explicitly name the standard input file
-in your command line.
-.PP
-If the source is empty, \fBas\fR produces a small, empty object
-file.
-.PP
-\&\fBas\fR may write warnings and error messages to the standard error
-file (usually your terminal). This should not happen when a compiler
-runs \fBas\fR automatically. Warnings report an assumption made so
-that \fBas\fR could keep assembling a flawed program; errors report a
-grave problem that stops the assembly.
-.PP
-If you are invoking \fBas\fR via the \s-1GNU\s0 C compiler,
-you can use the \fB\-Wa\fR option to pass arguments through to the assembler.
-The assembler arguments must be separated from each other (and the \fB\-Wa\fR)
-by commas. For example:
-.PP
-.Vb 1
-\& gcc \-c \-g \-O \-Wa,\-alh,\-L file.c
-.Ve
-.PP
-This passes two options to the assembler: \fB\-alh\fR (emit a listing to
-standard output with high-level and assembly source) and \fB\-L\fR (retain
-local symbols in the symbol table).
-.PP
-Usually you do not need to use this \fB\-Wa\fR mechanism, since many compiler
-command-line options are automatically passed to the assembler by the compiler.
-(You can call the \s-1GNU\s0 compiler driver with the \fB\-v\fR option to see
-precisely what options it passes to each compilation pass, including the
-assembler.)
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-.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[cdhlmns]\fR" 4
-.IX Item "-a[cdhlmns]"
-Turn on listings, in any of a variety of ways:
-.RS 4
-.IP "\fB\-ac\fR" 4
-.IX Item "-ac"
-omit false conditionals
-.IP "\fB\-ad\fR" 4
-.IX Item "-ad"
-omit debugging directives
-.IP "\fB\-ah\fR" 4
-.IX Item "-ah"
-include high-level source
-.IP "\fB\-al\fR" 4
-.IX Item "-al"
-include assembly
-.IP "\fB\-am\fR" 4
-.IX Item "-am"
-include macro expansions
-.IP "\fB\-an\fR" 4
-.IX Item "-an"
-omit forms processing
-.IP "\fB\-as\fR" 4
-.IX Item "-as"
-include symbols
-.IP "\fB=file\fR" 4
-.IX Item "=file"
-set the name of the listing file
-.RE
-.RS 4
-.Sp
-You may combine these options; for example, use \fB\-aln\fR for assembly
-listing without forms processing. The \fB=file\fR option, if used, must be
-the last one. By itself, \fB\-a\fR defaults to \fB\-ahls\fR.
-.RE
-.IP "\fB\-\-alternate\fR" 4
-.IX Item "--alternate"
-Begin in alternate macro mode, see \fBAltmacro,,\f(CB\*(C`.altmacro\*(C'\fB\fR.
-.IP "\fB\-D\fR" 4
-.IX Item "-D"
-Ignored. This option is accepted for script compatibility with calls to
-other assemblers.
-.IP "\fB\-\-defsym\fR \fIsym\fR\fB=\fR\fIvalue\fR" 4
-.IX Item "--defsym sym=value"
-Define the symbol \fIsym\fR to be \fIvalue\fR before assembling the input file.
-\&\fIvalue\fR must be an integer constant. As in C, a leading \fB0x\fR
-indicates a hexadecimal value, and a leading \fB0\fR indicates an octal value.
-.IP "\fB\-f\fR" 4
-.IX Item "-f"
-\&\*(L"fast\*(R"\-\-\-skip whitespace and comment preprocessing (assume source is
-compiler output).
-.IP "\fB\-g\fR" 4
-.IX Item "-g"
-.PD 0
-.IP "\fB\-\-gen\-debug\fR" 4
-.IX Item "--gen-debug"
-.PD
-Generate debugging information for each assembler source line using whichever
-debug format is preferred by the target. This currently means either \s-1STABS\s0,
-\&\s-1ECOFF\s0 or \s-1DWARF2\s0.
-.IP "\fB\-\-gstabs\fR" 4
-.IX Item "--gstabs"
-Generate stabs debugging information for each assembler line. This
-may help debugging assembler code, if the debugger can handle it.
-.IP "\fB\-\-gstabs+\fR" 4
-.IX Item "--gstabs+"
-Generate stabs debugging information for each assembler line, with \s-1GNU\s0
-extensions that probably only gdb can handle, and that could make other
-debuggers crash or refuse to read your program. This
-may help debugging assembler code. Currently the only \s-1GNU\s0 extension is
-the location of the current working directory at assembling time.
-.IP "\fB\-\-gdwarf\-2\fR" 4
-.IX Item "--gdwarf-2"
-Generate \s-1DWARF2\s0 debugging information for each assembler line. This
-may help debugging assembler code, if the debugger can handle it. Note\-\-\-this
-option is only supported by some targets, not all of them.
-.IP "\fB\-\-help\fR" 4
-.IX Item "--help"
-Print a summary of the command line options and exit.
-.IP "\fB\-\-target\-help\fR" 4
-.IX Item "--target-help"
-Print a summary of all target specific options and exit.
-.IP "\fB\-I\fR \fIdir\fR" 4
-.IX Item "-I dir"
-Add directory \fIdir\fR to the search list for \f(CW\*(C`.include\*(C'\fR directives.
-.IP "\fB\-J\fR" 4
-.IX Item "-J"
-Don't warn about signed overflow.
-.IP "\fB\-K\fR" 4
-.IX Item "-K"
-Issue warnings when difference tables altered for long displacements.
-.IP "\fB\-L\fR" 4
-.IX Item "-L"
-.PD 0
-.IP "\fB\-\-keep\-locals\fR" 4
-.IX Item "--keep-locals"
-.PD
-Keep (in the symbol table) local symbols. On traditional a.out systems
-these start with \fBL\fR, but different systems have different local
-label prefixes.
-.IP "\fB\-\-listing\-lhs\-width=\fR\fInumber\fR" 4
-.IX Item "--listing-lhs-width=number"
-Set the maximum width, in words, of the output data column for an assembler
-listing to \fInumber\fR.
-.IP "\fB\-\-listing\-lhs\-width2=\fR\fInumber\fR" 4
-.IX Item "--listing-lhs-width2=number"
-Set the maximum width, in words, of the output data column for continuation
-lines in an assembler listing to \fInumber\fR.
-.IP "\fB\-\-listing\-rhs\-width=\fR\fInumber\fR" 4
-.IX Item "--listing-rhs-width=number"
-Set the maximum width of an input source line, as displayed in a listing, to
-\&\fInumber\fR bytes.
-.IP "\fB\-\-listing\-cont\-lines=\fR\fInumber\fR" 4
-.IX Item "--listing-cont-lines=number"
-Set the maximum number of lines printed in a listing for a single line of input
-to \fInumber\fR + 1.
-.IP "\fB\-o\fR \fIobjfile\fR" 4
-.IX Item "-o objfile"
-Name the object-file output from \fBas\fR \fIobjfile\fR.
-.IP "\fB\-R\fR" 4
-.IX Item "-R"
-Fold the data section into the text section.
-.Sp
-Set the default size of \s-1GAS\s0's hash tables to a prime number close to
-\&\fInumber\fR. Increasing this value can reduce the length of time it takes the
-assembler to perform its tasks, at the expense of increasing the assembler'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 \s-1GAS\s0's memory requirements, at the expense of making the
-assembly processes slower. Currently this switch is a synonym for
-\&\fB\-\-hash\-size=4051\fR, but in the future it may have other effects as well.
-.IP "\fB\-\-statistics\fR" 4
-.IX Item "--statistics"
-Print the maximum space (in bytes) and total time (in seconds) used by
-assembly.
-.IP "\fB\-\-strip\-local\-absolute\fR" 4
-.IX Item "--strip-local-absolute"
-Remove local absolute symbols from the outgoing symbol table.
-.IP "\fB\-v\fR" 4
-.IX Item "-v"
-.PD 0
-.IP "\fB\-version\fR" 4
-.IX Item "-version"
-.PD
-Print the \fBas\fR version.
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-Print the \fBas\fR version and exit.
-.IP "\fB\-W\fR" 4
-.IX Item "-W"
-.PD 0
-.IP "\fB\-\-no\-warn\fR" 4
-.IX Item "--no-warn"
-.PD
-Suppress warning messages.
-.IP "\fB\-\-fatal\-warnings\fR" 4
-.IX Item "--fatal-warnings"
-Treat warnings as errors.
-.IP "\fB\-\-warn\fR" 4
-.IX Item "--warn"
-Don't suppress warning messages or treat them as errors.
-.IP "\fB\-w\fR" 4
-.IX Item "-w"
-Ignored.
-.IP "\fB\-x\fR" 4
-.IX Item "-x"
-Ignored.
-.IP "\fB\-Z\fR" 4
-.IX Item "-Z"
-Generate an object file even after errors.
-.IP "\fB\-\- |\fR \fIfiles\fR \fB...\fR" 4
-.IX Item "-- | files ..."
-Standard input, or source files to assemble.
-.PP
-The following options are available when as is configured for
-an \s-1ARC\s0 processor.
-.IP "\fB\-marc[5|6|7|8]\fR" 4
-.IX Item "-marc[5|6|7|8]"
-This option selects the core processor variant.
-.IP "\fB\-EB | \-EL\fR" 4
-.IX Item "-EB | -EL"
-Select either big-endian (\-EB) or little-endian (\-EL) output.
-.PP
-The following options are available when as is configured for the \s-1ARM\s0
-processor family.
-.IP "\fB\-mcpu=\fR\fIprocessor\fR\fB[+\fR\fIextension\fR\fB...]\fR" 4
-.IX Item "-mcpu=processor[+extension...]"
-Specify which \s-1ARM\s0 processor variant is the target.
-.IP "\fB\-march=\fR\fIarchitecture\fR\fB[+\fR\fIextension\fR\fB...]\fR" 4
-.IX Item "-march=architecture[+extension...]"
-Specify which \s-1ARM\s0 architecture variant is used by the target.
-.IP "\fB\-mfpu=\fR\fIfloating-point-format\fR" 4
-.IX Item "-mfpu=floating-point-format"
-Select which Floating Point architecture is the target.
-.IP "\fB\-mfloat\-abi=\fR\fIabi\fR" 4
-.IX Item "-mfloat-abi=abi"
-Select which floating point \s-1ABI\s0 is in use.
-.IP "\fB\-mthumb\fR" 4
-.IX Item "-mthumb"
-Enable Thumb only instruction decoding.
-.IP "\fB\-mapcs\-32 | \-mapcs\-26 | \-mapcs\-float | \-mapcs\-reentrant\fR" 4
-.IX Item "-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant"
-Select which procedure calling convention is in use.
-.IP "\fB\-EB | \-EL\fR" 4
-.IX Item "-EB | -EL"
-Select either big-endian (\-EB) or little-endian (\-EL) output.
-.IP "\fB\-mthumb\-interwork\fR" 4
-.IX Item "-mthumb-interwork"
-Specify that the code has been generated with interworking between Thumb and
-\&\s-1ARM\s0 code in mind.
-.IP "\fB\-k\fR" 4
-.IX Item "-k"
-Specify that \s-1PIC\s0 code has been generated.
-.PP
-See the info pages for documentation of the CRIS-specific options.
-.PP
-The following options are available when as is configured for
-a D10V processor.
-.IP "\fB\-O\fR" 4
-.IX Item "-O"
-Optimize output by parallelizing instructions.
-.PP
-The following options are available when as is configured for a D30V
-processor.
-.IP "\fB\-O\fR" 4
-.IX Item "-O"
-Optimize output by parallelizing instructions.
-.IP "\fB\-n\fR" 4
-.IX Item "-n"
-Warn when nops are generated.
-.IP "\fB\-N\fR" 4
-.IX Item "-N"
-Warn when a nop after a 32\-bit multiply instruction is generated.
-.PP
-The following options are available when as is configured for the
-Intel 80960 processor.
-.IP "\fB\-ACA | \-ACA_A | \-ACB | \-ACC | \-AKA | \-AKB | \-AKC | \-AMC\fR" 4
-.IX Item "-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC"
-Specify which variant of the 960 architecture is the target.
-.IP "\fB\-b\fR" 4
-.IX Item "-b"
-Add code to collect statistics about branches taken.
-.IP "\fB\-no\-relax\fR" 4
-.IX Item "-no-relax"
-Do not alter compare-and-branch instructions for long displacements;
-error if necessary.
-.PP
-The following options are available when as is configured for the
-Ubicom \s-1IP2K\s0 series.
-.IP "\fB\-mip2022ext\fR" 4
-.IX Item "-mip2022ext"
-Specifies that the extended \s-1IP2022\s0 instructions are allowed.
-.IP "\fB\-mip2022\fR" 4
-.IX Item "-mip2022"
-Restores the default behaviour, which restricts the permitted instructions to
-just the basic \s-1IP2022\s0 ones.
-.PP
-The following options are available when as is configured for the
-Renesas M32C and M16C processors.
-.IP "\fB\-m32c\fR" 4
-.IX Item "-m32c"
-Assemble M32C instructions.
-.IP "\fB\-m16c\fR" 4
-.IX Item "-m16c"
-Assemble M16C instructions (the default).
-.PP
-The following options are available when as is configured for the
-Renesas M32R (formerly Mitsubishi M32R) series.
-.IP "\fB\-\-m32rx\fR" 4
-.IX Item "--m32rx"
-Specify which processor in the M32R family is the target. The default
-is normally the M32R, but this option changes it to the M32RX.
-.IP "\fB\-\-warn\-explicit\-parallel\-conflicts or \-\-Wp\fR" 4
-.IX Item "--warn-explicit-parallel-conflicts or --Wp"
-Produce warning messages when questionable parallel constructs are
-encountered.
-.IP "\fB\-\-no\-warn\-explicit\-parallel\-conflicts or \-\-Wnp\fR" 4
-.IX Item "--no-warn-explicit-parallel-conflicts or --Wnp"
-Do not produce warning messages when questionable parallel constructs are
-encountered.
-.PP
-The following options are available when as is configured for the
-Motorola 68000 series.
-.IP "\fB\-l\fR" 4
-.IX Item "-l"
-Shorten references to undefined symbols, to one word instead of two.
-.IP "\fB\-m68000 | \-m68008 | \-m68010 | \-m68020 | \-m68030\fR" 4
-.IX Item "-m68000 | -m68008 | -m68010 | -m68020 | -m68030"
-.PD 0
-.IP "\fB| \-m68040 | \-m68060 | \-m68302 | \-m68331 | \-m68332\fR" 4
-.IX Item "| -m68040 | -m68060 | -m68302 | -m68331 | -m68332"
-.IP "\fB| \-m68333 | \-m68340 | \-mcpu32 | \-m5200\fR" 4
-.IX Item "| -m68333 | -m68340 | -mcpu32 | -m5200"
-.PD
-Specify what processor in the 68000 family is the target. The default
-is normally the 68020, but this can be changed at configuration time.
-.IP "\fB\-m68881 | \-m68882 | \-mno\-68881 | \-mno\-68882\fR" 4
-.IX Item "-m68881 | -m68882 | -mno-68881 | -mno-68882"
-The target machine does (or does not) have a floating-point coprocessor.
-The default is to assume a coprocessor for 68020, 68030, and cpu32. Although
-the basic 68000 is not compatible with the 68881, a combination of the
-two can be specified, since it's possible to do emulation of the
-coprocessor instructions with the main processor.
-.IP "\fB\-m68851 | \-mno\-68851\fR" 4
-.IX Item "-m68851 | -mno-68851"
-The target machine does (or does not) have a memory-management
-unit coprocessor. The default is to assume an \s-1MMU\s0 for 68020 and up.
-.PP
-For details about the \s-1PDP\-11\s0 machine dependent features options,
-see \fBPDP\-11\-Options\fR.
-.IP "\fB\-mpic | \-mno\-pic\fR" 4
-.IX Item "-mpic | -mno-pic"
-Generate position-independent (or position\-dependent) code. The
-default is \fB\-mpic\fR.
-.IP "\fB\-mall\fR" 4
-.IX Item "-mall"
-.PD 0
-.IP "\fB\-mall\-extensions\fR" 4
-.IX Item "-mall-extensions"
-.PD
-Enable all instruction set extensions. This is the default.
-.IP "\fB\-mno\-extensions\fR" 4
-.IX Item "-mno-extensions"
-Disable all instruction set extensions.
-.IP "\fB\-m\fR\fIextension\fR \fB| \-mno\-\fR\fIextension\fR" 4
-.IX Item "-mextension | -mno-extension"
-Enable (or disable) a particular instruction set extension.
-.IP "\fB\-m\fR\fIcpu\fR" 4
-.IX Item "-mcpu"
-Enable the instruction set extensions supported by a particular \s-1CPU\s0, and
-disable all other extensions.
-.IP "\fB\-m\fR\fImachine\fR" 4
-.IX Item "-mmachine"
-Enable the instruction set extensions supported by a particular machine
-model, and disable all other extensions.
-.PP
-The following options are available when as is configured for
-a picoJava processor.
-.IP "\fB\-mb\fR" 4
-.IX Item "-mb"
-Generate \*(L"big endian\*(R" format output.
-.IP "\fB\-ml\fR" 4
-.IX Item "-ml"
-Generate \*(L"little endian\*(R" format output.
-.PP
-The following options are available when as is configured for the
-Motorola 68HC11 or 68HC12 series.
-.IP "\fB\-m68hc11 | \-m68hc12 | \-m68hcs12\fR" 4
-.IX Item "-m68hc11 | -m68hc12 | -m68hcs12"
-Specify what processor is the target. The default is
-defined by the configuration option when building the assembler.
-.IP "\fB\-mshort\fR" 4
-.IX Item "-mshort"
-Specify to use the 16\-bit integer \s-1ABI\s0.
-.IP "\fB\-mlong\fR" 4
-.IX Item "-mlong"
-Specify to use the 32\-bit integer \s-1ABI\s0.
-.IP "\fB\-mshort\-double\fR" 4
-.IX Item "-mshort-double"
-Specify to use the 32\-bit double \s-1ABI\s0.
-.IP "\fB\-mlong\-double\fR" 4
-.IX Item "-mlong-double"
-Specify to use the 64\-bit double \s-1ABI\s0.
-.IP "\fB\-\-force\-long\-branchs\fR" 4
-.IX Item "--force-long-branchs"
-Relative branches are turned into absolute ones. This concerns
-conditional branches, unconditional branches and branches to a
-sub routine.
-.IP "\fB\-S | \-\-short\-branchs\fR" 4
-.IX Item "-S | --short-branchs"
-Do not turn relative branchs into absolute ones
-when the offset is out of range.
-.IP "\fB\-\-strict\-direct\-mode\fR" 4
-.IX Item "--strict-direct-mode"
-Do not turn the direct addressing mode into extended addressing mode
-when the instruction does not support direct addressing mode.
-.IP "\fB\-\-print\-insn\-syntax\fR" 4
-.IX Item "--print-insn-syntax"
-Print the syntax of instruction in case of error.
-.IP "\fB\-\-print\-opcodes\fR" 4
-.IX Item "--print-opcodes"
-print the list of instructions with syntax and then exit.
-.IP "\fB\-\-generate\-example\fR" 4
-.IX Item "--generate-example"
-print an example of instruction for each possible instruction and then exit.
-This option is only useful for testing \fBas\fR.
-.PP
-The following options are available when \fBas\fR is configured
-for the \s-1SPARC\s0 architecture:
-.IP "\fB\-Av6 | \-Av7 | \-Av8 | \-Asparclet | \-Asparclite\fR" 4
-.IX Item "-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite"
-.PD 0
-.IP "\fB\-Av8plus | \-Av8plusa | \-Av9 | \-Av9a\fR" 4
-.IX Item "-Av8plus | -Av8plusa | -Av9 | -Av9a"
-.PD
-Explicitly select a variant of the \s-1SPARC\s0 architecture.
-.Sp
-\&\fB\-Av8plus\fR and \fB\-Av8plusa\fR select a 32 bit environment.
-\&\fB\-Av9\fR and \fB\-Av9a\fR select a 64 bit environment.
-.Sp
-\&\fB\-Av8plusa\fR and \fB\-Av9a\fR enable the \s-1SPARC\s0 V9 instruction set with
-UltraSPARC extensions.
-.IP "\fB\-xarch=v8plus | \-xarch=v8plusa\fR" 4
-.IX Item "-xarch=v8plus | -xarch=v8plusa"
-For compatibility with the Solaris v9 assembler. These options are
-equivalent to \-Av8plus and \-Av8plusa, respectively.
-.IP "\fB\-bump\fR" 4
-.IX Item "-bump"
-Warn when the assembler switches to another architecture.
-.PP
-The following options are available when as is configured for the 'c54x
-architecture.
-.IP "\fB\-mfar\-mode\fR" 4
-.IX Item "-mfar-mode"
-Enable extended addressing mode. All addresses and relocations will assume
-extended addressing (usually 23 bits).
-.IP "\fB\-mcpu=\fR\fI\s-1CPU_VERSION\s0\fR" 4
-.IX Item "-mcpu=CPU_VERSION"
-Sets the \s-1CPU\s0 version being compiled for.
-.IP "\fB\-merrors\-to\-file\fR \fI\s-1FILENAME\s0\fR" 4
-.IX Item "-merrors-to-file FILENAME"
-Redirect error output to a file, for broken systems which don't support such
-behaviour in the shell.
-.PP
-The following options are available when as is configured for
-a \s-1MIPS\s0 processor.
-.IP "\fB\-G\fR \fInum\fR" 4
-.IX Item "-G num"
-This option sets the largest size of an object that can be referenced
-implicitly with the \f(CW\*(C`gp\*(C'\fR register. It is only accepted for targets that
-use \s-1ECOFF\s0 format, such as a DECstation running Ultrix. The default value is 8.
-.IP "\fB\-EB\fR" 4
-.IX Item "-EB"
-Generate \*(L"big endian\*(R" format output.
-.IP "\fB\-EL\fR" 4
-.IX Item "-EL"
-Generate \*(L"little endian\*(R" format output.
-.IP "\fB\-mips1\fR" 4
-.IX Item "-mips1"
-.PD 0
-.IP "\fB\-mips2\fR" 4
-.IX Item "-mips2"
-.IP "\fB\-mips3\fR" 4
-.IX Item "-mips3"
-.IP "\fB\-mips4\fR" 4
-.IX Item "-mips4"
-.IP "\fB\-mips5\fR" 4
-.IX Item "-mips5"
-.IP "\fB\-mips32\fR" 4
-.IX Item "-mips32"
-.IP "\fB\-mips32r2\fR" 4
-.IX Item "-mips32r2"
-.IP "\fB\-mips64\fR" 4
-.IX Item "-mips64"
-.IP "\fB\-mips64r2\fR" 4
-.IX Item "-mips64r2"
-.PD
-Generate code for a particular \s-1MIPS\s0 Instruction Set Architecture level.
-\&\fB\-mips1\fR is an alias for \fB\-march=r3000\fR, \fB\-mips2\fR is an
-alias for \fB\-march=r6000\fR, \fB\-mips3\fR is an alias for
-\&\fB\-march=r4000\fR and \fB\-mips4\fR is an alias for \fB\-march=r8000\fR.
-\&\fB\-mips5\fR, \fB\-mips32\fR, \fB\-mips32r2\fR, \fB\-mips64\fR, and
-\&\fB\-mips64r2\fR
-correspond to generic
-\&\fB\s-1MIPS\s0 V\fR, \fB\s-1MIPS32\s0\fR, \fB\s-1MIPS32\s0 Release 2\fR, \fB\s-1MIPS64\s0\fR,
-and \fB\s-1MIPS64\s0 Release 2\fR
-\&\s-1ISA\s0 processors, respectively.
-.IP "\fB\-march=\fR\fI\s-1CPU\s0\fR" 4
-.IX Item "-march=CPU"
-Generate code for a particular \s-1MIPS\s0 cpu.
-.IP "\fB\-mtune=\fR\fIcpu\fR" 4
-.IX Item "-mtune=cpu"
-Schedule and tune for a particular \s-1MIPS\s0 cpu.
-.IP "\fB\-mfix7000\fR" 4
-.IX Item "-mfix7000"
-.PD 0
-.IP "\fB\-mno\-fix7000\fR" 4
-.IX Item "-mno-fix7000"
-.PD
-Cause nops to be inserted if the read of the destination register
-of an mfhi or mflo instruction occurs in the following two instructions.
-.IP "\fB\-mdebug\fR" 4
-.IX Item "-mdebug"
-.PD 0
-.IP "\fB\-no\-mdebug\fR" 4
-.IX Item "-no-mdebug"
-.PD
-Cause stabs-style debugging output to go into an ECOFF-style .mdebug
-section instead of the standard \s-1ELF\s0 .stabs sections.
-.IP "\fB\-mpdr\fR" 4
-.IX Item "-mpdr"
-.PD 0
-.IP "\fB\-mno\-pdr\fR" 4
-.IX Item "-mno-pdr"
-.PD
-Control generation of \f(CW\*(C`.pdr\*(C'\fR sections.
-.IP "\fB\-mgp32\fR" 4
-.IX Item "-mgp32"
-.PD 0
-.IP "\fB\-mfp32\fR" 4
-.IX Item "-mfp32"
-.PD
-The register sizes are normally inferred from the \s-1ISA\s0 and \s-1ABI\s0, but these
-flags force a certain group of registers to be treated as 32 bits wide at
-all times. \fB\-mgp32\fR controls the size of general-purpose registers
-and \fB\-mfp32\fR controls the size of floating-point registers.
-.IP "\fB\-mips16\fR" 4
-.IX Item "-mips16"
-.PD 0
-.IP "\fB\-no\-mips16\fR" 4
-.IX Item "-no-mips16"
-.PD
-Generate code for the \s-1MIPS\s0 16 processor. This is equivalent to putting
-\&\f(CW\*(C`.set mips16\*(C'\fR at the start of the assembly file. \fB\-no\-mips16\fR
-turns off this option.
-.IP "\fB\-mips3d\fR" 4
-.IX Item "-mips3d"
-.PD 0
-.IP "\fB\-no\-mips3d\fR" 4
-.IX Item "-no-mips3d"
-.PD
-Generate code for the \s-1MIPS\-3D\s0 Application Specific Extension.
-This tells the assembler to accept \s-1MIPS\-3D\s0 instructions.
-\&\fB\-no\-mips3d\fR turns off this option.
-.IP "\fB\-mdmx\fR" 4
-.IX Item "-mdmx"
-.PD 0
-.IP "\fB\-no\-mdmx\fR" 4
-.IX Item "-no-mdmx"
-.PD
-Generate code for the \s-1MDMX\s0 Application Specific Extension.
-This tells the assembler to accept \s-1MDMX\s0 instructions.
-\&\fB\-no\-mdmx\fR turns off this option.
-.IP "\fB\-mdsp\fR" 4
-.IX Item "-mdsp"
-.PD 0
-.IP "\fB\-mno\-dsp\fR" 4
-.IX Item "-mno-dsp"
-.PD
-Generate code for the \s-1DSP\s0 Application Specific Extension.
-This tells the assembler to accept \s-1DSP\s0 instructions.
-\&\fB\-mno\-dsp\fR turns off this option.
-.IP "\fB\-mmt\fR" 4
-.IX Item "-mmt"
-.PD 0
-.IP "\fB\-mno\-mt\fR" 4
-.IX Item "-mno-mt"
-.PD
-Generate code for the \s-1MT\s0 Application Specific Extension.
-This tells the assembler to accept \s-1MT\s0 instructions.
-\&\fB\-mno\-mt\fR turns off this option.
-.IP "\fB\-\-construct\-floats\fR" 4
-.IX Item "--construct-floats"
-.PD 0
-.IP "\fB\-\-no\-construct\-floats\fR" 4
-.IX Item "--no-construct-floats"
-.PD
-The \fB\-\-no\-construct\-floats\fR option disables the construction of
-double width floating point constants by loading the two halves of the
-value into the two single width floating point registers that make up
-the double width register. By default \fB\-\-construct\-floats\fR is
-selected, allowing construction of these floating point constants.
-.IP "\fB\-\-emulation=\fR\fIname\fR" 4
-.IX Item "--emulation=name"
-This option causes \fBas\fR to emulate \fBas\fR configured
-for some other target, in all respects, including output format (choosing
-between \s-1ELF\s0 and \s-1ECOFF\s0 only), handling of pseudo-opcodes which may generate
-debugging information or store symbol table information, and default
-endianness. The available configuration names are: \fBmipsecoff\fR,
-\&\fBmipself\fR, \fBmipslecoff\fR, \fBmipsbecoff\fR, \fBmipslelf\fR,
-\&\fBmipsbelf\fR. The first two do not alter the default endianness from that
-of the primary target for which the assembler was configured; the others change
-the default to little\- or big-endian as indicated by the \fBb\fR or \fBl\fR
-in the name. Using \fB\-EB\fR or \fB\-EL\fR will override the endianness
-selection in any case.
-.Sp
-This option is currently supported only when the primary target
-\&\fBas\fR is configured for is a \s-1MIPS\s0 \s-1ELF\s0 or \s-1ECOFF\s0 target.
-Furthermore, the primary target or others specified with
-\&\fB\-\-enable\-targets=...\fR at configuration time must include support for
-the other format, if both are to be available. For example, the Irix 5
-configuration includes support for both.
-.Sp
-Eventually, this option will support more configurations, with more
-fine-grained control over the assembler's behavior, and will be supported for
-more processors.
-.IP "\fB\-nocpp\fR" 4
-.IX Item "-nocpp"
-\&\fBas\fR ignores this option. It is accepted for compatibility with
-the native tools.
-.IP "\fB\-\-trap\fR" 4
-.IX Item "--trap"
-.PD 0
-.IP "\fB\-\-no\-trap\fR" 4
-.IX Item "--no-trap"
-.IP "\fB\-\-break\fR" 4
-.IX Item "--break"
-.IP "\fB\-\-no\-break\fR" 4
-.IX Item "--no-break"
-.PD
-Control how to deal with multiplication overflow and division by zero.
-\&\fB\-\-trap\fR or \fB\-\-no\-break\fR (which are synonyms) take a trap exception
-(and only work for Instruction Set Architecture level 2 and higher);
-\&\fB\-\-break\fR or \fB\-\-no\-trap\fR (also synonyms, and the default) take a
-break exception.
-.IP "\fB\-n\fR" 4
-.IX Item "-n"
-When this option is used, \fBas\fR will issue a warning every
-time it generates a nop instruction from a macro.
-.PP
-The following options are available when as is configured for
-an MCore processor.
-.IP "\fB\-jsri2bsr\fR" 4
-.IX Item "-jsri2bsr"
-.PD 0
-.IP "\fB\-nojsri2bsr\fR" 4
-.IX Item "-nojsri2bsr"
-.PD
-Enable or disable the \s-1JSRI\s0 to \s-1BSR\s0 transformation. By default this is enabled.
-The command line option \fB\-nojsri2bsr\fR can be used to disable it.
-.IP "\fB\-sifilter\fR" 4
-.IX Item "-sifilter"
-.PD 0
-.IP "\fB\-nosifilter\fR" 4
-.IX Item "-nosifilter"
-.PD
-Enable or disable the silicon filter behaviour. By default this is disabled.
-The default can be overridden by the \fB\-sifilter\fR command line option.
-.IP "\fB\-relax\fR" 4
-.IX Item "-relax"
-Alter jump instructions for long displacements.
-.IP "\fB\-mcpu=[210|340]\fR" 4
-.IX Item "-mcpu=[210|340]"
-Select the cpu type on the target hardware. This controls which instructions
-can be assembled.
-.IP "\fB\-EB\fR" 4
-.IX Item "-EB"
-Assemble for a big endian target.
-.IP "\fB\-EL\fR" 4
-.IX Item "-EL"
-Assemble for a little endian target.
-.PP
-See the info pages for documentation of the MMIX-specific options.
-.PP
-The following options are available when as is configured for
-an Xtensa processor.
-.IP "\fB\-\-text\-section\-literals | \-\-no\-text\-section\-literals\fR" 4
-.IX Item "--text-section-literals | --no-text-section-literals"
-With \fB\-\-text\-section\-literals\fR, literal pools are interspersed
-in the text section. The default is
-\&\fB\-\-no\-text\-section\-literals\fR, which places literals in a
-separate section in the output file. These options only affect literals
-referenced via PC-relative \f(CW\*(C`L32R\*(C'\fR instructions; literals for
-absolute mode \f(CW\*(C`L32R\*(C'\fR instructions are handled separately.
-.IP "\fB\-\-absolute\-literals | \-\-no\-absolute\-literals\fR" 4
-.IX Item "--absolute-literals | --no-absolute-literals"
-Indicate to the assembler whether \f(CW\*(C`L32R\*(C'\fR instructions use absolute
-or PC-relative addressing. The default is to assume absolute addressing
-if the Xtensa processor includes the absolute \f(CW\*(C`L32R\*(C'\fR addressing
-option. Otherwise, only the PC-relative \f(CW\*(C`L32R\*(C'\fR mode can be used.
-.IP "\fB\-\-target\-align | \-\-no\-target\-align\fR" 4
-.IX Item "--target-align | --no-target-align"
-Enable or disable automatic alignment to reduce branch penalties at the
-expense of some code density. The default is \fB\-\-target\-align\fR.
-.IP "\fB\-\-longcalls | \-\-no\-longcalls\fR" 4
-.IX Item "--longcalls | --no-longcalls"
-Enable or disable transformation of call instructions to allow calls
-across a greater range of addresses. The default is
-\&\fB\-\-no\-longcalls\fR.
-.IP "\fB\-\-transform | \-\-no\-transform\fR" 4
-.IX Item "--transform | --no-transform"
-Enable or disable all assembler transformations of Xtensa instructions.
-The default is \fB\-\-transform\fR;
-\&\fB\-\-no\-transform\fR should be used only in the rare cases when the
-instructions must be exactly as specified in the assembly source.
-.PP
-The following options are available when as is configured for
-a Z80 family processor.
-.IP "\fB\-z80\fR" 4
-.IX Item "-z80"
-Assemble for Z80 processor.
-.IP "\fB\-r800\fR" 4
-.IX Item "-r800"
-Assemble for R800 processor.
-.IP "\fB\-ignore\-undocumented\-instructions\fR" 4
-.IX Item "-ignore-undocumented-instructions"
-.PD 0
-.IP "\fB\-Wnud\fR" 4
-.IX Item "-Wnud"
-.PD
-Assemble undocumented Z80 instructions that also work on R800 without warning.
-.IP "\fB\-ignore\-unportable\-instructions\fR" 4
-.IX Item "-ignore-unportable-instructions"
-.PD 0
-.IP "\fB\-Wnup\fR" 4
-.IX Item "-Wnup"
-.PD
-Assemble all undocumented Z80 instructions without warning.
-.IP "\fB\-warn\-undocumented\-instructions\fR" 4
-.IX Item "-warn-undocumented-instructions"
-.PD 0
-.IP "\fB\-Wud\fR" 4
-.IX Item "-Wud"
-.PD
-Issue a warning for undocumented Z80 instructions that also work on R800.
-.IP "\fB\-warn\-unportable\-instructions\fR" 4
-.IX Item "-warn-unportable-instructions"
-.PD 0
-.IP "\fB\-Wup\fR" 4
-.IX Item "-Wup"
-.PD
-Issue a warning for undocumented Z80 instructions that do notwork on R800.
-.IP "\fB\-forbid\-undocumented\-instructions\fR" 4
-.IX Item "-forbid-undocumented-instructions"
-.PD 0
-.IP "\fB\-Fud\fR" 4
-.IX Item "-Fud"
-.PD
-Treat all undocumented instructions as errors.
-.IP "\fB\-forbid\-unportable\-instructions\fR" 4
-.IX Item "-forbid-unportable-instructions"
-.PD 0
-.IP "\fB\-Fup\fR" 4
-.IX Item "-Fup"
-.PD
-Treat undocumented Z80 intructions that do notwork on R800 as errors.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-\&\fIgcc\fR\|(1), \fIld\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 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/gas/doc/as.info b/gas/doc/as.info
deleted file mode 100644
index adf3ed4558bd..000000000000
--- a/gas/doc/as.info
+++ /dev/null
@@ -1,18352 +0,0 @@
-This is ../.././gas/doc/as.info, produced by makeinfo version 4.8 from
-../.././gas/doc/as.texinfo.
-
-START-INFO-DIR-ENTRY
-* As: (as). The GNU assembler.
-* Gas: (as). The GNU assembler.
-END-INFO-DIR-ENTRY
-
- This file documents the GNU Assembler "as".
-
- Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002
-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".
-
-
-File: as.info, Node: Top, Next: Overview, Up: (dir)
-
-Using as
-********
-
-This file is a user guide to the GNU assembler `as' 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
-* Invoking:: Command-Line Options
-* Syntax:: Syntax
-* Sections:: Sections and Relocation
-* Symbols:: Symbols
-* Expressions:: Expressions
-* Pseudo Ops:: Assembler Directives
-* Machine Dependencies:: Machine Dependent Features
-* Reporting Bugs:: Reporting Bugs
-* Acknowledgements:: Who Did What
-* GNU Free Documentation License:: GNU Free Documentation License
-* Index:: Index
-
-
-File: as.info, Node: Overview, Next: Invoking, Prev: Top, Up: Top
-
-1 Overview
-**********
-
-Here is a brief summary of how to invoke `as'. For details, *note
-Command-Line Options: Invoking.
-
- as [-a[cdhlns][=FILE]] [-alternate] [-D]
- [-defsym SYM=VAL] [-f] [-g] [-gstabs]
- [-gstabs+] [-gdwarf-2] [-help] [-I DIR] [-J]
- [-K] [-L] [-listing-lhs-width=NUM]
- [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM]
- [-listing-cont-lines=NUM] [-keep-locals] [-o
- OBJFILE] [-R] [-reduce-memory-overheads] [-statistics]
- [-v] [-version] [-version] [-W] [-warn]
- [-fatal-warnings] [-w] [-x] [-Z] [@FILE]
- [-target-help] [TARGET-OPTIONS]
- [-|FILES ...]
-
- _Target Alpha options:_
- [-mCPU]
- [-mdebug | -no-mdebug]
- [-relax] [-g] [-GSIZE]
- [-F] [-32addr]
-
- _Target ARC options:_
- [-marc[5|6|7|8]]
- [-EB|-EL]
-
- _Target ARM options:_
- [-mcpu=PROCESSOR[+EXTENSION...]]
- [-march=ARCHITECTURE[+EXTENSION...]]
- [-mfpu=FLOATING-POINT-FORMAT]
- [-mfloat-abi=ABI]
- [-meabi=VER]
- [-mthumb]
- [-EB|-EL]
- [-mapcs-32|-mapcs-26|-mapcs-float|
- -mapcs-reentrant]
- [-mthumb-interwork] [-k]
-
- _Target CRIS options:_
- [-underscore | -no-underscore]
- [-pic] [-N]
- [-emulation=criself | -emulation=crisaout]
- [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32]
-
- _Target D10V options:_
- [-O]
-
- _Target D30V options:_
- [-O|-n|-N]
-
- _Target i386 options:_
- [-32|-64] [-n]
-
- _Target i960 options:_
- [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB|
- -AKC|-AMC]
- [-b] [-no-relax]
-
- _Target IA-64 options:_
- [-mconstant-gp|-mauto-pic]
- [-milp32|-milp64|-mlp64|-mp64]
- [-mle|mbe]
- [-mtune=itanium1|-mtune=itanium2]
- [-munwind-check=warning|-munwind-check=error]
- [-mhint.b=ok|-mhint.b=warning|-mhint.b=error]
- [-x|-xexplicit] [-xauto] [-xdebug]
-
- _Target IP2K options:_
- [-mip2022|-mip2022ext]
-
- _Target M32C options:_
- [-m32c|-m16c]
-
- _Target M32R options:_
- [-m32rx|-[no-]warn-explicit-parallel-conflicts|
- -W[n]p]
-
- _Target M680X0 options:_
- [-l] [-m68000|-m68010|-m68020|...]
-
- _Target M68HC11 options:_
- [-m68hc11|-m68hc12|-m68hcs12]
- [-mshort|-mlong]
- [-mshort-double|-mlong-double]
- [-force-long-branchs] [-short-branchs]
- [-strict-direct-mode] [-print-insn-syntax]
- [-print-opcodes] [-generate-example]
-
- _Target MCORE options:_
- [-jsri2bsr] [-sifilter] [-relax]
- [-mcpu=[210|340]]
-
- _Target MIPS options:_
- [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]]
- [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared]
- [-non_shared] [-xgot]
- [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32]
- [-march=CPU] [-mtune=CPU] [-mips1] [-mips2]
- [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2]
- [-mips64] [-mips64r2]
- [-construct-floats] [-no-construct-floats]
- [-trap] [-no-break] [-break] [-no-trap]
- [-mfix7000] [-mno-fix7000]
- [-mips16] [-no-mips16]
- [-mips3d] [-no-mips3d]
- [-mdmx] [-no-mdmx]
- [-mdsp] [-mno-dsp]
- [-mmt] [-mno-mt]
- [-mdebug] [-no-mdebug]
- [-mpdr] [-mno-pdr]
-
- _Target MMIX options:_
- [-fixed-special-register-names] [-globalize-symbols]
- [-gnu-syntax] [-relax] [-no-predefined-symbols]
- [-no-expand] [-no-merge-gregs] [-x]
- [-linker-allocated-gregs]
-
- _Target PDP11 options:_
- [-mpic|-mno-pic] [-mall] [-mno-extensions]
- [-mEXTENSION|-mno-EXTENSION]
- [-mCPU] [-mMACHINE]
-
- _Target picoJava options:_
- [-mb|-me]
-
- _Target PowerPC options:_
- [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|
- -m403|-m405|-mppc64|-m620|-mppc64bridge|-mbooke|
- -mbooke32|-mbooke64]
- [-mcom|-many|-maltivec] [-memb]
- [-mregnames|-mno-regnames]
- [-mrelocatable|-mrelocatable-lib]
- [-mlittle|-mlittle-endian|-mbig|-mbig-endian]
- [-msolaris|-mno-solaris]
-
- _Target SPARC options:_
- [-Av6|-Av7|-Av8|-Asparclet|-Asparclite
- -Av8plus|-Av8plusa|-Av9|-Av9a]
- [-xarch=v8plus|-xarch=v8plusa] [-bump]
- [-32|-64]
-
- _Target TIC54X options:_
- [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf]
- [-merrors-to-file <FILENAME>|-me <FILENAME>]
-
-
- _Target Z80 options:_
- [-z80] [-r800]
- [ -ignore-undocumented-instructions] [-Wnud]
- [ -ignore-unportable-instructions] [-Wnup]
- [ -warn-undocumented-instructions] [-Wud]
- [ -warn-unportable-instructions] [-Wup]
- [ -forbid-undocumented-instructions] [-Fud]
- [ -forbid-unportable-instructions] [-Fup]
-
-
- _Target Xtensa options:_
- [-[no-]text-section-literals] [-[no-]absolute-literals]
- [-[no-]target-align] [-[no-]longcalls]
- [-[no-]transform]
- [-rename-section OLDNAME=NEWNAME]
-
-`@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.
-
-`-a[cdhlmns]'
- Turn on listings, in any of a variety of ways:
-
- `-ac'
- omit false conditionals
-
- `-ad'
- omit debugging directives
-
- `-ah'
- include high-level source
-
- `-al'
- include assembly
-
- `-am'
- include macro expansions
-
- `-an'
- omit forms processing
-
- `-as'
- include symbols
-
- `=file'
- set the name of the listing file
-
- You may combine these options; for example, use `-aln' for assembly
- listing without forms processing. The `=file' option, if used,
- must be the last one. By itself, `-a' defaults to `-ahls'.
-
-`--alternate'
- Begin in alternate macro mode, see *Note `.altmacro': Altmacro.
-
-`-D'
- Ignored. This option is accepted for script compatibility with
- calls to other assemblers.
-
-`--defsym SYM=VALUE'
- Define the symbol SYM to be VALUE before assembling the input file.
- VALUE must be an integer constant. As in C, a leading `0x'
- indicates a hexadecimal value, and a leading `0' indicates an
- octal value.
-
-`-f'
- "fast"--skip whitespace and comment preprocessing (assume source is
- compiler output).
-
-`-g'
-`--gen-debug'
- Generate debugging information for each assembler source line
- using whichever debug format is preferred by the target. This
- currently means either STABS, ECOFF or DWARF2.
-
-`--gstabs'
- Generate stabs debugging information for each assembler line. This
- may help debugging assembler code, if the debugger can handle it.
-
-`--gstabs+'
- Generate stabs debugging information for each assembler line, with
- GNU extensions that probably only gdb can handle, and that could
- make other debuggers crash or refuse to read your program. This
- may help debugging assembler code. Currently the only GNU
- extension is the location of the current working directory at
- assembling time.
-
-`--gdwarf-2'
- Generate DWARF2 debugging information for each assembler line.
- This may help debugging assembler code, if the debugger can handle
- it. Note--this option is only supported by some targets, not all
- of them.
-
-`--help'
- Print a summary of the command line options and exit.
-
-`--target-help'
- Print a summary of all target specific options and exit.
-
-`-I DIR'
- Add directory DIR to the search list for `.include' directives.
-
-`-J'
- Don't warn about signed overflow.
-
-`-K'
- Issue warnings when difference tables altered for long
- displacements.
-
-`-L'
-`--keep-locals'
- Keep (in the symbol table) local symbols. On traditional a.out
- systems these start with `L', but different systems have different
- local label prefixes.
-
-`--listing-lhs-width=NUMBER'
- Set the maximum width, in words, of the output data column for an
- assembler listing to NUMBER.
-
-`--listing-lhs-width2=NUMBER'
- Set the maximum width, in words, of the output data column for
- continuation lines in an assembler listing to NUMBER.
-
-`--listing-rhs-width=NUMBER'
- Set the maximum width of an input source line, as displayed in a
- listing, to NUMBER bytes.
-
-`--listing-cont-lines=NUMBER'
- Set the maximum number of lines printed in a listing for a single
- line of input to NUMBER + 1.
-
-`-o OBJFILE'
- Name the object-file output from `as' OBJFILE.
-
-`-R'
- Fold the data section into the text section.
-
- Set the default size of GAS's hash tables to a prime number close
- to NUMBER. Increasing this value can reduce the length of time it
- takes the assembler to perform its tasks, at the expense of
- increasing the assembler's memory requirements. Similarly
- reducing this value can reduce the memory requirements at the
- expense of speed.
-
-`--reduce-memory-overheads'
- This option reduces GAS's memory requirements, at the expense of
- making the assembly processes slower. Currently this switch is a
- synonym for `--hash-size=4051', but in the future it may have
- other effects as well.
-
-`--statistics'
- Print the maximum space (in bytes) and total time (in seconds)
- used by assembly.
-
-`--strip-local-absolute'
- Remove local absolute symbols from the outgoing symbol table.
-
-`-v'
-`-version'
- Print the `as' version.
-
-`--version'
- Print the `as' version and exit.
-
-`-W'
-`--no-warn'
- Suppress warning messages.
-
-`--fatal-warnings'
- Treat warnings as errors.
-
-`--warn'
- Don't suppress warning messages or treat them as errors.
-
-`-w'
- Ignored.
-
-`-x'
- Ignored.
-
-`-Z'
- Generate an object file even after errors.
-
-`-- | FILES ...'
- Standard input, or source files to assemble.
-
-
- The following options are available when as is configured for an ARC
-processor.
-
-`-marc[5|6|7|8]'
- This option selects the core processor variant.
-
-`-EB | -EL'
- Select either big-endian (-EB) or little-endian (-EL) output.
-
- The following options are available when as is configured for the ARM
-processor family.
-
-`-mcpu=PROCESSOR[+EXTENSION...]'
- Specify which ARM processor variant is the target.
-
-`-march=ARCHITECTURE[+EXTENSION...]'
- Specify which ARM architecture variant is used by the target.
-
-`-mfpu=FLOATING-POINT-FORMAT'
- Select which Floating Point architecture is the target.
-
-`-mfloat-abi=ABI'
- Select which floating point ABI is in use.
-
-`-mthumb'
- Enable Thumb only instruction decoding.
-
-`-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant'
- Select which procedure calling convention is in use.
-
-`-EB | -EL'
- Select either big-endian (-EB) or little-endian (-EL) output.
-
-`-mthumb-interwork'
- Specify that the code has been generated with interworking between
- Thumb and ARM code in mind.
-
-`-k'
- Specify that PIC code has been generated.
-
- See the info pages for documentation of the CRIS-specific options.
-
- The following options are available when as is configured for a D10V
-processor.
-`-O'
- Optimize output by parallelizing instructions.
-
- The following options are available when as is configured for a D30V
-processor.
-`-O'
- Optimize output by parallelizing instructions.
-
-`-n'
- Warn when nops are generated.
-
-`-N'
- Warn when a nop after a 32-bit multiply instruction is generated.
-
- The following options are available when as is configured for the
-Intel 80960 processor.
-
-`-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
- Specify which variant of the 960 architecture is the target.
-
-`-b'
- Add code to collect statistics about branches taken.
-
-`-no-relax'
- Do not alter compare-and-branch instructions for long
- displacements; error if necessary.
-
-
- The following options are available when as is configured for the
-Ubicom IP2K series.
-
-`-mip2022ext'
- Specifies that the extended IP2022 instructions are allowed.
-
-`-mip2022'
- Restores the default behaviour, which restricts the permitted
- instructions to just the basic IP2022 ones.
-
-
- The following options are available when as is configured for the
-Renesas M32C and M16C processors.
-
-`-m32c'
- Assemble M32C instructions.
-
-`-m16c'
- Assemble M16C instructions (the default).
-
-
- The following options are available when as is configured for the
-Renesas M32R (formerly Mitsubishi M32R) series.
-
-`--m32rx'
- Specify which processor in the M32R family is the target. The
- default is normally the M32R, but this option changes it to the
- M32RX.
-
-`--warn-explicit-parallel-conflicts or --Wp'
- Produce warning messages when questionable parallel constructs are
- encountered.
-
-`--no-warn-explicit-parallel-conflicts or --Wnp'
- Do not produce warning messages when questionable parallel
- constructs are encountered.
-
-
- The following options are available when as is configured for the
-Motorola 68000 series.
-
-`-l'
- Shorten references to undefined symbols, to one word instead of
- two.
-
-`-m68000 | -m68008 | -m68010 | -m68020 | -m68030'
-`| -m68040 | -m68060 | -m68302 | -m68331 | -m68332'
-`| -m68333 | -m68340 | -mcpu32 | -m5200'
- Specify what processor in the 68000 family is the target. The
- default is normally the 68020, but this can be changed at
- configuration time.
-
-`-m68881 | -m68882 | -mno-68881 | -mno-68882'
- The target machine does (or does not) have a floating-point
- coprocessor. The default is to assume a coprocessor for 68020,
- 68030, and cpu32. Although the basic 68000 is not compatible with
- the 68881, a combination of the two can be specified, since it's
- possible to do emulation of the coprocessor instructions with the
- main processor.
-
-`-m68851 | -mno-68851'
- The target machine does (or does not) have a memory-management
- unit coprocessor. The default is to assume an MMU for 68020 and
- up.
-
-
- For details about the PDP-11 machine dependent features options, see
-*Note PDP-11-Options::.
-
-`-mpic | -mno-pic'
- Generate position-independent (or position-dependent) code. The
- default is `-mpic'.
-
-`-mall'
-`-mall-extensions'
- Enable all instruction set extensions. This is the default.
-
-`-mno-extensions'
- Disable all instruction set extensions.
-
-`-mEXTENSION | -mno-EXTENSION'
- Enable (or disable) a particular instruction set extension.
-
-`-mCPU'
- Enable the instruction set extensions supported by a particular
- CPU, and disable all other extensions.
-
-`-mMACHINE'
- Enable the instruction set extensions supported by a particular
- machine model, and disable all other extensions.
-
- The following options are available when as is configured for a
-picoJava processor.
-
-`-mb'
- Generate "big endian" format output.
-
-`-ml'
- Generate "little endian" format output.
-
-
- The following options are available when as is configured for the
-Motorola 68HC11 or 68HC12 series.
-
-`-m68hc11 | -m68hc12 | -m68hcs12'
- Specify what processor is the target. The default is defined by
- the configuration option when building the assembler.
-
-`-mshort'
- Specify to use the 16-bit integer ABI.
-
-`-mlong'
- Specify to use the 32-bit integer ABI.
-
-`-mshort-double'
- Specify to use the 32-bit double ABI.
-
-`-mlong-double'
- Specify to use the 64-bit double ABI.
-
-`--force-long-branchs'
- Relative branches are turned into absolute ones. This concerns
- conditional branches, unconditional branches and branches to a sub
- routine.
-
-`-S | --short-branchs'
- Do not turn relative branchs into absolute ones when the offset is
- out of range.
-
-`--strict-direct-mode'
- Do not turn the direct addressing mode into extended addressing
- mode when the instruction does not support direct addressing mode.
-
-`--print-insn-syntax'
- Print the syntax of instruction in case of error.
-
-`--print-opcodes'
- print the list of instructions with syntax and then exit.
-
-`--generate-example'
- print an example of instruction for each possible instruction and
- then exit. This option is only useful for testing `as'.
-
-
- The following options are available when `as' is configured for the
-SPARC architecture:
-
-`-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
-`-Av8plus | -Av8plusa | -Av9 | -Av9a'
- Explicitly select a variant of the SPARC architecture.
-
- `-Av8plus' and `-Av8plusa' select a 32 bit environment. `-Av9'
- and `-Av9a' select a 64 bit environment.
-
- `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
- UltraSPARC extensions.
-
-`-xarch=v8plus | -xarch=v8plusa'
- For compatibility with the Solaris v9 assembler. These options are
- equivalent to -Av8plus and -Av8plusa, respectively.
-
-`-bump'
- Warn when the assembler switches to another architecture.
-
- The following options are available when as is configured for the
-'c54x architecture.
-
-`-mfar-mode'
- Enable extended addressing mode. All addresses and relocations
- will assume extended addressing (usually 23 bits).
-
-`-mcpu=CPU_VERSION'
- Sets the CPU version being compiled for.
-
-`-merrors-to-file FILENAME'
- Redirect error output to a file, for broken systems which don't
- support such behaviour in the shell.
-
- The following options are available when as is configured for a MIPS
-processor.
-
-`-G NUM'
- This option sets the largest size of an object that can be
- referenced implicitly with the `gp' register. It is only accepted
- for targets that use ECOFF format, such as a DECstation running
- Ultrix. The default value is 8.
-
-`-EB'
- Generate "big endian" format output.
-
-`-EL'
- Generate "little endian" format output.
-
-`-mips1'
-`-mips2'
-`-mips3'
-`-mips4'
-`-mips5'
-`-mips32'
-`-mips32r2'
-`-mips64'
-`-mips64r2'
- Generate code for a particular MIPS Instruction Set Architecture
- level. `-mips1' is an alias for `-march=r3000', `-mips2' is an
- alias for `-march=r6000', `-mips3' is an alias for `-march=r4000'
- and `-mips4' is an alias for `-march=r8000'. `-mips5', `-mips32',
- `-mips32r2', `-mips64', and `-mips64r2' correspond to generic
- `MIPS V', `MIPS32', `MIPS32 Release 2', `MIPS64', and `MIPS64
- Release 2' ISA processors, respectively.
-
-`-march=CPU'
- Generate code for a particular MIPS cpu.
-
-`-mtune=CPU'
- Schedule and tune for a particular MIPS cpu.
-
-`-mfix7000'
-`-mno-fix7000'
- Cause nops to be inserted if the read of the destination register
- of an mfhi or mflo instruction occurs in the following two
- instructions.
-
-`-mdebug'
-`-no-mdebug'
- Cause stabs-style debugging output to go into an ECOFF-style
- .mdebug section instead of the standard ELF .stabs sections.
-
-`-mpdr'
-`-mno-pdr'
- Control generation of `.pdr' sections.
-
-`-mgp32'
-`-mfp32'
- The register sizes are normally inferred from the ISA and ABI, but
- these flags force a certain group of registers to be treated as 32
- bits wide at all times. `-mgp32' controls the size of
- general-purpose registers and `-mfp32' controls the size of
- floating-point registers.
-
-`-mips16'
-`-no-mips16'
- Generate code for the MIPS 16 processor. This is equivalent to
- putting `.set mips16' at the start of the assembly file.
- `-no-mips16' turns off this option.
-
-`-mips3d'
-`-no-mips3d'
- Generate code for the MIPS-3D Application Specific Extension.
- This tells the assembler to accept MIPS-3D instructions.
- `-no-mips3d' turns off this option.
-
-`-mdmx'
-`-no-mdmx'
- Generate code for the MDMX Application Specific Extension. This
- tells the assembler to accept MDMX instructions. `-no-mdmx' turns
- off this option.
-
-`-mdsp'
-`-mno-dsp'
- Generate code for the DSP Application Specific Extension. This
- tells the assembler to accept DSP instructions. `-mno-dsp' turns
- off this option.
-
-`-mmt'
-`-mno-mt'
- Generate code for the MT Application Specific Extension. This
- tells the assembler to accept MT instructions. `-mno-mt' turns
- off this option.
-
-`--construct-floats'
-`--no-construct-floats'
- The `--no-construct-floats' option disables the construction of
- double width floating point constants by loading the two halves of
- the value into the two single width floating point registers that
- make up the double width register. By default
- `--construct-floats' is selected, allowing construction of these
- floating point constants.
-
-`--emulation=NAME'
- This option causes `as' to emulate `as' configured for some other
- target, in all respects, including output format (choosing between
- ELF and ECOFF only), handling of pseudo-opcodes which may generate
- debugging information or store symbol table information, and
- default endianness. The available configuration names are:
- `mipsecoff', `mipself', `mipslecoff', `mipsbecoff', `mipslelf',
- `mipsbelf'. The first two do not alter the default endianness
- from that of the primary target for which the assembler was
- configured; the others change the default to little- or big-endian
- as indicated by the `b' or `l' in the name. Using `-EB' or `-EL'
- will override the endianness selection in any case.
-
- This option is currently supported only when the primary target
- `as' is configured for is a MIPS ELF or ECOFF target.
- Furthermore, the primary target or others specified with
- `--enable-targets=...' at configuration time must include support
- for the other format, if both are to be available. For example,
- the Irix 5 configuration includes support for both.
-
- Eventually, this option will support more configurations, with more
- fine-grained control over the assembler's behavior, and will be
- supported for more processors.
-
-`-nocpp'
- `as' ignores this option. It is accepted for compatibility with
- the native tools.
-
-`--trap'
-`--no-trap'
-`--break'
-`--no-break'
- Control how to deal with multiplication overflow and division by
- zero. `--trap' or `--no-break' (which are synonyms) take a trap
- exception (and only work for Instruction Set Architecture level 2
- and higher); `--break' or `--no-trap' (also synonyms, and the
- default) take a break exception.
-
-`-n'
- When this option is used, `as' will issue a warning every time it
- generates a nop instruction from a macro.
-
- The following options are available when as is configured for an
-MCore processor.
-
-`-jsri2bsr'
-`-nojsri2bsr'
- Enable or disable the JSRI to BSR transformation. By default this
- is enabled. The command line option `-nojsri2bsr' can be used to
- disable it.
-
-`-sifilter'
-`-nosifilter'
- Enable or disable the silicon filter behaviour. By default this
- is disabled. The default can be overridden by the `-sifilter'
- command line option.
-
-`-relax'
- Alter jump instructions for long displacements.
-
-`-mcpu=[210|340]'
- Select the cpu type on the target hardware. This controls which
- instructions can be assembled.
-
-`-EB'
- Assemble for a big endian target.
-
-`-EL'
- Assemble for a little endian target.
-
-
- See the info pages for documentation of the MMIX-specific options.
-
- The following options are available when as is configured for an
-Xtensa processor.
-
-`--text-section-literals | --no-text-section-literals'
- With `--text-section-literals', literal pools are interspersed in
- the text section. The default is `--no-text-section-literals',
- which places literals in a separate section in the output file.
- These options only affect literals referenced via PC-relative
- `L32R' instructions; literals for absolute mode `L32R'
- instructions are handled separately.
-
-`--absolute-literals | --no-absolute-literals'
- Indicate to the assembler whether `L32R' instructions use absolute
- or PC-relative addressing. The default is to assume absolute
- addressing if the Xtensa processor includes the absolute `L32R'
- addressing option. Otherwise, only the PC-relative `L32R' mode
- can be used.
-
-`--target-align | --no-target-align'
- Enable or disable automatic alignment to reduce branch penalties
- at the expense of some code density. The default is
- `--target-align'.
-
-`--longcalls | --no-longcalls'
- Enable or disable transformation of call instructions to allow
- calls across a greater range of addresses. The default is
- `--no-longcalls'.
-
-`--transform | --no-transform'
- Enable or disable all assembler transformations of Xtensa
- instructions. The default is `--transform'; `--no-transform'
- should be used only in the rare cases when the instructions must
- be exactly as specified in the assembly source.
-
- The following options are available when as is configured for a Z80
-family processor.
-`-z80'
- Assemble for Z80 processor.
-
-`-r800'
- Assemble for R800 processor.
-
-`-ignore-undocumented-instructions'
-`-Wnud'
- Assemble undocumented Z80 instructions that also work on R800
- without warning.
-
-`-ignore-unportable-instructions'
-`-Wnup'
- Assemble all undocumented Z80 instructions without warning.
-
-`-warn-undocumented-instructions'
-`-Wud'
- Issue a warning for undocumented Z80 instructions that also work
- on R800.
-
-`-warn-unportable-instructions'
-`-Wup'
- Issue a warning for undocumented Z80 instructions that do notwork
- on R800.
-
-`-forbid-undocumented-instructions'
-`-Fud'
- Treat all undocumented instructions as errors.
-
-`-forbid-unportable-instructions'
-`-Fup'
- Treat undocumented Z80 intructions that do notwork on R800 as
- errors.
-
-* Menu:
-
-* Manual:: Structure of this Manual
-* GNU Assembler:: The GNU Assembler
-* Object Formats:: Object File Formats
-* Command Line:: Command Line
-* Input Files:: Input Files
-* Object:: Output (Object) File
-* Errors:: Error and Warning Messages
-
-
-File: as.info, Node: Manual, Next: GNU Assembler, Up: Overview
-
-1.1 Structure of this Manual
-============================
-
-This manual is intended to describe what you need to know to use GNU
-`as'. We cover the syntax expected in source files, including notation
-for symbols, constants, and expressions; the directives that `as'
-understands; and of course how to invoke `as'.
-
- This manual also describes some of the machine-dependent features of
-various flavors of the assembler.
-
- On the other hand, this manual is _not_ intended as an introduction
-to programming in assembly language--let alone programming in general!
-In a similar vein, we make no attempt to introduce the machine
-architecture; we do _not_ describe the instruction set, standard
-mnemonics, registers or addressing modes that are standard to a
-particular architecture. You may want to consult the manufacturer's
-machine architecture manual for this information.
-
-
-File: as.info, Node: GNU Assembler, Next: Object Formats, Prev: Manual, Up: Overview
-
-1.2 The GNU Assembler
-=====================
-
-GNU `as' is really a family of assemblers. If you use (or have used)
-the GNU assembler on one architecture, you should find a fairly similar
-environment when you use it on another architecture. Each version has
-much in common with the others, including object file formats, most
-assembler directives (often called "pseudo-ops") and assembler syntax.
-
- `as' is primarily intended to assemble the output of the GNU C
-compiler `gcc' for use by the linker `ld'. Nevertheless, we've tried
-to make `as' assemble correctly everything that other assemblers for
-the same machine would assemble. Any exceptions are documented
-explicitly (*note Machine Dependencies::). This doesn't mean `as'
-always uses the same syntax as another assembler for the same
-architecture; for example, we know of several incompatible versions of
-680x0 assembly language syntax.
-
- Unlike older assemblers, `as' is designed to assemble a source
-program in one pass of the source file. This has a subtle impact on the
-`.org' directive (*note `.org': Org.).
-
-
-File: as.info, Node: Object Formats, Next: Command Line, Prev: GNU Assembler, Up: Overview
-
-1.3 Object File Formats
-=======================
-
-The GNU assembler can be configured to produce several alternative
-object file formats. For the most part, this does not affect how you
-write assembly language programs; but directives for debugging symbols
-are typically different in different file formats. *Note Symbol
-Attributes: Symbol Attributes.
-
-
-File: as.info, Node: Command Line, Next: Input Files, Prev: Object Formats, Up: Overview
-
-1.4 Command Line
-================
-
-After the program name `as', the command line may contain options and
-file names. Options may appear in any order, and may be before, after,
-or between file names. The order of file names is significant.
-
- `--' (two hyphens) by itself names the standard input file
-explicitly, as one of the files for `as' to assemble.
-
- Except for `--' any command line argument that begins with a hyphen
-(`-') is an option. Each option changes the behavior of `as'. No
-option changes the way another option works. An option is a `-'
-followed by one or more letters; the case of the letter is important.
-All options are optional.
-
- Some options expect exactly one file name to follow them. The file
-name may either immediately follow the option's letter (compatible with
-older assemblers) or it may be the next command argument (GNU
-standard). These two command lines are equivalent:
-
- as -o my-object-file.o mumble.s
- as -omy-object-file.o mumble.s
-
-
-File: as.info, Node: Input Files, Next: Object, Prev: Command Line, Up: Overview
-
-1.5 Input Files
-===============
-
-We use the phrase "source program", abbreviated "source", to describe
-the program input to one run of `as'. The program may be in one or
-more files; how the source is partitioned into files doesn't change the
-meaning of the source.
-
- The source program is a concatenation of the text in all the files,
-in the order specified.
-
- Each time you run `as' it assembles exactly one source program. The
-source program is made up of one or more files. (The standard input is
-also a file.)
-
- You give `as' a command line that has zero or more input file names.
-The input files are read (from left file name to right). A command
-line argument (in any position) that has no special meaning is taken to
-be an input file name.
-
- If you give `as' no file names it attempts to read one input file
-from the `as' standard input, which is normally your terminal. You may
-have to type <ctl-D> to tell `as' there is no more program to assemble.
-
- Use `--' if you need to explicitly name the standard input file in
-your command line.
-
- If the source is empty, `as' produces a small, empty object file.
-
-Filenames and Line-numbers
---------------------------
-
-There are two ways of locating a line in the input file (or files) and
-either may be used in reporting error messages. One way refers to a
-line number in a physical file; the other refers to a line number in a
-"logical" file. *Note Error and Warning Messages: Errors.
-
- "Physical files" are those files named in the command line given to
-`as'.
-
- "Logical files" are simply names declared explicitly by assembler
-directives; they bear no relation to physical files. Logical file
-names help error messages reflect the original source file, when `as'
-source is itself synthesized from other files. `as' understands the
-`#' directives emitted by the `gcc' preprocessor. See also *Note
-`.file': File.
-
-
-File: as.info, Node: Object, Next: Errors, Prev: Input Files, Up: Overview
-
-1.6 Output (Object) File
-========================
-
-Every time you run `as' it produces an output file, which is your
-assembly language program translated into numbers. This file is the
-object file. Its default name is `a.out'. You can give it another
-name by using the `-o' option. Conventionally, object file names end
-with `.o'. The default name is used for historical reasons: older
-assemblers were capable of assembling self-contained programs directly
-into a runnable program. (For some formats, this isn't currently
-possible, but it can be done for the `a.out' format.)
-
- The object file is meant for input to the linker `ld'. It contains
-assembled program code, information to help `ld' integrate the
-assembled program into a runnable file, and (optionally) symbolic
-information for the debugger.
-
-
-File: as.info, Node: Errors, Prev: Object, Up: Overview
-
-1.7 Error and Warning Messages
-==============================
-
-`as' may write warnings and error messages to the standard error file
-(usually your terminal). This should not happen when a compiler runs
-`as' automatically. Warnings report an assumption made so that `as'
-could keep assembling a flawed program; errors report a grave problem
-that stops the assembly.
-
- Warning messages have the format
-
- file_name:NNN:Warning Message Text
-
-(where NNN is a line number). If a logical file name has been given
-(*note `.file': File.) it is used for the filename, otherwise the name
-of the current input file is used. If a logical line number was given
-(*note `.line': Line.) then it is used to calculate the number printed,
-otherwise the actual line in the current source file is printed. The
-message text is intended to be self explanatory (in the grand Unix
-tradition).
-
- Error messages have the format
- file_name:NNN:FATAL:Error Message Text
- The file name and line number are derived as for warning messages.
-The actual message text may be rather less explanatory because many of
-them aren't supposed to happen.
-
-
-File: as.info, Node: Invoking, Next: Syntax, Prev: Overview, Up: Top
-
-2 Command-Line Options
-**********************
-
-This chapter describes command-line options available in _all_ versions
-of the GNU assembler; *note Machine Dependencies::, for options specific
-to particular machine architectures.
-
- If you are invoking `as' via the GNU C compiler, you can use the
-`-Wa' option to pass arguments through to the assembler. The assembler
-arguments must be separated from each other (and the `-Wa') by commas.
-For example:
-
- gcc -c -g -O -Wa,-alh,-L file.c
-
-This passes two options to the assembler: `-alh' (emit a listing to
-standard output with high-level and assembly source) and `-L' (retain
-local symbols in the symbol table).
-
- Usually you do not need to use this `-Wa' mechanism, since many
-compiler command-line options are automatically passed to the assembler
-by the compiler. (You can call the GNU compiler driver with the `-v'
-option to see precisely what options it passes to each compilation
-pass, including the assembler.)
-
-* Menu:
-
-* a:: -a[cdhlns] enable listings
-* alternate:: --alternate enable alternate macro syntax
-* D:: -D for compatibility
-* f:: -f to work faster
-* I:: -I for .include search path
-
-* K:: -K for difference tables
-
-* L:: -L to retain local labels
-* listing:: --listing-XXX to configure listing output
-* M:: -M or --mri to assemble in MRI compatibility mode
-* MD:: --MD for dependency tracking
-* o:: -o to name the object file
-* R:: -R to join data and text sections
-* statistics:: --statistics to see statistics about assembly
-* traditional-format:: --traditional-format for compatible output
-* v:: -v to announce version
-* W:: -W, --no-warn, --warn, --fatal-warnings to control warnings
-* Z:: -Z to make object file even after errors
-
-
-File: as.info, Node: a, Next: alternate, Up: Invoking
-
-2.1 Enable Listings: `-a[cdhlns]'
-=================================
-
-These options enable listing output from the assembler. By itself,
-`-a' requests high-level, assembly, and symbols listing. You can use
-other letters to select specific options for the list: `-ah' requests a
-high-level language listing, `-al' requests an output-program assembly
-listing, and `-as' requests a symbol table listing. High-level
-listings require that a compiler debugging option like `-g' be used,
-and that assembly listings (`-al') be requested also.
-
- Use the `-ac' option to omit false conditionals from a listing. Any
-lines which are not assembled because of a false `.if' (or `.ifdef', or
-any other conditional), or a true `.if' followed by an `.else', will be
-omitted from the listing.
-
- Use the `-ad' option to omit debugging directives from the listing.
-
- Once you have specified one of these options, you can further control
-listing output and its appearance using the directives `.list',
-`.nolist', `.psize', `.eject', `.title', and `.sbttl'. The `-an'
-option turns off all forms processing. If you do not request listing
-output with one of the `-a' options, the listing-control directives
-have no effect.
-
- The letters after `-a' may be combined into one option, _e.g._,
-`-aln'.
-
- Note if the assembler source is coming from the standard input (eg
-because it is being created by `gcc' and the `-pipe' command line switch
-is being used) then the listing will not contain any comments or
-preprocessor directives. This is because the listing code buffers
-input source lines from stdin only after they have been preprocessed by
-the assembler. This reduces memory usage and makes the code more
-efficient.
-
-
-File: as.info, Node: alternate, Next: D, Prev: a, Up: Invoking
-
-2.2 `--alternate'
-=================
-
-Begin in alternate macro mode, see *Note `.altmacro': Altmacro.
-
-
-File: as.info, Node: D, Next: f, Prev: alternate, Up: Invoking
-
-2.3 `-D'
-========
-
-This option has no effect whatsoever, but it is accepted to make it more
-likely that scripts written for other assemblers also work with `as'.
-
-
-File: as.info, Node: f, Next: I, Prev: D, Up: Invoking
-
-2.4 Work Faster: `-f'
-=====================
-
-`-f' should only be used when assembling programs written by a
-(trusted) compiler. `-f' stops the assembler from doing whitespace and
-comment preprocessing on the input file(s) before assembling them.
-*Note Preprocessing: Preprocessing.
-
- _Warning:_ if you use `-f' when the files actually need to be
- preprocessed (if they contain comments, for example), `as' does
- not work correctly.
-
-
-File: as.info, Node: I, Next: K, Prev: f, Up: Invoking
-
-2.5 `.include' Search Path: `-I' PATH
-=====================================
-
-Use this option to add a PATH to the list of directories `as' searches
-for files specified in `.include' directives (*note `.include':
-Include.). You may use `-I' as many times as necessary to include a
-variety of paths. The current working directory is always searched
-first; after that, `as' searches any `-I' directories in the same order
-as they were specified (left to right) on the command line.
-
-
-File: as.info, Node: K, Next: L, Prev: I, Up: Invoking
-
-2.6 Difference Tables: `-K'
-===========================
-
-`as' sometimes alters the code emitted for directives of the form
-`.word SYM1-SYM2'; *note `.word': Word. You can use the `-K' option if
-you want a warning issued when this is done.
-
-
-File: as.info, Node: L, Next: listing, Prev: K, Up: Invoking
-
-2.7 Include Local Labels: `-L'
-==============================
-
-Labels beginning with `L' (upper case only) are called "local labels".
-*Note Symbol Names::. Normally you do not see such labels when
-debugging, because they are intended for the use of programs (like
-compilers) that compose assembler programs, not for your notice.
-Normally both `as' and `ld' discard such labels, so you do not normally
-debug with them.
-
- This option tells `as' to retain those `L...' symbols in the object
-file. Usually if you do this you also tell the linker `ld' to preserve
-symbols whose names begin with `L'.
-
- By default, a local label is any label beginning with `L', but each
-target is allowed to redefine the local label prefix. On the HPPA
-local labels begin with `L$'.
-
-
-File: as.info, Node: listing, Next: M, Prev: L, Up: Invoking
-
-2.8 Configuring listing output: `--listing'
-===========================================
-
-The listing feature of the assembler can be enabled via the command
-line switch `-a' (*note a::). This feature combines the input source
-file(s) with a hex dump of the corresponding locations in the output
-object file, and displays them as a listing file. The format of this
-listing can be controlled by pseudo ops inside the assembler source
-(*note List:: *note Title:: *note Sbttl:: *note Psize:: *note Eject::)
-and also by the following switches:
-
-`--listing-lhs-width=`number''
- Sets the maximum width, in words, of the first line of the hex
- byte dump. This dump appears on the left hand side of the listing
- output.
-
-`--listing-lhs-width2=`number''
- Sets the maximum width, in words, of any further lines of the hex
- byte dump for a given input source line. If this value is not
- specified, it defaults to being the same as the value specified
- for `--listing-lhs-width'. If neither switch is used the default
- is to one.
-
-`--listing-rhs-width=`number''
- Sets the maximum width, in characters, of the source line that is
- displayed alongside the hex dump. The default value for this
- parameter is 100. The source line is displayed on the right hand
- side of the listing output.
-
-`--listing-cont-lines=`number''
- Sets the maximum number of continuation lines of hex dump that
- will be displayed for a given single line of source input. The
- default value is 4.
-
-
-File: as.info, Node: M, Next: MD, Prev: listing, Up: Invoking
-
-2.9 Assemble in MRI Compatibility Mode: `-M'
-============================================
-
-The `-M' or `--mri' option selects MRI compatibility mode. This
-changes the syntax and pseudo-op handling of `as' to make it compatible
-with the `ASM68K' or the `ASM960' (depending upon the configured
-target) assembler from Microtec Research. The exact nature of the MRI
-syntax will not be documented here; see the MRI manuals for more
-information. Note in particular that the handling of macros and macro
-arguments is somewhat different. The purpose of this option is to
-permit assembling existing MRI assembler code using `as'.
-
- The MRI compatibility is not complete. Certain operations of the
-MRI assembler depend upon its object file format, and can not be
-supported using other object file formats. Supporting these would
-require enhancing each object file format individually. These are:
-
- * global symbols in common section
-
- The m68k MRI assembler supports common sections which are merged
- by the linker. Other object file formats do not support this.
- `as' handles common sections by treating them as a single common
- symbol. It permits local symbols to be defined within a common
- section, but it can not support global symbols, since it has no
- way to describe them.
-
- * complex relocations
-
- The MRI assemblers support relocations against a negated section
- address, and relocations which combine the start addresses of two
- or more sections. These are not support by other object file
- formats.
-
- * `END' pseudo-op specifying start address
-
- The MRI `END' pseudo-op permits the specification of a start
- address. This is not supported by other object file formats. The
- start address may instead be specified using the `-e' option to
- the linker, or in a linker script.
-
- * `IDNT', `.ident' and `NAME' pseudo-ops
-
- The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module
- name to the output file. This is not supported by other object
- file formats.
-
- * `ORG' pseudo-op
-
- The m68k MRI `ORG' pseudo-op begins an absolute section at a given
- address. This differs from the usual `as' `.org' pseudo-op, which
- changes the location within the current section. Absolute
- sections are not supported by other object file formats. The
- address of a section may be assigned within a linker script.
-
- There are some other features of the MRI assembler which are not
-supported by `as', typically either because they are difficult or
-because they seem of little consequence. Some of these may be
-supported in future releases.
-
- * EBCDIC strings
-
- EBCDIC strings are not supported.
-
- * packed binary coded decimal
-
- Packed binary coded decimal is not supported. This means that the
- `DC.P' and `DCB.P' pseudo-ops are not supported.
-
- * `FEQU' pseudo-op
-
- The m68k `FEQU' pseudo-op is not supported.
-
- * `NOOBJ' pseudo-op
-
- The m68k `NOOBJ' pseudo-op is not supported.
-
- * `OPT' branch control options
-
- The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL',
- and `BRW'--are ignored. `as' automatically relaxes all branches,
- whether forward or backward, to an appropriate size, so these
- options serve no purpose.
-
- * `OPT' list control options
-
- The following m68k `OPT' list control options are ignored: `C',
- `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'.
-
- * other `OPT' options
-
- The following m68k `OPT' options are ignored: `NEST', `O', `OLD',
- `OP', `P', `PCO', `PCR', `PCS', `R'.
-
- * `OPT' `D' option is default
-
- The m68k `OPT' `D' option is the default, unlike the MRI assembler.
- `OPT NOD' may be used to turn it off.
-
- * `XREF' pseudo-op.
-
- The m68k `XREF' pseudo-op is ignored.
-
- * `.debug' pseudo-op
-
- The i960 `.debug' pseudo-op is not supported.
-
- * `.extended' pseudo-op
-
- The i960 `.extended' pseudo-op is not supported.
-
- * `.list' pseudo-op.
-
- The various options of the i960 `.list' pseudo-op are not
- supported.
-
- * `.optimize' pseudo-op
-
- The i960 `.optimize' pseudo-op is not supported.
-
- * `.output' pseudo-op
-
- The i960 `.output' pseudo-op is not supported.
-
- * `.setreal' pseudo-op
-
- The i960 `.setreal' pseudo-op is not supported.
-
-
-
-File: as.info, Node: MD, Next: o, Prev: M, Up: Invoking
-
-2.10 Dependency Tracking: `--MD'
-================================
-
-`as' can generate a dependency file for the file it creates. This file
-consists of a single rule suitable for `make' describing the
-dependencies of the main source file.
-
- The rule is written to the file named in its argument.
-
- This feature is used in the automatic updating of makefiles.
-
-
-File: as.info, Node: o, Next: R, Prev: MD, Up: Invoking
-
-2.11 Name the Object File: `-o'
-===============================
-
-There is always one object file output when you run `as'. By default
-it has the name `a.out' (or `b.out', for Intel 960 targets only). You
-use this option (which takes exactly one filename) to give the object
-file a different name.
-
- Whatever the object file is called, `as' overwrites any existing
-file of the same name.
-
-
-File: as.info, Node: R, Next: statistics, Prev: o, Up: Invoking
-
-2.12 Join Data and Text Sections: `-R'
-======================================
-
-`-R' tells `as' to write the object file as if all data-section data
-lives in the text section. This is only done at the very last moment:
-your binary data are the same, but data section parts are relocated
-differently. The data section part of your object file is zero bytes
-long because all its bytes are appended to the text section. (*Note
-Sections and Relocation: Sections.)
-
- When you specify `-R' it would be possible to generate shorter
-address displacements (because we do not have to cross between text and
-data section). We refrain from doing this simply for compatibility with
-older versions of `as'. In future, `-R' may work this way.
-
- When `as' is configured for COFF or ELF output, this option is only
-useful if you use sections named `.text' and `.data'.
-
- `-R' is not supported for any of the HPPA targets. Using `-R'
-generates a warning from `as'.
-
-
-File: as.info, Node: statistics, Next: traditional-format, Prev: R, Up: Invoking
-
-2.13 Display Assembly Statistics: `--statistics'
-================================================
-
-Use `--statistics' to display two statistics about the resources used by
-`as': the maximum amount of space allocated during the assembly (in
-bytes), and the total execution time taken for the assembly (in CPU
-seconds).
-
-
-File: as.info, Node: traditional-format, Next: v, Prev: statistics, Up: Invoking
-
-2.14 Compatible Output: `--traditional-format'
-==============================================
-
-For some targets, the output of `as' is different in some ways from the
-output of some existing assembler. This switch requests `as' to use
-the traditional format instead.
-
- For example, it disables the exception frame optimizations which
-`as' normally does by default on `gcc' output.
-
-
-File: as.info, Node: v, Next: W, Prev: traditional-format, Up: Invoking
-
-2.15 Announce Version: `-v'
-===========================
-
-You can find out what version of as is running by including the option
-`-v' (which you can also spell as `-version') on the command line.
-
-
-File: as.info, Node: W, Next: Z, Prev: v, Up: Invoking
-
-2.16 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings'
-======================================================================
-
-`as' should never give a warning or error message when assembling
-compiler output. But programs written by people often cause `as' to
-give a warning that a particular assumption was made. All such
-warnings are directed to the standard error file.
-
- If you use the `-W' and `--no-warn' options, no warnings are issued.
-This only affects the warning messages: it does not change any
-particular of how `as' assembles your file. Errors, which stop the
-assembly, are still reported.
-
- If you use the `--fatal-warnings' option, `as' considers files that
-generate warnings to be in error.
-
- You can switch these options off again by specifying `--warn', which
-causes warnings to be output as usual.
-
-
-File: as.info, Node: Z, Prev: W, Up: Invoking
-
-2.17 Generate Object File in Spite of Errors: `-Z'
-==================================================
-
-After an error message, `as' normally produces no output. If for some
-reason you are interested in object file output even after `as' gives
-an error message on your program, use the `-Z' option. If there are
-any errors, `as' continues anyways, and writes an object file after a
-final warning message of the form `N errors, M warnings, generating bad
-object file.'
-
-
-File: as.info, Node: Syntax, Next: Sections, Prev: Invoking, Up: Top
-
-3 Syntax
-********
-
-This chapter describes the machine-independent syntax allowed in a
-source file. `as' syntax is similar to what many other assemblers use;
-it is inspired by the BSD 4.2 assembler, except that `as' does not
-assemble Vax bit-fields.
-
-* Menu:
-
-* Preprocessing:: Preprocessing
-* Whitespace:: Whitespace
-* Comments:: Comments
-* Symbol Intro:: Symbols
-* Statements:: Statements
-* Constants:: Constants
-
-
-File: as.info, Node: Preprocessing, Next: Whitespace, Up: Syntax
-
-3.1 Preprocessing
-=================
-
-The `as' internal preprocessor:
- * adjusts and removes extra whitespace. It leaves one space or tab
- before the keywords on a line, and turns any other whitespace on
- the line into a single space.
-
- * removes all comments, replacing them with a single space, or an
- appropriate number of newlines.
-
- * converts character constants into the appropriate numeric values.
-
- It does not do macro processing, include file handling, or anything
-else you may get from your C compiler's preprocessor. You can do
-include file processing with the `.include' directive (*note
-`.include': Include.). You can use the GNU C compiler driver to get
-other "CPP" style preprocessing by giving the input file a `.S' suffix.
-*Note Options Controlling the Kind of Output: (gcc.info)Overall
-Options.
-
- Excess whitespace, comments, and character constants cannot be used
-in the portions of the input text that are not preprocessed.
-
- If the first line of an input file is `#NO_APP' or if you use the
-`-f' option, whitespace and comments are not removed from the input
-file. Within an input file, you can ask for whitespace and comment
-removal in specific portions of the by putting a line that says `#APP'
-before the text that may contain whitespace or comments, and putting a
-line that says `#NO_APP' after this text. This feature is mainly
-intend to support `asm' statements in compilers whose output is
-otherwise free of comments and whitespace.
-
-
-File: as.info, Node: Whitespace, Next: Comments, Prev: Preprocessing, Up: Syntax
-
-3.2 Whitespace
-==============
-
-"Whitespace" is one or more blanks or tabs, in any order. Whitespace
-is used to separate symbols, and to make programs neater for people to
-read. Unless within character constants (*note Character Constants:
-Characters.), any whitespace means the same as exactly one space.
-
-
-File: as.info, Node: Comments, Next: Symbol Intro, Prev: Whitespace, Up: Syntax
-
-3.3 Comments
-============
-
-There are two ways of rendering comments to `as'. In both cases the
-comment is equivalent to one space.
-
- Anything from `/*' through the next `*/' is a comment. This means
-you may not nest these comments.
-
- /*
- The only way to include a newline ('\n') in a comment
- is to use this sort of comment.
- */
-
- /* This sort of comment does not nest. */
-
- Anything from the "line comment" character to the next newline is
-considered a comment and is ignored. The line comment character is `;'
-on the ARC; `@' on the ARM; `;' for the H8/300 family; `;' for the HPPA;
-`#' on the i386 and x86-64; `#' on the i960; `;' for the PDP-11; `;'
-for picoJava; `#' for Motorola PowerPC; `!' for the Renesas / SuperH SH;
-`!' on the SPARC; `#' on the ip2k; `#' on the m32c; `#' on the m32r;
-`|' on the 680x0; `#' on the 68HC11 and 68HC12; `#' on the Vax; `;' for
-the Z80; `!' for the Z8000; `#' on the V850; `#' for Xtensa systems;
-see *Note Machine Dependencies::.
-
- On some machines there are two different line comment characters.
-One character only begins a comment if it is the first non-whitespace
-character on a line, while the other always begins a comment.
-
- The V850 assembler also supports a double dash as starting a comment
-that extends to the end of the line.
-
- `--';
-
- To be compatible with past assemblers, lines that begin with `#'
-have a special interpretation. Following the `#' should be an absolute
-expression (*note Expressions::): the logical line number of the _next_
-line. Then a string (*note Strings: Strings.) is allowed: if present
-it is a new logical file name. The rest of the line, if any, should be
-whitespace.
-
- If the first non-whitespace characters on the line are not numeric,
-the line is ignored. (Just like a comment.)
-
- # This is an ordinary comment.
- # 42-6 "new_file_name" # New logical file name
- # This is logical line # 36.
- This feature is deprecated, and may disappear from future versions
-of `as'.
-
-
-File: as.info, Node: Symbol Intro, Next: Statements, Prev: Comments, Up: Syntax
-
-3.4 Symbols
-===========
-
-A "symbol" is one or more characters chosen from the set of all letters
-(both upper and lower case), digits and the three characters `_.$'. On
-most machines, you can also use `$' in symbol names; exceptions are
-noted in *Note Machine Dependencies::. No symbol may begin with a
-digit. Case is significant. There is no length limit: all characters
-are significant. Symbols are delimited by characters not in that set,
-or by the beginning of a file (since the source program must end with a
-newline, the end of a file is not a possible symbol delimiter). *Note
-Symbols::.
-
-
-File: as.info, Node: Statements, Next: Constants, Prev: Symbol Intro, Up: Syntax
-
-3.5 Statements
-==============
-
-A "statement" ends at a newline character (`\n') or line separator
-character. (The line separator is usually `;', unless this conflicts
-with the comment character; *note Machine Dependencies::.) The newline
-or separator character is considered part of the preceding statement.
-Newlines and separators within character constants are an exception:
-they do not end statements.
-
-It is an error to end any statement with end-of-file: the last
-character of any input file should be a newline.
-
- An empty statement is allowed, and may include whitespace. It is
-ignored.
-
- A statement begins with zero or more labels, optionally followed by a
-key symbol which determines what kind of statement it is. The key
-symbol determines the syntax of the rest of the statement. If the
-symbol begins with a dot `.' then the statement is an assembler
-directive: typically valid for any computer. If the symbol begins with
-a letter the statement is an assembly language "instruction": it
-assembles into a machine language instruction. Different versions of
-`as' for different computers recognize different instructions. In
-fact, the same symbol may represent a different instruction in a
-different computer's assembly language.
-
- A label is a symbol immediately followed by a colon (`:').
-Whitespace before a label or after a colon is permitted, but you may not
-have whitespace between a label's symbol and its colon. *Note Labels::.
-
- For HPPA targets, labels need not be immediately followed by a
-colon, but the definition of a label must begin in column zero. This
-also implies that only one label may be defined on each line.
-
- label: .directive followed by something
- another_label: # This is an empty statement.
- instruction operand_1, operand_2, ...
-
-
-File: as.info, Node: Constants, Prev: Statements, Up: Syntax
-
-3.6 Constants
-=============
-
-A constant is a number, written so that its value is known by
-inspection, without knowing any context. Like this:
- .byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
- .ascii "Ring the bell\7" # A string constant.
- .octa 0x123456789abcdef0123456789ABCDEF0 # A bignum.
- .float 0f-314159265358979323846264338327\
- 95028841971.693993751E-40 # - pi, a flonum.
-
-* Menu:
-
-* Characters:: Character Constants
-* Numbers:: Number Constants
-
-
-File: as.info, Node: Characters, Next: Numbers, Up: Constants
-
-3.6.1 Character Constants
--------------------------
-
-There are two kinds of character constants. A "character" stands for
-one character in one byte and its value may be used in numeric
-expressions. String constants (properly called string _literals_) are
-potentially many bytes and their values may not be used in arithmetic
-expressions.
-
-* Menu:
-
-* Strings:: Strings
-* Chars:: Characters
-
-
-File: as.info, Node: Strings, Next: Chars, Up: Characters
-
-3.6.1.1 Strings
-...............
-
-A "string" is written between double-quotes. It may contain
-double-quotes or null characters. The way to get special characters
-into a string is to "escape" these characters: precede them with a
-backslash `\' character. For example `\\' represents one backslash:
-the first `\' is an escape which tells `as' to interpret the second
-character literally as a backslash (which prevents `as' from
-recognizing the second `\' as an escape character). The complete list
-of escapes follows.
-
-`\b'
- Mnemonic for backspace; for ASCII this is octal code 010.
-
-`\f'
- Mnemonic for FormFeed; for ASCII this is octal code 014.
-
-`\n'
- Mnemonic for newline; for ASCII this is octal code 012.
-
-`\r'
- Mnemonic for carriage-Return; for ASCII this is octal code 015.
-
-`\t'
- Mnemonic for horizontal Tab; for ASCII this is octal code 011.
-
-`\ DIGIT DIGIT DIGIT'
- An octal character code. The numeric code is 3 octal digits. For
- compatibility with other Unix systems, 8 and 9 are accepted as
- digits: for example, `\008' has the value 010, and `\009' the
- value 011.
-
-`\`x' HEX-DIGITS...'
- A hex character code. All trailing hex digits are combined.
- Either upper or lower case `x' works.
-
-`\\'
- Represents one `\' character.
-
-`\"'
- Represents one `"' character. Needed in strings to represent this
- character, because an unescaped `"' would end the string.
-
-`\ ANYTHING-ELSE'
- Any other character when escaped by `\' gives a warning, but
- assembles as if the `\' was not present. The idea is that if you
- used an escape sequence you clearly didn't want the literal
- interpretation of the following character. However `as' has no
- other interpretation, so `as' knows it is giving you the wrong
- code and warns you of the fact.
-
- Which characters are escapable, and what those escapes represent,
-varies widely among assemblers. The current set is what we think the
-BSD 4.2 assembler recognizes, and is a subset of what most C compilers
-recognize. If you are in doubt, do not use an escape sequence.
-
-
-File: as.info, Node: Chars, Prev: Strings, Up: Characters
-
-3.6.1.2 Characters
-..................
-
-A single character may be written as a single quote immediately
-followed by that character. The same escapes apply to characters as to
-strings. So if you want to write the character backslash, you must
-write `'\\' where the first `\' escapes the second `\'. As you can
-see, the quote is an acute accent, not a grave accent. A newline
-immediately following an acute accent is taken as a literal character
-and does not count as the end of a statement. The value of a character
-constant in a numeric expression is the machine's byte-wide code for
-that character. `as' assumes your character code is ASCII: `'A' means
-65, `'B' means 66, and so on.
-
-
-File: as.info, Node: Numbers, Prev: Characters, Up: Constants
-
-3.6.2 Number Constants
-----------------------
-
-`as' distinguishes three kinds of numbers according to how they are
-stored in the target machine. _Integers_ are numbers that would fit
-into an `int' in the C language. _Bignums_ are integers, but they are
-stored in more than 32 bits. _Flonums_ are floating point numbers,
-described below.
-
-* Menu:
-
-* Integers:: Integers
-* Bignums:: Bignums
-* Flonums:: Flonums
-
-
-File: as.info, Node: Integers, Next: Bignums, Up: Numbers
-
-3.6.2.1 Integers
-................
-
-A binary integer is `0b' or `0B' followed by zero or more of the binary
-digits `01'.
-
- An octal integer is `0' followed by zero or more of the octal digits
-(`01234567').
-
- A decimal integer starts with a non-zero digit followed by zero or
-more digits (`0123456789').
-
- A hexadecimal integer is `0x' or `0X' followed by one or more
-hexadecimal digits chosen from `0123456789abcdefABCDEF'.
-
- Integers have the usual values. To denote a negative integer, use
-the prefix operator `-' discussed under expressions (*note Prefix
-Operators: Prefix Ops.).
-
-
-File: as.info, Node: Bignums, Next: Flonums, Prev: Integers, Up: Numbers
-
-3.6.2.2 Bignums
-...............
-
-A "bignum" has the same syntax and semantics as an integer except that
-the number (or its negative) takes more than 32 bits to represent in
-binary. The distinction is made because in some places integers are
-permitted while bignums are not.
-
-
-File: as.info, Node: Flonums, Prev: Bignums, Up: Numbers
-
-3.6.2.3 Flonums
-...............
-
-A "flonum" represents a floating point number. The translation is
-indirect: a decimal floating point number from the text is converted by
-`as' to a generic binary floating point number of more than sufficient
-precision. This generic floating point number is converted to a
-particular computer's floating point format (or formats) by a portion
-of `as' specialized to that computer.
-
- A flonum is written by writing (in order)
- * The digit `0'. (`0' is optional on the HPPA.)
-
- * A letter, to tell `as' the rest of the number is a flonum. `e' is
- recommended. Case is not important.
-
- On the H8/300, Renesas / SuperH SH, and AMD 29K architectures, the
- letter must be one of the letters `DFPRSX' (in upper or lower
- case).
-
- On the ARC, the letter must be one of the letters `DFRS' (in upper
- or lower case).
-
- On the Intel 960 architecture, the letter must be one of the
- letters `DFT' (in upper or lower case).
-
- On the HPPA architecture, the letter must be `E' (upper case only).
-
- * An optional sign: either `+' or `-'.
-
- * An optional "integer part": zero or more decimal digits.
-
- * An optional "fractional part": `.' followed by zero or more
- decimal digits.
-
- * An optional exponent, consisting of:
-
- * An `E' or `e'.
-
- * Optional sign: either `+' or `-'.
-
- * One or more decimal digits.
-
-
- At least one of the integer part or the fractional part must be
-present. The floating point number has the usual base-10 value.
-
- `as' does all processing using integers. Flonums are computed
-independently of any floating point hardware in the computer running
-`as'.
-
-
-File: as.info, Node: Sections, Next: Symbols, Prev: Syntax, Up: Top
-
-4 Sections and Relocation
-*************************
-
-* Menu:
-
-* Secs Background:: Background
-* Ld Sections:: Linker Sections
-* As Sections:: Assembler Internal Sections
-* Sub-Sections:: Sub-Sections
-* bss:: bss Section
-
-
-File: as.info, Node: Secs Background, Next: Ld Sections, Up: Sections
-
-4.1 Background
-==============
-
-Roughly, a section is a range of addresses, with no gaps; all data "in"
-those addresses is treated the same for some particular purpose. For
-example there may be a "read only" section.
-
- The linker `ld' reads many object files (partial programs) and
-combines their contents to form a runnable program. When `as' emits an
-object file, the partial program is assumed to start at address 0.
-`ld' assigns the final addresses for the partial program, so that
-different partial programs do not overlap. This is actually an
-oversimplification, but it suffices to explain how `as' uses sections.
-
- `ld' moves blocks of bytes of your program to their run-time
-addresses. These blocks slide to their run-time addresses as rigid
-units; their length does not change and neither does the order of bytes
-within them. Such a rigid unit is called a _section_. Assigning
-run-time addresses to sections is called "relocation". It includes the
-task of adjusting mentions of object-file addresses so they refer to
-the proper run-time addresses. For the H8/300, and for the Renesas /
-SuperH SH, `as' pads sections if needed to ensure they end on a word
-(sixteen bit) boundary.
-
- An object file written by `as' has at least three sections, any of
-which may be empty. These are named "text", "data" and "bss" sections.
-
- When it generates COFF or ELF output, `as' can also generate
-whatever other named sections you specify using the `.section'
-directive (*note `.section': Section.). If you do not use any
-directives that place output in the `.text' or `.data' sections, these
-sections still exist, but are empty.
-
- When `as' generates SOM or ELF output for the HPPA, `as' can also
-generate whatever other named sections you specify using the `.space'
-and `.subspace' directives. See `HP9000 Series 800 Assembly Language
-Reference Manual' (HP 92432-90001) for details on the `.space' and
-`.subspace' assembler directives.
-
- Additionally, `as' uses different names for the standard text, data,
-and bss sections when generating SOM output. Program text is placed
-into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'.
-
- Within the object file, the text section starts at address `0', the
-data section follows, and the bss section follows the data section.
-
- When generating either SOM or ELF output files on the HPPA, the text
-section starts at address `0', the data section at address `0x4000000',
-and the bss section follows the data section.
-
- To let `ld' know which data changes when the sections are relocated,
-and how to change that data, `as' also writes to the object file
-details of the relocation needed. To perform relocation `ld' must
-know, each time an address in the object file is mentioned:
- * Where in the object file is the beginning of this reference to an
- address?
-
- * How long (in bytes) is this reference?
-
- * Which section does the address refer to? What is the numeric
- value of
- (ADDRESS) - (START-ADDRESS OF SECTION)?
-
- * Is the reference to an address "Program-Counter relative"?
-
- In fact, every address `as' ever uses is expressed as
- (SECTION) + (OFFSET INTO SECTION)
- Further, most expressions `as' computes have this section-relative
-nature. (For some object formats, such as SOM for the HPPA, some
-expressions are symbol-relative instead.)
-
- In this manual we use the notation {SECNAME N} to mean "offset N
-into section SECNAME."
-
- Apart from text, data and bss sections you need to know about the
-"absolute" section. When `ld' mixes partial programs, addresses in the
-absolute section remain unchanged. For example, address `{absolute 0}'
-is "relocated" to run-time address 0 by `ld'. Although the linker
-never arranges two partial programs' data sections with overlapping
-addresses after linking, _by definition_ their absolute sections must
-overlap. Address `{absolute 239}' in one part of a program is always
-the same address when the program is running as address `{absolute
-239}' in any other part of the program.
-
- The idea of sections is extended to the "undefined" section. Any
-address whose section is unknown at assembly time is by definition
-rendered {undefined U}--where U is filled in later. Since numbers are
-always defined, the only way to generate an undefined address is to
-mention an undefined symbol. A reference to a named common block would
-be such a symbol: its value is unknown at assembly time so it has
-section _undefined_.
-
- By analogy the word _section_ is used to describe groups of sections
-in the linked program. `ld' puts all partial programs' text sections
-in contiguous addresses in the linked program. It is customary to
-refer to the _text section_ of a program, meaning all the addresses of
-all partial programs' text sections. Likewise for data and bss
-sections.
-
- Some sections are manipulated by `ld'; others are invented for use
-of `as' and have no meaning except during assembly.
-
-
-File: as.info, Node: Ld Sections, Next: As Sections, Prev: Secs Background, Up: Sections
-
-4.2 Linker Sections
-===================
-
-`ld' deals with just four kinds of sections, summarized below.
-
-*named sections*
-*text section*
-*data section*
- These sections hold your program. `as' and `ld' treat them as
- separate but equal sections. Anything you can say of one section
- is true of another. When the program is running, however, it is
- customary for the text section to be unalterable. The text
- section is often shared among processes: it contains instructions,
- constants and the like. The data section of a running program is
- usually alterable: for example, C variables would be stored in the
- data section.
-
-*bss section*
- This section contains zeroed bytes when your program begins
- running. It is used to hold uninitialized variables or common
- storage. The length of each partial program's bss section is
- important, but because it starts out containing zeroed bytes there
- is no need to store explicit zero bytes in the object file. The
- bss section was invented to eliminate those explicit zeros from
- object files.
-
-*absolute section*
- Address 0 of this section is always "relocated" to runtime address
- 0. This is useful if you want to refer to an address that `ld'
- must not change when relocating. In this sense we speak of
- absolute addresses being "unrelocatable": they do not change
- during relocation.
-
-*undefined section*
- This "section" is a catch-all for address references to objects
- not in the preceding sections.
-
- An idealized example of three relocatable sections follows. The
-example uses the traditional section names `.text' and `.data'. Memory
-addresses are on the horizontal axis.
-
- +-----+----+--+
- partial program # 1: |ttttt|dddd|00|
- +-----+----+--+
-
- text data bss
- seg. seg. seg.
-
- +---+---+---+
- partial program # 2: |TTT|DDD|000|
- +---+---+---+
-
- +--+---+-----+--+----+---+-----+~~
- linked program: | |TTT|ttttt| |dddd|DDD|00000|
- +--+---+-----+--+----+---+-----+~~
-
- addresses: 0 ...
-
-
-File: as.info, Node: As Sections, Next: Sub-Sections, Prev: Ld Sections, Up: Sections
-
-4.3 Assembler Internal Sections
-===============================
-
-These sections are meant only for the internal use of `as'. They have
-no meaning at run-time. You do not really need to know about these
-sections for most purposes; but they can be mentioned in `as' warning
-messages, so it might be helpful to have an idea of their meanings to
-`as'. These sections are used to permit the value of every expression
-in your assembly language program to be a section-relative address.
-
-ASSEMBLER-INTERNAL-LOGIC-ERROR!
- An internal assembler logic error has been found. This means
- there is a bug in the assembler.
-
-expr section
- The assembler stores complex expression internally as combinations
- of symbols. When it needs to represent an expression as a symbol,
- it puts it in the expr section.
-
-
-File: as.info, Node: Sub-Sections, Next: bss, Prev: As Sections, Up: Sections
-
-4.4 Sub-Sections
-================
-
-Assembled bytes conventionally fall into two sections: text and data.
-You may have separate groups of data in named sections that you want to
-end up near to each other in the object file, even though they are not
-contiguous in the assembler source. `as' allows you to use
-"subsections" for this purpose. Within each section, there can be
-numbered subsections with values from 0 to 8192. Objects assembled
-into the same subsection go into the object file together with other
-objects in the same subsection. For example, a compiler might want to
-store constants in the text section, but might not want to have them
-interspersed with the program being assembled. In this case, the
-compiler could issue a `.text 0' before each section of code being
-output, and a `.text 1' before each group of constants being output.
-
-Subsections are optional. If you do not use subsections, everything
-goes in subsection number zero.
-
- Each subsection is zero-padded up to a multiple of four bytes.
-(Subsections may be padded a different amount on different flavors of
-`as'.)
-
- Subsections appear in your object file in numeric order, lowest
-numbered to highest. (All this to be compatible with other people's
-assemblers.) The object file contains no representation of
-subsections; `ld' and other programs that manipulate object files see
-no trace of them. They just see all your text subsections as a text
-section, and all your data subsections as a data section.
-
- To specify which subsection you want subsequent statements assembled
-into, use a numeric argument to specify it, in a `.text EXPRESSION' or
-a `.data EXPRESSION' statement. When generating COFF output, you can
-also use an extra subsection argument with arbitrary named sections:
-`.section NAME, EXPRESSION'. When generating ELF output, you can also
-use the `.subsection' directive (*note SubSection::) to specify a
-subsection: `.subsection EXPRESSION'. EXPRESSION should be an absolute
-expression. (*Note Expressions::.) If you just say `.text' then
-`.text 0' is assumed. Likewise `.data' means `.data 0'. Assembly
-begins in `text 0'. For instance:
- .text 0 # The default subsection is text 0 anyway.
- .ascii "This lives in the first text subsection. *"
- .text 1
- .ascii "But this lives in the second text subsection."
- .data 0
- .ascii "This lives in the data section,"
- .ascii "in the first data subsection."
- .text 0
- .ascii "This lives in the first text section,"
- .ascii "immediately following the asterisk (*)."
-
- Each section has a "location counter" incremented by one for every
-byte assembled into that section. Because subsections are merely a
-convenience restricted to `as' there is no concept of a subsection
-location counter. There is no way to directly manipulate a location
-counter--but the `.align' directive changes it, and any label
-definition captures its current value. The location counter of the
-section where statements are being assembled is said to be the "active"
-location counter.
-
-
-File: as.info, Node: bss, Prev: Sub-Sections, Up: Sections
-
-4.5 bss Section
-===============
-
-The bss section is used for local common variable storage. You may
-allocate address space in the bss section, but you may not dictate data
-to load into it before your program executes. When your program starts
-running, all the contents of the bss section are zeroed bytes.
-
- The `.lcomm' pseudo-op defines a symbol in the bss section; see
-*Note `.lcomm': Lcomm.
-
- The `.comm' pseudo-op may be used to declare a common symbol, which
-is another form of uninitialized symbol; see *Note `.comm': Comm.
-
- When assembling for a target which supports multiple sections, such
-as ELF or COFF, you may switch into the `.bss' section and define
-symbols as usual; see *Note `.section': Section. You may only assemble
-zero values into the section. Typically the section will only contain
-symbol definitions and `.skip' directives (*note `.skip': Skip.).
-
-
-File: as.info, Node: Symbols, Next: Expressions, Prev: Sections, Up: Top
-
-5 Symbols
-*********
-
-Symbols are a central concept: the programmer uses symbols to name
-things, the linker uses symbols to link, and the debugger uses symbols
-to debug.
-
- _Warning:_ `as' does not place symbols in the object file in the
- same order they were declared. This may break some debuggers.
-
-* Menu:
-
-* Labels:: Labels
-* Setting Symbols:: Giving Symbols Other Values
-* Symbol Names:: Symbol Names
-* Dot:: The Special Dot Symbol
-* Symbol Attributes:: Symbol Attributes
-
-
-File: as.info, Node: Labels, Next: Setting Symbols, Up: Symbols
-
-5.1 Labels
-==========
-
-A "label" is written as a symbol immediately followed by a colon `:'.
-The symbol then represents the current value of the active location
-counter, and is, for example, a suitable instruction operand. You are
-warned if you use the same symbol to represent two different locations:
-the first definition overrides any other definitions.
-
- On the HPPA, the usual form for a label need not be immediately
-followed by a colon, but instead must start in column zero. Only one
-label may be defined on a single line. To work around this, the HPPA
-version of `as' also provides a special directive `.label' for defining
-labels more flexibly.
-
-
-File: as.info, Node: Setting Symbols, Next: Symbol Names, Prev: Labels, Up: Symbols
-
-5.2 Giving Symbols Other Values
-===============================
-
-A symbol can be given an arbitrary value by writing a symbol, followed
-by an equals sign `=', followed by an expression (*note Expressions::).
-This is equivalent to using the `.set' directive. *Note `.set': Set.
-In the same way, using a double equals sign `='`=' here represents an
-equivalent of the `.eqv' directive. *Note `.eqv': Eqv.
-
-
-File: as.info, Node: Symbol Names, Next: Dot, Prev: Setting Symbols, Up: Symbols
-
-5.3 Symbol Names
-================
-
-Symbol names begin with a letter or with one of `._'. On most
-machines, you can also use `$' in symbol names; exceptions are noted in
-*Note Machine Dependencies::. That character may be followed by any
-string of digits, letters, dollar signs (unless otherwise noted in
-*Note Machine Dependencies::), and underscores.
-
-Case of letters is significant: `foo' is a different symbol name than
-`Foo'.
-
- Each symbol has exactly one name. Each name in an assembly language
-program refers to exactly one symbol. You may use that symbol name any
-number of times in a program.
-
-Local Symbol Names
-------------------
-
-Local symbols help compilers and programmers use names temporarily.
-They create symbols which are guaranteed to be unique over the entire
-scope of the input source code and which can be referred to by a simple
-notation. To define a local symbol, write a label of the form `N:'
-(where N represents any positive integer). To refer to the most recent
-previous definition of that symbol write `Nb', using the same number as
-when you defined the label. To refer to the next definition of a local
-label, write `Nf'-- The `b' stands for"backwards" and the `f' stands
-for "forwards".
-
- There is no restriction on how you can use these labels, and you can
-reuse them too. So that it is possible to repeatedly define the same
-local label (using the same number `N'), although you can only refer to
-the most recently defined local label of that number (for a backwards
-reference) or the next definition of a specific local label for a
-forward reference. It is also worth noting that the first 10 local
-labels (`0:'...`9:') are implemented in a slightly more efficient
-manner than the others.
-
- Here is an example:
-
- 1: branch 1f
- 2: branch 1b
- 1: branch 2f
- 2: branch 1b
-
- Which is the equivalent of:
-
- label_1: branch label_3
- label_2: branch label_1
- label_3: branch label_4
- label_4: branch label_3
-
- Local symbol names are only a notational device. They are
-immediately transformed into more conventional symbol names before the
-assembler uses them. The symbol names stored in the symbol table,
-appearing in error messages and optionally emitted to the object file.
-The names are constructed using these parts:
-
-`L'
- All local labels begin with `L'. Normally both `as' and `ld'
- forget symbols that start with `L'. These labels are used for
- symbols you are never intended to see. If you use the `-L' option
- then `as' retains these symbols in the object file. If you also
- instruct `ld' to retain these symbols, you may use them in
- debugging.
-
-`NUMBER'
- This is the number that was used in the local label definition.
- So if the label is written `55:' then the number is `55'.
-
-`C-B'
- This unusual character is included so you do not accidentally
- invent a symbol of the same name. The character has ASCII value
- of `\002' (control-B).
-
-`_ordinal number_'
- This is a serial number to keep the labels distinct. The first
- definition of `0:' gets the number `1'. The 15th definition of
- `0:' gets the number `15', and so on. Likewise the first
- definition of `1:' gets the number `1' and its 15th defintion gets
- `15' as well.
-
- So for example, the first `1:' is named `L1C-B1', the 44th `3:' is
-named `L3C-B44'.
-
-Dollar Local Labels
--------------------
-
-`as' also supports an even more local form of local labels called
-dollar labels. These labels go out of scope (ie they become undefined)
-as soon as a non-local label is defined. Thus they remain valid for
-only a small region of the input source code. Normal local labels, by
-contrast, remain in scope for the entire file, or until they are
-redefined by another occurrence of the same local label.
-
- Dollar labels are defined in exactly the same way as ordinary local
-labels, except that instead of being terminated by a colon, they are
-terminated by a dollar sign. eg `55$'.
-
- They can also be distinguished from ordinary local labels by their
-transformed name which uses ASCII character `\001' (control-A) as the
-magic character to distinguish them from ordinary labels. Thus the 5th
-defintion of `6$' is named `L6C-A5'.
-
-
-File: as.info, Node: Dot, Next: Symbol Attributes, Prev: Symbol Names, Up: Symbols
-
-5.4 The Special Dot Symbol
-==========================
-
-The special symbol `.' refers to the current address that `as' is
-assembling into. Thus, the expression `melvin: .long .' defines
-`melvin' to contain its own address. Assigning a value to `.' is
-treated the same as a `.org' directive. Thus, the expression `.=.+4'
-is the same as saying `.space 4'.
-
-
-File: as.info, Node: Symbol Attributes, Prev: Dot, Up: Symbols
-
-5.5 Symbol Attributes
-=====================
-
-Every symbol has, as well as its name, the attributes "Value" and
-"Type". Depending on output format, symbols can also have auxiliary
-attributes.
-
- If you use a symbol without defining it, `as' assumes zero for all
-these attributes, and probably won't warn you. This makes the symbol
-an externally defined symbol, which is generally what you would want.
-
-* Menu:
-
-* Symbol Value:: Value
-* Symbol Type:: Type
-
-
-* a.out Symbols:: Symbol Attributes: `a.out'
-
-* COFF Symbols:: Symbol Attributes for COFF
-
-* SOM Symbols:: Symbol Attributes for SOM
-
-
-File: as.info, Node: Symbol Value, Next: Symbol Type, Up: Symbol Attributes
-
-5.5.1 Value
------------
-
-The value of a symbol is (usually) 32 bits. For a symbol which labels a
-location in the text, data, bss or absolute sections the value is the
-number of addresses from the start of that section to the label.
-Naturally for text, data and bss sections the value of a symbol changes
-as `ld' changes section base addresses during linking. Absolute
-symbols' values do not change during linking: that is why they are
-called absolute.
-
- The value of an undefined symbol is treated in a special way. If it
-is 0 then the symbol is not defined in this assembler source file, and
-`ld' tries to determine its value from other files linked into the same
-program. You make this kind of symbol simply by mentioning a symbol
-name without defining it. A non-zero value represents a `.comm' common
-declaration. The value is how much common storage to reserve, in bytes
-(addresses). The symbol refers to the first address of the allocated
-storage.
-
-
-File: as.info, Node: Symbol Type, Next: a.out Symbols, Prev: Symbol Value, Up: Symbol Attributes
-
-5.5.2 Type
-----------
-
-The type attribute of a symbol contains relocation (section)
-information, any flag settings indicating that a symbol is external, and
-(optionally), other information for linkers and debuggers. The exact
-format depends on the object-code output format in use.
-
-
-File: as.info, Node: a.out Symbols, Next: COFF Symbols, Prev: Symbol Type, Up: Symbol Attributes
-
-5.5.3 Symbol Attributes: `a.out'
---------------------------------
-
-* Menu:
-
-* Symbol Desc:: Descriptor
-* Symbol Other:: Other
-
-
-File: as.info, Node: Symbol Desc, Next: Symbol Other, Up: a.out Symbols
-
-5.5.3.1 Descriptor
-..................
-
-This is an arbitrary 16-bit value. You may establish a symbol's
-descriptor value by using a `.desc' statement (*note `.desc': Desc.).
-A descriptor value means nothing to `as'.
-
-
-File: as.info, Node: Symbol Other, Prev: Symbol Desc, Up: a.out Symbols
-
-5.5.3.2 Other
-.............
-
-This is an arbitrary 8-bit value. It means nothing to `as'.
-
-
-File: as.info, Node: COFF Symbols, Next: SOM Symbols, Prev: a.out Symbols, Up: Symbol Attributes
-
-5.5.4 Symbol Attributes for COFF
---------------------------------
-
-The COFF format supports a multitude of auxiliary symbol attributes;
-like the primary symbol attributes, they are set between `.def' and
-`.endef' directives.
-
-5.5.4.1 Primary Attributes
-..........................
-
-The symbol name is set with `.def'; the value and type, respectively,
-with `.val' and `.type'.
-
-5.5.4.2 Auxiliary Attributes
-............................
-
-The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and
-`.weak' can generate auxiliary symbol table information for COFF.
-
-
-File: as.info, Node: SOM Symbols, Prev: COFF Symbols, Up: Symbol Attributes
-
-5.5.5 Symbol Attributes for SOM
--------------------------------
-
-The SOM format for the HPPA supports a multitude of symbol attributes
-set with the `.EXPORT' and `.IMPORT' directives.
-
- The attributes are described in `HP9000 Series 800 Assembly Language
-Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT'
-assembler directive documentation.
-
-
-File: as.info, Node: Expressions, Next: Pseudo Ops, Prev: Symbols, Up: Top
-
-6 Expressions
-*************
-
-An "expression" specifies an address or numeric value. Whitespace may
-precede and/or follow an expression.
-
- The result of an expression must be an absolute number, or else an
-offset into a particular section. If an expression is not absolute,
-and there is not enough information when `as' sees the expression to
-know its section, a second pass over the source program might be
-necessary to interpret the expression--but the second pass is currently
-not implemented. `as' aborts with an error message in this situation.
-
-* Menu:
-
-* Empty Exprs:: Empty Expressions
-* Integer Exprs:: Integer Expressions
-
-
-File: as.info, Node: Empty Exprs, Next: Integer Exprs, Up: Expressions
-
-6.1 Empty Expressions
-=====================
-
-An empty expression has no value: it is just whitespace or null.
-Wherever an absolute expression is required, you may omit the
-expression, and `as' assumes a value of (absolute) 0. This is
-compatible with other assemblers.
-
-
-File: as.info, Node: Integer Exprs, Prev: Empty Exprs, Up: Expressions
-
-6.2 Integer Expressions
-=======================
-
-An "integer expression" is one or more _arguments_ delimited by
-_operators_.
-
-* Menu:
-
-* Arguments:: Arguments
-* Operators:: Operators
-* Prefix Ops:: Prefix Operators
-* Infix Ops:: Infix Operators
-
-
-File: as.info, Node: Arguments, Next: Operators, Up: Integer Exprs
-
-6.2.1 Arguments
----------------
-
-"Arguments" are symbols, numbers or subexpressions. In other contexts
-arguments are sometimes called "arithmetic operands". In this manual,
-to avoid confusing them with the "instruction operands" of the machine
-language, we use the term "argument" to refer to parts of expressions
-only, reserving the word "operand" to refer only to machine instruction
-operands.
-
- Symbols are evaluated to yield {SECTION NNN} where SECTION is one of
-text, data, bss, absolute, or undefined. NNN is a signed, 2's
-complement 32 bit integer.
-
- Numbers are usually integers.
-
- A number can be a flonum or bignum. In this case, you are warned
-that only the low order 32 bits are used, and `as' pretends these 32
-bits are an integer. You may write integer-manipulating instructions
-that act on exotic constants, compatible with other assemblers.
-
- Subexpressions are a left parenthesis `(' followed by an integer
-expression, followed by a right parenthesis `)'; or a prefix operator
-followed by an argument.
-
-
-File: as.info, Node: Operators, Next: Prefix Ops, Prev: Arguments, Up: Integer Exprs
-
-6.2.2 Operators
----------------
-
-"Operators" are arithmetic functions, like `+' or `%'. Prefix
-operators are followed by an argument. Infix operators appear between
-their arguments. Operators may be preceded and/or followed by
-whitespace.
-
-
-File: as.info, Node: Prefix Ops, Next: Infix Ops, Prev: Operators, Up: Integer Exprs
-
-6.2.3 Prefix Operator
----------------------
-
-`as' has the following "prefix operators". They each take one
-argument, which must be absolute.
-
-`-'
- "Negation". Two's complement negation.
-
-`~'
- "Complementation". Bitwise not.
-
-
-File: as.info, Node: Infix Ops, Prev: Prefix Ops, Up: Integer Exprs
-
-6.2.4 Infix Operators
----------------------
-
-"Infix operators" take two arguments, one on either side. Operators
-have precedence, but operations with equal precedence are performed left
-to right. Apart from `+' or `-', both arguments must be absolute, and
-the result is absolute.
-
- 1. Highest Precedence
-
- `*'
- "Multiplication".
-
- `/'
- "Division". Truncation is the same as the C operator `/'
-
- `%'
- "Remainder".
-
- `<<'
- "Shift Left". Same as the C operator `<<'.
-
- `>>'
- "Shift Right". Same as the C operator `>>'.
-
- 2. Intermediate precedence
-
- `|'
- "Bitwise Inclusive Or".
-
- `&'
- "Bitwise And".
-
- `^'
- "Bitwise Exclusive Or".
-
- `!'
- "Bitwise Or Not".
-
- 3. Low Precedence
-
- `+'
- "Addition". If either argument is absolute, the result has
- the section of the other argument. You may not add together
- arguments from different sections.
-
- `-'
- "Subtraction". If the right argument is absolute, the result
- has the section of the left argument. If both arguments are
- in the same section, the result is absolute. You may not
- subtract arguments from different sections.
-
- `=='
- "Is Equal To"
-
- `<>'
- `!='
- "Is Not Equal To"
-
- `<'
- "Is Less Than"
-
- `>'
- "Is Greater Than"
-
- `>='
- "Is Greater Than Or Equal To"
-
- `<='
- "Is Less Than Or Equal To"
-
- The comparison operators can be used as infix operators. A
- true results has a value of -1 whereas a false result has a
- value of 0. Note, these operators perform signed
- comparisons.
-
- 4. Lowest Precedence
-
- `&&'
- "Logical And".
-
- `||'
- "Logical Or".
-
- These two logical operations can be used to combine the
- results of sub expressions. Note, unlike the comparison
- operators a true result returns a value of 1 but a false
- results does still return 0. Also note that the logical or
- operator has a slightly lower precedence than logical and.
-
-
- In short, it's only meaningful to add or subtract the _offsets_ in an
-address; you can only have a defined section in one of the two
-arguments.
-
-
-File: as.info, Node: Pseudo Ops, Next: Machine Dependencies, Prev: Expressions, Up: Top
-
-7 Assembler Directives
-**********************
-
-All assembler directives have names that begin with a period (`.').
-The rest of the name is letters, usually in lower case.
-
- This chapter discusses directives that are available regardless of
-the target machine configuration for the GNU assembler. Some machine
-configurations provide additional directives. *Note Machine
-Dependencies::.
-
-* Menu:
-
-* Abort:: `.abort'
-
-* ABORT:: `.ABORT'
-
-* Align:: `.align ABS-EXPR , ABS-EXPR'
-* Altmacro:: `.altmacro'
-* Ascii:: `.ascii "STRING"'...
-* Asciz:: `.asciz "STRING"'...
-* Balign:: `.balign ABS-EXPR , ABS-EXPR'
-* Byte:: `.byte EXPRESSIONS'
-* Comm:: `.comm SYMBOL , LENGTH '
-
-* CFI directives:: `.cfi_startproc', `.cfi_endproc', etc.
-
-* Data:: `.data SUBSECTION'
-
-* Def:: `.def NAME'
-
-* Desc:: `.desc SYMBOL, ABS-EXPRESSION'
-
-* Dim:: `.dim'
-
-* Double:: `.double FLONUMS'
-* Eject:: `.eject'
-* Else:: `.else'
-* Elseif:: `.elseif'
-* End:: `.end'
-
-* Endef:: `.endef'
-
-* Endfunc:: `.endfunc'
-* Endif:: `.endif'
-* Equ:: `.equ SYMBOL, EXPRESSION'
-* Equiv:: `.equiv SYMBOL, EXPRESSION'
-* Eqv:: `.eqv SYMBOL, EXPRESSION'
-* Err:: `.err'
-* Error:: `.error STRING'
-* Exitm:: `.exitm'
-* Extern:: `.extern'
-* Fail:: `.fail'
-
-* File:: `.file STRING'
-
-* Fill:: `.fill REPEAT , SIZE , VALUE'
-* Float:: `.float FLONUMS'
-* Func:: `.func'
-* Global:: `.global SYMBOL', `.globl SYMBOL'
-
-* Hidden:: `.hidden NAMES'
-
-* hword:: `.hword EXPRESSIONS'
-* Ident:: `.ident'
-* If:: `.if ABSOLUTE EXPRESSION'
-* Incbin:: `.incbin "FILE"[,SKIP[,COUNT]]'
-* Include:: `.include "FILE"'
-* Int:: `.int EXPRESSIONS'
-
-* Internal:: `.internal NAMES'
-
-* Irp:: `.irp SYMBOL,VALUES'...
-* Irpc:: `.irpc SYMBOL,VALUES'...
-* Lcomm:: `.lcomm SYMBOL , LENGTH'
-* Lflags:: `.lflags'
-
-* Line:: `.line LINE-NUMBER'
-
-* Linkonce:: `.linkonce [TYPE]'
-* List:: `.list'
-* Ln:: `.ln LINE-NUMBER'
-
-* LNS directives:: `.file', `.loc', etc.
-
-* Long:: `.long EXPRESSIONS'
-
-* Macro:: `.macro NAME ARGS'...
-* MRI:: `.mri VAL'
-* Noaltmacro:: `.noaltmacro'
-* Nolist:: `.nolist'
-* Octa:: `.octa BIGNUMS'
-* Org:: `.org NEW-LC , FILL'
-* P2align:: `.p2align ABS-EXPR , ABS-EXPR'
-
-* PopSection:: `.popsection'
-* Previous:: `.previous'
-
-* Print:: `.print STRING'
-
-* Protected:: `.protected NAMES'
-
-* Psize:: `.psize LINES, COLUMNS'
-* Purgem:: `.purgem NAME'
-
-* PushSection:: `.pushsection NAME'
-
-* Quad:: `.quad BIGNUMS'
-* Rept:: `.rept COUNT'
-* Sbttl:: `.sbttl "SUBHEADING"'
-
-* Scl:: `.scl CLASS'
-
-* Section:: `.section NAME'
-
-* Set:: `.set SYMBOL, EXPRESSION'
-* Short:: `.short EXPRESSIONS'
-* Single:: `.single FLONUMS'
-
-* Size:: `.size [NAME , EXPRESSION]'
-
-* Skip:: `.skip SIZE , FILL'
-* Sleb128:: `.sleb128 EXPRESSIONS'
-* Space:: `.space SIZE , FILL'
-
-* Stab:: `.stabd, .stabn, .stabs'
-
-* String:: `.string "STR"'
-* Struct:: `.struct EXPRESSION'
-
-* SubSection:: `.subsection'
-* Symver:: `.symver NAME,NAME2@NODENAME'
-
-
-* Tag:: `.tag STRUCTNAME'
-
-* Text:: `.text SUBSECTION'
-* Title:: `.title "HEADING"'
-
-* Type:: `.type <INT | NAME , TYPE DESCRIPTION>'
-
-* Uleb128:: `.uleb128 EXPRESSIONS'
-
-* Val:: `.val ADDR'
-
-
-* Version:: `.version "STRING"'
-* VTableEntry:: `.vtable_entry TABLE, OFFSET'
-* VTableInherit:: `.vtable_inherit CHILD, PARENT'
-
-* Warning:: `.warning STRING'
-* Weak:: `.weak NAMES'
-* Weakref:: `.weakref ALIAS, SYMBOL'
-* Word:: `.word EXPRESSIONS'
-* Deprecated:: Deprecated Directives
-
-
-File: as.info, Node: Abort, Next: ABORT, Up: Pseudo Ops
-
-7.1 `.abort'
-============
-
-This directive stops the assembly immediately. It is for compatibility
-with other assemblers. The original idea was that the assembly
-language source would be piped into the assembler. If the sender of
-the source quit, it could use this directive tells `as' to quit also.
-One day `.abort' will not be supported.
-
-
-File: as.info, Node: ABORT, Next: Align, Prev: Abort, Up: Pseudo Ops
-
-7.2 `.ABORT'
-============
-
-When producing COFF output, `as' accepts this directive as a synonym
-for `.abort'.
-
-
-File: as.info, Node: Align, Next: Altmacro, Prev: ABORT, Up: Pseudo Ops
-
-7.3 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR'
-=========================================
-
-Pad the location counter (in the current subsection) to a particular
-storage boundary. The first expression (which must be absolute) is the
-alignment required, as described below.
-
- The second expression (also absolute) gives the fill value to be
-stored in the padding bytes. It (and the comma) may be omitted. If it
-is omitted, the padding bytes are normally zero. However, on some
-systems, if the section is marked as containing code and the fill value
-is omitted, the space is filled with no-op instructions.
-
- The third expression is also absolute, and is also optional. If it
-is present, it is the maximum number of bytes that should be skipped by
-this alignment directive. If doing the alignment would require
-skipping more bytes than the specified maximum, then the alignment is
-not done at all. You can omit the fill value (the second argument)
-entirely by simply using two commas after the required alignment; this
-can be useful if you want the alignment to be filled with no-op
-instructions when appropriate.
-
- The way the required alignment is specified varies from system to
-system. For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or32,
-s390, sparc, tic4x, tic80 and xtensa, the first expression is the
-alignment request in bytes. For example `.align 8' advances the
-location counter until it is a multiple of 8. If the location counter
-is already a multiple of 8, no change is needed. For the tic54x, the
-first expression is the alignment request in words.
-
- For other systems, including the i386 using a.out format, and the
-arm and strongarm, it is the number of low-order zero bits the location
-counter must have after advancement. For example `.align 3' advances
-the location counter until it a multiple of 8. If the location counter
-is already a multiple of 8, no change is needed.
-
- This inconsistency is due to the different behaviors of the various
-native assemblers for these systems which GAS must emulate. GAS also
-provides `.balign' and `.p2align' directives, described later, which
-have a consistent behavior across all architectures (but are specific
-to GAS).
-
-
-File: as.info, Node: Ascii, Next: Asciz, Prev: Altmacro, Up: Pseudo Ops
-
-7.4 `.ascii "STRING"'...
-========================
-
-`.ascii' expects zero or more string literals (*note Strings::)
-separated by commas. It assembles each string (with no automatic
-trailing zero byte) into consecutive addresses.
-
-
-File: as.info, Node: Asciz, Next: Balign, Prev: Ascii, Up: Pseudo Ops
-
-7.5 `.asciz "STRING"'...
-========================
-
-`.asciz' is just like `.ascii', but each string is followed by a zero
-byte. The "z" in `.asciz' stands for "zero".
-
-
-File: as.info, Node: Balign, Next: Byte, Prev: Asciz, Up: Pseudo Ops
-
-7.6 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
-==============================================
-
-Pad the location counter (in the current subsection) to a particular
-storage boundary. The first expression (which must be absolute) is the
-alignment request in bytes. For example `.balign 8' advances the
-location counter until it is a multiple of 8. If the location counter
-is already a multiple of 8, no change is needed.
-
- The second expression (also absolute) gives the fill value to be
-stored in the padding bytes. It (and the comma) may be omitted. If it
-is omitted, the padding bytes are normally zero. However, on some
-systems, if the section is marked as containing code and the fill value
-is omitted, the space is filled with no-op instructions.
-
- The third expression is also absolute, and is also optional. If it
-is present, it is the maximum number of bytes that should be skipped by
-this alignment directive. If doing the alignment would require
-skipping more bytes than the specified maximum, then the alignment is
-not done at all. You can omit the fill value (the second argument)
-entirely by simply using two commas after the required alignment; this
-can be useful if you want the alignment to be filled with no-op
-instructions when appropriate.
-
- The `.balignw' and `.balignl' directives are variants of the
-`.balign' directive. The `.balignw' directive treats the fill pattern
-as a two byte word value. The `.balignl' directives treats the fill
-pattern as a four byte longword value. For example, `.balignw
-4,0x368d' will align to a multiple of 4. If it skips two bytes, they
-will be filled in with the value 0x368d (the exact placement of the
-bytes depends upon the endianness of the processor). If it skips 1 or
-3 bytes, the fill value is undefined.
-
-
-File: as.info, Node: Byte, Next: Comm, Prev: Balign, Up: Pseudo Ops
-
-7.7 `.byte EXPRESSIONS'
-=======================
-
-`.byte' expects zero or more expressions, separated by commas. Each
-expression is assembled into the next byte.
-
-
-File: as.info, Node: Comm, Next: CFI directives, Prev: Byte, Up: Pseudo Ops
-
-7.8 `.comm SYMBOL , LENGTH '
-============================
-
-`.comm' declares a common symbol named SYMBOL. When linking, a common
-symbol in one object file may be merged with a defined or common symbol
-of the same name in another object file. If `ld' does not see a
-definition for the symbol-just one or more common symbols-then it will
-allocate LENGTH bytes of uninitialized memory. LENGTH must be an
-absolute expression. If `ld' sees multiple common symbols with the
-same name, and they do not all have the same size, it will allocate
-space using the largest size.
-
- When using ELF, the `.comm' directive takes an optional third
-argument. This is the desired alignment of the symbol, specified as a
-byte boundary (for example, an alignment of 16 means that the least
-significant 4 bits of the address should be zero). The alignment must
-be an absolute expression, and it must be a power of two. If `ld'
-allocates uninitialized memory for the common symbol, it will use the
-alignment when placing the symbol. If no alignment is specified, `as'
-will set the alignment to the largest power of two less than or equal
-to the size of the symbol, up to a maximum of 16.
-
- The syntax for `.comm' differs slightly on the HPPA. The syntax is
-`SYMBOL .comm, LENGTH'; SYMBOL is optional.
-
-
-File: as.info, Node: CFI directives, Next: Data, Prev: Comm, Up: Pseudo Ops
-
-7.9 `.cfi_startproc'
-====================
-
-`.cfi_startproc' is used at the beginning of each function that should
-have an entry in `.eh_frame'. It initializes some internal data
-structures and emits architecture dependent initial CFI instructions.
-Don't forget to close the function by `.cfi_endproc'.
-
-7.10 `.cfi_endproc'
-===================
-
-`.cfi_endproc' is used at the end of a function where it closes its
-unwind entry previously opened by `.cfi_startproc'. and emits it to
-`.eh_frame'.
-
-7.11 `.cfi_def_cfa REGISTER, OFFSET'
-====================================
-
-`.cfi_def_cfa' defines a rule for computing CFA as: take address from
-REGISTER and add OFFSET to it.
-
-7.12 `.cfi_def_cfa_register REGISTER'
-=====================================
-
-`.cfi_def_cfa_register' modifies a rule for computing CFA. From now on
-REGISTER will be used instead of the old one. Offset remains the same.
-
-7.13 `.cfi_def_cfa_offset OFFSET'
-=================================
-
-`.cfi_def_cfa_offset' modifies a rule for computing CFA. Register
-remains the same, but OFFSET is new. Note that it is the absolute
-offset that will be added to a defined register to compute CFA address.
-
-7.14 `.cfi_adjust_cfa_offset OFFSET'
-====================================
-
-Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is
-added/substracted from the previous offset.
-
-7.15 `.cfi_offset REGISTER, OFFSET'
-===================================
-
-Previous value of REGISTER is saved at offset OFFSET from CFA.
-
-7.16 `.cfi_rel_offset REGISTER, OFFSET'
-=======================================
-
-Previous value of REGISTER is saved at offset OFFSET from the current
-CFA register. This is transformed to `.cfi_offset' using the known
-displacement of the CFA register from the CFA. This is often easier to
-use, because the number will match the code it's annotating.
-
-7.17 `.cfi_signal_frame'
-========================
-
-Mark current function as signal trampoline.
-
-7.18 `.cfi_window_save'
-=======================
-
-SPARC register window has been saved.
-
-7.19 `.cfi_escape' EXPRESSION[, ...]
-====================================
-
-Allows the user to add arbitrary bytes to the unwind info. One might
-use this to add OS-specific CFI opcodes, or generic CFI opcodes that
-GAS does not yet support.
-
-
-File: as.info, Node: LNS directives, Next: Long, Prev: Ln, Up: Pseudo Ops
-
-7.20 `.file FILENO FILENAME'
-============================
-
-When emitting dwarf2 line number information `.file' assigns filenames
-to the `.debug_line' file name table. The FILENO operand should be a
-unique positive integer to use as the index of the entry in the table.
-The FILENAME operand is a C string literal.
-
- The detail of filename indicies is exposed to the user because the
-filename table is shared with the `.debug_info' section of the dwarf2
-debugging information, and thus the user must know the exact indicies
-that table entries will have.
-
-7.21 `.loc FILENO LINENO [COLUMN] [OPTIONS]'
-============================================
-
-The `.loc' directive will add row to the `.debug_line' line number
-matrix corresponding to the immediately following assembly instruction.
-The FILENO, LINENO, and optional COLUMN arguments will be applied to
-the `.debug_line' state machine before the row is added.
-
- The OPTIONS are a sequence of the following tokens in any order:
-
-`basic_block'
- This option will set the `basic_block' register in the
- `.debug_line' state machine to `true'.
-
-`prologue_end'
- This option will set the `prologue_end' register in the
- `.debug_line' state machine to `true'.
-
-`epilogue_begin'
- This option will set the `epilogue_begin' register in the
- `.debug_line' state machine to `true'.
-
-`is_stmt VALUE'
- This option will set the `is_stmt' register in the `.debug_line'
- state machine to `value', which must be either 0 or 1.
-
-`isa VALUE'
- This directive will set the `isa' register in the `.debug_line'
- state machine to VALUE, which must be an unsigned integer.
-
-
-7.22 `.loc_mark_blocks ENABLE'
-==============================
-
-The `.loc_mark_blocks' directive makes the assembler emit an entry to
-the `.debug_line' line number matrix with the `basic_block' register in
-the state machine set whenever a code label is seen. The ENABLE
-argument should be either 1 or 0, to enable or disable this function
-respectively.
-
-
-File: as.info, Node: Data, Next: Def, Prev: CFI directives, Up: Pseudo Ops
-
-7.23 `.data SUBSECTION'
-=======================
-
-`.data' tells `as' to assemble the following statements onto the end of
-the data subsection numbered SUBSECTION (which is an absolute
-expression). If SUBSECTION is omitted, it defaults to zero.
-
-
-File: as.info, Node: Def, Next: Desc, Prev: Data, Up: Pseudo Ops
-
-7.24 `.def NAME'
-================
-
-Begin defining debugging information for a symbol NAME; the definition
-extends until the `.endef' directive is encountered.
-
-
-File: as.info, Node: Desc, Next: Dim, Prev: Def, Up: Pseudo Ops
-
-7.25 `.desc SYMBOL, ABS-EXPRESSION'
-===================================
-
-This directive sets the descriptor of the symbol (*note Symbol
-Attributes::) to the low 16 bits of an absolute expression.
-
- The `.desc' directive is not available when `as' is configured for
-COFF output; it is only for `a.out' or `b.out' object format. For the
-sake of compatibility, `as' accepts it, but produces no output, when
-configured for COFF.
-
-
-File: as.info, Node: Dim, Next: Double, Prev: Desc, Up: Pseudo Ops
-
-7.26 `.dim'
-===========
-
-This directive is generated by compilers to include auxiliary debugging
-information in the symbol table. It is only permitted inside
-`.def'/`.endef' pairs.
-
-
-File: as.info, Node: Double, Next: Eject, Prev: Dim, Up: Pseudo Ops
-
-7.27 `.double FLONUMS'
-======================
-
-`.double' expects zero or more flonums, separated by commas. It
-assembles floating point numbers. The exact kind of floating point
-numbers emitted depends on how `as' is configured. *Note Machine
-Dependencies::.
-
-
-File: as.info, Node: Eject, Next: Else, Prev: Double, Up: Pseudo Ops
-
-7.28 `.eject'
-=============
-
-Force a page break at this point, when generating assembly listings.
-
-
-File: as.info, Node: Else, Next: Elseif, Prev: Eject, Up: Pseudo Ops
-
-7.29 `.else'
-============
-
-`.else' is part of the `as' support for conditional assembly; *note
-`.if': If. It marks the beginning of a section of code to be assembled
-if the condition for the preceding `.if' was false.
-
-
-File: as.info, Node: Elseif, Next: End, Prev: Else, Up: Pseudo Ops
-
-7.30 `.elseif'
-==============
-
-`.elseif' is part of the `as' support for conditional assembly; *note
-`.if': If. It is shorthand for beginning a new `.if' block that would
-otherwise fill the entire `.else' section.
-
-
-File: as.info, Node: End, Next: Endef, Prev: Elseif, Up: Pseudo Ops
-
-7.31 `.end'
-===========
-
-`.end' marks the end of the assembly file. `as' does not process
-anything in the file past the `.end' directive.
-
-
-File: as.info, Node: Endef, Next: Endfunc, Prev: End, Up: Pseudo Ops
-
-7.32 `.endef'
-=============
-
-This directive flags the end of a symbol definition begun with `.def'.
-
-
-File: as.info, Node: Endfunc, Next: Endif, Prev: Endef, Up: Pseudo Ops
-
-7.33 `.endfunc'
-===============
-
-`.endfunc' marks the end of a function specified with `.func'.
-
-
-File: as.info, Node: Endif, Next: Equ, Prev: Endfunc, Up: Pseudo Ops
-
-7.34 `.endif'
-=============
-
-`.endif' is part of the `as' support for conditional assembly; it marks
-the end of a block of code that is only assembled conditionally. *Note
-`.if': If.
-
-
-File: as.info, Node: Equ, Next: Equiv, Prev: Endif, Up: Pseudo Ops
-
-7.35 `.equ SYMBOL, EXPRESSION'
-==============================
-
-This directive sets the value of SYMBOL to EXPRESSION. It is
-synonymous with `.set'; *note `.set': Set.
-
- The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'.
-
- The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'. On the
-Z80 it is an eror if SYMBOL is already defined, but the symbol is not
-protected from later redefinition, compare *Note Equiv::.
-
-
-File: as.info, Node: Equiv, Next: Eqv, Prev: Equ, Up: Pseudo Ops
-
-7.36 `.equiv SYMBOL, EXPRESSION'
-================================
-
-The `.equiv' directive is like `.equ' and `.set', except that the
-assembler will signal an error if SYMBOL is already defined. Note a
-symbol which has been referenced but not actually defined is considered
-to be undefined.
-
- Except for the contents of the error message, this is roughly
-equivalent to
- .ifdef SYM
- .err
- .endif
- .equ SYM,VAL
- plus it protects the symbol from later redefinition.
-
-
-File: as.info, Node: Eqv, Next: Err, Prev: Equiv, Up: Pseudo Ops
-
-7.37 `.eqv SYMBOL, EXPRESSION'
-==============================
-
-The `.eqv' directive is like `.equiv', but no attempt is made to
-evaluate the expression or any part of it immediately. Instead each
-time the resulting symbol is used in an expression, a snapshot of its
-current value is taken.
-
-
-File: as.info, Node: Err, Next: Error, Prev: Eqv, Up: Pseudo Ops
-
-7.38 `.err'
-===========
-
-If `as' assembles a `.err' directive, it will print an error message
-and, unless the `-Z' option was used, it will not generate an object
-file. This can be used to signal an error in conditionally compiled
-code.
-
-
-File: as.info, Node: Error, Next: Exitm, Prev: Err, Up: Pseudo Ops
-
-7.39 `.error "STRING"'
-======================
-
-Similarly to `.err', this directive emits an error, but you can specify
-a string that will be emitted as the error message. If you don't
-specify the message, it defaults to `".error directive invoked in
-source file"'. *Note Error and Warning Messages: Errors.
-
- .error "This code has not been assembled and tested."
-
-
-File: as.info, Node: Exitm, Next: Extern, Prev: Error, Up: Pseudo Ops
-
-7.40 `.exitm'
-=============
-
-Exit early from the current macro definition. *Note Macro::.
-
-
-File: as.info, Node: Extern, Next: Fail, Prev: Exitm, Up: Pseudo Ops
-
-7.41 `.extern'
-==============
-
-`.extern' is accepted in the source program--for compatibility with
-other assemblers--but it is ignored. `as' treats all undefined symbols
-as external.
-
-
-File: as.info, Node: Fail, Next: File, Prev: Extern, Up: Pseudo Ops
-
-7.42 `.fail EXPRESSION'
-=======================
-
-Generates an error or a warning. If the value of the EXPRESSION is 500
-or more, `as' will print a warning message. If the value is less than
-500, `as' will print an error message. The message will include the
-value of EXPRESSION. This can occasionally be useful inside complex
-nested macros or conditional assembly.
-
-
-File: as.info, Node: File, Next: Fill, Prev: Fail, Up: Pseudo Ops
-
-7.43 `.file STRING'
-===================
-
-`.file' tells `as' that we are about to start a new logical file.
-STRING is the new file name. In general, the filename is recognized
-whether or not it is surrounded by quotes `"'; but if you wish to
-specify an empty file name, you must give the quotes-`""'. This
-statement may go away in future: it is only recognized to be compatible
-with old `as' programs.
-
-
-File: as.info, Node: Fill, Next: Float, Prev: File, Up: Pseudo Ops
-
-7.44 `.fill REPEAT , SIZE , VALUE'
-==================================
-
-REPEAT, SIZE and VALUE are absolute expressions. This emits REPEAT
-copies of SIZE bytes. REPEAT may be zero or more. SIZE may be zero or
-more, but if it is more than 8, then it is deemed to have the value 8,
-compatible with other people's assemblers. The contents of each REPEAT
-bytes is taken from an 8-byte number. The highest order 4 bytes are
-zero. The lowest order 4 bytes are VALUE rendered in the byte-order of
-an integer on the computer `as' is assembling for. Each SIZE bytes in
-a repetition is taken from the lowest order SIZE bytes of this number.
-Again, this bizarre behavior is compatible with other people's
-assemblers.
-
- SIZE and VALUE are optional. If the second comma and VALUE are
-absent, VALUE is assumed zero. If the first comma and following tokens
-are absent, SIZE is assumed to be 1.
-
-
-File: as.info, Node: Float, Next: Func, Prev: Fill, Up: Pseudo Ops
-
-7.45 `.float FLONUMS'
-=====================
-
-This directive assembles zero or more flonums, separated by commas. It
-has the same effect as `.single'. The exact kind of floating point
-numbers emitted depends on how `as' is configured. *Note Machine
-Dependencies::.
-
-
-File: as.info, Node: Func, Next: Global, Prev: Float, Up: Pseudo Ops
-
-7.46 `.func NAME[,LABEL]'
-=========================
-
-`.func' emits debugging information to denote function NAME, and is
-ignored unless the file is assembled with debugging enabled. Only
-`--gstabs[+]' is currently supported. LABEL is the entry point of the
-function and if omitted NAME prepended with the `leading char' is used.
-`leading char' is usually `_' or nothing, depending on the target. All
-functions are currently defined to have `void' return type. The
-function must be terminated with `.endfunc'.
-
-
-File: as.info, Node: Global, Next: Hidden, Prev: Func, Up: Pseudo Ops
-
-7.47 `.global SYMBOL', `.globl SYMBOL'
-======================================
-
-`.global' makes the symbol visible to `ld'. If you define SYMBOL in
-your partial program, its value is made available to other partial
-programs that are linked with it. Otherwise, SYMBOL takes its
-attributes from a symbol of the same name from another file linked into
-the same program.
-
- Both spellings (`.globl' and `.global') are accepted, for
-compatibility with other assemblers.
-
- On the HPPA, `.global' is not always enough to make it accessible to
-other partial programs. You may need the HPPA-only `.EXPORT' directive
-as well. *Note HPPA Assembler Directives: HPPA Directives.
-
-
-File: as.info, Node: Hidden, Next: hword, Prev: Global, Up: Pseudo Ops
-
-7.48 `.hidden NAMES'
-====================
-
-This is one of the ELF visibility directives. The other two are
-`.internal' (*note `.internal': Internal.) and `.protected' (*note
-`.protected': Protected.).
-
- This directive overrides the named symbols default visibility (which
-is set by their binding: local, global or weak). The directive sets
-the visibility to `hidden' which means that the symbols are not visible
-to other components. Such symbols are always considered to be
-`protected' as well.
-
-
-File: as.info, Node: hword, Next: Ident, Prev: Hidden, Up: Pseudo Ops
-
-7.49 `.hword EXPRESSIONS'
-=========================
-
-This expects zero or more EXPRESSIONS, and emits a 16 bit number for
-each.
-
- This directive is a synonym for `.short'; depending on the target
-architecture, it may also be a synonym for `.word'.
-
-
-File: as.info, Node: Ident, Next: If, Prev: hword, Up: Pseudo Ops
-
-7.50 `.ident'
-=============
-
-This directive is used by some assemblers to place tags in object
-files. The behavior of this directive varies depending on the target.
-When using the a.out object file format, `as' simply accepts the
-directive for source-file compatibility with existing assemblers, but
-does not emit anything for it. When using COFF, comments are emitted
-to the `.comment' or `.rdata' section, depending on the target. When
-using ELF, comments are emitted to the `.comment' section.
-
-
-File: as.info, Node: If, Next: Incbin, Prev: Ident, Up: Pseudo Ops
-
-7.51 `.if ABSOLUTE EXPRESSION'
-==============================
-
-`.if' marks the beginning of a section of code which is only considered
-part of the source program being assembled if the argument (which must
-be an ABSOLUTE EXPRESSION) is non-zero. The end of the conditional
-section of code must be marked by `.endif' (*note `.endif': Endif.);
-optionally, you may include code for the alternative condition, flagged
-by `.else' (*note `.else': Else.). If you have several conditions to
-check, `.elseif' may be used to avoid nesting blocks if/else within
-each subsequent `.else' block.
-
- The following variants of `.if' are also supported:
-`.ifdef SYMBOL'
- Assembles the following section of code if the specified SYMBOL
- has been defined. Note a symbol which has been referenced but not
- yet defined is considered to be undefined.
-
-`.ifb TEXT'
- Assembles the following section of code if the operand is blank
- (empty).
-
-`.ifc STRING1,STRING2'
- Assembles the following section of code if the two strings are the
- same. The strings may be optionally quoted with single quotes.
- If they are not quoted, the first string stops at the first comma,
- and the second string stops at the end of the line. Strings which
- contain whitespace should be quoted. The string comparison is
- case sensitive.
-
-`.ifeq ABSOLUTE EXPRESSION'
- Assembles the following section of code if the argument is zero.
-
-`.ifeqs STRING1,STRING2'
- Another form of `.ifc'. The strings must be quoted using double
- quotes.
-
-`.ifge ABSOLUTE EXPRESSION'
- Assembles the following section of code if the argument is greater
- than or equal to zero.
-
-`.ifgt ABSOLUTE EXPRESSION'
- Assembles the following section of code if the argument is greater
- than zero.
-
-`.ifle ABSOLUTE EXPRESSION'
- Assembles the following section of code if the argument is less
- than or equal to zero.
-
-`.iflt ABSOLUTE EXPRESSION'
- Assembles the following section of code if the argument is less
- than zero.
-
-`.ifnb TEXT'
- Like `.ifb', but the sense of the test is reversed: this assembles
- the following section of code if the operand is non-blank
- (non-empty).
-
-`.ifnc STRING1,STRING2.'
- Like `.ifc', but the sense of the test is reversed: this assembles
- the following section of code if the two strings are not the same.
-
-`.ifndef SYMBOL'
-`.ifnotdef SYMBOL'
- Assembles the following section of code if the specified SYMBOL
- has not been defined. Both spelling variants are equivalent.
- Note a symbol which has been referenced but not yet defined is
- considered to be undefined.
-
-`.ifne ABSOLUTE EXPRESSION'
- Assembles the following section of code if the argument is not
- equal to zero (in other words, this is equivalent to `.if').
-
-`.ifnes STRING1,STRING2'
- Like `.ifeqs', but the sense of the test is reversed: this
- assembles the following section of code if the two strings are not
- the same.
-
-
-File: as.info, Node: Incbin, Next: Include, Prev: If, Up: Pseudo Ops
-
-7.52 `.incbin "FILE"[,SKIP[,COUNT]]'
-====================================
-
-The `incbin' directive includes FILE verbatim at the current location.
-You can control the search paths used with the `-I' command-line option
-(*note Command-Line Options: Invoking.). Quotation marks are required
-around FILE.
-
- The SKIP argument skips a number of bytes from the start of the
-FILE. The COUNT argument indicates the maximum number of bytes to
-read. Note that the data is not aligned in any way, so it is the user's
-responsibility to make sure that proper alignment is provided both
-before and after the `incbin' directive.
-
-
-File: as.info, Node: Include, Next: Int, Prev: Incbin, Up: Pseudo Ops
-
-7.53 `.include "FILE"'
-======================
-
-This directive provides a way to include supporting files at specified
-points in your source program. The code from FILE is assembled as if
-it followed the point of the `.include'; when the end of the included
-file is reached, assembly of the original file continues. You can
-control the search paths used with the `-I' command-line option (*note
-Command-Line Options: Invoking.). Quotation marks are required around
-FILE.
-
-
-File: as.info, Node: Int, Next: Internal, Prev: Include, Up: Pseudo Ops
-
-7.54 `.int EXPRESSIONS'
-=======================
-
-Expect zero or more EXPRESSIONS, of any section, separated by commas.
-For each expression, emit a number that, at run time, is the value of
-that expression. The byte order and bit size of the number depends on
-what kind of target the assembly is for.
-
-
-File: as.info, Node: Internal, Next: Irp, Prev: Int, Up: Pseudo Ops
-
-7.55 `.internal NAMES'
-======================
-
-This is one of the ELF visibility directives. The other two are
-`.hidden' (*note `.hidden': Hidden.) and `.protected' (*note
-`.protected': Protected.).
-
- This directive overrides the named symbols default visibility (which
-is set by their binding: local, global or weak). The directive sets
-the visibility to `internal' which means that the symbols are
-considered to be `hidden' (i.e., not visible to other components), and
-that some extra, processor specific processing must also be performed
-upon the symbols as well.
-
-
-File: as.info, Node: Irp, Next: Irpc, Prev: Internal, Up: Pseudo Ops
-
-7.56 `.irp SYMBOL,VALUES'...
-============================
-
-Evaluate a sequence of statements assigning different values to SYMBOL.
-The sequence of statements starts at the `.irp' directive, and is
-terminated by an `.endr' directive. For each VALUE, SYMBOL is set to
-VALUE, and the sequence of statements is assembled. If no VALUE is
-listed, the sequence of statements is assembled once, with SYMBOL set
-to the null string. To refer to SYMBOL within the sequence of
-statements, use \SYMBOL.
-
- For example, assembling
-
- .irp param,1,2,3
- move d\param,sp@-
- .endr
-
- is equivalent to assembling
-
- move d1,sp@-
- move d2,sp@-
- move d3,sp@-
-
- For some caveats with the spelling of SYMBOL, see also the discussion
-at *Note Macro::.
-
-
-File: as.info, Node: Irpc, Next: Lcomm, Prev: Irp, Up: Pseudo Ops
-
-7.57 `.irpc SYMBOL,VALUES'...
-=============================
-
-Evaluate a sequence of statements assigning different values to SYMBOL.
-The sequence of statements starts at the `.irpc' directive, and is
-terminated by an `.endr' directive. For each character in VALUE,
-SYMBOL is set to the character, and the sequence of statements is
-assembled. If no VALUE is listed, the sequence of statements is
-assembled once, with SYMBOL set to the null string. To refer to SYMBOL
-within the sequence of statements, use \SYMBOL.
-
- For example, assembling
-
- .irpc param,123
- move d\param,sp@-
- .endr
-
- is equivalent to assembling
-
- move d1,sp@-
- move d2,sp@-
- move d3,sp@-
-
- For some caveats with the spelling of SYMBOL, see also the discussion
-at *Note Macro::.
-
-
-File: as.info, Node: Lcomm, Next: Lflags, Prev: Irpc, Up: Pseudo Ops
-
-7.58 `.lcomm SYMBOL , LENGTH'
-=============================
-
-Reserve LENGTH (an absolute expression) bytes for a local common
-denoted by SYMBOL. The section and value of SYMBOL are those of the
-new local common. The addresses are allocated in the bss section, so
-that at run-time the bytes start off zeroed. SYMBOL is not declared
-global (*note `.global': Global.), so is normally not visible to `ld'.
-
- Some targets permit a third argument to be used with `.lcomm'. This
-argument specifies the desired alignment of the symbol in the bss
-section.
-
- The syntax for `.lcomm' differs slightly on the HPPA. The syntax is
-`SYMBOL .lcomm, LENGTH'; SYMBOL is optional.
-
-
-File: as.info, Node: Lflags, Next: Line, Prev: Lcomm, Up: Pseudo Ops
-
-7.59 `.lflags'
-==============
-
-`as' accepts this directive, for compatibility with other assemblers,
-but ignores it.
-
-
-File: as.info, Node: Line, Next: Linkonce, Prev: Lflags, Up: Pseudo Ops
-
-7.60 `.line LINE-NUMBER'
-========================
-
- Change the logical line number. LINE-NUMBER must be an absolute
-expression. The next line has that logical line number. Therefore any
-other statements on the current line (after a statement separator
-character) are reported as on logical line number LINE-NUMBER - 1. One
-day `as' will no longer support this directive: it is recognized only
-for compatibility with existing assembler programs.
-
- Even though this is a directive associated with the `a.out' or
-`b.out' object-code formats, `as' still recognizes it when producing
-COFF output, and treats `.line' as though it were the COFF `.ln' _if_
-it is found outside a `.def'/`.endef' pair.
-
- Inside a `.def', `.line' is, instead, one of the directives used by
-compilers to generate auxiliary symbol information for debugging.
-
-
-File: as.info, Node: Linkonce, Next: List, Prev: Line, Up: Pseudo Ops
-
-7.61 `.linkonce [TYPE]'
-=======================
-
-Mark the current section so that the linker only includes a single copy
-of it. This may be used to include the same section in several
-different object files, but ensure that the linker will only include it
-once in the final output file. The `.linkonce' pseudo-op must be used
-for each instance of the section. Duplicate sections are detected
-based on the section name, so it should be unique.
-
- This directive is only supported by a few object file formats; as of
-this writing, the only object file format which supports it is the
-Portable Executable format used on Windows NT.
-
- The TYPE argument is optional. If specified, it must be one of the
-following strings. For example:
- .linkonce same_size
- Not all types may be supported on all object file formats.
-
-`discard'
- Silently discard duplicate sections. This is the default.
-
-`one_only'
- Warn if there are duplicate sections, but still keep only one copy.
-
-`same_size'
- Warn if any of the duplicates have different sizes.
-
-`same_contents'
- Warn if any of the duplicates do not have exactly the same
- contents.
-
-
-File: as.info, Node: Ln, Next: LNS directives, Prev: List, Up: Pseudo Ops
-
-7.62 `.ln LINE-NUMBER'
-======================
-
-`.ln' is a synonym for `.line'.
-
-
-File: as.info, Node: MRI, Next: Noaltmacro, Prev: Macro, Up: Pseudo Ops
-
-7.63 `.mri VAL'
-===============
-
-If VAL is non-zero, this tells `as' to enter MRI mode. If VAL is zero,
-this tells `as' to exit MRI mode. This change affects code assembled
-until the next `.mri' directive, or until the end of the file. *Note
-MRI mode: M.
-
-
-File: as.info, Node: List, Next: Ln, Prev: Linkonce, Up: Pseudo Ops
-
-7.64 `.list'
-============
-
-Control (in conjunction with the `.nolist' directive) whether or not
-assembly listings are generated. These two directives maintain an
-internal counter (which is zero initially). `.list' increments the
-counter, and `.nolist' decrements it. Assembly listings are generated
-whenever the counter is greater than zero.
-
- By default, listings are disabled. When you enable them (with the
-`-a' command line option; *note Command-Line Options: Invoking.), the
-initial value of the listing counter is one.
-
-
-File: as.info, Node: Long, Next: Macro, Prev: LNS directives, Up: Pseudo Ops
-
-7.65 `.long EXPRESSIONS'
-========================
-
-`.long' is the same as `.int', *note `.int': Int.
-
-
-File: as.info, Node: Macro, Next: MRI, Prev: Long, Up: Pseudo Ops
-
-7.66 `.macro'
-=============
-
-The commands `.macro' and `.endm' allow you to define macros that
-generate assembly output. For example, this definition specifies a
-macro `sum' that puts a sequence of numbers into memory:
-
- .macro sum from=0, to=5
- .long \from
- .if \to-\from
- sum "(\from+1)",\to
- .endif
- .endm
-
-With that definition, `SUM 0,5' is equivalent to this assembly input:
-
- .long 0
- .long 1
- .long 2
- .long 3
- .long 4
- .long 5
-
-`.macro MACNAME'
-`.macro MACNAME MACARGS ...'
- Begin the definition of a macro called MACNAME. If your macro
- definition requires arguments, specify their names after the macro
- name, separated by commas or spaces. You can qualify the macro
- argument to indicate whether all invocations must specify a
- non-blank value (through `:`req''), or whether it takes all of the
- remaining arguments (through `:`vararg''). You can supply a
- default value for any macro argument by following the name with
- `=DEFLT'. You cannot define two macros with the same MACNAME
- unless it has been subject to the `.purgem' directive (*Note
- Purgem::.) between the two definitions. For example, these are
- all valid `.macro' statements:
-
- `.macro comm'
- Begin the definition of a macro called `comm', which takes no
- arguments.
-
- `.macro plus1 p, p1'
- `.macro plus1 p p1'
- Either statement begins the definition of a macro called
- `plus1', which takes two arguments; within the macro
- definition, write `\p' or `\p1' to evaluate the arguments.
-
- `.macro reserve_str p1=0 p2'
- Begin the definition of a macro called `reserve_str', with two
- arguments. The first argument has a default value, but not
- the second. After the definition is complete, you can call
- the macro either as `reserve_str A,B' (with `\p1' evaluating
- to A and `\p2' evaluating to B), or as `reserve_str ,B' (with
- `\p1' evaluating as the default, in this case `0', and `\p2'
- evaluating to B).
-
-`.macro m p1:req, p2=0, p3:vararg'
- Begin the definition of a macro called `m', with at least three
- arguments. The first argument must always have a value specified,
- but not the second, which instead has a default value. The third
- formal will get assigned all remaining arguments specified at
- invocation time.
-
- When you call a macro, you can specify the argument values either
- by position, or by keyword. For example, `sum 9,17' is equivalent
- to `sum to=17, from=9'.
-
- Note that since each of the MACARGS can be an identifier exactly
- as any other one permitted by the target architecture, there may be
- occasional problems if the target hand-crafts special meanings to
- certain characters when they occur in a special position. For
- example, if colon (`:') is generally permitted to be part of a
- symbol name, but the architecture specific code special-cases it
- when occuring as the final character of a symbol (to denote a
- label), then the macro parameter replacement code will have no way
- of knowing that and consider the whole construct (including the
- colon) an identifier, and check only this identifier for being the
- subject to parameter substitution. In this example, besides the
- potential of just separating identifier and colon by white space,
- using alternate macro syntax (*Note Altmacro::.) and ampersand
- (`&') as the character to separate literal text from macro
- parameters (or macro parameters from one another) would provide a
- way to achieve the same effect:
-
- .altmacro
- .macro label l
- l&:
- .endm
-
- This applies identically to the identifiers used in `.irp' (*Note
- Irp::.) and `.irpc' (*Note Irpc::.).
-
-`.endm'
- Mark the end of a macro definition.
-
-`.exitm'
- Exit early from the current macro definition.
-
-`\@'
- `as' maintains a counter of how many macros it has executed in
- this pseudo-variable; you can copy that number to your output with
- `\@', but _only within a macro definition_.
-
-`LOCAL NAME [ , ... ]'
- _Warning: `LOCAL' is only available if you select "alternate macro
- syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro':
- Altmacro.
-
-
-File: as.info, Node: Altmacro, Next: Ascii, Prev: Align, Up: Pseudo Ops
-
-7.67 `.altmacro'
-================
-
-Enable alternate macro mode, enabling:
-
-`LOCAL NAME [ , ... ]'
- One additional directive, `LOCAL', is available. It is used to
- generate a string replacement for each of the NAME arguments, and
- replace any instances of NAME in each macro expansion. The
- replacement string is unique in the assembly, and different for
- each separate macro expansion. `LOCAL' allows you to write macros
- that define symbols, without fear of conflict between separate
- macro expansions.
-
-`String delimiters'
- You can write strings delimited in these other ways besides
- `"STRING"':
-
- `'STRING''
- You can delimit strings with single-quote charaters.
-
- `<STRING>'
- You can delimit strings with matching angle brackets.
-
-`single-character string escape'
- To include any single character literally in a string (even if the
- character would otherwise have some special meaning), you can
- prefix the character with `!' (an exclamation mark). For example,
- you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 >
- 5.4!'.
-
-`Expression results as strings'
- You can write `%EXPR' to evaluate the expression EXPR and use the
- result as a string.
-
-
-File: as.info, Node: Noaltmacro, Next: Nolist, Prev: MRI, Up: Pseudo Ops
-
-7.68 `.noaltmacro'
-==================
-
-Disable alternate macro mode. *Note Altmacro::
-
-
-File: as.info, Node: Nolist, Next: Octa, Prev: Noaltmacro, Up: Pseudo Ops
-
-7.69 `.nolist'
-==============
-
-Control (in conjunction with the `.list' directive) whether or not
-assembly listings are generated. These two directives maintain an
-internal counter (which is zero initially). `.list' increments the
-counter, and `.nolist' decrements it. Assembly listings are generated
-whenever the counter is greater than zero.
-
-
-File: as.info, Node: Octa, Next: Org, Prev: Nolist, Up: Pseudo Ops
-
-7.70 `.octa BIGNUMS'
-====================
-
-This directive expects zero or more bignums, separated by commas. For
-each bignum, it emits a 16-byte integer.
-
- The term "octa" comes from contexts in which a "word" is two bytes;
-hence _octa_-word for 16 bytes.
-
-
-File: as.info, Node: Org, Next: P2align, Prev: Octa, Up: Pseudo Ops
-
-7.71 `.org NEW-LC , FILL'
-=========================
-
-Advance the location counter of the current section to NEW-LC. NEW-LC
-is either an absolute expression or an expression with the same section
-as the current subsection. That is, you can't use `.org' to cross
-sections: if NEW-LC has the wrong section, the `.org' directive is
-ignored. To be compatible with former assemblers, if the section of
-NEW-LC is absolute, `as' issues a warning, then pretends the section of
-NEW-LC is the same as the current subsection.
-
- `.org' may only increase the location counter, or leave it
-unchanged; you cannot use `.org' to move the location counter backwards.
-
- Because `as' tries to assemble programs in one pass, NEW-LC may not
-be undefined. If you really detest this restriction we eagerly await a
-chance to share your improved assembler.
-
- Beware that the origin is relative to the start of the section, not
-to the start of the subsection. This is compatible with other people's
-assemblers.
-
- When the location counter (of the current subsection) is advanced,
-the intervening bytes are filled with FILL which should be an absolute
-expression. If the comma and FILL are omitted, FILL defaults to zero.
-
-
-File: as.info, Node: P2align, Next: PopSection, Prev: Org, Up: Pseudo Ops
-
-7.72 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
-================================================
-
-Pad the location counter (in the current subsection) to a particular
-storage boundary. The first expression (which must be absolute) is the
-number of low-order zero bits the location counter must have after
-advancement. For example `.p2align 3' advances the location counter
-until it a multiple of 8. If the location counter is already a
-multiple of 8, no change is needed.
-
- The second expression (also absolute) gives the fill value to be
-stored in the padding bytes. It (and the comma) may be omitted. If it
-is omitted, the padding bytes are normally zero. However, on some
-systems, if the section is marked as containing code and the fill value
-is omitted, the space is filled with no-op instructions.
-
- The third expression is also absolute, and is also optional. If it
-is present, it is the maximum number of bytes that should be skipped by
-this alignment directive. If doing the alignment would require
-skipping more bytes than the specified maximum, then the alignment is
-not done at all. You can omit the fill value (the second argument)
-entirely by simply using two commas after the required alignment; this
-can be useful if you want the alignment to be filled with no-op
-instructions when appropriate.
-
- The `.p2alignw' and `.p2alignl' directives are variants of the
-`.p2align' directive. The `.p2alignw' directive treats the fill
-pattern as a two byte word value. The `.p2alignl' directives treats the
-fill pattern as a four byte longword value. For example, `.p2alignw
-2,0x368d' will align to a multiple of 4. If it skips two bytes, they
-will be filled in with the value 0x368d (the exact placement of the
-bytes depends upon the endianness of the processor). If it skips 1 or
-3 bytes, the fill value is undefined.
-
-
-File: as.info, Node: Previous, Next: Print, Prev: PopSection, Up: Pseudo Ops
-
-7.73 `.previous'
-================
-
-This is one of the ELF section stack manipulation directives. The
-others are `.section' (*note Section::), `.subsection' (*note
-SubSection::), `.pushsection' (*note PushSection::), and `.popsection'
-(*note PopSection::).
-
- This directive swaps the current section (and subsection) with most
-recently referenced section (and subsection) prior to this one.
-Multiple `.previous' directives in a row will flip between two sections
-(and their subsections).
-
- In terms of the section stack, this directive swaps the current
-section with the top section on the section stack.
-
-
-File: as.info, Node: PopSection, Next: Previous, Prev: P2align, Up: Pseudo Ops
-
-7.74 `.popsection'
-==================
-
-This is one of the ELF section stack manipulation directives. The
-others are `.section' (*note Section::), `.subsection' (*note
-SubSection::), `.pushsection' (*note PushSection::), and `.previous'
-(*note Previous::).
-
- This directive replaces the current section (and subsection) with
-the top section (and subsection) on the section stack. This section is
-popped off the stack.
-
-
-File: as.info, Node: Print, Next: Protected, Prev: Previous, Up: Pseudo Ops
-
-7.75 `.print STRING'
-====================
-
-`as' will print STRING on the standard output during assembly. You
-must put STRING in double quotes.
-
-
-File: as.info, Node: Protected, Next: Psize, Prev: Print, Up: Pseudo Ops
-
-7.76 `.protected NAMES'
-=======================
-
-This is one of the ELF visibility directives. The other two are
-`.hidden' (*note Hidden::) and `.internal' (*note Internal::).
-
- This directive overrides the named symbols default visibility (which
-is set by their binding: local, global or weak). The directive sets
-the visibility to `protected' which means that any references to the
-symbols from within the components that defines them must be resolved
-to the definition in that component, even if a definition in another
-component would normally preempt this.
-
-
-File: as.info, Node: Psize, Next: Purgem, Prev: Protected, Up: Pseudo Ops
-
-7.77 `.psize LINES , COLUMNS'
-=============================
-
-Use this directive to declare the number of lines--and, optionally, the
-number of columns--to use for each page, when generating listings.
-
- If you do not use `.psize', listings use a default line-count of 60.
-You may omit the comma and COLUMNS specification; the default width is
-200 columns.
-
- `as' generates formfeeds whenever the specified number of lines is
-exceeded (or whenever you explicitly request one, using `.eject').
-
- If you specify LINES as `0', no formfeeds are generated save those
-explicitly specified with `.eject'.
-
-
-File: as.info, Node: Purgem, Next: PushSection, Prev: Psize, Up: Pseudo Ops
-
-7.78 `.purgem NAME'
-===================
-
-Undefine the macro NAME, so that later uses of the string will not be
-expanded. *Note Macro::.
-
-
-File: as.info, Node: PushSection, Next: Quad, Prev: Purgem, Up: Pseudo Ops
-
-7.79 `.pushsection NAME , SUBSECTION'
-=====================================
-
-This is one of the ELF section stack manipulation directives. The
-others are `.section' (*note Section::), `.subsection' (*note
-SubSection::), `.popsection' (*note PopSection::), and `.previous'
-(*note Previous::).
-
- This directive pushes the current section (and subsection) onto the
-top of the section stack, and then replaces the current section and
-subsection with `name' and `subsection'.
-
-
-File: as.info, Node: Quad, Next: Rept, Prev: PushSection, Up: Pseudo Ops
-
-7.80 `.quad BIGNUMS'
-====================
-
-`.quad' expects zero or more bignums, separated by commas. For each
-bignum, it emits an 8-byte integer. If the bignum won't fit in 8
-bytes, it prints a warning message; and just takes the lowest order 8
-bytes of the bignum.
-
- The term "quad" comes from contexts in which a "word" is two bytes;
-hence _quad_-word for 8 bytes.
-
-
-File: as.info, Node: Rept, Next: Sbttl, Prev: Quad, Up: Pseudo Ops
-
-7.81 `.rept COUNT'
-==================
-
-Repeat the sequence of lines between the `.rept' directive and the next
-`.endr' directive COUNT times.
-
- For example, assembling
-
- .rept 3
- .long 0
- .endr
-
- is equivalent to assembling
-
- .long 0
- .long 0
- .long 0
-
-
-File: as.info, Node: Sbttl, Next: Scl, Prev: Rept, Up: Pseudo Ops
-
-7.82 `.sbttl "SUBHEADING"'
-==========================
-
-Use SUBHEADING as the title (third line, immediately after the title
-line) when generating assembly listings.
-
- This directive affects subsequent pages, as well as the current page
-if it appears within ten lines of the top of a page.
-
-
-File: as.info, Node: Scl, Next: Section, Prev: Sbttl, Up: Pseudo Ops
-
-7.83 `.scl CLASS'
-=================
-
-Set the storage-class value for a symbol. This directive may only be
-used inside a `.def'/`.endef' pair. Storage class may flag whether a
-symbol is static or external, or it may record further symbolic
-debugging information.
-
-
-File: as.info, Node: Section, Next: Set, Prev: Scl, Up: Pseudo Ops
-
-7.84 `.section NAME'
-====================
-
-Use the `.section' directive to assemble the following code into a
-section named NAME.
-
- This directive is only supported for targets that actually support
-arbitrarily named sections; on `a.out' targets, for example, it is not
-accepted, even with a standard `a.out' section name.
-
-COFF Version
-------------
-
- For COFF targets, the `.section' directive is used in one of the
-following ways:
-
- .section NAME[, "FLAGS"]
- .section NAME[, SUBSEGMENT]
-
- If the optional argument is quoted, it is taken as flags to use for
-the section. Each flag is a single character. The following flags are
-recognized:
-`b'
- bss section (uninitialized data)
-
-`n'
- section is not loaded
-
-`w'
- writable section
-
-`d'
- data section
-
-`r'
- read-only section
-
-`x'
- executable section
-
-`s'
- shared section (meaningful for PE targets)
-
-`a'
- ignored. (For compatibility with the ELF version)
-
- If no flags are specified, the default flags depend upon the section
-name. If the section name is not recognized, the default will be for
-the section to be loaded and writable. Note the `n' and `w' flags
-remove attributes from the section, rather than adding them, so if they
-are used on their own it will be as if no flags had been specified at
-all.
-
- If the optional argument to the `.section' directive is not quoted,
-it is taken as a subsegment number (*note Sub-Sections::).
-
-ELF Version
------------
-
- This is one of the ELF section stack manipulation directives. The
-others are `.subsection' (*note SubSection::), `.pushsection' (*note
-PushSection::), `.popsection' (*note PopSection::), and `.previous'
-(*note Previous::).
-
- For ELF targets, the `.section' directive is used like this:
-
- .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]]
-
- The optional FLAGS argument is a quoted string which may contain any
-combination of the following characters:
-`a'
- section is allocatable
-
-`w'
- section is writable
-
-`x'
- section is executable
-
-`M'
- section is mergeable
-
-`S'
- section contains zero terminated strings
-
-`G'
- section is a member of a section group
-
-`T'
- section is used for thread-local-storage
-
- The optional TYPE argument may contain one of the following
-constants:
-`@progbits'
- section contains data
-
-`@nobits'
- section does not contain data (i.e., section only occupies space)
-
-`@note'
- section contains data which is used by things other than the
- program
-
-`@init_array'
- section contains an array of pointers to init functions
-
-`@fini_array'
- section contains an array of pointers to finish functions
-
-`@preinit_array'
- section contains an array of pointers to pre-init functions
-
- Many targets only support the first three section types.
-
- Note on targets where the `@' character is the start of a comment (eg
-ARM) then another character is used instead. For example the ARM port
-uses the `%' character.
-
- If FLAGS contains the `M' symbol then the TYPE argument must be
-specified as well as an extra argument - ENTSIZE - like this:
-
- .section NAME , "FLAGS"M, @TYPE, ENTSIZE
-
- Sections with the `M' flag but not `S' flag must contain fixed size
-constants, each ENTSIZE octets long. Sections with both `M' and `S'
-must contain zero terminated strings where each character is ENTSIZE
-bytes long. The linker may remove duplicates within sections with the
-same name, same entity size and same flags. ENTSIZE must be an
-absolute expression.
-
- If FLAGS contains the `G' symbol then the TYPE argument must be
-present along with an additional field like this:
-
- .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE]
-
- The GROUPNAME field specifies the name of the section group to which
-this particular section belongs. The optional linkage field can
-contain:
-`comdat'
- indicates that only one copy of this section should be retained
-
-`.gnu.linkonce'
- an alias for comdat
-
- Note - if both the M and G flags are present then the fields for the
-Merge flag should come first, like this:
-
- .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE]
-
- If no flags are specified, the default flags depend upon the section
-name. If the section name is not recognized, the default will be for
-the section to have none of the above flags: it will not be allocated
-in memory, nor writable, nor executable. The section will contain data.
-
- For ELF targets, the assembler supports another type of `.section'
-directive for compatibility with the Solaris assembler:
-
- .section "NAME"[, FLAGS...]
-
- Note that the section name is quoted. There may be a sequence of
-comma separated flags:
-`#alloc'
- section is allocatable
-
-`#write'
- section is writable
-
-`#execinstr'
- section is executable
-
-`#tls'
- section is used for thread local storage
-
- This directive replaces the current section and subsection. See the
-contents of the gas testsuite directory `gas/testsuite/gas/elf' for
-some examples of how this directive and the other section stack
-directives work.
-
-
-File: as.info, Node: Set, Next: Short, Prev: Section, Up: Pseudo Ops
-
-7.85 `.set SYMBOL, EXPRESSION'
-==============================
-
-Set the value of SYMBOL to EXPRESSION. This changes SYMBOL's value and
-type to conform to EXPRESSION. If SYMBOL was flagged as external, it
-remains flagged (*note Symbol Attributes::).
-
- You may `.set' a symbol many times in the same assembly.
-
- If you `.set' a global symbol, the value stored in the object file
-is the last value stored into it.
-
- The syntax for `set' on the HPPA is `SYMBOL .set EXPRESSION'.
-
- On Z80 `set' is a real instruction, use `SYMBOL defl EXPRESSION'
-instead.
-
-
-File: as.info, Node: Short, Next: Single, Prev: Set, Up: Pseudo Ops
-
-7.86 `.short EXPRESSIONS'
-=========================
-
-`.short' is normally the same as `.word'. *Note `.word': Word.
-
- In some configurations, however, `.short' and `.word' generate
-numbers of different lengths; *note Machine Dependencies::.
-
-
-File: as.info, Node: Single, Next: Size, Prev: Short, Up: Pseudo Ops
-
-7.87 `.single FLONUMS'
-======================
-
-This directive assembles zero or more flonums, separated by commas. It
-has the same effect as `.float'. The exact kind of floating point
-numbers emitted depends on how `as' is configured. *Note Machine
-Dependencies::.
-
-
-File: as.info, Node: Size, Next: Skip, Prev: Single, Up: Pseudo Ops
-
-7.88 `.size'
-============
-
-This directive is used to set the size associated with a symbol.
-
-COFF Version
-------------
-
- For COFF targets, the `.size' directive is only permitted inside
-`.def'/`.endef' pairs. It is used like this:
-
- .size EXPRESSION
-
-ELF Version
------------
-
- For ELF targets, the `.size' directive is used like this:
-
- .size NAME , EXPRESSION
-
- This directive sets the size associated with a symbol NAME. The
-size in bytes is computed from EXPRESSION which can make use of label
-arithmetic. This directive is typically used to set the size of
-function symbols.
-
-
-File: as.info, Node: Sleb128, Next: Space, Prev: Skip, Up: Pseudo Ops
-
-7.89 `.sleb128 EXPRESSIONS'
-===========================
-
-SLEB128 stands for "signed little endian base 128." This is a compact,
-variable length representation of numbers used by the DWARF symbolic
-debugging format. *Note `.uleb128': Uleb128.
-
-
-File: as.info, Node: Skip, Next: Sleb128, Prev: Size, Up: Pseudo Ops
-
-7.90 `.skip SIZE , FILL'
-========================
-
-This directive emits SIZE bytes, each of value FILL. Both SIZE and
-FILL are absolute expressions. If the comma and FILL are omitted, FILL
-is assumed to be zero. This is the same as `.space'.
-
-
-File: as.info, Node: Space, Next: Stab, Prev: Sleb128, Up: Pseudo Ops
-
-7.91 `.space SIZE , FILL'
-=========================
-
-This directive emits SIZE bytes, each of value FILL. Both SIZE and
-FILL are absolute expressions. If the comma and FILL are omitted, FILL
-is assumed to be zero. This is the same as `.skip'.
-
- _Warning:_ `.space' has a completely different meaning for HPPA
- targets; use `.block' as a substitute. See `HP9000 Series 800
- Assembly Language Reference Manual' (HP 92432-90001) for the
- meaning of the `.space' directive. *Note HPPA Assembler
- Directives: HPPA Directives, for a summary.
-
-
-File: as.info, Node: Stab, Next: String, Prev: Space, Up: Pseudo Ops
-
-7.92 `.stabd, .stabn, .stabs'
-=============================
-
-There are three directives that begin `.stab'. All emit symbols (*note
-Symbols::), for use by symbolic debuggers. The symbols are not entered
-in the `as' hash table: they cannot be referenced elsewhere in the
-source file. Up to five fields are required:
-
-STRING
- This is the symbol's name. It may contain any character except
- `\000', so is more general than ordinary symbol names. Some
- debuggers used to code arbitrarily complex structures into symbol
- names using this field.
-
-TYPE
- An absolute expression. The symbol's type is set to the low 8
- bits of this expression. Any bit pattern is permitted, but `ld'
- and debuggers choke on silly bit patterns.
-
-OTHER
- An absolute expression. The symbol's "other" attribute is set to
- the low 8 bits of this expression.
-
-DESC
- An absolute expression. The symbol's descriptor is set to the low
- 16 bits of this expression.
-
-VALUE
- An absolute expression which becomes the symbol's value.
-
- If a warning is detected while reading a `.stabd', `.stabn', or
-`.stabs' statement, the symbol has probably already been created; you
-get a half-formed symbol in your object file. This is compatible with
-earlier assemblers!
-
-`.stabd TYPE , OTHER , DESC'
- The "name" of the symbol generated is not even an empty string.
- It is a null pointer, for compatibility. Older assemblers used a
- null pointer so they didn't waste space in object files with empty
- strings.
-
- The symbol's value is set to the location counter, relocatably.
- When your program is linked, the value of this symbol is the
- address of the location counter when the `.stabd' was assembled.
-
-`.stabn TYPE , OTHER , DESC , VALUE'
- The name of the symbol is set to the empty string `""'.
-
-`.stabs STRING , TYPE , OTHER , DESC , VALUE'
- All five fields are specified.
-
-
-File: as.info, Node: String, Next: Struct, Prev: Stab, Up: Pseudo Ops
-
-7.93 `.string' "STR"
-====================
-
-Copy the characters in STR to the object file. You may specify more
-than one string to copy, separated by commas. Unless otherwise
-specified for a particular machine, the assembler marks the end of each
-string with a 0 byte. You can use any of the escape sequences
-described in *Note Strings: Strings.
-
-
-File: as.info, Node: Struct, Next: SubSection, Prev: String, Up: Pseudo Ops
-
-7.94 `.struct EXPRESSION'
-=========================
-
-Switch to the absolute section, and set the section offset to
-EXPRESSION, which must be an absolute expression. You might use this
-as follows:
- .struct 0
- field1:
- .struct field1 + 4
- field2:
- .struct field2 + 4
- field3:
- This would define the symbol `field1' to have the value 0, the symbol
-`field2' to have the value 4, and the symbol `field3' to have the value
-8. Assembly would be left in the absolute section, and you would need
-to use a `.section' directive of some sort to change to some other
-section before further assembly.
-
-
-File: as.info, Node: SubSection, Next: Symver, Prev: Struct, Up: Pseudo Ops
-
-7.95 `.subsection NAME'
-=======================
-
-This is one of the ELF section stack manipulation directives. The
-others are `.section' (*note Section::), `.pushsection' (*note
-PushSection::), `.popsection' (*note PopSection::), and `.previous'
-(*note Previous::).
-
- This directive replaces the current subsection with `name'. The
-current section is not changed. The replaced subsection is put onto
-the section stack in place of the then current top of stack subsection.
-
-
-File: as.info, Node: Symver, Next: Tag, Prev: SubSection, Up: Pseudo Ops
-
-7.96 `.symver'
-==============
-
-Use the `.symver' directive to bind symbols to specific version nodes
-within a source file. This is only supported on ELF platforms, and is
-typically used when assembling files to be linked into a shared library.
-There are cases where it may make sense to use this in objects to be
-bound into an application itself so as to override a versioned symbol
-from a shared library.
-
- For ELF targets, the `.symver' directive can be used like this:
- .symver NAME, NAME2@NODENAME
- If the symbol NAME is defined within the file being assembled, the
-`.symver' directive effectively creates a symbol alias with the name
-NAME2@NODENAME, and in fact the main reason that we just don't try and
-create a regular alias is that the @ character isn't permitted in
-symbol names. The NAME2 part of the name is the actual name of the
-symbol by which it will be externally referenced. The name NAME itself
-is merely a name of convenience that is used so that it is possible to
-have definitions for multiple versions of a function within a single
-source file, and so that the compiler can unambiguously know which
-version of a function is being mentioned. The NODENAME portion of the
-alias should be the name of a node specified in the version script
-supplied to the linker when building a shared library. If you are
-attempting to override a versioned symbol from a shared library, then
-NODENAME should correspond to the nodename of the symbol you are trying
-to override.
-
- If the symbol NAME is not defined within the file being assembled,
-all references to NAME will be changed to NAME2@NODENAME. If no
-reference to NAME is made, NAME2@NODENAME will be removed from the
-symbol table.
-
- Another usage of the `.symver' directive is:
- .symver NAME, NAME2@@NODENAME
- In this case, the symbol NAME must exist and be defined within the
-file being assembled. It is similar to NAME2@NODENAME. The difference
-is NAME2@@NODENAME will also be used to resolve references to NAME2 by
-the linker.
-
- The third usage of the `.symver' directive is:
- .symver NAME, NAME2@@@NODENAME
- When NAME is not defined within the file being assembled, it is
-treated as NAME2@NODENAME. When NAME is defined within the file being
-assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME.
-
-
-File: as.info, Node: Tag, Next: Text, Prev: Symver, Up: Pseudo Ops
-
-7.97 `.tag STRUCTNAME'
-======================
-
-This directive is generated by compilers to include auxiliary debugging
-information in the symbol table. It is only permitted inside
-`.def'/`.endef' pairs. Tags are used to link structure definitions in
-the symbol table with instances of those structures.
-
-
-File: as.info, Node: Text, Next: Title, Prev: Tag, Up: Pseudo Ops
-
-7.98 `.text SUBSECTION'
-=======================
-
-Tells `as' to assemble the following statements onto the end of the
-text subsection numbered SUBSECTION, which is an absolute expression.
-If SUBSECTION is omitted, subsection number zero is used.
-
-
-File: as.info, Node: Title, Next: Type, Prev: Text, Up: Pseudo Ops
-
-7.99 `.title "HEADING"'
-=======================
-
-Use HEADING as the title (second line, immediately after the source
-file name and pagenumber) when generating assembly listings.
-
- This directive affects subsequent pages, as well as the current page
-if it appears within ten lines of the top of a page.
-
-
-File: as.info, Node: Type, Next: Uleb128, Prev: Title, Up: Pseudo Ops
-
-7.100 `.type'
-=============
-
-This directive is used to set the type of a symbol.
-
-COFF Version
-------------
-
- For COFF targets, this directive is permitted only within
-`.def'/`.endef' pairs. It is used like this:
-
- .type INT
-
- This records the integer INT as the type attribute of a symbol table
-entry.
-
-ELF Version
------------
-
- For ELF targets, the `.type' directive is used like this:
-
- .type NAME , TYPE DESCRIPTION
-
- This sets the type of symbol NAME to be either a function symbol or
-an object symbol. There are five different syntaxes supported for the
-TYPE DESCRIPTION field, in order to provide compatibility with various
-other assemblers. The syntaxes supported are:
-
- .type <name>,#function
- .type <name>,#object
-
- .type <name>,@function
- .type <name>,@object
-
- .type <name>,%function
- .type <name>,%object
-
- .type <name>,"function"
- .type <name>,"object"
-
- .type <name> STT_FUNCTION
- .type <name> STT_OBJECT
-
-
-File: as.info, Node: Uleb128, Next: Val, Prev: Type, Up: Pseudo Ops
-
-7.101 `.uleb128 EXPRESSIONS'
-============================
-
-ULEB128 stands for "unsigned little endian base 128." This is a
-compact, variable length representation of numbers used by the DWARF
-symbolic debugging format. *Note `.sleb128': Sleb128.
-
-
-File: as.info, Node: Val, Next: Version, Prev: Uleb128, Up: Pseudo Ops
-
-7.102 `.val ADDR'
-=================
-
-This directive, permitted only within `.def'/`.endef' pairs, records
-the address ADDR as the value attribute of a symbol table entry.
-
-
-File: as.info, Node: Version, Next: VTableEntry, Prev: Val, Up: Pseudo Ops
-
-7.103 `.version "STRING"'
-=========================
-
-This directive creates a `.note' section and places into it an ELF
-formatted note of type NT_VERSION. The note's name is set to `string'.
-
-
-File: as.info, Node: VTableEntry, Next: VTableInherit, Prev: Version, Up: Pseudo Ops
-
-7.104 `.vtable_entry TABLE, OFFSET'
-===================================
-
-This directive finds or creates a symbol `table' and creates a
-`VTABLE_ENTRY' relocation for it with an addend of `offset'.
-
-
-File: as.info, Node: VTableInherit, Next: Warning, Prev: VTableEntry, Up: Pseudo Ops
-
-7.105 `.vtable_inherit CHILD, PARENT'
-=====================================
-
-This directive finds the symbol `child' and finds or creates the symbol
-`parent' and then creates a `VTABLE_INHERIT' relocation for the parent
-whose addend is the value of the child symbol. As a special case the
-parent name of `0' is treated as refering the `*ABS*' section.
-
-
-File: as.info, Node: Warning, Next: Weak, Prev: VTableInherit, Up: Pseudo Ops
-
-7.106 `.warning "STRING"'
-=========================
-
-Similar to the directive `.error' (*note `.error "STRING"': Error.),
-but just emits a warning.
-
-
-File: as.info, Node: Weak, Next: Weakref, Prev: Warning, Up: Pseudo Ops
-
-7.107 `.weak NAMES'
-===================
-
-This directive sets the weak attribute on the comma separated list of
-symbol `names'. If the symbols do not already exist, they will be
-created.
-
- On COFF targets other than PE, weak symbols are a GNU extension.
-This directive sets the weak attribute on the comma separated list of
-symbol `names'. If the symbols do not already exist, they will be
-created.
-
- On the PE target, weak symbols are supported natively as weak
-aliases. When a weak symbol is created that is not an alias, GAS
-creates an alternate symbol to hold the default value.
-
-
-File: as.info, Node: Weakref, Next: Word, Prev: Weak, Up: Pseudo Ops
-
-7.108 `.weakref ALIAS, TARGET'
-==============================
-
-This directive creates an alias to the target symbol that enables the
-symbol to be referenced with weak-symbol semantics, but without
-actually making it weak. If direct references or definitions of the
-symbol are present, then the symbol will not be weak, but if all
-references to it are through weak references, the symbol will be marked
-as weak in the symbol table.
-
- The effect is equivalent to moving all references to the alias to a
-separate assembly source file, renaming the alias to the symbol in it,
-declaring the symbol as weak there, and running a reloadable link to
-merge the object files resulting from the assembly of the new source
-file and the old source file that had the references to the alias
-removed.
-
- The alias itself never makes to the symbol table, and is entirely
-handled within the assembler.
-
-
-File: as.info, Node: Word, Next: Deprecated, Prev: Weakref, Up: Pseudo Ops
-
-7.109 `.word EXPRESSIONS'
-=========================
-
-This directive expects zero or more EXPRESSIONS, of any section,
-separated by commas.
-
- The size of the number emitted, and its byte order, depend on what
-target computer the assembly is for.
-
- _Warning: Special Treatment to support Compilers_
-
- Machines with a 32-bit address space, but that do less than 32-bit
-addressing, require the following special treatment. If the machine of
-interest to you does 32-bit addressing (or doesn't require it; *note
-Machine Dependencies::), you can ignore this issue.
-
- In order to assemble compiler output into something that works, `as'
-occasionally does strange things to `.word' directives. Directives of
-the form `.word sym1-sym2' are often emitted by compilers as part of
-jump tables. Therefore, when `as' assembles a directive of the form
-`.word sym1-sym2', and the difference between `sym1' and `sym2' does
-not fit in 16 bits, `as' creates a "secondary jump table", immediately
-before the next label. This secondary jump table is preceded by a
-short-jump to the first byte after the secondary table. This
-short-jump prevents the flow of control from accidentally falling into
-the new table. Inside the table is a long-jump to `sym2'. The
-original `.word' contains `sym1' minus the address of the long-jump to
-`sym2'.
-
- If there were several occurrences of `.word sym1-sym2' before the
-secondary jump table, all of them are adjusted. If there was a `.word
-sym3-sym4', that also did not fit in sixteen bits, a long-jump to
-`sym4' is included in the secondary jump table, and the `.word'
-directives are adjusted to contain `sym3' minus the address of the
-long-jump to `sym4'; and so on, for as many entries in the original
-jump table as necessary.
-
-
-File: as.info, Node: Deprecated, Prev: Word, Up: Pseudo Ops
-
-7.110 Deprecated Directives
-===========================
-
-One day these directives won't work. They are included for
-compatibility with older assemblers.
-.abort
-
-.line
-
-
-File: as.info, Node: Machine Dependencies, Next: Reporting Bugs, Prev: Pseudo Ops, Up: Top
-
-8 Machine Dependent Features
-****************************
-
-The machine instruction sets are (almost by definition) different on
-each machine where `as' runs. Floating point representations vary as
-well, and `as' often supports a few additional directives or
-command-line options for compatibility with other assemblers on a
-particular platform. Finally, some versions of `as' support special
-pseudo-instructions for branch optimization.
-
- This chapter discusses most of these differences, though it does not
-include details on any machine's instruction set. For details on that
-subject, see the hardware manufacturer's manual.
-
-* Menu:
-
-
-* Alpha-Dependent:: Alpha Dependent Features
-
-* ARC-Dependent:: ARC Dependent Features
-
-* ARM-Dependent:: ARM Dependent Features
-
-* BFIN-Dependent:: BFIN Dependent Features
-
-* CRIS-Dependent:: CRIS Dependent Features
-
-* D10V-Dependent:: D10V Dependent Features
-
-* D30V-Dependent:: D30V Dependent Features
-
-* H8/300-Dependent:: Renesas H8/300 Dependent Features
-
-* HPPA-Dependent:: HPPA Dependent Features
-
-* ESA/390-Dependent:: IBM ESA/390 Dependent Features
-
-* i386-Dependent:: Intel 80386 and AMD x86-64 Dependent Features
-
-* i860-Dependent:: Intel 80860 Dependent Features
-
-* i960-Dependent:: Intel 80960 Dependent Features
-
-* IA-64-Dependent:: Intel IA-64 Dependent Features
-
-* IP2K-Dependent:: IP2K Dependent Features
-
-* M32C-Dependent:: M32C Dependent Features
-
-* M32R-Dependent:: M32R Dependent Features
-
-* M68K-Dependent:: M680x0 Dependent Features
-
-* M68HC11-Dependent:: M68HC11 and 68HC12 Dependent Features
-
-* MIPS-Dependent:: MIPS Dependent Features
-
-* MMIX-Dependent:: MMIX Dependent Features
-
-* MSP430-Dependent:: MSP430 Dependent Features
-
-* SH-Dependent:: Renesas / SuperH SH Dependent Features
-* SH64-Dependent:: SuperH SH64 Dependent Features
-
-* PDP-11-Dependent:: PDP-11 Dependent Features
-
-* PJ-Dependent:: picoJava Dependent Features
-
-* PPC-Dependent:: PowerPC Dependent Features
-
-* Sparc-Dependent:: SPARC Dependent Features
-
-* TIC54X-Dependent:: TI TMS320C54x Dependent Features
-
-* V850-Dependent:: V850 Dependent Features
-
-* Xtensa-Dependent:: Xtensa Dependent Features
-
-* Z80-Dependent:: Z80 Dependent Features
-
-* Z8000-Dependent:: Z8000 Dependent Features
-
-* Vax-Dependent:: VAX Dependent Features
-
-
-File: as.info, Node: Alpha-Dependent, Next: ARC-Dependent, Up: Machine Dependencies
-
-8.1 Alpha Dependent Features
-============================
-
-* Menu:
-
-* Alpha Notes:: Notes
-* Alpha Options:: Options
-* Alpha Syntax:: Syntax
-* Alpha Floating Point:: Floating Point
-* Alpha Directives:: Alpha Machine Directives
-* Alpha Opcodes:: Opcodes
-
-
-File: as.info, Node: Alpha Notes, Next: Alpha Options, Up: Alpha-Dependent
-
-8.1.1 Notes
------------
-
-The documentation here is primarily for the ELF object format. `as'
-also supports the ECOFF and EVAX formats, but features specific to
-these formats are not yet documented.
-
-
-File: as.info, Node: Alpha Options, Next: Alpha Syntax, Prev: Alpha Notes, Up: Alpha-Dependent
-
-8.1.2 Options
--------------
-
-`-mCPU'
- This option specifies the target processor. If an attempt is made
- to assemble an instruction which will not execute on the target
- processor, the assembler may either expand the instruction as a
- macro or issue an error message. This option is equivalent to the
- `.arch' directive.
-
- The following processor names are recognized: `21064', `21064a',
- `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a',
- `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6',
- `ev67', `ev68'. The special name `all' may be used to allow the
- assembler to accept instructions valid for any Alpha processor.
-
- In order to support existing practice in OSF/1 with respect to
- `.arch', and existing practice within `MILO' (the Linux ARC
- bootloader), the numbered processor names (e.g. 21064) enable the
- processor-specific PALcode instructions, while the
- "electro-vlasic" names (e.g. `ev4') do not.
-
-`-mdebug'
-`-no-mdebug'
- Enables or disables the generation of `.mdebug' encapsulation for
- stabs directives and procedure descriptors. The default is to
- automatically enable `.mdebug' when the first stabs directive is
- seen.
-
-`-relax'
- This option forces all relocations to be put into the object file,
- instead of saving space and resolving some relocations at assembly
- time. Note that this option does not propagate all symbol
- arithmetic into the object file, because not all symbol arithmetic
- can be represented. However, the option can still be useful in
- specific applications.
-
-`-g'
- This option is used when the compiler generates debug information.
- When `gcc' is using `mips-tfile' to generate debug information
- for ECOFF, local labels must be passed through to the object file.
- Otherwise this option has no effect.
-
-`-GSIZE'
- A local common symbol larger than SIZE is placed in `.bss', while
- smaller symbols are placed in `.sbss'.
-
-`-F'
-`-32addr'
- These options are ignored for backward compatibility.
-
-
-File: as.info, Node: Alpha Syntax, Next: Alpha Floating Point, Prev: Alpha Options, Up: Alpha-Dependent
-
-8.1.3 Syntax
-------------
-
-The assembler syntax closely follow the Alpha Reference Manual;
-assembler directives and general syntax closely follow the OSF/1 and
-OpenVMS syntax, with a few differences for ELF.
-
-* Menu:
-
-* Alpha-Chars:: Special Characters
-* Alpha-Regs:: Register Names
-* Alpha-Relocs:: Relocations
-
-
-File: as.info, Node: Alpha-Chars, Next: Alpha-Regs, Up: Alpha Syntax
-
-8.1.3.1 Special Characters
-..........................
-
-`#' is the line comment character.
-
- `;' can be used instead of a newline to separate statements.
-
-
-File: as.info, Node: Alpha-Regs, Next: Alpha-Relocs, Prev: Alpha-Chars, Up: Alpha Syntax
-
-8.1.3.2 Register Names
-......................
-
-The 32 integer registers are referred to as `$N' or `$rN'. In
-addition, registers 15, 28, 29, and 30 may be referred to by the
-symbols `$fp', `$at', `$gp', and `$sp' respectively.
-
- The 32 floating-point registers are referred to as `$fN'.
-
-
-File: as.info, Node: Alpha-Relocs, Prev: Alpha-Regs, Up: Alpha Syntax
-
-8.1.3.3 Relocations
-...................
-
-Some of these relocations are available for ECOFF, but mostly only for
-ELF. They are modeled after the relocation format introduced in
-Digital Unix 4.0, but there are additions.
-
- The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the
-relocation. In some cases NUMBER is used to relate specific
-instructions.
-
- The relocation is placed at the end of the instruction like so:
-
- ldah $0,a($29) !gprelhigh
- lda $0,a($0) !gprellow
- ldq $1,b($29) !literal!100
- ldl $2,0($1) !lituse_base!100
-
-`!literal'
-`!literal!N'
- Used with an `ldq' instruction to load the address of a symbol
- from the GOT.
-
- A sequence number N is optional, and if present is used to pair
- `lituse' relocations with this `literal' relocation. The `lituse'
- relocations are used by the linker to optimize the code based on
- the final location of the symbol.
-
- Note that these optimizations are dependent on the data flow of the
- program. Therefore, if _any_ `lituse' is paired with a `literal'
- relocation, then _all_ uses of the register set by the `literal'
- instruction must also be marked with `lituse' relocations. This
- is because the original `literal' instruction may be deleted or
- transformed into another instruction.
-
- Also note that there may be a one-to-many relationship between
- `literal' and `lituse', but not a many-to-one. That is, if there
- are two code paths that load up the same address and feed the
- value to a single use, then the use may not use a `lituse'
- relocation.
-
-`!lituse_base!N'
- Used with any memory format instruction (e.g. `ldl') to indicate
- that the literal is used for an address load. The offset field of
- the instruction must be zero. During relaxation, the code may be
- altered to use a gp-relative load.
-
-`!lituse_jsr!N'
- Used with a register branch format instruction (e.g. `jsr') to
- indicate that the literal is used for a call. During relaxation,
- the code may be altered to use a direct branch (e.g. `bsr').
-
-`!lituse_jsrdirect!N'
- Similar to `lituse_jsr', but also that this call cannot be vectored
- through a PLT entry. This is useful for functions with special
- calling conventions which do not allow the normal call-clobbered
- registers to be clobbered.
-
-`!lituse_bytoff!N'
- Used with a byte mask instruction (e.g. `extbl') to indicate that
- only the low 3 bits of the address are relevant. During
- relaxation, the code may be altered to use an immediate instead of
- a register shift.
-
-`!lituse_addr!N'
- Used with any other instruction to indicate that the original
- address is in fact used, and the original `ldq' instruction may
- not be altered or deleted. This is useful in conjunction with
- `lituse_jsr' to test whether a weak symbol is defined.
-
- ldq $27,foo($29) !literal!1
- beq $27,is_undef !lituse_addr!1
- jsr $26,($27),foo !lituse_jsr!1
-
-`!lituse_tlsgd!N'
- Used with a register branch format instruction to indicate that the
- literal is the call to `__tls_get_addr' used to compute the
- address of the thread-local storage variable whose descriptor was
- loaded with `!tlsgd!N'.
-
-`!lituse_tlsldm!N'
- Used with a register branch format instruction to indicate that the
- literal is the call to `__tls_get_addr' used to compute the
- address of the base of the thread-local storage block for the
- current module. The descriptor for the module must have been
- loaded with `!tlsldm!N'.
-
-`!gpdisp!N'
- Used with `ldah' and `lda' to load the GP from the current
- address, a-la the `ldgp' macro. The source register for the
- `ldah' instruction must contain the address of the `ldah'
- instruction. There must be exactly one `lda' instruction paired
- with the `ldah' instruction, though it may appear anywhere in the
- instruction stream. The immediate operands must be zero.
-
- bsr $26,foo
- ldah $29,0($26) !gpdisp!1
- lda $29,0($29) !gpdisp!1
-
-`!gprelhigh'
- Used with an `ldah' instruction to add the high 16 bits of a
- 32-bit displacement from the GP.
-
-`!gprellow'
- Used with any memory format instruction to add the low 16 bits of a
- 32-bit displacement from the GP.
-
-`!gprel'
- Used with any memory format instruction to add a 16-bit
- displacement from the GP.
-
-`!samegp'
- Used with any branch format instruction to skip the GP load at the
- target address. The referenced symbol must have the same GP as the
- source object file, and it must be declared to either not use `$27'
- or perform a standard GP load in the first two instructions via the
- `.prologue' directive.
-
-`!tlsgd'
-`!tlsgd!N'
- Used with an `lda' instruction to load the address of a TLS
- descriptor for a symbol in the GOT.
-
- The sequence number N is optional, and if present it used to pair
- the descriptor load with both the `literal' loading the address of
- the `__tls_get_addr' function and the `lituse_tlsgd' marking the
- call to that function.
-
- For proper relaxation, both the `tlsgd', `literal' and `lituse'
- relocations must be in the same extended basic block. That is,
- the relocation with the lowest address must be executed first at
- runtime.
-
-`!tlsldm'
-`!tlsldm!N'
- Used with an `lda' instruction to load the address of a TLS
- descriptor for the current module in the GOT.
-
- Similar in other respects to `tlsgd'.
-
-`!gotdtprel'
- Used with an `ldq' instruction to load the offset of the TLS
- symbol within its module's thread-local storage block. Also known
- as the dynamic thread pointer offset or dtp-relative offset.
-
-`!dtprelhi'
-`!dtprello'
-`!dtprel'
- Like `gprel' relocations except they compute dtp-relative offsets.
-
-`!gottprel'
- Used with an `ldq' instruction to load the offset of the TLS
- symbol from the thread pointer. Also known as the tp-relative
- offset.
-
-`!tprelhi'
-`!tprello'
-`!tprel'
- Like `gprel' relocations except they compute tp-relative offsets.
-
-
-File: as.info, Node: Alpha Floating Point, Next: Alpha Directives, Prev: Alpha Syntax, Up: Alpha-Dependent
-
-8.1.4 Floating Point
---------------------
-
-The Alpha family uses both IEEE and VAX floating-point numbers.
-
-
-File: as.info, Node: Alpha Directives, Next: Alpha Opcodes, Prev: Alpha Floating Point, Up: Alpha-Dependent
-
-8.1.5 Alpha Assembler Directives
---------------------------------
-
-`as' for the Alpha supports many additional directives for
-compatibility with the native assembler. This section describes them
-only briefly.
-
- These are the additional directives in `as' for the Alpha:
-
-`.arch CPU'
- Specifies the target processor. This is equivalent to the `-mCPU'
- command-line option. *Note Options: Alpha Options, for a list of
- values for CPU.
-
-`.ent FUNCTION[, N]'
- Mark the beginning of FUNCTION. An optional number may follow for
- compatibility with the OSF/1 assembler, but is ignored. When
- generating `.mdebug' information, this will create a procedure
- descriptor for the function. In ELF, it will mark the symbol as a
- function a-la the generic `.type' directive.
-
-`.end FUNCTION'
- Mark the end of FUNCTION. In ELF, it will set the size of the
- symbol a-la the generic `.size' directive.
-
-`.mask MASK, OFFSET'
- Indicate which of the integer registers are saved in the current
- function's stack frame. MASK is interpreted a bit mask in which
- bit N set indicates that register N is saved. The registers are
- saved in a block located OFFSET bytes from the "canonical frame
- address" (CFA) which is the value of the stack pointer on entry to
- the function. The registers are saved sequentially, except that
- the return address register (normally `$26') is saved first.
-
- This and the other directives that describe the stack frame are
- currently only used when generating `.mdebug' information. They
- may in the future be used to generate DWARF2 `.debug_frame' unwind
- information for hand written assembly.
-
-`.fmask MASK, OFFSET'
- Indicate which of the floating-point registers are saved in the
- current stack frame. The MASK and OFFSET parameters are
- interpreted as with `.mask'.
-
-`.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]'
- Describes the shape of the stack frame. The frame pointer in use
- is FRAMEREG; normally this is either `$fp' or `$sp'. The frame
- pointer is FRAMEOFFSET bytes below the CFA. The return address is
- initially located in RETREG until it is saved as indicated in
- `.mask'. For compatibility with OSF/1 an optional ARGOFFSET
- parameter is accepted and ignored. It is believed to indicate the
- offset from the CFA to the saved argument registers.
-
-`.prologue N'
- Indicate that the stack frame is set up and all registers have been
- spilled. The argument N indicates whether and how the function
- uses the incoming "procedure vector" (the address of the called
- function) in `$27'. 0 indicates that `$27' is not used; 1
- indicates that the first two instructions of the function use `$27'
- to perform a load of the GP register; 2 indicates that `$27' is
- used in some non-standard way and so the linker cannot elide the
- load of the procedure vector during relaxation.
-
-`.usepv FUNCTION, WHICH'
- Used to indicate the use of the `$27' register, similar to
- `.prologue', but without the other semantics of needing to be
- inside an open `.ent'/`.end' block.
-
- The WHICH argument should be either `no', indicating that `$27' is
- not used, or `std', indicating that the first two instructions of
- the function perform a GP load.
-
- One might use this directive instead of `.prologue' if you are
- also using dwarf2 CFI directives.
-
-`.gprel32 EXPRESSION'
- Computes the difference between the address in EXPRESSION and the
- GP for the current object file, and stores it in 4 bytes. In
- addition to being smaller than a full 8 byte address, this also
- does not require a dynamic relocation when used in a shared
- library.
-
-`.t_floating EXPRESSION'
- Stores EXPRESSION as an IEEE double precision value.
-
-`.s_floating EXPRESSION'
- Stores EXPRESSION as an IEEE single precision value.
-
-`.f_floating EXPRESSION'
- Stores EXPRESSION as a VAX F format value.
-
-`.g_floating EXPRESSION'
- Stores EXPRESSION as a VAX G format value.
-
-`.d_floating EXPRESSION'
- Stores EXPRESSION as a VAX D format value.
-
-`.set FEATURE'
- Enables or disables various assembler features. Using the positive
- name of the feature enables while using `noFEATURE' disables.
-
- `at'
- Indicates that macro expansions may clobber the "assembler
- temporary" (`$at' or `$28') register. Some macros may not be
- expanded without this and will generate an error message if
- `noat' is in effect. When `at' is in effect, a warning will
- be generated if `$at' is used by the programmer.
-
- `macro'
- Enables the expansion of macro instructions. Note that
- variants of real instructions, such as `br label' vs `br
- $31,label' are considered alternate forms and not macros.
-
- `move'
- `reorder'
- `volatile'
- These control whether and how the assembler may re-order
- instructions. Accepted for compatibility with the OSF/1
- assembler, but `as' does not do instruction scheduling, so
- these features are ignored.
-
- The following directives are recognized for compatibility with the
-OSF/1 assembler but are ignored.
-
- .proc .aproc
- .reguse .livereg
- .option .aent
- .ugen .eflag
- .alias .noalias
-
-
-File: as.info, Node: Alpha Opcodes, Prev: Alpha Directives, Up: Alpha-Dependent
-
-8.1.6 Opcodes
--------------
-
-For detailed information on the Alpha machine instruction set, see the
-Alpha Architecture Handbook
-(ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf).
-
-
-File: as.info, Node: ARC-Dependent, Next: ARM-Dependent, Prev: Alpha-Dependent, Up: Machine Dependencies
-
-8.2 ARC Dependent Features
-==========================
-
-* Menu:
-
-* ARC Options:: Options
-* ARC Syntax:: Syntax
-* ARC Floating Point:: Floating Point
-* ARC Directives:: ARC Machine Directives
-* ARC Opcodes:: Opcodes
-
-
-File: as.info, Node: ARC Options, Next: ARC Syntax, Up: ARC-Dependent
-
-8.2.1 Options
--------------
-
-`-marc[5|6|7|8]'
- This option selects the core processor variant. Using `-marc' is
- the same as `-marc6', which is also the default.
-
- `arc5'
- Base instruction set.
-
- `arc6'
- Jump-and-link (jl) instruction. No requirement of an
- instruction between setting flags and conditional jump. For
- example:
-
- mov.f r0,r1
- beq foo
-
- `arc7'
- Break (brk) and sleep (sleep) instructions.
-
- `arc8'
- Software interrupt (swi) instruction.
-
-
- Note: the `.option' directive can to be used to select a core
- variant from within assembly code.
-
-`-EB'
- This option specifies that the output generated by the assembler
- should be marked as being encoded for a big-endian processor.
-
-`-EL'
- This option specifies that the output generated by the assembler
- should be marked as being encoded for a little-endian processor -
- this is the default.
-
-
-
-File: as.info, Node: ARC Syntax, Next: ARC Floating Point, Prev: ARC Options, Up: ARC-Dependent
-
-8.2.2 Syntax
-------------
-
-* Menu:
-
-* ARC-Chars:: Special Characters
-* ARC-Regs:: Register Names
-
-
-File: as.info, Node: ARC-Chars, Next: ARC-Regs, Up: ARC Syntax
-
-8.2.2.1 Special Characters
-..........................
-
-*TODO*
-
-
-File: as.info, Node: ARC-Regs, Prev: ARC-Chars, Up: ARC Syntax
-
-8.2.2.2 Register Names
-......................
-
-*TODO*
-
-
-File: as.info, Node: ARC Floating Point, Next: ARC Directives, Prev: ARC Syntax, Up: ARC-Dependent
-
-8.2.3 Floating Point
---------------------
-
-The ARC core does not currently have hardware floating point support.
-Software floating point support is provided by `GCC' and uses IEEE
-floating-point numbers.
-
-
-File: as.info, Node: ARC Directives, Next: ARC Opcodes, Prev: ARC Floating Point, Up: ARC-Dependent
-
-8.2.4 ARC Machine Directives
-----------------------------
-
-The ARC version of `as' supports the following additional machine
-directives:
-
-`.2byte EXPRESSIONS'
- *TODO*
-
-`.3byte EXPRESSIONS'
- *TODO*
-
-`.4byte EXPRESSIONS'
- *TODO*
-
-`.extAuxRegister NAME,ADDRESS,MODE'
- The ARCtangent A4 has extensible auxiliary register space. The
- auxiliary registers can be defined in the assembler source code by
- using this directive. The first parameter is the NAME of the new
- auxiallry register. The second parameter is the ADDRESS of the
- register in the auxiliary register memory map for the variant of
- the ARC. The third parameter specifies the MODE in which the
- register can be operated is and it can be one of:
-
- `r (readonly)'
-
- `w (write only)'
-
- `r|w (read or write)'
-
- For example:
-
- .extAuxRegister mulhi,0x12,w
-
- This specifies an extension auxiliary register called _mulhi_
- which is at address 0x12 in the memory space and which is only
- writable.
-
-`.extCondCode SUFFIX,VALUE'
- The condition codes on the ARCtangent A4 are extensible and can be
- specified by means of this assembler directive. They are specified
- by the suffix and the value for the condition code. They can be
- used to specify extra condition codes with any values. For
- example:
-
- .extCondCode is_busy,0x14
-
- add.is_busy r1,r2,r3
- bis_busy _main
-
-`.extCoreRegister NAME,REGNUM,MODE,SHORTCUT'
- Specifies an extension core register NAME for the application.
- This allows a register NAME with a valid REGNUM between 0 and 60,
- with the following as valid values for MODE
-
- `_r_ (readonly)'
-
- `_w_ (write only)'
-
- `_r|w_ (read or write)'
-
- The other parameter gives a description of the register having a
- SHORTCUT in the pipeline. The valid values are:
-
- `can_shortcut'
-
- `cannot_shortcut'
-
- For example:
-
- .extCoreRegister mlo,57,r,can_shortcut
-
- This defines an extension core register mlo with the value 57 which
- can shortcut the pipeline.
-
-`.extInstruction NAME,OPCODE,SUBOPCODE,SUFFIXCLASS,SYNTAXCLASS'
- The ARCtangent A4 allows the user to specify extension
- instructions. The extension instructions are not macros. The
- assembler creates encodings for use of these instructions
- according to the specification by the user. The parameters are:
-
- *NAME
- Name of the extension instruction
-
- *OPCODE
- Opcode to be used. (Bits 27:31 in the encoding). Valid values
- 0x10-0x1f or 0x03
-
- *SUBOPCODE
- Subopcode to be used. Valid values are from 0x09-0x3f.
- However the correct value also depends on SYNTAXCLASS
-
- *SUFFIXCLASS
- Determines the kinds of suffixes to be allowed. Valid values
- are `SUFFIX_NONE', `SUFFIX_COND', `SUFFIX_FLAG' which
- indicates the absence or presence of conditional suffixes and
- flag setting by the extension instruction. It is also
- possible to specify that an instruction sets the flags and is
- conditional by using `SUFFIX_CODE' | `SUFFIX_FLAG'.
-
- *SYNTAXCLASS
- Determines the syntax class for the instruction. It can have
- the following values:
-
- ``SYNTAX_2OP':'
- 2 Operand Instruction
-
- ``SYNTAX_3OP':'
- 3 Operand Instruction
-
- In addition there could be modifiers for the syntax class as
- described below:
-
- Syntax Class Modifiers are:
-
- - `OP1_MUST_BE_IMM': Modifies syntax class SYNTAX_3OP,
- specifying that the first operand of a three-operand
- instruction must be an immediate (i.e. the result is
- discarded). OP1_MUST_BE_IMM is used by bitwise ORing it
- with SYNTAX_3OP as given in the example below. This
- could usually be used to set the flags using specific
- instructions and not retain results.
-
- - `OP1_IMM_IMPLIED': Modifies syntax class SYNTAX_20P, it
- specifies that there is an implied immediate destination
- operand which does not appear in the syntax. For
- example, if the source code contains an instruction like:
-
- inst r1,r2
-
- it really means that the first argument is an implied
- immediate (that is, the result is discarded). This is
- the same as though the source code were: inst 0,r1,r2.
- You use OP1_IMM_IMPLIED by bitwise ORing it with
- SYNTAX_20P.
-
-
- For example, defining 64-bit multiplier with immediate operands:
-
- .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG ,
- SYNTAX_3OP|OP1_MUST_BE_IMM
-
- The above specifies an extension instruction called mp64 which has
- 3 operands, sets the flags, can be used with a condition code, for
- which the first operand is an immediate. (Equivalent to
- discarding the result of the operation).
-
- .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED
-
- This describes a 2 operand instruction with an implicit first
- immediate operand. The result of this operation would be
- discarded.
-
-`.half EXPRESSIONS'
- *TODO*
-
-`.long EXPRESSIONS'
- *TODO*
-
-`.option ARC|ARC5|ARC6|ARC7|ARC8'
- The `.option' directive must be followed by the desired core
- version. Again `arc' is an alias for `arc6'.
-
- Note: the `.option' directive overrides the command line option
- `-marc'; a warning is emitted when the version is not consistent
- between the two - even for the implicit default core version
- (arc6).
-
-`.short EXPRESSIONS'
- *TODO*
-
-`.word EXPRESSIONS'
- *TODO*
-
-
-
-File: as.info, Node: ARC Opcodes, Prev: ARC Directives, Up: ARC-Dependent
-
-8.2.5 Opcodes
--------------
-
-For information on the ARC instruction set, see `ARC Programmers
-Reference Manual', ARC International (www.arc.com)
-
-
-File: as.info, Node: ARM-Dependent, Next: BFIN-Dependent, Prev: ARC-Dependent, Up: Machine Dependencies
-
-8.3 ARM Dependent Features
-==========================
-
-* Menu:
-
-* ARM Options:: Options
-* ARM Syntax:: Syntax
-* ARM Floating Point:: Floating Point
-* ARM Directives:: ARM Machine Directives
-* ARM Opcodes:: Opcodes
-* ARM Mapping Symbols:: Mapping Symbols
-
-
-File: as.info, Node: ARM Options, Next: ARM Syntax, Up: ARM-Dependent
-
-8.3.1 Options
--------------
-
-`-mcpu=PROCESSOR[+EXTENSION...]'
- This option specifies the target processor. The assembler will
- issue an error message if an attempt is made to assemble an
- instruction which will not execute on the target processor. The
- following processor names are recognized: `arm1', `arm2', `arm250',
- `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
- `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
- `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t',
- `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi',
- `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1',
- `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920',
- `arm920t', `arm922t', `arm940t', `arm9tdmi', `arm9e', `arm926e',
- `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s', `arm966e-r0',
- `arm966e', `arm966e-s', `arm968e-s', `arm10t', `arm10tdmi',
- `arm10e', `arm1020', `arm1020t', `arm1020e', `arm1022e',
- `arm1026ej-s', `arm1136j-s', `arm1136jf-s', `arm1156t2-s',
- `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', `mpcore',
- `mpcorenovfp', `cortex-a8', `cortex-r4', `cortex-m3', `ep9312'
- (ARM920 with Cirrus Maverick coprocessor), `i80200' (Intel XScale
- processor) `iwmmxt' (Intel(r) XScale processor with Wireless
- MMX(tm) technology coprocessor) and `xscale'. The special name
- `all' may be used to allow the assembler to accept instructions
- valid for any ARM processor.
-
- In addition to the basic instruction set, the assembler can be
- told to accept various extension mnemonics that extend the
- processor using the co-processor instruction space. For example,
- `-mcpu=arm920+maverick' is equivalent to specifying
- `-mcpu=ep9312'. The following extensions are currently supported:
- `+maverick' `+iwmmxt' and `+xscale'.
-
-`-march=ARCHITECTURE[+EXTENSION...]'
- This option specifies the target architecture. The assembler will
- issue an error message if an attempt is made to assemble an
- instruction which will not execute on the target architecture.
- The following architecture names are recognized: `armv1', `armv2',
- `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm',
- `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te',
- `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6zk',
- `armv7', `armv7a', `armv7r', `armv7m', `iwmmxt' and `xscale'. If
- both `-mcpu' and `-march' are specified, the assembler will use
- the setting for `-mcpu'.
-
- The architecture option can be extended with the same instruction
- set extension options as the `-mcpu' option.
-
-`-mfpu=FLOATING-POINT-FORMAT'
- This option specifies the floating point format to assemble for.
- The assembler will issue an error message if an attempt is made to
- assemble an instruction which will not execute on the target
- floating point unit. The following format options are recognized:
- `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11',
- `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0',
- `vfp9', `vfpxd', `arm1020t', `arm1020e', `arm1136jf-s' and
- `maverick'.
-
- In addition to determining which instructions are assembled, this
- option also affects the way in which the `.double' assembler
- directive behaves when assembling little-endian code.
-
- The default is dependent on the processor selected. For
- Architecture 5 or later, the default is to assembler for VFP
- instructions; for earlier architectures the default is to assemble
- for FPA instructions.
-
-`-mthumb'
- This option specifies that the assembler should start assembling
- Thumb instructions; that is, it should behave as though the file
- starts with a `.code 16' directive.
-
-`-mthumb-interwork'
- This option specifies that the output generated by the assembler
- should be marked as supporting interworking.
-
-`-mapcs `[26|32]''
- This option specifies that the output generated by the assembler
- should be marked as supporting the indicated version of the Arm
- Procedure. Calling Standard.
-
-`-matpcs'
- This option specifies that the output generated by the assembler
- should be marked as supporting the Arm/Thumb Procedure Calling
- Standard. If enabled this option will cause the assembler to
- create an empty debugging section in the object file called
- .arm.atpcs. Debuggers can use this to determine the ABI being
- used by.
-
-`-mapcs-float'
- This indicates the floating point variant of the APCS should be
- used. In this variant floating point arguments are passed in FP
- registers rather than integer registers.
-
-`-mapcs-reentrant'
- This indicates that the reentrant variant of the APCS should be
- used. This variant supports position independent code.
-
-`-mfloat-abi=ABI'
- This option specifies that the output generated by the assembler
- should be marked as using specified floating point ABI. The
- following values are recognized: `soft', `softfp' and `hard'.
-
-`-meabi=VER'
- This option specifies which EABI version the produced object files
- should conform to. The following values are recognised: `gnu', `4'
- and `5'.
-
-`-EB'
- This option specifies that the output generated by the assembler
- should be marked as being encoded for a big-endian processor.
-
-`-EL'
- This option specifies that the output generated by the assembler
- should be marked as being encoded for a little-endian processor.
-
-`-k'
- This option specifies that the output of the assembler should be
- marked as position-independent code (PIC).
-
-
-
-File: as.info, Node: ARM Syntax, Next: ARM Floating Point, Prev: ARM Options, Up: ARM-Dependent
-
-8.3.2 Syntax
-------------
-
-* Menu:
-
-* ARM-Chars:: Special Characters
-* ARM-Regs:: Register Names
-
-
-File: as.info, Node: ARM-Chars, Next: ARM-Regs, Up: ARM Syntax
-
-8.3.2.1 Special Characters
-..........................
-
-The presence of a `@' on a line indicates the start of a comment that
-extends to the end of the current line. If a `#' appears as the first
-character of a line, the whole line is treated as a comment.
-
- The `;' character can be used instead of a newline to separate
-statements.
-
- Either `#' or `$' can be used to indicate immediate operands.
-
- *TODO* Explain about /data modifier on symbols.
-
-
-File: as.info, Node: ARM-Regs, Prev: ARM-Chars, Up: ARM Syntax
-
-8.3.2.2 Register Names
-......................
-
-*TODO* Explain about ARM register naming, and the predefined names.
-
-
-File: as.info, Node: ARM Floating Point, Next: ARM Directives, Prev: ARM Syntax, Up: ARM-Dependent
-
-8.3.3 Floating Point
---------------------
-
-The ARM family uses IEEE floating-point numbers.
-
-
-File: as.info, Node: ARM Directives, Next: ARM Opcodes, Prev: ARM Floating Point, Up: ARM-Dependent
-
-8.3.4 ARM Machine Directives
-----------------------------
-
-`.align EXPRESSION [, EXPRESSION]'
- This is the generic .ALIGN directive. For the ARM however if the
- first argument is zero (ie no alignment is needed) the assembler
- will behave as if the argument had been 2 (ie pad to the next four
- byte boundary). This is for compatibility with ARM's own
- assembler.
-
-`NAME .req REGISTER NAME'
- This creates an alias for REGISTER NAME called NAME. For example:
-
- foo .req r0
-
-`.unreq ALIAS-NAME'
- This undefines a register alias which was previously defined using
- the `req' directive. For example:
-
- foo .req r0
- .unreq foo
-
- An error occurs if the name is undefined. Note - this pseudo op
- can be used to delete builtin in register name aliases (eg 'r0').
- This should only be done if it is really necessary.
-
-`.code `[16|32]''
- This directive selects the instruction set being generated. The
- value 16 selects Thumb, with the value 32 selecting ARM.
-
-`.thumb'
- This performs the same action as .CODE 16.
-
-`.arm'
- This performs the same action as .CODE 32.
-
-`.force_thumb'
- This directive forces the selection of Thumb instructions, even if
- the target processor does not support those instructions
-
-`.thumb_func'
- This directive specifies that the following symbol is the name of a
- Thumb encoded function. This information is necessary in order to
- allow the assembler and linker to generate correct code for
- interworking between Arm and Thumb instructions and should be used
- even if interworking is not going to be performed. The presence
- of this directive also implies `.thumb'
-
-`.thumb_set'
- This performs the equivalent of a `.set' directive in that it
- creates a symbol which is an alias for another symbol (possibly
- not yet defined). This directive also has the added property in
- that it marks the aliased symbol as being a thumb function entry
- point, in the same way that the `.thumb_func' directive does.
-
-`.ltorg'
- This directive causes the current contents of the literal pool to
- be dumped into the current section (which is assumed to be the
- .text section) at the current location (aligned to a word
- boundary). `GAS' maintains a separate literal pool for each
- section and each sub-section. The `.ltorg' directive will only
- affect the literal pool of the current section and sub-section.
- At the end of assembly all remaining, un-empty literal pools will
- automatically be dumped.
-
- Note - older versions of `GAS' would dump the current literal pool
- any time a section change occurred. This is no longer done, since
- it prevents accurate control of the placement of literal pools.
-
-`.pool'
- This is a synonym for .ltorg.
-
-`.unwind_fnstart'
- Marks the start of a function with an unwind table entry.
-
-`.unwind_fnend'
- Marks the end of a function with an unwind table entry. The
- unwind index table entry is created when this directive is
- processed.
-
- If no personality routine has been specified then standard
- personality routine 0 or 1 will be used, depending on the number
- of unwind opcodes required.
-
-`.cantunwind'
- Prevents unwinding through the current function. No personality
- routine or exception table data is required or permitted.
-
-`.personality NAME'
- Sets the personality routine for the current function to NAME.
-
-`.personalityindex INDEX'
- Sets the personality routine for the current function to the EABI
- standard routine number INDEX
-
-`.handlerdata'
- Marks the end of the current function, and the start of the
- exception table entry for that function. Anything between this
- directive and the `.fnend' directive will be added to the
- exception table entry.
-
- Must be preceded by a `.personality' or `.personalityindex'
- directive.
-
-`.save REGLIST'
- Generate unwinder annotations to restore the registers in REGLIST.
- The format of REGLIST is the same as the corresponding
- store-multiple instruction.
-
- _core registers_
- .save {r4, r5, r6, lr}
- stmfd sp!, {r4, r5, r6, lr}
- _FPA registers_
- .save f4, 2
- sfmfd f4, 2, [sp]!
- _VFP registers_
- .save {d8, d9, d10}
- fstmdf sp!, {d8, d9, d10}
- _iWMMXt registers_
- .save {wr10, wr11}
- wstrd wr11, [sp, #-8]!
- wstrd wr10, [sp, #-8]!
- or
- .save wr11
- wstrd wr11, [sp, #-8]!
- .save wr10
- wstrd wr10, [sp, #-8]!
-
-`.pad #COUNT'
- Generate unwinder annotations for a stack adjustment of COUNT
- bytes. A positive value indicates the function prologue allocated
- stack space by decrementing the stack pointer.
-
-`.movsp REG'
- Tell the unwinder that REG contains the current stack pointer.
-
-`.setfp FPREG, SPREG [, #OFFSET]'
- Make all unwinder annotations relaive to a frame pointer. Without
- this the unwinder will use offsets from the stack pointer.
-
- The syntax of this directive is the same as the `sub' or `mov'
- instruction used to set the frame pointer. SPREG must be either
- `sp' or mentioned in a previous `.movsp' directive.
-
- .movsp ip
- mov ip, sp
- ...
- .setfp fp, ip, #4
- sub fp, ip, #4
-
-`.raw OFFSET, BYTE1, ...'
- Insert one of more arbitary unwind opcode bytes, which are known
- to adjust the stack pointer by OFFSET bytes.
-
- For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save
- {r0}'
-
-`.cpu NAME'
- Select the target processor. Valid values for NAME are the same as
- for the `-mcpu' commandline option.
-
-`.arch NAME'
- Select the target architecture. Valid values for NAME are the
- same as for the `-march' commandline option.
-
-`.fpu NAME'
- Select the floating point unit to assemble for. Valid values for
- NAME are the same as for the `-mfpu' commandline option.
-
-`.eabi_attribute TAG, VALUE'
- Set the EABI object attribute number TAG to VALUE. The value is
- either a `number', `"string"', or `number, "string"' depending on
- the tag.
-
-
-
-File: as.info, Node: ARM Opcodes, Next: ARM Mapping Symbols, Prev: ARM Directives, Up: ARM-Dependent
-
-8.3.5 Opcodes
--------------
-
-`as' implements all the standard ARM opcodes. It also implements
-several pseudo opcodes, including several synthetic load instructions.
-
-`NOP'
- nop
-
- This pseudo op will always evaluate to a legal ARM instruction
- that does nothing. Currently it will evaluate to MOV r0, r0.
-
-`LDR'
- ldr <register> , = <expression>
-
- If expression evaluates to a numeric constant then a MOV or MVN
- instruction will be used in place of the LDR instruction, if the
- constant can be generated by either of these instructions.
- Otherwise the constant will be placed into the nearest literal
- pool (if it not already there) and a PC relative LDR instruction
- will be generated.
-
-`ADR'
- adr <register> <label>
-
- This instruction will load the address of LABEL into the indicated
- register. The instruction will evaluate to a PC relative ADD or
- SUB instruction depending upon where the label is located. If the
- label is out of range, or if it is not defined in the same file
- (and section) as the ADR instruction, then an error will be
- generated. This instruction will not make use of the literal pool.
-
-`ADRL'
- adrl <register> <label>
-
- This instruction will load the address of LABEL into the indicated
- register. The instruction will evaluate to one or two PC relative
- ADD or SUB instructions depending upon where the label is located.
- If a second instruction is not needed a NOP instruction will be
- generated in its place, so that this instruction is always 8 bytes
- long.
-
- If the label is out of range, or if it is not defined in the same
- file (and section) as the ADRL instruction, then an error will be
- generated. This instruction will not make use of the literal pool.
-
-
- For information on the ARM or Thumb instruction sets, see `ARM
-Software Development Toolkit Reference Manual', Advanced RISC Machines
-Ltd.
-
-
-File: as.info, Node: ARM Mapping Symbols, Prev: ARM Opcodes, Up: ARM-Dependent
-
-8.3.6 Mapping Symbols
----------------------
-
-The ARM ELF specification requires that special symbols be inserted
-into object files to mark certain features:
-
-`$a'
- At the start of a region of code containing ARM instructions.
-
-`$t'
- At the start of a region of code containing THUMB instructions.
-
-`$d'
- At the start of a region of data.
-
-
- The assembler will automatically insert these symbols for you - there
-is no need to code them yourself. Support for tagging symbols ($b, $f,
-$p and $m) which is also mentioned in the current ARM ELF specification
-is not implemented. This is because they have been dropped from the
-new EABI and so tools cannot rely upon their presence.
-
-
-File: as.info, Node: BFIN-Dependent, Next: CRIS-Dependent, Prev: ARM-Dependent, Up: Machine Dependencies
-
-8.4 Blackfin Dependent Features
-===============================
-
-* Menu:
-
-* BFIN Syntax:: BFIN Syntax
-* BFIN Directives:: BFIN Directives
-
-
-File: as.info, Node: BFIN Syntax, Next: BFIN Directives, Up: BFIN-Dependent
-
-8.4.1 Syntax
-------------
-
-`Special Characters'
- Assembler input is free format and may appear anywhere on the line.
- One instruction may extend across multiple lines or more than one
- instruction may appear on the same line. White space (space, tab,
- comments or newline) may appear anywhere between tokens. A token
- must not have embedded spaces. Tokens include numbers, register
- names, keywords, user identifiers, and also some multicharacter
- special symbols like "+=", "/*" or "||".
-
-`Instruction Delimiting'
- A semicolon must terminate every instruction. Sometimes a complete
- instruction will consist of more than one operation. There are two
- cases where this occurs. The first is when two general operations
- are combined. Normally a comma separates the different parts, as
- in
-
- a0= r3.h * r2.l, a1 = r3.l * r2.h ;
-
- The second case occurs when a general instruction is combined with
- one or two memory references for joint issue. The latter portions
- are set off by a "||" token.
-
- a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++];
-
-`Register Names'
- The assembler treats register names and instruction keywords in a
- case insensitive manner. User identifiers are case sensitive.
- Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the
- assembler.
-
- Register names are reserved and may not be used as program
- identifiers.
-
- Some operations (such as "Move Register") require a register pair.
- Register pairs are always data registers and are denoted using a
- colon, eg., R3:2. The larger number must be written firsts. Note
- that the hardware only supports odd-even pairs, eg., R7:6, R5:4,
- R3:2, and R1:0.
-
- Some instructions (such as -SP (Push Multiple)) require a group of
- adjacent registers. Adjacent registers are denoted in the syntax
- by the range enclosed in parentheses and separated by a colon,
- eg., (R7:3). Again, the larger number appears first.
-
- Portions of a particular register may be individually specified.
- This is written with a dot (".") following the register name and
- then a letter denoting the desired portion. For 32-bit registers,
- ".H" denotes the most significant ("High") portion. ".L" denotes
- the least-significant portion. The subdivisions of the 40-bit
- registers are described later.
-
-`Accumulators'
- The set of 40-bit registers A1 and A0 that normally contain data
- that is being manipulated. Each accumulator can be accessed in
- four ways.
-
- `one 40-bit register'
- The register will be referred to as A1 or A0.
-
- `one 32-bit register'
- The registers are designated as A1.W or A0.W.
-
- `two 16-bit registers'
- The registers are designated as A1.H, A1.L, A0.H or A0.L.
-
- `one 8-bit register'
- The registers are designated as A1.X or A0.X for the bits that
- extend beyond bit 31.
-
-`Data Registers'
- The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7)
- that normally contain data for manipulation. These are
- abbreviated as D-register or Dreg. Data registers can be accessed
- as 32-bit registers or as two independent 16-bit registers. The
- least significant 16 bits of each register is called the "low"
- half and is desginated with ".L" following the register name. The
- most significant 16 bits are called the "high" half and is
- designated with ".H". following the name.
-
- R7.L, r2.h, r4.L, R0.H
-
-`Pointer Registers'
- The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP)
- that normally contain byte addresses of data structures. These are
- abbreviated as P-register or Preg.
-
- p2, p5, fp, sp
-
-`Stack Pointer SP'
- The stack pointer contains the 32-bit address of the last occupied
- byte location in the stack. The stack grows by decrementing the
- stack pointer.
-
-`Frame Pointer FP'
- The frame pointer contains the 32-bit address of the previous frame
- pointer in the stack. It is located at the top of a frame.
-
-`Loop Top'
- LT0 and LT1. These registers contain the 32-bit address of the
- top of a zero overhead loop.
-
-`Loop Count'
- LC0 and LC1. These registers contain the 32-bit counter of the
- zero overhead loop executions.
-
-`Loop Bottom'
- LB0 and LB1. These registers contain the 32-bit address of the
- bottom of a zero overhead loop.
-
-`Index Registers'
- The set of 32-bit registers (I0, I1, I2, I3) that normally contain
- byte addresses of data structures. Abbreviated I-register or Ireg.
-
-`Modify Registers'
- The set of 32-bit registers (M0, M1, M2, M3) that normally contain
- offset values that are added and subracted to one of the index
- registers. Abbreviated as Mreg.
-
-`Length Registers'
- The set of 32-bit registers (L0, L1, L2, L3) that normally contain
- the length in bytes of the circular buffer. Abbreviated as Lreg.
- Clear the Lreg to disable circular addressing for the
- corresponding Ireg.
-
-`Base Registers'
- The set of 32-bit registers (B0, B1, B2, B3) that normally contain
- the base address in bytes of the circular buffer. Abbreviated as
- Breg.
-
-`Floating Point'
- The Blackfin family has no hardware floating point but the .float
- directive generates ieee floating point numbers for use with
- software floating point libraries.
-
-`Blackfin Opcodes'
- For detailed information on the Blackfin machine instruction set,
- see the Blackfin(r) Processor Instruction Set Reference.
-
-
-
-File: as.info, Node: BFIN Directives, Prev: BFIN Syntax, Up: BFIN-Dependent
-
-8.4.2 Directives
-----------------
-
-The following directives are provided for compatibility with the VDSP
-assembler.
-
-`.byte2'
- Initializes a four byte data object.
-
-`.byte4'
- Initializes a two byte data object.
-
-`.db'
- TBD
-
-`.dd'
- TBD
-
-`.dw'
- TBD
-
-`.var'
- Define and initialize a 32 bit data object.
-
-
-File: as.info, Node: CRIS-Dependent, Next: D10V-Dependent, Prev: BFIN-Dependent, Up: Machine Dependencies
-
-8.5 CRIS Dependent Features
-===========================
-
-* Menu:
-
-* CRIS-Opts:: Command-line Options
-* CRIS-Expand:: Instruction expansion
-* CRIS-Symbols:: Symbols
-* CRIS-Syntax:: Syntax
-
-
-File: as.info, Node: CRIS-Opts, Next: CRIS-Expand, Up: CRIS-Dependent
-
-8.5.1 Command-line Options
---------------------------
-
-The CRIS version of `as' has these machine-dependent command-line
-options.
-
- The format of the generated object files can be either ELF or a.out,
-specified by the command-line options `--emulation=crisaout' and
-`--emulation=criself'. The default is ELF (criself), unless `as' has
-been configured specifically for a.out by using the configuration name
-`cris-axis-aout'.
-
- There are two different link-incompatible ELF object file variants
-for CRIS, for use in environments where symbols are expected to be
-prefixed by a leading `_' character and for environments without such a
-symbol prefix. The variant used for GNU/Linux port has no symbol
-prefix. Which variant to produce is specified by either of the options
-`--underscore' and `--no-underscore'. The default is `--underscore'.
-Since symbols in CRIS a.out objects are expected to have a `_' prefix,
-specifying `--no-underscore' when generating a.out objects is an error.
-Besides the object format difference, the effect of this option is to
-parse register names differently (*note crisnous::). The
-`--no-underscore' option makes a `$' register prefix mandatory.
-
- The option `--pic' must be passed to `as' in order to recognize the
-symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note
-crispic::). This will also affect expansion of instructions. The
-expansion with `--pic' will use PC-relative rather than (slightly
-faster) absolute addresses in those expansions.
-
- The option `--march=ARCHITECTURE' specifies the recognized
-instruction set and recognized register names. It also controls the
-architecture type of the object file. Valid values for ARCHITECTURE
-are:
-`v0_v10'
- All instructions and register names for any architecture variant
- in the set v0...v10 are recognized. This is the default if the
- target is configured as cris-*.
-
-`v10'
- Only instructions and register names for CRIS v10 (as found in
- ETRAX 100 LX) are recognized. This is the default if the target
- is configured as crisv10-*.
-
-`v32'
- Only instructions and register names for CRIS v32 (code name
- Guinness) are recognized. This is the default if the target is
- configured as crisv32-*. This value implies `--no-mul-bug-abort'.
- (A subsequent `--mul-bug-abort' will turn it back on.)
-
-`common_v10_v32'
- Only instructions with register names and addressing modes with
- opcodes common to the v10 and v32 are recognized.
-
- When `-N' is specified, `as' will emit a warning when a 16-bit
-branch instruction is expanded into a 32-bit multiple-instruction
-construct (*note CRIS-Expand::).
-
- Some versions of the CRIS v10, for example in the Etrax 100 LX,
-contain a bug that causes destabilizing memory accesses when a multiply
-instruction is executed with certain values in the first operand just
-before a cache-miss. When the `--mul-bug-abort' command line option is
-active (the default value), `as' will refuse to assemble a file
-containing a multiply instruction at a dangerous offset, one that could
-be the last on a cache-line, or is in a section with insufficient
-alignment. This placement checking does not catch any case where the
-multiply instruction is dangerously placed because it is located in a
-delay-slot. The `--mul-bug-abort' command line option turns off the
-checking.
-
-
-File: as.info, Node: CRIS-Expand, Next: CRIS-Symbols, Prev: CRIS-Opts, Up: CRIS-Dependent
-
-8.5.2 Instruction expansion
----------------------------
-
-`as' will silently choose an instruction that fits the operand size for
-`[register+constant]' operands. For example, the offset `127' in
-`move.d [r3+127],r4' fits in an instruction using a signed-byte offset.
-Similarly, `move.d [r2+32767],r1' will generate an instruction using a
-16-bit offset. For symbolic expressions and constants that do not fit
-in 16 bits including the sign bit, a 32-bit offset is generated.
-
- For branches, `as' will expand from a 16-bit branch instruction into
-a sequence of instructions that can reach a full 32-bit address. Since
-this does not correspond to a single instruction, such expansions can
-optionally be warned about. *Note CRIS-Opts::.
-
- If the operand is found to fit the range, a `lapc' mnemonic will
-translate to a `lapcq' instruction. Use `lapc.d' to force the 32-bit
-`lapc' instruction.
-
- Similarly, the `addo' mnemonic will translate to the shortest
-fitting instruction of `addoq', `addo.w' and `addo.d', when used with a
-operand that is a constant known at assembly time.
-
-
-File: as.info, Node: CRIS-Symbols, Next: CRIS-Syntax, Prev: CRIS-Expand, Up: CRIS-Dependent
-
-8.5.3 Symbols
--------------
-
-Some symbols are defined by the assembler. They're intended to be used
-in conditional assembly, for example:
- .if ..asm.arch.cris.v32
- CODE FOR CRIS V32
- .elseif ..asm.arch.cris.common_v10_v32
- CODE COMMON TO CRIS V32 AND CRIS V10
- .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10
- CODE FOR V10
- .else
- .error "Code needs to be added here."
- .endif
-
- These symbols are defined in the assembler, reflecting command-line
-options, either when specified or the default. They are always
-defined, to 0 or 1.
-`..asm.arch.cris.any_v0_v10'
- This symbol is non-zero when `--march=v0_v10' is specified or the
- default.
-
-`..asm.arch.cris.common_v10_v32'
- Set according to the option `--march=common_v10_v32'.
-
-`..asm.arch.cris.v10'
- Reflects the option `--march=v10'.
-
-`..asm.arch.cris.v32'
- Corresponds to `--march=v10'.
-
- Speaking of symbols, when a symbol is used in code, it can have a
-suffix modifying its value for use in position-independent code. *Note
-CRIS-Pic::.
-
-
-File: as.info, Node: CRIS-Syntax, Prev: CRIS-Symbols, Up: CRIS-Dependent
-
-8.5.4 Syntax
-------------
-
-There are different aspects of the CRIS assembly syntax.
-
-* Menu:
-
-* CRIS-Chars:: Special Characters
-* CRIS-Pic:: Position-Independent Code Symbols
-* CRIS-Regs:: Register Names
-* CRIS-Pseudos:: Assembler Directives
-
-
-File: as.info, Node: CRIS-Chars, Next: CRIS-Pic, Up: CRIS-Syntax
-
-8.5.4.1 Special Characters
-..........................
-
-The character `#' is a line comment character. It starts a comment if
-and only if it is placed at the beginning of a line.
-
- A `;' character starts a comment anywhere on the line, causing all
-characters up to the end of the line to be ignored.
-
- A `@' character is handled as a line separator equivalent to a
-logical new-line character (except in a comment), so separate
-instructions can be specified on a single line.
-
-
-File: as.info, Node: CRIS-Pic, Next: CRIS-Regs, Prev: CRIS-Chars, Up: CRIS-Syntax
-
-8.5.4.2 Symbols in position-independent code
-............................................
-
-When generating position-independent code (SVR4 PIC) for use in
-cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol
-suffixes are used to specify what kind of run-time symbol lookup will
-be used, expressed in the object as different _relocation types_.
-Usually, all absolute symbol values must be located in a table, the
-_global offset table_, leaving the code position-independent;
-independent of values of global symbols and independent of the address
-of the code. The suffix modifies the value of the symbol, into for
-example an index into the global offset table where the real symbol
-value is entered, or a PC-relative value, or a value relative to the
-start of the global offset table. All symbol suffixes start with the
-character `:' (omitted in the list below). Every symbol use in code or
-a read-only section must therefore have a PIC suffix to enable a useful
-shared library to be created. Usually, these constructs must not be
-used with an additive constant offset as is usually allowed, i.e. no 4
-as in `symbol + 4' is allowed. This restriction is checked at
-link-time, not at assembly-time.
-
-`GOT'
- Attaching this suffix to a symbol in an instruction causes the
- symbol to be entered into the global offset table. The value is a
- 32-bit index for that symbol into the global offset table. The
- name of the corresponding relocation is `R_CRIS_32_GOT'. Example:
- `move.d [$r0+extsym:GOT],$r9'
-
-`GOT16'
- Same as for `GOT', but the value is a 16-bit index into the global
- offset table. The corresponding relocation is `R_CRIS_16_GOT'.
- Example: `move.d [$r0+asymbol:GOT16],$r10'
-
-`PLT'
- This suffix is used for function symbols. It causes a _procedure
- linkage table_, an array of code stubs, to be created at the time
- the shared object is created or linked against, together with a
- global offset table entry. The value is a pc-relative offset to
- the corresponding stub code in the procedure linkage table. This
- arrangement causes the run-time symbol resolver to be called to
- look up and set the value of the symbol the first time the
- function is called (at latest; depending environment variables).
- It is only safe to leave the symbol unresolved this way if all
- references are function calls. The name of the relocation is
- `R_CRIS_32_PLT_PCREL'. Example: `add.d fnname:PLT,$pc'
-
-`PLTG'
- Like PLT, but the value is relative to the beginning of the global
- offset table. The relocation is `R_CRIS_32_PLT_GOTREL'. Example:
- `move.d fnname:PLTG,$r3'
-
-`GOTPLT'
- Similar to `PLT', but the value of the symbol is a 32-bit index
- into the global offset table. This is somewhat of a mix between
- the effect of the `GOT' and the `PLT' suffix; the difference to
- `GOT' is that there will be a procedure linkage table entry
- created, and that the symbol is assumed to be a function entry and
- will be resolved by the run-time resolver as with `PLT'. The
- relocation is `R_CRIS_32_GOTPLT'. Example: `jsr
- [$r0+fnname:GOTPLT]'
-
-`GOTPLT16'
- A variant of `GOTPLT' giving a 16-bit value. Its relocation name
- is `R_CRIS_16_GOTPLT'. Example: `jsr [$r0+fnname:GOTPLT16]'
-
-`GOTOFF'
- This suffix must only be attached to a local symbol, but may be
- used in an expression adding an offset. The value is the address
- of the symbol relative to the start of the global offset table.
- The relocation name is `R_CRIS_32_GOTREL'. Example: `move.d
- [$r0+localsym:GOTOFF],r3'
-
-
-File: as.info, Node: CRIS-Regs, Next: CRIS-Pseudos, Prev: CRIS-Pic, Up: CRIS-Syntax
-
-8.5.4.3 Register names
-......................
-
-A `$' character may always prefix a general or special register name in
-an instruction operand but is mandatory when the option
-`--no-underscore' is specified or when the `.syntax register_prefix'
-directive is in effect (*note crisnous::). Register names are
-case-insensitive.
-
-
-File: as.info, Node: CRIS-Pseudos, Prev: CRIS-Regs, Up: CRIS-Syntax
-
-8.5.4.4 Assembler Directives
-............................
-
-There are a few CRIS-specific pseudo-directives in addition to the
-generic ones. *Note Pseudo Ops::. Constants emitted by
-pseudo-directives are in little-endian order for CRIS. There is no
-support for floating-point-specific directives for CRIS.
-
-`.dword EXPRESSIONS'
- The `.dword' directive is a synonym for `.int', expecting zero or
- more EXPRESSIONS, separated by commas. For each expression, a
- 32-bit little-endian constant is emitted.
-
-`.syntax ARGUMENT'
- The `.syntax' directive takes as ARGUMENT one of the following
- case-sensitive choices.
-
- `no_register_prefix'
- The `.syntax no_register_prefix' directive makes a `$'
- character prefix on all registers optional. It overrides a
- previous setting, including the corresponding effect of the
- option `--no-underscore'. If this directive is used when
- ordinary symbols do not have a `_' character prefix, care
- must be taken to avoid ambiguities whether an operand is a
- register or a symbol; using symbols with names the same as
- general or special registers then invoke undefined behavior.
-
- `register_prefix'
- This directive makes a `$' character prefix on all registers
- mandatory. It overrides a previous setting, including the
- corresponding effect of the option `--underscore'.
-
- `leading_underscore'
- This is an assertion directive, emitting an error if the
- `--no-underscore' option is in effect.
-
- `no_leading_underscore'
- This is the opposite of the `.syntax leading_underscore'
- directive and emits an error if the option `--underscore' is
- in effect.
-
-`.arch ARGUMENT'
- This is an assertion directive, giving an error if the specified
- ARGUMENT is not the same as the specified or default value for the
- `--march=ARCHITECTURE' option (*note march-option::).
-
-
-
-File: as.info, Node: D10V-Dependent, Next: D30V-Dependent, Prev: CRIS-Dependent, Up: Machine Dependencies
-
-8.6 D10V Dependent Features
-===========================
-
-* Menu:
-
-* D10V-Opts:: D10V Options
-* D10V-Syntax:: Syntax
-* D10V-Float:: Floating Point
-* D10V-Opcodes:: Opcodes
-
-
-File: as.info, Node: D10V-Opts, Next: D10V-Syntax, Up: D10V-Dependent
-
-8.6.1 D10V Options
-------------------
-
-The Mitsubishi D10V version of `as' has a few machine dependent options.
-
-`-O'
- The D10V can often execute two sub-instructions in parallel. When
- this option is used, `as' will attempt to optimize its output by
- detecting when instructions can be executed in parallel.
-
-`--nowarnswap'
- To optimize execution performance, `as' will sometimes swap the
- order of instructions. Normally this generates a warning. When
- this option is used, no warning will be generated when
- instructions are swapped.
-
-`--gstabs-packing'
-
-`--no-gstabs-packing'
- `as' packs adjacent short instructions into a single packed
- instruction. `--no-gstabs-packing' turns instruction packing off if
- `--gstabs' is specified as well; `--gstabs-packing' (the default)
- turns instruction packing on even when `--gstabs' is specified.
-
-
-File: as.info, Node: D10V-Syntax, Next: D10V-Float, Prev: D10V-Opts, Up: D10V-Dependent
-
-8.6.2 Syntax
-------------
-
-The D10V syntax is based on the syntax in Mitsubishi's D10V
-architecture manual. The differences are detailed below.
-
-* Menu:
-
-* D10V-Size:: Size Modifiers
-* D10V-Subs:: Sub-Instructions
-* D10V-Chars:: Special Characters
-* D10V-Regs:: Register Names
-* D10V-Addressing:: Addressing Modes
-* D10V-Word:: @WORD Modifier
-
-
-File: as.info, Node: D10V-Size, Next: D10V-Subs, Up: D10V-Syntax
-
-8.6.2.1 Size Modifiers
-......................
-
-The D10V version of `as' uses the instruction names in the D10V
-Architecture Manual. However, the names in the manual are sometimes
-ambiguous. There are instruction names that can assemble to a short or
-long form opcode. How does the assembler pick the correct form? `as'
-will always pick the smallest form if it can. When dealing with a
-symbol that is not defined yet when a line is being assembled, it will
-always use the long form. If you need to force the assembler to use
-either the short or long form of the instruction, you can append either
-`.s' (short) or `.l' (long) to it. For example, if you are writing an
-assembly program and you want to do a branch to a symbol that is
-defined later in your program, you can write `bra.s foo'. Objdump
-and GDB will always append `.s' or `.l' to instructions which have both
-short and long forms.
-
-
-File: as.info, Node: D10V-Subs, Next: D10V-Chars, Prev: D10V-Size, Up: D10V-Syntax
-
-8.6.2.2 Sub-Instructions
-........................
-
-The D10V assembler takes as input a series of instructions, either
-one-per-line, or in the special two-per-line format described in the
-next section. Some of these instructions will be short-form or
-sub-instructions. These sub-instructions can be packed into a single
-instruction. The assembler will do this automatically. It will also
-detect when it should not pack instructions. For example, when a label
-is defined, the next instruction will never be packaged with the
-previous one. Whenever a branch and link instruction is called, it
-will not be packaged with the next instruction so the return address
-will be valid. Nops are automatically inserted when necessary.
-
- If you do not want the assembler automatically making these
-decisions, you can control the packaging and execution type (parallel
-or sequential) with the special execution symbols described in the next
-section.
-
-
-File: as.info, Node: D10V-Chars, Next: D10V-Regs, Prev: D10V-Subs, Up: D10V-Syntax
-
-8.6.2.3 Special Characters
-..........................
-
-`;' and `#' are the line comment characters. Sub-instructions may be
-executed in order, in reverse-order, or in parallel. Instructions
-listed in the standard one-per-line format will be executed
-sequentially. To specify the executing order, use the following
-symbols:
-`->'
- Sequential with instruction on the left first.
-
-`<-'
- Sequential with instruction on the right first.
-
-`||'
- Parallel
- The D10V syntax allows either one instruction per line, one
-instruction per line with the execution symbol, or two instructions per
-line. For example
-`abs a1 -> abs r0'
- Execute these sequentially. The instruction on the right is in
- the right container and is executed second.
-
-`abs r0 <- abs a1'
- Execute these reverse-sequentially. The instruction on the right
- is in the right container, and is executed first.
-
-`ld2w r2,@r8+ || mac a0,r0,r7'
- Execute these in parallel.
-
-`ld2w r2,@r8+ ||'
-`mac a0,r0,r7'
- Two-line format. Execute these in parallel.
-
-`ld2w r2,@r8+'
-`mac a0,r0,r7'
- Two-line format. Execute these sequentially. Assembler will put
- them in the proper containers.
-
-`ld2w r2,@r8+ ->'
-`mac a0,r0,r7'
- Two-line format. Execute these sequentially. Same as above but
- second instruction will always go into right container.
- Since `$' has no special meaning, you may use it in symbol names.
-
-
-File: as.info, Node: D10V-Regs, Next: D10V-Addressing, Prev: D10V-Chars, Up: D10V-Syntax
-
-8.6.2.4 Register Names
-......................
-
-You can use the predefined symbols `r0' through `r15' to refer to the
-D10V registers. You can also use `sp' as an alias for `r15'. The
-accumulators are `a0' and `a1'. There are special register-pair names
-that may optionally be used in opcodes that require even-numbered
-registers. Register names are not case sensitive.
-
- Register Pairs
-`r0-r1'
-
-`r2-r3'
-
-`r4-r5'
-
-`r6-r7'
-
-`r8-r9'
-
-`r10-r11'
-
-`r12-r13'
-
-`r14-r15'
-
- The D10V also has predefined symbols for these control registers and
-status bits:
-`psw'
- Processor Status Word
-
-`bpsw'
- Backup Processor Status Word
-
-`pc'
- Program Counter
-
-`bpc'
- Backup Program Counter
-
-`rpt_c'
- Repeat Count
-
-`rpt_s'
- Repeat Start address
-
-`rpt_e'
- Repeat End address
-
-`mod_s'
- Modulo Start address
-
-`mod_e'
- Modulo End address
-
-`iba'
- Instruction Break Address
-
-`f0'
- Flag 0
-
-`f1'
- Flag 1
-
-`c'
- Carry flag
-
-
-File: as.info, Node: D10V-Addressing, Next: D10V-Word, Prev: D10V-Regs, Up: D10V-Syntax
-
-8.6.2.5 Addressing Modes
-........................
-
-`as' understands the following addressing modes for the D10V. `RN' in
-the following refers to any of the numbered registers, but _not_ the
-control registers.
-`RN'
- Register direct
-
-`@RN'
- Register indirect
-
-`@RN+'
- Register indirect with post-increment
-
-`@RN-'
- Register indirect with post-decrement
-
-`@-SP'
- Register indirect with pre-decrement
-
-`@(DISP, RN)'
- Register indirect with displacement
-
-`ADDR'
- PC relative address (for branch or rep).
-
-`#IMM'
- Immediate data (the `#' is optional and ignored)
-
-
-File: as.info, Node: D10V-Word, Prev: D10V-Addressing, Up: D10V-Syntax
-
-8.6.2.6 @WORD Modifier
-......................
-
-Any symbol followed by `@word' will be replaced by the symbol's value
-shifted right by 2. This is used in situations such as loading a
-register with the address of a function (or any other code fragment).
-For example, if you want to load a register with the location of the
-function `main' then jump to that function, you could do it as follows:
- ldi r2, main@word
- jmp r2
-
-
-File: as.info, Node: D10V-Float, Next: D10V-Opcodes, Prev: D10V-Syntax, Up: D10V-Dependent
-
-8.6.3 Floating Point
---------------------
-
-The D10V has no hardware floating point, but the `.float' and `.double'
-directives generates IEEE floating-point numbers for compatibility with
-other development tools.
-
-
-File: as.info, Node: D10V-Opcodes, Prev: D10V-Float, Up: D10V-Dependent
-
-8.6.4 Opcodes
--------------
-
-For detailed information on the D10V machine instruction set, see `D10V
-Architecture: A VLIW Microprocessor for Multimedia Applications'
-(Mitsubishi Electric Corp.). `as' implements all the standard D10V
-opcodes. The only changes are those described in the section on size
-modifiers
-
-
-File: as.info, Node: D30V-Dependent, Next: H8/300-Dependent, Prev: D10V-Dependent, Up: Machine Dependencies
-
-8.7 D30V Dependent Features
-===========================
-
-* Menu:
-
-* D30V-Opts:: D30V Options
-* D30V-Syntax:: Syntax
-* D30V-Float:: Floating Point
-* D30V-Opcodes:: Opcodes
-
-
-File: as.info, Node: D30V-Opts, Next: D30V-Syntax, Up: D30V-Dependent
-
-8.7.1 D30V Options
-------------------
-
-The Mitsubishi D30V version of `as' has a few machine dependent options.
-
-`-O'
- The D30V can often execute two sub-instructions in parallel. When
- this option is used, `as' will attempt to optimize its output by
- detecting when instructions can be executed in parallel.
-
-`-n'
- When this option is used, `as' will issue a warning every time it
- adds a nop instruction.
-
-`-N'
- When this option is used, `as' will issue a warning if it needs to
- insert a nop after a 32-bit multiply before a load or 16-bit
- multiply instruction.
-
-
-File: as.info, Node: D30V-Syntax, Next: D30V-Float, Prev: D30V-Opts, Up: D30V-Dependent
-
-8.7.2 Syntax
-------------
-
-The D30V syntax is based on the syntax in Mitsubishi's D30V
-architecture manual. The differences are detailed below.
-
-* Menu:
-
-* D30V-Size:: Size Modifiers
-* D30V-Subs:: Sub-Instructions
-* D30V-Chars:: Special Characters
-* D30V-Guarded:: Guarded Execution
-* D30V-Regs:: Register Names
-* D30V-Addressing:: Addressing Modes
-
-
-File: as.info, Node: D30V-Size, Next: D30V-Subs, Up: D30V-Syntax
-
-8.7.2.1 Size Modifiers
-......................
-
-The D30V version of `as' uses the instruction names in the D30V
-Architecture Manual. However, the names in the manual are sometimes
-ambiguous. There are instruction names that can assemble to a short or
-long form opcode. How does the assembler pick the correct form? `as'
-will always pick the smallest form if it can. When dealing with a
-symbol that is not defined yet when a line is being assembled, it will
-always use the long form. If you need to force the assembler to use
-either the short or long form of the instruction, you can append either
-`.s' (short) or `.l' (long) to it. For example, if you are writing an
-assembly program and you want to do a branch to a symbol that is
-defined later in your program, you can write `bra.s foo'. Objdump and
-GDB will always append `.s' or `.l' to instructions which have both
-short and long forms.
-
-
-File: as.info, Node: D30V-Subs, Next: D30V-Chars, Prev: D30V-Size, Up: D30V-Syntax
-
-8.7.2.2 Sub-Instructions
-........................
-
-The D30V assembler takes as input a series of instructions, either
-one-per-line, or in the special two-per-line format described in the
-next section. Some of these instructions will be short-form or
-sub-instructions. These sub-instructions can be packed into a single
-instruction. The assembler will do this automatically. It will also
-detect when it should not pack instructions. For example, when a label
-is defined, the next instruction will never be packaged with the
-previous one. Whenever a branch and link instruction is called, it
-will not be packaged with the next instruction so the return address
-will be valid. Nops are automatically inserted when necessary.
-
- If you do not want the assembler automatically making these
-decisions, you can control the packaging and execution type (parallel
-or sequential) with the special execution symbols described in the next
-section.
-
-
-File: as.info, Node: D30V-Chars, Next: D30V-Guarded, Prev: D30V-Subs, Up: D30V-Syntax
-
-8.7.2.3 Special Characters
-..........................
-
-`;' and `#' are the line comment characters. Sub-instructions may be
-executed in order, in reverse-order, or in parallel. Instructions
-listed in the standard one-per-line format will be executed
-sequentially unless you use the `-O' option.
-
- To specify the executing order, use the following symbols:
-`->'
- Sequential with instruction on the left first.
-
-`<-'
- Sequential with instruction on the right first.
-
-`||'
- Parallel
-
- The D30V syntax allows either one instruction per line, one
-instruction per line with the execution symbol, or two instructions per
-line. For example
-`abs r2,r3 -> abs r4,r5'
- Execute these sequentially. The instruction on the right is in
- the right container and is executed second.
-
-`abs r2,r3 <- abs r4,r5'
- Execute these reverse-sequentially. The instruction on the right
- is in the right container, and is executed first.
-
-`abs r2,r3 || abs r4,r5'
- Execute these in parallel.
-
-`ldw r2,@(r3,r4) ||'
-`mulx r6,r8,r9'
- Two-line format. Execute these in parallel.
-
-`mulx a0,r8,r9'
-`stw r2,@(r3,r4)'
- Two-line format. Execute these sequentially unless `-O' option is
- used. If the `-O' option is used, the assembler will determine if
- the instructions could be done in parallel (the above two
- instructions can be done in parallel), and if so, emit them as
- parallel instructions. The assembler will put them in the proper
- containers. In the above example, the assembler will put the
- `stw' instruction in left container and the `mulx' instruction in
- the right container.
-
-`stw r2,@(r3,r4) ->'
-`mulx a0,r8,r9'
- Two-line format. Execute the `stw' instruction followed by the
- `mulx' instruction sequentially. The first instruction goes in the
- left container and the second instruction goes into right
- container. The assembler will give an error if the machine
- ordering constraints are violated.
-
-`stw r2,@(r3,r4) <-'
-`mulx a0,r8,r9'
- Same as previous example, except that the `mulx' instruction is
- executed before the `stw' instruction.
-
- Since `$' has no special meaning, you may use it in symbol names.
-
-
-File: as.info, Node: D30V-Guarded, Next: D30V-Regs, Prev: D30V-Chars, Up: D30V-Syntax
-
-8.7.2.4 Guarded Execution
-.........................
-
-`as' supports the full range of guarded execution directives for each
-instruction. Just append the directive after the instruction proper.
-The directives are:
-
-`/tx'
- Execute the instruction if flag f0 is true.
-
-`/fx'
- Execute the instruction if flag f0 is false.
-
-`/xt'
- Execute the instruction if flag f1 is true.
-
-`/xf'
- Execute the instruction if flag f1 is false.
-
-`/tt'
- Execute the instruction if both flags f0 and f1 are true.
-
-`/tf'
- Execute the instruction if flag f0 is true and flag f1 is false.
-
-
-File: as.info, Node: D30V-Regs, Next: D30V-Addressing, Prev: D30V-Guarded, Up: D30V-Syntax
-
-8.7.2.5 Register Names
-......................
-
-You can use the predefined symbols `r0' through `r63' to refer to the
-D30V registers. You can also use `sp' as an alias for `r63' and `link'
-as an alias for `r62'. The accumulators are `a0' and `a1'.
-
- The D30V also has predefined symbols for these control registers and
-status bits:
-`psw'
- Processor Status Word
-
-`bpsw'
- Backup Processor Status Word
-
-`pc'
- Program Counter
-
-`bpc'
- Backup Program Counter
-
-`rpt_c'
- Repeat Count
-
-`rpt_s'
- Repeat Start address
-
-`rpt_e'
- Repeat End address
-
-`mod_s'
- Modulo Start address
-
-`mod_e'
- Modulo End address
-
-`iba'
- Instruction Break Address
-
-`f0'
- Flag 0
-
-`f1'
- Flag 1
-
-`f2'
- Flag 2
-
-`f3'
- Flag 3
-
-`f4'
- Flag 4
-
-`f5'
- Flag 5
-
-`f6'
- Flag 6
-
-`f7'
- Flag 7
-
-`s'
- Same as flag 4 (saturation flag)
-
-`v'
- Same as flag 5 (overflow flag)
-
-`va'
- Same as flag 6 (sticky overflow flag)
-
-`c'
- Same as flag 7 (carry/borrow flag)
-
-`b'
- Same as flag 7 (carry/borrow flag)
-
-
-File: as.info, Node: D30V-Addressing, Prev: D30V-Regs, Up: D30V-Syntax
-
-8.7.2.6 Addressing Modes
-........................
-
-`as' understands the following addressing modes for the D30V. `RN' in
-the following refers to any of the numbered registers, but _not_ the
-control registers.
-`RN'
- Register direct
-
-`@RN'
- Register indirect
-
-`@RN+'
- Register indirect with post-increment
-
-`@RN-'
- Register indirect with post-decrement
-
-`@-SP'
- Register indirect with pre-decrement
-
-`@(DISP, RN)'
- Register indirect with displacement
-
-`ADDR'
- PC relative address (for branch or rep).
-
-`#IMM'
- Immediate data (the `#' is optional and ignored)
-
-
-File: as.info, Node: D30V-Float, Next: D30V-Opcodes, Prev: D30V-Syntax, Up: D30V-Dependent
-
-8.7.3 Floating Point
---------------------
-
-The D30V has no hardware floating point, but the `.float' and `.double'
-directives generates IEEE floating-point numbers for compatibility with
-other development tools.
-
-
-File: as.info, Node: D30V-Opcodes, Prev: D30V-Float, Up: D30V-Dependent
-
-8.7.4 Opcodes
--------------
-
-For detailed information on the D30V machine instruction set, see `D30V
-Architecture: A VLIW Microprocessor for Multimedia Applications'
-(Mitsubishi Electric Corp.). `as' implements all the standard D30V
-opcodes. The only changes are those described in the section on size
-modifiers
-
-
-File: as.info, Node: H8/300-Dependent, Next: HPPA-Dependent, Prev: D30V-Dependent, Up: Machine Dependencies
-
-8.8 H8/300 Dependent Features
-=============================
-
-* Menu:
-
-* H8/300 Options:: Options
-* H8/300 Syntax:: Syntax
-* H8/300 Floating Point:: Floating Point
-* H8/300 Directives:: H8/300 Machine Directives
-* H8/300 Opcodes:: Opcodes
-
-
-File: as.info, Node: H8/300 Options, Next: H8/300 Syntax, Up: H8/300-Dependent
-
-8.8.1 Options
--------------
-
-`as' has no additional command-line options for the Renesas (formerly
-Hitachi) H8/300 family.
-
-
-File: as.info, Node: H8/300 Syntax, Next: H8/300 Floating Point, Prev: H8/300 Options, Up: H8/300-Dependent
-
-8.8.2 Syntax
-------------
-
-* Menu:
-
-* H8/300-Chars:: Special Characters
-* H8/300-Regs:: Register Names
-* H8/300-Addressing:: Addressing Modes
-
-
-File: as.info, Node: H8/300-Chars, Next: H8/300-Regs, Up: H8/300 Syntax
-
-8.8.2.1 Special Characters
-..........................
-
-`;' is the line comment character.
-
- `$' can be used instead of a newline to separate statements.
-Therefore _you may not use `$' in symbol names_ on the H8/300.
-
-
-File: as.info, Node: H8/300-Regs, Next: H8/300-Addressing, Prev: H8/300-Chars, Up: H8/300 Syntax
-
-8.8.2.2 Register Names
-......................
-
-You can use predefined symbols of the form `rNh' and `rNl' to refer to
-the H8/300 registers as sixteen 8-bit general-purpose registers. N is
-a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid
-register names.
-
- You can also use the eight predefined symbols `rN' to refer to the
-H8/300 registers as 16-bit registers (you must use this form for
-addressing).
-
- On the H8/300H, you can also use the eight predefined symbols `erN'
-(`er0' ... `er7') to refer to the 32-bit general purpose registers.
-
- The two control registers are called `pc' (program counter; a 16-bit
-register, except on the H8/300H where it is 24 bits) and `ccr'
-(condition code register; an 8-bit register). `r7' is used as the
-stack pointer, and can also be called `sp'.
-
-
-File: as.info, Node: H8/300-Addressing, Prev: H8/300-Regs, Up: H8/300 Syntax
-
-8.8.2.3 Addressing Modes
-........................
-
-as understands the following addressing modes for the H8/300:
-`rN'
- Register direct
-
-`@rN'
- Register indirect
-
-`@(D, rN)'
-`@(D:16, rN)'
-`@(D:24, rN)'
- Register indirect: 16-bit or 24-bit displacement D from register
- N. (24-bit displacements are only meaningful on the H8/300H.)
-
-`@rN+'
- Register indirect with post-increment
-
-`@-rN'
- Register indirect with pre-decrement
-
-``@'AA'
-``@'AA:8'
-``@'AA:16'
-``@'AA:24'
- Absolute address `aa'. (The address size `:24' only makes sense
- on the H8/300H.)
-
-`#XX'
-`#XX:8'
-`#XX:16'
-`#XX:32'
- Immediate data XX. You may specify the `:8', `:16', or `:32' for
- clarity, if you wish; but `as' neither requires this nor uses
- it--the data size required is taken from context.
-
-``@'`@'AA'
-``@'`@'AA:8'
- Memory indirect. You may specify the `:8' for clarity, if you
- wish; but `as' neither requires this nor uses it.
-
-
-File: as.info, Node: H8/300 Floating Point, Next: H8/300 Directives, Prev: H8/300 Syntax, Up: H8/300-Dependent
-
-8.8.3 Floating Point
---------------------
-
-The H8/300 family has no hardware floating point, but the `.float'
-directive generates IEEE floating-point numbers for compatibility with
-other development tools.
-
-
-File: as.info, Node: H8/300 Directives, Next: H8/300 Opcodes, Prev: H8/300 Floating Point, Up: H8/300-Dependent
-
-8.8.4 H8/300 Machine Directives
--------------------------------
-
-`as' has the following machine-dependent directives for the H8/300:
-
-`.h8300h'
- Recognize and emit additional instructions for the H8/300H
- variant, and also make `.int' emit 32-bit numbers rather than the
- usual (16-bit) for the H8/300 family.
-
-`.h8300s'
- Recognize and emit additional instructions for the H8S variant, and
- also make `.int' emit 32-bit numbers rather than the usual (16-bit)
- for the H8/300 family.
-
-`.h8300hn'
- Recognize and emit additional instructions for the H8/300H variant
- in normal mode, and also make `.int' emit 32-bit numbers rather
- than the usual (16-bit) for the H8/300 family.
-
-`.h8300sn'
- Recognize and emit additional instructions for the H8S variant in
- normal mode, and also make `.int' emit 32-bit numbers rather than
- the usual (16-bit) for the H8/300 family.
-
- On the H8/300 family (including the H8/300H) `.word' directives
-generate 16-bit numbers.
-
-
-File: as.info, Node: H8/300 Opcodes, Prev: H8/300 Directives, Up: H8/300-Dependent
-
-8.8.5 Opcodes
--------------
-
-For detailed information on the H8/300 machine instruction set, see
-`H8/300 Series Programming Manual'. For information specific to the
-H8/300H, see `H8/300H Series Programming Manual' (Renesas).
-
- `as' implements all the standard H8/300 opcodes. No additional
-pseudo-instructions are needed on this family.
-
- The following table summarizes the H8/300 opcodes, and their
-arguments. Entries marked `*' are opcodes used only on the H8/300H.
-
- Legend:
- Rs source register
- Rd destination register
- abs absolute address
- imm immediate data
- disp:N N-bit displacement from a register
- pcrel:N N-bit displacement relative to program counter
-
- add.b #imm,rd * andc #imm,ccr
- add.b rs,rd band #imm,rd
- add.w rs,rd band #imm,@rd
- * add.w #imm,rd band #imm,@abs:8
- * add.l rs,rd bra pcrel:8
- * add.l #imm,rd * bra pcrel:16
- adds #imm,rd bt pcrel:8
- addx #imm,rd * bt pcrel:16
- addx rs,rd brn pcrel:8
- and.b #imm,rd * brn pcrel:16
- and.b rs,rd bf pcrel:8
- * and.w rs,rd * bf pcrel:16
- * and.w #imm,rd bhi pcrel:8
- * and.l #imm,rd * bhi pcrel:16
- * and.l rs,rd bls pcrel:8
-
- * bls pcrel:16 bld #imm,rd
- bcc pcrel:8 bld #imm,@rd
- * bcc pcrel:16 bld #imm,@abs:8
- bhs pcrel:8 bnot #imm,rd
- * bhs pcrel:16 bnot #imm,@rd
- bcs pcrel:8 bnot #imm,@abs:8
- * bcs pcrel:16 bnot rs,rd
- blo pcrel:8 bnot rs,@rd
- * blo pcrel:16 bnot rs,@abs:8
- bne pcrel:8 bor #imm,rd
- * bne pcrel:16 bor #imm,@rd
- beq pcrel:8 bor #imm,@abs:8
- * beq pcrel:16 bset #imm,rd
- bvc pcrel:8 bset #imm,@rd
- * bvc pcrel:16 bset #imm,@abs:8
- bvs pcrel:8 bset rs,rd
- * bvs pcrel:16 bset rs,@rd
- bpl pcrel:8 bset rs,@abs:8
- * bpl pcrel:16 bsr pcrel:8
- bmi pcrel:8 bsr pcrel:16
- * bmi pcrel:16 bst #imm,rd
- bge pcrel:8 bst #imm,@rd
- * bge pcrel:16 bst #imm,@abs:8
- blt pcrel:8 btst #imm,rd
- * blt pcrel:16 btst #imm,@rd
- bgt pcrel:8 btst #imm,@abs:8
- * bgt pcrel:16 btst rs,rd
- ble pcrel:8 btst rs,@rd
- * ble pcrel:16 btst rs,@abs:8
- bclr #imm,rd bxor #imm,rd
- bclr #imm,@rd bxor #imm,@rd
- bclr #imm,@abs:8 bxor #imm,@abs:8
- bclr rs,rd cmp.b #imm,rd
- bclr rs,@rd cmp.b rs,rd
- bclr rs,@abs:8 cmp.w rs,rd
- biand #imm,rd cmp.w rs,rd
- biand #imm,@rd * cmp.w #imm,rd
- biand #imm,@abs:8 * cmp.l #imm,rd
- bild #imm,rd * cmp.l rs,rd
- bild #imm,@rd daa rs
- bild #imm,@abs:8 das rs
- bior #imm,rd dec.b rs
- bior #imm,@rd * dec.w #imm,rd
- bior #imm,@abs:8 * dec.l #imm,rd
- bist #imm,rd divxu.b rs,rd
- bist #imm,@rd * divxu.w rs,rd
- bist #imm,@abs:8 * divxs.b rs,rd
- bixor #imm,rd * divxs.w rs,rd
- bixor #imm,@rd eepmov
- bixor #imm,@abs:8 * eepmovw
-
- * exts.w rd mov.w rs,@abs:16
- * exts.l rd * mov.l #imm,rd
- * extu.w rd * mov.l rs,rd
- * extu.l rd * mov.l @rs,rd
- inc rs * mov.l @(disp:16,rs),rd
- * inc.w #imm,rd * mov.l @(disp:24,rs),rd
- * inc.l #imm,rd * mov.l @rs+,rd
- jmp @rs * mov.l @abs:16,rd
- jmp abs * mov.l @abs:24,rd
- jmp @@abs:8 * mov.l rs,@rd
- jsr @rs * mov.l rs,@(disp:16,rd)
- jsr abs * mov.l rs,@(disp:24,rd)
- jsr @@abs:8 * mov.l rs,@-rd
- ldc #imm,ccr * mov.l rs,@abs:16
- ldc rs,ccr * mov.l rs,@abs:24
- * ldc @abs:16,ccr movfpe @abs:16,rd
- * ldc @abs:24,ccr movtpe rs,@abs:16
- * ldc @(disp:16,rs),ccr mulxu.b rs,rd
- * ldc @(disp:24,rs),ccr * mulxu.w rs,rd
- * ldc @rs+,ccr * mulxs.b rs,rd
- * ldc @rs,ccr * mulxs.w rs,rd
- * mov.b @(disp:24,rs),rd neg.b rs
- * mov.b rs,@(disp:24,rd) * neg.w rs
- mov.b @abs:16,rd * neg.l rs
- mov.b rs,rd nop
- mov.b @abs:8,rd not.b rs
- mov.b rs,@abs:8 * not.w rs
- mov.b rs,rd * not.l rs
- mov.b #imm,rd or.b #imm,rd
- mov.b @rs,rd or.b rs,rd
- mov.b @(disp:16,rs),rd * or.w #imm,rd
- mov.b @rs+,rd * or.w rs,rd
- mov.b @abs:8,rd * or.l #imm,rd
- mov.b rs,@rd * or.l rs,rd
- mov.b rs,@(disp:16,rd) orc #imm,ccr
- mov.b rs,@-rd pop.w rs
- mov.b rs,@abs:8 * pop.l rs
- mov.w rs,@rd push.w rs
- * mov.w @(disp:24,rs),rd * push.l rs
- * mov.w rs,@(disp:24,rd) rotl.b rs
- * mov.w @abs:24,rd * rotl.w rs
- * mov.w rs,@abs:24 * rotl.l rs
- mov.w rs,rd rotr.b rs
- mov.w #imm,rd * rotr.w rs
- mov.w @rs,rd * rotr.l rs
- mov.w @(disp:16,rs),rd rotxl.b rs
- mov.w @rs+,rd * rotxl.w rs
- mov.w @abs:16,rd * rotxl.l rs
- mov.w rs,@(disp:16,rd) rotxr.b rs
- mov.w rs,@-rd * rotxr.w rs
-
- * rotxr.l rs * stc ccr,@(disp:24,rd)
- bpt * stc ccr,@-rd
- rte * stc ccr,@abs:16
- rts * stc ccr,@abs:24
- shal.b rs sub.b rs,rd
- * shal.w rs sub.w rs,rd
- * shal.l rs * sub.w #imm,rd
- shar.b rs * sub.l rs,rd
- * shar.w rs * sub.l #imm,rd
- * shar.l rs subs #imm,rd
- shll.b rs subx #imm,rd
- * shll.w rs subx rs,rd
- * shll.l rs * trapa #imm
- shlr.b rs xor #imm,rd
- * shlr.w rs xor rs,rd
- * shlr.l rs * xor.w #imm,rd
- sleep * xor.w rs,rd
- stc ccr,rd * xor.l #imm,rd
- * stc ccr,@rs * xor.l rs,rd
- * stc ccr,@(disp:16,rd) xorc #imm,ccr
-
- Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined
-with variants using the suffixes `.b', `.w', and `.l' to specify the
-size of a memory operand. `as' supports these suffixes, but does not
-require them; since one of the operands is always a register, `as' can
-deduce the correct size.
-
- For example, since `r0' refers to a 16-bit register,
- mov r0,@foo
-is equivalent to
- mov.w r0,@foo
-
- If you use the size suffixes, `as' issues a warning when the suffix
-and the register size do not match.
-
-
-File: as.info, Node: HPPA-Dependent, Next: ESA/390-Dependent, Prev: H8/300-Dependent, Up: Machine Dependencies
-
-8.9 HPPA Dependent Features
-===========================
-
-* Menu:
-
-* HPPA Notes:: Notes
-* HPPA Options:: Options
-* HPPA Syntax:: Syntax
-* HPPA Floating Point:: Floating Point
-* HPPA Directives:: HPPA Machine Directives
-* HPPA Opcodes:: Opcodes
-
-
-File: as.info, Node: HPPA Notes, Next: HPPA Options, Up: HPPA-Dependent
-
-8.9.1 Notes
------------
-
-As a back end for GNU CC `as' has been throughly tested and should work
-extremely well. We have tested it only minimally on hand written
-assembly code and no one has tested it much on the assembly output from
-the HP compilers.
-
- The format of the debugging sections has changed since the original
-`as' port (version 1.3X) was released; therefore, you must rebuild all
-HPPA objects and libraries with the new assembler so that you can debug
-the final executable.
-
- The HPPA `as' port generates a small subset of the relocations
-available in the SOM and ELF object file formats. Additional relocation
-support will be added as it becomes necessary.
-
-
-File: as.info, Node: HPPA Options, Next: HPPA Syntax, Prev: HPPA Notes, Up: HPPA-Dependent
-
-8.9.2 Options
--------------
-
-`as' has no machine-dependent command-line options for the HPPA.
-
-
-File: as.info, Node: HPPA Syntax, Next: HPPA Floating Point, Prev: HPPA Options, Up: HPPA-Dependent
-
-8.9.3 Syntax
-------------
-
-The assembler syntax closely follows the HPPA instruction set reference
-manual; assembler directives and general syntax closely follow the HPPA
-assembly language reference manual, with a few noteworthy differences.
-
- First, a colon may immediately follow a label definition. This is
-simply for compatibility with how most assembly language programmers
-write code.
-
- Some obscure expression parsing problems may affect hand written
-code which uses the `spop' instructions, or code which makes significant
-use of the `!' line separator.
-
- `as' is much less forgiving about missing arguments and other
-similar oversights than the HP assembler. `as' notifies you of missing
-arguments as syntax errors; this is regarded as a feature, not a bug.
-
- Finally, `as' allows you to use an external symbol without
-explicitly importing the symbol. _Warning:_ in the future this will be
-an error for HPPA targets.
-
- Special characters for HPPA targets include:
-
- `;' is the line comment character.
-
- `!' can be used instead of a newline to separate statements.
-
- Since `$' has no special meaning, you may use it in symbol names.
-
-
-File: as.info, Node: HPPA Floating Point, Next: HPPA Directives, Prev: HPPA Syntax, Up: HPPA-Dependent
-
-8.9.4 Floating Point
---------------------
-
-The HPPA family uses IEEE floating-point numbers.
-
-
-File: as.info, Node: HPPA Directives, Next: HPPA Opcodes, Prev: HPPA Floating Point, Up: HPPA-Dependent
-
-8.9.5 HPPA Assembler Directives
--------------------------------
-
-`as' for the HPPA supports many additional directives for compatibility
-with the native assembler. This section describes them only briefly.
-For detailed information on HPPA-specific assembler directives, see
-`HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001).
-
- `as' does _not_ support the following assembler directives described
-in the HP manual:
-
- .endm .liston
- .enter .locct
- .leave .macro
- .listoff
-
- Beyond those implemented for compatibility, `as' supports one
-additional assembler directive for the HPPA: `.param'. It conveys
-register argument locations for static functions. Its syntax closely
-follows the `.export' directive.
-
- These are the additional directives in `as' for the HPPA:
-
-`.block N'
-`.blockz N'
- Reserve N bytes of storage, and initialize them to zero.
-
-`.call'
- Mark the beginning of a procedure call. Only the special case
- with _no arguments_ is allowed.
-
-`.callinfo [ PARAM=VALUE, ... ] [ FLAG, ... ]'
- Specify a number of parameters and flags that define the
- environment for a procedure.
-
- PARAM may be any of `frame' (frame size), `entry_gr' (end of
- general register range), `entry_fr' (end of float register range),
- `entry_sr' (end of space register range).
-
- The values for FLAG are `calls' or `caller' (proc has
- subroutines), `no_calls' (proc does not call subroutines),
- `save_rp' (preserve return pointer), `save_sp' (proc preserves
- stack pointer), `no_unwind' (do not unwind this proc), `hpux_int'
- (proc is interrupt routine).
-
-`.code'
- Assemble into the standard section called `$TEXT$', subsection
- `$CODE$'.
-
-`.copyright "STRING"'
- In the SOM object format, insert STRING into the object code,
- marked as a copyright string.
-
-`.copyright "STRING"'
- In the ELF object format, insert STRING into the object code,
- marked as a version string.
-
-`.enter'
- Not yet supported; the assembler rejects programs containing this
- directive.
-
-`.entry'
- Mark the beginning of a procedure.
-
-`.exit'
- Mark the end of a procedure.
-
-`.export NAME [ ,TYP ] [ ,PARAM=R ]'
- Make a procedure NAME available to callers. TYP, if present, must
- be one of `absolute', `code' (ELF only, not SOM), `data', `entry',
- `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'.
-
- PARAM, if present, provides either relocation information for the
- procedure arguments and result, or a privilege level. PARAM may be
- `argwN' (where N ranges from `0' to `3', and indicates one of four
- one-word arguments); `rtnval' (the procedure's result); or
- `priv_lev' (privilege level). For arguments or the result, R
- specifies how to relocate, and must be one of `no' (not
- relocatable), `gr' (argument is in general register), `fr' (in
- floating point register), or `fu' (upper half of float register).
- For `priv_lev', R is an integer.
-
-`.half N'
- Define a two-byte integer constant N; synonym for the portable
- `as' directive `.short'.
-
-`.import NAME [ ,TYP ]'
- Converse of `.export'; make a procedure available to call. The
- arguments use the same conventions as the first two arguments for
- `.export'.
-
-`.label NAME'
- Define NAME as a label for the current assembly location.
-
-`.leave'
- Not yet supported; the assembler rejects programs containing this
- directive.
-
-`.origin LC'
- Advance location counter to LC. Synonym for the `as' portable
- directive `.org'.
-
-`.param NAME [ ,TYP ] [ ,PARAM=R ]'
- Similar to `.export', but used for static procedures.
-
-`.proc'
- Use preceding the first statement of a procedure.
-
-`.procend'
- Use following the last statement of a procedure.
-
-`LABEL .reg EXPR'
- Synonym for `.equ'; define LABEL with the absolute expression EXPR
- as its value.
-
-`.space SECNAME [ ,PARAMS ]'
- Switch to section SECNAME, creating a new section by that name if
- necessary. You may only use PARAMS when creating a new section,
- not when switching to an existing one. SECNAME may identify a
- section by number rather than by name.
-
- If specified, the list PARAMS declares attributes of the section,
- identified by keywords. The keywords recognized are `spnum=EXP'
- (identify this section by the number EXP, an absolute expression),
- `sort=EXP' (order sections according to this sort key when linking;
- EXP is an absolute expression), `unloadable' (section contains no
- loadable data), `notdefined' (this section defined elsewhere), and
- `private' (data in this section not available to other programs).
-
-`.spnum SECNAM'
- Allocate four bytes of storage, and initialize them with the
- section number of the section named SECNAM. (You can define the
- section number with the HPPA `.space' directive.)
-
-`.string "STR"'
- Copy the characters in the string STR to the object file. *Note
- Strings: Strings, for information on escape sequences you can use
- in `as' strings.
-
- _Warning!_ The HPPA version of `.string' differs from the usual
- `as' definition: it does _not_ write a zero byte after copying STR.
-
-`.stringz "STR"'
- Like `.string', but appends a zero byte after copying STR to object
- file.
-
-`.subspa NAME [ ,PARAMS ]'
-`.nsubspa NAME [ ,PARAMS ]'
- Similar to `.space', but selects a subsection NAME within the
- current section. You may only specify PARAMS when you create a
- subsection (in the first instance of `.subspa' for this NAME).
-
- If specified, the list PARAMS declares attributes of the
- subsection, identified by keywords. The keywords recognized are
- `quad=EXPR' ("quadrant" for this subsection), `align=EXPR'
- (alignment for beginning of this subsection; a power of two),
- `access=EXPR' (value for "access rights" field), `sort=EXPR'
- (sorting order for this subspace in link), `code_only' (subsection
- contains only code), `unloadable' (subsection cannot be loaded
- into memory), `comdat' (subsection is comdat), `common'
- (subsection is common block), `dup_comm' (subsection may have
- duplicate names), or `zero' (subsection is all zeros, do not write
- in object file).
-
- `.nsubspa' always creates a new subspace with the given name, even
- if one with the same name already exists.
-
- `comdat', `common' and `dup_comm' can be used to implement various
- flavors of one-only support when using the SOM linker. The SOM
- linker only supports specific combinations of these flags. The
- details are not documented. A brief description is provided here.
-
- `comdat' provides a form of linkonce support. It is useful for
- both code and data subspaces. A `comdat' subspace has a key symbol
- marked by the `is_comdat' flag or `ST_COMDAT'. Only the first
- subspace for any given key is selected. The key symbol becomes
- universal in shared links. This is similar to the behavior of
- `secondary_def' symbols.
-
- `common' provides Fortran named common support. It is only useful
- for data subspaces. Symbols with the flag `is_common' retain this
- flag in shared links. Referencing a `is_common' symbol in a shared
- library from outside the library doesn't work. Thus, `is_common'
- symbols must be output whenever they are needed.
-
- `common' and `dup_comm' together provide Cobol common support.
- The subspaces in this case must all be the same length.
- Otherwise, this support is similar to the Fortran common support.
-
- `dup_comm' by itself provides a type of one-only support for code.
- Only the first `dup_comm' subspace is selected. There is a rather
- complex algorithm to compare subspaces. Code symbols marked with
- the `dup_common' flag are hidden. This support was intended for
- "C++ duplicate inlines".
-
- A simplified technique is used to mark the flags of symbols based
- on the flags of their subspace. A symbol with the scope
- SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with
- the corresponding settings of `comdat', `common' and `dup_comm'
- from the subspace, respectively. This avoids having to introduce
- additional directives to mark these symbols. The HP assembler
- sets `is_common' from `common'. However, it doesn't set the
- `dup_common' from `dup_comm'. It doesn't have `comdat' support.
-
-`.version "STR"'
- Write STR as version identifier in object code.
-
-
-File: as.info, Node: HPPA Opcodes, Prev: HPPA Directives, Up: HPPA-Dependent
-
-8.9.6 Opcodes
--------------
-
-For detailed information on the HPPA machine instruction set, see
-`PA-RISC Architecture and Instruction Set Reference Manual' (HP
-09740-90039).
-
-
-File: as.info, Node: ESA/390-Dependent, Next: i386-Dependent, Prev: HPPA-Dependent, Up: Machine Dependencies
-
-8.10 ESA/390 Dependent Features
-===============================
-
-* Menu:
-
-* ESA/390 Notes:: Notes
-* ESA/390 Options:: Options
-* ESA/390 Syntax:: Syntax
-* ESA/390 Floating Point:: Floating Point
-* ESA/390 Directives:: ESA/390 Machine Directives
-* ESA/390 Opcodes:: Opcodes
-
-
-File: as.info, Node: ESA/390 Notes, Next: ESA/390 Options, Up: ESA/390-Dependent
-
-8.10.1 Notes
-------------
-
-The ESA/390 `as' port is currently intended to be a back-end for the
-GNU CC compiler. It is not HLASM compatible, although it does support
-a subset of some of the HLASM directives. The only supported binary
-file format is ELF; none of the usual MVS/VM/OE/USS object file
-formats, such as ESD or XSD, are supported.
-
- When used with the GNU CC compiler, the ESA/390 `as' will produce
-correct, fully relocated, functional binaries, and has been used to
-compile and execute large projects. However, many aspects should still
-be considered experimental; these include shared library support,
-dynamically loadable objects, and any relocation other than the 31-bit
-relocation.
-
-
-File: as.info, Node: ESA/390 Options, Next: ESA/390 Syntax, Prev: ESA/390 Notes, Up: ESA/390-Dependent
-
-8.10.2 Options
---------------
-
-`as' has no machine-dependent command-line options for the ESA/390.
-
-
-File: as.info, Node: ESA/390 Syntax, Next: ESA/390 Floating Point, Prev: ESA/390 Options, Up: ESA/390-Dependent
-
-8.10.3 Syntax
--------------
-
-The opcode/operand syntax follows the ESA/390 Principles of Operation
-manual; assembler directives and general syntax are loosely based on the
-prevailing AT&T/SVR4/ELF/Solaris style notation. HLASM-style directives
-are _not_ supported for the most part, with the exception of those
-described herein.
-
- A leading dot in front of directives is optional, and the case of
-directives is ignored; thus for example, .using and USING have the same
-effect.
-
- A colon may immediately follow a label definition. This is simply
-for compatibility with how most assembly language programmers write
-code.
-
- `#' is the line comment character.
-
- `;' can be used instead of a newline to separate statements.
-
- Since `$' has no special meaning, you may use it in symbol names.
-
- Registers can be given the symbolic names r0..r15, fp0, fp2, fp4,
-fp6. By using thesse symbolic names, `as' can detect simple syntax
-errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca for
-r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base
-for r3 and rpgt or r.pgt for r4.
-
- `*' is the current location counter. Unlike `.' it is always
-relative to the last USING directive. Note that this means that
-expressions cannot use multiplication, as any occurrence of `*' will be
-interpreted as a location counter.
-
- All labels are relative to the last USING. Thus, branches to a label
-always imply the use of base+displacement.
-
- Many of the usual forms of address constants / address literals are
-supported. Thus,
- .using *,r3
- L r15,=A(some_routine)
- LM r6,r7,=V(some_longlong_extern)
- A r1,=F'12'
- AH r0,=H'42'
- ME r6,=E'3.1416'
- MD r6,=D'3.14159265358979'
- O r6,=XL4'cacad0d0'
- .ltorg
- should all behave as expected: that is, an entry in the literal pool
-will be created (or reused if it already exists), and the instruction
-operands will be the displacement into the literal pool using the
-current base register (as last declared with the `.using' directive).
-
-
-File: as.info, Node: ESA/390 Floating Point, Next: ESA/390 Directives, Prev: ESA/390 Syntax, Up: ESA/390-Dependent
-
-8.10.4 Floating Point
----------------------
-
-The assembler generates only IEEE floating-point numbers. The older
-floating point formats are not supported.
-
-
-File: as.info, Node: ESA/390 Directives, Next: ESA/390 Opcodes, Prev: ESA/390 Floating Point, Up: ESA/390-Dependent
-
-8.10.5 ESA/390 Assembler Directives
------------------------------------
-
-`as' for the ESA/390 supports all of the standard ELF/SVR4 assembler
-directives that are documented in the main part of this documentation.
-Several additional directives are supported in order to implement the
-ESA/390 addressing model. The most important of these are `.using' and
-`.ltorg'
-
- These are the additional directives in `as' for the ESA/390:
-
-`.dc'
- A small subset of the usual DC directive is supported.
-
-`.drop REGNO'
- Stop using REGNO as the base register. The REGNO must have been
- previously declared with a `.using' directive in the same section
- as the current section.
-
-`.ebcdic STRING'
- Emit the EBCDIC equivalent of the indicated string. The emitted
- string will be null terminated. Note that the directives
- `.string' etc. emit ascii strings by default.
-
-`EQU'
- The standard HLASM-style EQU directive is not supported; however,
- the standard `as' directive .equ can be used to the same effect.
-
-`.ltorg'
- Dump the literal pool accumulated so far; begin a new literal pool.
- The literal pool will be written in the current section; in order
- to generate correct assembly, a `.using' must have been previously
- specified in the same section.
-
-`.using EXPR,REGNO'
- Use REGNO as the base register for all subsequent RX, RS, and SS
- form instructions. The EXPR will be evaluated to obtain the base
- address; usually, EXPR will merely be `*'.
-
- This assembler allows two `.using' directives to be simultaneously
- outstanding, one in the `.text' section, and one in another section
- (typically, the `.data' section). This feature allows dynamically
- loaded objects to be implemented in a relatively straightforward
- way. A `.using' directive must always be specified in the `.text'
- section; this will specify the base register that will be used for
- branches in the `.text' section. A second `.using' may be
- specified in another section; this will specify the base register
- that is used for non-label address literals. When a second
- `.using' is specified, then the subsequent `.ltorg' must be put in
- the same section; otherwise an error will result.
-
- Thus, for example, the following code uses `r3' to address branch
- targets and `r4' to address the literal pool, which has been
- written to the `.data' section. The is, the constants
- `=A(some_routine)', `=H'42'' and `=E'3.1416'' will all appear in
- the `.data' section.
-
- .data
- .using LITPOOL,r4
- .text
- BASR r3,0
- .using *,r3
- B START
- .long LITPOOL
- START:
- L r4,4(,r3)
- L r15,=A(some_routine)
- LTR r15,r15
- BNE LABEL
- AH r0,=H'42'
- LABEL:
- ME r6,=E'3.1416'
- .data
- LITPOOL:
- .ltorg
-
- Note that this dual-`.using' directive semantics extends and is
- not compatible with HLASM semantics. Note that this assembler
- directive does not support the full range of HLASM semantics.
-
-
-
-File: as.info, Node: ESA/390 Opcodes, Prev: ESA/390 Directives, Up: ESA/390-Dependent
-
-8.10.6 Opcodes
---------------
-
-For detailed information on the ESA/390 machine instruction set, see
-`ESA/390 Principles of Operation' (IBM Publication Number DZ9AR004).
-
-
-File: as.info, Node: i386-Dependent, Next: i860-Dependent, Prev: ESA/390-Dependent, Up: Machine Dependencies
-
-8.11 80386 Dependent Features
-=============================
-
- The i386 version `as' supports both the original Intel 386
-architecture in both 16 and 32-bit mode as well as AMD x86-64
-architecture extending the Intel architecture to 64-bits.
-
-* Menu:
-
-* i386-Options:: Options
-* i386-Syntax:: AT&T Syntax versus Intel Syntax
-* i386-Mnemonics:: Instruction Naming
-* i386-Regs:: Register Naming
-* i386-Prefixes:: Instruction Prefixes
-* i386-Memory:: Memory References
-* i386-Jumps:: Handling of Jump Instructions
-* i386-Float:: Floating Point
-* i386-SIMD:: Intel's MMX and AMD's 3DNow! SIMD Operations
-* i386-16bit:: Writing 16-bit Code
-* i386-Arch:: Specifying an x86 CPU architecture
-* i386-Bugs:: AT&T Syntax bugs
-* i386-Notes:: Notes
-
-
-File: as.info, Node: i386-Options, Next: i386-Syntax, Up: i386-Dependent
-
-8.11.1 Options
---------------
-
-The i386 version of `as' has a few machine dependent options:
-
-`--32 | --64'
- Select the word size, either 32 bits or 64 bits. Selecting 32-bit
- implies Intel i386 architecture, while 64-bit implies AMD x86-64
- architecture.
-
- These options are only available with the ELF object file format,
- and require that the necessary BFD support has been included (on a
- 32-bit platform you have to add -enable-64-bit-bfd to configure
- enable 64-bit usage and use x86-64 as target platform).
-
-`-n'
- By default, x86 GAS replaces multiple nop instructions used for
- alignment within code sections with multi-byte nop instructions
- such as leal 0(%esi,1),%esi. This switch disables the
- optimization.
-
-`--divide'
- On SVR4-derived platforms, the character `/' is treated as a
- comment character, which means that it cannot be used in
- expressions. The `--divide' option turns `/' into a normal
- character. This does not disable `/' at the beginning of a line
- starting a comment, or affect using `#' for starting a comment.
-
-
-
-File: as.info, Node: i386-Syntax, Next: i386-Mnemonics, Prev: i386-Options, Up: i386-Dependent
-
-8.11.2 AT&T Syntax versus Intel Syntax
---------------------------------------
-
-`as' now supports assembly using Intel assembler syntax.
-`.intel_syntax' selects Intel mode, and `.att_syntax' switches back to
-the usual AT&T mode for compatibility with the output of `gcc'. Either
-of these directives may have an optional argument, `prefix', or
-`noprefix' specifying whether registers require a `%' prefix. AT&T
-System V/386 assembler syntax is quite different from Intel syntax. We
-mention these differences because almost all 80386 documents use Intel
-syntax. Notable differences between the two syntaxes are:
-
- * AT&T immediate operands are preceded by `$'; Intel immediate
- operands are undelimited (Intel `push 4' is AT&T `pushl $4').
- AT&T register operands are preceded by `%'; Intel register operands
- are undelimited. AT&T absolute (as opposed to PC relative)
- jump/call operands are prefixed by `*'; they are undelimited in
- Intel syntax.
-
- * AT&T and Intel syntax use the opposite order for source and
- destination operands. Intel `add eax, 4' is `addl $4, %eax'. The
- `source, dest' convention is maintained for compatibility with
- previous Unix assemblers. Note that instructions with more than
- one source operand, such as the `enter' instruction, do _not_ have
- reversed order. *Note i386-Bugs::.
-
- * In AT&T syntax the size of memory operands is determined from the
- last character of the instruction mnemonic. Mnemonic suffixes of
- `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long
- (32-bit) and quadruple word (64-bit) memory references. Intel
- syntax accomplishes this by prefixing memory operands (_not_ the
- instruction mnemonics) with `byte ptr', `word ptr', `dword ptr'
- and `qword ptr'. Thus, Intel `mov al, byte ptr FOO' is `movb FOO,
- %al' in AT&T syntax.
-
- * Immediate form long jumps and calls are `lcall/ljmp $SECTION,
- $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far
- SECTION:OFFSET'. Also, the far return instruction is `lret
- $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far
- STACK-ADJUST'.
-
- * The AT&T assembler does not provide support for multiple section
- programs. Unix style systems expect all programs to be single
- sections.
-
-
-File: as.info, Node: i386-Mnemonics, Next: i386-Regs, Prev: i386-Syntax, Up: i386-Dependent
-
-8.11.3 Instruction Naming
--------------------------
-
-Instruction mnemonics are suffixed with one character modifiers which
-specify the size of operands. The letters `b', `w', `l' and `q'
-specify byte, word, long and quadruple word operands. If no suffix is
-specified by an instruction then `as' tries to fill in the missing
-suffix based on the destination register operand (the last one by
-convention). Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx';
-also, `mov $1, %bx' is equivalent to `movw $1, bx'. Note that this is
-incompatible with the AT&T Unix assembler which assumes that a missing
-mnemonic suffix implies long operand size. (This incompatibility does
-not affect compiler output since compilers always explicitly specify
-the mnemonic suffix.)
-
- Almost all instructions have the same names in AT&T and Intel format.
-There are a few exceptions. The sign extend and zero extend
-instructions need two sizes to specify them. They need a size to
-sign/zero extend _from_ and a size to zero extend _to_. This is
-accomplished by using two instruction mnemonic suffixes in AT&T syntax.
-Base names for sign extend and zero extend are `movs...' and `movz...'
-in AT&T syntax (`movsx' and `movzx' in Intel syntax). The instruction
-mnemonic suffixes are tacked on to this base name, the _from_ suffix
-before the _to_ suffix. Thus, `movsbl %al, %edx' is AT&T syntax for
-"move sign extend _from_ %al _to_ %edx." Possible suffixes, thus, are
-`bl' (from byte to long), `bw' (from byte to word), `wl' (from word to
-long), `bq' (from byte to quadruple word), `wq' (from word to quadruple
-word), and `lq' (from long to quadruple word).
-
- The Intel-syntax conversion instructions
-
- * `cbw' -- sign-extend byte in `%al' to word in `%ax',
-
- * `cwde' -- sign-extend word in `%ax' to long in `%eax',
-
- * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax',
-
- * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax',
-
- * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64
- only),
-
- * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax'
- (x86-64 only),
-
-are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T
-naming. `as' accepts either naming for these instructions.
-
- Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax,
-but are `call far' and `jump far' in Intel convention.
-
-
-File: as.info, Node: i386-Regs, Next: i386-Prefixes, Prev: i386-Mnemonics, Up: i386-Dependent
-
-8.11.4 Register Naming
-----------------------
-
-Register operands are always prefixed with `%'. The 80386 registers
-consist of
-
- * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx',
- `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp'
- (the stack pointer).
-
- * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di',
- `%si', `%bp', and `%sp'.
-
- * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl',
- `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax',
- `%bx', `%cx', and `%dx')
-
- * the 6 section registers `%cs' (code section), `%ds' (data
- section), `%ss' (stack section), `%es', `%fs', and `%gs'.
-
- * the 3 processor control registers `%cr0', `%cr2', and `%cr3'.
-
- * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and
- `%db7'.
-
- * the 2 test registers `%tr6' and `%tr7'.
-
- * the 8 floating point register stack `%st' or equivalently
- `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)',
- `%st(6)', and `%st(7)'. These registers are overloaded by 8 MMX
- registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6'
- and `%mm7'.
-
- * the 8 SSE registers registers `%xmm0', `%xmm1', `%xmm2', `%xmm3',
- `%xmm4', `%xmm5', `%xmm6' and `%xmm7'.
-
- The AMD x86-64 architecture extends the register set by:
-
- * enhancing the 8 32-bit registers to 64-bit: `%rax' (the
- accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the
- frame pointer), `%rsp' (the stack pointer)
-
- * the 8 extended registers `%r8'-`%r15'.
-
- * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d'
-
- * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w'
-
- * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b'
-
- * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'.
-
- * the 8 debug registers: `%db8'-`%db15'.
-
- * the 8 SSE registers: `%xmm8'-`%xmm15'.
-
-
-File: as.info, Node: i386-Prefixes, Next: i386-Memory, Prev: i386-Regs, Up: i386-Dependent
-
-8.11.5 Instruction Prefixes
----------------------------
-
-Instruction prefixes are used to modify the following instruction. They
-are used to repeat string instructions, to provide section overrides, to
-perform bus lock operations, and to change operand and address sizes.
-(Most instructions that normally operate on 32-bit operands will use
-16-bit operands if the instruction has an "operand size" prefix.)
-Instruction prefixes are best written on the same line as the
-instruction they act upon. For example, the `scas' (scan string)
-instruction is repeated with:
-
- repne scas %es:(%edi),%al
-
- You may also place prefixes on the lines immediately preceding the
-instruction, but this circumvents checks that `as' does with prefixes,
-and will not work with all prefixes.
-
- Here is a list of instruction prefixes:
-
- * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'.
- These are automatically added by specifying using the
- SECTION:MEMORY-OPERAND form for memory references.
-
- * Operand/Address size prefixes `data16' and `addr16' change 32-bit
- operands/addresses into 16-bit operands/addresses, while `data32'
- and `addr32' change 16-bit ones (in a `.code16' section) into
- 32-bit operands/addresses. These prefixes _must_ appear on the
- same line of code as the instruction they modify. For example, in
- a 16-bit `.code16' section, you might write:
-
- addr32 jmpl *(%ebx)
-
- * The bus lock prefix `lock' inhibits interrupts during execution of
- the instruction it precedes. (This is only valid with certain
- instructions; see a 80386 manual for details).
-
- * The wait for coprocessor prefix `wait' waits for the coprocessor to
- complete the current instruction. This should never be needed for
- the 80386/80387 combination.
-
- * The `rep', `repe', and `repne' prefixes are added to string
- instructions to make them repeat `%ecx' times (`%cx' times if the
- current address size is 16-bits).
-
- * The `rex' family of prefixes is used by x86-64 to encode
- extensions to i386 instruction set. The `rex' prefix has four
- bits -- an operand size overwrite (`64') used to change operand
- size from 32-bit to 64-bit and X, Y and Z extensions bits used to
- extend the register set.
-
- You may write the `rex' prefixes directly. The `rex64xyz'
- instruction emits `rex' prefix with all the bits set. By omitting
- the `64', `x', `y' or `z' you may write other prefixes as well.
- Normally, there is no need to write the prefixes explicitly, since
- gas will automatically generate them based on the instruction
- operands.
-
-
-File: as.info, Node: i386-Memory, Next: i386-Jumps, Prev: i386-Prefixes, Up: i386-Dependent
-
-8.11.6 Memory References
-------------------------
-
-An Intel syntax indirect memory reference of the form
-
- SECTION:[BASE + INDEX*SCALE + DISP]
-
-is translated into the AT&T syntax
-
- SECTION:DISP(BASE, INDEX, SCALE)
-
-where BASE and INDEX are the optional 32-bit base and index registers,
-DISP is the optional displacement, and SCALE, taking the values 1, 2,
-4, and 8, multiplies INDEX to calculate the address of the operand. If
-no SCALE is specified, SCALE is taken to be 1. SECTION specifies the
-optional section register for the memory operand, and may override the
-default section register (see a 80386 manual for section register
-defaults). Note that section overrides in AT&T syntax _must_ be
-preceded by a `%'. If you specify a section override which coincides
-with the default section register, `as' does _not_ output any section
-register override prefixes to assemble the given instruction. Thus,
-section overrides can be specified to emphasize which section register
-is used for a given memory operand.
-
- Here are some examples of Intel and AT&T style memory references:
-
-AT&T: `-4(%ebp)', Intel: `[ebp - 4]'
- BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default
- section is used (`%ss' for addressing with `%ebp' as the base
- register). INDEX, SCALE are both missing.
-
-AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]'
- INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'. All other
- fields are missing. The section register here defaults to `%ds'.
-
-AT&T: `foo(,1)'; Intel `[foo]'
- This uses the value pointed to by `foo' as a memory operand. Note
- that BASE and INDEX are both missing, but there is only _one_ `,'.
- This is a syntactic exception.
-
-AT&T: `%gs:foo'; Intel `gs:foo'
- This selects the contents of the variable `foo' with section
- register SECTION being `%gs'.
-
- Absolute (as opposed to PC relative) call and jump operands must be
-prefixed with `*'. If no `*' is specified, `as' always chooses PC
-relative addressing for jump/call labels.
-
- Any instruction that has a memory operand, but no register operand,
-_must_ specify its size (byte, word, long, or quadruple) with an
-instruction mnemonic suffix (`b', `w', `l' or `q', respectively).
-
- The x86-64 architecture adds an RIP (instruction pointer relative)
-addressing. This addressing mode is specified by using `rip' as a base
-register. Only constant offsets are valid. For example:
-
-AT&T: `1234(%rip)', Intel: `[rip + 1234]'
- Points to the address 1234 bytes past the end of the current
- instruction.
-
-AT&T: `symbol(%rip)', Intel: `[rip + symbol]'
- Points to the `symbol' in RIP relative way, this is shorter than
- the default absolute addressing.
-
- Other addressing modes remain unchanged in x86-64 architecture,
-except registers used are 64-bit instead of 32-bit.
-
-
-File: as.info, Node: i386-Jumps, Next: i386-Float, Prev: i386-Memory, Up: i386-Dependent
-
-8.11.7 Handling of Jump Instructions
-------------------------------------
-
-Jump instructions are always optimized to use the smallest possible
-displacements. This is accomplished by using byte (8-bit) displacement
-jumps whenever the target is sufficiently close. If a byte displacement
-is insufficient a long displacement is used. We do not support word
-(16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump
-instruction with the `data16' instruction prefix), since the 80386
-insists upon masking `%eip' to 16 bits after the word displacement is
-added. (See also *note i386-Arch::)
-
- Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz'
-and `loopne' instructions only come in byte displacements, so that if
-you use these instructions (`gcc' does not use them) you may get an
-error message (and incorrect code). The AT&T 80386 assembler tries to
-get around this problem by expanding `jcxz foo' to
-
- jcxz cx_zero
- jmp cx_nonzero
- cx_zero: jmp foo
- cx_nonzero:
-
-
-File: as.info, Node: i386-Float, Next: i386-SIMD, Prev: i386-Jumps, Up: i386-Dependent
-
-8.11.8 Floating Point
----------------------
-
-All 80387 floating point types except packed BCD are supported. (BCD
-support may be added without much difficulty). These data types are
-16-, 32-, and 64- bit integers, and single (32-bit), double (64-bit),
-and extended (80-bit) precision floating point. Each supported type
-has an instruction mnemonic suffix and a constructor associated with
-it. Instruction mnemonic suffixes specify the operand's data type.
-Constructors build these data types into memory.
-
- * Floating point constructors are `.float' or `.single', `.double',
- and `.tfloat' for 32-, 64-, and 80-bit formats. These correspond
- to instruction mnemonic suffixes `s', `l', and `t'. `t' stands for
- 80-bit (ten byte) real. The 80387 only supports this format via
- the `fldt' (load 80-bit real to stack top) and `fstpt' (store
- 80-bit real and pop stack) instructions.
-
- * Integer constructors are `.word', `.long' or `.int', and `.quad'
- for the 16-, 32-, and 64-bit integer formats. The corresponding
- instruction mnemonic suffixes are `s' (single), `l' (long), and
- `q' (quad). As with the 80-bit real format, the 64-bit `q' format
- is only present in the `fildq' (load quad integer to stack top)
- and `fistpq' (store quad integer and pop stack) instructions.
-
- Register to register operations should not use instruction mnemonic
-suffixes. `fstl %st, %st(1)' will give a warning, and be assembled as
-if you wrote `fst %st, %st(1)', since all register to register
-operations use 80-bit floating point operands. (Contrast this with
-`fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating
-point format, then stores the result in the 4 byte location `mem')
-
-
-File: as.info, Node: i386-SIMD, Next: i386-16bit, Prev: i386-Float, Up: i386-Dependent
-
-8.11.9 Intel's MMX and AMD's 3DNow! SIMD Operations
----------------------------------------------------
-
-`as' supports Intel's MMX instruction set (SIMD instructions for
-integer data), available on Intel's Pentium MMX processors and Pentium
-II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and
-probably others. It also supports AMD's 3DNow! instruction set (SIMD
-instructions for 32-bit floating point data) available on AMD's K6-2
-processor and possibly others in the future.
-
- Currently, `as' does not support Intel's floating point SIMD, Katmai
-(KNI).
-
- The eight 64-bit MMX operands, also used by 3DNow!, are called
-`%mm0', `%mm1', ... `%mm7'. They contain eight 8-bit integers, four
-16-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit
-floating point values. The MMX registers cannot be used at the same
-time as the floating point stack.
-
- See Intel and AMD documentation, keeping in mind that the operand
-order in instructions is reversed from the Intel syntax.
-
-
-File: as.info, Node: i386-16bit, Next: i386-Arch, Prev: i386-SIMD, Up: i386-Dependent
-
-8.11.10 Writing 16-bit Code
----------------------------
-
-While `as' normally writes only "pure" 32-bit i386 code or 64-bit
-x86-64 code depending on the default configuration, it also supports
-writing code to run in real mode or in 16-bit protected mode code
-segments. To do this, put a `.code16' or `.code16gcc' directive before
-the assembly language instructions to be run in 16-bit mode. You can
-switch `as' back to writing normal 32-bit code with the `.code32'
-directive.
-
- `.code16gcc' provides experimental support for generating 16-bit
-code from gcc, and differs from `.code16' in that `call', `ret',
-`enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf'
-instructions default to 32-bit size. This is so that the stack pointer
-is manipulated in the same way over function calls, allowing access to
-function parameters at the same stack offsets as in 32-bit mode.
-`.code16gcc' also automatically adds address size prefixes where
-necessary to use the 32-bit addressing modes that gcc generates.
-
- The code which `as' generates in 16-bit mode will not necessarily
-run on a 16-bit pre-80386 processor. To write code that runs on such a
-processor, you must refrain from using _any_ 32-bit constructs which
-require `as' to output address or operand size prefixes.
-
- Note that writing 16-bit code instructions by explicitly specifying a
-prefix or an instruction mnemonic suffix within a 32-bit code section
-generates different machine instructions than those generated for a
-16-bit code segment. In a 32-bit code section, the following code
-generates the machine opcode bytes `66 6a 04', which pushes the value
-`4' onto the stack, decrementing `%esp' by 2.
-
- pushw $4
-
- The same code in a 16-bit code section would generate the machine
-opcode bytes `6a 04' (ie. without the operand size prefix), which is
-correct since the processor default operand size is assumed to be 16
-bits in a 16-bit code section.
-
-
-File: as.info, Node: i386-Bugs, Next: i386-Notes, Prev: i386-Arch, Up: i386-Dependent
-
-8.11.11 AT&T Syntax bugs
-------------------------
-
-The UnixWare assembler, and probably other AT&T derived ix86 Unix
-assemblers, generate floating point instructions with reversed source
-and destination registers in certain cases. Unfortunately, gcc and
-possibly many other programs use this reversed syntax, so we're stuck
-with it.
-
- For example
-
- fsub %st,%st(3)
- results in `%st(3)' being updated to `%st - %st(3)' rather than the
-expected `%st(3) - %st'. This happens with all the non-commutative
-arithmetic floating point operations with two register operands where
-the source register is `%st' and the destination register is `%st(i)'.
-
-
-File: as.info, Node: i386-Arch, Next: i386-Bugs, Prev: i386-16bit, Up: i386-Dependent
-
-8.11.12 Specifying CPU Architecture
------------------------------------
-
-`as' may be told to assemble for a particular CPU (sub-)architecture
-with the `.arch CPU_TYPE' directive. This directive enables a warning
-when gas detects an instruction that is not supported on the CPU
-specified. The choices for CPU_TYPE are:
-
-`i8086' `i186' `i286' `i386'
-`i486' `i586' `i686' `pentium'
-`pentiumpro' `pentiumii' `pentiumiii' `pentium4'
-`k6' `athlon'
- `sledgehammer'
-`.mmx' `.sse'
-`.sse2'
-`.sse3'
-`.3dnow'
-
- Apart from the warning, there are only two other effects on `as'
-operation; Firstly, if you specify a CPU other than `i486', then shift
-by one instructions such as `sarl $1, %eax' will automatically use a
-two byte opcode sequence. The larger three byte opcode sequence is
-used on the 486 (and when no architecture is specified) because it
-executes faster on the 486. Note that you can explicitly request the
-two byte opcode by writing `sarl %eax'. Secondly, if you specify
-`i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte
-offset conditional jumps will be promoted when necessary to a two
-instruction sequence consisting of a conditional jump of the opposite
-sense around an unconditional jump to the target.
-
- Following the CPU architecture (but not a sub-architecture, which
-are those starting with a dot), you may specify `jumps' or `nojumps' to
-control automatic promotion of conditional jumps. `jumps' is the
-default, and enables jump promotion; All external jumps will be of the
-long variety, and file-local jumps will be promoted as necessary.
-(*note i386-Jumps::) `nojumps' leaves external conditional jumps as
-byte offset jumps, and warns about file-local conditional jumps that
-`as' promotes. Unconditional jumps are treated as for `jumps'.
-
- For example
-
- .arch i8086,nojumps
-
-
-File: as.info, Node: i386-Notes, Prev: i386-Bugs, Up: i386-Dependent
-
-8.11.13 Notes
--------------
-
-There is some trickery concerning the `mul' and `imul' instructions
-that deserves mention. The 16-, 32-, 64- and 128-bit expanding
-multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul')
-can be output only in the one operand form. Thus, `imul %ebx, %eax'
-does _not_ select the expanding multiply; the expanding multiply would
-clobber the `%edx' register, and this would confuse `gcc' output. Use
-`imul %ebx' to get the 64-bit product in `%edx:%eax'.
-
- We have added a two operand form of `imul' when the first operand is
-an immediate mode expression and the second operand is a register.
-This is just a shorthand, so that, multiplying `%eax' by 69, for
-example, can be done with `imul $69, %eax' rather than `imul $69, %eax,
-%eax'.
-
-
-File: as.info, Node: i860-Dependent, Next: i960-Dependent, Prev: i386-Dependent, Up: Machine Dependencies
-
-8.12 Intel i860 Dependent Features
-==================================
-
-* Menu:
-
-* Notes-i860:: i860 Notes
-* Options-i860:: i860 Command-line Options
-* Directives-i860:: i860 Machine Directives
-* Opcodes for i860:: i860 Opcodes
-
-
-File: as.info, Node: Notes-i860, Next: Options-i860, Up: i860-Dependent
-
-8.12.1 i860 Notes
------------------
-
-This is a fairly complete i860 assembler which is compatible with the
-UNIX System V/860 Release 4 assembler. However, it does not currently
-support SVR4 PIC (i.e., `@GOT, @GOTOFF, @PLT').
-
- Like the SVR4/860 assembler, the output object format is ELF32.
-Currently, this is the only supported object format. If there is
-sufficient interest, other formats such as COFF may be implemented.
-
- Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter
-being the default. One difference is that AT&T syntax requires the '%'
-prefix on register names while Intel syntax does not. Another
-difference is in the specification of relocatable expressions. The
-Intel syntax is `ha%expression' whereas the SVR4 syntax is
-`[expression]@ha' (and similarly for the "l" and "h" selectors).
-
-
-File: as.info, Node: Options-i860, Next: Directives-i860, Prev: Notes-i860, Up: i860-Dependent
-
-8.12.2 i860 Command-line Options
---------------------------------
-
-8.12.2.1 SVR4 compatibility options
-...................................
-
-`-V'
- Print assembler version.
-
-`-Qy'
- Ignored.
-
-`-Qn'
- Ignored.
-
-8.12.2.2 Other options
-......................
-
-`-EL'
- Select little endian output (this is the default).
-
-`-EB'
- Select big endian output. Note that the i860 always reads
- instructions as little endian data, so this option only effects
- data and not instructions.
-
-`-mwarn-expand'
- Emit a warning message if any pseudo-instruction expansions
- occurred. For example, a `or' instruction with an immediate
- larger than 16-bits will be expanded into two instructions. This
- is a very undesirable feature to rely on, so this flag can help
- detect any code where it happens. One use of it, for instance, has
- been to find and eliminate any place where `gcc' may emit these
- pseudo-instructions.
-
-`-mxp'
- Enable support for the i860XP instructions and control registers.
- By default, this option is disabled so that only the base
- instruction set (i.e., i860XR) is supported.
-
-`-mintel-syntax'
- The i860 assembler defaults to AT&T/SVR4 syntax. This option
- enables the Intel syntax.
-
-
-File: as.info, Node: Directives-i860, Next: Opcodes for i860, Prev: Options-i860, Up: i860-Dependent
-
-8.12.3 i860 Machine Directives
-------------------------------
-
-`.dual'
- Enter dual instruction mode. While this directive is supported, the
- preferred way to use dual instruction mode is to explicitly code
- the dual bit with the `d.' prefix.
-
-`.enddual'
- Exit dual instruction mode. While this directive is supported, the
- preferred way to use dual instruction mode is to explicitly code
- the dual bit with the `d.' prefix.
-
-`.atmp'
- Change the temporary register used when expanding pseudo
- operations. The default register is `r31'.
-
- The `.dual', `.enddual', and `.atmp' directives are available only
-in the Intel syntax mode.
-
- Both syntaxes allow for the standard `.align' directive. However,
-the Intel syntax additionally allows keywords for the alignment
-parameter: "`.align type'", where `type' is one of `.short', `.long',
-`.quad', `.single', `.double' representing alignments of 2, 4, 16, 4,
-and 8, respectively.
-
-
-File: as.info, Node: Opcodes for i860, Prev: Directives-i860, Up: i860-Dependent
-
-8.12.4 i860 Opcodes
--------------------
-
-All of the Intel i860XR and i860XP machine instructions are supported.
-Please see either _i860 Microprocessor Programmer's Reference Manual_
-or _i860 Microprocessor Architecture_ for more information.
-
-8.12.4.1 Other instruction support (pseudo-instructions)
-........................................................
-
-For compatibility with some other i860 assemblers, a number of
-pseudo-instructions are supported. While these are supported, they are
-a very undesirable feature that should be avoided - in particular, when
-they result in an expansion to multiple actual i860 instructions. Below
-are the pseudo-instructions that result in expansions.
- * Load large immediate into general register:
-
- The pseudo-instruction `mov imm,%rn' (where the immediate does not
- fit within a signed 16-bit field) will be expanded into:
- orh large_imm@h,%r0,%rn
- or large_imm@l,%rn,%rn
-
- * Load/store with relocatable address expression:
-
- For example, the pseudo-instruction `ld.b addr_exp(%rx),%rn' will
- be expanded into:
- orh addr_exp@ha,%rx,%r31
- ld.l addr_exp@l(%r31),%rn
-
- The analogous expansions apply to `ld.x, st.x, fld.x, pfld.x,
- fst.x', and `pst.x' as well.
-
- * Signed large immediate with add/subtract:
-
- If any of the arithmetic operations `adds, addu, subs, subu' are
- used with an immediate larger than 16-bits (signed), then they
- will be expanded. For instance, the pseudo-instruction `adds
- large_imm,%rx,%rn' expands to:
- orh large_imm@h,%r0,%r31
- or large_imm@l,%r31,%r31
- adds %r31,%rx,%rn
-
- * Unsigned large immediate with logical operations:
-
- Logical operations (`or, andnot, or, xor') also result in
- expansions. The pseudo-instruction `or large_imm,%rx,%rn' results
- in:
- orh large_imm@h,%rx,%r31
- or large_imm@l,%r31,%rn
-
- Similarly for the others, except for `and' which expands to:
- andnot (-1 - large_imm)@h,%rx,%r31
- andnot (-1 - large_imm)@l,%r31,%rn
-
-
-File: as.info, Node: i960-Dependent, Next: IA-64-Dependent, Prev: i860-Dependent, Up: Machine Dependencies
-
-8.13 Intel 80960 Dependent Features
-===================================
-
-* Menu:
-
-* Options-i960:: i960 Command-line Options
-* Floating Point-i960:: Floating Point
-* Directives-i960:: i960 Machine Directives
-* Opcodes for i960:: i960 Opcodes
-
-
-File: as.info, Node: Options-i960, Next: Floating Point-i960, Up: i960-Dependent
-
-8.13.1 i960 Command-line Options
---------------------------------
-
-`-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
- Select the 80960 architecture. Instructions or features not
- supported by the selected architecture cause fatal errors.
-
- `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'.
- Synonyms are provided for compatibility with other tools.
-
- If you do not specify any of these options, `as' generates code
- for any instruction or feature that is supported by _some_ version
- of the 960 (even if this means mixing architectures!). In
- principle, `as' attempts to deduce the minimal sufficient
- processor type if none is specified; depending on the object code
- format, the processor type may be recorded in the object file. If
- it is critical that the `as' output match a specific architecture,
- specify that architecture explicitly.
-
-`-b'
- Add code to collect information about conditional branches taken,
- for later optimization using branch prediction bits. (The
- conditional branch instructions have branch prediction bits in the
- CA, CB, and CC architectures.) If BR represents a conditional
- branch instruction, the following represents the code generated by
- the assembler when `-b' is specified:
-
- call INCREMENT ROUTINE
- .word 0 # pre-counter
- Label: BR
- call INCREMENT ROUTINE
- .word 0 # post-counter
-
- The counter following a branch records the number of times that
- branch was _not_ taken; the differenc between the two counters is
- the number of times the branch _was_ taken.
-
- A table of every such `Label' is also generated, so that the
- external postprocessor `gbr960' (supplied by Intel) can locate all
- the counters. This table is always labeled `__BRANCH_TABLE__';
- this is a local symbol to permit collecting statistics for many
- separate object files. The table is word aligned, and begins with
- a two-word header. The first word, initialized to 0, is used in
- maintaining linked lists of branch tables. The second word is a
- count of the number of entries in the table, which follow
- immediately: each is a word, pointing to one of the labels
- illustrated above.
-
- +------------+------------+------------+ ... +------------+
- | | | | | |
- | *NEXT | COUNT: N | *BRLAB 1 | | *BRLAB N |
- | | | | | |
- +------------+------------+------------+ ... +------------+
-
- __BRANCH_TABLE__ layout
-
- The first word of the header is used to locate multiple branch
- tables, since each object file may contain one. Normally the links
- are maintained with a call to an initialization routine, placed at
- the beginning of each function in the file. The GNU C compiler
- generates these calls automatically when you give it a `-b' option.
- For further details, see the documentation of `gbr960'.
-
-`-no-relax'
- Normally, Compare-and-Branch instructions with targets that require
- displacements greater than 13 bits (or that have external targets)
- are replaced with the corresponding compare (or `chkbit') and
- branch instructions. You can use the `-no-relax' option to
- specify that `as' should generate errors instead, if the target
- displacement is larger than 13 bits.
-
- This option does not affect the Compare-and-Jump instructions; the
- code emitted for them is _always_ adjusted when necessary
- (depending on displacement size), regardless of whether you use
- `-no-relax'.
-
-
-File: as.info, Node: Floating Point-i960, Next: Directives-i960, Prev: Options-i960, Up: i960-Dependent
-
-8.13.2 Floating Point
----------------------
-
-`as' generates IEEE floating-point numbers for the directives `.float',
-`.double', `.extended', and `.single'.
-
-
-File: as.info, Node: Directives-i960, Next: Opcodes for i960, Prev: Floating Point-i960, Up: i960-Dependent
-
-8.13.3 i960 Machine Directives
-------------------------------
-
-`.bss SYMBOL, LENGTH, ALIGN'
- Reserve LENGTH bytes in the bss section for a local SYMBOL,
- aligned to the power of two specified by ALIGN. LENGTH and ALIGN
- must be positive absolute expressions. This directive differs
- from `.lcomm' only in that it permits you to specify an alignment.
- *Note `.lcomm': Lcomm.
-
-`.extended FLONUMS'
- `.extended' expects zero or more flonums, separated by commas; for
- each flonum, `.extended' emits an IEEE extended-format (80-bit)
- floating-point number.
-
-`.leafproc CALL-LAB, BAL-LAB'
- You can use the `.leafproc' directive in conjunction with the
- optimized `callj' instruction to enable faster calls of leaf
- procedures. If a procedure is known to call no other procedures,
- you may define an entry point that skips procedure prolog code
- (and that does not depend on system-supplied saved context), and
- declare it as the BAL-LAB using `.leafproc'. If the procedure
- also has an entry point that goes through the normal prolog, you
- can specify that entry point as CALL-LAB.
-
- A `.leafproc' declaration is meant for use in conjunction with the
- optimized call instruction `callj'; the directive records the data
- needed later to choose between converting the `callj' into a `bal'
- or a `call'.
-
- CALL-LAB is optional; if only one argument is present, or if the
- two arguments are identical, the single argument is assumed to be
- the `bal' entry point.
-
-`.sysproc NAME, INDEX'
- The `.sysproc' directive defines a name for a system procedure.
- After you define it using `.sysproc', you can use NAME to refer to
- the system procedure identified by INDEX when calling procedures
- with the optimized call instruction `callj'.
-
- Both arguments are required; INDEX must be between 0 and 31
- (inclusive).
-
-
-File: as.info, Node: Opcodes for i960, Prev: Directives-i960, Up: i960-Dependent
-
-8.13.4 i960 Opcodes
--------------------
-
-All Intel 960 machine instructions are supported; *note i960
-Command-line Options: Options-i960. for a discussion of selecting the
-instruction subset for a particular 960 architecture.
-
- Some opcodes are processed beyond simply emitting a single
-corresponding instruction: `callj', and Compare-and-Branch or
-Compare-and-Jump instructions with target displacements larger than 13
-bits.
-
-* Menu:
-
-* callj-i960:: `callj'
-* Compare-and-branch-i960:: Compare-and-Branch
-
-
-File: as.info, Node: callj-i960, Next: Compare-and-branch-i960, Up: Opcodes for i960
-
-8.13.4.1 `callj'
-................
-
-You can write `callj' to have the assembler or the linker determine the
-most appropriate form of subroutine call: `call', `bal', or `calls'.
-If the assembly source contains enough information--a `.leafproc' or
-`.sysproc' directive defining the operand--then `as' translates the
-`callj'; if not, it simply emits the `callj', leaving it for the linker
-to resolve.
-
-
-File: as.info, Node: Compare-and-branch-i960, Prev: callj-i960, Up: Opcodes for i960
-
-8.13.4.2 Compare-and-Branch
-...........................
-
-The 960 architectures provide combined Compare-and-Branch instructions
-that permit you to store the branch target in the lower 13 bits of the
-instruction word itself. However, if you specify a branch target far
-enough away that its address won't fit in 13 bits, the assembler can
-either issue an error, or convert your Compare-and-Branch instruction
-into separate instructions to do the compare and the branch.
-
- Whether `as' gives an error or expands the instruction depends on
-two choices you can make: whether you use the `-no-relax' option, and
-whether you use a "Compare and Branch" instruction or a "Compare and
-Jump" instruction. The "Jump" instructions are _always_ expanded if
-necessary; the "Branch" instructions are expanded when necessary
-_unless_ you specify `-no-relax'--in which case `as' gives an error
-instead.
-
- These are the Compare-and-Branch instructions, their "Jump" variants,
-and the instruction pairs they may expand into:
-
- Compare and
- Branch Jump Expanded to
- ------ ------ ------------
- bbc chkbit; bno
- bbs chkbit; bo
- cmpibe cmpije cmpi; be
- cmpibg cmpijg cmpi; bg
- cmpibge cmpijge cmpi; bge
- cmpibl cmpijl cmpi; bl
- cmpible cmpijle cmpi; ble
- cmpibno cmpijno cmpi; bno
- cmpibne cmpijne cmpi; bne
- cmpibo cmpijo cmpi; bo
- cmpobe cmpoje cmpo; be
- cmpobg cmpojg cmpo; bg
- cmpobge cmpojge cmpo; bge
- cmpobl cmpojl cmpo; bl
- cmpoble cmpojle cmpo; ble
- cmpobne cmpojne cmpo; bne
-
-
-File: as.info, Node: IA-64-Dependent, Next: IP2K-Dependent, Prev: i960-Dependent, Up: Machine Dependencies
-
-8.14 IA-64 Dependent Features
-=============================
-
-* Menu:
-
-* IA-64 Options:: Options
-* IA-64 Syntax:: Syntax
-* IA-64 Opcodes:: Opcodes
-
-
-File: as.info, Node: IA-64 Options, Next: IA-64 Syntax, Up: IA-64-Dependent
-
-8.14.1 Options
---------------
-
-`-mconstant-gp'
- This option instructs the assembler to mark the resulting object
- file as using the "constant GP" model. With this model, it is
- assumed that the entire program uses a single global pointer (GP)
- value. Note that this option does not in any fashion affect the
- machine code emitted by the assembler. All it does is turn on the
- EF_IA_64_CONS_GP flag in the ELF file header.
-
-`-mauto-pic'
- This option instructs the assembler to mark the resulting object
- file as using the "constant GP without function descriptor" data
- model. This model is like the "constant GP" model, except that it
- additionally does away with function descriptors. What this means
- is that the address of a function refers directly to the
- function's code entry-point. Normally, such an address would
- refer to a function descriptor, which contains both the code
- entry-point and the GP-value needed by the function. Note that
- this option does not in any fashion affect the machine code
- emitted by the assembler. All it does is turn on the
- EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header.
-
-`-milp32'
-
-`-milp64'
-
-`-mlp64'
-
-`-mp64'
- These options select the data model. The assembler defaults to
- `-mlp64' (LP64 data model).
-
-`-mle'
-
-`-mbe'
- These options select the byte order. The `-mle' option selects
- little-endian byte order (default) and `-mbe' selects big-endian
- byte order. Note that IA-64 machine code always uses
- little-endian byte order.
-
-`-mtune=itanium1'
-
-`-mtune=itanium2'
- Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default
- is ITANIUM2.
-
-`-munwind-check=warning'
-
-`-munwind-check=error'
- These options control what the assembler will do when performing
- consistency checks on unwind directives. `-munwind-check=warning'
- will make the assembler issue a warning when an unwind directive
- check fails. This is the default. `-munwind-check=error' will
- make the assembler issue an error when an unwind directive check
- fails.
-
-`-mhint.b=ok'
-
-`-mhint.b=warning'
-
-`-mhint.b=error'
- These options control what the assembler will do when the `hint.b'
- instruction is used. `-mhint.b=ok' will make the assembler accept
- `hint.b'. `-mint.b=warning' will make the assembler issue a
- warning when `hint.b' is used. `-mhint.b=error' will make the
- assembler treat `hint.b' as an error, which is the default.
-
-`-x'
-
-`-xexplicit'
- These options turn on dependency violation checking.
-
-`-xauto'
- This option instructs the assembler to automatically insert stop
- bits where necessary to remove dependency violations. This is the
- default mode.
-
-`-xnone'
- This option turns off dependency violation checking.
-
-`-xdebug'
- This turns on debug output intended to help tracking down bugs in
- the dependency violation checker.
-
-`-xdebugn'
- This is a shortcut for -xnone -xdebug.
-
-`-xdebugx'
- This is a shortcut for -xexplicit -xdebug.
-
-
-
-File: as.info, Node: IA-64 Syntax, Next: IA-64 Opcodes, Prev: IA-64 Options, Up: IA-64-Dependent
-
-8.14.2 Syntax
--------------
-
-The assembler syntax closely follows the IA-64 Assembly Language
-Reference Guide.
-
-* Menu:
-
-* IA-64-Chars:: Special Characters
-* IA-64-Regs:: Register Names
-* IA-64-Bits:: Bit Names
-
-
-File: as.info, Node: IA-64-Chars, Next: IA-64-Regs, Up: IA-64 Syntax
-
-8.14.2.1 Special Characters
-...........................
-
-`//' is the line comment token.
-
- `;' can be used instead of a newline to separate statements.
-
-
-File: as.info, Node: IA-64-Regs, Next: IA-64-Bits, Prev: IA-64-Chars, Up: IA-64 Syntax
-
-8.14.2.2 Register Names
-.......................
-
-The 128 integer registers are referred to as `rN'. The 128
-floating-point registers are referred to as `fN'. The 128 application
-registers are referred to as `arN'. The 128 control registers are
-referred to as `crN'. The 64 one-bit predicate registers are referred
-to as `pN'. The 8 branch registers are referred to as `bN'. In
-addition, the assembler defines a number of aliases: `gp' (`r1'), `sp'
-(`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'),
-`ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N').
-
- For convenience, the assembler also defines aliases for all named
-application and control registers. For example, `ar.bsp' refers to the
-register backing store pointer (`ar17'). Similarly, `cr.eoi' refers to
-the end-of-interrupt register (`cr67').
-
-
-File: as.info, Node: IA-64-Bits, Prev: IA-64-Regs, Up: IA-64 Syntax
-
-8.14.2.3 IA-64 Processor-Status-Register (PSR) Bit Names
-........................................................
-
-The assembler defines bit masks for each of the bits in the IA-64
-processor status register. For example, `psr.ic' corresponds to a
-value of 0x2000. These masks are primarily intended for use with the
-`ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere
-else where an integer constant is expected.
-
-
-File: as.info, Node: IA-64 Opcodes, Prev: IA-64 Syntax, Up: IA-64-Dependent
-
-8.14.3 Opcodes
---------------
-
-For detailed information on the IA-64 machine instruction set, see the
-IA-64 Architecture Handbook
-(http://developer.intel.com/design/itanium/arch_spec.htm).
-
-
-File: as.info, Node: IP2K-Dependent, Next: M32C-Dependent, Prev: IA-64-Dependent, Up: Machine Dependencies
-
-8.15 IP2K Dependent Features
-============================
-
-* Menu:
-
-* IP2K-Opts:: IP2K Options
-
-
-File: as.info, Node: IP2K-Opts, Up: IP2K-Dependent
-
-8.15.1 IP2K Options
--------------------
-
-The Ubicom IP2K version of `as' has a few machine dependent options:
-
-`-mip2022ext'
- `as' can assemble the extended IP2022 instructions, but it will
- only do so if this is specifically allowed via this command line
- option.
-
-`-mip2022'
- This option restores the assembler's default behaviour of not
- permitting the extended IP2022 instructions to be assembled.
-
-
-
-File: as.info, Node: M32C-Dependent, Next: M32R-Dependent, Prev: IP2K-Dependent, Up: Machine Dependencies
-
-8.16 M32C Dependent Features
-============================
-
- `as' can assemble code for several different members of the Renesas
-M32C family. Normally the default is to assemble code for the M16C
-microprocessor. The `-m32c' option may be used to change the default
-to the M32C microprocessor.
-
-* Menu:
-
-* M32C-Opts:: M32C Options
-* M32C-Modifiers:: Symbolic Operand Modifiers
-
-
-File: as.info, Node: M32C-Opts, Next: M32C-Modifiers, Up: M32C-Dependent
-
-8.16.1 M32C Options
--------------------
-
-The Renesas M32C version of `as' has two machine-dependent options:
-
-`-m32c'
- Assemble M32C instructions.
-
-`-m16c'
- Assemble M16C instructions (default).
-
-
-
-File: as.info, Node: M32C-Modifiers, Prev: M32C-Opts, Up: M32C-Dependent
-
-8.16.2 Symbolic Operand Modifiers
----------------------------------
-
-The assembler supports several modifiers when using symbol addresses in
-M32C instruction operands. The general syntax is the following:
-
- %modifier(symbol)
-
-`%dsp8'
-`%dsp16'
- These modifiers override the assembler's assumptions about how big
- a symbol's address is. Normally, when it sees an operand like
- `sym[a0]' it assumes `sym' may require the widest displacement
- field (16 bits for `-m16c', 24 bits for `-m32c'). These modifiers
- tell it to assume the address will fit in an 8 or 16 bit
- (respectively) unsigned displacement. Note that, of course, if it
- doesn't actually fit you will get linker errors. Example:
-
- mov.w %dsp8(sym)[a0],r1
- mov.b #0,%dsp8(sym)[a0]
-
-`%hi8'
- This modifier allows you to load bits 16 through 23 of a 24 bit
- address into an 8 bit register. This is useful with, for example,
- the M16C `smovf' instruction, which expects a 20 bit address in
- `r1h' and `a0'. Example:
-
- mov.b #%hi8(sym),r1h
- mov.w #%lo16(sym),a0
- smovf.b
-
-`%lo16'
- Likewise, this modifier allows you to load bits 0 through 15 of a
- 24 bit address into a 16 bit register.
-
-`%hi16'
- This modifier allows you to load bits 16 through 31 of a 32 bit
- address into a 16 bit register. While the M32C family only has 24
- bits of address space, it does support addresses in pairs of 16 bit
- registers (like `a1a0' for the `lde' instruction). This modifier
- is for loading the upper half in such cases. Example:
-
- mov.w #%hi16(sym),a1
- mov.w #%lo16(sym),a0
- ...
- lde.w [a1a0],r1
-
-
-
-File: as.info, Node: M32R-Dependent, Next: M68K-Dependent, Prev: M32C-Dependent, Up: Machine Dependencies
-
-8.17 M32R Dependent Features
-============================
-
-* Menu:
-
-* M32R-Opts:: M32R Options
-* M32R-Directives:: M32R Directives
-* M32R-Warnings:: M32R Warnings
-
-
-File: as.info, Node: M32R-Opts, Next: M32R-Directives, Up: M32R-Dependent
-
-8.17.1 M32R Options
--------------------
-
-The Renease M32R version of `as' has a few machine dependent options:
-
-`-m32rx'
- `as' can assemble code for several different members of the
- Renesas M32R family. Normally the default is to assemble code for
- the M32R microprocessor. This option may be used to change the
- default to the M32RX microprocessor, which adds some more
- instructions to the basic M32R instruction set, and some
- additional parameters to some of the original instructions.
-
-`-m32r2'
- This option changes the target processor to the the M32R2
- microprocessor.
-
-`-m32r'
- This option can be used to restore the assembler's default
- behaviour of assembling for the M32R microprocessor. This can be
- useful if the default has been changed by a previous command line
- option.
-
-`-little'
- This option tells the assembler to produce little-endian code and
- data. The default is dependent upon how the toolchain was
- configured.
-
-`-EL'
- This is a synonum for _-little_.
-
-`-big'
- This option tells the assembler to produce big-endian code and
- data.
-
-`-EB'
- This is a synonum for _-big_.
-
-`-KPIC'
- This option specifies that the output of the assembler should be
- marked as position-independent code (PIC).
-
-`-parallel'
- This option tells the assembler to attempts to combine two
- sequential instructions into a single, parallel instruction, where
- it is legal to do so.
-
-`-no-parallel'
- This option disables a previously enabled _-parallel_ option.
-
-`-no-bitinst'
- This option disables the support for the extended bit-field
- instructions provided by the M32R2. If this support needs to be
- re-enabled the _-bitinst_ switch can be used to restore it.
-
-`-O'
- This option tells the assembler to attempt to optimize the
- instructions that it produces. This includes filling delay slots
- and converting sequential instructions into parallel ones. This
- option implies _-parallel_.
-
-`-warn-explicit-parallel-conflicts'
- Instructs `as' to produce warning messages when questionable
- parallel instructions are encountered. This option is enabled by
- default, but `gcc' disables it when it invokes `as' directly.
- Questionable instructions are those whoes behaviour would be
- different if they were executed sequentially. For example the
- code fragment `mv r1, r2 || mv r3, r1' produces a different result
- from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3
- and then r2 into r1, whereas the later moves r2 into r1 and r3.
-
-`-Wp'
- This is a shorter synonym for the
- _-warn-explicit-parallel-conflicts_ option.
-
-`-no-warn-explicit-parallel-conflicts'
- Instructs `as' not to produce warning messages when questionable
- parallel instructions are encountered.
-
-`-Wnp'
- This is a shorter synonym for the
- _-no-warn-explicit-parallel-conflicts_ option.
-
-`-ignore-parallel-conflicts'
- This option tells the assembler's to stop checking parallel
- instructions for contraint violations. This ability is provided
- for hardware vendors testing chip designs and should not be used
- under normal circumstances.
-
-`-no-ignore-parallel-conflicts'
- This option restores the assembler's default behaviour of checking
- parallel instructions to detect constraint violations.
-
-`-Ip'
- This is a shorter synonym for the _-ignore-parallel-conflicts_
- option.
-
-`-nIp'
- This is a shorter synonym for the _-no-ignore-parallel-conflicts_
- option.
-
-`-warn-unmatched-high'
- This option tells the assembler to produce a warning message if a
- `.high' pseudo op is encountered without a mathcing `.low' pseudo
- op. The presence of such an unmatches pseudo op usually indicates
- a programming error.
-
-`-no-warn-unmatched-high'
- Disables a previously enabled _-warn-unmatched-high_ option.
-
-`-Wuh'
- This is a shorter synonym for the _-warn-unmatched-high_ option.
-
-`-Wnuh'
- This is a shorter synonym for the _-no-warn-unmatched-high_ option.
-
-
-
-File: as.info, Node: M32R-Directives, Next: M32R-Warnings, Prev: M32R-Opts, Up: M32R-Dependent
-
-8.17.2 M32R Directives
-----------------------
-
-The Renease M32R version of `as' has a few architecture specific
-directives:
-
-`low EXPRESSION'
- The `low' directive computes the value of its expression and
- places the lower 16-bits of the result into the immediate-field of
- the instruction. For example:
-
- or3 r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678
- add3, r0, r0, #low(fred) ; compute r0 = r0 + low 16-bits of address of fred
-
-`high EXPRESSION'
- The `high' directive computes the value of its expression and
- places the upper 16-bits of the result into the immediate-field of
- the instruction. For example:
-
- seth r0, #high(0x12345678) ; compute r0 = 0x12340000
- seth, r0, #high(fred) ; compute r0 = upper 16-bits of address of fred
-
-`shigh EXPRESSION'
- The `shigh' directive is very similar to the `high' directive. It
- also computes the value of its expression and places the upper
- 16-bits of the result into the immediate-field of the instruction.
- The difference is that `shigh' also checks to see if the lower
- 16-bits could be interpreted as a signed number, and if so it
- assumes that a borrow will occur from the upper-16 bits. To
- compensate for this the `shigh' directive pre-biases the upper 16
- bit value by adding one to it. For example:
-
- For example:
-
- seth r0, #shigh(0x12345678) ; compute r0 = 0x12340000
- seth r0, #shigh(0x00008000) ; compute r0 = 0x00010000
-
- In the second example the lower 16-bits are 0x8000. If these are
- treated as a signed value and sign extended to 32-bits then the
- value becomes 0xffff8000. If this value is then added to
- 0x00010000 then the result is 0x00008000.
-
- This behaviour is to allow for the different semantics of the
- `or3' and `add3' instructions. The `or3' instruction treats its
- 16-bit immediate argument as unsigned whereas the `add3' treats
- its 16-bit immediate as a signed value. So for example:
-
- seth r0, #shigh(0x00008000)
- add3 r0, r0, #low(0x00008000)
-
- Produces the correct result in r0, whereas:
-
- seth r0, #shigh(0x00008000)
- or3 r0, r0, #low(0x00008000)
-
- Stores 0xffff8000 into r0.
-
- Note - the `shigh' directive does not know where in the assembly
- source code the lower 16-bits of the value are going set, so it
- cannot check to make sure that an `or3' instruction is being used
- rather than an `add3' instruction. It is up to the programmer to
- make sure that correct directives are used.
-
-`.m32r'
- The directive performs a similar thing as the _-m32r_ command line
- option. It tells the assembler to only accept M32R instructions
- from now on. An instructions from later M32R architectures are
- refused.
-
-`.m32rx'
- The directive performs a similar thing as the _-m32rx_ command
- line option. It tells the assembler to start accepting the extra
- instructions in the M32RX ISA as well as the ordinary M32R ISA.
-
-`.m32r2'
- The directive performs a similar thing as the _-m32r2_ command
- line option. It tells the assembler to start accepting the extra
- instructions in the M32R2 ISA as well as the ordinary M32R ISA.
-
-`.little'
- The directive performs a similar thing as the _-little_ command
- line option. It tells the assembler to start producing
- little-endian code and data. This option should be used with care
- as producing mixed-endian binary files is frought with danger.
-
-`.big'
- The directive performs a similar thing as the _-big_ command line
- option. It tells the assembler to start producing big-endian code
- and data. This option should be used with care as producing
- mixed-endian binary files is frought with danger.
-
-
-
-File: as.info, Node: M32R-Warnings, Prev: M32R-Directives, Up: M32R-Dependent
-
-8.17.3 M32R Warnings
---------------------
-
-There are several warning and error messages that can be produced by
-`as' which are specific to the M32R:
-
-`output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?'
- This message is only produced if warnings for explicit parallel
- conflicts have been enabled. It indicates that the assembler has
- encountered a parallel instruction in which the destination
- register of the left hand instruction is used as an input register
- in the right hand instruction. For example in this code fragment
- `mv r1, r2 || neg r3, r1' register r1 is the destination of the
- move instruction and the input to the neg instruction.
-
-`output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?'
- This message is only produced if warnings for explicit parallel
- conflicts have been enabled. It indicates that the assembler has
- encountered a parallel instruction in which the destination
- register of the right hand instruction is used as an input
- register in the left hand instruction. For example in this code
- fragment `mv r1, r2 || neg r2, r3' register r2 is the destination
- of the neg instruction and the input to the move instruction.
-
-`instruction `...' is for the M32RX only'
- This message is produced when the assembler encounters an
- instruction which is only supported by the M32Rx processor, and
- the `-m32rx' command line flag has not been specified to allow
- assembly of such instructions.
-
-`unknown instruction `...''
- This message is produced when the assembler encounters an
- instruction which it does not recognise.
-
-`only the NOP instruction can be issued in parallel on the m32r'
- This message is produced when the assembler encounters a parallel
- instruction which does not involve a NOP instruction and the
- `-m32rx' command line flag has not been specified. Only the M32Rx
- processor is able to execute two instructions in parallel.
-
-`instruction `...' cannot be executed in parallel.'
- This message is produced when the assembler encounters a parallel
- instruction which is made up of one or two instructions which
- cannot be executed in parallel.
-
-`Instructions share the same execution pipeline'
- This message is produced when the assembler encounters a parallel
- instruction whoes components both use the same execution pipeline.
-
-`Instructions write to the same destination register.'
- This message is produced when the assembler encounters a parallel
- instruction where both components attempt to modify the same
- register. For example these code fragments will produce this
- message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2,
- @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx
- r3, r4' (Both write to the condition bit)
-
-
-
-File: as.info, Node: M68K-Dependent, Next: M68HC11-Dependent, Prev: M32R-Dependent, Up: Machine Dependencies
-
-8.18 M680x0 Dependent Features
-==============================
-
-* Menu:
-
-* M68K-Opts:: M680x0 Options
-* M68K-Syntax:: Syntax
-* M68K-Moto-Syntax:: Motorola Syntax
-* M68K-Float:: Floating Point
-* M68K-Directives:: 680x0 Machine Directives
-* M68K-opcodes:: Opcodes
-
-
-File: as.info, Node: M68K-Opts, Next: M68K-Syntax, Up: M68K-Dependent
-
-8.18.1 M680x0 Options
----------------------
-
-The Motorola 680x0 version of `as' has a few machine dependent options:
-
-`-march=ARCHITECTURE'
- This option specifies a target architecture. The following
- architectures are recognized: `68000', `68010', `68020', `68030',
- `68040', `68060', `cpu32', `isaa', `isaaplus', `isab' and `cfv4e'.
-
-`-mcpu=CPU'
- This option specifies a target cpu. When used in conjunction with
- the `-march' option, the cpu must be within the specified
- architecture. Also, the generic features of the architecture are
- used for instruction generation, rather than those of the specific
- chip.
-
-`-m[no-]68851'
-
-`-m[no-]68881'
-
-`-m[no-]div'
-
-`-m[no-]usp'
-
-`-m[no-]float'
-
-`-m[no-]mac'
-
-`-m[no-]emac'
- Enable or disable various architecture specific features. If a
- chip or architecture by default supports an option (for instance
- `-march=isaaplus' includes the `-mdiv' option), explicitly
- disabling the option will override the default.
-
-`-l'
- You can use the `-l' option to shorten the size of references to
- undefined symbols. If you do not use the `-l' option, references
- to undefined symbols are wide enough for a full `long' (32 bits).
- (Since `as' cannot know where these symbols end up, `as' can only
- allocate space for the linker to fill in later. Since `as' does
- not know how far away these symbols are, it allocates as much
- space as it can.) If you use this option, the references are only
- one word wide (16 bits). This may be useful if you want the
- object file to be as small as possible, and you know that the
- relevant symbols are always less than 17 bits away.
-
-`--register-prefix-optional'
- For some configurations, especially those where the compiler
- normally does not prepend an underscore to the names of user
- variables, the assembler requires a `%' before any use of a
- register name. This is intended to let the assembler distinguish
- between C variables and functions named `a0' through `a7', and so
- on. The `%' is always accepted, but is not required for certain
- configurations, notably `sun3'. The `--register-prefix-optional'
- option may be used to permit omitting the `%' even for
- configurations for which it is normally required. If this is
- done, it will generally be impossible to refer to C variables and
- functions with the same names as register names.
-
-`--bitwise-or'
- Normally the character `|' is treated as a comment character, which
- means that it can not be used in expressions. The `--bitwise-or'
- option turns `|' into a normal character. In this mode, you must
- either use C style comments, or start comments with a `#' character
- at the beginning of a line.
-
-`--base-size-default-16 --base-size-default-32'
- If you use an addressing mode with a base register without
- specifying the size, `as' will normally use the full 32 bit value.
- For example, the addressing mode `%a0@(%d0)' is equivalent to
- `%a0@(%d0:l)'. You may use the `--base-size-default-16' option to
- tell `as' to default to using the 16 bit value. In this case,
- `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'. You may use the
- `--base-size-default-32' option to restore the default behaviour.
-
-`--disp-size-default-16 --disp-size-default-32'
- If you use an addressing mode with a displacement, and the value
- of the displacement is not known, `as' will normally assume that
- the value is 32 bits. For example, if the symbol `disp' has not
- been defined, `as' will assemble the addressing mode
- `%a0@(disp,%d0)' as though `disp' is a 32 bit value. You may use
- the `--disp-size-default-16' option to tell `as' to instead assume
- that the displacement is 16 bits. In this case, `as' will
- assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value. You
- may use the `--disp-size-default-32' option to restore the default
- behaviour.
-
-`--pcrel'
- Always keep branches PC-relative. In the M680x0 architecture all
- branches are defined as PC-relative. However, on some processors
- they are limited to word displacements maximum. When `as' needs a
- long branch that is not available, it normally emits an absolute
- jump instead. This option disables this substitution. When this
- option is given and no long branches are available, only word
- branches will be emitted. An error message will be generated if a
- word branch cannot reach its target. This option has no effect on
- 68020 and other processors that have long branches. *note Branch
- Improvement: M68K-Branch.
-
-`-m68000'
- `as' can assemble code for several different members of the
- Motorola 680x0 family. The default depends upon how `as' was
- configured when it was built; normally, the default is to assemble
- code for the 68020 microprocessor. The following options may be
- used to change the default. These options control which
- instructions and addressing modes are permitted. The members of
- the 680x0 family are very similar. For detailed information about
- the differences, see the Motorola manuals.
-
- `-m68000'
- `-m68ec000'
- `-m68hc000'
- `-m68hc001'
- `-m68008'
- `-m68302'
- `-m68306'
- `-m68307'
- `-m68322'
- `-m68356'
- Assemble for the 68000. `-m68008', `-m68302', and so on are
- synonyms for `-m68000', since the chips are the same from the
- point of view of the assembler.
-
- `-m68010'
- Assemble for the 68010.
-
- `-m68020'
- `-m68ec020'
- Assemble for the 68020. This is normally the default.
-
- `-m68030'
- `-m68ec030'
- Assemble for the 68030.
-
- `-m68040'
- `-m68ec040'
- Assemble for the 68040.
-
- `-m68060'
- `-m68ec060'
- Assemble for the 68060.
-
- `-mcpu32'
- `-m68330'
- `-m68331'
- `-m68332'
- `-m68333'
- `-m68334'
- `-m68336'
- `-m68340'
- `-m68341'
- `-m68349'
- `-m68360'
- Assemble for the CPU32 family of chips.
-
- `-m5200'
-
- `-m5202'
-
- `-m5204'
-
- `-m5206'
-
- `-m5206e'
-
- `-m521x'
-
- `-m5249'
-
- `-m528x'
-
- `-m5307'
-
- `-m5407'
-
- `-m547x'
-
- `-m548x'
-
- `-mcfv4'
-
- `-mcfv4e'
- Assemble for the ColdFire family of chips.
-
- `-m68881'
- `-m68882'
- Assemble 68881 floating point instructions. This is the
- default for the 68020, 68030, and the CPU32. The 68040 and
- 68060 always support floating point instructions.
-
- `-mno-68881'
- Do not assemble 68881 floating point instructions. This is
- the default for 68000 and the 68010. The 68040 and 68060
- always support floating point instructions, even if this
- option is used.
-
- `-m68851'
- Assemble 68851 MMU instructions. This is the default for the
- 68020, 68030, and 68060. The 68040 accepts a somewhat
- different set of MMU instructions; `-m68851' and `-m68040'
- should not be used together.
-
- `-mno-68851'
- Do not assemble 68851 MMU instructions. This is the default
- for the 68000, 68010, and the CPU32. The 68040 accepts a
- somewhat different set of MMU instructions.
-
-
-File: as.info, Node: M68K-Syntax, Next: M68K-Moto-Syntax, Prev: M68K-Opts, Up: M68K-Dependent
-
-8.18.2 Syntax
--------------
-
-This syntax for the Motorola 680x0 was developed at MIT.
-
- The 680x0 version of `as' uses instructions names and syntax
-compatible with the Sun assembler. Intervening periods are ignored;
-for example, `movl' is equivalent to `mov.l'.
-
- In the following table APC stands for any of the address registers
-(`%a0' through `%a7'), the program counter (`%pc'), the zero-address
-relative to the program counter (`%zpc'), a suppressed address register
-(`%za0' through `%za7'), or it may be omitted entirely. The use of
-SIZE means one of `w' or `l', and it may be omitted, along with the
-leading colon, unless a scale is also specified. The use of SCALE
-means one of `1', `2', `4', or `8', and it may always be omitted along
-with the leading colon.
-
- The following addressing modes are understood:
-"Immediate"
- `#NUMBER'
-
-"Data Register"
- `%d0' through `%d7'
-
-"Address Register"
- `%a0' through `%a7'
- `%a7' is also known as `%sp', i.e. the Stack Pointer. `%a6' is
- also known as `%fp', the Frame Pointer.
-
-"Address Register Indirect"
- `%a0@' through `%a7@'
-
-"Address Register Postincrement"
- `%a0@+' through `%a7@+'
-
-"Address Register Predecrement"
- `%a0@-' through `%a7@-'
-
-"Indirect Plus Offset"
- `APC@(NUMBER)'
-
-"Index"
- `APC@(NUMBER,REGISTER:SIZE:SCALE)'
-
- The NUMBER may be omitted.
-
-"Postindex"
- `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)'
-
- The ONUMBER or the REGISTER, but not both, may be omitted.
-
-"Preindex"
- `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)'
-
- The NUMBER may be omitted. Omitting the REGISTER produces the
- Postindex addressing mode.
-
-"Absolute"
- `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'.
-
-
-File: as.info, Node: M68K-Moto-Syntax, Next: M68K-Float, Prev: M68K-Syntax, Up: M68K-Dependent
-
-8.18.3 Motorola Syntax
-----------------------
-
-The standard Motorola syntax for this chip differs from the syntax
-already discussed (*note Syntax: M68K-Syntax.). `as' can accept
-Motorola syntax for operands, even if MIT syntax is used for other
-operands in the same instruction. The two kinds of syntax are fully
-compatible.
-
- In the following table APC stands for any of the address registers
-(`%a0' through `%a7'), the program counter (`%pc'), the zero-address
-relative to the program counter (`%zpc'), or a suppressed address
-register (`%za0' through `%za7'). The use of SIZE means one of `w' or
-`l', and it may always be omitted along with the leading dot. The use
-of SCALE means one of `1', `2', `4', or `8', and it may always be
-omitted along with the leading asterisk.
-
- The following additional addressing modes are understood:
-
-"Address Register Indirect"
- `(%a0)' through `(%a7)'
- `%a7' is also known as `%sp', i.e. the Stack Pointer. `%a6' is
- also known as `%fp', the Frame Pointer.
-
-"Address Register Postincrement"
- `(%a0)+' through `(%a7)+'
-
-"Address Register Predecrement"
- `-(%a0)' through `-(%a7)'
-
-"Indirect Plus Offset"
- `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'.
-
- The NUMBER may also appear within the parentheses, as in
- `(NUMBER,%A0)'. When used with the PC, the NUMBER may be omitted
- (with an address register, omitting the NUMBER produces Address
- Register Indirect mode).
-
-"Index"
- `NUMBER(APC,REGISTER.SIZE*SCALE)'
-
- The NUMBER may be omitted, or it may appear within the
- parentheses. The APC may be omitted. The REGISTER and the APC
- may appear in either order. If both APC and REGISTER are address
- registers, and the SIZE and SCALE are omitted, then the first
- register is taken as the base register, and the second as the
- index register.
-
-"Postindex"
- `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)'
-
- The ONUMBER, or the REGISTER, or both, may be omitted. Either the
- NUMBER or the APC may be omitted, but not both.
-
-"Preindex"
- `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)'
-
- The NUMBER, or the APC, or the REGISTER, or any two of them, may
- be omitted. The ONUMBER may be omitted. The REGISTER and the APC
- may appear in either order. If both APC and REGISTER are address
- registers, and the SIZE and SCALE are omitted, then the first
- register is taken as the base register, and the second as the
- index register.
-
-
-File: as.info, Node: M68K-Float, Next: M68K-Directives, Prev: M68K-Moto-Syntax, Up: M68K-Dependent
-
-8.18.4 Floating Point
----------------------
-
-Packed decimal (P) format floating literals are not supported. Feel
-free to add the code!
-
- The floating point formats generated by directives are these.
-
-`.float'
- `Single' precision floating point constants.
-
-`.double'
- `Double' precision floating point constants.
-
-`.extend'
-`.ldouble'
- `Extended' precision (`long double') floating point constants.
-
-
-File: as.info, Node: M68K-Directives, Next: M68K-opcodes, Prev: M68K-Float, Up: M68K-Dependent
-
-8.18.5 680x0 Machine Directives
--------------------------------
-
-In order to be compatible with the Sun assembler the 680x0 assembler
-understands the following directives.
-
-`.data1'
- This directive is identical to a `.data 1' directive.
-
-`.data2'
- This directive is identical to a `.data 2' directive.
-
-`.even'
- This directive is a special case of the `.align' directive; it
- aligns the output to an even byte boundary.
-
-`.skip'
- This directive is identical to a `.space' directive.
-
-`.arch NAME'
- Select the target architecture and extension features. Valid
- valuse for NAME are the same as for the `-march' command line
- option. This directive cannot be specified after any instructions
- have been assembled. If it is given multiple times, or in
- conjuction with the `-march' option, all uses must be for the same
- architecture and extension set.
-
-`.cpu NAME'
- Select the target cpu. Valid valuse for NAME are the same as for
- the `-mcpu' command line option. This directive cannot be
- specified after any instructions have been assembled. If it is
- given multiple times, or in conjuction with the `-mopt' option,
- all uses must be for the same cpu.
-
-
-
-File: as.info, Node: M68K-opcodes, Prev: M68K-Directives, Up: M68K-Dependent
-
-8.18.6 Opcodes
---------------
-
-* Menu:
-
-* M68K-Branch:: Branch Improvement
-* M68K-Chars:: Special Characters
-
-
-File: as.info, Node: M68K-Branch, Next: M68K-Chars, Up: M68K-opcodes
-
-8.18.6.1 Branch Improvement
-...........................
-
-Certain pseudo opcodes are permitted for branch instructions. They
-expand to the shortest branch instruction that reach the target.
-Generally these mnemonics are made by substituting `j' for `b' at the
-start of a Motorola mnemonic.
-
- The following table summarizes the pseudo-operations. A `*' flags
-cases that are more fully described after the table:
-
- Displacement
- +------------------------------------------------------------
- | 68020 68000/10, not PC-relative OK
- Pseudo-Op |BYTE WORD LONG ABSOLUTE LONG JUMP **
- +------------------------------------------------------------
- jbsr |bsrs bsrw bsrl jsr
- jra |bras braw bral jmp
- * jXX |bXXs bXXw bXXl bNXs;jmp
- * dbXX | N/A dbXXw dbXX;bras;bral dbXX;bras;jmp
- fjXX | N/A fbXXw fbXXl N/A
-
- XX: condition
- NX: negative of condition XX
- `*'--see full description below
- `**'--this expansion mode is disallowed by `--pcrel'
-
-`jbsr'
-`jra'
- These are the simplest jump pseudo-operations; they always map to
- one particular machine instruction, depending on the displacement
- to the branch target. This instruction will be a byte or word
- branch is that is sufficient. Otherwise, a long branch will be
- emitted if available. If no long branches are available and the
- `--pcrel' option is not given, an absolute long jump will be
- emitted instead. If no long branches are available, the `--pcrel'
- option is given, and a word branch cannot reach the target, an
- error message is generated.
-
- In addition to standard branch operands, `as' allows these
- pseudo-operations to have all operands that are allowed for jsr
- and jmp, substituting these instructions if the operand given is
- not valid for a branch instruction.
-
-`jXX'
- Here, `jXX' stands for an entire family of pseudo-operations,
- where XX is a conditional branch or condition-code test. The full
- list of pseudo-ops in this family is:
- jhi jls jcc jcs jne jeq jvc
- jvs jpl jmi jge jlt jgt jle
-
- Usually, each of these pseudo-operations expands to a single branch
- instruction. However, if a word branch is not sufficient, no long
- branches are available, and the `--pcrel' option is not given, `as'
- issues a longer code fragment in terms of NX, the opposite
- condition to XX. For example, under these conditions:
- jXX foo
- gives
- bNXs oof
- jmp foo
- oof:
-
-`dbXX'
- The full family of pseudo-operations covered here is
- dbhi dbls dbcc dbcs dbne dbeq dbvc
- dbvs dbpl dbmi dbge dblt dbgt dble
- dbf dbra dbt
-
- Motorola `dbXX' instructions allow word displacements only. When
- a word displacement is sufficient, each of these pseudo-operations
- expands to the corresponding Motorola instruction. When a word
- displacement is not sufficient and long branches are available,
- when the source reads `dbXX foo', `as' emits
- dbXX oo1
- bras oo2
- oo1:bral foo
- oo2:
-
- If, however, long branches are not available and the `--pcrel'
- option is not given, `as' emits
- dbXX oo1
- bras oo2
- oo1:jmp foo
- oo2:
-
-`fjXX'
- This family includes
- fjne fjeq fjge fjlt fjgt fjle fjf
- fjt fjgl fjgle fjnge fjngl fjngle fjngt
- fjnle fjnlt fjoge fjogl fjogt fjole fjolt
- fjor fjseq fjsf fjsne fjst fjueq fjuge
- fjugt fjule fjult fjun
-
- Each of these pseudo-operations always expands to a single Motorola
- coprocessor branch instruction, word or long. All Motorola
- coprocessor branch instructions allow both word and long
- displacements.
-
-
-
-File: as.info, Node: M68K-Chars, Prev: M68K-Branch, Up: M68K-opcodes
-
-8.18.6.2 Special Characters
-...........................
-
-The immediate character is `#' for Sun compatibility. The line-comment
-character is `|' (unless the `--bitwise-or' option is used). If a `#'
-appears at the beginning of a line, it is treated as a comment unless
-it looks like `# line file', in which case it is treated normally.
-
-
-File: as.info, Node: M68HC11-Dependent, Next: MIPS-Dependent, Prev: M68K-Dependent, Up: Machine Dependencies
-
-8.19 M68HC11 and M68HC12 Dependent Features
-===========================================
-
-* Menu:
-
-* M68HC11-Opts:: M68HC11 and M68HC12 Options
-* M68HC11-Syntax:: Syntax
-* M68HC11-Modifiers:: Symbolic Operand Modifiers
-* M68HC11-Directives:: Assembler Directives
-* M68HC11-Float:: Floating Point
-* M68HC11-opcodes:: Opcodes
-
-
-File: as.info, Node: M68HC11-Opts, Next: M68HC11-Syntax, Up: M68HC11-Dependent
-
-8.19.1 M68HC11 and M68HC12 Options
-----------------------------------
-
-The Motorola 68HC11 and 68HC12 version of `as' have a few machine
-dependent options.
-
-`-m68hc11'
- This option switches the assembler in the M68HC11 mode. In this
- mode, the assembler only accepts 68HC11 operands and mnemonics. It
- produces code for the 68HC11.
-
-`-m68hc12'
- This option switches the assembler in the M68HC12 mode. In this
- mode, the assembler also accepts 68HC12 operands and mnemonics. It
- produces code for the 68HC12. A few 68HC11 instructions are
- replaced by some 68HC12 instructions as recommended by Motorola
- specifications.
-
-`-m68hcs12'
- This option switches the assembler in the M68HCS12 mode. This
- mode is similar to `-m68hc12' but specifies to assemble for the
- 68HCS12 series. The only difference is on the assembling of the
- `movb' and `movw' instruction when a PC-relative operand is used.
-
-`-mshort'
- This option controls the ABI and indicates to use a 16-bit integer
- ABI. It has no effect on the assembled instructions. This is the
- default.
-
-`-mlong'
- This option controls the ABI and indicates to use a 32-bit integer
- ABI.
-
-`-mshort-double'
- This option controls the ABI and indicates to use a 32-bit float
- ABI. This is the default.
-
-`-mlong-double'
- This option controls the ABI and indicates to use a 64-bit float
- ABI.
-
-`--strict-direct-mode'
- You can use the `--strict-direct-mode' option to disable the
- automatic translation of direct page mode addressing into extended
- mode when the instruction does not support direct mode. For
- example, the `clr' instruction does not support direct page mode
- addressing. When it is used with the direct page mode, `as' will
- ignore it and generate an absolute addressing. This option
- prevents `as' from doing this, and the wrong usage of the direct
- page mode will raise an error.
-
-`--short-branchs'
- The `--short-branchs' option turns off the translation of relative
- branches into absolute branches when the branch offset is out of
- range. By default `as' transforms the relative branch (`bsr',
- `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc', `bls',
- `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch when
- the offset is out of the -128 .. 127 range. In that case, the
- `bsr' instruction is translated into a `jsr', the `bra'
- instruction is translated into a `jmp' and the conditional branchs
- instructions are inverted and followed by a `jmp'. This option
- disables these translations and `as' will generate an error if a
- relative branch is out of range. This option does not affect the
- optimization associated to the `jbra', `jbsr' and `jbXX' pseudo
- opcodes.
-
-`--force-long-branchs'
- The `--force-long-branchs' option forces the translation of
- relative branches into absolute branches. This option does not
- affect the optimization associated to the `jbra', `jbsr' and
- `jbXX' pseudo opcodes.
-
-`--print-insn-syntax'
- You can use the `--print-insn-syntax' option to obtain the syntax
- description of the instruction when an error is detected.
-
-`--print-opcodes'
- The `--print-opcodes' option prints the list of all the
- instructions with their syntax. The first item of each line
- represents the instruction name and the rest of the line indicates
- the possible operands for that instruction. The list is printed in
- alphabetical order. Once the list is printed `as' exits.
-
-`--generate-example'
- The `--generate-example' option is similar to `--print-opcodes'
- but it generates an example for each instruction instead.
-
-
-File: as.info, Node: M68HC11-Syntax, Next: M68HC11-Modifiers, Prev: M68HC11-Opts, Up: M68HC11-Dependent
-
-8.19.2 Syntax
--------------
-
-In the M68HC11 syntax, the instruction name comes first and it may be
-followed by one or several operands (up to three). Operands are
-separated by comma (`,'). In the normal mode, `as' will complain if too
-many operands are specified for a given instruction. In the MRI mode
-(turned on with `-M' option), it will treat them as comments. Example:
-
- inx
- lda #23
- bset 2,x #4
- brclr *bot #8 foo
-
- The following addressing modes are understood for 68HC11 and 68HC12:
-"Immediate"
- `#NUMBER'
-
-"Address Register"
- `NUMBER,X', `NUMBER,Y'
-
- The NUMBER may be omitted in which case 0 is assumed.
-
-"Direct Addressing mode"
- `*SYMBOL', or `*DIGITS'
-
-"Absolute"
- `SYMBOL', or `DIGITS'
-
- The M68HC12 has other more complex addressing modes. All of them are
-supported and they are represented below:
-
-"Constant Offset Indexed Addressing Mode"
- `NUMBER,REG'
-
- The NUMBER may be omitted in which case 0 is assumed. The
- register can be either `X', `Y', `SP' or `PC'. The assembler will
- use the smaller post-byte definition according to the constant
- value (5-bit constant offset, 9-bit constant offset or 16-bit
- constant offset). If the constant is not known by the assembler
- it will use the 16-bit constant offset post-byte and the value
- will be resolved at link time.
-
-"Offset Indexed Indirect"
- `[NUMBER,REG]'
-
- The register can be either `X', `Y', `SP' or `PC'.
-
-"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement"
- `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+'
-
- The number must be in the range `-8'..`+8' and must not be 0. The
- register can be either `X', `Y', `SP' or `PC'.
-
-"Accumulator Offset"
- `ACC,REG'
-
- The accumulator register can be either `A', `B' or `D'. The
- register can be either `X', `Y', `SP' or `PC'.
-
-"Accumulator D offset indexed-indirect"
- `[D,REG]'
-
- The register can be either `X', `Y', `SP' or `PC'.
-
-
- For example:
-
- ldab 1024,sp
- ldd [10,x]
- orab 3,+x
- stab -2,y-
- ldx a,pc
- sty [d,sp]
-
-
-File: as.info, Node: M68HC11-Modifiers, Next: M68HC11-Directives, Prev: M68HC11-Syntax, Up: M68HC11-Dependent
-
-8.19.3 Symbolic Operand Modifiers
----------------------------------
-
-The assembler supports several modifiers when using symbol addresses in
-68HC11 and 68HC12 instruction operands. The general syntax is the
-following:
-
- %modifier(symbol)
-
-`%addr'
- This modifier indicates to the assembler and linker to use the
- 16-bit physical address corresponding to the symbol. This is
- intended to be used on memory window systems to map a symbol in
- the memory bank window. If the symbol is in a memory expansion
- part, the physical address corresponds to the symbol address
- within the memory bank window. If the symbol is not in a memory
- expansion part, this is the symbol address (using or not using the
- %addr modifier has no effect in that case).
-
-`%page'
- This modifier indicates to use the memory page number corresponding
- to the symbol. If the symbol is in a memory expansion part, its
- page number is computed by the linker as a number used to map the
- page containing the symbol in the memory bank window. If the
- symbol is not in a memory expansion part, the page number is 0.
-
-`%hi'
- This modifier indicates to use the 8-bit high part of the physical
- address of the symbol.
-
-`%lo'
- This modifier indicates to use the 8-bit low part of the physical
- address of the symbol.
-
-
- For example a 68HC12 call to a function `foo_example' stored in
-memory expansion part could be written as follows:
-
- call %addr(foo_example),%page(foo_example)
-
- and this is equivalent to
-
- call foo_example
-
- And for 68HC11 it could be written as follows:
-
- ldab #%page(foo_example)
- stab _page_switch
- jsr %addr(foo_example)
-
-
-File: as.info, Node: M68HC11-Directives, Next: M68HC11-Float, Prev: M68HC11-Modifiers, Up: M68HC11-Dependent
-
-8.19.4 Assembler Directives
----------------------------
-
-The 68HC11 and 68HC12 version of `as' have the following specific
-assembler directives:
-
-`.relax'
- The relax directive is used by the `GNU Compiler' to emit a
- specific relocation to mark a group of instructions for linker
- relaxation. The sequence of instructions within the group must be
- known to the linker so that relaxation can be performed.
-
-`.mode [mshort|mlong|mshort-double|mlong-double]'
- This directive specifies the ABI. It overrides the `-mshort',
- `-mlong', `-mshort-double' and `-mlong-double' options.
-
-`.far SYMBOL'
- This directive marks the symbol as a `far' symbol meaning that it
- uses a `call/rtc' calling convention as opposed to `jsr/rts'.
- During a final link, the linker will identify references to the
- `far' symbol and will verify the proper calling convention.
-
-`.interrupt SYMBOL'
- This directive marks the symbol as an interrupt entry point. This
- information is then used by the debugger to correctly unwind the
- frame across interrupts.
-
-`.xrefb SYMBOL'
- This directive is defined for compatibility with the
- `Specification for Motorola 8 and 16-Bit Assembly Language Input
- Standard' and is ignored.
-
-
-
-File: as.info, Node: M68HC11-Float, Next: M68HC11-opcodes, Prev: M68HC11-Directives, Up: M68HC11-Dependent
-
-8.19.5 Floating Point
----------------------
-
-Packed decimal (P) format floating literals are not supported. Feel
-free to add the code!
-
- The floating point formats generated by directives are these.
-
-`.float'
- `Single' precision floating point constants.
-
-`.double'
- `Double' precision floating point constants.
-
-`.extend'
-`.ldouble'
- `Extended' precision (`long double') floating point constants.
-
-
-File: as.info, Node: M68HC11-opcodes, Prev: M68HC11-Float, Up: M68HC11-Dependent
-
-8.19.6 Opcodes
---------------
-
-* Menu:
-
-* M68HC11-Branch:: Branch Improvement
-
-
-File: as.info, Node: M68HC11-Branch, Up: M68HC11-opcodes
-
-8.19.6.1 Branch Improvement
-...........................
-
-Certain pseudo opcodes are permitted for branch instructions. They
-expand to the shortest branch instruction that reach the target.
-Generally these mnemonics are made by prepending `j' to the start of
-Motorola mnemonic. These pseudo opcodes are not affected by the
-`--short-branchs' or `--force-long-branchs' options.
-
- The following table summarizes the pseudo-operations.
-
- Displacement Width
- +-------------------------------------------------------------+
- | Options |
- | --short-branchs --force-long-branchs |
- +--------------------------+----------------------------------+
- Op |BYTE WORD | BYTE WORD |
- +--------------------------+----------------------------------+
- bsr | bsr <pc-rel> <error> | jsr <abs> |
- bra | bra <pc-rel> <error> | jmp <abs> |
- jbsr | bsr <pc-rel> jsr <abs> | bsr <pc-rel> jsr <abs> |
- jbra | bra <pc-rel> jmp <abs> | bra <pc-rel> jmp <abs> |
- bXX | bXX <pc-rel> <error> | bNX +3; jmp <abs> |
- jbXX | bXX <pc-rel> bNX +3; | bXX <pc-rel> bNX +3; jmp <abs> |
- | jmp <abs> | |
- +--------------------------+----------------------------------+
- XX: condition
- NX: negative of condition XX
-
-`jbsr'
-`jbra'
- These are the simplest jump pseudo-operations; they always map to
- one particular machine instruction, depending on the displacement
- to the branch target.
-
-`jbXX'
- Here, `jbXX' stands for an entire family of pseudo-operations,
- where XX is a conditional branch or condition-code test. The full
- list of pseudo-ops in this family is:
- jbcc jbeq jbge jbgt jbhi jbvs jbpl jblo
- jbcs jbne jblt jble jbls jbvc jbmi
-
- For the cases of non-PC relative displacements and long
- displacements, `as' issues a longer code fragment in terms of NX,
- the opposite condition to XX. For example, for the non-PC
- relative case:
- jbXX foo
- gives
- bNXs oof
- jmp foo
- oof:
-
-
-
-File: as.info, Node: MIPS-Dependent, Next: MMIX-Dependent, Prev: M68HC11-Dependent, Up: Machine Dependencies
-
-8.20 MIPS Dependent Features
-============================
-
- GNU `as' for MIPS architectures supports several different MIPS
-processors, and MIPS ISA levels I through V, MIPS32, and MIPS64. For
-information about the MIPS instruction set, see `MIPS RISC
-Architecture', by Kane and Heindrich (Prentice-Hall). For an overview
-of MIPS assembly conventions, see "Appendix D: Assembly Language
-Programming" in the same work.
-
-* Menu:
-
-* MIPS Opts:: Assembler options
-* MIPS Object:: ECOFF object code
-* MIPS Stabs:: Directives for debugging information
-* MIPS ISA:: Directives to override the ISA level
-* MIPS symbol sizes:: Directives to override the size of symbols
-* MIPS autoextend:: Directives for extending MIPS 16 bit instructions
-* MIPS insn:: Directive to mark data as an instruction
-* MIPS option stack:: Directives to save and restore options
-* MIPS ASE instruction generation overrides:: Directives to control
- generation of MIPS ASE instructions
-
-
-File: as.info, Node: MIPS Opts, Next: MIPS Object, Up: MIPS-Dependent
-
-8.20.1 Assembler options
-------------------------
-
-The MIPS configurations of GNU `as' support these special options:
-
-`-G NUM'
- This option sets the largest size of an object that can be
- referenced implicitly with the `gp' register. It is only accepted
- for targets that use ECOFF format. The default value is 8.
-
-`-EB'
-`-EL'
- Any MIPS configuration of `as' can select big-endian or
- little-endian output at run time (unlike the other GNU development
- tools, which must be configured for one or the other). Use `-EB'
- to select big-endian output, and `-EL' for little-endian.
-
-`-mips1'
-`-mips2'
-`-mips3'
-`-mips4'
-`-mips5'
-`-mips32'
-`-mips32r2'
-`-mips64'
-`-mips64r2'
- Generate code for a particular MIPS Instruction Set Architecture
- level. `-mips1' corresponds to the R2000 and R3000 processors,
- `-mips2' to the R6000 processor, `-mips3' to the R4000 processor,
- and `-mips4' to the R8000 and R10000 processors. `-mips5',
- `-mips32', `-mips32r2', `-mips64', and `-mips64r2' correspond to
- generic MIPS V, MIPS32, MIPS32 RELEASE 2, MIPS64, and MIPS64
- RELEASE 2 ISA processors, respectively. You can also switch
- instruction sets during the assembly; see *Note Directives to
- override the ISA level: MIPS ISA.
-
-`-mgp32'
-`-mfp32'
- Some macros have different expansions for 32-bit and 64-bit
- registers. The register sizes are normally inferred from the ISA
- and ABI, but these flags force a certain group of registers to be
- treated as 32 bits wide at all times. `-mgp32' controls the size
- of general-purpose registers and `-mfp32' controls the size of
- floating-point registers.
-
- On some MIPS variants there is a 32-bit mode flag; when this flag
- is set, 64-bit instructions generate a trap. Also, some 32-bit
- OSes only save the 32-bit registers on a context switch, so it is
- essential never to use the 64-bit registers.
-
-`-mgp64'
- Assume that 64-bit general purpose registers are available. This
- is provided in the interests of symmetry with -gp32.
-
-`-mips16'
-`-no-mips16'
- Generate code for the MIPS 16 processor. This is equivalent to
- putting `.set mips16' at the start of the assembly file.
- `-no-mips16' turns off this option.
-
-`-mips3d'
-`-no-mips3d'
- Generate code for the MIPS-3D Application Specific Extension.
- This tells the assembler to accept MIPS-3D instructions.
- `-no-mips3d' turns off this option.
-
-`-mdmx'
-`-no-mdmx'
- Generate code for the MDMX Application Specific Extension. This
- tells the assembler to accept MDMX instructions. `-no-mdmx' turns
- off this option.
-
-`-mdsp'
-`-mno-dsp'
- Generate code for the DSP Application Specific Extension. This
- tells the assembler to accept DSP instructions. `-mno-dsp' turns
- off this option.
-
-`-mmt'
-`-mno-mt'
- Generate code for the MT Application Specific Extension. This
- tells the assembler to accept MT instructions. `-mno-mt' turns
- off this option.
-
-`-mfix7000'
-`-mno-fix7000'
- Cause nops to be inserted if the read of the destination register
- of an mfhi or mflo instruction occurs in the following two
- instructions.
-
-`-mfix-vr4120'
-`-no-mfix-vr4120'
- Insert nops to work around certain VR4120 errata. This option is
- intended to be used on GCC-generated code: it is not designed to
- catch all problems in hand-written assembler code.
-
-`-mfix-vr4130'
-`-no-mfix-vr4130'
- Insert nops to work around the VR4130 `mflo'/`mfhi' errata.
-
-`-m4010'
-`-no-m4010'
- Generate code for the LSI R4010 chip. This tells the assembler to
- accept the R4010 specific instructions (`addciu', `ffc', etc.),
- and to not schedule `nop' instructions around accesses to the `HI'
- and `LO' registers. `-no-m4010' turns off this option.
-
-`-m4650'
-`-no-m4650'
- Generate code for the MIPS R4650 chip. This tells the assembler
- to accept the `mad' and `madu' instruction, and to not schedule
- `nop' instructions around accesses to the `HI' and `LO' registers.
- `-no-m4650' turns off this option.
-
-`-m3900'
-`-no-m3900'
-`-m4100'
-`-no-m4100'
- For each option `-mNNNN', generate code for the MIPS RNNNN chip.
- This tells the assembler to accept instructions specific to that
- chip, and to schedule for that chip's hazards.
-
-`-march=CPU'
- Generate code for a particular MIPS cpu. It is exactly equivalent
- to `-mCPU', except that there are more value of CPU understood.
- Valid CPU value are:
-
- 2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130,
- vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231,
- rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000,
- 10000, 12000, mips32-4k, sb1
-
-`-mtune=CPU'
- Schedule and tune for a particular MIPS cpu. Valid CPU values are
- identical to `-march=CPU'.
-
-`-mabi=ABI'
- Record which ABI the source code uses. The recognized arguments
- are: `32', `n32', `o64', `64' and `eabi'.
-
-`-msym32'
-`-mno-sym32'
- Equivalent to adding `.set sym32' or `.set nosym32' to the
- beginning of the assembler input. *Note MIPS symbol sizes::.
-
-`-nocpp'
- This option is ignored. It is accepted for command-line
- compatibility with other assemblers, which use it to turn off C
- style preprocessing. With GNU `as', there is no need for
- `-nocpp', because the GNU assembler itself never runs the C
- preprocessor.
-
-`--construct-floats'
-`--no-construct-floats'
- The `--no-construct-floats' option disables the construction of
- double width floating point constants by loading the two halves of
- the value into the two single width floating point registers that
- make up the double width register. This feature is useful if the
- processor support the FR bit in its status register, and this bit
- is known (by the programmer) to be set. This bit prevents the
- aliasing of the double width register by the single width
- registers.
-
- By default `--construct-floats' is selected, allowing construction
- of these floating point constants.
-
-`--trap'
-`--no-break'
- `as' automatically macro expands certain division and
- multiplication instructions to check for overflow and division by
- zero. This option causes `as' to generate code to take a trap
- exception rather than a break exception when an error is detected.
- The trap instructions are only supported at Instruction Set
- Architecture level 2 and higher.
-
-`--break'
-`--no-trap'
- Generate code to take a break exception rather than a trap
- exception when an error is detected. This is the default.
-
-`-mpdr'
-`-mno-pdr'
- Control generation of `.pdr' sections. Off by default on IRIX, on
- elsewhere.
-
-`-mshared'
-`-mno-shared'
- When generating code using the Unix calling conventions (selected
- by `-KPIC' or `-mcall_shared'), gas will normally generate code
- which can go into a shared library. The `-mno-shared' option
- tells gas to generate code which uses the calling convention, but
- can not go into a shared library. The resulting code is slightly
- more efficient. This option only affects the handling of the
- `.cpload' and `.cpsetup' pseudo-ops.
-
-
-File: as.info, Node: MIPS Object, Next: MIPS Stabs, Prev: MIPS Opts, Up: MIPS-Dependent
-
-8.20.2 MIPS ECOFF object code
------------------------------
-
-Assembling for a MIPS ECOFF target supports some additional sections
-besides the usual `.text', `.data' and `.bss'. The additional sections
-are `.rdata', used for read-only data, `.sdata', used for small data,
-and `.sbss', used for small common objects.
-
- When assembling for ECOFF, the assembler uses the `$gp' (`$28')
-register to form the address of a "small object". Any object in the
-`.sdata' or `.sbss' sections is considered "small" in this sense. For
-external objects, or for objects in the `.bss' section, you can use the
-`gcc' `-G' option to control the size of objects addressed via `$gp';
-the default value is 8, meaning that a reference to any object eight
-bytes or smaller uses `$gp'. Passing `-G 0' to `as' prevents it from
-using the `$gp' register on the basis of object size (but the assembler
-uses `$gp' for objects in `.sdata' or `sbss' in any case). The size of
-an object in the `.bss' section is set by the `.comm' or `.lcomm'
-directive that defines it. The size of an external object may be set
-with the `.extern' directive. For example, `.extern sym,4' declares
-that the object at `sym' is 4 bytes in length, whie leaving `sym'
-otherwise undefined.
-
- Using small ECOFF objects requires linker support, and assumes that
-the `$gp' register is correctly initialized (normally done
-automatically by the startup code). MIPS ECOFF assembly code must not
-modify the `$gp' register.
-
-
-File: as.info, Node: MIPS Stabs, Next: MIPS ISA, Prev: MIPS Object, Up: MIPS-Dependent
-
-8.20.3 Directives for debugging information
--------------------------------------------
-
-MIPS ECOFF `as' supports several directives used for generating
-debugging information which are not support by traditional MIPS
-assemblers. These are `.def', `.endef', `.dim', `.file', `.scl',
-`.size', `.tag', `.type', `.val', `.stabd', `.stabn', and `.stabs'.
-The debugging information generated by the three `.stab' directives can
-only be read by GDB, not by traditional MIPS debuggers (this
-enhancement is required to fully support C++ debugging). These
-directives are primarily used by compilers, not assembly language
-programmers!
-
-
-File: as.info, Node: MIPS symbol sizes, Next: MIPS autoextend, Prev: MIPS ISA, Up: MIPS-Dependent
-
-8.20.4 Directives to override the size of symbols
--------------------------------------------------
-
-The n64 ABI allows symbols to have any 64-bit value. Although this
-provides a great deal of flexibility, it means that some macros have
-much longer expansions than their 32-bit counterparts. For example,
-the non-PIC expansion of `dla $4,sym' is usually:
-
- lui $4,%highest(sym)
- lui $1,%hi(sym)
- daddiu $4,$4,%higher(sym)
- daddiu $1,$1,%lo(sym)
- dsll32 $4,$4,0
- daddu $4,$4,$1
-
- whereas the 32-bit expansion is simply:
-
- lui $4,%hi(sym)
- daddiu $4,$4,%lo(sym)
-
- n64 code is sometimes constructed in such a way that all symbolic
-constants are known to have 32-bit values, and in such cases, it's
-preferable to use the 32-bit expansion instead of the 64-bit expansion.
-
- You can use the `.set sym32' directive to tell the assembler that,
-from this point on, all expressions of the form `SYMBOL' or `SYMBOL +
-OFFSET' have 32-bit values. For example:
-
- .set sym32
- dla $4,sym
- lw $4,sym+16
- sw $4,sym+0x8000($4)
-
- will cause the assembler to treat `sym', `sym+16' and `sym+0x8000'
-as 32-bit values. The handling of non-symbolic addresses is not
-affected.
-
- The directive `.set nosym32' ends a `.set sym32' block and reverts
-to the normal behavior. It is also possible to change the symbol size
-using the command-line options `-msym32' and `-mno-sym32'.
-
- These options and directives are always accepted, but at present,
-they have no effect for anything other than n64.
-
-
-File: as.info, Node: MIPS ISA, Next: MIPS symbol sizes, Prev: MIPS Stabs, Up: MIPS-Dependent
-
-8.20.5 Directives to override the ISA level
--------------------------------------------
-
-GNU `as' supports an additional directive to change the MIPS
-Instruction Set Architecture level on the fly: `.set mipsN'. N should
-be a number from 0 to 5, or 32, 32r2, 64 or 64r2. The values other
-than 0 make the assembler accept instructions for the corresponding ISA
-level, from that point on in the assembly. `.set mipsN' affects not
-only which instructions are permitted, but also how certain macros are
-expanded. `.set mips0' restores the ISA level to its original level:
-either the level you selected with command line options, or the default
-for your configuration. You can use this feature to permit specific
-R4000 instructions while assembling in 32 bit mode. Use this directive
-with care!
-
- The directive `.set mips16' puts the assembler into MIPS 16 mode, in
-which it will assemble instructions for the MIPS 16 processor. Use
-`.set nomips16' to return to normal 32 bit mode.
-
- Traditional MIPS assemblers do not support this directive.
-
-
-File: as.info, Node: MIPS autoextend, Next: MIPS insn, Prev: MIPS symbol sizes, Up: MIPS-Dependent
-
-8.20.6 Directives for extending MIPS 16 bit instructions
---------------------------------------------------------
-
-By default, MIPS 16 instructions are automatically extended to 32 bits
-when necessary. The directive `.set noautoextend' will turn this off.
-When `.set noautoextend' is in effect, any 32 bit instruction must be
-explicitly extended with the `.e' modifier (e.g., `li.e $4,1000'). The
-directive `.set autoextend' may be used to once again automatically
-extend instructions when necessary.
-
- This directive is only meaningful when in MIPS 16 mode. Traditional
-MIPS assemblers do not support this directive.
-
-
-File: as.info, Node: MIPS insn, Next: MIPS option stack, Prev: MIPS autoextend, Up: MIPS-Dependent
-
-8.20.7 Directive to mark data as an instruction
------------------------------------------------
-
-The `.insn' directive tells `as' that the following data is actually
-instructions. This makes a difference in MIPS 16 mode: when loading
-the address of a label which precedes instructions, `as' automatically
-adds 1 to the value, so that jumping to the loaded address will do the
-right thing.
-
-
-File: as.info, Node: MIPS option stack, Next: MIPS ASE instruction generation overrides, Prev: MIPS insn, Up: MIPS-Dependent
-
-8.20.8 Directives to save and restore options
----------------------------------------------
-
-The directives `.set push' and `.set pop' may be used to save and
-restore the current settings for all the options which are controlled
-by `.set'. The `.set push' directive saves the current settings on a
-stack. The `.set pop' directive pops the stack and restores the
-settings.
-
- These directives can be useful inside an macro which must change an
-option such as the ISA level or instruction reordering but does not want
-to change the state of the code which invoked the macro.
-
- Traditional MIPS assemblers do not support these directives.
-
-
-File: as.info, Node: MIPS ASE instruction generation overrides, Prev: MIPS option stack, Up: MIPS-Dependent
-
-8.20.9 Directives to control generation of MIPS ASE instructions
-----------------------------------------------------------------
-
-The directive `.set mips3d' makes the assembler accept instructions
-from the MIPS-3D Application Specific Extension from that point on in
-the assembly. The `.set nomips3d' directive prevents MIPS-3D
-instructions from being accepted.
-
- The directive `.set mdmx' makes the assembler accept instructions
-from the MDMX Application Specific Extension from that point on in the
-assembly. The `.set nomdmx' directive prevents MDMX instructions from
-being accepted.
-
- The directive `.set dsp' makes the assembler accept instructions
-from the DSP Application Specific Extension from that point on in the
-assembly. The `.set nodsp' directive prevents DSP instructions from
-being accepted.
-
- The directive `.set mt' makes the assembler accept instructions from
-the MT Application Specific Extension from that point on in the
-assembly. The `.set nomt' directive prevents MT instructions from
-being accepted.
-
- Traditional MIPS assemblers do not support these directives.
-
-
-File: as.info, Node: MMIX-Dependent, Next: MSP430-Dependent, Prev: MIPS-Dependent, Up: Machine Dependencies
-
-8.21 MMIX Dependent Features
-============================
-
-* Menu:
-
-* MMIX-Opts:: Command-line Options
-* MMIX-Expand:: Instruction expansion
-* MMIX-Syntax:: Syntax
-* MMIX-mmixal:: Differences to `mmixal' syntax and semantics
-
-
-File: as.info, Node: MMIX-Opts, Next: MMIX-Expand, Up: MMIX-Dependent
-
-8.21.1 Command-line Options
----------------------------
-
-The MMIX version of `as' has some machine-dependent options.
-
- When `--fixed-special-register-names' is specified, only the register
-names specified in *Note MMIX-Regs:: are recognized in the instructions
-`PUT' and `GET'.
-
- You can use the `--globalize-symbols' to make all symbols global.
-This option is useful when splitting up a `mmixal' program into several
-files.
-
- The `--gnu-syntax' turns off most syntax compatibility with
-`mmixal'. Its usability is currently doubtful.
-
- The `--relax' option is not fully supported, but will eventually make
-the object file prepared for linker relaxation.
-
- If you want to avoid inadvertently calling a predefined symbol and
-would rather get an error, for example when using `as' with a compiler
-or other machine-generated code, specify `--no-predefined-syms'. This
-turns off built-in predefined definitions of all such symbols,
-including rounding-mode symbols, segment symbols, `BIT' symbols, and
-`TRAP' symbols used in `mmix' "system calls". It also turns off
-predefined special-register names, except when used in `PUT' and `GET'
-instructions.
-
- By default, some instructions are expanded to fit the size of the
-operand or an external symbol (*note MMIX-Expand::). By passing
-`--no-expand', no such expansion will be done, instead causing errors
-at link time if the operand does not fit.
-
- The `mmixal' documentation (*note mmixsite::) specifies that global
-registers allocated with the `GREG' directive (*note MMIX-greg::) and
-initialized to the same non-zero value, will refer to the same global
-register. This isn't strictly enforceable in `as' since the final
-addresses aren't known until link-time, but it will do an effort unless
-the `--no-merge-gregs' option is specified. (Register merging isn't
-yet implemented in `ld'.)
-
- `as' will warn every time it expands an instruction to fit an
-operand unless the option `-x' is specified. It is believed that this
-behaviour is more useful than just mimicking `mmixal''s behaviour, in
-which instructions are only expanded if the `-x' option is specified,
-and assembly fails otherwise, when an instruction needs to be expanded.
-It needs to be kept in mind that `mmixal' is both an assembler and
-linker, while `as' will expand instructions that at link stage can be
-contracted. (Though linker relaxation isn't yet implemented in `ld'.)
-The option `-x' also imples `--linker-allocated-gregs'.
-
- If instruction expansion is enabled, `as' can expand a `PUSHJ'
-instruction into a series of instructions. The shortest expansion is
-to not expand it, but just mark the call as redirectable to a stub,
-which `ld' creates at link-time, but only if the original `PUSHJ'
-instruction is found not to reach the target. The stub consists of the
-necessary instructions to form a jump to the target. This happens if
-`as' can assert that the `PUSHJ' instruction can reach such a stub.
-The option `--no-pushj-stubs' disables this shorter expansion, and the
-longer series of instructions is then created at assembly-time. The
-option `--no-stubs' is a synonym, intended for compatibility with
-future releases, where generation of stubs for other instructions may
-be implemented.
-
- Usually a two-operand-expression (*note GREG-base::) without a
-matching `GREG' directive is treated as an error by `as'. When the
-option `--linker-allocated-gregs' is in effect, they are instead passed
-through to the linker, which will allocate as many global registers as
-is needed.
-
-
-File: as.info, Node: MMIX-Expand, Next: MMIX-Syntax, Prev: MMIX-Opts, Up: MMIX-Dependent
-
-8.21.2 Instruction expansion
-----------------------------
-
-When `as' encounters an instruction with an operand that is either not
-known or does not fit the operand size of the instruction, `as' (and
-`ld') will expand the instruction into a sequence of instructions
-semantically equivalent to the operand fitting the instruction.
-Expansion will take place for the following instructions:
-
-`GETA'
- Expands to a sequence of four instructions: `SETL', `INCML',
- `INCMH' and `INCH'. The operand must be a multiple of four.
-
-Conditional branches
- A branch instruction is turned into a branch with the complemented
- condition and prediction bit over five instructions; four
- instructions setting `$255' to the operand value, which like with
- `GETA' must be a multiple of four, and a final `GO $255,$255,0'.
-
-`PUSHJ'
- Similar to expansion for conditional branches; four instructions
- set `$255' to the operand value, followed by a `PUSHGO
- $255,$255,0'.
-
-`JMP'
- Similar to conditional branches and `PUSHJ'. The final instruction
- is `GO $255,$255,0'.
-
- The linker `ld' is expected to shrink these expansions for code
-assembled with `--relax' (though not currently implemented).
-
-
-File: as.info, Node: MMIX-Syntax, Next: MMIX-mmixal, Prev: MMIX-Expand, Up: MMIX-Dependent
-
-8.21.3 Syntax
--------------
-
-The assembly syntax is supposed to be upward compatible with that
-described in Sections 1.3 and 1.4 of `The Art of Computer Programming,
-Volume 1'. Draft versions of those chapters as well as other MMIX
-information is located at
-`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'. Most code
-examples from the mmixal package located there should work unmodified
-when assembled and linked as single files, with a few noteworthy
-exceptions (*note MMIX-mmixal::).
-
- Before an instruction is emitted, the current location is aligned to
-the next four-byte boundary. If a label is defined at the beginning of
-the line, its value will be the aligned value.
-
- In addition to the traditional hex-prefix `0x', a hexadecimal number
-can also be specified by the prefix character `#'.
-
- After all operands to an MMIX instruction or directive have been
-specified, the rest of the line is ignored, treated as a comment.
-
-* Menu:
-
-* MMIX-Chars:: Special Characters
-* MMIX-Symbols:: Symbols
-* MMIX-Regs:: Register Names
-* MMIX-Pseudos:: Assembler Directives
-
-
-File: as.info, Node: MMIX-Chars, Next: MMIX-Symbols, Up: MMIX-Syntax
-
-8.21.3.1 Special Characters
-...........................
-
-The characters `*' and `#' are line comment characters; each start a
-comment at the beginning of a line, but only at the beginning of a
-line. A `#' prefixes a hexadecimal number if found elsewhere on a line.
-
- Two other characters, `%' and `!', each start a comment anywhere on
-the line. Thus you can't use the `modulus' and `not' operators in
-expressions normally associated with these two characters.
-
- A `;' is a line separator, treated as a new-line, so separate
-instructions can be specified on a single line.
-
-
-File: as.info, Node: MMIX-Symbols, Next: MMIX-Regs, Prev: MMIX-Chars, Up: MMIX-Syntax
-
-8.21.3.2 Symbols
-................
-
-The character `:' is permitted in identifiers. There are two
-exceptions to it being treated as any other symbol character: if a
-symbol begins with `:', it means that the symbol is in the global
-namespace and that the current prefix should not be prepended to that
-symbol (*note MMIX-prefix::). The `:' is then not considered part of
-the symbol. For a symbol in the label position (first on a line), a `:'
-at the end of a symbol is silently stripped off. A label is permitted,
-but not required, to be followed by a `:', as with many other assembly
-formats.
-
- The character `@' in an expression, is a synonym for `.', the
-current location.
-
- In addition to the common forward and backward local symbol formats
-(*note Symbol Names::), they can be specified with upper-case `B' and
-`F', as in `8B' and `9F'. A local label defined for the current
-position is written with a `H' appended to the number:
- 3H LDB $0,$1,2
- This and traditional local-label formats cannot be mixed: a label
-must be defined and referred to using the same format.
-
- There's a minor caveat: just as for the ordinary local symbols, the
-local symbols are translated into ordinary symbols using control
-characters are to hide the ordinal number of the symbol.
-Unfortunately, these symbols are not translated back in error messages.
-Thus you may see confusing error messages when local symbols are used.
-Control characters `\003' (control-C) and `\004' (control-D) are used
-for the MMIX-specific local-symbol syntax.
-
- The symbol `Main' is handled specially; it is always global.
-
- By defining the symbols `__.MMIX.start..text' and
-`__.MMIX.start..data', the address of respectively the `.text' and
-`.data' segments of the final program can be defined, though when
-linking more than one object file, the code or data in the object file
-containing the symbol is not guaranteed to be start at that position;
-just the final executable. *Note MMIX-loc::.
-
-
-File: as.info, Node: MMIX-Regs, Next: MMIX-Pseudos, Prev: MMIX-Symbols, Up: MMIX-Syntax
-
-8.21.3.3 Register names
-.......................
-
-Local and global registers are specified as `$0' to `$255'. The
-recognized special register names are `rJ', `rA', `rB', `rC', `rD',
-`rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ',
-`rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT',
-`rWW', `rXX', `rYY' and `rZZ'. A leading `:' is optional for special
-register names.
-
- Local and global symbols can be equated to register names and used in
-place of ordinary registers.
-
- Similarly for special registers, local and global symbols can be
-used. Also, symbols equated from numbers and constant expressions are
-allowed in place of a special register, except when either of the
-options `--no-predefined-syms' and `--fixed-special-register-names' are
-specified. Then only the special register names above are allowed for
-the instructions having a special register operand; `GET' and `PUT'.
-
-
-File: as.info, Node: MMIX-Pseudos, Prev: MMIX-Regs, Up: MMIX-Syntax
-
-8.21.3.4 Assembler Directives
-.............................
-
-`LOC'
- The `LOC' directive sets the current location to the value of the
- operand field, which may include changing sections. If the
- operand is a constant, the section is set to either `.data' if the
- value is `0x2000000000000000' or larger, else it is set to `.text'.
- Within a section, the current location may only be changed to
- monotonically higher addresses. A LOC expression must be a
- previously defined symbol or a "pure" constant.
-
- An example, which sets the label PREV to the current location, and
- updates the current location to eight bytes forward:
- prev LOC @+8
-
- When a LOC has a constant as its operand, a symbol
- `__.MMIX.start..text' or `__.MMIX.start..data' is defined
- depending on the address as mentioned above. Each such symbol is
- interpreted as special by the linker, locating the section at that
- address. Note that if multiple files are linked, the first object
- file with that section will be mapped to that address (not
- necessarily the file with the LOC definition).
-
-`LOCAL'
- Example:
- LOCAL external_symbol
- LOCAL 42
- .local asymbol
-
- This directive-operation generates a link-time assertion that the
- operand does not correspond to a global register. The operand is
- an expression that at link-time resolves to a register symbol or a
- number. A number is treated as the register having that number.
- There is one restriction on the use of this directive: the
- pseudo-directive must be placed in a section with contents, code
- or data.
-
-`IS'
- The `IS' directive:
- asymbol IS an_expression
- sets the symbol `asymbol' to `an_expression'. A symbol may not be
- set more than once using this directive. Local labels may be set
- using this directive, for example:
- 5H IS @+4
-
-`GREG'
- This directive reserves a global register, gives it an initial
- value and optionally gives it a symbolic name. Some examples:
-
- areg GREG
- breg GREG data_value
- GREG data_buffer
- .greg creg, another_data_value
-
- The symbolic register name can be used in place of a (non-special)
- register. If a value isn't provided, it defaults to zero. Unless
- the option `--no-merge-gregs' is specified, non-zero registers
- allocated with this directive may be eliminated by `as'; another
- register with the same value used in its place. Any of the
- instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU',
- `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW',
- `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT',
- `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can
- have a value nearby an initial value in place of its second and
- third operands. Here, "nearby" is defined as within the range
- 0...255 from the initial value of such an allocated register.
-
- buffer1 BYTE 0,0,0,0,0
- buffer2 BYTE 0,0,0,0,0
- ...
- GREG buffer1
- LDOU $42,buffer2
- In the example above, the `Y' field of the `LDOUI' instruction
- (LDOU with a constant Z) will be replaced with the global register
- allocated for `buffer1', and the `Z' field will have the value 5,
- the offset from `buffer1' to `buffer2'. The result is equivalent
- to this code:
- buffer1 BYTE 0,0,0,0,0
- buffer2 BYTE 0,0,0,0,0
- ...
- tmpreg GREG buffer1
- LDOU $42,tmpreg,(buffer2-buffer1)
-
- Global registers allocated with this directive are allocated in
- order higher-to-lower within a file. Other than that, the exact
- order of register allocation and elimination is undefined. For
- example, the order is undefined when more than one file with such
- directives are linked together. With the options `-x' and
- `--linker-allocated-gregs', `GREG' directives for two-operand
- cases like the one mentioned above can be omitted. Sufficient
- global registers will then be allocated by the linker.
-
-`BYTE'
- The `BYTE' directive takes a series of operands separated by a
- comma. If an operand is a string (*note Strings::), each
- character of that string is emitted as a byte. Other operands
- must be constant expressions without forward references, in the
- range 0...255. If you need operands having expressions with
- forward references, use `.byte' (*note Byte::). An operand can be
- omitted, defaulting to a zero value.
-
-`WYDE'
-`TETRA'
-`OCTA'
- The directives `WYDE', `TETRA' and `OCTA' emit constants of two,
- four and eight bytes size respectively. Before anything else
- happens for the directive, the current location is aligned to the
- respective constant-size boundary. If a label is defined at the
- beginning of the line, its value will be that after the alignment.
- A single operand can be omitted, defaulting to a zero value
- emitted for the directive. Operands can be expressed as strings
- (*note Strings::), in which case each character in the string is
- emitted as a separate constant of the size indicated by the
- directive.
-
-`PREFIX'
- The `PREFIX' directive sets a symbol name prefix to be prepended to
- all symbols (except local symbols, *note MMIX-Symbols::), that are
- not prefixed with `:', until the next `PREFIX' directive. Such
- prefixes accumulate. For example,
- PREFIX a
- PREFIX b
- c IS 0
- defines a symbol `abc' with the value 0.
-
-`BSPEC'
-`ESPEC'
- A pair of `BSPEC' and `ESPEC' directives delimit a section of
- special contents (without specified semantics). Example:
- BSPEC 42
- TETRA 1,2,3
- ESPEC
- The single operand to `BSPEC' must be number in the range 0...255.
- The `BSPEC' number 80 is used by the GNU binutils implementation.
-
-
-File: as.info, Node: MMIX-mmixal, Prev: MMIX-Syntax, Up: MMIX-Dependent
-
-8.21.4 Differences to `mmixal'
-------------------------------
-
-The binutils `as' and `ld' combination has a few differences in
-function compared to `mmixal' (*note mmixsite::).
-
- The replacement of a symbol with a GREG-allocated register (*note
-GREG-base::) is not handled the exactly same way in `as' as in
-`mmixal'. This is apparent in the `mmixal' example file `inout.mms',
-where different registers with different offsets, eventually yielding
-the same address, are used in the first instruction. This type of
-difference should however not affect the function of any program unless
-it has specific assumptions about the allocated register number.
-
- Line numbers (in the `mmo' object format) are currently not
-supported.
-
- Expression operator precedence is not that of mmixal: operator
-precedence is that of the C programming language. It's recommended to
-use parentheses to explicitly specify wanted operator precedence
-whenever more than one type of operators are used.
-
- The serialize unary operator `&', the fractional division operator
-`//', the logical not operator `!' and the modulus operator `%' are not
-available.
-
- Symbols are not global by default, unless the option
-`--globalize-symbols' is passed. Use the `.global' directive to
-globalize symbols (*note Global::).
-
- Operand syntax is a bit stricter with `as' than `mmixal'. For
-example, you can't say `addu 1,2,3', instead you must write `addu
-$1,$2,3'.
-
- You can't LOC to a lower address than those already visited (i.e.
-"backwards").
-
- A LOC directive must come before any emitted code.
-
- Predefined symbols are visible as file-local symbols after use. (In
-the ELF file, that is--the linked mmo file has no notion of a file-local
-symbol.)
-
- Some mapping of constant expressions to sections in LOC expressions
-is attempted, but that functionality is easily confused and should be
-avoided unless compatibility with `mmixal' is required. A LOC
-expression to `0x2000000000000000' or higher, maps to the `.data'
-section and lower addresses map to the `.text' section (*note
-MMIX-loc::).
-
- The code and data areas are each contiguous. Sparse programs with
-far-away LOC directives will take up the same amount of space as a
-contiguous program with zeros filled in the gaps between the LOC
-directives. If you need sparse programs, you might try and get the
-wanted effect with a linker script and splitting up the code parts into
-sections (*note Section::). Assembly code for this, to be compatible
-with `mmixal', would look something like:
- .if 0
- LOC away_expression
- .else
- .section away,"ax"
- .fi
- `as' will not execute the LOC directive and `mmixal' ignores the
-lines with `.'. This construct can be used generally to help
-compatibility.
-
- Symbols can't be defined twice-not even to the same value.
-
- Instruction mnemonics are recognized case-insensitive, though the
-`IS' and `GREG' pseudo-operations must be specified in upper-case
-characters.
-
- There's no unicode support.
-
- The following is a list of programs in `mmix.tar.gz', available at
-`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last
-checked with the version dated 2001-08-25 (md5sum
-c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do
-not assemble with `as':
-
-`silly.mms'
- LOC to a previous address.
-
-`sim.mms'
- Redefines symbol `Done'.
-
-`test.mms'
- Uses the serial operator `&'.
-
-
-File: as.info, Node: MSP430-Dependent, Next: SH-Dependent, Prev: MMIX-Dependent, Up: Machine Dependencies
-
-8.22 MSP 430 Dependent Features
-===============================
-
-* Menu:
-
-* MSP430 Options:: Options
-* MSP430 Syntax:: Syntax
-* MSP430 Floating Point:: Floating Point
-* MSP430 Directives:: MSP 430 Machine Directives
-* MSP430 Opcodes:: Opcodes
-* MSP430 Profiling Capability:: Profiling Capability
-
-
-File: as.info, Node: MSP430 Options, Next: MSP430 Syntax, Up: MSP430-Dependent
-
-8.22.1 Options
---------------
-
-`-m'
- select the mpu arch. Currently has no effect.
-
-`-mP'
- enables polymorph instructions handler.
-
-`-mQ'
- enables relaxation at assembly time. DANGEROUS!
-
-
-
-File: as.info, Node: MSP430 Syntax, Next: MSP430 Floating Point, Prev: MSP430 Options, Up: MSP430-Dependent
-
-8.22.2 Syntax
--------------
-
-* Menu:
-
-* MSP430-Macros:: Macros
-* MSP430-Chars:: Special Characters
-* MSP430-Regs:: Register Names
-* MSP430-Ext:: Assembler Extensions
-
-
-File: as.info, Node: MSP430-Macros, Next: MSP430-Chars, Up: MSP430 Syntax
-
-8.22.2.1 Macros
-...............
-
-The macro syntax used on the MSP 430 is like that described in the MSP
-430 Family Assembler Specification. Normal `as' macros should still
-work.
-
- Additional built-in macros are:
-
-`llo(exp)'
- Extracts least significant word from 32-bit expression 'exp'.
-
-`lhi(exp)'
- Extracts most significant word from 32-bit expression 'exp'.
-
-`hlo(exp)'
- Extracts 3rd word from 64-bit expression 'exp'.
-
-`hhi(exp)'
- Extracts 4rd word from 64-bit expression 'exp'.
-
-
- They normally being used as an immediate source operand.
- mov #llo(1), r10 ; == mov #1, r10
- mov #lhi(1), r10 ; == mov #0, r10
-
-
-File: as.info, Node: MSP430-Chars, Next: MSP430-Regs, Prev: MSP430-Macros, Up: MSP430 Syntax
-
-8.22.2.2 Special Characters
-...........................
-
-`;' is the line comment character.
-
- The character `$' in jump instructions indicates current location and
-implemented only for TI syntax compatibility.
-
-
-File: as.info, Node: MSP430-Regs, Next: MSP430-Ext, Prev: MSP430-Chars, Up: MSP430 Syntax
-
-8.22.2.3 Register Names
-.......................
-
-General-purpose registers are represented by predefined symbols of the
-form `rN' (for global registers), where N represents a number between
-`0' and `15'. The leading letters may be in either upper or lower
-case; for example, `r13' and `R7' are both valid register names.
-
- Register names `PC', `SP' and `SR' cannot be used as register names
-and will be treated as variables. Use `r0', `r1', and `r2' instead.
-
-
-File: as.info, Node: MSP430-Ext, Prev: MSP430-Regs, Up: MSP430 Syntax
-
-8.22.2.4 Assembler Extensions
-.............................
-
-`@rN'
- As destination operand being treated as `0(rn)'
-
-`0(rN)'
- As source operand being treated as `@rn'
-
-`jCOND +N'
- Skips next N bytes followed by jump instruction and equivalent to
- `jCOND $+N+2'
-
-
- Also, there are some instructions, which cannot be found in other
-assemblers. These are branch instructions, which has different opcodes
-upon jump distance. They all got PC relative addressing mode.
-
-`beq label'
- A polymorph instruction which is `jeq label' in case if jump
- distance within allowed range for cpu's jump instruction. If not,
- this unrolls into a sequence of
- jne $+6
- br label
-
-`bne label'
- A polymorph instruction which is `jne label' or `jeq +4; br label'
-
-`blt label'
- A polymorph instruction which is `jl label' or `jge +4; br label'
-
-`bltn label'
- A polymorph instruction which is `jn label' or `jn +2; jmp +4; br
- label'
-
-`bltu label'
- A polymorph instruction which is `jlo label' or `jhs +2; br label'
-
-`bge label'
- A polymorph instruction which is `jge label' or `jl +4; br label'
-
-`bgeu label'
- A polymorph instruction which is `jhs label' or `jlo +4; br label'
-
-`bgt label'
- A polymorph instruction which is `jeq +2; jge label' or `jeq +6;
- jl +4; br label'
-
-`bgtu label'
- A polymorph instruction which is `jeq +2; jhs label' or `jeq +6;
- jlo +4; br label'
-
-`bleu label'
- A polymorph instruction which is `jeq label; jlo label' or `jeq
- +2; jhs +4; br label'
-
-`ble label'
- A polymorph instruction which is `jeq label; jl label' or `jeq
- +2; jge +4; br label'
-
-`jump label'
- A polymorph instruction which is `jmp label' or `br label'
-
-
-File: as.info, Node: MSP430 Floating Point, Next: MSP430 Directives, Prev: MSP430 Syntax, Up: MSP430-Dependent
-
-8.22.3 Floating Point
----------------------
-
-The MSP 430 family uses IEEE 32-bit floating-point numbers.
-
-
-File: as.info, Node: MSP430 Directives, Next: MSP430 Opcodes, Prev: MSP430 Floating Point, Up: MSP430-Dependent
-
-8.22.4 MSP 430 Machine Directives
----------------------------------
-
-`.file'
- This directive is ignored; it is accepted for compatibility with
- other MSP 430 assemblers.
-
- _Warning:_ in other versions of the GNU assembler, `.file' is
- used for the directive called `.app-file' in the MSP 430
- support.
-
-`.line'
- This directive is ignored; it is accepted for compatibility with
- other MSP 430 assemblers.
-
-`.arch'
- Currently this directive is ignored; it is accepted for
- compatibility with other MSP 430 assemblers.
-
-`.profiler'
- This directive instructs assembler to add new profile entry to the
- object file.
-
-
-
-File: as.info, Node: MSP430 Opcodes, Next: MSP430 Profiling Capability, Prev: MSP430 Directives, Up: MSP430-Dependent
-
-8.22.5 Opcodes
---------------
-
-`as' implements all the standard MSP 430 opcodes. No additional
-pseudo-instructions are needed on this family.
-
- For information on the 430 machine instruction set, see `MSP430
-User's Manual, document slau049d', Texas Instrument, Inc.
-
-
-File: as.info, Node: MSP430 Profiling Capability, Prev: MSP430 Opcodes, Up: MSP430-Dependent
-
-8.22.6 Profiling Capability
----------------------------
-
-It is a performance hit to use gcc's profiling approach for this tiny
-target. Even more - jtag hardware facility does not perform any
-profiling functions. However we've got gdb's built-in simulator where
-we can do anything.
-
- We define new section `.profiler' which holds all profiling
-information. We define new pseudo operation `.profiler' which will
-instruct assembler to add new profile entry to the object file. Profile
-should take place at the present address.
-
- Pseudo operation format:
-
- `.profiler flags,function_to_profile [, cycle_corrector, extra]'
-
- where:
-
- `flags' is a combination of the following characters:
-
- `s'
- function entry
-
- `x'
- function exit
-
- `i'
- function is in init section
-
- `f'
- function is in fini section
-
- `l'
- library call
-
- `c'
- libc standard call
-
- `d'
- stack value demand
-
- `I'
- interrupt service routine
-
- `P'
- prologue start
-
- `p'
- prologue end
-
- `E'
- epilogue start
-
- `e'
- epilogue end
-
- `j'
- long jump / sjlj unwind
-
- `a'
- an arbitrary code fragment
-
- `t'
- extra parameter saved (a constant value like frame size)
-
-`function_to_profile'
- a function address
-
-`cycle_corrector'
- a value which should be added to the cycle counter, zero if
- omitted.
-
-`extra'
- any extra parameter, zero if omitted.
-
-
- For example:
- .global fxx
- .type fxx,@function
- fxx:
- .LFrameOffset_fxx=0x08
- .profiler "scdP", fxx ; function entry.
- ; we also demand stack value to be saved
- push r11
- push r10
- push r9
- push r8
- .profiler "cdpt",fxx,0, .LFrameOffset_fxx ; check stack value at this point
- ; (this is a prologue end)
- ; note, that spare var filled with
- ; the farme size
- mov r15,r8
- ...
- .profiler cdE,fxx ; check stack
- pop r8
- pop r9
- pop r10
- pop r11
- .profiler xcde,fxx,3 ; exit adds 3 to the cycle counter
- ret ; cause 'ret' insn takes 3 cycles
-
-
-File: as.info, Node: PDP-11-Dependent, Next: PJ-Dependent, Prev: SH64-Dependent, Up: Machine Dependencies
-
-8.23 PDP-11 Dependent Features
-==============================
-
-* Menu:
-
-* PDP-11-Options:: Options
-* PDP-11-Pseudos:: Assembler Directives
-* PDP-11-Syntax:: DEC Syntax versus BSD Syntax
-* PDP-11-Mnemonics:: Instruction Naming
-* PDP-11-Synthetic:: Synthetic Instructions
-
-
-File: as.info, Node: PDP-11-Options, Next: PDP-11-Pseudos, Up: PDP-11-Dependent
-
-8.23.1 Options
---------------
-
-The PDP-11 version of `as' has a rich set of machine dependent options.
-
-8.23.1.1 Code Generation Options
-................................
-
-`-mpic | -mno-pic'
- Generate position-independent (or position-dependent) code.
-
- The default is to generate position-independent code.
-
-8.23.1.2 Instruction Set Extension Options
-..........................................
-
-These options enables or disables the use of extensions over the base
-line instruction set as introduced by the first PDP-11 CPU: the KA11.
-Most options come in two variants: a `-m'EXTENSION that enables
-EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION.
-
- The default is to enable all extensions.
-
-`-mall | -mall-extensions'
- Enable all instruction set extensions.
-
-`-mno-extensions'
- Disable all instruction set extensions.
-
-`-mcis | -mno-cis'
- Enable (or disable) the use of the commercial instruction set,
- which consists of these instructions: `ADDNI', `ADDN', `ADDPI',
- `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC',
- `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI',
- `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL',
- `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI',
- `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC',
- `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI',
- `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'.
-
-`-mcsm | -mno-csm'
- Enable (or disable) the use of the `CSM' instruction.
-
-`-meis | -mno-eis'
- Enable (or disable) the use of the extended instruction set, which
- consists of these instructions: `ASHC', `ASH', `DIV', `MARK',
- `MUL', `RTT', `SOB' `SXT', and `XOR'.
-
-`-mfis | -mkev11'
-`-mno-fis | -mno-kev11'
- Enable (or disable) the use of the KEV11 floating-point
- instructions: `FADD', `FDIV', `FMUL', and `FSUB'.
-
-`-mfpp | -mfpu | -mfp-11'
-`-mno-fpp | -mno-fpu | -mno-fp-11'
- Enable (or disable) the use of FP-11 floating-point instructions:
- `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF',
- `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF',
- `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST',
- `SUBF', and `TSTF'.
-
-`-mlimited-eis | -mno-limited-eis'
- Enable (or disable) the use of the limited extended instruction
- set: `MARK', `RTT', `SOB', `SXT', and `XOR'.
-
- The -mno-limited-eis options also implies -mno-eis.
-
-`-mmfpt | -mno-mfpt'
- Enable (or disable) the use of the `MFPT' instruction.
-
-`-mmultiproc | -mno-multiproc'
- Enable (or disable) the use of multiprocessor instructions:
- `TSTSET' and `WRTLCK'.
-
-`-mmxps | -mno-mxps'
- Enable (or disable) the use of the `MFPS' and `MTPS' instructions.
-
-`-mspl | -mno-spl'
- Enable (or disable) the use of the `SPL' instruction.
-
- Enable (or disable) the use of the microcode instructions: `LDUB',
- `MED', and `XFC'.
-
-8.23.1.3 CPU Model Options
-..........................
-
-These options enable the instruction set extensions supported by a
-particular CPU, and disables all other extensions.
-
-`-mka11'
- KA11 CPU. Base line instruction set only.
-
-`-mkb11'
- KB11 CPU. Enable extended instruction set and `SPL'.
-
-`-mkd11a'
- KD11-A CPU. Enable limited extended instruction set.
-
-`-mkd11b'
- KD11-B CPU. Base line instruction set only.
-
-`-mkd11d'
- KD11-D CPU. Base line instruction set only.
-
-`-mkd11e'
- KD11-E CPU. Enable extended instruction set, `MFPS', and `MTPS'.
-
-`-mkd11f | -mkd11h | -mkd11q'
- KD11-F, KD11-H, or KD11-Q CPU. Enable limited extended
- instruction set, `MFPS', and `MTPS'.
-
-`-mkd11k'
- KD11-K CPU. Enable extended instruction set, `LDUB', `MED',
- `MFPS', `MFPT', `MTPS', and `XFC'.
-
-`-mkd11z'
- KD11-Z CPU. Enable extended instruction set, `CSM', `MFPS',
- `MFPT', `MTPS', and `SPL'.
-
-`-mf11'
- F11 CPU. Enable extended instruction set, `MFPS', `MFPT', and
- `MTPS'.
-
-`-mj11'
- J11 CPU. Enable extended instruction set, `CSM', `MFPS', `MFPT',
- `MTPS', `SPL', `TSTSET', and `WRTLCK'.
-
-`-mt11'
- T11 CPU. Enable limited extended instruction set, `MFPS', and
- `MTPS'.
-
-8.23.1.4 Machine Model Options
-..............................
-
-These options enable the instruction set extensions supported by a
-particular machine model, and disables all other extensions.
-
-`-m11/03'
- Same as `-mkd11f'.
-
-`-m11/04'
- Same as `-mkd11d'.
-
-`-m11/05 | -m11/10'
- Same as `-mkd11b'.
-
-`-m11/15 | -m11/20'
- Same as `-mka11'.
-
-`-m11/21'
- Same as `-mt11'.
-
-`-m11/23 | -m11/24'
- Same as `-mf11'.
-
-`-m11/34'
- Same as `-mkd11e'.
-
-`-m11/34a'
- Ame as `-mkd11e' `-mfpp'.
-
-`-m11/35 | -m11/40'
- Same as `-mkd11a'.
-
-`-m11/44'
- Same as `-mkd11z'.
-
-`-m11/45 | -m11/50 | -m11/55 | -m11/70'
- Same as `-mkb11'.
-
-`-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94'
- Same as `-mj11'.
-
-`-m11/60'
- Same as `-mkd11k'.
-
-
-File: as.info, Node: PDP-11-Pseudos, Next: PDP-11-Syntax, Prev: PDP-11-Options, Up: PDP-11-Dependent
-
-8.23.2 Assembler Directives
----------------------------
-
-The PDP-11 version of `as' has a few machine dependent assembler
-directives.
-
-`.bss'
- Switch to the `bss' section.
-
-`.even'
- Align the location counter to an even number.
-
-
-File: as.info, Node: PDP-11-Syntax, Next: PDP-11-Mnemonics, Prev: PDP-11-Pseudos, Up: PDP-11-Dependent
-
-8.23.3 PDP-11 Assembly Language Syntax
---------------------------------------
-
-`as' supports both DEC syntax and BSD syntax. The only difference is
-that in DEC syntax, a `#' character is used to denote an immediate
-constants, while in BSD syntax the character for this purpose is `$'.
-
- eneral-purpose registers are named `r0' through `r7'. Mnemonic
-alternatives for `r6' and `r7' are `sp' and `pc', respectively.
-
- Floating-point registers are named `ac0' through `ac3', or
-alternatively `fr0' through `fr3'.
-
- Comments are started with a `#' or a `/' character, and extend to
-the end of the line. (FIXME: clash with immediates?)
-
-
-File: as.info, Node: PDP-11-Mnemonics, Next: PDP-11-Synthetic, Prev: PDP-11-Syntax, Up: PDP-11-Dependent
-
-8.23.4 Instruction Naming
--------------------------
-
-Some instructions have alternative names.
-
-`BCC'
- `BHIS'
-
-`BCS'
- `BLO'
-
-`L2DR'
- `L2D'
-
-`L3DR'
- `L3D'
-
-`SYS'
- `TRAP'
-
-
-File: as.info, Node: PDP-11-Synthetic, Prev: PDP-11-Mnemonics, Up: PDP-11-Dependent
-
-8.23.5 Synthetic Instructions
------------------------------
-
-The `JBR' and `J'CC synthetic instructions are not supported yet.
-
-
-File: as.info, Node: PJ-Dependent, Next: PPC-Dependent, Prev: PDP-11-Dependent, Up: Machine Dependencies
-
-8.24 picoJava Dependent Features
-================================
-
-* Menu:
-
-* PJ Options:: Options
-
-
-File: as.info, Node: PJ Options, Up: PJ-Dependent
-
-8.24.1 Options
---------------
-
-`as' has two additional command-line options for the picoJava
-architecture.
-`-ml'
- This option selects little endian data output.
-
-`-mb'
- This option selects big endian data output.
-
-
-File: as.info, Node: PPC-Dependent, Next: Sparc-Dependent, Prev: PJ-Dependent, Up: Machine Dependencies
-
-8.25 PowerPC Dependent Features
-===============================
-
-* Menu:
-
-* PowerPC-Opts:: Options
-* PowerPC-Pseudo:: PowerPC Assembler Directives
-
-
-File: as.info, Node: PowerPC-Opts, Next: PowerPC-Pseudo, Up: PPC-Dependent
-
-8.25.1 Options
---------------
-
-The PowerPC chip family includes several successive levels, using the
-same core instruction set, but including a few additional instructions
-at each level. There are exceptions to this however. For details on
-what instructions each variant supports, please see the chip's
-architecture reference manual.
-
- The following table lists all available PowerPC options.
-
-`-mpwrx | -mpwr2'
- Generate code for POWER/2 (RIOS2).
-
-`-mpwr'
- Generate code for POWER (RIOS1)
-
-`-m601'
- Generate code for PowerPC 601.
-
-`-mppc, -mppc32, -m603, -m604'
- Generate code for PowerPC 603/604.
-
-`-m403, -m405'
- Generate code for PowerPC 403/405.
-
-`-m440'
- Generate code for PowerPC 440. BookE and some 405 instructions.
-
-`-m7400, -m7410, -m7450, -m7455'
- Generate code for PowerPC 7400/7410/7450/7455.
-
-`-mppc64, -m620'
- Generate code for PowerPC 620/625/630.
-
-`-mppc64bridge'
- Generate code for PowerPC 64, including bridge insns.
-
-`-mbooke64'
- Generate code for 64-bit BookE.
-
-`-mbooke, mbooke32'
- Generate code for 32-bit BookE.
-
-`-me300'
- Generate code for PowerPC e300 family.
-
-`-maltivec'
- Generate code for processors with AltiVec instructions.
-
-`-mpower4'
- Generate code for Power4 architecture.
-
-`-mpower5'
- Generate code for Power5 architecture.
-
-`-mcom'
- Generate code Power/PowerPC common instructions.
-
-`-many'
- Generate code for any architecture (PWR/PWRX/PPC).
-
-`-mregnames'
- Allow symbolic names for registers.
-
-`-mno-regnames'
- Do not allow symbolic names for registers.
-
-`-mrelocatable'
- Support for GCC's -mrelocatble option.
-
-`-mrelocatable-lib'
- Support for GCC's -mrelocatble-lib option.
-
-`-memb'
- Set PPC_EMB bit in ELF flags.
-
-`-mlittle, -mlittle-endian'
- Generate code for a little endian machine.
-
-`-mbig, -mbig-endian'
- Generate code for a big endian machine.
-
-`-msolaris'
- Generate code for Solaris.
-
-`-mno-solaris'
- Do not generate code for Solaris.
-
-
-File: as.info, Node: PowerPC-Pseudo, Prev: PowerPC-Opts, Up: PPC-Dependent
-
-8.25.2 PowerPC Assembler Directives
------------------------------------
-
-A number of assembler directives are available for PowerPC. The
-following table is far from complete.
-
-`.machine "string"'
- This directive allows you to change the machine for which code is
- generated. `"string"' may be any of the -m cpu selection options
- (without the -m) enclosed in double quotes, `"push"', or `"pop"'.
- `.machine "push"' saves the currently selected cpu, which may be
- restored with `.machine "pop"'.
-
-
-File: as.info, Node: SH-Dependent, Next: SH64-Dependent, Prev: MSP430-Dependent, Up: Machine Dependencies
-
-8.26 Renesas / SuperH SH Dependent Features
-===========================================
-
-* Menu:
-
-* SH Options:: Options
-* SH Syntax:: Syntax
-* SH Floating Point:: Floating Point
-* SH Directives:: SH Machine Directives
-* SH Opcodes:: Opcodes
-
-
-File: as.info, Node: SH Options, Next: SH Syntax, Up: SH-Dependent
-
-8.26.1 Options
---------------
-
-`as' has following command-line options for the Renesas (formerly
-Hitachi) / SuperH SH family.
-
-`--little'
- Generate little endian code.
-
-`--big'
- Generate big endian code.
-
-`--relax'
- Alter jump instructions for long displacements.
-
-`--small'
- Align sections to 4 byte boundaries, not 16.
-
-`--dsp'
- Enable sh-dsp insns, and disable sh3e / sh4 insns.
-
-`--renesas'
- Disable optimization with section symbol for compatibility with
- Renesas assembler.
-
-`--allow-reg-prefix'
- Allow '$' as a register name prefix.
-
-`--isa=sh4 | sh4a'
- Specify the sh4 or sh4a instruction set.
-
-`--isa=dsp'
- Enable sh-dsp insns, and disable sh3e / sh4 insns.
-
-`--isa=fp'
- Enable sh2e, sh3e, sh4, and sh4a insn sets.
-
-`--isa=all'
- Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
-
-
-
-File: as.info, Node: SH Syntax, Next: SH Floating Point, Prev: SH Options, Up: SH-Dependent
-
-8.26.2 Syntax
--------------
-
-* Menu:
-
-* SH-Chars:: Special Characters
-* SH-Regs:: Register Names
-* SH-Addressing:: Addressing Modes
-
-
-File: as.info, Node: SH-Chars, Next: SH-Regs, Up: SH Syntax
-
-8.26.2.1 Special Characters
-...........................
-
-`!' is the line comment character.
-
- You can use `;' instead of a newline to separate statements.
-
- Since `$' has no special meaning, you may use it in symbol names.
-
-
-File: as.info, Node: SH-Regs, Next: SH-Addressing, Prev: SH-Chars, Up: SH Syntax
-
-8.26.2.2 Register Names
-.......................
-
-You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5',
-`r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to
-refer to the SH registers.
-
- The SH also has these control registers:
-
-`pr'
- procedure register (holds return address)
-
-`pc'
- program counter
-
-`mach'
-`macl'
- high and low multiply accumulator registers
-
-`sr'
- status register
-
-`gbr'
- global base register
-
-`vbr'
- vector base register (for interrupt vectors)
-
-
-File: as.info, Node: SH-Addressing, Prev: SH-Regs, Up: SH Syntax
-
-8.26.2.3 Addressing Modes
-.........................
-
-`as' understands the following addressing modes for the SH. `RN' in
-the following refers to any of the numbered registers, but _not_ the
-control registers.
-
-`RN'
- Register direct
-
-`@RN'
- Register indirect
-
-`@-RN'
- Register indirect with pre-decrement
-
-`@RN+'
- Register indirect with post-increment
-
-`@(DISP, RN)'
- Register indirect with displacement
-
-`@(R0, RN)'
- Register indexed
-
-`@(DISP, GBR)'
- `GBR' offset
-
-`@(R0, GBR)'
- GBR indexed
-
-`ADDR'
-`@(DISP, PC)'
- PC relative address (for branch or for addressing memory). The
- `as' implementation allows you to use the simpler form ADDR
- anywhere a PC relative address is called for; the alternate form
- is supported for compatibility with other assemblers.
-
-`#IMM'
- Immediate data
-
-
-File: as.info, Node: SH Floating Point, Next: SH Directives, Prev: SH Syntax, Up: SH-Dependent
-
-8.26.3 Floating Point
----------------------
-
-SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other
-SH groups can use `.float' directive to generate IEEE floating-point
-numbers.
-
- SH2E and SH3E support single-precision floating point calculations as
-well as entirely PCAPI compatible emulation of double-precision
-floating point calculations. SH2E and SH3E instructions are a subset of
-the floating point calculations conforming to the IEEE754 standard.
-
- In addition to single-precision and double-precision floating-point
-operation capability, the on-chip FPU of SH4 has a 128-bit graphic
-engine that enables 32-bit floating-point data to be processed 128 bits
-at a time. It also supports 4 * 4 array operations and inner product
-operations. Also, a superscalar architecture is employed that enables
-simultaneous execution of two instructions (including FPU
-instructions), providing performance of up to twice that of
-conventional architectures at the same frequency.
-
-
-File: as.info, Node: SH Directives, Next: SH Opcodes, Prev: SH Floating Point, Up: SH-Dependent
-
-8.26.4 SH Machine Directives
-----------------------------
-
-`uaword'
-`ualong'
- `as' will issue a warning when a misaligned `.word' or `.long'
- directive is used. You may use `.uaword' or `.ualong' to indicate
- that the value is intentionally misaligned.
-
-
-File: as.info, Node: SH Opcodes, Prev: SH Directives, Up: SH-Dependent
-
-8.26.5 Opcodes
---------------
-
-For detailed information on the SH machine instruction set, see
-`SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core
-Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH).
-
- `as' implements all the standard SH opcodes. No additional
-pseudo-instructions are needed on this family. Note, however, that
-because `as' supports a simpler form of PC-relative addressing, you may
-simply write (for example)
-
- mov.l bar,r0
-
-where other assemblers might require an explicit displacement to `bar'
-from the program counter:
-
- mov.l @(DISP, PC)
-
- Here is a summary of SH opcodes:
-
- Legend:
- Rn a numbered register
- Rm another numbered register
- #imm immediate data
- disp displacement
- disp8 8-bit displacement
- disp12 12-bit displacement
-
- add #imm,Rn lds.l @Rn+,PR
- add Rm,Rn mac.w @Rm+,@Rn+
- addc Rm,Rn mov #imm,Rn
- addv Rm,Rn mov Rm,Rn
- and #imm,R0 mov.b Rm,@(R0,Rn)
- and Rm,Rn mov.b Rm,@-Rn
- and.b #imm,@(R0,GBR) mov.b Rm,@Rn
- bf disp8 mov.b @(disp,Rm),R0
- bra disp12 mov.b @(disp,GBR),R0
- bsr disp12 mov.b @(R0,Rm),Rn
- bt disp8 mov.b @Rm+,Rn
- clrmac mov.b @Rm,Rn
- clrt mov.b R0,@(disp,Rm)
- cmp/eq #imm,R0 mov.b R0,@(disp,GBR)
- cmp/eq Rm,Rn mov.l Rm,@(disp,Rn)
- cmp/ge Rm,Rn mov.l Rm,@(R0,Rn)
- cmp/gt Rm,Rn mov.l Rm,@-Rn
- cmp/hi Rm,Rn mov.l Rm,@Rn
- cmp/hs Rm,Rn mov.l @(disp,Rn),Rm
- cmp/pl Rn mov.l @(disp,GBR),R0
- cmp/pz Rn mov.l @(disp,PC),Rn
- cmp/str Rm,Rn mov.l @(R0,Rm),Rn
- div0s Rm,Rn mov.l @Rm+,Rn
- div0u mov.l @Rm,Rn
- div1 Rm,Rn mov.l R0,@(disp,GBR)
- exts.b Rm,Rn mov.w Rm,@(R0,Rn)
- exts.w Rm,Rn mov.w Rm,@-Rn
- extu.b Rm,Rn mov.w Rm,@Rn
- extu.w Rm,Rn mov.w @(disp,Rm),R0
- jmp @Rn mov.w @(disp,GBR),R0
- jsr @Rn mov.w @(disp,PC),Rn
- ldc Rn,GBR mov.w @(R0,Rm),Rn
- ldc Rn,SR mov.w @Rm+,Rn
- ldc Rn,VBR mov.w @Rm,Rn
- ldc.l @Rn+,GBR mov.w R0,@(disp,Rm)
- ldc.l @Rn+,SR mov.w R0,@(disp,GBR)
- ldc.l @Rn+,VBR mova @(disp,PC),R0
- lds Rn,MACH movt Rn
- lds Rn,MACL muls Rm,Rn
- lds Rn,PR mulu Rm,Rn
- lds.l @Rn+,MACH neg Rm,Rn
- lds.l @Rn+,MACL negc Rm,Rn
-
- nop stc VBR,Rn
- not Rm,Rn stc.l GBR,@-Rn
- or #imm,R0 stc.l SR,@-Rn
- or Rm,Rn stc.l VBR,@-Rn
- or.b #imm,@(R0,GBR) sts MACH,Rn
- rotcl Rn sts MACL,Rn
- rotcr Rn sts PR,Rn
- rotl Rn sts.l MACH,@-Rn
- rotr Rn sts.l MACL,@-Rn
- rte sts.l PR,@-Rn
- rts sub Rm,Rn
- sett subc Rm,Rn
- shal Rn subv Rm,Rn
- shar Rn swap.b Rm,Rn
- shll Rn swap.w Rm,Rn
- shll16 Rn tas.b @Rn
- shll2 Rn trapa #imm
- shll8 Rn tst #imm,R0
- shlr Rn tst Rm,Rn
- shlr16 Rn tst.b #imm,@(R0,GBR)
- shlr2 Rn xor #imm,R0
- shlr8 Rn xor Rm,Rn
- sleep xor.b #imm,@(R0,GBR)
- stc GBR,Rn xtrct Rm,Rn
- stc SR,Rn
-
-
-File: as.info, Node: SH64-Dependent, Next: PDP-11-Dependent, Prev: SH-Dependent, Up: Machine Dependencies
-
-8.27 SuperH SH64 Dependent Features
-===================================
-
-* Menu:
-
-* SH64 Options:: Options
-* SH64 Syntax:: Syntax
-* SH64 Directives:: SH64 Machine Directives
-* SH64 Opcodes:: Opcodes
-
-
-File: as.info, Node: SH64 Options, Next: SH64 Syntax, Up: SH64-Dependent
-
-8.27.1 Options
---------------
-
-`-isa=sh4 | sh4a'
- Specify the sh4 or sh4a instruction set.
-
-`-isa=dsp'
- Enable sh-dsp insns, and disable sh3e / sh4 insns.
-
-`-isa=fp'
- Enable sh2e, sh3e, sh4, and sh4a insn sets.
-
-`-isa=all'
- Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
-
-`-isa=shmedia | -isa=shcompact'
- Specify the default instruction set. `SHmedia' specifies the
- 32-bit opcodes, and `SHcompact' specifies the 16-bit opcodes
- compatible with previous SH families. The default depends on the
- ABI selected; the default for the 64-bit ABI is SHmedia, and the
- default for the 32-bit ABI is SHcompact. If neither the ABI nor
- the ISA is specified, the default is 32-bit SHcompact.
-
- Note that the `.mode' pseudo-op is not permitted if the ISA is not
- specified on the command line.
-
-`-abi=32 | -abi=64'
- Specify the default ABI. If the ISA is specified and the ABI is
- not, the default ABI depends on the ISA, with SHmedia defaulting
- to 64-bit and SHcompact defaulting to 32-bit.
-
- Note that the `.abi' pseudo-op is not permitted if the ABI is not
- specified on the command line. When the ABI is specified on the
- command line, any `.abi' pseudo-ops in the source must match it.
-
-`-shcompact-const-crange'
- Emit code-range descriptors for constants in SHcompact code
- sections.
-
-`-no-mix'
- Disallow SHmedia code in the same section as constants and
- SHcompact code.
-
-`-no-expand'
- Do not expand MOVI, PT, PTA or PTB instructions.
-
-`-expand-pt32'
- With -abi=64, expand PT, PTA and PTB instructions to 32 bits only.
-
-
-
-File: as.info, Node: SH64 Syntax, Next: SH64 Directives, Prev: SH64 Options, Up: SH64-Dependent
-
-8.27.2 Syntax
--------------
-
-* Menu:
-
-* SH64-Chars:: Special Characters
-* SH64-Regs:: Register Names
-* SH64-Addressing:: Addressing Modes
-
-
-File: as.info, Node: SH64-Chars, Next: SH64-Regs, Up: SH64 Syntax
-
-8.27.2.1 Special Characters
-...........................
-
-`!' is the line comment character.
-
- You can use `;' instead of a newline to separate statements.
-
- Since `$' has no special meaning, you may use it in symbol names.
-
-
-File: as.info, Node: SH64-Regs, Next: SH64-Addressing, Prev: SH64-Chars, Up: SH64 Syntax
-
-8.27.2.2 Register Names
-.......................
-
-You can use the predefined symbols `r0' through `r63' to refer to the
-SH64 general registers, `cr0' through `cr63' for control registers,
-`tr0' through `tr7' for target address registers, `fr0' through `fr63'
-for single-precision floating point registers, `dr0' through `dr62'
-(even numbered registers only) for double-precision floating point
-registers, `fv0' through `fv60' (multiples of four only) for
-single-precision floating point vectors, `fp0' through `fp62' (even
-numbered registers only) for single-precision floating point pairs,
-`mtrx0' through `mtrx48' (multiples of 16 only) for 4x4 matrices of
-single-precision floating point registers, `pc' for the program
-counter, and `fpscr' for the floating point status and control register.
-
- You can also refer to the control registers by the mnemonics `sr',
-`ssr', `pssr', `intevt', `expevt', `pexpevt', `tra', `spc', `pspc',
-`resvec', `vbr', `tea', `dcr', `kcr0', `kcr1', `ctc', and `usr'.
-
-
-File: as.info, Node: SH64-Addressing, Prev: SH64-Regs, Up: SH64 Syntax
-
-8.27.2.3 Addressing Modes
-.........................
-
-SH64 operands consist of either a register or immediate value. The
-immediate value can be a constant or label reference (or portion of a
-label reference), as in this example:
-
- movi 4,r2
- pt function, tr4
- movi (function >> 16) & 65535,r0
- shori function & 65535, r0
- ld.l r0,4,r0
-
- Instruction label references can reference labels in either SHmedia
-or SHcompact. To differentiate between the two, labels in SHmedia
-sections will always have the least significant bit set (i.e. they will
-be odd), which SHcompact labels will have the least significant bit
-reset (i.e. they will be even). If you need to reference the actual
-address of a label, you can use the `datalabel' modifier, as in this
-example:
-
- .long function
- .long datalabel function
-
- In that example, the first longword may or may not have the least
-significant bit set depending on whether the label is an SHmedia label
-or an SHcompact label. The second longword will be the actual address
-of the label, regardless of what type of label it is.
-
-
-File: as.info, Node: SH64 Directives, Next: SH64 Opcodes, Prev: SH64 Syntax, Up: SH64-Dependent
-
-8.27.3 SH64 Machine Directives
-------------------------------
-
-In addition to the SH directives, the SH64 provides the following
-directives:
-
-`.mode [shmedia|shcompact]'
-`.isa [shmedia|shcompact]'
- Specify the ISA for the following instructions (the two directives
- are equivalent). Note that programs such as `objdump' rely on
- symbolic labels to determine when such mode switches occur (by
- checking the least significant bit of the label's address), so
- such mode/isa changes should always be followed by a label (in
- practice, this is true anyway). Note that you cannot use these
- directives if you didn't specify an ISA on the command line.
-
-`.abi [32|64]'
- Specify the ABI for the following instructions. Note that you
- cannot use this directive unless you specified an ABI on the
- command line, and the ABIs specified must match.
-
-`.uaquad'
- Like .uaword and .ualong, this allows you to specify an
- intentionally unaligned quadword (64 bit word).
-
-
-
-File: as.info, Node: SH64 Opcodes, Prev: SH64 Directives, Up: SH64-Dependent
-
-8.27.4 Opcodes
---------------
-
-For detailed information on the SH64 machine instruction set, see
-`SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.).
-
- `as' implements all the standard SH64 opcodes. In addition, the
-following pseudo-opcodes may be expanded into one or more alternate
-opcodes:
-
-`movi'
- If the value doesn't fit into a standard `movi' opcode, `as' will
- replace the `movi' with a sequence of `movi' and `shori' opcodes.
-
-`pt'
- This expands to a sequence of `movi' and `shori' opcode, followed
- by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on
- the label referenced.
-
-
-
-File: as.info, Node: Sparc-Dependent, Next: TIC54X-Dependent, Prev: PPC-Dependent, Up: Machine Dependencies
-
-8.28 SPARC Dependent Features
-=============================
-
-* Menu:
-
-* Sparc-Opts:: Options
-* Sparc-Aligned-Data:: Option to enforce aligned data
-* Sparc-Float:: Floating Point
-* Sparc-Directives:: Sparc Machine Directives
-
-
-File: as.info, Node: Sparc-Opts, Next: Sparc-Aligned-Data, Up: Sparc-Dependent
-
-8.28.1 Options
---------------
-
-The SPARC chip family includes several successive levels, using the same
-core instruction set, but including a few additional instructions at
-each level. There are exceptions to this however. For details on what
-instructions each variant supports, please see the chip's architecture
-reference manual.
-
- By default, `as' assumes the core instruction set (SPARC v6), but
-"bumps" the architecture level as needed: it switches to successively
-higher architectures as it encounters instructions that only exist in
-the higher levels.
-
- If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump
-passed sparclite by default, an option must be passed to enable the v9
-instructions.
-
- GAS treats sparclite as being compatible with v8, unless an
-architecture is explicitly requested. SPARC v9 is always incompatible
-with sparclite.
-
-`-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
-`-Av8plus | -Av8plusa | -Av9 | -Av9a'
- Use one of the `-A' options to select one of the SPARC
- architectures explicitly. If you select an architecture
- explicitly, `as' reports a fatal error if it encounters an
- instruction or feature requiring an incompatible or higher level.
-
- `-Av8plus' and `-Av8plusa' select a 32 bit environment.
-
- `-Av9' and `-Av9a' select a 64 bit environment and are not
- available unless GAS is explicitly configured with 64 bit
- environment support.
-
- `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
- UltraSPARC extensions.
-
-`-xarch=v8plus | -xarch=v8plusa'
- For compatibility with the Solaris v9 assembler. These options are
- equivalent to -Av8plus and -Av8plusa, respectively.
-
-`-bump'
- Warn whenever it is necessary to switch to another level. If an
- architecture level is explicitly requested, GAS will not issue
- warnings until that level is reached, and will then bump the level
- as required (except between incompatible levels).
-
-`-32 | -64'
- Select the word size, either 32 bits or 64 bits. These options
- are only available with the ELF object file format, and require
- that the necessary BFD support has been included.
-
-
-File: as.info, Node: Sparc-Aligned-Data, Next: Sparc-Float, Prev: Sparc-Opts, Up: Sparc-Dependent
-
-8.28.2 Enforcing aligned data
------------------------------
-
-SPARC GAS normally permits data to be misaligned. For example, it
-permits the `.long' pseudo-op to be used on a byte boundary. However,
-the native SunOS and Solaris assemblers issue an error when they see
-misaligned data.
-
- You can use the `--enforce-aligned-data' option to make SPARC GAS
-also issue an error about misaligned data, just as the SunOS and Solaris
-assemblers do.
-
- The `--enforce-aligned-data' option is not the default because gcc
-issues misaligned data pseudo-ops when it initializes certain packed
-data structures (structures defined using the `packed' attribute). You
-may have to assemble with GAS in order to initialize packed data
-structures in your own code.
-
-
-File: as.info, Node: Sparc-Float, Next: Sparc-Directives, Prev: Sparc-Aligned-Data, Up: Sparc-Dependent
-
-8.28.3 Floating Point
----------------------
-
-The Sparc uses IEEE floating-point numbers.
-
-
-File: as.info, Node: Sparc-Directives, Prev: Sparc-Float, Up: Sparc-Dependent
-
-8.28.4 Sparc Machine Directives
--------------------------------
-
-The Sparc version of `as' supports the following additional machine
-directives:
-
-`.align'
- This must be followed by the desired alignment in bytes.
-
-`.common'
- This must be followed by a symbol name, a positive number, and
- `"bss"'. This behaves somewhat like `.comm', but the syntax is
- different.
-
-`.half'
- This is functionally identical to `.short'.
-
-`.nword'
- On the Sparc, the `.nword' directive produces native word sized
- value, ie. if assembling with -32 it is equivalent to `.word', if
- assembling with -64 it is equivalent to `.xword'.
-
-`.proc'
- This directive is ignored. Any text following it on the same line
- is also ignored.
-
-`.register'
- This directive declares use of a global application or system
- register. It must be followed by a register name %g2, %g3, %g6 or
- %g7, comma and the symbol name for that register. If symbol name
- is `#scratch', it is a scratch register, if it is `#ignore', it
- just suppresses any errors about using undeclared global register,
- but does not emit any information about it into the object file.
- This can be useful e.g. if you save the register before use and
- restore it after.
-
-`.reserve'
- This must be followed by a symbol name, a positive number, and
- `"bss"'. This behaves somewhat like `.lcomm', but the syntax is
- different.
-
-`.seg'
- This must be followed by `"text"', `"data"', or `"data1"'. It
- behaves like `.text', `.data', or `.data 1'.
-
-`.skip'
- This is functionally identical to the `.space' directive.
-
-`.word'
- On the Sparc, the `.word' directive produces 32 bit values,
- instead of the 16 bit values it produces on many other machines.
-
-`.xword'
- On the Sparc V9 processor, the `.xword' directive produces 64 bit
- values.
-
-
-File: as.info, Node: TIC54X-Dependent, Next: V850-Dependent, Prev: Sparc-Dependent, Up: Machine Dependencies
-
-8.29 TIC54X Dependent Features
-==============================
-
-* Menu:
-
-* TIC54X-Opts:: Command-line Options
-* TIC54X-Block:: Blocking
-* TIC54X-Env:: Environment Settings
-* TIC54X-Constants:: Constants Syntax
-* TIC54X-Subsyms:: String Substitution
-* TIC54X-Locals:: Local Label Syntax
-* TIC54X-Builtins:: Builtin Assembler Math Functions
-* TIC54X-Ext:: Extended Addressing Support
-* TIC54X-Directives:: Directives
-* TIC54X-Macros:: Macro Features
-* TIC54X-MMRegs:: Memory-mapped Registers
-
-
-File: as.info, Node: TIC54X-Opts, Next: TIC54X-Block, Up: TIC54X-Dependent
-
-8.29.1 Options
---------------
-
-The TMS320C54x version of `as' has a few machine-dependent options.
-
- You can use the `-mfar-mode' option to enable extended addressing
-mode. All addresses will be assumed to be > 16 bits, and the
-appropriate relocation types will be used. This option is equivalent
-to using the `.far_mode' directive in the assembly code. If you do not
-use the `-mfar-mode' option, all references will be assumed to be 16
-bits. This option may be abbreviated to `-mf'.
-
- You can use the `-mcpu' option to specify a particular CPU. This
-option is equivalent to using the `.version' directive in the assembly
-code. For recognized CPU codes, see *Note `.version':
-TIC54X-Directives. The default CPU version is `542'.
-
- You can use the `-merrors-to-file' option to redirect error output
-to a file (this provided for those deficient environments which don't
-provide adequate output redirection). This option may be abbreviated to
-`-me'.
-
-
-File: as.info, Node: TIC54X-Block, Next: TIC54X-Env, Prev: TIC54X-Opts, Up: TIC54X-Dependent
-
-8.29.2 Blocking
----------------
-
-A blocked section or memory block is guaranteed not to cross the
-blocking boundary (usually a page, or 128 words) if it is smaller than
-the blocking size, or to start on a page boundary if it is larger than
-the blocking size.
-
-
-File: as.info, Node: TIC54X-Env, Next: TIC54X-Constants, Prev: TIC54X-Block, Up: TIC54X-Dependent
-
-8.29.3 Environment Settings
----------------------------
-
-`C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added
-to the list of directories normally searched for source and include
-files. `C54XDSP_DIR' will override `A_DIR'.
-
-
-File: as.info, Node: TIC54X-Constants, Next: TIC54X-Subsyms, Prev: TIC54X-Env, Up: TIC54X-Dependent
-
-8.29.4 Constants Syntax
------------------------
-
-The TIC54X version of `as' allows the following additional constant
-formats, using a suffix to indicate the radix:
-
- Binary `000000B, 011000b'
- Octal `10Q, 224q'
- Hexadecimal `45h, 0FH'
-
-
-File: as.info, Node: TIC54X-Subsyms, Next: TIC54X-Locals, Prev: TIC54X-Constants, Up: TIC54X-Dependent
-
-8.29.5 String Substitution
---------------------------
-
-A subset of allowable symbols (which we'll call subsyms) may be assigned
-arbitrary string values. This is roughly equivalent to C preprocessor
-#define macros. When `as' encounters one of these symbols, the symbol
-is replaced in the input stream by its string value. Subsym names
-*must* begin with a letter.
-
- Subsyms may be defined using the `.asg' and `.eval' directives
-(*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives.
-
- Expansion is recursive until a previously encountered symbol is
-seen, at which point substitution stops.
-
- In this example, x is replaced with SYM2; SYM2 is replaced with
-SYM1, and SYM1 is replaced with x. At this point, x has already been
-encountered and the substitution stops.
-
- .asg "x",SYM1
- .asg "SYM1",SYM2
- .asg "SYM2",x
- add x,a ; final code assembled is "add x, a"
-
- Macro parameters are converted to subsyms; a side effect of this is
-the normal `as' '\ARG' dereferencing syntax is unnecessary. Subsyms
-defined within a macro will have global scope, unless the `.var'
-directive is used to identify the subsym as a local macro variable
-*note `.var': TIC54X-Directives.
-
- Substitution may be forced in situations where replacement might be
-ambiguous by placing colons on either side of the subsym. The following
-code:
-
- .eval "10",x
- LAB:X: add #x, a
-
- When assembled becomes:
-
- LAB10 add #10, a
-
- Smaller parts of the string assigned to a subsym may be accessed with
-the following syntax:
-
-``:SYMBOL(CHAR_INDEX):''
- Evaluates to a single-character string, the character at
- CHAR_INDEX.
-
-``:SYMBOL(START,LENGTH):''
- Evaluates to a substring of SYMBOL beginning at START with length
- LENGTH.
-
-
-File: as.info, Node: TIC54X-Locals, Next: TIC54X-Builtins, Prev: TIC54X-Subsyms, Up: TIC54X-Dependent
-
-8.29.6 Local Labels
--------------------
-
-Local labels may be defined in two ways:
-
- * $N, where N is a decimal number between 0 and 9
-
- * LABEL?, where LABEL is any legal symbol name.
-
- Local labels thus defined may be redefined or automatically
-generated. The scope of a local label is based on when it may be
-undefined or reset. This happens when one of the following situations
-is encountered:
-
- * .newblock directive *note `.newblock': TIC54X-Directives.
-
- * The current section is changed (.sect, .text, or .data)
-
- * Entering or leaving an included file
-
- * The macro scope where the label was defined is exited
-
-
-File: as.info, Node: TIC54X-Builtins, Next: TIC54X-Ext, Prev: TIC54X-Locals, Up: TIC54X-Dependent
-
-8.29.7 Math Builtins
---------------------
-
-The following built-in functions may be used to generate a
-floating-point value. All return a floating-point value except `$cvi',
-`$int', and `$sgn', which return an integer value.
-
-``$acos(EXPR)''
- Returns the floating point arccosine of EXPR.
-
-``$asin(EXPR)''
- Returns the floating point arcsine of EXPR.
-
-``$atan(EXPR)''
- Returns the floating point arctangent of EXPR.
-
-``$atan2(EXPR1,EXPR2)''
- Returns the floating point arctangent of EXPR1 / EXPR2.
-
-``$ceil(EXPR)''
- Returns the smallest integer not less than EXPR as floating point.
-
-``$cosh(EXPR)''
- Returns the floating point hyperbolic cosine of EXPR.
-
-``$cos(EXPR)''
- Returns the floating point cosine of EXPR.
-
-``$cvf(EXPR)''
- Returns the integer value EXPR converted to floating-point.
-
-``$cvi(EXPR)''
- Returns the floating point value EXPR converted to integer.
-
-``$exp(EXPR)''
- Returns the floating point value e ^ EXPR.
-
-``$fabs(EXPR)''
- Returns the floating point absolute value of EXPR.
-
-``$floor(EXPR)''
- Returns the largest integer that is not greater than EXPR as
- floating point.
-
-``$fmod(EXPR1,EXPR2)''
- Returns the floating point remainder of EXPR1 / EXPR2.
-
-``$int(EXPR)''
- Returns 1 if EXPR evaluates to an integer, zero otherwise.
-
-``$ldexp(EXPR1,EXPR2)''
- Returns the floating point value EXPR1 * 2 ^ EXPR2.
-
-``$log10(EXPR)''
- Returns the base 10 logarithm of EXPR.
-
-``$log(EXPR)''
- Returns the natural logarithm of EXPR.
-
-``$max(EXPR1,EXPR2)''
- Returns the floating point maximum of EXPR1 and EXPR2.
-
-``$min(EXPR1,EXPR2)''
- Returns the floating point minimum of EXPR1 and EXPR2.
-
-``$pow(EXPR1,EXPR2)''
- Returns the floating point value EXPR1 ^ EXPR2.
-
-``$round(EXPR)''
- Returns the nearest integer to EXPR as a floating point number.
-
-``$sgn(EXPR)''
- Returns -1, 0, or 1 based on the sign of EXPR.
-
-``$sin(EXPR)''
- Returns the floating point sine of EXPR.
-
-``$sinh(EXPR)''
- Returns the floating point hyperbolic sine of EXPR.
-
-``$sqrt(EXPR)''
- Returns the floating point square root of EXPR.
-
-``$tan(EXPR)''
- Returns the floating point tangent of EXPR.
-
-``$tanh(EXPR)''
- Returns the floating point hyperbolic tangent of EXPR.
-
-``$trunc(EXPR)''
- Returns the integer value of EXPR truncated towards zero as
- floating point.
-
-
-
-File: as.info, Node: TIC54X-Ext, Next: TIC54X-Directives, Prev: TIC54X-Builtins, Up: TIC54X-Dependent
-
-8.29.8 Extended Addressing
---------------------------
-
-The `LDX' pseudo-op is provided for loading the extended addressing bits
-of a label or address. For example, if an address `_label' resides in
-extended program memory, the value of `_label' may be loaded as follows:
- ldx #_label,16,a ; loads extended bits of _label
- or #_label,a ; loads lower 16 bits of _label
- bacc a ; full address is in accumulator A
-
-
-File: as.info, Node: TIC54X-Directives, Next: TIC54X-Macros, Prev: TIC54X-Ext, Up: TIC54X-Dependent
-
-8.29.9 Directives
------------------
-
-`.align [SIZE]'
-`.even'
- Align the section program counter on the next boundary, based on
- SIZE. SIZE may be any power of 2. `.even' is equivalent to
- `.align' with a SIZE of 2.
- `1'
- Align SPC to word boundary
-
- `2'
- Align SPC to longword boundary (same as .even)
-
- `128'
- Align SPC to page boundary
-
-`.asg STRING, NAME'
- Assign NAME the string STRING. String replacement is performed on
- STRING before assignment.
-
-`.eval STRING, NAME'
- Evaluate the contents of string STRING and assign the result as a
- string to the subsym NAME. String replacement is performed on
- STRING before assignment.
-
-`.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
- Reserve space for SYMBOL in the .bss section. SIZE is in words.
- If present, BLOCKING_FLAG indicates the allocated space should be
- aligned on a page boundary if it would otherwise cross a page
- boundary. If present, ALIGNMENT_FLAG causes the assembler to
- allocate SIZE on a long word boundary.
-
-`.byte VALUE [,...,VALUE_N]'
-`.ubyte VALUE [,...,VALUE_N]'
-`.char VALUE [,...,VALUE_N]'
-`.uchar VALUE [,...,VALUE_N]'
- Place one or more bytes into consecutive words of the current
- section. The upper 8 bits of each word is zero-filled. If a
- label is used, it points to the word allocated for the first byte
- encountered.
-
-`.clink ["SECTION_NAME"]'
- Set STYP_CLINK flag for this section, which indicates to the
- linker that if no symbols from this section are referenced, the
- section should not be included in the link. If SECTION_NAME is
- omitted, the current section is used.
-
-`.c_mode'
- TBD.
-
-`.copy "FILENAME" | FILENAME'
-`.include "FILENAME" | FILENAME'
- Read source statements from FILENAME. The normal include search
- path is used. Normally .copy will cause statements from the
- included file to be printed in the assembly listing and .include
- will not, but this distinction is not currently implemented.
-
-`.data'
- Begin assembling code into the .data section.
-
-`.double VALUE [,...,VALUE_N]'
-`.ldouble VALUE [,...,VALUE_N]'
-`.float VALUE [,...,VALUE_N]'
-`.xfloat VALUE [,...,VALUE_N]'
- Place an IEEE single-precision floating-point representation of
- one or more floating-point values into the current section. All
- but `.xfloat' align the result on a longword boundary. Values are
- stored most-significant word first.
-
-`.drlist'
-`.drnolist'
- Control printing of directives to the listing file. Ignored.
-
-`.emsg STRING'
-`.mmsg STRING'
-`.wmsg STRING'
- Emit a user-defined error, message, or warning, respectively.
-
-`.far_mode'
- Use extended addressing when assembling statements. This should
- appear only once per file, and is equivalent to the -mfar-mode
- option *note `-mfar-mode': TIC54X-Opts.
-
-`.fclist'
-`.fcnolist'
- Control printing of false conditional blocks to the listing file.
-
-`.field VALUE [,SIZE]'
- Initialize a bitfield of SIZE bits in the current section. If
- VALUE is relocatable, then SIZE must be 16. SIZE defaults to 16
- bits. If VALUE does not fit into SIZE bits, the value will be
- truncated. Successive `.field' directives will pack starting at
- the current word, filling the most significant bits first, and
- aligning to the start of the next word if the field size does not
- fit into the space remaining in the current word. A `.align'
- directive with an operand of 1 will force the next `.field'
- directive to begin packing into a new word. If a label is used, it
- points to the word that contains the specified field.
-
-`.global SYMBOL [,...,SYMBOL_N]'
-`.def SYMBOL [,...,SYMBOL_N]'
-`.ref SYMBOL [,...,SYMBOL_N]'
- `.def' nominally identifies a symbol defined in the current file
- and availalbe to other files. `.ref' identifies a symbol used in
- the current file but defined elsewhere. Both map to the standard
- `.global' directive.
-
-`.half VALUE [,...,VALUE_N]'
-`.uhalf VALUE [,...,VALUE_N]'
-`.short VALUE [,...,VALUE_N]'
-`.ushort VALUE [,...,VALUE_N]'
-`.int VALUE [,...,VALUE_N]'
-`.uint VALUE [,...,VALUE_N]'
-`.word VALUE [,...,VALUE_N]'
-`.uword VALUE [,...,VALUE_N]'
- Place one or more values into consecutive words of the current
- section. If a label is used, it points to the word allocated for
- the first value encountered.
-
-`.label SYMBOL'
- Define a special SYMBOL to refer to the load time address of the
- current section program counter.
-
-`.length'
-`.width'
- Set the page length and width of the output listing file. Ignored.
-
-`.list'
-`.nolist'
- Control whether the source listing is printed. Ignored.
-
-`.long VALUE [,...,VALUE_N]'
-`.ulong VALUE [,...,VALUE_N]'
-`.xlong VALUE [,...,VALUE_N]'
- Place one or more 32-bit values into consecutive words in the
- current section. The most significant word is stored first.
- `.long' and `.ulong' align the result on a longword boundary;
- `xlong' does not.
-
-`.loop [COUNT]'
-`.break [CONDITION]'
-`.endloop'
- Repeatedly assemble a block of code. `.loop' begins the block, and
- `.endloop' marks its termination. COUNT defaults to 1024, and
- indicates the number of times the block should be repeated.
- `.break' terminates the loop so that assembly begins after the
- `.endloop' directive. The optional CONDITION will cause the loop
- to terminate only if it evaluates to zero.
-
-`MACRO_NAME .macro [PARAM1][,...PARAM_N]'
-`[.mexit]'
-`.endm'
- See the section on macros for more explanation (*Note
- TIC54X-Macros::.
-
-`.mlib "FILENAME" | FILENAME'
- Load the macro library FILENAME. FILENAME must be an archived
- library (BFD ar-compatible) of text files, expected to contain
- only macro definitions. The standard include search path is used.
-
-`.mlist'
-
-`.mnolist'
- Control whether to include macro and loop block expansions in the
- listing output. Ignored.
-
-`.mmregs'
- Define global symbolic names for the 'c54x registers. Supposedly
- equivalent to executing `.set' directives for each register with
- its memory-mapped value, but in reality is provided only for
- compatibility and does nothing.
-
-`.newblock'
- This directive resets any TIC54X local labels currently defined.
- Normal `as' local labels are unaffected.
-
-`.option OPTION_LIST'
- Set listing options. Ignored.
-
-`.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]'
- Designate SECTION_NAME for blocking. Blocking guarantees that a
- section will start on a page boundary (128 words) if it would
- otherwise cross a page boundary. Only initialized sections may be
- designated with this directive. See also *Note TIC54X-Block::.
-
-`.sect "SECTION_NAME"'
- Define a named initialized section and make it the current section.
-
-`SYMBOL .set "VALUE"'
-`SYMBOL .equ "VALUE"'
- Equate a constant VALUE to a SYMBOL, which is placed in the symbol
- table. SYMBOL may not be previously defined.
-
-`.space SIZE_IN_BITS'
-`.bes SIZE_IN_BITS'
- Reserve the given number of bits in the current section and
- zero-fill them. If a label is used with `.space', it points to the
- *first* word reserved. With `.bes', the label points to the
- *last* word reserved.
-
-`.sslist'
-`.ssnolist'
- Controls the inclusion of subsym replacement in the listing
- output. Ignored.
-
-`.string "STRING" [,...,"STRING_N"]'
-`.pstring "STRING" [,...,"STRING_N"]'
- Place 8-bit characters from STRING into the current section.
- `.string' zero-fills the upper 8 bits of each word, while
- `.pstring' puts two characters into each word, filling the
- most-significant bits first. Unused space is zero-filled. If a
- label is used, it points to the first word initialized.
-
-`[STAG] .struct [OFFSET]'
-`[NAME_1] element [COUNT_1]'
-`[NAME_2] element [COUNT_2]'
-`[TNAME] .tag STAGX [TCOUNT]'
-`...'
-`[NAME_N] element [COUNT_N]'
-`[SSIZE] .endstruct'
-`LABEL .tag [STAG]'
- Assign symbolic offsets to the elements of a structure. STAG
- defines a symbol to use to reference the structure. OFFSET
- indicates a starting value to use for the first element
- encountered; otherwise it defaults to zero. Each element can have
- a named offset, NAME, which is a symbol assigned the value of the
- element's offset into the structure. If STAG is missing, these
- become global symbols. COUNT adjusts the offset that many times,
- as if `element' were an array. `element' may be one of `.byte',
- `.word', `.long', `.float', or any equivalent of those, and the
- structure offset is adjusted accordingly. `.field' and `.string'
- are also allowed; the size of `.field' is one bit, and `.string'
- is considered to be one word in size. Only element descriptors,
- structure/union tags, `.align' and conditional assembly directives
- are allowed within `.struct'/`.endstruct'. `.align' aligns member
- offsets to word boundaries only. SSIZE, if provided, will always
- be assigned the size of the structure.
-
- The `.tag' directive, in addition to being used to define a
- structure/union element within a structure, may be used to apply a
- structure to a symbol. Once applied to LABEL, the individual
- structure elements may be applied to LABEL to produce the desired
- offsets using LABEL as the structure base.
-
-`.tab'
- Set the tab size in the output listing. Ignored.
-
-`[UTAG] .union'
-`[NAME_1] element [COUNT_1]'
-`[NAME_2] element [COUNT_2]'
-`[TNAME] .tag UTAGX[,TCOUNT]'
-`...'
-`[NAME_N] element [COUNT_N]'
-`[USIZE] .endstruct'
-`LABEL .tag [UTAG]'
- Similar to `.struct', but the offset after each element is reset to
- zero, and the USIZE is set to the maximum of all defined elements.
- Starting offset for the union is always zero.
-
-`[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
- Reserve space for variables in a named, uninitialized section
- (similar to .bss). `.usect' allows definitions sections
- independent of .bss. SYMBOL points to the first location reserved
- by this allocation. The symbol may be used as a variable name.
- SIZE is the allocated size in words. BLOCKING_FLAG indicates
- whether to block this section on a page boundary (128 words)
- (*note TIC54X-Block::). ALIGNMENT FLAG indicates whether the
- section should be longword-aligned.
-
-`.var SYM[,..., SYM_N]'
- Define a subsym to be a local variable within a macro. See *Note
- TIC54X-Macros::.
-
-`.version VERSION'
- Set which processor to build instructions for. Though the
- following values are accepted, the op is ignored.
- `541'
- `542'
- `543'
- `545'
- `545LP'
- `546LP'
- `548'
- `549'
-
-
-File: as.info, Node: TIC54X-Macros, Next: TIC54X-MMRegs, Prev: TIC54X-Directives, Up: TIC54X-Dependent
-
-8.29.10 Macros
---------------
-
-Macros do not require explicit dereferencing of arguments (i.e. \ARG).
-
- During macro expansion, the macro parameters are converted to
-subsyms. If the number of arguments passed the macro invocation
-exceeds the number of parameters defined, the last parameter is
-assigned the string equivalent of all remaining arguments. If fewer
-arguments are given than parameters, the missing parameters are
-assigned empty strings. To include a comma in an argument, you must
-enclose the argument in quotes.
-
- The following built-in subsym functions allow examination of the
-string value of subsyms (or ordinary strings). The arguments are
-strings unless otherwise indicated (subsyms passed as args will be
-replaced by the strings they represent).
-``$symlen(STR)''
- Returns the length of STR.
-
-``$symcmp(STR1,STR2)''
- Returns 0 if STR1 == STR2, non-zero otherwise.
-
-``$firstch(STR,CH)''
- Returns index of the first occurrence of character constant CH in
- STR.
-
-``$lastch(STR,CH)''
- Returns index of the last occurrence of character constant CH in
- STR.
-
-``$isdefed(SYMBOL)''
- Returns zero if the symbol SYMBOL is not in the symbol table,
- non-zero otherwise.
-
-``$ismember(SYMBOL,LIST)''
- Assign the first member of comma-separated string LIST to SYMBOL;
- LIST is reassigned the remainder of the list. Returns zero if
- LIST is a null string. Both arguments must be subsyms.
-
-``$iscons(EXPR)''
- Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal,
- 4 if a character, 5 if decimal, and zero if not an integer.
-
-``$isname(NAME)''
- Returns 1 if NAME is a valid symbol name, zero otherwise.
-
-``$isreg(REG)''
- Returns 1 if REG is a valid predefined register name (AR0-AR7
- only).
-
-``$structsz(STAG)''
- Returns the size of the structure or union represented by STAG.
-
-``$structacc(STAG)''
- Returns the reference point of the structure or union represented
- by STAG. Always returns zero.
-
-
-
-File: as.info, Node: TIC54X-MMRegs, Prev: TIC54X-Macros, Up: TIC54X-Dependent
-
-8.29.11 Memory-mapped Registers
--------------------------------
-
-The following symbols are recognized as memory-mapped registers:
-
-
-
-File: as.info, Node: Z80-Dependent, Next: Z8000-Dependent, Prev: Xtensa-Dependent, Up: Machine Dependencies
-
-8.30 Z80 Dependent Features
-===========================
-
-* Menu:
-
-* Z80 Options:: Options
-* Z80 Syntax:: Syntax
-* Z80 Floating Point:: Floating Point
-* Z80 Directives:: Z80 Machine Directives
-* Z80 Opcodes:: Opcodes
-
-
-File: as.info, Node: Z80 Options, Next: Z80 Syntax, Up: Z80-Dependent
-
-8.30.1 Options
---------------
-
-The Zilog Z80 and Ascii R800 version of `as' have a few machine
-dependent options.
-`-z80'
- Produce code for the Z80 processor. There are additional options to
- request warnings and error messages for undocumented instructions.
-
-`-ignore-undocumented-instructions'
-`-Wnud'
- Silently assemble undocumented Z80-instructions that have been
- adopted as documented R800-instructions.
-
-`-ignore-unportable-instructions'
-`-Wnup'
- Silently assemble all undocumented Z80-instructions.
-
-`-warn-undocumented-instructions'
-`-Wud'
- Issue warnings for undocumented Z80-instructions that work on
- R800, do not assemble other undocumented instructions without
- warning.
-
-`-warn-unportable-instructions'
-`-Wup'
- Issue warnings for other undocumented Z80-instructions, do not
- treat any undocumented instructions as errors.
-
-`-forbid-undocumented-instructions'
-`-Fud'
- Treat all undocumented z80-instructions as errors.
-
-`-forbid-unportable-instructions'
-`-Fup'
- Treat undocumented z80-instructions that do not work on R800 as
- errors.
-
-`-r800'
- Produce code for the R800 processor. The assembler does not support
- undocumented instructions for the R800. In line with common
- practice, `as' uses Z80 instriction names for the R800 processor,
- as far as they exist.
-
-
-File: as.info, Node: Z80 Syntax, Next: Z80 Floating Point, Prev: Z80 Options, Up: Z80-Dependent
-
-8.30.2 Syntax
--------------
-
-The assembler syntax closely follows the 'Z80 family CPU User Manual' by
-Zilog. In expressions a single `=' may be used as "is equal to"
-comparison operator.
-
- Suffices can be used to indicate the radix of integer constants; `H'
-or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o'
-for octal, and `B' for binary.
-
- The suffix `b' denotes a backreference to local label.
-
-* Menu:
-
-* Z80-Chars:: Special Characters
-* Z80-Regs:: Register Names
-* Z80-Case:: Case Sensitivity
-
-
-File: as.info, Node: Z80-Chars, Next: Z80-Regs, Up: Z80 Syntax
-
-8.30.2.1 Special Characters
-...........................
-
-The semicolon `;' is the line comment character;
-
- The dollar sign `$' can be used as a prefix for hexadecimal numbers
-and as a symbol denoting the current location counter.
-
- A backslash `\' is an ordinary character for the Z80 assembler.
-
- The single quote `'' must be followed by a closing quote. If there
-is one character inbetween, it is a character constant, otherwise it is
-a string constant.
-
-
-File: as.info, Node: Z80-Regs, Next: Z80-Case, Prev: Z80-Chars, Up: Z80 Syntax
-
-8.30.2.2 Register Names
-.......................
-
-The registers are referred to with the letters assigned to them by
-Zilog. In addition `as' recognises `ixl' and `ixh' as the least and
-most significant octet in `ix', and similarly `iyl' and `iyh' as parts
-of `iy'.
-
-
-File: as.info, Node: Z80-Case, Prev: Z80-Regs, Up: Z80 Syntax
-
-8.30.2.3 Case Sensitivity
-.........................
-
-Upper and lower case are equivalent in register names, opcodes,
-condition codes and assembler directives. The case of letters is
-significant in labels and symbol names. The case is also important to
-distinguish the suffix `b' for a backward reference to a local label
-from the suffix `B' for a number in binary notation.
-
-
-File: as.info, Node: Z80 Floating Point, Next: Z80 Directives, Prev: Z80 Syntax, Up: Z80-Dependent
-
-8.30.3 Floating Point
----------------------
-
-Floating-point numbers are not supported.
-
-
-File: as.info, Node: Z80 Directives, Next: Z80 Opcodes, Prev: Z80 Floating Point, Up: Z80-Dependent
-
-8.30.4 Z80 Assembler Directives
--------------------------------
-
-`as' for the Z80 supports some additional directives for compatibility
-with other assemblers.
-
- These are the additional directives in `as' for the Z80:
-
-`db EXPRESSION|STRING[,EXPRESSION|STRING...]'
-`defb EXPRESSION|STRING[,EXPRESSION|STRING...]'
- For each STRING the characters are copied to the object file, for
- each other EXPRESSION the value is stored in one byte. A warning
- is issued in case of an overflow.
-
-`dw EXPRESSION[,EXPRESSION...]'
-`defw EXPRESSION[,EXPRESSION...]'
- For each EXPRESSION the value is stored in two bytes, ignoring
- overflow.
-
-`d24 EXPRESSION[,EXPRESSION...]'
-`def24 EXPRESSION[,EXPRESSION...]'
- For each EXPRESSION the value is stored in three bytes, ignoring
- overflow.
-
-`d32 EXPRESSION[,EXPRESSION...]'
-`def32 EXPRESSION[,EXPRESSION...]'
- For each EXPRESSION the value is stored in four bytes, ignoring
- overflow.
-
-`ds COUNT[, VALUE]'
-`defs COUNT[, VALUE]'
- Fill COUNT bytes in the object file with VALUE, if VALUE is
- omitted it defaults to zero.
-
-`SYMBOL equ EXPRESSION'
-`SYMBOL defl EXPRESSION'
- These directives set the value of SYMBOL to EXPRESSION. If `equ'
- is used, it is an error if SYMBOL is already defined. Symbols
- defined with `equ' are not protected from redefinition.
-
-`set'
- This is a normal instruction on Z80, and not an assembler
- directive.
-
-`psect NAME'
- A synonym for *Note Section::, no second argument should be given.
-
-
-
-File: as.info, Node: Z80 Opcodes, Prev: Z80 Directives, Up: Z80-Dependent
-
-8.30.5 Opcodes
---------------
-
-In line with commmon practice Z80 mnonics are used for both the Z80 and
-the R800.
-
- In many instructions it is possible to use one of the half index
-registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general
-purpose register. This yields instructions that are documented on the
-R800 and undocumented on the Z80. Similarly `in f,(c)' is documented
-on the R800 and undocumented on the Z80.
-
- The assembler also supports the following undocumented
-Z80-instructions, that have not been adopted in the R800 instruction
-set:
-`out (c),0'
- Sends zero to the port pointed to by register c.
-
-`sli M'
- Equivalent to `M = (M<<1)+1', the operand M can be any operand
- that is valid for `sla'. One can use `sll' as a synonym for `sli'.
-
-`OP (ix+D), R'
- This is equivalent to
-
- ld R, (ix+D)
- OPC R
- ld (ix+D), R
-
- The operation `OPC' may be any of `res B,', `set B,', `rl', `rlc',
- `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R'
- may be any of `a', `b', `c', `d', `e', `h' and `l'.
-
-`OPC (iy+D), R'
- As above, but with `iy' instead of `ix'.
-
- The web site at `http://www.z80.info' is a good starting place to
-find more information on programming the Z80.
-
-
-File: as.info, Node: Z8000-Dependent, Next: Vax-Dependent, Prev: Z80-Dependent, Up: Machine Dependencies
-
-8.31 Z8000 Dependent Features
-=============================
-
- The Z8000 as supports both members of the Z8000 family: the
-unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with
-24 bit addresses.
-
- When the assembler is in unsegmented mode (specified with the
-`unsegm' directive), an address takes up one word (16 bit) sized
-register. When the assembler is in segmented mode (specified with the
-`segm' directive), a 24-bit address takes up a long (32 bit) register.
-*Note Assembler Directives for the Z8000: Z8000 Directives, for a list
-of other Z8000 specific assembler directives.
-
-* Menu:
-
-* Z8000 Options:: Command-line options for the Z8000
-* Z8000 Syntax:: Assembler syntax for the Z8000
-* Z8000 Directives:: Special directives for the Z8000
-* Z8000 Opcodes:: Opcodes
-
-
-File: as.info, Node: Z8000 Options, Next: Z8000 Syntax, Up: Z8000-Dependent
-
-8.31.1 Options
---------------
-
-`-z8001'
- Generate segmented code by default.
-
-`-z8002'
- Generate unsegmented code by default.
-
-
-File: as.info, Node: Z8000 Syntax, Next: Z8000 Directives, Prev: Z8000 Options, Up: Z8000-Dependent
-
-8.31.2 Syntax
--------------
-
-* Menu:
-
-* Z8000-Chars:: Special Characters
-* Z8000-Regs:: Register Names
-* Z8000-Addressing:: Addressing Modes
-
-
-File: as.info, Node: Z8000-Chars, Next: Z8000-Regs, Up: Z8000 Syntax
-
-8.31.2.1 Special Characters
-...........................
-
-`!' is the line comment character.
-
- You can use `;' instead of a newline to separate statements.
-
-
-File: as.info, Node: Z8000-Regs, Next: Z8000-Addressing, Prev: Z8000-Chars, Up: Z8000 Syntax
-
-8.31.2.2 Register Names
-.......................
-
-The Z8000 has sixteen 16 bit registers, numbered 0 to 15. You can refer
-to different sized groups of registers by register number, with the
-prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for
-64 bit registers. You can also refer to the contents of the first
-eight (of the sixteen 16 bit registers) by bytes. They are named `rlN'
-and `rhN'.
-
-_byte registers_
- rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3
- rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7
-
-_word registers_
- r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
-
-_long word registers_
- rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
-
-_quad word registers_
- rq0 rq4 rq8 rq12
-
-
-File: as.info, Node: Z8000-Addressing, Prev: Z8000-Regs, Up: Z8000 Syntax
-
-8.31.2.3 Addressing Modes
-.........................
-
-as understands the following addressing modes for the Z8000:
-
-`rlN'
-`rhN'
-`rN'
-`rrN'
-`rqN'
- Register direct: 8bit, 16bit, 32bit, and 64bit registers.
-
-`@rN'
-`@rrN'
- Indirect register: @rrN in segmented mode, @rN in unsegmented
- mode.
-
-`ADDR'
- Direct: the 16 bit or 24 bit address (depending on whether the
- assembler is in segmented or unsegmented mode) of the operand is
- in the instruction.
-
-`address(rN)'
- Indexed: the 16 or 24 bit address is added to the 16 bit register
- to produce the final address in memory of the operand.
-
-`rN(#IMM)'
-`rrN(#IMM)'
- Base Address: the 16 or 24 bit register is added to the 16 bit sign
- extended immediate displacement to produce the final address in
- memory of the operand.
-
-`rN(rM)'
-`rrN(rM)'
- Base Index: the 16 or 24 bit register rN or rrN is added to the
- sign extended 16 bit index register rM to produce the final
- address in memory of the operand.
-
-`#XX'
- Immediate data XX.
-
-
-File: as.info, Node: Z8000 Directives, Next: Z8000 Opcodes, Prev: Z8000 Syntax, Up: Z8000-Dependent
-
-8.31.3 Assembler Directives for the Z8000
------------------------------------------
-
-The Z8000 port of as includes additional assembler directives, for
-compatibility with other Z8000 assemblers. These do not begin with `.'
-(unlike the ordinary as directives).
-
-`segm'
-`.z8001'
- Generate code for the segmented Z8001.
-
-`unsegm'
-`.z8002'
- Generate code for the unsegmented Z8002.
-
-`name'
- Synonym for `.file'
-
-`global'
- Synonym for `.global'
-
-`wval'
- Synonym for `.word'
-
-`lval'
- Synonym for `.long'
-
-`bval'
- Synonym for `.byte'
-
-`sval'
- Assemble a string. `sval' expects one string literal, delimited by
- single quotes. It assembles each byte of the string into
- consecutive addresses. You can use the escape sequence `%XX'
- (where XX represents a two-digit hexadecimal number) to represent
- the character whose ASCII value is XX. Use this feature to
- describe single quote and other characters that may not appear in
- string literals as themselves. For example, the C statement
- `char *a = "he said \"it's 50% off\"";' is represented in Z8000
- assembly language (shown with the assembler output in hex at the
- left) as
-
- 68652073 sval 'he said %22it%27s 50%25 off%22%00'
- 61696420
- 22697427
- 73203530
- 25206F66
- 662200
-
-`rsect'
- synonym for `.section'
-
-`block'
- synonym for `.space'
-
-`even'
- special case of `.align'; aligns output to even byte boundary.
-
-
-File: as.info, Node: Z8000 Opcodes, Prev: Z8000 Directives, Up: Z8000-Dependent
-
-8.31.4 Opcodes
---------------
-
-For detailed information on the Z8000 machine instruction set, see
-`Z8000 Technical Manual'.
-
- The following table summarizes the opcodes and their arguments:
-
- rs 16 bit source register
- rd 16 bit destination register
- rbs 8 bit source register
- rbd 8 bit destination register
- rrs 32 bit source register
- rrd 32 bit destination register
- rqs 64 bit source register
- rqd 64 bit destination register
- addr 16/24 bit address
- imm immediate data
-
- adc rd,rs clrb addr cpsir @rd,@rs,rr,cc
- adcb rbd,rbs clrb addr(rd) cpsirb @rd,@rs,rr,cc
- add rd,@rs clrb rbd dab rbd
- add rd,addr com @rd dbjnz rbd,disp7
- add rd,addr(rs) com addr dec @rd,imm4m1
- add rd,imm16 com addr(rd) dec addr(rd),imm4m1
- add rd,rs com rd dec addr,imm4m1
- addb rbd,@rs comb @rd dec rd,imm4m1
- addb rbd,addr comb addr decb @rd,imm4m1
- addb rbd,addr(rs) comb addr(rd) decb addr(rd),imm4m1
- addb rbd,imm8 comb rbd decb addr,imm4m1
- addb rbd,rbs comflg flags decb rbd,imm4m1
- addl rrd,@rs cp @rd,imm16 di i2
- addl rrd,addr cp addr(rd),imm16 div rrd,@rs
- addl rrd,addr(rs) cp addr,imm16 div rrd,addr
- addl rrd,imm32 cp rd,@rs div rrd,addr(rs)
- addl rrd,rrs cp rd,addr div rrd,imm16
- and rd,@rs cp rd,addr(rs) div rrd,rs
- and rd,addr cp rd,imm16 divl rqd,@rs
- and rd,addr(rs) cp rd,rs divl rqd,addr
- and rd,imm16 cpb @rd,imm8 divl rqd,addr(rs)
- and rd,rs cpb addr(rd),imm8 divl rqd,imm32
- andb rbd,@rs cpb addr,imm8 divl rqd,rrs
- andb rbd,addr cpb rbd,@rs djnz rd,disp7
- andb rbd,addr(rs) cpb rbd,addr ei i2
- andb rbd,imm8 cpb rbd,addr(rs) ex rd,@rs
- andb rbd,rbs cpb rbd,imm8 ex rd,addr
- bit @rd,imm4 cpb rbd,rbs ex rd,addr(rs)
- bit addr(rd),imm4 cpd rd,@rs,rr,cc ex rd,rs
- bit addr,imm4 cpdb rbd,@rs,rr,cc exb rbd,@rs
- bit rd,imm4 cpdr rd,@rs,rr,cc exb rbd,addr
- bit rd,rs cpdrb rbd,@rs,rr,cc exb rbd,addr(rs)
- bitb @rd,imm4 cpi rd,@rs,rr,cc exb rbd,rbs
- bitb addr(rd),imm4 cpib rbd,@rs,rr,cc ext0e imm8
- bitb addr,imm4 cpir rd,@rs,rr,cc ext0f imm8
- bitb rbd,imm4 cpirb rbd,@rs,rr,cc ext8e imm8
- bitb rbd,rs cpl rrd,@rs ext8f imm8
- bpt cpl rrd,addr exts rrd
- call @rd cpl rrd,addr(rs) extsb rd
- call addr cpl rrd,imm32 extsl rqd
- call addr(rd) cpl rrd,rrs halt
- calr disp12 cpsd @rd,@rs,rr,cc in rd,@rs
- clr @rd cpsdb @rd,@rs,rr,cc in rd,imm16
- clr addr cpsdr @rd,@rs,rr,cc inb rbd,@rs
- clr addr(rd) cpsdrb @rd,@rs,rr,cc inb rbd,imm16
- clr rd cpsi @rd,@rs,rr,cc inc @rd,imm4m1
- clrb @rd cpsib @rd,@rs,rr,cc inc addr(rd),imm4m1
- inc addr,imm4m1 ldb rbd,rs(rx) mult rrd,addr(rs)
- inc rd,imm4m1 ldb rd(imm16),rbs mult rrd,imm16
- incb @rd,imm4m1 ldb rd(rx),rbs mult rrd,rs
- incb addr(rd),imm4m1 ldctl ctrl,rs multl rqd,@rs
- incb addr,imm4m1 ldctl rd,ctrl multl rqd,addr
- incb rbd,imm4m1 ldd @rs,@rd,rr multl rqd,addr(rs)
- ind @rd,@rs,ra lddb @rs,@rd,rr multl rqd,imm32
- indb @rd,@rs,rba lddr @rs,@rd,rr multl rqd,rrs
- inib @rd,@rs,ra lddrb @rs,@rd,rr neg @rd
- inibr @rd,@rs,ra ldi @rd,@rs,rr neg addr
- iret ldib @rd,@rs,rr neg addr(rd)
- jp cc,@rd ldir @rd,@rs,rr neg rd
- jp cc,addr ldirb @rd,@rs,rr negb @rd
- jp cc,addr(rd) ldk rd,imm4 negb addr
- jr cc,disp8 ldl @rd,rrs negb addr(rd)
- ld @rd,imm16 ldl addr(rd),rrs negb rbd
- ld @rd,rs ldl addr,rrs nop
- ld addr(rd),imm16 ldl rd(imm16),rrs or rd,@rs
- ld addr(rd),rs ldl rd(rx),rrs or rd,addr
- ld addr,imm16 ldl rrd,@rs or rd,addr(rs)
- ld addr,rs ldl rrd,addr or rd,imm16
- ld rd(imm16),rs ldl rrd,addr(rs) or rd,rs
- ld rd(rx),rs ldl rrd,imm32 orb rbd,@rs
- ld rd,@rs ldl rrd,rrs orb rbd,addr
- ld rd,addr ldl rrd,rs(imm16) orb rbd,addr(rs)
- ld rd,addr(rs) ldl rrd,rs(rx) orb rbd,imm8
- ld rd,imm16 ldm @rd,rs,n orb rbd,rbs
- ld rd,rs ldm addr(rd),rs,n out @rd,rs
- ld rd,rs(imm16) ldm addr,rs,n out imm16,rs
- ld rd,rs(rx) ldm rd,@rs,n outb @rd,rbs
- lda rd,addr ldm rd,addr(rs),n outb imm16,rbs
- lda rd,addr(rs) ldm rd,addr,n outd @rd,@rs,ra
- lda rd,rs(imm16) ldps @rs outdb @rd,@rs,rba
- lda rd,rs(rx) ldps addr outib @rd,@rs,ra
- ldar rd,disp16 ldps addr(rs) outibr @rd,@rs,ra
- ldb @rd,imm8 ldr disp16,rs pop @rd,@rs
- ldb @rd,rbs ldr rd,disp16 pop addr(rd),@rs
- ldb addr(rd),imm8 ldrb disp16,rbs pop addr,@rs
- ldb addr(rd),rbs ldrb rbd,disp16 pop rd,@rs
- ldb addr,imm8 ldrl disp16,rrs popl @rd,@rs
- ldb addr,rbs ldrl rrd,disp16 popl addr(rd),@rs
- ldb rbd,@rs mbit popl addr,@rs
- ldb rbd,addr mreq rd popl rrd,@rs
- ldb rbd,addr(rs) mres push @rd,@rs
- ldb rbd,imm8 mset push @rd,addr
- ldb rbd,rbs mult rrd,@rs push @rd,addr(rs)
- ldb rbd,rs(imm16) mult rrd,addr push @rd,imm16
- push @rd,rs set addr,imm4 subl rrd,imm32
- pushl @rd,@rs set rd,imm4 subl rrd,rrs
- pushl @rd,addr set rd,rs tcc cc,rd
- pushl @rd,addr(rs) setb @rd,imm4 tccb cc,rbd
- pushl @rd,rrs setb addr(rd),imm4 test @rd
- res @rd,imm4 setb addr,imm4 test addr
- res addr(rd),imm4 setb rbd,imm4 test addr(rd)
- res addr,imm4 setb rbd,rs test rd
- res rd,imm4 setflg imm4 testb @rd
- res rd,rs sinb rbd,imm16 testb addr
- resb @rd,imm4 sinb rd,imm16 testb addr(rd)
- resb addr(rd),imm4 sind @rd,@rs,ra testb rbd
- resb addr,imm4 sindb @rd,@rs,rba testl @rd
- resb rbd,imm4 sinib @rd,@rs,ra testl addr
- resb rbd,rs sinibr @rd,@rs,ra testl addr(rd)
- resflg imm4 sla rd,imm8 testl rrd
- ret cc slab rbd,imm8 trdb @rd,@rs,rba
- rl rd,imm1or2 slal rrd,imm8 trdrb @rd,@rs,rba
- rlb rbd,imm1or2 sll rd,imm8 trib @rd,@rs,rbr
- rlc rd,imm1or2 sllb rbd,imm8 trirb @rd,@rs,rbr
- rlcb rbd,imm1or2 slll rrd,imm8 trtdrb @ra,@rb,rbr
- rldb rbb,rba sout imm16,rs trtib @ra,@rb,rr
- rr rd,imm1or2 soutb imm16,rbs trtirb @ra,@rb,rbr
- rrb rbd,imm1or2 soutd @rd,@rs,ra trtrb @ra,@rb,rbr
- rrc rd,imm1or2 soutdb @rd,@rs,rba tset @rd
- rrcb rbd,imm1or2 soutib @rd,@rs,ra tset addr
- rrdb rbb,rba soutibr @rd,@rs,ra tset addr(rd)
- rsvd36 sra rd,imm8 tset rd
- rsvd38 srab rbd,imm8 tsetb @rd
- rsvd78 sral rrd,imm8 tsetb addr
- rsvd7e srl rd,imm8 tsetb addr(rd)
- rsvd9d srlb rbd,imm8 tsetb rbd
- rsvd9f srll rrd,imm8 xor rd,@rs
- rsvdb9 sub rd,@rs xor rd,addr
- rsvdbf sub rd,addr xor rd,addr(rs)
- sbc rd,rs sub rd,addr(rs) xor rd,imm16
- sbcb rbd,rbs sub rd,imm16 xor rd,rs
- sc imm8 sub rd,rs xorb rbd,@rs
- sda rd,rs subb rbd,@rs xorb rbd,addr
- sdab rbd,rs subb rbd,addr xorb rbd,addr(rs)
- sdal rrd,rs subb rbd,addr(rs) xorb rbd,imm8
- sdl rd,rs subb rbd,imm8 xorb rbd,rbs
- sdlb rbd,rs subb rbd,rbs xorb rbd,rbs
- sdll rrd,rs subl rrd,@rs
- set @rd,imm4 subl rrd,addr
- set addr(rd),imm4 subl rrd,addr(rs)
-
-
-File: as.info, Node: Vax-Dependent, Prev: Z8000-Dependent, Up: Machine Dependencies
-
-8.32 VAX Dependent Features
-===========================
-
-* Menu:
-
-* VAX-Opts:: VAX Command-Line Options
-* VAX-float:: VAX Floating Point
-* VAX-directives:: Vax Machine Directives
-* VAX-opcodes:: VAX Opcodes
-* VAX-branch:: VAX Branch Improvement
-* VAX-operands:: VAX Operands
-* VAX-no:: Not Supported on VAX
-
-
-File: as.info, Node: VAX-Opts, Next: VAX-float, Up: Vax-Dependent
-
-8.32.1 VAX Command-Line Options
--------------------------------
-
-The Vax version of `as' accepts any of the following options, gives a
-warning message that the option was ignored and proceeds. These
-options are for compatibility with scripts designed for other people's
-assemblers.
-
-``-D' (Debug)'
-``-S' (Symbol Table)'
-``-T' (Token Trace)'
- These are obsolete options used to debug old assemblers.
-
-``-d' (Displacement size for JUMPs)'
- This option expects a number following the `-d'. Like options
- that expect filenames, the number may immediately follow the `-d'
- (old standard) or constitute the whole of the command line
- argument that follows `-d' (GNU standard).
-
-``-V' (Virtualize Interpass Temporary File)'
- Some other assemblers use a temporary file. This option commanded
- them to keep the information in active memory rather than in a
- disk file. `as' always does this, so this option is redundant.
-
-``-J' (JUMPify Longer Branches)'
- Many 32-bit computers permit a variety of branch instructions to
- do the same job. Some of these instructions are short (and fast)
- but have a limited range; others are long (and slow) but can
- branch anywhere in virtual memory. Often there are 3 flavors of
- branch: short, medium and long. Some other assemblers would emit
- short and medium branches, unless told by this option to emit
- short and long branches.
-
-``-t' (Temporary File Directory)'
- Some other assemblers may use a temporary file, and this option
- takes a filename being the directory to site the temporary file.
- Since `as' does not use a temporary disk file, this option makes
- no difference. `-t' needs exactly one filename.
-
- The Vax version of the assembler accepts additional options when
-compiled for VMS:
-
-`-h N'
- External symbol or section (used for global variables) names are
- not case sensitive on VAX/VMS and always mapped to upper case.
- This is contrary to the C language definition which explicitly
- distinguishes upper and lower case. To implement a standard
- conforming C compiler, names must be changed (mapped) to preserve
- the case information. The default mapping is to convert all lower
- case characters to uppercase and adding an underscore followed by
- a 6 digit hex value, representing a 24 digit binary value. The
- one digits in the binary value represent which characters are
- uppercase in the original symbol name.
-
- The `-h N' option determines how we map names. This takes several
- values. No `-h' switch at all allows case hacking as described
- above. A value of zero (`-h0') implies names should be upper
- case, and inhibits the case hack. A value of 2 (`-h2') implies
- names should be all lower case, with no case hack. A value of 3
- (`-h3') implies that case should be preserved. The value 1 is
- unused. The `-H' option directs `as' to display every mapped
- symbol during assembly.
-
- Symbols whose names include a dollar sign `$' are exceptions to the
- general name mapping. These symbols are normally only used to
- reference VMS library names. Such symbols are always mapped to
- upper case.
-
-`-+'
- The `-+' option causes `as' to truncate any symbol name larger
- than 31 characters. The `-+' option also prevents some code
- following the `_main' symbol normally added to make the object
- file compatible with Vax-11 "C".
-
-`-1'
- This option is ignored for backward compatibility with `as'
- version 1.x.
-
-`-H'
- The `-H' option causes `as' to print every symbol which was
- changed by case mapping.
-
-
-File: as.info, Node: VAX-float, Next: VAX-directives, Prev: VAX-Opts, Up: Vax-Dependent
-
-8.32.2 VAX Floating Point
--------------------------
-
-Conversion of flonums to floating point is correct, and compatible with
-previous assemblers. Rounding is towards zero if the remainder is
-exactly half the least significant bit.
-
- `D', `F', `G' and `H' floating point formats are understood.
-
- Immediate floating literals (_e.g._ `S`$6.9') are rendered
-correctly. Again, rounding is towards zero in the boundary case.
-
- The `.float' directive produces `f' format numbers. The `.double'
-directive produces `d' format numbers.
-
-
-File: as.info, Node: VAX-directives, Next: VAX-opcodes, Prev: VAX-float, Up: Vax-Dependent
-
-8.32.3 Vax Machine Directives
------------------------------
-
-The Vax version of the assembler supports four directives for
-generating Vax floating point constants. They are described in the
-table below.
-
-`.dfloat'
- This expects zero or more flonums, separated by commas, and
- assembles Vax `d' format 64-bit floating point constants.
-
-`.ffloat'
- This expects zero or more flonums, separated by commas, and
- assembles Vax `f' format 32-bit floating point constants.
-
-`.gfloat'
- This expects zero or more flonums, separated by commas, and
- assembles Vax `g' format 64-bit floating point constants.
-
-`.hfloat'
- This expects zero or more flonums, separated by commas, and
- assembles Vax `h' format 128-bit floating point constants.
-
-
-
-File: as.info, Node: VAX-opcodes, Next: VAX-branch, Prev: VAX-directives, Up: Vax-Dependent
-
-8.32.4 VAX Opcodes
-------------------
-
-All DEC mnemonics are supported. Beware that `case...' instructions
-have exactly 3 operands. The dispatch table that follows the `case...'
-instruction should be made with `.word' statements. This is compatible
-with all unix assemblers we know of.
-
-
-File: as.info, Node: VAX-branch, Next: VAX-operands, Prev: VAX-opcodes, Up: Vax-Dependent
-
-8.32.5 VAX Branch Improvement
------------------------------
-
-Certain pseudo opcodes are permitted. They are for branch
-instructions. They expand to the shortest branch instruction that
-reaches the target. Generally these mnemonics are made by substituting
-`j' for `b' at the start of a DEC mnemonic. This feature is included
-both for compatibility and to help compilers. If you do not need this
-feature, avoid these opcodes. Here are the mnemonics, and the code
-they can expand into.
-
-`jbsb'
- `Jsb' is already an instruction mnemonic, so we chose `jbsb'.
- (byte displacement)
- `bsbb ...'
-
- (word displacement)
- `bsbw ...'
-
- (long displacement)
- `jsb ...'
-
-`jbr'
-`jr'
- Unconditional branch.
- (byte displacement)
- `brb ...'
-
- (word displacement)
- `brw ...'
-
- (long displacement)
- `jmp ...'
-
-`jCOND'
- COND may be any one of the conditional branches `neq', `nequ',
- `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs',
- `gequ', `cc', `lssu', `cs'. COND may also be one of the bit tests
- `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs',
- `lbc'. NOTCOND is the opposite condition to COND.
- (byte displacement)
- `bCOND ...'
-
- (word displacement)
- `bNOTCOND foo ; brw ... ; foo:'
-
- (long displacement)
- `bNOTCOND foo ; jmp ... ; foo:'
-
-`jacbX'
- X may be one of `b d f g h l w'.
- (word displacement)
- `OPCODE ...'
-
- (long displacement)
- OPCODE ..., foo ;
- brb bar ;
- foo: jmp ... ;
- bar:
-
-`jaobYYY'
- YYY may be one of `lss leq'.
-
-`jsobZZZ'
- ZZZ may be one of `geq gtr'.
- (byte displacement)
- `OPCODE ...'
-
- (word displacement)
- OPCODE ..., foo ;
- brb bar ;
- foo: brw DESTINATION ;
- bar:
-
- (long displacement)
- OPCODE ..., foo ;
- brb bar ;
- foo: jmp DESTINATION ;
- bar:
-
-`aobleq'
-`aoblss'
-`sobgeq'
-`sobgtr'
-
- (byte displacement)
- `OPCODE ...'
-
- (word displacement)
- OPCODE ..., foo ;
- brb bar ;
- foo: brw DESTINATION ;
- bar:
-
- (long displacement)
- OPCODE ..., foo ;
- brb bar ;
- foo: jmp DESTINATION ;
- bar:
-
-
-File: as.info, Node: VAX-operands, Next: VAX-no, Prev: VAX-branch, Up: Vax-Dependent
-
-8.32.6 VAX Operands
--------------------
-
-The immediate character is `$' for Unix compatibility, not `#' as DEC
-writes it.
-
- The indirect character is `*' for Unix compatibility, not `@' as DEC
-writes it.
-
- The displacement sizing character is ``' (an accent grave) for Unix
-compatibility, not `^' as DEC writes it. The letter preceding ``' may
-have either case. `G' is not understood, but all other letters (`b i l
-s w') are understood.
-
- Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'. Upper
-and lower case letters are equivalent.
-
- For instance
- tstb *w`$4(r5)
-
- Any expression is permitted in an operand. Operands are comma
-separated.
-
-
-File: as.info, Node: VAX-no, Prev: VAX-operands, Up: Vax-Dependent
-
-8.32.7 Not Supported on VAX
----------------------------
-
-Vax bit fields can not be assembled with `as'. Someone can add the
-required code if they really need it.
-
-
-File: as.info, Node: V850-Dependent, Next: Xtensa-Dependent, Prev: TIC54X-Dependent, Up: Machine Dependencies
-
-8.33 v850 Dependent Features
-============================
-
-* Menu:
-
-* V850 Options:: Options
-* V850 Syntax:: Syntax
-* V850 Floating Point:: Floating Point
-* V850 Directives:: V850 Machine Directives
-* V850 Opcodes:: Opcodes
-
-
-File: as.info, Node: V850 Options, Next: V850 Syntax, Up: V850-Dependent
-
-8.33.1 Options
---------------
-
-`as' supports the following additional command-line options for the
-V850 processor family:
-
-`-wsigned_overflow'
- Causes warnings to be produced when signed immediate values
- overflow the space available for then within their opcodes. By
- default this option is disabled as it is possible to receive
- spurious warnings due to using exact bit patterns as immediate
- constants.
-
-`-wunsigned_overflow'
- Causes warnings to be produced when unsigned immediate values
- overflow the space available for then within their opcodes. By
- default this option is disabled as it is possible to receive
- spurious warnings due to using exact bit patterns as immediate
- constants.
-
-`-mv850'
- Specifies that the assembled code should be marked as being
- targeted at the V850 processor. This allows the linker to detect
- attempts to link such code with code assembled for other
- processors.
-
-`-mv850e'
- Specifies that the assembled code should be marked as being
- targeted at the V850E processor. This allows the linker to detect
- attempts to link such code with code assembled for other
- processors.
-
-`-mv850e1'
- Specifies that the assembled code should be marked as being
- targeted at the V850E1 processor. This allows the linker to
- detect attempts to link such code with code assembled for other
- processors.
-
-`-mv850any'
- Specifies that the assembled code should be marked as being
- targeted at the V850 processor but support instructions that are
- specific to the extended variants of the process. This allows the
- production of binaries that contain target specific code, but
- which are also intended to be used in a generic fashion. For
- example libgcc.a contains generic routines used by the code
- produced by GCC for all versions of the v850 architecture,
- together with support routines only used by the V850E architecture.
-
-`-mrelax'
- Enables relaxation. This allows the .longcall and .longjump pseudo
- ops to be used in the assembler source code. These ops label
- sections of code which are either a long function call or a long
- branch. The assembler will then flag these sections of code and
- the linker will attempt to relax them.
-
-
-
-File: as.info, Node: V850 Syntax, Next: V850 Floating Point, Prev: V850 Options, Up: V850-Dependent
-
-8.33.2 Syntax
--------------
-
-* Menu:
-
-* V850-Chars:: Special Characters
-* V850-Regs:: Register Names
-
-
-File: as.info, Node: V850-Chars, Next: V850-Regs, Up: V850 Syntax
-
-8.33.2.1 Special Characters
-...........................
-
-`#' is the line comment character.
-
-
-File: as.info, Node: V850-Regs, Prev: V850-Chars, Up: V850 Syntax
-
-8.33.2.2 Register Names
-.......................
-
-`as' supports the following names for registers:
-`general register 0'
- r0, zero
-
-`general register 1'
- r1
-
-`general register 2'
- r2, hp
-
-`general register 3'
- r3, sp
-
-`general register 4'
- r4, gp
-
-`general register 5'
- r5, tp
-
-`general register 6'
- r6
-
-`general register 7'
- r7
-
-`general register 8'
- r8
-
-`general register 9'
- r9
-
-`general register 10'
- r10
-
-`general register 11'
- r11
-
-`general register 12'
- r12
-
-`general register 13'
- r13
-
-`general register 14'
- r14
-
-`general register 15'
- r15
-
-`general register 16'
- r16
-
-`general register 17'
- r17
-
-`general register 18'
- r18
-
-`general register 19'
- r19
-
-`general register 20'
- r20
-
-`general register 21'
- r21
-
-`general register 22'
- r22
-
-`general register 23'
- r23
-
-`general register 24'
- r24
-
-`general register 25'
- r25
-
-`general register 26'
- r26
-
-`general register 27'
- r27
-
-`general register 28'
- r28
-
-`general register 29'
- r29
-
-`general register 30'
- r30, ep
-
-`general register 31'
- r31, lp
-
-`system register 0'
- eipc
-
-`system register 1'
- eipsw
-
-`system register 2'
- fepc
-
-`system register 3'
- fepsw
-
-`system register 4'
- ecr
-
-`system register 5'
- psw
-
-`system register 16'
- ctpc
-
-`system register 17'
- ctpsw
-
-`system register 18'
- dbpc
-
-`system register 19'
- dbpsw
-
-`system register 20'
- ctbp
-
-
-File: as.info, Node: V850 Floating Point, Next: V850 Directives, Prev: V850 Syntax, Up: V850-Dependent
-
-8.33.3 Floating Point
----------------------
-
-The V850 family uses IEEE floating-point numbers.
-
-
-File: as.info, Node: V850 Directives, Next: V850 Opcodes, Prev: V850 Floating Point, Up: V850-Dependent
-
-8.33.4 V850 Machine Directives
-------------------------------
-
-`.offset <EXPRESSION>'
- Moves the offset into the current section to the specified amount.
-
-`.section "name", <type>'
- This is an extension to the standard .section directive. It sets
- the current section to be <type> and creates an alias for this
- section called "name".
-
-`.v850'
- Specifies that the assembled code should be marked as being
- targeted at the V850 processor. This allows the linker to detect
- attempts to link such code with code assembled for other
- processors.
-
-`.v850e'
- Specifies that the assembled code should be marked as being
- targeted at the V850E processor. This allows the linker to detect
- attempts to link such code with code assembled for other
- processors.
-
-`.v850e1'
- Specifies that the assembled code should be marked as being
- targeted at the V850E1 processor. This allows the linker to
- detect attempts to link such code with code assembled for other
- processors.
-
-
-
-File: as.info, Node: V850 Opcodes, Prev: V850 Directives, Up: V850-Dependent
-
-8.33.5 Opcodes
---------------
-
-`as' implements all the standard V850 opcodes.
-
- `as' also implements the following pseudo ops:
-
-`hi0()'
- Computes the higher 16 bits of the given expression and stores it
- into the immediate operand field of the given instruction. For
- example:
-
- `mulhi hi0(here - there), r5, r6'
-
- computes the difference between the address of labels 'here' and
- 'there', takes the upper 16 bits of this difference, shifts it
- down 16 bits and then mutliplies it by the lower 16 bits in
- register 5, putting the result into register 6.
-
-`lo()'
- Computes the lower 16 bits of the given expression and stores it
- into the immediate operand field of the given instruction. For
- example:
-
- `addi lo(here - there), r5, r6'
-
- computes the difference between the address of labels 'here' and
- 'there', takes the lower 16 bits of this difference and adds it to
- register 5, putting the result into register 6.
-
-`hi()'
- Computes the higher 16 bits of the given expression and then adds
- the value of the most significant bit of the lower 16 bits of the
- expression and stores the result into the immediate operand field
- of the given instruction. For example the following code can be
- used to compute the address of the label 'here' and store it into
- register 6:
-
- `movhi hi(here), r0, r6' `movea lo(here), r6, r6'
-
- The reason for this special behaviour is that movea performs a sign
- extension on its immediate operand. So for example if the address
- of 'here' was 0xFFFFFFFF then without the special behaviour of the
- hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6,
- then the movea instruction would takes its immediate operand,
- 0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it
- into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E).
- With the hi() pseudo op adding in the top bit of the lo() pseudo
- op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 =
- 0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 -
- the right value.
-
-`hilo()'
- Computes the 32 bit value of the given expression and stores it
- into the immediate operand field of the given instruction (which
- must be a mov instruction). For example:
-
- `mov hilo(here), r6'
-
- computes the absolute address of label 'here' and puts the result
- into register 6.
-
-`sdaoff()'
- Computes the offset of the named variable from the start of the
- Small Data Area (whoes address is held in register 4, the GP
- register) and stores the result as a 16 bit signed value in the
- immediate operand field of the given instruction. For example:
-
- `ld.w sdaoff(_a_variable)[gp],r6'
-
- loads the contents of the location pointed to by the label
- '_a_variable' into register 6, provided that the label is located
- somewhere within +/- 32K of the address held in the GP register.
- [Note the linker assumes that the GP register contains a fixed
- address set to the address of the label called '__gp'. This can
- either be set up automatically by the linker, or specifically set
- by using the `--defsym __gp=<value>' command line option].
-
-`tdaoff()'
- Computes the offset of the named variable from the start of the
- Tiny Data Area (whoes address is held in register 30, the EP
- register) and stores the result as a 4,5, 7 or 8 bit unsigned
- value in the immediate operand field of the given instruction.
- For example:
-
- `sld.w tdaoff(_a_variable)[ep],r6'
-
- loads the contents of the location pointed to by the label
- '_a_variable' into register 6, provided that the label is located
- somewhere within +256 bytes of the address held in the EP
- register. [Note the linker assumes that the EP register contains
- a fixed address set to the address of the label called '__ep'.
- This can either be set up automatically by the linker, or
- specifically set by using the `--defsym __ep=<value>' command line
- option].
-
-`zdaoff()'
- Computes the offset of the named variable from address 0 and
- stores the result as a 16 bit signed value in the immediate
- operand field of the given instruction. For example:
-
- `movea zdaoff(_a_variable),zero,r6'
-
- puts the address of the label '_a_variable' into register 6,
- assuming that the label is somewhere within the first 32K of
- memory. (Strictly speaking it also possible to access the last
- 32K of memory as well, as the offsets are signed).
-
-`ctoff()'
- Computes the offset of the named variable from the start of the
- Call Table Area (whoes address is helg in system register 20, the
- CTBP register) and stores the result a 6 or 16 bit unsigned value
- in the immediate field of then given instruction or piece of data.
- For example:
-
- `callt ctoff(table_func1)'
-
- will put the call the function whoes address is held in the call
- table at the location labeled 'table_func1'.
-
-`.longcall `name''
- Indicates that the following sequence of instructions is a long
- call to function `name'. The linker will attempt to shorten this
- call sequence if `name' is within a 22bit offset of the call. Only
- valid if the `-mrelax' command line switch has been enabled.
-
-`.longjump `name''
- Indicates that the following sequence of instructions is a long
- jump to label `name'. The linker will attempt to shorten this code
- sequence if `name' is within a 22bit offset of the jump. Only
- valid if the `-mrelax' command line switch has been enabled.
-
-
- For information on the V850 instruction set, see `V850 Family
-32-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC.
-Ltd.
-
-
-File: as.info, Node: Xtensa-Dependent, Next: Z80-Dependent, Prev: V850-Dependent, Up: Machine Dependencies
-
-8.34 Xtensa Dependent Features
-==============================
-
- This chapter covers features of the GNU assembler that are specific
-to the Xtensa architecture. For details about the Xtensa instruction
-set, please consult the `Xtensa Instruction Set Architecture (ISA)
-Reference Manual'.
-
-* Menu:
-
-* Xtensa Options:: Command-line Options.
-* Xtensa Syntax:: Assembler Syntax for Xtensa Processors.
-* Xtensa Optimizations:: Assembler Optimizations.
-* Xtensa Relaxation:: Other Automatic Transformations.
-* Xtensa Directives:: Directives for Xtensa Processors.
-
-
-File: as.info, Node: Xtensa Options, Next: Xtensa Syntax, Up: Xtensa-Dependent
-
-8.34.1 Command Line Options
----------------------------
-
-The Xtensa version of the GNU assembler supports these special options:
-
-`--text-section-literals | --no-text-section-literals'
- Control the treatment of literal pools. The default is
- `--no-text-section-literals', which places literals in a separate
- section in the output file. This allows the literal pool to be
- placed in a data RAM/ROM. With `--text-section-literals', the
- literals are interspersed in the text section in order to keep
- them as close as possible to their references. This may be
- necessary for large assembly files, where the literals would
- otherwise be out of range of the `L32R' instructions in the text
- section. These options only affect literals referenced via
- PC-relative `L32R' instructions; literals for absolute mode `L32R'
- instructions are handled separately.
-
-`--absolute-literals | --no-absolute-literals'
- Indicate to the assembler whether `L32R' instructions use absolute
- or PC-relative addressing. If the processor includes the absolute
- addressing option, the default is to use absolute `L32R'
- relocations. Otherwise, only the PC-relative `L32R' relocations
- can be used.
-
-`--target-align | --no-target-align'
- Enable or disable automatic alignment to reduce branch penalties
- at some expense in code size. *Note Automatic Instruction
- Alignment: Xtensa Automatic Alignment. This optimization is
- enabled by default. Note that the assembler will always align
- instructions like `LOOP' that have fixed alignment requirements.
-
-`--longcalls | --no-longcalls'
- Enable or disable transformation of call instructions to allow
- calls across a greater range of addresses. *Note Function Call
- Relaxation: Xtensa Call Relaxation. This option should be used
- when call targets can potentially be out of range. It may degrade
- both code size and performance, but the linker can generally
- optimize away the unnecessary overhead when a call ends up within
- range. The default is `--no-longcalls'.
-
-`--transform | --no-transform'
- Enable or disable all assembler transformations of Xtensa
- instructions, including both relaxation and optimization. The
- default is `--transform'; `--no-transform' should only be used in
- the rare cases when the instructions must be exactly as specified
- in the assembly source. Using `--no-transform' causes out of range
- instruction operands to be errors.
-
-`--rename-section OLDNAME=NEWNAME'
- Rename the OLDNAME section to NEWNAME. This option can be used
- multiple times to rename multiple sections.
-
-
-File: as.info, Node: Xtensa Syntax, Next: Xtensa Optimizations, Prev: Xtensa Options, Up: Xtensa-Dependent
-
-8.34.2 Assembler Syntax
------------------------
-
-Block comments are delimited by `/*' and `*/'. End of line comments
-may be introduced with either `#' or `//'.
-
- Instructions consist of a leading opcode or macro name followed by
-whitespace and an optional comma-separated list of operands:
-
- OPCODE [OPERAND, ...]
-
- Instructions must be separated by a newline or semicolon.
-
- FLIX instructions, which bundle multiple opcodes together in a single
-instruction, are specified by enclosing the bundled opcodes inside
-braces:
-
- {
- [FORMAT]
- OPCODE0 [OPERANDS]
- OPCODE1 [OPERANDS]
- OPCODE2 [OPERANDS]
- ...
- }
-
- The opcodes in a FLIX instruction are listed in the same order as the
-corresponding instruction slots in the TIE format declaration.
-Directives and labels are not allowed inside the braces of a FLIX
-instruction. A particular TIE format name can optionally be specified
-immediately after the opening brace, but this is usually unnecessary.
-The assembler will automatically search for a format that can encode the
-specified opcodes, so the format name need only be specified in rare
-cases where there is more than one applicable format and where it
-matters which of those formats is used. A FLIX instruction can also be
-specified on a single line by separating the opcodes with semicolons:
-
- { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... }
-
- The assembler can automatically bundle opcodes into FLIX
-instructions. It encodes the opcodes in order, one at a time, choosing
-the smallest format where each opcode can be encoded and filling unused
-instruction slots with no-ops.
-
-* Menu:
-
-* Xtensa Opcodes:: Opcode Naming Conventions.
-* Xtensa Registers:: Register Naming.
-
-
-File: as.info, Node: Xtensa Opcodes, Next: Xtensa Registers, Up: Xtensa Syntax
-
-8.34.2.1 Opcode Names
-.....................
-
-See the `Xtensa Instruction Set Architecture (ISA) Reference Manual'
-for a complete list of opcodes and descriptions of their semantics.
-
- If an opcode name is prefixed with an underscore character (`_'),
-`as' will not transform that instruction in any way. The underscore
-prefix disables both optimization (*note Xtensa Optimizations: Xtensa
-Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa
-Relaxation.) for that particular instruction. Only use the underscore
-prefix when it is essential to select the exact opcode produced by the
-assembler. Using this feature unnecessarily makes the code less
-efficient by disabling assembler optimization and less flexible by
-disabling relaxation.
-
- Note that this special handling of underscore prefixes only applies
-to Xtensa opcodes, not to either built-in macros or user-defined macros.
-When an underscore prefix is used with a macro (e.g., `_MOV'), it
-refers to a different macro. The assembler generally provides built-in
-macros both with and without the underscore prefix, where the underscore
-versions behave as if the underscore carries through to the instructions
-in the macros. For example, `_MOV' may expand to `_MOV.N'.
-
- The underscore prefix only applies to individual instructions, not to
-series of instructions. For example, if a series of instructions have
-underscore prefixes, the assembler will not transform the individual
-instructions, but it may insert other instructions between them (e.g.,
-to align a `LOOP' instruction). To prevent the assembler from
-modifying a series of instructions as a whole, use the `no-transform'
-directive. *Note transform: Transform Directive.
-
-
-File: as.info, Node: Xtensa Registers, Prev: Xtensa Opcodes, Up: Xtensa Syntax
-
-8.34.2.2 Register Names
-.......................
-
-The assembly syntax for a register file entry is the "short" name for a
-TIE register file followed by the index into that register file. For
-example, the general-purpose `AR' register file has a short name of
-`a', so these registers are named `a0'...`a15'. As a special feature,
-`sp' is also supported as a synonym for `a1'. Additional registers may
-be added by processor configuration options and by designer-defined TIE
-extensions. An initial `$' character is optional in all register names.
-
-
-File: as.info, Node: Xtensa Optimizations, Next: Xtensa Relaxation, Prev: Xtensa Syntax, Up: Xtensa-Dependent
-
-8.34.3 Xtensa Optimizations
----------------------------
-
-The optimizations currently supported by `as' are generation of density
-instructions where appropriate and automatic branch target alignment.
-
-* Menu:
-
-* Density Instructions:: Using Density Instructions.
-* Xtensa Automatic Alignment:: Automatic Instruction Alignment.
-
-
-File: as.info, Node: Density Instructions, Next: Xtensa Automatic Alignment, Up: Xtensa Optimizations
-
-8.34.3.1 Using Density Instructions
-...................................
-
-The Xtensa instruction set has a code density option that provides
-16-bit versions of some of the most commonly used opcodes. Use of these
-opcodes can significantly reduce code size. When possible, the
-assembler automatically translates instructions from the core Xtensa
-instruction set into equivalent instructions from the Xtensa code
-density option. This translation can be disabled by using underscore
-prefixes (*note Opcode Names: Xtensa Opcodes.), by using the
-`--no-transform' command-line option (*note Command Line Options:
-Xtensa Options.), or by using the `no-transform' directive (*note
-transform: Transform Directive.).
-
- It is a good idea _not_ to use the density instructions directly.
-The assembler will automatically select dense instructions where
-possible. If you later need to use an Xtensa processor without the code
-density option, the same assembly code will then work without
-modification.
-
-
-File: as.info, Node: Xtensa Automatic Alignment, Prev: Density Instructions, Up: Xtensa Optimizations
-
-8.34.3.2 Automatic Instruction Alignment
-........................................
-
-The Xtensa assembler will automatically align certain instructions, both
-to optimize performance and to satisfy architectural requirements.
-
- As an optimization to improve performance, the assembler attempts to
-align branch targets so they do not cross instruction fetch boundaries.
-(Xtensa processors can be configured with either 32-bit or 64-bit
-instruction fetch widths.) An instruction immediately following a call
-is treated as a branch target in this context, because it will be the
-target of a return from the call. This alignment has the potential to
-reduce branch penalties at some expense in code size. The assembler
-will not attempt to align labels with the prefixes `.Ln' and `.LM',
-since these labels are used for debugging information and are not
-typically branch targets. This optimization is enabled by default.
-You can disable it with the `--no-target-align' command-line option
-(*note Command Line Options: Xtensa Options.).
-
- The target alignment optimization is done without adding instructions
-that could increase the execution time of the program. If there are
-density instructions in the code preceding a target, the assembler can
-change the target alignment by widening some of those instructions to
-the equivalent 24-bit instructions. Extra bytes of padding can be
-inserted immediately following unconditional jump and return
-instructions. This approach is usually successful in aligning many,
-but not all, branch targets.
-
- The `LOOP' family of instructions must be aligned such that the
-first instruction in the loop body does not cross an instruction fetch
-boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be
-on either a 1 or 2 mod 4 byte boundary). The assembler knows about
-this restriction and inserts the minimal number of 2 or 3 byte no-op
-instructions to satisfy it. When no-op instructions are added, any
-label immediately preceding the original loop will be moved in order to
-refer to the loop instruction, not the newly generated no-op
-instruction. To preserve binary compatibility across processors with
-different fetch widths, the assembler conservatively assumes a 32-bit
-fetch width when aligning `LOOP' instructions (except if the first
-instruction in the loop is a 64-bit instruction).
-
- Similarly, the `ENTRY' instruction must be aligned on a 0 mod 4 byte
-boundary. The assembler satisfies this requirement by inserting zero
-bytes when required. In addition, labels immediately preceding the
-`ENTRY' instruction will be moved to the newly aligned instruction
-location.
-
-
-File: as.info, Node: Xtensa Relaxation, Next: Xtensa Directives, Prev: Xtensa Optimizations, Up: Xtensa-Dependent
-
-8.34.4 Xtensa Relaxation
-------------------------
-
-When an instruction operand is outside the range allowed for that
-particular instruction field, `as' can transform the code to use a
-functionally-equivalent instruction or sequence of instructions. This
-process is known as "relaxation". This is typically done for branch
-instructions because the distance of the branch targets is not known
-until assembly-time. The Xtensa assembler offers branch relaxation and
-also extends this concept to function calls, `MOVI' instructions and
-other instructions with immediate fields.
-
-* Menu:
-
-* Xtensa Branch Relaxation:: Relaxation of Branches.
-* Xtensa Call Relaxation:: Relaxation of Function Calls.
-* Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields.
-
-
-File: as.info, Node: Xtensa Branch Relaxation, Next: Xtensa Call Relaxation, Up: Xtensa Relaxation
-
-8.34.4.1 Conditional Branch Relaxation
-......................................
-
-When the target of a branch is too far away from the branch itself,
-i.e., when the offset from the branch to the target is too large to fit
-in the immediate field of the branch instruction, it may be necessary to
-replace the branch with a branch around a jump. For example,
-
- beqz a2, L
-
- may result in:
-
- bnez.n a2, M
- j L
- M:
-
- (The `BNEZ.N' instruction would be used in this example only if the
-density option is available. Otherwise, `BNEZ' would be used.)
-
- This relaxation works well because the unconditional jump instruction
-has a much larger offset range than the various conditional branches.
-However, an error will occur if a branch target is beyond the range of a
-jump instruction. `as' cannot relax unconditional jumps. Similarly,
-an error will occur if the original input contains an unconditional
-jump to a target that is out of range.
-
- Branch relaxation is enabled by default. It can be disabled by using
-underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the
-`--no-transform' command-line option (*note Command Line Options:
-Xtensa Options.), or the `no-transform' directive (*note transform:
-Transform Directive.).
-
-
-File: as.info, Node: Xtensa Call Relaxation, Next: Xtensa Immediate Relaxation, Prev: Xtensa Branch Relaxation, Up: Xtensa Relaxation
-
-8.34.4.2 Function Call Relaxation
-.................................
-
-Function calls may require relaxation because the Xtensa immediate call
-instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a
-PC-relative offset of only 512 Kbytes in either direction. For larger
-programs, it may be necessary to use indirect calls (`CALLX0',
-`CALLX4', `CALLX8' and `CALLX12') where the target address is specified
-in a register. The Xtensa assembler can automatically relax immediate
-call instructions into indirect call instructions. This relaxation is
-done by loading the address of the called function into the callee's
-return address register and then using a `CALLX' instruction. So, for
-example:
-
- call8 func
-
- might be relaxed to:
-
- .literal .L1, func
- l32r a8, .L1
- callx8 a8
-
- Because the addresses of targets of function calls are not generally
-known until link-time, the assembler must assume the worst and relax all
-the calls to functions in other source files, not just those that really
-will be out of range. The linker can recognize calls that were
-unnecessarily relaxed, and it will remove the overhead introduced by the
-assembler for those cases where direct calls are sufficient.
-
- Call relaxation is disabled by default because it can have a negative
-effect on both code size and performance, although the linker can
-usually eliminate the unnecessary overhead. If a program is too large
-and some of the calls are out of range, function call relaxation can be
-enabled using the `--longcalls' command-line option or the `longcalls'
-directive (*note longcalls: Longcalls Directive.).
-
-
-File: as.info, Node: Xtensa Immediate Relaxation, Prev: Xtensa Call Relaxation, Up: Xtensa Relaxation
-
-8.34.4.3 Other Immediate Field Relaxation
-.........................................
-
-The assembler normally performs the following other relaxations. They
-can be disabled by using underscore prefixes (*note Opcode Names:
-Xtensa Opcodes.), the `--no-transform' command-line option (*note
-Command Line Options: Xtensa Options.), or the `no-transform' directive
-(*note transform: Transform Directive.).
-
- The `MOVI' machine instruction can only materialize values in the
-range from -2048 to 2047. Values outside this range are best
-materialized with `L32R' instructions. Thus:
-
- movi a0, 100000
-
- is assembled into the following machine code:
-
- .literal .L1, 100000
- l32r a0, .L1
-
- The `L8UI' machine instruction can only be used with immediate
-offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine
-instructions can only be used with offsets from 0 to 510. The `L32I'
-machine instruction can only be used with offsets from 0 to 1020. A
-load offset outside these ranges can be materalized with an `L32R'
-instruction if the destination register of the load is different than
-the source address register. For example:
-
- l32i a1, a0, 2040
-
- is translated to:
-
- .literal .L1, 2040
- l32r a1, .L1
- addi a1, a0, a1
- l32i a1, a1, 0
-
-If the load destination and source address register are the same, an
-out-of-range offset causes an error.
-
- The Xtensa `ADDI' instruction only allows immediate operands in the
-range from -128 to 127. There are a number of alternate instruction
-sequences for the `ADDI' operation. First, if the immediate is 0, the
-`ADDI' will be turned into a `MOV.N' instruction (or the equivalent
-`OR' instruction if the code density option is not available). If the
-`ADDI' immediate is outside of the range -128 to 127, but inside the
-range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI'
-sequence will be used. Finally, if the immediate is outside of this
-range and a free register is available, an `L32R'/`ADD' sequence will
-be used with a literal allocated from the literal pool.
-
- For example:
-
- addi a5, a6, 0
- addi a5, a6, 512
- addi a5, a6, 513
- addi a5, a6, 50000
-
- is assembled into the following:
-
- .literal .L1, 50000
- mov.n a5, a6
- addmi a5, a6, 0x200
- addmi a5, a6, 0x200
- addi a5, a5, 1
- l32r a5, .L1
- add a5, a6, a5
-
-
-File: as.info, Node: Xtensa Directives, Prev: Xtensa Relaxation, Up: Xtensa-Dependent
-
-8.34.5 Directives
------------------
-
-The Xtensa assember supports a region-based directive syntax:
-
- .begin DIRECTIVE [OPTIONS]
- ...
- .end DIRECTIVE
-
- All the Xtensa-specific directives that apply to a region of code use
-this syntax.
-
- The directive applies to code between the `.begin' and the `.end'.
-The state of the option after the `.end' reverts to what it was before
-the `.begin'. A nested `.begin'/`.end' region can further change the
-state of the directive without having to be aware of its outer state.
-For example, consider:
-
- .begin no-transform
- L: add a0, a1, a2
- .begin transform
- M: add a0, a1, a2
- .end transform
- N: add a0, a1, a2
- .end no-transform
-
- The `ADD' opcodes at `L' and `N' in the outer `no-transform' region
-both result in `ADD' machine instructions, but the assembler selects an
-`ADD.N' instruction for the `ADD' at `M' in the inner `transform'
-region.
-
- The advantage of this style is that it works well inside macros
-which can preserve the context of their callers.
-
- The following directives are available:
-
-* Menu:
-
-* Schedule Directive:: Enable instruction scheduling.
-* Longcalls Directive:: Use Indirect Calls for Greater Range.
-* Transform Directive:: Disable All Assembler Transformations.
-* Literal Directive:: Intermix Literals with Instructions.
-* Literal Position Directive:: Specify Inline Literal Pool Locations.
-* Literal Prefix Directive:: Specify Literal Section Name Prefix.
-* Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals.
-
-
-File: as.info, Node: Schedule Directive, Next: Longcalls Directive, Up: Xtensa Directives
-
-8.34.5.1 schedule
-.................
-
-The `schedule' directive is recognized only for compatibility with
-Tensilica's assembler.
-
- .begin [no-]schedule
- .end [no-]schedule
-
- This directive is ignored and has no effect on `as'.
-
-
-File: as.info, Node: Longcalls Directive, Next: Transform Directive, Prev: Schedule Directive, Up: Xtensa Directives
-
-8.34.5.2 longcalls
-..................
-
-The `longcalls' directive enables or disables function call relaxation.
-*Note Function Call Relaxation: Xtensa Call Relaxation.
-
- .begin [no-]longcalls
- .end [no-]longcalls
-
- Call relaxation is disabled by default unless the `--longcalls'
-command-line option is specified. The `longcalls' directive overrides
-the default determined by the command-line options.
-
-
-File: as.info, Node: Transform Directive, Next: Literal Directive, Prev: Longcalls Directive, Up: Xtensa Directives
-
-8.34.5.3 transform
-..................
-
-This directive enables or disables all assembler transformation,
-including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and
-optimization (*note Xtensa Optimizations: Xtensa Optimizations.).
-
- .begin [no-]transform
- .end [no-]transform
-
- Transformations are enabled by default unless the `--no-transform'
-option is used. The `transform' directive overrides the default
-determined by the command-line options. An underscore opcode prefix,
-disabling transformation of that opcode, always takes precedence over
-both directives and command-line flags.
-
-
-File: as.info, Node: Literal Directive, Next: Literal Position Directive, Prev: Transform Directive, Up: Xtensa Directives
-
-8.34.5.4 literal
-................
-
-The `.literal' directive is used to define literal pool data, i.e.,
-read-only 32-bit data accessed via `L32R' instructions.
-
- .literal LABEL, VALUE[, VALUE...]
-
- This directive is similar to the standard `.word' directive, except
-that the actual location of the literal data is determined by the
-assembler and linker, not by the position of the `.literal' directive.
-Using this directive gives the assembler freedom to locate the literal
-data in the most appropriate place and possibly to combine identical
-literals. For example, the code:
-
- entry sp, 40
- .literal .L1, sym
- l32r a4, .L1
-
- can be used to load a pointer to the symbol `sym' into register
-`a4'. The value of `sym' will not be placed between the `ENTRY' and
-`L32R' instructions; instead, the assembler puts the data in a literal
-pool.
-
- Literal pools for absolute mode `L32R' instructions (*note Absolute
-Literals Directive::) are placed in a separate `.lit4' section. By
-default literal pools for PC-relative mode `L32R' instructions are
-placed in a separate `.literal' section; however, when using the
-`--text-section-literals' option (*note Command Line Options: Xtensa
-Options.), the literal pools are placed in the current section. These
-text section literal pools are created automatically before `ENTRY'
-instructions and manually after `.literal_position' directives (*note
-literal_position: Literal Position Directive.). If there are no
-preceding `ENTRY' instructions, explicit `.literal_position' directives
-must be used to place the text section literal pools; otherwise, `as'
-will report an error.
-
-
-File: as.info, Node: Literal Position Directive, Next: Literal Prefix Directive, Prev: Literal Directive, Up: Xtensa Directives
-
-8.34.5.5 literal_position
-.........................
-
-When using `--text-section-literals' to place literals inline in the
-section being assembled, the `.literal_position' directive can be used
-to mark a potential location for a literal pool.
-
- .literal_position
-
- The `.literal_position' directive is ignored when the
-`--text-section-literals' option is not used or when `L32R'
-instructions use the absolute addressing mode.
-
- The assembler will automatically place text section literal pools
-before `ENTRY' instructions, so the `.literal_position' directive is
-only needed to specify some other location for a literal pool. You may
-need to add an explicit jump instruction to skip over an inline literal
-pool.
-
- For example, an interrupt vector does not begin with an `ENTRY'
-instruction so the assembler will be unable to automatically find a good
-place to put a literal pool. Moreover, the code for the interrupt
-vector must be at a specific starting address, so the literal pool
-cannot come before the start of the code. The literal pool for the
-vector must be explicitly positioned in the middle of the vector (before
-any uses of the literals, due to the negative offsets used by
-PC-relative `L32R' instructions). The `.literal_position' directive
-can be used to do this. In the following code, the literal for `M'
-will automatically be aligned correctly and is placed after the
-unconditional jump.
-
- .global M
- code_start:
- j continue
- .literal_position
- .align 4
- continue:
- movi a4, M
-
-
-File: as.info, Node: Literal Prefix Directive, Next: Absolute Literals Directive, Prev: Literal Position Directive, Up: Xtensa Directives
-
-8.34.5.6 literal_prefix
-.......................
-
-The `literal_prefix' directive allows you to specify different sections
-to hold literals from different portions of an assembly file. With
-this directive, a single assembly file can be used to generate code
-into multiple sections, including literals generated by the assembler.
-
- .begin literal_prefix [NAME]
- .end literal_prefix
-
- By default the assembler places literal pools in sections separate
-from the instructions, using the default literal section names of
-`.literal' for PC-relative mode `L32R' instructions and `.lit4' for
-absolute mode `L32R' instructions (*note Absolute Literals
-Directive::). The `literal_prefix' directive causes different literal
-sections to be used for the code inside the delimited region. The new
-literal sections are determined by including NAME as a prefix to the
-default literal section names. If the NAME argument is omitted, the
-literal sections revert to the defaults. This directive has no effect
-when using the `--text-section-literals' option (*note Command Line
-Options: Xtensa Options.).
-
- Except for two special cases, the assembler determines the new
-literal sections by simply prepending NAME to the default section names,
-resulting in `NAME.literal' and `NAME.lit4' sections. The
-`literal_prefix' directive is often used with the name of the current
-text section as the prefix argument. To facilitate this usage, the
-assembler uses special case rules when it recognizes NAME as a text
-section name. First, if NAME ends with `.text', that suffix is not
-included in the literal section name. For example, if NAME is
-`.iram0.text', then the literal sections will be `.iram0.literal' and
-`.iram0.lit4'. Second, if NAME begins with `.gnu.linkonce.t.', then
-the literal section names are formed by replacing the `.t' substring
-with `.literal' and `.lit4'. For example, if NAME is
-`.gnu.linkonce.t.func', the literal sections will be
-`.gnu.linkonce.literal.func' and `.gnu.linkonce.lit4.func'.
-
-
-File: as.info, Node: Absolute Literals Directive, Prev: Literal Prefix Directive, Up: Xtensa Directives
-
-8.34.5.7 absolute-literals
-..........................
-
-The `absolute-literals' and `no-absolute-literals' directives control
-the absolute vs. PC-relative mode for `L32R' instructions. These are
-relevant only for Xtensa configurations that include the absolute
-addressing option for `L32R' instructions.
-
- .begin [no-]absolute-literals
- .end [no-]absolute-literals
-
- These directives do not change the `L32R' mode--they only cause the
-assembler to emit the appropriate kind of relocation for `L32R'
-instructions and to place the literal values in the appropriate section.
-To change the `L32R' mode, the program must write the `LITBASE' special
-register. It is the programmer's responsibility to keep track of the
-mode and indicate to the assembler which mode is used in each region of
-code.
-
- If the Xtensa configuration includes the absolute `L32R' addressing
-option, the default is to assume absolute `L32R' addressing unless the
-`--no-absolute-literals' command-line option is specified. Otherwise,
-the default is to assume PC-relative `L32R' addressing. The
-`absolute-literals' directive can then be used to override the default
-determined by the command-line options.
-
-
-File: as.info, Node: Reporting Bugs, Next: Acknowledgements, Prev: Machine Dependencies, Up: Top
-
-9 Reporting Bugs
-****************
-
-Your bug reports play an essential role in making `as' 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 `as' work
-better. Bug reports are your contribution to the maintenance of `as'.
-
- 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: as.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs
-
-9.1 Have You Found a Bug?
-=========================
-
-If you are not sure whether you have found a bug, here are some
-guidelines:
-
- * If the assembler gets a fatal signal, for any input whatever, that
- is a `as' bug. Reliable assemblers never crash.
-
- * If `as' produces an error message for valid input, that is a bug.
-
- * If `as' does not produce an error message for invalid input, that
- is a bug. However, you should note that your idea of "invalid
- input" might be our idea of "an extension" or "support for
- traditional practice".
-
- * If you are an experienced user of assemblers, your suggestions for
- improvement of `as' are welcome in any case.
-
-
-File: as.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs
-
-9.2 How to Report Bugs
-======================
-
-A number of companies and individuals offer support for GNU products.
-If you obtained `as' 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.
-
- In any event, we also recommend that you send bug reports for `as'
-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 assembler 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 `as'. `as' 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 `as'.
-
- * Any patches you may have applied to the `as' source.
-
- * The type of machine you are using, and the operating system name
- and version number.
-
- * What compiler (and its version) was used to compile `as'--e.g.
- "`gcc-2.7'".
-
- * The command arguments you gave the assembler to assemble 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 that will reproduce the bug. If the bug is
- observed when the assembler is invoked via a compiler, send the
- assembler source, not the high level language source. Most
- compilers will produce the assembler source when run with the `-S'
- option. If you are using `gcc', use the options `-v
- --save-temps'; this will save the assembler source in a file with
- an extension of `.s', and also show you exactly how `as' is being
- run.
-
- * 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 `as' 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 `as' 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 `as' 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 `as' 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 `as' 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: as.info, Node: Acknowledgements, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top
-
-10 Acknowledgements
-*******************
-
-If you have contributed to GAS and your name isn't listed here, it is
-not meant as a slight. We just don't know about it. Send mail to the
-maintainer, and we'll correct the situation. Currently the maintainer
-is Ken Raeburn (email address `raeburn@cygnus.com').
-
- Dean Elsner wrote the original GNU assembler for the VAX.(1)
-
- Jay Fenlason maintained GAS for a while, adding support for
-GDB-specific debug information and the 68k series machines, most of the
-preprocessing pass, and extensive changes in `messages.c',
-`input-file.c', `write.c'.
-
- K. Richard Pixley maintained GAS for a while, adding various
-enhancements and many bug fixes, including merging support for several
-processors, breaking GAS up to handle multiple object file format back
-ends (including heavy rewrite, testing, an integration of the coff and
-b.out back ends), adding configuration including heavy testing and
-verification of cross assemblers and file splits and renaming,
-converted GAS to strictly ANSI C including full prototypes, added
-support for m680[34]0 and cpu32, did considerable work on i960
-including a COFF port (including considerable amounts of reverse
-engineering), a SPARC opcode file rewrite, DECstation, rs6000, and
-hp300hpux host ports, updated "know" assertions and made them work,
-much other reorganization, cleanup, and lint.
-
- Ken Raeburn wrote the high-level BFD interface code to replace most
-of the code in format-specific I/O modules.
-
- The original VMS support was contributed by David L. Kashtan. Eric
-Youngdale has done much work with it since.
-
- The Intel 80386 machine description was written by Eliot Dresselhaus.
-
- Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
-
- The Motorola 88k machine description was contributed by Devon Bowen
-of Buffalo University and Torbjorn Granlund of the Swedish Institute of
-Computer Science.
-
- Keith Knowles at the Open Software Foundation wrote the original
-MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format
-support (which hasn't been merged in yet). Ralph Campbell worked with
-the MIPS code to support a.out format.
-
- Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k,
-tc-h8300), and IEEE 695 object file format (obj-ieee), was written by
-Steve Chamberlain of Cygnus Support. Steve also modified the COFF back
-end to use BFD for some low-level operations, for use with the H8/300
-and AMD 29k targets.
-
- John Gilmore built the AMD 29000 support, added `.include' support,
-and simplified the configuration of which versions accept which
-directives. He updated the 68k machine description so that Motorola's
-opcodes always produced fixed-size instructions (e.g., `jsr'), while
-synthetic instructions remained shrinkable (`jbsr'). John fixed many
-bugs, including true tested cross-compilation support, and one bug in
-relaxation that took a week and required the proverbial one-bit fix.
-
- Ian Lance Taylor of Cygnus Support merged the Motorola and MIT
-syntax for the 68k, completed support for some COFF targets (68k, i386
-SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets,
-wrote the initial RS/6000 and PowerPC assembler, and made a few other
-minor patches.
-
- Steve Chamberlain made GAS able to generate listings.
-
- Hewlett-Packard contributed support for the HP9000/300.
-
- Jeff Law wrote GAS and BFD support for the native HPPA object format
-(SOM) along with a fairly extensive HPPA testsuite (for both SOM and
-ELF object formats). This work was supported by both the Center for
-Software Science at the University of Utah and Cygnus Support.
-
- Support for ELF format files has been worked on by Mark Eichin of
-Cygnus Support (original, incomplete implementation for SPARC), Pete
-Hoogenboom and Jeff Law at the University of Utah (HPPA mainly),
-Michael Meissner of the Open Software Foundation (i386 mainly), and Ken
-Raeburn of Cygnus Support (sparc, and some initial 64-bit support).
-
- Linas Vepstas added GAS support for the ESA/390 "IBM 370"
-architecture.
-
- Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote
-GAS and BFD support for openVMS/Alpha.
-
- Timothy Wall, Michael Hayes, and Greg Smart contributed to the
-various tic* flavors.
-
- David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from
-Tensilica, Inc. added support for Xtensa processors.
-
- Several engineers at Cygnus Support have also provided many small
-bug fixes and configuration enhancements.
-
- Many others have contributed large or small bugfixes and
-enhancements. If you have contributed significant work and are not
-mentioned on this list, and want to be, let us know. Some of the
-history has been lost; we are not intentionally leaving anyone out.
-
- ---------- Footnotes ----------
-
- (1) Any more details?
-
-
-File: as.info, Node: GNU Free Documentation License, Next: Index, Prev: Acknowledgements, Up: Top
-
-Appendix A 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: as.info, Node: Index, Prev: GNU Free Documentation License, Up: Top
-
-Index
-*****
-
-
-* Menu:
-
-* #: Comments. (line 38)
-* #APP: Preprocessing. (line 27)
-* #NO_APP: Preprocessing. (line 27)
-* $ in symbol names <1>: SH64-Chars. (line 10)
-* $ in symbol names <2>: SH-Chars. (line 10)
-* $ in symbol names <3>: D30V-Chars. (line 63)
-* $ in symbol names: D10V-Chars. (line 46)
-* $a: ARM Mapping Symbols. (line 9)
-* $acos math builtin, TIC54X: TIC54X-Builtins. (line 10)
-* $asin math builtin, TIC54X: TIC54X-Builtins. (line 13)
-* $atan math builtin, TIC54X: TIC54X-Builtins. (line 16)
-* $atan2 math builtin, TIC54X: TIC54X-Builtins. (line 19)
-* $ceil math builtin, TIC54X: TIC54X-Builtins. (line 22)
-* $cos math builtin, TIC54X: TIC54X-Builtins. (line 28)
-* $cosh math builtin, TIC54X: TIC54X-Builtins. (line 25)
-* $cvf math builtin, TIC54X: TIC54X-Builtins. (line 31)
-* $cvi math builtin, TIC54X: TIC54X-Builtins. (line 34)
-* $d: ARM Mapping Symbols. (line 15)
-* $exp math builtin, TIC54X: TIC54X-Builtins. (line 37)
-* $fabs math builtin, TIC54X: TIC54X-Builtins. (line 40)
-* $firstch subsym builtin, TIC54X: TIC54X-Macros. (line 26)
-* $floor math builtin, TIC54X: TIC54X-Builtins. (line 43)
-* $fmod math builtin, TIC54X: TIC54X-Builtins. (line 47)
-* $int math builtin, TIC54X: TIC54X-Builtins. (line 50)
-* $iscons subsym builtin, TIC54X: TIC54X-Macros. (line 43)
-* $isdefed subsym builtin, TIC54X: TIC54X-Macros. (line 34)
-* $ismember subsym builtin, TIC54X: TIC54X-Macros. (line 38)
-* $isname subsym builtin, TIC54X: TIC54X-Macros. (line 47)
-* $isreg subsym builtin, TIC54X: TIC54X-Macros. (line 50)
-* $lastch subsym builtin, TIC54X: TIC54X-Macros. (line 30)
-* $ldexp math builtin, TIC54X: TIC54X-Builtins. (line 53)
-* $log math builtin, TIC54X: TIC54X-Builtins. (line 59)
-* $log10 math builtin, TIC54X: TIC54X-Builtins. (line 56)
-* $max math builtin, TIC54X: TIC54X-Builtins. (line 62)
-* $min math builtin, TIC54X: TIC54X-Builtins. (line 65)
-* $pow math builtin, TIC54X: TIC54X-Builtins. (line 68)
-* $round math builtin, TIC54X: TIC54X-Builtins. (line 71)
-* $sgn math builtin, TIC54X: TIC54X-Builtins. (line 74)
-* $sin math builtin, TIC54X: TIC54X-Builtins. (line 77)
-* $sinh math builtin, TIC54X: TIC54X-Builtins. (line 80)
-* $sqrt math builtin, TIC54X: TIC54X-Builtins. (line 83)
-* $structacc subsym builtin, TIC54X: TIC54X-Macros. (line 57)
-* $structsz subsym builtin, TIC54X: TIC54X-Macros. (line 54)
-* $symcmp subsym builtin, TIC54X: TIC54X-Macros. (line 23)
-* $symlen subsym builtin, TIC54X: TIC54X-Macros. (line 20)
-* $t: ARM Mapping Symbols. (line 12)
-* $tan math builtin, TIC54X: TIC54X-Builtins. (line 86)
-* $tanh math builtin, TIC54X: TIC54X-Builtins. (line 89)
-* $trunc math builtin, TIC54X: TIC54X-Builtins. (line 92)
-* -+ option, VAX/VMS: VAX-Opts. (line 71)
-* --: Command Line. (line 10)
-* --32 option, i386: i386-Options. (line 8)
-* --32 option, x86-64: i386-Options. (line 8)
-* --64 option, i386: i386-Options. (line 8)
-* --64 option, x86-64: i386-Options. (line 8)
-* --absolute-literals: Xtensa Options. (line 22)
-* --allow-reg-prefix: SH Options. (line 9)
-* --alternate: alternate. (line 6)
-* --base-size-default-16: M68K-Opts. (line 70)
-* --base-size-default-32: M68K-Opts. (line 70)
-* --big: SH Options. (line 9)
-* --bitwise-or option, M680x0: M68K-Opts. (line 63)
-* --disp-size-default-16: M68K-Opts. (line 79)
-* --disp-size-default-32: M68K-Opts. (line 79)
-* --divide option, i386: i386-Options. (line 24)
-* --dsp: SH Options. (line 9)
-* --emulation=crisaout command line option, CRIS: CRIS-Opts. (line 9)
-* --emulation=criself command line option, CRIS: CRIS-Opts. (line 9)
-* --enforce-aligned-data: Sparc-Aligned-Data. (line 11)
-* --fatal-warnings: W. (line 16)
-* --fixed-special-register-names command line option, MMIX: MMIX-Opts.
- (line 8)
-* --force-long-branchs: M68HC11-Opts. (line 69)
-* --generate-example: M68HC11-Opts. (line 86)
-* --globalize-symbols command line option, MMIX: MMIX-Opts. (line 12)
-* --gnu-syntax command line option, MMIX: MMIX-Opts. (line 16)
-* --hash-size=NUMBER: Overview. (line 297)
-* --linker-allocated-gregs command line option, MMIX: MMIX-Opts.
- (line 67)
-* --listing-cont-lines: listing. (line 33)
-* --listing-lhs-width: listing. (line 15)
-* --listing-lhs-width2: listing. (line 20)
-* --listing-rhs-width: listing. (line 27)
-* --little: SH Options. (line 9)
-* --longcalls: Xtensa Options. (line 36)
-* --march=ARCHITECTURE command line option, CRIS: CRIS-Opts. (line 33)
-* --MD: MD. (line 6)
-* --mul-bug-abort command line option, CRIS: CRIS-Opts. (line 61)
-* --no-absolute-literals: Xtensa Options. (line 22)
-* --no-expand command line option, MMIX: MMIX-Opts. (line 31)
-* --no-longcalls: Xtensa Options. (line 36)
-* --no-merge-gregs command line option, MMIX: MMIX-Opts. (line 36)
-* --no-mul-bug-abort command line option, CRIS: CRIS-Opts. (line 61)
-* --no-predefined-syms command line option, MMIX: MMIX-Opts. (line 22)
-* --no-pushj-stubs command line option, MMIX: MMIX-Opts. (line 54)
-* --no-stubs command line option, MMIX: MMIX-Opts. (line 54)
-* --no-target-align: Xtensa Options. (line 29)
-* --no-text-section-literals: Xtensa Options. (line 9)
-* --no-transform: Xtensa Options. (line 45)
-* --no-underscore command line option, CRIS: CRIS-Opts. (line 15)
-* --no-warn: W. (line 11)
-* --pcrel: M68K-Opts. (line 91)
-* --pic command line option, CRIS: CRIS-Opts. (line 27)
-* --print-insn-syntax: M68HC11-Opts. (line 75)
-* --print-opcodes: M68HC11-Opts. (line 79)
-* --register-prefix-optional option, M680x0: M68K-Opts. (line 50)
-* --relax: SH Options. (line 9)
-* --relax command line option, MMIX: MMIX-Opts. (line 19)
-* --rename-section: Xtensa Options. (line 53)
-* --renesas: SH Options. (line 9)
-* --short-branchs: M68HC11-Opts. (line 54)
-* --small: SH Options. (line 9)
-* --statistics: statistics. (line 6)
-* --strict-direct-mode: M68HC11-Opts. (line 44)
-* --target-align: Xtensa Options. (line 29)
-* --text-section-literals: Xtensa Options. (line 9)
-* --traditional-format: traditional-format. (line 6)
-* --transform: Xtensa Options. (line 45)
-* --underscore command line option, CRIS: CRIS-Opts. (line 15)
-* --warn: W. (line 19)
-* -1 option, VAX/VMS: VAX-Opts. (line 77)
-* -32addr command line option, Alpha: Alpha Options. (line 50)
-* -a: a. (line 6)
-* -A options, i960: Options-i960. (line 6)
-* -ac: a. (line 6)
-* -ad: a. (line 6)
-* -ah: a. (line 6)
-* -al: a. (line 6)
-* -an: a. (line 6)
-* -as: a. (line 6)
-* -Asparclet: Sparc-Opts. (line 25)
-* -Asparclite: Sparc-Opts. (line 25)
-* -Av6: Sparc-Opts. (line 25)
-* -Av8: Sparc-Opts. (line 25)
-* -Av9: Sparc-Opts. (line 25)
-* -Av9a: Sparc-Opts. (line 25)
-* -b option, i960: Options-i960. (line 22)
-* -big option, M32R: M32R-Opts. (line 35)
-* -construct-floats: MIPS Opts. (line 157)
-* -D: D. (line 6)
-* -D, ignored on VAX: VAX-Opts. (line 11)
-* -d, VAX option: VAX-Opts. (line 16)
-* -eabi= command line option, ARM: ARM Options. (line 107)
-* -EB command line option, ARC: ARC Options. (line 31)
-* -EB command line option, ARM: ARM Options. (line 112)
-* -EB option (MIPS): MIPS Opts. (line 13)
-* -EB option, M32R: M32R-Opts. (line 39)
-* -EL command line option, ARC: ARC Options. (line 35)
-* -EL command line option, ARM: ARM Options. (line 116)
-* -EL option (MIPS): MIPS Opts. (line 13)
-* -EL option, M32R: M32R-Opts. (line 32)
-* -f: f. (line 6)
-* -F command line option, Alpha: Alpha Options. (line 50)
-* -G command line option, Alpha: Alpha Options. (line 46)
-* -g command line option, Alpha: Alpha Options. (line 40)
-* -G option (MIPS): MIPS Opts. (line 8)
-* -H option, VAX/VMS: VAX-Opts. (line 81)
-* -h option, VAX/VMS: VAX-Opts. (line 45)
-* -I PATH: I. (line 6)
-* -ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 87)
-* -Ip option, M32RX: M32R-Opts. (line 97)
-* -J, ignored on VAX: VAX-Opts. (line 27)
-* -K: K. (line 6)
-* -k command line option, ARM: ARM Options. (line 120)
-* -KPIC option, M32R: M32R-Opts. (line 42)
-* -L: L. (line 6)
-* -l option, M680x0: M68K-Opts. (line 38)
-* -little option, M32R: M32R-Opts. (line 27)
-* -M: M. (line 6)
-* -m11/03: PDP-11-Options. (line 140)
-* -m11/04: PDP-11-Options. (line 143)
-* -m11/05: PDP-11-Options. (line 146)
-* -m11/10: PDP-11-Options. (line 146)
-* -m11/15: PDP-11-Options. (line 149)
-* -m11/20: PDP-11-Options. (line 149)
-* -m11/21: PDP-11-Options. (line 152)
-* -m11/23: PDP-11-Options. (line 155)
-* -m11/24: PDP-11-Options. (line 155)
-* -m11/34: PDP-11-Options. (line 158)
-* -m11/34a: PDP-11-Options. (line 161)
-* -m11/35: PDP-11-Options. (line 164)
-* -m11/40: PDP-11-Options. (line 164)
-* -m11/44: PDP-11-Options. (line 167)
-* -m11/45: PDP-11-Options. (line 170)
-* -m11/50: PDP-11-Options. (line 170)
-* -m11/53: PDP-11-Options. (line 173)
-* -m11/55: PDP-11-Options. (line 170)
-* -m11/60: PDP-11-Options. (line 176)
-* -m11/70: PDP-11-Options. (line 170)
-* -m11/73: PDP-11-Options. (line 173)
-* -m11/83: PDP-11-Options. (line 173)
-* -m11/84: PDP-11-Options. (line 173)
-* -m11/93: PDP-11-Options. (line 173)
-* -m11/94: PDP-11-Options. (line 173)
-* -m16c option, M16C: M32C-Opts. (line 12)
-* -m32c option, M32C: M32C-Opts. (line 9)
-* -m32r option, M32R: M32R-Opts. (line 21)
-* -m32rx option, M32R2: M32R-Opts. (line 17)
-* -m32rx option, M32RX: M32R-Opts. (line 9)
-* -m68000 and related options: M68K-Opts. (line 103)
-* -m68hc11: M68HC11-Opts. (line 9)
-* -m68hc12: M68HC11-Opts. (line 14)
-* -m68hcs12: M68HC11-Opts. (line 21)
-* -m[no-]68851 command line option, M680x0: M68K-Opts. (line 20)
-* -m[no-]68881 command line option, M680x0: M68K-Opts. (line 20)
-* -m[no-]div command line option, M680x0: M68K-Opts. (line 20)
-* -m[no-]emac command line option, M680x0: M68K-Opts. (line 20)
-* -m[no-]float command line option, M680x0: M68K-Opts. (line 20)
-* -m[no-]mac command line option, M680x0: M68K-Opts. (line 20)
-* -m[no-]usp command line option, M680x0: M68K-Opts. (line 20)
-* -mall: PDP-11-Options. (line 26)
-* -mall-extensions: PDP-11-Options. (line 26)
-* -mapcs command line option, ARM: ARM Options. (line 80)
-* -mapcs-float command line option, ARM: ARM Options. (line 93)
-* -mapcs-reentrant command line option, ARM: ARM Options. (line 98)
-* -marc[5|6|7|8] command line option, ARC: ARC Options. (line 6)
-* -march= command line option, ARM: ARM Options. (line 37)
-* -march= command line option, M680x0: M68K-Opts. (line 8)
-* -matpcs command line option, ARM: ARM Options. (line 85)
-* -mcis: PDP-11-Options. (line 32)
-* -mconstant-gp command line option, IA-64: IA-64 Options. (line 6)
-* -mCPU command line option, Alpha: Alpha Options. (line 6)
-* -mcpu option, cpu: TIC54X-Opts. (line 15)
-* -mcpu= command line option, ARM: ARM Options. (line 6)
-* -mcpu= command line option, M680x0: M68K-Opts. (line 13)
-* -mcsm: PDP-11-Options. (line 43)
-* -mdebug command line option, Alpha: Alpha Options. (line 25)
-* -me option, stderr redirect: TIC54X-Opts. (line 20)
-* -meis: PDP-11-Options. (line 46)
-* -merrors-to-file option, stderr redirect: TIC54X-Opts. (line 20)
-* -mf option, far-mode: TIC54X-Opts. (line 8)
-* -mf11: PDP-11-Options. (line 122)
-* -mfar-mode option, far-mode: TIC54X-Opts. (line 8)
-* -mfis: PDP-11-Options. (line 51)
-* -mfloat-abi= command line option, ARM: ARM Options. (line 102)
-* -mfp-11: PDP-11-Options. (line 56)
-* -mfpp: PDP-11-Options. (line 56)
-* -mfpu: PDP-11-Options. (line 56)
-* -mfpu= command line option, ARM: ARM Options. (line 52)
-* -mip2022 option, IP2K: IP2K-Opts. (line 14)
-* -mip2022ext option, IP2022: IP2K-Opts. (line 9)
-* -mj11: PDP-11-Options. (line 126)
-* -mka11: PDP-11-Options. (line 92)
-* -mkb11: PDP-11-Options. (line 95)
-* -mkd11a: PDP-11-Options. (line 98)
-* -mkd11b: PDP-11-Options. (line 101)
-* -mkd11d: PDP-11-Options. (line 104)
-* -mkd11e: PDP-11-Options. (line 107)
-* -mkd11f: PDP-11-Options. (line 110)
-* -mkd11h: PDP-11-Options. (line 110)
-* -mkd11k: PDP-11-Options. (line 114)
-* -mkd11q: PDP-11-Options. (line 110)
-* -mkd11z: PDP-11-Options. (line 118)
-* -mkev11: PDP-11-Options. (line 51)
-* -mlimited-eis: PDP-11-Options. (line 64)
-* -mlong: M68HC11-Opts. (line 32)
-* -mlong-double: M68HC11-Opts. (line 40)
-* -mmfpt: PDP-11-Options. (line 70)
-* -mmicrocode: PDP-11-Options. (line 83)
-* -mmutiproc: PDP-11-Options. (line 73)
-* -mmxps: PDP-11-Options. (line 77)
-* -mno-cis: PDP-11-Options. (line 32)
-* -mno-csm: PDP-11-Options. (line 43)
-* -mno-eis: PDP-11-Options. (line 46)
-* -mno-extensions: PDP-11-Options. (line 29)
-* -mno-fis: PDP-11-Options. (line 51)
-* -mno-fp-11: PDP-11-Options. (line 56)
-* -mno-fpp: PDP-11-Options. (line 56)
-* -mno-fpu: PDP-11-Options. (line 56)
-* -mno-kev11: PDP-11-Options. (line 51)
-* -mno-limited-eis: PDP-11-Options. (line 64)
-* -mno-mfpt: PDP-11-Options. (line 70)
-* -mno-microcode: PDP-11-Options. (line 83)
-* -mno-mutiproc: PDP-11-Options. (line 73)
-* -mno-mxps: PDP-11-Options. (line 77)
-* -mno-pic: PDP-11-Options. (line 11)
-* -mno-spl: PDP-11-Options. (line 80)
-* -mno-sym32: MIPS Opts. (line 145)
-* -mpic: PDP-11-Options. (line 11)
-* -mrelax command line option, V850: V850 Options. (line 51)
-* -mshort: M68HC11-Opts. (line 27)
-* -mshort-double: M68HC11-Opts. (line 36)
-* -mspl: PDP-11-Options. (line 80)
-* -msym32: MIPS Opts. (line 145)
-* -mt11: PDP-11-Options. (line 130)
-* -mthumb command line option, ARM: ARM Options. (line 71)
-* -mthumb-interwork command line option, ARM: ARM Options. (line 76)
-* -mv850 command line option, V850: V850 Options. (line 23)
-* -mv850any command line option, V850: V850 Options. (line 41)
-* -mv850e command line option, V850: V850 Options. (line 29)
-* -mv850e1 command line option, V850: V850 Options. (line 35)
-* -N command line option, CRIS: CRIS-Opts. (line 57)
-* -nIp option, M32RX: M32R-Opts. (line 101)
-* -no-bitinst, M32R2: M32R-Opts. (line 54)
-* -no-construct-floats: MIPS Opts. (line 157)
-* -no-ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 93)
-* -no-mdebug command line option, Alpha: Alpha Options. (line 25)
-* -no-parallel option, M32RX: M32R-Opts. (line 51)
-* -no-relax option, i960: Options-i960. (line 66)
-* -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts.
- (line 79)
-* -no-warn-unmatched-high option, M32R: M32R-Opts. (line 111)
-* -nocpp ignored (MIPS): MIPS Opts. (line 148)
-* -o: o. (line 6)
-* -O option, M32RX: M32R-Opts. (line 59)
-* -parallel option, M32RX: M32R-Opts. (line 46)
-* -R: R. (line 6)
-* -r800 command line option, Z80: Z80 Options. (line 41)
-* -relax command line option, Alpha: Alpha Options. (line 32)
-* -S, ignored on VAX: VAX-Opts. (line 11)
-* -t, ignored on VAX: VAX-Opts. (line 36)
-* -T, ignored on VAX: VAX-Opts. (line 11)
-* -v: v. (line 6)
-* -V, redundant on VAX: VAX-Opts. (line 22)
-* -version: v. (line 6)
-* -W: W. (line 11)
-* -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. (line 65)
-* -warn-unmatched-high option, M32R: M32R-Opts. (line 105)
-* -Wnp option, M32RX: M32R-Opts. (line 83)
-* -Wnuh option, M32RX: M32R-Opts. (line 117)
-* -Wp option, M32RX: M32R-Opts. (line 75)
-* -wsigned_overflow command line option, V850: V850 Options. (line 9)
-* -Wuh option, M32RX: M32R-Opts. (line 114)
-* -wunsigned_overflow command line option, V850: V850 Options.
- (line 16)
-* -x command line option, MMIX: MMIX-Opts. (line 44)
-* -z80 command line option, Z80: Z80 Options. (line 8)
-* -z8001 command line option, Z8000: Z8000 Options. (line 6)
-* -z8002 command line option, Z8000: Z8000 Options. (line 9)
-* . (symbol): Dot. (line 6)
-* .arch directive, ARM: ARM Directives. (line 164)
-* .big directive, M32RX: M32R-Directives. (line 88)
-* .cantunwind directive, ARM: ARM Directives. (line 87)
-* .cpu directive, ARM: ARM Directives. (line 160)
-* .eabi_attribute directive, ARM: ARM Directives. (line 172)
-* .fnend directive, ARM: ARM Directives. (line 78)
-* .fnstart directive, ARM: ARM Directives. (line 75)
-* .fpu directive, ARM: ARM Directives. (line 168)
-* .handlerdata directive, ARM: ARM Directives. (line 98)
-* .insn: MIPS insn. (line 6)
-* .little directive, M32RX: M32R-Directives. (line 82)
-* .ltorg directive, ARM: ARM Directives. (line 58)
-* .m32r directive, M32R: M32R-Directives. (line 66)
-* .m32r2 directive, M32R2: M32R-Directives. (line 77)
-* .m32rx directive, M32RX: M32R-Directives. (line 72)
-* .movsp directive, ARM: ARM Directives. (line 136)
-* .o: Object. (line 6)
-* .pad directive, ARM: ARM Directives. (line 131)
-* .param on HPPA: HPPA Directives. (line 19)
-* .personality directive, ARM: ARM Directives. (line 91)
-* .personalityindex directive, ARM: ARM Directives. (line 94)
-* .pool directive, ARM: ARM Directives. (line 72)
-* .save directive, ARM: ARM Directives. (line 107)
-* .set autoextend: MIPS autoextend. (line 6)
-* .set dsp: MIPS ASE instruction generation overrides.
- (line 16)
-* .set mdmx: MIPS ASE instruction generation overrides.
- (line 11)
-* .set mips3d: MIPS ASE instruction generation overrides.
- (line 6)
-* .set mipsN: MIPS ISA. (line 6)
-* .set mt: MIPS ASE instruction generation overrides.
- (line 21)
-* .set noautoextend: MIPS autoextend. (line 6)
-* .set nodsp: MIPS ASE instruction generation overrides.
- (line 16)
-* .set nomdmx: MIPS ASE instruction generation overrides.
- (line 11)
-* .set nomips3d: MIPS ASE instruction generation overrides.
- (line 6)
-* .set nomt: MIPS ASE instruction generation overrides.
- (line 21)
-* .set nosym32: MIPS symbol sizes. (line 6)
-* .set pop: MIPS option stack. (line 6)
-* .set push: MIPS option stack. (line 6)
-* .set sym32: MIPS symbol sizes. (line 6)
-* .setfp directive, ARM: ARM Directives. (line 139)
-* .unwind_raw directive, ARM: ARM Directives. (line 153)
-* .v850 directive, V850: V850 Directives. (line 14)
-* .v850e directive, V850: V850 Directives. (line 20)
-* .v850e1 directive, V850: V850 Directives. (line 26)
-* .z8001: Z8000 Directives. (line 11)
-* .z8002: Z8000 Directives. (line 15)
-* 16-bit code, i386: i386-16bit. (line 6)
-* 2byte directive, ARC: ARC Directives. (line 9)
-* 3byte directive, ARC: ARC Directives. (line 12)
-* 3DNow!, i386: i386-SIMD. (line 6)
-* 3DNow!, x86-64: i386-SIMD. (line 6)
-* 430 support: MSP430-Dependent. (line 6)
-* 4byte directive, ARC: ARC Directives. (line 15)
-* : (label): Statements. (line 30)
-* @word modifier, D10V: D10V-Word. (line 6)
-* \" (doublequote character): Strings. (line 43)
-* \\ (\ character): Strings. (line 40)
-* \b (backspace character): Strings. (line 15)
-* \DDD (octal character code): Strings. (line 30)
-* \f (formfeed character): Strings. (line 18)
-* \n (newline character): Strings. (line 21)
-* \r (carriage return character): Strings. (line 24)
-* \t (tab): Strings. (line 27)
-* \XD... (hex character code): Strings. (line 36)
-* _ opcode prefix: Xtensa Opcodes. (line 9)
-* a.out: Object. (line 6)
-* a.out symbol attributes: a.out Symbols. (line 6)
-* A_DIR environment variable, TIC54X: TIC54X-Env. (line 6)
-* ABI options, SH64: SH64 Options. (line 29)
-* ABORT directive: ABORT. (line 6)
-* abort directive: Abort. (line 6)
-* absolute section: Ld Sections. (line 29)
-* absolute-literals directive: Absolute Literals Directive.
- (line 6)
-* ADDI instructions, relaxation: Xtensa Immediate Relaxation.
- (line 43)
-* addition, permitted arguments: Infix Ops. (line 44)
-* addresses: Expressions. (line 6)
-* addresses, format of: Secs Background. (line 68)
-* addressing modes, D10V: D10V-Addressing. (line 6)
-* addressing modes, D30V: D30V-Addressing. (line 6)
-* addressing modes, H8/300: H8/300-Addressing. (line 6)
-* addressing modes, M680x0: M68K-Syntax. (line 21)
-* addressing modes, M68HC11: M68HC11-Syntax. (line 17)
-* addressing modes, SH: SH-Addressing. (line 6)
-* addressing modes, SH64: SH64-Addressing. (line 6)
-* addressing modes, Z8000: Z8000-Addressing. (line 6)
-* ADR reg,<label> pseudo op, ARM: ARM Opcodes. (line 25)
-* ADRL reg,<label> pseudo op, ARM: ARM Opcodes. (line 35)
-* advancing location counter: Org. (line 6)
-* align directive: Align. (line 6)
-* align directive, ARM: ARM Directives. (line 6)
-* align directive, SPARC: Sparc-Directives. (line 9)
-* align directive, TIC54X: TIC54X-Directives. (line 6)
-* alignment of branch targets: Xtensa Automatic Alignment.
- (line 6)
-* alignment of ENTRY instructions: Xtensa Automatic Alignment.
- (line 6)
-* alignment of LOOP instructions: Xtensa Automatic Alignment.
- (line 6)
-* Alpha floating point (IEEE): Alpha Floating Point.
- (line 6)
-* Alpha line comment character: Alpha-Chars. (line 6)
-* Alpha line separator: Alpha-Chars. (line 8)
-* Alpha notes: Alpha Notes. (line 6)
-* Alpha options: Alpha Options. (line 6)
-* Alpha registers: Alpha-Regs. (line 6)
-* Alpha relocations: Alpha-Relocs. (line 6)
-* Alpha support: Alpha-Dependent. (line 6)
-* Alpha Syntax: Alpha Options. (line 54)
-* Alpha-only directives: Alpha Directives. (line 10)
-* altered difference tables: Word. (line 12)
-* alternate syntax for the 680x0: M68K-Moto-Syntax. (line 6)
-* ARC floating point (IEEE): ARC Floating Point. (line 6)
-* ARC machine directives: ARC Directives. (line 6)
-* ARC opcodes: ARC Opcodes. (line 6)
-* ARC options (none): ARC Options. (line 6)
-* ARC register names: ARC-Regs. (line 6)
-* ARC special characters: ARC-Chars. (line 6)
-* ARC support: ARC-Dependent. (line 6)
-* arc5 arc5, ARC: ARC Options. (line 10)
-* arc6 arc6, ARC: ARC Options. (line 13)
-* arc7 arc7, ARC: ARC Options. (line 21)
-* arc8 arc8, ARC: ARC Options. (line 24)
-* arch directive, i386: i386-Arch. (line 6)
-* arch directive, M680x0: M68K-Directives. (line 22)
-* arch directive, x86-64: i386-Arch. (line 6)
-* architecture options, i960: Options-i960. (line 6)
-* architecture options, IP2022: IP2K-Opts. (line 9)
-* architecture options, IP2K: IP2K-Opts. (line 14)
-* architecture options, M16C: M32C-Opts. (line 12)
-* architecture options, M32C: M32C-Opts. (line 9)
-* architecture options, M32R: M32R-Opts. (line 21)
-* architecture options, M32R2: M32R-Opts. (line 17)
-* architecture options, M32RX: M32R-Opts. (line 9)
-* architecture options, M680x0: M68K-Opts. (line 103)
-* Architecture variant option, CRIS: CRIS-Opts. (line 33)
-* architectures, PowerPC: PowerPC-Opts. (line 6)
-* architectures, SPARC: Sparc-Opts. (line 6)
-* arguments for addition: Infix Ops. (line 44)
-* arguments for subtraction: Infix Ops. (line 49)
-* arguments in expressions: Arguments. (line 6)
-* arithmetic functions: Operators. (line 6)
-* arithmetic operands: Arguments. (line 6)
-* arm directive, ARM: ARM Directives. (line 36)
-* ARM floating point (IEEE): ARM Floating Point. (line 6)
-* ARM identifiers: ARM-Chars. (line 15)
-* ARM immediate character: ARM-Chars. (line 13)
-* ARM line comment character: ARM-Chars. (line 6)
-* ARM line separator: ARM-Chars. (line 10)
-* ARM machine directives: ARM Directives. (line 6)
-* ARM opcodes: ARM Opcodes. (line 6)
-* ARM options (none): ARM Options. (line 6)
-* ARM register names: ARM-Regs. (line 6)
-* ARM support: ARM-Dependent. (line 6)
-* ascii directive: Ascii. (line 6)
-* asciz directive: Asciz. (line 6)
-* asg directive, TIC54X: TIC54X-Directives. (line 20)
-* assembler bugs, reporting: Bug Reporting. (line 6)
-* assembler crash: Bug Criteria. (line 9)
-* assembler directive .arch, CRIS: CRIS-Pseudos. (line 45)
-* assembler directive .dword, CRIS: CRIS-Pseudos. (line 12)
-* assembler directive .far, M68HC11: M68HC11-Directives. (line 20)
-* assembler directive .interrupt, M68HC11: M68HC11-Directives.
- (line 26)
-* assembler directive .mode, M68HC11: M68HC11-Directives. (line 16)
-* assembler directive .relax, M68HC11: M68HC11-Directives. (line 10)
-* assembler directive .syntax, CRIS: CRIS-Pseudos. (line 17)
-* assembler directive .xrefb, M68HC11: M68HC11-Directives. (line 31)
-* assembler directive BSPEC, MMIX: MMIX-Pseudos. (line 131)
-* assembler directive BYTE, MMIX: MMIX-Pseudos. (line 97)
-* assembler directive ESPEC, MMIX: MMIX-Pseudos. (line 131)
-* assembler directive GREG, MMIX: MMIX-Pseudos. (line 50)
-* assembler directive IS, MMIX: MMIX-Pseudos. (line 42)
-* assembler directive LOC, MMIX: MMIX-Pseudos. (line 7)
-* assembler directive LOCAL, MMIX: MMIX-Pseudos. (line 28)
-* assembler directive OCTA, MMIX: MMIX-Pseudos. (line 108)
-* assembler directive PREFIX, MMIX: MMIX-Pseudos. (line 120)
-* assembler directive TETRA, MMIX: MMIX-Pseudos. (line 108)
-* assembler directive WYDE, MMIX: MMIX-Pseudos. (line 108)
-* assembler directives, CRIS: CRIS-Pseudos. (line 6)
-* assembler directives, M68HC11: M68HC11-Directives. (line 6)
-* assembler directives, M68HC12: M68HC11-Directives. (line 6)
-* assembler directives, MMIX: MMIX-Pseudos. (line 6)
-* assembler internal logic error: As Sections. (line 13)
-* assembler version: v. (line 6)
-* assembler, and linker: Secs Background. (line 10)
-* assembly listings, enabling: a. (line 6)
-* assigning values to symbols <1>: Equ. (line 6)
-* assigning values to symbols: Setting Symbols. (line 6)
-* atmp directive, i860: Directives-i860. (line 16)
-* att_syntax pseudo op, i386: i386-Syntax. (line 6)
-* att_syntax pseudo op, x86-64: i386-Syntax. (line 6)
-* attributes, symbol: Symbol Attributes. (line 6)
-* auxiliary attributes, COFF symbols: COFF Symbols. (line 19)
-* auxiliary symbol information, COFF: Dim. (line 6)
-* Av7: Sparc-Opts. (line 25)
-* backslash (\\): Strings. (line 40)
-* backspace (\b): Strings. (line 15)
-* balign directive: Balign. (line 6)
-* balignl directive: Balign. (line 27)
-* balignw directive: Balign. (line 27)
-* bes directive, TIC54X: TIC54X-Directives. (line 197)
-* BFIN directives: BFIN Directives. (line 6)
-* BFIN syntax: BFIN Syntax. (line 6)
-* big endian output, MIPS: Overview. (line 606)
-* big endian output, PJ: Overview. (line 513)
-* big-endian output, MIPS: MIPS Opts. (line 13)
-* bignums: Bignums. (line 6)
-* binary constants, TIC54X: TIC54X-Constants. (line 8)
-* binary files, including: Incbin. (line 6)
-* binary integers: Integers. (line 6)
-* bit names, IA-64: IA-64-Bits. (line 6)
-* bitfields, not supported on VAX: VAX-no. (line 6)
-* Blackfin support: BFIN-Dependent. (line 6)
-* block: Z8000 Directives. (line 55)
-* branch improvement, M680x0: M68K-Branch. (line 6)
-* branch improvement, M68HC11: M68HC11-Branch. (line 6)
-* branch improvement, VAX: VAX-branch. (line 6)
-* branch instructions, relaxation: Xtensa Branch Relaxation.
- (line 6)
-* branch recording, i960: Options-i960. (line 22)
-* branch statistics table, i960: Options-i960. (line 40)
-* branch target alignment: Xtensa Automatic Alignment.
- (line 6)
-* break directive, TIC54X: TIC54X-Directives. (line 143)
-* BSD syntax: PDP-11-Syntax. (line 6)
-* bss directive, i960: Directives-i960. (line 6)
-* bss directive, TIC54X: TIC54X-Directives. (line 29)
-* bss section <1>: bss. (line 6)
-* bss section: Ld Sections. (line 20)
-* bug criteria: Bug Criteria. (line 6)
-* bug reports: Bug Reporting. (line 6)
-* bugs in assembler: Reporting Bugs. (line 6)
-* Built-in symbols, CRIS: CRIS-Symbols. (line 6)
-* builtin math functions, TIC54X: TIC54X-Builtins. (line 6)
-* builtin subsym functions, TIC54X: TIC54X-Macros. (line 16)
-* bus lock prefixes, i386: i386-Prefixes. (line 36)
-* bval: Z8000 Directives. (line 30)
-* byte directive: Byte. (line 6)
-* byte directive, TIC54X: TIC54X-Directives. (line 36)
-* C54XDSP_DIR environment variable, TIC54X: TIC54X-Env. (line 6)
-* c_mode directive, TIC54X: TIC54X-Directives. (line 51)
-* call instructions, i386: i386-Mnemonics. (line 51)
-* call instructions, relaxation: Xtensa Call Relaxation.
- (line 6)
-* call instructions, x86-64: i386-Mnemonics. (line 51)
-* callj, i960 pseudo-opcode: callj-i960. (line 6)
-* carriage return (\r): Strings. (line 24)
-* case sensitivity, Z80: Z80-Case. (line 6)
-* cfi_endproc directive: CFI directives. (line 14)
-* cfi_startproc directive: CFI directives. (line 6)
-* char directive, TIC54X: TIC54X-Directives. (line 36)
-* character constant, Z80: Z80-Chars. (line 13)
-* character constants: Characters. (line 6)
-* character escape codes: Strings. (line 15)
-* character escapes, Z80: Z80-Chars. (line 11)
-* character, single: Chars. (line 6)
-* characters used in symbols: Symbol Intro. (line 6)
-* clink directive, TIC54X: TIC54X-Directives. (line 45)
-* code directive, ARM: ARM Directives. (line 29)
-* code16 directive, i386: i386-16bit. (line 6)
-* code16gcc directive, i386: i386-16bit. (line 6)
-* code32 directive, i386: i386-16bit. (line 6)
-* code64 directive, i386: i386-16bit. (line 6)
-* code64 directive, x86-64: i386-16bit. (line 6)
-* COFF auxiliary symbol information: Dim. (line 6)
-* COFF structure debugging: Tag. (line 6)
-* COFF symbol attributes: COFF Symbols. (line 6)
-* COFF symbol descriptor: Desc. (line 6)
-* COFF symbol storage class: Scl. (line 6)
-* COFF symbol type: Type. (line 11)
-* COFF symbols, debugging: Def. (line 6)
-* COFF value attribute: Val. (line 6)
-* COMDAT: Linkonce. (line 6)
-* comm directive: Comm. (line 6)
-* command line conventions: Command Line. (line 6)
-* command line options, V850: V850 Options. (line 9)
-* command-line options ignored, VAX: VAX-Opts. (line 6)
-* comments: Comments. (line 6)
-* comments, M680x0: M68K-Chars. (line 6)
-* comments, removed by preprocessor: Preprocessing. (line 11)
-* common directive, SPARC: Sparc-Directives. (line 12)
-* common sections: Linkonce. (line 6)
-* common variable storage: bss. (line 6)
-* compare and jump expansions, i960: Compare-and-branch-i960.
- (line 13)
-* compare/branch instructions, i960: Compare-and-branch-i960.
- (line 6)
-* comparison expressions: Infix Ops. (line 55)
-* conditional assembly: If. (line 6)
-* constant, single character: Chars. (line 6)
-* constants: Constants. (line 6)
-* constants, bignum: Bignums. (line 6)
-* constants, character: Characters. (line 6)
-* constants, converted by preprocessor: Preprocessing. (line 14)
-* constants, floating point: Flonums. (line 6)
-* constants, integer: Integers. (line 6)
-* constants, number: Numbers. (line 6)
-* constants, string: Strings. (line 6)
-* constants, TIC54X: TIC54X-Constants. (line 6)
-* conversion instructions, i386: i386-Mnemonics. (line 32)
-* conversion instructions, x86-64: i386-Mnemonics. (line 32)
-* coprocessor wait, i386: i386-Prefixes. (line 40)
-* copy directive, TIC54X: TIC54X-Directives. (line 54)
-* cpu directive, M680x0: M68K-Directives. (line 30)
-* crash of assembler: Bug Criteria. (line 9)
-* CRIS --emulation=crisaout command line option: CRIS-Opts. (line 9)
-* CRIS --emulation=criself command line option: CRIS-Opts. (line 9)
-* CRIS --march=ARCHITECTURE command line option: CRIS-Opts. (line 33)
-* CRIS --mul-bug-abort command line option: CRIS-Opts. (line 61)
-* CRIS --no-mul-bug-abort command line option: CRIS-Opts. (line 61)
-* CRIS --no-underscore command line option: CRIS-Opts. (line 15)
-* CRIS --pic command line option: CRIS-Opts. (line 27)
-* CRIS --underscore command line option: CRIS-Opts. (line 15)
-* CRIS -N command line option: CRIS-Opts. (line 57)
-* CRIS architecture variant option: CRIS-Opts. (line 33)
-* CRIS assembler directive .arch: CRIS-Pseudos. (line 45)
-* CRIS assembler directive .dword: CRIS-Pseudos. (line 12)
-* CRIS assembler directive .syntax: CRIS-Pseudos. (line 17)
-* CRIS assembler directives: CRIS-Pseudos. (line 6)
-* CRIS built-in symbols: CRIS-Symbols. (line 6)
-* CRIS instruction expansion: CRIS-Expand. (line 6)
-* CRIS line comment characters: CRIS-Chars. (line 6)
-* CRIS options: CRIS-Opts. (line 6)
-* CRIS position-independent code: CRIS-Opts. (line 27)
-* CRIS pseudo-op .arch: CRIS-Pseudos. (line 45)
-* CRIS pseudo-op .dword: CRIS-Pseudos. (line 12)
-* CRIS pseudo-op .syntax: CRIS-Pseudos. (line 17)
-* CRIS pseudo-ops: CRIS-Pseudos. (line 6)
-* CRIS register names: CRIS-Regs. (line 6)
-* CRIS support: CRIS-Dependent. (line 6)
-* CRIS symbols in position-independent code: CRIS-Pic. (line 6)
-* ctbp register, V850: V850-Regs. (line 131)
-* ctoff pseudo-op, V850: V850 Opcodes. (line 111)
-* ctpc register, V850: V850-Regs. (line 119)
-* ctpsw register, V850: V850-Regs. (line 122)
-* current address: Dot. (line 6)
-* current address, advancing: Org. (line 6)
-* D10V @word modifier: D10V-Word. (line 6)
-* D10V addressing modes: D10V-Addressing. (line 6)
-* D10V floating point: D10V-Float. (line 6)
-* D10V line comment character: D10V-Chars. (line 6)
-* D10V opcode summary: D10V-Opcodes. (line 6)
-* D10V optimization: Overview. (line 391)
-* D10V options: D10V-Opts. (line 6)
-* D10V registers: D10V-Regs. (line 6)
-* D10V size modifiers: D10V-Size. (line 6)
-* D10V sub-instruction ordering: D10V-Chars. (line 6)
-* D10V sub-instructions: D10V-Subs. (line 6)
-* D10V support: D10V-Dependent. (line 6)
-* D10V syntax: D10V-Syntax. (line 6)
-* D30V addressing modes: D30V-Addressing. (line 6)
-* D30V floating point: D30V-Float. (line 6)
-* D30V Guarded Execution: D30V-Guarded. (line 6)
-* D30V line comment character: D30V-Chars. (line 6)
-* D30V nops: Overview. (line 399)
-* D30V nops after 32-bit multiply: Overview. (line 402)
-* D30V opcode summary: D30V-Opcodes. (line 6)
-* D30V optimization: Overview. (line 396)
-* D30V options: D30V-Opts. (line 6)
-* D30V registers: D30V-Regs. (line 6)
-* D30V size modifiers: D30V-Size. (line 6)
-* D30V sub-instruction ordering: D30V-Chars. (line 6)
-* D30V sub-instructions: D30V-Subs. (line 6)
-* D30V support: D30V-Dependent. (line 6)
-* D30V syntax: D30V-Syntax. (line 6)
-* data alignment on SPARC: Sparc-Aligned-Data. (line 6)
-* data and text sections, joining: R. (line 6)
-* data directive: Data. (line 6)
-* data directive, TIC54X: TIC54X-Directives. (line 61)
-* data section: Ld Sections. (line 9)
-* data1 directive, M680x0: M68K-Directives. (line 9)
-* data2 directive, M680x0: M68K-Directives. (line 12)
-* datalabel, SH64: SH64-Addressing. (line 16)
-* dbpc register, V850: V850-Regs. (line 125)
-* dbpsw register, V850: V850-Regs. (line 128)
-* debuggers, and symbol order: Symbols. (line 10)
-* debugging COFF symbols: Def. (line 6)
-* DEC syntax: PDP-11-Syntax. (line 6)
-* decimal integers: Integers. (line 12)
-* def directive: Def. (line 6)
-* def directive, TIC54X: TIC54X-Directives. (line 103)
-* density instructions: Density Instructions.
- (line 6)
-* dependency tracking: MD. (line 6)
-* deprecated directives: Deprecated. (line 6)
-* desc directive: Desc. (line 6)
-* descriptor, of a.out symbol: Symbol Desc. (line 6)
-* dfloat directive, VAX: VAX-directives. (line 10)
-* difference tables altered: Word. (line 12)
-* difference tables, warning: K. (line 6)
-* differences, mmixal: MMIX-mmixal. (line 6)
-* dim directive: Dim. (line 6)
-* directives and instructions: Statements. (line 19)
-* directives for PowerPC: PowerPC-Pseudo. (line 6)
-* directives, BFIN: BFIN Directives. (line 6)
-* directives, M32R: M32R-Directives. (line 6)
-* directives, M680x0: M68K-Directives. (line 6)
-* directives, machine independent: Pseudo Ops. (line 6)
-* directives, Xtensa: Xtensa Directives. (line 6)
-* directives, Z8000: Z8000 Directives. (line 6)
-* displacement sizing character, VAX: VAX-operands. (line 12)
-* dollar local symbols: Symbol Names. (line 91)
-* dot (symbol): Dot. (line 6)
-* double directive: Double. (line 6)
-* double directive, i386: i386-Float. (line 14)
-* double directive, M680x0: M68K-Float. (line 14)
-* double directive, M68HC11: M68HC11-Float. (line 14)
-* double directive, TIC54X: TIC54X-Directives. (line 64)
-* double directive, VAX: VAX-float. (line 15)
-* double directive, x86-64: i386-Float. (line 14)
-* doublequote (\"): Strings. (line 43)
-* drlist directive, TIC54X: TIC54X-Directives. (line 73)
-* drnolist directive, TIC54X: TIC54X-Directives. (line 73)
-* dual directive, i860: Directives-i860. (line 6)
-* ECOFF sections: MIPS Object. (line 6)
-* ecr register, V850: V850-Regs. (line 113)
-* eight-byte integer: Quad. (line 9)
-* eipc register, V850: V850-Regs. (line 101)
-* eipsw register, V850: V850-Regs. (line 104)
-* eject directive: Eject. (line 6)
-* ELF symbol type: Type. (line 22)
-* else directive: Else. (line 6)
-* elseif directive: Elseif. (line 6)
-* empty expressions: Empty Exprs. (line 6)
-* emsg directive, TIC54X: TIC54X-Directives. (line 77)
-* emulation: Overview. (line 697)
-* end directive: End. (line 6)
-* enddual directive, i860: Directives-i860. (line 11)
-* endef directive: Endef. (line 6)
-* endfunc directive: Endfunc. (line 6)
-* endianness, MIPS: Overview. (line 606)
-* endianness, PJ: Overview. (line 513)
-* endif directive: Endif. (line 6)
-* endloop directive, TIC54X: TIC54X-Directives. (line 143)
-* endm directive: Macro. (line 96)
-* endm directive, TIC54X: TIC54X-Directives. (line 153)
-* endstruct directive, TIC54X: TIC54X-Directives. (line 217)
-* endunion directive, TIC54X: TIC54X-Directives. (line 251)
-* ENTRY instructions, alignment: Xtensa Automatic Alignment.
- (line 6)
-* environment settings, TIC54X: TIC54X-Env. (line 6)
-* EOF, newline must precede: Statements. (line 13)
-* ep register, V850: V850-Regs. (line 95)
-* equ directive: Equ. (line 6)
-* equ directive, TIC54X: TIC54X-Directives. (line 192)
-* equiv directive: Equiv. (line 6)
-* eqv directive: Eqv. (line 6)
-* err directive: Err. (line 6)
-* error directive: Error. (line 6)
-* error messages: Errors. (line 6)
-* error on valid input: Bug Criteria. (line 12)
-* errors, caused by warnings: W. (line 16)
-* errors, continuing after: Z. (line 6)
-* ESA/390 floating point (IEEE): ESA/390 Floating Point.
- (line 6)
-* ESA/390 support: ESA/390-Dependent. (line 6)
-* ESA/390 Syntax: ESA/390 Options. (line 8)
-* ESA/390-only directives: ESA/390 Directives. (line 12)
-* escape codes, character: Strings. (line 15)
-* eval directive, TIC54X: TIC54X-Directives. (line 24)
-* even: Z8000 Directives. (line 58)
-* even directive, M680x0: M68K-Directives. (line 15)
-* even directive, TIC54X: TIC54X-Directives. (line 6)
-* exitm directive: Macro. (line 99)
-* expr (internal section): As Sections. (line 17)
-* expression arguments: Arguments. (line 6)
-* expressions: Expressions. (line 6)
-* expressions, comparison: Infix Ops. (line 55)
-* expressions, empty: Empty Exprs. (line 6)
-* expressions, integer: Integer Exprs. (line 6)
-* extAuxRegister directive, ARC: ARC Directives. (line 18)
-* extCondCode directive, ARC: ARC Directives. (line 41)
-* extCoreRegister directive, ARC: ARC Directives. (line 53)
-* extend directive M680x0: M68K-Float. (line 17)
-* extend directive M68HC11: M68HC11-Float. (line 17)
-* extended directive, i960: Directives-i960. (line 13)
-* extern directive: Extern. (line 6)
-* extInstruction directive, ARC: ARC Directives. (line 78)
-* fail directive: Fail. (line 6)
-* far_mode directive, TIC54X: TIC54X-Directives. (line 82)
-* faster processing (-f): f. (line 6)
-* fatal signal: Bug Criteria. (line 9)
-* fclist directive, TIC54X: TIC54X-Directives. (line 87)
-* fcnolist directive, TIC54X: TIC54X-Directives. (line 87)
-* fepc register, V850: V850-Regs. (line 107)
-* fepsw register, V850: V850-Regs. (line 110)
-* ffloat directive, VAX: VAX-directives. (line 14)
-* field directive, TIC54X: TIC54X-Directives. (line 91)
-* file directive <1>: File. (line 6)
-* file directive: LNS directives. (line 6)
-* file directive, MSP 430: MSP430 Directives. (line 6)
-* file name, logical: File. (line 6)
-* files, including: Include. (line 6)
-* files, input: Input Files. (line 6)
-* fill directive: Fill. (line 6)
-* filling memory <1>: Space. (line 6)
-* filling memory: Skip. (line 6)
-* FLIX syntax: Xtensa Syntax. (line 6)
-* float directive: Float. (line 6)
-* float directive, i386: i386-Float. (line 14)
-* float directive, M680x0: M68K-Float. (line 11)
-* float directive, M68HC11: M68HC11-Float. (line 11)
-* float directive, TIC54X: TIC54X-Directives. (line 64)
-* float directive, VAX: VAX-float. (line 15)
-* float directive, x86-64: i386-Float. (line 14)
-* floating point numbers: Flonums. (line 6)
-* floating point numbers (double): Double. (line 6)
-* floating point numbers (single) <1>: Single. (line 6)
-* floating point numbers (single): Float. (line 6)
-* floating point, Alpha (IEEE): Alpha Floating Point.
- (line 6)
-* floating point, ARC (IEEE): ARC Floating Point. (line 6)
-* floating point, ARM (IEEE): ARM Floating Point. (line 6)
-* floating point, D10V: D10V-Float. (line 6)
-* floating point, D30V: D30V-Float. (line 6)
-* floating point, ESA/390 (IEEE): ESA/390 Floating Point.
- (line 6)
-* floating point, H8/300 (IEEE): H8/300 Floating Point.
- (line 6)
-* floating point, HPPA (IEEE): HPPA Floating Point. (line 6)
-* floating point, i386: i386-Float. (line 6)
-* floating point, i960 (IEEE): Floating Point-i960. (line 6)
-* floating point, M680x0: M68K-Float. (line 6)
-* floating point, M68HC11: M68HC11-Float. (line 6)
-* floating point, MSP 430 (IEEE): MSP430 Floating Point.
- (line 6)
-* floating point, SH (IEEE): SH Floating Point. (line 6)
-* floating point, SPARC (IEEE): Sparc-Float. (line 6)
-* floating point, V850 (IEEE): V850 Floating Point. (line 6)
-* floating point, VAX: VAX-float. (line 6)
-* floating point, x86-64: i386-Float. (line 6)
-* floating point, Z80: Z80 Floating Point. (line 6)
-* flonums: Flonums. (line 6)
-* force_thumb directive, ARM: ARM Directives. (line 39)
-* format of error messages: Errors. (line 24)
-* format of warning messages: Errors. (line 12)
-* formfeed (\f): Strings. (line 18)
-* func directive: Func. (line 6)
-* functions, in expressions: Operators. (line 6)
-* gbr960, i960 postprocessor: Options-i960. (line 40)
-* gfloat directive, VAX: VAX-directives. (line 18)
-* global: Z8000 Directives. (line 21)
-* global directive: Global. (line 6)
-* global directive, TIC54X: TIC54X-Directives. (line 103)
-* gp register, MIPS: MIPS Object. (line 11)
-* gp register, V850: V850-Regs. (line 17)
-* grouping data: Sub-Sections. (line 6)
-* H8/300 addressing modes: H8/300-Addressing. (line 6)
-* H8/300 floating point (IEEE): H8/300 Floating Point.
- (line 6)
-* H8/300 line comment character: H8/300-Chars. (line 6)
-* H8/300 line separator: H8/300-Chars. (line 8)
-* H8/300 machine directives (none): H8/300 Directives. (line 6)
-* H8/300 opcode summary: H8/300 Opcodes. (line 6)
-* H8/300 options (none): H8/300 Options. (line 6)
-* H8/300 registers: H8/300-Regs. (line 6)
-* H8/300 size suffixes: H8/300 Opcodes. (line 163)
-* H8/300 support: H8/300-Dependent. (line 6)
-* H8/300H, assembling for: H8/300 Directives. (line 8)
-* half directive, ARC: ARC Directives. (line 156)
-* half directive, SPARC: Sparc-Directives. (line 17)
-* half directive, TIC54X: TIC54X-Directives. (line 111)
-* hex character code (\XD...): Strings. (line 36)
-* hexadecimal integers: Integers. (line 15)
-* hexadecimal prefix, Z80: Z80-Chars. (line 8)
-* hfloat directive, VAX: VAX-directives. (line 22)
-* hi pseudo-op, V850: V850 Opcodes. (line 33)
-* hi0 pseudo-op, V850: V850 Opcodes. (line 10)
-* hidden directive: Hidden. (line 6)
-* high directive, M32R: M32R-Directives. (line 18)
-* hilo pseudo-op, V850: V850 Opcodes. (line 55)
-* HPPA directives not supported: HPPA Directives. (line 11)
-* HPPA floating point (IEEE): HPPA Floating Point. (line 6)
-* HPPA Syntax: HPPA Options. (line 8)
-* HPPA-only directives: HPPA Directives. (line 24)
-* hword directive: hword. (line 6)
-* i370 support: ESA/390-Dependent. (line 6)
-* i386 16-bit code: i386-16bit. (line 6)
-* i386 arch directive: i386-Arch. (line 6)
-* i386 att_syntax pseudo op: i386-Syntax. (line 6)
-* i386 conversion instructions: i386-Mnemonics. (line 32)
-* i386 floating point: i386-Float. (line 6)
-* i386 immediate operands: i386-Syntax. (line 15)
-* i386 instruction naming: i386-Mnemonics. (line 6)
-* i386 instruction prefixes: i386-Prefixes. (line 6)
-* i386 intel_syntax pseudo op: i386-Syntax. (line 6)
-* i386 jump optimization: i386-Jumps. (line 6)
-* i386 jump, call, return: i386-Syntax. (line 38)
-* i386 jump/call operands: i386-Syntax. (line 15)
-* i386 memory references: i386-Memory. (line 6)
-* i386 mul, imul instructions: i386-Notes. (line 6)
-* i386 options: i386-Options. (line 6)
-* i386 register operands: i386-Syntax. (line 15)
-* i386 registers: i386-Regs. (line 6)
-* i386 sections: i386-Syntax. (line 44)
-* i386 size suffixes: i386-Syntax. (line 29)
-* i386 source, destination operands: i386-Syntax. (line 22)
-* i386 support: i386-Dependent. (line 6)
-* i386 syntax compatibility: i386-Syntax. (line 6)
-* i80306 support: i386-Dependent. (line 6)
-* i860 machine directives: Directives-i860. (line 6)
-* i860 opcodes: Opcodes for i860. (line 6)
-* i860 support: i860-Dependent. (line 6)
-* i960 architecture options: Options-i960. (line 6)
-* i960 branch recording: Options-i960. (line 22)
-* i960 callj pseudo-opcode: callj-i960. (line 6)
-* i960 compare and jump expansions: Compare-and-branch-i960.
- (line 13)
-* i960 compare/branch instructions: Compare-and-branch-i960.
- (line 6)
-* i960 floating point (IEEE): Floating Point-i960. (line 6)
-* i960 machine directives: Directives-i960. (line 6)
-* i960 opcodes: Opcodes for i960. (line 6)
-* i960 options: Options-i960. (line 6)
-* i960 support: i960-Dependent. (line 6)
-* IA-64 line comment character: IA-64-Chars. (line 6)
-* IA-64 line separator: IA-64-Chars. (line 8)
-* IA-64 options: IA-64 Options. (line 6)
-* IA-64 Processor-status-Register bit names: IA-64-Bits. (line 6)
-* IA-64 registers: IA-64-Regs. (line 6)
-* IA-64 support: IA-64-Dependent. (line 6)
-* IA-64 Syntax: IA-64 Options. (line 96)
-* ident directive: Ident. (line 6)
-* identifiers, ARM: ARM-Chars. (line 15)
-* identifiers, MSP 430: MSP430-Chars. (line 8)
-* if directive: If. (line 6)
-* ifb directive: If. (line 21)
-* ifc directive: If. (line 25)
-* ifdef directive: If. (line 16)
-* ifeq directive: If. (line 33)
-* ifeqs directive: If. (line 36)
-* ifge directive: If. (line 40)
-* ifgt directive: If. (line 44)
-* ifle directive: If. (line 48)
-* iflt directive: If. (line 52)
-* ifnb directive: If. (line 56)
-* ifnc directive: If. (line 61)
-* ifndef directive: If. (line 65)
-* ifne directive: If. (line 72)
-* ifnes directive: If. (line 76)
-* ifnotdef directive: If. (line 65)
-* immediate character, ARM: ARM-Chars. (line 13)
-* immediate character, M680x0: M68K-Chars. (line 6)
-* immediate character, VAX: VAX-operands. (line 6)
-* immediate fields, relaxation: Xtensa Immediate Relaxation.
- (line 6)
-* immediate operands, i386: i386-Syntax. (line 15)
-* immediate operands, x86-64: i386-Syntax. (line 15)
-* imul instruction, i386: i386-Notes. (line 6)
-* imul instruction, x86-64: i386-Notes. (line 6)
-* incbin directive: Incbin. (line 6)
-* include directive: Include. (line 6)
-* include directive search path: I. (line 6)
-* indirect character, VAX: VAX-operands. (line 9)
-* infix operators: Infix Ops. (line 6)
-* inhibiting interrupts, i386: i386-Prefixes. (line 36)
-* input: Input Files. (line 6)
-* input file linenumbers: Input Files. (line 35)
-* instruction expansion, CRIS: CRIS-Expand. (line 6)
-* instruction expansion, MMIX: MMIX-Expand. (line 6)
-* instruction naming, i386: i386-Mnemonics. (line 6)
-* instruction naming, x86-64: i386-Mnemonics. (line 6)
-* instruction prefixes, i386: i386-Prefixes. (line 6)
-* instruction set, M680x0: M68K-opcodes. (line 6)
-* instruction set, M68HC11: M68HC11-opcodes. (line 6)
-* instruction summary, D10V: D10V-Opcodes. (line 6)
-* instruction summary, D30V: D30V-Opcodes. (line 6)
-* instruction summary, H8/300: H8/300 Opcodes. (line 6)
-* instruction summary, SH: SH Opcodes. (line 6)
-* instruction summary, SH64: SH64 Opcodes. (line 6)
-* instruction summary, Z8000: Z8000 Opcodes. (line 6)
-* instructions and directives: Statements. (line 19)
-* int directive: Int. (line 6)
-* int directive, H8/300: H8/300 Directives. (line 6)
-* int directive, i386: i386-Float. (line 21)
-* int directive, TIC54X: TIC54X-Directives. (line 111)
-* int directive, x86-64: i386-Float. (line 21)
-* integer expressions: Integer Exprs. (line 6)
-* integer, 16-byte: Octa. (line 6)
-* integer, 8-byte: Quad. (line 9)
-* integers: Integers. (line 6)
-* integers, 16-bit: hword. (line 6)
-* integers, 32-bit: Int. (line 6)
-* integers, binary: Integers. (line 6)
-* integers, decimal: Integers. (line 12)
-* integers, hexadecimal: Integers. (line 15)
-* integers, octal: Integers. (line 9)
-* integers, one byte: Byte. (line 6)
-* intel_syntax pseudo op, i386: i386-Syntax. (line 6)
-* intel_syntax pseudo op, x86-64: i386-Syntax. (line 6)
-* internal assembler sections: As Sections. (line 6)
-* internal directive: Internal. (line 6)
-* invalid input: Bug Criteria. (line 14)
-* invocation summary: Overview. (line 6)
-* IP2K architecture options: IP2K-Opts. (line 9)
-* IP2K options: IP2K-Opts. (line 6)
-* IP2K support: IP2K-Dependent. (line 6)
-* irp directive: Irp. (line 6)
-* irpc directive: Irpc. (line 6)
-* ISA options, SH64: SH64 Options. (line 6)
-* joining text and data sections: R. (line 6)
-* jump instructions, i386: i386-Mnemonics. (line 51)
-* jump instructions, x86-64: i386-Mnemonics. (line 51)
-* jump optimization, i386: i386-Jumps. (line 6)
-* jump optimization, x86-64: i386-Jumps. (line 6)
-* jump/call operands, i386: i386-Syntax. (line 15)
-* jump/call operands, x86-64: i386-Syntax. (line 15)
-* L16SI instructions, relaxation: Xtensa Immediate Relaxation.
- (line 23)
-* L16UI instructions, relaxation: Xtensa Immediate Relaxation.
- (line 23)
-* L32I instructions, relaxation: Xtensa Immediate Relaxation.
- (line 23)
-* L8UI instructions, relaxation: Xtensa Immediate Relaxation.
- (line 23)
-* label (:): Statements. (line 30)
-* label directive, TIC54X: TIC54X-Directives. (line 123)
-* labels: Labels. (line 6)
-* lcomm directive: Lcomm. (line 6)
-* ld: Object. (line 15)
-* ldouble directive M680x0: M68K-Float. (line 17)
-* ldouble directive M68HC11: M68HC11-Float. (line 17)
-* ldouble directive, TIC54X: TIC54X-Directives. (line 64)
-* LDR reg,=<label> pseudo op, ARM: ARM Opcodes. (line 15)
-* leafproc directive, i960: Directives-i960. (line 18)
-* length directive, TIC54X: TIC54X-Directives. (line 127)
-* length of symbols: Symbol Intro. (line 14)
-* lflags directive (ignored): Lflags. (line 6)
-* line comment character: Comments. (line 19)
-* line comment character, Alpha: Alpha-Chars. (line 6)
-* line comment character, ARM: ARM-Chars. (line 6)
-* line comment character, D10V: D10V-Chars. (line 6)
-* line comment character, D30V: D30V-Chars. (line 6)
-* line comment character, H8/300: H8/300-Chars. (line 6)
-* line comment character, IA-64: IA-64-Chars. (line 6)
-* line comment character, M680x0: M68K-Chars. (line 6)
-* line comment character, MSP 430: MSP430-Chars. (line 6)
-* line comment character, SH: SH-Chars. (line 6)
-* line comment character, SH64: SH64-Chars. (line 6)
-* line comment character, V850: V850-Chars. (line 6)
-* line comment character, Z80: Z80-Chars. (line 6)
-* line comment character, Z8000: Z8000-Chars. (line 6)
-* line comment characters, CRIS: CRIS-Chars. (line 6)
-* line comment characters, MMIX: MMIX-Chars. (line 6)
-* line directive: Line. (line 6)
-* line directive, MSP 430: MSP430 Directives. (line 14)
-* line numbers, in input files: Input Files. (line 35)
-* line numbers, in warnings/errors: Errors. (line 16)
-* line separator character: Statements. (line 6)
-* line separator, Alpha: Alpha-Chars. (line 8)
-* line separator, ARM: ARM-Chars. (line 10)
-* line separator, H8/300: H8/300-Chars. (line 8)
-* line separator, IA-64: IA-64-Chars. (line 8)
-* line separator, SH: SH-Chars. (line 8)
-* line separator, SH64: SH64-Chars. (line 8)
-* line separator, Z8000: Z8000-Chars. (line 8)
-* lines starting with #: Comments. (line 38)
-* linker: Object. (line 15)
-* linker, and assembler: Secs Background. (line 10)
-* linkonce directive: Linkonce. (line 6)
-* list directive: List. (line 6)
-* list directive, TIC54X: TIC54X-Directives. (line 131)
-* listing control, turning off: Nolist. (line 6)
-* listing control, turning on: List. (line 6)
-* listing control: new page: Eject. (line 6)
-* listing control: paper size: Psize. (line 6)
-* listing control: subtitle: Sbttl. (line 6)
-* listing control: title line: Title. (line 6)
-* listings, enabling: a. (line 6)
-* literal directive: Literal Directive. (line 6)
-* literal_position directive: Literal Position Directive.
- (line 6)
-* literal_prefix directive: Literal Prefix Directive.
- (line 6)
-* little endian output, MIPS: Overview. (line 609)
-* little endian output, PJ: Overview. (line 516)
-* little-endian output, MIPS: MIPS Opts. (line 13)
-* ln directive: Ln. (line 6)
-* lo pseudo-op, V850: V850 Opcodes. (line 22)
-* loc directive: LNS directives. (line 19)
-* loc_mark_blocks directive: LNS directives. (line 50)
-* local common symbols: Lcomm. (line 6)
-* local labels, retaining in output: L. (line 6)
-* local symbol names: Symbol Names. (line 22)
-* location counter: Dot. (line 6)
-* location counter, advancing: Org. (line 6)
-* location counter, Z80: Z80-Chars. (line 8)
-* logical file name: File. (line 6)
-* logical line number: Line. (line 6)
-* logical line numbers: Comments. (line 38)
-* long directive: Long. (line 6)
-* long directive, ARC: ARC Directives. (line 159)
-* long directive, i386: i386-Float. (line 21)
-* long directive, TIC54X: TIC54X-Directives. (line 135)
-* long directive, x86-64: i386-Float. (line 21)
-* longcall pseudo-op, V850: V850 Opcodes. (line 123)
-* longcalls directive: Longcalls Directive. (line 6)
-* longjump pseudo-op, V850: V850 Opcodes. (line 129)
-* loop directive, TIC54X: TIC54X-Directives. (line 143)
-* LOOP instructions, alignment: Xtensa Automatic Alignment.
- (line 6)
-* low directive, M32R: M32R-Directives. (line 9)
-* lp register, V850: V850-Regs. (line 98)
-* lval: Z8000 Directives. (line 27)
-* M16C architecture option: M32C-Opts. (line 12)
-* M32C architecture option: M32C-Opts. (line 9)
-* M32C modifiers: M32C-Modifiers. (line 6)
-* M32C options: M32C-Opts. (line 6)
-* M32C support: M32C-Dependent. (line 6)
-* M32R architecture options: M32R-Opts. (line 9)
-* M32R directives: M32R-Directives. (line 6)
-* M32R options: M32R-Opts. (line 6)
-* M32R support: M32R-Dependent. (line 6)
-* M32R warnings: M32R-Warnings. (line 6)
-* M680x0 addressing modes: M68K-Syntax. (line 21)
-* M680x0 architecture options: M68K-Opts. (line 103)
-* M680x0 branch improvement: M68K-Branch. (line 6)
-* M680x0 directives: M68K-Directives. (line 6)
-* M680x0 floating point: M68K-Float. (line 6)
-* M680x0 immediate character: M68K-Chars. (line 6)
-* M680x0 line comment character: M68K-Chars. (line 6)
-* M680x0 opcodes: M68K-opcodes. (line 6)
-* M680x0 options: M68K-Opts. (line 6)
-* M680x0 pseudo-opcodes: M68K-Branch. (line 6)
-* M680x0 size modifiers: M68K-Syntax. (line 8)
-* M680x0 support: M68K-Dependent. (line 6)
-* M680x0 syntax: M68K-Syntax. (line 8)
-* M68HC11 addressing modes: M68HC11-Syntax. (line 17)
-* M68HC11 and M68HC12 support: M68HC11-Dependent. (line 6)
-* M68HC11 assembler directive .far: M68HC11-Directives. (line 20)
-* M68HC11 assembler directive .interrupt: M68HC11-Directives. (line 26)
-* M68HC11 assembler directive .mode: M68HC11-Directives. (line 16)
-* M68HC11 assembler directive .relax: M68HC11-Directives. (line 10)
-* M68HC11 assembler directive .xrefb: M68HC11-Directives. (line 31)
-* M68HC11 assembler directives: M68HC11-Directives. (line 6)
-* M68HC11 branch improvement: M68HC11-Branch. (line 6)
-* M68HC11 floating point: M68HC11-Float. (line 6)
-* M68HC11 modifiers: M68HC11-Modifiers. (line 6)
-* M68HC11 opcodes: M68HC11-opcodes. (line 6)
-* M68HC11 options: M68HC11-Opts. (line 6)
-* M68HC11 pseudo-opcodes: M68HC11-Branch. (line 6)
-* M68HC11 syntax: M68HC11-Syntax. (line 6)
-* M68HC12 assembler directives: M68HC11-Directives. (line 6)
-* machine dependencies: Machine Dependencies.
- (line 6)
-* machine directives, ARC: ARC Directives. (line 6)
-* machine directives, ARM: ARM Directives. (line 6)
-* machine directives, H8/300 (none): H8/300 Directives. (line 6)
-* machine directives, i860: Directives-i860. (line 6)
-* machine directives, i960: Directives-i960. (line 6)
-* machine directives, MSP 430: MSP430 Directives. (line 6)
-* machine directives, SH: SH Directives. (line 6)
-* machine directives, SH64: SH64 Directives. (line 9)
-* machine directives, SPARC: Sparc-Directives. (line 6)
-* machine directives, TIC54X: TIC54X-Directives. (line 6)
-* machine directives, V850: V850 Directives. (line 6)
-* machine directives, VAX: VAX-directives. (line 6)
-* machine independent directives: Pseudo Ops. (line 6)
-* machine instructions (not covered): Manual. (line 14)
-* machine-independent syntax: Syntax. (line 6)
-* macro directive: Macro. (line 28)
-* macro directive, TIC54X: TIC54X-Directives. (line 153)
-* macros: Macro. (line 6)
-* macros, count executed: Macro. (line 101)
-* Macros, MSP 430: MSP430-Macros. (line 6)
-* macros, TIC54X: TIC54X-Macros. (line 6)
-* make rules: MD. (line 6)
-* manual, structure and purpose: Manual. (line 6)
-* math builtins, TIC54X: TIC54X-Builtins. (line 6)
-* Maximum number of continuation lines: listing. (line 33)
-* memory references, i386: i386-Memory. (line 6)
-* memory references, x86-64: i386-Memory. (line 6)
-* memory-mapped registers, TIC54X: TIC54X-MMRegs. (line 6)
-* merging text and data sections: R. (line 6)
-* messages from assembler: Errors. (line 6)
-* minus, permitted arguments: Infix Ops. (line 49)
-* MIPS architecture options: MIPS Opts. (line 20)
-* MIPS big-endian output: MIPS Opts. (line 13)
-* MIPS debugging directives: MIPS Stabs. (line 6)
-* MIPS DSP instruction generation override: MIPS ASE instruction generation overrides.
- (line 16)
-* MIPS ECOFF sections: MIPS Object. (line 6)
-* MIPS endianness: Overview. (line 606)
-* MIPS ISA: Overview. (line 612)
-* MIPS ISA override: MIPS ISA. (line 6)
-* MIPS little-endian output: MIPS Opts. (line 13)
-* MIPS MDMX instruction generation override: MIPS ASE instruction generation overrides.
- (line 11)
-* MIPS MIPS-3D instruction generation override: MIPS ASE instruction generation overrides.
- (line 6)
-* MIPS MT instruction generation override: MIPS ASE instruction generation overrides.
- (line 21)
-* MIPS option stack: MIPS option stack. (line 6)
-* MIPS processor: MIPS-Dependent. (line 6)
-* MIT: M68K-Syntax. (line 6)
-* mlib directive, TIC54X: TIC54X-Directives. (line 159)
-* mlist directive, TIC54X: TIC54X-Directives. (line 164)
-* MMIX assembler directive BSPEC: MMIX-Pseudos. (line 131)
-* MMIX assembler directive BYTE: MMIX-Pseudos. (line 97)
-* MMIX assembler directive ESPEC: MMIX-Pseudos. (line 131)
-* MMIX assembler directive GREG: MMIX-Pseudos. (line 50)
-* MMIX assembler directive IS: MMIX-Pseudos. (line 42)
-* MMIX assembler directive LOC: MMIX-Pseudos. (line 7)
-* MMIX assembler directive LOCAL: MMIX-Pseudos. (line 28)
-* MMIX assembler directive OCTA: MMIX-Pseudos. (line 108)
-* MMIX assembler directive PREFIX: MMIX-Pseudos. (line 120)
-* MMIX assembler directive TETRA: MMIX-Pseudos. (line 108)
-* MMIX assembler directive WYDE: MMIX-Pseudos. (line 108)
-* MMIX assembler directives: MMIX-Pseudos. (line 6)
-* MMIX line comment characters: MMIX-Chars. (line 6)
-* MMIX options: MMIX-Opts. (line 6)
-* MMIX pseudo-op BSPEC: MMIX-Pseudos. (line 131)
-* MMIX pseudo-op BYTE: MMIX-Pseudos. (line 97)
-* MMIX pseudo-op ESPEC: MMIX-Pseudos. (line 131)
-* MMIX pseudo-op GREG: MMIX-Pseudos. (line 50)
-* MMIX pseudo-op IS: MMIX-Pseudos. (line 42)
-* MMIX pseudo-op LOC: MMIX-Pseudos. (line 7)
-* MMIX pseudo-op LOCAL: MMIX-Pseudos. (line 28)
-* MMIX pseudo-op OCTA: MMIX-Pseudos. (line 108)
-* MMIX pseudo-op PREFIX: MMIX-Pseudos. (line 120)
-* MMIX pseudo-op TETRA: MMIX-Pseudos. (line 108)
-* MMIX pseudo-op WYDE: MMIX-Pseudos. (line 108)
-* MMIX pseudo-ops: MMIX-Pseudos. (line 6)
-* MMIX register names: MMIX-Regs. (line 6)
-* MMIX support: MMIX-Dependent. (line 6)
-* mmixal differences: MMIX-mmixal. (line 6)
-* mmregs directive, TIC54X: TIC54X-Directives. (line 170)
-* mmsg directive, TIC54X: TIC54X-Directives. (line 77)
-* MMX, i386: i386-SIMD. (line 6)
-* MMX, x86-64: i386-SIMD. (line 6)
-* mnemonic suffixes, i386: i386-Syntax. (line 29)
-* mnemonic suffixes, x86-64: i386-Syntax. (line 29)
-* mnemonics for opcodes, VAX: VAX-opcodes. (line 6)
-* mnemonics, D10V: D10V-Opcodes. (line 6)
-* mnemonics, D30V: D30V-Opcodes. (line 6)
-* mnemonics, H8/300: H8/300 Opcodes. (line 6)
-* mnemonics, SH: SH Opcodes. (line 6)
-* mnemonics, SH64: SH64 Opcodes. (line 6)
-* mnemonics, Z8000: Z8000 Opcodes. (line 6)
-* mnolist directive, TIC54X: TIC54X-Directives. (line 164)
-* Motorola syntax for the 680x0: M68K-Moto-Syntax. (line 6)
-* MOVI instructions, relaxation: Xtensa Immediate Relaxation.
- (line 12)
-* MRI compatibility mode: M. (line 6)
-* mri directive: MRI. (line 6)
-* MRI mode, temporarily: MRI. (line 6)
-* MSP 430 floating point (IEEE): MSP430 Floating Point.
- (line 6)
-* MSP 430 identifiers: MSP430-Chars. (line 8)
-* MSP 430 line comment character: MSP430-Chars. (line 6)
-* MSP 430 machine directives: MSP430 Directives. (line 6)
-* MSP 430 macros: MSP430-Macros. (line 6)
-* MSP 430 opcodes: MSP430 Opcodes. (line 6)
-* MSP 430 options (none): MSP430 Options. (line 6)
-* MSP 430 profiling capability: MSP430 Profiling Capability.
- (line 6)
-* MSP 430 register names: MSP430-Regs. (line 6)
-* MSP 430 support: MSP430-Dependent. (line 6)
-* MSP430 Assembler Extensions: MSP430-Ext. (line 6)
-* mul instruction, i386: i386-Notes. (line 6)
-* mul instruction, x86-64: i386-Notes. (line 6)
-* name: Z8000 Directives. (line 18)
-* named section: Section. (line 6)
-* named sections: Ld Sections. (line 8)
-* names, symbol: Symbol Names. (line 6)
-* naming object file: o. (line 6)
-* new page, in listings: Eject. (line 6)
-* newblock directive, TIC54X: TIC54X-Directives. (line 176)
-* newline (\n): Strings. (line 21)
-* newline, required at file end: Statements. (line 13)
-* no-absolute-literals directive: Absolute Literals Directive.
- (line 6)
-* no-longcalls directive: Longcalls Directive. (line 6)
-* no-schedule directive: Schedule Directive. (line 6)
-* no-transform directive: Transform Directive. (line 6)
-* nolist directive: Nolist. (line 6)
-* nolist directive, TIC54X: TIC54X-Directives. (line 131)
-* NOP pseudo op, ARM: ARM Opcodes. (line 9)
-* notes for Alpha: Alpha Notes. (line 6)
-* null-terminated strings: Asciz. (line 6)
-* number constants: Numbers. (line 6)
-* number of macros executed: Macro. (line 101)
-* numbered subsections: Sub-Sections. (line 6)
-* numbers, 16-bit: hword. (line 6)
-* numeric values: Expressions. (line 6)
-* nword directive, SPARC: Sparc-Directives. (line 20)
-* object file: Object. (line 6)
-* object file format: Object Formats. (line 6)
-* object file name: o. (line 6)
-* object file, after errors: Z. (line 6)
-* obsolescent directives: Deprecated. (line 6)
-* octa directive: Octa. (line 6)
-* octal character code (\DDD): Strings. (line 30)
-* octal integers: Integers. (line 9)
-* offset directive, V850: V850 Directives. (line 6)
-* opcode mnemonics, VAX: VAX-opcodes. (line 6)
-* opcode names, Xtensa: Xtensa Opcodes. (line 6)
-* opcode summary, D10V: D10V-Opcodes. (line 6)
-* opcode summary, D30V: D30V-Opcodes. (line 6)
-* opcode summary, H8/300: H8/300 Opcodes. (line 6)
-* opcode summary, SH: SH Opcodes. (line 6)
-* opcode summary, SH64: SH64 Opcodes. (line 6)
-* opcode summary, Z8000: Z8000 Opcodes. (line 6)
-* opcodes for ARC: ARC Opcodes. (line 6)
-* opcodes for ARM: ARM Opcodes. (line 6)
-* opcodes for MSP 430: MSP430 Opcodes. (line 6)
-* opcodes for V850: V850 Opcodes. (line 6)
-* opcodes, i860: Opcodes for i860. (line 6)
-* opcodes, i960: Opcodes for i960. (line 6)
-* opcodes, M680x0: M68K-opcodes. (line 6)
-* opcodes, M68HC11: M68HC11-opcodes. (line 6)
-* operand delimiters, i386: i386-Syntax. (line 15)
-* operand delimiters, x86-64: i386-Syntax. (line 15)
-* operand notation, VAX: VAX-operands. (line 6)
-* operands in expressions: Arguments. (line 6)
-* operator precedence: Infix Ops. (line 11)
-* operators, in expressions: Operators. (line 6)
-* operators, permitted arguments: Infix Ops. (line 6)
-* optimization, D10V: Overview. (line 391)
-* optimization, D30V: Overview. (line 396)
-* optimizations: Xtensa Optimizations.
- (line 6)
-* option directive, ARC: ARC Directives. (line 162)
-* option directive, TIC54X: TIC54X-Directives. (line 180)
-* option summary: Overview. (line 6)
-* options for Alpha: Alpha Options. (line 6)
-* options for ARC (none): ARC Options. (line 6)
-* options for ARM (none): ARM Options. (line 6)
-* options for i386: i386-Options. (line 6)
-* options for IA-64: IA-64 Options. (line 6)
-* options for MSP430 (none): MSP430 Options. (line 6)
-* options for PDP-11: PDP-11-Options. (line 6)
-* options for PowerPC: PowerPC-Opts. (line 6)
-* options for SPARC: Sparc-Opts. (line 6)
-* options for V850 (none): V850 Options. (line 6)
-* options for VAX/VMS: VAX-Opts. (line 42)
-* options for x86-64: i386-Options. (line 6)
-* options for Z80: Z80 Options. (line 6)
-* options, all versions of assembler: Invoking. (line 6)
-* options, command line: Command Line. (line 13)
-* options, CRIS: CRIS-Opts. (line 6)
-* options, D10V: D10V-Opts. (line 6)
-* options, D30V: D30V-Opts. (line 6)
-* options, H8/300 (none): H8/300 Options. (line 6)
-* options, i960: Options-i960. (line 6)
-* options, IP2K: IP2K-Opts. (line 6)
-* options, M32C: M32C-Opts. (line 6)
-* options, M32R: M32R-Opts. (line 6)
-* options, M680x0: M68K-Opts. (line 6)
-* options, M68HC11: M68HC11-Opts. (line 6)
-* options, MMIX: MMIX-Opts. (line 6)
-* options, PJ: PJ Options. (line 6)
-* options, SH: SH Options. (line 6)
-* options, SH64: SH64 Options. (line 6)
-* options, TIC54X: TIC54X-Opts. (line 6)
-* options, Z8000: Z8000 Options. (line 6)
-* org directive: Org. (line 6)
-* other attribute, of a.out symbol: Symbol Other. (line 6)
-* output file: Object. (line 6)
-* p2align directive: P2align. (line 6)
-* p2alignl directive: P2align. (line 28)
-* p2alignw directive: P2align. (line 28)
-* padding the location counter: Align. (line 6)
-* padding the location counter given a power of two: P2align. (line 6)
-* padding the location counter given number of bytes: Balign. (line 6)
-* page, in listings: Eject. (line 6)
-* paper size, for listings: Psize. (line 6)
-* paths for .include: I. (line 6)
-* patterns, writing in memory: Fill. (line 6)
-* PDP-11 comments: PDP-11-Syntax. (line 16)
-* PDP-11 floating-point register syntax: PDP-11-Syntax. (line 13)
-* PDP-11 general-purpose register syntax: PDP-11-Syntax. (line 10)
-* PDP-11 instruction naming: PDP-11-Mnemonics. (line 6)
-* PDP-11 support: PDP-11-Dependent. (line 6)
-* PDP-11 syntax: PDP-11-Syntax. (line 6)
-* PIC code generation for ARM: ARM Options. (line 120)
-* PIC code generation for M32R: M32R-Opts. (line 42)
-* PJ endianness: Overview. (line 513)
-* PJ options: PJ Options. (line 6)
-* PJ support: PJ-Dependent. (line 6)
-* plus, permitted arguments: Infix Ops. (line 44)
-* popsection directive: PopSection. (line 6)
-* Position-independent code, CRIS: CRIS-Opts. (line 27)
-* Position-independent code, symbols in, CRIS: CRIS-Pic. (line 6)
-* PowerPC architectures: PowerPC-Opts. (line 6)
-* PowerPC directives: PowerPC-Pseudo. (line 6)
-* PowerPC options: PowerPC-Opts. (line 6)
-* PowerPC support: PPC-Dependent. (line 6)
-* precedence of operators: Infix Ops. (line 11)
-* precision, floating point: Flonums. (line 6)
-* prefix operators: Prefix Ops. (line 6)
-* prefixes, i386: i386-Prefixes. (line 6)
-* preprocessing: Preprocessing. (line 6)
-* preprocessing, turning on and off: Preprocessing. (line 27)
-* previous directive: Previous. (line 6)
-* primary attributes, COFF symbols: COFF Symbols. (line 13)
-* print directive: Print. (line 6)
-* proc directive, SPARC: Sparc-Directives. (line 25)
-* profiler directive, MSP 430: MSP430 Directives. (line 22)
-* profiling capability for MSP 430: MSP430 Profiling Capability.
- (line 6)
-* protected directive: Protected. (line 6)
-* pseudo-op .arch, CRIS: CRIS-Pseudos. (line 45)
-* pseudo-op .dword, CRIS: CRIS-Pseudos. (line 12)
-* pseudo-op .syntax, CRIS: CRIS-Pseudos. (line 17)
-* pseudo-op BSPEC, MMIX: MMIX-Pseudos. (line 131)
-* pseudo-op BYTE, MMIX: MMIX-Pseudos. (line 97)
-* pseudo-op ESPEC, MMIX: MMIX-Pseudos. (line 131)
-* pseudo-op GREG, MMIX: MMIX-Pseudos. (line 50)
-* pseudo-op IS, MMIX: MMIX-Pseudos. (line 42)
-* pseudo-op LOC, MMIX: MMIX-Pseudos. (line 7)
-* pseudo-op LOCAL, MMIX: MMIX-Pseudos. (line 28)
-* pseudo-op OCTA, MMIX: MMIX-Pseudos. (line 108)
-* pseudo-op PREFIX, MMIX: MMIX-Pseudos. (line 120)
-* pseudo-op TETRA, MMIX: MMIX-Pseudos. (line 108)
-* pseudo-op WYDE, MMIX: MMIX-Pseudos. (line 108)
-* pseudo-opcodes, M680x0: M68K-Branch. (line 6)
-* pseudo-opcodes, M68HC11: M68HC11-Branch. (line 6)
-* pseudo-ops for branch, VAX: VAX-branch. (line 6)
-* pseudo-ops, CRIS: CRIS-Pseudos. (line 6)
-* pseudo-ops, machine independent: Pseudo Ops. (line 6)
-* pseudo-ops, MMIX: MMIX-Pseudos. (line 6)
-* psize directive: Psize. (line 6)
-* PSR bits: IA-64-Bits. (line 6)
-* pstring directive, TIC54X: TIC54X-Directives. (line 209)
-* psw register, V850: V850-Regs. (line 116)
-* purgem directive: Purgem. (line 6)
-* purpose of GNU assembler: GNU Assembler. (line 12)
-* pushsection directive: PushSection. (line 6)
-* quad directive: Quad. (line 6)
-* quad directive, i386: i386-Float. (line 21)
-* quad directive, x86-64: i386-Float. (line 21)
-* real-mode code, i386: i386-16bit. (line 6)
-* ref directive, TIC54X: TIC54X-Directives. (line 103)
-* register directive, SPARC: Sparc-Directives. (line 29)
-* register names, Alpha: Alpha-Regs. (line 6)
-* register names, ARC: ARC-Regs. (line 6)
-* register names, ARM: ARM-Regs. (line 6)
-* register names, CRIS: CRIS-Regs. (line 6)
-* register names, H8/300: H8/300-Regs. (line 6)
-* register names, IA-64: IA-64-Regs. (line 6)
-* register names, MMIX: MMIX-Regs. (line 6)
-* register names, MSP 430: MSP430-Regs. (line 6)
-* register names, V850: V850-Regs. (line 6)
-* register names, VAX: VAX-operands. (line 17)
-* register names, Xtensa: Xtensa Registers. (line 6)
-* register names, Z80: Z80-Regs. (line 6)
-* register operands, i386: i386-Syntax. (line 15)
-* register operands, x86-64: i386-Syntax. (line 15)
-* registers, D10V: D10V-Regs. (line 6)
-* registers, D30V: D30V-Regs. (line 6)
-* registers, i386: i386-Regs. (line 6)
-* registers, SH: SH-Regs. (line 6)
-* registers, SH64: SH64-Regs. (line 6)
-* registers, TIC54X memory-mapped: TIC54X-MMRegs. (line 6)
-* registers, x86-64: i386-Regs. (line 6)
-* registers, Z8000: Z8000-Regs. (line 6)
-* relaxation: Xtensa Relaxation. (line 6)
-* relaxation of ADDI instructions: Xtensa Immediate Relaxation.
- (line 43)
-* relaxation of branch instructions: Xtensa Branch Relaxation.
- (line 6)
-* relaxation of call instructions: Xtensa Call Relaxation.
- (line 6)
-* relaxation of immediate fields: Xtensa Immediate Relaxation.
- (line 6)
-* relaxation of L16SI instructions: Xtensa Immediate Relaxation.
- (line 23)
-* relaxation of L16UI instructions: Xtensa Immediate Relaxation.
- (line 23)
-* relaxation of L32I instructions: Xtensa Immediate Relaxation.
- (line 23)
-* relaxation of L8UI instructions: Xtensa Immediate Relaxation.
- (line 23)
-* relaxation of MOVI instructions: Xtensa Immediate Relaxation.
- (line 12)
-* relocation: Sections. (line 6)
-* relocation example: Ld Sections. (line 40)
-* relocations, Alpha: Alpha-Relocs. (line 6)
-* repeat prefixes, i386: i386-Prefixes. (line 44)
-* reporting bugs in assembler: Reporting Bugs. (line 6)
-* rept directive: Rept. (line 6)
-* req directive, ARM: ARM Directives. (line 13)
-* reserve directive, SPARC: Sparc-Directives. (line 39)
-* return instructions, i386: i386-Syntax. (line 38)
-* return instructions, x86-64: i386-Syntax. (line 38)
-* REX prefixes, i386: i386-Prefixes. (line 46)
-* rsect: Z8000 Directives. (line 52)
-* sblock directive, TIC54X: TIC54X-Directives. (line 183)
-* sbttl directive: Sbttl. (line 6)
-* schedule directive: Schedule Directive. (line 6)
-* scl directive: Scl. (line 6)
-* sdaoff pseudo-op, V850: V850 Opcodes. (line 65)
-* search path for .include: I. (line 6)
-* sect directive, MSP 430: MSP430 Directives. (line 18)
-* sect directive, TIC54X: TIC54X-Directives. (line 189)
-* section directive (COFF version): Section. (line 16)
-* section directive (ELF version): Section. (line 67)
-* section directive, V850: V850 Directives. (line 9)
-* section override prefixes, i386: i386-Prefixes. (line 23)
-* Section Stack <1>: SubSection. (line 6)
-* Section Stack <2>: Section. (line 62)
-* Section Stack <3>: PushSection. (line 6)
-* Section Stack <4>: PopSection. (line 6)
-* Section Stack: Previous. (line 6)
-* section-relative addressing: Secs Background. (line 68)
-* sections: Sections. (line 6)
-* sections in messages, internal: As Sections. (line 6)
-* sections, i386: i386-Syntax. (line 44)
-* sections, named: Ld Sections. (line 8)
-* sections, x86-64: i386-Syntax. (line 44)
-* seg directive, SPARC: Sparc-Directives. (line 44)
-* segm: Z8000 Directives. (line 10)
-* set directive: Set. (line 6)
-* set directive, TIC54X: TIC54X-Directives. (line 192)
-* SH addressing modes: SH-Addressing. (line 6)
-* SH floating point (IEEE): SH Floating Point. (line 6)
-* SH line comment character: SH-Chars. (line 6)
-* SH line separator: SH-Chars. (line 8)
-* SH machine directives: SH Directives. (line 6)
-* SH opcode summary: SH Opcodes. (line 6)
-* SH options: SH Options. (line 6)
-* SH registers: SH-Regs. (line 6)
-* SH support: SH-Dependent. (line 6)
-* SH64 ABI options: SH64 Options. (line 29)
-* SH64 addressing modes: SH64-Addressing. (line 6)
-* SH64 ISA options: SH64 Options. (line 6)
-* SH64 line comment character: SH64-Chars. (line 6)
-* SH64 line separator: SH64-Chars. (line 8)
-* SH64 machine directives: SH64 Directives. (line 9)
-* SH64 opcode summary: SH64 Opcodes. (line 6)
-* SH64 options: SH64 Options. (line 6)
-* SH64 registers: SH64-Regs. (line 6)
-* SH64 support: SH64-Dependent. (line 6)
-* shigh directive, M32R: M32R-Directives. (line 26)
-* short directive: Short. (line 6)
-* short directive, ARC: ARC Directives. (line 171)
-* short directive, TIC54X: TIC54X-Directives. (line 111)
-* SIMD, i386: i386-SIMD. (line 6)
-* SIMD, x86-64: i386-SIMD. (line 6)
-* single character constant: Chars. (line 6)
-* single directive: Single. (line 6)
-* single directive, i386: i386-Float. (line 14)
-* single directive, x86-64: i386-Float. (line 14)
-* single quote, Z80: Z80-Chars. (line 13)
-* sixteen bit integers: hword. (line 6)
-* sixteen byte integer: Octa. (line 6)
-* size directive (COFF version): Size. (line 11)
-* size directive (ELF version): Size. (line 19)
-* size modifiers, D10V: D10V-Size. (line 6)
-* size modifiers, D30V: D30V-Size. (line 6)
-* size modifiers, M680x0: M68K-Syntax. (line 8)
-* size prefixes, i386: i386-Prefixes. (line 27)
-* size suffixes, H8/300: H8/300 Opcodes. (line 163)
-* sizes operands, i386: i386-Syntax. (line 29)
-* sizes operands, x86-64: i386-Syntax. (line 29)
-* skip directive: Skip. (line 6)
-* skip directive, M680x0: M68K-Directives. (line 19)
-* skip directive, SPARC: Sparc-Directives. (line 48)
-* sleb128 directive: Sleb128. (line 6)
-* small objects, MIPS ECOFF: MIPS Object. (line 11)
-* SOM symbol attributes: SOM Symbols. (line 6)
-* source program: Input Files. (line 6)
-* source, destination operands; i386: i386-Syntax. (line 22)
-* source, destination operands; x86-64: i386-Syntax. (line 22)
-* sp register: Xtensa Registers. (line 6)
-* sp register, V850: V850-Regs. (line 14)
-* space directive: Space. (line 6)
-* space directive, TIC54X: TIC54X-Directives. (line 197)
-* space used, maximum for assembly: statistics. (line 6)
-* SPARC architectures: Sparc-Opts. (line 6)
-* SPARC data alignment: Sparc-Aligned-Data. (line 6)
-* SPARC floating point (IEEE): Sparc-Float. (line 6)
-* SPARC machine directives: Sparc-Directives. (line 6)
-* SPARC options: Sparc-Opts. (line 6)
-* SPARC support: Sparc-Dependent. (line 6)
-* special characters, ARC: ARC-Chars. (line 6)
-* special characters, M680x0: M68K-Chars. (line 6)
-* special purpose registers, MSP 430: MSP430-Regs. (line 11)
-* sslist directive, TIC54X: TIC54X-Directives. (line 204)
-* ssnolist directive, TIC54X: TIC54X-Directives. (line 204)
-* stabd directive: Stab. (line 38)
-* stabn directive: Stab. (line 48)
-* stabs directive: Stab. (line 51)
-* stabX directives: Stab. (line 6)
-* standard assembler sections: Secs Background. (line 27)
-* standard input, as input file: Command Line. (line 10)
-* statement separator character: Statements. (line 6)
-* statement separator, Alpha: Alpha-Chars. (line 8)
-* statement separator, ARM: ARM-Chars. (line 10)
-* statement separator, H8/300: H8/300-Chars. (line 8)
-* statement separator, IA-64: IA-64-Chars. (line 8)
-* statement separator, SH: SH-Chars. (line 8)
-* statement separator, SH64: SH64-Chars. (line 8)
-* statement separator, Z8000: Z8000-Chars. (line 8)
-* statements, structure of: Statements. (line 6)
-* statistics, about assembly: statistics. (line 6)
-* stopping the assembly: Abort. (line 6)
-* string constants: Strings. (line 6)
-* string directive: String. (line 6)
-* string directive on HPPA: HPPA Directives. (line 137)
-* string directive, TIC54X: TIC54X-Directives. (line 209)
-* string literals: Ascii. (line 6)
-* string, copying to object file: String. (line 6)
-* struct directive: Struct. (line 6)
-* struct directive, TIC54X: TIC54X-Directives. (line 217)
-* structure debugging, COFF: Tag. (line 6)
-* sub-instruction ordering, D10V: D10V-Chars. (line 6)
-* sub-instruction ordering, D30V: D30V-Chars. (line 6)
-* sub-instructions, D10V: D10V-Subs. (line 6)
-* sub-instructions, D30V: D30V-Subs. (line 6)
-* subexpressions: Arguments. (line 24)
-* subsection directive: SubSection. (line 6)
-* subsym builtins, TIC54X: TIC54X-Macros. (line 16)
-* subtitles for listings: Sbttl. (line 6)
-* subtraction, permitted arguments: Infix Ops. (line 49)
-* summary of options: Overview. (line 6)
-* support: HPPA-Dependent. (line 6)
-* supporting files, including: Include. (line 6)
-* suppressing warnings: W. (line 11)
-* sval: Z8000 Directives. (line 33)
-* symbol attributes: Symbol Attributes. (line 6)
-* symbol attributes, a.out: a.out Symbols. (line 6)
-* symbol attributes, COFF: COFF Symbols. (line 6)
-* symbol attributes, SOM: SOM Symbols. (line 6)
-* symbol descriptor, COFF: Desc. (line 6)
-* symbol modifiers <1>: M68HC11-Modifiers. (line 12)
-* symbol modifiers: M32C-Modifiers. (line 11)
-* symbol names: Symbol Names. (line 6)
-* symbol names, $ in <1>: SH64-Chars. (line 10)
-* symbol names, $ in <2>: SH-Chars. (line 10)
-* symbol names, $ in <3>: D30V-Chars. (line 63)
-* symbol names, $ in: D10V-Chars. (line 46)
-* symbol names, local: Symbol Names. (line 22)
-* symbol names, temporary: Symbol Names. (line 22)
-* symbol storage class (COFF): Scl. (line 6)
-* symbol type: Symbol Type. (line 6)
-* symbol type, COFF: Type. (line 11)
-* symbol type, ELF: Type. (line 22)
-* symbol value: Symbol Value. (line 6)
-* symbol value, setting: Set. (line 6)
-* symbol values, assigning: Setting Symbols. (line 6)
-* symbol versioning: Symver. (line 6)
-* symbol, common: Comm. (line 6)
-* symbol, making visible to linker: Global. (line 6)
-* symbolic debuggers, information for: Stab. (line 6)
-* symbols: Symbols. (line 6)
-* Symbols in position-independent code, CRIS: CRIS-Pic. (line 6)
-* symbols with uppercase, VAX/VMS: VAX-Opts. (line 42)
-* symbols, assigning values to: Equ. (line 6)
-* Symbols, built-in, CRIS: CRIS-Symbols. (line 6)
-* Symbols, CRIS, built-in: CRIS-Symbols. (line 6)
-* symbols, local common: Lcomm. (line 6)
-* symver directive: Symver. (line 6)
-* syntax compatibility, i386: i386-Syntax. (line 6)
-* syntax compatibility, x86-64: i386-Syntax. (line 6)
-* syntax, BFIN: BFIN Syntax. (line 6)
-* syntax, D10V: D10V-Syntax. (line 6)
-* syntax, D30V: D30V-Syntax. (line 6)
-* syntax, M32C: M32C-Modifiers. (line 6)
-* syntax, M680x0: M68K-Syntax. (line 8)
-* syntax, M68HC11 <1>: M68HC11-Modifiers. (line 6)
-* syntax, M68HC11: M68HC11-Syntax. (line 6)
-* syntax, machine-independent: Syntax. (line 6)
-* syntax, Xtensa assembler: Xtensa Syntax. (line 6)
-* sysproc directive, i960: Directives-i960. (line 37)
-* tab (\t): Strings. (line 27)
-* tab directive, TIC54X: TIC54X-Directives. (line 248)
-* tag directive: Tag. (line 6)
-* tag directive, TIC54X: TIC54X-Directives. (line 217)
-* tdaoff pseudo-op, V850: V850 Opcodes. (line 81)
-* temporary symbol names: Symbol Names. (line 22)
-* text and data sections, joining: R. (line 6)
-* text directive: Text. (line 6)
-* text section: Ld Sections. (line 9)
-* tfloat directive, i386: i386-Float. (line 14)
-* tfloat directive, x86-64: i386-Float. (line 14)
-* thumb directive, ARM: ARM Directives. (line 33)
-* Thumb support: ARM-Dependent. (line 6)
-* thumb_func directive, ARM: ARM Directives. (line 43)
-* thumb_set directive, ARM: ARM Directives. (line 51)
-* TIC54X builtin math functions: TIC54X-Builtins. (line 6)
-* TIC54X machine directives: TIC54X-Directives. (line 6)
-* TIC54X memory-mapped registers: TIC54X-MMRegs. (line 6)
-* TIC54X options: TIC54X-Opts. (line 6)
-* TIC54X subsym builtins: TIC54X-Macros. (line 16)
-* TIC54X support: TIC54X-Dependent. (line 6)
-* TIC54X-specific macros: TIC54X-Macros. (line 6)
-* time, total for assembly: statistics. (line 6)
-* title directive: Title. (line 6)
-* tp register, V850: V850-Regs. (line 20)
-* transform directive: Transform Directive. (line 6)
-* trusted compiler: f. (line 6)
-* turning preprocessing on and off: Preprocessing. (line 27)
-* type directive (COFF version): Type. (line 11)
-* type directive (ELF version): Type. (line 22)
-* type of a symbol: Symbol Type. (line 6)
-* ualong directive, SH: SH Directives. (line 6)
-* uaword directive, SH: SH Directives. (line 6)
-* ubyte directive, TIC54X: TIC54X-Directives. (line 36)
-* uchar directive, TIC54X: TIC54X-Directives. (line 36)
-* uhalf directive, TIC54X: TIC54X-Directives. (line 111)
-* uint directive, TIC54X: TIC54X-Directives. (line 111)
-* uleb128 directive: Uleb128. (line 6)
-* ulong directive, TIC54X: TIC54X-Directives. (line 135)
-* undefined section: Ld Sections. (line 36)
-* union directive, TIC54X: TIC54X-Directives. (line 251)
-* unreq directive, ARM: ARM Directives. (line 18)
-* unsegm: Z8000 Directives. (line 14)
-* usect directive, TIC54X: TIC54X-Directives. (line 263)
-* ushort directive, TIC54X: TIC54X-Directives. (line 111)
-* uword directive, TIC54X: TIC54X-Directives. (line 111)
-* V850 command line options: V850 Options. (line 9)
-* V850 floating point (IEEE): V850 Floating Point. (line 6)
-* V850 line comment character: V850-Chars. (line 6)
-* V850 machine directives: V850 Directives. (line 6)
-* V850 opcodes: V850 Opcodes. (line 6)
-* V850 options (none): V850 Options. (line 6)
-* V850 register names: V850-Regs. (line 6)
-* V850 support: V850-Dependent. (line 6)
-* val directive: Val. (line 6)
-* value attribute, COFF: Val. (line 6)
-* value of a symbol: Symbol Value. (line 6)
-* var directive, TIC54X: TIC54X-Directives. (line 273)
-* VAX bitfields not supported: VAX-no. (line 6)
-* VAX branch improvement: VAX-branch. (line 6)
-* VAX command-line options ignored: VAX-Opts. (line 6)
-* VAX displacement sizing character: VAX-operands. (line 12)
-* VAX floating point: VAX-float. (line 6)
-* VAX immediate character: VAX-operands. (line 6)
-* VAX indirect character: VAX-operands. (line 9)
-* VAX machine directives: VAX-directives. (line 6)
-* VAX opcode mnemonics: VAX-opcodes. (line 6)
-* VAX operand notation: VAX-operands. (line 6)
-* VAX register names: VAX-operands. (line 17)
-* VAX support: Vax-Dependent. (line 6)
-* Vax-11 C compatibility: VAX-Opts. (line 42)
-* VAX/VMS options: VAX-Opts. (line 42)
-* version directive: Version. (line 6)
-* version directive, TIC54X: TIC54X-Directives. (line 277)
-* version of assembler: v. (line 6)
-* versions of symbols: Symver. (line 6)
-* visibility <1>: Protected. (line 6)
-* visibility <2>: Internal. (line 6)
-* visibility: Hidden. (line 6)
-* VMS (VAX) options: VAX-Opts. (line 42)
-* vtable_entry directive: VTableEntry. (line 6)
-* vtable_inherit directive: VTableInherit. (line 6)
-* warning directive: Warning. (line 6)
-* warning for altered difference tables: K. (line 6)
-* warning messages: Errors. (line 6)
-* warnings, causing error: W. (line 16)
-* warnings, M32R: M32R-Warnings. (line 6)
-* warnings, suppressing: W. (line 11)
-* warnings, switching on: W. (line 19)
-* weak directive: Weak. (line 6)
-* weakref directive: Weakref. (line 6)
-* whitespace: Whitespace. (line 6)
-* whitespace, removed by preprocessor: Preprocessing. (line 7)
-* wide floating point directives, VAX: VAX-directives. (line 10)
-* width directive, TIC54X: TIC54X-Directives. (line 127)
-* Width of continuation lines of disassembly output: listing. (line 20)
-* Width of first line disassembly output: listing. (line 15)
-* Width of source line output: listing. (line 27)
-* wmsg directive, TIC54X: TIC54X-Directives. (line 77)
-* word directive: Word. (line 6)
-* word directive, ARC: ARC Directives. (line 174)
-* word directive, H8/300: H8/300 Directives. (line 6)
-* word directive, i386: i386-Float. (line 21)
-* word directive, SPARC: Sparc-Directives. (line 51)
-* word directive, TIC54X: TIC54X-Directives. (line 111)
-* word directive, x86-64: i386-Float. (line 21)
-* writing patterns in memory: Fill. (line 6)
-* wval: Z8000 Directives. (line 24)
-* x86-64 arch directive: i386-Arch. (line 6)
-* x86-64 att_syntax pseudo op: i386-Syntax. (line 6)
-* x86-64 conversion instructions: i386-Mnemonics. (line 32)
-* x86-64 floating point: i386-Float. (line 6)
-* x86-64 immediate operands: i386-Syntax. (line 15)
-* x86-64 instruction naming: i386-Mnemonics. (line 6)
-* x86-64 intel_syntax pseudo op: i386-Syntax. (line 6)
-* x86-64 jump optimization: i386-Jumps. (line 6)
-* x86-64 jump, call, return: i386-Syntax. (line 38)
-* x86-64 jump/call operands: i386-Syntax. (line 15)
-* x86-64 memory references: i386-Memory. (line 6)
-* x86-64 options: i386-Options. (line 6)
-* x86-64 register operands: i386-Syntax. (line 15)
-* x86-64 registers: i386-Regs. (line 6)
-* x86-64 sections: i386-Syntax. (line 44)
-* x86-64 size suffixes: i386-Syntax. (line 29)
-* x86-64 source, destination operands: i386-Syntax. (line 22)
-* x86-64 support: i386-Dependent. (line 6)
-* x86-64 syntax compatibility: i386-Syntax. (line 6)
-* xfloat directive, TIC54X: TIC54X-Directives. (line 64)
-* xlong directive, TIC54X: TIC54X-Directives. (line 135)
-* Xtensa architecture: Xtensa-Dependent. (line 6)
-* Xtensa assembler syntax: Xtensa Syntax. (line 6)
-* Xtensa directives: Xtensa Directives. (line 6)
-* Xtensa opcode names: Xtensa Opcodes. (line 6)
-* Xtensa register names: Xtensa Registers. (line 6)
-* xword directive, SPARC: Sparc-Directives. (line 55)
-* Z80 $: Z80-Chars. (line 8)
-* Z80 ': Z80-Chars. (line 13)
-* Z80 floating point: Z80 Floating Point. (line 6)
-* Z80 line comment character: Z80-Chars. (line 6)
-* Z80 options: Z80 Options. (line 6)
-* Z80 registers: Z80-Regs. (line 6)
-* Z80 support: Z80-Dependent. (line 6)
-* Z80 Syntax: Z80 Options. (line 47)
-* Z80, \: Z80-Chars. (line 11)
-* Z80, case sensitivity: Z80-Case. (line 6)
-* Z80-only directives: Z80 Directives. (line 9)
-* Z800 addressing modes: Z8000-Addressing. (line 6)
-* Z8000 directives: Z8000 Directives. (line 6)
-* Z8000 line comment character: Z8000-Chars. (line 6)
-* Z8000 line separator: Z8000-Chars. (line 8)
-* Z8000 opcode summary: Z8000 Opcodes. (line 6)
-* Z8000 options: Z8000 Options. (line 6)
-* Z8000 registers: Z8000-Regs. (line 6)
-* Z8000 support: Z8000-Dependent. (line 6)
-* zdaoff pseudo-op, V850: V850 Opcodes. (line 99)
-* zero register, V850: V850-Regs. (line 7)
-* zero-terminated strings: Asciz. (line 6)
-
-
-
-Tag Table:
-Node: Top778
-Node: Overview1695
-Node: Manual28187
-Node: GNU Assembler29131
-Node: Object Formats30302
-Node: Command Line30754
-Node: Input Files31841
-Node: Object33822
-Node: Errors34718
-Node: Invoking35913
-Node: a37862
-Node: alternate39634
-Node: D39806
-Node: f40039
-Node: I40547
-Node: K41091
-Node: L41394
-Node: listing42231
-Node: M43823
-Node: MD48224
-Node: o48650
-Node: R49105
-Node: statistics50135
-Node: traditional-format50542
-Node: v51015
-Node: W51290
-Node: Z52197
-Node: Syntax52719
-Node: Preprocessing53310
-Node: Whitespace54873
-Node: Comments55269
-Node: Symbol Intro57422
-Node: Statements58112
-Node: Constants60028
-Node: Characters60659
-Node: Strings61161
-Node: Chars63327
-Node: Numbers64081
-Node: Integers64621
-Node: Bignums65277
-Node: Flonums65633
-Node: Sections67380
-Node: Secs Background67758
-Node: Ld Sections72797
-Node: As Sections75181
-Node: Sub-Sections76091
-Node: bss79238
-Node: Symbols80188
-Node: Labels80836
-Node: Setting Symbols81567
-Node: Symbol Names82063
-Node: Dot86428
-Node: Symbol Attributes86875
-Node: Symbol Value87612
-Node: Symbol Type88657
-Node: a.out Symbols89045
-Node: Symbol Desc89307
-Node: Symbol Other89602
-Node: COFF Symbols89771
-Node: SOM Symbols90444
-Node: Expressions90886
-Node: Empty Exprs91635
-Node: Integer Exprs91982
-Node: Arguments92377
-Node: Operators93483
-Node: Prefix Ops93818
-Node: Infix Ops94146
-Node: Pseudo Ops96536
-Node: Abort101731
-Node: ABORT102136
-Node: Align102323
-Node: Ascii104605
-Node: Asciz104914
-Node: Balign105159
-Node: Byte107022
-Node: Comm107260
-Node: CFI directives108634
-Node: LNS directives110986
-Node: Data113063
-Node: Def113390
-Node: Desc113622
-Node: Dim114122
-Node: Double114379
-Node: Eject114717
-Node: Else114892
-Node: Elseif115188
-Node: End115478
-Node: Endef115693
-Node: Endfunc115870
-Node: Endif116045
-Node: Equ116306
-Node: Equiv116815
-Node: Eqv117371
-Node: Err117735
-Node: Error118046
-Node: Exitm118491
-Node: Extern118660
-Node: Fail118921
-Node: File119366
-Node: Fill119843
-Node: Float120807
-Node: Func121149
-Node: Global121739
-Node: Hidden122489
-Node: hword123068
-Node: Ident123396
-Node: If123970
-Node: Incbin127029
-Node: Include127724
-Node: Int128275
-Node: Internal128656
-Node: Irp129304
-Node: Irpc130201
-Node: Lcomm131118
-Node: Lflags131866
-Node: Line132060
-Node: Linkonce132979
-Node: Ln134208
-Node: MRI134369
-Node: List134707
-Node: Long135315
-Node: Macro135501
-Node: Altmacro140064
-Node: Noaltmacro141394
-Node: Nolist141562
-Node: Octa141992
-Node: Org142326
-Node: P2align143609
-Node: Previous145537
-Node: PopSection146231
-Node: Print146739
-Node: Protected146968
-Node: Psize147615
-Node: Purgem148299
-Node: PushSection148520
-Node: Quad149077
-Node: Rept149532
-Node: Sbttl149945
-Node: Scl150310
-Node: Section150651
-Node: Set155791
-Node: Short156428
-Node: Single156748
-Node: Size157093
-Node: Sleb128157765
-Node: Skip158087
-Node: Space158409
-Node: Stab159048
-Node: String161050
-Node: Struct161476
-Node: SubSection162199
-Node: Symver162760
-Node: Tag165151
-Node: Text165531
-Node: Title165850
-Node: Type166229
-Node: Uleb128167306
-Node: Val167630
-Node: Version167880
-Node: VTableEntry168155
-Node: VTableInherit168445
-Node: Warning168891
-Node: Weak169125
-Node: Weakref169794
-Node: Word170759
-Node: Deprecated172605
-Node: Machine Dependencies172840
-Node: Alpha-Dependent175604
-Node: Alpha Notes176018
-Node: Alpha Options176299
-Node: Alpha Syntax178497
-Node: Alpha-Chars178966
-Node: Alpha-Regs179197
-Node: Alpha-Relocs179584
-Node: Alpha Floating Point185842
-Node: Alpha Directives186064
-Node: Alpha Opcodes191587
-Node: ARC-Dependent191882
-Node: ARC Options192265
-Node: ARC Syntax193334
-Node: ARC-Chars193566
-Node: ARC-Regs193698
-Node: ARC Floating Point193822
-Node: ARC Directives194133
-Node: ARC Opcodes200104
-Node: ARM-Dependent200330
-Node: ARM Options200757
-Node: ARM Syntax206551
-Node: ARM-Chars206783
-Node: ARM-Regs207307
-Node: ARM Floating Point207492
-Node: ARM Directives207691
-Node: ARM Opcodes214055
-Node: ARM Mapping Symbols216143
-Node: BFIN-Dependent216922
-Node: BFIN Syntax217176
-Node: BFIN Directives222873
-Node: CRIS-Dependent223280
-Node: CRIS-Opts223626
-Ref: march-option225244
-Node: CRIS-Expand227061
-Node: CRIS-Symbols228244
-Node: CRIS-Syntax229413
-Node: CRIS-Chars229749
-Node: CRIS-Pic230300
-Ref: crispic230496
-Node: CRIS-Regs234036
-Node: CRIS-Pseudos234453
-Ref: crisnous235229
-Node: D10V-Dependent236511
-Node: D10V-Opts236862
-Node: D10V-Syntax237825
-Node: D10V-Size238354
-Node: D10V-Subs239327
-Node: D10V-Chars240362
-Node: D10V-Regs241966
-Node: D10V-Addressing243011
-Node: D10V-Word243697
-Node: D10V-Float244212
-Node: D10V-Opcodes244523
-Node: D30V-Dependent244916
-Node: D30V-Opts245269
-Node: D30V-Syntax245944
-Node: D30V-Size246476
-Node: D30V-Subs247447
-Node: D30V-Chars248482
-Node: D30V-Guarded250780
-Node: D30V-Regs251460
-Node: D30V-Addressing252599
-Node: D30V-Float253267
-Node: D30V-Opcodes253578
-Node: H8/300-Dependent253971
-Node: H8/300 Options254381
-Node: H8/300 Syntax254590
-Node: H8/300-Chars254889
-Node: H8/300-Regs255186
-Node: H8/300-Addressing256103
-Node: H8/300 Floating Point257142
-Node: H8/300 Directives257467
-Node: H8/300 Opcodes258593
-Node: HPPA-Dependent266913
-Node: HPPA Notes267346
-Node: HPPA Options268102
-Node: HPPA Syntax268295
-Node: HPPA Floating Point269563
-Node: HPPA Directives269767
-Node: HPPA Opcodes278451
-Node: ESA/390-Dependent278708
-Node: ESA/390 Notes279168
-Node: ESA/390 Options279959
-Node: ESA/390 Syntax280169
-Node: ESA/390 Floating Point282342
-Node: ESA/390 Directives282621
-Node: ESA/390 Opcodes285910
-Node: i386-Dependent286172
-Node: i386-Options287240
-Node: i386-Syntax288430
-Node: i386-Mnemonics290844
-Node: i386-Regs293309
-Node: i386-Prefixes295354
-Node: i386-Memory298114
-Node: i386-Jumps301051
-Node: i386-Float302172
-Node: i386-SIMD304001
-Node: i386-16bit305110
-Node: i386-Bugs307148
-Node: i386-Arch307902
-Node: i386-Notes310083
-Node: i860-Dependent310941
-Node: Notes-i860311337
-Node: Options-i860312242
-Node: Directives-i860313605
-Node: Opcodes for i860314674
-Node: i960-Dependent316841
-Node: Options-i960317244
-Node: Floating Point-i960321128
-Node: Directives-i960321396
-Node: Opcodes for i960323430
-Node: callj-i960324047
-Node: Compare-and-branch-i960324536
-Node: IA-64-Dependent326440
-Node: IA-64 Options326741
-Node: IA-64 Syntax329901
-Node: IA-64-Chars330264
-Node: IA-64-Regs330494
-Node: IA-64-Bits331420
-Node: IA-64 Opcodes331929
-Node: IP2K-Dependent332201
-Node: IP2K-Opts332429
-Node: M32C-Dependent332909
-Node: M32C-Opts333433
-Node: M32C-Modifiers333717
-Node: M32R-Dependent335504
-Node: M32R-Opts335825
-Node: M32R-Directives339991
-Node: M32R-Warnings343966
-Node: M68K-Dependent346972
-Node: M68K-Opts347439
-Node: M68K-Syntax354818
-Node: M68K-Moto-Syntax356657
-Node: M68K-Float359246
-Node: M68K-Directives359766
-Node: M68K-opcodes361092
-Node: M68K-Branch361318
-Node: M68K-Chars365516
-Node: M68HC11-Dependent365929
-Node: M68HC11-Opts366460
-Node: M68HC11-Syntax370276
-Node: M68HC11-Modifiers372490
-Node: M68HC11-Directives374318
-Node: M68HC11-Float375694
-Node: M68HC11-opcodes376222
-Node: M68HC11-Branch376404
-Node: MIPS-Dependent378851
-Node: MIPS Opts379941
-Node: MIPS Object387268
-Node: MIPS Stabs388834
-Node: MIPS symbol sizes389556
-Node: MIPS ISA391225
-Node: MIPS autoextend392374
-Node: MIPS insn393104
-Node: MIPS option stack393601
-Node: MIPS ASE instruction generation overrides394375
-Node: MMIX-Dependent395592
-Node: MMIX-Opts395972
-Node: MMIX-Expand399576
-Node: MMIX-Syntax400891
-Ref: mmixsite401248
-Node: MMIX-Chars402089
-Node: MMIX-Symbols402743
-Node: MMIX-Regs404811
-Node: MMIX-Pseudos405836
-Ref: MMIX-loc405977
-Ref: MMIX-local407057
-Ref: MMIX-is407589
-Ref: MMIX-greg407860
-Ref: GREG-base408779
-Ref: MMIX-byte410096
-Ref: MMIX-constants410567
-Ref: MMIX-prefix411213
-Ref: MMIX-spec411587
-Node: MMIX-mmixal411921
-Node: MSP430-Dependent415418
-Node: MSP430 Options415884
-Node: MSP430 Syntax416170
-Node: MSP430-Macros416486
-Node: MSP430-Chars417217
-Node: MSP430-Regs417530
-Node: MSP430-Ext418090
-Node: MSP430 Floating Point419911
-Node: MSP430 Directives420135
-Node: MSP430 Opcodes420926
-Node: MSP430 Profiling Capability421321
-Node: PDP-11-Dependent423650
-Node: PDP-11-Options424039
-Node: PDP-11-Pseudos429110
-Node: PDP-11-Syntax429455
-Node: PDP-11-Mnemonics430206
-Node: PDP-11-Synthetic430508
-Node: PJ-Dependent430726
-Node: PJ Options430951
-Node: PPC-Dependent431228
-Node: PowerPC-Opts431515
-Node: PowerPC-Pseudo433590
-Node: SH-Dependent434189
-Node: SH Options434601
-Node: SH Syntax435529
-Node: SH-Chars435802
-Node: SH-Regs436096
-Node: SH-Addressing436710
-Node: SH Floating Point437619
-Node: SH Directives438713
-Node: SH Opcodes439083
-Node: SH64-Dependent443405
-Node: SH64 Options443768
-Node: SH64 Syntax445485
-Node: SH64-Chars445768
-Node: SH64-Regs446068
-Node: SH64-Addressing447164
-Node: SH64 Directives448347
-Node: SH64 Opcodes449457
-Node: Sparc-Dependent450173
-Node: Sparc-Opts450558
-Node: Sparc-Aligned-Data452815
-Node: Sparc-Float453670
-Node: Sparc-Directives453871
-Node: TIC54X-Dependent455831
-Node: TIC54X-Opts456557
-Node: TIC54X-Block457600
-Node: TIC54X-Env457960
-Node: TIC54X-Constants458308
-Node: TIC54X-Subsyms458710
-Node: TIC54X-Locals460619
-Node: TIC54X-Builtins461363
-Node: TIC54X-Ext463834
-Node: TIC54X-Directives464405
-Node: TIC54X-Macros475307
-Node: TIC54X-MMRegs477417
-Node: Z80-Dependent477633
-Node: Z80 Options478021
-Node: Z80 Syntax479444
-Node: Z80-Chars480116
-Node: Z80-Regs480649
-Node: Z80-Case481001
-Node: Z80 Floating Point481446
-Node: Z80 Directives481640
-Node: Z80 Opcodes483265
-Node: Z8000-Dependent484607
-Node: Z8000 Options485568
-Node: Z8000 Syntax485785
-Node: Z8000-Chars486075
-Node: Z8000-Regs486308
-Node: Z8000-Addressing487098
-Node: Z8000 Directives488215
-Node: Z8000 Opcodes489824
-Node: Vax-Dependent499766
-Node: VAX-Opts500283
-Node: VAX-float504018
-Node: VAX-directives504650
-Node: VAX-opcodes505511
-Node: VAX-branch505900
-Node: VAX-operands508407
-Node: VAX-no509170
-Node: V850-Dependent509407
-Node: V850 Options509805
-Node: V850 Syntax512194
-Node: V850-Chars512434
-Node: V850-Regs512599
-Node: V850 Floating Point514167
-Node: V850 Directives514373
-Node: V850 Opcodes515516
-Node: Xtensa-Dependent521408
-Node: Xtensa Options522137
-Node: Xtensa Syntax524908
-Node: Xtensa Opcodes526797
-Node: Xtensa Registers528591
-Node: Xtensa Optimizations529224
-Node: Density Instructions529676
-Node: Xtensa Automatic Alignment530778
-Node: Xtensa Relaxation533524
-Node: Xtensa Branch Relaxation534432
-Node: Xtensa Call Relaxation535804
-Node: Xtensa Immediate Relaxation537590
-Node: Xtensa Directives540164
-Node: Schedule Directive541872
-Node: Longcalls Directive542212
-Node: Transform Directive542756
-Node: Literal Directive543498
-Node: Literal Position Directive545283
-Node: Literal Prefix Directive546982
-Node: Absolute Literals Directive549145
-Node: Reporting Bugs550452
-Node: Bug Criteria551176
-Node: Bug Reporting551941
-Node: Acknowledgements558574
-Ref: Acknowledgements-Footnote-1563472
-Node: GNU Free Documentation License563498
-Node: Index583225
-
-End Tag Table
diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo
index 6daaed028c7b..b6f7f3217177 100644
--- a/gas/doc/as.texinfo
+++ b/gas/doc/as.texinfo
@@ -1,6 +1,6 @@
\input texinfo @c -*-Texinfo-*-
@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-@c 2001, 2002, 2003, 2004, 2005
+@c 2001, 2002, 2003, 2004, 2005, 2006, 2007
@c Free Software Foundation, Inc.
@c UPDATE!! On future updates--
@c (1) check for new machine-dep cmdline options in
@@ -22,7 +22,7 @@
@c man begin NAME
@c ---
@include asconfig.texi
-@include gasver.texi
+@include bfdver.texi
@c ---
@c man end
@c ---
@@ -96,11 +96,12 @@ END-INFO-DIR-ENTRY
@finalout
@syncodeindex ky cp
-@ifinfo
+@copying
This file documents the GNU Assembler "@value{AS}".
@c man begin COPYRIGHT
-Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002 Free Software Foundation, Inc.
+Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002,
+2006, 2007 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
@@ -110,15 +111,7 @@ Back-Cover Texts. A copy of the license is included in the
section entitled ``GNU Free Documentation License''.
@c man end
-
-@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
+@end copying
@titlepage
@title Using @value{AS}
@@ -126,11 +119,15 @@ notice identical to this one except for the removal of this paragraph
@ifclear GENERIC
@subtitle for the @value{TARGET} family
@end ifclear
+@ifset VERSION_PACKAGE
+@sp 1
+@subtitle @value{VERSION_PACKAGE}
+@end ifset
@sp 1
@subtitle Version @value{VERSION}
@sp 1
@sp 13
-The Free Software Foundation Inc. thanks The Nice Computer
+The Free Software Foundation Inc.@: thanks The Nice Computer
Company of Australia for loaning Dean Elsner to write the
first (Vax) version of @command{as} for Project @sc{gnu}.
The proprietors, management and staff of TNCCA thank FSF for
@@ -153,7 +150,8 @@ done.
@end tex
@vskip 0pt plus 1filll
-Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002 Free Software Foundation, Inc.
+Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002,
+2006, 2007 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
@@ -163,13 +161,17 @@ Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002 Fr
section entitled ``GNU Free Documentation License''.
@end titlepage
+@contents
@ifnottex
@node Top
@top Using @value{AS}
-This file is a user guide to the @sc{gnu} assembler @command{@value{AS}} version
-@value{VERSION}.
+This file is a user guide to the @sc{gnu} assembler @command{@value{AS}}
+@ifset VERSION_PACKAGE
+@value{VERSION_PACKAGE}
+@end ifset
+version @value{VERSION}.
@ifclear GENERIC
This version of the file describes @command{@value{AS}} configured to generate
code for @value{TARGET} architectures.
@@ -191,7 +193,7 @@ section entitled ``GNU Free Documentation License''.
* Reporting Bugs:: Reporting Bugs
* Acknowledgements:: Who Did What
* GNU Free Documentation License:: GNU Free Documentation License
-* Index:: Index
+* AS Index:: AS Index
@end menu
@end ifnottex
@@ -209,7 +211,7 @@ code for @value{TARGET} architectures.
@cindex option summary
@cindex summary of options
Here is a brief summary of how to invoke @command{@value{AS}}. For details,
-@pxref{Invoking,,Command-Line Options}.
+see @ref{Invoking,,Command-Line Options}.
@c man title AS the portable GNU assembler.
@@ -296,6 +298,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
@emph{Target i386 options:}
[@b{--32}|@b{--64}] [@b{-n}]
+ [@b{-march}=@var{CPU}] [@b{-mtune}=@var{CPU}]
@end ifset
@ifset I960
@@ -343,7 +346,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
[@b{-m68hc11}|@b{-m68hc12}|@b{-m68hcs12}]
[@b{-mshort}|@b{-mlong}]
[@b{-mshort-double}|@b{-mlong-double}]
- [@b{--force-long-branchs}] [@b{--short-branchs}]
+ [@b{--force-long-branches}] [@b{--short-branches}]
[@b{--strict-direct-mode}] [@b{--print-insn-syntax}]
[@b{--print-opcodes}] [@b{--generate-example}]
@end ifset
@@ -358,7 +361,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
@emph{Target MIPS options:}
[@b{-nocpp}] [@b{-EL}] [@b{-EB}] [@b{-O}[@var{optimization level}]]
[@b{-g}[@var{debug level}]] [@b{-G} @var{num}] [@b{-KPIC}] [@b{-call_shared}]
- [@b{-non_shared}] [@b{-xgot}]
+ [@b{-non_shared}] [@b{-xgot} [@b{-mvxworks-pic}]
[@b{-mabi}=@var{ABI}] [@b{-32}] [@b{-n32}] [@b{-64}] [@b{-mfp32}] [@b{-mgp32}]
[@b{-march}=@var{CPU}] [@b{-mtune}=@var{CPU}] [@b{-mips1}] [@b{-mips2}]
[@b{-mips3}] [@b{-mips4}] [@b{-mips5}] [@b{-mips32}] [@b{-mips32r2}]
@@ -367,9 +370,11 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
[@b{-trap}] [@b{-no-break}] [@b{-break}] [@b{-no-trap}]
[@b{-mfix7000}] [@b{-mno-fix7000}]
[@b{-mips16}] [@b{-no-mips16}]
+ [@b{-msmartmips}] [@b{-mno-smartmips}]
[@b{-mips3d}] [@b{-no-mips3d}]
[@b{-mdmx}] [@b{-no-mdmx}]
[@b{-mdsp}] [@b{-mno-dsp}]
+ [@b{-mdspr2}] [@b{-mno-dspr2}]
[@b{-mmt}] [@b{-mno-mt}]
[@b{-mdebug}] [@b{-no-mdebug}]
[@b{-mpdr}] [@b{-mno-pdr}]
@@ -487,7 +492,10 @@ listing without forms processing. The @samp{=file} option, if used, must be
the last one. By itself, @samp{-a} defaults to @samp{-ahls}.
@item --alternate
-Begin in alternate macro mode, see @ref{Altmacro,,@code{.altmacro}}.
+Begin in alternate macro mode.
+@ifclear man
+@xref{Altmacro,,@code{.altmacro}}.
+@end ifclear
@item -D
Ignored. This option is accepted for script compatibility with calls to
@@ -496,7 +504,9 @@ other assemblers.
@item --defsym @var{sym}=@var{value}
Define the symbol @var{sym} to be @var{value} before assembling the input file.
@var{value} must be an integer constant. As in C, a leading @samp{0x}
-indicates a hexadecimal value, and a leading @samp{0} indicates an octal value.
+indicates a hexadecimal value, and a leading @samp{0} indicates an octal
+value. The value of the symbol can be overridden inside a source file via the
+use of a @code{.set} pseudo-op.
@item -f
``fast''---skip whitespace and comment preprocessing (assume source is
@@ -546,9 +556,12 @@ Issue warnings when difference tables altered for long displacements.
@item -L
@itemx --keep-locals
-Keep (in the symbol table) local symbols. On traditional a.out systems
-these start with @samp{L}, but different systems have different local
-label prefixes.
+Keep (in the symbol table) local symbols. These symbols start with
+system-specific local label prefixes, typically @samp{.L} for ELF systems
+or @samp{L} for traditional a.out systems.
+@ifclear man
+@xref{Symbol Names}.
+@end ifclear
@item --listing-lhs-width=@var{number}
Set the maximum width, in words, of the output data column for an assembler
@@ -866,13 +879,13 @@ Specify to use the 32-bit double ABI.
@item -mlong-double
Specify to use the 64-bit double ABI.
-@item --force-long-branchs
+@item --force-long-branches
Relative branches are turned into absolute ones. This concerns
conditional branches, unconditional branches and branches to a
sub routine.
-@item -S | --short-branchs
-Do not turn relative branchs into absolute ones
+@item -S | --short-branches
+Do not turn relative branches into absolute ones
when the offset is out of range.
@item --strict-direct-mode
@@ -1006,6 +1019,12 @@ Generate code for the MIPS 16 processor. This is equivalent to putting
@code{.set mips16} at the start of the assembly file. @samp{-no-mips16}
turns off this option.
+@item -msmartmips
+@itemx -mno-smartmips
+Enables the SmartMIPS extension to the MIPS32 instruction set. This is
+equivalent to putting @code{.set smartmips} at the start of the assembly file.
+@samp{-mno-smartmips} turns off this option.
+
@item -mips3d
@itemx -no-mips3d
Generate code for the MIPS-3D Application Specific Extension.
@@ -1020,10 +1039,17 @@ This tells the assembler to accept MDMX instructions.
@item -mdsp
@itemx -mno-dsp
-Generate code for the DSP Application Specific Extension.
-This tells the assembler to accept DSP instructions.
+Generate code for the DSP Release 1 Application Specific Extension.
+This tells the assembler to accept DSP Release 1 instructions.
@samp{-mno-dsp} turns off this option.
+@item -mdspr2
+@itemx -mno-dspr2
+Generate code for the DSP Release 2 Application Specific Extension.
+This option implies -mdsp.
+This tells the assembler to accept DSP Release 2 instructions.
+@samp{-mno-dspr2} turns off this option.
+
@item -mmt
@itemx -mno-mt
Generate code for the MT Application Specific Extension.
@@ -1173,13 +1199,13 @@ Assemble all undocumented Z80 instructions without warning.
Issue a warning for undocumented Z80 instructions that also work on R800.
@item -warn-unportable-instructions
@itemx -Wup
-Issue a warning for undocumented Z80 instructions that do notwork on R800.
+Issue a warning for undocumented Z80 instructions that do not work on R800.
@item -forbid-undocumented-instructions
@itemx -Fud
Treat all undocumented instructions as errors.
@item -forbid-unportable-instructions
@itemx -Fup
-Treat undocumented Z80 intructions that do notwork on R800 as errors.
+Treat undocumented Z80 instructions that do not work on R800 as errors.
@end table
@end ifset
@@ -1504,7 +1530,8 @@ because many of them aren't supposed to happen.
@cindex options, all versions of assembler
This chapter describes command-line options available in @emph{all}
-versions of the @sc{gnu} assembler; @pxref{Machine Dependencies}, for options specific
+versions of the @sc{gnu} assembler; see @ref{Machine Dependencies},
+for options specific
@ifclear GENERIC
to the @value{TARGET} target.
@end ifclear
@@ -1549,7 +1576,7 @@ assembler.)
* K:: -K for difference tables
@end ifset
-* L:: -L to retain local labels
+* L:: -L to retain local symbols
* listing:: --listing-XXX to configure listing output
* M:: -M or --mri to assemble in MRI compatibility mode
* MD:: --MD for dependency tracking
@@ -1604,7 +1631,8 @@ listing-control directives have no effect.
The letters after @samp{-a} may be combined into one option,
@emph{e.g.}, @samp{-aln}.
-Note if the assembler source is coming from the standard input (eg because it
+Note if the assembler source is coming from the standard input (e.g.,
+because it
is being created by @code{@value{GCC}} and the @samp{-pipe} command line switch
is being used) then the listing will not contain any comments or preprocessor
directives. This is because the listing code buffers input source lines from
@@ -1674,33 +1702,28 @@ alteration on other platforms.
@ifset DIFF-TBL-KLUGE
@cindex difference tables, warning
@cindex warning for altered difference tables
-@command{@value{AS}} sometimes alters the code emitted for directives of the form
-@samp{.word @var{sym1}-@var{sym2}}; @pxref{Word,,@code{.word}}.
+@command{@value{AS}} sometimes alters the code emitted for directives of the
+form @samp{.word @var{sym1}-@var{sym2}}. @xref{Word,,@code{.word}}.
You can use the @samp{-K} option if you want a warning issued when this
is done.
@end ifset
@node L
-@section Include Local Labels: @option{-L}
+@section Include Local Symbols: @option{-L}
@kindex -L
-@cindex local labels, retaining in output
-Labels beginning with @samp{L} (upper case only) are called @dfn{local
-labels}. @xref{Symbol Names}. Normally you do not see such labels when
-debugging, because they are intended for the use of programs (like
-compilers) that compose assembler programs, not for your notice.
-Normally both @command{@value{AS}} and @code{@value{LD}} discard such labels, so you do not
-normally debug with them.
-
-This option tells @command{@value{AS}} to retain those @samp{L@dots{}} symbols
+@cindex local symbols, retaining in output
+Symbols beginning with system-specific local label prefixes, typically
+@samp{.L} for ELF systems or @samp{L} for traditional a.out systems, are
+called @dfn{local symbols}. @xref{Symbol Names}. Normally you do not see
+such symbols when debugging, because they are intended for the use of
+programs (like compilers) that compose assembler programs, not for your
+notice. Normally both @command{@value{AS}} and @code{@value{LD}} discard
+such symbols, so you do not normally debug with them.
+
+This option tells @command{@value{AS}} to retain those local symbols
in the object file. Usually if you do this you also tell the linker
-@code{@value{LD}} to preserve symbols whose names begin with @samp{L}.
-
-By default, a local label is any label beginning with @samp{L}, but each
-target is allowed to redefine the local label prefix.
-@ifset HPPA
-On the HPPA local labels begin with @samp{L$}.
-@end ifset
+@code{@value{LD}} to preserve those symbols.
@node listing
@section Configuring listing output: @option{--listing}
@@ -1708,9 +1731,11 @@ On the HPPA local labels begin with @samp{L$}.
The listing feature of the assembler can be enabled via the command line switch
@samp{-a} (@pxref{a}). This feature combines the input source file(s) with a
hex dump of the corresponding locations in the output object file, and displays
-them as a listing file. The format of this listing can be controlled by pseudo
-ops inside the assembler source (@pxref{List} @pxref{Title} @pxref{Sbttl}
-@pxref{Psize} @pxref{Eject}) and also by the following switches:
+them as a listing file. The format of this listing can be controlled by
+directives inside the assembler source (i.e., @code{.list} (@pxref{List}),
+@code{.title} (@pxref{Title}), @code{.sbttl} (@pxref{Sbttl}),
+@code{.psize} (@pxref{Psize}), and
+@code{.eject} (@pxref{Eject}) and also by the following switches:
@table @gcctabopt
@item --listing-lhs-width=@samp{number}
@@ -2072,7 +2097,7 @@ anything else you may get from your C compiler's preprocessor. You can
do include file processing with the @code{.include} directive
(@pxref{Include,,@code{.include}}). You can use the @sc{gnu} C compiler driver
to get other ``CPP'' style preprocessing by giving the input file a
-@samp{.S} suffix. @xref{Overall Options,, Options Controlling the Kind of
+@samp{.S} suffix. @xref{Overall Options, ,Options Controlling the Kind of
Output, gcc.info, Using GNU CC}.
Excess whitespace, comments, and character constants
@@ -2209,7 +2234,7 @@ extends to the end of the line.
To be compatible with past assemblers, lines that begin with @samp{#} have a
special interpretation. Following the @samp{#} should be an absolute
expression (@pxref{Expressions}): the logical line number of the @emph{next}
-line. Then a string (@pxref{Strings,, Strings}) is allowed: if present it is a
+line. Then a string (@pxref{Strings, ,Strings}) is allowed: if present it is a
new logical file name. The rest of the line, if any, should be whitespace.
If the first non-whitespace characters on the line are not numeric,
@@ -2284,8 +2309,8 @@ constants are an exception: they do not end statements.
@end ifclear
@ifset GENERIC
A @dfn{statement} ends at a newline character (@samp{\n}) or line
-separator character. (The line separator is usually @samp{;}, unless
-this conflicts with the comment character; @pxref{Machine Dependencies}.) The
+separator character. (The line separator is usually @samp{;}, unless this
+conflicts with the comment character; see @ref{Machine Dependencies}.) The
newline or separator character is considered part of the preceding
statement. Newlines and separators within character constants are an
exception: they do not end statements.
@@ -2670,7 +2695,7 @@ independently of any floating point hardware in the computer running
@cindex bit fields
@cindex constants, bit field
You can also define numeric constants as @dfn{bit fields}.
-specify two numbers separated by a colon---
+Specify two numbers separated by a colon---
@example
@var{mask}:@var{value}
@end example
@@ -3069,8 +3094,8 @@ You
can also use the @code{.subsection} directive (@pxref{SubSection})
to specify a subsection: @samp{.subsection @var{expression}}.
@end ifset
-@var{Expression} should be an absolute expression.
-(@xref{Expressions}.) If you just say @samp{.text} then @samp{.text 0}
+@var{Expression} should be an absolute expression
+(@pxref{Expressions}). If you just say @samp{.text} then @samp{.text 0}
is assumed. Likewise @samp{.data} means @samp{.data 0}. Assembly
begins in @code{text 0}. For instance:
@smallexample
@@ -3109,7 +3134,7 @@ The @code{.lcomm} pseudo-op defines a symbol in the bss section; see
@ref{Lcomm,,@code{.lcomm}}.
The @code{.comm} pseudo-op may be used to declare a common symbol, which is
-another form of uninitialized symbol; see @xref{Comm,,@code{.comm}}.
+another form of uninitialized symbol; see @ref{Comm,,@code{.comm}}.
@ifset GENERIC
When assembling for a target which supports multiple sections, such as ELF or
@@ -3180,8 +3205,8 @@ equals sign @samp{=}@samp{=} here represents an equivalent of the
Symbol names begin with a letter or with one of @samp{._}. On most
machines, you can also use @code{$} in symbol names; exceptions are
noted in @ref{Machine Dependencies}. That character may be followed by any
-string of digits, letters, dollar signs (unless otherwise noted in
-@ref{Machine Dependencies}), and underscores.
+string of digits, letters, dollar signs (unless otherwise noted for a
+particular target machine), and underscores.
@end ifclear
@ifset SPECIAL-SYMS
@ifset H8
@@ -3203,16 +3228,32 @@ in a program.
@cindex local symbol names
@cindex symbol names, local
+A local symbol is any symbol beginning with certain local label prefixes.
+By default, the local label prefix is @samp{.L} for ELF systems or
+@samp{L} for traditional a.out systems, but each target may have its own
+set of local label prefixes.
+@ifset HPPA
+On the HPPA local symbols begin with @samp{L$}.
+@end ifset
+
+Local symbols are defined and used within the assembler, but they are
+normally not saved in object files. Thus, they are not visible when debugging.
+You may use the @samp{-L} option (@pxref{L, ,Include Local Symbols:
+@option{-L}}) to retain the local symbols in the object files.
+
+@subheading Local Labels
+
+@cindex local labels
@cindex temporary symbol names
@cindex symbol names, temporary
-Local symbols help compilers and programmers use names temporarily.
+Local labels help compilers and programmers use names temporarily.
They create symbols which are guaranteed to be unique over the entire scope of
the input source code and which can be referred to by a simple notation.
-To define a local symbol, write a label of the form @samp{@b{N}:} (where @b{N}
+To define a local label, write a label of the form @samp{@b{N}:} (where @b{N}
represents any positive integer). To refer to the most recent previous
-definition of that symbol write @samp{@b{N}b}, using the same number as when
+definition of that label write @samp{@b{N}b}, using the same number as when
you defined the label. To refer to the next definition of a local label, write
-@samp{@b{N}f}--- The @samp{b} stands for``backwards'' and the @samp{f} stands
+@samp{@b{N}f}---the @samp{b} stands for ``backwards'' and the @samp{f} stands
for ``forwards''.
There is no restriction on how you can use these labels, and you can reuse them
@@ -3241,16 +3282,17 @@ label_3: branch label_4
label_4: branch label_3
@end smallexample
-Local symbol names are only a notational device. They are immediately
+Local label names are only a notational device. They are immediately
transformed into more conventional symbol names before the assembler uses them.
-The symbol names stored in the symbol table, appearing in error messages and
-optionally emitted to the object file. The names are constructed using these
-parts:
+The symbol names are stored in the symbol table, appear in error messages, and
+are optionally emitted to the object file. The names are constructed using
+these parts:
@table @code
-@item L
-All local labels begin with @samp{L}. Normally both @command{@value{AS}} and
-@code{@value{LD}} forget symbols that start with @samp{L}. These labels are
+@item @emph{local label prefix}
+All local symbols begin with the system-specific local label prefix.
+Normally both @command{@value{AS}} and @code{@value{LD}} forget symbols
+that start with the local label prefix. These labels are
used for symbols you are never intended to see. If you use the
@samp{-L} option then @command{@value{AS}} retains these symbols in the
object file. If you also instruct @code{@value{LD}} to retain these symbols,
@@ -3268,30 +3310,30 @@ of the same name. The character has ASCII value of @samp{\002} (control-B).
This is a serial number to keep the labels distinct. The first definition of
@samp{0:} gets the number @samp{1}. The 15th definition of @samp{0:} gets the
number @samp{15}, and so on. Likewise the first definition of @samp{1:} gets
-the number @samp{1} and its 15th defintion gets @samp{15} as well.
+the number @samp{1} and its 15th definition gets @samp{15} as well.
@end table
-So for example, the first @code{1:} is named @code{L1@kbd{C-B}1}, the 44th
-@code{3:} is named @code{L3@kbd{C-B}44}.
+So for example, the first @code{1:} may be named @code{.L1@kbd{C-B}1}, and
+the 44th @code{3:} may be named @code{.L3@kbd{C-B}44}.
@subheading Dollar Local Labels
@cindex dollar local symbols
@code{@value{AS}} also supports an even more local form of local labels called
-dollar labels. These labels go out of scope (ie they become undefined) as soon
-as a non-local label is defined. Thus they remain valid for only a small
+dollar labels. These labels go out of scope (i.e., they become undefined) as
+soon as a non-local label is defined. Thus they remain valid for only a small
region of the input source code. Normal local labels, by contrast, remain in
scope for the entire file, or until they are redefined by another occurrence of
the same local label.
Dollar labels are defined in exactly the same way as ordinary local labels,
except that instead of being terminated by a colon, they are terminated by a
-dollar sign. eg @samp{@b{55$}}.
+dollar sign, e.g., @samp{@b{55$}}.
They can also be distinguished from ordinary local labels by their transformed
-name which uses ASCII character @samp{\001} (control-A) as the magic character
-to distinguish them from ordinary labels. Thus the 5th defintion of @samp{6$}
-is named @samp{L6@kbd{C-A}5}.
+names which use ASCII character @samp{\001} (control-A) as the magic character
+to distinguish them from ordinary labels. For example, the fifth definition of
+@samp{6$} may be named @samp{.L6@kbd{C-A}5}.
@node Dot
@section The Special Dot Symbol
@@ -3722,14 +3764,14 @@ Some machine configurations provide additional directives.
@end ifset
@ifclear GENERIC
@ifset machine-directives
-@xref{Machine Dependencies} for additional directives.
+@xref{Machine Dependencies}, for additional directives.
@end ifset
@end ifclear
@menu
* Abort:: @code{.abort}
@ifset COFF
-* ABORT:: @code{.ABORT}
+* ABORT (COFF):: @code{.ABORT}
@end ifset
* Align:: @code{.align @var{abs-expr} , @var{abs-expr}}
@@ -3740,7 +3782,7 @@ Some machine configurations provide additional directives.
* Byte:: @code{.byte @var{expressions}}
* Comm:: @code{.comm @var{symbol} , @var{length} }
-* CFI directives:: @code{.cfi_startproc}, @code{.cfi_endproc}, etc.
+* CFI directives:: @code{.cfi_startproc [simple]}, @code{.cfi_endproc}, etc.
* Data:: @code{.data @var{subsection}}
@ifset COFF
@@ -3818,8 +3860,8 @@ Some machine configurations provide additional directives.
* Noaltmacro:: @code{.noaltmacro}
* Nolist:: @code{.nolist}
* Octa:: @code{.octa @var{bignums}}
-* Org:: @code{.org @var{new-lc} , @var{fill}}
-* P2align:: @code{.p2align @var{abs-expr} , @var{abs-expr}}
+* Org:: @code{.org @var{new-lc}, @var{fill}}
+* P2align:: @code{.p2align @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
@ifset ELF
* PopSection:: @code{.popsection}
* Previous:: @code{.previous}
@@ -3837,6 +3879,7 @@ Some machine configurations provide additional directives.
@end ifset
* Quad:: @code{.quad @var{bignums}}
+* Reloc:: @code{.reloc @var{offset}, @var{reloc_name}[, @var{expression}]}
* Rept:: @code{.rept @var{count}}
* Sbttl:: @code{.sbttl "@var{subheading}"}
@ifset COFF
@@ -3907,8 +3950,8 @@ of the source quit, it could use this directive tells @command{@value{AS}} to
quit also. One day @code{.abort} will not be supported.
@ifset COFF
-@node ABORT
-@section @code{.ABORT}
+@node ABORT (COFF)
+@section @code{.ABORT} (COFF)
@cindex @code{ABORT} directive
When producing COFF output, @command{@value{AS}} accepts this directive as a
@@ -4058,19 +4101,40 @@ The syntax for @code{.comm} differs slightly on the HPPA. The syntax is
@end ifset
@node CFI directives
-@section @code{.cfi_startproc}
+@section @code{.cfi_startproc [simple]}
@cindex @code{cfi_startproc} directive
@code{.cfi_startproc} is used at the beginning of each function that
should have an entry in @code{.eh_frame}. It initializes some internal
-data structures and emits architecture dependent initial CFI instructions.
-Don't forget to close the function by
+data structures. Don't forget to close the function by
@code{.cfi_endproc}.
+Unless @code{.cfi_startproc} is used along with parameter @code{simple}
+it also emits some architecture dependent initial CFI instructions.
+
@section @code{.cfi_endproc}
@cindex @code{cfi_endproc} directive
@code{.cfi_endproc} is used at the end of a function where it closes its
unwind entry previously opened by
-@code{.cfi_startproc}. and emits it to @code{.eh_frame}.
+@code{.cfi_startproc}, and emits it to @code{.eh_frame}.
+
+@section @code{.cfi_personality @var{encoding} [, @var{exp}]}
+@code{.cfi_personality} defines personality routine and its encoding.
+@var{encoding} must be a constant determining how the personality
+should be encoded. If it is 255 (@code{DW_EH_PE_omit}), second
+argument is not present, otherwise second argument should be
+a constant or a symbol name. When using indirect encodings,
+the symbol provided should be the location where personality
+can be loaded from, not the personality routine itself.
+The default after @code{.cfi_startproc} is @code{.cfi_personality 0xff},
+no personality routine.
+
+@section @code{.cfi_lsda @var{encoding} [, @var{exp}]}
+@code{.cfi_lsda} defines LSDA and its encoding.
+@var{encoding} must be a constant determining how the LSDA
+should be encoded. If it is 255 (@code{DW_EH_PE_omit}), second
+argument is not present, otherwise second argument should be a constant
+or a symbol name. The default after @code{.cfi_startproc} is @code{.cfi_lsda 0xff},
+no LSDA.
@section @code{.cfi_def_cfa @var{register}, @var{offset}}
@code{.cfi_def_cfa} defines a rule for computing CFA as: @i{take
@@ -4102,6 +4166,31 @@ using the known displacement of the CFA register from the CFA.
This is often easier to use, because the number will match the
code it's annotating.
+@section @code{.cfi_register @var{register1}, @var{register2}}
+Previous value of @var{register1} is saved in register @var{register2}.
+
+@section @code{.cfi_restore @var{register}}
+@code{.cfi_restore} says that the rule for @var{register} is now the
+same as it was at the beginning of the function, after all initial
+instruction added by @code{.cfi_startproc} were executed.
+
+@section @code{.cfi_undefined @var{register}}
+From now on the previous value of @var{register} can't be restored anymore.
+
+@section @code{.cfi_same_value @var{register}}
+Current value of @var{register} is the same like in the previous frame,
+i.e. no restoration needed.
+
+@section @code{.cfi_remember_state},
+First save all current rules for all registers by @code{.cfi_remember_state},
+then totally screw them up by subsequent @code{.cfi_*} directives and when
+everything is hopelessly bad, use @code{.cfi_restore_state} to restore
+the previous saved state.
+
+@section @code{.cfi_return_column @var{register}}
+Change return column @var{register}, i.e. the return address is either
+directly in @var{register} or can be accessed by rules for @var{register}.
+
@section @code{.cfi_signal_frame}
Mark current function as signal trampoline.
@@ -4121,9 +4210,9 @@ to the @code{.debug_line} file name table. The @var{fileno} operand should
be a unique positive integer to use as the index of the entry in the table.
The @var{filename} operand is a C string literal.
-The detail of filename indicies is exposed to the user because the filename
+The detail of filename indices is exposed to the user because the filename
table is shared with the @code{.debug_info} section of the dwarf2 debugging
-information, and thus the user must know the exact indicies that table
+information, and thus the user must know the exact indices that table
entries will have.
@section @code{.loc @var{fileno} @var{lineno} [@var{column}] [@var{options}]}
@@ -4262,7 +4351,7 @@ Force a page break at this point, when generating assembly listings.
@cindex @code{else} directive
@code{.else} is part of the @command{@value{AS}} support for conditional
-assembly; @pxref{If,,@code{.if}}. It marks the beginning of a section
+assembly; see @ref{If,,@code{.if}}. It marks the beginning of a section
of code to be assembled if the condition for the preceding @code{.if}
was false.
@@ -4271,7 +4360,7 @@ was false.
@cindex @code{elseif} directive
@code{.elseif} is part of the @command{@value{AS}} support for conditional
-assembly; @pxref{If,,@code{.if}}. It is shorthand for beginning a new
+assembly; see @ref{If,,@code{.if}}. It is shorthand for beginning a new
@code{.if} block that would otherwise fill the entire @code{.else} section.
@node End
@@ -4316,7 +4405,7 @@ conditionally. @xref{If,,@code{.if}}.
@cindex assigning values to symbols
@cindex symbols, assigning values to
This directive sets the value of @var{symbol} to @var{expression}.
-It is synonymous with @samp{.set}; @pxref{Set,,@code{.set}}.
+It is synonymous with @samp{.set}; see @ref{Set,,@code{.set}}.
@ifset HPPA
The syntax for @code{equ} on the HPPA is
@@ -4327,8 +4416,8 @@ The syntax for @code{equ} on the HPPA is
The syntax for @code{equ} on the Z80 is
@samp{@var{symbol} equ @var{expression}}.
On the Z80 it is an eror if @var{symbol} is already defined,
-but the symbol is not protected from later redefinition,
-compare @xref{Equiv}.
+but the symbol is not protected from later redefinition.
+Compare @ref{Equiv}.
@end ifset
@node Equiv
@@ -4484,7 +4573,7 @@ compatibility with other assemblers.
@ifset HPPA
On the HPPA, @code{.global} is not always enough to make it accessible to other
partial programs. You may need the HPPA-only @code{.EXPORT} directive as well.
-@xref{HPPA Directives,, HPPA Assembler Directives}.
+@xref{HPPA Directives, ,HPPA Assembler Directives}.
@end ifset
@ifset ELF
@@ -4721,8 +4810,7 @@ is equivalent to assembling
move d3,sp@@-
@end example
-For some caveats with the spelling of @var{symbol}, see also the discussion
-at @xref{Macro}.
+For some caveats with the spelling of @var{symbol}, see also @ref{Macro}.
@node Irpc
@section @code{.irpc @var{symbol},@var{values}}@dots{}
@@ -4907,7 +4995,7 @@ the initial value of the listing counter is one.
@section @code{.long @var{expressions}}
@cindex @code{long} directive
-@code{.long} is the same as @samp{.int}, @pxref{Int,,@code{.int}}.
+@code{.long} is the same as @samp{.int}. @xref{Int,,@code{.int}}.
@ignore
@c no one seems to know what this is for or whether this description is
@@ -4971,7 +5059,7 @@ indicate whether all invocations must specify a non-blank value (through
(through @samp{:@code{vararg}}). You can supply a default value for any
macro argument by following the name with @samp{=@var{deflt}}. You
cannot define two macros with the same @var{macname} unless it has been
-subject to the @code{.purgem} directive (@xref{Purgem}.) between the two
+subject to the @code{.purgem} directive (@pxref{Purgem}) between the two
definitions. For example, these are all valid @code{.macro} statements:
@table @code
@@ -4979,7 +5067,7 @@ definitions. For example, these are all valid @code{.macro} statements:
Begin the definition of a macro called @code{comm}, which takes no
arguments.
-@item .macro plus1 p, p1
+@item .macro plus1 p, p1
@itemx .macro plus1 p p1
Either statement begins the definition of a macro called @code{plus1},
which takes two arguments; within the macro definition, write
@@ -4993,7 +5081,6 @@ After the definition is complete, you can call the macro either as
@var{a} and @samp{\p2} evaluating to @var{b}), or as @samp{reserve_str
,@var{b}} (with @samp{\p1} evaluating as the default, in this case
@samp{0}, and @samp{\p2} evaluating to @var{b}).
-@end table
@item .macro m p1:req, p2=0, p3:vararg
Begin the definition of a macro called @code{m}, with at least three
@@ -5005,21 +5092,72 @@ When you call a macro, you can specify the argument values either by
position, or by keyword. For example, @samp{sum 9,17} is equivalent to
@samp{sum to=17, from=9}.
+@end table
+
Note that since each of the @var{macargs} can be an identifier exactly
as any other one permitted by the target architecture, there may be
occasional problems if the target hand-crafts special meanings to certain
-characters when they occur in a special position. For example, if colon
+characters when they occur in a special position. For example, if the colon
(@code{:}) is generally permitted to be part of a symbol name, but the
-architecture specific code special-cases it when occuring as the final
+architecture specific code special-cases it when occurring as the final
character of a symbol (to denote a label), then the macro parameter
replacement code will have no way of knowing that and consider the whole
construct (including the colon) an identifier, and check only this
-identifier for being the subject to parameter substitution. In this
-example, besides the potential of just separating identifier and colon
-by white space, using alternate macro syntax (@xref{Altmacro}.) and
-ampersand (@code{&}) as the character to separate literal text from macro
-parameters (or macro parameters from one another) would provide a way to
-achieve the same effect:
+identifier for being the subject to parameter substitution. So for example
+this macro definition:
+
+@example
+ .macro label l
+\l:
+ .endm
+@end example
+
+might not work as expected. Invoking @samp{label foo} might not create a label
+called @samp{foo} but instead just insert the text @samp{\l:} into the
+assembler source, probably generating an error about an unrecognised
+identifier.
+
+Similarly problems might occur with the period character (@samp{.})
+which is often allowed inside opcode names (and hence identifier names). So
+for example constructing a macro to build an opcode from a base name and a
+length specifier like this:
+
+@example
+ .macro opcode base length
+ \base.\length
+ .endm
+@end example
+
+and invoking it as @samp{opcode store l} will not create a @samp{store.l}
+instruction but instead generate some kind of error as the assembler tries to
+interpret the text @samp{\base.\length}.
+
+There are several possible ways around this problem:
+
+@table @code
+@item Insert white space
+If it is possible to use white space characters then this is the simplest
+solution. eg:
+
+@example
+ .macro label l
+\l :
+ .endm
+@end example
+
+@item Use @samp{\()}
+The string @samp{\()} can be used to separate the end of a macro argument from
+the following text. eg:
+
+@example
+ .macro opcode base length
+ \base\().\length
+ .endm
+@end example
+
+@item Use the alternate macro syntax mode
+In the alternative macro syntax mode the ampersand character (@samp{&}) can be
+used as a separator. eg:
@example
.altmacro
@@ -5027,9 +5165,11 @@ achieve the same effect:
l&:
.endm
@end example
+@end table
-This applies identically to the identifiers used in @code{.irp} (@xref{Irp}.)
-and @code{.irpc} (@xref{Irpc}.).
+Note: this problem of correctly identifying string parameters to pseudo ops
+also applies to the identifiers used in @code{.irp} (@pxref{Irp})
+and @code{.irpc} (@pxref{Irpc}) as well.
@item .endm
@cindex @code{endm} directive
@@ -5071,7 +5211,7 @@ You can write strings delimited in these other ways besides
@table @code
@item '@var{string}'
-You can delimit strings with single-quote charaters.
+You can delimit strings with single-quote characters.
@item <@var{string}>
You can delimit strings with matching angle brackets.
@@ -5090,7 +5230,7 @@ and use the result as a string.
@node Noaltmacro
@section @code{.noaltmacro}
-Disable alternate macro mode. @ref{Altmacro}
+Disable alternate macro mode. @xref{Altmacro}.
@node Nolist
@section @code{.nolist}
@@ -5314,6 +5454,20 @@ warning message; and just takes the lowest order 16 bytes of the bignum.
@cindex integer, 16-byte
@end ifset
+@node Reloc
+@section @code{.reloc @var{offset}, @var{reloc_name}[, @var{expression}]}
+
+@cindex @code{reloc} directive
+Generate a relocation at @var{offset} of type @var{reloc_name} with value
+@var{expression}. If @var{offset} is a number, the relocation is generated in
+the current section. If @var{offset} is an expression that resolves to a
+symbol plus offset, the relocation is generated in the given symbol's section.
+@var{expression}, if present, must resolve to a symbol plus addend or to an
+absolute value, but note that not all targets support an addend. e.g. ELF REL
+targets such as i386 store an addend in the section contents rather than in the
+relocation. This low level interface does not support addends stored in the
+section.
+
@node Rept
@section @code{.rept @var{count}}
@@ -5487,7 +5641,7 @@ ARM) then another character is used instead. For example the ARM port uses the
@code{%} character.
If @var{flags} contains the @code{M} symbol then the @var{type} argument must
-be specified as well as an extra argument - @var{entsize} - like this:
+be specified as well as an extra argument---@var{entsize}---like this:
@smallexample
.section @var{name} , "@var{flags}"M, @@@var{type}, @var{entsize}
@@ -5516,7 +5670,7 @@ indicates that only one copy of this section should be retained
an alias for comdat
@end table
-Note - if both the @var{M} and @var{G} flags are present then the fields for
+Note: if both the @var{M} and @var{G} flags are present then the fields for
the Merge flag should come first, like this:
@smallexample
@@ -5589,7 +5743,7 @@ On Z80 @code{set} is a real instruction, use
@xref{Word,,@code{.word}}.
In some configurations, however, @code{.short} and @code{.word} generate
-numbers of different lengths; @pxref{Machine Dependencies}.
+numbers of different lengths. @xref{Machine Dependencies}.
@end ifset
@ifclear GENERIC
@ifset W16
@@ -5672,7 +5826,7 @@ symbols.
@cindex @code{sleb128} directive
@var{sleb128} stands for ``signed little endian base 128.'' This is a
compact, variable length representation of numbers used by the DWARF
-symbolic debugging format. @xref{Uleb128,@code{.uleb128}}.
+symbolic debugging format. @xref{Uleb128, ,@code{.uleb128}}.
@ifclear no-space-dir
@node Skip
@@ -5964,9 +6118,21 @@ For ELF targets, the @code{.type} directive is used like this:
This sets the type of symbol @var{name} to be either a
function symbol or an object symbol. There are five different syntaxes
supported for the @var{type description} field, in order to provide
-compatibility with various other assemblers. The syntaxes supported are:
+compatibility with various other assemblers.
+
+Because some of the characters used in these syntaxes (such as @samp{@@} and
+@samp{#}) are comment characters for some architectures, some of the syntaxes
+below do not work on all architectures. The first variant will be accepted by
+the GNU assembler on all architectures so that variant should be used for
+maximum portability, if you do not need to assemble your code with other
+assemblers.
+
+The syntaxes supported are:
@smallexample
+ .type <name> STT_FUNCTION
+ .type <name> STT_OBJECT
+
.type <name>,#function
.type <name>,#object
@@ -5978,9 +6144,6 @@ compatibility with various other assemblers. The syntaxes supported are:
.type <name>,"function"
.type <name>,"object"
-
- .type <name> STT_FUNCTION
- .type <name> STT_OBJECT
@end smallexample
@end ifset
@end ifset
@@ -5991,7 +6154,7 @@ compatibility with various other assemblers. The syntaxes supported are:
@cindex @code{uleb128} directive
@var{uleb128} stands for ``unsigned little endian base 128.'' This is a
compact, variable length representation of numbers used by the DWARF
-symbolic debugging format. @xref{Sleb128,@code{.sleb128}}.
+symbolic debugging format. @xref{Sleb128, ,@code{.sleb128}}.
@ifset COFF
@node Val
@@ -6034,7 +6197,7 @@ This directive finds or creates a symbol @code{table} and creates a
This directive finds the symbol @code{child} and finds or creates the symbol
@code{parent} and then creates a @code{VTABLE_INHERIT} relocation for the
parent whose addend is the value of the child symbol. As a special case the
-parent name of @code{0} is treated as refering the @code{*ABS*} section.
+parent name of @code{0} is treated as referring to the @code{*ABS*} section.
@end ifset
@node Warning
@@ -6182,9 +6345,15 @@ subject, see the hardware manufacturer's manual.
@ifset ARM
* ARM-Dependent:: ARM Dependent Features
@end ifset
+@ifset AVR
+* AVR-Dependent:: AVR Dependent Features
+@end ifset
@ifset BFIN
* BFIN-Dependent:: BFIN Dependent Features
@end ifset
+@ifset CR16
+* CR16-Dependent:: CR16 Dependent Features
+@end ifset
@ifset CRIS
* CRIS-Dependent:: CRIS Dependent Features
@end ifset
@@ -6298,10 +6467,18 @@ subject, see the hardware manufacturer's manual.
@include c-arm.texi
@end ifset
+@ifset AVR
+@include c-avr.texi
+@end ifset
+
@ifset BFIN
@include c-bfin.texi
@end ifset
+@ifset CR16
+@include c-cr16.texi
+@end ifset
+
@ifset CRIS
@include c-cris.texi
@end ifset
@@ -6508,8 +6685,10 @@ You can find contact information for many support companies and
individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
distribution.
+@ifset BUGURL
In any event, we also recommend that you send bug reports for @command{@value{AS}}
-to @samp{bug-binutils@@gnu.org}.
+to @value{BUGURL}.
+@end ifset
The fundamental principle of reporting bugs usefully is this:
@strong{report all the facts}. If you are not sure whether to state a
@@ -6583,7 +6762,7 @@ 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{@value{AS}} is out of synch, or you have encountered a bug in the C
+@command{@value{AS}} is out of sync, or you have encountered a bug in the C
library on your system. (This has happened!) Your copy might crash and ours
would not. If you told us to expect a crash, then when ours fails to crash, we
would know that the bug was not happening for us. If you had not told us to
@@ -6736,7 +6915,7 @@ Timothy Wall, Michael Hayes, and Greg Smart contributed to the various tic*
flavors.
David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from Tensilica,
-Inc. added support for Xtensa processors.
+Inc.@: added support for Xtensa processors.
Several engineers at Cygnus Support have also provided many small bug fixes and
configuration enhancements.
@@ -6748,12 +6927,11 @@ intentionally leaving anyone out.
@include fdl.texi
-@node Index
-@unnumbered Index
+@node AS Index
+@unnumbered AS Index
@printindex cp
-@contents
@bye
@c Local Variables:
@c fill-column: 79
diff --git a/gas/doc/asconfig.texi b/gas/doc/asconfig.texi
deleted file mode 100644
index 150685f38fb3..000000000000
--- a/gas/doc/asconfig.texi
+++ /dev/null
@@ -1,90 +0,0 @@
-@c Copyright 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001, 2002,
-@c 2003, 2005
-@c Free Software Foundation, Inc.
-@c This file is part of the documentation for the GAS manual
-
-@c Configuration settings for all-inclusive version of manual
-
-@c switches:------------------------------------------------------------
-@c Properties of the manual
-@c ========================
-@c Discuss all architectures?
-@set ALL-ARCH
-@c A generic form of manual (not tailored to specific target)?
-@set GENERIC
-@c Include text on assembler internals?
-@clear INTERNALS
-@c Many object formats supported in this config?
-@set MULTI-OBJ
-
-@c Object formats of interest
-@c ==========================
-@set AOUT
-@set COFF
-@set ELF
-@set SOM
-
-@c CPUs of interest
-@c ================
-@set ALPHA
-@set ARC
-@set ARM
-@set BFIN
-@set CRIS
-@set D10V
-@set D30V
-@set H8/300
-@set HPPA
-@set I370
-@set I80386
-@set I860
-@set I960
-@set IA64
-@set IP2K
-@set M32C
-@set M32R
-@set xc16x
-@set M68HC11
-@set M680X0
-@set MCORE
-@set MIPS
-@set MMIX
-@set MS1
-@set MSP430
-@set PDP11
-@set PJ
-@set PPC
-@set SH
-@set SPARC
-@set TIC54X
-@set V850
-@set VAX
-@set XTENSA
-@set Z80
-@set Z8000
-
-@c Does this version of the assembler use the difference-table kluge?
-@set DIFF-TBL-KLUGE
-
-@c Do all machines described use IEEE floating point?
-@clear IEEEFLOAT
-
-@c Is a word 32 bits, or 16?
-@clear W32
-@set W16
-
-@c Do symbols have different characters than usual?
-@clear SPECIAL-SYMS
-
-@c strings:------------------------------------------------------------
-@c Name of the assembler:
-@set AS as
-@c Name of C compiler:
-@set GCC gcc
-@c Name of linker:
-@set LD ld
-@c Text for target machine (best not used in generic case; but just in case...)
-@set TARGET machine specific
-@c Name of object format NOT SET in generic version
-@clear OBJ-NAME
-@set top_srcdir ../.././gas
diff --git a/gas/doc/c-arc.texi b/gas/doc/c-arc.texi
index 04544d1e4951..7f8ed6eb4007 100644
--- a/gas/doc/c-arc.texi
+++ b/gas/doc/c-arc.texi
@@ -230,7 +230,7 @@ Determines the kinds of suffixes to be allowed. Valid values are
@code{SUFFIX_FLAG} which indicates the absence or presence of
conditional suffixes and flag setting by the extension instruction.
It is also possible to specify that an instruction sets the flags and
-is conditional by using @code{SUFFIX_CODE} | @code{SUFFIX_FLAG}.
+is condtional by using @code{SUFFIX_CODE} | @code{SUFFIX_FLAG}.
@item @var{syntaxclass}
Determines the syntax class for the instruction. It can have the
@@ -251,7 +251,7 @@ Syntax Class Modifiers are:
@item @code{OP1_MUST_BE_IMM}:
Modifies syntax class SYNTAX_3OP, specifying that the first operand
-of a three-operand instruction must be an immediate (i.e. the result
+of a three-operand instruction must be an immediate (i.e., the result
is discarded). OP1_MUST_BE_IMM is used by bitwise ORing it with
SYNTAX_3OP as given in the example below. This could usually be used
to set the flags using specific instructions and not retain results.
diff --git a/gas/doc/c-arm.texi b/gas/doc/c-arm.texi
index ca0998bea669..8fc2972e5750 100644
--- a/gas/doc/c-arm.texi
+++ b/gas/doc/c-arm.texi
@@ -155,9 +155,9 @@ names are recognized:
@code{armv6z},
@code{armv6zk},
@code{armv7},
-@code{armv7a},
-@code{armv7r},
-@code{armv7m},
+@code{armv7-a},
+@code{armv7-r},
+@code{armv7-m},
@code{iwmmxt}
and
@code{xscale}.
@@ -254,7 +254,7 @@ and
@item -meabi=@var{ver}
This option specifies which EABI version the produced object files should
conform to.
-The following values are recognised:
+The following values are recognized:
@code{gnu},
@code{4}
and
@@ -284,6 +284,7 @@ as position-independent code (PIC).
@menu
* ARM-Chars:: Special Characters
* ARM-Regs:: Register Names
+* ARM-Relocations:: Relocations
@end menu
@node ARM-Chars
@@ -323,7 +324,46 @@ Either @samp{#} or @samp{$} can be used to indicate immediate operands.
@cindex ARM floating point (@sc{ieee})
The ARM family uses @sc{ieee} floating-point numbers.
+@node ARM-Relocations
+@subsection ARM relocation generation
+
+@cindex data relocations, ARM
+@cindex ARM data relocations
+Specific data relocations can be generated by putting the relocation name
+in parentheses after the symbol name. For example:
+
+@smallexample
+ .word foo(TARGET1)
+@end smallexample
+
+This will generate an @samp{R_ARM_TARGET1} relocation against the symbol
+@var{foo}.
+The following relocations are supported:
+@code{GOT},
+@code{GOTOFF},
+@code{TARGET1},
+@code{TARGET2},
+@code{SBREL},
+@code{TLSGD},
+@code{TLSLDM},
+@code{TLSLDO},
+@code{GOTTPOFF}
+and
+@code{TPOFF}.
+
+For compatibility with older toolchains the assembler also accepts
+@code{(PLT)} after branch targets. This will generate the deprecated
+@samp{R_ARM_PLT32} relocation.
+@cindex MOVW and MOVT relocations, ARM
+Relocations for @samp{MOVW} and @samp{MOVT} instructions can be generated
+by prefixing the value with @samp{#:lower16:} and @samp{#:upper16}
+respectively. For example to load the 32-bit address of foo into r0:
+
+@smallexample
+ MOVW r0, #:lower16:foo
+ MOVT r0, #:upper16:foo
+@end smallexample
@node ARM Directives
@section ARM Machine Directives
@@ -351,7 +391,7 @@ example:
@cindex @code{unreq} directive, ARM
@item .unreq @var{alias-name}
This undefines a register alias which was previously defined using the
-@code{req} directive. For example:
+@code{req}, @code{dn} or @code{qn} directives. For example:
@smallexample
foo .req r0
@@ -362,6 +402,36 @@ An error occurs if the name is undefined. Note - this pseudo op can
be used to delete builtin in register name aliases (eg 'r0'). This
should only be done if it is really necessary.
+@cindex @code{dn} and @code{qn} directives, ARM
+@item @var{name} .dn @var{register name} [@var{.type}] [@var{[index]}]
+@item @var{name} .qn @var{register name} [@var{.type}] [@var{[index]}]
+
+The @code{dn} and @code{qn} directives are used to create typed
+and/or indexed register aliases for use in Advanced SIMD Extension
+(Neon) instructions. The former should be used to create aliases
+of double-precision registers, and the latter to create aliases of
+quad-precision registers.
+
+If these directives are used to create typed aliases, those aliases can
+be used in Neon instructions instead of writing types after the mnemonic
+or after each operand. For example:
+
+@smallexample
+ x .dn d2.f32
+ y .dn d3.f32
+ z .dn d4.f32[1]
+ vmul x,y,z
+@end smallexample
+
+This is equivalent to writing the following:
+
+@smallexample
+ vmul.f32 d2,d3,d4[1]
+@end smallexample
+
+Aliases created using @code{dn} or @code{qn} can be destroyed using
+@code{unreq}.
+
@cindex @code{code} directive, ARM
@item .code @code{[16|32]}
This directive selects the instruction set being generated. The value 16
@@ -389,6 +459,9 @@ between Arm and Thumb instructions and should be used even if
interworking is not going to be performed. The presence of this
directive also implies @code{.thumb}
+This directive is not neccessary when generating EABI objects. On these
+targets the encoding is implicit when generating Thumb code.
+
@cindex @code{thumb_set} directive, ARM
@item .thumb_set
This performs the equivalent of a @code{.set} directive in that it
@@ -466,7 +539,7 @@ instruction.
sfmfd f4, 2, [sp]!
@exdent @emph{VFP registers}
.save @{d8, d9, d10@}
- fstmdf sp!, @{d8, d9, d10@}
+ fstmdx sp!, @{d8, d9, d10@}
@exdent @emph{iWMMXt registers}
.save @{wr10, wr11@}
wstrd wr11, [sp, #-8]!
@@ -478,6 +551,26 @@ or
wstrd wr10, [sp, #-8]!
@end smallexample
+@cindex @code{.vsave} directive, ARM
+@item .vsave @var{vfp-reglist}
+Generate unwinder annotations to restore the VFP registers in @var{vfp-reglist}
+using FLDMD. Also works for VFPv3 registers
+that are to be restored using VLDM.
+The format of @var{vfp-reglist} is the same as the corresponding store-multiple
+instruction.
+
+@smallexample
+@exdent @emph{VFP registers}
+ .vsave @{d8, d9, d10@}
+ fstmdd sp!, @{d8, d9, d10@}
+@exdent @emph{VFPv3 registers}
+ .vsave @{d15, d16, d17@}
+ vstm sp!, @{d15, d16, d17@}
+@end smallexample
+
+Since FLDMX and FSTMX are now deprecated, this directive should be
+used in favour of @code{.save} for saving VFP registers for ARMv6 and above.
+
@cindex @code{.pad} directive, ARM
@item .pad #@var{count}
Generate unwinder annotations for a stack adjustment of @var{count} bytes.
@@ -485,8 +578,10 @@ A positive value indicates the function prologue allocated stack space by
decrementing the stack pointer.
@cindex @code{.movsp} directive, ARM
-@item .movsp @var{reg}
-Tell the unwinder that @var{reg} contains the current stack pointer.
+@item .movsp @var{reg} [, #@var{offset}]
+Tell the unwinder that @var{reg} contains an offset from the current
+stack pointer. If @var{offset} is not specified then it is assumed to be
+zero.
@cindex @code{.setfp} directive, ARM
@item .setfp @var{fpreg}, @var{spreg} [, #@var{offset}]
@@ -523,6 +618,12 @@ for the @option{-mcpu} commandline option.
Select the target architecture. Valid values for @var{name} are the same as
for the @option{-march} commandline option.
+@cindex @code{.object_arch} directive, ARM
+@item .object_arch @var{name}
+Override the architecture recorded in the EABI object attribute section.
+Valid values for @var{name} are the same as for the @code{.arch} directive.
+Typically this is useful when code uses runtime detection of CPU features.
+
@cindex @code{.fpu} directive, ARM
@item .fpu @var{name}
Select the floating point unit to assemble for. Valid values for @var{name}
diff --git a/gas/doc/c-avr.texi b/gas/doc/c-avr.texi
new file mode 100644
index 000000000000..9bf743d77d35
--- /dev/null
+++ b/gas/doc/c-avr.texi
@@ -0,0 +1,364 @@
+@c Copyright 2006
+@c Free Software Foundation, Inc.
+@c This is part of the GAS manual.
+@c For copying conditions, see the file as.texinfo.
+
+@ifset GENERIC
+@page
+@node AVR-Dependent
+@chapter AVR Dependent Features
+@end ifset
+
+@ifclear GENERIC
+@node Machine Dependencies
+@chapter AVR Dependent Features
+@end ifclear
+
+@cindex AVR support
+@menu
+* AVR Options:: Options
+* AVR Syntax:: Syntax
+* AVR Opcodes:: Opcodes
+@end menu
+
+@node AVR Options
+@section Options
+@cindex AVR options (none)
+@cindex options for AVR (none)
+
+@table @code
+
+@cindex @code{-mmcu=} command line option, AVR
+@item -mmcu=@var{mcu}
+Specify ATMEL AVR instruction set or MCU type.
+
+Instruction set avr1 is for the minimal AVR core, not supported by the C
+compiler, only for assembler programs (MCU types: at90s1200, attiny10,
+attiny11, attiny12, attiny15, attiny28).
+
+Instruction set avr2 (default) is for the classic AVR core with up to
+8K program memory space (MCU types: at90s2313, at90s2323, attiny22,
+attiny26, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
+at90s8515, at90c8534, at90s8535, at86rf401, attiny13, attiny2313,
+attiny261, attiny461, attiny861, attiny24, attiny44, attiny84, attiny25,
+attiny45, attiny85).
+
+Instruction set avr3 is for the classic AVR core with up to 128K program
+memory space (MCU types: atmega103, atmega603, at43usb320, at43usb355,
+at76c711).
+
+Instruction set avr4 is for the enhanced AVR core with up to 8K program
+memory space (MCU types: atmega48, atmega8, atmega83, atmega85, atmega88,
+atmega8515, atmega8535, atmega8hva, at90pwm1, at90pwm2, at90pwm3).
+
+Instruction set avr5 is for the enhanced AVR core with up to 128K program
+memory space (MCU types: atmega16, atmega161, atmega162, atmega163,
+atmega164p, atmega165, atmega165p, atmega168, atmega169, atmega169p,
+atmega32, atmega323, atmega324p, atmega325, atmega325p, atmega329,
+atmega329p, atmega3250, atmega3250p, atmega3290, atmega3290p, atmega406,
+atmega64, atmega640, atmega644, atmega644p, atmega128, atmega1280,
+atmega1281, atmega645, atmega649, atmega6450, atmega6490, atmega16hva,
+at90can32, at90can64, at90can128, at90usb82, at90usb162, at90usb646,
+at90usb647, at90usb1286, at90usb1287, at94k).
+
+Instruction set avr6 is for the enhanced AVR core with 256K program
+memory space (MCU types: atmega2560, atmega2561).
+
+@cindex @code{-mall-opcodes} command line option, AVR
+@item -mall-opcodes
+Accept all AVR opcodes, even if not supported by @code{-mmcu}.
+
+@cindex @code{-mno-skip-bug} command line option, AVR
+@item -mno-skip-bug
+This option disable warnings for skipping two-word instructions.
+
+@cindex @code{-mno-wrap} command line option, AVR
+@item -mno-wrap
+This option reject @code{rjmp/rcall} instructions with 8K wrap-around.
+
+@end table
+
+
+@node AVR Syntax
+@section Syntax
+@menu
+* AVR-Chars:: Special Characters
+* AVR-Regs:: Register Names
+* AVR-Modifiers:: Relocatable Expression Modifiers
+@end menu
+
+@node AVR-Chars
+@subsection Special Characters
+
+@cindex line comment character, AVR
+@cindex AVR line comment character
+
+The presence of a @samp{;} on a line indicates the start of a comment
+that extends to the end of the current line. If a @samp{#} appears as
+the first character of a line, the whole line is treated as a comment.
+
+@cindex line separator, AVR
+@cindex statement separator, AVR
+@cindex AVR line separator
+
+The @samp{$} character can be used instead of a newline to separate
+statements.
+
+@node AVR-Regs
+@subsection Register Names
+
+@cindex AVR register names
+@cindex register names, AVR
+
+The AVR has 32 x 8-bit general purpose working registers @samp{r0},
+@samp{r1}, ... @samp{r31}.
+Six of the 32 registers can be used as three 16-bit indirect address
+register pointers for Data Space addressing. One of the these address
+pointers can also be used as an address pointer for look up tables in
+Flash program memory. These added function registers are the 16-bit
+@samp{X}, @samp{Y} and @samp{Z} - registers.
+
+@smallexample
+X = @r{r26:r27}
+Y = @r{r28:r29}
+Z = @r{r30:r31}
+@end smallexample
+
+@node AVR-Modifiers
+@subsection Relocatable Expression Modifiers
+
+@cindex AVR modifiers
+@cindex syntax, AVR
+
+The assembler supports several modifiers when using relocatable addresses
+in AVR instruction operands. The general syntax is the following:
+
+@smallexample
+modifier(relocatable-expression)
+@end smallexample
+
+@table @code
+@cindex symbol modifiers
+
+@item lo8
+
+This modifier allows you to use bits 0 through 7 of
+an address expression as 8 bit relocatable expression.
+
+@item hi8
+
+This modifier allows you to use bits 7 through 15 of an address expression
+as 8 bit relocatable expression. This is useful with, for example, the
+AVR @samp{ldi} instruction and @samp{lo8} modifier.
+
+For example
+
+@smallexample
+ldi r26, lo8(sym+10)
+ldi r27, hi8(sym+10)
+@end smallexample
+
+@item hh8
+
+This modifier allows you to use bits 16 through 23 of
+an address expression as 8 bit relocatable expression.
+Also, can be useful for loading 32 bit constants.
+
+@item hlo8
+
+Synonym of @samp{hh8}.
+
+@item hhi8
+
+This modifier allows you to use bits 24 through 31 of
+an expression as 8 bit expression. This is useful with, for example, the
+AVR @samp{ldi} instruction and @samp{lo8}, @samp{hi8}, @samp{hlo8},
+@samp{hhi8}, modifier.
+
+For example
+
+@smallexample
+ldi r26, lo8(285774925)
+ldi r27, hi8(285774925)
+ldi r28, hlo8(285774925)
+ldi r29, hhi8(285774925)
+; r29,r28,r27,r26 = 285774925
+@end smallexample
+
+@item pm_lo8
+
+This modifier allows you to use bits 0 through 7 of
+an address expression as 8 bit relocatable expression.
+This modifier useful for addressing data or code from
+Flash/Program memory. The using of @samp{pm_lo8} similar
+to @samp{lo8}.
+
+@item pm_hi8
+
+This modifier allows you to use bits 8 through 15 of
+an address expression as 8 bit relocatable expression.
+This modifier useful for addressing data or code from
+Flash/Program memory.
+
+@item pm_hh8
+
+This modifier allows you to use bits 15 through 23 of
+an address expression as 8 bit relocatable expression.
+This modifier useful for addressing data or code from
+Flash/Program memory.
+
+@end table
+
+@node AVR Opcodes
+@section Opcodes
+
+@cindex AVR opcode summary
+@cindex opcode summary, AVR
+@cindex mnemonics, AVR
+@cindex instruction summary, AVR
+For detailed information on the AVR machine instruction set, see
+@url{www.atmel.com/products/AVR}.
+
+@code{@value{AS}} implements all the standard AVR opcodes.
+The following table summarizes the AVR opcodes, and their arguments.
+
+@smallexample
+@i{Legend:}
+ r @r{any register}
+ d @r{`ldi' register (r16-r31)}
+ v @r{`movw' even register (r0, r2, ..., r28, r30)}
+ a @r{`fmul' register (r16-r23)}
+ w @r{`adiw' register (r24,r26,r28,r30)}
+ e @r{pointer registers (X,Y,Z)}
+ b @r{base pointer register and displacement ([YZ]+disp)}
+ z @r{Z pointer register (for [e]lpm Rd,Z[+])}
+ M @r{immediate value from 0 to 255}
+ n @r{immediate value from 0 to 255 ( n = ~M ). Relocation impossible}
+ s @r{immediate value from 0 to 7}
+ P @r{Port address value from 0 to 63. (in, out)}
+ p @r{Port address value from 0 to 31. (cbi, sbi, sbic, sbis)}
+ K @r{immediate value from 0 to 63 (used in `adiw', `sbiw')}
+ i @r{immediate value}
+ l @r{signed pc relative offset from -64 to 63}
+ L @r{signed pc relative offset from -2048 to 2047}
+ h @r{absolute code address (call, jmp)}
+ S @r{immediate value from 0 to 7 (S = s << 4)}
+ ? @r{use this opcode entry if no parameters, else use next opcode entry}
+
+1001010010001000 clc
+1001010011011000 clh
+1001010011111000 cli
+1001010010101000 cln
+1001010011001000 cls
+1001010011101000 clt
+1001010010111000 clv
+1001010010011000 clz
+1001010000001000 sec
+1001010001011000 seh
+1001010001111000 sei
+1001010000101000 sen
+1001010001001000 ses
+1001010001101000 set
+1001010000111000 sev
+1001010000011000 sez
+100101001SSS1000 bclr S
+100101000SSS1000 bset S
+1001010100001001 icall
+1001010000001001 ijmp
+1001010111001000 lpm ?
+1001000ddddd010+ lpm r,z
+1001010111011000 elpm ?
+1001000ddddd011+ elpm r,z
+0000000000000000 nop
+1001010100001000 ret
+1001010100011000 reti
+1001010110001000 sleep
+1001010110011000 break
+1001010110101000 wdr
+1001010111101000 spm
+000111rdddddrrrr adc r,r
+000011rdddddrrrr add r,r
+001000rdddddrrrr and r,r
+000101rdddddrrrr cp r,r
+000001rdddddrrrr cpc r,r
+000100rdddddrrrr cpse r,r
+001001rdddddrrrr eor r,r
+001011rdddddrrrr mov r,r
+100111rdddddrrrr mul r,r
+001010rdddddrrrr or r,r
+000010rdddddrrrr sbc r,r
+000110rdddddrrrr sub r,r
+001001rdddddrrrr clr r
+000011rdddddrrrr lsl r
+000111rdddddrrrr rol r
+001000rdddddrrrr tst r
+0111KKKKddddKKKK andi d,M
+0111KKKKddddKKKK cbr d,n
+1110KKKKddddKKKK ldi d,M
+11101111dddd1111 ser d
+0110KKKKddddKKKK ori d,M
+0110KKKKddddKKKK sbr d,M
+0011KKKKddddKKKK cpi d,M
+0100KKKKddddKKKK sbci d,M
+0101KKKKddddKKKK subi d,M
+1111110rrrrr0sss sbrc r,s
+1111111rrrrr0sss sbrs r,s
+1111100ddddd0sss bld r,s
+1111101ddddd0sss bst r,s
+10110PPdddddPPPP in r,P
+10111PPrrrrrPPPP out P,r
+10010110KKddKKKK adiw w,K
+10010111KKddKKKK sbiw w,K
+10011000pppppsss cbi p,s
+10011010pppppsss sbi p,s
+10011001pppppsss sbic p,s
+10011011pppppsss sbis p,s
+111101lllllll000 brcc l
+111100lllllll000 brcs l
+111100lllllll001 breq l
+111101lllllll100 brge l
+111101lllllll101 brhc l
+111100lllllll101 brhs l
+111101lllllll111 brid l
+111100lllllll111 brie l
+111100lllllll000 brlo l
+111100lllllll100 brlt l
+111100lllllll010 brmi l
+111101lllllll001 brne l
+111101lllllll010 brpl l
+111101lllllll000 brsh l
+111101lllllll110 brtc l
+111100lllllll110 brts l
+111101lllllll011 brvc l
+111100lllllll011 brvs l
+111101lllllllsss brbc s,l
+111100lllllllsss brbs s,l
+1101LLLLLLLLLLLL rcall L
+1100LLLLLLLLLLLL rjmp L
+1001010hhhhh111h call h
+1001010hhhhh110h jmp h
+1001010rrrrr0101 asr r
+1001010rrrrr0000 com r
+1001010rrrrr1010 dec r
+1001010rrrrr0011 inc r
+1001010rrrrr0110 lsr r
+1001010rrrrr0001 neg r
+1001000rrrrr1111 pop r
+1001001rrrrr1111 push r
+1001010rrrrr0111 ror r
+1001010rrrrr0010 swap r
+00000001ddddrrrr movw v,v
+00000010ddddrrrr muls d,d
+000000110ddd0rrr mulsu a,a
+000000110ddd1rrr fmul a,a
+000000111ddd0rrr fmuls a,a
+000000111ddd1rrr fmulsu a,a
+1001001ddddd0000 sts i,r
+1001000ddddd0000 lds r,i
+10o0oo0dddddbooo ldd r,b
+100!000dddddee-+ ld r,e
+10o0oo1rrrrrbooo std b,r
+100!001rrrrree-+ st e,r
+1001010100011001 eicall
+1001010000011001 eijmp
+@end smallexample
diff --git a/gas/doc/c-bfin.texi b/gas/doc/c-bfin.texi
index dcf649a2b890..0b8ae1d9f3e4 100644
--- a/gas/doc/c-bfin.texi
+++ b/gas/doc/c-bfin.texi
@@ -97,9 +97,9 @@ The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7) that
normally contain data for manipulation. These are abbreviated as
D-register or Dreg. Data registers can be accessed as 32-bit registers
or as two independent 16-bit registers. The least significant 16 bits
-of each register is called the "low" half and is desginated with ".L"
+of each register is called the "low" half and is designated with ".L"
following the register name. The most significant 16 bits are called
-the "high" half and is designated with ".H". following the name.
+the "high" half and is designated with ".H" following the name.
@smallexample
R7.L, r2.h, r4.L, R0.H
diff --git a/gas/doc/c-cr16.texi b/gas/doc/c-cr16.texi
new file mode 100644
index 000000000000..4748d5679ec4
--- /dev/null
+++ b/gas/doc/c-cr16.texi
@@ -0,0 +1,80 @@
+@c Copyright 2007 Free Software Foundation, Inc.
+@c This is part of the GAS manual.
+@c For copying conditions, see the file as.texinfo.
+
+@ifset GENERIC
+@page
+@node CR16-Dependent
+@chapter CR16 Dependent Features
+@end ifset
+@ifclear GENERIC
+@node Machine Dependencies
+@chapter CR16 Dependent Features
+@end ifclear
+
+@cindex CR16 support
+@menu
+* CR16 Operand Qualifiers:: CR16 Machine Operand Qualifiers
+@end menu
+
+@node CR16 Operand Qualifiers
+@section CR16 Operand Qualifiers
+@cindex CR16 Operand Qualifiers
+
+The National Semiconductor CR16 target of @code{@value{AS}} has a few machine dependent operand qualifiers.
+
+Operand expression type qualifier is an optional field in the instruction operand, to determines the type of the expression field of an operand. The @code{@@} is required. CR16 architecture uses one of the following expression qualifiers:
+
+@table @code
+@item s
+- @code{Specifies expression operand type as small}
+@item m
+- @code{Specifies expression operand type as medium}
+@item l
+- @code{Specifies expression operand type as large}
+@item c
+- @code{Specifies the CR16 Assembler generates a relocation entry for the operand, where pc has implied bit, the expression is adjusted accordingly. The linker uses the relocation entry to update the operand address at link time.}
+@end table
+
+CR16 target operand qualifiers and its size (in bits):
+
+@table @samp
+@item Immediate Operand
+- s ---- 4 bits
+@item
+- m ---- 16 bits, for movb and movw instructions.
+@item
+- m ---- 20 bits, movd instructions.
+@item
+- l ---- 32 bits
+
+@item Absolute Operand
+- s ---- Illegal specifier for this operand.
+@item
+- m ---- 20 bits, movd instructions.
+
+@item Displacement Operand
+- s ---- 8 bits
+@item
+- m ---- 16 bits
+@item
+- l ---- 24 bits
+@end table
+
+For example:
+@example
+1 @code{movw $_myfun@@c,r1}
+
+ This loads the address of _myfun, shifted right by 1, into r1.
+
+2 @code{movd $_myfun@@c,(r2,r1)}
+
+ This loads the address of _myfun, shifted right by 1, into register-pair r2-r1.
+
+3 @code{_myfun_ptr:}
+ @code{.long _myfun@@c}
+ @code{loadd _myfun_ptr, (r1,r0)}
+ @code{jal (r1,r0)}
+
+ This .long directive, the address of _myfunc, shifted right by 1 at link time.
+@end example
diff --git a/gas/doc/c-i386.texi b/gas/doc/c-i386.texi
index 81039c4dbe72..48b251a25fc0 100644
--- a/gas/doc/c-i386.texi
+++ b/gas/doc/c-i386.texi
@@ -76,6 +76,49 @@ character, which means that it cannot be used in expressions. The
not disable @samp{/} at the beginning of a line starting a comment, or
affect using @samp{#} for starting a comment.
+@cindex @samp{-march=} option, i386
+@cindex @samp{-march=} option, x86-64
+@item -march=@var{CPU}
+This option specifies an instruction set architecture for generating
+instructions. The following architectures are recognized:
+@code{i8086},
+@code{i186},
+@code{i286},
+@code{i386},
+@code{i486},
+@code{i586},
+@code{i686},
+@code{pentium},
+@code{pentiumpro},
+@code{pentiumii},
+@code{pentiumiii},
+@code{pentium4},
+@code{prescott},
+@code{nocona},
+@code{core},
+@code{core2},
+@code{k6},
+@code{k6_2},
+@code{athlon},
+@code{sledgehammer},
+@code{opteron},
+@code{k8},
+@code{generic32} and
+@code{generic64}.
+
+This option only affects instructions generated by the assembler. The
+@code{.arch} directive will take precedent.
+
+@cindex @samp{-mtune=} option, i386
+@cindex @samp{-mtune=} option, x86-64
+@item -mtune=@var{CPU}
+This option specifies a processor to optimize for. When used in
+conjunction with the @option{-march} option, only instructions
+of the processor specified by the @option{-march} option will be
+generated.
+
+Valid @var{CPU} values are identical to @option{-march=@var{CPU}}.
+
@end table
@node i386-Syntax
@@ -604,7 +647,7 @@ then stores the result in the 4 byte location @samp{mem})
@code{@value{AS}} supports Intel's MMX instruction set (SIMD
instructions for integer data), available on Intel's Pentium MMX
processors and Pentium II processors, AMD's K6 and K6-2 processors,
-Cyrix' M2 processor, and probably others. It also supports AMD's 3DNow!
+Cyrix' M2 processor, and probably others. It also supports AMD's 3DNow!@:
instruction set (SIMD instructions for 32-bit floating point data)
available on AMD's K6-2 processor and possibly others in the future.
@@ -667,7 +710,7 @@ value @samp{4} onto the stack, decrementing @samp{%esp} by 2.
@end smallexample
The same code in a 16-bit code section would generate the machine
-opcode bytes @samp{6a 04} (ie. without the operand size prefix), which
+opcode bytes @samp{6a 04} (i.e., without the operand size prefix), which
is correct since the processor default operand size is assumed to be 16
bits in a 16-bit code section.
@@ -709,8 +752,13 @@ supported on the CPU specified. The choices for @var{cpu_type} are:
@item @samp{i8086} @tab @samp{i186} @tab @samp{i286} @tab @samp{i386}
@item @samp{i486} @tab @samp{i586} @tab @samp{i686} @tab @samp{pentium}
@item @samp{pentiumpro} @tab @samp{pentiumii} @tab @samp{pentiumiii} @tab @samp{pentium4}
-@item @samp{k6} @tab @samp{athlon} @samp{sledgehammer}
-@item @samp{.mmx} @samp{.sse} @samp{.sse2} @samp{.sse3} @samp{.3dnow}
+@item @samp{prescott} @tab @samp{nocona} @tab @samp{core} @tab @samp{core2}
+@item @samp{amdfam10}
+@item @samp{k6} @tab @samp{athlon} @tab @samp{sledgehammer} @tab @samp{k8}
+@item @samp{.mmx} @tab @samp{.sse} @tab @samp{.sse2} @tab @samp{.sse3}
+@item @samp{.ssse3} @tab @samp{.sse4.1} @tab @samp{.sse4.2} @tab @samp{.sse4}
+@item @samp{.sse4a} @tab @samp{.3dnow} @tab @samp{.3dnowa} @tab @samp{.padlock}
+@item @samp{.pacifica} @tab @samp{.svme} @tab @samp{.abm}
@end multitable
Apart from the warning, there are only two other effects on
diff --git a/gas/doc/c-i960.texi b/gas/doc/c-i960.texi
index 5dca1cf9c111..4d75bdfb8f7b 100644
--- a/gas/doc/c-i960.texi
+++ b/gas/doc/c-i960.texi
@@ -69,7 +69,7 @@ Label: @var{BR}
@end smallexample
The counter following a branch records the number of times that branch
-was @emph{not} taken; the differenc between the two counters is the
+was @emph{not} taken; the difference between the two counters is the
number of times the branch @emph{was} taken.
@cindex @code{gbr960}, i960 postprocessor
diff --git a/gas/doc/c-m32r.texi b/gas/doc/c-m32r.texi
index 30cd355aede3..218ed250a018 100644
--- a/gas/doc/c-m32r.texi
+++ b/gas/doc/c-m32r.texi
@@ -65,7 +65,7 @@ configured.
@item -EL
@cindex @code{-EL} option, M32R
-This is a synonum for @emph{-little}.
+This is a synonym for @emph{-little}.
@item -big
@cindex @code{-big} option, M32R
@@ -110,7 +110,7 @@ implies @emph{-parallel}.
Instructs @code{@value{AS}} to produce warning messages when
questionable parallel instructions are encountered. This option is
enabled by default, but @code{@value{GCC}} disables it when it invokes
-@code{@value{AS}} directly. Questionable instructions are those whoes
+@code{@value{AS}} directly. Questionable instructions are those whose
behaviour would be different if they were executed sequentially. For
example the code fragment @samp{mv r1, r2 || mv r3, r1} produces a
different result from @samp{mv r1, r2 \n mv r3, r1} since the former
@@ -135,7 +135,7 @@ option.
@item -ignore-parallel-conflicts
@cindex @samp{-ignore-parallel-conflicts} option, M32RX
This option tells the assembler's to stop checking parallel
-instructions for contraint violations. This ability is provided for
+instructions for constraint violations. This ability is provided for
hardware vendors testing chip designs and should not be used under
normal circumstances.
@@ -157,8 +157,8 @@ option.
@item -warn-unmatched-high
@cindex @samp{-warn-unmatched-high} option, M32R
This option tells the assembler to produce a warning message if a
-@code{.high} pseudo op is encountered without a mathcing @code{.low}
-pseudo op. The presence of such an unmatches pseudo op usually
+@code{.high} pseudo op is encountered without a matching @code{.low}
+pseudo op. The presence of such an unmatched pseudo op usually
indicates a programming error.
@item -no-warn-unmatched-high
@@ -280,14 +280,14 @@ instructions in the M32R2 ISA as well as the ordinary M32R ISA.
The directive performs a similar thing as the @emph{-little} command
line option. It tells the assembler to start producing little-endian
code and data. This option should be used with care as producing
-mixed-endian binary files is frought with danger.
+mixed-endian binary files is fraught with danger.
@cindex @code{.big} directive, M32RX
@item .big
The directive performs a similar thing as the @emph{-big} command
line option. It tells the assembler to start producing big-endian
code and data. This option should be used with care as producing
-mixed-endian binary files is frought with danger.
+mixed-endian binary files is fraught with danger.
@end table
@@ -328,7 +328,7 @@ instructions.
@item unknown instruction @samp{...}
This message is produced when the assembler encounters an instruction
-which it does not recognise.
+which it does not recognize.
@item only the NOP instruction can be issued in parallel on the m32r
This message is produced when the assembler encounters a parallel
diff --git a/gas/doc/c-m68hc11.texi b/gas/doc/c-m68hc11.texi
index a41d6fcac07d..e79182386e9f 100644
--- a/gas/doc/c-m68hc11.texi
+++ b/gas/doc/c-m68hc11.texi
@@ -82,9 +82,9 @@ mode addressing. When it is used with the direct page mode,
This option prevents @code{@value{AS}} from doing this, and the wrong
usage of the direct page mode will raise an error.
-@cindex @samp{--short-branchs}
-@item --short-branchs
-The @samp{--short-branchs} option turns off the translation of
+@cindex @samp{--short-branches}
+@item --short-branches
+The @samp{--short-branches} option turns off the translation of
relative branches into absolute branches when the branch offset is
out of range. By default @code{@value{AS}} transforms the relative
branch (@samp{bsr}, @samp{bgt}, @samp{bge}, @samp{beq}, @samp{bne},
@@ -93,15 +93,15 @@ branch (@samp{bsr}, @samp{bgt}, @samp{bge}, @samp{beq}, @samp{bne},
an absolute branch when the offset is out of the -128 .. 127 range.
In that case, the @samp{bsr} instruction is translated into a
@samp{jsr}, the @samp{bra} instruction is translated into a
-@samp{jmp} and the conditional branchs instructions are inverted and
+@samp{jmp} and the conditional branches instructions are inverted and
followed by a @samp{jmp}. This option disables these translations
and @code{@value{AS}} will generate an error if a relative branch
is out of range. This option does not affect the optimization
associated to the @samp{jbra}, @samp{jbsr} and @samp{jbXX} pseudo opcodes.
-@cindex @samp{--force-long-branchs}
-@item --force-long-branchs
-The @samp{--force-long-branchs} option forces the translation of
+@cindex @samp{--force-long-branches}
+@item --force-long-branches
+The @samp{--force-long-branches} option forces the translation of
relative branches into absolute branches. This option does not affect
the optimization associated to the @samp{jbra}, @samp{jbsr} and
@samp{jbXX} pseudo opcodes.
@@ -382,7 +382,7 @@ Certain pseudo opcodes are permitted for branch instructions.
They expand to the shortest branch instruction that reach the
target. Generally these mnemonics are made by prepending @samp{j} to
the start of Motorola mnemonic. These pseudo opcodes are not affected
-by the @samp{--short-branchs} or @samp{--force-long-branchs} options.
+by the @samp{--short-branches} or @samp{--force-long-branches} options.
The following table summarizes the pseudo-operations.
@@ -390,7 +390,7 @@ The following table summarizes the pseudo-operations.
Displacement Width
+-------------------------------------------------------------+
| Options |
- | --short-branchs --force-long-branchs |
+ | --short-branches --force-long-branches |
+--------------------------+----------------------------------+
Op |BYTE WORD | BYTE WORD |
+--------------------------+----------------------------------+
diff --git a/gas/doc/c-m68k.texi b/gas/doc/c-m68k.texi
index d4da2a1ea452..3176f94dcbd9 100644
--- a/gas/doc/c-m68k.texi
+++ b/gas/doc/c-m68k.texi
@@ -45,7 +45,8 @@ architectures are recognized:
@code{cpu32},
@code{isaa},
@code{isaaplus},
-@code{isab} and
+@code{isab},
+@code{isac} and
@code{cfv4e}.
@@ -284,7 +285,7 @@ The following addressing modes are understood:
@item Address Register
@samp{%a0} through @samp{%a7}@*
-@samp{%a7} is also known as @samp{%sp}, i.e. the Stack Pointer. @code{%a6}
+@samp{%a7} is also known as @samp{%sp}, i.e., the Stack Pointer. @code{%a6}
is also known as @samp{%fp}, the Frame Pointer.
@item Address Register Indirect
@@ -346,7 +347,7 @@ The following additional addressing modes are understood:
@table @dfn
@item Address Register Indirect
@samp{(%a0)} through @samp{(%a7)}@*
-@samp{%a7} is also known as @samp{%sp}, i.e. the Stack Pointer. @code{%a6}
+@samp{%a7} is also known as @samp{%sp}, i.e., the Stack Pointer. @code{%a6}
is also known as @samp{%fp}, the Frame Pointer.
@item Address Register Postincrement
@@ -445,11 +446,11 @@ This directive is identical to a @code{.space} directive.
@cindex @code{arch} directive, M680x0
@item .arch @var{name}
-Select the target architecture and extension features. Valid valuse
+Select the target architecture and extension features. Valid values
for @var{name} are the same as for the @option{-march} command line
option. This directive cannot be specified after
any instructions have been assembled. If it is given multiple times,
-or in conjuction with the @option{-march} option, all uses must be for
+or in conjunction with the @option{-march} option, all uses must be for
the same architecture and extension set.
@cindex @code{cpu} directive, M680x0
@@ -458,7 +459,7 @@ Select the target cpu. Valid valuse
for @var{name} are the same as for the @option{-mcpu} command line
option. This directive cannot be specified after
any instructions have been assembled. If it is given multiple times,
-or in conjuction with the @option{-mopt} option, all uses must be for
+or in conjunction with the @option{-mopt} option, all uses must be for
the same cpu.
@end table
diff --git a/gas/doc/c-mips.texi b/gas/doc/c-mips.texi
index 3c70ff29bc08..f92cb0098d55 100644
--- a/gas/doc/c-mips.texi
+++ b/gas/doc/c-mips.texi
@@ -60,6 +60,18 @@ little-endian output at run time (unlike the other @sc{gnu} development
tools, which must be configured for one or the other). Use @samp{-EB}
to select big-endian output, and @samp{-EL} for little-endian.
+@item -KPIC
+@cindex PIC selection, MIPS
+@cindex @option{-KPIC} option, MIPS
+Generate SVR4-style PIC. This option tells the assembler to generate
+SVR4-style position-independent macro expansions. It also tells the
+assembler to mark the output file as PIC.
+
+@item -mvxworks-pic
+@cindex @option{-mvxworks-pic} option, MIPS
+Generate VxWorks PIC. This option tells the assembler to generate
+VxWorks-style position-independent macro expansions.
+
@cindex MIPS architecture options
@item -mips1
@itemx -mips2
@@ -91,21 +103,38 @@ flags force a certain group of registers to be treated as 32 bits wide at
all times. @samp{-mgp32} controls the size of general-purpose registers
and @samp{-mfp32} controls the size of floating-point registers.
+The @code{.set gp=32} and @code{.set fp=32} directives allow the size
+of registers to be changed for parts of an object. The default value is
+restored by @code{.set gp=default} and @code{.set fp=default}.
+
On some MIPS variants there is a 32-bit mode flag; when this flag is
set, 64-bit instructions generate a trap. Also, some 32-bit OSes only
save the 32-bit registers on a context switch, so it is essential never
to use the 64-bit registers.
@item -mgp64
-Assume that 64-bit general purpose registers are available. This is
-provided in the interests of symmetry with -gp32.
+@itemx -mfp64
+Assume that 64-bit registers are available. This is provided in the
+interests of symmetry with @samp{-mgp32} and @samp{-mfp32}.
+
+The @code{.set gp=64} and @code{.set fp=64} directives allow the size
+of registers to be changed for parts of an object. The default value is
+restored by @code{.set gp=default} and @code{.set fp=default}.
@item -mips16
@itemx -no-mips16
Generate code for the MIPS 16 processor. This is equivalent to putting
-@samp{.set mips16} at the start of the assembly file. @samp{-no-mips16}
+@code{.set mips16} at the start of the assembly file. @samp{-no-mips16}
turns off this option.
+@item -msmartmips
+@itemx -mno-smartmips
+Enables the SmartMIPS extensions to the MIPS32 instruction set, which
+provides a number of new instructions which target smartcard and
+cryptographic applications. This is equivalent to putting
+@code{.set smartmips} at the start of the assembly file.
+@samp{-mno-smartmips} turns off this option.
+
@item -mips3d
@itemx -no-mips3d
Generate code for the MIPS-3D Application Specific Extension.
@@ -120,10 +149,17 @@ This tells the assembler to accept MDMX instructions.
@item -mdsp
@itemx -mno-dsp
-Generate code for the DSP Application Specific Extension.
-This tells the assembler to accept DSP instructions.
+Generate code for the DSP Release 1 Application Specific Extension.
+This tells the assembler to accept DSP Release 1 instructions.
@samp{-mno-dsp} turns off this option.
+@item -mdspr2
+@itemx -mno-dspr2
+Generate code for the DSP Release 2 Application Specific Extension.
+This option implies -mdsp.
+This tells the assembler to accept DSP Release 2 instructions.
+@samp{-mno-dspr2} turns off this option.
+
@item -mmt
@itemx -mno-mt
Generate code for the MT Application Specific Extension.
@@ -202,8 +238,34 @@ rm7000,
rm9000,
10000,
12000,
-mips32-4k,
-sb1
+4kc,
+4km,
+4kp,
+4ksc,
+4kec,
+4kem,
+4kep,
+4ksd,
+m4k,
+m4kp,
+24kc,
+24kf,
+24kx,
+24kec,
+24kef,
+24kex,
+34kc,
+34kf,
+34kx,
+74kc,
+74kf,
+74kx,
+5kc,
+5kf,
+20kc,
+25kf,
+sb1,
+sb1a
@end quotation
@item -mtune=@var{cpu}
@@ -391,13 +453,21 @@ assembly. @code{.set mips@var{n}} affects not only which instructions
are permitted, but also how certain macros are expanded. @code{.set
mips0} restores the @sc{isa} level to its original level: either the
level you selected with command line options, or the default for your
-configuration. You can use this feature to permit specific @sc{r4000}
+configuration. You can use this feature to permit specific @sc{mips3}
instructions while assembling in 32 bit mode. Use this directive with
care!
-The directive @samp{.set mips16} puts the assembler into MIPS 16 mode,
+@cindex MIPS CPU override
+@kindex @code{.set arch=@var{cpu}}
+The @code{.set arch=@var{cpu}} directive provides even finer control.
+It changes the effective CPU target and allows the assembler to use
+instructions specific to a particular CPU. All CPUs supported by the
+@samp{-march} command line option are also selectable by this directive.
+The original value is restored by @code{.set arch=default}.
+
+The directive @code{.set mips16} puts the assembler into MIPS 16 mode,
in which it will assemble instructions for the MIPS 16 processor. Use
-@samp{.set nomips16} to return to normal 32 bit mode.
+@code{.set nomips16} to return to normal 32 bit mode.
Traditional @sc{mips} assemblers do not support this directive.
@@ -407,10 +477,10 @@ Traditional @sc{mips} assemblers do not support this directive.
@kindex @code{.set autoextend}
@kindex @code{.set noautoextend}
By default, MIPS 16 instructions are automatically extended to 32 bits
-when necessary. The directive @samp{.set noautoextend} will turn this
-off. When @samp{.set noautoextend} is in effect, any 32 bit instruction
-must be explicitly extended with the @samp{.e} modifier (e.g.,
-@samp{li.e $4,1000}). The directive @samp{.set autoextend} may be used
+when necessary. The directive @code{.set noautoextend} will turn this
+off. When @code{.set noautoextend} is in effect, any 32 bit instruction
+must be explicitly extended with the @code{.e} modifier (e.g.,
+@code{li.e $4,1000}). The directive @code{.set autoextend} may be used
to once again automatically extend instructions when necessary.
This directive is only meaningful when in MIPS 16 mode. Traditional
@@ -455,6 +525,15 @@ from the MIPS-3D Application Specific Extension from that point on
in the assembly. The @code{.set nomips3d} directive prevents MIPS-3D
instructions from being accepted.
+@cindex SmartMIPS instruction generation override
+@kindex @code{.set smartmips}
+@kindex @code{.set nosmartmips}
+The directive @code{.set smartmips} makes the assembler accept
+instructions from the SmartMIPS Application Specific Extension to the
+MIPS32 @sc{isa} from that point on in the assembly. The
+@code{.set nosmartmips} directive prevents SmartMIPS instructions from
+being accepted.
+
@cindex MIPS MDMX instruction generation override
@kindex @code{.set mdmx}
@kindex @code{.set nomdmx}
@@ -463,13 +542,22 @@ from the MDMX Application Specific Extension from that point on
in the assembly. The @code{.set nomdmx} directive prevents MDMX
instructions from being accepted.
-@cindex MIPS DSP instruction generation override
+@cindex MIPS DSP Release 1 instruction generation override
@kindex @code{.set dsp}
@kindex @code{.set nodsp}
The directive @code{.set dsp} makes the assembler accept instructions
-from the DSP Application Specific Extension from that point on
-in the assembly. The @code{.set nodsp} directive prevents DSP
-instructions from being accepted.
+from the DSP Release 1 Application Specific Extension from that point
+on in the assembly. The @code{.set nodsp} directive prevents DSP
+Release 1 instructions from being accepted.
+
+@cindex MIPS DSP Release 2 instruction generation override
+@kindex @code{.set dspr2}
+@kindex @code{.set nodspr2}
+The directive @code{.set dspr2} makes the assembler accept instructions
+from the DSP Release 2 Application Specific Extension from that point
+on in the assembly. This dirctive implies @code{.set dsp}. The
+@code{.set nodspr2} directive prevents DSP Release 2 instructions from
+being accepted.
@cindex MIPS MT instruction generation override
@kindex @code{.set mt}
diff --git a/gas/doc/c-mmix.texi b/gas/doc/c-mmix.texi
index 8e47fa4a9799..257e3a69d8a6 100644
--- a/gas/doc/c-mmix.texi
+++ b/gas/doc/c-mmix.texi
@@ -530,7 +530,7 @@ Operand syntax is a bit stricter with @code{@value{AS}} than
must write @code{addu $1,$2,3}.
You can't LOC to a lower address than those already visited
-(i.e. ``backwards'').
+(i.e., ``backwards'').
A LOC directive must come before any emitted code.
diff --git a/gas/doc/c-pdp11.texi b/gas/doc/c-pdp11.texi
index d714b28343a6..78f2cf41f635 100644
--- a/gas/doc/c-pdp11.texi
+++ b/gas/doc/c-pdp11.texi
@@ -311,7 +311,7 @@ an immediate constants, while in BSD syntax the character for this
purpose is @code{$}.
@cindex PDP-11 general-purpose register syntax
-eneral-purpose registers are named @code{r0} through @code{r7}.
+general-purpose registers are named @code{r0} through @code{r7}.
Mnemonic alternatives for @code{r6} and @code{r7} are @code{sp} and
@code{pc}, respectively.
diff --git a/gas/doc/c-ppc.texi b/gas/doc/c-ppc.texi
index 4c9c096c055e..a41e1dd5f9ab 100644
--- a/gas/doc/c-ppc.texi
+++ b/gas/doc/c-ppc.texi
@@ -1,4 +1,4 @@
-@c Copyright 2001, 2002, 2003, 2005
+@c Copyright 2001, 2002, 2003, 2005, 2006
@c Free Software Foundation, Inc.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.
@@ -58,6 +58,12 @@ Generate code for PowerPC 7400/7410/7450/7455.
@item -mppc64, -m620
Generate code for PowerPC 620/625/630.
+@item -me500, -me500x2
+Generate code for Motorola e500 core complex.
+
+@item -mspe
+Generate code for Motorola SPE instructions.
+
@item -mppc64bridge
Generate code for PowerPC 64, including bridge insns.
@@ -79,6 +85,12 @@ Generate code for Power4 architecture.
@item -mpower5
Generate code for Power5 architecture.
+@item -mpower6
+Generate code for Power6 architecture.
+
+@item -mcell
+Generate code for Cell Broadband Engine architecture.
+
@item -mcom
Generate code Power/PowerPC common instructions.
@@ -92,10 +104,10 @@ Allow symbolic names for registers.
Do not allow symbolic names for registers.
@item -mrelocatable
-Support for GCC's -mrelocatble option.
+Support for GCC's -mrelocatable option.
@item -mrelocatable-lib
-Support for GCC's -mrelocatble-lib option.
+Support for GCC's -mrelocatable-lib option.
@item -memb
Set PPC_EMB bit in ELF flags.
diff --git a/gas/doc/c-tic54x.texi b/gas/doc/c-tic54x.texi
index 374def39e633..85b2fdad1517 100644
--- a/gas/doc/c-tic54x.texi
+++ b/gas/doc/c-tic54x.texi
@@ -32,7 +32,7 @@
@cindex options, TIC54X
@cindex TIC54X options
-The TMS320C54x version of @code{@value{AS}} has a few machine-dependent options.
+The TMS320C54X version of @code{@value{AS}} has a few machine-dependent options.
@cindex @samp{-mfar-mode} option, far-mode
@cindex @samp{-mf} option, far-mode
@@ -450,7 +450,7 @@ points to the word that contains the specified field.
@itemx .def @var{symbol} [,...,@var{symbol_n}]
@itemx .ref @var{symbol} [,...,@var{symbol_n}]
@code{.def} nominally identifies a symbol defined in the current file
-and availalbe to other files. @code{.ref} identifies a symbol used in
+and available to other files. @code{.ref} identifies a symbol used in
the current file but defined elsewhere. Both map to the standard
@code{.global} directive.
@@ -685,7 +685,7 @@ values are accepted, the op is ignored.
@cindex TIC54X-specific macros
@cindex macros, TIC54X
-Macros do not require explicit dereferencing of arguments (i.e. \ARG).
+Macros do not require explicit dereferencing of arguments (i.e., \ARG).
During macro expansion, the macro parameters are converted to subsyms.
If the number of arguments passed the macro invocation exceeds the
diff --git a/gas/doc/c-v850.texi b/gas/doc/c-v850.texi
index 445be057ef35..d899d5df2a22 100644
--- a/gas/doc/c-v850.texi
+++ b/gas/doc/c-v850.texi
@@ -267,7 +267,7 @@ the immediate operand field of the given instruction. For example:
computes the difference between the address of labels 'here' and
'there', takes the upper 16 bits of this difference, shifts it down 16
-bits and then mutliplies it by the lower 16 bits in register 5, putting
+bits and then multiplies it by the lower 16 bits in register 5, putting
the result into register 6.
@cindex @code{lo} pseudo-op, V850
diff --git a/gas/doc/c-xtensa.texi b/gas/doc/c-xtensa.texi
index 33035ad8b483..0ef8996e028e 100644
--- a/gas/doc/c-xtensa.texi
+++ b/gas/doc/c-xtensa.texi
@@ -37,8 +37,8 @@ special options:
@kindex --text-section-literals
@kindex --no-text-section-literals
Control the treatment of literal pools. The default is
-@samp{--no-@-text-@-section-@-literals}, which places literals in a
-separate section in the output file. This allows the literal pool to be
+@samp{--no-@-text-@-section-@-literals}, which places literals in
+separate sections in the output file. This allows the literal pool to be
placed in a data RAM/ROM. With @samp{--text-@-section-@-literals}, the
literals are interspersed in the text section in order to keep them as
close as possible to their references. This may be necessary for large
@@ -46,6 +46,7 @@ assembly files, where the literals would otherwise be out of range of the
@code{L32R} instructions in the text section. These options only affect
literals referenced via PC-relative @code{L32R} instructions; literals
for absolute mode @code{L32R} instructions are handled separately.
+@xref{Literal Directive, ,literal}.
@item --absolute-literals | --no-absolute-literals
@kindex --absolute-literals
@@ -115,13 +116,17 @@ instruction, are specified by enclosing the bundled opcodes inside
braces:
@smallexample
+@group
@{
[@var{format}]
@var{opcode0} [@var{operands}]
+@end group
@var{opcode1} [@var{operands}]
+@group
@var{opcode2} [@var{operands}]
@dots{}
@}
+@end group
@end smallexample
The opcodes in a FLIX instruction are listed in the same order as the
@@ -236,10 +241,8 @@ density option, the same assembly code will then work without modification.
@node Xtensa Automatic Alignment
@subsection Automatic Instruction Alignment
@cindex alignment of @code{LOOP} instructions
-@cindex alignment of @code{ENTRY} instructions
@cindex alignment of branch targets
@cindex @code{LOOP} instructions, alignment
-@cindex @code{ENTRY} instructions, alignment
@cindex branch target alignment
The Xtensa assembler will automatically align certain instructions, both
@@ -282,11 +285,9 @@ different fetch widths, the assembler conservatively assumes a 32-bit
fetch width when aligning @code{LOOP} instructions (except if the first
instruction in the loop is a 64-bit instruction).
-Similarly, the @code{ENTRY} instruction must be aligned on a 0 mod 4
-byte boundary. The assembler satisfies this requirement by inserting
-zero bytes when required. In addition, labels immediately preceding the
-@code{ENTRY} instruction will be moved to the newly aligned instruction
-location.
+Previous versions of the assembler automatically aligned @code{ENTRY}
+instructions to 4-byte boundaries, but that alignment is now the
+programmer's responsibility.
@node Xtensa Relaxation
@section Xtensa Relaxation
@@ -325,9 +326,11 @@ replace the branch with a branch around a jump. For example,
may result in:
@smallexample
+@group
bnez.n a2, M
j L
M:
+@end group
@end smallexample
(The @code{BNEZ.N} instruction would be used in this example only if the
@@ -369,9 +372,11 @@ and then using a @code{CALLX} instruction. So, for example:
might be relaxed to:
@smallexample
+@group
.literal .L1, func
l32r a8, .L1
callx8 a8
+@end group
@end smallexample
Because the addresses of targets of function calls are not generally
@@ -412,8 +417,10 @@ materialized with @code{L32R} instructions. Thus:
is assembled into the following machine code:
@smallexample
+@group
.literal .L1, 100000
l32r a0, .L1
+@end group
@end smallexample
@cindex @code{L8UI} instructions, relaxation
@@ -428,7 +435,7 @@ The @code{L8UI} machine instruction can only be used with immediate
offsets in the range from 0 to 255. The @code{L16SI} and @code{L16UI}
machine instructions can only be used with offsets from 0 to 510. The
@code{L32I} machine instruction can only be used with offsets from 0 to
-1020. A load offset outside these ranges can be materalized with
+1020. A load offset outside these ranges can be materialized with
an @code{L32R} instruction if the destination register of the load
is different than the source address register. For example:
@@ -439,10 +446,14 @@ is different than the source address register. For example:
is translated to:
@smallexample
+@group
.literal .L1, 2040
l32r a1, .L1
+@end group
+@group
addi a1, a0, a1
l32i a1, a1, 0
+@end group
@end smallexample
@noindent
@@ -466,22 +477,30 @@ with a literal allocated from the literal pool.
For example:
@smallexample
+@group
addi a5, a6, 0
addi a5, a6, 512
+@end group
+@group
addi a5, a6, 513
addi a5, a6, 50000
+@end group
@end smallexample
is assembled into the following:
@smallexample
+@group
.literal .L1, 50000
mov.n a5, a6
+@end group
addmi a5, a6, 0x200
addmi a5, a6, 0x200
addi a5, a5, 1
+@group
l32r a5, .L1
add a5, a6, a5
+@end group
@end smallexample
@node Xtensa Directives
@@ -489,12 +508,14 @@ is assembled into the following:
@cindex Xtensa directives
@cindex directives, Xtensa
-The Xtensa assember supports a region-based directive syntax:
+The Xtensa assembler supports a region-based directive syntax:
@smallexample
+@group
.begin @var{directive} [@var{options}]
@dots{}
.end @var{directive}
+@end group
@end smallexample
All the Xtensa-specific directives that apply to a region of code use
@@ -508,13 +529,17 @@ change the state of the directive without having to be aware of its
outer state. For example, consider:
@smallexample
+@group
.begin no-transform
L: add a0, a1, a2
+@end group
.begin transform
M: add a0, a1, a2
.end transform
+@group
N: add a0, a1, a2
.end no-transform
+@end group
@end smallexample
The @code{ADD} opcodes at @code{L} and @code{N} in the outer
@@ -545,8 +570,10 @@ The @code{schedule} directive is recognized only for compatibility with
Tensilica's assembler.
@smallexample
+@group
.begin [no-]schedule
.end [no-]schedule
+@end group
@end smallexample
This directive is ignored and has no effect on @command{@value{AS}}.
@@ -560,8 +587,10 @@ The @code{longcalls} directive enables or disables function call
relaxation. @xref{Xtensa Call Relaxation, ,Function Call Relaxation}.
@smallexample
+@group
.begin [no-]longcalls
.end [no-]longcalls
+@end group
@end smallexample
Call relaxation is disabled by default unless the @samp{--longcalls}
@@ -578,8 +607,10 @@ including relaxation (@pxref{Xtensa Relaxation, ,Xtensa Relaxation}) and
optimization (@pxref{Xtensa Optimizations, ,Xtensa Optimizations}).
@smallexample
+@group
.begin [no-]transform
.end [no-]transform
+@end group
@end smallexample
Transformations are enabled by default unless the @samp{--no-transform}
@@ -607,9 +638,11 @@ the literal data in the most appropriate place and possibly to combine
identical literals. For example, the code:
@smallexample
+@group
entry sp, 40
.literal .L1, sym
l32r a4, .L1
+@end group
@end smallexample
can be used to load a pointer to the symbol @code{sym} into register
@@ -617,13 +650,14 @@ can be used to load a pointer to the symbol @code{sym} into register
@code{ENTRY} and @code{L32R} instructions; instead, the assembler puts
the data in a literal pool.
-Literal pools for absolute mode @code{L32R} instructions
-(@pxref{Absolute Literals Directive}) are placed in a separate
-@code{.lit4} section. By default literal pools for PC-relative mode
-@code{L32R} instructions are placed in a separate @code{.literal}
-section; however, when using the @samp{--text-@-section-@-literals}
+Literal pools are placed by default in separate literal sections;
+however, when using the @samp{--text-@-section-@-literals}
option (@pxref{Xtensa Options, ,Command Line Options}), the literal
-pools are placed in the current section. These text section literal
+pools for PC-relative mode @code{L32R} instructions
+are placed in the current section.@footnote{Literals for the
+@code{.init} and @code{.fini} sections are always placed in separate
+sections, even when @samp{--text-@-section-@-literals} is enabled.}
+These text section literal
pools are created automatically before @code{ENTRY} instructions and
manually after @samp{.literal_position} directives (@pxref{Literal
Position Directive, ,literal_position}). If there are no preceding
@@ -631,6 +665,46 @@ Position Directive, ,literal_position}). If there are no preceding
must be used to place the text section literal pools; otherwise,
@command{@value{AS}} will report an error.
+When literals are placed in separate sections, the literal section names
+are derived from the names of the sections where the literals are
+defined. The base literal section names are @code{.literal} for
+PC-relative mode @code{L32R} instructions and @code{.lit4} for absolute
+mode @code{L32R} instructions (@pxref{Absolute Literals Directive,
+,absolute-literals}). These base names are used for literals defined in
+the default @code{.text} section. For literals defined in other
+sections or within the scope of a @code{literal_prefix} directive
+(@pxref{Literal Prefix Directive, ,literal_prefix}), the following rules
+determine the literal section name:
+
+@enumerate
+@item
+If the current section is a member of a section group, the literal
+section name includes the group name as a suffix to the base
+@code{.literal} or @code{.lit4} name, with a period to separate the base
+name and group name. The literal section is also made a member of the
+group.
+
+@item
+If the current section name (or @code{literal_prefix} value) begins with
+``@code{.gnu.linkonce.@var{kind}.}'', the literal section name is formed
+by replacing ``@code{.@var{kind}}'' with the base @code{.literal} or
+@code{.lit4} name. For example, for literals defined in a section named
+@code{.gnu.linkonce.t.func}, the literal section will be
+@code{.gnu.linkonce.literal.func} or @code{.gnu.linkonce.lit4.func}.
+
+@item
+If the current section name (or @code{literal_prefix} value) ends with
+@code{.text}, the literal section name is formed by replacing that
+suffix with the base @code{.literal} or @code{.lit4} name. For example,
+for literals defined in a section named @code{.iram0.text}, the literal
+section will be @code{.iram0.literal} or @code{.iram0.lit4}.
+
+@item
+If none of the preceding conditions apply, the literal section name is
+formed by adding the base @code{.literal} or @code{.lit4} name as a
+suffix to the current section name (or @code{literal_prefix} value).
+@end enumerate
+
@node Literal Position Directive
@subsection literal_position
@cindex @code{literal_position} directive
@@ -666,58 +740,43 @@ for @samp{M} will automatically be aligned correctly and is placed after
the unconditional jump.
@smallexample
+@group
.global M
code_start:
+@end group
j continue
.literal_position
.align 4
+@group
continue:
movi a4, M
+@end group
@end smallexample
@node Literal Prefix Directive
@subsection literal_prefix
@cindex @code{literal_prefix} directive
-The @code{literal_prefix} directive allows you to specify different
-sections to hold literals from different portions of an assembly file.
-With this directive, a single assembly file can be used to generate code
-into multiple sections, including literals generated by the assembler.
+The @code{literal_prefix} directive allows you to override the default
+literal section names, which are derived from the names of the sections
+where the literals are defined.
@smallexample
+@group
.begin literal_prefix [@var{name}]
.end literal_prefix
+@end group
@end smallexample
-By default the assembler places literal pools in sections separate from
-the instructions, using the default literal section names of
-@code{.literal} for PC-relative mode @code{L32R} instructions and
-@code{.lit4} for absolute mode @code{L32R} instructions (@pxref{Absolute
-Literals Directive}). The @code{literal_prefix} directive causes
-different literal sections to be used for the code inside the delimited
-region. The new literal sections are determined by including @var{name}
-as a prefix to the default literal section names. If the @var{name}
+For literals defined within the delimited region, the literal section
+names are derived from the @var{name} argument instead of the name of
+the current section. The rules used to derive the literal section names
+do not change. @xref{Literal Directive, ,literal}. If the @var{name}
argument is omitted, the literal sections revert to the defaults. This
directive has no effect when using the
@samp{--text-@-section-@-literals} option (@pxref{Xtensa Options,
,Command Line Options}).
-Except for two special cases, the assembler determines the new literal
-sections by simply prepending @var{name} to the default section names,
-resulting in @code{@var{name}.literal} and @code{@var{name}.lit4}
-sections. The @code{literal_prefix} directive is often used with the
-name of the current text section as the prefix argument. To facilitate
-this usage, the assembler uses special case rules when it recognizes
-@var{name} as a text section name. First, if @var{name} ends with
-@code{.text}, that suffix is not included in the literal section name.
-For example, if @var{name} is @code{.iram0.text}, then the literal
-sections will be @code{.iram0.literal} and @code{.iram0.lit4}. Second,
-if @var{name} begins with @code{.gnu.linkonce.t.}, then the literal
-section names are formed by replacing the @code{.t} substring with
-@code{.literal} and @code{.lit4}. For example, if @var{name} is
-@code{.gnu.linkonce.t.func}, the literal sections will be
-@code{.gnu.linkonce.literal.func} and @code{.gnu.linkonce.lit4.func}.
-
@node Absolute Literals Directive
@subsection absolute-literals
@cindex @code{absolute-literals} directive
@@ -729,8 +788,10 @@ instructions. These are relevant only for Xtensa configurations that
include the absolute addressing option for @code{L32R} instructions.
@smallexample
+@group
.begin [no-]absolute-literals
.end [no-]absolute-literals
+@end group
@end smallexample
These directives do not change the @code{L32R} mode---they only cause
diff --git a/gas/doc/c-z80.texi b/gas/doc/c-z80.texi
index 76e8410840a4..c52268a8cfbb 100644
--- a/gas/doc/c-z80.texi
+++ b/gas/doc/c-z80.texi
@@ -59,7 +59,7 @@ Treat undocumented z80-instructions that do not work on R800 as errors.
@item -r800
Produce code for the R800 processor. The assembler does not support
undocumented instructions for the R800.
-In line with common practice, @code{@value{AS}} uses Z80 instriction names
+In line with common practice, @code{@value{AS}} uses Z80 instruction names
for the R800 processor, as far as they exist.
@end table
@@ -105,7 +105,7 @@ A backslash @samp{\} is an ordinary character for the Z80 assembler.
@cindex single quote, Z80
@cindex Z80 '
The single quote @samp{'} must be followed by a closing quote. If there
-is one character inbetween, it is a character constant, otherwise it is
+is one character in between, it is a character constant, otherwise it is
a string constant.
@node Z80-Regs
@@ -114,7 +114,7 @@ a string constant.
@cindex register names, Z80
The registers are referred to with the letters assigned to them by
-Zilog. In addition @command{@value{AS}} recognises @samp{ixl} and
+Zilog. In addition @command{@value{AS}} recognizes @samp{ixl} and
@samp{ixh} as the least and most significant octet in @samp{ix}, and
similarly @samp{iyl} and @samp{iyh} as parts of @samp{iy}.
@@ -171,7 +171,7 @@ overflow.
@item ds @var{count}[, @var{value}]
@itemx defs @var{count}[, @var{value}]
@c Synonyms for @code{ds.b},
-@c which should have been described elsewhre
+@c which should have been described elsewhere
Fill @var{count} bytes in the object file with @var{value}, if
@var{value} is omitted it defaults to zero.
@@ -188,7 +188,7 @@ This is a normal instruction on Z80, and not an assembler directive.
A synonym for @xref{Section}, no second argument should be given.
@ignore
-The following attributes will possibly be recognised in the future
+The following attributes will possibly be recognized in the future
@table @code
@item abs
The section is to be absolute. @code{@value{AS}} will issue an error
@@ -212,7 +212,7 @@ The section is marked as read only.
@node Z80 Opcodes
@section Opcodes
-In line with commmon practice Z80 mnonics are used for both the Z80 and
+In line with common practice, Z80 mnemonics are used for both the Z80 and
the R800.
In many instructions it is possible to use one of the half index
diff --git a/gas/doc/gasver.texi b/gas/doc/gasver.texi
deleted file mode 100644
index 11d1801d6e65..000000000000
--- a/gas/doc/gasver.texi
+++ /dev/null
@@ -1 +0,0 @@
-@set VERSION 2.17
diff --git a/gas/doc/internals.texi b/gas/doc/internals.texi
index dffdb1e04fa9..c63a2dbd7705 100644
--- a/gas/doc/internals.texi
+++ b/gas/doc/internals.texi
@@ -1,6 +1,6 @@
\input texinfo
@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-@c 2001, 2002, 2003, 2004, 2005
+@c 2001, 2002, 2003, 2004, 2005, 2006
@c Free Software Foundation, Inc.
@setfilename internals.info
@node Top
@@ -838,7 +838,7 @@ GAS will call @code{md_parse_option} whenever @code{getopt} returns an
unrecognized code, presumably indicating a special code value which appears in
@code{md_longopts}. This function should return non-zero if it handled the
option and zero otherwise. There is no need to print a message about an option
-not being recognised. This will be handled by the generic code.
+not being recognized. This will be handled by the generic code.
GAS will call @code{md_show_usage} when a usage message is printed; it should
print a description of the machine specific options. @code{md_after_pase_args},
@@ -891,7 +891,7 @@ If this macro is defined, GAS will use it instead of @code{comment_chars}.
@cindex tc_symbol_chars
If this macro is defined, it is a pointer to a null terminated list of
characters which may appear in an operand. GAS already assumes that all
-alphanumberic characters, and @samp{$}, @samp{.}, and @samp{_} may appear in an
+alphanumeric characters, and @samp{$}, @samp{.}, and @samp{_} may appear in an
operand (see @samp{symbol_chars} in @file{app.c}). This macro may be defined
to treat additional characters as appearing in an operand. This affects the
way in which GAS removes whitespace before passing the string to
@@ -1279,7 +1279,7 @@ absolute symbol. If undefined, @code{TC_FORCE_RELOCATION} will be used.
@cindex TC_FORCE_RELOCATION_LOCAL
Like @code{TC_FORCE_RELOCATION}, but used only for fixup expressions against a
symbol in the current section. If undefined, fixups that are not
-@code{fx_pcrel} or @code{fx_plt} or for which @code{TC_FORCE_RELOCATION}
+@code{fx_pcrel} or for which @code{TC_FORCE_RELOCATION}
returns non-zero, will emit relocs.
@item TC_FORCE_RELOCATION_SUB_SAME (@var{fix}, @var{seg})
@@ -1609,7 +1609,7 @@ symbol's flags.
@item obj_clear_weak_hook
@cindex obj_clear_weak_hook
-If you define this macro, @code{S_CLEAR_WEAKREFD} will call it after clearning
+If you define this macro, @code{S_CLEAR_WEAKREFD} will call it after cleaning
the @code{weakrefd} flag, but before modifying any other flags.
@item obj_frob_file
@@ -1844,10 +1844,6 @@ Returns non-zero if any warnings or errors, respectively, have been printed
during this invocation.
@end deftypefun
-@deftypefun @{@} void as_perror (const char *@var{gripe}, const char *@var{filename})
-Displays a BFD or system error, then clears the error status.
-@end deftypefun
-
@deftypefun @{@} void as_tsktsk (const char *@var{format}, ...)
@deftypefunx @{@} void as_warn (const char *@var{format}, ...)
@deftypefunx @{@} void as_bad (const char *@var{format}, ...)
diff --git a/gas/dw2gencfi.c b/gas/dw2gencfi.c
index bfa5d5cf45a6..97e12377e76b 100644
--- a/gas/dw2gencfi.c
+++ b/gas/dw2gencfi.c
@@ -21,6 +21,7 @@
#include "as.h"
#include "dw2gencfi.h"
+#include "subsegs.h"
/* We re-use DWARF2_LINE_MIN_INSN_LENGTH for the code alignment field
@@ -87,6 +88,10 @@ struct fde_entry
symbolS *end_address;
struct cfi_insn_data *data;
struct cfi_insn_data **last;
+ unsigned char per_encoding;
+ unsigned char lsda_encoding;
+ expressionS personality;
+ expressionS lsda;
unsigned int return_column;
unsigned int signal_frame;
};
@@ -97,15 +102,13 @@ struct cie_entry
symbolS *start_address;
unsigned int return_column;
unsigned int signal_frame;
+ unsigned char per_encoding;
+ unsigned char lsda_encoding;
+ expressionS personality;
struct cfi_insn_data *first, *last;
};
-/* Current open FDE entry. */
-static struct fde_entry *cur_fde_data;
-static symbolS *last_address;
-static offsetT cur_cfa_offset;
-
/* List of FDE entries. */
static struct fde_entry *all_fde_data;
static struct fde_entry **last_fde_data = &all_fde_data;
@@ -120,7 +123,14 @@ struct cfa_save_data
offsetT cfa_offset;
};
-static struct cfa_save_data *cfa_save_stack;
+/* Current open FDE entry. */
+struct frch_cfi_data
+{
+ struct fde_entry *cur_fde_data;
+ symbolS *last_address;
+ offsetT cur_cfa_offset;
+ struct cfa_save_data *cfa_save_stack;
+};
/* Construct a new FDE structure and add it to the end of the fde list. */
@@ -129,12 +139,15 @@ alloc_fde_entry (void)
{
struct fde_entry *fde = xcalloc (1, sizeof (struct fde_entry));
- cur_fde_data = fde;
+ frchain_now->frch_cfi_data = xcalloc (1, sizeof (struct frch_cfi_data));
+ frchain_now->frch_cfi_data->cur_fde_data = fde;
*last_fde_data = fde;
last_fde_data = &fde->next;
fde->last = &fde->data;
fde->return_column = DWARF2_DEFAULT_RETURN_COLUMN;
+ fde->per_encoding = DW_EH_PE_omit;
+ fde->lsda_encoding = DW_EH_PE_omit;
return fde;
}
@@ -149,6 +162,7 @@ static struct cfi_insn_data *
alloc_cfi_insn_data (void)
{
struct cfi_insn_data *insn = xcalloc (1, sizeof (struct cfi_insn_data));
+ struct fde_entry *cur_fde_data = frchain_now->frch_cfi_data->cur_fde_data;
*cur_fde_data->last = insn;
cur_fde_data->last = &insn->next;
@@ -163,7 +177,7 @@ cfi_new_fde (symbolS *label)
{
struct fde_entry *fde = alloc_fde_entry ();
fde->start_address = label;
- last_address = label;
+ frchain_now->frch_cfi_data->last_address = label;
}
/* End the currently open FDE. */
@@ -171,8 +185,9 @@ cfi_new_fde (symbolS *label)
void
cfi_end_fde (symbolS *label)
{
- cur_fde_data->end_address = label;
- cur_fde_data = NULL;
+ frchain_now->frch_cfi_data->cur_fde_data->end_address = label;
+ free (frchain_now->frch_cfi_data);
+ frchain_now->frch_cfi_data = NULL;
}
/* Set the return column for the current FDE. */
@@ -180,7 +195,7 @@ cfi_end_fde (symbolS *label)
void
cfi_set_return_column (unsigned regno)
{
- cur_fde_data->return_column = regno;
+ frchain_now->frch_cfi_data->cur_fde_data->return_column = regno;
}
/* Universal functions to store new instructions. */
@@ -239,10 +254,10 @@ cfi_add_advance_loc (symbolS *label)
struct cfi_insn_data *insn = alloc_cfi_insn_data ();
insn->insn = DW_CFA_advance_loc;
- insn->u.ll.lab1 = last_address;
+ insn->u.ll.lab1 = frchain_now->frch_cfi_data->last_address;
insn->u.ll.lab2 = label;
- last_address = label;
+ frchain_now->frch_cfi_data->last_address = label;
}
/* Add a DW_CFA_offset record to the CFI data. */
@@ -252,6 +267,7 @@ cfi_add_CFA_offset (unsigned regno, offsetT offset)
{
unsigned int abs_data_align;
+ assert (DWARF2_CIE_DATA_ALIGNMENT != 0);
cfi_add_CFA_insn_reg_offset (DW_CFA_offset, regno, offset);
abs_data_align = (DWARF2_CIE_DATA_ALIGNMENT < 0
@@ -266,7 +282,7 @@ void
cfi_add_CFA_def_cfa (unsigned regno, offsetT offset)
{
cfi_add_CFA_insn_reg_offset (DW_CFA_def_cfa, regno, offset);
- cur_cfa_offset = offset;
+ frchain_now->frch_cfi_data->cur_cfa_offset = offset;
}
/* Add a DW_CFA_register record to the CFI data. */
@@ -291,7 +307,7 @@ void
cfi_add_CFA_def_cfa_offset (offsetT offset)
{
cfi_add_CFA_insn_offset (DW_CFA_def_cfa_offset, offset);
- cur_cfa_offset = offset;
+ frchain_now->frch_cfi_data->cur_cfa_offset = offset;
}
void
@@ -320,9 +336,9 @@ cfi_add_CFA_remember_state (void)
cfi_add_CFA_insn (DW_CFA_remember_state);
p = xmalloc (sizeof (*p));
- p->cfa_offset = cur_cfa_offset;
- p->next = cfa_save_stack;
- cfa_save_stack = p;
+ p->cfa_offset = frchain_now->frch_cfi_data->cur_cfa_offset;
+ p->next = frchain_now->frch_cfi_data->cfa_save_stack;
+ frchain_now->frch_cfi_data->cfa_save_stack = p;
}
void
@@ -332,11 +348,11 @@ cfi_add_CFA_restore_state (void)
cfi_add_CFA_insn (DW_CFA_restore_state);
- p = cfa_save_stack;
+ p = frchain_now->frch_cfi_data->cfa_save_stack;
if (p)
{
- cur_cfa_offset = p->cfa_offset;
- cfa_save_stack = p->next;
+ frchain_now->frch_cfi_data->cur_cfa_offset = p->cfa_offset;
+ frchain_now->frch_cfi_data->cfa_save_stack = p->next;
free (p);
}
else
@@ -350,6 +366,8 @@ static void dot_cfi (int);
static void dot_cfi_escape (int);
static void dot_cfi_startproc (int);
static void dot_cfi_endproc (int);
+static void dot_cfi_personality (int);
+static void dot_cfi_lsda (int);
/* Fake CFI type; outside the byte range of any real CFI insn. */
#define CFI_adjust_cfa_offset 0x100
@@ -378,6 +396,8 @@ const pseudo_typeS cfi_pseudo_table[] =
{ "cfi_window_save", dot_cfi, DW_CFA_GNU_window_save },
{ "cfi_escape", dot_cfi_escape, 0 },
{ "cfi_signal_frame", dot_cfi, CFI_signal_frame },
+ { "cfi_personality", dot_cfi_personality, 0 },
+ { "cfi_lsda", dot_cfi_lsda, 0 },
{ NULL, NULL, 0 }
};
@@ -448,7 +468,7 @@ dot_cfi (int arg)
offsetT offset;
unsigned reg1, reg2;
- if (!cur_fde_data)
+ if (frchain_now->frch_cfi_data == NULL)
{
as_bad (_("CFI instruction used without previous .cfi_startproc"));
ignore_rest_of_line ();
@@ -456,8 +476,9 @@ dot_cfi (int arg)
}
/* If the last address was not at the current PC, advance to current. */
- if (symbol_get_frag (last_address) != frag_now
- || S_GET_VALUE (last_address) != frag_now_fix ())
+ if (symbol_get_frag (frchain_now->frch_cfi_data->last_address) != frag_now
+ || S_GET_VALUE (frchain_now->frch_cfi_data->last_address)
+ != frag_now_fix ())
cfi_add_advance_loc (symbol_temp_new_now ());
switch (arg)
@@ -473,7 +494,8 @@ dot_cfi (int arg)
reg1 = cfi_parse_reg ();
cfi_parse_separator ();
offset = cfi_parse_const ();
- cfi_add_CFA_offset (reg1, offset - cur_cfa_offset);
+ cfi_add_CFA_offset (reg1,
+ offset - frchain_now->frch_cfi_data->cur_cfa_offset);
break;
case DW_CFA_def_cfa:
@@ -502,7 +524,8 @@ dot_cfi (int arg)
case CFI_adjust_cfa_offset:
offset = cfi_parse_const ();
- cfi_add_CFA_def_cfa_offset (cur_cfa_offset + offset);
+ cfi_add_CFA_def_cfa_offset (frchain_now->frch_cfi_data->cur_cfa_offset
+ + offset);
break;
case DW_CFA_restore:
@@ -552,7 +575,7 @@ dot_cfi (int arg)
break;
case CFI_signal_frame:
- cur_fde_data->signal_frame = 1;
+ frchain_now->frch_cfi_data->cur_fde_data->signal_frame = 1;
break;
default:
@@ -568,7 +591,7 @@ dot_cfi_escape (int ignored ATTRIBUTE_UNUSED)
struct cfi_escape_data *head, **tail, *e;
struct cfi_insn_data *insn;
- if (!cur_fde_data)
+ if (frchain_now->frch_cfi_data == NULL)
{
as_bad (_("CFI instruction used without previous .cfi_startproc"));
ignore_rest_of_line ();
@@ -576,8 +599,9 @@ dot_cfi_escape (int ignored ATTRIBUTE_UNUSED)
}
/* If the last address was not at the current PC, advance to current. */
- if (symbol_get_frag (last_address) != frag_now
- || S_GET_VALUE (last_address) != frag_now_fix ())
+ if (symbol_get_frag (frchain_now->frch_cfi_data->last_address) != frag_now
+ || S_GET_VALUE (frchain_now->frch_cfi_data->last_address)
+ != frag_now_fix ())
cfi_add_advance_loc (symbol_temp_new_now ());
tail = &head;
@@ -600,11 +624,153 @@ dot_cfi_escape (int ignored ATTRIBUTE_UNUSED)
}
static void
+dot_cfi_personality (int ignored ATTRIBUTE_UNUSED)
+{
+ struct fde_entry *fde;
+ offsetT encoding;
+
+ if (frchain_now->frch_cfi_data == NULL)
+ {
+ as_bad (_("CFI instruction used without previous .cfi_startproc"));
+ ignore_rest_of_line ();
+ return;
+ }
+
+ fde = frchain_now->frch_cfi_data->cur_fde_data;
+ encoding = get_absolute_expression ();
+ if (encoding == DW_EH_PE_omit)
+ {
+ demand_empty_rest_of_line ();
+ fde->per_encoding = encoding;
+ return;
+ }
+
+ if ((encoding & 0xff) != encoding
+ || ((encoding & 0x70) != 0
+#if defined DIFF_EXPR_OK || defined tc_cfi_emit_pcrel_expr
+ && (encoding & 0x70) != DW_EH_PE_pcrel
+#endif
+ )
+ /* leb128 can be handled, but does something actually need it? */
+ || (encoding & 7) == DW_EH_PE_uleb128
+ || (encoding & 7) > DW_EH_PE_udata8)
+ {
+ as_bad (_("invalid or unsupported encoding in .cfi_personality"));
+ ignore_rest_of_line ();
+ return;
+ }
+
+ if (*input_line_pointer++ != ',')
+ {
+ as_bad (_(".cfi_personality requires encoding and symbol arguments"));
+ ignore_rest_of_line ();
+ return;
+ }
+
+ expression_and_evaluate (&fde->personality);
+ switch (fde->personality.X_op)
+ {
+ case O_symbol:
+ break;
+ case O_constant:
+ if ((encoding & 0x70) == DW_EH_PE_pcrel)
+ encoding = DW_EH_PE_omit;
+ break;
+ default:
+ encoding = DW_EH_PE_omit;
+ break;
+ }
+
+ fde->per_encoding = encoding;
+
+ if (encoding == DW_EH_PE_omit)
+ {
+ as_bad (_("wrong second argument to .cfi_personality"));
+ ignore_rest_of_line ();
+ return;
+ }
+
+ demand_empty_rest_of_line ();
+}
+
+static void
+dot_cfi_lsda (int ignored ATTRIBUTE_UNUSED)
+{
+ struct fde_entry *fde;
+ offsetT encoding;
+
+ if (frchain_now->frch_cfi_data == NULL)
+ {
+ as_bad (_("CFI instruction used without previous .cfi_startproc"));
+ ignore_rest_of_line ();
+ return;
+ }
+
+ fde = frchain_now->frch_cfi_data->cur_fde_data;
+ encoding = get_absolute_expression ();
+ if (encoding == DW_EH_PE_omit)
+ {
+ demand_empty_rest_of_line ();
+ fde->lsda_encoding = encoding;
+ return;
+ }
+
+ if ((encoding & 0xff) != encoding
+ || ((encoding & 0x70) != 0
+#if defined DIFF_EXPR_OK || defined tc_cfi_emit_pcrel_expr
+ && (encoding & 0x70) != DW_EH_PE_pcrel
+#endif
+ )
+ /* leb128 can be handled, but does something actually need it? */
+ || (encoding & 7) == DW_EH_PE_uleb128
+ || (encoding & 7) > DW_EH_PE_udata8)
+ {
+ as_bad (_("invalid or unsupported encoding in .cfi_lsda"));
+ ignore_rest_of_line ();
+ return;
+ }
+
+ if (*input_line_pointer++ != ',')
+ {
+ as_bad (_(".cfi_lsda requires encoding and symbol arguments"));
+ ignore_rest_of_line ();
+ return;
+ }
+
+ fde->lsda_encoding = encoding;
+
+ expression_and_evaluate (&fde->lsda);
+ switch (fde->lsda.X_op)
+ {
+ case O_symbol:
+ break;
+ case O_constant:
+ if ((encoding & 0x70) == DW_EH_PE_pcrel)
+ encoding = DW_EH_PE_omit;
+ break;
+ default:
+ encoding = DW_EH_PE_omit;
+ break;
+ }
+
+ fde->lsda_encoding = encoding;
+
+ if (encoding == DW_EH_PE_omit)
+ {
+ as_bad (_("wrong second argument to .cfi_lsda"));
+ ignore_rest_of_line ();
+ return;
+ }
+
+ demand_empty_rest_of_line ();
+}
+
+static void
dot_cfi_startproc (int ignored ATTRIBUTE_UNUSED)
{
int simple = 0;
- if (cur_fde_data)
+ if (frchain_now->frch_cfi_data != NULL)
{
as_bad (_("previous CFI entry not closed (missing .cfi_endproc)"));
ignore_rest_of_line ();
@@ -631,7 +797,7 @@ dot_cfi_startproc (int ignored ATTRIBUTE_UNUSED)
}
demand_empty_rest_of_line ();
- cur_cfa_offset = 0;
+ frchain_now->frch_cfi_data->cur_cfa_offset = 0;
if (!simple)
tc_cfi_frame_initial_instructions ();
}
@@ -639,7 +805,7 @@ dot_cfi_startproc (int ignored ATTRIBUTE_UNUSED)
static void
dot_cfi_endproc (int ignored ATTRIBUTE_UNUSED)
{
- if (! cur_fde_data)
+ if (frchain_now->frch_cfi_data == NULL)
{
as_bad (_(".cfi_endproc without corresponding .cfi_startproc"));
ignore_rest_of_line ();
@@ -714,18 +880,18 @@ output_cfi_insn (struct cfi_insn_data *insn)
out_one (DW_CFA_advance_loc + scaled);
else if (delta <= 0xFF)
{
- out_one (DW_CFA_advance_loc1);
- out_one (delta);
+ out_one (DW_CFA_advance_loc1);
+ out_one (delta);
}
else if (delta <= 0xFFFF)
{
- out_one (DW_CFA_advance_loc2);
- out_two (delta);
+ out_one (DW_CFA_advance_loc2);
+ out_two (delta);
}
else
{
- out_one (DW_CFA_advance_loc4);
- out_four (delta);
+ out_one (DW_CFA_advance_loc4);
+ out_four (delta);
}
}
else
@@ -850,12 +1016,33 @@ output_cfi_insn (struct cfi_insn_data *insn)
}
}
+static offsetT
+encoding_size (unsigned char encoding)
+{
+ if (encoding == DW_EH_PE_omit)
+ return 0;
+ switch (encoding & 0x7)
+ {
+ case 0:
+ return bfd_get_arch_size (stdoutput) == 64 ? 8 : 4;
+ case DW_EH_PE_udata2:
+ return 2;
+ case DW_EH_PE_udata4:
+ return 4;
+ case DW_EH_PE_udata8:
+ return 8;
+ default:
+ abort ();
+ }
+}
+
static void
output_cie (struct cie_entry *cie)
{
symbolS *after_size_address, *end_address;
expressionS exp;
struct cfi_insn_data *i;
+ offsetT augmentation_size;
cie->start_address = symbol_temp_new_now ();
after_size_address = symbol_temp_make ();
@@ -871,6 +1058,10 @@ output_cie (struct cie_entry *cie)
out_four (0); /* CIE id. */
out_one (DW_CIE_VERSION); /* Version. */
out_one ('z'); /* Augmentation. */
+ if (cie->per_encoding != DW_EH_PE_omit)
+ out_one ('P');
+ if (cie->lsda_encoding != DW_EH_PE_omit)
+ out_one ('L');
out_one ('R');
if (cie->signal_frame)
out_one ('S');
@@ -881,7 +1072,32 @@ output_cie (struct cie_entry *cie)
out_one (cie->return_column);
else
out_uleb128 (cie->return_column);
- out_uleb128 (1); /* Augmentation size. */
+ augmentation_size = 1 + (cie->lsda_encoding != DW_EH_PE_omit);
+ if (cie->per_encoding != DW_EH_PE_omit)
+ augmentation_size += 1 + encoding_size (cie->per_encoding);
+ out_uleb128 (augmentation_size); /* Augmentation size. */
+ if (cie->per_encoding != DW_EH_PE_omit)
+ {
+ offsetT size = encoding_size (cie->per_encoding);
+ out_one (cie->per_encoding);
+ exp = cie->personality;
+ if ((cie->per_encoding & 0x70) == DW_EH_PE_pcrel)
+ {
+#ifdef DIFF_EXPR_OK
+ exp.X_op = O_subtract;
+ exp.X_op_symbol = symbol_temp_new_now ();
+ emit_expr (&exp, size);
+#elif defined (tc_cfi_emit_pcrel_expr)
+ tc_cfi_emit_pcrel_expr (&exp, size);
+#else
+ abort ();
+#endif
+ }
+ else
+ emit_expr (&exp, size);
+ }
+ if (cie->lsda_encoding != DW_EH_PE_omit)
+ out_one (cie->lsda_encoding);
#if defined DIFF_EXPR_OK || defined tc_cfi_emit_pcrel_expr
out_one (DW_EH_PE_pcrel | DW_EH_PE_sdata4);
#else
@@ -902,6 +1118,7 @@ output_fde (struct fde_entry *fde, struct cie_entry *cie,
{
symbolS *after_size_address, *end_address;
expressionS exp;
+ offsetT augmentation_size;
after_size_address = symbol_temp_make ();
end_address = symbol_temp_make ();
@@ -917,7 +1134,7 @@ output_fde (struct fde_entry *fde, struct cie_entry *cie,
exp.X_op_symbol = cie->start_address;
emit_expr (&exp, 4); /* CIE offset. */
-#ifdef DIFF_EXPR_OK
+#ifdef DIFF_EXPR_OK
exp.X_add_symbol = fde->start_address;
exp.X_op_symbol = symbol_temp_new_now ();
emit_expr (&exp, 4); /* Code offset. */
@@ -937,7 +1154,27 @@ output_fde (struct fde_entry *fde, struct cie_entry *cie,
exp.X_op_symbol = fde->start_address; /* Code length. */
emit_expr (&exp, 4);
- out_uleb128 (0); /* Augmentation size. */
+ augmentation_size = encoding_size (fde->lsda_encoding);
+ out_uleb128 (augmentation_size); /* Augmentation size. */
+
+ if (fde->lsda_encoding != DW_EH_PE_omit)
+ {
+ exp = fde->lsda;
+ if ((fde->lsda_encoding & 0x70) == DW_EH_PE_pcrel)
+ {
+#ifdef DIFF_EXPR_OK
+ exp.X_op = O_subtract;
+ exp.X_op_symbol = symbol_temp_new_now ();
+ emit_expr (&exp, augmentation_size);
+#elif defined (tc_cfi_emit_pcrel_expr)
+ tc_cfi_emit_pcrel_expr (&exp, augmentation_size);
+#else
+ abort ();
+#endif
+ }
+ else
+ emit_expr (&exp, augmentation_size);
+ }
for (; first; first = first->next)
output_cfi_insn (first);
@@ -955,8 +1192,31 @@ select_cie_for_fde (struct fde_entry *fde, struct cfi_insn_data **pfirst)
for (cie = cie_root; cie; cie = cie->next)
{
if (cie->return_column != fde->return_column
- || cie->signal_frame != fde->signal_frame)
+ || cie->signal_frame != fde->signal_frame
+ || cie->per_encoding != fde->per_encoding
+ || cie->lsda_encoding != fde->lsda_encoding)
continue;
+ if (cie->per_encoding != DW_EH_PE_omit)
+ {
+ if (cie->personality.X_op != fde->personality.X_op
+ || cie->personality.X_add_number
+ != fde->personality.X_add_number)
+ continue;
+ switch (cie->personality.X_op)
+ {
+ case O_constant:
+ if (cie->personality.X_unsigned != fde->personality.X_unsigned)
+ continue;
+ break;
+ case O_symbol:
+ if (cie->personality.X_add_symbol
+ != fde->personality.X_add_symbol)
+ continue;
+ break;
+ default:
+ abort ();
+ }
+ }
for (i = cie->first, j = fde->data;
i != cie->last && j != NULL;
i = i->next, j = j->next)
@@ -1029,6 +1289,9 @@ select_cie_for_fde (struct fde_entry *fde, struct cfi_insn_data **pfirst)
cie_root = cie;
cie->return_column = fde->return_column;
cie->signal_frame = fde->signal_frame;
+ cie->per_encoding = fde->per_encoding;
+ cie->lsda_encoding = fde->lsda_encoding;
+ cie->personality = fde->personality;
cie->first = fde->data;
for (i = cie->first; i ; i = i->next)
@@ -1052,12 +1315,6 @@ cfi_finish (void)
struct fde_entry *fde;
int save_flag_traditional_format;
- if (cur_fde_data)
- {
- as_bad (_("open CFI at the end of file; missing .cfi_endproc directive"));
- cur_fde_data->end_address = cur_fde_data->start_address;
- }
-
if (all_fde_data == 0)
return;
@@ -1077,6 +1334,12 @@ cfi_finish (void)
struct cfi_insn_data *first;
struct cie_entry *cie;
+ if (fde->end_address == NULL)
+ {
+ as_bad (_("open CFI at the end of file; missing .cfi_endproc directive"));
+ fde->end_address = fde->start_address;
+ }
+
cie = select_cie_for_fde (fde, &first);
output_fde (fde, cie, first, fde->next == NULL ? EH_FRAME_ALIGNMENT : 2);
}
diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
index 16666fa4f28d..671a9b030d4b 100644
--- a/gas/dwarf2dbg.c
+++ b/gas/dwarf2dbg.c
@@ -28,7 +28,6 @@
[epilogue_begin] [is_stmt VALUE] [isa VALUE]
*/
-#include "ansidecl.h"
#include "as.h"
#include "safe-ctype.h"
@@ -46,6 +45,29 @@
#include "dwarf2dbg.h"
#include <filenames.h>
+#ifdef HAVE_DOS_BASED_FILE_SYSTEM
+/* We need to decide which character to use as a directory separator.
+ Just because HAVE_DOS_BASED_FILE_SYSTEM is defined, it does not
+ necessarily mean that the backslash character is the one to use.
+ Some environments, eg Cygwin, can support both naming conventions.
+ So we use the heuristic that we only need to use the backslash if
+ the path is an absolute path starting with a DOS style drive
+ selector. eg C: or D: */
+# define INSERT_DIR_SEPARATOR(string, offset) \
+ do \
+ { \
+ if (offset > 1 \
+ && string[0] != 0 \
+ && string[1] == ':') \
+ string [offset] = '\\'; \
+ else \
+ string [offset] = '/'; \
+ } \
+ while (0)
+#else
+# define INSERT_DIR_SEPARATOR(string, offset) string[offset] = '/'
+#endif
+
#ifndef DWARF2_FORMAT
# define DWARF2_FORMAT() dwarf2_format_32bit
#endif
@@ -66,6 +88,13 @@
#define DL_FILES 1
#define DL_BODY 2
+/* If linker relaxation might change offsets in the code, the DWARF special
+ opcodes and variable-length operands cannot be used. If this macro is
+ nonzero, use the DW_LNS_fixed_advance_pc opcode instead. */
+#ifndef DWARF2_USE_FIXED_ADVANCE_PC
+# define DWARF2_USE_FIXED_ADVANCE_PC 0
+#endif
+
/* First special line opcde - leave room for the standard opcodes.
Note: If you want to change this, you'll have to update the
"standard_opcode_lengths" table that is emitted below in
@@ -169,22 +198,22 @@ static void out_two (int);
static void out_four (int);
static void out_abbrev (int, int);
static void out_uleb128 (addressT);
-static offsetT get_frag_fix (fragS *);
+static void out_sleb128 (addressT);
+static offsetT get_frag_fix (fragS *, segT);
static void out_set_addr (symbolS *);
static int size_inc_line_addr (int, addressT);
static void emit_inc_line_addr (int, addressT, char *, int);
static void out_inc_line_addr (int, addressT);
+static void out_fixed_inc_line_addr (int, symbolS *, symbolS *);
static void relax_inc_line_addr (int, symbolS *, symbolS *);
static void process_entries (segT, struct line_entry *);
static void out_file_list (void);
static void out_debug_line (segT);
static void out_debug_aranges (segT, segT);
static void out_debug_abbrev (segT);
-static void out_debug_info (segT, segT, segT);
#ifndef TC_DWARF2_EMIT_OFFSET
-# define TC_DWARF2_EMIT_OFFSET generic_dwarf2_emit_offset
-static void generic_dwarf2_emit_offset (symbolS *, unsigned int);
+#define TC_DWARF2_EMIT_OFFSET generic_dwarf2_emit_offset
/* Create an offset to .dwarf2_*. */
@@ -569,7 +598,7 @@ dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
char *cp = (char *) alloca (dir_len + 1 + file_len + 1);
memcpy (cp, dirs[files[filenum].dir], dir_len);
- cp[dir_len] = '/';
+ INSERT_DIR_SEPARATOR (cp, dir_len);
memcpy (cp + dir_len + 1, files[filenum].filename, file_len);
cp[dir_len + file_len + 1] = '\0';
listing_source_file (cp);
@@ -670,27 +699,18 @@ dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED)
static struct frag *
first_frag_for_seg (segT seg)
{
- frchainS *f, *first = NULL;
-
- for (f = frchain_root; f; f = f->frch_next)
- if (f->frch_seg == seg
- && (! first || first->frch_subseg > f->frch_subseg))
- first = f;
-
- return first ? first->frch_root : NULL;
+ return seg_info (seg)->frchainP->frch_root;
}
static struct frag *
last_frag_for_seg (segT seg)
{
- frchainS *f, *last = NULL;
+ frchainS *f = seg_info (seg)->frchainP;
- for (f = frchain_root; f; f = f->frch_next)
- if (f->frch_seg == seg
- && (! last || last->frch_subseg < f->frch_subseg))
- last= f;
+ while (f->frch_next != NULL)
+ f = f->frch_next;
- return last ? last->frch_last : NULL;
+ return f->frch_last;
}
/* Emit a single byte into the current segment. */
@@ -733,6 +753,14 @@ out_uleb128 (addressT value)
output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
}
+/* Emit a signed "little-endian base 128" number. */
+
+static void
+out_sleb128 (addressT value)
+{
+ output_leb128 (frag_more (sizeof_leb128 (value, 1)), value, 1);
+}
+
/* Emit a tuple for .debug_abbrev. */
static inline void
@@ -745,7 +773,7 @@ out_abbrev (int name, int form)
/* Get the size of a fragment. */
static offsetT
-get_frag_fix (fragS *frag)
+get_frag_fix (fragS *frag, segT seg)
{
frchainS *fr;
@@ -755,7 +783,7 @@ get_frag_fix (fragS *frag)
/* If a fragment is the last in the chain, special measures must be
taken to find its size before relaxation, since it may be pending
on some subsegment chain. */
- for (fr = frchain_root; fr; fr = fr->frch_next)
+ for (fr = seg_info (seg)->frchainP; fr; fr = fr->frch_next)
if (fr->frch_last == frag)
return (char *) obstack_next_free (&fr->frch_obstack) - frag->fr_literal;
@@ -966,6 +994,45 @@ out_inc_line_addr (int line_delta, addressT addr_delta)
emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
}
+/* Write out an alternative form of line and address skips using
+ DW_LNS_fixed_advance_pc opcodes. This uses more space than the default
+ line and address information, but it helps support linker relaxation that
+ changes the code offsets. */
+
+static void
+out_fixed_inc_line_addr (int line_delta, symbolS *to_sym, symbolS *from_sym)
+{
+ expressionS expr;
+
+ /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
+ if (line_delta == INT_MAX)
+ {
+ out_opcode (DW_LNS_fixed_advance_pc);
+ expr.X_op = O_subtract;
+ expr.X_add_symbol = to_sym;
+ expr.X_op_symbol = from_sym;
+ expr.X_add_number = 0;
+ emit_expr (&expr, 2);
+
+ out_opcode (DW_LNS_extended_op);
+ out_byte (1);
+ out_opcode (DW_LNE_end_sequence);
+ return;
+ }
+
+ out_opcode (DW_LNS_advance_line);
+ out_sleb128 (line_delta);
+
+ out_opcode (DW_LNS_fixed_advance_pc);
+ expr.X_op = O_subtract;
+ expr.X_add_symbol = to_sym;
+ expr.X_op_symbol = from_sym;
+ expr.X_add_number = 0;
+ emit_expr (&expr, 2);
+
+ out_opcode (DW_LNS_copy);
+}
+
/* Generate a variant frag that we can use to relax address/line
increments between fragments of the target segment. */
@@ -1116,6 +1183,8 @@ process_entries (segT seg, struct line_entry *e)
out_set_addr (lab);
out_inc_line_addr (line_delta, 0);
}
+ else if (DWARF2_USE_FIXED_ADVANCE_PC)
+ out_fixed_inc_line_addr (line_delta, lab, last_lab);
else if (frag == last_frag)
out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
else
@@ -1134,8 +1203,13 @@ process_entries (segT seg, struct line_entry *e)
/* Emit a DW_LNE_end_sequence for the end of the section. */
frag = last_frag_for_seg (seg);
- frag_ofs = get_frag_fix (frag);
- if (frag == last_frag)
+ frag_ofs = get_frag_fix (frag, seg);
+ if (DWARF2_USE_FIXED_ADVANCE_PC)
+ {
+ lab = symbol_temp_new (seg, frag_ofs, frag);
+ out_fixed_inc_line_addr (INT_MAX, lab, last_lab);
+ }
+ else if (frag == last_frag)
out_inc_line_addr (INT_MAX, frag_ofs - last_frag_ofs);
else
{
@@ -1277,6 +1351,54 @@ out_debug_line (segT line_seg)
symbol_set_value_now (line_end);
}
+static void
+out_debug_ranges (segT ranges_seg)
+{
+ unsigned int addr_size = sizeof_address;
+ struct line_seg *s;
+ expressionS expr;
+ unsigned int i;
+
+ subseg_set (ranges_seg, 0);
+
+ /* Base Address Entry. */
+ for (i = 0; i < addr_size; i++)
+ out_byte (0xff);
+ for (i = 0; i < addr_size; i++)
+ out_byte (0);
+
+ /* Range List Entry. */
+ for (s = all_segs; s; s = s->next)
+ {
+ fragS *frag;
+ symbolS *beg, *end;
+
+ frag = first_frag_for_seg (s->seg);
+ beg = symbol_temp_new (s->seg, 0, frag);
+ s->text_start = beg;
+
+ frag = last_frag_for_seg (s->seg);
+ end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
+ s->text_end = end;
+
+ expr.X_op = O_symbol;
+ expr.X_add_symbol = beg;
+ expr.X_add_number = 0;
+ emit_expr (&expr, addr_size);
+
+ expr.X_op = O_symbol;
+ expr.X_add_symbol = end;
+ expr.X_add_number = 0;
+ emit_expr (&expr, addr_size);
+ }
+
+ /* End of Range Entry. */
+ for (i = 0; i < addr_size; i++)
+ out_byte (0);
+ for (i = 0; i < addr_size; i++)
+ out_byte (0);
+}
+
/* Emit data for .debug_aranges. */
static void
@@ -1332,7 +1454,7 @@ out_debug_aranges (segT aranges_seg, segT info_seg)
s->text_start = beg;
frag = last_frag_for_seg (s->seg);
- end = symbol_temp_new (s->seg, get_frag_fix (frag), frag);
+ end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
s->text_end = end;
expr.X_op = O_symbol;
@@ -1369,6 +1491,13 @@ out_debug_abbrev (segT abbrev_seg)
out_abbrev (DW_AT_low_pc, DW_FORM_addr);
out_abbrev (DW_AT_high_pc, DW_FORM_addr);
}
+ else
+ {
+ if (DWARF2_FORMAT () == dwarf2_format_32bit)
+ out_abbrev (DW_AT_ranges, DW_FORM_data4);
+ else
+ out_abbrev (DW_AT_ranges, DW_FORM_data8);
+ }
out_abbrev (DW_AT_name, DW_FORM_string);
out_abbrev (DW_AT_comp_dir, DW_FORM_string);
out_abbrev (DW_AT_producer, DW_FORM_string);
@@ -1382,7 +1511,7 @@ out_debug_abbrev (segT abbrev_seg)
/* Emit a description of this compilation unit for .debug_info. */
static void
-out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg)
+out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT ranges_seg)
{
char producer[128];
char *comp_dir;
@@ -1445,8 +1574,7 @@ out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg)
/* ??? sizeof_offset */
TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg), 4);
- /* These two attributes may only be emitted if all of the code is
- contiguous. Multiple sections are not that. */
+ /* These two attributes are emitted if all of the code is contiguous. */
if (all_segs->next == NULL)
{
/* DW_AT_low_pc */
@@ -1461,6 +1589,12 @@ out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg)
expr.X_add_number = 0;
emit_expr (&expr, sizeof_address);
}
+ else
+ {
+ /* This attribute is emitted if the code is disjoint. */
+ /* DW_AT_ranges. */
+ TC_DWARF2_EMIT_OFFSET (section_symbol (ranges_seg), sizeof_offset);
+ }
/* DW_AT_name. We don't have the actual file name that was present
on the command line, so assume files[1] is the main input file.
@@ -1473,7 +1607,7 @@ out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg)
len = strlen (dirs[files[1].dir]);
p = frag_more (len + 1);
memcpy (p, dirs[files[1].dir], len);
- p[len] = '/';
+ INSERT_DIR_SEPARATOR (p, len);
}
len = strlen (files[1].filename) + 1;
p = frag_more (len);
@@ -1551,6 +1685,7 @@ dwarf2_finish (void)
{
segT abbrev_seg;
segT aranges_seg;
+ segT ranges_seg;
assert (all_segs);
@@ -1567,8 +1702,19 @@ dwarf2_finish (void)
record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
+ if (all_segs->next == NULL)
+ ranges_seg = NULL;
+ else
+ {
+ ranges_seg = subseg_new (".debug_ranges", 0);
+ bfd_set_section_flags (stdoutput, ranges_seg,
+ SEC_READONLY | SEC_DEBUGGING);
+ record_alignment (ranges_seg, ffs (2 * sizeof_address) - 1);
+ out_debug_ranges (ranges_seg);
+ }
+
out_debug_aranges (aranges_seg, info_seg);
out_debug_abbrev (abbrev_seg);
- out_debug_info (info_seg, abbrev_seg, line_seg);
+ out_debug_info (info_seg, abbrev_seg, line_seg, ranges_seg);
}
}
diff --git a/gas/ecoff.c b/gas/ecoff.c
index 45116e86db0d..2f9f71f8ebe6 100644
--- a/gas/ecoff.c
+++ b/gas/ecoff.c
@@ -1,6 +1,6 @@
/* ECOFF debugging support.
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005
+ 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
Contributed by Cygnus Support.
This file was put together by Ian Lance Taylor <ian@cygnus.com>. A
@@ -2778,7 +2778,7 @@ ecoff_directive_val (int ignore ATTRIBUTE_UNUSED)
expression (&exp);
if (exp.X_op != O_constant && exp.X_op != O_symbol)
{
- as_bad (_(".val expression is too copmlex"));
+ as_bad (_(".val expression is too complex"));
demand_empty_rest_of_line ();
return;
}
diff --git a/gas/expr.c b/gas/expr.c
index 69f0aaccdb64..11f2942672cf 100644
--- a/gas/expr.c
+++ b/gas/expr.c
@@ -1,6 +1,6 @@
/* expr.c -operands, expressions-
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -25,7 +25,6 @@
(It also gives smaller files to re-compile.)
Here, "operand"s are of expressions, not instructions. */
-#include <string.h>
#define min(a, b) ((a) < (b) ? (a) : (b))
#include "as.h"
@@ -1003,11 +1002,6 @@ operand (expressionS *expressionP, enum expr_mode mode)
case '-':
case '+':
{
- /* Do not accept ++e or --e as +(+e) or -(-e)
- Disabled, since the preprocessor removes whitespace. */
- if (0 && (c == '-' || c == '+') && *input_line_pointer == c)
- goto target_op;
-
operand (expressionP, mode);
if (expressionP->X_op == O_constant)
{
@@ -1291,7 +1285,6 @@ operand (expressionS *expressionP, enum expr_mode mode)
}
else
{
- target_op:
/* Let the target try to parse it. Success is indicated by changing
the X_op field to something other than O_absent and pointing
input_line_pointer past the expression. If it can't parse the
@@ -1552,11 +1545,7 @@ operator (int *num_chars)
case '+':
case '-':
- /* Do not allow a++b and a--b to be a + (+b) and a - (-b)
- Disabled, since the preprocessor removes whitespace. */
- if (1 || input_line_pointer[1] != c)
- return op_encoding[c];
- return O_illegal;
+ return op_encoding[c];
case '<':
switch (input_line_pointer[1])
@@ -1647,7 +1636,7 @@ expr (int rankarg, /* Larger # is higher rank. */
operatorT op_right;
int op_chars;
- know (rank >= 0);
+ know (rankarg >= 0);
/* Save the value of dot for the fixup code. */
if (rank == 0)
@@ -1796,7 +1785,9 @@ expr (int rankarg, /* Larger # is higher rank. */
case O_bit_or_not: resultP->X_add_number |= ~v; break;
case O_bit_exclusive_or: resultP->X_add_number ^= v; break;
case O_bit_and: resultP->X_add_number &= v; break;
- case O_add: resultP->X_add_number += v; break;
+ /* Constant + constant (O_add) is handled by the
+ previous if statement for constant + X, so is omitted
+ here. */
case O_subtract: resultP->X_add_number -= v; break;
case O_eq:
resultP->X_add_number =
diff --git a/gas/frags.c b/gas/frags.c
index b08ef502cbf7..adb9b1986301 100644
--- a/gas/frags.c
+++ b/gas/frags.c
@@ -389,9 +389,9 @@ frag_append_1_char (int datum)
not already accounted for in the frag FR_ADDRESS. */
bfd_boolean
-frag_offset_fixed_p (fragS *frag1, fragS *frag2, bfd_vma *offset)
+frag_offset_fixed_p (const fragS *frag1, const fragS *frag2, bfd_vma *offset)
{
- fragS *frag;
+ const fragS *frag;
bfd_vma off;
/* Start with offset initialised to difference between the two frags.
diff --git a/gas/frags.h b/gas/frags.h
index 880446763a4e..66630dbd164b 100644
--- a/gas/frags.h
+++ b/gas/frags.h
@@ -148,6 +148,6 @@ char *frag_var (relax_stateT type,
offsetT offset,
char *opcode);
-bfd_boolean frag_offset_fixed_p (fragS *, fragS *, bfd_vma *);
+bfd_boolean frag_offset_fixed_p (const fragS *, const fragS *, bfd_vma *);
#endif /* FRAGS_H */
diff --git a/gas/gdbinit.in b/gas/gdbinit.in
index e946726ec676..fb1046da531a 100644
--- a/gas/gdbinit.in
+++ b/gas/gdbinit.in
@@ -6,7 +6,6 @@ break as_warn_where
break as_bad
break as_bad_where
break as_fatal
-break as_perror
break as_assert
break as_abort
diff --git a/gas/input-file.c b/gas/input-file.c
index 343f0494087c..0907bad37c86 100644
--- a/gas/input-file.c
+++ b/gas/input-file.c
@@ -1,6 +1,6 @@
/* input_file.c - Deal with Input Files -
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1999, 2000, 2001,
- 2002, 2003, 2005
+ 2002, 2003, 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -25,9 +25,6 @@
What we lose in "efficiency" we gain in modularity.
Note we don't need to #include the "as.h" file. No common coupling! */
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
#include "as.h"
#include "input-file.h"
#include "safe-ctype.h"
@@ -143,8 +140,8 @@ input_file_open (char *filename, /* "" means use stdin. Must not be 0. */
if (f_in == NULL)
{
- bfd_set_error (bfd_error_system_call);
- as_perror (_("Can't open %s for reading"), file_name);
+ as_bad (_("can't open %s for reading: %s"),
+ file_name, xstrerror (errno));
return;
}
@@ -152,8 +149,8 @@ input_file_open (char *filename, /* "" means use stdin. Must not be 0. */
if (ferror (f_in))
{
- bfd_set_error (bfd_error_system_call);
- as_perror (_("Can't open %s for reading"), file_name);
+ as_bad (_("can't read from %s: %s"),
+ file_name, xstrerror (errno));
fclose (f_in);
f_in = NULL;
@@ -166,8 +163,8 @@ input_file_open (char *filename, /* "" means use stdin. Must not be 0. */
c = getc (f_in);
if (c == 'N')
{
- fgets (buf, 80, f_in);
- if (!strncmp (buf, "O_APP", 5) && ISSPACE (buf[5]))
+ if (fgets (buf, sizeof (buf), f_in)
+ && !strncmp (buf, "O_APP", 5) && ISSPACE (buf[5]))
preprocess = 0;
if (!strchr (buf, '\n'))
ungetc ('#', f_in); /* It was longer. */
@@ -176,8 +173,8 @@ input_file_open (char *filename, /* "" means use stdin. Must not be 0. */
}
else if (c == 'A')
{
- fgets (buf, 80, f_in);
- if (!strncmp (buf, "PP", 2) && ISSPACE (buf[2]))
+ if (fgets (buf, sizeof (buf), f_in)
+ && !strncmp (buf, "PP", 2) && ISSPACE (buf[2]))
preprocess = 1;
if (!strchr (buf, '\n'))
ungetc ('#', f_in);
@@ -215,8 +212,7 @@ input_file_get (char *buf, int buflen)
size = fread (buf, sizeof (char), buflen, f_in);
if (size < 0)
{
- bfd_set_error (bfd_error_system_call);
- as_perror (_("Can't read from %s"), file_name);
+ as_bad (_("can't read from %s: %s"), file_name, xstrerror (errno));
size = 0;
}
return size;
@@ -242,8 +238,7 @@ input_file_give_next_buffer (char *where /* Where to place 1st character of new
size = fread (where, sizeof (char), BUFFER_SIZE, f_in);
if (size < 0)
{
- bfd_set_error (bfd_error_system_call);
- as_perror (_("Can't read from %s"), file_name);
+ as_bad (_("can't read from %s: %s"), file_name, xstrerror (errno));
size = 0;
}
if (size)
@@ -251,10 +246,8 @@ input_file_give_next_buffer (char *where /* Where to place 1st character of new
else
{
if (fclose (f_in))
- {
- bfd_set_error (bfd_error_system_call);
- as_perror (_("Can't close %s"), file_name);
- }
+ as_warn (_("can't close %s: %s"), file_name, xstrerror (errno));
+
f_in = (FILE *) 0;
return_value = 0;
}
diff --git a/gas/input-file.h b/gas/input-file.h
index bc8289e4e444..0628716b6403 100644
--- a/gas/input-file.h
+++ b/gas/input-file.h
@@ -1,5 +1,6 @@
/* input_file.h header for input-file.c
- Copyright 1987, 1992, 1993, 2000, 2003 Free Software Foundation, Inc.
+ Copyright 1987, 1992, 1993, 2000, 2003, 2005, 2006
+ Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -51,8 +52,8 @@
*
* input_file_close () Closes opened file.
*
- * All errors are reported (using as_perror) so caller doesn't have to think
- * about I/O errors. No I/O errors are fatal: an end-of-file may be faked.
+ * All errors are reported so caller doesn't have to think
+ * about I/O errors.
*/
char *input_file_give_next_buffer (char *where);
diff --git a/gas/input-scrub.c b/gas/input-scrub.c
index 8562ee25dff3..5698a6dc22a2 100644
--- a/gas/input-scrub.c
+++ b/gas/input-scrub.c
@@ -1,6 +1,6 @@
/* input_scrub.c - Break up input buffers into whole numbers of lines.
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 2000, 2001, 2003
+ 2000, 2001, 2003, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -20,7 +20,6 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include <errno.h> /* Need this to make errno declaration right */
#include "as.h"
#include "input-file.h"
#include "sb.h"
@@ -57,6 +56,10 @@
#define BEFORE_SIZE (1)
#define AFTER_SIZE (1)
+#ifndef TC_EOL_IN_INSN
+#define TC_EOL_IN_INSN(P) 0
+#endif
+
static char *buffer_start; /*->1st char of full buffer area. */
static char *partial_where; /*->after last full line in buffer. */
static int partial_size; /* >=0. Number of chars in partial line in buffer. */
@@ -342,8 +345,9 @@ input_scrub_next_buffer (char **bufp)
if (limit)
{
register char *p; /* Find last newline. */
-
- for (p = limit - 1; *p != '\n'; --p)
+ /* Terminate the buffer to avoid confusing TC_EOL_IN_INSN. */
+ *limit = '\0';
+ for (p = limit - 1; *p != '\n' || TC_EOL_IN_INSN (p); --p)
;
++p;
@@ -369,7 +373,9 @@ input_scrub_next_buffer (char **bufp)
return NULL;
}
- for (p = limit - 1; *p != '\n'; --p)
+ /* Terminate the buffer to avoid confusing TC_EOL_IN_INSN. */
+ *limit = '\0';
+ for (p = limit - 1; *p != '\n' || TC_EOL_IN_INSN (p); --p)
;
++p;
}
@@ -429,13 +435,34 @@ bump_line_counters (void)
Returns nonzero if the filename actually changes. */
int
-new_logical_line (char *fname, /* DON'T destroy it! We point to it! */
- int line_number)
+new_logical_line_flags (char *fname, /* DON'T destroy it! We point to it! */
+ int line_number,
+ int flags)
{
+ switch (flags)
+ {
+ case 0:
+ break;
+ case 1:
+ if (line_number != -1)
+ abort ();
+ break;
+ case 1 << 1:
+ case 1 << 2:
+ /* FIXME: we could check that include nesting is correct. */
+ break;
+ default:
+ abort ();
+ }
+
if (line_number >= 0)
logical_input_line = line_number;
- else if (line_number == -2 && logical_input_line > 0)
- --logical_input_line;
+ else if (line_number == -1 && fname && !*fname && (flags & (1 << 2)))
+ {
+ logical_input_file = physical_input_file;
+ logical_input_line = physical_input_line;
+ fname = NULL;
+ }
if (fname
&& (logical_input_file == NULL
@@ -447,6 +474,13 @@ new_logical_line (char *fname, /* DON'T destroy it! We point to it! */
else
return 0;
}
+
+int
+new_logical_line (char *fname, int line_number)
+{
+ return new_logical_line_flags (fname, line_number, 0);
+}
+
/* Return the current file name and line number.
namep should be char * const *, but there are compilers which screw
diff --git a/gas/itbl-lex.c b/gas/itbl-lex.c
deleted file mode 100644
index 1180eac13a02..000000000000
--- a/gas/itbl-lex.c
+++ /dev/null
@@ -1,1713 +0,0 @@
-/* A lexical scanner generated by flex */
-
-/* Scanner skeleton version:
- * $Header: /cvs/src/src/gas/Attic/itbl-lex.c,v 1.1.16.1 2006/04/16 18:36:43 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 15
-#define YY_END_OF_BUFFER 16
-static yyconst short int yy_accept[60] =
- { 0,
- 0, 0, 16, 14, 13, 12, 11, 8, 8, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 8, 0, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 7, 9, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 5, 1, 2, 3, 10, 6, 10, 4, 0
- } ;
-
-static yyconst int yy_ec[256] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 4, 1, 1, 5, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 6, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 1, 8, 1,
- 1, 1, 1, 1, 9, 10, 11, 12, 13, 10,
- 14, 15, 16, 15, 15, 15, 17, 18, 15, 15,
- 15, 19, 20, 15, 15, 15, 15, 15, 15, 15,
- 1, 1, 1, 1, 15, 1, 21, 10, 22, 23,
-
- 24, 10, 25, 15, 26, 15, 15, 15, 27, 28,
- 15, 29, 15, 30, 31, 15, 15, 15, 15, 32,
- 15, 15, 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, 1, 1, 1, 1
- } ;
-
-static yyconst int yy_meta[33] =
- { 0,
- 1, 1, 1, 1, 1, 2, 2, 1, 2, 2,
- 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
- 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
- 3, 3
- } ;
-
-static yyconst short int yy_base[62] =
- { 0,
- 0, 0, 83, 84, 84, 84, 84, 27, 29, 70,
- 0, 62, 61, 60, 20, 55, 47, 46, 45, 12,
- 35, 37, 0, 0, 62, 60, 59, 58, 53, 49,
- 45, 43, 42, 41, 37, 32, 0, 0, 43, 44,
- 43, 42, 42, 36, 23, 27, 26, 25, 25, 20,
- 0, 0, 0, 0, 35, 0, 23, 0, 84, 58,
- 43
- } ;
-
-static yyconst short int yy_def[62] =
- { 0,
- 59, 1, 59, 59, 59, 59, 59, 59, 59, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 59, 61, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 61, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 0, 59,
- 59
- } ;
-
-static yyconst short int yy_nxt[117] =
- { 0,
- 4, 5, 6, 5, 7, 8, 9, 7, 10, 11,
- 12, 13, 11, 14, 11, 15, 11, 11, 11, 11,
- 16, 17, 18, 11, 19, 20, 11, 11, 21, 11,
- 11, 11, 22, 22, 22, 22, 29, 30, 35, 36,
- 37, 37, 22, 22, 38, 58, 58, 56, 57, 54,
- 53, 52, 51, 56, 55, 54, 53, 52, 23, 24,
- 24, 51, 50, 49, 48, 47, 46, 45, 44, 43,
- 42, 41, 40, 39, 34, 33, 32, 31, 28, 27,
- 26, 25, 59, 3, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
-
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59
- } ;
-
-static yyconst short int yy_chk[117] =
- { 0,
- 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, 8, 8, 9, 9, 15, 15, 20, 20,
- 21, 21, 22, 22, 61, 57, 55, 50, 49, 48,
- 47, 46, 45, 44, 43, 42, 41, 40, 8, 60,
- 60, 39, 36, 35, 34, 33, 32, 31, 30, 29,
- 28, 27, 26, 25, 19, 18, 17, 16, 14, 13,
- 12, 10, 3, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
-
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59
- } ;
-
-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 "itbl-lex.l"
-#define INITIAL 0
-/* itbl-lex.l
- Copyright 1997, 1998, 2001, 2002, 2005 Free Software Foundation, Inc.
-
- This file is part of GAS, the GNU Assembler.
-
- GAS is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- GAS is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GAS; see the file COPYING. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-#line 22 "itbl-lex.l"
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "itbl-lex.h"
-#include <itbl-parse.h>
-
-#ifdef DEBUG
-#define DBG(x) printf x
-#define MDBG(x) printf x
-#else
-#define DBG(x)
-#define MDBG(x)
-#endif
-
-int insntbl_line = 1;
-#line 446 "itbl-lex.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 45 "itbl-lex.l"
-
-
-#line 611 "itbl-lex.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 >= 60 )
- 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] != 84 );
-
-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 47 "itbl-lex.l"
-{
- return CREG;
- }
- YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 50 "itbl-lex.l"
-{
- return DREG;
- }
- YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 53 "itbl-lex.l"
-{
- return GREG;
- }
- YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 56 "itbl-lex.l"
-{
- return IMMED;
- }
- YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 59 "itbl-lex.l"
-{
- return ADDR;
- }
- YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 62 "itbl-lex.l"
-{
- return INSN;
- }
- YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 65 "itbl-lex.l"
-{
- yytext[yyleng] = 0;
- yylval.processor = strtoul (yytext+1, 0, 0);
- return PNUM;
- }
- YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 70 "itbl-lex.l"
-{
- yytext[yyleng] = 0;
- yylval.num = strtoul (yytext, 0, 0);
- return NUM;
- }
- YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 75 "itbl-lex.l"
-{
- yytext[yyleng] = 0;
- yylval.num = strtoul (yytext, 0, 0);
- return NUM;
- }
- YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 80 "itbl-lex.l"
-{
- yytext[yyleng] = 0;
- yylval.str = strdup (yytext);
- return ID;
- }
- YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 85 "itbl-lex.l"
-{
- int c;
- while ((c = input ()) != EOF)
- {
- if (c == '\n')
- {
- unput (c);
- break;
- }
- }
- }
- YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 96 "itbl-lex.l"
-{
- insntbl_line++;
- MDBG (("in lex, NL = %d (x%x)\n", NL, NL));
- return NL;
- }
- YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 101 "itbl-lex.l"
-{
- }
- YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 103 "itbl-lex.l"
-{
- MDBG (("char = %x, %d\n", yytext[0], yytext[0]));
- return yytext[0];
- }
- YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 107 "itbl-lex.l"
-ECHO;
- YY_BREAK
-#line 815 "itbl-lex.c"
-case YY_STATE_EOF(INITIAL):
- yyterminate();
-
- 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 >= 60 )
- 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 >= 60 )
- 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 == 59);
-
- 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 107 "itbl-lex.l"
-
-
-#ifndef yywrap
-int
-yywrap ()
- {
- return 1;
- }
-#endif
diff --git a/gas/itbl-lex.l b/gas/itbl-lex.l
index aceeac4f9f03..185f956ecead 100644
--- a/gas/itbl-lex.l
+++ b/gas/itbl-lex.l
@@ -1,5 +1,6 @@
/* itbl-lex.l
- Copyright 1997, 1998, 2001, 2002, 2005 Free Software Foundation, Inc.
+ Copyright 1997, 1998, 2001, 2002, 2005, 2006
+ Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -19,10 +20,7 @@
02110-1301, USA. */
%{
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
+#include "as.h"
#include "itbl-lex.h"
#include <itbl-parse.h>
diff --git a/gas/itbl-ops.c b/gas/itbl-ops.c
index bd1f6473f45c..41fa0335e1b8 100644
--- a/gas/itbl-ops.c
+++ b/gas/itbl-ops.c
@@ -1,5 +1,5 @@
/* itbl-ops.c
- Copyright 1997, 1999, 2000, 2001, 2002, 2003, 2005
+ Copyright 1997, 1999, 2000, 2001, 2002, 2003, 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -89,9 +89,7 @@
*
*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include "as.h"
#include "itbl-ops.h"
#include <itbl-parse.h>
@@ -147,12 +145,7 @@ struct itbl_entry {
static int itbl_num_opcodes = 0;
/* Array of entries for each processor and entry type */
-static struct itbl_entry *entries[e_nprocs][e_ntypes] = {
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0}
-};
+static struct itbl_entry *entries[e_nprocs][e_ntypes];
/* local prototypes */
static unsigned long build_opcode (struct itbl_entry *e);
@@ -253,8 +246,6 @@ itbl_add_operand (struct itbl_entry *e, int yytype, int sbit,
/* Interfaces for assembler and disassembler */
#ifndef STAND_ALONE
-#include "as.h"
-#include "symbols.h"
static void append_insns_as_macros (void);
/* Initialize for gas. */
diff --git a/gas/itbl-ops.h b/gas/itbl-ops.h
index 47dc8b295b19..d9dbf7c3ca47 100644
--- a/gas/itbl-ops.h
+++ b/gas/itbl-ops.h
@@ -1,5 +1,5 @@
/* itbl-ops.h
- Copyright 1997, 1999, 2000, 2003 Free Software Foundation, Inc.
+ Copyright 1997, 1999, 2000, 2003, 2006, 2007 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -20,14 +20,6 @@
/* External functions, constants and defines for itbl support */
-#include "ansidecl.h"
-
-/* Include file notes: "expr.h" needed before targ-*.h,
- * "targ-env.h" includes the chain of target dependant headers,
- * "targ-cpu.h" has the HAVE_ITBL_CPU define, and
- * as.h includes them all */
-#include "as.h"
-
#ifdef HAVE_ITBL_CPU
#include "itbl-cpu.h"
#endif
@@ -77,7 +69,7 @@ typedef enum
typedef enum
{
e_p0,
- e_nprocs = NUMBER_OF_PROCESSORS,
+ e_nprocs = ITBL_NUMBER_OF_PROCESSORS,
e_invproc /* invalid processor */
} e_processor;
diff --git a/gas/itbl-parse.c b/gas/itbl-parse.c
deleted file mode 100644
index 0fd788f0521f..000000000000
--- a/gas/itbl-parse.c
+++ /dev/null
@@ -1,1842 +0,0 @@
-/* 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 {
- DREG = 258,
- CREG = 259,
- GREG = 260,
- IMMED = 261,
- ADDR = 262,
- INSN = 263,
- NUM = 264,
- ID = 265,
- NL = 266,
- PNUM = 267
- };
-#endif
-/* Tokens. */
-#define DREG 258
-#define CREG 259
-#define GREG 260
-#define IMMED 261
-#define ADDR 262
-#define INSN 263
-#define NUM 264
-#define ID 265
-#define NL 266
-#define PNUM 267
-
-
-
-
-/* Copy the first part of user declarations. */
-#line 21 "itbl-parse.y"
-
-
-/*
-
-Yacc grammar for instruction table entries.
-
-=======================================================================
-Original Instruction table specification document:
-
- MIPS Coprocessor Table Specification
- ====================================
-
-This document describes the format of the MIPS coprocessor table. The
-table specifies a list of valid functions, data registers and control
-registers that can be used in coprocessor instructions. This list,
-together with the coprocessor instruction classes listed below,
-specifies the complete list of coprocessor instructions that will
-be recognized and assembled by the GNU assembler. In effect,
-this makes the GNU assembler table-driven, where the table is
-specified by the programmer.
-
-The table is an ordinary text file that the GNU assembler reads when
-it starts. Using the information in the table, the assembler
-generates an internal list of valid coprocessor registers and
-functions. The assembler uses this internal list in addition to the
-standard MIPS registers and instructions which are built-in to the
-assembler during code generation.
-
-To specify the coprocessor table when invoking the GNU assembler, use
-the command line option "--itbl file", where file is the
-complete name of the table, including path and extension.
-
-Examples:
-
- gas -t cop.tbl test.s -o test.o
- gas -t /usr/local/lib/cop.tbl test.s -o test.o
- gas --itbl d:\gnu\data\cop.tbl test.s -o test.o
-
-Only one table may be supplied during a single invocation of
-the assembler.
-
-
-Instruction classes
-===================
-
-Below is a list of the valid coprocessor instruction classes for
-any given coprocessor "z". These instructions are already recognized
-by the assembler, and are listed here only for reference.
-
-Class format instructions
--------------------------------------------------
-Class1:
- op base rt offset
- LWCz rt,offset (base)
- SWCz rt,offset (base)
-Class2:
- COPz sub rt rd 0
- MTCz rt,rd
- MFCz rt,rd
- CTCz rt,rd
- CFCz rt,rd
-Class3:
- COPz CO cofun
- COPz cofun
-Class4:
- COPz BC br offset
- BCzT offset
- BCzF offset
-Class5:
- COPz sub rt rd 0
- DMFCz rt,rd
- DMTCz rt,rd
-Class6:
- op base rt offset
- LDCz rt,offset (base)
- SDCz rt,offset (base)
-Class7:
- COPz BC br offset
- BCzTL offset
- BCzFL offset
-
-The coprocessor table defines coprocessor-specific registers that can
-be used with all of the above classes of instructions, where
-appropriate. It also defines additional coprocessor-specific
-functions for Class3 (COPz cofun) instructions, Thus, the table allows
-the programmer to use convenient mnemonics and operands for these
-functions, instead of the COPz mmenmonic and cofun operand.
-
-The names of the MIPS general registers and their aliases are defined
-by the assembler and will be recognized as valid register names by the
-assembler when used (where allowed) in coprocessor instructions.
-However, the names and values of all coprocessor data and control
-register mnemonics must be specified in the coprocessor table.
-
-
-Table Grammar
-=============
-
-Here is the grammar for the coprocessor table:
-
- table -> entry*
-
- entry -> [z entrydef] [comment] '\n'
-
- entrydef -> type name val
- entrydef -> 'insn' name val funcdef ; type of entry (instruction)
-
- z -> 'p'['0'..'3'] ; processor number
- type -> ['dreg' | 'creg' | 'greg' ] ; type of entry (register)
- ; 'dreg', 'creg' or 'greg' specifies a data, control, or general
- ; register mnemonic, respectively
- name -> [ltr|dec]* ; mnemonic of register/function
- val -> [dec|hex] ; register/function number (integer constant)
-
- funcdef -> frange flags fields
- ; bitfield range for opcode
- ; list of fields' formats
- fields -> field*
- field -> [','] ftype frange flags
- flags -> ['*' flagexpr]
- flagexpr -> '[' flagexpr ']'
- flagexpr -> val '|' flagexpr
- ftype -> [ type | 'immed' | 'addr' ]
- ; 'immed' specifies an immediate value; see grammar for "val" above
- ; 'addr' specifies a C identifier; name of symbol to be resolved at
- ; link time
- frange -> ':' val '-' val ; starting to ending bit positions, where
- ; where 0 is least significant bit
- frange -> (null) ; default range of 31-0 will be assumed
-
- comment -> [';'|'#'] [char]*
- char -> any printable character
- ltr -> ['a'..'z'|'A'..'Z']
- dec -> ['0'..'9']* ; value in decimal
- hex -> '0x'['0'..'9' | 'a'..'f' | 'A'..'F']* ; value in hexadecimal
-
-
-Examples
-========
-
-Example 1:
-
-The table:
-
- p1 dreg d1 1 ; data register "d1" for COP1 has value 1
- p1 creg c3 3 ; ctrl register "c3" for COP1 has value 3
- p3 func fill 0x1f:24-20 ; function "fill" for COP3 has value 31 and
- ; no fields
-
-will allow the assembler to accept the following coprocessor instructions:
-
- LWC1 d1,0x100 ($2)
- fill
-
-Here, the general purpose register "$2", and instruction "LWC1", are standard
-mnemonics built-in to the MIPS assembler.
-
-
-Example 2:
-
-The table:
-
- p3 dreg d3 3 ; data register "d3" for COP3 has value 3
- p3 creg c2 22 ; control register "c2" for COP3 has value 22
- p3 func fee 0x1f:24-20 dreg:17-13 creg:12-8 immed:7-0
- ; function "fee" for COP3 has value 31, and 3 fields
- ; consisting of a data register, a control register,
- ; and an immediate value.
-
-will allow the assembler to accept the following coprocessor instruction:
-
- fee d3,c2,0x1
-
-and will emit the object code:
-
- 31-26 25 24-20 19-18 17-13 12-8 7-0
- COPz CO fun dreg creg immed
- 010011 1 11111 00 00011 10110 00000001
-
- 0x4ff07601
-
-
-Example 3:
-
-The table:
-
- p3 dreg d3 3 ; data register "d3" for COP3 has value 3
- p3 creg c2 22 ; control register "c2" for COP3 has value 22
- p3 func fuu 0x01f00001 dreg:17-13 creg:12-8
-
-will allow the assembler to accept the following coprocessor
-instruction:
-
- fuu d3,c2
-
-and will emit the object code:
-
- 31-26 25 24-20 19-18 17-13 12-8 7-0
- COPz CO fun dreg creg
- 010011 1 11111 00 00011 10110 00000001
-
- 0x4ff07601
-
-In this way, the programmer can force arbitrary bits of an instruction
-to have predefined values.
-
-=======================================================================
-Additional notes:
-
-Encoding of ranges:
-To handle more than one bit position range within an instruction,
-use 0s to mask out the ranges which don't apply.
-May decide to modify the syntax to allow commas separate multiple
-ranges within an instruction (range','range).
-
-Changes in grammar:
- The number of parms argument to the function entry
-was deleted from the original format such that we now count the fields.
-
-----
-FIXME! should really change lexical analyzer
-to recognize 'dreg' etc. in context sensitive way.
-Currently function names or mnemonics may be incorrectly parsed as keywords
-
-FIXME! hex is ambiguous with any digit
-
-*/
-
-#include <stdio.h>
-#include "itbl-lex.h"
-#include "itbl-ops.h"
-
-/* #define DEBUG */
-
-#ifdef DEBUG
-#ifndef DBG_LVL
-#define DBG_LVL 1
-#endif
-#else
-#define DBG_LVL 0
-#endif
-
-#if DBG_LVL >= 1
-#define DBG(x) printf x
-#else
-#define DBG(x)
-#endif
-
-#if DBG_LVL >= 2
-#define DBGL2(x) printf x
-#else
-#define DBGL2(x)
-#endif
-
-static int sbit, ebit;
-static struct itbl_entry *insn=0;
-static int yyerror PARAMS ((const char *));
-
-
-
-/* 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 282 "itbl-parse.y"
-typedef union YYSTYPE {
- char *str;
- int num;
- int processor;
- unsigned long val;
- } YYSTYPE;
-/* Line 196 of yacc.c. */
-#line 376 "itbl-parse.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 388 "itbl-parse.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 9
-/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 46
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 20
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 15
-/* YYNRULES -- Number of rules. */
-#define YYNRULES 29
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 51
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
-#define YYUNDEFTOK 2
-#define YYMAXUTOK 267
-
-#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, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 17, 2, 13, 19, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 18, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 15, 2, 16, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 14, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
- YYRHS. */
-static const unsigned char yyprhs[] =
-{
- 0, 0, 3, 5, 8, 9, 15, 16, 26, 28,
- 31, 35, 38, 39, 41, 43, 45, 49, 53, 57,
- 59, 62, 63, 68, 69, 71, 73, 75, 77, 79
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yysigned_char yyrhs[] =
-{
- 21, 0, -1, 22, -1, 23, 22, -1, -1, 31,
- 32, 33, 34, 11, -1, -1, 31, 8, 33, 34,
- 30, 29, 24, 25, 11, -1, 11, -1, 1, 11,
- -1, 13, 27, 25, -1, 27, 25, -1, -1, 32,
- -1, 7, -1, 6, -1, 26, 30, 29, -1, 9,
- 14, 28, -1, 15, 28, 16, -1, 9, -1, 17,
- 28, -1, -1, 18, 9, 19, 9, -1, -1, 12,
- -1, 3, -1, 4, -1, 5, -1, 10, -1, 9,
- -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const unsigned short int yyrline[] =
-{
- 0, 299, 299, 303, 304, 308, 315, 314, 323, 324,
- 328, 329, 330, 334, 339, 344, 352, 361, 365, 369,
- 376, 382, 388, 395, 402, 410, 415, 420, 428, 444
-};
-#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", "DREG", "CREG", "GREG", "IMMED", "ADDR",
- "INSN", "NUM", "ID", "NL", "PNUM", "','", "'|'", "'['", "']'", "'*'",
- "':'", "'-'", "$accept", "insntbl", "entrys", "entry", "@1",
- "fieldspecs", "ftype", "fieldspec", "flagexpr", "flags", "range", "pnum",
- "regtype", "name", "value", 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, 261, 262, 263, 264,
- 265, 266, 267, 44, 124, 91, 93, 42, 58, 45
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const unsigned char yyr1[] =
-{
- 0, 20, 21, 22, 22, 23, 24, 23, 23, 23,
- 25, 25, 25, 26, 26, 26, 27, 28, 28, 28,
- 29, 29, 30, 30, 31, 32, 32, 32, 33, 34
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const unsigned char yyr2[] =
-{
- 0, 2, 1, 2, 0, 5, 0, 9, 1, 2,
- 3, 2, 0, 1, 1, 1, 3, 3, 3, 1,
- 2, 0, 4, 0, 1, 1, 1, 1, 1, 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 char yydefact[] =
-{
- 0, 0, 8, 24, 0, 2, 0, 0, 9, 1,
- 3, 25, 26, 27, 0, 0, 28, 0, 0, 29,
- 23, 0, 0, 21, 5, 0, 0, 6, 0, 19,
- 0, 20, 12, 22, 0, 0, 15, 14, 0, 0,
- 23, 12, 13, 17, 18, 12, 7, 21, 11, 10,
- 16
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yysigned_char yydefgoto[] =
-{
- -1, 4, 5, 6, 32, 39, 40, 41, 31, 27,
- 23, 7, 42, 17, 20
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -16
-static const yysigned_char yypact[] =
-{
- 0, -9, -16, -16, 10, -16, 0, 12, -16, -16,
- -16, -16, -16, -16, 3, 3, -16, 9, 9, -16,
- 11, 8, 19, 15, -16, 14, -6, -16, 25, 21,
- -6, -16, 1, -16, -6, 20, -16, -16, 18, 26,
- 11, 1, -16, -16, -16, 1, -16, 15, -16, -16,
- -16
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const yysigned_char yypgoto[] =
-{
- -16, -16, 32, -16, -16, -15, -16, 2, -3, -8,
- 4, -16, 34, 27, 28
-};
-
-/* 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 -5
-static const yysigned_char yytable[] =
-{
- -4, 1, 8, 29, 11, 12, 13, 36, 37, 30,
- 9, 2, 3, 16, 38, 11, 12, 13, 19, 24,
- 14, 11, 12, 13, 36, 37, 48, 35, 25, 22,
- 49, 43, 26, 28, 33, 34, 44, 46, 10, 50,
- 45, 15, 18, 0, 47, 0, 21
-};
-
-static const yysigned_char yycheck[] =
-{
- 0, 1, 11, 9, 3, 4, 5, 6, 7, 15,
- 0, 11, 12, 10, 13, 3, 4, 5, 9, 11,
- 8, 3, 4, 5, 6, 7, 41, 30, 9, 18,
- 45, 34, 17, 19, 9, 14, 16, 11, 6, 47,
- 38, 7, 15, -1, 40, -1, 18
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
-static const unsigned char yystos[] =
-{
- 0, 1, 11, 12, 21, 22, 23, 31, 11, 0,
- 22, 3, 4, 5, 8, 32, 10, 33, 33, 9,
- 34, 34, 18, 30, 11, 9, 17, 29, 19, 9,
- 15, 28, 24, 9, 14, 28, 6, 7, 13, 25,
- 26, 27, 32, 28, 16, 27, 11, 30, 25, 25,
- 29
-};
-
-#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 5:
-#line 309 "itbl-parse.y"
- {
- DBG (("line %d: entry pnum=%d type=%d name=%s value=x%x\n",
- insntbl_line, (yyvsp[-4].num), (yyvsp[-3].num), (yyvsp[-2].str), (yyvsp[-1].val)));
- itbl_add_reg ((yyvsp[-4].num), (yyvsp[-3].num), (yyvsp[-2].str), (yyvsp[-1].val));
- }
- break;
-
- case 6:
-#line 315 "itbl-parse.y"
- {
- DBG (("line %d: entry pnum=%d type=INSN name=%s value=x%x",
- insntbl_line, (yyvsp[-5].num), (yyvsp[-3].str), (yyvsp[-2].val)));
- DBG ((" sbit=%d ebit=%d flags=0x%x\n", sbit, ebit, (yyvsp[0].val)));
- insn=itbl_add_insn ((yyvsp[-5].num), (yyvsp[-3].str), (yyvsp[-2].val), sbit, ebit, (yyvsp[0].val));
- }
- break;
-
- case 7:
-#line 322 "itbl-parse.y"
- {}
- break;
-
- case 13:
-#line 335 "itbl-parse.y"
- {
- DBGL2 (("ftype\n"));
- (yyval.num) = (yyvsp[0].num);
- }
- break;
-
- case 14:
-#line 340 "itbl-parse.y"
- {
- DBGL2 (("addr\n"));
- (yyval.num) = ADDR;
- }
- break;
-
- case 15:
-#line 345 "itbl-parse.y"
- {
- DBGL2 (("immed\n"));
- (yyval.num) = IMMED;
- }
- break;
-
- case 16:
-#line 353 "itbl-parse.y"
- {
- DBG (("line %d: field type=%d sbit=%d ebit=%d, flags=0x%x\n",
- insntbl_line, (yyvsp[-2].num), sbit, ebit, (yyvsp[0].val)));
- itbl_add_operand (insn, (yyvsp[-2].num), sbit, ebit, (yyvsp[0].val));
- }
- break;
-
- case 17:
-#line 362 "itbl-parse.y"
- {
- (yyval.val) = (yyvsp[-2].num) | (yyvsp[0].val);
- }
- break;
-
- case 18:
-#line 366 "itbl-parse.y"
- {
- (yyval.val) = (yyvsp[-1].val);
- }
- break;
-
- case 19:
-#line 370 "itbl-parse.y"
- {
- (yyval.val) = (yyvsp[0].num);
- }
- break;
-
- case 20:
-#line 377 "itbl-parse.y"
- {
- DBGL2 (("flags=%d\n", (yyvsp[0].val)));
- (yyval.val) = (yyvsp[0].val);
- }
- break;
-
- case 21:
-#line 382 "itbl-parse.y"
- {
- (yyval.val) = 0;
- }
- break;
-
- case 22:
-#line 389 "itbl-parse.y"
- {
- DBGL2 (("range %d %d\n", (yyvsp[-2].num), (yyvsp[0].num)));
- sbit = (yyvsp[-2].num);
- ebit = (yyvsp[0].num);
- }
- break;
-
- case 23:
-#line 395 "itbl-parse.y"
- {
- sbit = 31;
- ebit = 0;
- }
- break;
-
- case 24:
-#line 403 "itbl-parse.y"
- {
- DBGL2 (("pnum=%d\n",(yyvsp[0].num)));
- (yyval.num) = (yyvsp[0].num);
- }
- break;
-
- case 25:
-#line 411 "itbl-parse.y"
- {
- DBGL2 (("dreg\n"));
- (yyval.num) = DREG;
- }
- break;
-
- case 26:
-#line 416 "itbl-parse.y"
- {
- DBGL2 (("creg\n"));
- (yyval.num) = CREG;
- }
- break;
-
- case 27:
-#line 421 "itbl-parse.y"
- {
- DBGL2 (("greg\n"));
- (yyval.num) = GREG;
- }
- break;
-
- case 28:
-#line 429 "itbl-parse.y"
- {
- DBGL2 (("name=%s\n",(yyvsp[0].str)));
- (yyval.str) = (yyvsp[0].str);
- }
- break;
-
- case 29:
-#line 445 "itbl-parse.y"
- {
- DBGL2 (("val=x%x\n",(yyvsp[0].num)));
- (yyval.val) = (yyvsp[0].num);
- }
- break;
-
-
- default: break;
- }
-
-/* Line 1126 of yacc.c. */
-#line 1565 "itbl-parse.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 450 "itbl-parse.y"
-
-
-static int
-yyerror (msg)
- const char *msg;
-{
- printf ("line %d: %s\n", insntbl_line, msg);
- return 0;
-}
-
diff --git a/gas/itbl-parse.h b/gas/itbl-parse.h
deleted file mode 100644
index 9fd500831b79..000000000000
--- a/gas/itbl-parse.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* 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 {
- DREG = 258,
- CREG = 259,
- GREG = 260,
- IMMED = 261,
- ADDR = 262,
- INSN = 263,
- NUM = 264,
- ID = 265,
- NL = 266,
- PNUM = 267
- };
-#endif
-/* Tokens. */
-#define DREG 258
-#define CREG 259
-#define GREG 260
-#define IMMED 261
-#define ADDR 262
-#define INSN 263
-#define NUM 264
-#define ID 265
-#define NL 266
-#define PNUM 267
-
-
-
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 282 "itbl-parse.y"
-typedef union YYSTYPE {
- char *str;
- int num;
- int processor;
- unsigned long val;
- } YYSTYPE;
-/* Line 1447 of yacc.c. */
-#line 69 "itbl-parse.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/gas/itbl-parse.y b/gas/itbl-parse.y
index a7a52dfabff9..ff48657fb365 100644
--- a/gas/itbl-parse.y
+++ b/gas/itbl-parse.y
@@ -1,5 +1,5 @@
/* itbl-parse.y
- Copyright 1997, 2002, 2003, 2005 Free Software Foundation, Inc.
+ Copyright 1997, 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -246,7 +246,7 @@ FIXME! hex is ambiguous with any digit
*/
-#include <stdio.h>
+#include "as.h"
#include "itbl-lex.h"
#include "itbl-ops.h"
@@ -274,7 +274,7 @@ FIXME! hex is ambiguous with any digit
static int sbit, ebit;
static struct itbl_entry *insn=0;
-static int yyerror PARAMS ((const char *));
+static int yyerror (const char *);
%}
diff --git a/gas/listing.c b/gas/listing.c
index 61ef6f55e40f..1b55cbf63989 100644
--- a/gas/listing.c
+++ b/gas/listing.c
@@ -1,6 +1,6 @@
/* listing.c - maintain assembly listings
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2005
+ 2001, 2002, 2003, 2005, 2006
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -946,15 +946,6 @@ listing_listing (char *name ATTRIBUTE_UNUSED)
buffer = xmalloc (listing_rhs_width);
data_buffer = xmalloc (MAX_BYTES);
eject = 1;
- list = head;
-
- while (list != (list_info_type *) NULL && 0)
- {
- if (list->next)
- list->frag = list->next->frag;
- list = list->next;
- }
-
list = head->next;
while (list)
@@ -1085,8 +1076,7 @@ listing_print (char *name)
using_stdout = 0;
else
{
- bfd_set_error (bfd_error_system_call);
- as_perror (_("can't open list file: %s"), name);
+ as_warn (_("can't open %s: %s"), name, xstrerror (errno));
list_file = stdout;
using_stdout = 1;
}
@@ -1104,10 +1094,7 @@ listing_print (char *name)
if (! using_stdout)
{
if (fclose (list_file) == EOF)
- {
- bfd_set_error (bfd_error_system_call);
- as_perror (_("error closing list file: %s"), name);
- }
+ as_warn (_("can't close %s: %s"), name, xstrerror (errno));
}
if (last_open_file)
diff --git a/gas/m68k-parse.c b/gas/m68k-parse.c
deleted file mode 100644
index 5258dda60c53..000000000000
--- a/gas/m68k-parse.c
+++ /dev/null
@@ -1,2672 +0,0 @@
-/* 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 {
- DR = 258,
- AR = 259,
- FPR = 260,
- FPCR = 261,
- LPC = 262,
- ZAR = 263,
- ZDR = 264,
- LZPC = 265,
- CREG = 266,
- INDEXREG = 267,
- EXPR = 268
- };
-#endif
-/* Tokens. */
-#define DR 258
-#define AR 259
-#define FPR 260
-#define FPCR 261
-#define LPC 262
-#define ZAR 263
-#define ZDR 264
-#define LZPC 265
-#define CREG 266
-#define INDEXREG 267
-#define EXPR 268
-
-
-
-
-/* Copy the first part of user declarations. */
-#line 28 "m68k-parse.y"
-
-
-#include "as.h"
-#include "tc-m68k.h"
-#include "m68k-parse.h"
-#include "safe-ctype.h"
-
-/* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
- etc), as well as gratuitously global symbol names 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 m68k_maxdepth
-#define yyparse m68k_parse
-#define yylex m68k_lex
-#define yyerror m68k_error
-#define yylval m68k_lval
-#define yychar m68k_char
-#define yydebug m68k_debug
-#define yypact m68k_pact
-#define yyr1 m68k_r1
-#define yyr2 m68k_r2
-#define yydef m68k_def
-#define yychk m68k_chk
-#define yypgo m68k_pgo
-#define yyact m68k_act
-#define yyexca m68k_exca
-#define yyerrflag m68k_errflag
-#define yynerrs m68k_nerrs
-#define yyps m68k_ps
-#define yypv m68k_pv
-#define yys m68k_s
-#define yy_yys m68k_yys
-#define yystate m68k_state
-#define yytmp m68k_tmp
-#define yyv m68k_v
-#define yy_yyv m68k_yyv
-#define yyval m68k_val
-#define yylloc m68k_lloc
-#define yyreds m68k_reds /* With YYDEBUG defined */
-#define yytoks m68k_toks /* With YYDEBUG defined */
-#define yylhs m68k_yylhs
-#define yylen m68k_yylen
-#define yydefred m68k_yydefred
-#define yydgoto m68k_yydgoto
-#define yysindex m68k_yysindex
-#define yyrindex m68k_yyrindex
-#define yygindex m68k_yygindex
-#define yytable m68k_yytable
-#define yycheck m68k_yycheck
-
-#ifndef YYDEBUG
-#define YYDEBUG 1
-#endif
-
-/* Internal functions. */
-
-static enum m68k_register m68k_reg_parse (char **);
-static int yylex (void);
-static void yyerror (const char *);
-
-/* The parser sets fields pointed to by this global variable. */
-static struct m68k_op *op;
-
-
-
-/* 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 96 "m68k-parse.y"
-typedef union YYSTYPE {
- struct m68k_indexreg indexreg;
- enum m68k_register reg;
- struct m68k_exp exp;
- unsigned long mask;
- int onereg;
- int trailing_ampersand;
-} YYSTYPE;
-/* Line 196 of yacc.c. */
-#line 187 "m68k-parse.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 199 "m68k-parse.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 44
-/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 215
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 27
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 21
-/* YYNRULES -- Number of rules. */
-#define YYNRULES 89
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 180
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
-#define YYUNDEFTOK 2
-#define YYMAXUTOK 268
-
-#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, 2, 2, 17, 2, 2, 14, 2,
- 18, 19, 2, 20, 22, 21, 2, 26, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 15, 2, 16, 2, 25, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 23, 2, 24, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13
-};
-
-#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, 5, 8, 11, 12, 14, 17, 20,
- 22, 24, 26, 28, 30, 32, 35, 38, 40, 44,
- 49, 54, 60, 66, 71, 75, 79, 83, 91, 99,
- 106, 112, 119, 125, 132, 138, 144, 149, 159, 167,
- 176, 183, 194, 203, 214, 223, 232, 235, 239, 243,
- 249, 256, 267, 277, 288, 290, 292, 294, 296, 298,
- 300, 302, 304, 306, 308, 310, 312, 314, 316, 317,
- 319, 321, 323, 324, 327, 328, 331, 332, 335, 337,
- 341, 345, 347, 349, 353, 357, 361, 363, 365, 367
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yysigned_char yyrhs[] =
-{
- 28, 0, -1, 30, -1, 31, 29, -1, 32, 29,
- -1, -1, 14, -1, 15, 15, -1, 16, 16, -1,
- 3, -1, 4, -1, 5, -1, 6, -1, 11, -1,
- 13, -1, 17, 13, -1, 14, 13, -1, 44, -1,
- 18, 4, 19, -1, 18, 4, 19, 20, -1, 21,
- 18, 4, 19, -1, 18, 13, 22, 38, 19, -1,
- 18, 38, 22, 13, 19, -1, 13, 18, 38, 19,
- -1, 18, 7, 19, -1, 18, 8, 19, -1, 18,
- 10, 19, -1, 18, 13, 22, 38, 22, 33, 19,
- -1, 18, 13, 22, 38, 22, 40, 19, -1, 18,
- 13, 22, 34, 41, 19, -1, 18, 34, 22, 13,
- 19, -1, 13, 18, 38, 22, 33, 19, -1, 18,
- 38, 22, 33, 19, -1, 13, 18, 38, 22, 40,
- 19, -1, 18, 38, 22, 40, 19, -1, 13, 18,
- 34, 41, 19, -1, 18, 34, 41, 19, -1, 18,
- 23, 13, 41, 24, 22, 33, 42, 19, -1, 18,
- 23, 13, 41, 24, 42, 19, -1, 18, 23, 38,
- 24, 22, 33, 42, 19, -1, 18, 23, 38, 24,
- 42, 19, -1, 18, 23, 13, 22, 38, 22, 33,
- 24, 42, 19, -1, 18, 23, 38, 22, 33, 24,
- 42, 19, -1, 18, 23, 13, 22, 38, 22, 40,
- 24, 42, 19, -1, 18, 23, 38, 22, 40, 24,
- 42, 19, -1, 18, 23, 43, 34, 41, 24, 42,
- 19, -1, 39, 25, -1, 39, 25, 20, -1, 39,
- 25, 21, -1, 39, 25, 18, 13, 19, -1, 39,
- 25, 18, 43, 33, 19, -1, 39, 25, 18, 13,
- 19, 25, 18, 43, 33, 19, -1, 39, 25, 18,
- 13, 19, 25, 18, 13, 19, -1, 39, 25, 18,
- 43, 33, 19, 25, 18, 13, 19, -1, 12, -1,
- 35, -1, 12, -1, 36, -1, 36, -1, 4, -1,
- 8, -1, 3, -1, 9, -1, 4, -1, 7, -1,
- 37, -1, 10, -1, 8, -1, -1, 38, -1, 7,
- -1, 10, -1, -1, 22, 38, -1, -1, 22, 13,
- -1, -1, 13, 22, -1, 46, -1, 46, 26, 45,
- -1, 47, 26, 45, -1, 47, -1, 46, -1, 46,
- 26, 45, -1, 47, 26, 45, -1, 47, 21, 47,
- -1, 3, -1, 4, -1, 5, -1, 6, -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const unsigned short int yyrline[] =
-{
- 0, 121, 121, 122, 126, 135, 136, 143, 148, 153,
- 158, 163, 168, 173, 178, 183, 188, 193, 206, 211,
- 216, 221, 231, 241, 251, 256, 261, 266, 273, 284,
- 291, 297, 304, 310, 321, 331, 338, 344, 352, 359,
- 366, 372, 380, 387, 399, 410, 423, 431, 439, 447,
- 457, 464, 472, 479, 493, 494, 507, 508, 520, 521,
- 522, 528, 529, 535, 536, 543, 544, 545, 552, 555,
- 561, 562, 569, 572, 582, 586, 596, 600, 609, 610,
- 614, 626, 630, 631, 635, 642, 652, 656, 660, 664
-};
-#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", "DR", "AR", "FPR", "FPCR", "LPC", "ZAR",
- "ZDR", "LZPC", "CREG", "INDEXREG", "EXPR", "'&'", "'<'", "'>'", "'#'",
- "'('", "')'", "'+'", "'-'", "','", "'['", "']'", "'@'", "'/'", "$accept",
- "operand", "optional_ampersand", "generic_operand", "motorola_operand",
- "mit_operand", "zireg", "zdireg", "zadr", "zdr", "apc", "zapc",
- "optzapc", "zpc", "optczapc", "optcexpr", "optexprc", "reglist",
- "ireglist", "reglistpair", "reglistreg", 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, 261, 262, 263, 264,
- 265, 266, 267, 268, 38, 60, 62, 35, 40, 41,
- 43, 45, 44, 91, 93, 64, 47
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const unsigned char yyr1[] =
-{
- 0, 27, 28, 28, 28, 29, 29, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 32, 32, 32, 32,
- 32, 32, 32, 32, 33, 33, 34, 34, 35, 35,
- 35, 36, 36, 37, 37, 38, 38, 38, 39, 39,
- 40, 40, 41, 41, 42, 42, 43, 43, 44, 44,
- 44, 45, 45, 45, 45, 46, 47, 47, 47, 47
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const unsigned char yyr2[] =
-{
- 0, 2, 1, 2, 2, 0, 1, 2, 2, 1,
- 1, 1, 1, 1, 1, 2, 2, 1, 3, 4,
- 4, 5, 5, 4, 3, 3, 3, 7, 7, 6,
- 5, 6, 5, 6, 5, 5, 4, 9, 7, 8,
- 6, 10, 8, 10, 8, 8, 2, 3, 3, 5,
- 6, 10, 9, 10, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
- 1, 1, 0, 2, 0, 2, 0, 2, 1, 3,
- 3, 1, 1, 3, 3, 3, 1, 1, 1, 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 char yydefact[] =
-{
- 68, 86, 87, 88, 89, 64, 67, 66, 13, 14,
- 0, 0, 0, 0, 0, 0, 0, 2, 5, 5,
- 65, 69, 0, 17, 78, 0, 0, 16, 7, 8,
- 15, 61, 63, 64, 67, 62, 66, 56, 0, 76,
- 72, 57, 0, 0, 1, 6, 3, 4, 46, 0,
- 0, 0, 63, 72, 0, 18, 24, 25, 26, 0,
- 72, 0, 0, 0, 0, 0, 0, 76, 47, 48,
- 86, 87, 88, 89, 79, 82, 81, 85, 80, 0,
- 0, 23, 0, 19, 72, 0, 77, 0, 0, 74,
- 72, 0, 73, 36, 59, 70, 60, 71, 54, 0,
- 0, 55, 58, 0, 20, 0, 0, 0, 0, 35,
- 0, 0, 0, 21, 0, 73, 74, 0, 0, 0,
- 0, 0, 30, 22, 32, 34, 49, 77, 0, 83,
- 84, 31, 33, 29, 0, 0, 0, 0, 0, 74,
- 74, 75, 74, 40, 74, 0, 50, 27, 28, 0,
- 0, 74, 38, 0, 0, 0, 0, 0, 76, 0,
- 74, 74, 0, 42, 44, 39, 45, 0, 0, 0,
- 0, 0, 37, 52, 0, 0, 41, 43, 51, 53
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yysigned_char yydefgoto[] =
-{
- -1, 16, 46, 17, 18, 19, 100, 40, 101, 102,
- 20, 92, 22, 103, 64, 120, 62, 23, 74, 75,
- 76
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -98
-static const short int yypact[] =
-{
- 89, 14, 9, 31, 35, -98, -98, -98, -98, 0,
- 36, 42, 28, 56, 63, 67, 90, -98, 75, 75,
- -98, -98, 86, -98, 96, -15, 123, -98, -98, -98,
- -98, -98, 97, 115, 119, -98, 120, -98, 122, 16,
- 126, -98, 127, 157, -98, -98, -98, -98, 19, 154,
- 154, 154, -98, 140, 29, 144, -98, -98, -98, 123,
- 141, 99, 18, 70, 147, 105, 148, 152, -98, -98,
- -98, -98, -98, -98, -98, 142, -13, -98, -98, 146,
- 150, -98, 133, -98, 140, 60, 146, 149, 133, 153,
- 140, 151, -98, -98, -98, -98, -98, -98, -98, 155,
- 158, -98, -98, 159, -98, 62, 143, 154, 154, -98,
- 160, 161, 162, -98, 133, 163, 164, 165, 166, 116,
- 168, 167, -98, -98, -98, -98, 169, -98, 173, -98,
- -98, -98, -98, -98, 174, 176, 133, 116, 177, 175,
- 175, -98, 175, -98, 175, 170, 178, -98, -98, 180,
- 181, 175, -98, 171, 179, 182, 183, 187, 186, 189,
- 175, 175, 190, -98, -98, -98, -98, 79, 143, 195,
- 191, 192, -98, -98, 193, 194, -98, -98, -98, -98
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const short int yypgoto[] =
-{
- -98, -98, 196, -98, -98, -98, -81, 6, -98, -9,
- -98, 2, -98, -78, -38, -97, -67, -98, -48, 172,
- 12
-};
-
-/* 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 -64
-static const short int yytable[] =
-{
- 106, 110, 21, 78, 111, 41, 50, 117, 50, -10,
- 118, 51, 25, 108, -9, 80, 42, 41, 26, 138,
- 52, 31, 87, 5, 6, 128, 7, 35, 54, 60,
- 37, -11, 53, 134, -63, -12, 135, 67, 142, 68,
- 69, 61, 154, 155, 29, 156, 112, 157, 81, 27,
- 41, 82, 121, 41, 162, 149, 151, 28, 150, 129,
- 130, 85, 77, 170, 171, 84, 31, 32, 90, 30,
- 33, 34, 35, 36, 52, 37, 38, 5, 6, 113,
- 7, 126, 114, 91, 127, 43, 39, 174, 115, 45,
- 44, 168, 1, 2, 3, 4, 5, 6, 173, 7,
- 8, 127, 9, 10, 11, 12, 13, 14, 31, 94,
- 15, 48, 95, 96, 35, 97, 55, 98, 99, 31,
- 94, 88, 49, 89, 96, 35, 31, 52, 98, 141,
- 5, 6, 35, 7, 56, 37, 31, 94, 57, 58,
- 95, 96, 35, 97, 59, 98, 31, 94, 63, 65,
- 52, 96, 35, 5, 6, 98, 7, 70, 71, 72,
- 73, 66, 79, 86, 83, 105, 93, 104, 107, 109,
- 122, 0, 24, 116, 123, 119, 0, 124, 125, 131,
- 132, 133, 0, 0, 141, 136, 137, 143, 158, 139,
- 140, 144, 146, 147, 145, 148, 152, 153, 163, 167,
- 0, 164, 165, 159, 160, 161, 166, 169, 175, 172,
- 176, 177, 178, 179, 0, 47
-};
-
-static const short int yycheck[] =
-{
- 67, 82, 0, 51, 82, 14, 21, 88, 21, 0,
- 88, 26, 0, 26, 0, 53, 14, 26, 18, 116,
- 4, 3, 60, 7, 8, 106, 10, 9, 26, 13,
- 12, 0, 26, 114, 25, 0, 114, 18, 119, 20,
- 21, 39, 139, 140, 16, 142, 84, 144, 19, 13,
- 59, 22, 90, 62, 151, 136, 137, 15, 136, 107,
- 108, 59, 50, 160, 161, 59, 3, 4, 62, 13,
- 7, 8, 9, 10, 4, 12, 13, 7, 8, 19,
- 10, 19, 22, 13, 22, 18, 23, 168, 86, 14,
- 0, 158, 3, 4, 5, 6, 7, 8, 19, 10,
- 11, 22, 13, 14, 15, 16, 17, 18, 3, 4,
- 21, 25, 7, 8, 9, 10, 19, 12, 13, 3,
- 4, 22, 26, 24, 8, 9, 3, 4, 12, 13,
- 7, 8, 9, 10, 19, 12, 3, 4, 19, 19,
- 7, 8, 9, 10, 22, 12, 3, 4, 22, 22,
- 4, 8, 9, 7, 8, 12, 10, 3, 4, 5,
- 6, 4, 22, 22, 20, 13, 19, 19, 26, 19,
- 19, -1, 0, 24, 19, 22, -1, 19, 19, 19,
- 19, 19, -1, -1, 13, 22, 22, 19, 18, 24,
- 24, 24, 19, 19, 25, 19, 19, 22, 19, 13,
- -1, 19, 19, 25, 24, 24, 19, 18, 13, 19,
- 19, 19, 19, 19, -1, 19
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
-static const unsigned char yystos[] =
-{
- 0, 3, 4, 5, 6, 7, 8, 10, 11, 13,
- 14, 15, 16, 17, 18, 21, 28, 30, 31, 32,
- 37, 38, 39, 44, 46, 47, 18, 13, 15, 16,
- 13, 3, 4, 7, 8, 9, 10, 12, 13, 23,
- 34, 36, 38, 18, 0, 14, 29, 29, 25, 26,
- 21, 26, 4, 34, 38, 19, 19, 19, 19, 22,
- 13, 38, 43, 22, 41, 22, 4, 18, 20, 21,
- 3, 4, 5, 6, 45, 46, 47, 47, 45, 22,
- 41, 19, 22, 20, 34, 38, 22, 41, 22, 24,
- 34, 13, 38, 19, 4, 7, 8, 10, 12, 13,
- 33, 35, 36, 40, 19, 13, 43, 26, 26, 19,
- 33, 40, 41, 19, 22, 38, 24, 33, 40, 22,
- 42, 41, 19, 19, 19, 19, 19, 22, 33, 45,
- 45, 19, 19, 19, 33, 40, 22, 22, 42, 24,
- 24, 13, 33, 19, 24, 25, 19, 19, 19, 33,
- 40, 33, 19, 22, 42, 42, 42, 42, 18, 25,
- 24, 24, 42, 19, 19, 19, 19, 13, 43, 18,
- 42, 42, 19, 19, 33, 13, 19, 19, 19, 19
-};
-
-#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 3:
-#line 123 "m68k-parse.y"
- {
- op->trailing_ampersand = (yyvsp[0].trailing_ampersand);
- }
- break;
-
- case 4:
-#line 127 "m68k-parse.y"
- {
- op->trailing_ampersand = (yyvsp[0].trailing_ampersand);
- }
- break;
-
- case 5:
-#line 135 "m68k-parse.y"
- { (yyval.trailing_ampersand) = 0; }
- break;
-
- case 6:
-#line 137 "m68k-parse.y"
- { (yyval.trailing_ampersand) = 1; }
- break;
-
- case 7:
-#line 144 "m68k-parse.y"
- {
- op->mode = LSH;
- }
- break;
-
- case 8:
-#line 149 "m68k-parse.y"
- {
- op->mode = RSH;
- }
- break;
-
- case 9:
-#line 154 "m68k-parse.y"
- {
- op->mode = DREG;
- op->reg = (yyvsp[0].reg);
- }
- break;
-
- case 10:
-#line 159 "m68k-parse.y"
- {
- op->mode = AREG;
- op->reg = (yyvsp[0].reg);
- }
- break;
-
- case 11:
-#line 164 "m68k-parse.y"
- {
- op->mode = FPREG;
- op->reg = (yyvsp[0].reg);
- }
- break;
-
- case 12:
-#line 169 "m68k-parse.y"
- {
- op->mode = CONTROL;
- op->reg = (yyvsp[0].reg);
- }
- break;
-
- case 13:
-#line 174 "m68k-parse.y"
- {
- op->mode = CONTROL;
- op->reg = (yyvsp[0].reg);
- }
- break;
-
- case 14:
-#line 179 "m68k-parse.y"
- {
- op->mode = ABSL;
- op->disp = (yyvsp[0].exp);
- }
- break;
-
- case 15:
-#line 184 "m68k-parse.y"
- {
- op->mode = IMMED;
- op->disp = (yyvsp[0].exp);
- }
- break;
-
- case 16:
-#line 189 "m68k-parse.y"
- {
- op->mode = IMMED;
- op->disp = (yyvsp[0].exp);
- }
- break;
-
- case 17:
-#line 194 "m68k-parse.y"
- {
- op->mode = REGLST;
- op->mask = (yyvsp[0].mask);
- }
- break;
-
- case 18:
-#line 207 "m68k-parse.y"
- {
- op->mode = AINDR;
- op->reg = (yyvsp[-1].reg);
- }
- break;
-
- case 19:
-#line 212 "m68k-parse.y"
- {
- op->mode = AINC;
- op->reg = (yyvsp[-2].reg);
- }
- break;
-
- case 20:
-#line 217 "m68k-parse.y"
- {
- op->mode = ADEC;
- op->reg = (yyvsp[-1].reg);
- }
- break;
-
- case 21:
-#line 222 "m68k-parse.y"
- {
- op->reg = (yyvsp[-1].reg);
- op->disp = (yyvsp[-3].exp);
- if (((yyvsp[-1].reg) >= ZADDR0 && (yyvsp[-1].reg) <= ZADDR7)
- || (yyvsp[-1].reg) == ZPC)
- op->mode = BASE;
- else
- op->mode = DISP;
- }
- break;
-
- case 22:
-#line 232 "m68k-parse.y"
- {
- op->reg = (yyvsp[-3].reg);
- op->disp = (yyvsp[-1].exp);
- if (((yyvsp[-3].reg) >= ZADDR0 && (yyvsp[-3].reg) <= ZADDR7)
- || (yyvsp[-3].reg) == ZPC)
- op->mode = BASE;
- else
- op->mode = DISP;
- }
- break;
-
- case 23:
-#line 242 "m68k-parse.y"
- {
- op->reg = (yyvsp[-1].reg);
- op->disp = (yyvsp[-3].exp);
- if (((yyvsp[-1].reg) >= ZADDR0 && (yyvsp[-1].reg) <= ZADDR7)
- || (yyvsp[-1].reg) == ZPC)
- op->mode = BASE;
- else
- op->mode = DISP;
- }
- break;
-
- case 24:
-#line 252 "m68k-parse.y"
- {
- op->mode = DISP;
- op->reg = (yyvsp[-1].reg);
- }
- break;
-
- case 25:
-#line 257 "m68k-parse.y"
- {
- op->mode = BASE;
- op->reg = (yyvsp[-1].reg);
- }
- break;
-
- case 26:
-#line 262 "m68k-parse.y"
- {
- op->mode = BASE;
- op->reg = (yyvsp[-1].reg);
- }
- break;
-
- case 27:
-#line 267 "m68k-parse.y"
- {
- op->mode = BASE;
- op->reg = (yyvsp[-3].reg);
- op->disp = (yyvsp[-5].exp);
- op->index = (yyvsp[-1].indexreg);
- }
- break;
-
- case 28:
-#line 274 "m68k-parse.y"
- {
- if ((yyvsp[-3].reg) == PC || (yyvsp[-3].reg) == ZPC)
- yyerror (_("syntax error"));
- op->mode = BASE;
- op->reg = (yyvsp[-1].reg);
- op->disp = (yyvsp[-5].exp);
- op->index.reg = (yyvsp[-3].reg);
- op->index.size = SIZE_UNSPEC;
- op->index.scale = 1;
- }
- break;
-
- case 29:
-#line 285 "m68k-parse.y"
- {
- op->mode = BASE;
- op->reg = (yyvsp[-1].reg);
- op->disp = (yyvsp[-4].exp);
- op->index = (yyvsp[-2].indexreg);
- }
- break;
-
- case 30:
-#line 292 "m68k-parse.y"
- {
- op->mode = BASE;
- op->disp = (yyvsp[-1].exp);
- op->index = (yyvsp[-3].indexreg);
- }
- break;
-
- case 31:
-#line 298 "m68k-parse.y"
- {
- op->mode = BASE;
- op->reg = (yyvsp[-3].reg);
- op->disp = (yyvsp[-5].exp);
- op->index = (yyvsp[-1].indexreg);
- }
- break;
-
- case 32:
-#line 305 "m68k-parse.y"
- {
- op->mode = BASE;
- op->reg = (yyvsp[-3].reg);
- op->index = (yyvsp[-1].indexreg);
- }
- break;
-
- case 33:
-#line 311 "m68k-parse.y"
- {
- if ((yyvsp[-3].reg) == PC || (yyvsp[-3].reg) == ZPC)
- yyerror (_("syntax error"));
- op->mode = BASE;
- op->reg = (yyvsp[-1].reg);
- op->disp = (yyvsp[-5].exp);
- op->index.reg = (yyvsp[-3].reg);
- op->index.size = SIZE_UNSPEC;
- op->index.scale = 1;
- }
- break;
-
- case 34:
-#line 322 "m68k-parse.y"
- {
- if ((yyvsp[-3].reg) == PC || (yyvsp[-3].reg) == ZPC)
- yyerror (_("syntax error"));
- op->mode = BASE;
- op->reg = (yyvsp[-1].reg);
- op->index.reg = (yyvsp[-3].reg);
- op->index.size = SIZE_UNSPEC;
- op->index.scale = 1;
- }
- break;
-
- case 35:
-#line 332 "m68k-parse.y"
- {
- op->mode = BASE;
- op->reg = (yyvsp[-1].reg);
- op->disp = (yyvsp[-4].exp);
- op->index = (yyvsp[-2].indexreg);
- }
- break;
-
- case 36:
-#line 339 "m68k-parse.y"
- {
- op->mode = BASE;
- op->reg = (yyvsp[-1].reg);
- op->index = (yyvsp[-2].indexreg);
- }
- break;
-
- case 37:
-#line 345 "m68k-parse.y"
- {
- op->mode = POST;
- op->reg = (yyvsp[-5].reg);
- op->disp = (yyvsp[-6].exp);
- op->index = (yyvsp[-2].indexreg);
- op->odisp = (yyvsp[-1].exp);
- }
- break;
-
- case 38:
-#line 353 "m68k-parse.y"
- {
- op->mode = POST;
- op->reg = (yyvsp[-3].reg);
- op->disp = (yyvsp[-4].exp);
- op->odisp = (yyvsp[-1].exp);
- }
- break;
-
- case 39:
-#line 360 "m68k-parse.y"
- {
- op->mode = POST;
- op->reg = (yyvsp[-5].reg);
- op->index = (yyvsp[-2].indexreg);
- op->odisp = (yyvsp[-1].exp);
- }
- break;
-
- case 40:
-#line 367 "m68k-parse.y"
- {
- op->mode = POST;
- op->reg = (yyvsp[-3].reg);
- op->odisp = (yyvsp[-1].exp);
- }
- break;
-
- case 41:
-#line 373 "m68k-parse.y"
- {
- op->mode = PRE;
- op->reg = (yyvsp[-5].reg);
- op->disp = (yyvsp[-7].exp);
- op->index = (yyvsp[-3].indexreg);
- op->odisp = (yyvsp[-1].exp);
- }
- break;
-
- case 42:
-#line 381 "m68k-parse.y"
- {
- op->mode = PRE;
- op->reg = (yyvsp[-5].reg);
- op->index = (yyvsp[-3].indexreg);
- op->odisp = (yyvsp[-1].exp);
- }
- break;
-
- case 43:
-#line 388 "m68k-parse.y"
- {
- if ((yyvsp[-5].reg) == PC || (yyvsp[-5].reg) == ZPC)
- yyerror (_("syntax error"));
- op->mode = PRE;
- op->reg = (yyvsp[-3].reg);
- op->disp = (yyvsp[-7].exp);
- op->index.reg = (yyvsp[-5].reg);
- op->index.size = SIZE_UNSPEC;
- op->index.scale = 1;
- op->odisp = (yyvsp[-1].exp);
- }
- break;
-
- case 44:
-#line 400 "m68k-parse.y"
- {
- if ((yyvsp[-5].reg) == PC || (yyvsp[-5].reg) == ZPC)
- yyerror (_("syntax error"));
- op->mode = PRE;
- op->reg = (yyvsp[-3].reg);
- op->index.reg = (yyvsp[-5].reg);
- op->index.size = SIZE_UNSPEC;
- op->index.scale = 1;
- op->odisp = (yyvsp[-1].exp);
- }
- break;
-
- case 45:
-#line 411 "m68k-parse.y"
- {
- op->mode = PRE;
- op->reg = (yyvsp[-3].reg);
- op->disp = (yyvsp[-5].exp);
- op->index = (yyvsp[-4].indexreg);
- op->odisp = (yyvsp[-1].exp);
- }
- break;
-
- case 46:
-#line 424 "m68k-parse.y"
- {
- /* We use optzapc to avoid a shift/reduce conflict. */
- if ((yyvsp[-1].reg) < ADDR0 || (yyvsp[-1].reg) > ADDR7)
- yyerror (_("syntax error"));
- op->mode = AINDR;
- op->reg = (yyvsp[-1].reg);
- }
- break;
-
- case 47:
-#line 432 "m68k-parse.y"
- {
- /* We use optzapc to avoid a shift/reduce conflict. */
- if ((yyvsp[-2].reg) < ADDR0 || (yyvsp[-2].reg) > ADDR7)
- yyerror (_("syntax error"));
- op->mode = AINC;
- op->reg = (yyvsp[-2].reg);
- }
- break;
-
- case 48:
-#line 440 "m68k-parse.y"
- {
- /* We use optzapc to avoid a shift/reduce conflict. */
- if ((yyvsp[-2].reg) < ADDR0 || (yyvsp[-2].reg) > ADDR7)
- yyerror (_("syntax error"));
- op->mode = ADEC;
- op->reg = (yyvsp[-2].reg);
- }
- break;
-
- case 49:
-#line 448 "m68k-parse.y"
- {
- op->reg = (yyvsp[-4].reg);
- op->disp = (yyvsp[-1].exp);
- if (((yyvsp[-4].reg) >= ZADDR0 && (yyvsp[-4].reg) <= ZADDR7)
- || (yyvsp[-4].reg) == ZPC)
- op->mode = BASE;
- else
- op->mode = DISP;
- }
- break;
-
- case 50:
-#line 458 "m68k-parse.y"
- {
- op->mode = BASE;
- op->reg = (yyvsp[-5].reg);
- op->disp = (yyvsp[-2].exp);
- op->index = (yyvsp[-1].indexreg);
- }
- break;
-
- case 51:
-#line 465 "m68k-parse.y"
- {
- op->mode = POST;
- op->reg = (yyvsp[-9].reg);
- op->disp = (yyvsp[-6].exp);
- op->index = (yyvsp[-1].indexreg);
- op->odisp = (yyvsp[-2].exp);
- }
- break;
-
- case 52:
-#line 473 "m68k-parse.y"
- {
- op->mode = POST;
- op->reg = (yyvsp[-8].reg);
- op->disp = (yyvsp[-5].exp);
- op->odisp = (yyvsp[-1].exp);
- }
- break;
-
- case 53:
-#line 480 "m68k-parse.y"
- {
- op->mode = PRE;
- op->reg = (yyvsp[-9].reg);
- op->disp = (yyvsp[-6].exp);
- op->index = (yyvsp[-5].indexreg);
- op->odisp = (yyvsp[-1].exp);
- }
- break;
-
- case 55:
-#line 495 "m68k-parse.y"
- {
- (yyval.indexreg).reg = (yyvsp[0].reg);
- (yyval.indexreg).size = SIZE_UNSPEC;
- (yyval.indexreg).scale = 1;
- }
- break;
-
- case 57:
-#line 509 "m68k-parse.y"
- {
- (yyval.indexreg).reg = (yyvsp[0].reg);
- (yyval.indexreg).size = SIZE_UNSPEC;
- (yyval.indexreg).scale = 1;
- }
- break;
-
- case 68:
-#line 552 "m68k-parse.y"
- {
- (yyval.reg) = ZADDR0;
- }
- break;
-
- case 72:
-#line 569 "m68k-parse.y"
- {
- (yyval.reg) = ZADDR0;
- }
- break;
-
- case 73:
-#line 573 "m68k-parse.y"
- {
- (yyval.reg) = (yyvsp[0].reg);
- }
- break;
-
- case 74:
-#line 582 "m68k-parse.y"
- {
- (yyval.exp).exp.X_op = O_absent;
- (yyval.exp).size = SIZE_UNSPEC;
- }
- break;
-
- case 75:
-#line 587 "m68k-parse.y"
- {
- (yyval.exp) = (yyvsp[0].exp);
- }
- break;
-
- case 76:
-#line 596 "m68k-parse.y"
- {
- (yyval.exp).exp.X_op = O_absent;
- (yyval.exp).size = SIZE_UNSPEC;
- }
- break;
-
- case 77:
-#line 601 "m68k-parse.y"
- {
- (yyval.exp) = (yyvsp[-1].exp);
- }
- break;
-
- case 79:
-#line 611 "m68k-parse.y"
- {
- (yyval.mask) = (yyvsp[-2].mask) | (yyvsp[0].mask);
- }
- break;
-
- case 80:
-#line 615 "m68k-parse.y"
- {
- (yyval.mask) = (1 << (yyvsp[-2].onereg)) | (yyvsp[0].mask);
- }
- break;
-
- case 81:
-#line 627 "m68k-parse.y"
- {
- (yyval.mask) = 1 << (yyvsp[0].onereg);
- }
- break;
-
- case 83:
-#line 632 "m68k-parse.y"
- {
- (yyval.mask) = (yyvsp[-2].mask) | (yyvsp[0].mask);
- }
- break;
-
- case 84:
-#line 636 "m68k-parse.y"
- {
- (yyval.mask) = (1 << (yyvsp[-2].onereg)) | (yyvsp[0].mask);
- }
- break;
-
- case 85:
-#line 643 "m68k-parse.y"
- {
- if ((yyvsp[-2].onereg) <= (yyvsp[0].onereg))
- (yyval.mask) = (1 << ((yyvsp[0].onereg) + 1)) - 1 - ((1 << (yyvsp[-2].onereg)) - 1);
- else
- (yyval.mask) = (1 << ((yyvsp[-2].onereg) + 1)) - 1 - ((1 << (yyvsp[0].onereg)) - 1);
- }
- break;
-
- case 86:
-#line 653 "m68k-parse.y"
- {
- (yyval.onereg) = (yyvsp[0].reg) - DATA0;
- }
- break;
-
- case 87:
-#line 657 "m68k-parse.y"
- {
- (yyval.onereg) = (yyvsp[0].reg) - ADDR0 + 8;
- }
- break;
-
- case 88:
-#line 661 "m68k-parse.y"
- {
- (yyval.onereg) = (yyvsp[0].reg) - FP0 + 16;
- }
- break;
-
- case 89:
-#line 665 "m68k-parse.y"
- {
- if ((yyvsp[0].reg) == FPI)
- (yyval.onereg) = 24;
- else if ((yyvsp[0].reg) == FPS)
- (yyval.onereg) = 25;
- else
- (yyval.onereg) = 26;
- }
- break;
-
-
- default: break;
- }
-
-/* Line 1126 of yacc.c. */
-#line 1986 "m68k-parse.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 675 "m68k-parse.y"
-
-
-/* The string to parse is stored here, and modified by yylex. */
-
-static char *str;
-
-/* The original string pointer. */
-
-static char *strorig;
-
-/* If *CCP could be a register, return the register number and advance
- *CCP. Otherwise don't change *CCP, and return 0. */
-
-static enum m68k_register
-m68k_reg_parse (ccp)
- register char **ccp;
-{
- char *start = *ccp;
- char c;
- char *p;
- symbolS *symbolp;
-
- if (flag_reg_prefix_optional)
- {
- if (*start == REGISTER_PREFIX)
- start++;
- p = start;
- }
- else
- {
- if (*start != REGISTER_PREFIX)
- return 0;
- p = start + 1;
- }
-
- if (! is_name_beginner (*p))
- return 0;
-
- p++;
- while (is_part_of_name (*p) && *p != '.' && *p != ':' && *p != '*')
- p++;
-
- c = *p;
- *p = 0;
- symbolp = symbol_find (start);
- *p = c;
-
- if (symbolp != NULL && S_GET_SEGMENT (symbolp) == reg_section)
- {
- *ccp = p;
- return S_GET_VALUE (symbolp);
- }
-
- /* In MRI mode, something like foo.bar can be equated to a register
- name. */
- while (flag_mri && c == '.')
- {
- ++p;
- while (is_part_of_name (*p) && *p != '.' && *p != ':' && *p != '*')
- p++;
- c = *p;
- *p = '\0';
- symbolp = symbol_find (start);
- *p = c;
- if (symbolp != NULL && S_GET_SEGMENT (symbolp) == reg_section)
- {
- *ccp = p;
- return S_GET_VALUE (symbolp);
- }
- }
-
- return 0;
-}
-
-/* The lexer. */
-
-static int
-yylex ()
-{
- enum m68k_register reg;
- char *s;
- int parens;
- int c = 0;
- int tail = 0;
- char *hold;
-
- if (*str == ' ')
- ++str;
-
- if (*str == '\0')
- return 0;
-
- /* Various special characters are just returned directly. */
- switch (*str)
- {
- case '@':
- /* In MRI mode, this can be the start of an octal number. */
- if (flag_mri)
- {
- if (ISDIGIT (str[1])
- || ((str[1] == '+' || str[1] == '-')
- && ISDIGIT (str[2])))
- break;
- }
- /* Fall through. */
- case '#':
- case '&':
- case ',':
- case ')':
- case '/':
- case '[':
- case ']':
- case '<':
- case '>':
- return *str++;
- case '+':
- /* It so happens that a '+' can only appear at the end of an
- operand, or if it is trailed by an '&'(see mac load insn).
- If it appears anywhere else, it must be a unary. */
- if (str[1] == '\0' || (str[1] == '&' && str[2] == '\0'))
- return *str++;
- break;
- case '-':
- /* A '-' can only appear in -(ar), rn-rn, or ar@-. If it
- appears anywhere else, it must be a unary minus on an
- expression, unless it it trailed by a '&'(see mac load insn). */
- if (str[1] == '\0' || (str[1] == '&' && str[2] == '\0'))
- return *str++;
- s = str + 1;
- if (*s == '(')
- ++s;
- if (m68k_reg_parse (&s) != 0)
- return *str++;
- break;
- case '(':
- /* A '(' can only appear in `(reg)', `(expr,...', `([', `@(', or
- `)('. If it appears anywhere else, it must be starting an
- expression. */
- if (str[1] == '['
- || (str > strorig
- && (str[-1] == '@'
- || str[-1] == ')')))
- return *str++;
- s = str + 1;
- if (m68k_reg_parse (&s) != 0)
- return *str++;
- /* Check for the case of '(expr,...' by scanning ahead. If we
- find a comma outside of balanced parentheses, we return '('.
- If we find an unbalanced right parenthesis, then presumably
- the '(' really starts an expression. */
- parens = 0;
- for (s = str + 1; *s != '\0'; s++)
- {
- if (*s == '(')
- ++parens;
- else if (*s == ')')
- {
- if (parens == 0)
- break;
- --parens;
- }
- else if (*s == ',' && parens == 0)
- {
- /* A comma can not normally appear in an expression, so
- this is a case of '(expr,...'. */
- return *str++;
- }
- }
- }
-
- /* See if it's a register. */
-
- reg = m68k_reg_parse (&str);
- if (reg != 0)
- {
- int ret;
-
- yylval.reg = reg;
-
- if (reg >= DATA0 && reg <= DATA7)
- ret = DR;
- else if (reg >= ADDR0 && reg <= ADDR7)
- ret = AR;
- else if (reg >= FP0 && reg <= FP7)
- return FPR;
- else if (reg == FPI
- || reg == FPS
- || reg == FPC)
- return FPCR;
- else if (reg == PC)
- return LPC;
- else if (reg >= ZDATA0 && reg <= ZDATA7)
- ret = ZDR;
- else if (reg >= ZADDR0 && reg <= ZADDR7)
- ret = ZAR;
- else if (reg == ZPC)
- return LZPC;
- else
- return CREG;
-
- /* If we get here, we have a data or address register. We
- must check for a size or scale; if we find one, we must
- return INDEXREG. */
-
- s = str;
-
- if (*s != '.' && *s != ':' && *s != '*')
- return ret;
-
- yylval.indexreg.reg = reg;
-
- if (*s != '.' && *s != ':')
- yylval.indexreg.size = SIZE_UNSPEC;
- else
- {
- ++s;
- switch (*s)
- {
- case 'w':
- case 'W':
- yylval.indexreg.size = SIZE_WORD;
- ++s;
- break;
- case 'l':
- case 'L':
- yylval.indexreg.size = SIZE_LONG;
- ++s;
- break;
- default:
- yyerror (_("illegal size specification"));
- yylval.indexreg.size = SIZE_UNSPEC;
- break;
- }
- }
-
- yylval.indexreg.scale = 1;
-
- if (*s == '*' || *s == ':')
- {
- expressionS scale;
-
- ++s;
-
- hold = input_line_pointer;
- input_line_pointer = s;
- expression (&scale);
- s = input_line_pointer;
- input_line_pointer = hold;
-
- if (scale.X_op != O_constant)
- yyerror (_("scale specification must resolve to a number"));
- else
- {
- switch (scale.X_add_number)
- {
- case 1:
- case 2:
- case 4:
- case 8:
- yylval.indexreg.scale = scale.X_add_number;
- break;
- default:
- yyerror (_("invalid scale value"));
- break;
- }
- }
- }
-
- str = s;
-
- return INDEXREG;
- }
-
- /* It must be an expression. Before we call expression, we need to
- look ahead to see if there is a size specification. We must do
- that first, because otherwise foo.l will be treated as the symbol
- foo.l, rather than as the symbol foo with a long size
- specification. The grammar requires that all expressions end at
- the end of the operand, or with ',', '(', ']', ')'. */
-
- parens = 0;
- for (s = str; *s != '\0'; s++)
- {
- if (*s == '(')
- {
- if (parens == 0
- && s > str
- && (s[-1] == ')' || ISALNUM (s[-1])))
- break;
- ++parens;
- }
- else if (*s == ')')
- {
- if (parens == 0)
- break;
- --parens;
- }
- else if (parens == 0
- && (*s == ',' || *s == ']'))
- break;
- }
-
- yylval.exp.size = SIZE_UNSPEC;
- if (s <= str + 2
- || (s[-2] != '.' && s[-2] != ':'))
- tail = 0;
- else
- {
- switch (s[-1])
- {
- case 's':
- case 'S':
- case 'b':
- case 'B':
- yylval.exp.size = SIZE_BYTE;
- break;
- case 'w':
- case 'W':
- yylval.exp.size = SIZE_WORD;
- break;
- case 'l':
- case 'L':
- yylval.exp.size = SIZE_LONG;
- break;
- default:
- break;
- }
- if (yylval.exp.size != SIZE_UNSPEC)
- tail = 2;
- }
-
-#ifdef OBJ_ELF
- {
- /* Look for @PLTPC, etc. */
- char *cp;
-
- yylval.exp.pic_reloc = pic_none;
- cp = s - tail;
- if (cp - 6 > str && cp[-6] == '@')
- {
- if (strncmp (cp - 6, "@PLTPC", 6) == 0)
- {
- yylval.exp.pic_reloc = pic_plt_pcrel;
- tail += 6;
- }
- else if (strncmp (cp - 6, "@GOTPC", 6) == 0)
- {
- yylval.exp.pic_reloc = pic_got_pcrel;
- tail += 6;
- }
- }
- else if (cp - 4 > str && cp[-4] == '@')
- {
- if (strncmp (cp - 4, "@PLT", 4) == 0)
- {
- yylval.exp.pic_reloc = pic_plt_off;
- tail += 4;
- }
- else if (strncmp (cp - 4, "@GOT", 4) == 0)
- {
- yylval.exp.pic_reloc = pic_got_off;
- tail += 4;
- }
- }
- }
-#endif
-
- if (tail != 0)
- {
- c = s[-tail];
- s[-tail] = 0;
- }
-
- hold = input_line_pointer;
- input_line_pointer = str;
- expression (&yylval.exp.exp);
- str = input_line_pointer;
- input_line_pointer = hold;
-
- if (tail != 0)
- {
- s[-tail] = c;
- str = s;
- }
-
- return EXPR;
-}
-
-/* Parse an m68k operand. This is the only function which is called
- from outside this file. */
-
-int
-m68k_ip_op (s, oparg)
- char *s;
- struct m68k_op *oparg;
-{
- memset (oparg, 0, sizeof *oparg);
- oparg->error = NULL;
- oparg->index.reg = ZDATA0;
- oparg->index.scale = 1;
- oparg->disp.exp.X_op = O_absent;
- oparg->odisp.exp.X_op = O_absent;
-
- str = strorig = s;
- op = oparg;
-
- return yyparse ();
-}
-
-/* The error handler. */
-
-static void
-yyerror (s)
- const char *s;
-{
- op->error = s;
-}
-
-
diff --git a/gas/macro.c b/gas/macro.c
index af98bada6a86..d7d470b764eb 100644
--- a/gas/macro.c
+++ b/gas/macro.c
@@ -1,6 +1,6 @@
/* macro.c - macro support for gas
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005 Free Software Foundation, Inc.
+ 2004, 2005, 2006 Free Software Foundation, Inc.
Written by Steve and Judy Chamberlain of Cygnus Support,
sac@cygnus.com
@@ -22,47 +22,11 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "config.h"
-
-#ifndef __GNUC__
-# if HAVE_ALLOCA_H
-# include <alloca.h>
-# else
-# ifdef _AIX
-/* Indented so that pre-ansi C compilers will ignore it, rather than
- choke on it. Some versions of AIX require this to be the first
- thing in the file. */
- #pragma alloca
-# else
-# ifndef alloca /* predefined by HP cc +Olibcalls */
-# if !defined (__STDC__) && !defined (__hpux)
-extern char *alloca ();
-# else
-extern void *alloca ();
-# endif /* __STDC__, __hpux */
-# endif /* alloca */
-# endif /* _AIX */
-# endif /* HAVE_ALLOCA_H */
-#endif /* __GNUC__ */
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
#include "as.h"
-#include "libiberty.h"
#include "safe-ctype.h"
#include "sb.h"
-#include "hash.h"
#include "macro.h"
-#include "asintl.h"
-
/* The routines in this file handle macro definition and expansion.
They are called by gas. */
@@ -1025,7 +989,6 @@ macro_expand (int idx, sb *in, macro_entry *m, sb *out)
sb t;
formal_entry *ptr;
formal_entry *f;
- int is_positional = 0;
int is_keyword = 0;
int narg = 0;
const char *err = NULL;
@@ -1116,8 +1079,6 @@ macro_expand (int idx, sb *in, macro_entry *m, sb *out)
}
else
{
- /* This is a positional arg. */
- is_positional = 1;
if (is_keyword)
{
err = _("can't mix positional and keyword arguments");
@@ -1364,8 +1325,14 @@ expand_irp (int irpc, int idx, sb *in, sb *out, int (*get_line) (sb *))
}
else
{
+ bfd_boolean in_quotes = FALSE;
+
if (irpc && in->ptr[idx] == '"')
- ++idx;
+ {
+ in_quotes = TRUE;
+ ++idx;
+ }
+
while (idx < in->len)
{
if (!irpc)
@@ -1376,6 +1343,9 @@ expand_irp (int irpc, int idx, sb *in, sb *out, int (*get_line) (sb *))
{
int nxt;
+ if (irpc)
+ in_quotes = ! in_quotes;
+
nxt = sb_skip_white (idx + 1, in);
if (nxt >= in->len)
{
@@ -1387,12 +1357,13 @@ expand_irp (int irpc, int idx, sb *in, sb *out, int (*get_line) (sb *))
sb_add_char (&f.actual, in->ptr[idx]);
++idx;
}
+
err = macro_expand_body (&sub, out, &f, h, 0);
if (err != NULL)
break;
if (!irpc)
idx = sb_skip_comma (idx, in);
- else
+ else if (! in_quotes)
idx = sb_skip_white (idx, in);
}
}
diff --git a/gas/macro.h b/gas/macro.h
index 4fdaa52d0974..104aeae6f02c 100644
--- a/gas/macro.h
+++ b/gas/macro.h
@@ -1,5 +1,5 @@
/* macro.h - header file for macro support for gas
- Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2002, 2003, 2004
+ Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2002, 2003, 2004, 2006
Free Software Foundation, Inc.
Written by Steve and Judy Chamberlain of Cygnus Support,
@@ -26,9 +26,6 @@
#define MACRO_H
-#include "ansidecl.h"
-#include "sb.h"
-
/* Structures used to store macros.
Each macro knows its name and included text. It gets built with a
diff --git a/gas/messages.c b/gas/messages.c
index b1b94cdf7c6e..c8788dcc32d5 100644
--- a/gas/messages.c
+++ b/gas/messages.c
@@ -1,6 +1,6 @@
/* messages.c - error reporter -
Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001,
- 2003, 2004, 2005
+ 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -116,24 +116,6 @@ as_show_where (void)
fprintf (stderr, "%s:%u: ", file, line);
}
-/* Like perror(3), but with more info. */
-
-void
-as_perror (const char *gripe, /* Unpunctuated error theme. */
- const char *filename)
-{
- const char *errtxt;
- int saved_errno = errno;
-
- as_show_where ();
- fprintf (stderr, gripe, filename);
- errno = saved_errno;
- errtxt = bfd_errmsg (bfd_get_error ());
- fprintf (stderr, ": %s\n", errtxt);
- errno = 0;
- bfd_set_error (bfd_error_no_error);
-}
-
/* Send to stderr a string as a warning, and locate warning
in input file(s).
Please only use this for when we have some recovery action.
@@ -474,6 +456,24 @@ as_internal_value_out_of_range (char * prefix,
if (prefix == NULL)
prefix = "";
+ if (val >= min && val <= max)
+ {
+ addressT right = max & -max;
+
+ if (max <= 1)
+ abort ();
+
+ /* xgettext:c-format */
+ err = _("%s out of domain (%d is not a multiple of %d)");
+ if (bad)
+ as_bad_where (file, line, err,
+ prefix, (int) val, (int) right);
+ else
+ as_warn_where (file, line, err,
+ prefix, (int) val, (int) right);
+ return;
+ }
+
if ( val < HEX_MAX_THRESHOLD
&& min < HEX_MAX_THRESHOLD
&& max < HEX_MAX_THRESHOLD
diff --git a/gas/output-file.c b/gas/output-file.c
index f94359ab6b0a..9603dc4f38a0 100644
--- a/gas/output-file.c
+++ b/gas/output-file.c
@@ -1,6 +1,6 @@
/* output-file.c - Deal with the output file
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1996, 1998, 1999, 2001,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -19,17 +19,13 @@
the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include <stdio.h>
-
#include "as.h"
-
#include "output-file.h"
#ifndef TARGET_MACH
#define TARGET_MACH 0
#endif
-#include "bfd.h"
bfd *stdoutput;
void
@@ -40,11 +36,12 @@ output_file_create (char *name)
else if (!(stdoutput = bfd_openw (name, TARGET_FORMAT)))
{
- if (bfd_get_error () == bfd_error_invalid_target)
- as_perror (_("Selected target format '%s' unknown"), TARGET_FORMAT);
+ bfd_error_type err = bfd_get_error ();
+
+ if (err == bfd_error_invalid_target)
+ as_fatal (_("selected target format '%s' unknown"), TARGET_FORMAT);
else
- as_perror (_("FATAL: can't create %s"), name);
- exit (EXIT_FAILURE);
+ as_fatal (_("can't create %s: %s"), name, bfd_errmsg (err));
}
bfd_set_format (stdoutput, bfd_object);
@@ -56,12 +53,19 @@ output_file_create (char *name)
void
output_file_close (char *filename)
{
+ bfd_boolean res;
+
+ if (stdoutput == NULL)
+ return;
+
/* Close the bfd. */
- if (bfd_close (stdoutput) == 0)
- {
- bfd_perror (filename);
- as_perror (_("FATAL: can't close %s\n"), filename);
- exit (EXIT_FAILURE);
- }
- stdoutput = NULL; /* Trust nobody! */
+ res = bfd_close (stdoutput);
+
+ /* Prevent an infinite loop - if the close failed we will call as_fatal
+ which will call xexit() which may call this function again... */
+ stdoutput = NULL;
+
+ if (! res)
+ as_fatal (_("can't close %s: %s"), filename,
+ bfd_errmsg (bfd_get_error ()));
}
diff --git a/gas/po/Make-in b/gas/po/Make-in
index be09b4cd788b..86ff3143b988 100644
--- a/gas/po/Make-in
+++ b/gas/po/Make-in
@@ -16,6 +16,7 @@ SHELL = /bin/sh
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
+top_builddir = @top_builddir@
prefix = @prefix@
exec_prefix = @exec_prefix@
@@ -72,7 +73,7 @@ INSTOBJEXT = @INSTOBJEXT@
$(MSGFMT) -o $@ $<
.po.gmo:
- file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+ file=`echo $* | sed 's,.*/,,'`.gmo \
&& rm -f $$file && $(GMSGFMT) -o $$file $<
.po.cat:
diff --git a/gas/po/POTFILES.in b/gas/po/POTFILES.in
index 3a173a536ff3..4215a09c7e86 100644
--- a/gas/po/POTFILES.in
+++ b/gas/po/POTFILES.in
@@ -24,8 +24,6 @@ config/obj-elf.c
config/obj-elf.h
config/obj-evax.c
config/obj-evax.h
-config/obj-ieee.c
-config/obj-ieee.h
config/obj-som.c
config/obj-som.h
config/tc-alpha.c
@@ -38,6 +36,8 @@ config/tc-avr.c
config/tc-avr.h
config/tc-bfin.c
config/tc-bfin.h
+config/tc-cr16.c
+config/tc-cr16.h
config/tc-cris.c
config/tc-cris.h
config/tc-crx.c
@@ -78,6 +78,8 @@ config/tc-m68k.c
config/tc-m68k.h
config/tc-mcore.c
config/tc-mcore.h
+config/tc-mep.c
+config/tc-mep.h
config/tc-mips.c
config/tc-mips.h
config/tc-mmix.c
@@ -102,12 +104,16 @@ config/tc-ppc.c
config/tc-ppc.h
config/tc-s390.c
config/tc-s390.h
+config/tc-score.c
+config/tc-score.h
config/tc-sh64.c
config/tc-sh64.h
config/tc-sh.c
config/tc-sh.h
config/tc-sparc.c
config/tc-sparc.h
+config/tc-spu.c
+config/tc-spu.h
config/tc-tic30.c
config/tc-tic30.h
config/tc-tic54x.c
diff --git a/gas/po/es.gmo b/gas/po/es.gmo
deleted file mode 100644
index f391e490b221..000000000000
--- a/gas/po/es.gmo
+++ /dev/null
Binary files differ
diff --git a/gas/po/fr.gmo b/gas/po/fr.gmo
deleted file mode 100644
index 63ada106f5a9..000000000000
--- a/gas/po/fr.gmo
+++ /dev/null
Binary files differ
diff --git a/gas/po/gas.pot b/gas/po/gas.pot
index 122a678aa4a0..575f36ef47b0 100644
--- a/gas/po/gas.pot
+++ b/gas/po/gas.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-10-25 08:41+0930\n"
+"POT-Creation-Date: 2007-07-02 15:56+0930\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"
@@ -16,64 +16,64 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: app.c:470 app.c:484
+#: app.c:473 app.c:487
msgid "end of file in comment"
msgstr ""
-#: app.c:560 app.c:605
+#: app.c:559 app.c:604
#, c-format
msgid "end of file in string; '%c' inserted"
msgstr ""
-#: app.c:631
+#: app.c:630
#, c-format
msgid "unknown escape '\\%c' in string; ignored"
msgstr ""
-#: app.c:786
+#: app.c:793
msgid "end of file not at end of a line; newline inserted"
msgstr ""
-#: app.c:945
+#: app.c:949
msgid "end of file in multiline comment"
msgstr ""
-#: app.c:1010
+#: app.c:1014
msgid "end of file after a one-character quote; \\0 inserted"
msgstr ""
-#: app.c:1018
+#: app.c:1022
msgid "end of file in escape character"
msgstr ""
-#: app.c:1030
+#: app.c:1034
msgid "missing close quote; (assumed)"
msgstr ""
-#: app.c:1098 app.c:1152 app.c:1163 app.c:1228
+#: app.c:1102 app.c:1156 app.c:1167 app.c:1241
msgid "end of file in comment; newline inserted"
msgstr ""
-#: as.c:161
+#: as.c:158
msgid "missing emulation mode name"
msgstr ""
-#: as.c:176
+#: as.c:173
#, c-format
msgid "unrecognized emulation name `%s'"
msgstr ""
-#: as.c:223
+#: as.c:220
#, c-format
msgid "GNU assembler version %s (%s) using BFD version %s\n"
msgstr ""
-#: as.c:230
+#: as.c:227
#, c-format
msgid "Usage: %s [option...] [asmfile...]\n"
msgstr ""
-#: as.c:232
+#: as.c:229
#, c-format
msgid ""
"Options:\n"
@@ -89,131 +89,131 @@ msgid ""
" \t =FILE list to FILE (must be last sub-option)\n"
msgstr ""
-#: as.c:245
+#: as.c:242
#, c-format
msgid " --alternate initially turn on alternate macro syntax\n"
msgstr ""
-#: as.c:247
+#: as.c:244
#, c-format
msgid " -D produce assembler debugging messages\n"
msgstr ""
-#: as.c:249
+#: as.c:246
#, c-format
msgid " --defsym SYM=VAL define symbol SYM to given value\n"
msgstr ""
-#: as.c:265
+#: as.c:262
#, c-format
msgid " emulate output (default %s)\n"
msgstr ""
-#: as.c:270
+#: as.c:267
#, c-format
msgid " --execstack require executable stack for this object\n"
msgstr ""
-#: as.c:272
+#: as.c:269
#, c-format
msgid ""
" --noexecstack don't require executable stack for this object\n"
msgstr ""
-#: as.c:275
+#: as.c:272
#, c-format
msgid " -f skip whitespace and comment preprocessing\n"
msgstr ""
-#: as.c:277
+#: as.c:274
#, c-format
msgid " -g --gen-debug generate debugging information\n"
msgstr ""
-#: as.c:279
+#: as.c:276
#, c-format
msgid " --gstabs generate STABS debugging information\n"
msgstr ""
-#: as.c:281
+#: as.c:278
#, c-format
msgid ""
" --gstabs+ generate STABS debug info with GNU extensions\n"
msgstr ""
-#: as.c:283
+#: as.c:280
#, c-format
msgid " --gdwarf-2 generate DWARF2 debugging information\n"
msgstr ""
-#: as.c:285
+#: as.c:282
#, c-format
msgid " --hash-size=<value> set the hash table size close to <value>\n"
msgstr ""
-#: as.c:287
+#: as.c:284
#, c-format
msgid " --help show this message and exit\n"
msgstr ""
-#: as.c:289
+#: as.c:286
#, c-format
msgid " --target-help show target specific options\n"
msgstr ""
-#: as.c:291
+#: as.c:288
#, c-format
msgid ""
" -I DIR add DIR to search list for .include directives\n"
msgstr ""
-#: as.c:293
+#: as.c:290
#, c-format
msgid " -J don't warn about signed overflow\n"
msgstr ""
-#: as.c:295
+#: as.c:292
#, c-format
msgid ""
" -K warn when differences altered for long "
"displacements\n"
msgstr ""
-#: as.c:297
+#: as.c:294
#, c-format
msgid " -L,--keep-locals keep local symbols (e.g. starting with `L')\n"
msgstr ""
-#: as.c:299
+#: as.c:296
#, c-format
msgid " -M,--mri assemble in MRI compatibility mode\n"
msgstr ""
-#: as.c:301
+#: as.c:298
#, c-format
msgid ""
" --MD FILE write dependency information in FILE (default "
"none)\n"
msgstr ""
-#: as.c:303
+#: as.c:300
#, c-format
msgid " -nocpp ignored\n"
msgstr ""
-#: as.c:305
+#: as.c:302
#, c-format
msgid ""
" -o OBJFILE name the object-file output OBJFILE (default a."
"out)\n"
msgstr ""
-#: as.c:307
+#: as.c:304
#, c-format
msgid " -R fold data section into text section\n"
msgstr ""
-#: as.c:309
+#: as.c:306
#, c-format
msgid ""
" --reduce-memory-overheads \n"
@@ -221,44 +221,44 @@ msgid ""
" assembly times\n"
msgstr ""
-#: as.c:313
+#: as.c:310
#, c-format
msgid ""
" --statistics print various measured statistics from execution\n"
msgstr ""
-#: as.c:315
+#: as.c:312
#, c-format
msgid " --strip-local-absolute strip local absolute symbols\n"
msgstr ""
-#: as.c:317
+#: as.c:314
#, c-format
msgid ""
" --traditional-format Use same format as native assembler when possible\n"
msgstr ""
-#: as.c:319
+#: as.c:316
#, c-format
msgid " --version print assembler version number and exit\n"
msgstr ""
-#: as.c:321
+#: as.c:318
#, c-format
msgid " -W --no-warn suppress warnings\n"
msgstr ""
-#: as.c:323
+#: as.c:320
#, c-format
msgid " --warn don't suppress warnings\n"
msgstr ""
-#: as.c:325
+#: as.c:322
#, c-format
msgid " --fatal-warnings treat warnings as errors\n"
msgstr ""
-#: as.c:327
+#: as.c:324
#, c-format
msgid ""
" --itbl INSTTBL extend instruction set to include instructions\n"
@@ -266,22 +266,22 @@ msgid ""
"INSTTBL\n"
msgstr ""
-#: as.c:330
+#: as.c:327
#, c-format
msgid " -w ignored\n"
msgstr ""
-#: as.c:332
+#: as.c:329
#, c-format
msgid " -X ignored\n"
msgstr ""
-#: as.c:334
+#: as.c:331
#, c-format
msgid " -Z generate object file even after errors\n"
msgstr ""
-#: as.c:336
+#: as.c:333
#, c-format
msgid ""
" --listing-lhs-width set the width in words of the output data column "
@@ -289,7 +289,7 @@ msgid ""
" the listing\n"
msgstr ""
-#: as.c:339
+#: as.c:336
#, c-format
msgid ""
" --listing-lhs-width2 set the width in words of the continuation lines\n"
@@ -298,124 +298,129 @@ msgid ""
" the width of the first line\n"
msgstr ""
-#: as.c:343
+#: as.c:340
#, c-format
msgid ""
" --listing-rhs-width set the max width in characters of the lines from\n"
" the source file\n"
msgstr ""
-#: as.c:346
+#: as.c:343
#, c-format
msgid ""
" --listing-cont-lines set the maximum number of continuation lines used\n"
" for the output data column of the listing\n"
msgstr ""
-#: as.c:353
+#: as.c:346
+#, c-format
+msgid " @FILE read options from FILE\n"
+msgstr ""
+
+#: as.c:354
#, c-format
msgid "Report bugs to %s\n"
msgstr ""
-#: as.c:553
+#: as.c:554
#, c-format
msgid "unrecognized option -%c%s"
msgstr ""
#. This output is intended to follow the GNU standards document.
-#: as.c:591
+#: as.c:592
#, c-format
msgid "GNU assembler %s\n"
msgstr ""
-#: as.c:592
+#: as.c:593
#, c-format
-msgid "Copyright 2005 Free Software Foundation, Inc.\n"
+msgid "Copyright 2007 Free Software Foundation, Inc.\n"
msgstr ""
-#: as.c:593
+#: as.c:594
#, 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 ""
-#: as.c:596
+#: as.c:597
#, c-format
msgid "This assembler was configured for a target of `%s'.\n"
msgstr ""
-#: as.c:603
+#: as.c:604
msgid "multiple emulation names specified"
msgstr ""
-#: as.c:605
+#: as.c:606
msgid "emulations not handled in this configuration"
msgstr ""
-#: as.c:610
+#: as.c:611
#, c-format
msgid "alias = %s\n"
msgstr ""
-#: as.c:611
+#: as.c:612
#, c-format
msgid "canonical = %s\n"
msgstr ""
-#: as.c:612
+#: as.c:613
#, c-format
msgid "cpu-type = %s\n"
msgstr ""
-#: as.c:614
+#: as.c:615
#, c-format
msgid "format = %s\n"
msgstr ""
-#: as.c:617
+#: as.c:618
#, c-format
msgid "bfd-target = %s\n"
msgstr ""
-#: as.c:630
+#: as.c:631
msgid "bad defsym; format is --defsym name=value"
msgstr ""
-#: as.c:650
+#: as.c:651
msgid "no file name following -t option"
msgstr ""
-#: as.c:665
+#: as.c:666
#, c-format
msgid "failed to read instruction table %s\n"
msgstr ""
-#: as.c:832
+#: as.c:833
#, c-format
msgid "invalid listing option `%c'"
msgstr ""
-#: as.c:885
+#: as.c:886
msgid "--hash-size needs a numeric argument"
msgstr ""
-#: as.c:910
+#: as.c:911
#, c-format
msgid "%s: total time in assembly: %ld.%06ld\n"
msgstr ""
-#: as.c:913
+#: as.c:914
#, c-format
msgid "%s: data size %ld\n"
msgstr ""
-#: as.c:1175
+#: as.c:1222
#, c-format
msgid "%d warnings, treating warnings as errors"
msgstr ""
-#: as.h:200
+#: as.h:237
#, c-format
msgid "Case value %ld unexpected at line %d of file \"%s\"\n"
msgstr ""
@@ -424,71 +429,71 @@ msgstr ""
#. * We have a GROSS internal error.
#. * This should never happen.
#.
-#: atof-generic.c:419 config/tc-m68k.c:3118
+#: atof-generic.c:417 config/tc-m68k.c:3342
msgid "failed sanity check"
msgstr ""
-#: cond.c:82
+#: cond.c:83
msgid "invalid identifier for \".ifdef\""
msgstr ""
-#: cond.c:149
+#: cond.c:150
msgid "non-constant expression in \".if\" statement"
msgstr ""
-#: cond.c:276
+#: cond.c:277
msgid "bad format for ifc or ifnc"
msgstr ""
-#: cond.c:306
+#: cond.c:307
msgid "\".elseif\" without matching \".if\""
msgstr ""
-#: cond.c:310
+#: cond.c:311
msgid "\".elseif\" after \".else\""
msgstr ""
-#: cond.c:313 cond.c:419
+#: cond.c:314 cond.c:420
msgid "here is the previous \"else\""
msgstr ""
-#: cond.c:316 cond.c:422
+#: cond.c:317 cond.c:423
msgid "here is the previous \"if\""
msgstr ""
-#: cond.c:345
+#: cond.c:346
msgid "non-constant expression in \".elseif\" statement"
msgstr ""
-#: cond.c:383
+#: cond.c:384
msgid "\".endif\" without \".if\""
msgstr ""
-#: cond.c:412
+#: cond.c:413
msgid "\".else\" without matching \".if\""
msgstr ""
-#: cond.c:416
+#: cond.c:417
msgid "duplicate \"else\""
msgstr ""
-#: cond.c:467
+#: cond.c:468
msgid ".ifeqs syntax error"
msgstr ""
-#: cond.c:548
+#: cond.c:549
msgid "end of macro inside conditional"
msgstr ""
-#: cond.c:550
+#: cond.c:551
msgid "end of file inside conditional"
msgstr ""
-#: cond.c:553
+#: cond.c:554
msgid "here is the start of the unterminated conditional"
msgstr ""
-#: cond.c:557
+#: cond.c:558
msgid "here is the \"else\" of the unterminated conditional"
msgstr ""
@@ -502,7 +507,7 @@ msgstr ""
msgid "Attempt to put an undefined symbol into set %s"
msgstr ""
-#: config/obj-aout.c:116 config/obj-coff.c:1328
+#: config/obj-aout.c:116 config/obj-coff.c:1340
#, c-format
msgid "Symbol `%s' can not be both weak and common"
msgstr ""
@@ -513,82 +518,82 @@ msgid "Inserting \"%s\" into structure table failed: %s"
msgstr ""
#. Zero is used as an end marker in the file.
-#: config/obj-coff.c:354
+#: config/obj-coff.c:366
msgid "Line numbers must be positive integers\n"
msgstr ""
-#: config/obj-coff.c:386
+#: config/obj-coff.c:398
msgid ".ln pseudo-op inside .def/.endef: ignored."
msgstr ""
-#: config/obj-coff.c:428 ecoff.c:3240
+#: config/obj-coff.c:440 ecoff.c:3240
msgid ".loc outside of .text"
msgstr ""
-#: config/obj-coff.c:435
+#: config/obj-coff.c:447
msgid ".loc pseudo-op inside .def/.endef: ignored."
msgstr ""
-#: config/obj-coff.c:516
+#: config/obj-coff.c:528
msgid ".def pseudo-op used inside of .def/.endef: ignored."
msgstr ""
-#: config/obj-coff.c:555
+#: config/obj-coff.c:567
msgid ".endef pseudo-op used outside of .def/.endef: ignored."
msgstr ""
-#: config/obj-coff.c:594
+#: config/obj-coff.c:606
#, c-format
msgid "`%s' symbol without preceding function"
msgstr ""
-#: config/obj-coff.c:681
+#: config/obj-coff.c:693
#, c-format
msgid "unexpected storage class %d"
msgstr ""
-#: config/obj-coff.c:790
+#: config/obj-coff.c:802
msgid ".dim pseudo-op used outside of .def/.endef: ignored."
msgstr ""
-#: config/obj-coff.c:810
+#: config/obj-coff.c:822
msgid "badly formed .dim directive ignored"
msgstr ""
-#: config/obj-coff.c:859
+#: config/obj-coff.c:871
msgid ".size pseudo-op used outside of .def/.endef ignored."
msgstr ""
-#: config/obj-coff.c:874
+#: config/obj-coff.c:886
msgid ".scl pseudo-op used outside of .def/.endef ignored."
msgstr ""
-#: config/obj-coff.c:891
+#: config/obj-coff.c:903
msgid ".tag pseudo-op used outside of .def/.endef ignored."
msgstr ""
-#: config/obj-coff.c:909
+#: config/obj-coff.c:921
#, c-format
msgid "tag not found for .tag %s"
msgstr ""
-#: config/obj-coff.c:922
+#: config/obj-coff.c:934
msgid ".type pseudo-op used outside of .def/.endef ignored."
msgstr ""
-#: config/obj-coff.c:941
+#: config/obj-coff.c:953
msgid ".val pseudo-op used outside of .def/.endef ignored."
msgstr ""
-#: config/obj-coff.c:1108
+#: config/obj-coff.c:1120
msgid "badly formed .weak directive ignored"
msgstr ""
-#: config/obj-coff.c:1286
+#: config/obj-coff.c:1298
msgid "mismatched .eb"
msgstr ""
-#: config/obj-coff.c:1307
+#: config/obj-coff.c:1319
#, c-format
msgid "C_EFCN symbol for %s out of scope"
msgstr ""
@@ -596,28 +601,28 @@ msgstr ""
#. STYP_INFO
#. STYP_LIB
#. STYP_OVER
-#: config/obj-coff.c:1533
+#: config/obj-coff.c:1591
#, c-format
msgid "unsupported section attribute '%c'"
msgstr ""
-#: config/obj-coff.c:1538 config/tc-ppc.c:4610
+#: config/obj-coff.c:1595 config/tc-ppc.c:4617
#, c-format
msgid "unknown section attribute '%c'"
msgstr ""
-#: config/obj-coff.c:1568 config/tc-ppc.c:4628 config/tc-tic54x.c:4287
-#: read.c:2551
+#: config/obj-coff.c:1623 config/tc-ppc.c:4635 config/tc-tic54x.c:4285
+#: read.c:2750
#, c-format
msgid "error setting flags for \"%s\": %s"
msgstr ""
-#: config/obj-coff.c:1579
+#: config/obj-coff.c:1634
#, c-format
msgid "Ignoring changed section attributes for %s"
msgstr ""
-#: config/obj-coff.c:1710
+#: config/obj-coff.c:1765
#, c-format
msgid "0x%lx: \"%s\" type = %ld, class = %d, segment = %d\n"
msgstr ""
@@ -630,192 +635,173 @@ msgstr ""
msgid "Can't set register masks"
msgstr ""
-#: config/obj-elf.c:318 config/tc-sparc.c:3973 config/tc-v850.c:451
+#: config/obj-elf.c:322 config/tc-sparc.c:4053 config/tc-v850.c:450
#, c-format
msgid "bad .common segment %s"
msgstr ""
-#: config/obj-elf.c:596
+#: config/obj-elf.c:600
#, c-format
msgid "setting incorrect section type for %s"
msgstr ""
-#: config/obj-elf.c:601
+#: config/obj-elf.c:605
#, c-format
msgid "ignoring incorrect section type for %s"
msgstr ""
-#: config/obj-elf.c:638
+#: config/obj-elf.c:647
#, c-format
msgid "setting incorrect section attributes for %s"
msgstr ""
-#: config/obj-elf.c:690
+#: config/obj-elf.c:699
#, c-format
msgid "ignoring changed section type for %s"
msgstr ""
-#: config/obj-elf.c:702
+#: config/obj-elf.c:711
#, c-format
msgid "ignoring changed section attributes for %s"
msgstr ""
-#: config/obj-elf.c:704
+#: config/obj-elf.c:713
#, c-format
msgid "ignoring changed section entity size for %s"
msgstr ""
-#: config/obj-elf.c:757
+#: config/obj-elf.c:766
msgid "unrecognized .section attribute: want a,w,x,M,S,G,T"
msgstr ""
-#: config/obj-elf.c:794
+#: config/obj-elf.c:803
msgid "unrecognized section attribute"
msgstr ""
-#: config/obj-elf.c:822 read.c:2535
+#: config/obj-elf.c:831 read.c:2734
msgid "unrecognized section type"
msgstr ""
-#: config/obj-elf.c:852
+#: config/obj-elf.c:861
msgid "missing name"
msgstr ""
-#: config/obj-elf.c:963
+#: config/obj-elf.c:972
msgid "invalid merge entity size"
msgstr ""
-#: config/obj-elf.c:970
+#: config/obj-elf.c:979
msgid "entity size for SHF_MERGE not specified"
msgstr ""
-#: config/obj-elf.c:990
+#: config/obj-elf.c:999
msgid "group name for SHF_GROUP not specified"
msgstr ""
-#: config/obj-elf.c:1003
+#: config/obj-elf.c:1012
msgid "character following name is not '#'"
msgstr ""
-#: config/obj-elf.c:1118
+#: config/obj-elf.c:1127
msgid ".previous without corresponding .section; ignored"
msgstr ""
-#: config/obj-elf.c:1144
+#: config/obj-elf.c:1153
msgid ".popsection without corresponding .pushsection; ignored"
msgstr ""
-#: config/obj-elf.c:1196
+#: config/obj-elf.c:1205
msgid "expected comma after name in .symver"
msgstr ""
-#: config/obj-elf.c:1220
+#: config/obj-elf.c:1229
#, c-format
msgid "missing version name in `%s' for symbol `%s'"
msgstr ""
-#: config/obj-elf.c:1231
+#: config/obj-elf.c:1240
#, c-format
msgid "multiple versions [`%s'|`%s'] for symbol `%s'"
msgstr ""
-#: config/obj-elf.c:1461
+#: config/obj-elf.c:1470
msgid "expected quoted string"
msgstr ""
-#: config/obj-elf.c:1481
+#: config/obj-elf.c:1490
#, c-format
msgid "expected comma after name `%s' in .size directive"
msgstr ""
-#: config/obj-elf.c:1490
+#: config/obj-elf.c:1499
msgid "missing expression in .size directive"
msgstr ""
-#: config/obj-elf.c:1577
+#: config/obj-elf.c:1586
#, c-format
msgid "unrecognized symbol type \"%s\""
msgstr ""
-#: config/obj-elf.c:1745
+#: config/obj-elf.c:1754
msgid ".size expression too complicated to fix up"
msgstr ""
-#: config/obj-elf.c:1777
+#: config/obj-elf.c:1786
#, c-format
msgid ""
"invalid attempt to declare external version name as default in symbol `%s'"
msgstr ""
-#: config/obj-elf.c:1838 ecoff.c:3598
+#: config/obj-elf.c:1847 ecoff.c:3598
#, c-format
msgid "symbol `%s' can not be both weak and common"
msgstr ""
-#: config/obj-elf.c:1945
+#: config/obj-elf.c:1954
#, c-format
msgid "assuming all members of group `%s' are COMDAT"
msgstr ""
-#: config/obj-elf.c:1967
+#: config/obj-elf.c:1976
#, c-format
msgid "can't create group: %s"
msgstr ""
-#: config/obj-elf.c:2076
+#: config/obj-elf.c:2086
#, c-format
msgid "failed to set up debugging information: %s"
msgstr ""
-#: config/obj-elf.c:2096
+#: config/obj-elf.c:2106
#, c-format
msgid "can't start writing .mdebug section: %s"
msgstr ""
-#: config/obj-elf.c:2104
+#: config/obj-elf.c:2114
#, c-format
msgid "could not write .mdebug section: %s"
msgstr ""
-#: config/obj-elf.h:140
-#, c-format
-msgid "can't allocate ELF private section data: %s"
-msgstr ""
-
-#: config/obj-ieee.c:69
-#, c-format
-msgid "Out of step\n"
-msgstr ""
-
-#: config/obj-ieee.c:449
-msgid "too many sections"
-msgstr ""
-
-#: config/obj-ieee.c:511
-#, c-format
-msgid "FATAL: Can't create %s"
-msgstr ""
-
#: config/obj-som.c:129
msgid "Only one .version pseudo-op per file!"
msgstr ""
-#: config/obj-som.c:146 config/obj-som.c:191
+#: config/obj-som.c:146 config/obj-som.c:188
msgid "Expected quoted string"
msgstr ""
-#: config/obj-som.c:155
+#: config/obj-som.c:153
#, c-format
-msgid "FATAL: Attaching version header %s"
+msgid "attaching version header %s: %s"
msgstr ""
-#: config/obj-som.c:174
+#: config/obj-som.c:171
msgid "Only one .copyright pseudo-op per file!"
msgstr ""
-#: config/obj-som.c:200
+#: config/obj-som.c:195
#, c-format
-msgid "FATAL: Attaching copyright header %s"
+msgid "attaching copyright header %s: %s"
msgstr ""
#: config/tc-alpha.c:592
@@ -887,8 +873,8 @@ msgstr ""
msgid "opcode `%s' not supported for target %s"
msgstr ""
-#: config/tc-alpha.c:1129 config/tc-alpha.c:3145 config/tc-avr.c:1221
-#: config/tc-msp430.c:1870
+#: config/tc-alpha.c:1129 config/tc-alpha.c:3145 config/tc-avr.c:1321
+#: config/tc-msp430.c:1868
#, c-format
msgid "unknown opcode `%s'"
msgstr ""
@@ -968,17 +954,17 @@ msgstr ""
msgid "sequence number in use for !tlsgd!%ld"
msgstr ""
-#: config/tc-alpha.c:1823 config/tc-arc.c:294 config/tc-mn10200.c:889
-#: config/tc-mn10300.c:2600 config/tc-ppc.c:1476 config/tc-s390.c:614
-#: config/tc-v850.c:1573
+#: config/tc-alpha.c:1823 config/tc-arc.c:292 config/tc-mn10200.c:888
+#: config/tc-mn10300.c:2604 config/tc-ppc.c:1541 config/tc-s390.c:615
+#: config/tc-v850.c:1588
msgid "operand"
msgstr ""
-#: config/tc-alpha.c:1926 config/tc-alpha.c:1950 config/tc-d10v.c:585
-#: config/tc-d30v.c:573 config/tc-mn10200.c:1133 config/tc-mn10300.c:1893
-#: config/tc-ppc.c:2348 config/tc-ppc.c:2565 config/tc-ppc.c:2577
-#: config/tc-s390.c:1230 config/tc-s390.c:1330 config/tc-s390.c:1459
-#: config/tc-v850.c:1747 config/tc-v850.c:1770 config/tc-v850.c:1973
+#: config/tc-alpha.c:1926 config/tc-alpha.c:1950 config/tc-d10v.c:584
+#: config/tc-d30v.c:572 config/tc-mn10200.c:1132 config/tc-mn10300.c:1892
+#: config/tc-ppc.c:2402 config/tc-ppc.c:2619 config/tc-ppc.c:2631
+#: config/tc-s390.c:1231 config/tc-s390.c:1331 config/tc-s390.c:1460
+#: config/tc-v850.c:1762 config/tc-v850.c:1785 config/tc-v850.c:1988
msgid "too many fixups"
msgstr ""
@@ -994,17 +980,17 @@ msgstr ""
msgid "can not resolve expression"
msgstr ""
-#: config/tc-alpha.c:3275 config/tc-ppc.c:1781 config/tc-ppc.c:4373
+#: config/tc-alpha.c:3275 config/tc-ppc.c:1840 config/tc-ppc.c:4380
#, c-format
msgid ".COMMon length (%ld.) <0! Ignored."
msgstr ""
-#: config/tc-alpha.c:3304 config/tc-sparc.c:3843 config/tc-v850.c:246
+#: config/tc-alpha.c:3304 config/tc-sparc.c:3923 config/tc-v850.c:245
msgid "Ignoring attempt to re-define symbol"
msgstr ""
-#: config/tc-alpha.c:3313 config/tc-alpha.c:3322 config/tc-ppc.c:4410
-#: config/tc-sparc.c:3851
+#: config/tc-alpha.c:3313 config/tc-alpha.c:3322 config/tc-ppc.c:4417
+#: config/tc-sparc.c:3931
#, c-format
msgid "Length of .comm \"%s\" is already %ld. Not changed to %ld."
msgstr ""
@@ -1033,7 +1019,7 @@ msgstr ""
msgid ".fmask outside of .ent"
msgstr ""
-#: config/tc-alpha.c:3547 ecoff.c:3204
+#: config/tc-alpha.c:3547 config/tc-score.c:5886 ecoff.c:3204
msgid ".mask outside of .ent"
msgstr ""
@@ -1045,7 +1031,8 @@ msgstr ""
msgid "bad .mask directive"
msgstr ""
-#: config/tc-alpha.c:3590 config/tc-mips.c:14022 ecoff.c:3168
+#: config/tc-alpha.c:3590 config/tc-mips.c:14589 config/tc-score.c:6029
+#: ecoff.c:3168
msgid ".frame outside of .ent"
msgstr ""
@@ -1134,7 +1121,7 @@ msgstr ""
msgid "No symbol after .code_address"
msgstr ""
-#: config/tc-alpha.c:4226
+#: config/tc-alpha.c:4226 config/tc-score.c:5892
msgid "Bad .mask directive"
msgstr ""
@@ -1168,7 +1155,7 @@ msgstr ""
msgid "Alignment too large: %d. assumed"
msgstr ""
-#: config/tc-alpha.c:4497 config/tc-d30v.c:2083
+#: config/tc-alpha.c:4497 config/tc-d30v.c:2082
msgid "Alignment negative: 0 assumed"
msgstr ""
@@ -1191,15 +1178,16 @@ msgstr ""
msgid "internal error: can't hash macro `%s': %s"
msgstr ""
-#: config/tc-alpha.c:4998 config/tc-i960.c:710 config/tc-xtensa.c:5112
-#: config/tc-xtensa.c:5181 config/tc-xtensa.c:5227
+#: config/tc-alpha.c:4998 config/tc-arm.c:6012 config/tc-arm.c:6024
+#: config/tc-i960.c:708 config/tc-xtensa.c:5161 config/tc-xtensa.c:5239
+#: config/tc-xtensa.c:5285 config/tc-z80.c:1893
msgid "syntax error"
msgstr ""
-#: config/tc-alpha.c:5067 config/tc-h8300.c:2055 config/tc-hppa.c:4041
-#: config/tc-i860.c:1059 config/tc-m68hc11.c:558 config/tc-m68k.c:4524
-#: config/tc-ns32k.c:1945 config/tc-or32.c:579 config/tc-sparc.c:2944
-#: config/tc-z8k.c:1310
+#: config/tc-alpha.c:5067 config/tc-h8300.c:2053 config/tc-hppa.c:1381
+#: config/tc-i860.c:1057 config/tc-m68hc11.c:560 config/tc-m68k.c:4654
+#: config/tc-ns32k.c:1943 config/tc-or32.c:580 config/tc-sparc.c:2998
+#: config/tc-spu.c:748 config/tc-z8k.c:1332
msgid "Bad call to MD_ATOF()"
msgstr ""
@@ -1241,7 +1229,7 @@ msgstr ""
msgid "type %d reloc done?\n"
msgstr ""
-#: config/tc-alpha.c:5420 config/tc-alpha.c:5427 config/tc-mips.c:8657
+#: config/tc-alpha.c:5420 config/tc-alpha.c:5427
msgid "Used $at without \".set noat\""
msgstr ""
@@ -1250,12 +1238,12 @@ msgstr ""
msgid "!samegp reloc against symbol without .prologue: %s"
msgstr ""
-#: config/tc-alpha.c:5626 config/tc-xtensa.c:5739
+#: config/tc-alpha.c:5626 config/tc-xtensa.c:5795
#, c-format
msgid "cannot represent `%s' relocation in object file"
msgstr ""
-#: config/tc-alpha.c:5632 config/tc-xtensa.c:5747
+#: config/tc-alpha.c:5632 config/tc-xtensa.c:5803
#, c-format
msgid "internal error? cannot generate `%s' relocation"
msgstr ""
@@ -1265,555 +1253,722 @@ msgstr ""
msgid "frame reg expected, using $%d."
msgstr ""
-#: config/tc-arc.c:1077 config/tc-ip2k.c:249
+#: config/tc-arc.c:1076 config/tc-ip2k.c:248
msgid "md_estimate_size_before_relax\n"
msgstr ""
-#: config/tc-arc.c:1088
+#: config/tc-arc.c:1087
msgid "md_convert_frag\n"
msgstr ""
#. We can't actually support subtracting a symbol.
-#: config/tc-arc.c:1288 config/tc-arm.c:1021 config/tc-arm.c:5764
-#: config/tc-arm.c:5815 config/tc-arm.c:6614 config/tc-arm.c:7256
-#: config/tc-arm.c:7284 config/tc-arm.c:7536 config/tc-arm.c:7553
-#: config/tc-arm.c:7674 config/tc-avr.c:970 config/tc-cris.c:3928
-#: config/tc-d10v.c:1539 config/tc-d30v.c:1938 config/tc-mips.c:3794
-#: config/tc-mips.c:4902 config/tc-mips.c:5834 config/tc-mips.c:6428
-#: config/tc-msp430.c:1979 config/tc-ppc.c:5562 config/tc-v850.c:2274
-#: config/tc-xstormy16.c:484
+#: config/tc-arc.c:1287 config/tc-arm.c:1522 config/tc-arm.c:8104
+#: config/tc-arm.c:8155 config/tc-arm.c:8388 config/tc-arm.c:9111
+#: config/tc-arm.c:9915 config/tc-arm.c:9943 config/tc-arm.c:10200
+#: config/tc-arm.c:10217 config/tc-arm.c:10339 config/tc-avr.c:1052
+#: config/tc-cris.c:3984 config/tc-d10v.c:1536 config/tc-d30v.c:1937
+#: config/tc-mips.c:4176 config/tc-mips.c:5300 config/tc-mips.c:6239
+#: config/tc-mips.c:6831 config/tc-msp430.c:1976 config/tc-ppc.c:5585
+#: config/tc-spu.c:961 config/tc-spu.c:985 config/tc-v850.c:2303
+#: config/tc-xstormy16.c:484 config/tc-xtensa.c:5597 config/tc-xtensa.c:11559
msgid "expression too complex"
msgstr ""
-#: config/tc-arm.c:352
+#: config/tc-arm.c:483
msgid "ARM register expected"
msgstr ""
-#: config/tc-arm.c:353
+#: config/tc-arm.c:484
msgid "bad or missing co-processor number"
msgstr ""
-#: config/tc-arm.c:354
+#: config/tc-arm.c:485
msgid "co-processor register expected"
msgstr ""
-#: config/tc-arm.c:355
+#: config/tc-arm.c:486
msgid "FPA register expected"
msgstr ""
-#: config/tc-arm.c:356
+#: config/tc-arm.c:487
msgid "VFP single precision register expected"
msgstr ""
-#: config/tc-arm.c:357
-msgid "VFP double precision register expected"
+#: config/tc-arm.c:488
+msgid "VFP/Neon double precision register expected"
+msgstr ""
+
+#: config/tc-arm.c:489
+msgid "Neon quad precision register expected"
+msgstr ""
+
+#: config/tc-arm.c:490
+msgid "VFP single or double precision register expected"
+msgstr ""
+
+#: config/tc-arm.c:491
+msgid "Neon double or quad precision register expected"
msgstr ""
-#: config/tc-arm.c:358
+#: config/tc-arm.c:492
+msgid "VFP single, double or Neon quad precision register expected"
+msgstr ""
+
+#: config/tc-arm.c:493
msgid "VFP system register expected"
msgstr ""
-#: config/tc-arm.c:359
+#: config/tc-arm.c:494
msgid "Maverick MVF register expected"
msgstr ""
-#: config/tc-arm.c:360
+#: config/tc-arm.c:495
msgid "Maverick MVD register expected"
msgstr ""
-#: config/tc-arm.c:361
+#: config/tc-arm.c:496
msgid "Maverick MVFX register expected"
msgstr ""
-#: config/tc-arm.c:362
+#: config/tc-arm.c:497
msgid "Maverick MVDX register expected"
msgstr ""
-#: config/tc-arm.c:363
+#: config/tc-arm.c:498
msgid "Maverick MVAX register expected"
msgstr ""
-#: config/tc-arm.c:364
+#: config/tc-arm.c:499
msgid "Maverick DSPSC register expected"
msgstr ""
-#: config/tc-arm.c:365
+#: config/tc-arm.c:500
msgid "iWMMXt data register expected"
msgstr ""
-#: config/tc-arm.c:366
+#: config/tc-arm.c:501 config/tc-arm.c:5821
msgid "iWMMXt control register expected"
msgstr ""
-#: config/tc-arm.c:367
+#: config/tc-arm.c:502
msgid "iWMMXt scalar register expected"
msgstr ""
-#: config/tc-arm.c:368
+#: config/tc-arm.c:503
msgid "XScale accumulator register expected"
msgstr ""
-#: config/tc-arm.c:499
+#. For score5u : div/mul will pop warning message, mmu/alw/asw will pop error message.
+#: config/tc-arm.c:652 config/tc-score.c:47
msgid "bad arguments to instruction"
msgstr ""
-#: config/tc-arm.c:500
+#: config/tc-arm.c:653 config/tc-score.c:48
msgid "r15 not allowed here"
msgstr ""
-#: config/tc-arm.c:501
+#: config/tc-arm.c:654
msgid "instruction cannot be conditional"
msgstr ""
-#: config/tc-arm.c:502
+#: config/tc-arm.c:655
msgid "registers may not be the same"
msgstr ""
-#: config/tc-arm.c:503
+#: config/tc-arm.c:656
msgid "lo register required"
msgstr ""
-#: config/tc-arm.c:504
+#: config/tc-arm.c:657
msgid "instruction not supported in Thumb16 mode"
msgstr ""
-#: config/tc-arm.c:640
+#: config/tc-arm.c:658
+msgid "instruction does not accept this addressing mode"
+msgstr ""
+
+#: config/tc-arm.c:659
+msgid "branch must be last instruction in IT block"
+msgstr ""
+
+#: config/tc-arm.c:660
+msgid "instruction not allowed in IT block"
+msgstr ""
+
+#: config/tc-arm.c:661
+msgid "selected FPU does not support instruction"
+msgstr ""
+
+#: config/tc-arm.c:803
msgid "immediate expression requires a # prefix"
msgstr ""
-#: config/tc-arm.c:666 expr.c:1302 read.c:2228
+#: config/tc-arm.c:830 config/tc-score.c:5675 expr.c:1298 read.c:2435
msgid "bad expression"
msgstr ""
-#: config/tc-arm.c:677 config/tc-i860.c:1005 config/tc-sparc.c:2844
+#: config/tc-arm.c:841 config/tc-i860.c:1003 config/tc-sparc.c:2898
msgid "bad segment"
msgstr ""
-#: config/tc-arm.c:693 config/tc-arm.c:3230 config/tc-i960.c:1302
+#: config/tc-arm.c:858 config/tc-arm.c:4346 config/tc-i960.c:1300
+#: config/tc-score.c:985
msgid "invalid constant"
msgstr ""
-#: config/tc-arm.c:754
+#: config/tc-arm.c:919 config/tc-score.c:4749
msgid "bad call to MD_ATOF()"
msgstr ""
-#: config/tc-arm.c:821
+#: config/tc-arm.c:986
msgid "expected #constant"
msgstr ""
-#: config/tc-arm.c:953
+#: config/tc-arm.c:1147
+#, c-format
+msgid "unexpected character `%c' in type specifier"
+msgstr ""
+
+#: config/tc-arm.c:1164
+#, c-format
+msgid "bad size %d in type specifier"
+msgstr ""
+
+#: config/tc-arm.c:1214
+msgid "only one type should be specified for operand"
+msgstr ""
+
+#: config/tc-arm.c:1220
+msgid "vector type expected"
+msgstr ""
+
+#: config/tc-arm.c:1292
+msgid "can't redefine type for operand"
+msgstr ""
+
+#: config/tc-arm.c:1303
+msgid "only D registers may be indexed"
+msgstr ""
+
+#: config/tc-arm.c:1309
+msgid "can't change index for operand"
+msgstr ""
+
+#: config/tc-arm.c:1325 config/tc-arm.c:3947
+msgid "constant expression required"
+msgstr ""
+
+#: config/tc-arm.c:1369
+msgid "register operand expected, but got scalar"
+msgstr ""
+
+#: config/tc-arm.c:1402
+msgid "scalar must have an index"
+msgstr ""
+
+#: config/tc-arm.c:1407 config/tc-arm.c:13097 config/tc-arm.c:13145
+#: config/tc-arm.c:13547
+msgid "scalar index out of range"
+msgstr ""
+
+#: config/tc-arm.c:1454
msgid "bad range in register list"
msgstr ""
-#: config/tc-arm.c:961 config/tc-arm.c:970 config/tc-arm.c:1011
+#: config/tc-arm.c:1462 config/tc-arm.c:1471 config/tc-arm.c:1512
#, c-format
msgid "Warning: duplicated register (r%d) in register list"
msgstr ""
-#: config/tc-arm.c:973
+#: config/tc-arm.c:1474
msgid "Warning: register range not in ascending order"
msgstr ""
-#: config/tc-arm.c:984
+#: config/tc-arm.c:1485
msgid "missing `}'"
msgstr ""
-#: config/tc-arm.c:1000
+#: config/tc-arm.c:1501
msgid "invalid register mask"
msgstr ""
-#: config/tc-arm.c:1091 config/tc-arm.c:1126 config/tc-h8300.c:991
-#: config/tc-mips.c:9797 config/tc-mips.c:9827
+#: config/tc-arm.c:1583
+msgid "expecting {"
+msgstr ""
+
+#: config/tc-arm.c:1638 config/tc-arm.c:1682
+msgid "register out of range in list"
+msgstr ""
+
+#: config/tc-arm.c:1654 config/tc-arm.c:1699 config/tc-h8300.c:989
+#: config/tc-mips.c:10168 config/tc-mips.c:10190
msgid "invalid register list"
msgstr ""
-#: config/tc-arm.c:1097 config/tc-arm.c:2402 config/tc-arm.c:2535
+#: config/tc-arm.c:1660 config/tc-arm.c:3412 config/tc-arm.c:3545
msgid "register list not in ascending order"
msgstr ""
-#: config/tc-arm.c:1118
+#: config/tc-arm.c:1691
msgid "register range not in ascending order"
msgstr ""
-#: config/tc-arm.c:1151
+#: config/tc-arm.c:1724
msgid "non-contiguous register range"
msgstr ""
-#: config/tc-arm.c:1199
+#: config/tc-arm.c:1850
+msgid "don't use Rn-Rm syntax with non-unit stride"
+msgstr ""
+
+#: config/tc-arm.c:1905
+msgid "error parsing element/structure list"
+msgstr ""
+
+#: config/tc-arm.c:1911
+msgid "expected }"
+msgstr ""
+
+#: config/tc-arm.c:1967
#, c-format
msgid "ignoring attempt to redefine built-in register '%s'"
msgstr ""
-#: config/tc-arm.c:1204
+#: config/tc-arm.c:1972
#, c-format
msgid "ignoring redefinition of register alias '%s'"
msgstr ""
-#: config/tc-arm.c:1248
+#: config/tc-arm.c:2000
+msgid "attempt to redefine typed alias"
+msgstr ""
+
+#: config/tc-arm.c:2038
#, c-format
msgid "unknown register '%s' -- .req ignored"
msgstr ""
-#: config/tc-arm.c:1291
+#: config/tc-arm.c:2121
+msgid "bad type for register"
+msgstr ""
+
+#: config/tc-arm.c:2132
+msgid "expression must be constant"
+msgstr ""
+
+#: config/tc-arm.c:2149
+msgid "can't redefine the type of a register alias"
+msgstr ""
+
+#: config/tc-arm.c:2156
+msgid "you must specify a single type only"
+msgstr ""
+
+#: config/tc-arm.c:2169
+msgid "can't redefine the index of a scalar alias"
+msgstr ""
+
+#: config/tc-arm.c:2177
+msgid "scalar index must be constant"
+msgstr ""
+
+#: config/tc-arm.c:2186
+msgid "expecting ]"
+msgstr ""
+
+#: config/tc-arm.c:2223
msgid "invalid syntax for .req directive"
msgstr ""
-#: config/tc-arm.c:1317
+#: config/tc-arm.c:2229
+msgid "invalid syntax for .dn directive"
+msgstr ""
+
+#: config/tc-arm.c:2235
+msgid "invalid syntax for .qn directive"
+msgstr ""
+
+#: config/tc-arm.c:2261
msgid "invalid syntax for .unreq directive"
msgstr ""
-#: config/tc-arm.c:1323
+#: config/tc-arm.c:2267
#, c-format
msgid "unknown register alias '%s'"
msgstr ""
-#: config/tc-arm.c:1325
+#: config/tc-arm.c:2269
#, c-format
msgid "ignoring attempt to undefine built-in register '%s'"
msgstr ""
-#: config/tc-arm.c:1456
+#: config/tc-arm.c:2402
msgid "selected processor does not support THUMB opcodes"
msgstr ""
-#: config/tc-arm.c:1470
+#: config/tc-arm.c:2416
msgid "selected processor does not support ARM opcodes"
msgstr ""
-#: config/tc-arm.c:1483
+#: config/tc-arm.c:2429
#, c-format
msgid "invalid instruction size selected (%d)"
msgstr ""
-#: config/tc-arm.c:1515
+#: config/tc-arm.c:2461
#, c-format
msgid "invalid operand to .code directive (%d) (expecting 16 or 32)"
msgstr ""
-#: config/tc-arm.c:1571
+#: config/tc-arm.c:2517
#, c-format
msgid "expected comma after name \"%s\""
msgstr ""
-#: config/tc-arm.c:1621 config/tc-m32r.c:589
+#: config/tc-arm.c:2567 config/tc-m32r.c:588
#, c-format
msgid "symbol `%s' already defined"
msgstr ""
-#: config/tc-arm.c:1655
+#: config/tc-arm.c:2601
#, c-format
msgid "unrecognized syntax mode \"%s\""
msgstr ""
-#: config/tc-arm.c:1675
+#: config/tc-arm.c:2622
#, c-format
msgid "alignment too large: %d assumed"
msgstr ""
-#: config/tc-arm.c:1678
+#: config/tc-arm.c:2625
msgid "alignment negative. 0 assumed."
msgstr ""
-#: config/tc-arm.c:1816
+#: config/tc-arm.c:2772
msgid "literal pool overflow"
msgstr ""
-#: config/tc-arm.c:1972 config/tc-arm.c:3888
+#: config/tc-arm.c:2928 config/tc-arm.c:5756
msgid "unrecognized relocation suffix"
msgstr ""
-#: config/tc-arm.c:1985
+#: config/tc-arm.c:2941
msgid "(plt) is only valid on branch targets"
msgstr ""
-#: config/tc-arm.c:1991 config/tc-s390.c:1128 config/tc-s390.c:1742
-#: config/tc-xtensa.c:1601
+#: config/tc-arm.c:2947 config/tc-s390.c:1129 config/tc-s390.c:1743
+#: config/tc-xtensa.c:1545
#, c-format
msgid "%s relocations do not fit in %d bytes"
msgstr ""
-#: config/tc-arm.c:2039 dwarf2dbg.c:659
+#: config/tc-arm.c:2995 dwarf2dbg.c:689
msgid "expected 0 or 1"
msgstr ""
-#: config/tc-arm.c:2043
+#: config/tc-arm.c:2999
msgid "missing comma"
msgstr ""
-#: config/tc-arm.c:2098
+#: config/tc-arm.c:3054
msgid "dupicate .handlerdata directive"
msgstr ""
-#: config/tc-arm.c:2169
+#: config/tc-arm.c:3125
msgid "personality routine specified for cantunwind frame"
msgstr ""
-#: config/tc-arm.c:2183
+#: config/tc-arm.c:3139
msgid "duplicate .personalityindex directive"
msgstr ""
-#: config/tc-arm.c:2190
+#: config/tc-arm.c:3146
msgid "bad personality routine number"
msgstr ""
-#: config/tc-arm.c:2209
+#: config/tc-arm.c:3165
msgid "duplicate .personality directive"
msgstr ""
-#: config/tc-arm.c:2232 config/tc-arm.c:2354
+#: config/tc-arm.c:3188 config/tc-arm.c:3316 config/tc-arm.c:3364
msgid "expected register list"
msgstr ""
-#: config/tc-arm.c:2310
+#: config/tc-arm.c:3270
msgid "expected , <constant>"
msgstr ""
-#: config/tc-arm.c:2319
+#: config/tc-arm.c:3279
msgid "number of registers must be in the range [1:4]"
msgstr ""
-#: config/tc-arm.c:2416 config/tc-arm.c:2549
+#: config/tc-arm.c:3426 config/tc-arm.c:3559
msgid "bad register range"
msgstr ""
-#: config/tc-arm.c:2602
+#: config/tc-arm.c:3613
msgid "register expected"
msgstr ""
-#: config/tc-arm.c:2612
+#: config/tc-arm.c:3623
msgid "FPA .unwind_save does not take a register list"
msgstr ""
-#: config/tc-arm.c:2625
+#: config/tc-arm.c:3641
msgid ".unwind_save does not support this kind of register"
msgstr ""
-#: config/tc-arm.c:2650
+#: config/tc-arm.c:3677
msgid "SP and PC not permitted in .unwind_movsp directive"
msgstr ""
-#: config/tc-arm.c:2655
+#: config/tc-arm.c:3682
msgid "unexpected .unwind_movsp directive"
msgstr ""
-#: config/tc-arm.c:2679
+#: config/tc-arm.c:3706
msgid "stack increment must be multiple of 4"
msgstr ""
-#: config/tc-arm.c:2708
+#: config/tc-arm.c:3735
msgid "expected <reg>, <reg>"
msgstr ""
-#: config/tc-arm.c:2726
+#: config/tc-arm.c:3753
msgid "register must be either sp or set by a previousunwind_movsp directive"
msgstr ""
-#: config/tc-arm.c:2762
+#: config/tc-arm.c:3789
msgid "expected <offset>, <opcode>"
msgstr ""
-#: config/tc-arm.c:2774
+#: config/tc-arm.c:3801
msgid "unwind opcode too long"
msgstr ""
-#: config/tc-arm.c:2779
+#: config/tc-arm.c:3806
msgid "invalid unwind opcode"
msgstr ""
-#: config/tc-arm.c:2829
-msgid "expected numeric constant"
-msgstr ""
-
-#: config/tc-arm.c:2838
-msgid "expected comma"
-msgstr ""
-
-#: config/tc-arm.c:2877
-msgid "bad string constant"
-msgstr ""
-
-#: config/tc-arm.c:2881
-msgid "expected <tag> , <value>"
-msgstr ""
-
-#: config/tc-arm.c:2957
-msgid "constant expression required"
-msgstr ""
-
-#: config/tc-arm.c:2963 config/tc-arm.c:6472 config/tc-arm.c:11799
-#: config/tc-arm.c:11824 config/tc-arm.c:11832 config/tc-z8k.c:1122
-#: config/tc-z8k.c:1132
+#: config/tc-arm.c:3953 config/tc-arm.c:4816 config/tc-arm.c:8391
+#: config/tc-arm.c:8873 config/tc-arm.c:11671 config/tc-arm.c:18619
+#: config/tc-arm.c:18644 config/tc-arm.c:18652 config/tc-z8k.c:1144
+#: config/tc-z8k.c:1154
msgid "immediate value out of range"
msgstr ""
-#: config/tc-arm.c:3058
+#: config/tc-arm.c:4100
msgid "invalid FPA immediate expression"
msgstr ""
-#: config/tc-arm.c:3108 config/tc-arm.c:3116
+#: config/tc-arm.c:4224 config/tc-arm.c:4232
msgid "shift expression expected"
msgstr ""
-#: config/tc-arm.c:3130
+#: config/tc-arm.c:4246
msgid "'LSL' or 'ASR' required"
msgstr ""
-#: config/tc-arm.c:3138
+#: config/tc-arm.c:4254
msgid "'LSL' required"
msgstr ""
-#: config/tc-arm.c:3146
+#: config/tc-arm.c:4262
msgid "'ASR' required"
msgstr ""
-#: config/tc-arm.c:3218 config/tc-arm.c:4349 config/tc-v850.c:1844
-#: config/tc-v850.c:1865
+#: config/tc-arm.c:4334 config/tc-arm.c:4810 config/tc-arm.c:6382
+#: config/tc-v850.c:1859 config/tc-v850.c:1880
msgid "constant expression expected"
msgstr ""
-#: config/tc-arm.c:3225
+#: config/tc-arm.c:4341
msgid "invalid rotation"
msgstr ""
-#: config/tc-arm.c:3340 config/tc-arm.c:3640
+#: config/tc-arm.c:4501 config/tc-arm.c:4646
+msgid "unknown group relocation"
+msgstr ""
+
+#: config/tc-arm.c:4614
+msgid "alignment must be constant"
+msgstr ""
+
+#: config/tc-arm.c:4677
+msgid "this group relocation is not allowed on this instruction"
+msgstr ""
+
+#: config/tc-arm.c:4689 config/tc-arm.c:5080
msgid "']' expected"
msgstr ""
-#: config/tc-arm.c:3358
+#: config/tc-arm.c:4707
msgid "'}' expected at end of 'option' field"
msgstr ""
-#: config/tc-arm.c:3363
+#: config/tc-arm.c:4712
msgid "cannot combine index with option"
msgstr ""
-#: config/tc-arm.c:3376
+#: config/tc-arm.c:4725
msgid "cannot combine pre- and post-indexing"
msgstr ""
-#: config/tc-arm.c:3472
+#: config/tc-arm.c:4886
msgid "flag for {c}psr instruction expected"
msgstr ""
-#: config/tc-arm.c:3497
+#: config/tc-arm.c:4911
msgid "unrecognized CPS flag"
msgstr ""
-#: config/tc-arm.c:3504
+#: config/tc-arm.c:4918
msgid "missing CPS flags"
msgstr ""
-#: config/tc-arm.c:3527 config/tc-arm.c:3533
+#: config/tc-arm.c:4941 config/tc-arm.c:4947
msgid "valid endian specifiers are be or le"
msgstr ""
-#: config/tc-arm.c:3555
+#: config/tc-arm.c:4969
msgid "missing rotation field after comma"
msgstr ""
-#: config/tc-arm.c:3570
+#: config/tc-arm.c:4984
msgid "rotation can only be 0, 8, 16, or 24"
msgstr ""
-#: config/tc-arm.c:3590
+#: config/tc-arm.c:5004
msgid "condition required"
msgstr ""
-#: config/tc-arm.c:3632
+#: config/tc-arm.c:5042 config/tc-arm.c:6877
+msgid "'[' expected"
+msgstr ""
+
+#: config/tc-arm.c:5055
+msgid "',' expected"
+msgstr ""
+
+#: config/tc-arm.c:5072
msgid "invalid shift"
msgstr ""
-#: config/tc-arm.c:3929
+#: config/tc-arm.c:5145
+msgid "can't use Neon quad register here"
+msgstr ""
+
+#: config/tc-arm.c:5211
+msgid "expected <Rm> or <Dm> or <Qm> operand"
+msgstr ""
+
+#: config/tc-arm.c:5291
+msgid "parse error"
+msgstr ""
+
+#: config/tc-arm.c:5301 read.c:2092
+msgid "expected comma"
+msgstr ""
+
+#: config/tc-arm.c:5591 config/tc-arm.c:5661
+msgid "immediate value is out of range"
+msgstr ""
+
+#: config/tc-arm.c:5806
msgid "iWMMXt data or control register expected"
msgstr ""
-#: config/tc-arm.c:4051
+#: config/tc-arm.c:6038 config/tc-score.c:56
msgid "garbage following instruction"
msgstr ""
-#: config/tc-arm.c:4185
+#: config/tc-arm.c:6125
+msgid "D register out of range for selected VFP version"
+msgstr ""
+
+#: config/tc-arm.c:6204
msgid "instruction does not accept preindexed addressing"
msgstr ""
#. unindexed - only for coprocessor
-#: config/tc-arm.c:4201 config/tc-arm.c:5857
+#: config/tc-arm.c:6220 config/tc-arm.c:8197
msgid "instruction does not accept unindexed addressing"
msgstr ""
-#: config/tc-arm.c:4209
+#: config/tc-arm.c:6228
msgid "destination register same as write-back base"
msgstr ""
-#: config/tc-arm.c:4210
+#: config/tc-arm.c:6229
msgid "source register same as write-back base"
msgstr ""
-#: config/tc-arm.c:4256
+#: config/tc-arm.c:6275
msgid "instruction does not accept scaled register index"
msgstr ""
-#: config/tc-arm.c:4295
+#: config/tc-arm.c:6315
msgid "instruction does not support unindexed addressing"
msgstr ""
-#: config/tc-arm.c:4310
+#: config/tc-arm.c:6330
msgid "pc may not be used with write-back"
msgstr ""
-#: config/tc-arm.c:4315
+#: config/tc-arm.c:6335
msgid "instruction does not support writeback"
msgstr ""
-#: config/tc-arm.c:4344
+#: config/tc-arm.c:6377
msgid "invalid pseudo operation"
msgstr ""
-#: config/tc-arm.c:4390
+#: config/tc-arm.c:6423
msgid "literal pool insertion failed"
msgstr ""
-#: config/tc-arm.c:4448
+#: config/tc-arm.c:6481
msgid "Rn must not overlap other operands"
msgstr ""
-#: config/tc-arm.c:4534 config/tc-arm.c:4553 config/tc-arm.c:4566
-#: config/tc-arm.c:6360 config/tc-arm.c:6380 config/tc-arm.c:6394
+#: config/tc-arm.c:6581 config/tc-arm.c:6600 config/tc-arm.c:6613
+#: config/tc-arm.c:8740 config/tc-arm.c:8760 config/tc-arm.c:8774
msgid "bit-field extends past end of register"
msgstr ""
-#: config/tc-arm.c:4595
+#: config/tc-arm.c:6642
msgid "the only suffix valid here is '(plt)'"
msgstr ""
-#: config/tc-arm.c:4627
+#: config/tc-arm.c:6695
msgid "use of r15 in blx in ARM mode is not really useful"
msgstr ""
-#: config/tc-arm.c:4645
+#: config/tc-arm.c:6718
msgid "use of r15 in bx in ARM mode is not really useful"
msgstr ""
-#: config/tc-arm.c:4657 config/tc-arm.c:6508
+#: config/tc-arm.c:6730 config/tc-arm.c:8912
msgid "use of r15 in bxj is not really useful"
msgstr ""
-#: config/tc-arm.c:4761 config/tc-arm.c:4770
+#: config/tc-arm.c:6844 config/tc-arm.c:6853
msgid "writeback of base register is UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:4764
+#: config/tc-arm.c:6847
msgid "writeback of base register when in register list is UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:4774
+#: config/tc-arm.c:6857
msgid "if writeback register is in list, it must be the lowest reg in the list"
msgstr ""
-#: config/tc-arm.c:4789
+#: config/tc-arm.c:6872
msgid "first destination register must be even"
msgstr ""
-#: config/tc-arm.c:4792 config/tc-arm.c:4849
+#: config/tc-arm.c:6875 config/tc-arm.c:6942
msgid "can only load two consecutive registers"
msgstr ""
@@ -1821,863 +1976,1052 @@ msgstr ""
#. have been called in the first place.
#. If op 2 were present and equal to PC, this function wouldn't
#. have been called in the first place.
-#: config/tc-arm.c:4793 config/tc-arm.c:4852 config/tc-arm.c:5299
-#: config/tc-arm.c:6886
+#: config/tc-arm.c:6876 config/tc-arm.c:6945 config/tc-arm.c:7467
+#: config/tc-arm.c:9390
msgid "r14 not allowed here"
msgstr ""
-#: config/tc-arm.c:4794
-msgid "'[' expected"
-msgstr ""
-
-#: config/tc-arm.c:4807
+#: config/tc-arm.c:6890
msgid "base register written back, and overlaps second destination register"
msgstr ""
-#: config/tc-arm.c:4815
+#: config/tc-arm.c:6898
msgid "index register overlaps destination register"
msgstr ""
-#: config/tc-arm.c:4829 config/tc-arm.c:5272 config/tc-arm.c:6706
-#: config/tc-arm.c:7581
-msgid "instruction does not accept this addressing mode"
-msgstr ""
-
-#: config/tc-arm.c:4835 config/tc-arm.c:5281
+#: config/tc-arm.c:6928 config/tc-arm.c:7449
msgid "offset must be zero in ARM encoding"
msgstr ""
-#: config/tc-arm.c:4846 config/tc-arm.c:5293
+#: config/tc-arm.c:6939 config/tc-arm.c:7461
msgid "even register required"
msgstr ""
-#: config/tc-arm.c:4877 config/tc-arm.c:4908
+#: config/tc-arm.c:6970 config/tc-arm.c:7001
msgid "this instruction requires a post-indexed address"
msgstr ""
-#: config/tc-arm.c:4935
-msgid "rd and rm should be different in mla"
+#: config/tc-arm.c:7028
+msgid "Rd and Rm should be different in mla"
+msgstr ""
+
+#: config/tc-arm.c:7052 config/tc-arm.c:9648
+msgid ":lower16: not allowed this instruction"
+msgstr ""
+
+#: config/tc-arm.c:7054
+msgid ":upper16: not allowed instruction"
+msgstr ""
+
+#: config/tc-arm.c:7073
+msgid "operand 1 must be FPSCR"
msgstr ""
-#: config/tc-arm.c:4967 config/tc-arm.c:7121
+#: config/tc-arm.c:7106 config/tc-arm.c:9757
msgid "'CPSR' or 'SPSR' expected"
msgstr ""
-#: config/tc-arm.c:5000
-msgid "rd and rm should be different in mul"
+#: config/tc-arm.c:7143
+msgid "Rd and Rm should be different in mul"
msgstr ""
-#: config/tc-arm.c:5021
+#: config/tc-arm.c:7164
msgid "rdhi, rdlo and rm must all be different"
msgstr ""
-#: config/tc-arm.c:5083
+#: config/tc-arm.c:7226
msgid "'[' expected after PLD mnemonic"
msgstr ""
-#: config/tc-arm.c:5085
+#: config/tc-arm.c:7228 config/tc-arm.c:7243
msgid "post-indexed expression used in preload instruction"
msgstr ""
-#: config/tc-arm.c:5087
+#: config/tc-arm.c:7230 config/tc-arm.c:7245
msgid "writeback used in preload instruction"
msgstr ""
-#: config/tc-arm.c:5089
+#: config/tc-arm.c:7232 config/tc-arm.c:7247
msgid "unindexed addressing used in preload instruction"
msgstr ""
-#: config/tc-arm.c:5188 config/tc-arm.c:7492
-msgid "source1 and dest must be same register"
+#: config/tc-arm.c:7241
+msgid "'[' expected after PLI mnemonic"
msgstr ""
-#: config/tc-arm.c:5238 config/tc-arm.c:7178
+#: config/tc-arm.c:7394 config/tc-arm.c:9837
msgid "rdhi and rdlo must be different"
msgstr ""
-#: config/tc-arm.c:5296
+#: config/tc-arm.c:7420
+msgid "SRS base register must be r13"
+msgstr ""
+
+#: config/tc-arm.c:7464
msgid "can only store two consecutive registers"
msgstr ""
-#: config/tc-arm.c:5391 config/tc-arm.c:5408
+#: config/tc-arm.c:7559 config/tc-arm.c:7576
msgid "only two consecutive VFP SP registers allowed here"
msgstr ""
-#: config/tc-arm.c:5436 config/tc-arm.c:5451
+#: config/tc-arm.c:7604 config/tc-arm.c:7619
msgid "this addressing mode requires base-register writeback"
msgstr ""
-#: config/tc-arm.c:5529
+#: config/tc-arm.c:7794
msgid "this instruction does not support indexing"
msgstr ""
-#: config/tc-arm.c:5552
+#: config/tc-arm.c:7818
msgid "only r15 allowed here"
msgstr ""
-#: config/tc-arm.c:5757
+#: config/tc-arm.c:7953
+msgid "immediate operand requires iWMMXt2"
+msgstr ""
+
+#: config/tc-arm.c:8097
msgid "shift by register not allowed in thumb mode"
msgstr ""
-#: config/tc-arm.c:5769 config/tc-arm.c:11339
+#: config/tc-arm.c:8109 config/tc-arm.c:18126
msgid "shift expression is too large"
msgstr ""
-#: config/tc-arm.c:5795
-msgid "Thumb does not support the ldr =N pseudo-operation"
+#: config/tc-arm.c:8135
+msgid "Instruction does not support =N addresses"
msgstr ""
-#: config/tc-arm.c:5800
+#: config/tc-arm.c:8140
msgid "cannot use register index with PC-relative addressing"
msgstr ""
-#: config/tc-arm.c:5801
+#: config/tc-arm.c:8141
msgid "cannot use register index with this instruction"
msgstr ""
-#: config/tc-arm.c:5803
+#: config/tc-arm.c:8143
msgid "Thumb does not support negative register indexing"
msgstr ""
-#: config/tc-arm.c:5805
+#: config/tc-arm.c:8145
msgid "Thumb does not support register post-indexing"
msgstr ""
-#: config/tc-arm.c:5807
+#: config/tc-arm.c:8147
msgid "Thumb does not support register indexing with writeback"
msgstr ""
-#: config/tc-arm.c:5809
+#: config/tc-arm.c:8149
msgid "Thumb supports only LSL in shifted register indexing"
msgstr ""
-#: config/tc-arm.c:5818
+#: config/tc-arm.c:8158 config/tc-arm.c:12899
msgid "shift out of range"
msgstr ""
-#: config/tc-arm.c:5826
+#: config/tc-arm.c:8166
msgid "cannot use writeback with PC-relative addressing"
msgstr ""
-#: config/tc-arm.c:5828
+#: config/tc-arm.c:8168
msgid "cannot use writeback with this instruction"
msgstr ""
-#: config/tc-arm.c:5847
+#: config/tc-arm.c:8187
msgid "cannot use post-indexing with PC-relative addressing"
msgstr ""
-#: config/tc-arm.c:5848
+#: config/tc-arm.c:8188
msgid "cannot use post-indexing with this instruction"
msgstr ""
-#: config/tc-arm.c:5975
+#: config/tc-arm.c:8315
msgid "PC not allowed as destination"
msgstr ""
-#: config/tc-arm.c:6093 config/tc-arm.c:6234 config/tc-arm.c:6326
-#: config/tc-arm.c:7092
+#: config/tc-arm.c:8386
+msgid "only SUBS PC, LR, #const allowed"
+msgstr ""
+
+#: config/tc-arm.c:8459 config/tc-arm.c:8600 config/tc-arm.c:8692
+#: config/tc-arm.c:9712
msgid "shift must be constant"
msgstr ""
-#: config/tc-arm.c:6120 config/tc-arm.c:6249 config/tc-arm.c:6341
-#: config/tc-arm.c:7105
+#: config/tc-arm.c:8486 config/tc-arm.c:8615 config/tc-arm.c:8707
+#: config/tc-arm.c:9725
msgid "unshifted register required"
msgstr ""
-#: config/tc-arm.c:6135 config/tc-arm.c:6352 config/tc-arm.c:7165
+#: config/tc-arm.c:8501 config/tc-arm.c:8718 config/tc-arm.c:9824
msgid "dest must overlap one source register"
msgstr ""
-#: config/tc-arm.c:6252
+#: config/tc-arm.c:8618
msgid "dest and source1 must be the same register"
msgstr ""
-#: config/tc-arm.c:6537
+#: config/tc-arm.c:8869
+msgid "instruction is always unconditional"
+msgstr ""
+
+#: config/tc-arm.c:8951
+msgid "selected processor does not support 'A' form of this instruction"
+msgstr ""
+
+#: config/tc-arm.c:8954
msgid "Thumb does not support the 2-argument form of this instruction"
msgstr ""
-#: config/tc-arm.c:6616
-msgid "Thumb load/store multiple does not support {reglist}^"
+#: config/tc-arm.c:9053
+msgid "SP not allowed in register list"
msgstr ""
-#: config/tc-arm.c:6633 config/tc-arm.c:6649 config/tc-arm.c:6680
-#, c-format
-msgid "value stored for r%d is UNPREDICTABLE"
+#: config/tc-arm.c:9058
+msgid "LR and PC should not both be in register list"
msgstr ""
-#: config/tc-arm.c:6643
-msgid "SP should not be in register list"
+#: config/tc-arm.c:9062
+msgid "base register should not be in register list when written back"
msgstr ""
-#: config/tc-arm.c:6647
-msgid "PC should not be in register list"
+#: config/tc-arm.c:9068
+msgid "PC not allowed in register list"
msgstr ""
-#: config/tc-arm.c:6656 config/tc-arm.c:7311
-msgid "LR and PC should not both be in register list"
+#: config/tc-arm.c:9071 config/tc-arm.c:9137 config/tc-arm.c:9177
+#, c-format
+msgid "value stored for r%d is UNPREDICTABLE"
msgstr ""
-#: config/tc-arm.c:6659
-msgid "base register should not be in register list when written back"
+#: config/tc-arm.c:9113
+msgid "Thumb load/store multiple does not support {reglist}^"
+msgstr ""
+
+#: config/tc-arm.c:9170
+msgid "Thumb-2 instruction only valid in unified syntax"
msgstr ""
-#: config/tc-arm.c:6677 config/tc-arm.c:6687
+#: config/tc-arm.c:9174 config/tc-arm.c:9184
msgid "this instruction will write back the base register"
msgstr ""
-#: config/tc-arm.c:6690
+#: config/tc-arm.c:9187
msgid "this instruction will not write back the base register"
msgstr ""
-#: config/tc-arm.c:6719
+#: config/tc-arm.c:9216
msgid "r14 not allowed as first register when second register is omitted"
msgstr ""
-#: config/tc-arm.c:6809 config/tc-arm.c:6822 config/tc-arm.c:6858
+#: config/tc-arm.c:9313 config/tc-arm.c:9326 config/tc-arm.c:9362
msgid "Thumb does not support this addressing mode"
msgstr ""
-#: config/tc-arm.c:6826
+#: config/tc-arm.c:9330
msgid "byte or halfword not valid for base register"
msgstr ""
-#: config/tc-arm.c:6829
+#: config/tc-arm.c:9333
msgid "r15 based store not allowed"
msgstr ""
-#: config/tc-arm.c:6831
+#: config/tc-arm.c:9335
msgid "invalid base register for register offset"
msgstr ""
-#: config/tc-arm.c:7032
+#: config/tc-arm.c:9633
msgid "only lo regs allowed with immediate"
msgstr ""
-#: config/tc-arm.c:7130
-msgid "Thumb encoding does not support an immediate here"
+#: config/tc-arm.c:9653
+msgid ":upper16: not allowed this instruction"
msgstr ""
-#: config/tc-arm.c:7200
-msgid "Thumb does not support NOP with hints"
+#: config/tc-arm.c:9747 config/tc-arm.c:9779 config/tc-arm.c:9785
+msgid "selected processor does not support requested special purpose register"
msgstr ""
-#: config/tc-arm.c:7282
-msgid "push/pop do not support {reglist}^"
+#: config/tc-arm.c:9753
+#, c-format
+msgid ""
+"selected processor does not support requested special purpose register %x"
msgstr ""
-#: config/tc-arm.c:7301
-msgid "SP not allowed in register list"
+#: config/tc-arm.c:9774
+msgid "Thumb encoding does not support an immediate here"
msgstr ""
-#: config/tc-arm.c:7305
-msgid "PC not allowed in register list"
+#: config/tc-arm.c:9859
+msgid "Thumb does not support NOP with hints"
+msgstr ""
+
+#: config/tc-arm.c:9941
+msgid "push/pop do not support {reglist}^"
msgstr ""
-#: config/tc-arm.c:7328
+#: config/tc-arm.c:9964
msgid "invalid register list to push/pop instruction"
msgstr ""
-#: config/tc-arm.c:7513
+#: config/tc-arm.c:10156
+msgid "source1 and dest must be same register"
+msgstr ""
+
+#: config/tc-arm.c:10177
msgid "ror #imm not supported"
msgstr ""
-#: config/tc-arm.c:7638
+#: config/tc-arm.c:10302
msgid "Thumb encoding does not support rotation"
msgstr ""
-#: config/tc-arm.c:7656
+#: config/tc-arm.c:10321
+msgid "instruction requires register index"
+msgstr ""
+
+#: config/tc-arm.c:10323
msgid "PC is not a valid index register"
msgstr ""
-#: config/tc-arm.c:7658
+#: config/tc-arm.c:10325
msgid "instruction does not allow shifted index"
msgstr ""
-#: config/tc-arm.c:7660
-msgid "instruction requires shifted index"
+#: config/tc-arm.c:10744
+msgid "invalid instruction shape"
+msgstr ""
+
+#: config/tc-arm.c:10986
+msgid "types specified in both the mnemonic and operands"
+msgstr ""
+
+#: config/tc-arm.c:11023
+msgid "operand types can't be inferred"
+msgstr ""
+
+#: config/tc-arm.c:11029
+msgid "type specifier has the wrong number of parts"
+msgstr ""
+
+#: config/tc-arm.c:11084
+msgid "operand size must match register width"
+msgstr ""
+
+#: config/tc-arm.c:11095
+msgid "bad type in Neon instruction"
+msgstr ""
+
+#: config/tc-arm.c:11106
+msgid "inconsistent types in Neon instruction"
+msgstr ""
+
+#: config/tc-arm.c:12155
+msgid "scalar out of range for multiply instruction"
+msgstr ""
+
+#: config/tc-arm.c:12319 config/tc-arm.c:12331
+msgid "immediate out of range for insert"
+msgstr ""
+
+#: config/tc-arm.c:12343 config/tc-arm.c:13245
+msgid "immediate out of range for shift"
+msgstr ""
+
+#: config/tc-arm.c:12400 config/tc-arm.c:12427 config/tc-arm.c:12745
+#: config/tc-arm.c:13191
+msgid "immediate out of range"
+msgstr ""
+
+#: config/tc-arm.c:12464
+msgid "immediate out of range for narrowing operation"
+msgstr ""
+
+#: config/tc-arm.c:12584
+msgid "operands 0 and 1 must be the same register"
+msgstr ""
+
+#: config/tc-arm.c:12719
+msgid "operand size must be specified for immediate VMOV"
+msgstr ""
+
+#: config/tc-arm.c:12729
+msgid "immediate has bits set outside the operand size"
+msgstr ""
+
+#: config/tc-arm.c:12925
+msgid "elements must be smaller than reversal region"
msgstr ""
-#: config/tc-arm.c:7943 config/tc-arm.c:8015
+#: config/tc-arm.c:13096 config/tc-arm.c:13144
+msgid "bad type for scalar"
+msgstr ""
+
+#: config/tc-arm.c:13208 config/tc-arm.c:13216
+msgid "VFP registers must be adjacent"
+msgstr ""
+
+#: config/tc-arm.c:13357
+msgid "bad list length for table lookup"
+msgstr ""
+
+#: config/tc-arm.c:13387
+msgid "writeback (!) must be used for VLDMDB and VSTMDB"
+msgstr ""
+
+#: config/tc-arm.c:13390
+msgid "register list must contain at least 1 and at most 16 registers"
+msgstr ""
+
+#: config/tc-arm.c:13467
+msgid "bad alignment"
+msgstr ""
+
+#: config/tc-arm.c:13484
+msgid "bad list type for instruction"
+msgstr ""
+
+#: config/tc-arm.c:13526
+msgid "unsupported alignment for instruction"
+msgstr ""
+
+#: config/tc-arm.c:13545 config/tc-arm.c:13639 config/tc-arm.c:13650
+#: config/tc-arm.c:13660 config/tc-arm.c:13674
+msgid "bad list length"
+msgstr ""
+
+#: config/tc-arm.c:13550
+msgid "stride of 2 unavailable when element size is 8"
+msgstr ""
+
+#: config/tc-arm.c:13583 config/tc-arm.c:13658
+msgid "can't use alignment with this instruction"
+msgstr ""
+
+#: config/tc-arm.c:13722
+msgid "post-index must be a register"
+msgstr ""
+
+#: config/tc-arm.c:13724
+msgid "bad register for post-index"
+msgstr ""
+
+#: config/tc-arm.c:14011 config/tc-arm.c:14097
msgid "conditional infixes are deprecated in unified syntax"
msgstr ""
-#: config/tc-arm.c:8047
+#: config/tc-arm.c:14130
#, c-format
msgid "bad instruction `%s'"
msgstr ""
-#: config/tc-arm.c:8063 config/tc-arm.c:8126
+#: config/tc-arm.c:14136
+msgid "s suffix on comparison instruction is deprecated"
+msgstr ""
+
+#: config/tc-arm.c:14155 config/tc-arm.c:14236
#, c-format
msgid "selected processor does not support `%s'"
msgstr ""
-#: config/tc-arm.c:8069
+#: config/tc-arm.c:14161
msgid "Thumb does not support conditional execution"
msgstr ""
-#: config/tc-arm.c:8080
+#: config/tc-arm.c:14184
msgid "incorrect condition in IT block"
msgstr ""
-#: config/tc-arm.c:8088
+#: config/tc-arm.c:14190
msgid "thumb conditional instrunction not in IT block"
msgstr ""
-#: config/tc-arm.c:8108
+#: config/tc-arm.c:14210
#, c-format
msgid "cannot honor width suffix -- `%s'"
msgstr ""
-#: config/tc-arm.c:8131
+#: config/tc-arm.c:14241
#, c-format
msgid "width suffixes are invalid in ARM mode -- `%s'"
msgstr ""
-#: config/tc-arm.c:10340
+#: config/tc-arm.c:14265
+#, c-format
+msgid "attempt to use an ARM instruction on a Thumb-only processor -- `%s'"
+msgstr ""
+
+#: config/tc-arm.c:16992
msgid "alignments greater than 32 bytes not supported in .text sections."
msgstr ""
-#: config/tc-arm.c:10634
+#: config/tc-arm.c:17286
msgid "handerdata in cantunwind frame"
msgstr ""
-#: config/tc-arm.c:10651
+#: config/tc-arm.c:17303
msgid "too many unwind opcodes for personality routine 0"
msgstr ""
-#: config/tc-arm.c:10683
+#: config/tc-arm.c:17335
msgid "too many unwind opcodes"
msgstr ""
-#: config/tc-arm.c:11085 config/tc-arm.c:11365
+#: config/tc-arm.c:17869 config/tc-arm.c:18153
#, c-format
msgid "undefined symbol %s used as an immediate value"
msgstr ""
-#: config/tc-arm.c:11099 config/tc-arm.c:11394
+#: config/tc-arm.c:17883 config/tc-arm.c:18192
#, c-format
msgid "invalid constant (%lx) after fixup"
msgstr ""
-#: config/tc-arm.c:11136
+#: config/tc-arm.c:17920
#, c-format
msgid "unable to compute ADRL instructions for PC offset of 0x%lx"
msgstr ""
-#: config/tc-arm.c:11168 config/tc-arm.c:11193
+#: config/tc-arm.c:17955 config/tc-arm.c:17980
msgid "invalid literal constant: pool needs to be closer"
msgstr ""
-#: config/tc-arm.c:11171 config/tc-arm.c:11209
+#: config/tc-arm.c:17958 config/tc-arm.c:17996
#, c-format
msgid "bad immediate value for offset (%ld)"
msgstr ""
-#: config/tc-arm.c:11195
+#: config/tc-arm.c:17982
#, c-format
-msgid "bad immediate value for half-word offset (%ld)"
+msgid "bad immediate value for 8-bit offset (%ld)"
msgstr ""
-#: config/tc-arm.c:11250
+#: config/tc-arm.c:18037
msgid "offset not a multiple of 4"
msgstr ""
-#: config/tc-arm.c:11257 config/tc-arm.c:11272 config/tc-arm.c:11287
-#: config/tc-arm.c:11298 config/tc-arm.c:11321 config/tc-pj.c:499
-#: config/tc-sh.c:4084
+#: config/tc-arm.c:18044 config/tc-arm.c:18059 config/tc-arm.c:18074
+#: config/tc-arm.c:18085 config/tc-arm.c:18108 config/tc-pj.c:499
+#: config/tc-sh.c:4214
msgid "offset out of range"
msgstr ""
-#: config/tc-arm.c:11410
+#: config/tc-arm.c:18208
msgid "invalid smc expression"
msgstr ""
-#: config/tc-arm.c:11421 config/tc-arm.c:11430
+#: config/tc-arm.c:18219 config/tc-arm.c:18228
msgid "invalid swi expression"
msgstr ""
-#: config/tc-arm.c:11440
+#: config/tc-arm.c:18238
msgid "invalid expression in load/store multiple"
msgstr ""
-#: config/tc-arm.c:11455
+#: config/tc-arm.c:18268
msgid "misaligned branch destination"
msgstr ""
-#: config/tc-arm.c:11459 config/tc-arm.c:11479 config/tc-arm.c:11497
-#: config/tc-arm.c:11510 config/tc-arm.c:11523 config/tc-arm.c:11562
-#: config/tc-arm.c:11587
+#: config/tc-arm.c:18272 config/tc-arm.c:18309 config/tc-arm.c:18323
+#: config/tc-arm.c:18336 config/tc-arm.c:18375 config/tc-arm.c:18400
msgid "branch out of range"
msgstr ""
-#: config/tc-arm.c:11475
-msgid "misaligned BLX destination"
-msgstr ""
-
-#: config/tc-arm.c:11536
+#: config/tc-arm.c:18349
msgid "conditional branch out of range"
msgstr ""
-#: config/tc-arm.c:11657
+#: config/tc-arm.c:18477
msgid "rel31 relocation overflow"
msgstr ""
-#: config/tc-arm.c:11669 config/tc-arm.c:11694
+#: config/tc-arm.c:18489 config/tc-arm.c:18512
msgid "co-processor offset out of range"
msgstr ""
-#: config/tc-arm.c:11710
+#: config/tc-arm.c:18529
#, c-format
msgid "invalid offset, target not word aligned (0x%08lX)"
msgstr ""
-#: config/tc-arm.c:11716 config/tc-arm.c:11725 config/tc-arm.c:11733
-#: config/tc-arm.c:11741 config/tc-arm.c:11749
+#: config/tc-arm.c:18536 config/tc-arm.c:18545 config/tc-arm.c:18553
+#: config/tc-arm.c:18561 config/tc-arm.c:18569
#, c-format
msgid "invalid offset, value too big (0x%08lX)"
msgstr ""
-#: config/tc-arm.c:11790
+#: config/tc-arm.c:18610
msgid "invalid Hi register with immediate"
msgstr ""
-#: config/tc-arm.c:11806
+#: config/tc-arm.c:18626
msgid "invalid immediate for stack address calculation"
msgstr ""
-#: config/tc-arm.c:11814
+#: config/tc-arm.c:18634
#, c-format
msgid "invalid immediate for address calculation (value = 0x%08lX)"
msgstr ""
-#: config/tc-arm.c:11844
+#: config/tc-arm.c:18664
#, c-format
msgid "invalid immediate: %ld is too large"
msgstr ""
-#: config/tc-arm.c:11856
+#: config/tc-arm.c:18676
#, c-format
msgid "invalid shift value: %ld"
msgstr ""
-#: config/tc-arm.c:11875
+#: config/tc-arm.c:18703
+msgid "offset too big"
+msgstr ""
+
+#: config/tc-arm.c:18755
+#, c-format
+msgid "the offset 0x%08lX is not representable"
+msgstr ""
+
+#: config/tc-arm.c:18795
+#, c-format
+msgid "bad offset 0x%08lX (only 12 bits available for the magnitude)"
+msgstr ""
+
+#: config/tc-arm.c:18834
+#, c-format
+msgid "bad offset 0x%08lX (only 8 bits available for the magnitude)"
+msgstr ""
+
+#: config/tc-arm.c:18874
+#, c-format
+msgid "bad offset 0x%08lX (must be word-aligned)"
+msgstr ""
+
+#: config/tc-arm.c:18879
+#, c-format
+msgid "bad offset 0x%08lX (must be an 8-bit number of words)"
+msgstr ""
+
+#: config/tc-arm.c:18905 config/tc-score.c:5480
#, c-format
msgid "bad relocation fixup type (%d)"
msgstr ""
-#: config/tc-arm.c:11943
+#: config/tc-arm.c:19008
msgid "literal referenced across section boundary"
msgstr ""
-#: config/tc-arm.c:11973
+#: config/tc-arm.c:19068
msgid "internal relocation (type: IMMEDIATE) not fixed up"
msgstr ""
-#: config/tc-arm.c:11978
+#: config/tc-arm.c:19073
msgid "ADRL used for a symbol not defined in the same file"
msgstr ""
-#: config/tc-arm.c:11987
+#: config/tc-arm.c:19088
#, c-format
msgid "undefined local label `%s'"
msgstr ""
-#: config/tc-arm.c:11993
+#: config/tc-arm.c:19094
msgid "internal_relocation (type: OFFSET_IMM) not fixed up"
msgstr ""
-#: config/tc-arm.c:12014 config/tc-cris.c:3869 config/tc-mcore.c:1995
-#: config/tc-mmix.c:2888 config/tc-ns32k.c:2284
+#: config/tc-arm.c:19115 config/tc-cris.c:3925 config/tc-mcore.c:1992
+#: config/tc-mmix.c:2887 config/tc-ns32k.c:2282 config/tc-score.c:5571
msgid "<unknown>"
msgstr ""
-#: config/tc-arm.c:12017 config/tc-arm.c:12038
+#: config/tc-arm.c:19118 config/tc-arm.c:19139 config/tc-score.c:5573
#, c-format
msgid "cannot represent %s relocation in this object file format"
msgstr ""
-#: config/tc-arm.c:12254
+#: config/tc-arm.c:19373
#, c-format
msgid "%s: unexpected function type: %d"
msgstr ""
-#: config/tc-arm.c:12331
+#: config/tc-arm.c:19463 config/tc-score.c:6592 config/tc-score.c:6608
+#: config/tc-score.c:6613
msgid "virtual memory exhausted"
msgstr ""
-#: config/tc-arm.c:12357
+#: config/tc-arm.c:19496
msgid "use of old and new-style options to set CPU type"
msgstr ""
-#: config/tc-arm.c:12367
+#: config/tc-arm.c:19506
msgid "use of old and new-style options to set FPU type"
msgstr ""
-#: config/tc-arm.c:12441
+#: config/tc-arm.c:19581
msgid "hard-float conflicts with specified fpu"
msgstr ""
-#: config/tc-arm.c:12633
+#: config/tc-arm.c:19764
msgid "generate PIC code"
msgstr ""
-#: config/tc-arm.c:12634
+#: config/tc-arm.c:19765
msgid "assemble Thumb code"
msgstr ""
-#: config/tc-arm.c:12635
+#: config/tc-arm.c:19766
msgid "support ARM/Thumb interworking"
msgstr ""
-#: config/tc-arm.c:12637
+#: config/tc-arm.c:19768
msgid "code uses 32-bit program counter"
msgstr ""
-#: config/tc-arm.c:12638
+#: config/tc-arm.c:19769
msgid "code uses 26-bit program counter"
msgstr ""
-#: config/tc-arm.c:12639
+#: config/tc-arm.c:19770
msgid "floating point args are in fp regs"
msgstr ""
-#: config/tc-arm.c:12641
+#: config/tc-arm.c:19772
msgid "re-entrant code"
msgstr ""
-#: config/tc-arm.c:12642
+#: config/tc-arm.c:19773
msgid "code is ATPCS conformant"
msgstr ""
-#: config/tc-arm.c:12643
+#: config/tc-arm.c:19774
msgid "assemble for big-endian"
msgstr ""
-#: config/tc-arm.c:12644
+#: config/tc-arm.c:19775
msgid "assemble for little-endian"
msgstr ""
#. These are recognized by the assembler, but have no affect on code.
-#: config/tc-arm.c:12648
+#: config/tc-arm.c:19779
msgid "use frame pointer"
msgstr ""
-#: config/tc-arm.c:12649
+#: config/tc-arm.c:19780
msgid "use stack size checking"
msgstr ""
#. DON'T add any new processors to this list -- we want the whole list
#. to go away... Add them to the processors table instead.
-#: config/tc-arm.c:12653 config/tc-arm.c:12654
+#: config/tc-arm.c:19796 config/tc-arm.c:19797
msgid "use -mcpu=arm1"
msgstr ""
-#: config/tc-arm.c:12655 config/tc-arm.c:12656
+#: config/tc-arm.c:19798 config/tc-arm.c:19799
msgid "use -mcpu=arm2"
msgstr ""
-#: config/tc-arm.c:12657 config/tc-arm.c:12658
+#: config/tc-arm.c:19800 config/tc-arm.c:19801
msgid "use -mcpu=arm250"
msgstr ""
-#: config/tc-arm.c:12659 config/tc-arm.c:12660
+#: config/tc-arm.c:19802 config/tc-arm.c:19803
msgid "use -mcpu=arm3"
msgstr ""
-#: config/tc-arm.c:12661 config/tc-arm.c:12662
+#: config/tc-arm.c:19804 config/tc-arm.c:19805
msgid "use -mcpu=arm6"
msgstr ""
-#: config/tc-arm.c:12663 config/tc-arm.c:12664
+#: config/tc-arm.c:19806 config/tc-arm.c:19807
msgid "use -mcpu=arm600"
msgstr ""
-#: config/tc-arm.c:12665 config/tc-arm.c:12666
+#: config/tc-arm.c:19808 config/tc-arm.c:19809
msgid "use -mcpu=arm610"
msgstr ""
-#: config/tc-arm.c:12667 config/tc-arm.c:12668
+#: config/tc-arm.c:19810 config/tc-arm.c:19811
msgid "use -mcpu=arm620"
msgstr ""
-#: config/tc-arm.c:12669 config/tc-arm.c:12670
+#: config/tc-arm.c:19812 config/tc-arm.c:19813
msgid "use -mcpu=arm7"
msgstr ""
-#: config/tc-arm.c:12671 config/tc-arm.c:12672
+#: config/tc-arm.c:19814 config/tc-arm.c:19815
msgid "use -mcpu=arm70"
msgstr ""
-#: config/tc-arm.c:12673 config/tc-arm.c:12674
+#: config/tc-arm.c:19816 config/tc-arm.c:19817
msgid "use -mcpu=arm700"
msgstr ""
-#: config/tc-arm.c:12675 config/tc-arm.c:12676
+#: config/tc-arm.c:19818 config/tc-arm.c:19819
msgid "use -mcpu=arm700i"
msgstr ""
-#: config/tc-arm.c:12677 config/tc-arm.c:12678
+#: config/tc-arm.c:19820 config/tc-arm.c:19821
msgid "use -mcpu=arm710"
msgstr ""
-#: config/tc-arm.c:12679 config/tc-arm.c:12680
+#: config/tc-arm.c:19822 config/tc-arm.c:19823
msgid "use -mcpu=arm710c"
msgstr ""
-#: config/tc-arm.c:12681 config/tc-arm.c:12682
+#: config/tc-arm.c:19824 config/tc-arm.c:19825
msgid "use -mcpu=arm720"
msgstr ""
-#: config/tc-arm.c:12683 config/tc-arm.c:12684
+#: config/tc-arm.c:19826 config/tc-arm.c:19827
msgid "use -mcpu=arm7d"
msgstr ""
-#: config/tc-arm.c:12685 config/tc-arm.c:12686
+#: config/tc-arm.c:19828 config/tc-arm.c:19829
msgid "use -mcpu=arm7di"
msgstr ""
-#: config/tc-arm.c:12687 config/tc-arm.c:12688
+#: config/tc-arm.c:19830 config/tc-arm.c:19831
msgid "use -mcpu=arm7m"
msgstr ""
-#: config/tc-arm.c:12689 config/tc-arm.c:12690
+#: config/tc-arm.c:19832 config/tc-arm.c:19833
msgid "use -mcpu=arm7dm"
msgstr ""
-#: config/tc-arm.c:12691 config/tc-arm.c:12692
+#: config/tc-arm.c:19834 config/tc-arm.c:19835
msgid "use -mcpu=arm7dmi"
msgstr ""
-#: config/tc-arm.c:12693 config/tc-arm.c:12694
+#: config/tc-arm.c:19836 config/tc-arm.c:19837
msgid "use -mcpu=arm7100"
msgstr ""
-#: config/tc-arm.c:12695 config/tc-arm.c:12696
+#: config/tc-arm.c:19838 config/tc-arm.c:19839
msgid "use -mcpu=arm7500"
msgstr ""
-#: config/tc-arm.c:12697 config/tc-arm.c:12698
+#: config/tc-arm.c:19840 config/tc-arm.c:19841
msgid "use -mcpu=arm7500fe"
msgstr ""
-#: config/tc-arm.c:12699 config/tc-arm.c:12700 config/tc-arm.c:12701
-#: config/tc-arm.c:12702
+#: config/tc-arm.c:19842 config/tc-arm.c:19843 config/tc-arm.c:19844
+#: config/tc-arm.c:19845
msgid "use -mcpu=arm7tdmi"
msgstr ""
-#: config/tc-arm.c:12703 config/tc-arm.c:12704
+#: config/tc-arm.c:19846 config/tc-arm.c:19847
msgid "use -mcpu=arm710t"
msgstr ""
-#: config/tc-arm.c:12705 config/tc-arm.c:12706
+#: config/tc-arm.c:19848 config/tc-arm.c:19849
msgid "use -mcpu=arm720t"
msgstr ""
-#: config/tc-arm.c:12707 config/tc-arm.c:12708
+#: config/tc-arm.c:19850 config/tc-arm.c:19851
msgid "use -mcpu=arm740t"
msgstr ""
-#: config/tc-arm.c:12709 config/tc-arm.c:12710
+#: config/tc-arm.c:19852 config/tc-arm.c:19853
msgid "use -mcpu=arm8"
msgstr ""
-#: config/tc-arm.c:12711 config/tc-arm.c:12712
+#: config/tc-arm.c:19854 config/tc-arm.c:19855
msgid "use -mcpu=arm810"
msgstr ""
-#: config/tc-arm.c:12713 config/tc-arm.c:12714
+#: config/tc-arm.c:19856 config/tc-arm.c:19857
msgid "use -mcpu=arm9"
msgstr ""
-#: config/tc-arm.c:12715 config/tc-arm.c:12716
+#: config/tc-arm.c:19858 config/tc-arm.c:19859
msgid "use -mcpu=arm9tdmi"
msgstr ""
-#: config/tc-arm.c:12717 config/tc-arm.c:12718
+#: config/tc-arm.c:19860 config/tc-arm.c:19861
msgid "use -mcpu=arm920"
msgstr ""
-#: config/tc-arm.c:12719 config/tc-arm.c:12720
+#: config/tc-arm.c:19862 config/tc-arm.c:19863
msgid "use -mcpu=arm940"
msgstr ""
-#: config/tc-arm.c:12721
+#: config/tc-arm.c:19864
msgid "use -mcpu=strongarm"
msgstr ""
-#: config/tc-arm.c:12723
+#: config/tc-arm.c:19866
msgid "use -mcpu=strongarm110"
msgstr ""
-#: config/tc-arm.c:12725
+#: config/tc-arm.c:19868
msgid "use -mcpu=strongarm1100"
msgstr ""
-#: config/tc-arm.c:12727
+#: config/tc-arm.c:19870
msgid "use -mcpu=strongarm1110"
msgstr ""
-#: config/tc-arm.c:12728
+#: config/tc-arm.c:19871
msgid "use -mcpu=xscale"
msgstr ""
-#: config/tc-arm.c:12729
+#: config/tc-arm.c:19872
msgid "use -mcpu=iwmmxt"
msgstr ""
-#: config/tc-arm.c:12730
+#: config/tc-arm.c:19873
msgid "use -mcpu=all"
msgstr ""
#. Architecture variants -- don't add any more to this list either.
-#: config/tc-arm.c:12733 config/tc-arm.c:12734
+#: config/tc-arm.c:19876 config/tc-arm.c:19877
msgid "use -march=armv2"
msgstr ""
-#: config/tc-arm.c:12735 config/tc-arm.c:12736
+#: config/tc-arm.c:19878 config/tc-arm.c:19879
msgid "use -march=armv2a"
msgstr ""
-#: config/tc-arm.c:12737 config/tc-arm.c:12738
+#: config/tc-arm.c:19880 config/tc-arm.c:19881
msgid "use -march=armv3"
msgstr ""
-#: config/tc-arm.c:12739 config/tc-arm.c:12740
+#: config/tc-arm.c:19882 config/tc-arm.c:19883
msgid "use -march=armv3m"
msgstr ""
-#: config/tc-arm.c:12741 config/tc-arm.c:12742
+#: config/tc-arm.c:19884 config/tc-arm.c:19885
msgid "use -march=armv4"
msgstr ""
-#: config/tc-arm.c:12743 config/tc-arm.c:12744
+#: config/tc-arm.c:19886 config/tc-arm.c:19887
msgid "use -march=armv4t"
msgstr ""
-#: config/tc-arm.c:12745 config/tc-arm.c:12746
+#: config/tc-arm.c:19888 config/tc-arm.c:19889
msgid "use -march=armv5"
msgstr ""
-#: config/tc-arm.c:12747 config/tc-arm.c:12748
+#: config/tc-arm.c:19890 config/tc-arm.c:19891
msgid "use -march=armv5t"
msgstr ""
-#: config/tc-arm.c:12749 config/tc-arm.c:12750
+#: config/tc-arm.c:19892 config/tc-arm.c:19893
msgid "use -march=armv5te"
msgstr ""
#. Floating point variants -- don't add any more to this list either.
-#: config/tc-arm.c:12753
+#: config/tc-arm.c:19896
msgid "use -mfpu=fpe"
msgstr ""
-#: config/tc-arm.c:12754
+#: config/tc-arm.c:19897
msgid "use -mfpu=fpa10"
msgstr ""
-#: config/tc-arm.c:12755
+#: config/tc-arm.c:19898
msgid "use -mfpu=fpa11"
msgstr ""
-#: config/tc-arm.c:12757
+#: config/tc-arm.c:19900
msgid "use either -mfpu=softfpa or -mfpu=softvfp"
msgstr ""
-#: config/tc-arm.c:12986
+#: config/tc-arm.c:20161
msgid "invalid architectural extension"
msgstr ""
-#: config/tc-arm.c:13000
+#: config/tc-arm.c:20175
msgid "missing architectural extension"
msgstr ""
-#: config/tc-arm.c:13013
+#: config/tc-arm.c:20188
#, c-format
msgid "unknown architectural extnsion `%s'"
msgstr ""
-#: config/tc-arm.c:13037
+#: config/tc-arm.c:20212
#, c-format
msgid "missing cpu name `%s'"
msgstr ""
-#: config/tc-arm.c:13062 config/tc-arm.c:13389
+#: config/tc-arm.c:20237 config/tc-arm.c:20622
#, c-format
msgid "unknown cpu `%s'"
msgstr ""
-#: config/tc-arm.c:13080
+#: config/tc-arm.c:20255
#, c-format
msgid "missing architecture name `%s'"
msgstr ""
-#: config/tc-arm.c:13097 config/tc-arm.c:13423
+#: config/tc-arm.c:20272 config/tc-arm.c:20656 config/tc-arm.c:20687
#, c-format
msgid "unknown architecture `%s'\n"
msgstr ""
-#: config/tc-arm.c:13113 config/tc-arm.c:13454
+#: config/tc-arm.c:20288 config/tc-arm.c:20718
#, c-format
msgid "unknown floating point format `%s'\n"
msgstr ""
-#: config/tc-arm.c:13129
+#: config/tc-arm.c:20304
#, c-format
msgid "unknown floating point abi `%s'\n"
msgstr ""
-#: config/tc-arm.c:13145
+#: config/tc-arm.c:20320
#, c-format
msgid "unknown EABI `%s'\n"
msgstr ""
-#: config/tc-arm.c:13152
+#: config/tc-arm.c:20327
msgid "<cpu name>\t assemble for CPU <cpu name>"
msgstr ""
-#: config/tc-arm.c:13154
+#: config/tc-arm.c:20329
msgid "<arch name>\t assemble for architecture <arch name>"
msgstr ""
-#: config/tc-arm.c:13156
+#: config/tc-arm.c:20331
msgid "<fpu name>\t assemble for FPU architecture <fpu name>"
msgstr ""
-#: config/tc-arm.c:13158
+#: config/tc-arm.c:20333
msgid "<abi>\t assemble for floating point ABI <abi>"
msgstr ""
-#: config/tc-arm.c:13161
+#: config/tc-arm.c:20336
msgid "<ver>\t assemble for eabi version <ver>"
msgstr ""
-#: config/tc-arm.c:13202 config/tc-arm.c:13224
+#: config/tc-arm.c:20378 config/tc-arm.c:20398 config/tc-arm.c:20420
#, c-format
msgid "option `-%c%s' is deprecated: %s"
msgstr ""
-#: config/tc-arm.c:13245
+#: config/tc-arm.c:20441
#, c-format
msgid " ARM-specific assembler options:\n"
msgstr ""
-#: config/tc-arm.c:13256
+#: config/tc-arm.c:20452
#, c-format
msgid " -EB assemble code for a big-endian cpu\n"
msgstr ""
-#: config/tc-arm.c:13261
+#: config/tc-arm.c:20457
#, c-format
msgid " -EL assemble code for a little-endian cpu\n"
msgstr ""
-#: config/tc-avr.c:209
+#: config/tc-avr.c:258
#, c-format
msgid "Known MCU names:"
msgstr ""
-#: config/tc-avr.c:275
+#: config/tc-avr.c:324
#, c-format
msgid ""
"AVR options:\n"
@@ -2691,7 +3035,7 @@ msgid ""
" or immediate microcontroller name.\n"
msgstr ""
-#: config/tc-avr.c:285
+#: config/tc-avr.c:334
#, c-format
msgid ""
" -mall-opcodes accept all AVR opcodes, even if not supported by MCU\n"
@@ -2701,562 +3045,719 @@ msgid ""
" (default for avr3, avr5)\n"
msgstr ""
-#: config/tc-avr.c:329 config/tc-msp430.c:749
+#: config/tc-avr.c:378 config/tc-msp430.c:747
#, c-format
msgid "unknown MCU: %s\n"
msgstr ""
-#: config/tc-avr.c:338
+#: config/tc-avr.c:387
#, c-format
msgid "redefinition of mcu type `%s' to `%s'"
msgstr ""
-#: config/tc-avr.c:385 config/tc-crx.c:491 config/tc-d10v.c:278
-#: config/tc-d30v.c:312 config/tc-mips.c:10241 config/tc-mmix.c:2264
-#: config/tc-mn10200.c:342 config/tc-msp430.c:873 config/tc-pj.c:342
-#: config/tc-ppc.c:5211 config/tc-sh.c:2986 config/tc-v850.c:1199
+#: config/tc-avr.c:434 config/tc-cr16.c:670 config/tc-crx.c:491
+#: config/tc-d10v.c:277 config/tc-d30v.c:311 config/tc-mips.c:10769
+#: config/tc-mmix.c:2263 config/tc-mn10200.c:341 config/tc-msp430.c:871
+#: config/tc-pj.c:342 config/tc-ppc.c:5206 config/tc-sh.c:3076
+#: config/tc-v850.c:1198
msgid "bad call to md_atof"
msgstr ""
-#: config/tc-avr.c:447
+#: config/tc-avr.c:501
msgid "constant value required"
msgstr ""
-#: config/tc-avr.c:450
+#: config/tc-avr.c:504
#, c-format
msgid "number must be less than %d"
msgstr ""
-#: config/tc-avr.c:476 config/tc-avr.c:583
+#: config/tc-avr.c:530 config/tc-avr.c:665
#, c-format
msgid "constant out of 8-bit range: %d"
msgstr ""
-#: config/tc-avr.c:488 config/tc-d10v.c:498 config/tc-d30v.c:490
-#: config/tc-h8300.c:451 config/tc-mcore.c:665 config/tc-mmix.c:489
-#: config/tc-mn10200.c:1078 config/tc-mn10300.c:1820 config/tc-msp430.c:457
-#: config/tc-or32.c:306 config/tc-ppc.c:2382 config/tc-s390.c:1220
-#: config/tc-sh64.c:2213 config/tc-sh.c:1272 config/tc-v850.c:1952
-#: config/tc-z8k.c:328
+#: config/tc-avr.c:542 config/tc-d10v.c:497 config/tc-d30v.c:489
+#: config/tc-h8300.c:449 config/tc-mcore.c:662 config/tc-mmix.c:488
+#: config/tc-mn10200.c:1077 config/tc-mn10300.c:1819 config/tc-msp430.c:455
+#: config/tc-or32.c:307 config/tc-ppc.c:2436 config/tc-s390.c:1221
+#: config/tc-sh64.c:2213 config/tc-sh.c:1359 config/tc-v850.c:1967
+#: config/tc-z80.c:575 config/tc-z8k.c:350
msgid "missing operand"
msgstr ""
-#: config/tc-avr.c:536 read.c:3345
+#: config/tc-avr.c:598 config/tc-score.c:974 read.c:3560
msgid "illegal expression"
msgstr ""
-#: config/tc-avr.c:562 config/tc-avr.c:1282
+#: config/tc-avr.c:627 config/tc-avr.c:1386
msgid "`)' required"
msgstr ""
-#: config/tc-avr.c:638
+#: config/tc-avr.c:648
+msgid "expression dangerous with linker stubs"
+msgstr ""
+
+#: config/tc-avr.c:720
msgid "register r16-r23 required"
msgstr ""
-#: config/tc-avr.c:644
+#: config/tc-avr.c:726
msgid "register number above 15 required"
msgstr ""
-#: config/tc-avr.c:650
+#: config/tc-avr.c:732
msgid "even register number required"
msgstr ""
-#: config/tc-avr.c:656
+#: config/tc-avr.c:738
msgid "register r24, r26, r28 or r30 required"
msgstr ""
-#: config/tc-avr.c:662
+#: config/tc-avr.c:744
msgid "register name or number from 0 to 31 required"
msgstr ""
-#: config/tc-avr.c:680
+#: config/tc-avr.c:762
msgid "pointer register (X, Y or Z) required"
msgstr ""
-#: config/tc-avr.c:687
+#: config/tc-avr.c:769
msgid "cannot both predecrement and postincrement"
msgstr ""
-#: config/tc-avr.c:695
+#: config/tc-avr.c:777
msgid "addressing mode not supported"
msgstr ""
-#: config/tc-avr.c:701
+#: config/tc-avr.c:783
msgid "can't predecrement"
msgstr ""
-#: config/tc-avr.c:704
+#: config/tc-avr.c:786
msgid "pointer register Z required"
msgstr ""
-#: config/tc-avr.c:722
+#: config/tc-avr.c:804
msgid "pointer register (Y or Z) required"
msgstr ""
-#: config/tc-avr.c:826
+#: config/tc-avr.c:908
#, c-format
msgid "unknown constraint `%c'"
msgstr ""
-#: config/tc-avr.c:878
+#: config/tc-avr.c:960
msgid "`,' required"
msgstr ""
-#: config/tc-avr.c:896
+#: config/tc-avr.c:978
msgid "undefined combination of operands"
msgstr ""
-#: config/tc-avr.c:905
+#: config/tc-avr.c:987
msgid "skipping two-word instruction"
msgstr ""
-#: config/tc-avr.c:997 config/tc-avr.c:1013 config/tc-avr.c:1135
-#: config/tc-msp430.c:2012 config/tc-msp430.c:2030
+#: config/tc-avr.c:1079 config/tc-avr.c:1095 config/tc-avr.c:1209
+#: config/tc-msp430.c:2009 config/tc-msp430.c:2027
#, c-format
msgid "odd address operand: %ld"
msgstr ""
-#: config/tc-avr.c:1005 config/tc-avr.c:1024 config/tc-avr.c:1046
-#: config/tc-avr.c:1053 config/tc-avr.c:1060 config/tc-d10v.c:538
-#: config/tc-d30v.c:589 config/tc-msp430.c:2020 config/tc-msp430.c:2035
-#: config/tc-msp430.c:2045
+#: config/tc-avr.c:1087 config/tc-avr.c:1106 config/tc-avr.c:1128
+#: config/tc-avr.c:1135 config/tc-avr.c:1142 config/tc-d10v.c:537
+#: config/tc-d30v.c:588 config/tc-msp430.c:2017 config/tc-msp430.c:2032
+#: config/tc-msp430.c:2042
#, c-format
msgid "operand out of range: %ld"
msgstr ""
-#: config/tc-avr.c:1144 config/tc-d10v.c:1622 config/tc-d30v.c:2060
-#: config/tc-msp430.c:2063
+#: config/tc-avr.c:1218 config/tc-d10v.c:1619 config/tc-d30v.c:2059
+#: config/tc-msp430.c:2060
#, c-format
msgid "line %d: unknown relocation type: 0x%x"
msgstr ""
-#: config/tc-avr.c:1158
+#: config/tc-avr.c:1232
msgid "only constant expression allowed"
msgstr ""
#. xgettext:c-format.
-#: config/tc-avr.c:1192 config/tc-bfin.c:689 config/tc-d10v.c:1494
-#: config/tc-d30v.c:1804 config/tc-mn10200.c:814 config/tc-mn10300.c:2308
-#: config/tc-msp430.c:2098 config/tc-or32.c:1019 config/tc-ppc.c:6064
-#: config/tc-v850.c:2190
+#: config/tc-avr.c:1292 config/tc-bfin.c:771 config/tc-d10v.c:1491
+#: config/tc-d30v.c:1803 config/tc-mn10200.c:813 config/tc-mn10300.c:2311
+#: config/tc-msp430.c:2095 config/tc-or32.c:1017 config/tc-ppc.c:6085
+#: config/tc-spu.c:884 config/tc-spu.c:1071 config/tc-v850.c:2219
+#: config/tc-z80.c:2017
#, c-format
msgid "reloc %d not supported by object file format"
msgstr ""
-#: config/tc-avr.c:1215 config/tc-d10v.c:1782 config/tc-d10v.c:1796
-#: config/tc-h8300.c:1868 config/tc-mcore.c:884 config/tc-msp430.c:1862
-#: config/tc-pj.c:254 config/tc-sh.c:2457 config/tc-z8k.c:1194
+#: config/tc-avr.c:1315 config/tc-h8300.c:1866 config/tc-mcore.c:881
+#: config/tc-msp430.c:1860 config/tc-pj.c:254 config/tc-sh.c:2544
+#: config/tc-z8k.c:1216
msgid "can't find opcode "
msgstr ""
-#: config/tc-avr.c:1232
+#: config/tc-avr.c:1332
#, c-format
msgid "illegal opcode %s for mcu %s"
msgstr ""
-#: config/tc-avr.c:1241
+#: config/tc-avr.c:1341
msgid "garbage at end of line"
msgstr ""
-#: config/tc-avr.c:1309 config/tc-avr.c:1316
+#: config/tc-avr.c:1413 config/tc-avr.c:1420
#, c-format
msgid "illegal %srelocation size: %d"
msgstr ""
-#: config/tc-bfin.c:263
+#: config/tc-bfin.c:338
#, c-format
msgid " BFIN specific command line options:\n"
msgstr ""
-#: config/tc-bfin.c:646 config/tc-fr30.c:358 config/tc-frv.c:1600
-#: config/tc-i960.c:1756 config/tc-ip2k.c:371 config/tc-m32c.c:912
-#: config/tc-m32r.c:2143 config/tc-openrisc.c:376 config/tc-xstormy16.c:631
+#: config/tc-bfin.c:728 config/tc-fr30.c:357 config/tc-frv.c:1599
+#: config/tc-i960.c:1754 config/tc-ip2k.c:370 config/tc-m32c.c:1236
+#: config/tc-m32r.c:2142 config/tc-mep.c:1713 config/tc-openrisc.c:375
+#: config/tc-xc16x.c:258 config/tc-xstormy16.c:631
msgid "Bad call to md_atof()"
msgstr ""
-#: config/tc-cris.c:532 config/tc-m68hc11.c:2794
+#: config/tc-cr16.c:159 read.c:4266
+msgid "using a bit field width of zero"
+msgstr ""
+
+#: config/tc-cr16.c:167 read.c:4274
+#, c-format
+msgid "field width \"%s\" too complex for a bitfield"
+msgstr ""
+
+#: config/tc-cr16.c:176 read.c:4282
+#, c-format
+msgid "field width %lu too big to fit in %d bytes: truncated to %d bits"
+msgstr ""
+
+#: config/tc-cr16.c:198 read.c:4304
+#, c-format
+msgid "field value \"%s\" too complex for a bitfield"
+msgstr ""
+
+#: config/tc-cr16.c:379
+#, c-format
+msgid "Unknown register pair - index relative mode: `%d'"
+msgstr ""
+
+#: config/tc-cr16.c:558 config/tc-crx.c:344 config/tc-mn10200.c:800
+#: write.c:959
+#, c-format
+msgid "can't resolve `%s' {%s section} - `%s' {%s section}"
+msgstr ""
+
+#: config/tc-cr16.c:574 config/tc-crx.c:360
+#, c-format
+msgid "internal error: reloc %d (`%s') not supported by object file format"
+msgstr ""
+
+#: config/tc-cr16.c:762 config/tc-cr16.c:785 config/tc-cris.c:1181
+#: config/tc-crx.c:582 config/tc-crx.c:609 config/tc-crx.c:627
+msgid "Virtual memory exhausted"
+msgstr ""
+
+#: config/tc-cr16.c:770 config/tc-crx.c:619 config/tc-crx.c:637
+#: config/tc-i386.c:1230 config/tc-i386.c:1252 config/tc-m68k.c:4387
+#, c-format
+msgid "Internal Error: Can't hash %s: %s"
+msgstr ""
+
+#: config/tc-cr16.c:796 config/tc-cris.c:1215 config/tc-crx.c:592
+#, c-format
+msgid "Can't hash `%s': %s\n"
+msgstr ""
+
+#: config/tc-cr16.c:797 config/tc-cris.c:1216 config/tc-crx.c:593
+msgid "(unknown reason)"
+msgstr ""
+
+#. Missing or bad expr becomes absolute 0.
+#: config/tc-cr16.c:847 config/tc-crx.c:665 config/tc-i386.c:4865
+#, c-format
+msgid "missing or invalid displacement expression `%s' taken as 0"
+msgstr ""
+
+#: config/tc-cr16.c:959
+#, c-format
+msgid "operand %d: illegal use expression: `%s`"
+msgstr ""
+
+#: config/tc-cr16.c:1016 config/tc-crx.c:1173
+#, c-format
+msgid "Unknown register: `%d'"
+msgstr ""
+
+#. Issue a error message when register is illegal.
+#: config/tc-cr16.c:1024 config/tc-crx.c:1181
+#, c-format
+msgid "Illegal register (`%s') in Instruction: `%s'"
+msgstr ""
+
+#: config/tc-cr16.c:1095 config/tc-cr16.c:1170 config/tc-crx.c:803
+#: config/tc-crx.c:823 config/tc-crx.c:838
+#, c-format
+msgid "Illegal register `%s' in Instruction `%s'"
+msgstr ""
+
+#: config/tc-cr16.c:1123 config/tc-cr16.c:1134
+#, c-format
+msgid "Illegal register pair `%s' in Instruction `%s'"
+msgstr ""
+
+#: config/tc-cr16.c:1159 config/tc-i960.c:835
+msgid "unmatched '['"
+msgstr ""
+
+#: config/tc-cr16.c:1165 config/tc-i960.c:842
+msgid "garbage after index spec ignored"
+msgstr ""
+
+#: config/tc-cr16.c:1313 config/tc-crx.c:982
+#, c-format
+msgid "Illegal operands (whitespace): `%s'"
+msgstr ""
+
+#: config/tc-cr16.c:1325 config/tc-cr16.c:1332 config/tc-cr16.c:1349
+#: config/tc-crx.c:994 config/tc-crx.c:1001 config/tc-crx.c:1018
+#: config/tc-crx.c:1810
+#, c-format
+msgid "Missing matching brackets : `%s'"
+msgstr ""
+
+#: config/tc-cr16.c:1381 config/tc-crx.c:1044
+#, c-format
+msgid "Unknown exception: `%s'"
+msgstr ""
+
+#: config/tc-cr16.c:1468 config/tc-crx.c:1140
+#, c-format
+msgid "Illegal `cinv' parameter: `%c'"
+msgstr ""
+
+#: config/tc-cr16.c:1490 config/tc-cr16.c:1529
+#, c-format
+msgid "Unknown register pair: `%d'"
+msgstr ""
+
+#. Issue a error message when register pair is illegal.
+#: config/tc-cr16.c:1498
+#, c-format
+msgid "Illegal register pair (`%s') in Instruction: `%s'"
+msgstr ""
+
+#. Issue a error message when register pair is illegal.
+#: config/tc-cr16.c:1537
+#, c-format
+msgid "Illegal index register pair (`%s') in Instruction: `%s'"
+msgstr ""
+
+#: config/tc-cr16.c:1576
+#, c-format
+msgid "Unknown processor register : `%d'"
+msgstr ""
+
+#. Issue a error message when register pair is illegal.
+#: config/tc-cr16.c:1584
+#, c-format
+msgid "Illegal processor register (`%s') in Instruction: `%s'"
+msgstr ""
+
+#: config/tc-cr16.c:1632
+#, c-format
+msgid "Unknown processor register (32 bit) : `%d'"
+msgstr ""
+
+#. Issue a error message when register pair is illegal.
+#: config/tc-cr16.c:1640
+#, c-format
+msgid "Illegal 32 bit - processor register (`%s') in Instruction: `%s'"
+msgstr ""
+
+#: config/tc-cr16.c:2004 config/tc-crx.c:1708 config/tc-crx.c:1725
+#, c-format
+msgid "Same src/dest register is used (`r%d'), result is undefined"
+msgstr ""
+
+#: config/tc-cr16.c:2025
+msgid "RA register is saved twice."
+msgstr ""
+
+#: config/tc-cr16.c:2029
+#, c-format
+msgid "`%s' Illegal use of registers."
+msgstr ""
+
+#: config/tc-cr16.c:2043
+#, c-format
+msgid "`%s' Illegal count-register combination."
+msgstr ""
+
+#: config/tc-cr16.c:2049
+#, c-format
+msgid "`%s' Illegal use of register."
+msgstr ""
+
+#: config/tc-cr16.c:2058 config/tc-crx.c:1717
+#, c-format
+msgid "`%s' has undefined result"
+msgstr ""
+
+#: config/tc-cr16.c:2066
+#, c-format
+msgid "Same src/dest register is used (`r%d'),result is undefined"
+msgstr ""
+
+#: config/tc-cr16.c:2237 config/tc-crx.c:1622
+msgid "Incorrect number of operands"
+msgstr ""
+
+#: config/tc-cr16.c:2239 config/tc-crx.c:1624
+#, c-format
+msgid "Illegal type of operand (arg %d)"
+msgstr ""
+
+#: config/tc-cr16.c:2245 config/tc-crx.c:1630
+#, c-format
+msgid "Operand out of range (arg %d)"
+msgstr ""
+
+#: config/tc-cr16.c:2248 config/tc-crx.c:1633
+#, c-format
+msgid "Operand has odd displacement (arg %d)"
+msgstr ""
+
+#: config/tc-cr16.c:2251 config/tc-cr16.c:2282 config/tc-crx.c:1646
+#: config/tc-crx.c:1677
+#, c-format
+msgid "Illegal operand (arg %d)"
+msgstr ""
+
+#. Give an error if a frag containing code is not aligned to a 2-byte
+#. boundary.
+#: config/tc-cr16.c:2351 config/tc-cr16.h:71 config/tc-crx.c:1999
+#: config/tc-crx.h:76
+msgid "instruction address is not a multiple of 2"
+msgstr ""
+
+#: config/tc-cr16.c:2428 config/tc-cris.c:1529 config/tc-cris.c:1537
+#: config/tc-crx.c:2035 config/tc-dlx.c:685 config/tc-hppa.c:3261
+#: config/tc-i860.c:490 config/tc-i860.c:507 config/tc-i860.c:987
+#: config/tc-sparc.c:1431 config/tc-sparc.c:1439
+#, c-format
+msgid "Unknown opcode: `%s'"
+msgstr ""
+
+#: config/tc-cris.c:547 config/tc-m68hc11.c:2796
#, c-format
msgid "internal inconsistency problem in %s: fr_symbol %lx"
msgstr ""
-#: config/tc-cris.c:536 config/tc-m68hc11.c:2798 config/tc-msp430.c:2289
+#: config/tc-cris.c:551 config/tc-m68hc11.c:2800 config/tc-msp430.c:2286
#, c-format
msgid "internal inconsistency problem in %s: resolved symbol"
msgstr ""
-#: config/tc-cris.c:546 config/tc-m68hc11.c:2804
+#: config/tc-cris.c:561 config/tc-m68hc11.c:2806
#, c-format
msgid "internal inconsistency problem in %s: fr_subtype %d"
msgstr ""
-#: config/tc-cris.c:872
+#: config/tc-cris.c:901
msgid "Relaxation to long branches for .arch common_v10_v32 not implemented"
msgstr ""
-#: config/tc-cris.c:902
+#: config/tc-cris.c:931
msgid "Complicated LAPC target operand is not a multiple of two. Use LAPC.D"
msgstr ""
-#: config/tc-cris.c:907
+#: config/tc-cris.c:936
#, c-format
msgid ""
"Internal error found in md_convert_frag: offset %ld. Please report this."
msgstr ""
-#: config/tc-cris.c:932
+#: config/tc-cris.c:961
#, c-format
msgid "internal inconsistency in %s: bdapq no symbol"
msgstr ""
-#: config/tc-cris.c:945
+#: config/tc-cris.c:974
#, c-format
msgid "internal inconsistency in %s: bdap.w with no symbol"
msgstr ""
-#: config/tc-cris.c:969
+#: config/tc-cris.c:998
msgid "section alignment must be >= 4 bytes to check MULS/MULU safeness"
msgstr ""
-#: config/tc-cris.c:978
+#: config/tc-cris.c:1007
msgid "dangerous MULS/MULU location; give it higher alignment"
msgstr ""
-#: config/tc-cris.c:1083
+#: config/tc-cris.c:1112
msgid ""
"Out-of-range .word offset handling is not implemented for .arch "
"common_v10_v32"
msgstr ""
-#: config/tc-cris.c:1148 config/tc-crx.c:582 config/tc-crx.c:609
-#: config/tc-crx.c:627
-msgid "Virtual memory exhausted"
-msgstr ""
-
-#: config/tc-cris.c:1182 config/tc-crx.c:592
-#, c-format
-msgid "Can't hash `%s': %s\n"
-msgstr ""
-
-#: config/tc-cris.c:1183 config/tc-crx.c:593
-msgid "(unknown reason)"
-msgstr ""
-
-#: config/tc-cris.c:1187
+#: config/tc-cris.c:1220
#, c-format
msgid "Buggy opcode: `%s' \"%s\"\n"
msgstr ""
-#: config/tc-cris.c:1493 config/tc-cris.c:1501 config/tc-crx.c:2029
-#: config/tc-dlx.c:685 config/tc-hppa.c:1625 config/tc-i860.c:492
-#: config/tc-i860.c:509 config/tc-i860.c:989 config/tc-sparc.c:1417
-#: config/tc-sparc.c:1425
-#, c-format
-msgid "Unknown opcode: `%s'"
-msgstr ""
-
-#: config/tc-cris.c:1599
+#: config/tc-cris.c:1635
#, c-format
msgid "Immediate value not in 5 bit unsigned range: %ld"
msgstr ""
-#: config/tc-cris.c:1615
+#: config/tc-cris.c:1651
#, c-format
msgid "Immediate value not in 4 bit unsigned range: %ld"
msgstr ""
-#: config/tc-cris.c:1667
+#: config/tc-cris.c:1703
#, c-format
msgid "Immediate value not in 6 bit range: %ld"
msgstr ""
-#: config/tc-cris.c:1682
+#: config/tc-cris.c:1718
#, c-format
msgid "Immediate value not in 6 bit unsigned range: %ld"
msgstr ""
#. Others have a generic warning.
-#: config/tc-cris.c:1790
+#: config/tc-cris.c:1826
#, c-format
msgid "Unimplemented register `%s' specified"
msgstr ""
#. We've come to the end of instructions with this
#. opcode, so it must be an error.
-#: config/tc-cris.c:2033
+#: config/tc-cris.c:2069
msgid "Illegal operands"
msgstr ""
-#: config/tc-cris.c:2074 config/tc-cris.c:2114
+#: config/tc-cris.c:2110 config/tc-cris.c:2150
#, c-format
msgid "Immediate value not in 8 bit range: %ld"
msgstr ""
-#: config/tc-cris.c:2084 config/tc-cris.c:2135
+#: config/tc-cris.c:2120 config/tc-cris.c:2171
#, c-format
msgid "Immediate value not in 16 bit range: %ld"
msgstr ""
-#: config/tc-cris.c:2119
+#: config/tc-cris.c:2155
#, c-format
msgid "Immediate value not in 8 bit signed range: %ld"
msgstr ""
-#: config/tc-cris.c:2124
+#: config/tc-cris.c:2160
#, c-format
msgid "Immediate value not in 8 bit unsigned range: %ld"
msgstr ""
-#: config/tc-cris.c:2140
+#: config/tc-cris.c:2176
#, c-format
msgid "Immediate value not in 16 bit signed range: %ld"
msgstr ""
-#: config/tc-cris.c:2145
+#: config/tc-cris.c:2181
#, c-format
msgid "Immediate value not in 16 bit unsigned range: %ld"
msgstr ""
-#: config/tc-cris.c:2167
+#: config/tc-cris.c:2203
msgid "PIC relocation size does not match operand size"
msgstr ""
-#: config/tc-cris.c:3304
+#: config/tc-cris.c:3346
msgid "Calling gen_cond_branch_32 for .arch common_v10_v32\n"
msgstr ""
-#: config/tc-cris.c:3308
+#: config/tc-cris.c:3350
msgid "32-bit conditional branch generated"
msgstr ""
-#: config/tc-cris.c:3367
+#: config/tc-cris.c:3411
msgid "Complex expression not supported"
msgstr ""
#. FIXME: Is this function mentioned in the internals.texi manual? If
#. not, add it.
-#: config/tc-cris.c:3490
+#: config/tc-cris.c:3537
msgid "Bad call to md_atof () - floating point formats are not supported"
msgstr ""
-#: config/tc-cris.c:3531
+#: config/tc-cris.c:3578
msgid "PC-relative relocation must be trivially resolved"
msgstr ""
-#: config/tc-cris.c:3584
+#: config/tc-cris.c:3631
#, c-format
msgid "Value not in 16 bit range: %ld"
msgstr ""
-#: config/tc-cris.c:3595
+#: config/tc-cris.c:3642
#, c-format
msgid "Value not in 16 bit signed range: %ld"
msgstr ""
-#: config/tc-cris.c:3606
+#: config/tc-cris.c:3653
#, c-format
msgid "Value not in 8 bit range: %ld"
msgstr ""
-#: config/tc-cris.c:3614
+#: config/tc-cris.c:3661
#, c-format
msgid "Value not in 8 bit signed range: %ld"
msgstr ""
-#: config/tc-cris.c:3625
+#: config/tc-cris.c:3672
#, c-format
msgid "Value not in 4 bit unsigned range: %ld"
msgstr ""
-#: config/tc-cris.c:3633
+#: config/tc-cris.c:3680
#, c-format
msgid "Value not in 5 bit unsigned range: %ld"
msgstr ""
-#: config/tc-cris.c:3641
+#: config/tc-cris.c:3688
#, c-format
msgid "Value not in 6 bit range: %ld"
msgstr ""
-#: config/tc-cris.c:3649
+#: config/tc-cris.c:3696
#, c-format
msgid "Value not in 6 bit unsigned range: %ld"
msgstr ""
-#: config/tc-cris.c:3695
+#: config/tc-cris.c:3742
#, c-format
msgid "Please use --help to see usage and options for this assembler.\n"
msgstr ""
-#: config/tc-cris.c:3707
+#: config/tc-cris.c:3754
msgid "--no-underscore is invalid with a.out format"
msgstr ""
-#: config/tc-cris.c:3727
+#: config/tc-cris.c:3778
#, c-format
msgid "invalid <arch> in --march=<arch>: %s"
msgstr ""
-#: config/tc-cris.c:3821
+#: config/tc-cris.c:3877
msgid ""
"Semantics error. This type of operand can not be relocated, it must be an "
"assembly-time constant"
msgstr ""
-#: config/tc-cris.c:3870
+#: config/tc-cris.c:3926
#, c-format
msgid "Cannot generate relocation type for symbol %s, code %s"
msgstr ""
#. The messages are formatted to line up with the generic options.
-#: config/tc-cris.c:3883
+#: config/tc-cris.c:3939
#, c-format
msgid "CRIS-specific options:\n"
msgstr ""
-#: config/tc-cris.c:3885
+#: config/tc-cris.c:3941
msgid ""
" -h, -H Don't execute, print this help text. Deprecated.\n"
msgstr ""
-#: config/tc-cris.c:3887
+#: config/tc-cris.c:3943
msgid " -N Warn when branches are expanded to jumps.\n"
msgstr ""
-#: config/tc-cris.c:3889
+#: config/tc-cris.c:3945
msgid ""
" --underscore User symbols are normally prepended with "
"underscore.\n"
msgstr ""
-#: config/tc-cris.c:3891
+#: config/tc-cris.c:3947
msgid " Registers will not need any prefix.\n"
msgstr ""
-#: config/tc-cris.c:3893
+#: config/tc-cris.c:3949
msgid " --no-underscore User symbols do not have any prefix.\n"
msgstr ""
-#: config/tc-cris.c:3895
+#: config/tc-cris.c:3951
msgid " Registers will require a `$'-prefix.\n"
msgstr ""
-#: config/tc-cris.c:3897
+#: config/tc-cris.c:3953
msgid " --pic\t\t\tEnable generation of position-independent code.\n"
msgstr ""
-#: config/tc-cris.c:3899
+#: config/tc-cris.c:3955
msgid ""
" --march=<arch>\t\tGenerate code for <arch>. Valid choices for <arch>\n"
"\t\t\t\tare v0_v10, v10, v32 and common_v10_v32.\n"
msgstr ""
-#: config/tc-cris.c:3920
+#: config/tc-cris.c:3976
msgid "Invalid relocation"
msgstr ""
-#: config/tc-cris.c:3957
+#: config/tc-cris.c:4013
msgid "Invalid pc-relative relocation"
msgstr ""
-#: config/tc-cris.c:4002
+#: config/tc-cris.c:4058
#, c-format
msgid "Adjusted signed .word (%ld) overflows: `switch'-statement too large."
msgstr ""
-#: config/tc-cris.c:4032
+#: config/tc-cris.c:4088
#, c-format
msgid ".syntax %s requires command-line option `--underscore'"
msgstr ""
-#: config/tc-cris.c:4041
+#: config/tc-cris.c:4097
#, c-format
msgid ".syntax %s requires command-line option `--no-underscore'"
msgstr ""
-#: config/tc-cris.c:4078
+#: config/tc-cris.c:4134
msgid "Unknown .syntax operand"
msgstr ""
-#: config/tc-cris.c:4088
+#: config/tc-cris.c:4144
msgid "Pseudodirective .file is only valid when generating ELF"
msgstr ""
-#: config/tc-cris.c:4100
+#: config/tc-cris.c:4156
msgid "Pseudodirective .loc is only valid when generating ELF"
msgstr ""
-#: config/tc-cris.c:4243
+#: config/tc-cris.c:4299
msgid "unknown operand to .arch"
msgstr ""
-#: config/tc-cris.c:4252
+#: config/tc-cris.c:4308
msgid ".arch <arch> requires a matching --march=... option"
msgstr ""
-#: config/tc-crx.c:344 config/tc-mn10200.c:801 write.c:2209
-#, c-format
-msgid "can't resolve `%s' {%s section} - `%s' {%s section}"
-msgstr ""
-
-#: config/tc-crx.c:360
-#, c-format
-msgid "internal error: reloc %d (`%s') not supported by object file format"
-msgstr ""
-
-#: config/tc-crx.c:619 config/tc-crx.c:637 config/tc-i386.c:953
-#: config/tc-i386.c:976 config/tc-m68k.c:4149
-#, c-format
-msgid "Internal Error: Can't hash %s: %s"
-msgstr ""
-
-#. Missing or bad expr becomes absolute 0.
-#: config/tc-crx.c:665 config/tc-i386.c:4259
-#, c-format
-msgid "missing or invalid displacement expression `%s' taken as 0"
-msgstr ""
-
-#: config/tc-crx.c:803 config/tc-crx.c:823 config/tc-crx.c:838
-#, c-format
-msgid "Illegal register `%s' in Instruction `%s'"
-msgstr ""
-
#: config/tc-crx.c:866
#, c-format
msgid "Illegal Scale - `%d'"
msgstr ""
-#: config/tc-crx.c:982
-#, c-format
-msgid "Illegal operands (whitespace): `%s'"
-msgstr ""
-
-#: config/tc-crx.c:994 config/tc-crx.c:1001 config/tc-crx.c:1018
-#: config/tc-crx.c:1804
-#, c-format
-msgid "Missing matching brackets : `%s'"
-msgstr ""
-
-#: config/tc-crx.c:1044
-#, c-format
-msgid "Unknown exception: `%s'"
-msgstr ""
-
-#: config/tc-crx.c:1140
-#, c-format
-msgid "Illegal `cinv' parameter: `%c'"
-msgstr ""
-
-#: config/tc-crx.c:1173
-#, c-format
-msgid "Unknown register: `%d'"
-msgstr ""
-
-#. Issue a error message when register is illegal.
-#: config/tc-crx.c:1181
-#, c-format
-msgid "Illegal register (`%s') in Instruction: `%s'"
-msgstr ""
-
#: config/tc-crx.c:1310
#, c-format
msgid "Illegal Co-processor register in Instruction `%s' "
@@ -3267,110 +3768,70 @@ msgstr ""
msgid "Illegal Co-processor special register in Instruction `%s' "
msgstr ""
-#: config/tc-crx.c:1616
-msgid "Incorrect number of operands"
-msgstr ""
-
-#: config/tc-crx.c:1618
-#, c-format
-msgid "Illegal type of operand (arg %d)"
-msgstr ""
-
-#: config/tc-crx.c:1624
-#, c-format
-msgid "Operand out of range (arg %d)"
-msgstr ""
-
-#: config/tc-crx.c:1627
-#, c-format
-msgid "Operand has odd displacement (arg %d)"
-msgstr ""
-
-#: config/tc-crx.c:1630
+#: config/tc-crx.c:1636
#, c-format
msgid "Invalid DISPU4 operand value (arg %d)"
msgstr ""
-#: config/tc-crx.c:1633
+#: config/tc-crx.c:1639
#, c-format
msgid "Invalid CST4 operand value (arg %d)"
msgstr ""
-#: config/tc-crx.c:1636
+#: config/tc-crx.c:1642
#, c-format
msgid "Operand value is not within upper 64 KB (arg %d)"
msgstr ""
-#: config/tc-crx.c:1640 config/tc-crx.c:1671
-#, c-format
-msgid "Illegal operand (arg %d)"
-msgstr ""
-
-#: config/tc-crx.c:1702 config/tc-crx.c:1719
-#, c-format
-msgid "Same src/dest register is used (`r%d'), result is undefined"
-msgstr ""
-
-#: config/tc-crx.c:1711
-#, c-format
-msgid "`%s' has undefined result"
-msgstr ""
-
-#: config/tc-crx.c:1773
+#: config/tc-crx.c:1779
msgid "Invalid Register in Register List"
msgstr ""
-#: config/tc-crx.c:1827
+#: config/tc-crx.c:1833
#, c-format
msgid "Illegal register `%s' in cop-register list"
msgstr ""
-#: config/tc-crx.c:1835
+#: config/tc-crx.c:1841
#, c-format
msgid "Illegal register `%s' in cop-special-register list"
msgstr ""
-#: config/tc-crx.c:1854
+#: config/tc-crx.c:1860
#, c-format
msgid "Illegal register `%s' in user register list"
msgstr ""
-#: config/tc-crx.c:1873
+#: config/tc-crx.c:1879
#, c-format
msgid "Illegal register `%s' in register list"
msgstr ""
-#: config/tc-crx.c:1879
+#: config/tc-crx.c:1885
#, c-format
msgid "Maximum %d bits may be set in `mask16' operand"
msgstr ""
-#: config/tc-crx.c:1888
+#: config/tc-crx.c:1894
#, c-format
msgid "rest of line ignored; first ignored character is `%c'"
msgstr ""
-#: config/tc-crx.c:1896
+#: config/tc-crx.c:1902
#, c-format
msgid "Illegal `mask16' operand, operation is undefined - `%s'"
msgstr ""
#. HI can't be specified without LO (and vise-versa).
-#: config/tc-crx.c:1902
+#: config/tc-crx.c:1908
msgid "HI/LO registers should be specified together"
msgstr ""
-#: config/tc-crx.c:1908
+#: config/tc-crx.c:1914
msgid "HI/LO registers should be specified without additional registers"
msgstr ""
-#. Give an error if a frag containing code is not aligned to a 2-byte
-#. boundary.
-#: config/tc-crx.c:1993 config/tc-crx.h:76
-msgid "instruction address is not a multiple of 2"
-msgstr ""
-
-#: config/tc-d10v.c:217
+#: config/tc-d10v.c:216
#, c-format
msgid ""
"D10V options:\n"
@@ -3381,140 +3842,144 @@ msgid ""
" instructions together.\n"
msgstr ""
-#: config/tc-d10v.c:496 config/tc-d30v.c:488 config/tc-mn10200.c:1075
-#: config/tc-mn10300.c:1817 config/tc-ppc.c:2380 config/tc-s390.c:1218
-#: config/tc-v850.c:1949
+#: config/tc-d10v.c:495 config/tc-d30v.c:487 config/tc-mn10200.c:1074
+#: config/tc-mn10300.c:1816 config/tc-ppc.c:2434 config/tc-s390.c:1219
+#: config/tc-v850.c:1964 config/tc-z80.c:422
msgid "illegal operand"
msgstr ""
-#: config/tc-d10v.c:608
+#: config/tc-d10v.c:607
msgid "operand is not an immediate"
msgstr ""
-#: config/tc-d10v.c:626
+#: config/tc-d10v.c:625
#, c-format
msgid "operand out of range: %lu"
msgstr ""
-#: config/tc-d10v.c:684
+#: config/tc-d10v.c:683
msgid "Instruction must be executed in parallel with another instruction."
msgstr ""
-#: config/tc-d10v.c:738 config/tc-d10v.c:746
+#: config/tc-d10v.c:737 config/tc-d10v.c:745
#, c-format
msgid "packing conflict: %s must dispatch sequentially"
msgstr ""
-#: config/tc-d10v.c:845
+#: config/tc-d10v.c:844
#, c-format
msgid "resource conflict (R%d)"
msgstr ""
-#: config/tc-d10v.c:848
+#: config/tc-d10v.c:847
#, c-format
msgid "resource conflict (A%d)"
msgstr ""
-#: config/tc-d10v.c:850
+#: config/tc-d10v.c:849
msgid "resource conflict (PSW)"
msgstr ""
-#: config/tc-d10v.c:852
+#: config/tc-d10v.c:851
msgid "resource conflict (C flag)"
msgstr ""
-#: config/tc-d10v.c:854
+#: config/tc-d10v.c:853
msgid "resource conflict (F flag)"
msgstr ""
-#: config/tc-d10v.c:1004
+#: config/tc-d10v.c:1003
msgid "Instruction must be executed in parallel"
msgstr ""
-#: config/tc-d10v.c:1007
+#: config/tc-d10v.c:1006
msgid "Long instructions may not be combined."
msgstr ""
-#: config/tc-d10v.c:1040
+#: config/tc-d10v.c:1039
msgid "One of these instructions may not be executed in parallel."
msgstr ""
-#: config/tc-d10v.c:1044 config/tc-d30v.c:1071
+#: config/tc-d10v.c:1043 config/tc-d30v.c:1070
msgid "Two IU instructions may not be executed in parallel"
msgstr ""
-#: config/tc-d10v.c:1046 config/tc-d10v.c:1054 config/tc-d10v.c:1068
-#: config/tc-d10v.c:1083 config/tc-d30v.c:1072 config/tc-d30v.c:1081
+#: config/tc-d10v.c:1045 config/tc-d10v.c:1053 config/tc-d10v.c:1067
+#: config/tc-d10v.c:1082 config/tc-d30v.c:1071 config/tc-d30v.c:1080
msgid "Swapping instruction order"
msgstr ""
-#: config/tc-d10v.c:1052 config/tc-d30v.c:1078
+#: config/tc-d10v.c:1051 config/tc-d30v.c:1077
msgid "Two MU instructions may not be executed in parallel"
msgstr ""
-#: config/tc-d10v.c:1072 config/tc-d30v.c:1098
+#: config/tc-d10v.c:1071 config/tc-d30v.c:1097
msgid "IU instruction may not be in the left container"
msgstr ""
-#: config/tc-d10v.c:1074 config/tc-d10v.c:1089
+#: config/tc-d10v.c:1073 config/tc-d10v.c:1088
msgid ""
"Instruction in R container is squashed by flow control instruction in L "
"container."
msgstr ""
-#: config/tc-d10v.c:1087 config/tc-d30v.c:1109
+#: config/tc-d10v.c:1086 config/tc-d30v.c:1108
msgid "MU instruction may not be in the right container"
msgstr ""
-#: config/tc-d10v.c:1093 config/tc-d30v.c:1121
+#: config/tc-d10v.c:1092 config/tc-d30v.c:1120
msgid "unknown execution type passed to write_2_short()"
msgstr ""
-#: config/tc-d10v.c:1221 config/tc-d10v.c:1394
+#: config/tc-d10v.c:1220 config/tc-d10v.c:1393
msgid "bad opcode or operands"
msgstr ""
-#: config/tc-d10v.c:1296 config/tc-m68k.c:4625
+#: config/tc-d10v.c:1295
msgid "value out of range"
msgstr ""
-#: config/tc-d10v.c:1370
+#: config/tc-d10v.c:1369
msgid "illegal operand - register name found where none expected"
msgstr ""
-#: config/tc-d10v.c:1405
+#: config/tc-d10v.c:1404
msgid "Register number must be EVEN"
msgstr ""
-#: config/tc-d10v.c:1408
+#: config/tc-d10v.c:1407
msgid "Unsupported use of sp"
msgstr ""
-#: config/tc-d10v.c:1427
+#: config/tc-d10v.c:1426
#, c-format
msgid "cr%ld is a reserved control register"
msgstr ""
-#: config/tc-d10v.c:1466 config/tc-d30v.c:1430
+#: config/tc-d10v.c:1599
#, c-format
-msgid "unknown opcode: %s"
+msgid "line %d: rep or repi must include at least 4 instructions"
+msgstr ""
+
+#: config/tc-d10v.c:1779
+msgid "can't find previous opcode "
msgstr ""
-#: config/tc-d10v.c:1602
+#: config/tc-d10v.c:1791
#, c-format
-msgid "line %d: rep or repi must include at least 4 instructions"
+msgid "could not assemble: %s"
msgstr ""
-#: config/tc-d10v.c:1810 config/tc-d10v.c:1832 config/tc-d30v.c:1777
+#: config/tc-d10v.c:1806 config/tc-d10v.c:1828 config/tc-d30v.c:1776
msgid "Unable to mix instructions as specified"
msgstr ""
-#: config/tc-d30v.c:150
+#: config/tc-d30v.c:149
#, c-format
msgid "Register name %s conflicts with symbol of the same name"
msgstr ""
-#: config/tc-d30v.c:240
+#: config/tc-d30v.c:239
#, c-format
msgid ""
"\n"
@@ -3528,126 +3993,131 @@ msgid ""
"-C Opposite of -C. -c is the default.\n"
msgstr ""
-#: config/tc-d30v.c:402
+#: config/tc-d30v.c:401
msgid "unexpected 12-bit reloc type"
msgstr ""
-#: config/tc-d30v.c:409
+#: config/tc-d30v.c:408
msgid "unexpected 18-bit reloc type"
msgstr ""
-#: config/tc-d30v.c:659
+#: config/tc-d30v.c:658
#, c-format
msgid "%s NOP inserted"
msgstr ""
-#: config/tc-d30v.c:660
+#: config/tc-d30v.c:659
msgid "sequential"
msgstr ""
-#: config/tc-d30v.c:660
+#: config/tc-d30v.c:659
msgid "parallel"
msgstr ""
-#: config/tc-d30v.c:1067
+#: config/tc-d30v.c:1066
msgid "Instructions may not be executed in parallel"
msgstr ""
-#: config/tc-d30v.c:1080
+#: config/tc-d30v.c:1079
#, c-format
msgid "Executing %s in IU may not work"
msgstr ""
-#: config/tc-d30v.c:1087
+#: config/tc-d30v.c:1086
#, c-format
msgid "Executing %s in IU may not work in parallel execution"
msgstr ""
-#: config/tc-d30v.c:1100
+#: config/tc-d30v.c:1099
#, c-format
msgid "special left instruction `%s' kills instruction `%s' in right container"
msgstr ""
-#: config/tc-d30v.c:1111
+#: config/tc-d30v.c:1110
#, c-format
msgid "Executing %s in reverse serial with %s may not work"
msgstr ""
-#: config/tc-d30v.c:1114
+#: config/tc-d30v.c:1113
#, c-format
msgid "Executing %s in IU in reverse serial may not work"
msgstr ""
-#: config/tc-d30v.c:1303
+#: config/tc-d30v.c:1302
msgid "Odd numbered register used as target of multi-register instruction"
msgstr ""
-#: config/tc-d30v.c:1367 config/tc-d30v.c:1402
+#: config/tc-d30v.c:1366 config/tc-d30v.c:1401
#, c-format
msgid "unknown condition code: %s"
msgstr ""
-#: config/tc-d30v.c:1395
+#: config/tc-d30v.c:1394
#, c-format
msgid "cmpu doesn't support condition code %s"
msgstr ""
-#: config/tc-d30v.c:1441
+#: config/tc-d30v.c:1429
+#, c-format
+msgid "unknown opcode: %s"
+msgstr ""
+
+#: config/tc-d30v.c:1440
#, c-format
msgid "operands for opcode `%s' do not match any valid format"
msgstr ""
-#: config/tc-d30v.c:1656 config/tc-d30v.c:1673
+#: config/tc-d30v.c:1655 config/tc-d30v.c:1672
msgid "Cannot assemble instruction"
msgstr ""
-#: config/tc-d30v.c:1658
+#: config/tc-d30v.c:1657
msgid "First opcode is long. Unable to mix instructions as specified."
msgstr ""
-#: config/tc-d30v.c:1727
+#: config/tc-d30v.c:1726
msgid "word of NOPs added between word multiply and load"
msgstr ""
-#: config/tc-d30v.c:1729
+#: config/tc-d30v.c:1728
msgid "word of NOPs added between word multiply and 16-bit multiply"
msgstr ""
-#: config/tc-d30v.c:1761
+#: config/tc-d30v.c:1760
msgid "Instruction uses long version, so it cannot be mixed as specified"
msgstr ""
-#: config/tc-d30v.c:1888
+#: config/tc-d30v.c:1887
#, c-format
msgid "value too large to fit in %d bits"
msgstr ""
-#: config/tc-d30v.c:1949
+#: config/tc-d30v.c:1948
#, c-format
msgid "line %d: unable to place address of symbol '%s' into a byte"
msgstr ""
-#: config/tc-d30v.c:1952
+#: config/tc-d30v.c:1951
#, c-format
msgid "line %d: unable to place value %lx into a byte"
msgstr ""
-#: config/tc-d30v.c:1960
+#: config/tc-d30v.c:1959
#, c-format
msgid "line %d: unable to place address of symbol '%s' into a short"
msgstr ""
-#: config/tc-d30v.c:1963
+#: config/tc-d30v.c:1962
#, c-format
msgid "line %d: unable to place value %lx into a short"
msgstr ""
-#: config/tc-d30v.c:1971
+#: config/tc-d30v.c:1970
#, c-format
msgid "line %d: unable to place address of symbol '%s' into a quad"
msgstr ""
-#: config/tc-d30v.c:2079
+#: config/tc-d30v.c:2078
#, c-format
msgid "Alignment too large: %d assumed"
msgstr ""
@@ -3661,8 +4131,8 @@ msgid ".endfunc missing for previous .proc"
msgstr ""
#. Probably a memory allocation problem? Give up now.
-#: config/tc-dlx.c:297 config/tc-hppa.c:1489 config/tc-mips.c:1415
-#: config/tc-mips.c:1467 config/tc-or32.c:210 config/tc-sparc.c:855
+#: config/tc-dlx.c:297 config/tc-hppa.c:8306 config/tc-mips.c:1764
+#: config/tc-mips.c:1816 config/tc-or32.c:211 config/tc-sparc.c:869
msgid "Broken assembler. No assembly attempted."
msgstr ""
@@ -3681,7 +4151,7 @@ msgstr ""
msgid "Expression Error for operand modifier %%hi/%%lo\n"
msgstr ""
-#: config/tc-dlx.c:634 config/tc-or32.c:873
+#: config/tc-dlx.c:634 config/tc-or32.c:871
#, c-format
msgid "Invalid expression after %%%%\n"
msgstr ""
@@ -3718,7 +4188,7 @@ msgstr ""
msgid "failed general register sanity check."
msgstr ""
-#: config/tc-dlx.c:1175 config/tc-or32.c:835
+#: config/tc-dlx.c:1175 config/tc-or32.c:833
#, c-format
msgid "label \"$%d\" redefined"
msgstr ""
@@ -3727,314 +4197,315 @@ msgstr ""
msgid "Invalid expression after # number\n"
msgstr ""
-#: config/tc-fr30.c:83
+#: config/tc-fr30.c:82
#, c-format
msgid " FR30 specific command line options:\n"
msgstr ""
-#: config/tc-fr30.c:136
+#: config/tc-fr30.c:135
#, c-format
msgid "Instruction %s not allowed in a delay slot."
msgstr ""
-#: config/tc-frv.c:461
+#: config/tc-frv.c:460
#, c-format
msgid "FRV specific command line options:\n"
msgstr ""
-#: config/tc-frv.c:462
+#: config/tc-frv.c:461
#, c-format
msgid "-G n Data >= n bytes is in small data area\n"
msgstr ""
-#: config/tc-frv.c:463
+#: config/tc-frv.c:462
#, c-format
msgid "-mgpr-32 Note 32 gprs are used\n"
msgstr ""
-#: config/tc-frv.c:464
+#: config/tc-frv.c:463
#, c-format
msgid "-mgpr-64 Note 64 gprs are used\n"
msgstr ""
-#: config/tc-frv.c:465
+#: config/tc-frv.c:464
#, c-format
msgid "-mfpr-32 Note 32 fprs are used\n"
msgstr ""
-#: config/tc-frv.c:466
+#: config/tc-frv.c:465
#, c-format
msgid "-mfpr-64 Note 64 fprs are used\n"
msgstr ""
-#: config/tc-frv.c:467
+#: config/tc-frv.c:466
#, c-format
msgid "-msoft-float Note software fp is used\n"
msgstr ""
-#: config/tc-frv.c:468
+#: config/tc-frv.c:467
#, c-format
msgid "-mdword Note stack is aligned to a 8 byte boundary\n"
msgstr ""
-#: config/tc-frv.c:469
+#: config/tc-frv.c:468
#, c-format
msgid "-mno-dword Note stack is aligned to a 4 byte boundary\n"
msgstr ""
-#: config/tc-frv.c:470
+#: config/tc-frv.c:469
#, c-format
msgid "-mdouble Note fp double insns are used\n"
msgstr ""
-#: config/tc-frv.c:471
+#: config/tc-frv.c:470
#, c-format
msgid "-mmedia Note media insns are used\n"
msgstr ""
-#: config/tc-frv.c:472
+#: config/tc-frv.c:471
#, c-format
msgid "-mmuladd Note multiply add/subtract insns are used\n"
msgstr ""
-#: config/tc-frv.c:473
+#: config/tc-frv.c:472
#, c-format
msgid "-mpack Note instructions are packed\n"
msgstr ""
-#: config/tc-frv.c:474
+#: config/tc-frv.c:473
#, c-format
msgid "-mno-pack Do not allow instructions to be packed\n"
msgstr ""
-#: config/tc-frv.c:475
+#: config/tc-frv.c:474
#, c-format
msgid "-mpic Note small position independent code\n"
msgstr ""
-#: config/tc-frv.c:476
+#: config/tc-frv.c:475
#, c-format
msgid "-mPIC Note large position independent code\n"
msgstr ""
-#: config/tc-frv.c:477
+#: config/tc-frv.c:476
#, c-format
msgid "-mlibrary-pic Compile library for large position indepedent code\n"
msgstr ""
-#: config/tc-frv.c:478
+#: config/tc-frv.c:477
#, c-format
msgid "-mfdpic Assemble for the FDPIC ABI\n"
msgstr ""
-#: config/tc-frv.c:479
+#: config/tc-frv.c:478
#, c-format
msgid "-mnopic Disable -mpic, -mPIC, -mlibrary-pic and -mfdpic\n"
msgstr ""
-#: config/tc-frv.c:480
+#: config/tc-frv.c:479
#, c-format
msgid "-mcpu={fr500|fr550|fr400|fr405|fr450|fr300|frv|simple|tomcat}\n"
msgstr ""
-#: config/tc-frv.c:481
+#: config/tc-frv.c:480
#, c-format
msgid " Record the cpu type\n"
msgstr ""
-#: config/tc-frv.c:482
+#: config/tc-frv.c:481
#, c-format
msgid "-mtomcat-stats Print out stats for tomcat workarounds\n"
msgstr ""
-#: config/tc-frv.c:483
+#: config/tc-frv.c:482
#, c-format
msgid "-mtomcat-debug Debug tomcat workarounds\n"
msgstr ""
-#: config/tc-frv.c:1187
+#: config/tc-frv.c:1186
msgid "VLIW packing used for -mno-pack"
msgstr ""
-#: config/tc-frv.c:1197
+#: config/tc-frv.c:1196
msgid "Instruction not supported by this architecture"
msgstr ""
-#: config/tc-frv.c:1207
+#: config/tc-frv.c:1206
msgid "VLIW packing constraint violation"
msgstr ""
-#: config/tc-frv.c:1874
+#: config/tc-frv.c:1873
#, c-format
msgid "Relocation %s is not safe for %s"
msgstr ""
-#: config/tc-h8300.c:78 config/tc-h8300.c:87 config/tc-h8300.c:97
-#: config/tc-h8300.c:107 config/tc-h8300.c:117 config/tc-h8300.c:128
-#: config/tc-h8300.c:195 config/tc-hppa.c:1449 config/tc-hppa.c:6926
-#: config/tc-hppa.c:6932 config/tc-hppa.c:6938 config/tc-hppa.c:6944
-#: config/tc-mn10300.c:1223 config/tc-mn10300.c:1228 config/tc-mn10300.c:2725
+#: config/tc-h8300.c:76 config/tc-h8300.c:85 config/tc-h8300.c:95
+#: config/tc-h8300.c:105 config/tc-h8300.c:115 config/tc-h8300.c:126
+#: config/tc-h8300.c:193 config/tc-hppa.c:6839 config/tc-hppa.c:6845
+#: config/tc-hppa.c:6851 config/tc-hppa.c:6857 config/tc-hppa.c:8264
+#: config/tc-mn10300.c:1222 config/tc-mn10300.c:1227 config/tc-mn10300.c:2729
+#: config/tc-xc16x.c:79 config/tc-xc16x.c:86 config/tc-xc16x.c:93
msgid "could not set architecture and machine"
msgstr ""
-#: config/tc-h8300.c:397 config/tc-h8300.c:405
+#: config/tc-h8300.c:395 config/tc-h8300.c:403
msgid "Reg not valid for H8/300"
msgstr ""
-#: config/tc-h8300.c:486
+#: config/tc-h8300.c:484
msgid "invalid operand size requested"
msgstr ""
-#: config/tc-h8300.c:585
+#: config/tc-h8300.c:583
msgid "Invalid register list for ldm/stm\n"
msgstr ""
-#: config/tc-h8300.c:611 config/tc-h8300.c:616 config/tc-h8300.c:623
+#: config/tc-h8300.c:609 config/tc-h8300.c:614 config/tc-h8300.c:621
msgid "mismatch between register and suffix"
msgstr ""
-#: config/tc-h8300.c:650
+#: config/tc-h8300.c:648
msgid "address too high for vector table jmp/jsr"
msgstr ""
-#: config/tc-h8300.c:677 config/tc-h8300.c:789 config/tc-h8300.c:799
+#: config/tc-h8300.c:675 config/tc-h8300.c:787 config/tc-h8300.c:797
msgid "Wrong size pointer register for architecture."
msgstr ""
-#: config/tc-h8300.c:736 config/tc-h8300.c:744 config/tc-h8300.c:773
+#: config/tc-h8300.c:734 config/tc-h8300.c:742 config/tc-h8300.c:771
msgid "expected @(exp, reg16)"
msgstr ""
-#: config/tc-h8300.c:762
+#: config/tc-h8300.c:760
msgid "expected .L, .W or .B for register in indexed addressing mode"
msgstr ""
-#: config/tc-h8300.c:956
+#: config/tc-h8300.c:954
msgid "expected valid addressing mode for mova: \"@(disp, ea.sz),ERn\""
msgstr ""
-#: config/tc-h8300.c:974 config/tc-h8300.c:983
+#: config/tc-h8300.c:972 config/tc-h8300.c:981
msgid "expected register"
msgstr ""
-#: config/tc-h8300.c:999
+#: config/tc-h8300.c:997
msgid "expected closing paren"
msgstr ""
-#: config/tc-h8300.c:1058
+#: config/tc-h8300.c:1056
#, c-format
msgid "can't use high part of register in operand %d"
msgstr ""
-#: config/tc-h8300.c:1215
+#: config/tc-h8300.c:1213
#, c-format
msgid "Opcode `%s' with these operand types not available in %s mode"
msgstr ""
-#: config/tc-h8300.c:1224
+#: config/tc-h8300.c:1222
msgid "mismatch between opcode size and operand size"
msgstr ""
-#: config/tc-h8300.c:1260
+#: config/tc-h8300.c:1258
#, c-format
msgid "operand %s0x%lx out of range."
msgstr ""
-#: config/tc-h8300.c:1356
+#: config/tc-h8300.c:1354
msgid "Can't work out size of operand.\n"
msgstr ""
-#: config/tc-h8300.c:1405
+#: config/tc-h8300.c:1403
#, c-format
msgid "Opcode `%s' with these operand types not available in H8/300 mode"
msgstr ""
-#: config/tc-h8300.c:1410
+#: config/tc-h8300.c:1408
#, c-format
msgid "Opcode `%s' with these operand types not available in H8/300H mode"
msgstr ""
-#: config/tc-h8300.c:1416
+#: config/tc-h8300.c:1414
#, c-format
msgid "Opcode `%s' with these operand types not available in H8/300S mode"
msgstr ""
-#: config/tc-h8300.c:1477 config/tc-h8300.c:1497
+#: config/tc-h8300.c:1475 config/tc-h8300.c:1495
msgid "Need #1 or #2 here"
msgstr ""
-#: config/tc-h8300.c:1492
+#: config/tc-h8300.c:1490
msgid "#4 not valid on H8/300."
msgstr ""
-#: config/tc-h8300.c:1598 config/tc-h8300.c:1680
+#: config/tc-h8300.c:1596 config/tc-h8300.c:1678
#, c-format
msgid "branch operand has odd offset (%lx)\n"
msgstr ""
-#: config/tc-h8300.c:1718
+#: config/tc-h8300.c:1716
msgid "destination operand must be 16 bit register"
msgstr ""
-#: config/tc-h8300.c:1727
+#: config/tc-h8300.c:1725
msgid "source operand must be 8 bit register"
msgstr ""
-#: config/tc-h8300.c:1735
+#: config/tc-h8300.c:1733
msgid "destination operand must be 16bit absolute address"
msgstr ""
-#: config/tc-h8300.c:1742
+#: config/tc-h8300.c:1740
msgid "destination operand must be 8 bit register"
msgstr ""
-#: config/tc-h8300.c:1750
+#: config/tc-h8300.c:1748
msgid "source operand must be 16bit absolute address"
msgstr ""
#. This seems more sane than saying "too many operands". We'll
#. get here only if the trailing trash starts with a comma.
#. Types or values of args don't match.
-#: config/tc-h8300.c:1758 config/tc-mmix.c:473 config/tc-mmix.c:485
-#: config/tc-mmix.c:2526 config/tc-mmix.c:2550 config/tc-mmix.c:2823
-#: config/tc-or32.c:527
+#: config/tc-h8300.c:1756 config/tc-mmix.c:472 config/tc-mmix.c:484
+#: config/tc-mmix.c:2525 config/tc-mmix.c:2549 config/tc-mmix.c:2822
+#: config/tc-or32.c:528
msgid "invalid operands"
msgstr ""
-#: config/tc-h8300.c:1789
+#: config/tc-h8300.c:1787
msgid "operand/size mis-match"
msgstr ""
-#: config/tc-h8300.c:1885 config/tc-mips.c:9358 config/tc-sh64.c:2795
-#: config/tc-sh.c:2838 config/tc-z8k.c:1204
+#: config/tc-h8300.c:1883 config/tc-mips.c:9767 config/tc-sh64.c:2795
+#: config/tc-sh.c:2925 config/tc-z8k.c:1226
msgid "unknown opcode"
msgstr ""
-#: config/tc-h8300.c:1918
+#: config/tc-h8300.c:1916
msgid "invalid operand in ldm"
msgstr ""
-#: config/tc-h8300.c:1927
+#: config/tc-h8300.c:1925
msgid "invalid operand in stm"
msgstr ""
-#: config/tc-h8300.c:2093
+#: config/tc-h8300.c:2091
#, c-format
msgid "call to tc_aout_fix_to_chars \n"
msgstr ""
-#: config/tc-h8300.c:2102
+#: config/tc-h8300.c:2100 config/tc-xc16x.c:389
#, c-format
msgid "call to md_convert_frag \n"
msgstr ""
-#: config/tc-h8300.c:2146
+#: config/tc-h8300.c:2144 config/tc-xc16x.c:293
#, c-format
msgid "call tomd_estimate_size_before_relax \n"
msgstr ""
-#: config/tc-h8300.c:2197 config/tc-mcore.c:2282 config/tc-pj.c:538
-#: config/tc-sh.c:4270
+#: config/tc-h8300.c:2195 config/tc-mcore.c:2265 config/tc-pj.c:538
+#: config/tc-sh.c:4401 config/tc-xc16x.c:357
#, c-format
msgid "Cannot represent relocation type %s"
msgstr ""
@@ -4043,619 +4514,625 @@ msgstr ""
#. IGNORE is used to suppress the error message.
#. Variant of CHECK_FIELD for use in md_apply_fix and other places where
#. the current file and line number are not valid.
-#: config/tc-hppa.c:1176 config/tc-hppa.c:1190
+#: config/tc-hppa.c:1015 config/tc-hppa.c:1029
#, c-format
msgid "Field out of range [%d..%d] (%d)."
msgstr ""
#. Simple alignment checking for FIELD against ALIGN (a power of two).
#. IGNORE is used to suppress the error message.
-#: config/tc-hppa.c:1204
+#: config/tc-hppa.c:1043
#, c-format
msgid "Field not properly aligned [%d] (%d)."
msgstr ""
-#: config/tc-hppa.c:1233
+#: config/tc-hppa.c:1092
msgid "Missing .exit\n"
msgstr ""
-#: config/tc-hppa.c:1236
+#: config/tc-hppa.c:1095
msgid "Missing .procend\n"
msgstr ""
-#: config/tc-hppa.c:1422
+#: config/tc-hppa.c:1277
#, c-format
msgid "Invalid field selector. Assuming F%%."
msgstr ""
-#: config/tc-hppa.c:1455
-msgid "-R option not supported on this target."
-msgstr ""
-
-#: config/tc-hppa.c:1471 config/tc-sparc.c:811 config/tc-sparc.c:847
-#, c-format
-msgid "Internal error: can't hash `%s': %s\n"
+#: config/tc-hppa.c:1304
+msgid "Bad segment in expression."
msgstr ""
-#: config/tc-hppa.c:1479 config/tc-i860.c:238
+#: config/tc-hppa.c:1329
#, c-format
-msgid "internal error: losing opcode: `%s' \"%s\"\n"
-msgstr ""
-
-#: config/tc-hppa.c:1550 config/tc-hppa.c:7065 config/tc-hppa.c:7122
-msgid "Missing function name for .PROC (corrupted label chain)"
-msgstr ""
-
-#: config/tc-hppa.c:1553 config/tc-hppa.c:7125
-msgid "Missing function name for .PROC"
+msgid "Invalid Nullification: (%c)"
msgstr ""
-#: config/tc-hppa.c:1857
-msgid "Invalid Indexed Load Completer."
+#: config/tc-hppa.c:1438
+msgid "Cannot handle fixup"
msgstr ""
-#: config/tc-hppa.c:1862
-msgid "Invalid Indexed Load Completer Syntax."
+#: config/tc-hppa.c:1736
+#, c-format
+msgid " -Q ignored\n"
msgstr ""
-#: config/tc-hppa.c:1896
-msgid "Invalid Short Load/Store Completer."
+#: config/tc-hppa.c:1740
+#, c-format
+msgid " -c print a warning if a comment is found\n"
msgstr ""
-#: config/tc-hppa.c:1956 config/tc-hppa.c:1961
-msgid "Invalid Store Bytes Short Completer"
+#: config/tc-hppa.c:1806
+#, c-format
+msgid "no hppa_fixup entry for fixup type 0x%x"
msgstr ""
-#: config/tc-hppa.c:2272 config/tc-hppa.c:2278
-msgid "Invalid left/right combination completer"
+#: config/tc-hppa.c:1985
+msgid "Unknown relocation encountered in md_apply_fix."
msgstr ""
-#: config/tc-hppa.c:2327 config/tc-hppa.c:2334
-msgid "Invalid permutation completer"
+#: config/tc-hppa.c:2173 config/tc-hppa.c:2198
+#, c-format
+msgid "Undefined register: '%s'."
msgstr ""
-#: config/tc-hppa.c:2434
+#: config/tc-hppa.c:2232
#, c-format
-msgid "Invalid Add Condition: %s"
+msgid "Non-absolute symbol: '%s'."
msgstr ""
-#: config/tc-hppa.c:2445 config/tc-hppa.c:2455
-msgid "Invalid Add and Branch Condition"
+#: config/tc-hppa.c:2247
+#, c-format
+msgid "Undefined absolute constant: '%s'."
msgstr ""
-#: config/tc-hppa.c:2476 config/tc-hppa.c:2613
-msgid "Invalid Compare/Subtract Condition"
+#: config/tc-hppa.c:2278 config/tc-hppa.c:5697
+msgid "could not update architecture and machine"
msgstr ""
-#: config/tc-hppa.c:2516
+#: config/tc-hppa.c:2316
#, c-format
-msgid "Invalid Bit Branch Condition: %c"
+msgid "Invalid FP Compare Condition: %s"
msgstr ""
-#: config/tc-hppa.c:2601
+#: config/tc-hppa.c:2371
#, c-format
-msgid "Invalid Compare/Subtract Condition: %s"
+msgid "Invalid FTEST completer: %s"
msgstr ""
-#: config/tc-hppa.c:2628
-msgid "Invalid Compare and Branch Condition"
+#: config/tc-hppa.c:2437 config/tc-hppa.c:2474
+#, c-format
+msgid "Invalid FP Operand Format: %3s"
msgstr ""
-#: config/tc-hppa.c:2724
-msgid "Invalid Logical Instruction Condition."
+#: config/tc-hppa.c:2609
+msgid "Bad segment (should be absolute)."
msgstr ""
-#: config/tc-hppa.c:2779
-msgid "Invalid Shift/Extract/Deposit Condition."
+#: config/tc-hppa.c:2635
+#, c-format
+msgid "Invalid argument location: %s\n"
msgstr ""
-#: config/tc-hppa.c:2891
-msgid "Invalid Unit Instruction Condition."
+#: config/tc-hppa.c:2664
+#, c-format
+msgid "Invalid argument description: %d"
msgstr ""
-#: config/tc-hppa.c:3270 config/tc-hppa.c:3302 config/tc-hppa.c:3333
-#: config/tc-hppa.c:3363
-msgid "Branch to unaligned address"
+#: config/tc-hppa.c:3490
+msgid "Invalid Indexed Load Completer."
msgstr ""
-#: config/tc-hppa.c:3541
-msgid "Invalid SFU identifier"
+#: config/tc-hppa.c:3495
+msgid "Invalid Indexed Load Completer Syntax."
msgstr ""
-#: config/tc-hppa.c:3591
-msgid "Invalid COPR identifier"
+#: config/tc-hppa.c:3529
+msgid "Invalid Short Load/Store Completer."
msgstr ""
-#: config/tc-hppa.c:3720
-msgid "Invalid Floating Point Operand Format."
+#: config/tc-hppa.c:3589 config/tc-hppa.c:3594
+msgid "Invalid Store Bytes Short Completer"
msgstr ""
-#: config/tc-hppa.c:3837 config/tc-hppa.c:3857 config/tc-hppa.c:3877
-#: config/tc-hppa.c:3897 config/tc-hppa.c:3917
-msgid "Invalid register for single precision fmpyadd or fmpysub"
+#: config/tc-hppa.c:3905 config/tc-hppa.c:3911
+msgid "Invalid left/right combination completer"
msgstr ""
-#: config/tc-hppa.c:3968 config/tc-hppa.c:4928
-msgid "could not update architecture and machine"
+#: config/tc-hppa.c:3960 config/tc-hppa.c:3967
+msgid "Invalid permutation completer"
msgstr ""
-#: config/tc-hppa.c:3985
+#: config/tc-hppa.c:4067
#, c-format
-msgid "Invalid operands %s"
+msgid "Invalid Add Condition: %s"
msgstr ""
-#: config/tc-hppa.c:4103
-msgid "Cannot handle fixup"
+#: config/tc-hppa.c:4078 config/tc-hppa.c:4088
+msgid "Invalid Add and Branch Condition"
msgstr ""
-#: config/tc-hppa.c:4404
-#, c-format
-msgid " -Q ignored\n"
+#: config/tc-hppa.c:4109 config/tc-hppa.c:4246
+msgid "Invalid Compare/Subtract Condition"
msgstr ""
-#: config/tc-hppa.c:4408
+#: config/tc-hppa.c:4149
#, c-format
-msgid " -c print a warning if a comment is found\n"
+msgid "Invalid Bit Branch Condition: %c"
msgstr ""
-#: config/tc-hppa.c:4479
+#: config/tc-hppa.c:4234
#, c-format
-msgid "no hppa_fixup entry for fixup type 0x%x"
+msgid "Invalid Compare/Subtract Condition: %s"
msgstr ""
-#: config/tc-hppa.c:4650
-msgid "Unknown relocation encountered in md_apply_fix."
+#: config/tc-hppa.c:4261
+msgid "Invalid Compare and Branch Condition"
msgstr ""
-#: config/tc-hppa.c:4792 config/tc-hppa.c:4817
-#, c-format
-msgid "Undefined register: '%s'."
+#: config/tc-hppa.c:4357
+msgid "Invalid Logical Instruction Condition."
msgstr ""
-#: config/tc-hppa.c:4851
-#, c-format
-msgid "Non-absolute symbol: '%s'."
+#: config/tc-hppa.c:4412
+msgid "Invalid Shift/Extract/Deposit Condition."
msgstr ""
-#: config/tc-hppa.c:4866
-#, c-format
-msgid "Undefined absolute constant: '%s'."
+#: config/tc-hppa.c:4524
+msgid "Invalid Unit Instruction Condition."
msgstr ""
-#: config/tc-hppa.c:4967
-#, c-format
-msgid "Invalid FP Compare Condition: %s"
+#: config/tc-hppa.c:4999 config/tc-hppa.c:5031 config/tc-hppa.c:5062
+#: config/tc-hppa.c:5092
+msgid "Branch to unaligned address"
msgstr ""
-#: config/tc-hppa.c:5023
-#, c-format
-msgid "Invalid FTEST completer: %s"
+#: config/tc-hppa.c:5270
+msgid "Invalid SFU identifier"
msgstr ""
-#: config/tc-hppa.c:5090 config/tc-hppa.c:5128
-#, c-format
-msgid "Invalid FP Operand Format: %3s"
+#: config/tc-hppa.c:5320
+msgid "Invalid COPR identifier"
msgstr ""
-#: config/tc-hppa.c:5207
-msgid "Bad segment in expression."
+#: config/tc-hppa.c:5449
+msgid "Invalid Floating Point Operand Format."
msgstr ""
-#: config/tc-hppa.c:5266
-msgid "Bad segment (should be absolute)."
+#: config/tc-hppa.c:5566 config/tc-hppa.c:5586 config/tc-hppa.c:5606
+#: config/tc-hppa.c:5626 config/tc-hppa.c:5646
+msgid "Invalid register for single precision fmpyadd or fmpysub"
msgstr ""
-#: config/tc-hppa.c:5309
+#: config/tc-hppa.c:5714
#, c-format
-msgid "Invalid argument location: %s\n"
+msgid "Invalid operands %s"
msgstr ""
-#: config/tc-hppa.c:5340
-#, c-format
-msgid "Invalid argument description: %d"
+#: config/tc-hppa.c:5769 config/tc-hppa.c:6975 config/tc-hppa.c:7030
+msgid "Missing function name for .PROC (corrupted label chain)"
msgstr ""
-#: config/tc-hppa.c:5363
-#, c-format
-msgid "Invalid Nullification: (%c)"
+#: config/tc-hppa.c:5772 config/tc-hppa.c:7033
+msgid "Missing function name for .PROC"
msgstr ""
-#: config/tc-hppa.c:5960
+#: config/tc-hppa.c:5831
msgid "Argument to .BLOCK/.BLOCKZ must be between 0 and 0x3fffffff"
msgstr ""
-#: config/tc-hppa.c:6076
+#: config/tc-hppa.c:5927
#, c-format
msgid "Invalid .CALL argument: %s"
msgstr ""
-#: config/tc-hppa.c:6198
+#: config/tc-hppa.c:6061
msgid ".callinfo is not within a procedure definition"
msgstr ""
-#: config/tc-hppa.c:6218
+#: config/tc-hppa.c:6081
#, c-format
msgid "FRAME parameter must be a multiple of 8: %d\n"
msgstr ""
-#: config/tc-hppa.c:6237
+#: config/tc-hppa.c:6100
msgid "Value for ENTRY_GR must be in the range 3..18\n"
msgstr ""
-#: config/tc-hppa.c:6249
+#: config/tc-hppa.c:6112
msgid "Value for ENTRY_FR must be in the range 12..21\n"
msgstr ""
-#: config/tc-hppa.c:6259
+#: config/tc-hppa.c:6122
msgid "Value for ENTRY_SR must be 3\n"
msgstr ""
-#: config/tc-hppa.c:6315
+#: config/tc-hppa.c:6178
#, c-format
msgid "Invalid .CALLINFO argument: %s"
msgstr ""
-#: config/tc-hppa.c:6427
+#: config/tc-hppa.c:6288
msgid "The .ENTER pseudo-op is not supported"
msgstr ""
-#: config/tc-hppa.c:6443
+#: config/tc-hppa.c:6304
msgid "Misplaced .entry. Ignored."
msgstr ""
-#: config/tc-hppa.c:6447
+#: config/tc-hppa.c:6308
msgid "Missing .callinfo."
msgstr ""
-#: config/tc-hppa.c:6513
+#: config/tc-hppa.c:6372
msgid ".REG expression must be a register"
msgstr ""
-#: config/tc-hppa.c:6529
+#: config/tc-hppa.c:6388
msgid "bad or irreducible absolute expression; zero assumed"
msgstr ""
-#: config/tc-hppa.c:6540
+#: config/tc-hppa.c:6399
msgid ".REG must use a label"
msgstr ""
-#: config/tc-hppa.c:6542
+#: config/tc-hppa.c:6401
msgid ".EQU must use a label"
msgstr ""
-#: config/tc-hppa.c:6595
+#: config/tc-hppa.c:6463
+#, c-format
+msgid "Symbol '%s' could not be created."
+msgstr ""
+
+#: config/tc-hppa.c:6467
+msgid "No memory for symbol name."
+msgstr ""
+
+#: config/tc-hppa.c:6516
msgid ".EXIT must appear within a procedure"
msgstr ""
-#: config/tc-hppa.c:6599
+#: config/tc-hppa.c:6520
msgid "Missing .callinfo"
msgstr ""
-#: config/tc-hppa.c:6603
+#: config/tc-hppa.c:6524
msgid "No .ENTRY for this .EXIT"
msgstr ""
-#: config/tc-hppa.c:6630
+#: config/tc-hppa.c:6564
#, c-format
-msgid "Cannot define export symbol: %s\n"
+msgid "Using ENTRY rather than CODE in export directive for %s"
msgstr ""
-#: config/tc-hppa.c:6688
+#: config/tc-hppa.c:6681
#, c-format
-msgid "Using ENTRY rather than CODE in export directive for %s"
+msgid "Undefined .EXPORT/.IMPORT argument (ignored): %s"
msgstr ""
-#: config/tc-hppa.c:6805
+#: config/tc-hppa.c:6705
#, c-format
-msgid "Undefined .EXPORT/.IMPORT argument (ignored): %s"
+msgid "Cannot define export symbol: %s\n"
msgstr ""
-#: config/tc-hppa.c:6887
+#: config/tc-hppa.c:6802
msgid "Missing label name on .LABEL"
msgstr ""
-#: config/tc-hppa.c:6892
+#: config/tc-hppa.c:6807
msgid "extra .LABEL arguments ignored."
msgstr ""
-#: config/tc-hppa.c:6909
+#: config/tc-hppa.c:6823
msgid "The .LEAVE pseudo-op is not supported"
msgstr ""
-#: config/tc-hppa.c:6948
+#: config/tc-hppa.c:6861
msgid "Unrecognized .LEVEL argument\n"
msgstr ""
-#: config/tc-hppa.c:6984
+#: config/tc-hppa.c:6895
#, c-format
msgid "Cannot define static symbol: %s\n"
msgstr ""
-#: config/tc-hppa.c:7019
+#: config/tc-hppa.c:6929
msgid "Nested procedures"
msgstr ""
-#: config/tc-hppa.c:7029
+#: config/tc-hppa.c:6939
msgid "Cannot allocate unwind descriptor\n"
msgstr ""
-#: config/tc-hppa.c:7129
+#: config/tc-hppa.c:7037
msgid "misplaced .procend"
msgstr ""
-#: config/tc-hppa.c:7132
+#: config/tc-hppa.c:7040
msgid "Missing .callinfo for this procedure"
msgstr ""
-#: config/tc-hppa.c:7135
+#: config/tc-hppa.c:7043
msgid "Missing .EXIT for a .ENTRY"
msgstr ""
-#: config/tc-hppa.c:7173
+#: config/tc-hppa.c:7080
msgid "Not in a space.\n"
msgstr ""
-#: config/tc-hppa.c:7176
+#: config/tc-hppa.c:7083
msgid "Not in a subspace.\n"
msgstr ""
-#: config/tc-hppa.c:7267
+#: config/tc-hppa.c:7172
msgid "Invalid .SPACE argument"
msgstr ""
-#: config/tc-hppa.c:7314
+#: config/tc-hppa.c:7218
msgid "Can't change spaces within a procedure definition. Ignored"
msgstr ""
-#: config/tc-hppa.c:7443
+#: config/tc-hppa.c:7346
#, c-format
msgid "Undefined space: '%s' Assuming space number = 0."
msgstr ""
-#: config/tc-hppa.c:7467
+#: config/tc-hppa.c:7369
msgid "Must be in a space before changing or declaring subspaces.\n"
msgstr ""
-#: config/tc-hppa.c:7471
+#: config/tc-hppa.c:7373
msgid "Can't change subspaces within a procedure definition. Ignored"
msgstr ""
-#: config/tc-hppa.c:7507
+#: config/tc-hppa.c:7409
msgid "Parameters of an existing subspace can't be modified"
msgstr ""
-#: config/tc-hppa.c:7559
+#: config/tc-hppa.c:7461
msgid "Alignment must be a power of 2"
msgstr ""
-#: config/tc-hppa.c:7606
+#: config/tc-hppa.c:7508
msgid "FIRST not supported as a .SUBSPACE argument"
msgstr ""
-#: config/tc-hppa.c:7608
+#: config/tc-hppa.c:7510
msgid "Invalid .SUBSPACE argument"
msgstr ""
-#: config/tc-hppa.c:7797
+#: config/tc-hppa.c:7699
#, c-format
msgid "Internal error: Unable to find containing space for %s."
msgstr ""
-#: config/tc-hppa.c:7837
+#: config/tc-hppa.c:7737
#, c-format
msgid "Out of memory: could not allocate new space chain entry: %s\n"
msgstr ""
-#: config/tc-hppa.c:7926
+#: config/tc-hppa.c:7825
#, c-format
msgid "Out of memory: could not allocate new subspace chain entry: %s\n"
msgstr ""
-#: config/tc-hppa.c:8662
+#: config/tc-hppa.c:8270
+msgid "-R option not supported on this target."
+msgstr ""
+
+#: config/tc-hppa.c:8287 config/tc-sparc.c:825 config/tc-sparc.c:861
#, c-format
-msgid "Symbol '%s' could not be created."
+msgid "Internal error: can't hash `%s': %s\n"
msgstr ""
-#: config/tc-hppa.c:8666
-msgid "No memory for symbol name."
+#: config/tc-hppa.c:8296 config/tc-i860.c:236
+#, c-format
+msgid "internal error: losing opcode: `%s' \"%s\"\n"
msgstr ""
-#: config/tc-i386.c:721
+#: config/tc-i386.c:983
#, c-format
msgid "%s shortened to %s"
msgstr ""
-#: config/tc-i386.c:777
+#: config/tc-i386.c:1053
msgid "same type of prefix used twice"
msgstr ""
-#: config/tc-i386.c:795
+#: config/tc-i386.c:1066
msgid "64bit mode not supported on this CPU."
msgstr ""
-#: config/tc-i386.c:799
+#: config/tc-i386.c:1070
msgid "32bit mode not supported on this CPU."
msgstr ""
-#: config/tc-i386.c:832
+#: config/tc-i386.c:1101
msgid "bad argument to syntax directive."
msgstr ""
-#: config/tc-i386.c:884
+#: config/tc-i386.c:1161
#, c-format
msgid "no such architecture: `%s'"
msgstr ""
-#: config/tc-i386.c:889
+#: config/tc-i386.c:1166
msgid "missing cpu architecture"
msgstr ""
-#: config/tc-i386.c:903
+#: config/tc-i386.c:1180
#, c-format
msgid "no such architecture modifier: `%s'"
msgstr ""
-#: config/tc-i386.c:919 config/tc-i386.c:5342
+#: config/tc-i386.c:1196 config/tc-i386.c:6133 config/tc-i386.c:6167
msgid "Unknown architecture"
msgstr ""
-#: config/tc-i386.c:1247
+#: config/tc-i386.c:1528
#, c-format
msgid "unknown relocation (%u)"
msgstr ""
-#: config/tc-i386.c:1249
+#: config/tc-i386.c:1530
#, c-format
msgid "%u-byte relocation cannot be applied to %u-byte field"
msgstr ""
-#: config/tc-i386.c:1253
+#: config/tc-i386.c:1534
msgid "non-pc-relative relocation for pc-relative field"
msgstr ""
-#: config/tc-i386.c:1258
+#: config/tc-i386.c:1539
msgid "relocated field and relocation type differ in signedness"
msgstr ""
-#: config/tc-i386.c:1267
+#: config/tc-i386.c:1548
msgid "there are no unsigned pc-relative relocations"
msgstr ""
-#: config/tc-i386.c:1275
+#: config/tc-i386.c:1556
#, c-format
msgid "cannot do %u byte pc-relative relocation"
msgstr ""
-#: config/tc-i386.c:1292
+#: config/tc-i386.c:1573
#, c-format
msgid "cannot do %s %u byte relocation"
msgstr ""
-#: config/tc-i386.c:1496 config/tc-i386.c:2527
+#: config/tc-i386.c:1790 config/tc-i386.c:2963
#, c-format
msgid "ambiguous operand size for `%s'"
msgstr ""
-#: config/tc-i386.c:1544
+#: config/tc-i386.c:1838
#, c-format
-msgid "can't use register '%%%s' as operand %d in '%s'."
+msgid "can't use register '%s%s' as operand %d in '%s'."
msgstr ""
#. UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc.
-#: config/tc-i386.c:1573
+#: config/tc-i386.c:1870
#, c-format
msgid "translating to `%sp'"
msgstr ""
-#: config/tc-i386.c:1618
+#: config/tc-i386.c:1915
#, c-format
-msgid "can't encode register '%%%s' in an instruction requiring REX prefix."
+msgid "can't encode register '%s%s' in an instruction requiring REX prefix."
msgstr ""
-#: config/tc-i386.c:1659 config/tc-i386.c:1767
+#: config/tc-i386.c:1955 config/tc-i386.c:2063
#, c-format
msgid "no such instruction: `%s'"
msgstr ""
-#: config/tc-i386.c:1670 config/tc-i386.c:1799
+#: config/tc-i386.c:1966 config/tc-i386.c:2095
#, c-format
msgid "invalid character %s in mnemonic"
msgstr ""
-#: config/tc-i386.c:1677
+#: config/tc-i386.c:1973
msgid "expecting prefix; got nothing"
msgstr ""
-#: config/tc-i386.c:1679
+#: config/tc-i386.c:1975
msgid "expecting mnemonic; got nothing"
msgstr ""
-#: config/tc-i386.c:1695 config/tc-i386.c:1818
+#: config/tc-i386.c:1991 config/tc-i386.c:2114
#, c-format
msgid "`%s' is only supported in 64-bit mode"
msgstr ""
-#: config/tc-i386.c:1696 config/tc-i386.c:1817
+#: config/tc-i386.c:1992 config/tc-i386.c:2113
#, c-format
msgid "`%s' is not supported in 64-bit mode"
msgstr ""
-#: config/tc-i386.c:1707
+#: config/tc-i386.c:2003
#, c-format
msgid "redundant %s prefix"
msgstr ""
-#: config/tc-i386.c:1824
+#: config/tc-i386.c:2120
#, c-format
msgid "`%s' is not supported on `%s%s'"
msgstr ""
-#: config/tc-i386.c:1831
+#: config/tc-i386.c:2127
msgid "use .code16 to ensure correct addressing mode"
msgstr ""
-#: config/tc-i386.c:1844
+#: config/tc-i386.c:2140
#, c-format
msgid "expecting string instruction after `%s'"
msgstr ""
-#: config/tc-i386.c:1878
+#: config/tc-i386.c:2172
#, c-format
msgid "invalid character %s before operand %d"
msgstr ""
-#: config/tc-i386.c:1892
+#: config/tc-i386.c:2186
#, c-format
msgid "unbalanced parenthesis in operand %d."
msgstr ""
-#: config/tc-i386.c:1895
+#: config/tc-i386.c:2189
#, c-format
msgid "unbalanced brackets in operand %d."
msgstr ""
-#: config/tc-i386.c:1904
+#: config/tc-i386.c:2198
#, c-format
msgid "invalid character %s in operand %d"
msgstr ""
-#: config/tc-i386.c:1931
+#: config/tc-i386.c:2225
#, c-format
msgid "spurious operands; (%d operands/instruction max)"
msgstr ""
-#: config/tc-i386.c:1954
+#: config/tc-i386.c:2248
msgid "expecting operand after ','; got nothing"
msgstr ""
-#: config/tc-i386.c:1959
+#: config/tc-i386.c:2253
msgid "expecting operand before ','; got nothing"
msgstr ""
#. We found no match.
-#: config/tc-i386.c:2336
+#: config/tc-i386.c:2741
#, c-format
msgid "suffix or operands invalid for `%s'"
msgstr ""
-#: config/tc-i386.c:2347
+#: config/tc-i386.c:2752
#, c-format
msgid "indirect %s without `*'"
msgstr ""
#. Warn them that a data or address size prefix doesn't
#. affect assembly of the next line of code.
-#: config/tc-i386.c:2355
+#: config/tc-i386.c:2760
#, c-format
msgid "stand-alone `%s' prefix"
msgstr ""
-#: config/tc-i386.c:2384 config/tc-i386.c:2399
+#: config/tc-i386.c:2794 config/tc-i386.c:2809
#, c-format
msgid "`%s' operand %d must use `%%es' segment"
msgstr ""
-#: config/tc-i386.c:2509
+#. We have to know the operand size for crc32.
+#: config/tc-i386.c:2862
+#, c-format
+msgid "ambiguous memory operand size for `%s`"
+msgstr ""
+
+#: config/tc-i386.c:2944
msgid ""
"no instruction mnemonic suffix given and no register operands; can't size "
"instruction"
@@ -4663,385 +5140,444 @@ msgstr ""
#. Prohibit these changes in the 64bit mode, since the
#. lowering is more complicated.
-#: config/tc-i386.c:2610 config/tc-i386.c:2669 config/tc-i386.c:2686
-#: config/tc-i386.c:2718 config/tc-i386.c:2751
+#: config/tc-i386.c:3068 config/tc-i386.c:3131 config/tc-i386.c:3150
+#: config/tc-i386.c:3183 config/tc-i386.c:3217
#, c-format
-msgid "Incorrect register `%%%s' used with `%c' suffix"
+msgid "Incorrect register `%s%s' used with `%c' suffix"
msgstr ""
-#: config/tc-i386.c:2618 config/tc-i386.c:2676 config/tc-i386.c:2758
+#: config/tc-i386.c:3076 config/tc-i386.c:3138 config/tc-i386.c:3224
#, c-format
-msgid "using `%%%s' instead of `%%%s' due to `%c' suffix"
+msgid "using `%s%s' instead of `%s%s' due to `%c' suffix"
msgstr ""
-#: config/tc-i386.c:2633 config/tc-i386.c:2654 config/tc-i386.c:2705
-#: config/tc-i386.c:2736
+#: config/tc-i386.c:3093 config/tc-i386.c:3115 config/tc-i386.c:3169
+#: config/tc-i386.c:3201
#, c-format
-msgid "`%%%s' not allowed with `%s%c'"
+msgid "`%s%s' not allowed with `%s%c'"
msgstr ""
-#: config/tc-i386.c:2799
+#: config/tc-i386.c:3267
msgid "no instruction mnemonic suffix given; can't determine immediate size"
msgstr ""
-#: config/tc-i386.c:2832
+#: config/tc-i386.c:3301
#, c-format
msgid ""
"no instruction mnemonic suffix given; can't determine immediate size %x %c"
msgstr ""
-#. Reversed arguments on faddp, fsubp, etc.
-#: config/tc-i386.c:2881
+#: config/tc-i386.c:3339
#, c-format
-msgid "translating to `%s %%%s,%%%s'"
+msgid "the last operand of `%s' must be `%sxmm0'"
msgstr ""
-#. Extraneous `l' suffix on fp insn.
-#: config/tc-i386.c:2888
+#: config/tc-i386.c:3342
#, c-format
-msgid "translating to `%s %%%s'"
+msgid "the first operand of `%s' must be `%sxmm0'"
msgstr ""
-#: config/tc-i386.c:2906
+#: config/tc-i386.c:3379
#, c-format
msgid "you can't `pop %%cs'"
msgstr ""
-#: config/tc-i386.c:2927
+#. Reversed arguments on faddp, fsubp, etc.
+#: config/tc-i386.c:3401
+#, c-format
+msgid "translating to `%s %s%s,%s%s'"
+msgstr ""
+
+#. Extraneous `l' suffix on fp insn.
+#: config/tc-i386.c:3408
+#, c-format
+msgid "translating to `%s %s%s'"
+msgstr ""
+
+#: config/tc-i386.c:3436
#, c-format
msgid "segment override on `%s' is ineffectual"
msgstr ""
-#: config/tc-i386.c:3236 config/tc-i386.c:3330 config/tc-i386.c:3375
+#: config/tc-i386.c:3777 config/tc-i386.c:3871 config/tc-i386.c:3916
msgid "skipping prefixes on this instruction"
msgstr ""
-#: config/tc-i386.c:3395
+#: config/tc-i386.c:3936
msgid "16-bit jump out of range"
msgstr ""
-#: config/tc-i386.c:3404
+#: config/tc-i386.c:3945
#, c-format
msgid "can't handle non absolute segment in `%s'"
msgstr ""
-#: config/tc-i386.c:3897
+#: config/tc-i386.c:4501
#, c-format
msgid "@%s reloc is not supported with %d-bit output format"
msgstr ""
-#: config/tc-i386.c:3986
-msgid "only 1 or 2 immediate operands are allowed"
+#: config/tc-i386.c:4585
+#, c-format
+msgid "at most %d immediate operands are allowed"
msgstr ""
-#: config/tc-i386.c:4007 config/tc-i386.c:4218
+#: config/tc-i386.c:4607 config/tc-i386.c:4824
#, c-format
msgid "junk `%s' after expression"
msgstr ""
#. Missing or bad expr becomes absolute 0.
-#: config/tc-i386.c:4016
+#: config/tc-i386.c:4616
#, c-format
msgid "missing or invalid immediate expression `%s' taken as 0"
msgstr ""
-#: config/tc-i386.c:4041 config/tc-i386.c:4277
+#: config/tc-i386.c:4642 config/tc-i386.c:4883
#, c-format
msgid "unimplemented segment %s in operand"
msgstr ""
-#: config/tc-i386.c:4088
+#: config/tc-i386.c:4648
+#, c-format
+msgid "illegal immediate register operand %s"
+msgstr ""
+
+#: config/tc-i386.c:4691
#, c-format
msgid "expecting scale factor of 1, 2, 4, or 8: got `%s'"
msgstr ""
-#: config/tc-i386.c:4097
+#: config/tc-i386.c:4700
#, c-format
msgid "scale factor of %d without an index register"
msgstr ""
-#: config/tc-i386.c:4236
+#: config/tc-i386.c:4723
+#, c-format
+msgid "at most %d displacement operands are allowed"
+msgstr ""
+
+#: config/tc-i386.c:4842
#, c-format
msgid "bad expression used with @%s"
msgstr ""
-#: config/tc-i386.c:4386
+#: config/tc-i386.c:4990
#, c-format
msgid "`%s' is not a valid base/index expression"
msgstr ""
-#: config/tc-i386.c:4390
+#: config/tc-i386.c:4994
#, c-format
msgid "`%s' is not a valid %s bit base/index expression"
msgstr ""
-#: config/tc-i386.c:4464
+#: config/tc-i386.c:5066
#, c-format
msgid "bad memory operand `%s'"
msgstr ""
-#: config/tc-i386.c:4479
+#: config/tc-i386.c:5081
#, c-format
msgid "junk `%s' after register"
msgstr ""
-#: config/tc-i386.c:4488 config/tc-i386.c:4603 config/tc-i386.c:4641
+#: config/tc-i386.c:5090 config/tc-i386.c:5206 config/tc-i386.c:5247
#, c-format
msgid "bad register name `%s'"
msgstr ""
-#: config/tc-i386.c:4496
+#: config/tc-i386.c:5098
msgid "immediate operand illegal with absolute jump"
msgstr ""
-#: config/tc-i386.c:4518
+#: config/tc-i386.c:5120
#, c-format
msgid "too many memory references for `%s'"
msgstr ""
-#: config/tc-i386.c:4596
+#: config/tc-i386.c:5198
#, c-format
msgid "expecting `,' or `)' after index register in `%s'"
msgstr ""
-#: config/tc-i386.c:4620
+#: config/tc-i386.c:5223
#, c-format
msgid "expecting `)' after scale factor in `%s'"
msgstr ""
-#: config/tc-i386.c:4627
+#: config/tc-i386.c:5231
#, c-format
msgid "expecting index register or scale factor after `,'; got '%c'"
msgstr ""
-#: config/tc-i386.c:4634
+#: config/tc-i386.c:5239
#, c-format
msgid "expecting `,' or `)' after base register in `%s'"
msgstr ""
#. It's not a memory operand; argh!
-#: config/tc-i386.c:4675
+#: config/tc-i386.c:5281
#, c-format
msgid "invalid char %s beginning operand %d `%s'"
msgstr ""
-#: config/tc-i386.c:4850
+#: config/tc-i386.c:5457
msgid "long jump required"
msgstr ""
-#: config/tc-i386.c:5127
+#: config/tc-i386.c:5512
+msgid "jump target out of range"
+msgstr ""
+
+#: config/tc-i386.c:5757
msgid "Bad call to md_atof ()"
msgstr ""
-#: config/tc-i386.c:5294
+#: config/tc-i386.c:6012
msgid "No compiled in support for x86_64"
msgstr ""
-#: config/tc-i386.c:5315
+#: config/tc-i386.c:6041 config/tc-i386.c:6057
+#, c-format
+msgid "Invalid -march= option: `%s'"
+msgstr ""
+
+#: config/tc-i386.c:6062 config/tc-i386.c:6074
+#, c-format
+msgid "Invalid -mtune= option: `%s'"
+msgstr ""
+
+#: config/tc-i386.c:6088
#, c-format
msgid ""
" -Q ignored\n"
" -V print assembler version number\n"
" -k ignored\n"
-" -n Do not optimize code alignment\n"
-" -q quieten some warnings\n"
-" -s ignored\n"
msgstr ""
-#: config/tc-i386.c:5323
+#: config/tc-i386.c:6093
#, c-format
msgid ""
" -n Do not optimize code alignment\n"
" -q quieten some warnings\n"
msgstr ""
-#: config/tc-i386.c:5425 config/tc-s390.c:1861
+#: config/tc-i386.c:6097
+#, c-format
+msgid " -s ignored\n"
+msgstr ""
+
+#: config/tc-i386.c:6101
+#, c-format
+msgid " --32/--64 generate 32bit/64bit code\n"
+msgstr ""
+
+#: config/tc-i386.c:6105
+#, c-format
+msgid " --divide do not treat `/' as a comment character\n"
+msgstr ""
+
+#: config/tc-i386.c:6108
+#, c-format
+msgid " --divide ignored\n"
+msgstr ""
+
+#: config/tc-i386.c:6111
+#, c-format
+msgid ""
+" -march=CPU/-mtune=CPU generate code/optimize for CPU, where CPU is one "
+"of:\n"
+" i386, i486, pentium, pentiumpro, pentium4, "
+"nocona,\n"
+" core, core2, k6, athlon, k8, generic32, "
+"generic64\n"
+msgstr ""
+
+#: config/tc-i386.c:6251 config/tc-s390.c:1862
msgid "GOT already in symbol table"
msgstr ""
-#: config/tc-i386.c:5568
+#: config/tc-i386.c:6400
#, c-format
msgid "can not do %d byte pc-relative relocation"
msgstr ""
-#: config/tc-i386.c:5586
+#: config/tc-i386.c:6418
#, c-format
msgid "can not do %d byte relocation"
msgstr ""
-#: config/tc-i386.c:5657 config/tc-s390.c:2307
+#: config/tc-i386.c:6497 config/tc-s390.c:2308
#, c-format
msgid "cannot represent relocation type %s"
msgstr ""
-#: config/tc-i386.c:5912
+#: config/tc-i386.c:6749
#, c-format
msgid "invalid operand for '%s' ('%s' unexpected)"
msgstr ""
-#: config/tc-i386.c:5924
+#: config/tc-i386.c:6761
#, c-format
msgid "too many memory references for '%s'"
msgstr ""
#. See the comments in intel_bracket_expr.
-#: config/tc-i386.c:5935
+#: config/tc-i386.c:6772
#, c-format
msgid "Treating `%s' as memory reference"
msgstr ""
-#: config/tc-i386.c:6247
+#: config/tc-i386.c:7088
#, c-format
msgid "Unknown operand modifier `%s'"
msgstr ""
-#: config/tc-i386.c:6262
+#: config/tc-i386.c:7103
msgid "Conflicting operand modifiers"
msgstr ""
-#: config/tc-i386.c:6311
+#: config/tc-i386.c:7152
msgid "Invalid operand to `OFFSET'"
msgstr ""
-#: config/tc-i386.c:6384
+#: config/tc-i386.c:7225
#, c-format
msgid "`[%.*s]' taken to mean just `%.*s'"
msgstr ""
-#: config/tc-i386.c:6474
+#: config/tc-i386.c:7316
#, c-format
msgid "`%s' is not a valid segment register"
msgstr ""
-#: config/tc-i386.c:6478
+#: config/tc-i386.c:7321
msgid "Extra segment override ignored"
msgstr ""
-#: config/tc-i386.c:6512 config/tc-i386.c:6681
+#: config/tc-i386.c:7355 config/tc-i386.c:7517
msgid "Register scaling only allowed in memory operands"
msgstr ""
-#: config/tc-i386.c:6534 config/tc-i386.c:6658
+#: config/tc-i386.c:7377 config/tc-i386.c:7493
#, c-format
msgid "Syntax error: Expecting a constant, got `%s'"
msgstr ""
-#: config/tc-i386.c:6562
+#: config/tc-i386.c:7405
msgid "Too many register references in memory operand"
msgstr ""
-#: config/tc-i386.c:6573
-msgid "Using register names in OFFSET expressions is deprecated"
-msgstr ""
-
-#: config/tc-i386.c:6586
+#: config/tc-i386.c:7421
msgid "Invalid use of register"
msgstr ""
-#: config/tc-i386.c:6731
+#: config/tc-i386.c:7570
#, c-format
msgid "Unrecognized token '%s'"
msgstr ""
-#: config/tc-i386.c:6748
+#: config/tc-i386.c:7586
#, c-format
msgid "Unexpected token `%s'"
msgstr ""
-#: config/tc-i386.c:6910
+#: config/tc-i386.c:7744
msgid "`:' expected"
msgstr ""
-#: config/tc-i386.c:6935
+#: config/tc-i386.c:7769
#, c-format
msgid "Unrecognized token `%s'"
msgstr ""
-#: config/tc-i386.c:7070
+#: config/tc-i386.c:7904
msgid "Bad .section directive: want a,l,w,x,M,S,G,T in string"
msgstr ""
-#: config/tc-i386.c:7073
+#: config/tc-i386.c:7907
msgid "Bad .section directive: want a,w,x,M,S,G,T in string"
msgstr ""
-#: config/tc-i386.c:7092
+#: config/tc-i386.c:7926
msgid ".largecomm supported only in 64bit mode, producing .comm"
msgstr ""
-#: config/tc-i860.c:124
+#: config/tc-i860.c:122
msgid "Directive .dual available only with -mintel-syntax option"
msgstr ""
-#: config/tc-i860.c:134
+#: config/tc-i860.c:132
msgid "Directive .enddual available only with -mintel-syntax option"
msgstr ""
-#: config/tc-i860.c:147
+#: config/tc-i860.c:145
msgid "Directive .atmp available only with -mintel-syntax option"
msgstr ""
-#: config/tc-i860.c:169 config/tc-i860.c:173
+#: config/tc-i860.c:167 config/tc-i860.c:171
msgid "Unknown temporary pseudo register"
msgstr ""
-#: config/tc-i860.c:229 config/tc-mips.c:1412
+#: config/tc-i860.c:227 config/tc-mips.c:1761
#, c-format
msgid "internal error: can't hash `%s': %s\n"
msgstr ""
-#: config/tc-i860.c:249
+#: config/tc-i860.c:247
msgid "Defective assembler. No assembly attempted."
msgstr ""
-#: config/tc-i860.c:395 config/tc-i860.c:940 config/tc-m68k.c:3443
-#: config/tc-m68k.c:3475 config/tc-sparc.c:2657
+#: config/tc-i860.c:393 config/tc-i860.c:938 config/tc-m68k.c:3667
+#: config/tc-m68k.c:3699 config/tc-sparc.c:2711
msgid "failed sanity check."
msgstr ""
-#: config/tc-i860.c:402
+#: config/tc-i860.c:400
#, c-format
msgid "Expanded opcode after delayed branch: `%s'"
msgstr ""
-#: config/tc-i860.c:406
+#: config/tc-i860.c:404
#, c-format
msgid "Expanded opcode in dual mode: `%s'"
msgstr ""
-#: config/tc-i860.c:410
+#: config/tc-i860.c:408
#, c-format
msgid "An instruction was expanded (%s)"
msgstr ""
-#: config/tc-i860.c:676
+#: config/tc-i860.c:674
msgid "Pipelined instruction: fsrc1 = fdest"
msgstr ""
-#: config/tc-i860.c:879 config/tc-i860.c:886 config/tc-i860.c:893
+#: config/tc-i860.c:877 config/tc-i860.c:884 config/tc-i860.c:891
msgid "Assembler does not yet support PIC"
msgstr ""
-#: config/tc-i860.c:957
+#: config/tc-i860.c:955
#, c-format
msgid "Illegal operands for %s"
msgstr ""
-#: config/tc-i860.c:974
+#: config/tc-i860.c:972
#, c-format
msgid "'d.%s' must be 8-byte aligned"
msgstr ""
-#: config/tc-i860.c:982
+#: config/tc-i860.c:980
#, c-format
msgid "Prefix 'd.' invalid for instruction `%s'"
msgstr ""
-#: config/tc-i860.c:1088
+#: config/tc-i860.c:1086
msgid "i860_estimate_size_before_relax\n"
msgstr ""
-#: config/tc-i860.c:1187
+#: config/tc-i860.c:1185
#, c-format
msgid ""
" -EL\t\t\t generate code for little endian mode (default)\n"
@@ -5052,42 +5588,42 @@ msgid ""
msgstr ""
#. SVR4 compatibility flags.
-#: config/tc-i860.c:1195
+#: config/tc-i860.c:1193
#, c-format
msgid ""
" -V\t\t\t print assembler version number\n"
" -Qy, -Qn\t\t ignored\n"
msgstr ""
-#: config/tc-i860.c:1258
+#: config/tc-i860.c:1256
msgid "This immediate requires 0 MOD 2 alignment"
msgstr ""
-#: config/tc-i860.c:1261
+#: config/tc-i860.c:1259
msgid "This immediate requires 0 MOD 4 alignment"
msgstr ""
-#: config/tc-i860.c:1264
+#: config/tc-i860.c:1262
msgid "This immediate requires 0 MOD 8 alignment"
msgstr ""
-#: config/tc-i860.c:1267
+#: config/tc-i860.c:1265
msgid "This immediate requires 0 MOD 16 alignment"
msgstr ""
-#: config/tc-i860.c:1362
+#: config/tc-i860.c:1360
msgid "5-bit immediate too large"
msgstr ""
-#: config/tc-i860.c:1365
+#: config/tc-i860.c:1363
msgid "5-bit field must be absolute"
msgstr ""
-#: config/tc-i860.c:1410 config/tc-i860.c:1433
+#: config/tc-i860.c:1408 config/tc-i860.c:1431
msgid "A branch offset requires 0 MOD 4 alignment"
msgstr ""
-#: config/tc-i860.c:1454
+#: config/tc-i860.c:1452
#, c-format
msgid "Unrecognized fix-up (0x%08lx)"
msgstr ""
@@ -5096,95 +5632,87 @@ msgstr ""
msgid "i860_convert_frag\n"
msgstr ""
-#: config/tc-i960.c:488
+#: config/tc-i960.c:486
#, c-format
msgid "Hashing returned \"%s\"."
msgstr ""
-#: config/tc-i960.c:584 config/tc-i960.c:1114
+#: config/tc-i960.c:582 config/tc-i960.c:1112
msgid "expression syntax error"
msgstr ""
-#: config/tc-i960.c:620
+#: config/tc-i960.c:618
msgid "attempt to branch into different segment"
msgstr ""
-#: config/tc-i960.c:624
+#: config/tc-i960.c:622
#, c-format
msgid "target of %s instruction must be a label"
msgstr ""
-#: config/tc-i960.c:734
+#: config/tc-i960.c:732
msgid "unaligned register"
msgstr ""
-#: config/tc-i960.c:756
+#: config/tc-i960.c:754
msgid "no such sfr in this architecture"
msgstr ""
-#: config/tc-i960.c:794
+#: config/tc-i960.c:792
msgid "illegal literal"
msgstr ""
-#: config/tc-i960.c:837
-msgid "unmatched '['"
-msgstr ""
-
-#: config/tc-i960.c:844
-msgid "garbage after index spec ignored"
-msgstr ""
-
-#: config/tc-i960.c:944
+#: config/tc-i960.c:942
msgid "invalid index register"
msgstr ""
-#: config/tc-i960.c:967
+#: config/tc-i960.c:965
msgid "invalid scale factor"
msgstr ""
-#: config/tc-i960.c:1191
+#: config/tc-i960.c:1189
msgid "architecture of opcode conflicts with that of earlier instruction(s)"
msgstr ""
-#: config/tc-i960.c:1425 config/tc-xtensa.c:11295
+#: config/tc-i960.c:1423 config/tc-xtensa.c:11325
msgid "too many operands"
msgstr ""
#. We never moved: there was no opcode either!
-#: config/tc-i960.c:1473
+#: config/tc-i960.c:1471
msgid "missing opcode"
msgstr ""
-#: config/tc-i960.c:1613
+#: config/tc-i960.c:1611
msgid "branch prediction invalid on this opcode"
msgstr ""
-#: config/tc-i960.c:1651
+#: config/tc-i960.c:1649
#, c-format
msgid "invalid opcode, \"%s\"."
msgstr ""
-#: config/tc-i960.c:1653
+#: config/tc-i960.c:1651
#, c-format
msgid "improper number of operands. expecting %d, got %d"
msgstr ""
-#: config/tc-i960.c:1810
+#: config/tc-i960.c:1808
#, c-format
msgid "Fixup of %ld too large for field width of %d"
msgstr ""
-#: config/tc-i960.c:1920
+#: config/tc-i960.c:1918
#, c-format
msgid "invalid architecture %s"
msgstr ""
-#: config/tc-i960.c:1940
+#: config/tc-i960.c:1938
#, c-format
msgid "I960 options:\n"
msgstr ""
-#: config/tc-i960.c:1943
+#: config/tc-i960.c:1941
#, c-format
msgid ""
"\n"
@@ -5196,153 +5724,153 @@ msgid ""
"\t\t\tlong displacements\n"
msgstr ""
-#: config/tc-i960.c:2207
+#: config/tc-i960.c:2205
msgid "should have 1 or 2 operands"
msgstr ""
-#: config/tc-i960.c:2215 config/tc-i960.c:2230
+#: config/tc-i960.c:2213 config/tc-i960.c:2228
#, c-format
msgid "Redefining leafproc %s"
msgstr ""
-#: config/tc-i960.c:2260
+#: config/tc-i960.c:2258
msgid "should have two operands"
msgstr ""
-#: config/tc-i960.c:2270
+#: config/tc-i960.c:2268
msgid "'entry_num' must be absolute number in [0,31]"
msgstr ""
-#: config/tc-i960.c:2278
+#: config/tc-i960.c:2276
#, c-format
msgid "Redefining entrynum for sysproc %s"
msgstr ""
#. Should not happen: see block comment above.
-#: config/tc-i960.c:2378
+#: config/tc-i960.c:2376
#, c-format
msgid "Trying to 'bal' to %s"
msgstr ""
-#: config/tc-i960.c:2388
+#: config/tc-i960.c:2386
msgid "Looks like a proc, but can't tell what kind.\n"
msgstr ""
-#: config/tc-i960.c:2407
+#: config/tc-i960.c:2405
msgid "big endian mode is not supported"
msgstr ""
-#: config/tc-i960.c:2409
+#: config/tc-i960.c:2407
#, c-format
msgid "ignoring unrecognized .endian type `%s'"
msgstr ""
-#: config/tc-i960.c:2454
+#: config/tc-i960.c:2452
msgid "can't use COBR format with external label"
msgstr ""
-#: config/tc-i960.c:2629
+#: config/tc-i960.c:2627
msgid "option --link-relax is only supported in b.out format"
msgstr ""
-#: config/tc-i960.c:2656
+#: config/tc-i960.c:2654
#, c-format
msgid "No 'bal' entry point for leafproc %s"
msgstr ""
-#: config/tc-ia64.c:1008
+#: config/tc-ia64.c:1030
msgid "Bad .section directive: want a,o,s,w,x,M,S,G,T in string"
msgstr ""
-#: config/tc-ia64.c:1151
+#: config/tc-ia64.c:1173
msgid "Unwind directive not followed by an instruction."
msgstr ""
-#: config/tc-ia64.c:5114
+#: config/tc-ia64.c:5123
msgid "Register name expected"
msgstr ""
-#: config/tc-ia64.c:5119 config/tc-ia64.c:5435
+#: config/tc-ia64.c:5128 config/tc-ia64.c:5444
msgid "Comma expected"
msgstr ""
-#: config/tc-ia64.c:5127
+#: config/tc-ia64.c:5136
msgid "Register value annotation ignored"
msgstr ""
-#: config/tc-ia64.c:5168
+#: config/tc-ia64.c:5177
msgid "Directive invalid within a bundle"
msgstr ""
-#: config/tc-ia64.c:5261
+#: config/tc-ia64.c:5270
msgid "Missing predicate relation type"
msgstr ""
-#: config/tc-ia64.c:5267
+#: config/tc-ia64.c:5276
msgid "Unrecognized predicate relation type"
msgstr ""
-#: config/tc-ia64.c:5314
+#: config/tc-ia64.c:5323
msgid "Bad register range"
msgstr ""
-#: config/tc-ia64.c:5323
+#: config/tc-ia64.c:5332
msgid "Predicate register expected"
msgstr ""
-#: config/tc-ia64.c:5328
+#: config/tc-ia64.c:5337
msgid "Duplicate predicate register ignored"
msgstr ""
-#: config/tc-ia64.c:5346
+#: config/tc-ia64.c:5355
msgid "Predicate source and target required"
msgstr ""
-#: config/tc-ia64.c:5348 config/tc-ia64.c:5360
+#: config/tc-ia64.c:5357 config/tc-ia64.c:5369
msgid "Use of p0 is not valid in this context"
msgstr ""
-#: config/tc-ia64.c:5355
+#: config/tc-ia64.c:5364
msgid "At least two PR arguments expected"
msgstr ""
-#: config/tc-ia64.c:5369
+#: config/tc-ia64.c:5378
msgid "At least one PR argument expected"
msgstr ""
-#: config/tc-ia64.c:5405
+#: config/tc-ia64.c:5414
#, c-format
msgid "Inserting \"%s\" into entry hint table failed: %s"
msgstr ""
#. FIXME -- need 62-bit relocation type
-#: config/tc-ia64.c:5881
+#: config/tc-ia64.c:5890
msgid "62-bit relocation not yet implemented"
msgstr ""
#. XXX technically, this is wrong: we should not be issuing warning
#. messages until we're sure this instruction pattern is going to
#. be used!
-#: config/tc-ia64.c:5954
+#: config/tc-ia64.c:5974
msgid "lower 16 bits of mask ignored"
msgstr ""
-#: config/tc-ia64.c:6569
+#: config/tc-ia64.c:6589
msgid "Value truncated to 62 bits"
msgstr ""
#. Give an error if a frag containing code is not aligned to a 16 byte
#. boundary.
-#: config/tc-ia64.c:6707 config/tc-ia64.h:171
+#: config/tc-ia64.c:6727 config/tc-ia64.h:171
msgid "instruction address is not a multiple of 16"
msgstr ""
-#: config/tc-ia64.c:7249
+#: config/tc-ia64.c:7277
#, c-format
msgid "Unrecognized option '-x%s'"
msgstr ""
-#: config/tc-ia64.c:7277
+#: config/tc-ia64.c:7305
msgid ""
"IA-64 options:\n"
" --mconstant-gp\t mark output file as using the constant-GP model\n"
@@ -5368,370 +5896,370 @@ msgid ""
"\t\t\t dependency violation checking\n"
msgstr ""
-#: config/tc-ia64.c:7307
+#: config/tc-ia64.c:7335
msgid "--gstabs is not supported for ia64"
msgstr ""
-#: config/tc-ia64.c:7641 config/tc-mips.c:1401
+#: config/tc-ia64.c:7640 config/tc-mips.c:1750
msgid "Could not set architecture and machine"
msgstr ""
-#: config/tc-ia64.c:7767
+#: config/tc-ia64.c:7766
msgid "Explicit stops are ignored in auto mode"
msgstr ""
-#: config/tc-ia64.c:7789
+#: config/tc-ia64.c:7788
msgid "Found '{' after explicit switch to automatic mode"
msgstr ""
-#: config/tc-ia64.c:8392
+#: config/tc-ia64.c:8393
#, c-format
msgid "Unhandled dependency %s for %s (%s), note %d"
msgstr ""
-#: config/tc-ia64.c:9667
+#: config/tc-ia64.c:9669
#, c-format
msgid "Unrecognized dependency specifier %d\n"
msgstr ""
-#: config/tc-ia64.c:10561
+#: config/tc-ia64.c:10566
msgid "Only the first path encountering the conflict is reported"
msgstr ""
-#: config/tc-ia64.c:10564
+#: config/tc-ia64.c:10569
msgid "This is the location of the conflicting usage"
msgstr ""
-#: config/tc-ia64.c:11788
+#: config/tc-ia64.c:11793
msgid "Can't add stop bit to mark end of instruction group"
msgstr ""
-#: config/tc-ia64.c:11888 read.c:1440 read.c:2206 read.c:2846 read.c:3173
-#: read.c:3204
+#: config/tc-ia64.c:11893 config/tc-score.c:6398 read.c:1442 read.c:2413
+#: read.c:3042 read.c:3375 read.c:3419
msgid "expected symbol name"
msgstr ""
-#: config/tc-ia64.c:11898 read.c:2216 read.c:2856 read.c:3188 stabs.c:466
+#: config/tc-ia64.c:11903 read.c:2423 read.c:3052 read.c:3403 stabs.c:466
#, c-format
msgid "expected comma after \"%s\""
msgstr ""
-#: config/tc-ia64.c:11940
+#: config/tc-ia64.c:11945
#, c-format
msgid "`%s' is already the alias of %s `%s'"
msgstr ""
-#: config/tc-ia64.c:11950
+#: config/tc-ia64.c:11955
#, c-format
msgid "%s `%s' already has an alias `%s'"
msgstr ""
-#: config/tc-ia64.c:11961
+#: config/tc-ia64.c:11966
#, c-format
msgid "inserting \"%s\" into %s alias hash table failed: %s"
msgstr ""
-#: config/tc-ia64.c:11969
+#: config/tc-ia64.c:11974
#, c-format
msgid "inserting \"%s\" into %s name hash table failed: %s"
msgstr ""
-#: config/tc-ia64.c:11988
+#: config/tc-ia64.c:11993
#, c-format
msgid "symbol `%s' aliased to `%s' is not used"
msgstr ""
-#: config/tc-ia64.c:12010
+#: config/tc-ia64.c:12015
#, c-format
msgid "section `%s' aliased to `%s' is not used"
msgstr ""
-#: config/tc-ip2k.c:158
+#: config/tc-ip2k.c:157
#, c-format
msgid "IP2K specific command line options:\n"
msgstr ""
-#: config/tc-ip2k.c:159
+#: config/tc-ip2k.c:158
#, c-format
msgid " -mip2022 restrict to IP2022 insns \n"
msgstr ""
-#: config/tc-ip2k.c:160
+#: config/tc-ip2k.c:159
#, c-format
msgid " -mip2022ext permit extended IP2022 insn\n"
msgstr ""
-#: config/tc-ip2k.c:274
+#: config/tc-ip2k.c:273
msgid "md_pcrel_from\n"
msgstr ""
-#: config/tc-m32c.c:128
+#: config/tc-m32c.c:137
#, c-format
msgid " M32C specific command line options:\n"
msgstr ""
#. Pretend that we do not recognise this option.
-#: config/tc-m32r.c:332
+#: config/tc-m32r.c:331
msgid "Unrecognised option: -hidden"
msgstr ""
-#: config/tc-m32r.c:359 config/tc-sparc.c:593
+#: config/tc-m32r.c:358 config/tc-sparc.c:595
msgid "Unrecognized option following -K"
msgstr ""
-#: config/tc-m32r.c:374
+#: config/tc-m32r.c:373
#, c-format
msgid " M32R specific command line options:\n"
msgstr ""
-#: config/tc-m32r.c:376
+#: config/tc-m32r.c:375
#, c-format
msgid ""
" -m32r disable support for the m32rx instruction set\n"
msgstr ""
-#: config/tc-m32r.c:378
+#: config/tc-m32r.c:377
#, c-format
msgid " -m32rx support the extended m32rx instruction set\n"
msgstr ""
-#: config/tc-m32r.c:380
+#: config/tc-m32r.c:379
#, c-format
msgid " -m32r2 support the extended m32r2 instruction set\n"
msgstr ""
-#: config/tc-m32r.c:382
+#: config/tc-m32r.c:381
#, c-format
msgid " -EL,-little produce little endian code and data\n"
msgstr ""
-#: config/tc-m32r.c:384
+#: config/tc-m32r.c:383
#, c-format
msgid " -EB,-big produce big endian code and data\n"
msgstr ""
-#: config/tc-m32r.c:386
+#: config/tc-m32r.c:385
#, c-format
msgid " -parallel try to combine instructions in parallel\n"
msgstr ""
-#: config/tc-m32r.c:388
+#: config/tc-m32r.c:387
#, c-format
msgid " -no-parallel disable -parallel\n"
msgstr ""
-#: config/tc-m32r.c:390
+#: config/tc-m32r.c:389
#, c-format
msgid ""
" -no-bitinst disallow the M32R2's extended bit-field "
"instructions\n"
msgstr ""
-#: config/tc-m32r.c:392
+#: config/tc-m32r.c:391
#, c-format
msgid " -O try to optimize code. Implies -parallel\n"
msgstr ""
-#: config/tc-m32r.c:395
+#: config/tc-m32r.c:394
#, c-format
msgid ""
" -warn-explicit-parallel-conflicts warn when parallel instructions\n"
msgstr ""
-#: config/tc-m32r.c:397
+#: config/tc-m32r.c:396
#, c-format
msgid " might violate contraints\n"
msgstr ""
-#: config/tc-m32r.c:399
+#: config/tc-m32r.c:398
#, c-format
msgid " -no-warn-explicit-parallel-conflicts do not warn when parallel\n"
msgstr ""
-#: config/tc-m32r.c:401
+#: config/tc-m32r.c:400
#, c-format
msgid ""
" instructions might violate "
"contraints\n"
msgstr ""
-#: config/tc-m32r.c:403
+#: config/tc-m32r.c:402
#, c-format
msgid ""
" -Wp synonym for -warn-explicit-parallel-conflicts\n"
msgstr ""
-#: config/tc-m32r.c:405
+#: config/tc-m32r.c:404
#, c-format
msgid ""
" -Wnp synonym for -no-warn-explicit-parallel-conflicts\n"
msgstr ""
-#: config/tc-m32r.c:407
+#: config/tc-m32r.c:406
#, c-format
msgid ""
" -ignore-parallel-conflicts do not check parallel instructions\n"
msgstr ""
-#: config/tc-m32r.c:409
+#: config/tc-m32r.c:408
#, c-format
msgid " fo contraint violations\n"
msgstr ""
-#: config/tc-m32r.c:411
+#: config/tc-m32r.c:410
#, c-format
msgid ""
" -no-ignore-parallel-conflicts check parallel instructions for\n"
msgstr ""
-#: config/tc-m32r.c:413
+#: config/tc-m32r.c:412
#, c-format
msgid " contraint violations\n"
msgstr ""
-#: config/tc-m32r.c:415
+#: config/tc-m32r.c:414
#, c-format
msgid " -Ip synonym for -ignore-parallel-conflicts\n"
msgstr ""
-#: config/tc-m32r.c:417
+#: config/tc-m32r.c:416
#, c-format
msgid " -nIp synonym for -no-ignore-parallel-conflicts\n"
msgstr ""
-#: config/tc-m32r.c:420
+#: config/tc-m32r.c:419
#, c-format
msgid ""
" -warn-unmatched-high warn when an (s)high reloc has no matching low "
"reloc\n"
msgstr ""
-#: config/tc-m32r.c:422
+#: config/tc-m32r.c:421
#, c-format
msgid " -no-warn-unmatched-high do not warn about missing low relocs\n"
msgstr ""
-#: config/tc-m32r.c:424
+#: config/tc-m32r.c:423
#, c-format
msgid " -Wuh synonym for -warn-unmatched-high\n"
msgstr ""
-#: config/tc-m32r.c:426
+#: config/tc-m32r.c:425
#, c-format
msgid " -Wnuh synonym for -no-warn-unmatched-high\n"
msgstr ""
-#: config/tc-m32r.c:429
+#: config/tc-m32r.c:428
#, c-format
msgid " -KPIC generate PIC\n"
msgstr ""
-#: config/tc-m32r.c:850
+#: config/tc-m32r.c:849
msgid "instructions write to the same destination register."
msgstr ""
-#: config/tc-m32r.c:858
+#: config/tc-m32r.c:857
msgid "Instructions do not use parallel execution pipelines."
msgstr ""
-#: config/tc-m32r.c:866
+#: config/tc-m32r.c:865
msgid "Instructions share the same execution pipeline"
msgstr ""
-#: config/tc-m32r.c:931 config/tc-m32r.c:1045
+#: config/tc-m32r.c:930 config/tc-m32r.c:1044
#, c-format
msgid "not a 16 bit instruction '%s'"
msgstr ""
-#: config/tc-m32r.c:943 config/tc-m32r.c:1057 config/tc-m32r.c:1241
+#: config/tc-m32r.c:942 config/tc-m32r.c:1056 config/tc-m32r.c:1240
#, c-format
msgid "instruction '%s' is for the M32R2 only"
msgstr ""
-#: config/tc-m32r.c:956 config/tc-m32r.c:1070 config/tc-m32r.c:1254
+#: config/tc-m32r.c:955 config/tc-m32r.c:1069 config/tc-m32r.c:1253
#, c-format
msgid "unknown instruction '%s'"
msgstr ""
-#: config/tc-m32r.c:965 config/tc-m32r.c:1077 config/tc-m32r.c:1261
+#: config/tc-m32r.c:964 config/tc-m32r.c:1076 config/tc-m32r.c:1260
#, c-format
msgid "instruction '%s' is for the M32RX only"
msgstr ""
-#: config/tc-m32r.c:974 config/tc-m32r.c:1086
+#: config/tc-m32r.c:973 config/tc-m32r.c:1085
#, c-format
msgid "instruction '%s' cannot be executed in parallel."
msgstr ""
-#: config/tc-m32r.c:1029 config/tc-m32r.c:1111 config/tc-m32r.c:1318
+#: config/tc-m32r.c:1028 config/tc-m32r.c:1110 config/tc-m32r.c:1317
msgid "internal error: lookup/get operands failed"
msgstr ""
-#: config/tc-m32r.c:1096
+#: config/tc-m32r.c:1095
#, c-format
msgid "'%s': only the NOP instruction can be issued in parallel on the m32r"
msgstr ""
-#: config/tc-m32r.c:1125
+#: config/tc-m32r.c:1124
#, c-format
msgid ""
"%s: output of 1st instruction is the same as an input to 2nd instruction - "
"is this intentional ?"
msgstr ""
-#: config/tc-m32r.c:1129
+#: config/tc-m32r.c:1128
#, c-format
msgid ""
"%s: output of 2nd instruction is the same as an input to 1st instruction - "
"is this intentional ?"
msgstr ""
-#: config/tc-m32r.c:1493 config/tc-ppc.c:1773 config/tc-ppc.c:4365
+#: config/tc-m32r.c:1492 config/tc-ppc.c:1832 config/tc-ppc.c:4372
msgid "Expected comma after symbol-name: rest of line ignored."
msgstr ""
-#: config/tc-m32r.c:1503
+#: config/tc-m32r.c:1502
#, c-format
msgid ".SCOMMon length (%ld.) <0! Ignored."
msgstr ""
-#: config/tc-m32r.c:1517 config/tc-ppc.c:1795 config/tc-ppc.c:2952
-#: config/tc-ppc.c:4389
+#: config/tc-m32r.c:1516 config/tc-ppc.c:1854 config/tc-ppc.c:2993
+#: config/tc-ppc.c:4396
msgid "ignoring bad alignment"
msgstr ""
-#: config/tc-m32r.c:1529 config/tc-ppc.c:1832 config/tc-v850.c:323
+#: config/tc-m32r.c:1528 config/tc-ppc.c:1891 config/tc-v850.c:322
msgid "Common alignment not a power of 2"
msgstr ""
-#: config/tc-m32r.c:1544 config/tc-ppc.c:1806 config/tc-ppc.c:4401
+#: config/tc-m32r.c:1543 config/tc-ppc.c:1865 config/tc-ppc.c:4408
#, c-format
msgid "Ignoring attempt to re-define symbol `%s'."
msgstr ""
-#: config/tc-m32r.c:1553
+#: config/tc-m32r.c:1552
#, c-format
msgid "Length of .scomm \"%s\" is already %ld. Not changed to %ld."
msgstr ""
-#: config/tc-m32r.c:1789
+#: config/tc-m32r.c:1788
msgid "Addend to unresolved symbol not on word boundary."
msgstr ""
-#: config/tc-m32r.c:1930 config/tc-m32r.c:1983 config/tc-sh.c:749
+#: config/tc-m32r.c:1929 config/tc-m32r.c:1982 config/tc-sh.c:747
msgid "Invalid PIC expression."
msgstr ""
-#: config/tc-m32r.c:2074
+#: config/tc-m32r.c:2073
msgid "Unmatched high/shigh reloc"
msgstr ""
-#: config/tc-m32r.c:2334 config/tc-sparc.c:3524
+#: config/tc-m32r.c:2333 config/tc-sparc.c:3604
#, c-format
msgid "internal error: can't export reloc type %d (`%s')"
msgstr ""
-#: config/tc-m68hc11.c:369
+#: config/tc-m68hc11.c:371
#, c-format
msgid ""
"Motorola 68HC11/68HC12/68HCS12 options:\n"
@@ -5741,8 +6269,8 @@ msgid ""
" -mlong use 32-bit int ABI\n"
" -mshort-double use 32-bit double ABI\n"
" -mlong-double use 64-bit double ABI (default)\n"
-" --force-long-branchs always turn relative branchs into absolute ones\n"
-" -S,--short-branchs do not turn relative branchs into absolute ones\n"
+" --force-long-branches always turn relative branches into absolute ones\n"
+" -S,--short-branches do not turn relative branches into absolute ones\n"
" when the offset is out of range\n"
" --strict-direct-mode do not turn the direct mode into extended mode\n"
" when the instruction does not support direct mode\n"
@@ -5752,56 +6280,56 @@ msgid ""
" (used for testing)\n"
msgstr ""
-#: config/tc-m68hc11.c:415
+#: config/tc-m68hc11.c:417
#, c-format
msgid "Default target `%s' is not supported."
msgstr ""
#. Dump the opcode statistics table.
-#: config/tc-m68hc11.c:433
+#: config/tc-m68hc11.c:435
#, c-format
msgid "Name # Modes Min ops Max ops Modes mask # Used\n"
msgstr ""
-#: config/tc-m68hc11.c:499
+#: config/tc-m68hc11.c:501
#, c-format
msgid "Option `%s' is not recognized."
msgstr ""
-#: config/tc-m68hc11.c:721
+#: config/tc-m68hc11.c:723
msgid "#<imm8>"
msgstr ""
-#: config/tc-m68hc11.c:730
+#: config/tc-m68hc11.c:732
msgid "#<imm16>"
msgstr ""
-#: config/tc-m68hc11.c:739 config/tc-m68hc11.c:748
+#: config/tc-m68hc11.c:741 config/tc-m68hc11.c:750
msgid "<imm8>,X"
msgstr ""
-#: config/tc-m68hc11.c:775
+#: config/tc-m68hc11.c:777
msgid "*<abs8>"
msgstr ""
-#: config/tc-m68hc11.c:787
+#: config/tc-m68hc11.c:789
msgid "#<mask>"
msgstr ""
-#: config/tc-m68hc11.c:797
+#: config/tc-m68hc11.c:799
#, c-format
msgid "symbol%d"
msgstr ""
-#: config/tc-m68hc11.c:799
+#: config/tc-m68hc11.c:801
msgid "<abs>"
msgstr ""
-#: config/tc-m68hc11.c:818
+#: config/tc-m68hc11.c:820
msgid "<label>"
msgstr ""
-#: config/tc-m68hc11.c:834
+#: config/tc-m68hc11.c:836
#, c-format
msgid ""
"# Example of `%s' instructions\n"
@@ -5809,862 +6337,902 @@ msgid ""
"_start:\n"
msgstr ""
-#: config/tc-m68hc11.c:881
+#: config/tc-m68hc11.c:883
#, c-format
msgid "Instruction `%s' is not recognized."
msgstr ""
-#: config/tc-m68hc11.c:886
+#: config/tc-m68hc11.c:888
#, c-format
msgid "Instruction formats for `%s':"
msgstr ""
-#: config/tc-m68hc11.c:1016
+#: config/tc-m68hc11.c:1018
#, c-format
msgid "Immediate operand is not allowed for operand %d."
msgstr ""
-#: config/tc-m68hc11.c:1060
+#: config/tc-m68hc11.c:1062
msgid "Indirect indexed addressing is not valid for 68HC11."
msgstr ""
-#: config/tc-m68hc11.c:1080
+#: config/tc-m68hc11.c:1082
msgid "Spurious `,' or bad indirect register addressing mode."
msgstr ""
-#: config/tc-m68hc11.c:1102
+#: config/tc-m68hc11.c:1104
msgid "Missing second register or offset for indexed-indirect mode."
msgstr ""
-#: config/tc-m68hc11.c:1112
+#: config/tc-m68hc11.c:1114
msgid "Missing second register for indexed-indirect mode."
msgstr ""
-#: config/tc-m68hc11.c:1128
+#: config/tc-m68hc11.c:1130
msgid "Missing `]' to close indexed-indirect mode."
msgstr ""
-#: config/tc-m68hc11.c:1173
+#: config/tc-m68hc11.c:1175
msgid "Illegal operand."
msgstr ""
-#: config/tc-m68hc11.c:1178
+#: config/tc-m68hc11.c:1180
msgid "Missing operand."
msgstr ""
-#: config/tc-m68hc11.c:1231
+#: config/tc-m68hc11.c:1233
msgid "Pre-increment mode is not valid for 68HC11"
msgstr ""
-#: config/tc-m68hc11.c:1244
+#: config/tc-m68hc11.c:1246
msgid "Wrong register in register indirect mode."
msgstr ""
-#: config/tc-m68hc11.c:1252
+#: config/tc-m68hc11.c:1254
msgid "Missing `]' to close register indirect operand."
msgstr ""
-#: config/tc-m68hc11.c:1272
+#: config/tc-m68hc11.c:1274
msgid "Post-decrement mode is not valid for 68HC11."
msgstr ""
-#: config/tc-m68hc11.c:1280
+#: config/tc-m68hc11.c:1282
msgid "Post-increment mode is not valid for 68HC11."
msgstr ""
-#: config/tc-m68hc11.c:1298
+#: config/tc-m68hc11.c:1300
msgid "Invalid indexed indirect mode."
msgstr ""
-#: config/tc-m68hc11.c:1390
+#: config/tc-m68hc11.c:1392
#, c-format
msgid "Trap id `%ld' is out of range."
msgstr ""
-#: config/tc-m68hc11.c:1394
+#: config/tc-m68hc11.c:1396
msgid "Trap id must be within [0x30..0x39] or [0x40..0xff]."
msgstr ""
-#: config/tc-m68hc11.c:1401
+#: config/tc-m68hc11.c:1403
#, c-format
msgid "Operand out of 8-bit range: `%ld'."
msgstr ""
-#: config/tc-m68hc11.c:1408
+#: config/tc-m68hc11.c:1410
msgid "The trap id must be a constant."
msgstr ""
-#: config/tc-m68hc11.c:1443
+#: config/tc-m68hc11.c:1445
#, c-format
msgid "Operand `%x' not recognized in fixup8."
msgstr ""
-#: config/tc-m68hc11.c:1460 config/tc-m68hc11.c:1509
+#: config/tc-m68hc11.c:1462 config/tc-m68hc11.c:1511
#, c-format
msgid "Operand out of 16-bit range: `%ld'."
msgstr ""
-#: config/tc-m68hc11.c:1492 config/tc-m68hc11.c:1525
+#: config/tc-m68hc11.c:1494 config/tc-m68hc11.c:1527
#, c-format
msgid "Operand `%x' not recognized in fixup16."
msgstr ""
-#: config/tc-m68hc11.c:1542
+#: config/tc-m68hc11.c:1544
#, c-format
msgid "Unexpected branch conversion with `%x'"
msgstr ""
-#: config/tc-m68hc11.c:1633 config/tc-m68hc11.c:1771
+#: config/tc-m68hc11.c:1635 config/tc-m68hc11.c:1773
#, c-format
msgid "Operand out of range for a relative branch: `%ld'"
msgstr ""
-#: config/tc-m68hc11.c:1739
+#: config/tc-m68hc11.c:1741
msgid "Invalid register for dbcc/tbcc instruction."
msgstr ""
-#: config/tc-m68hc11.c:1827
+#: config/tc-m68hc11.c:1829
#, c-format
msgid "Increment/decrement value is out of range: `%ld'."
msgstr ""
-#: config/tc-m68hc11.c:1838
+#: config/tc-m68hc11.c:1840
msgid "Expecting a register."
msgstr ""
-#: config/tc-m68hc11.c:1853
+#: config/tc-m68hc11.c:1855
msgid "Invalid register for post/pre increment."
msgstr ""
-#: config/tc-m68hc11.c:1883
+#: config/tc-m68hc11.c:1885
msgid "Invalid register."
msgstr ""
-#: config/tc-m68hc11.c:1890
+#: config/tc-m68hc11.c:1892
#, c-format
msgid "Offset out of 16-bit range: %ld."
msgstr ""
-#: config/tc-m68hc11.c:1895
+#: config/tc-m68hc11.c:1897
#, c-format
msgid "Offset out of 5-bit range for movw/movb insn: %ld."
msgstr ""
-#: config/tc-m68hc11.c:2001
+#: config/tc-m68hc11.c:2003
msgid "Expecting register D for indexed indirect mode."
msgstr ""
-#: config/tc-m68hc11.c:2003
+#: config/tc-m68hc11.c:2005
msgid "Indexed indirect mode is not allowed for movb/movw."
msgstr ""
-#: config/tc-m68hc11.c:2020
+#: config/tc-m68hc11.c:2022
msgid "Invalid accumulator register."
msgstr ""
-#: config/tc-m68hc11.c:2045
+#: config/tc-m68hc11.c:2047
msgid "Invalid indexed register."
msgstr ""
-#: config/tc-m68hc11.c:2053
+#: config/tc-m68hc11.c:2055
msgid "Addressing mode not implemented yet."
msgstr ""
-#: config/tc-m68hc11.c:2066
+#: config/tc-m68hc11.c:2068
msgid "Invalid source register for this instruction, use 'tfr'."
msgstr ""
-#: config/tc-m68hc11.c:2068
+#: config/tc-m68hc11.c:2070
msgid "Invalid source register."
msgstr ""
-#: config/tc-m68hc11.c:2073
+#: config/tc-m68hc11.c:2075
msgid "Invalid destination register for this instruction, use 'tfr'."
msgstr ""
-#: config/tc-m68hc11.c:2075
+#: config/tc-m68hc11.c:2077
msgid "Invalid destination register."
msgstr ""
-#: config/tc-m68hc11.c:2171
+#: config/tc-m68hc11.c:2173
msgid "Invalid indexed register, expecting register X."
msgstr ""
-#: config/tc-m68hc11.c:2173
+#: config/tc-m68hc11.c:2175
msgid "Invalid indexed register, expecting register Y."
msgstr ""
-#: config/tc-m68hc11.c:2479
+#: config/tc-m68hc11.c:2481
msgid "No instruction or missing opcode."
msgstr ""
-#: config/tc-m68hc11.c:2544
+#: config/tc-m68hc11.c:2546
#, c-format
msgid "Opcode `%s' is not recognized."
msgstr ""
-#: config/tc-m68hc11.c:2566
+#: config/tc-m68hc11.c:2568
#, c-format
msgid "Garbage at end of instruction: `%s'."
msgstr ""
-#: config/tc-m68hc11.c:2589
+#: config/tc-m68hc11.c:2591
#, c-format
msgid "Invalid operand for `%s'"
msgstr ""
-#: config/tc-m68hc11.c:2640
+#: config/tc-m68hc11.c:2642
#, c-format
msgid "Invalid mode: %s\n"
msgstr ""
-#: config/tc-m68hc11.c:2700
+#: config/tc-m68hc11.c:2702
msgid "bad .relax format"
msgstr ""
-#: config/tc-m68hc11.c:2744
+#: config/tc-m68hc11.c:2746
#, c-format
msgid "Relocation %d is not supported by object file format."
msgstr ""
-#: config/tc-m68hc11.c:3023
+#: config/tc-m68hc11.c:3025
msgid "bra or bsr with undefined symbol."
msgstr ""
-#: config/tc-m68hc11.c:3126 config/tc-m68hc11.c:3183
+#: config/tc-m68hc11.c:3128 config/tc-m68hc11.c:3185
#, c-format
msgid "Subtype %d is not recognized."
msgstr ""
-#: config/tc-m68hc11.c:3242
+#: config/tc-m68hc11.c:3244
msgid "Expression too complex."
msgstr ""
-#: config/tc-m68hc11.c:3275
+#: config/tc-m68hc11.c:3277
msgid "Value out of 16-bit range."
msgstr ""
-#: config/tc-m68hc11.c:3293
+#: config/tc-m68hc11.c:3295
#, c-format
msgid "Value %ld too large for 8-bit PC-relative branch."
msgstr ""
-#: config/tc-m68hc11.c:3300
+#: config/tc-m68hc11.c:3302
#, c-format
msgid "Auto increment/decrement offset '%ld' is out of range."
msgstr ""
-#: config/tc-m68hc11.c:3313
+#: config/tc-m68hc11.c:3315
#, c-format
msgid "Offset out of 5-bit range for movw/movb insn: %ld"
msgstr ""
-#: config/tc-m68hc11.c:3329
+#: config/tc-m68hc11.c:3331
#, c-format
msgid "Line %d: unknown relocation type: 0x%x."
msgstr ""
-#: config/tc-m68k.c:696
-msgid "no matching ColdFire architectures found"
-msgstr ""
-
-#: config/tc-m68k.c:710
-msgid " or "
-msgstr ""
-
-#: config/tc-m68k.c:715
-msgid ", or "
-msgstr ""
-
-#: config/tc-m68k.c:732
-msgid ", or aliases"
-msgstr ""
-
-#: config/tc-m68k.c:843
+#: config/tc-m68k.c:1009
#, c-format
msgid "Can not do %d byte pc-relative relocation"
msgstr ""
-#: config/tc-m68k.c:845
+#: config/tc-m68k.c:1011
#, c-format
msgid "Can not do %d byte pc-relative pic relocation"
msgstr ""
-#: config/tc-m68k.c:850
+#: config/tc-m68k.c:1016
#, c-format
msgid "Can not do %d byte relocation"
msgstr ""
-#: config/tc-m68k.c:852
+#: config/tc-m68k.c:1018
#, c-format
msgid "Can not do %d byte pic relocation"
msgstr ""
-#: config/tc-m68k.c:915
+#: config/tc-m68k.c:1083
#, c-format
msgid "Unable to produce reloc against symbol '%s'"
msgstr ""
-#: config/tc-m68k.c:959 config/tc-vax.c:3435
+#: config/tc-m68k.c:1127 config/tc-vax.c:2366
#, c-format
msgid "Cannot make %s relocation PC relative"
msgstr ""
-#: config/tc-m68k.c:1050 config/tc-vax.c:1890
+#: config/tc-m68k.c:1226 config/tc-vax.c:1876
msgid "No operator"
msgstr ""
-#: config/tc-m68k.c:1080 config/tc-vax.c:1907
+#: config/tc-m68k.c:1256 config/tc-vax.c:1892
msgid "Unknown operator"
msgstr ""
-#: config/tc-m68k.c:1944
+#: config/tc-m68k.c:2143
msgid "invalid instruction for this architecture; needs "
msgstr ""
-#: config/tc-m68k.c:1950
+#: config/tc-m68k.c:2147
msgid "ColdFire ISA_A"
msgstr ""
-#: config/tc-m68k.c:1958
+#: config/tc-m68k.c:2150
msgid "ColdFire hardware divide"
msgstr ""
-#: config/tc-m68k.c:1966
+#: config/tc-m68k.c:2153
msgid "ColdFire ISA_A+"
msgstr ""
-#: config/tc-m68k.c:1974
+#: config/tc-m68k.c:2156
msgid "ColdFire ISA_B"
msgstr ""
-#: config/tc-m68k.c:1982
+#: config/tc-m68k.c:2159
msgid "ColdFire fpu"
msgstr ""
-#: config/tc-m68k.c:1989
-msgid "fpu (68040, 68060 or 68881/68882)"
+#: config/tc-m68k.c:2162
+msgid "M68K fpu"
msgstr ""
-#: config/tc-m68k.c:1992
-msgid "mmu (68030 or 68851)"
+#: config/tc-m68k.c:2165
+msgid "M68K mmu"
msgstr ""
-#: config/tc-m68k.c:1995
+#: config/tc-m68k.c:2168
msgid "68020 or higher"
msgstr ""
-#: config/tc-m68k.c:1998
+#: config/tc-m68k.c:2171
msgid "68000 or higher"
msgstr ""
-#: config/tc-m68k.c:2001
+#: config/tc-m68k.c:2174
msgid "68010 or higher"
msgstr ""
-#: config/tc-m68k.c:2029
+#: config/tc-m68k.c:2227
msgid "operands mismatch"
msgstr ""
-#: config/tc-m68k.c:2090 config/tc-m68k.c:2096 config/tc-m68k.c:2102
-#: config/tc-mmix.c:2488 config/tc-mmix.c:2512
+#: config/tc-m68k.c:2290 config/tc-m68k.c:2296 config/tc-m68k.c:2302
+#: config/tc-mmix.c:2487 config/tc-mmix.c:2511
msgid "operand out of range"
msgstr ""
-#: config/tc-m68k.c:2159
+#: config/tc-m68k.c:2359
#, c-format
msgid "Bignum too big for %c format; truncated"
msgstr ""
-#: config/tc-m68k.c:2236
+#: config/tc-m68k.c:2436
msgid "displacement too large for this architecture; needs 68020 or higher"
msgstr ""
-#: config/tc-m68k.c:2347
+#: config/tc-m68k.c:2547
msgid ""
"scale factor invalid on this architecture; needs cpu32 or 68020 or higher"
msgstr ""
-#: config/tc-m68k.c:2352
+#: config/tc-m68k.c:2552
msgid "invalid index size for coldfire"
msgstr ""
-#: config/tc-m68k.c:2405
+#: config/tc-m68k.c:2605
msgid "Forcing byte displacement"
msgstr ""
-#: config/tc-m68k.c:2407
+#: config/tc-m68k.c:2607
msgid "byte displacement out of range"
msgstr ""
-#: config/tc-m68k.c:2455 config/tc-m68k.c:2493
+#: config/tc-m68k.c:2655 config/tc-m68k.c:2693
msgid "invalid operand mode for this architecture; needs 68020 or higher"
msgstr ""
-#: config/tc-m68k.c:2479 config/tc-m68k.c:2513
+#: config/tc-m68k.c:2679 config/tc-m68k.c:2713
msgid ":b not permitted; defaulting to :w"
msgstr ""
-#: config/tc-m68k.c:2590
+#: config/tc-m68k.c:2790
msgid "unsupported byte value; use a different suffix"
msgstr ""
-#: config/tc-m68k.c:2605
+#: config/tc-m68k.c:2805
msgid "unknown/incorrect operand"
msgstr ""
-#: config/tc-m68k.c:2648 config/tc-m68k.c:2656 config/tc-m68k.c:2663
-#: config/tc-m68k.c:2670
+#: config/tc-m68k.c:2848 config/tc-m68k.c:2856 config/tc-m68k.c:2863
+#: config/tc-m68k.c:2870
msgid "out of range"
msgstr ""
-#: config/tc-m68k.c:2716
-msgid "Can't use long branches on 68000/68010/5200"
+#: config/tc-m68k.c:2942
+msgid "Can't use long branches on this architecture"
msgstr ""
-#: config/tc-m68k.c:2833
+#: config/tc-m68k.c:3047
msgid "Expression out of range, using 0"
msgstr ""
-#: config/tc-m68k.c:3014 config/tc-m68k.c:3030
+#: config/tc-m68k.c:3238 config/tc-m68k.c:3254
msgid "Floating point register in register list"
msgstr ""
-#: config/tc-m68k.c:3020
+#: config/tc-m68k.c:3244
msgid "Wrong register in floating-point reglist"
msgstr ""
-#: config/tc-m68k.c:3036
+#: config/tc-m68k.c:3260
msgid "incorrect register in reglist"
msgstr ""
-#: config/tc-m68k.c:3042
+#: config/tc-m68k.c:3266
msgid "wrong register in floating-point reglist"
msgstr ""
#. ERROR.
-#: config/tc-m68k.c:3505
+#: config/tc-m68k.c:3729
msgid "Extra )"
msgstr ""
#. ERROR.
-#: config/tc-m68k.c:3516
+#: config/tc-m68k.c:3740
msgid "Missing )"
msgstr ""
-#: config/tc-m68k.c:3533
+#: config/tc-m68k.c:3757
msgid "Missing operand"
msgstr ""
-#: config/tc-m68k.c:3890
+#: config/tc-m68k.c:4074
+#, c-format
+msgid "unrecognized default cpu `%s'"
+msgstr ""
+
+#: config/tc-m68k.c:4128
#, c-format
msgid "%s -- statement `%s' ignored"
msgstr ""
-#: config/tc-m68k.c:3939
+#: config/tc-m68k.c:4177
#, c-format
msgid "Don't know how to figure width of %c in md_assemble()"
msgstr ""
-#: config/tc-m68k.c:4108
+#: config/tc-m68k.c:4346
#, c-format
msgid "Internal Error: Can't allocate m68k_sorted_opcodes of size %d"
msgstr ""
-#: config/tc-m68k.c:4159 config/tc-m68k.c:4198
+#: config/tc-m68k.c:4397 config/tc-m68k.c:4436
#, c-format
msgid "Internal Error: Can't find %s in hash table"
msgstr ""
-#: config/tc-m68k.c:4162 config/tc-m68k.c:4201
+#: config/tc-m68k.c:4400 config/tc-m68k.c:4439
#, c-format
msgid "Internal Error: Can't hash %s: %s"
msgstr ""
-#: config/tc-m68k.c:4282
-msgid "architecture not yet selected: defaulting to 68020"
+#: config/tc-m68k.c:4564
+#, c-format
+msgid "text label `%s' aligned to odd boundary"
msgstr ""
-#: config/tc-m68k.c:4342
+#: config/tc-m68k.c:4764
#, c-format
-msgid "unrecognized default cpu `%s' ???"
+msgid "value %ld out of range"
msgstr ""
-#: config/tc-m68k.c:4353
-msgid "68040 and 68851 specified; mmu instructions may assemble incorrectly"
+#: config/tc-m68k.c:4778
+msgid "invalid byte branch offset"
msgstr ""
-#: config/tc-m68k.c:4370
-msgid "options for 68881 and no-68881 both given"
+#: config/tc-m68k.c:4814
+msgid "short branch with zero offset: use :w"
msgstr ""
-#: config/tc-m68k.c:4373
-msgid "options for 68851 and no-68851 both given"
+#: config/tc-m68k.c:4839
+msgid "Conversion of PC relative BSR to absolute JSR"
msgstr ""
-#: config/tc-m68k.c:4434
-#, c-format
-msgid "text label `%s' aligned to odd boundary"
+#: config/tc-m68k.c:4850
+msgid "Conversion of PC relative branch to absolute jump"
msgstr ""
-#: config/tc-m68k.c:4638
-msgid "invalid byte branch offset"
+#: config/tc-m68k.c:4867 config/tc-m68k.c:4928
+msgid "Conversion of PC relative conditional branch to absolute jump"
msgstr ""
-#: config/tc-m68k.c:4674
-msgid "short branch with zero offset: use :w"
+#: config/tc-m68k.c:4908
+msgid "Conversion of DBcc to absolute jump"
msgstr ""
-#: config/tc-m68k.c:4698
-msgid "Tried to convert PC relative BSR to absolute JSR"
+#: config/tc-m68k.c:4992
+msgid "Conversion of PC relative displacement to absolute"
msgstr ""
-#: config/tc-m68k.c:4708 config/tc-m68k.c:5054
+#: config/tc-m68k.c:5204
msgid "Tried to convert PC relative branch to absolute jump"
msgstr ""
-#: config/tc-m68k.c:4724 config/tc-m68k.c:4783 config/tc-m68k.c:4847
-msgid "Tried to convert PC relative conditional branch to absolute jump"
-msgstr ""
-
-#: config/tc-m68k.c:4764
-msgid "Tried to convert DBcc to absolute jump"
-msgstr ""
-
-#: config/tc-m68k.c:5098 config/tc-m68k.c:5109 config/tc-m68k.c:5149
+#: config/tc-m68k.c:5248 config/tc-m68k.c:5259 config/tc-m68k.c:5299
msgid "expression out of range: defaulting to 1"
msgstr ""
-#: config/tc-m68k.c:5141
+#: config/tc-m68k.c:5291
msgid "expression out of range: defaulting to 0"
msgstr ""
-#: config/tc-m68k.c:5182 config/tc-m68k.c:5194
+#: config/tc-m68k.c:5332 config/tc-m68k.c:5344
#, c-format
msgid "Can't deal with expression; defaulting to %ld"
msgstr ""
-#: config/tc-m68k.c:5208
+#: config/tc-m68k.c:5358
msgid "expression doesn't fit in BYTE"
msgstr ""
-#: config/tc-m68k.c:5212
+#: config/tc-m68k.c:5362
msgid "expression doesn't fit in WORD"
msgstr ""
-#: config/tc-m68k.c:5299
+#: config/tc-m68k.c:5449
#, c-format
msgid "%s: unrecognized processor name"
msgstr ""
-#: config/tc-m68k.c:5363
+#: config/tc-m68k.c:5510
msgid "bad coprocessor id"
msgstr ""
-#: config/tc-m68k.c:5369
+#: config/tc-m68k.c:5516
msgid "unrecognized fopt option"
msgstr ""
-#: config/tc-m68k.c:5502
+#: config/tc-m68k.c:5649
#, c-format
msgid "option `%s' may not be negated"
msgstr ""
-#: config/tc-m68k.c:5513
+#: config/tc-m68k.c:5660
#, c-format
msgid "option `%s' not recognized"
msgstr ""
-#: config/tc-m68k.c:5542
+#: config/tc-m68k.c:5689
msgid "bad format of OPT NEST=depth"
msgstr ""
-#: config/tc-m68k.c:5598
+#: config/tc-m68k.c:5745
msgid "missing label"
msgstr ""
-#: config/tc-m68k.c:5622 config/tc-m68k.c:5651
+#: config/tc-m68k.c:5769 config/tc-m68k.c:5798
msgid "bad register list"
msgstr ""
-#: config/tc-m68k.c:5624
+#: config/tc-m68k.c:5771
#, c-format
msgid "bad register list: %s"
msgstr ""
-#: config/tc-m68k.c:5722
+#: config/tc-m68k.c:5869
msgid "restore without save"
msgstr ""
-#: config/tc-m68k.c:5876 config/tc-m68k.c:6246
+#: config/tc-m68k.c:6023 config/tc-m68k.c:6393
msgid "syntax error in structured control directive"
msgstr ""
-#: config/tc-m68k.c:5921
+#: config/tc-m68k.c:6068
msgid "missing condition code in structured control directive"
msgstr ""
-#: config/tc-m68k.c:5992
+#: config/tc-m68k.c:6139
#, c-format
msgid ""
"Condition <%c%c> in structured control directive can not be encoded correctly"
msgstr ""
-#: config/tc-m68k.c:6288
+#: config/tc-m68k.c:6435
msgid "missing then"
msgstr ""
-#: config/tc-m68k.c:6369
+#: config/tc-m68k.c:6516
msgid "else without matching if"
msgstr ""
-#: config/tc-m68k.c:6402
+#: config/tc-m68k.c:6549
msgid "endi without matching if"
msgstr ""
-#: config/tc-m68k.c:6442
+#: config/tc-m68k.c:6589
msgid "break outside of structured loop"
msgstr ""
-#: config/tc-m68k.c:6480
+#: config/tc-m68k.c:6627
msgid "next outside of structured loop"
msgstr ""
-#: config/tc-m68k.c:6531
+#: config/tc-m68k.c:6678
msgid "missing ="
msgstr ""
-#: config/tc-m68k.c:6569
+#: config/tc-m68k.c:6716
msgid "missing to or downto"
msgstr ""
-#: config/tc-m68k.c:6605 config/tc-m68k.c:6639 config/tc-m68k.c:6853
+#: config/tc-m68k.c:6752 config/tc-m68k.c:6786 config/tc-m68k.c:7000
msgid "missing do"
msgstr ""
-#: config/tc-m68k.c:6740
+#: config/tc-m68k.c:6887
msgid "endf without for"
msgstr ""
-#: config/tc-m68k.c:6794
+#: config/tc-m68k.c:6941
msgid "until without repeat"
msgstr ""
-#: config/tc-m68k.c:6888
+#: config/tc-m68k.c:7035
msgid "endw without while"
msgstr ""
-#: config/tc-m68k.c:7050
+#: config/tc-m68k.c:7068 config/tc-m68k.c:7096
+msgid "already assembled instructions"
+msgstr ""
+
+#: config/tc-m68k.c:7173
+#, c-format
+msgid "`%s' is deprecated, use `%s'"
+msgstr ""
+
+#: config/tc-m68k.c:7192
+#, c-format
+msgid "cpu `%s' unrecognized"
+msgstr ""
+
+#: config/tc-m68k.c:7198
+#, c-format
+msgid "already selected `%s' processor"
+msgstr ""
+
+#: config/tc-m68k.c:7218
+#, c-format
+msgid "architecture `%s' unrecognized"
+msgstr ""
+
+#: config/tc-m68k.c:7224
+#, c-format
+msgid "already selected `%s' architecture"
+msgstr ""
+
+#: config/tc-m68k.c:7247
#, c-format
-msgid "unrecognized architecture specification `%s'"
+msgid "extension `%s' unrecognized"
msgstr ""
-#: config/tc-m68k.c:7143
+#: config/tc-m68k.c:7365
+#, c-format
+msgid "option `-A%s' is deprecated: use `-%s'"
+msgstr ""
+
+#: config/tc-m68k.c:7398
+msgid "architecture features both enabled and disabled"
+msgstr ""
+
+#: config/tc-m68k.c:7425
+msgid "selected processor does not have all features of selected architecture"
+msgstr ""
+
+#: config/tc-m68k.c:7434
+msgid "m68k and cf features both selected"
+msgstr ""
+
+#: config/tc-m68k.c:7446
+msgid "68040 and 68851 specified; mmu instructions may assemble incorrectly"
+msgstr ""
+
+#: config/tc-m68k.c:7480
#, c-format
msgid ""
-"680X0 options:\n"
-"-l\t\t\tuse 1 word for refs to undefined symbols [default 2]\n"
-"-m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040 | -m68060 |\n"
-"-m68302 | -m68331 | -m68332 | -m68333 | -m68340 | -m68360 | -mcpu32 |\n"
-"-m5200 | -m5202 | -m5204 | -m5206 | -m5206e | -m521x | -m5249 |\n"
-"-m528x | -m5307 | -m5407 | -m547x | -m548x | -mcfv4 | -mcfv4e\n"
-"\t\t\tspecify variant of 680X0 architecture [default %s]\n"
-"-m68881 | -m68882 | -mno-68881 | -mno-68882\n"
-"\t\t\ttarget has/lacks floating-point coprocessor\n"
-"\t\t\t[default yes for 68020, 68030, and cpu32]\n"
+"-march=<arch>\t\tset architecture\n"
+"-mcpu=<cpu>\t\tset cpu [default %s]\n"
msgstr ""
-#: config/tc-m68k.c:7155
+#: config/tc-m68k.c:7485
+#, c-format
+msgid "-m[no-]%-16s enable/disable%s architecture extension\n"
+msgstr ""
+
+#: config/tc-m68k.c:7491
#, c-format
msgid ""
-"-m68851 | -mno-68851\n"
-"\t\t\ttarget has/lacks memory-management unit coprocessor\n"
-"\t\t\t[default yes for 68020 and up]\n"
+"-l\t\t\tuse 1 word for refs to undefined symbols [default 2]\n"
"-pic, -k\t\tgenerate position independent code\n"
"-S\t\t\tturn jbsr into jsr\n"
"--pcrel never turn PC-relative branches into absolute jumps\n"
"--register-prefix-optional\n"
"\t\t\trecognize register names without prefix character\n"
"--bitwise-or\t\tdo not treat `|' as a comment character\n"
-msgstr ""
-
-#: config/tc-m68k.c:7165
-#, c-format
-msgid ""
"--base-size-default-16\tbase reg without size is 16 bits\n"
"--base-size-default-32\tbase reg without size is 32 bits (default)\n"
"--disp-size-default-16\tdisplacement with unknown size is 16 bits\n"
"--disp-size-default-32\tdisplacement with unknown size is 32 bits (default)\n"
msgstr ""
-#: config/tc-m68k.c:7200
+#: config/tc-m68k.c:7505
+#, c-format
+msgid "Architecture variants are: "
+msgstr ""
+
+#: config/tc-m68k.c:7514
+#, c-format
+msgid "Processor variants are: "
+msgstr ""
+
+#: config/tc-m68k.c:7521 config/tc-xtensa.c:6029
+#, c-format
+msgid "\n"
+msgstr ""
+
+#: config/tc-m68k.c:7552
#, c-format
msgid "Error %s in %s\n"
msgstr ""
-#: config/tc-m68k.c:7204
+#: config/tc-m68k.c:7556
#, c-format
msgid "Opcode(%d.%s): "
msgstr ""
-#: config/tc-mcore.c:524
+#: config/tc-m68k.c:7715
+msgid "Not a defined coldfire architecture"
+msgstr ""
+
+#: config/tc-mcore.c:521
#, c-format
msgid "register expected, but saw '%.6s'"
msgstr ""
-#: config/tc-mcore.c:606
+#: config/tc-mcore.c:603
#, c-format
msgid "control register expected, but saw '%.6s'"
msgstr ""
-#: config/tc-mcore.c:642
+#: config/tc-mcore.c:639
msgid "bad/missing psr specifier"
msgstr ""
-#: config/tc-mcore.c:692
+#: config/tc-mcore.c:689
msgid "more than 65K literal pools"
msgstr ""
-#: config/tc-mcore.c:746
+#: config/tc-mcore.c:743
msgid "missing ']'"
msgstr ""
-#: config/tc-mcore.c:785
+#: config/tc-mcore.c:782
msgid "operand must be a constant"
msgstr ""
-#: config/tc-mcore.c:787
+#: config/tc-mcore.c:784
#, c-format
msgid "operand must be absolute in range %u..%u, not %ld"
msgstr ""
-#: config/tc-mcore.c:822
+#: config/tc-mcore.c:819
msgid "operand must be a multiple of 4"
msgstr ""
-#: config/tc-mcore.c:829
+#: config/tc-mcore.c:826
msgid "operand must be a multiple of 2"
msgstr ""
-#: config/tc-mcore.c:843 config/tc-mcore.c:1359 config/tc-mcore.c:1413
+#: config/tc-mcore.c:840 config/tc-mcore.c:1356 config/tc-mcore.c:1410
msgid "base register expected"
msgstr ""
-#: config/tc-mcore.c:891
+#: config/tc-mcore.c:888
#, c-format
msgid "unknown opcode \"%s\""
msgstr ""
-#: config/tc-mcore.c:934
+#: config/tc-mcore.c:931
msgid "invalid register: r15 illegal"
msgstr ""
-#: config/tc-mcore.c:983 config/tc-mcore.c:1564
+#: config/tc-mcore.c:980 config/tc-mcore.c:1561
msgid "M340 specific opcode used when assembling for M210"
msgstr ""
-#: config/tc-mcore.c:1001 config/tc-mcore.c:1041 config/tc-mcore.c:1060
-#: config/tc-mcore.c:1079 config/tc-mcore.c:1107 config/tc-mcore.c:1136
-#: config/tc-mcore.c:1173 config/tc-mcore.c:1208 config/tc-mcore.c:1227
-#: config/tc-mcore.c:1246 config/tc-mcore.c:1280 config/tc-mcore.c:1305
-#: config/tc-mcore.c:1362 config/tc-mcore.c:1416 config/tc-mcore.c:1452
-#: config/tc-mcore.c:1511 config/tc-mcore.c:1533 config/tc-mcore.c:1556
+#: config/tc-mcore.c:998 config/tc-mcore.c:1038 config/tc-mcore.c:1057
+#: config/tc-mcore.c:1076 config/tc-mcore.c:1104 config/tc-mcore.c:1133
+#: config/tc-mcore.c:1170 config/tc-mcore.c:1205 config/tc-mcore.c:1224
+#: config/tc-mcore.c:1243 config/tc-mcore.c:1277 config/tc-mcore.c:1302
+#: config/tc-mcore.c:1359 config/tc-mcore.c:1413 config/tc-mcore.c:1449
+#: config/tc-mcore.c:1508 config/tc-mcore.c:1530 config/tc-mcore.c:1553
msgid "second operand missing"
msgstr ""
-#: config/tc-mcore.c:1017
+#: config/tc-mcore.c:1014
msgid "destination register must be r1"
msgstr ""
-#: config/tc-mcore.c:1038
+#: config/tc-mcore.c:1035
msgid "source register must be r1"
msgstr ""
-#: config/tc-mcore.c:1102 config/tc-mcore.c:1159
+#: config/tc-mcore.c:1099 config/tc-mcore.c:1156
msgid "immediate is not a power of two"
msgstr ""
-#: config/tc-mcore.c:1130
+#: config/tc-mcore.c:1127
msgid "translating bgeni to movi"
msgstr ""
-#: config/tc-mcore.c:1167
+#: config/tc-mcore.c:1164
msgid "translating mgeni to movi"
msgstr ""
-#: config/tc-mcore.c:1199
+#: config/tc-mcore.c:1196
msgid "translating bmaski to movi"
msgstr ""
-#: config/tc-mcore.c:1275
+#: config/tc-mcore.c:1272
#, c-format
msgid "displacement too large (%d)"
msgstr ""
-#: config/tc-mcore.c:1289
+#: config/tc-mcore.c:1286
msgid "Invalid register: r0 and r15 illegal"
msgstr ""
-#: config/tc-mcore.c:1320
+#: config/tc-mcore.c:1317
msgid "bad starting register: r0 and r15 invalid"
msgstr ""
-#: config/tc-mcore.c:1333
+#: config/tc-mcore.c:1330
msgid "ending register must be r15"
msgstr ""
-#: config/tc-mcore.c:1353
+#: config/tc-mcore.c:1350
msgid "bad base register: must be r0"
msgstr ""
-#: config/tc-mcore.c:1371
+#: config/tc-mcore.c:1368
msgid "first register must be r4"
msgstr ""
-#: config/tc-mcore.c:1382
+#: config/tc-mcore.c:1379
msgid "last register must be r7"
msgstr ""
-#: config/tc-mcore.c:1419
+#: config/tc-mcore.c:1416
msgid "reg-reg expected"
msgstr ""
-#: config/tc-mcore.c:1530
+#: config/tc-mcore.c:1527
msgid "second operand must be 1"
msgstr ""
-#: config/tc-mcore.c:1551
+#: config/tc-mcore.c:1548
msgid "zero used as immediate value"
msgstr ""
-#: config/tc-mcore.c:1578
+#: config/tc-mcore.c:1575
msgid "duplicated psr bit specifier"
msgstr ""
-#: config/tc-mcore.c:1584
+#: config/tc-mcore.c:1581
msgid "`af' must appear alone"
msgstr ""
-#: config/tc-mcore.c:1591
+#: config/tc-mcore.c:1588
#, c-format
msgid "unimplemented opcode \"%s\""
msgstr ""
-#: config/tc-mcore.c:1600
+#: config/tc-mcore.c:1597
#, c-format
msgid "ignoring operands: %s "
msgstr ""
-#: config/tc-mcore.c:1665
+#: config/tc-mcore.c:1662
msgid "Bad call to MD_NTOF()"
msgstr ""
-#: config/tc-mcore.c:1736
+#: config/tc-mcore.c:1733
#, c-format
msgid "unrecognised cpu type '%s'"
msgstr ""
-#: config/tc-mcore.c:1754
+#: config/tc-mcore.c:1751
#, c-format
msgid ""
"MCORE specific options:\n"
@@ -6675,671 +7243,763 @@ msgid ""
" -EL assemble for a little endian system\n"
msgstr ""
-#: config/tc-mcore.c:1772
+#: config/tc-mcore.c:1769
msgid "failed sanity check: short_jump"
msgstr ""
-#: config/tc-mcore.c:1782
+#: config/tc-mcore.c:1779
msgid "failed sanity check: long_jump"
msgstr ""
-#: config/tc-mcore.c:1808
+#: config/tc-mcore.c:1805
#, c-format
msgid "odd displacement at %x"
msgstr ""
-#: config/tc-mcore.c:1990
+#: config/tc-mcore.c:1987
msgid "unknown"
msgstr ""
-#: config/tc-mcore.c:2017
+#: config/tc-mcore.c:2014
#, c-format
msgid "odd distance branch (0x%lx bytes)"
msgstr ""
-#: config/tc-mcore.c:2021
+#: config/tc-mcore.c:2018
#, c-format
msgid "pcrel for branch to %s too far (0x%lx)"
msgstr ""
-#: config/tc-mcore.c:2041
+#: config/tc-mcore.c:2038
#, c-format
msgid "pcrel for lrw/jmpi/jsri to %s too far (0x%lx)"
msgstr ""
-#: config/tc-mcore.c:2053
+#: config/tc-mcore.c:2050
#, c-format
msgid "pcrel for loopt too far (0x%lx)"
msgstr ""
-#: config/tc-mcore.c:2263
+#: config/tc-mcore.c:2246
#, c-format
msgid "Can not do %d byte %srelocation"
msgstr ""
-#: config/tc-mcore.c:2265
+#: config/tc-mcore.c:2248
msgid "pc-relative"
msgstr ""
+#: config/tc-mep.c:300
+#, c-format
+msgid ""
+"MeP specific command line options:\n"
+" -EB assemble for a big endian system (default)\n"
+" -EL assemble for a little endian system\n"
+" -mconfig=<name> specify a chip configuration to use\n"
+" -maverage -mno-average -mmult -mno-mult -mdiv -mno-div\n"
+" -mbitops -mno-bitops -mleadz -mno-leadz -mabsdiff -mno-absdiff\n"
+" -mminmax -mno-minmax -mclip -mno-clip -msatur -mno-satur -mcop32\n"
+" enable/disable the given opcodes\n"
+"\n"
+" If -mconfig is given, the other -m options modify it. Otherwise,\n"
+" if no -m options are given, all core opcodes are enabled;\n"
+" if any enabling -m options are given, only those are enabled;\n"
+" if only disabling -m options are given, only those are disabled.\n"
+msgstr ""
+
+#. There are no insns in the queue and a plus is present.
+#. This is a syntax error. Let's not tolerate this.
+#. We can relax this later if necessary.
+#: config/tc-mep.c:1007
+msgid "Invalid use of parallelization operator."
+msgstr ""
+
+#: config/tc-mep.c:1049
+msgid "Leading plus sign not allowed in core mode"
+msgstr ""
+
+#: config/tc-mep.c:1530
+#, c-format
+msgid "Don't know how to relocate plain operands of type %s"
+msgstr ""
+
+#: config/tc-mep.c:1540
+#, c-format
+msgid "Perhaps you are missing %%tpoff()?"
+msgstr ""
+
+#: config/tc-mep.c:1646
+msgid "Unmatched high relocation"
+msgstr ""
+
+#: config/tc-mep.c:1772
+msgid "Bad .section directive: want a,v,w,x,M,S in string"
+msgstr ""
+
+#: config/tc-mep.c:1830
+msgid ".vliw unavailable when VLIW is disabled."
+msgstr ""
+
#. Prototypes for static functions.
-#: config/tc-mips.c:957
+#: config/tc-mips.c:988
#, c-format
msgid "internal Error, line %d, %s"
msgstr ""
-#: config/tc-mips.c:1443
+#: config/tc-mips.c:1745
+msgid "-G may not be used in position-independent code"
+msgstr ""
+
+#: config/tc-mips.c:1792
#, c-format
msgid "internal: can't hash `%s': %s"
msgstr ""
-#: config/tc-mips.c:1451
+#: config/tc-mips.c:1800
#, c-format
msgid "internal error: bad mips16 opcode: %s %s\n"
msgstr ""
-#: config/tc-mips.c:1652
+#: config/tc-mips.c:1972
#, c-format
msgid "returned from mips_ip(%s) insn_opcode = 0x%x\n"
msgstr ""
-#: config/tc-mips.c:2327 config/tc-mips.c:13480
+#: config/tc-mips.c:2681 config/tc-mips.c:14040
msgid "extended instruction in delay slot"
msgstr ""
-#: config/tc-mips.c:2391 config/tc-mips.c:2401
+#: config/tc-mips.c:2745 config/tc-mips.c:2752
#, c-format
msgid "jump to misaligned address (0x%lx)"
msgstr ""
-#: config/tc-mips.c:2394 config/tc-mips.c:2404
+#: config/tc-mips.c:2762 config/tc-mips.c:3524
+#, c-format
+msgid "branch to misaligned address (0x%lx)"
+msgstr ""
+
+#: config/tc-mips.c:2767 config/tc-mips.c:3527
#, c-format
-msgid "jump address range overflow (0x%lx)"
+msgid "branch address range overflow (0x%lx)"
msgstr ""
-#: config/tc-mips.c:2893
+#: config/tc-mips.c:3252
msgid ""
"Macro instruction expanded into multiple instructions in a branch delay slot"
msgstr ""
-#: config/tc-mips.c:2896
+#: config/tc-mips.c:3255
msgid "Macro instruction expanded into multiple instructions"
msgstr ""
-#: config/tc-mips.c:3414 config/tc-mips.c:7338 config/tc-mips.c:7362
-#: config/tc-mips.c:7435 config/tc-mips.c:7458
+#: config/tc-mips.c:3796 config/tc-mips.c:7741 config/tc-mips.c:7765
+#: config/tc-mips.c:7838 config/tc-mips.c:7861
msgid "operand overflow"
msgstr ""
-#: config/tc-mips.c:3433 config/tc-mips.c:4033 config/tc-mips.c:6734
-#: config/tc-mips.c:7525
+#: config/tc-mips.c:3815 config/tc-mips.c:4415 config/tc-mips.c:7137
+#: config/tc-mips.c:7928
msgid "Macro used $at after \".set noat\""
msgstr ""
-#: config/tc-mips.c:3462
+#: config/tc-mips.c:3844
msgid "unsupported large constant"
msgstr ""
-#: config/tc-mips.c:3464
+#: config/tc-mips.c:3846
#, c-format
msgid "Instruction %s requires absolute expression"
msgstr ""
-#: config/tc-mips.c:3597 config/tc-mips.c:5844 config/tc-mips.c:6438
+#: config/tc-mips.c:3979 config/tc-mips.c:6249 config/tc-mips.c:6841
#, c-format
msgid "Number (0x%s) larger than 32 bits"
msgstr ""
-#: config/tc-mips.c:3617
+#: config/tc-mips.c:3999
msgid "Number larger than 64 bits"
msgstr ""
-#: config/tc-mips.c:3911 config/tc-mips.c:3939 config/tc-mips.c:3977
-#: config/tc-mips.c:4022 config/tc-mips.c:6053 config/tc-mips.c:6092
-#: config/tc-mips.c:6131 config/tc-mips.c:6553 config/tc-mips.c:6605
+#: config/tc-mips.c:4293 config/tc-mips.c:4321 config/tc-mips.c:4359
+#: config/tc-mips.c:4404 config/tc-mips.c:6458 config/tc-mips.c:6497
+#: config/tc-mips.c:6536 config/tc-mips.c:6956 config/tc-mips.c:7008
+#: config/tc-score.c:4239
msgid "PIC code offset overflow (max 16 signed bits)"
msgstr ""
-#: config/tc-mips.c:4328 config/tc-mips.c:4394 config/tc-mips.c:4482
-#: config/tc-mips.c:4529 config/tc-mips.c:4590 config/tc-mips.c:4638
-#: config/tc-mips.c:7619 config/tc-mips.c:7626 config/tc-mips.c:7633
-#: config/tc-mips.c:7740
+#: config/tc-mips.c:4726 config/tc-mips.c:4792 config/tc-mips.c:4880
+#: config/tc-mips.c:4927 config/tc-mips.c:4988 config/tc-mips.c:5036
+#: config/tc-mips.c:8022 config/tc-mips.c:8029 config/tc-mips.c:8036
+#: config/tc-mips.c:8143
msgid "Unsupported large constant"
msgstr ""
#. result is always true
-#: config/tc-mips.c:4360
+#: config/tc-mips.c:4758
#, c-format
msgid "Branch %s is always true"
msgstr ""
-#: config/tc-mips.c:4601 config/tc-mips.c:4649 config/tc-mips.c:8309
+#: config/tc-mips.c:4999 config/tc-mips.c:5047 config/tc-mips.c:8808
#, c-format
msgid "Improper position (%lu)"
msgstr ""
-#: config/tc-mips.c:4607 config/tc-mips.c:8376
+#: config/tc-mips.c:5005 config/tc-mips.c:8875
#, c-format
msgid "Improper extract size (%lu, position %lu)"
msgstr ""
-#: config/tc-mips.c:4655 config/tc-mips.c:8340
+#: config/tc-mips.c:5053 config/tc-mips.c:8839
#, c-format
msgid "Improper insert size (%lu, position %lu)"
msgstr ""
-#: config/tc-mips.c:4692 config/tc-mips.c:4789
+#: config/tc-mips.c:5090 config/tc-mips.c:5187
msgid "Divide by zero."
msgstr ""
-#: config/tc-mips.c:4875
+#: config/tc-mips.c:5273
msgid "dla used to load 32-bit register"
msgstr ""
-#: config/tc-mips.c:4878
+#: config/tc-mips.c:5276
msgid "la used to load 64-bit address"
msgstr ""
-#: config/tc-mips.c:4990
+#: config/tc-mips.c:5388 config/tc-z80.c:700
msgid "offset too large"
msgstr ""
-#: config/tc-mips.c:5162 config/tc-mips.c:5441
+#: config/tc-mips.c:5562 config/tc-mips.c:5841
msgid "PIC code offset overflow (max 32 signed bits)"
msgstr ""
-#: config/tc-mips.c:5487
+#: config/tc-mips.c:5887
msgid "MIPS PIC call to register other than $25"
msgstr ""
-#: config/tc-mips.c:5493 config/tc-mips.c:5504 config/tc-mips.c:5628
-#: config/tc-mips.c:5639
+#: config/tc-mips.c:5893 config/tc-mips.c:5904 config/tc-mips.c:6026
+#: config/tc-mips.c:6037
msgid "No .cprestore pseudo-op used in PIC code"
msgstr ""
-#: config/tc-mips.c:5498 config/tc-mips.c:5633
+#: config/tc-mips.c:5898 config/tc-mips.c:6031
msgid "No .frame pseudo-op used in PIC code"
msgstr ""
-#: config/tc-mips.c:5704 config/tc-mips.c:5792 config/tc-mips.c:6338
-#: config/tc-mips.c:6369 config/tc-mips.c:6387 config/tc-mips.c:7037
+#: config/tc-mips.c:6052
+msgid "Non-PIC jump used in PIC library"
+msgstr ""
+
+#: config/tc-mips.c:6104 config/tc-mips.c:6195 config/tc-mips.c:6741
+#: config/tc-mips.c:6772 config/tc-mips.c:6790 config/tc-mips.c:7440
msgid "opcode not supported on this processor"
msgstr ""
-#: config/tc-mips.c:6903 config/tc-mips.c:6934 config/tc-mips.c:6985
-#: config/tc-mips.c:7015
+#: config/tc-mips.c:7306 config/tc-mips.c:7337 config/tc-mips.c:7388
+#: config/tc-mips.c:7418
msgid "Improper rotate count"
msgstr ""
-#: config/tc-mips.c:7070
+#: config/tc-mips.c:7473
#, c-format
msgid "Instruction %s: result is always false"
msgstr ""
-#: config/tc-mips.c:7216
+#: config/tc-mips.c:7619
#, c-format
msgid "Instruction %s: result is always true"
msgstr ""
#. FIXME: Check if this is one of the itbl macros, since they
#. are added dynamically.
-#: config/tc-mips.c:7521
+#: config/tc-mips.c:7924
#, c-format
msgid "Macro %s not implemented yet"
msgstr ""
-#: config/tc-mips.c:7771
+#: config/tc-mips.c:8174
#, c-format
msgid "internal: bad mips opcode (mask error): %s %s"
msgstr ""
-#: config/tc-mips.c:7799 config/tc-mips.c:8430
+#: config/tc-mips.c:8206 config/tc-mips.c:8929
#, c-format
msgid "internal: bad mips opcode (unknown extension operand type `+%c'): %s %s"
msgstr ""
-#: config/tc-mips.c:7876
+#: config/tc-mips.c:8284
#, c-format
msgid "internal: bad mips opcode (unknown operand type `%c'): %s %s"
msgstr ""
-#: config/tc-mips.c:7883
+#: config/tc-mips.c:8291
#, c-format
msgid "internal: bad mips opcode (bits 0x%lx undefined): %s %s"
msgstr ""
-#: config/tc-mips.c:8000
+#: config/tc-mips.c:8473 config/tc-mips.c:9806
#, c-format
msgid "opcode not supported on this processor: %s (%s)"
msgstr ""
-#: config/tc-mips.c:8031 config/tc-mips.c:8045 config/tc-mips.c:8059
-#: config/tc-mips.c:8073 config/tc-mips.c:8100 config/tc-mips.c:8147
+#: config/tc-mips.c:8506
+#, c-format
+msgid "BALIGN immediate not 1 or 3 (%lu)"
+msgstr ""
+
+#: config/tc-mips.c:8519 config/tc-mips.c:8532 config/tc-mips.c:8545
+#: config/tc-mips.c:8558 config/tc-mips.c:8584 config/tc-mips.c:8628
#, c-format
msgid "DSP immediate not in range 0..%d (%lu)"
msgstr ""
-#: config/tc-mips.c:8092 config/tc-mips.c:8120
+#: config/tc-mips.c:8576 config/tc-mips.c:8603
msgid "Invalid dsp acc register"
msgstr ""
-#: config/tc-mips.c:8131 config/tc-mips.c:8165 config/tc-mips.c:8184
+#: config/tc-mips.c:8614 config/tc-mips.c:8645 config/tc-mips.c:8662
#, c-format
msgid "DSP immediate not in range %ld..%ld (%ld)"
msgstr ""
-#: config/tc-mips.c:8200 config/tc-mips.c:8214
+#: config/tc-mips.c:8675
+#, c-format
+msgid "MT usermode bit not 0 or 1 (%lu)"
+msgstr ""
+
+#: config/tc-mips.c:8686
#, c-format
-msgid "MT immediate not in range 0..%d (%lu)"
+msgid "MT load high bit not 0 or 1 (%lu)"
msgstr ""
-#: config/tc-mips.c:8233 config/tc-mips.c:8246
+#: config/tc-mips.c:8703 config/tc-mips.c:8716
msgid "Invalid dsp/smartmips acc register"
msgstr ""
-#: config/tc-mips.c:8395 config/tc-mips.c:8899
+#: config/tc-mips.c:8781
+#, c-format
+msgid "Illegal %s number (%lu, 0x%lx)"
+msgstr ""
+
+#: config/tc-mips.c:8894 config/tc-mips.c:9315
msgid "absolute expression required"
msgstr ""
-#: config/tc-mips.c:8418 config/tc-mips.c:8579
+#: config/tc-mips.c:8917
#, c-format
msgid "Invalid register number (%d)"
msgstr ""
-#: config/tc-mips.c:8426
+#: config/tc-mips.c:8925
msgid "Invalid coprocessor 0 register number"
msgstr ""
-#: config/tc-mips.c:8447
+#: config/tc-mips.c:8946
#, c-format
msgid "Improper shift amount (%lu)"
msgstr ""
-#: config/tc-mips.c:8470 config/tc-mips.c:9731 config/tc-mips.c:9844
+#: config/tc-mips.c:8969 config/tc-mips.c:10119 config/tc-mips.c:10372
#, c-format
msgid "Invalid value for `%s' (%lu)"
msgstr ""
-#: config/tc-mips.c:8485
+#: config/tc-mips.c:8984
#, c-format
-msgid "Illegal break code (%lu)"
+msgid "Code for %s not in range 0..1023 (%lu)"
msgstr ""
-#: config/tc-mips.c:8496
+#: config/tc-mips.c:8996
#, c-format
-msgid "Illegal lower break code (%lu)"
+msgid "Lower code for %s not in range 0..1023 (%lu)"
msgstr ""
-#: config/tc-mips.c:8507
+#: config/tc-mips.c:9008
#, c-format
-msgid "Illegal 20-bit code (%lu)"
+msgid "Code for %s not in range 0..1048575 (%lu)"
msgstr ""
-#: config/tc-mips.c:8519
+#: config/tc-mips.c:9021
#, c-format
msgid "Coproccesor code > 25 bits (%lu)"
msgstr ""
-#: config/tc-mips.c:8532
+#: config/tc-mips.c:9035
#, c-format
msgid "Illegal 19-bit code (%lu)"
msgstr ""
-#: config/tc-mips.c:8543
+#: config/tc-mips.c:9048
#, c-format
msgid "Invalid performance register (%lu)"
msgstr ""
-#: config/tc-mips.c:8754
+#: config/tc-mips.c:9188
#, c-format
msgid "Invalid MDMX Immediate (%ld)"
msgstr ""
-#: config/tc-mips.c:8794
-#, c-format
-msgid "Invalid float register number (%d)"
-msgstr ""
-
-#: config/tc-mips.c:8810
+#: config/tc-mips.c:9226
#, c-format
msgid "Float register should be even, was %d"
msgstr ""
-#: config/tc-mips.c:8849
+#: config/tc-mips.c:9265
#, c-format
msgid "Bad element selector %ld"
msgstr ""
-#: config/tc-mips.c:8857
+#: config/tc-mips.c:9273
#, c-format
msgid "Expecting ']' found '%s'"
msgstr ""
-#: config/tc-mips.c:8963
+#: config/tc-mips.c:9379
#, c-format
msgid "Bad floating point constant: %s"
msgstr ""
-#: config/tc-mips.c:9084
+#: config/tc-mips.c:9499
msgid "Can't use floating point insn in this section"
msgstr ""
-#: config/tc-mips.c:9145
+#: config/tc-mips.c:9560
msgid "expression out of range"
msgstr ""
-#: config/tc-mips.c:9185
+#: config/tc-mips.c:9600
msgid "lui expression not in range 0..65535"
msgstr ""
-#: config/tc-mips.c:9209
-#, c-format
-msgid "Invalid condition code register $fcc%d"
-msgstr ""
-
-#: config/tc-mips.c:9214
+#: config/tc-mips.c:9621
#, c-format
msgid "Condition code register should be even for %s, was %d"
msgstr ""
-#: config/tc-mips.c:9219
+#: config/tc-mips.c:9626
#, c-format
msgid "Condition code register should be 0 or 4 for %s, was %d"
msgstr ""
-#: config/tc-mips.c:9245
+#: config/tc-mips.c:9652
msgid "invalid coprocessor sub-selection value (0-7)"
msgstr ""
-#: config/tc-mips.c:9257 config/tc-mips.c:9274
+#: config/tc-mips.c:9664 config/tc-mips.c:9681
#, c-format
msgid "bad byte vector index (%ld)"
msgstr ""
-#: config/tc-mips.c:9285
+#: config/tc-mips.c:9692
#, c-format
msgid "bad char = '%c'\n"
msgstr ""
-#: config/tc-mips.c:9296 config/tc-mips.c:9301 config/tc-mips.c:9869
+#: config/tc-mips.c:9703 config/tc-mips.c:9708 config/tc-mips.c:10397
msgid "illegal operands"
msgstr ""
-#: config/tc-mips.c:9367
+#: config/tc-mips.c:9776 config/tc-score.c:2418
msgid "unrecognized opcode"
msgstr ""
-#: config/tc-mips.c:9504
-#, c-format
-msgid "invalid register number (%d)"
-msgstr ""
-
-#: config/tc-mips.c:9595
+#: config/tc-mips.c:9983
msgid "used $at without \".set noat\""
msgstr ""
-#: config/tc-mips.c:9763
+#: config/tc-mips.c:10155 config/tc-mips.c:10236 config/tc-mips.c:10251
msgid "can't parse register list"
msgstr ""
-#: config/tc-mips.c:9987
+#: config/tc-mips.c:10224
+msgid "more than one frame size in list"
+msgstr ""
+
+#: config/tc-mips.c:10279
+msgid "unexpected register in list"
+msgstr ""
+
+#: config/tc-mips.c:10289
+msgid "arg/static registers overlap"
+msgstr ""
+
+#: config/tc-mips.c:10307
+msgid "invalid arg register list"
+msgstr ""
+
+#: config/tc-mips.c:10316 config/tc-mips.c:10339
+msgid "invalid static register list"
+msgstr ""
+
+#: config/tc-mips.c:10346
+msgid "missing frame size"
+msgstr ""
+
+#: config/tc-mips.c:10349
+msgid "invalid frame size"
+msgstr ""
+
+#: config/tc-mips.c:10515
msgid "extended operand requested but not required"
msgstr ""
-#: config/tc-mips.c:9989
+#: config/tc-mips.c:10517
msgid "invalid unextended operand value"
msgstr ""
-#: config/tc-mips.c:10017
+#: config/tc-mips.c:10545
msgid "operand value out of range for instruction"
msgstr ""
-#: config/tc-mips.c:10469
+#: config/tc-mips.c:11007
#, c-format
msgid "A different %s was already specified, is now %s"
msgstr ""
-#: config/tc-mips.c:10689
+#: config/tc-mips.c:11242
msgid "-call_shared is supported only for ELF format"
msgstr ""
-#: config/tc-mips.c:10696 config/tc-mips.c:10725 config/tc-mips.c:11834
-#: config/tc-mips.c:12060
-msgid "-G may not be used with SVR4 PIC code"
-msgstr ""
-
-#: config/tc-mips.c:10705
+#: config/tc-mips.c:11252
msgid "-non_shared is supported only for ELF format"
msgstr ""
-#: config/tc-mips.c:10736
+#: config/tc-mips.c:11278
msgid "-32 is supported for ELF format only"
msgstr ""
-#: config/tc-mips.c:10745
+#: config/tc-mips.c:11287
msgid "-n32 is supported for ELF format only"
msgstr ""
-#: config/tc-mips.c:10754
+#: config/tc-mips.c:11296
msgid "-64 is supported for ELF format only"
msgstr ""
-#: config/tc-mips.c:10759 config/tc-mips.c:10796
+#: config/tc-mips.c:11301 config/tc-mips.c:11338
msgid "No compiled in support for 64 bit object file format"
msgstr ""
-#: config/tc-mips.c:10783
+#: config/tc-mips.c:11325
msgid "-mabi is supported for ELF format only"
msgstr ""
-#: config/tc-mips.c:10803
+#: config/tc-mips.c:11345
#, c-format
msgid "invalid abi -mabi=%s"
msgstr ""
-#: config/tc-mips.c:10877
+#: config/tc-mips.c:11423
msgid "-G not supported in this configuration."
msgstr ""
-#: config/tc-mips.c:10903
+#: config/tc-mips.c:11449
#, c-format
msgid "-%s conflicts with the other architecture options, which imply -%s"
msgstr ""
-#: config/tc-mips.c:10934
+#: config/tc-mips.c:11480
msgid "-mgp64 used with a 32-bit processor"
msgstr ""
-#: config/tc-mips.c:10936
+#: config/tc-mips.c:11482
msgid "-mgp32 used with a 64-bit ABI"
msgstr ""
-#: config/tc-mips.c:10938
+#: config/tc-mips.c:11484
msgid "-mgp64 used with a 32-bit ABI"
msgstr ""
-#: config/tc-mips.c:10968
+#: config/tc-mips.c:11522
+msgid "-mfp64 used with a 32-bit fpu"
+msgstr ""
+
+#: config/tc-mips.c:11525
+msgid "-mfp64 used with a 32-bit ABI"
+msgstr ""
+
+#: config/tc-mips.c:11529
+msgid "-mfp32 used with a 64-bit ABI"
+msgstr ""
+
+#: config/tc-mips.c:11543
msgid "trap exception not supported at ISA 1"
msgstr ""
-#: config/tc-mips.c:11229
-msgid "Cannot branch to undefined symbol."
+#: config/tc-mips.c:11553
+msgid "-mfp32 used with -mips3d"
msgstr ""
-#: config/tc-mips.c:11236
-msgid "Cannot branch to symbol in another section."
+#: config/tc-mips.c:11559
+msgid "-mfp32 used with -mdmx"
msgstr ""
-#: config/tc-mips.c:11245
-msgid "Pretending global symbol used as branch target is local."
+#: config/tc-mips.c:11632
+msgid "PC relative MIPS16 instruction references a different section"
msgstr ""
-#: config/tc-mips.c:11402 config/tc-sparc.c:3229 config/tc-sparc.c:3236
-#: config/tc-sparc.c:3243 config/tc-sparc.c:3250 config/tc-sparc.c:3257
-#: config/tc-sparc.c:3266 config/tc-sparc.c:3277 config/tc-sparc.c:3299
-#: config/tc-sparc.c:3323 write.c:861 write.c:933
+#: config/tc-mips.c:11923 config/tc-sparc.c:3283 config/tc-sparc.c:3290
+#: config/tc-sparc.c:3297 config/tc-sparc.c:3304 config/tc-sparc.c:3311
+#: config/tc-sparc.c:3320 config/tc-sparc.c:3331 config/tc-sparc.c:3353
+#: config/tc-sparc.c:3377 write.c:1096
msgid "relocation overflow"
msgstr ""
-#: config/tc-mips.c:11412
+#: config/tc-mips.c:11933
#, c-format
-msgid "Branch to odd address (%lx)"
+msgid "Branch to misaligned address (%lx)"
msgstr ""
-#: config/tc-mips.c:11461
+#: config/tc-mips.c:11980
msgid "Branch out of range"
msgstr ""
-#: config/tc-mips.c:11540
+#: config/tc-mips.c:12055
#, c-format
msgid "Alignment too large: %d. assumed."
msgstr ""
-#: config/tc-mips.c:11543
+#: config/tc-mips.c:12058
msgid "Alignment negative: 0 assumed."
msgstr ""
-#: config/tc-mips.c:11780
+#: config/tc-mips.c:12302
#, c-format
msgid "%s: no such section"
msgstr ""
-#: config/tc-mips.c:11829
+#: config/tc-mips.c:12351
#, c-format
msgid ".option pic%d not supported"
msgstr ""
-#: config/tc-mips.c:11840
+#: config/tc-mips.c:12356 config/tc-mips.c:12648
+msgid "-G may not be used with SVR4 PIC code"
+msgstr ""
+
+#: config/tc-mips.c:12362
#, c-format
msgid "Unrecognized option \"%s\""
msgstr ""
-#: config/tc-mips.c:11893
+#: config/tc-mips.c:12415
msgid "`noreorder' must be set before `nomacro'"
msgstr ""
-#: config/tc-mips.c:11952
+#: config/tc-mips.c:12532
#, c-format
msgid "unknown architecture %s"
msgstr ""
-#: config/tc-mips.c:11965 config/tc-mips.c:11995
+#: config/tc-mips.c:12545 config/tc-mips.c:12575
#, c-format
msgid "unknown ISA level %s"
msgstr ""
-#: config/tc-mips.c:11973
+#: config/tc-mips.c:12553
#, c-format
msgid "unknown ISA or architecture %s"
msgstr ""
-#: config/tc-mips.c:12023
+#: config/tc-mips.c:12603
msgid ".set pop with no .set push"
msgstr ""
-#: config/tc-mips.c:12044
+#: config/tc-mips.c:12632
#, c-format
msgid "Tried to set unrecognized symbol: %s\n"
msgstr ""
-#: config/tc-mips.c:12102
+#: config/tc-mips.c:12690
msgid ".cpload not in noreorder section"
msgstr ""
-#: config/tc-mips.c:12171 config/tc-mips.c:12190
+#: config/tc-mips.c:12758 config/tc-mips.c:12777
msgid "missing argument separator ',' for .cpsetup"
msgstr ""
-#: config/tc-mips.c:12380
+#: config/tc-mips.c:12971 config/tc-score.c:6323
msgid "Unsupported use of .gpword"
msgstr ""
-#: config/tc-mips.c:12416
+#: config/tc-mips.c:13011
msgid "Unsupported use of .gpdword"
msgstr ""
-#: config/tc-mips.c:12548
-msgid "expected `$'"
-msgstr ""
-
-#: config/tc-mips.c:12556
-msgid "Bad register number"
-msgstr ""
-
-#: config/tc-mips.c:12604
-msgid "Unrecognized register name"
-msgstr ""
-
-#: config/tc-mips.c:12837
+#: config/tc-mips.c:13356
msgid "unsupported PC relative reference to different section"
msgstr ""
-#: config/tc-mips.c:12950 config/tc-xtensa.c:1593 config/tc-xtensa.c:1804
+#: config/tc-mips.c:13469 config/tc-xtensa.c:1537 config/tc-xtensa.c:1772
msgid "unsupported relocation"
msgstr ""
-#: config/tc-mips.c:13158
+#: config/tc-mips.c:13719
#, c-format
msgid "Can not represent %s relocation in this object file format"
msgstr ""
-#: config/tc-mips.c:13244
+#: config/tc-mips.c:13804
msgid "relaxed out-of-range branch into a jump"
msgstr ""
-#: config/tc-mips.c:13766
+#: config/tc-mips.c:14334
msgid "missing .end at end of assembly"
msgstr ""
-#: config/tc-mips.c:13781
+#: config/tc-mips.c:14349 config/tc-score.c:5929
msgid "expected simple number"
msgstr ""
-#: config/tc-mips.c:13807
+#: config/tc-mips.c:14375 config/tc-score.c:5955
#, c-format
msgid " *input_line_pointer == '%c' 0x%02x\n"
msgstr ""
-#: config/tc-mips.c:13809
+#: config/tc-mips.c:14377 config/tc-score.c:5956
msgid "invalid number"
msgstr ""
-#: config/tc-mips.c:13882
+#: config/tc-mips.c:14450 config/tc-score.c:6105
msgid ".end not in text section"
msgstr ""
-#: config/tc-mips.c:13886
+#: config/tc-mips.c:14454 config/tc-score.c:6108
msgid ".end directive without a preceding .ent directive."
msgstr ""
-#: config/tc-mips.c:13895
+#: config/tc-mips.c:14463 config/tc-score.c:6116
msgid ".end symbol does not match .ent symbol."
msgstr ""
-#: config/tc-mips.c:13902
+#: config/tc-mips.c:14470 config/tc-score.c:6121
msgid ".end directive missing or unknown symbol"
msgstr ""
-#: config/tc-mips.c:13978
+#: config/tc-mips.c:14545 config/tc-score.c:5994
msgid ".ent or .aent not in text section."
msgstr ""
-#: config/tc-mips.c:13981
+#: config/tc-mips.c:14548 config/tc-score.c:5996
msgid "missing .end"
msgstr ""
-#: config/tc-mips.c:14033
+#: config/tc-mips.c:14600
msgid "Bad .frame directive"
msgstr ""
-#: config/tc-mips.c:14065
+#: config/tc-mips.c:14632
msgid ".mask/.fmask outside of .ent"
msgstr ""
-#: config/tc-mips.c:14072
+#: config/tc-mips.c:14639
msgid "Bad .mask/.fmask directive"
msgstr ""
-#: config/tc-mips.c:14337
+#: config/tc-mips.c:14934
#, c-format
msgid ""
"MIPS options:\n"
@@ -7350,7 +8010,7 @@ msgid ""
"\t\t\timplicitly with the gp register [default 8]\n"
msgstr ""
-#: config/tc-mips.c:14344
+#: config/tc-mips.c:14941
#, c-format
msgid ""
"-mips1\t\t\tgenerate MIPS ISA I instructions\n"
@@ -7365,7 +8025,7 @@ msgid ""
"-march=CPU/-mtune=CPU\tgenerate code/schedule for CPU, where CPU is one of:\n"
msgstr ""
-#: config/tc-mips.c:14363
+#: config/tc-mips.c:14960
#, c-format
msgid ""
"-mCPU\t\t\tequivalent to -march=CPU -mtune=CPU. Deprecated.\n"
@@ -7373,35 +8033,48 @@ msgid ""
"\t\t\tFor -mCPU and -no-mCPU, CPU must be one of:\n"
msgstr ""
-#: config/tc-mips.c:14376
+#: config/tc-mips.c:14973
#, c-format
msgid ""
"-mips16\t\t\tgenerate mips16 instructions\n"
"-no-mips16\t\tdo not generate mips16 instructions\n"
msgstr ""
-#: config/tc-mips.c:14379
+#: config/tc-mips.c:14976
+#, c-format
+msgid ""
+"-msmartmips\t\tgenerate smartmips instructions\n"
+"-mno-smartmips\t\tdo not generate smartmips instructions\n"
+msgstr ""
+
+#: config/tc-mips.c:14979
#, c-format
msgid ""
"-mdsp\t\t\tgenerate DSP instructions\n"
"-mno-dsp\t\tdo not generate DSP instructions\n"
msgstr ""
-#: config/tc-mips.c:14382
+#: config/tc-mips.c:14982
+#, c-format
+msgid ""
+"-mdspr2\t\t\tgenerate DSP R2 instructions\n"
+"-mno-dspr2\t\tdo not generate DSP R2 instructions\n"
+msgstr ""
+
+#: config/tc-mips.c:14985
#, c-format
msgid ""
"-mmt\t\t\tgenerate MT instructions\n"
"-mno-mt\t\t\tdo not generate MT instructions\n"
msgstr ""
-#: config/tc-mips.c:14385
+#: config/tc-mips.c:14988
#, c-format
msgid ""
"-mfix-vr4120\t\twork around certain VR4120 errata\n"
"-mfix-vr4130\t\twork around VR4130 mflo/mfhi errata\n"
"-mgp32\t\t\tuse 32-bit GPRs, regardless of the chosen ISA\n"
"-mfp32\t\t\tuse 32-bit FPRs, regardless of the chosen ISA\n"
-"-mno-shared\t\toptimize output for executables\n"
"-msym32\t\t\tassume all symbols have 32-bit values\n"
"-O0\t\t\tremove unneeded NOPs, do not swap branches\n"
"-O\t\t\tremove unneeded NOPs and swap branches\n"
@@ -7410,19 +8083,20 @@ msgid ""
"--break, --no-trap\tbreak exception on div by 0 and mult overflow\n"
msgstr ""
-#: config/tc-mips.c:14398
+#: config/tc-mips.c:15000
#, c-format
msgid ""
"-KPIC, -call_shared\tgenerate SVR4 position independent code\n"
+"-mvxworks-pic\t\tgenerate VxWorks position independent code\n"
"-non_shared\t\tdo not generate position independent code\n"
"-xgot\t\t\tassume a 32 bit GOT\n"
"-mpdr, -mno-pdr\t\tenable/disable creation of .pdr sections\n"
"-mshared, -mno-shared disable/enable .cpload optimization for\n"
-" non-shared code\n"
+" position dependent (non shared) code\n"
"-mabi=ABI\t\tcreate ABI conformant object file for:\n"
msgstr ""
-#: config/tc-mips.c:14417
+#: config/tc-mips.c:15020
#, c-format
msgid ""
"-32\t\t\tcreate o32 ABI object file (default)\n"
@@ -7430,54 +8104,54 @@ msgid ""
"-64\t\t\tcreate 64 ABI object file\n"
msgstr ""
-#: config/tc-mmix.c:694
+#: config/tc-mmix.c:693
#, c-format
msgid " MMIX-specific command line options:\n"
msgstr ""
-#: config/tc-mmix.c:695
+#: config/tc-mmix.c:694
#, c-format
msgid ""
" -fixed-special-register-names\n"
" Allow only the original special register names.\n"
msgstr ""
-#: config/tc-mmix.c:698
+#: config/tc-mmix.c:697
#, c-format
msgid " -globalize-symbols Make all symbols global.\n"
msgstr ""
-#: config/tc-mmix.c:700
+#: config/tc-mmix.c:699
#, c-format
msgid " -gnu-syntax Turn off mmixal syntax compatibility.\n"
msgstr ""
-#: config/tc-mmix.c:702
+#: config/tc-mmix.c:701
#, c-format
msgid " -relax Create linker relaxable code.\n"
msgstr ""
-#: config/tc-mmix.c:704
+#: config/tc-mmix.c:703
#, c-format
msgid ""
" -no-predefined-syms Do not provide mmixal built-in constants.\n"
" Implies -fixed-special-register-names.\n"
msgstr ""
-#: config/tc-mmix.c:707
+#: config/tc-mmix.c:706
#, c-format
msgid ""
" -no-expand Do not expand GETA, branches, PUSHJ or JUMP\n"
" into multiple instructions.\n"
msgstr ""
-#: config/tc-mmix.c:710
+#: config/tc-mmix.c:709
#, c-format
msgid ""
" -no-merge-gregs Do not merge GREG definitions with nearby values.\n"
msgstr ""
-#: config/tc-mmix.c:712
+#: config/tc-mmix.c:711
#, c-format
msgid ""
" -linker-allocated-gregs If there's no suitable GREG definition for "
@@ -7485,7 +8159,7 @@ msgid ""
"resolve.\n"
msgstr ""
-#: config/tc-mmix.c:715
+#: config/tc-mmix.c:714
#, c-format
msgid ""
" -x Do not warn when an operand to GETA, a branch,\n"
@@ -7494,185 +8168,185 @@ msgid ""
" -linker-allocated-gregs."
msgstr ""
-#: config/tc-mmix.c:841
+#: config/tc-mmix.c:840
#, c-format
msgid "unknown opcode: `%s'"
msgstr ""
-#: config/tc-mmix.c:963 config/tc-mmix.c:978
+#: config/tc-mmix.c:962 config/tc-mmix.c:977
msgid "specified location wasn't TETRA-aligned"
msgstr ""
-#: config/tc-mmix.c:965 config/tc-mmix.c:980 config/tc-mmix.c:4124
-#: config/tc-mmix.c:4140
+#: config/tc-mmix.c:964 config/tc-mmix.c:979 config/tc-mmix.c:4125
+#: config/tc-mmix.c:4141
msgid "unaligned data at an absolute location is not supported"
msgstr ""
-#: config/tc-mmix.c:1090
+#: config/tc-mmix.c:1089
#, c-format
msgid "invalid operand to opcode %s: `%s'"
msgstr ""
-#: config/tc-mmix.c:1112 config/tc-mmix.c:1139 config/tc-mmix.c:1172
-#: config/tc-mmix.c:1180 config/tc-mmix.c:1197 config/tc-mmix.c:1225
-#: config/tc-mmix.c:1246 config/tc-mmix.c:1271 config/tc-mmix.c:1319
-#: config/tc-mmix.c:1417 config/tc-mmix.c:1442 config/tc-mmix.c:1474
-#: config/tc-mmix.c:1506 config/tc-mmix.c:1536 config/tc-mmix.c:1589
-#: config/tc-mmix.c:1606 config/tc-mmix.c:1633 config/tc-mmix.c:1661
-#: config/tc-mmix.c:1688 config/tc-mmix.c:1714 config/tc-mmix.c:1730
-#: config/tc-mmix.c:1756 config/tc-mmix.c:1772 config/tc-mmix.c:1788
-#: config/tc-mmix.c:1851 config/tc-mmix.c:1867
+#: config/tc-mmix.c:1111 config/tc-mmix.c:1138 config/tc-mmix.c:1171
+#: config/tc-mmix.c:1179 config/tc-mmix.c:1196 config/tc-mmix.c:1224
+#: config/tc-mmix.c:1245 config/tc-mmix.c:1270 config/tc-mmix.c:1318
+#: config/tc-mmix.c:1416 config/tc-mmix.c:1441 config/tc-mmix.c:1473
+#: config/tc-mmix.c:1505 config/tc-mmix.c:1535 config/tc-mmix.c:1588
+#: config/tc-mmix.c:1605 config/tc-mmix.c:1632 config/tc-mmix.c:1660
+#: config/tc-mmix.c:1687 config/tc-mmix.c:1713 config/tc-mmix.c:1729
+#: config/tc-mmix.c:1755 config/tc-mmix.c:1771 config/tc-mmix.c:1787
+#: config/tc-mmix.c:1850 config/tc-mmix.c:1866
#, c-format
msgid "invalid operands to opcode %s: `%s'"
msgstr ""
-#: config/tc-mmix.c:1844
+#: config/tc-mmix.c:1843
#, c-format
msgid "unsupported operands to %s: `%s'"
msgstr ""
-#: config/tc-mmix.c:1969
+#: config/tc-mmix.c:1968
msgid "internal: mmix_prefix_name but empty prefix"
msgstr ""
-#: config/tc-mmix.c:2013
+#: config/tc-mmix.c:2012
#, c-format
msgid "too many GREG registers allocated (max %d)"
msgstr ""
-#: config/tc-mmix.c:2071
+#: config/tc-mmix.c:2070
msgid "BSPEC already active. Nesting is not supported."
msgstr ""
-#: config/tc-mmix.c:2080
+#: config/tc-mmix.c:2079
msgid "invalid BSPEC expression"
msgstr ""
-#: config/tc-mmix.c:2096
+#: config/tc-mmix.c:2095
#, c-format
msgid "can't create section %s"
msgstr ""
-#: config/tc-mmix.c:2101
+#: config/tc-mmix.c:2100
#, c-format
msgid "can't set section flags for section %s"
msgstr ""
-#: config/tc-mmix.c:2122
+#: config/tc-mmix.c:2121
msgid "ESPEC without preceding BSPEC"
msgstr ""
-#: config/tc-mmix.c:2151
+#: config/tc-mmix.c:2150
msgid "missing local expression"
msgstr ""
-#: config/tc-mmix.c:2389
+#: config/tc-mmix.c:2388
msgid "operand out of range, instruction expanded"
msgstr ""
#. The BFD_RELOC_MMIX_LOCAL-specific message is supposed to be
#. user-friendly, though a little bit non-substantial.
-#: config/tc-mmix.c:2640
+#: config/tc-mmix.c:2639
msgid "directive LOCAL must be placed in code or data"
msgstr ""
-#: config/tc-mmix.c:2641
+#: config/tc-mmix.c:2640
msgid "internal confusion: relocation in a section without contents"
msgstr ""
-#: config/tc-mmix.c:2755
+#: config/tc-mmix.c:2754
msgid "internal: BFD_RELOC_MMIX_BASE_PLUS_OFFSET not resolved to section"
msgstr ""
-#: config/tc-mmix.c:2803
+#: config/tc-mmix.c:2802
msgid "no suitable GREG definition for operands"
msgstr ""
-#: config/tc-mmix.c:2862
+#: config/tc-mmix.c:2861
msgid "operands were not reducible at assembly-time"
msgstr ""
-#: config/tc-mmix.c:2889
+#: config/tc-mmix.c:2888
#, c-format
msgid "cannot generate relocation type for symbol %s, code %s"
msgstr ""
-#: config/tc-mmix.c:2909
+#: config/tc-mmix.c:2908
#, c-format
msgid "internal: unhandled label %s"
msgstr ""
-#: config/tc-mmix.c:2939
+#: config/tc-mmix.c:2938
msgid "[0-9]H labels may not appear alone on a line"
msgstr ""
-#: config/tc-mmix.c:2948
+#: config/tc-mmix.c:2947
msgid "[0-9]H labels do not mix with dot-pseudos"
msgstr ""
-#: config/tc-mmix.c:3036
+#: config/tc-mmix.c:3035
msgid "invalid characters in input"
msgstr ""
-#: config/tc-mmix.c:3140
+#: config/tc-mmix.c:3141
msgid "empty label field for IS"
msgstr ""
-#: config/tc-mmix.c:3466
+#: config/tc-mmix.c:3467
#, c-format
msgid "internal: unexpected relax type %d:%d"
msgstr ""
-#: config/tc-mmix.c:3488
+#: config/tc-mmix.c:3489
msgid "BSPEC without ESPEC."
msgstr ""
-#: config/tc-mmix.c:3688
+#: config/tc-mmix.c:3689
msgid "GREG expression too complicated"
msgstr ""
-#: config/tc-mmix.c:3703
+#: config/tc-mmix.c:3704
msgid "internal: GREG expression not resolved to section"
msgstr ""
-#: config/tc-mmix.c:3752
+#: config/tc-mmix.c:3753
msgid "register section has contents\n"
msgstr ""
-#: config/tc-mmix.c:3879
+#: config/tc-mmix.c:3880
msgid "section change from within a BSPEC/ESPEC pair is not supported"
msgstr ""
-#: config/tc-mmix.c:3900
+#: config/tc-mmix.c:3901
msgid "directive LOC from within a BSPEC/ESPEC pair is not supported"
msgstr ""
-#: config/tc-mmix.c:3911
+#: config/tc-mmix.c:3912
msgid "invalid LOC expression"
msgstr ""
-#: config/tc-mmix.c:3936 config/tc-mmix.c:3962
+#: config/tc-mmix.c:3937 config/tc-mmix.c:3963
msgid "LOC expression stepping backwards is not supported"
msgstr ""
#. We will only get here in rare cases involving #NO_APP,
#. where the unterminated string is not recognized by the
#. preformatting pass.
-#: config/tc-mmix.c:4046 config/tc-mmix.c:4206
+#: config/tc-mmix.c:4047 config/tc-mmix.c:4207 config/tc-z80.c:1691
msgid "unterminated string"
msgstr ""
-#: config/tc-mmix.c:4063
+#: config/tc-mmix.c:4064
msgid "BYTE expression not a pure number"
msgstr ""
#. Note that mmixal does not allow negative numbers in
#. BYTE sequences, so neither should we.
-#: config/tc-mmix.c:4072
+#: config/tc-mmix.c:4073
msgid "BYTE expression not in the range 0..255"
msgstr ""
-#: config/tc-mmix.c:4122 config/tc-mmix.c:4138
+#: config/tc-mmix.c:4123 config/tc-mmix.c:4139
msgid "data item with alignment larger than location"
msgstr ""
@@ -7682,82 +8356,82 @@ msgstr ""
msgid "`&' serial number operator is not supported"
msgstr ""
-#: config/tc-mn10200.c:305
+#: config/tc-mn10200.c:304
#, c-format
msgid ""
"MN10200 options:\n"
"none yet\n"
msgstr ""
-#: config/tc-mn10200.c:931 config/tc-mn10300.c:1392 config/tc-ppc.c:2135
-#: config/tc-s390.c:1557 config/tc-v850.c:1621
+#: config/tc-mn10200.c:930 config/tc-mn10300.c:1391 config/tc-ppc.c:2189
+#: config/tc-s390.c:1558 config/tc-v850.c:1636
#, c-format
msgid "Unrecognized opcode: `%s'"
msgstr ""
-#: config/tc-mn10200.c:1174 config/tc-mn10300.c:1965 config/tc-ppc.c:2614
-#: config/tc-s390.c:1472 config/tc-v850.c:2026
+#: config/tc-mn10200.c:1173 config/tc-mn10300.c:1964 config/tc-ppc.c:2668
+#: config/tc-s390.c:1473 config/tc-v850.c:2041
#, c-format
msgid "junk at end of line: `%s'"
msgstr ""
-#: config/tc-mn10300.c:695
+#: config/tc-mn10300.c:694
#, c-format
msgid ""
-"MN10300 options:\n"
+"MN10300 assembler options:\n"
"none yet\n"
msgstr ""
-#: config/tc-mn10300.c:1361 config/tc-sh.c:778 read.c:3871
+#: config/tc-mn10300.c:1360 config/tc-sh.c:776 config/tc-z80.c:671 read.c:4194
#, c-format
msgid "unsupported BFD relocation size %u"
msgstr ""
-#: config/tc-mn10300.c:1409
+#: config/tc-mn10300.c:1408
msgid "Invalid opcode/operands"
msgstr ""
-#: config/tc-mn10300.c:1936
+#: config/tc-mn10300.c:1935
msgid "Invalid register specification."
msgstr ""
-#: config/tc-mn10300.c:2518
+#: config/tc-mn10300.c:2522
#, c-format
msgid "Bad relocation fixup type (%d)"
msgstr ""
-#: config/tc-msp430.c:552
+#: config/tc-msp430.c:550
msgid ".profiler pseudo requires at least two operands."
msgstr ""
-#: config/tc-msp430.c:611
+#: config/tc-msp430.c:609
msgid "unknown profiling flag - ignored."
msgstr ""
-#: config/tc-msp430.c:627
+#: config/tc-msp430.c:625
msgid "ambigious flags combination - '.profiler' directive ignored."
msgstr ""
-#: config/tc-msp430.c:637
+#: config/tc-msp430.c:635
msgid "profiling in absolute section? Hm..."
msgstr ""
-#: config/tc-msp430.c:726
+#: config/tc-msp430.c:724
#, c-format
msgid "Known MCU names:\n"
msgstr ""
-#: config/tc-msp430.c:729
+#: config/tc-msp430.c:727
#, c-format
msgid "\t %s\n"
msgstr ""
-#: config/tc-msp430.c:755
+#: config/tc-msp430.c:753
#, c-format
msgid "redefinition of mcu type %s' to %s'"
msgstr ""
-#: config/tc-msp430.c:798
+#: config/tc-msp430.c:796
#, c-format
msgid ""
"MSP430 options:\n"
@@ -7785,322 +8459,322 @@ msgid ""
" msp430x447 msp430x448 msp430x449\n"
msgstr ""
-#: config/tc-msp430.c:821
+#: config/tc-msp430.c:819
#, c-format
msgid ""
" -mQ - enable relaxation at assembly time. DANGEROUS!\n"
" -mP - enable polymorph instructions\n"
msgstr ""
-#: config/tc-msp430.c:1011
+#: config/tc-msp430.c:1009
#, c-format
msgid "value %d out of range. Use #lo() or #hi()"
msgstr ""
-#: config/tc-msp430.c:1099
+#: config/tc-msp430.c:1097
#, c-format
msgid "unknown expression in operand %s. use #llo() #lhi() #hlo() #hhi() "
msgstr ""
-#: config/tc-msp430.c:1150
+#: config/tc-msp430.c:1148
#, c-format
msgid "Registers cannot be used within immediate expression [%s]"
msgstr ""
-#: config/tc-msp430.c:1152
+#: config/tc-msp430.c:1150
#, c-format
msgid "unknown operand %s"
msgstr ""
-#: config/tc-msp430.c:1174 config/tc-msp430.c:1309
+#: config/tc-msp430.c:1172 config/tc-msp430.c:1307
#, c-format
msgid "value out of range: %d"
msgstr ""
-#: config/tc-msp430.c:1185
+#: config/tc-msp430.c:1183
#, c-format
msgid "Registers cannot be used within absolute expression [%s]"
msgstr ""
-#: config/tc-msp430.c:1187 config/tc-msp430.c:1330
+#: config/tc-msp430.c:1185 config/tc-msp430.c:1328
#, c-format
msgid "unknown expression in operand %s"
msgstr ""
-#: config/tc-msp430.c:1201 config/tc-msp430.c:1208
+#: config/tc-msp430.c:1199 config/tc-msp430.c:1206
#, c-format
msgid "unknown addressing mode %s"
msgstr ""
-#: config/tc-msp430.c:1216
+#: config/tc-msp430.c:1214
#, c-format
msgid "Bad register name r%s"
msgstr ""
-#: config/tc-msp430.c:1228
+#: config/tc-msp430.c:1226
#, c-format
msgid "MSP430 does not have %d registers"
msgstr ""
-#: config/tc-msp430.c:1248
+#: config/tc-msp430.c:1246
msgid "')' required"
msgstr ""
-#: config/tc-msp430.c:1261
+#: config/tc-msp430.c:1259
#, c-format
msgid "unknown operator %s. Did you mean X(Rn) or #[hl][hl][oi](CONST) ?"
msgstr ""
-#: config/tc-msp430.c:1270
+#: config/tc-msp430.c:1268
#, c-format
msgid "unknown operator (r%s substituded as a register name"
msgstr ""
-#: config/tc-msp430.c:1282 config/tc-msp430.c:1293
+#: config/tc-msp430.c:1280 config/tc-msp430.c:1291
#, c-format
msgid "unknown operator %s"
msgstr ""
-#: config/tc-msp430.c:1287
+#: config/tc-msp430.c:1285
msgid "r2 should not be used in indexed addressing mode"
msgstr ""
-#: config/tc-msp430.c:1328
+#: config/tc-msp430.c:1326
#, c-format
msgid "Registers cannot be used as a prefix of indexed expression [%s]"
msgstr ""
#. Unreachable.
-#: config/tc-msp430.c:1377
+#: config/tc-msp430.c:1375
#, c-format
msgid "unknown addressing mode for operand %s"
msgstr ""
-#: config/tc-msp430.c:1402
+#: config/tc-msp430.c:1400
#, c-format
msgid "Internal bug. Try to use 0(r%d) instead of @r%d"
msgstr ""
-#: config/tc-msp430.c:1412
+#: config/tc-msp430.c:1410
msgid "this addressing mode is not applicable for destination operand"
msgstr ""
-#: config/tc-msp430.c:1456
+#: config/tc-msp430.c:1454
#, c-format
msgid "instruction %s requires %d operand(s)"
msgstr ""
-#: config/tc-msp430.c:1709
+#: config/tc-msp430.c:1707
#, c-format
msgid "Even number required. Rounded to %d"
msgstr ""
-#: config/tc-msp430.c:1720
+#: config/tc-msp430.c:1718
#, c-format
msgid "Wrong displacement %d"
msgstr ""
-#: config/tc-msp430.c:1737
+#: config/tc-msp430.c:1735
msgid "instruction requires label sans '$'"
msgstr ""
-#: config/tc-msp430.c:1742
+#: config/tc-msp430.c:1740
msgid "instruction requires label or value in range -511:512"
msgstr ""
-#: config/tc-msp430.c:1749 config/tc-msp430.c:1793 config/tc-msp430.c:1832
+#: config/tc-msp430.c:1747 config/tc-msp430.c:1791 config/tc-msp430.c:1830
msgid "instruction requires label"
msgstr ""
-#: config/tc-msp430.c:1757 config/tc-msp430.c:1799
+#: config/tc-msp430.c:1755 config/tc-msp430.c:1797
msgid "polymorphs are not enabled. Use -mP option to enable."
msgstr ""
-#: config/tc-msp430.c:1836
+#: config/tc-msp430.c:1834
msgid "Ilegal instruction or not implmented opcode."
msgstr ""
-#: config/tc-msp430.c:2187
+#: config/tc-msp430.c:2184
#, c-format
msgid "internal inconsistency problem in %s: insn %04lx"
msgstr ""
-#: config/tc-msp430.c:2217 config/tc-msp430.c:2240
+#: config/tc-msp430.c:2214 config/tc-msp430.c:2237
#, c-format
msgid "internal inconsistency problem in %s: ext. insn %04lx"
msgstr ""
-#: config/tc-msp430.c:2252
+#: config/tc-msp430.c:2249
#, c-format
msgid "internal inconsistency problem in %s: %lx"
msgstr ""
-#: config/tc-ns32k.c:441
+#: config/tc-ns32k.c:439
msgid "Invalid syntax in PC-relative addressing mode"
msgstr ""
-#: config/tc-ns32k.c:465
+#: config/tc-ns32k.c:463
msgid "Invalid syntax in External addressing mode"
msgstr ""
-#: config/tc-ns32k.c:546
+#: config/tc-ns32k.c:544
msgid "Invalid syntax in Memory Relative addressing mode"
msgstr ""
-#: config/tc-ns32k.c:613
+#: config/tc-ns32k.c:611
msgid "Invalid scaled-indexed mode, use (b,w,d,q)"
msgstr ""
-#: config/tc-ns32k.c:618
+#: config/tc-ns32k.c:616
msgid "Syntax in scaled-indexed mode, use [Rn:m] where n=[0..7] m={b,w,d,q}"
msgstr ""
-#: config/tc-ns32k.c:623
+#: config/tc-ns32k.c:621
msgid "Scaled-indexed addressing mode combined with scaled-index"
msgstr ""
-#: config/tc-ns32k.c:634
+#: config/tc-ns32k.c:632
msgid "Invalid or illegal addressing mode combined with scaled-index"
msgstr ""
-#: config/tc-ns32k.c:757
+#: config/tc-ns32k.c:755
msgid "Premature end of suffix -- Defaulting to d"
msgstr ""
-#: config/tc-ns32k.c:770
+#: config/tc-ns32k.c:768
msgid "Bad suffix after ':' use {b|w|d} Defaulting to d"
msgstr ""
-#: config/tc-ns32k.c:815
+#: config/tc-ns32k.c:813
msgid "Very short instr to option, ie you can't do it on a NULLstr"
msgstr ""
-#: config/tc-ns32k.c:865
+#: config/tc-ns32k.c:863
msgid "No such entry in list. (cpu/mmu register)"
msgstr ""
-#: config/tc-ns32k.c:922
+#: config/tc-ns32k.c:920
msgid "Internal consistency error. check ns32k-opcode.h"
msgstr ""
-#: config/tc-ns32k.c:946
+#: config/tc-ns32k.c:944
msgid "Address of immediate operand"
msgstr ""
-#: config/tc-ns32k.c:947
+#: config/tc-ns32k.c:945
msgid "Invalid immediate write operand."
msgstr ""
-#: config/tc-ns32k.c:1077
+#: config/tc-ns32k.c:1075
msgid "Bad opcode-table-option, check in file ns32k-opcode.h"
msgstr ""
-#: config/tc-ns32k.c:1110
+#: config/tc-ns32k.c:1108
msgid "No such opcode"
msgstr ""
-#: config/tc-ns32k.c:1185
+#: config/tc-ns32k.c:1183
msgid "Bad suffix, defaulting to d"
msgstr ""
-#: config/tc-ns32k.c:1212
+#: config/tc-ns32k.c:1210
msgid "Too many operands passed to instruction"
msgstr ""
#. Check error in default.
-#: config/tc-ns32k.c:1224
+#: config/tc-ns32k.c:1222
msgid "Wrong numbers of operands in default, check ns32k-opcodes.h"
msgstr ""
-#: config/tc-ns32k.c:1227
+#: config/tc-ns32k.c:1225
msgid "Wrong number of operands"
msgstr ""
-#: config/tc-ns32k.c:1300
+#: config/tc-ns32k.c:1298
#, c-format
msgid "Can not do %d byte pc-relative relocation for storage type %d"
msgstr ""
-#: config/tc-ns32k.c:1303
+#: config/tc-ns32k.c:1301
#, c-format
msgid "Can not do %d byte relocation for storage type %d"
msgstr ""
-#: config/tc-ns32k.c:1395
+#: config/tc-ns32k.c:1393
#, c-format
msgid "value of %ld out of byte displacement range."
msgstr ""
-#: config/tc-ns32k.c:1405
+#: config/tc-ns32k.c:1403
#, c-format
msgid "value of %ld out of word displacement range."
msgstr ""
-#: config/tc-ns32k.c:1420
+#: config/tc-ns32k.c:1418
#, c-format
msgid "value of %ld out of double word displacement range."
msgstr ""
-#: config/tc-ns32k.c:1441
+#: config/tc-ns32k.c:1439
#, c-format
msgid "Internal logic error. line %d, file \"%s\""
msgstr ""
-#: config/tc-ns32k.c:1489
+#: config/tc-ns32k.c:1487
#, c-format
msgid "Internal logic error. line %d, file \"%s\""
msgstr ""
-#: config/tc-ns32k.c:1590
+#: config/tc-ns32k.c:1588
msgid "Bit field out of range"
msgstr ""
-#: config/tc-ns32k.c:1690
+#: config/tc-ns32k.c:1688
msgid "iif convert internal pcrel/binary"
msgstr ""
-#: config/tc-ns32k.c:1707
+#: config/tc-ns32k.c:1705
msgid "Bignum too big for long"
msgstr ""
-#: config/tc-ns32k.c:1784
+#: config/tc-ns32k.c:1782
msgid "iif convert internal pcrel/pointer"
msgstr ""
-#: config/tc-ns32k.c:1789
+#: config/tc-ns32k.c:1787
msgid "Internal logic error in iif.iifP[n].type"
msgstr ""
#. We cant relax this case.
-#: config/tc-ns32k.c:1825
+#: config/tc-ns32k.c:1823
msgid "Can't relax difference"
msgstr ""
-#: config/tc-ns32k.c:1866
-msgid "Displacement to large for :d"
+#: config/tc-ns32k.c:1864
+msgid "Displacement too large for :d"
msgstr ""
-#: config/tc-ns32k.c:1879
+#: config/tc-ns32k.c:1877
msgid "Internal logic error in iif.iifP[].type"
msgstr ""
#. Fatal.
-#: config/tc-ns32k.c:1911
+#: config/tc-ns32k.c:1909
#, c-format
msgid "Can't hash %s: %s"
msgstr ""
-#: config/tc-ns32k.c:2181
+#: config/tc-ns32k.c:2179
#, c-format
msgid "invalid architecture option -m%s, ignored"
msgstr ""
-#: config/tc-ns32k.c:2194
+#: config/tc-ns32k.c:2192
#, c-format
msgid "invalid default displacement size \"%s\". Defaulting to %d."
msgstr ""
-#: config/tc-ns32k.c:2210
+#: config/tc-ns32k.c:2208
#, c-format
msgid ""
"NS32K options:\n"
@@ -8108,45 +8782,45 @@ msgid ""
"--disp-size-default=<1|2|4>\n"
msgstr ""
-#: config/tc-ns32k.c:2285
+#: config/tc-ns32k.c:2283
#, c-format
msgid "Cannot find relocation type for symbol %s, code %d"
msgstr ""
-#: config/tc-or32.c:360
+#: config/tc-or32.c:361
#, c-format
msgid "unknown opcode1: `%s'"
msgstr ""
-#: config/tc-or32.c:366
+#: config/tc-or32.c:367
#, c-format
msgid "unknown opcode2 `%s'."
msgstr ""
-#: config/tc-or32.c:403
+#: config/tc-or32.c:404
#, c-format
msgid "instruction not allowed: %s"
msgstr ""
-#: config/tc-or32.c:406
+#: config/tc-or32.c:407
#, c-format
msgid "too many operands: %s"
msgstr ""
-#: config/tc-or32.c:490
+#: config/tc-or32.c:491
msgid "call/jmp target out of range (1)"
msgstr ""
-#: config/tc-or32.c:674
+#: config/tc-or32.c:672
msgid "call/jmp target out of range (2)"
msgstr ""
-#: config/tc-or32.c:693
+#: config/tc-or32.c:691
#, c-format
msgid "bad relocation type: 0x%02x"
msgstr ""
-#: config/tc-or32.c:885
+#: config/tc-or32.c:883
msgid "invalid register in & expression"
msgstr ""
@@ -8154,7 +8828,7 @@ msgstr ""
msgid "Low order bits truncated in immediate float operand"
msgstr ""
-#: config/tc-pdp11.c:679
+#: config/tc-pdp11.c:679 config/tc-z80.c:1890 config/tc-z80.c:1903
#, c-format
msgid "Unknown instruction '%s'"
msgstr ""
@@ -8180,8 +8854,8 @@ msgid ""
"-big\t\t\tgenerate big endian code\n"
msgstr ""
-#: config/tc-pj.c:431 config/tc-sh.c:3955 config/tc-sh.c:3962
-#: config/tc-sh.c:3969 config/tc-sh.c:3976
+#: config/tc-pj.c:431 config/tc-sh.c:4086 config/tc-sh.c:4093
+#: config/tc-sh.c:4100 config/tc-sh.c:4107
msgid "pcrel too far"
msgstr ""
@@ -8193,17 +8867,17 @@ msgstr ""
msgid "estimate size\n"
msgstr ""
-#: config/tc-ppc.c:991
+#: config/tc-ppc.c:979
#, c-format
msgid "%s unsupported"
msgstr ""
-#: config/tc-ppc.c:1057 config/tc-s390.c:417 config/tc-s390.c:424
+#: config/tc-ppc.c:1045 config/tc-s390.c:418 config/tc-s390.c:425
#, c-format
msgid "invalid switch -m%s"
msgstr ""
-#: config/tc-ppc.c:1094
+#: config/tc-ppc.c:1081
#, c-format
msgid ""
"PowerPC options:\n"
@@ -8221,7 +8895,7 @@ msgid ""
"\t\t\tgenerate code For PowerPC 7400/7410/7450/7455\n"
msgstr ""
-#: config/tc-ppc.c:1108
+#: config/tc-ppc.c:1095
#, c-format
msgid ""
"-mppc64, -m620\t\tgenerate code for PowerPC 620/625/630\n"
@@ -8230,11 +8904,13 @@ msgid ""
"-mbooke, mbooke32\tgenerate code for 32-bit PowerPC BookE\n"
"-mpower4\t\tgenerate code for Power4 architecture\n"
"-mpower5\t\tgenerate code for Power5 architecture\n"
+"-mpower6\t\tgenerate code for Power6 architecture\n"
+"-mcell\t\t\tgenerate code for Cell Broadband Engine architecture\n"
"-mcom\t\t\tgenerate code Power/PowerPC common instructions\n"
"-many\t\t\tgenerate code for any architecture (PWR/PWRX/PPC)\n"
msgstr ""
-#: config/tc-ppc.c:1117
+#: config/tc-ppc.c:1106
#, c-format
msgid ""
"-maltivec\t\tgenerate code for AltiVec\n"
@@ -8245,7 +8921,7 @@ msgid ""
"-mno-regnames\t\tDo not allow symbolic names for registers\n"
msgstr ""
-#: config/tc-ppc.c:1125
+#: config/tc-ppc.c:1114
#, c-format
msgid ""
"-mrelocatable\t\tsupport for GCC's -mrelocatble option\n"
@@ -8261,251 +8937,276 @@ msgid ""
"-Qy, -Qn\t\tignored\n"
msgstr ""
-#: config/tc-ppc.c:1162
+#: config/tc-ppc.c:1151
#, c-format
msgid "Unknown default cpu = %s, os = %s"
msgstr ""
-#: config/tc-ppc.c:1188
+#: config/tc-ppc.c:1177
msgid "Neither Power nor PowerPC opcodes were selected."
msgstr ""
-#: config/tc-ppc.c:1285 config/tc-s390.c:519
+#: config/tc-ppc.c:1256
#, c-format
-msgid "Internal assembler error for instruction %s"
+msgid "powerpc_operands[%d].bitm invalid"
+msgstr ""
+
+#: config/tc-ppc.c:1263
+#, c-format
+msgid "powerpc_operands[%d] duplicates powerpc_operands[%d]"
+msgstr ""
+
+#: config/tc-ppc.c:1281
+#, c-format
+msgid "mask trims opcode bits for %s"
+msgstr ""
+
+#: config/tc-ppc.c:1290
+#, c-format
+msgid "operand index error for %s"
+msgstr ""
+
+#: config/tc-ppc.c:1302
+#, c-format
+msgid "operand %d overlap in %s"
+msgstr ""
+
+#: config/tc-ppc.c:1344
+#, c-format
+msgid "duplicate instruction %s"
msgstr ""
-#: config/tc-ppc.c:1309
+#: config/tc-ppc.c:1368
#, c-format
-msgid "Internal assembler error for macro %s"
+msgid "duplicate macro %s"
msgstr ""
-#: config/tc-ppc.c:1640
+#: config/tc-ppc.c:1702
msgid "identifier+constant@got means identifier@got+constant"
msgstr ""
-#: config/tc-ppc.c:1707
+#: config/tc-ppc.c:1768
#, c-format
msgid "%s relocations do not fit in %d bytes\n"
msgstr ""
-#: config/tc-ppc.c:1814
+#: config/tc-ppc.c:1873
#, c-format
msgid "Length of .lcomm \"%s\" is already %ld. Not changed to %ld."
msgstr ""
-#: config/tc-ppc.c:1896
+#: config/tc-ppc.c:1953
msgid "Relocation cannot be done when using -mrelocatable"
msgstr ""
-#: config/tc-ppc.c:1945
+#: config/tc-ppc.c:2002
msgid "TOC section size exceeds 64k"
msgstr ""
-#: config/tc-ppc.c:2027
+#: config/tc-ppc.c:2083
#, c-format
msgid "syntax error: invalid toc specifier `%s'"
msgstr ""
-#: config/tc-ppc.c:2041
+#: config/tc-ppc.c:2097
#, c-format
msgid "syntax error: expected `]', found `%c'"
msgstr ""
-#: config/tc-ppc.c:2320
+#: config/tc-ppc.c:2374
msgid "[tocv] symbol is not a toc symbol"
msgstr ""
-#: config/tc-ppc.c:2331
+#: config/tc-ppc.c:2385
msgid "Unimplemented toc32 expression modifier"
msgstr ""
-#: config/tc-ppc.c:2336
+#: config/tc-ppc.c:2390
msgid "Unimplemented toc64 expression modifier"
msgstr ""
-#: config/tc-ppc.c:2340
+#: config/tc-ppc.c:2394
#, c-format
msgid "Unexpected return value [%d] from parse_toc_entry!\n"
msgstr ""
-#: config/tc-ppc.c:2558
+#: config/tc-ppc.c:2612
msgid "unsupported relocation for DS offset field"
msgstr ""
-#: config/tc-ppc.c:2602
+#: config/tc-ppc.c:2656
#, c-format
msgid "syntax error; found `%c' but expected `%c'"
msgstr ""
-#: config/tc-ppc.c:2645 config/tc-ppc.h:111
+#: config/tc-ppc.c:2699 config/tc-ppc.h:92
msgid "instruction address is not a multiple of 4"
msgstr ""
-#: config/tc-ppc.c:2756
+#: config/tc-ppc.c:2808
msgid "wrong number of operands"
msgstr ""
-#: config/tc-ppc.c:2812
+#: config/tc-ppc.c:2862
msgid "Bad .section directive: want a,e,w,x,M,S,G,T in string"
msgstr ""
-#: config/tc-ppc.c:2927
+#: config/tc-ppc.c:2968
msgid "missing size"
msgstr ""
-#: config/tc-ppc.c:2936
+#: config/tc-ppc.c:2977
msgid "negative size"
msgstr ""
-#: config/tc-ppc.c:2973
+#: config/tc-ppc.c:3014
msgid "missing real symbol name"
msgstr ""
-#: config/tc-ppc.c:2994
+#: config/tc-ppc.c:3035
msgid "attempt to redefine symbol"
msgstr ""
-#: config/tc-ppc.c:3241
+#: config/tc-ppc.c:3277
msgid "The XCOFF file format does not support arbitrary sections"
msgstr ""
-#: config/tc-ppc.c:3318
+#: config/tc-ppc.c:3351
msgid "missing rename string"
msgstr ""
-#: config/tc-ppc.c:3349 config/tc-ppc.c:3904 read.c:3064
+#: config/tc-ppc.c:3381 config/tc-ppc.c:3923 read.c:3260
msgid "missing value"
msgstr ""
-#: config/tc-ppc.c:3367
+#: config/tc-ppc.c:3399
msgid "illegal .stabx expression; zero assumed"
msgstr ""
-#: config/tc-ppc.c:3399
+#: config/tc-ppc.c:3431
msgid "missing class"
msgstr ""
-#: config/tc-ppc.c:3408
+#: config/tc-ppc.c:3440
msgid "missing type"
msgstr ""
-#: config/tc-ppc.c:3489
+#: config/tc-ppc.c:3520
msgid "missing symbol name"
msgstr ""
-#: config/tc-ppc.c:3683
+#: config/tc-ppc.c:3710
msgid "nested .bs blocks"
msgstr ""
-#: config/tc-ppc.c:3716
+#: config/tc-ppc.c:3742
msgid ".es without preceding .bs"
msgstr ""
-#: config/tc-ppc.c:3896
+#: config/tc-ppc.c:3915
msgid "non-constant byte count"
msgstr ""
-#: config/tc-ppc.c:3944
+#: config/tc-ppc.c:3962
msgid ".tc not in .toc section"
msgstr ""
-#: config/tc-ppc.c:3963
+#: config/tc-ppc.c:3981
msgid ".tc with no label"
msgstr ""
-#: config/tc-ppc.c:4055
+#: config/tc-ppc.c:4072
msgid ".machine stack overflow"
msgstr ""
-#: config/tc-ppc.c:4062
+#: config/tc-ppc.c:4079
msgid ".machine stack underflow"
msgstr ""
-#: config/tc-ppc.c:4069
+#: config/tc-ppc.c:4086
#, c-format
msgid "invalid machine `%s'"
msgstr ""
-#: config/tc-ppc.c:4123
+#: config/tc-ppc.c:4137
msgid "No previous section to return to. Directive ignored."
msgstr ""
#. Section Contents
#. unknown
-#: config/tc-ppc.c:4540
+#: config/tc-ppc.c:4547
msgid "Unsupported section attribute -- 'a'"
msgstr ""
-#: config/tc-ppc.c:4729
+#: config/tc-ppc.c:4731
msgid "bad symbol suffix"
msgstr ""
-#: config/tc-ppc.c:4822
+#: config/tc-ppc.c:4823
msgid "Unrecognized symbol suffix"
msgstr ""
-#: config/tc-ppc.c:4912
+#: config/tc-ppc.c:4911
msgid "two .function pseudo-ops with no intervening .ef"
msgstr ""
-#: config/tc-ppc.c:4925
+#: config/tc-ppc.c:4924
msgid ".ef with no preceding .function"
msgstr ""
-#: config/tc-ppc.c:5053
+#: config/tc-ppc.c:5052
#, c-format
msgid "warning: symbol %s has no csect"
msgstr ""
-#: config/tc-ppc.c:5357
+#: config/tc-ppc.c:5345
msgid "symbol in .toc does not match any .tc"
msgstr ""
-#: config/tc-ppc.c:5686 config/tc-s390.c:2092 config/tc-v850.c:2314
+#: config/tc-ppc.c:5709 config/tc-s390.c:2093 config/tc-v850.c:2343
#: config/tc-xstormy16.c:538
msgid "unresolved expression that must be resolved"
msgstr ""
-#: config/tc-ppc.c:5689
+#: config/tc-ppc.c:5712
#, c-format
msgid "unsupported relocation against %s"
msgstr ""
-#: config/tc-ppc.c:5762
+#: config/tc-ppc.c:5785
#, c-format
msgid "cannot emit PC relative %s relocation against %s"
msgstr ""
-#: config/tc-ppc.c:5767
+#: config/tc-ppc.c:5790
#, c-format
msgid "cannot emit PC relative %s relocation"
msgstr ""
-#: config/tc-ppc.c:5949
+#: config/tc-ppc.c:5972
#, c-format
msgid "Unable to handle reference to symbol %s"
msgstr ""
-#: config/tc-ppc.c:5952
+#: config/tc-ppc.c:5975
msgid "Unable to resolve expression"
msgstr ""
-#: config/tc-ppc.c:5979
+#: config/tc-ppc.c:6002
msgid "must branch to an address a multiple of 4"
msgstr ""
-#: config/tc-ppc.c:5983
+#: config/tc-ppc.c:6006
#, c-format
msgid "@local or @plt branch destination is too far away, %ld bytes"
msgstr ""
-#: config/tc-ppc.c:6014
+#: config/tc-ppc.c:6037
#, c-format
msgid "Gas failure, reloc value %d\n"
msgstr ""
-#: config/tc-s390.c:460
+#: config/tc-s390.c:461
#, c-format
msgid ""
" S390 options:\n"
@@ -8516,80 +9217,375 @@ msgid ""
" -m64 Set file format to 64 bit format\n"
msgstr ""
-#: config/tc-s390.c:467
+#: config/tc-s390.c:468
#, c-format
msgid ""
" -V print assembler version number\n"
" -Qy, -Qn ignored\n"
msgstr ""
-#: config/tc-s390.c:503
+#: config/tc-s390.c:504
#, c-format
msgid "Internal assembler error for instruction format %s"
msgstr ""
-#: config/tc-s390.c:766
+#: config/tc-s390.c:520
+#, c-format
+msgid "Internal assembler error for instruction %s"
+msgstr ""
+
+#: config/tc-s390.c:767
#, c-format
msgid "identifier+constant@%s means identifier@%s+constant"
msgstr ""
-#: config/tc-s390.c:849
+#: config/tc-s390.c:850
msgid "Can't handle O_big in s390_exp_compare"
msgstr ""
-#: config/tc-s390.c:933
+#: config/tc-s390.c:934
msgid "Invalid suffix for literal pool entry"
msgstr ""
-#: config/tc-s390.c:990
+#: config/tc-s390.c:991
msgid "Big number is too big"
msgstr ""
-#: config/tc-s390.c:1138
+#: config/tc-s390.c:1139
msgid "relocation not applicable"
msgstr ""
-#: config/tc-s390.c:1326
+#: config/tc-s390.c:1327
msgid "invalid operand suffix"
msgstr ""
-#: config/tc-s390.c:1349
+#: config/tc-s390.c:1350
msgid "syntax error; missing '(' after displacement"
msgstr ""
-#: config/tc-s390.c:1365 config/tc-s390.c:1409 config/tc-s390.c:1439
+#: config/tc-s390.c:1366 config/tc-s390.c:1410 config/tc-s390.c:1440
msgid "syntax error; expected ,"
msgstr ""
-#: config/tc-s390.c:1397
+#: config/tc-s390.c:1398
msgid "syntax error; missing ')' after base register"
msgstr ""
-#: config/tc-s390.c:1426
+#: config/tc-s390.c:1427
msgid "syntax error; ')' not allowed here"
msgstr ""
-#: config/tc-s390.c:1619 config/tc-s390.c:1642 config/tc-s390.c:1655
+#: config/tc-s390.c:1620 config/tc-s390.c:1643 config/tc-s390.c:1656
msgid "Invalid .insn format\n"
msgstr ""
-#: config/tc-s390.c:1627
+#: config/tc-s390.c:1628
#, c-format
msgid "Unrecognized opcode format: `%s'"
msgstr ""
-#: config/tc-s390.c:1658
+#: config/tc-s390.c:1659
msgid "second operand of .insn not a constant\n"
msgstr ""
-#: config/tc-s390.c:1661
+#: config/tc-s390.c:1662
msgid "missing comma after insn constant\n"
msgstr ""
-#: config/tc-s390.c:2095
+#: config/tc-s390.c:2096
msgid "unsupported relocation type"
msgstr ""
+#: config/tc-score.c:49
+msgid "instruction is not conditional"
+msgstr ""
+
+#: config/tc-score.c:50
+msgid "acc0 expected"
+msgstr ""
+
+#: config/tc-score.c:51
+msgid "div / mul are reserved instructions"
+msgstr ""
+
+#: config/tc-score.c:52
+msgid "This architecture doesn't support mmu"
+msgstr ""
+
+#: config/tc-score.c:53
+msgid "This architecture doesn't support atomic instruction"
+msgstr ""
+
+#: config/tc-score.c:54
+msgid "the label length is longer than 1024"
+msgstr ""
+
+#: config/tc-score.c:238
+msgid "S+core register expected"
+msgstr ""
+
+#: config/tc-score.c:239
+msgid "S+core special-register expected"
+msgstr ""
+
+#: config/tc-score.c:240
+msgid "S+core co-processor register expected"
+msgstr ""
+
+#: config/tc-score.c:858 config/tc-score.c:1758
+msgid "Using temp register(r1)"
+msgstr ""
+
+#: config/tc-score.c:877
+#, c-format
+msgid "register expected, not '%.100s'"
+msgstr ""
+
+#: config/tc-score.c:1263 config/tc-score.c:1270 config/tc-score.c:2645
+#: config/tc-score.c:2650 config/tc-score.c:2928 config/tc-score.c:2933
+#, c-format
+msgid "invalid constant: %d bit expression not in range %d..%d"
+msgstr ""
+
+#: config/tc-score.c:1310
+msgid "invalid constant: bit expression not defined"
+msgstr ""
+
+#: config/tc-score.c:1772
+#, c-format
+msgid "low register(r0-r15)expected, not '%.100s'"
+msgstr ""
+
+#: config/tc-score.c:1867
+#, c-format
+msgid "high register(r16-r31)expected, not '%.100s'"
+msgstr ""
+
+#: config/tc-score.c:2099
+#, c-format
+msgid "Fix data dependency: %s %s -- %s %s (insert %d nop!/%d)"
+msgstr ""
+
+#: config/tc-score.c:2118
+#, c-format
+msgid "Fix data dependency: %s %s -- %s %s (insert 1 pflush/%d)"
+msgstr ""
+
+#: config/tc-score.c:2134 config/tc-score.c:2141
+#, c-format
+msgid "data dependency: %s %s -- %s %s (%d/%d bubble)"
+msgstr ""
+
+#: config/tc-score.c:2431 config/tc-score.c:5662
+#, c-format
+msgid "%s -- `%s'"
+msgstr ""
+
+#: config/tc-score.c:2588
+msgid "address offset must be half word alignment"
+msgstr ""
+
+#: config/tc-score.c:2596
+msgid "address offset must be word alignment"
+msgstr ""
+
+#: config/tc-score.c:2738 config/tc-score.c:2885
+msgid "register same as write-back base"
+msgstr ""
+
+#: config/tc-score.c:2855
+msgid "pre-indexed expression expected"
+msgstr ""
+
+#: config/tc-score.c:2865 config/tc-score.c:3223 config/tc-score.c:3239
+#: config/tc-score.c:3310 config/tc-score.c:3353 config/tc-score.c:3475
+#: config/tc-score.c:3549 config/tc-score.c:3603 config/tc-score.c:3649
+msgid "missing ]"
+msgstr ""
+
+#: config/tc-score.c:3466
+msgid "base register nums are over 3 bit"
+msgstr ""
+
+#: config/tc-score.c:3543 config/tc-score.c:3594
+msgid "missing +"
+msgstr ""
+
+#: config/tc-score.c:3587
+#, c-format
+msgid "%s register same as write-back base"
+msgstr ""
+
+#: config/tc-score.c:3589
+msgid "destination"
+msgstr ""
+
+#: config/tc-score.c:3589
+msgid "source"
+msgstr ""
+
+#: config/tc-score.c:3993
+msgid "li rd label isn't correct instruction form"
+msgstr ""
+
+#: config/tc-score.c:4506 config/tc-score.c:4535 config/tc-score.c:4561
+msgid "lacking label "
+msgstr ""
+
+#: config/tc-score.c:4513
+msgid "invalid constant: 25 bit expression not in range -2^24..2^24"
+msgstr ""
+
+#: config/tc-score.c:4541
+msgid "invalid constant: 12 bit expression not in range -2^11..2^11"
+msgstr ""
+
+#: config/tc-score.c:4567
+msgid "invalid constant: 20 bit expression not in range -2^19..2^19"
+msgstr ""
+
+#: config/tc-score.c:4600
+msgid "lacking label"
+msgstr ""
+
+#: config/tc-score.c:4605
+msgid "invalid constant: 9 bit expression not in range -2^8..2^8"
+msgstr ""
+
+#: config/tc-score.c:5344
+#, c-format
+msgid " branch relocation truncate (0x%x) [-2^8 ~ 2^8]"
+msgstr ""
+
+#: config/tc-score.c:5361 config/tc-score.c:5391
+#, c-format
+msgid " branch relocation truncate (0x%x) [-2^19 ~ 2^19]"
+msgstr ""
+
+#: config/tc-score.c:5415
+#, c-format
+msgid " branch relocation truncate (0x%x) [-2^8 ~ 2^8]"
+msgstr ""
+
+#: config/tc-score.c:5581
+#, c-format
+msgid "cannot represent %s relocation in this object file format1"
+msgstr ""
+
+#: config/tc-score.c:5640
+msgid "pce instruction error (16 bit || 16 bit)'"
+msgstr ""
+
+#: config/tc-score.c:5770
+#, c-format
+msgid "Sunplus-v2-0-0-20060510\n"
+msgstr ""
+
+#: config/tc-score.c:5786
+#, c-format
+msgid " Score-specific assembler options:\n"
+msgstr ""
+
+#: config/tc-score.c:5788
+#, c-format
+msgid " -EB\t\tassemble code for a big-endian cpu\n"
+msgstr ""
+
+#: config/tc-score.c:5793
+#, c-format
+msgid " -EL\t\tassemble code for a little-endian cpu\n"
+msgstr ""
+
+#: config/tc-score.c:5797
+#, c-format
+msgid " -FIXDD\t\tassemble code for fix data dependency\n"
+msgstr ""
+
+#: config/tc-score.c:5799
+#, c-format
+msgid ""
+" -NWARN\t\tassemble code for no warning message for fix data "
+"dependency\n"
+msgstr ""
+
+#: config/tc-score.c:5801
+#, c-format
+msgid " -SCORE5\t\tassemble code for target is SCORE5\n"
+msgstr ""
+
+#: config/tc-score.c:5803
+#, c-format
+msgid " -SCORE5U\tassemble code for target is SCORE5U\n"
+msgstr ""
+
+#: config/tc-score.c:5805
+#, c-format
+msgid ""
+" -SCORE7\t\tassemble code for target is SCORE7, this is default "
+"setting\n"
+msgstr ""
+
+#: config/tc-score.c:5807
+#, c-format
+msgid ""
+" -USE_R1\t\tassemble code for no warning message when using temp "
+"register r1\n"
+msgstr ""
+
+#: config/tc-score.c:5809
+#, c-format
+msgid " -KPIC\t\tassemble code for PIC\n"
+msgstr ""
+
+#: config/tc-score.c:5811
+#, c-format
+msgid " -O0\t\tassembler will not perform any optimizations\n"
+msgstr ""
+
+#: config/tc-score.c:5813
+#, c-format
+msgid ""
+" -G gpnum\tassemble code for setting gpsize and default is 8 byte\n"
+msgstr ""
+
+#: config/tc-score.c:5815
+#, c-format
+msgid " -V \t\tSunplus release version \n"
+msgstr ""
+
+#: config/tc-score.c:6415 read.c:1459
+msgid "missing size expression"
+msgstr ""
+
+#: config/tc-score.c:6421
+#, c-format
+msgid "BSS length (%d) < 0 ignored"
+msgstr ""
+
+#: config/tc-score.c:6436 read.c:2277
+#, c-format
+msgid "error setting flags for \".sbss\": %s"
+msgstr ""
+
+#: config/tc-score.c:6450 config/tc-sparc.c:3797
+msgid "missing alignment"
+msgstr ""
+
+#: config/tc-score.c:6487
+#, c-format
+msgid "alignment too large; %d assumed"
+msgstr ""
+
+#: config/tc-score.c:6492 read.c:2338
+msgid "alignment negative; 0 assumed"
+msgstr ""
+
+#: config/tc-score.c:6559 config/tc-z80.c:289 ecoff.c:3355 read.c:1478
+#: read.c:1591 read.c:2455 read.c:3002 read.c:3387 symbols.c:326 symbols.c:432
+#, c-format
+msgid "symbol `%s' is already defined"
+msgstr ""
+
#: config/tc-sh64.c:568
msgid "This operand must be constant at assembly time"
msgstr ""
@@ -8672,7 +9668,7 @@ msgstr ""
#: config/tc-sh64.c:1536
#, c-format
-msgid "invalid operand, not an 16-bit unsigned value: %d"
+msgid "invalid operand, not a 16-bit unsigned value: %d"
msgstr ""
#: config/tc-sh64.c:1542
@@ -8759,212 +9755,212 @@ msgstr ""
msgid "-expand-pt32 invalid together with -no-expand"
msgstr ""
-#: config/tc-sh64.c:3201
+#: config/tc-sh64.c:3199
msgid ""
"SHmedia code not allowed in same section as constants and SHcompact code"
msgstr ""
-#: config/tc-sh64.c:3219
+#: config/tc-sh64.c:3217
msgid "No segment info for current section"
msgstr ""
-#: config/tc-sh64.c:3258
+#: config/tc-sh64.c:3256
msgid "duplicate datalabel operator ignored"
msgstr ""
-#: config/tc-sh64.c:3328
+#: config/tc-sh64.c:3326
msgid "Invalid DataLabel expression"
msgstr ""
-#: config/tc-sh.c:65
+#: config/tc-sh.c:63
msgid "directive .big encountered when option -big required"
msgstr ""
-#: config/tc-sh.c:75
+#: config/tc-sh.c:73
msgid "directive .little encountered when option -little required"
msgstr ""
-#: config/tc-sh.c:1277
+#: config/tc-sh.c:1364
msgid "misplaced PIC operand"
msgstr ""
-#: config/tc-sh.c:1315
+#: config/tc-sh.c:1402
msgid "illegal double indirection"
msgstr ""
-#: config/tc-sh.c:1324
+#: config/tc-sh.c:1411
msgid "illegal register after @-"
msgstr ""
-#: config/tc-sh.c:1340
+#: config/tc-sh.c:1427
msgid "must be @(r0,...)"
msgstr ""
-#: config/tc-sh.c:1364
+#: config/tc-sh.c:1451
msgid "syntax error in @(r0,...)"
msgstr ""
-#: config/tc-sh.c:1369
+#: config/tc-sh.c:1456
msgid "syntax error in @(r0...)"
msgstr ""
-#: config/tc-sh.c:1414
+#: config/tc-sh.c:1501
msgid "Deprecated syntax."
msgstr ""
-#: config/tc-sh.c:1426 config/tc-sh.c:1431
+#: config/tc-sh.c:1513 config/tc-sh.c:1518
msgid "syntax error in @(disp,[Rn, gbr, pc])"
msgstr ""
-#: config/tc-sh.c:1436
+#: config/tc-sh.c:1523
msgid "expecting )"
msgstr ""
-#: config/tc-sh.c:1444
+#: config/tc-sh.c:1531
msgid "illegal register after @"
msgstr ""
-#: config/tc-sh.c:2115
+#: config/tc-sh.c:2202
#, c-format
msgid "unhandled %d\n"
msgstr ""
-#: config/tc-sh.c:2281
+#: config/tc-sh.c:2368
#, c-format
msgid "Invalid register: 'r%d'"
msgstr ""
-#: config/tc-sh.c:2385
+#: config/tc-sh.c:2472
#, c-format
msgid "failed for %d\n"
msgstr ""
-#: config/tc-sh.c:2498 config/tc-sh.c:2894
+#: config/tc-sh.c:2585 config/tc-sh.c:2984
msgid "invalid operands for opcode"
msgstr ""
-#: config/tc-sh.c:2503
+#: config/tc-sh.c:2590
msgid "insn can't be combined with parallel processing insn"
msgstr ""
-#: config/tc-sh.c:2510 config/tc-sh.c:2521 config/tc-sh.c:2553
+#: config/tc-sh.c:2597 config/tc-sh.c:2608 config/tc-sh.c:2640
msgid "multiple movx specifications"
msgstr ""
-#: config/tc-sh.c:2515 config/tc-sh.c:2537 config/tc-sh.c:2576
+#: config/tc-sh.c:2602 config/tc-sh.c:2624 config/tc-sh.c:2663
msgid "multiple movy specifications"
msgstr ""
-#: config/tc-sh.c:2524 config/tc-sh.c:2557
+#: config/tc-sh.c:2611 config/tc-sh.c:2644
msgid "invalid movx address register"
msgstr ""
-#: config/tc-sh.c:2526
+#: config/tc-sh.c:2613
msgid "insn cannot be combined with non-nopy"
msgstr ""
-#: config/tc-sh.c:2540 config/tc-sh.c:2596
+#: config/tc-sh.c:2627 config/tc-sh.c:2683
msgid "invalid movy address register"
msgstr ""
-#: config/tc-sh.c:2542
+#: config/tc-sh.c:2629
msgid "insn cannot be combined with non-nopx"
msgstr ""
-#: config/tc-sh.c:2555
+#: config/tc-sh.c:2642
msgid "previous movy requires nopx"
msgstr ""
-#: config/tc-sh.c:2563 config/tc-sh.c:2568
+#: config/tc-sh.c:2650 config/tc-sh.c:2655
msgid "invalid movx dsp register"
msgstr ""
-#: config/tc-sh.c:2578
+#: config/tc-sh.c:2665
msgid "previous movx requires nopy"
msgstr ""
-#: config/tc-sh.c:2587 config/tc-sh.c:2592
+#: config/tc-sh.c:2674 config/tc-sh.c:2679
msgid "invalid movy dsp register"
msgstr ""
-#: config/tc-sh.c:2602
+#: config/tc-sh.c:2689
msgid "dsp immediate shift value not constant"
msgstr ""
-#: config/tc-sh.c:2616 config/tc-sh.c:2642
+#: config/tc-sh.c:2703 config/tc-sh.c:2729
msgid "multiple parallel processing specifications"
msgstr ""
-#: config/tc-sh.c:2635
+#: config/tc-sh.c:2722
msgid "multiple condition specifications"
msgstr ""
-#: config/tc-sh.c:2673
+#: config/tc-sh.c:2760
msgid "insn cannot be combined with pmuls"
msgstr ""
-#: config/tc-sh.c:2689
+#: config/tc-sh.c:2776
msgid "bad combined pmuls output operand"
msgstr ""
-#: config/tc-sh.c:2699
+#: config/tc-sh.c:2786
msgid "destination register is same for parallel insns"
msgstr ""
-#: config/tc-sh.c:2708
+#: config/tc-sh.c:2795
msgid "condition not followed by conditionalizable insn"
msgstr ""
-#: config/tc-sh.c:2718
+#: config/tc-sh.c:2805
msgid "unrecognized characters at end of parallel processing insn"
msgstr ""
-#: config/tc-sh.c:2834
+#: config/tc-sh.c:2921
msgid "opcode not valid for this cpu variant"
msgstr ""
-#: config/tc-sh.c:2867
+#: config/tc-sh.c:2954
msgid "Delayed branches not available on SH1"
msgstr ""
-#: config/tc-sh.c:2899
+#: config/tc-sh.c:2989
#, c-format
msgid "excess operands: '%s'"
msgstr ""
-#: config/tc-sh.c:3026
+#: config/tc-sh.c:3116
msgid ".uses pseudo-op seen when not relaxing"
msgstr ""
-#: config/tc-sh.c:3032
+#: config/tc-sh.c:3122
msgid "bad .uses format"
msgstr ""
-#: config/tc-sh.c:3130
+#: config/tc-sh.c:3224
msgid "Invalid combination: --isa=SHcompact with --isa=SHmedia"
msgstr ""
-#: config/tc-sh.c:3136
+#: config/tc-sh.c:3230
msgid "Invalid combination: --isa=SHmedia with --isa=SHcompact"
msgstr ""
-#: config/tc-sh.c:3138
+#: config/tc-sh.c:3232
msgid "Invalid combination: --abi=64 with --isa=SHcompact"
msgstr ""
-#: config/tc-sh.c:3179
+#: config/tc-sh.c:3273
msgid "Invalid combination: --abi=32 with --abi=64"
msgstr ""
-#: config/tc-sh.c:3185
+#: config/tc-sh.c:3279
msgid "Invalid combination: --abi=64 with --abi=32"
msgstr ""
-#: config/tc-sh.c:3187
+#: config/tc-sh.c:3281
msgid "Invalid combination: --isa=SHcompact with --abi=64"
msgstr ""
-#: config/tc-sh.c:3221
+#: config/tc-sh.c:3315
#, c-format
msgid ""
"SH options:\n"
@@ -8981,7 +9977,7 @@ msgid ""
" | fp"
msgstr ""
-#: config/tc-sh.c:3247
+#: config/tc-sh.c:3341
#, c-format
msgid ""
"--isa=[shmedia\t\tset as the default instruction set for SH64\n"
@@ -8990,7 +9986,7 @@ msgid ""
" | SHcompact]\n"
msgstr ""
-#: config/tc-sh.c:3252
+#: config/tc-sh.c:3346
#, c-format
msgid ""
"--abi=[32|64]\t\tset size of expanded SHmedia operands and object\n"
@@ -9004,89 +10000,89 @@ msgid ""
"\t\t\tto 32 bits only\n"
msgstr ""
-#: config/tc-sh.c:3336
+#: config/tc-sh.c:3445
msgid ".uses does not refer to a local symbol in the same section"
msgstr ""
-#: config/tc-sh.c:3355
+#: config/tc-sh.c:3464
msgid "can't find fixup pointed to by .uses"
msgstr ""
-#: config/tc-sh.c:3375
+#: config/tc-sh.c:3484
msgid ".uses target does not refer to a local symbol in the same section"
msgstr ""
-#: config/tc-sh.c:3452
+#: config/tc-sh.c:3561
msgid "displacement overflows 12-bit field"
msgstr ""
-#: config/tc-sh.c:3455
+#: config/tc-sh.c:3564
#, c-format
msgid "displacement to defined symbol %s overflows 12-bit field"
msgstr ""
-#: config/tc-sh.c:3459
+#: config/tc-sh.c:3568
#, c-format
msgid "displacement to undefined symbol %s overflows 12-bit field"
msgstr ""
-#: config/tc-sh.c:3532
+#: config/tc-sh.c:3641
msgid "displacement overflows 8-bit field"
msgstr ""
-#: config/tc-sh.c:3535
+#: config/tc-sh.c:3644
#, c-format
msgid "displacement to defined symbol %s overflows 8-bit field"
msgstr ""
-#: config/tc-sh.c:3539
+#: config/tc-sh.c:3648
#, c-format
msgid "displacement to undefined symbol %s overflows 8-bit field "
msgstr ""
-#: config/tc-sh.c:3556
+#: config/tc-sh.c:3665
#, c-format
msgid "overflow in branch to %s; converted into longer instruction sequence"
msgstr ""
-#: config/tc-sh.c:3622 config/tc-sh.c:3669 config/tc-sparc.c:4234
-#: config/tc-sparc.c:4259
+#: config/tc-sh.c:3731 config/tc-sh.c:3778 config/tc-sparc.c:4314
+#: config/tc-sparc.c:4339
msgid "misaligned data"
msgstr ""
-#: config/tc-sh.c:4076
+#: config/tc-sh.c:4206
msgid "misaligned offset"
msgstr ""
-#: config/tc-sparc.c:288
+#: config/tc-sparc.c:286
msgid "Invalid default architecture, broken assembler."
msgstr ""
-#: config/tc-sparc.c:292 config/tc-sparc.c:495
+#: config/tc-sparc.c:290 config/tc-sparc.c:497
msgid "Bad opcode table, broken assembler."
msgstr ""
-#: config/tc-sparc.c:487
+#: config/tc-sparc.c:489
#, c-format
msgid "invalid architecture -xarch=%s"
msgstr ""
-#: config/tc-sparc.c:489
+#: config/tc-sparc.c:491
#, c-format
msgid "invalid architecture -A%s"
msgstr ""
-#: config/tc-sparc.c:556
+#: config/tc-sparc.c:558
#, c-format
msgid "No compiled in support for %d bit object file format"
msgstr ""
-#: config/tc-sparc.c:634
+#: config/tc-sparc.c:636
#, c-format
msgid "SPARC options:\n"
msgstr ""
-#: config/tc-sparc.c:663
+#: config/tc-sparc.c:665
#, c-format
msgid ""
"\n"
@@ -9098,24 +10094,24 @@ msgid ""
"-no-relax\t\tavoid changing any jumps and branches\n"
msgstr ""
-#: config/tc-sparc.c:671
+#: config/tc-sparc.c:673
#, c-format
msgid "-k\t\t\tgenerate PIC\n"
msgstr ""
-#: config/tc-sparc.c:675
+#: config/tc-sparc.c:677
#, c-format
msgid ""
"-32\t\t\tcreate 32 bit object file\n"
"-64\t\t\tcreate 64 bit object file\n"
msgstr ""
-#: config/tc-sparc.c:678
+#: config/tc-sparc.c:680
#, c-format
msgid "\t\t\t[default is %d]\n"
msgstr ""
-#: config/tc-sparc.c:680
+#: config/tc-sparc.c:682
#, c-format
msgid ""
"-TSO\t\t\tuse Total Store Ordering\n"
@@ -9123,12 +10119,12 @@ msgid ""
"-RMO\t\t\tuse Relaxed Memory Ordering\n"
msgstr ""
-#: config/tc-sparc.c:684
+#: config/tc-sparc.c:686
#, c-format
msgid "\t\t\t[default is %s]\n"
msgstr ""
-#: config/tc-sparc.c:686
+#: config/tc-sparc.c:688
#, c-format
msgid ""
"-KPIC\t\t\tgenerate PIC\n"
@@ -9142,7 +10138,7 @@ msgid ""
"-s\t\t\tignored\n"
msgstr ""
-#: config/tc-sparc.c:698
+#: config/tc-sparc.c:700
#, c-format
msgid ""
"-EL\t\t\tgenerate code for a little endian machine\n"
@@ -9151,1172 +10147,1181 @@ msgid ""
" instructions and little endian data.\n"
msgstr ""
-#: config/tc-sparc.c:819
+#: config/tc-sparc.c:833
#, c-format
msgid "Internal error: losing opcode: `%s' \"%s\"\n"
msgstr ""
-#: config/tc-sparc.c:838
+#: config/tc-sparc.c:852
#, c-format
msgid "Internal error: can't find opcode `%s' for `%s'\n"
msgstr ""
-#: config/tc-sparc.c:984
+#: config/tc-sparc.c:998
msgid "Support for 64-bit arithmetic not compiled in."
msgstr ""
-#: config/tc-sparc.c:1031
+#: config/tc-sparc.c:1045
msgid "set: number not in 0..4294967295 range"
msgstr ""
-#: config/tc-sparc.c:1038
+#: config/tc-sparc.c:1052
msgid "set: number not in -2147483648..4294967295 range"
msgstr ""
-#: config/tc-sparc.c:1098
+#: config/tc-sparc.c:1112
msgid "setsw: number not in -2147483648..4294967295 range"
msgstr ""
-#: config/tc-sparc.c:1147
+#: config/tc-sparc.c:1161
msgid "setx: temporary register same as destination register"
msgstr ""
-#: config/tc-sparc.c:1218
+#: config/tc-sparc.c:1232
msgid "setx: illegal temporary register g0"
msgstr ""
-#: config/tc-sparc.c:1316
+#: config/tc-sparc.c:1330
msgid "FP branch in delay slot"
msgstr ""
-#: config/tc-sparc.c:1331
+#: config/tc-sparc.c:1345
msgid "FP branch preceded by FP instruction; NOP inserted"
msgstr ""
-#: config/tc-sparc.c:1371
+#: config/tc-sparc.c:1385
msgid "failed special case insn sanity check"
msgstr ""
-#: config/tc-sparc.c:1461
+#: config/tc-sparc.c:1475
msgid ": invalid membar mask name"
msgstr ""
-#: config/tc-sparc.c:1477
+#: config/tc-sparc.c:1491
msgid ": invalid membar mask expression"
msgstr ""
-#: config/tc-sparc.c:1482
+#: config/tc-sparc.c:1496
msgid ": invalid membar mask number"
msgstr ""
-#: config/tc-sparc.c:1497
+#: config/tc-sparc.c:1511
msgid ": invalid siam mode expression"
msgstr ""
-#: config/tc-sparc.c:1502
+#: config/tc-sparc.c:1516
msgid ": invalid siam mode number"
msgstr ""
-#: config/tc-sparc.c:1518
+#: config/tc-sparc.c:1532
msgid ": invalid prefetch function name"
msgstr ""
-#: config/tc-sparc.c:1526
+#: config/tc-sparc.c:1540
msgid ": invalid prefetch function expression"
msgstr ""
-#: config/tc-sparc.c:1531
+#: config/tc-sparc.c:1545
msgid ": invalid prefetch function number"
msgstr ""
-#: config/tc-sparc.c:1559 config/tc-sparc.c:1571
+#: config/tc-sparc.c:1573 config/tc-sparc.c:1585
msgid ": unrecognizable privileged register"
msgstr ""
-#: config/tc-sparc.c:1595 config/tc-sparc.c:1620
+#: config/tc-sparc.c:1609 config/tc-sparc.c:1621
+msgid ": unrecognizable hyperprivileged register"
+msgstr ""
+
+#: config/tc-sparc.c:1645 config/tc-sparc.c:1670
msgid ": unrecognizable v9a or v9b ancillary state register"
msgstr ""
-#: config/tc-sparc.c:1600
+#: config/tc-sparc.c:1650
msgid ": rd on write only ancillary state register"
msgstr ""
#. %sys_tick and %sys_tick_cmpr are v9bnotv9a
-#: config/tc-sparc.c:1608
+#: config/tc-sparc.c:1658
msgid ": unrecognizable v9a ancillary state register"
msgstr ""
-#: config/tc-sparc.c:1644
+#: config/tc-sparc.c:1694
msgid ": asr number must be between 16 and 31"
msgstr ""
-#: config/tc-sparc.c:1652
+#: config/tc-sparc.c:1702
msgid ": asr number must be between 0 and 31"
msgstr ""
-#: config/tc-sparc.c:1662
+#: config/tc-sparc.c:1712
#, c-format
msgid ": expecting %asrN"
msgstr ""
-#: config/tc-sparc.c:1844 config/tc-sparc.c:1882 config/tc-sparc.c:2289
-#: config/tc-sparc.c:2325
+#: config/tc-sparc.c:1898 config/tc-sparc.c:1936 config/tc-sparc.c:2343
+#: config/tc-sparc.c:2379
#, c-format
msgid "Illegal operands: %%%s requires arguments in ()"
msgstr ""
-#: config/tc-sparc.c:1850
+#: config/tc-sparc.c:1904
#, c-format
msgid ""
"Illegal operands: %%%s cannot be used together with other relocs in the insn "
"()"
msgstr ""
-#: config/tc-sparc.c:1861
+#: config/tc-sparc.c:1915
#, c-format
msgid "Illegal operands: %%%s can be only used with call __tls_get_addr"
msgstr ""
-#: config/tc-sparc.c:2068
+#: config/tc-sparc.c:2122
msgid "detected global register use not covered by .register pseudo-op"
msgstr ""
-#: config/tc-sparc.c:2139
+#: config/tc-sparc.c:2193
msgid ": There are only 64 f registers; [0-63]"
msgstr ""
-#: config/tc-sparc.c:2141 config/tc-sparc.c:2159
+#: config/tc-sparc.c:2195 config/tc-sparc.c:2213
msgid ": There are only 32 f registers; [0-31]"
msgstr ""
-#: config/tc-sparc.c:2151
+#: config/tc-sparc.c:2205
msgid ": There are only 32 single precision f registers; [0-31]"
msgstr ""
-#: config/tc-sparc.c:2337
+#: config/tc-sparc.c:2391
#, c-format
msgid ""
"Illegal operands: Can't do arithmetics other than + and - involving %%%s()"
msgstr ""
-#: config/tc-sparc.c:2447
+#: config/tc-sparc.c:2501
#, c-format
msgid "Illegal operands: Can't add non-constant expression to %%%s()"
msgstr ""
-#: config/tc-sparc.c:2457
+#: config/tc-sparc.c:2511
#, c-format
msgid ""
"Illegal operands: Can't do arithmetics involving %%%s() of a relocatable "
"symbol"
msgstr ""
-#: config/tc-sparc.c:2475
+#: config/tc-sparc.c:2529
msgid ": PC-relative operand can't be a constant"
msgstr ""
-#: config/tc-sparc.c:2482
+#: config/tc-sparc.c:2536
msgid ": TLS operand can't be a constant"
msgstr ""
-#: config/tc-sparc.c:2515
+#: config/tc-sparc.c:2569
msgid ": invalid ASI name"
msgstr ""
-#: config/tc-sparc.c:2523
+#: config/tc-sparc.c:2577
msgid ": invalid ASI expression"
msgstr ""
-#: config/tc-sparc.c:2528
+#: config/tc-sparc.c:2582
msgid ": invalid ASI number"
msgstr ""
-#: config/tc-sparc.c:2625
+#: config/tc-sparc.c:2679
msgid "OPF immediate operand out of range (0-0x1ff)"
msgstr ""
-#: config/tc-sparc.c:2630
+#: config/tc-sparc.c:2684
msgid "non-immediate OPF operand, ignored"
msgstr ""
-#: config/tc-sparc.c:2649
+#: config/tc-sparc.c:2703
msgid ": invalid cpreg name"
msgstr ""
-#: config/tc-sparc.c:2678
+#: config/tc-sparc.c:2732
#, c-format
msgid "Illegal operands%s"
msgstr ""
-#: config/tc-sparc.c:2712
+#: config/tc-sparc.c:2766
#, c-format
msgid "architecture bumped from \"%s\" to \"%s\" on \"%s\""
msgstr ""
-#: config/tc-sparc.c:2748
+#: config/tc-sparc.c:2802
#, c-format
msgid "Architecture mismatch on \"%s\"."
msgstr ""
-#: config/tc-sparc.c:2749
+#: config/tc-sparc.c:2803
#, c-format
msgid " (Requires %s; requested architecture is %s.)"
msgstr ""
-#: config/tc-sparc.c:3369
+#: config/tc-sparc.c:3423
#, c-format
msgid "bad or unhandled relocation type: 0x%02x"
msgstr ""
-#: config/tc-sparc.c:3679
+#: config/tc-sparc.c:3759
msgid "Expected comma after name"
msgstr ""
-#: config/tc-sparc.c:3688
+#: config/tc-sparc.c:3768
#, c-format
msgid "BSS length (%d.) <0! Ignored."
msgstr ""
-#: config/tc-sparc.c:3700
+#: config/tc-sparc.c:3780
msgid "bad .reserve segment -- expected BSS segment"
msgstr ""
-#: config/tc-sparc.c:3717
-msgid "missing alignment"
-msgstr ""
-
-#: config/tc-sparc.c:3728
+#: config/tc-sparc.c:3808
#, c-format
msgid "alignment too large; assuming %d"
msgstr ""
-#: config/tc-sparc.c:3734 config/tc-sparc.c:3885
+#: config/tc-sparc.c:3814 config/tc-sparc.c:3965
msgid "negative alignment"
msgstr ""
-#: config/tc-sparc.c:3744 config/tc-sparc.c:3908 read.c:1313 read.c:2143
+#: config/tc-sparc.c:3824 config/tc-sparc.c:3988 read.c:1315 read.c:2350
msgid "alignment not a power of 2"
msgstr ""
-#: config/tc-sparc.c:3822 config/tc-v850.c:223
+#: config/tc-sparc.c:3902 config/tc-v850.c:222
msgid "Expected comma after symbol-name"
msgstr ""
-#: config/tc-sparc.c:3832
+#: config/tc-sparc.c:3912
#, c-format
msgid ".COMMon length (%lu) out of range ignored"
msgstr ""
-#: config/tc-sparc.c:3865
+#: config/tc-sparc.c:3945
msgid "Expected comma after common length"
msgstr ""
-#: config/tc-sparc.c:3879
+#: config/tc-sparc.c:3959
#, c-format
msgid "alignment too large; assuming %ld"
msgstr ""
-#: config/tc-sparc.c:4025
+#: config/tc-sparc.c:4105
msgid "Unknown segment type"
msgstr ""
-#: config/tc-sparc.c:4104 config/tc-sparc.c:4114
+#: config/tc-sparc.c:4184 config/tc-sparc.c:4194
#, c-format
msgid "register syntax is .register %%g[2367],{#scratch|symbolname|#ignore}"
msgstr ""
-#: config/tc-sparc.c:4132
+#: config/tc-sparc.c:4212
msgid "redefinition of global register"
msgstr ""
-#: config/tc-sparc.c:4143
+#: config/tc-sparc.c:4223
#, c-format
msgid "Register symbol %s already defined."
msgstr ""
-#: config/tc-sparc.c:4352
+#: config/tc-sparc.c:4432
#, c-format
msgid "Illegal operands: %%r_plt in %d-byte data field"
msgstr ""
-#: config/tc-sparc.c:4362
+#: config/tc-sparc.c:4442
#, c-format
msgid "Illegal operands: %%r_tls_dtpoff in %d-byte data field"
msgstr ""
-#: config/tc-sparc.c:4399
+#: config/tc-sparc.c:4479 config/tc-vax.c:3312
#, c-format
msgid "Illegal operands: Only %%r_%s%d allowed in %d-byte data fields"
msgstr ""
-#: config/tc-sparc.c:4407 config/tc-sparc.c:4438 config/tc-sparc.c:4447
+#: config/tc-sparc.c:4487 config/tc-sparc.c:4518 config/tc-sparc.c:4527
+#: config/tc-vax.c:3320 config/tc-vax.c:3351 config/tc-vax.c:3360
#, c-format
msgid "Illegal operands: %%r_%s%d requires arguments in ()"
msgstr ""
-#: config/tc-sparc.c:4456
+#: config/tc-sparc.c:4536 config/tc-vax.c:3369
#, c-format
msgid "Illegal operands: garbage after %%r_%s%d()"
msgstr ""
-#: config/tc-sparc.h:46
+#: config/tc-sparc.h:60
msgid "sparc convert_frag\n"
msgstr ""
-#: config/tc-sparc.h:48
+#: config/tc-sparc.h:62 config/tc-z80.h:53
msgid "estimate_size_before_relax called"
msgstr ""
+#: config/tc-spu.c:126
+#, c-format
+msgid "Can't hash instruction '%s':%s"
+msgstr ""
+
+#: config/tc-spu.c:180
+msgid ""
+"SPU options:\n"
+" --apuasm\t\t emulate behaviour of apuasm\n"
+msgstr ""
+
+#: config/tc-spu.c:286
+#, c-format
+msgid "Invalid mnemonic '%s'"
+msgstr ""
+
+#: config/tc-spu.c:292
+#, c-format
+msgid "'%s' is only available in DD2.0 or higher."
+msgstr ""
+
+#: config/tc-spu.c:324
+#, c-format
+msgid "Error in argument %d. Expecting: \"%s\""
+msgstr ""
+
+#: config/tc-spu.c:335
+msgid "Mixing register syntax, with and without '$'."
+msgstr ""
+
+#: config/tc-spu.c:341
+#, c-format
+msgid "Treating '%-*s' as a symbol."
+msgstr ""
+
+#: config/tc-spu.c:551
+msgid "'SPU_RdEventMask' (channel 11) is only available in DD2.0 or higher."
+msgstr ""
+
+#: config/tc-spu.c:553
+msgid "'MFC_RdTagMask' (channel 12) is only available in DD2.0 or higher."
+msgstr ""
+
+#: config/tc-spu.c:596
+#, c-format
+msgid "Using old style, %%lo(expr), please change to PPC style, expr@l."
+msgstr ""
+
+#: config/tc-spu.c:602
+#, c-format
+msgid "Using old style, %%hi(expr), please change to PPC style, expr@h."
+msgstr ""
+
+#: config/tc-spu.c:672 config/tc-spu.c:675
+#, c-format
+msgid "Constant expression %d out of range, [%d, %d]."
+msgstr ""
+
+#: config/tc-spu.c:860
+msgid "Relaxation should never occur"
+msgstr ""
+
+#: config/tc-spu.h:83
+msgid "spu convert_frag\n"
+msgstr ""
+
#. Only word (et al.), align, or conditionals are allowed within
#. .struct/.union.
-#: config/tc-tic54x.c:222
+#: config/tc-tic54x.c:220
msgid "pseudo-op illegal within .struct/.union"
msgstr ""
-#: config/tc-tic54x.c:347
+#: config/tc-tic54x.c:345
#, c-format
msgid "C54x-specific command line options:\n"
msgstr ""
-#: config/tc-tic54x.c:348
+#: config/tc-tic54x.c:346
#, c-format
msgid "-mfar-mode | -mf Use extended addressing\n"
msgstr ""
-#: config/tc-tic54x.c:349
+#: config/tc-tic54x.c:347
#, c-format
msgid "-mcpu=<CPU version> Specify the CPU version\n"
msgstr ""
-#: config/tc-tic54x.c:350
+#: config/tc-tic54x.c:348
#, c-format
msgid "-merrors-to-file <filename>\n"
msgstr ""
-#: config/tc-tic54x.c:351
+#: config/tc-tic54x.c:349
#, c-format
msgid "-me <filename> Redirect errors to a file\n"
msgstr ""
-#: config/tc-tic54x.c:473
+#: config/tc-tic54x.c:471
msgid "Comma and symbol expected for '.asg STRING, SYMBOL'"
msgstr ""
-#: config/tc-tic54x.c:527
+#: config/tc-tic54x.c:525
msgid "Unterminated string after absolute expression"
msgstr ""
-#: config/tc-tic54x.c:535
+#: config/tc-tic54x.c:533
msgid "Comma and symbol expected for '.eval EXPR, SYMBOL'"
msgstr ""
-#: config/tc-tic54x.c:547
+#: config/tc-tic54x.c:545
msgid "symbols assigned with .eval must begin with a letter"
msgstr ""
-#: config/tc-tic54x.c:805
+#: config/tc-tic54x.c:803
msgid "Offset on nested structures is ignored"
msgstr ""
-#: config/tc-tic54x.c:856
+#: config/tc-tic54x.c:854
#, c-format
msgid ".end%s without preceding .%s"
msgstr ""
-#: config/tc-tic54x.c:923
+#: config/tc-tic54x.c:921
#, c-format
msgid "Unrecognized struct/union tag '%s'"
msgstr ""
-#: config/tc-tic54x.c:925
+#: config/tc-tic54x.c:923
msgid ".tag requires a structure tag"
msgstr ""
-#: config/tc-tic54x.c:931
+#: config/tc-tic54x.c:929
msgid "Label required for .tag"
msgstr ""
-#: config/tc-tic54x.c:950
+#: config/tc-tic54x.c:948
#, c-format
msgid ".tag target '%s' undefined"
msgstr ""
-#: config/tc-tic54x.c:1013
+#: config/tc-tic54x.c:1011
#, c-format
msgid ".field count '%d' out of range (1 <= X <= 32)"
msgstr ""
-#: config/tc-tic54x.c:1041
+#: config/tc-tic54x.c:1039
#, c-format
msgid "Unrecognized field type '%c'"
msgstr ""
#. Disallow .byte with a non constant expression that will
#. require relocation.
-#: config/tc-tic54x.c:1178
+#: config/tc-tic54x.c:1176
msgid "Relocatable values require at least WORD storage"
msgstr ""
-#: config/tc-tic54x.c:1240
+#: config/tc-tic54x.c:1238
msgid "Use of .def/.ref is deprecated. Use .global instead"
msgstr ""
-#: config/tc-tic54x.c:1439
+#: config/tc-tic54x.c:1437
msgid ".space/.bes repeat count is negative, ignored"
msgstr ""
-#: config/tc-tic54x.c:1444
+#: config/tc-tic54x.c:1442
msgid ".space/.bes repeat count is zero, ignored"
msgstr ""
-#: config/tc-tic54x.c:1522
+#: config/tc-tic54x.c:1520
msgid "Missing size argument"
msgstr ""
-#: config/tc-tic54x.c:1659
+#: config/tc-tic54x.c:1657
msgid "CPU version has already been set"
msgstr ""
-#: config/tc-tic54x.c:1663
+#: config/tc-tic54x.c:1661
#, c-format
msgid "Unrecognized version '%s'"
msgstr ""
-#: config/tc-tic54x.c:1669
+#: config/tc-tic54x.c:1667
msgid "Changing of CPU version on the fly not supported"
msgstr ""
-#: config/tc-tic54x.c:1805
+#: config/tc-tic54x.c:1803
msgid "p2align not supported on this target"
msgstr ""
-#: config/tc-tic54x.c:1818
+#: config/tc-tic54x.c:1816
msgid "Argument to .even ignored"
msgstr ""
-#: config/tc-tic54x.c:1865
+#: config/tc-tic54x.c:1863
msgid "Invalid field size, must be from 1 to 32"
msgstr ""
-#: config/tc-tic54x.c:1878
+#: config/tc-tic54x.c:1876
msgid "field size must be 16 when value is relocatable"
msgstr ""
-#: config/tc-tic54x.c:1893
+#: config/tc-tic54x.c:1891
msgid "field value truncated"
msgstr ""
-#: config/tc-tic54x.c:2002 config/tc-tic54x.c:2319
+#: config/tc-tic54x.c:2000 config/tc-tic54x.c:2317
#, c-format
msgid "Unrecognized section '%s'"
msgstr ""
-#: config/tc-tic54x.c:2011
+#: config/tc-tic54x.c:2009
msgid "Current section is unitialized, section name required for .clink"
msgstr ""
-#: config/tc-tic54x.c:2225
+#: config/tc-tic54x.c:2223
msgid "ENDLOOP without corresponding LOOP"
msgstr ""
-#: config/tc-tic54x.c:2269
+#: config/tc-tic54x.c:2267
msgid "Mixing of normal and extended addressing not supported"
msgstr ""
-#: config/tc-tic54x.c:2275
+#: config/tc-tic54x.c:2273
msgid "Extended addressing not supported on the specified CPU"
msgstr ""
-#: config/tc-tic54x.c:2325
+#: config/tc-tic54x.c:2323
msgid ".sblock may be used for initialized sections only"
msgstr ""
-#: config/tc-tic54x.c:2356
+#: config/tc-tic54x.c:2354
msgid "Symbol missing for .set/.equ"
msgstr ""
-#: config/tc-tic54x.c:2415
+#: config/tc-tic54x.c:2413
msgid ".var may only be used within a macro definition"
msgstr ""
-#: config/tc-tic54x.c:2423
+#: config/tc-tic54x.c:2421
msgid "Substitution symbols must begin with a letter"
msgstr ""
-#: config/tc-tic54x.c:2517
+#: config/tc-tic54x.c:2515
#, c-format
-msgid "Can't open macro library file '%s' for reading."
+msgid "can't open macro library file '%s' for reading: %s"
msgstr ""
-#: config/tc-tic54x.c:2524
+#: config/tc-tic54x.c:2522
#, c-format
msgid "File '%s' not in macro archive format"
msgstr ""
-#: config/tc-tic54x.c:2656
+#: config/tc-tic54x.c:2654
#, c-format
msgid "Bad COFF version '%s'"
msgstr ""
-#: config/tc-tic54x.c:2665
+#: config/tc-tic54x.c:2663
#, c-format
msgid "Bad CPU version '%s'"
msgstr ""
-#: config/tc-tic54x.c:2678 config/tc-tic54x.c:2681
+#: config/tc-tic54x.c:2676 config/tc-tic54x.c:2679
#, c-format
msgid "Can't redirect stderr to the file '%s'"
msgstr ""
-#: config/tc-tic54x.c:2809
+#: config/tc-tic54x.c:2807
#, c-format
msgid "Undefined substitution symbol '%s'"
msgstr ""
-#: config/tc-tic54x.c:3466
+#: config/tc-tic54x.c:3464
msgid "Badly formed address expression"
msgstr ""
-#: config/tc-tic54x.c:3730
+#: config/tc-tic54x.c:3728
#, c-format
msgid "Invalid dmad syntax '%s'"
msgstr ""
-#: config/tc-tic54x.c:3796
+#: config/tc-tic54x.c:3794
#, c-format
msgid ""
"Use the .mmregs directive to use memory-mapped register names such as '%s'"
msgstr ""
-#: config/tc-tic54x.c:3849
+#: config/tc-tic54x.c:3847
msgid "Address mode *+ARx is write-only. Results of reading are undefined."
msgstr ""
-#: config/tc-tic54x.c:3869
+#: config/tc-tic54x.c:3867
#, c-format
msgid "Unrecognized indirect address format \"%s\""
msgstr ""
-#: config/tc-tic54x.c:3908
+#: config/tc-tic54x.c:3906
#, c-format
msgid "Operand '%s' out of range (%d <= x <= %d)"
msgstr ""
-#: config/tc-tic54x.c:3928
+#: config/tc-tic54x.c:3926
msgid "Error in relocation handling"
msgstr ""
-#: config/tc-tic54x.c:3949 config/tc-tic54x.c:4013 config/tc-tic54x.c:4045
+#: config/tc-tic54x.c:3947 config/tc-tic54x.c:4011 config/tc-tic54x.c:4043
#, c-format
msgid "Unrecognized condition code \"%s\""
msgstr ""
-#: config/tc-tic54x.c:3966
+#: config/tc-tic54x.c:3964
#, c-format
msgid "Condition \"%s\" does not match preceding group"
msgstr ""
-#: config/tc-tic54x.c:3974
+#: config/tc-tic54x.c:3972
#, c-format
msgid ""
"Condition \"%s\" uses a different accumulator from a preceding condition"
msgstr ""
-#: config/tc-tic54x.c:3981
+#: config/tc-tic54x.c:3979
msgid "Only one comparison conditional allowed"
msgstr ""
-#: config/tc-tic54x.c:3986
+#: config/tc-tic54x.c:3984
msgid "Only one overflow conditional allowed"
msgstr ""
-#: config/tc-tic54x.c:3994
+#: config/tc-tic54x.c:3992
#, c-format
msgid "Duplicate %s conditional"
msgstr ""
-#: config/tc-tic54x.c:4029
+#: config/tc-tic54x.c:4027
msgid "Invalid auxiliary register (use AR0-AR7)"
msgstr ""
-#: config/tc-tic54x.c:4065
+#: config/tc-tic54x.c:4063
msgid "lk addressing modes are invalid for memory-mapped register addressing"
msgstr ""
-#: config/tc-tic54x.c:4073
+#: config/tc-tic54x.c:4071
msgid ""
"Address mode *+ARx is not allowed in memory-mapped register addressing. "
"Resulting behavior is undefined."
msgstr ""
-#: config/tc-tic54x.c:4099
+#: config/tc-tic54x.c:4097
msgid ""
"Destination accumulator for each part of this parallel instruction must be "
"different"
msgstr ""
-#: config/tc-tic54x.c:4148
+#: config/tc-tic54x.c:4146
#, c-format
msgid "Memory mapped register \"%s\" out of range"
msgstr ""
-#: config/tc-tic54x.c:4187
+#: config/tc-tic54x.c:4185
msgid "Invalid operand (use 1, 2, or 3)"
msgstr ""
-#: config/tc-tic54x.c:4212
+#: config/tc-tic54x.c:4210
msgid "A status register or status bit name is required"
msgstr ""
-#: config/tc-tic54x.c:4222
+#: config/tc-tic54x.c:4220
#, c-format
msgid "Unrecognized status bit \"%s\""
msgstr ""
-#: config/tc-tic54x.c:4245
+#: config/tc-tic54x.c:4243
#, c-format
msgid "Invalid status register \"%s\""
msgstr ""
-#: config/tc-tic54x.c:4257
+#: config/tc-tic54x.c:4255
#, c-format
msgid "Operand \"%s\" out of range (use 1 or 2)"
msgstr ""
-#: config/tc-tic54x.c:4465
+#: config/tc-tic54x.c:4463
#, c-format
msgid "Unrecognized instruction \"%s\""
msgstr ""
-#: config/tc-tic54x.c:4494
+#: config/tc-tic54x.c:4492
#, c-format
msgid "Unrecognized operand list '%s' for instruction '%s'"
msgstr ""
-#: config/tc-tic54x.c:4526
+#: config/tc-tic54x.c:4524
#, c-format
msgid "Unrecognized parallel instruction \"%s\""
msgstr ""
-#: config/tc-tic54x.c:4577
+#: config/tc-tic54x.c:4575
#, c-format
msgid "Invalid operand (s) for parallel instruction \"%s\""
msgstr ""
-#: config/tc-tic54x.c:4580
+#: config/tc-tic54x.c:4578
#, c-format
msgid "Unrecognized parallel instruction combination \"%s || %s\""
msgstr ""
-#: config/tc-tic54x.c:4817
+#: config/tc-tic54x.c:4815
#, c-format
msgid "%s symbol recursion stopped at second appearance of '%s'"
msgstr ""
-#: config/tc-tic54x.c:4857
+#: config/tc-tic54x.c:4855
msgid "Unrecognized substitution symbol function"
msgstr ""
-#: config/tc-tic54x.c:4862
+#: config/tc-tic54x.c:4860
msgid "Missing '(' after substitution symbol function"
msgstr ""
-#: config/tc-tic54x.c:4876
+#: config/tc-tic54x.c:4874
msgid "Expecting second argument"
msgstr ""
-#: config/tc-tic54x.c:4889 config/tc-tic54x.c:4939
+#: config/tc-tic54x.c:4887 config/tc-tic54x.c:4937
msgid "Extra junk in function call, expecting ')'"
msgstr ""
-#: config/tc-tic54x.c:4915
+#: config/tc-tic54x.c:4913
msgid "Function expects two arguments"
msgstr ""
-#: config/tc-tic54x.c:4928
+#: config/tc-tic54x.c:4926
msgid "Expecting character constant argument"
msgstr ""
-#: config/tc-tic54x.c:4934
+#: config/tc-tic54x.c:4932
msgid "Both arguments must be substitution symbols"
msgstr ""
-#: config/tc-tic54x.c:4987
+#: config/tc-tic54x.c:4985
#, c-format
msgid "Invalid subscript (use 1 to %d)"
msgstr ""
-#: config/tc-tic54x.c:4997
+#: config/tc-tic54x.c:4995
#, c-format
msgid "Invalid length (use 0 to %d"
msgstr ""
-#: config/tc-tic54x.c:5007
+#: config/tc-tic54x.c:5005
msgid "Missing ')' in subscripted substitution symbol expression"
msgstr ""
-#: config/tc-tic54x.c:5027
+#: config/tc-tic54x.c:5025
msgid "Missing forced substitution terminator ':'"
msgstr ""
-#: config/tc-tic54x.c:5182
+#: config/tc-tic54x.c:5180
#, c-format
msgid ""
"Instruction does not fit in available delay slots (%d-word insn, %d slots "
"left)"
msgstr ""
-#: config/tc-tic54x.c:5223
+#: config/tc-tic54x.c:5221
#, c-format
msgid "Unrecognized parallel instruction '%s'"
msgstr ""
-#: config/tc-tic54x.c:5235
+#: config/tc-tic54x.c:5233
#, c-format
msgid "Instruction '%s' requires an LP cpu version"
msgstr ""
-#: config/tc-tic54x.c:5242
+#: config/tc-tic54x.c:5240
#, c-format
msgid "Instruction '%s' requires far mode addressing"
msgstr ""
-#: config/tc-tic54x.c:5254
+#: config/tc-tic54x.c:5252
#, c-format
msgid ""
"Instruction does not fit in available delay slots (%d-word insn, %d slots "
"left). Resulting behavior is undefined."
msgstr ""
-#: config/tc-tic54x.c:5264
+#: config/tc-tic54x.c:5262
msgid ""
"Instructions which cause PC discontinuity are not allowed in a delay slot. "
"Resulting behavior is undefined."
msgstr ""
-#: config/tc-tic54x.c:5275
+#: config/tc-tic54x.c:5273
#, c-format
msgid "'%s' is not repeatable. Resulting behavior is undefined."
msgstr ""
-#: config/tc-tic54x.c:5279
+#: config/tc-tic54x.c:5277
msgid ""
"Instructions using long offset modifiers or absolute addresses are not "
"repeatable. Resulting behavior is undefined."
msgstr ""
-#: config/tc-tic54x.c:5459
+#: config/tc-tic54x.c:5457
#, c-format
msgid "Unsupported relocation size %d"
msgstr ""
-#: config/tc-tic54x.c:5602
+#: config/tc-tic54x.c:5600
msgid "non-absolute value used with .space/.bes"
msgstr ""
-#: config/tc-tic54x.c:5606
+#: config/tc-tic54x.c:5604
#, c-format
msgid "negative value ignored in %s"
msgstr ""
-#: config/tc-tic54x.c:5695
+#: config/tc-tic54x.c:5693
#, c-format
msgid "attempt to .space/.bes backwards? (%ld)"
msgstr ""
-#: config/tc-tic54x.c:5729
+#: config/tc-tic54x.c:5727
#, c-format
msgid "Invalid label '%s'"
msgstr ""
-#: config/tc-v850.c:234
+#: config/tc-v850.c:233
#, c-format
msgid ".COMMon length (%d.) < 0! Ignored."
msgstr ""
-#: config/tc-v850.c:255
+#: config/tc-v850.c:254
#, c-format
msgid "Length of .comm \"%s\" is already %ld. Not changed to %d."
msgstr ""
-#: config/tc-v850.c:281
+#: config/tc-v850.c:280
msgid "Common alignment negative; 0 assumed"
msgstr ""
-#: config/tc-v850.c:939
+#: config/tc-v850.c:938
#, c-format
msgid "unknown operand shift: %x\n"
msgstr ""
-#: config/tc-v850.c:940
+#: config/tc-v850.c:939
msgid "internal failure in parse_register_list"
msgstr ""
-#: config/tc-v850.c:956
+#: config/tc-v850.c:955
msgid "constant expression or register list expected"
msgstr ""
-#: config/tc-v850.c:961 config/tc-v850.c:974 config/tc-v850.c:993
+#: config/tc-v850.c:960 config/tc-v850.c:973 config/tc-v850.c:992
msgid "high bits set in register list expression"
msgstr ""
-#: config/tc-v850.c:1032 config/tc-v850.c:1095
+#: config/tc-v850.c:1031 config/tc-v850.c:1094
msgid "illegal register included in list"
msgstr ""
-#: config/tc-v850.c:1038
+#: config/tc-v850.c:1037
msgid "system registers cannot be included in list"
msgstr ""
-#: config/tc-v850.c:1043
+#: config/tc-v850.c:1042
msgid "PSW cannot be included in list"
msgstr ""
-#: config/tc-v850.c:1050
+#: config/tc-v850.c:1049
msgid "High value system registers cannot be included in list"
msgstr ""
-#: config/tc-v850.c:1074
+#: config/tc-v850.c:1073
msgid "second register should follow dash in register list"
msgstr ""
-#: config/tc-v850.c:1119
+#: config/tc-v850.c:1118
#, c-format
msgid " V850 options:\n"
msgstr ""
-#: config/tc-v850.c:1120
+#: config/tc-v850.c:1119
#, c-format
msgid " -mwarn-signed-overflow Warn if signed immediate values overflow\n"
msgstr ""
-#: config/tc-v850.c:1121
+#: config/tc-v850.c:1120
#, c-format
msgid ""
" -mwarn-unsigned-overflow Warn if unsigned immediate values overflow\n"
msgstr ""
-#: config/tc-v850.c:1122
+#: config/tc-v850.c:1121
#, c-format
msgid " -mv850 The code is targeted at the v850\n"
msgstr ""
-#: config/tc-v850.c:1123
+#: config/tc-v850.c:1122
#, c-format
msgid " -mv850e The code is targeted at the v850e\n"
msgstr ""
-#: config/tc-v850.c:1124
+#: config/tc-v850.c:1123
#, c-format
msgid " -mv850e1 The code is targeted at the v850e1\n"
msgstr ""
-#: config/tc-v850.c:1125
+#: config/tc-v850.c:1124
#, c-format
msgid ""
" -mv850any The code is generic, despite any processor "
"specific instructions\n"
msgstr ""
-#: config/tc-v850.c:1126
+#: config/tc-v850.c:1125
#, c-format
msgid " -mrelax Enable relaxation\n"
msgstr ""
-#: config/tc-v850.c:1308
+#: config/tc-v850.c:1323
#, c-format
msgid "Unable to determine default target processor from string: %s"
msgstr ""
-#: config/tc-v850.c:1343
+#: config/tc-v850.c:1358
msgid "lo() relocation used on an instruction which does not support it"
msgstr ""
-#: config/tc-v850.c:1360
+#: config/tc-v850.c:1375
msgid "ctoff() relocation used on an instruction which does not support it"
msgstr ""
-#: config/tc-v850.c:1382
+#: config/tc-v850.c:1397
msgid "sdaoff() relocation used on an instruction which does not support it"
msgstr ""
-#: config/tc-v850.c:1404
+#: config/tc-v850.c:1419
msgid "zdaoff() relocation used on an instruction which does not support it"
msgstr ""
-#: config/tc-v850.c:1437
+#: config/tc-v850.c:1452
msgid "tdaoff() relocation used on an instruction which does not support it"
msgstr ""
-#: config/tc-v850.c:1642
+#: config/tc-v850.c:1657
msgid "Target processor does not support this instruction."
msgstr ""
-#: config/tc-v850.c:1731 config/tc-v850.c:1760 config/tc-v850.c:1940
+#: config/tc-v850.c:1746 config/tc-v850.c:1775 config/tc-v850.c:1955
msgid "immediate operand is too large"
msgstr ""
-#: config/tc-v850.c:1742
+#: config/tc-v850.c:1757
msgid "AAARG -> unhandled constant reloc"
msgstr ""
-#: config/tc-v850.c:1785
+#: config/tc-v850.c:1800
msgid "invalid register name"
msgstr ""
-#: config/tc-v850.c:1789
+#: config/tc-v850.c:1804
msgid "register r0 cannot be used here"
msgstr ""
-#: config/tc-v850.c:1800
+#: config/tc-v850.c:1815
msgid "invalid system register name"
msgstr ""
-#: config/tc-v850.c:1812
+#: config/tc-v850.c:1827
msgid "expected EP register"
msgstr ""
-#: config/tc-v850.c:1828
+#: config/tc-v850.c:1843
msgid "invalid condition code name"
msgstr ""
-#: config/tc-v850.c:1848 config/tc-v850.c:1852
+#: config/tc-v850.c:1863 config/tc-v850.c:1867
msgid "constant too big to fit into instruction"
msgstr ""
-#: config/tc-v850.c:1905
+#: config/tc-v850.c:1920
msgid "syntax error: value is missing before the register name"
msgstr ""
-#: config/tc-v850.c:1907
+#: config/tc-v850.c:1922
msgid "syntax error: register not expected"
msgstr ""
-#: config/tc-v850.c:1920
+#: config/tc-v850.c:1935
msgid "syntax error: system register not expected"
msgstr ""
-#: config/tc-v850.c:1924
+#: config/tc-v850.c:1939
msgid "syntax error: condition code not expected"
msgstr ""
-#: config/tc-v850.c:1958
+#: config/tc-v850.c:1973 config/tc-xtensa.c:11545
msgid "invalid operand"
msgstr ""
-#: config/tc-vax.c:290
-#, c-format
-msgid "VIP_BEGIN error:%s"
-msgstr ""
-
-#: config/tc-vax.c:461
-#, c-format
-msgid "Ignoring statement due to \"%s\""
-msgstr ""
-
-#: config/tc-vax.c:480
-#, c-format
-msgid "Aborting because statement has \"%s\""
-msgstr ""
-
-#: config/tc-vax.c:527
-msgid "Can't relocate expression"
-msgstr ""
-
-#: config/tc-vax.c:630
-msgid "Bignum not permitted in short literal. Immediate mode assumed."
-msgstr ""
-
-#: config/tc-vax.c:639
-msgid "Can't do flonum short literal: immediate mode used."
-msgstr ""
-
-#: config/tc-vax.c:684
-#, c-format
-msgid "A bignum/flonum may not be a displacement: 0x%lx used"
-msgstr ""
-
-#: config/tc-vax.c:1007
-#, c-format
-msgid "Short literal overflow(%ld.), immediate mode assumed."
-msgstr ""
-
-#: config/tc-vax.c:1016
-#, c-format
-msgid "Forced short literal to immediate mode. now_seg=%s to_seg=%s"
-msgstr ""
-
-#: config/tc-vax.c:1081
-msgid "Length specification ignored. Address mode 9F used"
-msgstr ""
-
-#: config/tc-vax.c:1142
-msgid "Invalid operand: immediate value used as base address."
-msgstr ""
-
-#: config/tc-vax.c:1144
-msgid "Invalid operand: immediate value used as address."
-msgstr ""
-
-#: config/tc-vax.c:1169
-msgid "Symbol used as immediate operand in PIC mode."
-msgstr ""
-
-#: config/tc-vax.c:1942
-msgid "odd number of bytes in operand description"
-msgstr ""
-
-#: config/tc-vax.c:1958
-msgid "Bad operand"
-msgstr ""
-
-#: config/tc-vax.c:1963
-msgid "Not enough operands"
-msgstr ""
-
-#: config/tc-vax.c:1970
-msgid "Too many operands"
-msgstr ""
-
-#: config/tc-vax.c:2533
+#: config/tc-vax.c:1343
msgid "no '[' to match ']'"
msgstr ""
-#: config/tc-vax.c:2553
+#: config/tc-vax.c:1359
msgid "bad register in []"
msgstr ""
-#: config/tc-vax.c:2555
+#: config/tc-vax.c:1361
msgid "[PC] index banned"
msgstr ""
-#: config/tc-vax.c:2590
+#: config/tc-vax.c:1397
msgid "no '(' to match ')'"
msgstr ""
-#: config/tc-vax.c:2730
+#: config/tc-vax.c:1513
msgid "invalid branch operand"
msgstr ""
-#: config/tc-vax.c:2759
+#: config/tc-vax.c:1540
msgid "address prohibits @"
msgstr ""
-#: config/tc-vax.c:2761
+#: config/tc-vax.c:1542
msgid "address prohibits #"
msgstr ""
-#: config/tc-vax.c:2765
+#: config/tc-vax.c:1546
msgid "address prohibits -()"
msgstr ""
-#: config/tc-vax.c:2767
+#: config/tc-vax.c:1548
msgid "address prohibits ()+"
msgstr ""
-#: config/tc-vax.c:2770
+#: config/tc-vax.c:1551
msgid "address prohibits ()"
msgstr ""
-#: config/tc-vax.c:2772
+#: config/tc-vax.c:1553
msgid "address prohibits []"
msgstr ""
-#: config/tc-vax.c:2774
+#: config/tc-vax.c:1555
msgid "address prohibits register"
msgstr ""
-#: config/tc-vax.c:2776
+#: config/tc-vax.c:1557
msgid "address prohibits displacement length specifier"
msgstr ""
-#: config/tc-vax.c:2806
+#: config/tc-vax.c:1585
msgid "invalid operand of S^#"
msgstr ""
-#: config/tc-vax.c:2823
+#: config/tc-vax.c:1598
msgid "S^# needs expression"
msgstr ""
-#: config/tc-vax.c:2830
+#: config/tc-vax.c:1605
msgid "S^# may only read-access"
msgstr ""
-#: config/tc-vax.c:2855
+#: config/tc-vax.c:1628
msgid "invalid operand of -()"
msgstr ""
-#: config/tc-vax.c:2861
+#: config/tc-vax.c:1634
msgid "-(PC) unpredictable"
msgstr ""
-#: config/tc-vax.c:2863
+#: config/tc-vax.c:1636
msgid "[]index same as -()register: unpredictable"
msgstr ""
-#: config/tc-vax.c:2899
+#: config/tc-vax.c:1668
msgid "invalid operand of ()+"
msgstr ""
-#: config/tc-vax.c:2905
+#: config/tc-vax.c:1674
msgid "(PC)+ unpredictable"
msgstr ""
-#: config/tc-vax.c:2907
+#: config/tc-vax.c:1676
msgid "[]index same as ()+register: unpredictable"
msgstr ""
-#: config/tc-vax.c:2932
+#: config/tc-vax.c:1699
msgid "# conflicts length"
msgstr ""
-#: config/tc-vax.c:2934
+#: config/tc-vax.c:1701
msgid "# bars register"
msgstr ""
-#: config/tc-vax.c:2956
+#: config/tc-vax.c:1721
msgid "writing or modifying # is unpredictable"
msgstr ""
-#: config/tc-vax.c:2986
+#: config/tc-vax.c:1747
msgid "length not needed"
msgstr ""
-#: config/tc-vax.c:2993
+#: config/tc-vax.c:1754
msgid "can't []index a register, because it has no address"
msgstr ""
-#: config/tc-vax.c:2995
+#: config/tc-vax.c:1756
msgid "a register has no address"
msgstr ""
-#: config/tc-vax.c:3006
+#: config/tc-vax.c:1765
msgid "PC part of operand unpredictable"
msgstr ""
-#: config/tc-vax.c:3281
+#: config/tc-vax.c:1921
+msgid "odd number of bytes in operand description"
+msgstr ""
+
+#: config/tc-vax.c:1935
+msgid "Bad operand"
+msgstr ""
+
+#: config/tc-vax.c:1940
+msgid "Not enough operands"
+msgstr ""
+
+#: config/tc-vax.c:1947
+msgid "Too many operands"
+msgstr ""
+
+#: config/tc-vax.c:2217
msgid "SYMBOL TABLE not implemented"
msgstr ""
-#: config/tc-vax.c:3285
+#: config/tc-vax.c:2221
msgid "TOKEN TRACE not implemented"
msgstr ""
-#: config/tc-vax.c:3289
+#: config/tc-vax.c:2225
#, c-format
msgid "Displacement length %s ignored!"
msgstr ""
-#: config/tc-vax.c:3293
+#: config/tc-vax.c:2229
#, c-format
msgid "I don't need or use temp. file \"%s\"."
msgstr ""
-#: config/tc-vax.c:3297
+#: config/tc-vax.c:2233
msgid "I don't use an interpass file! -V ignored"
msgstr ""
-#: config/tc-vax.c:3354
+#: config/tc-vax.c:2290
#, c-format
msgid ""
"VAX options:\n"
@@ -10328,7 +11333,7 @@ msgid ""
"-V\t\t\tignored\n"
msgstr ""
-#: config/tc-vax.c:3363
+#: config/tc-vax.c:2299
#, c-format
msgid ""
"VMS options:\n"
@@ -10340,6 +11345,69 @@ msgid ""
"-v\"VERSION\"\t\tcode being assembled was produced by compiler \"VERSION\"\n"
msgstr ""
+#: config/tc-vax.c:2464
+#, c-format
+msgid "Ignoring statement due to \"%s\""
+msgstr ""
+
+#: config/tc-vax.c:2481
+#, c-format
+msgid "Aborting because statement has \"%s\""
+msgstr ""
+
+#: config/tc-vax.c:2526
+msgid "Can't relocate expression"
+msgstr ""
+
+#: config/tc-vax.c:2629
+msgid "Bignum not permitted in short literal. Immediate mode assumed."
+msgstr ""
+
+#: config/tc-vax.c:2638
+msgid "Can't do flonum short literal: immediate mode used."
+msgstr ""
+
+#: config/tc-vax.c:2685
+#, c-format
+msgid "A bignum/flonum may not be a displacement: 0x%lx used"
+msgstr ""
+
+#: config/tc-vax.c:2996
+#, c-format
+msgid "Short literal overflow(%ld.), immediate mode assumed."
+msgstr ""
+
+#: config/tc-vax.c:3005
+#, c-format
+msgid "Forced short literal to immediate mode. now_seg=%s to_seg=%s"
+msgstr ""
+
+#: config/tc-vax.c:3070
+msgid "Length specification ignored. Address mode 9F used"
+msgstr ""
+
+#: config/tc-vax.c:3128
+msgid "Invalid operand: immediate value used as base address."
+msgstr ""
+
+#: config/tc-vax.c:3130
+msgid "Invalid operand: immediate value used as address."
+msgstr ""
+
+#: config/tc-vax.c:3155
+msgid "Symbol used as immediate operand in PIC mode."
+msgstr ""
+
+#: config/tc-vax.c:3258
+#, c-format
+msgid "VIP_BEGIN error:%s"
+msgstr ""
+
+#: config/tc-xc16x.c:211
+#, c-format
+msgid " XC16X specific command line options:\n"
+msgstr ""
+
#: config/tc-xstormy16.c:78
#, c-format
msgid " XSTORMY16 specific command line options:\n"
@@ -10350,715 +11418,740 @@ msgstr ""
msgid "internal error: can't install fix for reloc type %d (`%s')"
msgstr ""
-#: config/tc-xtensa.c:590
+#: config/tc-xtensa.c:602
msgid "illegal range of target hardware versions"
msgstr ""
-#: config/tc-xtensa.c:738
+#: config/tc-xtensa.c:751
msgid "--density option is ignored"
msgstr ""
-#: config/tc-xtensa.c:741
+#: config/tc-xtensa.c:754
msgid "--no-density option is ignored"
msgstr ""
-#: config/tc-xtensa.c:750
+#: config/tc-xtensa.c:763
msgid "--generics is deprecated; use --transform instead"
msgstr ""
-#: config/tc-xtensa.c:753
+#: config/tc-xtensa.c:766
msgid "--no-generics is deprecated; use --no-transform instead"
msgstr ""
-#: config/tc-xtensa.c:756
+#: config/tc-xtensa.c:769
msgid "--relax is deprecated; use --transform instead"
msgstr ""
-#: config/tc-xtensa.c:759
+#: config/tc-xtensa.c:772
msgid "--no-relax is deprecated; use --no-transform instead"
msgstr ""
-#: config/tc-xtensa.c:776
+#: config/tc-xtensa.c:789
msgid "--absolute-literals option not supported in this Xtensa configuration"
msgstr ""
-#: config/tc-xtensa.c:849
+#: config/tc-xtensa.c:862
msgid "prefer-l32r conflicts with prefer-const16"
msgstr ""
-#: config/tc-xtensa.c:855
+#: config/tc-xtensa.c:868
msgid "prefer-const16 conflicts with prefer-l32r"
msgstr ""
-#: config/tc-xtensa.c:863 config/tc-xtensa.c:872 config/tc-xtensa.c:876
+#: config/tc-xtensa.c:876 config/tc-xtensa.c:885 config/tc-xtensa.c:889
msgid "invalid target hardware version"
msgstr ""
-#: config/tc-xtensa.c:1078
+#: config/tc-xtensa.c:1064
msgid "unmatched end directive"
msgstr ""
-#: config/tc-xtensa.c:1107
+#: config/tc-xtensa.c:1093
msgid ".begin directive with no matching .end directive"
msgstr ""
-#: config/tc-xtensa.c:1148
+#: config/tc-xtensa.c:1134
msgid "[no-]generics is deprecated; use [no-]transform instead"
msgstr ""
-#: config/tc-xtensa.c:1153
+#: config/tc-xtensa.c:1139
msgid "[no-]relax is deprecated; use [no-]transform instead"
msgstr ""
-#: config/tc-xtensa.c:1166
+#: config/tc-xtensa.c:1152
#, c-format
msgid "directive %s cannot be negated"
msgstr ""
-#: config/tc-xtensa.c:1172
+#: config/tc-xtensa.c:1158
msgid "unknown directive"
msgstr ""
-#: config/tc-xtensa.c:1194 config/tc-xtensa.c:1300 config/tc-xtensa.c:1573
-#: config/tc-xtensa.c:5496
+#: config/tc-xtensa.c:1179 config/tc-xtensa.c:1275 config/tc-xtensa.c:1517
+#: config/tc-xtensa.c:5545
msgid "directives are not valid inside bundles"
msgstr ""
-#: config/tc-xtensa.c:1206
+#: config/tc-xtensa.c:1191
msgid ".begin literal is deprecated; use .literal instead"
msgstr ""
-#: config/tc-xtensa.c:1220
+#: config/tc-xtensa.c:1205
msgid "cannot set literal_prefix inside literal fragment"
msgstr ""
-#: config/tc-xtensa.c:1263
+#: config/tc-xtensa.c:1238
msgid ".begin [no-]density is ignored"
msgstr ""
-#: config/tc-xtensa.c:1270 config/tc-xtensa.c:1320
+#: config/tc-xtensa.c:1245 config/tc-xtensa.c:1295
msgid "Xtensa absolute literals option not supported; ignored"
msgstr ""
-#: config/tc-xtensa.c:1313
+#: config/tc-xtensa.c:1288
msgid ".end [no-]density is ignored"
msgstr ""
-#: config/tc-xtensa.c:1338
+#: config/tc-xtensa.c:1313
#, c-format
msgid "does not match begin %s%s at %s:%d"
msgstr ""
-#: config/tc-xtensa.c:1393
+#: config/tc-xtensa.c:1368
msgid ".literal_position inside literal directive; ignoring"
msgstr ""
-#: config/tc-xtensa.c:1413
+#: config/tc-xtensa.c:1388
msgid ".literal not allowed inside .begin literal region"
msgstr ""
-#: config/tc-xtensa.c:1449
+#: config/tc-xtensa.c:1424
msgid "expected comma or colon after symbol name; rest of line ignored"
msgstr ""
-#: config/tc-xtensa.c:1542
+#: config/tc-xtensa.c:1486
msgid "fall through frequency must be greater than 0"
msgstr ""
-#: config/tc-xtensa.c:1550
+#: config/tc-xtensa.c:1494
msgid "branch target frequency must be greater than 0"
msgstr ""
-#: config/tc-xtensa.c:1598
+#: config/tc-xtensa.c:1542
#, c-format
msgid "opcode-specific %s relocation used outside an instruction"
msgstr ""
-#: config/tc-xtensa.c:1751 config/tc-xtensa.c:1768
+#: config/tc-xtensa.c:1721 config/tc-xtensa.c:1738
#, c-format
msgid "bad register name: %s"
msgstr ""
-#: config/tc-xtensa.c:1757
+#: config/tc-xtensa.c:1727
#, c-format
msgid "bad register number: %s"
msgstr ""
-#: config/tc-xtensa.c:1836
+#: config/tc-xtensa.c:1804
msgid "register number out of range"
msgstr ""
-#: config/tc-xtensa.c:1920
+#: config/tc-xtensa.c:1888
msgid "extra comma"
msgstr ""
-#: config/tc-xtensa.c:1922
+#: config/tc-xtensa.c:1890
msgid "extra colon"
msgstr ""
-#: config/tc-xtensa.c:1924
+#: config/tc-xtensa.c:1892
msgid "missing argument"
msgstr ""
-#: config/tc-xtensa.c:1926
+#: config/tc-xtensa.c:1894
msgid "missing comma or colon"
msgstr ""
-#: config/tc-xtensa.c:1983
+#: config/tc-xtensa.c:1951
msgid "incorrect register number, ignoring"
msgstr ""
-#: config/tc-xtensa.c:1990
+#: config/tc-xtensa.c:1958
msgid "too many arguments"
msgstr ""
-#: config/tc-xtensa.c:2063
+#: config/tc-xtensa.c:2031
#, c-format
msgid "cannot encode opcode \"%s\""
msgstr ""
-#: config/tc-xtensa.c:2157
+#: config/tc-xtensa.c:2125
#, c-format
msgid "not enough operands (%d) for '%s'; expected %d"
msgstr ""
-#: config/tc-xtensa.c:2164
+#: config/tc-xtensa.c:2132
#, c-format
msgid "too many operands (%d) for '%s'; expected %d"
msgstr ""
-#: config/tc-xtensa.c:2219
+#: config/tc-xtensa.c:2183
#, c-format
msgid "invalid register '%s' for '%s' instruction"
msgstr ""
-#: config/tc-xtensa.c:2226
+#: config/tc-xtensa.c:2190
#, c-format
msgid "invalid register number (%ld) for '%s' instruction"
msgstr ""
-#: config/tc-xtensa.c:2295
+#: config/tc-xtensa.c:2258
#, c-format
msgid "invalid register number (%ld) for '%s'"
msgstr ""
-#: config/tc-xtensa.c:2685
+#: config/tc-xtensa.c:2649
#, c-format
msgid "operand %d of '%s' has out of range value '%u'"
msgstr ""
-#: config/tc-xtensa.c:2691
+#: config/tc-xtensa.c:2655
#, c-format
msgid "operand %d of '%s' has invalid value '%u'"
msgstr ""
-#: config/tc-xtensa.c:2739
+#: config/tc-xtensa.c:2703
#, c-format
msgid "internal error: unknown option name '%s'"
msgstr ""
-#: config/tc-xtensa.c:3791
+#: config/tc-xtensa.c:3778
msgid "INSTR_LABEL_DEF not supported yet"
msgstr ""
-#: config/tc-xtensa.c:3820
+#: config/tc-xtensa.c:3807
msgid "can't handle generation of literal/labels yet"
msgstr ""
-#: config/tc-xtensa.c:3824
+#: config/tc-xtensa.c:3811
msgid "can't handle undefined OP TYPE"
msgstr ""
-#: config/tc-xtensa.c:3885
+#: config/tc-xtensa.c:3872
#, c-format
msgid "found %d operands for '%s': Expected %d"
msgstr ""
-#: config/tc-xtensa.c:3892
+#: config/tc-xtensa.c:3879
#, c-format
msgid "found too many (%d) operands for '%s': Expected %d"
msgstr ""
-#: config/tc-xtensa.c:4029
+#: config/tc-xtensa.c:4016
msgid "invalid immediate"
msgstr ""
-#: config/tc-xtensa.c:4140
+#: config/tc-xtensa.c:4130
#, c-format
msgid "invalid relocation for operand %i of '%s'"
msgstr ""
-#: config/tc-xtensa.c:4150
+#: config/tc-xtensa.c:4140
#, c-format
msgid "invalid expression for operand %i of '%s'"
msgstr ""
-#: config/tc-xtensa.c:4160
+#: config/tc-xtensa.c:4150
#, c-format
msgid "invalid relocation in instruction slot %i"
msgstr ""
-#: config/tc-xtensa.c:4167
+#: config/tc-xtensa.c:4157
#, c-format
msgid "undefined symbol for opcode \"%s\""
msgstr ""
-#: config/tc-xtensa.c:4608
+#: config/tc-xtensa.c:4612
msgid "opcode 'NOP.N' unavailable in this configuration"
msgstr ""
-#: config/tc-xtensa.c:4668
+#: config/tc-xtensa.c:4672
msgid "get_expanded_loop_offset: invalid opcode"
msgstr ""
-#: config/tc-xtensa.c:4751
+#: config/tc-xtensa.c:4804
#, c-format
msgid "assembly state not set for first frag in section %s"
msgstr ""
-#: config/tc-xtensa.c:4804
+#: config/tc-xtensa.c:4857
#, c-format
msgid "unaligned branch target: %d bytes at 0x%lx"
msgstr ""
-#: config/tc-xtensa.c:4843
+#: config/tc-xtensa.c:4896
#, c-format
msgid "unaligned loop: %d bytes at 0x%lx"
msgstr ""
-#: config/tc-xtensa.c:4867
+#: config/tc-xtensa.c:4920
msgid "unexpected fix"
msgstr ""
-#: config/tc-xtensa.c:4878 config/tc-xtensa.c:4882
+#: config/tc-xtensa.c:4931 config/tc-xtensa.c:4935
msgid "undecodable fix"
msgstr ""
-#: config/tc-xtensa.c:5012
+#: config/tc-xtensa.c:5061
msgid "labels are not valid inside bundles"
msgstr ""
-#: config/tc-xtensa.c:5032
+#: config/tc-xtensa.c:5081
msgid "invalid last instruction for a zero-overhead loop"
msgstr ""
-#: config/tc-xtensa.c:5097
+#: config/tc-xtensa.c:5146
msgid "extra opening brace"
msgstr ""
-#: config/tc-xtensa.c:5107
+#: config/tc-xtensa.c:5156
msgid "extra closing brace"
msgstr ""
-#: config/tc-xtensa.c:5125
+#: config/tc-xtensa.c:5183
msgid "missing closing brace"
msgstr ""
-#: config/tc-xtensa.c:5205
+#: config/tc-xtensa.c:5263
#, c-format
msgid "unknown opcode or format name '%s'"
msgstr ""
-#: config/tc-xtensa.c:5211
+#: config/tc-xtensa.c:5269
msgid "format names only valid inside bundles"
msgstr ""
-#: config/tc-xtensa.c:5216
+#: config/tc-xtensa.c:5274
#, c-format
msgid "multiple formats specified for one bundle; using '%s'"
msgstr ""
-#: config/tc-xtensa.c:5271
+#: config/tc-xtensa.c:5323
msgid "entry instruction with stack decrement < 16"
msgstr ""
-#: config/tc-xtensa.c:5275
-msgid "entry instruction with non-constant decrement"
-msgstr ""
-
-#: config/tc-xtensa.c:5330
+#: config/tc-xtensa.c:5376
msgid "unaligned entry instruction"
msgstr ""
-#: config/tc-xtensa.c:5389
+#: config/tc-xtensa.c:5438
msgid "bad instruction format"
msgstr ""
-#: config/tc-xtensa.c:5392
+#: config/tc-xtensa.c:5441
msgid "invalid relocation"
msgstr ""
-#: config/tc-xtensa.c:5403
+#: config/tc-xtensa.c:5452
#, c-format
msgid "invalid relocation for '%s' instruction"
msgstr ""
-#: config/tc-xtensa.c:5415
+#: config/tc-xtensa.c:5464
#, c-format
msgid "invalid relocation for operand %d of '%s'"
msgstr ""
-#: config/tc-xtensa.c:5572
+#: config/tc-xtensa.c:5628
msgid "cannot represent subtraction with an offset"
msgstr ""
-#: config/tc-xtensa.c:5660
+#: config/tc-xtensa.c:5716
#, c-format
msgid "unhandled local relocation fix %s"
msgstr ""
-#: config/tc-xtensa.c:5968
+#: config/tc-xtensa.c:6023
msgid "couldn't find a valid instruction format"
msgstr ""
-#: config/tc-xtensa.c:5969
+#: config/tc-xtensa.c:6024
#, c-format
msgid " ops were: "
msgstr ""
-#: config/tc-xtensa.c:5971
+#: config/tc-xtensa.c:6026
#, c-format
msgid " %s;"
msgstr ""
-#: config/tc-xtensa.c:5974
-#, c-format
-msgid "\n"
-msgstr ""
-
-#: config/tc-xtensa.c:5982
+#: config/tc-xtensa.c:6037
#, c-format
msgid "format '%s' allows %d slots, but there are %d opcodes"
msgstr ""
-#: config/tc-xtensa.c:5993 config/tc-xtensa.c:6091
+#: config/tc-xtensa.c:6048 config/tc-xtensa.c:6146
msgid "illegal resource usage in bundle"
msgstr ""
-#: config/tc-xtensa.c:6178
+#: config/tc-xtensa.c:6233
#, c-format
msgid "opcodes '%s' (slot %d) and '%s' (slot %d) write the same register"
msgstr ""
-#: config/tc-xtensa.c:6183
+#: config/tc-xtensa.c:6238
#, c-format
msgid "opcodes '%s' (slot %d) and '%s' (slot %d) write the same state"
msgstr ""
-#: config/tc-xtensa.c:6188
+#: config/tc-xtensa.c:6243
#, c-format
-msgid "opcodes '%s' (slot %d) and '%s' (slot %d) write the same queue"
+msgid "opcodes '%s' (slot %d) and '%s' (slot %d) write the same port"
msgstr ""
-#: config/tc-xtensa.c:6193
+#: config/tc-xtensa.c:6248
#, c-format
msgid ""
-"opcodes '%s' (slot %d) and '%s' (slot %d) both have volatile queue accesses"
+"opcodes '%s' (slot %d) and '%s' (slot %d) both have volatile port accesses"
msgstr ""
-#: config/tc-xtensa.c:6209
+#: config/tc-xtensa.c:6264
msgid "multiple branches or jumps in the same bundle"
msgstr ""
-#: config/tc-xtensa.c:6664
+#: config/tc-xtensa.c:6712
msgid "cannot assemble into a literal fragment"
msgstr ""
-#: config/tc-xtensa.c:6666
+#: config/tc-xtensa.c:6714
msgid "..."
msgstr ""
-#: config/tc-xtensa.c:7175
+#: config/tc-xtensa.c:7258
msgid ""
"instruction sequence (write a0, branch, retw) may trigger hardware errata"
msgstr ""
-#: config/tc-xtensa.c:7285
+#: config/tc-xtensa.c:7370
msgid "branching or jumping to a loop end may trigger hardware errata"
msgstr ""
-#: config/tc-xtensa.c:7384
+#: config/tc-xtensa.c:7452
msgid "loop end too close to another loop end may trigger hardware errata"
msgstr ""
-#: config/tc-xtensa.c:7393
+#: config/tc-xtensa.c:7461
#, c-format
msgid "fr_var %lu < length %d"
msgstr ""
-#: config/tc-xtensa.c:7564
+#: config/tc-xtensa.c:7620
msgid ""
"loop containing less than three instructions may trigger hardware errata"
msgstr ""
-#: config/tc-xtensa.c:7636
+#: config/tc-xtensa.c:7692
msgid "undecodable instruction in instruction frag"
msgstr ""
-#: config/tc-xtensa.c:7745
+#: config/tc-xtensa.c:7802
msgid "invalid empty loop"
msgstr ""
-#: config/tc-xtensa.c:7750
+#: config/tc-xtensa.c:7807
msgid "loop target does not follow loop instruction in section"
msgstr ""
-#: config/tc-xtensa.c:8287
+#: config/tc-xtensa.c:8380
msgid "bad relaxation state"
msgstr ""
-#: config/tc-xtensa.c:8345
+#: config/tc-xtensa.c:8438
#, c-format
msgid "fr_var (%ld) < length (%d)"
msgstr ""
-#: config/tc-xtensa.c:8846
+#: config/tc-xtensa.c:8945
msgid "internal error: relaxation failed"
msgstr ""
-#: config/tc-xtensa.c:8852
+#: config/tc-xtensa.c:8951
msgid "internal error: relaxation requires too many steps"
msgstr ""
-#: config/tc-xtensa.c:9027
+#: config/tc-xtensa.c:9127
msgid "invalid relaxation fragment result"
msgstr ""
-#: config/tc-xtensa.c:9107
+#: config/tc-xtensa.c:9206
msgid "unable to widen instruction"
msgstr ""
-#: config/tc-xtensa.c:9250
+#: config/tc-xtensa.c:9346
msgid "multiple literals in expansion"
msgstr ""
-#: config/tc-xtensa.c:9254
+#: config/tc-xtensa.c:9350
msgid "no registered fragment for literal"
msgstr ""
-#: config/tc-xtensa.c:9256
+#: config/tc-xtensa.c:9352
msgid "number of literal tokens != 1"
msgstr ""
-#: config/tc-xtensa.c:9400 config/tc-xtensa.c:9406
+#: config/tc-xtensa.c:9482 config/tc-xtensa.c:9488
#, c-format
msgid "unresolved loop target symbol: %s"
msgstr ""
-#: config/tc-xtensa.c:9512
+#: config/tc-xtensa.c:9594
#, c-format
msgid "invalid expression evaluation type %d"
msgstr ""
-#: config/tc-xtensa.c:9534
+#: config/tc-xtensa.c:9611
msgid "loop too long for LOOP instruction"
msgstr ""
-#: config/tc-xtensa.c:9805
+#: config/tc-xtensa.c:9881
#, c-format
msgid "fixes not all moved from %s"
msgstr ""
-#: config/tc-xtensa.c:9947
+#: config/tc-xtensa.c:10012
msgid ""
"literal pool location required for text-section-literals; specify with ."
"literal_position"
msgstr ""
-#: config/tc-xtensa.c:10456
-#, c-format
-msgid "could not create section %s"
-msgstr ""
-
-#: config/tc-xtensa.c:10458
-#, c-format
-msgid "invalid flag combination on section %s"
-msgstr ""
-
-#: config/tc-xtensa.c:10844
+#: config/tc-xtensa.c:10941
msgid "too many operands in instruction"
msgstr ""
-#: config/tc-xtensa.c:11078
-#, c-format
-msgid "invalid symbolic operand %d on '%s'"
+#: config/tc-xtensa.c:11152
+msgid "invalid symbolic operand"
msgstr ""
-#: config/tc-xtensa.c:11147 config/tc-xtensa.c:11221
+#: config/tc-xtensa.c:11213
msgid "operand number mismatch"
msgstr ""
-#: config/tc-xtensa.c:11150
-msgid "cannot encode opcode"
-msgstr ""
-
-#: config/tc-xtensa.c:11225
+#: config/tc-xtensa.c:11217
#, c-format
msgid "cannot encode opcode \"%s\" in the given format \"%s\""
msgstr ""
-#: config/tc-xtensa.c:11250
+#: config/tc-xtensa.c:11242
#, c-format
msgid "xtensa-isa failure: %s"
msgstr ""
-#: config/tc-xtensa.c:11283
+#: config/tc-xtensa.c:11313
msgid "invalid opcode"
msgstr ""
-#: config/tc-xtensa.c:11289
+#: config/tc-xtensa.c:11319
msgid "too few operands"
msgstr ""
-#: config/tc-xtensa.c:11416 config/tc-xtensa.c:11424
+#: config/tc-xtensa.c:11434 config/tc-xtensa.c:11440
msgid "out of memory"
msgstr ""
-#: config/tc-xtensa.c:11536
-msgid "instruction with constant operands does not fit"
+#: config/tc-xtensa.c:11551
+msgid "symbolic operand not allowed"
+msgstr ""
+
+#: config/tc-xtensa.c:11588
+msgid "cannot decode instruction format"
+msgstr ""
+
+#: config/tc-xtensa.c:11732
+msgid "ignoring extra '-rename-section' delimiter ':'"
msgstr ""
-#: config/tc-xtensa.c:11545 config/tc-xtensa.c:11566
+#: config/tc-xtensa.c:11737
#, c-format
-msgid "invalid operand %d on '%s'"
+msgid "ignoring invalid '-rename-section' specification: '%s'"
msgstr ""
-#: config/tc-xtensa.c:11557
-msgid "invalid subtract operand"
+#: config/tc-xtensa.c:11748
+#, c-format
+msgid "section %s renamed multiple times"
msgstr ""
-#: config/tc-xtensa.c:11571
+#: config/tc-xtensa.c:11750
#, c-format
-msgid "invalid expression for operand %d on '%s'"
+msgid "multiple sections remapped to output section %s"
msgstr ""
-#: config/tc-xtensa.c:11601
-msgid "cannot decode instruction format"
+#: config/tc-z80.c:244
+msgid "-- unterminated string"
msgstr ""
-#: config/tc-xtensa.c:11760
-msgid "ignoring extra '-rename-section' delimiter ':'"
+#: config/tc-z80.c:314
+msgid "floating point numbers are not implemented"
msgstr ""
-#: config/tc-xtensa.c:11765
-#, c-format
-msgid "ignoring invalid '-rename-section' specification: '%s'"
+#: config/tc-z80.c:493 config/tc-z80.c:499
+msgid "mismatched parentheses"
+msgstr ""
+
+#: config/tc-z80.c:553
+msgid "bad offset expression syntax"
+msgstr ""
+
+#: config/tc-z80.c:577
+msgid "bad expression syntax"
+msgstr ""
+
+#: config/tc-z80.c:690
+msgid "cannot make a relative jump to an absolute location"
+msgstr ""
+
+#: config/tc-z80.c:702 config/tc-z80.c:1960
+msgid "overflow"
+msgstr ""
+
+#: config/tc-z80.c:1070 config/tc-z80.c:1113 config/tc-z80.c:1157
+#: config/tc-z80.c:1277 config/tc-z80.c:1331 config/tc-z80.c:1600
+msgid "bad intruction syntax"
+msgstr ""
+
+#: config/tc-z80.c:1203
+msgid "condition code invalid for jr"
+msgstr ""
+
+#: config/tc-z80.c:1225
+msgid "bad instruction syntax"
+msgstr ""
+
+#: config/tc-z80.c:1704
+msgid "parentheses ignored"
msgstr ""
-#: config/tc-xtensa.c:11776
+#: config/tc-z80.c:1909 read.c:3501
#, c-format
-msgid "section %s renamed multiple times"
+msgid "junk at end of line, first unrecognized character is `%c'"
+msgstr ""
+
+#: config/tc-z80.c:1935 config/tc-z8k.c:1513 config/tc-z8k.c:1576
+msgid "relative jump out of range"
+msgstr ""
+
+#: config/tc-z80.c:1952
+msgid "index offset out of range"
msgstr ""
-#: config/tc-xtensa.c:11778
+#: config/tc-z80.c:1994 config/tc-z8k.c:1584
#, c-format
-msgid "multiple sections remapped to output section %s"
+msgid "md_apply_fix: unknown r_type 0x%x\n"
msgstr ""
-#: config/tc-z8k.c:268
+#: config/tc-z8k.c:282
#, c-format
msgid "register rr%d out of range"
msgstr ""
-#: config/tc-z8k.c:270
+#: config/tc-z8k.c:284
#, c-format
msgid "register rr%d does not exist"
msgstr ""
-#: config/tc-z8k.c:280
+#: config/tc-z8k.c:296
#, c-format
msgid "register rh%d out of range"
msgstr ""
-#: config/tc-z8k.c:290
+#: config/tc-z8k.c:308
#, c-format
msgid "register rl%d out of range"
msgstr ""
-#: config/tc-z8k.c:301
+#: config/tc-z8k.c:321
#, c-format
msgid "register rq%d out of range"
msgstr ""
-#: config/tc-z8k.c:303
+#: config/tc-z8k.c:323
#, c-format
msgid "register rq%d does not exist"
msgstr ""
-#: config/tc-z8k.c:313
+#: config/tc-z8k.c:335
#, c-format
msgid "register r%d out of range"
msgstr ""
-#: config/tc-z8k.c:354
+#: config/tc-z8k.c:376
#, c-format
msgid "expected %c"
msgstr ""
-#: config/tc-z8k.c:369
+#: config/tc-z8k.c:391
#, c-format
msgid "register is wrong size for a word %s"
msgstr ""
-#: config/tc-z8k.c:383
+#: config/tc-z8k.c:405
#, c-format
msgid "register is wrong size for address %s"
msgstr ""
-#: config/tc-z8k.c:517
+#: config/tc-z8k.c:539
#, c-format
msgid "unknown interrupt %s"
msgstr ""
#. No interrupt type specified, opcode won't do anything.
-#: config/tc-z8k.c:540
+#: config/tc-z8k.c:562
msgid "opcode has no effect"
msgstr ""
-#: config/tc-z8k.c:651
+#: config/tc-z8k.c:673
msgid "Missing ) in ra(rb)"
msgstr ""
-#: config/tc-z8k.c:731 config/tc-z8k.c:770
+#: config/tc-z8k.c:753 config/tc-z8k.c:792
#, c-format
msgid "invalid condition code '%s'"
msgstr ""
-#: config/tc-z8k.c:743
+#: config/tc-z8k.c:765
#, c-format
msgid "invalid flag '%s'"
msgstr ""
-#: config/tc-z8k.c:897 config/tc-z8k.c:903
+#: config/tc-z8k.c:919 config/tc-z8k.c:925
msgid "invalid indirect register size"
msgstr ""
-#: config/tc-z8k.c:920 config/tc-z8k.c:1068 config/tc-z8k.c:1073
+#: config/tc-z8k.c:942 config/tc-z8k.c:1090 config/tc-z8k.c:1095
msgid "invalid control register name"
msgstr ""
-#: config/tc-z8k.c:1057
+#: config/tc-z8k.c:1079
msgid "immediate must be 1 or 2"
msgstr ""
-#: config/tc-z8k.c:1060
+#: config/tc-z8k.c:1082
msgid "immediate 1 or 2 expected"
msgstr ""
-#: config/tc-z8k.c:1091
+#: config/tc-z8k.c:1113
msgid "can't use R0 here"
msgstr ""
-#: config/tc-z8k.c:1249
+#: config/tc-z8k.c:1271
msgid "Can't find opcode to match operands"
msgstr ""
-#: config/tc-z8k.c:1348
+#: config/tc-z8k.c:1370
#, c-format
msgid "invalid architecture -z%s"
msgstr ""
-#: config/tc-z8k.c:1368
+#: config/tc-z8k.c:1390
#, c-format
msgid ""
" Z8K options:\n"
@@ -11067,33 +12160,24 @@ msgid ""
" -linkrelax create linker relaxable code\n"
msgstr ""
-#: config/tc-z8k.c:1380
+#: config/tc-z8k.c:1402
#, c-format
msgid "call to md_convert_frag\n"
msgstr ""
-#: config/tc-z8k.c:1487 config/tc-z8k.c:1527 config/tc-z8k.c:1550
+#: config/tc-z8k.c:1509 config/tc-z8k.c:1549 config/tc-z8k.c:1572
msgid "cannot branch to odd address"
msgstr ""
-#: config/tc-z8k.c:1491 config/tc-z8k.c:1554
-msgid "relative jump out of range"
-msgstr ""
-
-#: config/tc-z8k.c:1509
+#: config/tc-z8k.c:1531
msgid "relative address out of range"
msgstr ""
-#: config/tc-z8k.c:1530
+#: config/tc-z8k.c:1552
msgid "relative call out of range"
msgstr ""
-#: config/tc-z8k.c:1562
-#, c-format
-msgid "md_apply_fix: unknown r_type 0x%x\n"
-msgstr ""
-
-#: config/tc-z8k.c:1574
+#: config/tc-z8k.c:1596
#, c-format
msgid "call to md_estimate_size_before_relax\n"
msgstr ""
@@ -11108,67 +12192,91 @@ msgstr ""
msgid "can't close `%s'"
msgstr ""
-#: dw2gencfi.c:258
+#: dw2gencfi.c:276
#, c-format
msgid "register save offset not a multiple of %u"
msgstr ""
-#: dw2gencfi.c:341
+#: dw2gencfi.c:359
msgid "CFI state restore without previous remember"
msgstr ""
-#: dw2gencfi.c:387
+#: dw2gencfi.c:411
msgid "missing separator"
msgstr ""
-#: dw2gencfi.c:409 dw2gencfi.c:427
+#: dw2gencfi.c:433 dw2gencfi.c:451
msgid "bad register expression"
msgstr ""
-#: dw2gencfi.c:449 dw2gencfi.c:551
+#: dw2gencfi.c:473 dw2gencfi.c:596 dw2gencfi.c:634 dw2gencfi.c:704
msgid "CFI instruction used without previous .cfi_startproc"
msgstr ""
-#: dw2gencfi.c:587
+#: dw2gencfi.c:658
+msgid "invalid or unsupported encoding in .cfi_personality"
+msgstr ""
+
+#: dw2gencfi.c:665
+msgid ".cfi_personality requires encoding and symbol arguments"
+msgstr ""
+
+#: dw2gencfi.c:688
+msgid "wrong second argument to .cfi_personality"
+msgstr ""
+
+#: dw2gencfi.c:728
+msgid "invalid or unsupported encoding in .cfi_lsda"
+msgstr ""
+
+#: dw2gencfi.c:735
+msgid ".cfi_lsda requires encoding and symbol arguments"
+msgstr ""
+
+#: dw2gencfi.c:760
+msgid "wrong second argument to .cfi_lsda"
+msgstr ""
+
+#: dw2gencfi.c:775
msgid "previous CFI entry not closed (missing .cfi_endproc)"
msgstr ""
-#: dw2gencfi.c:622
+#: dw2gencfi.c:810
msgid ".cfi_endproc without corresponding .cfi_startproc"
msgstr ""
-#: dw2gencfi.c:1031
+#: dw2gencfi.c:1339
msgid "open CFI at the end of file; missing .cfi_endproc directive"
msgstr ""
-#: dwarf2dbg.c:523 dwarf2dbg.c:549
+#: dwarf2dbg.c:553 dwarf2dbg.c:579
msgid "file number less than one"
msgstr ""
-#: dwarf2dbg.c:529
+#: dwarf2dbg.c:559
#, c-format
msgid "file number %ld already allocated"
msgstr ""
-#: dwarf2dbg.c:554 dwarf2dbg.c:1169
+#: dwarf2dbg.c:584 dwarf2dbg.c:1244
#, c-format
msgid "unassigned file number %ld"
msgstr ""
-#: dwarf2dbg.c:622
+#: dwarf2dbg.c:652
msgid "is_stmt value not 0 or 1"
msgstr ""
-#: dwarf2dbg.c:634
+#: dwarf2dbg.c:664
msgid "isa number less than zero"
msgstr ""
-#: dwarf2dbg.c:640
+#: dwarf2dbg.c:670
#, c-format
msgid "unknown .loc sub-directive `%s'"
msgstr ""
-#: dwarf2dbg.c:1234 dwarf2dbg.c:1428
+#: dwarf2dbg.c:1309 dwarf2dbg.c:1558
msgid "internal error: unknown dwarf2 format"
msgstr ""
@@ -11285,7 +12393,7 @@ msgid ".val pseudo-op used outside of .def/.endef; ignored"
msgstr ""
#: ecoff.c:2781
-msgid ".val expression is too copmlex"
+msgid ".val expression is too complex"
msgstr ""
#: ecoff.c:2811
@@ -11325,12 +12433,6 @@ msgstr ""
msgid ".loc before .file"
msgstr ""
-#: ecoff.c:3355 read.c:1473 read.c:1579 read.c:2256 read.c:2803 symbols.c:327
-#: symbols.c:423
-#, c-format
-msgid "symbol `%s' is already defined"
-msgstr ""
-
#: ecoff.c:3368
msgid "bad .weakext directive"
msgstr ""
@@ -11368,92 +12470,92 @@ msgstr ""
msgid "GP prologue size exceeds field size, using 0 instead"
msgstr ""
-#: expr.c:82 read.c:3351
+#: expr.c:81 read.c:3566
msgid "bignum invalid"
msgstr ""
-#: expr.c:84 read.c:3353 read.c:3702 read.c:4550
+#: expr.c:83 read.c:3568 read.c:4025 read.c:4873
msgid "floating point number invalid"
msgstr ""
-#: expr.c:203
+#: expr.c:202
msgid "bad floating-point constant: exponent overflow"
msgstr ""
-#: expr.c:207
+#: expr.c:206
#, c-format
msgid "bad floating-point constant: unknown error code=%d"
msgstr ""
-#: expr.c:383
+#: expr.c:385
msgid ""
"a bignum with underscores may not have more than 8 hex digits in any word"
msgstr ""
-#: expr.c:406
+#: expr.c:408
msgid "a bignum with underscores must have exactly 4 words"
msgstr ""
#. Either not seen or not defined.
#. @@ Should print out the original string instead of
#. the parsed number.
-#: expr.c:529
+#: expr.c:531
#, c-format
msgid "backward ref to unknown label \"%d:\""
msgstr ""
-#: expr.c:647
+#: expr.c:649
msgid "character constant too large"
msgstr ""
-#: expr.c:893
+#: expr.c:895
#, c-format
msgid "expr.c(operand): bad atof_generic return val %d"
msgstr ""
-#: expr.c:954
+#: expr.c:956
#, c-format
msgid "missing '%c'"
msgstr ""
-#: expr.c:965 read.c:4034
+#: expr.c:967 read.c:4357
msgid "EBCDIC constants are not supported"
msgstr ""
-#: expr.c:1082
+#: expr.c:1079
#, c-format
msgid "Unary operator %c ignored because bad operand follows"
msgstr ""
-#: expr.c:1128 expr.c:1153
+#: expr.c:1125 expr.c:1150
msgid "syntax error in .startof. or .sizeof."
msgstr ""
-#: expr.c:1665
+#: expr.c:1661
msgid "missing operand; zero assumed"
msgstr ""
-#: expr.c:1700
+#: expr.c:1696
msgid "left operand is a bignum; integer 0 assumed"
msgstr ""
-#: expr.c:1702
+#: expr.c:1698
msgid "left operand is a float; integer 0 assumed"
msgstr ""
-#: expr.c:1711
+#: expr.c:1707
msgid "right operand is a bignum; integer 0 assumed"
msgstr ""
-#: expr.c:1713
+#: expr.c:1709
msgid "right operand is a float; integer 0 assumed"
msgstr ""
-#: expr.c:1769 symbols.c:1207
+#: expr.c:1768 symbols.c:1349
msgid "division by zero"
msgstr ""
-#: expr.c:1867
+#: expr.c:1868
msgid "operation combines symbols in different segments"
msgstr ""
@@ -11482,34 +12584,34 @@ msgstr ""
#. line here (assuming of course that we actually have a line of
#. input to read), so that it can be displayed in the listing
#. that is produced at the end of the assembly.
-#: input-file.c:141 input-scrub.c:238 listing.c:332
+#: input-file.c:138 input-scrub.c:241 listing.c:332
msgid "{standard input}"
msgstr ""
-#: input-file.c:147 input-file.c:156
+#: input-file.c:143
#, c-format
-msgid "Can't open %s for reading"
+msgid "can't open %s for reading: %s"
msgstr ""
-#: input-file.c:219 input-file.c:246
+#: input-file.c:152 input-file.c:215 input-file.c:241
#, c-format
-msgid "Can't read from %s"
+msgid "can't read from %s: %s"
msgstr ""
-#: input-file.c:256
+#: input-file.c:249 listing.c:1097 output-file.c:69
#, c-format
-msgid "Can't close %s"
+msgid "can't close %s: %s"
msgstr ""
-#: input-scrub.c:263
+#: input-scrub.c:266
msgid "macros nested too deeply"
msgstr ""
-#: input-scrub.c:365 input-scrub.c:387
+#: input-scrub.c:369 input-scrub.c:393
msgid "partial line at end of file ignored"
msgstr ""
-#: itbl-ops.c:338
+#: itbl-ops.c:329
#, c-format
msgid "Unable to allocate memory for new instructions\n"
msgstr ""
@@ -11522,255 +12624,246 @@ msgstr ""
msgid "Error:"
msgstr ""
-#: listing.c:1089
-#, c-format
-msgid "can't open list file: %s"
-msgstr ""
-
-#: listing.c:1109
+#: listing.c:1079
#, c-format
-msgid "error closing list file: %s"
+msgid "can't open %s: %s"
msgstr ""
-#: listing.c:1182
+#: listing.c:1169
msgid "strange paper height, set to no form"
msgstr ""
-#: listing.c:1246
+#: listing.c:1233
msgid "new line in title"
msgstr ""
#. Turns the next expression into a string.
-#: macro.c:436
+#: macro.c:371
#, no-c-format
msgid "% operator needs absolute expression"
msgstr ""
-#: macro.c:558
+#: macro.c:521
#, c-format
msgid "Missing parameter qualifier for `%s' in macro `%s'"
msgstr ""
-#: macro.c:568
+#: macro.c:531
#, c-format
msgid "`%s' is not a valid parameter qualifier for `%s' in macro `%s'"
msgstr ""
-#: macro.c:585
+#: macro.c:548
#, c-format
msgid "Pointless default value for required parameter `%s' in macro `%s'"
msgstr ""
-#: macro.c:597
+#: macro.c:560
#, c-format
msgid "A parameter named `%s' already exists for macro `%s'"
msgstr ""
-#: macro.c:634
+#: macro.c:597
#, c-format
msgid "Reserved word `%s' used as parameter in macro `%s'"
msgstr ""
-#: macro.c:672
+#: macro.c:635
#, c-format
msgid "unexpected end of file in macro `%s' definition"
msgstr ""
-#: macro.c:684
+#: macro.c:647
#, c-format
msgid "missing `)' after formals in macro definition `%s'"
msgstr ""
-#: macro.c:699
+#: macro.c:662
msgid "Missing macro name"
msgstr ""
-#: macro.c:708
+#: macro.c:671
#, c-format
msgid "Bad parameter list for macro `%s'"
msgstr ""
-#: macro.c:714
+#: macro.c:677
#, c-format
msgid "Macro `%s' was already defined"
msgstr ""
-#: macro.c:837 macro.c:839
+#: macro.c:800 macro.c:802
msgid "missing `)'"
msgstr ""
-#: macro.c:934
+#: macro.c:897
#, c-format
msgid "`%s' was already used as parameter (or another local) name"
msgstr ""
-#: macro.c:1093
+#: macro.c:1055
msgid "confusion in formal parameters"
msgstr ""
-#: macro.c:1100
+#: macro.c:1062
#, c-format
msgid "Parameter named `%s' does not exist for macro `%s'"
msgstr ""
-#: macro.c:1108
+#: macro.c:1070
#, c-format
msgid "Value for parameter `%s' of macro `%s' was already specified"
msgstr ""
-#: macro.c:1124
+#: macro.c:1084
msgid "can't mix positional and keyword arguments"
msgstr ""
-#: macro.c:1135
+#: macro.c:1095
msgid "too many positional arguments"
msgstr ""
-#: macro.c:1183
+#: macro.c:1143
#, c-format
msgid "Missing value for required parameter `%s' of macro `%s'"
msgstr ""
-#: macro.c:1320
+#: macro.c:1280
#, c-format
msgid "Attempt to purge non-existant macro `%s'"
msgstr ""
-#: macro.c:1339
+#: macro.c:1299
msgid "unexpected end of file in irp or irpc"
msgstr ""
-#: macro.c:1347
+#: macro.c:1307
msgid "missing model parameter"
msgstr ""
-#: messages.c:104
+#: messages.c:82
#, c-format
msgid "Assembler messages:\n"
msgstr ""
-#: messages.c:206
+#: messages.c:166
#, c-format
msgid "Warning: "
msgstr ""
-#: messages.c:307
+#: messages.c:267
#, c-format
msgid "Error: "
msgstr ""
-#: messages.c:402 messages.c:422
+#: messages.c:362 messages.c:382
#, c-format
msgid "Fatal error: "
msgstr ""
-#: messages.c:437
+#: messages.c:397
#, c-format
msgid "Internal error!\n"
msgstr ""
-#: messages.c:439
+#: messages.c:399
#, c-format
msgid "Assertion failure in %s at %s line %d.\n"
msgstr ""
-#: messages.c:442
+#: messages.c:402
#, c-format
msgid "Assertion failure at %s line %d.\n"
msgstr ""
-#: messages.c:443 messages.c:460
+#: messages.c:403 messages.c:420
#, c-format
msgid "Please report this bug.\n"
msgstr ""
-#: messages.c:455
+#: messages.c:415
#, c-format
msgid "Internal error, aborting at %s line %d in %s\n"
msgstr ""
-#: messages.c:458
+#: messages.c:418
#, c-format
msgid "Internal error, aborting at %s line %d\n"
msgstr ""
-#: messages.c:507
+#: messages.c:467
+#, c-format
+msgid "%s out of domain (%d is not a multiple of %d)"
+msgstr ""
+
+#: messages.c:485
#, c-format
msgid "%s out of range (%d is not between %d and %d)"
msgstr ""
#. xgettext:c-format.
-#: messages.c:530
+#: messages.c:508
#, c-format
msgid "%s out of range (0x%s is not between 0x%s and 0x%s)"
msgstr ""
-#: output-file.c:39
+#: output-file.c:35
#, c-format
msgid "can't open a bfd on stdout %s"
msgstr ""
-#: output-file.c:44
-#, c-format
-msgid "Selected target format '%s' unknown"
-msgstr ""
-
-#: output-file.c:46
+#: output-file.c:42
#, c-format
-msgid "FATAL: can't create %s"
+msgid "selected target format '%s' unknown"
msgstr ""
-#: output-file.c:63
+#: output-file.c:44
#, c-format
-msgid "FATAL: can't close %s\n"
+msgid "can't create %s: %s"
msgstr ""
-#: read.c:450
+#: read.c:458
msgid "bad or irreducible absolute expression"
msgstr ""
-#: read.c:476
+#: read.c:484
#, c-format
msgid "error constructing %s pseudo-op table: %s"
msgstr ""
-#: read.c:896
+#: read.c:894
#, c-format
msgid "unknown pseudo-op: `%s'"
msgstr ""
-#: read.c:983
+#: read.c:981
#, c-format
msgid "label \"%d$\" redefined"
msgstr ""
-#: read.c:1214
+#: read.c:1216
msgid ".abort detected. Abandoning ship."
msgstr ""
-#: read.c:1232 read.c:2406
+#: read.c:1234 read.c:2605
msgid "ignoring fill value in absolute section"
msgstr ""
-#: read.c:1322
+#: read.c:1324
#, c-format
msgid "alignment too large: %u assumed"
msgstr ""
-#: read.c:1354
+#: read.c:1356
msgid "expected fill pattern missing"
msgstr ""
-#: read.c:1457
-msgid "missing size expression"
-msgstr ""
-
-#: read.c:1463
+#: read.c:1465
#, c-format
msgid "size (%ld) out of range, ignored"
msgstr ""
-#: read.c:1483
+#: read.c:1494
#, c-format
msgid "size of \"%s\" is already %ld; not changing to %ld"
msgstr ""
@@ -11784,309 +12877,314 @@ msgstr ""
#. We do not want to barf on this, especially since such files are used
#. in the GCC and GDB testsuites. So we check for negative line numbers
#. rather than non-positive line numbers.
-#: read.c:1712
+#: read.c:1744
#, c-format
msgid "line numbers must be positive; line number %d rejected"
msgstr ""
-#: read.c:1739
+#: read.c:1781
+#, c-format
+msgid "incompatible flag %i in line directive"
+msgstr ""
+
+#: read.c:1793
+#, c-format
+msgid "unsupported flag %i in line directive"
+msgstr ""
+
+#: read.c:1832
msgid "start address not supported"
msgstr ""
-#: read.c:1748
+#: read.c:1841
msgid ".err encountered"
msgstr ""
-#: read.c:1764
+#: read.c:1857
msgid ".error directive invoked in source file"
msgstr ""
-#: read.c:1765
+#: read.c:1858
msgid ".warning directive invoked in source file"
msgstr ""
-#: read.c:1771
+#: read.c:1864
#, c-format
msgid "%s argument must be a string"
msgstr ""
-#: read.c:1803 read.c:1805
+#: read.c:1896 read.c:1898
#, c-format
msgid ".fail %ld encountered"
msgstr ""
-#: read.c:1841
+#: read.c:1934
#, c-format
msgid ".fill size clamped to %d"
msgstr ""
-#: read.c:1846
+#: read.c:1939
msgid "size negative; .fill ignored"
msgstr ""
-#: read.c:1852
+#: read.c:1945
msgid "repeat < 0; .fill ignored"
msgstr ""
-#: read.c:2010
+#: read.c:2083
+msgid "expected numeric constant"
+msgstr ""
+
+#: read.c:2139
+msgid "bad string constant"
+msgstr ""
+
+#: read.c:2143
+msgid "expected <tag> , <value>"
+msgstr ""
+
+#: read.c:2217
#, c-format
msgid "unrecognized .linkonce type `%s'"
msgstr ""
-#: read.c:2022
+#: read.c:2229
msgid ".linkonce is not supported for this object file format"
msgstr ""
-#: read.c:2044
+#: read.c:2251
#, c-format
msgid "bfd_set_section_flags: %s"
msgstr ""
-#: read.c:2070
-#, c-format
-msgid "error setting flags for \".sbss\": %s"
-msgstr ""
-
-#: read.c:2117
+#: read.c:2324
msgid "expected alignment after size"
msgstr ""
-#: read.c:2131
-msgid "alignment negative; 0 assumed"
-msgstr ""
-
-#: read.c:2340
+#: read.c:2539
#, c-format
msgid "attempt to redefine pseudo-op `%s' ignored"
msgstr ""
-#: read.c:2401
+#: read.c:2600
#, c-format
msgid "invalid segment \"%s\""
msgstr ""
-#: read.c:2409
+#: read.c:2608
msgid "only constant offsets supported in absolute section"
msgstr ""
-#: read.c:2448
+#: read.c:2647
msgid "MRI style ORG pseudo-op not supported"
msgstr ""
-#: read.c:2601
+#: read.c:2800
#, c-format
msgid "unrecognized section type `%s'"
msgstr ""
-#: read.c:2615
+#: read.c:2814
msgid "absolute sections are not supported"
msgstr ""
-#: read.c:2630
+#: read.c:2829
#, c-format
msgid "unrecognized section command `%s'"
msgstr ""
-#: read.c:2694
+#: read.c:2893
#, c-format
msgid ".end%c encountered without preceeding %s"
msgstr ""
-#: read.c:2724
+#: read.c:2923
#, c-format
msgid "%s without %s"
msgstr ""
-#: read.c:2951
+#: read.c:3147
msgid "unsupported variable size or fill value"
msgstr ""
-#: read.c:2979
+#: read.c:3175
msgid ".space repeat count is zero, ignored"
msgstr ""
-#: read.c:2981
+#: read.c:3177
msgid ".space repeat count is negative, ignored"
msgstr ""
-#: read.c:3010
+#: read.c:3206
msgid "space allocation too complex in absolute section"
msgstr ""
-#: read.c:3016
+#: read.c:3212
msgid "space allocation too complex in common section"
msgstr ""
-#: read.c:3103 read.c:4276
+#: read.c:3299 read.c:4599
#, c-format
msgid "bad floating literal: %s"
msgstr ""
-#: read.c:3243
+#: read.c:3458
#, c-format
msgid "%s: would close weakref loop: %s"
msgstr ""
-#: read.c:3286
-#, c-format
-msgid "junk at end of line, first unrecognized character is `%c'"
-msgstr ""
-
-#: read.c:3289
+#: read.c:3504
#, c-format
msgid "junk at end of line, first unrecognized character valued 0x%x"
msgstr ""
-#: read.c:3347
+#: read.c:3562
msgid "missing expression"
msgstr ""
-#: read.c:3408
+#: read.c:3624
#, c-format
msgid "`%s' can't be equated to common symbol '%s'"
msgstr ""
-#: read.c:3536
+#: read.c:3752
msgid "rva without symbol"
msgstr ""
-#: read.c:3658
-msgid "attempt to store value in absolute section"
+#: read.c:3809
+msgid "missing or bad offset expression"
msgstr ""
-#: read.c:3696 read.c:4544
-msgid "zero assumed for missing expression"
+#: read.c:3830
+msgid "missing reloc type"
msgstr ""
-#: read.c:3708 read.c:4556 write.c:265
-msgid "register value used as expression"
+#: read.c:3842
+msgid "unrecognized reloc type"
msgstr ""
-#. Leading bits contain both 0s & 1s.
-#: read.c:3786
-#, c-format
-msgid "value 0x%lx truncated to 0x%lx"
+#: read.c:3858
+msgid "bad reloc expression"
msgstr ""
-#: read.c:3802
-#, c-format
-msgid "bignum truncated to %d bytes"
+#: read.c:3981
+msgid "attempt to store value in absolute section"
msgstr ""
-#: read.c:3943
-msgid "using a bit field width of zero"
+#: read.c:4019 read.c:4867
+msgid "zero assumed for missing expression"
msgstr ""
-#: read.c:3951
-#, c-format
-msgid "field width \"%s\" too complex for a bitfield"
+#: read.c:4031 read.c:4879 write.c:260
+msgid "register value used as expression"
msgstr ""
-#: read.c:3959
+#. Leading bits contain both 0s & 1s.
+#: read.c:4109
#, c-format
-msgid "field width %lu too big to fit in %d bytes: truncated to %d bits"
+msgid "value 0x%lx truncated to 0x%lx"
msgstr ""
-#: read.c:3981
+#: read.c:4125
#, c-format
-msgid "field value \"%s\" too complex for a bitfield"
+msgid "bignum truncated to %d bytes"
msgstr ""
-#: read.c:4107 read.c:4298
+#: read.c:4430 read.c:4621
msgid "unresolvable or nonpositive repeat count; using 1"
msgstr ""
-#: read.c:4156
+#: read.c:4479
#, c-format
msgid "unknown floating type type '%c'"
msgstr ""
-#: read.c:4178
+#: read.c:4501
msgid "floating point constant too large"
msgstr ""
-#: read.c:4670
+#: read.c:4993
msgid "strings must be placed into a section"
msgstr ""
-#: read.c:4720
+#: read.c:5043
msgid "expected <nn>"
msgstr ""
#. To be compatible with BSD 4.2 as: give the luser a linefeed!!
-#: read.c:4753 read.c:4839
+#: read.c:5076 read.c:5162
msgid "unterminated string; newline inserted"
msgstr ""
-#: read.c:4847
+#: read.c:5170
msgid "bad escaped character in string"
msgstr ""
-#: read.c:4872
+#: read.c:5195
msgid "expected address expression"
msgstr ""
-#: read.c:4891
+#: read.c:5214
#, c-format
msgid "symbol \"%s\" undefined; zero assumed"
msgstr ""
-#: read.c:4894
+#: read.c:5217
msgid "some symbol undefined; zero assumed"
msgstr ""
-#: read.c:4930
+#: read.c:5253
msgid "this string may not contain '\\0'"
msgstr ""
-#: read.c:4966
+#: read.c:5289
msgid "missing string"
msgstr ""
-#: read.c:5053
+#: read.c:5376
#, c-format
msgid ".incbin count zero, ignoring `%s'"
msgstr ""
-#: read.c:5079
+#: read.c:5402
#, c-format
msgid "file not found: %s"
msgstr ""
-#: read.c:5093
+#: read.c:5416
#, c-format
msgid "seek to end of .incbin file failed `%s'"
msgstr ""
-#: read.c:5104
+#: read.c:5427
#, c-format
msgid "skip (%ld) or count (%ld) invalid for file size (%ld)"
msgstr ""
-#: read.c:5111
+#: read.c:5434
#, c-format
msgid "could not skip to %ld in file `%s'"
msgstr ""
-#: read.c:5120
+#: read.c:5443
#, c-format
msgid "truncated file `%s', %ld of %ld bytes read"
msgstr ""
-#: read.c:5278
+#: read.c:5601
msgid "missing .func"
msgstr ""
-#: read.c:5295
+#: read.c:5618
msgid ".endfunc missing for previous .func"
msgstr ""
-#: read.c:5418
+#: read.c:5741
#, c-format
msgid "missing closing `%c'"
msgstr ""
-#: read.c:5420
+#: read.c:5743
msgid "stray `\\'"
msgstr ""
@@ -12107,187 +13205,203 @@ msgstr ""
msgid "comma missing in .xstabs"
msgstr ""
-#: symbols.c:278
+#: symbols.c:277
#, c-format
msgid "cannot define symbol `%s' in absolute section"
msgstr ""
-#: symbols.c:409
+#: symbols.c:417
#, c-format
msgid "symbol `%s' is already defined as \"%s\"/%s%ld"
msgstr ""
-#: symbols.c:483 symbols.c:490
+#: symbols.c:494 symbols.c:501
#, c-format
msgid "inserting \"%s\" into symbol table failed: %s"
msgstr ""
-#: symbols.c:864 symbols.c:868
+#: symbols.c:957 symbols.c:961
#, c-format
msgid "undefined symbol `%s' in operation"
msgstr ""
-#: symbols.c:875
+#: symbols.c:968
#, c-format
msgid "invalid sections for operation on `%s' and `%s'"
msgstr ""
-#: symbols.c:879
+#: symbols.c:972
#, c-format
msgid "invalid section for operation on `%s'"
msgstr ""
-#: symbols.c:887 symbols.c:890
+#: symbols.c:980 symbols.c:983
#, c-format
msgid "undefined symbol `%s' in operation setting `%s'"
msgstr ""
-#: symbols.c:897
+#: symbols.c:989
#, c-format
msgid "invalid sections for operation on `%s' and `%s' setting `%s'"
msgstr ""
-#: symbols.c:901
+#: symbols.c:992
#, c-format
msgid "invalid section for operation on `%s' setting `%s'"
msgstr ""
-#: symbols.c:951
+#: symbols.c:1042
#, c-format
msgid "symbol definition loop encountered at `%s'"
msgstr ""
-#: symbols.c:1209
+#: symbols.c:1069
+#, c-format
+msgid "cannot convert expression symbol %s to complex relocation"
+msgstr ""
+
+#: symbols.c:1351
#, c-format
msgid "division by zero when setting `%s'"
msgstr ""
-#: symbols.c:1291 write.c:1545
+#: symbols.c:1432 write.c:1805
#, c-format
msgid "can't resolve value for symbol `%s'"
msgstr ""
-#: symbols.c:1738
+#: symbols.c:1882
#, c-format
msgid "\"%d\" (instance number %d of a %s label)"
msgstr ""
-#: symbols.c:1775
+#: symbols.c:1911
#, c-format
msgid "attempt to get value of unresolved symbol `%s'"
msgstr ""
-#: symbols.c:2045
+#: symbols.c:2184
msgid "section symbols are already global"
msgstr ""
-#: symbols.c:2150
+#: symbols.c:2289
#, c-format
msgid "Accessing function `%s' as thread-local object"
msgstr ""
-#: symbols.c:2154
+#: symbols.c:2293
#, c-format
msgid "Accessing `%s' as thread-local object"
msgstr ""
-#: write.c:164
+#: write.c:159
#, c-format
msgid "field fx_size too small to hold %d"
msgstr ""
-#: write.c:440
+#: write.c:436
#, c-format
msgid "attempt to .org/.space backwards? (%ld)"
msgstr ""
-#: write.c:691
+#: write.c:664
+msgid "invalid offset expression"
+msgstr ""
+
+#: write.c:686
+msgid "invalid reloc expression"
+msgstr ""
+
+#: write.c:1039
+#, c-format
+msgid "value of %s too large for field of %d bytes at %s"
+msgstr ""
+
+#: write.c:1051
#, c-format
-msgid "Local symbol `%s' can't be equated to undefined symbol `%s'"
+msgid "signed .word overflow; switch may be too large; %ld at 0x%lx"
msgstr ""
-#: write.c:865 write.c:937
+#: write.c:1099
msgid "relocation out of range"
msgstr ""
-#: write.c:868 write.c:940
+#: write.c:1102
#, c-format
msgid "%s:%u: bad return from bfd_install_relocation: %x"
msgstr ""
-#: write.c:920
+#: write.c:1166
msgid "internal error: fixup not contained within frag"
msgstr ""
-#: write.c:1026 write.c:1050
+#: write.c:1219
+msgid "reloc not within (fixed part of) section"
+msgstr ""
+
+#: write.c:1286 write.c:1307
#, c-format
-msgid "FATAL: Can't write %s"
+msgid "can't write %s: %s"
msgstr ""
-#: write.c:1082
+#: write.c:1337
msgid "cannot write to output file"
msgstr ""
-#: write.c:1223
+#: write.c:1487
#, c-format
msgid "%d error%s, %d warning%s, generating bad object file"
msgstr ""
-#: write.c:1230
+#: write.c:1494
#, c-format
msgid "%d error%s, %d warning%s, no object file generated"
msgstr ""
-#: write.c:1464
+#: write.c:1729
#, c-format
msgid "%s: global symbols not supported in common sections"
msgstr ""
-#: write.c:1478
+#: write.c:1743
#, c-format
msgid "local label `%s' is not defined"
msgstr ""
-#: write.c:1498
+#: write.c:1763
#, c-format
msgid "Local symbol `%s' can't be equated to common symbol `%s'"
msgstr ""
-#: write.c:1768
+#: write.c:2028
#, c-format
msgid "alignment padding (%lu bytes) not a multiple of %ld"
msgstr ""
-#: write.c:1900
+#: write.c:2186
#, c-format
msgid ".word %s-%s+%s didn't fit"
msgstr ""
-#: write.c:1976
+#: write.c:2275
+msgid "padding added"
+msgstr ""
+
+#: write.c:2325
msgid "attempt to move .org backwards"
msgstr ""
-#: write.c:2004
+#: write.c:2353
msgid ".space specifies non-absolute value"
msgstr ""
-#: write.c:2011
+#: write.c:2368
msgid ".space or .fill with negative value, ignored"
msgstr ""
-#: write.c:2067
+#: write.c:2439
#, c-format
msgid ""
"Infinite loop encountered whilst attempting to compute the addresses of "
"symbols in section %s"
msgstr ""
-
-#: write.c:2289
-#, c-format
-msgid "value of %s too large for field of %d bytes at %s"
-msgstr ""
-
-#: write.c:2301
-#, c-format
-msgid "signed .word overflow; switch may be too large; %ld at 0x%lx"
-msgstr ""
diff --git a/gas/po/rw.gmo b/gas/po/rw.gmo
deleted file mode 100644
index 35ffd398da00..000000000000
--- a/gas/po/rw.gmo
+++ /dev/null
Binary files differ
diff --git a/gas/po/tr.gmo b/gas/po/tr.gmo
deleted file mode 100644
index fe95cfbeb132..000000000000
--- a/gas/po/tr.gmo
+++ /dev/null
Binary files differ
diff --git a/gas/read.c b/gas/read.c
index 0485d72dec67..0098d7691b3a 100644
--- a/gas/read.c
+++ b/gas/read.c
@@ -1,6 +1,6 @@
/* read.c - read a source file -
Copyright 1986, 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
- 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -38,7 +38,6 @@ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
#include "sb.h"
#include "macro.h"
#include "obstack.h"
-#include "listing.h"
#include "ecoff.h"
#include "dw2gencfi.h"
@@ -214,6 +213,10 @@ static void do_align (int, char *, int, int);
static void s_align (int, int);
static void s_altmacro (int);
static void s_bad_end (int);
+#ifdef OBJ_ELF
+static void s_gnu_attribute (int);
+#endif
+static void s_reloc (int);
static int hex_float (int, char *);
static segT get_known_segmented_expression (expressionS * expP);
static void pobegin (void);
@@ -330,7 +333,7 @@ static const pseudo_typeS potable[] = {
/* extend */
{"extern", s_ignore, 0}, /* We treat all undef as ext. */
{"appfile", s_app_file, 1},
- {"appline", s_app_line, 0},
+ {"appline", s_app_line, 1},
{"fail", s_fail, 0},
{"file", s_app_file, 0},
{"fill", s_fill, 0},
@@ -339,6 +342,9 @@ static const pseudo_typeS potable[] = {
{"func", s_func, 0},
{"global", s_globl, 0},
{"globl", s_globl, 0},
+#ifdef OBJ_ELF
+ {"gnu_attribute", s_gnu_attribute, 0},
+#endif
{"hword", cons, 2},
{"if", s_if, (int) O_ne},
{"ifb", s_ifb, 1},
@@ -365,6 +371,7 @@ static const pseudo_typeS potable[] = {
{"irepc", s_irp, 1},
{"lcomm", s_lcomm, 0},
{"lflags", listing_flags, 0}, /* Listing flags. */
+ {"linefile", s_app_line, 0},
{"linkonce", s_linkonce, 0},
{"list", listing_list, 1}, /* Turn listing on. */
{"llen", listing_psize, 1},
@@ -391,6 +398,7 @@ static const pseudo_typeS potable[] = {
{"psize", listing_psize, 0}, /* Set paper size. */
{"purgem", s_purgem, 0},
{"quad", cons, 8},
+ {"reloc", s_reloc, 0},
{"rep", s_rept, 0},
{"rept", s_rept, 0},
{"rva", s_rva, 4},
@@ -605,8 +613,6 @@ read_a_source_file (char *name)
last_eol = NULL;
#endif
- know (buffer_limit[-1] == '\n'); /* Must have a sentinel. */
-
while (input_line_pointer < buffer_limit)
{
/* We have more of this buffer to parse. */
@@ -695,19 +701,11 @@ read_a_source_file (char *name)
Depending on what compiler is used, the order of these tests
may vary to catch most common case 1st.
- Each test is independent of all other tests at the (top) level.
- PLEASE make a compiler that doesn't use this assembler.
- It is crufty to waste a compiler's time encoding things for this
- assembler, which then wastes more time decoding it.
- (And communicating via (linear) files is silly!
- If you must pass stuff, please pass a tree!) */
- if ((c = *input_line_pointer++) == '\t'
- || c == ' '
- || c == '\f'
- || c == 0)
+ Each test is independent of all other tests at the (top)
+ level. */
+ do
c = *input_line_pointer++;
-
- know (c != ' '); /* No further leading whitespace. */
+ while (c == '\t' || c == ' ' || c == '\f');
#ifndef NO_LISTING
/* If listing is on, and we are expanding a macro, then give
@@ -1008,10 +1006,14 @@ read_a_source_file (char *name)
unsigned int new_length;
char *tmp_buf = 0;
- bump_line_counters ();
s = input_line_pointer;
if (strncmp (s, "APP\n", 4))
- continue; /* We ignore it */
+ {
+ /* We ignore it. */
+ ignore_rest_of_line ();
+ continue;
+ }
+ bump_line_counters ();
s += 4;
sb_new (&sbuf);
@@ -1110,7 +1112,7 @@ read_a_source_file (char *name)
continue;
#endif
input_line_pointer--;
- /* Report unknown char as ignored. */
+ /* Report unknown char as error. */
demand_empty_rest_of_line ();
}
@@ -1279,7 +1281,7 @@ s_align (int arg, int bytes_p)
unsigned int align_limit = ALIGN_LIMIT;
unsigned int align;
char *stop = NULL;
- char stopc;
+ char stopc = 0;
offsetT fill = 0;
int max;
int fill_p;
@@ -1423,7 +1425,7 @@ s_comm_internal (int param,
offsetT temp, size;
symbolS *symbolP = NULL;
char *stop = NULL;
- char stopc;
+ char stopc = 0;
expressionS exp;
if (flag_mri)
@@ -1478,10 +1480,7 @@ s_comm_internal (int param,
ignore_rest_of_line ();
goto out;
}
- /* This could be avoided when the symbol wasn't used so far, but
- the comment in struc-symbol.h says this flag isn't reliable. */
- if (1 || !symbol_used_p (symbolP))
- symbolP = symbol_clone (symbolP, 1);
+ symbolP = symbol_clone (symbolP, 1);
S_SET_SEGMENT (symbolP, undefined_section);
S_SET_VALUE (symbolP, 0);
symbol_set_frag (symbolP, &zero_address_frag);
@@ -1538,7 +1537,7 @@ s_mri_common (int small ATTRIBUTE_UNUSED)
symbolS *sym;
offsetT align;
char *stop = NULL;
- char stopc;
+ char stopc = 0;
if (!flag_mri)
{
@@ -1681,11 +1680,8 @@ s_app_file (int appfile)
/* Some assemblers tolerate immediately following '"'. */
if ((s = demand_copy_string (&length)) != 0)
{
- /* If this is a fake .appfile, a fake newline was inserted into
- the buffer. Passing -2 to new_logical_line tells it to
- account for it. */
int may_omit
- = (!new_logical_line (s, appfile ? -2 : -1) && appfile);
+ = (!new_logical_line_flags (s, -1, 1) && appfile);
/* In MRI mode, the preprocessor may have inserted an extraneous
backquote. */
@@ -1700,18 +1696,40 @@ s_app_file (int appfile)
}
}
+static int
+get_linefile_number (int *flag)
+{
+ SKIP_WHITESPACE ();
+
+ if (*input_line_pointer < '0' || *input_line_pointer > '9')
+ return 0;
+
+ *flag = get_absolute_expression ();
+
+ return 1;
+}
+
/* Handle the .appline pseudo-op. This is automatically generated by
do_scrub_chars when a preprocessor # line comment is seen. This
default definition may be overridden by the object or CPU specific
pseudo-ops. */
void
-s_app_line (int ignore ATTRIBUTE_UNUSED)
+s_app_line (int appline)
{
+ char *file = NULL;
int l;
/* The given number is that of the next line. */
- l = get_absolute_expression () - 1;
+ if (appline)
+ l = get_absolute_expression ();
+ else if (!get_linefile_number (&l))
+ {
+ ignore_rest_of_line ();
+ return;
+ }
+
+ l--;
if (l < -1)
/* Some of the back ends can't deal with non-positive line numbers.
@@ -1727,13 +1745,74 @@ s_app_line (int ignore ATTRIBUTE_UNUSED)
l + 1);
else
{
- new_logical_line ((char *) NULL, l);
+ int flags = 0;
+ int length = 0;
+
+ if (!appline)
+ {
+ SKIP_WHITESPACE ();
+
+ if (*input_line_pointer == '"')
+ file = demand_copy_string (&length);
+
+ if (file)
+ {
+ int this_flag;
+
+ while (get_linefile_number (&this_flag))
+ switch (this_flag)
+ {
+ /* From GCC's cpp documentation:
+ 1: start of a new file.
+ 2: returning to a file after having included
+ another file.
+ 3: following text comes from a system header file.
+ 4: following text should be treated as extern "C".
+
+ 4 is nonsensical for the assembler; 3, we don't
+ care about, so we ignore it just in case a
+ system header file is included while
+ preprocessing assembly. So 1 and 2 are all we
+ care about, and they are mutually incompatible.
+ new_logical_line_flags() demands this. */
+ case 1:
+ case 2:
+ if (flags && flags != (1 << this_flag))
+ as_warn (_("incompatible flag %i in line directive"),
+ this_flag);
+ else
+ flags |= 1 << this_flag;
+ break;
+
+ case 3:
+ case 4:
+ /* We ignore these. */
+ break;
+
+ default:
+ as_warn (_("unsupported flag %i in line directive"),
+ this_flag);
+ break;
+ }
+
+ if (!is_end_of_line[(unsigned char)*input_line_pointer])
+ file = 0;
+ }
+ }
+
+ if (appline || file)
+ {
+ new_logical_line_flags (file, l, flags);
#ifdef LISTING
- if (listing)
- listing_source_line (l);
+ if (listing)
+ listing_source_line (l);
#endif
+ }
}
- demand_empty_rest_of_line ();
+ if (appline || file)
+ demand_empty_rest_of_line ();
+ else
+ ignore_rest_of_line ();
}
/* Handle the .end pseudo-op. Actually, the real work is done in
@@ -1807,7 +1886,7 @@ s_fail (int ignore ATTRIBUTE_UNUSED)
{
offsetT temp;
char *stop = NULL;
- char stopc;
+ char stopc = 0;
if (flag_mri)
stop = mri_comment_field (&stopc);
@@ -1929,7 +2008,7 @@ s_globl (int ignore ATTRIBUTE_UNUSED)
int c;
symbolS *symbolP;
char *stop = NULL;
- char stopc;
+ char stopc = 0;
if (flag_mri)
stop = mri_comment_field (&stopc);
@@ -1960,6 +2039,120 @@ s_globl (int ignore ATTRIBUTE_UNUSED)
mri_comment_end (stop, stopc);
}
+#ifdef OBJ_ELF
+#define skip_whitespace(str) do { if (*(str) == ' ') ++(str); } while (0)
+
+static inline int
+skip_past_char (char ** str, char c)
+{
+ if (**str == c)
+ {
+ (*str)++;
+ return 0;
+ }
+ else
+ return -1;
+}
+#define skip_past_comma(str) skip_past_char (str, ',')
+
+/* Parse an attribute directive for VENDOR. */
+void
+s_vendor_attribute (int vendor)
+{
+ expressionS exp;
+ int type;
+ int tag;
+ unsigned int i = 0;
+ char *s = NULL;
+ char saved_char;
+
+ expression (& exp);
+ if (exp.X_op != O_constant)
+ goto bad;
+
+ tag = exp.X_add_number;
+ type = _bfd_elf_obj_attrs_arg_type (stdoutput, vendor, tag);
+
+ if (skip_past_comma (&input_line_pointer) == -1)
+ goto bad;
+ if (type & 1)
+ {
+ expression (& exp);
+ if (exp.X_op != O_constant)
+ {
+ as_bad (_("expected numeric constant"));
+ ignore_rest_of_line ();
+ return;
+ }
+ i = exp.X_add_number;
+ }
+ if (type == 3
+ && skip_past_comma (&input_line_pointer) == -1)
+ {
+ as_bad (_("expected comma"));
+ ignore_rest_of_line ();
+ return;
+ }
+ if (type & 2)
+ {
+ skip_whitespace(input_line_pointer);
+ if (*input_line_pointer != '"')
+ goto bad_string;
+ input_line_pointer++;
+ s = input_line_pointer;
+ while (*input_line_pointer && *input_line_pointer != '"')
+ input_line_pointer++;
+ if (*input_line_pointer != '"')
+ goto bad_string;
+ saved_char = *input_line_pointer;
+ *input_line_pointer = 0;
+ }
+ else
+ {
+ s = NULL;
+ saved_char = 0;
+ }
+
+ switch (type)
+ {
+ case 3:
+ bfd_elf_add_obj_attr_compat (stdoutput, vendor, i, s);
+ break;
+ case 2:
+ bfd_elf_add_obj_attr_string (stdoutput, vendor, tag, s);
+ break;
+ case 1:
+ bfd_elf_add_obj_attr_int (stdoutput, vendor, tag, i);
+ break;
+ default:
+ abort ();
+ }
+
+ if (s)
+ {
+ *input_line_pointer = saved_char;
+ input_line_pointer++;
+ }
+ demand_empty_rest_of_line ();
+ return;
+bad_string:
+ as_bad (_("bad string constant"));
+ ignore_rest_of_line ();
+ return;
+bad:
+ as_bad (_("expected <tag> , <value>"));
+ ignore_rest_of_line ();
+}
+
+/* Parse a .gnu_attribute directive. */
+
+static void
+s_gnu_attribute (int ignored ATTRIBUTE_UNUSED)
+{
+ s_vendor_attribute (OBJ_ATTR_GNU);
+}
+#endif /* OBJ_ELF */
+
/* Handle the MRI IRP and IRPC pseudo-ops. */
void
@@ -2812,10 +3005,7 @@ assign_symbol (char *name, int mode)
/* If the symbol is volatile, copy the symbol and replace the
original with the copy, so that previous uses of the symbol will
retain the value of the symbol at the point of use. */
- else if (S_IS_VOLATILE (symbolP)
- /* This could be avoided when the symbol wasn't used so far, but
- the comment in struc-symbol.h says this flag isn't reliable. */
- && (1 || symbol_used_p (symbolP)))
+ else if (S_IS_VOLATILE (symbolP))
symbolP = symbol_clone (symbolP, 1);
}
@@ -2881,7 +3071,7 @@ s_space (int mult)
expressionS val;
char *p = 0;
char *stop = NULL;
- char stopc;
+ char stopc = 0;
int bytes;
#ifdef md_flush_pending_output
@@ -3057,7 +3247,7 @@ s_float_space (int float_type)
int flen;
char temp[MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT];
char *stop = NULL;
- char stopc;
+ char stopc = 0;
if (flag_mri)
stop = mri_comment_field (&stopc);
@@ -3134,11 +3324,17 @@ void
s_struct (int ignore ATTRIBUTE_UNUSED)
{
char *stop = NULL;
- char stopc;
+ char stopc = 0;
if (flag_mri)
stop = mri_comment_field (&stopc);
abs_section_offset = get_absolute_expression ();
+#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
+ /* The ELF backend needs to know that we are changing sections, so
+ that .previous works correctly. */
+ if (IS_ELF)
+ obj_elf_section_change_hook ();
+#endif
subseg_set (absolute_section, 0);
demand_empty_rest_of_line ();
if (flag_mri)
@@ -3186,17 +3382,14 @@ s_weakref (int ignore ATTRIBUTE_UNUSED)
if (S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
{
- if(!S_IS_VOLATILE (symbolP))
+ if (!S_IS_VOLATILE (symbolP))
{
as_bad (_("symbol `%s' is already defined"), name);
*end_name = delim;
ignore_rest_of_line ();
return;
}
- /* This could be avoided when the symbol wasn't used so far, but
- the comment in struc-symbol.h says this flag isn't reliable. */
- if (1 || !symbol_used_p (symbolP))
- symbolP = symbol_clone (symbolP, 1);
+ symbolP = symbol_clone (symbolP, 1);
S_CLEAR_VOLATILE (symbolP);
}
@@ -3408,6 +3601,7 @@ pseudo_set (symbolS *symbolP)
S_SET_SEGMENT (symbolP, reg_section);
S_SET_VALUE (symbolP, (valueT) exp.X_add_number);
set_zero_frag (symbolP);
+ symbol_get_value_expression (symbolP)->X_op = O_register;
break;
case O_symbol:
@@ -3514,7 +3708,7 @@ cons_worker (register int nbytes, /* 1=.byte, 2=.word, 4=.long. */
int c;
expressionS exp;
char *stop = NULL;
- char stopc;
+ char stopc = 0;
#ifdef md_flush_pending_output
md_flush_pending_output ();
@@ -3588,6 +3782,113 @@ s_rva (int size)
cons_worker (size, 1);
}
+/* .reloc offset, reloc_name, symbol+addend. */
+
+void
+s_reloc (int ignore ATTRIBUTE_UNUSED)
+{
+ char *stop = NULL;
+ char stopc = 0;
+ expressionS exp;
+ char *r_name;
+ int c;
+ struct reloc_list *reloc;
+
+ reloc = xmalloc (sizeof (*reloc));
+
+ if (flag_mri)
+ stop = mri_comment_field (&stopc);
+
+ expression (&exp);
+ switch (exp.X_op)
+ {
+ case O_illegal:
+ case O_absent:
+ case O_big:
+ case O_register:
+ as_bad (_("missing or bad offset expression"));
+ goto err_out;
+ case O_constant:
+ exp.X_add_symbol = section_symbol (now_seg);
+ exp.X_op = O_symbol;
+ /* Fall thru */
+ case O_symbol:
+ if (exp.X_add_number == 0)
+ {
+ reloc->u.a.offset_sym = exp.X_add_symbol;
+ break;
+ }
+ /* Fall thru */
+ default:
+ reloc->u.a.offset_sym = make_expr_symbol (&exp);
+ break;
+ }
+
+ SKIP_WHITESPACE ();
+ if (*input_line_pointer != ',')
+ {
+ as_bad (_("missing reloc type"));
+ goto err_out;
+ }
+
+ ++input_line_pointer;
+ SKIP_WHITESPACE ();
+ r_name = input_line_pointer;
+ c = get_symbol_end ();
+ reloc->u.a.howto = bfd_reloc_name_lookup (stdoutput, r_name);
+ *input_line_pointer = c;
+ if (reloc->u.a.howto == NULL)
+ {
+ as_bad (_("unrecognized reloc type"));
+ goto err_out;
+ }
+
+ exp.X_op = O_absent;
+ SKIP_WHITESPACE ();
+ if (*input_line_pointer == ',')
+ {
+ ++input_line_pointer;
+ expression_and_evaluate (&exp);
+ }
+ switch (exp.X_op)
+ {
+ case O_illegal:
+ case O_big:
+ case O_register:
+ as_bad (_("bad reloc expression"));
+ err_out:
+ ignore_rest_of_line ();
+ free (reloc);
+ if (flag_mri)
+ mri_comment_end (stop, stopc);
+ return;
+ case O_absent:
+ reloc->u.a.sym = NULL;
+ reloc->u.a.addend = 0;
+ break;
+ case O_constant:
+ reloc->u.a.sym = NULL;
+ reloc->u.a.addend = exp.X_add_number;
+ break;
+ case O_symbol:
+ reloc->u.a.sym = exp.X_add_symbol;
+ reloc->u.a.addend = exp.X_add_number;
+ break;
+ default:
+ reloc->u.a.sym = make_expr_symbol (&exp);
+ reloc->u.a.addend = 0;
+ break;
+ }
+
+ as_where (&reloc->file, &reloc->line);
+ reloc->next = reloc_list;
+ reloc_list = reloc;
+
+ demand_empty_rest_of_line ();
+ if (flag_mri)
+ mri_comment_end (stop, stopc);
+}
+
/* Put the contents of expression EXP into the object file using
NBYTES bytes. If need_pass_2 is 1, this does nothing. */
@@ -5010,7 +5311,7 @@ void
equals (char *sym_name, int reassign)
{
char *stop = NULL;
- char stopc;
+ char stopc = 0;
input_line_pointer++;
if (*input_line_pointer == '=')
diff --git a/gas/read.h b/gas/read.h
index a18272d8882c..6ac153b6d492 100644
--- a/gas/read.h
+++ b/gas/read.h
@@ -185,4 +185,5 @@ extern void stringer (int append_zero);
extern void s_xstab (int what);
extern void s_rva (int);
extern void s_incbin (int);
+extern void s_vendor_attribute (int);
extern void s_weakref (int);
diff --git a/gas/sb.c b/gas/sb.c
index ecd772c30c02..5fa0bc669eb3 100644
--- a/gas/sb.c
+++ b/gas/sb.c
@@ -1,5 +1,5 @@
/* sb.c - string buffer manipulation routines
- Copyright 1994, 1995, 2000, 2003 Free Software Foundation, Inc.
+ Copyright 1994, 1995, 2000, 2003, 2006 Free Software Foundation, Inc.
Written by Steve and Judy Chamberlain of Cygnus Support,
sac@cygnus.com
@@ -21,19 +21,8 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "config.h"
-#include <stdio.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-#include "libiberty.h"
-#include "sb.h"
#include "as.h"
+#include "sb.h"
/* These routines are about manipulating strings.
@@ -56,7 +45,10 @@ static void sb_check (sb *, int);
static int string_count[sb_max_power_two];
/* Free list of sb structures. */
-static sb_list_vector free_list;
+static struct
+{
+ sb_element *size[sb_max_power_two];
+} free_list;
/* Initializes an sb. */
@@ -66,8 +58,7 @@ sb_build (sb *ptr, int size)
/* See if we can find one to allocate. */
sb_element *e;
- if (size > sb_max_power_two)
- abort ();
+ assert (size < sb_max_power_two);
e = free_list.size[size];
if (!e)
diff --git a/gas/sb.h b/gas/sb.h
index 5732688315f7..5a886f9845f3 100644
--- a/gas/sb.h
+++ b/gas/sb.h
@@ -1,5 +1,5 @@
/* sb.h - header file for string buffer manipulation routines
- Copyright 1994, 1995, 2000, 2003 Free Software Foundation, Inc.
+ Copyright 1994, 1995, 2000, 2003, 2006 Free Software Foundation, Inc.
Written by Steve and Judy Chamberlain of Cygnus Support,
sac@cygnus.com
@@ -25,9 +25,6 @@
#define SB_H
-#include <stdio.h>
-#include "ansidecl.h"
-
/* String blocks
I had a couple of choices when deciding upon this data structure.
@@ -70,14 +67,6 @@ typedef struct le
}
sb_element;
-/* The free list. */
-
-typedef struct
-{
- sb_element *size[sb_max_power_two];
-}
-sb_list_vector;
-
extern void sb_new (sb *);
extern void sb_kill (sb *);
extern void sb_add_sb (sb *, sb *);
diff --git a/gas/subsegs.c b/gas/subsegs.c
index 9401d61a834c..00947649d68e 100644
--- a/gas/subsegs.c
+++ b/gas/subsegs.c
@@ -1,6 +1,6 @@
/* subsegs.c - subsegments -
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -27,20 +27,12 @@
#include "subsegs.h"
#include "obstack.h"
-frchainS *frchain_root, *frchain_now;
+frchainS *frchain_now;
static struct obstack frchains;
-/* Gas segment information for bfd_abs_section_ptr and
- bfd_und_section_ptr. */
-static segment_info_type *abs_seg_info;
-static segment_info_type *und_seg_info;
-
-static void subseg_set_rest (segT, subsegT);
-
static fragS dummy_frag;
-static frchainS absolute_frchain;
void
subsegs_begin (void)
@@ -50,16 +42,8 @@ subsegs_begin (void)
obstack_alignment_mask (&frchains) = __alignof__ (frchainS) - 1;
#endif
- frchain_root = NULL;
frchain_now = NULL; /* Warn new_subseg() that we are booting. */
-
frag_now = &dummy_frag;
-
- absolute_frchain.frch_seg = absolute_section;
- absolute_frchain.frch_subseg = 0;
- absolute_frchain.fix_root = absolute_frchain.fix_tail = 0;
- absolute_frchain.frch_frag_now = &zero_address_frag;
- absolute_frchain.frch_root = absolute_frchain.frch_last = &zero_address_frag;
}
/*
@@ -75,37 +59,25 @@ subsegs_begin (void)
void
subseg_change (register segT seg, register int subseg)
{
- segment_info_type *seginfo;
+ segment_info_type *seginfo = seg_info (seg);
now_seg = seg;
now_subseg = subseg;
- if (now_seg == absolute_section)
- return;
-
- seginfo = (segment_info_type *) bfd_get_section_userdata (stdoutput, seg);
if (! seginfo)
{
- seginfo = (segment_info_type *) xmalloc (sizeof (*seginfo));
- memset ((PTR) seginfo, 0, sizeof (*seginfo));
- seginfo->fix_root = NULL;
- seginfo->fix_tail = NULL;
+ seginfo = xcalloc (1, sizeof (*seginfo));
seginfo->bfd_section = seg;
- seginfo->sym = 0;
- if (seg == bfd_abs_section_ptr)
- abs_seg_info = seginfo;
- else if (seg == bfd_und_section_ptr)
- und_seg_info = seginfo;
- else
- bfd_set_section_userdata (stdoutput, seg, (PTR) seginfo);
+ bfd_set_section_userdata (stdoutput, seg, seginfo);
}
}
static void
subseg_set_rest (segT seg, subsegT subseg)
{
- register frchainS *frcP; /* crawl frchain chain */
- register frchainS **lastPP; /* address of last pointer */
+ frchainS *frcP; /* crawl frchain chain */
+ frchainS **lastPP; /* address of last pointer */
frchainS *newP; /* address of new frchain */
+ segment_info_type *seginfo;
mri_common_symbol = NULL;
@@ -113,72 +85,26 @@ subseg_set_rest (segT seg, subsegT subseg)
frchain_now->frch_frag_now = frag_now;
assert (frchain_now == 0
- || now_seg == undefined_section
- || now_seg == absolute_section
|| frchain_now->frch_last == frag_now);
subseg_change (seg, (int) subseg);
- if (seg == absolute_section)
- {
- frchain_now = &absolute_frchain;
- frag_now = &zero_address_frag;
- return;
- }
+ seginfo = seg_info (seg);
- assert (frchain_now == 0
- || now_seg == undefined_section
- || frchain_now->frch_last == frag_now);
-
- /*
- * Attempt to find or make a frchain for that sub seg.
- * Crawl along chain of frchainSs, begins @ frchain_root.
- * If we need to make a frchainS, link it into correct
- * position of chain rooted in frchain_root.
- */
- for (frcP = *(lastPP = &frchain_root);
- frcP && frcP->frch_seg <= seg;
+ /* Attempt to find or make a frchain for that subsection.
+ We keep the list sorted by subsection number. */
+ for (frcP = *(lastPP = &seginfo->frchainP);
+ frcP != NULL;
frcP = *(lastPP = &frcP->frch_next))
+ if (frcP->frch_subseg >= subseg)
+ break;
+
+ if (frcP == NULL || frcP->frch_subseg != subseg)
{
- if (frcP->frch_seg == seg
- && frcP->frch_subseg >= subseg)
- {
- break;
- }
- }
- /*
- * frcP: Address of the 1st frchainS in correct segment with
- * frch_subseg >= subseg.
- * We want to either use this frchainS, or we want
- * to insert a new frchainS just before it.
- *
- * If frcP==NULL, then we are at the end of the chain
- * of frchainS-s. A NULL frcP means we fell off the end
- * of the chain looking for a
- * frch_subseg >= subseg, so we
- * must make a new frchainS.
- *
- * If we ever maintain a pointer to
- * the last frchainS in the chain, we change that pointer
- * ONLY when frcP==NULL.
- *
- * lastPP: Address of the pointer with value frcP;
- * Never NULL.
- * May point to frchain_root.
- *
- */
- if (!frcP
- || (frcP->frch_seg > seg
- || frcP->frch_subseg > subseg)) /* Kinky logic only works with 2 segments. */
- {
- /*
- * This should be the only code that creates a frchainS.
- */
- segment_info_type *seginfo;
+ /* This should be the only code that creates a frchainS. */
- newP = (frchainS *) obstack_alloc (&frchains, sizeof (frchainS));
+ newP = obstack_alloc (&frchains, sizeof (frchainS));
newP->frch_subseg = subseg;
- newP->frch_seg = seg;
newP->fix_root = NULL;
newP->fix_tail = NULL;
obstack_begin (&newP->frch_obstack, chunksize);
@@ -187,21 +113,15 @@ subseg_set_rest (segT seg, subsegT subseg)
#endif
newP->frch_frag_now = frag_alloc (&newP->frch_obstack);
newP->frch_frag_now->fr_type = rs_fill;
+ newP->frch_cfi_data = NULL;
newP->frch_root = newP->frch_last = newP->frch_frag_now;
*lastPP = newP;
- newP->frch_next = frcP; /* perhaps NULL */
-
- seginfo = seg_info (seg);
- if (seginfo && (!seginfo->frchainP || seginfo->frchainP == frcP))
- seginfo->frchainP = newP;
-
+ newP->frch_next = frcP;
frcP = newP;
}
- /*
- * Here with frcP pointing to the frchainS for subseg.
- */
+
frchain_now = frcP;
frag_now = frcP->frch_frag_now;
@@ -221,7 +141,6 @@ subseg_set_rest (segT seg, subsegT subseg)
* Out: now_subseg, now_seg updated.
* Frchain_now points to the (possibly new) struct frchain for this
* sub-segment.
- * Frchain_root updated if needed.
*/
segT
@@ -244,32 +163,13 @@ subseg_get (const char *segname, int force_new)
else
secptr = bfd_make_section_anyway (stdoutput, segname);
-#ifdef obj_sec_set_private_data
- obj_sec_set_private_data (stdoutput, secptr);
-#endif
-
seginfo = seg_info (secptr);
if (! seginfo)
{
- /* Check whether output_section is set first because secptr may
- be bfd_abs_section_ptr. */
- if (secptr->output_section != secptr)
- secptr->output_section = secptr;
- seginfo = (segment_info_type *) xmalloc (sizeof (*seginfo));
- memset ((PTR) seginfo, 0, sizeof (*seginfo));
- seginfo->fix_root = NULL;
- seginfo->fix_tail = NULL;
+ secptr->output_section = secptr;
+ seginfo = xcalloc (1, sizeof (*seginfo));
seginfo->bfd_section = secptr;
- if (secptr == bfd_abs_section_ptr)
- abs_seg_info = seginfo;
- else if (secptr == bfd_und_section_ptr)
- und_seg_info = seginfo;
- else
- bfd_set_section_userdata (stdoutput, secptr, (PTR) seginfo);
- seginfo->frchainP = NULL;
- seginfo->lineno_list_head = seginfo->lineno_list_tail = NULL;
- seginfo->sym = NULL;
- seginfo->dot = NULL;
+ bfd_set_section_userdata (stdoutput, secptr, seginfo);
}
return secptr;
}
@@ -278,13 +178,9 @@ segT
subseg_new (const char *segname, subsegT subseg)
{
segT secptr;
- segment_info_type *seginfo;
secptr = subseg_get (segname, 0);
subseg_set_rest (secptr, subseg);
- seginfo = seg_info (secptr);
- if (! seginfo->frchainP)
- seginfo->frchainP = frchain_now;
return secptr;
}
@@ -294,13 +190,9 @@ segT
subseg_force_new (const char *segname, subsegT subseg)
{
segT secptr;
- segment_info_type *seginfo;
secptr = subseg_get (segname, 1);
subseg_set_rest (secptr, subseg);
- seginfo = seg_info (secptr);
- if (! seginfo->frchainP)
- seginfo->frchainP = frchain_now;
return secptr;
}
@@ -316,19 +208,6 @@ subseg_set (segT secptr, subsegT subseg)
#define obj_sec_sym_ok_for_reloc(SEC) 0
#endif
-/* Get the gas information we are storing for a section. */
-
-segment_info_type *
-seg_info (segT sec)
-{
- if (sec == bfd_abs_section_ptr)
- return abs_seg_info;
- else if (sec == bfd_und_section_ptr)
- return und_seg_info;
- else
- return (segment_info_type *) bfd_get_section_userdata (stdoutput, sec);
-}
-
symbolS *
section_symbol (segT sec)
{
@@ -418,28 +297,33 @@ void
subsegs_print_statistics (FILE *file)
{
frchainS *frchp;
+ asection *s;
+
fprintf (file, "frag chains:\n");
- for (frchp = frchain_root; frchp; frchp = frchp->frch_next)
+ for (s = stdoutput->sections; s; s = s->next)
{
- int count = 0;
- fragS *fragp;
+ segment_info_type *seginfo;
- /* If frch_subseg is non-zero, it's probably been chained onto
- the end of a previous subsection. Don't count it again. */
- if (frchp->frch_subseg != 0)
+ /* Skip gas-internal sections. */
+ if (segment_name (s)[0] == '*')
continue;
- /* Skip gas-internal sections. */
- if (segment_name (frchp->frch_seg)[0] == '*')
+ seginfo = seg_info (s);
+ if (!seginfo)
continue;
- for (fragp = frchp->frch_root; fragp; fragp = fragp->fr_next)
+ for (frchp = seginfo->frchainP; frchp; frchp = frchp->frch_next)
{
- count++;
+ int count = 0;
+ fragS *fragp;
+
+ for (fragp = frchp->frch_root; fragp; fragp = fragp->fr_next)
+ count++;
+
+ fprintf (file, "\n");
+ fprintf (file, "\t%p %-10s\t%10d frags\n", (void *) frchp,
+ segment_name (s), count);
}
- fprintf (file, "\n");
- fprintf (file, "\t%p %-10s\t%10d frags\n", (void *) frchp,
- segment_name (frchp->frch_seg), count);
}
}
diff --git a/gas/subsegs.h b/gas/subsegs.h
index 23ab4f9cf48e..54a5a6ab2cc6 100644
--- a/gas/subsegs.h
+++ b/gas/subsegs.h
@@ -1,6 +1,6 @@
/* subsegs.h -> subsegs.c
- Copyright 1987, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2003, 2005
- Free Software Foundation, Inc.
+ Copyright 1987, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2003, 2005,
+ 2006 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -40,24 +40,23 @@
#include "obstack.h"
+struct frch_cfi_data;
+
struct frchain /* control building of a frag chain */
{ /* FRCH = FRagment CHain control */
struct frag *frch_root; /* 1st struct frag in chain, or NULL */
struct frag *frch_last; /* last struct frag in chain, or NULL */
struct frchain *frch_next; /* next in chain of struct frchain-s */
- segT frch_seg; /* SEG_TEXT or SEG_DATA. */
subsegT frch_subseg; /* subsegment number of this chain */
fixS *fix_root; /* Root of fixups for this subsegment. */
fixS *fix_tail; /* Last fixup for this subsegment. */
struct obstack frch_obstack; /* for objects in this frag chain */
fragS *frch_frag_now; /* frag_now for this subsegment */
+ struct frch_cfi_data *frch_cfi_data;
};
typedef struct frchain frchainS;
-/* All subsegments' chains hang off here. NULL means no frchains yet. */
-extern frchainS *frchain_root;
-
/* Frchain we are assembling into now. That is, the current segment's
frag chain, even if it contains no (complete) frags. */
extern frchainS *frchain_now;
@@ -109,7 +108,10 @@ typedef struct segment_info_struct {
#endif
} segment_info_type;
-extern segment_info_type *seg_info (segT);
+
+#define seg_info(sec) \
+ ((segment_info_type *) bfd_get_section_userdata (stdoutput, sec))
+
extern symbolS *section_symbol (segT);
extern void subsegs_print_statistics (FILE *);
diff --git a/gas/symbols.c b/gas/symbols.c
index 5935a7477ae0..816395ff22d9 100644
--- a/gas/symbols.c
+++ b/gas/symbols.c
@@ -1,6 +1,6 @@
/* symbols.c -symbol table-
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -144,8 +144,7 @@ symbol_create (const char *name, /* It is copied, the caller can destroy/modify.
symbolP->bsym = bfd_make_empty_symbol (stdoutput);
if (symbolP->bsym == NULL)
- as_perror ("%s", "bfd_make_empty_symbol");
- symbolP->bsym->udata.p = (PTR) symbolP;
+ as_fatal ("bfd_make_empty_symbol: %s", bfd_errmsg (bfd_get_error ()));
S_SET_NAME (symbolP, preserved_copy_of_name);
S_SET_SEGMENT (symbolP, segment);
@@ -336,10 +335,7 @@ colon (/* Just seen "x:" - rattle symbols & frags. */
|| S_IS_COMMON (symbolP)
|| S_IS_VOLATILE (symbolP))
{
- if (S_IS_VOLATILE (symbolP)
- /* This could be avoided when the symbol wasn't used so far, but
- the comment in struc-symbol.h says this flag isn't reliable. */
- && (1 || !symbol_used_p (symbolP)))
+ if (S_IS_VOLATILE (symbolP))
{
symbolP = symbol_clone (symbolP, 1);
S_SET_VALUE (symbolP, 0);
@@ -567,18 +563,15 @@ symbol_clone (symbolS *orgsymP, int replace)
orgsymP = local_symbol_convert ((struct local_symbol *) orgsymP);
bsymorg = orgsymP->bsym;
- know (S_IS_DEFINED (orgsymP));
-
newsymP = obstack_alloc (&notes, sizeof (*newsymP));
*newsymP = *orgsymP;
bsymnew = bfd_make_empty_symbol (bfd_asymbol_bfd (bsymorg));
if (bsymnew == NULL)
- as_perror ("%s", "bfd_make_empty_symbol");
+ as_fatal ("bfd_make_empty_symbol: %s", bfd_errmsg (bfd_get_error ()));
newsymP->bsym = bsymnew;
bsymnew->name = bsymorg->name;
bsymnew->flags = bsymorg->flags;
bsymnew->section = bsymorg->section;
- bsymnew->udata.p = (PTR) newsymP;
bfd_copy_private_symbol_data (bfd_asymbol_bfd (bsymorg), bsymorg,
bfd_asymbol_bfd (bsymnew), bsymnew);
@@ -603,11 +596,13 @@ symbol_clone (symbolS *orgsymP, int replace)
symbol_lastP = newsymP;
else if (orgsymP->sy_next)
orgsymP->sy_next->sy_previous = newsymP;
- orgsymP->sy_next = NULL;
+ orgsymP->sy_previous = orgsymP->sy_next = orgsymP;
debug_verify_symchain (symbol_rootP, symbol_lastP);
symbol_table_insert (newsymP);
}
+ else
+ newsymP->sy_previous = newsymP->sy_next = newsymP;
return newsymP;
}
@@ -884,6 +879,69 @@ verify_symbol_chain (symbolS *rootP, symbolS *lastP)
assert (lastP == symbolP);
}
+#ifdef OBJ_COMPLEX_RELC
+
+static int
+use_complex_relocs_for (symbolS * symp)
+{
+ switch (symp->sy_value.X_op)
+ {
+ case O_constant:
+ return 0;
+
+ case O_symbol:
+ case O_symbol_rva:
+ case O_uminus:
+ case O_bit_not:
+ case O_logical_not:
+ if ( (S_IS_COMMON (symp->sy_value.X_add_symbol)
+ || S_IS_LOCAL (symp->sy_value.X_add_symbol))
+ &&
+ (S_IS_DEFINED (symp->sy_value.X_add_symbol)
+ && S_GET_SEGMENT (symp->sy_value.X_add_symbol) != expr_section))
+ return 0;
+ break;
+
+ case O_multiply:
+ case O_divide:
+ case O_modulus:
+ case O_left_shift:
+ case O_right_shift:
+ case O_bit_inclusive_or:
+ case O_bit_or_not:
+ case O_bit_exclusive_or:
+ case O_bit_and:
+ case O_add:
+ case O_subtract:
+ case O_eq:
+ case O_ne:
+ case O_lt:
+ case O_le:
+ case O_ge:
+ case O_gt:
+ case O_logical_and:
+ case O_logical_or:
+
+ if ( (S_IS_COMMON (symp->sy_value.X_add_symbol)
+ || S_IS_LOCAL (symp->sy_value.X_add_symbol))
+ &&
+ (S_IS_COMMON (symp->sy_value.X_op_symbol)
+ || S_IS_LOCAL (symp->sy_value.X_op_symbol))
+
+ && S_IS_DEFINED (symp->sy_value.X_add_symbol)
+ && S_IS_DEFINED (symp->sy_value.X_op_symbol)
+ && S_GET_SEGMENT (symp->sy_value.X_add_symbol) != expr_section
+ && S_GET_SEGMENT (symp->sy_value.X_op_symbol) != expr_section)
+ return 0;
+ break;
+
+ default:
+ break;
+ }
+ return 1;
+}
+#endif
+
static void
report_op_error (symbolS *symp, symbolS *left, symbolS *right)
{
@@ -986,6 +1044,53 @@ resolve_symbol_value (symbolS *symp)
final_val = 0;
resolved = 1;
}
+#ifdef OBJ_COMPLEX_RELC
+ else if (final_seg == expr_section
+ && use_complex_relocs_for (symp))
+ {
+ symbolS * relc_symbol = NULL;
+ char * relc_symbol_name = NULL;
+
+ relc_symbol_name = symbol_relc_make_expr (& symp->sy_value);
+
+ /* For debugging, print out conversion input & output. */
+#ifdef DEBUG_SYMS
+ print_expr (& symp->sy_value);
+ if (relc_symbol_name)
+ fprintf (stderr, "-> relc symbol: %s\n", relc_symbol_name);
+#endif
+
+ if (relc_symbol_name != NULL)
+ relc_symbol = symbol_new (relc_symbol_name, undefined_section,
+ 0, & zero_address_frag);
+
+ if (relc_symbol == NULL)
+ {
+ as_bad (_("cannot convert expression symbol %s to complex relocation"),
+ S_GET_NAME (symp));
+ resolved = 0;
+ }
+ else
+ {
+ symbol_table_insert (relc_symbol);
+
+ /* S_CLEAR_EXTERNAL (relc_symbol); */
+ if (symp->bsym->flags & BSF_SRELC)
+ relc_symbol->bsym->flags |= BSF_SRELC;
+ else
+ relc_symbol->bsym->flags |= BSF_RELC;
+ /* symp->bsym->flags |= BSF_RELC; */
+ copy_symbol_attributes (symp, relc_symbol);
+ symp->sy_value.X_op = O_symbol;
+ symp->sy_value.X_add_symbol = relc_symbol;
+ symp->sy_value.X_add_number = 0;
+ resolved = 1;
+ }
+
+ final_seg = undefined_section;
+ goto exit_dont_set_value;
+ }
+#endif
else
{
symbolS *add_symbol, *op_symbol;
@@ -1016,6 +1121,9 @@ resolve_symbol_value (symbolS *symp)
final_val += symp->sy_frag->fr_address / OCTETS_PER_BYTE;
if (final_seg == expr_section)
final_seg = absolute_section;
+ /* Fall through. */
+
+ case O_register:
resolved = 1;
break;
@@ -1083,8 +1191,9 @@ resolve_symbol_value (symbolS *symp)
symp->sy_resolving = 0;
goto exit_dont_set_value;
}
- else if (finalize_syms && final_seg == expr_section
- && seg_left != expr_section)
+ else if (finalize_syms
+ && ((final_seg == expr_section && seg_left != expr_section)
+ || symbol_shadow_p (symp)))
{
/* If the symbol is an expression symbol, do similarly
as for undefined and common syms above. Handles
@@ -1292,7 +1401,6 @@ resolve_symbol_value (symbolS *symp)
&& symbol_resolved_p (op_symbol));
break;
- case O_register:
case O_big:
case O_illegal:
/* Give an error (below) if not in expr_section. We don't
@@ -1839,6 +1947,10 @@ copy_symbol_attributes (symbolS *dest, symbolS *src)
#ifdef OBJ_COPY_SYMBOL_ATTRIBUTES
OBJ_COPY_SYMBOL_ATTRIBUTES (dest, src);
#endif
+
+#ifdef TC_COPY_SYMBOL_ATTRIBUTES
+ TC_COPY_SYMBOL_ATTRIBUTES (dest, src);
+#endif
}
int
@@ -2497,6 +2609,17 @@ symbol_constant_p (symbolS *s)
return s->sy_value.X_op == O_constant;
}
+/* Return whether a symbol was cloned and thus removed from the global
+ symbol list. */
+
+int
+symbol_shadow_p (symbolS *s)
+{
+ if (LOCAL_SYMBOL_CHECK (s))
+ return 0;
+ return s->sy_next == s;
+}
+
/* Return the BFD symbol for a symbol. */
asymbol *
@@ -2818,3 +2941,219 @@ symbol_print_statistics (FILE *file)
fprintf (file, "%lu mini local symbols created, %lu converted\n",
local_symbol_count, local_symbol_conversion_count);
}
+
+#ifdef OBJ_COMPLEX_RELC
+
+/* Convert given symbol to a new complex-relocation symbol name. This
+ may be a recursive function, since it might be called for non-leaf
+ nodes (plain symbols) in the expression tree. The caller owns the
+ returning string, so should free it eventually. Errors are
+ indicated via as_bad and a NULL return value. The given symbol
+ is marked with sy_used_in_reloc. */
+
+char *
+symbol_relc_make_sym (symbolS * sym)
+{
+ char * terminal = NULL;
+ const char * sname;
+ char typetag;
+ int sname_len;
+
+ assert (sym != NULL);
+
+ /* Recurse to symbol_relc_make_expr if this symbol
+ is defined as an expression or a plain value. */
+ if ( S_GET_SEGMENT (sym) == expr_section
+ || S_GET_SEGMENT (sym) == absolute_section)
+ return symbol_relc_make_expr (& sym->sy_value);
+
+ /* This may be a "fake symbol" L0\001, referring to ".".
+ Write out a special null symbol to refer to this position. */
+ if (! strcmp (S_GET_NAME (sym), FAKE_LABEL_NAME))
+ return xstrdup (".");
+
+ /* We hope this is a plain leaf symbol. Construct the encoding
+ as {S,s}II...:CCCCCCC....
+ where 'S'/'s' means section symbol / plain symbol
+ III is decimal for the symbol name length
+ CCC is the symbol name itself. */
+ symbol_mark_used_in_reloc (sym);
+
+ sname = S_GET_NAME (sym);
+ sname_len = strlen (sname);
+ typetag = symbol_section_p (sym) ? 'S' : 's';
+
+ terminal = xmalloc (1 /* S or s */
+ + 8 /* sname_len in decimal */
+ + 1 /* _ spacer */
+ + sname_len /* name itself */
+ + 1 /* \0 */ );
+
+ sprintf (terminal, "%c%d:%s", typetag, sname_len, sname);
+ return terminal;
+}
+
+/* Convert given value to a new complex-relocation symbol name. This
+ is a non-recursive function, since it is be called for leaf nodes
+ (plain values) in the expression tree. The caller owns the
+ returning string, so should free() it eventually. No errors. */
+
+char *
+symbol_relc_make_value (offsetT val)
+{
+ char * terminal = xmalloc (28); /* Enough for long long. */
+
+ terminal[0] = '#';
+ sprintf_vma (& terminal[1], val);
+ return terminal;
+}
+
+/* Convert given expression to a new complex-relocation symbol name.
+ This is a recursive function, since it traverses the entire given
+ expression tree. The caller owns the returning string, so should
+ free() it eventually. Errors are indicated via as_bad() and a NULL
+ return value. */
+
+char *
+symbol_relc_make_expr (expressionS * exp)
+{
+ char * opstr = NULL; /* Operator prefix string. */
+ int arity = 0; /* Arity of this operator. */
+ char * operands[3]; /* Up to three operands. */
+ char * concat_string = NULL;
+
+ operands[0] = operands[1] = operands[2] = NULL;
+
+ assert (exp != NULL);
+
+ /* Match known operators -> fill in opstr, arity, operands[] and fall
+ through to construct subexpression fragments; may instead return
+ string directly for leaf nodes. */
+
+ /* See expr.h for the meaning of all these enums. Many operators
+ have an unnatural arity (X_add_number implicitly added). The
+ conversion logic expands them to explicit "+" subexpressions. */
+
+ switch (exp->X_op)
+ {
+ default:
+ as_bad ("Unknown expression operator (enum %d)", exp->X_op);
+ break;
+
+ /* Leaf nodes. */
+ case O_constant:
+ return symbol_relc_make_value (exp->X_add_number);
+
+ case O_symbol:
+ if (exp->X_add_number)
+ {
+ arity = 2;
+ opstr = "+";
+ operands[0] = symbol_relc_make_sym (exp->X_add_symbol);
+ operands[1] = symbol_relc_make_value (exp->X_add_number);
+ break;
+ }
+ else
+ return symbol_relc_make_sym (exp->X_add_symbol);
+
+ /* Helper macros for nesting nodes. */
+
+#define HANDLE_XADD_OPT1(str_) \
+ if (exp->X_add_number) \
+ { \
+ arity = 2; \
+ opstr = "+:" str_; \
+ operands[0] = symbol_relc_make_sym (exp->X_add_symbol); \
+ operands[1] = symbol_relc_make_value (exp->X_add_number); \
+ break; \
+ } \
+ else \
+ { \
+ arity = 1; \
+ opstr = str_; \
+ operands[0] = symbol_relc_make_sym (exp->X_add_symbol); \
+ } \
+ break
+
+#define HANDLE_XADD_OPT2(str_) \
+ if (exp->X_add_number) \
+ { \
+ arity = 3; \
+ opstr = "+:" str_; \
+ operands[0] = symbol_relc_make_sym (exp->X_add_symbol); \
+ operands[1] = symbol_relc_make_sym (exp->X_op_symbol); \
+ operands[2] = symbol_relc_make_value (exp->X_add_number); \
+ } \
+ else \
+ { \
+ arity = 2; \
+ opstr = str_; \
+ operands[0] = symbol_relc_make_sym (exp->X_add_symbol); \
+ operands[1] = symbol_relc_make_sym (exp->X_op_symbol); \
+ } \
+ break
+
+ /* Nesting nodes. */
+
+ case O_uminus: HANDLE_XADD_OPT1 ("0-");
+ case O_bit_not: HANDLE_XADD_OPT1 ("~");
+ case O_logical_not: HANDLE_XADD_OPT1 ("!");
+ case O_multiply: HANDLE_XADD_OPT2 ("*");
+ case O_divide: HANDLE_XADD_OPT2 ("/");
+ case O_modulus: HANDLE_XADD_OPT2 ("%");
+ case O_left_shift: HANDLE_XADD_OPT2 ("<<");
+ case O_right_shift: HANDLE_XADD_OPT2 (">>");
+ case O_bit_inclusive_or: HANDLE_XADD_OPT2 ("|");
+ case O_bit_exclusive_or: HANDLE_XADD_OPT2 ("^");
+ case O_bit_and: HANDLE_XADD_OPT2 ("&");
+ case O_add: HANDLE_XADD_OPT2 ("+");
+ case O_subtract: HANDLE_XADD_OPT2 ("-");
+ case O_eq: HANDLE_XADD_OPT2 ("==");
+ case O_ne: HANDLE_XADD_OPT2 ("!=");
+ case O_lt: HANDLE_XADD_OPT2 ("<");
+ case O_le: HANDLE_XADD_OPT2 ("<=");
+ case O_ge: HANDLE_XADD_OPT2 (">=");
+ case O_gt: HANDLE_XADD_OPT2 (">");
+ case O_logical_and: HANDLE_XADD_OPT2 ("&&");
+ case O_logical_or: HANDLE_XADD_OPT2 ("||");
+ }
+
+ /* Validate & reject early. */
+ if (arity >= 1 && ((operands[0] == NULL) || (strlen (operands[0]) == 0)))
+ opstr = NULL;
+ if (arity >= 2 && ((operands[1] == NULL) || (strlen (operands[1]) == 0)))
+ opstr = NULL;
+ if (arity >= 3 && ((operands[2] == NULL) || (strlen (operands[2]) == 0)))
+ opstr = NULL;
+
+ if (opstr == NULL)
+ concat_string = NULL;
+ else
+ {
+ /* Allocate new string; include inter-operand padding gaps etc. */
+ concat_string = xmalloc (strlen (opstr)
+ + 1
+ + (arity >= 1 ? (strlen (operands[0]) + 1 ) : 0)
+ + (arity >= 2 ? (strlen (operands[1]) + 1 ) : 0)
+ + (arity >= 3 ? (strlen (operands[2]) + 0 ) : 0)
+ + 1);
+ assert (concat_string != NULL);
+
+ /* Format the thing. */
+ sprintf (concat_string,
+ (arity == 0 ? "%s" :
+ arity == 1 ? "%s:%s" :
+ arity == 2 ? "%s:%s:%s" :
+ /* arity == 3 */ "%s:%s:%s:%s"),
+ opstr, operands[0], operands[1], operands[2]);
+ }
+
+ /* Free operand strings (not opstr). */
+ if (arity >= 1) xfree (operands[0]);
+ if (arity >= 2) xfree (operands[1]);
+ if (arity >= 3) xfree (operands[2]);
+
+ return concat_string;
+}
+
+#endif
diff --git a/gas/symbols.h b/gas/symbols.h
index 7a4b8f7a6da3..483f8ee089bf 100644
--- a/gas/symbols.h
+++ b/gas/symbols.h
@@ -35,6 +35,9 @@ extern int symbol_table_frozen;
default. */
extern int symbols_case_sensitive;
+char * symbol_relc_make_expr (expressionS *);
+char * symbol_relc_make_sym (symbolS *);
+char * symbol_relc_make_value (offsetT);
char *decode_local_label_name (char *s);
symbolS *symbol_find (const char *name);
symbolS *symbol_find_noref (const char *name, int noref);
@@ -192,6 +195,7 @@ extern int symbol_section_p (symbolS *);
extern int symbol_equated_p (symbolS *);
extern int symbol_equated_reloc_p (symbolS *);
extern int symbol_constant_p (symbolS *);
+extern int symbol_shadow_p (symbolS *);
extern asymbol *symbol_get_bfdsym (symbolS *);
extern void symbol_set_bfdsym (symbolS *, asymbol *);
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 6637ab929508..f6e6691dc53e 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,348 +1,633 @@
-2006-06-14 Thiemo Seufer <ths@mips.com>
+2007-07-03 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gas/m68k/mcf-coproc.d: New.
+ * gas/m68k/mcf-coproc.s: New.
+ * gas/m68k/all.exp: Add it.
+
+2007-06-29 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
+
+ * gas/cr16: New directory
+ * gas/cr16.exp: New file
+ * add_test.d and add_test.s: New files
+ * and_test.d and and_test.s: New files
+ * ash_test.d and ash_test.s: New files
+ * bal_test.d and bal_test.s: New files
+ * bcc_test.d and bcc_test.s: New files
+ * beq0_test.d and beq0_test.s: New files
+ * cbitb_test.d and cbitb_test.s: New files
+ * cbitw_test.d and cbitw_test.s: New files
+ * cinv_test.d and cinv_test.s: New files
+ * cmp_test.d and cmp_test.s: New files
+ * excp_test.d and excp_test.s: New files
+ * jal_test.d and jal_test.s: New files
+ * jcc_test.d and jcc_test.s: New files
+ * loadb_test.d and loadb_test.s: New files
+ * loadd_test.d and loadd_test.s: New files
+ * loadm_test.d and loadm_test.s: New files
+ * loadw_test.d and loadw_test.s: New files
+ * lpsp_test.d and lpsp_test.s: New files
+ * lsh_test.d and lsh_test.s: New files
+ * mov_test.d and mov_test.s: New files
+ * mul_test.d and mul_test.s: New files
+ * or_test.d and or_test.s: New files
+ * popret_test.d and popret_test.s: New files
+ * pop_test.d and pop_test.s: New files
+ * push_test.d and push_test.s: New files
+ * sbitb_test.d and sbitb_test.s: New files
+ * sbitw_test.d and sbitw_test.s: New files
+ * scc_test.d and scc_test.s: New files
+ * storb_test.d and storb_test.s: New files
+ * stord_test.d and stord_test.s: New files
+ * storm_test.d and storm_test.s: New files
+ * storw_test.d and storw_test.s: New files
+ * sub_test.d and sub_test.s: New files
+ * tbitb_test.d and tbitb_test.s: New files
+ * tbit_test.d and tbit_test.s: New files
+ * tbitw_test.d and tbitw_test.s: New files
+ * xor_test.d and xor_test.s: New files
+
+2007-06-26 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/vfp1xD.d: Add new fmrx/fmxr tests.
+ * gas/arm/vfp1xD.s: Ditto.
+ * gas/arm/vfp1xD_t2.d: Ditto.
+ * gas/arm/vfp1xD_t2.s: Ditto.
+
+2007-06-24 Nick Clifton <nickc@redhat.com>
+
+ * gas/arm/backslash-at.d: Fix for non-ELF arm targets.
+
+2007-06-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/4667
+ * gas/i386/i386.exp: Run simd, simd-intel, x86-64-simd
+ and x86-64-simd-intel.
+
+ * gas/i386/opcode-intel.d: Updated.
+
+ * gas/i386/simd-intel.d: New.
+ * gas/i386/simd.d: Likewise.
+ * gas/i386/simd.s: Likewise.
+ * gas/i386/x86-64-simd-intel.d: Likewise.
+ * gas/i386/x86-64-simd.d: Likewise.
+ * gas/i386/x86-64-simd.s: Likewise.
+
+2007-06-18 Kazu Hirata <kazu@codesourcery.com>
+
+ * gas/m68k/all.exp: Run mcf-wdebug.
+ * gas/testsuite/gas/m68k/mcf-wdebug.d,
+ gas/testsuite/gas/m68k/mcf-wdebug.s: New.
+
+2007-06-14 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb32.s: Add tests for shift instructions.
+ * gas/arm/thumb32.d: Ditto.
+
+2007-06-06 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb.d: Update expected output.
+ * gas/arm/thumb2_relax.d: Ditto.
+
+2007-06-05 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb32.d: Add writeback addressing mode tests.
+ * gas/arm/thumb32.s: Update expected output.
+
+2007-06-05 Nick Clifton <nickc@redhat.com>
+
+ PR gas/4587
+ * gas/sparc/sparc.exp: Run pr4587 list test.
+ * gas/sparc/pr4587.s: New test case.
+ * gas/sparc/pr4587.l: Expected assembler output.
+
+2007-06-05 Nick Clifton <nickc@redhat.com>
+
+ * lib/gas-defs.exp (run_list_test): New proc.
+ * gas/alpha/alpha.exp: Delete proc run_list_test.
+ * gas/bfin/bfin.exp : Likewise.
+ * gas/cfi/cfi.exp : Likewise.
+ * gas/crx/allinsn.exp : Likewise.
+ * gas/d10v/d10v.exp : Likewise.
+ * gas/d30v/d30v.exp : Likewise.
+ * gas/frv/allinsn.exp : Likewise.
+ * gas/i386/i386.exp : Likewise.
+ * gas/i860.i860.exp : Likewise.
+ * gas/ia64/ia64.exp : Likewise.
+ * gas/lns/lns.exp : Likewise.
+ * gas/macros/macros.exp : Likewise.
+ * gas/maxq10/maxq10.exp : Likewise.
+ * gas/maxq20/maxq20.exp : Likewise.
+ * gas/mips/mips.exp : Likewise.
+ * gas/mmix/mmix-list.exp : Likewise.
+ * gas/mn10300/basic.exp : Likewise.
+ * gas/msp430/msp430.exp : Likewise.
+ * gas/pdp11/pdp11.exp : Likewise.
+ * gas/ppc/ppc.exp : Likewise.
+ * gas/s390/s390.exp : Likewise.
+ * gas/elf/elf.exp (proc run_list_test): Rename to run_elf_list_test.
+
+2007-05-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR gas/4558
+ * gas/sparc/sparc.exp: Add v9branch{1,2,3,4,5} tests.
+ * gas/sparc/v9branch1.d: New test.
+ * gas/sparc/v9branch1.s: New.
+ * gas/sparc/v9branch2.d: New test.
+ * gas/sparc/v9branch2.s: New.
+ * gas/sparc/v9branch3.d: New test.
+ * gas/sparc/v9branch3.s: New.
+ * gas/sparc/v9branch4.d: New test.
+ * gas/sparc/v9branch4.s: New.
+ * gas/sparc/v9branch5.d: New test.
+ * gas/sparc/v9branch5.s: New.
+
+2007-03-25 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb32.s: Add tests for subs pc, lr.
+ * gas/arm/thumb32.d: Change error-output: to stderr:.
+ Update expected output.
+
+2007-05-22 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/backslash-at.d: Update expected output.
+
+2007-05-17 H.J. Lu <hongjiu.lu@intel.com>
- * gas/mips/mips16e-jrc.d, gas/mips/mips16e-save.d,
- gas/mips/mips32-dsp.d, gas/mips/mips32-mt.d: Explicitly specify
- o32 ABI.
+ 2003-06-05 Michal Ludvig <mludvig@suse.cz>
+ * gas/cfi/cfi-x86_64.s: Test new directives
+ and different writings of registers and numbers.
+ * gas/cfi/cfi-x86_64.d: Updated pattern to
+ match the above change.
+
+2007-05-15 Mark Shinwell <shinwell@codesourcery.com>
+
+ * gas/arm/backslash-at.d: New.
+ * gas/arm/backslash-at.s: New.
+
+2007-05-15 Vincent Riviere <vincent.riviere@freesbee.fr>
+ Nick Clifton <nickc@redhat.com>
+
+ PR gas/3041
+ * gas/m68k/p3041.s: New test case.
+ * gas/m68k/p3041.d: New expected disassembly.
+ * gas/m68k/all.exp: Run new test for m68k-*-netbsd toolchains.
+ Only run arch-cpu-1 test for ELF based toolchains.
+
+ Tidy ups for m68k-netbsd gas toolchain:
+ * gas/m68k/cpu32.d: Allow for extra text after expected
+ disassembly.
+ * gas/m68k/mcf-trap.d: Allow for alternative trap mnemonics.
+ * gas/m68k/br-isab.d: Fix name of test.
+ * gas/m68k/br-isac.d: Fix name of test.
+
+2007-05-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/4502
+ * gas/i386/amd.d: Replace "pfmulhrw" with "pmulhrw".
+
+2007-05-04 Kazu Hirata <kazu@codesourcery.com>
+
+ * gas/m68k/all.exp: Skip fmoveml on fido.
+
+2007-05-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/4460
+ * gas/i386/gotpc.s: Add a new test.
+ * gas/i386/reloc64.s: Likewise.
+
+ * gas/i386/gotpc.d: Updated.
+ * gas/i386/reloc64.d: Likewise.
+
+2007-05-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/crc32-intel.d: Updated.
+ * gas/i386/crc32.d: Likewise.
+ * gas/i386/sse4_2.d: Likewise.
+ * gas/i386/x86-64-crc32-intel.d: Likewise.
+ * gas/i386/x86-64-crc32.d: Likewise.
+ * gas/i386/x86-64-sse4_2.d: Likewise.
+
+ * gas/i386/crc32.s: Remove crc32 instructions with ambiguous
+ operand size and suffix in crc32 instructions in Intel mode.
+ * gas/i386/x86-64-crc32.s: Likewise.
+
+ * gas/i386/sse4_2.s: Remove crc32 instructions with ambiguous
+ operand size.
+ * gas/i386/x86-64-sse4_2.s: Likewise.
+
+ * gas/i386/i386.exp: Run inval-crc32 and x86-64-inval-crc32.
+
+ * gas/i386/inval-crc32.l: New.
+ * gas/i386/inval-crc32.s: Likewise.
+ * gas/i386/x86-64-inval-crc32.l: Likewise.
+ * gas/i386/x86-64-inval-crc32.s: Likewise.
+
+2007-05-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/crc32-intel.d: New file.
+ * gas/i386/crc32.d:Likewise.
+ * gas/i386/crc32.s:Likewise.
+ * gas/i386/x86-64-crc32-intel.d:Likewise.
+ * gas/i386/x86-64-crc32.d:Likewise.
+ * gas/i386/x86-64-crc32.s:Likewise.
+
+ * gas/i386/i386.exp: Run crc32, crc32-intel, x86-64-crc32
+ and x86-64-crc32-intel.
+
+2007-04-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/4430
+ * gas/i386/amd.d: Updated.
+ * gas/i386/immed32.d: Likewise.
+ * gas/i386/intel.d: Likewise.
+ * gas/i386/intel16.d: Likewise.
+ * gas/i386/intelok.d: Likewise.
+ * gas/i386/jump16.d: Likewise.
+ * gas/i386/naked.d: Likewise.
+ * gas/i386/opcode-suffix.d: Likewise.
+ * gas/i386/opcode.d: Likewise.
+ * gas/i386/prescott.d: Likewise.
+ * gas/i386/ssemmx2.d: Likewise.
+ * gas/i386/tlsd.d: Likewise.
+ * gas/i386/tlspic.d: Likewise.
+ * gas/i386/x86-64-addr32.d: Likewise.
+ * gas/i386/x86-64-prescott.d: Likewise.
+ * gas/i386/x86-64-rip.d: Likewise.
+ * gas/i386/x86_64.d: Likewise.
-2006-05-26 Richard Sandiford <richard@codesourcery.com>
+2007-04-26 H.J. Lu <hongjiu.lu@intel.com>
- * gas/m68k/mcf-fpu.s: Add fmovemd and fmovem instructions.
- * gas/m68k/mcf-fpu.d: Adjust accordingly.
+ PR binutils/4429
+ * gas/i386/i386.exp: Run "x86-64-addr32-intel" and
+ "x86-64-rip-intel".
-2006-05-22 Nick Clifton <nickc@redhat.com>
+ * gas/i386/intelok.d: Updated.
- * gas/mips/mips32-dsp.l: Fix expected unsigned decoding of -1 in
- warning messages.
- * gas/mips/mips32-mt.l: Likewise.
+ * gas/i386/x86-64-addr32-intel.d: New file.
+ * gas/i386/x86-64-rip-intel.d: Likewise.
-2006-05-19 Thiemo Seufer <ths@mips.com>
+2007-04-24 Andreas Krebbel <krebbel1@de.ibm.com>
- * gas/mips/vxworks1-el.d, gas/mips/vxworks1-xgot-el.d: Add little
- endian testcases.
- * gas/mips/vxworks1.d, gas/mips/vxworks1-xgot.d: Build as big endian.
- * gas/mips/mips.exp: Run new testcases.
+ * gas/s390/zarch-z9-ec.d: Add pfpo, ectg and csst.
+ * gas/s390/zarch-z9-ec.s: Likewise.
-2006-05-11 Thiemo Seufer <ths@mips.com>
+2007-04-23 Nathan Sidwell <nathan@codesourcery.com>
- * gas/mips/jal-range.l: Don't check the range of j or jal
- addresses.
+ * gas/m68k/br-isaa.s: New.
+ * gas/m68k/br-isaa.d: New.
+ * gas/m68k/br-isab.s: New.
+ * gas/m68k/br-isab.d: New.
+ * gas/m68k/br-isac.s: New.
+ * gas/m68k/br-isac.d: New.
+ * gas/m68k/all.exp: Adjust.
-2006-05-04 Thiemo Seufer <ths@mips.com>
+2007-04-21 Richard Earnshaw <rearnsha@arm.com>
- * gas/mips/mips32-mt.d: Fix mftr argument order.
+ * gas/arm/arch4t.d: Convert to unified syntax.
+ * gas/arm/archv6.d: Likewise.
+ * gas/arm/archv6t2.d: Likewise.
+ * gas/arm/arch3.d: Likewise.
+ * gas/arm/arch7dm.d: Likewise.
+ * gas/arm/arch7t.d: Likewise.
+ * gas/arm/archv1.d: Likewise.
+ * gas/arm/copro.d: Likewise.
+ * gas/arm/inst.d: Likewise.
+ * gas/arm/macro1.d: Likewise.
+ * gas/arm/tcompat.d: Likewise.
+ * gas/arm/wince_inst.d: Likewise.
+ * gas/arm/xscale.d: Likewise.
-2006-05-02 Joseph Myers <joseph@codesourcery.com>
+ * gas/arm/thumb.d: White space cleanup.
+ * gas/arm/thumb2_relax.d: Likewise.
+ * gas/arm/thumb32.d: Likewise.
+
+2007-04-20 Nathan Sidwell <nathan@codesourcery.com>
- * gas/arm/iwmmxt.s: Increase offsets for wstrb and wstrh.
- * gas/arm/iwmmxt.d: Update expected results.
- * gas/arm/iwmmxt-bad2.s: Test wstrb, wstrh, wldrb and wldrh.
- * gas/arm/iwmmxt-bad2.l: Update expected error messages.
+ * gas/m68k/ctrl-1.d, gas/m68k/ctrl-1.s: New.
+ * gas/m68k/ctrl-2.d, gas/m68k/ctrl-2.s: New.
+ * gas/m68k/all.exp: Add them.
-2006-04-16 Nick Clifton <nickc@redhat.com>
+2007-04-20 Alan Modra <amodra@bigpond.net.au>
- * gas/arm/arch7.d: Skip test for non-ELF targets.
- * gas/arm/blx-local.d: Likewise.
- * gas/arm/svc.d: Likewise.
- * gas/arm/thumb2_bcond.d: Likewise.
- * gas/arm/thumb2_it_bad.d: Likewise.
+ * gas/ppc/range64.s: New.
+ * gas/ppc/range64.l: New.
+ * gas/ppc/range.s: New.
+ * gas/ppc/range.l: New.
+ * gas/ppc/ppc.exp (run_list_test): New. Use to run new tests.
-2006-04-07 Paul Brook <paul@codesourcery.com>
+2007-04-20 Richard Earnshaw <rearnsha@arm.com>
- * gas/arm/blx-local.d: New test.
- * gas/arm/blx-local.d: New test.
+ * gas/arm/mapshort.s: Add a small .data section.
+ * gas/arm/mapshort-eabi.d: Check the data section doesn't confuse
+ disassembly.
+ * gas/arm/mapshort-elf.d: Likewise.
-2006-04-07 Paul Brook <paul@codesourcery.com>
+2007-04-19 Paul Brook <paul@codesourcery.com>
- * gas/arm/thumb2_pool.d: New test.
- * gas/arm/thumb2_pool.s: New test.
+ * gas/arm/thumb1_unified.d: New test.
+ * gas/arm/thumb1_unified.s: New test.
-2006-04-05 Richard Sandiford <richard@codesourcery.com>
+2007-04-19 Nathan Froyd <froydnj@codesourcery.com>
- * gas/sparc/vxworks-pic.s, gas/sparc/vxworks-pic.d: New test.
- * gas/sparc/sparc.exp: Run it. Remove sparc*-*-vxworks* XFAILs.
+ * gas/ppc/booke.s: Add tlbsx, tlbsxe.
+ * gas/ppc/booke.d: Update.
-2006-03-23 H.J. Lu <hongjiu.lu@intel.com>
+2007-04-18 H.J. Lu <hongjiu.lu@intel.com>
- * gas/i386/rep.s: Pad with .p2align.
- * gas/i386/rep.d: Adjust.
+ * gas/i386/i386.exp: Add sse4.2 and x86-64-sse4.2.
-2006-03-22 Richard Sandiford <richard@codesourcery.com>
+ * gas/i386/sse4_2.d: New file.
+ * gas/i386/sse4_2.s: Likewise.
+ * gas/i386/x86-64-sse4_2.d: Likewise.
+ * gas/i386/x86-64-sse4_2.s: Likewise.
- * gas/mips/vxworks1.s, gas/mips/vxworks1.d,
- * gas/mips/vxworks1-xgot.d: New tests.
- * gas/mips/mips.exp: Run them. Do not run other tests on VxWorks.
-
-2006-03-21 Paul Brook <paul@codesourcery.com>
+2007-04-18 H.J. Lu <hongjiu.lu@intel.com>
- * gas/arm/thumb32.d: Correct expected output.
+ * gas/i386/i386.exp: Add sse4.1 and x86-64-sse4.1.
-2006-03-20 Paul Brook <paul@codesourcery.com>
+ * gas/i386/sse4_1.d: New file.
+ * gas/i386/sse4_1.s: Likewise.
+ * gas/i386/x86-64-sse4_1.d: Likewise.
+ * gas/i386/x86-64-sse4_1.s: Likewise.
- * gas/arm/thumb2_bcond.d: New test.
- * gas/arm/thumb2_bcond.s: New test.
- * gas/arm/thumb2_it_bad.d: New test.
- * gas/arm/thumb2_it_bad.l: New test.
- * gas/arm/thumb2_it_bad.s: New test.
+2007-04-18 Paul Brook <paul@codesourcery.com>
-2006-03-17 Paul Brook <paul@codesourcery.com>
+ * gas/arm/thumb2_add.s: Add rsb #0 test.
+ * gas/arm/thumb2_add.d: Update expected output.
- * gas/arm/thumb32.d: Add ldm and stm tests.
- * gas/arm/thumb32.s: Ditto.
+2007-04-04 Paul Brook <paul@codesourcery.com>
-2006-03-16 Bernd Schmidt <bernd.schmidt@analog.com>
+ * gas/arm/neon-cov.s: Add new vext test.
+ * gas/arm/neon-cov.d: Ditto.
- * gas/bfin/shift2.s: Add new tests.
- * gas/bfin/shift.d: Match changed disassembler behaviour.
- * gas/bfin/parallel2.d: Likewise.
- * gas/bfin/shift2.d: Likewise; also match new tests.
+2007-04-01 Christian Groessler <chris@groessler.org>
-2006-03-16 Paul Brook <paul@codesourcery.com>
+ * gas/z8k/calr.d: Fix for 64bit bfd.
+ * gas/z8k/djnz.d: Likewise.
+ * gas/z8k/inout.d: Likewise.
+ * gas/z8k/jmp-cc.d: Likewise.
+ * gas/z8k/jr-back.d: Likewise.
+ * gas/z8k/jr-forw.d: Likewise.
+ * gas/z8k/reglabel.d: Likewise.
+ * gas/z8k/ctrl-names.d: Fix name. Fix for 64bit bfd.
+ * gas/z8k/ret-cc.d: Likewise.
- * gas/arm/svc.d: New test.
- * gas/arm/svc.s: New test.
- * gas/arm/inst.d: Accept svc mnemonic.
- * gas/arm/thumb.d: Ditto.
- * gas/arm/wince_inst.d: Ditto.
+2007-03-31 Alan Modra <amodra@bigpond.net.au>
-2006-03-09 Paul Brook <paul@codesourcery.com>
+ * gas/i386/nops-3.s: Don't use .align.
- * gas/arm/nomapping.d: New test.
- * gas/arm/nomapping.s: New test.
+2007-03-30 Paul Brook <paul@codesourcery.com>
-2006-03-07 H.J. Lu <hongjiu.lu@intel.com>
+ * gas/arm/thumb2_ldmstm.d: New test.
+ * gas/arm/thumb2_ldmstm.s: New test.
- PR binutils/2428
- * gas/i386/i386.exp: Add rep, rep-suffix, x86-64-rep and
- x86-64-rep-suffix.
+2007-03-27 Alan Modra <amodra@bigpond.net.au>
- * gas/i386/naked.d: Replace repz with rep.
- * gas/i386/x86_64.d: Likewise.
+ * gas/ppc/reloc.s: New.
+ * gas/ppc/reloc.d: New.
- * gas/i386/rep-suffix.d: New file.
- * gas/i386/rep-suffix.s: Likewise.
- * gas/i386/rep.d: Likewise.
- * gas/i386/rep.s: Likewise.
- * gas/i386/x86-64-rep-suffix.d: Likewise.
- * gas/i386/x86-64-rep-suffix.s: Likewise.
- * gas/i386/x86-64-rep.d: Likewise.
- * gas/i386/x86-64-rep.s: Likewise.
+2007-03-26 Julian Brown <julian@codesourcery.com>
-2006-03-07 Richard Sandiford <richard@codesourcery.com>
+ * gas/arm/neon-const.s: Use FP syntax for 0/-0.
+ * gas/arm/vfp-neon-syntax-inc.s: Likewise, for 1.
+ * gas/arm/neon-cov.s: Use float syntax for FP immediate.
- * gas/arm/abs12.s, gas/arm/abs12.d: New test.
- * gas/arm/pic.d: Skip for *-*-vxworks*...
- * gas/arm/pic_vxworks.d: ...use this version instead.
- * gas/arm/unwind_vxworks.d: Fix expected output.
+2007-03-24 Paul Brook <paul@codesourcery.com>
+ Mark Shinwell <shinwell@codesourcery.com>
-2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
+ * gas/arm/archv6.s: Add new SRS tests.
+ * gas/arm/archv6.d: Update expected output.
+ * gas/arm/thumb32.s: Add new SRS tests.
+ * gas/arm/thumb32.d: Update expected output.
+ * gas/arm/srs-t2.d: New.
+ * gas/arm/srs-t2.l: New.
+ * gas/arm/srs-t2.s: New.
+ * gas/arm/srs-arm.d: New.
+ * gas/arm/srs-arm.l: New.
+ * gas/arm/srs-arm.s: New.
- * gas/m68k/arch-cpu-1.s: Tweak.
- * gas/m68k/arch-cpu-1.d: Tweak.
+2007-03-23 H.J. Lu <hongjiu.lu@intel.com>
-2006-02-28 Jan Beulich <jbeulich@novell.com>
+ * gas/i386/rex.s: Add tests for rex.WRXB.
+ * gas/i386/rex.d: Updated.
- * gas/all/altmacro.s: Adjust.
- * gas/all/altmac2.s: Adjust.
+ * gas/i386/rex.d: Replace rex64XYZ with rex.WRXB.
+ * gas/i386/x86-64-io-intel.d : Likewise.
+ * gas/i386/x86-64-io-suffix.d: Likewise.
+ * gas/i386/x86-64-io.d: Likewise.
+ * gas/i386/x86-64-opcode.d: Likewise.
-2006-02-28 Jan Beulich <jbeulich@novell.com>
+2007-03-21 H.J. Lu <hongjiu.lu@intel.com>
- * gas/macros/paren[sd]: New.
- * gas/macros/macros.exp: Run new test.
+ PR binutils/4218
+ * gas/i386/nops.s: Add testcases for nop r/m.
+ * gas/i386/x86-64-nops.s: Likewise.
-2006-02-27 H.J. Lu <hongjiu.lu@intel.com>
+ * gas/i386/x86-64-opcode.s: Add testcases for xchg with %ax,
+ %eax and %rax.
- * gas/i386/i386.exp: Add merom and x86-64-merom.
+ * gas/i386/nops.d: Updated.
+ * gas/i386/x86-64-nops.d: Likewise.
+ * gas/i386/x86-64-opcode.d: Likewise.
- * gas/i386/merom.d: New file.
- * gas/i386/merom.s: Likewise.
- * gas/i386/x86-64-merom.d: Likewise.
- * gas/i386/x86-64-merom.s: Likewise.
+2007-03-21 H.J. Lu <hongjiu.lu@intel.com>
-2006-02-24 David S. Miller <davem@sunset.davemloft.net>
+ * gas/i386/i386.exp: Run nops-3.
- * gas/sparc/rdhpr.s: New test.
- * gas/sparc/rdhpr.d: New test.
- * gas/sparc/wrhpr.s: New test.
- * gas/sparc/wrhpr.d: New test.
- * gas/sparc/window.s: New test.
- * gas/sparc/window.d: New test.
- * gas/sparc/rdpr.s: Add case for reading %gl register.
- * gas/sparc/rdpr.d: Likewise.
- * gas/sparc/wrpr.s: Add case for writing %gl register.
- * gas/sparc/wrpr.d: Likewise.
- * gas/sparc/sparc.exp: Update for new tests.
-
-2006-02-24 Paul Brook <paul@codesourcery.com>
-
- * gas/arm/thumb32.d: Fix expected msr and mrs output.
- * gas/arm/arch7.d: New test.
- * gas/arm/arch7.s: New test.
- * gas/arm/arch7m-bad.l: New test.
- * gas/arm/arch7m-bad.d: New test.
- * gas/arm/arch7m-bad.s: New test.
-
-2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
-
- * gas/ia64/opc-i.s: Add tests for tf.
- * gas/ia64/pseudo.s: Likewise.
- * gas/ia64/opc-i.d: Updated.
- * gas/ia64/pseudo.d: Likewise.
-
-2006-02-22 H.J. Lu <hongjiu.lu@intel.com>
-
- * gas/ia64/dv-raw-err.s: Add check for vmsw.0.
- * gas/ia64/dv-raw-err.l: Updated.
-
- * gas/ia64/opc-b.s: Add vmsw.0 and vmsw.1.
- * gas/ia64/opc-b.d: Updated.
-
-2005-02-22 Paul Brook <paul@codesourcery.com>
-
- * gas/arm/thumb32.d: Fix expected pld opcode.
-
-2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
- Anil Paranjape <anilp1@kpitcummins.com>
- Shilin Shakti <shilins@kpitcummins.com>
-
- * gas/xc16x: New directory.
- * gas/xc16x/xc16x.exp: New file
- * gas/xc16x/add.s: New file
- * gas/xc16x/add_test.s: New file
- * gas/xc16x/addb.s: New file
- * gas/xc16x/addc.s: New file
- * gas/xc16x/addcb.s: New file
- * gas/xc16x/and.s: New file
- * gas/xc16x/andb.s: New file
- * gas/xc16x/bfldl.s: New file
- * gas/xc16x/bit.s: New file
- * gas/xc16x/calla.s: New file
- * gas/xc16x/calli.s: New file
- * gas/xc16x/cmp.s: New file
- * gas/xc16x/cmp_test.s: New file
- * gas/xc16x/cmpb.s: New file
- * gas/xc16x/cmpi.s: New file
- * gas/xc16x/cpl.s: New file
- * gas/xc16x/div.s: New file
- * gas/xc16x/jmpa.s: New file
- * gas/xc16x/jmpi.s: New file
- * gas/xc16x/jmpr.s: New file
- * gas/xc16x/mov.s: New file
- * gas/xc16x/mov_test.s: New file
- * gas/xc16x/movb.s: New file
- * gas/xc16x/movbs.s: New file
- * gas/xc16x/movbz.s: New file
- * gas/xc16x/mul.s: New file
- * gas/xc16x/neg.s: New file
- * gas/xc16x/nop.s: New file
- * gas/xc16x/or.s: New file
- * gas/xc16x/orb.s: New file
- * gas/xc16x/prior.s: New file
- * gas/xc16x/pushpop.s: New file
- * gas/xc16x/ret.s: New file
- * gas/xc16x/scxt.s: New file
- * gas/xc16x/shlrol.s: New file
- * gas/xc16x/sub.s: New file
- * gas/xc16x/sub_test.s: New file
- * gas/xc16x/subb.s: New file
- * gas/xc16x/subcb.s: New file
- * gas/xc16x/syscontrol1.s: New file
- * gas/xc16x/syscontrol2.s: New file
- * gas/xc16x/trap.s: New file
- * gas/xc16x/xor.s: New file
- * gas/xc16x/xorb.s: New file
-
-2006-02-12 H.J. Lu <hongjiu.lu@intel.com>
-
- * gas/i386/x86-64-crx-suffix.d: Undo the last change.
-
-2006-02-11 H.J. Lu <hongjiu.lu@intel.com>
-
- * gas/i386/i386.exp: Add "x86-64-drx" and "x86-64-drx-suffix".
-
- * gas/i386/x86-64-crx-suffix.d: Minor update.
-
- * gas/i386/x86-64-drx-suffix.d: New file.
- * gas/i386/x86-64-drx.d: Likewise.
- * gas/i386/x86-64-drx.s: Likewise.
-
-2006-02-11 H.J. Lu <hongjiu.lu@intel.com>
-
- * gas/i386/i386.exp: Add "x86-64-crx" and "x86-64-crx-suffix".
-
- * gas/i386/x86-64-crx-suffix.d: New file.
- * gas/i386/x86-64-crx.d: Likewise.
- * gas/i386/x86-64-crx.s: Likewise.
-
-2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
-
- * testsuite/gas/m68k/all.exp: Add arch-cpu-1 test.
- * testsuite/gas/m68k/arch-cpu-1.[sd]: New.
-
-2005-02-02 Paul Brook <paul@codesourcery.com>
-
- * gas/arm/thumb2_invert.d: New test.
- * gas/arm/thumb2_invert.s: New test.
-
-2006-01-31 Paul Brook <paul@codesourcery.com>
-
- * gas/testsuite/gas/arm/iwmmxt-bad.s: Add check for bad register name.
- * gas/testsuite/gas/arm/iwmmxt-bad.l: Ditto.
-
-2006-01-18 Arnold Metselaar <arnoldm@sourceware.org>
-
- * gas/z80/z80.exp: Add offset.
- * gas/z80/offset.d: New file.
- * gas/z80/offset.s: New file.
-
-2006-01-16 Paul Brook <paul@codesourcery.com>
-
- * gas/m68k/all.exp: Add mcf-fpu.
- * gas/m68k/mcf-fpu.d: New file.
- * gas/m68k/mcf-fpu.s: New file.
-
-2006-01-11 Nick Clifton <nickc@redhat.com>
-
- * gas/tic54x/address.d: Work with 64bit hosts.
- * gas/tic54x/addrfar.d: Likewise.
- * gas/tic54x/align.d: Likewise.
- * gas/tic54x/all-opcodes.d: Likewise.
- * gas/tic54x/asg.d: Likewise.
- * gas/tic54x/cons.d: Likewise.
- * gas/tic54x/consfar.d: Likewise.
- * gas/tic54x/extaddr.d: Likewise.
- * gas/tic54x/field.d: Likewise.
- * gas/tic54x/labels.d: Likewise.
- * gas/tic54x/loop.d: Likewise.
- * gas/tic54x/lp.d: Likewise.
- * gas/tic54x/macro.d: Likewise.
- * gas/tic54x/math.d: Likewise.
- * gas/tic54x/opcodes.d: Likewise.
- * gas/tic54x/sections.d: Likewise.
- * gas/tic54x/set.d: Likewise.
- * gas/tic54x/struct.d: Likewise.
- * gas/tic54x/subsym.d: Likewise.
-
-2006-01-09 H.J. Lu <hongjiu.lu@intel.com>
-
- PR gas/2117
- * gas/ia64/ia64.exp: Add ltoff22x-2, ltoff22x-3, ltoff22x-4 and
- ltoff22x-5.
-
- * gas/ia64/ltoff22x-2.d: New file.
- * gas/ia64/ltoff22x-2.s: Likewise.
- * gas/ia64/ltoff22x-3.d: Likewise.
- * gas/ia64/ltoff22x-3.s: Likewise.
- * gas/ia64/ltoff22x-4.d: Likewise.
- * gas/ia64/ltoff22x-4.s: Likewise.
- * gas/ia64/ltoff22x-5.d: Likewise.
- * gas/ia64/ltoff22x-5.s: Likewise.
+ * gas/i386/nops-3.d: New file.
+ * gas/i386/nops-3.s: Likewise.
+
+2007-03-20 Mark Shinwell <shinwell@codesourcery.com>
+
+ * gas/arm/mul-overlap.s: Don't use %type.
+ * gas/arm/mul-overlap.l: Update line numbers.
+ * gas/arm/mul-overlap-v6.s: Don't use %type.
+
+2007-03-18 Mark Shinwell <shinwell@codesourcery.com>
+
+ * gas/arm/mul-overlap.s: New.
+ * gas/arm/mul-overlap.d: New.
+ * gas/arm/mul-overlap.l: New.
+ * gas/arm/mul-overlap-v6.s: New.
+ * gas/arm/mul-overlap-v6.d: New.
+
+2007-03-14 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * gas/arm/thumbver.d, gas/arm/thumbver.s: New test.
+
+2007-03-14 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb2_add.d: Add tests using sp.
+ * gas/arm/thumb2_add.s: Ditto.
+
+2007-03-14 Alan Modra <amodra@bigpond.net.au>
+
+ PR 4029
+ * gas/all/relax.s: New.
+ * gas/all/relax.d: New.
+ * gas/all/gas.exp: Run it.
+
+2007-03-11 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * gas/mmix/comment-1.d, gas/mmix/bspec-1.d, gas/mmix/bspec-2.d:
+ Adjust for change in readelf output.
+
+2007-03-06 Andreas Krebbel <krebbel1@de.ibm.com>
+
+ * gas/s390/zarch-z9-ec.d: New file.
+ * gas/s390/zarch-z9-ec.s: New file.
+ * gas/s390/s390.exp: Run the z9-ec testcases.
+
+2007-03-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/3918
+ * lib/gas-defs.exp (gas_started): New variable. Initialized to
+ 0.
+ (gas_start): Set gas_started to 1.
+ (gas_finish): Skip if gas_started is 0. Reset gas_started to 0.
+
+2007-03-02 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/relax_branch_align.d: New test.
+ * gas/arm/relax_branch_align.s: New test.
+
+2007-02-28 Nick Clifton <nickc@redhat.com>
+
+ PR gas/3797
+ * gas/lns/lns.exp: Do not run the lns-common test for the d10v
+ port.
+ * gas/d10v/address-002.l: Update expected assembler output.
+ * gas/d10v/address-003.l, gas/d10v/address-004.l,
+ gas/d10v/address-005.l, gas/d10v/address-006.l,
+ gas/d10v/address-007.l, gas/d10v/address-008.l,
+ gas/d10v/address-009.l, gas/d10v/address-010.l,
+ gas/d10v/address-011.l, gas/d10v/address-012.l,
+ gas/d10v/address-013.l, gas/d10v/address-014.l,
+ gas/d10v/address-015.l, gas/d10v/address-016.l,
+ gas/d10v/address-017.l, gas/d10v/address-018.l,
+ gas/d10v/address-019.l, gas/d10v/address-020.l,
+ gas/d10v/address-021.l, gas/d10v/address-022.l,
+ gas/d10v/address-023.l, gas/d10v/address-024.l,
+ gas/d10v/address-025.l, gas/d10v/address-026.l,
+ gas/d10v/address-027.l, gas/d10v/address-030.l,
+ gas/d10v/address-031.l, gas/d10v/address-032.l,
+ gas/d10v/address-033.l, gas/d10v/address-034.l,
+ gas/d10v/address-035.l, gas/d10v/address-036.l,
+ gas/d10v/address-037.l, gas/d10v/address-038.l,
+ gas/d10v/address-039.l, gas/d10v/address-040.l,
+ gas/d10v/address-041.l: Likewise.
+
+2007-02-28 Nick Clifton <nickc@redhat.com>
+
+ PR gas/3975
+ * gas/arm/mapshort.d: Split into two new files...
+ * gas/arm/mapshort-eabi.d: The one and...
+ * gas/arm/mapshort-elf.d: This one.
+ * gas/arm/arch7.d: Remove 32-bit host expectation.
+ * gas/arm/arm7t.d: Replace ".word 0x00000000" with ".*" as some
+ arm targets will disassemble this value as an instruction.
+ * gas/arm/neon-ldst-rm.d: Likewise.
+ * gas/arm/thumb2_pool.d: Only run this test for ELF based arm
+ ports.
+ * gas/arm/thumbrel.d: Only run this test for EABI based arm
+ ports.
+ * gas/arm/wince_inst.d: Fix expected branch targets.
+
+2007-02-22 DJ Delorie <dj@redhat.com>
+
+ * gas/s390/esa-g5.s: Adjust for corrected PKA syntax.
+ * gas/s390/esa-g5.d: Adjust for corrected PKA syntax.
+
+2007-02-20 Thiemo Seufer <ths@mips.com>
+ Chao-Ying Fu <fu@mips.com>
+
+ * gas/mips/mips32-dspr2.s, gas/mips/mips32-dspr2.d: New test for
+ DSP R2.
+ * gas/mips/mips.exp: Run new test.
+
+2007-02-19 Andreas Krebbel <krebbel1@de.ibm.com>
+
+ * gas/s390/esa-g5.d (cfxbr, cfebr, cfdbr): Exchanged floating
+ point and fixed point operands.
+ * gas/s390/esa-g5.s: Likewise.
+ * gas/s390/zarch-z900.d (cfdr, cfer, cfxr, cgdbr, cgebr, cgxbr,
+ cgdr, cger, cgxr): Likewise.
+ * gas/s390/zarch-z900.s: Likewise.
+
+2007-02-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/4027
+ * gas/i386/opcode.s: Add more tests for "test".
+ * i386/opcode-intel.d: Updated.
+ * gas/i386/opcode-suffix.d: Likewise.
+ * gas/i386/opcode.d: Likewise.
+
+2007-02-06 Nick Clifton <nickc@redhat.com>
+
+ PR gas/3810 gas/3800
+ * gas/elf/elf.exp: Expect the redef test to fail on targets which
+ do not convert fixups against ordinary symbols into relocs against
+ section symbols.
+ * gas/all/gas.exp: Likewise.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * gas/mep/relocs-junk1.s: Add a .data section.
+ * gas/mep/relocs.d: Updated to match above.
+
+2007-02-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/3961
+ * gas/i386/secrel.d: Support 64bit host.
+
+2007-02-02 Nick Clifton <nickc@redhat.com>
+
+ PR gas/3812
+ * gas/v850/v850e1.d: Correct expected disassembly of cmov insn to
+ account for sign extension.
+
+2007-01-11 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb2_add.d: Add test for missing operand.
+ * gas/arm/thumb2_add.s: Ditto.
+
+2007-01-11 Nick Clifton <nickc@redhat.com>
+
+ * gas/mcore/allinsn.s: Remove use of '#' before numbers - it is a
+ line comment character.
+ * gas/mcore/allinsn.d: Adjust expected disassembly to match real
+ output.
+
+ * gas/lns/lns.exp: Run the alternative version of the lns-common-1
+ test for the MCore target.
+
+2007-01-08 Kai Tietz <kai.tietz@onevision.com>
+
+ * gas/all/gas.exp: Renamed target x86_64-*-mingw64 to x86_64-*-mingw*.
+ * gas/i386/i386.exp: Ditto.
+
+2007-01-04 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/archv6.s: Add more cpsie tests.
+ * gas/arm/archv6.d: Ditto.
+
+2007-01-04 Andreas Schwab <schwab@suse.de>
+
+ * gas/m68k/cpu32.[sd]: New test.
+ * gas/m68k/all.exp: Run it.
+
+2007-01-04 Julian Brown <julian@codesourcery.com>
+
+ * gas/arm/neon-omit.d: Fix expected encodings for vshl, vqshl.
-2006-01-03 Hans-Peter Nilsson <hp@bitrange.com>
+2007-01-04 Paul Brook <paul@codesourcery.com>
- PR gas/2101
- * gas/mmix/hex2.s, gas/mmix/hex2.d: New test.
+ * gas/arm/neon-cov.d: Adjust expected output.
+ * gas/arm/neon-omit.s: Add tests for vcgt and vcle. Reorder vacle
+ and vacle.
+ * gas/arm/neon-omit.d: Adjust expected output.
-For older changes see ChangeLog-2005
+For older changes see ChangeLog-2006
Local Variables:
mode: change-log
diff --git a/gas/testsuite/ChangeLog-2006 b/gas/testsuite/ChangeLog-2006
new file mode 100644
index 000000000000..3561fd9ddd61
--- /dev/null
+++ b/gas/testsuite/ChangeLog-2006
@@ -0,0 +1,1094 @@
+2006-12-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/intel.s: Add tests for "shrd %cl,%edx,%eax" and
+ "shld %cl,%edx,%eax".
+ * gas/i386/opcode.s: Likewise.
+
+ * gas/i386/intel.d: Updated.
+ * gas/i386/opcode-intel.d: Likewise.
+ * gas/i386/opcode-suffix.d: Likewise.
+ * gas/i386/opcode.d: Likewise.
+
+2006-12-27 Kazu Hirata <kazu@codesourcery.com>
+
+ * gas/m68k/all.exp: Add support for fido.
+ * gas/m68k/fido.d, gas/m68k/fido.s: New.
+
+2006-12-19 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gas/cfi/cfi-common-6.s: Do not use |.
+
+2006-12-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/x86-64-inval.s: cmpxchg16b needs oword ptr, instead
+ of xmmword ptr.
+ * gas/i386/x86_64.s: Likewise.
+ * gas/i386/x86-64-inval.l: Updated.
+
+2006-12-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/x86-64-inval.s: Add cmpxchg16b.
+ * gas/i386/x86_64.s: Likewise.
+ * gas/i386/x86-64-inval.l: Updated.
+ * gas/i386/x86_64.d: Likewise.
+
+2006-12-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/3712
+ * gas/i386/inval.s: Add invalid insertq.
+ * gas/i386/x86-64-inval.s: Likewise.
+
+ * gas/i386/inval.l: Updated.
+ * gas/i386/x86-64-inval.l: Likewise.
+
+2006-12-08 Christian Groessler <chris@groessler.org>
+
+ * gas/z8k/reglabel.d: New test.
+ * gas/z8k/reglabel.s: New test.
+ * gas/z8k/z8k.exp: Run new test.
+
+2006-12-06 H.J. Lu <hjl@gnu.org>
+
+ * gas/i386/amdfam10.d: Updated for operand/address-size override
+ prefix position change.
+ * gas/i386/naked.d: Likewise.
+ * gas/i386/rep-suffix.d: Likewise.
+ * gas/i386/rep.d: Likewise.
+ * gas/i386/white.l: Likewise.
+ * gas/i386/x86-64-amdfam10.d: Likewise.
+ * gas/i386/x86-64-rep-suffix.d: Likewise.
+ * gas/i386/x86-64-rep.d: Likewise.
+ * gas/i386/x86_64.d: Likewise.
+
+2006-12-04 Jan Beulich <jbeulich@novell.com>
+
+ * gas/i386/opcode-intel.d: Fix wrong expectation. Make white space
+ expectations more consistent.
+
+2006-12-01 Jan Beulich <jbeulich@novell.com>
+
+ * gas/i386/opcode.d: Adjust name.
+ * gas/i386/opcode-intel.d: New.
+ * gas/i386/opcode-suffix.d: New.
+ * gas/i386/i386.exp: Run new tests.
+
+2006-12-01 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumbrel.s: New test.
+ * gas/arm/thumbrel.d: New test.
+
+2006-11-30 Jan Beulich <jbeulich@novell.com>
+
+ * gas/i386/intel.d: Adjust.
+ * gas/i386/naked.d: Adjust.
+ * gas/i386/opcode.d: Adjust.
+
+2006-11-30 Jan Beulich <jbeulich@novell.com>
+
+ * gas/i386/x86-64-io.[sd]: New.
+ * gas/i386/x86-64-io-intel.d: New.
+ * gas/i386/x86-64-io-suffix.d: New.
+ * gas/i386/i386.exp: Run new tests.
+
+2006-11-30 Jan Beulich <jbeulich@novell.com>
+
+ * gas/i386/intel.s: Use Intel syntax in Intel syntax test.
+ * gas/i386/x86-64-cbw.[sd]: New.
+ * gas/i386/x86-64-cbw-intel.d: New.
+ * gas/i386/i386.exp: Run new tests.
+
+2006-11-29 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/vfpv3-const-conv.s: Improve test coverage.
+ * gas/arm/vfpv3-const-conv.d: Adjust expected output.
+ * gas/arm/vfp-neon-syntax_t2.d: Ditto.
+ * gas/arm/vfp-neon-syntax.d: Ditto.
+
+2006-11-27 Bob Wilson <bob.wilson@acm.org>
+
+ * gas/elf/section2.e-xtensa: New file.
+ * gas/elf/elf.exp: Use it.
+
+2006-11-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * gas/arm/arm7t.d, gas/arm/neon-ldst-rm.d, gas/arm/thumb2_pool.d,
+ gas/arm/tls.d: Update for $d support.
+ * gas/arm/mapshort.d, gas/arm/mapshort.s: New test.
+ * gas/elf/section2.e-armeabi: Update.
+ * gas/elf/section2.e-armelf: New file.
+ * gas/elf/elf.exp: Use it.
+
+2006-11-16 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gas/m68k/all.exp: Add mcf-trap.
+ * gas/m68k/mcf-trap.[sd]: New.
+
+2006-11-15 Jan Beulich <jbeulich@novell.com>
+
+ * gas/elf/equ-reloc.[sd]: New.
+ * gas/elf/elf.exp: Run new test.
+
+2006-11-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/merom.d: Use "#pass" instead of "#..." to skip the
+ rest of output.
+ * gas/i386/x86-64-merom.d: Likewise.
+
+2006-11-10 Thiemo Seufer <ths@mips.com>
+
+ * gas/cfi/cfi.exp: Don't run cfi-common-6 for mips*-*.
+
+2006-11-10 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * gas/arm/undefined.d: Run test on Windows CE.
+ * gas/arm/undefined_coff.d: Don't run test on Windows CE.
+
+ * gas/arm/local_label_coff.s: New test.
+ * gas/arm/local_label_coff.d: New test.
+ * gas/arm/local_label_elf.s: New test.
+ * gas/arm/local_label_elf.d: New test.
+ * gas/arm/local_label_wince.s: New test.
+ * gas/arm/local_label_wince.d: New test.
+
+2006-11-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/sse2.s: Test movdqa with memory destination.
+ * gas/i386/sse2.d: Updated.
+
+2006-11-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/sse2.s: Test movdqu with memory destination.
+ * gas/i386/sse2.d: Updated.
+
+2006-11-06 David Daney <ddaney@avtrex.com>
+
+ * gas/mips/elf-rel26.s: New test.
+ * gas/mips/elf-rel26.d: Ditto.
+ * gas/mips/mips.exp: Run it.
+
+2006-11-03 Jakub Jelinek <jakub@redhat.com>
+
+ * gas/cfi/cfi-common-6.d: New test.
+ * gas/cfi/cfi-common-6.s: New.
+ * gas/cfi/cfi.exp: Add cfi-common-6 test.
+
+ * gas/cfi/cfi-common-5.d: New test.
+ * gas/cfi/cfi-common-5.s: New.
+ * gas/cfi/cfi.exp: Add cfi-common-5 test.
+
+2006-11-01 Thiemo Seufer <ths@mips.com>
+
+ * gas/mips/mips16-intermix.d, gas/mips/mips16-intermix.s: New
+ testcase.
+ * gas/mips/mips.exp: Run new testcase.
+
+2006-11-01 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * gas/score/rD_rA.d: Correct not! and not.c instruction disassembly.
+ * gas/score/b.d: Correct b! and b instruction disassembly.
+
+2006-10-29 Randolph Chung <tausq@debian.org>
+
+ * gas/cfi/cfi.exp [hppa*-linux*]: Run hppa CFI test.
+ * gas/cfi/cfi-hppa-1.s: New file.
+ * gas/cfi/cfi-hppa-1.h: New file.
+
+2006-10-24 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ * gas/ppc/cell.s: New file.
+ * gas/ppc/cell.d: New file.
+ * gas/ppc/ppc.exp: Test cell.s.
+
+2006-10-23 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+
+ * gas/i386/amdfam10.d : Modify to support for the change in POPCNT
+ opcode in amdfam10 architecture.
+ * gas/i386/x86-64-amdfam10.d : Ditto.
+
+2006-10-21 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * gas/sh/sh64/syntax-1.d: Update.
+
+2006-10-20 Andrew Stubbs <andrew.stubbs@st.com>
+
+ * gas/sh/pcrel-coff.d: Update patterns (remove 0x on addresses).
+ * gas/sh/pcrel-hms.d: Likewise.
+ * gas/sh/pcrel.d: Likewise.
+ * gas/sh/pcrel2.d: Likewise.
+ * gas/sh/pic.d: Likewise.
+ * gas/sh/tlsd.d: Likewise.
+ * gas/sh/tlsdnopic.d: Likewise.
+ * gas/sh/tlsdpic.d: Likewise.
+
+2006-10-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/i386.exp: Indent "x86-64-nops-1".
+
+2006-10-08 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/neon-cov.s: Test pseudo-instruction forms of
+ vmov, vmvn and logic immediate instructions.
+ * gas/arm/neon-cov.d: ditto.
+
+2006-09-28 Bridge Wu <mingqiao.wu@gmail.com>
+
+ * gas/arm/iwmmxt-wldstbh.s: New file.
+ * gas/arm/iwmmxt-wldstbh.d: New file.
+
+2006-09-26 Mark Shinwell <shinwell@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+ Ian Lance Taylor <ian@wasabisystems.com>
+ Ben Elliston <bje@wasabisystems.com>
+
+ * gas/arm/iwmmxt2.s: New file.
+ * gas/arm/iwmmxt2.d: New file.
+
+2006-09-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3235
+ * gas/i386/addr16.d: New file.
+ * gas/i386/addr16.s: Likewise.
+ * gas/i386/addr32.d: Likewise.
+ * gas/i386/addr32.s: Likewise.
+
+ * gas/i386/i386.exp: Add "addr16" and "addr32".
+
+ * gas/i386/x86-64-addr32.s: Add tests for "add32 mov".
+ * gas/i386/x86-64-addr32.d: Updated.
+
+2006-09-20 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * gas/all/gas.exp: Add support for x86_64-*-mingw64.
+ * gas/i386/immed64.d: Add #pass for avoid proplems with alignment paddings.
+ * gas/i386/rex.d: Changed for x86_64-mingw32 target matching and padding.
+ * gas/i386/i386.d: Likewise.
+ * gas/i386/x86-64-addr32.d: Likewise.
+ * gas/i386/x86-64-branch.d: Likewise.
+ * gas/i386/x86-64-crx-suffix.d: Likewise.
+ * gas/i386/x86-64-crx.d: Likewise.
+ * gas/i386/x86-64-drx-suffix.d: Likewise.
+ * gas/i386/x86-64-crx-suffix.d: Likewise.
+ * gas/i386/x86-64-opcode.d: Likewise.
+ * gas/i386/x86-64-pcrel.d: Likewise.
+
+2006-09-19 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * gas/bfin/load.s, gas/bfin/load.d: Add constant folding tests.
+
+2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * gas/score: New directory.
+ * gas/elf/section2.e-score: New file.
+ * gas/elf/elf.exp: Add special case for Score target.
+
+2006-09-16 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/unwind.s: Test two argument form of .movsp.
+ * gas/arm/unwind.d: Update expected output.
+ * gas/arm/unwind_vxworks.d: Ditto.
+
+2006-09-08 Kazu Hirata <kazu@codesourcery.com>
+
+ * lib/gas-dg.exp (gas-dg-test): Treat $dir as a literal.
+
+2006-09-08 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/arm-it.s: New test.
+ * gas/arm/arm-it.d: New test.
+
+2006-09-07 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/neon-omit.s: Test three-argument variants.
+ * gas/arm/neon-omit.d: Update expected output.
+
+2006-09-04 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/neon-cov.s: Test .u and .s aliases for .i suffixes.
+ * gas/arm/neon-cov.d: Adjust expected output.
+
+2006-08-21 Joseph Myers <joseph@codesourcery.com>
+
+ * gas/arm/unwind.s: Test not merging iWMMXt register save with
+ previous long opcode.
+ * gas/arm/unwind.d, gas/arm/unwind_vxworks.d: Update.
+
+2006-08-16 Julian Brown <julian@codesourcery.com>
+
+ * gas/arm/noarm.s: Add test for disabled ARM insns.
+ * gas/arm/noarm.d: Drive test for above.
+ * gas/arm/noarm.l: Expected error output.
+
+2006-08-15 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+ David Ung <davidu@mips.com>
+
+ * gas/mips/mips.exp: Handle mips*-sde-elf*.
+
+2006-08-04 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+
+ * sse2.d: Fixed the correct result for cvtpi2pd, cvtpd2pi
+ and cvttpd2pi.
+
+2006-08-12 Thiemo Seufer <ths@networkno.de>
+
+ * gas/mips/mips16-save.d: Fix testcase.
+
+2006-08-08 Bob Wilson <bob.wilson@acm.org>
+
+ * gas/lns/lns-common-1-alt.d: New file.
+ * gas/lns/lns.exp: Use lns-common-1-alt.d for xtensa targets.
+
+2006-08-04 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * gas/arm/wince.s: New test.
+ * gas/arm/wince.d: New test.
+
+ * gas/arm/thumb2_add.s: Don't use elf specific ".type"
+ pseudo-op.
+
+2006-08-03 Joseph Myers <joseph@codesourcery.com>
+
+ * gas/arm/iwmmxt-bad.s: Test invalid register names for wldrw and
+ wstrw.
+ * gas/arm/iwmmxt-bad.l: Update.
+
+2006-08-03 Joseph Myers <joseph@codesourcery.com>
+
+ * gas/arm/iwmmxt.s: Test tmcr and tmrc with wcgr registers.
+ * gas/arm/iwmmxt.d: Update.
+
+2006-08-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/nops-2-i386.d: Updated.
+ * gas/i386/nops-2-merom.d: Likewise.
+ * gas/i386/nops-2.d: Likewise.
+
+2006-07-29 Richard Sandiford <richard@codesourcery.com>
+
+ * gas/m68k/mcf-fpu.s: Add tests for all addressing modes.
+ * gas/m68k/mcf-fpu.d: Update accordingly.
+
+2006-07-20 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+ Michael Meissner <michael.meissner@amd.com>
+
+ * gas/i386/amdfam10.s: Add .p2align 4,0 to make sure segment is
+ aligned on all systems.
+ * gas/i386/x86-64-amdfam10.s: Likewise.
+ * gas/i386/amdfam10.d: Adjust output for alignment.
+ * gas/i386/x86-64-amdfam10.d: Likewise.
+
+2006-07-19 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/archv6t2.d: Adjust expected output for rbit.
+
+2006-07-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/opcode.s: Add sldt, smsw and str.
+ * gas/i386/x86-64-opcode.s: Likewise.
+
+ * gas/i386/opcode.d: Updated.
+ * gas/i386/x86-64-opcode.d: Likewise.
+
+2006-07-18 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb2_add.d: New test.
+ * gas/arm/thumb2_add.s: New test.
+
+2006-07-18 Maciej W. Rozycki <macro@mips.com>
+
+ * gas/mips/mips4.s, gas/mips/mips4.d: Enable the "pref" test. Change
+ arguments for "madd.s" so that the instruction is correct for mips1
+ and still matches "bc3*".
+
+2006-07-13 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+ Michael Meissner <michael.meissner@amd.com>
+
+ * gas/i386/amdfam10.s: New file for amdfam10 instructions.
+ * gam/i386/amdfam10.d: Ditto.
+ * gas/i386/x86-64-amdfam10.s: Ditto.
+ * gam/i386/x86-64-amdfam10.d: Ditto.
+
+2006-07-12 Nick Clifton <nickc@redhat.com>
+
+ * gas/sh/basic.exp: Run "too_large" dump test.
+ * gas/sh/too_large.s: New test file. Check that .byte directives
+ do not generate a bogus overflow message.
+ * gas/sh/too_large.s: New test control file.
+
+2006-07-05 Julian Brown <julian@codesourcery.com>
+
+ * gas/arm/vfp-neon-syntax.d: Tweak expected fmsrr syntax.
+ * gas/arm/vfp-neon-syntax_t2.d: Likewise.
+ * gas/arm/vfp2.d: Likewise.
+ * gas/arm/vfp2_t2.d: Likewise.
+
+2006-07-04 Thiemo Seufer <ths@mips.com>
+
+ * gas/mips/e32-rel2.d, gas/mips/e32-rel4.d: Use -mabi=32 for as.
+ * gas/mips/mips.exp: Move mips16e testcase to ELF only tests.
+ Run elf{el}-rel2 and elf-rel4 for all arches with gpr64. Run
+ e32-rel2 and e32-rel4 also for 64 bit configurations.
+
+2006-06-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/i386.exp: Run nops-1, nops-1-i386, nops-1-i686,
+ nops-1-merom, nops-2, nops-2-i386, nops-2-merom, x86-64-nops-1,
+ x86-64-nops-1-k8, x86-64-nops-1-nocona and x86-64-nops-1-merom.
+
+ * gas/i386/nops-1.s: New file.
+ * gas/i386/nops-2.s: Likewise.
+ * gas/i386/nops-1-i386.d: Likewise.
+ * gas/i386/nops-1-i686.d: Likewise.
+ * gas/i386/nops-1-merom.d: Likewise.
+ * gas/i386/nops-1.d: Likewise.
+ * gas/i386/nops-2-i386.d: Likewise.
+ * gas/i386/nops-2-merom.d: Likewise.
+ * gas/i386/nops-2.d: Likewise.
+ * gas/i386/x86-64-nops-1.s: Likewise.
+ * gas/i386/x86-64-nops-1-k8.d: Likewise.
+ * gas/i386/x86-64-nops-1-merom.d: Likewise.
+ * gas/i386/x86-64-nops-1-nocona.d: Likewise.
+ * gas/i386/x86-64-nops-1.d: Likewise.
+
+ * gas/i386/sse2.d: Updated to expect xchg %ax,%ax as 2 byte
+ nop.
+
+2006-06-20 Thiemo Seufer <ths@networkno.de>
+
+ * gas/mips/mips.exp: Explicitly specify o32 ABI.
+ * gas/mips/mips64-dsp.d: Dump o32 register names.
+ * gas/mips/smartmips.d: Explicitly specify o32 ABI.
+
+2006-06-18 Nick Clifton <nickc@redhat.com>
+
+ * gas/arm/group-reloc-alu-encoding-bad.d: Skip for non-ELF
+ targets.
+ * gas/arm/group-reloc-alu-parsing-bad.d: Likewise.
+ * gas/arm/group-reloc-ldc-encoding-bad.d: Likewise.
+ * gas/arm/group-reloc-ldc-parsing-bad.d: Likewise.
+ * gas/arm/group-reloc-ldc.d: Likewise.
+ * gas/arm/group-reloc-ldr-encoding-bad.d: Likewise.
+ * gas/arm/group-reloc-ldr-parsing-bad.d: Likewise.
+ * gas/arm/group-reloc-ldr.d: Likewise.
+ * gas/arm/group-reloc-ldrs-encoding-bad.d: Likewise.
+ * gas/arm/group-reloc-ldrs-parsing-bad.d: Likewise.
+ * gas/arm/group-reloc-ldrs.d: Likewise.
+
+2006-06-15 Mark Shinwell <shinwell@codesourcery.com>
+
+ * gas/arm/group-reloc-alu.d: New test.
+ * gas/arm/group-reloc-alu-encoding-bad.d: New test.
+ * gas/arm/group-reloc-alu-encoding-bad.l: New test.
+ * gas/arm/group-reloc-alu-encoding-bad.s: New test.
+ * gas/arm/group-reloc-alu-parsing-bad.d: New test.
+ * gas/arm/group-reloc-alu-parsing-bad.l: New test.
+ * gas/arm/group-reloc-alu-parsing-bad.s: New test.
+ * gas/arm/group-reloc-alu.s: New test.
+ * gas/arm/group-reloc-ldc.d: New test.
+ * gas/arm/group-reloc-ldc-encoding-bad.d: New test.
+ * gas/arm/group-reloc-ldc-encoding-bad.l: New test.
+ * gas/arm/group-reloc-ldc-encoding-bad.s: New test.
+ * gas/arm/group-reloc-ldc-parsing-bad.d: New test.
+ * gas/arm/group-reloc-ldc-parsing-bad.l: New test.
+ * gas/arm/group-reloc-ldc-parsing-bad.s: New test.
+ * gas/arm/group-reloc-ldc.s: New test.
+ * gas/arm/group-reloc-ldr.d: New test.
+ * gas/arm/group-reloc-ldr-encoding-bad.d: New test.
+ * gas/arm/group-reloc-ldr-encoding-bad.l: New test.
+ * gas/arm/group-reloc-ldr-encoding-bad.s: New test.
+ * gas/arm/group-reloc-ldr-parsing-bad.d: New test.
+ * gas/arm/group-reloc-ldr-parsing-bad.l: New test.
+ * gas/arm/group-reloc-ldr-parsing-bad.s: New test.
+ * gas/arm/group-reloc-ldr.s: New test.
+ * gas/arm/group-reloc-ldrs.d: New test.
+ * gas/arm/group-reloc-ldrs-encoding-bad.d: New test.
+ * gas/arm/group-reloc-ldrs-encoding-bad.l: New test.
+ * gas/arm/group-reloc-ldrs-encoding-bad.s: New test.
+ * gas/arm/group-reloc-ldrs-parsing-bad.d: New test.
+ * gas/arm/group-reloc-ldrs-parsing-bad.l: New test.
+ * gas/arm/group-reloc-ldrs-parsing-bad.s: New test.
+ * gas/arm/group-reloc-ldrs.s: New test.
+
+2006-06-14 Thiemo Seufer <ths@mips.com>
+ Maciej W. Rozycki <macro@mips.com>
+
+ * gas/mips/elf-rel6.d, gas/mips/elf-rel6.s: Extend testcase.
+ * gas/mips/elf-rel6.d-n32.d, gas/mips/elf-rel6-n64.d: New files.
+ * gas/mips/mips.exp: Run new testcases.
+
+2006-06-14 Thiemo Seufer <ths@mips.com>
+
+ * gas/mips/mips16e-jrc.d, gas/mips/mips16e-save.d,
+ gas/mips/mips32-dsp.d, gas/mips/mips32-mt.d: Explicitly specify
+ o32 ABI.
+
+2006-06-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/i386.exp: Run nops and x86-64-nops.
+
+ * gas/i386/nops.d: New file.
+ * gas/i386/nops.s: Likewise.
+ * gas/i386/x86-64-nops.d: Likewise.
+ * gas/i386/x86-64-nops.s: Likewise.
+
+2006-06-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/opcode.s: Add "xchg %ax,%ax".
+ * gas/i386/opcode.d: Updated.
+
+ * gas/i386/x86-64-opcode.s: Add xchg %ax,%ax, xchg %eax,%eax,
+ xchg %rax,%rax, rex64 xchg %rax,%rax and xchg %rax,%r8.
+ * gas/i386/x86-64-opcode.d: Updated.
+
+2006-06-09 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * gas/mips/mips32-sf32.s, gas/mips/mips32-sf32.d: New test for odd
+ single precision FPRs on MIPS32.
+ * gas/mips/mips.exp: Run them.
+
+2006-06-08 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * gas/mips/mips32.s: Added cop2 branches with explicit condition
+ code register numbers.
+ * gas/mips/mips32.d: Likewise.
+
+2006-06-07 Julian Brown <julian@codesourcery.com>
+
+ * gas/arm/itblock.s: New file. Helper macro for making all-true IT
+ blocks.
+ * gas/arm/neon-cond-bad-inc.s: New test. Make sure unconditional
+ Neon instructions are rejected...
+ * gas/arm/neon-cond-bad.s: In ARM mode, and...
+ * gas/arm/neon-cond-bad_t2.s: Accepted in Thumb mode (with IT).
+ * gas/arm/neon-cond-bad.l: Expected error output in ARM mode.
+ * gas/arm/neon-cond-bad.d: Control ARM mode test.
+ * gas/arm/neon-cond-bad_t2.d: Expected output in Thumb mode.
+ * gas/arm/vfp-neon-syntax-inc.s: Test VFP Neon-style syntax.
+ * gas/arm/vfp-neon-syntax.s: ...in ARM mode.
+ * gas/arm/vfp-neon-syntax_t2.s: ...and Thumb mode.
+ * gas/arm/vfp-neon-syntax.d: Expected output in ARM mode.
+ * gas/arm/vfp-neon-syntax_t2.d: Expected output in Thumb mode.
+
+2006-06-06 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb2_bcond.d: Update expected output.
+ * gas/arm/thumb32.d: Ditto.
+ * gas/arm/vfp1_t2.d: Ditto.
+ * gas/arm/vfp1xD_t2.d: Ditto.
+
+2006-06-06 Thiemo Seufer <ths@mips.com>
+ Chao-ying Fu <fu@mips.com>
+
+ * gas/mips/mips64-dsp.s, gas/mips/mips64-dsp.d: New DSP64 tests.
+ * gas/mips/mips.exp: Run DSP64 tests.
+
+2006-06-05 Thiemo Seufer <ths@mips.com>
+
+ * gas/mips/mips32-dsp.d, gas/mips/mips32-dsp.s, gas/mips/mips32-mt.d,
+ gas/mips/mips32-mt.s: Remove instructions with invalid arguments.
+ * gas/mips/mips32-dsp.l, gas/mips/mips32-mt.l: Delete file.
+
+2006-05-25 Richard Sandiford <richard@codesourcery.com>
+
+ * gas/m68k/mcf-fpu.s: Add fmovemd and fmovem instructions.
+ * gas/m68k/mcf-fpu.d: Adjust accordingly.
+
+2006-05-25 Jie Zhang <jie.zhang@analog.com>
+
+ * gas/bfin/vector2.s, gas/bfin/vector2.d: Test to ensure (m) is not
+ thrown away.
+
+2006-05-23 Thiemo Seufer <ths@mips.com>
+
+ * gas/mips/mips-gp32-fp64-pic.d, mips/mips-gp32-fp64.d,
+ gas/mips/mips-gp64-fp32-pic.d, gas/mips/mips-gp64-fp32.l,
+ gas/mips/mips-gp64-fp64.d: Adjust test cases to the changes assembler
+ output.
+ * gas/mips/mips-gp32-fp64.l, gas/mips/mips-gp64-fp32-pic.l: New files,
+ catch assembler warnings.
+
+2006-05-22 Nick Clifton <nickc@redhat.com>
+
+ * gas/mips/mips32-dsp.l: Fix expected unsigned decoding of -1 in
+ warning messages.
+ * gas/mips/mips32-mt.l: Likewise.
+
+2006-05-19 Thiemo Seufer <ths@mips.com>
+
+ * gas/mips/vxworks1-el.d, gas/mips/vxworks1-xgot-el.d: Add little
+ endian testcases.
+ * gas/mips/vxworks1.d, gas/mips/vxworks1-xgot.d: Build as big endian.
+ * gas/mips/mips.exp: Run new testcases.
+
+2006-05-14 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * gas/mips/mips.exp: Run new tests.
+ * gas/mips/mips16e.s, gas/mips/mips16e.d, gas/mips/mips16e-64.s,
+ gas/mips/mips16e-64.d, gas/mips/mips16e-64.l: New tests.
+
+2006-05-11 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/local_function.d: New test.
+ * gas/arm/local_function.s: New test.
+
+2006-05-11 Thiemo Seufer <ths@mips.com>
+
+ * gas/mips/jal-range.l: Don't check the range of j or jal
+ addresses.
+
+2006-05-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/x86-64-gidt.d: Adjusted.
+
+2006-05-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/i386.exp: Run x86-64-gidt.
+
+ * gas/i386/x86-64-gidt.d: New file.
+ * gas/i386/x86-64-gidt.s: Likewise.
+
+2006-05-09 David Ung <davidu@mips.com>
+
+ * gas/mips/jal-range.l: Only warn about an out-of-range j or jal
+ address.
+
+2006-05-08 Thiemo Seufer <ths@mips.com>
+
+ * gas/mips/mips32.s, gas/mips/mips32.d: Extend testcase to check
+ larger offset arguments for cache instructions.
+
+2006-05-08 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+ David Ung <davidu@mips.com>
+
+ * gas/mips/smartmips.s, gas/mips/smartmips.d: New smartmips test.
+ * gas/mips/mips.exp: Run smartmips test.
+
+2006-05-05 Julian Brown <julian@codesourcery.com>
+
+ * gas/arm/vfp-neon-overlap.s: New test. Overlapping VFP/Neon
+ instructions.
+ * gas/arm/vfp-neon-overlap.d: Expected output of above.
+ * gas/arm/vfp1xD.d: Test for fldmx/fstmx.
+ * gas/arm/vfp1xD_t2.d: Likewise.
+ * gas/arm/vfpv3-32drs.d: Likewise.
+
+2006-05-05 Nigel Stephens <nigel@mips.com>
+
+ * gas/mips/noreorder.s, gas/mips/noreorder.d: New test for
+ reorder/noreorder corner case.
+ * gas/mips/mips.exp: Run new test.
+
+2006-05-04 Kazu Hirata <kazu@codesourcery.com>
+
+ * gas/arm/armv1.d (error-output): New.
+ * gas/arm/armv1.l: New.
+ * gas/arm/thumb32.d (error-output): New.
+ * gas/arm/thumb32.l: New.
+
+2006-05-04 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * gas/mips/mips.exp: Run mips32-dsp tests only for mips32r2.
+ * gas/mips/set-arch.d: Adjust according to opcode table changes.
+
+2006-05-03 Thiemo Seufer <ths@mips.com>
+
+ * gas/mips/mips32-mt.d: Fix mftr argument order.
+
+2006-05-02 Joseph Myers <joseph@codesourcery.com>
+
+ * gas/arm/iwmmxt.s: Increase offsets for wstrb and wstrh.
+ * gas/arm/iwmmxt.d: Update expected results.
+ * gas/arm/iwmmxt-bad2.s: Test wstrb, wstrh, wldrb and wldrh.
+ * gas/arm/iwmmxt-bad2.l: Update expected error messages.
+
+2006-04-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/fp.d: New file.
+ * gas/i386/fp.s: Likewise.
+
+ * gas/i386/i386.exp: Run "fp".
+
+2006-04-28 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * gas/mips/cp0sel-names-mips32r2.d,
+ gas/mips/cp0sel-names-mips64r2.d: Update for MT register names.
+
+2006-04-26 Julian Brown <julian@codesourcery.com>
+
+ * gas/arm/neon-const.s: New testcase. Neon floating-point constants.
+ * gas/arm/neon-const.d: Expected output of above.
+ * gas/arm/neon-cov.d: Expect floating-point disassembly for VMOV.F32.
+
+2006-04-26 Julian Brown <julian@codesourcery.com>
+
+ * gas/arm/neon-psyn.s: Basic test of programmers syntax.
+ * gas/arm/neon-psyn.d: Expected output of above.
+
+2006-04-26 Julian Brown <julian@codesourcery.com>
+
+ * gas/arm/copro.s: Avoid ldcl which encodes as a bad Neon instruction.
+ * gas/arm/copro.d: Update accordingly.
+ * gas/arm/neon-cond.s: New test. Conditional Neon opcodes in ARM mode.
+ * gas/arm/neon-cond.d: Expected results of above.
+ * gas/arm/neon-cov.s: New test. Coverage of Neon instructions.
+ * gas/arm/neon-cov.d: Expected results of above.
+ * gas/arm/neon-ldst-es.s: New test. Element and structure loads and
+ stores.
+ * gas/arm/neon-ldst-es.d: Expected results of above.
+ * gas/arm/neon-ldst-rm.s: New test. Single and multiple register loads
+ and stores.
+ * gas/arm/neon-ldst-rm.d: Expected results of above.
+ * gas/arm/neon-omit.s: New test. Omission of optional operands.
+ * gas/arm/neon-omit.d: Expected results of above.
+ * gas/arm/vfp1.d: Expect Neon syntax for some VFP instructions.
+ * gas/arm/vfp1_t2.d: Likewise.
+ * gas/arm/vfp1xD.d: Likewise.
+ * gas/arm/vfp1xD_t2.d: Likewise.
+ * gas/arm/vfp2.d: Likewise.
+ * gas/arm/vfp2_t2.d: Likewise.
+ * gas/arm/vfp3-32drs.s: New test. Extended D register range for VFP
+ instructions.
+ * gas/arm/vfp3-32drs.d: Expected results of above.
+ * gas/arm/vfp3-const-conv.s: New test. VFPv3 constant-load and
+ conversion instructions.
+ * gas/arm/vfp3-const-conv.d: Expected results of above.
+
+2005-04-20 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/arch7.d: Remove skip.
+ * gas/arm/svc.d: Ditto.
+ * gas/arm/thumb2_bcond.d: Ditto.
+ * gas/arm/thumb2_it_bad.d: Ditto.
+
+2006-04-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/2533
+ * gas/i386/inval.s: Add test for illegal immediate register
+ operand.
+ * gas/i386/inval.l: Updated.
+
+2006-04-16 Nick Clifton <nickc@redhat.com>
+
+ * gas/arm/arch7.d: Skip test for non-ELF targets.
+ * gas/arm/blx-local.d: Likewise.
+ * gas/arm/svc.d: Likewise.
+ * gas/arm/thumb2_bcond.d: Likewise.
+ * gas/arm/thumb2_it_bad.d: Likewise.
+
+2006-04-07 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/blx-local.d: New test.
+ * gas/arm/blx-local.d: New test.
+
+2006-04-07 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb2_pool.d: New test.
+ * gas/arm/thumb2_pool.s: New test.
+
+2006-04-05 Richard Sandiford <richard@codesourcery.com>
+
+ * gas/sparc/vxworks-pic.s, gas/sparc/vxworks-pic.d: New test.
+ * gas/sparc/sparc.exp: Run it. Remove sparc*-*-vxworks* XFAILs.
+
+2006-03-23 Michael Matz <matz@suse.de>
+
+ * gas/i386/reloc64.s: Accept 64-bit forms.
+ * gas/i386/reloc64.d: Adjust.
+ * gas/i386/reloc64.l: Adjust.
+
+2006-03-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/rep.s: Pad with .p2align.
+ * gas/i386/rep.d: Adjust.
+
+2006-03-22 Richard Sandiford <richard@codesourcery.com>
+
+ * gas/mips/vxworks1.s, gas/mips/vxworks1.d,
+ * gas/mips/vxworks1-xgot.d: New tests.
+ * gas/mips/mips.exp: Run them. Do not run other tests on VxWorks.
+
+2006-03-21 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb32.d: Correct expected output.
+
+2006-03-20 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb2_bcond.d: New test.
+ * gas/arm/thumb2_bcond.s: New test.
+ * gas/arm/thumb2_it_bad.d: New test.
+ * gas/arm/thumb2_it_bad.l: New test.
+ * gas/arm/thumb2_it_bad.s: New test.
+
+2006-03-17 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb32.d: Add ldm and stm tests.
+ * gas/arm/thumb32.s: Ditto.
+
+2006-03-16 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * gas/bfin/shift2.s: Add new tests.
+ * gas/bfin/shift.d: Match changed disassembler behaviour.
+ * gas/bfin/parallel2.d: Likewise.
+ * gas/bfin/shift2.d: Likewise; also match new tests.
+
+2006-03-16 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/svc.d: New test.
+ * gas/arm/svc.s: New test.
+ * gas/arm/inst.d: Accept svc mnemonic.
+ * gas/arm/thumb.d: Ditto.
+ * gas/arm/wince_inst.d: Ditto.
+
+2006-03-09 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/nomapping.d: New test.
+ * gas/arm/nomapping.s: New test.
+
+2006-03-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/2428
+ * gas/i386/i386.exp: Add rep, rep-suffix, x86-64-rep and
+ x86-64-rep-suffix.
+
+ * gas/i386/naked.d: Replace repz with rep.
+ * gas/i386/x86_64.d: Likewise.
+
+ * gas/i386/rep-suffix.d: New file.
+ * gas/i386/rep-suffix.s: Likewise.
+ * gas/i386/rep.d: Likewise.
+ * gas/i386/rep.s: Likewise.
+ * gas/i386/x86-64-rep-suffix.d: Likewise.
+ * gas/i386/x86-64-rep-suffix.s: Likewise.
+ * gas/i386/x86-64-rep.d: Likewise.
+ * gas/i386/x86-64-rep.s: Likewise.
+
+2006-03-07 Richard Sandiford <richard@codesourcery.com>
+
+ * gas/arm/abs12.s, gas/arm/abs12.d: New test.
+ * gas/arm/pic.d: Skip for *-*-vxworks*...
+ * gas/arm/pic_vxworks.d: ...use this version instead.
+ * gas/arm/unwind_vxworks.d: Fix expected output.
+
+2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gas/m68k/arch-cpu-1.s: Tweak.
+ * gas/m68k/arch-cpu-1.d: Tweak.
+
+2006-02-28 Jan Beulich <jbeulich@novell.com>
+
+ * gas/all/altmacro.s: Adjust.
+ * gas/all/altmac2.s: Adjust.
+
+2006-02-28 Jan Beulich <jbeulich@novell.com>
+
+ * gas/macros/paren[sd]: New.
+ * gas/macros/macros.exp: Run new test.
+
+2006-02-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/i386.exp: Add merom and x86-64-merom.
+
+ * gas/i386/merom.d: New file.
+ * gas/i386/merom.s: Likewise.
+ * gas/i386/x86-64-merom.d: Likewise.
+ * gas/i386/x86-64-merom.s: Likewise.
+
+2006-02-24 David S. Miller <davem@sunset.davemloft.net>
+
+ * gas/sparc/rdhpr.s: New test.
+ * gas/sparc/rdhpr.d: New test.
+ * gas/sparc/wrhpr.s: New test.
+ * gas/sparc/wrhpr.d: New test.
+ * gas/sparc/window.s: New test.
+ * gas/sparc/window.d: New test.
+ * gas/sparc/rdpr.s: Add case for reading %gl register.
+ * gas/sparc/rdpr.d: Likewise.
+ * gas/sparc/wrpr.s: Add case for writing %gl register.
+ * gas/sparc/wrpr.d: Likewise.
+ * gas/sparc/sparc.exp: Update for new tests.
+
+2006-02-24 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb32.d: Fix expected msr and mrs output.
+ * gas/arm/arch7.d: New test.
+ * gas/arm/arch7.s: New test.
+ * gas/arm/arch7m-bad.l: New test.
+ * gas/arm/arch7m-bad.d: New test.
+ * gas/arm/arch7m-bad.s: New test.
+
+2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/ia64/opc-i.s: Add tests for tf.
+ * gas/ia64/pseudo.s: Likewise.
+ * gas/ia64/opc-i.d: Updated.
+ * gas/ia64/pseudo.d: Likewise.
+
+2006-02-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/ia64/dv-raw-err.s: Add check for vmsw.0.
+ * gas/ia64/dv-raw-err.l: Updated.
+
+ * gas/ia64/opc-b.s: Add vmsw.0 and vmsw.1.
+ * gas/ia64/opc-b.d: Updated.
+
+2005-02-22 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb32.d: Fix expected pld opcode.
+
+2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
+ Anil Paranjape <anilp1@kpitcummins.com>
+ Shilin Shakti <shilins@kpitcummins.com>
+
+ * gas/xc16x: New directory.
+ * gas/xc16x/xc16x.exp: New file
+ * gas/xc16x/add.s: New file
+ * gas/xc16x/add_test.s: New file
+ * gas/xc16x/addb.s: New file
+ * gas/xc16x/addc.s: New file
+ * gas/xc16x/addcb.s: New file
+ * gas/xc16x/and.s: New file
+ * gas/xc16x/andb.s: New file
+ * gas/xc16x/bfldl.s: New file
+ * gas/xc16x/bit.s: New file
+ * gas/xc16x/calla.s: New file
+ * gas/xc16x/calli.s: New file
+ * gas/xc16x/cmp.s: New file
+ * gas/xc16x/cmp_test.s: New file
+ * gas/xc16x/cmpb.s: New file
+ * gas/xc16x/cmpi.s: New file
+ * gas/xc16x/cpl.s: New file
+ * gas/xc16x/div.s: New file
+ * gas/xc16x/jmpa.s: New file
+ * gas/xc16x/jmpi.s: New file
+ * gas/xc16x/jmpr.s: New file
+ * gas/xc16x/mov.s: New file
+ * gas/xc16x/mov_test.s: New file
+ * gas/xc16x/movb.s: New file
+ * gas/xc16x/movbs.s: New file
+ * gas/xc16x/movbz.s: New file
+ * gas/xc16x/mul.s: New file
+ * gas/xc16x/neg.s: New file
+ * gas/xc16x/nop.s: New file
+ * gas/xc16x/or.s: New file
+ * gas/xc16x/orb.s: New file
+ * gas/xc16x/prior.s: New file
+ * gas/xc16x/pushpop.s: New file
+ * gas/xc16x/ret.s: New file
+ * gas/xc16x/scxt.s: New file
+ * gas/xc16x/shlrol.s: New file
+ * gas/xc16x/sub.s: New file
+ * gas/xc16x/sub_test.s: New file
+ * gas/xc16x/subb.s: New file
+ * gas/xc16x/subcb.s: New file
+ * gas/xc16x/syscontrol1.s: New file
+ * gas/xc16x/syscontrol2.s: New file
+ * gas/xc16x/trap.s: New file
+ * gas/xc16x/xor.s: New file
+ * gas/xc16x/xorb.s: New file
+
+2006-02-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/x86-64-crx-suffix.d: Undo the last change.
+
+2006-02-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/i386.exp: Add "x86-64-drx" and "x86-64-drx-suffix".
+
+ * gas/i386/x86-64-crx-suffix.d: Minor update.
+
+ * gas/i386/x86-64-drx-suffix.d: New file.
+ * gas/i386/x86-64-drx.d: Likewise.
+ * gas/i386/x86-64-drx.s: Likewise.
+
+2006-02-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/i386.exp: Add "x86-64-crx" and "x86-64-crx-suffix".
+
+ * gas/i386/x86-64-crx-suffix.d: New file.
+ * gas/i386/x86-64-crx.d: Likewise.
+ * gas/i386/x86-64-crx.s: Likewise.
+
+2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gas/m68k/all.exp: Add arch-cpu-1 test.
+ * gas/m68k/arch-cpu-1.[sd]: New.
+
+2005-02-02 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/thumb2_invert.d: New test.
+ * gas/arm/thumb2_invert.s: New test.
+
+2006-01-31 Paul Brook <paul@codesourcery.com>
+
+ * gas/arm/iwmmxt-bad.s: Add check for bad register name.
+ * gas/arm/iwmmxt-bad.l: Ditto.
+
+2006-01-18 Arnold Metselaar <arnoldm@sourceware.org>
+
+ * gas/z80/z80.exp: Add offset.
+ * gas/z80/offset.d: New file.
+ * gas/z80/offset.s: New file.
+
+2006-01-16 Paul Brook <paul@codesourcery.com>
+
+ * gas/m68k/all.exp: Add mcf-fpu.
+ * gas/m68k/mcf-fpu.d: New file.
+ * gas/m68k/mcf-fpu.s: New file.
+
+2006-01-11 Nick Clifton <nickc@redhat.com>
+
+ * gas/tic54x/address.d: Work with 64bit hosts.
+ * gas/tic54x/addrfar.d: Likewise.
+ * gas/tic54x/align.d: Likewise.
+ * gas/tic54x/all-opcodes.d: Likewise.
+ * gas/tic54x/asg.d: Likewise.
+ * gas/tic54x/cons.d: Likewise.
+ * gas/tic54x/consfar.d: Likewise.
+ * gas/tic54x/extaddr.d: Likewise.
+ * gas/tic54x/field.d: Likewise.
+ * gas/tic54x/labels.d: Likewise.
+ * gas/tic54x/loop.d: Likewise.
+ * gas/tic54x/lp.d: Likewise.
+ * gas/tic54x/macro.d: Likewise.
+ * gas/tic54x/math.d: Likewise.
+ * gas/tic54x/opcodes.d: Likewise.
+ * gas/tic54x/sections.d: Likewise.
+ * gas/tic54x/set.d: Likewise.
+ * gas/tic54x/struct.d: Likewise.
+ * gas/tic54x/subsym.d: Likewise.
+
+2006-01-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/2117
+ * gas/ia64/ia64.exp: Add ltoff22x-2, ltoff22x-3, ltoff22x-4 and
+ ltoff22x-5.
+
+ * gas/ia64/ltoff22x-2.d: New file.
+ * gas/ia64/ltoff22x-2.s: Likewise.
+ * gas/ia64/ltoff22x-3.d: Likewise.
+ * gas/ia64/ltoff22x-3.s: Likewise.
+ * gas/ia64/ltoff22x-4.d: Likewise.
+ * gas/ia64/ltoff22x-4.s: Likewise.
+ * gas/ia64/ltoff22x-5.d: Likewise.
+ * gas/ia64/ltoff22x-5.s: Likewise.
+
+2006-01-03 Hans-Peter Nilsson <hp@bitrange.com>
+
+ PR gas/2101
+ * gas/mmix/hex2.s, gas/mmix/hex2.d: New test.
+
+For older changes see ChangeLog-2005
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/gas/testsuite/gas/all/gas.exp b/gas/testsuite/gas/all/gas.exp
index 928dd88348e2..cb8c6777a432 100644
--- a/gas/testsuite/gas/all/gas.exp
+++ b/gas/testsuite/gas/all/gas.exp
@@ -16,7 +16,10 @@ gas_test "p2425.s" "" "" "pcrel values in assignment"
# The ".space" directive is taken care of in the C54x-specific tests, so fail
# here
#
-if { [istarget hppa*-*-*] || [istarget *c54x*-*-*] } then {
+# The test also doesn't work on mep targets, since they use RELC, and it
+# will avoid simplifying the expression since it conservatively assumes
+# ugly expressions can be saved until link-time.
+if { [istarget hppa*-*-*] || [istarget *c54x*-*-*] || [istarget mep*-*-*]} then {
setup_xfail *-*-*
fail "simplifiable double subtraction"
} else {
@@ -80,13 +83,18 @@ case $target_triplet in {
default {
setup_xfail "*c30*-*-*" "*c4x*-*-*" "pdp11-*-*"
run_dump_test redef
+ # The next two tests can fail if the target does not convert fixups
+ # against ordinary symbols into relocations against section symbols.
+ # This is usually revealed by the error message:
+ # symbol `sym' required but not present
setup_xfail "*c30*-*-*" "*c4x*-*-*" "*arm*-*-*aout*" "*arm*-*-*coff" \
"*arm*-*-pe" "crx*-*-*" "h8300*-*-*" "m68hc*-*-*" "maxq-*-*" \
- "pdp11-*-*" "vax*-*-*" "z8k-*-*"
+ "mn10300-*-*" "pdp11-*-*" "vax*-*-*" "z8k-*-*" "cr16-*-*"
run_dump_test redef2
setup_xfail "*-*-aix*" "*-*-coff" "*-*-cygwin" "*-*-mingw*" "*-*-pe*" \
"bfin-*-*" "*c4x*-*-*" "crx*-*-*" "h8300*-*-*" "hppa*-*-hpux*" \
- "m68hc*-*-*" "maxq-*-*" "or32-*-*" "pdp11-*-*" "vax*-*-*" "z8k-*-*"
+ "m68hc*-*-*" "maxq-*-*" "mn10300-*-*" "or32-*-*" "pdp11-*-*" \
+ "vax*-*-*" "z8k-*-*" "cr16-*-*"
run_dump_test redef3
setup_xfail "*c4x*-*-*"
gas_test_error "redef4.s" "" ".set for symbol already used as label"
@@ -207,6 +215,7 @@ if { ([istarget *-*-coff*] && ![istarget *arm*-*-coff] && ![istarget thumb*-*-
|| [istarget i*86-*-isc*] \
|| [istarget i*86-*-go32*] \
|| [istarget i*86-*-cygwin*] \
+ || [istarget x86_64-*-mingw*] \
|| [istarget i*86-*-*nt] \
|| [istarget i*86-*-interix*] \
|| ([istarget i960-*-vxworks5.*] && ![istarget i960-*-vxworks5.0*]) } {
@@ -256,6 +265,11 @@ if { ([istarget "i*86-*-*pe*"] && ![istarget "i*86-*-openbsd*"]) \
run_dump_test assign
run_dump_test sleb128
+# .byte is 32 bits on tic4x, and .p2align isn't supported on tic54x
+if { ![istarget "tic4x*-*-*"] && ![istarget "tic54x*-*-*"] } {
+ run_dump_test relax
+}
+
# .quad is 16 bytes on i960.
if { ![istarget "i960-*-*"] } {
run_dump_test quad
diff --git a/gas/testsuite/gas/all/relax.d b/gas/testsuite/gas/all/relax.d
new file mode 100644
index 000000000000..1e581c2695b0
--- /dev/null
+++ b/gas/testsuite/gas/all/relax.d
@@ -0,0 +1,13 @@
+#objdump : -s -j .data -j "\$DATA\$"
+#name : relax .uleb128
+
+.*: .*
+
+Contents of section .*
+ 0000 01020381 01000000 00000000 00000000.*
+#...
+ 0080 00000004 ffff0500 06078380 01000000.*
+#...
+ 4080 00000000 00000000 00000008 ffffffff.*
+ 4090 09090909 09090909 09090909 09090909.*
+#pass
diff --git a/gas/testsuite/gas/all/relax.s b/gas/testsuite/gas/all/relax.s
new file mode 100644
index 000000000000..104a8956bd6a
--- /dev/null
+++ b/gas/testsuite/gas/all/relax.s
@@ -0,0 +1,20 @@
+ .data
+ .byte 1, 2, 3
+ .uleb128 L2 - L1
+L1:
+ .space 128 - 2
+ .byte 4
+ .p2align 1, 0xff
+L2:
+ .byte 5
+
+ .p2align 2
+ .byte 6, 7
+ .uleb128 L4 - L3
+L3:
+ .space 128*128 - 2
+ .byte 8
+ .p2align 2, 0xff
+L4:
+ .byte 9
+ .p2align 4, 9
diff --git a/gas/testsuite/gas/alpha/alpha.exp b/gas/testsuite/gas/alpha/alpha.exp
index da785ae04043..04d99329dd7a 100644
--- a/gas/testsuite/gas/alpha/alpha.exp
+++ b/gas/testsuite/gas/alpha/alpha.exp
@@ -2,19 +2,6 @@
# Some generic alpha tests
#
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "alpha $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
if { [istarget alpha*-*-*] } then {
set elf [expr [istarget *-*-elf*] \
diff --git a/gas/testsuite/gas/arm/arch4t.d b/gas/testsuite/gas/arm/arch4t.d
index 0fdaa8fdecbe..f7e343f03bc1 100644
--- a/gas/testsuite/gas/arm/arch4t.d
+++ b/gas/testsuite/gas/arm/arch4t.d
@@ -11,14 +11,14 @@ Disassembly of section .text:
0+0c <[^>]+> e1d540f0 ? ldrsh r4, \[r5\]
0+10 <[^>]+> e19140d3 ? ldrsb r4, \[r1, r3\]
0+14 <[^>]+> e1b410f4 ? ldrsh r1, \[r4, r4\]!
-0+18 <[^>]+> 011510d3 ? ldreqsb r1, \[r5, -r3\]
-0+1c <[^>]+> 109620b7 ? ldrneh r2, \[r6\], r7
-0+20 <[^>]+> 309720f8 ? ldrccsh r2, \[r7\], r8
+0+18 <[^>]+> 011510d3 ? ldrsbeq r1, \[r5, -r3\]
+0+1c <[^>]+> 109620b7 ? ldrhne r2, \[r6\], r7
+0+20 <[^>]+> 309720f8 ? ldrshcc r2, \[r7\], r8
0+24 <[^>]+> e1d32fdf ? ldrsb r2, \[r3, #255\]
0+28 <[^>]+> e1541ffa ? ldrsh r1, \[r4, #-250\]
0+2c <[^>]+> e1d51fd0 ? ldrsb r1, \[r5, #240\]
0+30 <[^>]+> e1cf23b0 ? strh r2, \[pc, #48\] ; 0+68 <[^>]+>
-0+34 <[^>]+> 11c330b0 ? strneh r3, \[r3\]
+0+34 <[^>]+> 11c330b0 ? strhne r3, \[r3\]
0+38 <[^>]+> e328f002 ? msr CPSR_f, #2 ; 0x2
0+3c <[^>]+> e121f003 ? msr CPSR_c, r3
0+40 <[^>]+> e122f004 ? msr CPSR_x, r4
diff --git a/gas/testsuite/gas/arm/arch7.d b/gas/testsuite/gas/arm/arch7.d
index 992948b83314..9cf73edf1891 100644
--- a/gas/testsuite/gas/arm/arch7.d
+++ b/gas/testsuite/gas/arm/arch7.d
@@ -1,6 +1,5 @@
#name: ARM V7 instructions
#as: -march=armv7r
-#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
#objdump: -dr --prefix-addresses --show-raw-insn
.*: +file format .*arm.*
@@ -29,8 +28,8 @@ Disassembly of section .text:
0+050 <[^>]*> f995 f000 pli \[r5\]
0+054 <[^>]*> f995 ffff pli \[r5, #4095\]
0+058 <[^>]*> f915 fcff pli \[r5, #-255\]
-0+05c <[^>]*> f99f ffff pli \[pc, #4095\] ; 0000105f <[^>]*>
-0+060 <[^>]*> f91f ffff pli \[pc, #-4095\] ; fffff065 <[^>]*>
+0+05c <[^>]*> f99f ffff pli \[pc, #4095\] ; 0+0105f <[^>]*>
+0+060 <[^>]*> f91f ffff pli \[pc, #-4095\] ; f+ff065 <[^>]*>
0+064 <[^>]*> f3af 80f0 dbg #0
0+068 <[^>]*> f3af 80ff dbg #15
0+06c <[^>]*> f3bf 8f5f dmb sy
diff --git a/gas/testsuite/gas/arm/archv6.d b/gas/testsuite/gas/arm/archv6.d
index 1dbaad3a714f..6015a4707ec9 100644
--- a/gas/testsuite/gas/arm/archv6.d
+++ b/gas/testsuite/gas/arm/archv6.d
@@ -13,13 +13,13 @@ Disassembly of section .text:
0+014 <[^>]*> fc4570c3 ? mcrr2 0, 12, r7, r5, cr3
0+018 <[^>]*> fc5570c3 ? mrrc2 0, 12, r7, r5, cr3
0+01c <[^>]*> e6852018 ? pkhbt r2, r5, r8
-0+020 <[^>]*> e6852198 ? pkhbt r2, r5, r8, LSL #3
-0+024 <[^>]*> e6852198 ? pkhbt r2, r5, r8, LSL #3
-0+028 <[^>]*> 06852198 ? pkhbteq r2, r5, r8, LSL #3
+0+020 <[^>]*> e6852198 ? pkhbt r2, r5, r8, lsl #3
+0+024 <[^>]*> e6852198 ? pkhbt r2, r5, r8, lsl #3
+0+028 <[^>]*> 06852198 ? pkhbteq r2, r5, r8, lsl #3
0+02c <[^>]*> e6882015 ? pkhbt r2, r8, r5
-0+030 <[^>]*> e68521d8 ? pkhtb r2, r5, r8, ASR #3
-0+034 <[^>]*> e68521d8 ? pkhtb r2, r5, r8, ASR #3
-0+038 <[^>]*> 068521d8 ? pkhtbeq r2, r5, r8, ASR #3
+0+030 <[^>]*> e68521d8 ? pkhtb r2, r5, r8, asr #3
+0+034 <[^>]*> e68521d8 ? pkhtb r2, r5, r8, asr #3
+0+038 <[^>]*> 068521d8 ? pkhtbeq r2, r5, r8, asr #3
0+03c <[^>]*> e6242f17 ? qadd16 r2, r4, r7
0+040 <[^>]*> 16242f17 ? qadd16ne r2, r4, r7
0+044 <[^>]*> e6242f97 ? qadd8 r2, r4, r7
@@ -49,19 +49,19 @@ Disassembly of section .text:
0+0a4 <[^>]*> e6142f17 ? sadd16 r2, r4, r7
0+0a8 <[^>]*> 16142f17 ? sadd16ne r2, r4, r7
0+0ac <[^>]*> e6b42075 ? sxtah r2, r4, r5
-0+0b0 <[^>]*> e6b42475 ? sxtah r2, r4, r5, ROR #8
+0+0b0 <[^>]*> e6b42475 ? sxtah r2, r4, r5, ror #8
0+0b4 <[^>]*> 16b42075 ? sxtahne r2, r4, r5
-0+0b8 <[^>]*> 16b42475 ? sxtahne r2, r4, r5, ROR #8
+0+0b8 <[^>]*> 16b42475 ? sxtahne r2, r4, r5, ror #8
0+0bc <[^>]*> e6142f97 ? sadd8 r2, r4, r7
0+0c0 <[^>]*> 16142f97 ? sadd8ne r2, r4, r7
0+0c4 <[^>]*> e6842075 ? sxtab16 r2, r4, r5
-0+0c8 <[^>]*> e6842475 ? sxtab16 r2, r4, r5, ROR #8
+0+0c8 <[^>]*> e6842475 ? sxtab16 r2, r4, r5, ror #8
0+0cc <[^>]*> 16842075 ? sxtab16ne r2, r4, r5
-0+0d0 <[^>]*> 16842475 ? sxtab16ne r2, r4, r5, ROR #8
+0+0d0 <[^>]*> 16842475 ? sxtab16ne r2, r4, r5, ror #8
0+0d4 <[^>]*> e6a42075 ? sxtab r2, r4, r5
-0+0d8 <[^>]*> e6a42475 ? sxtab r2, r4, r5, ROR #8
+0+0d8 <[^>]*> e6a42475 ? sxtab r2, r4, r5, ror #8
0+0dc <[^>]*> 16a42075 ? sxtabne r2, r4, r5
-0+0e0 <[^>]*> 16a42475 ? sxtabne r2, r4, r5, ROR #8
+0+0e0 <[^>]*> 16a42475 ? sxtabne r2, r4, r5, ror #8
0+0e4 <[^>]*> e6142f37 ? saddaddx r2, r4, r7
0+0e8 <[^>]*> 16142f37 ? saddaddxne r2, r4, r7
0+0ec <[^>]*> e6821fb3 ? sel r1, r2, r3
@@ -116,11 +116,11 @@ Disassembly of section .text:
0+1b0 <[^>]*> d701f352 ? smusdle r1, r2, r3
0+1b4 <[^>]*> e701f372 ? smusdx r1, r2, r3
0+1b8 <[^>]*> d701f372 ? smusdxle r1, r2, r3
-0+1bc <[^>]*> f8cd0510 ? srsia #16
-0+1c0 <[^>]*> f9ed0510 ? srsib #16!
+0+1bc <[^>]*> f8cd0510 ? srsia sp, #16
+0+1c0 <[^>]*> f9ed0510 ? srsib sp!, #16
0+1c4 <[^>]*> e6a01012 ? ssat r1, #1, r2
-0+1c8 <[^>]*> e6a01152 ? ssat r1, #1, r2, ASR #2
-0+1cc <[^>]*> e6a01112 ? ssat r1, #1, r2, LSL #2
+0+1c8 <[^>]*> e6a01152 ? ssat r1, #1, r2, asr #2
+0+1cc <[^>]*> e6a01112 ? ssat r1, #1, r2, lsl #2
0+1d0 <[^>]*> e6a01f31 ? ssat16 r1, #1, r1
0+1d4 <[^>]*> d6a01f31 ? ssat16le r1, #1, r1
0+1d8 <[^>]*> e6142f77 ? ssub16 r2, r4, r7
@@ -131,34 +131,34 @@ Disassembly of section .text:
0+1ec <[^>]*> 16142f57 ? ssubaddxne r2, r4, r7
0+1f0 <[^>]*> e1831f92 ? strex r1, r2, \[r3\]
0+1f4 <[^>]*> 11831f92 ? strexne r1, r2, \[r3\]
-0+1f8 <[^>]*> e6bf2075 ? sxth r2,r5
-0+1fc <[^>]*> e6bf2475 ? sxth r2,r5, ROR #8
-0+200 <[^>]*> 16bf2075 ? sxthne r2,r5
-0+204 <[^>]*> 16bf2475 ? sxthne r2,r5, ROR #8
-0+208 <[^>]*> e68f2075 ? sxtb16 r2,r5
-0+20c <[^>]*> e68f2475 ? sxtb16 r2,r5, ROR #8
-0+210 <[^>]*> 168f2075 ? sxtb16ne r2,r5
-0+214 <[^>]*> 168f2475 ? sxtb16ne r2,r5, ROR #8
-0+218 <[^>]*> e6af2075 ? sxtb r2,r5
-0+21c <[^>]*> e6af2475 ? sxtb r2,r5, ROR #8
-0+220 <[^>]*> 16af2075 ? sxtbne r2,r5
-0+224 <[^>]*> 16af2475 ? sxtbne r2,r5, ROR #8
+0+1f8 <[^>]*> e6bf2075 ? sxth r2, r5
+0+1fc <[^>]*> e6bf2475 ? sxth r2, r5, ror #8
+0+200 <[^>]*> 16bf2075 ? sxthne r2, r5
+0+204 <[^>]*> 16bf2475 ? sxthne r2, r5, ror #8
+0+208 <[^>]*> e68f2075 ? sxtb16 r2, r5
+0+20c <[^>]*> e68f2475 ? sxtb16 r2, r5, ror #8
+0+210 <[^>]*> 168f2075 ? sxtb16ne r2, r5
+0+214 <[^>]*> 168f2475 ? sxtb16ne r2, r5, ror #8
+0+218 <[^>]*> e6af2075 ? sxtb r2, r5
+0+21c <[^>]*> e6af2475 ? sxtb r2, r5, ror #8
+0+220 <[^>]*> 16af2075 ? sxtbne r2, r5
+0+224 <[^>]*> 16af2475 ? sxtbne r2, r5, ror #8
0+228 <[^>]*> e6542f17 ? uadd16 r2, r4, r7
0+22c <[^>]*> 16542f17 ? uadd16ne r2, r4, r7
0+230 <[^>]*> e6f32075 ? uxtah r2, r3, r5
-0+234 <[^>]*> e6f32475 ? uxtah r2, r3, r5, ROR #8
+0+234 <[^>]*> e6f32475 ? uxtah r2, r3, r5, ror #8
0+238 <[^>]*> 16f32075 ? uxtahne r2, r3, r5
-0+23c <[^>]*> 16f32475 ? uxtahne r2, r3, r5, ROR #8
+0+23c <[^>]*> 16f32475 ? uxtahne r2, r3, r5, ror #8
0+240 <[^>]*> e6542f97 ? uadd8 r2, r4, r7
0+244 <[^>]*> 16542f97 ? uadd8ne r2, r4, r7
0+248 <[^>]*> e6c32075 ? uxtab16 r2, r3, r5
-0+24c <[^>]*> e6c32475 ? uxtab16 r2, r3, r5, ROR #8
+0+24c <[^>]*> e6c32475 ? uxtab16 r2, r3, r5, ror #8
0+250 <[^>]*> 16c32075 ? uxtab16ne r2, r3, r5
-0+254 <[^>]*> 16c32475 ? uxtab16ne r2, r3, r5, ROR #8
+0+254 <[^>]*> 16c32475 ? uxtab16ne r2, r3, r5, ror #8
0+258 <[^>]*> e6e32075 ? uxtab r2, r3, r5
-0+25c <[^>]*> e6e32475 ? uxtab r2, r3, r5, ROR #8
+0+25c <[^>]*> e6e32475 ? uxtab r2, r3, r5, ror #8
0+260 <[^>]*> 16e32075 ? uxtabne r2, r3, r5
-0+264 <[^>]*> 16e32475 ? uxtabne r2, r3, r5, ROR #8
+0+264 <[^>]*> 16e32475 ? uxtabne r2, r3, r5, ror #8
0+268 <[^>]*> e6542f37 ? uaddsubx r2, r4, r7
0+26c <[^>]*> 16542f37 ? uaddsubxne r2, r4, r7
0+270 <[^>]*> e6742f17 ? uhadd16 r2, r4, r7
@@ -192,28 +192,32 @@ Disassembly of section .text:
0+2e0 <[^>]*> e7814312 ? usada8 r1, r2, r3, r4
0+2e4 <[^>]*> 17814312 ? usada8ne r1, r2, r3, r4
0+2e8 <[^>]*> e6ef1012 ? usat r1, #15, r2
-0+2ec <[^>]*> e6ef1252 ? usat r1, #15, r2, ASR #4
-0+2f0 <[^>]*> e6ef1212 ? usat r1, #15, r2, LSL #4
+0+2ec <[^>]*> e6ef1252 ? usat r1, #15, r2, asr #4
+0+2f0 <[^>]*> e6ef1212 ? usat r1, #15, r2, lsl #4
0+2f4 <[^>]*> e6ef1f32 ? usat16 r1, #15, r2
0+2f8 <[^>]*> d6ef1f32 ? usat16le r1, #15, r2
0+2fc <[^>]*> d6ef1012 ? usatle r1, #15, r2
-0+300 <[^>]*> d6ef1252 ? usatle r1, #15, r2, ASR #4
-0+304 <[^>]*> d6ef1212 ? usatle r1, #15, r2, LSL #4
+0+300 <[^>]*> d6ef1252 ? usatle r1, #15, r2, asr #4
+0+304 <[^>]*> d6ef1212 ? usatle r1, #15, r2, lsl #4
0+308 <[^>]*> e6542f77 ? usub16 r2, r4, r7
0+30c <[^>]*> 16542f77 ? usub16ne r2, r4, r7
0+310 <[^>]*> e6542ff7 ? usub8 r2, r4, r7
0+314 <[^>]*> 16542ff7 ? usub8ne r2, r4, r7
0+318 <[^>]*> e6542f57 ? usubaddx r2, r4, r7
0+31c <[^>]*> 16542f57 ? usubaddxne r2, r4, r7
-0+320 <[^>]*> e6ff2075 ? uxth r2,r5
-0+324 <[^>]*> e6ff2475 ? uxth r2,r5, ROR #8
-0+328 <[^>]*> 16ff2075 ? uxthne r2,r5
-0+32c <[^>]*> 16ff2475 ? uxthne r2,r5, ROR #8
-0+330 <[^>]*> e6cf2075 ? uxtb16 r2,r5
-0+334 <[^>]*> e6cf2475 ? uxtb16 r2,r5, ROR #8
-0+338 <[^>]*> 16cf2075 ? uxtb16ne r2,r5
-0+33c <[^>]*> 16cf2475 ? uxtb16ne r2,r5, ROR #8
-0+340 <[^>]*> e6ef2075 ? uxtb r2,r5
-0+344 <[^>]*> e6ef2475 ? uxtb r2,r5, ROR #8
-0+348 <[^>]*> 16ef2075 ? uxtbne r2,r5
-0+34c <[^>]*> 16ef2475 ? uxtbne r2,r5, ROR #8
+0+320 <[^>]*> e6ff2075 ? uxth r2, r5
+0+324 <[^>]*> e6ff2475 ? uxth r2, r5, ror #8
+0+328 <[^>]*> 16ff2075 ? uxthne r2, r5
+0+32c <[^>]*> 16ff2475 ? uxthne r2, r5, ror #8
+0+330 <[^>]*> e6cf2075 ? uxtb16 r2, r5
+0+334 <[^>]*> e6cf2475 ? uxtb16 r2, r5, ror #8
+0+338 <[^>]*> 16cf2075 ? uxtb16ne r2, r5
+0+33c <[^>]*> 16cf2475 ? uxtb16ne r2, r5, ror #8
+0+340 <[^>]*> e6ef2075 ? uxtb r2, r5
+0+344 <[^>]*> e6ef2475 ? uxtb r2, r5, ror #8
+0+348 <[^>]*> 16ef2075 ? uxtbne r2, r5
+0+34c <[^>]*> 16ef2475 ? uxtbne r2, r5, ror #8
+0+350 <[^>]*> f10a00ca ? cpsie if,#10
+0+354 <[^>]*> f10a00d5 ? cpsie if,#21
+0+358 <[^>]*> f8cd0510 ? srsia sp, #16
+0+35c <[^>]*> f9ed0510 ? srsib sp!, #16
diff --git a/gas/testsuite/gas/arm/archv6.s b/gas/testsuite/gas/arm/archv6.s
index 50378b7c3798..85f05c185d02 100644
--- a/gas/testsuite/gas/arm/archv6.s
+++ b/gas/testsuite/gas/arm/archv6.s
@@ -214,3 +214,7 @@ label:
uxtb r2, r5, ROR #8
uxtbne r2, r5
uxtbne r2, r5, ROR #8
+ cpsie if, #10
+ cpsie if, #21
+ srsia sp, #16
+ srsib sp!, #16
diff --git a/gas/testsuite/gas/arm/archv6t2.d b/gas/testsuite/gas/arm/archv6t2.d
index 8e8b0387a336..e6e57c843b90 100644
--- a/gas/testsuite/gas/arm/archv6t2.d
+++ b/gas/testsuite/gas/arm/archv6t2.d
@@ -24,10 +24,10 @@ Disassembly of section .text:
0+40 <[^>]+> e7a00059 sbfx r0, r9, #0, #1
0+44 <[^>]+> e7a008d0 sbfx r0, r0, #17, #1
0+48 <[^>]+> e7b10050 sbfx r0, r0, #0, #18
-0+4c <[^>]+> e3ff0f30 rbit r0, r0
-0+50 <[^>]+> 13ff0f30 rbitne r0, r0
-0+54 <[^>]+> e3ff9f30 rbit r9, r0
-0+58 <[^>]+> e3ff0f39 rbit r0, r9
+0+4c <[^>]+> e6ff0f30 rbit r0, r0
+0+50 <[^>]+> 16ff0f30 rbitne r0, r0
+0+54 <[^>]+> e6ff9f30 rbit r9, r0
+0+58 <[^>]+> e6ff0f39 rbit r0, r9
0+5c <[^>]+> e0600090 mls r0, r0, r0, r0
0+60 <[^>]+> 10600090 mlsne r0, r0, r0, r0
0+64 <[^>]+> e0690090 mls r9, r0, r0, r0
@@ -44,7 +44,7 @@ Disassembly of section .text:
0+90 <[^>]+> e0f900f0 ldrsht r0, \[r9\]
0+94 <[^>]+> e0f900d0 ldrsbt r0, \[r9\]
0+98 <[^>]+> e0e900b0 strht r0, \[r9\]
-0+9c <[^>]+> 10f900b0 ldrneht r0, \[r9\]
+0+9c <[^>]+> 10f900b0 ldrhtne r0, \[r9\]
0+a0 <[^>]+> e0b090b9 ldrht r9, \[r0\], r9
0+a4 <[^>]+> e03090b9 ldrht r9, \[r0\], -r9
0+a8 <[^>]+> e0f099b9 ldrht r9, \[r0\], #153
diff --git a/gas/testsuite/gas/arm/arm-it.d b/gas/testsuite/gas/arm/arm-it.d
new file mode 100644
index 000000000000..674f815f1dec
--- /dev/null
+++ b/gas/testsuite/gas/arm/arm-it.d
@@ -0,0 +1,9 @@
+#name: ARM IT instruction
+#objdump: -dr --prefix-addresses --show-raw-insn
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0+000 <[^>]*> 03a00000 ? moveq r0, #0 ; 0x0
+0+004 <[^>]*> e1a0f00e ? mov pc, lr
diff --git a/gas/testsuite/gas/arm/arm-it.s b/gas/testsuite/gas/arm/arm-it.s
new file mode 100644
index 000000000000..f3c56e8c4b70
--- /dev/null
+++ b/gas/testsuite/gas/arm/arm-it.s
@@ -0,0 +1,8 @@
+ # Check that IT is accepted in ARM mode on older architectures
+ .text
+ .syntax unified
+ .arch armv4
+label1:
+ it eq
+ moveq r0, #0
+ mov pc, lr
diff --git a/gas/testsuite/gas/arm/arm3.d b/gas/testsuite/gas/arm/arm3.d
index 06323b1c0cdf..41b6b7eb8fdc 100644
--- a/gas/testsuite/gas/arm/arm3.d
+++ b/gas/testsuite/gas/arm/arm3.d
@@ -7,5 +7,5 @@
Disassembly of section .text:
0+0 <[^>]*> e1080091 ? swp r0, r1, \[r8\]
0+4 <[^>]*> e1423093 ? swpb r3, r3, \[r2\]
-0+8 <[^>]*> a1454091 ? swpgeb r4, r1, \[r5\]
+0+8 <[^>]*> a1454091 ? swpbge r4, r1, \[r5\]
0+c <[^>]*> e1a00000 ? nop \(mov r0,r0\)
diff --git a/gas/testsuite/gas/arm/arm7dm.d b/gas/testsuite/gas/arm/arm7dm.d
index ef47ca6c6689..43f64204e97a 100644
--- a/gas/testsuite/gas/arm/arm7dm.d
+++ b/gas/testsuite/gas/arm/arm7dm.d
@@ -11,7 +11,7 @@ Disassembly of section .text:
0+0c <[^>]+> e0a10394 ? umlal r0, r1, r4, r3
0+10 <[^>]+> 10c10493 ? smullne r0, r1, r3, r4
0+14 <[^>]+> e0d01b99 ? smulls r1, r0, r9, fp
-0+18 <[^>]+> 00b92994 ? umlaleqs r2, r9, r4, r9
+0+18 <[^>]+> 00b92994 ? umlalseq r2, r9, r4, r9
0+1c <[^>]+> a0eaee98 ? smlalge lr, sl, r8, lr
0+20 <[^>]+> e322f000 ? msr CPSR_x, #0 ; 0x0
0+24 <[^>]+> e1a00000 ? nop \(mov r0,r0\)
diff --git a/gas/testsuite/gas/arm/arm7t.d b/gas/testsuite/gas/arm/arm7t.d
index 17e4e9d4fb5e..37abd7a7781f 100644
--- a/gas/testsuite/gas/arm/arm7t.d
+++ b/gas/testsuite/gas/arm/arm7t.d
@@ -49,20 +49,20 @@ Disassembly of section .text:
0+9c <[^>]*> e1df03fc ? ldrsh r0, \[pc, #60\] ; 0+e0 <[^>]*>
0+a0 <[^>]*> e1df03f4 ? ldrsh r0, \[pc, #52\] ; 0+dc <[^>]*>
0+a4 <[^>]*> e19100b2 ? ldrh r0, \[r1, r2\]
-0+a8 <[^>]*> 119100b2 ? ldrneh r0, \[r1, r2\]
-0+ac <[^>]*> 819100b2 ? ldrhih r0, \[r1, r2\]
-0+b0 <[^>]*> b19100b2 ? ldrlth r0, \[r1, r2\]
+0+a8 <[^>]*> 119100b2 ? ldrhne r0, \[r1, r2\]
+0+ac <[^>]*> 819100b2 ? ldrhhi r0, \[r1, r2\]
+0+b0 <[^>]*> b19100b2 ? ldrhlt r0, \[r1, r2\]
0+b4 <[^>]*> e19100f2 ? ldrsh r0, \[r1, r2\]
-0+b8 <[^>]*> 119100f2 ? ldrnesh r0, \[r1, r2\]
-0+bc <[^>]*> 819100f2 ? ldrhish r0, \[r1, r2\]
-0+c0 <[^>]*> b19100f2 ? ldrltsh r0, \[r1, r2\]
+0+b8 <[^>]*> 119100f2 ? ldrshne r0, \[r1, r2\]
+0+bc <[^>]*> 819100f2 ? ldrshhi r0, \[r1, r2\]
+0+c0 <[^>]*> b19100f2 ? ldrshlt r0, \[r1, r2\]
0+c4 <[^>]*> e19100d2 ? ldrsb r0, \[r1, r2\]
-0+c8 <[^>]*> 119100d2 ? ldrnesb r0, \[r1, r2\]
-0+cc <[^>]*> 819100d2 ? ldrhisb r0, \[r1, r2\]
-0+d0 <[^>]*> b19100d2 ? ldrltsb r0, \[r1, r2\]
+0+c8 <[^>]*> 119100d2 ? ldrsbne r0, \[r1, r2\]
+0+cc <[^>]*> 819100d2 ? ldrsbhi r0, \[r1, r2\]
+0+d0 <[^>]*> b19100d2 ? ldrsblt r0, \[r1, r2\]
0+d4 <[^>]*> e1df00f4 ? ldrsh r0, \[pc, #4\] ; 0+e0 <[^>]*>
0+d8 <[^>]*> e1df00f4 ? ldrsh r0, \[pc, #4\] ; 0+e4 <[^>]*>
-0+dc <[^>]*> 00000000 ? andeq r0, r0, r0
+0+dc <[^>]*> 00000000 ? .*
[ ]*dc:.*fred
0+e0 <[^>]*> 0000c0de ? .*
0+e4 <[^>]*> 0000dead ? .*
diff --git a/gas/testsuite/gas/arm/armv1.d b/gas/testsuite/gas/arm/armv1.d
index 4e4c91376179..99e8471e2222 100644
--- a/gas/testsuite/gas/arm/armv1.d
+++ b/gas/testsuite/gas/arm/armv1.d
@@ -1,6 +1,7 @@
#objdump: -dr --prefix-addresses --show-raw-insn
#name: ARM v1 instructions
#as: -mcpu=arm7t
+#error-output: armv1.l
# Test the ARM v1 instructions
@@ -52,19 +53,19 @@ Disassembly of section .text:
0+a8 <[^>]*> e5c00000 ? strb r0, \[r0\]
0+ac <[^>]*> e4a10000 ? strt r0, \[r1\]
0+b0 <[^>]*> e4e10000 ? strbt r0, \[r1\]
-0+b4 <[^>]*> e8800001 ? stmia r0, {r0}
+0+b4 <[^>]*> e8800001 ? stm r0, {r0}
0+b8 <[^>]*> e9800001 ? stmib r0, {r0}
0+bc <[^>]*> e8000001 ? stmda r0, {r0}
0+c0 <[^>]*> e9000001 ? stmdb r0, {r0}
0+c4 <[^>]*> e9000001 ? stmdb r0, {r0}
0+c8 <[^>]*> e9800001 ? stmib r0, {r0}
-0+cc <[^>]*> e8800001 ? stmia r0, {r0}
+0+cc <[^>]*> e8800001 ? stm r0, {r0}
0+d0 <[^>]*> e8000001 ? stmda r0, {r0}
-0+d4 <[^>]*> e8900001 ? ldmia r0, {r0}
+0+d4 <[^>]*> e8900001 ? ldm r0, {r0}
0+d8 <[^>]*> e9900001 ? ldmib r0, {r0}
0+dc <[^>]*> e8100001 ? ldmda r0, {r0}
0+e0 <[^>]*> e9100001 ? ldmdb r0, {r0}
-0+e4 <[^>]*> e8900001 ? ldmia r0, {r0}
+0+e4 <[^>]*> e8900001 ? ldm r0, {r0}
0+e8 <[^>]*> e8100001 ? ldmda r0, {r0}
0+ec <[^>]*> e9100001 ? ldmdb r0, {r0}
0+f0 <[^>]*> e9900001 ? ldmib r0, {r0}
diff --git a/gas/testsuite/gas/arm/armv1.l b/gas/testsuite/gas/arm/armv1.l
new file mode 100644
index 000000000000..369f9d4a5105
--- /dev/null
+++ b/gas/testsuite/gas/arm/armv1.l
@@ -0,0 +1,5 @@
+[^:]*: Assembler messages:
+[^:]*:26: Warning: s suffix on comparison instruction is deprecated
+[^:]*:29: Warning: s suffix on comparison instruction is deprecated
+[^:]*:32: Warning: s suffix on comparison instruction is deprecated
+[^:]*:35: Warning: s suffix on comparison instruction is deprecated
diff --git a/gas/testsuite/gas/arm/backslash-at.d b/gas/testsuite/gas/arm/backslash-at.d
new file mode 100644
index 000000000000..a8992bdb4fac
--- /dev/null
+++ b/gas/testsuite/gas/arm/backslash-at.d
@@ -0,0 +1,17 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: Backslash-at for ARM
+
+.*: file format .*arm.*
+
+Disassembly of section .text:
+0+000 <.*>.*615c.*
+0+002 <foo> e3a00000 mov r0, #0 ; 0x0
+0+006 <foo\+0x4> e3a00000 mov r0, #0 ; 0x0
+0+00a <foo\+0x8> e3a00000 mov r0, #0 ; 0x0
+0+00e <foo\+0xc> e3a00001 mov r0, #1 ; 0x1
+0+012 <foo\+0x10> e3a00001 mov r0, #1 ; 0x1
+0+016 <foo\+0x14> e3a00001 mov r0, #1 ; 0x1
+0+01a <foo\+0x18> e3a00002 mov r0, #2 ; 0x2
+0+01e <foo\+0x1c> e3a00002 mov r0, #2 ; 0x2
+0+022 <foo\+0x20> e3a00002 mov r0, #2 ; 0x2
+#...
diff --git a/gas/testsuite/gas/arm/backslash-at.s b/gas/testsuite/gas/arm/backslash-at.s
new file mode 100644
index 000000000000..4975aea688f8
--- /dev/null
+++ b/gas/testsuite/gas/arm/backslash-at.s
@@ -0,0 +1,16 @@
+@ Check that \@ is not destroyed when assembling for the ARM.
+
+.macro bar
+ mov r0, #\@
+ mov r0, #\@@comment
+ mov r0, #\@ @comment
+.endm
+
+.byte '\\
+.byte '\a
+
+foo:
+ bar
+ bar
+ bar
+
diff --git a/gas/testsuite/gas/arm/copro.d b/gas/testsuite/gas/arm/copro.d
index 5f5dd110e99a..37d0f2d6fdb5 100644
--- a/gas/testsuite/gas/arm/copro.d
+++ b/gas/testsuite/gas/arm/copro.d
@@ -12,7 +12,7 @@ Disassembly of section .text:
0+008 <[^>]*> ed939500 cfldr32 mvfx9, \[r3\]
0+00c <[^>]*> edd1e108 ldfp f6, \[r1, #32\]
0+010 <[^>]*> 4db200ff ldcmi 0, cr0, \[r2, #1020\]!
-0+014 <[^>]*> 5cf31710 ldcpll 7, cr1, \[r3\], #64
+0+014 <[^>]*> 5cf31710 ldclpl 7, cr1, \[r3\], #64
0+018 <[^>]*> ed1f8001 ldc 0, cr8, \[pc, #-4\]
0+01c <[^>]*> ed830500 cfstr32 mvfx0, \[r3\]
0+020 <[^>]*> edc0f302 stcl 3, cr15, \[r0, #8\]
@@ -31,7 +31,7 @@ Disassembly of section .text:
0+054 <[^>]*> ecc52805 stcl 8, cr2, \[r5\], \{5\}
0+058 <[^>]*> fcd61906 ldc2l 9, cr1, \[r6\], \{6\}
0+05c <[^>]*> fcc70a07 stc2l 10, cr0, \[r7\], \{7\}
-0+060 <[^>]*> ecd88bff ldcl 11, cr8, \[r8\], \{255\}
+0+060 <[^>]*> ecd88cff ldcl 12, cr8, \[r8\], \{255\}
0+064 <[^>]*> ecc99cfe stcl 12, cr9, \[r9\], \{254\}
0+068 <[^>]*> ec507d04 mrrc 13, 0, r7, r0, cr4
0+06c <[^>]*> ec407e05 mcrr 14, 0, r7, r0, cr5
diff --git a/gas/testsuite/gas/arm/copro.s b/gas/testsuite/gas/arm/copro.s
index 334b000f4409..e6976329c756 100644
--- a/gas/testsuite/gas/arm/copro.s
+++ b/gas/testsuite/gas/arm/copro.s
@@ -33,7 +33,8 @@ bar:
stcl p8, c2, [r5], {5}
ldc2l 9, c1, [r6], {6}
stc2l p10, c0, [r7], {7}
- ldcl 11, c8, [r8], {255}
+ @ using '11' below results in an (invalid) Neon vldmia instruction.
+ ldcl 12, c8, [r8], {255}
stcl p12, c9, [r9], {254}
mrrc 13, 0, r7, r0, cr4
mcrr p14, 0, r7, r0, cr5
diff --git a/gas/testsuite/gas/arm/group-reloc-alu-encoding-bad.d b/gas/testsuite/gas/arm/group-reloc-alu-encoding-bad.d
new file mode 100644
index 000000000000..e10a6a7589ba
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-alu-encoding-bad.d
@@ -0,0 +1,3 @@
+#name: Group relocation tests, encoding failures (alu)
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#error-output: group-reloc-alu-encoding-bad.l
diff --git a/gas/testsuite/gas/arm/group-reloc-alu-encoding-bad.l b/gas/testsuite/gas/arm/group-reloc-alu-encoding-bad.l
new file mode 100644
index 000000000000..fe8827cec78b
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-alu-encoding-bad.l
@@ -0,0 +1,81 @@
+[^:]*: Assembler messages:
+[^:]*:23: Error: the offset 0x00011001 is not representable
+[^:]*:23: Error: the offset 0x00011001 is not representable
+[^:]*:23: Error: the offset 0x00011001 is not representable
+[^:]*:23: Error: the offset 0x00011001 is not representable
+[^:]*:23: Error: the offset 0x00011001 is not representable
+[^:]*:23: Error: the offset 0x00011001 is not representable
+[^:]*:23: Error: the offset 0x00011001 is not representable
+[^:]*:23: Error: the offset 0x00011001 is not representable
+[^:]*:23: Error: the offset 0x00011001 is not representable
+[^:]*:23: Error: the offset 0x00011001 is not representable
+[^:]*:24: Error: the offset 0x00011001 is not representable
+[^:]*:24: Error: the offset 0x00011001 is not representable
+[^:]*:24: Error: the offset 0x00011001 is not representable
+[^:]*:24: Error: the offset 0x00011001 is not representable
+[^:]*:24: Error: the offset 0x00011001 is not representable
+[^:]*:24: Error: the offset 0x00011001 is not representable
+[^:]*:24: Error: the offset 0x00011001 is not representable
+[^:]*:24: Error: the offset 0x00011001 is not representable
+[^:]*:24: Error: the offset 0x00011001 is not representable
+[^:]*:24: Error: the offset 0x00011001 is not representable
+[^:]*:25: Error: the offset 0x00011001 is not representable
+[^:]*:25: Error: the offset 0x00011001 is not representable
+[^:]*:25: Error: the offset 0x00011001 is not representable
+[^:]*:25: Error: the offset 0x00011001 is not representable
+[^:]*:25: Error: the offset 0x00011001 is not representable
+[^:]*:25: Error: the offset 0x00011001 is not representable
+[^:]*:25: Error: the offset 0x00011001 is not representable
+[^:]*:25: Error: the offset 0x00011001 is not representable
+[^:]*:25: Error: the offset 0x00011001 is not representable
+[^:]*:25: Error: the offset 0x00011001 is not representable
+[^:]*:26: Error: the offset 0x00011001 is not representable
+[^:]*:26: Error: the offset 0x00011001 is not representable
+[^:]*:26: Error: the offset 0x00011001 is not representable
+[^:]*:26: Error: the offset 0x00011001 is not representable
+[^:]*:26: Error: the offset 0x00011001 is not representable
+[^:]*:26: Error: the offset 0x00011001 is not representable
+[^:]*:26: Error: the offset 0x00011001 is not representable
+[^:]*:26: Error: the offset 0x00011001 is not representable
+[^:]*:26: Error: the offset 0x00011001 is not representable
+[^:]*:26: Error: the offset 0x00011001 is not representable
+[^:]*:28: Error: the offset 0x00011001 is not representable
+[^:]*:28: Error: the offset 0x00011001 is not representable
+[^:]*:28: Error: the offset 0x00011001 is not representable
+[^:]*:28: Error: the offset 0x00011001 is not representable
+[^:]*:28: Error: the offset 0x00011001 is not representable
+[^:]*:28: Error: the offset 0x00011001 is not representable
+[^:]*:28: Error: the offset 0x00011001 is not representable
+[^:]*:28: Error: the offset 0x00011001 is not representable
+[^:]*:28: Error: the offset 0x00011001 is not representable
+[^:]*:28: Error: the offset 0x00011001 is not representable
+[^:]*:29: Error: the offset 0x00011001 is not representable
+[^:]*:29: Error: the offset 0x00011001 is not representable
+[^:]*:29: Error: the offset 0x00011001 is not representable
+[^:]*:29: Error: the offset 0x00011001 is not representable
+[^:]*:29: Error: the offset 0x00011001 is not representable
+[^:]*:29: Error: the offset 0x00011001 is not representable
+[^:]*:29: Error: the offset 0x00011001 is not representable
+[^:]*:29: Error: the offset 0x00011001 is not representable
+[^:]*:29: Error: the offset 0x00011001 is not representable
+[^:]*:29: Error: the offset 0x00011001 is not representable
+[^:]*:30: Error: the offset 0x00011001 is not representable
+[^:]*:30: Error: the offset 0x00011001 is not representable
+[^:]*:30: Error: the offset 0x00011001 is not representable
+[^:]*:30: Error: the offset 0x00011001 is not representable
+[^:]*:30: Error: the offset 0x00011001 is not representable
+[^:]*:30: Error: the offset 0x00011001 is not representable
+[^:]*:30: Error: the offset 0x00011001 is not representable
+[^:]*:30: Error: the offset 0x00011001 is not representable
+[^:]*:30: Error: the offset 0x00011001 is not representable
+[^:]*:30: Error: the offset 0x00011001 is not representable
+[^:]*:31: Error: the offset 0x00011001 is not representable
+[^:]*:31: Error: the offset 0x00011001 is not representable
+[^:]*:31: Error: the offset 0x00011001 is not representable
+[^:]*:31: Error: the offset 0x00011001 is not representable
+[^:]*:31: Error: the offset 0x00011001 is not representable
+[^:]*:31: Error: the offset 0x00011001 is not representable
+[^:]*:31: Error: the offset 0x00011001 is not representable
+[^:]*:31: Error: the offset 0x00011001 is not representable
+[^:]*:31: Error: the offset 0x00011001 is not representable
+[^:]*:31: Error: the offset 0x00011001 is not representable
diff --git a/gas/testsuite/gas/arm/group-reloc-alu-encoding-bad.s b/gas/testsuite/gas/arm/group-reloc-alu-encoding-bad.s
new file mode 100644
index 000000000000..bdde4ad45068
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-alu-encoding-bad.s
@@ -0,0 +1,35 @@
+@ Tests that should fail for ALU group relocations.
+
+ .text
+
+ .macro alutest insn sym offset
+
+ \insn r0, r0, #:pc_g0:(\sym + \offset)
+ \insn r0, r0, #:pc_g1:(\sym + \offset)
+ \insn r0, r0, #:pc_g2:(\sym + \offset)
+
+ \insn r0, r0, #:pc_g0_nc:(\sym + \offset)
+ \insn r0, r0, #:pc_g1_nc:(\sym + \offset)
+
+ \insn r0, r0, #:sb_g0:(\sym + \offset)
+ \insn r0, r0, #:sb_g1:(\sym + \offset)
+ \insn r0, r0, #:sb_g2:(\sym + \offset)
+
+ \insn r0, r0, #:sb_g0_nc:(\sym + \offset)
+ \insn r0, r0, #:sb_g1_nc:(\sym + \offset)
+
+ .endm
+
+ alutest add f 0x11001
+ alutest add localsym 0x11001
+ alutest adds f 0x11001
+ alutest adds localsym 0x11001
+
+ alutest add f "-0x11001"
+ alutest add localsym "-0x11001"
+ alutest adds f "-0x11001"
+ alutest adds localsym "-0x11001"
+
+localsym:
+ mov r0, #0
+
diff --git a/gas/testsuite/gas/arm/group-reloc-alu-parsing-bad.d b/gas/testsuite/gas/arm/group-reloc-alu-parsing-bad.d
new file mode 100644
index 000000000000..808bc05f0805
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-alu-parsing-bad.d
@@ -0,0 +1,3 @@
+#name: Group relocation tests, parsing failures (alu)
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#error-output: group-reloc-alu-parsing-bad.l
diff --git a/gas/testsuite/gas/arm/group-reloc-alu-parsing-bad.l b/gas/testsuite/gas/arm/group-reloc-alu-parsing-bad.l
new file mode 100644
index 000000000000..1c27ad02ffc9
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-alu-parsing-bad.l
@@ -0,0 +1,5 @@
+[^:]*: Assembler messages:
+[^:]*:6: Error: shift expression expected -- `sub r0,r0,#:pc_g0:\(foo\)'
+[^:]*:7: Error: shift expression expected -- `subs r0,r0,#:pc_g0:\(foo\)'
+[^:]*:10: Error: unknown group relocation -- `add r0,r0,#:pc_g2_nc:\(foo\)'
+[^:]*:11: Error: unknown group relocation -- `add r0,r0,#:sb_g2_nc:\(foo\)'
diff --git a/gas/testsuite/gas/arm/group-reloc-alu-parsing-bad.s b/gas/testsuite/gas/arm/group-reloc-alu-parsing-bad.s
new file mode 100644
index 000000000000..70a62acefa60
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-alu-parsing-bad.s
@@ -0,0 +1,12 @@
+@ Tests that should fail for ALU group relocations.
+
+ .text
+
+@ Group relocs aren't allowed on SUB(S) instructions...
+ sub r0, r0, #:pc_g0:(foo)
+ subs r0, r0, #:pc_g0:(foo)
+
+@ Some nonexistent relocations:
+ add r0, r0, #:pc_g2_nc:(foo)
+ add r0, r0, #:sb_g2_nc:(foo)
+
diff --git a/gas/testsuite/gas/arm/group-reloc-alu.d b/gas/testsuite/gas/arm/group-reloc-alu.d
new file mode 100644
index 000000000000..40e502588375
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-alu.d
@@ -0,0 +1,168 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#name: Group relocation tests (alu)
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 0: R_ARM_ALU_PC_G0 f
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 4: R_ARM_ALU_PC_G1 f
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 8: R_ARM_ALU_PC_G2 f
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ c: R_ARM_ALU_PC_G0_NC f
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 10: R_ARM_ALU_PC_G1_NC f
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 14: R_ARM_ALU_SB_G0 f
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 18: R_ARM_ALU_SB_G1 f
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 1c: R_ARM_ALU_SB_G2 f
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 20: R_ARM_ALU_SB_G0_NC f
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 24: R_ARM_ALU_SB_G1_NC f
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 28: R_ARM_ALU_PC_G0 localsym
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 2c: R_ARM_ALU_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 30: R_ARM_ALU_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 34: R_ARM_ALU_PC_G0_NC localsym
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 38: R_ARM_ALU_PC_G1_NC localsym
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 3c: R_ARM_ALU_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 40: R_ARM_ALU_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 44: R_ARM_ALU_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 48: R_ARM_ALU_SB_G0_NC localsym
+0[0-9a-f]+ <[^>]+> e2800c01 add r0, r0, #256 ; 0x100
+ 4c: R_ARM_ALU_SB_G1_NC localsym
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 50: R_ARM_ALU_PC_G0 f
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 54: R_ARM_ALU_PC_G1 f
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 58: R_ARM_ALU_PC_G2 f
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 5c: R_ARM_ALU_PC_G0_NC f
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 60: R_ARM_ALU_PC_G1_NC f
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 64: R_ARM_ALU_SB_G0 f
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 68: R_ARM_ALU_SB_G1 f
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 6c: R_ARM_ALU_SB_G2 f
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 70: R_ARM_ALU_SB_G0_NC f
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 74: R_ARM_ALU_SB_G1_NC f
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 78: R_ARM_ALU_PC_G0 localsym
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 7c: R_ARM_ALU_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 80: R_ARM_ALU_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 84: R_ARM_ALU_PC_G0_NC localsym
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 88: R_ARM_ALU_PC_G1_NC localsym
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 8c: R_ARM_ALU_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 90: R_ARM_ALU_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 94: R_ARM_ALU_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 98: R_ARM_ALU_SB_G0_NC localsym
+0[0-9a-f]+ <[^>]+> e2900c01 adds r0, r0, #256 ; 0x100
+ 9c: R_ARM_ALU_SB_G1_NC localsym
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ a0: R_ARM_ALU_PC_G0 f
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ a4: R_ARM_ALU_PC_G1 f
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ a8: R_ARM_ALU_PC_G2 f
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ ac: R_ARM_ALU_PC_G0_NC f
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ b0: R_ARM_ALU_PC_G1_NC f
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ b4: R_ARM_ALU_SB_G0 f
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ b8: R_ARM_ALU_SB_G1 f
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ bc: R_ARM_ALU_SB_G2 f
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ c0: R_ARM_ALU_SB_G0_NC f
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ c4: R_ARM_ALU_SB_G1_NC f
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ c8: R_ARM_ALU_PC_G0 localsym
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ cc: R_ARM_ALU_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ d0: R_ARM_ALU_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ d4: R_ARM_ALU_PC_G0_NC localsym
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ d8: R_ARM_ALU_PC_G1_NC localsym
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ dc: R_ARM_ALU_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ e0: R_ARM_ALU_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ e4: R_ARM_ALU_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ e8: R_ARM_ALU_SB_G0_NC localsym
+0[0-9a-f]+ <[^>]+> e2400c01 sub r0, r0, #256 ; 0x100
+ ec: R_ARM_ALU_SB_G1_NC localsym
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ f0: R_ARM_ALU_PC_G0 f
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ f4: R_ARM_ALU_PC_G1 f
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ f8: R_ARM_ALU_PC_G2 f
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ fc: R_ARM_ALU_PC_G0_NC f
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 100: R_ARM_ALU_PC_G1_NC f
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 104: R_ARM_ALU_SB_G0 f
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 108: R_ARM_ALU_SB_G1 f
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 10c: R_ARM_ALU_SB_G2 f
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 110: R_ARM_ALU_SB_G0_NC f
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 114: R_ARM_ALU_SB_G1_NC f
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 118: R_ARM_ALU_PC_G0 localsym
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 11c: R_ARM_ALU_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 120: R_ARM_ALU_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 124: R_ARM_ALU_PC_G0_NC localsym
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 128: R_ARM_ALU_PC_G1_NC localsym
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 12c: R_ARM_ALU_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 130: R_ARM_ALU_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 134: R_ARM_ALU_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 138: R_ARM_ALU_SB_G0_NC localsym
+0[0-9a-f]+ <[^>]+> e2500c01 subs r0, r0, #256 ; 0x100
+ 13c: R_ARM_ALU_SB_G1_NC localsym
+0[0-9a-f]+ <[^>]+> e3a00000 mov r0, #0 ; 0x0
diff --git a/gas/testsuite/gas/arm/group-reloc-alu.s b/gas/testsuite/gas/arm/group-reloc-alu.s
new file mode 100644
index 000000000000..696f1dac0cc4
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-alu.s
@@ -0,0 +1,39 @@
+@ Tests for ALU group relocations.
+
+ .text
+
+ .macro alutest insn sym offset
+
+ \insn r0, r0, #:pc_g0:(\sym \offset)
+ \insn r0, r0, #:pc_g1:(\sym \offset)
+
+@ Try this one without the hash; it should still work.
+ \insn r0, r0, :pc_g2:(\sym \offset)
+
+ \insn r0, r0, #:pc_g0_nc:(\sym \offset)
+ \insn r0, r0, #:pc_g1_nc:(\sym \offset)
+
+ \insn r0, r0, #:sb_g0:(\sym \offset)
+ \insn r0, r0, #:sb_g1:(\sym \offset)
+ \insn r0, r0, #:sb_g2:(\sym \offset)
+
+ \insn r0, r0, #:sb_g0_nc:(\sym \offset)
+ \insn r0, r0, #:sb_g1_nc:(\sym \offset)
+
+ .endm
+
+ alutest add f "+ 0x100"
+ alutest add localsym "+ 0x100"
+ alutest adds f "+ 0x100"
+ alutest adds localsym "+ 0x100"
+
+@ The following should cause the insns to be switched to SUB(S).
+
+ alutest add f "- 0x100"
+ alutest add localsym "- 0x100"
+ alutest adds f "- 0x100"
+ alutest adds localsym "- 0x100"
+
+localsym:
+ mov r0, #0
+
diff --git a/gas/testsuite/gas/arm/group-reloc-ldc-encoding-bad.d b/gas/testsuite/gas/arm/group-reloc-ldc-encoding-bad.d
new file mode 100644
index 000000000000..52ee2e55b653
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldc-encoding-bad.d
@@ -0,0 +1,3 @@
+#name: Group relocation tests, encoding failures (ldc)
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#error-output: group-reloc-ldc-encoding-bad.l
diff --git a/gas/testsuite/gas/arm/group-reloc-ldc-encoding-bad.l b/gas/testsuite/gas/arm/group-reloc-ldc-encoding-bad.l
new file mode 100644
index 000000000000..22e53a5901d6
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldc-encoding-bad.l
@@ -0,0 +1,721 @@
+[^:]*: Assembler messages:
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:43: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:44: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:45: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:46: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:48: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:49: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:50: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:51: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:93: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:94: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:95: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:96: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:98: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:99: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:100: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:101: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:143: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:144: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:148: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:149: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:153: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:154: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:160: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:161: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:162: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:163: Error: bad offset 0x00000001 \(must be word-aligned\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:165: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:166: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:167: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
+[^:]*:168: Error: bad offset 0x00000808 \(must be an 8-bit number of words\)
diff --git a/gas/testsuite/gas/arm/group-reloc-ldc-encoding-bad.s b/gas/testsuite/gas/arm/group-reloc-ldc-encoding-bad.s
new file mode 100644
index 000000000000..5ab27c25fb7a
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldc-encoding-bad.s
@@ -0,0 +1,169 @@
+@ LDC group relocation tests that are supposed to fail during encoding.
+
+ .text
+
+@ LDC/LDCL/LDC2/LDC2L/STC/STCL/STC2/STC2L
+
+ .macro ldctest load store cst
+
+ \load 0, c0, [r0, #:pc_g0:(f + \cst)]
+ \load 0, c0, [r0, #:pc_g1:(f + \cst)]
+ \load 0, c0, [r0, #:pc_g2:(f + \cst)]
+
+ \load 0, c0, [r0, #:sb_g0:(f + \cst)]
+ \load 0, c0, [r0, #:sb_g1:(f + \cst)]
+ \load 0, c0, [r0, #:sb_g2:(f + \cst)]
+
+ \store 0, c0, [r0, #:pc_g0:(f + \cst)]
+ \store 0, c0, [r0, #:pc_g1:(f + \cst)]
+ \store 0, c0, [r0, #:pc_g2:(f + \cst)]
+
+ \store 0, c0, [r0, #:sb_g0:(f + \cst)]
+ \store 0, c0, [r0, #:sb_g1:(f + \cst)]
+ \store 0, c0, [r0, #:sb_g2:(f + \cst)]
+
+ \load 0, c0, [r0, #:pc_g0:(f - \cst)]
+ \load 0, c0, [r0, #:pc_g1:(f - \cst)]
+ \load 0, c0, [r0, #:pc_g2:(f - \cst)]
+
+ \load 0, c0, [r0, #:sb_g0:(f - \cst)]
+ \load 0, c0, [r0, #:sb_g1:(f - \cst)]
+ \load 0, c0, [r0, #:sb_g2:(f - \cst)]
+
+ \store 0, c0, [r0, #:pc_g0:(f - \cst)]
+ \store 0, c0, [r0, #:pc_g1:(f - \cst)]
+ \store 0, c0, [r0, #:pc_g2:(f - \cst)]
+
+ \store 0, c0, [r0, #:sb_g0:(f - \cst)]
+ \store 0, c0, [r0, #:sb_g1:(f - \cst)]
+ \store 0, c0, [r0, #:sb_g2:(f - \cst)]
+
+ .endm
+
+ ldctest ldc stc 0x1
+ ldctest ldcl stcl 0x1
+ ldctest ldc2 stc2 0x1
+ ldctest ldc2l stc2l 0x1
+
+ ldctest ldc stc 0x808
+ ldctest ldcl stcl 0x808
+ ldctest ldc2 stc2 0x808
+ ldctest ldc2l stc2l 0x808
+
+@ LDFS/STFS/LDFD/STFD/LDFE/STFE/LDFP/STFP
+
+ .fpu fpa
+
+ .macro fpa_test load store cst
+
+ \load f0, [r0, #:pc_g0:(f + \cst)]
+ \load f0, [r0, #:pc_g1:(f + \cst)]
+ \load f0, [r0, #:pc_g2:(f + \cst)]
+
+ \load f0, [r0, #:sb_g0:(f + \cst)]
+ \load f0, [r0, #:sb_g1:(f + \cst)]
+ \load f0, [r0, #:sb_g2:(f + \cst)]
+
+ \store f0, [r0, #:pc_g0:(f + \cst)]
+ \store f0, [r0, #:pc_g1:(f + \cst)]
+ \store f0, [r0, #:pc_g2:(f + \cst)]
+
+ \store f0, [r0, #:sb_g0:(f + \cst)]
+ \store f0, [r0, #:sb_g1:(f + \cst)]
+ \store f0, [r0, #:sb_g2:(f + \cst)]
+
+ \load f0, [r0, #:pc_g0:(f - \cst)]
+ \load f0, [r0, #:pc_g1:(f - \cst)]
+ \load f0, [r0, #:pc_g2:(f - \cst)]
+
+ \load f0, [r0, #:sb_g0:(f - \cst)]
+ \load f0, [r0, #:sb_g1:(f - \cst)]
+ \load f0, [r0, #:sb_g2:(f - \cst)]
+
+ \store f0, [r0, #:pc_g0:(f - \cst)]
+ \store f0, [r0, #:pc_g1:(f - \cst)]
+ \store f0, [r0, #:pc_g2:(f - \cst)]
+
+ \store f0, [r0, #:sb_g0:(f - \cst)]
+ \store f0, [r0, #:sb_g1:(f - \cst)]
+ \store f0, [r0, #:sb_g2:(f - \cst)]
+
+ .endm
+
+ fpa_test ldfs stfs 0x1
+ fpa_test ldfd stfd 0x1
+ fpa_test ldfe stfe 0x1
+ fpa_test ldfp stfp 0x1
+
+ fpa_test ldfs stfs 0x808
+ fpa_test ldfd stfd 0x808
+ fpa_test ldfe stfe 0x808
+ fpa_test ldfp stfp 0x808
+
+@ FLDS/FSTS
+
+ .fpu vfp
+
+ .macro vfp_test load store reg cst
+
+ \load \reg, [r0, #:pc_g0:(f + \cst)]
+ \load \reg, [r0, #:pc_g1:(f + \cst)]
+ \load \reg, [r0, #:pc_g2:(f + \cst)]
+
+ \load \reg, [r0, #:sb_g0:(f + \cst)]
+ \load \reg, [r0, #:sb_g1:(f + \cst)]
+ \load \reg, [r0, #:sb_g2:(f + \cst)]
+
+ \store \reg, [r0, #:pc_g0:(f + \cst)]
+ \store \reg, [r0, #:pc_g1:(f + \cst)]
+ \store \reg, [r0, #:pc_g2:(f + \cst)]
+
+ \store \reg, [r0, #:sb_g0:(f + \cst)]
+ \store \reg, [r0, #:sb_g1:(f + \cst)]
+ \store \reg, [r0, #:sb_g2:(f + \cst)]
+
+ \load \reg, [r0, #:pc_g0:(f - \cst)]
+ \load \reg, [r0, #:pc_g1:(f - \cst)]
+ \load \reg, [r0, #:pc_g2:(f - \cst)]
+
+ \load \reg, [r0, #:sb_g0:(f - \cst)]
+ \load \reg, [r0, #:sb_g1:(f - \cst)]
+ \load \reg, [r0, #:sb_g2:(f - \cst)]
+
+ \store \reg, [r0, #:pc_g0:(f - \cst)]
+ \store \reg, [r0, #:pc_g1:(f - \cst)]
+ \store \reg, [r0, #:pc_g2:(f - \cst)]
+
+ \store \reg, [r0, #:sb_g0:(f - \cst)]
+ \store \reg, [r0, #:sb_g1:(f - \cst)]
+ \store \reg, [r0, #:sb_g2:(f - \cst)]
+
+ .endm
+
+ vfp_test flds fsts s0 0x1
+ vfp_test flds fsts s0 0x808
+
+@ FLDD/FSTD
+
+ vfp_test fldd fstd d0 0x1
+ vfp_test fldd fstd d0 0x808
+
+@ VLDR/VSTR
+
+ vfp_test vldr vstr d0 0x1
+ vfp_test vldr vstr d0 0x808
+
+@ CFLDRS/CFLDRD/CFLDR32/CFLDR64/CFSTRS/CFSTRD/CFSTR32/CFSTR64
+
+ .cpu ep9312
+
+ vfp_test cfldrs cfstrs mvf0 0x1
+ vfp_test cfldrd cfstrd mvd0 0x1
+ vfp_test cfldr32 cfstr32 mvfx0 0x1
+ vfp_test cfldr64 cfstr64 mvdx0 0x1
+
+ vfp_test cfldrs cfstrs mvf0 0x808
+ vfp_test cfldrd cfstrd mvd0 0x808
+ vfp_test cfldr32 cfstr32 mvfx0 0x808
+ vfp_test cfldr64 cfstr64 mvdx0 0x808
+
diff --git a/gas/testsuite/gas/arm/group-reloc-ldc-parsing-bad.d b/gas/testsuite/gas/arm/group-reloc-ldc-parsing-bad.d
new file mode 100644
index 000000000000..09e32997e855
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldc-parsing-bad.d
@@ -0,0 +1,3 @@
+#name: Group relocation tests, parsing failures (ldc)
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#error-output: group-reloc-ldc-parsing-bad.l
diff --git a/gas/testsuite/gas/arm/group-reloc-ldc-parsing-bad.l b/gas/testsuite/gas/arm/group-reloc-ldc-parsing-bad.l
new file mode 100644
index 000000000000..238d94db1d94
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldc-parsing-bad.l
@@ -0,0 +1,147 @@
+[^:]*: Assembler messages:
+[^:]*:25: Error: this group relocation is not allowed on this instruction -- `ldc 0,c0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:25: Error: this group relocation is not allowed on this instruction -- `ldc 0,c0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:25: Error: this group relocation is not allowed on this instruction -- `ldc 0,c0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:25: Error: this group relocation is not allowed on this instruction -- `ldc 0,c0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:25: Error: unknown group relocation -- `ldc 0,c0,\[r0,#:foo:\(sym\)\]'
+[^:]*:26: Error: this group relocation is not allowed on this instruction -- `ldcl 0,c0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:26: Error: this group relocation is not allowed on this instruction -- `ldcl 0,c0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:26: Error: this group relocation is not allowed on this instruction -- `ldcl 0,c0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:26: Error: this group relocation is not allowed on this instruction -- `ldcl 0,c0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:26: Error: unknown group relocation -- `ldcl 0,c0,\[r0,#:foo:\(sym\)\]'
+[^:]*:27: Error: this group relocation is not allowed on this instruction -- `ldc2 0,c0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:27: Error: this group relocation is not allowed on this instruction -- `ldc2 0,c0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:27: Error: this group relocation is not allowed on this instruction -- `ldc2 0,c0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:27: Error: this group relocation is not allowed on this instruction -- `ldc2 0,c0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:27: Error: unknown group relocation -- `ldc2 0,c0,\[r0,#:foo:\(sym\)\]'
+[^:]*:28: Error: this group relocation is not allowed on this instruction -- `ldc2l 0,c0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:28: Error: this group relocation is not allowed on this instruction -- `ldc2l 0,c0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:28: Error: this group relocation is not allowed on this instruction -- `ldc2l 0,c0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:28: Error: this group relocation is not allowed on this instruction -- `ldc2l 0,c0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:28: Error: unknown group relocation -- `ldc2l 0,c0,\[r0,#:foo:\(sym\)\]'
+[^:]*:30: Error: this group relocation is not allowed on this instruction -- `stc 0,c0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:30: Error: this group relocation is not allowed on this instruction -- `stc 0,c0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:30: Error: this group relocation is not allowed on this instruction -- `stc 0,c0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:30: Error: this group relocation is not allowed on this instruction -- `stc 0,c0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:30: Error: unknown group relocation -- `stc 0,c0,\[r0,#:foo:\(sym\)\]'
+[^:]*:31: Error: this group relocation is not allowed on this instruction -- `stcl 0,c0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:31: Error: this group relocation is not allowed on this instruction -- `stcl 0,c0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:31: Error: this group relocation is not allowed on this instruction -- `stcl 0,c0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:31: Error: this group relocation is not allowed on this instruction -- `stcl 0,c0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:31: Error: unknown group relocation -- `stcl 0,c0,\[r0,#:foo:\(sym\)\]'
+[^:]*:32: Error: this group relocation is not allowed on this instruction -- `stc2 0,c0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:32: Error: this group relocation is not allowed on this instruction -- `stc2 0,c0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:32: Error: this group relocation is not allowed on this instruction -- `stc2 0,c0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:32: Error: this group relocation is not allowed on this instruction -- `stc2 0,c0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:32: Error: unknown group relocation -- `stc2 0,c0,\[r0,#:foo:\(sym\)\]'
+[^:]*:33: Error: this group relocation is not allowed on this instruction -- `stc2l 0,c0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:33: Error: this group relocation is not allowed on this instruction -- `stc2l 0,c0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:33: Error: this group relocation is not allowed on this instruction -- `stc2l 0,c0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:33: Error: this group relocation is not allowed on this instruction -- `stc2l 0,c0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:33: Error: unknown group relocation -- `stc2l 0,c0,\[r0,#:foo:\(sym\)\]'
+[^:]*:37: Error: this group relocation is not allowed on this instruction -- `ldfs f0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:37: Error: this group relocation is not allowed on this instruction -- `ldfs f0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:37: Error: this group relocation is not allowed on this instruction -- `ldfs f0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:37: Error: this group relocation is not allowed on this instruction -- `ldfs f0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:37: Error: unknown group relocation -- `ldfs f0,\[r0,#:foo:\(sym\)\]'
+[^:]*:38: Error: this group relocation is not allowed on this instruction -- `stfs f0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:38: Error: this group relocation is not allowed on this instruction -- `stfs f0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:38: Error: this group relocation is not allowed on this instruction -- `stfs f0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:38: Error: this group relocation is not allowed on this instruction -- `stfs f0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:38: Error: unknown group relocation -- `stfs f0,\[r0,#:foo:\(sym\)\]'
+[^:]*:39: Error: this group relocation is not allowed on this instruction -- `ldfd f0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:39: Error: this group relocation is not allowed on this instruction -- `ldfd f0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:39: Error: this group relocation is not allowed on this instruction -- `ldfd f0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:39: Error: this group relocation is not allowed on this instruction -- `ldfd f0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:39: Error: unknown group relocation -- `ldfd f0,\[r0,#:foo:\(sym\)\]'
+[^:]*:40: Error: this group relocation is not allowed on this instruction -- `stfd f0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:40: Error: this group relocation is not allowed on this instruction -- `stfd f0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:40: Error: this group relocation is not allowed on this instruction -- `stfd f0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:40: Error: this group relocation is not allowed on this instruction -- `stfd f0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:40: Error: unknown group relocation -- `stfd f0,\[r0,#:foo:\(sym\)\]'
+[^:]*:41: Error: this group relocation is not allowed on this instruction -- `ldfe f0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:41: Error: this group relocation is not allowed on this instruction -- `ldfe f0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:41: Error: this group relocation is not allowed on this instruction -- `ldfe f0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:41: Error: this group relocation is not allowed on this instruction -- `ldfe f0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:41: Error: unknown group relocation -- `ldfe f0,\[r0,#:foo:\(sym\)\]'
+[^:]*:42: Error: this group relocation is not allowed on this instruction -- `stfe f0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:42: Error: this group relocation is not allowed on this instruction -- `stfe f0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:42: Error: this group relocation is not allowed on this instruction -- `stfe f0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:42: Error: this group relocation is not allowed on this instruction -- `stfe f0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:42: Error: unknown group relocation -- `stfe f0,\[r0,#:foo:\(sym\)\]'
+[^:]*:43: Error: this group relocation is not allowed on this instruction -- `ldfp f0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:43: Error: this group relocation is not allowed on this instruction -- `ldfp f0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:43: Error: this group relocation is not allowed on this instruction -- `ldfp f0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:43: Error: this group relocation is not allowed on this instruction -- `ldfp f0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:43: Error: unknown group relocation -- `ldfp f0,\[r0,#:foo:\(sym\)\]'
+[^:]*:44: Error: this group relocation is not allowed on this instruction -- `stfp f0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:44: Error: this group relocation is not allowed on this instruction -- `stfp f0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:44: Error: this group relocation is not allowed on this instruction -- `stfp f0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:44: Error: this group relocation is not allowed on this instruction -- `stfp f0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:44: Error: unknown group relocation -- `stfp f0,\[r0,#:foo:\(sym\)\]'
+[^:]*:48: Error: this group relocation is not allowed on this instruction -- `flds s0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:48: Error: this group relocation is not allowed on this instruction -- `flds s0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:48: Error: this group relocation is not allowed on this instruction -- `flds s0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:48: Error: this group relocation is not allowed on this instruction -- `flds s0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:48: Error: unknown group relocation -- `flds s0,\[r0,#:foo:\(sym\)\]'
+[^:]*:49: Error: this group relocation is not allowed on this instruction -- `fsts s0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:49: Error: this group relocation is not allowed on this instruction -- `fsts s0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:49: Error: this group relocation is not allowed on this instruction -- `fsts s0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:49: Error: this group relocation is not allowed on this instruction -- `fsts s0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:49: Error: unknown group relocation -- `fsts s0,\[r0,#:foo:\(sym\)\]'
+[^:]*:51: Error: this group relocation is not allowed on this instruction -- `fldd d0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:51: Error: this group relocation is not allowed on this instruction -- `fldd d0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:51: Error: this group relocation is not allowed on this instruction -- `fldd d0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:51: Error: this group relocation is not allowed on this instruction -- `fldd d0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:51: Error: unknown group relocation -- `fldd d0,\[r0,#:foo:\(sym\)\]'
+[^:]*:52: Error: this group relocation is not allowed on this instruction -- `fstd d0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:52: Error: this group relocation is not allowed on this instruction -- `fstd d0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:52: Error: this group relocation is not allowed on this instruction -- `fstd d0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:52: Error: this group relocation is not allowed on this instruction -- `fstd d0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:52: Error: unknown group relocation -- `fstd d0,\[r0,#:foo:\(sym\)\]'
+[^:]*:54: Error: too many positional arguments
+[^:]*:55: Error: this group relocation is not allowed on this instruction -- `vstr d0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:55: Error: this group relocation is not allowed on this instruction -- `vstr d0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:55: Error: this group relocation is not allowed on this instruction -- `vstr d0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:55: Error: this group relocation is not allowed on this instruction -- `vstr d0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:55: Error: unknown group relocation -- `vstr d0,\[r0,#:foo:\(sym\)\]'
+[^:]*:59: Error: this group relocation is not allowed on this instruction -- `cfldrs mvf0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:59: Error: this group relocation is not allowed on this instruction -- `cfldrs mvf0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:59: Error: this group relocation is not allowed on this instruction -- `cfldrs mvf0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:59: Error: this group relocation is not allowed on this instruction -- `cfldrs mvf0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:59: Error: unknown group relocation -- `cfldrs mvf0,\[r0,#:foo:\(sym\)\]'
+[^:]*:60: Error: this group relocation is not allowed on this instruction -- `cfstrs mvf0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:60: Error: this group relocation is not allowed on this instruction -- `cfstrs mvf0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:60: Error: this group relocation is not allowed on this instruction -- `cfstrs mvf0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:60: Error: this group relocation is not allowed on this instruction -- `cfstrs mvf0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:60: Error: unknown group relocation -- `cfstrs mvf0,\[r0,#:foo:\(sym\)\]'
+[^:]*:61: Error: this group relocation is not allowed on this instruction -- `cfldrd mvd0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:61: Error: this group relocation is not allowed on this instruction -- `cfldrd mvd0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:61: Error: this group relocation is not allowed on this instruction -- `cfldrd mvd0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:61: Error: this group relocation is not allowed on this instruction -- `cfldrd mvd0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:61: Error: unknown group relocation -- `cfldrd mvd0,\[r0,#:foo:\(sym\)\]'
+[^:]*:62: Error: this group relocation is not allowed on this instruction -- `cfstrd mvd0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:62: Error: this group relocation is not allowed on this instruction -- `cfstrd mvd0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:62: Error: this group relocation is not allowed on this instruction -- `cfstrd mvd0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:62: Error: this group relocation is not allowed on this instruction -- `cfstrd mvd0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:62: Error: unknown group relocation -- `cfstrd mvd0,\[r0,#:foo:\(sym\)\]'
+[^:]*:63: Error: this group relocation is not allowed on this instruction -- `cfldr32 mvfx0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:63: Error: this group relocation is not allowed on this instruction -- `cfldr32 mvfx0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:63: Error: this group relocation is not allowed on this instruction -- `cfldr32 mvfx0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:63: Error: this group relocation is not allowed on this instruction -- `cfldr32 mvfx0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:63: Error: unknown group relocation -- `cfldr32 mvfx0,\[r0,#:foo:\(sym\)\]'
+[^:]*:64: Error: this group relocation is not allowed on this instruction -- `cfstr32 mvfx0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:64: Error: this group relocation is not allowed on this instruction -- `cfstr32 mvfx0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:64: Error: this group relocation is not allowed on this instruction -- `cfstr32 mvfx0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:64: Error: this group relocation is not allowed on this instruction -- `cfstr32 mvfx0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:64: Error: unknown group relocation -- `cfstr32 mvfx0,\[r0,#:foo:\(sym\)\]'
+[^:]*:65: Error: this group relocation is not allowed on this instruction -- `cfldr64 mvdx0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:65: Error: this group relocation is not allowed on this instruction -- `cfldr64 mvdx0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:65: Error: this group relocation is not allowed on this instruction -- `cfldr64 mvdx0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:65: Error: this group relocation is not allowed on this instruction -- `cfldr64 mvdx0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:65: Error: unknown group relocation -- `cfldr64 mvdx0,\[r0,#:foo:\(sym\)\]'
+[^:]*:66: Error: this group relocation is not allowed on this instruction -- `cfstr64 mvdx0,\[r0,#:pc_g0_nc:\(sym\)\]'
+[^:]*:66: Error: this group relocation is not allowed on this instruction -- `cfstr64 mvdx0,\[r0,#:pc_g1_nc:\(sym\)\]'
+[^:]*:66: Error: this group relocation is not allowed on this instruction -- `cfstr64 mvdx0,\[r0,#:sb_g0_nc:\(sym\)\]'
+[^:]*:66: Error: this group relocation is not allowed on this instruction -- `cfstr64 mvdx0,\[r0,#:sb_g1_nc:\(sym\)\]'
+[^:]*:66: Error: unknown group relocation -- `cfstr64 mvdx0,\[r0,#:foo:\(sym\)\]'
diff --git a/gas/testsuite/gas/arm/group-reloc-ldc-parsing-bad.s b/gas/testsuite/gas/arm/group-reloc-ldc-parsing-bad.s
new file mode 100644
index 000000000000..a815f5de75b5
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldc-parsing-bad.s
@@ -0,0 +1,67 @@
+@ Tests for LDC group relocations that are meant to fail during parsing.
+
+ .macro ldctest insn reg
+
+ \insn 0, \reg, [r0, #:pc_g0_nc:(sym)]
+ \insn 0, \reg, [r0, #:pc_g1_nc:(sym)]
+ \insn 0, \reg, [r0, #:sb_g0_nc:(sym)]
+ \insn 0, \reg, [r0, #:sb_g1_nc:(sym)]
+
+ \insn 0, \reg, [r0, #:foo:(sym)]
+
+ .endm
+
+ .macro ldctest2 insn reg
+
+ \insn \reg, [r0, #:pc_g0_nc:(sym)]
+ \insn \reg, [r0, #:pc_g1_nc:(sym)]
+ \insn \reg, [r0, #:sb_g0_nc:(sym)]
+ \insn \reg, [r0, #:sb_g1_nc:(sym)]
+
+ \insn \reg, [r0, #:foo:(sym)]
+
+ .endm
+
+ ldctest ldc c0
+ ldctest ldcl c0
+ ldctest ldc2 c0
+ ldctest ldc2l c0
+
+ ldctest stc c0
+ ldctest stcl c0
+ ldctest stc2 c0
+ ldctest stc2l c0
+
+ .fpu fpa
+
+ ldctest2 ldfs f0
+ ldctest2 stfs f0
+ ldctest2 ldfd f0
+ ldctest2 stfd f0
+ ldctest2 ldfe f0
+ ldctest2 stfe f0
+ ldctest2 ldfp f0
+ ldctest2 stfp f0
+
+ .fpu vfp
+
+ ldctest2 flds s0
+ ldctest2 fsts s0
+
+ ldctest2 fldd d0
+ ldctest2 fstd d0
+
+ ldctest2 vldr d0 FIXME
+ ldctest2 vstr d0
+
+ .cpu ep9312
+
+ ldctest2 cfldrs mvf0
+ ldctest2 cfstrs mvf0
+ ldctest2 cfldrd mvd0
+ ldctest2 cfstrd mvd0
+ ldctest2 cfldr32 mvfx0
+ ldctest2 cfstr32 mvfx0
+ ldctest2 cfldr64 mvdx0
+ ldctest2 cfstr64 mvdx0
+
diff --git a/gas/testsuite/gas/arm/group-reloc-ldc.d b/gas/testsuite/gas/arm/group-reloc-ldc.d
new file mode 100644
index 000000000000..731a025f0441
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldc.d
@@ -0,0 +1,727 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#name: Group relocation tests (ldc)
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> ed900085 ldc 0, cr0, \[r0, #532\]
+ 0: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed900085 ldc 0, cr0, \[r0, #532\]
+ 4: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed900085 ldc 0, cr0, \[r0, #532\]
+ 8: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed900085 ldc 0, cr0, \[r0, #532\]
+ c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed900085 ldc 0, cr0, \[r0, #532\]
+ 10: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed900085 ldc 0, cr0, \[r0, #532\]
+ 14: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed800085 stc 0, cr0, \[r0, #532\]
+ 18: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed800085 stc 0, cr0, \[r0, #532\]
+ 1c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed800085 stc 0, cr0, \[r0, #532\]
+ 20: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed800085 stc 0, cr0, \[r0, #532\]
+ 24: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed800085 stc 0, cr0, \[r0, #532\]
+ 28: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed800085 stc 0, cr0, \[r0, #532\]
+ 2c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed100085 ldc 0, cr0, \[r0, #-532\]
+ 30: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed100085 ldc 0, cr0, \[r0, #-532\]
+ 34: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed100085 ldc 0, cr0, \[r0, #-532\]
+ 38: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed100085 ldc 0, cr0, \[r0, #-532\]
+ 3c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed100085 ldc 0, cr0, \[r0, #-532\]
+ 40: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed100085 ldc 0, cr0, \[r0, #-532\]
+ 44: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed000085 stc 0, cr0, \[r0, #-532\]
+ 48: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed000085 stc 0, cr0, \[r0, #-532\]
+ 4c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed000085 stc 0, cr0, \[r0, #-532\]
+ 50: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed000085 stc 0, cr0, \[r0, #-532\]
+ 54: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed000085 stc 0, cr0, \[r0, #-532\]
+ 58: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed000085 stc 0, cr0, \[r0, #-532\]
+ 5c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> edd00085 ldcl 0, cr0, \[r0, #532\]
+ 60: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> edd00085 ldcl 0, cr0, \[r0, #532\]
+ 64: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> edd00085 ldcl 0, cr0, \[r0, #532\]
+ 68: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> edd00085 ldcl 0, cr0, \[r0, #532\]
+ 6c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> edd00085 ldcl 0, cr0, \[r0, #532\]
+ 70: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> edd00085 ldcl 0, cr0, \[r0, #532\]
+ 74: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> edc00085 stcl 0, cr0, \[r0, #532\]
+ 78: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> edc00085 stcl 0, cr0, \[r0, #532\]
+ 7c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> edc00085 stcl 0, cr0, \[r0, #532\]
+ 80: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> edc00085 stcl 0, cr0, \[r0, #532\]
+ 84: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> edc00085 stcl 0, cr0, \[r0, #532\]
+ 88: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> edc00085 stcl 0, cr0, \[r0, #532\]
+ 8c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed500085 ldcl 0, cr0, \[r0, #-532\]
+ 90: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed500085 ldcl 0, cr0, \[r0, #-532\]
+ 94: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed500085 ldcl 0, cr0, \[r0, #-532\]
+ 98: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed500085 ldcl 0, cr0, \[r0, #-532\]
+ 9c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed500085 ldcl 0, cr0, \[r0, #-532\]
+ a0: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed500085 ldcl 0, cr0, \[r0, #-532\]
+ a4: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed400085 stcl 0, cr0, \[r0, #-532\]
+ a8: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed400085 stcl 0, cr0, \[r0, #-532\]
+ ac: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed400085 stcl 0, cr0, \[r0, #-532\]
+ b0: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed400085 stcl 0, cr0, \[r0, #-532\]
+ b4: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed400085 stcl 0, cr0, \[r0, #-532\]
+ b8: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed400085 stcl 0, cr0, \[r0, #-532\]
+ bc: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> fd900085 ldc2 0, cr0, \[r0, #532\]
+ c0: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> fd900085 ldc2 0, cr0, \[r0, #532\]
+ c4: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> fd900085 ldc2 0, cr0, \[r0, #532\]
+ c8: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> fd900085 ldc2 0, cr0, \[r0, #532\]
+ cc: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> fd900085 ldc2 0, cr0, \[r0, #532\]
+ d0: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> fd900085 ldc2 0, cr0, \[r0, #532\]
+ d4: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> fd800085 stc2 0, cr0, \[r0, #532\]
+ d8: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> fd800085 stc2 0, cr0, \[r0, #532\]
+ dc: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> fd800085 stc2 0, cr0, \[r0, #532\]
+ e0: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> fd800085 stc2 0, cr0, \[r0, #532\]
+ e4: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> fd800085 stc2 0, cr0, \[r0, #532\]
+ e8: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> fd800085 stc2 0, cr0, \[r0, #532\]
+ ec: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> fd100085 ldc2 0, cr0, \[r0, #-532\]
+ f0: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> fd100085 ldc2 0, cr0, \[r0, #-532\]
+ f4: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> fd100085 ldc2 0, cr0, \[r0, #-532\]
+ f8: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> fd100085 ldc2 0, cr0, \[r0, #-532\]
+ fc: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> fd100085 ldc2 0, cr0, \[r0, #-532\]
+ 100: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> fd100085 ldc2 0, cr0, \[r0, #-532\]
+ 104: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> fd000085 stc2 0, cr0, \[r0, #-532\]
+ 108: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> fd000085 stc2 0, cr0, \[r0, #-532\]
+ 10c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> fd000085 stc2 0, cr0, \[r0, #-532\]
+ 110: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> fd000085 stc2 0, cr0, \[r0, #-532\]
+ 114: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> fd000085 stc2 0, cr0, \[r0, #-532\]
+ 118: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> fd000085 stc2 0, cr0, \[r0, #-532\]
+ 11c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> fdd00085 ldc2l 0, cr0, \[r0, #532\]
+ 120: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> fdd00085 ldc2l 0, cr0, \[r0, #532\]
+ 124: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> fdd00085 ldc2l 0, cr0, \[r0, #532\]
+ 128: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> fdd00085 ldc2l 0, cr0, \[r0, #532\]
+ 12c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> fdd00085 ldc2l 0, cr0, \[r0, #532\]
+ 130: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> fdd00085 ldc2l 0, cr0, \[r0, #532\]
+ 134: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> fdc00085 stc2l 0, cr0, \[r0, #532\]
+ 138: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> fdc00085 stc2l 0, cr0, \[r0, #532\]
+ 13c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> fdc00085 stc2l 0, cr0, \[r0, #532\]
+ 140: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> fdc00085 stc2l 0, cr0, \[r0, #532\]
+ 144: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> fdc00085 stc2l 0, cr0, \[r0, #532\]
+ 148: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> fdc00085 stc2l 0, cr0, \[r0, #532\]
+ 14c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> fd500085 ldc2l 0, cr0, \[r0, #-532\]
+ 150: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> fd500085 ldc2l 0, cr0, \[r0, #-532\]
+ 154: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> fd500085 ldc2l 0, cr0, \[r0, #-532\]
+ 158: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> fd500085 ldc2l 0, cr0, \[r0, #-532\]
+ 15c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> fd500085 ldc2l 0, cr0, \[r0, #-532\]
+ 160: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> fd500085 ldc2l 0, cr0, \[r0, #-532\]
+ 164: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> fd400085 stc2l 0, cr0, \[r0, #-532\]
+ 168: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> fd400085 stc2l 0, cr0, \[r0, #-532\]
+ 16c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> fd400085 stc2l 0, cr0, \[r0, #-532\]
+ 170: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> fd400085 stc2l 0, cr0, \[r0, #-532\]
+ 174: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> fd400085 stc2l 0, cr0, \[r0, #-532\]
+ 178: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> fd400085 stc2l 0, cr0, \[r0, #-532\]
+ 17c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed900185 ldfs f0, \[r0, #532\]
+ 180: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed900185 ldfs f0, \[r0, #532\]
+ 184: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed900185 ldfs f0, \[r0, #532\]
+ 188: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed900185 ldfs f0, \[r0, #532\]
+ 18c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed900185 ldfs f0, \[r0, #532\]
+ 190: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed900185 ldfs f0, \[r0, #532\]
+ 194: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed800185 stfs f0, \[r0, #532\]
+ 198: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed800185 stfs f0, \[r0, #532\]
+ 19c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed800185 stfs f0, \[r0, #532\]
+ 1a0: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed800185 stfs f0, \[r0, #532\]
+ 1a4: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed800185 stfs f0, \[r0, #532\]
+ 1a8: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed800185 stfs f0, \[r0, #532\]
+ 1ac: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed100185 ldfs f0, \[r0, #-532\]
+ 1b0: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed100185 ldfs f0, \[r0, #-532\]
+ 1b4: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed100185 ldfs f0, \[r0, #-532\]
+ 1b8: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed100185 ldfs f0, \[r0, #-532\]
+ 1bc: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed100185 ldfs f0, \[r0, #-532\]
+ 1c0: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed100185 ldfs f0, \[r0, #-532\]
+ 1c4: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed000185 stfs f0, \[r0, #-532\]
+ 1c8: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed000185 stfs f0, \[r0, #-532\]
+ 1cc: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed000185 stfs f0, \[r0, #-532\]
+ 1d0: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed000185 stfs f0, \[r0, #-532\]
+ 1d4: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed000185 stfs f0, \[r0, #-532\]
+ 1d8: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed000185 stfs f0, \[r0, #-532\]
+ 1dc: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed908185 ldfd f0, \[r0, #532\]
+ 1e0: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed908185 ldfd f0, \[r0, #532\]
+ 1e4: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed908185 ldfd f0, \[r0, #532\]
+ 1e8: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed908185 ldfd f0, \[r0, #532\]
+ 1ec: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed908185 ldfd f0, \[r0, #532\]
+ 1f0: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed908185 ldfd f0, \[r0, #532\]
+ 1f4: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed808185 stfd f0, \[r0, #532\]
+ 1f8: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed808185 stfd f0, \[r0, #532\]
+ 1fc: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed808185 stfd f0, \[r0, #532\]
+ 200: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed808185 stfd f0, \[r0, #532\]
+ 204: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed808185 stfd f0, \[r0, #532\]
+ 208: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed808185 stfd f0, \[r0, #532\]
+ 20c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed108185 ldfd f0, \[r0, #-532\]
+ 210: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed108185 ldfd f0, \[r0, #-532\]
+ 214: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed108185 ldfd f0, \[r0, #-532\]
+ 218: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed108185 ldfd f0, \[r0, #-532\]
+ 21c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed108185 ldfd f0, \[r0, #-532\]
+ 220: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed108185 ldfd f0, \[r0, #-532\]
+ 224: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed008185 stfd f0, \[r0, #-532\]
+ 228: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed008185 stfd f0, \[r0, #-532\]
+ 22c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed008185 stfd f0, \[r0, #-532\]
+ 230: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed008185 stfd f0, \[r0, #-532\]
+ 234: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed008185 stfd f0, \[r0, #-532\]
+ 238: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed008185 stfd f0, \[r0, #-532\]
+ 23c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> edd00185 ldfe f0, \[r0, #532\]
+ 240: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> edd00185 ldfe f0, \[r0, #532\]
+ 244: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> edd00185 ldfe f0, \[r0, #532\]
+ 248: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> edd00185 ldfe f0, \[r0, #532\]
+ 24c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> edd00185 ldfe f0, \[r0, #532\]
+ 250: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> edd00185 ldfe f0, \[r0, #532\]
+ 254: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> edc00185 stfe f0, \[r0, #532\]
+ 258: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> edc00185 stfe f0, \[r0, #532\]
+ 25c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> edc00185 stfe f0, \[r0, #532\]
+ 260: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> edc00185 stfe f0, \[r0, #532\]
+ 264: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> edc00185 stfe f0, \[r0, #532\]
+ 268: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> edc00185 stfe f0, \[r0, #532\]
+ 26c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed500185 ldfe f0, \[r0, #-532\]
+ 270: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed500185 ldfe f0, \[r0, #-532\]
+ 274: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed500185 ldfe f0, \[r0, #-532\]
+ 278: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed500185 ldfe f0, \[r0, #-532\]
+ 27c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed500185 ldfe f0, \[r0, #-532\]
+ 280: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed500185 ldfe f0, \[r0, #-532\]
+ 284: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed400185 stfe f0, \[r0, #-532\]
+ 288: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed400185 stfe f0, \[r0, #-532\]
+ 28c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed400185 stfe f0, \[r0, #-532\]
+ 290: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed400185 stfe f0, \[r0, #-532\]
+ 294: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed400185 stfe f0, \[r0, #-532\]
+ 298: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed400185 stfe f0, \[r0, #-532\]
+ 29c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> edd08185 ldfp f0, \[r0, #532\]
+ 2a0: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> edd08185 ldfp f0, \[r0, #532\]
+ 2a4: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> edd08185 ldfp f0, \[r0, #532\]
+ 2a8: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> edd08185 ldfp f0, \[r0, #532\]
+ 2ac: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> edd08185 ldfp f0, \[r0, #532\]
+ 2b0: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> edd08185 ldfp f0, \[r0, #532\]
+ 2b4: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> edc08185 stfp f0, \[r0, #532\]
+ 2b8: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> edc08185 stfp f0, \[r0, #532\]
+ 2bc: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> edc08185 stfp f0, \[r0, #532\]
+ 2c0: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> edc08185 stfp f0, \[r0, #532\]
+ 2c4: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> edc08185 stfp f0, \[r0, #532\]
+ 2c8: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> edc08185 stfp f0, \[r0, #532\]
+ 2cc: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed508185 ldfp f0, \[r0, #-532\]
+ 2d0: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed508185 ldfp f0, \[r0, #-532\]
+ 2d4: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed508185 ldfp f0, \[r0, #-532\]
+ 2d8: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed508185 ldfp f0, \[r0, #-532\]
+ 2dc: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed508185 ldfp f0, \[r0, #-532\]
+ 2e0: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed508185 ldfp f0, \[r0, #-532\]
+ 2e4: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed408185 stfp f0, \[r0, #-532\]
+ 2e8: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed408185 stfp f0, \[r0, #-532\]
+ 2ec: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed408185 stfp f0, \[r0, #-532\]
+ 2f0: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed408185 stfp f0, \[r0, #-532\]
+ 2f4: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed408185 stfp f0, \[r0, #-532\]
+ 2f8: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed408185 stfp f0, \[r0, #-532\]
+ 2fc: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed900a85 flds s0, \[r0, #532\]
+ 300: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed900a85 flds s0, \[r0, #532\]
+ 304: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed900a85 flds s0, \[r0, #532\]
+ 308: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed900a85 flds s0, \[r0, #532\]
+ 30c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed900a85 flds s0, \[r0, #532\]
+ 310: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed900a85 flds s0, \[r0, #532\]
+ 314: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed800a85 fsts s0, \[r0, #532\]
+ 318: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed800a85 fsts s0, \[r0, #532\]
+ 31c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed800a85 fsts s0, \[r0, #532\]
+ 320: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed800a85 fsts s0, \[r0, #532\]
+ 324: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed800a85 fsts s0, \[r0, #532\]
+ 328: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed800a85 fsts s0, \[r0, #532\]
+ 32c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed100a85 flds s0, \[r0, #-532\]
+ 330: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed100a85 flds s0, \[r0, #-532\]
+ 334: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed100a85 flds s0, \[r0, #-532\]
+ 338: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed100a85 flds s0, \[r0, #-532\]
+ 33c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed100a85 flds s0, \[r0, #-532\]
+ 340: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed100a85 flds s0, \[r0, #-532\]
+ 344: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed000a85 fsts s0, \[r0, #-532\]
+ 348: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed000a85 fsts s0, \[r0, #-532\]
+ 34c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed000a85 fsts s0, \[r0, #-532\]
+ 350: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed000a85 fsts s0, \[r0, #-532\]
+ 354: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed000a85 fsts s0, \[r0, #-532\]
+ 358: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed000a85 fsts s0, \[r0, #-532\]
+ 35c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed900b85 vldr d0, \[r0, #532\]
+ 360: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed900b85 vldr d0, \[r0, #532\]
+ 364: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed900b85 vldr d0, \[r0, #532\]
+ 368: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed900b85 vldr d0, \[r0, #532\]
+ 36c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed900b85 vldr d0, \[r0, #532\]
+ 370: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed900b85 vldr d0, \[r0, #532\]
+ 374: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed800b85 vstr d0, \[r0, #532\]
+ 378: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed800b85 vstr d0, \[r0, #532\]
+ 37c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed800b85 vstr d0, \[r0, #532\]
+ 380: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed800b85 vstr d0, \[r0, #532\]
+ 384: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed800b85 vstr d0, \[r0, #532\]
+ 388: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed800b85 vstr d0, \[r0, #532\]
+ 38c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed100b85 vldr d0, \[r0, #-532\]
+ 390: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed100b85 vldr d0, \[r0, #-532\]
+ 394: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed100b85 vldr d0, \[r0, #-532\]
+ 398: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed100b85 vldr d0, \[r0, #-532\]
+ 39c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed100b85 vldr d0, \[r0, #-532\]
+ 3a0: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed100b85 vldr d0, \[r0, #-532\]
+ 3a4: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed000b85 vstr d0, \[r0, #-532\]
+ 3a8: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed000b85 vstr d0, \[r0, #-532\]
+ 3ac: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed000b85 vstr d0, \[r0, #-532\]
+ 3b0: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed000b85 vstr d0, \[r0, #-532\]
+ 3b4: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed000b85 vstr d0, \[r0, #-532\]
+ 3b8: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed000b85 vstr d0, \[r0, #-532\]
+ 3bc: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed900b85 vldr d0, \[r0, #532\]
+ 3c0: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed900b85 vldr d0, \[r0, #532\]
+ 3c4: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed900b85 vldr d0, \[r0, #532\]
+ 3c8: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed900b85 vldr d0, \[r0, #532\]
+ 3cc: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed900b85 vldr d0, \[r0, #532\]
+ 3d0: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed900b85 vldr d0, \[r0, #532\]
+ 3d4: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed800b85 vstr d0, \[r0, #532\]
+ 3d8: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed800b85 vstr d0, \[r0, #532\]
+ 3dc: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed800b85 vstr d0, \[r0, #532\]
+ 3e0: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed800b85 vstr d0, \[r0, #532\]
+ 3e4: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed800b85 vstr d0, \[r0, #532\]
+ 3e8: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed800b85 vstr d0, \[r0, #532\]
+ 3ec: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed100b85 vldr d0, \[r0, #-532\]
+ 3f0: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed100b85 vldr d0, \[r0, #-532\]
+ 3f4: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed100b85 vldr d0, \[r0, #-532\]
+ 3f8: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed100b85 vldr d0, \[r0, #-532\]
+ 3fc: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed100b85 vldr d0, \[r0, #-532\]
+ 400: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed100b85 vldr d0, \[r0, #-532\]
+ 404: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed000b85 vstr d0, \[r0, #-532\]
+ 408: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed000b85 vstr d0, \[r0, #-532\]
+ 40c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed000b85 vstr d0, \[r0, #-532\]
+ 410: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed000b85 vstr d0, \[r0, #-532\]
+ 414: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed000b85 vstr d0, \[r0, #-532\]
+ 418: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed000b85 vstr d0, \[r0, #-532\]
+ 41c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed900485 cfldrs mvf0, \[r0, #532\]
+ 420: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed900485 cfldrs mvf0, \[r0, #532\]
+ 424: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed900485 cfldrs mvf0, \[r0, #532\]
+ 428: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed900485 cfldrs mvf0, \[r0, #532\]
+ 42c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed900485 cfldrs mvf0, \[r0, #532\]
+ 430: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed900485 cfldrs mvf0, \[r0, #532\]
+ 434: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed800485 cfstrs mvf0, \[r0, #532\]
+ 438: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed800485 cfstrs mvf0, \[r0, #532\]
+ 43c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed800485 cfstrs mvf0, \[r0, #532\]
+ 440: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed800485 cfstrs mvf0, \[r0, #532\]
+ 444: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed800485 cfstrs mvf0, \[r0, #532\]
+ 448: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed800485 cfstrs mvf0, \[r0, #532\]
+ 44c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed100485 cfldrs mvf0, \[r0, #-532\]
+ 450: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed100485 cfldrs mvf0, \[r0, #-532\]
+ 454: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed100485 cfldrs mvf0, \[r0, #-532\]
+ 458: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed100485 cfldrs mvf0, \[r0, #-532\]
+ 45c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed100485 cfldrs mvf0, \[r0, #-532\]
+ 460: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed100485 cfldrs mvf0, \[r0, #-532\]
+ 464: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed000485 cfstrs mvf0, \[r0, #-532\]
+ 468: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed000485 cfstrs mvf0, \[r0, #-532\]
+ 46c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed000485 cfstrs mvf0, \[r0, #-532\]
+ 470: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed000485 cfstrs mvf0, \[r0, #-532\]
+ 474: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed000485 cfstrs mvf0, \[r0, #-532\]
+ 478: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed000485 cfstrs mvf0, \[r0, #-532\]
+ 47c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> edd00485 cfldrd mvd0, \[r0, #532\]
+ 480: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> edd00485 cfldrd mvd0, \[r0, #532\]
+ 484: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> edd00485 cfldrd mvd0, \[r0, #532\]
+ 488: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> edd00485 cfldrd mvd0, \[r0, #532\]
+ 48c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> edd00485 cfldrd mvd0, \[r0, #532\]
+ 490: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> edd00485 cfldrd mvd0, \[r0, #532\]
+ 494: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> edc00485 cfstrd mvd0, \[r0, #532\]
+ 498: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> edc00485 cfstrd mvd0, \[r0, #532\]
+ 49c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> edc00485 cfstrd mvd0, \[r0, #532\]
+ 4a0: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> edc00485 cfstrd mvd0, \[r0, #532\]
+ 4a4: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> edc00485 cfstrd mvd0, \[r0, #532\]
+ 4a8: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> edc00485 cfstrd mvd0, \[r0, #532\]
+ 4ac: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed500485 cfldrd mvd0, \[r0, #-532\]
+ 4b0: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed500485 cfldrd mvd0, \[r0, #-532\]
+ 4b4: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed500485 cfldrd mvd0, \[r0, #-532\]
+ 4b8: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed500485 cfldrd mvd0, \[r0, #-532\]
+ 4bc: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed500485 cfldrd mvd0, \[r0, #-532\]
+ 4c0: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed500485 cfldrd mvd0, \[r0, #-532\]
+ 4c4: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed400485 cfstrd mvd0, \[r0, #-532\]
+ 4c8: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed400485 cfstrd mvd0, \[r0, #-532\]
+ 4cc: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed400485 cfstrd mvd0, \[r0, #-532\]
+ 4d0: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed400485 cfstrd mvd0, \[r0, #-532\]
+ 4d4: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed400485 cfstrd mvd0, \[r0, #-532\]
+ 4d8: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed400485 cfstrd mvd0, \[r0, #-532\]
+ 4dc: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed900585 cfldr32 mvfx0, \[r0, #532\]
+ 4e0: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed900585 cfldr32 mvfx0, \[r0, #532\]
+ 4e4: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed900585 cfldr32 mvfx0, \[r0, #532\]
+ 4e8: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed900585 cfldr32 mvfx0, \[r0, #532\]
+ 4ec: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed900585 cfldr32 mvfx0, \[r0, #532\]
+ 4f0: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed900585 cfldr32 mvfx0, \[r0, #532\]
+ 4f4: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed800585 cfstr32 mvfx0, \[r0, #532\]
+ 4f8: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed800585 cfstr32 mvfx0, \[r0, #532\]
+ 4fc: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed800585 cfstr32 mvfx0, \[r0, #532\]
+ 500: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed800585 cfstr32 mvfx0, \[r0, #532\]
+ 504: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed800585 cfstr32 mvfx0, \[r0, #532\]
+ 508: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed800585 cfstr32 mvfx0, \[r0, #532\]
+ 50c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed100585 cfldr32 mvfx0, \[r0, #-532\]
+ 510: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed100585 cfldr32 mvfx0, \[r0, #-532\]
+ 514: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed100585 cfldr32 mvfx0, \[r0, #-532\]
+ 518: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed100585 cfldr32 mvfx0, \[r0, #-532\]
+ 51c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed100585 cfldr32 mvfx0, \[r0, #-532\]
+ 520: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed100585 cfldr32 mvfx0, \[r0, #-532\]
+ 524: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed000585 cfstr32 mvfx0, \[r0, #-532\]
+ 528: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed000585 cfstr32 mvfx0, \[r0, #-532\]
+ 52c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed000585 cfstr32 mvfx0, \[r0, #-532\]
+ 530: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed000585 cfstr32 mvfx0, \[r0, #-532\]
+ 534: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed000585 cfstr32 mvfx0, \[r0, #-532\]
+ 538: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed000585 cfstr32 mvfx0, \[r0, #-532\]
+ 53c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> edd00585 cfldr64 mvdx0, \[r0, #532\]
+ 540: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> edd00585 cfldr64 mvdx0, \[r0, #532\]
+ 544: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> edd00585 cfldr64 mvdx0, \[r0, #532\]
+ 548: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> edd00585 cfldr64 mvdx0, \[r0, #532\]
+ 54c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> edd00585 cfldr64 mvdx0, \[r0, #532\]
+ 550: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> edd00585 cfldr64 mvdx0, \[r0, #532\]
+ 554: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> edc00585 cfstr64 mvdx0, \[r0, #532\]
+ 558: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> edc00585 cfstr64 mvdx0, \[r0, #532\]
+ 55c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> edc00585 cfstr64 mvdx0, \[r0, #532\]
+ 560: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> edc00585 cfstr64 mvdx0, \[r0, #532\]
+ 564: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> edc00585 cfstr64 mvdx0, \[r0, #532\]
+ 568: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> edc00585 cfstr64 mvdx0, \[r0, #532\]
+ 56c: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed500585 cfldr64 mvdx0, \[r0, #-532\]
+ 570: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed500585 cfldr64 mvdx0, \[r0, #-532\]
+ 574: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed500585 cfldr64 mvdx0, \[r0, #-532\]
+ 578: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed500585 cfldr64 mvdx0, \[r0, #-532\]
+ 57c: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed500585 cfldr64 mvdx0, \[r0, #-532\]
+ 580: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed500585 cfldr64 mvdx0, \[r0, #-532\]
+ 584: R_ARM_LDC_SB_G2 f
+0[0-9a-f]+ <[^>]+> ed400585 cfstr64 mvdx0, \[r0, #-532\]
+ 588: R_ARM_LDC_PC_G0 f
+0[0-9a-f]+ <[^>]+> ed400585 cfstr64 mvdx0, \[r0, #-532\]
+ 58c: R_ARM_LDC_PC_G1 f
+0[0-9a-f]+ <[^>]+> ed400585 cfstr64 mvdx0, \[r0, #-532\]
+ 590: R_ARM_LDC_PC_G2 f
+0[0-9a-f]+ <[^>]+> ed400585 cfstr64 mvdx0, \[r0, #-532\]
+ 594: R_ARM_LDC_SB_G0 f
+0[0-9a-f]+ <[^>]+> ed400585 cfstr64 mvdx0, \[r0, #-532\]
+ 598: R_ARM_LDC_SB_G1 f
+0[0-9a-f]+ <[^>]+> ed400585 cfstr64 mvdx0, \[r0, #-532\]
+ 59c: R_ARM_LDC_SB_G2 f
diff --git a/gas/testsuite/gas/arm/group-reloc-ldc.s b/gas/testsuite/gas/arm/group-reloc-ldc.s
new file mode 100644
index 000000000000..df27aaf55e07
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldc.s
@@ -0,0 +1,151 @@
+@ LDC group relocation tests.
+
+ .text
+
+@ LDC/LDCL/LDC2/LDC2L/STC/STCL/STC2/STC2L
+
+ .macro ldctest load store
+
+ \load 0, c0, [r0, #:pc_g0:(f + 0x214)]
+ \load 0, c0, [r0, #:pc_g1:(f + 0x214)]
+ \load 0, c0, [r0, #:pc_g2:(f + 0x214)]
+
+ \load 0, c0, [r0, #:sb_g0:(f + 0x214)]
+ \load 0, c0, [r0, #:sb_g1:(f + 0x214)]
+ \load 0, c0, [r0, #:sb_g2:(f + 0x214)]
+
+ \store 0, c0, [r0, #:pc_g0:(f + 0x214)]
+ \store 0, c0, [r0, #:pc_g1:(f + 0x214)]
+ \store 0, c0, [r0, #:pc_g2:(f + 0x214)]
+
+ \store 0, c0, [r0, #:sb_g0:(f + 0x214)]
+ \store 0, c0, [r0, #:sb_g1:(f + 0x214)]
+ \store 0, c0, [r0, #:sb_g2:(f + 0x214)]
+
+ \load 0, c0, [r0, #:pc_g0:(f - 0x214)]
+ \load 0, c0, [r0, #:pc_g1:(f - 0x214)]
+ \load 0, c0, [r0, #:pc_g2:(f - 0x214)]
+
+ \load 0, c0, [r0, #:sb_g0:(f - 0x214)]
+ \load 0, c0, [r0, #:sb_g1:(f - 0x214)]
+ \load 0, c0, [r0, #:sb_g2:(f - 0x214)]
+
+ \store 0, c0, [r0, #:pc_g0:(f - 0x214)]
+ \store 0, c0, [r0, #:pc_g1:(f - 0x214)]
+ \store 0, c0, [r0, #:pc_g2:(f - 0x214)]
+
+ \store 0, c0, [r0, #:sb_g0:(f - 0x214)]
+ \store 0, c0, [r0, #:sb_g1:(f - 0x214)]
+ \store 0, c0, [r0, #:sb_g2:(f - 0x214)]
+
+ .endm
+
+ ldctest ldc stc
+ ldctest ldcl stcl
+ ldctest ldc2 stc2
+ ldctest ldc2l stc2l
+
+@ LDFS/STFS/LDFD/STFD/LDFE/STFE/LDFP/STFP
+
+ .fpu fpa
+
+ .macro fpa_test load store
+
+ \load f0, [r0, #:pc_g0:(f + 0x214)]
+ \load f0, [r0, #:pc_g1:(f + 0x214)]
+ \load f0, [r0, #:pc_g2:(f + 0x214)]
+
+ \load f0, [r0, #:sb_g0:(f + 0x214)]
+ \load f0, [r0, #:sb_g1:(f + 0x214)]
+ \load f0, [r0, #:sb_g2:(f + 0x214)]
+
+ \store f0, [r0, #:pc_g0:(f + 0x214)]
+ \store f0, [r0, #:pc_g1:(f + 0x214)]
+ \store f0, [r0, #:pc_g2:(f + 0x214)]
+
+ \store f0, [r0, #:sb_g0:(f + 0x214)]
+ \store f0, [r0, #:sb_g1:(f + 0x214)]
+ \store f0, [r0, #:sb_g2:(f + 0x214)]
+
+ \load f0, [r0, #:pc_g0:(f - 0x214)]
+ \load f0, [r0, #:pc_g1:(f - 0x214)]
+ \load f0, [r0, #:pc_g2:(f - 0x214)]
+
+ \load f0, [r0, #:sb_g0:(f - 0x214)]
+ \load f0, [r0, #:sb_g1:(f - 0x214)]
+ \load f0, [r0, #:sb_g2:(f - 0x214)]
+
+ \store f0, [r0, #:pc_g0:(f - 0x214)]
+ \store f0, [r0, #:pc_g1:(f - 0x214)]
+ \store f0, [r0, #:pc_g2:(f - 0x214)]
+
+ \store f0, [r0, #:sb_g0:(f - 0x214)]
+ \store f0, [r0, #:sb_g1:(f - 0x214)]
+ \store f0, [r0, #:sb_g2:(f - 0x214)]
+
+ .endm
+
+ fpa_test ldfs stfs
+ fpa_test ldfd stfd
+ fpa_test ldfe stfe
+ fpa_test ldfp stfp
+
+@ FLDS/FSTS
+
+ .fpu vfp
+
+ .macro vfp_test load store reg
+
+ \load \reg, [r0, #:pc_g0:(f + 0x214)]
+ \load \reg, [r0, #:pc_g1:(f + 0x214)]
+ \load \reg, [r0, #:pc_g2:(f + 0x214)]
+
+ \load \reg, [r0, #:sb_g0:(f + 0x214)]
+ \load \reg, [r0, #:sb_g1:(f + 0x214)]
+ \load \reg, [r0, #:sb_g2:(f + 0x214)]
+
+ \store \reg, [r0, #:pc_g0:(f + 0x214)]
+ \store \reg, [r0, #:pc_g1:(f + 0x214)]
+ \store \reg, [r0, #:pc_g2:(f + 0x214)]
+
+ \store \reg, [r0, #:sb_g0:(f + 0x214)]
+ \store \reg, [r0, #:sb_g1:(f + 0x214)]
+ \store \reg, [r0, #:sb_g2:(f + 0x214)]
+
+ \load \reg, [r0, #:pc_g0:(f - 0x214)]
+ \load \reg, [r0, #:pc_g1:(f - 0x214)]
+ \load \reg, [r0, #:pc_g2:(f - 0x214)]
+
+ \load \reg, [r0, #:sb_g0:(f - 0x214)]
+ \load \reg, [r0, #:sb_g1:(f - 0x214)]
+ \load \reg, [r0, #:sb_g2:(f - 0x214)]
+
+ \store \reg, [r0, #:pc_g0:(f - 0x214)]
+ \store \reg, [r0, #:pc_g1:(f - 0x214)]
+ \store \reg, [r0, #:pc_g2:(f - 0x214)]
+
+ \store \reg, [r0, #:sb_g0:(f - 0x214)]
+ \store \reg, [r0, #:sb_g1:(f - 0x214)]
+ \store \reg, [r0, #:sb_g2:(f - 0x214)]
+
+ .endm
+
+ vfp_test flds fsts s0
+
+@ FLDD/FSTD
+
+ vfp_test fldd fstd d0
+
+@ VLDR/VSTR
+
+ vfp_test vldr vstr d0
+
+@ CFLDRS/CFLDRD/CFLDR32/CFLDR64/CFSTRS/CFSTRD/CFSTR32/CFSTR64
+
+ .cpu ep9312
+
+ vfp_test cfldrs cfstrs mvf0
+ vfp_test cfldrd cfstrd mvd0
+ vfp_test cfldr32 cfstr32 mvfx0
+ vfp_test cfldr64 cfstr64 mvdx0
+
diff --git a/gas/testsuite/gas/arm/group-reloc-ldr-encoding-bad.d b/gas/testsuite/gas/arm/group-reloc-ldr-encoding-bad.d
new file mode 100644
index 000000000000..49ba77478e44
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldr-encoding-bad.d
@@ -0,0 +1,3 @@
+#name: Group relocation tests, encoding failures (ldr)
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#error-output: group-reloc-ldr-encoding-bad.l
diff --git a/gas/testsuite/gas/arm/group-reloc-ldr-encoding-bad.l b/gas/testsuite/gas/arm/group-reloc-ldr-encoding-bad.l
new file mode 100644
index 000000000000..276a341dc34d
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldr-encoding-bad.l
@@ -0,0 +1,97 @@
+[^:]*: Assembler messages:
+[^:]*:27: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:27: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:27: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:27: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:27: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:27: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:27: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:27: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:27: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:27: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:27: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:27: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:28: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:28: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:28: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:28: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:28: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:28: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:28: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:28: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:28: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:28: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:28: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:28: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:29: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:29: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:29: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:29: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:29: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:29: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:29: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:29: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:29: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:29: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:29: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:29: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:34: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:34: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:34: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:34: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:34: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:34: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:34: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:34: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:34: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:34: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:34: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:34: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00001000 \(only 12 bits available for the magnitude\)
diff --git a/gas/testsuite/gas/arm/group-reloc-ldr-encoding-bad.s b/gas/testsuite/gas/arm/group-reloc-ldr-encoding-bad.s
new file mode 100644
index 000000000000..3c528f19975b
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldr-encoding-bad.s
@@ -0,0 +1,39 @@
+@ Tests that are supposed to fail during encoding
+@ for LDR group relocations.
+
+ .text
+
+ .macro ldrtest load store sym offset
+
+ \load r0, [r0, #:pc_g0:(\sym \offset)]
+ \load r0, [r0, #:pc_g1:(\sym \offset)]
+ \load r0, [r0, #:pc_g2:(\sym \offset)]
+ \load r0, [r0, #:sb_g0:(\sym \offset)]
+ \load r0, [r0, #:sb_g1:(\sym \offset)]
+ \load r0, [r0, #:sb_g2:(\sym \offset)]
+
+ \store r0, [r0, #:pc_g0:(\sym \offset)]
+ \store r0, [r0, #:pc_g1:(\sym \offset)]
+ \store r0, [r0, #:pc_g2:(\sym \offset)]
+ \store r0, [r0, #:sb_g0:(\sym \offset)]
+ \store r0, [r0, #:sb_g1:(\sym \offset)]
+ \store r0, [r0, #:sb_g2:(\sym \offset)]
+
+ .endm
+
+@ LDR/STR/LDRB/STRB only have 12 bits available for the magnitude of the addend.
+@ So these should all fail.
+
+ ldrtest ldr str f "+ 4096"
+ ldrtest ldrb strb f "+ 4096"
+ ldrtest ldr str f "- 4096"
+ ldrtest ldrb strb f "- 4096"
+
+ ldrtest ldr str localsym "+ 4096"
+ ldrtest ldrb strb localsym "+ 4096"
+ ldrtest ldr str localsym "- 4096"
+ ldrtest ldrb strb localsym "- 4096"
+
+localsym:
+ mov r0, #0
+
diff --git a/gas/testsuite/gas/arm/group-reloc-ldr-parsing-bad.d b/gas/testsuite/gas/arm/group-reloc-ldr-parsing-bad.d
new file mode 100644
index 000000000000..fa0941e80a9e
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldr-parsing-bad.d
@@ -0,0 +1,3 @@
+#name: Group relocation tests, parsing failures (ldr)
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#error-output: group-reloc-ldr-parsing-bad.l
diff --git a/gas/testsuite/gas/arm/group-reloc-ldr-parsing-bad.l b/gas/testsuite/gas/arm/group-reloc-ldr-parsing-bad.l
new file mode 100644
index 000000000000..316a6a6c8d8d
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldr-parsing-bad.l
@@ -0,0 +1,21 @@
+[^:]*: Assembler messages:
+[^:]*:7: Error: this group relocation is not allowed on this instruction -- `ldr r0,\[r0,#:pc_g0_nc:\(f\)\]'
+[^:]*:8: Error: this group relocation is not allowed on this instruction -- `ldr r0,\[r0,#:pc_g1_nc:\(f\)\]'
+[^:]*:9: Error: this group relocation is not allowed on this instruction -- `ldr r0,\[r0,#:sb_g0_nc:\(f\)\]'
+[^:]*:10: Error: this group relocation is not allowed on this instruction -- `ldr r0,\[r0,#:sb_g1_nc:\(f\)\]'
+[^:]*:12: Error: this group relocation is not allowed on this instruction -- `str r0,\[r0,#:pc_g0_nc:\(f\)\]'
+[^:]*:13: Error: this group relocation is not allowed on this instruction -- `str r0,\[r0,#:pc_g1_nc:\(f\)\]'
+[^:]*:14: Error: this group relocation is not allowed on this instruction -- `str r0,\[r0,#:sb_g0_nc:\(f\)\]'
+[^:]*:15: Error: this group relocation is not allowed on this instruction -- `str r0,\[r0,#:sb_g1_nc:\(f\)\]'
+[^:]*:17: Error: this group relocation is not allowed on this instruction -- `ldrb r0,\[r0,#:pc_g0_nc:\(f\)\]'
+[^:]*:18: Error: this group relocation is not allowed on this instruction -- `ldrb r0,\[r0,#:pc_g1_nc:\(f\)\]'
+[^:]*:19: Error: this group relocation is not allowed on this instruction -- `ldrb r0,\[r0,#:sb_g0_nc:\(f\)\]'
+[^:]*:20: Error: this group relocation is not allowed on this instruction -- `ldrb r0,\[r0,#:sb_g1_nc:\(f\)\]'
+[^:]*:22: Error: this group relocation is not allowed on this instruction -- `strb r0,\[r0,#:pc_g0_nc:\(f\)\]'
+[^:]*:23: Error: this group relocation is not allowed on this instruction -- `strb r0,\[r0,#:pc_g1_nc:\(f\)\]'
+[^:]*:24: Error: this group relocation is not allowed on this instruction -- `strb r0,\[r0,#:sb_g0_nc:\(f\)\]'
+[^:]*:25: Error: this group relocation is not allowed on this instruction -- `strb r0,\[r0,#:sb_g1_nc:\(f\)\]'
+[^:]*:29: Error: unknown group relocation -- `ldr r0,\[r0,#:foo:\(f\)\]'
+[^:]*:30: Error: unknown group relocation -- `str r0,\[r0,#:foo:\(f\)\]'
+[^:]*:31: Error: unknown group relocation -- `ldrb r0,\[r0,#:foo:\(f\)\]'
+[^:]*:32: Error: unknown group relocation -- `strb r0,\[r0,#:foo:\(f\)\]'
diff --git a/gas/testsuite/gas/arm/group-reloc-ldr-parsing-bad.s b/gas/testsuite/gas/arm/group-reloc-ldr-parsing-bad.s
new file mode 100644
index 000000000000..c7d0ba759651
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldr-parsing-bad.s
@@ -0,0 +1,33 @@
+@ Tests that are supposed to fail during parsing of LDR group relocations.
+
+ .text
+
+@ No NC variants exist for the LDR relocations.
+
+ ldr r0, [r0, #:pc_g0_nc:(f)]
+ ldr r0, [r0, #:pc_g1_nc:(f)]
+ ldr r0, [r0, #:sb_g0_nc:(f)]
+ ldr r0, [r0, #:sb_g1_nc:(f)]
+
+ str r0, [r0, #:pc_g0_nc:(f)]
+ str r0, [r0, #:pc_g1_nc:(f)]
+ str r0, [r0, #:sb_g0_nc:(f)]
+ str r0, [r0, #:sb_g1_nc:(f)]
+
+ ldrb r0, [r0, #:pc_g0_nc:(f)]
+ ldrb r0, [r0, #:pc_g1_nc:(f)]
+ ldrb r0, [r0, #:sb_g0_nc:(f)]
+ ldrb r0, [r0, #:sb_g1_nc:(f)]
+
+ strb r0, [r0, #:pc_g0_nc:(f)]
+ strb r0, [r0, #:pc_g1_nc:(f)]
+ strb r0, [r0, #:sb_g0_nc:(f)]
+ strb r0, [r0, #:sb_g1_nc:(f)]
+
+@ Instructions with a gibberish relocation code.
+
+ ldr r0, [r0, #:foo:(f)]
+ str r0, [r0, #:foo:(f)]
+ ldrb r0, [r0, #:foo:(f)]
+ strb r0, [r0, #:foo:(f)]
+
diff --git a/gas/testsuite/gas/arm/group-reloc-ldr.d b/gas/testsuite/gas/arm/group-reloc-ldr.d
new file mode 100644
index 000000000000..cfc1b235cb6c
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldr.d
@@ -0,0 +1,200 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#name: Group relocation tests (ldr)
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> e5900fff ldr r0, \[r0, #4095\]
+ 0: R_ARM_LDR_PC_G0 f
+0[0-9a-f]+ <[^>]+> e5900fff ldr r0, \[r0, #4095\]
+ 4: R_ARM_LDR_PC_G1 f
+0[0-9a-f]+ <[^>]+> e5900fff ldr r0, \[r0, #4095\]
+ 8: R_ARM_LDR_PC_G2 f
+0[0-9a-f]+ <[^>]+> e5900fff ldr r0, \[r0, #4095\]
+ c: R_ARM_LDR_SB_G0 f
+0[0-9a-f]+ <[^>]+> e5900fff ldr r0, \[r0, #4095\]
+ 10: R_ARM_LDR_SB_G1 f
+0[0-9a-f]+ <[^>]+> e5900fff ldr r0, \[r0, #4095\]
+ 14: R_ARM_LDR_SB_G2 f
+0[0-9a-f]+ <[^>]+> e5800fff str r0, \[r0, #4095\]
+ 18: R_ARM_LDR_PC_G0 f
+0[0-9a-f]+ <[^>]+> e5800fff str r0, \[r0, #4095\]
+ 1c: R_ARM_LDR_PC_G1 f
+0[0-9a-f]+ <[^>]+> e5800fff str r0, \[r0, #4095\]
+ 20: R_ARM_LDR_PC_G2 f
+0[0-9a-f]+ <[^>]+> e5800fff str r0, \[r0, #4095\]
+ 24: R_ARM_LDR_SB_G0 f
+0[0-9a-f]+ <[^>]+> e5800fff str r0, \[r0, #4095\]
+ 28: R_ARM_LDR_SB_G1 f
+0[0-9a-f]+ <[^>]+> e5800fff str r0, \[r0, #4095\]
+ 2c: R_ARM_LDR_SB_G2 f
+0[0-9a-f]+ <[^>]+> e5d00fff ldrb r0, \[r0, #4095\]
+ 30: R_ARM_LDR_PC_G0 f
+0[0-9a-f]+ <[^>]+> e5d00fff ldrb r0, \[r0, #4095\]
+ 34: R_ARM_LDR_PC_G1 f
+0[0-9a-f]+ <[^>]+> e5d00fff ldrb r0, \[r0, #4095\]
+ 38: R_ARM_LDR_PC_G2 f
+0[0-9a-f]+ <[^>]+> e5d00fff ldrb r0, \[r0, #4095\]
+ 3c: R_ARM_LDR_SB_G0 f
+0[0-9a-f]+ <[^>]+> e5d00fff ldrb r0, \[r0, #4095\]
+ 40: R_ARM_LDR_SB_G1 f
+0[0-9a-f]+ <[^>]+> e5d00fff ldrb r0, \[r0, #4095\]
+ 44: R_ARM_LDR_SB_G2 f
+0[0-9a-f]+ <[^>]+> e5c00fff strb r0, \[r0, #4095\]
+ 48: R_ARM_LDR_PC_G0 f
+0[0-9a-f]+ <[^>]+> e5c00fff strb r0, \[r0, #4095\]
+ 4c: R_ARM_LDR_PC_G1 f
+0[0-9a-f]+ <[^>]+> e5c00fff strb r0, \[r0, #4095\]
+ 50: R_ARM_LDR_PC_G2 f
+0[0-9a-f]+ <[^>]+> e5c00fff strb r0, \[r0, #4095\]
+ 54: R_ARM_LDR_SB_G0 f
+0[0-9a-f]+ <[^>]+> e5c00fff strb r0, \[r0, #4095\]
+ 58: R_ARM_LDR_SB_G1 f
+0[0-9a-f]+ <[^>]+> e5c00fff strb r0, \[r0, #4095\]
+ 5c: R_ARM_LDR_SB_G2 f
+0[0-9a-f]+ <[^>]+> e5100fff ldr r0, \[r0, #-4095\]
+ 60: R_ARM_LDR_PC_G0 f
+0[0-9a-f]+ <[^>]+> e5100fff ldr r0, \[r0, #-4095\]
+ 64: R_ARM_LDR_PC_G1 f
+0[0-9a-f]+ <[^>]+> e5100fff ldr r0, \[r0, #-4095\]
+ 68: R_ARM_LDR_PC_G2 f
+0[0-9a-f]+ <[^>]+> e5100fff ldr r0, \[r0, #-4095\]
+ 6c: R_ARM_LDR_SB_G0 f
+0[0-9a-f]+ <[^>]+> e5100fff ldr r0, \[r0, #-4095\]
+ 70: R_ARM_LDR_SB_G1 f
+0[0-9a-f]+ <[^>]+> e5100fff ldr r0, \[r0, #-4095\]
+ 74: R_ARM_LDR_SB_G2 f
+0[0-9a-f]+ <[^>]+> e5000fff str r0, \[r0, #-4095\]
+ 78: R_ARM_LDR_PC_G0 f
+0[0-9a-f]+ <[^>]+> e5000fff str r0, \[r0, #-4095\]
+ 7c: R_ARM_LDR_PC_G1 f
+0[0-9a-f]+ <[^>]+> e5000fff str r0, \[r0, #-4095\]
+ 80: R_ARM_LDR_PC_G2 f
+0[0-9a-f]+ <[^>]+> e5000fff str r0, \[r0, #-4095\]
+ 84: R_ARM_LDR_SB_G0 f
+0[0-9a-f]+ <[^>]+> e5000fff str r0, \[r0, #-4095\]
+ 88: R_ARM_LDR_SB_G1 f
+0[0-9a-f]+ <[^>]+> e5000fff str r0, \[r0, #-4095\]
+ 8c: R_ARM_LDR_SB_G2 f
+0[0-9a-f]+ <[^>]+> e5500fff ldrb r0, \[r0, #-4095\]
+ 90: R_ARM_LDR_PC_G0 f
+0[0-9a-f]+ <[^>]+> e5500fff ldrb r0, \[r0, #-4095\]
+ 94: R_ARM_LDR_PC_G1 f
+0[0-9a-f]+ <[^>]+> e5500fff ldrb r0, \[r0, #-4095\]
+ 98: R_ARM_LDR_PC_G2 f
+0[0-9a-f]+ <[^>]+> e5500fff ldrb r0, \[r0, #-4095\]
+ 9c: R_ARM_LDR_SB_G0 f
+0[0-9a-f]+ <[^>]+> e5500fff ldrb r0, \[r0, #-4095\]
+ a0: R_ARM_LDR_SB_G1 f
+0[0-9a-f]+ <[^>]+> e5500fff ldrb r0, \[r0, #-4095\]
+ a4: R_ARM_LDR_SB_G2 f
+0[0-9a-f]+ <[^>]+> e5400fff strb r0, \[r0, #-4095\]
+ a8: R_ARM_LDR_PC_G0 f
+0[0-9a-f]+ <[^>]+> e5400fff strb r0, \[r0, #-4095\]
+ ac: R_ARM_LDR_PC_G1 f
+0[0-9a-f]+ <[^>]+> e5400fff strb r0, \[r0, #-4095\]
+ b0: R_ARM_LDR_PC_G2 f
+0[0-9a-f]+ <[^>]+> e5400fff strb r0, \[r0, #-4095\]
+ b4: R_ARM_LDR_SB_G0 f
+0[0-9a-f]+ <[^>]+> e5400fff strb r0, \[r0, #-4095\]
+ b8: R_ARM_LDR_SB_G1 f
+0[0-9a-f]+ <[^>]+> e5400fff strb r0, \[r0, #-4095\]
+ bc: R_ARM_LDR_SB_G2 f
+0[0-9a-f]+ <[^>]+> e5900fff ldr r0, \[r0, #4095\]
+ c0: R_ARM_LDR_PC_G0 localsym
+0[0-9a-f]+ <[^>]+> e5900fff ldr r0, \[r0, #4095\]
+ c4: R_ARM_LDR_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e5900fff ldr r0, \[r0, #4095\]
+ c8: R_ARM_LDR_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e5900fff ldr r0, \[r0, #4095\]
+ cc: R_ARM_LDR_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e5900fff ldr r0, \[r0, #4095\]
+ d0: R_ARM_LDR_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e5900fff ldr r0, \[r0, #4095\]
+ d4: R_ARM_LDR_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e5800fff str r0, \[r0, #4095\]
+ d8: R_ARM_LDR_PC_G0 localsym
+0[0-9a-f]+ <[^>]+> e5800fff str r0, \[r0, #4095\]
+ dc: R_ARM_LDR_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e5800fff str r0, \[r0, #4095\]
+ e0: R_ARM_LDR_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e5800fff str r0, \[r0, #4095\]
+ e4: R_ARM_LDR_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e5800fff str r0, \[r0, #4095\]
+ e8: R_ARM_LDR_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e5800fff str r0, \[r0, #4095\]
+ ec: R_ARM_LDR_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e5d00fff ldrb r0, \[r0, #4095\]
+ f0: R_ARM_LDR_PC_G0 localsym
+0[0-9a-f]+ <[^>]+> e5d00fff ldrb r0, \[r0, #4095\]
+ f4: R_ARM_LDR_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e5d00fff ldrb r0, \[r0, #4095\]
+ f8: R_ARM_LDR_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e5d00fff ldrb r0, \[r0, #4095\]
+ fc: R_ARM_LDR_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e5d00fff ldrb r0, \[r0, #4095\]
+ 100: R_ARM_LDR_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e5d00fff ldrb r0, \[r0, #4095\]
+ 104: R_ARM_LDR_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e5c00fff strb r0, \[r0, #4095\]
+ 108: R_ARM_LDR_PC_G0 localsym
+0[0-9a-f]+ <[^>]+> e5c00fff strb r0, \[r0, #4095\]
+ 10c: R_ARM_LDR_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e5c00fff strb r0, \[r0, #4095\]
+ 110: R_ARM_LDR_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e5c00fff strb r0, \[r0, #4095\]
+ 114: R_ARM_LDR_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e5c00fff strb r0, \[r0, #4095\]
+ 118: R_ARM_LDR_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e5c00fff strb r0, \[r0, #4095\]
+ 11c: R_ARM_LDR_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e5100fff ldr r0, \[r0, #-4095\]
+ 120: R_ARM_LDR_PC_G0 localsym
+0[0-9a-f]+ <[^>]+> e5100fff ldr r0, \[r0, #-4095\]
+ 124: R_ARM_LDR_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e5100fff ldr r0, \[r0, #-4095\]
+ 128: R_ARM_LDR_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e5100fff ldr r0, \[r0, #-4095\]
+ 12c: R_ARM_LDR_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e5100fff ldr r0, \[r0, #-4095\]
+ 130: R_ARM_LDR_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e5100fff ldr r0, \[r0, #-4095\]
+ 134: R_ARM_LDR_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e5000fff str r0, \[r0, #-4095\]
+ 138: R_ARM_LDR_PC_G0 localsym
+0[0-9a-f]+ <[^>]+> e5000fff str r0, \[r0, #-4095\]
+ 13c: R_ARM_LDR_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e5000fff str r0, \[r0, #-4095\]
+ 140: R_ARM_LDR_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e5000fff str r0, \[r0, #-4095\]
+ 144: R_ARM_LDR_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e5000fff str r0, \[r0, #-4095\]
+ 148: R_ARM_LDR_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e5000fff str r0, \[r0, #-4095\]
+ 14c: R_ARM_LDR_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e5500fff ldrb r0, \[r0, #-4095\]
+ 150: R_ARM_LDR_PC_G0 localsym
+0[0-9a-f]+ <[^>]+> e5500fff ldrb r0, \[r0, #-4095\]
+ 154: R_ARM_LDR_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e5500fff ldrb r0, \[r0, #-4095\]
+ 158: R_ARM_LDR_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e5500fff ldrb r0, \[r0, #-4095\]
+ 15c: R_ARM_LDR_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e5500fff ldrb r0, \[r0, #-4095\]
+ 160: R_ARM_LDR_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e5500fff ldrb r0, \[r0, #-4095\]
+ 164: R_ARM_LDR_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e5400fff strb r0, \[r0, #-4095\]
+ 168: R_ARM_LDR_PC_G0 localsym
+0[0-9a-f]+ <[^>]+> e5400fff strb r0, \[r0, #-4095\]
+ 16c: R_ARM_LDR_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e5400fff strb r0, \[r0, #-4095\]
+ 170: R_ARM_LDR_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e5400fff strb r0, \[r0, #-4095\]
+ 174: R_ARM_LDR_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e5400fff strb r0, \[r0, #-4095\]
+ 178: R_ARM_LDR_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e5400fff strb r0, \[r0, #-4095\]
+ 17c: R_ARM_LDR_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e3a00000 mov r0, #0 ; 0x0
diff --git a/gas/testsuite/gas/arm/group-reloc-ldr.s b/gas/testsuite/gas/arm/group-reloc-ldr.s
new file mode 100644
index 000000000000..389042d70aff
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldr.s
@@ -0,0 +1,41 @@
+@ Tests for LDR group relocations.
+
+ .text
+
+ .macro ldrtest load store sym offset
+
+ \load r0, [r0, #:pc_g0:(\sym \offset)]
+ \load r0, [r0, #:pc_g1:(\sym \offset)]
+ \load r0, [r0, #:pc_g2:(\sym \offset)]
+ \load r0, [r0, #:sb_g0:(\sym \offset)]
+ \load r0, [r0, #:sb_g1:(\sym \offset)]
+ \load r0, [r0, #:sb_g2:(\sym \offset)]
+
+ \store r0, [r0, #:pc_g0:(\sym \offset)]
+ \store r0, [r0, #:pc_g1:(\sym \offset)]
+ \store r0, [r0, #:pc_g2:(\sym \offset)]
+ \store r0, [r0, #:sb_g0:(\sym \offset)]
+ \store r0, [r0, #:sb_g1:(\sym \offset)]
+ \store r0, [r0, #:sb_g2:(\sym \offset)]
+
+ .endm
+
+@ LDR/STR/LDRB/STRB only have 12 bits available for the magnitude of the addend.
+@ So these should all (just) work.
+
+ ldrtest ldr str f "+ 4095"
+ ldrtest ldrb strb f "+ 4095"
+ ldrtest ldr str f "- 4095"
+ ldrtest ldrb strb f "- 4095"
+
+@ The same as the above, but for a local symbol. These should not be
+@ resolved by the assembler but instead left to the linker.
+
+ ldrtest ldr str localsym "+ 4095"
+ ldrtest ldrb strb localsym "+ 4095"
+ ldrtest ldr str localsym "- 4095"
+ ldrtest ldrb strb localsym "- 4095"
+
+localsym:
+ mov r0, #0
+
diff --git a/gas/testsuite/gas/arm/group-reloc-ldrs-encoding-bad.d b/gas/testsuite/gas/arm/group-reloc-ldrs-encoding-bad.d
new file mode 100644
index 000000000000..ff8babf8d5a3
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldrs-encoding-bad.d
@@ -0,0 +1,3 @@
+#name: Group relocation tests, encoding failures (ldrs)
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#error-output: group-reloc-ldrs-encoding-bad.l
diff --git a/gas/testsuite/gas/arm/group-reloc-ldrs-encoding-bad.l b/gas/testsuite/gas/arm/group-reloc-ldrs-encoding-bad.l
new file mode 100644
index 000000000000..2621002d2ee4
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldrs-encoding-bad.l
@@ -0,0 +1,121 @@
+[^:]*: Assembler messages:
+[^:]*:30: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:30: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:31: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:31: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:31: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:31: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:31: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:31: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:31: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:31: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:31: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:31: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:32: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:33: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:35: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:36: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:36: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:36: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:36: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:36: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:36: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:36: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:36: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:36: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:36: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:37: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:37: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:37: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:37: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:37: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:38: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:38: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:38: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:38: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:38: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:42: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:42: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:42: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:42: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:42: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:42: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:42: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:42: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:42: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:42: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:43: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:43: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:43: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:43: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:43: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:43: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:43: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:43: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:43: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:43: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:44: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:44: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:44: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:44: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:44: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:45: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:45: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:45: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:45: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:45: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:47: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:47: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:47: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:47: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:47: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:47: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:47: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:47: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:47: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:47: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:48: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:48: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:48: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:48: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:48: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:48: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:48: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:48: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:48: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:48: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:49: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:49: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:49: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:49: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:49: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:50: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:50: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:50: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:50: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
+[^:]*:50: Error: bad offset 0x00000100 \(only 8 bits available for the magnitude\)
diff --git a/gas/testsuite/gas/arm/group-reloc-ldrs-encoding-bad.s b/gas/testsuite/gas/arm/group-reloc-ldrs-encoding-bad.s
new file mode 100644
index 000000000000..ac7a90f0e9e2
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldrs-encoding-bad.s
@@ -0,0 +1,54 @@
+@ Tests that are meant to fail during encoding of LDRS group relocations.
+
+ .text
+
+ .macro ldrtest2 load sym offset
+
+ \load r0, [r0, #:pc_g1:(\sym \offset)]
+ \load r0, [r0, #:pc_g2:(\sym \offset)]
+ \load r0, [r0, #:sb_g0:(\sym \offset)]
+ \load r0, [r0, #:sb_g1:(\sym \offset)]
+ \load r0, [r0, #:sb_g2:(\sym \offset)]
+
+ .endm
+
+ .macro ldrtest load store sym offset
+
+ ldrtest2 \load \sym \offset
+
+ \store r0, [r0, #:pc_g1:(\sym \offset)]
+ \store r0, [r0, #:pc_g2:(\sym \offset)]
+ \store r0, [r0, #:sb_g0:(\sym \offset)]
+ \store r0, [r0, #:sb_g1:(\sym \offset)]
+ \store r0, [r0, #:sb_g2:(\sym \offset)]
+
+ .endm
+
+@ LDRD/STRD/LDRH/STRH/LDRSH/LDRSB only have 8 bits available for the
+@ magnitude of the addend. So these should all (just) fail.
+
+ ldrtest ldrd strd f "+ 256"
+ ldrtest ldrh strh f "+ 256"
+ ldrtest2 ldrsh f "+ 256"
+ ldrtest2 ldrsb f "+ 256"
+
+ ldrtest ldrd strd f "- 256"
+ ldrtest ldrh strh f "- 256"
+ ldrtest2 ldrsh f "- 256"
+ ldrtest2 ldrsb f "- 256"
+
+@ The same as the above, but for a local symbol.
+
+ ldrtest ldrd strd localsym "+ 256"
+ ldrtest ldrh strh localsym "+ 256"
+ ldrtest2 ldrsh localsym "+ 256"
+ ldrtest2 ldrsb localsym "+ 256"
+
+ ldrtest ldrd strd localsym "- 256"
+ ldrtest ldrh strh localsym "- 256"
+ ldrtest2 ldrsh localsym "- 256"
+ ldrtest2 ldrsb localsym "- 256"
+
+localsym:
+ mov r0, #0
+
diff --git a/gas/testsuite/gas/arm/group-reloc-ldrs-parsing-bad.d b/gas/testsuite/gas/arm/group-reloc-ldrs-parsing-bad.d
new file mode 100644
index 000000000000..cb46d8465d1e
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldrs-parsing-bad.d
@@ -0,0 +1,3 @@
+#name: Group relocation tests, parsing failures (ldrs)
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#error-output: group-reloc-ldrs-parsing-bad.l
diff --git a/gas/testsuite/gas/arm/group-reloc-ldrs-parsing-bad.l b/gas/testsuite/gas/arm/group-reloc-ldrs-parsing-bad.l
new file mode 100644
index 000000000000..b3d60351f198
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldrs-parsing-bad.l
@@ -0,0 +1,31 @@
+[^:]*: Assembler messages:
+[^:]*:7: Error: this group relocation is not allowed on this instruction -- `ldrd r0,\[r0,#:pc_g0_nc:\(f\)\]'
+[^:]*:8: Error: this group relocation is not allowed on this instruction -- `ldrd r0,\[r0,#:pc_g1_nc:\(f\)\]'
+[^:]*:9: Error: this group relocation is not allowed on this instruction -- `ldrd r0,\[r0,#:sb_g0_nc:\(f\)\]'
+[^:]*:10: Error: this group relocation is not allowed on this instruction -- `ldrd r0,\[r0,#:sb_g1_nc:\(f\)\]'
+[^:]*:12: Error: this group relocation is not allowed on this instruction -- `strd r0,\[r0,#:pc_g0_nc:\(f\)\]'
+[^:]*:13: Error: this group relocation is not allowed on this instruction -- `strd r0,\[r0,#:pc_g1_nc:\(f\)\]'
+[^:]*:14: Error: this group relocation is not allowed on this instruction -- `strd r0,\[r0,#:sb_g0_nc:\(f\)\]'
+[^:]*:15: Error: this group relocation is not allowed on this instruction -- `strd r0,\[r0,#:sb_g1_nc:\(f\)\]'
+[^:]*:17: Error: this group relocation is not allowed on this instruction -- `ldrh r0,\[r0,#:pc_g0_nc:\(f\)\]'
+[^:]*:18: Error: this group relocation is not allowed on this instruction -- `ldrh r0,\[r0,#:pc_g1_nc:\(f\)\]'
+[^:]*:19: Error: this group relocation is not allowed on this instruction -- `ldrh r0,\[r0,#:sb_g0_nc:\(f\)\]'
+[^:]*:20: Error: this group relocation is not allowed on this instruction -- `ldrh r0,\[r0,#:sb_g1_nc:\(f\)\]'
+[^:]*:22: Error: this group relocation is not allowed on this instruction -- `strh r0,\[r0,#:pc_g0_nc:\(f\)\]'
+[^:]*:23: Error: this group relocation is not allowed on this instruction -- `strh r0,\[r0,#:pc_g1_nc:\(f\)\]'
+[^:]*:24: Error: this group relocation is not allowed on this instruction -- `strh r0,\[r0,#:sb_g0_nc:\(f\)\]'
+[^:]*:25: Error: this group relocation is not allowed on this instruction -- `strh r0,\[r0,#:sb_g1_nc:\(f\)\]'
+[^:]*:27: Error: this group relocation is not allowed on this instruction -- `ldrsh r0,\[r0,#:pc_g0_nc:\(f\)\]'
+[^:]*:28: Error: this group relocation is not allowed on this instruction -- `ldrsh r0,\[r0,#:pc_g1_nc:\(f\)\]'
+[^:]*:29: Error: this group relocation is not allowed on this instruction -- `ldrsh r0,\[r0,#:sb_g0_nc:\(f\)\]'
+[^:]*:30: Error: this group relocation is not allowed on this instruction -- `ldrsh r0,\[r0,#:sb_g1_nc:\(f\)\]'
+[^:]*:32: Error: this group relocation is not allowed on this instruction -- `ldrsb r0,\[r0,#:pc_g0_nc:\(f\)\]'
+[^:]*:33: Error: this group relocation is not allowed on this instruction -- `ldrsb r0,\[r0,#:pc_g1_nc:\(f\)\]'
+[^:]*:34: Error: this group relocation is not allowed on this instruction -- `ldrsb r0,\[r0,#:sb_g0_nc:\(f\)\]'
+[^:]*:35: Error: this group relocation is not allowed on this instruction -- `ldrsb r0,\[r0,#:sb_g1_nc:\(f\)\]'
+[^:]*:38: Error: unknown group relocation -- `ldrd r0,\[r0,#:foo:\(f\)\]'
+[^:]*:39: Error: unknown group relocation -- `strd r0,\[r0,#:foo:\(f\)\]'
+[^:]*:40: Error: unknown group relocation -- `ldrh r0,\[r0,#:foo:\(f\)\]'
+[^:]*:41: Error: unknown group relocation -- `strh r0,\[r0,#:foo:\(f\)\]'
+[^:]*:42: Error: unknown group relocation -- `ldrsh r0,\[r0,#:foo:\(f\)\]'
+[^:]*:43: Error: unknown group relocation -- `ldrsb r0,\[r0,#:foo:\(f\)\]'
diff --git a/gas/testsuite/gas/arm/group-reloc-ldrs-parsing-bad.s b/gas/testsuite/gas/arm/group-reloc-ldrs-parsing-bad.s
new file mode 100644
index 000000000000..16c1bea5ecfc
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldrs-parsing-bad.s
@@ -0,0 +1,44 @@
+@ Tests that are supposed to fail during parsing of LDRS group relocations.
+
+ .text
+
+@ No NC variants exist for the LDRS relocations.
+
+ ldrd r0, [r0, #:pc_g0_nc:(f)]
+ ldrd r0, [r0, #:pc_g1_nc:(f)]
+ ldrd r0, [r0, #:sb_g0_nc:(f)]
+ ldrd r0, [r0, #:sb_g1_nc:(f)]
+
+ strd r0, [r0, #:pc_g0_nc:(f)]
+ strd r0, [r0, #:pc_g1_nc:(f)]
+ strd r0, [r0, #:sb_g0_nc:(f)]
+ strd r0, [r0, #:sb_g1_nc:(f)]
+
+ ldrh r0, [r0, #:pc_g0_nc:(f)]
+ ldrh r0, [r0, #:pc_g1_nc:(f)]
+ ldrh r0, [r0, #:sb_g0_nc:(f)]
+ ldrh r0, [r0, #:sb_g1_nc:(f)]
+
+ strh r0, [r0, #:pc_g0_nc:(f)]
+ strh r0, [r0, #:pc_g1_nc:(f)]
+ strh r0, [r0, #:sb_g0_nc:(f)]
+ strh r0, [r0, #:sb_g1_nc:(f)]
+
+ ldrsh r0, [r0, #:pc_g0_nc:(f)]
+ ldrsh r0, [r0, #:pc_g1_nc:(f)]
+ ldrsh r0, [r0, #:sb_g0_nc:(f)]
+ ldrsh r0, [r0, #:sb_g1_nc:(f)]
+
+ ldrsb r0, [r0, #:pc_g0_nc:(f)]
+ ldrsb r0, [r0, #:pc_g1_nc:(f)]
+ ldrsb r0, [r0, #:sb_g0_nc:(f)]
+ ldrsb r0, [r0, #:sb_g1_nc:(f)]
+
+@ Instructions with a gibberish relocation code.
+ ldrd r0, [r0, #:foo:(f)]
+ strd r0, [r0, #:foo:(f)]
+ ldrh r0, [r0, #:foo:(f)]
+ strh r0, [r0, #:foo:(f)]
+ ldrsh r0, [r0, #:foo:(f)]
+ ldrsb r0, [r0, #:foo:(f)]
+
diff --git a/gas/testsuite/gas/arm/group-reloc-ldrs.d b/gas/testsuite/gas/arm/group-reloc-ldrs.d
new file mode 100644
index 000000000000..9896f4bdb6f6
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldrs.d
@@ -0,0 +1,248 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#name: Group relocation tests (ldrs)
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> e1c00fdf ldrd r0, \[r0, #255\]
+ 0: R_ARM_LDRS_PC_G1 f
+0[0-9a-f]+ <[^>]+> e1c00fdf ldrd r0, \[r0, #255\]
+ 4: R_ARM_LDRS_PC_G2 f
+0[0-9a-f]+ <[^>]+> e1c00fdf ldrd r0, \[r0, #255\]
+ 8: R_ARM_LDRS_SB_G0 f
+0[0-9a-f]+ <[^>]+> e1c00fdf ldrd r0, \[r0, #255\]
+ c: R_ARM_LDRS_SB_G1 f
+0[0-9a-f]+ <[^>]+> e1c00fdf ldrd r0, \[r0, #255\]
+ 10: R_ARM_LDRS_SB_G2 f
+0[0-9a-f]+ <[^>]+> e1c00fff strd r0, \[r0, #255\]
+ 14: R_ARM_LDRS_PC_G1 f
+0[0-9a-f]+ <[^>]+> e1c00fff strd r0, \[r0, #255\]
+ 18: R_ARM_LDRS_PC_G2 f
+0[0-9a-f]+ <[^>]+> e1c00fff strd r0, \[r0, #255\]
+ 1c: R_ARM_LDRS_SB_G0 f
+0[0-9a-f]+ <[^>]+> e1c00fff strd r0, \[r0, #255\]
+ 20: R_ARM_LDRS_SB_G1 f
+0[0-9a-f]+ <[^>]+> e1c00fff strd r0, \[r0, #255\]
+ 24: R_ARM_LDRS_SB_G2 f
+0[0-9a-f]+ <[^>]+> e1d00fbf ldrh r0, \[r0, #255\]
+ 28: R_ARM_LDRS_PC_G1 f
+0[0-9a-f]+ <[^>]+> e1d00fbf ldrh r0, \[r0, #255\]
+ 2c: R_ARM_LDRS_PC_G2 f
+0[0-9a-f]+ <[^>]+> e1d00fbf ldrh r0, \[r0, #255\]
+ 30: R_ARM_LDRS_SB_G0 f
+0[0-9a-f]+ <[^>]+> e1d00fbf ldrh r0, \[r0, #255\]
+ 34: R_ARM_LDRS_SB_G1 f
+0[0-9a-f]+ <[^>]+> e1d00fbf ldrh r0, \[r0, #255\]
+ 38: R_ARM_LDRS_SB_G2 f
+0[0-9a-f]+ <[^>]+> e1c00fbf strh r0, \[r0, #255\]
+ 3c: R_ARM_LDRS_PC_G1 f
+0[0-9a-f]+ <[^>]+> e1c00fbf strh r0, \[r0, #255\]
+ 40: R_ARM_LDRS_PC_G2 f
+0[0-9a-f]+ <[^>]+> e1c00fbf strh r0, \[r0, #255\]
+ 44: R_ARM_LDRS_SB_G0 f
+0[0-9a-f]+ <[^>]+> e1c00fbf strh r0, \[r0, #255\]
+ 48: R_ARM_LDRS_SB_G1 f
+0[0-9a-f]+ <[^>]+> e1c00fbf strh r0, \[r0, #255\]
+ 4c: R_ARM_LDRS_SB_G2 f
+0[0-9a-f]+ <[^>]+> e1d00fff ldrsh r0, \[r0, #255\]
+ 50: R_ARM_LDRS_PC_G1 f
+0[0-9a-f]+ <[^>]+> e1d00fff ldrsh r0, \[r0, #255\]
+ 54: R_ARM_LDRS_PC_G2 f
+0[0-9a-f]+ <[^>]+> e1d00fff ldrsh r0, \[r0, #255\]
+ 58: R_ARM_LDRS_SB_G0 f
+0[0-9a-f]+ <[^>]+> e1d00fff ldrsh r0, \[r0, #255\]
+ 5c: R_ARM_LDRS_SB_G1 f
+0[0-9a-f]+ <[^>]+> e1d00fff ldrsh r0, \[r0, #255\]
+ 60: R_ARM_LDRS_SB_G2 f
+0[0-9a-f]+ <[^>]+> e1d00fdf ldrsb r0, \[r0, #255\]
+ 64: R_ARM_LDRS_PC_G1 f
+0[0-9a-f]+ <[^>]+> e1d00fdf ldrsb r0, \[r0, #255\]
+ 68: R_ARM_LDRS_PC_G2 f
+0[0-9a-f]+ <[^>]+> e1d00fdf ldrsb r0, \[r0, #255\]
+ 6c: R_ARM_LDRS_SB_G0 f
+0[0-9a-f]+ <[^>]+> e1d00fdf ldrsb r0, \[r0, #255\]
+ 70: R_ARM_LDRS_SB_G1 f
+0[0-9a-f]+ <[^>]+> e1d00fdf ldrsb r0, \[r0, #255\]
+ 74: R_ARM_LDRS_SB_G2 f
+0[0-9a-f]+ <[^>]+> e1400fdf ldrd r0, \[r0, #-255\]
+ 78: R_ARM_LDRS_PC_G1 f
+0[0-9a-f]+ <[^>]+> e1400fdf ldrd r0, \[r0, #-255\]
+ 7c: R_ARM_LDRS_PC_G2 f
+0[0-9a-f]+ <[^>]+> e1400fdf ldrd r0, \[r0, #-255\]
+ 80: R_ARM_LDRS_SB_G0 f
+0[0-9a-f]+ <[^>]+> e1400fdf ldrd r0, \[r0, #-255\]
+ 84: R_ARM_LDRS_SB_G1 f
+0[0-9a-f]+ <[^>]+> e1400fdf ldrd r0, \[r0, #-255\]
+ 88: R_ARM_LDRS_SB_G2 f
+0[0-9a-f]+ <[^>]+> e1400fff strd r0, \[r0, #-255\]
+ 8c: R_ARM_LDRS_PC_G1 f
+0[0-9a-f]+ <[^>]+> e1400fff strd r0, \[r0, #-255\]
+ 90: R_ARM_LDRS_PC_G2 f
+0[0-9a-f]+ <[^>]+> e1400fff strd r0, \[r0, #-255\]
+ 94: R_ARM_LDRS_SB_G0 f
+0[0-9a-f]+ <[^>]+> e1400fff strd r0, \[r0, #-255\]
+ 98: R_ARM_LDRS_SB_G1 f
+0[0-9a-f]+ <[^>]+> e1400fff strd r0, \[r0, #-255\]
+ 9c: R_ARM_LDRS_SB_G2 f
+0[0-9a-f]+ <[^>]+> e1500fbf ldrh r0, \[r0, #-255\]
+ a0: R_ARM_LDRS_PC_G1 f
+0[0-9a-f]+ <[^>]+> e1500fbf ldrh r0, \[r0, #-255\]
+ a4: R_ARM_LDRS_PC_G2 f
+0[0-9a-f]+ <[^>]+> e1500fbf ldrh r0, \[r0, #-255\]
+ a8: R_ARM_LDRS_SB_G0 f
+0[0-9a-f]+ <[^>]+> e1500fbf ldrh r0, \[r0, #-255\]
+ ac: R_ARM_LDRS_SB_G1 f
+0[0-9a-f]+ <[^>]+> e1500fbf ldrh r0, \[r0, #-255\]
+ b0: R_ARM_LDRS_SB_G2 f
+0[0-9a-f]+ <[^>]+> e1400fbf strh r0, \[r0, #-255\]
+ b4: R_ARM_LDRS_PC_G1 f
+0[0-9a-f]+ <[^>]+> e1400fbf strh r0, \[r0, #-255\]
+ b8: R_ARM_LDRS_PC_G2 f
+0[0-9a-f]+ <[^>]+> e1400fbf strh r0, \[r0, #-255\]
+ bc: R_ARM_LDRS_SB_G0 f
+0[0-9a-f]+ <[^>]+> e1400fbf strh r0, \[r0, #-255\]
+ c0: R_ARM_LDRS_SB_G1 f
+0[0-9a-f]+ <[^>]+> e1400fbf strh r0, \[r0, #-255\]
+ c4: R_ARM_LDRS_SB_G2 f
+0[0-9a-f]+ <[^>]+> e1500fff ldrsh r0, \[r0, #-255\]
+ c8: R_ARM_LDRS_PC_G1 f
+0[0-9a-f]+ <[^>]+> e1500fff ldrsh r0, \[r0, #-255\]
+ cc: R_ARM_LDRS_PC_G2 f
+0[0-9a-f]+ <[^>]+> e1500fff ldrsh r0, \[r0, #-255\]
+ d0: R_ARM_LDRS_SB_G0 f
+0[0-9a-f]+ <[^>]+> e1500fff ldrsh r0, \[r0, #-255\]
+ d4: R_ARM_LDRS_SB_G1 f
+0[0-9a-f]+ <[^>]+> e1500fff ldrsh r0, \[r0, #-255\]
+ d8: R_ARM_LDRS_SB_G2 f
+0[0-9a-f]+ <[^>]+> e1500fdf ldrsb r0, \[r0, #-255\]
+ dc: R_ARM_LDRS_PC_G1 f
+0[0-9a-f]+ <[^>]+> e1500fdf ldrsb r0, \[r0, #-255\]
+ e0: R_ARM_LDRS_PC_G2 f
+0[0-9a-f]+ <[^>]+> e1500fdf ldrsb r0, \[r0, #-255\]
+ e4: R_ARM_LDRS_SB_G0 f
+0[0-9a-f]+ <[^>]+> e1500fdf ldrsb r0, \[r0, #-255\]
+ e8: R_ARM_LDRS_SB_G1 f
+0[0-9a-f]+ <[^>]+> e1500fdf ldrsb r0, \[r0, #-255\]
+ ec: R_ARM_LDRS_SB_G2 f
+0[0-9a-f]+ <[^>]+> e1c00fdf ldrd r0, \[r0, #255\]
+ f0: R_ARM_LDRS_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e1c00fdf ldrd r0, \[r0, #255\]
+ f4: R_ARM_LDRS_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e1c00fdf ldrd r0, \[r0, #255\]
+ f8: R_ARM_LDRS_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e1c00fdf ldrd r0, \[r0, #255\]
+ fc: R_ARM_LDRS_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e1c00fdf ldrd r0, \[r0, #255\]
+ 100: R_ARM_LDRS_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e1c00fff strd r0, \[r0, #255\]
+ 104: R_ARM_LDRS_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e1c00fff strd r0, \[r0, #255\]
+ 108: R_ARM_LDRS_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e1c00fff strd r0, \[r0, #255\]
+ 10c: R_ARM_LDRS_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e1c00fff strd r0, \[r0, #255\]
+ 110: R_ARM_LDRS_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e1c00fff strd r0, \[r0, #255\]
+ 114: R_ARM_LDRS_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e1d00fbf ldrh r0, \[r0, #255\]
+ 118: R_ARM_LDRS_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e1d00fbf ldrh r0, \[r0, #255\]
+ 11c: R_ARM_LDRS_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e1d00fbf ldrh r0, \[r0, #255\]
+ 120: R_ARM_LDRS_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e1d00fbf ldrh r0, \[r0, #255\]
+ 124: R_ARM_LDRS_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e1d00fbf ldrh r0, \[r0, #255\]
+ 128: R_ARM_LDRS_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e1c00fbf strh r0, \[r0, #255\]
+ 12c: R_ARM_LDRS_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e1c00fbf strh r0, \[r0, #255\]
+ 130: R_ARM_LDRS_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e1c00fbf strh r0, \[r0, #255\]
+ 134: R_ARM_LDRS_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e1c00fbf strh r0, \[r0, #255\]
+ 138: R_ARM_LDRS_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e1c00fbf strh r0, \[r0, #255\]
+ 13c: R_ARM_LDRS_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e1d00fff ldrsh r0, \[r0, #255\]
+ 140: R_ARM_LDRS_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e1d00fff ldrsh r0, \[r0, #255\]
+ 144: R_ARM_LDRS_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e1d00fff ldrsh r0, \[r0, #255\]
+ 148: R_ARM_LDRS_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e1d00fff ldrsh r0, \[r0, #255\]
+ 14c: R_ARM_LDRS_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e1d00fff ldrsh r0, \[r0, #255\]
+ 150: R_ARM_LDRS_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e1d00fdf ldrsb r0, \[r0, #255\]
+ 154: R_ARM_LDRS_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e1d00fdf ldrsb r0, \[r0, #255\]
+ 158: R_ARM_LDRS_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e1d00fdf ldrsb r0, \[r0, #255\]
+ 15c: R_ARM_LDRS_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e1d00fdf ldrsb r0, \[r0, #255\]
+ 160: R_ARM_LDRS_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e1d00fdf ldrsb r0, \[r0, #255\]
+ 164: R_ARM_LDRS_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e1400fdf ldrd r0, \[r0, #-255\]
+ 168: R_ARM_LDRS_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e1400fdf ldrd r0, \[r0, #-255\]
+ 16c: R_ARM_LDRS_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e1400fdf ldrd r0, \[r0, #-255\]
+ 170: R_ARM_LDRS_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e1400fdf ldrd r0, \[r0, #-255\]
+ 174: R_ARM_LDRS_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e1400fdf ldrd r0, \[r0, #-255\]
+ 178: R_ARM_LDRS_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e1400fff strd r0, \[r0, #-255\]
+ 17c: R_ARM_LDRS_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e1400fff strd r0, \[r0, #-255\]
+ 180: R_ARM_LDRS_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e1400fff strd r0, \[r0, #-255\]
+ 184: R_ARM_LDRS_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e1400fff strd r0, \[r0, #-255\]
+ 188: R_ARM_LDRS_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e1400fff strd r0, \[r0, #-255\]
+ 18c: R_ARM_LDRS_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e1500fbf ldrh r0, \[r0, #-255\]
+ 190: R_ARM_LDRS_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e1500fbf ldrh r0, \[r0, #-255\]
+ 194: R_ARM_LDRS_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e1500fbf ldrh r0, \[r0, #-255\]
+ 198: R_ARM_LDRS_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e1500fbf ldrh r0, \[r0, #-255\]
+ 19c: R_ARM_LDRS_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e1500fbf ldrh r0, \[r0, #-255\]
+ 1a0: R_ARM_LDRS_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e1400fbf strh r0, \[r0, #-255\]
+ 1a4: R_ARM_LDRS_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e1400fbf strh r0, \[r0, #-255\]
+ 1a8: R_ARM_LDRS_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e1400fbf strh r0, \[r0, #-255\]
+ 1ac: R_ARM_LDRS_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e1400fbf strh r0, \[r0, #-255\]
+ 1b0: R_ARM_LDRS_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e1400fbf strh r0, \[r0, #-255\]
+ 1b4: R_ARM_LDRS_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e1500fff ldrsh r0, \[r0, #-255\]
+ 1b8: R_ARM_LDRS_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e1500fff ldrsh r0, \[r0, #-255\]
+ 1bc: R_ARM_LDRS_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e1500fff ldrsh r0, \[r0, #-255\]
+ 1c0: R_ARM_LDRS_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e1500fff ldrsh r0, \[r0, #-255\]
+ 1c4: R_ARM_LDRS_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e1500fff ldrsh r0, \[r0, #-255\]
+ 1c8: R_ARM_LDRS_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e1500fdf ldrsb r0, \[r0, #-255\]
+ 1cc: R_ARM_LDRS_PC_G1 localsym
+0[0-9a-f]+ <[^>]+> e1500fdf ldrsb r0, \[r0, #-255\]
+ 1d0: R_ARM_LDRS_PC_G2 localsym
+0[0-9a-f]+ <[^>]+> e1500fdf ldrsb r0, \[r0, #-255\]
+ 1d4: R_ARM_LDRS_SB_G0 localsym
+0[0-9a-f]+ <[^>]+> e1500fdf ldrsb r0, \[r0, #-255\]
+ 1d8: R_ARM_LDRS_SB_G1 localsym
+0[0-9a-f]+ <[^>]+> e1500fdf ldrsb r0, \[r0, #-255\]
+ 1dc: R_ARM_LDRS_SB_G2 localsym
+0[0-9a-f]+ <[^>]+> e3a00000 mov r0, #0 ; 0x0
diff --git a/gas/testsuite/gas/arm/group-reloc-ldrs.s b/gas/testsuite/gas/arm/group-reloc-ldrs.s
new file mode 100644
index 000000000000..fa74e7eabe0a
--- /dev/null
+++ b/gas/testsuite/gas/arm/group-reloc-ldrs.s
@@ -0,0 +1,54 @@
+@ Tests for LDRS group relocations.
+
+ .text
+
+ .macro ldrtest2 load sym offset
+
+ \load r0, [r0, #:pc_g1:(\sym \offset)]
+ \load r0, [r0, #:pc_g2:(\sym \offset)]
+ \load r0, [r0, #:sb_g0:(\sym \offset)]
+ \load r0, [r0, #:sb_g1:(\sym \offset)]
+ \load r0, [r0, #:sb_g2:(\sym \offset)]
+
+ .endm
+
+ .macro ldrtest load store sym offset
+
+ ldrtest2 \load \sym \offset
+
+ \store r0, [r0, #:pc_g1:(\sym \offset)]
+ \store r0, [r0, #:pc_g2:(\sym \offset)]
+ \store r0, [r0, #:sb_g0:(\sym \offset)]
+ \store r0, [r0, #:sb_g1:(\sym \offset)]
+ \store r0, [r0, #:sb_g2:(\sym \offset)]
+
+ .endm
+
+@ LDRD/STRD/LDRH/STRH/LDRSH/LDRSB only have 8 bits available for the
+@ magnitude of the addend. So these should all (just) work.
+
+ ldrtest ldrd strd f "+ 255"
+ ldrtest ldrh strh f "+ 255"
+ ldrtest2 ldrsh f "+ 255"
+ ldrtest2 ldrsb f "+ 255"
+
+ ldrtest ldrd strd f "- 255"
+ ldrtest ldrh strh f "- 255"
+ ldrtest2 ldrsh f "- 255"
+ ldrtest2 ldrsb f "- 255"
+
+@ The same as the above, but for a local symbol.
+
+ ldrtest ldrd strd localsym "+ 255"
+ ldrtest ldrh strh localsym "+ 255"
+ ldrtest2 ldrsh localsym "+ 255"
+ ldrtest2 ldrsb localsym "+ 255"
+
+ ldrtest ldrd strd localsym "- 255"
+ ldrtest ldrh strh localsym "- 255"
+ ldrtest2 ldrsh localsym "- 255"
+ ldrtest2 ldrsb localsym "- 255"
+
+localsym:
+ mov r0, #0
+
diff --git a/gas/testsuite/gas/arm/inst.d b/gas/testsuite/gas/arm/inst.d
index fbf27b4ab8db..4d56e8eca3d2 100644
--- a/gas/testsuite/gas/arm/inst.d
+++ b/gas/testsuite/gas/arm/inst.d
@@ -11,11 +11,11 @@
Disassembly of section .text:
0+000 <[^>]*> e3a00000 ? mov r0, #0 ; 0x0
0+004 <[^>]*> e1a01002 ? mov r1, r2
-0+008 <[^>]*> e1a03184 ? mov r3, r4, lsl #3
-0+00c <[^>]*> e1a05736 ? mov r5, r6, lsr r7
-0+010 <[^>]*> e1a08a59 ? mov r8, r9, asr sl
-0+014 <[^>]*> e1a0bd1c ? mov fp, ip, lsl sp
-0+018 <[^>]*> e1a0e06f ? mov lr, pc, rrx
+0+008 <[^>]*> e1a03184 ? lsl r3, r4, #3
+0+00c <[^>]*> e1a05736 ? lsr r5, r6, r7
+0+010 <[^>]*> e1a08a59 ? asr r8, r9, sl
+0+014 <[^>]*> e1a0bd1c ? lsl fp, ip, sp
+0+018 <[^>]*> e1a0e06f ? rrx lr, pc
0+01c <[^>]*> e1a01002 ? mov r1, r2
0+020 <[^>]*> 01a02003 ? moveq r2, r3
0+024 <[^>]*> 11a04005 ? movne r4, r5
@@ -28,13 +28,13 @@ Disassembly of section .text:
0+040 <[^>]*> 41a03006 ? movmi r3, r6
0+044 <[^>]*> 51a07009 ? movpl r7, r9
0+048 <[^>]*> 61a01008 ? movvs r1, r8
-0+04c <[^>]*> 71a09fa1 ? movvc r9, r1, lsr #31
+0+04c <[^>]*> 71a09fa1 ? lsrvc r9, r1, #31
0+050 <[^>]*> 81a0800f ? movhi r8, pc
0+054 <[^>]*> 91a0f00e ? movls pc, lr
0+058 <[^>]*> 21a09008 ? movcs r9, r8
0+05c <[^>]*> 31a01003 ? movcc r1, r3
0+060 <[^>]*> e1b00008 ? movs r0, r8
-0+064 <[^>]*> 31b00007 ? movccs r0, r7
+0+064 <[^>]*> 31b00007 ? movscc r0, r7
0+068 <[^>]*> e281000a ? add r0, r1, #10 ; 0xa
0+06c <[^>]*> e0832004 ? add r2, r3, r4
0+070 <[^>]*> e0865287 ? add r5, r6, r7, lsl #5
@@ -114,11 +114,11 @@ Disassembly of section .text:
0+198 <[^>]*> e0000291 ? mul r0, r1, r2
0+19c <[^>]*> e0110392 ? muls r1, r2, r3
0+1a0 <[^>]*> 10000091 ? mulne r0, r1, r0
-0+1a4 <[^>]*> 90190798 ? mullss r9, r8, r7
+0+1a4 <[^>]*> 90190798 ? mulsls r9, r8, r7
0+1a8 <[^>]*> e021ba99 ? mla r1, r9, sl, fp
0+1ac <[^>]*> e033c994 ? mlas r3, r4, r9, ip
0+1b0 <[^>]*> b029d798 ? mlalt r9, r8, r7, sp
-0+1b4 <[^>]*> a034e391 ? mlages r4, r1, r3, lr
+0+1b4 <[^>]*> a034e391 ? mlasge r4, r1, r3, lr
0+1b8 <[^>]*> e5910000 ? ldr r0, \[r1\]
0+1bc <[^>]*> e7911002 ? ldr r1, \[r1, r2\]
0+1c0 <[^>]*> e7b32004 ? ldr r2, \[r3, r4\]!
@@ -130,7 +130,7 @@ Disassembly of section .text:
0+1d8 <[^>]*> e6942425 ? ldr r2, \[r4\], r5, lsr #8
0+1dc <[^>]*> e51f0008 ? ldr r0, \[pc, #-8\] ; 0+1dc <[^>]*>
0+1e0 <[^>]*> e5d43000 ? ldrb r3, \[r4\]
-0+1e4 <[^>]*> 14f85000 ? ldrnebt r5, \[r8\]
+0+1e4 <[^>]*> 14f85000 ? ldrbtne r5, \[r8\]
0+1e8 <[^>]*> e5810000 ? str r0, \[r1\]
0+1ec <[^>]*> e7811002 ? str r1, \[r1, r2\]
0+1f0 <[^>]*> e7a43003 ? str r3, \[r4, r3\]!
@@ -143,21 +143,21 @@ Disassembly of section .text:
0+20c <[^>]*> e50f1004 ? str r1, \[pc, #-4\] ; 0+210 <[^>]*>
0+210 <[^>]*> e5c71000 ? strb r1, \[r7\]
0+214 <[^>]*> e4e02000 ? strbt r2, \[r0\]
-0+218 <[^>]*> e8900002 ? ldmia r0, {r1}
-0+21c <[^>]*> 09920038 ? ldmeqib r2, {r3, r4, r5}
+0+218 <[^>]*> e8900002 ? ldm r0, {r1}
+0+21c <[^>]*> 09920038 ? ldmibeq r2, {r3, r4, r5}
0+220 <[^>]*> e853ffff ? ldmda r3, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr, pc}\^
0+224 <[^>]*> e93b05ff ? ldmdb fp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sl}
0+228 <[^>]*> e99100f7 ? ldmib r1, {r0, r1, r2, r4, r5, r6, r7}
-0+22c <[^>]*> e89201f8 ? ldmia r2, {r3, r4, r5, r6, r7, r8}
+0+22c <[^>]*> e89201f8 ? ldm r2, {r3, r4, r5, r6, r7, r8}
0+230 <[^>]*> e9130003 ? ldmdb r3, {r0, r1}
0+234 <[^>]*> e8540300 ? ldmda r4, {r8, r9}\^
-0+238 <[^>]*> e8800002 ? stmia r0, {r1}
-0+23c <[^>]*> 09820038 ? stmeqib r2, {r3, r4, r5}
+0+238 <[^>]*> e8800002 ? stm r0, {r1}
+0+23c <[^>]*> 09820038 ? stmibeq r2, {r3, r4, r5}
0+240 <[^>]*> e843ffff ? stmda r3, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr, pc}\^
0+244 <[^>]*> e92b05ff ? stmdb fp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sl}
0+248 <[^>]*> e8010007 ? stmda r1, {r0, r1, r2}
0+24c <[^>]*> e9020018 ? stmdb r2, {r3, r4}
-0+250 <[^>]*> e8830003 ? stmia r3, {r0, r1}
+0+250 <[^>]*> e8830003 ? stm r3, {r0, r1}
0+254 <[^>]*> e9c40300 ? stmib r4, {r8, r9}\^
0+258 <[^>]*> ef123456 ? (swi|svc) 0x00123456
0+25c <[^>]*> 2f000033 ? (swi|svc)cs 0x00000033
@@ -169,35 +169,35 @@ Disassembly of section .text:
[ ]*268:.*_wibble.*
0+26c <[^>]*> da...... ? ble 0[0123456789abcdef]+ <[^>]*>
[ ]*26c:.*testerfunc.*
-0+270 <[^>]*> e1a01102 ? mov r1, r2, lsl #2
+0+270 <[^>]*> e1a01102 ? lsl r1, r2, #2
0+274 <[^>]*> e1a01002 ? mov r1, r2
-0+278 <[^>]*> e1a01f82 ? mov r1, r2, lsl #31
-0+27c <[^>]*> e1a01312 ? mov r1, r2, lsl r3
-0+280 <[^>]*> e1a01122 ? mov r1, r2, lsr #2
-0+284 <[^>]*> e1a01fa2 ? mov r1, r2, lsr #31
-0+288 <[^>]*> e1a01022 ? mov r1, r2, lsr #32
-0+28c <[^>]*> e1a01332 ? mov r1, r2, lsr r3
-0+290 <[^>]*> e1a01142 ? mov r1, r2, asr #2
-0+294 <[^>]*> e1a01fc2 ? mov r1, r2, asr #31
-0+298 <[^>]*> e1a01042 ? mov r1, r2, asr #32
-0+29c <[^>]*> e1a01352 ? mov r1, r2, asr r3
-0+2a0 <[^>]*> e1a01162 ? mov r1, r2, ror #2
-0+2a4 <[^>]*> e1a01fe2 ? mov r1, r2, ror #31
-0+2a8 <[^>]*> e1a01372 ? mov r1, r2, ror r3
-0+2ac <[^>]*> e1a01062 ? mov r1, r2, rrx
-0+2b0 <[^>]*> e1a01102 ? mov r1, r2, lsl #2
+0+278 <[^>]*> e1a01f82 ? lsl r1, r2, #31
+0+27c <[^>]*> e1a01312 ? lsl r1, r2, r3
+0+280 <[^>]*> e1a01122 ? lsr r1, r2, #2
+0+284 <[^>]*> e1a01fa2 ? lsr r1, r2, #31
+0+288 <[^>]*> e1a01022 ? lsr r1, r2, #32
+0+28c <[^>]*> e1a01332 ? lsr r1, r2, r3
+0+290 <[^>]*> e1a01142 ? asr r1, r2, #2
+0+294 <[^>]*> e1a01fc2 ? asr r1, r2, #31
+0+298 <[^>]*> e1a01042 ? asr r1, r2, #32
+0+29c <[^>]*> e1a01352 ? asr r1, r2, r3
+0+2a0 <[^>]*> e1a01162 ? ror r1, r2, #2
+0+2a4 <[^>]*> e1a01fe2 ? ror r1, r2, #31
+0+2a8 <[^>]*> e1a01372 ? ror r1, r2, r3
+0+2ac <[^>]*> e1a01062 ? rrx r1, r2
+0+2b0 <[^>]*> e1a01102 ? lsl r1, r2, #2
0+2b4 <[^>]*> e1a01002 ? mov r1, r2
-0+2b8 <[^>]*> e1a01f82 ? mov r1, r2, lsl #31
-0+2bc <[^>]*> e1a01312 ? mov r1, r2, lsl r3
-0+2c0 <[^>]*> e1a01122 ? mov r1, r2, lsr #2
-0+2c4 <[^>]*> e1a01fa2 ? mov r1, r2, lsr #31
-0+2c8 <[^>]*> e1a01022 ? mov r1, r2, lsr #32
-0+2cc <[^>]*> e1a01332 ? mov r1, r2, lsr r3
-0+2d0 <[^>]*> e1a01142 ? mov r1, r2, asr #2
-0+2d4 <[^>]*> e1a01fc2 ? mov r1, r2, asr #31
-0+2d8 <[^>]*> e1a01042 ? mov r1, r2, asr #32
-0+2dc <[^>]*> e1a01352 ? mov r1, r2, asr r3
-0+2e0 <[^>]*> e1a01162 ? mov r1, r2, ror #2
-0+2e4 <[^>]*> e1a01fe2 ? mov r1, r2, ror #31
-0+2e8 <[^>]*> e1a01372 ? mov r1, r2, ror r3
-0+2ec <[^>]*> e1a01062 ? mov r1, r2, rrx
+0+2b8 <[^>]*> e1a01f82 ? lsl r1, r2, #31
+0+2bc <[^>]*> e1a01312 ? lsl r1, r2, r3
+0+2c0 <[^>]*> e1a01122 ? lsr r1, r2, #2
+0+2c4 <[^>]*> e1a01fa2 ? lsr r1, r2, #31
+0+2c8 <[^>]*> e1a01022 ? lsr r1, r2, #32
+0+2cc <[^>]*> e1a01332 ? lsr r1, r2, r3
+0+2d0 <[^>]*> e1a01142 ? asr r1, r2, #2
+0+2d4 <[^>]*> e1a01fc2 ? asr r1, r2, #31
+0+2d8 <[^>]*> e1a01042 ? asr r1, r2, #32
+0+2dc <[^>]*> e1a01352 ? asr r1, r2, r3
+0+2e0 <[^>]*> e1a01162 ? ror r1, r2, #2
+0+2e4 <[^>]*> e1a01fe2 ? ror r1, r2, #31
+0+2e8 <[^>]*> e1a01372 ? ror r1, r2, r3
+0+2ec <[^>]*> e1a01062 ? rrx r1, r2
diff --git a/gas/testsuite/gas/arm/itblock.s b/gas/testsuite/gas/arm/itblock.s
new file mode 100644
index 000000000000..0fb3c198d744
--- /dev/null
+++ b/gas/testsuite/gas/arm/itblock.s
@@ -0,0 +1,21 @@
+# All-true IT block macro.
+
+ .macro itblock num cond=""
+ .if x\cond != x
+ .if \num == 4
+ itttt \cond
+ .else
+ .if \num == 3
+ ittt \cond
+ .else
+ .if \num == 2
+ itt \cond
+ .else
+ .if \num == 1
+ .it \cond
+ .endif
+ .endif
+ .endif
+ .endif
+ .endif
+ .endm
diff --git a/gas/testsuite/gas/arm/iwmmxt-bad.l b/gas/testsuite/gas/arm/iwmmxt-bad.l
index 65889380cf1b..d030a6da46ae 100644
--- a/gas/testsuite/gas/arm/iwmmxt-bad.l
+++ b/gas/testsuite/gas/arm/iwmmxt-bad.l
@@ -8,3 +8,5 @@
[^:]*:7: Error: iWMMXt data register expected -- `wstrh wcgr0,\[r1\]'
[^:]*:8: Error: iWMMXt data register expected -- `wstrd wcgr0,\[r1\]'
[^:]*:9: Error: iWMMXt control register expected -- `tmcr wibble,r1'
+[^:]*:10: Error: iWMMXt data or control register expected -- `wldrw wibble,\[r1\]'
+[^:]*:11: Error: iWMMXt data or control register expected -- `wstrw wibble,\[r1\]'
diff --git a/gas/testsuite/gas/arm/iwmmxt-bad.s b/gas/testsuite/gas/arm/iwmmxt-bad.s
index 47d8d71f8656..98fc239374b7 100644
--- a/gas/testsuite/gas/arm/iwmmxt-bad.s
+++ b/gas/testsuite/gas/arm/iwmmxt-bad.s
@@ -7,3 +7,5 @@
wstrh wcgr0,[r1]
wstrd wcgr0,[r1]
tmcr wibble,r1
+ wldrw wibble,[r1]
+ wstrw wibble,[r1]
diff --git a/gas/testsuite/gas/arm/iwmmxt-wldsttbh.d b/gas/testsuite/gas/arm/iwmmxt-wldsttbh.d
new file mode 100644
index 000000000000..c17a1d858a10
--- /dev/null
+++ b/gas/testsuite/gas/arm/iwmmxt-wldsttbh.d
@@ -0,0 +1,11 @@
+#objdump: -dr --prefix-addresses --show-raw-insn -miwmmxt
+#name: Intel(r) Wireless MMX(tm) technology instructions version 1
+#as: -mcpu=xscale+iwmmxt -EL
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0+000 <iwmmxt> ecb11000[ ]+wldrb[ ]+wr1, \[r1\]
+0+004 <[^>]*> ecf11000[ ]+wldrh[ ]+wr1, \[r1\]
+0+008 <[^>]*> eca11000[ ]+wstrb[ ]+wr1, \[r1\]
+0+00c <[^>]*> ece11000[ ]+wstrh[ ]+wr1, \[r1\]
diff --git a/gas/testsuite/gas/arm/iwmmxt-wldsttbh.s b/gas/testsuite/gas/arm/iwmmxt-wldsttbh.s
new file mode 100644
index 000000000000..fd58c105de50
--- /dev/null
+++ b/gas/testsuite/gas/arm/iwmmxt-wldsttbh.s
@@ -0,0 +1,8 @@
+ .text
+ .global iwmmxt
+iwmmxt:
+
+ wldrb wr1, [r1], #0
+ wldrh wr1, [r1], #0
+ wstrb wr1, [r1], #0
+ wstrh wr1, [r1], #0
diff --git a/gas/testsuite/gas/arm/iwmmxt.d b/gas/testsuite/gas/arm/iwmmxt.d
index 494199d2bc45..85f4ac2e84e4 100644
--- a/gas/testsuite/gas/arm/iwmmxt.d
+++ b/gas/testsuite/gas/arm/iwmmxt.d
@@ -166,6 +166,6 @@ Disassembly of section .text:
0+278 <[^>]*> 0e9540ea[ ]+wunpckilweq[ ]+wr4, wr5, wr10
0+27c <[^>]*> 1e143005[ ]+wxorne[ ]+wr3, wr4, wr5
0+280 <[^>]*> ae377007[ ]+wandnge[ ]+wr7, wr7, wr7
-0+284 <[^>]*> e1a00000[ ]+nop[ ]+\(mov r0,r0\)
-0+288 <[^>]*> e1a00000[ ]+nop[ ]+\(mov r0,r0\)
+0+284 <[^>]*> ee080110[ ]+tmcr[ ]+wcgr0, r0
+0+288 <[^>]*> ee1a1110[ ]+tmrc[ ]+r1, wcgr2
0+28c <[^>]*> e1a00000[ ]+nop[ ]+\(mov r0,r0\)
diff --git a/gas/testsuite/gas/arm/iwmmxt.s b/gas/testsuite/gas/arm/iwmmxt.s
index 0ebbad5cd3c7..42bbb7ab4ceb 100644
--- a/gas/testsuite/gas/arm/iwmmxt.s
+++ b/gas/testsuite/gas/arm/iwmmxt.s
@@ -203,7 +203,8 @@ iwmmxt:
wzeroge wr7
+ tmcr wcgr0, r0
+ tmrc r1, wcgr2
+
@ a.out-required section size padding
nop
- nop
- nop
diff --git a/gas/testsuite/gas/arm/iwmmxt2.d b/gas/testsuite/gas/arm/iwmmxt2.d
new file mode 100644
index 000000000000..7c1bbeb921e3
--- /dev/null
+++ b/gas/testsuite/gas/arm/iwmmxt2.d
@@ -0,0 +1,119 @@
+#objdump: -dr --prefix-addresses --show-raw-insn -miwmmxt
+#name: Intel(r) Wireless MMX(tm) technology instructions version 2
+#as: -mcpu=xscale+iwmmxt+iwmmxt2 -EL
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0+000 <iwmmxt2> ee654186[ ]+waddhc[ ]+wr4, wr5, wr6
+0+004 <[^>]*> eea87189[ ]+waddwc[ ]+wr7, wr8, wr9
+0+008 <[^>]*> ce954106[ ]+wmadduxgt[ ]+wr4, wr5, wr6
+0+00c <[^>]*> 0ec87109[ ]+wmadduneq[ ]+wr7, wr8, wr9
+0+010 <[^>]*> 1eb54106[ ]+wmaddsxne[ ]+wr4, wr5, wr6
+0+014 <[^>]*> aee87109[ ]+wmaddsnge[ ]+wr7, wr8, wr9
+0+018 <[^>]*> eed21103[ ]+wmulumr[ ]+wr1, wr2, wr3
+0+01c <[^>]*> eef21103[ ]+wmulsmr[ ]+wr1, wr2, wr3
+0+020 <[^>]*> ce13f190[ ]+torvscbgt[ ]+pc
+0+024 <[^>]*> 1e53f190[ ]+torvschne[ ]+pc
+0+028 <[^>]*> 0e93f190[ ]+torvscweq[ ]+pc
+0+02c <[^>]*> ee2211c0[ ]+wabsb[ ]+wr1, wr2
+0+030 <[^>]*> ee6431c0[ ]+wabsh[ ]+wr3, wr4
+0+034 <[^>]*> eea651c0[ ]+wabsw[ ]+wr5, wr6
+0+038 <[^>]*> ce2211c0[ ]+wabsbgt[ ]+wr1, wr2
+0+03c <[^>]*> ee1211c3[ ]+wabsdiffb[ ]+wr1, wr2, wr3
+0+040 <[^>]*> ee5541c6[ ]+wabsdiffh[ ]+wr4, wr5, wr6
+0+044 <[^>]*> ee9871c9[ ]+wabsdiffw[ ]+wr7, wr8, wr9
+0+048 <[^>]*> ce1211c3[ ]+wabsdiffbgt[ ]+wr1, wr2, wr3
+0+04c <[^>]*> ee6211a3[ ]+waddbhusm[ ]+wr1, wr2, wr3
+0+050 <[^>]*> ee2541a6[ ]+waddbhusl[ ]+wr4, wr5, wr6
+0+054 <[^>]*> ce6211a3[ ]+waddbhusmgt[ ]+wr1, wr2, wr3
+0+058 <[^>]*> ce2541a6[ ]+waddbhuslgt[ ]+wr4, wr5, wr6
+0+05c <[^>]*> ee421003[ ]+wavg4[ ]+wr1, wr2, wr3
+0+060 <[^>]*> ce454006[ ]+wavg4gt[ ]+wr4, wr5, wr6
+0+064 <[^>]*> ee521003[ ]+wavg4r[ ]+wr1, wr2, wr3
+0+068 <[^>]*> ce554006[ ]+wavg4rgt[ ]+wr4, wr5, wr6
+0+06c <[^>]*> fc711102[ ]+wldrd[ ]+wr1, \[r1\], -r2
+0+070 <[^>]*> fc712132[ ]+wldrd[ ]+wr2, \[r1\], -r2, lsl #3
+0+074 <[^>]*> fcf13102[ ]+wldrd[ ]+wr3, \[r1\], \+r2
+0+078 <[^>]*> fcf14142[ ]+wldrd[ ]+wr4, \[r1\], \+r2, lsl #4
+0+07c <[^>]*> fd515102[ ]+wldrd[ ]+wr5, \[r1, -r2\]
+0+080 <[^>]*> fd516132[ ]+wldrd[ ]+wr6, \[r1, -r2, lsl #3\]
+0+084 <[^>]*> fdd17102[ ]+wldrd[ ]wr7, \[r1, \+r2\]
+0+088 <[^>]*> fdd18142[ ]+wldrd[ ]wr8, \[r1, \+r2, lsl #4\]
+0+08c <[^>]*> fd719102[ ]+wldrd[ ]wr9, \[r1, -r2\]!
+0+090 <[^>]*> fd71a132[ ]+wldrd[ ]wr10, \[r1, -r2, lsl #3\]!
+0+094 <[^>]*> fdf1b102[ ]+wldrd[ ]wr11, \[r1, \+r2\]!
+0+098 <[^>]*> fdf1c142[ ]+wldrd[ ]wr12, \[r1, \+r2, lsl #4\]!
+0+09c <[^>]*> ee821083[ ]+wmerge[ ]wr1, wr2, wr3, #4
+0+0a0 <[^>]*> ce821083[ ]+wmergegt[ ]wr1, wr2, wr3, #4
+0+0a4 <[^>]*> 0e3210a3[ ]+wmiatteq[ ]wr1, wr2, wr3
+0+0a8 <[^>]*> ce2210a3[ ]+wmiatbgt[ ]wr1, wr2, wr3
+0+0ac <[^>]*> 1e1210a3[ ]+wmiabtne[ ]wr1, wr2, wr3
+0+0b0 <[^>]*> ce0210a3[ ]+wmiabbgt[ ]wr1, wr2, wr3
+0+0b4 <[^>]*> 0e7210a3[ ]+wmiattneq[ ]wr1, wr2, wr3
+0+0b8 <[^>]*> 1e6210a3[ ]+wmiatbnne[ ]wr1, wr2, wr3
+0+0bc <[^>]*> ce5210a3[ ]+wmiabtngt[ ]wr1, wr2, wr3
+0+0c0 <[^>]*> 0e4210a3[ ]+wmiabbneq[ ]wr1, wr2, wr3
+0+0c4 <[^>]*> 0eb21123[ ]+wmiawtteq[ ]wr1, wr2, wr3
+0+0c8 <[^>]*> cea21123[ ]+wmiawtbgt[ ]wr1, wr2, wr3
+0+0cc <[^>]*> 1e921123[ ]+wmiawbtne[ ]wr1, wr2, wr3
+0+0d0 <[^>]*> ce821123[ ]+wmiawbbgt[ ]wr1, wr2, wr3
+0+0d4 <[^>]*> 1ef21123[ ]+wmiawttnne[ ]wr1, wr2, wr3
+0+0d8 <[^>]*> cee21123[ ]+wmiawtbngt[ ]wr1, wr2, wr3
+0+0dc <[^>]*> 0ed21123[ ]+wmiawbtneq[ ]wr1, wr2, wr3
+0+0e0 <[^>]*> 1ec21123[ ]+wmiawbbnne[ ]wr1, wr2, wr3
+0+0e4 <[^>]*> 0ed210c3[ ]+wmulwumeq[ ]wr1, wr2, wr3
+0+0e8 <[^>]*> cec210c3[ ]+wmulwumrgt[ ]wr1, wr2, wr3
+0+0ec <[^>]*> 1ef210c3[ ]+wmulwsmne[ ]wr1, wr2, wr3
+0+0f0 <[^>]*> 0ee210c3[ ]+wmulwsmreq[ ]wr1, wr2, wr3
+0+0f4 <[^>]*> ceb210c3[ ]+wmulwlgt[ ]wr1, wr2, wr3
+0+0f8 <[^>]*> aeb210c3[ ]+wmulwlge[ ]wr1, wr2, wr3
+0+0fc <[^>]*> 1eb210a3[ ]+wqmiattne[ ]wr1, wr2, wr3
+0+100 <[^>]*> 0ef210a3[ ]+wqmiattneq[ ]wr1, wr2, wr3
+0+104 <[^>]*> cea210a3[ ]+wqmiatbgt[ ]wr1, wr2, wr3
+0+108 <[^>]*> aee210a3[ ]+wqmiatbnge[ ]wr1, wr2, wr3
+0+10c <[^>]*> 1e9210a3[ ]+wqmiabtne[ ]wr1, wr2, wr3
+0+110 <[^>]*> 0ed210a3[ ]+wqmiabtneq[ ]wr1, wr2, wr3
+0+114 <[^>]*> ce8210a3[ ]+wqmiabbgt[ ]wr1, wr2, wr3
+0+118 <[^>]*> 1ec210a3[ ]+wqmiabbnne[ ]wr1, wr2, wr3
+0+11c <[^>]*> ce121083[ ]+wqmulmgt[ ]wr1, wr2, wr3
+0+120 <[^>]*> 0e321083[ ]+wqmulmreq[ ]wr1, wr2, wr3
+0+124 <[^>]*> cec210e3[ ]+wqmulwmgt[ ]wr1, wr2, wr3
+0+128 <[^>]*> 0ee210e3[ ]+wqmulwmreq[ ]wr1, wr2, wr3
+0+12c <[^>]*> fc611102[ ]+wstrd[ ]+wr1, \[r1\], -r2
+0+130 <[^>]*> fc612132[ ]+wstrd[ ]+wr2, \[r1\], -r2, lsl #3
+0+134 <[^>]*> fce13102[ ]+wstrd[ ]+wr3, \[r1\], \+r2
+0+138 <[^>]*> fce14142[ ]+wstrd[ ]+wr4, \[r1\], \+r2, lsl #4
+0+13c <[^>]*> fd415102[ ]+wstrd[ ]+wr5, \[r1, -r2\]
+0+140 <[^>]*> fd416132[ ]+wstrd[ ]+wr6, \[r1, -r2, lsl #3\]
+0+144 <[^>]*> fdc17102[ ]+wstrd[ ]wr7, \[r1, \+r2\]
+0+148 <[^>]*> fdc18142[ ]+wstrd[ ]wr8, \[r1, \+r2, lsl #4\]
+0+14c <[^>]*> fd619102[ ]+wstrd[ ]wr9, \[r1, -r2\]!
+0+150 <[^>]*> fd61a132[ ]+wstrd[ ]wr10, \[r1, -r2, lsl #3\]!
+0+154 <[^>]*> fde1b102[ ]+wstrd[ ]wr11, \[r1, \+r2\]!
+0+158 <[^>]*> fde1c142[ ]+wstrd[ ]wr12, \[r1, \+r2, lsl #4\]!
+0+15c <[^>]*> ced211c3[ ]+wsubaddhxgt[ ]wr1, wr2, wr3
+0+160 <[^>]*> fe721140[ ]+wrorh[ ]wr1, wr2, #16
+0+164 <[^>]*> feb21040[ ]+wrorw[ ]wr1, wr2, #32
+0+168 <[^>]*> ee021002[ ]+wor[ ]wr1, wr2, wr2
+0+16c <[^>]*> fe721145[ ]+wrorh[ ]wr1, wr2, #21
+0+170 <[^>]*> feb2104d[ ]+wrorw[ ]wr1, wr2, #13
+0+174 <[^>]*> fef2104e[ ]+wrord[ ]wr1, wr2, #14
+0+178 <[^>]*> fe721140[ ]+wrorh[ ]wr1, wr2, #16
+0+17c <[^>]*> feb21040[ ]+wrorw[ ]wr1, wr2, #32
+0+180 <[^>]*> ee021002[ ]+wor[ ]wr1, wr2, wr2
+0+184 <[^>]*> fe59204b[ ]+wsllh[ ]wr2, wr9, #11
+0+188 <[^>]*> fe95304d[ ]+wsllw[ ]wr3, wr5, #13
+0+18c <[^>]*> fed8304f[ ]+wslld[ ]wr3, wr8, #15
+0+190 <[^>]*> fe721140[ ]+wrorh[ ]wr1, wr2, #16
+0+194 <[^>]*> feb21040[ ]+wrorw[ ]wr1, wr2, #32
+0+198 <[^>]*> ee021002[ ]+wor[ ]wr1, wr2, wr2
+0+19c <[^>]*> fe49204c[ ]+wsrah[ ]wr2, wr9, #12
+0+1a0 <[^>]*> fe85304e[ ]+wsraw[ ]wr3, wr5, #14
+0+1a4 <[^>]*> fec83140[ ]+wsrad[ ]wr3, wr8, #16
+0+1a8 <[^>]*> fe721140[ ]+wrorh[ ]wr1, wr2, #16
+0+1ac <[^>]*> feb21040[ ]+wrorw[ ]wr1, wr2, #32
+0+1b0 <[^>]*> ee021002[ ]+wor[ ]wr1, wr2, wr2
+0+1b4 <[^>]*> fe69204c[ ]+wsrlh[ ]wr2, wr9, #12
+0+1b8 <[^>]*> fea5304e[ ]+wsrlw[ ]wr3, wr5, #14
+0+1bc <[^>]*> fee83140[ ]+wsrld[ ]wr3, wr8, #16
diff --git a/gas/testsuite/gas/arm/iwmmxt2.s b/gas/testsuite/gas/arm/iwmmxt2.s
new file mode 100644
index 000000000000..314f64f11e0b
--- /dev/null
+++ b/gas/testsuite/gas/arm/iwmmxt2.s
@@ -0,0 +1,137 @@
+ .text
+ .global iwmmxt2
+iwmmxt2:
+
+ waddhc wr4, wr5, wr6
+ waddwc wr7, wr8, wr9
+
+ wmadduxgt wr4, wr5, wr6
+ wmadduneq wr7, wr8, wr9
+ wmaddsxne wr4, wr5, wr6
+ wmaddsnge wr7, wr8, wr9
+
+ wmulumr wr1, wr2, wr3
+ wmulsmr wr1, wr2, wr3
+
+ torvscbgt r15
+ torvschne r15
+ torvscweq r15
+
+ wabsb wr1, wr2
+ wabsh wr3, wr4
+ wabsw wr5, wr6
+ wabsbgt wr1, wr2
+
+ wabsdiffb wr1, wr2, wr3
+ wabsdiffh wr4, wr5, wr6
+ wabsdiffw wr7, wr8, wr9
+ wabsdiffbgt wr1, wr2, wr3
+
+ waddbhusm wr1, wr2, wr3
+ waddbhusl wr4, wr5, wr6
+ waddbhusmgt wr1, wr2, wr3
+ waddbhuslgt wr4, wr5, wr6
+
+ wavg4 wr1, wr2, wr3
+ wavg4gt wr4, wr5, wr6
+ wavg4r wr1, wr2, wr3
+ wavg4rgt wr4, wr5, wr6
+
+ wldrd wr1, [r1], -r2
+ wldrd wr2, [r1], -r2,lsl #3
+ wldrd wr3, [r1], +r2
+ wldrd wr4, [r1], +r2,lsl #4
+ wldrd wr5, [r1, -r2]
+ wldrd wr6, [r1, -r2,lsl #3]
+ wldrd wr7, [r1, +r2]
+ wldrd wr8, [r1, +r2,lsl #4]
+ wldrd wr9, [r1, -r2]!
+ wldrd wr10, [r1, -r2,lsl #3]!
+ wldrd wr11, [r1, +r2]!
+ wldrd wr12, [r1, +r2,lsl #4]!
+
+ wmerge wr1, wr2, wr3, #4
+ wmergegt wr1, wr2, wr3, #4
+
+ wmiatteq wr1, wr2, wr3
+ wmiatbgt wr1, wr2, wr3
+ wmiabtne wr1, wr2, wr3
+ wmiabbgt wr1, wr2, wr3
+ wmiattneq wr1, wr2, wr3
+ wmiatbnne wr1, wr2, wr3
+ wmiabtngt wr1, wr2, wr3
+ wmiabbneq wr1, wr2, wr3
+
+ wmiawtteq wr1, wr2, wr3
+ wmiawtbgt wr1, wr2, wr3
+ wmiawbtne wr1, wr2, wr3
+ wmiawbbgt wr1, wr2, wr3
+ wmiawttnne wr1, wr2, wr3
+ wmiawtbngt wr1, wr2, wr3
+ wmiawbtneq wr1, wr2, wr3
+ wmiawbbnne wr1, wr2, wr3
+
+ wmulwumeq wr1, wr2, wr3
+ wmulwumrgt wr1, wr2, wr3
+ wmulwsmne wr1, wr2, wr3
+ wmulwsmreq wr1, wr2, wr3
+ wmulwlgt wr1, wr2, wr3
+ wmulwlge wr1, wr2, wr3
+
+ wqmiattne wr1, wr2, wr3
+ wqmiattneq wr1, wr2, wr3
+ wqmiatbgt wr1, wr2, wr3
+ wqmiatbnge wr1, wr2, wr3
+ wqmiabtne wr1, wr2, wr3
+ wqmiabtneq wr1, wr2, wr3
+ wqmiabbgt wr1, wr2, wr3
+ wqmiabbnne wr1, wr2, wr3
+
+ wqmulmgt wr1, wr2, wr3
+ wqmulmreq wr1, wr2, wr3
+
+ wqmulwmgt wr1, wr2, wr3
+ wqmulwmreq wr1, wr2, wr3
+
+ wstrd wr1, [r1], -r2
+ wstrd wr2, [r1], -r2,lsl #3
+ wstrd wr3, [r1], +r2
+ wstrd wr4, [r1], +r2,lsl #4
+ wstrd wr5, [r1, -r2]
+ wstrd wr6, [r1, -r2,lsl #3]
+ wstrd wr7, [r1, +r2]
+ wstrd wr8, [r1, +r2,lsl #4]
+ wstrd wr9, [r1, -r2]!
+ wstrd wr10, [r1, -r2,lsl #3]!
+ wstrd wr11, [r1, +r2]!
+ wstrd wr12, [r1, +r2,lsl #4]!
+
+ wsubaddhxgt wr1, wr2, wr3
+
+ wrorh wr1, wr2, #0
+ wrorw wr1, wr2, #0
+ wrord wr1, wr2, #0
+ wrorh wr1, wr2, #21
+ wrorw wr1, wr2, #13
+ wrord wr1, wr2, #14
+
+ wsllh wr1, wr2, #0
+ wsllw wr1, wr2, #0
+ wslld wr1, wr2, #0
+ wsllh wr2, wr9, #11
+ wsllw wr3, wr5, #13
+ wslld wr3, wr8, #15
+
+ wsrah wr1, wr2, #0
+ wsraw wr1, wr2, #0
+ wsrad wr1, wr2, #0
+ wsrah wr2, wr9, #12
+ wsraw wr3, wr5, #14
+ wsrad wr3, wr8, #16
+
+ wsrlh wr1, wr2, #0
+ wsrlw wr1, wr2, #0
+ wsrld wr1, wr2, #0
+ wsrlh wr2, wr9, #12
+ wsrlw wr3, wr5, #14
+ wsrld wr3, wr8, #16
diff --git a/gas/testsuite/gas/arm/local_function.d b/gas/testsuite/gas/arm/local_function.d
new file mode 100644
index 000000000000..46da8eceb6c7
--- /dev/null
+++ b/gas/testsuite/gas/arm/local_function.d
@@ -0,0 +1,10 @@
+#objdump: -r
+#name: Relocations agains local function symbols
+# This test is only valid on ELF based ports.
+#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+.*: file format.*
+
+RELOCATION RECORDS FOR \[.text\]:
+OFFSET TYPE VALUE
+00000000 R_ARM_(CALL|PC24) bar
diff --git a/gas/testsuite/gas/arm/local_function.s b/gas/testsuite/gas/arm/local_function.s
new file mode 100644
index 000000000000..1d98a37425cc
--- /dev/null
+++ b/gas/testsuite/gas/arm/local_function.s
@@ -0,0 +1,10 @@
+ .text
+ .type foo, %function
+foo:
+ bl bar
+
+ .section .text.bar
+ nop
+ .type bar, %function
+bar:
+ nop
diff --git a/gas/testsuite/gas/arm/local_label_coff.d b/gas/testsuite/gas/arm/local_label_coff.d
new file mode 100644
index 000000000000..5e45ac8c479c
--- /dev/null
+++ b/gas/testsuite/gas/arm/local_label_coff.d
@@ -0,0 +1,11 @@
+#nm: -n
+#name: ARM local label relocs to section symbol relocs (COFF)
+# This test is only valid on COFF based targets, except Windows CE.
+# There are ELF and Windows CE versions of this test.
+#not-skip: *-unknown-pe *-epoc-pe *-*-*coff
+
+# Check if relocations against local symbols are converted to
+# relocations against section symbols.
+0+0 b .bss
+0+0 d .data
+0+0 t .text
diff --git a/gas/testsuite/gas/arm/local_label_coff.s b/gas/testsuite/gas/arm/local_label_coff.s
new file mode 100644
index 000000000000..985f568ac3f0
--- /dev/null
+++ b/gas/testsuite/gas/arm/local_label_coff.s
@@ -0,0 +1,3 @@
+ .text
+Lused_label:
+ .word Lused_label
diff --git a/gas/testsuite/gas/arm/local_label_elf.d b/gas/testsuite/gas/arm/local_label_elf.d
new file mode 100644
index 000000000000..d4a8c8ea73f7
--- /dev/null
+++ b/gas/testsuite/gas/arm/local_label_elf.d
@@ -0,0 +1,9 @@
+#nm: -n
+#name: ARM local label relocs to section symbol relocs (ELF)
+# This test is only valid on ELF targets.
+# There are COFF and Windows CE versions of this test.
+#skip: *-*-*coff *-*-pe *-wince-* *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+# Check if relocations against local symbols are converted to
+# relocations against section symbols.
+
diff --git a/gas/testsuite/gas/arm/local_label_elf.s b/gas/testsuite/gas/arm/local_label_elf.s
new file mode 100644
index 000000000000..e9f5467d4122
--- /dev/null
+++ b/gas/testsuite/gas/arm/local_label_elf.s
@@ -0,0 +1,3 @@
+ .text
+.Lused_label:
+ .word .Lused_label
diff --git a/gas/testsuite/gas/arm/local_label_wince.d b/gas/testsuite/gas/arm/local_label_wince.d
new file mode 100644
index 000000000000..97fc58aea824
--- /dev/null
+++ b/gas/testsuite/gas/arm/local_label_wince.d
@@ -0,0 +1,11 @@
+#nm: -n
+#name: ARM local label relocs to section symbol relocs (WinCE)
+# This test is only valid on Windows CE.
+# There are ELF and COFF versions of this test.
+#not-skip: *-*-wince *-wince-*
+
+# Check if relocations against local symbols are converted to
+# relocations against section symbols.
+0+0 b .bss
+0+0 d .data
+0+0 t .text
diff --git a/gas/testsuite/gas/arm/local_label_wince.s b/gas/testsuite/gas/arm/local_label_wince.s
new file mode 100644
index 000000000000..e9f5467d4122
--- /dev/null
+++ b/gas/testsuite/gas/arm/local_label_wince.s
@@ -0,0 +1,3 @@
+ .text
+.Lused_label:
+ .word .Lused_label
diff --git a/gas/testsuite/gas/arm/macro1.d b/gas/testsuite/gas/arm/macro1.d
index 2384594fc545..c29bb626156e 100644
--- a/gas/testsuite/gas/arm/macro1.d
+++ b/gas/testsuite/gas/arm/macro1.d
@@ -6,7 +6,7 @@
Disassembly of section .text:
-0+0 <[^>]*> e8bd8030 ? ldmia sp!, {r4, r5, pc}
+0+0 <[^>]*> e8bd8030 ? pop {r4, r5, pc}
0+4 <[^>]*> e1a00000 ? nop \(mov r0,r0\)
0+8 <[^>]*> e1a00000 ? nop \(mov r0,r0\)
0+c <[^>]*> e1a00000 ? nop \(mov r0,r0\)
diff --git a/gas/testsuite/gas/arm/mapshort-eabi.d b/gas/testsuite/gas/arm/mapshort-eabi.d
new file mode 100644
index 000000000000..9cbfc3eacd4a
--- /dev/null
+++ b/gas/testsuite/gas/arm/mapshort-eabi.d
@@ -0,0 +1,45 @@
+#objdump: --syms --special-syms -d
+#name: ARM Mapping Symbols for .short (EABI version)
+# This test is only valid on EABI based ports.
+#target: *-*-*eabi *-*-symbianelf
+#source: mapshort.s
+
+# Test the generation and use of ARM ELF Mapping Symbols
+
+.*: +file format .*arm.*
+
+SYMBOL TABLE:
+0+00 l d .text 00000000 .text
+0+00 l d .data 00000000 .data
+0+00 l d .bss 00000000 .bss
+0+00 l F .text 00000000 foo
+0+00 l .text 00000000 \$a
+0+04 l .text 00000000 \$t
+0+08 l .text 00000000 \$d
+0+12 l .text 00000000 \$t
+0+16 l .text 00000000 \$d
+0+18 l .text 00000000 \$a
+0+1c l .text 00000000 \$d
+0+1f l .text 00000000 bar
+0+00 l .data 00000000 wibble
+0+00 l .data 00000000 \$d
+0+00 l d .ARM.attributes 00000000 .ARM.attributes
+
+
+Disassembly of section .text:
+
+0+00 <foo>:
+ 0: e1a00000 nop \(mov r0,r0\)
+ 4: 46c0 nop \(mov r8, r8\)
+ 6: 46c0 nop \(mov r8, r8\)
+ 8: 00000002 .word 0x00000002
+ c: 00010001 .word 0x00010001
+ 10: 0003 .short 0x0003
+ 12: 46c0 nop \(mov r8, r8\)
+ 14: 46c0 nop \(mov r8, r8\)
+ 16: 0001 .short 0x0001
+ 18: ebfffff8 bl 0 <foo>
+ 1c: 0008 .short 0x0008
+ 1e: 09 .byte 0x09
+0+1f <bar>:
+ 1f: 0a .byte 0x0a
diff --git a/gas/testsuite/gas/arm/mapshort-elf.d b/gas/testsuite/gas/arm/mapshort-elf.d
new file mode 100644
index 000000000000..09602f08091e
--- /dev/null
+++ b/gas/testsuite/gas/arm/mapshort-elf.d
@@ -0,0 +1,44 @@
+#objdump: --syms --special-syms -d
+#name: ARM Mapping Symbols for .short (ELF version)
+# This test is only valid on ELF based ports.
+#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix* *-*-*eabi *-*-syymbianelf
+#source: mapshort.s
+
+# Test the generation and use of ARM ELF Mapping Symbols
+
+.*: +file format .*arm.*
+
+SYMBOL TABLE:
+0+00 l d .text 00000000 .text
+0+00 l d .data 00000000 .data
+0+00 l d .bss 00000000 .bss
+0+00 l F .text 00000000 foo
+0+00 l .text 00000000 \$a
+0+04 l .text 00000000 \$t
+0+08 l .text 00000000 \$d
+0+12 l .text 00000000 \$t
+0+16 l .text 00000000 \$d
+0+18 l .text 00000000 \$a
+0+1c l .text 00000000 \$d
+0+1f l .text 00000000 bar
+0+00 l .data 00000000 wibble
+0+00 l .data 00000000 \$d
+# The ELF based port does not generate a .ARM.attributes symbol
+
+Disassembly of section .text:
+
+0+00 <foo>:
+ 0: e1a00000 nop \(mov r0,r0\)
+ 4: 46c0 nop \(mov r8, r8\)
+ 6: 46c0 nop \(mov r8, r8\)
+ 8: 00000002 .word 0x00000002
+ c: 00010001 .word 0x00010001
+ 10: 0003 .short 0x0003
+ 12: 46c0 nop \(mov r8, r8\)
+ 14: 46c0 nop \(mov r8, r8\)
+ 16: 0001 .short 0x0001
+ 18: ebfffff8 bl 0 <foo>
+ 1c: 0008 .short 0x0008
+ 1e: 09 .byte 0x09
+0+1f <bar>:
+ 1f: 0a .byte 0x0a
diff --git a/gas/testsuite/gas/arm/mapshort.s b/gas/testsuite/gas/arm/mapshort.s
new file mode 100644
index 000000000000..741cb8251053
--- /dev/null
+++ b/gas/testsuite/gas/arm/mapshort.s
@@ -0,0 +1,24 @@
+ .text
+ .type foo, %function
+foo:
+ .code 32
+ nop
+ .code 16
+ nop
+ nop
+ .long 2
+ .short 1
+ .short 1
+ .short 3
+ nop
+ nop
+ .short 1
+ .code 32
+ bl foo
+ .short 8
+ .byte 9
+bar:
+ .byte 10
+ .data
+wibble:
+ .word 0
diff --git a/gas/testsuite/gas/arm/mul-overlap-v6.d b/gas/testsuite/gas/arm/mul-overlap-v6.d
new file mode 100644
index 000000000000..ff42190a5d0d
--- /dev/null
+++ b/gas/testsuite/gas/arm/mul-overlap-v6.d
@@ -0,0 +1,10 @@
+# name: Overlapping multiplication operands for ARMv6
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> e0000090 mul r0, r0, r0
+0[0-9a-f]+ <[^>]+> e0202190 mla r0, r0, r1, r2
+0[0-9a-f]+ <[^>]+> e0602190 mls r0, r0, r1, r2
+0[0-9a-f]+ <[^>]+> e12fff1e bx lr
diff --git a/gas/testsuite/gas/arm/mul-overlap-v6.s b/gas/testsuite/gas/arm/mul-overlap-v6.s
new file mode 100644
index 000000000000..f35c124ae39f
--- /dev/null
+++ b/gas/testsuite/gas/arm/mul-overlap-v6.s
@@ -0,0 +1,9 @@
+ .arch armv6t2
+ .text
+ .align 2
+ .global foo
+foo:
+ mul r0, r0, r0
+ mla r0, r0, r1, r2
+ mls r0, r0, r1, r2
+ bx lr
diff --git a/gas/testsuite/gas/arm/mul-overlap.d b/gas/testsuite/gas/arm/mul-overlap.d
new file mode 100644
index 000000000000..53406e3f413b
--- /dev/null
+++ b/gas/testsuite/gas/arm/mul-overlap.d
@@ -0,0 +1,2 @@
+# name: Overlapping multiplication operands without architecture specification
+# error-output: mul-overlap.l
diff --git a/gas/testsuite/gas/arm/mul-overlap.l b/gas/testsuite/gas/arm/mul-overlap.l
new file mode 100644
index 000000000000..a895c0102a3f
--- /dev/null
+++ b/gas/testsuite/gas/arm/mul-overlap.l
@@ -0,0 +1,3 @@
+[^:]*: Assembler messages:
+[^:]*:5: Rd and Rm should be different in mul
+[^:]*:6: Rd and Rm should be different in mla
diff --git a/gas/testsuite/gas/arm/mul-overlap.s b/gas/testsuite/gas/arm/mul-overlap.s
new file mode 100644
index 000000000000..6932eaeb13fe
--- /dev/null
+++ b/gas/testsuite/gas/arm/mul-overlap.s
@@ -0,0 +1,8 @@
+ .text
+ .align 2
+ .global foo
+foo:
+ mul r0, r0, r0
+ mla r0, r0, r1, r2
+ mls r0, r0, r1, r2
+ bx lr
diff --git a/gas/testsuite/gas/arm/neon-cond-bad-inc.s b/gas/testsuite/gas/arm/neon-cond-bad-inc.s
new file mode 100644
index 000000000000..a92d19675e1c
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-cond-bad-inc.s
@@ -0,0 +1,57 @@
+# Check for illegal conditional Neon instructions in ARM mode. The instructions
+# which overlap with VFP are the tricky cases, so test those.
+
+ .include "itblock.s"
+
+ .syntax unified
+ .text
+func:
+ itblock 4 eq
+ vmoveq q0,q1
+ vmoveq d0,d1
+ vmoveq.i32 q0,#0
+ vmoveq.i32 d0,#0
+ @ Following four *can* be conditional.
+ itblock 4 eq
+ vmoveq.32 d0[1], r2
+ vmoveq d0,r1,r2
+ vmoveq.32 r2,d1[0]
+ vmoveq r0,r1,d2
+
+ .macro dyadic_eq op eq="eq" f32=".f32"
+ itblock 2 eq
+ \op\eq\f32 d0,d1,d2
+ \op\eq\f32 q0,q1,q2
+ .endm
+
+ dyadic_eq vmul
+ dyadic_eq vmla
+ dyadic_eq vmls
+ dyadic_eq vadd
+ dyadic_eq vsub
+
+ .macro monadic_eq op eq="eq" f32=".f32"
+ itblock 2 eq
+ \op\eq\f32 d0,d1
+ \op\eq\f32 q0,q1
+ .endm
+
+ monadic_eq vabs
+ monadic_eq vneg
+
+ .macro cvt to from dot="."
+ itblock 2 eq
+ vcvteq\dot\to\dot\from d0,d1
+ vcvteq\dot\to\dot\from q0,q1
+ .endm
+
+ cvt s32 f32
+ cvt u32 f32
+ cvt f32 s32
+ cvt f32 u32
+
+ itblock 4 eq
+ vdupeq.32 d0,r1
+ vdupeq.32 q0,r1
+ vdupeq.32 d0,d1[0]
+ vdupeq.32 q0,d1[1]
diff --git a/gas/testsuite/gas/arm/neon-cond-bad.d b/gas/testsuite/gas/arm/neon-cond-bad.d
new file mode 100644
index 000000000000..105ba4d7f26e
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-cond-bad.d
@@ -0,0 +1,3 @@
+# name: Illegal conditions in Neon instructions, ARM mode
+# as: -mfpu=neon -I$srcdir/$subdir
+# error-output: neon-cond-bad.l
diff --git a/gas/testsuite/gas/arm/neon-cond-bad.l b/gas/testsuite/gas/arm/neon-cond-bad.l
new file mode 100644
index 000000000000..a79f79d64f83
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-cond-bad.l
@@ -0,0 +1,29 @@
+[^:]*: Assembler messages:
+[^:]*:10: Error: instruction cannot be conditional -- `vmoveq q0,q1'
+[^:]*:11: Error: instruction cannot be conditional -- `vmoveq d0,d1'
+[^:]*:12: Error: instruction cannot be conditional -- `vmoveq\.i32 q0,#0'
+[^:]*:13: Error: instruction cannot be conditional -- `vmoveq\.i32 d0,#0'
+[^:]*:27: Error: instruction cannot be conditional -- `vmuleq\.f32 d0,d1,d2'
+[^:]*:27: Error: instruction cannot be conditional -- `vmuleq\.f32 q0,q1,q2'
+[^:]*:28: Error: instruction cannot be conditional -- `vmlaeq\.f32 d0,d1,d2'
+[^:]*:28: Error: instruction cannot be conditional -- `vmlaeq\.f32 q0,q1,q2'
+[^:]*:29: Error: instruction cannot be conditional -- `vmlseq\.f32 d0,d1,d2'
+[^:]*:29: Error: instruction cannot be conditional -- `vmlseq\.f32 q0,q1,q2'
+[^:]*:30: Error: instruction cannot be conditional -- `vaddeq\.f32 d0,d1,d2'
+[^:]*:30: Error: instruction cannot be conditional -- `vaddeq\.f32 q0,q1,q2'
+[^:]*:31: Error: instruction cannot be conditional -- `vsubeq\.f32 d0,d1,d2'
+[^:]*:31: Error: instruction cannot be conditional -- `vsubeq\.f32 q0,q1,q2'
+[^:]*:39: Error: instruction cannot be conditional -- `vabseq\.f32 d0,d1'
+[^:]*:39: Error: instruction cannot be conditional -- `vabseq\.f32 q0,q1'
+[^:]*:40: Error: instruction cannot be conditional -- `vnegeq\.f32 d0,d1'
+[^:]*:40: Error: instruction cannot be conditional -- `vnegeq\.f32 q0,q1'
+[^:]*:48: Error: instruction cannot be conditional -- `vcvteq\.s32\.f32 d0,d1'
+[^:]*:48: Error: instruction cannot be conditional -- `vcvteq\.s32\.f32 q0,q1'
+[^:]*:49: Error: instruction cannot be conditional -- `vcvteq\.u32\.f32 d0,d1'
+[^:]*:49: Error: instruction cannot be conditional -- `vcvteq\.u32\.f32 q0,q1'
+[^:]*:50: Error: instruction cannot be conditional -- `vcvteq\.f32\.s32 d0,d1'
+[^:]*:50: Error: instruction cannot be conditional -- `vcvteq\.f32\.s32 q0,q1'
+[^:]*:51: Error: instruction cannot be conditional -- `vcvteq\.f32\.u32 d0,d1'
+[^:]*:51: Error: instruction cannot be conditional -- `vcvteq\.f32\.u32 q0,q1'
+[^:]*:56: Error: instruction cannot be conditional -- `vdupeq\.32 d0,d1\[0\]'
+[^:]*:57: Error: instruction cannot be conditional -- `vdupeq\.32 q0,d1\[1\]'
diff --git a/gas/testsuite/gas/arm/neon-cond-bad.s b/gas/testsuite/gas/arm/neon-cond-bad.s
new file mode 100644
index 000000000000..16afd8635e91
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-cond-bad.s
@@ -0,0 +1,2 @@
+ .arm
+ .include "neon-cond-bad-inc.s"
diff --git a/gas/testsuite/gas/arm/neon-cond-bad_t2.d b/gas/testsuite/gas/arm/neon-cond-bad_t2.d
new file mode 100644
index 000000000000..517caa758ee4
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-cond-bad_t2.d
@@ -0,0 +1,55 @@
+# name: Conditions in Neon instructions, Thumb mode (illegal in ARM).
+# as: -mfpu=neon -I$srcdir/$subdir
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section \.text:
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> ef22 0152 vorreq q0, q1, q1
+0[0-9a-f]+ <[^>]+> ef21 0111 vorreq d0, d1, d1
+0[0-9a-f]+ <[^>]+> ef80 0050 vmoveq\.i32 q0, #0 ; 0x00000000
+0[0-9a-f]+ <[^>]+> ef80 0010 vmoveq\.i32 d0, #0 ; 0x00000000
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> ee20 2b10 vmoveq\.32 d0\[1\], r2
+0[0-9a-f]+ <[^>]+> ec42 1b10 vmoveq d0, r1, r2
+0[0-9a-f]+ <[^>]+> ee11 2b10 vmoveq\.32 r2, d1\[0\]
+0[0-9a-f]+ <[^>]+> ec51 0b12 vmoveq r0, r1, d2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ff01 0d12 vmuleq\.f32 d0, d1, d2
+0[0-9a-f]+ <[^>]+> ff02 0d54 vmuleq\.f32 q0, q1, q2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ef01 0d12 vmlaeq\.f32 d0, d1, d2
+0[0-9a-f]+ <[^>]+> ef02 0d54 vmlaeq\.f32 q0, q1, q2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ef21 0d12 vmlseq\.f32 d0, d1, d2
+0[0-9a-f]+ <[^>]+> ef22 0d54 vmlseq\.f32 q0, q1, q2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ef01 0d02 vaddeq\.f32 d0, d1, d2
+0[0-9a-f]+ <[^>]+> ef02 0d44 vaddeq\.f32 q0, q1, q2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ef21 0d02 vsubeq\.f32 d0, d1, d2
+0[0-9a-f]+ <[^>]+> ef22 0d44 vsubeq\.f32 q0, q1, q2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ffb9 0701 vabseq\.f32 d0, d1
+0[0-9a-f]+ <[^>]+> ffb9 0742 vabseq\.f32 q0, q1
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ffb9 0781 vnegeq\.f32 d0, d1
+0[0-9a-f]+ <[^>]+> ffb9 07c2 vnegeq\.f32 q0, q1
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ffbb 0701 vcvteq\.s32\.f32 d0, d1
+0[0-9a-f]+ <[^>]+> ffbb 0742 vcvteq\.s32\.f32 q0, q1
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ffbb 0781 vcvteq\.u32\.f32 d0, d1
+0[0-9a-f]+ <[^>]+> ffbb 07c2 vcvteq\.u32\.f32 q0, q1
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ffbb 0601 vcvteq\.f32\.s32 d0, d1
+0[0-9a-f]+ <[^>]+> ffbb 0642 vcvteq\.f32\.s32 q0, q1
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ffbb 0681 vcvteq\.f32\.u32 d0, d1
+0[0-9a-f]+ <[^>]+> ffbb 06c2 vcvteq\.f32\.u32 q0, q1
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> ee80 1b10 vdupeq\.32 d0, r1
+0[0-9a-f]+ <[^>]+> eea0 1b10 vdupeq\.32 q0, r1
+0[0-9a-f]+ <[^>]+> ffb4 0c01 vdupeq\.32 d0, d1\[0\]
+0[0-9a-f]+ <[^>]+> ffbc 0c41 vdupeq\.32 q0, d1\[1\]
diff --git a/gas/testsuite/gas/arm/neon-cond-bad_t2.s b/gas/testsuite/gas/arm/neon-cond-bad_t2.s
new file mode 100644
index 000000000000..2655d11a049d
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-cond-bad_t2.s
@@ -0,0 +1,2 @@
+ .thumb
+ .include "neon-cond-bad-inc.s"
diff --git a/gas/testsuite/gas/arm/neon-cond.d b/gas/testsuite/gas/arm/neon-cond.d
new file mode 100644
index 000000000000..0b7d8ede73b6
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-cond.d
@@ -0,0 +1,14 @@
+# name: Conditional Neon instructions
+# as: -mfpu=neon
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section \.text:
+0[0-9a-f]+ <[^>]+> 0d943b00 vldreq d3, \[r4\]
+0[0-9a-f]+ <[^>]+> be035b70 vmovlt\.16 d3\[1\], r5
+0[0-9a-f]+ <[^>]+> ac474b13 vmovge d3, r4, r7
+0[0-9a-f]+ <[^>]+> 3c543b3e vmovcc r3, r4, d30
+0[0-9a-f]+ <[^>]+> 1e223b10 vmovne\.32 d2\[1\], r3
+0[0-9a-f]+ <[^>]+> 2c521b13 vmovcs r1, r2, d3
+0[0-9a-f]+ <[^>]+> 3c421b14 vmovcc d4, r1, r2
diff --git a/gas/testsuite/gas/arm/neon-cond.s b/gas/testsuite/gas/arm/neon-cond.s
new file mode 100644
index 000000000000..8f62575aa5e5
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-cond.s
@@ -0,0 +1,13 @@
+@ test conditional compilation
+
+ .arm
+ .text
+ .syntax unified
+
+ vldreq.32 d3,[r4]
+ vmovlt.16 d3[1], r5
+ vmovge d3, r4, r7
+ vmovcc r3, r4, d30
+ vmovne.32 d2[1],r3
+ vmovcs r1,r2,d3
+ vmovcc d4,r1,r2
diff --git a/gas/testsuite/gas/arm/neon-const.d b/gas/testsuite/gas/arm/neon-const.d
new file mode 100644
index 000000000000..a1bc97cf381f
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-const.d
@@ -0,0 +1,265 @@
+# name: Neon floating-point constants
+# as: -mfpu=neon
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> f2800050 vmov\.i32 q0, #0 ; 0x00000000
+0[0-9a-f]+ <[^>]+> f2800f50 vmov\.f32 q0, #2 ; 0x40000000
+0[0-9a-f]+ <[^>]+> f2810f50 vmov\.f32 q0, #4 ; 0x40800000
+0[0-9a-f]+ <[^>]+> f2820f50 vmov\.f32 q0, #8 ; 0x41000000
+0[0-9a-f]+ <[^>]+> f2830f50 vmov\.f32 q0, #16 ; 0x41800000
+0[0-9a-f]+ <[^>]+> f2840f50 vmov\.f32 q0, #0\.125 ; 0x3e000000
+0[0-9a-f]+ <[^>]+> f2850f50 vmov\.f32 q0, #0\.25 ; 0x3e800000
+0[0-9a-f]+ <[^>]+> f2860f50 vmov\.f32 q0, #0\.5 ; 0x3f000000
+0[0-9a-f]+ <[^>]+> f2870f50 vmov\.f32 q0, #1 ; 0x3f800000
+0[0-9a-f]+ <[^>]+> f2800f51 vmov\.f32 q0, #2\.125 ; 0x40080000
+0[0-9a-f]+ <[^>]+> f2810f51 vmov\.f32 q0, #4\.25 ; 0x40880000
+0[0-9a-f]+ <[^>]+> f2820f51 vmov\.f32 q0, #8\.5 ; 0x41080000
+0[0-9a-f]+ <[^>]+> f2830f51 vmov\.f32 q0, #17 ; 0x41880000
+0[0-9a-f]+ <[^>]+> f2840f51 vmov\.f32 q0, #0\.1328125 ; 0x3e080000
+0[0-9a-f]+ <[^>]+> f2850f51 vmov\.f32 q0, #0\.265625 ; 0x3e880000
+0[0-9a-f]+ <[^>]+> f2860f51 vmov\.f32 q0, #0\.53125 ; 0x3f080000
+0[0-9a-f]+ <[^>]+> f2870f51 vmov\.f32 q0, #1\.0625 ; 0x3f880000
+0[0-9a-f]+ <[^>]+> f2800f52 vmov\.f32 q0, #2\.25 ; 0x40100000
+0[0-9a-f]+ <[^>]+> f2810f52 vmov\.f32 q0, #4\.5 ; 0x40900000
+0[0-9a-f]+ <[^>]+> f2820f52 vmov\.f32 q0, #9 ; 0x41100000
+0[0-9a-f]+ <[^>]+> f2830f52 vmov\.f32 q0, #18 ; 0x41900000
+0[0-9a-f]+ <[^>]+> f2840f52 vmov\.f32 q0, #0\.140625 ; 0x3e100000
+0[0-9a-f]+ <[^>]+> f2850f52 vmov\.f32 q0, #0\.28125 ; 0x3e900000
+0[0-9a-f]+ <[^>]+> f2860f52 vmov\.f32 q0, #0\.5625 ; 0x3f100000
+0[0-9a-f]+ <[^>]+> f2870f52 vmov\.f32 q0, #1\.125 ; 0x3f900000
+0[0-9a-f]+ <[^>]+> f2800f53 vmov\.f32 q0, #2\.375 ; 0x40180000
+0[0-9a-f]+ <[^>]+> f2810f53 vmov\.f32 q0, #4\.75 ; 0x40980000
+0[0-9a-f]+ <[^>]+> f2820f53 vmov\.f32 q0, #9\.5 ; 0x41180000
+0[0-9a-f]+ <[^>]+> f2830f53 vmov\.f32 q0, #19 ; 0x41980000
+0[0-9a-f]+ <[^>]+> f2840f53 vmov\.f32 q0, #0\.1484375 ; 0x3e180000
+0[0-9a-f]+ <[^>]+> f2850f53 vmov\.f32 q0, #0\.296875 ; 0x3e980000
+0[0-9a-f]+ <[^>]+> f2860f53 vmov\.f32 q0, #0\.59375 ; 0x3f180000
+0[0-9a-f]+ <[^>]+> f2870f53 vmov\.f32 q0, #1\.1875 ; 0x3f980000
+0[0-9a-f]+ <[^>]+> f2800f54 vmov\.f32 q0, #2\.5 ; 0x40200000
+0[0-9a-f]+ <[^>]+> f2810f54 vmov\.f32 q0, #5 ; 0x40a00000
+0[0-9a-f]+ <[^>]+> f2820f54 vmov\.f32 q0, #10 ; 0x41200000
+0[0-9a-f]+ <[^>]+> f2830f54 vmov\.f32 q0, #20 ; 0x41a00000
+0[0-9a-f]+ <[^>]+> f2840f54 vmov\.f32 q0, #0\.15625 ; 0x3e200000
+0[0-9a-f]+ <[^>]+> f2850f54 vmov\.f32 q0, #0\.3125 ; 0x3ea00000
+0[0-9a-f]+ <[^>]+> f2860f54 vmov\.f32 q0, #0\.625 ; 0x3f200000
+0[0-9a-f]+ <[^>]+> f2870f54 vmov\.f32 q0, #1\.25 ; 0x3fa00000
+0[0-9a-f]+ <[^>]+> f2800f55 vmov\.f32 q0, #2\.625 ; 0x40280000
+0[0-9a-f]+ <[^>]+> f2810f55 vmov\.f32 q0, #5\.25 ; 0x40a80000
+0[0-9a-f]+ <[^>]+> f2820f55 vmov\.f32 q0, #10\.5 ; 0x41280000
+0[0-9a-f]+ <[^>]+> f2830f55 vmov\.f32 q0, #21 ; 0x41a80000
+0[0-9a-f]+ <[^>]+> f2840f55 vmov\.f32 q0, #0\.1640625 ; 0x3e280000
+0[0-9a-f]+ <[^>]+> f2850f55 vmov\.f32 q0, #0\.328125 ; 0x3ea80000
+0[0-9a-f]+ <[^>]+> f2860f55 vmov\.f32 q0, #0\.65625 ; 0x3f280000
+0[0-9a-f]+ <[^>]+> f2870f55 vmov\.f32 q0, #1\.3125 ; 0x3fa80000
+0[0-9a-f]+ <[^>]+> f2800f56 vmov\.f32 q0, #2\.75 ; 0x40300000
+0[0-9a-f]+ <[^>]+> f2810f56 vmov\.f32 q0, #5\.5 ; 0x40b00000
+0[0-9a-f]+ <[^>]+> f2820f56 vmov\.f32 q0, #11 ; 0x41300000
+0[0-9a-f]+ <[^>]+> f2830f56 vmov\.f32 q0, #22 ; 0x41b00000
+0[0-9a-f]+ <[^>]+> f2840f56 vmov\.f32 q0, #0\.171875 ; 0x3e300000
+0[0-9a-f]+ <[^>]+> f2850f56 vmov\.f32 q0, #0\.34375 ; 0x3eb00000
+0[0-9a-f]+ <[^>]+> f2860f56 vmov\.f32 q0, #0\.6875 ; 0x3f300000
+0[0-9a-f]+ <[^>]+> f2870f56 vmov\.f32 q0, #1\.375 ; 0x3fb00000
+0[0-9a-f]+ <[^>]+> f2800f57 vmov\.f32 q0, #2\.875 ; 0x40380000
+0[0-9a-f]+ <[^>]+> f2810f57 vmov\.f32 q0, #5\.75 ; 0x40b80000
+0[0-9a-f]+ <[^>]+> f2820f57 vmov\.f32 q0, #11\.5 ; 0x41380000
+0[0-9a-f]+ <[^>]+> f2830f57 vmov\.f32 q0, #23 ; 0x41b80000
+0[0-9a-f]+ <[^>]+> f2840f57 vmov\.f32 q0, #0\.1796875 ; 0x3e380000
+0[0-9a-f]+ <[^>]+> f2850f57 vmov\.f32 q0, #0\.359375 ; 0x3eb80000
+0[0-9a-f]+ <[^>]+> f2860f57 vmov\.f32 q0, #0\.71875 ; 0x3f380000
+0[0-9a-f]+ <[^>]+> f2870f57 vmov\.f32 q0, #1\.4375 ; 0x3fb80000
+0[0-9a-f]+ <[^>]+> f2800f58 vmov\.f32 q0, #3 ; 0x40400000
+0[0-9a-f]+ <[^>]+> f2810f58 vmov\.f32 q0, #6 ; 0x40c00000
+0[0-9a-f]+ <[^>]+> f2820f58 vmov\.f32 q0, #12 ; 0x41400000
+0[0-9a-f]+ <[^>]+> f2830f58 vmov\.f32 q0, #24 ; 0x41c00000
+0[0-9a-f]+ <[^>]+> f2840f58 vmov\.f32 q0, #0\.1875 ; 0x3e400000
+0[0-9a-f]+ <[^>]+> f2850f58 vmov\.f32 q0, #0\.375 ; 0x3ec00000
+0[0-9a-f]+ <[^>]+> f2860f58 vmov\.f32 q0, #0\.75 ; 0x3f400000
+0[0-9a-f]+ <[^>]+> f2870f58 vmov\.f32 q0, #1\.5 ; 0x3fc00000
+0[0-9a-f]+ <[^>]+> f2800f59 vmov\.f32 q0, #3\.125 ; 0x40480000
+0[0-9a-f]+ <[^>]+> f2810f59 vmov\.f32 q0, #6\.25 ; 0x40c80000
+0[0-9a-f]+ <[^>]+> f2820f59 vmov\.f32 q0, #12\.5 ; 0x41480000
+0[0-9a-f]+ <[^>]+> f2830f59 vmov\.f32 q0, #25 ; 0x41c80000
+0[0-9a-f]+ <[^>]+> f2840f59 vmov\.f32 q0, #0\.1953125 ; 0x3e480000
+0[0-9a-f]+ <[^>]+> f2850f59 vmov\.f32 q0, #0\.390625 ; 0x3ec80000
+0[0-9a-f]+ <[^>]+> f2860f59 vmov\.f32 q0, #0\.78125 ; 0x3f480000
+0[0-9a-f]+ <[^>]+> f2870f59 vmov\.f32 q0, #1\.5625 ; 0x3fc80000
+0[0-9a-f]+ <[^>]+> f2800f5a vmov\.f32 q0, #3\.25 ; 0x40500000
+0[0-9a-f]+ <[^>]+> f2810f5a vmov\.f32 q0, #6\.5 ; 0x40d00000
+0[0-9a-f]+ <[^>]+> f2820f5a vmov\.f32 q0, #13 ; 0x41500000
+0[0-9a-f]+ <[^>]+> f2830f5a vmov\.f32 q0, #26 ; 0x41d00000
+0[0-9a-f]+ <[^>]+> f2840f5a vmov\.f32 q0, #0\.203125 ; 0x3e500000
+0[0-9a-f]+ <[^>]+> f2850f5a vmov\.f32 q0, #0\.40625 ; 0x3ed00000
+0[0-9a-f]+ <[^>]+> f2860f5a vmov\.f32 q0, #0\.8125 ; 0x3f500000
+0[0-9a-f]+ <[^>]+> f2870f5a vmov\.f32 q0, #1\.625 ; 0x3fd00000
+0[0-9a-f]+ <[^>]+> f2800f5b vmov\.f32 q0, #3\.375 ; 0x40580000
+0[0-9a-f]+ <[^>]+> f2810f5b vmov\.f32 q0, #6\.75 ; 0x40d80000
+0[0-9a-f]+ <[^>]+> f2820f5b vmov\.f32 q0, #13\.5 ; 0x41580000
+0[0-9a-f]+ <[^>]+> f2830f5b vmov\.f32 q0, #27 ; 0x41d80000
+0[0-9a-f]+ <[^>]+> f2840f5b vmov\.f32 q0, #0\.2109375 ; 0x3e580000
+0[0-9a-f]+ <[^>]+> f2850f5b vmov\.f32 q0, #0\.421875 ; 0x3ed80000
+0[0-9a-f]+ <[^>]+> f2860f5b vmov\.f32 q0, #0\.84375 ; 0x3f580000
+0[0-9a-f]+ <[^>]+> f2870f5b vmov\.f32 q0, #1\.6875 ; 0x3fd80000
+0[0-9a-f]+ <[^>]+> f2800f5c vmov\.f32 q0, #3\.5 ; 0x40600000
+0[0-9a-f]+ <[^>]+> f2810f5c vmov\.f32 q0, #7 ; 0x40e00000
+0[0-9a-f]+ <[^>]+> f2820f5c vmov\.f32 q0, #14 ; 0x41600000
+0[0-9a-f]+ <[^>]+> f2830f5c vmov\.f32 q0, #28 ; 0x41e00000
+0[0-9a-f]+ <[^>]+> f2840f5c vmov\.f32 q0, #0\.21875 ; 0x3e600000
+0[0-9a-f]+ <[^>]+> f2850f5c vmov\.f32 q0, #0\.4375 ; 0x3ee00000
+0[0-9a-f]+ <[^>]+> f2860f5c vmov\.f32 q0, #0\.875 ; 0x3f600000
+0[0-9a-f]+ <[^>]+> f2870f5c vmov\.f32 q0, #1\.75 ; 0x3fe00000
+0[0-9a-f]+ <[^>]+> f2800f5d vmov\.f32 q0, #3\.625 ; 0x40680000
+0[0-9a-f]+ <[^>]+> f2810f5d vmov\.f32 q0, #7\.25 ; 0x40e80000
+0[0-9a-f]+ <[^>]+> f2820f5d vmov\.f32 q0, #14\.5 ; 0x41680000
+0[0-9a-f]+ <[^>]+> f2830f5d vmov\.f32 q0, #29 ; 0x41e80000
+0[0-9a-f]+ <[^>]+> f2840f5d vmov\.f32 q0, #0\.2265625 ; 0x3e680000
+0[0-9a-f]+ <[^>]+> f2850f5d vmov\.f32 q0, #0\.453125 ; 0x3ee80000
+0[0-9a-f]+ <[^>]+> f2860f5d vmov\.f32 q0, #0\.90625 ; 0x3f680000
+0[0-9a-f]+ <[^>]+> f2870f5d vmov\.f32 q0, #1\.8125 ; 0x3fe80000
+0[0-9a-f]+ <[^>]+> f2800f5e vmov\.f32 q0, #3\.75 ; 0x40700000
+0[0-9a-f]+ <[^>]+> f2810f5e vmov\.f32 q0, #7\.5 ; 0x40f00000
+0[0-9a-f]+ <[^>]+> f2820f5e vmov\.f32 q0, #15 ; 0x41700000
+0[0-9a-f]+ <[^>]+> f2830f5e vmov\.f32 q0, #30 ; 0x41f00000
+0[0-9a-f]+ <[^>]+> f2840f5e vmov\.f32 q0, #0\.234375 ; 0x3e700000
+0[0-9a-f]+ <[^>]+> f2850f5e vmov\.f32 q0, #0\.46875 ; 0x3ef00000
+0[0-9a-f]+ <[^>]+> f2860f5e vmov\.f32 q0, #0\.9375 ; 0x3f700000
+0[0-9a-f]+ <[^>]+> f2870f5e vmov\.f32 q0, #1\.875 ; 0x3ff00000
+0[0-9a-f]+ <[^>]+> f2800f5f vmov\.f32 q0, #3\.875 ; 0x40780000
+0[0-9a-f]+ <[^>]+> f2810f5f vmov\.f32 q0, #7\.75 ; 0x40f80000
+0[0-9a-f]+ <[^>]+> f2820f5f vmov\.f32 q0, #15\.5 ; 0x41780000
+0[0-9a-f]+ <[^>]+> f2830f5f vmov\.f32 q0, #31 ; 0x41f80000
+0[0-9a-f]+ <[^>]+> f2840f5f vmov\.f32 q0, #0\.2421875 ; 0x3e780000
+0[0-9a-f]+ <[^>]+> f2850f5f vmov\.f32 q0, #0\.484375 ; 0x3ef80000
+0[0-9a-f]+ <[^>]+> f2860f5f vmov\.f32 q0, #0\.96875 ; 0x3f780000
+0[0-9a-f]+ <[^>]+> f2870f5f vmov\.f32 q0, #1\.9375 ; 0x3ff80000
+0[0-9a-f]+ <[^>]+> f3800650 vmov\.i32 q0, #-2147483648 ; 0x80000000
+0[0-9a-f]+ <[^>]+> f3800f50 vmov\.f32 q0, #-2 ; 0xc0000000
+0[0-9a-f]+ <[^>]+> f3810f50 vmov\.f32 q0, #-4 ; 0xc0800000
+0[0-9a-f]+ <[^>]+> f3820f50 vmov\.f32 q0, #-8 ; 0xc1000000
+0[0-9a-f]+ <[^>]+> f3830f50 vmov\.f32 q0, #-16 ; 0xc1800000
+0[0-9a-f]+ <[^>]+> f3840f50 vmov\.f32 q0, #-0\.125 ; 0xbe000000
+0[0-9a-f]+ <[^>]+> f3850f50 vmov\.f32 q0, #-0\.25 ; 0xbe800000
+0[0-9a-f]+ <[^>]+> f3860f50 vmov\.f32 q0, #-0\.5 ; 0xbf000000
+0[0-9a-f]+ <[^>]+> f3870f50 vmov\.f32 q0, #-1 ; 0xbf800000
+0[0-9a-f]+ <[^>]+> f3800f51 vmov\.f32 q0, #-2\.125 ; 0xc0080000
+0[0-9a-f]+ <[^>]+> f3810f51 vmov\.f32 q0, #-4\.25 ; 0xc0880000
+0[0-9a-f]+ <[^>]+> f3820f51 vmov\.f32 q0, #-8\.5 ; 0xc1080000
+0[0-9a-f]+ <[^>]+> f3830f51 vmov\.f32 q0, #-17 ; 0xc1880000
+0[0-9a-f]+ <[^>]+> f3840f51 vmov\.f32 q0, #-0\.1328125 ; 0xbe080000
+0[0-9a-f]+ <[^>]+> f3850f51 vmov\.f32 q0, #-0\.265625 ; 0xbe880000
+0[0-9a-f]+ <[^>]+> f3860f51 vmov\.f32 q0, #-0\.53125 ; 0xbf080000
+0[0-9a-f]+ <[^>]+> f3870f51 vmov\.f32 q0, #-1\.0625 ; 0xbf880000
+0[0-9a-f]+ <[^>]+> f3800f52 vmov\.f32 q0, #-2\.25 ; 0xc0100000
+0[0-9a-f]+ <[^>]+> f3810f52 vmov\.f32 q0, #-4\.5 ; 0xc0900000
+0[0-9a-f]+ <[^>]+> f3820f52 vmov\.f32 q0, #-9 ; 0xc1100000
+0[0-9a-f]+ <[^>]+> f3830f52 vmov\.f32 q0, #-18 ; 0xc1900000
+0[0-9a-f]+ <[^>]+> f3840f52 vmov\.f32 q0, #-0\.140625 ; 0xbe100000
+0[0-9a-f]+ <[^>]+> f3850f52 vmov\.f32 q0, #-0\.28125 ; 0xbe900000
+0[0-9a-f]+ <[^>]+> f3860f52 vmov\.f32 q0, #-0\.5625 ; 0xbf100000
+0[0-9a-f]+ <[^>]+> f3870f52 vmov\.f32 q0, #-1\.125 ; 0xbf900000
+0[0-9a-f]+ <[^>]+> f3800f53 vmov\.f32 q0, #-2\.375 ; 0xc0180000
+0[0-9a-f]+ <[^>]+> f3810f53 vmov\.f32 q0, #-4\.75 ; 0xc0980000
+0[0-9a-f]+ <[^>]+> f3820f53 vmov\.f32 q0, #-9\.5 ; 0xc1180000
+0[0-9a-f]+ <[^>]+> f3830f53 vmov\.f32 q0, #-19 ; 0xc1980000
+0[0-9a-f]+ <[^>]+> f3840f53 vmov\.f32 q0, #-0\.1484375 ; 0xbe180000
+0[0-9a-f]+ <[^>]+> f3850f53 vmov\.f32 q0, #-0\.296875 ; 0xbe980000
+0[0-9a-f]+ <[^>]+> f3860f53 vmov\.f32 q0, #-0\.59375 ; 0xbf180000
+0[0-9a-f]+ <[^>]+> f3870f53 vmov\.f32 q0, #-1\.1875 ; 0xbf980000
+0[0-9a-f]+ <[^>]+> f3800f54 vmov\.f32 q0, #-2\.5 ; 0xc0200000
+0[0-9a-f]+ <[^>]+> f3810f54 vmov\.f32 q0, #-5 ; 0xc0a00000
+0[0-9a-f]+ <[^>]+> f3820f54 vmov\.f32 q0, #-10 ; 0xc1200000
+0[0-9a-f]+ <[^>]+> f3830f54 vmov\.f32 q0, #-20 ; 0xc1a00000
+0[0-9a-f]+ <[^>]+> f3840f54 vmov\.f32 q0, #-0\.15625 ; 0xbe200000
+0[0-9a-f]+ <[^>]+> f3850f54 vmov\.f32 q0, #-0\.3125 ; 0xbea00000
+0[0-9a-f]+ <[^>]+> f3860f54 vmov\.f32 q0, #-0\.625 ; 0xbf200000
+0[0-9a-f]+ <[^>]+> f3870f54 vmov\.f32 q0, #-1\.25 ; 0xbfa00000
+0[0-9a-f]+ <[^>]+> f3800f55 vmov\.f32 q0, #-2\.625 ; 0xc0280000
+0[0-9a-f]+ <[^>]+> f3810f55 vmov\.f32 q0, #-5\.25 ; 0xc0a80000
+0[0-9a-f]+ <[^>]+> f3820f55 vmov\.f32 q0, #-10\.5 ; 0xc1280000
+0[0-9a-f]+ <[^>]+> f3830f55 vmov\.f32 q0, #-21 ; 0xc1a80000
+0[0-9a-f]+ <[^>]+> f3840f55 vmov\.f32 q0, #-0\.1640625 ; 0xbe280000
+0[0-9a-f]+ <[^>]+> f3850f55 vmov\.f32 q0, #-0\.328125 ; 0xbea80000
+0[0-9a-f]+ <[^>]+> f3860f55 vmov\.f32 q0, #-0\.65625 ; 0xbf280000
+0[0-9a-f]+ <[^>]+> f3870f55 vmov\.f32 q0, #-1\.3125 ; 0xbfa80000
+0[0-9a-f]+ <[^>]+> f3800f56 vmov\.f32 q0, #-2\.75 ; 0xc0300000
+0[0-9a-f]+ <[^>]+> f3810f56 vmov\.f32 q0, #-5\.5 ; 0xc0b00000
+0[0-9a-f]+ <[^>]+> f3820f56 vmov\.f32 q0, #-11 ; 0xc1300000
+0[0-9a-f]+ <[^>]+> f3830f56 vmov\.f32 q0, #-22 ; 0xc1b00000
+0[0-9a-f]+ <[^>]+> f3840f56 vmov\.f32 q0, #-0\.171875 ; 0xbe300000
+0[0-9a-f]+ <[^>]+> f3850f56 vmov\.f32 q0, #-0\.34375 ; 0xbeb00000
+0[0-9a-f]+ <[^>]+> f3860f56 vmov\.f32 q0, #-0\.6875 ; 0xbf300000
+0[0-9a-f]+ <[^>]+> f3870f56 vmov\.f32 q0, #-1\.375 ; 0xbfb00000
+0[0-9a-f]+ <[^>]+> f3800f57 vmov\.f32 q0, #-2\.875 ; 0xc0380000
+0[0-9a-f]+ <[^>]+> f3810f57 vmov\.f32 q0, #-5\.75 ; 0xc0b80000
+0[0-9a-f]+ <[^>]+> f3820f57 vmov\.f32 q0, #-11\.5 ; 0xc1380000
+0[0-9a-f]+ <[^>]+> f3830f57 vmov\.f32 q0, #-23 ; 0xc1b80000
+0[0-9a-f]+ <[^>]+> f3840f57 vmov\.f32 q0, #-0\.1796875 ; 0xbe380000
+0[0-9a-f]+ <[^>]+> f3850f57 vmov\.f32 q0, #-0\.359375 ; 0xbeb80000
+0[0-9a-f]+ <[^>]+> f3860f57 vmov\.f32 q0, #-0\.71875 ; 0xbf380000
+0[0-9a-f]+ <[^>]+> f3870f57 vmov\.f32 q0, #-1\.4375 ; 0xbfb80000
+0[0-9a-f]+ <[^>]+> f3800f58 vmov\.f32 q0, #-3 ; 0xc0400000
+0[0-9a-f]+ <[^>]+> f3810f58 vmov\.f32 q0, #-6 ; 0xc0c00000
+0[0-9a-f]+ <[^>]+> f3820f58 vmov\.f32 q0, #-12 ; 0xc1400000
+0[0-9a-f]+ <[^>]+> f3830f58 vmov\.f32 q0, #-24 ; 0xc1c00000
+0[0-9a-f]+ <[^>]+> f3840f58 vmov\.f32 q0, #-0\.1875 ; 0xbe400000
+0[0-9a-f]+ <[^>]+> f3850f58 vmov\.f32 q0, #-0\.375 ; 0xbec00000
+0[0-9a-f]+ <[^>]+> f3860f58 vmov\.f32 q0, #-0\.75 ; 0xbf400000
+0[0-9a-f]+ <[^>]+> f3870f58 vmov\.f32 q0, #-1\.5 ; 0xbfc00000
+0[0-9a-f]+ <[^>]+> f3800f59 vmov\.f32 q0, #-3\.125 ; 0xc0480000
+0[0-9a-f]+ <[^>]+> f3810f59 vmov\.f32 q0, #-6\.25 ; 0xc0c80000
+0[0-9a-f]+ <[^>]+> f3820f59 vmov\.f32 q0, #-12\.5 ; 0xc1480000
+0[0-9a-f]+ <[^>]+> f3830f59 vmov\.f32 q0, #-25 ; 0xc1c80000
+0[0-9a-f]+ <[^>]+> f3840f59 vmov\.f32 q0, #-0\.1953125 ; 0xbe480000
+0[0-9a-f]+ <[^>]+> f3850f59 vmov\.f32 q0, #-0\.390625 ; 0xbec80000
+0[0-9a-f]+ <[^>]+> f3860f59 vmov\.f32 q0, #-0\.78125 ; 0xbf480000
+0[0-9a-f]+ <[^>]+> f3870f59 vmov\.f32 q0, #-1\.5625 ; 0xbfc80000
+0[0-9a-f]+ <[^>]+> f3800f5a vmov\.f32 q0, #-3\.25 ; 0xc0500000
+0[0-9a-f]+ <[^>]+> f3810f5a vmov\.f32 q0, #-6\.5 ; 0xc0d00000
+0[0-9a-f]+ <[^>]+> f3820f5a vmov\.f32 q0, #-13 ; 0xc1500000
+0[0-9a-f]+ <[^>]+> f3830f5a vmov\.f32 q0, #-26 ; 0xc1d00000
+0[0-9a-f]+ <[^>]+> f3840f5a vmov\.f32 q0, #-0\.203125 ; 0xbe500000
+0[0-9a-f]+ <[^>]+> f3850f5a vmov\.f32 q0, #-0\.40625 ; 0xbed00000
+0[0-9a-f]+ <[^>]+> f3860f5a vmov\.f32 q0, #-0\.8125 ; 0xbf500000
+0[0-9a-f]+ <[^>]+> f3870f5a vmov\.f32 q0, #-1\.625 ; 0xbfd00000
+0[0-9a-f]+ <[^>]+> f3800f5b vmov\.f32 q0, #-3\.375 ; 0xc0580000
+0[0-9a-f]+ <[^>]+> f3810f5b vmov\.f32 q0, #-6\.75 ; 0xc0d80000
+0[0-9a-f]+ <[^>]+> f3820f5b vmov\.f32 q0, #-13\.5 ; 0xc1580000
+0[0-9a-f]+ <[^>]+> f3830f5b vmov\.f32 q0, #-27 ; 0xc1d80000
+0[0-9a-f]+ <[^>]+> f3840f5b vmov\.f32 q0, #-0\.2109375 ; 0xbe580000
+0[0-9a-f]+ <[^>]+> f3850f5b vmov\.f32 q0, #-0\.421875 ; 0xbed80000
+0[0-9a-f]+ <[^>]+> f3860f5b vmov\.f32 q0, #-0\.84375 ; 0xbf580000
+0[0-9a-f]+ <[^>]+> f3870f5b vmov\.f32 q0, #-1\.6875 ; 0xbfd80000
+0[0-9a-f]+ <[^>]+> f3800f5c vmov\.f32 q0, #-3\.5 ; 0xc0600000
+0[0-9a-f]+ <[^>]+> f3810f5c vmov\.f32 q0, #-7 ; 0xc0e00000
+0[0-9a-f]+ <[^>]+> f3820f5c vmov\.f32 q0, #-14 ; 0xc1600000
+0[0-9a-f]+ <[^>]+> f3830f5c vmov\.f32 q0, #-28 ; 0xc1e00000
+0[0-9a-f]+ <[^>]+> f3840f5c vmov\.f32 q0, #-0\.21875 ; 0xbe600000
+0[0-9a-f]+ <[^>]+> f3850f5c vmov\.f32 q0, #-0\.4375 ; 0xbee00000
+0[0-9a-f]+ <[^>]+> f3860f5c vmov\.f32 q0, #-0\.875 ; 0xbf600000
+0[0-9a-f]+ <[^>]+> f3870f5c vmov\.f32 q0, #-1\.75 ; 0xbfe00000
+0[0-9a-f]+ <[^>]+> f3800f5d vmov\.f32 q0, #-3\.625 ; 0xc0680000
+0[0-9a-f]+ <[^>]+> f3810f5d vmov\.f32 q0, #-7\.25 ; 0xc0e80000
+0[0-9a-f]+ <[^>]+> f3820f5d vmov\.f32 q0, #-14\.5 ; 0xc1680000
+0[0-9a-f]+ <[^>]+> f3830f5d vmov\.f32 q0, #-29 ; 0xc1e80000
+0[0-9a-f]+ <[^>]+> f3840f5d vmov\.f32 q0, #-0\.2265625 ; 0xbe680000
+0[0-9a-f]+ <[^>]+> f3850f5d vmov\.f32 q0, #-0\.453125 ; 0xbee80000
+0[0-9a-f]+ <[^>]+> f3860f5d vmov\.f32 q0, #-0\.90625 ; 0xbf680000
+0[0-9a-f]+ <[^>]+> f3870f5d vmov\.f32 q0, #-1\.8125 ; 0xbfe80000
+0[0-9a-f]+ <[^>]+> f3800f5e vmov\.f32 q0, #-3\.75 ; 0xc0700000
+0[0-9a-f]+ <[^>]+> f3810f5e vmov\.f32 q0, #-7\.5 ; 0xc0f00000
+0[0-9a-f]+ <[^>]+> f3820f5e vmov\.f32 q0, #-15 ; 0xc1700000
+0[0-9a-f]+ <[^>]+> f3830f5e vmov\.f32 q0, #-30 ; 0xc1f00000
+0[0-9a-f]+ <[^>]+> f3840f5e vmov\.f32 q0, #-0\.234375 ; 0xbe700000
+0[0-9a-f]+ <[^>]+> f3850f5e vmov\.f32 q0, #-0\.46875 ; 0xbef00000
+0[0-9a-f]+ <[^>]+> f3860f5e vmov\.f32 q0, #-0\.9375 ; 0xbf700000
+0[0-9a-f]+ <[^>]+> f3870f5e vmov\.f32 q0, #-1\.875 ; 0xbff00000
+0[0-9a-f]+ <[^>]+> f3800f5f vmov\.f32 q0, #-3\.875 ; 0xc0780000
+0[0-9a-f]+ <[^>]+> f3810f5f vmov\.f32 q0, #-7\.75 ; 0xc0f80000
+0[0-9a-f]+ <[^>]+> f3820f5f vmov\.f32 q0, #-15\.5 ; 0xc1780000
+0[0-9a-f]+ <[^>]+> f3830f5f vmov\.f32 q0, #-31 ; 0xc1f80000
+0[0-9a-f]+ <[^>]+> f3840f5f vmov\.f32 q0, #-0\.2421875 ; 0xbe780000
+0[0-9a-f]+ <[^>]+> f3850f5f vmov\.f32 q0, #-0\.484375 ; 0xbef80000
+0[0-9a-f]+ <[^>]+> f3860f5f vmov\.f32 q0, #-0\.96875 ; 0xbf780000
+0[0-9a-f]+ <[^>]+> f3870f5f vmov\.f32 q0, #-1\.9375 ; 0xbff80000
diff --git a/gas/testsuite/gas/arm/neon-const.s b/gas/testsuite/gas/arm/neon-const.s
new file mode 100644
index 000000000000..a6fb55075a93
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-const.s
@@ -0,0 +1,297 @@
+@ test floating-point constant parsing.
+
+ .arm
+ .text
+ .syntax unified
+
+ vmov.f32 q0, 0.0
+
+ vmov.f32 q0, 2.0
+ vmov.f32 q0, 4.0
+ vmov.f32 q0, 8.0
+ vmov.f32 q0, 16.0
+ vmov.f32 q0, 0.125
+ vmov.f32 q0, 0.25
+ vmov.f32 q0, 0.5
+ vmov.f32 q0, 1.0
+
+ vmov.f32 q0, 2.125
+ vmov.f32 q0, 4.25
+ vmov.f32 q0, 8.5
+ vmov.f32 q0, 17.0
+ vmov.f32 q0, 0.1328125
+ vmov.f32 q0, 0.265625
+ vmov.f32 q0, 0.53125
+ vmov.f32 q0, 1.0625
+
+ vmov.f32 q0, 2.25
+ vmov.f32 q0, 4.5
+ vmov.f32 q0, 9.0
+ vmov.f32 q0, 18.0
+ vmov.f32 q0, 0.140625
+ vmov.f32 q0, 0.28125
+ vmov.f32 q0, 0.5625
+ vmov.f32 q0, 1.125
+
+ vmov.f32 q0, 2.375
+ vmov.f32 q0, 4.75
+ vmov.f32 q0, 9.5
+ vmov.f32 q0, 19.0
+ vmov.f32 q0, 0.1484375
+ vmov.f32 q0, 0.296875
+ vmov.f32 q0, 0.59375
+ vmov.f32 q0, 1.1875
+
+ vmov.f32 q0, 2.5
+ vmov.f32 q0, 5.0
+ vmov.f32 q0, 10.0
+ vmov.f32 q0, 20.0
+ vmov.f32 q0, 0.15625
+ vmov.f32 q0, 0.3125
+ vmov.f32 q0, 0.625
+ vmov.f32 q0, 1.25
+
+ vmov.f32 q0, 2.625
+ vmov.f32 q0, 5.25
+ vmov.f32 q0, 10.5
+ vmov.f32 q0, 21.0
+ vmov.f32 q0, 0.1640625
+ vmov.f32 q0, 0.328125
+ vmov.f32 q0, 0.65625
+ vmov.f32 q0, 1.3125
+
+ vmov.f32 q0, 2.75
+ vmov.f32 q0, 5.5
+ vmov.f32 q0, 11.0
+ vmov.f32 q0, 22.0
+ vmov.f32 q0, 0.171875
+ vmov.f32 q0, 0.34375
+ vmov.f32 q0, 0.6875
+ vmov.f32 q0, 1.375
+
+ vmov.f32 q0, 2.875
+ vmov.f32 q0, 5.75
+ vmov.f32 q0, 11.5
+ vmov.f32 q0, 23.0
+ vmov.f32 q0, 0.1796875
+ vmov.f32 q0, 0.359375
+ vmov.f32 q0, 0.71875
+ vmov.f32 q0, 1.4375
+
+ vmov.f32 q0, 3.0
+ vmov.f32 q0, 6.0
+ vmov.f32 q0, 12.0
+ vmov.f32 q0, 24.0
+ vmov.f32 q0, 0.1875
+ vmov.f32 q0, 0.375
+ vmov.f32 q0, 0.75
+ vmov.f32 q0, 1.5
+
+ vmov.f32 q0, 3.125
+ vmov.f32 q0, 6.25
+ vmov.f32 q0, 12.5
+ vmov.f32 q0, 25.0
+ vmov.f32 q0, 0.1953125
+ vmov.f32 q0, 0.390625
+ vmov.f32 q0, 0.78125
+ vmov.f32 q0, 1.5625
+
+ vmov.f32 q0, 3.25
+ vmov.f32 q0, 6.5
+ vmov.f32 q0, 13.0
+ vmov.f32 q0, 26.0
+ vmov.f32 q0, 0.203125
+ vmov.f32 q0, 0.40625
+ vmov.f32 q0, 0.8125
+ vmov.f32 q0, 1.625
+
+ vmov.f32 q0, 3.375
+ vmov.f32 q0, 6.75
+ vmov.f32 q0, 13.5
+ vmov.f32 q0, 27.0
+ vmov.f32 q0, 0.2109375
+ vmov.f32 q0, 0.421875
+ vmov.f32 q0, 0.84375
+ vmov.f32 q0, 1.6875
+
+ vmov.f32 q0, 3.5
+ vmov.f32 q0, 7.0
+ vmov.f32 q0, 14.0
+ vmov.f32 q0, 28.0
+ vmov.f32 q0, 0.21875
+ vmov.f32 q0, 0.4375
+ vmov.f32 q0, 0.875
+ vmov.f32 q0, 1.75
+
+ vmov.f32 q0, 3.625
+ vmov.f32 q0, 7.25
+ vmov.f32 q0, 14.5
+ vmov.f32 q0, 29.0
+ vmov.f32 q0, 0.2265625
+ vmov.f32 q0, 0.453125
+ vmov.f32 q0, 0.90625
+ vmov.f32 q0, 1.8125
+
+ vmov.f32 q0, 3.75
+ vmov.f32 q0, 7.5
+ vmov.f32 q0, 15.0
+ vmov.f32 q0, 30.0
+ vmov.f32 q0, 0.234375
+ vmov.f32 q0, 0.46875
+ vmov.f32 q0, 0.9375
+ vmov.f32 q0, 1.875
+
+ vmov.f32 q0, 3.875
+ vmov.f32 q0, 7.75
+ vmov.f32 q0, 15.5
+ vmov.f32 q0, 31.0
+ vmov.f32 q0, 0.2421875
+ vmov.f32 q0, 0.484375
+ vmov.f32 q0, 0.96875
+ vmov.f32 q0, 1.9375
+
+ vmov.f32 q0, -0.0
+
+ vmov.f32 q0, -2.0
+ vmov.f32 q0, -4.0
+ vmov.f32 q0, -8.0
+ vmov.f32 q0, -16.0
+ vmov.f32 q0, -0.125
+ vmov.f32 q0, -0.25
+ vmov.f32 q0, -0.5
+ vmov.f32 q0, -1.0
+
+ vmov.f32 q0, -2.125
+ vmov.f32 q0, -4.25
+ vmov.f32 q0, -8.5
+ vmov.f32 q0, -17.0
+ vmov.f32 q0, -0.1328125
+ vmov.f32 q0, -0.265625
+ vmov.f32 q0, -0.53125
+ vmov.f32 q0, -1.0625
+
+ vmov.f32 q0, -2.25
+ vmov.f32 q0, -4.5
+ vmov.f32 q0, -9.0
+ vmov.f32 q0, -18.0
+ vmov.f32 q0, -0.140625
+ vmov.f32 q0, -0.28125
+ vmov.f32 q0, -0.5625
+ vmov.f32 q0, -1.125
+
+ vmov.f32 q0, -2.375
+ vmov.f32 q0, -4.75
+ vmov.f32 q0, -9.5
+ vmov.f32 q0, -19.0
+ vmov.f32 q0, -0.1484375
+ vmov.f32 q0, -0.296875
+ vmov.f32 q0, -0.59375
+ vmov.f32 q0, -1.1875
+
+ vmov.f32 q0, -2.5
+ vmov.f32 q0, -5.0
+ vmov.f32 q0, -10.0
+ vmov.f32 q0, -20.0
+ vmov.f32 q0, -0.15625
+ vmov.f32 q0, -0.3125
+ vmov.f32 q0, -0.625
+ vmov.f32 q0, -1.25
+
+ vmov.f32 q0, -2.625
+ vmov.f32 q0, -5.25
+ vmov.f32 q0, -10.5
+ vmov.f32 q0, -21.0
+ vmov.f32 q0, -0.1640625
+ vmov.f32 q0, -0.328125
+ vmov.f32 q0, -0.65625
+ vmov.f32 q0, -1.3125
+
+ vmov.f32 q0, -2.75
+ vmov.f32 q0, -5.5
+ vmov.f32 q0, -11.0
+ vmov.f32 q0, -22.0
+ vmov.f32 q0, -0.171875
+ vmov.f32 q0, -0.34375
+ vmov.f32 q0, -0.6875
+ vmov.f32 q0, -1.375
+
+ vmov.f32 q0, -2.875
+ vmov.f32 q0, -5.75
+ vmov.f32 q0, -11.5
+ vmov.f32 q0, -23.0
+ vmov.f32 q0, -0.1796875
+ vmov.f32 q0, -0.359375
+ vmov.f32 q0, -0.71875
+ vmov.f32 q0, -1.4375
+
+ vmov.f32 q0, -3.0
+ vmov.f32 q0, -6.0
+ vmov.f32 q0, -12.0
+ vmov.f32 q0, -24.0
+ vmov.f32 q0, -0.1875
+ vmov.f32 q0, -0.375
+ vmov.f32 q0, -0.75
+ vmov.f32 q0, -1.5
+
+ vmov.f32 q0, -3.125
+ vmov.f32 q0, -6.25
+ vmov.f32 q0, -12.5
+ vmov.f32 q0, -25.0
+ vmov.f32 q0, -0.1953125
+ vmov.f32 q0, -0.390625
+ vmov.f32 q0, -0.78125
+ vmov.f32 q0, -1.5625
+
+ vmov.f32 q0, -3.25
+ vmov.f32 q0, -6.5
+ vmov.f32 q0, -13.0
+ vmov.f32 q0, -26.0
+ vmov.f32 q0, -0.203125
+ vmov.f32 q0, -0.40625
+ vmov.f32 q0, -0.8125
+ vmov.f32 q0, -1.625
+
+ vmov.f32 q0, -3.375
+ vmov.f32 q0, -6.75
+ vmov.f32 q0, -13.5
+ vmov.f32 q0, -27.0
+ vmov.f32 q0, -0.2109375
+ vmov.f32 q0, -0.421875
+ vmov.f32 q0, -0.84375
+ vmov.f32 q0, -1.6875
+
+ vmov.f32 q0, -3.5
+ vmov.f32 q0, -7.0
+ vmov.f32 q0, -14.0
+ vmov.f32 q0, -28.0
+ vmov.f32 q0, -0.21875
+ vmov.f32 q0, -0.4375
+ vmov.f32 q0, -0.875
+ vmov.f32 q0, -1.75
+
+ vmov.f32 q0, -3.625
+ vmov.f32 q0, -7.25
+ vmov.f32 q0, -14.5
+ vmov.f32 q0, -29.0
+ vmov.f32 q0, -0.2265625
+ vmov.f32 q0, -0.453125
+ vmov.f32 q0, -0.90625
+ vmov.f32 q0, -1.8125
+
+ vmov.f32 q0, -3.75
+ vmov.f32 q0, -7.5
+ vmov.f32 q0, -15.0
+ vmov.f32 q0, -30.0
+ vmov.f32 q0, -0.234375
+ vmov.f32 q0, -0.46875
+ vmov.f32 q0, -0.9375
+ vmov.f32 q0, -1.875
+
+ vmov.f32 q0, -3.875
+ vmov.f32 q0, -7.75
+ vmov.f32 q0, -15.5
+ vmov.f32 q0, -31.0
+ vmov.f32 q0, -0.2421875
+ vmov.f32 q0, -0.484375
+ vmov.f32 q0, -0.96875
+ vmov.f32 q0, -1.9375
diff --git a/gas/testsuite/gas/arm/neon-cov.d b/gas/testsuite/gas/arm/neon-cov.d
new file mode 100644
index 000000000000..e3f02f811f14
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-cov.d
@@ -0,0 +1,1522 @@
+# name: Neon instruction coverage
+# as: -mfpu=neon
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section \.text:
+0[0-9a-f]+ <[^>]+> f2000750 vaba\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000750 vaba\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000710 vaba\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100750 vaba\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100750 vaba\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100710 vaba\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200750 vaba\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200750 vaba\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200710 vaba\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000750 vaba\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000750 vaba\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000710 vaba\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100750 vaba\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100750 vaba\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100710 vaba\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200750 vaba\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200750 vaba\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200710 vaba\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000040 vhadd\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000040 vhadd\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000000 vhadd\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100040 vhadd\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100040 vhadd\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100000 vhadd\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200040 vhadd\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200040 vhadd\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200000 vhadd\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000040 vhadd\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000040 vhadd\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000000 vhadd\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100040 vhadd\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100040 vhadd\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100000 vhadd\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200040 vhadd\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200040 vhadd\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200000 vhadd\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000140 vrhadd\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000140 vrhadd\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000100 vrhadd\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100140 vrhadd\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100140 vrhadd\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100100 vrhadd\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200140 vrhadd\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200140 vrhadd\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200100 vrhadd\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000140 vrhadd\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000140 vrhadd\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000100 vrhadd\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100140 vrhadd\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100140 vrhadd\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100100 vrhadd\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200140 vrhadd\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200140 vrhadd\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200100 vrhadd\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000240 vhsub\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000240 vhsub\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000200 vhsub\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100240 vhsub\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100240 vhsub\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100200 vhsub\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200240 vhsub\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200240 vhsub\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200200 vhsub\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000240 vhsub\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000240 vhsub\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000200 vhsub\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100240 vhsub\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100240 vhsub\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100200 vhsub\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200240 vhsub\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200240 vhsub\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200200 vhsub\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000050 vqadd\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000050 vqadd\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000010 vqadd\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100050 vqadd\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100050 vqadd\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100010 vqadd\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200050 vqadd\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200050 vqadd\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200010 vqadd\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2300050 vqadd\.s64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300050 vqadd\.s64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300010 vqadd\.s64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000050 vqadd\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000050 vqadd\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000010 vqadd\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100050 vqadd\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100050 vqadd\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100010 vqadd\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200050 vqadd\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200050 vqadd\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200010 vqadd\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3300050 vqadd\.u64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300050 vqadd\.u64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300010 vqadd\.u64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000250 vqsub\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000250 vqsub\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000210 vqsub\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100250 vqsub\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100250 vqsub\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100210 vqsub\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200250 vqsub\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200250 vqsub\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200210 vqsub\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2300250 vqsub\.s64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300250 vqsub\.s64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300210 vqsub\.s64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000250 vqsub\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000250 vqsub\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000210 vqsub\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100250 vqsub\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100250 vqsub\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100210 vqsub\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200250 vqsub\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200250 vqsub\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200210 vqsub\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3300250 vqsub\.u64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300250 vqsub\.u64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300210 vqsub\.u64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000540 vrshl\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000540 vrshl\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000500 vrshl\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100540 vrshl\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100540 vrshl\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100500 vrshl\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200540 vrshl\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200540 vrshl\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200500 vrshl\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2300540 vrshl\.s64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300540 vrshl\.s64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300500 vrshl\.s64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000540 vrshl\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000540 vrshl\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000500 vrshl\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100540 vrshl\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100540 vrshl\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100500 vrshl\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200540 vrshl\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200540 vrshl\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200500 vrshl\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3300540 vrshl\.u64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300540 vrshl\.u64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300500 vrshl\.u64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000550 vqrshl\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000550 vqrshl\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000510 vqrshl\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100550 vqrshl\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100550 vqrshl\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100510 vqrshl\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200550 vqrshl\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200550 vqrshl\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200510 vqrshl\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2300550 vqrshl\.s64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300550 vqrshl\.s64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300510 vqrshl\.s64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000550 vqrshl\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000550 vqrshl\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000510 vqrshl\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100550 vqrshl\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100550 vqrshl\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100510 vqrshl\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200550 vqrshl\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200550 vqrshl\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200510 vqrshl\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3300550 vqrshl\.u64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300550 vqrshl\.u64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300510 vqrshl\.u64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000440 vshl\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000440 vshl\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000400 vshl\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100440 vshl\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100440 vshl\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100400 vshl\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200440 vshl\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200440 vshl\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200400 vshl\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2300440 vshl\.s64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300440 vshl\.s64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300400 vshl\.s64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000440 vshl\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000440 vshl\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000400 vshl\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100440 vshl\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100440 vshl\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100400 vshl\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200440 vshl\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200440 vshl\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200400 vshl\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3300440 vshl\.u64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300440 vshl\.u64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300400 vshl\.u64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000450 vqshl\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000450 vqshl\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000410 vqshl\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100450 vqshl\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100450 vqshl\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100410 vqshl\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200450 vqshl\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200450 vqshl\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200410 vqshl\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2300450 vqshl\.s64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300450 vqshl\.s64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300410 vqshl\.s64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000450 vqshl\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000450 vqshl\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000410 vqshl\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100450 vqshl\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100450 vqshl\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100410 vqshl\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200450 vqshl\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200450 vqshl\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200410 vqshl\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3300450 vqshl\.u64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300450 vqshl\.u64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300410 vqshl\.u64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2880550 vshl\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2880550 vshl\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2880510 vshl\.s8 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f2900550 vshl\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2900550 vshl\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2900510 vshl\.s16 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f2a00550 vshl\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2a00550 vshl\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2a00510 vshl\.s32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f2a00550 vshl\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2a00550 vshl\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2a00510 vshl\.s32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f2a00550 vshl\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2a00550 vshl\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2a00510 vshl\.s32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f28005d0 vshl\.s64 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f28005d0 vshl\.s64 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2800590 vshl\.s64 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f2880750 vqshl\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2880750 vqshl\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2880710 vqshl\.s8 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f2900750 vqshl\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2900750 vqshl\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2900710 vqshl\.s16 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f2a00750 vqshl\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2a00750 vqshl\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2a00710 vqshl\.s32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f28007d0 vqshl\.s64 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f28007d0 vqshl\.s64 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2800790 vqshl\.s64 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3880750 vqshl\.u8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3880750 vqshl\.u8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3880710 vqshl\.u8 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3900750 vqshl\.u16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3900750 vqshl\.u16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3900710 vqshl\.u16 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3a00750 vqshl\.u32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3a00750 vqshl\.u32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3a00710 vqshl\.u32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f38007d0 vqshl\.u64 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f38007d0 vqshl\.u64 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3800790 vqshl\.u64 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f2000150 vand q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000150 vand q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000110 vand d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100150 vbic q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100150 vbic q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100110 vbic d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200150 vorr q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200150 vorr q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200110 vorr d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2300150 vorn q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300150 vorn q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300110 vorn d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000150 veor q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000150 veor q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000110 veor d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3820175 vbic\.i32 q0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820175 vbic\.i32 q0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820135 vbic\.i32 d0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820375 vbic\.i32 q0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820375 vbic\.i32 q0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820335 vbic\.i32 d0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820575 vbic\.i32 q0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820575 vbic\.i32 q0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820535 vbic\.i32 d0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820775 vbic\.i32 q0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820775 vbic\.i32 q0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820735 vbic\.i32 d0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820975 vbic\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820975 vbic\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820935 vbic\.i16 d0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820b75 vbic\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b75 vbic\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b35 vbic\.i16 d0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f387017f vbic\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387017f vbic\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387013f vbic\.i32 d0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387017f vbic\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387017f vbic\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387013f vbic\.i32 d0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387017f vbic\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387017f vbic\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387013f vbic\.i32 d0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387037f vbic\.i32 q0, #65280 ; 0x0000ff00
+0[0-9a-f]+ <[^>]+> f387037f vbic\.i32 q0, #65280 ; 0x0000ff00
+0[0-9a-f]+ <[^>]+> f387033f vbic\.i32 d0, #65280 ; 0x0000ff00
+0[0-9a-f]+ <[^>]+> f387057f vbic\.i32 q0, #16711680 ; 0x00ff0000
+0[0-9a-f]+ <[^>]+> f387057f vbic\.i32 q0, #16711680 ; 0x00ff0000
+0[0-9a-f]+ <[^>]+> f387053f vbic\.i32 d0, #16711680 ; 0x00ff0000
+0[0-9a-f]+ <[^>]+> f387077f vbic\.i32 q0, #-16777216 ; 0xff000000
+0[0-9a-f]+ <[^>]+> f387077f vbic\.i32 q0, #-16777216 ; 0xff000000
+0[0-9a-f]+ <[^>]+> f387073f vbic\.i32 d0, #-16777216 ; 0xff000000
+0[0-9a-f]+ <[^>]+> f3820975 vbic\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820975 vbic\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820935 vbic\.i16 d0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820b75 vbic\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b75 vbic\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b35 vbic\.i16 d0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f387097f vbic\.i16 q0, #255 ; 0x00ff
+0[0-9a-f]+ <[^>]+> f387097f vbic\.i16 q0, #255 ; 0x00ff
+0[0-9a-f]+ <[^>]+> f387093f vbic\.i16 d0, #255 ; 0x00ff
+0[0-9a-f]+ <[^>]+> f3870b7f vbic\.i16 q0, #65280 ; 0xff00
+0[0-9a-f]+ <[^>]+> f3870b7f vbic\.i16 q0, #65280 ; 0xff00
+0[0-9a-f]+ <[^>]+> f3870b3f vbic\.i16 d0, #65280 ; 0xff00
+0[0-9a-f]+ <[^>]+> f2800970 vbic\.i16 q0, #0 ; 0x0000
+0[0-9a-f]+ <[^>]+> f2800970 vbic\.i16 q0, #0 ; 0x0000
+0[0-9a-f]+ <[^>]+> f2800930 vbic\.i16 d0, #0 ; 0x0000
+0[0-9a-f]+ <[^>]+> f3820155 vorr\.i32 q0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820155 vorr\.i32 q0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820115 vorr\.i32 d0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820355 vorr\.i32 q0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820355 vorr\.i32 q0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820315 vorr\.i32 d0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820555 vorr\.i32 q0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820555 vorr\.i32 q0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820515 vorr\.i32 d0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820755 vorr\.i32 q0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820755 vorr\.i32 q0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820715 vorr\.i32 d0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820955 vorr\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820955 vorr\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820915 vorr\.i16 d0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820b55 vorr\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b55 vorr\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b15 vorr\.i16 d0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f387015f vorr\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387015f vorr\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387011f vorr\.i32 d0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387015f vorr\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387015f vorr\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387011f vorr\.i32 d0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387015f vorr\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387015f vorr\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387011f vorr\.i32 d0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387035f vorr\.i32 q0, #65280 ; 0x0000ff00
+0[0-9a-f]+ <[^>]+> f387035f vorr\.i32 q0, #65280 ; 0x0000ff00
+0[0-9a-f]+ <[^>]+> f387031f vorr\.i32 d0, #65280 ; 0x0000ff00
+0[0-9a-f]+ <[^>]+> f387055f vorr\.i32 q0, #16711680 ; 0x00ff0000
+0[0-9a-f]+ <[^>]+> f387055f vorr\.i32 q0, #16711680 ; 0x00ff0000
+0[0-9a-f]+ <[^>]+> f387051f vorr\.i32 d0, #16711680 ; 0x00ff0000
+0[0-9a-f]+ <[^>]+> f387075f vorr\.i32 q0, #-16777216 ; 0xff000000
+0[0-9a-f]+ <[^>]+> f387075f vorr\.i32 q0, #-16777216 ; 0xff000000
+0[0-9a-f]+ <[^>]+> f387071f vorr\.i32 d0, #-16777216 ; 0xff000000
+0[0-9a-f]+ <[^>]+> f3820955 vorr\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820955 vorr\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820915 vorr\.i16 d0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820b55 vorr\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b55 vorr\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b15 vorr\.i16 d0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f387095f vorr\.i16 q0, #255 ; 0x00ff
+0[0-9a-f]+ <[^>]+> f387095f vorr\.i16 q0, #255 ; 0x00ff
+0[0-9a-f]+ <[^>]+> f387091f vorr\.i16 d0, #255 ; 0x00ff
+0[0-9a-f]+ <[^>]+> f3870b5f vorr\.i16 q0, #65280 ; 0xff00
+0[0-9a-f]+ <[^>]+> f3870b5f vorr\.i16 q0, #65280 ; 0xff00
+0[0-9a-f]+ <[^>]+> f3870b1f vorr\.i16 d0, #65280 ; 0xff00
+0[0-9a-f]+ <[^>]+> f2800950 vorr\.i16 q0, #0 ; 0x0000
+0[0-9a-f]+ <[^>]+> f2800950 vorr\.i16 q0, #0 ; 0x0000
+0[0-9a-f]+ <[^>]+> f2800910 vorr\.i16 d0, #0 ; 0x0000
+0[0-9a-f]+ <[^>]+> f3820175 vbic\.i32 q0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820175 vbic\.i32 q0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820135 vbic\.i32 d0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820375 vbic\.i32 q0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820375 vbic\.i32 q0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820335 vbic\.i32 d0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820575 vbic\.i32 q0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820575 vbic\.i32 q0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820535 vbic\.i32 d0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820775 vbic\.i32 q0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820775 vbic\.i32 q0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820735 vbic\.i32 d0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820975 vbic\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820975 vbic\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820935 vbic\.i16 d0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820b75 vbic\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b75 vbic\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b35 vbic\.i16 d0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f387017f vbic\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387017f vbic\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387013f vbic\.i32 d0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387017f vbic\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387017f vbic\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387013f vbic\.i32 d0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387017f vbic\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387017f vbic\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387013f vbic\.i32 d0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387037f vbic\.i32 q0, #65280 ; 0x0000ff00
+0[0-9a-f]+ <[^>]+> f387037f vbic\.i32 q0, #65280 ; 0x0000ff00
+0[0-9a-f]+ <[^>]+> f387033f vbic\.i32 d0, #65280 ; 0x0000ff00
+0[0-9a-f]+ <[^>]+> f387057f vbic\.i32 q0, #16711680 ; 0x00ff0000
+0[0-9a-f]+ <[^>]+> f387057f vbic\.i32 q0, #16711680 ; 0x00ff0000
+0[0-9a-f]+ <[^>]+> f387053f vbic\.i32 d0, #16711680 ; 0x00ff0000
+0[0-9a-f]+ <[^>]+> f387077f vbic\.i32 q0, #-16777216 ; 0xff000000
+0[0-9a-f]+ <[^>]+> f387077f vbic\.i32 q0, #-16777216 ; 0xff000000
+0[0-9a-f]+ <[^>]+> f387073f vbic\.i32 d0, #-16777216 ; 0xff000000
+0[0-9a-f]+ <[^>]+> f3820975 vbic\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820975 vbic\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820935 vbic\.i16 d0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820b75 vbic\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b75 vbic\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b35 vbic\.i16 d0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f387097f vbic\.i16 q0, #255 ; 0x00ff
+0[0-9a-f]+ <[^>]+> f387097f vbic\.i16 q0, #255 ; 0x00ff
+0[0-9a-f]+ <[^>]+> f387093f vbic\.i16 d0, #255 ; 0x00ff
+0[0-9a-f]+ <[^>]+> f3870b7f vbic\.i16 q0, #65280 ; 0xff00
+0[0-9a-f]+ <[^>]+> f3870b7f vbic\.i16 q0, #65280 ; 0xff00
+0[0-9a-f]+ <[^>]+> f3870b3f vbic\.i16 d0, #65280 ; 0xff00
+0[0-9a-f]+ <[^>]+> f2800970 vbic\.i16 q0, #0 ; 0x0000
+0[0-9a-f]+ <[^>]+> f2800970 vbic\.i16 q0, #0 ; 0x0000
+0[0-9a-f]+ <[^>]+> f2800930 vbic\.i16 d0, #0 ; 0x0000
+0[0-9a-f]+ <[^>]+> f3820155 vorr\.i32 q0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820155 vorr\.i32 q0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820115 vorr\.i32 d0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820355 vorr\.i32 q0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820355 vorr\.i32 q0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820315 vorr\.i32 d0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820555 vorr\.i32 q0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820555 vorr\.i32 q0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820515 vorr\.i32 d0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820755 vorr\.i32 q0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820755 vorr\.i32 q0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820715 vorr\.i32 d0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820955 vorr\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820955 vorr\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820915 vorr\.i16 d0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820b55 vorr\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b55 vorr\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b15 vorr\.i16 d0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f387015f vorr\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387015f vorr\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387011f vorr\.i32 d0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387015f vorr\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387015f vorr\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387011f vorr\.i32 d0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387015f vorr\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387015f vorr\.i32 q0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387011f vorr\.i32 d0, #255 ; 0x000000ff
+0[0-9a-f]+ <[^>]+> f387035f vorr\.i32 q0, #65280 ; 0x0000ff00
+0[0-9a-f]+ <[^>]+> f387035f vorr\.i32 q0, #65280 ; 0x0000ff00
+0[0-9a-f]+ <[^>]+> f387031f vorr\.i32 d0, #65280 ; 0x0000ff00
+0[0-9a-f]+ <[^>]+> f387055f vorr\.i32 q0, #16711680 ; 0x00ff0000
+0[0-9a-f]+ <[^>]+> f387055f vorr\.i32 q0, #16711680 ; 0x00ff0000
+0[0-9a-f]+ <[^>]+> f387051f vorr\.i32 d0, #16711680 ; 0x00ff0000
+0[0-9a-f]+ <[^>]+> f387075f vorr\.i32 q0, #-16777216 ; 0xff000000
+0[0-9a-f]+ <[^>]+> f387075f vorr\.i32 q0, #-16777216 ; 0xff000000
+0[0-9a-f]+ <[^>]+> f387071f vorr\.i32 d0, #-16777216 ; 0xff000000
+0[0-9a-f]+ <[^>]+> f3820955 vorr\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820955 vorr\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820915 vorr\.i16 d0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820b55 vorr\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b55 vorr\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820b15 vorr\.i16 d0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f387095f vorr\.i16 q0, #255 ; 0x00ff
+0[0-9a-f]+ <[^>]+> f387095f vorr\.i16 q0, #255 ; 0x00ff
+0[0-9a-f]+ <[^>]+> f387091f vorr\.i16 d0, #255 ; 0x00ff
+0[0-9a-f]+ <[^>]+> f3870b5f vorr\.i16 q0, #65280 ; 0xff00
+0[0-9a-f]+ <[^>]+> f3870b5f vorr\.i16 q0, #65280 ; 0xff00
+0[0-9a-f]+ <[^>]+> f3870b1f vorr\.i16 d0, #65280 ; 0xff00
+0[0-9a-f]+ <[^>]+> f2800950 vorr\.i16 q0, #0 ; 0x0000
+0[0-9a-f]+ <[^>]+> f2800950 vorr\.i16 q0, #0 ; 0x0000
+0[0-9a-f]+ <[^>]+> f2800910 vorr\.i16 d0, #0 ; 0x0000
+0[0-9a-f]+ <[^>]+> f3100150 vbsl q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100150 vbsl q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100110 vbsl d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200150 vbit q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200150 vbit q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200110 vbit d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3300150 vbif q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300150 vbif q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300110 vbif d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000740 vabd\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000740 vabd\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000700 vabd\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100740 vabd\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100740 vabd\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100700 vabd\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200740 vabd\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200740 vabd\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200700 vabd\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000740 vabd\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000740 vabd\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000700 vabd\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100740 vabd\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100740 vabd\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100700 vabd\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200740 vabd\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200740 vabd\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200700 vabd\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200d40 vabd\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200d40 vabd\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200d00 vabd\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000640 vmax\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000640 vmax\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000600 vmax\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100640 vmax\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100640 vmax\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100600 vmax\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200640 vmax\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200640 vmax\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200600 vmax\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000640 vmax\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000640 vmax\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000600 vmax\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100640 vmax\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100640 vmax\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100600 vmax\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200640 vmax\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200640 vmax\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200600 vmax\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000f40 vmax\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000f40 vmax\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000f00 vmax\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000650 vmin\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000650 vmin\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000610 vmin\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100650 vmin\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100650 vmin\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100610 vmin\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200650 vmin\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200650 vmin\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200610 vmin\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000650 vmin\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000650 vmin\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000610 vmin\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100650 vmin\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100650 vmin\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100610 vmin\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200650 vmin\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200650 vmin\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200610 vmin\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200f40 vmin\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200f40 vmin\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200f00 vmin\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000350 vcge\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000350 vcge\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000310 vcge\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100350 vcge\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100350 vcge\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100310 vcge\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200350 vcge\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200350 vcge\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200310 vcge\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000350 vcge\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000350 vcge\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000310 vcge\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100350 vcge\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100350 vcge\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100310 vcge\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200350 vcge\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200350 vcge\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200310 vcge\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000e40 vcge\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000e40 vcge\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000e00 vcge\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000340 vcgt\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000340 vcgt\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000300 vcgt\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100340 vcgt\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100340 vcgt\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100300 vcgt\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200340 vcgt\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200340 vcgt\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200300 vcgt\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000340 vcgt\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000340 vcgt\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000300 vcgt\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100340 vcgt\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100340 vcgt\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100300 vcgt\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200340 vcgt\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200340 vcgt\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200300 vcgt\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200e40 vcgt\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200e40 vcgt\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200e00 vcgt\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000350 vcge\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000350 vcge\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000310 vcge\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100350 vcge\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100350 vcge\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100310 vcge\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200350 vcge\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200350 vcge\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200310 vcge\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000350 vcge\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000350 vcge\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000310 vcge\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100350 vcge\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100350 vcge\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100310 vcge\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200350 vcge\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200350 vcge\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200310 vcge\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000e40 vcge\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000e40 vcge\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000e00 vcge\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000340 vcgt\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000340 vcgt\.s8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000300 vcgt\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100340 vcgt\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100340 vcgt\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100300 vcgt\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200340 vcgt\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200340 vcgt\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200300 vcgt\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000340 vcgt\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000340 vcgt\.u8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000300 vcgt\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100340 vcgt\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100340 vcgt\.u16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100300 vcgt\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200340 vcgt\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200340 vcgt\.u32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200300 vcgt\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200e40 vcgt\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200e40 vcgt\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200e00 vcgt\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000850 vceq\.i8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000850 vceq\.i8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000810 vceq\.i8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100850 vceq\.i16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100850 vceq\.i16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100810 vceq\.i16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200850 vceq\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200850 vceq\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200810 vceq\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200850 vceq\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200850 vceq\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200810 vceq\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200850 vceq\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200850 vceq\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200810 vceq\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000e40 vceq\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000e40 vceq\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000e00 vceq\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3b100c0 vcge\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b100c0 vcge\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b10080 vcge\.s8 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b500c0 vcge\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b500c0 vcge\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b50080 vcge\.s16 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b900c0 vcge\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b900c0 vcge\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90080 vcge\.s32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b904c0 vcge\.f32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b904c0 vcge\.f32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90480 vcge\.f32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b10040 vcgt\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b10040 vcgt\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b10000 vcgt\.s8 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b50040 vcgt\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b50040 vcgt\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b50000 vcgt\.s16 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b90040 vcgt\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90040 vcgt\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90000 vcgt\.s32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b90440 vcgt\.f32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90440 vcgt\.f32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90400 vcgt\.f32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b101c0 vcle\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b101c0 vcle\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b10180 vcle\.s8 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b501c0 vcle\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b501c0 vcle\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b50180 vcle\.s16 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b901c0 vcle\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b901c0 vcle\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90180 vcle\.s32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b905c0 vcle\.f32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b905c0 vcle\.f32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90580 vcle\.f32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b10240 vclt\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b10240 vclt\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b10200 vclt\.s8 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b50240 vclt\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b50240 vclt\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b50200 vclt\.s16 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b90240 vclt\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90240 vclt\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90200 vclt\.s32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b90640 vclt\.f32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90640 vclt\.f32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90600 vclt\.f32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b10140 vceq\.i8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b10140 vceq\.i8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b10100 vceq\.i8 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b50140 vceq\.i16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b50140 vceq\.i16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b50100 vceq\.i16 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b90140 vceq\.i32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90140 vceq\.i32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90100 vceq\.i32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b90140 vceq\.i32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90140 vceq\.i32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90100 vceq\.i32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b90140 vceq\.i32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90140 vceq\.i32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90100 vceq\.i32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3b90540 vceq\.f32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90540 vceq\.f32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3b90500 vceq\.f32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f2000a00 vpmax\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100a00 vpmax\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200a00 vpmax\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000a00 vpmax\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100a00 vpmax\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200a00 vpmax\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000f00 vpmax\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000a10 vpmin\.s8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100a10 vpmin\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200a10 vpmin\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000a10 vpmin\.u8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100a10 vpmin\.u16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200a10 vpmin\.u32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200f00 vpmin\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000940 vmla\.i8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000940 vmla\.i8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000900 vmla\.i8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100940 vmla\.i16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100940 vmla\.i16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100900 vmla\.i16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200940 vmla\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200940 vmla\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200900 vmla\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200940 vmla\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200940 vmla\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200900 vmla\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200940 vmla\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200940 vmla\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200900 vmla\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000d50 vmla\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000d50 vmla\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000d10 vmla\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3900040 vmla\.i16 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3900040 vmla\.i16 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2900040 vmla\.i16 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00040 vmla\.i32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00040 vmla\.i32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00040 vmla\.i32 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00040 vmla\.i32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00040 vmla\.i32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00040 vmla\.i32 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00040 vmla\.i32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00040 vmla\.i32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00040 vmla\.i32 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00140 vmla\.f32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00140 vmla\.f32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00140 vmla\.f32 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3000940 vmls\.i8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000940 vmls\.i8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000900 vmls\.i8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100940 vmls\.i16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100940 vmls\.i16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100900 vmls\.i16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200940 vmls\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200940 vmls\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200900 vmls\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200940 vmls\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200940 vmls\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200900 vmls\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200940 vmls\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200940 vmls\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200900 vmls\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200d50 vmls\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200d50 vmls\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200d10 vmls\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3900440 vmls\.i16 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3900440 vmls\.i16 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2900440 vmls\.i16 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00440 vmls\.i32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00440 vmls\.i32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00440 vmls\.i32 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00440 vmls\.i32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00440 vmls\.i32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00440 vmls\.i32 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00440 vmls\.i32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00440 vmls\.i32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00440 vmls\.i32 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00540 vmls\.f32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00540 vmls\.f32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00540 vmls\.f32 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2000b10 vpadd\.i8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100b10 vpadd\.i16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200b10 vpadd\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200b10 vpadd\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200b10 vpadd\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000d00 vpadd\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000840 vadd\.i8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000840 vadd\.i8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000800 vadd\.i8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100840 vadd\.i16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100840 vadd\.i16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100800 vadd\.i16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200840 vadd\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200840 vadd\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200800 vadd\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200840 vadd\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200840 vadd\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200800 vadd\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200840 vadd\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200840 vadd\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200800 vadd\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2300840 vadd\.i64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300840 vadd\.i64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2300800 vadd\.i64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000d40 vadd\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000d40 vadd\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000d00 vadd\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000840 vsub\.i8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000840 vsub\.i8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000800 vsub\.i8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3100840 vsub\.i16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100840 vsub\.i16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100800 vsub\.i16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200840 vsub\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200840 vsub\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200800 vsub\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200840 vsub\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200840 vsub\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200800 vsub\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200840 vsub\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200840 vsub\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200800 vsub\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3300840 vsub\.i64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300840 vsub\.i64 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3300800 vsub\.i64 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200d40 vsub\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200d40 vsub\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200d00 vsub\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000850 vtst\.8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000850 vtst\.8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000810 vtst\.8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100850 vtst\.16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100850 vtst\.16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100810 vtst\.16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200850 vtst\.32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200850 vtst\.32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200810 vtst\.32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000950 vmul\.i8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000950 vmul\.i8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000910 vmul\.i8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100950 vmul\.i16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100950 vmul\.i16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100910 vmul\.i16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200950 vmul\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200950 vmul\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200910 vmul\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200950 vmul\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200950 vmul\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200910 vmul\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200950 vmul\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200950 vmul\.i32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200910 vmul\.i32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000d50 vmul\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000d50 vmul\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000d10 vmul\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000950 vmul\.p8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000950 vmul\.p8 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000910 vmul\.p8 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2100b40 vqdmulh\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100b40 vqdmulh\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2100b00 vqdmulh\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200b40 vqdmulh\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200b40 vqdmulh\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200b00 vqdmulh\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3900c40 vqdmulh\.s16 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3900c40 vqdmulh\.s16 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2900c40 vqdmulh\.s16 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00c40 vqdmulh\.s32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00c40 vqdmulh\.s32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00c40 vqdmulh\.s32 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3100b40 vqrdmulh\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100b40 vqrdmulh\.s16 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3100b00 vqrdmulh\.s16 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200b40 vqrdmulh\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200b40 vqrdmulh\.s32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200b00 vqrdmulh\.s32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3900d40 vqrdmulh\.s16 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3900d40 vqrdmulh\.s16 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2900d40 vqrdmulh\.s16 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00d40 vqrdmulh\.s32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00d40 vqrdmulh\.s32 q0, q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00d40 vqrdmulh\.s32 d0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3000e50 vacge\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000e50 vacge\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000e10 vacge\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200e50 vacgt\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200e50 vacgt\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200e10 vacgt\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3000e50 vacge\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000e50 vacge\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3000e10 vacge\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3200e50 vacgt\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200e50 vacgt\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f3200e10 vacgt\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2000f50 vrecps\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000f50 vrecps\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2000f10 vrecps\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f2200f50 vrsqrts\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200f50 vrsqrts\.f32 q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200f10 vrsqrts\.f32 d0, d0, d0
+0[0-9a-f]+ <[^>]+> f3b10340 vabs\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b10340 vabs\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b10300 vabs\.s8 d0, d0
+0[0-9a-f]+ <[^>]+> f3b50340 vabs\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b50340 vabs\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b50300 vabs\.s16 d0, d0
+0[0-9a-f]+ <[^>]+> f3b90340 vabs\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b90340 vabs\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b90300 vabs\.s32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b90740 vabs\.f32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b90740 vabs\.f32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b90700 vabs\.f32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b103c0 vneg\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b103c0 vneg\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b10380 vneg\.s8 d0, d0
+0[0-9a-f]+ <[^>]+> f3b503c0 vneg\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b503c0 vneg\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b50380 vneg\.s16 d0, d0
+0[0-9a-f]+ <[^>]+> f3b903c0 vneg\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b903c0 vneg\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b90380 vneg\.s32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b907c0 vneg\.f32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b907c0 vneg\.f32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b90780 vneg\.f32 d0, d0
+0[0-9a-f]+ <[^>]+> f2890050 vshr\.s8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f2890050 vshr\.s8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f2890010 vshr\.s8 d0, d0, #7
+0[0-9a-f]+ <[^>]+> f2910050 vshr\.s16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f2910050 vshr\.s16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f2910010 vshr\.s16 d0, d0, #15
+0[0-9a-f]+ <[^>]+> f2a10050 vshr\.s32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f2a10050 vshr\.s32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f2a10010 vshr\.s32 d0, d0, #31
+0[0-9a-f]+ <[^>]+> f28100d0 vshr\.s64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f28100d0 vshr\.s64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f2810090 vshr\.s64 d0, d0, #63
+0[0-9a-f]+ <[^>]+> f3890050 vshr\.u8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f3890050 vshr\.u8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f3890010 vshr\.u8 d0, d0, #7
+0[0-9a-f]+ <[^>]+> f3910050 vshr\.u16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f3910050 vshr\.u16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f3910010 vshr\.u16 d0, d0, #15
+0[0-9a-f]+ <[^>]+> f3a10050 vshr\.u32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f3a10050 vshr\.u32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f3a10010 vshr\.u32 d0, d0, #31
+0[0-9a-f]+ <[^>]+> f38100d0 vshr\.u64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f38100d0 vshr\.u64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f3810090 vshr\.u64 d0, d0, #63
+0[0-9a-f]+ <[^>]+> f2890250 vrshr\.s8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f2890250 vrshr\.s8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f2890210 vrshr\.s8 d0, d0, #7
+0[0-9a-f]+ <[^>]+> f2910250 vrshr\.s16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f2910250 vrshr\.s16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f2910210 vrshr\.s16 d0, d0, #15
+0[0-9a-f]+ <[^>]+> f2a10250 vrshr\.s32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f2a10250 vrshr\.s32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f2a10210 vrshr\.s32 d0, d0, #31
+0[0-9a-f]+ <[^>]+> f28102d0 vrshr\.s64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f28102d0 vrshr\.s64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f2810290 vrshr\.s64 d0, d0, #63
+0[0-9a-f]+ <[^>]+> f3890250 vrshr\.u8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f3890250 vrshr\.u8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f3890210 vrshr\.u8 d0, d0, #7
+0[0-9a-f]+ <[^>]+> f3910250 vrshr\.u16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f3910250 vrshr\.u16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f3910210 vrshr\.u16 d0, d0, #15
+0[0-9a-f]+ <[^>]+> f3a10250 vrshr\.u32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f3a10250 vrshr\.u32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f3a10210 vrshr\.u32 d0, d0, #31
+0[0-9a-f]+ <[^>]+> f38102d0 vrshr\.u64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f38102d0 vrshr\.u64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f3810290 vrshr\.u64 d0, d0, #63
+0[0-9a-f]+ <[^>]+> f2890150 vsra\.s8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f2890150 vsra\.s8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f2890110 vsra\.s8 d0, d0, #7
+0[0-9a-f]+ <[^>]+> f2910150 vsra\.s16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f2910150 vsra\.s16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f2910110 vsra\.s16 d0, d0, #15
+0[0-9a-f]+ <[^>]+> f2a10150 vsra\.s32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f2a10150 vsra\.s32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f2a10110 vsra\.s32 d0, d0, #31
+0[0-9a-f]+ <[^>]+> f28101d0 vsra\.s64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f28101d0 vsra\.s64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f2810190 vsra\.s64 d0, d0, #63
+0[0-9a-f]+ <[^>]+> f3890150 vsra\.u8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f3890150 vsra\.u8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f3890110 vsra\.u8 d0, d0, #7
+0[0-9a-f]+ <[^>]+> f3910150 vsra\.u16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f3910150 vsra\.u16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f3910110 vsra\.u16 d0, d0, #15
+0[0-9a-f]+ <[^>]+> f3a10150 vsra\.u32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f3a10150 vsra\.u32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f3a10110 vsra\.u32 d0, d0, #31
+0[0-9a-f]+ <[^>]+> f38101d0 vsra\.u64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f38101d0 vsra\.u64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f3810190 vsra\.u64 d0, d0, #63
+0[0-9a-f]+ <[^>]+> f2890350 vrsra\.s8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f2890350 vrsra\.s8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f2890310 vrsra\.s8 d0, d0, #7
+0[0-9a-f]+ <[^>]+> f2910350 vrsra\.s16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f2910350 vrsra\.s16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f2910310 vrsra\.s16 d0, d0, #15
+0[0-9a-f]+ <[^>]+> f2a10350 vrsra\.s32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f2a10350 vrsra\.s32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f2a10310 vrsra\.s32 d0, d0, #31
+0[0-9a-f]+ <[^>]+> f28103d0 vrsra\.s64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f28103d0 vrsra\.s64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f2810390 vrsra\.s64 d0, d0, #63
+0[0-9a-f]+ <[^>]+> f3890350 vrsra\.u8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f3890350 vrsra\.u8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f3890310 vrsra\.u8 d0, d0, #7
+0[0-9a-f]+ <[^>]+> f3910350 vrsra\.u16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f3910350 vrsra\.u16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f3910310 vrsra\.u16 d0, d0, #15
+0[0-9a-f]+ <[^>]+> f3a10350 vrsra\.u32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f3a10350 vrsra\.u32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f3a10310 vrsra\.u32 d0, d0, #31
+0[0-9a-f]+ <[^>]+> f38103d0 vrsra\.u64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f38103d0 vrsra\.u64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f3810390 vrsra\.u64 d0, d0, #63
+0[0-9a-f]+ <[^>]+> f3880550 vsli\.8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3880550 vsli\.8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3880510 vsli\.8 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3900550 vsli\.16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3900550 vsli\.16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3900510 vsli\.16 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3a00550 vsli\.32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3a00550 vsli\.32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3a00510 vsli\.32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f38005d0 vsli\.64 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f38005d0 vsli\.64 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3800590 vsli\.64 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3890450 vsri\.8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f3890450 vsri\.8 q0, q0, #7
+0[0-9a-f]+ <[^>]+> f3890410 vsri\.8 d0, d0, #7
+0[0-9a-f]+ <[^>]+> f3910450 vsri\.16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f3910450 vsri\.16 q0, q0, #15
+0[0-9a-f]+ <[^>]+> f3910410 vsri\.16 d0, d0, #15
+0[0-9a-f]+ <[^>]+> f3a10450 vsri\.32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f3a10450 vsri\.32 q0, q0, #31
+0[0-9a-f]+ <[^>]+> f3a10410 vsri\.32 d0, d0, #31
+0[0-9a-f]+ <[^>]+> f38104d0 vsri\.64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f38104d0 vsri\.64 q0, q0, #63
+0[0-9a-f]+ <[^>]+> f3810490 vsri\.64 d0, d0, #63
+0[0-9a-f]+ <[^>]+> f3880650 vqshlu\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3880650 vqshlu\.s8 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3880610 vqshlu\.s8 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3900650 vqshlu\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3900650 vqshlu\.s16 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3900610 vqshlu\.s16 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f3a00650 vqshlu\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3a00650 vqshlu\.s32 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3a00610 vqshlu\.s32 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f38006d0 vqshlu\.s64 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f38006d0 vqshlu\.s64 q0, q0, #0
+0[0-9a-f]+ <[^>]+> f3800690 vqshlu\.s64 d0, d0, #0
+0[0-9a-f]+ <[^>]+> f2890910 vqshrn\.s16 d0, q0, #7
+0[0-9a-f]+ <[^>]+> f2910910 vqshrn\.s32 d0, q0, #15
+0[0-9a-f]+ <[^>]+> f2a10910 vqshrn\.s64 d0, q0, #31
+0[0-9a-f]+ <[^>]+> f3890910 vqshrn\.u16 d0, q0, #7
+0[0-9a-f]+ <[^>]+> f3910910 vqshrn\.u32 d0, q0, #15
+0[0-9a-f]+ <[^>]+> f3a10910 vqshrn\.u64 d0, q0, #31
+0[0-9a-f]+ <[^>]+> f2890950 vqrshrn\.s16 d0, q0, #7
+0[0-9a-f]+ <[^>]+> f2910950 vqrshrn\.s32 d0, q0, #15
+0[0-9a-f]+ <[^>]+> f2a10950 vqrshrn\.s64 d0, q0, #31
+0[0-9a-f]+ <[^>]+> f3890950 vqrshrn\.u16 d0, q0, #7
+0[0-9a-f]+ <[^>]+> f3910950 vqrshrn\.u32 d0, q0, #15
+0[0-9a-f]+ <[^>]+> f3a10950 vqrshrn\.u64 d0, q0, #31
+0[0-9a-f]+ <[^>]+> f3890810 vqshrun\.s16 d0, q0, #7
+0[0-9a-f]+ <[^>]+> f3910810 vqshrun\.s32 d0, q0, #15
+0[0-9a-f]+ <[^>]+> f3a10810 vqshrun\.s64 d0, q0, #31
+0[0-9a-f]+ <[^>]+> f3890850 vqrshrun\.s16 d0, q0, #7
+0[0-9a-f]+ <[^>]+> f3910850 vqrshrun\.s32 d0, q0, #15
+0[0-9a-f]+ <[^>]+> f3a10850 vqrshrun\.s64 d0, q0, #31
+0[0-9a-f]+ <[^>]+> f2890810 vshrn\.i16 d0, q0, #7
+0[0-9a-f]+ <[^>]+> f2910810 vshrn\.i32 d0, q0, #15
+0[0-9a-f]+ <[^>]+> f2910810 vshrn\.i32 d0, q0, #15
+0[0-9a-f]+ <[^>]+> f2910810 vshrn\.i32 d0, q0, #15
+0[0-9a-f]+ <[^>]+> f2a10810 vshrn\.i64 d0, q0, #31
+0[0-9a-f]+ <[^>]+> f2890850 vrshrn\.i16 d0, q0, #7
+0[0-9a-f]+ <[^>]+> f2910850 vrshrn\.i32 d0, q0, #15
+0[0-9a-f]+ <[^>]+> f2910850 vrshrn\.i32 d0, q0, #15
+0[0-9a-f]+ <[^>]+> f2910850 vrshrn\.i32 d0, q0, #15
+0[0-9a-f]+ <[^>]+> f2a10850 vrshrn\.i64 d0, q0, #31
+0[0-9a-f]+ <[^>]+> f2890a10 vshll\.s8 d0, q0, #1
+0[0-9a-f]+ <[^>]+> f2910a10 vshll\.s16 d0, q0, #1
+0[0-9a-f]+ <[^>]+> f2a10a10 vshll\.s32 d0, q0, #1
+0[0-9a-f]+ <[^>]+> f3890a10 vshll\.u8 d0, q0, #1
+0[0-9a-f]+ <[^>]+> f3910a10 vshll\.u16 d0, q0, #1
+0[0-9a-f]+ <[^>]+> f3a10a10 vshll\.u32 d0, q0, #1
+0[0-9a-f]+ <[^>]+> f3b20300 vshll\.i8 q0, d0, #8
+0[0-9a-f]+ <[^>]+> f3b60300 vshll\.i16 q0, d0, #16
+0[0-9a-f]+ <[^>]+> f3ba0300 vshll\.i32 q0, d0, #32
+0[0-9a-f]+ <[^>]+> f3ba0300 vshll\.i32 q0, d0, #32
+0[0-9a-f]+ <[^>]+> f3ba0300 vshll\.i32 q0, d0, #32
+0[0-9a-f]+ <[^>]+> f3bb0740 vcvt\.s32\.f32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb07c0 vcvt\.u32\.f32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb0640 vcvt\.f32\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb06c0 vcvt\.f32\.u32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb0740 vcvt\.s32\.f32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb07c0 vcvt\.u32\.f32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb0640 vcvt\.f32\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb06c0 vcvt\.f32\.u32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb0700 vcvt\.s32\.f32 d0, d0
+0[0-9a-f]+ <[^>]+> f3bb0780 vcvt\.u32\.f32 d0, d0
+0[0-9a-f]+ <[^>]+> f3bb0600 vcvt\.f32\.s32 d0, d0
+0[0-9a-f]+ <[^>]+> f3bb0680 vcvt\.f32\.u32 d0, d0
+0[0-9a-f]+ <[^>]+> f2bf0f50 vcvt\.s32\.f32 q0, q0, #1
+0[0-9a-f]+ <[^>]+> f3bf0f50 vcvt\.u32\.f32 q0, q0, #1
+0[0-9a-f]+ <[^>]+> f2bf0e50 vcvt\.f32\.s32 q0, q0, #1
+0[0-9a-f]+ <[^>]+> f3bf0e50 vcvt\.f32\.u32 q0, q0, #1
+0[0-9a-f]+ <[^>]+> f2bf0f50 vcvt\.s32\.f32 q0, q0, #1
+0[0-9a-f]+ <[^>]+> f3bf0f50 vcvt\.u32\.f32 q0, q0, #1
+0[0-9a-f]+ <[^>]+> f2bf0e50 vcvt\.f32\.s32 q0, q0, #1
+0[0-9a-f]+ <[^>]+> f3bf0e50 vcvt\.f32\.u32 q0, q0, #1
+0[0-9a-f]+ <[^>]+> f2bf0f10 vcvt\.s32\.f32 d0, d0, #1
+0[0-9a-f]+ <[^>]+> f3bf0f10 vcvt\.u32\.f32 d0, d0, #1
+0[0-9a-f]+ <[^>]+> f2bf0e10 vcvt\.f32\.s32 d0, d0, #1
+0[0-9a-f]+ <[^>]+> f3bf0e10 vcvt\.f32\.u32 d0, d0, #1
+0[0-9a-f]+ <[^>]+> f2200150 vorr q0, q0, q0
+0[0-9a-f]+ <[^>]+> f2200110 vorr d0, d0, d0
+0[0-9a-f]+ <[^>]+> ee400b10 vmov\.8 d0\[0\], r0
+0[0-9a-f]+ <[^>]+> ee000b30 vmov\.16 d0\[0\], r0
+0[0-9a-f]+ <[^>]+> ee000b10 vmov\.32 d0\[0\], r0
+0[0-9a-f]+ <[^>]+> ec400b10 vmov d0, r0, r0
+0[0-9a-f]+ <[^>]+> ee500b10 vmov\.s8 r0, d0\[0\]
+0[0-9a-f]+ <[^>]+> ee100b30 vmov\.s16 r0, d0\[0\]
+0[0-9a-f]+ <[^>]+> eed00b10 vmov\.u8 r0, d0\[0\]
+0[0-9a-f]+ <[^>]+> ee900b30 vmov\.u16 r0, d0\[0\]
+0[0-9a-f]+ <[^>]+> ee100b10 vmov\.32 r0, d0\[0\]
+0[0-9a-f]+ <[^>]+> ec510b10 vmov r0, r1, d0
+0[0-9a-f]+ <[^>]+> f2870057 vmov\.i32 q0, #119 ; 0x00000077
+0[0-9a-f]+ <[^>]+> f2870017 vmov\.i32 d0, #119 ; 0x00000077
+0[0-9a-f]+ <[^>]+> f2870057 vmov\.i32 q0, #119 ; 0x00000077
+0[0-9a-f]+ <[^>]+> f2870017 vmov\.i32 d0, #119 ; 0x00000077
+0[0-9a-f]+ <[^>]+> f2870057 vmov\.i32 q0, #119 ; 0x00000077
+0[0-9a-f]+ <[^>]+> f2870017 vmov\.i32 d0, #119 ; 0x00000077
+0[0-9a-f]+ <[^>]+> f2870077 vmvn\.i32 q0, #119 ; 0x00000077
+0[0-9a-f]+ <[^>]+> f2870037 vmvn\.i32 d0, #119 ; 0x00000077
+0[0-9a-f]+ <[^>]+> f2870077 vmvn\.i32 q0, #119 ; 0x00000077
+0[0-9a-f]+ <[^>]+> f2870037 vmvn\.i32 d0, #119 ; 0x00000077
+0[0-9a-f]+ <[^>]+> f2870077 vmvn\.i32 q0, #119 ; 0x00000077
+0[0-9a-f]+ <[^>]+> f2870037 vmvn\.i32 d0, #119 ; 0x00000077
+0[0-9a-f]+ <[^>]+> f2870257 vmov\.i32 q0, #30464 ; 0x00007700
+0[0-9a-f]+ <[^>]+> f2870217 vmov\.i32 d0, #30464 ; 0x00007700
+0[0-9a-f]+ <[^>]+> f2870277 vmvn\.i32 q0, #30464 ; 0x00007700
+0[0-9a-f]+ <[^>]+> f2870237 vmvn\.i32 d0, #30464 ; 0x00007700
+0[0-9a-f]+ <[^>]+> f2870457 vmov\.i32 q0, #7798784 ; 0x00770000
+0[0-9a-f]+ <[^>]+> f2870417 vmov\.i32 d0, #7798784 ; 0x00770000
+0[0-9a-f]+ <[^>]+> f2870477 vmvn\.i32 q0, #7798784 ; 0x00770000
+0[0-9a-f]+ <[^>]+> f2870437 vmvn\.i32 d0, #7798784 ; 0x00770000
+0[0-9a-f]+ <[^>]+> f2870657 vmov\.i32 q0, #1996488704 ; 0x77000000
+0[0-9a-f]+ <[^>]+> f2870617 vmov\.i32 d0, #1996488704 ; 0x77000000
+0[0-9a-f]+ <[^>]+> f2870677 vmvn\.i32 q0, #1996488704 ; 0x77000000
+0[0-9a-f]+ <[^>]+> f2870637 vmvn\.i32 d0, #1996488704 ; 0x77000000
+0[0-9a-f]+ <[^>]+> f2870857 vmov\.i16 q0, #119 ; 0x0077
+0[0-9a-f]+ <[^>]+> f2870817 vmov\.i16 d0, #119 ; 0x0077
+0[0-9a-f]+ <[^>]+> f2870877 vmvn\.i16 q0, #119 ; 0x0077
+0[0-9a-f]+ <[^>]+> f2870837 vmvn\.i16 d0, #119 ; 0x0077
+0[0-9a-f]+ <[^>]+> f2870a57 vmov\.i16 q0, #30464 ; 0x7700
+0[0-9a-f]+ <[^>]+> f2870a17 vmov\.i16 d0, #30464 ; 0x7700
+0[0-9a-f]+ <[^>]+> f2870a77 vmvn\.i16 q0, #30464 ; 0x7700
+0[0-9a-f]+ <[^>]+> f2870a37 vmvn\.i16 d0, #30464 ; 0x7700
+0[0-9a-f]+ <[^>]+> f2870c57 vmov\.i32 q0, #30719 ; 0x000077ff
+0[0-9a-f]+ <[^>]+> f2870c17 vmov\.i32 d0, #30719 ; 0x000077ff
+0[0-9a-f]+ <[^>]+> f2870c77 vmvn\.i32 q0, #30719 ; 0x000077ff
+0[0-9a-f]+ <[^>]+> f2870c37 vmvn\.i32 d0, #30719 ; 0x000077ff
+0[0-9a-f]+ <[^>]+> f2870d57 vmov\.i32 q0, #7864319 ; 0x0077ffff
+0[0-9a-f]+ <[^>]+> f2870d17 vmov\.i32 d0, #7864319 ; 0x0077ffff
+0[0-9a-f]+ <[^>]+> f2870d77 vmvn\.i32 q0, #7864319 ; 0x0077ffff
+0[0-9a-f]+ <[^>]+> f2870d37 vmvn\.i32 d0, #7864319 ; 0x0077ffff
+0[0-9a-f]+ <[^>]+> f2870e57 vmov\.i8 q0, #119 ; 0x77
+0[0-9a-f]+ <[^>]+> f2870e17 vmov\.i8 d0, #119 ; 0x77
+0[0-9a-f]+ <[^>]+> f3810e71 vmov\.i64 q0, #0xff0000ff000000ff
+0[0-9a-f]+ <[^>]+> f3810e31 vmov\.i64 d0, #0xff0000ff000000ff
+0[0-9a-f]+ <[^>]+> f2810f51 vmov\.f32 q0, #4\.25 ; 0x40880000
+0[0-9a-f]+ <[^>]+> f2810f11 vmov\.f32 d0, #4\.25 ; 0x40880000
+0[0-9a-f]+ <[^>]+> f3820e55 vmov\.i8 q0, #165 ; 0xa5
+0[0-9a-f]+ <[^>]+> f3820e15 vmov\.i8 d0, #165 ; 0xa5
+0[0-9a-f]+ <[^>]+> f2850e5a vmov\.i8 q0, #90 ; 0x5a
+0[0-9a-f]+ <[^>]+> f2850e1a vmov\.i8 d0, #90 ; 0x5a
+0[0-9a-f]+ <[^>]+> f3820e55 vmov\.i8 q0, #165 ; 0xa5
+0[0-9a-f]+ <[^>]+> f3820e15 vmov\.i8 d0, #165 ; 0xa5
+0[0-9a-f]+ <[^>]+> f2850e5a vmov\.i8 q0, #90 ; 0x5a
+0[0-9a-f]+ <[^>]+> f2850e1a vmov\.i8 d0, #90 ; 0x5a
+0[0-9a-f]+ <[^>]+> f3820855 vmov\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820815 vmov\.i16 d0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820a55 vmov\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820a15 vmov\.i16 d0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820e55 vmov\.i8 q0, #165 ; 0xa5
+0[0-9a-f]+ <[^>]+> f3820e15 vmov\.i8 d0, #165 ; 0xa5
+0[0-9a-f]+ <[^>]+> f2850e5a vmov\.i8 q0, #90 ; 0x5a
+0[0-9a-f]+ <[^>]+> f2850e1a vmov\.i8 d0, #90 ; 0x5a
+0[0-9a-f]+ <[^>]+> f3820855 vmov\.i16 q0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820815 vmov\.i16 d0, #165 ; 0x00a5
+0[0-9a-f]+ <[^>]+> f3820a55 vmov\.i16 q0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820a15 vmov\.i16 d0, #42240 ; 0xa500
+0[0-9a-f]+ <[^>]+> f3820055 vmov\.i32 q0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820015 vmov\.i32 d0, #165 ; 0x000000a5
+0[0-9a-f]+ <[^>]+> f3820255 vmov\.i32 q0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820215 vmov\.i32 d0, #42240 ; 0x0000a500
+0[0-9a-f]+ <[^>]+> f3820455 vmov\.i32 q0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820415 vmov\.i32 d0, #10813440 ; 0x00a50000
+0[0-9a-f]+ <[^>]+> f3820655 vmov\.i32 q0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820615 vmov\.i32 d0, #-1526726656 ; 0xa5000000
+0[0-9a-f]+ <[^>]+> f3820c55 vmov\.i32 q0, #42495 ; 0x0000a5ff
+0[0-9a-f]+ <[^>]+> f3820c15 vmov\.i32 d0, #42495 ; 0x0000a5ff
+0[0-9a-f]+ <[^>]+> f3820d55 vmov\.i32 q0, #10878975 ; 0x00a5ffff
+0[0-9a-f]+ <[^>]+> f3820d15 vmov\.i32 d0, #10878975 ; 0x00a5ffff
+0[0-9a-f]+ <[^>]+> f285067a vmvn\.i32 q0, #1509949440 ; 0x5a000000
+0[0-9a-f]+ <[^>]+> f285063a vmvn\.i32 d0, #1509949440 ; 0x5a000000
+0[0-9a-f]+ <[^>]+> f3b005c0 vmvn q0, q0
+0[0-9a-f]+ <[^>]+> f3b005c0 vmvn q0, q0
+0[0-9a-f]+ <[^>]+> f3b00580 vmvn d0, d0
+0[0-9a-f]+ <[^>]+> f2800500 vabal\.s8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2900500 vabal\.s16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2a00500 vabal\.s32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3800500 vabal\.u8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3900500 vabal\.u16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3a00500 vabal\.u32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2800700 vabdl\.s8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2900700 vabdl\.s16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2a00700 vabdl\.s32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3800700 vabdl\.u8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3900700 vabdl\.u16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3a00700 vabdl\.u32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2800000 vaddl\.s8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2900000 vaddl\.s16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2a00000 vaddl\.s32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3800000 vaddl\.u8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3900000 vaddl\.u16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3a00000 vaddl\.u32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2800200 vsubl\.s8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2900200 vsubl\.s16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2a00200 vsubl\.s32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3800200 vsubl\.u8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3900200 vsubl\.u16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3a00200 vsubl\.u32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2800800 vmlal\.s8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2900800 vmlal\.s16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2a00800 vmlal\.s32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3800800 vmlal\.u8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3900800 vmlal\.u16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3a00800 vmlal\.u32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2900240 vmlal\.s16 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00240 vmlal\.s32 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3900240 vmlal\.u16 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00240 vmlal\.u32 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2800a00 vmlsl\.s8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2900a00 vmlsl\.s16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2a00a00 vmlsl\.s32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3800a00 vmlsl\.u8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3900a00 vmlsl\.u16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3a00a00 vmlsl\.u32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2900640 vmlsl\.s16 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00640 vmlsl\.s32 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3900640 vmlsl\.u16 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00640 vmlsl\.u32 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2800100 vaddw\.s8 q0, q0, d0
+0[0-9a-f]+ <[^>]+> f2900100 vaddw\.s16 q0, q0, d0
+0[0-9a-f]+ <[^>]+> f2a00100 vaddw\.s32 q0, q0, d0
+0[0-9a-f]+ <[^>]+> f3800100 vaddw\.u8 q0, q0, d0
+0[0-9a-f]+ <[^>]+> f3900100 vaddw\.u16 q0, q0, d0
+0[0-9a-f]+ <[^>]+> f3a00100 vaddw\.u32 q0, q0, d0
+0[0-9a-f]+ <[^>]+> f2800300 vsubw\.s8 q0, q0, d0
+0[0-9a-f]+ <[^>]+> f2900300 vsubw\.s16 q0, q0, d0
+0[0-9a-f]+ <[^>]+> f2a00300 vsubw\.s32 q0, q0, d0
+0[0-9a-f]+ <[^>]+> f3800300 vsubw\.u8 q0, q0, d0
+0[0-9a-f]+ <[^>]+> f3900300 vsubw\.u16 q0, q0, d0
+0[0-9a-f]+ <[^>]+> f3a00300 vsubw\.u32 q0, q0, d0
+0[0-9a-f]+ <[^>]+> f2800400 vaddhn\.i16 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f2900400 vaddhn\.i32 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f2900400 vaddhn\.i32 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f2900400 vaddhn\.i32 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f2a00400 vaddhn\.i64 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f3800400 vraddhn\.i16 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f3900400 vraddhn\.i32 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f3900400 vraddhn\.i32 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f3900400 vraddhn\.i32 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f3a00400 vraddhn\.i64 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f2800600 vsubhn\.i16 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f2900600 vsubhn\.i32 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f2900600 vsubhn\.i32 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f2900600 vsubhn\.i32 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f2a00600 vsubhn\.i64 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f3800600 vrsubhn\.i16 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f3900600 vrsubhn\.i32 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f3900600 vrsubhn\.i32 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f3900600 vrsubhn\.i32 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f3a00600 vrsubhn\.i64 d0, q0, q0
+0[0-9a-f]+ <[^>]+> f2900900 vqdmlal\.s16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2a00900 vqdmlal\.s32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2900340 vqdmlal\.s16 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00340 vqdmlal\.s32 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2900b00 vqdmlsl\.s16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2a00b00 vqdmlsl\.s32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2900740 vqdmlsl\.s16 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00740 vqdmlsl\.s32 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2900d00 vqdmull\.s16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2a00d00 vqdmull\.s32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2900b40 vqdmull\.s16 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00b40 vqdmull\.s32 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2800c00 vmull\.s8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2900c00 vmull\.s16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2a00c00 vmull\.s32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3800c00 vmull\.u8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3900c00 vmull\.u16 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f3a00c00 vmull\.u32 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2800e00 vmull\.p8 q0, d0, d0
+0[0-9a-f]+ <[^>]+> f2900a40 vmull\.s16 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2a00a40 vmull\.s32 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3900a40 vmull\.u16 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3a00a40 vmull\.u32 q0, d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2b00040 vext\.8 q0, q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2b00040 vext\.8 q0, q0, q0, #0
+0[0-9a-f]+ <[^>]+> f2b00000 vext\.8 d0, d0, d0, #0
+0[0-9a-f]+ <[^>]+> f2b00840 vext\.8 q0, q0, q0, #8
+0[0-9a-f]+ <[^>]+> f3b00040 vrev64\.8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00040 vrev64\.8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00000 vrev64\.8 d0, d0
+0[0-9a-f]+ <[^>]+> f3b40040 vrev64\.16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40040 vrev64\.16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40000 vrev64\.16 d0, d0
+0[0-9a-f]+ <[^>]+> f3b80040 vrev64\.32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80040 vrev64\.32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80000 vrev64\.32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b000c0 vrev32\.8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b000c0 vrev32\.8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00080 vrev32\.8 d0, d0
+0[0-9a-f]+ <[^>]+> f3b400c0 vrev32\.16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b400c0 vrev32\.16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40080 vrev32\.16 d0, d0
+0[0-9a-f]+ <[^>]+> f3b00140 vrev16\.8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00140 vrev16\.8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00100 vrev16\.8 d0, d0
+0[0-9a-f]+ <[^>]+> eee00b10 vdup\.8 q0, r0
+0[0-9a-f]+ <[^>]+> eee00b10 vdup\.8 q0, r0
+0[0-9a-f]+ <[^>]+> eec00b10 vdup\.8 d0, r0
+0[0-9a-f]+ <[^>]+> f3b10c40 vdup\.8 q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3b10c40 vdup\.8 q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3b10c00 vdup\.8 d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> eea00b30 vdup\.16 q0, r0
+0[0-9a-f]+ <[^>]+> eea00b30 vdup\.16 q0, r0
+0[0-9a-f]+ <[^>]+> ee800b30 vdup\.16 d0, r0
+0[0-9a-f]+ <[^>]+> f3b20c40 vdup\.16 q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3b20c40 vdup\.16 q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3b20c00 vdup\.16 d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> eea00b10 vdup\.32 q0, r0
+0[0-9a-f]+ <[^>]+> eea00b10 vdup\.32 q0, r0
+0[0-9a-f]+ <[^>]+> ee800b10 vdup\.32 d0, r0
+0[0-9a-f]+ <[^>]+> f3b40c40 vdup\.32 q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3b40c40 vdup\.32 q0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f3b40c00 vdup\.32 d0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f2880a10 vmovl\.s8 q0, d0
+0[0-9a-f]+ <[^>]+> f2900a10 vmovl\.s16 q0, d0
+0[0-9a-f]+ <[^>]+> f2a00a10 vmovl\.s32 q0, d0
+0[0-9a-f]+ <[^>]+> f3880a10 vmovl\.u8 q0, d0
+0[0-9a-f]+ <[^>]+> f3900a10 vmovl\.u16 q0, d0
+0[0-9a-f]+ <[^>]+> f3a00a10 vmovl\.u32 q0, d0
+0[0-9a-f]+ <[^>]+> f3b20200 vmovn\.i16 d0, q0
+0[0-9a-f]+ <[^>]+> f3b60200 vmovn\.i32 d0, q0
+0[0-9a-f]+ <[^>]+> f3ba0200 vmovn\.i64 d0, q0
+0[0-9a-f]+ <[^>]+> f3b60200 vmovn\.i32 d0, q0
+0[0-9a-f]+ <[^>]+> f3b60200 vmovn\.i32 d0, q0
+0[0-9a-f]+ <[^>]+> f3b20280 vqmovn\.s16 d0, q0
+0[0-9a-f]+ <[^>]+> f3b60280 vqmovn\.s32 d0, q0
+0[0-9a-f]+ <[^>]+> f3ba0280 vqmovn\.s64 d0, q0
+0[0-9a-f]+ <[^>]+> f3b202c0 vqmovn\.u16 d0, q0
+0[0-9a-f]+ <[^>]+> f3b602c0 vqmovn\.u32 d0, q0
+0[0-9a-f]+ <[^>]+> f3ba02c0 vqmovn\.u64 d0, q0
+0[0-9a-f]+ <[^>]+> f3b20240 vqmovun\.s16 d0, q0
+0[0-9a-f]+ <[^>]+> f3b60240 vqmovun\.s32 d0, q0
+0[0-9a-f]+ <[^>]+> f3ba0240 vqmovun\.s64 d0, q0
+0[0-9a-f]+ <[^>]+> f3b201c2 vzip\.8 q0, q1
+0[0-9a-f]+ <[^>]+> f3b201c2 vzip\.8 q0, q1
+0[0-9a-f]+ <[^>]+> f3b20181 vzip\.8 d0, d1
+0[0-9a-f]+ <[^>]+> f3b601c2 vzip\.16 q0, q1
+0[0-9a-f]+ <[^>]+> f3b601c2 vzip\.16 q0, q1
+0[0-9a-f]+ <[^>]+> f3b60181 vzip\.16 d0, d1
+0[0-9a-f]+ <[^>]+> f3ba01c2 vzip\.32 q0, q1
+0[0-9a-f]+ <[^>]+> f3ba01c2 vzip\.32 q0, q1
+0[0-9a-f]+ <[^>]+> f3ba0081 vtrn\.32 d0, d1
+0[0-9a-f]+ <[^>]+> f3b20142 vuzp\.8 q0, q1
+0[0-9a-f]+ <[^>]+> f3b20142 vuzp\.8 q0, q1
+0[0-9a-f]+ <[^>]+> f3b20101 vuzp\.8 d0, d1
+0[0-9a-f]+ <[^>]+> f3b60142 vuzp\.16 q0, q1
+0[0-9a-f]+ <[^>]+> f3b60142 vuzp\.16 q0, q1
+0[0-9a-f]+ <[^>]+> f3b60101 vuzp\.16 d0, d1
+0[0-9a-f]+ <[^>]+> f3ba0142 vuzp\.32 q0, q1
+0[0-9a-f]+ <[^>]+> f3ba0142 vuzp\.32 q0, q1
+0[0-9a-f]+ <[^>]+> f3ba0081 vtrn\.32 d0, d1
+0[0-9a-f]+ <[^>]+> f3b00740 vqabs\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00740 vqabs\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00700 vqabs\.s8 d0, d0
+0[0-9a-f]+ <[^>]+> f3b40740 vqabs\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40740 vqabs\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40700 vqabs\.s16 d0, d0
+0[0-9a-f]+ <[^>]+> f3b80740 vqabs\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80740 vqabs\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80700 vqabs\.s32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b007c0 vqneg\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b007c0 vqneg\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00780 vqneg\.s8 d0, d0
+0[0-9a-f]+ <[^>]+> f3b407c0 vqneg\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b407c0 vqneg\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40780 vqneg\.s16 d0, d0
+0[0-9a-f]+ <[^>]+> f3b807c0 vqneg\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b807c0 vqneg\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80780 vqneg\.s32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b00640 vpadal\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00640 vpadal\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00600 vpadal\.s8 d0, d0
+0[0-9a-f]+ <[^>]+> f3b40640 vpadal\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40640 vpadal\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40600 vpadal\.s16 d0, d0
+0[0-9a-f]+ <[^>]+> f3b80640 vpadal\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80640 vpadal\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80600 vpadal\.s32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b006c0 vpadal\.u8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b006c0 vpadal\.u8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00680 vpadal\.u8 d0, d0
+0[0-9a-f]+ <[^>]+> f3b406c0 vpadal\.u16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b406c0 vpadal\.u16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40680 vpadal\.u16 d0, d0
+0[0-9a-f]+ <[^>]+> f3b806c0 vpadal\.u32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b806c0 vpadal\.u32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80680 vpadal\.u32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b00240 vpaddl\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00240 vpaddl\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00200 vpaddl\.s8 d0, d0
+0[0-9a-f]+ <[^>]+> f3b40240 vpaddl\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40240 vpaddl\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40200 vpaddl\.s16 d0, d0
+0[0-9a-f]+ <[^>]+> f3b80240 vpaddl\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80240 vpaddl\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80200 vpaddl\.s32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b002c0 vpaddl\.u8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b002c0 vpaddl\.u8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00280 vpaddl\.u8 d0, d0
+0[0-9a-f]+ <[^>]+> f3b402c0 vpaddl\.u16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b402c0 vpaddl\.u16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40280 vpaddl\.u16 d0, d0
+0[0-9a-f]+ <[^>]+> f3b802c0 vpaddl\.u32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b802c0 vpaddl\.u32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80280 vpaddl\.u32 d0, d0
+0[0-9a-f]+ <[^>]+> f3bb0440 vrecpe\.u32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb0440 vrecpe\.u32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb0400 vrecpe\.u32 d0, d0
+0[0-9a-f]+ <[^>]+> f3bb0540 vrecpe\.f32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb0540 vrecpe\.f32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb0500 vrecpe\.f32 d0, d0
+0[0-9a-f]+ <[^>]+> f3bb04c0 vrsqrte\.u32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb04c0 vrsqrte\.u32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb0480 vrsqrte\.u32 d0, d0
+0[0-9a-f]+ <[^>]+> f3bb05c0 vrsqrte\.f32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb05c0 vrsqrte\.f32 q0, q0
+0[0-9a-f]+ <[^>]+> f3bb0580 vrsqrte\.f32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b00440 vcls\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00440 vcls\.s8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00400 vcls\.s8 d0, d0
+0[0-9a-f]+ <[^>]+> f3b40440 vcls\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40440 vcls\.s16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40400 vcls\.s16 d0, d0
+0[0-9a-f]+ <[^>]+> f3b80440 vcls\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80440 vcls\.s32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80400 vcls\.s32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b004c0 vclz\.i8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b004c0 vclz\.i8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00480 vclz\.i8 d0, d0
+0[0-9a-f]+ <[^>]+> f3b404c0 vclz\.i16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b404c0 vclz\.i16 q0, q0
+0[0-9a-f]+ <[^>]+> f3b40480 vclz\.i16 d0, d0
+0[0-9a-f]+ <[^>]+> f3b804c0 vclz\.i32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b804c0 vclz\.i32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80480 vclz\.i32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b804c0 vclz\.i32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b804c0 vclz\.i32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80480 vclz\.i32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b804c0 vclz\.i32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b804c0 vclz\.i32 q0, q0
+0[0-9a-f]+ <[^>]+> f3b80480 vclz\.i32 d0, d0
+0[0-9a-f]+ <[^>]+> f3b00540 vcnt\.8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00540 vcnt\.8 q0, q0
+0[0-9a-f]+ <[^>]+> f3b00500 vcnt\.8 d0, d0
+0[0-9a-f]+ <[^>]+> f3b20042 vswp q0, q1
+0[0-9a-f]+ <[^>]+> f3b20042 vswp q0, q1
+0[0-9a-f]+ <[^>]+> f3b20001 vswp d0, d1
+0[0-9a-f]+ <[^>]+> f3b200c2 vtrn\.8 q0, q1
+0[0-9a-f]+ <[^>]+> f3b200c2 vtrn\.8 q0, q1
+0[0-9a-f]+ <[^>]+> f3b20081 vtrn\.8 d0, d1
+0[0-9a-f]+ <[^>]+> f3b600c2 vtrn\.16 q0, q1
+0[0-9a-f]+ <[^>]+> f3b600c2 vtrn\.16 q0, q1
+0[0-9a-f]+ <[^>]+> f3b60081 vtrn\.16 d0, d1
+0[0-9a-f]+ <[^>]+> f3ba00c2 vtrn\.32 q0, q1
+0[0-9a-f]+ <[^>]+> f3ba00c2 vtrn\.32 q0, q1
+0[0-9a-f]+ <[^>]+> f3ba0081 vtrn\.32 d0, d1
+0[0-9a-f]+ <[^>]+> f3b00800 vtbl\.8 d0, {d0}, d0
+0[0-9a-f]+ <[^>]+> f3b00840 vtbx\.8 d0, {d0}, d0
diff --git a/gas/testsuite/gas/arm/neon-cov.s b/gas/testsuite/gas/arm/neon-cov.s
new file mode 100644
index 000000000000..04194a83eb07
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-cov.s
@@ -0,0 +1,666 @@
+@ Neon tests. Basic bitfield tests, using zero for as many registers/fields as
+@ possible, but without causing instructions to be badly-formed.
+
+ .arm
+ .syntax unified
+ .text
+
+ .macro regs3_1 op opq vtype
+ \op\vtype q0,q0,q0
+ \opq\vtype q0,q0,q0
+ \op\vtype d0,d0,d0
+ .endm
+
+ .macro dregs3_1 op vtype
+ \op\vtype d0,d0,d0
+ .endm
+
+ .macro regn3_1 op operand2 vtype
+ \op\vtype d0,q0,\operand2
+ .endm
+
+ .macro regl3_1 op operand2 vtype
+ \op\vtype q0,d0,\operand2
+ .endm
+
+ .macro regw3_1 op operand2 vtype
+ \op\vtype q0,q0,\operand2
+ .endm
+
+ .macro regs2_1 op opq vtype
+ \op\vtype q0,q0
+ \opq\vtype q0,q0
+ \op\vtype d0,d0
+ .endm
+
+ .macro regs3_su_32 op opq
+ regs3_1 \op \opq .s8
+ regs3_1 \op \opq .s16
+ regs3_1 \op \opq .s32
+ regs3_1 \op \opq .u8
+ regs3_1 \op \opq .u16
+ regs3_1 \op \opq .u32
+ .endm
+
+ regs3_su_32 vaba vabaq
+ regs3_su_32 vhadd vhaddq
+ regs3_su_32 vrhadd vrhaddq
+ regs3_su_32 vhsub vhsubq
+
+ .macro regs3_su_64 op opq
+ regs3_1 \op \opq .s8
+ regs3_1 \op \opq .s16
+ regs3_1 \op \opq .s32
+ regs3_1 \op \opq .s64
+ regs3_1 \op \opq .u8
+ regs3_1 \op \opq .u16
+ regs3_1 \op \opq .u32
+ regs3_1 \op \opq .u64
+ .endm
+
+ regs3_su_64 vqadd vqaddq
+ regs3_su_64 vqsub vqsubq
+ regs3_su_64 vrshl vrshlq
+ regs3_su_64 vqrshl vqrshlq
+
+ regs3_su_64 vshl vshlq
+ regs3_su_64 vqshl vqshlq
+
+ .macro regs2i_1 op opq imm vtype
+ \op\vtype q0,q0,\imm
+ \opq\vtype q0,q0,\imm
+ \op\vtype d0,d0,\imm
+ .endm
+
+ .macro regs2i_su_64 op opq imm
+ regs2i_1 \op \opq \imm .s8
+ regs2i_1 \op \opq \imm .s16
+ regs2i_1 \op \opq \imm .s32
+ regs2i_1 \op \opq \imm .s64
+ regs2i_1 \op \opq \imm .u8
+ regs2i_1 \op \opq \imm .u16
+ regs2i_1 \op \opq \imm .u32
+ regs2i_1 \op \opq \imm .u64
+ .endm
+
+ .macro regs2i_i_64 op opq imm
+ regs2i_1 \op \opq \imm .i8
+ regs2i_1 \op \opq \imm .i16
+ regs2i_1 \op \opq \imm .i32
+ regs2i_1 \op \opq \imm .s32
+ regs2i_1 \op \opq \imm .u32
+ regs2i_1 \op \opq \imm .i64
+ .endm
+
+ regs2i_i_64 vshl vshlq 0
+ regs2i_su_64 vqshl vqshlq 0
+
+ .macro regs3_ntyp op opq
+ regs3_1 \op \opq .8
+ .endm
+
+ regs3_ntyp vand vandq
+ regs3_ntyp vbic vbicq
+ regs3_ntyp vorr vorrq
+ regs3_ntyp vorn vornq
+ regs3_ntyp veor veorq
+
+ .macro logic_imm_1 op opq imm vtype
+ \op\vtype q0,\imm
+ \opq\vtype q0,\imm
+ \op\vtype d0,\imm
+ .endm
+
+ .macro logic_imm op opq
+ logic_imm_1 \op \opq 0x000000a5000000a5 .i64
+ logic_imm_1 \op \opq 0x0000a5000000a500 .i64
+ logic_imm_1 \op \opq 0x00a5000000a50000 .i64
+ logic_imm_1 \op \opq 0xa5000000a5000000 .i64
+ logic_imm_1 \op \opq 0x00a500a500a500a5 .i64
+ logic_imm_1 \op \opq 0xa500a500a500a500 .i64
+ logic_imm_1 \op \opq 0x000000ff .i32
+ logic_imm_1 \op \opq 0x000000ff .s32
+ logic_imm_1 \op \opq 0x000000ff .u32
+ logic_imm_1 \op \opq 0x0000ff00 .i32
+ logic_imm_1 \op \opq 0x00ff0000 .i32
+ logic_imm_1 \op \opq 0xff000000 .i32
+ logic_imm_1 \op \opq 0x00a500a5 .i32
+ logic_imm_1 \op \opq 0xa500a500 .i32
+ logic_imm_1 \op \opq 0x00ff .i16
+ logic_imm_1 \op \opq 0xff00 .i16
+ logic_imm_1 \op \opq 0x00 .i8
+ .endm
+
+ logic_imm vbic vbicq
+ logic_imm vorr vorrq
+
+ .macro logic_inv_imm op opq
+ logic_imm_1 \op \opq 0xffffff5affffff5a .i64
+ logic_imm_1 \op \opq 0xffff5affffff5aff .i64
+ logic_imm_1 \op \opq 0xff5affffff5affff .i64
+ logic_imm_1 \op \opq 0x5affffff5affffff .i64
+ logic_imm_1 \op \opq 0xff5aff5aff5aff5a .i64
+ logic_imm_1 \op \opq 0x5aff5aff5aff5aff .i64
+ logic_imm_1 \op \opq 0xffffff00 .i32
+ logic_imm_1 \op \opq 0xffffff00 .s32
+ logic_imm_1 \op \opq 0xffffff00 .u32
+ logic_imm_1 \op \opq 0xffff00ff .i32
+ logic_imm_1 \op \opq 0xff00ffff .i32
+ logic_imm_1 \op \opq 0x00ffffff .i32
+ logic_imm_1 \op \opq 0xff5aff5a .i32
+ logic_imm_1 \op \opq 0x5aff5aff .i32
+ logic_imm_1 \op \opq 0xff00 .i16
+ logic_imm_1 \op \opq 0x00ff .i16
+ logic_imm_1 \op \opq 0xff .i8
+ .endm
+
+ logic_inv_imm vand vandq
+ logic_inv_imm vorn vornq
+
+ regs3_ntyp vbsl vbslq
+ regs3_ntyp vbit vbitq
+ regs3_ntyp vbif vbifq
+
+ .macro regs3_suf_32 op opq
+ regs3_1 \op \opq .s8
+ regs3_1 \op \opq .s16
+ regs3_1 \op \opq .s32
+ regs3_1 \op \opq .u8
+ regs3_1 \op \opq .u16
+ regs3_1 \op \opq .u32
+ regs3_1 \op \opq .f32
+ .endm
+
+ .macro regs3_if_32 op opq
+ regs3_1 \op \opq .i8
+ regs3_1 \op \opq .i16
+ regs3_1 \op \opq .i32
+ regs3_1 \op \opq .s32
+ regs3_1 \op \opq .u32
+ regs3_1 \op \opq .f32
+ .endm
+
+ regs3_suf_32 vabd vabdq
+ regs3_suf_32 vmax vmaxq
+ regs3_suf_32 vmin vminq
+
+ regs3_suf_32 vcge vcgeq
+ regs3_suf_32 vcgt vcgtq
+ regs3_suf_32 vcle vcleq
+ regs3_suf_32 vclt vcltq
+
+ regs3_if_32 vceq vceqq
+
+ .macro regs2i_sf_0 op opq
+ regs2i_1 \op \opq 0 .s8
+ regs2i_1 \op \opq 0 .s16
+ regs2i_1 \op \opq 0 .s32
+ regs2i_1 \op \opq 0 .f32
+ .endm
+
+ regs2i_sf_0 vcge vcgeq
+ regs2i_sf_0 vcgt vcgtq
+ regs2i_sf_0 vcle vcleq
+ regs2i_sf_0 vclt vcltq
+
+ .macro regs2i_if_0 op opq
+ regs2i_1 \op \opq 0 .i8
+ regs2i_1 \op \opq 0 .i16
+ regs2i_1 \op \opq 0 .i32
+ regs2i_1 \op \opq 0 .s32
+ regs2i_1 \op \opq 0 .u32
+ regs2i_1 \op \opq 0 .f32
+ .endm
+
+ regs2i_if_0 vceq vceqq
+
+ .macro dregs3_suf_32 op
+ dregs3_1 \op .s8
+ dregs3_1 \op .s16
+ dregs3_1 \op .s32
+ dregs3_1 \op .u8
+ dregs3_1 \op .u16
+ dregs3_1 \op .u32
+ dregs3_1 \op .f32
+ .endm
+
+ dregs3_suf_32 vpmax
+ dregs3_suf_32 vpmin
+
+ .macro sregs3_1 op opq vtype
+ \op\vtype q0,q0,q0
+ \opq\vtype q0,q0,q0
+ \op\vtype d0,d0,d0
+ .endm
+
+ .macro sclr21_1 op opq vtype
+ \op\vtype q0,q0,d0[0]
+ \opq\vtype q0,q0,d0[0]
+ \op\vtype d0,d0,d0[0]
+ .endm
+
+ .macro mul_incl_scalar op opq
+ regs3_1 \op \opq .i8
+ regs3_1 \op \opq .i16
+ regs3_1 \op \opq .i32
+ regs3_1 \op \opq .s32
+ regs3_1 \op \opq .u32
+ regs3_1 \op \opq .f32
+ sclr21_1 \op \opq .i16
+ sclr21_1 \op \opq .i32
+ sclr21_1 \op \opq .s32
+ sclr21_1 \op \opq .u32
+ sclr21_1 \op \opq .f32
+ .endm
+
+ mul_incl_scalar vmla vmlaq
+ mul_incl_scalar vmls vmlsq
+
+ .macro dregs3_if_32 op
+ dregs3_1 \op .i8
+ dregs3_1 \op .i16
+ dregs3_1 \op .i32
+ dregs3_1 \op .s32
+ dregs3_1 \op .u32
+ dregs3_1 \op .f32
+ .endm
+
+ dregs3_if_32 vpadd
+
+ .macro regs3_if_64 op opq
+ regs3_1 \op \opq .i8
+ regs3_1 \op \opq .i16
+ regs3_1 \op \opq .i32
+ regs3_1 \op \opq .s32
+ regs3_1 \op \opq .u32
+ regs3_1 \op \opq .i64
+ regs3_1 \op \opq .f32
+ .endm
+
+ regs3_if_64 vadd vaddq
+ regs3_if_64 vsub vsubq
+
+ .macro regs3_sz_32 op opq
+ regs3_1 \op \opq .8
+ regs3_1 \op \opq .16
+ regs3_1 \op \opq .32
+ .endm
+
+ regs3_sz_32 vtst vtstq
+
+ .macro regs3_ifp_32 op opq
+ regs3_1 \op \opq .i8
+ regs3_1 \op \opq .i16
+ regs3_1 \op \opq .i32
+ regs3_1 \op \opq .s32
+ regs3_1 \op \opq .u32
+ regs3_1 \op \opq .f32
+ regs3_1 \op \opq .p8
+ .endm
+
+ regs3_ifp_32 vmul vmulq
+
+ .macro dqmulhs op opq
+ regs3_1 \op \opq .s16
+ regs3_1 \op \opq .s32
+ sclr21_1 \op \opq .s16
+ sclr21_1 \op \opq .s32
+ .endm
+
+ dqmulhs vqdmulh vqdmulhq
+ dqmulhs vqrdmulh vqrdmulhq
+
+ regs3_1 vacge vacgeq .f32
+ regs3_1 vacgt vacgtq .f32
+ regs3_1 vacle vacleq .f32
+ regs3_1 vaclt vacltq .f32
+ regs3_1 vrecps vrecpsq .f32
+ regs3_1 vrsqrts vrsqrtsq .f32
+
+ .macro regs2_sf_32 op opq
+ regs2_1 \op \opq .s8
+ regs2_1 \op \opq .s16
+ regs2_1 \op \opq .s32
+ regs2_1 \op \opq .f32
+ .endm
+
+ regs2_sf_32 vabs vabsq
+ regs2_sf_32 vneg vnegq
+
+ .macro rshift_imm op opq
+ regs2i_1 \op \opq 7 .s8
+ regs2i_1 \op \opq 15 .s16
+ regs2i_1 \op \opq 31 .s32
+ regs2i_1 \op \opq 63 .s64
+ regs2i_1 \op \opq 7 .u8
+ regs2i_1 \op \opq 15 .u16
+ regs2i_1 \op \opq 31 .u32
+ regs2i_1 \op \opq 63 .u64
+ .endm
+
+ rshift_imm vshr vshrq
+ rshift_imm vrshr vrshrq
+ rshift_imm vsra vsraq
+ rshift_imm vrsra vrsraq
+
+ regs2i_1 vsli vsliq 0 .8
+ regs2i_1 vsli vsliq 0 .16
+ regs2i_1 vsli vsliq 0 .32
+ regs2i_1 vsli vsliq 0 .64
+
+ regs2i_1 vsri vsriq 7 .8
+ regs2i_1 vsri vsriq 15 .16
+ regs2i_1 vsri vsriq 31 .32
+ regs2i_1 vsri vsriq 63 .64
+
+ regs2i_1 vqshlu vqshluq 0 .s8
+ regs2i_1 vqshlu vqshluq 0 .s16
+ regs2i_1 vqshlu vqshluq 0 .s32
+ regs2i_1 vqshlu vqshluq 0 .s64
+
+ .macro qrshift_imm op
+ regn3_1 \op 7 .s16
+ regn3_1 \op 15 .s32
+ regn3_1 \op 31 .s64
+ regn3_1 \op 7 .u16
+ regn3_1 \op 15 .u32
+ regn3_1 \op 31 .u64
+ .endm
+
+ .macro qrshiftu_imm op
+ regn3_1 \op 7 .s16
+ regn3_1 \op 15 .s32
+ regn3_1 \op 31 .s64
+ .endm
+
+ .macro qrshifti_imm op
+ regn3_1 \op 7 .i16
+ regn3_1 \op 15 .i32
+ regn3_1 \op 15 .s32
+ regn3_1 \op 15 .u32
+ regn3_1 \op 31 .i64
+ .endm
+
+ qrshift_imm vqshrn
+ qrshift_imm vqrshrn
+ qrshiftu_imm vqshrun
+ qrshiftu_imm vqrshrun
+
+ qrshifti_imm vshrn
+ qrshifti_imm vrshrn
+
+ regl3_1 vshll 1 .s8
+ regl3_1 vshll 1 .s16
+ regl3_1 vshll 1 .s32
+ regl3_1 vshll 1 .u8
+ regl3_1 vshll 1 .u16
+ regl3_1 vshll 1 .u32
+
+ regl3_1 vshll 8 .i8
+ regl3_1 vshll 16 .i16
+ regl3_1 vshll 32 .i32
+ regl3_1 vshll 32 .s32
+ regl3_1 vshll 32 .u32
+
+ .macro convert op opr arg="" t1=".s32.f32" t2=".u32.f32" t3=".f32.s32" t4=".f32.u32"
+ \op\t1 \opr,\opr\arg
+ \op\t2 \opr,\opr\arg
+ \op\t3 \opr,\opr\arg
+ \op\t4 \opr,\opr\arg
+ .endm
+
+ convert vcvt q0
+ convert vcvtq q0
+ convert vcvt d0
+ convert vcvt q0 ",1"
+ convert vcvtq q0 ",1"
+ convert vcvt d0 ",1"
+
+ vmov q0,q0
+ vmov d0,d0
+ vmov.8 d0[0],r0
+ vmov.16 d0[0],r0
+ vmov.32 d0[0],r0
+ vmov d0,r0,r0
+ vmov.s8 r0,d0[0]
+ vmov.s16 r0,d0[0]
+ vmov.u8 r0,d0[0]
+ vmov.u16 r0,d0[0]
+ vmov.32 r0,d0[0]
+ vmov r0,r1,d0
+
+ .macro mov_imm op imm vtype
+ \op\vtype q0,\imm
+ \op\vtype d0,\imm
+ .endm
+
+ mov_imm vmov 0x00000077 .i32
+ mov_imm vmov 0x00000077 .s32
+ mov_imm vmov 0x00000077 .u32
+ mov_imm vmvn 0x00000077 .i32
+ mov_imm vmvn 0x00000077 .s32
+ mov_imm vmvn 0x00000077 .u32
+ mov_imm vmov 0x00007700 .i32
+ mov_imm vmvn 0x00007700 .i32
+ mov_imm vmov 0x00770000 .i32
+ mov_imm vmvn 0x00770000 .i32
+ mov_imm vmov 0x77000000 .i32
+ mov_imm vmvn 0x77000000 .i32
+ mov_imm vmov 0x0077 .i16
+ mov_imm vmvn 0x0077 .i16
+ mov_imm vmov 0x7700 .i16
+ mov_imm vmvn 0x7700 .i16
+ mov_imm vmov 0x000077ff .i32
+ mov_imm vmvn 0x000077ff .i32
+ mov_imm vmov 0x0077ffff .i32
+ mov_imm vmvn 0x0077ffff .i32
+ mov_imm vmov 0x77 .i8
+ mov_imm vmov 0xff0000ff000000ff .i64
+ mov_imm vmov 4.25 .f32
+
+ mov_imm vmov 0xa5a5 .i16
+ mov_imm vmvn 0xa5a5 .i16
+ mov_imm vmov 0xa5a5a5a5 .i32
+ mov_imm vmvn 0xa5a5a5a5 .i32
+ mov_imm vmov 0x00a500a5 .i32
+ mov_imm vmov 0xa500a500 .i32
+ mov_imm vmov 0xa5a5a5a5a5a5a5a5 .i64
+ mov_imm vmvn 0xa5a5a5a5a5a5a5a5 .i64
+ mov_imm vmov 0x00a500a500a500a5 .i64
+ mov_imm vmov 0xa500a500a500a500 .i64
+ mov_imm vmov 0x000000a5000000a5 .i64
+ mov_imm vmov 0x0000a5000000a500 .i64
+ mov_imm vmov 0x00a5000000a50000 .i64
+ mov_imm vmov 0xa5000000a5000000 .i64
+ mov_imm vmov 0x0000a5ff0000a5ff .i64
+ mov_imm vmov 0x00a5ffff00a5ffff .i64
+ mov_imm vmov 0xa5ffffffa5ffffff .i64
+
+ vmvn q0,q0
+ vmvnq q0,q0
+ vmvn d0,d0
+
+ .macro long_ops op
+ regl3_1 \op d0 .s8
+ regl3_1 \op d0 .s16
+ regl3_1 \op d0 .s32
+ regl3_1 \op d0 .u8
+ regl3_1 \op d0 .u16
+ regl3_1 \op d0 .u32
+ .endm
+
+ long_ops vabal
+ long_ops vabdl
+ long_ops vaddl
+ long_ops vsubl
+
+ .macro long_mac op
+ regl3_1 \op d0 .s8
+ regl3_1 \op d0 .s16
+ regl3_1 \op d0 .s32
+ regl3_1 \op d0 .u8
+ regl3_1 \op d0 .u16
+ regl3_1 \op d0 .u32
+ regl3_1 \op "d0[0]" .s16
+ regl3_1 \op "d0[0]" .s32
+ regl3_1 \op "d0[0]" .u16
+ regl3_1 \op "d0[0]" .u32
+ .endm
+
+ long_mac vmlal
+ long_mac vmlsl
+
+ .macro wide_ops op
+ regw3_1 \op d0 .s8
+ regw3_1 \op d0 .s16
+ regw3_1 \op d0 .s32
+ regw3_1 \op d0 .u8
+ regw3_1 \op d0 .u16
+ regw3_1 \op d0 .u32
+ .endm
+
+ wide_ops vaddw
+ wide_ops vsubw
+
+ .macro narr_ops op
+ regn3_1 \op q0 .i16
+ regn3_1 \op q0 .i32
+ regn3_1 \op q0 .s32
+ regn3_1 \op q0 .u32
+ regn3_1 \op q0 .i64
+ .endm
+
+ narr_ops vaddhn
+ narr_ops vraddhn
+ narr_ops vsubhn
+ narr_ops vrsubhn
+
+ .macro long_dmac op
+ regl3_1 \op d0 .s16
+ regl3_1 \op d0 .s32
+ regl3_1 \op "d0[0]" .s16
+ regl3_1 \op "d0[0]" .s32
+ .endm
+
+ long_dmac vqdmlal
+ long_dmac vqdmlsl
+ long_dmac vqdmull
+
+ regl3_1 vmull d0 .s8
+ regl3_1 vmull d0 .s16
+ regl3_1 vmull d0 .s32
+ regl3_1 vmull d0 .u8
+ regl3_1 vmull d0 .u16
+ regl3_1 vmull d0 .u32
+ regl3_1 vmull d0 .p8
+ regl3_1 vmull "d0[0]" .s16
+ regl3_1 vmull "d0[0]" .s32
+ regl3_1 vmull "d0[0]" .u16
+ regl3_1 vmull "d0[0]" .u32
+
+ vext.8 q0,q0,q0,0
+ vextq.8 q0,q0,q0,0
+ vext.8 d0,d0,d0,0
+ vext.8 q0,q0,q0,8
+
+ .macro revs op opq vtype
+ \op\vtype q0,q0
+ \opq\vtype q0,q0
+ \op\vtype d0,d0
+ .endm
+
+ revs vrev64 vrev64q .8
+ revs vrev64 vrev64q .16
+ revs vrev64 vrev64q .32
+ revs vrev32 vrev32q .8
+ revs vrev32 vrev32q .16
+ revs vrev16 vrev16q .8
+
+ .macro dups op opq vtype
+ \op\vtype q0,r0
+ \opq\vtype q0,r0
+ \op\vtype d0,r0
+ \op\vtype q0,d0[0]
+ \opq\vtype q0,d0[0]
+ \op\vtype d0,d0[0]
+ .endm
+
+ dups vdup vdupq .8
+ dups vdup vdupq .16
+ dups vdup vdupq .32
+
+ .macro binop_3typ op op1 op2 t1 t2 t3
+ \op\t1 \op1,\op2
+ \op\t2 \op1,\op2
+ \op\t3 \op1,\op2
+ .endm
+
+ binop_3typ vmovl q0 d0 .s8 .s16 .s32
+ binop_3typ vmovl q0 d0 .u8 .u16 .u32
+ binop_3typ vmovn d0 q0 .i16 .i32 .i64
+ vmovn.s32 d0, q0
+ vmovn.u32 d0, q0
+ binop_3typ vqmovn d0 q0 .s16 .s32 .s64
+ binop_3typ vqmovn d0 q0 .u16 .u32 .u64
+ binop_3typ vqmovun d0 q0 .s16 .s32 .s64
+
+ .macro binops op opq vtype="" rhs="0"
+ \op\vtype q0,q\rhs
+ \opq\vtype q0,q\rhs
+ \op\vtype d0,d\rhs
+ .endm
+
+ .macro regs2_sz_32 op opq
+ binops \op \opq .8 1
+ binops \op \opq .16 1
+ binops \op \opq .32 1
+ .endm
+
+ regs2_sz_32 vzip vzipq
+ regs2_sz_32 vuzp vuzpq
+
+ .macro regs2_s_32 op opq
+ binops \op \opq .s8
+ binops \op \opq .s16
+ binops \op \opq .s32
+ .endm
+
+ regs2_s_32 vqabs vqabsq
+ regs2_s_32 vqneg vqnegq
+
+ .macro regs2_su_32 op opq
+ regs2_s_32 \op \opq
+ binops \op \opq .u8
+ binops \op \opq .u16
+ binops \op \opq .u32
+ .endm
+
+ regs2_su_32 vpadal vpadalq
+ regs2_su_32 vpaddl vpaddlq
+
+ binops vrecpe vrecpeq .u32
+ binops vrecpe vrecpeq .f32
+ binops vrsqrte vrsqrteq .u32
+ binops vrsqrte vrsqrteq .f32
+
+ regs2_s_32 vcls vclsq
+
+ .macro regs2_i_32 op opq
+ binops \op \opq .i8
+ binops \op \opq .i16
+ binops \op \opq .i32
+ binops \op \opq .s32
+ binops \op \opq .u32
+ .endm
+
+ regs2_i_32 vclz vclzq
+
+ binops vcnt vcntq .8
+
+ binops vswp vswpq "" 1
+
+ regs2_sz_32 vtrn vtrnq
+
+ vtbl.8 d0,{d0},d0
+ vtbx.8 d0,{d0},d0
+
diff --git a/gas/testsuite/gas/arm/neon-ldst-es.d b/gas/testsuite/gas/arm/neon-ldst-es.d
new file mode 100644
index 000000000000..c520ac93116b
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-ldst-es.d
@@ -0,0 +1,57 @@
+# name: Neon element and structure loads and stores
+# as: -mfpu=neon
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section \.text:
+0[0-9a-f]+ <[^>]+> f406282f vst2\.8 {d2-d3}, \[r6, :128\]
+0[0-9a-f]+ <[^>]+> f427140d vld3\.8 {d1-d3}, \[r7\]!
+0[0-9a-f]+ <[^>]+> f4091553 vst3\.16 {d1,d3,d5}, \[r9, :64\], r3
+0[0-9a-f]+ <[^>]+> f42a208f vld4\.32 {d2-d5}, \[sl\]
+0[0-9a-f]+ <[^>]+> f40a114f vst4\.16 {d1,d3,d5,d7}, \[sl\]
+0[0-9a-f]+ <[^>]+> f4aa1c6f vld1\.16 {d1\[\]-d2\[\]}, \[sl\]
+0[0-9a-f]+ <[^>]+> f4aa1c5f vld1\.16 {d1\[\]}, \[sl, :16\]
+0[0-9a-f]+ <[^>]+> f4aa1dbf vld2\.32 {d1\[\],d3\[\]}, \[sl, :64\]
+0[0-9a-f]+ <[^>]+> f4aa3e0c vld3\.8 {d3\[\]-d5\[\]}, \[sl\], ip
+0[0-9a-f]+ <[^>]+> f4a9af6d vld4\.16 {d10\[\],d12\[\],d14\[\],d16\[\]}, \[r9\]!
+0[0-9a-f]+ <[^>]+> f4a9af5f vld4\.16 {d10\[\]-d13\[\]}, \[r9, :64\]
+0[0-9a-f]+ <[^>]+> f4a9af9f vld4\.32 {d10\[\]-d13\[\]}, \[r9, :64\]
+0[0-9a-f]+ <[^>]+> f4a9afdf vld4\.32 {d10\[\]-d13\[\]}, \[r9, :128\]
+0[0-9a-f]+ <[^>]+> f4a530ed vld1\.8 {d3\[7\]}, \[r5\]!
+0[0-9a-f]+ <[^>]+> f48554df vst1\.16 {d5\[3\]}, \[r5, :16\]
+0[0-9a-f]+ <[^>]+> f4a535dd vld2\.16 {d3\[3\],d4\[3\]}, \[r5, :32\]!
+0[0-9a-f]+ <[^>]+> f4858a83 vst3\.32 {d8\[1\],d9\[1\],d10\[1\]}, \[r5\], r3
+0[0-9a-f]+ <[^>]+> f4a7804f vld1\.8 {d8\[2\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a7848f vld1\.16 {d8\[2\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a7849f vld1\.16 {d8\[2\]}, \[r7, :16\]
+0[0-9a-f]+ <[^>]+> f4a7888f vld1\.32 {d8\[1\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a788bf vld1\.32 {d8\[1\]}, \[r7, :32\]
+0[0-9a-f]+ <[^>]+> f4a7812f vld2\.8 {d8\[1\],d9\[1\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a7813f vld2\.8 {d8\[1\],d9\[1\]}, \[r7, :16\]
+0[0-9a-f]+ <[^>]+> f4a7854f vld2\.16 {d8\[1\],d9\[1\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a7855f vld2\.16 {d8\[1\],d9\[1\]}, \[r7, :32\]
+0[0-9a-f]+ <[^>]+> f4a7856f vld2\.16 {d8\[1\],d10\[1\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a7857f vld2\.16 {d8\[1\],d10\[1\]}, \[r7, :32\]
+0[0-9a-f]+ <[^>]+> f4a7898f vld2\.32 {d8\[1\],d9\[1\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a7899f vld2\.32 {d8\[1\],d9\[1\]}, \[r7, :64\]
+0[0-9a-f]+ <[^>]+> f4a789cf vld2\.32 {d8\[1\],d10\[1\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a789df vld2\.32 {d8\[1\],d10\[1\]}, \[r7, :64\]
+0[0-9a-f]+ <[^>]+> f4a7822f vld3\.8 {d8\[1\],d9\[1\],d10\[1\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a7864f vld3\.16 {d8\[1\],d9\[1\],d10\[1\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a7866f vld3\.16 {d8\[1\],d10\[1\],d12\[1\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a78a8f vld3\.32 {d8\[1\],d9\[1\],d10\[1\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a78acf vld3\.32 {d8\[1\],d10\[1\],d12\[1\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a7834f vld4\.8 {d8\[2\],d9\[2\],d10\[2\],d11\[2\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a7835f vld4\.8 {d8\[2\],d9\[2\],d10\[2\],d11\[2\]}, \[r7, :32\]
+0[0-9a-f]+ <[^>]+> f4a7876f vld4\.16 {d8\[1\],d10\[1\],d12\[1\],d14\[1\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a7875f vld4\.16 {d8\[1\],d9\[1\],d10\[1\],d11\[1\]}, \[r7, :64\]
+0[0-9a-f]+ <[^>]+> f4a78bcf vld4\.32 {d8\[1\],d10\[1\],d12\[1\],d14\[1\]}, \[r7\]
+0[0-9a-f]+ <[^>]+> f4a78bdf vld4\.32 {d8\[1\],d10\[1\],d12\[1\],d14\[1\]}, \[r7, :64\]
+0[0-9a-f]+ <[^>]+> f4a78bef vld4\.32 {d8\[1\],d10\[1\],d12\[1\],d14\[1\]}, \[r7, :128\]
+0[0-9a-f]+ <[^>]+> f3b43805 vtbl\.8 d3, {d4}, d5
+0[0-9a-f]+ <[^>]+> f3b23b05 vtbl\.8 d3, {d2-d5}, d5
+0[0-9a-f]+ <[^>]+> f3be3985 vtbl\.8 d3, {d30-d31}, d5
+0[0-9a-f]+ <[^>]+> f427288f vld2\.32 {d2-d3}, \[r7\]
+0[0-9a-f]+ <[^>]+> f427208f vld4\.32 {d2-d5}, \[r7\]
+0[0-9a-f]+ <[^>]+> f467c08f vld4\.32 {d28-d31}, \[r7\]
diff --git a/gas/testsuite/gas/arm/neon-ldst-es.s b/gas/testsuite/gas/arm/neon-ldst-es.s
new file mode 100644
index 000000000000..5a29a4379390
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-ldst-es.s
@@ -0,0 +1,59 @@
+@ test element and structure loads and stores.
+
+ .text
+ .arm
+ .syntax unified
+
+ vst2.8 {d2,d3},[r6,:128]
+ vld3.8 {d1,d2,d3},[r7]!
+ vst3.16 {d1,d3,d5},[r9,:64],r3
+ vld4.32 {d2,d3,d4,d5},[r10]
+ vst4.16 {d1,d3,d5,d7},[r10]
+ vld1.16 {d1[],d2[]},[r10]
+ vld1.16 {d1[]},[r10,:16]
+ vld2.32 {d1[],d3[]},[r10,:64]
+ vld3.s8 {d3[],d4[],d5[]},[r10],r12
+ vld4.16 {d10[],d12[],d14[],d16[]},[r9]!
+ vld4.16 {d10[],d11[],d12[],d13[]},[r9,:64]
+ vld4.32 {d10[],d11[],d12[],d13[]},[r9,:64]
+ vld4.32 {d10[],d11[],d12[],d13[]},[r9,:128]
+ vld1.8 {d3[7]},[r5]!
+ vst1.16 {d5[3]},[r5,:16]
+ vld2.16 {d3[3],d4[3]},[r5,:32]!
+ vst3.32 {d8[1],d9[1],d10[1]},[r5],r3
+
+ vld1.8 {d8[2]},[r7]
+ vld1.16 {d8[2]},[r7]
+ vld1.16 {d8[2]},[r7,:16]
+ vld1.32 {d8[1]},[r7]
+ vld1.32 {d8[1]},[r7,:32]
+ vld2.8 {d8[1],d9[1]},[r7]
+ vld2.8 {d8[1],d9[1]},[r7,:16]
+ vld2.16 {d8[1],d9[1]},[r7]
+ vld2.16 {d8[1],d9[1]},[r7,:32]
+ vld2.16 {d8[1],d10[1]},[r7]
+ vld2.16 {d8[1],d10[1]},[r7,:32]
+ vld2.32 {d8[1],d9[1]},[r7]
+ vld2.32 {d8[1],d9[1]},[r7,:64]
+ vld2.32 {d8[1],d10[1]},[r7]
+ vld2.32 {d8[1],d10[1]},[r7,:64]
+ vld3.8 {d8[1],d9[1],d10[1]},[r7]
+ vld3.16 {d8[1],d9[1],d10[1]},[r7]
+ vld3.16 {d8[1],d10[1],d12[1]},[r7]
+ vld3.32 {d8[1],d9[1],d10[1]},[r7]
+ vld3.32 {d8[1],d10[1],d12[1]},[r7]
+ vld4.8 {d8[2],d9[2],d10[2],d11[2]},[r7]
+ vld4.8 {d8[2],d9[2],d10[2],d11[2]},[r7,:32]
+ vld4.16 {d8[1],d10[1],d12[1],d14[1]},[r7]
+ vld4.16 {d8[1],d9[1],d10[1],d11[1]},[r7,:64]
+ vld4.32 {d8[1],d10[1],d12[1],d14[1]},[r7]
+ vld4.32 {d8[1],d10[1],d12[1],d14[1]},[r7,:64]
+ vld4.32 {d8[1],d10[1],d12[1],d14[1]},[r7,:128]
+
+ vtbl.8 d3,{d4},d5
+ vtbl.8 d3,{q1-q2},d5
+ vtbl.8 d3,{q15},d5
+
+ vld2.32 {q1},[r7]
+ vld4.32 {q1-q2},[r7]
+ vld4.32 {q14-q15},[r7]
diff --git a/gas/testsuite/gas/arm/neon-ldst-rm.d b/gas/testsuite/gas/arm/neon-ldst-rm.d
new file mode 100644
index 000000000000..86285d6dc35c
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-ldst-rm.d
@@ -0,0 +1,63 @@
+# name: Neon single and multiple register loads and stores
+# as: -mfpu=neon
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section \.text:
+0[0-9a-f]+ <[^>]+> ec922b02 vldmia r2, {d2}
+0[0-9a-f]+ <[^>]+> ec922b04 vldmia r2, {d2-d3}
+0[0-9a-f]+ <[^>]+> ec924b08 vldmia r2, {d4-d7}
+0[0-9a-f]+ <[^>]+> ecd28b10 vldmia r2, {d24-d31}
+0[0-9a-f]+ <[^>]+> ec923b20 vldmia r2, {d3-d18}
+0[0-9a-f]+ <[^>]+> ec922b02 vldmia r2, {d2}
+0[0-9a-f]+ <[^>]+> ec922b04 vldmia r2, {d2-d3}
+0[0-9a-f]+ <[^>]+> ec924b08 vldmia r2, {d4-d7}
+0[0-9a-f]+ <[^>]+> ecd28b10 vldmia r2, {d24-d31}
+0[0-9a-f]+ <[^>]+> ec923b20 vldmia r2, {d3-d18}
+0[0-9a-f]+ <[^>]+> ecb22b02 vldmia r2!, {d2}
+0[0-9a-f]+ <[^>]+> ecb22b04 vldmia r2!, {d2-d3}
+0[0-9a-f]+ <[^>]+> ecb24b08 vldmia r2!, {d4-d7}
+0[0-9a-f]+ <[^>]+> ecf28b10 vldmia r2!, {d24-d31}
+0[0-9a-f]+ <[^>]+> ecb23b20 vldmia r2!, {d3-d18}
+0[0-9a-f]+ <[^>]+> ed322b02 vldmdb r2!, {d2}
+0[0-9a-f]+ <[^>]+> ed322b04 vldmdb r2!, {d2-d3}
+0[0-9a-f]+ <[^>]+> ed324b08 vldmdb r2!, {d4-d7}
+0[0-9a-f]+ <[^>]+> ed728b10 vldmdb r2!, {d24-d31}
+0[0-9a-f]+ <[^>]+> ed323b20 vldmdb r2!, {d3-d18}
+0[0-9a-f]+ <[^>]+> ec822b02 vstmia r2, {d2}
+0[0-9a-f]+ <[^>]+> ec822b04 vstmia r2, {d2-d3}
+0[0-9a-f]+ <[^>]+> ec824b08 vstmia r2, {d4-d7}
+0[0-9a-f]+ <[^>]+> ecc28b10 vstmia r2, {d24-d31}
+0[0-9a-f]+ <[^>]+> ec823b20 vstmia r2, {d3-d18}
+0[0-9a-f]+ <[^>]+> ec822b02 vstmia r2, {d2}
+0[0-9a-f]+ <[^>]+> ec822b04 vstmia r2, {d2-d3}
+0[0-9a-f]+ <[^>]+> ec824b08 vstmia r2, {d4-d7}
+0[0-9a-f]+ <[^>]+> ecc28b10 vstmia r2, {d24-d31}
+0[0-9a-f]+ <[^>]+> ec823b20 vstmia r2, {d3-d18}
+0[0-9a-f]+ <[^>]+> eca22b02 vstmia r2!, {d2}
+0[0-9a-f]+ <[^>]+> eca22b04 vstmia r2!, {d2-d3}
+0[0-9a-f]+ <[^>]+> eca24b08 vstmia r2!, {d4-d7}
+0[0-9a-f]+ <[^>]+> ece28b10 vstmia r2!, {d24-d31}
+0[0-9a-f]+ <[^>]+> eca23b20 vstmia r2!, {d3-d18}
+0[0-9a-f]+ <[^>]+> ed222b02 vstmdb r2!, {d2}
+0[0-9a-f]+ <[^>]+> ed222b04 vstmdb r2!, {d2-d3}
+0[0-9a-f]+ <[^>]+> ed224b08 vstmdb r2!, {d4-d7}
+0[0-9a-f]+ <[^>]+> ed628b10 vstmdb r2!, {d24-d31}
+0[0-9a-f]+ <[^>]+> ed223b20 vstmdb r2!, {d3-d18}
+0[0-9a-f]+ <backward> 000001f4 .*
+0[0-9a-f]+ <[^>]+> eddf6b0b vldr d22, \[pc, #44\] ; 0[0-9a-f]+ <forward>
+0[0-9a-f]+ <[^>]+> ed935b00 vldr d5, \[r3\]
+0[0-9a-f]+ <[^>]+> ed135b01 vldr d5, \[r3, #-4\]
+0[0-9a-f]+ <[^>]+> ed935b01 vldr d5, \[r3, #4\]
+0[0-9a-f]+ <[^>]+> ed835b00 vstr d5, \[r3\]
+0[0-9a-f]+ <[^>]+> ed035b01 vstr d5, \[r3, #-4\]
+0[0-9a-f]+ <[^>]+> ed835b01 vstr d5, \[r3, #4\]
+0[0-9a-f]+ <[^>]+> ed935b00 vldr d5, \[r3\]
+0[0-9a-f]+ <[^>]+> ed135b40 vldr d5, \[r3, #-256\]
+0[0-9a-f]+ <[^>]+> ed935b40 vldr d5, \[r3, #256\]
+0[0-9a-f]+ <[^>]+> ed835b00 vstr d5, \[r3\]
+0[0-9a-f]+ <[^>]+> ed035b40 vstr d5, \[r3, #-256\]
+0[0-9a-f]+ <[^>]+> ed835b40 vstr d5, \[r3, #256\]
+0[0-9a-f]+ <forward> 000002bc .*
+0[0-9a-f]+ <[^>]+> ed1f7b11 vldr d7, \[pc, #-68\] ; 0[0-9a-f]+ <backward>
diff --git a/gas/testsuite/gas/arm/neon-ldst-rm.s b/gas/testsuite/gas/arm/neon-ldst-rm.s
new file mode 100644
index 000000000000..f9421ac5563c
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-ldst-rm.s
@@ -0,0 +1,44 @@
+@ test register and multi-register loads and stores.
+
+ .text
+ .arm
+ .syntax unified
+
+ .macro multi op dir="" wb=""
+ \op\dir r2\wb,{d2}
+ \op\dir r2\wb,{d2-d3}
+ \op\dir r2\wb,{q2-q3}
+ \op\dir r2\wb,{q12-q14,q15}
+ \op\dir r2\wb,{d3,d4,d5-d8,d9,d10,d11,d12-d16,d17-d18}
+ .endm
+
+ multi vldm
+ multi vldm ia
+ multi vldm ia "!"
+ multi vldm db "!"
+
+ multi vstm
+ multi vstm ia
+ multi vstm ia "!"
+ multi vstm db "!"
+
+backward:
+ .word 500
+
+ .macro single op offset=""
+ \op d5,[r3]
+ \op d5,[r3,#-\offset]
+ \op d5,[r3,#\offset]
+ .endm
+
+ vldr d22, forward
+
+ single vldr 4
+ single vstr 4
+ single vldr 256
+ single vstr 256
+
+forward:
+ .word 700
+
+ vldr d7, backward
diff --git a/gas/testsuite/gas/arm/neon-omit.d b/gas/testsuite/gas/arm/neon-omit.d
new file mode 100644
index 000000000000..fa7fa2cc75fe
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-omit.d
@@ -0,0 +1,95 @@
+# name: Neon optional register operands
+# as: -mfpu=neon
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> f3022746 vabd\.u8 q1, q1, q3
+0[0-9a-f]+ <[^>]+> f26cc0c6 vhadd\.s32 q14, q14, q3
+0[0-9a-f]+ <[^>]+> f2222144 vrhadd\.s32 q1, q1, q2
+0[0-9a-f]+ <[^>]+> f22aa24e vhsub\.s32 q5, q5, q7
+0[0-9a-f]+ <[^>]+> f3186446 vshl\.u16 q3, q3, q4
+0[0-9a-f]+ <[^>]+> f32ca45a vqshl\.u32 q5, q5, q6
+0[0-9a-f]+ <[^>]+> f20ee170 vand q7, q7, q8
+0[0-9a-f]+ <[^>]+> f30ee170 veor q7, q7, q8
+0[0-9a-f]+ <[^>]+> f3b5a14a vceq\.i16 q5, q5, #0
+0[0-9a-f]+ <[^>]+> f31aa85a vceq\.i16 q5, q5, q5
+0[0-9a-f]+ <[^>]+> f3b5a24a vclt\.s16 q5, q5, #0
+0[0-9a-f]+ <[^>]+> f3b5a34c vabs\.s16 q5, q6
+0[0-9a-f]+ <[^>]+> f3b57388 vneg\.s16 d7, d8
+0[0-9a-f]+ <[^>]+> f3b97708 vabs\.f32 d7, d8
+0[0-9a-f]+ <[^>]+> f3f927e4 vneg\.f32 q9, q10
+0[0-9a-f]+ <[^>]+> f2211a03 vpmax\.s32 d1, d1, d3
+0[0-9a-f]+ <[^>]+> f2255a17 vpmin\.s32 d5, d5, d7
+0[0-9a-f]+ <[^>]+> f3011f03 vpmax\.f32 d1, d1, d3
+0[0-9a-f]+ <[^>]+> f3255f07 vpmin\.f32 d5, d5, d7
+0[0-9a-f]+ <[^>]+> f2122b46 vqdmulh\.s16 q1, q1, q3
+0[0-9a-f]+ <[^>]+> f3255b07 vqrdmulh\.s32 d5, d5, d7
+0[0-9a-f]+ <[^>]+> f3922c6d vqdmulh\.s16 q1, q1, d5\[3\]
+0[0-9a-f]+ <[^>]+> f2122056 vqadd\.s16 q1, q1, q3
+0[0-9a-f]+ <[^>]+> f2255017 vqadd\.s32 d5, d5, d7
+0[0-9a-f]+ <[^>]+> f2222944 vmla\.i32 q1, q1, q2
+0[0-9a-f]+ <[^>]+> f2133b14 vpadd\.i16 d3, d3, d4
+0[0-9a-f]+ <[^>]+> f3266948 vmls\.i32 q3, q3, q4
+0[0-9a-f]+ <[^>]+> f3022e54 vacge\.f32 q1, q1, q2
+0[0-9a-f]+ <[^>]+> f3266e58 vacgt\.f32 q3, q3, q4
+0[0-9a-f]+ <[^>]+> f30cae5a vacge\.f32 q5, q6, q5
+0[0-9a-f]+ <[^>]+> f320eede vacgt\.f32 q7, q8, q7
+0[0-9a-f]+ <[^>]+> f32ee370 vcge\.u32 q7, q7, q8
+0[0-9a-f]+ <[^>]+> f32ee360 vcgt\.u32 q7, q7, q8
+0[0-9a-f]+ <[^>]+> f320e3de vcge\.u32 q7, q8, q7
+0[0-9a-f]+ <[^>]+> f320e3ce vcgt\.u32 q7, q8, q7
+0[0-9a-f]+ <[^>]+> f3a22102 vaddw\.u32 q1, q1, d2
+0[0-9a-f]+ <[^>]+> f2a66304 vsubw\.s32 q3, q3, d4
+0[0-9a-f]+ <[^>]+> f2244856 vtst\.32 q2, q2, q3
+0[0-9a-f]+ <[^>]+> f2011f12 vrecps\.f32 d1, d1, d2
+0[0-9a-f]+ <[^>]+> f29c2052 vshr\.s16 q1, q1, #4
+0[0-9a-f]+ <[^>]+> f28b4254 vrshr\.s8 q2, q2, #5
+0[0-9a-f]+ <[^>]+> f39a6156 vsra\.u16 q3, q3, #6
+0[0-9a-f]+ <[^>]+> f39a8358 vrsra\.u16 q4, q4, #6
+0[0-9a-f]+ <[^>]+> f3954554 vsli\.16 q2, q2, #5
+0[0-9a-f]+ <[^>]+> f3bff69f vqshlu\.s64 d15, d15, #63
+0[0-9a-f]+ <[^>]+> f2b55306 vext\.8 d5, d5, d6, #3
+0[0-9a-f]+ <[^>]+> f3042746 vabd\.u8 q1, q2, q3
+0[0-9a-f]+ <[^>]+> f262c0c6 vhadd\.s32 q14, q9, q3
+0[0-9a-f]+ <[^>]+> f22a2144 vrhadd\.s32 q1, q5, q2
+0[0-9a-f]+ <[^>]+> f220a2ce vhsub\.s32 q5, q8, q7
+0[0-9a-f]+ <[^>]+> f31a6448 vshl\.u16 q3, q4, q5
+0[0-9a-f]+ <[^>]+> f322a45c vqshl\.u32 q5, q6, q1
+0[0-9a-f]+ <[^>]+> f200e1dc vand q7, q8, q6
+0[0-9a-f]+ <[^>]+> f300e1dc veor q7, q8, q6
+0[0-9a-f]+ <[^>]+> f3b5a146 vceq\.i16 q5, q3, #0
+0[0-9a-f]+ <[^>]+> f316a85a vceq\.i16 q5, q3, q5
+0[0-9a-f]+ <[^>]+> f3b5a246 vclt\.s16 q5, q3, #0
+0[0-9a-f]+ <[^>]+> f2231a20 vpmax\.s32 d1, d3, d16
+0[0-9a-f]+ <[^>]+> f2275a34 vpmin\.s32 d5, d7, d20
+0[0-9a-f]+ <[^>]+> f3031f07 vpmax\.f32 d1, d3, d7
+0[0-9a-f]+ <[^>]+> f32c5f07 vpmin\.f32 d5, d12, d7
+0[0-9a-f]+ <[^>]+> f2162b60 vqdmulh\.s16 q1, q3, q8
+0[0-9a-f]+ <[^>]+> f3275b09 vqrdmulh\.s32 d5, d7, d9
+0[0-9a-f]+ <[^>]+> f39c2c6d vqdmulh\.s16 q1, q6, d5\[3\]
+0[0-9a-f]+ <[^>]+> f21620d6 vqadd\.s16 q1, q11, q3
+0[0-9a-f]+ <[^>]+> f227503f vqadd\.s32 d5, d7, d31
+0[0-9a-f]+ <[^>]+> f2242962 vmla\.i32 q1, q2, q9
+0[0-9a-f]+ <[^>]+> f21a3b94 vpadd\.i16 d3, d26, d4
+0[0-9a-f]+ <[^>]+> f328694a vmls\.i32 q3, q4, q5
+0[0-9a-f]+ <[^>]+> f3082e54 vacge\.f32 q1, q4, q2
+0[0-9a-f]+ <[^>]+> f3226e58 vacgt\.f32 q3, q1, q4
+0[0-9a-f]+ <[^>]+> f30cae72 vacge\.f32 q5, q6, q9
+0[0-9a-f]+ <[^>]+> f320eed2 vacgt\.f32 q7, q8, q1
+0[0-9a-f]+ <[^>]+> f320e3d6 vcge\.u32 q7, q8, q3
+0[0-9a-f]+ <[^>]+> f320e3c6 vcgt\.u32 q7, q8, q3
+0[0-9a-f]+ <[^>]+> f326e370 vcge\.u32 q7, q3, q8
+0[0-9a-f]+ <[^>]+> f326e360 vcgt\.u32 q7, q3, q8
+0[0-9a-f]+ <[^>]+> f3aa2102 vaddw\.u32 q1, q5, d2
+0[0-9a-f]+ <[^>]+> f2a26304 vsubw\.s32 q3, q1, d4
+0[0-9a-f]+ <[^>]+> f22648d6 vtst\.32 q2, q11, q3
+0[0-9a-f]+ <[^>]+> f20e1f92 vrecps\.f32 d1, d30, d2
+0[0-9a-f]+ <[^>]+> f29c207a vshr\.s16 q1, q13, #4
+0[0-9a-f]+ <[^>]+> f28b4272 vrshr\.s8 q2, q9, #5
+0[0-9a-f]+ <[^>]+> f39a6152 vsra\.u16 q3, q1, #6
+0[0-9a-f]+ <[^>]+> f3dae358 vrsra\.u16 q15, q4, #6
+0[0-9a-f]+ <[^>]+> f3954556 vsli\.16 q2, q3, #5
+0[0-9a-f]+ <[^>]+> f3bff6b7 vqshlu\.s64 d15, d23, #63
+0[0-9a-f]+ <[^>]+> f2b25386 vext\.8 d5, d18, d6, #3
diff --git a/gas/testsuite/gas/arm/neon-omit.s b/gas/testsuite/gas/arm/neon-omit.s
new file mode 100644
index 000000000000..42a7e8903b16
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-omit.s
@@ -0,0 +1,97 @@
+@ test omitted optional arguments
+
+ .text
+ .arm
+ .syntax unified
+
+ vabd.u8 q1,q3
+ vhadd.s32 q14, q3
+ vrhadd.s32 q1,q2
+ vhsub.s32 q5,q7
+ vshl.u16 q3,q4
+ vqshl.u32 q5,q6
+ vand.64 q7,q8
+ veor.64 q7,q8
+ vceq.i16 q5,#0
+ vceq.i16 q5,q5
+ vclt.s16 q5,#0
+ vabs.s16 q5,q6
+ vneg.s16 d7,d8
+ vabs.f d7,d8
+ vneg.f q9,q10
+ vpmax.s32 d1,d3
+ vpmin.s32 d5,d7
+ vpmax.f32 d1,d3
+ vpmin.f32 d5,d7
+ vqdmulh.s16 q1,q3
+ vqrdmulh.s32 d5,d7
+ vqdmulh.s16 q1,d5[3]
+ vqadd.s16 q1,q3
+ vqadd.s32 d5,d7
+ vmla.i32 q1,q2
+ vpadd.i16 d3,d4
+ vmls.s32 q3,q4
+ vacge.f q1,q2
+ vacgt.f q3,q4
+ vacle.f q5,q6
+ vaclt.f q7,q8
+ vcge.u32 q7,q8
+ vcgt.u32 q7,q8
+ vcle.u32 q7,q8
+ vclt.u32 q7,q8
+ vaddw.u32 q1,d2
+ vsubw.s32 q3,d4
+ vtst.i32 q2,q3
+ vrecps.f d1,d2
+ vshr.s16 q1,#4
+ vrshr.s8 q2,#5
+ vsra.u16 q3,#6
+ vrsra.u16 q4,#6
+ vsli.16 q2,#5
+ vqshlu.s64 d15,#63
+ vext.8 d5,d6,#3
+
+@ Also test three-argument forms without omitted arguments
+
+ vabd.u8 q1,q2,q3
+ vhadd.s32 q14,q9,q3
+ vrhadd.s32 q1,q5,q2
+ vhsub.s32 q5,q8,q7
+ vshl.u16 q3,q4,q5
+ vqshl.u32 q5,q6,q1
+ vand.64 q7,q8,q6
+ veor.64 q7,q8,q6
+ vceq.i16 q5,q3,#0
+ vceq.i16 q5,q3,q5
+ vclt.s16 q5,q3,#0
+ vpmax.s32 d1,d3,d16
+ vpmin.s32 d5,d7,d20
+ vpmax.f32 d1,d3,d7
+ vpmin.f32 d5,d12,d7
+ vqdmulh.s16 q1,q3,q8
+ vqrdmulh.s32 d5,d7,d9
+ vqdmulh.s16 q1,q6,d5[3]
+ vqadd.s16 q1,q11,q3
+ vqadd.s32 d5,d7,d31
+ vmla.i32 q1,q2,q9
+ vpadd.i16 d3,d26,d4
+ vmls.s32 q3,q4,q5
+ vacge.f q1,q4,q2
+ vacgt.f q3,q1,q4
+ vacle.f q5,q9,q6
+ vaclt.f q7,q1,q8
+ vcge.u32 q7,q8,q3
+ vcgt.u32 q7,q8,q3
+ vcle.u32 q7,q8,q3
+ vclt.u32 q7,q8,q3
+ vaddw.u32 q1,q5,d2
+ vsubw.s32 q3,q1,d4
+ vtst.i32 q2,q11,q3
+ vrecps.f d1,d30,d2
+ vshr.s16 q1,q13,#4
+ vrshr.s8 q2,q9,#5
+ vsra.u16 q3,q1,#6
+ vrsra.u16 q15,q4,#6
+ vsli.16 q2,q3,#5
+ vqshlu.s64 d15,d23,#63
+ vext.8 d5,d18,d6,#3
diff --git a/gas/testsuite/gas/arm/neon-psyn.d b/gas/testsuite/gas/arm/neon-psyn.d
new file mode 100644
index 000000000000..c318672f72b4
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-psyn.d
@@ -0,0 +1,37 @@
+# name: Neon programmers syntax
+# as: -mfpu=neon
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> f2144954 vmul\.i16 q2, q2, q2
+0[0-9a-f]+ <[^>]+> f2a33862 vmul\.i32 d3, d3, d2\[1\]
+0[0-9a-f]+ <[^>]+> f2233912 vmul\.i32 d3, d3, d2
+0[0-9a-f]+ <[^>]+> f2222803 vadd\.i32 d2, d2, d3
+0[0-9a-f]+ <[^>]+> f3924a4a vmull\.u16 q2, d2, d2\[1\]
+0[0-9a-f]+ <[^>]+> f2910061 vmla\.i16 d0, d1, d1\[2\]
+0[0-9a-f]+ <[^>]+> f2910061 vmla\.i16 d0, d1, d1\[2\]
+0[0-9a-f]+ <[^>]+> f2255805 vadd\.i32 d5, d5, d5
+0[0-9a-f]+ <[^>]+> f2275117 vorr d5, d7, d7
+0[0-9a-f]+ <[^>]+> ee021b70 vmov\.16 d2\[1\], r1
+0[0-9a-f]+ <[^>]+> ee251b10 vmov\.32 d5\[1\], r1
+0[0-9a-f]+ <[^>]+> ec432b15 vmov d5, r2, r3
+0[0-9a-f]+ <[^>]+> ee554b30 vmov\.s8 r4, d5\[1\]
+0[0-9a-f]+ <[^>]+> ec565b15 vmov r5, r6, d5
+0[0-9a-f]+ <[^>]+> f396a507 vabal\.u16 q5, d6, d7
+0[0-9a-f]+ <[^>]+> f3bb2744 vcvt\.s32\.f32 q1, q2
+0[0-9a-f]+ <[^>]+> f3bb4e15 vcvt\.f32\.u32 d4, d5, #5
+0[0-9a-f]+ <[^>]+> f3bc7c05 vdup\.32 d7, d5\[1\]
+0[0-9a-f]+ <[^>]+> f3ba1904 vtbl\.8 d1, {d10-d11}, d4
+0[0-9a-f]+ <[^>]+> f4aa698f vld2\.32 {d6\[1\],d7\[1\]}, \[sl\]
+0[0-9a-f]+ <[^>]+> f4aa476f vld4\.16 {d4\[1\],d6\[1\],d8\[1\],d10\[1\]}, \[sl\]
+0[0-9a-f]+ <[^>]+> f4aa6e4f vld3\.16 {d6\[\]-d8\[\]}, \[sl\]
+0[0-9a-f]+ <[^>]+> ee100b30 vmov\.s16 r0, d0\[0\]
+0[0-9a-f]+ <[^>]+> f42a604f vld4\.16 {d6-d9}, \[sl\]
+0[0-9a-f]+ <[^>]+> f4aa266f vld3\.16 {d2\[1\],d4\[1\],d6\[1\]}, \[sl\]
+0[0-9a-f]+ <[^>]+> f3b47908 vtbl\.8 d7, {d4-d5}, d8
+0[0-9a-f]+ <[^>]+> f3142156 vbsl q1, q2, q3
+0[0-9a-f]+ <[^>]+> f3032e04 vcge\.f32 d2, d3, d4
+0[0-9a-f]+ <[^>]+> f3b52083 vcge\.s16 d2, d3, #0
+0[0-9a-f]+ <[^>]+> ee823b30 vdup\.16 d2, r3
diff --git a/gas/testsuite/gas/arm/neon-psyn.s b/gas/testsuite/gas/arm/neon-psyn.s
new file mode 100644
index 000000000000..5d412a8552f0
--- /dev/null
+++ b/gas/testsuite/gas/arm/neon-psyn.s
@@ -0,0 +1,78 @@
+ .arm
+ .syntax unified
+
+fish .qn q2
+cow .dn d2[1]
+chips .dn d2
+banana .dn d3
+
+ vmul fish.s16, fish.s16, fish.s16
+
+ vmul banana, banana, cow.s32
+ vmul d3.s32, d3.s32, d2.s32
+ vadd d2.s32, d3.s32
+ vmull fish.u32, chips.u16, chips.u16[1]
+
+X .dn D0.S16
+Y .dn D1.S16
+Z .dn Y[2]
+
+ VMLA X, Y, Z
+ VMLA X, Y, Y[2]
+
+foo .dn d5
+bar .dn d7
+foos .dn foo[1]
+
+ vadd foo, foo, foo.u32
+
+ vmov foo, bar
+ vmov d2.s16[1], r1
+ vmov d5.s32[1], r1
+ vmov foo, r2, r3
+ vmov r4, foos.s8
+ vmov r5, r6, foo
+
+baa .qn q5
+moo .dn d6
+sheep .dn d7
+chicken .dn d8
+
+ vabal baa, moo.u16, sheep.u16
+
+ vcvt q1.s32, q2.f32
+ vcvt d4.f, d5.u32, #5
+
+ vdup bar, foos.32
+ vtbl d1, {baa}, d4.8
+
+el1 .dn d4.16[1]
+el2 .dn d6.16[1]
+el3 .dn d8.16[1]
+el4 .dn d10.16[1]
+
+ vld2 {moo.32[1], sheep.32[1]}, [r10]
+ vld4 {el1, el2, el3, el4}, [r10]
+ vld3 {moo.16[], sheep.16[], chicken.16[]}, [r10]
+
+ vmov r0,d0.s16[0]
+
+el5 .qn q3.16
+el6 .qn q4.16
+
+ vld4 {el5,el6}, [r10]
+
+ vld3 {d2.s16[1], d4.s16[1], d6.s16[1]}, [r10]
+
+chicken8 .dn chicken.8
+
+ vtbl d7.8, {d4, d5}, chicken8
+
+ vbsl q1.8, q2.16, q3.8
+
+ vcge d2.32, d3.f, d4.f
+ vcge d2.16, d3.s16, #0
+
+dupme .dn d2.s16
+
+ vdup dupme, r3
diff --git a/gas/testsuite/gas/arm/noarm.d b/gas/testsuite/gas/arm/noarm.d
new file mode 100644
index 000000000000..ae34f8342f95
--- /dev/null
+++ b/gas/testsuite/gas/arm/noarm.d
@@ -0,0 +1,3 @@
+# name: Disallow ARM instructions on V7M
+# as:
+# error-output: noarm.l
diff --git a/gas/testsuite/gas/arm/noarm.l b/gas/testsuite/gas/arm/noarm.l
new file mode 100644
index 000000000000..edc59a2d5374
--- /dev/null
+++ b/gas/testsuite/gas/arm/noarm.l
@@ -0,0 +1,3 @@
+[^:]*: Assembler messages:
+[^:]*:12: Error: selected processor does not support ARM opcodes
+[^:]*:13: Error: attempt to use an ARM instruction on a Thumb-only processor -- `nop'
diff --git a/gas/testsuite/gas/arm/noarm.s b/gas/testsuite/gas/arm/noarm.s
new file mode 100644
index 000000000000..3dadd4468f14
--- /dev/null
+++ b/gas/testsuite/gas/arm/noarm.s
@@ -0,0 +1,13 @@
+ .arch armv7a
+ .syntax unified
+ .text
+func:
+ nop
+ movw r0, #0
+
+ .arch armv7
+ .thumb
+ nop
+ movw r0, #0
+ .arm
+ nop
diff --git a/gas/testsuite/gas/arm/relax_branch_align.d b/gas/testsuite/gas/arm/relax_branch_align.d
new file mode 100644
index 000000000000..e23b0951584d
--- /dev/null
+++ b/gas/testsuite/gas/arm/relax_branch_align.d
@@ -0,0 +1,13 @@
+#name: Branch relaxation with alignment.
+#objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0+000 <[^>]+> bf00 nop
+0+002 <[^>]+> f000 8080 beq.w 0+106 <[^>]*>
+0+006 <[^>]+> bf00 nop
+#...
+0+100 <[^>]+> bf00 nop
+0+102 <[^>]+> f47f af80 bne.w 0+006 <[^>]*>
+0+106 <[^>]+> bf00 nop
diff --git a/gas/testsuite/gas/arm/relax_branch_align.s b/gas/testsuite/gas/arm/relax_branch_align.s
new file mode 100644
index 000000000000..718ce4982139
--- /dev/null
+++ b/gas/testsuite/gas/arm/relax_branch_align.s
@@ -0,0 +1,17 @@
+ .syntax unified
+ .thumb
+fn:
+ nop
+.L191:
+ beq .L192
+.L46:
+ nop
+ .align 2
+.L54:
+ .rept 62
+ .word 0
+ .endr
+ nop
+ bne .L46
+.L192:
+ nop
diff --git a/gas/testsuite/gas/arm/srs-arm.d b/gas/testsuite/gas/arm/srs-arm.d
new file mode 100644
index 000000000000..844c692dd9fc
--- /dev/null
+++ b/gas/testsuite/gas/arm/srs-arm.d
@@ -0,0 +1,2 @@
+# name: SRS instruction in ARM mode
+# error-output: srs-arm.l
diff --git a/gas/testsuite/gas/arm/srs-arm.l b/gas/testsuite/gas/arm/srs-arm.l
new file mode 100644
index 000000000000..ad992f8f7177
--- /dev/null
+++ b/gas/testsuite/gas/arm/srs-arm.l
@@ -0,0 +1,5 @@
+[^:]*: Assembler messages:
+[^:]*:12: Error: SRS base register must be r13 -- `srsdb r4,#13'
+[^:]*:13: Error: SRS base register must be r13 -- `srsda r4,#13'
+[^:]*:14: Error: SRS base register must be r13 -- `srsia r4,#13'
+[^:]*:15: Error: SRS base register must be r13 -- `srsib r4,#13'
diff --git a/gas/testsuite/gas/arm/srs-arm.s b/gas/testsuite/gas/arm/srs-arm.s
new file mode 100644
index 000000000000..7d00fc8f0d6c
--- /dev/null
+++ b/gas/testsuite/gas/arm/srs-arm.s
@@ -0,0 +1,16 @@
+ .arch armv6
+
+foo:
+ srsdb r13, #13
+ srsdb r13!, #13
+ srsia r13, #13
+ srsia r13!, #13
+ srsda r13, #13
+ srsda r13!, #13
+ srsib r13, #13
+ srsib r13!, #13
+ srsdb r4, #13
+ srsda r4, #13
+ srsia r4, #13
+ srsib r4, #13
+
diff --git a/gas/testsuite/gas/arm/srs-t2.d b/gas/testsuite/gas/arm/srs-t2.d
new file mode 100644
index 000000000000..dfa57dbd8af3
--- /dev/null
+++ b/gas/testsuite/gas/arm/srs-t2.d
@@ -0,0 +1,2 @@
+# name: SRS instruction in Thumb-2 mode
+# error-output: srs-t2.l
diff --git a/gas/testsuite/gas/arm/srs-t2.l b/gas/testsuite/gas/arm/srs-t2.l
new file mode 100644
index 000000000000..f0703759193c
--- /dev/null
+++ b/gas/testsuite/gas/arm/srs-t2.l
@@ -0,0 +1,3 @@
+[^:]*: Assembler messages:
+[^:]*:8: Error: SRS base register must be r13 -- `srsdb r4,#13'
+[^:]*:9: Error: SRS base register must be r13 -- `srsia r4,#13'
diff --git a/gas/testsuite/gas/arm/srs-t2.s b/gas/testsuite/gas/arm/srs-t2.s
new file mode 100644
index 000000000000..7132626a59a7
--- /dev/null
+++ b/gas/testsuite/gas/arm/srs-t2.s
@@ -0,0 +1,10 @@
+ .arch armv6t2
+
+foo:
+ srsdb r13, #13
+ srsdb r13!, #13
+ srsia r13, #13
+ srsia r13!, #13
+ srsdb r4, #13
+ srsia r4, #13
+
diff --git a/gas/testsuite/gas/arm/svc.d b/gas/testsuite/gas/arm/svc.d
index fdeb9302083b..697756c7965d 100644
--- a/gas/testsuite/gas/arm/svc.d
+++ b/gas/testsuite/gas/arm/svc.d
@@ -1,6 +1,5 @@
# name: SWI/SVC instructions
# objdump: -dr --prefix-addresses --show-raw-insn
-# skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
.*: +file format .*arm.*
diff --git a/gas/testsuite/gas/arm/tcompat.d b/gas/testsuite/gas/arm/tcompat.d
index 47e9d89d9f94..be7afae7a40c 100644
--- a/gas/testsuite/gas/arm/tcompat.d
+++ b/gas/testsuite/gas/arm/tcompat.d
@@ -12,30 +12,30 @@ Disassembly of section .text:
0+04 <[^>]*> e1a09000 ? mov r9, r0
0+08 <[^>]*> e1a00009 ? mov r0, r9
0+0c <[^>]*> e1a0c00e ? mov ip, lr
-0+10 <[^>]*> 91b09019 ? movlss r9, r9, lsl r0
-0+14 <[^>]*> 91a00910 ? movls r0, r0, lsl r9
-0+18 <[^>]*> e1b00880 ? movs r0, r0, lsl #17
-0+1c <[^>]*> e1a00889 ? mov r0, r9, lsl #17
-0+20 <[^>]*> 91b09039 ? movlss r9, r9, lsr r0
-0+24 <[^>]*> 91a00930 ? movls r0, r0, lsr r9
-0+28 <[^>]*> e1b008a0 ? movs r0, r0, lsr #17
-0+2c <[^>]*> e1a008a9 ? mov r0, r9, lsr #17
-0+30 <[^>]*> 91b09059 ? movlss r9, r9, asr r0
-0+34 <[^>]*> 91a00950 ? movls r0, r0, asr r9
-0+38 <[^>]*> e1b008c0 ? movs r0, r0, asr #17
-0+3c <[^>]*> e1a008c9 ? mov r0, r9, asr #17
-0+40 <[^>]*> 91b09079 ? movlss r9, r9, ror r0
-0+44 <[^>]*> 91a00970 ? movls r0, r0, ror r9
-0+48 <[^>]*> e1b008e0 ? movs r0, r0, ror #17
-0+4c <[^>]*> e1a008e9 ? mov r0, r9, ror #17
+0+10 <[^>]*> 91b09019 ? lslsls r9, r9, r0
+0+14 <[^>]*> 91a00910 ? lslls r0, r0, r9
+0+18 <[^>]*> e1b00880 ? lsls r0, r0, #17
+0+1c <[^>]*> e1a00889 ? lsl r0, r9, #17
+0+20 <[^>]*> 91b09039 ? lsrsls r9, r9, r0
+0+24 <[^>]*> 91a00930 ? lsrls r0, r0, r9
+0+28 <[^>]*> e1b008a0 ? lsrs r0, r0, #17
+0+2c <[^>]*> e1a008a9 ? lsr r0, r9, #17
+0+30 <[^>]*> 91b09059 ? asrsls r9, r9, r0
+0+34 <[^>]*> 91a00950 ? asrls r0, r0, r9
+0+38 <[^>]*> e1b008c0 ? asrs r0, r0, #17
+0+3c <[^>]*> e1a008c9 ? asr r0, r9, #17
+0+40 <[^>]*> 91b09079 ? rorsls r9, r9, r0
+0+44 <[^>]*> 91a00970 ? rorls r0, r0, r9
+0+48 <[^>]*> e1b008e0 ? rors r0, r0, #17
+0+4c <[^>]*> e1a008e9 ? ror r0, r9, #17
0+50 <[^>]*> e2690000 ? rsb r0, r9, #0 ; 0x0
0+54 <[^>]*> e2709000 ? rsbs r9, r0, #0 ; 0x0
0+58 <[^>]*> 92600000 ? rsbls r0, r0, #0 ; 0x0
-0+5c <[^>]*> 92799000 ? rsblss r9, r9, #0 ; 0x0
-0+60 <[^>]*> e92d000e ? stmdb sp!, {r1, r2, r3}
-0+64 <[^>]*> 992d8154 ? stmlsdb sp!, {r2, r4, r6, r8, pc}
-0+68 <[^>]*> e8bd000e ? ldmia sp!, {r1, r2, r3}
-0+6c <[^>]*> 98bd8154 ? ldmlsia sp!, {r2, r4, r6, r8, pc}
+0+5c <[^>]*> 92799000 ? rsbsls r9, r9, #0 ; 0x0
+0+60 <[^>]*> e92d000e ? push {r1, r2, r3}
+0+64 <[^>]*> 992d8154 ? pushls {r2, r4, r6, r8, pc}
+0+68 <[^>]*> e8bd000e ? pop {r1, r2, r3}
+0+6c <[^>]*> 98bd8154 ? popls {r2, r4, r6, r8, pc}
0+70 <[^>]*> e0000001 ? and r0, r0, r1
0+74 <[^>]*> e0200001 ? eor r0, r0, r1
0+78 <[^>]*> e0400001 ? sub r0, r0, r1
diff --git a/gas/testsuite/gas/arm/thumb.d b/gas/testsuite/gas/arm/thumb.d
index d3f815a2986a..7f9b253a443f 100644
--- a/gas/testsuite/gas/arm/thumb.d
+++ b/gas/testsuite/gas/arm/thumb.d
@@ -50,7 +50,7 @@ Disassembly of section \.text:
0+050 <[^>]+> 46c0 nop \(mov r8, r8\)
0+052 <[^>]+> 4738 bx r7
0+054 <[^>]+> 4740 bx r8
-0+056 <[^>]+> 0000 lsls r0, r0, #0
+0+056 <[^>]+> 46c0 nop \(mov r8, r8\)
0+058 <[^>]+> 4778 bx pc
0+05a <[^>]+> 4b20 ldr r3, \[pc, #128\] \(0+0dc <[^>]+>\)
0+05c <[^>]+> 4c02 ldr r4, \[pc, #8\] \(0+068 <[^>]+>\)
@@ -58,7 +58,7 @@ Disassembly of section \.text:
0+060 <[^>]+> 5511 strb r1, \[r2, r4\]
0+062 <[^>]+> 59f5 ldr r5, \[r6, r7\]
0+064 <[^>]+> 5d62 ldrb r2, \[r4, r5\]
- \.\.\.
+0+066 <[^>]+> 46c0 nop \(mov r8, r8\)
0+068 <[^>]+> 52d1 strh r1, \[r2, r3\]
0+06a <[^>]+> 5a23 ldrh r3, \[r4, r0\]
0+06c <[^>]+> 57f1 ldrsb r1, \[r6, r7\]
@@ -75,7 +75,7 @@ Disassembly of section \.text:
0+082 <[^>]+> 93ff str r3, \[sp, #1020\]
0+084 <[^>]+> 990b ldr r1, \[sp, #44\]
0+086 <[^>]+> 9a00 ldr r2, \[sp, #0\]
-0+088 <[^>]+> a7ff add r7, pc, #1020 \(adr r7,0+488 <[^>]+>\)
+0+088 <[^>]+> a7ff add r7, pc, #1020 \(adr r7, 0+488 <[^>]+>\)
0+08a <[^>]+> ac80 add r4, sp, #512
0+08c <[^>]+> b043 add sp, #268
0+08e <[^>]+> b09a sub sp, #104
@@ -111,11 +111,11 @@ Disassembly of section \.text:
0+0ca <[^>]+> b07f add sp, #508
0+0cc <[^>]+> b0ff sub sp, #508
0+0ce <[^>]+> a8ff add r0, sp, #1020
-0+0d0 <[^>]+> a0ff add r0, pc, #1020 \(adr r0,0+4d0 <[^>]+>\)
+0+0d0 <[^>]+> a0ff add r0, pc, #1020 \(adr r0, 0+4d0 <[^>]+>\)
0+0d2 <[^>]+> b01a add sp, #104
0+0d4 <[^>]+> b09a sub sp, #104
0+0d6 <[^>]+> a81a add r0, sp, #104
-0+0d8 <[^>]+> a01a add r0, pc, #104 \(adr r0,0+144 <[^>]+>\)
+0+0d8 <[^>]+> a01a add r0, pc, #104 \(adr r0, 0+144 <[^>]+>\)
0+0da <[^>]+> 3168 adds r1, #104
0+0dc <[^>]+> 2668 movs r6, #104
0+0de <[^>]+> 2f68 cmp r7, #104
@@ -127,14 +127,14 @@ Disassembly of section \.text:
0+0f0 <[^>]+> eb00000f bl 0+134 <[^>]+>
0+0f4 <[^>]+> e12fff10 bx r0
0+0f8 <[^>]+> ef123456 (swi|svc) 0x00123456
-0+0fc <[^>]+> a004 add r0, pc, #16 \(adr r0,0+110 <[^>]+>\)
+0+0fc <[^>]+> a004 add r0, pc, #16 \(adr r0, 0+110 <[^>]+>\)
0+0fe <[^>]+> e77f b.n 0+000 <[^>]+>
0+100 <[^>]+> e018 b.n 0+134 <[^>]+>
0+102 <[^>]+> f7ff ff7d bl 0+000 <[^>]+>
0+106 <[^>]+> f000 f815 bl 0+134 <[^>]+>
0+10a <[^>]+> 4700 bx r0
0+10c <[^>]+> dfff (swi|svc) 255
- \.\.\.
+0+10e <[^>]+> 46c0 nop \(mov r8, r8\)
0+110 <[^>]+> d010 beq.n 0+134 <[^>]+>
0+112 <[^>]+> d10f bne.n 0+134 <[^>]+>
0+114 <[^>]+> d20e bcs.n 0+134 <[^>]+>
diff --git a/gas/testsuite/gas/arm/thumb1_unified.d b/gas/testsuite/gas/arm/thumb1_unified.d
new file mode 100644
index 000000000000..c2fdf306325a
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumb1_unified.d
@@ -0,0 +1,20 @@
+# name: Thumb-1 unified
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> 200c movs r0, #12
+0[0-9a-f]+ <[^>]+> 1cd1 adds r1, r2, #3
+0[0-9a-f]+ <[^>]+> 1ed1 subs r1, r2, #3
+0[0-9a-f]+ <[^>]+> 3364 adds r3, #100
+0[0-9a-f]+ <[^>]+> 3c83 subs r4, #131
+0[0-9a-f]+ <[^>]+> 2d27 cmp r5, #39
+0[0-9a-f]+ <[^>]+> a103 add r1, pc, #12 \(adr [^)]*\)
+0[0-9a-f]+ <[^>]+> 4a03 ldr r2, \[pc, #12\] \([^)]*\)
+0[0-9a-f]+ <[^>]+> 6863 ldr r3, \[r4, #4\]
+0[0-9a-f]+ <[^>]+> 9d01 ldr r5, \[sp, #4\]
+0[0-9a-f]+ <[^>]+> b001 add sp, #4
+0[0-9a-f]+ <[^>]+> b081 sub sp, #4
+0[0-9a-f]+ <[^>]+> af01 add r7, sp, #4
+0[0-9a-f]+ <[^>]+> 4251 negs r1, r2
diff --git a/gas/testsuite/gas/arm/thumb1_unified.s b/gas/testsuite/gas/arm/thumb1_unified.s
new file mode 100644
index 000000000000..c8da6ec5aa8e
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumb1_unified.s
@@ -0,0 +1,25 @@
+.text
+.arch armv4t
+.syntax unified
+.thumb
+foo:
+movs r0, #12
+adds r1, r2, #3
+subs r1, r2, #3
+adds r3, r3, #0x64
+subs r4, r4, #0x83
+cmp r5, #0x27
+
+adr r1, bar
+ldr r2, bar
+ldr r3, [r4, #4]
+ldr r5, [sp, #4]
+add sp, sp, #4
+sub sp, sp, #4
+add r7, sp, #4
+
+rsbs r1, r2, #0
+
+.align 2
+bar:
+
diff --git a/gas/testsuite/gas/arm/thumb2_add.d b/gas/testsuite/gas/arm/thumb2_add.d
new file mode 100644
index 000000000000..5100bb691a7a
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumb2_add.d
@@ -0,0 +1,30 @@
+# as: -march=armv6kt2
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0+000 <[^>]+> f60f 0000 addw r0, pc, #2048 ; 0x800
+0+004 <[^>]+> f20f 0900 addw r9, pc, #0 ; 0x0
+0+008 <[^>]+> f20f 4900 addw r9, pc, #1024 ; 0x400
+0+00c <[^>]+> f509 6880 add.w r8, r9, #1024 ; 0x400
+0+010 <[^>]+> f209 1801 addw r8, r9, #257 ; 0x101
+0+014 <[^>]+> f201 1301 addw r3, r1, #257 ; 0x101
+0+018 <[^>]+> f6af 0000 subw r0, pc, #2048 ; 0x800
+0+01c <[^>]+> f2af 0900 subw r9, pc, #0 ; 0x0
+0+020 <[^>]+> f2af 4900 subw r9, pc, #1024 ; 0x400
+0+024 <[^>]+> f5a9 6880 sub.w r8, r9, #1024 ; 0x400
+0+028 <[^>]+> f2a9 1801 subw r8, r9, #257 ; 0x101
+0+02c <[^>]+> f2a1 1301 subw r3, r1, #257 ; 0x101
+0+030 <[^>]+> f103 0301 add.w r3, r3, #1 ; 0x1
+0+034 <[^>]+> f1a3 0301 sub.w r3, r3, #1 ; 0x1
+0+038 <[^>]+> b0c0 sub sp, #256
+0+03a <[^>]+> f5ad 7d00 sub.w sp, sp, #512 ; 0x200
+0+03e <[^>]+> f2ad 1d01 subw sp, sp, #257 ; 0x101
+0+042 <[^>]+> b040 add sp, #256
+0+044 <[^>]+> f50d 7d00 add.w sp, sp, #512 ; 0x200
+0+048 <[^>]+> f20d 1d01 addw sp, sp, #257 ; 0x101
+0+04c <[^>]+> a840 add r0, sp, #256
+0+04e <[^>]+> f50d 6580 add.w r5, sp, #1024 ; 0x400
+0+052 <[^>]+> f20d 1901 addw r9, sp, #257 ; 0x101
+0+056 <[^>]+> 4271 negs r1, r6
diff --git a/gas/testsuite/gas/arm/thumb2_add.s b/gas/testsuite/gas/arm/thumb2_add.s
new file mode 100644
index 000000000000..a3b178a05291
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumb2_add.s
@@ -0,0 +1,31 @@
+ .syntax unified
+ .text
+ .align 2
+ .global thumb2_add
+ .thumb
+ .thumb_func
+thumb2_add:
+ add r0, pc, #0x800
+ add r9, pc, #0
+ add r9, pc, #0x400
+ add r8, r9, #0x400
+ add r8, r9, #0x101
+ add r3, r1, #0x101
+ sub r0, pc, #0x800
+ sub r9, pc, #0
+ sub r9, pc, #0x400
+ sub r8, r9, #0x400
+ sub r8, r9, #0x101
+ sub r3, r1, #0x101
+ add r3, #1
+ sub r3, #1
+ sub sp, sp, #0x100
+ sub sp, sp, #0x200
+ sub sp, sp, #0x101
+ add sp, sp, #0x100
+ add sp, sp, #0x200
+ add sp, sp, #0x101
+ add r0, sp, #0x100
+ add r5, sp, #0x400
+ add r9, sp, #0x101
+ rsbs r1, r6, #0
diff --git a/gas/testsuite/gas/arm/thumb2_bcond.d b/gas/testsuite/gas/arm/thumb2_bcond.d
index 8ab75320e1a3..02903a954191 100644
--- a/gas/testsuite/gas/arm/thumb2_bcond.d
+++ b/gas/testsuite/gas/arm/thumb2_bcond.d
@@ -1,26 +1,25 @@
# as:
# objdump: -dr --prefix-addresses --show-raw-insn
-# skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
.*: +file format .*arm.*
Disassembly of section .text:
0+000 <[^>]+> bf18 it ne
-0+002 <[^>]+> e7fd b(|ne).n 0+0 <[^>]+>
+0+002 <[^>]+> e7fd bne.n 0+0 <[^>]+>
0+004 <[^>]+> bf38 it cc
-0+006 <[^>]+> f7ff bffb b(|cc).w 0+0 <[^>]+>
+0+006 <[^>]+> f7ff bffb bcc.w 0+0 <[^>]+>
0+00a <[^>]+> bf28 it cs
-0+00c <[^>]+> f7ff fff8 bl(|cs) 0+0 <[^>]+>
+0+00c <[^>]+> f7ff fff8 blcs 0+0 <[^>]+>
0+010 <[^>]+> bfb8 it lt
-0+012 <[^>]+> 47a8 blx(|lr) r5
+0+012 <[^>]+> 47a8 blxlt r5
0+014 <[^>]+> bf08 it eq
-0+016 <[^>]+> 4740 bx(|eq) r8
+0+016 <[^>]+> 4740 bxeq r8
0+018 <[^>]+> bfc8 it gt
-0+01a <[^>]+> e8d4 f001 tbb(|gt) \[r4, r1\]
+0+01a <[^>]+> e8d4 f001 tbbgt \[r4, r1\]
0+01e <[^>]+> bfb8 it lt
-0+020 <[^>]+> df00 svc(|lt) 0
+0+020 <[^>]+> df00 svclt 0
0+022 <[^>]+> bfdc itt le
0+024 <[^>]+> be00 bkpt 0x0000
-0+026 <[^>]+> bf00 nop
+0+026 <[^>]+> bf00 nople
0+028 <[^>]+> bf00 nop
0+02a <[^>]+> bf00 nop
diff --git a/gas/testsuite/gas/arm/thumb2_it_bad.d b/gas/testsuite/gas/arm/thumb2_it_bad.d
index f905c9f5e73b..1cca8b9650cb 100644
--- a/gas/testsuite/gas/arm/thumb2_it_bad.d
+++ b/gas/testsuite/gas/arm/thumb2_it_bad.d
@@ -1,4 +1,3 @@
#name: Invalid IT instructions
#as:
-#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
#error-output: thumb2_it_bad.l
diff --git a/gas/testsuite/gas/arm/thumb2_ldmstm.d b/gas/testsuite/gas/arm/thumb2_ldmstm.d
new file mode 100644
index 000000000000..2f50486489c2
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumb2_ldmstm.d
@@ -0,0 +1,27 @@
+# name: Thumb-2 LDM/STM single reg
+# as: -march=armv6t2
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> bc01 pop {r0}
+0[0-9a-f]+ <[^>]+> f85d 8b04 ldr.w r8, \[sp\], #4
+0[0-9a-f]+ <[^>]+> f8d1 9000 ldr.w r9, \[r1\]
+0[0-9a-f]+ <[^>]+> f852 cb04 ldr.w ip, \[r2\], #4
+0[0-9a-f]+ <[^>]+> f85d 2d04 ldr.w r2, \[sp, #-4\]!
+0[0-9a-f]+ <[^>]+> f85d 8d04 ldr.w r8, \[sp, #-4\]!
+0[0-9a-f]+ <[^>]+> f856 4c04 ldr.w r4, \[r6, #-4\]
+0[0-9a-f]+ <[^>]+> f856 8c04 ldr.w r8, \[r6, #-4\]
+0[0-9a-f]+ <[^>]+> f852 4d04 ldr.w r4, \[r2, #-4\]!
+0[0-9a-f]+ <[^>]+> f852 cd04 ldr.w ip, \[r2, #-4\]!
+0[0-9a-f]+ <[^>]+> b408 push {r3}
+0[0-9a-f]+ <[^>]+> f84d 9b04 str.w r9, \[sp\], #4
+0[0-9a-f]+ <[^>]+> f8c3 c000 str.w ip, \[r3\]
+0[0-9a-f]+ <[^>]+> f844 cb04 str.w ip, \[r4\], #4
+0[0-9a-f]+ <[^>]+> f84d 3d04 str.w r3, \[sp, #-4\]!
+0[0-9a-f]+ <[^>]+> f84d 9d04 str.w r9, \[sp, #-4\]!
+0[0-9a-f]+ <[^>]+> f847 5c04 str.w r5, \[r7, #-4\]
+0[0-9a-f]+ <[^>]+> f846 cc04 str.w ip, \[r6, #-4\]
+0[0-9a-f]+ <[^>]+> f846 bd04 str.w fp, \[r6, #-4\]!
+0[0-9a-f]+ <[^>]+> f845 8d04 str.w r8, \[r5, #-4\]!
diff --git a/gas/testsuite/gas/arm/thumb2_ldmstm.s b/gas/testsuite/gas/arm/thumb2_ldmstm.s
new file mode 100644
index 000000000000..fd4410af3c4a
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumb2_ldmstm.s
@@ -0,0 +1,24 @@
+.syntax unified
+.thumb
+ldmstm:
+ ldmia sp!, {r0}
+ ldmia sp!, {r8}
+ ldmia r1, {r9}
+ ldmia r2!, {ip}
+ ldmdb sp!, {r2}
+ ldmdb sp!, {r8}
+ ldmdb r6, {r4}
+ ldmdb r6, {r8}
+ ldmdb r2!, {r4}
+ ldmdb r2!, {ip}
+ stmia sp!, {r3}
+ stmia sp!, {r9}
+ stmia r3, {ip}
+ stmia r4!, {ip}
+ stmdb sp!, {r3}
+ stmdb sp!, {r9}
+ stmdb r7, {r5}
+ stmdb r6, {ip}
+ stmdb r6!, {fp}
+ stmdb r5!, {r8}
+
diff --git a/gas/testsuite/gas/arm/thumb2_pool.d b/gas/testsuite/gas/arm/thumb2_pool.d
index 7bf0c605d5fd..752da7fb6aa7 100644
--- a/gas/testsuite/gas/arm/thumb2_pool.d
+++ b/gas/testsuite/gas/arm/thumb2_pool.d
@@ -1,5 +1,7 @@
# as: -march=armv6t2
# objdump: -dr --prefix-addresses --show-raw-insn
+# This test is only valid on ELF based ports.
+#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
.*: +file format .*arm.*
@@ -11,5 +13,4 @@ Disassembly of section .text:
0+00c <[^>]+> bf00 nop
0+00e <[^>]+> f8df 5004 ldr\.w r5, \[pc, #4\] ; 00+14 <[^>]+>
0+012 <[^>]+> 4900 ldr r1, \[pc, #0\] \(00+14 <[^>]+>\)
-0+014 <[^>]+> (5678|1234) .*
-0+016 <[^>]+> (1234|5678) .*
+0+014 <[^>]+> 12345678 ? .word 0x12345678
diff --git a/gas/testsuite/gas/arm/thumb2_relax.d b/gas/testsuite/gas/arm/thumb2_relax.d
index 48cd1f21f806..327ef42b5347 100644
--- a/gas/testsuite/gas/arm/thumb2_relax.d
+++ b/gas/testsuite/gas/arm/thumb2_relax.d
@@ -20,7 +20,7 @@ Disassembly of section .text:
0+02e <[^>]+> f89f 800c ldrb.w r8, \[pc, #12\] ; 0+03c <[^>]+>
0+032 <[^>]+> f89f 100a ldrb.w r1, \[pc, #10\] ; 0+03e <[^>]+>
0+036 <[^>]+> f81f 1038 ldrb.w r1, \[pc, #-56\] ; 0+000 <[^>]+>
-0+03a <[^>]+> 0000 lsls r0, r0, #0
+0+03a <[^>]+> 46c0 nop \(mov r8, r8\)
0+03c <[^>]+> bf00 nop
0+03e <[^>]+> f995 1000 ldrsb.w r1, \[r5\]
0+042 <[^>]+> f995 1023 ldrsb.w r1, \[r5, #35\]
@@ -89,7 +89,7 @@ Disassembly of section .text:
0+126 <[^>]+> f8df 800c ldr.w r8, \[pc, #12\] ; 0+134 <[^>]+>
0+12a <[^>]+> f8df 100a ldr.w r1, \[pc, #10\] ; 0+136 <[^>]+>
0+12e <[^>]+> f85f 1036 ldr.w r1, \[pc, #-54\] ; 0+0fa <[^>]+>
-0+132 <[^>]+> 0000 lsls r0, r0, #0
+0+132 <[^>]+> 46c0 nop \(mov r8, r8\)
0+134 <[^>]+> bf00 nop
0+136 <[^>]+> 7029 strb r1, \[r5, #0\]
0+138 <[^>]+> f885 1023 strb.w r1, \[r5, #35\]
@@ -142,7 +142,7 @@ Disassembly of section .text:
0+1e0 <[^>]+> f8cf 1006 str.w r1, \[pc, #6\] ; 0+1ea <[^>]+>
0+1e4 <[^>]+> f84f 103a str.w r1, \[pc, #-58\] ; 0+1ae <[^>]+>
0+1e8 <[^>]+> bf00 nop
-0+1ea <[^>]+> a104 add r1, pc, #16 \(adr r1,0+1fc <[^>]+>\)
+0+1ea <[^>]+> a104 add r1, pc, #16 \(adr r1, 0+1fc <[^>]+>\)
0+1ec <[^>]+> f20f 010c addw r1, pc, #12 ; 0xc
0+1f0 <[^>]+> f20f 0808 addw r8, pc, #8 ; 0x8
0+1f4 <[^>]+> f20f 0106 addw r1, pc, #6 ; 0x6
diff --git a/gas/testsuite/gas/arm/thumb32.d b/gas/testsuite/gas/arm/thumb32.d
index 2977779aefdd..0d96818858e2 100644
--- a/gas/testsuite/gas/arm/thumb32.d
+++ b/gas/testsuite/gas/arm/thumb32.d
@@ -3,6 +3,7 @@
# objdump: -dr --prefix-addresses --show-raw-insn
# The arm-aout and arm-pe ports do not support Thumb branch relocations.
# not-target: *-*-*aout* *-*-pe
+# stderr: thumb32.l
.*: +file format .*arm.*
@@ -62,9 +63,9 @@ Disassembly of section .text:
0[0-9a-f]+ <[^>]+> eb00 0800 add\.w r8, r0, r0
0[0-9a-f]+ <[^>]+> 4401 add r1, r0
0[0-9a-f]+ <[^>]+> 4408 add r0, r1
-0[0-9a-f]+ <[^>]+> a000 add r0, pc, #0 \(adr r0,[0-9a-f]+ <[^>]+>\)
-0[0-9a-f]+ <[^>]+> a500 add r5, pc, #0 \(adr r5,[0-9a-f]+ <[^>]+>\)
-0[0-9a-f]+ <[^>]+> a081 add r0, pc, #516 \(adr r0,[0-9a-f]+ <[^>]+>\)
+0[0-9a-f]+ <[^>]+> a000 add r0, pc, #0 \(adr r0, [0-9a-f]+ <[^>]+>\)
+0[0-9a-f]+ <[^>]+> a500 add r5, pc, #0 \(adr r5, [0-9a-f]+ <[^>]+>\)
+0[0-9a-f]+ <[^>]+> a081 add r0, pc, #516 \(adr r0, [0-9a-f]+ <[^>]+>\)
0[0-9a-f]+ <[^>]+> a800 add r0, sp, #0
0[0-9a-f]+ <[^>]+> ad00 add r5, sp, #0
0[0-9a-f]+ <[^>]+> a881 add r0, sp, #516
@@ -349,163 +350,163 @@ Disassembly of section .text:
0[0-9a-f]+ <[^>]+> bf90 nop \{9\}
0[0-9a-f]+ <[^>]+> f3af 8081 nop\.w \{129\}
0[0-9a-f]+ <[^>]+> bf08 it eq
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf18 it ne
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf28 it cs
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopcs
0[0-9a-f]+ <[^>]+> bf28 it cs
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopcs
0[0-9a-f]+ <[^>]+> bf38 it cc
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopcc
0[0-9a-f]+ <[^>]+> bf38 it cc
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopcc
0[0-9a-f]+ <[^>]+> bf38 it cc
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopcc
0[0-9a-f]+ <[^>]+> bf48 it mi
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopmi
0[0-9a-f]+ <[^>]+> bf58 it pl
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 noppl
0[0-9a-f]+ <[^>]+> bf68 it vs
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopvs
0[0-9a-f]+ <[^>]+> bf78 it vc
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopvc
0[0-9a-f]+ <[^>]+> bf88 it hi
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nophi
0[0-9a-f]+ <[^>]+> bfa8 it ge
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopge
0[0-9a-f]+ <[^>]+> bfb8 it lt
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 noplt
0[0-9a-f]+ <[^>]+> bfc8 it gt
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopgt
0[0-9a-f]+ <[^>]+> bfd8 it le
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nople
0[0-9a-f]+ <[^>]+> bfe8 it al
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopal
0[0-9a-f]+ <[^>]+> bf04 itt eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf0c ite eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf02 ittt eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf0a itet eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf06 itte eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf0e itee eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf01 itttt eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf09 itett eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf05 ittet eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf03 ittte eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf07 ittee eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf0b itete eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf0d iteet eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf0f iteee eq
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf1c itt ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf14 ite ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf1e ittt ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf16 itet ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf1a itte ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf12 itee ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf1f itttt ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf17 itett ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf1b ittet ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf1d ittte ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf19 ittee ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf15 itete ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> bf13 iteet ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopne
0[0-9a-f]+ <[^>]+> bf11 iteee ne
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
-0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> bf00 nopne
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
+0[0-9a-f]+ <[^>]+> bf00 nopeq
0[0-9a-f]+ <[^>]+> f895 f000 pld \[r5\]
0[0-9a-f]+ <[^>]+> f895 f330 pld \[r5, #816\]
0[0-9a-f]+ <[^>]+> f815 fc30 pld \[r5, #-48\]
@@ -949,8 +950,83 @@ Disassembly of section .text:
0[0-9a-f]+ <[^>]+> e890 0300 ldmia.w r0, \{r8, r9\}
0[0-9a-f]+ <[^>]+> e880 0300 stmia.w r0, \{r8, r9\}
0[0-9a-f]+ <[^>]+> bf01 itttt eq
-0[0-9a-f]+ <[^>]+> c806 ldmia r0!, \{r1, r2\}
-0[0-9a-f]+ <[^>]+> c006 stmia r0!, \{r1, r2\}
-0[0-9a-f]+ <[^>]+> e890 0300 ldmia.w r0, \{r8, r9\}
-0[0-9a-f]+ <[^>]+> e880 0300 stmia.w r0, \{r8, r9\}
+0[0-9a-f]+ <[^>]+> c806 ldmiaeq r0!, \{r1, r2\}
+0[0-9a-f]+ <[^>]+> c006 stmiaeq r0!, \{r1, r2\}
+0[0-9a-f]+ <[^>]+> e890 0300 ldmiaeq.w r0, \{r8, r9\}
+0[0-9a-f]+ <[^>]+> e880 0300 stmiaeq.w r0, \{r8, r9\}
+0[0-9a-f]+ <[^>]+> bf00 nop
+0[0-9a-f]+ <[^>]+> e98d c010 srsia sp, #16
+0[0-9a-f]+ <[^>]+> e80d c010 srsdb sp, #16
+0[0-9a-f]+ <[^>]+> e9ad c015 srsia sp!, #21
+0[0-9a-f]+ <[^>]+> e9ad c00a srsia sp!, #10
+0[0-9a-f]+ <[^>]+> f3de 8f00 subs pc, lr, #0
+0[0-9a-f]+ <[^>]+> f3de 8f00 subs pc, lr, #0
+0[0-9a-f]+ <[^>]+> f3de 8f04 subs pc, lr, #4
+0[0-9a-f]+ <[^>]+> f3de 8fff subs pc, lr, #255
+0[0-9a-f]+ <[^>]+> e9f9 240c ldrd r2, r4, \[r9, #48\]!
+0[0-9a-f]+ <[^>]+> e979 240c ldrd r2, r4, \[r9, #-48\]!
+0[0-9a-f]+ <[^>]+> e9e9 240c strd r2, r4, \[r9, #48\]!
+0[0-9a-f]+ <[^>]+> e969 240c strd r2, r4, \[r9, #-48\]!
+0[0-9a-f]+ <[^>]+> e8f9 240c ldrd r2, r4, \[r9\], #48
+0[0-9a-f]+ <[^>]+> e879 240c ldrd r2, r4, \[r9\], #-48
+0[0-9a-f]+ <[^>]+> e8e9 240c strd r2, r4, \[r9\], #48
+0[0-9a-f]+ <[^>]+> e869 240c strd r2, r4, \[r9\], #-48
+0[0-9a-f]+ <[^>]+> f8d5 1301 ldr.w r1, \[r5, #769]
+0[0-9a-f]+ <[^>]+> f855 1f30 ldr.w r1, \[r5, #48]!
+0[0-9a-f]+ <[^>]+> f855 1d30 ldr.w r1, \[r5, #-48]!
+0[0-9a-f]+ <[^>]+> f855 1b30 ldr.w r1, \[r5\], #48
+0[0-9a-f]+ <[^>]+> f855 1930 ldr.w r1, \[r5\], #-48
+0[0-9a-f]+ <[^>]+> f855 1009 ldr.w r1, \[r5, r9\]
+0[0-9a-f]+ <[^>]+> f895 1301 ldrb.w r1, \[r5, #769]
+0[0-9a-f]+ <[^>]+> f815 1f30 ldrb.w r1, \[r5, #48]!
+0[0-9a-f]+ <[^>]+> f815 1d30 ldrb.w r1, \[r5, #-48]!
+0[0-9a-f]+ <[^>]+> f815 1b30 ldrb.w r1, \[r5\], #48
+0[0-9a-f]+ <[^>]+> f815 1930 ldrb.w r1, \[r5\], #-48
+0[0-9a-f]+ <[^>]+> f815 1009 ldrb.w r1, \[r5, r9\]
+0[0-9a-f]+ <[^>]+> f995 1301 ldrsb.w r1, \[r5, #769]
+0[0-9a-f]+ <[^>]+> f915 1f30 ldrsb.w r1, \[r5, #48]!
+0[0-9a-f]+ <[^>]+> f915 1d30 ldrsb.w r1, \[r5, #-48]!
+0[0-9a-f]+ <[^>]+> f915 1b30 ldrsb.w r1, \[r5\], #48
+0[0-9a-f]+ <[^>]+> f915 1930 ldrsb.w r1, \[r5\], #-48
+0[0-9a-f]+ <[^>]+> f915 1009 ldrsb.w r1, \[r5, r9\]
+0[0-9a-f]+ <[^>]+> f8b5 1301 ldrh.w r1, \[r5, #769]
+0[0-9a-f]+ <[^>]+> f835 1f30 ldrh.w r1, \[r5, #48]!
+0[0-9a-f]+ <[^>]+> f835 1d30 ldrh.w r1, \[r5, #-48]!
+0[0-9a-f]+ <[^>]+> f835 1b30 ldrh.w r1, \[r5\], #48
+0[0-9a-f]+ <[^>]+> f835 1930 ldrh.w r1, \[r5\], #-48
+0[0-9a-f]+ <[^>]+> f835 1009 ldrh.w r1, \[r5, r9\]
+0[0-9a-f]+ <[^>]+> f9b5 1301 ldrsh.w r1, \[r5, #769]
+0[0-9a-f]+ <[^>]+> f935 1f30 ldrsh.w r1, \[r5, #48]!
+0[0-9a-f]+ <[^>]+> f935 1d30 ldrsh.w r1, \[r5, #-48]!
+0[0-9a-f]+ <[^>]+> f935 1b30 ldrsh.w r1, \[r5\], #48
+0[0-9a-f]+ <[^>]+> f935 1930 ldrsh.w r1, \[r5\], #-48
+0[0-9a-f]+ <[^>]+> f935 1009 ldrsh.w r1, \[r5, r9\]
+0[0-9a-f]+ <[^>]+> 00a1 lsls r1, r4, #2
+0[0-9a-f]+ <[^>]+> ea5f 0389 movs.w r3, r9, lsl #2
+0[0-9a-f]+ <[^>]+> fa12 f103 lsls.w r1, r2, r3
+0[0-9a-f]+ <[^>]+> 4099 lsls r1, r3
+0[0-9a-f]+ <[^>]+> fa11 f109 lsls.w r1, r1, r9
+0[0-9a-f]+ <[^>]+> fa02 f103 lsl.w r1, r2, r3
+0[0-9a-f]+ <[^>]+> fa01 f103 lsl.w r1, r1, r3
+0[0-9a-f]+ <[^>]+> 08a1 lsrs r1, r4, #2
+0[0-9a-f]+ <[^>]+> ea5f 0399 movs.w r3, r9, lsr #2
+0[0-9a-f]+ <[^>]+> fa32 f103 lsrs.w r1, r2, r3
+0[0-9a-f]+ <[^>]+> 40d9 lsrs r1, r3
+0[0-9a-f]+ <[^>]+> fa31 f109 lsrs.w r1, r1, r9
+0[0-9a-f]+ <[^>]+> fa22 f103 lsr.w r1, r2, r3
+0[0-9a-f]+ <[^>]+> fa21 f103 lsr.w r1, r1, r3
+0[0-9a-f]+ <[^>]+> 10a1 asrs r1, r4, #2
+0[0-9a-f]+ <[^>]+> ea5f 03a9 movs.w r3, r9, asr #2
+0[0-9a-f]+ <[^>]+> fa52 f103 asrs.w r1, r2, r3
+0[0-9a-f]+ <[^>]+> 4119 asrs r1, r3
+0[0-9a-f]+ <[^>]+> fa51 f109 asrs.w r1, r1, r9
+0[0-9a-f]+ <[^>]+> fa42 f103 asr.w r1, r2, r3
+0[0-9a-f]+ <[^>]+> fa41 f103 asr.w r1, r1, r3
+0[0-9a-f]+ <[^>]+> ea5f 01b4 movs.w r1, r4, ror #2
+0[0-9a-f]+ <[^>]+> ea5f 03b9 movs.w r3, r9, ror #2
+0[0-9a-f]+ <[^>]+> fa72 f103 rors.w r1, r2, r3
+0[0-9a-f]+ <[^>]+> 41d9 rors r1, r3
+0[0-9a-f]+ <[^>]+> fa71 f109 rors.w r1, r1, r9
+0[0-9a-f]+ <[^>]+> fa62 f103 ror.w r1, r2, r3
+0[0-9a-f]+ <[^>]+> fa61 f103 ror.w r1, r1, r3
0[0-9a-f]+ <[^>]+> bf00 nop
diff --git a/gas/testsuite/gas/arm/thumb32.l b/gas/testsuite/gas/arm/thumb32.l
new file mode 100644
index 000000000000..c687beac79e8
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumb32.l
@@ -0,0 +1,17 @@
+[^;]*: Assembler messages:
+[^;]*:446: Warning: s suffix on comparison instruction is deprecated
+[^;]*:446: Warning: s suffix on comparison instruction is deprecated
+[^;]*:446: Warning: s suffix on comparison instruction is deprecated
+[^;]*:446: Warning: s suffix on comparison instruction is deprecated
+[^;]*:447: Warning: s suffix on comparison instruction is deprecated
+[^;]*:447: Warning: s suffix on comparison instruction is deprecated
+[^;]*:447: Warning: s suffix on comparison instruction is deprecated
+[^;]*:447: Warning: s suffix on comparison instruction is deprecated
+[^;]*:448: Warning: s suffix on comparison instruction is deprecated
+[^;]*:448: Warning: s suffix on comparison instruction is deprecated
+[^;]*:448: Warning: s suffix on comparison instruction is deprecated
+[^;]*:448: Warning: s suffix on comparison instruction is deprecated
+[^;]*:449: Warning: s suffix on comparison instruction is deprecated
+[^;]*:449: Warning: s suffix on comparison instruction is deprecated
+[^;]*:449: Warning: s suffix on comparison instruction is deprecated
+[^;]*:449: Warning: s suffix on comparison instruction is deprecated
diff --git a/gas/testsuite/gas/arm/thumb32.s b/gas/testsuite/gas/arm/thumb32.s
index b75a0850f384..697dfd240f34 100644
--- a/gas/testsuite/gas/arm/thumb32.s
+++ b/gas/testsuite/gas/arm/thumb32.s
@@ -769,3 +769,51 @@ xta:
ldmeq r0, {r8, r9}
stmeq r0, {r8, r9}
nop
+
+srs:
+ srsia sp, #16
+ srsdb sp, #16
+ srsia sp!, #21
+ srsia sp!, #10
+
+ movs pc, lr
+ subs pc, lr, #0
+ subs pc, lr, #4
+ subs pc, lr, #255
+
+ ldrd r2, r4, [r9, #48]!
+ ldrd r2, r4, [r9, #-48]!
+ strd r2, r4, [r9, #48]!
+ strd r2, r4, [r9, #-48]!
+ ldrd r2, r4, [r9], #48
+ ldrd r2, r4, [r9], #-48
+ strd r2, r4, [r9], #48
+ strd r2, r4, [r9], #-48
+
+ .macro ldaddr op
+ ldr\op r1, [r5, #0x301]
+ ldr\op r1, [r5, #0x30]!
+ ldr\op r1, [r5, #-0x30]!
+ ldr\op r1, [r5], #0x30
+ ldr\op r1, [r5], #-0x30
+ ldr\op r1, [r5, r9]
+ .endm
+ ldaddr
+ ldaddr b
+ ldaddr sb
+ ldaddr h
+ ldaddr sh
+ .macro movshift op s="s"
+ movs r1, r4, \op #2
+ movs r3, r9, \op #2
+ movs r1, r2, \op r3
+ movs r1, r1, \op r3
+ movs r1, r1, \op r9
+ mov r1, r2, \op r3
+ mov r1, r1, \op r3
+ .endm
+ movshift lsl
+ movshift lsr
+ movshift asr
+ movshift ror
+ nop
diff --git a/gas/testsuite/gas/arm/thumbrel.d b/gas/testsuite/gas/arm/thumbrel.d
new file mode 100644
index 000000000000..fff41af9cc98
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumbrel.d
@@ -0,0 +1,14 @@
+#objdump: -sr
+# This test is only valid on EABI based ports.
+#target: *-*-*eabi *-*-symbianelf
+
+.*: file format.*
+
+RELOCATION RECORDS FOR \[.text\]:
+OFFSET TYPE VALUE
+00000004 R_ARM_REL32 b
+
+Contents of section .text:
+ 0000 00000000 (00000004|04000000) 00000000 00000000 .*
+# Ignore .ARM.attributes section
+#...
diff --git a/gas/testsuite/gas/arm/thumbrel.s b/gas/testsuite/gas/arm/thumbrel.s
new file mode 100644
index 000000000000..769da16156c7
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumbrel.s
@@ -0,0 +1,11 @@
+@ Check that PC-relative relocs against local function symbols are
+@ generated correctly.
+.text
+.thumb
+a:
+.word 0
+.word b - a
+.word 0
+.word 0
+.type b, %function
+b:
diff --git a/gas/testsuite/gas/arm/thumbver.d b/gas/testsuite/gas/arm/thumbver.d
new file mode 100644
index 000000000000..ddc46df56d42
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumbver.d
@@ -0,0 +1,15 @@
+# as: -meabi=4
+# readelf: -s
+# This test is only valid on ELF based ports.
+#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+Symbol table '\.symtab' contains .* entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 00000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 00000000 0 SECTION LOCAL DEFAULT 1
+#...
+ .*: 00000001 0 FUNC LOCAL DEFAULT 1 a_alias
+ .*: 00000001 0 FUNC LOCAL DEFAULT 1 a_body
+ .*: 00000000 0 NOTYPE LOCAL DEFAULT 1 \$t
+ .*: 00000001 0 FUNC LOCAL DEFAULT 1 a_export@VERSION
+#...
diff --git a/gas/testsuite/gas/arm/thumbver.s b/gas/testsuite/gas/arm/thumbver.s
new file mode 100644
index 000000000000..ad81395ee40c
--- /dev/null
+++ b/gas/testsuite/gas/arm/thumbver.s
@@ -0,0 +1,9 @@
+@ Check that symbols created by .symver are marked as Thumb.
+
+ .thumb_set a_alias, a_body
+ .symver a_alias, a_export@VERSION
+ .type a_body, %function
+ .code 16
+ .thumb_func
+a_body:
+ nop
diff --git a/gas/testsuite/gas/arm/tls.d b/gas/testsuite/gas/arm/tls.d
index 5b41109292cb..5189dfff01f4 100644
--- a/gas/testsuite/gas/arm/tls.d
+++ b/gas/testsuite/gas/arm/tls.d
@@ -15,11 +15,11 @@ Disassembly of section .text:
0: e1a00000 nop \(mov r0,r0\)
4: e1a00000 nop \(mov r0,r0\)
8: e1a0f00e mov pc, lr
- c: 00000000 andeq r0, r0, r0
+ c: 00000000 .word 0x00000000
c: R_ARM_TLS_GD32 a
- 10: 00000004 andeq r0, r0, r4
+ 10: 00000004 .word 0x00000004
10: R_ARM_TLS_LDM32 b
- 14: 00000008 andeq r0, r0, r8
+ 14: 00000008 .word 0x00000008
14: R_ARM_TLS_IE32 c
- 18: 00000000 andeq r0, r0, r0
+ 18: 00000000 .word 0x00000000
18: R_ARM_TLS_LE32 d
diff --git a/gas/testsuite/gas/arm/undefined.d b/gas/testsuite/gas/arm/undefined.d
index 6a6149561cc3..e3e9bb08929c 100644
--- a/gas/testsuite/gas/arm/undefined.d
+++ b/gas/testsuite/gas/arm/undefined.d
@@ -1,4 +1,5 @@
#name: Undefined local label error
-# COFF and aout based ports use a different naming convention for local labels.
-#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+# COFF and aout based ports, except Windows CE,
+# use a different naming convention for local labels.
+#skip: *-*-*coff *-unknown-pe *-epoc-pe *-*-*aout* *-*-netbsd *-*-riscix*
#error-output: undefined.l
diff --git a/gas/testsuite/gas/arm/undefined_coff.d b/gas/testsuite/gas/arm/undefined_coff.d
index ab0bbcdc6672..d2800275b078 100644
--- a/gas/testsuite/gas/arm/undefined_coff.d
+++ b/gas/testsuite/gas/arm/undefined_coff.d
@@ -1,4 +1,5 @@
#name: Undefined local label error
-# COFF and aout based ports use a different naming convention for local labels.
-#not-skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+# COFF and aout based ports, except Windows CE,
+# use a different naming convention for local labels.
+#not-skip: *-*-*coff *-unknown-pe *-epoc-pe *-*-*aout* *-*-netbsd *-*-riscix*
#error-output: undefined_coff.l
diff --git a/gas/testsuite/gas/arm/unwind.d b/gas/testsuite/gas/arm/unwind.d
index cd4a7c7995c2..060f7ba56afe 100644
--- a/gas/testsuite/gas/arm/unwind.d
+++ b/gas/testsuite/gas/arm/unwind.d
@@ -25,18 +25,22 @@ OFFSET TYPE VALUE
0000001c R_ARM_PREL31 .ARM.extab.*
00000020 R_ARM_PREL31 .text.*
00000028 R_ARM_PREL31 .text.*
+00000030 R_ARM_PREL31 .text.*
+00000034 R_ARM_PREL31 .ARM.extab.*
Contents of section .text:
0000 (0000a0e3 0100a0e3 0200a0e3 0300a0e3|e3a00000 e3a00001 e3a00002 e3a00003) .*
- 0010 (04200520|20052004) .*
+ 0010 (04200520 0600a0e3|20052004 e3a00006) .*
Contents of section .ARM.extab:
0000 (449b0181 b0b08086|81019b44 8680b0b0) 00000000 00000000 .*
- 0010 (8402b101 b0b0b005 2a000000 00c60181|01b10284 05b0b0b0 0000002a 8101c600) .*
- 0020 (b0b0c1c1|c1c1b0b0) 00000000 .*
+ 0010 (8402b101 b0b0b005 2a000000 00c60281|01b10284 05b0b0b0 0000002a 8102c600) .*
+ 0020 (d0c6c1c1 b0b0c0c6|c1c1c6d0 c6c0b0b0) 00000000 (429b0181|81019b42) .*
+ 0030 (b0008086|868000b0) 00000000 .*
Contents of section .ARM.exidx:
0000 00000000 (b0b0a880 04000000|80a8b0b0 00000004) 00000000 .*
0010 (08000000 0c000000 0c000000 1c000000|00000008 0000000c 0000000c 0000001c) .*
0020 (10000000 08849780 12000000 b00fb180|00000010 80978408 00000012 80b10fb0) .*
+ 0030 (14000000 2c000000|00000014 0000002c) .*
# Ignore .ARM.attributes section
#...
diff --git a/gas/testsuite/gas/arm/unwind.s b/gas/testsuite/gas/arm/unwind.s
index 7d0f126954f1..bbd73a157d94 100644
--- a/gas/testsuite/gas/arm/unwind.s
+++ b/gas/testsuite/gas/arm/unwind.s
@@ -27,6 +27,8 @@ foo2: @ Custom personality routine
.fnend
foo3: @ Saving iwmmxt registers
.fnstart
+ .save {wr12}
+ .save {wr13}
.save {wr11}
.save {wr10}
.save {wr10, wr11}
@@ -49,3 +51,17 @@ foo5: @ Save r0-r3 only.
.save {r0, r1, r2, r3}
mov r0, #5
.fnend
+ .code 32
+foo6: @ Nested function with frame pointer
+ .fnstart
+ .pad #4
+ @push {ip}
+ .movsp ip, #4
+ @mov ip, sp
+ .pad #4
+ .save {fp, ip, lr}
+ @stmfd sp!, {fp, ip, lr, pc}
+ .setfp fp, ip, #-8
+ @sub fp, ip, #8
+ mov r0, #6
+ .fnend
diff --git a/gas/testsuite/gas/arm/unwind_vxworks.d b/gas/testsuite/gas/arm/unwind_vxworks.d
index ccd16a65cc9a..11817cf48c16 100644
--- a/gas/testsuite/gas/arm/unwind_vxworks.d
+++ b/gas/testsuite/gas/arm/unwind_vxworks.d
@@ -24,6 +24,8 @@ OFFSET TYPE VALUE
0000001c R_ARM_PREL31 .ARM.extab.*\+0x0000001c
00000020 R_ARM_PREL31 .text.*\+0x00000010
00000028 R_ARM_PREL31 .text.*\+0x00000012
+00000030 R_ARM_PREL31 .text.*\+0x00000014
+00000034 R_ARM_PREL31 .ARM.extab.*\+0x0000002c
Contents of section .text:
@@ -31,11 +33,13 @@ Contents of section .text:
0010 (04200520|20052004) .*
Contents of section .ARM.extab:
0000 (449b0181 b0b08086|81019b44 8680b0b0) 00000000 00000000 .*
- 0010 (8402b101 b0b0b005 2a000000 00c60181|01b10284 05b0b0b0 0000002a 8101c600) .*
- 0020 (b0b0c1c1|c1c1b0b0) 00000000 .*
+ 0010 (8402b101 b0b0b005 2a000000 00c60281|01b10284 05b0b0b0 0000002a 8102c600) .*
+ 0020 (d0c6c1c1 b0b0c0c6|c1c1c6d0 c6c0b0b0) 00000000 (429b0181|81019b42) .*
+ 0030 (b0008086|868000b0) 00000000 .*
Contents of section .ARM.exidx:
0000 00000000 (b0b0a880|80a8b0b0) 00000000 00000000 .*
0010 00000000 00000000 00000000 00000000 .*
0020 00000000 (08849780|80978408) 00000000 (b00fb180|80b10fb0) .*
+ 0030 00000000 00000000 .*
# Ignore .ARM.attributes section
#...
diff --git a/gas/testsuite/gas/arm/vfp-neon-overlap.d b/gas/testsuite/gas/arm/vfp-neon-overlap.d
new file mode 100644
index 000000000000..b7815640089d
--- /dev/null
+++ b/gas/testsuite/gas/arm/vfp-neon-overlap.d
@@ -0,0 +1,35 @@
+# name: VFP/Neon overlapping instructions
+# as: -mfpu=vfp
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> ec410b10 vmov d0, r0, r1
+0[0-9a-f]+ <[^>]+> ec410b10 vmov d0, r0, r1
+0[0-9a-f]+ <[^>]+> ec510b10 vmov r0, r1, d0
+0[0-9a-f]+ <[^>]+> ec510b10 vmov r0, r1, d0
+0[0-9a-f]+ <[^>]+> ec900b09 fldmiax r0, {d0-d3}
+0[0-9a-f]+ <[^>]+> ed300b09 fldmdbx r0!, {d0-d3}
+0[0-9a-f]+ <[^>]+> ec800b09 fstmiax r0, {d0-d3}
+0[0-9a-f]+ <[^>]+> ed200b09 fstmdbx r0!, {d0-d3}
+0[0-9a-f]+ <[^>]+> ed900b00 vldr d0, \[r0\]
+0[0-9a-f]+ <[^>]+> ed900b00 vldr d0, \[r0\]
+0[0-9a-f]+ <[^>]+> ed800b00 vstr d0, \[r0\]
+0[0-9a-f]+ <[^>]+> ed800b00 vstr d0, \[r0\]
+0[0-9a-f]+ <[^>]+> ec900b08 vldmia r0, {d0-d3}
+0[0-9a-f]+ <[^>]+> ec900b08 vldmia r0, {d0-d3}
+0[0-9a-f]+ <[^>]+> ed300b08 vldmdb r0!, {d0-d3}
+0[0-9a-f]+ <[^>]+> ed300b08 vldmdb r0!, {d0-d3}
+0[0-9a-f]+ <[^>]+> ec800b08 vstmia r0, {d0-d3}
+0[0-9a-f]+ <[^>]+> ec800b08 vstmia r0, {d0-d3}
+0[0-9a-f]+ <[^>]+> ed200b08 vstmdb r0!, {d0-d3}
+0[0-9a-f]+ <[^>]+> ed200b08 vstmdb r0!, {d0-d3}
+0[0-9a-f]+ <[^>]+> ee300b10 vmov\.32 r0, d0\[1\]
+0[0-9a-f]+ <[^>]+> ee300b10 vmov\.32 r0, d0\[1\]
+0[0-9a-f]+ <[^>]+> ee100b10 vmov\.32 r0, d0\[0\]
+0[0-9a-f]+ <[^>]+> ee100b10 vmov\.32 r0, d0\[0\]
+0[0-9a-f]+ <[^>]+> ee200b10 vmov\.32 d0\[1\], r0
+0[0-9a-f]+ <[^>]+> ee200b10 vmov\.32 d0\[1\], r0
+0[0-9a-f]+ <[^>]+> ee000b10 vmov\.32 d0\[0\], r0
+0[0-9a-f]+ <[^>]+> ee000b10 vmov\.32 d0\[0\], r0
diff --git a/gas/testsuite/gas/arm/vfp-neon-overlap.s b/gas/testsuite/gas/arm/vfp-neon-overlap.s
new file mode 100644
index 000000000000..19c286afca43
--- /dev/null
+++ b/gas/testsuite/gas/arm/vfp-neon-overlap.s
@@ -0,0 +1,41 @@
+@ VFP/Neon overlapping instructions
+
+ .arm
+ .text
+ .syntax unified
+
+ fmdrr d0,r0,r1
+ vmov d0,r0,r1
+ fmrrd r0,r1,d0
+ vmov r0,r1,d0
+
+ @ the 'x' versions should disassemble as VFP instructions, because
+ @ they can't be represented in Neon syntax.
+
+ fldmiax r0,{d0-d3}
+ fldmdbx r0!,{d0-d3}
+ fstmiax r0,{d0-d3}
+ fstmdbx r0!,{d0-d3}
+
+ fldd d0,[r0]
+ vldr d0,[r0]
+ fstd d0,[r0]
+ vstr d0,[r0]
+
+ fldmiad r0,{d0-d3}
+ vldmia r0,{d0-d3}
+ fldmdbd r0!,{d0-d3}
+ vldmdb r0!,{d0-d3}
+ fstmiad r0,{d0-d3}
+ vstmia r0,{d0-d3}
+ fstmdbd r0!,{d0-d3}
+ vstmdb r0!,{d0-d3}
+
+ fmrdh r0,d0
+ vmov.32 r0,d0[1]
+ fmrdl r0,d0
+ vmov.32 r0,d0[0]
+ fmdhr d0,r0
+ vmov.32 d0[1],r0
+ fmdlr d0,r0
+ vmov.32 d0[0],r0
diff --git a/gas/testsuite/gas/arm/vfp-neon-syntax-inc.s b/gas/testsuite/gas/arm/vfp-neon-syntax-inc.s
new file mode 100644
index 000000000000..fad0bded369c
--- /dev/null
+++ b/gas/testsuite/gas/arm/vfp-neon-syntax-inc.s
@@ -0,0 +1,162 @@
+@ VFP with Neon-style syntax
+ .syntax unified
+
+ .include "itblock.s"
+
+func:
+ .macro testvmov cond="" f32=".f32" f64=".f64"
+ itblock 4 \cond
+ vmov\cond\f32 s0,s1
+ vmov\cond\f64 d0,d1
+ vmov\cond\f32 s0,#0.25
+ vmov\cond\f64 d0,#1.0
+ itblock 4 \cond
+ vmov\cond r0,s1
+ vmov\cond s0,r1
+ vmov\cond r0,r1,s2,s3
+ vmov\cond s0,s1,r2,r4
+ .endm
+
+ @ Test VFP vmov variants. These can all be conditional.
+ testvmov
+ testvmov eq
+
+ .macro monadic op cond="" f32=".f32" f64=".f64"
+ itblock 2 \cond
+ \op\cond\f32 s0,s1
+ \op\cond\f64 d0,d1
+ .endm
+
+ .macro monadic_c op
+ monadic \op
+ monadic \op eq
+ .endm
+
+ .macro dyadic op cond="" f32=".f32" f64=".f64"
+ itblock 2 \cond
+ \op\cond\f32 s0,s1,s2
+ \op\cond\f64 d0,d1,d2
+ .endm
+
+ .macro dyadic_c op
+ dyadic \op
+ dyadic \op eq
+ .endm
+
+ .macro dyadicz op cond="" f32=".f32" f64=".f64"
+ itblock 2 \cond
+ \op\cond\f32 s0,#0
+ \op\cond\f64 d0,#0
+ .endm
+
+ .macro dyadicz_c op
+ dyadicz \op
+ dyadicz \op eq
+ .endm
+
+ monadic_c vsqrt
+ monadic_c vabs
+ monadic_c vneg
+ monadic_c vcmp
+ monadic_c vcmpe
+
+ dyadic_c vnmul
+ dyadic_c vnmla
+ dyadic_c vnmls
+
+ dyadic_c vmul
+ dyadic_c vmla
+ dyadic_c vmls
+
+ dyadic_c vadd
+ dyadic_c vsub
+
+ dyadic_c vdiv
+
+ dyadicz_c vcmp
+ dyadicz_c vcmpe
+
+ .macro cvtz cond="" s32=".s32" u32=".u32" f32=".f32" f64=".f64"
+ itblock 4 \cond
+ vcvtz\cond\s32\f32 s0,s1
+ vcvtz\cond\u32\f32 s0,s1
+ vcvtz\cond\s32\f64 s0,d1
+ vcvtz\cond\u32\f64 s0,d1
+ .endm
+
+ cvtz
+ cvtz eq
+
+ .macro cvt cond="" s32=".s32" u32=".u32" f32=".f32" f64=".f64"
+ itblock 4 \cond
+ vcvt\cond\s32\f32 s0,s1
+ vcvt\cond\u32\f32 s0,s1
+ vcvt\cond\f32\s32 s0,s1
+ vcvt\cond\f32\u32 s0,s1
+ itblock 4 \cond
+ vcvt\cond\f32\f64 s0,d1
+ vcvt\cond\f64\f32 d0,s1
+ vcvt\cond\s32\f64 s0,d1
+ vcvt\cond\u32\f64 s0,d1
+ itblock 2 \cond
+ vcvt\cond\f64\s32 d0,s1
+ vcvt\cond\f64\u32 d0,s1
+ .endm
+
+ cvt
+ cvt eq
+
+ .macro cvti cond="" s32=".s32" u32=".u32" f32=".f32" f64=".f64" s16=".s16" u16=".u16"
+ itblock 4 \cond
+ vcvt\cond\s32\f32 s0,s0,#1
+ vcvt\cond\u32\f32 s0,s0,#1
+ vcvt\cond\f32\s32 s0,s0,#1
+ vcvt\cond\f32\u32 s0,s0,#1
+ itblock 4 \cond
+ vcvt\cond\s32\f64 d0,d0,#1
+ vcvt\cond\u32\f64 d0,d0,#1
+ vcvt\cond\f64\s32 d0,d0,#1
+ vcvt\cond\f64\u32 d0,d0,#1
+ itblock 4 \cond
+ vcvt\cond\f32\s16 s0,s0,#1
+ vcvt\cond\f32\u16 s0,s0,#1
+ vcvt\cond\f64\s16 d0,d0,#1
+ vcvt\cond\f64\u16 d0,d0,#1
+ itblock 4 \cond
+ vcvt\cond\s16\f32 s0,s0,#1
+ vcvt\cond\u16\f32 s0,s0,#1
+ vcvt\cond\s16\f64 d0,d0,#1
+ vcvt\cond\u16\f64 d0,d0,#1
+ .endm
+
+ cvti
+ cvti eq
+
+ .macro multi op cond="" n="" ia="ia" db="db"
+ itblock 4 \cond
+ \op\n\cond r0,{s3-s6}
+ \op\ia\cond r0,{s3-s6}
+ \op\ia\cond r0!,{s3-s6}
+ \op\db\cond r0!,{s3-s6}
+ itblock 4 \cond
+ \op\n\cond r0,{d3-d6}
+ \op\ia\cond r0,{d3-d6}
+ \op\ia\cond r0!,{d3-d6}
+ \op\db\cond r0!,{d3-d6}
+ .endm
+
+ multi vldm
+ multi vldm eq
+ multi vstm
+ multi vstm eq
+
+ .macro single op cond=""
+ itblock 2 \cond
+ \op\cond s0,[r0,#4]
+ \op\cond d0,[r0,#4]
+ .endm
+
+ single vldr
+ single vldr eq
+ single vstr
+ single vstr eq
diff --git a/gas/testsuite/gas/arm/vfp-neon-syntax.d b/gas/testsuite/gas/arm/vfp-neon-syntax.d
new file mode 100644
index 000000000000..8d9743527bca
--- /dev/null
+++ b/gas/testsuite/gas/arm/vfp-neon-syntax.d
@@ -0,0 +1,187 @@
+# name: VFP Neon-style syntax, ARM mode
+# as: -mfpu=vfp3 -I$srcdir/$subdir
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> eeb00a60 fcpys s0, s1
+0[0-9a-f]+ <[^>]+> eeb00b41 fcpyd d0, d1
+0[0-9a-f]+ <[^>]+> eeb50a00 fconsts s0, #80
+0[0-9a-f]+ <[^>]+> eeb70b00 fconstd d0, #112
+0[0-9a-f]+ <[^>]+> ee100a90 fmrs r0, s1
+0[0-9a-f]+ <[^>]+> ee001a10 fmsr s0, r1
+0[0-9a-f]+ <[^>]+> ec510a11 fmrrs r0, r1, {s2, s3}
+0[0-9a-f]+ <[^>]+> ec442a10 fmsrr {s0, s1}, r2, r4
+0[0-9a-f]+ <[^>]+> 0eb00a60 fcpyseq s0, s1
+0[0-9a-f]+ <[^>]+> 0eb00b41 fcpydeq d0, d1
+0[0-9a-f]+ <[^>]+> 0eb50a00 fconstseq s0, #80
+0[0-9a-f]+ <[^>]+> 0eb70b00 fconstdeq d0, #112
+0[0-9a-f]+ <[^>]+> 0e100a90 fmrseq r0, s1
+0[0-9a-f]+ <[^>]+> 0e001a10 fmsreq s0, r1
+0[0-9a-f]+ <[^>]+> 0c510a11 fmrrseq r0, r1, {s2, s3}
+0[0-9a-f]+ <[^>]+> 0c442a10 fmsrreq {s0, s1}, r2, r4
+0[0-9a-f]+ <[^>]+> eeb10ae0 fsqrts s0, s1
+0[0-9a-f]+ <[^>]+> eeb10bc1 fsqrtd d0, d1
+0[0-9a-f]+ <[^>]+> 0eb10ae0 fsqrtseq s0, s1
+0[0-9a-f]+ <[^>]+> 0eb10bc1 fsqrtdeq d0, d1
+0[0-9a-f]+ <[^>]+> eeb00ae0 fabss s0, s1
+0[0-9a-f]+ <[^>]+> eeb00bc1 fabsd d0, d1
+0[0-9a-f]+ <[^>]+> 0eb00ae0 fabsseq s0, s1
+0[0-9a-f]+ <[^>]+> 0eb00bc1 fabsdeq d0, d1
+0[0-9a-f]+ <[^>]+> eeb10a60 fnegs s0, s1
+0[0-9a-f]+ <[^>]+> eeb10b41 fnegd d0, d1
+0[0-9a-f]+ <[^>]+> 0eb10a60 fnegseq s0, s1
+0[0-9a-f]+ <[^>]+> 0eb10b41 fnegdeq d0, d1
+0[0-9a-f]+ <[^>]+> eeb40a60 fcmps s0, s1
+0[0-9a-f]+ <[^>]+> eeb40b41 fcmpd d0, d1
+0[0-9a-f]+ <[^>]+> 0eb40a60 fcmpseq s0, s1
+0[0-9a-f]+ <[^>]+> 0eb40b41 fcmpdeq d0, d1
+0[0-9a-f]+ <[^>]+> eeb40ae0 fcmpes s0, s1
+0[0-9a-f]+ <[^>]+> eeb40bc1 fcmped d0, d1
+0[0-9a-f]+ <[^>]+> 0eb40ae0 fcmpeseq s0, s1
+0[0-9a-f]+ <[^>]+> 0eb40bc1 fcmpedeq d0, d1
+0[0-9a-f]+ <[^>]+> ee200ac1 fnmuls s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee210b42 fnmuld d0, d1, d2
+0[0-9a-f]+ <[^>]+> 0e200ac1 fnmulseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> 0e210b42 fnmuldeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee000ac1 fnmacs s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee010b42 fnmacd d0, d1, d2
+0[0-9a-f]+ <[^>]+> 0e000ac1 fnmacseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> 0e010b42 fnmacdeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee100ac1 fnmscs s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee110b42 fnmscd d0, d1, d2
+0[0-9a-f]+ <[^>]+> 0e100ac1 fnmscseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> 0e110b42 fnmscdeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee200a81 fmuls s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee210b02 fmuld d0, d1, d2
+0[0-9a-f]+ <[^>]+> 0e200a81 fmulseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> 0e210b02 fmuldeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee000a81 fmacs s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee010b02 fmacd d0, d1, d2
+0[0-9a-f]+ <[^>]+> 0e000a81 fmacseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> 0e010b02 fmacdeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee100a81 fmscs s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee110b02 fmscd d0, d1, d2
+0[0-9a-f]+ <[^>]+> 0e100a81 fmscseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> 0e110b02 fmscdeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee300a81 fadds s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee310b02 faddd d0, d1, d2
+0[0-9a-f]+ <[^>]+> 0e300a81 faddseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> 0e310b02 fadddeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee300ac1 fsubs s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee310b42 fsubd d0, d1, d2
+0[0-9a-f]+ <[^>]+> 0e300ac1 fsubseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> 0e310b42 fsubdeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee800a81 fdivs s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee810b02 fdivd d0, d1, d2
+0[0-9a-f]+ <[^>]+> 0e800a81 fdivseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> 0e810b02 fdivdeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> eeb50a40 fcmpzs s0
+0[0-9a-f]+ <[^>]+> eeb50b40 fcmpzd d0
+0[0-9a-f]+ <[^>]+> 0eb50a40 fcmpzseq s0
+0[0-9a-f]+ <[^>]+> 0eb50b40 fcmpzdeq d0
+0[0-9a-f]+ <[^>]+> eeb50ac0 fcmpezs s0
+0[0-9a-f]+ <[^>]+> eeb50bc0 fcmpezd d0
+0[0-9a-f]+ <[^>]+> 0eb50ac0 fcmpezseq s0
+0[0-9a-f]+ <[^>]+> 0eb50bc0 fcmpezdeq d0
+0[0-9a-f]+ <[^>]+> eebd0ae0 ftosizs s0, s1
+0[0-9a-f]+ <[^>]+> eebc0ae0 ftouizs s0, s1
+0[0-9a-f]+ <[^>]+> eebd0bc1 ftosizd s0, d1
+0[0-9a-f]+ <[^>]+> eebc0bc1 ftouizd s0, d1
+0[0-9a-f]+ <[^>]+> 0ebd0ae0 ftosizseq s0, s1
+0[0-9a-f]+ <[^>]+> 0ebc0ae0 ftouizseq s0, s1
+0[0-9a-f]+ <[^>]+> 0ebd0bc1 ftosizdeq s0, d1
+0[0-9a-f]+ <[^>]+> 0ebc0bc1 ftouizdeq s0, d1
+0[0-9a-f]+ <[^>]+> eebd0a60 ftosis s0, s1
+0[0-9a-f]+ <[^>]+> eebc0a60 ftouis s0, s1
+0[0-9a-f]+ <[^>]+> eeb80ae0 fsitos s0, s1
+0[0-9a-f]+ <[^>]+> eeb80a60 fuitos s0, s1
+0[0-9a-f]+ <[^>]+> eeb70bc1 fcvtsd s0, d1
+0[0-9a-f]+ <[^>]+> eeb70ae0 fcvtds d0, s1
+0[0-9a-f]+ <[^>]+> eebd0b41 ftosid s0, d1
+0[0-9a-f]+ <[^>]+> eebc0b41 ftouid s0, d1
+0[0-9a-f]+ <[^>]+> eeb80be0 fsitod d0, s1
+0[0-9a-f]+ <[^>]+> eeb80b60 fuitod d0, s1
+0[0-9a-f]+ <[^>]+> 0ebd0a60 ftosiseq s0, s1
+0[0-9a-f]+ <[^>]+> 0ebc0a60 ftouiseq s0, s1
+0[0-9a-f]+ <[^>]+> 0eb80ae0 fsitoseq s0, s1
+0[0-9a-f]+ <[^>]+> 0eb80a60 fuitoseq s0, s1
+0[0-9a-f]+ <[^>]+> 0eb70bc1 fcvtsdeq s0, d1
+0[0-9a-f]+ <[^>]+> 0eb70ae0 fcvtdseq d0, s1
+0[0-9a-f]+ <[^>]+> 0ebd0b41 ftosideq s0, d1
+0[0-9a-f]+ <[^>]+> 0ebc0b41 ftouideq s0, d1
+0[0-9a-f]+ <[^>]+> 0eb80be0 fsitodeq d0, s1
+0[0-9a-f]+ <[^>]+> 0eb80b60 fuitodeq d0, s1
+0[0-9a-f]+ <[^>]+> eebe0aef ftosls s0, #1
+0[0-9a-f]+ <[^>]+> eebf0aef ftouls s0, #1
+0[0-9a-f]+ <[^>]+> eeba0aef fsltos s0, #1
+0[0-9a-f]+ <[^>]+> eebb0aef fultos s0, #1
+0[0-9a-f]+ <[^>]+> eebe0bef ftosld d0, #1
+0[0-9a-f]+ <[^>]+> eebf0bef ftould d0, #1
+0[0-9a-f]+ <[^>]+> eeba0bef fsltod d0, #1
+0[0-9a-f]+ <[^>]+> eebb0bef fultod d0, #1
+0[0-9a-f]+ <[^>]+> eeba0a67 fshtos s0, #1
+0[0-9a-f]+ <[^>]+> eebb0a67 fuhtos s0, #1
+0[0-9a-f]+ <[^>]+> eeba0b67 fshtod d0, #1
+0[0-9a-f]+ <[^>]+> eebb0b67 fuhtod d0, #1
+0[0-9a-f]+ <[^>]+> eebe0a67 ftoshs s0, #1
+0[0-9a-f]+ <[^>]+> eebf0a67 ftouhs s0, #1
+0[0-9a-f]+ <[^>]+> eebe0b67 ftoshd d0, #1
+0[0-9a-f]+ <[^>]+> eebf0b67 ftouhd d0, #1
+0[0-9a-f]+ <[^>]+> 0ebe0aef ftoslseq s0, #1
+0[0-9a-f]+ <[^>]+> 0ebf0aef ftoulseq s0, #1
+0[0-9a-f]+ <[^>]+> 0eba0aef fsltoseq s0, #1
+0[0-9a-f]+ <[^>]+> 0ebb0aef fultoseq s0, #1
+0[0-9a-f]+ <[^>]+> 0ebe0bef ftosldeq d0, #1
+0[0-9a-f]+ <[^>]+> 0ebf0bef ftouldeq d0, #1
+0[0-9a-f]+ <[^>]+> 0eba0bef fsltodeq d0, #1
+0[0-9a-f]+ <[^>]+> 0ebb0bef fultodeq d0, #1
+0[0-9a-f]+ <[^>]+> 0eba0a67 fshtoseq s0, #1
+0[0-9a-f]+ <[^>]+> 0ebb0a67 fuhtoseq s0, #1
+0[0-9a-f]+ <[^>]+> 0eba0b67 fshtodeq d0, #1
+0[0-9a-f]+ <[^>]+> 0ebb0b67 fuhtodeq d0, #1
+0[0-9a-f]+ <[^>]+> 0ebe0a67 ftoshseq s0, #1
+0[0-9a-f]+ <[^>]+> 0ebf0a67 ftouhseq s0, #1
+0[0-9a-f]+ <[^>]+> 0ebe0b67 ftoshdeq d0, #1
+0[0-9a-f]+ <[^>]+> 0ebf0b67 ftouhdeq d0, #1
+0[0-9a-f]+ <[^>]+> ecd01a04 fldmias r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> ecd01a04 fldmias r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> ecf01a04 fldmias r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> ed701a04 fldmdbs r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> ec903b08 vldmia r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> ec903b08 vldmia r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> ecb03b08 vldmia r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> ed303b08 vldmdb r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> 0cd01a04 fldmiaseq r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> 0cd01a04 fldmiaseq r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> 0cf01a04 fldmiaseq r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> 0d701a04 fldmdbseq r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> 0c903b08 vldmiaeq r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> 0c903b08 vldmiaeq r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> 0cb03b08 vldmiaeq r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> 0d303b08 vldmdbeq r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> ecc01a04 fstmias r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> ecc01a04 fstmias r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> ece01a04 fstmias r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> ed601a04 fstmdbs r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> ec803b08 vstmia r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> ec803b08 vstmia r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> eca03b08 vstmia r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> ed203b08 vstmdb r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> 0cc01a04 fstmiaseq r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> 0cc01a04 fstmiaseq r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> 0ce01a04 fstmiaseq r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> 0d601a04 fstmdbseq r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> 0c803b08 vstmiaeq r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> 0c803b08 vstmiaeq r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> 0ca03b08 vstmiaeq r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> 0d203b08 vstmdbeq r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> ed900a01 flds s0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> ed900b01 vldr d0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> 0d900a01 fldseq s0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> 0d900b01 vldreq d0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> ed800a01 fsts s0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> ed800b01 vstr d0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> 0d800a01 fstseq s0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> 0d800b01 vstreq d0, \[r0, #4\]
diff --git a/gas/testsuite/gas/arm/vfp-neon-syntax.s b/gas/testsuite/gas/arm/vfp-neon-syntax.s
new file mode 100644
index 000000000000..7c0bc633ed10
--- /dev/null
+++ b/gas/testsuite/gas/arm/vfp-neon-syntax.s
@@ -0,0 +1,2 @@
+ .arm
+ .include "vfp-neon-syntax-inc.s"
diff --git a/gas/testsuite/gas/arm/vfp-neon-syntax_t2.d b/gas/testsuite/gas/arm/vfp-neon-syntax_t2.d
new file mode 100644
index 000000000000..5c0223528583
--- /dev/null
+++ b/gas/testsuite/gas/arm/vfp-neon-syntax_t2.d
@@ -0,0 +1,219 @@
+# name: VFP Neon-style syntax, Thumb mode
+# as: -mfpu=vfp3 -I$srcdir/$subdir
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section \.text:
+0[0-9a-f]+ <[^>]+> eeb0 0a60 fcpys s0, s1
+0[0-9a-f]+ <[^>]+> eeb0 0b41 fcpyd d0, d1
+0[0-9a-f]+ <[^>]+> eeb5 0a00 fconsts s0, #80
+0[0-9a-f]+ <[^>]+> eeb7 0b00 fconstd d0, #112
+0[0-9a-f]+ <[^>]+> ee10 0a90 fmrs r0, s1
+0[0-9a-f]+ <[^>]+> ee00 1a10 fmsr s0, r1
+0[0-9a-f]+ <[^>]+> ec51 0a11 fmrrs r0, r1, {s2, s3}
+0[0-9a-f]+ <[^>]+> ec44 2a10 fmsrr {s0, s1}, r2, r4
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> eeb0 0a60 fcpyseq s0, s1
+0[0-9a-f]+ <[^>]+> eeb0 0b41 fcpydeq d0, d1
+0[0-9a-f]+ <[^>]+> eeb5 0a00 fconstseq s0, #80
+0[0-9a-f]+ <[^>]+> eeb7 0b00 fconstdeq d0, #112
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> ee10 0a90 fmrseq r0, s1
+0[0-9a-f]+ <[^>]+> ee00 1a10 fmsreq s0, r1
+0[0-9a-f]+ <[^>]+> ec51 0a11 fmrrseq r0, r1, {s2, s3}
+0[0-9a-f]+ <[^>]+> ec44 2a10 fmsrreq {s0, s1}, r2, r4
+0[0-9a-f]+ <[^>]+> eeb1 0ae0 fsqrts s0, s1
+0[0-9a-f]+ <[^>]+> eeb1 0bc1 fsqrtd d0, d1
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> eeb1 0ae0 fsqrtseq s0, s1
+0[0-9a-f]+ <[^>]+> eeb1 0bc1 fsqrtdeq d0, d1
+0[0-9a-f]+ <[^>]+> eeb0 0ae0 fabss s0, s1
+0[0-9a-f]+ <[^>]+> eeb0 0bc1 fabsd d0, d1
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> eeb0 0ae0 fabsseq s0, s1
+0[0-9a-f]+ <[^>]+> eeb0 0bc1 fabsdeq d0, d1
+0[0-9a-f]+ <[^>]+> eeb1 0a60 fnegs s0, s1
+0[0-9a-f]+ <[^>]+> eeb1 0b41 fnegd d0, d1
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> eeb1 0a60 fnegseq s0, s1
+0[0-9a-f]+ <[^>]+> eeb1 0b41 fnegdeq d0, d1
+0[0-9a-f]+ <[^>]+> eeb4 0a60 fcmps s0, s1
+0[0-9a-f]+ <[^>]+> eeb4 0b41 fcmpd d0, d1
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> eeb4 0a60 fcmpseq s0, s1
+0[0-9a-f]+ <[^>]+> eeb4 0b41 fcmpdeq d0, d1
+0[0-9a-f]+ <[^>]+> eeb4 0ae0 fcmpes s0, s1
+0[0-9a-f]+ <[^>]+> eeb4 0bc1 fcmped d0, d1
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> eeb4 0ae0 fcmpeseq s0, s1
+0[0-9a-f]+ <[^>]+> eeb4 0bc1 fcmpedeq d0, d1
+0[0-9a-f]+ <[^>]+> ee20 0ac1 fnmuls s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee21 0b42 fnmuld d0, d1, d2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ee20 0ac1 fnmulseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee21 0b42 fnmuldeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee00 0ac1 fnmacs s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee01 0b42 fnmacd d0, d1, d2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ee00 0ac1 fnmacseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee01 0b42 fnmacdeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee10 0ac1 fnmscs s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee11 0b42 fnmscd d0, d1, d2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ee10 0ac1 fnmscseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee11 0b42 fnmscdeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee20 0a81 fmuls s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee21 0b02 fmuld d0, d1, d2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ee20 0a81 fmulseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee21 0b02 fmuldeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee00 0a81 fmacs s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee01 0b02 fmacd d0, d1, d2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ee00 0a81 fmacseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee01 0b02 fmacdeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee10 0a81 fmscs s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee11 0b02 fmscd d0, d1, d2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ee10 0a81 fmscseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee11 0b02 fmscdeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee30 0a81 fadds s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee31 0b02 faddd d0, d1, d2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ee30 0a81 faddseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee31 0b02 fadddeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee30 0ac1 fsubs s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee31 0b42 fsubd d0, d1, d2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ee30 0ac1 fsubseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee31 0b42 fsubdeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> ee80 0a81 fdivs s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee81 0b02 fdivd d0, d1, d2
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ee80 0a81 fdivseq s0, s1, s2
+0[0-9a-f]+ <[^>]+> ee81 0b02 fdivdeq d0, d1, d2
+0[0-9a-f]+ <[^>]+> eeb5 0a40 fcmpzs s0
+0[0-9a-f]+ <[^>]+> eeb5 0b40 fcmpzd d0
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> eeb5 0a40 fcmpzseq s0
+0[0-9a-f]+ <[^>]+> eeb5 0b40 fcmpzdeq d0
+0[0-9a-f]+ <[^>]+> eeb5 0ac0 fcmpezs s0
+0[0-9a-f]+ <[^>]+> eeb5 0bc0 fcmpezd d0
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> eeb5 0ac0 fcmpezseq s0
+0[0-9a-f]+ <[^>]+> eeb5 0bc0 fcmpezdeq d0
+0[0-9a-f]+ <[^>]+> eebd 0ae0 ftosizs s0, s1
+0[0-9a-f]+ <[^>]+> eebc 0ae0 ftouizs s0, s1
+0[0-9a-f]+ <[^>]+> eebd 0bc1 ftosizd s0, d1
+0[0-9a-f]+ <[^>]+> eebc 0bc1 ftouizd s0, d1
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> eebd 0ae0 ftosizseq s0, s1
+0[0-9a-f]+ <[^>]+> eebc 0ae0 ftouizseq s0, s1
+0[0-9a-f]+ <[^>]+> eebd 0bc1 ftosizdeq s0, d1
+0[0-9a-f]+ <[^>]+> eebc 0bc1 ftouizdeq s0, d1
+0[0-9a-f]+ <[^>]+> eebd 0a60 ftosis s0, s1
+0[0-9a-f]+ <[^>]+> eebc 0a60 ftouis s0, s1
+0[0-9a-f]+ <[^>]+> eeb8 0ae0 fsitos s0, s1
+0[0-9a-f]+ <[^>]+> eeb8 0a60 fuitos s0, s1
+0[0-9a-f]+ <[^>]+> eeb7 0bc1 fcvtsd s0, d1
+0[0-9a-f]+ <[^>]+> eeb7 0ae0 fcvtds d0, s1
+0[0-9a-f]+ <[^>]+> eebd 0b41 ftosid s0, d1
+0[0-9a-f]+ <[^>]+> eebc 0b41 ftouid s0, d1
+0[0-9a-f]+ <[^>]+> eeb8 0be0 fsitod d0, s1
+0[0-9a-f]+ <[^>]+> eeb8 0b60 fuitod d0, s1
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> eebd 0a60 ftosiseq s0, s1
+0[0-9a-f]+ <[^>]+> eebc 0a60 ftouiseq s0, s1
+0[0-9a-f]+ <[^>]+> eeb8 0ae0 fsitoseq s0, s1
+0[0-9a-f]+ <[^>]+> eeb8 0a60 fuitoseq s0, s1
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> eeb7 0bc1 fcvtsdeq s0, d1
+0[0-9a-f]+ <[^>]+> eeb7 0ae0 fcvtdseq d0, s1
+0[0-9a-f]+ <[^>]+> eebd 0b41 ftosideq s0, d1
+0[0-9a-f]+ <[^>]+> eebc 0b41 ftouideq s0, d1
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> eeb8 0be0 fsitodeq d0, s1
+0[0-9a-f]+ <[^>]+> eeb8 0b60 fuitodeq d0, s1
+0[0-9a-f]+ <[^>]+> eebe 0aef ftosls s0, #1
+0[0-9a-f]+ <[^>]+> eebf 0aef ftouls s0, #1
+0[0-9a-f]+ <[^>]+> eeba 0aef fsltos s0, #1
+0[0-9a-f]+ <[^>]+> eebb 0aef fultos s0, #1
+0[0-9a-f]+ <[^>]+> eebe 0bef ftosld d0, #1
+0[0-9a-f]+ <[^>]+> eebf 0bef ftould d0, #1
+0[0-9a-f]+ <[^>]+> eeba 0bef fsltod d0, #1
+0[0-9a-f]+ <[^>]+> eebb 0bef fultod d0, #1
+0[0-9a-f]+ <[^>]+> eeba 0a67 fshtos s0, #1
+0[0-9a-f]+ <[^>]+> eebb 0a67 fuhtos s0, #1
+0[0-9a-f]+ <[^>]+> eeba 0b67 fshtod d0, #1
+0[0-9a-f]+ <[^>]+> eebb 0b67 fuhtod d0, #1
+0[0-9a-f]+ <[^>]+> eebe 0a67 ftoshs s0, #1
+0[0-9a-f]+ <[^>]+> eebf 0a67 ftouhs s0, #1
+0[0-9a-f]+ <[^>]+> eebe 0b67 ftoshd d0, #1
+0[0-9a-f]+ <[^>]+> eebf 0b67 ftouhd d0, #1
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> eebe 0aef ftoslseq s0, #1
+0[0-9a-f]+ <[^>]+> eebf 0aef ftoulseq s0, #1
+0[0-9a-f]+ <[^>]+> eeba 0aef fsltoseq s0, #1
+0[0-9a-f]+ <[^>]+> eebb 0aef fultoseq s0, #1
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> eebe 0bef ftosldeq d0, #1
+0[0-9a-f]+ <[^>]+> eebf 0bef ftouldeq d0, #1
+0[0-9a-f]+ <[^>]+> eeba 0bef fsltodeq d0, #1
+0[0-9a-f]+ <[^>]+> eebb 0bef fultodeq d0, #1
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> eeba 0a67 fshtoseq s0, #1
+0[0-9a-f]+ <[^>]+> eebb 0a67 fuhtoseq s0, #1
+0[0-9a-f]+ <[^>]+> eeba 0b67 fshtodeq d0, #1
+0[0-9a-f]+ <[^>]+> eebb 0b67 fuhtodeq d0, #1
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> eebe 0a67 ftoshseq s0, #1
+0[0-9a-f]+ <[^>]+> eebf 0a67 ftouhseq s0, #1
+0[0-9a-f]+ <[^>]+> eebe 0b67 ftoshdeq d0, #1
+0[0-9a-f]+ <[^>]+> eebf 0b67 ftouhdeq d0, #1
+0[0-9a-f]+ <[^>]+> ecd0 1a04 fldmias r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> ecd0 1a04 fldmias r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> ecf0 1a04 fldmias r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> ed70 1a04 fldmdbs r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> ec90 3b08 vldmia r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> ec90 3b08 vldmia r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> ecb0 3b08 vldmia r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> ed30 3b08 vldmdb r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> ecd0 1a04 fldmiaseq r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> ecd0 1a04 fldmiaseq r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> ecf0 1a04 fldmiaseq r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> ed70 1a04 fldmdbseq r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> ec90 3b08 vldmiaeq r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> ec90 3b08 vldmiaeq r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> ecb0 3b08 vldmiaeq r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> ed30 3b08 vldmdbeq r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> ecc0 1a04 fstmias r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> ecc0 1a04 fstmias r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> ece0 1a04 fstmias r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> ed60 1a04 fstmdbs r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> ec80 3b08 vstmia r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> ec80 3b08 vstmia r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> eca0 3b08 vstmia r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> ed20 3b08 vstmdb r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> ecc0 1a04 fstmiaseq r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> ecc0 1a04 fstmiaseq r0, {s3-s6}
+0[0-9a-f]+ <[^>]+> ece0 1a04 fstmiaseq r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> ed60 1a04 fstmdbseq r0!, {s3-s6}
+0[0-9a-f]+ <[^>]+> bf01 itttt eq
+0[0-9a-f]+ <[^>]+> ec80 3b08 vstmiaeq r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> ec80 3b08 vstmiaeq r0, {d3-d6}
+0[0-9a-f]+ <[^>]+> eca0 3b08 vstmiaeq r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> ed20 3b08 vstmdbeq r0!, {d3-d6}
+0[0-9a-f]+ <[^>]+> ed90 0a01 flds s0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> ed90 0b01 vldr d0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ed90 0a01 fldseq s0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> ed90 0b01 vldreq d0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> ed80 0a01 fsts s0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> ed80 0b01 vstr d0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> bf04 itt eq
+0[0-9a-f]+ <[^>]+> ed80 0a01 fstseq s0, \[r0, #4\]
+0[0-9a-f]+ <[^>]+> ed80 0b01 vstreq d0, \[r0, #4\]
diff --git a/gas/testsuite/gas/arm/vfp-neon-syntax_t2.s b/gas/testsuite/gas/arm/vfp-neon-syntax_t2.s
new file mode 100644
index 000000000000..00f78d01cef7
--- /dev/null
+++ b/gas/testsuite/gas/arm/vfp-neon-syntax_t2.s
@@ -0,0 +1,2 @@
+ .thumb
+ .include "vfp-neon-syntax-inc.s"
diff --git a/gas/testsuite/gas/arm/vfp1.d b/gas/testsuite/gas/arm/vfp1.d
index 672b23de31d5..3894909539bb 100644
--- a/gas/testsuite/gas/arm/vfp1.d
+++ b/gas/testsuite/gas/arm/vfp1.d
@@ -24,20 +24,20 @@ Disassembly of section .text:
0+038 <[^>]*> ee100b40 fnmscd d0, d0, d0
0+03c <[^>]*> ee200b40 fnmuld d0, d0, d0
0+040 <[^>]*> ee300b40 fsubd d0, d0, d0
-0+044 <[^>]*> ed900b00 fldd d0, \[r0\]
-0+048 <[^>]*> ed800b00 fstd d0, \[r0\]
-0+04c <[^>]*> ec900b02 fldmiad r0, {d0}
-0+050 <[^>]*> ec900b02 fldmiad r0, {d0}
-0+054 <[^>]*> ecb00b02 fldmiad r0!, {d0}
-0+058 <[^>]*> ecb00b02 fldmiad r0!, {d0}
-0+05c <[^>]*> ed300b02 fldmdbd r0!, {d0}
-0+060 <[^>]*> ed300b02 fldmdbd r0!, {d0}
-0+064 <[^>]*> ec800b02 fstmiad r0, {d0}
-0+068 <[^>]*> ec800b02 fstmiad r0, {d0}
-0+06c <[^>]*> eca00b02 fstmiad r0!, {d0}
-0+070 <[^>]*> eca00b02 fstmiad r0!, {d0}
-0+074 <[^>]*> ed200b02 fstmdbd r0!, {d0}
-0+078 <[^>]*> ed200b02 fstmdbd r0!, {d0}
+0+044 <[^>]*> ed900b00 vldr d0, \[r0\]
+0+048 <[^>]*> ed800b00 vstr d0, \[r0\]
+0+04c <[^>]*> ec900b02 vldmia r0, {d0}
+0+050 <[^>]*> ec900b02 vldmia r0, {d0}
+0+054 <[^>]*> ecb00b02 vldmia r0!, {d0}
+0+058 <[^>]*> ecb00b02 vldmia r0!, {d0}
+0+05c <[^>]*> ed300b02 vldmdb r0!, {d0}
+0+060 <[^>]*> ed300b02 vldmdb r0!, {d0}
+0+064 <[^>]*> ec800b02 vstmia r0, {d0}
+0+068 <[^>]*> ec800b02 vstmia r0, {d0}
+0+06c <[^>]*> eca00b02 vstmia r0!, {d0}
+0+070 <[^>]*> eca00b02 vstmia r0!, {d0}
+0+074 <[^>]*> ed200b02 vstmdb r0!, {d0}
+0+078 <[^>]*> ed200b02 vstmdb r0!, {d0}
0+07c <[^>]*> eeb80bc0 fsitod d0, s0
0+080 <[^>]*> eeb80b40 fuitod d0, s0
0+084 <[^>]*> eebd0b40 ftosid s0, d0
@@ -46,10 +46,10 @@ Disassembly of section .text:
0+090 <[^>]*> eebc0bc0 ftouizd s0, d0
0+094 <[^>]*> eeb70ac0 fcvtds d0, s0
0+098 <[^>]*> eeb70bc0 fcvtsd s0, d0
-0+09c <[^>]*> ee300b10 fmrdh r0, d0
-0+0a0 <[^>]*> ee100b10 fmrdl r0, d0
-0+0a4 <[^>]*> ee200b10 fmdhr d0, r0
-0+0a8 <[^>]*> ee000b10 fmdlr d0, r0
+0+09c <[^>]*> ee300b10 vmov\.32 r0, d0\[1\]
+0+0a0 <[^>]*> ee100b10 vmov\.32 r0, d0\[0\]
+0+0a4 <[^>]*> ee200b10 vmov\.32 d0\[1\], r0
+0+0a8 <[^>]*> ee000b10 vmov\.32 d0\[0\], r0
0+0ac <[^>]*> eeb51b40 fcmpzd d1
0+0b0 <[^>]*> eeb52b40 fcmpzd d2
0+0b4 <[^>]*> eeb5fb40 fcmpzd d15
@@ -89,46 +89,46 @@ Disassembly of section .text:
0+13c <[^>]*> eeb70bc1 fcvtsd s0, d1
0+140 <[^>]*> eeb70bc2 fcvtsd s0, d2
0+144 <[^>]*> eeb70bcf fcvtsd s0, d15
-0+148 <[^>]*> ee301b10 fmrdh r1, d0
-0+14c <[^>]*> ee30eb10 fmrdh lr, d0
-0+150 <[^>]*> ee310b10 fmrdh r0, d1
-0+154 <[^>]*> ee320b10 fmrdh r0, d2
-0+158 <[^>]*> ee3f0b10 fmrdh r0, d15
-0+15c <[^>]*> ee101b10 fmrdl r1, d0
-0+160 <[^>]*> ee10eb10 fmrdl lr, d0
-0+164 <[^>]*> ee110b10 fmrdl r0, d1
-0+168 <[^>]*> ee120b10 fmrdl r0, d2
-0+16c <[^>]*> ee1f0b10 fmrdl r0, d15
-0+170 <[^>]*> ee201b10 fmdhr d0, r1
-0+174 <[^>]*> ee20eb10 fmdhr d0, lr
-0+178 <[^>]*> ee210b10 fmdhr d1, r0
-0+17c <[^>]*> ee220b10 fmdhr d2, r0
-0+180 <[^>]*> ee2f0b10 fmdhr d15, r0
-0+184 <[^>]*> ee001b10 fmdlr d0, r1
-0+188 <[^>]*> ee00eb10 fmdlr d0, lr
-0+18c <[^>]*> ee010b10 fmdlr d1, r0
-0+190 <[^>]*> ee020b10 fmdlr d2, r0
-0+194 <[^>]*> ee0f0b10 fmdlr d15, r0
-0+198 <[^>]*> ed910b00 fldd d0, \[r1\]
-0+19c <[^>]*> ed9e0b00 fldd d0, \[lr\]
-0+1a0 <[^>]*> ed900b00 fldd d0, \[r0\]
-0+1a4 <[^>]*> ed900bff fldd d0, \[r0, #1020\]
-0+1a8 <[^>]*> ed100bff fldd d0, \[r0, #-1020\]
-0+1ac <[^>]*> ed901b00 fldd d1, \[r0\]
-0+1b0 <[^>]*> ed902b00 fldd d2, \[r0\]
-0+1b4 <[^>]*> ed90fb00 fldd d15, \[r0\]
-0+1b8 <[^>]*> ed8ccbc9 fstd d12, \[ip, #804\]
-0+1bc <[^>]*> ec901b02 fldmiad r0, {d1}
-0+1c0 <[^>]*> ec902b02 fldmiad r0, {d2}
-0+1c4 <[^>]*> ec90fb02 fldmiad r0, {d15}
-0+1c8 <[^>]*> ec900b04 fldmiad r0, {d0-d1}
-0+1cc <[^>]*> ec900b06 fldmiad r0, {d0-d2}
-0+1d0 <[^>]*> ec900b20 fldmiad r0, {d0-d15}
-0+1d4 <[^>]*> ec901b1e fldmiad r0, {d1-d15}
-0+1d8 <[^>]*> ec902b1c fldmiad r0, {d2-d15}
-0+1dc <[^>]*> ec90eb04 fldmiad r0, {d14-d15}
-0+1e0 <[^>]*> ec910b02 fldmiad r1, {d0}
-0+1e4 <[^>]*> ec9e0b02 fldmiad lr, {d0}
+0+148 <[^>]*> ee301b10 vmov\.32 r1, d0\[1\]
+0+14c <[^>]*> ee30eb10 vmov\.32 lr, d0\[1\]
+0+150 <[^>]*> ee310b10 vmov\.32 r0, d1\[1\]
+0+154 <[^>]*> ee320b10 vmov\.32 r0, d2\[1\]
+0+158 <[^>]*> ee3f0b10 vmov\.32 r0, d15\[1\]
+0+15c <[^>]*> ee101b10 vmov\.32 r1, d0\[0\]
+0+160 <[^>]*> ee10eb10 vmov\.32 lr, d0\[0\]
+0+164 <[^>]*> ee110b10 vmov\.32 r0, d1\[0\]
+0+168 <[^>]*> ee120b10 vmov\.32 r0, d2\[0\]
+0+16c <[^>]*> ee1f0b10 vmov\.32 r0, d15\[0\]
+0+170 <[^>]*> ee201b10 vmov\.32 d0\[1\], r1
+0+174 <[^>]*> ee20eb10 vmov\.32 d0\[1\], lr
+0+178 <[^>]*> ee210b10 vmov\.32 d1\[1\], r0
+0+17c <[^>]*> ee220b10 vmov\.32 d2\[1\], r0
+0+180 <[^>]*> ee2f0b10 vmov\.32 d15\[1\], r0
+0+184 <[^>]*> ee001b10 vmov\.32 d0\[0\], r1
+0+188 <[^>]*> ee00eb10 vmov\.32 d0\[0\], lr
+0+18c <[^>]*> ee010b10 vmov\.32 d1\[0\], r0
+0+190 <[^>]*> ee020b10 vmov\.32 d2\[0\], r0
+0+194 <[^>]*> ee0f0b10 vmov\.32 d15\[0\], r0
+0+198 <[^>]*> ed910b00 vldr d0, \[r1\]
+0+19c <[^>]*> ed9e0b00 vldr d0, \[lr\]
+0+1a0 <[^>]*> ed900b00 vldr d0, \[r0\]
+0+1a4 <[^>]*> ed900bff vldr d0, \[r0, #1020\]
+0+1a8 <[^>]*> ed100bff vldr d0, \[r0, #-1020\]
+0+1ac <[^>]*> ed901b00 vldr d1, \[r0\]
+0+1b0 <[^>]*> ed902b00 vldr d2, \[r0\]
+0+1b4 <[^>]*> ed90fb00 vldr d15, \[r0\]
+0+1b8 <[^>]*> ed8ccbc9 vstr d12, \[ip, #804\]
+0+1bc <[^>]*> ec901b02 vldmia r0, {d1}
+0+1c0 <[^>]*> ec902b02 vldmia r0, {d2}
+0+1c4 <[^>]*> ec90fb02 vldmia r0, {d15}
+0+1c8 <[^>]*> ec900b04 vldmia r0, {d0-d1}
+0+1cc <[^>]*> ec900b06 vldmia r0, {d0-d2}
+0+1d0 <[^>]*> ec900b20 vldmia r0, {d0-d15}
+0+1d4 <[^>]*> ec901b1e vldmia r0, {d1-d15}
+0+1d8 <[^>]*> ec902b1c vldmia r0, {d2-d15}
+0+1dc <[^>]*> ec90eb04 vldmia r0, {d14-d15}
+0+1e0 <[^>]*> ec910b02 vldmia r1, {d0}
+0+1e4 <[^>]*> ec9e0b02 vldmia lr, {d0}
0+1e8 <[^>]*> eeb50b40 fcmpzd d0
0+1ec <[^>]*> eeb51b40 fcmpzd d1
0+1f0 <[^>]*> eeb52b40 fcmpzd d2
@@ -162,20 +162,20 @@ Disassembly of section .text:
0+260 <[^>]*> 0e167b4b fnmscdeq d7, d6, d11
0+264 <[^>]*> 0e245b4c fnmuldeq d5, d4, d12
0+268 <[^>]*> 0e3d3b4e fsubdeq d3, d13, d14
-0+26c <[^>]*> 0d952b00 flddeq d2, \[r5\]
-0+270 <[^>]*> 0d8c1b00 fstdeq d1, \[ip\]
-0+274 <[^>]*> 0c911b02 fldmiadeq r1, {d1}
-0+278 <[^>]*> 0c922b02 fldmiadeq r2, {d2}
-0+27c <[^>]*> 0cb33b02 fldmiadeq r3!, {d3}
-0+280 <[^>]*> 0cb44b02 fldmiadeq r4!, {d4}
-0+284 <[^>]*> 0d355b02 fldmdbdeq r5!, {d5}
-0+288 <[^>]*> 0d366b02 fldmdbdeq r6!, {d6}
-0+28c <[^>]*> 0c87fb02 fstmiadeq r7, {d15}
-0+290 <[^>]*> 0c88eb02 fstmiadeq r8, {d14}
-0+294 <[^>]*> 0ca9db02 fstmiadeq r9!, {d13}
-0+298 <[^>]*> 0caacb02 fstmiadeq sl!, {d12}
-0+29c <[^>]*> 0d2bbb02 fstmdbdeq fp!, {d11}
-0+2a0 <[^>]*> 0d2cab02 fstmdbdeq ip!, {d10}
+0+26c <[^>]*> 0d952b00 vldreq d2, \[r5\]
+0+270 <[^>]*> 0d8c1b00 vstreq d1, \[ip\]
+0+274 <[^>]*> 0c911b02 vldmiaeq r1, {d1}
+0+278 <[^>]*> 0c922b02 vldmiaeq r2, {d2}
+0+27c <[^>]*> 0cb33b02 vldmiaeq r3!, {d3}
+0+280 <[^>]*> 0cb44b02 vldmiaeq r4!, {d4}
+0+284 <[^>]*> 0d355b02 vldmdbeq r5!, {d5}
+0+288 <[^>]*> 0d366b02 vldmdbeq r6!, {d6}
+0+28c <[^>]*> 0c87fb02 vstmiaeq r7, {d15}
+0+290 <[^>]*> 0c88eb02 vstmiaeq r8, {d14}
+0+294 <[^>]*> 0ca9db02 vstmiaeq r9!, {d13}
+0+298 <[^>]*> 0caacb02 vstmiaeq sl!, {d12}
+0+29c <[^>]*> 0d2bbb02 vstmdbeq fp!, {d11}
+0+2a0 <[^>]*> 0d2cab02 vstmdbeq ip!, {d10}
0+2a4 <[^>]*> 0eb8fbe0 fsitodeq d15, s1
0+2a8 <[^>]*> 0eb81b6f fuitodeq d1, s31
0+2ac <[^>]*> 0efd0b4f ftosideq s1, d15
@@ -184,10 +184,10 @@ Disassembly of section .text:
0+2b8 <[^>]*> 0efc5bc3 ftouizdeq s11, d3
0+2bc <[^>]*> 0eb71ac5 fcvtdseq d1, s10
0+2c0 <[^>]*> 0ef75bc1 fcvtsdeq s11, d1
-0+2c4 <[^>]*> 0e318b10 fmrdheq r8, d1
-0+2c8 <[^>]*> 0e1f7b10 fmrdleq r7, d15
-0+2cc <[^>]*> 0e21fb10 fmdhreq d1, pc
-0+2d0 <[^>]*> 0e0f1b10 fmdlreq d15, r1
+0+2c4 <[^>]*> 0e318b10 vmoveq\.32 r8, d1\[1\]
+0+2c8 <[^>]*> 0e1f7b10 vmoveq\.32 r7, d15\[0\]
+0+2cc <[^>]*> 0e21fb10 vmoveq\.32 d1\[1\], pc
+0+2d0 <[^>]*> 0e0f1b10 vmoveq\.32 d15\[0\], r1
0+2d4 <[^>]*> e1a00000 ? nop[ ]+\(mov r0,r0\)
0+2d8 <[^>]*> e1a00000 ? nop[ ]+\(mov r0,r0\)
0+2dc <[^>]*> e1a00000 ? nop[ ]+\(mov r0,r0\)
diff --git a/gas/testsuite/gas/arm/vfp1_t2.d b/gas/testsuite/gas/arm/vfp1_t2.d
index 22c4fd6f01dc..3bf1f9a9d74b 100644
--- a/gas/testsuite/gas/arm/vfp1_t2.d
+++ b/gas/testsuite/gas/arm/vfp1_t2.d
@@ -24,20 +24,20 @@ Disassembly of section .text:
0+038 <[^>]*> ee10 0b40 fnmscd d0, d0, d0
0+03c <[^>]*> ee20 0b40 fnmuld d0, d0, d0
0+040 <[^>]*> ee30 0b40 fsubd d0, d0, d0
-0+044 <[^>]*> ed90 0b00 fldd d0, \[r0\]
-0+048 <[^>]*> ed80 0b00 fstd d0, \[r0\]
-0+04c <[^>]*> ec90 0b02 fldmiad r0, {d0}
-0+050 <[^>]*> ec90 0b02 fldmiad r0, {d0}
-0+054 <[^>]*> ecb0 0b02 fldmiad r0!, {d0}
-0+058 <[^>]*> ecb0 0b02 fldmiad r0!, {d0}
-0+05c <[^>]*> ed30 0b02 fldmdbd r0!, {d0}
-0+060 <[^>]*> ed30 0b02 fldmdbd r0!, {d0}
-0+064 <[^>]*> ec80 0b02 fstmiad r0, {d0}
-0+068 <[^>]*> ec80 0b02 fstmiad r0, {d0}
-0+06c <[^>]*> eca0 0b02 fstmiad r0!, {d0}
-0+070 <[^>]*> eca0 0b02 fstmiad r0!, {d0}
-0+074 <[^>]*> ed20 0b02 fstmdbd r0!, {d0}
-0+078 <[^>]*> ed20 0b02 fstmdbd r0!, {d0}
+0+044 <[^>]*> ed90 0b00 vldr d0, \[r0\]
+0+048 <[^>]*> ed80 0b00 vstr d0, \[r0\]
+0+04c <[^>]*> ec90 0b02 vldmia r0, {d0}
+0+050 <[^>]*> ec90 0b02 vldmia r0, {d0}
+0+054 <[^>]*> ecb0 0b02 vldmia r0!, {d0}
+0+058 <[^>]*> ecb0 0b02 vldmia r0!, {d0}
+0+05c <[^>]*> ed30 0b02 vldmdb r0!, {d0}
+0+060 <[^>]*> ed30 0b02 vldmdb r0!, {d0}
+0+064 <[^>]*> ec80 0b02 vstmia r0, {d0}
+0+068 <[^>]*> ec80 0b02 vstmia r0, {d0}
+0+06c <[^>]*> eca0 0b02 vstmia r0!, {d0}
+0+070 <[^>]*> eca0 0b02 vstmia r0!, {d0}
+0+074 <[^>]*> ed20 0b02 vstmdb r0!, {d0}
+0+078 <[^>]*> ed20 0b02 vstmdb r0!, {d0}
0+07c <[^>]*> eeb8 0bc0 fsitod d0, s0
0+080 <[^>]*> eeb8 0b40 fuitod d0, s0
0+084 <[^>]*> eebd 0b40 ftosid s0, d0
@@ -46,10 +46,10 @@ Disassembly of section .text:
0+090 <[^>]*> eebc 0bc0 ftouizd s0, d0
0+094 <[^>]*> eeb7 0ac0 fcvtds d0, s0
0+098 <[^>]*> eeb7 0bc0 fcvtsd s0, d0
-0+09c <[^>]*> ee30 0b10 fmrdh r0, d0
-0+0a0 <[^>]*> ee10 0b10 fmrdl r0, d0
-0+0a4 <[^>]*> ee20 0b10 fmdhr d0, r0
-0+0a8 <[^>]*> ee00 0b10 fmdlr d0, r0
+0+09c <[^>]*> ee30 0b10 vmov\.32 r0, d0\[1\]
+0+0a0 <[^>]*> ee10 0b10 vmov\.32 r0, d0\[0\]
+0+0a4 <[^>]*> ee20 0b10 vmov\.32 d0\[1\], r0
+0+0a8 <[^>]*> ee00 0b10 vmov\.32 d0\[0\], r0
0+0ac <[^>]*> eeb5 1b40 fcmpzd d1
0+0b0 <[^>]*> eeb5 2b40 fcmpzd d2
0+0b4 <[^>]*> eeb5 fb40 fcmpzd d15
@@ -89,46 +89,46 @@ Disassembly of section .text:
0+13c <[^>]*> eeb7 0bc1 fcvtsd s0, d1
0+140 <[^>]*> eeb7 0bc2 fcvtsd s0, d2
0+144 <[^>]*> eeb7 0bcf fcvtsd s0, d15
-0+148 <[^>]*> ee30 1b10 fmrdh r1, d0
-0+14c <[^>]*> ee30 eb10 fmrdh lr, d0
-0+150 <[^>]*> ee31 0b10 fmrdh r0, d1
-0+154 <[^>]*> ee32 0b10 fmrdh r0, d2
-0+158 <[^>]*> ee3f 0b10 fmrdh r0, d15
-0+15c <[^>]*> ee10 1b10 fmrdl r1, d0
-0+160 <[^>]*> ee10 eb10 fmrdl lr, d0
-0+164 <[^>]*> ee11 0b10 fmrdl r0, d1
-0+168 <[^>]*> ee12 0b10 fmrdl r0, d2
-0+16c <[^>]*> ee1f 0b10 fmrdl r0, d15
-0+170 <[^>]*> ee20 1b10 fmdhr d0, r1
-0+174 <[^>]*> ee20 eb10 fmdhr d0, lr
-0+178 <[^>]*> ee21 0b10 fmdhr d1, r0
-0+17c <[^>]*> ee22 0b10 fmdhr d2, r0
-0+180 <[^>]*> ee2f 0b10 fmdhr d15, r0
-0+184 <[^>]*> ee00 1b10 fmdlr d0, r1
-0+188 <[^>]*> ee00 eb10 fmdlr d0, lr
-0+18c <[^>]*> ee01 0b10 fmdlr d1, r0
-0+190 <[^>]*> ee02 0b10 fmdlr d2, r0
-0+194 <[^>]*> ee0f 0b10 fmdlr d15, r0
-0+198 <[^>]*> ed91 0b00 fldd d0, \[r1\]
-0+19c <[^>]*> ed9e 0b00 fldd d0, \[lr\]
-0+1a0 <[^>]*> ed90 0b00 fldd d0, \[r0\]
-0+1a4 <[^>]*> ed90 0bff fldd d0, \[r0, #1020\]
-0+1a8 <[^>]*> ed10 0bff fldd d0, \[r0, #-1020\]
-0+1ac <[^>]*> ed90 1b00 fldd d1, \[r0\]
-0+1b0 <[^>]*> ed90 2b00 fldd d2, \[r0\]
-0+1b4 <[^>]*> ed90 fb00 fldd d15, \[r0\]
-0+1b8 <[^>]*> ed8c cbc9 fstd d12, \[ip, #804\]
-0+1bc <[^>]*> ec90 1b02 fldmiad r0, {d1}
-0+1c0 <[^>]*> ec90 2b02 fldmiad r0, {d2}
-0+1c4 <[^>]*> ec90 fb02 fldmiad r0, {d15}
-0+1c8 <[^>]*> ec90 0b04 fldmiad r0, {d0-d1}
-0+1cc <[^>]*> ec90 0b06 fldmiad r0, {d0-d2}
-0+1d0 <[^>]*> ec90 0b20 fldmiad r0, {d0-d15}
-0+1d4 <[^>]*> ec90 1b1e fldmiad r0, {d1-d15}
-0+1d8 <[^>]*> ec90 2b1c fldmiad r0, {d2-d15}
-0+1dc <[^>]*> ec90 eb04 fldmiad r0, {d14-d15}
-0+1e0 <[^>]*> ec91 0b02 fldmiad r1, {d0}
-0+1e4 <[^>]*> ec9e 0b02 fldmiad lr, {d0}
+0+148 <[^>]*> ee30 1b10 vmov\.32 r1, d0\[1\]
+0+14c <[^>]*> ee30 eb10 vmov\.32 lr, d0\[1\]
+0+150 <[^>]*> ee31 0b10 vmov\.32 r0, d1\[1\]
+0+154 <[^>]*> ee32 0b10 vmov\.32 r0, d2\[1\]
+0+158 <[^>]*> ee3f 0b10 vmov\.32 r0, d15\[1\]
+0+15c <[^>]*> ee10 1b10 vmov\.32 r1, d0\[0\]
+0+160 <[^>]*> ee10 eb10 vmov\.32 lr, d0\[0\]
+0+164 <[^>]*> ee11 0b10 vmov\.32 r0, d1\[0\]
+0+168 <[^>]*> ee12 0b10 vmov\.32 r0, d2\[0\]
+0+16c <[^>]*> ee1f 0b10 vmov\.32 r0, d15\[0\]
+0+170 <[^>]*> ee20 1b10 vmov\.32 d0\[1\], r1
+0+174 <[^>]*> ee20 eb10 vmov\.32 d0\[1\], lr
+0+178 <[^>]*> ee21 0b10 vmov\.32 d1\[1\], r0
+0+17c <[^>]*> ee22 0b10 vmov\.32 d2\[1\], r0
+0+180 <[^>]*> ee2f 0b10 vmov\.32 d15\[1\], r0
+0+184 <[^>]*> ee00 1b10 vmov\.32 d0\[0\], r1
+0+188 <[^>]*> ee00 eb10 vmov\.32 d0\[0\], lr
+0+18c <[^>]*> ee01 0b10 vmov\.32 d1\[0\], r0
+0+190 <[^>]*> ee02 0b10 vmov\.32 d2\[0\], r0
+0+194 <[^>]*> ee0f 0b10 vmov\.32 d15\[0\], r0
+0+198 <[^>]*> ed91 0b00 vldr d0, \[r1\]
+0+19c <[^>]*> ed9e 0b00 vldr d0, \[lr\]
+0+1a0 <[^>]*> ed90 0b00 vldr d0, \[r0\]
+0+1a4 <[^>]*> ed90 0bff vldr d0, \[r0, #1020\]
+0+1a8 <[^>]*> ed10 0bff vldr d0, \[r0, #-1020\]
+0+1ac <[^>]*> ed90 1b00 vldr d1, \[r0\]
+0+1b0 <[^>]*> ed90 2b00 vldr d2, \[r0\]
+0+1b4 <[^>]*> ed90 fb00 vldr d15, \[r0\]
+0+1b8 <[^>]*> ed8c cbc9 vstr d12, \[ip, #804\]
+0+1bc <[^>]*> ec90 1b02 vldmia r0, {d1}
+0+1c0 <[^>]*> ec90 2b02 vldmia r0, {d2}
+0+1c4 <[^>]*> ec90 fb02 vldmia r0, {d15}
+0+1c8 <[^>]*> ec90 0b04 vldmia r0, {d0-d1}
+0+1cc <[^>]*> ec90 0b06 vldmia r0, {d0-d2}
+0+1d0 <[^>]*> ec90 0b20 vldmia r0, {d0-d15}
+0+1d4 <[^>]*> ec90 1b1e vldmia r0, {d1-d15}
+0+1d8 <[^>]*> ec90 2b1c vldmia r0, {d2-d15}
+0+1dc <[^>]*> ec90 eb04 vldmia r0, {d14-d15}
+0+1e0 <[^>]*> ec91 0b02 vldmia r1, {d0}
+0+1e4 <[^>]*> ec9e 0b02 vldmia lr, {d0}
0+1e8 <[^>]*> eeb5 0b40 fcmpzd d0
0+1ec <[^>]*> eeb5 1b40 fcmpzd d1
0+1f0 <[^>]*> eeb5 2b40 fcmpzd d2
@@ -145,61 +145,60 @@ Disassembly of section .text:
0+21c <[^>]*> eeb5 db40 fcmpzd d13
0+220 <[^>]*> eeb5 eb40 fcmpzd d14
0+224 <[^>]*> eeb5 fb40 fcmpzd d15
-# The "(eq|)" should be replaces by "eq" once the disassembler is fixed.
0+228 <[^>]*> bf01 itttt eq
-0+22a <[^>]*> eeb4 1bcf fcmped(eq|) d1, d15
-0+22e <[^>]*> eeb5 2bc0 fcmpezd(eq|) d2
-0+232 <[^>]*> eeb4 3b4e fcmpd(eq|) d3, d14
-0+236 <[^>]*> eeb5 4b40 fcmpzd(eq|) d4
+0+22a <[^>]*> eeb4 1bcf fcmpedeq d1, d15
+0+22e <[^>]*> eeb5 2bc0 fcmpezdeq d2
+0+232 <[^>]*> eeb4 3b4e fcmpdeq d3, d14
+0+236 <[^>]*> eeb5 4b40 fcmpzdeq d4
0+23a <[^>]*> bf01 itttt eq
-0+23c <[^>]*> eeb0 5bcd fabsd(eq|) d5, d13
-0+240 <[^>]*> eeb0 6b4c fcpyd(eq|) d6, d12
-0+244 <[^>]*> eeb1 7b4b fnegd(eq|) d7, d11
-0+248 <[^>]*> eeb1 8bca fsqrtd(eq|) d8, d10
+0+23c <[^>]*> eeb0 5bcd fabsdeq d5, d13
+0+240 <[^>]*> eeb0 6b4c fcpydeq d6, d12
+0+244 <[^>]*> eeb1 7b4b fnegdeq d7, d11
+0+248 <[^>]*> eeb1 8bca fsqrtdeq d8, d10
0+24c <[^>]*> bf01 itttt eq
-0+24e <[^>]*> ee31 9b0f faddd(eq|) d9, d1, d15
-0+252 <[^>]*> ee83 2b0e fdivd(eq|) d2, d3, d14
-0+256 <[^>]*> ee0d 4b0c fmacd(eq|) d4, d13, d12
-0+25a <[^>]*> ee16 5b0b fmscd(eq|) d5, d6, d11
+0+24e <[^>]*> ee31 9b0f fadddeq d9, d1, d15
+0+252 <[^>]*> ee83 2b0e fdivdeq d2, d3, d14
+0+256 <[^>]*> ee0d 4b0c fmacdeq d4, d13, d12
+0+25a <[^>]*> ee16 5b0b fmscdeq d5, d6, d11
0+25e <[^>]*> bf01 itttt eq
-0+260 <[^>]*> ee2a 7b09 fmuld(eq|) d7, d10, d9
-0+264 <[^>]*> ee09 8b4a fnmacd(eq|) d8, d9, d10
-0+268 <[^>]*> ee16 7b4b fnmscd(eq|) d7, d6, d11
-0+26c <[^>]*> ee24 5b4c fnmuld(eq|) d5, d4, d12
+0+260 <[^>]*> ee2a 7b09 fmuldeq d7, d10, d9
+0+264 <[^>]*> ee09 8b4a fnmacdeq d8, d9, d10
+0+268 <[^>]*> ee16 7b4b fnmscdeq d7, d6, d11
+0+26c <[^>]*> ee24 5b4c fnmuldeq d5, d4, d12
0+270 <[^>]*> bf02 ittt eq
-0+272 <[^>]*> ee3d 3b4e fsubd(eq|) d3, d13, d14
-0+276 <[^>]*> ed95 2b00 fldd(eq|) d2, \[r5\]
-0+27a <[^>]*> ed8c 1b00 fstd(eq|) d1, \[ip\]
+0+272 <[^>]*> ee3d 3b4e fsubdeq d3, d13, d14
+0+276 <[^>]*> ed95 2b00 vldreq d2, \[r5\]
+0+27a <[^>]*> ed8c 1b00 vstreq d1, \[ip\]
0+27e <[^>]*> bf01 itttt eq
-0+280 <[^>]*> ec91 1b02 fldmiad(eq|) r1, {d1}
-0+284 <[^>]*> ec92 2b02 fldmiad(eq|) r2, {d2}
-0+288 <[^>]*> ecb3 3b02 fldmiad(eq|) r3!, {d3}
-0+28c <[^>]*> ecb4 4b02 fldmiad(eq|) r4!, {d4}
+0+280 <[^>]*> ec91 1b02 vldmiaeq r1, {d1}
+0+284 <[^>]*> ec92 2b02 vldmiaeq r2, {d2}
+0+288 <[^>]*> ecb3 3b02 vldmiaeq r3!, {d3}
+0+28c <[^>]*> ecb4 4b02 vldmiaeq r4!, {d4}
0+290 <[^>]*> bf01 itttt eq
-0+292 <[^>]*> ed35 5b02 fldmdbd(eq|) r5!, {d5}
-0+296 <[^>]*> ed36 6b02 fldmdbd(eq|) r6!, {d6}
-0+29a <[^>]*> ec87 fb02 fstmiad(eq|) r7, {d15}
-0+29e <[^>]*> ec88 eb02 fstmiad(eq|) r8, {d14}
+0+292 <[^>]*> ed35 5b02 vldmdbeq r5!, {d5}
+0+296 <[^>]*> ed36 6b02 vldmdbeq r6!, {d6}
+0+29a <[^>]*> ec87 fb02 vstmiaeq r7, {d15}
+0+29e <[^>]*> ec88 eb02 vstmiaeq r8, {d14}
0+2a2 <[^>]*> bf01 itttt eq
-0+2a4 <[^>]*> eca9 db02 fstmiad(eq|) r9!, {d13}
-0+2a8 <[^>]*> ecaa cb02 fstmiad(eq|) sl!, {d12}
-0+2ac <[^>]*> ed2b bb02 fstmdbd(eq|) fp!, {d11}
-0+2b0 <[^>]*> ed2c ab02 fstmdbd(eq|) ip!, {d10}
+0+2a4 <[^>]*> eca9 db02 vstmiaeq r9!, {d13}
+0+2a8 <[^>]*> ecaa cb02 vstmiaeq sl!, {d12}
+0+2ac <[^>]*> ed2b bb02 vstmdbeq fp!, {d11}
+0+2b0 <[^>]*> ed2c ab02 vstmdbeq ip!, {d10}
0+2b4 <[^>]*> bf01 itttt eq
-0+2b6 <[^>]*> eeb8 fbe0 fsitod(eq|) d15, s1
-0+2ba <[^>]*> eeb8 1b6f fuitod(eq|) d1, s31
-0+2be <[^>]*> eefd 0b4f ftosid(eq|) s1, d15
-0+2c2 <[^>]*> eefd fbc2 ftosizd(eq|) s31, d2
+0+2b6 <[^>]*> eeb8 fbe0 fsitodeq d15, s1
+0+2ba <[^>]*> eeb8 1b6f fuitodeq d1, s31
+0+2be <[^>]*> eefd 0b4f ftosideq s1, d15
+0+2c2 <[^>]*> eefd fbc2 ftosizdeq s31, d2
0+2c6 <[^>]*> bf01 itttt eq
-0+2c8 <[^>]*> eefc 7b42 ftouid(eq|) s15, d2
-0+2cc <[^>]*> eefc 5bc3 ftouizd(eq|) s11, d3
-0+2d0 <[^>]*> eeb7 1ac5 fcvtds(eq|) d1, s10
-0+2d4 <[^>]*> eef7 5bc1 fcvtsd(eq|) s11, d1
+0+2c8 <[^>]*> eefc 7b42 ftouideq s15, d2
+0+2cc <[^>]*> eefc 5bc3 ftouizdeq s11, d3
+0+2d0 <[^>]*> eeb7 1ac5 fcvtdseq d1, s10
+0+2d4 <[^>]*> eef7 5bc1 fcvtsdeq s11, d1
0+2d8 <[^>]*> bf01 itttt eq
-0+2da <[^>]*> ee31 8b10 fmrdh(eq|) r8, d1
-0+2de <[^>]*> ee1f 7b10 fmrdl(eq|) r7, d15
-0+2e2 <[^>]*> ee21 fb10 fmdhr(eq|) d1, pc
-0+2e6 <[^>]*> ee0f 1b10 fmdlr(eq|) d15, r1
+0+2da <[^>]*> ee31 8b10 vmoveq\.32 r8, d1\[1\]
+0+2de <[^>]*> ee1f 7b10 vmoveq\.32 r7, d15\[0\]
+0+2e2 <[^>]*> ee21 fb10 vmoveq\.32 d1\[1\], pc
+0+2e6 <[^>]*> ee0f 1b10 vmoveq\.32 d15\[0\], r1
0+2ea <[^>]*> bf00 nop
0+2ec <[^>]*> bf00 nop
0+2ee <[^>]*> bf00 nop
diff --git a/gas/testsuite/gas/arm/vfp1xD.d b/gas/testsuite/gas/arm/vfp1xD.d
index 096b46c86e4c..22932e5284c0 100644
--- a/gas/testsuite/gas/arm/vfp1xD.d
+++ b/gas/testsuite/gas/arm/vfp1xD.d
@@ -239,3 +239,15 @@ Disassembly of section .text:
0+394 <[^>]*> 0ef09a10 fmrxeq r9, fpsid
0+398 <[^>]*> 0e019a90 fmsreq s3, r9
0+39c <[^>]*> 0ee08a10 fmxreq fpsid, r8
+0+3a0 <[^>]*> eef90a10 fmrx r0, fpinst @ Impl def
+0+3a4 <[^>]*> eefa0a10 fmrx r0, fpinst2 @ Impl def
+0+3a8 <[^>]*> eef70a10 fmrx r0, mvfr0
+0+3ac <[^>]*> eef60a10 fmrx r0, mvfr1
+0+3b0 <[^>]*> eefc0a10 fmrx r0, <impl def 0xc>
+0+3b4 <[^>]*> eee90a10 fmxr fpinst, r0 @ Impl def
+0+3b8 <[^>]*> eeea0a10 fmxr fpinst2, r0 @ Impl def
+0+3bc <[^>]*> eee70a10 fmxr mvfr0, r0
+0+3c0 <[^>]*> eee60a10 fmxr mvfr1, r0
+0+3c4 <[^>]*> eeec0a10 fmxr <impl def 0xc>, r0
+0+3c8 <[^>]*> e1a00000 nop \(mov r0,r0\)
+0+3cc <[^>]*> e1a00000 nop \(mov r0,r0\)
diff --git a/gas/testsuite/gas/arm/vfp1xD.s b/gas/testsuite/gas/arm/vfp1xD.s
index 82f080f499b0..ecc022638158 100644
--- a/gas/testsuite/gas/arm/vfp1xD.s
+++ b/gas/testsuite/gas/arm/vfp1xD.s
@@ -337,3 +337,17 @@ F:
fmsreq s3, r9
fmxreq fpsid, r8
+ @ Implementation specific system registers
+ fmrx r0, fpinst
+ fmrx r0, fpinst2
+ fmrx r0, mvfr0
+ fmrx r0, mvfr1
+ fmrx r0, c12
+ fmxr fpinst, r0
+ fmxr fpinst2, r0
+ fmxr mvfr0, r0
+ fmxr mvfr1, r0
+ fmxr c12, r0
+
+ nop
+ nop
diff --git a/gas/testsuite/gas/arm/vfp1xD_t2.d b/gas/testsuite/gas/arm/vfp1xD_t2.d
index 327383d01c5b..d2943114d6c0 100644
--- a/gas/testsuite/gas/arm/vfp1xD_t2.d
+++ b/gas/testsuite/gas/arm/vfp1xD_t2.d
@@ -185,74 +185,87 @@ Disassembly of section .text:
0+2bc <[^>]*> eef5 ea40 fcmpzs s29
0+2c0 <[^>]*> eeb5 fa40 fcmpzs s30
0+2c4 <[^>]*> eef5 fa40 fcmpzs s31
-# The "(eq|)" should be replaces by "eq" once the disassembler is fixed.
0+2c8 <[^>]*> bf01 itttt eq
-0+2ca <[^>]*> eef1 fa10 fmstat(eq|)
-0+2ce <[^>]*> eef4 1ae3 fcmpes(eq|) s3, s7
-0+2d2 <[^>]*> eef5 2ac0 fcmpezs(eq|) s5
-0+2d6 <[^>]*> eef4 0a41 fcmps(eq|) s1, s2
+0+2ca <[^>]*> eef1 fa10 fmstateq
+0+2ce <[^>]*> eef4 1ae3 fcmpeseq s3, s7
+0+2d2 <[^>]*> eef5 2ac0 fcmpezseq s5
+0+2d6 <[^>]*> eef4 0a41 fcmpseq s1, s2
0+2da <[^>]*> bf01 itttt eq
-0+2dc <[^>]*> eef5 0a40 fcmpzs(eq|) s1
-0+2e0 <[^>]*> eef0 0ae1 fabss(eq|) s1, s3
-0+2e4 <[^>]*> eef0 fa69 fcpys(eq|) s31, s19
-0+2e8 <[^>]*> eeb1 aa44 fnegs(eq|) s20, s8
+0+2dc <[^>]*> eef5 0a40 fcmpzseq s1
+0+2e0 <[^>]*> eef0 0ae1 fabsseq s1, s3
+0+2e4 <[^>]*> eef0 fa69 fcpyseq s31, s19
+0+2e8 <[^>]*> eeb1 aa44 fnegseq s20, s8
0+2ec <[^>]*> bf01 itttt eq
-0+2ee <[^>]*> eef1 2ae3 fsqrts(eq|) s5, s7
-0+2f2 <[^>]*> ee32 3a82 fadds(eq|) s6, s5, s4
-0+2f6 <[^>]*> eec1 1a20 fdivs(eq|) s3, s2, s1
-0+2fa <[^>]*> ee4f fa2e fmacs(eq|) s31, s30, s29
+0+2ee <[^>]*> eef1 2ae3 fsqrtseq s5, s7
+0+2f2 <[^>]*> ee32 3a82 faddseq s6, s5, s4
+0+2f6 <[^>]*> eec1 1a20 fdivseq s3, s2, s1
+0+2fa <[^>]*> ee4f fa2e fmacseq s31, s30, s29
0+2fe <[^>]*> bf01 itttt eq
-0+300 <[^>]*> ee1d ea8d fmscs(eq|) s28, s27, s26
-0+304 <[^>]*> ee6c ca2b fmuls(eq|) s25, s24, s23
-0+308 <[^>]*> ee0a baca fnmacs(eq|) s22, s21, s20
-0+30c <[^>]*> ee59 9a68 fnmscs(eq|) s19, s18, s17
+0+300 <[^>]*> ee1d ea8d fmscseq s28, s27, s26
+0+304 <[^>]*> ee6c ca2b fmulseq s25, s24, s23
+0+308 <[^>]*> ee0a baca fnmacseq s22, s21, s20
+0+30c <[^>]*> ee59 9a68 fnmscseq s19, s18, s17
0+310 <[^>]*> bf01 itttt eq
-0+312 <[^>]*> ee27 8ac7 fnmuls(eq|) s16, s15, s14
-0+316 <[^>]*> ee76 6a65 fsubs(eq|) s13, s12, s11
-0+31a <[^>]*> ed98 5a00 flds(eq|) s10, \[r8\]
-0+31e <[^>]*> edc7 4a00 fsts(eq|) s9, \[r7\]
+0+312 <[^>]*> ee27 8ac7 fnmulseq s16, s15, s14
+0+316 <[^>]*> ee76 6a65 fsubseq s13, s12, s11
+0+31a <[^>]*> ed98 5a00 fldseq s10, \[r8\]
+0+31e <[^>]*> edc7 4a00 fstseq s9, \[r7\]
0+322 <[^>]*> bf01 itttt eq
-0+324 <[^>]*> ec91 4a01 fldmias(eq|) r1, {s8}
-0+328 <[^>]*> ecd2 3a01 fldmias(eq|) r2, {s7}
-0+32c <[^>]*> ecb3 3a01 fldmias(eq|) r3!, {s6}
-0+330 <[^>]*> ecf4 2a01 fldmias(eq|) r4!, {s5}
+0+324 <[^>]*> ec91 4a01 fldmiaseq r1, {s8}
+0+328 <[^>]*> ecd2 3a01 fldmiaseq r2, {s7}
+0+32c <[^>]*> ecb3 3a01 fldmiaseq r3!, {s6}
+0+330 <[^>]*> ecf4 2a01 fldmiaseq r4!, {s5}
0+334 <[^>]*> bf01 itttt eq
-0+336 <[^>]*> ed35 2a01 fldmdbs(eq|) r5!, {s4}
-0+33a <[^>]*> ed76 1a01 fldmdbs(eq|) r6!, {s3}
-0+33e <[^>]*> ec97 1b03 fldmiax(eq|) r7, {d1}
-0+342 <[^>]*> ec98 2b03 fldmiax(eq|) r8, {d2}
+0+336 <[^>]*> ed35 2a01 fldmdbseq r5!, {s4}
+0+33a <[^>]*> ed76 1a01 fldmdbseq r6!, {s3}
+0+33e <[^>]*> ec97 1b03 fldmiaxeq r7, {d1}
+0+342 <[^>]*> ec98 2b03 fldmiaxeq r8, {d2}
0+346 <[^>]*> bf01 itttt eq
-0+348 <[^>]*> ecb9 3b03 fldmiax(eq|) r9!, {d3}
-0+34c <[^>]*> ecba 4b03 fldmiax(eq|) sl!, {d4}
-0+350 <[^>]*> ed3b 5b03 fldmdbx(eq|) fp!, {d5}
-0+354 <[^>]*> ed3c 6b03 fldmdbx(eq|) ip!, {d6}
+0+348 <[^>]*> ecb9 3b03 fldmiaxeq r9!, {d3}
+0+34c <[^>]*> ecba 4b03 fldmiaxeq sl!, {d4}
+0+350 <[^>]*> ed3b 5b03 fldmdbxeq fp!, {d5}
+0+354 <[^>]*> ed3c 6b03 fldmdbxeq ip!, {d6}
0+358 <[^>]*> bf01 itttt eq
-0+35a <[^>]*> ec8d 1a01 fstmias(eq|) sp, {s2}
-0+35e <[^>]*> ecce 0a01 fstmias(eq|) lr, {s1}
-0+362 <[^>]*> ece1 fa01 fstmias(eq|) r1!, {s31}
-0+366 <[^>]*> eca2 fa01 fstmias(eq|) r2!, {s30}
+0+35a <[^>]*> ec8d 1a01 fstmiaseq sp, {s2}
+0+35e <[^>]*> ecce 0a01 fstmiaseq lr, {s1}
+0+362 <[^>]*> ece1 fa01 fstmiaseq r1!, {s31}
+0+366 <[^>]*> eca2 fa01 fstmiaseq r2!, {s30}
0+36a <[^>]*> bf01 itttt eq
-0+36c <[^>]*> ed63 ea01 fstmdbs(eq|) r3!, {s29}
-0+370 <[^>]*> ed24 ea01 fstmdbs(eq|) r4!, {s28}
-0+374 <[^>]*> ec85 7b03 fstmiax(eq|) r5, {d7}
-0+378 <[^>]*> ec86 8b03 fstmiax(eq|) r6, {d8}
+0+36c <[^>]*> ed63 ea01 fstmdbseq r3!, {s29}
+0+370 <[^>]*> ed24 ea01 fstmdbseq r4!, {s28}
+0+374 <[^>]*> ec85 7b03 fstmiaxeq r5, {d7}
+0+378 <[^>]*> ec86 8b03 fstmiaxeq r6, {d8}
0+37c <[^>]*> bf01 itttt eq
-0+37e <[^>]*> eca7 9b03 fstmiax(eq|) r7!, {d9}
-0+382 <[^>]*> eca8 ab03 fstmiax(eq|) r8!, {d10}
-0+386 <[^>]*> ed29 bb03 fstmdbx(eq|) r9!, {d11}
-0+38a <[^>]*> ed2a cb03 fstmdbx(eq|) sl!, {d12}
+0+37e <[^>]*> eca7 9b03 fstmiaxeq r7!, {d9}
+0+382 <[^>]*> eca8 ab03 fstmiaxeq r8!, {d10}
+0+386 <[^>]*> ed29 bb03 fstmdbxeq r9!, {d11}
+0+38a <[^>]*> ed2a cb03 fstmdbxeq sl!, {d12}
0+38e <[^>]*> bf01 itttt eq
-0+390 <[^>]*> eef8 dac3 fsitos(eq|) s27, s6
-0+394 <[^>]*> eefd ca62 ftosis(eq|) s25, s5
-0+398 <[^>]*> eefd bac2 ftosizs(eq|) s23, s4
-0+39c <[^>]*> eefc aa61 ftouis(eq|) s21, s3
+0+390 <[^>]*> eef8 dac3 fsitoseq s27, s6
+0+394 <[^>]*> eefd ca62 ftosiseq s25, s5
+0+398 <[^>]*> eefd bac2 ftosizseq s23, s4
+0+39c <[^>]*> eefc aa61 ftouiseq s21, s3
0+3a0 <[^>]*> bf01 itttt eq
-0+3a2 <[^>]*> eefc 9ac1 ftouizs(eq|) s19, s2
-0+3a6 <[^>]*> eef8 8a60 fuitos(eq|) s17, s1
-0+3aa <[^>]*> ee11 ba90 fmrs(eq|) fp, s3
-0+3ae <[^>]*> eef0 9a10 fmrx(eq|) r9, fpsid
+0+3a2 <[^>]*> eefc 9ac1 ftouizseq s19, s2
+0+3a6 <[^>]*> eef8 8a60 fuitoseq s17, s1
+0+3aa <[^>]*> ee11 ba90 fmrseq fp, s3
+0+3ae <[^>]*> eef0 9a10 fmrxeq r9, fpsid
0+3b2 <[^>]*> bf04 itt eq
-0+3b4 <[^>]*> ee01 9a90 fmsr(eq|) s3, r9
-0+3b8 <[^>]*> eee0 8a10 fmxr(eq|) fpsid, r8
-0+3bc <[^>]*> bf00 nop
-0+3be <[^>]*> bf00 nop
+0+3b4 <[^>]*> ee01 9a90 fmsreq s3, r9
+0+3b8 <[^>]*> eee0 8a10 fmxreq fpsid, r8
+0+3bc <[^>]*> eef9 0a10 fmrx r0, fpinst @ Impl def
+0+3c0 <[^>]*> eefa 0a10 fmrx r0, fpinst2 @ Impl def
+0+3c4 <[^>]*> eef7 0a10 fmrx r0, mvfr0
+0+3c8 <[^>]*> eef6 0a10 fmrx r0, mvfr1
+0+3cc <[^>]*> eefc 0a10 fmrx r0, <impl def 0xc>
+0+3d0 <[^>]*> eee9 0a10 fmxr fpinst, r0 @ Impl def
+0+3d4 <[^>]*> eeea 0a10 fmxr fpinst2, r0 @ Impl def
+0+3d8 <[^>]*> eee7 0a10 fmxr mvfr0, r0
+0+3dc <[^>]*> eee6 0a10 fmxr mvfr1, r0
+0+3e0 <[^>]*> eeec 0a10 fmxr <impl def 0xc>, r0
+0+3e4 <[^>]*> bf00 nop
+0+3e6 <[^>]*> bf00 nop
+0+3e8 <[^>]*> bf00 nop
+0+3ea <[^>]*> bf00 nop
+0+3ec <[^>]*> bf00 nop
+0+3ee <[^>]*> bf00 nop
diff --git a/gas/testsuite/gas/arm/vfp1xD_t2.s b/gas/testsuite/gas/arm/vfp1xD_t2.s
index f3087a37ee96..8e962c07e3e9 100644
--- a/gas/testsuite/gas/arm/vfp1xD_t2.s
+++ b/gas/testsuite/gas/arm/vfp1xD_t2.s
@@ -354,6 +354,21 @@ F:
fmsreq s3, r9
fmxreq fpsid, r8
- @ 2 nops to pad to 16-byte boundary
+ @ Implementation specific system registers
+ fmrx r0, fpinst
+ fmrx r0, fpinst2
+ fmrx r0, mvfr0
+ fmrx r0, mvfr1
+ fmrx r0, c12
+ fmxr fpinst, r0
+ fmxr fpinst2, r0
+ fmxr mvfr0, r0
+ fmxr mvfr1, r0
+ fmxr c12, r0
+
+ nop
+ nop
+ nop
+ nop
nop
nop
diff --git a/gas/testsuite/gas/arm/vfp2.d b/gas/testsuite/gas/arm/vfp2.d
index f9b6096081eb..438019fc12ed 100644
--- a/gas/testsuite/gas/arm/vfp2.d
+++ b/gas/testsuite/gas/arm/vfp2.d
@@ -7,11 +7,11 @@
.*: +file format .*arm.*
Disassembly of section .text:
-0+000 <[^>]*> ec4a5b10 fmdrr d0, r5, sl
-0+004 <[^>]*> ec5a5b10 fmrrd r5, sl, d0
-0+008 <[^>]*> ec4a5a37 fmsrr r5, sl, {s15, s16}
+0+000 <[^>]*> ec4a5b10 vmov d0, r5, sl
+0+004 <[^>]*> ec5a5b10 vmov r5, sl, d0
+0+008 <[^>]*> ec4a5a37 fmsrr {s15, s16}, r5, sl
0+00c <[^>]*> ec5a5a37 fmrrs r5, sl, {s15, s16}
-0+010 <[^>]*> ec45ab1f fmdrr d15, sl, r5
-0+014 <[^>]*> ec55ab1f fmrrd sl, r5, d15
-0+018 <[^>]*> ec45aa38 fmsrr sl, r5, {s17, s18}
+0+010 <[^>]*> ec45ab1f vmov d15, sl, r5
+0+014 <[^>]*> ec55ab1f vmov sl, r5, d15
+0+018 <[^>]*> ec45aa38 fmsrr {s17, s18}, sl, r5
0+01c <[^>]*> ec55aa38 fmrrs sl, r5, {s17, s18}
diff --git a/gas/testsuite/gas/arm/vfp2_t2.d b/gas/testsuite/gas/arm/vfp2_t2.d
index bb988e5472e2..f07b6a58bcba 100644
--- a/gas/testsuite/gas/arm/vfp2_t2.d
+++ b/gas/testsuite/gas/arm/vfp2_t2.d
@@ -7,11 +7,11 @@
.*: +file format .*arm.*
Disassembly of section .text:
-0+000 <[^>]*> ec4a 5b10 fmdrr d0, r5, sl
-0+004 <[^>]*> ec5a 5b10 fmrrd r5, sl, d0
-0+008 <[^>]*> ec4a 5a37 fmsrr r5, sl, {s15, s16}
+0+000 <[^>]*> ec4a 5b10 vmov d0, r5, sl
+0+004 <[^>]*> ec5a 5b10 vmov r5, sl, d0
+0+008 <[^>]*> ec4a 5a37 fmsrr {s15, s16}, r5, sl
0+00c <[^>]*> ec5a 5a37 fmrrs r5, sl, {s15, s16}
-0+010 <[^>]*> ec45 ab1f fmdrr d15, sl, r5
-0+014 <[^>]*> ec55 ab1f fmrrd sl, r5, d15
-0+018 <[^>]*> ec45 aa38 fmsrr sl, r5, {s17, s18}
+0+010 <[^>]*> ec45 ab1f vmov d15, sl, r5
+0+014 <[^>]*> ec55 ab1f vmov sl, r5, d15
+0+018 <[^>]*> ec45 aa38 fmsrr {s17, s18}, sl, r5
0+01c <[^>]*> ec55 aa38 fmrrs sl, r5, {s17, s18}
diff --git a/gas/testsuite/gas/arm/vfpv3-32drs.d b/gas/testsuite/gas/arm/vfpv3-32drs.d
new file mode 100644
index 000000000000..f42c373f4c3d
--- /dev/null
+++ b/gas/testsuite/gas/arm/vfpv3-32drs.d
@@ -0,0 +1,73 @@
+# name: VFPv3 extra D registers
+# as: -mfpu=vfp3
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section \.text:
+0[0-9a-f]+ <[^>]+> eeb03b66 fcpyd d3, d22
+0[0-9a-f]+ <[^>]+> eef06b43 fcpyd d22, d3
+0[0-9a-f]+ <[^>]+> eef76acb fcvtds d22, s22
+0[0-9a-f]+ <[^>]+> eeb7bbe6 fcvtsd s22, d22
+0[0-9a-f]+ <[^>]+> ee254b90 vmov\.32 d21\[1\], r4
+0[0-9a-f]+ <[^>]+> ee0b5b90 vmov\.32 d27\[0\], r5
+0[0-9a-f]+ <[^>]+> ee376b90 vmov\.32 r6, d23\[1\]
+0[0-9a-f]+ <[^>]+> ee197b90 vmov\.32 r7, d25\[0\]
+0[0-9a-f]+ <[^>]+> eef86bcb fsitod d22, s22
+0[0-9a-f]+ <[^>]+> eef85b6a fuitod d21, s21
+0[0-9a-f]+ <[^>]+> eebdab64 ftosid s20, d20
+0[0-9a-f]+ <[^>]+> eebdabe4 ftosizd s20, d20
+0[0-9a-f]+ <[^>]+> eefc9b63 ftouid s19, d19
+0[0-9a-f]+ <[^>]+> eefc9be3 ftouizd s19, d19
+0[0-9a-f]+ <[^>]+> edda3b01 vldr d19, \[sl, #4\]
+0[0-9a-f]+ <[^>]+> edca5b01 vstr d21, \[sl, #4\]
+0[0-9a-f]+ <[^>]+> ecba5b04 vldmia sl!, {d5-d6}
+0[0-9a-f]+ <[^>]+> ecfa2b06 vldmia sl!, {d18-d20}
+0[0-9a-f]+ <[^>]+> ecba5b05 fldmiax sl!, {d5-d6}
+0[0-9a-f]+ <[^>]+> ecfa2b07 fldmiax sl!, {d18-d20}
+0[0-9a-f]+ <[^>]+> ed7a2b05 fldmdbx sl!, {d18-d19}
+0[0-9a-f]+ <[^>]+> ecc94b0a vstmia r9, {d20-d24}
+0[0-9a-f]+ <[^>]+> eeb03bc5 fabsd d3, d5
+0[0-9a-f]+ <[^>]+> eeb0cbe2 fabsd d12, d18
+0[0-9a-f]+ <[^>]+> eef02be3 fabsd d18, d19
+0[0-9a-f]+ <[^>]+> eeb13b45 fnegd d3, d5
+0[0-9a-f]+ <[^>]+> eeb1cb62 fnegd d12, d18
+0[0-9a-f]+ <[^>]+> eef12b63 fnegd d18, d19
+0[0-9a-f]+ <[^>]+> eeb13bc5 fsqrtd d3, d5
+0[0-9a-f]+ <[^>]+> eeb1cbe2 fsqrtd d12, d18
+0[0-9a-f]+ <[^>]+> eef12be3 fsqrtd d18, d19
+0[0-9a-f]+ <[^>]+> ee353b06 faddd d3, d5, d6
+0[0-9a-f]+ <[^>]+> ee32cb84 faddd d12, d18, d4
+0[0-9a-f]+ <[^>]+> ee732ba4 faddd d18, d19, d20
+0[0-9a-f]+ <[^>]+> ee353b46 fsubd d3, d5, d6
+0[0-9a-f]+ <[^>]+> ee32cbc4 fsubd d12, d18, d4
+0[0-9a-f]+ <[^>]+> ee732be4 fsubd d18, d19, d20
+0[0-9a-f]+ <[^>]+> ee253b06 fmuld d3, d5, d6
+0[0-9a-f]+ <[^>]+> ee22cb84 fmuld d12, d18, d4
+0[0-9a-f]+ <[^>]+> ee632ba4 fmuld d18, d19, d20
+0[0-9a-f]+ <[^>]+> ee853b06 fdivd d3, d5, d6
+0[0-9a-f]+ <[^>]+> ee82cb84 fdivd d12, d18, d4
+0[0-9a-f]+ <[^>]+> eec32ba4 fdivd d18, d19, d20
+0[0-9a-f]+ <[^>]+> ee053b06 fmacd d3, d5, d6
+0[0-9a-f]+ <[^>]+> ee02cb84 fmacd d12, d18, d4
+0[0-9a-f]+ <[^>]+> ee432ba4 fmacd d18, d19, d20
+0[0-9a-f]+ <[^>]+> ee153b06 fmscd d3, d5, d6
+0[0-9a-f]+ <[^>]+> ee12cb84 fmscd d12, d18, d4
+0[0-9a-f]+ <[^>]+> ee532ba4 fmscd d18, d19, d20
+0[0-9a-f]+ <[^>]+> ee253b46 fnmuld d3, d5, d6
+0[0-9a-f]+ <[^>]+> ee22cbc4 fnmuld d12, d18, d4
+0[0-9a-f]+ <[^>]+> ee632be4 fnmuld d18, d19, d20
+0[0-9a-f]+ <[^>]+> ee053b46 fnmacd d3, d5, d6
+0[0-9a-f]+ <[^>]+> ee02cbc4 fnmacd d12, d18, d4
+0[0-9a-f]+ <[^>]+> ee432be4 fnmacd d18, d19, d20
+0[0-9a-f]+ <[^>]+> ee153b46 fnmscd d3, d5, d6
+0[0-9a-f]+ <[^>]+> ee12cbc4 fnmscd d12, d18, d4
+0[0-9a-f]+ <[^>]+> ee532be4 fnmscd d18, d19, d20
+0[0-9a-f]+ <[^>]+> eeb43b62 fcmpd d3, d18
+0[0-9a-f]+ <[^>]+> eef42b43 fcmpd d18, d3
+0[0-9a-f]+ <[^>]+> eef53b40 fcmpzd d19
+0[0-9a-f]+ <[^>]+> eeb43be2 fcmped d3, d18
+0[0-9a-f]+ <[^>]+> eef42bc3 fcmped d18, d3
+0[0-9a-f]+ <[^>]+> eef53bc0 fcmpezd d19
+0[0-9a-f]+ <[^>]+> ec443b3f vmov d31, r3, r4
+0[0-9a-f]+ <[^>]+> ec565b3e vmov r5, r6, d30
diff --git a/gas/testsuite/gas/arm/vfpv3-32drs.s b/gas/testsuite/gas/arm/vfpv3-32drs.s
new file mode 100644
index 000000000000..ef72c24eb5ad
--- /dev/null
+++ b/gas/testsuite/gas/arm/vfpv3-32drs.s
@@ -0,0 +1,68 @@
+.arm
+.syntax unified
+ fcpyd d3,d22
+ fcpyd d22,d3
+ fcvtds d22,s22
+ fcvtsd s22,d22
+ fmdhr d21,r4
+ fmdlr d27,r5
+ fmrdh r6,d23
+ fmrdl r7,d25
+ fsitod d22,s22
+ fuitod d21,s21
+ ftosid s20,d20
+ ftosizd s20,d20
+ ftouid s19,d19
+ ftouizd s19,d19
+ fldd d19,[r10,#4]
+ fstd d21,[r10,#4]
+ fldmiad r10!,{d5,d6}
+ fldmiad r10!,{d18,d19,d20}
+ fldmiax r10!,{d5,d6}
+ fldmiax r10!,{d18,d19,d20}
+ fldmdbx r10!,{d18,d19}
+ fstmiad r9,{d20,d21,d22,d23,d24}
+ fabsd d3,d5
+ fabsd d12,d18
+ fabsd d18,d19
+ fnegd d3,d5
+ fnegd d12,d18
+ fnegd d18,d19
+ fsqrtd d3,d5
+ fsqrtd d12,d18
+ fsqrtd d18,d19
+ faddd d3,d5,d6
+ faddd d12,d18,d4
+ faddd d18,d19,d20
+ fsubd d3,d5,d6
+ fsubd d12,d18,d4
+ fsubd d18,d19,d20
+ fmuld d3,d5,d6
+ fmuld d12,d18,d4
+ fmuld d18,d19,d20
+ fdivd d3,d5,d6
+ fdivd d12,d18,d4
+ fdivd d18,d19,d20
+ fmacd d3,d5,d6
+ fmacd d12,d18,d4
+ fmacd d18,d19,d20
+ fmscd d3,d5,d6
+ fmscd d12,d18,d4
+ fmscd d18,d19,d20
+ fnmuld d3,d5,d6
+ fnmuld d12,d18,d4
+ fnmuld d18,d19,d20
+ fnmacd d3,d5,d6
+ fnmacd d12,d18,d4
+ fnmacd d18,d19,d20
+ fnmscd d3,d5,d6
+ fnmscd d12,d18,d4
+ fnmscd d18,d19,d20
+ fcmpd d3,d18
+ fcmpd d18,d3
+ fcmpzd d19
+ fcmped d3,d18
+ fcmped d18,d3
+ fcmpezd d19
+ fmdrr d31,r3,r4
+ fmrrd r5,r6,d30
diff --git a/gas/testsuite/gas/arm/vfpv3-const-conv.d b/gas/testsuite/gas/arm/vfpv3-const-conv.d
new file mode 100644
index 000000000000..9515feff7133
--- /dev/null
+++ b/gas/testsuite/gas/arm/vfpv3-const-conv.d
@@ -0,0 +1,29 @@
+# name: VFPv3 additional constant and conversion ops
+# as: -mfpu=vfp3
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section \.text:
+0[0-9a-f]+ <[^>]+> eef08a04 fconsts s17, #4
+0[0-9a-f]+ <[^>]+> eeba9a05 fconsts s18, #165
+0[0-9a-f]+ <[^>]+> eef49a00 fconsts s19, #64
+0[0-9a-f]+ <[^>]+> eef01b04 fconstd d17, #4
+0[0-9a-f]+ <[^>]+> eefa2b05 fconstd d18, #165
+0[0-9a-f]+ <[^>]+> eef43b00 fconstd d19, #64
+0[0-9a-f]+ <[^>]+> eefa8a63 fshtos s17, #9
+0[0-9a-f]+ <[^>]+> eefa1b63 fshtod d17, #9
+0[0-9a-f]+ <[^>]+> eefa8aeb fsltos s17, #9
+0[0-9a-f]+ <[^>]+> eefa1beb fsltod d17, #9
+0[0-9a-f]+ <[^>]+> eefb8a63 fuhtos s17, #9
+0[0-9a-f]+ <[^>]+> eefb1b63 fuhtod d17, #9
+0[0-9a-f]+ <[^>]+> eefb8aeb fultos s17, #9
+0[0-9a-f]+ <[^>]+> eefb1beb fultod d17, #9
+0[0-9a-f]+ <[^>]+> eefe9a64 ftoshs s19, #7
+0[0-9a-f]+ <[^>]+> eefe3b64 ftoshd d19, #7
+0[0-9a-f]+ <[^>]+> eefe9aec ftosls s19, #7
+0[0-9a-f]+ <[^>]+> eefe3bec ftosld d19, #7
+0[0-9a-f]+ <[^>]+> eeff9a64 ftouhs s19, #7
+0[0-9a-f]+ <[^>]+> eeff3b64 ftouhd d19, #7
+0[0-9a-f]+ <[^>]+> eeff9aec ftouls s19, #7
+0[0-9a-f]+ <[^>]+> eeff3bec ftould d19, #7
diff --git a/gas/testsuite/gas/arm/vfpv3-const-conv.s b/gas/testsuite/gas/arm/vfpv3-const-conv.s
new file mode 100644
index 000000000000..d726d14b568e
--- /dev/null
+++ b/gas/testsuite/gas/arm/vfpv3-const-conv.s
@@ -0,0 +1,25 @@
+.arm
+.syntax unified
+ fconsts s17, #4
+ fconsts s18, #0xa5
+ fconsts s19, #0x40
+ fconstd d17, #4
+ fconstd d18, #0xa5
+ fconstd d19, #0x40
+ fshtos s17, 9
+ fshtod d17, 9
+ fsltos s17, 9
+ fsltod d17, 9
+ fuhtos s17, 9
+ fuhtod d17, 9
+ fultos s17, 9
+ fultod d17, 9
+
+ ftoshs s19, 7
+ ftoshd d19, 7
+ ftosls s19, 7
+ ftosld d19, 7
+ ftouhs s19, 7
+ ftouhd d19, 7
+ ftouls s19, 7
+ ftould d19, 7
diff --git a/gas/testsuite/gas/arm/wince.d b/gas/testsuite/gas/arm/wince.d
new file mode 100644
index 000000000000..1770cacd4f14
--- /dev/null
+++ b/gas/testsuite/gas/arm/wince.d
@@ -0,0 +1,30 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: ARM WinCE basic tests
+#as: -mcpu=arm7m -EL
+#source: wince.s
+#not-skip: *-wince-*
+
+# Some WinCE specific tests.
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0+000 <global_data> 00000007 andeq r0, r0, r7
+ 0: ARM_32 global_data
+0+004 <global_sym> e1a00000 nop \(mov r0,r0\)
+0+008 <global_sym\+0x4> e1a00000 nop \(mov r0,r0\)
+0+000c <global_sym\+0x8> e1a00000 nop \(mov r0,r0\)
+0+010 <global_sym\+0xc> eafffffb b f+ff8 <global_sym\+0xf+ff4>
+ 10: ARM_26D global_sym\+0xf+ffc
+0+018 <global_sym\+0x14> ebfffffa bl f+ff4 <global_sym\+0xf+ff0>
+ 14: ARM_26D global_sym\+0xf+ffc
+0+01c <global_sym\+0x18> 0afffff9 beq f+ff0 <global_sym\+0xf+fec>
+ 18: ARM_26D global_sym\+0xf+ffc
+0+020 <global_sym\+0x1c> eafffff8 b 0+008 <global_sym\+0x4>
+0+024 <global_sym\+0x20> ebfffff7 bl 0+008 <global_sym\+0x4>
+0+028 <global_sym\+0x24> 0afffff6 beq 0+008 <global_sym\+0x4>
+0+02c <global_sym\+0x28> eafffff5 b 0+008 <global_sym\+0x4>
+0+030 <global_sym\+0x2c> ebfffff4 bl 0+008 <global_sym\+0x4>
+0+034 <global_sym\+0x30> e51f0034 ldr r0, \[pc, #-52\] ; 0+008 <global_sym\+0x4>
+0+038 <global_sym\+0x34> e51f0038 ldr r0, \[pc, #-56\] ; 0+008 <global_sym\+0x4>
+0+03c <global_sym\+0x38> e51f003c ldr r0, \[pc, #-60\] ; 0+008 <global_sym\+0x4>
diff --git a/gas/testsuite/gas/arm/wince.s b/gas/testsuite/gas/arm/wince.s
new file mode 100644
index 000000000000..e8b76a045901
--- /dev/null
+++ b/gas/testsuite/gas/arm/wince.s
@@ -0,0 +1,25 @@
+ .global global_data
+ .text
+ .global global_sym
+ .def global_sym; .scl 2; .type 32; .endef
+
+global_data:
+ .word global_data+7
+
+global_sym:
+def_sym:
+undef_sym:
+ nop
+ nop
+ nop
+ b global_sym
+ bl global_sym
+ beq global_sym
+ b def_sym
+ bl def_sym
+ beq def_sym
+ b undef_sym
+ bl undef_sym
+ ldr r0, global_sym
+ ldr r0, def_sym
+ ldr r0, undef_sym
diff --git a/gas/testsuite/gas/arm/wince_inst.d b/gas/testsuite/gas/arm/wince_inst.d
index a9852e0394b8..e3f060d90db0 100644
--- a/gas/testsuite/gas/arm/wince_inst.d
+++ b/gas/testsuite/gas/arm/wince_inst.d
@@ -36,7 +36,7 @@ Disassembly of section .text:
0+058 <[^>]*> 21a09008 ? movcs r9, r8
0+05c <[^>]*> 31a01003 ? movcc r1, r3
0+060 <[^>]*> e1b00008 ? movs r0, r8
-0+064 <[^>]*> 31b00007 ? movccs r0, r7
+0+064 <[^>]*> 31b00007 ? movscc r0, r7
0+068 <[^>]*> e281000a ? add r0, r1, #10 ; 0xa
0+06c <[^>]*> e0832004 ? add r2, r3, r4
0+070 <[^>]*> e0865287 ? add r5, r6, r7, lsl #5
@@ -116,11 +116,11 @@ Disassembly of section .text:
0+198 <[^>]*> e0000291 ? mul r0, r1, r2
0+19c <[^>]*> e0110392 ? muls r1, r2, r3
0+1a0 <[^>]*> 10000091 ? mulne r0, r1, r0
-0+1a4 <[^>]*> 90190798 ? mullss r9, r8, r7
+0+1a4 <[^>]*> 90190798 ? mulsls r9, r8, r7
0+1a8 <[^>]*> e021ba99 ? mla r1, r9, sl, fp
0+1ac <[^>]*> e033c994 ? mlas r3, r4, r9, ip
0+1b0 <[^>]*> b029d798 ? mlalt r9, r8, r7, sp
-0+1b4 <[^>]*> a034e391 ? mlages r4, r1, r3, lr
+0+1b4 <[^>]*> a034e391 ? mlasge r4, r1, r3, lr
0+1b8 <[^>]*> e5910000 ? ldr r0, \[r1\]
0+1bc <[^>]*> e7911002 ? ldr r1, \[r1, r2\]
0+1c0 <[^>]*> e7b32004 ? ldr r2, \[r3, r4\]!
@@ -132,7 +132,7 @@ Disassembly of section .text:
0+1d8 <[^>]*> e6942425 ? ldr r2, \[r4\], r5, lsr #8
0+1dc <[^>]*> e51f0008 ? ldr r0, \[pc, #-8\] ; 0+1dc <[^>]*>
0+1e0 <[^>]*> e5d43000 ? ldrb r3, \[r4\]
-0+1e4 <[^>]*> 14f85000 ? ldrnebt r5, \[r8\]
+0+1e4 <[^>]*> 14f85000 ? ldrbtne r5, \[r8\]
0+1e8 <[^>]*> e5810000 ? str r0, \[r1\]
0+1ec <[^>]*> e7811002 ? str r1, \[r1, r2\]
0+1f0 <[^>]*> e7a43003 ? str r3, \[r4, r3\]!
@@ -145,31 +145,31 @@ Disassembly of section .text:
0+20c <[^>]*> e50f1004 ? str r1, \[pc, #-4\] ; 0+210 <[^>]*>
0+210 <[^>]*> e5c71000 ? strb r1, \[r7\]
0+214 <[^>]*> e4e02000 ? strbt r2, \[r0\]
-0+218 <[^>]*> e8900002 ? ldmia r0, {r1}
-0+21c <[^>]*> 09920038 ? ldmeqib r2, {r3, r4, r5}
+0+218 <[^>]*> e8900002 ? ldm r0, {r1}
+0+21c <[^>]*> 09920038 ? ldmibeq r2, {r3, r4, r5}
0+220 <[^>]*> e853ffff ? ldmda r3, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr, pc}\^
0+224 <[^>]*> e93b05ff ? ldmdb fp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sl}
0+228 <[^>]*> e99100f7 ? ldmib r1, {r0, r1, r2, r4, r5, r6, r7}
-0+22c <[^>]*> e89201f8 ? ldmia r2, {r3, r4, r5, r6, r7, r8}
+0+22c <[^>]*> e89201f8 ? ldm r2, {r3, r4, r5, r6, r7, r8}
0+230 <[^>]*> e9130003 ? ldmdb r3, {r0, r1}
0+234 <[^>]*> e8540300 ? ldmda r4, {r8, r9}\^
-0+238 <[^>]*> e8800002 ? stmia r0, {r1}
-0+23c <[^>]*> 09820038 ? stmeqib r2, {r3, r4, r5}
+0+238 <[^>]*> e8800002 ? stm r0, {r1}
+0+23c <[^>]*> 09820038 ? stmibeq r2, {r3, r4, r5}
0+240 <[^>]*> e843ffff ? stmda r3, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr, pc}\^
0+244 <[^>]*> e92b05ff ? stmdb fp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sl}
0+248 <[^>]*> e8010007 ? stmda r1, {r0, r1, r2}
0+24c <[^>]*> e9020018 ? stmdb r2, {r3, r4}
-0+250 <[^>]*> e8830003 ? stmia r3, {r0, r1}
+0+250 <[^>]*> e8830003 ? stm r3, {r0, r1}
0+254 <[^>]*> e9c40300 ? stmib r4, {r8, r9}\^
0+258 <[^>]*> ef123456 ? (swi|svc) 0x00123456
0+25c <[^>]*> 2f000033 ? (swi|svc)cs 0x00000033
-0+260 <[^>]*> eb000000 ? bl 0+268 <[^>]*>
+0+260 <[^>]*> eb000000 ? bl 0.* <[^>]*>
[ ]*260:.*_wombat.*
-0+264 <[^>]*> 5b000000 ? blpl 0+26c <[^>]*>
+0+264 <[^>]*> 5b000000 ? blpl 0.* <[^>]*>
[ ]*264:.*ARM.*hohum
-0+268 <[^>]*> ea000000 ? b 0+270 <[^>]*>
+0+268 <[^>]*> ea000000 ? b 0.* <[^>]*>
[ ]*268:.*_wibble.*
-0+26c <[^>]*> da000000 ? ble 0+274 <[^>]*>
+0+26c <[^>]*> da000000 ? ble 0.* <[^>]*>
[ ]*26c:.*testerfunc.*
0+270 <[^>]*> e1a01102 ? mov r1, r2, lsl #2
0+274 <[^>]*> e1a01002 ? mov r1, r2
diff --git a/gas/testsuite/gas/arm/xscale.d b/gas/testsuite/gas/arm/xscale.d
index fc38ba14e57e..32ecf1f3354a 100644
--- a/gas/testsuite/gas/arm/xscale.d
+++ b/gas/testsuite/gas/arm/xscale.d
@@ -24,12 +24,12 @@ Disassembly of section .text:
0+38 <[^>]*> f7d2f003 pld \[r2, r3\]
0+3c <[^>]*> f754f285 pld \[r4, -r5, lsl #5\]
0+40 <[^>]*> e1c100d0 ldrd r0, \[r1\]
-0+44 <[^>]*> 01c327d8 ldreqd r2, \[r3, #120\]
-0+48 <[^>]*> b10540d6 ldrltd r4, \[r5, -r6\]
+0+44 <[^>]*> 01c327d8 ldrdeq r2, \[r3, #120\]
+0+48 <[^>]*> b10540d6 ldrdlt r4, \[r5, -r6\]
0+4c <[^>]*> e16a88f9 strd r8, \[sl, #-137\]!
0+50 <[^>]*> e1ac00fd strd r0, \[ip, sp\]!
-0+54 <[^>]*> 30ce21f0 strccd r2, \[lr\], #16
-0+58 <[^>]*> 708640f8 strvcd r4, \[r6\], r8
+0+54 <[^>]*> 30ce21f0 strdcc r2, \[lr\], #16
+0+58 <[^>]*> 708640f8 strdvc r4, \[r6\], r8
0+5c <[^>]*> e5910000 ldr r0, \[r1\]
0+60 <[^>]*> e5832000 str r2, \[r3\]
0+64 <[^>]*> e321f011 msr CPSR_c, #17 ; 0x11
diff --git a/gas/testsuite/gas/bfin/bfin.exp b/gas/testsuite/gas/bfin/bfin.exp
index 51690a16fe05..9f7849b27b9a 100644
--- a/gas/testsuite/gas/bfin/bfin.exp
+++ b/gas/testsuite/gas/bfin/bfin.exp
@@ -1,17 +1,5 @@
# Blackfin assembler testsuite
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "bfin $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
if [istarget bfin*-*-*] {
run_dump_test "arithmetic"
run_dump_test "bit"
diff --git a/gas/testsuite/gas/bfin/load.d b/gas/testsuite/gas/bfin/load.d
index 58d97c2a82f4..07af13973295 100644
--- a/gas/testsuite/gas/bfin/load.d
+++ b/gas/testsuite/gas/bfin/load.d
@@ -31,84 +31,86 @@ Disassembly of section .text:
54: 36 e1 ff 7f M2=0x7fff \(X\);
58: 81 60 R1=0x10\(x\);
5a: 3c e1 00 00 L0=0x0 \(X\);
- 5e: 27 e1 eb 00 R7=0xeb \(X\);
+ 5e: 27 e1 f3 00 R7=0xf3 \(X\);
+ 62: 00 e1 03 00 R0.L=0x3;
+ 66: 01 e1 0f 00 R1.L=0xf;
-00000062 <load_pointer_register>:
- 62: 7e 91 SP=\[FP\];
- 64: 47 90 FP=\[P0\+\+\];
- 66: f1 90 P1=\[SP--\];
- 68: 96 af SP=\[P2\+0x38\];
- 6a: 3b ac P3=\[FP\+0x0];
- 6c: 3c e5 ff 7f P4=\[FP\+0x1fffc\];
- 70: 3e e5 01 80 SP=\[FP\+-131068\];
- 74: 26 ac SP=\[P4\+0x0\];
- 76: 0d b8 P5=\[FP-128\];
+0000006a <load_pointer_register>:
+ 6a: 7e 91 SP=\[FP\];
+ 6c: 47 90 FP=\[P0\+\+\];
+ 6e: f1 90 P1=\[SP--\];
+ 70: 96 af SP=\[P2\+0x38\];
+ 72: 3b ac P3=\[FP\+0x0\];
+ 74: 3c e5 ff 7f P4=\[FP\+0x1fffc\];
+ 78: 3e e5 01 80 SP=\[FP\+-131068\];
+ 7c: 26 ac SP=\[P4\+0x0\];
+ 7e: 0d b8 P5=\[FP-128\];
-00000078 <load_data_register>:
- 78: 07 91 R7=\[P0\];
- 7a: 2e 90 R6=\[P5\+\+\];
- 7c: a5 90 R5=\[P4--\];
- 7e: bc a2 R4=\[FP\+0x28\];
- 80: 33 e4 ff 7f R3=\[SP\+0x1fffc\];
- 84: 32 a0 R2=\[SP\+0x0\];
- 86: 39 e4 01 80 R1=\[FP\+-131068\];
- 8a: 06 80 R0=\[SP\+\+P0\];
- 8c: 05 b8 R5=\[FP-128\];
- 8e: 02 9d R2=\[I0\];
- 90: 09 9c R1=\[I1\+\+\];
- 92: 93 9c R3=\[I2--\];
- 94: 9c 9d R4=\[I3\+\+M0\];
+00000080 <load_data_register>:
+ 80: 07 91 R7=\[P0\];
+ 82: 2e 90 R6=\[P5\+\+\];
+ 84: a5 90 R5=\[P4--\];
+ 86: bc a2 R4=\[FP\+0x28\];
+ 88: 33 e4 ff 7f R3=\[SP\+0x1fffc\];
+ 8c: 32 a0 R2=\[SP\+0x0\];
+ 8e: 39 e4 01 80 R1=\[FP\+-131068\];
+ 92: 06 80 R0=\[SP\+\+P0\];
+ 94: 05 b8 R5=\[FP-128\];
+ 96: 02 9d R2=\[I0\];
+ 98: 09 9c R1=\[I1\+\+\];
+ 9a: 93 9c R3=\[I2--\];
+ 9c: 9c 9d R4=\[I3\+\+M0\];
-00000096 <load_half_word_zero_extend>:
- 96: 37 95 R7=W\[SP\] \(Z\);
- 98: 3e 94 R6=W\[FP\+\+\] \(Z\);
- 9a: 85 94 R5=W\[P0--\] \(Z\);
- 9c: cc a7 R4=W\[P1\+0x1e\] \(Z\);
- 9e: 73 e4 fe 7f R3=W\[SP\+0xfffc\] \(Z\);
- a2: 7a e4 02 80 R2=W\[FP\+-65532\] \(Z\);
- a6: 28 86 R0=W\[P0\+\+P5\] \(Z\);
+0000009e <load_half_word_zero_extend>:
+ 9e: 37 95 R7=W\[SP\] \(Z\);
+ a0: 3e 94 R6=W\[FP\+\+\] \(Z\);
+ a2: 85 94 R5=W\[P0--\] \(Z\);
+ a4: cc a7 R4=W\[P1\+0x1e\] \(Z\);
+ a6: 73 e4 fe 7f R3=W\[SP\+0xfffc\] \(Z\);
+ aa: 7a e4 02 80 R2=W\[FP\+-65532\] \(Z\);
+ ae: 28 86 R0=W\[P0\+\+P5\] \(Z\);
-000000a8 <load_half_word_sign_extend>:
- a8: 77 95 R7=W\[SP\]\(X\);
- aa: 7e 94 R6=W\[FP\+\+\]\(X\);
- ac: c5 94 R5=W\[P0--\]\(X\);
- ae: 0d ab R5=W\[P1\+0x18\]\(X\);
- b0: 73 e5 fe 7f R3=W\[SP\+0xfffc\]\(X\);
- b4: 7f e5 02 80 R7=W\[FP\+-65532\]\(X\);
- b8: 51 8e R1=W\[P1\+\+P2\]\(X\);
+000000b0 <load_half_word_sign_extend>:
+ b0: 77 95 R7=W\[SP\]\(X\);
+ b2: 7e 94 R6=W\[FP\+\+\]\(X\);
+ b4: c5 94 R5=W\[P0--\]\(X\);
+ b6: 0d ab R5=W\[P1\+0x18\]\(X\);
+ b8: 73 e5 fe 7f R3=W\[SP\+0xfffc\]\(X\);
+ bc: 7f e5 02 80 R7=W\[FP\+-65532\]\(X\);
+ c0: 51 8e R1=W\[P1\+\+P2\]\(X\);
-000000ba <load_high_data_register_half>:
- ba: 40 9d R0.H=W\[I0\];
- bc: 49 9c R1.H=W\[I1\+\+\];
- be: d2 9c R2.H=W\[I2--\];
- c0: f6 84 R3.H=W\[SP\];
- c2: 07 85 R4.H=W\[FP\+\+P0\];
+000000c2 <load_high_data_register_half>:
+ c2: 40 9d R0.H=W\[I0\];
+ c4: 49 9c R1.H=W\[I1\+\+\];
+ c6: d2 9c R2.H=W\[I2--\];
+ c8: f6 84 R3.H=W\[SP\];
+ ca: 07 85 R4.H=W\[FP\+\+P0\];
-000000c4 <load_low_data_register_half>:
- c4: 3f 9d R7.L=W\[I3\];
- c6: 36 9c R6.L=W\[I2\+\+\];
- c8: ad 9c R5.L=W\[I1--\];
- ca: 00 83 R4.L=W\[P0\];
- cc: da 82 R3.L=W\[P2\+\+P3\];
+000000cc <load_low_data_register_half>:
+ cc: 3f 9d R7.L=W\[I3\];
+ ce: 36 9c R6.L=W\[I2\+\+\];
+ d0: ad 9c R5.L=W\[I1--\];
+ d2: 00 83 R4.L=W\[P0\];
+ d4: da 82 R3.L=W\[P2\+\+P3\];
-000000ce <load_byte_zero_extend>:
- ce: 05 99 R5=B\[P0\] \(Z\);
- d0: 0c 98 R4=B\[P1\+\+\] \(Z\);
- d2: 90 98 R0=B\[P2--\] \(Z\);
- d4: b3 e4 ff 7f R3=B\[SP\+0x7fff\] \(Z\);
- d8: b7 e4 01 80 R7=B\[SP\+-32767\] \(Z\);
+000000d6 <load_byte_zero_extend>:
+ d6: 05 99 R5=B\[P0\] \(Z\);
+ d8: 0c 98 R4=B\[P1\+\+\] \(Z\);
+ da: 90 98 R0=B\[P2--\] \(Z\);
+ dc: b3 e4 ff 7f R3=B\[SP\+0x7fff\] \(Z\);
+ e0: b7 e4 01 80 R7=B\[SP\+-32767\] \(Z\);
-000000dc <load_byte_sign_extend>:
- dc: 45 99 R5=B\[P0\]\(X\);
- de: 4a 98 R2=B\[P1\+\+\]\(X\);
- e0: fb 98 R3=B\[FP--\]\(X\);
- e2: b7 e5 00 00 R7=B\[SP\+0x0\]\(X\);
- e6: be e5 01 80 R6=B\[FP\+-32767\]\(X\);
+000000e4 <load_byte_sign_extend>:
+ e4: 45 99 R5=B\[P0\]\(X\);
+ e6: 4a 98 R2=B\[P1\+\+\]\(X\);
+ e8: fb 98 R3=B\[FP--\]\(X\);
+ ea: b7 e5 00 00 R7=B\[SP\+0x0\]\(X\);
+ ee: be e5 01 80 R6=B\[FP\+-32767\]\(X\);
-000000ea <load_data1>:
+000000f2 <load_data1>:
...
-000000eb <load_data2>:
- eb: 10 00 IF ! CC JUMP eb <load_data2>;
- ed: 00 00 NOP;
+000000f3 <load_data2>:
+ f3: 10 00 IF ! CC JUMP f3 <load_data2>;
+ f5: 00 00 NOP;
...
diff --git a/gas/testsuite/gas/bfin/load.s b/gas/testsuite/gas/bfin/load.s
index 07f4732a7e99..96ae1faad194 100644
--- a/gas/testsuite/gas/bfin/load.s
+++ b/gas/testsuite/gas/bfin/load.s
@@ -36,6 +36,10 @@ load_immediate:
L0 = foo1;
r7 = load_data2;
+ /* Test constant folding. */
+ r0.l = (a + 5) - 2;
+ r1.l = (a + 5) + 10;
+
.text
.global load_pointer_register
load_pointer_register:
diff --git a/gas/testsuite/gas/bfin/vector2.d b/gas/testsuite/gas/bfin/vector2.d
index 57f3a91e2fa3..1a6b88492e88 100644
--- a/gas/testsuite/gas/bfin/vector2.d
+++ b/gas/testsuite/gas/bfin/vector2.d
@@ -469,3 +469,6 @@ Disassembly of section .text:
734: 00 9e 32 9c
738: 8b c8 9a 2f R6 = \(a0 \+= R3.H \* R2.H\) \(FU\) \|\| I2-=M0 \|\| NOP;
73c: 72 9e 00 00
+ 740: 14 c2 1a a0 R0.H = R3.H \* R2.L \(M\), R0 = R3.L \* R2.L;
+ 744: 1c c2 b8 60 R3 = R7.L \* R0.H \(M\), R2 = R7.L \* R0.L;
+ 748: 1c c0 b8 60 R3 = \(a1 = R7.L \* R0.H\) \(M\), R2 = \(a0 = R7.L \* R0.L\); \ No newline at end of file
diff --git a/gas/testsuite/gas/bfin/vector2.s b/gas/testsuite/gas/bfin/vector2.s
index 30cca43c1ebe..d9ea20131e73 100755
--- a/gas/testsuite/gas/bfin/vector2.s
+++ b/gas/testsuite/gas/bfin/vector2.s
@@ -666,3 +666,8 @@ Ireg. */
r6=(a0+=r3.h*r2.h)(fu) || i2-=m0 ;
/* which the assembler expands into:
r6=(a0+=r3.h*r2.h)(fu) || i2-=m0 || nop ; */
+
+/* Test for ensure (m) is not thown away. */
+r0.l=r3.l*r2.l, r0.h=r3.h*r2.l (m) ;
+R2 = R7.L * R0.L, R3 = R7.L * R0.H (m);
+R2 = (A0 = R7.L * R0.L), R3 = ( A1 = R7.L * R0.H) (m);
diff --git a/gas/testsuite/gas/cfi/cfi-common-5.d b/gas/testsuite/gas/cfi/cfi-common-5.d
new file mode 100644
index 000000000000..fed50c55b4bb
--- /dev/null
+++ b/gas/testsuite/gas/cfi/cfi-common-5.d
@@ -0,0 +1,24 @@
+#readelf: -wf
+#name: CFI common 5
+The section .eh_frame contains:
+
+00000000 00000010 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: .*
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: [01]b
+#...
+00000014 00000014 00000018 FDE cie=00000000 pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_remember_state
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_restore_state
+#...
+0000002c 0000001[48] 00000030 FDE cie=00000000 pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0 ofs 16
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa_offset: 0
+#pass
diff --git a/gas/testsuite/gas/cfi/cfi-common-5.s b/gas/testsuite/gas/cfi/cfi-common-5.s
new file mode 100644
index 000000000000..f59d97782348
--- /dev/null
+++ b/gas/testsuite/gas/cfi/cfi-common-5.s
@@ -0,0 +1,24 @@
+ .text
+ .cfi_startproc simple
+
+ .subsection 3
+ .cfi_startproc simple
+ .long 0
+ .cfi_def_cfa 0, 16
+ .previous
+
+ .long 0
+ .cfi_remember_state
+
+ .subsection 3
+ .long 0
+ .cfi_adjust_cfa_offset -16
+ .previous
+
+ .long 0
+ .cfi_restore_state
+ .cfi_endproc
+
+ .subsection 3
+ .cfi_endproc
+ .previous
diff --git a/gas/testsuite/gas/cfi/cfi-common-6.d b/gas/testsuite/gas/cfi/cfi-common-6.d
new file mode 100644
index 000000000000..dcc7b79b9697
--- /dev/null
+++ b/gas/testsuite/gas/cfi/cfi-common-6.d
@@ -0,0 +1,73 @@
+#readelf: -wf
+#name: CFI common 6
+The section .eh_frame contains:
+
+00000000 00000018 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: .*
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 03 .. .. .. .. 0c 1b
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+0000001c 00000018 00000020 FDE cie=00000000 pc=00000000..00000004
+ Augmentation data: (00 00 00 00 de ad be ef|ef be ad de 00 00 00 00)
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000038 00000010 00000000 CIE
+ Version: 1
+ Augmentation: "zLR"
+ Code alignment factor: .*
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 0c 1b
+
+ DW_CFA_nop
+
+0000004c 00000018 00000018 FDE cie=00000038 pc=00000004..00000008
+ Augmentation data: (00 00 00 00 de ad be ef|ef be ad de 00 00 00 00)
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000068 00000018 0000006c FDE cie=00000000 pc=00000008..0000000c
+ Augmentation data: (00 00 00 00 be ef de ad|ad de ef be 00 00 00 00)
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000084 00000018 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: .*
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 1b .. .. .. .. 1b 1b
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000a0 00000014 00000020 FDE cie=00000084 pc=0000000c..00000010
+ Augmentation data: .. .. .. ..
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000b8 00000014 00000038 FDE cie=00000084 pc=00000010..00000014
+ Augmentation data: .. .. .. ..
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
diff --git a/gas/testsuite/gas/cfi/cfi-common-6.s b/gas/testsuite/gas/cfi/cfi-common-6.s
new file mode 100644
index 000000000000..2471bff68ebc
--- /dev/null
+++ b/gas/testsuite/gas/cfi/cfi-common-6.s
@@ -0,0 +1,40 @@
+ .text
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v0
+ .cfi_lsda 12, 0xdeadbeef
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v0
+ .cfi_lsda 12, 0xdeadbeef
+ .cfi_personality 0xff
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v0
+ .cfi_lsda 12, 0xbeefdead
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality (0x1b), my_personality_v1
+ .cfi_lsda 27, 1f
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality (0x1b), my_personality_v1
+ .cfi_lsda 27, 2f
+ .long 0
+ .cfi_endproc
+
+my_personality_v0:
+ .long 0
+my_personality_v1:
+ .long 0
+1:
+ .long 0
+2:
+ .long 0
diff --git a/gas/testsuite/gas/cfi/cfi-hppa-1.d b/gas/testsuite/gas/cfi/cfi-hppa-1.d
new file mode 100644
index 000000000000..7b06d55f327b
--- /dev/null
+++ b/gas/testsuite/gas/cfi/cfi-hppa-1.d
@@ -0,0 +1,38 @@
+#readelf: -wf
+#name: CFI on hppa
+The section .eh_frame contains:
+
+00000000 00000010 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 4
+ Data alignment factor: -[48]
+ Return address column: 2
+ Augmentation data: 1b
+
+ DW_CFA_def_cfa: r30 ofs 0
+
+00000014 00000018 00000018 FDE cie=00000000 pc=00000000..00000018
+ DW_CFA_advance_loc: 8 to 00000008
+ DW_CFA_def_cfa_reg: r3
+ DW_CFA_advance_loc: 4 to 0000000c
+ DW_CFA_def_cfa_offset: 4660
+ DW_CFA_advance_loc: 8 to 00000014
+ DW_CFA_def_cfa_reg: r30
+ DW_CFA_nop
+
+00000030 00000018 00000034 FDE cie=00000000 pc=00000018..00000040
+ DW_CFA_advance_loc: 12 to 00000024
+ DW_CFA_def_cfa_reg: r3
+ DW_CFA_offset: r2 at cfa-24
+ DW_CFA_advance_loc: 24 to 0000003c
+ DW_CFA_def_cfa_reg: r30
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+0000004c 00000010 00000050 FDE cie=00000000 pc=00000040..00000048
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
diff --git a/gas/testsuite/gas/cfi/cfi-hppa-1.s b/gas/testsuite/gas/cfi/cfi-hppa-1.s
new file mode 100644
index 000000000000..923350ccb949
--- /dev/null
+++ b/gas/testsuite/gas/cfi/cfi-hppa-1.s
@@ -0,0 +1,66 @@
+#; $ as -o test.o gas-cfi-test.s && gcc -nostdlib -o test test.o
+
+ .text
+ .align 4
+ .level 1.1
+
+.globl func_locvars
+ .type func_locvars, @function
+func_locvars:
+ .PROC
+ .CALLINFO FRAME=0x1234,NO_CALLS,SAVE_SP,ENTRY_GR=3
+ .ENTRY
+ .cfi_startproc
+ copy %r3,%r1
+ copy %r30,%r3
+ .cfi_def_cfa_register r3
+ stwm %r1,0x1234(%r30)
+ .cfi_adjust_cfa_offset 0x1234
+ ldo 64(%r3),%r30
+ ldwm -64(%r30),%r3
+ .cfi_def_cfa_register sp
+ bv,n %r0(%r2)
+ .cfi_endproc
+ .EXIT
+ .PROCEND
+
+.globl func_prologue
+ .type func_prologue, @function
+func_prologue:
+ .PROC
+ .CALLINFO FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3
+ .ENTRY
+ .cfi_startproc
+#; This is not ABI-compliant but helps the test to run on both
+#; 32-bit and 64-bit targets
+ stw %r2,-24(%r30)
+ copy %r3,%r1
+ copy %r30,%r3
+ .cfi_def_cfa_register r3
+ .cfi_offset r2, -24
+ stwm %r1,64(%r30)
+ bl func_locvars,%r2
+ nop
+ ldw -20(%r3),%r2
+ ldo 64(%r3),%r30
+ ldwm -64(%r30),%r3
+ .cfi_def_cfa_register sp
+ bv,n %r0(%r2)
+ .cfi_endproc
+ .EXIT
+ .PROCEND
+
+ .align 4
+.globl main
+ .type main, @function
+main:
+ .PROC
+ .CALLINFO CALLS
+ .ENTRY
+ #; tail call - simple function that doesn't touch the stack
+ .cfi_startproc
+ b func_prologue
+ nop
+ .cfi_endproc
+ .EXIT
+ .PROCEND
diff --git a/gas/testsuite/gas/cfi/cfi-x86_64.d b/gas/testsuite/gas/cfi/cfi-x86_64.d
index f34643545028..2f37a9cb6446 100644
--- a/gas/testsuite/gas/cfi/cfi-x86_64.d
+++ b/gas/testsuite/gas/cfi/cfi-x86_64.d
@@ -35,7 +35,7 @@ The section .eh_frame contains:
00000050 00000014 00000054 FDE cie=00000000 pc=00000022..00000035
DW_CFA_advance_loc: 3 to 00000025
- DW_CFA_def_cfa_reg: r12
+ DW_CFA_def_cfa_reg: r8
DW_CFA_advance_loc: 15 to 00000034
DW_CFA_def_cfa_reg: r7
DW_CFA_nop
@@ -50,3 +50,40 @@ The section .eh_frame contains:
DW_CFA_nop
DW_CFA_nop
+00000090 00000010 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: -8
+ Return address column: 16
+ Augmentation data: 1b
+
+ DW_CFA_def_cfa: r7 ofs 8
+
+000000a4 00000030 00000018 FDE cie=00000090 pc=0000004d..00000058
+ DW_CFA_advance_loc: 1 to 0000004e
+ DW_CFA_def_cfa_offset: 16
+ DW_CFA_advance_loc: 1 to 0000004f
+ DW_CFA_def_cfa_reg: r8
+ DW_CFA_advance_loc: 1 to 00000050
+ DW_CFA_def_cfa_offset: 4676
+ DW_CFA_advance_loc: 1 to 00000051
+ DW_CFA_offset_extended_sf: r4 at cfa\+16
+ DW_CFA_advance_loc: 1 to 00000052
+ DW_CFA_register: r8 in r9
+ DW_CFA_advance_loc: 1 to 00000053
+ DW_CFA_remember_state
+ DW_CFA_advance_loc: 1 to 00000054
+ DW_CFA_restore: r6
+ DW_CFA_advance_loc: 1 to 00000055
+ DW_CFA_undefined: r16
+ DW_CFA_advance_loc: 1 to 00000056
+ DW_CFA_same_value: r3
+ DW_CFA_advance_loc: 1 to 00000057
+ DW_CFA_restore_state
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
diff --git a/gas/testsuite/gas/cfi/cfi-x86_64.s b/gas/testsuite/gas/cfi/cfi-x86_64.s
index 10035ad7f8fd..c2e2464b3630 100644
--- a/gas/testsuite/gas/cfi/cfi-x86_64.s
+++ b/gas/testsuite/gas/cfi/cfi-x86_64.s
@@ -35,9 +35,9 @@ func_prologue:
#; each instruction.
pushq %rbp
.cfi_def_cfa_offset 16
- .cfi_offset rbp,-16
+ .cfi_offset %rbp, -16
movq %rsp, %rbp
- .cfi_def_cfa_register rbp
+ .cfi_def_cfa_register %rbp
#; function body
call func_locvars
@@ -46,7 +46,7 @@ func_prologue:
#; epilogue with valid CFI
#; (we're better than gcc :-)
leaveq
- .cfi_def_cfa rsp,8
+ .cfi_def_cfa %rsp, 8
ret
.cfi_endproc
@@ -59,21 +59,21 @@ func_prologue:
func_otherreg:
.cfi_startproc
- #; save frame pointer to r12
- movq %rsp,%r12
- .cfi_def_cfa_register r12
+ #; save frame pointer to r8
+ movq %rsp,%r8
+ .cfi_def_cfa_register r8
#; alocate space for local vars
#; (no .cfi_{def,adjust}_cfa_offset here,
- #; because CFA is computed from r12!)
+ #; because CFA is computed from r8!)
sub $100,%rsp
#; function body
call func_prologue
addl $2, %eax
- #; restore frame pointer from r12
- movq %r12,%rsp
+ #; restore frame pointer from r8
+ movq %r8,%rsp
.cfi_def_cfa_register rsp
ret
.cfi_endproc
@@ -105,3 +105,34 @@ _start:
syscall
hlt
.cfi_endproc
+
+#; func_alldirectives
+#; - test for all .cfi directives.
+#; This function is never called and the CFI info doesn't make sense.
+
+ .type func_alldirectives,@function
+func_alldirectives:
+ .cfi_startproc simple
+ .cfi_def_cfa rsp,8
+ nop
+ .cfi_def_cfa_offset 16
+ nop
+ .cfi_def_cfa_register r8
+ nop
+ .cfi_adjust_cfa_offset 0x1234
+ nop
+ .cfi_offset %rsi, 0x10
+ nop
+ .cfi_register %r8, %r9
+ nop
+ .cfi_remember_state
+ nop
+ .cfi_restore %rbp
+ nop
+ .cfi_undefined %rip
+ nop
+ .cfi_same_value rbx
+ nop
+ .cfi_restore_state
+ ret
+ .cfi_endproc
diff --git a/gas/testsuite/gas/cfi/cfi.exp b/gas/testsuite/gas/cfi/cfi.exp
index eeb551098291..b396f9e85235 100644
--- a/gas/testsuite/gas/cfi/cfi.exp
+++ b/gas/testsuite/gas/cfi/cfi.exp
@@ -1,17 +1,3 @@
-# ??? This probably shouldn't be replicated here...
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "cfi $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
if ![is_elf_format] then {
return
}
@@ -61,6 +47,8 @@ if [istarget "x86_64-*"] then {
} elseif { [istarget "mips*-*"] } then {
run_dump_test "cfi-mips-1"
+} elseif { [istarget "hppa*-linux*"] } then {
+ run_dump_test "cfi-hppa-1"
} else {
return
}
@@ -70,3 +58,9 @@ run_dump_test "cfi-common-1"
run_dump_test "cfi-common-2"
run_dump_test "cfi-common-3"
run_dump_test "cfi-common-4"
+run_dump_test "cfi-common-5"
+
+# MIPS doesn't support PC relative cfi directives
+if { ![istarget "mips*-*"] } then {
+ run_dump_test "cfi-common-6"
+}
diff --git a/gas/testsuite/gas/cr16/add_test.d b/gas/testsuite/gas/cr16/add_test.d
new file mode 100644
index 000000000000..c2a0fe0e3c8e
--- /dev/null
+++ b/gas/testsuite/gas/cr16/add_test.d
@@ -0,0 +1,71 @@
+#as:
+#objdump: -dr
+#name: add_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: f1 30 addb \$0xf:s,r1
+ 2: b2 30 ff 00 addb \$0xff:m,r2
+ 6: b1 30 ff 0f addb \$0xfff:m,r1
+ a: b1 30 14 00 addb \$0x14:m,r1
+ e: a2 30 addb \$0xa:s,r2
+ 10: b2 30 0b 00 addb \$0xb:m,r2
+ 14: 12 31 addb r1,r2
+ 16: 23 31 addb r2,r3
+ 18: 34 31 addb r3,r4
+ 1a: 56 31 addb r5,r6
+ 1c: 67 31 addb r6,r7
+ 1e: 78 31 addb r7,r8
+ 20: f1 34 addcb \$0xf:s,r1
+ 22: b2 34 ff 00 addcb \$0xff:m,r2
+ 26: b1 34 ff 0f addcb \$0xfff:m,r1
+ 2a: b1 34 14 00 addcb \$0x14:m,r1
+ 2e: a2 34 addcb \$0xa:s,r2
+ 30: b2 34 0b 00 addcb \$0xb:m,r2
+ 34: 12 35 addcb r1,r2
+ 36: 23 35 addcb r2,r3
+ 38: 34 35 addcb r3,r4
+ 3a: 56 35 addcb r5,r6
+ 3c: 67 35 addcb r6,r7
+ 3e: 78 35 addcb r7,r8
+ 40: f1 36 addcw \$0xf:s,r1
+ 42: b2 36 ff 00 addcw \$0xff:m,r2
+ 46: b1 36 ff 0f addcw \$0xfff:m,r1
+ 4a: b1 36 14 00 addcw \$0x14:m,r1
+ 4e: a2 36 addcw \$0xa:s,r2
+ 50: b2 36 0b 00 addcw \$0xb:m,r2
+ 54: 12 37 addcw r1,r2
+ 56: 23 37 addcw r2,r3
+ 58: 34 37 addcw r3,r4
+ 5a: 56 37 addcw r5,r6
+ 5c: 67 37 addcw r6,r7
+ 5e: 78 37 addcw r7,r8
+ 60: f1 32 addw \$0xf:s,r1
+ 62: b2 32 ff 00 addw \$0xff:m,r2
+ 66: b1 32 ff 0f addw \$0xfff:m,r1
+ 6a: b1 32 14 00 addw \$0x14:m,r1
+ 6e: a2 32 addw \$0xa:s,r2
+ 70: 12 33 addw r1,r2
+ 72: 23 33 addw r2,r3
+ 74: 34 33 addw r3,r4
+ 76: 56 33 addw r5,r6
+ 78: 67 33 addw r6,r7
+ 7a: 78 33 addw r7,r8
+ 7c: f1 60 addd \$0xf:s,\(r2,r1\)
+ 7e: b1 60 0b 00 addd \$0xb:m,\(r2,r1\)
+ 82: b1 60 ff 00 addd \$0xff:m,\(r2,r1\)
+ 86: b1 60 ff 0f addd \$0xfff:m,\(r2,r1\)
+ 8a: 10 04 ff ff addd \$0xffff:m,\(r2,r1\)
+ 8e: 1f 04 ff ff addd \$0xfffff:m,\(r2,r1\)
+ 92: 21 00 ff 0f addd \$0xfffffff:l,\(r2,r1\)
+ 96: ff ff
+ 98: 91 60 addd \$-1:s,\(r2,r1\)
+ 9a: 31 61 addd \(r4,r3\),\(r2,r1\)
+ 9c: 31 61 addd \(r4,r3\),\(r2,r1\)
+ 9e: af 60 addd \$0xa:s,\(sp\)
+ a0: ef 60 addd \$0xe:s,\(sp\)
+ a2: bf 60 0b 00 addd \$0xb:m,\(sp\)
+ a6: 8f 60 addd \$0x8:s,\(sp\)
diff --git a/gas/testsuite/gas/cr16/add_test.s b/gas/testsuite/gas/cr16/add_test.s
new file mode 100644
index 000000000000..de5270db19c3
--- /dev/null
+++ b/gas/testsuite/gas/cr16/add_test.s
@@ -0,0 +1,98 @@
+ .text
+ .global main
+main:
+ ###########
+ # ADDB imm4/imm16, reg
+ ###########
+ addb $0xf,r1
+ addb $0xff,r2
+ addb $0xfff,r1
+ #addb $0xffff,r2 // CHECK WITH CRASM 4.1
+ addb $20,r1
+ addb $10,r2
+ addb $11,r2
+ ###########
+ # ADDB reg, reg
+ ###########
+ addb r1,r2
+ addb r2,r3
+ addb r3,r4
+ addb r5,r6
+ addb r6,r7
+ addb r7,r8
+ ###########
+ # ADDCB imm4/imm16, reg
+ ###########
+ addcb $0xf,r1
+ addcb $0xff,r2
+ addcb $0xfff,r1
+ #addcb $0xffff,r2 // CHECK WITH CRASM 4.1
+ addcb $20,r1
+ addcb $10,r2
+ addcb $11,r2
+ ###########
+ # ADDCB reg, reg
+ ###########
+ addcb r1,r2
+ addcb r2,r3
+ addcb r3,r4
+ addcb r5,r6
+ addcb r6,r7
+ addcb r7,r8
+ ###########
+ # ADDCW imm4/imm16, reg
+ ###########
+ addcw $0xf,r1
+ addcw $0xff,r2
+ addcw $0xfff,r1
+ #addcw $0xffff,r2 # check with CRASM 4.1
+ addcw $20,r1
+ addcw $10,r2
+ addcw $11,r2
+ ###########
+ # ADDCW reg, reg
+ ###########
+ addcw r1,r2
+ addcw r2,r3
+ addcw r3,r4
+ addcw r5,r6
+ addcw r6,r7
+ addcw r7,r8
+ ###########
+ # ADDW imm4/imm16, reg
+ ###########
+ addw $0xf,r1
+ addw $0xff,r2
+ addw $0xfff,r1
+ #addw $0xffff,r2 // CHECK WITH CRASM 4.1
+ addw $20,r1
+ addw $10,r2
+ ###########
+ # ADDW reg, reg
+ ###########
+ addw r1,r2
+ addw r2,r3
+ addw r3,r4
+ addw r5,r6
+ addw r6,r7
+ addw r7,r8
+ ###########
+ # ADDD imm4/imm16/imm20/imm32, regp
+ ###########
+ addd $0xf,(r2,r1)
+ addd $0xB,(r2,r1)
+ addd $0xff,(r2,r1)
+ addd $0xfff,(r2,r1)
+ addd $0xffff,(r2,r1)
+ addd $0xfffff,(r2,r1)
+ addd $0xfffffff,(r2,r1)
+ addd $0xffffffff,(r2,r1)
+ ###########
+ # ADDD regp, regp
+ ###########
+ addd (r4,r3),(r2,r1)
+ addd (r4,r3),(r2,r1)
+ addd $10,(sp)
+ addd $14,(sp)
+ addd $11,(sp)
+ addd $8,(sp)
diff --git a/gas/testsuite/gas/cr16/and_test.d b/gas/testsuite/gas/cr16/and_test.d
new file mode 100644
index 000000000000..f8e1f27f57bf
--- /dev/null
+++ b/gas/testsuite/gas/cr16/and_test.d
@@ -0,0 +1,55 @@
+#as:
+#objdump: -dr
+#name: and_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: f1 20 andb \$0xf:s,r1
+ 2: b2 20 ff 00 andb \$0xff:m,r2
+ 6: b1 20 ff 0f andb \$0xfff:m,r1
+ a: b2 20 ff ff andb \$0xffff:m,r2
+ e: b1 20 14 00 andb \$0x14:m,r1
+ 12: a2 20 andb \$0xa:s,r2
+ 14: 12 21 andb r1,r2
+ 16: 23 21 andb r2,r3
+ 18: 34 21 andb r3,r4
+ 1a: 56 21 andb r5,r6
+ 1c: 67 21 andb r6,r7
+ 1e: 78 21 andb r7,r8
+ 20: f1 22 andw \$0xf:s,r1
+ 22: b2 22 ff 00 andw \$0xff:m,r2
+ 26: b1 22 ff 0f andw \$0xfff:m,r1
+ 2a: b2 22 ff ff andw \$0xffff:m,r2
+ 2e: b1 22 14 00 andw \$0x14:m,r1
+ 32: a2 22 andw \$0xa:s,r2
+ 34: 12 23 andw r1,r2
+ 36: 23 23 andw r2,r3
+ 38: 34 23 andw r3,r4
+ 3a: 56 23 andw r5,r6
+ 3c: 67 23 andw r6,r7
+ 3e: 78 23 andw r7,r8
+ 40: 41 00 00 00 andd \$0xf:l,\(r2,r1\)
+ 44: 0f 00
+ 46: 41 00 00 00 andd \$0xff:l,\(r2,r1\)
+ 4a: ff 00
+ 4c: 41 00 00 00 andd \$0xfff:l,\(r2,r1\)
+ 50: ff 0f
+ 52: 41 00 00 00 andd \$0xffff:l,\(r2,r1\)
+ 56: ff ff
+ 58: 41 00 0f 00 andd \$0xfffff:l,\(r2,r1\)
+ 5c: ff ff
+ 5e: 41 00 ff 0f andd \$0xfffffff:l,\(r2,r1\)
+ 62: ff ff
+ 64: 41 00 ff ff andd \$0xffffffff:l,\(r2,r1\)
+ 68: ff ff
+ 6a: 14 00 31 b0 andd \(r4,r3\),\(r2,r1\)
+ 6e: 14 00 31 b0 andd \(r4,r3\),\(r2,r1\)
+ 72: 4f 00 00 00 andd \$0xa:l,\(sp\)
+ 76: 0a 00
+ 78: 4f 00 00 00 andd \$0xe:l,\(sp\)
+ 7c: 0e 00
+ 7e: 4f 00 00 00 andd \$0x8:l,\(sp\)
+ 82: 08 00
diff --git a/gas/testsuite/gas/cr16/and_test.s b/gas/testsuite/gas/cr16/and_test.s
new file mode 100644
index 000000000000..b21fdb7fec63
--- /dev/null
+++ b/gas/testsuite/gas/cr16/and_test.s
@@ -0,0 +1,57 @@
+ .text
+ .global main
+main:
+ ###########
+ # ANDB imm4/imm16, reg
+ ###########
+ andb $0xf,r1
+ andb $0xff,r2
+ andb $0xfff,r1
+ andb $0xffff,r2
+ andb $20,r1
+ andb $10,r2
+ ###########
+ # ANDB reg, reg
+ ###########
+ andb r1,r2
+ andb r2,r3
+ andb r3,r4
+ andb r5,r6
+ andb r6,r7
+ andb r7,r8
+ ###########
+ # ANDW imm4/imm16, reg
+ ###########
+ andw $0xf,r1
+ andw $0xff,r2
+ andw $0xfff,r1
+ andw $0xffff,r2
+ andw $20,r1
+ andw $10,r2
+ ###########
+ # ANDW reg, reg
+ ###########
+ andw r1,r2
+ andw r2,r3
+ andw r3,r4
+ andw r5,r6
+ andw r6,r7
+ andw r7,r8
+ ###########
+ # ANDD imm4/imm16/imm32, regp
+ ###########
+ andd $0xf,(r2,r1)
+ andd $0xff,(r2,r1)
+ andd $0xfff,(r2,r1)
+ andd $0xffff,(r2,r1)
+ andd $0xfffff,(r2,r1)
+ andd $0xfffffff,(r2,r1)
+ andd $0xffffffff,(r2,r1)
+ ###########
+ # ANDD regp, regp
+ ###########
+ andd (r4,r3),(r2,r1)
+ andd (r4,r3),(r2,r1)
+ andd $10,(sp)
+ andd $14,(sp)
+ andd $8,(sp)
diff --git a/gas/testsuite/gas/cr16/ash_test.d b/gas/testsuite/gas/cr16/ash_test.d
new file mode 100644
index 000000000000..2818012f7b13
--- /dev/null
+++ b/gas/testsuite/gas/cr16/ash_test.d
@@ -0,0 +1,47 @@
+#as:
+#objdump: -dr
+#name: ash_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 71 40 ashub \$7:s,r1
+ 2: 91 40 ashub \$-7:s,r1
+ 4: 41 40 ashub \$4:s,r1
+ 6: c1 40 ashub \$-4:s,r1
+ 8: 81 40 ashub \$-8:s,r1
+ a: 31 40 ashub \$3:s,r1
+ c: d1 40 ashub \$-3:s,r1
+ e: 21 41 ashub r2,r1
+ 10: 34 41 ashub r3,r4
+ 12: 56 41 ashub r5,r6
+ 14: 8a 41 ashub r8,r10
+ 16: 71 42 ashuw \$7:s,r1
+ 18: 91 43 ashuw \$-7:s,r1
+ 1a: 41 42 ashuw \$4:s,r1
+ 1c: c1 43 ashuw \$-4:s,r1
+ 1e: 81 42 ashuw \$8:s,r1
+ 20: 81 43 ashuw \$-8:s,r1
+ 22: 31 42 ashuw \$3:s,r1
+ 24: d1 43 ashuw \$-3:s,r1
+ 26: 21 45 ashuw r2,r1
+ 28: 34 45 ashuw r3,r4
+ 2a: 56 45 ashuw r5,r6
+ 2c: 8a 45 ashuw r8,r10
+ 2e: 72 4c ashud \$7:s,\(r3,r2\)
+ 30: 92 4f ashud \$-7:s,\(r3,r2\)
+ 32: 82 4c ashud \$8:s,\(r3,r2\)
+ 34: 82 4f ashud \$-8:s,\(r3,r2\)
+ 36: 42 4c ashud \$4:s,\(r3,r2\)
+ 38: c2 4f ashud \$-4:s,\(r3,r2\)
+ 3a: c2 4c ashud \$12:s,\(r3,r2\)
+ 3c: 42 4f ashud \$-12:s,\(r3,r2\)
+ 3e: 31 4c ashud \$3:s,\(r2,r1\)
+ 40: d1 4f ashud \$-3:s,\(r2,r1\)
+ 42: 41 48 ashud r4,\(r2,r1\)
+ 44: 51 48 ashud r5,\(r2,r1\)
+ 46: 61 48 ashud r6,\(r2,r1\)
+ 48: 81 48 ashud r8,\(r2,r1\)
+ 4a: 11 48 ashud r1,\(r2,r1\)
diff --git a/gas/testsuite/gas/cr16/ash_test.s b/gas/testsuite/gas/cr16/ash_test.s
new file mode 100644
index 000000000000..dc3e794929ca
--- /dev/null
+++ b/gas/testsuite/gas/cr16/ash_test.s
@@ -0,0 +1,59 @@
+ .text
+ .global main
+main:
+ #####################################
+ # ASHUB cnt(left +)/cnt (right -), reg
+ #####################################
+ ashub $7,r1
+ ashub $-7,r1
+ ashub $4,r1
+ ashub $-4,r1
+ ashub $-8,r1
+ ashub $3,r1
+ ashub $-3,r1
+ #####################################
+ # ASHUB reg, reg
+ #####################################
+ ashub r2,r1
+ ashub r3,r4
+ ashub r5,r6
+ ashub r8,r10
+ #####################################
+ # ASHUW cnt(left +)/cnt (right -), reg
+ #####################################
+ ashuw $7,r1
+ ashuw $-7,r1
+ ashuw $4,r1
+ ashuw $-4,r1
+ ashuw $8,r1
+ ashuw $-8,r1
+ ashuw $3,r1
+ ashuw $-3,r1
+ #####################################
+ # ASHUW reg, reg
+ #####################################
+ ashuw r2,r1
+ ashuw r3,r4
+ ashuw r5,r6
+ ashuw r8,r10
+ #####################################
+ # ASHUD cnt(left +)/cnt (right -), regp
+ #####################################
+ ashud $7, (r3,r2)
+ ashud $-7, (r3,r2)
+ ashud $8, (r3,r2)
+ ashud $-8, (r3,r2)
+ ashud $4, (r3,r2)
+ ashud $-4, (r3,r2)
+ ashud $12,(r3,r2)
+ ashud $-12,(r3,r2)
+ ashud $3,(r2,r1)
+ ashud $-3,(r2,r1)
+ #####################################
+ # ASHUD reg, regp
+ #####################################
+ ashud r4,(r2,r1)
+ ashud r5,(r2,r1)
+ ashud r6,(r2,r1)
+ ashud r8,(r2,r1)
+ ashud r1,(r2,r1)
diff --git a/gas/testsuite/gas/cr16/bal_test.d b/gas/testsuite/gas/cr16/bal_test.d
new file mode 100644
index 000000000000..eb1558de9829
--- /dev/null
+++ b/gas/testsuite/gas/cr16/bal_test.d
@@ -0,0 +1,25 @@
+#as:
+#objdump: -dr
+#name: bal_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 0f c0 22 f1 bal \(ra\),\*\+0xff122 <main\+0xff122>:m
+ 4: ff c0 26 f1 bal \(ra\),\*\+0xfff12a <main\+0xfff12a>:m
+ 8: 00 c0 22 00 bal \(ra\),\*\+0x2a <main\+0x2a>:m
+ c: 00 c0 22 01 bal \(ra\),\*\+0x12e <main\+0x12e>:m
+ 10: 00 c0 22 f1 bal \(ra\),\*\+0xf132 <main\+0xf132>:m
+ 14: 00 c0 2a 81 bal \(ra\),\*\+0x813e <main\+0x813e>:m
+ 18: 10 00 00 20 bal \(r1,r0\),\*\+0x13a <main\+0x13a>:l
+ 1c: 22 01
+ 1e: 10 00 ac 2f bal \(r11,r10\),\*\+0xcff140 <main\+0xcff140>:l
+ 22: 22 f1
+ 24: 10 00 6a 2f bal \(r7,r6\),\*\+0xaff146 <main\+0xaff146>:l
+ 28: 22 f1
+ 2a: 10 00 38 2f bal \(r4,r3\),\*\+0x8ff14c <main\+0x8ff14c>:l
+ 2e: 22 f1
+ 30: 10 00 7f 2f bal \(r8,r7\),\*\+0xfff152 <main\+0xfff152>:l
+ 34: 22 f1
diff --git a/gas/testsuite/gas/cr16/bal_test.s b/gas/testsuite/gas/cr16/bal_test.s
new file mode 100644
index 000000000000..b89f1f6baa65
--- /dev/null
+++ b/gas/testsuite/gas/cr16/bal_test.s
@@ -0,0 +1,14 @@
+ .text
+ .global main
+main:
+bal (ra),*+0xff122
+bal (ra),*+0xfff126
+bal (ra),*+0x22
+bal (ra),*+0x122
+bal (ra),*+0xf122
+bal (ra),*+0x812a
+bal (r1,r0),*+0x122
+bal (r11,r10),*+0xcff122
+bal (r7,r6),*+0xaff122
+bal (r4,r3),*+0x8ff122
+bal (r8,r7),*+0xfff122
diff --git a/gas/testsuite/gas/cr16/bcc_test.d b/gas/testsuite/gas/cr16/bcc_test.d
new file mode 100644
index 000000000000..4613edf92d4d
--- /dev/null
+++ b/gas/testsuite/gas/cr16/bcc_test.d
@@ -0,0 +1,69 @@
+#as:
+#objdump: -dr
+#name: bcc_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 01 11 beq \*\+0x22 <main\+0x22>:s
+ 2: 19 11 bne \*\+0x34 <main\+0x34>:s
+ 4: 32 12 bcc \*\+0x48 <main\+0x48>:s
+ 6: 3a 12 bcc \*\+0x5a <main\+0x5a>:s
+ 8: 43 13 bhi \*\+0x6e <main\+0x6e>:s
+ a: cb 13 blt \*\+0x80 <main\+0x80>:s
+ c: 64 14 bgt \*\+0x94 <main\+0x94>:s
+ e: 8d 14 bfs \*\+0xa8 <main\+0xa8>:s
+ 10: 95 15 bfc \*\+0xba <main\+0xba>:s
+ 12: a0 18 bc 01 blo \*\+0x1ce <main\+0x1ce>:m
+ 16: 40 18 cc 01 bhi \*\+0x1e2 <main\+0x1e2>:m
+ 1a: c0 18 d6 01 blt \*\+0x1f0 <main\+0x1f0>:m
+ 1e: d0 18 e6 01 bge \*\+0x204 <main\+0x204>:m
+ 22: eb 17 br \*\+0x118 <main\+0x118>:s
+ 24: 00 18 12 01 beq \*\+0x136 <main\+0x136>:m
+ 28: 00 18 12 1f beq \*\+0x1f3a <main\+0x1f3a>:m
+ 2c: 00 18 22 0f beq \*\+0xf4e <main\+0xf4e>:m
+ 30: 10 18 34 0f bne \*\+0xf64 <main\+0xf64>:m
+ 34: 30 18 44 0f bcc \*\+0xf78 <main\+0xf78>:m
+ 38: 30 18 56 0f bcc \*\+0xf8e <main\+0xf8e>:m
+ 3c: 40 18 66 0f bhi \*\+0xfa2 <main\+0xfa2>:m
+ 40: c0 18 78 0f blt \*\+0xfb8 <main\+0xfb8>:m
+ 44: 60 18 88 0f bgt \*\+0xfcc <main\+0xfcc>:m
+ 48: 80 18 9a 0f bfs \*\+0xfe2 <main\+0xfe2>:m
+ 4c: 90 18 aa 0f bfc \*\+0xff6 <main\+0xff6>:m
+ 50: a0 18 bc 1f blo \*\+0x200c <main\+0x200c>:m
+ 54: 40 18 cc 1f bhi \*\+0x2020 <main\+0x2020>:m
+ 58: c0 18 da 1f blt \*\+0x2032 <main\+0x2032>:m
+ 5c: d0 18 ea 1f bge \*\+0x2046 <main\+0x2046>:m
+ 60: e0 18 fa ff br \*\+0x1005a <main\+0x1005a>:m
+ 64: 10 00 0f 0f beq \*\+0xff1f76 <main\+0xff1f76>:l
+ 68: 12 1f
+ 6a: 10 00 0a 0a beq \*\+0xaa0f8c <main\+0xaa0f8c>:l
+ 6e: 22 0f
+ 70: 10 00 1b 0b bne \*\+0xbb0fa4 <main\+0xbb0fa4>:l
+ 74: 34 0f
+ 76: 10 00 3c 0c bcc \*\+0xcc0fba <main\+0xcc0fba>:l
+ 7a: 44 0f
+ 7c: 10 00 3d 0d bcc \*\+0xdd0fd2 <main\+0xdd0fd2>:l
+ 80: 56 0f
+ 82: 10 00 49 09 bhi \*\+0x990fe8 <main\+0x990fe8>:l
+ 86: 66 0f
+ 88: 10 00 c8 08 blt \*\+0x881000 <main\+0x881000>:l
+ 8c: 78 0f
+ 8e: 10 00 67 07 bgt \*\+0x771016 <main\+0x771016>:l
+ 92: 88 0f
+ 94: 10 00 86 06 bfs \*\+0x66102e <main\+0x66102e>:l
+ 98: 9a 0f
+ 9a: 10 00 95 05 bfc \*\+0x551044 <main\+0x551044>:l
+ 9e: aa 0f
+ a0: 10 00 a4 04 blo \*\+0x44205c <main\+0x44205c>:l
+ a4: bc 1f
+ a6: 10 00 43 03 bhi \*\+0x332072 <main\+0x332072>:l
+ aa: cc 1f
+ ac: 10 00 c2 02 blt \*\+0x22208a <main\+0x22208a>:l
+ b0: de 1f
+ b2: 10 00 d1 01 bge \*\+0x1120a0 <main\+0x1120a0>:l
+ b6: ee 1f
+ b8: 10 00 e0 0f br \*\+0x1000b6 <main\+0x1000b6>:l
+ bc: fe ff
diff --git a/gas/testsuite/gas/cr16/bcc_test.s b/gas/testsuite/gas/cr16/bcc_test.s
new file mode 100644
index 000000000000..50f3fbe01d58
--- /dev/null
+++ b/gas/testsuite/gas/cr16/bcc_test.s
@@ -0,0 +1,59 @@
+ .text
+ .global main
+main:
+ ###################
+ # bcc disp9/disp17/disp25
+ ###################
+ # bcc disp9
+ ###################
+ beq *+0x022
+ bne *+0x032
+ bcc *+0x044
+ bcc *+0x054
+ bhi *+0x066
+ blt *+0x076
+ bgt *+0x088
+ bfs *+0x09a
+ bfc *+0x0aa
+ blo *+0x1bc
+ bhi *+0x1cc
+ blt *+0x1d6
+ bge *+0x1e6
+ br *+0x0f6
+ ###################
+ # bcc disp17
+ ###################
+ beq *+0x112
+ beq *+0x1f12
+ beq *+0x0f22
+ bne *+0x0f34
+ bcc *+0x0f44
+ bcc *+0x0f56
+ bhi *+0x0f66
+ blt *+0x0f78
+ bgt *+0x0f88
+ bfs *+0x0f9a
+ bfc *+0x0faa
+ blo *+0x1fbc
+ bhi *+0x1fcc
+ blt *+0x1fda
+ bge *+0x1fea
+ br *+0xfffa
+ ###################
+ # bcc disp25
+ ###################
+ beq *+0xff1f12
+ beq *+0xaa0f22
+ bne *+0xbb0f34
+ bcc *+0xcc0f44
+ bcc *+0xdd0f56
+ bhi *+0x990f66
+ blt *+0x880f78
+ bgt *+0x770f88
+ bfs *+0x660f9a
+ bfc *+0x550faa
+ blo *+0x441fbc
+ bhi *+0x331fcc
+ blt *+0x221fde
+ bge *+0x111fee
+ br *+0x0ffffe
diff --git a/gas/testsuite/gas/cr16/beq0_test.d b/gas/testsuite/gas/cr16/beq0_test.d
new file mode 100644
index 000000000000..82f923c01412
--- /dev/null
+++ b/gas/testsuite/gas/cr16/beq0_test.d
@@ -0,0 +1,15 @@
+#as:
+#objdump: -dr
+#name: beq0_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 71 0c beq0b r1,\*\+0x10 <main\+0x10>:s
+ 2: b1 0c beq0b r1,\*\+0x18 <main\+0x18>:s
+ 4: e1 0c beq0b r1,\*\+0x1e <main\+0x1e>:s
+ 6: 71 0e beq0w r1,\*\+0x10 <main\+0x10>:s
+ 8: b1 0e beq0w r1,\*\+0x18 <main\+0x18>:s
+ a: e1 0e beq0w r1,\*\+0x1e <main\+0x1e>:s
diff --git a/gas/testsuite/gas/cr16/beq0_test.s b/gas/testsuite/gas/cr16/beq0_test.s
new file mode 100644
index 000000000000..70e9f6ab6ed5
--- /dev/null
+++ b/gas/testsuite/gas/cr16/beq0_test.s
@@ -0,0 +1,15 @@
+ .text
+ .global main
+main:
+ ###################
+ # beq0b reg, dispu5
+ ###################
+ beq0b r1,*+16
+ beq0b r1,*+24
+ beq0b r1,*+30
+ ###################
+ # beq0w reg, dispu5
+ ###################
+ beq0w r1,*+16
+ beq0w r1,*+24
+ beq0w r1,*+30
diff --git a/gas/testsuite/gas/cr16/cbitb_test.d b/gas/testsuite/gas/cr16/cbitb_test.d
new file mode 100644
index 000000000000..bbb382e503c0
--- /dev/null
+++ b/gas/testsuite/gas/cr16/cbitb_test.d
@@ -0,0 +1,82 @@
+#as:
+#objdump: -dr
+#name: cbitb_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: c0 6b cd 0b cbitb \$0x4,0xbcd <main\+0xbcd>:m
+ 4: da 6b cd ab cbitb \$0x5,0xaabcd <main\+0xaabcd>:m
+ 8: 10 00 3f 7a cbitb \$0x3,0xfaabcd <main\+0xfaabcd>:l
+ c: cd ab
+ e: 50 68 14 00 cbitb \$0x5,\[r12\]0x14:m
+ 12: c0 68 fc ab cbitb \$0x4,\[r13\]0xabfc:m
+ 16: 30 68 34 12 cbitb \$0x3,\[r12\]0x1234:m
+ 1a: b0 68 34 12 cbitb \$0x3,\[r13\]0x1234:m
+ 1e: 30 68 34 00 cbitb \$0x3,\[r12\]0x34:m
+ 22: b0 6a 3a 4a cbitb \$0x3,\[r12\]0xa7a:m\(r1,r0\)
+ 26: b1 6a 3a 4a cbitb \$0x3,\[r12\]0xa7a:m\(r3,r2\)
+ 2a: b6 6a 3a 4a cbitb \$0x3,\[r12\]0xa7a:m\(r4,r3\)
+ 2e: b2 6a 3a 4a cbitb \$0x3,\[r12\]0xa7a:m\(r5,r4\)
+ 32: b7 6a 3a 4a cbitb \$0x3,\[r12\]0xa7a:m\(r6,r5\)
+ 36: b3 6a 3a 4a cbitb \$0x3,\[r12\]0xa7a:m\(r7,r6\)
+ 3a: b4 6a 3a 4a cbitb \$0x3,\[r12\]0xa7a:m\(r9,r8\)
+ 3e: b5 6a 3a 4a cbitb \$0x3,\[r12\]0xa7a:m\(r11,r10\)
+ 42: b8 6a 3a 4a cbitb \$0x3,\[r13\]0xa7a:m\(r1,r0\)
+ 46: b9 6a 3a 4a cbitb \$0x3,\[r13\]0xa7a:m\(r3,r2\)
+ 4a: be 6a 3a 4a cbitb \$0x3,\[r13\]0xa7a:m\(r4,r3\)
+ 4e: ba 6a 3a 4a cbitb \$0x3,\[r13\]0xa7a:m\(r5,r4\)
+ 52: bf 6a 3a 4a cbitb \$0x3,\[r13\]0xa7a:m\(r6,r5\)
+ 56: bb 6a 3a 4a cbitb \$0x3,\[r13\]0xa7a:m\(r7,r6\)
+ 5a: bc 6a 3a 4a cbitb \$0x3,\[r13\]0xa7a:m\(r9,r8\)
+ 5e: bd 6a 3a 4a cbitb \$0x3,\[r13\]0xa7a:m\(r11,r10\)
+ 62: be 6a 5a 4b cbitb \$0x5,\[r13\]0xb7a:m\(r4,r3\)
+ 66: b7 6a 1a 41 cbitb \$0x1,\[r12\]0x17a:m\(r6,r5\)
+ 6a: bf 6a 14 01 cbitb \$0x1,\[r13\]0x134:m\(r6,r5\)
+ 6e: 10 00 36 6a cbitb \$0x3,\[r12\]0xabcde:l\(r4,r3\)
+ 72: de bc
+ 74: 10 00 5e 60 cbitb \$0x5,\[r13\]0xabcd:l\(r4,r3\)
+ 78: cd ab
+ 7a: 10 00 37 60 cbitb \$0x3,\[r12\]0xabcd:l\(r6,r5\)
+ 7e: cd ab
+ 80: 10 00 3f 60 cbitb \$0x3,\[r13\]0xbcde:l\(r6,r5\)
+ 84: de bc
+ 86: 10 00 52 40 cbitb \$0x5,0x0:l\(r2\)
+ 8a: 00 00
+ 8c: 3c 6b 34 00 cbitb \$0x3,0x34:m\(r12\)
+ 90: 3d 6b ab 00 cbitb \$0x3,0xab:m\(r13\)
+ 94: 10 00 51 40 cbitb \$0x5,0xad:l\(r1\)
+ 98: ad 00
+ 9a: 10 00 52 40 cbitb \$0x5,0xcd:l\(r2\)
+ 9e: cd 00
+ a0: 10 00 50 40 cbitb \$0x5,0xfff:l\(r0\)
+ a4: ff 0f
+ a6: 10 00 34 40 cbitb \$0x3,0xbcd:l\(r4\)
+ aa: cd 0b
+ ac: 3c 6b ff 0f cbitb \$0x3,0xfff:m\(r12\)
+ b0: 3d 6b ff 0f cbitb \$0x3,0xfff:m\(r13\)
+ b4: 3d 6b ff ff cbitb \$0x3,0xffff:m\(r13\)
+ b8: 3c 6b 43 23 cbitb \$0x3,0x2343:m\(r12\)
+ bc: 10 00 32 41 cbitb \$0x3,0x2345:l\(r2\)
+ c0: 45 23
+ c2: 10 00 38 44 cbitb \$0x3,0xabcd:l\(r8\)
+ c6: cd ab
+ c8: 10 00 3d 5f cbitb \$0x3,0xfabcd:l\(r13\)
+ cc: cd ab
+ ce: 10 00 38 4f cbitb \$0x3,0xabcd:l\(r8\)
+ d2: cd ab
+ d4: 10 00 39 4f cbitb \$0x3,0xabcd:l\(r9\)
+ d8: cd ab
+ da: 10 00 39 44 cbitb \$0x3,0xabcd:l\(r9\)
+ de: cd ab
+ e0: 31 6a cbitb \$0x3,0x0:s\(r2,r1\)
+ e2: 51 6b 01 00 cbitb \$0x5,0x1:m\(r2,r1\)
+ e6: 41 6b 34 12 cbitb \$0x4,0x1234:m\(r2,r1\)
+ ea: 31 6b 34 12 cbitb \$0x3,0x1234:m\(r2,r1\)
+ ee: 10 00 31 51 cbitb \$0x3,0x12345:l\(r2,r1\)
+ f2: 45 23
+ f4: 31 6b 23 01 cbitb \$0x3,0x123:m\(r2,r1\)
+ f8: 10 00 31 51 cbitb \$0x3,0x12345:l\(r2,r1\)
+ fc: 45 23
diff --git a/gas/testsuite/gas/cr16/cbitb_test.s b/gas/testsuite/gas/cr16/cbitb_test.s
new file mode 100644
index 000000000000..1e65ef304f2a
--- /dev/null
+++ b/gas/testsuite/gas/cr16/cbitb_test.s
@@ -0,0 +1,62 @@
+ .text
+ .global main
+main:
+ cbitb $4,0xbcd
+ cbitb $5,0xaabcd
+ cbitb $3,0xfaabcd
+
+ cbitb $5,[r12]0x14
+ cbitb $4,[r13]0xabfc
+ cbitb $3,[r12]0x1234
+ cbitb $3,[r13]0x1234
+ cbitb $3,[r12]0x34
+
+ cbitb $3,[r12]0xa7a(r1,r0)
+ cbitb $3,[r12]0xa7a(r3,r2)
+ cbitb $3,[r12]0xa7a(r4,r3)
+ cbitb $3,[r12]0xa7a(r5,r4)
+ cbitb $3,[r12]0xa7a(r6,r5)
+ cbitb $3,[r12]0xa7a(r7,r6)
+ cbitb $3,[r12]0xa7a(r9,r8)
+ cbitb $3,[r12]0xa7a(r11,r10)
+ cbitb $3,[r13]0xa7a(r1,r0)
+ cbitb $3,[r13]0xa7a(r3,r2)
+ cbitb $3,[r13]0xa7a(r4,r3)
+ cbitb $3,[r13]0xa7a(r5,r4)
+ cbitb $3,[r13]0xa7a(r6,r5)
+ cbitb $3,[r13]0xa7a(r7,r6)
+ cbitb $3,[r13]0xa7a(r9,r8)
+ cbitb $3,[r13]0xa7a(r11,r10)
+ cbitb $5,[r13]0xb7a(r4,r3)
+ cbitb $1,[r12]0x17a(r6,r5)
+ cbitb $1,[r13]0x134(r6,r5)
+ cbitb $3,[r12]0xabcde(r4,r3)
+ cbitb $5,[r13]0xabcd(r4,r3)
+ cbitb $3,[r12]0xabcd(r6,r5)
+ cbitb $3,[r13]0xbcde(r6,r5)
+
+ cbitb $5,0x0(r2)
+ cbitb $3,0x34(r12)
+ cbitb $3,0xab(r13)
+ cbitb $5,0xad(r1)
+ cbitb $5,0xcd(r2)
+ cbitb $5,0xfff(r0)
+ cbitb $3,0xbcd(r4)
+ cbitb $3,0xfff(r12)
+ cbitb $3,0xfff(r13)
+ cbitb $3,0xffff(r13)
+ cbitb $3,0x2343(r12)
+ cbitb $3,0x12345(r2)
+ cbitb $3,0x4abcd(r8)
+ cbitb $3,0xfabcd(r13)
+ cbitb $3,0xfabcd(r8)
+ cbitb $3,0xfabcd(r9)
+ cbitb $3,0x4abcd(r9)
+
+ cbitb $3,0x0(r2,r1)
+ cbitb $5,0x1(r2,r1)
+ cbitb $4,0x1234(r2,r1)
+ cbitb $3,0x1234(r2,r1)
+ cbitb $3,0x12345(r2,r1)
+ cbitb $3,0x123(r2,r1)
+ cbitb $3,0x12345(r2,r1)
diff --git a/gas/testsuite/gas/cr16/cbitw_test.d b/gas/testsuite/gas/cr16/cbitw_test.d
new file mode 100644
index 000000000000..55e1543cd954
--- /dev/null
+++ b/gas/testsuite/gas/cr16/cbitw_test.d
@@ -0,0 +1,155 @@
+#as:
+#objdump: -dr
+#name: cbitw_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 40 6f cd 0b cbitw \$0x4:s,0xbcd <main\+0xbcd>:m
+ 4: 5a 6f cd ab cbitw \$0x5:s,0xaabcd <main\+0xaabcd>:m
+ 8: 11 00 3f 7a cbitw \$0x3:s,0xfaabcd <main\+0xfaabcd>:l
+ c: cd ab
+ e: a0 6f cd 0b cbitw \$0xa:s,0xbcd <main\+0xbcd>:m
+ 12: fa 6f cd ab cbitw \$0xf:s,0xaabcd <main\+0xaabcd>:m
+ 16: 11 00 ef 7a cbitw \$0xe:s,0xfaabcd <main\+0xfaabcd>:l
+ 1a: cd ab
+ 1c: 50 6c 14 00 cbitw \$0x5:s,\[r13\]0x14:m
+ 20: 40 6d fc ab cbitw \$0x4:s,\[r13\]0xabfc:m
+ 24: 30 6c 34 12 cbitw \$0x3:s,\[r12\]0x1234:m
+ 28: 30 6d 34 12 cbitw \$0x3:s,\[r12\]0x1234:m
+ 2c: 30 6c 34 00 cbitw \$0x3:s,\[r12\]0x34:m
+ 30: f0 6c 14 00 cbitw \$0xf:s,\[r13\]0x14:m
+ 34: e0 6d fc ab cbitw \$0xe:s,\[r13\]0xabfc:m
+ 38: d0 6c 34 12 cbitw \$0xd:s,\[r13\]0x1234:m
+ 3c: d0 6d 34 12 cbitw \$0xd:s,\[r13\]0x1234:m
+ 40: b0 6c 34 00 cbitw \$0xb:s,\[r12\]0x34:m
+ 44: f0 6a 3a 4a cbitw \$0x3:s,\[r12\]0xa7a:m\(r1,r0\)
+ 48: f1 6a 3a 4a cbitw \$0x3:s,\[r12\]0xa7a:m\(r3,r2\)
+ 4c: f6 6a 3a 4a cbitw \$0x3:s,\[r12\]0xa7a:m\(r4,r3\)
+ 50: f2 6a 3a 4a cbitw \$0x3:s,\[r12\]0xa7a:m\(r5,r4\)
+ 54: f7 6a 3a 4a cbitw \$0x3:s,\[r12\]0xa7a:m\(r6,r5\)
+ 58: f3 6a 3a 4a cbitw \$0x3:s,\[r12\]0xa7a:m\(r7,r6\)
+ 5c: f4 6a 3a 4a cbitw \$0x3:s,\[r12\]0xa7a:m\(r9,r8\)
+ 60: f5 6a 3a 4a cbitw \$0x3:s,\[r12\]0xa7a:m\(r11,r10\)
+ 64: f8 6a 3a 4a cbitw \$0x3:s,\[r13\]0xa7a:m\(r1,r0\)
+ 68: f9 6a 3a 4a cbitw \$0x3:s,\[r13\]0xa7a:m\(r3,r2\)
+ 6c: fe 6a 3a 4a cbitw \$0x3:s,\[r13\]0xa7a:m\(r4,r3\)
+ 70: fa 6a 3a 4a cbitw \$0x3:s,\[r13\]0xa7a:m\(r5,r4\)
+ 74: ff 6a 3a 4a cbitw \$0x3:s,\[r13\]0xa7a:m\(r6,r5\)
+ 78: fb 6a 3a 4a cbitw \$0x3:s,\[r13\]0xa7a:m\(r7,r6\)
+ 7c: fc 6a 3a 4a cbitw \$0x3:s,\[r13\]0xa7a:m\(r9,r8\)
+ 80: fd 6a 3a 4a cbitw \$0x3:s,\[r13\]0xa7a:m\(r11,r10\)
+ 84: fe 6a 5a 4b cbitw \$0x5:s,\[r13\]0xb7a:m\(r4,r3\)
+ 88: f7 6a 1a 41 cbitw \$0x1:s,\[r12\]0x17a:m\(r6,r5\)
+ 8c: ff 6a 14 01 cbitw \$0x1:s,\[r13\]0x134:m\(r6,r5\)
+ 90: 11 00 36 6a cbitw \$0x3:s,\[r12\]0xabcde:l\(r4,r3\)
+ 94: de bc
+ 96: 11 00 5e 60 cbitw \$0x5:s,\[r13\]0xabcd:l\(r4,r3\)
+ 9a: cd ab
+ 9c: 11 00 37 60 cbitw \$0x3:s,\[r12\]0xabcd:l\(r6,r5\)
+ a0: cd ab
+ a2: 11 00 3f 60 cbitw \$0x3:s,\[r13\]0xbcde:l\(r6,r5\)
+ a6: de bc
+ a8: f0 6a da 4a cbitw \$0xd:s,\[r12\]0xafa:m\(r1,r0\)
+ ac: f1 6a da 4a cbitw \$0xd:s,\[r12\]0xafa:m\(r3,r2\)
+ b0: f6 6a da 4a cbitw \$0xd:s,\[r12\]0xafa:m\(r4,r3\)
+ b4: f2 6a da 4a cbitw \$0xd:s,\[r12\]0xafa:m\(r5,r4\)
+ b8: f7 6a da 4a cbitw \$0xd:s,\[r12\]0xafa:m\(r6,r5\)
+ bc: f3 6a da 4a cbitw \$0xd:s,\[r12\]0xafa:m\(r7,r6\)
+ c0: f4 6a da 4a cbitw \$0xd:s,\[r12\]0xafa:m\(r9,r8\)
+ c4: f5 6a da 4a cbitw \$0xd:s,\[r12\]0xafa:m\(r11,r10\)
+ c8: f8 6a da 4a cbitw \$0xd:s,\[r13\]0xafa:m\(r1,r0\)
+ cc: f9 6a da 4a cbitw \$0xd:s,\[r13\]0xafa:m\(r3,r2\)
+ d0: fe 6a da 4a cbitw \$0xd:s,\[r13\]0xafa:m\(r4,r3\)
+ d4: fa 6a da 4a cbitw \$0xd:s,\[r13\]0xafa:m\(r5,r4\)
+ d8: ff 6a da 4a cbitw \$0xd:s,\[r13\]0xafa:m\(r6,r5\)
+ dc: fb 6a da 4a cbitw \$0xd:s,\[r13\]0xafa:m\(r7,r6\)
+ e0: fc 6a da 4a cbitw \$0xd:s,\[r13\]0xafa:m\(r9,r8\)
+ e4: fd 6a da 4a cbitw \$0xd:s,\[r13\]0xafa:m\(r11,r10\)
+ e8: fe 6a fa 4b cbitw \$0xf:s,\[r13\]0xbfa:m\(r4,r3\)
+ ec: f7 6a ba 41 cbitw \$0xb:s,\[r12\]0x1fa:m\(r6,r5\)
+ f0: ff 6a b4 01 cbitw \$0xb:s,\[r13\]0x1b4:m\(r6,r5\)
+ f4: 11 00 d6 6a cbitw \$0xd:s,\[r12\]0xabcde:l\(r4,r3\)
+ f8: de bc
+ fa: 11 00 fe 60 cbitw \$0xf:s,\[r13\]0xabcd:l\(r4,r3\)
+ fe: cd ab
+ 100: 11 00 d7 60 cbitw \$0xd:s,\[r12\]0xabcd:l\(r6,r5\)
+ 104: cd ab
+ 106: 11 00 df 60 cbitw \$0xd:s,\[r13\]0xbcde:l\(r6,r5\)
+ 10a: de bc
+ 10c: 11 00 52 40 cbitw \$0x5:s,0x0:l\(r2\)
+ 110: 00 00
+ 112: 3c 69 34 00 cbitw \$0x3:s,0x34:m\(r12\)
+ 116: 3d 69 ab 00 cbitw \$0x3:s,0xab:m\(r13\)
+ 11a: 11 00 51 40 cbitw \$0x5:s,0xad:l\(r1\)
+ 11e: ad 00
+ 120: 11 00 52 40 cbitw \$0x5:s,0xcd:l\(r2\)
+ 124: cd 00
+ 126: 11 00 50 40 cbitw \$0x5:s,0xfff:l\(r0\)
+ 12a: ff 0f
+ 12c: 11 00 34 40 cbitw \$0x3:s,0xbcd:l\(r4\)
+ 130: cd 0b
+ 132: 3c 69 ff 0f cbitw \$0x3:s,0xfff:m\(r12\)
+ 136: 3d 69 ff 0f cbitw \$0x3:s,0xfff:m\(r13\)
+ 13a: 3d 69 ff ff cbitw \$0x3:s,0xffff:m\(r13\)
+ 13e: 3c 69 43 23 cbitw \$0x3:s,0x2343:m\(r12\)
+ 142: 11 00 32 41 cbitw \$0x3:s,0x2345:l\(r2\)
+ 146: 45 23
+ 148: 11 00 38 44 cbitw \$0x3:s,0xabcd:l\(r8\)
+ 14c: cd ab
+ 14e: 11 00 3d 5f cbitw \$0x3:s,0xfabcd:l\(r13\)
+ 152: cd ab
+ 154: 11 00 38 4f cbitw \$0x3:s,0xabcd:l\(r8\)
+ 158: cd ab
+ 15a: 11 00 39 4f cbitw \$0x3:s,0xabcd:l\(r9\)
+ 15e: cd ab
+ 160: 11 00 39 44 cbitw \$0x3:s,0xabcd:l\(r9\)
+ 164: cd ab
+ 166: 11 00 f2 40 cbitw \$0xf:s,0x0:l\(r2\)
+ 16a: 00 00
+ 16c: dc 69 34 00 cbitw \$0xd:s,0x34:m\(r12\)
+ 170: dd 69 ab 00 cbitw \$0xd:s,0xab:m\(r13\)
+ 174: 11 00 f1 40 cbitw \$0xf:s,0xad:l\(r1\)
+ 178: ad 00
+ 17a: 11 00 f2 40 cbitw \$0xf:s,0xcd:l\(r2\)
+ 17e: cd 00
+ 180: 11 00 f0 40 cbitw \$0xf:s,0xfff:l\(r0\)
+ 184: ff 0f
+ 186: 11 00 d4 40 cbitw \$0xd:s,0xbcd:l\(r4\)
+ 18a: cd 0b
+ 18c: dc 69 ff 0f cbitw \$0xd:s,0xfff:m\(r12\)
+ 190: dd 69 ff 0f cbitw \$0xd:s,0xfff:m\(r13\)
+ 194: dd 69 ff ff cbitw \$0xd:s,0xffff:m\(r13\)
+ 198: dc 69 43 23 cbitw \$0xd:s,0x2343:m\(r12\)
+ 19c: 11 00 d2 41 cbitw \$0xd:s,0x2345:l\(r2\)
+ 1a0: 45 23
+ 1a2: 11 00 d8 44 cbitw \$0xd:s,0xabcd:l\(r8\)
+ 1a6: cd ab
+ 1a8: 11 00 dd 5f cbitw \$0xd:s,0xfabcd:l\(r13\)
+ 1ac: cd ab
+ 1ae: 11 00 d8 4f cbitw \$0xd:s,0xabcd:l\(r8\)
+ 1b2: cd ab
+ 1b4: 11 00 d9 4f cbitw \$0xd:s,0xabcd:l\(r9\)
+ 1b8: cd ab
+ 1ba: 11 00 d9 44 cbitw \$0xd:s,0xabcd:l\(r9\)
+ 1be: cd ab
+ 1c0: 31 6e cbitw \$0x3:s,0x0:s\(r2,r1\)
+ 1c2: 51 69 01 00 cbitw \$0x5:s,0x1:m\(r2,r1\)
+ 1c6: 41 69 34 12 cbitw \$0x4:s,0x1234:m\(r2,r1\)
+ 1ca: 31 69 34 12 cbitw \$0x3:s,0x1234:m\(r2,r1\)
+ 1ce: 11 00 31 51 cbitw \$0x3:s,0x12345:l\(r2,r1\)
+ 1d2: 45 23
+ 1d4: 31 69 23 01 cbitw \$0x3:s,0x123:m\(r2,r1\)
+ 1d8: 11 00 31 51 cbitw \$0x3:s,0x12345:l\(r2,r1\)
+ 1dc: 45 23
+ 1de: d1 6e cbitw \$0xd:s,0x0:s\(r2,r1\)
+ 1e0: f1 69 01 00 cbitw \$0xf:s,0x1:m\(r2,r1\)
+ 1e4: e1 69 34 12 cbitw \$0xe:s,0x1234:m\(r2,r1\)
+ 1e8: d1 69 34 12 cbitw \$0xd:s,0x1234:m\(r2,r1\)
+ 1ec: 11 00 d1 51 cbitw \$0xd:s,0x12345:l\(r2,r1\)
+ 1f0: 45 23
+ 1f2: d1 69 23 01 cbitw \$0xd:s,0x123:m\(r2,r1\)
+ 1f6: 11 00 d1 51 cbitw \$0xd:s,0x12345:l\(r2,r1\)
+ 1fa: 45 23
diff --git a/gas/testsuite/gas/cr16/cbitw_test.s b/gas/testsuite/gas/cr16/cbitw_test.s
new file mode 100644
index 000000000000..61bda0874904
--- /dev/null
+++ b/gas/testsuite/gas/cr16/cbitw_test.s
@@ -0,0 +1,117 @@
+ .text
+ .global main
+main:
+ cbitw $4,0xbcd
+ cbitw $5,0xaabcd
+ cbitw $3,0xfaabcd
+ cbitw $10,0xbcd
+ cbitw $15,0xaabcd
+ cbitw $14,0xfaabcd
+
+ cbitw $5,[r12]0x14
+ cbitw $4,[r13]0xabfc
+ cbitw $3,[r12]0x1234
+ cbitw $3,[r13]0x1234
+ cbitw $3,[r12]0x34
+ cbitw $15,[r12]0x14
+ cbitw $14,[r13]0xabfc
+ cbitw $13,[r12]0x1234
+ cbitw $13,[r13]0x1234
+ cbitw $11,[r12]0x34
+
+ cbitw $3,[r12]0xa7a(r1,r0)
+ cbitw $3,[r12]0xa7a(r3,r2)
+ cbitw $3,[r12]0xa7a(r4,r3)
+ cbitw $3,[r12]0xa7a(r5,r4)
+ cbitw $3,[r12]0xa7a(r6,r5)
+ cbitw $3,[r12]0xa7a(r7,r6)
+ cbitw $3,[r12]0xa7a(r9,r8)
+ cbitw $3,[r12]0xa7a(r11,r10)
+ cbitw $3,[r13]0xa7a(r1,r0)
+ cbitw $3,[r13]0xa7a(r3,r2)
+ cbitw $3,[r13]0xa7a(r4,r3)
+ cbitw $3,[r13]0xa7a(r5,r4)
+ cbitw $3,[r13]0xa7a(r6,r5)
+ cbitw $3,[r13]0xa7a(r7,r6)
+ cbitw $3,[r13]0xa7a(r9,r8)
+ cbitw $3,[r13]0xa7a(r11,r10)
+ cbitw $5,[r13]0xb7a(r4,r3)
+ cbitw $1,[r12]0x17a(r6,r5)
+ cbitw $1,[r13]0x134(r6,r5)
+ cbitw $3,[r12]0xabcde(r4,r3)
+ cbitw $5,[r13]0xabcd(r4,r3)
+ cbitw $3,[r12]0xabcd(r6,r5)
+ cbitw $3,[r13]0xbcde(r6,r5)
+ cbitw $13,[r12]0xa7a(r1,r0)
+ cbitw $13,[r12]0xa7a(r3,r2)
+ cbitw $13,[r12]0xa7a(r4,r3)
+ cbitw $13,[r12]0xa7a(r5,r4)
+ cbitw $13,[r12]0xa7a(r6,r5)
+ cbitw $13,[r12]0xa7a(r7,r6)
+ cbitw $13,[r12]0xa7a(r9,r8)
+ cbitw $13,[r12]0xa7a(r11,r10)
+ cbitw $13,[r13]0xa7a(r1,r0)
+ cbitw $13,[r13]0xa7a(r3,r2)
+ cbitw $13,[r13]0xa7a(r4,r3)
+ cbitw $13,[r13]0xa7a(r5,r4)
+ cbitw $13,[r13]0xa7a(r6,r5)
+ cbitw $13,[r13]0xa7a(r7,r6)
+ cbitw $13,[r13]0xa7a(r9,r8)
+ cbitw $13,[r13]0xa7a(r11,r10)
+ cbitw $15,[r13]0xb7a(r4,r3)
+ cbitw $11,[r12]0x17a(r6,r5)
+ cbitw $11,[r13]0x134(r6,r5)
+ cbitw $13,[r12]0xabcde(r4,r3)
+ cbitw $15,[r13]0xabcd(r4,r3)
+ cbitw $13,[r12]0xabcd(r6,r5)
+ cbitw $13,[r13]0xbcde(r6,r5)
+
+ cbitw $5,0x0(r2)
+ cbitw $3,0x34(r12)
+ cbitw $3,0xab(r13)
+ cbitw $5,0xad(r1)
+ cbitw $5,0xcd(r2)
+ cbitw $5,0xfff(r0)
+ cbitw $3,0xbcd(r4)
+ cbitw $3,0xfff(r12)
+ cbitw $3,0xfff(r13)
+ cbitw $3,0xffff(r13)
+ cbitw $3,0x2343(r12)
+ cbitw $3,0x12345(r2)
+ cbitw $3,0x4abcd(r8)
+ cbitw $3,0xfabcd(r13)
+ cbitw $3,0xfabcd(r8)
+ cbitw $3,0xfabcd(r9)
+ cbitw $3,0x4abcd(r9)
+ cbitw $15,0x0(r2)
+ cbitw $13,0x34(r12)
+ cbitw $13,0xab(r13)
+ cbitw $15,0xad(r1)
+ cbitw $15,0xcd(r2)
+ cbitw $15,0xfff(r0)
+ cbitw $13,0xbcd(r4)
+ cbitw $13,0xfff(r12)
+ cbitw $13,0xfff(r13)
+ cbitw $13,0xffff(r13)
+ cbitw $13,0x2343(r12)
+ cbitw $13,0x12345(r2)
+ cbitw $13,0x4abcd(r8)
+ cbitw $13,0xfabcd(r13)
+ cbitw $13,0xfabcd(r8)
+ cbitw $13,0xfabcd(r9)
+ cbitw $13,0x4abcd(r9)
+
+ cbitw $3,0x0(r2,r1)
+ cbitw $5,0x1(r2,r1)
+ cbitw $4,0x1234(r2,r1)
+ cbitw $3,0x1234(r2,r1)
+ cbitw $3,0x12345(r2,r1)
+ cbitw $3,0x123(r2,r1)
+ cbitw $3,0x12345(r2,r1)
+ cbitw $13,0x0(r2,r1)
+ cbitw $15,0x1(r2,r1)
+ cbitw $14,0x1234(r2,r1)
+ cbitw $13,0x1234(r2,r1)
+ cbitw $13,0x12345(r2,r1)
+ cbitw $13,0x123(r2,r1)
+ cbitw $13,0x12345(r2,r1)
diff --git a/gas/testsuite/gas/cr16/cinv_test.d b/gas/testsuite/gas/cr16/cinv_test.d
new file mode 100644
index 000000000000..f1e2f253b5a3
--- /dev/null
+++ b/gas/testsuite/gas/cr16/cinv_test.d
@@ -0,0 +1,15 @@
+#as:
+#objdump: -dr
+#name: cinv_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 0a 00 cinv \[i\]
+ 2: 0b 00 cinv \[i,u\]
+ 4: 0c 00 cinv \[d\]
+ 6: 0d 00 cinv \[d,u\]
+ 8: 0e 00 cinv \[d,i\]
+ a: 0f 00 cinv \[d,i,u\]
diff --git a/gas/testsuite/gas/cr16/cinv_test.s b/gas/testsuite/gas/cr16/cinv_test.s
new file mode 100644
index 000000000000..eda4b97bad23
--- /dev/null
+++ b/gas/testsuite/gas/cr16/cinv_test.s
@@ -0,0 +1,12 @@
+ .text
+ .global main
+main:
+ ##############################
+ # cin [i/i,u/d/d,u/d,i/d,i,u]
+ ##############################
+ cinv [i]
+ cinv [i,u]
+ cinv [d]
+ cinv [d,u]
+ cinv [d,i]
+ cinv [d,i,u]
diff --git a/gas/testsuite/gas/cr16/cmp_test.d b/gas/testsuite/gas/cr16/cmp_test.d
new file mode 100644
index 000000000000..6c3e101740be
--- /dev/null
+++ b/gas/testsuite/gas/cr16/cmp_test.d
@@ -0,0 +1,51 @@
+#as:
+#objdump: -dr
+#name: cmp_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: f1 50 cmpb \$0xf:s,r1
+ 2: b2 50 ff 00 cmpb \$0xff:m,r2
+ 6: b1 50 ff 0f cmpb \$0xfff:m,r1
+ a: b1 50 14 00 cmpb \$0x14:m,r1
+ e: a2 50 cmpb \$0xa:s,r2
+ 10: b2 50 0b 00 cmpb \$0xb:m,r2
+ 14: 12 51 cmpb r1,r2
+ 16: 23 51 cmpb r2,r3
+ 18: 34 51 cmpb r3,r4
+ 1a: 56 51 cmpb r5,r6
+ 1c: 67 51 cmpb r6,r7
+ 1e: 78 51 cmpb r7,r8
+ 20: f1 52 cmpw \$0xf:s,r1
+ 22: b1 52 0b 00 cmpw \$0xb:m,r1
+ 26: b2 52 ff 00 cmpw \$0xff:m,r2
+ 2a: b1 52 ff 0f cmpw \$0xfff:m,r1
+ 2e: b1 52 14 00 cmpw \$0x14:m,r1
+ 32: a2 52 cmpw \$0xa:s,r2
+ 34: b2 52 0b 00 cmpw \$0xb:m,r2
+ 38: 12 53 cmpw r1,r2
+ 3a: 23 53 cmpw r2,r3
+ 3c: 34 53 cmpw r3,r4
+ 3e: 56 53 cmpw r5,r6
+ 40: 67 53 cmpw r6,r7
+ 42: 78 53 cmpw r7,r8
+ 44: f1 56 cmpd \$0xf:s,\(r2,r1\)
+ 46: b1 56 0b 00 cmpd \$0xb:m,\(r2,r1\)
+ 4a: b1 56 ff 00 cmpd \$0xff:m,\(r2,r1\)
+ 4e: b1 56 ff 0f cmpd \$0xfff:m,\(r2,r1\)
+ 52: 91 00 00 00 cmpd \$0xffff:l,\(r2,r1\)
+ 56: ff ff
+ 58: 91 00 0f 00 cmpd \$0xfffff:l,\(r2,r1\)
+ 5c: ff ff
+ 5e: 91 00 ff 0f cmpd \$0xfffffff:l,\(r2,r1\)
+ 62: ff ff
+ 64: 91 56 cmpd \$-1:s,\(r2,r1\)
+ 66: 31 57 cmpd \(r4,r3\),\(r2,r1\)
+ 68: 31 57 cmpd \(r4,r3\),\(r2,r1\)
+ 6a: af 56 cmpd \$0xa:s,\(sp\)
+ 6c: ef 56 cmpd \$0xe:s,\(sp\)
+ 6e: bf 56 0b 00 cmpd \$0xb:m,\(sp\)
+ 72: 8f 56 cmpd \$0x8:s,\(sp\)
diff --git a/gas/testsuite/gas/cr16/cmp_test.s b/gas/testsuite/gas/cr16/cmp_test.s
new file mode 100644
index 000000000000..2d0af3bce71d
--- /dev/null
+++ b/gas/testsuite/gas/cr16/cmp_test.s
@@ -0,0 +1,62 @@
+ .text
+ .global main
+main:
+ ###########
+ # CMPB imm4/imm16, reg
+ ###########
+ cmpb $0xf,r1
+ cmpb $0xff,r2
+ cmpb $0xfff,r1
+ #cmpb $0xffff,r2 // CHCEFK WITH CRASM 4.1
+ cmpb $20,r1
+ cmpb $10,r2
+ cmpb $11,r2
+ ###########
+ # CMPB reg, reg
+ ###########
+ cmpb r1,r2
+ cmpb r2,r3
+ cmpb r3,r4
+ cmpb r5,r6
+ cmpb r6,r7
+ cmpb r7,r8
+ ###########
+ # CMPW imm4/imm16, reg
+ ###########
+ cmpw $0xf,r1
+ cmpw $0xB,r1
+ cmpw $0xff,r2
+ cmpw $0xfff,r1
+ #cmpw $0xffff,r2 // CHECK WITH CRASM 4.1
+ cmpw $20,r1
+ cmpw $10,r2
+ cmpw $11,r2
+ ###########
+ # CMPW reg, reg
+ ###########
+ cmpw r1,r2
+ cmpw r2,r3
+ cmpw r3,r4
+ cmpw r5,r6
+ cmpw r6,r7
+ cmpw r7,r8
+ ###########
+ # CMPD imm4/imm16/imm32, regp
+ ###########
+ cmpd $0xf,(r2,r1)
+ cmpd $0xB,(r2,r1)
+ cmpd $0xff,(r2,r1)
+ cmpd $0xfff,(r2,r1)
+ cmpd $0xffff,(r2,r1)
+ cmpd $0xfffff,(r2,r1)
+ cmpd $0xfffffff,(r2,r1)
+ cmpd $0xffffffff,(r2,r1)
+ ###########
+ # CMPD regp, regp
+ ###########
+ cmpd (r4,r3),(r2,r1)
+ cmpd (r4,r3),(r2,r1)
+ cmpd $10,(sp)
+ cmpd $14,(sp)
+ cmpd $11,(sp)
+ cmpd $8,(sp)
diff --git a/gas/testsuite/gas/cr16/cr16.exp b/gas/testsuite/gas/cr16/cr16.exp
new file mode 100644
index 000000000000..6697c33d6aee
--- /dev/null
+++ b/gas/testsuite/gas/cr16/cr16.exp
@@ -0,0 +1,27 @@
+#
+# Driver for CR16 assembler testsuite
+#
+
+proc run_list_test { name opts } {
+ global srcdir subdir
+ set testname "cr16 $name"
+ set file $srcdir/$subdir/$name
+ gas_run ${name}.s $opts ">&dump.out"
+ if {[regexp_diff "dump.out" "${file}.l"] } {
+ fail $testname
+ verbose "output is [file_contents "dump.out"]" 2
+ return
+ }
+ pass $testname
+}
+
+if ![istarget cr16-*-*] {
+ 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/gas/testsuite/gas/cr16/excp_test.d b/gas/testsuite/gas/cr16/excp_test.d
new file mode 100644
index 000000000000..7c4053b8aa58
--- /dev/null
+++ b/gas/testsuite/gas/cr16/excp_test.d
@@ -0,0 +1,18 @@
+#as:
+#objdump: -dr
+#name: excp_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: c5 00 excp svc
+ 2: c6 00 excp dvz
+ 4: c7 00 excp flg
+ 6: c8 00 excp bpt
+ 8: c9 00 excp trc
+ a: ca 00 excp und
+ c: cc 00 excp iad
+ e: ce 00 excp dbg
+ 10: cf 00 excp ise
diff --git a/gas/testsuite/gas/cr16/excp_test.s b/gas/testsuite/gas/cr16/excp_test.s
new file mode 100644
index 000000000000..4984a749ed20
--- /dev/null
+++ b/gas/testsuite/gas/cr16/excp_test.s
@@ -0,0 +1,15 @@
+ .text
+ .global main
+main:
+ ##########################################
+ # excp svc/dvz/flg/bpt/trc/und/iad/dbg/ise
+ ##########################################
+ excp svc
+ excp dvz
+ excp flg
+ excp bpt
+ excp trc
+ excp und
+ excp iad
+ excp dbg
+ excp ise
diff --git a/gas/testsuite/gas/cr16/jal_test.d b/gas/testsuite/gas/cr16/jal_test.d
new file mode 100644
index 000000000000..51a4e7637c6c
--- /dev/null
+++ b/gas/testsuite/gas/cr16/jal_test.d
@@ -0,0 +1,14 @@
+#as:
+#objdump: -dr
+#name: jal_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: d1 00 jal \(r2,r1\)
+ 2: 14 00 15 80 jal \(r6,r5\),\(r2,r1\)
+ 6: 14 00 32 80 jal \(r3,r2\),\(r4,r3\)
+ a: 14 00 30 80 jal \(r1,r0\),\(r4,r3\)
+ e: 14 00 72 80 jal \(r3,r2\),\(r8,r7\)
diff --git a/gas/testsuite/gas/cr16/jal_test.s b/gas/testsuite/gas/cr16/jal_test.s
new file mode 100644
index 000000000000..2a4715b98f4e
--- /dev/null
+++ b/gas/testsuite/gas/cr16/jal_test.s
@@ -0,0 +1,11 @@
+ .text
+ .global main
+main:
+ ################
+ # JAL regp regp
+ ################
+ jal (r2,r1)
+ jal (r6,r5),(r2,r1)
+ jal (r3,r2),(r4,r3)
+ jal (r1,r0), (r4,r3)
+ jal (r3,r2), (r8,r7)
diff --git a/gas/testsuite/gas/cr16/jcc_test.d b/gas/testsuite/gas/cr16/jcc_test.d
new file mode 100644
index 000000000000..e192c9db0ac3
--- /dev/null
+++ b/gas/testsuite/gas/cr16/jcc_test.d
@@ -0,0 +1,24 @@
+#as:
+#objdump: -dr
+#name: jcc_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 00 0a jeq \(r1,r0\)
+ 2: 11 0a jne \(r2,r1\)
+ 4: 32 0a jcc \(r3,r2\)
+ 6: 33 0a jcc \(r4,r3\)
+ 8: 44 0a jhi \(r5,r4\)
+ a: c5 0a jlt \(r6,r5\)
+ c: 66 0a jgt \(r7,r6\)
+ e: 87 0a jfs \(r8,r7\)
+ 10: 98 0a jfc \(r9,r8\)
+ 12: a9 0a jlo \(r10,r9\)
+ 14: 4a 0a jhi \(r11,r10\)
+ 16: c0 0a jlt \(r1,r0\)
+ 18: d2 0a jge \(r3,r2\)
+ 1a: e5 0a jump \(r6,r5\)
+ 1c: f5 0a jusr \(r6,r5\)
diff --git a/gas/testsuite/gas/cr16/jcc_test.s b/gas/testsuite/gas/cr16/jcc_test.s
new file mode 100644
index 000000000000..c384e1a9daa2
--- /dev/null
+++ b/gas/testsuite/gas/cr16/jcc_test.s
@@ -0,0 +1,21 @@
+ .text
+ .global main
+main:
+ ##########
+ # JCond regp
+ ##########
+ jeq (r1,r0)
+ jne (r2,r1)
+ jcc (r3,r2)
+ jcc (r4,r3)
+ jhi (r5,r4)
+ jlt (r6,r5)
+ jgt (r7,r6)
+ jfs (r8,r7)
+ jfc (r9,r8)
+ jlo (r10,r9)
+ jhi (r11,r10)
+ jlt (r1,r0)
+ jge (r3,r2)
+ jump (r6,r5)
+ jusr (r6,r5)
diff --git a/gas/testsuite/gas/cr16/loadb_test.d b/gas/testsuite/gas/cr16/loadb_test.d
new file mode 100644
index 000000000000..0e22d5743b0f
--- /dev/null
+++ b/gas/testsuite/gas/cr16/loadb_test.d
@@ -0,0 +1,79 @@
+#as:
+#objdump: -dr
+#name: loadd_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 00 88 00 00 loadb 0x0 <main>:m,r0
+ 4: 10 88 ff 00 loadb 0xff <main\+0xff>:m,r1
+ 8: 30 88 ff 0f loadb 0xfff <main\+0xfff>:m,r3
+ c: 40 88 34 12 loadb 0x1234 <main\+0x1234>:m,r4
+ 10: 50 88 34 12 loadb 0x1234 <main\+0x1234>:m,r5
+ 14: 12 00 07 7a loadb 0x7a1234 <main\+0x7a1234>:l,r0
+ 18: 34 12
+ 1a: 12 00 1b 7a loadb 0xba1234 <main\+0xba1234>:l,r1
+ 1e: 34 12
+ 20: 2f 88 ff ff loadb 0xfffff <main\+0xfffff>:m,r2
+ 24: 00 8a 00 00 loadb \[r12\]0x0:m,r0
+ 28: 00 8b 00 00 loadb \[r12\]0x0:m,r0
+ 2c: 10 8a ff 00 loadb \[r12\]0xff:m,r1
+ 30: 10 8b ff 00 loadb \[r12\]0xff:m,r1
+ 34: 30 8a ff 0f loadb \[r12\]0xfff:m,r3
+ 38: 30 8b ff 0f loadb \[r12\]0xfff:m,r3
+ 3c: 40 8a 34 12 loadb \[r13\]0x1234:m,r4
+ 40: 40 8b 34 12 loadb \[r13\]0x1234:m,r4
+ 44: 50 8a 34 12 loadb \[r13\]0x1234:m,r5
+ 48: 50 8b 34 12 loadb \[r13\]0x1234:m,r5
+ 4c: 20 8a 67 45 loadb \[r12\]0x4567:m,r2
+ 50: 2a 8b 34 12 loadb \[r12\]0xa1234:m,r2
+ 54: 10 b4 loadb 0x4:s\(r1,r0\),r1
+ 56: 32 b4 loadb 0x4:s\(r3,r2\),r3
+ 58: 40 bf 34 12 loadb 0x1234:m\(r1,r0\),r4
+ 5c: 52 bf 34 12 loadb 0x1234:m\(r3,r2\),r5
+ 60: 12 00 60 5a loadb 0xa1234:l\(r1,r0\),r6
+ 64: 34 12
+ 66: 18 00 10 5f loadb 0xffffc:l\(r1,r0\),r1
+ 6a: fc ff
+ 6c: 18 00 32 5f loadb 0xffffc:l\(r3,r2\),r3
+ 70: fc ff
+ 72: 18 00 40 5f loadb 0xfedcc:l\(r1,r0\),r4
+ 76: cc ed
+ 78: 18 00 52 5f loadb 0xfedcc:l\(r3,r2\),r5
+ 7c: cc ed
+ 7e: 18 00 60 55 loadb 0x5edcc:l\(r1,r0\),r6
+ 82: cc ed
+ 84: 00 b0 loadb 0x0:s\(r1,r0\),r0
+ 86: 10 b0 loadb 0x0:s\(r1,r0\),r1
+ 88: 00 bf 0f 00 loadb 0xf:m\(r1,r0\),r0
+ 8c: 10 bf 0f 00 loadb 0xf:m\(r1,r0\),r1
+ 90: 20 bf 34 12 loadb 0x1234:m\(r1,r0\),r2
+ 94: 32 bf cd ab loadb 0xabcd:m\(r3,r2\),r3
+ 98: 43 bf ff af loadb 0xafff:m\(r4,r3\),r4
+ 9c: 12 00 55 5a loadb 0xa1234:l\(r6,r5\),r5
+ a0: 34 12
+ a2: 18 00 00 5f loadb 0xffff1:l\(r1,r0\),r0
+ a6: f1 ff
+ a8: 18 00 10 5f loadb 0xffff1:l\(r1,r0\),r1
+ ac: f1 ff
+ ae: 18 00 20 5f loadb 0xfedcc:l\(r1,r0\),r2
+ b2: cc ed
+ b4: 18 00 32 5f loadb 0xf5433:l\(r3,r2\),r3
+ b8: 33 54
+ ba: 18 00 43 5f loadb 0xf5001:l\(r4,r3\),r4
+ be: 01 50
+ c0: 18 00 55 55 loadb 0x5edcc:l\(r6,r5\),r5
+ c4: cc ed
+ c6: 00 be loadb \[r12\]0x0:s\(r1,r0\),r0
+ c8: 18 be loadb \[r13\]0x0:s\(r1,r0\),r1
+ ca: 70 86 04 12 loadb \[r12\]0x234:m\(r1,r0\),r7
+ ce: 12 00 38 61 loadb \[r13\]0x1abcd:l\(r1,r0\),r3
+ d2: cd ab
+ d4: 12 00 40 6a loadb \[r12\]0xa1234:l\(r1,r0\),r4
+ d8: 34 12
+ da: 12 00 58 6b loadb \[r13\]0xb1234:l\(r1,r0\),r5
+ de: 34 12
+ e0: 12 00 68 6f loadb \[r13\]0xfffff:l\(r1,r0\),r6
+ e4: ff ff
diff --git a/gas/testsuite/gas/cr16/loadb_test.s b/gas/testsuite/gas/cr16/loadb_test.s
new file mode 100644
index 000000000000..258e3b380048
--- /dev/null
+++ b/gas/testsuite/gas/cr16/loadb_test.s
@@ -0,0 +1,72 @@
+ .text
+ .global main
+main:
+ ######################
+ # loadb abs20/24 reg
+ ######################
+ loadb 0x0,r0
+ loadb 0xff,r1
+ loadb 0xfff,r3
+ loadb 0x1234,r4
+ loadb 0x1234,r5
+ loadb 0x7A1234,r0
+ loadb 0xBA1234,r1
+ loadb 0xffffff,r2
+ ######################
+ # loadb abs20 rel reg
+ ######################
+ loadb [r12]0x0,r0
+ loadb [r13]0x0,r0
+ loadb [r12]0xff,r1
+ loadb [r13]0xff,r1
+ loadb [r12]0xfff,r3
+ loadb [r13]0xfff,r3
+ loadb [r12]0x1234,r4
+ loadb [r13]0x1234,r4
+ loadb [r12]0x1234,r5
+ loadb [r13]0x1234,r5
+ loadb [r12]0x4567,r2
+ loadb [r13]0xA1234,r2
+ ###################################
+ # loadb rbase(disp20/-disp20) reg
+ ###################################
+ loadb 0x4(r1,r0),r1
+ loadb 0x4(r3,r2),r3
+ loadb 0x1234(r1,r0),r4
+ loadb 0x1234(r3,r2),r5
+ loadb 0xA1234(r1,r0),r6
+ loadb -0x4(r1,r0),r1
+ loadb -0x4(r3,r2),r3
+ loadb -0x1234(r1,r0),r4
+ loadb -0x1234(r3,r2),r5
+ loadb -0xA1234(r1,r0),r6
+ #################################################
+ # loadb rpbase(disp4/disp16/disp20/-disp20) reg
+ #################################################
+ loadb 0x0(r1,r0),r0
+ loadb 0x0(r1,r0),r1
+ loadb 0xf(r1,r0),r0
+ loadb 0xf(r1,r0),r1
+ loadb 0x1234(r1,r0),r2
+ loadb 0xabcd(r3,r2),r3
+ loadb 0xAfff(r4,r3),r4
+ loadb 0xA1234(r6,r5),r5
+ loadb -0xf(r1,r0),r0
+ loadb -0xf(r1,r0),r1
+ loadb -0x1234(r1,r0),r2
+ loadb -0xabcd(r3,r2),r3
+ loadb -0xAfff(r4,r3),r4
+ loadb -0xA1234(r6,r5),r5
+ ####################################
+ # loadb rbase(disp0/disp14) rel reg
+ ####################################
+ loadb [r12]0x0(r1,r0),r0
+ loadb [r13]0x0(r1,r0),r1
+ loadb [r12]0x1234(r1,r0),r2
+ loadb [r13]0x1abcd(r1,r0),r3
+ #################################
+ # loadb rpbase(disp20) rel reg
+ #################################
+ loadb [r12]0xA1234(r1,r0),r4
+ loadb [r13]0xB1234(r1,r0),r5
+ loadb [r13]0xfffff(r1,r0),r6
diff --git a/gas/testsuite/gas/cr16/loadd_test.d b/gas/testsuite/gas/cr16/loadd_test.d
new file mode 100644
index 000000000000..77ea45fc8b6d
--- /dev/null
+++ b/gas/testsuite/gas/cr16/loadd_test.d
@@ -0,0 +1,79 @@
+#as:
+#objdump: -dr
+#name: loadd_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 00 87 00 00 loadd 0x0 <main>:m,\(r1,r0\)
+ 4: 00 87 ff 00 loadd 0xff <main\+0xff>:m,\(r1,r0\)
+ 8: 20 87 ff 0f loadd 0xfff <main\+0xfff>:m,\(r3,r2\)
+ c: 30 87 34 12 loadd 0x1234 <main\+0x1234>:m,\(r4,r3\)
+ 10: 40 87 34 12 loadd 0x1234 <main\+0x1234>:m,\(r5,r4\)
+ 14: 12 00 07 ba loadd 0x7a1234 <main\+0x7a1234>:l,\(r1,r0\)
+ 18: 34 12
+ 1a: 12 00 0b ba loadd 0xba1234 <main\+0xba1234>:l,\(r1,r0\)
+ 1e: 34 12
+ 20: 1f 87 ff ff loadd 0xfffff <main\+0xfffff>:m,\(r2,r1\)
+ 24: 00 8c 00 00 loadd \[r12\]0x0:m,\(r1,r0\)
+ 28: 00 8d 00 00 loadd \[r12\]0x0:m,\(r1,r0\)
+ 2c: 00 8c ff 00 loadd \[r12\]0xff:m,\(r1,r0\)
+ 30: 00 8d ff 00 loadd \[r12\]0xff:m,\(r1,r0\)
+ 34: 20 8c ff 0f loadd \[r12\]0xfff:m,\(r3,r2\)
+ 38: 20 8d ff 0f loadd \[r12\]0xfff:m,\(r3,r2\)
+ 3c: 30 8c 34 12 loadd \[r12\]0x1234:m,\(r4,r3\)
+ 40: 30 8d 34 12 loadd \[r12\]0x1234:m,\(r4,r3\)
+ 44: 40 8c 34 12 loadd \[r13\]0x1234:m,\(r5,r4\)
+ 48: 40 8d 34 12 loadd \[r13\]0x1234:m,\(r5,r4\)
+ 4c: 10 8c 67 45 loadd \[r12\]0x4567:m,\(r2,r1\)
+ 50: 1a 8d 34 12 loadd \[r12\]0xa1234:m,\(r2,r1\)
+ 54: 10 a2 loadd 0x4:s\(r1,r0\),\(r2,r1\)
+ 56: 22 a2 loadd 0x4:s\(r3,r2\),\(r3,r2\)
+ 58: 30 af 34 12 loadd 0x1234:m\(r1,r0\),\(r4,r3\)
+ 5c: 42 af 34 12 loadd 0x1234:m\(r3,r2\),\(r5,r4\)
+ 60: 12 00 50 9a loadd 0xa1234:l\(r1,r0\),\(r6,r5\)
+ 64: 34 12
+ 66: 18 00 10 9f loadd 0xffffc:l\(r1,r0\),\(r2,r1\)
+ 6a: fc ff
+ 6c: 18 00 22 9f loadd 0xffffc:l\(r3,r2\),\(r3,r2\)
+ 70: fc ff
+ 72: 18 00 30 9f loadd 0xfedcc:l\(r1,r0\),\(r4,r3\)
+ 76: cc ed
+ 78: 18 00 42 9f loadd 0xfedcc:l\(r3,r2\),\(r5,r4\)
+ 7c: cc ed
+ 7e: 18 00 50 95 loadd 0x5edcc:l\(r1,r0\),\(r6,r5\)
+ 82: cc ed
+ 84: 00 a0 loadd 0x0:s\(r1,r0\),\(r1,r0\)
+ 86: 00 a0 loadd 0x0:s\(r1,r0\),\(r1,r0\)
+ 88: 00 af 0f 00 loadd 0xf:m\(r1,r0\),\(r1,r0\)
+ 8c: 00 af 0f 00 loadd 0xf:m\(r1,r0\),\(r1,r0\)
+ 90: 10 af 34 12 loadd 0x1234:m\(r1,r0\),\(r2,r1\)
+ 94: 22 af cd ab loadd 0xabcd:m\(r3,r2\),\(r3,r2\)
+ 98: 33 af ff af loadd 0xafff:m\(r4,r3\),\(r4,r3\)
+ 9c: 12 00 65 9a loadd 0xa1234:l\(r6,r5\),\(r7,r6\)
+ a0: 34 12
+ a2: 18 00 00 9f loadd 0xffff1:l\(r1,r0\),\(r1,r0\)
+ a6: f1 ff
+ a8: 18 00 00 9f loadd 0xffff1:l\(r1,r0\),\(r1,r0\)
+ ac: f1 ff
+ ae: 18 00 10 9f loadd 0xfedcc:l\(r1,r0\),\(r2,r1\)
+ b2: cc ed
+ b4: 18 00 22 9f loadd 0xf5433:l\(r3,r2\),\(r3,r2\)
+ b8: 33 54
+ ba: 18 00 43 9f loadd 0xf5001:l\(r4,r3\),\(r5,r4\)
+ be: 01 50
+ c0: 18 00 45 95 loadd 0x5edcc:l\(r6,r5\),\(r5,r4\)
+ c4: cc ed
+ c6: 00 ae loadd \[r12\]0x0:s\(r1,r0\),\(r1,r0\)
+ c8: 08 ae loadd \[r13\]0x0:s\(r1,r0\),\(r1,r0\)
+ ca: b0 86 04 12 loadd \[r12\]0x234:m\(r1,r0\),\(r12,r11\)
+ ce: 12 00 28 a1 loadd \[r13\]0x1abcd:l\(r1,r0\),\(r3,r2\)
+ d2: cd ab
+ d4: 12 00 20 aa loadd \[r12\]0xa1234:l\(r1,r0\),\(r3,r2\)
+ d8: 34 12
+ da: 12 00 38 ab loadd \[r13\]0xb1234:l\(r1,r0\),\(r4,r3\)
+ de: 34 12
+ e0: 12 00 48 af loadd \[r13\]0xfffff:l\(r1,r0\),\(r5,r4\)
+ e4: ff ff
diff --git a/gas/testsuite/gas/cr16/loadd_test.s b/gas/testsuite/gas/cr16/loadd_test.s
new file mode 100644
index 000000000000..677752d7522d
--- /dev/null
+++ b/gas/testsuite/gas/cr16/loadd_test.s
@@ -0,0 +1,72 @@
+ .text
+ .global main
+main:
+ ######################
+ # loadd abs20/24 regp
+ ######################
+ loadd 0x0,(r1,r0)
+ loadd 0xff,(r1,r0)
+ loadd 0xfff,(r3,r2)
+ loadd 0x1234,(r4,r3)
+ loadd 0x1234,(r5,r4)
+ loadd 0x7A1234,(r1,r0)
+ loadd 0xBA1234,(r1,r0)
+ loadd 0xffffff,(r2,r1)
+ ######################
+ # loadd abs20 rel regp
+ ######################
+ loadd [r12]0x0,(r1,r0)
+ loadd [r13]0x0,(r1,r0)
+ loadd [r12]0xff,(r1,r0)
+ loadd [r13]0xff,(r1,r0)
+ loadd [r12]0xfff,(r3,r2)
+ loadd [r13]0xfff,(r3,r2)
+ loadd [r12]0x1234,(r4,r3)
+ loadd [r13]0x1234,(r4,r3)
+ loadd [r12]0x1234,(r5,r4)
+ loadd [r13]0x1234,(r5,r4)
+ loadd [r12]0x4567,(r2,r1)
+ loadd [r13]0xA1234,(r2,r1)
+ ###################################
+ # loadd rbase(disp20/-disp20) regp
+ ###################################
+ loadd 0x4(r1,r0),(r2,r1)
+ loadd 0x4(r3,r2),(r3,r2)
+ loadd 0x1234(r1,r0),(r4,r3)
+ loadd 0x1234(r3,r2),(r5,r4)
+ loadd 0xA1234(r1,r0),(r6,r5)
+ loadd -0x4(r1,r0),(r2,r1)
+ loadd -0x4(r3,r2),(r3,r2)
+ loadd -0x1234(r1,r0),(r4,r3)
+ loadd -0x1234(r3,r2),(r5,r4)
+ loadd -0xA1234(r1,r0),(r6,r5)
+ #################################################
+ # loadd rpbase(disp4/disp16/disp20/-disp20) reg
+ #################################################
+ loadd 0x0(r1,r0),(r1,r0)
+ loadd 0x0(r1,r0),(r1,r0)
+ loadd 0xf(r1,r0),(r1,r0)
+ loadd 0xf(r1,r0),(r1,r0)
+ loadd 0x1234(r1,r0),(r2,r1)
+ loadd 0xabcd(r3,r2),(r3,r2)
+ loadd 0xAfff(r4,r3),(r4,r3)
+ loadd 0xA1234(r6,r5),(r7,r6)
+ loadd -0xf(r1,r0),(r1,r0)
+ loadd -0xf(r1,r0),(r1,r0)
+ loadd -0x1234(r1,r0),(r2,r1)
+ loadd -0xabcd(r3,r2),(r3,r2)
+ loadd -0xAfff(r4,r3),(r5,r4)
+ loadd -0xA1234(r6,r5),(r5,r4)
+ ####################################
+ # loadd rbase(disp0/disp14) rel reg
+ ####################################
+ loadd [r12]0x0(r1,r0),(r1,r0)
+ loadd [r13]0x0(r1,r0),(r1,r0)
+ loadd [r12]0x1234(r1,r0),(r2,r1)
+ loadd [r13]0x1abcd(r1,r0),(r3,r2)
+ #################################
+ # loadd rpbase(disp20) rel reg
+ #################################
+ loadd [r12]0xA1234(r1,r0),(r3,r2)
+ loadd [r13]0xB1234(r1,r0),(r4,r3)
+ loadd [r13]0xfffff(r1,r0),(r5,r4)
diff --git a/gas/testsuite/gas/cr16/loadm_test.d b/gas/testsuite/gas/cr16/loadm_test.d
new file mode 100644
index 000000000000..7d7ff3e99994
--- /dev/null
+++ b/gas/testsuite/gas/cr16/loadm_test.d
@@ -0,0 +1,25 @@
+#as:
+#objdump: -dr
+#name: loadm_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: a0 00 loadm \$0x1,r0
+ 2: a1 00 loadm \$0x2,r0
+ 4: a2 00 loadm \$0x3,r0
+ 6: a3 00 loadm \$0x4,r0
+ 8: a4 00 loadm \$0x5,r0
+ a: a5 00 loadm \$0x6,r0
+ c: a6 00 loadm \$0x7,r0
+ e: a7 00 loadm \$0x8,r0
+ 10: a8 00 loadmp \$0x1,r0
+ 12: a9 00 loadmp \$0x2,r0
+ 14: aa 00 loadmp \$0x3,r0
+ 16: ab 00 loadmp \$0x4,r0
+ 18: ac 00 loadmp \$0x5,r0
+ 1a: ad 00 loadmp \$0x6,r0
+ 1c: ae 00 loadmp \$0x7,r0
+ 1e: af 00 loadmp \$0x8,r0
diff --git a/gas/testsuite/gas/cr16/loadm_test.s b/gas/testsuite/gas/cr16/loadm_test.s
new file mode 100644
index 000000000000..3549e2049c2c
--- /dev/null
+++ b/gas/testsuite/gas/cr16/loadm_test.s
@@ -0,0 +1,25 @@
+ .text
+ .global main
+main:
+ ##############
+ # loadm cnt
+ ##############
+ loadm $1
+ loadm $2
+ loadm $3
+ loadm $4
+ loadm $5
+ loadm $6
+ loadm $7
+ loadm $8
+ ##############
+ # loadmp cnt
+ ##############
+ loadmp $1
+ loadmp $2
+ loadmp $3
+ loadmp $4
+ loadmp $5
+ loadmp $6
+ loadmp $7
+ loadmp $8
diff --git a/gas/testsuite/gas/cr16/loadw_test.d b/gas/testsuite/gas/cr16/loadw_test.d
new file mode 100644
index 000000000000..cc4f311ae991
--- /dev/null
+++ b/gas/testsuite/gas/cr16/loadw_test.d
@@ -0,0 +1,79 @@
+#as:
+#objdump: -dr
+#name: loadw_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 00 89 00 00 loadw 0x0 <main>:m,r0
+ 4: 10 89 ff 00 loadw 0xff <main\+0xff>:m,r1
+ 8: 30 89 ff 0f loadw 0xfff <main\+0xfff>:m,r3
+ c: 40 89 34 12 loadw 0x1234 <main\+0x1234>:m,r4
+ 10: 50 89 34 12 loadw 0x1234 <main\+0x1234>:m,r5
+ 14: 12 00 07 fa loadw 0x7a1234 <main\+0x7a1234>:l,r0
+ 18: 34 12
+ 1a: 12 00 1b fa loadw 0xba1234 <main\+0xba1234>:l,r1
+ 1e: 34 12
+ 20: 2f 89 ff ff loadw 0xfffff <main\+0xfffff>:m,r2
+ 24: 00 8e 00 00 loadw \[r12\]0x0:m,r0
+ 28: 00 8f 00 00 loadw \[r12\]0x0:m,r0
+ 2c: 10 8e ff 00 loadw \[r12\]0xff:m,r1
+ 30: 10 8f ff 00 loadw \[r12\]0xff:m,r1
+ 34: 30 8e ff 0f loadw \[r12\]0xfff:m,r3
+ 38: 30 8f ff 0f loadw \[r12\]0xfff:m,r3
+ 3c: 40 8e 34 12 loadw \[r13\]0x1234:m,r4
+ 40: 40 8f 34 12 loadw \[r13\]0x1234:m,r4
+ 44: 50 8e 34 12 loadw \[r13\]0x1234:m,r5
+ 48: 50 8f 34 12 loadw \[r13\]0x1234:m,r5
+ 4c: 20 8e 67 45 loadw \[r12\]0x4567:m,r2
+ 50: 2a 8f 34 12 loadw \[r12\]0xa1234:m,r2
+ 54: 10 92 loadw 0x4:s\(r1,r0\),r1
+ 56: 32 92 loadw 0x4:s\(r3,r2\),r3
+ 58: 40 9f 34 12 loadw 0x1234:m\(r1,r0\),r4
+ 5c: 52 9f 34 12 loadw 0x1234:m\(r3,r2\),r5
+ 60: 12 00 60 da loadw 0xa1234:l\(r1,r0\),r6
+ 64: 34 12
+ 66: 18 00 10 df loadw 0xffffc:l\(r1,r0\),r1
+ 6a: fc ff
+ 6c: 18 00 32 df loadw 0xffffc:l\(r3,r2\),r3
+ 70: fc ff
+ 72: 18 00 40 df loadw 0xfedcc:l\(r1,r0\),r4
+ 76: cc ed
+ 78: 18 00 52 df loadw 0xfedcc:l\(r3,r2\),r5
+ 7c: cc ed
+ 7e: 18 00 60 d5 loadw 0x5edcc:l\(r1,r0\),r6
+ 82: cc ed
+ 84: 00 90 loadw 0x0:s\(r1,r0\),r0
+ 86: 10 90 loadw 0x0:s\(r1,r0\),r1
+ 88: 00 9f 0f 00 loadw 0xf:m\(r1,r0\),r0
+ 8c: 10 9f 0f 00 loadw 0xf:m\(r1,r0\),r1
+ 90: 20 9f 34 12 loadw 0x1234:m\(r1,r0\),r2
+ 94: 32 9f cd ab loadw 0xabcd:m\(r3,r2\),r3
+ 98: 43 9f ff af loadw 0xafff:m\(r4,r3\),r4
+ 9c: 12 00 55 da loadw 0xa1234:l\(r6,r5\),r5
+ a0: 34 12
+ a2: 18 00 00 df loadw 0xffff1:l\(r1,r0\),r0
+ a6: f1 ff
+ a8: 18 00 10 df loadw 0xffff1:l\(r1,r0\),r1
+ ac: f1 ff
+ ae: 18 00 20 df loadw 0xfedcc:l\(r1,r0\),r2
+ b2: cc ed
+ b4: 18 00 32 df loadw 0xf5433:l\(r3,r2\),r3
+ b8: 33 54
+ ba: 18 00 43 df loadw 0xf5001:l\(r4,r3\),r4
+ be: 01 50
+ c0: 18 00 55 d5 loadw 0x5edcc:l\(r6,r5\),r5
+ c4: cc ed
+ c6: 00 9e loadw \[r12\]0x0:s\(r1,r0\),r0
+ c8: 18 9e loadw \[r13\]0x0:s\(r1,r0\),r1
+ ca: f0 86 04 12 loadw \[r12\]0x234:m\(r1,r0\),r15
+ ce: 12 00 38 e1 loadw \[r13\]0x1abcd:l\(r1,r0\),r3
+ d2: cd ab
+ d4: 12 00 40 ea loadw \[r12\]0xa1234:l\(r1,r0\),r4
+ d8: 34 12
+ da: 12 00 58 eb loadw \[r13\]0xb1234:l\(r1,r0\),r5
+ de: 34 12
+ e0: 12 00 68 ef loadw \[r13\]0xfffff:l\(r1,r0\),r6
+ e4: ff ff
diff --git a/gas/testsuite/gas/cr16/loadw_test.s b/gas/testsuite/gas/cr16/loadw_test.s
new file mode 100644
index 000000000000..bd9a2bb0ae90
--- /dev/null
+++ b/gas/testsuite/gas/cr16/loadw_test.s
@@ -0,0 +1,72 @@
+ .text
+ .global main
+main:
+ ######################
+ # loadw abs20/24 reg
+ ######################
+ loadw 0x0,r0
+ loadw 0xff,r1
+ loadw 0xfff,r3
+ loadw 0x1234,r4
+ loadw 0x1234,r5
+ loadw 0x7A1234,r0
+ loadw 0xBA1234,r1
+ loadw 0xffffff,r2
+ ######################
+ # loadw abs20 rel reg
+ ######################
+ loadw [r12]0x0,r0
+ loadw [r13]0x0,r0
+ loadw [r12]0xff,r1
+ loadw [r13]0xff,r1
+ loadw [r12]0xfff,r3
+ loadw [r13]0xfff,r3
+ loadw [r12]0x1234,r4
+ loadw [r13]0x1234,r4
+ loadw [r12]0x1234,r5
+ loadw [r13]0x1234,r5
+ loadw [r12]0x4567,r2
+ loadw [r13]0xA1234,r2
+ ###################################
+ # loadw rbase(disp20/-disp20) reg
+ ###################################
+ loadw 0x4(r1,r0),r1
+ loadw 0x4(r3,r2),r3
+ loadw 0x1234(r1,r0),r4
+ loadw 0x1234(r3,r2),r5
+ loadw 0xA1234(r1,r0),r6
+ loadw -0x4(r1,r0),r1
+ loadw -0x4(r3,r2),r3
+ loadw -0x1234(r1,r0),r4
+ loadw -0x1234(r3,r2),r5
+ loadw -0xA1234(r1,r0),r6
+ #################################################
+ # loadw rpbase(disp4/disp16/disp20/-disp20) reg
+ #################################################
+ loadw 0x0(r1,r0),r0
+ loadw 0x0(r1,r0),r1
+ loadw 0xf(r1,r0),r0
+ loadw 0xf(r1,r0),r1
+ loadw 0x1234(r1,r0),r2
+ loadw 0xabcd(r3,r2),r3
+ loadw 0xAfff(r4,r3),r4
+ loadw 0xA1234(r6,r5),r5
+ loadw -0xf(r1,r0),r0
+ loadw -0xf(r1,r0),r1
+ loadw -0x1234(r1,r0),r2
+ loadw -0xabcd(r3,r2),r3
+ loadw -0xAfff(r4,r3),r4
+ loadw -0xA1234(r6,r5),r5
+ ####################################
+ # loadw rbase(disp0/disp14) rel reg
+ ####################################
+ loadw [r12]0x0(r1,r0),r0
+ loadw [r13]0x0(r1,r0),r1
+ loadw [r12]0x1234(r1,r0),r2
+ loadw [r13]0x1abcd(r1,r0),r3
+ #################################
+ # loadw rpbase(disp20) rel reg
+ #################################
+ loadw [r12]0xA1234(r1,r0),r4
+ loadw [r13]0xB1234(r1,r0),r5
+ loadw [r13]0xfffff(r1,r0),r6
diff --git a/gas/testsuite/gas/cr16/lpsp_test.d b/gas/testsuite/gas/cr16/lpsp_test.d
new file mode 100644
index 000000000000..66ca8e25e39b
--- /dev/null
+++ b/gas/testsuite/gas/cr16/lpsp_test.d
@@ -0,0 +1,57 @@
+#as:
+#objdump: -dr
+#name: lpsp_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 14 00 91 00 lpr r1,psr
+ 4: 14 00 82 00 lpr r2,cfg
+ 8: 14 00 a2 00 lpr r2,intbasel
+ c: 14 00 b3 00 lpr r3,intbaseh
+ 10: 14 00 c4 00 lpr r4,ispl
+ 14: 14 00 d5 00 lpr r5,isph
+ 18: 14 00 e6 00 lpr r6,uspl
+ 1c: 14 00 f7 00 lpr r7,usph
+ 20: 14 00 18 00 lpr r8,dsr
+ 24: 14 00 29 00 lpr r9,dcrl
+ 28: 14 00 3a 00 lpr r10,dcrh
+ 2c: 14 00 4b 00 lpr r11,car0l
+ 30: 14 00 50 00 lpr r0,car0h
+ 34: 14 00 61 00 lpr r1,car1l
+ 38: 14 00 73 00 lpr r3,car1h
+ 3c: 14 00 90 10 lprd \(r1,r0\),psr
+ 40: 14 00 81 10 lprd \(r2,r1\),cfg
+ 44: 14 00 a2 10 lprd \(r3,r2\),intbase
+ 48: 14 00 c3 10 lprd \(r4,r3\),isp
+ 4c: 14 00 e4 10 lprd \(r5,r4\),usp
+ 50: 14 00 15 10 lprd \(r6,r5\),dsr
+ 54: 14 00 26 10 lprd \(r7,r6\),dcr
+ 58: 14 00 47 10 lprd \(r8,r7\),car0
+ 5c: 14 00 68 10 lprd \(r9,r8\),car1
+ 60: 14 00 90 20 spr psr,r0
+ 64: 14 00 81 20 spr cfg,r1
+ 68: 14 00 a2 20 spr intbasel,r2
+ 6c: 14 00 b3 20 spr intbaseh,r3
+ 70: 14 00 c4 20 spr ispl,r4
+ 74: 14 00 d5 20 spr isph,r5
+ 78: 14 00 e6 20 spr uspl,r6
+ 7c: 14 00 f7 20 spr usph,r7
+ 80: 14 00 18 20 spr dsr,r8
+ 84: 14 00 29 20 spr dcrl,r9
+ 88: 14 00 3a 20 spr dcrh,r10
+ 8c: 14 00 4b 20 spr car0l,r11
+ 90: 14 00 50 20 spr car0h,r0
+ 94: 14 00 61 20 spr car1l,r1
+ 98: 14 00 72 20 spr car1h,r2
+ 9c: 14 00 90 30 sprd psr,\(r1,r0\)
+ a0: 14 00 81 30 sprd cfg,\(r2,r1\)
+ a4: 14 00 a2 30 sprd intbase,\(r3,r2\)
+ a8: 14 00 c3 30 sprd isp,\(r4,r3\)
+ ac: 14 00 e4 30 sprd usp,\(r5,r4\)
+ b0: 14 00 15 30 sprd dsr,\(r6,r5\)
+ b4: 14 00 26 30 sprd dcr,\(r7,r6\)
+ b8: 14 00 47 30 sprd car0,\(r8,r7\)
+ bc: 14 00 68 30 sprd car1,\(r9,r8\)
diff --git a/gas/testsuite/gas/cr16/lpsp_test.s b/gas/testsuite/gas/cr16/lpsp_test.s
new file mode 100644
index 000000000000..8e9d45961bca
--- /dev/null
+++ b/gas/testsuite/gas/cr16/lpsp_test.s
@@ -0,0 +1,63 @@
+ .text
+ .global main
+main:
+ ################
+ # lpr reg, preg
+ ################
+ lpr r1,psr
+ lpr r2,cfg
+ lpr r2,intbasel
+ lpr r3,intbaseh
+ lpr r4,ispl
+ lpr r5,isph
+ lpr r6,uspl
+ lpr r7,usph
+ lpr r8,dsr
+ lpr r9,dcrl
+ lpr r10,dcrh
+ lpr r11,car0l
+ lpr r0,car0h
+ lpr r1,car1l
+ lpr r3,car1h
+ #################
+ # lprd regp, preg
+ #################
+ lprd (r1,r0),psr
+ lprd (r2,r1),cfg
+ lprd (r3,r2),intbase
+ lprd (r4,r3),isp
+ lprd (r5,r4),usp
+ lprd (r6,r5),dsr
+ lprd (r7,r6),dcr
+ lprd (r8,r7),car0
+ lprd (r9,r8),car1
+ #################
+ # spr preg, reg
+ #################
+ spr psr,r0
+ spr cfg,r1
+ spr intbasel,r2
+ spr intbaseh,r3
+ spr ispl,r4
+ spr isph,r5
+ spr uspl,r6
+ spr usph,r7
+ spr dsr,r8
+ spr dcrl,r9
+ spr dcrh,r10
+ spr car0l,r11
+ spr car0h,r0
+ spr car1l,r1
+ spr car1h,r2
+ #################
+ # sprd preg, regp
+ #################
+ sprd psr,(r1,r0)
+ sprd cfg,(r2,r1)
+ sprd intbase,(r3,r2)
+ sprd isp,(r4,r3)
+ sprd usp,(r5,r4)
+ sprd dsr,(r6,r5)
+ sprd dcr,(r7,r6)
+ sprd car0,(r8,r7)
+ sprd car1,(r9,r8)
diff --git a/gas/testsuite/gas/cr16/lsh_test.d b/gas/testsuite/gas/cr16/lsh_test.d
new file mode 100644
index 000000000000..aba1cda98560
--- /dev/null
+++ b/gas/testsuite/gas/cr16/lsh_test.d
@@ -0,0 +1,47 @@
+#as:
+#objdump: -dr
+#name: lsh_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 71 40 ashub \$7:s,r1
+ 2: 91 09 lshb \$-7:s,r1
+ 4: 41 40 ashub \$4:s,r1
+ 6: c1 09 lshb \$-4:s,r1
+ 8: 81 09 lshb \$-8:s,r1
+ a: 31 40 ashub \$3:s,r1
+ c: d1 09 lshb \$-3:s,r1
+ e: 21 44 lshb r2,r1
+ 10: 34 44 lshb r3,r4
+ 12: 56 44 lshb r5,r6
+ 14: 8a 44 lshb r8,r10
+ 16: 71 42 ashuw \$7:s,r1
+ 18: 91 49 lshw \$-7:s,r1
+ 1a: 41 42 ashuw \$4:s,r1
+ 1c: c1 49 lshw \$-4:s,r1
+ 1e: 81 42 ashuw \$8:s,r1
+ 20: 81 49 lshw \$-8:s,r1
+ 22: 31 42 ashuw \$3:s,r1
+ 24: d1 49 lshw \$-3:s,r1
+ 26: 21 46 lshw r2,r1
+ 28: 34 46 lshw r3,r4
+ 2a: 56 46 lshw r5,r6
+ 2c: 8a 46 lshw r8,r10
+ 2e: 72 4c ashud \$7:s,\(r3,r2\)
+ 30: 92 4b lshd \$-7:s,\(r3,r2\)
+ 32: 82 4c ashud \$8:s,\(r3,r2\)
+ 34: 82 4b lshd \$-8:s,\(r3,r2\)
+ 36: 42 4c ashud \$4:s,\(r3,r2\)
+ 38: c2 4b lshd \$-4:s,\(r3,r2\)
+ 3a: c2 4c ashud \$12:s,\(r3,r2\)
+ 3c: 42 4b lshd \$-12:s,\(r3,r2\)
+ 3e: 31 4c ashud \$3:s,\(r2,r1\)
+ 40: d1 4b lshd \$-3:s,\(r2,r1\)
+ 42: 41 47 lshd r4,\(r2,r1\)
+ 44: 51 47 lshd r5,\(r2,r1\)
+ 46: 61 47 lshd r6,\(r2,r1\)
+ 48: 81 47 lshd r8,\(r2,r1\)
+ 4a: 11 47 lshd r1,\(r2,r1\)
diff --git a/gas/testsuite/gas/cr16/lsh_test.s b/gas/testsuite/gas/cr16/lsh_test.s
new file mode 100644
index 000000000000..3236cbdda758
--- /dev/null
+++ b/gas/testsuite/gas/cr16/lsh_test.s
@@ -0,0 +1,59 @@
+ .text
+ .global main
+main:
+ ###########################
+ # LSHB cnt(right -), reg
+ ###########################
+ lshb $7,r1
+ lshb $-7,r1
+ lshb $4,r1
+ lshb $-4,r1
+ lshb $-8,r1
+ lshb $3,r1
+ lshb $-3,r1
+ ###########################
+ # LSHB reg, reg
+ ###########################
+ lshb r2,r1
+ lshb r3,r4
+ lshb r5,r6
+ lshb r8,r10
+ ###########################
+ # LSHW cnt (right -), reg
+ ###########################
+ lshw $7,r1
+ lshw $-7,r1
+ lshw $4,r1
+ lshw $-4,r1
+ lshw $8,r1
+ lshw $-8,r1
+ lshw $3,r1
+ lshw $-3,r1
+ ##########################
+ # LSHW reg, reg
+ ##########################
+ lshw r2,r1
+ lshw r3,r4
+ lshw r5,r6
+ lshw r8,r10
+ ###########################
+ # LSHD cnt (right -), regp
+ ############################
+ lshd $7, (r3,r2)
+ lshd $-7, (r3,r2)
+ lshd $8, (r3,r2)
+ lshd $-8, (r3,r2)
+ lshd $4, (r3,r2)
+ lshd $-4, (r3,r2)
+ lshd $12,(r3,r2)
+ lshd $-12,(r3,r2)
+ lshd $3,(r2,r1)
+ lshd $-3,(r2,r1)
+ #################
+ # LSHD reg, regp
+ #################
+ lshd r4,(r2,r1)
+ lshd r5,(r2,r1)
+ lshd r6,(r2,r1)
+ lshd r8,(r2,r1)
+ lshd r1,(r2,r1)
diff --git a/gas/testsuite/gas/cr16/mov_test.d b/gas/testsuite/gas/cr16/mov_test.d
new file mode 100644
index 000000000000..ce253e7fa7fc
--- /dev/null
+++ b/gas/testsuite/gas/cr16/mov_test.d
@@ -0,0 +1,69 @@
+#as:
+#objdump: -dr
+#name: mov_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: f1 58 movb \$0xf:s,r1
+ 2: b2 58 ff 00 movb \$0xff:m,r2
+ 6: b1 58 ff 0f movb \$0xfff:m,r1
+ a: b1 58 14 00 movb \$0x14:m,r1
+ e: a2 58 movb \$0xa:s,r2
+ 10: b2 58 0b 00 movb \$0xb:m,r2
+ 14: 12 59 movb r1,r2
+ 16: 23 59 movb r2,r3
+ 18: 34 59 movb r3,r4
+ 1a: 56 59 movb r5,r6
+ 1c: 67 59 movb r6,r7
+ 1e: 78 59 movb r7,r8
+ 20: f1 5a movw \$0xf:s,r1
+ 22: b1 5a 0b 00 movw \$0xb:m,r1
+ 26: b2 5a ff 00 movw \$0xff:m,r2
+ 2a: b1 5a ff 0f movw \$0xfff:m,r1
+ 2e: b1 5a 14 00 movw \$0x14:m,r1
+ 32: a2 5a movw \$0xa:s,r2
+ 34: b2 5a 0b 00 movw \$0xb:m,r2
+ 38: 12 5b movw r1,r2
+ 3a: 23 5b movw r2,r3
+ 3c: 34 5b movw r3,r4
+ 3e: 56 5b movw r5,r6
+ 40: 67 5b movw r6,r7
+ 42: 78 5b movw r7,r8
+ 44: f1 54 movd \$0xf:s,\(r2,r1\)
+ 46: b1 54 0b 00 movd \$0xb:m,\(r2,r1\)
+ 4a: b1 54 ff 00 movd \$0xff:m,\(r2,r1\)
+ 4e: b1 54 ff 0f movd \$0xfff:m,\(r2,r1\)
+ 52: 10 05 ff ff movd \$0xffff:m,\(r2,r1\)
+ 56: 1f 05 ff ff movd \$0xfffff:m,\(r2,r1\)
+ 5a: 71 00 ff 0f movd \$0xfffffff:l,\(r2,r1\)
+ 5e: ff ff
+ 60: 91 54 movd \$-1:s,\(r2,r1\)
+ 62: 31 55 movd \(r4,r3\),\(r2,r1\)
+ 64: 31 55 movd \(r4,r3\),\(r2,r1\)
+ 66: af 54 movd \$0xa:s,\(sp\)
+ 68: ef 54 movd \$0xe:s,\(sp\)
+ 6a: bf 54 0b 00 movd \$0xb:m,\(sp\)
+ 6e: 8f 54 movd \$0x8:s,\(sp\)
+ 70: 12 5c movxb r1,r2
+ 72: 34 5c movxb r3,r4
+ 74: 56 5c movxb r5,r6
+ 76: 78 5c movxb r7,r8
+ 78: 9a 5c movxb r9,r10
+ 7a: 12 5e movxw r1,\(r3,r2\)
+ 7c: 33 5e movxw r3,\(r4,r3\)
+ 7e: 55 5e movxw r5,\(r6,r5\)
+ 80: 77 5e movxw r7,\(r8,r7\)
+ 82: 98 5e movxw r9,\(r9,r8\)
+ 84: 12 5d movzb r1,r2
+ 86: 34 5d movzb r3,r4
+ 88: 56 5d movzb r5,r6
+ 8a: 78 5d movzb r7,r8
+ 8c: 9a 5d movzb r9,r10
+ 8e: 12 5f movzw r1,\(r3,r2\)
+ 90: 33 5f movzw r3,\(r4,r3\)
+ 92: 55 5f movzw r5,\(r6,r5\)
+ 94: 77 5f movzw r7,\(r8,r7\)
+ 96: 98 5f movzw r9,\(r9,r8\)
diff --git a/gas/testsuite/gas/cr16/mov_test.s b/gas/testsuite/gas/cr16/mov_test.s
new file mode 100644
index 000000000000..20fdf4d5443b
--- /dev/null
+++ b/gas/testsuite/gas/cr16/mov_test.s
@@ -0,0 +1,94 @@
+ .text
+ .global main
+main:
+ ###########
+ # MOVB imm4/imm16, reg
+ ###########
+ movb $0xf,r1
+ movb $0xff,r2
+ movb $0xfff,r1
+ #movb $0xffff,r2 // CHECK WITH CRASM 4.1
+ movb $20,r1
+ movb $10,r2
+ movb $11,r2
+ ###########
+ # MOVB reg, reg
+ ###########
+ movb r1,r2
+ movb r2,r3
+ movb r3,r4
+ movb r5,r6
+ movb r6,r7
+ movb r7,r8
+ ###########
+ # MOVW imm4/imm16, reg
+ ###########
+ movw $0xf,r1
+ movw $0xB,r1
+ movw $0xff,r2
+ movw $0xfff,r1
+ #movw $0xffff,r2 // CHECK WITH CRASM 4.1
+ movw $20,r1
+ movw $10,r2
+ movw $11,r2
+ ###########
+ # MOVW reg, reg
+ ###########
+ movw r1,r2
+ movw r2,r3
+ movw r3,r4
+ movw r5,r6
+ movw r6,r7
+ movw r7,r8
+ ###########
+ # MOVD imm4/imm16/imm20/imm32, regp
+ ###########
+ movd $0xf,(r2,r1)
+ movd $0xB,(r2,r1)
+ movd $0xff,(r2,r1)
+ movd $0xfff,(r2,r1)
+ movd $0xffff,(r2,r1)
+ movd $0xfffff,(r2,r1)
+ movd $0xfffffff,(r2,r1)
+ movd $0xffffffff,(r2,r1)
+ ###########
+ # MOVD regp, regp
+ ###########
+ movd (r4,r3),(r2,r1)
+ movd (r4,r3),(r2,r1)
+ movd $10,(sp)
+ movd $14,(sp)
+ movd $11,(sp)
+ movd $8,(sp)
+ ###########
+ # MOVXB reg, reg
+ ###########
+ movxb r1,r2
+ movxb r3,r4
+ movxb r5,r6
+ movxb r7,r8
+ movxb r9,r10
+ ###########
+ # MOVXW reg, regp
+ ###########
+ movxw r1,(r3,r2)
+ movxw r3,(r4,r3)
+ movxw r5,(r6,r5)
+ movxw r7,(r8,r7)
+ movxw r9,(r9,r8)
+ ###########
+ # MOVZB reg, reg
+ ###########
+ movzb r1,r2
+ movzb r3,r4
+ movzb r5,r6
+ movzb r7,r8
+ movzb r9,r10
+ ###########
+ # MOVZW reg, regp
+ ###########
+ movzw r1,(r3,r2)
+ movzw r3,(r4,r3)
+ movzw r5,(r6,r5)
+ movzw r7,(r8,r7)
+ movzw r9,(r9,r8)
diff --git a/gas/testsuite/gas/cr16/mul_test.d b/gas/testsuite/gas/cr16/mul_test.d
new file mode 100644
index 000000000000..6e5755d33e12
--- /dev/null
+++ b/gas/testsuite/gas/cr16/mul_test.d
@@ -0,0 +1,47 @@
+#as:
+#objdump: -dr
+#name: mul_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: f1 64 mulb \$0xf:s,r1
+ 2: b2 64 ff 00 mulb \$0xff:m,r2
+ 6: b1 64 ff 0f mulb \$0xfff:m,r1
+ a: b1 64 14 00 mulb \$0x14:m,r1
+ e: a2 64 mulb \$0xa:s,r2
+ 10: 12 65 mulb r1,r2
+ 12: 23 65 mulb r2,r3
+ 14: 34 65 mulb r3,r4
+ 16: 56 65 mulb r5,r6
+ 18: 67 65 mulb r6,r7
+ 1a: 78 65 mulb r7,r8
+ 1c: f1 66 mulw \$0xf:s,r1
+ 1e: b2 66 ff 00 mulw \$0xff:m,r2
+ 22: b1 66 ff 0f mulw \$0xfff:m,r1
+ 26: b1 66 14 00 mulw \$0x14:m,r1
+ 2a: a2 66 mulw \$0xa:s,r2
+ 2c: 12 67 mulw r1,r2
+ 2e: 23 67 mulw r2,r3
+ 30: 34 67 mulw r3,r4
+ 32: 56 67 mulw r5,r6
+ 34: 67 67 mulw r6,r7
+ 36: 78 67 mulw r7,r8
+ 38: 12 0b mulsb r1,r2
+ 3a: 34 0b mulsb r3,r4
+ 3c: 56 0b mulsb r5,r6
+ 3e: 78 0b mulsb r7,r8
+ 40: 9a 0b mulsb r9,r10
+ 42: 12 62 mulsw r1,\(r3,r2\)
+ 44: 33 62 mulsw r3,\(r4,r3\)
+ 46: 55 62 mulsw r5,\(r6,r5\)
+ 48: 77 62 mulsw r7,\(r8,r7\)
+ 4a: 98 62 mulsw r9,\(r9,r8\)
+ 4c: 14 00 12 d2 macqw r1,r2,\(r3,r2\)
+ 50: 14 00 45 d4 macqw r4,r5,\(r5,r4\)
+ 54: 14 00 12 e2 macuw r1,r2,\(r3,r2\)
+ 58: 14 00 45 e7 macuw r4,r5,\(r8,r7\)
+ 5c: 14 00 12 f2 macsw r1,r2,\(r3,r2\)
+ 60: 14 00 45 f6 macsw r4,r5,\(r7,r6\)
diff --git a/gas/testsuite/gas/cr16/mul_test.s b/gas/testsuite/gas/cr16/mul_test.s
new file mode 100644
index 000000000000..c2b960c7f0fc
--- /dev/null
+++ b/gas/testsuite/gas/cr16/mul_test.s
@@ -0,0 +1,64 @@
+ .text
+ .global main
+main:
+ ###########
+ # MULB imm4/imm16, reg
+ ###########
+ mulb $0xf,r1
+ mulb $0xff,r2
+ mulb $0xfff,r1
+ #mulb $0xffff,r2 // CHCEK WITH CRASM 4.1
+ mulb $20,r1
+ mulb $10,r2
+ ###########
+ # MULB reg, reg
+ ###########
+ mulb r1,r2
+ mulb r2,r3
+ mulb r3,r4
+ mulb r5,r6
+ mulb r6,r7
+ mulb r7,r8
+ ###########
+ # MULW imm4/imm16, reg
+ ###########
+ mulw $0xf,r1
+ mulw $0xff,r2
+ mulw $0xfff,r1
+ #mulw $0xffff,r2 // CHCEK WITH CRASM 4.1
+ mulw $20,r1
+ mulw $10,r2
+ ###########
+ # MULW reg, reg
+ ###########
+ mulw r1,r2
+ mulw r2,r3
+ mulw r3,r4
+ mulw r5,r6
+ mulw r6,r7
+ mulw r7,r8
+ ###########
+ # MULSB reg, reg
+ ###########
+ mulsb r1,r2
+ mulsb r3,r4
+ mulsb r5,r6
+ mulsb r7,r8
+ mulsb r9,r10
+ ###########
+ # MULSW reg, regp
+ ###########
+ mulsw r1,(r3,r2)
+ mulsw r3,(r4,r3)
+ mulsw r5,(r6,r5)
+ mulsw r7,(r8,r7)
+ mulsw r9,(r9,r8)
+ #############################
+ # MUC[q/u/s/]w reg, reg, regp
+ #############################
+ macqw r1,r2,(r3,r2)
+ macqw r4,r5,(r5,r4)
+ macuw r1,r2,(r3,r2)
+ macuw r4,r5,(r8,r7)
+ macsw r1,r2,(r3,r2)
+ macsw r4,r5,(r7,r6)
diff --git a/gas/testsuite/gas/cr16/or_test.d b/gas/testsuite/gas/cr16/or_test.d
new file mode 100644
index 000000000000..73d95d0ca5d9
--- /dev/null
+++ b/gas/testsuite/gas/cr16/or_test.d
@@ -0,0 +1,49 @@
+#as:
+#objdump: -dr
+#name: or_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: f1 24 orb \$0xf:s,r1
+ 2: b2 24 ff 00 orb \$0xff:m,r2
+ 6: b1 24 ff 0f orb \$0xfff:m,r1
+ a: b2 24 ff ff orb \$0xffff:m,r2
+ e: b1 24 14 00 orb \$0x14:m,r1
+ 12: a2 24 orb \$0xa:s,r2
+ 14: 12 25 orb r1,r2
+ 16: 23 25 orb r2,r3
+ 18: 34 25 orb r3,r4
+ 1a: 56 25 orb r5,r6
+ 1c: 67 25 orb r6,r7
+ 1e: 78 25 orb r7,r8
+ 20: f1 26 orw \$0xf:s,r1
+ 22: b2 26 ff 00 orw \$0xff:m,r2
+ 26: b1 26 ff 0f orw \$0xfff:m,r1
+ 2a: b2 26 ff ff orw \$0xffff:m,r2
+ 2e: b1 26 14 00 orw \$0x14:m,r1
+ 32: a2 26 orw \$0xa:s,r2
+ 34: 12 27 orw r1,r2
+ 36: 23 27 orw r2,r3
+ 38: 34 27 orw r3,r4
+ 3a: 56 27 orw r5,r6
+ 3c: 67 27 orw r6,r7
+ 3e: 78 27 orw r7,r8
+ 40: 51 00 00 00 ord \$0xf:l,\(r2,r1\)
+ 44: 0f 00
+ 46: 51 00 00 00 ord \$0xff:l,\(r2,r1\)
+ 4a: ff 00
+ 4c: 51 00 00 00 ord \$0xfff:l,\(r2,r1\)
+ 50: ff 0f
+ 52: 51 00 00 00 ord \$0xffff:l,\(r2,r1\)
+ 56: ff ff
+ 58: 51 00 0f 00 ord \$0xfffff:l,\(r2,r1\)
+ 5c: ff ff
+ 5e: 51 00 ff 0f ord \$0xfffffff:l,\(r2,r1\)
+ 62: ff ff
+ 64: 51 00 ff ff ord \$0xffffffff:l,\(r2,r1\)
+ 68: ff ff
+ 6a: 14 00 31 90 ord \(r4,r3\),\(r2,r1\)
+ 6e: 14 00 31 90 ord \(r4,r3\),\(r2,r1\)
diff --git a/gas/testsuite/gas/cr16/or_test.s b/gas/testsuite/gas/cr16/or_test.s
new file mode 100644
index 000000000000..df140c164865
--- /dev/null
+++ b/gas/testsuite/gas/cr16/or_test.s
@@ -0,0 +1,57 @@
+ .text
+ .global main
+main:
+ ###########
+ # ORB imm4/imm16, reg
+ ###########
+ orb $0xf,r1
+ orb $0xff,r2
+ orb $0xfff,r1
+ orb $0xffff,r2
+ orb $20,r1
+ orb $10,r2
+ ###########
+ # ORB reg, reg
+ ###########
+ orb r1,r2
+ orb r2,r3
+ orb r3,r4
+ orb r5,r6
+ orb r6,r7
+ orb r7,r8
+ ###########
+ # ORW imm4/imm16, reg
+ ###########
+ orw $0xf,r1
+ orw $0xff,r2
+ orw $0xfff,r1
+ orw $0xffff,r2
+ orw $20,r1
+ orw $10,r2
+ ###########
+ # ORW reg, reg
+ ###########
+ orw r1,r2
+ orw r2,r3
+ orw r3,r4
+ orw r5,r6
+ orw r6,r7
+ orw r7,r8
+ ###########
+ # ORD imm32, regp
+ ###########
+ ord $0xf,(r2,r1)
+ ord $0xff,(r2,r1)
+ ord $0xfff,(r2,r1)
+ ord $0xffff,(r2,r1)
+ ord $0xfffff,(r2,r1)
+ ord $0xfffffff,(r2,r1)
+ ord $0xffffffff,(r2,r1)
+ ###########
+ # ORD regp, regp
+ ###########
+ ord (r4,r3),(r2,r1)
+ ord (r4,r3),(r2,r1)
+ #ord $10,(sp)
+ #ord $14,(sp)
+ #ord $8,(sp)
diff --git a/gas/testsuite/gas/cr16/pop_test.d b/gas/testsuite/gas/cr16/pop_test.d
new file mode 100644
index 000000000000..1ed8c431b935
--- /dev/null
+++ b/gas/testsuite/gas/cr16/pop_test.d
@@ -0,0 +1,24 @@
+#as:
+#objdump: -dr
+#name: pop_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 87 02 pop \$0x1,r7,RA
+ 2: 96 02 pop \$0x2,r6,RA
+ 4: a5 02 pop \$0x3,r5,RA
+ 6: b4 02 pop \$0x4,r4,RA
+ 8: c3 02 pop \$0x5,r3,RA
+ a: d2 02 pop \$0x6,r2,RA
+ c: e1 02 pop \$0x7,r1,RA
+ e: 07 02 pop \$0x1,r7
+ 10: 16 02 pop \$0x2,r6
+ 12: 25 02 pop \$0x3,r5
+ 14: 34 02 pop \$0x4,r4
+ 16: 43 02 pop \$0x5,r3
+ 18: 52 02 pop \$0x6,r2
+ 1a: 61 02 pop \$0x7,r1
+ 1c: 1e 02 pop RA
diff --git a/gas/testsuite/gas/cr16/pop_test.s b/gas/testsuite/gas/cr16/pop_test.s
new file mode 100644
index 000000000000..e88acff66112
--- /dev/null
+++ b/gas/testsuite/gas/cr16/pop_test.s
@@ -0,0 +1,27 @@
+ .text
+ .global main
+main:
+ ####################
+ # pop uimm3 regr RA
+ ####################
+ pop $1,r7,RA
+ pop $2,r6,RA
+ pop $3,r5,RA
+ pop $4,r4,RA
+ pop $5,r3,RA
+ pop $6,r2,RA
+ pop $7,r1,RA
+ #################
+ # pop uimm3 regr
+ #################
+ pop $1,r7
+ pop $2,r6
+ pop $3,r5
+ pop $4,r4
+ pop $5,r3
+ pop $6,r2
+ pop $7,r1
+ ##########
+ # pop RA
+ ##########
+ pop RA
diff --git a/gas/testsuite/gas/cr16/popret_test.d b/gas/testsuite/gas/cr16/popret_test.d
new file mode 100644
index 000000000000..cbc8f85a874b
--- /dev/null
+++ b/gas/testsuite/gas/cr16/popret_test.d
@@ -0,0 +1,24 @@
+#as:
+#objdump: -dr
+#name: popret_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 87 03 popret \$0x1,r7,RA
+ 2: 96 03 popret \$0x2,r6,RA
+ 4: a5 03 popret \$0x3,r5,RA
+ 6: b4 03 popret \$0x4,r4,RA
+ 8: c3 03 popret \$0x5,r3,RA
+ a: d2 03 popret \$0x6,r2,RA
+ c: e1 03 popret \$0x7,r1,RA
+ e: 07 03 popret \$0x1,r7
+ 10: 16 03 popret \$0x2,r6
+ 12: 25 03 popret \$0x3,r5
+ 14: 34 03 popret \$0x4,r4
+ 16: 43 03 popret \$0x5,r3
+ 18: 52 03 popret \$0x6,r2
+ 1a: 61 03 popret \$0x7,r1
+ 1c: 1e 03 popret RA
diff --git a/gas/testsuite/gas/cr16/popret_test.s b/gas/testsuite/gas/cr16/popret_test.s
new file mode 100644
index 000000000000..f88bf2844d23
--- /dev/null
+++ b/gas/testsuite/gas/cr16/popret_test.s
@@ -0,0 +1,27 @@
+ .text
+ .global main
+main:
+ ####################
+ # popret uimm3 regr RA
+ ####################
+ popret $1,r7,RA
+ popret $2,r6,RA
+ popret $3,r5,RA
+ popret $4,r4,RA
+ popret $5,r3,RA
+ popret $6,r2,RA
+ popret $7,r1,RA
+ #################
+ # popret uimm3 regr
+ #################
+ popret $1,r7
+ popret $2,r6
+ popret $3,r5
+ popret $4,r4
+ popret $5,r3
+ popret $6,r2
+ popret $7,r1
+ ##########
+ # popret RA
+ ##########
+ popret RA
diff --git a/gas/testsuite/gas/cr16/push_test.d b/gas/testsuite/gas/cr16/push_test.d
new file mode 100644
index 000000000000..0a8afab80a5b
--- /dev/null
+++ b/gas/testsuite/gas/cr16/push_test.d
@@ -0,0 +1,26 @@
+#as:
+#objdump: -dr
+#name: push_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 87 01 push \$0x1,r7,RA
+ 2: 96 01 push \$0x2,r6,RA
+ 4: a5 01 push \$0x3,r5,RA
+ 6: b4 01 push \$0x4,r4,RA
+ 8: c3 01 push \$0x5,r3,RA
+ a: d2 01 push \$0x6,r2,RA
+ c: e1 01 push \$0x7,r1,RA
+ e: 07 01 push \$0x1,r7
+ 10: 16 01 push \$0x2,r6
+ 12: 25 01 push \$0x3,r5
+ 14: 34 01 push \$0x4,r4
+ 16: 43 01 push \$0x5,r3
+ 18: 52 01 push \$0x6,r2
+ 1a: 61 01 push \$0x7,r1
+ 1c: 5c 01 push \$0x6,r12
+ 1e: 1e 01 push RA
+ 20: 1e 01 push RA
diff --git a/gas/testsuite/gas/cr16/push_test.s b/gas/testsuite/gas/cr16/push_test.s
new file mode 100644
index 000000000000..804419cc548c
--- /dev/null
+++ b/gas/testsuite/gas/cr16/push_test.s
@@ -0,0 +1,40 @@
+ .text
+ .global main
+main:
+ ####################
+ # push uimm3 regr RA
+ ####################
+ push $1,r7,RA
+ push $2,r6,RA
+ push $3,r5,RA
+ push $4,r4,RA
+ push $5,r3,RA
+ push $6,r2,RA
+ push $7,r1,RA
+#push $6,r12,RA
+ #push $7,r13,RA
+ #push $7,r12,RA
+ #push $8,r12,RA
+ #################
+ # push uimm3 regr
+ #################
+ push $1,r7
+ push $2,r6
+ push $3,r5
+ push $4,r4
+ push $5,r3
+ push $6,r2
+ push $7,r1
+ push $6,r12
+ #push $7,r13
+ #push $7,r12
+ #push $8,r12
+ #push $6,r13
+ ##########
+ # push RA
+ ##########
+ #push r1
+ #push r4
+ #push r9
+ push ra
+ push RA
diff --git a/gas/testsuite/gas/cr16/sbitb_test.d b/gas/testsuite/gas/cr16/sbitb_test.d
new file mode 100644
index 000000000000..e04dddeef342
--- /dev/null
+++ b/gas/testsuite/gas/cr16/sbitb_test.d
@@ -0,0 +1,82 @@
+#as:
+#objdump: -dr
+#name: sbitb_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: c0 73 cd 0b sbitb \$0x4,0xbcd <main\+0xbcd>:m
+ 4: da 73 cd ab sbitb \$0x5,0xaabcd <main\+0xaabcd>:m
+ 8: 10 00 3f ba sbitb \$0x3,0xfaabcd <main\+0xfaabcd>:l
+ c: cd ab
+ e: 50 70 14 00 sbitb \$0x5,\[r12\]0x14:m
+ 12: c0 70 fc ab sbitb \$0x4,\[r13\]0xabfc:m
+ 16: 30 70 34 12 sbitb \$0x3,\[r12\]0x1234:m
+ 1a: b0 70 34 12 sbitb \$0x3,\[r13\]0x1234:m
+ 1e: 30 70 34 00 sbitb \$0x3,\[r12\]0x34:m
+ 22: b0 72 3a 4a sbitb \$0x3,\[r12\]0xa7a:m\(r1,r0\)
+ 26: b1 72 3a 4a sbitb \$0x3,\[r12\]0xa7a:m\(r3,r2\)
+ 2a: b6 72 3a 4a sbitb \$0x3,\[r12\]0xa7a:m\(r4,r3\)
+ 2e: b2 72 3a 4a sbitb \$0x3,\[r12\]0xa7a:m\(r5,r4\)
+ 32: b7 72 3a 4a sbitb \$0x3,\[r12\]0xa7a:m\(r6,r5\)
+ 36: b3 72 3a 4a sbitb \$0x3,\[r12\]0xa7a:m\(r7,r6\)
+ 3a: b4 72 3a 4a sbitb \$0x3,\[r12\]0xa7a:m\(r9,r8\)
+ 3e: b5 72 3a 4a sbitb \$0x3,\[r12\]0xa7a:m\(r11,r10\)
+ 42: b8 72 3a 4a sbitb \$0x3,\[r13\]0xa7a:m\(r1,r0\)
+ 46: b9 72 3a 4a sbitb \$0x3,\[r13\]0xa7a:m\(r3,r2\)
+ 4a: be 72 3a 4a sbitb \$0x3,\[r13\]0xa7a:m\(r4,r3\)
+ 4e: ba 72 3a 4a sbitb \$0x3,\[r13\]0xa7a:m\(r5,r4\)
+ 52: bf 72 3a 4a sbitb \$0x3,\[r13\]0xa7a:m\(r6,r5\)
+ 56: bb 72 3a 4a sbitb \$0x3,\[r13\]0xa7a:m\(r7,r6\)
+ 5a: bc 72 3a 4a sbitb \$0x3,\[r13\]0xa7a:m\(r9,r8\)
+ 5e: bd 72 3a 4a sbitb \$0x3,\[r13\]0xa7a:m\(r11,r10\)
+ 62: be 72 5a 4b sbitb \$0x5,\[r13\]0xb7a:m\(r4,r3\)
+ 66: b7 72 1a 41 sbitb \$0x1,\[r12\]0x17a:m\(r6,r5\)
+ 6a: bf 72 14 01 sbitb \$0x1,\[r13\]0x134:m\(r6,r5\)
+ 6e: 10 00 36 aa sbitb \$0x3,\[r12\]0xabcde:l\(r4,r3\)
+ 72: de bc
+ 74: 10 00 5e a0 sbitb \$0x5,\[r13\]0xabcd:l\(r4,r3\)
+ 78: cd ab
+ 7a: 10 00 37 a0 sbitb \$0x3,\[r12\]0xabcd:l\(r6,r5\)
+ 7e: cd ab
+ 80: 10 00 3f a0 sbitb \$0x3,\[r13\]0xbcde:l\(r6,r5\)
+ 84: de bc
+ 86: 10 00 52 80 sbitb \$0x5,0x0:l\(r2\)
+ 8a: 00 00
+ 8c: 3c 73 34 00 sbitb \$0x3,0x34:m\(r12\)
+ 90: 3d 73 ab 00 sbitb \$0x3,0xab:m\(r13\)
+ 94: 10 00 51 80 sbitb \$0x5,0xad:l\(r1\)
+ 98: ad 00
+ 9a: 10 00 52 80 sbitb \$0x5,0xcd:l\(r2\)
+ 9e: cd 00
+ a0: 10 00 50 80 sbitb \$0x5,0xfff:l\(r0\)
+ a4: ff 0f
+ a6: 10 00 34 80 sbitb \$0x3,0xbcd:l\(r4\)
+ aa: cd 0b
+ ac: 3c 73 ff 0f sbitb \$0x3,0xfff:m\(r12\)
+ b0: 3d 73 ff 0f sbitb \$0x3,0xfff:m\(r13\)
+ b4: 3d 73 ff ff sbitb \$0x3,0xffff:m\(r13\)
+ b8: 3c 73 43 23 sbitb \$0x3,0x2343:m\(r12\)
+ bc: 10 00 32 81 sbitb \$0x3,0x2345:l\(r2\)
+ c0: 45 23
+ c2: 10 00 38 84 sbitb \$0x3,0xabcd:l\(r8\)
+ c6: cd ab
+ c8: 10 00 3d 9f sbitb \$0x3,0xfabcd:l\(r13\)
+ cc: cd ab
+ ce: 10 00 38 8f sbitb \$0x3,0xabcd:l\(r8\)
+ d2: cd ab
+ d4: 10 00 39 8f sbitb \$0x3,0xabcd:l\(r9\)
+ d8: cd ab
+ da: 10 00 39 84 sbitb \$0x3,0xabcd:l\(r9\)
+ de: cd ab
+ e0: 31 72 sbitb \$0x3,0x0:s\(r2,r1\)
+ e2: 51 73 01 00 sbitb \$0x5,0x1:m\(r2,r1\)
+ e6: 41 73 34 12 sbitb \$0x4,0x1234:m\(r2,r1\)
+ ea: 31 73 34 12 sbitb \$0x3,0x1234:m\(r2,r1\)
+ ee: 10 00 31 91 sbitb \$0x3,0x12345:l\(r2,r1\)
+ f2: 45 23
+ f4: 31 73 23 01 sbitb \$0x3,0x123:m\(r2,r1\)
+ f8: 10 00 31 91 sbitb \$0x3,0x12345:l\(r2,r1\)
+ fc: 45 23
diff --git a/gas/testsuite/gas/cr16/sbitb_test.s b/gas/testsuite/gas/cr16/sbitb_test.s
new file mode 100644
index 000000000000..937e6c622111
--- /dev/null
+++ b/gas/testsuite/gas/cr16/sbitb_test.s
@@ -0,0 +1,62 @@
+ .text
+ .global main
+main:
+ sbitb $4,0xbcd
+ sbitb $5,0xaabcd
+ sbitb $3,0xfaabcd
+
+ sbitb $5,[r12]0x14
+ sbitb $4,[r13]0xabfc
+ sbitb $3,[r12]0x1234
+ sbitb $3,[r13]0x1234
+ sbitb $3,[r12]0x34
+
+ sbitb $3,[r12]0xa7a(r1,r0)
+ sbitb $3,[r12]0xa7a(r3,r2)
+ sbitb $3,[r12]0xa7a(r4,r3)
+ sbitb $3,[r12]0xa7a(r5,r4)
+ sbitb $3,[r12]0xa7a(r6,r5)
+ sbitb $3,[r12]0xa7a(r7,r6)
+ sbitb $3,[r12]0xa7a(r9,r8)
+ sbitb $3,[r12]0xa7a(r11,r10)
+ sbitb $3,[r13]0xa7a(r1,r0)
+ sbitb $3,[r13]0xa7a(r3,r2)
+ sbitb $3,[r13]0xa7a(r4,r3)
+ sbitb $3,[r13]0xa7a(r5,r4)
+ sbitb $3,[r13]0xa7a(r6,r5)
+ sbitb $3,[r13]0xa7a(r7,r6)
+ sbitb $3,[r13]0xa7a(r9,r8)
+ sbitb $3,[r13]0xa7a(r11,r10)
+ sbitb $5,[r13]0xb7a(r4,r3)
+ sbitb $1,[r12]0x17a(r6,r5)
+ sbitb $1,[r13]0x134(r6,r5)
+ sbitb $3,[r12]0xabcde(r4,r3)
+ sbitb $5,[r13]0xabcd(r4,r3)
+ sbitb $3,[r12]0xabcd(r6,r5)
+ sbitb $3,[r13]0xbcde(r6,r5)
+
+ sbitb $5,0x0(r2)
+ sbitb $3,0x34(r12)
+ sbitb $3,0xab(r13)
+ sbitb $5,0xad(r1)
+ sbitb $5,0xcd(r2)
+ sbitb $5,0xfff(r0)
+ sbitb $3,0xbcd(r4)
+ sbitb $3,0xfff(r12)
+ sbitb $3,0xfff(r13)
+ sbitb $3,0xffff(r13)
+ sbitb $3,0x2343(r12)
+ sbitb $3,0x12345(r2)
+ sbitb $3,0x4abcd(r8)
+ sbitb $3,0xfabcd(r13)
+ sbitb $3,0xfabcd(r8)
+ sbitb $3,0xfabcd(r9)
+ sbitb $3,0x4abcd(r9)
+
+ sbitb $3,0x0(r2,r1)
+ sbitb $5,0x1(r2,r1)
+ sbitb $4,0x1234(r2,r1)
+ sbitb $3,0x1234(r2,r1)
+ sbitb $3,0x12345(r2,r1)
+ sbitb $3,0x123(r2,r1)
+ sbitb $3,0x12345(r2,r1)
diff --git a/gas/testsuite/gas/cr16/sbitw_test.d b/gas/testsuite/gas/cr16/sbitw_test.d
new file mode 100644
index 000000000000..afc75f4d5d94
--- /dev/null
+++ b/gas/testsuite/gas/cr16/sbitw_test.d
@@ -0,0 +1,155 @@
+#as:
+#objdump: -dr
+#name: sbitw_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 40 77 cd 0b sbitw \$0x4:s,0xbcd <main\+0xbcd>:m
+ 4: 5a 77 cd ab sbitw \$0x5:s,0xaabcd <main\+0xaabcd>:m
+ 8: 11 00 3f ba sbitw \$0x3:s,0xfaabcd <main\+0xfaabcd>:l
+ c: cd ab
+ e: a0 77 cd 0b sbitw \$0xa:s,0xbcd <main\+0xbcd>:m
+ 12: fa 77 cd ab sbitw \$0xf:s,0xaabcd <main\+0xaabcd>:m
+ 16: 11 00 ef ba sbitw \$0xe:s,0xfaabcd <main\+0xfaabcd>:l
+ 1a: cd ab
+ 1c: 50 74 14 00 sbitw \$0x5:s,\[r13\]0x14:m
+ 20: 40 75 fc ab sbitw \$0x4:s,\[r13\]0xabfc:m
+ 24: 30 74 34 12 sbitw \$0x3:s,\[r12\]0x1234:m
+ 28: 30 75 34 12 sbitw \$0x3:s,\[r12\]0x1234:m
+ 2c: 30 74 34 00 sbitw \$0x3:s,\[r12\]0x34:m
+ 30: f0 74 14 00 sbitw \$0xf:s,\[r13\]0x14:m
+ 34: e0 75 fc ab sbitw \$0xe:s,\[r13\]0xabfc:m
+ 38: d0 74 34 12 sbitw \$0xd:s,\[r13\]0x1234:m
+ 3c: d0 75 34 12 sbitw \$0xd:s,\[r13\]0x1234:m
+ 40: b0 74 34 00 sbitw \$0xb:s,\[r12\]0x34:m
+ 44: f0 72 3a 4a sbitw \$0x3:s,\[r12\]0xa7a:m\(r1,r0\)
+ 48: f1 72 3a 4a sbitw \$0x3:s,\[r12\]0xa7a:m\(r3,r2\)
+ 4c: f6 72 3a 4a sbitw \$0x3:s,\[r12\]0xa7a:m\(r4,r3\)
+ 50: f2 72 3a 4a sbitw \$0x3:s,\[r12\]0xa7a:m\(r5,r4\)
+ 54: f7 72 3a 4a sbitw \$0x3:s,\[r12\]0xa7a:m\(r6,r5\)
+ 58: f3 72 3a 4a sbitw \$0x3:s,\[r12\]0xa7a:m\(r7,r6\)
+ 5c: f4 72 3a 4a sbitw \$0x3:s,\[r12\]0xa7a:m\(r9,r8\)
+ 60: f5 72 3a 4a sbitw \$0x3:s,\[r12\]0xa7a:m\(r11,r10\)
+ 64: f8 72 3a 4a sbitw \$0x3:s,\[r13\]0xa7a:m\(r1,r0\)
+ 68: f9 72 3a 4a sbitw \$0x3:s,\[r13\]0xa7a:m\(r3,r2\)
+ 6c: fe 72 3a 4a sbitw \$0x3:s,\[r13\]0xa7a:m\(r4,r3\)
+ 70: fa 72 3a 4a sbitw \$0x3:s,\[r13\]0xa7a:m\(r5,r4\)
+ 74: ff 72 3a 4a sbitw \$0x3:s,\[r13\]0xa7a:m\(r6,r5\)
+ 78: fb 72 3a 4a sbitw \$0x3:s,\[r13\]0xa7a:m\(r7,r6\)
+ 7c: fc 72 3a 4a sbitw \$0x3:s,\[r13\]0xa7a:m\(r9,r8\)
+ 80: fd 72 3a 4a sbitw \$0x3:s,\[r13\]0xa7a:m\(r11,r10\)
+ 84: fe 72 5a 4b sbitw \$0x5:s,\[r13\]0xb7a:m\(r4,r3\)
+ 88: f7 72 1a 41 sbitw \$0x1:s,\[r12\]0x17a:m\(r6,r5\)
+ 8c: ff 72 14 01 sbitw \$0x1:s,\[r13\]0x134:m\(r6,r5\)
+ 90: 11 00 36 aa sbitw \$0x3:s,\[r12\]0xabcde:l\(r4,r3\)
+ 94: de bc
+ 96: 11 00 5e a0 sbitw \$0x5:s,\[r13\]0xabcd:l\(r4,r3\)
+ 9a: cd ab
+ 9c: 11 00 37 a0 sbitw \$0x3:s,\[r12\]0xabcd:l\(r6,r5\)
+ a0: cd ab
+ a2: 11 00 3f a0 sbitw \$0x3:s,\[r13\]0xbcde:l\(r6,r5\)
+ a6: de bc
+ a8: f0 72 da 4a sbitw \$0xd:s,\[r12\]0xafa:m\(r1,r0\)
+ ac: f1 72 da 4a sbitw \$0xd:s,\[r12\]0xafa:m\(r3,r2\)
+ b0: f6 72 da 4a sbitw \$0xd:s,\[r12\]0xafa:m\(r4,r3\)
+ b4: f2 72 da 4a sbitw \$0xd:s,\[r12\]0xafa:m\(r5,r4\)
+ b8: f7 72 da 4a sbitw \$0xd:s,\[r12\]0xafa:m\(r6,r5\)
+ bc: f3 72 da 4a sbitw \$0xd:s,\[r12\]0xafa:m\(r7,r6\)
+ c0: f4 72 da 4a sbitw \$0xd:s,\[r12\]0xafa:m\(r9,r8\)
+ c4: f5 72 da 4a sbitw \$0xd:s,\[r12\]0xafa:m\(r11,r10\)
+ c8: f8 72 da 4a sbitw \$0xd:s,\[r13\]0xafa:m\(r1,r0\)
+ cc: f9 72 da 4a sbitw \$0xd:s,\[r13\]0xafa:m\(r3,r2\)
+ d0: fe 72 da 4a sbitw \$0xd:s,\[r13\]0xafa:m\(r4,r3\)
+ d4: fa 72 da 4a sbitw \$0xd:s,\[r13\]0xafa:m\(r5,r4\)
+ d8: ff 72 da 4a sbitw \$0xd:s,\[r13\]0xafa:m\(r6,r5\)
+ dc: fb 72 da 4a sbitw \$0xd:s,\[r13\]0xafa:m\(r7,r6\)
+ e0: fc 72 da 4a sbitw \$0xd:s,\[r13\]0xafa:m\(r9,r8\)
+ e4: fd 72 da 4a sbitw \$0xd:s,\[r13\]0xafa:m\(r11,r10\)
+ e8: fe 72 fa 4b sbitw \$0xf:s,\[r13\]0xbfa:m\(r4,r3\)
+ ec: f7 72 ba 41 sbitw \$0xb:s,\[r12\]0x1fa:m\(r6,r5\)
+ f0: ff 72 b4 01 sbitw \$0xb:s,\[r13\]0x1b4:m\(r6,r5\)
+ f4: 11 00 d6 aa sbitw \$0xd:s,\[r12\]0xabcde:l\(r4,r3\)
+ f8: de bc
+ fa: 11 00 fe a0 sbitw \$0xf:s,\[r13\]0xabcd:l\(r4,r3\)
+ fe: cd ab
+ 100: 11 00 d7 a0 sbitw \$0xd:s,\[r12\]0xabcd:l\(r6,r5\)
+ 104: cd ab
+ 106: 11 00 df a0 sbitw \$0xd:s,\[r13\]0xbcde:l\(r6,r5\)
+ 10a: de bc
+ 10c: 11 00 52 80 sbitw \$0x5:s,0x0:l\(r2\)
+ 110: 00 00
+ 112: 3c 71 34 00 sbitw \$0x3:s,0x34:m\(r12\)
+ 116: 3d 71 ab 00 sbitw \$0x3:s,0xab:m\(r13\)
+ 11a: 11 00 51 80 sbitw \$0x5:s,0xad:l\(r1\)
+ 11e: ad 00
+ 120: 11 00 52 80 sbitw \$0x5:s,0xcd:l\(r2\)
+ 124: cd 00
+ 126: 11 00 50 80 sbitw \$0x5:s,0xfff:l\(r0\)
+ 12a: ff 0f
+ 12c: 11 00 34 80 sbitw \$0x3:s,0xbcd:l\(r4\)
+ 130: cd 0b
+ 132: 3c 71 ff 0f sbitw \$0x3:s,0xfff:m\(r12\)
+ 136: 3d 71 ff 0f sbitw \$0x3:s,0xfff:m\(r13\)
+ 13a: 3d 71 ff ff sbitw \$0x3:s,0xffff:m\(r13\)
+ 13e: 3c 71 43 23 sbitw \$0x3:s,0x2343:m\(r12\)
+ 142: 11 00 32 81 sbitw \$0x3:s,0x2345:l\(r2\)
+ 146: 45 23
+ 148: 11 00 38 84 sbitw \$0x3:s,0xabcd:l\(r8\)
+ 14c: cd ab
+ 14e: 11 00 3d 9f sbitw \$0x3:s,0xfabcd:l\(r13\)
+ 152: cd ab
+ 154: 11 00 38 8f sbitw \$0x3:s,0xabcd:l\(r8\)
+ 158: cd ab
+ 15a: 11 00 39 8f sbitw \$0x3:s,0xabcd:l\(r9\)
+ 15e: cd ab
+ 160: 11 00 39 84 sbitw \$0x3:s,0xabcd:l\(r9\)
+ 164: cd ab
+ 166: 11 00 f2 80 sbitw \$0xf:s,0x0:l\(r2\)
+ 16a: 00 00
+ 16c: dc 71 34 00 sbitw \$0xd:s,0x34:m\(r12\)
+ 170: dd 71 ab 00 sbitw \$0xd:s,0xab:m\(r13\)
+ 174: 11 00 f1 80 sbitw \$0xf:s,0xad:l\(r1\)
+ 178: ad 00
+ 17a: 11 00 f2 80 sbitw \$0xf:s,0xcd:l\(r2\)
+ 17e: cd 00
+ 180: 11 00 f0 80 sbitw \$0xf:s,0xfff:l\(r0\)
+ 184: ff 0f
+ 186: 11 00 d4 80 sbitw \$0xd:s,0xbcd:l\(r4\)
+ 18a: cd 0b
+ 18c: dc 71 ff 0f sbitw \$0xd:s,0xfff:m\(r12\)
+ 190: dd 71 ff 0f sbitw \$0xd:s,0xfff:m\(r13\)
+ 194: dd 71 ff ff sbitw \$0xd:s,0xffff:m\(r13\)
+ 198: dc 71 43 23 sbitw \$0xd:s,0x2343:m\(r12\)
+ 19c: 11 00 d2 81 sbitw \$0xd:s,0x2345:l\(r2\)
+ 1a0: 45 23
+ 1a2: 11 00 d8 84 sbitw \$0xd:s,0xabcd:l\(r8\)
+ 1a6: cd ab
+ 1a8: 11 00 dd 9f sbitw \$0xd:s,0xfabcd:l\(r13\)
+ 1ac: cd ab
+ 1ae: 11 00 d8 8f sbitw \$0xd:s,0xabcd:l\(r8\)
+ 1b2: cd ab
+ 1b4: 11 00 d9 8f sbitw \$0xd:s,0xabcd:l\(r9\)
+ 1b8: cd ab
+ 1ba: 11 00 d9 84 sbitw \$0xd:s,0xabcd:l\(r9\)
+ 1be: cd ab
+ 1c0: 31 76 sbitw \$0x3:s,0x0:s\(r2,r1\)
+ 1c2: 51 71 01 00 sbitw \$0x5:s,0x1:m\(r2,r1\)
+ 1c6: 41 71 34 12 sbitw \$0x4:s,0x1234:m\(r2,r1\)
+ 1ca: 31 71 34 12 sbitw \$0x3:s,0x1234:m\(r2,r1\)
+ 1ce: 11 00 31 91 sbitw \$0x3:s,0x12345:l\(r2,r1\)
+ 1d2: 45 23
+ 1d4: 31 71 23 01 sbitw \$0x3:s,0x123:m\(r2,r1\)
+ 1d8: 11 00 31 91 sbitw \$0x3:s,0x12345:l\(r2,r1\)
+ 1dc: 45 23
+ 1de: d1 76 sbitw \$0xd:s,0x0:s\(r2,r1\)
+ 1e0: f1 71 01 00 sbitw \$0xf:s,0x1:m\(r2,r1\)
+ 1e4: e1 71 34 12 sbitw \$0xe:s,0x1234:m\(r2,r1\)
+ 1e8: d1 71 34 12 sbitw \$0xd:s,0x1234:m\(r2,r1\)
+ 1ec: 11 00 d1 91 sbitw \$0xd:s,0x12345:l\(r2,r1\)
+ 1f0: 45 23
+ 1f2: d1 71 23 01 sbitw \$0xd:s,0x123:m\(r2,r1\)
+ 1f6: 11 00 d1 91 sbitw \$0xd:s,0x12345:l\(r2,r1\)
+ 1fa: 45 23
diff --git a/gas/testsuite/gas/cr16/sbitw_test.s b/gas/testsuite/gas/cr16/sbitw_test.s
new file mode 100644
index 000000000000..334d033a44fa
--- /dev/null
+++ b/gas/testsuite/gas/cr16/sbitw_test.s
@@ -0,0 +1,117 @@
+ .text
+ .global main
+main:
+ sbitw $4,0xbcd
+ sbitw $5,0xaabcd
+ sbitw $3,0xfaabcd
+ sbitw $10,0xbcd
+ sbitw $15,0xaabcd
+ sbitw $14,0xfaabcd
+
+ sbitw $5,[r12]0x14
+ sbitw $4,[r13]0xabfc
+ sbitw $3,[r12]0x1234
+ sbitw $3,[r13]0x1234
+ sbitw $3,[r12]0x34
+ sbitw $15,[r12]0x14
+ sbitw $14,[r13]0xabfc
+ sbitw $13,[r12]0x1234
+ sbitw $13,[r13]0x1234
+ sbitw $11,[r12]0x34
+
+ sbitw $3,[r12]0xa7a(r1,r0)
+ sbitw $3,[r12]0xa7a(r3,r2)
+ sbitw $3,[r12]0xa7a(r4,r3)
+ sbitw $3,[r12]0xa7a(r5,r4)
+ sbitw $3,[r12]0xa7a(r6,r5)
+ sbitw $3,[r12]0xa7a(r7,r6)
+ sbitw $3,[r12]0xa7a(r9,r8)
+ sbitw $3,[r12]0xa7a(r11,r10)
+ sbitw $3,[r13]0xa7a(r1,r0)
+ sbitw $3,[r13]0xa7a(r3,r2)
+ sbitw $3,[r13]0xa7a(r4,r3)
+ sbitw $3,[r13]0xa7a(r5,r4)
+ sbitw $3,[r13]0xa7a(r6,r5)
+ sbitw $3,[r13]0xa7a(r7,r6)
+ sbitw $3,[r13]0xa7a(r9,r8)
+ sbitw $3,[r13]0xa7a(r11,r10)
+ sbitw $5,[r13]0xb7a(r4,r3)
+ sbitw $1,[r12]0x17a(r6,r5)
+ sbitw $1,[r13]0x134(r6,r5)
+ sbitw $3,[r12]0xabcde(r4,r3)
+ sbitw $5,[r13]0xabcd(r4,r3)
+ sbitw $3,[r12]0xabcd(r6,r5)
+ sbitw $3,[r13]0xbcde(r6,r5)
+ sbitw $13,[r12]0xa7a(r1,r0)
+ sbitw $13,[r12]0xa7a(r3,r2)
+ sbitw $13,[r12]0xa7a(r4,r3)
+ sbitw $13,[r12]0xa7a(r5,r4)
+ sbitw $13,[r12]0xa7a(r6,r5)
+ sbitw $13,[r12]0xa7a(r7,r6)
+ sbitw $13,[r12]0xa7a(r9,r8)
+ sbitw $13,[r12]0xa7a(r11,r10)
+ sbitw $13,[r13]0xa7a(r1,r0)
+ sbitw $13,[r13]0xa7a(r3,r2)
+ sbitw $13,[r13]0xa7a(r4,r3)
+ sbitw $13,[r13]0xa7a(r5,r4)
+ sbitw $13,[r13]0xa7a(r6,r5)
+ sbitw $13,[r13]0xa7a(r7,r6)
+ sbitw $13,[r13]0xa7a(r9,r8)
+ sbitw $13,[r13]0xa7a(r11,r10)
+ sbitw $15,[r13]0xb7a(r4,r3)
+ sbitw $11,[r12]0x17a(r6,r5)
+ sbitw $11,[r13]0x134(r6,r5)
+ sbitw $13,[r12]0xabcde(r4,r3)
+ sbitw $15,[r13]0xabcd(r4,r3)
+ sbitw $13,[r12]0xabcd(r6,r5)
+ sbitw $13,[r13]0xbcde(r6,r5)
+
+ sbitw $5,0x0(r2)
+ sbitw $3,0x34(r12)
+ sbitw $3,0xab(r13)
+ sbitw $5,0xad(r1)
+ sbitw $5,0xcd(r2)
+ sbitw $5,0xfff(r0)
+ sbitw $3,0xbcd(r4)
+ sbitw $3,0xfff(r12)
+ sbitw $3,0xfff(r13)
+ sbitw $3,0xffff(r13)
+ sbitw $3,0x2343(r12)
+ sbitw $3,0x12345(r2)
+ sbitw $3,0x4abcd(r8)
+ sbitw $3,0xfabcd(r13)
+ sbitw $3,0xfabcd(r8)
+ sbitw $3,0xfabcd(r9)
+ sbitw $3,0x4abcd(r9)
+ sbitw $15,0x0(r2)
+ sbitw $13,0x34(r12)
+ sbitw $13,0xab(r13)
+ sbitw $15,0xad(r1)
+ sbitw $15,0xcd(r2)
+ sbitw $15,0xfff(r0)
+ sbitw $13,0xbcd(r4)
+ sbitw $13,0xfff(r12)
+ sbitw $13,0xfff(r13)
+ sbitw $13,0xffff(r13)
+ sbitw $13,0x2343(r12)
+ sbitw $13,0x12345(r2)
+ sbitw $13,0x4abcd(r8)
+ sbitw $13,0xfabcd(r13)
+ sbitw $13,0xfabcd(r8)
+ sbitw $13,0xfabcd(r9)
+ sbitw $13,0x4abcd(r9)
+
+ sbitw $3,0x0(r2,r1)
+ sbitw $5,0x1(r2,r1)
+ sbitw $4,0x1234(r2,r1)
+ sbitw $3,0x1234(r2,r1)
+ sbitw $3,0x12345(r2,r1)
+ sbitw $3,0x123(r2,r1)
+ sbitw $3,0x12345(r2,r1)
+ sbitw $13,0x0(r2,r1)
+ sbitw $15,0x1(r2,r1)
+ sbitw $14,0x1234(r2,r1)
+ sbitw $13,0x1234(r2,r1)
+ sbitw $13,0x12345(r2,r1)
+ sbitw $13,0x123(r2,r1)
+ sbitw $13,0x12345(r2,r1)
diff --git a/gas/testsuite/gas/cr16/scc_test.d b/gas/testsuite/gas/cr16/scc_test.d
new file mode 100644
index 000000000000..308e75518c8c
--- /dev/null
+++ b/gas/testsuite/gas/cr16/scc_test.d
@@ -0,0 +1,22 @@
+#as:
+#objdump: -dr
+#name: scc_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 02 08 seq r2
+ 2: 13 08 sne r3
+ 4: 23 08 scs r3
+ 6: 34 08 scc r4
+ 8: 45 08 shi r5
+ a: 56 08 sls r6
+ c: 67 08 sgt r7
+ e: 88 08 sfs r8
+ 10: 99 08 sfc r9
+ 12: aa 08 slo r10
+ 14: b1 08 shs r1
+ 16: cb 08 slt r11
+ 18: d0 08 sge r0
diff --git a/gas/testsuite/gas/cr16/scc_test.s b/gas/testsuite/gas/cr16/scc_test.s
new file mode 100644
index 000000000000..9b9d01c3059f
--- /dev/null
+++ b/gas/testsuite/gas/cr16/scc_test.s
@@ -0,0 +1,19 @@
+ .text
+ .global main
+main:
+ ##########
+ # SCond reg
+ ##########
+ seq r2
+ sne r3
+ scs r3
+ scc r4
+ shi r5
+ sls r6
+ sgt r7
+ sfs r8
+ sfc r9
+ slo r10
+ shs r1
+ slt r11
+ sge r0
diff --git a/gas/testsuite/gas/cr16/storb_test.d b/gas/testsuite/gas/cr16/storb_test.d
new file mode 100644
index 000000000000..dc2a9c260f09
--- /dev/null
+++ b/gas/testsuite/gas/cr16/storb_test.d
@@ -0,0 +1,153 @@
+#as:
+#objdump: -dr
+#name: storb_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 00 c8 00 00 storb r0,0x0 <main>:m
+ 4: 10 c8 ff 00 storb r1,0xff <main\+0xff>:m
+ 8: 30 c8 ff 0f storb r3,0xfff <main\+0xfff>:m
+ c: 40 c8 34 12 storb r4,0x1234 <main\+0x1234>:m
+ 10: 50 c8 34 12 storb r5,0x1234 <main\+0x1234>:m
+ 14: 13 00 07 7a storb r0,0x7a1234 <main\+0x7a1234>:l
+ 18: 34 12
+ 1a: 13 00 1b 7a storb r1,0xba1234 <main\+0xba1234>:l
+ 1e: 34 12
+ 20: 13 00 2f 7f storb r2,0xffffff <main\+0xffffff>:l
+ 24: ff ff
+ 26: 00 ca 00 00 storb r0,\[r12\]0x0:m
+ 2a: 00 cb 00 00 storb r0,\[r12\]0x0:m
+ 2e: 10 ca ff 00 storb r1,\[r12\]0xff:m
+ 32: 10 cb ff 00 storb r1,\[r12\]0xff:m
+ 36: 30 ca ff 0f storb r3,\[r12\]0xfff:m
+ 3a: 30 cb ff 0f storb r3,\[r12\]0xfff:m
+ 3e: 40 ca 34 12 storb r4,\[r13\]0x1234:m
+ 42: 40 cb 34 12 storb r4,\[r13\]0x1234:m
+ 46: 50 ca 34 12 storb r5,\[r13\]0x1234:m
+ 4a: 50 cb 34 12 storb r5,\[r13\]0x1234:m
+ 4e: 20 ca 67 45 storb r2,\[r12\]0x4567:m
+ 52: 2a cb 34 12 storb r2,\[r12\]0xa1234:m
+ 56: 10 f4 storb r1,0x4:s\(r1,r0\)
+ 58: 32 f4 storb r3,0x4:s\(r3,r2\)
+ 5a: 40 ff 34 12 storb r4,0x1234:m\(r1,r0\)
+ 5e: 52 ff 34 12 storb r5,0x1234:m\(r3,r2\)
+ 62: 13 00 60 5a storb r6,0xa1234:l\(r1,r0\)
+ 66: 34 12
+ 68: 19 00 10 5f storb r1,0xffffc:l\(r1,r0\)
+ 6c: fc ff
+ 6e: 19 00 32 5f storb r3,0xffffc:l\(r3,r2\)
+ 72: fc ff
+ 74: 19 00 40 5f storb r4,0xfedcc:l\(r1,r0\)
+ 78: cc ed
+ 7a: 19 00 52 5f storb r5,0xfedcc:l\(r3,r2\)
+ 7e: cc ed
+ 80: 19 00 60 55 storb r6,0x5edcc:l\(r1,r0\)
+ 84: cc ed
+ 86: 00 f0 storb r0,0x0:s\(r1,r0\)
+ 88: 00 f0 storb r0,0x0:s\(r1,r0\)
+ 8a: 00 ff 0f 00 storb r0,0xf:m\(r1,r0\)
+ 8e: 10 ff 0f 00 storb r1,0xf:m\(r1,r0\)
+ 92: 20 ff 34 12 storb r2,0x1234:m\(r1,r0\)
+ 96: 32 ff cd ab storb r3,0xabcd:m\(r3,r2\)
+ 9a: 43 ff ff af storb r4,0xafff:m\(r4,r3\)
+ 9e: 13 00 55 5a storb r5,0xa1234:l\(r6,r5\)
+ a2: 34 12
+ a4: 19 00 00 5f storb r0,0xffff1:l\(r1,r0\)
+ a8: f1 ff
+ aa: 19 00 10 5f storb r1,0xffff1:l\(r1,r0\)
+ ae: f1 ff
+ b0: 19 00 20 5f storb r2,0xfedcc:l\(r1,r0\)
+ b4: cc ed
+ b6: 19 00 32 5f storb r3,0xf5433:l\(r3,r2\)
+ ba: 33 54
+ bc: 19 00 43 5f storb r4,0xf5001:l\(r4,r3\)
+ c0: 01 50
+ c2: 19 00 55 55 storb r5,0x5edcc:l\(r6,r5\)
+ c6: cc ed
+ c8: 00 fe storb r0,\[r12\]0x0:s\(r1,r0\)
+ ca: 18 fe storb r1,\[r13\]0x0:s\(r1,r0\)
+ cc: 70 c6 04 12 storb r7,\[r12\]0x234:m\(r1,r0\)
+ d0: 13 00 38 61 storb r3,\[r13\]0x1abcd:l\(r1,r0\)
+ d4: cd ab
+ d6: 13 00 40 6a storb r4,\[r12\]0xa1234:l\(r1,r0\)
+ da: 34 12
+ dc: 13 00 58 6b storb r5,\[r13\]0xb1234:l\(r1,r0\)
+ e0: 34 12
+ e2: 13 00 68 6f storb r6,\[r13\]0xfffff:l\(r1,r0\)
+ e6: ff ff
+ e8: 40 81 cd 0b storb \$0x4:s,0xbcd <main\+0xbcd>:m
+ ec: 5a 81 cd ab storb \$0x5:s,0xaabcd <main\+0xaabcd>:m
+ f0: 12 00 3f 3a storb \$0x3:s,0xfaabcd <main\+0xfaabcd>:l
+ f4: cd ab
+ f6: 50 84 14 00 storb \$0x5:s,\[r13\]0x14:m
+ fa: 40 85 fc ab storb \$0x4:s,\[r13\]0xabfc:m
+ fe: 30 84 34 12 storb \$0x3:s,\[r12\]0x1234:m
+ 102: 30 85 34 12 storb \$0x3:s,\[r12\]0x1234:m
+ 106: 30 84 34 00 storb \$0x3:s,\[r12\]0x34:m
+ 10a: 30 86 3a 4a storb \$0x3:s,\[r12\]0xa7a:m\(r1,r0\)
+ 10e: 31 86 3a 4a storb \$0x3:s,\[r12\]0xa7a:m\(r3,r2\)
+ 112: 36 86 3a 4a storb \$0x3:s,\[r12\]0xa7a:m\(r4,r3\)
+ 116: 32 86 3a 4a storb \$0x3:s,\[r12\]0xa7a:m\(r5,r4\)
+ 11a: 37 86 3a 4a storb \$0x3:s,\[r12\]0xa7a:m\(r6,r5\)
+ 11e: 33 86 3a 4a storb \$0x3:s,\[r12\]0xa7a:m\(r7,r6\)
+ 122: 34 86 3a 4a storb \$0x3:s,\[r12\]0xa7a:m\(r9,r8\)
+ 126: 35 86 3a 4a storb \$0x3:s,\[r12\]0xa7a:m\(r11,r10\)
+ 12a: 38 86 3a 4a storb \$0x3:s,\[r13\]0xa7a:m\(r1,r0\)
+ 12e: 39 86 3a 4a storb \$0x3:s,\[r13\]0xa7a:m\(r3,r2\)
+ 132: 3e 86 3a 4a storb \$0x3:s,\[r13\]0xa7a:m\(r4,r3\)
+ 136: 3a 86 3a 4a storb \$0x3:s,\[r13\]0xa7a:m\(r5,r4\)
+ 13a: 3f 86 3a 4a storb \$0x3:s,\[r13\]0xa7a:m\(r6,r5\)
+ 13e: 3b 86 3a 4a storb \$0x3:s,\[r13\]0xa7a:m\(r7,r6\)
+ 142: 3c 86 3a 4a storb \$0x3:s,\[r13\]0xa7a:m\(r9,r8\)
+ 146: 3d 86 3a 4a storb \$0x3:s,\[r13\]0xa7a:m\(r11,r10\)
+ 14a: 3e 86 5a 4b storb \$0x5:s,\[r13\]0xb7a:m\(r4,r3\)
+ 14e: 37 86 1a 41 storb \$0x1:s,\[r12\]0x17a:m\(r6,r5\)
+ 152: 3f 86 14 01 storb \$0x1:s,\[r13\]0x134:m\(r6,r5\)
+ 156: 12 00 36 2a storb \$0x3:s,\[r12\]0xabcde:l\(r4,r3\)
+ 15a: de bc
+ 15c: 12 00 5e 20 storb \$0x5:s,\[r13\]0xabcd:l\(r4,r3\)
+ 160: cd ab
+ 162: 12 00 37 20 storb \$0x3:s,\[r12\]0xabcd:l\(r6,r5\)
+ 166: cd ab
+ 168: 12 00 3f 20 storb \$0x3:s,\[r13\]0xbcde:l\(r6,r5\)
+ 16c: de bc
+ 16e: 12 00 52 00 storb \$0x5:s,0x0:l\(r2\)
+ 172: 00 00
+ 174: 3c 83 34 00 storb \$0x3:s,0x34:m\(r12\)
+ 178: 3d 83 ab 00 storb \$0x3:s,0xab:m\(r13\)
+ 17c: 12 00 51 00 storb \$0x5:s,0xad:l\(r1\)
+ 180: ad 00
+ 182: 12 00 52 00 storb \$0x5:s,0xcd:l\(r2\)
+ 186: cd 00
+ 188: 12 00 50 00 storb \$0x5:s,0xfff:l\(r0\)
+ 18c: ff 0f
+ 18e: 12 00 34 00 storb \$0x3:s,0xbcd:l\(r4\)
+ 192: cd 0b
+ 194: 3c 83 ff 0f storb \$0x3:s,0xfff:m\(r12\)
+ 198: 3d 83 ff 0f storb \$0x3:s,0xfff:m\(r13\)
+ 19c: 3d 83 ff ff storb \$0x3:s,0xffff:m\(r13\)
+ 1a0: 3c 83 43 23 storb \$0x3:s,0x2343:m\(r12\)
+ 1a4: 12 00 32 01 storb \$0x3:s,0x2345:l\(r2\)
+ 1a8: 45 23
+ 1aa: 12 00 38 04 storb \$0x3:s,0xabcd:l\(r8\)
+ 1ae: cd ab
+ 1b0: 12 00 3d 1f storb \$0x3:s,0xfabcd:l\(r13\)
+ 1b4: cd ab
+ 1b6: 12 00 38 0f storb \$0x3:s,0xabcd:l\(r8\)
+ 1ba: cd ab
+ 1bc: 12 00 39 0f storb \$0x3:s,0xabcd:l\(r9\)
+ 1c0: cd ab
+ 1c2: 12 00 39 04 storb \$0x3:s,0xabcd:l\(r9\)
+ 1c6: cd ab
+ 1c8: 31 82 storb \$0x3:s,0x0:s\(r2,r1\)
+ 1ca: 51 83 01 00 storb \$0x5:s,0x1:m\(r2,r1\)
+ 1ce: 41 83 34 12 storb \$0x4:s,0x1234:m\(r2,r1\)
+ 1d2: 31 83 34 12 storb \$0x3:s,0x1234:m\(r2,r1\)
+ 1d6: 12 00 31 11 storb \$0x3:s,0x12345:l\(r2,r1\)
+ 1da: 45 23
+ 1dc: 31 83 23 01 storb \$0x3:s,0x123:m\(r2,r1\)
+ 1e0: 12 00 31 11 storb \$0x3:s,0x12345:l\(r2,r1\)
+ 1e4: 45 23
diff --git a/gas/testsuite/gas/cr16/storb_test.s b/gas/testsuite/gas/cr16/storb_test.s
new file mode 100644
index 000000000000..2cd2706ec07c
--- /dev/null
+++ b/gas/testsuite/gas/cr16/storb_test.s
@@ -0,0 +1,143 @@
+ .text
+ .global main
+main:
+ ######################
+ # storb reg abs20/24
+ ######################
+ storb r0,0x0
+ storb r1,0xff
+ storb r3,0xfff
+ storb r4,0x1234
+ storb r5,0x1234
+ storb r0,0x7A1234
+ storb r1,0xBA1234
+ storb r2,0xffffff
+ ######################
+ # storb abs20 rel reg
+ ######################
+ storb r0,[r12]0x0
+ storb r0,[r13]0x0
+ storb r1,[r12]0xff
+ storb r1,[r13]0xff
+ storb r3,[r12]0xfff
+ storb r3,[r13]0xfff
+ storb r4,[r12]0x1234
+ storb r4,[r13]0x1234
+ storb r5,[r12]0x1234
+ storb r5,[r13]0x1234
+ storb r2,[r12]0x4567
+ storb r2,[r13]0xA1234
+ ###################################
+ # storb reg rbase(disp20/-disp20)
+ ###################################
+ storb r1,0x4(r1,r0)
+ storb r3,0x4(r3,r2)
+ storb r4,0x1234(r1,r0)
+ storb r5,0x1234(r3,r2)
+ storb r6,0xA1234(r1,r0)
+ storb r1,-0x4(r1,r0)
+ storb r3,-0x4(r3,r2)
+ storb r4,-0x1234(r1,r0)
+ storb r5,-0x1234(r3,r2)
+ storb r6,-0xA1234(r1,r0)
+ #################################################
+ # storb reg rpbase(disp4/disp16/disp20/-disp20)
+ #################################################
+ storb r0,0x0(r1,r0)
+ storb r0,0x0(r1,r0)
+ storb r0,0xf(r1,r0)
+ storb r1,0xf(r1,r0)
+ storb r2,0x1234(r1,r0)
+ storb r3,0xabcd(r3,r2)
+ storb r4,0xAfff(r4,r3)
+ storb r5,0xA1234(r6,r5)
+ storb r0,-0xf(r1,r0)
+ storb r1,-0xf(r1,r0)
+ storb r2,-0x1234(r1,r0)
+ storb r3,-0xabcd(r3,r2)
+ storb r4,-0xAfff(r4,r3)
+ storb r5,-0xA1234(r6,r5)
+ ####################################
+ # storb rbase(disp0/disp14) rel reg
+ ####################################
+ storb r0,[r12]0x0(r1,r0)
+ storb r1,[r13]0x0(r1,r0)
+ storb r2,[r12]0x1234(r1,r0)
+ storb r3,[r13]0x1abcd(r1,r0)
+ #################################
+ # storb reg rpbase(disp20) rel
+ #################################
+ storb r4,[r12]0xA1234(r1,r0)
+ storb r5,[r13]0xB1234(r1,r0)
+ storb r6,[r13]0xfffff(r1,r0)
+ #######################
+ # storb reg, uimm16/20
+ ######################
+ storb $4,0xbcd
+ storb $5,0xaabcd
+ storb $3,0xfaabcd
+
+ #######################
+ # storb reg, uimm16/20
+ ######################
+ storb $5,[r12]0x14
+ storb $4,[r13]0xabfc
+ storb $3,[r12]0x1234
+ storb $3,[r13]0x1234
+ storb $3,[r12]0x34
+ #######################
+ # storb imm, index-rbase
+ ######################
+ storb $3,[r12]0xa7a(r1,r0)
+ storb $3,[r12]0xa7a(r3,r2)
+ storb $3,[r12]0xa7a(r4,r3)
+ storb $3,[r12]0xa7a(r5,r4)
+ storb $3,[r12]0xa7a(r6,r5)
+ storb $3,[r12]0xa7a(r7,r6)
+ storb $3,[r12]0xa7a(r9,r8)
+ storb $3,[r12]0xa7a(r11,r10)
+ storb $3,[r13]0xa7a(r1,r0)
+ storb $3,[r13]0xa7a(r3,r2)
+ storb $3,[r13]0xa7a(r4,r3)
+ storb $3,[r13]0xa7a(r5,r4)
+ storb $3,[r13]0xa7a(r6,r5)
+ storb $3,[r13]0xa7a(r7,r6)
+ storb $3,[r13]0xa7a(r9,r8)
+ storb $3,[r13]0xa7a(r11,r10)
+ storb $5,[r13]0xb7a(r4,r3)
+ storb $1,[r12]0x17a(r6,r5)
+ storb $1,[r13]0x134(r6,r5)
+ storb $3,[r12]0xabcde(r4,r3)
+ storb $5,[r13]0xabcd(r4,r3)
+ storb $3,[r12]0xabcd(r6,r5)
+ storb $3,[r13]0xbcde(r6,r5)
+ #######################
+ # storb imm4, rbase(disp)
+ ######################
+ storb $5,0x0(r2)
+ storb $3,0x34(r12)
+ storb $3,0xab(r13)
+ storb $5,0xad(r1)
+ storb $5,0xcd(r2)
+ storb $5,0xfff(r0)
+ storb $3,0xbcd(r4)
+ storb $3,0xfff(r12)
+ storb $3,0xfff(r13)
+ storb $3,0xffff(r13)
+ storb $3,0x2343(r12)
+ storb $3,0x12345(r2)
+ storb $3,0x4abcd(r8)
+ storb $3,0xfabcd(r13)
+ storb $3,0xfabcd(r8)
+ storb $3,0xfabcd(r9)
+ storb $3,0x4abcd(r9)
+ ##########################
+ # storb imm, disp20(rpbase)
+ #########################
+ storb $3,0x0(r2,r1)
+ storb $5,0x1(r2,r1)
+ storb $4,0x1234(r2,r1)
+ storb $3,0x1234(r2,r1)
+ storb $3,0x12345(r2,r1)
+ storb $3,0x123(r2,r1)
+ storb $3,0x12345(r2,r1)
diff --git a/gas/testsuite/gas/cr16/stord_test.d b/gas/testsuite/gas/cr16/stord_test.d
new file mode 100644
index 000000000000..9e31b7a886e9
--- /dev/null
+++ b/gas/testsuite/gas/cr16/stord_test.d
@@ -0,0 +1,80 @@
+#as:
+#objdump: -dr
+#name: stord_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 00 c7 00 00 stord \(r1,r0\),0x0 <main>:m
+ 4: 00 c7 ff 00 stord \(r1,r0\),0xff <main\+0xff>:m
+ 8: 20 c7 ff 0f stord \(r3,r2\),0xfff <main\+0xfff>:m
+ c: 30 c7 34 12 stord \(r4,r3\),0x1234 <main\+0x1234>:m
+ 10: 40 c7 34 12 stord \(r5,r4\),0x1234 <main\+0x1234>:m
+ 14: 13 00 07 ba stord \(r1,r0\),0x7a1234 <main\+0x7a1234>:l
+ 18: 34 12
+ 1a: 13 00 0b ba stord \(r1,r0\),0xba1234 <main\+0xba1234>:l
+ 1e: 34 12
+ 20: 13 00 1f bf stord \(r2,r1\),0xffffff <main\+0xffffff>:l
+ 24: ff ff
+ 26: 00 cc 00 00 stord \(r1,r0\),\[r12\]0x0:m
+ 2a: 00 cd 00 00 stord \(r1,r0\),\[r12\]0x0:m
+ 2e: 00 cc ff 00 stord \(r1,r0\),\[r12\]0xff:m
+ 32: 00 cd ff 00 stord \(r1,r0\),\[r12\]0xff:m
+ 36: 20 cc ff 0f stord \(r3,r2\),\[r12\]0xfff:m
+ 3a: 20 cd ff 0f stord \(r3,r2\),\[r12\]0xfff:m
+ 3e: 30 cc 34 12 stord \(r4,r3\),\[r12\]0x1234:m
+ 42: 30 cd 34 12 stord \(r4,r3\),\[r12\]0x1234:m
+ 46: 40 cc 34 12 stord \(r5,r4\),\[r13\]0x1234:m
+ 4a: 40 cd 34 12 stord \(r5,r4\),\[r13\]0x1234:m
+ 4e: 10 cc 67 45 stord \(r2,r1\),\[r12\]0x4567:m
+ 52: 1a cd 34 12 stord \(r2,r1\),\[r12\]0xa1234:m
+ 56: 10 e2 stord \(r2,r1\),0x4:s\(r1,r0\)
+ 58: 22 e2 stord \(r3,r2\),0x4:s\(r3,r2\)
+ 5a: 30 ef 34 12 stord \(r4,r3\),0x1234:m\(r1,r0\)
+ 5e: 42 ef 34 12 stord \(r5,r4\),0x1234:m\(r3,r2\)
+ 62: 13 00 50 9a stord \(r6,r5\),0xa1234:l\(r1,r0\)
+ 66: 34 12
+ 68: 19 00 10 9f stord \(r2,r1\),0xffffc:l\(r1,r0\)
+ 6c: fc ff
+ 6e: 19 00 22 9f stord \(r3,r2\),0xffffc:l\(r3,r2\)
+ 72: fc ff
+ 74: 19 00 30 9f stord \(r4,r3\),0xfedcc:l\(r1,r0\)
+ 78: cc ed
+ 7a: 19 00 42 9f stord \(r5,r4\),0xfedcc:l\(r3,r2\)
+ 7e: cc ed
+ 80: 19 00 50 95 stord \(r6,r5\),0x5edcc:l\(r1,r0\)
+ 84: cc ed
+ 86: 00 e0 stord \(r1,r0\),0x0:s\(r1,r0\)
+ 88: 00 e0 stord \(r1,r0\),0x0:s\(r1,r0\)
+ 8a: 00 ef 0f 00 stord \(r1,r0\),0xf:m\(r1,r0\)
+ 8e: 00 ef 0f 00 stord \(r1,r0\),0xf:m\(r1,r0\)
+ 92: 10 ef 34 12 stord \(r2,r1\),0x1234:m\(r1,r0\)
+ 96: 22 ef cd ab stord \(r3,r2\),0xabcd:m\(r3,r2\)
+ 9a: 33 ef ff af stord \(r4,r3\),0xafff:m\(r4,r3\)
+ 9e: 13 00 65 9a stord \(r7,r6\),0xa1234:l\(r6,r5\)
+ a2: 34 12
+ a4: 19 00 00 9f stord \(r1,r0\),0xffff1:l\(r1,r0\)
+ a8: f1 ff
+ aa: 19 00 00 9f stord \(r1,r0\),0xffff1:l\(r1,r0\)
+ ae: f1 ff
+ b0: 19 00 10 9f stord \(r2,r1\),0xfedcc:l\(r1,r0\)
+ b4: cc ed
+ b6: 19 00 22 9f stord \(r3,r2\),0xf5433:l\(r3,r2\)
+ ba: 33 54
+ bc: 19 00 43 9f stord \(r5,r4\),0xf5001:l\(r4,r3\)
+ c0: 01 50
+ c2: 19 00 45 95 stord \(r5,r4\),0x5edcc:l\(r6,r5\)
+ c6: cc ed
+ c8: 00 ee stord \(r1,r0\),\[r12\]0x0:s\(r1,r0\)
+ ca: 08 ee stord \(r1,r0\),\[r13\]0x0:s\(r1,r0\)
+ cc: b0 c6 04 12 stord \(r12,r11\),\[r12\]0x234:m\(r1,r0\)
+ d0: 13 00 28 a1 stord \(r3,r2\),\[r13\]0x1abcd:l\(r1,r0\)
+ d4: cd ab
+ d6: 13 00 20 aa stord \(r3,r2\),\[r12\]0xa1234:l\(r1,r0\)
+ da: 34 12
+ dc: 13 00 38 ab stord \(r4,r3\),\[r13\]0xb1234:l\(r1,r0\)
+ e0: 34 12
+ e2: 13 00 48 af stord \(r5,r4\),\[r13\]0xfffff:l\(r1,r0\)
+ e6: ff ff
diff --git a/gas/testsuite/gas/cr16/stord_test.s b/gas/testsuite/gas/cr16/stord_test.s
new file mode 100644
index 000000000000..dcac741fc052
--- /dev/null
+++ b/gas/testsuite/gas/cr16/stord_test.s
@@ -0,0 +1,72 @@
+ .text
+ .global main
+main:
+ ######################
+ # stord abs20/24 regp
+ ######################
+ stord (r1,r0),0x0
+ stord (r1,r0),0xff
+ stord (r3,r2),0xfff
+ stord (r4,r3),0x1234
+ stord (r5,r4),0x1234
+ stord (r1,r0),0x7A1234
+ stord (r1,r0),0xBA1234
+ stord (r2,r1),0xffffff
+ ######################
+ # stord abs20 rel regp
+ ######################
+ stord (r1,r0),[r12]0x0
+ stord (r1,r0),[r13]0x0
+ stord (r1,r0),[r12]0xff
+ stord (r1,r0),[r13]0xff
+ stord (r3,r2),[r12]0xfff
+ stord (r3,r2),[r13]0xfff
+ stord (r4,r3),[r12]0x1234
+ stord (r4,r3),[r13]0x1234
+ stord (r5,r4),[r12]0x1234
+ stord (r5,r4),[r13]0x1234
+ stord (r2,r1),[r12]0x4567
+ stord (r2,r1),[r13]0xA1234
+ ###################################
+ # stord regp rbase(disp20/-disp20)
+ ###################################
+ stord (r2,r1),0x4(r1,r0)
+ stord (r3,r2),0x4(r3,r2)
+ stord (r4,r3),0x1234(r1,r0)
+ stord (r5,r4),0x1234(r3,r2)
+ stord (r6,r5),0xA1234(r1,r0)
+ stord (r2,r1),-0x4(r1,r0)
+ stord (r3,r2),-0x4(r3,r2)
+ stord (r4,r3),-0x1234(r1,r0)
+ stord (r5,r4),-0x1234(r3,r2)
+ stord (r6,r5),-0xA1234(r1,r0)
+ #################################################
+ # stord regp rpbase(disp4/disp16/disp20/-disp20)
+ #################################################
+ stord (r1,r0),0x0(r1,r0)
+ stord (r1,r0),0x0(r1,r0)
+ stord (r1,r0),0xf(r1,r0)
+ stord (r1,r0),0xf(r1,r0)
+ stord (r2,r1),0x1234(r1,r0)
+ stord (r3,r2),0xabcd(r3,r2)
+ stord (r4,r3),0xAfff(r4,r3)
+ stord (r7,r6),0xA1234(r6,r5)
+ stord (r1,r0),-0xf(r1,r0)
+ stord (r1,r0),-0xf(r1,r0)
+ stord (r2,r1),-0x1234(r1,r0)
+ stord (r3,r2),-0xabcd(r3,r2)
+ stord (r5,r4),-0xAfff(r4,r3)
+ stord (r5,r4),-0xA1234(r6,r5)
+ ####################################
+ # stord rbase(disp0/disp14) rel reg
+ ####################################
+ stord (r1,r0),[r12]0x0(r1,r0)
+ stord (r1,r0),[r13]0x0(r1,r0)
+ stord (r2,r1),[r12]0x1234(r1,r0)
+ stord (r3,r2),[r13]0x1abcd(r1,r0)
+ #################################
+ # stord rpbase(disp20) rel reg
+ #################################
+ stord (r3,r2),[r12]0xA1234(r1,r0)
+ stord (r4,r3),[r13]0xB1234(r1,r0)
+ stord (r5,r4),[r13]0xfffff(r1,r0)
diff --git a/gas/testsuite/gas/cr16/storm_test.d b/gas/testsuite/gas/cr16/storm_test.d
new file mode 100644
index 000000000000..8e103ba9d665
--- /dev/null
+++ b/gas/testsuite/gas/cr16/storm_test.d
@@ -0,0 +1,25 @@
+#as:
+#objdump: -dr
+#name: storm_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: b0 00 storm \$0x1,r0
+ 2: b1 00 storm \$0x2,r0
+ 4: b2 00 storm \$0x3,r0
+ 6: b3 00 storm \$0x4,r0
+ 8: b4 00 storm \$0x5,r0
+ a: b5 00 storm \$0x6,r0
+ c: b6 00 storm \$0x7,r0
+ e: b7 00 storm \$0x8,r0
+ 10: b8 00 stormp \$0x1,r0
+ 12: b9 00 stormp \$0x2,r0
+ 14: ba 00 stormp \$0x3,r0
+ 16: bb 00 stormp \$0x4,r0
+ 18: bc 00 stormp \$0x5,r0
+ 1a: bd 00 stormp \$0x6,r0
+ 1c: be 00 stormp \$0x7,r0
+ 1e: bf 00 stormp \$0x8,r0
diff --git a/gas/testsuite/gas/cr16/storm_test.s b/gas/testsuite/gas/cr16/storm_test.s
new file mode 100644
index 000000000000..ad5de6117e73
--- /dev/null
+++ b/gas/testsuite/gas/cr16/storm_test.s
@@ -0,0 +1,25 @@
+ .text
+ .global main
+main:
+ ##############
+ # storm cnt
+ ##############
+ storm $1
+ storm $2
+ storm $3
+ storm $4
+ storm $5
+ storm $6
+ storm $7
+ storm $8
+ ##############
+ # stormp cnt
+ ##############
+ stormp $1
+ stormp $2
+ stormp $3
+ stormp $4
+ stormp $5
+ stormp $6
+ stormp $7
+ stormp $8
diff --git a/gas/testsuite/gas/cr16/storw_test.d b/gas/testsuite/gas/cr16/storw_test.d
new file mode 100644
index 000000000000..02b1b6543aee
--- /dev/null
+++ b/gas/testsuite/gas/cr16/storw_test.d
@@ -0,0 +1,153 @@
+#as:
+#objdump: -dr
+#name: storw_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 00 c9 00 00 storw r0,0x0 <main>:m
+ 4: 10 c9 ff 00 storw r1,0xff <main\+0xff>:m
+ 8: 30 c9 ff 0f storw r3,0xfff <main\+0xfff>:m
+ c: 40 c9 34 12 storw r4,0x1234 <main\+0x1234>:m
+ 10: 50 c9 34 12 storw r5,0x1234 <main\+0x1234>:m
+ 14: 13 00 07 fa storw r0,0x7a1234 <main\+0x7a1234>:l
+ 18: 34 12
+ 1a: 13 00 1b fa storw r1,0xba1234 <main\+0xba1234>:l
+ 1e: 34 12
+ 20: 13 00 2f ff storw r2,0xffffff <main\+0xffffff>:l
+ 24: ff ff
+ 26: 00 ce 00 00 storw r0,\[r12\]0x0:m
+ 2a: 00 cf 00 00 storw r0,\[r12\]0x0:m
+ 2e: 10 ce ff 00 storw r1,\[r12\]0xff:m
+ 32: 10 cf ff 00 storw r1,\[r12\]0xff:m
+ 36: 30 ce ff 0f storw r3,\[r12\]0xfff:m
+ 3a: 30 cf ff 0f storw r3,\[r12\]0xfff:m
+ 3e: 40 ce 34 12 storw r4,\[r13\]0x1234:m
+ 42: 40 cf 34 12 storw r4,\[r13\]0x1234:m
+ 46: 50 ce 34 12 storw r5,\[r13\]0x1234:m
+ 4a: 50 cf 34 12 storw r5,\[r13\]0x1234:m
+ 4e: 20 ce 67 45 storw r2,\[r12\]0x4567:m
+ 52: 2a cf 34 12 storw r2,\[r12\]0xa1234:m
+ 56: 10 d2 storw r1,0x4:s\(r1,r0\)
+ 58: 32 d2 storw r3,0x4:s\(r3,r2\)
+ 5a: 40 df 34 12 storw r4,0x1234:m\(r1,r0\)
+ 5e: 52 df 34 12 storw r5,0x1234:m\(r3,r2\)
+ 62: 13 00 60 da storw r6,0xa1234:l\(r1,r0\)
+ 66: 34 12
+ 68: 19 00 10 df storw r1,0xffffc:l\(r1,r0\)
+ 6c: fc ff
+ 6e: 19 00 32 df storw r3,0xffffc:l\(r3,r2\)
+ 72: fc ff
+ 74: 19 00 40 df storw r4,0xfedcc:l\(r1,r0\)
+ 78: cc ed
+ 7a: 19 00 52 df storw r5,0xfedcc:l\(r3,r2\)
+ 7e: cc ed
+ 80: 19 00 60 d5 storw r6,0x5edcc:l\(r1,r0\)
+ 84: cc ed
+ 86: 00 d0 storw r0,0x0:s\(r1,r0\)
+ 88: 00 d0 storw r0,0x0:s\(r1,r0\)
+ 8a: 00 df 0f 00 storw r0,0xf:m\(r1,r0\)
+ 8e: 10 df 0f 00 storw r1,0xf:m\(r1,r0\)
+ 92: 20 df 34 12 storw r2,0x1234:m\(r1,r0\)
+ 96: 32 df cd ab storw r3,0xabcd:m\(r3,r2\)
+ 9a: 43 df ff af storw r4,0xafff:m\(r4,r3\)
+ 9e: 13 00 55 da storw r5,0xa1234:l\(r6,r5\)
+ a2: 34 12
+ a4: 19 00 00 df storw r0,0xffff1:l\(r1,r0\)
+ a8: f1 ff
+ aa: 19 00 10 df storw r1,0xffff1:l\(r1,r0\)
+ ae: f1 ff
+ b0: 19 00 20 df storw r2,0xfedcc:l\(r1,r0\)
+ b4: cc ed
+ b6: 19 00 32 df storw r3,0xf5433:l\(r3,r2\)
+ ba: 33 54
+ bc: 19 00 43 df storw r4,0xf5001:l\(r4,r3\)
+ c0: 01 50
+ c2: 19 00 55 d5 storw r5,0x5edcc:l\(r6,r5\)
+ c6: cc ed
+ c8: 00 de storw r0,\[r12\]0x0:s\(r1,r0\)
+ ca: 18 de storw r1,\[r13\]0x0:s\(r1,r0\)
+ cc: f0 c6 04 12 storw r15,\[r12\]0x234:m\(r1,r0\)
+ d0: 13 00 38 e1 storw r3,\[r13\]0x1abcd:l\(r1,r0\)
+ d4: cd ab
+ d6: 13 00 40 ea storw r4,\[r12\]0xa1234:l\(r1,r0\)
+ da: 34 12
+ dc: 13 00 58 eb storw r5,\[r13\]0xb1234:l\(r1,r0\)
+ e0: 34 12
+ e2: 13 00 68 ef storw r6,\[r13\]0xfffff:l\(r1,r0\)
+ e6: ff ff
+ e8: 40 c1 cd 0b storw \$0x4:s,0xbcd <main\+0xbcd>:m
+ ec: 5a c1 cd ab storw \$0x5:s,0xaabcd <main\+0xaabcd>:m
+ f0: 13 00 3f 3a storw \$0x3:s,0xfaabcd <main\+0xfaabcd>:l
+ f4: cd ab
+ f6: 50 c4 14 00 storw \$0x5:s,\[r13\]0x14:m
+ fa: 40 c5 fc ab storw \$0x4:s,\[r13\]0xabfc:m
+ fe: 30 c4 34 12 storw \$0x3:s,\[r12\]0x1234:m
+ 102: 30 c5 34 12 storw \$0x3:s,\[r12\]0x1234:m
+ 106: 30 c4 34 00 storw \$0x3:s,\[r12\]0x34:m
+ 10a: 30 c6 3a 4a storw \$0x3:s,\[r12\]0xa7a:m\(r1,r0\)
+ 10e: 31 c6 3a 4a storw \$0x3:s,\[r12\]0xa7a:m\(r3,r2\)
+ 112: 36 c6 3a 4a storw \$0x3:s,\[r12\]0xa7a:m\(r4,r3\)
+ 116: 32 c6 3a 4a storw \$0x3:s,\[r12\]0xa7a:m\(r5,r4\)
+ 11a: 37 c6 3a 4a storw \$0x3:s,\[r12\]0xa7a:m\(r6,r5\)
+ 11e: 33 c6 3a 4a storw \$0x3:s,\[r12\]0xa7a:m\(r7,r6\)
+ 122: 34 c6 3a 4a storw \$0x3:s,\[r12\]0xa7a:m\(r9,r8\)
+ 126: 35 c6 3a 4a storw \$0x3:s,\[r12\]0xa7a:m\(r11,r10\)
+ 12a: 38 c6 3a 4a storw \$0x3:s,\[r13\]0xa7a:m\(r1,r0\)
+ 12e: 39 c6 3a 4a storw \$0x3:s,\[r13\]0xa7a:m\(r3,r2\)
+ 132: 3e c6 3a 4a storw \$0x3:s,\[r13\]0xa7a:m\(r4,r3\)
+ 136: 3a c6 3a 4a storw \$0x3:s,\[r13\]0xa7a:m\(r5,r4\)
+ 13a: 3f c6 3a 4a storw \$0x3:s,\[r13\]0xa7a:m\(r6,r5\)
+ 13e: 3b c6 3a 4a storw \$0x3:s,\[r13\]0xa7a:m\(r7,r6\)
+ 142: 3c c6 3a 4a storw \$0x3:s,\[r13\]0xa7a:m\(r9,r8\)
+ 146: 3d c6 3a 4a storw \$0x3:s,\[r13\]0xa7a:m\(r11,r10\)
+ 14a: 3e c6 5a 4b storw \$0x5:s,\[r13\]0xb7a:m\(r4,r3\)
+ 14e: 37 c6 1a 41 storw \$0x1:s,\[r12\]0x17a:m\(r6,r5\)
+ 152: 3f c6 14 01 storw \$0x1:s,\[r13\]0x134:m\(r6,r5\)
+ 156: 13 00 36 2a storw \$0x3:s,\[r12\]0xabcde:l\(r4,r3\)
+ 15a: de bc
+ 15c: 13 00 5e 20 storw \$0x5:s,\[r13\]0xabcd:l\(r4,r3\)
+ 160: cd ab
+ 162: 13 00 37 20 storw \$0x3:s,\[r12\]0xabcd:l\(r6,r5\)
+ 166: cd ab
+ 168: 13 00 3f 20 storw \$0x3:s,\[r13\]0xbcde:l\(r6,r5\)
+ 16c: de bc
+ 16e: 13 00 52 00 storw \$0x5:s,0x0:l\(r2\)
+ 172: 00 00
+ 174: 3c c3 34 00 storw \$0x3:s,0x34:m\(r12\)
+ 178: 3d c3 ab 00 storw \$0x3:s,0xab:m\(r13\)
+ 17c: 13 00 51 00 storw \$0x5:s,0xad:l\(r1\)
+ 180: ad 00
+ 182: 13 00 52 00 storw \$0x5:s,0xcd:l\(r2\)
+ 186: cd 00
+ 188: 13 00 50 00 storw \$0x5:s,0xfff:l\(r0\)
+ 18c: ff 0f
+ 18e: 13 00 34 00 storw \$0x3:s,0xbcd:l\(r4\)
+ 192: cd 0b
+ 194: 3c c3 ff 0f storw \$0x3:s,0xfff:m\(r12\)
+ 198: 3d c3 ff 0f storw \$0x3:s,0xfff:m\(r13\)
+ 19c: 3d c3 ff ff storw \$0x3:s,0xffff:m\(r13\)
+ 1a0: 3c c3 43 23 storw \$0x3:s,0x2343:m\(r12\)
+ 1a4: 13 00 32 01 storw \$0x3:s,0x2345:l\(r2\)
+ 1a8: 45 23
+ 1aa: 13 00 38 04 storw \$0x3:s,0xabcd:l\(r8\)
+ 1ae: cd ab
+ 1b0: 13 00 3d 1f storw \$0x3:s,0xfabcd:l\(r13\)
+ 1b4: cd ab
+ 1b6: 13 00 38 0f storw \$0x3:s,0xabcd:l\(r8\)
+ 1ba: cd ab
+ 1bc: 13 00 39 0f storw \$0x3:s,0xabcd:l\(r9\)
+ 1c0: cd ab
+ 1c2: 13 00 39 04 storw \$0x3:s,0xabcd:l\(r9\)
+ 1c6: cd ab
+ 1c8: 31 c2 storw \$0x3:s,0x0:s\(r2,r1\)
+ 1ca: 51 c3 01 00 storw \$0x5:s,0x1:m\(r2,r1\)
+ 1ce: 41 c3 34 12 storw \$0x4:s,0x1234:m\(r2,r1\)
+ 1d2: 31 c3 34 12 storw \$0x3:s,0x1234:m\(r2,r1\)
+ 1d6: 13 00 31 11 storw \$0x3:s,0x12345:l\(r2,r1\)
+ 1da: 45 23
+ 1dc: 31 c3 23 01 storw \$0x3:s,0x123:m\(r2,r1\)
+ 1e0: 13 00 31 11 storw \$0x3:s,0x12345:l\(r2,r1\)
+ 1e4: 45 23
diff --git a/gas/testsuite/gas/cr16/storw_test.s b/gas/testsuite/gas/cr16/storw_test.s
new file mode 100644
index 000000000000..6adee5cee1ff
--- /dev/null
+++ b/gas/testsuite/gas/cr16/storw_test.s
@@ -0,0 +1,144 @@
+ .text
+ .global main
+main:
+ ######################
+ # storw reg abs20/24
+ ######################
+ storw r0,0x0
+ storw r1,0xff
+ storw r3,0xfff
+ storw r4,0x1234
+ storw r5,0x1234
+ storw r0,0x7A1234
+ storw r1,0xBA1234
+ storw r2,0xffffff
+ ######################
+ # storw abs20 rel reg
+ ######################
+ storw r0,[r12]0x0
+ storw r0,[r13]0x0
+ storw r1,[r12]0xff
+ storw r1,[r13]0xff
+ storw r3,[r12]0xfff
+ storw r3,[r13]0xfff
+ storw r4,[r12]0x1234
+ storw r4,[r13]0x1234
+ storw r5,[r12]0x1234
+ storw r5,[r13]0x1234
+ storw r2,[r12]0x4567
+ storw r2,[r13]0xA1234
+ ###################################
+ # storw reg rbase(disp20/-disp20)
+ ###################################
+ storw r1,0x4(r1,r0)
+ storw r3,0x4(r3,r2)
+ storw r4,0x1234(r1,r0)
+ storw r5,0x1234(r3,r2)
+ storw r6,0xA1234(r1,r0)
+ storw r1,-0x4(r1,r0)
+ storw r3,-0x4(r3,r2)
+ storw r4,-0x1234(r1,r0)
+ storw r5,-0x1234(r3,r2)
+ storw r6,-0xA1234(r1,r0)
+ #################################################
+ # storw reg rpbase(disp4/disp16/disp20/-disp20)
+ #################################################
+ storw r0,0x0(r1,r0)
+ storw r0,0x0(r1,r0)
+ storw r0,0xf(r1,r0)
+ storw r1,0xf(r1,r0)
+ storw r2,0x1234(r1,r0)
+ storw r3,0xabcd(r3,r2)
+ storw r4,0xAfff(r4,r3)
+ storw r5,0xA1234(r6,r5)
+ storw r0,-0xf(r1,r0)
+ storw r1,-0xf(r1,r0)
+ storw r2,-0x1234(r1,r0)
+ storw r3,-0xabcd(r3,r2)
+ storw r4,-0xAfff(r4,r3)
+ storw r5,-0xA1234(r6,r5)
+ ####################################
+ # storw rbase(disp0/disp14) rel reg
+ ####################################
+ storw r0,[r12]0x0(r1,r0)
+ storw r1,[r13]0x0(r1,r0)
+ storw r2,[r12]0x1234(r1,r0)
+ storw r3,[r13]0x1abcd(r1,r0)
+ #################################
+ # storw reg rpbase(disp20) rel
+ #################################
+ storw r4,[r12]0xA1234(r1,r0)
+ storw r5,[r13]0xB1234(r1,r0)
+ storw r6,[r13]0xfffff(r1,r0)
+ #######################
+ # storw reg, uimm16/20
+ ######################
+ storw $4,0xbcd
+ storw $5,0xaabcd
+ storw $3,0xfaabcd
+
+ #######################
+ # storw reg, uimm16/20
+ ######################
+ storw $5,[r12]0x14
+ storw $4,[r13]0xabfc
+ storw $3,[r12]0x1234
+ storw $3,[r13]0x1234
+ storw $3,[r12]0x34
+ #######################
+ # storw imm, index-rbase
+ ######################
+ storw $3,[r12]0xa7a(r1,r0)
+ storw $3,[r12]0xa7a(r3,r2)
+ storw $3,[r12]0xa7a(r4,r3)
+ storw $3,[r12]0xa7a(r5,r4)
+ storw $3,[r12]0xa7a(r6,r5)
+ storw $3,[r12]0xa7a(r7,r6)
+ storw $3,[r12]0xa7a(r9,r8)
+ storw $3,[r12]0xa7a(r11,r10)
+ storw $3,[r13]0xa7a(r1,r0)
+ storw $3,[r13]0xa7a(r3,r2)
+ storw $3,[r13]0xa7a(r4,r3)
+ storw $3,[r13]0xa7a(r5,r4)
+ storw $3,[r13]0xa7a(r6,r5)
+ storw $3,[r13]0xa7a(r7,r6)
+ storw $3,[r13]0xa7a(r9,r8)
+ storw $3,[r13]0xa7a(r11,r10)
+ storw $5,[r13]0xb7a(r4,r3)
+ storw $1,[r12]0x17a(r6,r5)
+ storw $1,[r13]0x134(r6,r5)
+ storw $3,[r12]0xabcde(r4,r3)
+ storw $5,[r13]0xabcd(r4,r3)
+ storw $3,[r12]0xabcd(r6,r5)
+ storw $3,[r13]0xbcde(r6,r5)
+ #######################
+ # storw imm4, rbase(disp)
+ ######################
+ storw $5,0x0(r2)
+ storw $3,0x34(r12)
+ storw $3,0xab(r13)
+ storw $5,0xad(r1)
+ storw $5,0xcd(r2)
+ storw $5,0xfff(r0)
+ storw $3,0xbcd(r4)
+ storw $3,0xfff(r12)
+ storw $3,0xfff(r13)
+ storw $3,0xffff(r13)
+ storw $3,0x2343(r12)
+ storw $3,0x12345(r2)
+ storw $3,0x4abcd(r8)
+ storw $3,0xfabcd(r13)
+ storw $3,0xfabcd(r8)
+ storw $3,0xfabcd(r9)
+ storw $3,0x4abcd(r9)
+ ##########################
+ # storw imm, disp20(rpbase)
+ #########################
+ storw $3,0x0(r2,r1)
+ storw $5,0x1(r2,r1)
+ storw $4,0x1234(r2,r1)
+ storw $3,0x1234(r2,r1)
+ storw $3,0x12345(r2,r1)
+ storw $3,0x123(r2,r1)
+ storw $3,0x12345(r2,r1)
+
diff --git a/gas/testsuite/gas/cr16/sub_test.d b/gas/testsuite/gas/cr16/sub_test.d
new file mode 100644
index 000000000000..1744836588d1
--- /dev/null
+++ b/gas/testsuite/gas/cr16/sub_test.d
@@ -0,0 +1,69 @@
+#as:
+#objdump: -dr
+#name: sub_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: f1 38 subb \$0xf:s,r1
+ 2: b2 38 ff 00 subb \$0xff:m,r2
+ 6: b1 38 ff 0f subb \$0xfff:m,r1
+ a: b1 38 14 00 subb \$0x14:m,r1
+ e: a2 38 subb \$0xa:s,r2
+ 10: 12 39 subb r1,r2
+ 12: 23 39 subb r2,r3
+ 14: 34 39 subb r3,r4
+ 16: 56 39 subb r5,r6
+ 18: 67 39 subb r6,r7
+ 1a: 78 39 subb r7,r8
+ 1c: f1 3c subcb \$0xf:s,r1
+ 1e: b2 3c ff 00 subcb \$0xff:m,r2
+ 22: b1 3c ff 0f subcb \$0xfff:m,r1
+ 26: b1 3c 14 00 subcb \$0x14:m,r1
+ 2a: a2 3c subcb \$0xa:s,r2
+ 2c: 12 3d subcb r1,r2
+ 2e: 23 3d subcb r2,r3
+ 30: 34 3d subcb r3,r4
+ 32: 56 3d subcb r5,r6
+ 34: 67 3d subcb r6,r7
+ 36: 78 3d subcb r7,r8
+ 38: f1 3e subcw \$0xf:s,r1
+ 3a: b2 3e ff 00 subcw \$0xff:m,r2
+ 3e: b1 3e ff 0f subcw \$0xfff:m,r1
+ 42: b1 3e 14 00 subcw \$0x14:m,r1
+ 46: a2 3e subcw \$0xa:s,r2
+ 48: 12 3f subcw r1,r2
+ 4a: 23 3f subcw r2,r3
+ 4c: 34 3f subcw r3,r4
+ 4e: 56 3f subcw r5,r6
+ 50: 67 3f subcw r6,r7
+ 52: 78 3f subcw r7,r8
+ 54: f1 3a subw \$0xf:s,r1
+ 56: b2 3a ff 00 subw \$0xff:m,r2
+ 5a: b1 3a ff 0f subw \$0xfff:m,r1
+ 5e: b1 3a 14 00 subw \$0x14:m,r1
+ 62: a2 3a subw \$0xa:s,r2
+ 64: 12 3b subw r1,r2
+ 66: 23 3b subw r2,r3
+ 68: 34 3b subw r3,r4
+ 6a: 56 3b subw r5,r6
+ 6c: 67 3b subw r6,r7
+ 6e: 78 3b subw r7,r8
+ 70: 31 00 00 00 subd \$0xf:l,\(r2,r1\)
+ 74: 0f 00
+ 76: 31 00 00 00 subd \$0xff:l,\(r2,r1\)
+ 7a: ff 00
+ 7c: 31 00 00 00 subd \$0xfff:l,\(r2,r1\)
+ 80: ff 0f
+ 82: 31 00 00 00 subd \$0xffff:l,\(r2,r1\)
+ 86: ff ff
+ 88: 31 00 0f 00 subd \$0xfffff:l,\(r2,r1\)
+ 8c: ff ff
+ 8e: 31 00 ff 0f subd \$0xfffffff:l,\(r2,r1\)
+ 92: ff ff
+ 94: 31 00 ff ff subd \$0xffffffff:l,\(r2,r1\)
+ 98: ff ff
+ 9a: 14 00 31 c0 subd \(r4,r3\),\(r2,r1\)
+ 9e: 14 00 31 c0 subd \(r4,r3\),\(r2,r1\)
diff --git a/gas/testsuite/gas/cr16/sub_test.s b/gas/testsuite/gas/cr16/sub_test.s
new file mode 100644
index 000000000000..ad0ac07a6ef8
--- /dev/null
+++ b/gas/testsuite/gas/cr16/sub_test.s
@@ -0,0 +1,93 @@
+ .text
+ .global main
+main:
+ ###########
+ # SUBB imm4/imm16, reg
+ ###########
+ subb $0xf,r1
+ subb $0xff,r2
+ subb $0xfff,r1
+ #subb $0xffff,r2 // CHECK WITH CRASM 4.1
+ subb $20,r1
+ subb $10,r2
+ ###########
+ # SUBB reg, reg
+ ###########
+ subb r1,r2
+ subb r2,r3
+ subb r3,r4
+ subb r5,r6
+ subb r6,r7
+ subb r7,r8
+ ###########
+ # SUBCB imm4/imm16, reg
+ ###########
+ subcb $0xf,r1
+ subcb $0xff,r2
+ subcb $0xfff,r1
+ #subcb $0xffff,r2 // CHECK WITH CRASM 4.1
+ subcb $20,r1
+ subcb $10,r2
+ ###########
+ # SUBCB reg, reg
+ ###########
+ subcb r1,r2
+ subcb r2,r3
+ subcb r3,r4
+ subcb r5,r6
+ subcb r6,r7
+ subcb r7,r8
+ ###########
+ # SUBCW imm4/imm16, reg
+ ###########
+ subcw $0xf,r1
+ subcw $0xff,r2
+ subcw $0xfff,r1
+ #subcw $0xffff,r2 // CHECK WITH CRASM 4.1
+ subcw $20,r1
+ subcw $10,r2
+ ###########
+ # SUBCW reg, reg
+ ###########
+ subcw r1,r2
+ subcw r2,r3
+ subcw r3,r4
+ subcw r5,r6
+ subcw r6,r7
+ subcw r7,r8
+ ###########
+ # SUBW imm4/imm16, reg
+ ###########
+ subw $0xf,r1
+ subw $0xff,r2
+ subw $0xfff,r1
+ #subw $0xffff,r2 // CHECK WITH CRASM 4.1
+ subw $20,r1
+ subw $10,r2
+ ###########
+ # SUBW reg, reg
+ ###########
+ subw r1,r2
+ subw r2,r3
+ subw r3,r4
+ subw r5,r6
+ subw r6,r7
+ subw r7,r8
+ ###########
+ # SUBD imm4/imm16/imm32, regp
+ ###########
+ subd $0xf,(r2,r1)
+ subd $0xff,(r2,r1)
+ subd $0xfff,(r2,r1)
+ subd $0xffff,(r2,r1)
+ subd $0xfffff,(r2,r1)
+ subd $0xfffffff,(r2,r1)
+ subd $0xffffffff,(r2,r1)
+ ###########
+ # SUBD regp, regp
+ ###########
+ subd (r4,r3),(r2,r1)
+ subd (r4,r3),(r2,r1)
+ #subd $10,(sp)
+ #subd $14,(sp)
+ #subd $8,(sp)
diff --git a/gas/testsuite/gas/cr16/tbit_test.d b/gas/testsuite/gas/cr16/tbit_test.d
new file mode 100644
index 000000000000..cf5b4993b942
--- /dev/null
+++ b/gas/testsuite/gas/cr16/tbit_test.d
@@ -0,0 +1,37 @@
+#as:
+#objdump: -dr
+#name: tbit_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 00 06 tbit \$0x0:s,r0
+ 2: 11 06 tbit \$0x1:s,r1
+ 4: 22 06 tbit \$0x2:s,r2
+ 6: 33 06 tbit \$0x3:s,r3
+ 8: 44 06 tbit \$0x4:s,r4
+ a: 55 06 tbit \$0x5:s,r5
+ c: 66 06 tbit \$0x6:s,r6
+ e: 77 06 tbit \$0x7:s,r7
+ 10: 88 06 tbit \$0x8:s,r8
+ 12: 99 06 tbit \$0x9:s,r9
+ 14: aa 06 tbit \$0xa:s,r10
+ 16: bb 06 tbit \$0xb:s,r11
+ 18: cc 06 tbit \$0xc:s,r12
+ 1a: dd 06 tbit \$0xd:s,r13
+ 1c: 00 07 tbit r0,r0
+ 1e: 11 07 tbit r1,r1
+ 20: 22 07 tbit r2,r2
+ 22: 33 07 tbit r3,r3
+ 24: 44 07 tbit r4,r4
+ 26: 55 07 tbit r5,r5
+ 28: 66 07 tbit r6,r6
+ 2a: 77 07 tbit r7,r7
+ 2c: 88 07 tbit r8,r8
+ 2e: 99 07 tbit r9,r9
+ 30: aa 07 tbit r10,r10
+ 32: bb 07 tbit r11,r11
+ 34: cc 07 tbit r12,r12
+ 36: dd 07 tbit r13,r13
diff --git a/gas/testsuite/gas/cr16/tbit_test.s b/gas/testsuite/gas/cr16/tbit_test.s
new file mode 100644
index 000000000000..aec79232e4e4
--- /dev/null
+++ b/gas/testsuite/gas/cr16/tbit_test.s
@@ -0,0 +1,41 @@
+ .text
+ .global main
+main:
+ ##################
+ # tbit uimm4, reg
+ #################
+ tbit $0,r0
+ tbit $1,r1
+ tbit $2,r2
+ tbit $3,r3
+ tbit $4,r4
+ tbit $5,r5
+ tbit $6,r6
+ tbit $7,r7
+ tbit $8,r8
+ tbit $9,r9
+ tbit $10,r10
+ tbit $11,r11
+ tbit $12,r12
+ tbit $13,r13
+# tbit $14,r14 // Add error check for these INST
+# tbit $15,r15 // Add error check for these INST
+ ##################
+ # tbit reg, reg
+ #################
+ tbit r0,r0
+ tbit r1,r1
+ tbit r2,r2
+ tbit r3,r3
+ tbit r4,r4
+ tbit r5,r5
+ tbit r6,r6
+ tbit r7,r7
+ tbit r8,r8
+ tbit r9,r9
+ tbit r10,r10
+ tbit r11,r11
+ tbit r12,r12
+ tbit r13,r13
+# tbit r14,r14 // Add error check for these INST
+# tbit r15,r15 // Add error check for these INST
diff --git a/gas/testsuite/gas/cr16/tbitb_test.d b/gas/testsuite/gas/cr16/tbitb_test.d
new file mode 100644
index 000000000000..9965fac585cc
--- /dev/null
+++ b/gas/testsuite/gas/cr16/tbitb_test.d
@@ -0,0 +1,82 @@
+#as:
+#objdump: -dr
+#name: tbitb_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: c0 7b cd 0b tbitb \$0x4,0xbcd <main\+0xbcd>:m
+ 4: da 7b cd ab tbitb \$0x5,0xaabcd <main\+0xaabcd>:m
+ 8: 10 00 3f fa tbitb \$0x3,0xfaabcd <main\+0xfaabcd>:l
+ c: cd ab
+ e: 50 78 14 00 tbitb \$0x5,\[r12\]0x14:m
+ 12: c0 78 fc ab tbitb \$0x4,\[r13\]0xabfc:m
+ 16: 30 78 34 12 tbitb \$0x3,\[r12\]0x1234:m
+ 1a: b0 78 34 12 tbitb \$0x3,\[r13\]0x1234:m
+ 1e: 30 78 34 00 tbitb \$0x3,\[r12\]0x34:m
+ 22: b0 7a 3a 4a tbitb \$0x3,\[r12\]0xa7a:m\(r1,r0\)
+ 26: b1 7a 3a 4a tbitb \$0x3,\[r12\]0xa7a:m\(r3,r2\)
+ 2a: b6 7a 3a 4a tbitb \$0x3,\[r12\]0xa7a:m\(r4,r3\)
+ 2e: b2 7a 3a 4a tbitb \$0x3,\[r12\]0xa7a:m\(r5,r4\)
+ 32: b7 7a 3a 4a tbitb \$0x3,\[r12\]0xa7a:m\(r6,r5\)
+ 36: b3 7a 3a 4a tbitb \$0x3,\[r12\]0xa7a:m\(r7,r6\)
+ 3a: b4 7a 3a 4a tbitb \$0x3,\[r12\]0xa7a:m\(r9,r8\)
+ 3e: b5 7a 3a 4a tbitb \$0x3,\[r12\]0xa7a:m\(r11,r10\)
+ 42: b8 7a 3a 4a tbitb \$0x3,\[r13\]0xa7a:m\(r1,r0\)
+ 46: b9 7a 3a 4a tbitb \$0x3,\[r13\]0xa7a:m\(r3,r2\)
+ 4a: be 7a 3a 4a tbitb \$0x3,\[r13\]0xa7a:m\(r4,r3\)
+ 4e: ba 7a 3a 4a tbitb \$0x3,\[r13\]0xa7a:m\(r5,r4\)
+ 52: bf 7a 3a 4a tbitb \$0x3,\[r13\]0xa7a:m\(r6,r5\)
+ 56: bb 7a 3a 4a tbitb \$0x3,\[r13\]0xa7a:m\(r7,r6\)
+ 5a: bc 7a 3a 4a tbitb \$0x3,\[r13\]0xa7a:m\(r9,r8\)
+ 5e: bd 7a 3a 4a tbitb \$0x3,\[r13\]0xa7a:m\(r11,r10\)
+ 62: be 7a 5a 4b tbitb \$0x5,\[r13\]0xb7a:m\(r4,r3\)
+ 66: b7 7a 1a 41 tbitb \$0x1,\[r12\]0x17a:m\(r6,r5\)
+ 6a: bf 7a 14 01 tbitb \$0x1,\[r13\]0x134:m\(r6,r5\)
+ 6e: 10 00 36 ea tbitb \$0x3,\[r12\]0xabcde:l\(r4,r3\)
+ 72: de bc
+ 74: 10 00 5e e0 tbitb \$0x5,\[r13\]0xabcd:l\(r4,r3\)
+ 78: cd ab
+ 7a: 10 00 37 e0 tbitb \$0x3,\[r12\]0xabcd:l\(r6,r5\)
+ 7e: cd ab
+ 80: 10 00 3f e0 tbitb \$0x3,\[r13\]0xbcde:l\(r6,r5\)
+ 84: de bc
+ 86: 10 00 52 c0 tbitb \$0x5,0x0:l\(r2\)
+ 8a: 00 00
+ 8c: 3c 7b 34 00 tbitb \$0x3,0x34:m\(r12\)
+ 90: 3d 7b ab 00 tbitb \$0x3,0xab:m\(r13\)
+ 94: 10 00 51 c0 tbitb \$0x5,0xad:l\(r1\)
+ 98: ad 00
+ 9a: 10 00 52 c0 tbitb \$0x5,0xcd:l\(r2\)
+ 9e: cd 00
+ a0: 10 00 50 c0 tbitb \$0x5,0xfff:l\(r0\)
+ a4: ff 0f
+ a6: 10 00 34 c0 tbitb \$0x3,0xbcd:l\(r4\)
+ aa: cd 0b
+ ac: 3c 7b ff 0f tbitb \$0x3,0xfff:m\(r12\)
+ b0: 3d 7b ff 0f tbitb \$0x3,0xfff:m\(r13\)
+ b4: 3d 7b ff ff tbitb \$0x3,0xffff:m\(r13\)
+ b8: 3c 7b 43 23 tbitb \$0x3,0x2343:m\(r12\)
+ bc: 10 00 32 c1 tbitb \$0x3,0x2345:l\(r2\)
+ c0: 45 23
+ c2: 10 00 38 c4 tbitb \$0x3,0xabcd:l\(r8\)
+ c6: cd ab
+ c8: 10 00 3d df tbitb \$0x3,0xfabcd:l\(r13\)
+ cc: cd ab
+ ce: 10 00 38 cf tbitb \$0x3,0xabcd:l\(r8\)
+ d2: cd ab
+ d4: 10 00 39 cf tbitb \$0x3,0xabcd:l\(r9\)
+ d8: cd ab
+ da: 10 00 39 c4 tbitb \$0x3,0xabcd:l\(r9\)
+ de: cd ab
+ e0: 31 7a tbitb \$0x3,0x0:s\(r2,r1\)
+ e2: 51 7b 01 00 tbitb \$0x5,0x1:m\(r2,r1\)
+ e6: 41 7b 34 12 tbitb \$0x4,0x1234:m\(r2,r1\)
+ ea: 31 7b 34 12 tbitb \$0x3,0x1234:m\(r2,r1\)
+ ee: 10 00 31 d1 tbitb \$0x3,0x12345:l\(r2,r1\)
+ f2: 45 23
+ f4: 31 7b 23 01 tbitb \$0x3,0x123:m\(r2,r1\)
+ f8: 10 00 31 d1 tbitb \$0x3,0x12345:l\(r2,r1\)
+ fc: 45 23
diff --git a/gas/testsuite/gas/cr16/tbitb_test.s b/gas/testsuite/gas/cr16/tbitb_test.s
new file mode 100644
index 000000000000..7fe427ee02af
--- /dev/null
+++ b/gas/testsuite/gas/cr16/tbitb_test.s
@@ -0,0 +1,62 @@
+ .text
+ .global main
+main:
+ tbitb $4,0xbcd
+ tbitb $5,0xaabcd
+ tbitb $3,0xfaabcd
+
+ tbitb $5,[r12]0x14
+ tbitb $4,[r13]0xabfc
+ tbitb $3,[r12]0x1234
+ tbitb $3,[r13]0x1234
+ tbitb $3,[r12]0x34
+
+ tbitb $3,[r12]0xa7a(r1,r0)
+ tbitb $3,[r12]0xa7a(r3,r2)
+ tbitb $3,[r12]0xa7a(r4,r3)
+ tbitb $3,[r12]0xa7a(r5,r4)
+ tbitb $3,[r12]0xa7a(r6,r5)
+ tbitb $3,[r12]0xa7a(r7,r6)
+ tbitb $3,[r12]0xa7a(r9,r8)
+ tbitb $3,[r12]0xa7a(r11,r10)
+ tbitb $3,[r13]0xa7a(r1,r0)
+ tbitb $3,[r13]0xa7a(r3,r2)
+ tbitb $3,[r13]0xa7a(r4,r3)
+ tbitb $3,[r13]0xa7a(r5,r4)
+ tbitb $3,[r13]0xa7a(r6,r5)
+ tbitb $3,[r13]0xa7a(r7,r6)
+ tbitb $3,[r13]0xa7a(r9,r8)
+ tbitb $3,[r13]0xa7a(r11,r10)
+ tbitb $5,[r13]0xb7a(r4,r3)
+ tbitb $1,[r12]0x17a(r6,r5)
+ tbitb $1,[r13]0x134(r6,r5)
+ tbitb $3,[r12]0xabcde(r4,r3)
+ tbitb $5,[r13]0xabcd(r4,r3)
+ tbitb $3,[r12]0xabcd(r6,r5)
+ tbitb $3,[r13]0xbcde(r6,r5)
+
+ tbitb $5,0x0(r2)
+ tbitb $3,0x34(r12)
+ tbitb $3,0xab(r13)
+ tbitb $5,0xad(r1)
+ tbitb $5,0xcd(r2)
+ tbitb $5,0xfff(r0)
+ tbitb $3,0xbcd(r4)
+ tbitb $3,0xfff(r12)
+ tbitb $3,0xfff(r13)
+ tbitb $3,0xffff(r13)
+ tbitb $3,0x2343(r12)
+ tbitb $3,0x12345(r2)
+ tbitb $3,0x4abcd(r8)
+ tbitb $3,0xfabcd(r13)
+ tbitb $3,0xfabcd(r8)
+ tbitb $3,0xfabcd(r9)
+ tbitb $3,0x4abcd(r9)
+
+ tbitb $3,0x0(r2,r1)
+ tbitb $5,0x1(r2,r1)
+ tbitb $4,0x1234(r2,r1)
+ tbitb $3,0x1234(r2,r1)
+ tbitb $3,0x12345(r2,r1)
+ tbitb $3,0x123(r2,r1)
+ tbitb $3,0x12345(r2,r1)
diff --git a/gas/testsuite/gas/cr16/tbitw_test.d b/gas/testsuite/gas/cr16/tbitw_test.d
new file mode 100644
index 000000000000..81022b1a8cec
--- /dev/null
+++ b/gas/testsuite/gas/cr16/tbitw_test.d
@@ -0,0 +1,155 @@
+#as:
+#objdump: -dr
+#name: tbitw_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 40 7f cd 0b tbitw \$0x4:s,0xbcd <main\+0xbcd>:m
+ 4: 5a 7f cd ab tbitw \$0x5:s,0xaabcd <main\+0xaabcd>:m
+ 8: 11 00 3f fa tbitw \$0x3:s,0xfaabcd <main\+0xfaabcd>:l
+ c: cd ab
+ e: a0 7f cd 0b tbitw \$0xa:s,0xbcd <main\+0xbcd>:m
+ 12: fa 7f cd ab tbitw \$0xf:s,0xaabcd <main\+0xaabcd>:m
+ 16: 11 00 ef fa tbitw \$0xe:s,0xfaabcd <main\+0xfaabcd>:l
+ 1a: cd ab
+ 1c: 50 7c 14 00 tbitw \$0x5:s,\[r13\]0x14:m
+ 20: 40 7d fc ab tbitw \$0x4:s,\[r13\]0xabfc:m
+ 24: 30 7c 34 12 tbitw \$0x3:s,\[r12\]0x1234:m
+ 28: 30 7d 34 12 tbitw \$0x3:s,\[r12\]0x1234:m
+ 2c: 30 7c 34 00 tbitw \$0x3:s,\[r12\]0x34:m
+ 30: f0 7c 14 00 tbitw \$0xf:s,\[r13\]0x14:m
+ 34: e0 7d fc ab tbitw \$0xe:s,\[r13\]0xabfc:m
+ 38: d0 7c 34 12 tbitw \$0xd:s,\[r13\]0x1234:m
+ 3c: d0 7d 34 12 tbitw \$0xd:s,\[r13\]0x1234:m
+ 40: b0 7c 34 00 tbitw \$0xb:s,\[r12\]0x34:m
+ 44: f0 7a 3a 4a tbitw \$0x3:s,\[r12\]0xa7a:m\(r1,r0\)
+ 48: f1 7a 3a 4a tbitw \$0x3:s,\[r12\]0xa7a:m\(r3,r2\)
+ 4c: f6 7a 3a 4a tbitw \$0x3:s,\[r12\]0xa7a:m\(r4,r3\)
+ 50: f2 7a 3a 4a tbitw \$0x3:s,\[r12\]0xa7a:m\(r5,r4\)
+ 54: f7 7a 3a 4a tbitw \$0x3:s,\[r12\]0xa7a:m\(r6,r5\)
+ 58: f3 7a 3a 4a tbitw \$0x3:s,\[r12\]0xa7a:m\(r7,r6\)
+ 5c: f4 7a 3a 4a tbitw \$0x3:s,\[r12\]0xa7a:m\(r9,r8\)
+ 60: f5 7a 3a 4a tbitw \$0x3:s,\[r12\]0xa7a:m\(r11,r10\)
+ 64: f8 7a 3a 4a tbitw \$0x3:s,\[r13\]0xa7a:m\(r1,r0\)
+ 68: f9 7a 3a 4a tbitw \$0x3:s,\[r13\]0xa7a:m\(r3,r2\)
+ 6c: fe 7a 3a 4a tbitw \$0x3:s,\[r13\]0xa7a:m\(r4,r3\)
+ 70: fa 7a 3a 4a tbitw \$0x3:s,\[r13\]0xa7a:m\(r5,r4\)
+ 74: ff 7a 3a 4a tbitw \$0x3:s,\[r13\]0xa7a:m\(r6,r5\)
+ 78: fb 7a 3a 4a tbitw \$0x3:s,\[r13\]0xa7a:m\(r7,r6\)
+ 7c: fc 7a 3a 4a tbitw \$0x3:s,\[r13\]0xa7a:m\(r9,r8\)
+ 80: fd 7a 3a 4a tbitw \$0x3:s,\[r13\]0xa7a:m\(r11,r10\)
+ 84: fe 7a 5a 4b tbitw \$0x5:s,\[r13\]0xb7a:m\(r4,r3\)
+ 88: f7 7a 1a 41 tbitw \$0x1:s,\[r12\]0x17a:m\(r6,r5\)
+ 8c: ff 7a 14 01 tbitw \$0x1:s,\[r13\]0x134:m\(r6,r5\)
+ 90: 11 00 36 ea tbitw \$0x3:s,\[r12\]0xabcde:l\(r4,r3\)
+ 94: de bc
+ 96: 11 00 5e e0 tbitw \$0x5:s,\[r13\]0xabcd:l\(r4,r3\)
+ 9a: cd ab
+ 9c: 11 00 37 e0 tbitw \$0x3:s,\[r12\]0xabcd:l\(r6,r5\)
+ a0: cd ab
+ a2: 11 00 3f e0 tbitw \$0x3:s,\[r13\]0xbcde:l\(r6,r5\)
+ a6: de bc
+ a8: f0 7a da 4a tbitw \$0xd:s,\[r12\]0xafa:m\(r1,r0\)
+ ac: f1 7a da 4a tbitw \$0xd:s,\[r12\]0xafa:m\(r3,r2\)
+ b0: f6 7a da 4a tbitw \$0xd:s,\[r12\]0xafa:m\(r4,r3\)
+ b4: f2 7a da 4a tbitw \$0xd:s,\[r12\]0xafa:m\(r5,r4\)
+ b8: f7 7a da 4a tbitw \$0xd:s,\[r12\]0xafa:m\(r6,r5\)
+ bc: f3 7a da 4a tbitw \$0xd:s,\[r12\]0xafa:m\(r7,r6\)
+ c0: f4 7a da 4a tbitw \$0xd:s,\[r12\]0xafa:m\(r9,r8\)
+ c4: f5 7a da 4a tbitw \$0xd:s,\[r12\]0xafa:m\(r11,r10\)
+ c8: f8 7a da 4a tbitw \$0xd:s,\[r13\]0xafa:m\(r1,r0\)
+ cc: f9 7a da 4a tbitw \$0xd:s,\[r13\]0xafa:m\(r3,r2\)
+ d0: fe 7a da 4a tbitw \$0xd:s,\[r13\]0xafa:m\(r4,r3\)
+ d4: fa 7a da 4a tbitw \$0xd:s,\[r13\]0xafa:m\(r5,r4\)
+ d8: ff 7a da 4a tbitw \$0xd:s,\[r13\]0xafa:m\(r6,r5\)
+ dc: fb 7a da 4a tbitw \$0xd:s,\[r13\]0xafa:m\(r7,r6\)
+ e0: fc 7a da 4a tbitw \$0xd:s,\[r13\]0xafa:m\(r9,r8\)
+ e4: fd 7a da 4a tbitw \$0xd:s,\[r13\]0xafa:m\(r11,r10\)
+ e8: fe 7a fa 4b tbitw \$0xf:s,\[r13\]0xbfa:m\(r4,r3\)
+ ec: f7 7a ba 41 tbitw \$0xb:s,\[r12\]0x1fa:m\(r6,r5\)
+ f0: ff 7a b4 01 tbitw \$0xb:s,\[r13\]0x1b4:m\(r6,r5\)
+ f4: 11 00 d6 ea tbitw \$0xd:s,\[r12\]0xabcde:l\(r4,r3\)
+ f8: de bc
+ fa: 11 00 fe e0 tbitw \$0xf:s,\[r13\]0xabcd:l\(r4,r3\)
+ fe: cd ab
+ 100: 11 00 d7 e0 tbitw \$0xd:s,\[r12\]0xabcd:l\(r6,r5\)
+ 104: cd ab
+ 106: 11 00 df e0 tbitw \$0xd:s,\[r13\]0xbcde:l\(r6,r5\)
+ 10a: de bc
+ 10c: 11 00 52 c0 tbitw \$0x5:s,0x0:l\(r2\)
+ 110: 00 00
+ 112: 3c 79 34 00 tbitw \$0x3:s,0x34:m\(r12\)
+ 116: 3d 79 ab 00 tbitw \$0x3:s,0xab:m\(r13\)
+ 11a: 11 00 51 c0 tbitw \$0x5:s,0xad:l\(r1\)
+ 11e: ad 00
+ 120: 11 00 52 c0 tbitw \$0x5:s,0xcd:l\(r2\)
+ 124: cd 00
+ 126: 11 00 50 c0 tbitw \$0x5:s,0xfff:l\(r0\)
+ 12a: ff 0f
+ 12c: 11 00 34 c0 tbitw \$0x3:s,0xbcd:l\(r4\)
+ 130: cd 0b
+ 132: 3c 79 ff 0f tbitw \$0x3:s,0xfff:m\(r12\)
+ 136: 3d 79 ff 0f tbitw \$0x3:s,0xfff:m\(r13\)
+ 13a: 3d 79 ff ff tbitw \$0x3:s,0xffff:m\(r13\)
+ 13e: 3c 79 43 23 tbitw \$0x3:s,0x2343:m\(r12\)
+ 142: 11 00 32 c1 tbitw \$0x3:s,0x2345:l\(r2\)
+ 146: 45 23
+ 148: 11 00 38 c4 tbitw \$0x3:s,0xabcd:l\(r8\)
+ 14c: cd ab
+ 14e: 11 00 3d df tbitw \$0x3:s,0xfabcd:l\(r13\)
+ 152: cd ab
+ 154: 11 00 38 cf tbitw \$0x3:s,0xabcd:l\(r8\)
+ 158: cd ab
+ 15a: 11 00 39 cf tbitw \$0x3:s,0xabcd:l\(r9\)
+ 15e: cd ab
+ 160: 11 00 39 c4 tbitw \$0x3:s,0xabcd:l\(r9\)
+ 164: cd ab
+ 166: 11 00 f2 c0 tbitw \$0xf:s,0x0:l\(r2\)
+ 16a: 00 00
+ 16c: dc 79 34 00 tbitw \$0xd:s,0x34:m\(r12\)
+ 170: dd 79 ab 00 tbitw \$0xd:s,0xab:m\(r13\)
+ 174: 11 00 f1 c0 tbitw \$0xf:s,0xad:l\(r1\)
+ 178: ad 00
+ 17a: 11 00 f2 c0 tbitw \$0xf:s,0xcd:l\(r2\)
+ 17e: cd 00
+ 180: 11 00 f0 c0 tbitw \$0xf:s,0xfff:l\(r0\)
+ 184: ff 0f
+ 186: 11 00 d4 c0 tbitw \$0xd:s,0xbcd:l\(r4\)
+ 18a: cd 0b
+ 18c: dc 79 ff 0f tbitw \$0xd:s,0xfff:m\(r12\)
+ 190: dd 79 ff 0f tbitw \$0xd:s,0xfff:m\(r13\)
+ 194: dd 79 ff ff tbitw \$0xd:s,0xffff:m\(r13\)
+ 198: dc 79 43 23 tbitw \$0xd:s,0x2343:m\(r12\)
+ 19c: 11 00 d2 c1 tbitw \$0xd:s,0x2345:l\(r2\)
+ 1a0: 45 23
+ 1a2: 11 00 d8 c4 tbitw \$0xd:s,0xabcd:l\(r8\)
+ 1a6: cd ab
+ 1a8: 11 00 dd df tbitw \$0xd:s,0xfabcd:l\(r13\)
+ 1ac: cd ab
+ 1ae: 11 00 d8 cf tbitw \$0xd:s,0xabcd:l\(r8\)
+ 1b2: cd ab
+ 1b4: 11 00 d9 cf tbitw \$0xd:s,0xabcd:l\(r9\)
+ 1b8: cd ab
+ 1ba: 11 00 d9 c4 tbitw \$0xd:s,0xabcd:l\(r9\)
+ 1be: cd ab
+ 1c0: 31 7e tbitw \$0x3:s,0x0:s\(r2,r1\)
+ 1c2: 51 79 01 00 tbitw \$0x5:s,0x1:m\(r2,r1\)
+ 1c6: 41 79 34 12 tbitw \$0x4:s,0x1234:m\(r2,r1\)
+ 1ca: 31 79 34 12 tbitw \$0x3:s,0x1234:m\(r2,r1\)
+ 1ce: 11 00 31 d1 tbitw \$0x3:s,0x12345:l\(r2,r1\)
+ 1d2: 45 23
+ 1d4: 31 79 23 01 tbitw \$0x3:s,0x123:m\(r2,r1\)
+ 1d8: 11 00 31 d1 tbitw \$0x3:s,0x12345:l\(r2,r1\)
+ 1dc: 45 23
+ 1de: d1 7e tbitw \$0xd:s,0x0:s\(r2,r1\)
+ 1e0: f1 79 01 00 tbitw \$0xf:s,0x1:m\(r2,r1\)
+ 1e4: e1 79 34 12 tbitw \$0xe:s,0x1234:m\(r2,r1\)
+ 1e8: d1 79 34 12 tbitw \$0xd:s,0x1234:m\(r2,r1\)
+ 1ec: 11 00 d1 d1 tbitw \$0xd:s,0x12345:l\(r2,r1\)
+ 1f0: 45 23
+ 1f2: d1 79 23 01 tbitw \$0xd:s,0x123:m\(r2,r1\)
+ 1f6: 11 00 d1 d1 tbitw \$0xd:s,0x12345:l\(r2,r1\)
+ 1fa: 45 23
diff --git a/gas/testsuite/gas/cr16/tbitw_test.s b/gas/testsuite/gas/cr16/tbitw_test.s
new file mode 100644
index 000000000000..939804cd0094
--- /dev/null
+++ b/gas/testsuite/gas/cr16/tbitw_test.s
@@ -0,0 +1,117 @@
+ .text
+ .global main
+main:
+ tbitw $4,0xbcd
+ tbitw $5,0xaabcd
+ tbitw $3,0xfaabcd
+ tbitw $10,0xbcd
+ tbitw $15,0xaabcd
+ tbitw $14,0xfaabcd
+
+ tbitw $5,[r12]0x14
+ tbitw $4,[r13]0xabfc
+ tbitw $3,[r12]0x1234
+ tbitw $3,[r13]0x1234
+ tbitw $3,[r12]0x34
+ tbitw $15,[r12]0x14
+ tbitw $14,[r13]0xabfc
+ tbitw $13,[r12]0x1234
+ tbitw $13,[r13]0x1234
+ tbitw $11,[r12]0x34
+
+ tbitw $3,[r12]0xa7a(r1,r0)
+ tbitw $3,[r12]0xa7a(r3,r2)
+ tbitw $3,[r12]0xa7a(r4,r3)
+ tbitw $3,[r12]0xa7a(r5,r4)
+ tbitw $3,[r12]0xa7a(r6,r5)
+ tbitw $3,[r12]0xa7a(r7,r6)
+ tbitw $3,[r12]0xa7a(r9,r8)
+ tbitw $3,[r12]0xa7a(r11,r10)
+ tbitw $3,[r13]0xa7a(r1,r0)
+ tbitw $3,[r13]0xa7a(r3,r2)
+ tbitw $3,[r13]0xa7a(r4,r3)
+ tbitw $3,[r13]0xa7a(r5,r4)
+ tbitw $3,[r13]0xa7a(r6,r5)
+ tbitw $3,[r13]0xa7a(r7,r6)
+ tbitw $3,[r13]0xa7a(r9,r8)
+ tbitw $3,[r13]0xa7a(r11,r10)
+ tbitw $5,[r13]0xb7a(r4,r3)
+ tbitw $1,[r12]0x17a(r6,r5)
+ tbitw $1,[r13]0x134(r6,r5)
+ tbitw $3,[r12]0xabcde(r4,r3)
+ tbitw $5,[r13]0xabcd(r4,r3)
+ tbitw $3,[r12]0xabcd(r6,r5)
+ tbitw $3,[r13]0xbcde(r6,r5)
+ tbitw $13,[r12]0xa7a(r1,r0)
+ tbitw $13,[r12]0xa7a(r3,r2)
+ tbitw $13,[r12]0xa7a(r4,r3)
+ tbitw $13,[r12]0xa7a(r5,r4)
+ tbitw $13,[r12]0xa7a(r6,r5)
+ tbitw $13,[r12]0xa7a(r7,r6)
+ tbitw $13,[r12]0xa7a(r9,r8)
+ tbitw $13,[r12]0xa7a(r11,r10)
+ tbitw $13,[r13]0xa7a(r1,r0)
+ tbitw $13,[r13]0xa7a(r3,r2)
+ tbitw $13,[r13]0xa7a(r4,r3)
+ tbitw $13,[r13]0xa7a(r5,r4)
+ tbitw $13,[r13]0xa7a(r6,r5)
+ tbitw $13,[r13]0xa7a(r7,r6)
+ tbitw $13,[r13]0xa7a(r9,r8)
+ tbitw $13,[r13]0xa7a(r11,r10)
+ tbitw $15,[r13]0xb7a(r4,r3)
+ tbitw $11,[r12]0x17a(r6,r5)
+ tbitw $11,[r13]0x134(r6,r5)
+ tbitw $13,[r12]0xabcde(r4,r3)
+ tbitw $15,[r13]0xabcd(r4,r3)
+ tbitw $13,[r12]0xabcd(r6,r5)
+ tbitw $13,[r13]0xbcde(r6,r5)
+
+ tbitw $5,0x0(r2)
+ tbitw $3,0x34(r12)
+ tbitw $3,0xab(r13)
+ tbitw $5,0xad(r1)
+ tbitw $5,0xcd(r2)
+ tbitw $5,0xfff(r0)
+ tbitw $3,0xbcd(r4)
+ tbitw $3,0xfff(r12)
+ tbitw $3,0xfff(r13)
+ tbitw $3,0xffff(r13)
+ tbitw $3,0x2343(r12)
+ tbitw $3,0x12345(r2)
+ tbitw $3,0x4abcd(r8)
+ tbitw $3,0xfabcd(r13)
+ tbitw $3,0xfabcd(r8)
+ tbitw $3,0xfabcd(r9)
+ tbitw $3,0x4abcd(r9)
+ tbitw $15,0x0(r2)
+ tbitw $13,0x34(r12)
+ tbitw $13,0xab(r13)
+ tbitw $15,0xad(r1)
+ tbitw $15,0xcd(r2)
+ tbitw $15,0xfff(r0)
+ tbitw $13,0xbcd(r4)
+ tbitw $13,0xfff(r12)
+ tbitw $13,0xfff(r13)
+ tbitw $13,0xffff(r13)
+ tbitw $13,0x2343(r12)
+ tbitw $13,0x12345(r2)
+ tbitw $13,0x4abcd(r8)
+ tbitw $13,0xfabcd(r13)
+ tbitw $13,0xfabcd(r8)
+ tbitw $13,0xfabcd(r9)
+ tbitw $13,0x4abcd(r9)
+
+ tbitw $3,0x0(r2,r1)
+ tbitw $5,0x1(r2,r1)
+ tbitw $4,0x1234(r2,r1)
+ tbitw $3,0x1234(r2,r1)
+ tbitw $3,0x12345(r2,r1)
+ tbitw $3,0x123(r2,r1)
+ tbitw $3,0x12345(r2,r1)
+ tbitw $13,0x0(r2,r1)
+ tbitw $15,0x1(r2,r1)
+ tbitw $14,0x1234(r2,r1)
+ tbitw $13,0x1234(r2,r1)
+ tbitw $13,0x12345(r2,r1)
+ tbitw $13,0x123(r2,r1)
+ tbitw $13,0x12345(r2,r1)
diff --git a/gas/testsuite/gas/cr16/xor_test.d b/gas/testsuite/gas/cr16/xor_test.d
new file mode 100644
index 000000000000..57f7e23676e0
--- /dev/null
+++ b/gas/testsuite/gas/cr16/xor_test.d
@@ -0,0 +1,49 @@
+#as:
+#objdump: -dr
+#name: xor_test
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: f1 28 xorb \$0xf:s,r1
+ 2: b2 28 ff 00 xorb \$0xff:m,r2
+ 6: b1 28 ff 0f xorb \$0xfff:m,r1
+ a: b2 28 ff ff xorb \$0xffff:m,r2
+ e: b1 28 14 00 xorb \$0x14:m,r1
+ 12: a2 28 xorb \$0xa:s,r2
+ 14: 12 29 xorb r1,r2
+ 16: 23 29 xorb r2,r3
+ 18: 34 29 xorb r3,r4
+ 1a: 56 29 xorb r5,r6
+ 1c: 67 29 xorb r6,r7
+ 1e: 78 29 xorb r7,r8
+ 20: f1 2a xorw \$0xf:s,r1
+ 22: b2 2a ff 00 xorw \$0xff:m,r2
+ 26: b1 2a ff 0f xorw \$0xfff:m,r1
+ 2a: b2 2a ff ff xorw \$0xffff:m,r2
+ 2e: b1 2a 14 00 xorw \$0x14:m,r1
+ 32: a2 2a xorw \$0xa:s,r2
+ 34: 12 2b xorw r1,r2
+ 36: 23 2b xorw r2,r3
+ 38: 34 2b xorw r3,r4
+ 3a: 56 2b xorw r5,r6
+ 3c: 67 2b xorw r6,r7
+ 3e: 78 2b xorw r7,r8
+ 40: 61 00 00 00 xord \$0xf:l,\(r2,r1\)
+ 44: 0f 00
+ 46: 61 00 00 00 xord \$0xff:l,\(r2,r1\)
+ 4a: ff 00
+ 4c: 61 00 00 00 xord \$0xfff:l,\(r2,r1\)
+ 50: ff 0f
+ 52: 61 00 00 00 xord \$0xffff:l,\(r2,r1\)
+ 56: ff ff
+ 58: 61 00 0f 00 xord \$0xfffff:l,\(r2,r1\)
+ 5c: ff ff
+ 5e: 61 00 ff 0f xord \$0xfffffff:l,\(r2,r1\)
+ 62: ff ff
+ 64: 61 00 ff ff xord \$0xffffffff:l,\(r2,r1\)
+ 68: ff ff
+ 6a: 14 00 31 a0 xord \(r4,r3\),\(r2,r1\)
+ 6e: 14 00 31 a0 xord \(r4,r3\),\(r2,r1\)
diff --git a/gas/testsuite/gas/cr16/xor_test.s b/gas/testsuite/gas/cr16/xor_test.s
new file mode 100644
index 000000000000..b99d103c3b34
--- /dev/null
+++ b/gas/testsuite/gas/cr16/xor_test.s
@@ -0,0 +1,57 @@
+ .text
+ .global main
+main:
+ ###########
+ # XORB imm4/imm16, reg
+ ###########
+ xorb $0xf,r1
+ xorb $0xff,r2
+ xorb $0xfff,r1
+ xorb $0xffff,r2
+ xorb $20,r1
+ xorb $10,r2
+ ###########
+ # XORB reg, reg
+ ###########
+ xorb r1,r2
+ xorb r2,r3
+ xorb r3,r4
+ xorb r5,r6
+ xorb r6,r7
+ xorb r7,r8
+ ###########
+ # XORW imm4/imm16, reg
+ ###########
+ xorw $0xf,r1
+ xorw $0xff,r2
+ xorw $0xfff,r1
+ xorw $0xffff,r2
+ xorw $20,r1
+ xorw $10,r2
+ ###########
+ # XORW reg, reg
+ ###########
+ xorw r1,r2
+ xorw r2,r3
+ xorw r3,r4
+ xorw r5,r6
+ xorw r6,r7
+ xorw r7,r8
+ ###########
+ # XORD imm32, regp
+ ###########
+ xord $0xf,(r2,r1)
+ xord $0xff,(r2,r1)
+ xord $0xfff,(r2,r1)
+ xord $0xffff,(r2,r1)
+ xord $0xfffff,(r2,r1)
+ xord $0xfffffff,(r2,r1)
+ xord $0xffffffff,(r2,r1)
+ ###########
+ # XORD regp, regp
+ ###########
+ xord (r4,r3),(r2,r1)
+ xord (r4,r3),(r2,r1)
+ #xord $10,(sp)
+ #xord $14,(sp)
+ #xord $8,(sp)
diff --git a/gas/testsuite/gas/crx/allinsn.exp b/gas/testsuite/gas/crx/allinsn.exp
index f3f8ae80a58e..2a52f701b5c1 100644
--- a/gas/testsuite/gas/crx/allinsn.exp
+++ b/gas/testsuite/gas/crx/allinsn.exp
@@ -2,19 +2,6 @@
# Driver for CRX assembler testsuite
#
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "CRX $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if {[regexp_diff "dump.out" "${file}.l"] } {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
if ![istarget crx-*-*] {
return
}
diff --git a/gas/testsuite/gas/d10v/address-002.l b/gas/testsuite/gas/d10v/address-002.l
index 2f8c4f596b8e..1ad93db858b5 100644
--- a/gas/testsuite/gas/d10v/address-002.l
+++ b/gas/testsuite/gas/d10v/address-002.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldb r0
diff --git a/gas/testsuite/gas/d10v/address-003.l b/gas/testsuite/gas/d10v/address-003.l
index 2f8c4f596b8e..36068de50a8f 100644
--- a/gas/testsuite/gas/d10v/address-003.l
+++ b/gas/testsuite/gas/d10v/address-003.l
@@ -1,3 +1,4 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldub r0
+
diff --git a/gas/testsuite/gas/d10v/address-004.l b/gas/testsuite/gas/d10v/address-004.l
index 2f8c4f596b8e..a41162138632 100644
--- a/gas/testsuite/gas/d10v/address-004.l
+++ b/gas/testsuite/gas/d10v/address-004.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: stb r0
diff --git a/gas/testsuite/gas/d10v/address-005.l b/gas/testsuite/gas/d10v/address-005.l
index 2f8c4f596b8e..1ad93db858b5 100644
--- a/gas/testsuite/gas/d10v/address-005.l
+++ b/gas/testsuite/gas/d10v/address-005.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldb r0
diff --git a/gas/testsuite/gas/d10v/address-006.l b/gas/testsuite/gas/d10v/address-006.l
index 2f8c4f596b8e..72cff1d71ff1 100644
--- a/gas/testsuite/gas/d10v/address-006.l
+++ b/gas/testsuite/gas/d10v/address-006.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldub r0
diff --git a/gas/testsuite/gas/d10v/address-007.l b/gas/testsuite/gas/d10v/address-007.l
index 2f8c4f596b8e..a41162138632 100644
--- a/gas/testsuite/gas/d10v/address-007.l
+++ b/gas/testsuite/gas/d10v/address-007.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: stb r0
diff --git a/gas/testsuite/gas/d10v/address-008.l b/gas/testsuite/gas/d10v/address-008.l
index 2f8c4f596b8e..1ad93db858b5 100644
--- a/gas/testsuite/gas/d10v/address-008.l
+++ b/gas/testsuite/gas/d10v/address-008.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldb r0
diff --git a/gas/testsuite/gas/d10v/address-009.l b/gas/testsuite/gas/d10v/address-009.l
index 2f8c4f596b8e..72cff1d71ff1 100644
--- a/gas/testsuite/gas/d10v/address-009.l
+++ b/gas/testsuite/gas/d10v/address-009.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldub r0
diff --git a/gas/testsuite/gas/d10v/address-010.l b/gas/testsuite/gas/d10v/address-010.l
index 2f8c4f596b8e..2847fa9b9ee5 100644
--- a/gas/testsuite/gas/d10v/address-010.l
+++ b/gas/testsuite/gas/d10v/address-010.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ld r0
diff --git a/gas/testsuite/gas/d10v/address-011.l b/gas/testsuite/gas/d10v/address-011.l
index 2f8c4f596b8e..688385e4d196 100644
--- a/gas/testsuite/gas/d10v/address-011.l
+++ b/gas/testsuite/gas/d10v/address-011.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ld2w r0
diff --git a/gas/testsuite/gas/d10v/address-012.l b/gas/testsuite/gas/d10v/address-012.l
index 2f8c4f596b8e..a41162138632 100644
--- a/gas/testsuite/gas/d10v/address-012.l
+++ b/gas/testsuite/gas/d10v/address-012.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: stb r0
diff --git a/gas/testsuite/gas/d10v/address-013.l b/gas/testsuite/gas/d10v/address-013.l
index 2f8c4f596b8e..edf420d15df6 100644
--- a/gas/testsuite/gas/d10v/address-013.l
+++ b/gas/testsuite/gas/d10v/address-013.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: st r0
diff --git a/gas/testsuite/gas/d10v/address-014.l b/gas/testsuite/gas/d10v/address-014.l
index 2f8c4f596b8e..49f87bbc3ec2 100644
--- a/gas/testsuite/gas/d10v/address-014.l
+++ b/gas/testsuite/gas/d10v/address-014.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: st2w r0
diff --git a/gas/testsuite/gas/d10v/address-015.l b/gas/testsuite/gas/d10v/address-015.l
index 2f8c4f596b8e..1ad93db858b5 100644
--- a/gas/testsuite/gas/d10v/address-015.l
+++ b/gas/testsuite/gas/d10v/address-015.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldb r0
diff --git a/gas/testsuite/gas/d10v/address-016.l b/gas/testsuite/gas/d10v/address-016.l
index 2f8c4f596b8e..72cff1d71ff1 100644
--- a/gas/testsuite/gas/d10v/address-016.l
+++ b/gas/testsuite/gas/d10v/address-016.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldub r0
diff --git a/gas/testsuite/gas/d10v/address-017.l b/gas/testsuite/gas/d10v/address-017.l
index 2f8c4f596b8e..2847fa9b9ee5 100644
--- a/gas/testsuite/gas/d10v/address-017.l
+++ b/gas/testsuite/gas/d10v/address-017.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ld r0
diff --git a/gas/testsuite/gas/d10v/address-018.l b/gas/testsuite/gas/d10v/address-018.l
index 2f8c4f596b8e..688385e4d196 100644
--- a/gas/testsuite/gas/d10v/address-018.l
+++ b/gas/testsuite/gas/d10v/address-018.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ld2w r0
diff --git a/gas/testsuite/gas/d10v/address-019.l b/gas/testsuite/gas/d10v/address-019.l
index 2f8c4f596b8e..a41162138632 100644
--- a/gas/testsuite/gas/d10v/address-019.l
+++ b/gas/testsuite/gas/d10v/address-019.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: stb r0
diff --git a/gas/testsuite/gas/d10v/address-020.l b/gas/testsuite/gas/d10v/address-020.l
index 2f8c4f596b8e..edf420d15df6 100644
--- a/gas/testsuite/gas/d10v/address-020.l
+++ b/gas/testsuite/gas/d10v/address-020.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: st r0
diff --git a/gas/testsuite/gas/d10v/address-021.l b/gas/testsuite/gas/d10v/address-021.l
index 2f8c4f596b8e..49f87bbc3ec2 100644
--- a/gas/testsuite/gas/d10v/address-021.l
+++ b/gas/testsuite/gas/d10v/address-021.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: st2w r0
diff --git a/gas/testsuite/gas/d10v/address-022.l b/gas/testsuite/gas/d10v/address-022.l
index 2f8c4f596b8e..1ad93db858b5 100644
--- a/gas/testsuite/gas/d10v/address-022.l
+++ b/gas/testsuite/gas/d10v/address-022.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldb r0
diff --git a/gas/testsuite/gas/d10v/address-023.l b/gas/testsuite/gas/d10v/address-023.l
index 2f8c4f596b8e..72cff1d71ff1 100644
--- a/gas/testsuite/gas/d10v/address-023.l
+++ b/gas/testsuite/gas/d10v/address-023.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldub r0
diff --git a/gas/testsuite/gas/d10v/address-024.l b/gas/testsuite/gas/d10v/address-024.l
index 2f8c4f596b8e..a41162138632 100644
--- a/gas/testsuite/gas/d10v/address-024.l
+++ b/gas/testsuite/gas/d10v/address-024.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: stb r0
diff --git a/gas/testsuite/gas/d10v/address-025.l b/gas/testsuite/gas/d10v/address-025.l
index 2f8c4f596b8e..1ad93db858b5 100644
--- a/gas/testsuite/gas/d10v/address-025.l
+++ b/gas/testsuite/gas/d10v/address-025.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldb r0
diff --git a/gas/testsuite/gas/d10v/address-026.l b/gas/testsuite/gas/d10v/address-026.l
index 2f8c4f596b8e..72cff1d71ff1 100644
--- a/gas/testsuite/gas/d10v/address-026.l
+++ b/gas/testsuite/gas/d10v/address-026.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldub r0
diff --git a/gas/testsuite/gas/d10v/address-027.l b/gas/testsuite/gas/d10v/address-027.l
index 2f8c4f596b8e..a41162138632 100644
--- a/gas/testsuite/gas/d10v/address-027.l
+++ b/gas/testsuite/gas/d10v/address-027.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: stb r0
diff --git a/gas/testsuite/gas/d10v/address-030.l b/gas/testsuite/gas/d10v/address-030.l
index 2f8c4f596b8e..1ad93db858b5 100644
--- a/gas/testsuite/gas/d10v/address-030.l
+++ b/gas/testsuite/gas/d10v/address-030.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldb r0
diff --git a/gas/testsuite/gas/d10v/address-031.l b/gas/testsuite/gas/d10v/address-031.l
index 2f8c4f596b8e..72cff1d71ff1 100644
--- a/gas/testsuite/gas/d10v/address-031.l
+++ b/gas/testsuite/gas/d10v/address-031.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldub r0
diff --git a/gas/testsuite/gas/d10v/address-032.l b/gas/testsuite/gas/d10v/address-032.l
index 2f8c4f596b8e..2847fa9b9ee5 100644
--- a/gas/testsuite/gas/d10v/address-032.l
+++ b/gas/testsuite/gas/d10v/address-032.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ld r0
diff --git a/gas/testsuite/gas/d10v/address-033.l b/gas/testsuite/gas/d10v/address-033.l
index 2f8c4f596b8e..688385e4d196 100644
--- a/gas/testsuite/gas/d10v/address-033.l
+++ b/gas/testsuite/gas/d10v/address-033.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ld2w r0
diff --git a/gas/testsuite/gas/d10v/address-034.l b/gas/testsuite/gas/d10v/address-034.l
index 2f8c4f596b8e..a41162138632 100644
--- a/gas/testsuite/gas/d10v/address-034.l
+++ b/gas/testsuite/gas/d10v/address-034.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: stb r0
diff --git a/gas/testsuite/gas/d10v/address-035.l b/gas/testsuite/gas/d10v/address-035.l
index 2f8c4f596b8e..edf420d15df6 100644
--- a/gas/testsuite/gas/d10v/address-035.l
+++ b/gas/testsuite/gas/d10v/address-035.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: st r0
diff --git a/gas/testsuite/gas/d10v/address-036.l b/gas/testsuite/gas/d10v/address-036.l
index 2f8c4f596b8e..49f87bbc3ec2 100644
--- a/gas/testsuite/gas/d10v/address-036.l
+++ b/gas/testsuite/gas/d10v/address-036.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: st2w r0
diff --git a/gas/testsuite/gas/d10v/address-037.l b/gas/testsuite/gas/d10v/address-037.l
index 2f8c4f596b8e..1ad93db858b5 100644
--- a/gas/testsuite/gas/d10v/address-037.l
+++ b/gas/testsuite/gas/d10v/address-037.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldb r0
diff --git a/gas/testsuite/gas/d10v/address-038.l b/gas/testsuite/gas/d10v/address-038.l
index 2f8c4f596b8e..72cff1d71ff1 100644
--- a/gas/testsuite/gas/d10v/address-038.l
+++ b/gas/testsuite/gas/d10v/address-038.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ldub r0
diff --git a/gas/testsuite/gas/d10v/address-039.l b/gas/testsuite/gas/d10v/address-039.l
index 2f8c4f596b8e..2847fa9b9ee5 100644
--- a/gas/testsuite/gas/d10v/address-039.l
+++ b/gas/testsuite/gas/d10v/address-039.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ld r0
diff --git a/gas/testsuite/gas/d10v/address-040.l b/gas/testsuite/gas/d10v/address-040.l
index 2f8c4f596b8e..688385e4d196 100644
--- a/gas/testsuite/gas/d10v/address-040.l
+++ b/gas/testsuite/gas/d10v/address-040.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: ld2w r0
diff --git a/gas/testsuite/gas/d10v/address-041.l b/gas/testsuite/gas/d10v/address-041.l
index 2f8c4f596b8e..a41162138632 100644
--- a/gas/testsuite/gas/d10v/address-041.l
+++ b/gas/testsuite/gas/d10v/address-041.l
@@ -1,3 +1,3 @@
.*: Assembler messages:
.*:6: Error: bad opcode or operands
-.*:6: Fatal error: can't find opcode
+.*:6: Error: could not assemble: stb r0
diff --git a/gas/testsuite/gas/d10v/d10v.exp b/gas/testsuite/gas/d10v/d10v.exp
index 6169ecf1aa63..0b152b016a15 100644
--- a/gas/testsuite/gas/d10v/d10v.exp
+++ b/gas/testsuite/gas/d10v/d10v.exp
@@ -1,19 +1,6 @@
#
# Driver for D10V assembler testsuite
#
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "D10V $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if {[regexp_diff "dump.out" "${file}.l"] } {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
if {[istarget d10v-*-*]} {
run_dump_test "inst"
run_dump_test "address-001"
diff --git a/gas/testsuite/gas/d30v/d30.exp b/gas/testsuite/gas/d30v/d30.exp
index 275b0e06df1d..d06f6066c636 100644
--- a/gas/testsuite/gas/d30v/d30.exp
+++ b/gas/testsuite/gas/d30v/d30.exp
@@ -2,19 +2,6 @@
# D30V assembler tests
#
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "D30V $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if {[regexp_diff "dump.out" "${file}.l"] } {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
if {[istarget d30v-*-*]} {
run_dump_test "inst"
run_dump_test "align"
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
index 43265d0d2fae..227b77ef472e 100644
--- a/gas/testsuite/gas/elf/elf.exp
+++ b/gas/testsuite/gas/elf/elf.exp
@@ -2,7 +2,7 @@
# elf tests
#
-proc run_list_test { name suffix opts readelf_opts readelf_pipe } {
+proc run_elf_list_test { name suffix opts readelf_opts readelf_pipe } {
global READELF
global srcdir subdir
set testname "elf $name list"
@@ -50,11 +50,21 @@ if { ([istarget "*-*-*elf*"]
if {[istarget m32r*-*-*]} then {
set target_machine -m32r
}
+ if {[istarget "score-*-*"]} then {
+ set target_machine -score
+ }
+ if {[istarget "xtensa-*-*"]} then {
+ set target_machine -xtensa
+ }
if { ([istarget "*arm*-*-*"]
- || [istarget "xscale*-*-*"])
- && ([istarget "*-*-*eabi"]
- || [istarget "*-*-symbianelf"])} then {
- set target_machine -armeabi
+ || [istarget "xscale*-*-*"]) } {
+
+ if { ([istarget "*-*-*eabi"]
+ || [istarget "*-*-symbianelf"])} then {
+ set target_machine -armeabi
+ } else {
+ set target_machine -armelf
+ }
}
run_dump_test "ehopt0"
run_dump_test "group0a"
@@ -68,16 +78,22 @@ if { ([istarget "*-*-*elf*"]
{ mips*-*-* } { }
{ *c54x*-*-* } { }
default {
+ # The next test can fail if the target does not convert fixups
+ # against ordinary symbols into relocations against section symbols.
+ # This is usually revealed by the error message:
+ # symbol `sym' required but not present
+ setup_xfail "h8300-*-*" "mn10300-*-*"
run_dump_test redef
+ run_dump_test equ-reloc
}
}
run_dump_test "section0"
run_dump_test "section1"
- run_list_test "section2" "$target_machine" "-al" "-s" ""
+ run_elf_list_test "section2" "$target_machine" "-al" "-s" ""
run_dump_test "section3"
run_dump_test "section4"
- run_list_test "section5" "" "-al" "-SW" "| grep \" \\\\.test\\\[0-9\\\]\""
+ run_elf_list_test "section5" "" "-al" "-SW" "| grep \" \\\\.test\\\[0-9\\\]\""
run_dump_test "struct"
run_dump_test "symver"
- run_list_test "type" "" "" "-s" "| grep \"1 \\\[FONT\\\]\""
+ run_elf_list_test "type" "" "" "-s" "| grep \"1 \\\[FONT\\\]\""
}
diff --git a/gas/testsuite/gas/elf/equ-reloc.d b/gas/testsuite/gas/elf/equ-reloc.d
new file mode 100644
index 000000000000..e4e7d47f47a9
--- /dev/null
+++ b/gas/testsuite/gas/elf/equ-reloc.d
@@ -0,0 +1,13 @@
+#objdump: -rsj .data
+#name: elf equate relocs
+
+.*: +file format .*
+
+RELOCATION RECORDS FOR \[.*\]:
+OFFSET *TYPE *VALUE
+0*0 [^ ]+ +(\.bss(\+0x0*4)?|y1)
+0*4 [^ ]+ +(\.bss(\+0x0*8)?|y2)
+#...
+Contents of section .data:
+ 0000 0[04]00000[04] 0[08]00000[08].*
+#pass
diff --git a/gas/testsuite/gas/elf/equ-reloc.s b/gas/testsuite/gas/elf/equ-reloc.s
new file mode 100644
index 000000000000..efdd0e1b8ab5
--- /dev/null
+++ b/gas/testsuite/gas/elf/equ-reloc.s
@@ -0,0 +1,16 @@
+ .data
+ .long x1, x2
+
+ .global x1, x2, z2
+
+ .set x1, y1
+ .set x2, y2
+ .set x2, z2
+
+ .section .bss, "aw", %nobits
+x1:
+ .zero 4
+y1:
+ .zero 4
+y2:
+ .zero 4
diff --git a/gas/testsuite/gas/elf/section2.e-armeabi b/gas/testsuite/gas/elf/section2.e-armeabi
index 84463b1f8b2b..44ecffc37768 100644
--- a/gas/testsuite/gas/elf/section2.e-armeabi
+++ b/gas/testsuite/gas/elf/section2.e-armeabi
@@ -1,9 +1,10 @@
-Symbol table '.symtab' contains 6 entries:
+Symbol table '.symtab' contains 7 entries:
Num: Value[ ]* Size Type Bind Vis Ndx Name
0: 0+0 0 NOTYPE LOCAL DEFAULT UND
1: 0+0 0 SECTION LOCAL DEFAULT 1
2: 0+0 0 SECTION LOCAL DEFAULT 2
3: 0+0 0 SECTION LOCAL DEFAULT 3
4: 0+0 0 SECTION LOCAL DEFAULT 4
- 5: 0+0 0 SECTION LOCAL DEFAULT 5
+ 5: 0+0 0 NOTYPE LOCAL DEFAULT 4 \$d
+ 6: 0+0 0 SECTION LOCAL DEFAULT 5
diff --git a/gas/testsuite/gas/elf/section2.e-armelf b/gas/testsuite/gas/elf/section2.e-armelf
new file mode 100644
index 000000000000..8d2e4ff6a758
--- /dev/null
+++ b/gas/testsuite/gas/elf/section2.e-armelf
@@ -0,0 +1,9 @@
+
+Symbol table '.symtab' contains 6 entries:
+ Num: Value[ ]* Size Type Bind Vis Ndx Name
+ 0: 0+0 0 NOTYPE LOCAL DEFAULT UND
+ 1: 0+0 0 SECTION LOCAL DEFAULT 1
+ 2: 0+0 0 SECTION LOCAL DEFAULT 2
+ 3: 0+0 0 SECTION LOCAL DEFAULT 3
+ 4: 0+0 0 SECTION LOCAL DEFAULT 4
+ 5: 0+0 0 NOTYPE LOCAL DEFAULT 4 \$d
diff --git a/gas/testsuite/gas/elf/section2.e-score b/gas/testsuite/gas/elf/section2.e-score
new file mode 100644
index 000000000000..6f30cbaa16e4
--- /dev/null
+++ b/gas/testsuite/gas/elf/section2.e-score
@@ -0,0 +1,9 @@
+
+Symbol table '.symtab' contains 6 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 5
+ 5: 00000000 0 SECTION LOCAL DEFAULT 4
diff --git a/gas/testsuite/gas/elf/section2.e-xtensa b/gas/testsuite/gas/elf/section2.e-xtensa
new file mode 100644
index 000000000000..84463b1f8b2b
--- /dev/null
+++ b/gas/testsuite/gas/elf/section2.e-xtensa
@@ -0,0 +1,9 @@
+
+Symbol table '.symtab' contains 6 entries:
+ Num: Value[ ]* Size Type Bind Vis Ndx Name
+ 0: 0+0 0 NOTYPE LOCAL DEFAULT UND
+ 1: 0+0 0 SECTION LOCAL DEFAULT 1
+ 2: 0+0 0 SECTION LOCAL DEFAULT 2
+ 3: 0+0 0 SECTION LOCAL DEFAULT 3
+ 4: 0+0 0 SECTION LOCAL DEFAULT 4
+ 5: 0+0 0 SECTION LOCAL DEFAULT 5
diff --git a/gas/testsuite/gas/frv/allinsn.exp b/gas/testsuite/gas/frv/allinsn.exp
index ed29d20893b3..b6950aeb614c 100644
--- a/gas/testsuite/gas/frv/allinsn.exp
+++ b/gas/testsuite/gas/frv/allinsn.exp
@@ -1,31 +1,19 @@
# FRV assembler testsuite.
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "$name error test ($opts)"
- gas_run $name.s $opts >&dump.out
- if {[regexp_diff dump.out $srcdir/$subdir/$name.l]} {
- fail $testname
- verbose "output is [file_contents dump.out]" 2
- return
- }
- pass $testname
-}
-
if [istarget frv*-*-*] {
run_dump_test "allinsn"
run_dump_test "fdpic"
run_dump_test "reloc1"
run_dump_test "fr405-insn"
- run_list_test "fr405-insn" "-mcpu=fr400"
- run_list_test "fr405-insn" "-mcpu=fr500"
+ run_list_test "fr405-insn" "-mcpu=fr400" "fr405-insn -mcpu=fr400"
+ run_list_test "fr405-insn" "-mcpu=fr500" "fr405-insn -mcpu=fr500"
run_dump_test "fr450-spr"
run_dump_test "fr450-insn"
- run_list_test "fr450-insn" "-mcpu=fr405"
- run_list_test "fr450-insn" "-mcpu=fr400"
- run_list_test "fr450-insn" "-mcpu=fr500"
+ run_list_test "fr450-insn" "-mcpu=fr405" "fr450-insn -mcpu=fr405"
+ run_list_test "fr450-insn" "-mcpu=fr400" "fr450-insn -mcpu=fr400"
+ run_list_test "fr450-insn" "-mcpu=fr500" "fr450-insn -mcpu=fr500"
run_list_test "fr450-media-issue" "-mcpu=fr450"
run_dump_test "fr550-pack1"
diff --git a/gas/testsuite/gas/i386/addr16.d b/gas/testsuite/gas/i386/addr16.d
new file mode 100644
index 000000000000..910d72570fcf
--- /dev/null
+++ b/gas/testsuite/gas/i386/addr16.d
@@ -0,0 +1,15 @@
+#objdump: -drw
+#name: i386 16-bit addressing in 32-bit mode.
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <.text>:
+[ ]*0:[ ]+67 a0 98 08 [ ]+addr16[ ]+mov[ ]+0x898,%al
+[ ]*4:[ ]+67 66 a1 98 08 [ ]+addr16[ ]+mov[ ]+0x898,%ax
+[ ]*9:[ ]+67 a1 98 08 [ ]+addr16[ ]+mov[ ]+0x898,%eax
+[ ]*d:[ ]+67 a2 98 08 [ ]+addr16[ ]+mov[ ]+%al,0x898
+[ ]*11:[ ]+67 66 a3 98 08 [ ]+addr16[ ]+mov[ ]+%ax,0x898
+[ ]*16:[ ]+67 a3 98 08[ ]+addr16[ ]+mov[ ]+%eax,0x898
+#pass
diff --git a/gas/testsuite/gas/i386/addr16.s b/gas/testsuite/gas/i386/addr16.s
new file mode 100644
index 000000000000..b1510e798510
--- /dev/null
+++ b/gas/testsuite/gas/i386/addr16.s
@@ -0,0 +1,7 @@
+ .text
+ addr16 mov 0x0898,%al
+ addr16 mov 0x0898,%ax
+ addr16 mov 0x0898,%eax
+ addr16 mov %al,0x0898
+ addr16 mov %ax,0x0898
+ addr16 mov %eax,0x0898
diff --git a/gas/testsuite/gas/i386/addr32.d b/gas/testsuite/gas/i386/addr32.d
new file mode 100644
index 000000000000..5866a30c7927
--- /dev/null
+++ b/gas/testsuite/gas/i386/addr32.d
@@ -0,0 +1,15 @@
+#objdump: -drw -mi8086
+#name: i386 32-bit addressing in 16-bit mode.
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <.text>:
+[ ]*0:[ ]+67 a0 98 08 60 00[ ]+addr32[ ]+mov[ ]+0x600898,%al
+[ ]*6:[ ]+67 a1 98 08 60 00[ ]+addr32[ ]+mov[ ]+0x600898,%ax
+[ ]*c:[ ]+67 66 a1 98 08 60 00[ ]+addr32[ ]+mov[ ]+0x600898,%eax
+[ ]*13:[ ]+67 a2 98 08 60 00[ ]+addr32[ ]+mov[ ]+%al,0x600898
+[ ]*19:[ ]+67 a3 98 08 60 00[ ]+addr32[ ]+mov[ ]+%ax,0x600898
+[ ]*1f:[ ]+67 66 a3 98 08 60 00[ ]+addr32[ ]+mov[ ]+%eax,0x600898
+#pass
diff --git a/gas/testsuite/gas/i386/addr32.s b/gas/testsuite/gas/i386/addr32.s
new file mode 100644
index 000000000000..3dab339dc256
--- /dev/null
+++ b/gas/testsuite/gas/i386/addr32.s
@@ -0,0 +1,8 @@
+ .text
+ .code16
+ addr32 mov 0x600898,%al
+ addr32 mov 0x600898,%ax
+ addr32 mov 0x600898,%eax
+ addr32 mov %al,0x600898
+ addr32 mov %ax,0x600898
+ addr32 mov %eax,0x600898
diff --git a/gas/testsuite/gas/i386/amd.d b/gas/testsuite/gas/i386/amd.d
index 1ff16792f19f..8009260e50a1 100644
--- a/gas/testsuite/gas/i386/amd.d
+++ b/gas/testsuite/gas/i386/amd.d
@@ -17,7 +17,7 @@ Disassembly of section .text:
27: 0f 0f ae 90 90 00 00 90 [ ]*pfcmpge 0x9090\(%esi\),%mm5
2f: 0f 0f 74 75 00 a0 [ ]*pfcmpgt 0x0\(%ebp,%esi,2\),%mm6
35: 0f 0f 7c 75 02 a4 [ ]*pfmax 0x2\(%ebp,%esi,2\),%mm7
- 3b: 0f 0f 84 75 90 90 90 90 94 [ ]*pfmin 0x90909090\(%ebp,%esi,2\),%mm0
+ 3b: 0f 0f 84 75 90 90 90 90 94 [ ]*pfmin -0x6f6f6f70\(%ebp,%esi,2\),%mm0
44: 0f 0f 0d 04 00 00 00 b4 [ ]*pfmul 0x4,%mm1
4c: 2e 0f 0f 54 c3 07 96 [ ]*pfrcp %cs:0x7\(%ebx,%eax,8\),%mm2
53: 0f 0f d8 a6 [ ]*pfrcpit1 %mm0,%mm3
@@ -27,7 +27,7 @@ Disassembly of section .text:
63: 0f 0f fc 9a [ ]*pfsub %mm4,%mm7
67: 0f 0f c5 aa [ ]*pfsubr %mm5,%mm0
6b: 0f 0f ce 0d [ ]*pi2fd %mm6,%mm1
- 6f: 0f 0f d7 b7 [ ]*pfmulhrw %mm7,%mm2
+ 6f: 0f 0f d7 b7 [ ]*pmulhrw %mm7,%mm2
73: 2e 0f [ ]*\(bad\)
75: 0f 54 c3 [ ]*andps %xmm3,%xmm0
78: 07 [ ]*pop %es
diff --git a/gas/testsuite/gas/i386/amdfam10.d b/gas/testsuite/gas/i386/amdfam10.d
new file mode 100644
index 000000000000..ba63e49bfd1b
--- /dev/null
+++ b/gas/testsuite/gas/i386/amdfam10.d
@@ -0,0 +1,23 @@
+#objdump: -dw
+#name: i386 amdfam10
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <foo>:
+ 0: f3 0f bd 19[ ]+lzcnt \(%ecx\),%ebx
+ 4: 66 f3 0f bd 19[ ]+lzcnt \(%ecx\),%bx
+ 9: f3 0f bd d9[ ]+lzcnt %ecx,%ebx
+ d: 66 f3 0f bd d9[ ]+lzcnt %cx,%bx
+ 12: f3 0f b8 19[ ]+popcnt \(%ecx\),%ebx
+ 16: 66 f3 0f b8 19[ ]+popcnt \(%ecx\),%bx
+ 1b: f3 0f b8 d9[ ]+popcnt %ecx,%ebx
+ 1f: 66 f3 0f b8 d9[ ]+popcnt %cx,%bx
+ 24: 66 0f 79 ca[ ]+extrq %xmm2,%xmm1
+ 28: 66 0f 78 c1 02 04[ ]*extrq \$0x4,\$0x2,%xmm1
+ 2e: f2 0f 79 ca[ ]+insertq %xmm2,%xmm1
+ 32: f2 0f 78 ca 02 04[ ]*insertq \$0x4,\$0x2,%xmm2,%xmm1
+ 38: f2 0f 2b 09[ ]+movntsd %xmm1,\(%ecx\)
+ 3c: f3 0f 2b 09[ ]+movntss %xmm1,\(%ecx\)
+
diff --git a/gas/testsuite/gas/i386/amdfam10.s b/gas/testsuite/gas/i386/amdfam10.s
new file mode 100644
index 000000000000..bef51fee2f38
--- /dev/null
+++ b/gas/testsuite/gas/i386/amdfam10.s
@@ -0,0 +1,21 @@
+#AMDFAM10 New Instructions
+
+ .text
+foo:
+ lzcnt (%ecx),%ebx
+ lzcnt (%ecx),%bx
+ lzcnt %ecx,%ebx
+ lzcnt %cx,%bx
+ popcnt (%ecx),%ebx
+ popcnt (%ecx),%bx
+ popcnt %ecx,%ebx
+ popcnt %cx,%bx
+ extrq %xmm2,%xmm1
+ extrq $4,$2,%xmm1
+ insertq %xmm2,%xmm1
+ insertq $4,$2,%xmm2,%xmm1
+ movntsd %xmm1,(%ecx)
+ movntss %xmm1,(%ecx)
+
+ # Force a good alignment.
+ .p2align 4,0
diff --git a/gas/testsuite/gas/i386/crc32-intel.d b/gas/testsuite/gas/i386/crc32-intel.d
new file mode 100644
index 000000000000..705f6b809838
--- /dev/null
+++ b/gas/testsuite/gas/i386/crc32-intel.d
@@ -0,0 +1,25 @@
+#objdump: -dwMintel
+#name: i386 crc32 (Intel disassembly)
+#source: crc32.s
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <foo>:
+[ ]*[a-f0-9]+: f2 0f 38 f0 06 crc32 eax,BYTE PTR \[esi\]
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 06 crc32 eax,WORD PTR \[esi\]
+[ ]*[a-f0-9]+: f2 0f 38 f1 06 crc32 eax,DWORD PTR \[esi\]
+[ ]*[a-f0-9]+: f2 0f 38 f0 c0 crc32 eax,al
+[ ]*[a-f0-9]+: f2 0f 38 f0 c0 crc32 eax,al
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 c0 crc32 eax,ax
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 c0 crc32 eax,ax
+[ ]*[a-f0-9]+: f2 0f 38 f1 c0 crc32 eax,eax
+[ ]*[a-f0-9]+: f2 0f 38 f1 c0 crc32 eax,eax
+[ ]*[a-f0-9]+: f2 0f 38 f0 06 crc32 eax,BYTE PTR \[esi\]
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 06 crc32 eax,WORD PTR \[esi\]
+[ ]*[a-f0-9]+: f2 0f 38 f1 06 crc32 eax,DWORD PTR \[esi\]
+[ ]*[a-f0-9]+: f2 0f 38 f0 c0 crc32 eax,al
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 c0 crc32 eax,ax
+[ ]*[a-f0-9]+: f2 0f 38 f1 c0 crc32 eax,eax
+#pass
diff --git a/gas/testsuite/gas/i386/crc32.d b/gas/testsuite/gas/i386/crc32.d
new file mode 100644
index 000000000000..a398a75f9a69
--- /dev/null
+++ b/gas/testsuite/gas/i386/crc32.d
@@ -0,0 +1,24 @@
+#objdump: -dw
+#name: i386 crc32
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <foo>:
+[ ]*[a-f0-9]+: f2 0f 38 f0 06 crc32b \(%esi\),%eax
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 06 crc32w \(%esi\),%eax
+[ ]*[a-f0-9]+: f2 0f 38 f1 06 crc32l \(%esi\),%eax
+[ ]*[a-f0-9]+: f2 0f 38 f0 c0 crc32b %al,%eax
+[ ]*[a-f0-9]+: f2 0f 38 f0 c0 crc32b %al,%eax
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 c0 crc32w %ax,%eax
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 c0 crc32w %ax,%eax
+[ ]*[a-f0-9]+: f2 0f 38 f1 c0 crc32l %eax,%eax
+[ ]*[a-f0-9]+: f2 0f 38 f1 c0 crc32l %eax,%eax
+[ ]*[a-f0-9]+: f2 0f 38 f0 06 crc32b \(%esi\),%eax
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 06 crc32w \(%esi\),%eax
+[ ]*[a-f0-9]+: f2 0f 38 f1 06 crc32l \(%esi\),%eax
+[ ]*[a-f0-9]+: f2 0f 38 f0 c0 crc32b %al,%eax
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 c0 crc32w %ax,%eax
+[ ]*[a-f0-9]+: f2 0f 38 f1 c0 crc32l %eax,%eax
+#pass
diff --git a/gas/testsuite/gas/i386/crc32.s b/gas/testsuite/gas/i386/crc32.s
new file mode 100644
index 000000000000..edcfe1c4c0c8
--- /dev/null
+++ b/gas/testsuite/gas/i386/crc32.s
@@ -0,0 +1,24 @@
+# Check crc32 in SSE4.2
+
+ .text
+foo:
+
+crc32b (%esi), %eax
+crc32w (%esi), %eax
+crc32l (%esi), %eax
+crc32 %al, %eax
+crc32b %al, %eax
+crc32 %ax, %eax
+crc32w %ax, %eax
+crc32 %eax, %eax
+crc32l %eax, %eax
+
+.intel_syntax noprefix
+crc32 eax,byte ptr [esi]
+crc32 eax, word ptr [esi]
+crc32 eax,dword ptr [esi]
+crc32 eax,al
+crc32 eax, ax
+crc32 eax,eax
+
+.p2align 4,0
diff --git a/gas/testsuite/gas/i386/fp.d b/gas/testsuite/gas/i386/fp.d
new file mode 100644
index 000000000000..21838e262bc2
--- /dev/null
+++ b/gas/testsuite/gas/i386/fp.d
@@ -0,0 +1,8 @@
+#objdump: -s -j .data
+#name: i386 fp
+
+.*: file format .*
+
+Contents of section .data:
+ 0000 00881bcd 4b789ad4 004071a3 79094f93 ....Kx...@q.y.O.
+ 0010 0a40789a 5440789a 54400000 00000000 .@x.T@x.T@......
diff --git a/gas/testsuite/gas/i386/fp.s b/gas/testsuite/gas/i386/fp.s
new file mode 100644
index 000000000000..4187d4e55c31
--- /dev/null
+++ b/gas/testsuite/gas/i386/fp.s
@@ -0,0 +1,13 @@
+ .data
+# .tfloat is 80-bit floating point format.
+ .tfloat 3.32192809488736218171e0
+# .byte 0x0, 0x88, 0x1b, 0xcd, 0x4b, 0x78, 0x9a, 0xd4, 0x0, 0x40
+# .double is 64-bit floating point format.
+ .double 3.32192809488736218171e0
+# .byte 0x71, 0xa3, 0x79, 0x09, 0x4f, 0x93, 0x0a, 0x40
+# The next two are 32-bit floating point format.
+ .float 3.32192809488736218171e0
+# .byte 0x78, 0x9a, 0x54, 0x40, 0, 0, 0, 0
+ .single 3.32192809488736218171e0
+# .byte 0x78, 0x9a, 0x54, 0x40, 0, 0, 0, 0
+ .byte 0, 0, 0, 0, 0, 0
diff --git a/gas/testsuite/gas/i386/gotpc.d b/gas/testsuite/gas/i386/gotpc.d
index 499e831c1b45..ef79cbd78322 100644
--- a/gas/testsuite/gas/i386/gotpc.d
+++ b/gas/testsuite/gas/i386/gotpc.d
@@ -49,4 +49,6 @@ Disassembly of section .text:
e0: e0 00 [ ]*loopne e2 <test\+0xe2> e0: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
e2: 00 00 [ ]*add %al,\(%eax\)
e4: 00 00 [ ]*add %al,\(%eax\) e4: (R_386_)?GOTOFF _GLOBAL_OFFSET_TABLE_
- ...
+ e6: 00 00 [ ]*add %al,\(%eax\)
+ e8: 8b 83 00 00 00 00 [ ]*mov 0x0\(%ebx\),%eax ea: (R_386_)?GOTOFF _GLOBAL_OFFSET_TABLE_
+#pass
diff --git a/gas/testsuite/gas/i386/gotpc.s b/gas/testsuite/gas/i386/gotpc.s
index 5787b8e8f88c..fc771f6cff55 100644
--- a/gas/testsuite/gas/i386/gotpc.s
+++ b/gas/testsuite/gas/i386/gotpc.s
@@ -38,3 +38,4 @@ test:
movl _GLOBAL_OFFSET_TABLE_@GOTOFF(%ebx), %ebx
.long _GLOBAL_OFFSET_TABLE_+[.-test]
.long _GLOBAL_OFFSET_TABLE_@GOTOFF
+ movl _GLOBAL_OFFSET_TABLE_@GOTOFF (%ebx), %eax
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index a12bc91fb210..8f0437c47381 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -1,19 +1,6 @@
#
# i386 tests
#
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "i386 $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
proc gas_64_check { } {
global NM
global NMFLAGS
@@ -46,6 +33,8 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_32_check]]
run_list_test "modrm" "-al --listing-lhs-width=2"
run_dump_test "naked"
run_dump_test "opcode"
+ run_dump_test "opcode-intel"
+ run_dump_test "opcode-suffix"
run_dump_test "intel"
run_dump_test "intel16"
run_list_test "intelbad" ""
@@ -68,9 +57,29 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_32_check]]
run_dump_test "crx"
run_list_test "cr-err" ""
run_dump_test "svme"
+ run_dump_test "amdfam10"
run_dump_test "merom"
run_dump_test "rep"
run_dump_test "rep-suffix"
+ run_dump_test "fp"
+ run_dump_test "nops"
+ run_dump_test "nops-1"
+ run_dump_test "nops-1-i386"
+ run_dump_test "nops-1-i686"
+ run_dump_test "nops-1-merom"
+ run_dump_test "nops-2"
+ run_dump_test "nops-2-i386"
+ run_dump_test "nops-2-merom"
+ run_dump_test "nops-3"
+ run_dump_test "addr16"
+ run_dump_test "addr32"
+ run_dump_test "sse4_1"
+ run_dump_test "sse4_2"
+ run_dump_test "crc32"
+ run_dump_test "crc32-intel"
+ run_list_test "inval-crc32" "-al"
+ run_dump_test "simd"
+ run_dump_test "simd-intel"
# These tests require support for 8 and 16 bit relocs,
# so we only run them for ELF and COFF targets.
@@ -121,9 +130,11 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t
run_dump_test "x86_64"
run_dump_test "x86-64-addr32"
+ run_dump_test "x86-64-addr32-intel"
run_dump_test "x86-64-opcode"
run_dump_test "x86-64-pcrel"
run_dump_test "x86-64-rip"
+ run_dump_test "x86-64-rip-intel"
run_dump_test "x86-64-stack"
run_dump_test "x86-64-stack-intel"
run_dump_test "x86-64-stack-suffix"
@@ -132,6 +143,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t
run_list_test "x86-64-inval-seg" "-al"
run_dump_test "x86-64-branch"
run_dump_test "svme64"
+ run_dump_test "x86-64-amdfam10"
run_dump_test "x86-64-vmx"
run_dump_test "immed64"
run_dump_test "x86-64-prescott"
@@ -142,6 +154,26 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t
run_dump_test "x86-64-merom"
run_dump_test "x86-64-rep"
run_dump_test "x86-64-rep-suffix"
+ run_dump_test "x86-64-cbw"
+ run_dump_test "x86-64-cbw-intel"
+ run_dump_test "x86-64-io"
+ run_dump_test "x86-64-io-intel"
+ run_dump_test "x86-64-io-suffix"
+ run_dump_test "x86-64-gidt"
+ run_dump_test "x86-64-nops"
+ if ![istarget "x86_64-*-mingw*"] then {
+ run_dump_test "x86-64-nops-1"
+ }
+ run_dump_test "x86-64-nops-1-k8"
+ run_dump_test "x86-64-nops-1-nocona"
+ run_dump_test "x86-64-nops-1-merom"
+ run_dump_test "x86-64-sse4_1"
+ run_dump_test "x86-64-sse4_2"
+ run_dump_test "x86-64-crc32"
+ run_dump_test "x86-64-crc32-intel"
+ run_list_test "x86-64-inval-crc32" "-al"
+ run_dump_test "x86-64-simd"
+ run_dump_test "x86-64-simd-intel"
if { ![istarget "*-*-aix*"]
&& ![istarget "*-*-beos*"]
diff --git a/gas/testsuite/gas/i386/immed32.d b/gas/testsuite/gas/i386/immed32.d
index 3d308a833b4a..d22538fb4fb5 100644
--- a/gas/testsuite/gas/i386/immed32.d
+++ b/gas/testsuite/gas/i386/immed32.d
@@ -9,9 +9,9 @@ Disassembly of section \.text:
[ ]*[0-9a-fA-F]+:[ ]+ff 50 04[ ]+calll? +\*0x4\(%eax\)
[ ]*[0-9a-fA-F]+:[ ]+ff 90 08 00 00 00[ ]+calll? +\*0x8\(%eax\)
[ ]*[0-9a-fA-F]+:[ ]+ff 90 00 00 00 00[ ]+calll? +\*0x0\(%eax\)
-[ ]*[0-9a-fA-F]+:[ ]+67 ff 57 04[ ]+(addr16 )?calll? +\*4\(%bx\)
-[ ]*[0-9a-fA-F]+:[ ]+67 ff 97 08 00[ ]+(addr16 )?calll? +\*8\(%bx\)
-[ ]*[0-9a-fA-F]+:[ ]+67 ff 97 00 00[ ]+(addr16 )?calll? +\*0\(%bx\)
+[ ]*[0-9a-fA-F]+:[ ]+67 ff 57 04[ ]+(addr16 )?calll? +\*0x4\(%bx\)
+[ ]*[0-9a-fA-F]+:[ ]+67 ff 97 08 00[ ]+(addr16 )?calll? +\*0x8\(%bx\)
+[ ]*[0-9a-fA-F]+:[ ]+67 ff 97 00 00[ ]+(addr16 )?calll? +\*0x0\(%bx\)
[ ]*[0-9a-fA-F]+:[ ]+b0 04[ ]+movb? +\$0x4,%al
[ ]*[0-9a-fA-F]+:[ ]+b0 08[ ]+movb? +\$0x8,%al
[ ]*[0-9a-fA-F]+:[ ]+b0 00[ ]+movb? +\$0x0,%al
diff --git a/gas/testsuite/gas/i386/immed64.d b/gas/testsuite/gas/i386/immed64.d
index c2ab3248b7d6..667680675a58 100644
--- a/gas/testsuite/gas/i386/immed64.d
+++ b/gas/testsuite/gas/i386/immed64.d
@@ -57,3 +57,4 @@ Disassembly of section \.text:
[ ]*[0-9a-fA-F]+:[ ]+e5 04[ ]+inl? +\$0x4,%eax
[ ]*[0-9a-fA-F]+:[ ]+e5 08[ ]+inl? +\$0x8,%eax
[ ]*[0-9a-fA-F]+:[ ]+e5 00[ ]+inl? +\$0x0,%eax
+#pass
diff --git a/gas/testsuite/gas/i386/intel.d b/gas/testsuite/gas/i386/intel.d
index 02b1a0a197f5..f8a96dfd7327 100644
--- a/gas/testsuite/gas/i386/intel.d
+++ b/gas/testsuite/gas/i386/intel.d
@@ -8,62 +8,62 @@
Disassembly of section .text:
0+000 <foo>:
- 0: 00 90 90 90 90 90 [ ]*add %dl,0x90909090\(%eax\)
- 6: 01 90 90 90 90 90 [ ]*add %edx,0x90909090\(%eax\)
- c: 02 90 90 90 90 90 [ ]*add 0x90909090\(%eax\),%dl
- 12: 03 90 90 90 90 90 [ ]*add 0x90909090\(%eax\),%edx
+ 0: 00 90 90 90 90 90 [ ]*add %dl,-0x6f6f6f70\(%eax\)
+ 6: 01 90 90 90 90 90 [ ]*add %edx,-0x6f6f6f70\(%eax\)
+ c: 02 90 90 90 90 90 [ ]*add -0x6f6f6f70\(%eax\),%dl
+ 12: 03 90 90 90 90 90 [ ]*add -0x6f6f6f70\(%eax\),%edx
18: 04 90 [ ]*add \$0x90,%al
1a: 05 90 90 90 90 [ ]*add \$0x90909090,%eax
1f: 06 [ ]*push %es
20: 07 [ ]*pop %es
- 21: 08 90 90 90 90 90 [ ]*or %dl,0x90909090\(%eax\)
- 27: 09 90 90 90 90 90 [ ]*or %edx,0x90909090\(%eax\)
- 2d: 0a 90 90 90 90 90 [ ]*or 0x90909090\(%eax\),%dl
- 33: 0b 90 90 90 90 90 [ ]*or 0x90909090\(%eax\),%edx
+ 21: 08 90 90 90 90 90 [ ]*or %dl,-0x6f6f6f70\(%eax\)
+ 27: 09 90 90 90 90 90 [ ]*or %edx,-0x6f6f6f70\(%eax\)
+ 2d: 0a 90 90 90 90 90 [ ]*or -0x6f6f6f70\(%eax\),%dl
+ 33: 0b 90 90 90 90 90 [ ]*or -0x6f6f6f70\(%eax\),%edx
39: 0c 90 [ ]*or \$0x90,%al
3b: 0d 90 90 90 90 [ ]*or \$0x90909090,%eax
40: 0e [ ]*push %cs
- 41: 10 90 90 90 90 90 [ ]*adc %dl,0x90909090\(%eax\)
- 47: 11 90 90 90 90 90 [ ]*adc %edx,0x90909090\(%eax\)
- 4d: 12 90 90 90 90 90 [ ]*adc 0x90909090\(%eax\),%dl
- 53: 13 90 90 90 90 90 [ ]*adc 0x90909090\(%eax\),%edx
+ 41: 10 90 90 90 90 90 [ ]*adc %dl,-0x6f6f6f70\(%eax\)
+ 47: 11 90 90 90 90 90 [ ]*adc %edx,-0x6f6f6f70\(%eax\)
+ 4d: 12 90 90 90 90 90 [ ]*adc -0x6f6f6f70\(%eax\),%dl
+ 53: 13 90 90 90 90 90 [ ]*adc -0x6f6f6f70\(%eax\),%edx
59: 14 90 [ ]*adc \$0x90,%al
5b: 15 90 90 90 90 [ ]*adc \$0x90909090,%eax
60: 16 [ ]*push %ss
61: 17 [ ]*pop %ss
- 62: 18 90 90 90 90 90 [ ]*sbb %dl,0x90909090\(%eax\)
- 68: 19 90 90 90 90 90 [ ]*sbb %edx,0x90909090\(%eax\)
- 6e: 1a 90 90 90 90 90 [ ]*sbb 0x90909090\(%eax\),%dl
- 74: 1b 90 90 90 90 90 [ ]*sbb 0x90909090\(%eax\),%edx
+ 62: 18 90 90 90 90 90 [ ]*sbb %dl,-0x6f6f6f70\(%eax\)
+ 68: 19 90 90 90 90 90 [ ]*sbb %edx,-0x6f6f6f70\(%eax\)
+ 6e: 1a 90 90 90 90 90 [ ]*sbb -0x6f6f6f70\(%eax\),%dl
+ 74: 1b 90 90 90 90 90 [ ]*sbb -0x6f6f6f70\(%eax\),%edx
7a: 1c 90 [ ]*sbb \$0x90,%al
7c: 1d 90 90 90 90 [ ]*sbb \$0x90909090,%eax
81: 1e [ ]*push %ds
82: 1f [ ]*pop %ds
- 83: 20 90 90 90 90 90 [ ]*and %dl,0x90909090\(%eax\)
- 89: 21 90 90 90 90 90 [ ]*and %edx,0x90909090\(%eax\)
- 8f: 22 90 90 90 90 90 [ ]*and 0x90909090\(%eax\),%dl
- 95: 23 90 90 90 90 90 [ ]*and 0x90909090\(%eax\),%edx
+ 83: 20 90 90 90 90 90 [ ]*and %dl,-0x6f6f6f70\(%eax\)
+ 89: 21 90 90 90 90 90 [ ]*and %edx,-0x6f6f6f70\(%eax\)
+ 8f: 22 90 90 90 90 90 [ ]*and -0x6f6f6f70\(%eax\),%dl
+ 95: 23 90 90 90 90 90 [ ]*and -0x6f6f6f70\(%eax\),%edx
9b: 24 90 [ ]*and \$0x90,%al
9d: 25 90 90 90 90 [ ]*and \$0x90909090,%eax
a2: 27 [ ]*daa
- a3: 28 90 90 90 90 90 [ ]*sub %dl,0x90909090\(%eax\)
- a9: 29 90 90 90 90 90 [ ]*sub %edx,0x90909090\(%eax\)
- af: 2a 90 90 90 90 90 [ ]*sub 0x90909090\(%eax\),%dl
- b5: 2b 90 90 90 90 90 [ ]*sub 0x90909090\(%eax\),%edx
+ a3: 28 90 90 90 90 90 [ ]*sub %dl,-0x6f6f6f70\(%eax\)
+ a9: 29 90 90 90 90 90 [ ]*sub %edx,-0x6f6f6f70\(%eax\)
+ af: 2a 90 90 90 90 90 [ ]*sub -0x6f6f6f70\(%eax\),%dl
+ b5: 2b 90 90 90 90 90 [ ]*sub -0x6f6f6f70\(%eax\),%edx
bb: 2c 90 [ ]*sub \$0x90,%al
bd: 2d 90 90 90 90 [ ]*sub \$0x90909090,%eax
c2: 2f [ ]*das
- c3: 30 90 90 90 90 90 [ ]*xor %dl,0x90909090\(%eax\)
- c9: 31 90 90 90 90 90 [ ]*xor %edx,0x90909090\(%eax\)
- cf: 32 90 90 90 90 90 [ ]*xor 0x90909090\(%eax\),%dl
- d5: 33 90 90 90 90 90 [ ]*xor 0x90909090\(%eax\),%edx
+ c3: 30 90 90 90 90 90 [ ]*xor %dl,-0x6f6f6f70\(%eax\)
+ c9: 31 90 90 90 90 90 [ ]*xor %edx,-0x6f6f6f70\(%eax\)
+ cf: 32 90 90 90 90 90 [ ]*xor -0x6f6f6f70\(%eax\),%dl
+ d5: 33 90 90 90 90 90 [ ]*xor -0x6f6f6f70\(%eax\),%edx
db: 34 90 [ ]*xor \$0x90,%al
dd: 35 90 90 90 90 [ ]*xor \$0x90909090,%eax
e2: 37 [ ]*aaa
- e3: 38 90 90 90 90 90 [ ]*cmp %dl,0x90909090\(%eax\)
- e9: 39 90 90 90 90 90 [ ]*cmp %edx,0x90909090\(%eax\)
- ef: 3a 90 90 90 90 90 [ ]*cmp 0x90909090\(%eax\),%dl
- f5: 3b 90 90 90 90 90 [ ]*cmp 0x90909090\(%eax\),%edx
+ e3: 38 90 90 90 90 90 [ ]*cmp %dl,-0x6f6f6f70\(%eax\)
+ e9: 39 90 90 90 90 90 [ ]*cmp %edx,-0x6f6f6f70\(%eax\)
+ ef: 3a 90 90 90 90 90 [ ]*cmp -0x6f6f6f70\(%eax\),%dl
+ f5: 3b 90 90 90 90 90 [ ]*cmp -0x6f6f6f70\(%eax\),%edx
fb: 3c 90 [ ]*cmp \$0x90,%al
fd: 3d 90 90 90 90 [ ]*cmp \$0x90909090,%eax
102: 3f [ ]*aas
@@ -101,12 +101,12 @@ Disassembly of section .text:
122: 5f [ ]*pop %edi
123: 60 [ ]*pusha
124: 61 [ ]*popa
- 125: 62 90 90 90 90 90 [ ]*bound %edx,0x90909090\(%eax\)
- 12b: 63 90 90 90 90 90 [ ]*arpl %dx,0x90909090\(%eax\)
+ 125: 62 90 90 90 90 90 [ ]*bound %edx,-0x6f6f6f70\(%eax\)
+ 12b: 63 90 90 90 90 90 [ ]*arpl %dx,-0x6f6f6f70\(%eax\)
131: 68 90 90 90 90 [ ]*push \$0x90909090
- 136: 69 90 90 90 90 90 90 90 90 90 [ ]*imul \$0x90909090,0x90909090\(%eax\),%edx
+ 136: 69 90 90 90 90 90 90 90 90 90 [ ]*imul \$0x90909090,-0x6f6f6f70\(%eax\),%edx
140: 6a 90 [ ]*push \$0xffffff90
- 142: 6b 90 90 90 90 90 90 [ ]*imul \$0xffffff90,0x90909090\(%eax\),%edx
+ 142: 6b 90 90 90 90 90 90 [ ]*imul \$0xffffff90,-0x6f6f6f70\(%eax\),%edx
149: 6c [ ]*insb \(%dx\),%es:\(%edi\)
14a: 6d [ ]*insl \(%dx\),%es:\(%edi\)
14b: 6e [ ]*outsb %ds:\(%esi\),\(%dx\)
@@ -127,21 +127,21 @@ Disassembly of section .text:
167: 7d 90 [ ]*jge (0x)?f9.*
169: 7e 90 [ ]*jle (0x)?fb.*
16b: 7f 90 [ ]*jg (0x)?fd.*
- 16d: 80 90 90 90 90 90 90 [ ]*adcb \$0x90,0x90909090\(%eax\)
- 174: 81 90 90 90 90 90 90 90 90 90 [ ]*adcl \$0x90909090,0x90909090\(%eax\)
- 17e: 83 90 90 90 90 90 90 [ ]*adcl \$0xffffff90,0x90909090\(%eax\)
- 185: 84 90 90 90 90 90 [ ]*test %dl,0x90909090\(%eax\)
- 18b: 85 90 90 90 90 90 [ ]*test %edx,0x90909090\(%eax\)
- 191: 86 90 90 90 90 90 [ ]*xchg %dl,0x90909090\(%eax\)
- 197: 87 90 90 90 90 90 [ ]*xchg %edx,0x90909090\(%eax\)
- 19d: 88 90 90 90 90 90 [ ]*mov %dl,0x90909090\(%eax\)
- 1a3: 89 90 90 90 90 90 [ ]*mov %edx,0x90909090\(%eax\)
- 1a9: 8a 90 90 90 90 90 [ ]*mov 0x90909090\(%eax\),%dl
- 1af: 8b 90 90 90 90 90 [ ]*mov 0x90909090\(%eax\),%edx
- 1b5: 8c 90 90 90 90 90 [ ]*movw %ss,0x90909090\(%eax\)
- 1bb: 8d 90 90 90 90 90 [ ]*lea 0x90909090\(%eax\),%edx
- 1c1: 8e 90 90 90 90 90 [ ]*movw 0x90909090\(%eax\),%ss
- 1c7: 8f 80 90 90 90 90 [ ]*popl 0x90909090\(%eax\)
+ 16d: 80 90 90 90 90 90 90 [ ]*adcb \$0x90,-0x6f6f6f70\(%eax\)
+ 174: 81 90 90 90 90 90 90 90 90 90 [ ]*adcl \$0x90909090,-0x6f6f6f70\(%eax\)
+ 17e: 83 90 90 90 90 90 90 [ ]*adcl \$0xffffff90,-0x6f6f6f70\(%eax\)
+ 185: 84 90 90 90 90 90 [ ]*test %dl,-0x6f6f6f70\(%eax\)
+ 18b: 85 90 90 90 90 90 [ ]*test %edx,-0x6f6f6f70\(%eax\)
+ 191: 86 90 90 90 90 90 [ ]*xchg %dl,-0x6f6f6f70\(%eax\)
+ 197: 87 90 90 90 90 90 [ ]*xchg %edx,-0x6f6f6f70\(%eax\)
+ 19d: 88 90 90 90 90 90 [ ]*mov %dl,-0x6f6f6f70\(%eax\)
+ 1a3: 89 90 90 90 90 90 [ ]*mov %edx,-0x6f6f6f70\(%eax\)
+ 1a9: 8a 90 90 90 90 90 [ ]*mov -0x6f6f6f70\(%eax\),%dl
+ 1af: 8b 90 90 90 90 90 [ ]*mov -0x6f6f6f70\(%eax\),%edx
+ 1b5: 8c 90 90 90 90 90 [ ]*mov %ss,-0x6f6f6f70\(%eax\)
+ 1bb: 8d 90 90 90 90 90 [ ]*lea -0x6f6f6f70\(%eax\),%edx
+ 1c1: 8e 90 90 90 90 90 [ ]*mov -0x6f6f6f70\(%eax\),%ss
+ 1c7: 8f 80 90 90 90 90 [ ]*popl -0x6f6f6f70\(%eax\)
1cd: 90 [ ]*nop
1ce: 91 [ ]*xchg %eax,%ecx
1cf: 92 [ ]*xchg %eax,%edx
@@ -190,14 +190,14 @@ Disassembly of section .text:
231: bd 90 90 90 90 [ ]*mov \$0x90909090,%ebp
236: be 90 90 90 90 [ ]*mov \$0x90909090,%esi
23b: bf 90 90 90 90 [ ]*mov \$0x90909090,%edi
- 240: c0 90 90 90 90 90 90 [ ]*rclb \$0x90,0x90909090\(%eax\)
- 247: c1 90 90 90 90 90 90 [ ]*rcll \$0x90,0x90909090\(%eax\)
+ 240: c0 90 90 90 90 90 90 [ ]*rclb \$0x90,-0x6f6f6f70\(%eax\)
+ 247: c1 90 90 90 90 90 90 [ ]*rcll \$0x90,-0x6f6f6f70\(%eax\)
24e: c2 90 90 [ ]*ret \$0x9090
251: c3 [ ]*ret
- 252: c4 90 90 90 90 90 [ ]*les 0x90909090\(%eax\),%edx
- 258: c5 90 90 90 90 90 [ ]*lds 0x90909090\(%eax\),%edx
- 25e: c6 80 90 90 90 90 90 [ ]*movb \$0x90,0x90909090\(%eax\)
- 265: c7 80 90 90 90 90 90 90 90 90 [ ]*movl \$0x90909090,0x90909090\(%eax\)
+ 252: c4 90 90 90 90 90 [ ]*les -0x6f6f6f70\(%eax\),%edx
+ 258: c5 90 90 90 90 90 [ ]*lds -0x6f6f6f70\(%eax\),%edx
+ 25e: c6 80 90 90 90 90 90 [ ]*movb \$0x90,-0x6f6f6f70\(%eax\)
+ 265: c7 80 90 90 90 90 90 90 90 90 [ ]*movl \$0x90909090,-0x6f6f6f70\(%eax\)
26f: c8 90 90 90 [ ]*enter \$0x9090,\$0x90
273: c9 [ ]*leave
274: ca 90 90 [ ]*lret \$0x9090
@@ -206,21 +206,21 @@ Disassembly of section .text:
279: cd 90 [ ]*int \$0x90
27b: ce [ ]*into
27c: cf [ ]*iret
- 27d: d0 90 90 90 90 90 [ ]*rclb 0x90909090\(%eax\)
- 283: d1 90 90 90 90 90 [ ]*rcll 0x90909090\(%eax\)
- 289: d2 90 90 90 90 90 [ ]*rclb %cl,0x90909090\(%eax\)
- 28f: d3 90 90 90 90 90 [ ]*rcll %cl,0x90909090\(%eax\)
+ 27d: d0 90 90 90 90 90 [ ]*rclb -0x6f6f6f70\(%eax\)
+ 283: d1 90 90 90 90 90 [ ]*rcll -0x6f6f6f70\(%eax\)
+ 289: d2 90 90 90 90 90 [ ]*rclb %cl,-0x6f6f6f70\(%eax\)
+ 28f: d3 90 90 90 90 90 [ ]*rcll %cl,-0x6f6f6f70\(%eax\)
295: d4 90 [ ]*aam \$0xffffff90
297: d5 90 [ ]*aad \$0xffffff90
299: d7 [ ]*xlat %ds:\(%ebx\)
- 29a: d8 90 90 90 90 90 [ ]*fcoms 0x90909090\(%eax\)
- 2a0: d9 90 90 90 90 90 [ ]*fsts 0x90909090\(%eax\)
- 2a6: da 90 90 90 90 90 [ ]*ficoml 0x90909090\(%eax\)
- 2ac: db 90 90 90 90 90 [ ]*fistl 0x90909090\(%eax\)
- 2b2: dc 90 90 90 90 90 [ ]*fcoml 0x90909090\(%eax\)
- 2b8: dd 90 90 90 90 90 [ ]*fstl 0x90909090\(%eax\)
- 2be: de 90 90 90 90 90 [ ]*ficom 0x90909090\(%eax\)
- 2c4: df 90 90 90 90 90 [ ]*fist 0x90909090\(%eax\)
+ 29a: d8 90 90 90 90 90 [ ]*fcoms -0x6f6f6f70\(%eax\)
+ 2a0: d9 90 90 90 90 90 [ ]*fsts -0x6f6f6f70\(%eax\)
+ 2a6: da 90 90 90 90 90 [ ]*ficoml -0x6f6f6f70\(%eax\)
+ 2ac: db 90 90 90 90 90 [ ]*fistl -0x6f6f6f70\(%eax\)
+ 2b2: dc 90 90 90 90 90 [ ]*fcoml -0x6f6f6f70\(%eax\)
+ 2b8: dd 90 90 90 90 90 [ ]*fstl -0x6f6f6f70\(%eax\)
+ 2be: de 90 90 90 90 90 [ ]*ficom -0x6f6f6f70\(%eax\)
+ 2c4: df 90 90 90 90 90 [ ]*fist -0x6f6f6f70\(%eax\)
2ca: e0 90 [ ]*loopne (0x)?25c.*
2cc: e1 90 [ ]*loope (0x)?25e.*
2ce: e2 90 [ ]*loop (0x)?260.*
@@ -239,19 +239,19 @@ Disassembly of section .text:
2f0: ef [ ]*out %eax,\(%dx\)
2f1: f4 [ ]*hlt
2f2: f5 [ ]*cmc
- 2f3: f6 90 90 90 90 90 [ ]*notb 0x90909090\(%eax\)
- 2f9: f7 90 90 90 90 90 [ ]*notl 0x90909090\(%eax\)
+ 2f3: f6 90 90 90 90 90 [ ]*notb -0x6f6f6f70\(%eax\)
+ 2f9: f7 90 90 90 90 90 [ ]*notl -0x6f6f6f70\(%eax\)
2ff: f8 [ ]*clc
300: f9 [ ]*stc
301: fa [ ]*cli
302: fb [ ]*sti
303: fc [ ]*cld
304: fd [ ]*std
- 305: ff 90 90 90 90 90 [ ]*call \*0x90909090\(%eax\)
- 30b: 0f 00 90 90 90 90 90 [ ]*lldt 0x90909090\(%eax\)
- 312: 0f 01 90 90 90 90 90 [ ]*lgdtl 0x90909090\(%eax\)
- 319: 0f 02 90 90 90 90 90 [ ]*lar 0x90909090\(%eax\),%edx
- 320: 0f 03 90 90 90 90 90 [ ]*lsl 0x90909090\(%eax\),%edx
+ 305: ff 90 90 90 90 90 [ ]*call \*-0x6f6f6f70\(%eax\)
+ 30b: 0f 00 90 90 90 90 90 [ ]*lldt -0x6f6f6f70\(%eax\)
+ 312: 0f 01 90 90 90 90 90 [ ]*lgdtl -0x6f6f6f70\(%eax\)
+ 319: 0f 02 90 90 90 90 90 [ ]*lar -0x6f6f6f70\(%eax\),%edx
+ 320: 0f 03 90 90 90 90 90 [ ]*lsl -0x6f6f6f70\(%eax\),%edx
327: 0f 06 [ ]*clts
329: 0f 08 [ ]*invd
32b: 0f 09 [ ]*wbinvd
@@ -266,45 +266,45 @@ Disassembly of section .text:
343: 0f 31 [ ]*rdtsc
345: 0f 32 [ ]*rdmsr
347: 0f 33 [ ]*rdpmc
- 349: 0f 40 90 90 90 90 90 [ ]*cmovo 0x90909090\(%eax\),%edx
- 350: 0f 41 90 90 90 90 90 [ ]*cmovno 0x90909090\(%eax\),%edx
- 357: 0f 42 90 90 90 90 90 [ ]*cmovb 0x90909090\(%eax\),%edx
- 35e: 0f 43 90 90 90 90 90 [ ]*cmovae 0x90909090\(%eax\),%edx
- 365: 0f 44 90 90 90 90 90 [ ]*cmove 0x90909090\(%eax\),%edx
- 36c: 0f 45 90 90 90 90 90 [ ]*cmovne 0x90909090\(%eax\),%edx
- 373: 0f 46 90 90 90 90 90 [ ]*cmovbe 0x90909090\(%eax\),%edx
- 37a: 0f 47 90 90 90 90 90 [ ]*cmova 0x90909090\(%eax\),%edx
- 381: 0f 48 90 90 90 90 90 [ ]*cmovs 0x90909090\(%eax\),%edx
- 388: 0f 49 90 90 90 90 90 [ ]*cmovns 0x90909090\(%eax\),%edx
- 38f: 0f 4a 90 90 90 90 90 [ ]*cmovp 0x90909090\(%eax\),%edx
- 396: 0f 4b 90 90 90 90 90 [ ]*cmovnp 0x90909090\(%eax\),%edx
- 39d: 0f 4c 90 90 90 90 90 [ ]*cmovl 0x90909090\(%eax\),%edx
- 3a4: 0f 4d 90 90 90 90 90 [ ]*cmovge 0x90909090\(%eax\),%edx
- 3ab: 0f 4e 90 90 90 90 90 [ ]*cmovle 0x90909090\(%eax\),%edx
- 3b2: 0f 4f 90 90 90 90 90 [ ]*cmovg 0x90909090\(%eax\),%edx
- 3b9: 0f 60 90 90 90 90 90 [ ]*punpcklbw 0x90909090\(%eax\),%mm2
- 3c0: 0f 61 90 90 90 90 90 [ ]*punpcklwd 0x90909090\(%eax\),%mm2
- 3c7: 0f 62 90 90 90 90 90 [ ]*punpckldq 0x90909090\(%eax\),%mm2
- 3ce: 0f 63 90 90 90 90 90 [ ]*packsswb 0x90909090\(%eax\),%mm2
- 3d5: 0f 64 90 90 90 90 90 [ ]*pcmpgtb 0x90909090\(%eax\),%mm2
- 3dc: 0f 65 90 90 90 90 90 [ ]*pcmpgtw 0x90909090\(%eax\),%mm2
- 3e3: 0f 66 90 90 90 90 90 [ ]*pcmpgtd 0x90909090\(%eax\),%mm2
- 3ea: 0f 67 90 90 90 90 90 [ ]*packuswb 0x90909090\(%eax\),%mm2
- 3f1: 0f 68 90 90 90 90 90 [ ]*punpckhbw 0x90909090\(%eax\),%mm2
- 3f8: 0f 69 90 90 90 90 90 [ ]*punpckhwd 0x90909090\(%eax\),%mm2
- 3ff: 0f 6a 90 90 90 90 90 [ ]*punpckhdq 0x90909090\(%eax\),%mm2
- 406: 0f 6b 90 90 90 90 90 [ ]*packssdw 0x90909090\(%eax\),%mm2
- 40d: 0f 6e 90 90 90 90 90 [ ]*movd 0x90909090\(%eax\),%mm2
- 414: 0f 6f 90 90 90 90 90 [ ]*movq 0x90909090\(%eax\),%mm2
+ 349: 0f 40 90 90 90 90 90 [ ]*cmovo -0x6f6f6f70\(%eax\),%edx
+ 350: 0f 41 90 90 90 90 90 [ ]*cmovno -0x6f6f6f70\(%eax\),%edx
+ 357: 0f 42 90 90 90 90 90 [ ]*cmovb -0x6f6f6f70\(%eax\),%edx
+ 35e: 0f 43 90 90 90 90 90 [ ]*cmovae -0x6f6f6f70\(%eax\),%edx
+ 365: 0f 44 90 90 90 90 90 [ ]*cmove -0x6f6f6f70\(%eax\),%edx
+ 36c: 0f 45 90 90 90 90 90 [ ]*cmovne -0x6f6f6f70\(%eax\),%edx
+ 373: 0f 46 90 90 90 90 90 [ ]*cmovbe -0x6f6f6f70\(%eax\),%edx
+ 37a: 0f 47 90 90 90 90 90 [ ]*cmova -0x6f6f6f70\(%eax\),%edx
+ 381: 0f 48 90 90 90 90 90 [ ]*cmovs -0x6f6f6f70\(%eax\),%edx
+ 388: 0f 49 90 90 90 90 90 [ ]*cmovns -0x6f6f6f70\(%eax\),%edx
+ 38f: 0f 4a 90 90 90 90 90 [ ]*cmovp -0x6f6f6f70\(%eax\),%edx
+ 396: 0f 4b 90 90 90 90 90 [ ]*cmovnp -0x6f6f6f70\(%eax\),%edx
+ 39d: 0f 4c 90 90 90 90 90 [ ]*cmovl -0x6f6f6f70\(%eax\),%edx
+ 3a4: 0f 4d 90 90 90 90 90 [ ]*cmovge -0x6f6f6f70\(%eax\),%edx
+ 3ab: 0f 4e 90 90 90 90 90 [ ]*cmovle -0x6f6f6f70\(%eax\),%edx
+ 3b2: 0f 4f 90 90 90 90 90 [ ]*cmovg -0x6f6f6f70\(%eax\),%edx
+ 3b9: 0f 60 90 90 90 90 90 [ ]*punpcklbw -0x6f6f6f70\(%eax\),%mm2
+ 3c0: 0f 61 90 90 90 90 90 [ ]*punpcklwd -0x6f6f6f70\(%eax\),%mm2
+ 3c7: 0f 62 90 90 90 90 90 [ ]*punpckldq -0x6f6f6f70\(%eax\),%mm2
+ 3ce: 0f 63 90 90 90 90 90 [ ]*packsswb -0x6f6f6f70\(%eax\),%mm2
+ 3d5: 0f 64 90 90 90 90 90 [ ]*pcmpgtb -0x6f6f6f70\(%eax\),%mm2
+ 3dc: 0f 65 90 90 90 90 90 [ ]*pcmpgtw -0x6f6f6f70\(%eax\),%mm2
+ 3e3: 0f 66 90 90 90 90 90 [ ]*pcmpgtd -0x6f6f6f70\(%eax\),%mm2
+ 3ea: 0f 67 90 90 90 90 90 [ ]*packuswb -0x6f6f6f70\(%eax\),%mm2
+ 3f1: 0f 68 90 90 90 90 90 [ ]*punpckhbw -0x6f6f6f70\(%eax\),%mm2
+ 3f8: 0f 69 90 90 90 90 90 [ ]*punpckhwd -0x6f6f6f70\(%eax\),%mm2
+ 3ff: 0f 6a 90 90 90 90 90 [ ]*punpckhdq -0x6f6f6f70\(%eax\),%mm2
+ 406: 0f 6b 90 90 90 90 90 [ ]*packssdw -0x6f6f6f70\(%eax\),%mm2
+ 40d: 0f 6e 90 90 90 90 90 [ ]*movd -0x6f6f6f70\(%eax\),%mm2
+ 414: 0f 6f 90 90 90 90 90 [ ]*movq -0x6f6f6f70\(%eax\),%mm2
41b: 0f 71 d0 90 [ ]*psrlw \$0x90,%mm0
41f: 0f 72 d0 90 [ ]*psrld \$0x90,%mm0
423: 0f 73 d0 90 [ ]*psrlq \$0x90,%mm0
- 427: 0f 74 90 90 90 90 90 [ ]*pcmpeqb 0x90909090\(%eax\),%mm2
- 42e: 0f 75 90 90 90 90 90 [ ]*pcmpeqw 0x90909090\(%eax\),%mm2
- 435: 0f 76 90 90 90 90 90 [ ]*pcmpeqd 0x90909090\(%eax\),%mm2
+ 427: 0f 74 90 90 90 90 90 [ ]*pcmpeqb -0x6f6f6f70\(%eax\),%mm2
+ 42e: 0f 75 90 90 90 90 90 [ ]*pcmpeqw -0x6f6f6f70\(%eax\),%mm2
+ 435: 0f 76 90 90 90 90 90 [ ]*pcmpeqd -0x6f6f6f70\(%eax\),%mm2
43c: 0f 77 [ ]*emms
- 43e: 0f 7e 90 90 90 90 90 [ ]*movd %mm2,0x90909090\(%eax\)
- 445: 0f 7f 90 90 90 90 90 [ ]*movq %mm2,0x90909090\(%eax\)
+ 43e: 0f 7e 90 90 90 90 90 [ ]*movd %mm2,-0x6f6f6f70\(%eax\)
+ 445: 0f 7f 90 90 90 90 90 [ ]*movq %mm2,-0x6f6f6f70\(%eax\)
44c: 0f 80 90 90 90 90 [ ]*jo (0x)?909094e2.*
452: 0f 81 90 90 90 90 [ ]*jno (0x)?909094e8.*
458: 0f 82 90 90 90 90 [ ]*jb (0x)?909094ee.*
@@ -321,51 +321,51 @@ Disassembly of section .text:
49a: 0f 8d 90 90 90 90 [ ]*jge (0x)?90909530.*
4a0: 0f 8e 90 90 90 90 [ ]*jle (0x)?90909536.*
4a6: 0f 8f 90 90 90 90 [ ]*jg (0x)?9090953c.*
- 4ac: 0f 90 80 90 90 90 90 [ ]*seto 0x90909090\(%eax\)
- 4b3: 0f 91 80 90 90 90 90 [ ]*setno 0x90909090\(%eax\)
- 4ba: 0f 92 80 90 90 90 90 [ ]*setb 0x90909090\(%eax\)
- 4c1: 0f 93 80 90 90 90 90 [ ]*setae 0x90909090\(%eax\)
- 4c8: 0f 94 80 90 90 90 90 [ ]*sete 0x90909090\(%eax\)
- 4cf: 0f 95 80 90 90 90 90 [ ]*setne 0x90909090\(%eax\)
- 4d6: 0f 96 80 90 90 90 90 [ ]*setbe 0x90909090\(%eax\)
- 4dd: 0f 97 80 90 90 90 90 [ ]*seta 0x90909090\(%eax\)
- 4e4: 0f 98 80 90 90 90 90 [ ]*sets 0x90909090\(%eax\)
- 4eb: 0f 99 80 90 90 90 90 [ ]*setns 0x90909090\(%eax\)
- 4f2: 0f 9a 80 90 90 90 90 [ ]*setp 0x90909090\(%eax\)
- 4f9: 0f 9b 80 90 90 90 90 [ ]*setnp 0x90909090\(%eax\)
- 500: 0f 9c 80 90 90 90 90 [ ]*setl 0x90909090\(%eax\)
- 507: 0f 9d 80 90 90 90 90 [ ]*setge 0x90909090\(%eax\)
- 50e: 0f 9e 80 90 90 90 90 [ ]*setle 0x90909090\(%eax\)
- 515: 0f 9f 80 90 90 90 90 [ ]*setg 0x90909090\(%eax\)
+ 4ac: 0f 90 80 90 90 90 90 [ ]*seto -0x6f6f6f70\(%eax\)
+ 4b3: 0f 91 80 90 90 90 90 [ ]*setno -0x6f6f6f70\(%eax\)
+ 4ba: 0f 92 80 90 90 90 90 [ ]*setb -0x6f6f6f70\(%eax\)
+ 4c1: 0f 93 80 90 90 90 90 [ ]*setae -0x6f6f6f70\(%eax\)
+ 4c8: 0f 94 80 90 90 90 90 [ ]*sete -0x6f6f6f70\(%eax\)
+ 4cf: 0f 95 80 90 90 90 90 [ ]*setne -0x6f6f6f70\(%eax\)
+ 4d6: 0f 96 80 90 90 90 90 [ ]*setbe -0x6f6f6f70\(%eax\)
+ 4dd: 0f 97 80 90 90 90 90 [ ]*seta -0x6f6f6f70\(%eax\)
+ 4e4: 0f 98 80 90 90 90 90 [ ]*sets -0x6f6f6f70\(%eax\)
+ 4eb: 0f 99 80 90 90 90 90 [ ]*setns -0x6f6f6f70\(%eax\)
+ 4f2: 0f 9a 80 90 90 90 90 [ ]*setp -0x6f6f6f70\(%eax\)
+ 4f9: 0f 9b 80 90 90 90 90 [ ]*setnp -0x6f6f6f70\(%eax\)
+ 500: 0f 9c 80 90 90 90 90 [ ]*setl -0x6f6f6f70\(%eax\)
+ 507: 0f 9d 80 90 90 90 90 [ ]*setge -0x6f6f6f70\(%eax\)
+ 50e: 0f 9e 80 90 90 90 90 [ ]*setle -0x6f6f6f70\(%eax\)
+ 515: 0f 9f 80 90 90 90 90 [ ]*setg -0x6f6f6f70\(%eax\)
51c: 0f a0 [ ]*push %fs
51e: 0f a1 [ ]*pop %fs
520: 0f a2 [ ]*cpuid
- 522: 0f a3 90 90 90 90 90 [ ]*bt %edx,0x90909090\(%eax\)
- 529: 0f a4 90 90 90 90 90 90 [ ]*shld \$0x90,%edx,0x90909090\(%eax\)
- 531: 0f a5 90 90 90 90 90 [ ]*shld %cl,%edx,0x90909090\(%eax\)
+ 522: 0f a3 90 90 90 90 90 [ ]*bt %edx,-0x6f6f6f70\(%eax\)
+ 529: 0f a4 90 90 90 90 90 90 [ ]*shld \$0x90,%edx,-0x6f6f6f70\(%eax\)
+ 531: 0f a5 90 90 90 90 90 [ ]*shld %cl,%edx,-0x6f6f6f70\(%eax\)
538: 0f a8 [ ]*push %gs
53a: 0f a9 [ ]*pop %gs
53c: 0f aa [ ]*rsm
- 53e: 0f ab 90 90 90 90 90 [ ]*bts %edx,0x90909090\(%eax\)
- 545: 0f ac 90 90 90 90 90 90 [ ]*shrd \$0x90,%edx,0x90909090\(%eax\)
- 54d: 0f ad 90 90 90 90 90 [ ]*shrd %cl,%edx,0x90909090\(%eax\)
- 554: 0f af 90 90 90 90 90 [ ]*imul 0x90909090\(%eax\),%edx
- 55b: 0f b0 90 90 90 90 90 [ ]*cmpxchg %dl,0x90909090\(%eax\)
- 562: 0f b1 90 90 90 90 90 [ ]*cmpxchg %edx,0x90909090\(%eax\)
- 569: 0f b2 90 90 90 90 90 [ ]*lss 0x90909090\(%eax\),%edx
- 570: 0f b3 90 90 90 90 90 [ ]*btr %edx,0x90909090\(%eax\)
- 577: 0f b4 90 90 90 90 90 [ ]*lfs 0x90909090\(%eax\),%edx
- 57e: 0f b5 90 90 90 90 90 [ ]*lgs 0x90909090\(%eax\),%edx
- 585: 0f b6 90 90 90 90 90 [ ]*movzbl 0x90909090\(%eax\),%edx
- 58c: 0f b7 90 90 90 90 90 [ ]*movzwl 0x90909090\(%eax\),%edx
+ 53e: 0f ab 90 90 90 90 90 [ ]*bts %edx,-0x6f6f6f70\(%eax\)
+ 545: 0f ac 90 90 90 90 90 90 [ ]*shrd \$0x90,%edx,-0x6f6f6f70\(%eax\)
+ 54d: 0f ad 90 90 90 90 90 [ ]*shrd %cl,%edx,-0x6f6f6f70\(%eax\)
+ 554: 0f af 90 90 90 90 90 [ ]*imul -0x6f6f6f70\(%eax\),%edx
+ 55b: 0f b0 90 90 90 90 90 [ ]*cmpxchg %dl,-0x6f6f6f70\(%eax\)
+ 562: 0f b1 90 90 90 90 90 [ ]*cmpxchg %edx,-0x6f6f6f70\(%eax\)
+ 569: 0f b2 90 90 90 90 90 [ ]*lss -0x6f6f6f70\(%eax\),%edx
+ 570: 0f b3 90 90 90 90 90 [ ]*btr %edx,-0x6f6f6f70\(%eax\)
+ 577: 0f b4 90 90 90 90 90 [ ]*lfs -0x6f6f6f70\(%eax\),%edx
+ 57e: 0f b5 90 90 90 90 90 [ ]*lgs -0x6f6f6f70\(%eax\),%edx
+ 585: 0f b6 90 90 90 90 90 [ ]*movzbl -0x6f6f6f70\(%eax\),%edx
+ 58c: 0f b7 90 90 90 90 90 [ ]*movzwl -0x6f6f6f70\(%eax\),%edx
593: 0f b9 [ ]*ud2b
- 595: 0f bb 90 90 90 90 90 [ ]*btc %edx,0x90909090\(%eax\)
- 59c: 0f bc 90 90 90 90 90 [ ]*bsf 0x90909090\(%eax\),%edx
- 5a3: 0f bd 90 90 90 90 90 [ ]*bsr 0x90909090\(%eax\),%edx
- 5aa: 0f be 90 90 90 90 90 [ ]*movsbl 0x90909090\(%eax\),%edx
- 5b1: 0f bf 90 90 90 90 90 [ ]*movswl 0x90909090\(%eax\),%edx
- 5b8: 0f c0 90 90 90 90 90 [ ]*xadd %dl,0x90909090\(%eax\)
- 5bf: 0f c1 90 90 90 90 90 [ ]*xadd %edx,0x90909090\(%eax\)
+ 595: 0f bb 90 90 90 90 90 [ ]*btc %edx,-0x6f6f6f70\(%eax\)
+ 59c: 0f bc 90 90 90 90 90 [ ]*bsf -0x6f6f6f70\(%eax\),%edx
+ 5a3: 0f bd 90 90 90 90 90 [ ]*bsr -0x6f6f6f70\(%eax\),%edx
+ 5aa: 0f be 90 90 90 90 90 [ ]*movsbl -0x6f6f6f70\(%eax\),%edx
+ 5b1: 0f bf 90 90 90 90 90 [ ]*movswl -0x6f6f6f70\(%eax\),%edx
+ 5b8: 0f c0 90 90 90 90 90 [ ]*xadd %dl,-0x6f6f6f70\(%eax\)
+ 5bf: 0f c1 90 90 90 90 90 [ ]*xadd %edx,-0x6f6f6f70\(%eax\)
5c6: 0f c8 [ ]*bswap %eax
5c8: 0f c9 [ ]*bswap %ecx
5ca: 0f ca [ ]*bswap %edx
@@ -374,65 +374,65 @@ Disassembly of section .text:
5d0: 0f cd [ ]*bswap %ebp
5d2: 0f ce [ ]*bswap %esi
5d4: 0f cf [ ]*bswap %edi
- 5d6: 0f d1 90 90 90 90 90 [ ]*psrlw 0x90909090\(%eax\),%mm2
- 5dd: 0f d2 90 90 90 90 90 [ ]*psrld 0x90909090\(%eax\),%mm2
- 5e4: 0f d3 90 90 90 90 90 [ ]*psrlq 0x90909090\(%eax\),%mm2
- 5eb: 0f d5 90 90 90 90 90 [ ]*pmullw 0x90909090\(%eax\),%mm2
- 5f2: 0f d8 90 90 90 90 90 [ ]*psubusb 0x90909090\(%eax\),%mm2
- 5f9: 0f d9 90 90 90 90 90 [ ]*psubusw 0x90909090\(%eax\),%mm2
- 600: 0f db 90 90 90 90 90 [ ]*pand 0x90909090\(%eax\),%mm2
- 607: 0f dc 90 90 90 90 90 [ ]*paddusb 0x90909090\(%eax\),%mm2
- 60e: 0f dd 90 90 90 90 90 [ ]*paddusw 0x90909090\(%eax\),%mm2
- 615: 0f df 90 90 90 90 90 [ ]*pandn 0x90909090\(%eax\),%mm2
- 61c: 0f e1 90 90 90 90 90 [ ]*psraw 0x90909090\(%eax\),%mm2
- 623: 0f e2 90 90 90 90 90 [ ]*psrad 0x90909090\(%eax\),%mm2
- 62a: 0f e5 90 90 90 90 90 [ ]*pmulhw 0x90909090\(%eax\),%mm2
- 631: 0f e8 90 90 90 90 90 [ ]*psubsb 0x90909090\(%eax\),%mm2
- 638: 0f e9 90 90 90 90 90 [ ]*psubsw 0x90909090\(%eax\),%mm2
- 63f: 0f eb 90 90 90 90 90 [ ]*por 0x90909090\(%eax\),%mm2
- 646: 0f ec 90 90 90 90 90 [ ]*paddsb 0x90909090\(%eax\),%mm2
- 64d: 0f ed 90 90 90 90 90 [ ]*paddsw 0x90909090\(%eax\),%mm2
- 654: 0f ef 90 90 90 90 90 [ ]*pxor 0x90909090\(%eax\),%mm2
- 65b: 0f f1 90 90 90 90 90 [ ]*psllw 0x90909090\(%eax\),%mm2
- 662: 0f f2 90 90 90 90 90 [ ]*pslld 0x90909090\(%eax\),%mm2
- 669: 0f f3 90 90 90 90 90 [ ]*psllq 0x90909090\(%eax\),%mm2
- 670: 0f f5 90 90 90 90 90 [ ]*pmaddwd 0x90909090\(%eax\),%mm2
- 677: 0f f8 90 90 90 90 90 [ ]*psubb 0x90909090\(%eax\),%mm2
- 67e: 0f f9 90 90 90 90 90 [ ]*psubw 0x90909090\(%eax\),%mm2
- 685: 0f fa 90 90 90 90 90 [ ]*psubd 0x90909090\(%eax\),%mm2
- 68c: 0f fc 90 90 90 90 90 [ ]*paddb 0x90909090\(%eax\),%mm2
- 693: 0f fd 90 90 90 90 90 [ ]*paddw 0x90909090\(%eax\),%mm2
- 69a: 0f fe 90 90 90 90 90 [ ]*paddd 0x90909090\(%eax\),%mm2
- 6a1: 66 01 90 90 90 90 90 [ ]*add %dx,0x90909090\(%eax\)
- 6a8: 66 03 90 90 90 90 90 [ ]*add 0x90909090\(%eax\),%dx
+ 5d6: 0f d1 90 90 90 90 90 [ ]*psrlw -0x6f6f6f70\(%eax\),%mm2
+ 5dd: 0f d2 90 90 90 90 90 [ ]*psrld -0x6f6f6f70\(%eax\),%mm2
+ 5e4: 0f d3 90 90 90 90 90 [ ]*psrlq -0x6f6f6f70\(%eax\),%mm2
+ 5eb: 0f d5 90 90 90 90 90 [ ]*pmullw -0x6f6f6f70\(%eax\),%mm2
+ 5f2: 0f d8 90 90 90 90 90 [ ]*psubusb -0x6f6f6f70\(%eax\),%mm2
+ 5f9: 0f d9 90 90 90 90 90 [ ]*psubusw -0x6f6f6f70\(%eax\),%mm2
+ 600: 0f db 90 90 90 90 90 [ ]*pand -0x6f6f6f70\(%eax\),%mm2
+ 607: 0f dc 90 90 90 90 90 [ ]*paddusb -0x6f6f6f70\(%eax\),%mm2
+ 60e: 0f dd 90 90 90 90 90 [ ]*paddusw -0x6f6f6f70\(%eax\),%mm2
+ 615: 0f df 90 90 90 90 90 [ ]*pandn -0x6f6f6f70\(%eax\),%mm2
+ 61c: 0f e1 90 90 90 90 90 [ ]*psraw -0x6f6f6f70\(%eax\),%mm2
+ 623: 0f e2 90 90 90 90 90 [ ]*psrad -0x6f6f6f70\(%eax\),%mm2
+ 62a: 0f e5 90 90 90 90 90 [ ]*pmulhw -0x6f6f6f70\(%eax\),%mm2
+ 631: 0f e8 90 90 90 90 90 [ ]*psubsb -0x6f6f6f70\(%eax\),%mm2
+ 638: 0f e9 90 90 90 90 90 [ ]*psubsw -0x6f6f6f70\(%eax\),%mm2
+ 63f: 0f eb 90 90 90 90 90 [ ]*por -0x6f6f6f70\(%eax\),%mm2
+ 646: 0f ec 90 90 90 90 90 [ ]*paddsb -0x6f6f6f70\(%eax\),%mm2
+ 64d: 0f ed 90 90 90 90 90 [ ]*paddsw -0x6f6f6f70\(%eax\),%mm2
+ 654: 0f ef 90 90 90 90 90 [ ]*pxor -0x6f6f6f70\(%eax\),%mm2
+ 65b: 0f f1 90 90 90 90 90 [ ]*psllw -0x6f6f6f70\(%eax\),%mm2
+ 662: 0f f2 90 90 90 90 90 [ ]*pslld -0x6f6f6f70\(%eax\),%mm2
+ 669: 0f f3 90 90 90 90 90 [ ]*psllq -0x6f6f6f70\(%eax\),%mm2
+ 670: 0f f5 90 90 90 90 90 [ ]*pmaddwd -0x6f6f6f70\(%eax\),%mm2
+ 677: 0f f8 90 90 90 90 90 [ ]*psubb -0x6f6f6f70\(%eax\),%mm2
+ 67e: 0f f9 90 90 90 90 90 [ ]*psubw -0x6f6f6f70\(%eax\),%mm2
+ 685: 0f fa 90 90 90 90 90 [ ]*psubd -0x6f6f6f70\(%eax\),%mm2
+ 68c: 0f fc 90 90 90 90 90 [ ]*paddb -0x6f6f6f70\(%eax\),%mm2
+ 693: 0f fd 90 90 90 90 90 [ ]*paddw -0x6f6f6f70\(%eax\),%mm2
+ 69a: 0f fe 90 90 90 90 90 [ ]*paddd -0x6f6f6f70\(%eax\),%mm2
+ 6a1: 66 01 90 90 90 90 90 [ ]*add %dx,-0x6f6f6f70\(%eax\)
+ 6a8: 66 03 90 90 90 90 90 [ ]*add -0x6f6f6f70\(%eax\),%dx
6af: 66 05 90 90 [ ]*add \$0x9090,%ax
6b3: 66 06 [ ]*pushw %es
6b5: 66 07 [ ]*popw %es
- 6b7: 66 09 90 90 90 90 90 [ ]*or %dx,0x90909090\(%eax\)
- 6be: 66 0b 90 90 90 90 90 [ ]*or 0x90909090\(%eax\),%dx
+ 6b7: 66 09 90 90 90 90 90 [ ]*or %dx,-0x6f6f6f70\(%eax\)
+ 6be: 66 0b 90 90 90 90 90 [ ]*or -0x6f6f6f70\(%eax\),%dx
6c5: 66 0d 90 90 [ ]*or \$0x9090,%ax
6c9: 66 0e [ ]*pushw %cs
- 6cb: 66 11 90 90 90 90 90 [ ]*adc %dx,0x90909090\(%eax\)
- 6d2: 66 13 90 90 90 90 90 [ ]*adc 0x90909090\(%eax\),%dx
+ 6cb: 66 11 90 90 90 90 90 [ ]*adc %dx,-0x6f6f6f70\(%eax\)
+ 6d2: 66 13 90 90 90 90 90 [ ]*adc -0x6f6f6f70\(%eax\),%dx
6d9: 66 15 90 90 [ ]*adc \$0x9090,%ax
6dd: 66 16 [ ]*pushw %ss
6df: 66 17 [ ]*popw %ss
- 6e1: 66 19 90 90 90 90 90 [ ]*sbb %dx,0x90909090\(%eax\)
- 6e8: 66 1b 90 90 90 90 90 [ ]*sbb 0x90909090\(%eax\),%dx
+ 6e1: 66 19 90 90 90 90 90 [ ]*sbb %dx,-0x6f6f6f70\(%eax\)
+ 6e8: 66 1b 90 90 90 90 90 [ ]*sbb -0x6f6f6f70\(%eax\),%dx
6ef: 66 1d 90 90 [ ]*sbb \$0x9090,%ax
6f3: 66 1e [ ]*pushw %ds
6f5: 66 1f [ ]*popw %ds
- 6f7: 66 21 90 90 90 90 90 [ ]*and %dx,0x90909090\(%eax\)
- 6fe: 66 23 90 90 90 90 90 [ ]*and 0x90909090\(%eax\),%dx
+ 6f7: 66 21 90 90 90 90 90 [ ]*and %dx,-0x6f6f6f70\(%eax\)
+ 6fe: 66 23 90 90 90 90 90 [ ]*and -0x6f6f6f70\(%eax\),%dx
705: 66 25 90 90 [ ]*and \$0x9090,%ax
- 709: 66 29 90 90 90 90 90 [ ]*sub %dx,0x90909090\(%eax\)
- 710: 66 2b 90 90 90 90 90 [ ]*sub 0x90909090\(%eax\),%dx
+ 709: 66 29 90 90 90 90 90 [ ]*sub %dx,-0x6f6f6f70\(%eax\)
+ 710: 66 2b 90 90 90 90 90 [ ]*sub -0x6f6f6f70\(%eax\),%dx
717: 66 2d 90 90 [ ]*sub \$0x9090,%ax
- 71b: 66 31 90 90 90 90 90 [ ]*xor %dx,0x90909090\(%eax\)
- 722: 66 33 90 90 90 90 90 [ ]*xor 0x90909090\(%eax\),%dx
+ 71b: 66 31 90 90 90 90 90 [ ]*xor %dx,-0x6f6f6f70\(%eax\)
+ 722: 66 33 90 90 90 90 90 [ ]*xor -0x6f6f6f70\(%eax\),%dx
729: 66 35 90 90 [ ]*xor \$0x9090,%ax
- 72d: 66 39 90 90 90 90 90 [ ]*cmp %dx,0x90909090\(%eax\)
- 734: 66 3b 90 90 90 90 90 [ ]*cmp 0x90909090\(%eax\),%dx
+ 72d: 66 39 90 90 90 90 90 [ ]*cmp %dx,-0x6f6f6f70\(%eax\)
+ 734: 66 3b 90 90 90 90 90 [ ]*cmp -0x6f6f6f70\(%eax\),%dx
73b: 66 3d 90 90 [ ]*cmp \$0x9090,%ax
73f: 66 40 [ ]*inc %ax
741: 66 41 [ ]*inc %cx
@@ -468,22 +468,22 @@ Disassembly of section .text:
77d: 66 5f [ ]*pop %di
77f: 66 60 [ ]*pushaw
781: 66 61 [ ]*popaw
- 783: 66 62 90 90 90 90 90 [ ]*bound %dx,0x90909090\(%eax\)
+ 783: 66 62 90 90 90 90 90 [ ]*bound %dx,-0x6f6f6f70\(%eax\)
78a: 66 68 90 90 [ ]*pushw \$0x9090
- 78e: 66 69 90 90 90 90 90 90 90 [ ]*imul \$0x9090,0x90909090\(%eax\),%dx
+ 78e: 66 69 90 90 90 90 90 90 90 [ ]*imul \$0x9090,-0x6f6f6f70\(%eax\),%dx
797: 66 6a 90 [ ]*pushw \$0xffffff90
- 79a: 66 6b 90 90 90 90 90 90 [ ]*imul \$0xffffff90,0x90909090\(%eax\),%dx
+ 79a: 66 6b 90 90 90 90 90 90 [ ]*imul \$0xffffff90,-0x6f6f6f70\(%eax\),%dx
7a2: 66 6d [ ]*insw \(%dx\),%es:\(%edi\)
7a4: 66 6f [ ]*outsw %ds:\(%esi\),\(%dx\)
- 7a6: 66 81 90 90 90 90 90 90 90 [ ]*adcw \$0x9090,0x90909090\(%eax\)
- 7af: 66 83 90 90 90 90 90 90 [ ]*adcw \$0xffffff90,0x90909090\(%eax\)
- 7b7: 66 85 90 90 90 90 90 [ ]*test %dx,0x90909090\(%eax\)
- 7be: 66 87 90 90 90 90 90 [ ]*xchg %dx,0x90909090\(%eax\)
- 7c5: 66 89 90 90 90 90 90 [ ]*mov %dx,0x90909090\(%eax\)
- 7cc: 66 8b 90 90 90 90 90 [ ]*mov 0x90909090\(%eax\),%dx
- 7d3: 8c 90 90 90 90 90 [ ]*mov[w ] %ss,0x90909090\(%eax\)
- 7d9: 66 8d 90 90 90 90 90 [ ]*lea 0x90909090\(%eax\),%dx
- 7e0: 66 8f 80 90 90 90 90 [ ]*popw 0x90909090\(%eax\)
+ 7a6: 66 81 90 90 90 90 90 90 90 [ ]*adcw \$0x9090,-0x6f6f6f70\(%eax\)
+ 7af: 66 83 90 90 90 90 90 90 [ ]*adcw \$0xffffff90,-0x6f6f6f70\(%eax\)
+ 7b7: 66 85 90 90 90 90 90 [ ]*test %dx,-0x6f6f6f70\(%eax\)
+ 7be: 66 87 90 90 90 90 90 [ ]*xchg %dx,-0x6f6f6f70\(%eax\)
+ 7c5: 66 89 90 90 90 90 90 [ ]*mov %dx,-0x6f6f6f70\(%eax\)
+ 7cc: 66 8b 90 90 90 90 90 [ ]*mov -0x6f6f6f70\(%eax\),%dx
+ 7d3: 8c 90 90 90 90 90 [ ]*mov[w ] %ss,-0x6f6f6f70\(%eax\)
+ 7d9: 66 8d 90 90 90 90 90 [ ]*lea -0x6f6f6f70\(%eax\),%dx
+ 7e0: 66 8f 80 90 90 90 90 [ ]*popw -0x6f6f6f70\(%eax\)
7e7: 66 91 [ ]*xchg %ax,%cx
7e9: 66 92 [ ]*xchg %ax,%dx
7eb: 66 93 [ ]*xchg %ax,%bx
@@ -512,67 +512,67 @@ Disassembly of section .text:
831: 66 bd 90 90 [ ]*mov \$0x9090,%bp
835: 66 be 90 90 [ ]*mov \$0x9090,%si
839: 66 bf 90 90 [ ]*mov \$0x9090,%di
- 83d: 66 c1 90 90 90 90 90 90 [ ]*rclw \$0x90,0x90909090\(%eax\)
+ 83d: 66 c1 90 90 90 90 90 90 [ ]*rclw \$0x90,-0x6f6f6f70\(%eax\)
845: 66 c2 90 90 [ ]*retw \$0x9090
849: 66 c3 [ ]*retw
- 84b: 66 c4 90 90 90 90 90 [ ]*les 0x90909090\(%eax\),%dx
- 852: 66 c5 90 90 90 90 90 [ ]*lds 0x90909090\(%eax\),%dx
- 859: 66 c7 80 90 90 90 90 90 90 [ ]*movw \$0x9090,0x90909090\(%eax\)
+ 84b: 66 c4 90 90 90 90 90 [ ]*les -0x6f6f6f70\(%eax\),%dx
+ 852: 66 c5 90 90 90 90 90 [ ]*lds -0x6f6f6f70\(%eax\),%dx
+ 859: 66 c7 80 90 90 90 90 90 90 [ ]*movw \$0x9090,-0x6f6f6f70\(%eax\)
862: 66 c8 90 90 90 [ ]*enterw \$0x9090,\$0x90
867: 66 c9 [ ]*leavew
869: 66 ca 90 90 [ ]*lretw \$0x9090
86d: 66 cb [ ]*lretw
86f: 66 cf [ ]*iretw
- 871: 66 d1 90 90 90 90 90 [ ]*rclw 0x90909090\(%eax\)
- 878: 66 d3 90 90 90 90 90 [ ]*rclw %cl,0x90909090\(%eax\)
+ 871: 66 d1 90 90 90 90 90 [ ]*rclw -0x6f6f6f70\(%eax\)
+ 878: 66 d3 90 90 90 90 90 [ ]*rclw %cl,-0x6f6f6f70\(%eax\)
87f: 66 e5 90 [ ]*in \$0x90,%ax
882: 66 e7 90 [ ]*out %ax,\$0x90
885: 66 e8 8f 90 [ ]*callw (0x)?9918.*
889: 66 ea 90 90 90 90 [ ]*ljmpw \$0x9090,\$0x9090
88f: 66 ed [ ]*in \(%dx\),%ax
891: 66 ef [ ]*out %ax,\(%dx\)
- 893: 66 f7 90 90 90 90 90 [ ]*notw 0x90909090\(%eax\)
- 89a: 66 ff 90 90 90 90 90 [ ]*callw \*0x90909090\(%eax\)
- 8a1: 66 0f 02 90 90 90 90 90 [ ]*lar 0x90909090\(%eax\),%dx
- 8a9: 66 0f 03 90 90 90 90 90 [ ]*lsl 0x90909090\(%eax\),%dx
- 8b1: 66 0f 40 90 90 90 90 90 [ ]*cmovo 0x90909090\(%eax\),%dx
- 8b9: 66 0f 41 90 90 90 90 90 [ ]*cmovno 0x90909090\(%eax\),%dx
- 8c1: 66 0f 42 90 90 90 90 90 [ ]*cmovb 0x90909090\(%eax\),%dx
- 8c9: 66 0f 43 90 90 90 90 90 [ ]*cmovae 0x90909090\(%eax\),%dx
- 8d1: 66 0f 44 90 90 90 90 90 [ ]*cmove 0x90909090\(%eax\),%dx
- 8d9: 66 0f 45 90 90 90 90 90 [ ]*cmovne 0x90909090\(%eax\),%dx
- 8e1: 66 0f 46 90 90 90 90 90 [ ]*cmovbe 0x90909090\(%eax\),%dx
- 8e9: 66 0f 47 90 90 90 90 90 [ ]*cmova 0x90909090\(%eax\),%dx
- 8f1: 66 0f 48 90 90 90 90 90 [ ]*cmovs 0x90909090\(%eax\),%dx
- 8f9: 66 0f 49 90 90 90 90 90 [ ]*cmovns 0x90909090\(%eax\),%dx
- 901: 66 0f 4a 90 90 90 90 90 [ ]*cmovp 0x90909090\(%eax\),%dx
- 909: 66 0f 4b 90 90 90 90 90 [ ]*cmovnp 0x90909090\(%eax\),%dx
- 911: 66 0f 4c 90 90 90 90 90 [ ]*cmovl 0x90909090\(%eax\),%dx
- 919: 66 0f 4d 90 90 90 90 90 [ ]*cmovge 0x90909090\(%eax\),%dx
- 921: 66 0f 4e 90 90 90 90 90 [ ]*cmovle 0x90909090\(%eax\),%dx
- 929: 66 0f 4f 90 90 90 90 90 [ ]*cmovg 0x90909090\(%eax\),%dx
+ 893: 66 f7 90 90 90 90 90 [ ]*notw -0x6f6f6f70\(%eax\)
+ 89a: 66 ff 90 90 90 90 90 [ ]*callw \*-0x6f6f6f70\(%eax\)
+ 8a1: 66 0f 02 90 90 90 90 90 [ ]*lar -0x6f6f6f70\(%eax\),%dx
+ 8a9: 66 0f 03 90 90 90 90 90 [ ]*lsl -0x6f6f6f70\(%eax\),%dx
+ 8b1: 66 0f 40 90 90 90 90 90 [ ]*cmovo -0x6f6f6f70\(%eax\),%dx
+ 8b9: 66 0f 41 90 90 90 90 90 [ ]*cmovno -0x6f6f6f70\(%eax\),%dx
+ 8c1: 66 0f 42 90 90 90 90 90 [ ]*cmovb -0x6f6f6f70\(%eax\),%dx
+ 8c9: 66 0f 43 90 90 90 90 90 [ ]*cmovae -0x6f6f6f70\(%eax\),%dx
+ 8d1: 66 0f 44 90 90 90 90 90 [ ]*cmove -0x6f6f6f70\(%eax\),%dx
+ 8d9: 66 0f 45 90 90 90 90 90 [ ]*cmovne -0x6f6f6f70\(%eax\),%dx
+ 8e1: 66 0f 46 90 90 90 90 90 [ ]*cmovbe -0x6f6f6f70\(%eax\),%dx
+ 8e9: 66 0f 47 90 90 90 90 90 [ ]*cmova -0x6f6f6f70\(%eax\),%dx
+ 8f1: 66 0f 48 90 90 90 90 90 [ ]*cmovs -0x6f6f6f70\(%eax\),%dx
+ 8f9: 66 0f 49 90 90 90 90 90 [ ]*cmovns -0x6f6f6f70\(%eax\),%dx
+ 901: 66 0f 4a 90 90 90 90 90 [ ]*cmovp -0x6f6f6f70\(%eax\),%dx
+ 909: 66 0f 4b 90 90 90 90 90 [ ]*cmovnp -0x6f6f6f70\(%eax\),%dx
+ 911: 66 0f 4c 90 90 90 90 90 [ ]*cmovl -0x6f6f6f70\(%eax\),%dx
+ 919: 66 0f 4d 90 90 90 90 90 [ ]*cmovge -0x6f6f6f70\(%eax\),%dx
+ 921: 66 0f 4e 90 90 90 90 90 [ ]*cmovle -0x6f6f6f70\(%eax\),%dx
+ 929: 66 0f 4f 90 90 90 90 90 [ ]*cmovg -0x6f6f6f70\(%eax\),%dx
931: 66 0f a0 [ ]*pushw %fs
934: 66 0f a1 [ ]*popw %fs
- 937: 66 0f a3 90 90 90 90 90 [ ]*bt %dx,0x90909090\(%eax\)
- 93f: 66 0f a4 90 90 90 90 90 90 [ ]*shld \$0x90,%dx,0x90909090\(%eax\)
- 948: 66 0f a5 90 90 90 90 90 [ ]*shld %cl,%dx,0x90909090\(%eax\)
+ 937: 66 0f a3 90 90 90 90 90 [ ]*bt %dx,-0x6f6f6f70\(%eax\)
+ 93f: 66 0f a4 90 90 90 90 90 90 [ ]*shld \$0x90,%dx,-0x6f6f6f70\(%eax\)
+ 948: 66 0f a5 90 90 90 90 90 [ ]*shld %cl,%dx,-0x6f6f6f70\(%eax\)
950: 66 0f a8 [ ]*pushw %gs
953: 66 0f a9 [ ]*popw %gs
- 956: 66 0f ab 90 90 90 90 90 [ ]*bts %dx,0x90909090\(%eax\)
- 95e: 66 0f ac 90 90 90 90 90 90 [ ]*shrd \$0x90,%dx,0x90909090\(%eax\)
- 967: 66 0f ad 90 90 90 90 90 [ ]*shrd %cl,%dx,0x90909090\(%eax\)
- 96f: 66 0f af 90 90 90 90 90 [ ]*imul 0x90909090\(%eax\),%dx
- 977: 66 0f b1 90 90 90 90 90 [ ]*cmpxchg %dx,0x90909090\(%eax\)
- 97f: 66 0f b2 90 90 90 90 90 [ ]*lss 0x90909090\(%eax\),%dx
- 987: 66 0f b3 90 90 90 90 90 [ ]*btr %dx,0x90909090\(%eax\)
- 98f: 66 0f b4 90 90 90 90 90 [ ]*lfs 0x90909090\(%eax\),%dx
- 997: 66 0f b5 90 90 90 90 90 [ ]*lgs 0x90909090\(%eax\),%dx
- 99f: 66 0f b6 90 90 90 90 90 [ ]*movzbw 0x90909090\(%eax\),%dx
- 9a7: 66 0f bb 90 90 90 90 90 [ ]*btc %dx,0x90909090\(%eax\)
- 9af: 66 0f bc 90 90 90 90 90 [ ]*bsf 0x90909090\(%eax\),%dx
- 9b7: 66 0f bd 90 90 90 90 90 [ ]*bsr 0x90909090\(%eax\),%dx
- 9bf: 66 0f be 90 90 90 90 90 [ ]*movsbw 0x90909090\(%eax\),%dx
- 9c7: 66 0f c1 90 90 90 90 90 [ ]*xadd %dx,0x90909090\(%eax\)
+ 956: 66 0f ab 90 90 90 90 90 [ ]*bts %dx,-0x6f6f6f70\(%eax\)
+ 95e: 66 0f ac 90 90 90 90 90 90 [ ]*shrd \$0x90,%dx,-0x6f6f6f70\(%eax\)
+ 967: 66 0f ad 90 90 90 90 90 [ ]*shrd %cl,%dx,-0x6f6f6f70\(%eax\)
+ 96f: 66 0f af 90 90 90 90 90 [ ]*imul -0x6f6f6f70\(%eax\),%dx
+ 977: 66 0f b1 90 90 90 90 90 [ ]*cmpxchg %dx,-0x6f6f6f70\(%eax\)
+ 97f: 66 0f b2 90 90 90 90 90 [ ]*lss -0x6f6f6f70\(%eax\),%dx
+ 987: 66 0f b3 90 90 90 90 90 [ ]*btr %dx,-0x6f6f6f70\(%eax\)
+ 98f: 66 0f b4 90 90 90 90 90 [ ]*lfs -0x6f6f6f70\(%eax\),%dx
+ 997: 66 0f b5 90 90 90 90 90 [ ]*lgs -0x6f6f6f70\(%eax\),%dx
+ 99f: 66 0f b6 90 90 90 90 90 [ ]*movzbw -0x6f6f6f70\(%eax\),%dx
+ 9a7: 66 0f bb 90 90 90 90 90 [ ]*btc %dx,-0x6f6f6f70\(%eax\)
+ 9af: 66 0f bc 90 90 90 90 90 [ ]*bsf -0x6f6f6f70\(%eax\),%dx
+ 9b7: 66 0f bd 90 90 90 90 90 [ ]*bsr -0x6f6f6f70\(%eax\),%dx
+ 9bf: 66 0f be 90 90 90 90 90 [ ]*movsbw -0x6f6f6f70\(%eax\),%dx
+ 9c7: 66 0f c1 90 90 90 90 90 [ ]*xadd %dx,-0x6f6f6f70\(%eax\)
0+9cf <gs_foo>:
9cf: c3 [ ]*ret
@@ -591,7 +591,7 @@ Disassembly of section .text:
9ec: 88 04 56 [ ]*mov %al,\(%esi,%edx,2\)
9ef: eb 0c [ ]*jmp 9fd <rot5>
9f1: 6c [ ]*insb \(%dx\),%es:\(%edi\)
- 9f2: 66 0f c1 90 90 90 90 90 [ ]*xadd %dx,0x90909090\(%eax\)
+ 9f2: 66 0f c1 90 90 90 90 90 [ ]*xadd %dx,-0x6f6f6f70\(%eax\)
9fa: 83 e0 f8 [ ]*and \$0xfffffff8,%eax
0+9fd <rot5>:
@@ -601,7 +601,7 @@ Disassembly of section .text:
a04: 0d 90 90 90 90 [ ]*or \$0x90909090,%eax
a09: 0e [ ]*push %cs
a0a: 8b 04 5d 00 00 00 00 [ ]*mov 0x0\(,%ebx,2\),%eax
- a11: 10 14 85 90 90 90 90 [ ]*adc %dl,0x90909090\(,%eax,4\)
+ a11: 10 14 85 90 90 90 90 [ ]*adc %dl,-0x6f6f6f70\(,%eax,4\)
a18: 2f [ ]*das
a19: ea 90 90 90 90 90 90 [ ]*ljmp \$0x9090,\$0x90909090
a20: 66 a5 [ ]*movsw %ds:\(%esi\),%es:\(%edi\)
@@ -628,5 +628,6 @@ Disassembly of section .text:
a87: b0 11 [ ]*mov \$0x11,%al
a89: b3 47 [ ]*mov \$0x47,%bl
a8b: b3 47 [ ]*mov \$0x47,%bl
- a8d: 00 00 .*
+ a8d: 0f ad d0 [ ]*shrd %cl,%edx,%eax
+ a90: 0f a5 d0 [ ]*shld %cl,%edx,%eax
[ ]*...
diff --git a/gas/testsuite/gas/i386/intel.s b/gas/testsuite/gas/i386/intel.s
index 464f4b6d411b..ef65aa9c30f0 100644
--- a/gas/testsuite/gas/i386/intel.s
+++ b/gas/testsuite/gas/i386/intel.s
@@ -484,8 +484,8 @@ foo:
xchg bp, ax
xchg si, ax
xchg di, ax
- cbtw
- cwtd
+ cbw
+ cwd
callw 0x9090,0x9090
pushfw
popfw
@@ -624,5 +624,8 @@ rot5:
mov %al, 0x11
mov %bl, ((( 0x4711 ) >> 8) & 0xff)
mov %bl, 0x47
-
+
+ shrd eax, edx, cl
+ shld eax, edx, cl
+
.p2align 4,0
diff --git a/gas/testsuite/gas/i386/intel16.d b/gas/testsuite/gas/i386/intel16.d
index 495fe14f211b..e6d0ee28f83a 100644
--- a/gas/testsuite/gas/i386/intel16.d
+++ b/gas/testsuite/gas/i386/intel16.d
@@ -7,12 +7,12 @@
Disassembly of section .text:
0+000 <.text>:
- 0: 66 0f bf 06 00 00 [ ]*movswl 0,%eax
- 6: 66 0f be 06 00 00 [ ]*movsbl 0,%eax
- c: 0f be 06 00 00 [ ]*movsbw 0,%ax
- 11: 66 0f b7 06 00 00 [ ]*movzwl 0,%eax
- 17: 66 0f b6 06 00 00 [ ]*movzbl 0,%eax
- 1d: 0f b6 06 00 00 [ ]*movzbw 0,%ax
+ 0: 66 0f bf 06 00 00 [ ]*movswl 0x0,%eax
+ 6: 66 0f be 06 00 00 [ ]*movsbl 0x0,%eax
+ c: 0f be 06 00 00 [ ]*movsbw 0x0,%ax
+ 11: 66 0f b7 06 00 00 [ ]*movzwl 0x0,%eax
+ 17: 66 0f b6 06 00 00 [ ]*movzbl 0x0,%eax
+ 1d: 0f b6 06 00 00 [ ]*movzbw 0x0,%ax
22: 8d 00 [ ]*lea \(%bx,%si\),%ax
24: 8d 02 [ ]*lea \(%bp,%si\),%ax
26: 8d 01 [ ]*lea \(%bx,%di\),%ax
diff --git a/gas/testsuite/gas/i386/intelok.d b/gas/testsuite/gas/i386/intelok.d
index 8e7fdbf75447..878b712cf117 100644
--- a/gas/testsuite/gas/i386/intelok.d
+++ b/gas/testsuite/gas/i386/intelok.d
@@ -94,35 +94,35 @@ Disassembly of section .text:
[ ]*[0-9a-f]+: d7[ ]+xlat(b|[ ]+(BYTE PTR )?(ds:)?\[ebx\])
[ ]*[0-9a-f]+: d7[ ]+xlat(b|[ ]+(BYTE PTR )?(ds:)?\[ebx\])
[ ]*[0-9a-f]+: d7[ ]+xlat(b|[ ]+(BYTE PTR )?(ds:)?\[ebx\])
-[ ]*[0-9a-f]+: 8b 40 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+1\]
-[ ]*[0-9a-f]+: 8b 40 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+1\]
-[ ]*[0-9a-f]+: 8b 40 04[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+4\]
-[ ]*[0-9a-f]+: 8b 40 04[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+4\]
-[ ]*[0-9a-f]+: 8b 40 06[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+6\]
-[ ]*[0-9a-f]+: 8b 40 06[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+6\]
-[ ]*[0-9a-f]+: 8b 40 0c[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+12\]
-[ ]*[0-9a-f]+: 8b 40 0c[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+12\]
-[ ]*[0-9a-f]+: 8b 40 12[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+18\]
-[ ]*[0-9a-f]+: 8b 40 12[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+18\]
+[ ]*[0-9a-f]+: 8b 40 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?1\]
+[ ]*[0-9a-f]+: 8b 40 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?1\]
+[ ]*[0-9a-f]+: 8b 40 04[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?4\]
+[ ]*[0-9a-f]+: 8b 40 04[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?4\]
+[ ]*[0-9a-f]+: 8b 40 06[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?6\]
+[ ]*[0-9a-f]+: 8b 40 06[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?6\]
+[ ]*[0-9a-f]+: 8b 40 0c[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+0xc\]
+[ ]*[0-9a-f]+: 8b 40 0c[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+0xc\]
+[ ]*[0-9a-f]+: 8b 40 12[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+0x12\]
+[ ]*[0-9a-f]+: 8b 40 12[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+0x12\]
[ ]*[0-9a-f]+: 8b 04 85 02 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*4\+(0x)?2\]
[ ]*[0-9a-f]+: 8b 04 85 02 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*4\+(0x)?2\]
-[ ]*[0-9a-f]+: 8b 04 45 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*2\]
-[ ]*[0-9a-f]+: 8b 04 45 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*2\]
-[ ]*[0-9a-f]+: 8b 04 8d 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[ecx\*4\]
-[ ]*[0-9a-f]+: 8b 04 8d 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[ecx\*4\]
-[ ]*[0-9a-f]+: 8b 40 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+1\]
-[ ]*[0-9a-f]+: 8b 40 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+1\]
-[ ]*[0-9a-f]+: 8b 44 08 fb[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\-5\]
-[ ]*[0-9a-f]+: 8b 44 08 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+1\]
-[ ]*[0-9a-f]+: 8b 44 08 0f[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+15\]
-[ ]*[0-9a-f]+: 8b 40 10[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+16\]
-[ ]*[0-9a-f]+: 8b 40 10[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+16\]
-[ ]*[0-9a-f]+: 8b 44 08 10[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+16\]
-[ ]*[0-9a-f]+: 8b 44 08 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+1\]
-[ ]*[0-9a-f]+: 8b 44 08 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+1\]
-[ ]*[0-9a-f]+: 8b 44 08 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+1\]
-[ ]*[0-9a-f]+: 8b 44 08 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+1\]
-[ ]*[0-9a-f]+: 8b 44 08 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+1\]
+[ ]*[0-9a-f]+: 8b 04 45 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*2\+(0x)?0]
+[ ]*[0-9a-f]+: 8b 04 45 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*2\+(0x)?0]
+[ ]*[0-9a-f]+: 8b 04 8d 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[ecx\*4\+(0x)?0]
+[ ]*[0-9a-f]+: 8b 04 8d 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[ecx\*4\+(0x)?0]
+[ ]*[0-9a-f]+: 8b 40 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?1\]
+[ ]*[0-9a-f]+: 8b 40 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?1\]
+[ ]*[0-9a-f]+: 8b 44 08 fb[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\-(0x)?5\]
+[ ]*[0-9a-f]+: 8b 44 08 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+(0x)?1\]
+[ ]*[0-9a-f]+: 8b 44 08 0f[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+0xf\]
+[ ]*[0-9a-f]+: 8b 40 10[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+0x10\]
+[ ]*[0-9a-f]+: 8b 40 10[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+0x10\]
+[ ]*[0-9a-f]+: 8b 44 08 10[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+0x10\]
+[ ]*[0-9a-f]+: 8b 44 08 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+(0x)?1\]
+[ ]*[0-9a-f]+: 8b 44 08 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+(0x)?1\]
+[ ]*[0-9a-f]+: 8b 44 08 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+(0x)?1\]
+[ ]*[0-9a-f]+: 8b 44 08 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+(0x)?1\]
+[ ]*[0-9a-f]+: 8b 44 08 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\+(0x)?1\]
[ ]*[0-9a-f]+: 8b 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\]
[ ]*[0-9a-f]+: 8b 04 08[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\]
[ ]*[0-9a-f]+: 8b 04 08[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+ecx\]
@@ -153,12 +153,12 @@ Disassembly of section .text:
[ ]*[0-9a-f]+: b8 00 00 00 00[ ]+mov[ ]+eax,0x0
[ ]*[0-9a-f]+: b8 00 00 00 00[ ]+mov[ ]+eax,0x0
[ ]*[0-9a-f]+: b8 00 00 00 00[ ]+mov[ ]+eax,0x0
-[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\]
-[ ]*[0-9a-f]+: 8b 40 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+1]
-[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\]
+[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?0\]
+[ ]*[0-9a-f]+: 8b 40 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?1]
+[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?0\]
[ ]*[0-9a-f]+: 8b 80 01 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?1\]
-[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\]
-[ ]*[0-9a-f]+: 8b 40 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+1\]
+[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?0\]
+[ ]*[0-9a-f]+: 8b 40 01[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+(0x)?1\]
[ ]*[0-9a-f]+: a1 01 00 00 00[ ]+mov[ ]+eax,ds:0x1
[ ]*[0-9a-f]+: a1 ff ff ff ff[ ]+mov[ ]+eax,ds:0xffffffff
[ ]*[0-9a-f]+: 26 a1 02 00 00 00[ ]+mov[ ]+eax,es:0x2
diff --git a/gas/testsuite/gas/i386/inval-crc32.l b/gas/testsuite/gas/i386/inval-crc32.l
new file mode 100644
index 000000000000..14f908d1b9fc
--- /dev/null
+++ b/gas/testsuite/gas/i386/inval-crc32.l
@@ -0,0 +1,43 @@
+.*: Assembler messages:
+.*:6: Error: .*
+.*:7: Error: .*
+.*:8: Error: .*
+.*:9: Error: .*
+.*:10: Error: .*
+.*:11: Error: .*
+.*:12: Error: .*
+.*:13: Error: .*
+.*:14: Error: .*
+.*:17: Error: .*
+.*:18: Error: .*
+.*:19: Error: .*
+.*:20: Error: .*
+.*:21: Error: .*
+.*:22: Error: .*
+.*:23: Error: .*
+GAS LISTING .*
+
+
+[ ]*1[ ]+\# Check illegal crc32 in SSE4\.2
+[ ]*2[ ]+
+[ ]*3[ ]+\.text
+[ ]*4[ ]+foo:
+[ ]*5[ ]+
+[ ]*6[ ]+crc32b \(%esi\), %al
+[ ]*7[ ]+crc32w \(%esi\), %ax
+[ ]*8[ ]+crc32 \(%esi\), %al
+[ ]*9[ ]+crc32 \(%esi\), %ax
+[ ]*10[ ]+crc32 \(%esi\), %eax
+[ ]*11[ ]+crc32 %al, %al
+[ ]*12[ ]+crc32b %al, %al
+[ ]*13[ ]+crc32 %ax, %ax
+[ ]*14[ ]+crc32w %ax, %ax
+[ ]*15[ ]+
+[ ]*16[ ]+\.intel_syntax noprefix
+[ ]*17[ ]+crc32 al,byte ptr \[esi\]
+[ ]*18[ ]+crc32 ax, word ptr \[esi\]
+[ ]*19[ ]+crc32 al, \[esi\]
+[ ]*20[ ]+crc32 ax, \[esi\]
+[ ]*21[ ]+crc32 eax, \[esi\]
+[ ]*22[ ]+crc32 al,al
+[ ]*23[ ]+crc32 ax, ax
diff --git a/gas/testsuite/gas/i386/inval-crc32.s b/gas/testsuite/gas/i386/inval-crc32.s
new file mode 100644
index 000000000000..5232fb0ae98e
--- /dev/null
+++ b/gas/testsuite/gas/i386/inval-crc32.s
@@ -0,0 +1,23 @@
+# Check illegal crc32 in SSE4.2
+
+ .text
+foo:
+
+crc32b (%esi), %al
+crc32w (%esi), %ax
+crc32 (%esi), %al
+crc32 (%esi), %ax
+crc32 (%esi), %eax
+crc32 %al, %al
+crc32b %al, %al
+crc32 %ax, %ax
+crc32w %ax, %ax
+
+.intel_syntax noprefix
+crc32 al,byte ptr [esi]
+crc32 ax, word ptr [esi]
+crc32 al, [esi]
+crc32 ax, [esi]
+crc32 eax, [esi]
+crc32 al,al
+crc32 ax, ax
diff --git a/gas/testsuite/gas/i386/inval.l b/gas/testsuite/gas/i386/inval.l
index e78949918531..8abcbde95a73 100644
--- a/gas/testsuite/gas/i386/inval.l
+++ b/gas/testsuite/gas/i386/inval.l
@@ -45,6 +45,8 @@
.*:46: Error: .*
.*:47: Error: .*
.*:48: Error: .*
+.*:49: Error: .*
+.*:50: Error: .*
GAS LISTING .*
@@ -96,3 +98,5 @@ GAS LISTING .*
46 [ ]* fstb %st\(0\)
47 [ ]* fcompll 28\(%ebp\)
48 [ ]* fldlw \(%eax\)
+ 49 [ ]* movl \$%ebx,%eax
+ 50 [ ]* insertq \$4,\$2,%xmm2,%ebx
diff --git a/gas/testsuite/gas/i386/inval.s b/gas/testsuite/gas/i386/inval.s
index e37a18eac60d..5b440ed0b55f 100644
--- a/gas/testsuite/gas/i386/inval.s
+++ b/gas/testsuite/gas/i386/inval.s
@@ -46,3 +46,5 @@ foo: jaw foo
fstb %st(0)
fcompll 28(%ebp)
fldlw (%eax)
+ movl $%ebx,%eax
+ insertq $4,$2,%xmm2,%ebx
diff --git a/gas/testsuite/gas/i386/jump16.d b/gas/testsuite/gas/i386/jump16.d
index 3d5d6bbb42f2..87951effa576 100644
--- a/gas/testsuite/gas/i386/jump16.d
+++ b/gas/testsuite/gas/i386/jump16.d
@@ -8,33 +8,33 @@ Disassembly of section .text:
0+000 <.text>:
0: eb fe [ ]*jmp (0x0|0 <.text>)
2: e9 (fe|fb) ff [ ]*jmp (0x3|0x0|0 <.text>) 3: (R_386_PC)?(DISP)?16 xxx
- 5: ff 26 00 00 [ ]*jmp \*0 7: (R_386_)?(dir)?16 xxx
+ 5: ff 26 00 00 [ ]*jmp \*0x0 7: (R_386_)?(dir)?16 xxx
9: 66 ff e7 [ ]*jmpl \*%edi
c: 67 ff 27 [ ]*addr32 jmp \*\(%edi\)
f: 67 ff af 00 00 00 00 [ ]*addr32 ljmp \*0x0\(%edi\) 12: (R_386_)?(dir)?32 xxx
- 16: ff 2e 00 00 [ ]*ljmp \*0 18: (R_386_)?(dir)?16 xxx
+ 16: ff 2e 00 00 [ ]*ljmp \*0x0 18: (R_386_)?(dir)?16 xxx
1a: ea 00 00 34 12 [ ]*ljmp \$0x1234,\$0x0 1b: (R_386_)?(dir)?16 xxx
1f: 66 e8 db ff ff ff [ ]*calll (0x0|0 <.text>)
25: 66 e8 (fc|d5) ff ff ff [ ]*calll (0x27|0x0|0 <.text>) 27: (R_386_PC)?(DISP)?32 xxx
- 2b: 66 ff 16 00 00 [ ]*calll \*0 2e: (R_386_)?(dir)?16 xxx
+ 2b: 66 ff 16 00 00 [ ]*calll \*0x0 2e: (R_386_)?(dir)?16 xxx
30: 66 ff d7 [ ]*calll \*%edi
33: 67 66 ff 17 [ ]*addr32 calll \*\(%edi\)
37: 67 66 ff 9f 00 00 00 00 [ ]*addr32 lcalll \*0x0\(%edi\) 3b: (R_386_)?(dir)?32 xxx
- 3f: 66 ff 1e 00 00 [ ]*lcalll \*0 42: (R_386_)?(dir)?16 xxx
+ 3f: 66 ff 1e 00 00 [ ]*lcalll \*0x0 42: (R_386_)?(dir)?16 xxx
44: 66 9a 00 00 00 00 34 12 [ ]*lcalll \$0x1234,\$0x0 46: (R_386_)?(dir)?32 xxx
4c: eb b2 [ ]*jmp (0x0|0 <.text>)
- 4e: ff 26 00 00 [ ]*jmp \*0 50: (R_386_)?(dir)?16 xxx
+ 4e: ff 26 00 00 [ ]*jmp \*0x0 50: (R_386_)?(dir)?16 xxx
52: ff e7 [ ]*jmp \*%di
54: ff 25 [ ]*jmp \*\(%di\)
- 56: ff ad 00 00 [ ]*ljmp \*0\(%di\) 58: (R_386_)?(dir)?16 xxx
- 5a: ff 2e 00 00 [ ]*ljmp \*0 5c: (R_386_)?(dir)?16 xxx
+ 56: ff ad 00 00 [ ]*ljmp \*0x0\(%di\) 58: (R_386_)?(dir)?16 xxx
+ 5a: ff 2e 00 00 [ ]*ljmp \*0x0 5c: (R_386_)?(dir)?16 xxx
5e: ea 00 00 34 12 [ ]*ljmp \$0x1234,\$0x0 5f: (R_386_)?(dir)?16 xxx
63: e8 9a ff [ ]*call (0x0|0 <.text>)
66: e8 (fe|97) ff [ ]*call (0x67|0x0|0 <.text>) 67: (R_386_PC)?(DISP)?16 xxx
- 69: ff 16 00 00 [ ]*call \*0 6b: (R_386_)?(dir)?16 xxx
+ 69: ff 16 00 00 [ ]*call \*0x0 6b: (R_386_)?(dir)?16 xxx
6d: ff d7 [ ]*call \*%di
6f: ff 15 [ ]*call \*\(%di\)
- 71: ff 9d 00 00 [ ]*lcall \*0\(%di\) 73: (R_386_)?(dir)?16 xxx
- 75: ff 1e 00 00 [ ]*lcall \*0 77: (R_386_)?(dir)?16 xxx
+ 71: ff 9d 00 00 [ ]*lcall \*0x0\(%di\) 73: (R_386_)?(dir)?16 xxx
+ 75: ff 1e 00 00 [ ]*lcall \*0x0 77: (R_386_)?(dir)?16 xxx
79: 9a 00 00 34 12 [ ]*lcall \$0x1234,\$0x0 7a: (R_386_)?(dir)?16 xxx
...
diff --git a/gas/testsuite/gas/i386/merom.d b/gas/testsuite/gas/i386/merom.d
index a09721c85eca..9baa234e45fe 100644
--- a/gas/testsuite/gas/i386/merom.d
+++ b/gas/testsuite/gas/i386/merom.d
@@ -70,4 +70,4 @@ Disassembly of section .text:
116: 0f 38 1e c1[ ]+pabsd %mm1,%mm0
11a: 66 0f 38 1e 01[ ]+pabsd \(%ecx\),%xmm0
11f: 66 0f 38 1e c1[ ]+pabsd %xmm1,%xmm0
- ...
+#pass
diff --git a/gas/testsuite/gas/i386/naked.d b/gas/testsuite/gas/i386/naked.d
index 66214d58addf..27c1c052e501 100644
--- a/gas/testsuite/gas/i386/naked.d
+++ b/gas/testsuite/gas/i386/naked.d
@@ -6,16 +6,16 @@
Disassembly of section .text:
0+000 <foo>:
- 0: 66 26 ff 23 [ ]*jmpw \*%es:\(%ebx\)
+ 0: 26 66 ff 23 [ ]*jmpw \*%es:\(%ebx\)
4: 8a 25 50 00 00 00 [ ]*mov 0x50,%ah
a: b2 20 [ ]*mov \$0x20,%dl
c: bb 00 00 00 00 [ ]*mov \$0x0,%ebx d: (R_386_)?(dir)?32 .text
11: d9 c9 [ ]*fxch %st\(1\)
- 13: 36 8c a4 81 d2 04 00 00 [ ]*movw %fs,%ss:0x4d2\(%ecx,%eax,4\)
- 1b: 8c 2c ed 00 00 00 00 [ ]*movw %gs,0x0\(,%ebp,8\)
+ 13: 36 8c a4 81 d2 04 00 00 [ ]*mov %fs,%ss:0x4d2\(%ecx,%eax,4\)
+ 1b: 8c 2c ed 00 00 00 00 [ ]*mov %gs,0x0\(,%ebp,8\)
22: 26 88 25 00 00 00 00 [ ]*mov %ah,%es:0x0
- 29: 2e 8b 74 14 80 [ ]*mov %cs:0xffffff80\(%esp,%edx,1\),%esi
- 2e: f3 65 a5 [ ]*rep movsl %gs:\(%esi\),%es:\(%edi\)
+ 29: 2e 8b 74 14 80 [ ]*mov %cs:-0x80\(%esp,%edx,1\),%esi
+ 2e: 65 f3 a5 [ ]*rep movsl %gs:\(%esi\),%es:\(%edi\)
31: ec [ ]*in \(%dx\),%al
32: 66 ef [ ]*out %ax,\(%dx\)
34: 67 d2 14 [ ]*addr16 rclb %cl,\(%si\)
diff --git a/gas/testsuite/gas/i386/nops-1-i386.d b/gas/testsuite/gas/i386/nops-1-i386.d
new file mode 100644
index 000000000000..6d1582aa3752
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-1-i386.d
@@ -0,0 +1,177 @@
+#as: -mtune=i686 -march=i386
+#source: nops-1.s
+#objdump: -drw
+#name: i386 -mtune=i686 -march=i386 nops 1
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop15>:
+[ ]*0:[ ]+90[ ]+nop[ ]*
+[ ]*1:[ ]+eb 0d[ ]+jmp[ ]+10[ ]+<nop14>
+[ ]*3:[ ]+90[ ]+nop[ ]*
+[ ]*4:[ ]+90[ ]+nop[ ]*
+[ ]*5:[ ]+90[ ]+nop[ ]*
+[ ]*6:[ ]+90[ ]+nop[ ]*
+[ ]*7:[ ]+90[ ]+nop[ ]*
+[ ]*8:[ ]+90[ ]+nop[ ]*
+[ ]*9:[ ]+90[ ]+nop[ ]*
+[ ]*a:[ ]+90[ ]+nop[ ]*
+[ ]*b:[ ]+90[ ]+nop[ ]*
+[ ]*c:[ ]+90[ ]+nop[ ]*
+[ ]*d:[ ]+90[ ]+nop[ ]*
+[ ]*e:[ ]+90[ ]+nop[ ]*
+[ ]*f:[ ]+90[ ]+nop[ ]*
+
+0+10 <nop14>:
+[ ]*10:[ ]+90[ ]+nop[ ]*
+[ ]*11:[ ]+90[ ]+nop[ ]*
+[ ]*12:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*19:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+20 <nop13>:
+[ ]*20:[ ]+90[ ]+nop[ ]*
+[ ]*21:[ ]+90[ ]+nop[ ]*
+[ ]*22:[ ]+90[ ]+nop[ ]*
+[ ]*23:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*29:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+30 <nop12>:
+[ ]*30:[ ]+90[ ]+nop[ ]*
+[ ]*31:[ ]+90[ ]+nop[ ]*
+[ ]*32:[ ]+90[ ]+nop[ ]*
+[ ]*33:[ ]+90[ ]+nop[ ]*
+[ ]*34:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*3a:[ ]+8d bf 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+40 <nop11>:
+[ ]*40:[ ]+90[ ]+nop[ ]*
+[ ]*41:[ ]+90[ ]+nop[ ]*
+[ ]*42:[ ]+90[ ]+nop[ ]*
+[ ]*43:[ ]+90[ ]+nop[ ]*
+[ ]*44:[ ]+90[ ]+nop[ ]*
+[ ]*45:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*49:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+50 <nop10>:
+[ ]*50:[ ]+90[ ]+nop[ ]*
+[ ]*51:[ ]+90[ ]+nop[ ]*
+[ ]*52:[ ]+90[ ]+nop[ ]*
+[ ]*53:[ ]+90[ ]+nop[ ]*
+[ ]*54:[ ]+90[ ]+nop[ ]*
+[ ]*55:[ ]+90[ ]+nop[ ]*
+[ ]*56:[ ]+8d 76 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*59:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+60 <nop9>:
+[ ]*60:[ ]+90[ ]+nop[ ]*
+[ ]*61:[ ]+90[ ]+nop[ ]*
+[ ]*62:[ ]+90[ ]+nop[ ]*
+[ ]*63:[ ]+90[ ]+nop[ ]*
+[ ]*64:[ ]+90[ ]+nop[ ]*
+[ ]*65:[ ]+90[ ]+nop[ ]*
+[ ]*66:[ ]+90[ ]+nop[ ]*
+[ ]*67:[ ]+89 f6[ ]+mov[ ]+%esi,%esi
+[ ]*69:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+70 <nop8>:
+[ ]*70:[ ]+90[ ]+nop[ ]*
+[ ]*71:[ ]+90[ ]+nop[ ]*
+[ ]*72:[ ]+90[ ]+nop[ ]*
+[ ]*73:[ ]+90[ ]+nop[ ]*
+[ ]*74:[ ]+90[ ]+nop[ ]*
+[ ]*75:[ ]+90[ ]+nop[ ]*
+[ ]*76:[ ]+90[ ]+nop[ ]*
+[ ]*77:[ ]+90[ ]+nop[ ]*
+[ ]*78:[ ]+90[ ]+nop[ ]*
+[ ]*79:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+80 <nop7>:
+[ ]*80:[ ]+90[ ]+nop[ ]*
+[ ]*81:[ ]+90[ ]+nop[ ]*
+[ ]*82:[ ]+90[ ]+nop[ ]*
+[ ]*83:[ ]+90[ ]+nop[ ]*
+[ ]*84:[ ]+90[ ]+nop[ ]*
+[ ]*85:[ ]+90[ ]+nop[ ]*
+[ ]*86:[ ]+90[ ]+nop[ ]*
+[ ]*87:[ ]+90[ ]+nop[ ]*
+[ ]*88:[ ]+90[ ]+nop[ ]*
+[ ]*89:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+90 <nop6>:
+[ ]*90:[ ]+90[ ]+nop[ ]*
+[ ]*91:[ ]+90[ ]+nop[ ]*
+[ ]*92:[ ]+90[ ]+nop[ ]*
+[ ]*93:[ ]+90[ ]+nop[ ]*
+[ ]*94:[ ]+90[ ]+nop[ ]*
+[ ]*95:[ ]+90[ ]+nop[ ]*
+[ ]*96:[ ]+90[ ]+nop[ ]*
+[ ]*97:[ ]+90[ ]+nop[ ]*
+[ ]*98:[ ]+90[ ]+nop[ ]*
+[ ]*99:[ ]+90[ ]+nop[ ]*
+[ ]*9a:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+a0 <nop5>:
+[ ]*a0:[ ]+90[ ]+nop[ ]*
+[ ]*a1:[ ]+90[ ]+nop[ ]*
+[ ]*a2:[ ]+90[ ]+nop[ ]*
+[ ]*a3:[ ]+90[ ]+nop[ ]*
+[ ]*a4:[ ]+90[ ]+nop[ ]*
+[ ]*a5:[ ]+90[ ]+nop[ ]*
+[ ]*a6:[ ]+90[ ]+nop[ ]*
+[ ]*a7:[ ]+90[ ]+nop[ ]*
+[ ]*a8:[ ]+90[ ]+nop[ ]*
+[ ]*a9:[ ]+90[ ]+nop[ ]*
+[ ]*aa:[ ]+90[ ]+nop[ ]*
+[ ]*ab:[ ]+90[ ]+nop[ ]*
+[ ]*ac:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+b0 <nop4>:
+[ ]*b0:[ ]+90[ ]+nop[ ]*
+[ ]*b1:[ ]+90[ ]+nop[ ]*
+[ ]*b2:[ ]+90[ ]+nop[ ]*
+[ ]*b3:[ ]+90[ ]+nop[ ]*
+[ ]*b4:[ ]+90[ ]+nop[ ]*
+[ ]*b5:[ ]+90[ ]+nop[ ]*
+[ ]*b6:[ ]+90[ ]+nop[ ]*
+[ ]*b7:[ ]+90[ ]+nop[ ]*
+[ ]*b8:[ ]+90[ ]+nop[ ]*
+[ ]*b9:[ ]+90[ ]+nop[ ]*
+[ ]*ba:[ ]+90[ ]+nop[ ]*
+[ ]*bb:[ ]+90[ ]+nop[ ]*
+[ ]*bc:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+c0 <nop3>:
+[ ]*c0:[ ]+90[ ]+nop[ ]*
+[ ]*c1:[ ]+90[ ]+nop[ ]*
+[ ]*c2:[ ]+90[ ]+nop[ ]*
+[ ]*c3:[ ]+90[ ]+nop[ ]*
+[ ]*c4:[ ]+90[ ]+nop[ ]*
+[ ]*c5:[ ]+90[ ]+nop[ ]*
+[ ]*c6:[ ]+90[ ]+nop[ ]*
+[ ]*c7:[ ]+90[ ]+nop[ ]*
+[ ]*c8:[ ]+90[ ]+nop[ ]*
+[ ]*c9:[ ]+90[ ]+nop[ ]*
+[ ]*ca:[ ]+90[ ]+nop[ ]*
+[ ]*cb:[ ]+90[ ]+nop[ ]*
+[ ]*cc:[ ]+90[ ]+nop[ ]*
+[ ]*cd:[ ]+8d 76 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+d0 <nop2>:
+[ ]*d0:[ ]+90[ ]+nop[ ]*
+[ ]*d1:[ ]+90[ ]+nop[ ]*
+[ ]*d2:[ ]+90[ ]+nop[ ]*
+[ ]*d3:[ ]+90[ ]+nop[ ]*
+[ ]*d4:[ ]+90[ ]+nop[ ]*
+[ ]*d5:[ ]+90[ ]+nop[ ]*
+[ ]*d6:[ ]+90[ ]+nop[ ]*
+[ ]*d7:[ ]+90[ ]+nop[ ]*
+[ ]*d8:[ ]+90[ ]+nop[ ]*
+[ ]*d9:[ ]+90[ ]+nop[ ]*
+[ ]*da:[ ]+90[ ]+nop[ ]*
+[ ]*db:[ ]+90[ ]+nop[ ]*
+[ ]*dc:[ ]+90[ ]+nop[ ]*
+[ ]*dd:[ ]+90[ ]+nop[ ]*
+[ ]*de:[ ]+66 90[ ]+xchg[ ]+%ax,%ax
+#pass
diff --git a/gas/testsuite/gas/i386/nops-1-i686.d b/gas/testsuite/gas/i386/nops-1-i686.d
new file mode 100644
index 000000000000..b3ee23bb24b8
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-1-i686.d
@@ -0,0 +1,161 @@
+#as: -mtune=i686
+#source: nops-1.s
+#objdump: -drw
+#name: i386 -mtune=i686 nops 1
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop15>:
+[ ]*0:[ ]+90[ ]+nop[ ]*
+[ ]*1:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%eax\)
+[ ]*8:[ ]+0f 1f 84 00 00 00 00 00[ ]+nopl[ ]+0x0\(%eax,%eax,1\)
+
+0+10 <nop14>:
+[ ]*10:[ ]+90[ ]+nop[ ]*
+[ ]*11:[ ]+90[ ]+nop[ ]*
+[ ]*12:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%eax\)
+[ ]*19:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%eax\)
+
+0+20 <nop13>:
+[ ]*20:[ ]+90[ ]+nop[ ]*
+[ ]*21:[ ]+90[ ]+nop[ ]*
+[ ]*22:[ ]+90[ ]+nop[ ]*
+[ ]*23:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%eax,%eax,1\)
+[ ]*29:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%eax\)
+
+0+30 <nop12>:
+[ ]*30:[ ]+90[ ]+nop[ ]*
+[ ]*31:[ ]+90[ ]+nop[ ]*
+[ ]*32:[ ]+90[ ]+nop[ ]*
+[ ]*33:[ ]+90[ ]+nop[ ]*
+[ ]*34:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%eax,%eax,1\)
+[ ]*3a:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%eax,%eax,1\)
+
+0+40 <nop11>:
+[ ]*40:[ ]+90[ ]+nop[ ]*
+[ ]*41:[ ]+90[ ]+nop[ ]*
+[ ]*42:[ ]+90[ ]+nop[ ]*
+[ ]*43:[ ]+90[ ]+nop[ ]*
+[ ]*44:[ ]+90[ ]+nop[ ]*
+[ ]*45:[ ]+0f 1f 44 00 00[ ]+nopl[ ]+0x0\(%eax,%eax,1\)
+[ ]*4a:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%eax,%eax,1\)
+
+0+50 <nop10>:
+[ ]*50:[ ]+90[ ]+nop[ ]*
+[ ]*51:[ ]+90[ ]+nop[ ]*
+[ ]*52:[ ]+90[ ]+nop[ ]*
+[ ]*53:[ ]+90[ ]+nop[ ]*
+[ ]*54:[ ]+90[ ]+nop[ ]*
+[ ]*55:[ ]+90[ ]+nop[ ]*
+[ ]*56:[ ]+66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%eax,%eax,1\)
+
+0+60 <nop9>:
+[ ]*60:[ ]+90[ ]+nop[ ]*
+[ ]*61:[ ]+90[ ]+nop[ ]*
+[ ]*62:[ ]+90[ ]+nop[ ]*
+[ ]*63:[ ]+90[ ]+nop[ ]*
+[ ]*64:[ ]+90[ ]+nop[ ]*
+[ ]*65:[ ]+90[ ]+nop[ ]*
+[ ]*66:[ ]+90[ ]+nop[ ]*
+[ ]*67:[ ]+66 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+0x0\(%eax,%eax,1\)
+
+0+70 <nop8>:
+[ ]*70:[ ]+90[ ]+nop[ ]*
+[ ]*71:[ ]+90[ ]+nop[ ]*
+[ ]*72:[ ]+90[ ]+nop[ ]*
+[ ]*73:[ ]+90[ ]+nop[ ]*
+[ ]*74:[ ]+90[ ]+nop[ ]*
+[ ]*75:[ ]+90[ ]+nop[ ]*
+[ ]*76:[ ]+90[ ]+nop[ ]*
+[ ]*77:[ ]+90[ ]+nop[ ]*
+[ ]*78:[ ]+0f 1f 84 00 00 00 00 00[ ]+nopl[ ]+0x0\(%eax,%eax,1\)
+
+0+80 <nop7>:
+[ ]*80:[ ]+90[ ]+nop[ ]*
+[ ]*81:[ ]+90[ ]+nop[ ]*
+[ ]*82:[ ]+90[ ]+nop[ ]*
+[ ]*83:[ ]+90[ ]+nop[ ]*
+[ ]*84:[ ]+90[ ]+nop[ ]*
+[ ]*85:[ ]+90[ ]+nop[ ]*
+[ ]*86:[ ]+90[ ]+nop[ ]*
+[ ]*87:[ ]+90[ ]+nop[ ]*
+[ ]*88:[ ]+90[ ]+nop[ ]*
+[ ]*89:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%eax\)
+
+0+90 <nop6>:
+[ ]*90:[ ]+90[ ]+nop[ ]*
+[ ]*91:[ ]+90[ ]+nop[ ]*
+[ ]*92:[ ]+90[ ]+nop[ ]*
+[ ]*93:[ ]+90[ ]+nop[ ]*
+[ ]*94:[ ]+90[ ]+nop[ ]*
+[ ]*95:[ ]+90[ ]+nop[ ]*
+[ ]*96:[ ]+90[ ]+nop[ ]*
+[ ]*97:[ ]+90[ ]+nop[ ]*
+[ ]*98:[ ]+90[ ]+nop[ ]*
+[ ]*99:[ ]+90[ ]+nop[ ]*
+[ ]*9a:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%eax,%eax,1\)
+
+0+a0 <nop5>:
+[ ]*a0:[ ]+90[ ]+nop[ ]*
+[ ]*a1:[ ]+90[ ]+nop[ ]*
+[ ]*a2:[ ]+90[ ]+nop[ ]*
+[ ]*a3:[ ]+90[ ]+nop[ ]*
+[ ]*a4:[ ]+90[ ]+nop[ ]*
+[ ]*a5:[ ]+90[ ]+nop[ ]*
+[ ]*a6:[ ]+90[ ]+nop[ ]*
+[ ]*a7:[ ]+90[ ]+nop[ ]*
+[ ]*a8:[ ]+90[ ]+nop[ ]*
+[ ]*a9:[ ]+90[ ]+nop[ ]*
+[ ]*aa:[ ]+90[ ]+nop[ ]*
+[ ]*ab:[ ]+0f 1f 44 00 00[ ]+nopl[ ]+0x0\(%eax,%eax,1\)
+
+0+b0 <nop4>:
+[ ]*b0:[ ]+90[ ]+nop[ ]*
+[ ]*b1:[ ]+90[ ]+nop[ ]*
+[ ]*b2:[ ]+90[ ]+nop[ ]*
+[ ]*b3:[ ]+90[ ]+nop[ ]*
+[ ]*b4:[ ]+90[ ]+nop[ ]*
+[ ]*b5:[ ]+90[ ]+nop[ ]*
+[ ]*b6:[ ]+90[ ]+nop[ ]*
+[ ]*b7:[ ]+90[ ]+nop[ ]*
+[ ]*b8:[ ]+90[ ]+nop[ ]*
+[ ]*b9:[ ]+90[ ]+nop[ ]*
+[ ]*ba:[ ]+90[ ]+nop[ ]*
+[ ]*bb:[ ]+90[ ]+nop[ ]*
+[ ]*bc:[ ]+0f 1f 40 00[ ]+nopl[ ]+0x0\(%eax\)
+
+0+c0 <nop3>:
+[ ]*c0:[ ]+90[ ]+nop[ ]*
+[ ]*c1:[ ]+90[ ]+nop[ ]*
+[ ]*c2:[ ]+90[ ]+nop[ ]*
+[ ]*c3:[ ]+90[ ]+nop[ ]*
+[ ]*c4:[ ]+90[ ]+nop[ ]*
+[ ]*c5:[ ]+90[ ]+nop[ ]*
+[ ]*c6:[ ]+90[ ]+nop[ ]*
+[ ]*c7:[ ]+90[ ]+nop[ ]*
+[ ]*c8:[ ]+90[ ]+nop[ ]*
+[ ]*c9:[ ]+90[ ]+nop[ ]*
+[ ]*ca:[ ]+90[ ]+nop[ ]*
+[ ]*cb:[ ]+90[ ]+nop[ ]*
+[ ]*cc:[ ]+90[ ]+nop[ ]*
+[ ]*cd:[ ]+0f 1f 00[ ]+nopl[ ]+\(%eax\)
+
+0+d0 <nop2>:
+[ ]*d0:[ ]+90[ ]+nop[ ]*
+[ ]*d1:[ ]+90[ ]+nop[ ]*
+[ ]*d2:[ ]+90[ ]+nop[ ]*
+[ ]*d3:[ ]+90[ ]+nop[ ]*
+[ ]*d4:[ ]+90[ ]+nop[ ]*
+[ ]*d5:[ ]+90[ ]+nop[ ]*
+[ ]*d6:[ ]+90[ ]+nop[ ]*
+[ ]*d7:[ ]+90[ ]+nop[ ]*
+[ ]*d8:[ ]+90[ ]+nop[ ]*
+[ ]*d9:[ ]+90[ ]+nop[ ]*
+[ ]*da:[ ]+90[ ]+nop[ ]*
+[ ]*db:[ ]+90[ ]+nop[ ]*
+[ ]*dc:[ ]+90[ ]+nop[ ]*
+[ ]*dd:[ ]+90[ ]+nop[ ]*
+[ ]*de:[ ]+66 90[ ]+xchg[ ]+%ax,%ax
+#pass
diff --git a/gas/testsuite/gas/i386/nops-1-merom.d b/gas/testsuite/gas/i386/nops-1-merom.d
new file mode 100644
index 000000000000..90668e56f07b
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-1-merom.d
@@ -0,0 +1,156 @@
+#as: -mtune=merom
+#source: nops-1.s
+#objdump: -drw
+#name: i386 -mtune=merom nops 1
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop15>:
+[ ]*0:[ ]+90[ ]+nop[ ]*
+[ ]*1:[ ]+66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%eax,%eax,1\)
+
+0+10 <nop14>:
+[ ]*10:[ ]+90[ ]+nop[ ]*
+[ ]*11:[ ]+90[ ]+nop[ ]*
+[ ]*12:[ ]+66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%eax,%eax,1\)
+
+0+20 <nop13>:
+[ ]*20:[ ]+90[ ]+nop[ ]*
+[ ]*21:[ ]+90[ ]+nop[ ]*
+[ ]*22:[ ]+90[ ]+nop[ ]*
+[ ]*23:[ ]+66 66 66 66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%eax,%eax,1\)
+
+0+30 <nop12>:
+[ ]*30:[ ]+90[ ]+nop[ ]*
+[ ]*31:[ ]+90[ ]+nop[ ]*
+[ ]*32:[ ]+90[ ]+nop[ ]*
+[ ]*33:[ ]+90[ ]+nop[ ]*
+[ ]*34:[ ]+66 66 66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%eax,%eax,1\)
+
+0+40 <nop11>:
+[ ]*40:[ ]+90[ ]+nop[ ]*
+[ ]*41:[ ]+90[ ]+nop[ ]*
+[ ]*42:[ ]+90[ ]+nop[ ]*
+[ ]*43:[ ]+90[ ]+nop[ ]*
+[ ]*44:[ ]+90[ ]+nop[ ]*
+[ ]*45:[ ]+66 66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%eax,%eax,1\)
+
+0+50 <nop10>:
+[ ]*50:[ ]+90[ ]+nop[ ]*
+[ ]*51:[ ]+90[ ]+nop[ ]*
+[ ]*52:[ ]+90[ ]+nop[ ]*
+[ ]*53:[ ]+90[ ]+nop[ ]*
+[ ]*54:[ ]+90[ ]+nop[ ]*
+[ ]*55:[ ]+90[ ]+nop[ ]*
+[ ]*56:[ ]+66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%eax,%eax,1\)
+
+0+60 <nop9>:
+[ ]*60:[ ]+90[ ]+nop[ ]*
+[ ]*61:[ ]+90[ ]+nop[ ]*
+[ ]*62:[ ]+90[ ]+nop[ ]*
+[ ]*63:[ ]+90[ ]+nop[ ]*
+[ ]*64:[ ]+90[ ]+nop[ ]*
+[ ]*65:[ ]+90[ ]+nop[ ]*
+[ ]*66:[ ]+90[ ]+nop[ ]*
+[ ]*67:[ ]+66 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+0x0\(%eax,%eax,1\)
+
+0+70 <nop8>:
+[ ]*70:[ ]+90[ ]+nop[ ]*
+[ ]*71:[ ]+90[ ]+nop[ ]*
+[ ]*72:[ ]+90[ ]+nop[ ]*
+[ ]*73:[ ]+90[ ]+nop[ ]*
+[ ]*74:[ ]+90[ ]+nop[ ]*
+[ ]*75:[ ]+90[ ]+nop[ ]*
+[ ]*76:[ ]+90[ ]+nop[ ]*
+[ ]*77:[ ]+90[ ]+nop[ ]*
+[ ]*78:[ ]+0f 1f 84 00 00 00 00 00[ ]+nopl[ ]+0x0\(%eax,%eax,1\)
+
+0+80 <nop7>:
+[ ]*80:[ ]+90[ ]+nop[ ]*
+[ ]*81:[ ]+90[ ]+nop[ ]*
+[ ]*82:[ ]+90[ ]+nop[ ]*
+[ ]*83:[ ]+90[ ]+nop[ ]*
+[ ]*84:[ ]+90[ ]+nop[ ]*
+[ ]*85:[ ]+90[ ]+nop[ ]*
+[ ]*86:[ ]+90[ ]+nop[ ]*
+[ ]*87:[ ]+90[ ]+nop[ ]*
+[ ]*88:[ ]+90[ ]+nop[ ]*
+[ ]*89:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%eax\)
+
+0+90 <nop6>:
+[ ]*90:[ ]+90[ ]+nop[ ]*
+[ ]*91:[ ]+90[ ]+nop[ ]*
+[ ]*92:[ ]+90[ ]+nop[ ]*
+[ ]*93:[ ]+90[ ]+nop[ ]*
+[ ]*94:[ ]+90[ ]+nop[ ]*
+[ ]*95:[ ]+90[ ]+nop[ ]*
+[ ]*96:[ ]+90[ ]+nop[ ]*
+[ ]*97:[ ]+90[ ]+nop[ ]*
+[ ]*98:[ ]+90[ ]+nop[ ]*
+[ ]*99:[ ]+90[ ]+nop[ ]*
+[ ]*9a:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%eax,%eax,1\)
+
+0+a0 <nop5>:
+[ ]*a0:[ ]+90[ ]+nop[ ]*
+[ ]*a1:[ ]+90[ ]+nop[ ]*
+[ ]*a2:[ ]+90[ ]+nop[ ]*
+[ ]*a3:[ ]+90[ ]+nop[ ]*
+[ ]*a4:[ ]+90[ ]+nop[ ]*
+[ ]*a5:[ ]+90[ ]+nop[ ]*
+[ ]*a6:[ ]+90[ ]+nop[ ]*
+[ ]*a7:[ ]+90[ ]+nop[ ]*
+[ ]*a8:[ ]+90[ ]+nop[ ]*
+[ ]*a9:[ ]+90[ ]+nop[ ]*
+[ ]*aa:[ ]+90[ ]+nop[ ]*
+[ ]*ab:[ ]+0f 1f 44 00 00[ ]+nopl[ ]+0x0\(%eax,%eax,1\)
+
+0+b0 <nop4>:
+[ ]*b0:[ ]+90[ ]+nop[ ]*
+[ ]*b1:[ ]+90[ ]+nop[ ]*
+[ ]*b2:[ ]+90[ ]+nop[ ]*
+[ ]*b3:[ ]+90[ ]+nop[ ]*
+[ ]*b4:[ ]+90[ ]+nop[ ]*
+[ ]*b5:[ ]+90[ ]+nop[ ]*
+[ ]*b6:[ ]+90[ ]+nop[ ]*
+[ ]*b7:[ ]+90[ ]+nop[ ]*
+[ ]*b8:[ ]+90[ ]+nop[ ]*
+[ ]*b9:[ ]+90[ ]+nop[ ]*
+[ ]*ba:[ ]+90[ ]+nop[ ]*
+[ ]*bb:[ ]+90[ ]+nop[ ]*
+[ ]*bc:[ ]+0f 1f 40 00[ ]+nopl[ ]+0x0\(%eax\)
+
+0+c0 <nop3>:
+[ ]*c0:[ ]+90[ ]+nop[ ]*
+[ ]*c1:[ ]+90[ ]+nop[ ]*
+[ ]*c2:[ ]+90[ ]+nop[ ]*
+[ ]*c3:[ ]+90[ ]+nop[ ]*
+[ ]*c4:[ ]+90[ ]+nop[ ]*
+[ ]*c5:[ ]+90[ ]+nop[ ]*
+[ ]*c6:[ ]+90[ ]+nop[ ]*
+[ ]*c7:[ ]+90[ ]+nop[ ]*
+[ ]*c8:[ ]+90[ ]+nop[ ]*
+[ ]*c9:[ ]+90[ ]+nop[ ]*
+[ ]*ca:[ ]+90[ ]+nop[ ]*
+[ ]*cb:[ ]+90[ ]+nop[ ]*
+[ ]*cc:[ ]+90[ ]+nop[ ]*
+[ ]*cd:[ ]+0f 1f 00[ ]+nopl[ ]+\(%eax\)
+
+0+d0 <nop2>:
+[ ]*d0:[ ]+90[ ]+nop[ ]*
+[ ]*d1:[ ]+90[ ]+nop[ ]*
+[ ]*d2:[ ]+90[ ]+nop[ ]*
+[ ]*d3:[ ]+90[ ]+nop[ ]*
+[ ]*d4:[ ]+90[ ]+nop[ ]*
+[ ]*d5:[ ]+90[ ]+nop[ ]*
+[ ]*d6:[ ]+90[ ]+nop[ ]*
+[ ]*d7:[ ]+90[ ]+nop[ ]*
+[ ]*d8:[ ]+90[ ]+nop[ ]*
+[ ]*d9:[ ]+90[ ]+nop[ ]*
+[ ]*da:[ ]+90[ ]+nop[ ]*
+[ ]*db:[ ]+90[ ]+nop[ ]*
+[ ]*dc:[ ]+90[ ]+nop[ ]*
+[ ]*dd:[ ]+90[ ]+nop[ ]*
+[ ]*de:[ ]+66 90[ ]+xchg[ ]+%ax,%ax
+#pass
diff --git a/gas/testsuite/gas/i386/nops-1.d b/gas/testsuite/gas/i386/nops-1.d
new file mode 100644
index 000000000000..4e81e9554585
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-1.d
@@ -0,0 +1,176 @@
+#source: nops-1.s
+#objdump: -drw
+#name: i386 nops 1
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop15>:
+[ ]*0:[ ]+90[ ]+nop[ ]*
+[ ]*1:[ ]+eb 0d[ ]+jmp[ ]+10[ ]+<nop14>
+[ ]*3:[ ]+90[ ]+nop[ ]*
+[ ]*4:[ ]+90[ ]+nop[ ]*
+[ ]*5:[ ]+90[ ]+nop[ ]*
+[ ]*6:[ ]+90[ ]+nop[ ]*
+[ ]*7:[ ]+90[ ]+nop[ ]*
+[ ]*8:[ ]+90[ ]+nop[ ]*
+[ ]*9:[ ]+90[ ]+nop[ ]*
+[ ]*a:[ ]+90[ ]+nop[ ]*
+[ ]*b:[ ]+90[ ]+nop[ ]*
+[ ]*c:[ ]+90[ ]+nop[ ]*
+[ ]*d:[ ]+90[ ]+nop[ ]*
+[ ]*e:[ ]+90[ ]+nop[ ]*
+[ ]*f:[ ]+90[ ]+nop[ ]*
+
+0+10 <nop14>:
+[ ]*10:[ ]+90[ ]+nop[ ]*
+[ ]*11:[ ]+90[ ]+nop[ ]*
+[ ]*12:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*19:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+20 <nop13>:
+[ ]*20:[ ]+90[ ]+nop[ ]*
+[ ]*21:[ ]+90[ ]+nop[ ]*
+[ ]*22:[ ]+90[ ]+nop[ ]*
+[ ]*23:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*29:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+30 <nop12>:
+[ ]*30:[ ]+90[ ]+nop[ ]*
+[ ]*31:[ ]+90[ ]+nop[ ]*
+[ ]*32:[ ]+90[ ]+nop[ ]*
+[ ]*33:[ ]+90[ ]+nop[ ]*
+[ ]*34:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*3a:[ ]+8d bf 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+40 <nop11>:
+[ ]*40:[ ]+90[ ]+nop[ ]*
+[ ]*41:[ ]+90[ ]+nop[ ]*
+[ ]*42:[ ]+90[ ]+nop[ ]*
+[ ]*43:[ ]+90[ ]+nop[ ]*
+[ ]*44:[ ]+90[ ]+nop[ ]*
+[ ]*45:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*49:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+50 <nop10>:
+[ ]*50:[ ]+90[ ]+nop[ ]*
+[ ]*51:[ ]+90[ ]+nop[ ]*
+[ ]*52:[ ]+90[ ]+nop[ ]*
+[ ]*53:[ ]+90[ ]+nop[ ]*
+[ ]*54:[ ]+90[ ]+nop[ ]*
+[ ]*55:[ ]+90[ ]+nop[ ]*
+[ ]*56:[ ]+8d 76 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*59:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+60 <nop9>:
+[ ]*60:[ ]+90[ ]+nop[ ]*
+[ ]*61:[ ]+90[ ]+nop[ ]*
+[ ]*62:[ ]+90[ ]+nop[ ]*
+[ ]*63:[ ]+90[ ]+nop[ ]*
+[ ]*64:[ ]+90[ ]+nop[ ]*
+[ ]*65:[ ]+90[ ]+nop[ ]*
+[ ]*66:[ ]+90[ ]+nop[ ]*
+[ ]*67:[ ]+89 f6[ ]+mov[ ]+%esi,%esi
+[ ]*69:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+70 <nop8>:
+[ ]*70:[ ]+90[ ]+nop[ ]*
+[ ]*71:[ ]+90[ ]+nop[ ]*
+[ ]*72:[ ]+90[ ]+nop[ ]*
+[ ]*73:[ ]+90[ ]+nop[ ]*
+[ ]*74:[ ]+90[ ]+nop[ ]*
+[ ]*75:[ ]+90[ ]+nop[ ]*
+[ ]*76:[ ]+90[ ]+nop[ ]*
+[ ]*77:[ ]+90[ ]+nop[ ]*
+[ ]*78:[ ]+90[ ]+nop[ ]*
+[ ]*79:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+80 <nop7>:
+[ ]*80:[ ]+90[ ]+nop[ ]*
+[ ]*81:[ ]+90[ ]+nop[ ]*
+[ ]*82:[ ]+90[ ]+nop[ ]*
+[ ]*83:[ ]+90[ ]+nop[ ]*
+[ ]*84:[ ]+90[ ]+nop[ ]*
+[ ]*85:[ ]+90[ ]+nop[ ]*
+[ ]*86:[ ]+90[ ]+nop[ ]*
+[ ]*87:[ ]+90[ ]+nop[ ]*
+[ ]*88:[ ]+90[ ]+nop[ ]*
+[ ]*89:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+90 <nop6>:
+[ ]*90:[ ]+90[ ]+nop[ ]*
+[ ]*91:[ ]+90[ ]+nop[ ]*
+[ ]*92:[ ]+90[ ]+nop[ ]*
+[ ]*93:[ ]+90[ ]+nop[ ]*
+[ ]*94:[ ]+90[ ]+nop[ ]*
+[ ]*95:[ ]+90[ ]+nop[ ]*
+[ ]*96:[ ]+90[ ]+nop[ ]*
+[ ]*97:[ ]+90[ ]+nop[ ]*
+[ ]*98:[ ]+90[ ]+nop[ ]*
+[ ]*99:[ ]+90[ ]+nop[ ]*
+[ ]*9a:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+a0 <nop5>:
+[ ]*a0:[ ]+90[ ]+nop[ ]*
+[ ]*a1:[ ]+90[ ]+nop[ ]*
+[ ]*a2:[ ]+90[ ]+nop[ ]*
+[ ]*a3:[ ]+90[ ]+nop[ ]*
+[ ]*a4:[ ]+90[ ]+nop[ ]*
+[ ]*a5:[ ]+90[ ]+nop[ ]*
+[ ]*a6:[ ]+90[ ]+nop[ ]*
+[ ]*a7:[ ]+90[ ]+nop[ ]*
+[ ]*a8:[ ]+90[ ]+nop[ ]*
+[ ]*a9:[ ]+90[ ]+nop[ ]*
+[ ]*aa:[ ]+90[ ]+nop[ ]*
+[ ]*ab:[ ]+90[ ]+nop[ ]*
+[ ]*ac:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+b0 <nop4>:
+[ ]*b0:[ ]+90[ ]+nop[ ]*
+[ ]*b1:[ ]+90[ ]+nop[ ]*
+[ ]*b2:[ ]+90[ ]+nop[ ]*
+[ ]*b3:[ ]+90[ ]+nop[ ]*
+[ ]*b4:[ ]+90[ ]+nop[ ]*
+[ ]*b5:[ ]+90[ ]+nop[ ]*
+[ ]*b6:[ ]+90[ ]+nop[ ]*
+[ ]*b7:[ ]+90[ ]+nop[ ]*
+[ ]*b8:[ ]+90[ ]+nop[ ]*
+[ ]*b9:[ ]+90[ ]+nop[ ]*
+[ ]*ba:[ ]+90[ ]+nop[ ]*
+[ ]*bb:[ ]+90[ ]+nop[ ]*
+[ ]*bc:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+c0 <nop3>:
+[ ]*c0:[ ]+90[ ]+nop[ ]*
+[ ]*c1:[ ]+90[ ]+nop[ ]*
+[ ]*c2:[ ]+90[ ]+nop[ ]*
+[ ]*c3:[ ]+90[ ]+nop[ ]*
+[ ]*c4:[ ]+90[ ]+nop[ ]*
+[ ]*c5:[ ]+90[ ]+nop[ ]*
+[ ]*c6:[ ]+90[ ]+nop[ ]*
+[ ]*c7:[ ]+90[ ]+nop[ ]*
+[ ]*c8:[ ]+90[ ]+nop[ ]*
+[ ]*c9:[ ]+90[ ]+nop[ ]*
+[ ]*ca:[ ]+90[ ]+nop[ ]*
+[ ]*cb:[ ]+90[ ]+nop[ ]*
+[ ]*cc:[ ]+90[ ]+nop[ ]*
+[ ]*cd:[ ]+8d 76 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+d0 <nop2>:
+[ ]*d0:[ ]+90[ ]+nop[ ]*
+[ ]*d1:[ ]+90[ ]+nop[ ]*
+[ ]*d2:[ ]+90[ ]+nop[ ]*
+[ ]*d3:[ ]+90[ ]+nop[ ]*
+[ ]*d4:[ ]+90[ ]+nop[ ]*
+[ ]*d5:[ ]+90[ ]+nop[ ]*
+[ ]*d6:[ ]+90[ ]+nop[ ]*
+[ ]*d7:[ ]+90[ ]+nop[ ]*
+[ ]*d8:[ ]+90[ ]+nop[ ]*
+[ ]*d9:[ ]+90[ ]+nop[ ]*
+[ ]*da:[ ]+90[ ]+nop[ ]*
+[ ]*db:[ ]+90[ ]+nop[ ]*
+[ ]*dc:[ ]+90[ ]+nop[ ]*
+[ ]*dd:[ ]+90[ ]+nop[ ]*
+[ ]*de:[ ]+66 90[ ]+xchg[ ]+%ax,%ax
+#pass
diff --git a/gas/testsuite/gas/i386/nops-1.s b/gas/testsuite/gas/i386/nops-1.s
new file mode 100644
index 000000000000..a4fd7694de76
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-1.s
@@ -0,0 +1,147 @@
+ .text
+nop15:
+ nop
+ .p2align 4
+
+nop14:
+ nop
+ nop
+ .p2align 4
+
+nop13:
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop12:
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop11:
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop10:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop9:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop8:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop7:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop6:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop5:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop4:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop3:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop2:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
diff --git a/gas/testsuite/gas/i386/nops-2-i386.d b/gas/testsuite/gas/i386/nops-2-i386.d
new file mode 100644
index 000000000000..c7dffabe70be
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-2-i386.d
@@ -0,0 +1,182 @@
+#as: -march=i386
+#source: nops-2.s
+#objdump: -drw
+#name: i386 -march=i386 nops 2
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop>:
+[ ]*0:[ ]+0f 44 c0[ ]+cmove[ ]+%eax,%eax
+[ ]*3:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*9:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+10 <nop15>:
+[ ]*10:[ ]+90[ ]+nop[ ]*
+[ ]*11:[ ]+eb 0d[ ]+jmp[ ]+20[ ]+<nop14>
+[ ]*13:[ ]+90[ ]+nop[ ]*
+[ ]*14:[ ]+90[ ]+nop[ ]*
+[ ]*15:[ ]+90[ ]+nop[ ]*
+[ ]*16:[ ]+90[ ]+nop[ ]*
+[ ]*17:[ ]+90[ ]+nop[ ]*
+[ ]*18:[ ]+90[ ]+nop[ ]*
+[ ]*19:[ ]+90[ ]+nop[ ]*
+[ ]*1a:[ ]+90[ ]+nop[ ]*
+[ ]*1b:[ ]+90[ ]+nop[ ]*
+[ ]*1c:[ ]+90[ ]+nop[ ]*
+[ ]*1d:[ ]+90[ ]+nop[ ]*
+[ ]*1e:[ ]+90[ ]+nop[ ]*
+[ ]*1f:[ ]+90[ ]+nop[ ]*
+
+0+20 <nop14>:
+[ ]*20:[ ]+90[ ]+nop[ ]*
+[ ]*21:[ ]+90[ ]+nop[ ]*
+[ ]*22:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*29:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+30 <nop13>:
+[ ]*30:[ ]+90[ ]+nop[ ]*
+[ ]*31:[ ]+90[ ]+nop[ ]*
+[ ]*32:[ ]+90[ ]+nop[ ]*
+[ ]*33:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*39:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+40 <nop12>:
+[ ]*40:[ ]+90[ ]+nop[ ]*
+[ ]*41:[ ]+90[ ]+nop[ ]*
+[ ]*42:[ ]+90[ ]+nop[ ]*
+[ ]*43:[ ]+90[ ]+nop[ ]*
+[ ]*44:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*4a:[ ]+8d bf 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+50 <nop11>:
+[ ]*50:[ ]+90[ ]+nop[ ]*
+[ ]*51:[ ]+90[ ]+nop[ ]*
+[ ]*52:[ ]+90[ ]+nop[ ]*
+[ ]*53:[ ]+90[ ]+nop[ ]*
+[ ]*54:[ ]+90[ ]+nop[ ]*
+[ ]*55:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*59:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+60 <nop10>:
+[ ]*60:[ ]+90[ ]+nop[ ]*
+[ ]*61:[ ]+90[ ]+nop[ ]*
+[ ]*62:[ ]+90[ ]+nop[ ]*
+[ ]*63:[ ]+90[ ]+nop[ ]*
+[ ]*64:[ ]+90[ ]+nop[ ]*
+[ ]*65:[ ]+90[ ]+nop[ ]*
+[ ]*66:[ ]+8d 76 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*69:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+70 <nop9>:
+[ ]*70:[ ]+90[ ]+nop[ ]*
+[ ]*71:[ ]+90[ ]+nop[ ]*
+[ ]*72:[ ]+90[ ]+nop[ ]*
+[ ]*73:[ ]+90[ ]+nop[ ]*
+[ ]*74:[ ]+90[ ]+nop[ ]*
+[ ]*75:[ ]+90[ ]+nop[ ]*
+[ ]*76:[ ]+90[ ]+nop[ ]*
+[ ]*77:[ ]+89 f6[ ]+mov[ ]+%esi,%esi
+[ ]*79:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+80 <nop8>:
+[ ]*80:[ ]+90[ ]+nop[ ]*
+[ ]*81:[ ]+90[ ]+nop[ ]*
+[ ]*82:[ ]+90[ ]+nop[ ]*
+[ ]*83:[ ]+90[ ]+nop[ ]*
+[ ]*84:[ ]+90[ ]+nop[ ]*
+[ ]*85:[ ]+90[ ]+nop[ ]*
+[ ]*86:[ ]+90[ ]+nop[ ]*
+[ ]*87:[ ]+90[ ]+nop[ ]*
+[ ]*88:[ ]+90[ ]+nop[ ]*
+[ ]*89:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+90 <nop7>:
+[ ]*90:[ ]+90[ ]+nop[ ]*
+[ ]*91:[ ]+90[ ]+nop[ ]*
+[ ]*92:[ ]+90[ ]+nop[ ]*
+[ ]*93:[ ]+90[ ]+nop[ ]*
+[ ]*94:[ ]+90[ ]+nop[ ]*
+[ ]*95:[ ]+90[ ]+nop[ ]*
+[ ]*96:[ ]+90[ ]+nop[ ]*
+[ ]*97:[ ]+90[ ]+nop[ ]*
+[ ]*98:[ ]+90[ ]+nop[ ]*
+[ ]*99:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+a0 <nop6>:
+[ ]*a0:[ ]+90[ ]+nop[ ]*
+[ ]*a1:[ ]+90[ ]+nop[ ]*
+[ ]*a2:[ ]+90[ ]+nop[ ]*
+[ ]*a3:[ ]+90[ ]+nop[ ]*
+[ ]*a4:[ ]+90[ ]+nop[ ]*
+[ ]*a5:[ ]+90[ ]+nop[ ]*
+[ ]*a6:[ ]+90[ ]+nop[ ]*
+[ ]*a7:[ ]+90[ ]+nop[ ]*
+[ ]*a8:[ ]+90[ ]+nop[ ]*
+[ ]*a9:[ ]+90[ ]+nop[ ]*
+[ ]*aa:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+b0 <nop5>:
+[ ]*b0:[ ]+90[ ]+nop[ ]*
+[ ]*b1:[ ]+90[ ]+nop[ ]*
+[ ]*b2:[ ]+90[ ]+nop[ ]*
+[ ]*b3:[ ]+90[ ]+nop[ ]*
+[ ]*b4:[ ]+90[ ]+nop[ ]*
+[ ]*b5:[ ]+90[ ]+nop[ ]*
+[ ]*b6:[ ]+90[ ]+nop[ ]*
+[ ]*b7:[ ]+90[ ]+nop[ ]*
+[ ]*b8:[ ]+90[ ]+nop[ ]*
+[ ]*b9:[ ]+90[ ]+nop[ ]*
+[ ]*ba:[ ]+90[ ]+nop[ ]*
+[ ]*bb:[ ]+90[ ]+nop[ ]*
+[ ]*bc:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+c0 <nop4>:
+[ ]*c0:[ ]+90[ ]+nop[ ]*
+[ ]*c1:[ ]+90[ ]+nop[ ]*
+[ ]*c2:[ ]+90[ ]+nop[ ]*
+[ ]*c3:[ ]+90[ ]+nop[ ]*
+[ ]*c4:[ ]+90[ ]+nop[ ]*
+[ ]*c5:[ ]+90[ ]+nop[ ]*
+[ ]*c6:[ ]+90[ ]+nop[ ]*
+[ ]*c7:[ ]+90[ ]+nop[ ]*
+[ ]*c8:[ ]+90[ ]+nop[ ]*
+[ ]*c9:[ ]+90[ ]+nop[ ]*
+[ ]*ca:[ ]+90[ ]+nop[ ]*
+[ ]*cb:[ ]+90[ ]+nop[ ]*
+[ ]*cc:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+d0 <nop3>:
+[ ]*d0:[ ]+90[ ]+nop[ ]*
+[ ]*d1:[ ]+90[ ]+nop[ ]*
+[ ]*d2:[ ]+90[ ]+nop[ ]*
+[ ]*d3:[ ]+90[ ]+nop[ ]*
+[ ]*d4:[ ]+90[ ]+nop[ ]*
+[ ]*d5:[ ]+90[ ]+nop[ ]*
+[ ]*d6:[ ]+90[ ]+nop[ ]*
+[ ]*d7:[ ]+90[ ]+nop[ ]*
+[ ]*d8:[ ]+90[ ]+nop[ ]*
+[ ]*d9:[ ]+90[ ]+nop[ ]*
+[ ]*da:[ ]+90[ ]+nop[ ]*
+[ ]*db:[ ]+90[ ]+nop[ ]*
+[ ]*dc:[ ]+90[ ]+nop[ ]*
+[ ]*dd:[ ]+8d 76 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+e0 <nop2>:
+[ ]*e0:[ ]+90[ ]+nop[ ]*
+[ ]*e1:[ ]+90[ ]+nop[ ]*
+[ ]*e2:[ ]+90[ ]+nop[ ]*
+[ ]*e3:[ ]+90[ ]+nop[ ]*
+[ ]*e4:[ ]+90[ ]+nop[ ]*
+[ ]*e5:[ ]+90[ ]+nop[ ]*
+[ ]*e6:[ ]+90[ ]+nop[ ]*
+[ ]*e7:[ ]+90[ ]+nop[ ]*
+[ ]*e8:[ ]+90[ ]+nop[ ]*
+[ ]*e9:[ ]+90[ ]+nop[ ]*
+[ ]*ea:[ ]+90[ ]+nop[ ]*
+[ ]*eb:[ ]+90[ ]+nop[ ]*
+[ ]*ec:[ ]+90[ ]+nop[ ]*
+[ ]*ed:[ ]+90[ ]+nop[ ]*
+[ ]*ee:[ ]+66 90[ ]+xchg[ ]+%ax,%ax
+#pass
diff --git a/gas/testsuite/gas/i386/nops-2-merom.d b/gas/testsuite/gas/i386/nops-2-merom.d
new file mode 100644
index 000000000000..c6ea559761e0
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-2-merom.d
@@ -0,0 +1,182 @@
+#as: -march=i386 -mtune=merom
+#source: nops-2.s
+#objdump: -drw
+#name: i386 -march=i386 -mtune=merom nops 2
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop>:
+[ ]*0:[ ]+0f 44 c0[ ]+cmove[ ]+%eax,%eax
+[ ]*3:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*9:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+10 <nop15>:
+[ ]*10:[ ]+90[ ]+nop[ ]*
+[ ]*11:[ ]+eb 0d[ ]+jmp[ ]+20[ ]+<nop14>
+[ ]*13:[ ]+90[ ]+nop[ ]*
+[ ]*14:[ ]+90[ ]+nop[ ]*
+[ ]*15:[ ]+90[ ]+nop[ ]*
+[ ]*16:[ ]+90[ ]+nop[ ]*
+[ ]*17:[ ]+90[ ]+nop[ ]*
+[ ]*18:[ ]+90[ ]+nop[ ]*
+[ ]*19:[ ]+90[ ]+nop[ ]*
+[ ]*1a:[ ]+90[ ]+nop[ ]*
+[ ]*1b:[ ]+90[ ]+nop[ ]*
+[ ]*1c:[ ]+90[ ]+nop[ ]*
+[ ]*1d:[ ]+90[ ]+nop[ ]*
+[ ]*1e:[ ]+90[ ]+nop[ ]*
+[ ]*1f:[ ]+90[ ]+nop[ ]*
+
+0+20 <nop14>:
+[ ]*20:[ ]+90[ ]+nop[ ]*
+[ ]*21:[ ]+90[ ]+nop[ ]*
+[ ]*22:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*29:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+30 <nop13>:
+[ ]*30:[ ]+90[ ]+nop[ ]*
+[ ]*31:[ ]+90[ ]+nop[ ]*
+[ ]*32:[ ]+90[ ]+nop[ ]*
+[ ]*33:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*39:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+40 <nop12>:
+[ ]*40:[ ]+90[ ]+nop[ ]*
+[ ]*41:[ ]+90[ ]+nop[ ]*
+[ ]*42:[ ]+90[ ]+nop[ ]*
+[ ]*43:[ ]+90[ ]+nop[ ]*
+[ ]*44:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*4a:[ ]+8d bf 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+50 <nop11>:
+[ ]*50:[ ]+90[ ]+nop[ ]*
+[ ]*51:[ ]+90[ ]+nop[ ]*
+[ ]*52:[ ]+90[ ]+nop[ ]*
+[ ]*53:[ ]+90[ ]+nop[ ]*
+[ ]*54:[ ]+90[ ]+nop[ ]*
+[ ]*55:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*59:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+60 <nop10>:
+[ ]*60:[ ]+90[ ]+nop[ ]*
+[ ]*61:[ ]+90[ ]+nop[ ]*
+[ ]*62:[ ]+90[ ]+nop[ ]*
+[ ]*63:[ ]+90[ ]+nop[ ]*
+[ ]*64:[ ]+90[ ]+nop[ ]*
+[ ]*65:[ ]+90[ ]+nop[ ]*
+[ ]*66:[ ]+8d 76 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*69:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+70 <nop9>:
+[ ]*70:[ ]+90[ ]+nop[ ]*
+[ ]*71:[ ]+90[ ]+nop[ ]*
+[ ]*72:[ ]+90[ ]+nop[ ]*
+[ ]*73:[ ]+90[ ]+nop[ ]*
+[ ]*74:[ ]+90[ ]+nop[ ]*
+[ ]*75:[ ]+90[ ]+nop[ ]*
+[ ]*76:[ ]+90[ ]+nop[ ]*
+[ ]*77:[ ]+89 f6[ ]+mov[ ]+%esi,%esi
+[ ]*79:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+80 <nop8>:
+[ ]*80:[ ]+90[ ]+nop[ ]*
+[ ]*81:[ ]+90[ ]+nop[ ]*
+[ ]*82:[ ]+90[ ]+nop[ ]*
+[ ]*83:[ ]+90[ ]+nop[ ]*
+[ ]*84:[ ]+90[ ]+nop[ ]*
+[ ]*85:[ ]+90[ ]+nop[ ]*
+[ ]*86:[ ]+90[ ]+nop[ ]*
+[ ]*87:[ ]+90[ ]+nop[ ]*
+[ ]*88:[ ]+90[ ]+nop[ ]*
+[ ]*89:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+90 <nop7>:
+[ ]*90:[ ]+90[ ]+nop[ ]*
+[ ]*91:[ ]+90[ ]+nop[ ]*
+[ ]*92:[ ]+90[ ]+nop[ ]*
+[ ]*93:[ ]+90[ ]+nop[ ]*
+[ ]*94:[ ]+90[ ]+nop[ ]*
+[ ]*95:[ ]+90[ ]+nop[ ]*
+[ ]*96:[ ]+90[ ]+nop[ ]*
+[ ]*97:[ ]+90[ ]+nop[ ]*
+[ ]*98:[ ]+90[ ]+nop[ ]*
+[ ]*99:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+a0 <nop6>:
+[ ]*a0:[ ]+90[ ]+nop[ ]*
+[ ]*a1:[ ]+90[ ]+nop[ ]*
+[ ]*a2:[ ]+90[ ]+nop[ ]*
+[ ]*a3:[ ]+90[ ]+nop[ ]*
+[ ]*a4:[ ]+90[ ]+nop[ ]*
+[ ]*a5:[ ]+90[ ]+nop[ ]*
+[ ]*a6:[ ]+90[ ]+nop[ ]*
+[ ]*a7:[ ]+90[ ]+nop[ ]*
+[ ]*a8:[ ]+90[ ]+nop[ ]*
+[ ]*a9:[ ]+90[ ]+nop[ ]*
+[ ]*aa:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+b0 <nop5>:
+[ ]*b0:[ ]+90[ ]+nop[ ]*
+[ ]*b1:[ ]+90[ ]+nop[ ]*
+[ ]*b2:[ ]+90[ ]+nop[ ]*
+[ ]*b3:[ ]+90[ ]+nop[ ]*
+[ ]*b4:[ ]+90[ ]+nop[ ]*
+[ ]*b5:[ ]+90[ ]+nop[ ]*
+[ ]*b6:[ ]+90[ ]+nop[ ]*
+[ ]*b7:[ ]+90[ ]+nop[ ]*
+[ ]*b8:[ ]+90[ ]+nop[ ]*
+[ ]*b9:[ ]+90[ ]+nop[ ]*
+[ ]*ba:[ ]+90[ ]+nop[ ]*
+[ ]*bb:[ ]+90[ ]+nop[ ]*
+[ ]*bc:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+c0 <nop4>:
+[ ]*c0:[ ]+90[ ]+nop[ ]*
+[ ]*c1:[ ]+90[ ]+nop[ ]*
+[ ]*c2:[ ]+90[ ]+nop[ ]*
+[ ]*c3:[ ]+90[ ]+nop[ ]*
+[ ]*c4:[ ]+90[ ]+nop[ ]*
+[ ]*c5:[ ]+90[ ]+nop[ ]*
+[ ]*c6:[ ]+90[ ]+nop[ ]*
+[ ]*c7:[ ]+90[ ]+nop[ ]*
+[ ]*c8:[ ]+90[ ]+nop[ ]*
+[ ]*c9:[ ]+90[ ]+nop[ ]*
+[ ]*ca:[ ]+90[ ]+nop[ ]*
+[ ]*cb:[ ]+90[ ]+nop[ ]*
+[ ]*cc:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+d0 <nop3>:
+[ ]*d0:[ ]+90[ ]+nop[ ]*
+[ ]*d1:[ ]+90[ ]+nop[ ]*
+[ ]*d2:[ ]+90[ ]+nop[ ]*
+[ ]*d3:[ ]+90[ ]+nop[ ]*
+[ ]*d4:[ ]+90[ ]+nop[ ]*
+[ ]*d5:[ ]+90[ ]+nop[ ]*
+[ ]*d6:[ ]+90[ ]+nop[ ]*
+[ ]*d7:[ ]+90[ ]+nop[ ]*
+[ ]*d8:[ ]+90[ ]+nop[ ]*
+[ ]*d9:[ ]+90[ ]+nop[ ]*
+[ ]*da:[ ]+90[ ]+nop[ ]*
+[ ]*db:[ ]+90[ ]+nop[ ]*
+[ ]*dc:[ ]+90[ ]+nop[ ]*
+[ ]*dd:[ ]+8d 76 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+e0 <nop2>:
+[ ]*e0:[ ]+90[ ]+nop[ ]*
+[ ]*e1:[ ]+90[ ]+nop[ ]*
+[ ]*e2:[ ]+90[ ]+nop[ ]*
+[ ]*e3:[ ]+90[ ]+nop[ ]*
+[ ]*e4:[ ]+90[ ]+nop[ ]*
+[ ]*e5:[ ]+90[ ]+nop[ ]*
+[ ]*e6:[ ]+90[ ]+nop[ ]*
+[ ]*e7:[ ]+90[ ]+nop[ ]*
+[ ]*e8:[ ]+90[ ]+nop[ ]*
+[ ]*e9:[ ]+90[ ]+nop[ ]*
+[ ]*ea:[ ]+90[ ]+nop[ ]*
+[ ]*eb:[ ]+90[ ]+nop[ ]*
+[ ]*ec:[ ]+90[ ]+nop[ ]*
+[ ]*ed:[ ]+90[ ]+nop[ ]*
+[ ]*ee:[ ]+66 90[ ]+xchg[ ]+%ax,%ax
+#pass
diff --git a/gas/testsuite/gas/i386/nops-2.d b/gas/testsuite/gas/i386/nops-2.d
new file mode 100644
index 000000000000..6382f7e3772a
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-2.d
@@ -0,0 +1,181 @@
+#source: nops-2.s
+#objdump: -drw
+#name: i386 nops 2
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop>:
+[ ]*0:[ ]+0f 44 c0[ ]+cmove[ ]+%eax,%eax
+[ ]*3:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*9:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+10 <nop15>:
+[ ]*10:[ ]+90[ ]+nop[ ]*
+[ ]*11:[ ]+eb 0d[ ]+jmp[ ]+20[ ]+<nop14>
+[ ]*13:[ ]+90[ ]+nop[ ]*
+[ ]*14:[ ]+90[ ]+nop[ ]*
+[ ]*15:[ ]+90[ ]+nop[ ]*
+[ ]*16:[ ]+90[ ]+nop[ ]*
+[ ]*17:[ ]+90[ ]+nop[ ]*
+[ ]*18:[ ]+90[ ]+nop[ ]*
+[ ]*19:[ ]+90[ ]+nop[ ]*
+[ ]*1a:[ ]+90[ ]+nop[ ]*
+[ ]*1b:[ ]+90[ ]+nop[ ]*
+[ ]*1c:[ ]+90[ ]+nop[ ]*
+[ ]*1d:[ ]+90[ ]+nop[ ]*
+[ ]*1e:[ ]+90[ ]+nop[ ]*
+[ ]*1f:[ ]+90[ ]+nop[ ]*
+
+0+20 <nop14>:
+[ ]*20:[ ]+90[ ]+nop[ ]*
+[ ]*21:[ ]+90[ ]+nop[ ]*
+[ ]*22:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*29:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+30 <nop13>:
+[ ]*30:[ ]+90[ ]+nop[ ]*
+[ ]*31:[ ]+90[ ]+nop[ ]*
+[ ]*32:[ ]+90[ ]+nop[ ]*
+[ ]*33:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*39:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+40 <nop12>:
+[ ]*40:[ ]+90[ ]+nop[ ]*
+[ ]*41:[ ]+90[ ]+nop[ ]*
+[ ]*42:[ ]+90[ ]+nop[ ]*
+[ ]*43:[ ]+90[ ]+nop[ ]*
+[ ]*44:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*4a:[ ]+8d bf 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+50 <nop11>:
+[ ]*50:[ ]+90[ ]+nop[ ]*
+[ ]*51:[ ]+90[ ]+nop[ ]*
+[ ]*52:[ ]+90[ ]+nop[ ]*
+[ ]*53:[ ]+90[ ]+nop[ ]*
+[ ]*54:[ ]+90[ ]+nop[ ]*
+[ ]*55:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*59:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+60 <nop10>:
+[ ]*60:[ ]+90[ ]+nop[ ]*
+[ ]*61:[ ]+90[ ]+nop[ ]*
+[ ]*62:[ ]+90[ ]+nop[ ]*
+[ ]*63:[ ]+90[ ]+nop[ ]*
+[ ]*64:[ ]+90[ ]+nop[ ]*
+[ ]*65:[ ]+90[ ]+nop[ ]*
+[ ]*66:[ ]+8d 76 00[ ]+lea[ ]+0x0\(%esi\),%esi
+[ ]*69:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+70 <nop9>:
+[ ]*70:[ ]+90[ ]+nop[ ]*
+[ ]*71:[ ]+90[ ]+nop[ ]*
+[ ]*72:[ ]+90[ ]+nop[ ]*
+[ ]*73:[ ]+90[ ]+nop[ ]*
+[ ]*74:[ ]+90[ ]+nop[ ]*
+[ ]*75:[ ]+90[ ]+nop[ ]*
+[ ]*76:[ ]+90[ ]+nop[ ]*
+[ ]*77:[ ]+89 f6[ ]+mov[ ]+%esi,%esi
+[ ]*79:[ ]+8d bc 27 00 00 00 00[ ]+lea[ ]+0x0\(%edi\),%edi
+
+0+80 <nop8>:
+[ ]*80:[ ]+90[ ]+nop[ ]*
+[ ]*81:[ ]+90[ ]+nop[ ]*
+[ ]*82:[ ]+90[ ]+nop[ ]*
+[ ]*83:[ ]+90[ ]+nop[ ]*
+[ ]*84:[ ]+90[ ]+nop[ ]*
+[ ]*85:[ ]+90[ ]+nop[ ]*
+[ ]*86:[ ]+90[ ]+nop[ ]*
+[ ]*87:[ ]+90[ ]+nop[ ]*
+[ ]*88:[ ]+90[ ]+nop[ ]*
+[ ]*89:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+90 <nop7>:
+[ ]*90:[ ]+90[ ]+nop[ ]*
+[ ]*91:[ ]+90[ ]+nop[ ]*
+[ ]*92:[ ]+90[ ]+nop[ ]*
+[ ]*93:[ ]+90[ ]+nop[ ]*
+[ ]*94:[ ]+90[ ]+nop[ ]*
+[ ]*95:[ ]+90[ ]+nop[ ]*
+[ ]*96:[ ]+90[ ]+nop[ ]*
+[ ]*97:[ ]+90[ ]+nop[ ]*
+[ ]*98:[ ]+90[ ]+nop[ ]*
+[ ]*99:[ ]+8d b4 26 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+a0 <nop6>:
+[ ]*a0:[ ]+90[ ]+nop[ ]*
+[ ]*a1:[ ]+90[ ]+nop[ ]*
+[ ]*a2:[ ]+90[ ]+nop[ ]*
+[ ]*a3:[ ]+90[ ]+nop[ ]*
+[ ]*a4:[ ]+90[ ]+nop[ ]*
+[ ]*a5:[ ]+90[ ]+nop[ ]*
+[ ]*a6:[ ]+90[ ]+nop[ ]*
+[ ]*a7:[ ]+90[ ]+nop[ ]*
+[ ]*a8:[ ]+90[ ]+nop[ ]*
+[ ]*a9:[ ]+90[ ]+nop[ ]*
+[ ]*aa:[ ]+8d b6 00 00 00 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+b0 <nop5>:
+[ ]*b0:[ ]+90[ ]+nop[ ]*
+[ ]*b1:[ ]+90[ ]+nop[ ]*
+[ ]*b2:[ ]+90[ ]+nop[ ]*
+[ ]*b3:[ ]+90[ ]+nop[ ]*
+[ ]*b4:[ ]+90[ ]+nop[ ]*
+[ ]*b5:[ ]+90[ ]+nop[ ]*
+[ ]*b6:[ ]+90[ ]+nop[ ]*
+[ ]*b7:[ ]+90[ ]+nop[ ]*
+[ ]*b8:[ ]+90[ ]+nop[ ]*
+[ ]*b9:[ ]+90[ ]+nop[ ]*
+[ ]*ba:[ ]+90[ ]+nop[ ]*
+[ ]*bb:[ ]+90[ ]+nop[ ]*
+[ ]*bc:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+c0 <nop4>:
+[ ]*c0:[ ]+90[ ]+nop[ ]*
+[ ]*c1:[ ]+90[ ]+nop[ ]*
+[ ]*c2:[ ]+90[ ]+nop[ ]*
+[ ]*c3:[ ]+90[ ]+nop[ ]*
+[ ]*c4:[ ]+90[ ]+nop[ ]*
+[ ]*c5:[ ]+90[ ]+nop[ ]*
+[ ]*c6:[ ]+90[ ]+nop[ ]*
+[ ]*c7:[ ]+90[ ]+nop[ ]*
+[ ]*c8:[ ]+90[ ]+nop[ ]*
+[ ]*c9:[ ]+90[ ]+nop[ ]*
+[ ]*ca:[ ]+90[ ]+nop[ ]*
+[ ]*cb:[ ]+90[ ]+nop[ ]*
+[ ]*cc:[ ]+8d 74 26 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+d0 <nop3>:
+[ ]*d0:[ ]+90[ ]+nop[ ]*
+[ ]*d1:[ ]+90[ ]+nop[ ]*
+[ ]*d2:[ ]+90[ ]+nop[ ]*
+[ ]*d3:[ ]+90[ ]+nop[ ]*
+[ ]*d4:[ ]+90[ ]+nop[ ]*
+[ ]*d5:[ ]+90[ ]+nop[ ]*
+[ ]*d6:[ ]+90[ ]+nop[ ]*
+[ ]*d7:[ ]+90[ ]+nop[ ]*
+[ ]*d8:[ ]+90[ ]+nop[ ]*
+[ ]*d9:[ ]+90[ ]+nop[ ]*
+[ ]*da:[ ]+90[ ]+nop[ ]*
+[ ]*db:[ ]+90[ ]+nop[ ]*
+[ ]*dc:[ ]+90[ ]+nop[ ]*
+[ ]*dd:[ ]+8d 76 00[ ]+lea[ ]+0x0\(%esi\),%esi
+
+0+e0 <nop2>:
+[ ]*e0:[ ]+90[ ]+nop[ ]*
+[ ]*e1:[ ]+90[ ]+nop[ ]*
+[ ]*e2:[ ]+90[ ]+nop[ ]*
+[ ]*e3:[ ]+90[ ]+nop[ ]*
+[ ]*e4:[ ]+90[ ]+nop[ ]*
+[ ]*e5:[ ]+90[ ]+nop[ ]*
+[ ]*e6:[ ]+90[ ]+nop[ ]*
+[ ]*e7:[ ]+90[ ]+nop[ ]*
+[ ]*e8:[ ]+90[ ]+nop[ ]*
+[ ]*e9:[ ]+90[ ]+nop[ ]*
+[ ]*ea:[ ]+90[ ]+nop[ ]*
+[ ]*eb:[ ]+90[ ]+nop[ ]*
+[ ]*ec:[ ]+90[ ]+nop[ ]*
+[ ]*ed:[ ]+90[ ]+nop[ ]*
+[ ]*ee:[ ]+66 90[ ]+xchg[ ]+%ax,%ax
+#pass
diff --git a/gas/testsuite/gas/i386/nops-2.s b/gas/testsuite/gas/i386/nops-2.s
new file mode 100644
index 000000000000..afbb87e09488
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-2.s
@@ -0,0 +1,151 @@
+ .text
+nop:
+ cmove %eax,%eax
+ .p2align 4
+
+nop15:
+ nop
+ .p2align 4
+
+nop14:
+ nop
+ nop
+ .p2align 4
+
+nop13:
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop12:
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop11:
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop10:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop9:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop8:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop7:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop6:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop5:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop4:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop3:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop2:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
diff --git a/gas/testsuite/gas/i386/nops-3.d b/gas/testsuite/gas/i386/nops-3.d
new file mode 100644
index 000000000000..10cc95c3fc98
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-3.d
@@ -0,0 +1,43 @@
+#source: nops-3.s
+#objdump: -drw
+#name: i386 nops 3
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop>:
+[ ]*0:[ ]+90[ ]+nop[ ]*
+[ ]*1:[ ]+90[ ]+nop[ ]*
+[ ]*2:[ ]+90[ ]+nop[ ]*
+[ ]*3:[ ]+90[ ]+nop[ ]*
+[ ]*4:[ ]+90[ ]+nop[ ]*
+[ ]*5:[ ]+90[ ]+nop[ ]*
+[ ]*6:[ ]+90[ ]+nop[ ]*
+[ ]*7:[ ]+90[ ]+nop[ ]*
+[ ]*8:[ ]+90[ ]+nop[ ]*
+[ ]*9:[ ]+90[ ]+nop[ ]*
+[ ]*a:[ ]+90[ ]+nop[ ]*
+[ ]*b:[ ]+90[ ]+nop[ ]*
+[ ]*c:[ ]+90[ ]+nop[ ]*
+[ ]*d:[ ]+90[ ]+nop[ ]*
+[ ]*e:[ ]+90[ ]+nop[ ]*
+[ ]*f:[ ]+90[ ]+nop[ ]*
+[ ]*10:[ ]+90[ ]+nop[ ]*
+[ ]*11:[ ]+90[ ]+nop[ ]*
+[ ]*12:[ ]+90[ ]+nop[ ]*
+[ ]*13:[ ]+90[ ]+nop[ ]*
+[ ]*14:[ ]+90[ ]+nop[ ]*
+[ ]*15:[ ]+90[ ]+nop[ ]*
+[ ]*16:[ ]+90[ ]+nop[ ]*
+[ ]*17:[ ]+90[ ]+nop[ ]*
+[ ]*18:[ ]+90[ ]+nop[ ]*
+[ ]*19:[ ]+90[ ]+nop[ ]*
+[ ]*1a:[ ]+90[ ]+nop[ ]*
+[ ]*1b:[ ]+90[ ]+nop[ ]*
+[ ]*1c:[ ]+90[ ]+nop[ ]*
+[ ]*1d:[ ]+90[ ]+nop[ ]*
+[ ]*1e:[ ]+90[ ]+nop[ ]*
+[ ]*1f:[ ]+90[ ]+nop[ ]*
+[ ]*20:[ ]+89 c3[ ]+mov[ ]+%eax,%ebx[ ]*
+#pass
diff --git a/gas/testsuite/gas/i386/nops-3.s b/gas/testsuite/gas/i386/nops-3.s
new file mode 100644
index 000000000000..c42b354788b9
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-3.s
@@ -0,0 +1,6 @@
+ .text
+nop:
+ nop
+ .p2align 5
+ mov %eax,%ebx
+ .p2align 4
diff --git a/gas/testsuite/gas/i386/nops.d b/gas/testsuite/gas/i386/nops.d
new file mode 100644
index 000000000000..dc01585a69d9
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops.d
@@ -0,0 +1,24 @@
+#objdump: -drw
+#name: i386 nops
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <.text>:
+[ ]*0:[ ]+0f 1f 00[ ]+nopl[ ]+\(%eax\)
+[ ]*3:[ ]+0f 1f 40 00[ ]+nopl[ ]+0x0\(%eax\)
+[ ]*7:[ ]+0f 1f 44 00 00[ ]+nopl[ ]+0x0\(%eax,%eax,1\)
+[ ]*c:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%eax,%eax,1\)
+[ ]*12:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%eax\)
+[ ]*19:[ ]+0f 1f 84 00 00 00 00 00[ ]+nopl[ ]+0x0\(%eax,%eax,1\)
+[ ]*21:[ ]+66 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+0x0\(%eax,%eax,1\)
+[ ]*2a:[ ]+66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%eax,%eax,1\)
+[ ]*34:[ ]+0f 1f 00[ ]+nopl[ ]+\(%eax\)
+[ ]*37:[ ]+0f 1f c0[ ]+nop[ ]+%eax
+[ ]*3a:[ ]+66 0f 1f c0[ ]+nop[ ]+%ax
+[ ]*3e:[ ]+0f 1f 00[ ]+nopl[ ]+\(%eax\)
+[ ]*41:[ ]+66 0f 1f 00[ ]+nopw[ ]+\(%eax\)
+[ ]*45:[ ]+0f 1f c0[ ]+nop[ ]+%eax
+[ ]*48:[ ]+66 0f 1f c0[ ]+nop[ ]+%ax
+#pass
diff --git a/gas/testsuite/gas/i386/nops.s b/gas/testsuite/gas/i386/nops.s
new file mode 100644
index 000000000000..9dddb42b9ea1
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops.s
@@ -0,0 +1,20 @@
+ .text
+
+ .byte 0x0f, 0x1f, 0x0
+ .byte 0x0f, 0x1f, 0x40, 0x0
+ .byte 0x0f, 0x1f, 0x44, 0x0, 0x0
+ .byte 0x66, 0x0f, 0x1f, 0x44, 0x0, 0x0
+ .byte 0x0f, 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0
+ .byte 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0
+ .byte 0x66, 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0
+ .byte 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0
+
+ nop (%eax)
+ nop %eax
+ nop %ax
+ nopl (%eax)
+ nopw (%eax)
+ nopl %eax
+ nopw %ax
+
+ .p2align 4
diff --git a/gas/testsuite/gas/i386/opcode-intel.d b/gas/testsuite/gas/i386/opcode-intel.d
new file mode 100644
index 000000000000..2b728e113277
--- /dev/null
+++ b/gas/testsuite/gas/i386/opcode-intel.d
@@ -0,0 +1,615 @@
+#source: opcode.s
+#as: -J
+#objdump: -dwMintel
+#name: i386 opcodes (Intel disassembly)
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <foo>:
+ *[0-9a-f]+: 00 90 90 90 90 90[ ]+add[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\],dl
+ *[0-9a-f]+: 01 90 90 90 90 90[ ]+add[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 02 90 90 90 90 90[ ]+add[ ]+dl,(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 03 90 90 90 90 90[ ]+add[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 04 90[ ]+add[ ]+al,0x90
+ *[0-9a-f]+: 05 90 90 90 90[ ]+add[ ]+eax,0x90909090
+ *[0-9a-f]+: 06[ ]+push[ ]+es
+ *[0-9a-f]+: 07[ ]+pop[ ]+es
+ *[0-9a-f]+: 08 90 90 90 90 90[ ]+or[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\],dl
+ *[0-9a-f]+: 09 90 90 90 90 90[ ]+or[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 0a 90 90 90 90 90[ ]+or[ ]+dl,(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0b 90 90 90 90 90[ ]+or[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0c 90[ ]+or[ ]+al,0x90
+ *[0-9a-f]+: 0d 90 90 90 90[ ]+or[ ]+eax,0x90909090
+ *[0-9a-f]+: 0e[ ]+push[ ]+cs
+ *[0-9a-f]+: 10 90 90 90 90 90[ ]+adc[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\],dl
+ *[0-9a-f]+: 11 90 90 90 90 90[ ]+adc[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 12 90 90 90 90 90[ ]+adc[ ]+dl,(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 13 90 90 90 90 90[ ]+adc[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 14 90[ ]+adc[ ]+al,0x90
+ *[0-9a-f]+: 15 90 90 90 90[ ]+adc[ ]+eax,0x90909090
+ *[0-9a-f]+: 16[ ]+push[ ]+ss
+ *[0-9a-f]+: 17[ ]+pop[ ]+ss
+ *[0-9a-f]+: 18 90 90 90 90 90[ ]+sbb[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\],dl
+ *[0-9a-f]+: 19 90 90 90 90 90[ ]+sbb[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 1a 90 90 90 90 90[ ]+sbb[ ]+dl,(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 1b 90 90 90 90 90[ ]+sbb[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 1c 90[ ]+sbb[ ]+al,0x90
+ *[0-9a-f]+: 1d 90 90 90 90[ ]+sbb[ ]+eax,0x90909090
+ *[0-9a-f]+: 1e[ ]+push[ ]+ds
+ *[0-9a-f]+: 1f[ ]+pop[ ]+ds
+ *[0-9a-f]+: 20 90 90 90 90 90[ ]+and[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\],dl
+ *[0-9a-f]+: 21 90 90 90 90 90[ ]+and[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 22 90 90 90 90 90[ ]+and[ ]+dl,(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 23 90 90 90 90 90[ ]+and[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 24 90[ ]+and[ ]+al,0x90
+ *[0-9a-f]+: 25 90 90 90 90[ ]+and[ ]+eax,0x90909090
+ *[0-9a-f]+: 27[ ]+daa[ ]*
+ *[0-9a-f]+: 28 90 90 90 90 90[ ]+sub[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\],dl
+ *[0-9a-f]+: 29 90 90 90 90 90[ ]+sub[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 2a 90 90 90 90 90[ ]+sub[ ]+dl,(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 2b 90 90 90 90 90[ ]+sub[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 2c 90[ ]+sub[ ]+al,0x90
+ *[0-9a-f]+: 2d 90 90 90 90[ ]+sub[ ]+eax,0x90909090
+ *[0-9a-f]+: 2f[ ]+das[ ]*
+ *[0-9a-f]+: 30 90 90 90 90 90[ ]+xor[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\],dl
+ *[0-9a-f]+: 31 90 90 90 90 90[ ]+xor[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 32 90 90 90 90 90[ ]+xor[ ]+dl,(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 33 90 90 90 90 90[ ]+xor[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 34 90[ ]+xor[ ]+al,0x90
+ *[0-9a-f]+: 35 90 90 90 90[ ]+xor[ ]+eax,0x90909090
+ *[0-9a-f]+: 37[ ]+aaa[ ]*
+ *[0-9a-f]+: 38 90 90 90 90 90[ ]+cmp[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\],dl
+ *[0-9a-f]+: 39 90 90 90 90 90[ ]+cmp[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 3a 90 90 90 90 90[ ]+cmp[ ]+dl,(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 3b 90 90 90 90 90[ ]+cmp[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 3c 90[ ]+cmp[ ]+al,0x90
+ *[0-9a-f]+: 3d 90 90 90 90[ ]+cmp[ ]+eax,0x90909090
+ *[0-9a-f]+: 3f[ ]+aas[ ]*
+ *[0-9a-f]+: 40[ ]+inc[ ]+eax
+ *[0-9a-f]+: 41[ ]+inc[ ]+ecx
+ *[0-9a-f]+: 42[ ]+inc[ ]+edx
+ *[0-9a-f]+: 43[ ]+inc[ ]+ebx
+ *[0-9a-f]+: 44[ ]+inc[ ]+esp
+ *[0-9a-f]+: 45[ ]+inc[ ]+ebp
+ *[0-9a-f]+: 46[ ]+inc[ ]+esi
+ *[0-9a-f]+: 47[ ]+inc[ ]+edi
+ *[0-9a-f]+: 48[ ]+dec[ ]+eax
+ *[0-9a-f]+: 49[ ]+dec[ ]+ecx
+ *[0-9a-f]+: 4a[ ]+dec[ ]+edx
+ *[0-9a-f]+: 4b[ ]+dec[ ]+ebx
+ *[0-9a-f]+: 4c[ ]+dec[ ]+esp
+ *[0-9a-f]+: 4d[ ]+dec[ ]+ebp
+ *[0-9a-f]+: 4e[ ]+dec[ ]+esi
+ *[0-9a-f]+: 4f[ ]+dec[ ]+edi
+ *[0-9a-f]+: 50[ ]+push[ ]+eax
+ *[0-9a-f]+: 51[ ]+push[ ]+ecx
+ *[0-9a-f]+: 52[ ]+push[ ]+edx
+ *[0-9a-f]+: 53[ ]+push[ ]+ebx
+ *[0-9a-f]+: 54[ ]+push[ ]+esp
+ *[0-9a-f]+: 55[ ]+push[ ]+ebp
+ *[0-9a-f]+: 56[ ]+push[ ]+esi
+ *[0-9a-f]+: 57[ ]+push[ ]+edi
+ *[0-9a-f]+: 58[ ]+pop[ ]+eax
+ *[0-9a-f]+: 59[ ]+pop[ ]+ecx
+ *[0-9a-f]+: 5a[ ]+pop[ ]+edx
+ *[0-9a-f]+: 5b[ ]+pop[ ]+ebx
+ *[0-9a-f]+: 5c[ ]+pop[ ]+esp
+ *[0-9a-f]+: 5d[ ]+pop[ ]+ebp
+ *[0-9a-f]+: 5e[ ]+pop[ ]+esi
+ *[0-9a-f]+: 5f[ ]+pop[ ]+edi
+ *[0-9a-f]+: 60[ ]+pusha[ ]*
+ *[0-9a-f]+: 61[ ]+popa[ ]*
+ *[0-9a-f]+: 62 90 90 90 90 90[ ]+bound[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 63 90 90 90 90 90[ ]+arpl[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 68 90 90 90 90[ ]+push[ ]+0x90909090
+ *[0-9a-f]+: 69 90 90 90 90 90 90 90 90 90[ ]+imul[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\],0x90909090
+ *[0-9a-f]+: 6a 90[ ]+push[ ]+0xffffff90
+ *[0-9a-f]+: 6b 90 90 90 90 90 90[ ]+imul[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\],0xffffff90
+ *[0-9a-f]+: 6c[ ]+ins[ ]+BYTE PTR es:\[edi\],dx
+ *[0-9a-f]+: 6d[ ]+ins[ ]+DWORD PTR es:\[edi\],dx
+ *[0-9a-f]+: 6e[ ]+outs[ ]+dx,BYTE PTR ds:\[esi\]
+ *[0-9a-f]+: 6f[ ]+outs[ ]+dx,DWORD PTR ds:\[esi\]
+ *[0-9a-f]+: 70 90[ ]+jo[ ]+(0x)?df.*
+ *[0-9a-f]+: 71 90[ ]+jno[ ]+(0x)?e1.*
+ *[0-9a-f]+: 72 90[ ]+jb[ ]+(0x)?e3.*
+ *[0-9a-f]+: 73 90[ ]+jae[ ]+(0x)?e5.*
+ *[0-9a-f]+: 74 90[ ]+je[ ]+(0x)?e7.*
+ *[0-9a-f]+: 75 90[ ]+jne[ ]+(0x)?e9.*
+ *[0-9a-f]+: 76 90[ ]+jbe[ ]+(0x)?eb.*
+ *[0-9a-f]+: 77 90[ ]+ja[ ]+(0x)?ed.*
+ *[0-9a-f]+: 78 90[ ]+js[ ]+(0x)?ef.*
+ *[0-9a-f]+: 79 90[ ]+jns[ ]+(0x)?f1.*
+ *[0-9a-f]+: 7a 90[ ]+jp[ ]+(0x)?f3.*
+ *[0-9a-f]+: 7b 90[ ]+jnp[ ]+(0x)?f5.*
+ *[0-9a-f]+: 7c 90[ ]+jl[ ]+(0x)?f7.*
+ *[0-9a-f]+: 7d 90[ ]+jge[ ]+(0x)?f9.*
+ *[0-9a-f]+: 7e 90[ ]+jle[ ]+(0x)?fb.*
+ *[0-9a-f]+: 7f 90[ ]+jg[ ]+(0x)?fd.*
+ *[0-9a-f]+: 80 90 90 90 90 90 90[ ]+adc[ ]+BYTE PTR \[eax-0x6f6f6f70\],0x90
+ *[0-9a-f]+: 81 90 90 90 90 90 90 90 90 90[ ]+adc[ ]+DWORD PTR \[eax-0x6f6f6f70\],0x90909090
+ *[0-9a-f]+: 83 90 90 90 90 90 90[ ]+adc[ ]+DWORD PTR \[eax-0x6f6f6f70\],0xffffff90
+ *[0-9a-f]+: 84 90 90 90 90 90[ ]+test[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\],dl
+ *[0-9a-f]+: 85 90 90 90 90 90[ ]+test[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 86 90 90 90 90 90[ ]+xchg[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\],dl
+ *[0-9a-f]+: 87 90 90 90 90 90[ ]+xchg[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 88 90 90 90 90 90[ ]+mov[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\],dl
+ *[0-9a-f]+: 89 90 90 90 90 90[ ]+mov[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 8a 90 90 90 90 90[ ]+mov[ ]+dl,(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 8b 90 90 90 90 90[ ]+mov[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 8c 90 90 90 90 90[ ]+mov[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],ss
+ *[0-9a-f]+: 8d 90 90 90 90 90[ ]+lea[ ]+edx,\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 8e 90 90 90 90 90[ ]+mov[ ]+ss,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 8f 80 90 90 90 90[ ]+pop[ ]+DWORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 90[ ]+nop[ ]*
+ *[0-9a-f]+: 91[ ]+xchg[ ]+ecx,eax
+ *[0-9a-f]+: 92[ ]+xchg[ ]+edx,eax
+ *[0-9a-f]+: 93[ ]+xchg[ ]+ebx,eax
+ *[0-9a-f]+: 94[ ]+xchg[ ]+esp,eax
+ *[0-9a-f]+: 95[ ]+xchg[ ]+ebp,eax
+ *[0-9a-f]+: 96[ ]+xchg[ ]+esi,eax
+ *[0-9a-f]+: 97[ ]+xchg[ ]+edi,eax
+ *[0-9a-f]+: 98[ ]+cwde[ ]*
+ *[0-9a-f]+: 99[ ]+cdq[ ]*
+ *[0-9a-f]+: 9a 90 90 90 90 90 90[ ]+call[ ]+0x9090:0x90909090
+ *[0-9a-f]+: 9b[ ]+fwait
+ *[0-9a-f]+: 9c[ ]+pushf[ ]*
+ *[0-9a-f]+: 9d[ ]+popf[ ]*
+ *[0-9a-f]+: 9e[ ]+sahf[ ]*
+ *[0-9a-f]+: 9f[ ]+lahf[ ]*
+ *[0-9a-f]+: a0 90 90 90 90[ ]+mov[ ]+al,ds:0x90909090
+ *[0-9a-f]+: a1 90 90 90 90[ ]+mov[ ]+eax,ds:0x90909090
+ *[0-9a-f]+: a2 90 90 90 90[ ]+mov[ ]+ds:0x90909090,al
+ *[0-9a-f]+: a3 90 90 90 90[ ]+mov[ ]+ds:0x90909090,eax
+ *[0-9a-f]+: a4[ ]+movs[ ]+BYTE PTR es:\[edi\],(BYTE PTR )?ds:\[esi\]
+ *[0-9a-f]+: a5[ ]+movs[ ]+DWORD PTR es:\[edi\],(DWORD PTR )?ds:\[esi\]
+ *[0-9a-f]+: a6[ ]+cmps[ ]+BYTE PTR ds:\[esi\],(BYTE PTR )?es:\[edi\]
+ *[0-9a-f]+: a7[ ]+cmps[ ]+DWORD PTR ds:\[esi\],(DWORD PTR )?es:\[edi\]
+ *[0-9a-f]+: a8 90[ ]+test[ ]+al,0x90
+ *[0-9a-f]+: a9 90 90 90 90[ ]+test[ ]+eax,0x90909090
+ *[0-9a-f]+: aa[ ]+stos[ ]+BYTE PTR es:\[edi\](,al)?
+ *[0-9a-f]+: ab[ ]+stos[ ]+DWORD PTR es:\[edi\](,eax)?
+ *[0-9a-f]+: ac[ ]+lods[ ]+(al,)?BYTE PTR ds:\[esi\]
+ *[0-9a-f]+: ad[ ]+lods[ ]+(eax,)?DWORD PTR ds:\[esi\]
+ *[0-9a-f]+: ae[ ]+scas[ ]+(al,)?BYTE PTR es:\[edi\]
+ *[0-9a-f]+: af[ ]+scas[ ]+(eax,)?DWORD PTR es:\[edi\]
+ *[0-9a-f]+: b0 90[ ]+mov[ ]+al,0x90
+ *[0-9a-f]+: b1 90[ ]+mov[ ]+cl,0x90
+ *[0-9a-f]+: b2 90[ ]+mov[ ]+dl,0x90
+ *[0-9a-f]+: b3 90[ ]+mov[ ]+bl,0x90
+ *[0-9a-f]+: b4 90[ ]+mov[ ]+ah,0x90
+ *[0-9a-f]+: b5 90[ ]+mov[ ]+ch,0x90
+ *[0-9a-f]+: b6 90[ ]+mov[ ]+dh,0x90
+ *[0-9a-f]+: b7 90[ ]+mov[ ]+bh,0x90
+ *[0-9a-f]+: b8 90 90 90 90[ ]+mov[ ]+eax,0x90909090
+ *[0-9a-f]+: b9 90 90 90 90[ ]+mov[ ]+ecx,0x90909090
+ *[0-9a-f]+: ba 90 90 90 90[ ]+mov[ ]+edx,0x90909090
+ *[0-9a-f]+: bb 90 90 90 90[ ]+mov[ ]+ebx,0x90909090
+ *[0-9a-f]+: bc 90 90 90 90[ ]+mov[ ]+esp,0x90909090
+ *[0-9a-f]+: bd 90 90 90 90[ ]+mov[ ]+ebp,0x90909090
+ *[0-9a-f]+: be 90 90 90 90[ ]+mov[ ]+esi,0x90909090
+ *[0-9a-f]+: bf 90 90 90 90[ ]+mov[ ]+edi,0x90909090
+ *[0-9a-f]+: c0 90 90 90 90 90 90[ ]+rcl[ ]+BYTE PTR \[eax-0x6f6f6f70\],0x90
+ *[0-9a-f]+: c1 90 90 90 90 90 90[ ]+rcl[ ]+DWORD PTR \[eax-0x6f6f6f70\],0x90
+ *[0-9a-f]+: c2 90 90[ ]+ret[ ]+0x9090
+ *[0-9a-f]+: c3[ ]+ret[ ]*
+ *[0-9a-f]+: c4 90 90 90 90 90[ ]+les[ ]+edx,(FWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: c5 90 90 90 90 90[ ]+lds[ ]+edx,(FWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: c6 80 90 90 90 90 90[ ]+mov[ ]+BYTE PTR \[eax-0x6f6f6f70\],0x90
+ *[0-9a-f]+: c7 80 90 90 90 90 90 90 90 90[ ]+mov[ ]+DWORD PTR \[eax-0x6f6f6f70\],0x90909090
+ *[0-9a-f]+: c8 90 90 90[ ]+enter[ ]+0x9090,0x90
+ *[0-9a-f]+: c9[ ]+leave[ ]*
+ *[0-9a-f]+: ca 90 90[ ]+lret[ ]+0x9090
+ *[0-9a-f]+: cb[ ]+lret[ ]*
+ *[0-9a-f]+: cc[ ]+int3[ ]*
+ *[0-9a-f]+: cd 90[ ]+int[ ]+0x90
+ *[0-9a-f]+: ce[ ]+into[ ]*
+ *[0-9a-f]+: cf[ ]+iret[ ]*
+ *[0-9a-f]+: d0 90 90 90 90 90[ ]+rcl[ ]+BYTE PTR \[eax-0x6f6f6f70\],1
+ *[0-9a-f]+: d1 90 90 90 90 90[ ]+rcl[ ]+DWORD PTR \[eax-0x6f6f6f70\],1
+ *[0-9a-f]+: d2 90 90 90 90 90[ ]+rcl[ ]+BYTE PTR \[eax-0x6f6f6f70\],cl
+ *[0-9a-f]+: d3 90 90 90 90 90[ ]+rcl[ ]+DWORD PTR \[eax-0x6f6f6f70\],cl
+ *[0-9a-f]+: d4 90[ ]+aam[ ]+0xffffff90
+ *[0-9a-f]+: d5 90[ ]+aad[ ]+0xffffff90
+ *[0-9a-f]+: d7[ ]+xlat[ ]+(BYTE PTR )?(ds:)?\[ebx\]
+ *[0-9a-f]+: d8 90 90 90 90 90[ ]+fcom[ ]+DWORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: d9 90 90 90 90 90[ ]+fst[ ]+DWORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: da 90 90 90 90 90[ ]+ficom[ ]+DWORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: db 90 90 90 90 90[ ]+fist[ ]+DWORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: dc 90 90 90 90 90[ ]+fcom[ ]+QWORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: dd 90 90 90 90 90[ ]+fst[ ]+QWORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: de 90 90 90 90 90[ ]+ficom[ ]+WORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: df 90 90 90 90 90[ ]+fist[ ]+WORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: e0 90[ ]+loopne[ ]+(0x)?25c.*
+ *[0-9a-f]+: e1 90[ ]+loope[ ]+(0x)?25e.*
+ *[0-9a-f]+: e2 90[ ]+loop[ ]+(0x)?260.*
+ *[0-9a-f]+: e3 90[ ]+jecxz[ ]+(0x)?262.*
+ *[0-9a-f]+: e4 90[ ]+in[ ]+al,0x90
+ *[0-9a-f]+: e5 90[ ]+in[ ]+eax,0x90
+ *[0-9a-f]+: e6 90[ ]+out[ ]+0x90,al
+ *[0-9a-f]+: e7 90[ ]+out[ ]+0x90,eax
+ *[0-9a-f]+: e8 90 90 90 90[ ]+call[ ]+(0x)?9090936f.*
+ *[0-9a-f]+: e9 90 90 90 90[ ]+jmp[ ]+(0x)?90909374.*
+ *[0-9a-f]+: ea 90 90 90 90 90 90[ ]+jmp[ ]+0x9090:0x90909090
+ *[0-9a-f]+: eb 90[ ]+jmp[ ]+(0x)?27d.*
+ *[0-9a-f]+: ec[ ]+in[ ]+al,dx
+ *[0-9a-f]+: ed[ ]+in[ ]+eax,dx
+ *[0-9a-f]+: ee[ ]+out[ ]+dx,al
+ *[0-9a-f]+: ef[ ]+out[ ]+dx,eax
+ *[0-9a-f]+: f4[ ]+hlt[ ]*
+ *[0-9a-f]+: f5[ ]+cmc[ ]*
+ *[0-9a-f]+: f6 90 90 90 90 90[ ]+not[ ]+BYTE PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: f7 90 90 90 90 90[ ]+not[ ]+DWORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: f8[ ]+clc[ ]*
+ *[0-9a-f]+: f9[ ]+stc[ ]*
+ *[0-9a-f]+: fa[ ]+cli[ ]*
+ *[0-9a-f]+: fb[ ]+sti[ ]*
+ *[0-9a-f]+: fc[ ]+cld[ ]*
+ *[0-9a-f]+: fd[ ]+std[ ]*
+ *[0-9a-f]+: ff 90 90 90 90 90[ ]+call[ ]+DWORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 00 90 90 90 90 90[ ]+lldt[ ]+(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 01 90 90 90 90 90[ ]+lgdtd[ ]+\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 02 90 90 90 90 90[ ]+lar[ ]+edx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 03 90 90 90 90 90[ ]+lsl[ ]+edx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 06[ ]+clts[ ]*
+ *[0-9a-f]+: 0f 08[ ]+invd[ ]*
+ *[0-9a-f]+: 0f 09[ ]+wbinvd[ ]*
+ *[0-9a-f]+: 0f 0b[ ]+ud2a[ ]*
+ *[0-9a-f]+: 0f 20 d0[ ]+mov[ ]+eax,cr2
+ *[0-9a-f]+: 0f 21 d0[ ]+mov[ ]+eax,db2
+ *[0-9a-f]+: 0f 22 d0[ ]+mov[ ]+cr2,eax
+ *[0-9a-f]+: 0f 23 d0[ ]+mov[ ]+db2,eax
+ *[0-9a-f]+: 0f 24 d0[ ]+mov[ ]+eax,tr2
+ *[0-9a-f]+: 0f 26 d0[ ]+mov[ ]+tr2,eax
+ *[0-9a-f]+: 0f 30[ ]+wrmsr[ ]*
+ *[0-9a-f]+: 0f 31[ ]+rdtsc[ ]*
+ *[0-9a-f]+: 0f 32[ ]+rdmsr[ ]*
+ *[0-9a-f]+: 0f 33[ ]+rdpmc[ ]*
+ *[0-9a-f]+: 0f 40 90 90 90 90 90[ ]+cmovo[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 41 90 90 90 90 90[ ]+cmovno[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 42 90 90 90 90 90[ ]+cmovb[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 43 90 90 90 90 90[ ]+cmovae[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 44 90 90 90 90 90[ ]+cmove[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 45 90 90 90 90 90[ ]+cmovne[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 46 90 90 90 90 90[ ]+cmovbe[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 47 90 90 90 90 90[ ]+cmova[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 48 90 90 90 90 90[ ]+cmovs[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 49 90 90 90 90 90[ ]+cmovns[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 4a 90 90 90 90 90[ ]+cmovp[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 4b 90 90 90 90 90[ ]+cmovnp[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 4c 90 90 90 90 90[ ]+cmovl[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 4d 90 90 90 90 90[ ]+cmovge[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 4e 90 90 90 90 90[ ]+cmovle[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 4f 90 90 90 90 90[ ]+cmovg[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 60 90 90 90 90 90[ ]+punpcklbw[ ]+mm2,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 61 90 90 90 90 90[ ]+punpcklwd[ ]+mm2,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 62 90 90 90 90 90[ ]+punpckldq[ ]+mm2,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 63 90 90 90 90 90[ ]+packsswb[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 64 90 90 90 90 90[ ]+pcmpgtb[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 65 90 90 90 90 90[ ]+pcmpgtw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 66 90 90 90 90 90[ ]+pcmpgtd[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 67 90 90 90 90 90[ ]+packuswb[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 68 90 90 90 90 90[ ]+punpckhbw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 69 90 90 90 90 90[ ]+punpckhwd[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 6a 90 90 90 90 90[ ]+punpckhdq[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 6b 90 90 90 90 90[ ]+packssdw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 6e 90 90 90 90 90[ ]+movd[ ]+mm2,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 6f 90 90 90 90 90[ ]+movq[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 71 d0 90[ ]+psrlw[ ]+mm0,0x90
+ *[0-9a-f]+: 0f 72 d0 90[ ]+psrld[ ]+mm0,0x90
+ *[0-9a-f]+: 0f 73 d0 90[ ]+psrlq[ ]+mm0,0x90
+ *[0-9a-f]+: 0f 74 90 90 90 90 90[ ]+pcmpeqb[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 75 90 90 90 90 90[ ]+pcmpeqw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 76 90 90 90 90 90[ ]+pcmpeqd[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 77[ ]+emms[ ]*
+ *[0-9a-f]+: 0f 7e 90 90 90 90 90[ ]+movd[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],mm2
+ *[0-9a-f]+: 0f 7f 90 90 90 90 90[ ]+movq[ ]+(QWORD PTR )?\[eax-0x6f6f6f70\],mm2
+ *[0-9a-f]+: 0f 80 90 90 90 90[ ]+jo[ ]+909094e2 <foo\+0x909094e2>
+ *[0-9a-f]+: 0f 81 90 90 90 90[ ]+jno[ ]+909094e8 <foo\+0x909094e8>
+ *[0-9a-f]+: 0f 82 90 90 90 90[ ]+jb[ ]+909094ee <foo\+0x909094ee>
+ *[0-9a-f]+: 0f 83 90 90 90 90[ ]+jae[ ]+909094f4 <foo\+0x909094f4>
+ *[0-9a-f]+: 0f 84 90 90 90 90[ ]+je[ ]+909094fa <foo\+0x909094fa>
+ *[0-9a-f]+: 0f 85 90 90 90 90[ ]+jne[ ]+90909500 <foo\+0x90909500>
+ *[0-9a-f]+: 0f 86 90 90 90 90[ ]+jbe[ ]+90909506 <foo\+0x90909506>
+ *[0-9a-f]+: 0f 87 90 90 90 90[ ]+ja[ ]+9090950c <foo\+0x9090950c>
+ *[0-9a-f]+: 0f 88 90 90 90 90[ ]+js[ ]+90909512 <foo\+0x90909512>
+ *[0-9a-f]+: 0f 89 90 90 90 90[ ]+jns[ ]+90909518 <foo\+0x90909518>
+ *[0-9a-f]+: 0f 8a 90 90 90 90[ ]+jp[ ]+9090951e <foo\+0x9090951e>
+ *[0-9a-f]+: 0f 8b 90 90 90 90[ ]+jnp[ ]+90909524 <foo\+0x90909524>
+ *[0-9a-f]+: 0f 8c 90 90 90 90[ ]+jl[ ]+9090952a <foo\+0x9090952a>
+ *[0-9a-f]+: 0f 8d 90 90 90 90[ ]+jge[ ]+90909530 <foo\+0x90909530>
+ *[0-9a-f]+: 0f 8e 90 90 90 90[ ]+jle[ ]+90909536 <foo\+0x90909536>
+ *[0-9a-f]+: 0f 8f 90 90 90 90[ ]+jg[ ]+9090953c <foo\+0x9090953c>
+ *[0-9a-f]+: 0f 90 80 90 90 90 90[ ]+seto[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 91 80 90 90 90 90[ ]+setno[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 92 80 90 90 90 90[ ]+setb[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 93 80 90 90 90 90[ ]+setae[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 94 80 90 90 90 90[ ]+sete[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 95 80 90 90 90 90[ ]+setne[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 96 80 90 90 90 90[ ]+setbe[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 97 80 90 90 90 90[ ]+seta[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 98 80 90 90 90 90[ ]+sets[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 99 80 90 90 90 90[ ]+setns[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 9a 80 90 90 90 90[ ]+setp[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 9b 80 90 90 90 90[ ]+setnp[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 9c 80 90 90 90 90[ ]+setl[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 9d 80 90 90 90 90[ ]+setge[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 9e 80 90 90 90 90[ ]+setle[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f 9f 80 90 90 90 90[ ]+setg[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f a0[ ]+push[ ]+fs
+ *[0-9a-f]+: 0f a1[ ]+pop[ ]+fs
+ *[0-9a-f]+: 0f a2[ ]+cpuid[ ]*
+ *[0-9a-f]+: 0f a3 90 90 90 90 90[ ]+bt[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 0f a4 90 90 90 90 90 90[ ]+shld[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx,0x90
+ *[0-9a-f]+: 0f a5 90 90 90 90 90[ ]+shld[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx,cl
+ *[0-9a-f]+: 0f a8[ ]+push[ ]+gs
+ *[0-9a-f]+: 0f a9[ ]+pop[ ]+gs
+ *[0-9a-f]+: 0f aa[ ]+rsm[ ]*
+ *[0-9a-f]+: 0f ab 90 90 90 90 90[ ]+bts[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 0f ac 90 90 90 90 90 90[ ]+shrd[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx,0x90
+ *[0-9a-f]+: 0f ad 90 90 90 90 90[ ]+shrd[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx,cl
+ *[0-9a-f]+: 0f af 90 90 90 90 90[ ]+imul[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f b0 90 90 90 90 90[ ]+cmpxchg (BYTE PTR )?\[eax-0x6f6f6f70\],dl
+ *[0-9a-f]+: 0f b1 90 90 90 90 90[ ]+cmpxchg (DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 0f b2 90 90 90 90 90[ ]+lss[ ]+edx,(FWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f b3 90 90 90 90 90[ ]+btr[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 0f b4 90 90 90 90 90[ ]+lfs[ ]+edx,(FWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f b5 90 90 90 90 90[ ]+lgs[ ]+edx,(FWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f b6 90 90 90 90 90[ ]+movzx[ ]+edx,BYTE PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f b7 90 90 90 90 90[ ]+movzx[ ]+edx,WORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f b9[ ]+ud2b[ ]*
+ *[0-9a-f]+: 0f bb 90 90 90 90 90[ ]+btc[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 0f bc 90 90 90 90 90[ ]+bsf[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f bd 90 90 90 90 90[ ]+bsr[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f be 90 90 90 90 90[ ]+movsx[ ]+edx,BYTE PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f bf 90 90 90 90 90[ ]+movsx[ ]+edx,WORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f c0 90 90 90 90 90[ ]+xadd[ ]+(BYTE PTR )?\[eax-0x6f6f6f70\],dl
+ *[0-9a-f]+: 0f c1 90 90 90 90 90[ ]+xadd[ ]+(DWORD PTR )?\[eax-0x6f6f6f70\],edx
+ *[0-9a-f]+: 0f c8[ ]+bswap[ ]+eax
+ *[0-9a-f]+: 0f c9[ ]+bswap[ ]+ecx
+ *[0-9a-f]+: 0f ca[ ]+bswap[ ]+edx
+ *[0-9a-f]+: 0f cb[ ]+bswap[ ]+ebx
+ *[0-9a-f]+: 0f cc[ ]+bswap[ ]+esp
+ *[0-9a-f]+: 0f cd[ ]+bswap[ ]+ebp
+ *[0-9a-f]+: 0f ce[ ]+bswap[ ]+esi
+ *[0-9a-f]+: 0f cf[ ]+bswap[ ]+edi
+ *[0-9a-f]+: 0f d1 90 90 90 90 90[ ]+psrlw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f d2 90 90 90 90 90[ ]+psrld[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f d3 90 90 90 90 90[ ]+psrlq[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f d5 90 90 90 90 90[ ]+pmullw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f d8 90 90 90 90 90[ ]+psubusb[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f d9 90 90 90 90 90[ ]+psubusw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f db 90 90 90 90 90[ ]+pand[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f dc 90 90 90 90 90[ ]+paddusb[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f dd 90 90 90 90 90[ ]+paddusw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f df 90 90 90 90 90[ ]+pandn[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f e1 90 90 90 90 90[ ]+psraw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f e2 90 90 90 90 90[ ]+psrad[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f e5 90 90 90 90 90[ ]+pmulhw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f e8 90 90 90 90 90[ ]+psubsb[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f e9 90 90 90 90 90[ ]+psubsw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f eb 90 90 90 90 90[ ]+por[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f ec 90 90 90 90 90[ ]+paddsb[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f ed 90 90 90 90 90[ ]+paddsw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f ef 90 90 90 90 90[ ]+pxor[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f f1 90 90 90 90 90[ ]+psllw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f f2 90 90 90 90 90[ ]+pslld[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f f3 90 90 90 90 90[ ]+psllq[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f f5 90 90 90 90 90[ ]+pmaddwd[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f f8 90 90 90 90 90[ ]+psubb[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f f9 90 90 90 90 90[ ]+psubw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f fa 90 90 90 90 90[ ]+psubd[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f fc 90 90 90 90 90[ ]+paddb[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f fd 90 90 90 90 90[ ]+paddw[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 0f fe 90 90 90 90 90[ ]+paddd[ ]+mm2,(QWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 01 90 90 90 90 90[ ]+add[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 03 90 90 90 90 90[ ]+add[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 05 90 90[ ]+add[ ]+ax,0x9090
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 06[ ]+push[ ]+es
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 07[ ]+pop[ ]+es
+ *[0-9a-f]+: 66 09 90 90 90 90 90[ ]+or[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 0b 90 90 90 90 90[ ]+or[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0d 90 90[ ]+or[ ]+ax,0x9090
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 0e[ ]+push[ ]+cs
+ *[0-9a-f]+: 66 11 90 90 90 90 90[ ]+adc[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 13 90 90 90 90 90[ ]+adc[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 15 90 90[ ]+adc[ ]+ax,0x9090
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 16[ ]+push[ ]+ss
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 17[ ]+pop[ ]+ss
+ *[0-9a-f]+: 66 19 90 90 90 90 90[ ]+sbb[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 1b 90 90 90 90 90[ ]+sbb[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 1d 90 90[ ]+sbb[ ]+ax,0x9090
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 1e[ ]+push[ ]+ds
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 1f[ ]+pop[ ]+ds
+ *[0-9a-f]+: 66 21 90 90 90 90 90[ ]+and[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 23 90 90 90 90 90[ ]+and[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 25 90 90[ ]+and[ ]+ax,0x9090
+ *[0-9a-f]+: 66 29 90 90 90 90 90[ ]+sub[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 2b 90 90 90 90 90[ ]+sub[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 2d 90 90[ ]+sub[ ]+ax,0x9090
+ *[0-9a-f]+: 66 31 90 90 90 90 90[ ]+xor[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 33 90 90 90 90 90[ ]+xor[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 35 90 90[ ]+xor[ ]+ax,0x9090
+ *[0-9a-f]+: 66 39 90 90 90 90 90[ ]+cmp[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 3b 90 90 90 90 90[ ]+cmp[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 3d 90 90[ ]+cmp[ ]+ax,0x9090
+ *[0-9a-f]+: 66 40[ ]+inc[ ]+ax
+ *[0-9a-f]+: 66 41[ ]+inc[ ]+cx
+ *[0-9a-f]+: 66 42[ ]+inc[ ]+dx
+ *[0-9a-f]+: 66 43[ ]+inc[ ]+bx
+ *[0-9a-f]+: 66 44[ ]+inc[ ]+sp
+ *[0-9a-f]+: 66 45[ ]+inc[ ]+bp
+ *[0-9a-f]+: 66 46[ ]+inc[ ]+si
+ *[0-9a-f]+: 66 47[ ]+inc[ ]+di
+ *[0-9a-f]+: 66 48[ ]+dec[ ]+ax
+ *[0-9a-f]+: 66 49[ ]+dec[ ]+cx
+ *[0-9a-f]+: 66 4a[ ]+dec[ ]+dx
+ *[0-9a-f]+: 66 4b[ ]+dec[ ]+bx
+ *[0-9a-f]+: 66 4c[ ]+dec[ ]+sp
+ *[0-9a-f]+: 66 4d[ ]+dec[ ]+bp
+ *[0-9a-f]+: 66 4e[ ]+dec[ ]+si
+ *[0-9a-f]+: 66 4f[ ]+dec[ ]+di
+ *[0-9a-f]+: 66 50[ ]+push[ ]+ax
+ *[0-9a-f]+: 66 51[ ]+push[ ]+cx
+ *[0-9a-f]+: 66 52[ ]+push[ ]+dx
+ *[0-9a-f]+: 66 53[ ]+push[ ]+bx
+ *[0-9a-f]+: 66 54[ ]+push[ ]+sp
+ *[0-9a-f]+: 66 55[ ]+push[ ]+bp
+ *[0-9a-f]+: 66 56[ ]+push[ ]+si
+ *[0-9a-f]+: 66 57[ ]+push[ ]+di
+ *[0-9a-f]+: 66 58[ ]+pop[ ]+ax
+ *[0-9a-f]+: 66 59[ ]+pop[ ]+cx
+ *[0-9a-f]+: 66 5a[ ]+pop[ ]+dx
+ *[0-9a-f]+: 66 5b[ ]+pop[ ]+bx
+ *[0-9a-f]+: 66 5c[ ]+pop[ ]+sp
+ *[0-9a-f]+: 66 5d[ ]+pop[ ]+bp
+ *[0-9a-f]+: 66 5e[ ]+pop[ ]+si
+ *[0-9a-f]+: 66 5f[ ]+pop[ ]+di
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 60[ ]+pusha[ ]*
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 61[ ]+popa[ ]*
+ *[0-9a-f]+: 66 62 90 90 90 90 90[ ]+bound[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 68 90 90[ ]+push[ ]+0x9090
+ *[0-9a-f]+: 66 69 90 90 90 90 90 90 90[ ]+imul[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\],0x9090
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 6a 90[ ]+push[ ]+0xffffff90
+ *[0-9a-f]+: 66 6b 90 90 90 90 90 90[ ]+imul[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\],0xffffff90
+ *[0-9a-f]+: 66 6d[ ]+ins[ ]+WORD PTR es:\[edi\],dx
+ *[0-9a-f]+: 66 6f[ ]+outs[ ]+dx,WORD PTR ds:\[esi\]
+ *[0-9a-f]+: 66 81 90 90 90 90 90 90 90[ ]+adc[ ]+WORD PTR \[eax-0x6f6f6f70\],0x9090
+ *[0-9a-f]+: 66 83 90 90 90 90 90 90[ ]+adc[ ]+WORD PTR \[eax-0x6f6f6f70\],0xffffff90
+ *[0-9a-f]+: 66 85 90 90 90 90 90[ ]+test[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 87 90 90 90 90 90[ ]+xchg[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 89 90 90 90 90 90[ ]+mov[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 8b 90 90 90 90 90[ ]+mov[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 8c 90 90 90 90 90[ ]+mov[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],ss
+ *[0-9a-f]+: 66 8d 90 90 90 90 90[ ]+lea[ ]+dx,\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 8f 80 90 90 90 90[ ]+pop[ ]+WORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 91[ ]+xchg[ ]+cx,ax
+ *[0-9a-f]+: 66 92[ ]+xchg[ ]+dx,ax
+ *[0-9a-f]+: 66 93[ ]+xchg[ ]+bx,ax
+ *[0-9a-f]+: 66 94[ ]+xchg[ ]+sp,ax
+ *[0-9a-f]+: 66 95[ ]+xchg[ ]+bp,ax
+ *[0-9a-f]+: 66 96[ ]+xchg[ ]+si,ax
+ *[0-9a-f]+: 66 97[ ]+xchg[ ]+di,ax
+ *[0-9a-f]+: 66 98[ ]+cbw[ ]*
+ *[0-9a-f]+: 66 99[ ]+cwd[ ]*
+ *[0-9a-f]+: 66 9a 90 90 90 90[ ]+call[ ]+0x9090:0x9090
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 9c[ ]+pushf[ ]*
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 9d[ ]+popf[ ]*
+ *[0-9a-f]+: 66 a1 90 90 90 90[ ]+mov[ ]+ax,ds:0x90909090
+ *[0-9a-f]+: 66 a3 90 90 90 90[ ]+mov[ ]+ds:0x90909090,ax
+ *[0-9a-f]+: 66 a5[ ]+movs[ ]+WORD PTR es:\[edi\],(WORD PTR )?ds:\[esi\]
+ *[0-9a-f]+: 66 a7[ ]+cmps[ ]+WORD PTR ds:\[esi\],(WORD PTR )?es:\[edi\]
+ *[0-9a-f]+: 66 a9 90 90[ ]+test[ ]+ax,0x9090
+ *[0-9a-f]+: 66 ab[ ]+stos[ ]+WORD PTR es:\[edi\](,ax)?
+ *[0-9a-f]+: 66 ad[ ]+lods[ ]+(ax,)?WORD PTR ds:\[esi\]
+ *[0-9a-f]+: 66 af[ ]+scas[ ]+(ax,)?WORD PTR es:\[edi\]
+ *[0-9a-f]+: 66 b8 90 90[ ]+mov[ ]+ax,0x9090
+ *[0-9a-f]+: 66 b9 90 90[ ]+mov[ ]+cx,0x9090
+ *[0-9a-f]+: 66 ba 90 90[ ]+mov[ ]+dx,0x9090
+ *[0-9a-f]+: 66 bb 90 90[ ]+mov[ ]+bx,0x9090
+ *[0-9a-f]+: 66 bc 90 90[ ]+mov[ ]+sp,0x9090
+ *[0-9a-f]+: 66 bd 90 90[ ]+mov[ ]+bp,0x9090
+ *[0-9a-f]+: 66 be 90 90[ ]+mov[ ]+si,0x9090
+ *[0-9a-f]+: 66 bf 90 90[ ]+mov[ ]+di,0x9090
+ *[0-9a-f]+: 66 c1 90 90 90 90 90 90[ ]+rcl[ ]+WORD PTR \[eax-0x6f6f6f70\],0x90
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: c2 90 90[ ]+ret[ ]+0x9090
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: c3[ ]+ret[ ]*
+ *[0-9a-f]+: 66 c4 90 90 90 90 90[ ]+les[ ]+dx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 c5 90 90 90 90 90[ ]+lds[ ]+dx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 c7 80 90 90 90 90 90 90[ ]+mov[ ]+WORD PTR \[eax-0x6f6f6f70\],0x9090
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: c8 90 90 90[ ]+enter[ ]+0x9090,0x90
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: c9[ ]+leave[ ]*
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: ca 90 90[ ]+lret[ ]+0x9090
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: cb[ ]+lret[ ]*
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: cf[ ]+iret[ ]*
+ *[0-9a-f]+: 66 d1 90 90 90 90 90[ ]+rcl[ ]+WORD PTR \[eax-0x6f6f6f70\],1
+ *[0-9a-f]+: 66 d3 90 90 90 90 90[ ]+rcl[ ]+WORD PTR \[eax-0x6f6f6f70\],cl
+ *[0-9a-f]+: 66 e5 90[ ]+in[ ]+ax,0x90
+ *[0-9a-f]+: 66 e7 90[ ]+out[ ]+0x90,ax
+ *[0-9a-f]+: 66 e8 8f 90[ ]+call[ ]+(0x)?9918.*
+ *[0-9a-f]+: 66 ea 90 90 90 90[ ]+jmp[ ]+0x9090:0x9090
+ *[0-9a-f]+: 66 ed[ ]+in[ ]+ax,dx
+ *[0-9a-f]+: 66 ef[ ]+out[ ]+dx,ax
+ *[0-9a-f]+: 66 f7 90 90 90 90 90[ ]+not[ ]+WORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 ff 90 90 90 90 90[ ]+call[ ]+WORD PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 02 90 90 90 90 90[ ]+lar[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 03 90 90 90 90 90[ ]+lsl[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 40 90 90 90 90 90[ ]+cmovo[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 41 90 90 90 90 90[ ]+cmovno[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 42 90 90 90 90 90[ ]+cmovb[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 43 90 90 90 90 90[ ]+cmovae[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 44 90 90 90 90 90[ ]+cmove[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 45 90 90 90 90 90[ ]+cmovne[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 46 90 90 90 90 90[ ]+cmovbe[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 47 90 90 90 90 90[ ]+cmova[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 48 90 90 90 90 90[ ]+cmovs[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 49 90 90 90 90 90[ ]+cmovns[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 4a 90 90 90 90 90[ ]+cmovp[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 4b 90 90 90 90 90[ ]+cmovnp[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 4c 90 90 90 90 90[ ]+cmovl[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 4d 90 90 90 90 90[ ]+cmovge[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 4e 90 90 90 90 90[ ]+cmovle[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f 4f 90 90 90 90 90[ ]+cmovg[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 0f a0[ ]+push[ ]+fs
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 0f a1[ ]+pop[ ]+fs
+ *[0-9a-f]+: 66 0f a3 90 90 90 90 90[ ]+bt[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 0f a4 90 90 90 90 90 90[ ]+shld[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx,0x90
+ *[0-9a-f]+: 66 0f a5 90 90 90 90 90[ ]+shld[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx,cl
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 0f a8[ ]+push[ ]+gs
+ *[0-9a-f]+: 66[ ]+data16
+ *[0-9a-f]+: 0f a9[ ]+pop[ ]+gs
+ *[0-9a-f]+: 66 0f ab 90 90 90 90 90[ ]+bts[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 0f ac 90 90 90 90 90 90[ ]+shrd[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx,0x90
+ *[0-9a-f]+: 66 0f ad 90 90 90 90 90[ ]+shrd[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx,cl
+ *[0-9a-f]+: 66 0f af 90 90 90 90 90[ ]+imul[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f b1 90 90 90 90 90[ ]+cmpxchg (WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 0f b2 90 90 90 90 90[ ]+lss[ ]+dx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f b3 90 90 90 90 90[ ]+btr[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 0f b4 90 90 90 90 90[ ]+lfs[ ]+dx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f b5 90 90 90 90 90[ ]+lgs[ ]+dx,(DWORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f b6 90 90 90 90 90[ ]+movzx[ ]+dx,BYTE PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f bb 90 90 90 90 90[ ]+btc[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 0f bc 90 90 90 90 90[ ]+bsf[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f bd 90 90 90 90 90[ ]+bsr[ ]+dx,(WORD PTR )?\[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f be 90 90 90 90 90[ ]+movsx[ ]+dx,BYTE PTR \[eax-0x6f6f6f70\]
+ *[0-9a-f]+: 66 0f c1 90 90 90 90 90[ ]+xadd[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx
+ *[0-9a-f]+: 66 90[ ]+xchg[ ]+ax,ax
+ *[0-9a-f]+: 0f 00 c0[ ]+sldt[ ]+eax
+ *[0-9a-f]+: 66 0f 00 c0[ ]+sldt[ ]+ax
+ *[0-9a-f]+: 0f 00 00[ ]+sldt[ ]+(WORD PTR )?\[eax\]
+ *[0-9a-f]+: 0f 01 e0[ ]+smsw[ ]+eax
+ *[0-9a-f]+: 66 0f 01 e0[ ]+smsw[ ]+ax
+ *[0-9a-f]+: 0f 01 20[ ]+smsw[ ]+(WORD PTR )?\[eax\]
+ *[0-9a-f]+: 0f 00 c8[ ]+str[ ]+eax
+ *[0-9a-f]+: 66 0f 00 c8[ ]+str[ ]+ax
+ *[0-9a-f]+: 0f 00 08[ ]+str[ ]+(WORD PTR )?\[eax\]
+ *[0-9a-f]+: 0f ad d0 [ ]*shrd[ ]+eax,edx,cl
+ *[0-9a-f]+: 0f a5 d0 [ ]*shld[ ]+eax,edx,cl
+ *[0-9a-f]+: 85 c3 [ ]*test[ ]+ebx,eax
+ *[0-9a-f]+: 85 d8 [ ]*test[ ]+eax,ebx
+ *[0-9a-f]+: 85 18 [ ]*test[ ]+(DWORD PTR )?\[eax\],ebx
+#pass
+ \.\.\.
diff --git a/gas/testsuite/gas/i386/opcode-suffix.d b/gas/testsuite/gas/i386/opcode-suffix.d
new file mode 100644
index 000000000000..9db7e671135d
--- /dev/null
+++ b/gas/testsuite/gas/i386/opcode-suffix.d
@@ -0,0 +1,591 @@
+#source: opcode.s
+#as: -J
+#objdump: -dwMsuffix
+#name: i386 opcodes (w/ suffix)
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <foo>:
+ *[0-9a-f]+: 00 90 90 90 90 90[ ]+addb[ ]+%dl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 01 90 90 90 90 90[ ]+addl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 02 90 90 90 90 90[ ]+addb[ ]+-0x6f6f6f70\(%eax\),%dl
+ *[0-9a-f]+: 03 90 90 90 90 90[ ]+addl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 04 90[ ]+addb[ ]+\$0x90,%al
+ *[0-9a-f]+: 05 90 90 90 90[ ]+addl[ ]+\$0x90909090,%eax
+ *[0-9a-f]+: 06[ ]+pushl[ ]+%es
+ *[0-9a-f]+: 07[ ]+popl[ ]+%es
+ *[0-9a-f]+: 08 90 90 90 90 90[ ]+orb[ ]+%dl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 09 90 90 90 90 90[ ]+orl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0a 90 90 90 90 90[ ]+orb[ ]+-0x6f6f6f70\(%eax\),%dl
+ *[0-9a-f]+: 0b 90 90 90 90 90[ ]+orl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0c 90[ ]+orb[ ]+\$0x90,%al
+ *[0-9a-f]+: 0d 90 90 90 90[ ]+orl[ ]+\$0x90909090,%eax
+ *[0-9a-f]+: 0e[ ]+pushl[ ]+%cs
+ *[0-9a-f]+: 10 90 90 90 90 90[ ]+adcb[ ]+%dl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 11 90 90 90 90 90[ ]+adcl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 12 90 90 90 90 90[ ]+adcb[ ]+-0x6f6f6f70\(%eax\),%dl
+ *[0-9a-f]+: 13 90 90 90 90 90[ ]+adcl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 14 90[ ]+adcb[ ]+\$0x90,%al
+ *[0-9a-f]+: 15 90 90 90 90[ ]+adcl[ ]+\$0x90909090,%eax
+ *[0-9a-f]+: 16[ ]+pushl[ ]+%ss
+ *[0-9a-f]+: 17[ ]+popl[ ]+%ss
+ *[0-9a-f]+: 18 90 90 90 90 90[ ]+sbbb[ ]+%dl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 19 90 90 90 90 90[ ]+sbbl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 1a 90 90 90 90 90[ ]+sbbb[ ]+-0x6f6f6f70\(%eax\),%dl
+ *[0-9a-f]+: 1b 90 90 90 90 90[ ]+sbbl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 1c 90[ ]+sbbb[ ]+\$0x90,%al
+ *[0-9a-f]+: 1d 90 90 90 90[ ]+sbbl[ ]+\$0x90909090,%eax
+ *[0-9a-f]+: 1e[ ]+pushl[ ]+%ds
+ *[0-9a-f]+: 1f[ ]+popl[ ]+%ds
+ *[0-9a-f]+: 20 90 90 90 90 90[ ]+andb[ ]+%dl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 21 90 90 90 90 90[ ]+andl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 22 90 90 90 90 90[ ]+andb[ ]+-0x6f6f6f70\(%eax\),%dl
+ *[0-9a-f]+: 23 90 90 90 90 90[ ]+andl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 24 90[ ]+andb[ ]+\$0x90,%al
+ *[0-9a-f]+: 25 90 90 90 90[ ]+andl[ ]+\$0x90909090,%eax
+ *[0-9a-f]+: 27[ ]+daa[ ]+
+ *[0-9a-f]+: 28 90 90 90 90 90[ ]+subb[ ]+%dl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 29 90 90 90 90 90[ ]+subl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 2a 90 90 90 90 90[ ]+subb[ ]+-0x6f6f6f70\(%eax\),%dl
+ *[0-9a-f]+: 2b 90 90 90 90 90[ ]+subl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 2c 90[ ]+subb[ ]+\$0x90,%al
+ *[0-9a-f]+: 2d 90 90 90 90[ ]+subl[ ]+\$0x90909090,%eax
+ *[0-9a-f]+: 2f[ ]+das[ ]+
+ *[0-9a-f]+: 30 90 90 90 90 90[ ]+xorb[ ]+%dl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 31 90 90 90 90 90[ ]+xorl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 32 90 90 90 90 90[ ]+xorb[ ]+-0x6f6f6f70\(%eax\),%dl
+ *[0-9a-f]+: 33 90 90 90 90 90[ ]+xorl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 34 90[ ]+xorb[ ]+\$0x90,%al
+ *[0-9a-f]+: 35 90 90 90 90[ ]+xorl[ ]+\$0x90909090,%eax
+ *[0-9a-f]+: 37[ ]+aaa[ ]+
+ *[0-9a-f]+: 38 90 90 90 90 90[ ]+cmpb[ ]+%dl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 39 90 90 90 90 90[ ]+cmpl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 3a 90 90 90 90 90[ ]+cmpb[ ]+-0x6f6f6f70\(%eax\),%dl
+ *[0-9a-f]+: 3b 90 90 90 90 90[ ]+cmpl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 3c 90[ ]+cmpb[ ]+\$0x90,%al
+ *[0-9a-f]+: 3d 90 90 90 90[ ]+cmpl[ ]+\$0x90909090,%eax
+ *[0-9a-f]+: 3f[ ]+aas[ ]+
+ *[0-9a-f]+: 40[ ]+incl[ ]+%eax
+ *[0-9a-f]+: 41[ ]+incl[ ]+%ecx
+ *[0-9a-f]+: 42[ ]+incl[ ]+%edx
+ *[0-9a-f]+: 43[ ]+incl[ ]+%ebx
+ *[0-9a-f]+: 44[ ]+incl[ ]+%esp
+ *[0-9a-f]+: 45[ ]+incl[ ]+%ebp
+ *[0-9a-f]+: 46[ ]+incl[ ]+%esi
+ *[0-9a-f]+: 47[ ]+incl[ ]+%edi
+ *[0-9a-f]+: 48[ ]+decl[ ]+%eax
+ *[0-9a-f]+: 49[ ]+decl[ ]+%ecx
+ *[0-9a-f]+: 4a[ ]+decl[ ]+%edx
+ *[0-9a-f]+: 4b[ ]+decl[ ]+%ebx
+ *[0-9a-f]+: 4c[ ]+decl[ ]+%esp
+ *[0-9a-f]+: 4d[ ]+decl[ ]+%ebp
+ *[0-9a-f]+: 4e[ ]+decl[ ]+%esi
+ *[0-9a-f]+: 4f[ ]+decl[ ]+%edi
+ *[0-9a-f]+: 50[ ]+pushl[ ]+%eax
+ *[0-9a-f]+: 51[ ]+pushl[ ]+%ecx
+ *[0-9a-f]+: 52[ ]+pushl[ ]+%edx
+ *[0-9a-f]+: 53[ ]+pushl[ ]+%ebx
+ *[0-9a-f]+: 54[ ]+pushl[ ]+%esp
+ *[0-9a-f]+: 55[ ]+pushl[ ]+%ebp
+ *[0-9a-f]+: 56[ ]+pushl[ ]+%esi
+ *[0-9a-f]+: 57[ ]+pushl[ ]+%edi
+ *[0-9a-f]+: 58[ ]+popl[ ]+%eax
+ *[0-9a-f]+: 59[ ]+popl[ ]+%ecx
+ *[0-9a-f]+: 5a[ ]+popl[ ]+%edx
+ *[0-9a-f]+: 5b[ ]+popl[ ]+%ebx
+ *[0-9a-f]+: 5c[ ]+popl[ ]+%esp
+ *[0-9a-f]+: 5d[ ]+popl[ ]+%ebp
+ *[0-9a-f]+: 5e[ ]+popl[ ]+%esi
+ *[0-9a-f]+: 5f[ ]+popl[ ]+%edi
+ *[0-9a-f]+: 60[ ]+pushal
+ *[0-9a-f]+: 61[ ]+popal[ ]+
+ *[0-9a-f]+: 62 90 90 90 90 90[ ]+boundl %edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 63 90 90 90 90 90[ ]+arpl[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 68 90 90 90 90[ ]+pushl[ ]+\$0x90909090
+ *[0-9a-f]+: 69 90 90 90 90 90 90 90 90 90[ ]+imull[ ]+\$0x90909090,-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 6a 90[ ]+pushl[ ]+\$0xffffff90
+ *[0-9a-f]+: 6b 90 90 90 90 90 90[ ]+imull[ ]+\$0xffffff90,-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 6c[ ]+insb[ ]+\(%dx\),%es:\(%edi\)
+ *[0-9a-f]+: 6d[ ]+insl[ ]+\(%dx\),%es:\(%edi\)
+ *[0-9a-f]+: 6e[ ]+outsb[ ]+%ds:\(%esi\),\(%dx\)
+ *[0-9a-f]+: 6f[ ]+outsl[ ]+%ds:\(%esi\),\(%dx\)
+ *[0-9a-f]+: 70 90[ ]+jo[ ]+(0x)?df.*
+ *[0-9a-f]+: 71 90[ ]+jno[ ]+(0x)?e1.*
+ *[0-9a-f]+: 72 90[ ]+jb[ ]+(0x)?e3.*
+ *[0-9a-f]+: 73 90[ ]+jae[ ]+(0x)?e5.*
+ *[0-9a-f]+: 74 90[ ]+je[ ]+(0x)?e7.*
+ *[0-9a-f]+: 75 90[ ]+jne[ ]+(0x)?e9.*
+ *[0-9a-f]+: 76 90[ ]+jbe[ ]+(0x)?eb.*
+ *[0-9a-f]+: 77 90[ ]+ja[ ]+(0x)?ed.*
+ *[0-9a-f]+: 78 90[ ]+js[ ]+(0x)?ef.*
+ *[0-9a-f]+: 79 90[ ]+jns[ ]+(0x)?f1.*
+ *[0-9a-f]+: 7a 90[ ]+jp[ ]+(0x)?f3.*
+ *[0-9a-f]+: 7b 90[ ]+jnp[ ]+(0x)?f5.*
+ *[0-9a-f]+: 7c 90[ ]+jl[ ]+(0x)?f7.*
+ *[0-9a-f]+: 7d 90[ ]+jge[ ]+(0x)?f9.*
+ *[0-9a-f]+: 7e 90[ ]+jle[ ]+(0x)?fb.*
+ *[0-9a-f]+: 7f 90[ ]+jg[ ]+(0x)?fd.*
+ *[0-9a-f]+: 80 90 90 90 90 90 90[ ]+adcb[ ]+\$0x90,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 81 90 90 90 90 90 90 90 90 90[ ]+adcl[ ]+\$0x90909090,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 83 90 90 90 90 90 90[ ]+adcl[ ]+\$0xffffff90,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 84 90 90 90 90 90[ ]+testb[ ]+%dl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 85 90 90 90 90 90[ ]+testl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 86 90 90 90 90 90[ ]+xchgb[ ]+%dl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 87 90 90 90 90 90[ ]+xchgl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 88 90 90 90 90 90[ ]+movb[ ]+%dl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 89 90 90 90 90 90[ ]+movl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 8a 90 90 90 90 90[ ]+movb[ ]+-0x6f6f6f70\(%eax\),%dl
+ *[0-9a-f]+: 8b 90 90 90 90 90[ ]+movl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 8c 90 90 90 90 90[ ]+movw[ ]+%ss,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 8d 90 90 90 90 90[ ]+leal[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 8e 90 90 90 90 90[ ]+movw[ ]+-0x6f6f6f70\(%eax\),%ss
+ *[0-9a-f]+: 8f 80 90 90 90 90[ ]+popl[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 90[ ]+nop[ ]+
+ *[0-9a-f]+: 91[ ]+xchgl[ ]+%eax,%ecx
+ *[0-9a-f]+: 92[ ]+xchgl[ ]+%eax,%edx
+ *[0-9a-f]+: 93[ ]+xchgl[ ]+%eax,%ebx
+ *[0-9a-f]+: 94[ ]+xchgl[ ]+%eax,%esp
+ *[0-9a-f]+: 95[ ]+xchgl[ ]+%eax,%ebp
+ *[0-9a-f]+: 96[ ]+xchgl[ ]+%eax,%esi
+ *[0-9a-f]+: 97[ ]+xchgl[ ]+%eax,%edi
+ *[0-9a-f]+: 98[ ]+cwtl[ ]+
+ *[0-9a-f]+: 99[ ]+cltd[ ]+
+ *[0-9a-f]+: 9a 90 90 90 90 90 90[ ]+lcalll \$0x9090,\$0x90909090
+ *[0-9a-f]+: 9b[ ]+fwait
+ *[0-9a-f]+: 9c[ ]+pushfl
+ *[0-9a-f]+: 9d[ ]+popfl[ ]+
+ *[0-9a-f]+: 9e[ ]+sahf[ ]+
+ *[0-9a-f]+: 9f[ ]+lahf[ ]+
+ *[0-9a-f]+: a0 90 90 90 90[ ]+movb[ ]+0x90909090,%al
+ *[0-9a-f]+: a1 90 90 90 90[ ]+movl[ ]+0x90909090,%eax
+ *[0-9a-f]+: a2 90 90 90 90[ ]+movb[ ]+%al,0x90909090
+ *[0-9a-f]+: a3 90 90 90 90[ ]+movl[ ]+%eax,0x90909090
+ *[0-9a-f]+: a4[ ]+movsb[ ]+%ds:\(%esi\),%es:\(%edi\)
+ *[0-9a-f]+: a5[ ]+movsl[ ]+%ds:\(%esi\),%es:\(%edi\)
+ *[0-9a-f]+: a6[ ]+cmpsb[ ]+%es:\(%edi\),%ds:\(%esi\)
+ *[0-9a-f]+: a7[ ]+cmpsl[ ]+%es:\(%edi\),%ds:\(%esi\)
+ *[0-9a-f]+: a8 90[ ]+testb[ ]+\$0x90,%al
+ *[0-9a-f]+: a9 90 90 90 90[ ]+testl[ ]+\$0x90909090,%eax
+ *[0-9a-f]+: aa[ ]+stosb[ ]+%al,%es:\(%edi\)
+ *[0-9a-f]+: ab[ ]+stosl[ ]+%eax,%es:\(%edi\)
+ *[0-9a-f]+: ac[ ]+lodsb[ ]+%ds:\(%esi\),%al
+ *[0-9a-f]+: ad[ ]+lodsl[ ]+%ds:\(%esi\),%eax
+ *[0-9a-f]+: ae[ ]+scasb[ ]+%es:\(%edi\),%al
+ *[0-9a-f]+: af[ ]+scasl[ ]+%es:\(%edi\),%eax
+ *[0-9a-f]+: b0 90[ ]+movb[ ]+\$0x90,%al
+ *[0-9a-f]+: b1 90[ ]+movb[ ]+\$0x90,%cl
+ *[0-9a-f]+: b2 90[ ]+movb[ ]+\$0x90,%dl
+ *[0-9a-f]+: b3 90[ ]+movb[ ]+\$0x90,%bl
+ *[0-9a-f]+: b4 90[ ]+movb[ ]+\$0x90,%ah
+ *[0-9a-f]+: b5 90[ ]+movb[ ]+\$0x90,%ch
+ *[0-9a-f]+: b6 90[ ]+movb[ ]+\$0x90,%dh
+ *[0-9a-f]+: b7 90[ ]+movb[ ]+\$0x90,%bh
+ *[0-9a-f]+: b8 90 90 90 90[ ]+movl[ ]+\$0x90909090,%eax
+ *[0-9a-f]+: b9 90 90 90 90[ ]+movl[ ]+\$0x90909090,%ecx
+ *[0-9a-f]+: ba 90 90 90 90[ ]+movl[ ]+\$0x90909090,%edx
+ *[0-9a-f]+: bb 90 90 90 90[ ]+movl[ ]+\$0x90909090,%ebx
+ *[0-9a-f]+: bc 90 90 90 90[ ]+movl[ ]+\$0x90909090,%esp
+ *[0-9a-f]+: bd 90 90 90 90[ ]+movl[ ]+\$0x90909090,%ebp
+ *[0-9a-f]+: be 90 90 90 90[ ]+movl[ ]+\$0x90909090,%esi
+ *[0-9a-f]+: bf 90 90 90 90[ ]+movl[ ]+\$0x90909090,%edi
+ *[0-9a-f]+: c0 90 90 90 90 90 90[ ]+rclb[ ]+\$0x90,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: c1 90 90 90 90 90 90[ ]+rcll[ ]+\$0x90,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: c2 90 90[ ]+retl[ ]+\$0x9090
+ *[0-9a-f]+: c3[ ]+retl[ ]+
+ *[0-9a-f]+: c4 90 90 90 90 90[ ]+lesl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: c5 90 90 90 90 90[ ]+ldsl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: c6 80 90 90 90 90 90[ ]+movb[ ]+\$0x90,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: c7 80 90 90 90 90 90 90 90 90[ ]+movl[ ]+\$0x90909090,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: c8 90 90 90[ ]+enterl \$0x9090,\$0x90
+ *[0-9a-f]+: c9[ ]+leavel
+ *[0-9a-f]+: ca 90 90[ ]+lretl[ ]+\$0x9090
+ *[0-9a-f]+: cb[ ]+lretl[ ]+
+ *[0-9a-f]+: cc[ ]+int3[ ]+
+ *[0-9a-f]+: cd 90[ ]+int[ ]+\$0x90
+ *[0-9a-f]+: ce[ ]+into[ ]+
+ *[0-9a-f]+: cf[ ]+iretl[ ]+
+ *[0-9a-f]+: d0 90 90 90 90 90[ ]+rclb[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: d1 90 90 90 90 90[ ]+rcll[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: d2 90 90 90 90 90[ ]+rclb[ ]+%cl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: d3 90 90 90 90 90[ ]+rcll[ ]+%cl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: d4 90[ ]+aam[ ]+\$0xffffff90
+ *[0-9a-f]+: d5 90[ ]+aad[ ]+\$0xffffff90
+ *[0-9a-f]+: d7[ ]+xlat[ ]+%ds:\(%ebx\)
+ *[0-9a-f]+: d8 90 90 90 90 90[ ]+fcoms[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: d9 90 90 90 90 90[ ]+fsts[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: da 90 90 90 90 90[ ]+ficoml -0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: db 90 90 90 90 90[ ]+fistl[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: dc 90 90 90 90 90[ ]+fcoml[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: dd 90 90 90 90 90[ ]+fstl[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: de 90 90 90 90 90[ ]+ficom[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: df 90 90 90 90 90[ ]+fist[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: e0 90[ ]+loopnel (0x)?25c.*
+ *[0-9a-f]+: e1 90[ ]+loopel (0x)?25e.*
+ *[0-9a-f]+: e2 90[ ]+loopl[ ]+(0x)?260.*
+ *[0-9a-f]+: e3 90[ ]+jecxz[ ]+(0x)?262.*
+ *[0-9a-f]+: e4 90[ ]+inb[ ]+\$0x90,%al
+ *[0-9a-f]+: e5 90[ ]+inl[ ]+\$0x90,%eax
+ *[0-9a-f]+: e6 90[ ]+outb[ ]+%al,\$0x90
+ *[0-9a-f]+: e7 90[ ]+outl[ ]+%eax,\$0x90
+ *[0-9a-f]+: e8 90 90 90 90[ ]+calll[ ]+(0x)?9090936f.*
+ *[0-9a-f]+: e9 90 90 90 90[ ]+jmpl[ ]+(0x)?90909374.*
+ *[0-9a-f]+: ea 90 90 90 90 90 90[ ]+ljmpl[ ]+\$0x9090,\$0x90909090
+ *[0-9a-f]+: eb 90[ ]+jmp[ ]+(0x)?27d.*
+ *[0-9a-f]+: ec[ ]+inb[ ]+\(%dx\),%al
+ *[0-9a-f]+: ed[ ]+inl[ ]+\(%dx\),%eax
+ *[0-9a-f]+: ee[ ]+outb[ ]+%al,\(%dx\)
+ *[0-9a-f]+: ef[ ]+outl[ ]+%eax,\(%dx\)
+ *[0-9a-f]+: f4[ ]+hlt[ ]+
+ *[0-9a-f]+: f5[ ]+cmc[ ]+
+ *[0-9a-f]+: f6 90 90 90 90 90[ ]+notb[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: f7 90 90 90 90 90[ ]+notl[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: f8[ ]+clc[ ]+
+ *[0-9a-f]+: f9[ ]+stc[ ]+
+ *[0-9a-f]+: fa[ ]+cli[ ]+
+ *[0-9a-f]+: fb[ ]+sti[ ]+
+ *[0-9a-f]+: fc[ ]+cld[ ]+
+ *[0-9a-f]+: fd[ ]+std[ ]+
+ *[0-9a-f]+: ff 90 90 90 90 90[ ]+calll[ ]+\*-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 00 90 90 90 90 90[ ]+lldt[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 01 90 90 90 90 90[ ]+lgdtl[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 02 90 90 90 90 90[ ]+larl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 03 90 90 90 90 90[ ]+lsll[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 06[ ]+clts[ ]+
+ *[0-9a-f]+: 0f 08[ ]+invd[ ]+
+ *[0-9a-f]+: 0f 09[ ]+wbinvd
+ *[0-9a-f]+: 0f 0b[ ]+ud2a[ ]+
+ *[0-9a-f]+: 0f 20 d0[ ]+movl[ ]+%cr2,%eax
+ *[0-9a-f]+: 0f 21 d0[ ]+movl[ ]+%db2,%eax
+ *[0-9a-f]+: 0f 22 d0[ ]+movl[ ]+%eax,%cr2
+ *[0-9a-f]+: 0f 23 d0[ ]+movl[ ]+%eax,%db2
+ *[0-9a-f]+: 0f 24 d0[ ]+movl[ ]+%tr2,%eax
+ *[0-9a-f]+: 0f 26 d0[ ]+movl[ ]+%eax,%tr2
+ *[0-9a-f]+: 0f 30[ ]+wrmsr[ ]+
+ *[0-9a-f]+: 0f 31[ ]+rdtsc[ ]+
+ *[0-9a-f]+: 0f 32[ ]+rdmsr[ ]+
+ *[0-9a-f]+: 0f 33[ ]+rdpmc[ ]+
+ *[0-9a-f]+: 0f 40 90 90 90 90 90[ ]+cmovo[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 41 90 90 90 90 90[ ]+cmovno -0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 42 90 90 90 90 90[ ]+cmovb[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 43 90 90 90 90 90[ ]+cmovae -0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 44 90 90 90 90 90[ ]+cmove[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 45 90 90 90 90 90[ ]+cmovne -0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 46 90 90 90 90 90[ ]+cmovbe -0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 47 90 90 90 90 90[ ]+cmova[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 48 90 90 90 90 90[ ]+cmovs[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 49 90 90 90 90 90[ ]+cmovns -0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 4a 90 90 90 90 90[ ]+cmovp[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 4b 90 90 90 90 90[ ]+cmovnp -0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 4c 90 90 90 90 90[ ]+cmovl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 4d 90 90 90 90 90[ ]+cmovge -0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 4e 90 90 90 90 90[ ]+cmovle -0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 4f 90 90 90 90 90[ ]+cmovg[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f 60 90 90 90 90 90[ ]+punpcklbw -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 61 90 90 90 90 90[ ]+punpcklwd -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 62 90 90 90 90 90[ ]+punpckldq -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 63 90 90 90 90 90[ ]+packsswb -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 64 90 90 90 90 90[ ]+pcmpgtb -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 65 90 90 90 90 90[ ]+pcmpgtw -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 66 90 90 90 90 90[ ]+pcmpgtd -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 67 90 90 90 90 90[ ]+packuswb -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 68 90 90 90 90 90[ ]+punpckhbw -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 69 90 90 90 90 90[ ]+punpckhwd -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 6a 90 90 90 90 90[ ]+punpckhdq -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 6b 90 90 90 90 90[ ]+packssdw -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 6e 90 90 90 90 90[ ]+movd[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 6f 90 90 90 90 90[ ]+movq[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 71 d0 90[ ]+psrlw[ ]+\$0x90,%mm0
+ *[0-9a-f]+: 0f 72 d0 90[ ]+psrld[ ]+\$0x90,%mm0
+ *[0-9a-f]+: 0f 73 d0 90[ ]+psrlq[ ]+\$0x90,%mm0
+ *[0-9a-f]+: 0f 74 90 90 90 90 90[ ]+pcmpeqb -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 75 90 90 90 90 90[ ]+pcmpeqw -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 76 90 90 90 90 90[ ]+pcmpeqd -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f 77[ ]+emms[ ]+
+ *[0-9a-f]+: 0f 7e 90 90 90 90 90[ ]+movd[ ]+%mm2,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 7f 90 90 90 90 90[ ]+movq[ ]+%mm2,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 80 90 90 90 90[ ]+jo[ ]+909094e2 <foo\+0x909094e2>
+ *[0-9a-f]+: 0f 81 90 90 90 90[ ]+jno[ ]+909094e8 <foo\+0x909094e8>
+ *[0-9a-f]+: 0f 82 90 90 90 90[ ]+jb[ ]+909094ee <foo\+0x909094ee>
+ *[0-9a-f]+: 0f 83 90 90 90 90[ ]+jae[ ]+909094f4 <foo\+0x909094f4>
+ *[0-9a-f]+: 0f 84 90 90 90 90[ ]+je[ ]+909094fa <foo\+0x909094fa>
+ *[0-9a-f]+: 0f 85 90 90 90 90[ ]+jne[ ]+90909500 <foo\+0x90909500>
+ *[0-9a-f]+: 0f 86 90 90 90 90[ ]+jbe[ ]+90909506 <foo\+0x90909506>
+ *[0-9a-f]+: 0f 87 90 90 90 90[ ]+ja[ ]+9090950c <foo\+0x9090950c>
+ *[0-9a-f]+: 0f 88 90 90 90 90[ ]+js[ ]+90909512 <foo\+0x90909512>
+ *[0-9a-f]+: 0f 89 90 90 90 90[ ]+jns[ ]+90909518 <foo\+0x90909518>
+ *[0-9a-f]+: 0f 8a 90 90 90 90[ ]+jp[ ]+9090951e <foo\+0x9090951e>
+ *[0-9a-f]+: 0f 8b 90 90 90 90[ ]+jnp[ ]+90909524 <foo\+0x90909524>
+ *[0-9a-f]+: 0f 8c 90 90 90 90[ ]+jl[ ]+9090952a <foo\+0x9090952a>
+ *[0-9a-f]+: 0f 8d 90 90 90 90[ ]+jge[ ]+90909530 <foo\+0x90909530>
+ *[0-9a-f]+: 0f 8e 90 90 90 90[ ]+jle[ ]+90909536 <foo\+0x90909536>
+ *[0-9a-f]+: 0f 8f 90 90 90 90[ ]+jg[ ]+9090953c <foo\+0x9090953c>
+ *[0-9a-f]+: 0f 90 80 90 90 90 90[ ]+seto[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 91 80 90 90 90 90[ ]+setno[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 92 80 90 90 90 90[ ]+setb[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 93 80 90 90 90 90[ ]+setae[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 94 80 90 90 90 90[ ]+sete[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 95 80 90 90 90 90[ ]+setne[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 96 80 90 90 90 90[ ]+setbe[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 97 80 90 90 90 90[ ]+seta[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 98 80 90 90 90 90[ ]+sets[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 99 80 90 90 90 90[ ]+setns[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 9a 80 90 90 90 90[ ]+setp[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 9b 80 90 90 90 90[ ]+setnp[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 9c 80 90 90 90 90[ ]+setl[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 9d 80 90 90 90 90[ ]+setge[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 9e 80 90 90 90 90[ ]+setle[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f 9f 80 90 90 90 90[ ]+setg[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f a0[ ]+pushl[ ]+%fs
+ *[0-9a-f]+: 0f a1[ ]+popl[ ]+%fs
+ *[0-9a-f]+: 0f a2[ ]+cpuid[ ]+
+ *[0-9a-f]+: 0f a3 90 90 90 90 90[ ]+btl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f a4 90 90 90 90 90 90[ ]+shldl[ ]+\$0x90,%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f a5 90 90 90 90 90[ ]+shldl[ ]+%cl,%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f a8[ ]+pushl[ ]+%gs
+ *[0-9a-f]+: 0f a9[ ]+popl[ ]+%gs
+ *[0-9a-f]+: 0f aa[ ]+rsm[ ]+
+ *[0-9a-f]+: 0f ab 90 90 90 90 90[ ]+btsl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f ac 90 90 90 90 90 90[ ]+shrdl[ ]+\$0x90,%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f ad 90 90 90 90 90[ ]+shrdl[ ]+%cl,%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f af 90 90 90 90 90[ ]+imull[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f b0 90 90 90 90 90[ ]+cmpxchgb %dl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f b1 90 90 90 90 90[ ]+cmpxchgl %edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f b2 90 90 90 90 90[ ]+lssl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f b3 90 90 90 90 90[ ]+btrl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f b4 90 90 90 90 90[ ]+lfsl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f b5 90 90 90 90 90[ ]+lgsl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f b6 90 90 90 90 90[ ]+movzbl -0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f b7 90 90 90 90 90[ ]+movzwl -0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f b9[ ]+ud2b[ ]+
+ *[0-9a-f]+: 0f bb 90 90 90 90 90[ ]+btcl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f bc 90 90 90 90 90[ ]+bsfl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f bd 90 90 90 90 90[ ]+bsrl[ ]+-0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f be 90 90 90 90 90[ ]+movsbl -0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f bf 90 90 90 90 90[ ]+movswl -0x6f6f6f70\(%eax\),%edx
+ *[0-9a-f]+: 0f c0 90 90 90 90 90[ ]+xaddb[ ]+%dl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f c1 90 90 90 90 90[ ]+xaddl[ ]+%edx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 0f c8[ ]+bswap[ ]+%eax
+ *[0-9a-f]+: 0f c9[ ]+bswap[ ]+%ecx
+ *[0-9a-f]+: 0f ca[ ]+bswap[ ]+%edx
+ *[0-9a-f]+: 0f cb[ ]+bswap[ ]+%ebx
+ *[0-9a-f]+: 0f cc[ ]+bswap[ ]+%esp
+ *[0-9a-f]+: 0f cd[ ]+bswap[ ]+%ebp
+ *[0-9a-f]+: 0f ce[ ]+bswap[ ]+%esi
+ *[0-9a-f]+: 0f cf[ ]+bswap[ ]+%edi
+ *[0-9a-f]+: 0f d1 90 90 90 90 90[ ]+psrlw[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f d2 90 90 90 90 90[ ]+psrld[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f d3 90 90 90 90 90[ ]+psrlq[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f d5 90 90 90 90 90[ ]+pmullw -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f d8 90 90 90 90 90[ ]+psubusb -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f d9 90 90 90 90 90[ ]+psubusw -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f db 90 90 90 90 90[ ]+pand[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f dc 90 90 90 90 90[ ]+paddusb -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f dd 90 90 90 90 90[ ]+paddusw -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f df 90 90 90 90 90[ ]+pandn[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f e1 90 90 90 90 90[ ]+psraw[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f e2 90 90 90 90 90[ ]+psrad[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f e5 90 90 90 90 90[ ]+pmulhw -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f e8 90 90 90 90 90[ ]+psubsb -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f e9 90 90 90 90 90[ ]+psubsw -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f eb 90 90 90 90 90[ ]+por[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f ec 90 90 90 90 90[ ]+paddsb -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f ed 90 90 90 90 90[ ]+paddsw -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f ef 90 90 90 90 90[ ]+pxor[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f f1 90 90 90 90 90[ ]+psllw[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f f2 90 90 90 90 90[ ]+pslld[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f f3 90 90 90 90 90[ ]+psllq[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f f5 90 90 90 90 90[ ]+pmaddwd -0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f f8 90 90 90 90 90[ ]+psubb[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f f9 90 90 90 90 90[ ]+psubw[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f fa 90 90 90 90 90[ ]+psubd[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f fc 90 90 90 90 90[ ]+paddb[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f fd 90 90 90 90 90[ ]+paddw[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 0f fe 90 90 90 90 90[ ]+paddd[ ]+-0x6f6f6f70\(%eax\),%mm2
+ *[0-9a-f]+: 66 01 90 90 90 90 90[ ]+addw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 03 90 90 90 90 90[ ]+addw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 05 90 90[ ]+addw[ ]+\$0x9090,%ax
+ *[0-9a-f]+: 66 06[ ]+pushw[ ]+%es
+ *[0-9a-f]+: 66 07[ ]+popw[ ]+%es
+ *[0-9a-f]+: 66 09 90 90 90 90 90[ ]+orw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 0b 90 90 90 90 90[ ]+orw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0d 90 90[ ]+orw[ ]+\$0x9090,%ax
+ *[0-9a-f]+: 66 0e[ ]+pushw[ ]+%cs
+ *[0-9a-f]+: 66 11 90 90 90 90 90[ ]+adcw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 13 90 90 90 90 90[ ]+adcw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 15 90 90[ ]+adcw[ ]+\$0x9090,%ax
+ *[0-9a-f]+: 66 16[ ]+pushw[ ]+%ss
+ *[0-9a-f]+: 66 17[ ]+popw[ ]+%ss
+ *[0-9a-f]+: 66 19 90 90 90 90 90[ ]+sbbw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 1b 90 90 90 90 90[ ]+sbbw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 1d 90 90[ ]+sbbw[ ]+\$0x9090,%ax
+ *[0-9a-f]+: 66 1e[ ]+pushw[ ]+%ds
+ *[0-9a-f]+: 66 1f[ ]+popw[ ]+%ds
+ *[0-9a-f]+: 66 21 90 90 90 90 90[ ]+andw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 23 90 90 90 90 90[ ]+andw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 25 90 90[ ]+andw[ ]+\$0x9090,%ax
+ *[0-9a-f]+: 66 29 90 90 90 90 90[ ]+subw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 2b 90 90 90 90 90[ ]+subw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 2d 90 90[ ]+subw[ ]+\$0x9090,%ax
+ *[0-9a-f]+: 66 31 90 90 90 90 90[ ]+xorw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 33 90 90 90 90 90[ ]+xorw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 35 90 90[ ]+xorw[ ]+\$0x9090,%ax
+ *[0-9a-f]+: 66 39 90 90 90 90 90[ ]+cmpw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 3b 90 90 90 90 90[ ]+cmpw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 3d 90 90[ ]+cmpw[ ]+\$0x9090,%ax
+ *[0-9a-f]+: 66 40[ ]+incw[ ]+%ax
+ *[0-9a-f]+: 66 41[ ]+incw[ ]+%cx
+ *[0-9a-f]+: 66 42[ ]+incw[ ]+%dx
+ *[0-9a-f]+: 66 43[ ]+incw[ ]+%bx
+ *[0-9a-f]+: 66 44[ ]+incw[ ]+%sp
+ *[0-9a-f]+: 66 45[ ]+incw[ ]+%bp
+ *[0-9a-f]+: 66 46[ ]+incw[ ]+%si
+ *[0-9a-f]+: 66 47[ ]+incw[ ]+%di
+ *[0-9a-f]+: 66 48[ ]+decw[ ]+%ax
+ *[0-9a-f]+: 66 49[ ]+decw[ ]+%cx
+ *[0-9a-f]+: 66 4a[ ]+decw[ ]+%dx
+ *[0-9a-f]+: 66 4b[ ]+decw[ ]+%bx
+ *[0-9a-f]+: 66 4c[ ]+decw[ ]+%sp
+ *[0-9a-f]+: 66 4d[ ]+decw[ ]+%bp
+ *[0-9a-f]+: 66 4e[ ]+decw[ ]+%si
+ *[0-9a-f]+: 66 4f[ ]+decw[ ]+%di
+ *[0-9a-f]+: 66 50[ ]+pushw[ ]+%ax
+ *[0-9a-f]+: 66 51[ ]+pushw[ ]+%cx
+ *[0-9a-f]+: 66 52[ ]+pushw[ ]+%dx
+ *[0-9a-f]+: 66 53[ ]+pushw[ ]+%bx
+ *[0-9a-f]+: 66 54[ ]+pushw[ ]+%sp
+ *[0-9a-f]+: 66 55[ ]+pushw[ ]+%bp
+ *[0-9a-f]+: 66 56[ ]+pushw[ ]+%si
+ *[0-9a-f]+: 66 57[ ]+pushw[ ]+%di
+ *[0-9a-f]+: 66 58[ ]+popw[ ]+%ax
+ *[0-9a-f]+: 66 59[ ]+popw[ ]+%cx
+ *[0-9a-f]+: 66 5a[ ]+popw[ ]+%dx
+ *[0-9a-f]+: 66 5b[ ]+popw[ ]+%bx
+ *[0-9a-f]+: 66 5c[ ]+popw[ ]+%sp
+ *[0-9a-f]+: 66 5d[ ]+popw[ ]+%bp
+ *[0-9a-f]+: 66 5e[ ]+popw[ ]+%si
+ *[0-9a-f]+: 66 5f[ ]+popw[ ]+%di
+ *[0-9a-f]+: 66 60[ ]+pushaw
+ *[0-9a-f]+: 66 61[ ]+popaw[ ]+
+ *[0-9a-f]+: 66 62 90 90 90 90 90[ ]+boundw %dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 68 90 90[ ]+pushw[ ]+\$0x9090
+ *[0-9a-f]+: 66 69 90 90 90 90 90 90 90[ ]+imulw[ ]+\$0x9090,-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 6a 90[ ]+pushw[ ]+\$0xffffff90
+ *[0-9a-f]+: 66 6b 90 90 90 90 90 90[ ]+imulw[ ]+\$0xffffff90,-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 6d[ ]+insw[ ]+\(%dx\),%es:\(%edi\)
+ *[0-9a-f]+: 66 6f[ ]+outsw[ ]+%ds:\(%esi\),\(%dx\)
+ *[0-9a-f]+: 66 81 90 90 90 90 90 90 90[ ]+adcw[ ]+\$0x9090,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 83 90 90 90 90 90 90[ ]+adcw[ ]+\$0xffffff90,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 85 90 90 90 90 90[ ]+testw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 87 90 90 90 90 90[ ]+xchgw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 89 90 90 90 90 90[ ]+movw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 8b 90 90 90 90 90[ ]+movw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 8c 90 90 90 90 90[ ]+movw[ ]+%ss,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 8d 90 90 90 90 90[ ]+leaw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 8f 80 90 90 90 90[ ]+popw[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 91[ ]+xchgw[ ]+%ax,%cx
+ *[0-9a-f]+: 66 92[ ]+xchgw[ ]+%ax,%dx
+ *[0-9a-f]+: 66 93[ ]+xchgw[ ]+%ax,%bx
+ *[0-9a-f]+: 66 94[ ]+xchgw[ ]+%ax,%sp
+ *[0-9a-f]+: 66 95[ ]+xchgw[ ]+%ax,%bp
+ *[0-9a-f]+: 66 96[ ]+xchgw[ ]+%ax,%si
+ *[0-9a-f]+: 66 97[ ]+xchgw[ ]+%ax,%di
+ *[0-9a-f]+: 66 98[ ]+cbtw[ ]+
+ *[0-9a-f]+: 66 99[ ]+cwtd[ ]+
+ *[0-9a-f]+: 66 9a 90 90 90 90[ ]+lcallw \$0x9090,\$0x9090
+ *[0-9a-f]+: 66 9c[ ]+pushfw
+ *[0-9a-f]+: 66 9d[ ]+popfw[ ]+
+ *[0-9a-f]+: 66 a1 90 90 90 90[ ]+movw[ ]+0x90909090,%ax
+ *[0-9a-f]+: 66 a3 90 90 90 90[ ]+movw[ ]+%ax,0x90909090
+ *[0-9a-f]+: 66 a5[ ]+movsw[ ]+%ds:\(%esi\),%es:\(%edi\)
+ *[0-9a-f]+: 66 a7[ ]+cmpsw[ ]+%es:\(%edi\),%ds:\(%esi\)
+ *[0-9a-f]+: 66 a9 90 90[ ]+testw[ ]+\$0x9090,%ax
+ *[0-9a-f]+: 66 ab[ ]+stosw[ ]+%ax,%es:\(%edi\)
+ *[0-9a-f]+: 66 ad[ ]+lodsw[ ]+%ds:\(%esi\),%ax
+ *[0-9a-f]+: 66 af[ ]+scasw[ ]+%es:\(%edi\),%ax
+ *[0-9a-f]+: 66 b8 90 90[ ]+movw[ ]+\$0x9090,%ax
+ *[0-9a-f]+: 66 b9 90 90[ ]+movw[ ]+\$0x9090,%cx
+ *[0-9a-f]+: 66 ba 90 90[ ]+movw[ ]+\$0x9090,%dx
+ *[0-9a-f]+: 66 bb 90 90[ ]+movw[ ]+\$0x9090,%bx
+ *[0-9a-f]+: 66 bc 90 90[ ]+movw[ ]+\$0x9090,%sp
+ *[0-9a-f]+: 66 bd 90 90[ ]+movw[ ]+\$0x9090,%bp
+ *[0-9a-f]+: 66 be 90 90[ ]+movw[ ]+\$0x9090,%si
+ *[0-9a-f]+: 66 bf 90 90[ ]+movw[ ]+\$0x9090,%di
+ *[0-9a-f]+: 66 c1 90 90 90 90 90 90[ ]+rclw[ ]+\$0x90,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 c2 90 90[ ]+retw[ ]+\$0x9090
+ *[0-9a-f]+: 66 c3[ ]+retw[ ]+
+ *[0-9a-f]+: 66 c4 90 90 90 90 90[ ]+lesw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 c5 90 90 90 90 90[ ]+ldsw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 c7 80 90 90 90 90 90 90[ ]+movw[ ]+\$0x9090,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 c8 90 90 90[ ]+enterw \$0x9090,\$0x90
+ *[0-9a-f]+: 66 c9[ ]+leavew
+ *[0-9a-f]+: 66 ca 90 90[ ]+lretw[ ]+\$0x9090
+ *[0-9a-f]+: 66 cb[ ]+lretw[ ]+
+ *[0-9a-f]+: 66 cf[ ]+iretw[ ]+
+ *[0-9a-f]+: 66 d1 90 90 90 90 90[ ]+rclw[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 d3 90 90 90 90 90[ ]+rclw[ ]+%cl,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 e5 90[ ]+inw[ ]+\$0x90,%ax
+ *[0-9a-f]+: 66 e7 90[ ]+outw[ ]+%ax,\$0x90
+ *[0-9a-f]+: 66 e8 8f 90[ ]+callw[ ]+(0x)?9918.*
+ *[0-9a-f]+: 66 ea 90 90 90 90[ ]+ljmpw[ ]+\$0x9090,\$0x9090
+ *[0-9a-f]+: 66 ed[ ]+inw[ ]+\(%dx\),%ax
+ *[0-9a-f]+: 66 ef[ ]+outw[ ]+%ax,\(%dx\)
+ *[0-9a-f]+: 66 f7 90 90 90 90 90[ ]+notw[ ]+-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 ff 90 90 90 90 90[ ]+callw[ ]+\*-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 0f 02 90 90 90 90 90[ ]+larw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 03 90 90 90 90 90[ ]+lslw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 40 90 90 90 90 90[ ]+cmovo[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 41 90 90 90 90 90[ ]+cmovno -0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 42 90 90 90 90 90[ ]+cmovb[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 43 90 90 90 90 90[ ]+cmovae -0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 44 90 90 90 90 90[ ]+cmove[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 45 90 90 90 90 90[ ]+cmovne -0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 46 90 90 90 90 90[ ]+cmovbe -0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 47 90 90 90 90 90[ ]+cmova[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 48 90 90 90 90 90[ ]+cmovs[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 49 90 90 90 90 90[ ]+cmovns -0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 4a 90 90 90 90 90[ ]+cmovp[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 4b 90 90 90 90 90[ ]+cmovnp -0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 4c 90 90 90 90 90[ ]+cmovl[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 4d 90 90 90 90 90[ ]+cmovge -0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 4e 90 90 90 90 90[ ]+cmovle -0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f 4f 90 90 90 90 90[ ]+cmovg[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f a0[ ]+pushw[ ]+%fs
+ *[0-9a-f]+: 66 0f a1[ ]+popw[ ]+%fs
+ *[0-9a-f]+: 66 0f a3 90 90 90 90 90[ ]+btw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 0f a4 90 90 90 90 90 90[ ]+shldw[ ]+\$0x90,%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 0f a5 90 90 90 90 90[ ]+shldw[ ]+%cl,%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 0f a8[ ]+pushw[ ]+%gs
+ *[0-9a-f]+: 66 0f a9[ ]+popw[ ]+%gs
+ *[0-9a-f]+: 66 0f ab 90 90 90 90 90[ ]+btsw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 0f ac 90 90 90 90 90 90[ ]+shrdw[ ]+\$0x90,%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 0f ad 90 90 90 90 90[ ]+shrdw[ ]+%cl,%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 0f af 90 90 90 90 90[ ]+imulw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f b1 90 90 90 90 90[ ]+cmpxchgw %dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 0f b2 90 90 90 90 90[ ]+lssw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f b3 90 90 90 90 90[ ]+btrw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 0f b4 90 90 90 90 90[ ]+lfsw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f b5 90 90 90 90 90[ ]+lgsw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f b6 90 90 90 90 90[ ]+movzbw -0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f bb 90 90 90 90 90[ ]+btcw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 0f bc 90 90 90 90 90[ ]+bsfw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f bd 90 90 90 90 90[ ]+bsrw[ ]+-0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f be 90 90 90 90 90[ ]+movsbw -0x6f6f6f70\(%eax\),%dx
+ *[0-9a-f]+: 66 0f c1 90 90 90 90 90[ ]+xaddw[ ]+%dx,-0x6f6f6f70\(%eax\)
+ *[0-9a-f]+: 66 90[ ]+xchgw[ ]+%ax,%ax
+ *[0-9a-f]+: 0f 00 c0[ ]+sldtl[ ]+%eax
+ *[0-9a-f]+: 66 0f 00 c0[ ]+sldtw[ ]+%ax
+ *[0-9a-f]+: 0f 00 00[ ]+sldtw[ ]+\(%eax\)
+ *[0-9a-f]+: 0f 01 e0[ ]+smswl[ ]+%eax
+ *[0-9a-f]+: 66 0f 01 e0[ ]+smsww[ ]+%ax
+ *[0-9a-f]+: 0f 01 20[ ]+smsww[ ]+\(%eax\)
+ *[0-9a-f]+: 0f 00 c8[ ]+strl[ ]+%eax
+ *[0-9a-f]+: 66 0f 00 c8[ ]+strw[ ]+%ax
+ *[0-9a-f]+: 0f 00 08[ ]+strw[ ]+\(%eax\)
+ *[0-9a-f]+: 0f ad d0 [ ]*shrdl[ ]+%cl,%edx,%eax
+ *[0-9a-f]+: 0f a5 d0 [ ]*shldl[ ]+%cl,%edx,%eax
+ *[0-9a-f]+: 85 c3 [ ]*testl[ ]+%eax,%ebx
+ *[0-9a-f]+: 85 d8 [ ]*testl[ ]+%ebx,%eax
+ *[0-9a-f]+: 85 18 [ ]*testl[ ]+%ebx,\(%eax\)
+#pass
diff --git a/gas/testsuite/gas/i386/opcode.d b/gas/testsuite/gas/i386/opcode.d
index 808ddc5371a4..5683895d0dc3 100644
--- a/gas/testsuite/gas/i386/opcode.d
+++ b/gas/testsuite/gas/i386/opcode.d
@@ -1,68 +1,68 @@
#as: -J
#objdump: -dw
-#name: i386 intel
+#name: i386 opcodes
.*: +file format .*
Disassembly of section .text:
0+000 <foo>:
- 0: 00 90 90 90 90 90 [ ]*add %dl,0x90909090\(%eax\)
- 6: 01 90 90 90 90 90 [ ]*add %edx,0x90909090\(%eax\)
- c: 02 90 90 90 90 90 [ ]*add 0x90909090\(%eax\),%dl
- 12: 03 90 90 90 90 90 [ ]*add 0x90909090\(%eax\),%edx
+ 0: 00 90 90 90 90 90 [ ]*add %dl,-0x6f6f6f70\(%eax\)
+ 6: 01 90 90 90 90 90 [ ]*add %edx,-0x6f6f6f70\(%eax\)
+ c: 02 90 90 90 90 90 [ ]*add -0x6f6f6f70\(%eax\),%dl
+ 12: 03 90 90 90 90 90 [ ]*add -0x6f6f6f70\(%eax\),%edx
18: 04 90 [ ]*add \$0x90,%al
1a: 05 90 90 90 90 [ ]*add \$0x90909090,%eax
1f: 06 [ ]*push %es
20: 07 [ ]*pop %es
- 21: 08 90 90 90 90 90 [ ]*or %dl,0x90909090\(%eax\)
- 27: 09 90 90 90 90 90 [ ]*or %edx,0x90909090\(%eax\)
- 2d: 0a 90 90 90 90 90 [ ]*or 0x90909090\(%eax\),%dl
- 33: 0b 90 90 90 90 90 [ ]*or 0x90909090\(%eax\),%edx
+ 21: 08 90 90 90 90 90 [ ]*or %dl,-0x6f6f6f70\(%eax\)
+ 27: 09 90 90 90 90 90 [ ]*or %edx,-0x6f6f6f70\(%eax\)
+ 2d: 0a 90 90 90 90 90 [ ]*or -0x6f6f6f70\(%eax\),%dl
+ 33: 0b 90 90 90 90 90 [ ]*or -0x6f6f6f70\(%eax\),%edx
39: 0c 90 [ ]*or \$0x90,%al
3b: 0d 90 90 90 90 [ ]*or \$0x90909090,%eax
40: 0e [ ]*push %cs
- 41: 10 90 90 90 90 90 [ ]*adc %dl,0x90909090\(%eax\)
- 47: 11 90 90 90 90 90 [ ]*adc %edx,0x90909090\(%eax\)
- 4d: 12 90 90 90 90 90 [ ]*adc 0x90909090\(%eax\),%dl
- 53: 13 90 90 90 90 90 [ ]*adc 0x90909090\(%eax\),%edx
+ 41: 10 90 90 90 90 90 [ ]*adc %dl,-0x6f6f6f70\(%eax\)
+ 47: 11 90 90 90 90 90 [ ]*adc %edx,-0x6f6f6f70\(%eax\)
+ 4d: 12 90 90 90 90 90 [ ]*adc -0x6f6f6f70\(%eax\),%dl
+ 53: 13 90 90 90 90 90 [ ]*adc -0x6f6f6f70\(%eax\),%edx
59: 14 90 [ ]*adc \$0x90,%al
5b: 15 90 90 90 90 [ ]*adc \$0x90909090,%eax
60: 16 [ ]*push %ss
61: 17 [ ]*pop %ss
- 62: 18 90 90 90 90 90 [ ]*sbb %dl,0x90909090\(%eax\)
- 68: 19 90 90 90 90 90 [ ]*sbb %edx,0x90909090\(%eax\)
- 6e: 1a 90 90 90 90 90 [ ]*sbb 0x90909090\(%eax\),%dl
- 74: 1b 90 90 90 90 90 [ ]*sbb 0x90909090\(%eax\),%edx
+ 62: 18 90 90 90 90 90 [ ]*sbb %dl,-0x6f6f6f70\(%eax\)
+ 68: 19 90 90 90 90 90 [ ]*sbb %edx,-0x6f6f6f70\(%eax\)
+ 6e: 1a 90 90 90 90 90 [ ]*sbb -0x6f6f6f70\(%eax\),%dl
+ 74: 1b 90 90 90 90 90 [ ]*sbb -0x6f6f6f70\(%eax\),%edx
7a: 1c 90 [ ]*sbb \$0x90,%al
7c: 1d 90 90 90 90 [ ]*sbb \$0x90909090,%eax
81: 1e [ ]*push %ds
82: 1f [ ]*pop %ds
- 83: 20 90 90 90 90 90 [ ]*and %dl,0x90909090\(%eax\)
- 89: 21 90 90 90 90 90 [ ]*and %edx,0x90909090\(%eax\)
- 8f: 22 90 90 90 90 90 [ ]*and 0x90909090\(%eax\),%dl
- 95: 23 90 90 90 90 90 [ ]*and 0x90909090\(%eax\),%edx
+ 83: 20 90 90 90 90 90 [ ]*and %dl,-0x6f6f6f70\(%eax\)
+ 89: 21 90 90 90 90 90 [ ]*and %edx,-0x6f6f6f70\(%eax\)
+ 8f: 22 90 90 90 90 90 [ ]*and -0x6f6f6f70\(%eax\),%dl
+ 95: 23 90 90 90 90 90 [ ]*and -0x6f6f6f70\(%eax\),%edx
9b: 24 90 [ ]*and \$0x90,%al
9d: 25 90 90 90 90 [ ]*and \$0x90909090,%eax
a2: 27 [ ]*daa
- a3: 28 90 90 90 90 90 [ ]*sub %dl,0x90909090\(%eax\)
- a9: 29 90 90 90 90 90 [ ]*sub %edx,0x90909090\(%eax\)
- af: 2a 90 90 90 90 90 [ ]*sub 0x90909090\(%eax\),%dl
- b5: 2b 90 90 90 90 90 [ ]*sub 0x90909090\(%eax\),%edx
+ a3: 28 90 90 90 90 90 [ ]*sub %dl,-0x6f6f6f70\(%eax\)
+ a9: 29 90 90 90 90 90 [ ]*sub %edx,-0x6f6f6f70\(%eax\)
+ af: 2a 90 90 90 90 90 [ ]*sub -0x6f6f6f70\(%eax\),%dl
+ b5: 2b 90 90 90 90 90 [ ]*sub -0x6f6f6f70\(%eax\),%edx
bb: 2c 90 [ ]*sub \$0x90,%al
bd: 2d 90 90 90 90 [ ]*sub \$0x90909090,%eax
c2: 2f [ ]*das
- c3: 30 90 90 90 90 90 [ ]*xor %dl,0x90909090\(%eax\)
- c9: 31 90 90 90 90 90 [ ]*xor %edx,0x90909090\(%eax\)
- cf: 32 90 90 90 90 90 [ ]*xor 0x90909090\(%eax\),%dl
- d5: 33 90 90 90 90 90 [ ]*xor 0x90909090\(%eax\),%edx
+ c3: 30 90 90 90 90 90 [ ]*xor %dl,-0x6f6f6f70\(%eax\)
+ c9: 31 90 90 90 90 90 [ ]*xor %edx,-0x6f6f6f70\(%eax\)
+ cf: 32 90 90 90 90 90 [ ]*xor -0x6f6f6f70\(%eax\),%dl
+ d5: 33 90 90 90 90 90 [ ]*xor -0x6f6f6f70\(%eax\),%edx
db: 34 90 [ ]*xor \$0x90,%al
dd: 35 90 90 90 90 [ ]*xor \$0x90909090,%eax
e2: 37 [ ]*aaa
- e3: 38 90 90 90 90 90 [ ]*cmp %dl,0x90909090\(%eax\)
- e9: 39 90 90 90 90 90 [ ]*cmp %edx,0x90909090\(%eax\)
- ef: 3a 90 90 90 90 90 [ ]*cmp 0x90909090\(%eax\),%dl
- f5: 3b 90 90 90 90 90 [ ]*cmp 0x90909090\(%eax\),%edx
+ e3: 38 90 90 90 90 90 [ ]*cmp %dl,-0x6f6f6f70\(%eax\)
+ e9: 39 90 90 90 90 90 [ ]*cmp %edx,-0x6f6f6f70\(%eax\)
+ ef: 3a 90 90 90 90 90 [ ]*cmp -0x6f6f6f70\(%eax\),%dl
+ f5: 3b 90 90 90 90 90 [ ]*cmp -0x6f6f6f70\(%eax\),%edx
fb: 3c 90 [ ]*cmp \$0x90,%al
fd: 3d 90 90 90 90 [ ]*cmp \$0x90909090,%eax
102: 3f [ ]*aas
@@ -100,12 +100,12 @@ Disassembly of section .text:
122: 5f [ ]*pop %edi
123: 60 [ ]*pusha
124: 61 [ ]*popa
- 125: 62 90 90 90 90 90 [ ]*bound %edx,0x90909090\(%eax\)
- 12b: 63 90 90 90 90 90 [ ]*arpl %dx,0x90909090\(%eax\)
+ 125: 62 90 90 90 90 90 [ ]*bound %edx,-0x6f6f6f70\(%eax\)
+ 12b: 63 90 90 90 90 90 [ ]*arpl %dx,-0x6f6f6f70\(%eax\)
131: 68 90 90 90 90 [ ]*push \$0x90909090
- 136: 69 90 90 90 90 90 90 90 90 90 [ ]*imul \$0x90909090,0x90909090\(%eax\),%edx
+ 136: 69 90 90 90 90 90 90 90 90 90 [ ]*imul \$0x90909090,-0x6f6f6f70\(%eax\),%edx
140: 6a 90 [ ]*push \$0xffffff90
- 142: 6b 90 90 90 90 90 90 [ ]*imul \$0xffffff90,0x90909090\(%eax\),%edx
+ 142: 6b 90 90 90 90 90 90 [ ]*imul \$0xffffff90,-0x6f6f6f70\(%eax\),%edx
149: 6c [ ]*insb \(%dx\),%es:\(%edi\)
14a: 6d [ ]*insl \(%dx\),%es:\(%edi\)
14b: 6e [ ]*outsb %ds:\(%esi\),\(%dx\)
@@ -126,21 +126,21 @@ Disassembly of section .text:
167: 7d 90 [ ]*jge (0x)?f9.*
169: 7e 90 [ ]*jle (0x)?fb.*
16b: 7f 90 [ ]*jg (0x)?fd.*
- 16d: 80 90 90 90 90 90 90 [ ]*adcb \$0x90,0x90909090\(%eax\)
- 174: 81 90 90 90 90 90 90 90 90 90 [ ]*adcl \$0x90909090,0x90909090\(%eax\)
- 17e: 83 90 90 90 90 90 90 [ ]*adcl \$0xffffff90,0x90909090\(%eax\)
- 185: 84 90 90 90 90 90 [ ]*test %dl,0x90909090\(%eax\)
- 18b: 85 90 90 90 90 90 [ ]*test %edx,0x90909090\(%eax\)
- 191: 86 90 90 90 90 90 [ ]*xchg %dl,0x90909090\(%eax\)
- 197: 87 90 90 90 90 90 [ ]*xchg %edx,0x90909090\(%eax\)
- 19d: 88 90 90 90 90 90 [ ]*mov %dl,0x90909090\(%eax\)
- 1a3: 89 90 90 90 90 90 [ ]*mov %edx,0x90909090\(%eax\)
- 1a9: 8a 90 90 90 90 90 [ ]*mov 0x90909090\(%eax\),%dl
- 1af: 8b 90 90 90 90 90 [ ]*mov 0x90909090\(%eax\),%edx
- 1b5: 8c 90 90 90 90 90 [ ]*movw %ss,0x90909090\(%eax\)
- 1bb: 8d 90 90 90 90 90 [ ]*lea 0x90909090\(%eax\),%edx
- 1c1: 8e 90 90 90 90 90 [ ]*movw 0x90909090\(%eax\),%ss
- 1c7: 8f 80 90 90 90 90 [ ]*popl 0x90909090\(%eax\)
+ 16d: 80 90 90 90 90 90 90 [ ]*adcb \$0x90,-0x6f6f6f70\(%eax\)
+ 174: 81 90 90 90 90 90 90 90 90 90 [ ]*adcl \$0x90909090,-0x6f6f6f70\(%eax\)
+ 17e: 83 90 90 90 90 90 90 [ ]*adcl \$0xffffff90,-0x6f6f6f70\(%eax\)
+ 185: 84 90 90 90 90 90 [ ]*test %dl,-0x6f6f6f70\(%eax\)
+ 18b: 85 90 90 90 90 90 [ ]*test %edx,-0x6f6f6f70\(%eax\)
+ 191: 86 90 90 90 90 90 [ ]*xchg %dl,-0x6f6f6f70\(%eax\)
+ 197: 87 90 90 90 90 90 [ ]*xchg %edx,-0x6f6f6f70\(%eax\)
+ 19d: 88 90 90 90 90 90 [ ]*mov %dl,-0x6f6f6f70\(%eax\)
+ 1a3: 89 90 90 90 90 90 [ ]*mov %edx,-0x6f6f6f70\(%eax\)
+ 1a9: 8a 90 90 90 90 90 [ ]*mov -0x6f6f6f70\(%eax\),%dl
+ 1af: 8b 90 90 90 90 90 [ ]*mov -0x6f6f6f70\(%eax\),%edx
+ 1b5: 8c 90 90 90 90 90 [ ]*mov %ss,-0x6f6f6f70\(%eax\)
+ 1bb: 8d 90 90 90 90 90 [ ]*lea -0x6f6f6f70\(%eax\),%edx
+ 1c1: 8e 90 90 90 90 90 [ ]*mov -0x6f6f6f70\(%eax\),%ss
+ 1c7: 8f 80 90 90 90 90 [ ]*popl -0x6f6f6f70\(%eax\)
1cd: 90 [ ]*nop
1ce: 91 [ ]*xchg %eax,%ecx
1cf: 92 [ ]*xchg %eax,%edx
@@ -189,14 +189,14 @@ Disassembly of section .text:
231: bd 90 90 90 90 [ ]*mov \$0x90909090,%ebp
236: be 90 90 90 90 [ ]*mov \$0x90909090,%esi
23b: bf 90 90 90 90 [ ]*mov \$0x90909090,%edi
- 240: c0 90 90 90 90 90 90 [ ]*rclb \$0x90,0x90909090\(%eax\)
- 247: c1 90 90 90 90 90 90 [ ]*rcll \$0x90,0x90909090\(%eax\)
+ 240: c0 90 90 90 90 90 90 [ ]*rclb \$0x90,-0x6f6f6f70\(%eax\)
+ 247: c1 90 90 90 90 90 90 [ ]*rcll \$0x90,-0x6f6f6f70\(%eax\)
24e: c2 90 90 [ ]*ret \$0x9090
251: c3 [ ]*ret
- 252: c4 90 90 90 90 90 [ ]*les 0x90909090\(%eax\),%edx
- 258: c5 90 90 90 90 90 [ ]*lds 0x90909090\(%eax\),%edx
- 25e: c6 80 90 90 90 90 90 [ ]*movb \$0x90,0x90909090\(%eax\)
- 265: c7 80 90 90 90 90 90 90 90 90 [ ]*movl \$0x90909090,0x90909090\(%eax\)
+ 252: c4 90 90 90 90 90 [ ]*les -0x6f6f6f70\(%eax\),%edx
+ 258: c5 90 90 90 90 90 [ ]*lds -0x6f6f6f70\(%eax\),%edx
+ 25e: c6 80 90 90 90 90 90 [ ]*movb \$0x90,-0x6f6f6f70\(%eax\)
+ 265: c7 80 90 90 90 90 90 90 90 90 [ ]*movl \$0x90909090,-0x6f6f6f70\(%eax\)
26f: c8 90 90 90 [ ]*enter \$0x9090,\$0x90
273: c9 [ ]*leave
274: ca 90 90 [ ]*lret \$0x9090
@@ -205,21 +205,21 @@ Disassembly of section .text:
279: cd 90 [ ]*int \$0x90
27b: ce [ ]*into
27c: cf [ ]*iret
- 27d: d0 90 90 90 90 90 [ ]*rclb 0x90909090\(%eax\)
- 283: d1 90 90 90 90 90 [ ]*rcll 0x90909090\(%eax\)
- 289: d2 90 90 90 90 90 [ ]*rclb %cl,0x90909090\(%eax\)
- 28f: d3 90 90 90 90 90 [ ]*rcll %cl,0x90909090\(%eax\)
+ 27d: d0 90 90 90 90 90 [ ]*rclb -0x6f6f6f70\(%eax\)
+ 283: d1 90 90 90 90 90 [ ]*rcll -0x6f6f6f70\(%eax\)
+ 289: d2 90 90 90 90 90 [ ]*rclb %cl,-0x6f6f6f70\(%eax\)
+ 28f: d3 90 90 90 90 90 [ ]*rcll %cl,-0x6f6f6f70\(%eax\)
295: d4 90 [ ]*aam \$0xffffff90
297: d5 90 [ ]*aad \$0xffffff90
299: d7 [ ]*xlat %ds:\(%ebx\)
- 29a: d8 90 90 90 90 90 [ ]*fcoms 0x90909090\(%eax\)
- 2a0: d9 90 90 90 90 90 [ ]*fsts 0x90909090\(%eax\)
- 2a6: da 90 90 90 90 90 [ ]*ficoml 0x90909090\(%eax\)
- 2ac: db 90 90 90 90 90 [ ]*fistl 0x90909090\(%eax\)
- 2b2: dc 90 90 90 90 90 [ ]*fcoml 0x90909090\(%eax\)
- 2b8: dd 90 90 90 90 90 [ ]*fstl 0x90909090\(%eax\)
- 2be: de 90 90 90 90 90 [ ]*ficom 0x90909090\(%eax\)
- 2c4: df 90 90 90 90 90 [ ]*fist 0x90909090\(%eax\)
+ 29a: d8 90 90 90 90 90 [ ]*fcoms -0x6f6f6f70\(%eax\)
+ 2a0: d9 90 90 90 90 90 [ ]*fsts -0x6f6f6f70\(%eax\)
+ 2a6: da 90 90 90 90 90 [ ]*ficoml -0x6f6f6f70\(%eax\)
+ 2ac: db 90 90 90 90 90 [ ]*fistl -0x6f6f6f70\(%eax\)
+ 2b2: dc 90 90 90 90 90 [ ]*fcoml -0x6f6f6f70\(%eax\)
+ 2b8: dd 90 90 90 90 90 [ ]*fstl -0x6f6f6f70\(%eax\)
+ 2be: de 90 90 90 90 90 [ ]*ficom -0x6f6f6f70\(%eax\)
+ 2c4: df 90 90 90 90 90 [ ]*fist -0x6f6f6f70\(%eax\)
2ca: e0 90 [ ]*loopne (0x)?25c.*
2cc: e1 90 [ ]*loope (0x)?25e.*
2ce: e2 90 [ ]*loop (0x)?260.*
@@ -238,19 +238,19 @@ Disassembly of section .text:
2f0: ef [ ]*out %eax,\(%dx\)
2f1: f4 [ ]*hlt
2f2: f5 [ ]*cmc
- 2f3: f6 90 90 90 90 90 [ ]*notb 0x90909090\(%eax\)
- 2f9: f7 90 90 90 90 90 [ ]*notl 0x90909090\(%eax\)
+ 2f3: f6 90 90 90 90 90 [ ]*notb -0x6f6f6f70\(%eax\)
+ 2f9: f7 90 90 90 90 90 [ ]*notl -0x6f6f6f70\(%eax\)
2ff: f8 [ ]*clc
300: f9 [ ]*stc
301: fa [ ]*cli
302: fb [ ]*sti
303: fc [ ]*cld
304: fd [ ]*std
- 305: ff 90 90 90 90 90 [ ]*call \*0x90909090\(%eax\)
- 30b: 0f 00 90 90 90 90 90 [ ]*lldt 0x90909090\(%eax\)
- 312: 0f 01 90 90 90 90 90 [ ]*lgdtl 0x90909090\(%eax\)
- 319: 0f 02 90 90 90 90 90 [ ]*lar 0x90909090\(%eax\),%edx
- 320: 0f 03 90 90 90 90 90 [ ]*lsl 0x90909090\(%eax\),%edx
+ 305: ff 90 90 90 90 90 [ ]*call \*-0x6f6f6f70\(%eax\)
+ 30b: 0f 00 90 90 90 90 90 [ ]*lldt -0x6f6f6f70\(%eax\)
+ 312: 0f 01 90 90 90 90 90 [ ]*lgdtl -0x6f6f6f70\(%eax\)
+ 319: 0f 02 90 90 90 90 90 [ ]*lar -0x6f6f6f70\(%eax\),%edx
+ 320: 0f 03 90 90 90 90 90 [ ]*lsl -0x6f6f6f70\(%eax\),%edx
327: 0f 06 [ ]*clts
329: 0f 08 [ ]*invd
32b: 0f 09 [ ]*wbinvd
@@ -265,45 +265,45 @@ Disassembly of section .text:
343: 0f 31 [ ]*rdtsc
345: 0f 32 [ ]*rdmsr
347: 0f 33 [ ]*rdpmc
- 349: 0f 40 90 90 90 90 90 [ ]*cmovo 0x90909090\(%eax\),%edx
- 350: 0f 41 90 90 90 90 90 [ ]*cmovno 0x90909090\(%eax\),%edx
- 357: 0f 42 90 90 90 90 90 [ ]*cmovb 0x90909090\(%eax\),%edx
- 35e: 0f 43 90 90 90 90 90 [ ]*cmovae 0x90909090\(%eax\),%edx
- 365: 0f 44 90 90 90 90 90 [ ]*cmove 0x90909090\(%eax\),%edx
- 36c: 0f 45 90 90 90 90 90 [ ]*cmovne 0x90909090\(%eax\),%edx
- 373: 0f 46 90 90 90 90 90 [ ]*cmovbe 0x90909090\(%eax\),%edx
- 37a: 0f 47 90 90 90 90 90 [ ]*cmova 0x90909090\(%eax\),%edx
- 381: 0f 48 90 90 90 90 90 [ ]*cmovs 0x90909090\(%eax\),%edx
- 388: 0f 49 90 90 90 90 90 [ ]*cmovns 0x90909090\(%eax\),%edx
- 38f: 0f 4a 90 90 90 90 90 [ ]*cmovp 0x90909090\(%eax\),%edx
- 396: 0f 4b 90 90 90 90 90 [ ]*cmovnp 0x90909090\(%eax\),%edx
- 39d: 0f 4c 90 90 90 90 90 [ ]*cmovl 0x90909090\(%eax\),%edx
- 3a4: 0f 4d 90 90 90 90 90 [ ]*cmovge 0x90909090\(%eax\),%edx
- 3ab: 0f 4e 90 90 90 90 90 [ ]*cmovle 0x90909090\(%eax\),%edx
- 3b2: 0f 4f 90 90 90 90 90 [ ]*cmovg 0x90909090\(%eax\),%edx
- 3b9: 0f 60 90 90 90 90 90 [ ]*punpcklbw 0x90909090\(%eax\),%mm2
- 3c0: 0f 61 90 90 90 90 90 [ ]*punpcklwd 0x90909090\(%eax\),%mm2
- 3c7: 0f 62 90 90 90 90 90 [ ]*punpckldq 0x90909090\(%eax\),%mm2
- 3ce: 0f 63 90 90 90 90 90 [ ]*packsswb 0x90909090\(%eax\),%mm2
- 3d5: 0f 64 90 90 90 90 90 [ ]*pcmpgtb 0x90909090\(%eax\),%mm2
- 3dc: 0f 65 90 90 90 90 90 [ ]*pcmpgtw 0x90909090\(%eax\),%mm2
- 3e3: 0f 66 90 90 90 90 90 [ ]*pcmpgtd 0x90909090\(%eax\),%mm2
- 3ea: 0f 67 90 90 90 90 90 [ ]*packuswb 0x90909090\(%eax\),%mm2
- 3f1: 0f 68 90 90 90 90 90 [ ]*punpckhbw 0x90909090\(%eax\),%mm2
- 3f8: 0f 69 90 90 90 90 90 [ ]*punpckhwd 0x90909090\(%eax\),%mm2
- 3ff: 0f 6a 90 90 90 90 90 [ ]*punpckhdq 0x90909090\(%eax\),%mm2
- 406: 0f 6b 90 90 90 90 90 [ ]*packssdw 0x90909090\(%eax\),%mm2
- 40d: 0f 6e 90 90 90 90 90 [ ]*movd 0x90909090\(%eax\),%mm2
- 414: 0f 6f 90 90 90 90 90 [ ]*movq 0x90909090\(%eax\),%mm2
+ 349: 0f 40 90 90 90 90 90 [ ]*cmovo -0x6f6f6f70\(%eax\),%edx
+ 350: 0f 41 90 90 90 90 90 [ ]*cmovno -0x6f6f6f70\(%eax\),%edx
+ 357: 0f 42 90 90 90 90 90 [ ]*cmovb -0x6f6f6f70\(%eax\),%edx
+ 35e: 0f 43 90 90 90 90 90 [ ]*cmovae -0x6f6f6f70\(%eax\),%edx
+ 365: 0f 44 90 90 90 90 90 [ ]*cmove -0x6f6f6f70\(%eax\),%edx
+ 36c: 0f 45 90 90 90 90 90 [ ]*cmovne -0x6f6f6f70\(%eax\),%edx
+ 373: 0f 46 90 90 90 90 90 [ ]*cmovbe -0x6f6f6f70\(%eax\),%edx
+ 37a: 0f 47 90 90 90 90 90 [ ]*cmova -0x6f6f6f70\(%eax\),%edx
+ 381: 0f 48 90 90 90 90 90 [ ]*cmovs -0x6f6f6f70\(%eax\),%edx
+ 388: 0f 49 90 90 90 90 90 [ ]*cmovns -0x6f6f6f70\(%eax\),%edx
+ 38f: 0f 4a 90 90 90 90 90 [ ]*cmovp -0x6f6f6f70\(%eax\),%edx
+ 396: 0f 4b 90 90 90 90 90 [ ]*cmovnp -0x6f6f6f70\(%eax\),%edx
+ 39d: 0f 4c 90 90 90 90 90 [ ]*cmovl -0x6f6f6f70\(%eax\),%edx
+ 3a4: 0f 4d 90 90 90 90 90 [ ]*cmovge -0x6f6f6f70\(%eax\),%edx
+ 3ab: 0f 4e 90 90 90 90 90 [ ]*cmovle -0x6f6f6f70\(%eax\),%edx
+ 3b2: 0f 4f 90 90 90 90 90 [ ]*cmovg -0x6f6f6f70\(%eax\),%edx
+ 3b9: 0f 60 90 90 90 90 90 [ ]*punpcklbw -0x6f6f6f70\(%eax\),%mm2
+ 3c0: 0f 61 90 90 90 90 90 [ ]*punpcklwd -0x6f6f6f70\(%eax\),%mm2
+ 3c7: 0f 62 90 90 90 90 90 [ ]*punpckldq -0x6f6f6f70\(%eax\),%mm2
+ 3ce: 0f 63 90 90 90 90 90 [ ]*packsswb -0x6f6f6f70\(%eax\),%mm2
+ 3d5: 0f 64 90 90 90 90 90 [ ]*pcmpgtb -0x6f6f6f70\(%eax\),%mm2
+ 3dc: 0f 65 90 90 90 90 90 [ ]*pcmpgtw -0x6f6f6f70\(%eax\),%mm2
+ 3e3: 0f 66 90 90 90 90 90 [ ]*pcmpgtd -0x6f6f6f70\(%eax\),%mm2
+ 3ea: 0f 67 90 90 90 90 90 [ ]*packuswb -0x6f6f6f70\(%eax\),%mm2
+ 3f1: 0f 68 90 90 90 90 90 [ ]*punpckhbw -0x6f6f6f70\(%eax\),%mm2
+ 3f8: 0f 69 90 90 90 90 90 [ ]*punpckhwd -0x6f6f6f70\(%eax\),%mm2
+ 3ff: 0f 6a 90 90 90 90 90 [ ]*punpckhdq -0x6f6f6f70\(%eax\),%mm2
+ 406: 0f 6b 90 90 90 90 90 [ ]*packssdw -0x6f6f6f70\(%eax\),%mm2
+ 40d: 0f 6e 90 90 90 90 90 [ ]*movd -0x6f6f6f70\(%eax\),%mm2
+ 414: 0f 6f 90 90 90 90 90 [ ]*movq -0x6f6f6f70\(%eax\),%mm2
41b: 0f 71 d0 90 [ ]*psrlw \$0x90,%mm0
41f: 0f 72 d0 90 [ ]*psrld \$0x90,%mm0
423: 0f 73 d0 90 [ ]*psrlq \$0x90,%mm0
- 427: 0f 74 90 90 90 90 90 [ ]*pcmpeqb 0x90909090\(%eax\),%mm2
- 42e: 0f 75 90 90 90 90 90 [ ]*pcmpeqw 0x90909090\(%eax\),%mm2
- 435: 0f 76 90 90 90 90 90 [ ]*pcmpeqd 0x90909090\(%eax\),%mm2
+ 427: 0f 74 90 90 90 90 90 [ ]*pcmpeqb -0x6f6f6f70\(%eax\),%mm2
+ 42e: 0f 75 90 90 90 90 90 [ ]*pcmpeqw -0x6f6f6f70\(%eax\),%mm2
+ 435: 0f 76 90 90 90 90 90 [ ]*pcmpeqd -0x6f6f6f70\(%eax\),%mm2
43c: 0f 77 [ ]*emms
- 43e: 0f 7e 90 90 90 90 90 [ ]*movd %mm2,0x90909090\(%eax\)
- 445: 0f 7f 90 90 90 90 90 [ ]*movq %mm2,0x90909090\(%eax\)
+ 43e: 0f 7e 90 90 90 90 90 [ ]*movd %mm2,-0x6f6f6f70\(%eax\)
+ 445: 0f 7f 90 90 90 90 90 [ ]*movq %mm2,-0x6f6f6f70\(%eax\)
44c: 0f 80 90 90 90 90 [ ]*jo (0x)?909094e2.*
452: 0f 81 90 90 90 90 [ ]*jno (0x)?909094e8.*
458: 0f 82 90 90 90 90 [ ]*jb (0x)?909094ee.*
@@ -320,51 +320,51 @@ Disassembly of section .text:
49a: 0f 8d 90 90 90 90 [ ]*jge (0x)?90909530.*
4a0: 0f 8e 90 90 90 90 [ ]*jle (0x)?90909536.*
4a6: 0f 8f 90 90 90 90 [ ]*jg (0x)?9090953c.*
- 4ac: 0f 90 80 90 90 90 90 [ ]*seto 0x90909090\(%eax\)
- 4b3: 0f 91 80 90 90 90 90 [ ]*setno 0x90909090\(%eax\)
- 4ba: 0f 92 80 90 90 90 90 [ ]*setb 0x90909090\(%eax\)
- 4c1: 0f 93 80 90 90 90 90 [ ]*setae 0x90909090\(%eax\)
- 4c8: 0f 94 80 90 90 90 90 [ ]*sete 0x90909090\(%eax\)
- 4cf: 0f 95 80 90 90 90 90 [ ]*setne 0x90909090\(%eax\)
- 4d6: 0f 96 80 90 90 90 90 [ ]*setbe 0x90909090\(%eax\)
- 4dd: 0f 97 80 90 90 90 90 [ ]*seta 0x90909090\(%eax\)
- 4e4: 0f 98 80 90 90 90 90 [ ]*sets 0x90909090\(%eax\)
- 4eb: 0f 99 80 90 90 90 90 [ ]*setns 0x90909090\(%eax\)
- 4f2: 0f 9a 80 90 90 90 90 [ ]*setp 0x90909090\(%eax\)
- 4f9: 0f 9b 80 90 90 90 90 [ ]*setnp 0x90909090\(%eax\)
- 500: 0f 9c 80 90 90 90 90 [ ]*setl 0x90909090\(%eax\)
- 507: 0f 9d 80 90 90 90 90 [ ]*setge 0x90909090\(%eax\)
- 50e: 0f 9e 80 90 90 90 90 [ ]*setle 0x90909090\(%eax\)
- 515: 0f 9f 80 90 90 90 90 [ ]*setg 0x90909090\(%eax\)
+ 4ac: 0f 90 80 90 90 90 90 [ ]*seto -0x6f6f6f70\(%eax\)
+ 4b3: 0f 91 80 90 90 90 90 [ ]*setno -0x6f6f6f70\(%eax\)
+ 4ba: 0f 92 80 90 90 90 90 [ ]*setb -0x6f6f6f70\(%eax\)
+ 4c1: 0f 93 80 90 90 90 90 [ ]*setae -0x6f6f6f70\(%eax\)
+ 4c8: 0f 94 80 90 90 90 90 [ ]*sete -0x6f6f6f70\(%eax\)
+ 4cf: 0f 95 80 90 90 90 90 [ ]*setne -0x6f6f6f70\(%eax\)
+ 4d6: 0f 96 80 90 90 90 90 [ ]*setbe -0x6f6f6f70\(%eax\)
+ 4dd: 0f 97 80 90 90 90 90 [ ]*seta -0x6f6f6f70\(%eax\)
+ 4e4: 0f 98 80 90 90 90 90 [ ]*sets -0x6f6f6f70\(%eax\)
+ 4eb: 0f 99 80 90 90 90 90 [ ]*setns -0x6f6f6f70\(%eax\)
+ 4f2: 0f 9a 80 90 90 90 90 [ ]*setp -0x6f6f6f70\(%eax\)
+ 4f9: 0f 9b 80 90 90 90 90 [ ]*setnp -0x6f6f6f70\(%eax\)
+ 500: 0f 9c 80 90 90 90 90 [ ]*setl -0x6f6f6f70\(%eax\)
+ 507: 0f 9d 80 90 90 90 90 [ ]*setge -0x6f6f6f70\(%eax\)
+ 50e: 0f 9e 80 90 90 90 90 [ ]*setle -0x6f6f6f70\(%eax\)
+ 515: 0f 9f 80 90 90 90 90 [ ]*setg -0x6f6f6f70\(%eax\)
51c: 0f a0 [ ]*push %fs
51e: 0f a1 [ ]*pop %fs
520: 0f a2 [ ]*cpuid
- 522: 0f a3 90 90 90 90 90 [ ]*bt %edx,0x90909090\(%eax\)
- 529: 0f a4 90 90 90 90 90 90 [ ]*shld \$0x90,%edx,0x90909090\(%eax\)
- 531: 0f a5 90 90 90 90 90 [ ]*shld %cl,%edx,0x90909090\(%eax\)
+ 522: 0f a3 90 90 90 90 90 [ ]*bt %edx,-0x6f6f6f70\(%eax\)
+ 529: 0f a4 90 90 90 90 90 90 [ ]*shld \$0x90,%edx,-0x6f6f6f70\(%eax\)
+ 531: 0f a5 90 90 90 90 90 [ ]*shld %cl,%edx,-0x6f6f6f70\(%eax\)
538: 0f a8 [ ]*push %gs
53a: 0f a9 [ ]*pop %gs
53c: 0f aa [ ]*rsm
- 53e: 0f ab 90 90 90 90 90 [ ]*bts %edx,0x90909090\(%eax\)
- 545: 0f ac 90 90 90 90 90 90 [ ]*shrd \$0x90,%edx,0x90909090\(%eax\)
- 54d: 0f ad 90 90 90 90 90 [ ]*shrd %cl,%edx,0x90909090\(%eax\)
- 554: 0f af 90 90 90 90 90 [ ]*imul 0x90909090\(%eax\),%edx
- 55b: 0f b0 90 90 90 90 90 [ ]*cmpxchg %dl,0x90909090\(%eax\)
- 562: 0f b1 90 90 90 90 90 [ ]*cmpxchg %edx,0x90909090\(%eax\)
- 569: 0f b2 90 90 90 90 90 [ ]*lss 0x90909090\(%eax\),%edx
- 570: 0f b3 90 90 90 90 90 [ ]*btr %edx,0x90909090\(%eax\)
- 577: 0f b4 90 90 90 90 90 [ ]*lfs 0x90909090\(%eax\),%edx
- 57e: 0f b5 90 90 90 90 90 [ ]*lgs 0x90909090\(%eax\),%edx
- 585: 0f b6 90 90 90 90 90 [ ]*movzbl 0x90909090\(%eax\),%edx
- 58c: 0f b7 90 90 90 90 90 [ ]*movzwl 0x90909090\(%eax\),%edx
+ 53e: 0f ab 90 90 90 90 90 [ ]*bts %edx,-0x6f6f6f70\(%eax\)
+ 545: 0f ac 90 90 90 90 90 90 [ ]*shrd \$0x90,%edx,-0x6f6f6f70\(%eax\)
+ 54d: 0f ad 90 90 90 90 90 [ ]*shrd %cl,%edx,-0x6f6f6f70\(%eax\)
+ 554: 0f af 90 90 90 90 90 [ ]*imul -0x6f6f6f70\(%eax\),%edx
+ 55b: 0f b0 90 90 90 90 90 [ ]*cmpxchg %dl,-0x6f6f6f70\(%eax\)
+ 562: 0f b1 90 90 90 90 90 [ ]*cmpxchg %edx,-0x6f6f6f70\(%eax\)
+ 569: 0f b2 90 90 90 90 90 [ ]*lss -0x6f6f6f70\(%eax\),%edx
+ 570: 0f b3 90 90 90 90 90 [ ]*btr %edx,-0x6f6f6f70\(%eax\)
+ 577: 0f b4 90 90 90 90 90 [ ]*lfs -0x6f6f6f70\(%eax\),%edx
+ 57e: 0f b5 90 90 90 90 90 [ ]*lgs -0x6f6f6f70\(%eax\),%edx
+ 585: 0f b6 90 90 90 90 90 [ ]*movzbl -0x6f6f6f70\(%eax\),%edx
+ 58c: 0f b7 90 90 90 90 90 [ ]*movzwl -0x6f6f6f70\(%eax\),%edx
593: 0f b9 [ ]*ud2b
- 595: 0f bb 90 90 90 90 90 [ ]*btc %edx,0x90909090\(%eax\)
- 59c: 0f bc 90 90 90 90 90 [ ]*bsf 0x90909090\(%eax\),%edx
- 5a3: 0f bd 90 90 90 90 90 [ ]*bsr 0x90909090\(%eax\),%edx
- 5aa: 0f be 90 90 90 90 90 [ ]*movsbl 0x90909090\(%eax\),%edx
- 5b1: 0f bf 90 90 90 90 90 [ ]*movswl 0x90909090\(%eax\),%edx
- 5b8: 0f c0 90 90 90 90 90 [ ]*xadd %dl,0x90909090\(%eax\)
- 5bf: 0f c1 90 90 90 90 90 [ ]*xadd %edx,0x90909090\(%eax\)
+ 595: 0f bb 90 90 90 90 90 [ ]*btc %edx,-0x6f6f6f70\(%eax\)
+ 59c: 0f bc 90 90 90 90 90 [ ]*bsf -0x6f6f6f70\(%eax\),%edx
+ 5a3: 0f bd 90 90 90 90 90 [ ]*bsr -0x6f6f6f70\(%eax\),%edx
+ 5aa: 0f be 90 90 90 90 90 [ ]*movsbl -0x6f6f6f70\(%eax\),%edx
+ 5b1: 0f bf 90 90 90 90 90 [ ]*movswl -0x6f6f6f70\(%eax\),%edx
+ 5b8: 0f c0 90 90 90 90 90 [ ]*xadd %dl,-0x6f6f6f70\(%eax\)
+ 5bf: 0f c1 90 90 90 90 90 [ ]*xadd %edx,-0x6f6f6f70\(%eax\)
5c6: 0f c8 [ ]*bswap %eax
5c8: 0f c9 [ ]*bswap %ecx
5ca: 0f ca [ ]*bswap %edx
@@ -373,65 +373,65 @@ Disassembly of section .text:
5d0: 0f cd [ ]*bswap %ebp
5d2: 0f ce [ ]*bswap %esi
5d4: 0f cf [ ]*bswap %edi
- 5d6: 0f d1 90 90 90 90 90 [ ]*psrlw 0x90909090\(%eax\),%mm2
- 5dd: 0f d2 90 90 90 90 90 [ ]*psrld 0x90909090\(%eax\),%mm2
- 5e4: 0f d3 90 90 90 90 90 [ ]*psrlq 0x90909090\(%eax\),%mm2
- 5eb: 0f d5 90 90 90 90 90 [ ]*pmullw 0x90909090\(%eax\),%mm2
- 5f2: 0f d8 90 90 90 90 90 [ ]*psubusb 0x90909090\(%eax\),%mm2
- 5f9: 0f d9 90 90 90 90 90 [ ]*psubusw 0x90909090\(%eax\),%mm2
- 600: 0f db 90 90 90 90 90 [ ]*pand 0x90909090\(%eax\),%mm2
- 607: 0f dc 90 90 90 90 90 [ ]*paddusb 0x90909090\(%eax\),%mm2
- 60e: 0f dd 90 90 90 90 90 [ ]*paddusw 0x90909090\(%eax\),%mm2
- 615: 0f df 90 90 90 90 90 [ ]*pandn 0x90909090\(%eax\),%mm2
- 61c: 0f e1 90 90 90 90 90 [ ]*psraw 0x90909090\(%eax\),%mm2
- 623: 0f e2 90 90 90 90 90 [ ]*psrad 0x90909090\(%eax\),%mm2
- 62a: 0f e5 90 90 90 90 90 [ ]*pmulhw 0x90909090\(%eax\),%mm2
- 631: 0f e8 90 90 90 90 90 [ ]*psubsb 0x90909090\(%eax\),%mm2
- 638: 0f e9 90 90 90 90 90 [ ]*psubsw 0x90909090\(%eax\),%mm2
- 63f: 0f eb 90 90 90 90 90 [ ]*por 0x90909090\(%eax\),%mm2
- 646: 0f ec 90 90 90 90 90 [ ]*paddsb 0x90909090\(%eax\),%mm2
- 64d: 0f ed 90 90 90 90 90 [ ]*paddsw 0x90909090\(%eax\),%mm2
- 654: 0f ef 90 90 90 90 90 [ ]*pxor 0x90909090\(%eax\),%mm2
- 65b: 0f f1 90 90 90 90 90 [ ]*psllw 0x90909090\(%eax\),%mm2
- 662: 0f f2 90 90 90 90 90 [ ]*pslld 0x90909090\(%eax\),%mm2
- 669: 0f f3 90 90 90 90 90 [ ]*psllq 0x90909090\(%eax\),%mm2
- 670: 0f f5 90 90 90 90 90 [ ]*pmaddwd 0x90909090\(%eax\),%mm2
- 677: 0f f8 90 90 90 90 90 [ ]*psubb 0x90909090\(%eax\),%mm2
- 67e: 0f f9 90 90 90 90 90 [ ]*psubw 0x90909090\(%eax\),%mm2
- 685: 0f fa 90 90 90 90 90 [ ]*psubd 0x90909090\(%eax\),%mm2
- 68c: 0f fc 90 90 90 90 90 [ ]*paddb 0x90909090\(%eax\),%mm2
- 693: 0f fd 90 90 90 90 90 [ ]*paddw 0x90909090\(%eax\),%mm2
- 69a: 0f fe 90 90 90 90 90 [ ]*paddd 0x90909090\(%eax\),%mm2
- 6a1: 66 01 90 90 90 90 90 [ ]*add %dx,0x90909090\(%eax\)
- 6a8: 66 03 90 90 90 90 90 [ ]*add 0x90909090\(%eax\),%dx
+ 5d6: 0f d1 90 90 90 90 90 [ ]*psrlw -0x6f6f6f70\(%eax\),%mm2
+ 5dd: 0f d2 90 90 90 90 90 [ ]*psrld -0x6f6f6f70\(%eax\),%mm2
+ 5e4: 0f d3 90 90 90 90 90 [ ]*psrlq -0x6f6f6f70\(%eax\),%mm2
+ 5eb: 0f d5 90 90 90 90 90 [ ]*pmullw -0x6f6f6f70\(%eax\),%mm2
+ 5f2: 0f d8 90 90 90 90 90 [ ]*psubusb -0x6f6f6f70\(%eax\),%mm2
+ 5f9: 0f d9 90 90 90 90 90 [ ]*psubusw -0x6f6f6f70\(%eax\),%mm2
+ 600: 0f db 90 90 90 90 90 [ ]*pand -0x6f6f6f70\(%eax\),%mm2
+ 607: 0f dc 90 90 90 90 90 [ ]*paddusb -0x6f6f6f70\(%eax\),%mm2
+ 60e: 0f dd 90 90 90 90 90 [ ]*paddusw -0x6f6f6f70\(%eax\),%mm2
+ 615: 0f df 90 90 90 90 90 [ ]*pandn -0x6f6f6f70\(%eax\),%mm2
+ 61c: 0f e1 90 90 90 90 90 [ ]*psraw -0x6f6f6f70\(%eax\),%mm2
+ 623: 0f e2 90 90 90 90 90 [ ]*psrad -0x6f6f6f70\(%eax\),%mm2
+ 62a: 0f e5 90 90 90 90 90 [ ]*pmulhw -0x6f6f6f70\(%eax\),%mm2
+ 631: 0f e8 90 90 90 90 90 [ ]*psubsb -0x6f6f6f70\(%eax\),%mm2
+ 638: 0f e9 90 90 90 90 90 [ ]*psubsw -0x6f6f6f70\(%eax\),%mm2
+ 63f: 0f eb 90 90 90 90 90 [ ]*por -0x6f6f6f70\(%eax\),%mm2
+ 646: 0f ec 90 90 90 90 90 [ ]*paddsb -0x6f6f6f70\(%eax\),%mm2
+ 64d: 0f ed 90 90 90 90 90 [ ]*paddsw -0x6f6f6f70\(%eax\),%mm2
+ 654: 0f ef 90 90 90 90 90 [ ]*pxor -0x6f6f6f70\(%eax\),%mm2
+ 65b: 0f f1 90 90 90 90 90 [ ]*psllw -0x6f6f6f70\(%eax\),%mm2
+ 662: 0f f2 90 90 90 90 90 [ ]*pslld -0x6f6f6f70\(%eax\),%mm2
+ 669: 0f f3 90 90 90 90 90 [ ]*psllq -0x6f6f6f70\(%eax\),%mm2
+ 670: 0f f5 90 90 90 90 90 [ ]*pmaddwd -0x6f6f6f70\(%eax\),%mm2
+ 677: 0f f8 90 90 90 90 90 [ ]*psubb -0x6f6f6f70\(%eax\),%mm2
+ 67e: 0f f9 90 90 90 90 90 [ ]*psubw -0x6f6f6f70\(%eax\),%mm2
+ 685: 0f fa 90 90 90 90 90 [ ]*psubd -0x6f6f6f70\(%eax\),%mm2
+ 68c: 0f fc 90 90 90 90 90 [ ]*paddb -0x6f6f6f70\(%eax\),%mm2
+ 693: 0f fd 90 90 90 90 90 [ ]*paddw -0x6f6f6f70\(%eax\),%mm2
+ 69a: 0f fe 90 90 90 90 90 [ ]*paddd -0x6f6f6f70\(%eax\),%mm2
+ 6a1: 66 01 90 90 90 90 90 [ ]*add %dx,-0x6f6f6f70\(%eax\)
+ 6a8: 66 03 90 90 90 90 90 [ ]*add -0x6f6f6f70\(%eax\),%dx
6af: 66 05 90 90 [ ]*add \$0x9090,%ax
6b3: 66 06 [ ]*pushw %es
6b5: 66 07 [ ]*popw %es
- 6b7: 66 09 90 90 90 90 90 [ ]*or %dx,0x90909090\(%eax\)
- 6be: 66 0b 90 90 90 90 90 [ ]*or 0x90909090\(%eax\),%dx
+ 6b7: 66 09 90 90 90 90 90 [ ]*or %dx,-0x6f6f6f70\(%eax\)
+ 6be: 66 0b 90 90 90 90 90 [ ]*or -0x6f6f6f70\(%eax\),%dx
6c5: 66 0d 90 90 [ ]*or \$0x9090,%ax
6c9: 66 0e [ ]*pushw %cs
- 6cb: 66 11 90 90 90 90 90 [ ]*adc %dx,0x90909090\(%eax\)
- 6d2: 66 13 90 90 90 90 90 [ ]*adc 0x90909090\(%eax\),%dx
+ 6cb: 66 11 90 90 90 90 90 [ ]*adc %dx,-0x6f6f6f70\(%eax\)
+ 6d2: 66 13 90 90 90 90 90 [ ]*adc -0x6f6f6f70\(%eax\),%dx
6d9: 66 15 90 90 [ ]*adc \$0x9090,%ax
6dd: 66 16 [ ]*pushw %ss
6df: 66 17 [ ]*popw %ss
- 6e1: 66 19 90 90 90 90 90 [ ]*sbb %dx,0x90909090\(%eax\)
- 6e8: 66 1b 90 90 90 90 90 [ ]*sbb 0x90909090\(%eax\),%dx
+ 6e1: 66 19 90 90 90 90 90 [ ]*sbb %dx,-0x6f6f6f70\(%eax\)
+ 6e8: 66 1b 90 90 90 90 90 [ ]*sbb -0x6f6f6f70\(%eax\),%dx
6ef: 66 1d 90 90 [ ]*sbb \$0x9090,%ax
6f3: 66 1e [ ]*pushw %ds
6f5: 66 1f [ ]*popw %ds
- 6f7: 66 21 90 90 90 90 90 [ ]*and %dx,0x90909090\(%eax\)
- 6fe: 66 23 90 90 90 90 90 [ ]*and 0x90909090\(%eax\),%dx
+ 6f7: 66 21 90 90 90 90 90 [ ]*and %dx,-0x6f6f6f70\(%eax\)
+ 6fe: 66 23 90 90 90 90 90 [ ]*and -0x6f6f6f70\(%eax\),%dx
705: 66 25 90 90 [ ]*and \$0x9090,%ax
- 709: 66 29 90 90 90 90 90 [ ]*sub %dx,0x90909090\(%eax\)
- 710: 66 2b 90 90 90 90 90 [ ]*sub 0x90909090\(%eax\),%dx
+ 709: 66 29 90 90 90 90 90 [ ]*sub %dx,-0x6f6f6f70\(%eax\)
+ 710: 66 2b 90 90 90 90 90 [ ]*sub -0x6f6f6f70\(%eax\),%dx
717: 66 2d 90 90 [ ]*sub \$0x9090,%ax
- 71b: 66 31 90 90 90 90 90 [ ]*xor %dx,0x90909090\(%eax\)
- 722: 66 33 90 90 90 90 90 [ ]*xor 0x90909090\(%eax\),%dx
+ 71b: 66 31 90 90 90 90 90 [ ]*xor %dx,-0x6f6f6f70\(%eax\)
+ 722: 66 33 90 90 90 90 90 [ ]*xor -0x6f6f6f70\(%eax\),%dx
729: 66 35 90 90 [ ]*xor \$0x9090,%ax
- 72d: 66 39 90 90 90 90 90 [ ]*cmp %dx,0x90909090\(%eax\)
- 734: 66 3b 90 90 90 90 90 [ ]*cmp 0x90909090\(%eax\),%dx
+ 72d: 66 39 90 90 90 90 90 [ ]*cmp %dx,-0x6f6f6f70\(%eax\)
+ 734: 66 3b 90 90 90 90 90 [ ]*cmp -0x6f6f6f70\(%eax\),%dx
73b: 66 3d 90 90 [ ]*cmp \$0x9090,%ax
73f: 66 40 [ ]*inc %ax
741: 66 41 [ ]*inc %cx
@@ -467,22 +467,22 @@ Disassembly of section .text:
77d: 66 5f [ ]*pop %di
77f: 66 60 [ ]*pushaw
781: 66 61 [ ]*popaw
- 783: 66 62 90 90 90 90 90 [ ]*bound %dx,0x90909090\(%eax\)
+ 783: 66 62 90 90 90 90 90 [ ]*bound %dx,-0x6f6f6f70\(%eax\)
78a: 66 68 90 90 [ ]*pushw \$0x9090
- 78e: 66 69 90 90 90 90 90 90 90 [ ]*imul \$0x9090,0x90909090\(%eax\),%dx
+ 78e: 66 69 90 90 90 90 90 90 90 [ ]*imul \$0x9090,-0x6f6f6f70\(%eax\),%dx
797: 66 6a 90 [ ]*pushw \$0xffffff90
- 79a: 66 6b 90 90 90 90 90 90 [ ]*imul \$0xffffff90,0x90909090\(%eax\),%dx
+ 79a: 66 6b 90 90 90 90 90 90 [ ]*imul \$0xffffff90,-0x6f6f6f70\(%eax\),%dx
7a2: 66 6d [ ]*insw \(%dx\),%es:\(%edi\)
7a4: 66 6f [ ]*outsw %ds:\(%esi\),\(%dx\)
- 7a6: 66 81 90 90 90 90 90 90 90 [ ]*adcw \$0x9090,0x90909090\(%eax\)
- 7af: 66 83 90 90 90 90 90 90 [ ]*adcw \$0xffffff90,0x90909090\(%eax\)
- 7b7: 66 85 90 90 90 90 90 [ ]*test %dx,0x90909090\(%eax\)
- 7be: 66 87 90 90 90 90 90 [ ]*xchg %dx,0x90909090\(%eax\)
- 7c5: 66 89 90 90 90 90 90 [ ]*mov %dx,0x90909090\(%eax\)
- 7cc: 66 8b 90 90 90 90 90 [ ]*mov 0x90909090\(%eax\),%dx
- 7d3: 8c 90 90 90 90 90 [ ]*mov[w ] %ss,0x90909090\(%eax\)
- 7d9: 66 8d 90 90 90 90 90 [ ]*lea 0x90909090\(%eax\),%dx
- 7e0: 66 8f 80 90 90 90 90 [ ]*popw 0x90909090\(%eax\)
+ 7a6: 66 81 90 90 90 90 90 90 90 [ ]*adcw \$0x9090,-0x6f6f6f70\(%eax\)
+ 7af: 66 83 90 90 90 90 90 90 [ ]*adcw \$0xffffff90,-0x6f6f6f70\(%eax\)
+ 7b7: 66 85 90 90 90 90 90 [ ]*test %dx,-0x6f6f6f70\(%eax\)
+ 7be: 66 87 90 90 90 90 90 [ ]*xchg %dx,-0x6f6f6f70\(%eax\)
+ 7c5: 66 89 90 90 90 90 90 [ ]*mov %dx,-0x6f6f6f70\(%eax\)
+ 7cc: 66 8b 90 90 90 90 90 [ ]*mov -0x6f6f6f70\(%eax\),%dx
+ 7d3: 8c 90 90 90 90 90 [ ]*mov[w ] %ss,-0x6f6f6f70\(%eax\)
+ 7d9: 66 8d 90 90 90 90 90 [ ]*lea -0x6f6f6f70\(%eax\),%dx
+ 7e0: 66 8f 80 90 90 90 90 [ ]*popw -0x6f6f6f70\(%eax\)
7e7: 66 91 [ ]*xchg %ax,%cx
7e9: 66 92 [ ]*xchg %ax,%dx
7eb: 66 93 [ ]*xchg %ax,%bx
@@ -511,65 +511,80 @@ Disassembly of section .text:
831: 66 bd 90 90 [ ]*mov \$0x9090,%bp
835: 66 be 90 90 [ ]*mov \$0x9090,%si
839: 66 bf 90 90 [ ]*mov \$0x9090,%di
- 83d: 66 c1 90 90 90 90 90 90 [ ]*rclw \$0x90,0x90909090\(%eax\)
+ 83d: 66 c1 90 90 90 90 90 90 [ ]*rclw \$0x90,-0x6f6f6f70\(%eax\)
845: 66 c2 90 90 [ ]*retw \$0x9090
849: 66 c3 [ ]*retw
- 84b: 66 c4 90 90 90 90 90 [ ]*les 0x90909090\(%eax\),%dx
- 852: 66 c5 90 90 90 90 90 [ ]*lds 0x90909090\(%eax\),%dx
- 859: 66 c7 80 90 90 90 90 90 90 [ ]*movw \$0x9090,0x90909090\(%eax\)
+ 84b: 66 c4 90 90 90 90 90 [ ]*les -0x6f6f6f70\(%eax\),%dx
+ 852: 66 c5 90 90 90 90 90 [ ]*lds -0x6f6f6f70\(%eax\),%dx
+ 859: 66 c7 80 90 90 90 90 90 90 [ ]*movw \$0x9090,-0x6f6f6f70\(%eax\)
862: 66 c8 90 90 90 [ ]*enterw \$0x9090,\$0x90
867: 66 c9 [ ]*leavew
869: 66 ca 90 90 [ ]*lretw \$0x9090
86d: 66 cb [ ]*lretw
86f: 66 cf [ ]*iretw
- 871: 66 d1 90 90 90 90 90 [ ]*rclw 0x90909090\(%eax\)
- 878: 66 d3 90 90 90 90 90 [ ]*rclw %cl,0x90909090\(%eax\)
+ 871: 66 d1 90 90 90 90 90 [ ]*rclw -0x6f6f6f70\(%eax\)
+ 878: 66 d3 90 90 90 90 90 [ ]*rclw %cl,-0x6f6f6f70\(%eax\)
87f: 66 e5 90 [ ]*in \$0x90,%ax
882: 66 e7 90 [ ]*out %ax,\$0x90
885: 66 e8 8f 90 [ ]*callw (0x)?9918.*
889: 66 ea 90 90 90 90 [ ]*ljmpw \$0x9090,\$0x9090
88f: 66 ed [ ]*in \(%dx\),%ax
891: 66 ef [ ]*out %ax,\(%dx\)
- 893: 66 f7 90 90 90 90 90 [ ]*notw 0x90909090\(%eax\)
- 89a: 66 ff 90 90 90 90 90 [ ]*callw \*0x90909090\(%eax\)
- 8a1: 66 0f 02 90 90 90 90 90 [ ]*lar 0x90909090\(%eax\),%dx
- 8a9: 66 0f 03 90 90 90 90 90 [ ]*lsl 0x90909090\(%eax\),%dx
- 8b1: 66 0f 40 90 90 90 90 90 [ ]*cmovo 0x90909090\(%eax\),%dx
- 8b9: 66 0f 41 90 90 90 90 90 [ ]*cmovno 0x90909090\(%eax\),%dx
- 8c1: 66 0f 42 90 90 90 90 90 [ ]*cmovb 0x90909090\(%eax\),%dx
- 8c9: 66 0f 43 90 90 90 90 90 [ ]*cmovae 0x90909090\(%eax\),%dx
- 8d1: 66 0f 44 90 90 90 90 90 [ ]*cmove 0x90909090\(%eax\),%dx
- 8d9: 66 0f 45 90 90 90 90 90 [ ]*cmovne 0x90909090\(%eax\),%dx
- 8e1: 66 0f 46 90 90 90 90 90 [ ]*cmovbe 0x90909090\(%eax\),%dx
- 8e9: 66 0f 47 90 90 90 90 90 [ ]*cmova 0x90909090\(%eax\),%dx
- 8f1: 66 0f 48 90 90 90 90 90 [ ]*cmovs 0x90909090\(%eax\),%dx
- 8f9: 66 0f 49 90 90 90 90 90 [ ]*cmovns 0x90909090\(%eax\),%dx
- 901: 66 0f 4a 90 90 90 90 90 [ ]*cmovp 0x90909090\(%eax\),%dx
- 909: 66 0f 4b 90 90 90 90 90 [ ]*cmovnp 0x90909090\(%eax\),%dx
- 911: 66 0f 4c 90 90 90 90 90 [ ]*cmovl 0x90909090\(%eax\),%dx
- 919: 66 0f 4d 90 90 90 90 90 [ ]*cmovge 0x90909090\(%eax\),%dx
- 921: 66 0f 4e 90 90 90 90 90 [ ]*cmovle 0x90909090\(%eax\),%dx
- 929: 66 0f 4f 90 90 90 90 90 [ ]*cmovg 0x90909090\(%eax\),%dx
+ 893: 66 f7 90 90 90 90 90 [ ]*notw -0x6f6f6f70\(%eax\)
+ 89a: 66 ff 90 90 90 90 90 [ ]*callw \*-0x6f6f6f70\(%eax\)
+ 8a1: 66 0f 02 90 90 90 90 90 [ ]*lar -0x6f6f6f70\(%eax\),%dx
+ 8a9: 66 0f 03 90 90 90 90 90 [ ]*lsl -0x6f6f6f70\(%eax\),%dx
+ 8b1: 66 0f 40 90 90 90 90 90 [ ]*cmovo -0x6f6f6f70\(%eax\),%dx
+ 8b9: 66 0f 41 90 90 90 90 90 [ ]*cmovno -0x6f6f6f70\(%eax\),%dx
+ 8c1: 66 0f 42 90 90 90 90 90 [ ]*cmovb -0x6f6f6f70\(%eax\),%dx
+ 8c9: 66 0f 43 90 90 90 90 90 [ ]*cmovae -0x6f6f6f70\(%eax\),%dx
+ 8d1: 66 0f 44 90 90 90 90 90 [ ]*cmove -0x6f6f6f70\(%eax\),%dx
+ 8d9: 66 0f 45 90 90 90 90 90 [ ]*cmovne -0x6f6f6f70\(%eax\),%dx
+ 8e1: 66 0f 46 90 90 90 90 90 [ ]*cmovbe -0x6f6f6f70\(%eax\),%dx
+ 8e9: 66 0f 47 90 90 90 90 90 [ ]*cmova -0x6f6f6f70\(%eax\),%dx
+ 8f1: 66 0f 48 90 90 90 90 90 [ ]*cmovs -0x6f6f6f70\(%eax\),%dx
+ 8f9: 66 0f 49 90 90 90 90 90 [ ]*cmovns -0x6f6f6f70\(%eax\),%dx
+ 901: 66 0f 4a 90 90 90 90 90 [ ]*cmovp -0x6f6f6f70\(%eax\),%dx
+ 909: 66 0f 4b 90 90 90 90 90 [ ]*cmovnp -0x6f6f6f70\(%eax\),%dx
+ 911: 66 0f 4c 90 90 90 90 90 [ ]*cmovl -0x6f6f6f70\(%eax\),%dx
+ 919: 66 0f 4d 90 90 90 90 90 [ ]*cmovge -0x6f6f6f70\(%eax\),%dx
+ 921: 66 0f 4e 90 90 90 90 90 [ ]*cmovle -0x6f6f6f70\(%eax\),%dx
+ 929: 66 0f 4f 90 90 90 90 90 [ ]*cmovg -0x6f6f6f70\(%eax\),%dx
931: 66 0f a0 [ ]*pushw %fs
934: 66 0f a1 [ ]*popw %fs
- 937: 66 0f a3 90 90 90 90 90 [ ]*bt %dx,0x90909090\(%eax\)
- 93f: 66 0f a4 90 90 90 90 90 90 [ ]*shld \$0x90,%dx,0x90909090\(%eax\)
- 948: 66 0f a5 90 90 90 90 90 [ ]*shld %cl,%dx,0x90909090\(%eax\)
+ 937: 66 0f a3 90 90 90 90 90 [ ]*bt %dx,-0x6f6f6f70\(%eax\)
+ 93f: 66 0f a4 90 90 90 90 90 90 [ ]*shld \$0x90,%dx,-0x6f6f6f70\(%eax\)
+ 948: 66 0f a5 90 90 90 90 90 [ ]*shld %cl,%dx,-0x6f6f6f70\(%eax\)
950: 66 0f a8 [ ]*pushw %gs
953: 66 0f a9 [ ]*popw %gs
- 956: 66 0f ab 90 90 90 90 90 [ ]*bts %dx,0x90909090\(%eax\)
- 95e: 66 0f ac 90 90 90 90 90 90 [ ]*shrd \$0x90,%dx,0x90909090\(%eax\)
- 967: 66 0f ad 90 90 90 90 90 [ ]*shrd %cl,%dx,0x90909090\(%eax\)
- 96f: 66 0f af 90 90 90 90 90 [ ]*imul 0x90909090\(%eax\),%dx
- 977: 66 0f b1 90 90 90 90 90 [ ]*cmpxchg %dx,0x90909090\(%eax\)
- 97f: 66 0f b2 90 90 90 90 90 [ ]*lss 0x90909090\(%eax\),%dx
- 987: 66 0f b3 90 90 90 90 90 [ ]*btr %dx,0x90909090\(%eax\)
- 98f: 66 0f b4 90 90 90 90 90 [ ]*lfs 0x90909090\(%eax\),%dx
- 997: 66 0f b5 90 90 90 90 90 [ ]*lgs 0x90909090\(%eax\),%dx
- 99f: 66 0f b6 90 90 90 90 90 [ ]*movzbw 0x90909090\(%eax\),%dx
- 9a7: 66 0f bb 90 90 90 90 90 [ ]*btc %dx,0x90909090\(%eax\)
- 9af: 66 0f bc 90 90 90 90 90 [ ]*bsf 0x90909090\(%eax\),%dx
- 9b7: 66 0f bd 90 90 90 90 90 [ ]*bsr 0x90909090\(%eax\),%dx
- 9bf: 66 0f be 90 90 90 90 90 [ ]*movsbw 0x90909090\(%eax\),%dx
- 9c7: 66 0f c1 90 90 90 90 90 [ ]*xadd %dx,0x90909090\(%eax\)
- \.\.\.
+ 956: 66 0f ab 90 90 90 90 90 [ ]*bts %dx,-0x6f6f6f70\(%eax\)
+ 95e: 66 0f ac 90 90 90 90 90 90 [ ]*shrd \$0x90,%dx,-0x6f6f6f70\(%eax\)
+ 967: 66 0f ad 90 90 90 90 90 [ ]*shrd %cl,%dx,-0x6f6f6f70\(%eax\)
+ 96f: 66 0f af 90 90 90 90 90 [ ]*imul -0x6f6f6f70\(%eax\),%dx
+ 977: 66 0f b1 90 90 90 90 90 [ ]*cmpxchg %dx,-0x6f6f6f70\(%eax\)
+ 97f: 66 0f b2 90 90 90 90 90 [ ]*lss -0x6f6f6f70\(%eax\),%dx
+ 987: 66 0f b3 90 90 90 90 90 [ ]*btr %dx,-0x6f6f6f70\(%eax\)
+ 98f: 66 0f b4 90 90 90 90 90 [ ]*lfs -0x6f6f6f70\(%eax\),%dx
+ 997: 66 0f b5 90 90 90 90 90 [ ]*lgs -0x6f6f6f70\(%eax\),%dx
+ 99f: 66 0f b6 90 90 90 90 90 [ ]*movzbw -0x6f6f6f70\(%eax\),%dx
+ 9a7: 66 0f bb 90 90 90 90 90 [ ]*btc %dx,-0x6f6f6f70\(%eax\)
+ 9af: 66 0f bc 90 90 90 90 90 [ ]*bsf -0x6f6f6f70\(%eax\),%dx
+ 9b7: 66 0f bd 90 90 90 90 90 [ ]*bsr -0x6f6f6f70\(%eax\),%dx
+ 9bf: 66 0f be 90 90 90 90 90 [ ]*movsbw -0x6f6f6f70\(%eax\),%dx
+ 9c7: 66 0f c1 90 90 90 90 90 [ ]*xadd %dx,-0x6f6f6f70\(%eax\)
+ 9cf: 66 90 [ ]*xchg %ax,%ax
+ 9d1: 0f 00 c0 [ ]*sldt %eax
+ 9d4: 66 0f 00 c0 [ ]*sldt %ax
+ 9d8: 0f 00 00 [ ]*sldt \(%eax\)
+ 9db: 0f 01 e0 [ ]*smsw %eax
+ 9de: 66 0f 01 e0 [ ]*smsw %ax
+ 9e2: 0f 01 20 [ ]*smsw \(%eax\)
+ 9e5: 0f 00 c8 [ ]*str %eax
+ 9e8: 66 0f 00 c8 [ ]*str %ax
+ 9ec: 0f 00 08 [ ]*str \(%eax\)
+ 9ef: 0f ad d0 [ ]*shrd %cl,%edx,%eax
+ 9f2: 0f a5 d0 [ ]*shld %cl,%edx,%eax
+ 9f5: 85 c3 [ ]*test %eax,%ebx
+ 9f7: 85 d8 [ ]*test %ebx,%eax
+ 9f9: 85 18 [ ]*test %ebx,\(%eax\)
+#pass
diff --git a/gas/testsuite/gas/i386/opcode.s b/gas/testsuite/gas/i386/opcode.s
index 8d7cd050f165..b54b9fcf89bd 100644
--- a/gas/testsuite/gas/i386/opcode.s
+++ b/gas/testsuite/gas/i386/opcode.s
@@ -566,5 +566,24 @@ foo:
movsbw 0x90909090(%eax),%dx
xadd %dx,0x90909090(%eax)
+ xchg %ax,%ax
+
+ sldt %eax
+ sldt %ax
+ sldt (%eax)
+ smsw %eax
+ smsw %ax
+ smsw (%eax)
+ str %eax
+ str %ax
+ str (%eax)
+
+ shrd %cl,%edx,%eax
+ shld %cl,%edx,%eax
+
+ test %eax,%ebx
+ test %ebx,%eax
+ test (%eax),%ebx
+
# Force a good alignment.
.p2align 4,0
diff --git a/gas/testsuite/gas/i386/prefix.d b/gas/testsuite/gas/i386/prefix.d
index 229a2a766a30..9021f09e250b 100644
--- a/gas/testsuite/gas/i386/prefix.d
+++ b/gas/testsuite/gas/i386/prefix.d
@@ -6,10 +6,10 @@
Disassembly of section .text:
0+000 <foo>:
- 0: 9b 67 26 d9 3c [ ]*addr16 fstcw %es:\(%si\)
+ 0: 9b 26 67 d9 3c [ ]*addr16 fstcw %es:\(%si\)
5: 9b df e0 [ ]*fstsw %ax
8: 9b df e0 [ ]*fstsw %ax
b: 9b df e0 [ ]*fstsw %ax
e: 9b 67 df e0 [ ]*addr16 fstsw %ax
- 12: f3 67 66 36 a7 [ ]*repz addr16 cmpsw %es:\(%di\),%ss:\(%si\)
+ 12: 36 67 66 f3 a7 [ ]*repz addr16 cmpsw %es:\(%di\),%ss:\(%si\)
#pass
diff --git a/gas/testsuite/gas/i386/prescott.d b/gas/testsuite/gas/i386/prescott.d
index 1e66065433ac..9b701c007d4b 100644
--- a/gas/testsuite/gas/i386/prescott.d
+++ b/gas/testsuite/gas/i386/prescott.d
@@ -10,9 +10,9 @@ Disassembly of section .text:
4: 66 0f d0 ca [ ]*addsubpd %xmm2,%xmm1
8: f2 0f d0 13 [ ]*addsubps \(%ebx\),%xmm2
c: f2 0f d0 dc [ ]*addsubps %xmm4,%xmm3
- 10: df 88 90 90 90 90 [ ]*fisttp 0x90909090\(%eax\)
- 16: db 88 90 90 90 90 [ ]*fisttpl 0x90909090\(%eax\)
- 1c: dd 88 90 90 90 90 [ ]*fisttpll 0x90909090\(%eax\)
+ 10: df 88 90 90 90 90 [ ]*fisttp -0x6f6f6f70\(%eax\)
+ 16: db 88 90 90 90 90 [ ]*fisttpl -0x6f6f6f70\(%eax\)
+ 1c: dd 88 90 90 90 90 [ ]*fisttpll -0x6f6f6f70\(%eax\)
22: 66 0f 7c 65 00 [ ]*haddpd 0x0\(%ebp\),%xmm4
27: 66 0f 7c ee [ ]*haddpd %xmm6,%xmm5
2b: f2 0f 7c 37 [ ]*haddps \(%edi\),%xmm6
diff --git a/gas/testsuite/gas/i386/reloc64.d b/gas/testsuite/gas/i386/reloc64.d
index 11dfdb4fedd2..333deaa3a614 100644
--- a/gas/testsuite/gas/i386/reloc64.d
+++ b/gas/testsuite/gas/i386/reloc64.d
@@ -47,6 +47,7 @@ Disassembly of section \.text:
.*[ ]+R_X86_64_TPOFF64[ ]+xtrn
.*[ ]+R_X86_64_TPOFF32[ ]+xtrn
.*[ ]+R_X86_64_TPOFF32[ ]+xtrn
+.*[ ]+R_X86_64_TPOFF32[ ]+xtrn
Disassembly of section \.data:
#...
.*[ ]+R_X86_64_64[ ]+xtrn
diff --git a/gas/testsuite/gas/i386/reloc64.s b/gas/testsuite/gas/i386/reloc64.s
index 47ebfa8dc0ad..7fd741af8395 100644
--- a/gas/testsuite/gas/i386/reloc64.s
+++ b/gas/testsuite/gas/i386/reloc64.s
@@ -195,3 +195,6 @@ bad .byte xtrn@gottpoff
bad .byte xtrn@tlsld
bad .byte xtrn@dtpoff
bad .byte xtrn@tpoff
+
+ .text
+ mov xtrn@tpoff (%rbx), %eax
diff --git a/gas/testsuite/gas/i386/rep-suffix.d b/gas/testsuite/gas/i386/rep-suffix.d
index 9eaaf3dd5d98..ac4e606be0a5 100644
--- a/gas/testsuite/gas/i386/rep-suffix.d
+++ b/gas/testsuite/gas/i386/rep-suffix.d
@@ -8,8 +8,8 @@ Disassembly of section .text:
0+000 <_start>:
0: f3 ac[ ]+rep lodsb %ds:\(%esi\),%al
2: f3 aa[ ]+rep stosb %al,%es:\(%edi\)
- 4: f3 66 ad[ ]+rep lodsw %ds:\(%esi\),%ax
- 7: f3 66 ab[ ]+rep stosw %ax,%es:\(%edi\)
+ 4: 66 f3 ad[ ]+rep lodsw %ds:\(%esi\),%ax
+ 7: 66 f3 ab[ ]+rep stosw %ax,%es:\(%edi\)
a: f3 ad[ ]+rep lodsl %ds:\(%esi\),%eax
c: f3 ab[ ]+rep stosl %eax,%es:\(%edi\)
#pass
diff --git a/gas/testsuite/gas/i386/rep.d b/gas/testsuite/gas/i386/rep.d
index f43cc5feb6cf..279924863940 100644
--- a/gas/testsuite/gas/i386/rep.d
+++ b/gas/testsuite/gas/i386/rep.d
@@ -13,13 +13,13 @@ Disassembly of section .text:
8: f3 aa[ ]+rep stos %al,%es:\(%edi\)
a: f3 a6[ ]+repz cmpsb %es:\(%edi\),%ds:\(%esi\)
c: f3 ae[ ]+repz scas %es:\(%edi\),%al
- e: f3 66 6d[ ]+rep insw \(%dx\),%es:\(%edi\)
- 11: f3 66 6f[ ]+rep outsw %ds:\(%esi\),\(%dx\)
- 14: f3 66 a5[ ]+rep movsw %ds:\(%esi\),%es:\(%edi\)
- 17: f3 66 ad[ ]+rep lods %ds:\(%esi\),%ax
- 1a: f3 66 ab[ ]+rep stos %ax,%es:\(%edi\)
- 1d: f3 66 a7[ ]+repz cmpsw %es:\(%edi\),%ds:\(%esi\)
- 20: f3 66 af[ ]+repz scas %es:\(%edi\),%ax
+ e: 66 f3 6d[ ]+rep insw \(%dx\),%es:\(%edi\)
+ 11: 66 f3 6f[ ]+rep outsw %ds:\(%esi\),\(%dx\)
+ 14: 66 f3 a5[ ]+rep movsw %ds:\(%esi\),%es:\(%edi\)
+ 17: 66 f3 ad[ ]+rep lods %ds:\(%esi\),%ax
+ 1a: 66 f3 ab[ ]+rep stos %ax,%es:\(%edi\)
+ 1d: 66 f3 a7[ ]+repz cmpsw %es:\(%edi\),%ds:\(%esi\)
+ 20: 66 f3 af[ ]+repz scas %es:\(%edi\),%ax
23: f3 6d[ ]+rep insl \(%dx\),%es:\(%edi\)
25: f3 6f[ ]+rep outsl %ds:\(%esi\),\(%dx\)
27: f3 a5[ ]+rep movsl %ds:\(%esi\),%es:\(%edi\)
@@ -27,25 +27,25 @@ Disassembly of section .text:
2b: f3 ab[ ]+rep stos %eax,%es:\(%edi\)
2d: f3 a7[ ]+repz cmpsl %es:\(%edi\),%ds:\(%esi\)
2f: f3 af[ ]+repz scas %es:\(%edi\),%eax
- 31: f3 67 6c[ ]+rep addr16 insb \(%dx\),%es:\(%di\)
- 34: f3 67 6e[ ]+rep addr16 outsb %ds:\(%si\),\(%dx\)
- 37: f3 67 a4[ ]+rep addr16 movsb %ds:\(%si\),%es:\(%di\)
- 3a: f3 67 ac[ ]+rep addr16 lods %ds:\(%si\),%al
- 3d: f3 67 aa[ ]+rep addr16 stos %al,%es:\(%di\)
- 40: f3 67 a6[ ]+repz addr16 cmpsb %es:\(%di\),%ds:\(%si\)
- 43: f3 67 ae[ ]+repz addr16 scas %es:\(%di\),%al
- 46: f3 67 66 6d[ ]+rep addr16 insw \(%dx\),%es:\(%di\)
- 4a: f3 67 66 6f[ ]+rep addr16 outsw %ds:\(%si\),\(%dx\)
- 4e: f3 67 66 a5[ ]+rep addr16 movsw %ds:\(%si\),%es:\(%di\)
- 52: f3 67 66 ad[ ]+rep addr16 lods %ds:\(%si\),%ax
- 56: f3 67 66 ab[ ]+rep addr16 stos %ax,%es:\(%di\)
- 5a: f3 67 66 a7[ ]+repz addr16 cmpsw %es:\(%di\),%ds:\(%si\)
- 5e: f3 67 66 af[ ]+repz addr16 scas %es:\(%di\),%ax
- 62: f3 67 6d[ ]+rep addr16 insl \(%dx\),%es:\(%di\)
- 65: f3 67 6f[ ]+rep addr16 outsl %ds:\(%si\),\(%dx\)
- 68: f3 67 a5[ ]+rep addr16 movsl %ds:\(%si\),%es:\(%di\)
- 6b: f3 67 ad[ ]+rep addr16 lods %ds:\(%si\),%eax
- 6e: f3 67 ab[ ]+rep addr16 stos %eax,%es:\(%di\)
- 71: f3 67 a7[ ]+repz addr16 cmpsl %es:\(%di\),%ds:\(%si\)
- 74: f3 67 af[ ]+repz addr16 scas %es:\(%di\),%eax
+ 31: 67 f3 6c[ ]+rep addr16 insb \(%dx\),%es:\(%di\)
+ 34: 67 f3 6e[ ]+rep addr16 outsb %ds:\(%si\),\(%dx\)
+ 37: 67 f3 a4[ ]+rep addr16 movsb %ds:\(%si\),%es:\(%di\)
+ 3a: 67 f3 ac[ ]+rep addr16 lods %ds:\(%si\),%al
+ 3d: 67 f3 aa[ ]+rep addr16 stos %al,%es:\(%di\)
+ 40: 67 f3 a6[ ]+repz addr16 cmpsb %es:\(%di\),%ds:\(%si\)
+ 43: 67 f3 ae[ ]+repz addr16 scas %es:\(%di\),%al
+ 46: 67 66 f3 6d[ ]+rep addr16 insw \(%dx\),%es:\(%di\)
+ 4a: 67 66 f3 6f[ ]+rep addr16 outsw %ds:\(%si\),\(%dx\)
+ 4e: 67 66 f3 a5[ ]+rep addr16 movsw %ds:\(%si\),%es:\(%di\)
+ 52: 67 66 f3 ad[ ]+rep addr16 lods %ds:\(%si\),%ax
+ 56: 67 66 f3 ab[ ]+rep addr16 stos %ax,%es:\(%di\)
+ 5a: 67 66 f3 a7[ ]+repz addr16 cmpsw %es:\(%di\),%ds:\(%si\)
+ 5e: 67 66 f3 af[ ]+repz addr16 scas %es:\(%di\),%ax
+ 62: 67 f3 6d[ ]+rep addr16 insl \(%dx\),%es:\(%di\)
+ 65: 67 f3 6f[ ]+rep addr16 outsl %ds:\(%si\),\(%dx\)
+ 68: 67 f3 a5[ ]+rep addr16 movsl %ds:\(%si\),%es:\(%di\)
+ 6b: 67 f3 ad[ ]+rep addr16 lods %ds:\(%si\),%eax
+ 6e: 67 f3 ab[ ]+rep addr16 stos %eax,%es:\(%di\)
+ 71: 67 f3 a7[ ]+repz addr16 cmpsl %es:\(%di\),%ds:\(%si\)
+ 74: 67 f3 af[ ]+repz addr16 scas %es:\(%di\),%eax
...
diff --git a/gas/testsuite/gas/i386/rex.d b/gas/testsuite/gas/i386/rex.d
index dab6b12580d1..9023b49ace4b 100644
--- a/gas/testsuite/gas/i386/rex.d
+++ b/gas/testsuite/gas/i386/rex.d
@@ -1,17 +1,33 @@
#objdump: -dw
#name: x86-64 manual rex prefix use
-.*: +file format elf64-x86-64
+.*: +file format .*
Disassembly of section .text:
0+ <_start>:
[ ]*[0-9a-f]+:[ ]+40 0f ae 00[ ]+rex fxsavel?[ ]+\(%rax\)
-[ ]*[0-9a-f]+:[ ]+48 0f ae 00[ ]+(rex64 )?fxsaveq?[ ]+\(%rax\)
+[ ]*[0-9a-f]+:[ ]+48 0f ae 00[ ]+(rex.W )?fxsaveq?[ ]+\(%rax\)
[ ]*[0-9a-f]+:[ ]+41 0f ae 00[ ]+fxsavel?[ ]+\(%r8\)
-[ ]*[0-9a-f]+:[ ]+49 0f ae 00[ ]+(rex64Z? )?fxsaveq?[ ]+\(%r8\)
+[ ]*[0-9a-f]+:[ ]+49 0f ae 00[ ]+(rex.WB? )?fxsaveq?[ ]+\(%r8\)
[ ]*[0-9a-f]+:[ ]+42 0f ae 04 05 00 00 00 00[ ]+fxsavel?[ ]+(0x0)?\(,%r8(,1)?\)
-[ ]*[0-9a-f]+:[ ]+4a 0f ae 04 05 00 00 00 00[ ]+(rex64Y? )?fxsaveq?[ ]+(0x0)?\(,%r8(,1)?\)
+[ ]*[0-9a-f]+:[ ]+4a 0f ae 04 05 00 00 00 00[ ]+(rex.WX? )?fxsaveq?[ ]+(0x0)?\(,%r8(,1)?\)
[ ]*[0-9a-f]+:[ ]+43 0f ae 04 00[ ]+fxsavel?[ ]+\(%r8,%r8(,1)?\)
-[ ]*[0-9a-f]+:[ ]+4b 0f ae 04 00[ ]+(rex64(YZ)? )?fxsaveq?[ ]+\(%r8,%r8(,1)?\)
+[ ]*[0-9a-f]+:[ ]+4b 0f ae 04 00[ ]+(rex.W(XB)? )?fxsaveq?[ ]+\(%r8,%r8(,1)?\)
+[ ]*[0-9a-f]+:[ ]+40[ ]+rex
+[ ]*[0-9a-f]+:[ ]+41[ ]+rex.B
+[ ]*[0-9a-f]+:[ ]+42[ ]+rex.X
+[ ]*[0-9a-f]+:[ ]+43[ ]+rex.XB
+[ ]*[0-9a-f]+:[ ]+44[ ]+rex.R
+[ ]*[0-9a-f]+:[ ]+45[ ]+rex.RB
+[ ]*[0-9a-f]+:[ ]+46[ ]+rex.RX
+[ ]*[0-9a-f]+:[ ]+47[ ]+rex.RXB
+[ ]*[0-9a-f]+:[ ]+48[ ]+rex.W
+[ ]*[0-9a-f]+:[ ]+49[ ]+rex.WB
+[ ]*[0-9a-f]+:[ ]+4a[ ]+rex.WX
+[ ]*[0-9a-f]+:[ ]+4b[ ]+rex.WXB
+[ ]*[0-9a-f]+:[ ]+4c[ ]+rex.WR
+[ ]*[0-9a-f]+:[ ]+4d[ ]+rex.WRB
+[ ]*[0-9a-f]+:[ ]+4e[ ]+rex.WRX
+[ ]*[0-9a-f]+:[ ]+4f[ ]+rex.WRXB
#pass
diff --git a/gas/testsuite/gas/i386/rex.s b/gas/testsuite/gas/i386/rex.s
index a142312a2c6b..6f1e38a47038 100644
--- a/gas/testsuite/gas/i386/rex.s
+++ b/gas/testsuite/gas/i386/rex.s
@@ -9,3 +9,21 @@ _start:
rex64/fxsave (,%r8)
rex/fxsave (%r8,%r8)
rex64/fxsave (%r8,%r8)
+
+# Test prefixes family.
+ rex
+ rex.B
+ rex.X
+ rex.XB
+ rex.R
+ rex.RB
+ rex.RX
+ rex.RXB
+ rex.W
+ rex.WB
+ rex.WX
+ rex.WXB
+ rex.WR
+ rex.WRB
+ rex.WRX
+ rex.WRXB
diff --git a/gas/testsuite/gas/i386/secrel.d b/gas/testsuite/gas/i386/secrel.d
index 6a3b915fd77d..58967cb51414 100644
--- a/gas/testsuite/gas/i386/secrel.d
+++ b/gas/testsuite/gas/i386/secrel.d
@@ -4,23 +4,23 @@
.*: +file format pe-i386
RELOCATION RECORDS FOR \[\.data\]:
-OFFSET TYPE VALUE
-00000024 secrel32 \.text
-00000029 secrel32 \.text
-0000002e secrel32 \.text
-00000033 secrel32 \.text
-00000044 secrel32 \.data
-00000049 secrel32 \.data
-0000004e secrel32 \.data
-00000053 secrel32 \.data
-00000064 secrel32 \.rdata
-00000069 secrel32 \.rdata
-0000006e secrel32 \.rdata
-00000073 secrel32 \.rdata
-00000084 secrel32 ext24
-00000089 secrel32 ext2d
-0000008e secrel32 ext36
-00000093 secrel32 ext3f
+OFFSET[ ]+TYPE[ ]+VALUE
+0+24 secrel32 \.text
+0+29 secrel32 \.text
+0+2e secrel32 \.text
+0+33 secrel32 \.text
+0+44 secrel32 \.data
+0+49 secrel32 \.data
+0+4e secrel32 \.data
+0+53 secrel32 \.data
+0+64 secrel32 \.rdata
+0+69 secrel32 \.rdata
+0+6e secrel32 \.rdata
+0+73 secrel32 \.rdata
+0+84 secrel32 ext24
+0+89 secrel32 ext2d
+0+8e secrel32 ext36
+0+93 secrel32 ext3f
Contents of section \.text:
diff --git a/gas/testsuite/gas/i386/simd-intel.d b/gas/testsuite/gas/i386/simd-intel.d
new file mode 100644
index 000000000000..7f4cc102b5c4
--- /dev/null
+++ b/gas/testsuite/gas/i386/simd-intel.d
@@ -0,0 +1,37 @@
+#source: simd.s
+#as: -J
+#objdump: -dw -Mintel
+#name: i386 SIMD (Intel mode)
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <_start>:
+[ ]*[a-f0-9]+: f2 0f d0 0d 78 56 34 12 addsubps xmm1,XMMWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: 66 0f 2f 0d 78 56 34 12 comisd xmm1,QWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: 0f 2f 0d 78 56 34 12 comiss xmm1,DWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: f3 0f e6 0d 78 56 34 12 cvtdq2pd xmm1,QWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: f2 0f e6 0d 78 56 34 12 cvtpd2dq xmm1,XMMWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: 0f 5a 0d 78 56 34 12 cvtps2pd xmm1,QWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: f3 0f 5b 0d 78 56 34 12 cvttps2dq xmm1,XMMWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: f2 0f 7c 0d 78 56 34 12 haddps xmm1,XMMWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: f3 0f 7f 0d 78 56 34 12 movdqu XMMWORD PTR ds:0x12345678,xmm1
+[ ]*[a-f0-9]+: f3 0f 6f 0d 78 56 34 12 movdqu xmm1,XMMWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: 66 0f 17 0d 78 56 34 12 movhpd QWORD PTR ds:0x12345678,xmm1
+[ ]*[a-f0-9]+: 66 0f 16 0d 78 56 34 12 movhpd xmm1,QWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: 0f 17 0d 78 56 34 12 movhps QWORD PTR ds:0x12345678,xmm1
+[ ]*[a-f0-9]+: 0f 16 0d 78 56 34 12 movhps xmm1,QWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: 66 0f 13 0d 78 56 34 12 movlpd QWORD PTR ds:0x12345678,xmm1
+[ ]*[a-f0-9]+: 66 0f 12 0d 78 56 34 12 movlpd xmm1,QWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: 0f 13 0d 78 56 34 12 movlps QWORD PTR ds:0x12345678,xmm1
+[ ]*[a-f0-9]+: 0f 12 0d 78 56 34 12 movlps xmm1,QWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: f3 0f 16 0d 78 56 34 12 movshdup xmm1,XMMWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: f3 0f 12 0d 78 56 34 12 movsldup xmm1,XMMWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: f3 0f 70 0d 78 56 34 12 90 pshufhw xmm1,XMMWORD PTR ds:0x12345678,0x90
+[ ]*[a-f0-9]+: f2 0f 70 0d 78 56 34 12 90 pshuflw xmm1,XMMWORD PTR ds:0x12345678,0x90
+[ ]*[a-f0-9]+: 0f 60 0d 78 56 34 12 punpcklbw mm1,DWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: 0f 62 0d 78 56 34 12 punpckldq mm1,DWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: 0f 61 0d 78 56 34 12 punpcklwd mm1,DWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: 66 0f 2e 0d 78 56 34 12 ucomisd xmm1,QWORD PTR ds:0x12345678
+[ ]*[a-f0-9]+: 0f 2e 0d 78 56 34 12 ucomiss xmm1,DWORD PTR ds:0x12345678
diff --git a/gas/testsuite/gas/i386/simd.d b/gas/testsuite/gas/i386/simd.d
new file mode 100644
index 000000000000..38a296af15d2
--- /dev/null
+++ b/gas/testsuite/gas/i386/simd.d
@@ -0,0 +1,36 @@
+#as: -J
+#objdump: -dw
+#name: i386 SIMD
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <_start>:
+[ ]*[a-f0-9]+: f2 0f d0 0d 78 56 34 12 addsubps 0x12345678,%xmm1
+[ ]*[a-f0-9]+: 66 0f 2f 0d 78 56 34 12 comisd 0x12345678,%xmm1
+[ ]*[a-f0-9]+: 0f 2f 0d 78 56 34 12 comiss 0x12345678,%xmm1
+[ ]*[a-f0-9]+: f3 0f e6 0d 78 56 34 12 cvtdq2pd 0x12345678,%xmm1
+[ ]*[a-f0-9]+: f2 0f e6 0d 78 56 34 12 cvtpd2dq 0x12345678,%xmm1
+[ ]*[a-f0-9]+: 0f 5a 0d 78 56 34 12 cvtps2pd 0x12345678,%xmm1
+[ ]*[a-f0-9]+: f3 0f 5b 0d 78 56 34 12 cvttps2dq 0x12345678,%xmm1
+[ ]*[a-f0-9]+: f2 0f 7c 0d 78 56 34 12 haddps 0x12345678,%xmm1
+[ ]*[a-f0-9]+: f3 0f 7f 0d 78 56 34 12 movdqu %xmm1,0x12345678
+[ ]*[a-f0-9]+: f3 0f 6f 0d 78 56 34 12 movdqu 0x12345678,%xmm1
+[ ]*[a-f0-9]+: 66 0f 17 0d 78 56 34 12 movhpd %xmm1,0x12345678
+[ ]*[a-f0-9]+: 66 0f 16 0d 78 56 34 12 movhpd 0x12345678,%xmm1
+[ ]*[a-f0-9]+: 0f 17 0d 78 56 34 12 movhps %xmm1,0x12345678
+[ ]*[a-f0-9]+: 0f 16 0d 78 56 34 12 movhps 0x12345678,%xmm1
+[ ]*[a-f0-9]+: 66 0f 13 0d 78 56 34 12 movlpd %xmm1,0x12345678
+[ ]*[a-f0-9]+: 66 0f 12 0d 78 56 34 12 movlpd 0x12345678,%xmm1
+[ ]*[a-f0-9]+: 0f 13 0d 78 56 34 12 movlps %xmm1,0x12345678
+[ ]*[a-f0-9]+: 0f 12 0d 78 56 34 12 movlps 0x12345678,%xmm1
+[ ]*[a-f0-9]+: f3 0f 16 0d 78 56 34 12 movshdup 0x12345678,%xmm1
+[ ]*[a-f0-9]+: f3 0f 12 0d 78 56 34 12 movsldup 0x12345678,%xmm1
+[ ]*[a-f0-9]+: f3 0f 70 0d 78 56 34 12 90 pshufhw \$0x90,0x12345678,%xmm1
+[ ]*[a-f0-9]+: f2 0f 70 0d 78 56 34 12 90 pshuflw \$0x90,0x12345678,%xmm1
+[ ]*[a-f0-9]+: 0f 60 0d 78 56 34 12 punpcklbw 0x12345678,%mm1
+[ ]*[a-f0-9]+: 0f 62 0d 78 56 34 12 punpckldq 0x12345678,%mm1
+[ ]*[a-f0-9]+: 0f 61 0d 78 56 34 12 punpcklwd 0x12345678,%mm1
+[ ]*[a-f0-9]+: 66 0f 2e 0d 78 56 34 12 ucomisd 0x12345678,%xmm1
+[ ]*[a-f0-9]+: 0f 2e 0d 78 56 34 12 ucomiss 0x12345678,%xmm1
diff --git a/gas/testsuite/gas/i386/simd.s b/gas/testsuite/gas/i386/simd.s
new file mode 100644
index 000000000000..cd0cf93cb266
--- /dev/null
+++ b/gas/testsuite/gas/i386/simd.s
@@ -0,0 +1,29 @@
+ .text
+_start:
+ addsubps 0x12345678,%xmm1
+ comisd 0x12345678,%xmm1
+ comiss 0x12345678,%xmm1
+ cvtdq2pd 0x12345678,%xmm1
+ cvtpd2dq 0x12345678,%xmm1
+ cvtps2pd 0x12345678,%xmm1
+ cvttps2dq 0x12345678,%xmm1
+ haddps 0x12345678,%xmm1
+ movdqu %xmm1,0x12345678
+ movdqu 0x12345678,%xmm1
+ movhpd %xmm1,0x12345678
+ movhpd 0x12345678,%xmm1
+ movhps %xmm1,0x12345678
+ movhps 0x12345678,%xmm1
+ movlpd %xmm1,0x12345678
+ movlpd 0x12345678,%xmm1
+ movlps %xmm1,0x12345678
+ movlps 0x12345678,%xmm1
+ movshdup 0x12345678,%xmm1
+ movsldup 0x12345678,%xmm1
+ pshufhw $0x90,0x12345678,%xmm1
+ pshuflw $0x90,0x12345678,%xmm1
+ punpcklbw 0x12345678,%mm1
+ punpckldq 0x12345678,%mm1
+ punpcklwd 0x12345678,%mm1
+ ucomisd 0x12345678,%xmm1
+ ucomiss 0x12345678,%xmm1
diff --git a/gas/testsuite/gas/i386/sse2.d b/gas/testsuite/gas/i386/sse2.d
index eb6a161cbf98..8b067f568d7e 100644
--- a/gas/testsuite/gas/i386/sse2.d
+++ b/gas/testsuite/gas/i386/sse2.d
@@ -61,16 +61,16 @@ Disassembly of section .text:
[ ]+f5: f2 0f c2 f8 07[ ]+cmpordsd %xmm0,%xmm7
[ ]+fa: 66 0f 2f c1[ ]+comisd %xmm1,%xmm0
[ ]+fe: 66 0f 2f 0a[ ]+comisd \(%edx\),%xmm1
- 102: 66 0f 2a d3[ ]+cvtpi2pd %xmm3,%xmm2
+ 102: 66 0f 2a d3[ ]+cvtpi2pd %mm3,%xmm2
106: 66 0f 2a 1c 24[ ]+cvtpi2pd \(%esp\),%xmm3
10b: f2 0f 2a e5[ ]+cvtsi2sd %ebp,%xmm4
10f: f2 0f 2a 2e[ ]+cvtsi2sd \(%esi\),%xmm5
- 113: 66 0f 2d f7[ ]+cvtpd2pi %xmm7,%xmm6
- 117: 66 0f 2d 38[ ]+cvtpd2pi \(%eax\),%xmm7
+ 113: 66 0f 2d f7[ ]+cvtpd2pi %xmm7,%mm6
+ 117: 66 0f 2d 38[ ]+cvtpd2pi \(%eax\),%mm7
11b: f2 0f 2d 01[ ]+cvtsd2si \(%ecx\),%eax
11f: f2 0f 2d ca[ ]+cvtsd2si %xmm2,%ecx
- 123: 66 0f 2c 13[ ]+cvttpd2pi \(%ebx\),%xmm2
- 127: 66 0f 2c dc[ ]+cvttpd2pi %xmm4,%xmm3
+ 123: 66 0f 2c 13[ ]+cvttpd2pi \(%ebx\),%mm2
+ 127: 66 0f 2c dc[ ]+cvttpd2pi %xmm4,%mm3
12b: f2 0f 2c 65 00[ ]+cvttsd2si 0x0\(%ebp\),%esp
130: f2 0f 2c ee[ ]+cvttsd2si %xmm6,%ebp
134: 66 0f 5e c1[ ]+divpd[ ]+%xmm1,%xmm0
@@ -140,9 +140,9 @@ Disassembly of section .text:
239: f3 0f 5b c8[ ]+cvttps2dq %xmm0,%xmm1
23d: 66 0f f7 c8[ ]+maskmovdqu %xmm0,%xmm1
241: 66 0f 6f c8[ ]+movdqa %xmm0,%xmm1
- 245: 66 0f 6f c8[ ]+movdqa %xmm0,%xmm1
+ 245: 66 0f 7f 06[ ]+movdqa %xmm0,\(%esi\)
249: f3 0f 6f c8[ ]+movdqu %xmm0,%xmm1
- 24d: f3 0f 6f c8[ ]+movdqu %xmm0,%xmm1
+ 24d: f3 0f 7f 06[ ]+movdqu %xmm0,\(%esi\)
251: f2 0f d6 c8[ ]+movdq2q %xmm0,%mm1
255: f3 0f d6 c8[ ]+movq2dq %mm0,%xmm1
259: 66 0f f4 c8[ ]+pmuludq %xmm0,%xmm1
@@ -153,4 +153,4 @@ Disassembly of section .text:
270: 66 0f 73 f8 01[ ]+pslldq \$0x1,%xmm0
275: 66 0f 73 d8 01[ ]+psrldq \$0x1,%xmm0
27a: 66 0f 6d c8[ ]+punpckhqdq %xmm0,%xmm1
- 27e: 89 f6[ ]+mov[ ]+%esi,%esi
+ 27e: 66 90[ ]+xchg[ ]+%ax,%ax
diff --git a/gas/testsuite/gas/i386/sse2.s b/gas/testsuite/gas/i386/sse2.s
index ba5ae8d7b474..edb79fcba353 100644
--- a/gas/testsuite/gas/i386/sse2.s
+++ b/gas/testsuite/gas/i386/sse2.s
@@ -132,9 +132,9 @@ foo:
cvttps2dq %xmm0, %xmm1
maskmovdqu %xmm0, %xmm1
movdqa %xmm0, %xmm1
- movdqa %xmm0, %xmm1
- movdqu %xmm0, %xmm1
+ movdqa %xmm0, (%esi)
movdqu %xmm0, %xmm1
+ movdqu %xmm0, (%esi)
movdq2q %xmm0, %mm1
movq2dq %mm0, %xmm1
pmuludq %xmm0, %xmm1
diff --git a/gas/testsuite/gas/i386/sse4_1.d b/gas/testsuite/gas/i386/sse4_1.d
new file mode 100644
index 000000000000..6797228a5299
--- /dev/null
+++ b/gas/testsuite/gas/i386/sse4_1.d
@@ -0,0 +1,102 @@
+#objdump: -dw
+#name: i386 SSE4.1
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+000 <foo>:
+[ ]*[0-9a-f]+: 66 0f 3a 0d 01 00 blendpd \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0d c1 00 blendpd \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0c 01 00 blendps \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0c c1 00 blendps \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 15 01 blendvpd %xmm0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 15 c1 blendvpd %xmm0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 14 01 blendvps %xmm0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 14 c1 blendvps %xmm0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 41 01 00 dppd \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 41 c1 00 dppd \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 40 01 00 dpps \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 40 c1 00 dpps \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 17 c1 00 extractps \$0x0,%xmm0,%ecx
+[ ]*[0-9a-f]+: 66 0f 3a 17 01 00 extractps \$0x0,%xmm0,\(%ecx\)
+[ ]*[0-9a-f]+: 66 0f 3a 21 c1 00 insertps \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 21 01 00 insertps \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 2a 01 movntdqa \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 42 01 00 mpsadbw \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 42 c1 00 mpsadbw \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 2b 01 packusdw \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 2b c1 packusdw %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 10 01 pblendvb %xmm0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 10 c1 pblendvb %xmm0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0e 01 00 pblendw \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0e c1 00 pblendw \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 29 c1 pcmpeqq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 29 01 pcmpeqq \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 14 c1 00 pextrb \$0x0,%xmm0,%ecx
+[ ]*[0-9a-f]+: 66 0f 3a 14 01 00 pextrb \$0x0,%xmm0,\(%ecx\)
+[ ]*[0-9a-f]+: 66 0f 3a 16 c1 00 pextrd \$0x0,%xmm0,%ecx
+[ ]*[0-9a-f]+: 66 0f 3a 16 01 00 pextrd \$0x0,%xmm0,\(%ecx\)
+[ ]*[0-9a-f]+: 66 0f c5 c8 00 pextrw \$0x0,%xmm0,%ecx
+[ ]*[0-9a-f]+: 66 0f 3a 15 01 00 pextrw \$0x0,%xmm0,\(%ecx\)
+[ ]*[0-9a-f]+: 66 0f 38 41 c1 phminposuw %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 41 01 phminposuw \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 20 01 00 pinsrb \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 20 c1 00 pinsrb \$0x0,%ecx,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 22 01 00 pinsrd \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 22 c1 00 pinsrd \$0x0,%ecx,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3c c1 pmaxsb %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3c 01 pmaxsb \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3d c1 pmaxsd %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3d 01 pmaxsd \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3f c1 pmaxud %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3f 01 pmaxud \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3e c1 pmaxuw %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3e 01 pmaxuw \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 38 c1 pminsb %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 38 01 pminsb \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 39 c1 pminsd %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 39 01 pminsd \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3b c1 pminud %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3b 01 pminud \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3a c1 pminuw %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3a 01 pminuw \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 20 c1 pmovsxbw %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 20 01 pmovsxbw \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 21 c1 pmovsxbd %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 21 01 pmovsxbd \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 22 c1 pmovsxbq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 22 01 pmovsxbq \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 23 c1 pmovsxwd %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 23 01 pmovsxwd \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 24 c1 pmovsxwq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 24 01 pmovsxwq \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 25 c1 pmovsxdq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 25 01 pmovsxdq \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 30 c1 pmovzxbw %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 30 01 pmovzxbw \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 31 c1 pmovzxbd %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 31 01 pmovzxbd \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 32 c1 pmovzxbq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 32 01 pmovzxbq \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 33 c1 pmovzxwd %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 33 01 pmovzxwd \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 34 c1 pmovzxwq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 34 01 pmovzxwq \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 35 c1 pmovzxdq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 35 01 pmovzxdq \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 28 c1 pmuldq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 28 01 pmuldq \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 40 c1 pmulld %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 40 01 pmulld \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 17 c1 ptest %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 17 01 ptest \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 09 01 00 roundpd \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 09 c1 00 roundpd \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 08 01 00 roundps \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 08 c1 00 roundps \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0b 01 00 roundsd \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0b c1 00 roundsd \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0a 01 00 roundss \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0a c1 00 roundss \$0x0,%xmm1,%xmm0
+#pass
diff --git a/gas/testsuite/gas/i386/sse4_1.s b/gas/testsuite/gas/i386/sse4_1.s
new file mode 100644
index 000000000000..258dde8a4b9e
--- /dev/null
+++ b/gas/testsuite/gas/i386/sse4_1.s
@@ -0,0 +1,99 @@
+# Streaming SIMD extensions 4.1 Instructions
+
+ .text
+foo:
+ blendpd $0,(%ecx),%xmm0
+ blendpd $0,%xmm1,%xmm0
+ blendps $0,(%ecx),%xmm0
+ blendps $0,%xmm1,%xmm0
+ blendvpd %xmm0,(%ecx),%xmm0
+ blendvpd %xmm0,%xmm1,%xmm0
+ blendvps %xmm0,(%ecx),%xmm0
+ blendvps %xmm0,%xmm1,%xmm0
+ dppd $0,(%ecx),%xmm0
+ dppd $0,%xmm1,%xmm0
+ dpps $0,(%ecx),%xmm0
+ dpps $0,%xmm1,%xmm0
+ extractps $0,%xmm0,%ecx
+ extractps $0,%xmm0,(%ecx)
+ insertps $0,%xmm1,%xmm0
+ insertps $0,(%ecx),%xmm0
+ movntdqa (%ecx),%xmm0
+ mpsadbw $0,(%ecx),%xmm0
+ mpsadbw $0,%xmm1,%xmm0
+ packusdw (%ecx),%xmm0
+ packusdw %xmm1,%xmm0
+ pblendvb %xmm0,(%ecx),%xmm0
+ pblendvb %xmm0,%xmm1,%xmm0
+ pblendw $0,(%ecx),%xmm0
+ pblendw $0,%xmm1,%xmm0
+ pcmpeqq %xmm1,%xmm0
+ pcmpeqq (%ecx),%xmm0
+ pextrb $0,%xmm0,%ecx
+ pextrb $0,%xmm0,(%ecx)
+ pextrd $0,%xmm0,%ecx
+ pextrd $0,%xmm0,(%ecx)
+ pextrw $0,%xmm0,%ecx
+ pextrw $0,%xmm0,(%ecx)
+ phminposuw %xmm1,%xmm0
+ phminposuw (%ecx),%xmm0
+ pinsrb $0,(%ecx),%xmm0
+ pinsrb $0,%ecx,%xmm0
+ pinsrd $0,(%ecx),%xmm0
+ pinsrd $0,%ecx,%xmm0
+ pmaxsb %xmm1,%xmm0
+ pmaxsb (%ecx),%xmm0
+ pmaxsd %xmm1,%xmm0
+ pmaxsd (%ecx),%xmm0
+ pmaxud %xmm1,%xmm0
+ pmaxud (%ecx),%xmm0
+ pmaxuw %xmm1,%xmm0
+ pmaxuw (%ecx),%xmm0
+ pminsb %xmm1,%xmm0
+ pminsb (%ecx),%xmm0
+ pminsd %xmm1,%xmm0
+ pminsd (%ecx),%xmm0
+ pminud %xmm1,%xmm0
+ pminud (%ecx),%xmm0
+ pminuw %xmm1,%xmm0
+ pminuw (%ecx),%xmm0
+ pmovsxbw %xmm1,%xmm0
+ pmovsxbw (%ecx),%xmm0
+ pmovsxbd %xmm1,%xmm0
+ pmovsxbd (%ecx),%xmm0
+ pmovsxbq %xmm1,%xmm0
+ pmovsxbq (%ecx),%xmm0
+ pmovsxwd %xmm1,%xmm0
+ pmovsxwd (%ecx),%xmm0
+ pmovsxwq %xmm1,%xmm0
+ pmovsxwq (%ecx),%xmm0
+ pmovsxdq %xmm1,%xmm0
+ pmovsxdq (%ecx),%xmm0
+ pmovzxbw %xmm1,%xmm0
+ pmovzxbw (%ecx),%xmm0
+ pmovzxbd %xmm1,%xmm0
+ pmovzxbd (%ecx),%xmm0
+ pmovzxbq %xmm1,%xmm0
+ pmovzxbq (%ecx),%xmm0
+ pmovzxwd %xmm1,%xmm0
+ pmovzxwd (%ecx),%xmm0
+ pmovzxwq %xmm1,%xmm0
+ pmovzxwq (%ecx),%xmm0
+ pmovzxdq %xmm1,%xmm0
+ pmovzxdq (%ecx),%xmm0
+ pmuldq %xmm1,%xmm0
+ pmuldq (%ecx),%xmm0
+ pmulld %xmm1,%xmm0
+ pmulld (%ecx),%xmm0
+ ptest %xmm1,%xmm0
+ ptest (%ecx),%xmm0
+ roundpd $0,(%ecx),%xmm0
+ roundpd $0,%xmm1,%xmm0
+ roundps $0,(%ecx),%xmm0
+ roundps $0,%xmm1,%xmm0
+ roundsd $0,(%ecx),%xmm0
+ roundsd $0,%xmm1,%xmm0
+ roundss $0,(%ecx),%xmm0
+ roundss $0,%xmm1,%xmm0
+
+ .p2align 4,0
diff --git a/gas/testsuite/gas/i386/sse4_2.d b/gas/testsuite/gas/i386/sse4_2.d
new file mode 100644
index 000000000000..b889769ac4c7
--- /dev/null
+++ b/gas/testsuite/gas/i386/sse4_2.d
@@ -0,0 +1,36 @@
+#objdump: -dw
+#name: i386 SSE4.2
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+000 <foo>:
+[ ]*[0-9a-f]+: f2 0f 38 f0 d9 crc32b %cl,%ebx
+[ ]*[0-9a-f]+: 66 f2 0f 38 f1 d9 crc32w %cx,%ebx
+[ ]*[0-9a-f]+: f2 0f 38 f1 d9 crc32l %ecx,%ebx
+[ ]*[0-9a-f]+: f2 0f 38 f0 19 crc32b \(%ecx\),%ebx
+[ ]*[0-9a-f]+: 66 f2 0f 38 f1 19 crc32w \(%ecx\),%ebx
+[ ]*[0-9a-f]+: f2 0f 38 f1 19 crc32l \(%ecx\),%ebx
+[ ]*[0-9a-f]+: f2 0f 38 f0 d9 crc32b %cl,%ebx
+[ ]*[0-9a-f]+: 66 f2 0f 38 f1 d9 crc32w %cx,%ebx
+[ ]*[0-9a-f]+: f2 0f 38 f1 d9 crc32l %ecx,%ebx
+[ ]*[0-9a-f]+: 66 0f 38 37 01 pcmpgtq \(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 37 c1 pcmpgtq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 61 01 00 pcmpestri \$0x0,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 61 c1 00 pcmpestri \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 60 01 01 pcmpestrm \$0x1,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 60 c1 01 pcmpestrm \$0x1,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 63 01 02 pcmpistri \$0x2,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 63 c1 02 pcmpistri \$0x2,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 62 01 03 pcmpistrm \$0x3,\(%ecx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 62 c1 03 pcmpistrm \$0x3,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 f3 0f b8 19 popcnt \(%ecx\),%bx
+[ ]*[0-9a-f]+: f3 0f b8 19 popcnt \(%ecx\),%ebx
+[ ]*[0-9a-f]+: 66 f3 0f b8 19 popcnt \(%ecx\),%bx
+[ ]*[0-9a-f]+: f3 0f b8 19 popcnt \(%ecx\),%ebx
+[ ]*[0-9a-f]+: 66 f3 0f b8 d9 popcnt %cx,%bx
+[ ]*[0-9a-f]+: f3 0f b8 d9 popcnt %ecx,%ebx
+[ ]*[0-9a-f]+: 66 f3 0f b8 d9 popcnt %cx,%bx
+[ ]*[0-9a-f]+: f3 0f b8 d9 popcnt %ecx,%ebx
+#pass
diff --git a/gas/testsuite/gas/i386/sse4_2.s b/gas/testsuite/gas/i386/sse4_2.s
new file mode 100644
index 000000000000..a6c2e4610ee1
--- /dev/null
+++ b/gas/testsuite/gas/i386/sse4_2.s
@@ -0,0 +1,33 @@
+# Streaming SIMD extensions 4.2 Instructions
+
+ .text
+foo:
+ crc32 %cl,%ebx
+ crc32 %cx,%ebx
+ crc32 %ecx,%ebx
+ crc32b (%ecx),%ebx
+ crc32w (%ecx),%ebx
+ crc32l (%ecx),%ebx
+ crc32b %cl,%ebx
+ crc32w %cx,%ebx
+ crc32l %ecx,%ebx
+ pcmpgtq (%ecx),%xmm0
+ pcmpgtq %xmm1,%xmm0
+ pcmpestri $0x0,(%ecx),%xmm0
+ pcmpestri $0x0,%xmm1,%xmm0
+ pcmpestrm $0x1,(%ecx),%xmm0
+ pcmpestrm $0x1,%xmm1,%xmm0
+ pcmpistri $0x2,(%ecx),%xmm0
+ pcmpistri $0x2,%xmm1,%xmm0
+ pcmpistrm $0x3,(%ecx),%xmm0
+ pcmpistrm $0x3,%xmm1,%xmm0
+ popcnt (%ecx),%bx
+ popcnt (%ecx),%ebx
+ popcntw (%ecx),%bx
+ popcntl (%ecx),%ebx
+ popcnt %cx,%bx
+ popcnt %ecx,%ebx
+ popcntw %cx,%bx
+ popcntl %ecx,%ebx
+
+ .p2align 4,0
diff --git a/gas/testsuite/gas/i386/ssemmx2.d b/gas/testsuite/gas/i386/ssemmx2.d
index 04ccbafe457b..f25bc5f80b65 100644
--- a/gas/testsuite/gas/i386/ssemmx2.d
+++ b/gas/testsuite/gas/i386/ssemmx2.d
@@ -34,55 +34,55 @@ Disassembly of section .text:
[ ]+6b: f2 0f 70 da 01[ ]+pshuflw \$0x1,%xmm2,%xmm3
[ ]+70: f2 0f 70 75 00 04[ ]+pshuflw \$0x4,0x0\(%ebp\),%xmm6
[ ]+76: 66 0f e7 10[ ]+movntdq %xmm2,\(%eax\)
-[ ]+7a: 66 0f 60 90 90 90 90 90 punpcklbw 0x90909090\(%eax\),%xmm2
-[ ]+82: 66 0f 61 90 90 90 90 90 punpcklwd 0x90909090\(%eax\),%xmm2
-[ ]+8a: 66 0f 62 90 90 90 90 90 punpckldq 0x90909090\(%eax\),%xmm2
-[ ]+92: 66 0f 63 90 90 90 90 90 packsswb 0x90909090\(%eax\),%xmm2
-[ ]+9a: 66 0f 64 90 90 90 90 90 pcmpgtb 0x90909090\(%eax\),%xmm2
-[ ]+a2: 66 0f 65 90 90 90 90 90 pcmpgtw 0x90909090\(%eax\),%xmm2
-[ ]+aa: 66 0f 66 90 90 90 90 90 pcmpgtd 0x90909090\(%eax\),%xmm2
-[ ]+b2: 66 0f 67 90 90 90 90 90 packuswb 0x90909090\(%eax\),%xmm2
-[ ]+ba: 66 0f 68 90 90 90 90 90 punpckhbw 0x90909090\(%eax\),%xmm2
-[ ]+c2: 66 0f 69 90 90 90 90 90 punpckhwd 0x90909090\(%eax\),%xmm2
-[ ]+ca: 66 0f 6a 90 90 90 90 90 punpckhdq 0x90909090\(%eax\),%xmm2
-[ ]+d2: 66 0f 6b 90 90 90 90 90 packssdw 0x90909090\(%eax\),%xmm2
-[ ]+da: 66 0f 6e 90 90 90 90 90 movd[ ]+0x90909090\(%eax\),%xmm2
-[ ]+e2: f3 0f 7e 90 90 90 90 90 movq[ ]+0x90909090\(%eax\),%xmm2
+[ ]+7a: 66 0f 60 90 90 90 90 90 punpcklbw -0x6f6f6f70\(%eax\),%xmm2
+[ ]+82: 66 0f 61 90 90 90 90 90 punpcklwd -0x6f6f6f70\(%eax\),%xmm2
+[ ]+8a: 66 0f 62 90 90 90 90 90 punpckldq -0x6f6f6f70\(%eax\),%xmm2
+[ ]+92: 66 0f 63 90 90 90 90 90 packsswb -0x6f6f6f70\(%eax\),%xmm2
+[ ]+9a: 66 0f 64 90 90 90 90 90 pcmpgtb -0x6f6f6f70\(%eax\),%xmm2
+[ ]+a2: 66 0f 65 90 90 90 90 90 pcmpgtw -0x6f6f6f70\(%eax\),%xmm2
+[ ]+aa: 66 0f 66 90 90 90 90 90 pcmpgtd -0x6f6f6f70\(%eax\),%xmm2
+[ ]+b2: 66 0f 67 90 90 90 90 90 packuswb -0x6f6f6f70\(%eax\),%xmm2
+[ ]+ba: 66 0f 68 90 90 90 90 90 punpckhbw -0x6f6f6f70\(%eax\),%xmm2
+[ ]+c2: 66 0f 69 90 90 90 90 90 punpckhwd -0x6f6f6f70\(%eax\),%xmm2
+[ ]+ca: 66 0f 6a 90 90 90 90 90 punpckhdq -0x6f6f6f70\(%eax\),%xmm2
+[ ]+d2: 66 0f 6b 90 90 90 90 90 packssdw -0x6f6f6f70\(%eax\),%xmm2
+[ ]+da: 66 0f 6e 90 90 90 90 90 movd[ ]+-0x6f6f6f70\(%eax\),%xmm2
+[ ]+e2: f3 0f 7e 90 90 90 90 90 movq[ ]+-0x6f6f6f70\(%eax\),%xmm2
[ ]+ea: 66 0f 71 d0 90[ ]+psrlw[ ]+\$0x90,%xmm0
[ ]+ef: 66 0f 72 d0 90[ ]+psrld[ ]+\$0x90,%xmm0
[ ]+f4: 66 0f 73 d0 90[ ]+psrlq[ ]+\$0x90,%xmm0
-[ ]+f9: 66 0f 74 90 90 90 90 90 pcmpeqb 0x90909090\(%eax\),%xmm2
- 101: 66 0f 75 90 90 90 90 90 pcmpeqw 0x90909090\(%eax\),%xmm2
- 109: 66 0f 76 90 90 90 90 90 pcmpeqd 0x90909090\(%eax\),%xmm2
- 111: 66 0f 7e 90 90 90 90 90 movd[ ]+%xmm2,0x90909090\(%eax\)
- 119: 66 0f d6 90 90 90 90 90 movq[ ]+%xmm2,0x90909090\(%eax\)
- 121: 66 0f d1 90 90 90 90 90 psrlw[ ]+0x90909090\(%eax\),%xmm2
- 129: 66 0f d2 90 90 90 90 90 psrld[ ]+0x90909090\(%eax\),%xmm2
- 131: 66 0f d3 90 90 90 90 90 psrlq[ ]+0x90909090\(%eax\),%xmm2
- 139: 66 0f d5 90 90 90 90 90 pmullw 0x90909090\(%eax\),%xmm2
- 141: 66 0f d8 90 90 90 90 90 psubusb 0x90909090\(%eax\),%xmm2
- 149: 66 0f d9 90 90 90 90 90 psubusw 0x90909090\(%eax\),%xmm2
- 151: 66 0f db 90 90 90 90 90 pand[ ]+0x90909090\(%eax\),%xmm2
- 159: 66 0f dc 90 90 90 90 90 paddusb 0x90909090\(%eax\),%xmm2
- 161: 66 0f dd 90 90 90 90 90 paddusw 0x90909090\(%eax\),%xmm2
- 169: 66 0f df 90 90 90 90 90 pandn[ ]+0x90909090\(%eax\),%xmm2
- 171: 66 0f e1 90 90 90 90 90 psraw[ ]+0x90909090\(%eax\),%xmm2
- 179: 66 0f e2 90 90 90 90 90 psrad[ ]+0x90909090\(%eax\),%xmm2
- 181: 66 0f e5 90 90 90 90 90 pmulhw 0x90909090\(%eax\),%xmm2
- 189: 66 0f e8 90 90 90 90 90 psubsb 0x90909090\(%eax\),%xmm2
- 191: 66 0f e9 90 90 90 90 90 psubsw 0x90909090\(%eax\),%xmm2
- 199: 66 0f eb 90 90 90 90 90 por[ ]+0x90909090\(%eax\),%xmm2
- 1a1: 66 0f ec 90 90 90 90 90 paddsb 0x90909090\(%eax\),%xmm2
- 1a9: 66 0f ed 90 90 90 90 90 paddsw 0x90909090\(%eax\),%xmm2
- 1b1: 66 0f ef 90 90 90 90 90 pxor[ ]+0x90909090\(%eax\),%xmm2
- 1b9: 66 0f f1 90 90 90 90 90 psllw[ ]+0x90909090\(%eax\),%xmm2
- 1c1: 66 0f f2 90 90 90 90 90 pslld[ ]+0x90909090\(%eax\),%xmm2
- 1c9: 66 0f f3 90 90 90 90 90 psllq[ ]+0x90909090\(%eax\),%xmm2
- 1d1: 66 0f f5 90 90 90 90 90 pmaddwd 0x90909090\(%eax\),%xmm2
- 1d9: 66 0f f8 90 90 90 90 90 psubb[ ]+0x90909090\(%eax\),%xmm2
- 1e1: 66 0f f9 90 90 90 90 90 psubw[ ]+0x90909090\(%eax\),%xmm2
- 1e9: 66 0f fa 90 90 90 90 90 psubd[ ]+0x90909090\(%eax\),%xmm2
- 1f1: 66 0f fc 90 90 90 90 90 paddb[ ]+0x90909090\(%eax\),%xmm2
- 1f9: 66 0f fd 90 90 90 90 90 paddw[ ]+0x90909090\(%eax\),%xmm2
- 201: 66 0f fe 90 90 90 90 90 paddd[ ]+0x90909090\(%eax\),%xmm2
+[ ]+f9: 66 0f 74 90 90 90 90 90 pcmpeqb -0x6f6f6f70\(%eax\),%xmm2
+ 101: 66 0f 75 90 90 90 90 90 pcmpeqw -0x6f6f6f70\(%eax\),%xmm2
+ 109: 66 0f 76 90 90 90 90 90 pcmpeqd -0x6f6f6f70\(%eax\),%xmm2
+ 111: 66 0f 7e 90 90 90 90 90 movd[ ]+%xmm2,-0x6f6f6f70\(%eax\)
+ 119: 66 0f d6 90 90 90 90 90 movq[ ]+%xmm2,-0x6f6f6f70\(%eax\)
+ 121: 66 0f d1 90 90 90 90 90 psrlw[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 129: 66 0f d2 90 90 90 90 90 psrld[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 131: 66 0f d3 90 90 90 90 90 psrlq[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 139: 66 0f d5 90 90 90 90 90 pmullw -0x6f6f6f70\(%eax\),%xmm2
+ 141: 66 0f d8 90 90 90 90 90 psubusb -0x6f6f6f70\(%eax\),%xmm2
+ 149: 66 0f d9 90 90 90 90 90 psubusw -0x6f6f6f70\(%eax\),%xmm2
+ 151: 66 0f db 90 90 90 90 90 pand[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 159: 66 0f dc 90 90 90 90 90 paddusb -0x6f6f6f70\(%eax\),%xmm2
+ 161: 66 0f dd 90 90 90 90 90 paddusw -0x6f6f6f70\(%eax\),%xmm2
+ 169: 66 0f df 90 90 90 90 90 pandn[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 171: 66 0f e1 90 90 90 90 90 psraw[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 179: 66 0f e2 90 90 90 90 90 psrad[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 181: 66 0f e5 90 90 90 90 90 pmulhw -0x6f6f6f70\(%eax\),%xmm2
+ 189: 66 0f e8 90 90 90 90 90 psubsb -0x6f6f6f70\(%eax\),%xmm2
+ 191: 66 0f e9 90 90 90 90 90 psubsw -0x6f6f6f70\(%eax\),%xmm2
+ 199: 66 0f eb 90 90 90 90 90 por[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 1a1: 66 0f ec 90 90 90 90 90 paddsb -0x6f6f6f70\(%eax\),%xmm2
+ 1a9: 66 0f ed 90 90 90 90 90 paddsw -0x6f6f6f70\(%eax\),%xmm2
+ 1b1: 66 0f ef 90 90 90 90 90 pxor[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 1b9: 66 0f f1 90 90 90 90 90 psllw[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 1c1: 66 0f f2 90 90 90 90 90 pslld[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 1c9: 66 0f f3 90 90 90 90 90 psllq[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 1d1: 66 0f f5 90 90 90 90 90 pmaddwd -0x6f6f6f70\(%eax\),%xmm2
+ 1d9: 66 0f f8 90 90 90 90 90 psubb[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 1e1: 66 0f f9 90 90 90 90 90 psubw[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 1e9: 66 0f fa 90 90 90 90 90 psubd[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 1f1: 66 0f fc 90 90 90 90 90 paddb[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 1f9: 66 0f fd 90 90 90 90 90 paddw[ ]+-0x6f6f6f70\(%eax\),%xmm2
+ 201: 66 0f fe 90 90 90 90 90 paddd[ ]+-0x6f6f6f70\(%eax\),%xmm2
209: 8d b4 26 00 00 00 00 lea[ ]+0x0\(%esi\),%esi
diff --git a/gas/testsuite/gas/i386/tlsd.d b/gas/testsuite/gas/i386/tlsd.d
index bbf6fd49cfa9..620a0d944081 100644
--- a/gas/testsuite/gas/i386/tlsd.d
+++ b/gas/testsuite/gas/i386/tlsd.d
@@ -28,6 +28,6 @@ Disassembly of section .text:
31: 83 c6 00 [ ]*add \$0x0,%esi
34: 8d 88 00 00 00 00 [ ]*lea 0x0\(%eax\),%ecx
[ ]+36: R_386_TLS_LDO_32 baz
- 3a: 8b 5d fc [ ]*mov 0xfffffffc\(%ebp\),%ebx
+ 3a: 8b 5d fc [ ]*mov -0x4\(%ebp\),%ebx
3d: c9 [ ]*leave[ ]*
3e: c3 [ ]*ret[ ]*
diff --git a/gas/testsuite/gas/i386/tlspic.d b/gas/testsuite/gas/i386/tlspic.d
index bd5dbb7bace9..ccb292c3e685 100644
--- a/gas/testsuite/gas/i386/tlspic.d
+++ b/gas/testsuite/gas/i386/tlspic.d
@@ -25,6 +25,6 @@ Disassembly of section .text:
2c: 65 8b 0d 00 00 00 00 [ ]*mov %gs:0x0,%ecx
33: 03 8b 00 00 00 00 [ ]*add 0x0\(%ebx\),%ecx
[ ]+35: R_386_TLS_GOTIE foo
- 39: 8b 5d fc [ ]*mov 0xfffffffc\(%ebp\),%ebx
+ 39: 8b 5d fc [ ]*mov -0x4\(%ebp\),%ebx
3c: c9 [ ]*leave[ ]*
3d: c3 [ ]*ret[ ]*
diff --git a/gas/testsuite/gas/i386/white.l b/gas/testsuite/gas/i386/white.l
index c2d9157a2248..876c9d525f42 100644
--- a/gas/testsuite/gas/i386/white.l
+++ b/gas/testsuite/gas/i386/white.l
@@ -8,7 +8,7 @@ GAS LISTING .*
5 0003 C705D711 00007B00 0000 mOvl \$ 123 , 4567
6 000d 678A787B ADDr16 mov 123 \( % bx , % si , 1 \) , % bh
7 0011 FFE0 jmp \* % eax
- 8 0013 6626FF23 foo: jmpw % es : \* \( % ebx \)
+ 8 0013 2666FF23 foo: jmpw % es : \* \( % ebx \)
9
10 0017 A0500000 00 mov \( 0x8 \* 0Xa \) , % al
11 001c B020 mov \$ \( 8 \* 4 \) , % al
diff --git a/gas/testsuite/gas/i386/x86-64-addr32-intel.d b/gas/testsuite/gas/i386/x86-64-addr32-intel.d
new file mode 100644
index 000000000000..90858dcc08fe
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-addr32-intel.d
@@ -0,0 +1,23 @@
+#as: -J
+#objdump: -drwMintel
+#name: x86-64 32-bit addressing (Intel mode)
+#source: x86-64-addr32.s
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <.text>:
+[ ]*0:[ ]+67 48 8d 80 00 00 00 00[ ]+addr32[ ]+lea[ ]+rax,\[[re]ax\+(0x)?0\].*
+[ ]*8:[ ]+67 49 8d 80 00 00 00 00[ ]+addr32[ ]+lea[ ]+rax,\[r8d?\+(0x)?0\].*
+[ ]*10:[ ]+67 48 8d 05 00 00 00 00[ ]+addr32[ ]+lea[ ]+rax,\[[re]ip\+(0x)?0\].*
+[ ]*18:[ ]+67 48 8d 04 25 00 00 00 00[ ]+addr32[ ]+lea[ ]+rax,ds:0x0.*
+[ ]*21:[ ]+67 a0 98 08 60 00[ ]+addr32[ ]+mov[ ]+al,ds:0x600898
+[ ]*27:[ ]+67 66 a1 98 08 60 00[ ]+addr32[ ]+mov[ ]+ax,ds:0x600898
+[ ]*2e:[ ]+67 a1 98 08 60 00[ ]+addr32[ ]+mov[ ]+eax,ds:0x600898
+[ ]*34:[ ]+67 48 a1 98 08 60 00[ ]+addr32[ ]+mov[ ]+rax,ds:0x600898
+[ ]*3b:[ ]+67 a2 98 08 60 00[ ]+addr32[ ]+mov[ ]+ds:0x600898,al
+[ ]*41:[ ]+67 66 a3 98 08 60 00[ ]+addr32[ ]+mov[ ]+ds:0x600898,ax
+[ ]*48:[ ]+67 a3 98 08 60 00[ ]+addr32[ ]+mov[ ]+ds:0x600898,eax
+[ ]*4e:[ ]+67 48 a3 98 08 60 00[ ]+addr32[ ]+mov[ ]+ds:0x600898,rax
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-addr32.d b/gas/testsuite/gas/i386/x86-64-addr32.d
index c892fb1ba1d5..c08f382553ba 100644
--- a/gas/testsuite/gas/i386/x86-64-addr32.d
+++ b/gas/testsuite/gas/i386/x86-64-addr32.d
@@ -2,12 +2,21 @@
#objdump: -drw
#name: x86-64 32-bit addressing
-.*: +file format elf64-x86-64
+.*: +file format .*
Disassembly of section .text:
0+000 <.text>:
[ ]*0:[ ]+67 48 8d 80 00 00 00 00[ ]+addr32[ ]+lea[ ]+0x0\(%[re]ax\),%rax.*
[ ]*8:[ ]+67 49 8d 80 00 00 00 00[ ]+addr32[ ]+lea[ ]+0x0\(%r8d?\),%rax.*
-[ ]*10:[ ]+67 48 8d 05 00 00 00 00[ ]+addr32[ ]+lea[ ]+0\(%[re]ip\),%rax.*
+[ ]*10:[ ]+67 48 8d 05 00 00 00 00[ ]+addr32[ ]+lea[ ]+0x0\(%[re]ip\),%rax.*
[ ]*18:[ ]+67 48 8d 04 25 00 00 00 00[ ]+addr32[ ]+lea[ ]+0x0,%rax.*
+[ ]*21:[ ]+67 a0 98 08 60 00[ ]+addr32[ ]+mov[ ]+0x600898,%al
+[ ]*27:[ ]+67 66 a1 98 08 60 00[ ]+addr32[ ]+mov[ ]+0x600898,%ax
+[ ]*2e:[ ]+67 a1 98 08 60 00[ ]+addr32[ ]+mov[ ]+0x600898,%eax
+[ ]*34:[ ]+67 48 a1 98 08 60 00[ ]+addr32[ ]+mov[ ]+0x600898,%rax
+[ ]*3b:[ ]+67 a2 98 08 60 00[ ]+addr32[ ]+mov[ ]+%al,0x600898
+[ ]*41:[ ]+67 66 a3 98 08 60 00[ ]+addr32[ ]+mov[ ]+%ax,0x600898
+[ ]*48:[ ]+67 a3 98 08 60 00[ ]+addr32[ ]+mov[ ]+%eax,0x600898
+[ ]*4e:[ ]+67 48 a3 98 08 60 00[ ]+addr32[ ]+mov[ ]+%rax,0x600898
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-addr32.s b/gas/testsuite/gas/i386/x86-64-addr32.s
index d18cbb91bcfc..c32525ffa1fe 100644
--- a/gas/testsuite/gas/i386/x86-64-addr32.s
+++ b/gas/testsuite/gas/i386/x86-64-addr32.s
@@ -3,3 +3,11 @@
lea symbol(%r8d), %rax
addr32 lea symbol(%rip), %rax
addr32 lea symbol, %rax
+ addr32 mov 0x600898,%al
+ addr32 mov 0x600898,%ax
+ addr32 mov 0x600898,%eax
+ addr32 mov 0x600898,%rax
+ addr32 mov %al,0x600898
+ addr32 mov %ax,0x600898
+ addr32 mov %eax,0x600898
+ addr32 mov %rax,0x600898
diff --git a/gas/testsuite/gas/i386/x86-64-amdfam10.d b/gas/testsuite/gas/i386/x86-64-amdfam10.d
new file mode 100644
index 000000000000..ed142b1d95eb
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-amdfam10.d
@@ -0,0 +1,27 @@
+#objdump: -dw
+#name: x86-64 amdfam10
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <foo>:
+ 0: f3 48 0f bd 19[ ]+lzcnt \(%rcx\),%rbx
+ 5: f3 0f bd 19[ ]+lzcnt \(%rcx\),%ebx
+ 9: 66 f3 0f bd 19[ ]+lzcnt \(%rcx\),%bx
+ e: f3 48 0f bd d9[ ]+lzcnt %rcx,%rbx
+ 13: f3 0f bd d9[ ]+lzcnt %ecx,%ebx
+ 17: 66 f3 0f bd d9[ ]+lzcnt %cx,%bx
+ 1c: f3 48 0f b8 19[ ]+popcnt \(%rcx\),%rbx
+ 21: f3 0f b8 19[ ]+popcnt \(%rcx\),%ebx
+ 25: 66 f3 0f b8 19[ ]+popcnt \(%rcx\),%bx
+ 2a: f3 48 0f b8 d9[ ]+popcnt %rcx,%rbx
+ 2f: f3 0f b8 d9[ ]+popcnt %ecx,%ebx
+ 33: 66 f3 0f b8 d9[ ]+popcnt %cx,%bx
+ 38: 66 0f 79 ca[ ]+extrq %xmm2,%xmm1
+ 3c: 66 0f 78 c1 02 04[ ]+extrq \$0x4,\$0x2,%xmm1
+ 42: f2 0f 79 ca[ ]+insertq %xmm2,%xmm1
+ 46: f2 0f 78 ca 02 04[ ]+insertq \$0x4,\$0x2,%xmm2,%xmm1
+ 4c: f2 0f 2b 09[ ]+movntsd %xmm1,\(%rcx\)
+ 50: f3 0f 2b 09[ ]+movntss %xmm1,\(%rcx\)
+ ...
diff --git a/gas/testsuite/gas/i386/x86-64-amdfam10.s b/gas/testsuite/gas/i386/x86-64-amdfam10.s
new file mode 100644
index 000000000000..df0416443b09
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-amdfam10.s
@@ -0,0 +1,25 @@
+#AMDFAM10 New Instructions
+
+ .text
+foo:
+ lzcnt (%rcx),%rbx
+ lzcnt (%rcx),%ebx
+ lzcnt (%rcx),%bx
+ lzcnt %rcx,%rbx
+ lzcnt %ecx,%ebx
+ lzcnt %cx,%bx
+ popcnt (%rcx),%rbx
+ popcnt (%rcx),%ebx
+ popcnt (%rcx),%bx
+ popcnt %rcx,%rbx
+ popcnt %ecx,%ebx
+ popcnt %cx,%bx
+ extrq %xmm2,%xmm1
+ extrq $4,$2,%xmm1
+ insertq %xmm2,%xmm1
+ insertq $4,$2,%xmm2,%xmm1
+ movntsd %xmm1,(%rcx)
+ movntss %xmm1,(%rcx)
+
+ # Force a good alignment.
+ .p2align 4,0
diff --git a/gas/testsuite/gas/i386/x86-64-branch.d b/gas/testsuite/gas/i386/x86-64-branch.d
index 7ddd6fe17778..17c46a752b1c 100644
--- a/gas/testsuite/gas/i386/x86-64-branch.d
+++ b/gas/testsuite/gas/i386/x86-64-branch.d
@@ -2,7 +2,7 @@
#objdump: -drw
#name: x86-64 indirect branch
-.*: +file format elf64-x86-64
+.*: +file format .*
Disassembly of section .text:
@@ -11,3 +11,4 @@ Disassembly of section .text:
[ ]*2:[ ]+ff d0[ ]+callq[ ]+\*%rax
[ ]*4:[ ]+ff e0[ ]+jmpq[ ]+\*%rax
[ ]*6:[ ]+ff e0[ ]+jmpq[ ]+\*%rax
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-cbw-intel.d b/gas/testsuite/gas/i386/x86-64-cbw-intel.d
new file mode 100644
index 000000000000..616ffad9f259
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-cbw-intel.d
@@ -0,0 +1,26 @@
+#source: x86-64-cbw.s
+#objdump: -dwMintel
+#name: x86-64 CBW/CWD & Co (Intel disassembly)
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <_cbw>:
+ 0: 66 98 cbw
+ 2: 98 cwde
+ 3: 48 98 cdqe
+ 5: 66 40 98 rex cbw
+ 8: 40 98 rex cwde
+ a: 66 data16
+ b: 48 98 cdqe
+
+0+00d <_cwd>:
+ d: 66 99 cwd
+ f: 99 cdq
+ 10: 48 99 cqo
+ 12: 66 40 99 rex cwd
+ 15: 40 99 rex cdq
+ 17: 66 data16
+ 18: 48 99 cqo
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-cbw.d b/gas/testsuite/gas/i386/x86-64-cbw.d
new file mode 100644
index 000000000000..5474ce2859ba
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-cbw.d
@@ -0,0 +1,25 @@
+#objdump: -dw
+#name: x86-64 CBW/CWD & Co
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <_cbw>:
+ 0: 66 98 cbtw
+ 2: 98 cwtl
+ 3: 48 98 cltq
+ 5: 66 40 98 rex cbtw
+ 8: 40 98 rex cwtl
+ a: 66 data16
+ b: 48 98 cltq
+
+0+00d <_cwd>:
+ d: 66 99 cwtd
+ f: 99 cltd
+ 10: 48 99 cqto
+ 12: 66 40 99 rex cwtd
+ 15: 40 99 rex cltd
+ 17: 66 data16
+ 18: 48 99 cqto
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-cbw.s b/gas/testsuite/gas/i386/x86-64-cbw.s
new file mode 100644
index 000000000000..085c2797348e
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-cbw.s
@@ -0,0 +1,18 @@
+ .intel_syntax noprefix
+ .text
+_cbw:
+ cbw
+ cwde
+ cdqe
+ rex cbw
+ rex cwde
+ rex64 cbw
+_cwd:
+ cwd
+ cdq
+ cqo
+ rex cwd
+ rex cdq
+ rex64 cwd
+
+ .p2align 4,0
diff --git a/gas/testsuite/gas/i386/x86-64-crc32-intel.d b/gas/testsuite/gas/i386/x86-64-crc32-intel.d
new file mode 100644
index 000000000000..24bd66dd001e
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-crc32-intel.d
@@ -0,0 +1,35 @@
+#objdump: -drwMintel
+#name: x86-64 crc32 (Intel mode)
+#source: x86-64-crc32.s
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <foo>:
+[ ]*[a-f0-9]+: f2 0f 38 f0 06 crc32 eax,BYTE PTR \[rsi\]
+[ ]*[a-f0-9]+: f2 48 0f 38 f0 06 crc32 rax,BYTE PTR \[rsi\]
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 06 crc32 eax,WORD PTR \[rsi\]
+[ ]*[a-f0-9]+: f2 0f 38 f1 06 crc32 eax,DWORD PTR \[rsi\]
+[ ]*[a-f0-9]+: f2 48 0f 38 f1 06 crc32 rax,QWORD PTR \[rsi\]
+[ ]*[a-f0-9]+: f2 0f 38 f0 c0 crc32 eax,al
+[ ]*[a-f0-9]+: f2 0f 38 f0 c0 crc32 eax,al
+[ ]*[a-f0-9]+: f2 48 0f 38 f0 c0 crc32 rax,al
+[ ]*[a-f0-9]+: f2 48 0f 38 f0 c0 crc32 rax,al
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 c0 crc32 eax,ax
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 c0 crc32 eax,ax
+[ ]*[a-f0-9]+: f2 0f 38 f1 c0 crc32 eax,eax
+[ ]*[a-f0-9]+: f2 0f 38 f1 c0 crc32 eax,eax
+[ ]*[a-f0-9]+: f2 48 0f 38 f1 c0 crc32 rax,rax
+[ ]*[a-f0-9]+: f2 48 0f 38 f1 c0 crc32 rax,rax
+[ ]*[a-f0-9]+: f2 48 0f 38 f0 06 crc32 rax,BYTE PTR \[rsi\]
+[ ]*[a-f0-9]+: f2 0f 38 f0 06 crc32 eax,BYTE PTR \[rsi\]
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 06 crc32 eax,WORD PTR \[rsi\]
+[ ]*[a-f0-9]+: f2 0f 38 f1 06 crc32 eax,DWORD PTR \[rsi\]
+[ ]*[a-f0-9]+: f2 48 0f 38 f1 06 crc32 rax,QWORD PTR \[rsi\]
+[ ]*[a-f0-9]+: f2 0f 38 f0 c0 crc32 eax,al
+[ ]*[a-f0-9]+: f2 48 0f 38 f0 c0 crc32 rax,al
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 c0 crc32 eax,ax
+[ ]*[a-f0-9]+: f2 0f 38 f1 c0 crc32 eax,eax
+[ ]*[a-f0-9]+: f2 48 0f 38 f1 c0 crc32 rax,rax
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-crc32.d b/gas/testsuite/gas/i386/x86-64-crc32.d
new file mode 100644
index 000000000000..1a33fac02d85
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-crc32.d
@@ -0,0 +1,34 @@
+#objdump: -dw
+#name: x86-64 crc32
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <foo>:
+[ ]*[a-f0-9]+: f2 0f 38 f0 06 crc32b \(%rsi\),%eax
+[ ]*[a-f0-9]+: f2 48 0f 38 f0 06 crc32b \(%rsi\),%rax
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 06 crc32w \(%rsi\),%eax
+[ ]*[a-f0-9]+: f2 0f 38 f1 06 crc32l \(%rsi\),%eax
+[ ]*[a-f0-9]+: f2 48 0f 38 f1 06 crc32q \(%rsi\),%rax
+[ ]*[a-f0-9]+: f2 0f 38 f0 c0 crc32b %al,%eax
+[ ]*[a-f0-9]+: f2 0f 38 f0 c0 crc32b %al,%eax
+[ ]*[a-f0-9]+: f2 48 0f 38 f0 c0 crc32b %al,%rax
+[ ]*[a-f0-9]+: f2 48 0f 38 f0 c0 crc32b %al,%rax
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 c0 crc32w %ax,%eax
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 c0 crc32w %ax,%eax
+[ ]*[a-f0-9]+: f2 0f 38 f1 c0 crc32l %eax,%eax
+[ ]*[a-f0-9]+: f2 0f 38 f1 c0 crc32l %eax,%eax
+[ ]*[a-f0-9]+: f2 48 0f 38 f1 c0 crc32q %rax,%rax
+[ ]*[a-f0-9]+: f2 48 0f 38 f1 c0 crc32q %rax,%rax
+[ ]*[a-f0-9]+: f2 48 0f 38 f0 06 crc32b \(%rsi\),%rax
+[ ]*[a-f0-9]+: f2 0f 38 f0 06 crc32b \(%rsi\),%eax
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 06 crc32w \(%rsi\),%eax
+[ ]*[a-f0-9]+: f2 0f 38 f1 06 crc32l \(%rsi\),%eax
+[ ]*[a-f0-9]+: f2 48 0f 38 f1 06 crc32q \(%rsi\),%rax
+[ ]*[a-f0-9]+: f2 0f 38 f0 c0 crc32b %al,%eax
+[ ]*[a-f0-9]+: f2 48 0f 38 f0 c0 crc32b %al,%rax
+[ ]*[a-f0-9]+: 66 f2 0f 38 f1 c0 crc32w %ax,%eax
+[ ]*[a-f0-9]+: f2 0f 38 f1 c0 crc32l %eax,%eax
+[ ]*[a-f0-9]+: f2 48 0f 38 f1 c0 crc32q %rax,%rax
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-crc32.s b/gas/testsuite/gas/i386/x86-64-crc32.s
new file mode 100644
index 000000000000..7ebe894e3413
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-crc32.s
@@ -0,0 +1,34 @@
+# Check 64bit crc32 in SSE4.2
+
+ .text
+foo:
+
+crc32b (%rsi), %eax
+crc32b (%rsi), %rax
+crc32w (%rsi), %eax
+crc32l (%rsi), %eax
+crc32q (%rsi), %rax
+crc32 %al, %eax
+crc32b %al, %eax
+crc32 %al, %rax
+crc32b %al, %rax
+crc32 %ax, %eax
+crc32w %ax, %eax
+crc32 %eax, %eax
+crc32l %eax, %eax
+crc32 %rax, %rax
+crc32q %rax, %rax
+
+.intel_syntax noprefix
+crc32 rax,byte ptr [rsi]
+crc32 eax,byte ptr [rsi]
+crc32 eax, word ptr [rsi]
+crc32 eax,dword ptr [rsi]
+crc32 rax,qword ptr [rsi]
+crc32 eax,al
+crc32 rax,al
+crc32 eax, ax
+crc32 eax,eax
+crc32 rax,rax
+
+.p2align 4,0
diff --git a/gas/testsuite/gas/i386/x86-64-crx-suffix.d b/gas/testsuite/gas/i386/x86-64-crx-suffix.d
index 1dc3584219ed..6dfd47cdef65 100644
--- a/gas/testsuite/gas/i386/x86-64-crx-suffix.d
+++ b/gas/testsuite/gas/i386/x86-64-crx-suffix.d
@@ -2,7 +2,7 @@
#name: x86-64 control register related opcodes (with suffixes)
#source: x86-64-crx.s
-.*: +file format elf64-x86-64
+.*: +file format .*
Disassembly of section .text:
diff --git a/gas/testsuite/gas/i386/x86-64-crx.d b/gas/testsuite/gas/i386/x86-64-crx.d
index 8c1333f53693..62abe70301a5 100644
--- a/gas/testsuite/gas/i386/x86-64-crx.d
+++ b/gas/testsuite/gas/i386/x86-64-crx.d
@@ -2,7 +2,7 @@
#name: x86-64 control register related opcodes
#source: x86-64-crx.s
-.*: +file format elf64-x86-64
+.*: +file format .*
Disassembly of section .text:
diff --git a/gas/testsuite/gas/i386/x86-64-drx-suffix.d b/gas/testsuite/gas/i386/x86-64-drx-suffix.d
index 1f76b8b163b8..254e24defc4d 100644
--- a/gas/testsuite/gas/i386/x86-64-drx-suffix.d
+++ b/gas/testsuite/gas/i386/x86-64-drx-suffix.d
@@ -2,7 +2,7 @@
#name: x86-64 debug register related opcodes (with suffixes)
#source: x86-64-drx.s
-.*: +file format elf64-x86-64
+.*: +file format .*
Disassembly of section .text:
diff --git a/gas/testsuite/gas/i386/x86-64-drx.d b/gas/testsuite/gas/i386/x86-64-drx.d
index 879ce50a5ef8..18b328f9b30c 100644
--- a/gas/testsuite/gas/i386/x86-64-drx.d
+++ b/gas/testsuite/gas/i386/x86-64-drx.d
@@ -1,7 +1,7 @@
#objdump: -dw
#name: x86-64 debug register related opcodes
-.*: +file format elf64-x86-64
+.*: +file format .*
Disassembly of section .text:
diff --git a/gas/testsuite/gas/i386/x86-64-gidt.d b/gas/testsuite/gas/i386/x86-64-gidt.d
new file mode 100644
index 000000000000..d8b0a0671a26
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-gidt.d
@@ -0,0 +1,17 @@
+#objdump: -dw
+#name: 64bit load/store global/interrupt description table register.
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <foo>:
+ 0: 0f 01 08 [ ]*sidt \(%rax\)
+ 3: 0f 01 18 [ ]*lidt \(%rax\)
+ 6: 0f 01 00 [ ]*sgdt \(%rax\)
+ 9: 0f 01 10 [ ]*lgdt \(%rax\)
+ c: 0f 01 08 [ ]*sidt \(%rax\)
+ f: 0f 01 18 [ ]*lidt \(%rax\)
+ 12: 0f 01 00 [ ]*sgdt \(%rax\)
+ 15: 0f 01 10 [ ]*lgdt \(%rax\)
+ ...
diff --git a/gas/testsuite/gas/i386/x86-64-gidt.s b/gas/testsuite/gas/i386/x86-64-gidt.s
new file mode 100644
index 000000000000..dd2028910b92
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-gidt.s
@@ -0,0 +1,14 @@
+# Instructions to load/store global/interrupt description table
+# register.
+
+ .text
+foo:
+ sidt (%rax)
+ lidt (%rax)
+ sgdt (%rax)
+ lgdt (%rax)
+ sidtq (%rax)
+ lidtq (%rax)
+ sgdtq (%rax)
+ lgdtq (%rax)
+ .p2align 4,0
diff --git a/gas/testsuite/gas/i386/x86-64-inval-crc32.l b/gas/testsuite/gas/i386/x86-64-inval-crc32.l
new file mode 100644
index 000000000000..b4a8eaabcf67
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-inval-crc32.l
@@ -0,0 +1,65 @@
+.*: Assembler messages:
+.*:6: Error: .*
+.*:7: Error: .*
+.*:8: Error: .*
+.*:9: Error: .*
+.*:10: Error: .*
+.*:11: Error: .*
+.*:12: Error: .*
+.*:13: Error: .*
+.*:14: Error: .*
+.*:15: Error: .*
+.*:16: Error: .*
+.*:17: Error: .*
+.*:18: Error: .*
+.*:19: Error: .*
+.*:20: Error: .*
+.*:21: Error: .*
+.*:24: Error: .*
+.*:25: Error: .*
+.*:26: Error: .*
+.*:27: Error: .*
+.*:28: Error: .*
+.*:29: Error: .*
+.*:30: Error: .*
+.*:31: Error: .*
+.*:32: Error: .*
+.*:33: Error: .*
+.*:34: Error: .*
+GAS LISTING .*
+
+
+[ ]*1[ ]+\# Check illegal 64bit crc32 in SSE4\.2
+[ ]*2[ ]+
+[ ]*3[ ]+\.text
+[ ]*4[ ]+foo:
+[ ]*5[ ]+
+[ ]*6[ ]+crc32b \(%rsi\), %al
+[ ]*7[ ]+crc32w \(%rsi\), %ax
+[ ]*8[ ]+crc32 \(%rsi\), %al
+[ ]*9[ ]+crc32 \(%rsi\), %ax
+[ ]*10[ ]+crc32 \(%rsi\), %eax
+[ ]*11[ ]+crc32 \(%rsi\), %rax
+[ ]*12[ ]+crc32 %al, %al
+[ ]*13[ ]+crc32b %al, %al
+[ ]*14[ ]+crc32 %ax, %ax
+[ ]*15[ ]+crc32w %ax, %ax
+[ ]*16[ ]+crc32 %rax, %eax
+[ ]*17[ ]+crc32 %eax, %rax
+[ ]*18[ ]+crc32l %rax, %eax
+[ ]*19[ ]+crc32l %eax, %rax
+[ ]*20[ ]+crc32q %eax, %rax
+[ ]*21[ ]+crc32q %rax, %eax
+[ ]*22[ ]+
+[ ]*23[ ]+\.intel_syntax noprefix
+[ ]*24[ ]+crc32 al,byte ptr \[rsi\]
+[ ]*25[ ]+crc32 ax, word ptr \[rsi\]
+[ ]*26[ ]+crc32 rax,word ptr \[rsi\]
+[ ]*27[ ]+crc32 rax,dword ptr \[rsi\]
+[ ]*28[ ]+crc32 al,\[rsi\]
+[ ]*29[ ]+crc32 ax,\[rsi\]
+[ ]*30[ ]+crc32 eax,\[rsi\]
+[ ]*31[ ]+crc32 rax,\[rsi\]
+[ ]*32[ ]+crc32 al,al
+[ ]*33[ ]+crc32 ax, ax
+[ ]*34[ ]+crc32 rax,eax
diff --git a/gas/testsuite/gas/i386/x86-64-inval-crc32.s b/gas/testsuite/gas/i386/x86-64-inval-crc32.s
new file mode 100644
index 000000000000..77408118ba77
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-inval-crc32.s
@@ -0,0 +1,34 @@
+# Check illegal 64bit crc32 in SSE4.2
+
+ .text
+foo:
+
+crc32b (%rsi), %al
+crc32w (%rsi), %ax
+crc32 (%rsi), %al
+crc32 (%rsi), %ax
+crc32 (%rsi), %eax
+crc32 (%rsi), %rax
+crc32 %al, %al
+crc32b %al, %al
+crc32 %ax, %ax
+crc32w %ax, %ax
+crc32 %rax, %eax
+crc32 %eax, %rax
+crc32l %rax, %eax
+crc32l %eax, %rax
+crc32q %eax, %rax
+crc32q %rax, %eax
+
+.intel_syntax noprefix
+crc32 al,byte ptr [rsi]
+crc32 ax, word ptr [rsi]
+crc32 rax,word ptr [rsi]
+crc32 rax,dword ptr [rsi]
+crc32 al,[rsi]
+crc32 ax,[rsi]
+crc32 eax,[rsi]
+crc32 rax,[rsi]
+crc32 al,al
+crc32 ax, ax
+crc32 rax,eax
diff --git a/gas/testsuite/gas/i386/x86-64-inval.l b/gas/testsuite/gas/i386/x86-64-inval.l
index aa080cba46a6..87503e5bbde0 100644
--- a/gas/testsuite/gas/i386/x86-64-inval.l
+++ b/gas/testsuite/gas/i386/x86-64-inval.l
@@ -48,6 +48,8 @@
.*:49: Error: .*
.*:50: Error: .*
.*:51: Error: .*
+.*:52: Error: .*
+.*:54: Error: .*
GAS LISTING .*
@@ -102,3 +104,6 @@ GAS LISTING .*
49 [ ]*pushfl # can't have 32-bit stack operands
50 [ ]*popfl # can't have 32-bit stack operands
51 [ ]*retl # can't have 32-bit stack operands
+ 52 [ ]*insertq \$4,\$2,%xmm2,%ebx # The last operand must be XMM register.
+ 53 [ ]*.intel_syntax noprefix
+ 54 [ ]*cmpxchg16b dword ptr \[rax\] # Must be oword
diff --git a/gas/testsuite/gas/i386/x86-64-inval.s b/gas/testsuite/gas/i386/x86-64-inval.s
index b069a282e5c5..f7a4379ad407 100644
--- a/gas/testsuite/gas/i386/x86-64-inval.s
+++ b/gas/testsuite/gas/i386/x86-64-inval.s
@@ -49,3 +49,6 @@ foo: jcxz foo # No prefix exists to select CX as a counter
pushfl # can't have 32-bit stack operands
popfl # can't have 32-bit stack operands
retl # can't have 32-bit stack operands
+ insertq $4,$2,%xmm2,%ebx # The last operand must be XMM register.
+ .intel_syntax noprefix
+ cmpxchg16b dword ptr [rax] # Must be oword
diff --git a/gas/testsuite/gas/i386/x86-64-io-intel.d b/gas/testsuite/gas/i386/x86-64-io-intel.d
new file mode 100644
index 000000000000..c6df6e68c3f0
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-io-intel.d
@@ -0,0 +1,28 @@
+#source: x86-64-io.s
+#objdump: -dwMintel
+#name: x86-64 rex.W in/out (Intel disassembly)
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <_in>:
+ 0: 48 ed rex.W in eax,dx
+ 2: 66 data16
+ 3: 48 ed rex.W in eax,dx
+
+0+005 <_out>:
+ 5: 48 ef rex.W out dx,eax
+ 7: 66 data16
+ 8: 48 ef rex.W out dx,eax
+
+0+00a <_ins>:
+ a: 48 6d rex.W ins DWORD PTR es:\[rdi\],dx
+ c: 66 data16
+ d: 48 6d rex.W ins DWORD PTR es:\[rdi\],dx
+
+0+00f <_outs>:
+ f: 48 6f rex.W outs dx,DWORD PTR ds:\[rsi\]
+ 11: 66 data16
+ 12: 48 6f rex.W outs dx,DWORD PTR ds:\[rsi\]
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-io-suffix.d b/gas/testsuite/gas/i386/x86-64-io-suffix.d
new file mode 100644
index 000000000000..a0ee9d0289c7
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-io-suffix.d
@@ -0,0 +1,28 @@
+#source: x86-64-io.s
+#objdump: -dwMsuffix
+#name: x86-64 rex.W in/out w/ suffix
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <_in>:
+ 0: 48 ed rex.W inl \(%dx\),%eax
+ 2: 66 data16
+ 3: 48 ed rex.W inl \(%dx\),%eax
+
+0+005 <_out>:
+ 5: 48 ef rex.W outl %eax,\(%dx\)
+ 7: 66 data16
+ 8: 48 ef rex.W outl %eax,\(%dx\)
+
+0+00a <_ins>:
+ a: 48 6d rex.W insl \(%dx\),%es:\(%rdi\)
+ c: 66 data16
+ d: 48 6d rex.W insl \(%dx\),%es:\(%rdi\)
+
+0+00f <_outs>:
+ f: 48 6f rex.W outsl %ds:\(%rsi\),\(%dx\)
+ 11: 66 data16
+ 12: 48 6f rex.W outsl %ds:\(%rsi\),\(%dx\)
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-io.d b/gas/testsuite/gas/i386/x86-64-io.d
new file mode 100644
index 000000000000..3e3b7e7bad24
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-io.d
@@ -0,0 +1,27 @@
+#objdump: -dw
+#name: x86-64 rex.W in/out
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <_in>:
+ 0: 48 ed rex.W in \(%dx\),%eax
+ 2: 66 data16
+ 3: 48 ed rex.W in \(%dx\),%eax
+
+0+005 <_out>:
+ 5: 48 ef rex.W out %eax,\(%dx\)
+ 7: 66 data16
+ 8: 48 ef rex.W out %eax,\(%dx\)
+
+0+00a <_ins>:
+ a: 48 6d rex.W insl \(%dx\),%es:\(%rdi\)
+ c: 66 data16
+ d: 48 6d rex.W insl \(%dx\),%es:\(%rdi\)
+
+0+00f <_outs>:
+ f: 48 6f rex.W outsl %ds:\(%rsi\),\(%dx\)
+ 11: 66 data16
+ 12: 48 6f rex.W outsl %ds:\(%rsi\),\(%dx\)
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-io.s b/gas/testsuite/gas/i386/x86-64-io.s
new file mode 100644
index 000000000000..58200c825b80
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-io.s
@@ -0,0 +1,16 @@
+ .intel_syntax noprefix
+ .text
+_in:
+ rex64 in eax,dx
+ rex64 in ax,dx
+_out:
+ rex64 out dx,eax
+ rex64 out dx,ax
+_ins:
+ rex64 insd
+ rex64 insw
+_outs:
+ rex64 outsd
+ rex64 outsw
+
+ .p2align 4,0
diff --git a/gas/testsuite/gas/i386/x86-64-merom.d b/gas/testsuite/gas/i386/x86-64-merom.d
index f15a6e466abc..4593e526ef25 100644
--- a/gas/testsuite/gas/i386/x86-64-merom.d
+++ b/gas/testsuite/gas/i386/x86-64-merom.d
@@ -70,4 +70,4 @@ Disassembly of section .text:
116: 0f 38 1e c1[ ]+pabsd %mm1,%mm0
11a: 66 0f 38 1e 01[ ]+pabsd \(%rcx\),%xmm0
11f: 66 0f 38 1e c1[ ]+pabsd %xmm1,%xmm0
- ...
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-nops-1-k8.d b/gas/testsuite/gas/i386/x86-64-nops-1-k8.d
new file mode 100644
index 000000000000..6785fbb065f9
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-nops-1-k8.d
@@ -0,0 +1,177 @@
+#as: -mtune=k8
+#source: x86-64-nops-1.s
+#objdump: -drw
+#name: x86-64 -mtune=k8 nops 1
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop15>:
+[ ]*0:[ ]+90[ ]+nop[ ]*
+[ ]*1:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*5:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*9:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*d:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+
+0+10 <nop14>:
+[ ]*10:[ ]+90[ ]+nop[ ]*
+[ ]*11:[ ]+90[ ]+nop[ ]*
+[ ]*12:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*16:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*1a:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*1d:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+
+0+20 <nop13>:
+[ ]*20:[ ]+90[ ]+nop[ ]*
+[ ]*21:[ ]+90[ ]+nop[ ]*
+[ ]*22:[ ]+90[ ]+nop[ ]*
+[ ]*23:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*27:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*2a:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*2d:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+
+0+30 <nop12>:
+[ ]*30:[ ]+90[ ]+nop[ ]*
+[ ]*31:[ ]+90[ ]+nop[ ]*
+[ ]*32:[ ]+90[ ]+nop[ ]*
+[ ]*33:[ ]+90[ ]+nop[ ]*
+[ ]*34:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*38:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*3c:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+
+0+40 <nop11>:
+[ ]*40:[ ]+90[ ]+nop[ ]*
+[ ]*41:[ ]+90[ ]+nop[ ]*
+[ ]*42:[ ]+90[ ]+nop[ ]*
+[ ]*43:[ ]+90[ ]+nop[ ]*
+[ ]*44:[ ]+90[ ]+nop[ ]*
+[ ]*45:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*49:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*4d:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+
+0+50 <nop10>:
+[ ]*50:[ ]+90[ ]+nop[ ]*
+[ ]*51:[ ]+90[ ]+nop[ ]*
+[ ]*52:[ ]+90[ ]+nop[ ]*
+[ ]*53:[ ]+90[ ]+nop[ ]*
+[ ]*54:[ ]+90[ ]+nop[ ]*
+[ ]*55:[ ]+90[ ]+nop[ ]*
+[ ]*56:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*5a:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*5d:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+
+0+60 <nop9>:
+[ ]*60:[ ]+90[ ]+nop[ ]*
+[ ]*61:[ ]+90[ ]+nop[ ]*
+[ ]*62:[ ]+90[ ]+nop[ ]*
+[ ]*63:[ ]+90[ ]+nop[ ]*
+[ ]*64:[ ]+90[ ]+nop[ ]*
+[ ]*65:[ ]+90[ ]+nop[ ]*
+[ ]*66:[ ]+90[ ]+nop[ ]*
+[ ]*67:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*6a:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*6d:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+
+0+70 <nop8>:
+[ ]*70:[ ]+90[ ]+nop[ ]*
+[ ]*71:[ ]+90[ ]+nop[ ]*
+[ ]*72:[ ]+90[ ]+nop[ ]*
+[ ]*73:[ ]+90[ ]+nop[ ]*
+[ ]*74:[ ]+90[ ]+nop[ ]*
+[ ]*75:[ ]+90[ ]+nop[ ]*
+[ ]*76:[ ]+90[ ]+nop[ ]*
+[ ]*77:[ ]+90[ ]+nop[ ]*
+[ ]*78:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*7c:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+
+0+80 <nop7>:
+[ ]*80:[ ]+90[ ]+nop[ ]*
+[ ]*81:[ ]+90[ ]+nop[ ]*
+[ ]*82:[ ]+90[ ]+nop[ ]*
+[ ]*83:[ ]+90[ ]+nop[ ]*
+[ ]*84:[ ]+90[ ]+nop[ ]*
+[ ]*85:[ ]+90[ ]+nop[ ]*
+[ ]*86:[ ]+90[ ]+nop[ ]*
+[ ]*87:[ ]+90[ ]+nop[ ]*
+[ ]*88:[ ]+90[ ]+nop[ ]*
+[ ]*89:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*8d:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+
+0+90 <nop6>:
+[ ]*90:[ ]+90[ ]+nop[ ]*
+[ ]*91:[ ]+90[ ]+nop[ ]*
+[ ]*92:[ ]+90[ ]+nop[ ]*
+[ ]*93:[ ]+90[ ]+nop[ ]*
+[ ]*94:[ ]+90[ ]+nop[ ]*
+[ ]*95:[ ]+90[ ]+nop[ ]*
+[ ]*96:[ ]+90[ ]+nop[ ]*
+[ ]*97:[ ]+90[ ]+nop[ ]*
+[ ]*98:[ ]+90[ ]+nop[ ]*
+[ ]*99:[ ]+90[ ]+nop[ ]*
+[ ]*9a:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*9d:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+
+0+a0 <nop5>:
+[ ]*a0:[ ]+90[ ]+nop[ ]*
+[ ]*a1:[ ]+90[ ]+nop[ ]*
+[ ]*a2:[ ]+90[ ]+nop[ ]*
+[ ]*a3:[ ]+90[ ]+nop[ ]*
+[ ]*a4:[ ]+90[ ]+nop[ ]*
+[ ]*a5:[ ]+90[ ]+nop[ ]*
+[ ]*a6:[ ]+90[ ]+nop[ ]*
+[ ]*a7:[ ]+90[ ]+nop[ ]*
+[ ]*a8:[ ]+90[ ]+nop[ ]*
+[ ]*a9:[ ]+90[ ]+nop[ ]*
+[ ]*aa:[ ]+90[ ]+nop[ ]*
+[ ]*ab:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+[ ]*ae:[ ]+66 90[ ]+xchg[ ]+%ax,%ax
+
+0+b0 <nop4>:
+[ ]*b0:[ ]+90[ ]+nop[ ]*
+[ ]*b1:[ ]+90[ ]+nop[ ]*
+[ ]*b2:[ ]+90[ ]+nop[ ]*
+[ ]*b3:[ ]+90[ ]+nop[ ]*
+[ ]*b4:[ ]+90[ ]+nop[ ]*
+[ ]*b5:[ ]+90[ ]+nop[ ]*
+[ ]*b6:[ ]+90[ ]+nop[ ]*
+[ ]*b7:[ ]+90[ ]+nop[ ]*
+[ ]*b8:[ ]+90[ ]+nop[ ]*
+[ ]*b9:[ ]+90[ ]+nop[ ]*
+[ ]*ba:[ ]+90[ ]+nop[ ]*
+[ ]*bb:[ ]+90[ ]+nop[ ]*
+[ ]*bc:[ ]+66 66 66 90[ ]+xchg[ ]+%ax,%ax
+
+0+c0 <nop3>:
+[ ]*c0:[ ]+90[ ]+nop[ ]*
+[ ]*c1:[ ]+90[ ]+nop[ ]*
+[ ]*c2:[ ]+90[ ]+nop[ ]*
+[ ]*c3:[ ]+90[ ]+nop[ ]*
+[ ]*c4:[ ]+90[ ]+nop[ ]*
+[ ]*c5:[ ]+90[ ]+nop[ ]*
+[ ]*c6:[ ]+90[ ]+nop[ ]*
+[ ]*c7:[ ]+90[ ]+nop[ ]*
+[ ]*c8:[ ]+90[ ]+nop[ ]*
+[ ]*c9:[ ]+90[ ]+nop[ ]*
+[ ]*ca:[ ]+90[ ]+nop[ ]*
+[ ]*cb:[ ]+90[ ]+nop[ ]*
+[ ]*cc:[ ]+90[ ]+nop[ ]*
+[ ]*cd:[ ]+66 66 90[ ]+xchg[ ]+%ax,%ax
+
+0+d0 <nop2>:
+[ ]*d0:[ ]+90[ ]+nop[ ]*
+[ ]*d1:[ ]+90[ ]+nop[ ]*
+[ ]*d2:[ ]+90[ ]+nop[ ]*
+[ ]*d3:[ ]+90[ ]+nop[ ]*
+[ ]*d4:[ ]+90[ ]+nop[ ]*
+[ ]*d5:[ ]+90[ ]+nop[ ]*
+[ ]*d6:[ ]+90[ ]+nop[ ]*
+[ ]*d7:[ ]+90[ ]+nop[ ]*
+[ ]*d8:[ ]+90[ ]+nop[ ]*
+[ ]*d9:[ ]+90[ ]+nop[ ]*
+[ ]*da:[ ]+90[ ]+nop[ ]*
+[ ]*db:[ ]+90[ ]+nop[ ]*
+[ ]*dc:[ ]+90[ ]+nop[ ]*
+[ ]*dd:[ ]+90[ ]+nop[ ]*
+[ ]*de:[ ]+66 90[ ]+xchg[ ]+%ax,%ax
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-nops-1-merom.d b/gas/testsuite/gas/i386/x86-64-nops-1-merom.d
new file mode 100644
index 000000000000..2aa49aeeec62
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-nops-1-merom.d
@@ -0,0 +1,156 @@
+#as: -mtune=merom
+#source: x86-64-nops-1.s
+#objdump: -drw
+#name: x86-64 -mtune=merom nops 1
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop15>:
+[ ]*0:[ ]+90[ ]+nop[ ]*
+[ ]*1:[ ]+66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%rax,%rax,1\)
+
+0+10 <nop14>:
+[ ]*10:[ ]+90[ ]+nop[ ]*
+[ ]*11:[ ]+90[ ]+nop[ ]*
+[ ]*12:[ ]+66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%rax,%rax,1\)
+
+0+20 <nop13>:
+[ ]*20:[ ]+90[ ]+nop[ ]*
+[ ]*21:[ ]+90[ ]+nop[ ]*
+[ ]*22:[ ]+90[ ]+nop[ ]*
+[ ]*23:[ ]+66 66 66 66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%rax,%rax,1\)
+
+0+30 <nop12>:
+[ ]*30:[ ]+90[ ]+nop[ ]*
+[ ]*31:[ ]+90[ ]+nop[ ]*
+[ ]*32:[ ]+90[ ]+nop[ ]*
+[ ]*33:[ ]+90[ ]+nop[ ]*
+[ ]*34:[ ]+66 66 66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%rax,%rax,1\)
+
+0+40 <nop11>:
+[ ]*40:[ ]+90[ ]+nop[ ]*
+[ ]*41:[ ]+90[ ]+nop[ ]*
+[ ]*42:[ ]+90[ ]+nop[ ]*
+[ ]*43:[ ]+90[ ]+nop[ ]*
+[ ]*44:[ ]+90[ ]+nop[ ]*
+[ ]*45:[ ]+66 66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%rax,%rax,1\)
+
+0+50 <nop10>:
+[ ]*50:[ ]+90[ ]+nop[ ]*
+[ ]*51:[ ]+90[ ]+nop[ ]*
+[ ]*52:[ ]+90[ ]+nop[ ]*
+[ ]*53:[ ]+90[ ]+nop[ ]*
+[ ]*54:[ ]+90[ ]+nop[ ]*
+[ ]*55:[ ]+90[ ]+nop[ ]*
+[ ]*56:[ ]+66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%rax,%rax,1\)
+
+0+60 <nop9>:
+[ ]*60:[ ]+90[ ]+nop[ ]*
+[ ]*61:[ ]+90[ ]+nop[ ]*
+[ ]*62:[ ]+90[ ]+nop[ ]*
+[ ]*63:[ ]+90[ ]+nop[ ]*
+[ ]*64:[ ]+90[ ]+nop[ ]*
+[ ]*65:[ ]+90[ ]+nop[ ]*
+[ ]*66:[ ]+90[ ]+nop[ ]*
+[ ]*67:[ ]+66 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+
+0+70 <nop8>:
+[ ]*70:[ ]+90[ ]+nop[ ]*
+[ ]*71:[ ]+90[ ]+nop[ ]*
+[ ]*72:[ ]+90[ ]+nop[ ]*
+[ ]*73:[ ]+90[ ]+nop[ ]*
+[ ]*74:[ ]+90[ ]+nop[ ]*
+[ ]*75:[ ]+90[ ]+nop[ ]*
+[ ]*76:[ ]+90[ ]+nop[ ]*
+[ ]*77:[ ]+90[ ]+nop[ ]*
+[ ]*78:[ ]+0f 1f 84 00 00 00 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\)
+
+0+80 <nop7>:
+[ ]*80:[ ]+90[ ]+nop[ ]*
+[ ]*81:[ ]+90[ ]+nop[ ]*
+[ ]*82:[ ]+90[ ]+nop[ ]*
+[ ]*83:[ ]+90[ ]+nop[ ]*
+[ ]*84:[ ]+90[ ]+nop[ ]*
+[ ]*85:[ ]+90[ ]+nop[ ]*
+[ ]*86:[ ]+90[ ]+nop[ ]*
+[ ]*87:[ ]+90[ ]+nop[ ]*
+[ ]*88:[ ]+90[ ]+nop[ ]*
+[ ]*89:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%rax\)
+
+0+90 <nop6>:
+[ ]*90:[ ]+90[ ]+nop[ ]*
+[ ]*91:[ ]+90[ ]+nop[ ]*
+[ ]*92:[ ]+90[ ]+nop[ ]*
+[ ]*93:[ ]+90[ ]+nop[ ]*
+[ ]*94:[ ]+90[ ]+nop[ ]*
+[ ]*95:[ ]+90[ ]+nop[ ]*
+[ ]*96:[ ]+90[ ]+nop[ ]*
+[ ]*97:[ ]+90[ ]+nop[ ]*
+[ ]*98:[ ]+90[ ]+nop[ ]*
+[ ]*99:[ ]+90[ ]+nop[ ]*
+[ ]*9a:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+
+0+a0 <nop5>:
+[ ]*a0:[ ]+90[ ]+nop[ ]*
+[ ]*a1:[ ]+90[ ]+nop[ ]*
+[ ]*a2:[ ]+90[ ]+nop[ ]*
+[ ]*a3:[ ]+90[ ]+nop[ ]*
+[ ]*a4:[ ]+90[ ]+nop[ ]*
+[ ]*a5:[ ]+90[ ]+nop[ ]*
+[ ]*a6:[ ]+90[ ]+nop[ ]*
+[ ]*a7:[ ]+90[ ]+nop[ ]*
+[ ]*a8:[ ]+90[ ]+nop[ ]*
+[ ]*a9:[ ]+90[ ]+nop[ ]*
+[ ]*aa:[ ]+90[ ]+nop[ ]*
+[ ]*ab:[ ]+0f 1f 44 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\)
+
+0+b0 <nop4>:
+[ ]*b0:[ ]+90[ ]+nop[ ]*
+[ ]*b1:[ ]+90[ ]+nop[ ]*
+[ ]*b2:[ ]+90[ ]+nop[ ]*
+[ ]*b3:[ ]+90[ ]+nop[ ]*
+[ ]*b4:[ ]+90[ ]+nop[ ]*
+[ ]*b5:[ ]+90[ ]+nop[ ]*
+[ ]*b6:[ ]+90[ ]+nop[ ]*
+[ ]*b7:[ ]+90[ ]+nop[ ]*
+[ ]*b8:[ ]+90[ ]+nop[ ]*
+[ ]*b9:[ ]+90[ ]+nop[ ]*
+[ ]*ba:[ ]+90[ ]+nop[ ]*
+[ ]*bb:[ ]+90[ ]+nop[ ]*
+[ ]*bc:[ ]+0f 1f 40 00[ ]+nopl[ ]+0x0\(%rax\)
+
+0+c0 <nop3>:
+[ ]*c0:[ ]+90[ ]+nop[ ]*
+[ ]*c1:[ ]+90[ ]+nop[ ]*
+[ ]*c2:[ ]+90[ ]+nop[ ]*
+[ ]*c3:[ ]+90[ ]+nop[ ]*
+[ ]*c4:[ ]+90[ ]+nop[ ]*
+[ ]*c5:[ ]+90[ ]+nop[ ]*
+[ ]*c6:[ ]+90[ ]+nop[ ]*
+[ ]*c7:[ ]+90[ ]+nop[ ]*
+[ ]*c8:[ ]+90[ ]+nop[ ]*
+[ ]*c9:[ ]+90[ ]+nop[ ]*
+[ ]*ca:[ ]+90[ ]+nop[ ]*
+[ ]*cb:[ ]+90[ ]+nop[ ]*
+[ ]*cc:[ ]+90[ ]+nop[ ]*
+[ ]*cd:[ ]+0f 1f 00[ ]+nopl[ ]+\(%rax\)
+
+0+d0 <nop2>:
+[ ]*d0:[ ]+90[ ]+nop[ ]*
+[ ]*d1:[ ]+90[ ]+nop[ ]*
+[ ]*d2:[ ]+90[ ]+nop[ ]*
+[ ]*d3:[ ]+90[ ]+nop[ ]*
+[ ]*d4:[ ]+90[ ]+nop[ ]*
+[ ]*d5:[ ]+90[ ]+nop[ ]*
+[ ]*d6:[ ]+90[ ]+nop[ ]*
+[ ]*d7:[ ]+90[ ]+nop[ ]*
+[ ]*d8:[ ]+90[ ]+nop[ ]*
+[ ]*d9:[ ]+90[ ]+nop[ ]*
+[ ]*da:[ ]+90[ ]+nop[ ]*
+[ ]*db:[ ]+90[ ]+nop[ ]*
+[ ]*dc:[ ]+90[ ]+nop[ ]*
+[ ]*dd:[ ]+90[ ]+nop[ ]*
+[ ]*de:[ ]+66 90[ ]+xchg[ ]+%ax,%ax
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-nops-1-nocona.d b/gas/testsuite/gas/i386/x86-64-nops-1-nocona.d
new file mode 100644
index 000000000000..c1886b605a71
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-nops-1-nocona.d
@@ -0,0 +1,161 @@
+#as: -mtune=nocona
+#source: x86-64-nops-1.s
+#objdump: -drw
+#name: x86-64 -mtune=nocona nops 1
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop15>:
+[ ]*0:[ ]+90[ ]+nop[ ]*
+[ ]*1:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%rax\)
+[ ]*8:[ ]+0f 1f 84 00 00 00 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\)
+
+0+10 <nop14>:
+[ ]*10:[ ]+90[ ]+nop[ ]*
+[ ]*11:[ ]+90[ ]+nop[ ]*
+[ ]*12:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%rax\)
+[ ]*19:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%rax\)
+
+0+20 <nop13>:
+[ ]*20:[ ]+90[ ]+nop[ ]*
+[ ]*21:[ ]+90[ ]+nop[ ]*
+[ ]*22:[ ]+90[ ]+nop[ ]*
+[ ]*23:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+[ ]*29:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%rax\)
+
+0+30 <nop12>:
+[ ]*30:[ ]+90[ ]+nop[ ]*
+[ ]*31:[ ]+90[ ]+nop[ ]*
+[ ]*32:[ ]+90[ ]+nop[ ]*
+[ ]*33:[ ]+90[ ]+nop[ ]*
+[ ]*34:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+[ ]*3a:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+
+0+40 <nop11>:
+[ ]*40:[ ]+90[ ]+nop[ ]*
+[ ]*41:[ ]+90[ ]+nop[ ]*
+[ ]*42:[ ]+90[ ]+nop[ ]*
+[ ]*43:[ ]+90[ ]+nop[ ]*
+[ ]*44:[ ]+90[ ]+nop[ ]*
+[ ]*45:[ ]+0f 1f 44 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\)
+[ ]*4a:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+
+0+50 <nop10>:
+[ ]*50:[ ]+90[ ]+nop[ ]*
+[ ]*51:[ ]+90[ ]+nop[ ]*
+[ ]*52:[ ]+90[ ]+nop[ ]*
+[ ]*53:[ ]+90[ ]+nop[ ]*
+[ ]*54:[ ]+90[ ]+nop[ ]*
+[ ]*55:[ ]+90[ ]+nop[ ]*
+[ ]*56:[ ]+66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%rax,%rax,1\)
+
+0+60 <nop9>:
+[ ]*60:[ ]+90[ ]+nop[ ]*
+[ ]*61:[ ]+90[ ]+nop[ ]*
+[ ]*62:[ ]+90[ ]+nop[ ]*
+[ ]*63:[ ]+90[ ]+nop[ ]*
+[ ]*64:[ ]+90[ ]+nop[ ]*
+[ ]*65:[ ]+90[ ]+nop[ ]*
+[ ]*66:[ ]+90[ ]+nop[ ]*
+[ ]*67:[ ]+66 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+
+0+70 <nop8>:
+[ ]*70:[ ]+90[ ]+nop[ ]*
+[ ]*71:[ ]+90[ ]+nop[ ]*
+[ ]*72:[ ]+90[ ]+nop[ ]*
+[ ]*73:[ ]+90[ ]+nop[ ]*
+[ ]*74:[ ]+90[ ]+nop[ ]*
+[ ]*75:[ ]+90[ ]+nop[ ]*
+[ ]*76:[ ]+90[ ]+nop[ ]*
+[ ]*77:[ ]+90[ ]+nop[ ]*
+[ ]*78:[ ]+0f 1f 84 00 00 00 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\)
+
+0+80 <nop7>:
+[ ]*80:[ ]+90[ ]+nop[ ]*
+[ ]*81:[ ]+90[ ]+nop[ ]*
+[ ]*82:[ ]+90[ ]+nop[ ]*
+[ ]*83:[ ]+90[ ]+nop[ ]*
+[ ]*84:[ ]+90[ ]+nop[ ]*
+[ ]*85:[ ]+90[ ]+nop[ ]*
+[ ]*86:[ ]+90[ ]+nop[ ]*
+[ ]*87:[ ]+90[ ]+nop[ ]*
+[ ]*88:[ ]+90[ ]+nop[ ]*
+[ ]*89:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%rax\)
+
+0+90 <nop6>:
+[ ]*90:[ ]+90[ ]+nop[ ]*
+[ ]*91:[ ]+90[ ]+nop[ ]*
+[ ]*92:[ ]+90[ ]+nop[ ]*
+[ ]*93:[ ]+90[ ]+nop[ ]*
+[ ]*94:[ ]+90[ ]+nop[ ]*
+[ ]*95:[ ]+90[ ]+nop[ ]*
+[ ]*96:[ ]+90[ ]+nop[ ]*
+[ ]*97:[ ]+90[ ]+nop[ ]*
+[ ]*98:[ ]+90[ ]+nop[ ]*
+[ ]*99:[ ]+90[ ]+nop[ ]*
+[ ]*9a:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+
+0+a0 <nop5>:
+[ ]*a0:[ ]+90[ ]+nop[ ]*
+[ ]*a1:[ ]+90[ ]+nop[ ]*
+[ ]*a2:[ ]+90[ ]+nop[ ]*
+[ ]*a3:[ ]+90[ ]+nop[ ]*
+[ ]*a4:[ ]+90[ ]+nop[ ]*
+[ ]*a5:[ ]+90[ ]+nop[ ]*
+[ ]*a6:[ ]+90[ ]+nop[ ]*
+[ ]*a7:[ ]+90[ ]+nop[ ]*
+[ ]*a8:[ ]+90[ ]+nop[ ]*
+[ ]*a9:[ ]+90[ ]+nop[ ]*
+[ ]*aa:[ ]+90[ ]+nop[ ]*
+[ ]*ab:[ ]+0f 1f 44 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\)
+
+0+b0 <nop4>:
+[ ]*b0:[ ]+90[ ]+nop[ ]*
+[ ]*b1:[ ]+90[ ]+nop[ ]*
+[ ]*b2:[ ]+90[ ]+nop[ ]*
+[ ]*b3:[ ]+90[ ]+nop[ ]*
+[ ]*b4:[ ]+90[ ]+nop[ ]*
+[ ]*b5:[ ]+90[ ]+nop[ ]*
+[ ]*b6:[ ]+90[ ]+nop[ ]*
+[ ]*b7:[ ]+90[ ]+nop[ ]*
+[ ]*b8:[ ]+90[ ]+nop[ ]*
+[ ]*b9:[ ]+90[ ]+nop[ ]*
+[ ]*ba:[ ]+90[ ]+nop[ ]*
+[ ]*bb:[ ]+90[ ]+nop[ ]*
+[ ]*bc:[ ]+0f 1f 40 00[ ]+nopl[ ]+0x0\(%rax\)
+
+0+c0 <nop3>:
+[ ]*c0:[ ]+90[ ]+nop[ ]*
+[ ]*c1:[ ]+90[ ]+nop[ ]*
+[ ]*c2:[ ]+90[ ]+nop[ ]*
+[ ]*c3:[ ]+90[ ]+nop[ ]*
+[ ]*c4:[ ]+90[ ]+nop[ ]*
+[ ]*c5:[ ]+90[ ]+nop[ ]*
+[ ]*c6:[ ]+90[ ]+nop[ ]*
+[ ]*c7:[ ]+90[ ]+nop[ ]*
+[ ]*c8:[ ]+90[ ]+nop[ ]*
+[ ]*c9:[ ]+90[ ]+nop[ ]*
+[ ]*ca:[ ]+90[ ]+nop[ ]*
+[ ]*cb:[ ]+90[ ]+nop[ ]*
+[ ]*cc:[ ]+90[ ]+nop[ ]*
+[ ]*cd:[ ]+0f 1f 00[ ]+nopl[ ]+\(%rax\)
+
+0+d0 <nop2>:
+[ ]*d0:[ ]+90[ ]+nop[ ]*
+[ ]*d1:[ ]+90[ ]+nop[ ]*
+[ ]*d2:[ ]+90[ ]+nop[ ]*
+[ ]*d3:[ ]+90[ ]+nop[ ]*
+[ ]*d4:[ ]+90[ ]+nop[ ]*
+[ ]*d5:[ ]+90[ ]+nop[ ]*
+[ ]*d6:[ ]+90[ ]+nop[ ]*
+[ ]*d7:[ ]+90[ ]+nop[ ]*
+[ ]*d8:[ ]+90[ ]+nop[ ]*
+[ ]*d9:[ ]+90[ ]+nop[ ]*
+[ ]*da:[ ]+90[ ]+nop[ ]*
+[ ]*db:[ ]+90[ ]+nop[ ]*
+[ ]*dc:[ ]+90[ ]+nop[ ]*
+[ ]*dd:[ ]+90[ ]+nop[ ]*
+[ ]*de:[ ]+66 90[ ]+xchg[ ]+%ax,%ax
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-nops-1.d b/gas/testsuite/gas/i386/x86-64-nops-1.d
new file mode 100644
index 000000000000..a6d8188754ac
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-nops-1.d
@@ -0,0 +1,160 @@
+#source: x86-64-nops-1.s
+#objdump: -drw
+#name: x86-64 nops 1
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop15>:
+[ ]*0:[ ]+90[ ]+nop[ ]*
+[ ]*1:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%rax\)
+[ ]*8:[ ]+0f 1f 84 00 00 00 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\)
+
+0+10 <nop14>:
+[ ]*10:[ ]+90[ ]+nop[ ]*
+[ ]*11:[ ]+90[ ]+nop[ ]*
+[ ]*12:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%rax\)
+[ ]*19:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%rax\)
+
+0+20 <nop13>:
+[ ]*20:[ ]+90[ ]+nop[ ]*
+[ ]*21:[ ]+90[ ]+nop[ ]*
+[ ]*22:[ ]+90[ ]+nop[ ]*
+[ ]*23:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+[ ]*29:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%rax\)
+
+0+30 <nop12>:
+[ ]*30:[ ]+90[ ]+nop[ ]*
+[ ]*31:[ ]+90[ ]+nop[ ]*
+[ ]*32:[ ]+90[ ]+nop[ ]*
+[ ]*33:[ ]+90[ ]+nop[ ]*
+[ ]*34:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+[ ]*3a:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+
+0+40 <nop11>:
+[ ]*40:[ ]+90[ ]+nop[ ]*
+[ ]*41:[ ]+90[ ]+nop[ ]*
+[ ]*42:[ ]+90[ ]+nop[ ]*
+[ ]*43:[ ]+90[ ]+nop[ ]*
+[ ]*44:[ ]+90[ ]+nop[ ]*
+[ ]*45:[ ]+0f 1f 44 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\)
+[ ]*4a:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+
+0+50 <nop10>:
+[ ]*50:[ ]+90[ ]+nop[ ]*
+[ ]*51:[ ]+90[ ]+nop[ ]*
+[ ]*52:[ ]+90[ ]+nop[ ]*
+[ ]*53:[ ]+90[ ]+nop[ ]*
+[ ]*54:[ ]+90[ ]+nop[ ]*
+[ ]*55:[ ]+90[ ]+nop[ ]*
+[ ]*56:[ ]+66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%rax,%rax,1\)
+
+0+60 <nop9>:
+[ ]*60:[ ]+90[ ]+nop[ ]*
+[ ]*61:[ ]+90[ ]+nop[ ]*
+[ ]*62:[ ]+90[ ]+nop[ ]*
+[ ]*63:[ ]+90[ ]+nop[ ]*
+[ ]*64:[ ]+90[ ]+nop[ ]*
+[ ]*65:[ ]+90[ ]+nop[ ]*
+[ ]*66:[ ]+90[ ]+nop[ ]*
+[ ]*67:[ ]+66 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+
+0+70 <nop8>:
+[ ]*70:[ ]+90[ ]+nop[ ]*
+[ ]*71:[ ]+90[ ]+nop[ ]*
+[ ]*72:[ ]+90[ ]+nop[ ]*
+[ ]*73:[ ]+90[ ]+nop[ ]*
+[ ]*74:[ ]+90[ ]+nop[ ]*
+[ ]*75:[ ]+90[ ]+nop[ ]*
+[ ]*76:[ ]+90[ ]+nop[ ]*
+[ ]*77:[ ]+90[ ]+nop[ ]*
+[ ]*78:[ ]+0f 1f 84 00 00 00 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\)
+
+0+80 <nop7>:
+[ ]*80:[ ]+90[ ]+nop[ ]*
+[ ]*81:[ ]+90[ ]+nop[ ]*
+[ ]*82:[ ]+90[ ]+nop[ ]*
+[ ]*83:[ ]+90[ ]+nop[ ]*
+[ ]*84:[ ]+90[ ]+nop[ ]*
+[ ]*85:[ ]+90[ ]+nop[ ]*
+[ ]*86:[ ]+90[ ]+nop[ ]*
+[ ]*87:[ ]+90[ ]+nop[ ]*
+[ ]*88:[ ]+90[ ]+nop[ ]*
+[ ]*89:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%rax\)
+
+0+90 <nop6>:
+[ ]*90:[ ]+90[ ]+nop[ ]*
+[ ]*91:[ ]+90[ ]+nop[ ]*
+[ ]*92:[ ]+90[ ]+nop[ ]*
+[ ]*93:[ ]+90[ ]+nop[ ]*
+[ ]*94:[ ]+90[ ]+nop[ ]*
+[ ]*95:[ ]+90[ ]+nop[ ]*
+[ ]*96:[ ]+90[ ]+nop[ ]*
+[ ]*97:[ ]+90[ ]+nop[ ]*
+[ ]*98:[ ]+90[ ]+nop[ ]*
+[ ]*99:[ ]+90[ ]+nop[ ]*
+[ ]*9a:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+
+0+a0 <nop5>:
+[ ]*a0:[ ]+90[ ]+nop[ ]*
+[ ]*a1:[ ]+90[ ]+nop[ ]*
+[ ]*a2:[ ]+90[ ]+nop[ ]*
+[ ]*a3:[ ]+90[ ]+nop[ ]*
+[ ]*a4:[ ]+90[ ]+nop[ ]*
+[ ]*a5:[ ]+90[ ]+nop[ ]*
+[ ]*a6:[ ]+90[ ]+nop[ ]*
+[ ]*a7:[ ]+90[ ]+nop[ ]*
+[ ]*a8:[ ]+90[ ]+nop[ ]*
+[ ]*a9:[ ]+90[ ]+nop[ ]*
+[ ]*aa:[ ]+90[ ]+nop[ ]*
+[ ]*ab:[ ]+0f 1f 44 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\)
+
+0+b0 <nop4>:
+[ ]*b0:[ ]+90[ ]+nop[ ]*
+[ ]*b1:[ ]+90[ ]+nop[ ]*
+[ ]*b2:[ ]+90[ ]+nop[ ]*
+[ ]*b3:[ ]+90[ ]+nop[ ]*
+[ ]*b4:[ ]+90[ ]+nop[ ]*
+[ ]*b5:[ ]+90[ ]+nop[ ]*
+[ ]*b6:[ ]+90[ ]+nop[ ]*
+[ ]*b7:[ ]+90[ ]+nop[ ]*
+[ ]*b8:[ ]+90[ ]+nop[ ]*
+[ ]*b9:[ ]+90[ ]+nop[ ]*
+[ ]*ba:[ ]+90[ ]+nop[ ]*
+[ ]*bb:[ ]+90[ ]+nop[ ]*
+[ ]*bc:[ ]+0f 1f 40 00[ ]+nopl[ ]+0x0\(%rax\)
+
+0+c0 <nop3>:
+[ ]*c0:[ ]+90[ ]+nop[ ]*
+[ ]*c1:[ ]+90[ ]+nop[ ]*
+[ ]*c2:[ ]+90[ ]+nop[ ]*
+[ ]*c3:[ ]+90[ ]+nop[ ]*
+[ ]*c4:[ ]+90[ ]+nop[ ]*
+[ ]*c5:[ ]+90[ ]+nop[ ]*
+[ ]*c6:[ ]+90[ ]+nop[ ]*
+[ ]*c7:[ ]+90[ ]+nop[ ]*
+[ ]*c8:[ ]+90[ ]+nop[ ]*
+[ ]*c9:[ ]+90[ ]+nop[ ]*
+[ ]*ca:[ ]+90[ ]+nop[ ]*
+[ ]*cb:[ ]+90[ ]+nop[ ]*
+[ ]*cc:[ ]+90[ ]+nop[ ]*
+[ ]*cd:[ ]+0f 1f 00[ ]+nopl[ ]+\(%rax\)
+
+0+d0 <nop2>:
+[ ]*d0:[ ]+90[ ]+nop[ ]*
+[ ]*d1:[ ]+90[ ]+nop[ ]*
+[ ]*d2:[ ]+90[ ]+nop[ ]*
+[ ]*d3:[ ]+90[ ]+nop[ ]*
+[ ]*d4:[ ]+90[ ]+nop[ ]*
+[ ]*d5:[ ]+90[ ]+nop[ ]*
+[ ]*d6:[ ]+90[ ]+nop[ ]*
+[ ]*d7:[ ]+90[ ]+nop[ ]*
+[ ]*d8:[ ]+90[ ]+nop[ ]*
+[ ]*d9:[ ]+90[ ]+nop[ ]*
+[ ]*da:[ ]+90[ ]+nop[ ]*
+[ ]*db:[ ]+90[ ]+nop[ ]*
+[ ]*dc:[ ]+90[ ]+nop[ ]*
+[ ]*dd:[ ]+90[ ]+nop[ ]*
+[ ]*de:[ ]+66 90[ ]+xchg[ ]+%ax,%ax
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-nops-1.s b/gas/testsuite/gas/i386/x86-64-nops-1.s
new file mode 100644
index 000000000000..a4fd7694de76
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-nops-1.s
@@ -0,0 +1,147 @@
+ .text
+nop15:
+ nop
+ .p2align 4
+
+nop14:
+ nop
+ nop
+ .p2align 4
+
+nop13:
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop12:
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop11:
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop10:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop9:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop8:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop7:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop6:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop5:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop4:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop3:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
+
+nop2:
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .p2align 4
diff --git a/gas/testsuite/gas/i386/x86-64-nops.d b/gas/testsuite/gas/i386/x86-64-nops.d
new file mode 100644
index 000000000000..916361925359
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-nops.d
@@ -0,0 +1,37 @@
+#objdump: -drw
+#name: x86-64 nops
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <.text>:
+[ ]*0:[ ]+0f 1f 00[ ]+nopl[ ]+\(%rax\)
+[ ]*3:[ ]+0f 1f 40 00[ ]+nopl[ ]+0x0\(%rax\)
+[ ]*7:[ ]+0f 1f 44 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\)
+[ ]*c:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+[ ]*12:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%rax\)
+[ ]*19:[ ]+0f 1f 84 00 00 00 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\)
+[ ]*21:[ ]+66 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\)
+[ ]*2a:[ ]+66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%rax,%rax,1\)
+[ ]*34:[ ]+0f 1f 00[ ]+nopl[ ]+\(%rax\)
+[ ]*37:[ ]+48 0f 1f c0[ ]+nop[ ]+%rax
+[ ]*3b:[ ]+0f 1f c0[ ]+nop[ ]+%eax
+[ ]*3e:[ ]+66 0f 1f c0[ ]+nop[ ]+%ax
+[ ]*42:[ ]+48 0f 1f 00[ ]+nopq[ ]+\(%rax\)
+[ ]*46:[ ]+0f 1f 00[ ]+nopl[ ]+\(%rax\)
+[ ]*49:[ ]+66 0f 1f 00[ ]+nopw[ ]+\(%rax\)
+[ ]*4d:[ ]+48 0f 1f c0[ ]+nop[ ]+%rax
+[ ]*51:[ ]+0f 1f c0[ ]+nop[ ]+%eax
+[ ]*54:[ ]+66 0f 1f c0[ ]+nop[ ]+%ax
+[ ]*58:[ ]+41 0f 1f 02[ ]+nopl[ ]+\(%r10\)
+[ ]*5c:[ ]+49 0f 1f c2[ ]+nop[ ]+%r10
+[ ]*60:[ ]+41 0f 1f c2[ ]+nop[ ]+%r10d
+[ ]*64:[ ]+66 41 0f 1f c2[ ]+nop[ ]+%r10w
+[ ]*69:[ ]+49 0f 1f 02[ ]+nopq[ ]+\(%r10\)
+[ ]*6d:[ ]+41 0f 1f 02[ ]+nopl[ ]+\(%r10\)
+[ ]*71:[ ]+66 41 0f 1f 02[ ]+nopw[ ]+\(%r10\)
+[ ]*76:[ ]+49 0f 1f c2[ ]+nop[ ]+%r10
+[ ]*7a:[ ]+41 0f 1f c2[ ]+nop[ ]+%r10d
+[ ]*7e:[ ]+66 41 0f 1f c2[ ]+nop[ ]+%r10w
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-nops.s b/gas/testsuite/gas/i386/x86-64-nops.s
new file mode 100644
index 000000000000..2268e7f57699
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-nops.s
@@ -0,0 +1,33 @@
+ .text
+
+ .byte 0x0f, 0x1f, 0x0
+ .byte 0x0f, 0x1f, 0x40, 0x0
+ .byte 0x0f, 0x1f, 0x44, 0x0, 0x0
+ .byte 0x66, 0x0f, 0x1f, 0x44, 0x0, 0x0
+ .byte 0x0f, 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0
+ .byte 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0
+ .byte 0x66, 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0
+ .byte 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0
+
+ nop (%rax)
+ nop %rax
+ nop %eax
+ nop %ax
+ nopq (%rax)
+ nopl (%rax)
+ nopw (%rax)
+ nopq %rax
+ nopl %eax
+ nopw %ax
+ nop (%r10)
+ nop %r10
+ nop %r10d
+ nop %r10w
+ nopq (%r10)
+ nopl (%r10)
+ nopw (%r10)
+ nopq %r10
+ nopl %r10d
+ nopw %r10w
+
+ .p2align 4
diff --git a/gas/testsuite/gas/i386/x86-64-opcode.d b/gas/testsuite/gas/i386/x86-64-opcode.d
index 13d58be1bdb8..912075e3bee9 100644
--- a/gas/testsuite/gas/i386/x86-64-opcode.d
+++ b/gas/testsuite/gas/i386/x86-64-opcode.d
@@ -2,7 +2,7 @@
#objdump: -drw
#name: x86-64 opcode
-.*: +file format elf64-x86-64
+.*: +file format .*
Disassembly of section .text:
@@ -263,9 +263,33 @@ Disassembly of section .text:
[ ]*[0-9a-f]+:[ ]+41 0f 01 38[ ]+invlpg[ ]+\(%r8\)[ ]*(#.*)*
[ ]*[0-9a-f]+:[ ]+0f 01 38[ ]+invlpg[ ]+\(%rax\)[ ]*(#.*)*
[ ]*[0-9a-f]+:[ ]+0f 00 c0[ ]+sldt[ ]+%eax[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+48 0f 00 c0[ ]+sldt[ ]+%rax[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+66 0f 00 c0[ ]+sldt[ ]+%ax[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+0f 00 00[ ]+sldt[ ]+\(%rax\)[ ]*(#.*)*
[ ]*[0-9a-f]+:[ ]+e6 00[ ]+out[ ]+%al,\$0[x0]*[ ]*(#.*)*
[ ]*[0-9a-f]+:[ ]+66 e7 00[ ]+out[ ]+%ax,\$0[x0]*[ ]*(#.*)*
[ ]*[0-9a-f]+:[ ]+e7 00[ ]+out[ ]+%eax,\$0[x0]*[ ]*(#.*)*
-[ ]*[0-9a-f]+:[ ]+00 00[ ]+.*
-[ ]*[0-9a-f]+:[ ]+00 00[ ]+.*
-[ *]...
+[ ]*[0-9a-f]+:[ ]+66 90[ ]+xchg[ ]+%ax,%ax[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+87 c0[ ]+xchg[ ]+%eax,%eax[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+90[ ]+nop[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+48 90[ ]+rex.W nop[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+49 90[ ]+xchg[ ]+%rax,%r8[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+41 90[ ]+xchg[ ]+%eax,%r8d[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+41 90[ ]+xchg[ ]+%eax,%r8d[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+41 91[ ]+xchg[ ]+%eax,%r9d[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+41 91[ ]+xchg[ ]+%eax,%r9d[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+93[ ]+xchg[ ]+%eax,%ebx[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+93[ ]+xchg[ ]+%eax,%ebx[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+66 41 90[ ]+xchg[ ]+%ax,%r8w[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+66 41 90[ ]+xchg[ ]+%ax,%r8w[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+66 41 91[ ]+xchg[ ]+%ax,%r9w[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+66 41 91[ ]+xchg[ ]+%ax,%r9w[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+48 0f 01 e0[ ]+smsw[ ]+%rax[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+0f 01 e0[ ]+smsw[ ]+%eax[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+66 0f 01 e0[ ]+smsw[ ]+%ax[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+0f 01 20[ ]+smsw[ ]+\(%rax\)[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+48 0f 00 c8[ ]+str[ ]+%rax[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+0f 00 c8[ ]+str[ ]+%eax[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+66 0f 00 c8[ ]+str[ ]+%ax[ ]*(#.*)*
+[ ]*[0-9a-f]+:[ ]+0f 00 08[ ]+str[ ]+\(%rax\)[ ]*(#.*)*
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-opcode.s b/gas/testsuite/gas/i386/x86-64-opcode.s
index 8b132b390468..dd373427dde1 100644
--- a/gas/testsuite/gas/i386/x86-64-opcode.s
+++ b/gas/testsuite/gas/i386/x86-64-opcode.s
@@ -373,6 +373,9 @@
# SLDT
# SLDT (%eax) # -- 67 -- -- 0F 00 00 ; A32 override: (Addr64) = ZEXT(Addr32 )
SLDT %eax # -- -- -- -- 0F 00 C0
+ SLDT %rax # -- -- -- 48 0F 00 C0
+ SLDT %ax # 66 -- -- -- 0F 00 C0
+ SLDT (%rax) # -- -- -- -- 0F 00 00
# SWAPGS
@@ -387,4 +390,32 @@
# IN
+
+
+ xchg %ax,%ax # 66 -- -- -- 90
+ xchg %eax,%eax # -- -- -- -- 87 C0
+ xchg %rax,%rax # -- -- -- -- 90
+ rex64 xchg %rax,%rax # -- -- -- 48 90
+ xchg %rax,%r8 # -- -- -- 49 90
+ xchg %eax,%r8d # -- -- -- 41 90
+ xchg %r8d,%eax # -- -- -- 41 90
+ xchg %eax,%r9d # -- -- -- 41 91
+ xchg %r9d,%eax # -- -- -- 41 91
+ xchg %ebx,%eax # -- -- -- 93
+ xchg %eax,%ebx # -- -- -- 93
+ xchg %ax,%r8w # -- -- -- 66 41 90
+ xchg %r8w,%ax # -- -- -- 66 41 90
+ xchg %ax,%r9w # -- -- -- 66 41 91
+ xchg %r9w,%ax # -- -- -- 66 41 91
+
+ smsw %rax # -- -- -- 48 0F 01 e0
+ smsw %eax # -- -- -- -- 0F 01 e0
+ smsw %ax # 66 -- -- -- 0F 01 e0
+ smsw (%rax) # -- -- -- -- 0F 01 20
+
+ str %rax # -- -- -- 48 0F 00 c8
+ str %eax # -- -- -- -- 0F 00 c8
+ str %ax # 66 -- -- -- 0F 00 c8
+ str (%rax) # -- -- -- -- 0F 00 08
+
.p2align 4,0
diff --git a/gas/testsuite/gas/i386/x86-64-pcrel.d b/gas/testsuite/gas/i386/x86-64-pcrel.d
index 3be86c7c3405..818ea2e6f734 100644
--- a/gas/testsuite/gas/i386/x86-64-pcrel.d
+++ b/gas/testsuite/gas/i386/x86-64-pcrel.d
@@ -1,7 +1,7 @@
#objdump: -drw
#name: x86-64 pcrel
-.*: +file format elf64-x86-64
+.*: +file format .*
Disassembly of section .text:
diff --git a/gas/testsuite/gas/i386/x86-64-prescott.d b/gas/testsuite/gas/i386/x86-64-prescott.d
index 43a2d2802027..26b9e6ec95f6 100644
--- a/gas/testsuite/gas/i386/x86-64-prescott.d
+++ b/gas/testsuite/gas/i386/x86-64-prescott.d
@@ -10,9 +10,9 @@ Disassembly of section .text:
4: 66 0f d0 ca [ ]*addsubpd %xmm2,%xmm1
8: f2 0f d0 13 [ ]*addsubps \(%rbx\),%xmm2
c: f2 0f d0 dc [ ]*addsubps %xmm4,%xmm3
- 10: df 88 90 90 90 90 [ ]*fisttp 0xffffffff90909090\(%rax\)
- 16: db 88 90 90 90 90 [ ]*fisttpl 0xffffffff90909090\(%rax\)
- 1c: dd 88 90 90 90 90 [ ]*fisttpll 0xffffffff90909090\(%rax\)
+ 10: df 88 90 90 90 90 [ ]*fisttp -0x6f6f6f70\(%rax\)
+ 16: db 88 90 90 90 90 [ ]*fisttpl -0x6f6f6f70\(%rax\)
+ 1c: dd 88 90 90 90 90 [ ]*fisttpll -0x6f6f6f70\(%rax\)
22: 66 0f 7c 65 00 [ ]*haddpd 0x0\(%rbp\),%xmm4
27: 66 0f 7c ee [ ]*haddpd %xmm6,%xmm5
2b: f2 0f 7c 37 [ ]*haddps \(%rdi\),%xmm6
diff --git a/gas/testsuite/gas/i386/x86-64-rep-suffix.d b/gas/testsuite/gas/i386/x86-64-rep-suffix.d
index a85b4a941779..68a90d9d6be4 100644
--- a/gas/testsuite/gas/i386/x86-64-rep-suffix.d
+++ b/gas/testsuite/gas/i386/x86-64-rep-suffix.d
@@ -8,8 +8,8 @@ Disassembly of section .text:
0+000 <_start>:
0: f3 ac[ ]+rep lodsb %ds:\(%rsi\),%al
2: f3 aa[ ]+rep stosb %al,%es:\(%rdi\)
- 4: f3 66 ad[ ]+rep lodsw %ds:\(%rsi\),%ax
- 7: f3 66 ab[ ]+rep stosw %ax,%es:\(%rdi\)
+ 4: 66 f3 ad[ ]+rep lodsw %ds:\(%rsi\),%ax
+ 7: 66 f3 ab[ ]+rep stosw %ax,%es:\(%rdi\)
a: f3 ad[ ]+rep lodsl %ds:\(%rsi\),%eax
c: f3 ab[ ]+rep stosl %eax,%es:\(%rdi\)
e: f3 48 ad[ ]+rep lodsq %ds:\(%rsi\),%rax
diff --git a/gas/testsuite/gas/i386/x86-64-rep.d b/gas/testsuite/gas/i386/x86-64-rep.d
index 631b7113d8e7..66fc03636c58 100644
--- a/gas/testsuite/gas/i386/x86-64-rep.d
+++ b/gas/testsuite/gas/i386/x86-64-rep.d
@@ -13,13 +13,13 @@ Disassembly of section .text:
8: f3 aa[ ]+rep stos %al,%es:\(%rdi\)
a: f3 a6[ ]+repz cmpsb %es:\(%rdi\),%ds:\(%rsi\)
c: f3 ae[ ]+repz scas %es:\(%rdi\),%al
- e: f3 66 6d[ ]+rep insw \(%dx\),%es:\(%rdi\)
- 11: f3 66 6f[ ]+rep outsw %ds:\(%rsi\),\(%dx\)
- 14: f3 66 a5[ ]+rep movsw %ds:\(%rsi\),%es:\(%rdi\)
- 17: f3 66 ad[ ]+rep lods %ds:\(%rsi\),%ax
- 1a: f3 66 ab[ ]+rep stos %ax,%es:\(%rdi\)
- 1d: f3 66 a7[ ]+repz cmpsw %es:\(%rdi\),%ds:\(%rsi\)
- 20: f3 66 af[ ]+repz scas %es:\(%rdi\),%ax
+ e: 66 f3 6d[ ]+rep insw \(%dx\),%es:\(%rdi\)
+ 11: 66 f3 6f[ ]+rep outsw %ds:\(%rsi\),\(%dx\)
+ 14: 66 f3 a5[ ]+rep movsw %ds:\(%rsi\),%es:\(%rdi\)
+ 17: 66 f3 ad[ ]+rep lods %ds:\(%rsi\),%ax
+ 1a: 66 f3 ab[ ]+rep stos %ax,%es:\(%rdi\)
+ 1d: 66 f3 a7[ ]+repz cmpsw %es:\(%rdi\),%ds:\(%rsi\)
+ 20: 66 f3 af[ ]+repz scas %es:\(%rdi\),%ax
23: f3 6d[ ]+rep insl \(%dx\),%es:\(%rdi\)
25: f3 6f[ ]+rep outsl %ds:\(%rsi\),\(%dx\)
27: f3 a5[ ]+rep movsl %ds:\(%rsi\),%es:\(%rdi\)
@@ -32,30 +32,30 @@ Disassembly of section .text:
37: f3 48 ab[ ]+rep stos %rax,%es:\(%rdi\)
3a: f3 48 a7[ ]+repz cmpsq %es:\(%rdi\),%ds:\(%rsi\)
3d: f3 48 af[ ]+repz scas %es:\(%rdi\),%rax
- 40: f3 67 6c[ ]+rep addr32 insb \(%dx\),%es:\(%edi\)
- 43: f3 67 6e[ ]+rep addr32 outsb %ds:\(%esi\),\(%dx\)
- 46: f3 67 a4[ ]+rep addr32 movsb %ds:\(%esi\),%es:\(%edi\)
- 49: f3 67 ac[ ]+rep addr32 lods %ds:\(%esi\),%al
- 4c: f3 67 aa[ ]+rep addr32 stos %al,%es:\(%edi\)
- 4f: f3 67 a6[ ]+repz addr32 cmpsb %es:\(%edi\),%ds:\(%esi\)
- 52: f3 67 ae[ ]+repz addr32 scas %es:\(%edi\),%al
- 55: f3 67 66 6d[ ]+rep addr32 insw \(%dx\),%es:\(%edi\)
- 59: f3 67 66 6f[ ]+rep addr32 outsw %ds:\(%esi\),\(%dx\)
- 5d: f3 67 66 a5[ ]+rep addr32 movsw %ds:\(%esi\),%es:\(%edi\)
- 61: f3 67 66 ad[ ]+rep addr32 lods %ds:\(%esi\),%ax
- 65: f3 67 66 ab[ ]+rep addr32 stos %ax,%es:\(%edi\)
- 69: f3 67 66 a7[ ]+repz addr32 cmpsw %es:\(%edi\),%ds:\(%esi\)
- 6d: f3 67 66 af[ ]+repz addr32 scas %es:\(%edi\),%ax
- 71: f3 67 6d[ ]+rep addr32 insl \(%dx\),%es:\(%edi\)
- 74: f3 67 6f[ ]+rep addr32 outsl %ds:\(%esi\),\(%dx\)
- 77: f3 67 a5[ ]+rep addr32 movsl %ds:\(%esi\),%es:\(%edi\)
- 7a: f3 67 ad[ ]+rep addr32 lods %ds:\(%esi\),%eax
- 7d: f3 67 ab[ ]+rep addr32 stos %eax,%es:\(%edi\)
- 80: f3 67 a7[ ]+repz addr32 cmpsl %es:\(%edi\),%ds:\(%esi\)
- 83: f3 67 af[ ]+repz addr32 scas %es:\(%edi\),%eax
- 86: f3 67 48 a5[ ]+rep addr32 movsq %ds:\(%esi\),%es:\(%edi\)
- 8a: f3 67 48 ad[ ]+rep addr32 lods %ds:\(%esi\),%rax
- 8e: f3 67 48 ab[ ]+rep addr32 stos %rax,%es:\(%edi\)
- 92: f3 67 48 a7[ ]+repz addr32 cmpsq %es:\(%edi\),%ds:\(%esi\)
- 96: f3 67 48 af[ ]+repz addr32 scas %es:\(%edi\),%rax
+ 40: 67 f3 6c[ ]+rep addr32 insb \(%dx\),%es:\(%edi\)
+ 43: 67 f3 6e[ ]+rep addr32 outsb %ds:\(%esi\),\(%dx\)
+ 46: 67 f3 a4[ ]+rep addr32 movsb %ds:\(%esi\),%es:\(%edi\)
+ 49: 67 f3 ac[ ]+rep addr32 lods %ds:\(%esi\),%al
+ 4c: 67 f3 aa[ ]+rep addr32 stos %al,%es:\(%edi\)
+ 4f: 67 f3 a6[ ]+repz addr32 cmpsb %es:\(%edi\),%ds:\(%esi\)
+ 52: 67 f3 ae[ ]+repz addr32 scas %es:\(%edi\),%al
+ 55: 67 66 f3 6d[ ]+rep addr32 insw \(%dx\),%es:\(%edi\)
+ 59: 67 66 f3 6f[ ]+rep addr32 outsw %ds:\(%esi\),\(%dx\)
+ 5d: 67 66 f3 a5[ ]+rep addr32 movsw %ds:\(%esi\),%es:\(%edi\)
+ 61: 67 66 f3 ad[ ]+rep addr32 lods %ds:\(%esi\),%ax
+ 65: 67 66 f3 ab[ ]+rep addr32 stos %ax,%es:\(%edi\)
+ 69: 67 66 f3 a7[ ]+repz addr32 cmpsw %es:\(%edi\),%ds:\(%esi\)
+ 6d: 67 66 f3 af[ ]+repz addr32 scas %es:\(%edi\),%ax
+ 71: 67 f3 6d[ ]+rep addr32 insl \(%dx\),%es:\(%edi\)
+ 74: 67 f3 6f[ ]+rep addr32 outsl %ds:\(%esi\),\(%dx\)
+ 77: 67 f3 a5[ ]+rep addr32 movsl %ds:\(%esi\),%es:\(%edi\)
+ 7a: 67 f3 ad[ ]+rep addr32 lods %ds:\(%esi\),%eax
+ 7d: 67 f3 ab[ ]+rep addr32 stos %eax,%es:\(%edi\)
+ 80: 67 f3 a7[ ]+repz addr32 cmpsl %es:\(%edi\),%ds:\(%esi\)
+ 83: 67 f3 af[ ]+repz addr32 scas %es:\(%edi\),%eax
+ 86: 67 f3 48 a5[ ]+rep addr32 movsq %ds:\(%esi\),%es:\(%edi\)
+ 8a: 67 f3 48 ad[ ]+rep addr32 lods %ds:\(%esi\),%rax
+ 8e: 67 f3 48 ab[ ]+rep addr32 stos %rax,%es:\(%edi\)
+ 92: 67 f3 48 a7[ ]+repz addr32 cmpsq %es:\(%edi\),%ds:\(%esi\)
+ 96: 67 f3 48 af[ ]+repz addr32 scas %es:\(%edi\),%rax
#pass
diff --git a/gas/testsuite/gas/i386/x86-64-rip-intel.d b/gas/testsuite/gas/i386/x86-64-rip-intel.d
new file mode 100644
index 000000000000..162f654c556d
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-rip-intel.d
@@ -0,0 +1,15 @@
+#as: -J
+#objdump: -drwMintel
+#name: x86-64 rip addressing (Intel mode)
+#source: x86-64-rip.s
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <.text>:
+[ ]*0:[ ]+8d 05 00 00 00 00[ ]+lea[ ]+eax,\[rip\+0x0\][ ]*(#.*)?
+[ ]*6:[ ]+8d 05 11 11 11 11[ ]+lea[ ]+eax,\[rip\+0x11111111\][ ]*(#.*)?
+[ ]*c:[ ]+8d 05 01 00 00 00[ ]+lea[ ]+eax,\[rip\+0x1\][ ]*(#.*)?
+[ ]*12:[ ]+8d 05 00 00 00 00[ ]+lea[ ]+eax,\[rip\+0x0\][ ]*(#.*)?
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-rip.d b/gas/testsuite/gas/i386/x86-64-rip.d
index 1b1d6c8a31c5..66fe771b9608 100644
--- a/gas/testsuite/gas/i386/x86-64-rip.d
+++ b/gas/testsuite/gas/i386/x86-64-rip.d
@@ -2,12 +2,13 @@
#objdump: -drw
#name: x86-64 rip addressing
-.*: +file format elf64-x86-64
+.*: +file format .*
Disassembly of section .text:
0+000 <.text>:
-[ ]*0:[ ]+8d 05 00 00 00 00[ ]+lea[ ]+0\(%rip\),%eax[ ]*(#.*)?
-[ ]*6:[ ]+8d 05 11 11 11 11[ ]+lea[ ]+286331153\(%rip\),%eax[ ]*(#.*)?
-[ ]*c:[ ]+8d 05 01 00 00 00[ ]+lea[ ]+1\(%rip\),%eax[ ]*(#.*)?
-[ ]*12:[ ]+8d 05 00 00 00 00[ ]+lea[ ]+0\(%rip\),%eax[ ]*(#.*)?
+[ ]*0:[ ]+8d 05 00 00 00 00[ ]+lea[ ]+0x0\(%rip\),%eax[ ]*(#.*)?
+[ ]*6:[ ]+8d 05 11 11 11 11[ ]+lea[ ]+0x11111111\(%rip\),%eax[ ]*(#.*)?
+[ ]*c:[ ]+8d 05 01 00 00 00[ ]+lea[ ]+0x1\(%rip\),%eax[ ]*(#.*)?
+[ ]*12:[ ]+8d 05 00 00 00 00[ ]+lea[ ]+0x0\(%rip\),%eax[ ]*(#.*)?
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-simd-intel.d b/gas/testsuite/gas/i386/x86-64-simd-intel.d
new file mode 100644
index 000000000000..799a9b314cf0
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-simd-intel.d
@@ -0,0 +1,37 @@
+#source: x86-64-simd.s
+#as: -J
+#objdump: -dw -Mintel
+#name: x86-64 SIMD (Intel mode)
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <_start>:
+[ ]*[a-f0-9]+: f2 0f d0 0d 78 56 34 12 addsubps xmm1,XMMWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: 66 0f 2f 0d 78 56 34 12 comisd xmm1,QWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 2f 0d 78 56 34 12 comiss xmm1,DWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f e6 0d 78 56 34 12 cvtdq2pd xmm1,QWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: f2 0f e6 0d 78 56 34 12 cvtpd2dq xmm1,XMMWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 5a 0d 78 56 34 12 cvtps2pd xmm1,QWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f 5b 0d 78 56 34 12 cvttps2dq xmm1,XMMWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: f2 0f 7c 0d 78 56 34 12 haddps xmm1,XMMWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f 7f 0d 78 56 34 12 movdqu XMMWORD PTR \[rip\+0x12345678\],xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f 6f 0d 78 56 34 12 movdqu xmm1,XMMWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: 66 0f 17 0d 78 56 34 12 movhpd QWORD PTR \[rip\+0x12345678\],xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 66 0f 16 0d 78 56 34 12 movhpd xmm1,QWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 17 0d 78 56 34 12 movhps QWORD PTR \[rip\+0x12345678\],xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 16 0d 78 56 34 12 movhps xmm1,QWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: 66 0f 13 0d 78 56 34 12 movlpd QWORD PTR \[rip\+0x12345678\],xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 66 0f 12 0d 78 56 34 12 movlpd xmm1,QWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 13 0d 78 56 34 12 movlps QWORD PTR \[rip\+0x12345678\],xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 12 0d 78 56 34 12 movlps xmm1,QWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f 16 0d 78 56 34 12 movshdup xmm1,XMMWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f 12 0d 78 56 34 12 movsldup xmm1,XMMWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f 70 0d 78 56 34 12 90 pshufhw xmm1,XMMWORD PTR \[rip\+0x12345678\],0x90[ ]*(#.*)?
+[ ]*[a-f0-9]+: f2 0f 70 0d 78 56 34 12 90 pshuflw xmm1,XMMWORD PTR \[rip\+0x12345678\],0x90[ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 60 0d 78 56 34 12 punpcklbw mm1,DWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 62 0d 78 56 34 12 punpckldq mm1,DWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 61 0d 78 56 34 12 punpcklwd mm1,DWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: 66 0f 2e 0d 78 56 34 12 ucomisd xmm1,QWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 2e 0d 78 56 34 12 ucomiss xmm1,DWORD PTR \[rip\+0x12345678\][ ]*(#.*)?
diff --git a/gas/testsuite/gas/i386/x86-64-simd.d b/gas/testsuite/gas/i386/x86-64-simd.d
new file mode 100644
index 000000000000..f00b2c15ed80
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-simd.d
@@ -0,0 +1,36 @@
+#as: -J
+#objdump: -dw
+#name: x86-64 SIMD
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <_start>:
+[ ]*[a-f0-9]+: f2 0f d0 0d 78 56 34 12 addsubps 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 66 0f 2f 0d 78 56 34 12 comisd 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 2f 0d 78 56 34 12 comiss 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f e6 0d 78 56 34 12 cvtdq2pd 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: f2 0f e6 0d 78 56 34 12 cvtpd2dq 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 5a 0d 78 56 34 12 cvtps2pd 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f 5b 0d 78 56 34 12 cvttps2dq 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: f2 0f 7c 0d 78 56 34 12 haddps 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f 7f 0d 78 56 34 12 movdqu %xmm1,0x12345678\(%rip\)[ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f 6f 0d 78 56 34 12 movdqu 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 66 0f 17 0d 78 56 34 12 movhpd %xmm1,0x12345678\(%rip\)[ ]*(#.*)?
+[ ]*[a-f0-9]+: 66 0f 16 0d 78 56 34 12 movhpd 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 17 0d 78 56 34 12 movhps %xmm1,0x12345678\(%rip\)[ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 16 0d 78 56 34 12 movhps 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 66 0f 13 0d 78 56 34 12 movlpd %xmm1,0x12345678\(%rip\)[ ]*(#.*)?
+[ ]*[a-f0-9]+: 66 0f 12 0d 78 56 34 12 movlpd 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 13 0d 78 56 34 12 movlps %xmm1,0x12345678\(%rip\)[ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 12 0d 78 56 34 12 movlps 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f 16 0d 78 56 34 12 movshdup 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f 12 0d 78 56 34 12 movsldup 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: f3 0f 70 0d 78 56 34 12 90 pshufhw \$0x90,0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: f2 0f 70 0d 78 56 34 12 90 pshuflw \$0x90,0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 60 0d 78 56 34 12 punpcklbw 0x12345678\(%rip\),%mm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 62 0d 78 56 34 12 punpckldq 0x12345678\(%rip\),%mm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 61 0d 78 56 34 12 punpcklwd 0x12345678\(%rip\),%mm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 66 0f 2e 0d 78 56 34 12 ucomisd 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
+[ ]*[a-f0-9]+: 0f 2e 0d 78 56 34 12 ucomiss 0x12345678\(%rip\),%xmm1[ ]*(#.*)?
diff --git a/gas/testsuite/gas/i386/x86-64-simd.s b/gas/testsuite/gas/i386/x86-64-simd.s
new file mode 100644
index 000000000000..579c1ecbeda5
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-simd.s
@@ -0,0 +1,29 @@
+ .text
+_start:
+ addsubps 0x12345678(%rip),%xmm1
+ comisd 0x12345678(%rip),%xmm1
+ comiss 0x12345678(%rip),%xmm1
+ cvtdq2pd 0x12345678(%rip),%xmm1
+ cvtpd2dq 0x12345678(%rip),%xmm1
+ cvtps2pd 0x12345678(%rip),%xmm1
+ cvttps2dq 0x12345678(%rip),%xmm1
+ haddps 0x12345678(%rip),%xmm1
+ movdqu %xmm1,0x12345678(%rip)
+ movdqu 0x12345678(%rip),%xmm1
+ movhpd %xmm1,0x12345678(%rip)
+ movhpd 0x12345678(%rip),%xmm1
+ movhps %xmm1,0x12345678(%rip)
+ movhps 0x12345678(%rip),%xmm1
+ movlpd %xmm1,0x12345678(%rip)
+ movlpd 0x12345678(%rip),%xmm1
+ movlps %xmm1,0x12345678(%rip)
+ movlps 0x12345678(%rip),%xmm1
+ movshdup 0x12345678(%rip),%xmm1
+ movsldup 0x12345678(%rip),%xmm1
+ pshufhw $0x90,0x12345678(%rip),%xmm1
+ pshuflw $0x90,0x12345678(%rip),%xmm1
+ punpcklbw 0x12345678(%rip),%mm1
+ punpckldq 0x12345678(%rip),%mm1
+ punpcklwd 0x12345678(%rip),%mm1
+ ucomisd 0x12345678(%rip),%xmm1
+ ucomiss 0x12345678(%rip),%xmm1
diff --git a/gas/testsuite/gas/i386/x86-64-sse4_1.d b/gas/testsuite/gas/i386/x86-64-sse4_1.d
new file mode 100644
index 000000000000..6ed99e28378a
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-sse4_1.d
@@ -0,0 +1,110 @@
+#objdump: -dw
+#name: x86-64 SSE4.1
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+000 <foo>:
+[ ]*[0-9a-f]+: 66 0f 3a 0d 01 00 blendpd \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0d c1 00 blendpd \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0c 01 00 blendps \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0c c1 00 blendps \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 15 01 blendvpd %xmm0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 15 c1 blendvpd %xmm0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 14 01 blendvps %xmm0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 14 c1 blendvps %xmm0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 41 01 00 dppd \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 41 c1 00 dppd \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 40 01 00 dpps \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 40 c1 00 dpps \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 48 0f 3a 17 c1 00 extractps \$0x0,%xmm0,%rcx
+[ ]*[0-9a-f]+: 66 0f 3a 17 c1 00 extractps \$0x0,%xmm0,%ecx
+[ ]*[0-9a-f]+: 66 0f 3a 17 01 00 extractps \$0x0,%xmm0,\(%rcx\)
+[ ]*[0-9a-f]+: 66 0f 3a 21 c1 00 insertps \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 21 01 00 insertps \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 2a 01 movntdqa \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 42 01 00 mpsadbw \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 42 c1 00 mpsadbw \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 2b 01 packusdw \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 2b c1 packusdw %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 10 01 pblendvb %xmm0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 10 c1 pblendvb %xmm0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0e 01 00 pblendw \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0e c1 00 pblendw \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 29 c1 pcmpeqq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 29 01 pcmpeqq \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 48 0f 3a 14 c1 00 pextrb \$0x0,%xmm0,%rcx
+[ ]*[0-9a-f]+: 66 0f 3a 14 c1 00 pextrb \$0x0,%xmm0,%ecx
+[ ]*[0-9a-f]+: 66 0f 3a 14 01 00 pextrb \$0x0,%xmm0,\(%rcx\)
+[ ]*[0-9a-f]+: 66 0f 3a 16 c1 00 pextrd \$0x0,%xmm0,%ecx
+[ ]*[0-9a-f]+: 66 0f 3a 16 01 00 pextrd \$0x0,%xmm0,\(%rcx\)
+[ ]*[0-9a-f]+: 66 48 0f 3a 16 c1 00 pextrq \$0x0,%xmm0,%rcx
+[ ]*[0-9a-f]+: 66 48 0f 3a 16 01 00 pextrq \$0x0,%xmm0,\(%rcx\)
+[ ]*[0-9a-f]+: 66 48 0f c5 c8 00 pextrw \$0x0,%xmm0,%rcx
+[ ]*[0-9a-f]+: 66 0f c5 c8 00 pextrw \$0x0,%xmm0,%ecx
+[ ]*[0-9a-f]+: 66 0f 3a 15 01 00 pextrw \$0x0,%xmm0,\(%rcx\)
+[ ]*[0-9a-f]+: 66 0f 38 41 c1 phminposuw %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 41 01 phminposuw \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 20 01 00 pinsrb \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 20 c1 00 pinsrb \$0x0,%ecx,%xmm0
+[ ]*[0-9a-f]+: 66 48 0f 3a 20 c1 00 pinsrb \$0x0,%rcx,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 22 01 00 pinsrd \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 22 c1 00 pinsrd \$0x0,%ecx,%xmm0
+[ ]*[0-9a-f]+: 66 48 0f 3a 22 01 00 pinsrq \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 48 0f 3a 22 c1 00 pinsrq \$0x0,%rcx,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3c c1 pmaxsb %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3c 01 pmaxsb \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3d c1 pmaxsd %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3d 01 pmaxsd \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3f c1 pmaxud %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3f 01 pmaxud \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3e c1 pmaxuw %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3e 01 pmaxuw \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 38 c1 pminsb %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 38 01 pminsb \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 39 c1 pminsd %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 39 01 pminsd \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3b c1 pminud %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3b 01 pminud \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3a c1 pminuw %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 3a 01 pminuw \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 20 c1 pmovsxbw %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 20 01 pmovsxbw \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 21 c1 pmovsxbd %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 21 01 pmovsxbd \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 22 c1 pmovsxbq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 22 01 pmovsxbq \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 23 c1 pmovsxwd %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 23 01 pmovsxwd \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 24 c1 pmovsxwq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 24 01 pmovsxwq \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 25 c1 pmovsxdq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 25 01 pmovsxdq \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 30 c1 pmovzxbw %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 30 01 pmovzxbw \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 31 c1 pmovzxbd %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 31 01 pmovzxbd \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 32 c1 pmovzxbq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 32 01 pmovzxbq \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 33 c1 pmovzxwd %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 33 01 pmovzxwd \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 34 c1 pmovzxwq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 34 01 pmovzxwq \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 35 c1 pmovzxdq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 35 01 pmovzxdq \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 28 c1 pmuldq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 28 01 pmuldq \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 40 c1 pmulld %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 40 01 pmulld \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 17 c1 ptest %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 17 01 ptest \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 09 01 00 roundpd \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 09 c1 00 roundpd \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 08 01 00 roundps \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 08 c1 00 roundps \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0b 01 00 roundsd \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0b c1 00 roundsd \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0a 01 00 roundss \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 0a c1 00 roundss \$0x0,%xmm1,%xmm0
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-sse4_1.s b/gas/testsuite/gas/i386/x86-64-sse4_1.s
new file mode 100644
index 000000000000..70c2394833a1
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-sse4_1.s
@@ -0,0 +1,107 @@
+# Streaming SIMD extensions 4.1 Instructions
+
+ .text
+foo:
+ blendpd $0x0,(%rcx),%xmm0
+ blendpd $0x0,%xmm1,%xmm0
+ blendps $0x0,(%rcx),%xmm0
+ blendps $0x0,%xmm1,%xmm0
+ blendvpd %xmm0,(%rcx),%xmm0
+ blendvpd %xmm0,%xmm1,%xmm0
+ blendvps %xmm0,(%rcx),%xmm0
+ blendvps %xmm0,%xmm1,%xmm0
+ dppd $0x0,(%rcx),%xmm0
+ dppd $0x0,%xmm1,%xmm0
+ dpps $0x0,(%rcx),%xmm0
+ dpps $0x0,%xmm1,%xmm0
+ extractps $0x0,%xmm0,%rcx
+ extractps $0x0,%xmm0,%ecx
+ extractps $0x0,%xmm0,(%rcx)
+ insertps $0x0,%xmm1,%xmm0
+ insertps $0x0,(%rcx),%xmm0
+ movntdqa (%rcx),%xmm0
+ mpsadbw $0x0,(%rcx),%xmm0
+ mpsadbw $0x0,%xmm1,%xmm0
+ packusdw (%rcx),%xmm0
+ packusdw %xmm1,%xmm0
+ pblendvb %xmm0,(%rcx),%xmm0
+ pblendvb %xmm0,%xmm1,%xmm0
+ pblendw $0x0,(%rcx),%xmm0
+ pblendw $0x0,%xmm1,%xmm0
+ pcmpeqq %xmm1,%xmm0
+ pcmpeqq (%rcx),%xmm0
+ pextrb $0x0,%xmm0,%rcx
+ pextrb $0x0,%xmm0,%ecx
+ pextrb $0x0,%xmm0,(%rcx)
+ pextrd $0x0,%xmm0,%ecx
+ pextrd $0x0,%xmm0,(%rcx)
+ pextrq $0x0,%xmm0,%rcx
+ pextrq $0x0,%xmm0,(%rcx)
+ pextrw $0x0,%xmm0,%rcx
+ pextrw $0x0,%xmm0,%ecx
+ pextrw $0x0,%xmm0,(%rcx)
+ phminposuw %xmm1,%xmm0
+ phminposuw (%rcx),%xmm0
+ pinsrb $0x0,(%rcx),%xmm0
+ pinsrb $0x0,%ecx,%xmm0
+ pinsrb $0x0,%rcx,%xmm0
+ pinsrd $0x0,(%rcx),%xmm0
+ pinsrd $0x0,%ecx,%xmm0
+ pinsrq $0x0,(%rcx),%xmm0
+ pinsrq $0x0,%rcx,%xmm0
+ pmaxsb %xmm1,%xmm0
+ pmaxsb (%rcx),%xmm0
+ pmaxsd %xmm1,%xmm0
+ pmaxsd (%rcx),%xmm0
+ pmaxud %xmm1,%xmm0
+ pmaxud (%rcx),%xmm0
+ pmaxuw %xmm1,%xmm0
+ pmaxuw (%rcx),%xmm0
+ pminsb %xmm1,%xmm0
+ pminsb (%rcx),%xmm0
+ pminsd %xmm1,%xmm0
+ pminsd (%rcx),%xmm0
+ pminud %xmm1,%xmm0
+ pminud (%rcx),%xmm0
+ pminuw %xmm1,%xmm0
+ pminuw (%rcx),%xmm0
+ pmovsxbw %xmm1,%xmm0
+ pmovsxbw (%rcx),%xmm0
+ pmovsxbd %xmm1,%xmm0
+ pmovsxbd (%rcx),%xmm0
+ pmovsxbq %xmm1,%xmm0
+ pmovsxbq (%rcx),%xmm0
+ pmovsxwd %xmm1,%xmm0
+ pmovsxwd (%rcx),%xmm0
+ pmovsxwq %xmm1,%xmm0
+ pmovsxwq (%rcx),%xmm0
+ pmovsxdq %xmm1,%xmm0
+ pmovsxdq (%rcx),%xmm0
+ pmovzxbw %xmm1,%xmm0
+ pmovzxbw (%rcx),%xmm0
+ pmovzxbd %xmm1,%xmm0
+ pmovzxbd (%rcx),%xmm0
+ pmovzxbq %xmm1,%xmm0
+ pmovzxbq (%rcx),%xmm0
+ pmovzxwd %xmm1,%xmm0
+ pmovzxwd (%rcx),%xmm0
+ pmovzxwq %xmm1,%xmm0
+ pmovzxwq (%rcx),%xmm0
+ pmovzxdq %xmm1,%xmm0
+ pmovzxdq (%rcx),%xmm0
+ pmuldq %xmm1,%xmm0
+ pmuldq (%rcx),%xmm0
+ pmulld %xmm1,%xmm0
+ pmulld (%rcx),%xmm0
+ ptest %xmm1,%xmm0
+ ptest (%rcx),%xmm0
+ roundpd $0x0,(%rcx),%xmm0
+ roundpd $0x0,%xmm1,%xmm0
+ roundps $0x0,(%rcx),%xmm0
+ roundps $0x0,%xmm1,%xmm0
+ roundsd $0x0,(%rcx),%xmm0
+ roundsd $0x0,%xmm1,%xmm0
+ roundss $0x0,(%rcx),%xmm0
+ roundss $0x0,%xmm1,%xmm0
+
+ .p2align 4,0
diff --git a/gas/testsuite/gas/i386/x86-64-sse4_2.d b/gas/testsuite/gas/i386/x86-64-sse4_2.d
new file mode 100644
index 000000000000..379dbb54a1a9
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-sse4_2.d
@@ -0,0 +1,45 @@
+#objdump: -dw
+#name: x86-64 SSE4.2
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+000 <foo>:
+[ ]*[0-9a-f]+: f2 0f 38 f0 d9 crc32b %cl,%ebx
+[ ]*[0-9a-f]+: f2 48 0f 38 f0 d9 crc32b %cl,%rbx
+[ ]*[0-9a-f]+: 66 f2 0f 38 f1 d9 crc32w %cx,%ebx
+[ ]*[0-9a-f]+: f2 0f 38 f1 d9 crc32l %ecx,%ebx
+[ ]*[0-9a-f]+: f2 48 0f 38 f1 d9 crc32q %rcx,%rbx
+[ ]*[0-9a-f]+: f2 0f 38 f0 19 crc32b \(%rcx\),%ebx
+[ ]*[0-9a-f]+: 66 f2 0f 38 f1 19 crc32w \(%rcx\),%ebx
+[ ]*[0-9a-f]+: f2 0f 38 f1 19 crc32l \(%rcx\),%ebx
+[ ]*[0-9a-f]+: f2 48 0f 38 f1 19 crc32q \(%rcx\),%rbx
+[ ]*[0-9a-f]+: f2 0f 38 f0 d9 crc32b %cl,%ebx
+[ ]*[0-9a-f]+: f2 48 0f 38 f0 d9 crc32b %cl,%rbx
+[ ]*[0-9a-f]+: 66 f2 0f 38 f1 d9 crc32w %cx,%ebx
+[ ]*[0-9a-f]+: f2 0f 38 f1 d9 crc32l %ecx,%ebx
+[ ]*[0-9a-f]+: f2 48 0f 38 f1 d9 crc32q %rcx,%rbx
+[ ]*[0-9a-f]+: 66 0f 38 37 01 pcmpgtq \(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 38 37 c1 pcmpgtq %xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 61 01 00 pcmpestri \$0x0,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 61 c1 00 pcmpestri \$0x0,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 60 01 01 pcmpestrm \$0x1,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 60 c1 01 pcmpestrm \$0x1,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 63 01 02 pcmpistri \$0x2,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 63 c1 02 pcmpistri \$0x2,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 62 01 03 pcmpistrm \$0x3,\(%rcx\),%xmm0
+[ ]*[0-9a-f]+: 66 0f 3a 62 c1 03 pcmpistrm \$0x3,%xmm1,%xmm0
+[ ]*[0-9a-f]+: 66 f3 0f b8 19 popcnt \(%rcx\),%bx
+[ ]*[0-9a-f]+: f3 0f b8 19 popcnt \(%rcx\),%ebx
+[ ]*[0-9a-f]+: f3 48 0f b8 19 popcnt \(%rcx\),%rbx
+[ ]*[0-9a-f]+: 66 f3 0f b8 19 popcnt \(%rcx\),%bx
+[ ]*[0-9a-f]+: f3 0f b8 19 popcnt \(%rcx\),%ebx
+[ ]*[0-9a-f]+: f3 48 0f b8 19 popcnt \(%rcx\),%rbx
+[ ]*[0-9a-f]+: 66 f3 0f b8 d9 popcnt %cx,%bx
+[ ]*[0-9a-f]+: f3 0f b8 d9 popcnt %ecx,%ebx
+[ ]*[0-9a-f]+: f3 48 0f b8 d9 popcnt %rcx,%rbx
+[ ]*[0-9a-f]+: 66 f3 0f b8 d9 popcnt %cx,%bx
+[ ]*[0-9a-f]+: f3 0f b8 d9 popcnt %ecx,%ebx
+[ ]*[0-9a-f]+: f3 48 0f b8 d9 popcnt %rcx,%rbx
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-sse4_2.s b/gas/testsuite/gas/i386/x86-64-sse4_2.s
new file mode 100644
index 000000000000..9d59b10aab8e
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-sse4_2.s
@@ -0,0 +1,42 @@
+# Streaming SIMD extensions 4.2 Instructions
+
+ .text
+foo:
+ crc32 %cl,%ebx
+ crc32 %cl,%rbx
+ crc32 %cx,%ebx
+ crc32 %ecx,%ebx
+ crc32 %rcx,%rbx
+ crc32b (%rcx),%ebx
+ crc32w (%rcx),%ebx
+ crc32l (%rcx),%ebx
+ crc32q (%rcx),%rbx
+ crc32b %cl,%ebx
+ crc32b %cl,%rbx
+ crc32w %cx,%ebx
+ crc32l %ecx,%ebx
+ crc32q %rcx,%rbx
+ pcmpgtq (%rcx),%xmm0
+ pcmpgtq %xmm1,%xmm0
+ pcmpestri $0x0,(%rcx),%xmm0
+ pcmpestri $0x0,%xmm1,%xmm0
+ pcmpestrm $0x1,(%rcx),%xmm0
+ pcmpestrm $0x1,%xmm1,%xmm0
+ pcmpistri $0x2,(%rcx),%xmm0
+ pcmpistri $0x2,%xmm1,%xmm0
+ pcmpistrm $0x3,(%rcx),%xmm0
+ pcmpistrm $0x3,%xmm1,%xmm0
+ popcnt (%rcx),%bx
+ popcnt (%rcx),%ebx
+ popcnt (%rcx),%rbx
+ popcntw (%rcx),%bx
+ popcntl (%rcx),%ebx
+ popcntq (%rcx),%rbx
+ popcnt %cx,%bx
+ popcnt %ecx,%ebx
+ popcnt %rcx,%rbx
+ popcntw %cx,%bx
+ popcntl %ecx,%ebx
+ popcntq %rcx,%rbx
+
+ .p2align 4,0
diff --git a/gas/testsuite/gas/i386/x86-64-stack-intel.d b/gas/testsuite/gas/i386/x86-64-stack-intel.d
index 0dfab4d3fbe8..aaeff2ffcb39 100644
--- a/gas/testsuite/gas/i386/x86-64-stack-intel.d
+++ b/gas/testsuite/gas/i386/x86-64-stack-intel.d
@@ -2,7 +2,7 @@
#name: x86-64 stack-related opcodes (Intel mode)
#source: x86-64-stack.s
-.*: +file format elf64-x86-64
+.*: +file format .*
Disassembly of section .text:
diff --git a/gas/testsuite/gas/i386/x86-64-stack-suffix.d b/gas/testsuite/gas/i386/x86-64-stack-suffix.d
index c5d789d8a71d..75fd900feae1 100644
--- a/gas/testsuite/gas/i386/x86-64-stack-suffix.d
+++ b/gas/testsuite/gas/i386/x86-64-stack-suffix.d
@@ -2,7 +2,7 @@
#name: x86-64 stack-related opcodes (with suffixes)
#source: x86-64-stack.s
-.*: +file format elf64-x86-64
+.*: +file format .*
Disassembly of section .text:
diff --git a/gas/testsuite/gas/i386/x86-64-stack.d b/gas/testsuite/gas/i386/x86-64-stack.d
index fa010a981a12..f686a04fee88 100644
--- a/gas/testsuite/gas/i386/x86-64-stack.d
+++ b/gas/testsuite/gas/i386/x86-64-stack.d
@@ -1,7 +1,7 @@
#objdump: -dw
#name: x86-64 stack-related opcodes
-.*: +file format elf64-x86-64
+.*: +file format .*
Disassembly of section .text:
diff --git a/gas/testsuite/gas/i386/x86_64.d b/gas/testsuite/gas/i386/x86_64.d
index 60452a512735..a5bf0fdacc51 100644
--- a/gas/testsuite/gas/i386/x86_64.d
+++ b/gas/testsuite/gas/i386/x86_64.d
@@ -6,7 +6,7 @@
Disassembly of section .text:
-0+ <bar-0x1a7>:
+0+ <.*>:
[ ]+0: 01 ca[ ]+add[ ]+%ecx,%edx
[ ]+2: 44 01 ca[ ]+add[ ]+%r9d,%edx
[ ]+5: 41 01 ca[ ]+add[ ]+%ecx,%r10d
@@ -38,7 +38,7 @@ Disassembly of section .text:
[ ]+5a: 44 0f 20 c0[ ]+mov[ ]+%cr8,%rax
[ ]+5e: 44 0f 22 c0[ ]+mov[ ]+%rax,%cr8
[ ]+62: f3 48 a5[ ]+rep movsq %ds:\(%rsi\),%es:\(%rdi\)
-[ ]+65: f3 66 a5[ ]+rep movsw %ds:\(%rsi\),%es:\(%rdi\)
+[ ]+65: 66 f3 a5[ ]+rep movsw %ds:\(%rsi\),%es:\(%rdi\)
[ ]+68: f3 48 a5[ ]+rep movsq %ds:\(%rsi\),%es:\(%rdi\)
[ ]+6b: b0 11[ ]+mov[ ]+\$0x11,%al
[ ]+6d: b4 11[ ]+mov[ ]+\$0x11,%ah
@@ -52,7 +52,7 @@ Disassembly of section .text:
[ ]+96: 41 03 00[ ]+add[ ]+\(%r8\),%eax
[ ]+99: 45 03 00[ ]+add[ ]+\(%r8\),%r8d
[ ]+9c: 49 03 00[ ]+add[ ]+\(%r8\),%rax
-[ ]+9f: 03 05 22 22 22 22[ ]+add[ ]+572662306\(%rip\),%eax.*
+[ ]+9f: 03 05 22 22 22 22[ ]+add[ ]+0x22222222\(%rip\),%eax.*
[ ]+a5: 03 45 00[ ]+add[ ]+0x0\(%rbp\),%eax
[ ]+a8: 03 04 25 22 22 22 22 add[ ]+0x22222222,%eax
[ ]+af: 41 03 45 00[ ]+add[ ]+0x0\(%r13\),%eax
@@ -84,10 +84,10 @@ Disassembly of section .text:
10b: 83 04 81 11[ ]+addl[ ]+\$0x11,\(%rcx,%rax,4\)
10f: 41 83 04 81 11[ ]+addl[ ]+\$0x11,\(%r9,%rax,4\)
114: 42 83 04 81 11[ ]+addl[ ]+\$0x11,\(%rcx,%r8,4\)
- 119: 83 05 22 22 22 22 33 addl[ ]+\$0x33,572662306\(%rip\).*
- 120: 48 83 05 22 22 22 22 33 addq[ ]+\$0x33,572662306\(%rip\).*
- 128: 81 05 22 22 22 22 33 33 33 33 addl[ ]+\$0x33333333,572662306\(%rip\).*
- 132: 48 81 05 22 22 22 22 33 33 33 33 addq[ ]+\$0x33333333,572662306\(%rip\).*
+ 119: 83 05 22 22 22 22 33 addl[ ]+\$0x33,0x22222222\(%rip\).*
+ 120: 48 83 05 22 22 22 22 33 addq[ ]+\$0x33,0x22222222\(%rip\).*
+ 128: 81 05 22 22 22 22 33 33 33 33 addl[ ]+\$0x33333333,0x22222222\(%rip\).*
+ 132: 48 81 05 22 22 22 22 33 33 33 33 addq[ ]+\$0x33333333,0x22222222\(%rip\).*
13d: 83 04 c5 22 22 22 22 33 addl[ ]+\$0x33,0x22222222\(,%rax,8\)
145: 83 80 22 22 22 22 33 addl[ ]+\$0x33,0x22222222\(%rax\)
14c: 83 80 22 22 22 22 33 addl[ ]+\$0x33,0x22222222\(%rax\)
@@ -113,7 +113,7 @@ Disassembly of section .text:
1b9: a1 00 00 00 00 00 00 00 00 mov[ ]+0x0,%eax
1c2: 8b 04 25 00 00 00 00 mov[ ]+0x0,%eax
1c9: 8b 80 00 00 00 00[ ]+mov[ ]+0x0\(%rax\),%eax
- 1cf: 8b 05 00 00 00 00[ ]+mov[ ]+0\(%rip\),%eax.*
+ 1cf: 8b 05 00 00 00 00[ ]+mov[ ]+0x0\(%rip\),%eax.*
1d5: b0 00[ ]+mov[ ]+\$0x0,%al
1d7: 66 b8 00 00[ ]+mov[ ]+\$0x0,%ax
1db: b8 00 00 00 00[ ]+mov[ ]+\$0x0,%eax
@@ -121,7 +121,7 @@ Disassembly of section .text:
1e7: a1 00 00 00 00 00 00 00 00 mov[ ]+0x0,%eax
1f0: 8b 04 25 00 00 00 00 mov[ ]+0x0,%eax
1f7: 8b 80 00 00 00 00[ ]+mov[ ]+0x0\(%rax\),%eax
- 1fd: 8b 05 00 00 00 00[ ]+mov[ ]+0\(%rip\),%eax.*
+ 1fd: 8b 05 00 00 00 00[ ]+mov[ ]+0x0\(%rip\),%eax.*
0+203 <foo>:
203: a0 11 22 33 44 55 66 77 88 mov[ ]+0x8877665544332211,%al
@@ -156,4 +156,6 @@ Disassembly of section .text:
2fc: 66 89 04 25 11 22 33 ff mov[ ]+%ax,0xffffffffff332211
304: 89 04 25 11 22 33 ff mov[ ]+%eax,0xffffffffff332211
30b: 48 89 04 25 11 22 33 ff mov[ ]+%rax,0xffffffffff332211
+ 313: 48 0f c7 08[ ]+cmpxchg16b \(%rax\)
+ 317: 48 0f c7 08[ ]+cmpxchg16b \(%rax\)
#pass
diff --git a/gas/testsuite/gas/i386/x86_64.s b/gas/testsuite/gas/i386/x86_64.s
index 3e5532ab297b..aad9b2737754 100644
--- a/gas/testsuite/gas/i386/x86_64.s
+++ b/gas/testsuite/gas/i386/x86_64.s
@@ -188,5 +188,10 @@ movw %ax,0xffffffffff332211
movl %eax,0xffffffffff332211
movq %rax,0xffffffffff332211
+cmpxchg16b (%rax)
+
+.intel_syntax noprefix
+cmpxchg16b oword ptr [rax]
+
# Get a good alignment.
.p2align 4,0
diff --git a/gas/testsuite/gas/i860/i860.exp b/gas/testsuite/gas/i860/i860.exp
index 041d859cc92a..39e40af26fd8 100644
--- a/gas/testsuite/gas/i860/i860.exp
+++ b/gas/testsuite/gas/i860/i860.exp
@@ -1,18 +1,5 @@
# i860 assembler testsuite.
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "i860 $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
if [istarget i860-*-*] {
run_dump_test "bitwise"
run_dump_test "branch"
diff --git a/gas/testsuite/gas/ia64/ia64.exp b/gas/testsuite/gas/ia64/ia64.exp
index f68c107f528b..3dfd10b8c343 100644
--- a/gas/testsuite/gas/ia64/ia64.exp
+++ b/gas/testsuite/gas/ia64/ia64.exp
@@ -1,19 +1,6 @@
#
# ia64 tests
#
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "ia64 $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
if [istarget "ia64-*"] then {
run_dump_test "regs"
diff --git a/gas/testsuite/gas/lns/lns-common-1-alt.d b/gas/testsuite/gas/lns/lns-common-1-alt.d
new file mode 100644
index 000000000000..f76e8528ce35
--- /dev/null
+++ b/gas/testsuite/gas/lns/lns-common-1-alt.d
@@ -0,0 +1,39 @@
+#source: lns-common-1.s
+#readelf: -wl
+#name: lns-common-1
+Dump of debug contents of section \.debug_line:
+#...
+ Initial value of 'is_stmt': 1
+#...
+ Line Number Statements:
+ Extended opcode 2: set Address to .*
+ Copy
+ Set column to 3
+ Advance Line by 1 to 2
+ Advance PC by fixed size amount .* to .*
+ Copy
+ Set prologue_end to true
+ Advance Line by 1 to 3
+ Advance PC by fixed size amount .* to .*
+ Copy
+ Set column to 0
+ Set epilogue_begin to true
+ Advance Line by 1 to 4
+ Advance PC by fixed size amount .* to .*
+ Copy
+ Set ISA to 1
+ Set basic block
+ Advance Line by 1 to 5
+ Advance PC by fixed size amount .* to .*
+ Copy
+ Set is_stmt to 0
+ Advance Line by 1 to 6
+ Advance PC by fixed size amount .* to .*
+ Copy
+ Set is_stmt to 1
+ Advance Line by 1 to 7
+ Advance PC by fixed size amount .* to .*
+ Copy
+ Advance PC by fixed size amount .* to .*
+ Extended opcode 1: End of Sequence
+#...
diff --git a/gas/testsuite/gas/lns/lns.exp b/gas/testsuite/gas/lns/lns.exp
index 1bc95990e3ea..2373290e8425 100644
--- a/gas/testsuite/gas/lns/lns.exp
+++ b/gas/testsuite/gas/lns/lns.exp
@@ -1,17 +1,3 @@
-# ??? This probably shouldn't be replicated here...
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "lns $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
if ![is_elf_format] then {
return
}
@@ -21,7 +7,21 @@ run_list_test "lns-diag-1" ""
# ??? Won't work on targets that don't have a bare "nop" insn.
# Perhaps we could arrange for an include file or something that
# defined a macro...
-if { ![istarget ia64*-*-*] && ![istarget i370-*-*] && ![istarget i960-*-*]
- && ![istarget or32-*-*] && ![istarget s390*-*-*] } {
- run_dump_test "lns-common-1"
+# Nor does it work on targets that do not generate line number
+# information (d10v).
+if {
+ ![istarget d10v-*-*]
+ && ![istarget ia64*-*-*]
+ && ![istarget i370-*-*]
+ && ![istarget i960-*-*]
+ && ![istarget mcore-*-*]
+ && ![istarget or32-*-*]
+ && ![istarget s390*-*-*]
+} {
+ # Use alternate file for targets using DW_LNS_fixed_advance_pc opcodes.
+ if { [istarget xtensa-*-*] } {
+ run_dump_test "lns-common-1-alt"
+ } else {
+ run_dump_test "lns-common-1"
+ }
}
diff --git a/gas/testsuite/gas/m68k/all.exp b/gas/testsuite/gas/m68k/all.exp
index 9516b1ab1dfc..ae9f993b7e41 100644
--- a/gas/testsuite/gas/m68k/all.exp
+++ b/gas/testsuite/gas/m68k/all.exp
@@ -13,7 +13,7 @@ if [istarget "m6811-*-*"] then {
if [istarget "m6812-*-*"] then {
return
}
-if [istarget m68*-*-*] then {
+if { [istarget m68*-*-*] || [istarget fido*-*-*] } then {
gas_test "t2.s" "" "" "cross-section branch"
if [istarget m68*-motorola-sysv] then {
run_dump_test t2
@@ -29,17 +29,48 @@ if [istarget m68*-*-*] then {
setup_xfail "*-*"
clear_xfail "*-*-*elf*" "*-*-sysv4*" "*-*-rtems" "*-*-*gnu*" "*-*-psos*"
run_dump_test pcrel
- run_dump_test operands
- run_dump_test cas
- run_dump_test bitfield
+
+ # Since fido is basically CPU32, it does not support those
+ # instructions beyond CPU32. Disable those tests that test them.
+ if ![istarget fido-*-*] then {
+ run_dump_test operands
+ run_dump_test cas
+ run_dump_test bitfield
+ } else {
+ # Test fido-specific instructions.
+ run_dump_test fido
+ }
+
run_dump_test link
- run_dump_test fmoveml
+
+ # fido does not have a floating point unit.
+ if ![istarget fido-*-*] then {
+ run_dump_test fmoveml
+ }
+
run_dump_test mcf-mov3q
run_dump_test mode5
run_dump_test mcf-mac
run_dump_test mcf-emac
+ run_dump_test mcf-coproc
run_dump_test mcf-fpu
- run_dump_test arch-cpu-1
+ run_dump_test mcf-trap
+ run_dump_test mcf-wdebug
+ if { [istarget *-*-elf] || [istarget *-*-linux*] } then {
+ run_dump_test arch-cpu-1
+ }
+ run_dump_test cpu32
+
+ run_dump_test br-isaa
+ run_dump_test br-isab
+ run_dump_test br-isac
+
+ run_dump_test ctrl-1
+ run_dump_test ctrl-2
+
+ if { [istarget *-*-netbsd] } then {
+ run_dump_test p3041
+ }
set testname "68000 operands"
gas_run "operands.s" "-m68000" "2>err.out"
diff --git a/gas/testsuite/gas/m68k/br-isaa.d b/gas/testsuite/gas/m68k/br-isaa.d
new file mode 100644
index 000000000000..0b49dc2ea237
--- /dev/null
+++ b/gas/testsuite/gas/m68k/br-isaa.d
@@ -0,0 +1,15 @@
+#name: br-isaa.d
+#objdump: -d
+#as: -march=isaa -pcrel
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <foo>:
+ 0: 4e71 nop
+ 2: 60fc bras 0 <foo>
+ 4: 6000 0000 braw 6 <foo\+0x6>
+ 8: 61f6 bsrs 0 <foo>
+ a: 6100 0000 bsrw c <foo\+0xc>
+ e: 4e71 nop
diff --git a/gas/testsuite/gas/m68k/br-isaa.s b/gas/testsuite/gas/m68k/br-isaa.s
new file mode 100644
index 000000000000..d405338c9a24
--- /dev/null
+++ b/gas/testsuite/gas/m68k/br-isaa.s
@@ -0,0 +1,6 @@
+foo: nop
+ jbra foo
+ jbra bar
+ jbsr foo
+ jbsr bar
+ nop
diff --git a/gas/testsuite/gas/m68k/br-isab.d b/gas/testsuite/gas/m68k/br-isab.d
new file mode 100644
index 000000000000..20e093f734d3
--- /dev/null
+++ b/gas/testsuite/gas/m68k/br-isab.d
@@ -0,0 +1,16 @@
+#name: br-isab.d
+#objdump: -d
+#as: -march=isab -pcrel
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <foo>:
+ 0: 4e71 nop
+ 2: 61ff ffff fffc bsrl 0 <foo>
+ 8: 60f6 bras 0 <foo>
+ a: 60ff 0000 0000 bral c <foo\+0xc>
+ 10: 61ee bsrs 0 <foo>
+ 12: 61ff 0000 0000 bsrl 14 <foo\+0x14>
+ 18: 4e71 nop
diff --git a/gas/testsuite/gas/m68k/br-isab.s b/gas/testsuite/gas/m68k/br-isab.s
new file mode 100644
index 000000000000..5db3c076ee5f
--- /dev/null
+++ b/gas/testsuite/gas/m68k/br-isab.s
@@ -0,0 +1,7 @@
+foo: nop
+ bsr.l foo
+ jbra foo
+ jbra bar
+ jbsr foo
+ jbsr bar
+ nop
diff --git a/gas/testsuite/gas/m68k/br-isac.d b/gas/testsuite/gas/m68k/br-isac.d
new file mode 100644
index 000000000000..126ff464bb8b
--- /dev/null
+++ b/gas/testsuite/gas/m68k/br-isac.d
@@ -0,0 +1,16 @@
+#name: br-isac.d
+#objdump: -d
+#as: -march=isac -pcrel
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <foo>:
+ 0: 4e71 nop
+ 2: 61ff ffff fffc bsrl 0 <foo>
+ 8: 60f6 bras 0 <foo>
+ a: 6000 0000 braw c <foo\+0xc>
+ e: 61f0 bsrs 0 <foo>
+ 10: 61ff 0000 0000 bsrl 12 <foo\+0x12>
+ 16: 4e71 nop
diff --git a/gas/testsuite/gas/m68k/br-isac.s b/gas/testsuite/gas/m68k/br-isac.s
new file mode 100644
index 000000000000..5db3c076ee5f
--- /dev/null
+++ b/gas/testsuite/gas/m68k/br-isac.s
@@ -0,0 +1,7 @@
+foo: nop
+ bsr.l foo
+ jbra foo
+ jbra bar
+ jbsr foo
+ jbsr bar
+ nop
diff --git a/gas/testsuite/gas/m68k/cpu32.d b/gas/testsuite/gas/m68k/cpu32.d
new file mode 100644
index 000000000000..e7054a394733
--- /dev/null
+++ b/gas/testsuite/gas/m68k/cpu32.d
@@ -0,0 +1,35 @@
+#name: cpu32
+#objdump: -d
+#as: -mcpu32
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <.text>:
+[ 0-9a-f]+: 4afa bgnd
+[ 0-9a-f]+: f800 2001 tblub %d0,%d1,%d2
+[ 0-9a-f]+: f800 2041 tbluw %d0,%d1,%d2
+[ 0-9a-f]+: f800 2081 tblul %d0,%d1,%d2
+[ 0-9a-f]+: f800 2401 tblunb %d0,%d1,%d2
+[ 0-9a-f]+: f800 2441 tblunw %d0,%d1,%d2
+[ 0-9a-f]+: f800 2481 tblunl %d0,%d1,%d2
+[ 0-9a-f]+: f800 2801 tblsb %d0,%d1,%d2
+[ 0-9a-f]+: f800 2841 tblsw %d0,%d1,%d2
+[ 0-9a-f]+: f800 2881 tblsl %d0,%d1,%d2
+[ 0-9a-f]+: f800 2c01 tblsnb %d0,%d1,%d2
+[ 0-9a-f]+: f800 2c41 tblsnw %d0,%d1,%d2
+[ 0-9a-f]+: f800 2c81 tblsnl %d0,%d1,%d2
+[ 0-9a-f]+: f810 1100 tblub %a0@,%d1
+[ 0-9a-f]+: f810 1140 tbluw %a0@,%d1
+[ 0-9a-f]+: f810 1180 tblul %a0@,%d1
+[ 0-9a-f]+: f810 1500 tblunb %a0@,%d1
+[ 0-9a-f]+: f810 1540 tblunw %a0@,%d1
+[ 0-9a-f]+: f810 1580 tblunl %a0@,%d1
+[ 0-9a-f]+: f810 1900 tblsb %a0@,%d1
+[ 0-9a-f]+: f810 1940 tblsw %a0@,%d1
+[ 0-9a-f]+: f810 1980 tblsl %a0@,%d1
+[ 0-9a-f]+: f810 1d00 tblsnb %a0@,%d1
+[ 0-9a-f]+: f810 1d40 tblsnw %a0@,%d1
+[ 0-9a-f]+: f810 1d80 tblsnl %a0@,%d1
+#...
diff --git a/gas/testsuite/gas/m68k/cpu32.s b/gas/testsuite/gas/m68k/cpu32.s
new file mode 100644
index 000000000000..589e7e305672
--- /dev/null
+++ b/gas/testsuite/gas/m68k/cpu32.s
@@ -0,0 +1,26 @@
+ # cpu32 specific insns
+ bgnd
+ tblub %d0,%d1,%d2
+ tbluw %d0,%d1,%d2
+ tblul %d0,%d1,%d2
+ tblunb %d0,%d1,%d2
+ tblunw %d0,%d1,%d2
+ tblunl %d0,%d1,%d2
+ tblsb %d0,%d1,%d2
+ tblsw %d0,%d1,%d2
+ tblsl %d0,%d1,%d2
+ tblsnb %d0,%d1,%d2
+ tblsnw %d0,%d1,%d2
+ tblsnl %d0,%d1,%d2
+ tblub (%a0),%d1
+ tbluw (%a0),%d1
+ tblul (%a0),%d1
+ tblunb (%a0),%d1
+ tblunw (%a0),%d1
+ tblunl (%a0),%d1
+ tblsb (%a0),%d1
+ tblsw (%a0),%d1
+ tblsl (%a0),%d1
+ tblsnb (%a0),%d1
+ tblsnw (%a0),%d1
+ tblsnl (%a0),%d1
diff --git a/gas/testsuite/gas/m68k/ctrl-1.d b/gas/testsuite/gas/m68k/ctrl-1.d
new file mode 100644
index 000000000000..d4347281b4bf
--- /dev/null
+++ b/gas/testsuite/gas/m68k/ctrl-1.d
@@ -0,0 +1,12 @@
+#name: ctrl-1.d
+#objdump: -d
+#as: -mcpu=5307
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <.text>:
+ 0: 4e7b 0c04 movec %d0,%rambar0
+ 4: 4e7b 0c04 movec %d0,%rambar0
+
diff --git a/gas/testsuite/gas/m68k/ctrl-1.s b/gas/testsuite/gas/m68k/ctrl-1.s
new file mode 100644
index 000000000000..cac82d93cb42
--- /dev/null
+++ b/gas/testsuite/gas/m68k/ctrl-1.s
@@ -0,0 +1,2 @@
+ movec %d0,%rambar
+ movec %d0,%rambar0
diff --git a/gas/testsuite/gas/m68k/ctrl-2.d b/gas/testsuite/gas/m68k/ctrl-2.d
new file mode 100644
index 000000000000..00b8aa3b7f8e
--- /dev/null
+++ b/gas/testsuite/gas/m68k/ctrl-2.d
@@ -0,0 +1,11 @@
+#name: ctrl-2.d
+#objdump: -d
+#as: -mcpu=5208
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <.text>:
+ 0: 4e7b 0c05 movec %d0,%rambar1
+ 4: 4e7b 0c05 movec %d0,%rambar1
diff --git a/gas/testsuite/gas/m68k/ctrl-2.s b/gas/testsuite/gas/m68k/ctrl-2.s
new file mode 100644
index 000000000000..3a36db0bb89c
--- /dev/null
+++ b/gas/testsuite/gas/m68k/ctrl-2.s
@@ -0,0 +1,2 @@
+ movec %d0,%rambar
+ movec %d0,%rambar1
diff --git a/gas/testsuite/gas/m68k/fido.d b/gas/testsuite/gas/m68k/fido.d
new file mode 100644
index 000000000000..fff5abbef38a
--- /dev/null
+++ b/gas/testsuite/gas/m68k/fido.d
@@ -0,0 +1,41 @@
+#objdump: -d --prefix-addresses
+#name: fido
+
+# Test parsing of the operands of the fido-specific instructions.
+
+.*: +file format .*
+
+Disassembly of section .text:
+0+000 <foo> sleep
+0+002 <foo\+(0x|)2> trapx #0
+0+004 <foo\+(0x|)4> trapx #1
+0+006 <foo\+(0x|)6> trapx #2
+0+008 <foo\+(0x|)8> trapx #3
+0+00a <foo\+(0x|)a> trapx #4
+0+00c <foo\+(0x|)c> trapx #5
+0+00e <foo\+(0x|)e> trapx #6
+0+010 <foo\+(0x|)10> trapx #7
+0+012 <foo\+(0x|)12> trapx #8
+0+014 <foo\+(0x|)14> trapx #9
+0+016 <foo\+(0x|)16> trapx #10
+0+018 <foo\+(0x|)18> trapx #11
+0+01a <foo\+(0x|)1a> trapx #12
+0+01c <foo\+(0x|)1c> trapx #13
+0+01e <foo\+(0x|)1e> trapx #14
+0+020 <foo\+(0x|)20> trapx #15
+0+022 <foo\+(0x|)22> movec %cac,%d0
+0+026 <foo\+(0x|)26> movec %cac,%a0
+0+02a <foo\+(0x|)2a> movec %mbb,%d1
+0+02e <foo\+(0x|)2e> movec %mbb,%a1
+0+032 <foo\+(0x|)32> movec %d2,%cac
+0+036 <foo\+(0x|)36> movec %a2,%cac
+0+03a <foo\+(0x|)3a> movec %d3,%mbb
+0+03e <foo\+(0x|)3e> movec %a3,%mbb
+0+042 <foo\+(0x|)42> movec %cac,%d4
+0+046 <foo\+(0x|)46> movec %cac,%a4
+0+04a <foo\+(0x|)4a> movec %mbb,%d5
+0+04e <foo\+(0x|)4e> movec %mbb,%a5
+0+052 <foo\+(0x|)52> movec %d6,%cac
+0+056 <foo\+(0x|)56> movec %fp,%cac
+0+05a <foo\+(0x|)5a> movec %d7,%mbb
+0+05e <foo\+(0x|)5e> movec %sp,%mbb
diff --git a/gas/testsuite/gas/m68k/fido.s b/gas/testsuite/gas/m68k/fido.s
new file mode 100644
index 000000000000..8aaac7c54736
--- /dev/null
+++ b/gas/testsuite/gas/m68k/fido.s
@@ -0,0 +1,37 @@
+# Test parsing of the operands of the fido-specific instructions.
+ .text
+ .globl foo
+foo:
+ sleep
+ trapx #0
+ trapx #1
+ trapx #2
+ trapx #3
+ trapx #4
+ trapx #5
+ trapx #6
+ trapx #7
+ trapx #8
+ trapx #9
+ trapx #10
+ trapx #11
+ trapx #12
+ trapx #13
+ trapx #14
+ trapx #15
+ movec #0xffe,%d0
+ movec #0xffe,%a0
+ movec #0xfff,%d1
+ movec #0xfff,%a1
+ movec %d2,#0xffe
+ movec %a2,#0xffe
+ movec %d3,#0xfff
+ movec %a3,#0xfff
+ movec %cac,%d4
+ movec %cac,%a4
+ movec %mbb,%d5
+ movec %mbb,%a5
+ movec %d6,%cac
+ movec %a6,%cac
+ movec %d7,%mbb
+ movec %a7,%mbb
diff --git a/gas/testsuite/gas/m68k/mcf-coproc.d b/gas/testsuite/gas/m68k/mcf-coproc.d
new file mode 100644
index 000000000000..86401cbbcbda
--- /dev/null
+++ b/gas/testsuite/gas/m68k/mcf-coproc.d
@@ -0,0 +1,50 @@
+#objdump: -d
+#as: -mcpu=5475
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <start>:
+[ 0-9a-f]+: fcc0 0050 cp0bcbusy [0-9a-f]+ <zero>
+[ 0-9a-f]+: fc80 2123 cp0ldl %d0,%d2,#1,#291
+[ 0-9a-f]+: fc88 a201 cp0ldl %a0,%a2,#2,#1
+[ 0-9a-f]+: fc50 a401 cp0ldw %a0@,%a2,#3,#1
+[ 0-9a-f]+: fc18 aa01 cp0ldb %a0@\+,%a2,#6,#1
+[ 0-9a-f]+: fca0 ac01 cp0ldl %a0@-,%a2,#7,#1
+[ 0-9a-f]+: fca8 ae01 0010 cp0ldl %a0@\(16\),%a2,#8,#1
+[ 0-9a-f]+: fd80 2123 cp0stl %d2,%d0,#1,#291
+[ 0-9a-f]+: fd88 a201 cp0stl %a2,%a0,#2,#1
+[ 0-9a-f]+: fd50 a401 cp0stw %a2,%a0@,#3,#1
+[ 0-9a-f]+: fd18 aa01 cp0stb %a2,%a0@\+,#6,#1
+[ 0-9a-f]+: fda0 ac01 cp0stl %a2,%a0@-,#7,#1
+[ 0-9a-f]+: fda8 ae01 0010 cp0stl %a2,%a0@\(16\),#8,#1
+[ 0-9a-f]+: fc00 0e00 cp0nop #8
+[ 0-9a-f]+: fc80 0400 cp0nop #3
+[ 0-9a-f]+: fc80 1400 cp0ldl %d0,%d1,#3,#0
+[ 0-9a-f]+: fc88 0400 cp0ldl %a0,%d0,#3,#0
+[ 0-9a-f]+: fc90 0400 cp0ldl %a0@,%d0,#3,#0
+[ 0-9a-f]+: fca8 0400 0010 cp0ldl %a0@\(16\),%d0,#3,#0
+[ 0-9a-f]+ <zero>:
+[ 0-9a-f]+: 4e71 nop
+[ 0-9a-f]+: fec0 0050 cp1bcbusy [0-9a-f]+ <one>
+[ 0-9a-f]+: fe80 2123 cp1ldl %d0,%d2,#1,#291
+[ 0-9a-f]+: fe88 a201 cp1ldl %a0,%a2,#2,#1
+[ 0-9a-f]+: fe50 a401 cp1ldw %a0@,%a2,#3,#1
+[ 0-9a-f]+: fe18 aa01 cp1ldb %a0@\+,%a2,#6,#1
+[ 0-9a-f]+: fea0 ac01 cp1ldl %a0@-,%a2,#7,#1
+[ 0-9a-f]+: fea8 ae01 0010 cp1ldl %a0@\(16\),%a2,#8,#1
+[ 0-9a-f]+: ff80 2123 cp1stl %d2,%d0,#1,#291
+[ 0-9a-f]+: ff88 a201 cp1stl %a2,%a0,#2,#1
+[ 0-9a-f]+: ff50 a401 cp1stw %a2,%a0@,#3,#1
+[ 0-9a-f]+: ff18 aa01 cp1stb %a2,%a0@\+,#6,#1
+[ 0-9a-f]+: ffa0 ac01 cp1stl %a2,%a0@-,#7,#1
+[ 0-9a-f]+: ffa8 ae01 0010 cp1stl %a2,%a0@\(16\),#8,#1
+[ 0-9a-f]+: fe00 0e00 cp1nop #8
+[ 0-9a-f]+: fe80 0400 cp1nop #3
+[ 0-9a-f]+: fe80 1400 cp1ldl %d0,%d1,#3,#0
+[ 0-9a-f]+: fe88 0400 cp1ldl %a0,%d0,#3,#0
+[ 0-9a-f]+: fe90 0400 cp1ldl %a0@,%d0,#3,#0
+[ 0-9a-f]+: fea8 0400 0010 cp1ldl %a0@\(16\),%d0,#3,#0
+[ 0-9a-f]+ <one>:
+[ 0-9a-f]+: 4e71 nop
diff --git a/gas/testsuite/gas/m68k/mcf-coproc.s b/gas/testsuite/gas/m68k/mcf-coproc.s
new file mode 100644
index 000000000000..6173d6ac847f
--- /dev/null
+++ b/gas/testsuite/gas/m68k/mcf-coproc.s
@@ -0,0 +1,47 @@
+
+start:
+ cp0bcbusy zero
+ cp0ld %d0,%d2,#1,#0x123
+ cp0ldl %a0,%a2,#2,#0x1
+ cp0ldw (%a0),%a2,#3,#0x1
+ cp0ldb (%a0)+,%a2,#6,#0x1
+ cp0ldl -(%a0),%a2,#7,#0x1
+ cp0ldl 16(%a0),%a2,#8,#0x1
+
+ cp0st %d2,%d0,#1,#0x123
+ cp0stl %a2,%a0,#2,#0x1
+ cp0stw %a2,(%a0),#3,#0x1
+ cp0stb %a2,(%a0)+,#6,#0x1
+ cp0stl %a2,-(%a0),#7,#0x1
+ cp0stl %a2,16(%a0),#8,#0x1
+
+ cp0nop #8
+ cp0ld %d0,%d0,#3,#0
+ cp0ld %d0,%d1,#3,#0
+ cp0ld %a0,%d0,#3,#0
+ cp0ld (%a0),%d0,#3,#0
+ cp0ld 16(%a0),%d0,#3,#0
+zero: nop
+
+ cp1bcbusy one
+ cp1ld %d0,%d2,#1,#0x123
+ cp1ldl %a0,%a2,#2,#0x1
+ cp1ldw (%a0),%a2,#3,#0x1
+ cp1ldb (%a0)+,%a2,#6,#0x1
+ cp1ldl -(%a0),%a2,#7,#0x1
+ cp1ldl 16(%a0),%a2,#8,#0x1
+
+ cp1st %d2,%d0,#1,#0x123
+ cp1stl %a2,%a0,#2,#0x1
+ cp1stw %a2,(%a0),#3,#0x1
+ cp1stb %a2,(%a0)+,#6,#0x1
+ cp1stl %a2,-(%a0),#7,#0x1
+ cp1stl %a2,16(%a0),#8,#0x1
+
+ cp1nop #8
+ cp1ld %d0,%d0,#3,#0
+ cp1ld %d0,%d1,#3,#0
+ cp1ld %a0,%d0,#3,#0
+ cp1ld (%a0),%d0,#3,#0
+ cp1ld 16(%a0),%d0,#3,#0
+one: nop
diff --git a/gas/testsuite/gas/m68k/mcf-fpu.d b/gas/testsuite/gas/m68k/mcf-fpu.d
index 5167b08dff0d..f285fd235166 100644
--- a/gas/testsuite/gas/m68k/mcf-fpu.d
+++ b/gas/testsuite/gas/m68k/mcf-fpu.d
@@ -7,167 +7,815 @@ Disassembly of section .text:
0+ <.text>:
[ 0-9a-f]+: f200 0004 fsqrtd %fp0,%fp0
+[ 0-9a-f]+: f205 4004 fsqrtl %d5,%fp0
+[ 0-9a-f]+: f214 4004 fsqrtl %a4@,%fp0
+[ 0-9a-f]+: f21b 4004 fsqrtl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4004 fsqrtl %a2@-,%fp0
[ 0-9a-f]+: f22e 4004 0008 fsqrtl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4004 1234 fsqrtl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4404 fsqrts %d5,%fp0
+[ 0-9a-f]+: f214 4404 fsqrts %a4@,%fp0
+[ 0-9a-f]+: f21b 4404 fsqrts %a3@\+,%fp0
+[ 0-9a-f]+: f222 4404 fsqrts %a2@-,%fp0
[ 0-9a-f]+: f22e 4404 0008 fsqrts %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4404 1234 fsqrts %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5004 fsqrtw %d5,%fp0
+[ 0-9a-f]+: f214 5004 fsqrtw %a4@,%fp0
+[ 0-9a-f]+: f21b 5004 fsqrtw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5004 fsqrtw %a2@-,%fp0
[ 0-9a-f]+: f22e 5004 0008 fsqrtw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5004 1234 fsqrtw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5404 fsqrtd %a4@,%fp0
+[ 0-9a-f]+: f21b 5404 fsqrtd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5404 fsqrtd %a2@-,%fp0
[ 0-9a-f]+: f22e 5404 0008 fsqrtd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5404 1234 fsqrtd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5804 fsqrtb %d5,%fp0
+[ 0-9a-f]+: f214 5804 fsqrtb %a4@,%fp0
+[ 0-9a-f]+: f21b 5804 fsqrtb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5804 fsqrtb %a2@-,%fp0
[ 0-9a-f]+: f22e 5804 0008 fsqrtb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5804 1234 fsqrtb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0041 fssqrtd %fp0,%fp0
+[ 0-9a-f]+: f205 4041 fssqrtl %d5,%fp0
+[ 0-9a-f]+: f214 4041 fssqrtl %a4@,%fp0
+[ 0-9a-f]+: f21b 4041 fssqrtl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4041 fssqrtl %a2@-,%fp0
[ 0-9a-f]+: f22e 4041 0008 fssqrtl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4041 1234 fssqrtl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4441 fssqrts %d5,%fp0
+[ 0-9a-f]+: f214 4441 fssqrts %a4@,%fp0
+[ 0-9a-f]+: f21b 4441 fssqrts %a3@\+,%fp0
+[ 0-9a-f]+: f222 4441 fssqrts %a2@-,%fp0
[ 0-9a-f]+: f22e 4441 0008 fssqrts %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4441 1234 fssqrts %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5041 fssqrtw %d5,%fp0
+[ 0-9a-f]+: f214 5041 fssqrtw %a4@,%fp0
+[ 0-9a-f]+: f21b 5041 fssqrtw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5041 fssqrtw %a2@-,%fp0
[ 0-9a-f]+: f22e 5041 0008 fssqrtw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5041 1234 fssqrtw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5441 fssqrtd %a4@,%fp0
+[ 0-9a-f]+: f21b 5441 fssqrtd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5441 fssqrtd %a2@-,%fp0
[ 0-9a-f]+: f22e 5441 0008 fssqrtd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5441 1234 fssqrtd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5841 fssqrtb %d5,%fp0
+[ 0-9a-f]+: f214 5841 fssqrtb %a4@,%fp0
+[ 0-9a-f]+: f21b 5841 fssqrtb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5841 fssqrtb %a2@-,%fp0
[ 0-9a-f]+: f22e 5841 0008 fssqrtb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5841 1234 fssqrtb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0045 fdsqrtd %fp0,%fp0
+[ 0-9a-f]+: f205 4045 fdsqrtl %d5,%fp0
+[ 0-9a-f]+: f214 4045 fdsqrtl %a4@,%fp0
+[ 0-9a-f]+: f21b 4045 fdsqrtl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4045 fdsqrtl %a2@-,%fp0
[ 0-9a-f]+: f22e 4045 0008 fdsqrtl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4045 1234 fdsqrtl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4445 fdsqrts %d5,%fp0
+[ 0-9a-f]+: f214 4445 fdsqrts %a4@,%fp0
+[ 0-9a-f]+: f21b 4445 fdsqrts %a3@\+,%fp0
+[ 0-9a-f]+: f222 4445 fdsqrts %a2@-,%fp0
[ 0-9a-f]+: f22e 4445 0008 fdsqrts %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4445 1234 fdsqrts %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5045 fdsqrtw %d5,%fp0
+[ 0-9a-f]+: f214 5045 fdsqrtw %a4@,%fp0
+[ 0-9a-f]+: f21b 5045 fdsqrtw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5045 fdsqrtw %a2@-,%fp0
[ 0-9a-f]+: f22e 5045 0008 fdsqrtw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5045 1234 fdsqrtw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5445 fdsqrtd %a4@,%fp0
+[ 0-9a-f]+: f21b 5445 fdsqrtd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5445 fdsqrtd %a2@-,%fp0
[ 0-9a-f]+: f22e 5445 0008 fdsqrtd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5445 1234 fdsqrtd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5845 fdsqrtb %d5,%fp0
+[ 0-9a-f]+: f214 5845 fdsqrtb %a4@,%fp0
+[ 0-9a-f]+: f21b 5845 fdsqrtb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5845 fdsqrtb %a2@-,%fp0
[ 0-9a-f]+: f22e 5845 0008 fdsqrtb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5845 1234 fdsqrtb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0018 fabsd %fp0,%fp0
+[ 0-9a-f]+: f205 4018 fabsl %d5,%fp0
+[ 0-9a-f]+: f214 4018 fabsl %a4@,%fp0
+[ 0-9a-f]+: f21b 4018 fabsl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4018 fabsl %a2@-,%fp0
[ 0-9a-f]+: f22e 4018 0008 fabsl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4018 1234 fabsl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4418 fabss %d5,%fp0
+[ 0-9a-f]+: f214 4418 fabss %a4@,%fp0
+[ 0-9a-f]+: f21b 4418 fabss %a3@\+,%fp0
+[ 0-9a-f]+: f222 4418 fabss %a2@-,%fp0
[ 0-9a-f]+: f22e 4418 0008 fabss %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4418 1234 fabss %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5018 fabsw %d5,%fp0
+[ 0-9a-f]+: f214 5018 fabsw %a4@,%fp0
+[ 0-9a-f]+: f21b 5018 fabsw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5018 fabsw %a2@-,%fp0
[ 0-9a-f]+: f22e 5018 0008 fabsw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5018 1234 fabsw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5418 fabsd %a4@,%fp0
+[ 0-9a-f]+: f21b 5418 fabsd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5418 fabsd %a2@-,%fp0
[ 0-9a-f]+: f22e 5418 0008 fabsd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5418 1234 fabsd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5818 fabsb %d5,%fp0
+[ 0-9a-f]+: f214 5818 fabsb %a4@,%fp0
+[ 0-9a-f]+: f21b 5818 fabsb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5818 fabsb %a2@-,%fp0
[ 0-9a-f]+: f22e 5818 0008 fabsb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5818 1234 fabsb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0058 fsabsd %fp0,%fp0
+[ 0-9a-f]+: f205 4058 fsabsl %d5,%fp0
+[ 0-9a-f]+: f214 4058 fsabsl %a4@,%fp0
+[ 0-9a-f]+: f21b 4058 fsabsl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4058 fsabsl %a2@-,%fp0
[ 0-9a-f]+: f22e 4058 0008 fsabsl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4058 1234 fsabsl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4458 fsabss %d5,%fp0
+[ 0-9a-f]+: f214 4458 fsabss %a4@,%fp0
+[ 0-9a-f]+: f21b 4458 fsabss %a3@\+,%fp0
+[ 0-9a-f]+: f222 4458 fsabss %a2@-,%fp0
[ 0-9a-f]+: f22e 4458 0008 fsabss %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4458 1234 fsabss %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5058 fsabsw %d5,%fp0
+[ 0-9a-f]+: f214 5058 fsabsw %a4@,%fp0
+[ 0-9a-f]+: f21b 5058 fsabsw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5058 fsabsw %a2@-,%fp0
[ 0-9a-f]+: f22e 5058 0008 fsabsw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5058 1234 fsabsw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5458 fsabsd %a4@,%fp0
+[ 0-9a-f]+: f21b 5458 fsabsd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5458 fsabsd %a2@-,%fp0
[ 0-9a-f]+: f22e 5458 0008 fsabsd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5458 1234 fsabsd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5858 fsabsb %d5,%fp0
+[ 0-9a-f]+: f214 5858 fsabsb %a4@,%fp0
+[ 0-9a-f]+: f21b 5858 fsabsb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5858 fsabsb %a2@-,%fp0
[ 0-9a-f]+: f22e 5858 0008 fsabsb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5858 1234 fsabsb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 005c fdabsd %fp0,%fp0
+[ 0-9a-f]+: f205 405c fdabsl %d5,%fp0
+[ 0-9a-f]+: f214 405c fdabsl %a4@,%fp0
+[ 0-9a-f]+: f21b 405c fdabsl %a3@\+,%fp0
+[ 0-9a-f]+: f222 405c fdabsl %a2@-,%fp0
[ 0-9a-f]+: f22e 405c 0008 fdabsl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 405c 1234 fdabsl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 445c fdabss %d5,%fp0
+[ 0-9a-f]+: f214 445c fdabss %a4@,%fp0
+[ 0-9a-f]+: f21b 445c fdabss %a3@\+,%fp0
+[ 0-9a-f]+: f222 445c fdabss %a2@-,%fp0
[ 0-9a-f]+: f22e 445c 0008 fdabss %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 445c 1234 fdabss %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 505c fdabsw %d5,%fp0
+[ 0-9a-f]+: f214 505c fdabsw %a4@,%fp0
+[ 0-9a-f]+: f21b 505c fdabsw %a3@\+,%fp0
+[ 0-9a-f]+: f222 505c fdabsw %a2@-,%fp0
[ 0-9a-f]+: f22e 505c 0008 fdabsw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 505c 1234 fdabsw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 545c fdabsd %a4@,%fp0
+[ 0-9a-f]+: f21b 545c fdabsd %a3@\+,%fp0
+[ 0-9a-f]+: f222 545c fdabsd %a2@-,%fp0
[ 0-9a-f]+: f22e 545c 0008 fdabsd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 545c 1234 fdabsd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 585c fdabsb %d5,%fp0
+[ 0-9a-f]+: f214 585c fdabsb %a4@,%fp0
+[ 0-9a-f]+: f21b 585c fdabsb %a3@\+,%fp0
+[ 0-9a-f]+: f222 585c fdabsb %a2@-,%fp0
[ 0-9a-f]+: f22e 585c 0008 fdabsb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 585c 1234 fdabsb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 001a fnegd %fp0,%fp0
+[ 0-9a-f]+: f205 401a fnegl %d5,%fp0
+[ 0-9a-f]+: f214 401a fnegl %a4@,%fp0
+[ 0-9a-f]+: f21b 401a fnegl %a3@\+,%fp0
+[ 0-9a-f]+: f222 401a fnegl %a2@-,%fp0
[ 0-9a-f]+: f22e 401a 0008 fnegl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 401a 1234 fnegl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 441a fnegs %d5,%fp0
+[ 0-9a-f]+: f214 441a fnegs %a4@,%fp0
+[ 0-9a-f]+: f21b 441a fnegs %a3@\+,%fp0
+[ 0-9a-f]+: f222 441a fnegs %a2@-,%fp0
[ 0-9a-f]+: f22e 441a 0008 fnegs %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 441a 1234 fnegs %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 501a fnegw %d5,%fp0
+[ 0-9a-f]+: f214 501a fnegw %a4@,%fp0
+[ 0-9a-f]+: f21b 501a fnegw %a3@\+,%fp0
+[ 0-9a-f]+: f222 501a fnegw %a2@-,%fp0
[ 0-9a-f]+: f22e 501a 0008 fnegw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 501a 1234 fnegw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 541a fnegd %a4@,%fp0
+[ 0-9a-f]+: f21b 541a fnegd %a3@\+,%fp0
+[ 0-9a-f]+: f222 541a fnegd %a2@-,%fp0
[ 0-9a-f]+: f22e 541a 0008 fnegd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 541a 1234 fnegd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 581a fnegb %d5,%fp0
+[ 0-9a-f]+: f214 581a fnegb %a4@,%fp0
+[ 0-9a-f]+: f21b 581a fnegb %a3@\+,%fp0
+[ 0-9a-f]+: f222 581a fnegb %a2@-,%fp0
[ 0-9a-f]+: f22e 581a 0008 fnegb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 581a 1234 fnegb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 005a fsnegd %fp0,%fp0
+[ 0-9a-f]+: f205 405a fsnegl %d5,%fp0
+[ 0-9a-f]+: f214 405a fsnegl %a4@,%fp0
+[ 0-9a-f]+: f21b 405a fsnegl %a3@\+,%fp0
+[ 0-9a-f]+: f222 405a fsnegl %a2@-,%fp0
[ 0-9a-f]+: f22e 405a 0008 fsnegl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 405a 1234 fsnegl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 445a fsnegs %d5,%fp0
+[ 0-9a-f]+: f214 445a fsnegs %a4@,%fp0
+[ 0-9a-f]+: f21b 445a fsnegs %a3@\+,%fp0
+[ 0-9a-f]+: f222 445a fsnegs %a2@-,%fp0
[ 0-9a-f]+: f22e 445a 0008 fsnegs %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 445a 1234 fsnegs %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 505a fsnegw %d5,%fp0
+[ 0-9a-f]+: f214 505a fsnegw %a4@,%fp0
+[ 0-9a-f]+: f21b 505a fsnegw %a3@\+,%fp0
+[ 0-9a-f]+: f222 505a fsnegw %a2@-,%fp0
[ 0-9a-f]+: f22e 505a 0008 fsnegw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 505a 1234 fsnegw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 545a fsnegd %a4@,%fp0
+[ 0-9a-f]+: f21b 545a fsnegd %a3@\+,%fp0
+[ 0-9a-f]+: f222 545a fsnegd %a2@-,%fp0
[ 0-9a-f]+: f22e 545a 0008 fsnegd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 545a 1234 fsnegd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 585a fsnegb %d5,%fp0
+[ 0-9a-f]+: f214 585a fsnegb %a4@,%fp0
+[ 0-9a-f]+: f21b 585a fsnegb %a3@\+,%fp0
+[ 0-9a-f]+: f222 585a fsnegb %a2@-,%fp0
[ 0-9a-f]+: f22e 585a 0008 fsnegb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 585a 1234 fsnegb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 005e fdnegd %fp0,%fp0
+[ 0-9a-f]+: f205 405e fdnegl %d5,%fp0
+[ 0-9a-f]+: f214 405e fdnegl %a4@,%fp0
+[ 0-9a-f]+: f21b 405e fdnegl %a3@\+,%fp0
+[ 0-9a-f]+: f222 405e fdnegl %a2@-,%fp0
[ 0-9a-f]+: f22e 405e 0008 fdnegl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 405e 1234 fdnegl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 445e fdnegs %d5,%fp0
+[ 0-9a-f]+: f214 445e fdnegs %a4@,%fp0
+[ 0-9a-f]+: f21b 445e fdnegs %a3@\+,%fp0
+[ 0-9a-f]+: f222 445e fdnegs %a2@-,%fp0
[ 0-9a-f]+: f22e 445e 0008 fdnegs %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 445e 1234 fdnegs %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 505e fdnegw %d5,%fp0
+[ 0-9a-f]+: f214 505e fdnegw %a4@,%fp0
+[ 0-9a-f]+: f21b 505e fdnegw %a3@\+,%fp0
+[ 0-9a-f]+: f222 505e fdnegw %a2@-,%fp0
[ 0-9a-f]+: f22e 505e 0008 fdnegw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 505e 1234 fdnegw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 545e fdnegd %a4@,%fp0
+[ 0-9a-f]+: f21b 545e fdnegd %a3@\+,%fp0
+[ 0-9a-f]+: f222 545e fdnegd %a2@-,%fp0
[ 0-9a-f]+: f22e 545e 0008 fdnegd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 545e 1234 fdnegd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 585e fdnegb %d5,%fp0
+[ 0-9a-f]+: f214 585e fdnegb %a4@,%fp0
+[ 0-9a-f]+: f21b 585e fdnegb %a3@\+,%fp0
+[ 0-9a-f]+: f222 585e fdnegb %a2@-,%fp0
[ 0-9a-f]+: f22e 585e 0008 fdnegb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 585e 1234 fdnegb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0020 fdivd %fp0,%fp0
+[ 0-9a-f]+: f205 4020 fdivl %d5,%fp0
+[ 0-9a-f]+: f214 4020 fdivl %a4@,%fp0
+[ 0-9a-f]+: f21b 4020 fdivl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4020 fdivl %a2@-,%fp0
[ 0-9a-f]+: f22e 4020 0008 fdivl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4020 1234 fdivl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4420 fdivs %d5,%fp0
+[ 0-9a-f]+: f214 4420 fdivs %a4@,%fp0
+[ 0-9a-f]+: f21b 4420 fdivs %a3@\+,%fp0
+[ 0-9a-f]+: f222 4420 fdivs %a2@-,%fp0
[ 0-9a-f]+: f22e 4420 0008 fdivs %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4420 1234 fdivs %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5020 fdivw %d5,%fp0
+[ 0-9a-f]+: f214 5020 fdivw %a4@,%fp0
+[ 0-9a-f]+: f21b 5020 fdivw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5020 fdivw %a2@-,%fp0
[ 0-9a-f]+: f22e 5020 0008 fdivw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5020 1234 fdivw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5420 fdivd %a4@,%fp0
+[ 0-9a-f]+: f21b 5420 fdivd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5420 fdivd %a2@-,%fp0
[ 0-9a-f]+: f22e 5420 0008 fdivd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5420 1234 fdivd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5820 fdivb %d5,%fp0
+[ 0-9a-f]+: f214 5820 fdivb %a4@,%fp0
+[ 0-9a-f]+: f21b 5820 fdivb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5820 fdivb %a2@-,%fp0
[ 0-9a-f]+: f22e 5820 0008 fdivb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5820 1234 fdivb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0060 fsdivd %fp0,%fp0
+[ 0-9a-f]+: f205 4060 fsdivl %d5,%fp0
+[ 0-9a-f]+: f214 4060 fsdivl %a4@,%fp0
+[ 0-9a-f]+: f21b 4060 fsdivl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4060 fsdivl %a2@-,%fp0
[ 0-9a-f]+: f22e 4060 0008 fsdivl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4060 1234 fsdivl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4460 fsdivs %d5,%fp0
+[ 0-9a-f]+: f214 4460 fsdivs %a4@,%fp0
+[ 0-9a-f]+: f21b 4460 fsdivs %a3@\+,%fp0
+[ 0-9a-f]+: f222 4460 fsdivs %a2@-,%fp0
[ 0-9a-f]+: f22e 4460 0008 fsdivs %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4460 1234 fsdivs %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5060 fsdivw %d5,%fp0
+[ 0-9a-f]+: f214 5060 fsdivw %a4@,%fp0
+[ 0-9a-f]+: f21b 5060 fsdivw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5060 fsdivw %a2@-,%fp0
[ 0-9a-f]+: f22e 5060 0008 fsdivw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5060 1234 fsdivw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5460 fsdivd %a4@,%fp0
+[ 0-9a-f]+: f21b 5460 fsdivd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5460 fsdivd %a2@-,%fp0
[ 0-9a-f]+: f22e 5460 0008 fsdivd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5460 1234 fsdivd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5860 fsdivb %d5,%fp0
+[ 0-9a-f]+: f214 5860 fsdivb %a4@,%fp0
+[ 0-9a-f]+: f21b 5860 fsdivb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5860 fsdivb %a2@-,%fp0
[ 0-9a-f]+: f22e 5860 0008 fsdivb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5860 1234 fsdivb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0064 fddivd %fp0,%fp0
+[ 0-9a-f]+: f205 4064 fddivl %d5,%fp0
+[ 0-9a-f]+: f214 4064 fddivl %a4@,%fp0
+[ 0-9a-f]+: f21b 4064 fddivl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4064 fddivl %a2@-,%fp0
[ 0-9a-f]+: f22e 4064 0008 fddivl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4064 1234 fddivl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4464 fddivs %d5,%fp0
+[ 0-9a-f]+: f214 4464 fddivs %a4@,%fp0
+[ 0-9a-f]+: f21b 4464 fddivs %a3@\+,%fp0
+[ 0-9a-f]+: f222 4464 fddivs %a2@-,%fp0
[ 0-9a-f]+: f22e 4464 0008 fddivs %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4464 1234 fddivs %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5064 fddivw %d5,%fp0
+[ 0-9a-f]+: f214 5064 fddivw %a4@,%fp0
+[ 0-9a-f]+: f21b 5064 fddivw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5064 fddivw %a2@-,%fp0
[ 0-9a-f]+: f22e 5064 0008 fddivw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5064 1234 fddivw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5464 fddivd %a4@,%fp0
+[ 0-9a-f]+: f21b 5464 fddivd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5464 fddivd %a2@-,%fp0
[ 0-9a-f]+: f22e 5464 0008 fddivd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5464 1234 fddivd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5864 fddivb %d5,%fp0
+[ 0-9a-f]+: f214 5864 fddivb %a4@,%fp0
+[ 0-9a-f]+: f21b 5864 fddivb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5864 fddivb %a2@-,%fp0
[ 0-9a-f]+: f22e 5864 0008 fddivb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5864 1234 fddivb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0022 faddd %fp0,%fp0
+[ 0-9a-f]+: f205 4022 faddl %d5,%fp0
+[ 0-9a-f]+: f214 4022 faddl %a4@,%fp0
+[ 0-9a-f]+: f21b 4022 faddl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4022 faddl %a2@-,%fp0
[ 0-9a-f]+: f22e 4022 0008 faddl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4022 1234 faddl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4422 fadds %d5,%fp0
+[ 0-9a-f]+: f214 4422 fadds %a4@,%fp0
+[ 0-9a-f]+: f21b 4422 fadds %a3@\+,%fp0
+[ 0-9a-f]+: f222 4422 fadds %a2@-,%fp0
[ 0-9a-f]+: f22e 4422 0008 fadds %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4422 1234 fadds %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5022 faddw %d5,%fp0
+[ 0-9a-f]+: f214 5022 faddw %a4@,%fp0
+[ 0-9a-f]+: f21b 5022 faddw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5022 faddw %a2@-,%fp0
[ 0-9a-f]+: f22e 5022 0008 faddw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5022 1234 faddw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5422 faddd %a4@,%fp0
+[ 0-9a-f]+: f21b 5422 faddd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5422 faddd %a2@-,%fp0
[ 0-9a-f]+: f22e 5422 0008 faddd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5422 1234 faddd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5822 faddb %d5,%fp0
+[ 0-9a-f]+: f214 5822 faddb %a4@,%fp0
+[ 0-9a-f]+: f21b 5822 faddb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5822 faddb %a2@-,%fp0
[ 0-9a-f]+: f22e 5822 0008 faddb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5822 1234 faddb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0062 fsaddd %fp0,%fp0
+[ 0-9a-f]+: f205 4062 fsaddl %d5,%fp0
+[ 0-9a-f]+: f214 4062 fsaddl %a4@,%fp0
+[ 0-9a-f]+: f21b 4062 fsaddl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4062 fsaddl %a2@-,%fp0
[ 0-9a-f]+: f22e 4062 0008 fsaddl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4062 1234 fsaddl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4462 fsadds %d5,%fp0
+[ 0-9a-f]+: f214 4462 fsadds %a4@,%fp0
+[ 0-9a-f]+: f21b 4462 fsadds %a3@\+,%fp0
+[ 0-9a-f]+: f222 4462 fsadds %a2@-,%fp0
[ 0-9a-f]+: f22e 4462 0008 fsadds %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4462 1234 fsadds %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5062 fsaddw %d5,%fp0
+[ 0-9a-f]+: f214 5062 fsaddw %a4@,%fp0
+[ 0-9a-f]+: f21b 5062 fsaddw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5062 fsaddw %a2@-,%fp0
[ 0-9a-f]+: f22e 5062 0008 fsaddw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5062 1234 fsaddw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5462 fsaddd %a4@,%fp0
+[ 0-9a-f]+: f21b 5462 fsaddd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5462 fsaddd %a2@-,%fp0
[ 0-9a-f]+: f22e 5462 0008 fsaddd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5462 1234 fsaddd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5862 fsaddb %d5,%fp0
+[ 0-9a-f]+: f214 5862 fsaddb %a4@,%fp0
+[ 0-9a-f]+: f21b 5862 fsaddb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5862 fsaddb %a2@-,%fp0
[ 0-9a-f]+: f22e 5862 0008 fsaddb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5862 1234 fsaddb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0066 fdaddd %fp0,%fp0
+[ 0-9a-f]+: f205 4066 fdaddl %d5,%fp0
+[ 0-9a-f]+: f214 4066 fdaddl %a4@,%fp0
+[ 0-9a-f]+: f21b 4066 fdaddl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4066 fdaddl %a2@-,%fp0
[ 0-9a-f]+: f22e 4066 0008 fdaddl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4066 1234 fdaddl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4466 fdadds %d5,%fp0
+[ 0-9a-f]+: f214 4466 fdadds %a4@,%fp0
+[ 0-9a-f]+: f21b 4466 fdadds %a3@\+,%fp0
+[ 0-9a-f]+: f222 4466 fdadds %a2@-,%fp0
[ 0-9a-f]+: f22e 4466 0008 fdadds %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4466 1234 fdadds %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5066 fdaddw %d5,%fp0
+[ 0-9a-f]+: f214 5066 fdaddw %a4@,%fp0
+[ 0-9a-f]+: f21b 5066 fdaddw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5066 fdaddw %a2@-,%fp0
[ 0-9a-f]+: f22e 5066 0008 fdaddw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5066 1234 fdaddw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5466 fdaddd %a4@,%fp0
+[ 0-9a-f]+: f21b 5466 fdaddd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5466 fdaddd %a2@-,%fp0
[ 0-9a-f]+: f22e 5466 0008 fdaddd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5466 1234 fdaddd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5866 fdaddb %d5,%fp0
+[ 0-9a-f]+: f214 5866 fdaddb %a4@,%fp0
+[ 0-9a-f]+: f21b 5866 fdaddb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5866 fdaddb %a2@-,%fp0
[ 0-9a-f]+: f22e 5866 0008 fdaddb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5866 1234 fdaddb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0023 fmuld %fp0,%fp0
+[ 0-9a-f]+: f205 4023 fmull %d5,%fp0
+[ 0-9a-f]+: f214 4023 fmull %a4@,%fp0
+[ 0-9a-f]+: f21b 4023 fmull %a3@\+,%fp0
+[ 0-9a-f]+: f222 4023 fmull %a2@-,%fp0
[ 0-9a-f]+: f22e 4023 0008 fmull %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4023 1234 fmull %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4423 fmuls %d5,%fp0
+[ 0-9a-f]+: f214 4423 fmuls %a4@,%fp0
+[ 0-9a-f]+: f21b 4423 fmuls %a3@\+,%fp0
+[ 0-9a-f]+: f222 4423 fmuls %a2@-,%fp0
[ 0-9a-f]+: f22e 4423 0008 fmuls %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4423 1234 fmuls %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5023 fmulw %d5,%fp0
+[ 0-9a-f]+: f214 5023 fmulw %a4@,%fp0
+[ 0-9a-f]+: f21b 5023 fmulw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5023 fmulw %a2@-,%fp0
[ 0-9a-f]+: f22e 5023 0008 fmulw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5023 1234 fmulw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5423 fmuld %a4@,%fp0
+[ 0-9a-f]+: f21b 5423 fmuld %a3@\+,%fp0
+[ 0-9a-f]+: f222 5423 fmuld %a2@-,%fp0
[ 0-9a-f]+: f22e 5423 0008 fmuld %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5423 1234 fmuld %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5823 fmulb %d5,%fp0
+[ 0-9a-f]+: f214 5823 fmulb %a4@,%fp0
+[ 0-9a-f]+: f21b 5823 fmulb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5823 fmulb %a2@-,%fp0
[ 0-9a-f]+: f22e 5823 0008 fmulb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5823 1234 fmulb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0063 fsmuld %fp0,%fp0
+[ 0-9a-f]+: f205 4063 fsmull %d5,%fp0
+[ 0-9a-f]+: f214 4063 fsmull %a4@,%fp0
+[ 0-9a-f]+: f21b 4063 fsmull %a3@\+,%fp0
+[ 0-9a-f]+: f222 4063 fsmull %a2@-,%fp0
[ 0-9a-f]+: f22e 4063 0008 fsmull %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4063 1234 fsmull %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4463 fsmuls %d5,%fp0
+[ 0-9a-f]+: f214 4463 fsmuls %a4@,%fp0
+[ 0-9a-f]+: f21b 4463 fsmuls %a3@\+,%fp0
+[ 0-9a-f]+: f222 4463 fsmuls %a2@-,%fp0
[ 0-9a-f]+: f22e 4463 0008 fsmuls %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4463 1234 fsmuls %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5063 fsmulw %d5,%fp0
+[ 0-9a-f]+: f214 5063 fsmulw %a4@,%fp0
+[ 0-9a-f]+: f21b 5063 fsmulw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5063 fsmulw %a2@-,%fp0
[ 0-9a-f]+: f22e 5063 0008 fsmulw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5063 1234 fsmulw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5463 fsmuld %a4@,%fp0
+[ 0-9a-f]+: f21b 5463 fsmuld %a3@\+,%fp0
+[ 0-9a-f]+: f222 5463 fsmuld %a2@-,%fp0
[ 0-9a-f]+: f22e 5463 0008 fsmuld %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5463 1234 fsmuld %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5863 fsmulb %d5,%fp0
+[ 0-9a-f]+: f214 5863 fsmulb %a4@,%fp0
+[ 0-9a-f]+: f21b 5863 fsmulb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5863 fsmulb %a2@-,%fp0
[ 0-9a-f]+: f22e 5863 0008 fsmulb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5863 1234 fsmulb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0067 fdmuld %fp0,%fp0
+[ 0-9a-f]+: f205 4067 fdmull %d5,%fp0
+[ 0-9a-f]+: f214 4067 fdmull %a4@,%fp0
+[ 0-9a-f]+: f21b 4067 fdmull %a3@\+,%fp0
+[ 0-9a-f]+: f222 4067 fdmull %a2@-,%fp0
[ 0-9a-f]+: f22e 4067 0008 fdmull %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4067 1234 fdmull %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4467 fdmuls %d5,%fp0
+[ 0-9a-f]+: f214 4467 fdmuls %a4@,%fp0
+[ 0-9a-f]+: f21b 4467 fdmuls %a3@\+,%fp0
+[ 0-9a-f]+: f222 4467 fdmuls %a2@-,%fp0
[ 0-9a-f]+: f22e 4467 0008 fdmuls %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4467 1234 fdmuls %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5067 fdmulw %d5,%fp0
+[ 0-9a-f]+: f214 5067 fdmulw %a4@,%fp0
+[ 0-9a-f]+: f21b 5067 fdmulw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5067 fdmulw %a2@-,%fp0
[ 0-9a-f]+: f22e 5067 0008 fdmulw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5067 1234 fdmulw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5467 fdmuld %a4@,%fp0
+[ 0-9a-f]+: f21b 5467 fdmuld %a3@\+,%fp0
+[ 0-9a-f]+: f222 5467 fdmuld %a2@-,%fp0
[ 0-9a-f]+: f22e 5467 0008 fdmuld %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5467 1234 fdmuld %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5867 fdmulb %d5,%fp0
+[ 0-9a-f]+: f214 5867 fdmulb %a4@,%fp0
+[ 0-9a-f]+: f21b 5867 fdmulb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5867 fdmulb %a2@-,%fp0
[ 0-9a-f]+: f22e 5867 0008 fdmulb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5867 1234 fdmulb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0028 fsubd %fp0,%fp0
+[ 0-9a-f]+: f205 4028 fsubl %d5,%fp0
+[ 0-9a-f]+: f214 4028 fsubl %a4@,%fp0
+[ 0-9a-f]+: f21b 4028 fsubl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4028 fsubl %a2@-,%fp0
[ 0-9a-f]+: f22e 4028 0008 fsubl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4028 1234 fsubl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4428 fsubs %d5,%fp0
+[ 0-9a-f]+: f214 4428 fsubs %a4@,%fp0
+[ 0-9a-f]+: f21b 4428 fsubs %a3@\+,%fp0
+[ 0-9a-f]+: f222 4428 fsubs %a2@-,%fp0
[ 0-9a-f]+: f22e 4428 0008 fsubs %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4428 1234 fsubs %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5028 fsubw %d5,%fp0
+[ 0-9a-f]+: f214 5028 fsubw %a4@,%fp0
+[ 0-9a-f]+: f21b 5028 fsubw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5028 fsubw %a2@-,%fp0
[ 0-9a-f]+: f22e 5028 0008 fsubw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5028 1234 fsubw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5428 fsubd %a4@,%fp0
+[ 0-9a-f]+: f21b 5428 fsubd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5428 fsubd %a2@-,%fp0
[ 0-9a-f]+: f22e 5428 0008 fsubd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5428 1234 fsubd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5828 fsubb %d5,%fp0
+[ 0-9a-f]+: f214 5828 fsubb %a4@,%fp0
+[ 0-9a-f]+: f21b 5828 fsubb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5828 fsubb %a2@-,%fp0
[ 0-9a-f]+: f22e 5828 0008 fsubb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5828 1234 fsubb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0068 fssubd %fp0,%fp0
+[ 0-9a-f]+: f205 4068 fssubl %d5,%fp0
+[ 0-9a-f]+: f214 4068 fssubl %a4@,%fp0
+[ 0-9a-f]+: f21b 4068 fssubl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4068 fssubl %a2@-,%fp0
[ 0-9a-f]+: f22e 4068 0008 fssubl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4068 1234 fssubl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4468 fssubs %d5,%fp0
+[ 0-9a-f]+: f214 4468 fssubs %a4@,%fp0
+[ 0-9a-f]+: f21b 4468 fssubs %a3@\+,%fp0
+[ 0-9a-f]+: f222 4468 fssubs %a2@-,%fp0
[ 0-9a-f]+: f22e 4468 0008 fssubs %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4468 1234 fssubs %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5068 fssubw %d5,%fp0
+[ 0-9a-f]+: f214 5068 fssubw %a4@,%fp0
+[ 0-9a-f]+: f21b 5068 fssubw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5068 fssubw %a2@-,%fp0
[ 0-9a-f]+: f22e 5068 0008 fssubw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5068 1234 fssubw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5468 fssubd %a4@,%fp0
+[ 0-9a-f]+: f21b 5468 fssubd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5468 fssubd %a2@-,%fp0
[ 0-9a-f]+: f22e 5468 0008 fssubd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5468 1234 fssubd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5868 fssubb %d5,%fp0
+[ 0-9a-f]+: f214 5868 fssubb %a4@,%fp0
+[ 0-9a-f]+: f21b 5868 fssubb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5868 fssubb %a2@-,%fp0
[ 0-9a-f]+: f22e 5868 0008 fssubb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5868 1234 fssubb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 006c fdsubd %fp0,%fp0
+[ 0-9a-f]+: f205 406c fdsubl %d5,%fp0
+[ 0-9a-f]+: f214 406c fdsubl %a4@,%fp0
+[ 0-9a-f]+: f21b 406c fdsubl %a3@\+,%fp0
+[ 0-9a-f]+: f222 406c fdsubl %a2@-,%fp0
[ 0-9a-f]+: f22e 406c 0008 fdsubl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 406c 1234 fdsubl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 446c fdsubs %d5,%fp0
+[ 0-9a-f]+: f214 446c fdsubs %a4@,%fp0
+[ 0-9a-f]+: f21b 446c fdsubs %a3@\+,%fp0
+[ 0-9a-f]+: f222 446c fdsubs %a2@-,%fp0
[ 0-9a-f]+: f22e 446c 0008 fdsubs %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 446c 1234 fdsubs %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 506c fdsubw %d5,%fp0
+[ 0-9a-f]+: f214 506c fdsubw %a4@,%fp0
+[ 0-9a-f]+: f21b 506c fdsubw %a3@\+,%fp0
+[ 0-9a-f]+: f222 506c fdsubw %a2@-,%fp0
[ 0-9a-f]+: f22e 506c 0008 fdsubw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 506c 1234 fdsubw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 546c fdsubd %a4@,%fp0
+[ 0-9a-f]+: f21b 546c fdsubd %a3@\+,%fp0
+[ 0-9a-f]+: f222 546c fdsubd %a2@-,%fp0
[ 0-9a-f]+: f22e 546c 0008 fdsubd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 546c 1234 fdsubd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 586c fdsubb %d5,%fp0
+[ 0-9a-f]+: f214 586c fdsubb %a4@,%fp0
+[ 0-9a-f]+: f21b 586c fdsubb %a3@\+,%fp0
+[ 0-9a-f]+: f222 586c fdsubb %a2@-,%fp0
[ 0-9a-f]+: f22e 586c 0008 fdsubb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 586c 1234 fdsubb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0000 fmoved %fp0,%fp0
+[ 0-9a-f]+: f205 4000 fmovel %d5,%fp0
+[ 0-9a-f]+: f214 4000 fmovel %a4@,%fp0
+[ 0-9a-f]+: f21b 4000 fmovel %a3@\+,%fp0
+[ 0-9a-f]+: f222 4000 fmovel %a2@-,%fp0
[ 0-9a-f]+: f22e 4000 0008 fmovel %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4000 1234 fmovel %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4400 fmoves %d5,%fp0
+[ 0-9a-f]+: f214 4400 fmoves %a4@,%fp0
+[ 0-9a-f]+: f21b 4400 fmoves %a3@\+,%fp0
+[ 0-9a-f]+: f222 4400 fmoves %a2@-,%fp0
[ 0-9a-f]+: f22e 4400 0008 fmoves %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4400 1234 fmoves %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5000 fmovew %d5,%fp0
+[ 0-9a-f]+: f214 5000 fmovew %a4@,%fp0
+[ 0-9a-f]+: f21b 5000 fmovew %a3@\+,%fp0
+[ 0-9a-f]+: f222 5000 fmovew %a2@-,%fp0
[ 0-9a-f]+: f22e 5000 0008 fmovew %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5000 1234 fmovew %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5400 fmoved %a4@,%fp0
+[ 0-9a-f]+: f21b 5400 fmoved %a3@\+,%fp0
+[ 0-9a-f]+: f222 5400 fmoved %a2@-,%fp0
[ 0-9a-f]+: f22e 5400 0008 fmoved %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5400 1234 fmoved %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5800 fmoveb %d5,%fp0
+[ 0-9a-f]+: f214 5800 fmoveb %a4@,%fp0
+[ 0-9a-f]+: f21b 5800 fmoveb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5800 fmoveb %a2@-,%fp0
[ 0-9a-f]+: f22e 5800 0008 fmoveb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5800 1234 fmoveb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0040 fsmoved %fp0,%fp0
+[ 0-9a-f]+: f205 4040 fsmovel %d5,%fp0
+[ 0-9a-f]+: f214 4040 fsmovel %a4@,%fp0
+[ 0-9a-f]+: f21b 4040 fsmovel %a3@\+,%fp0
+[ 0-9a-f]+: f222 4040 fsmovel %a2@-,%fp0
[ 0-9a-f]+: f22e 4040 0008 fsmovel %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4040 1234 fsmovel %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4440 fsmoves %d5,%fp0
+[ 0-9a-f]+: f214 4440 fsmoves %a4@,%fp0
+[ 0-9a-f]+: f21b 4440 fsmoves %a3@\+,%fp0
+[ 0-9a-f]+: f222 4440 fsmoves %a2@-,%fp0
[ 0-9a-f]+: f22e 4440 0008 fsmoves %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4440 1234 fsmoves %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5040 fsmovew %d5,%fp0
+[ 0-9a-f]+: f214 5040 fsmovew %a4@,%fp0
+[ 0-9a-f]+: f21b 5040 fsmovew %a3@\+,%fp0
+[ 0-9a-f]+: f222 5040 fsmovew %a2@-,%fp0
[ 0-9a-f]+: f22e 5040 0008 fsmovew %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5040 1234 fsmovew %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5440 fsmoved %a4@,%fp0
+[ 0-9a-f]+: f21b 5440 fsmoved %a3@\+,%fp0
+[ 0-9a-f]+: f222 5440 fsmoved %a2@-,%fp0
[ 0-9a-f]+: f22e 5440 0008 fsmoved %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5440 1234 fsmoved %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5840 fsmoveb %d5,%fp0
+[ 0-9a-f]+: f214 5840 fsmoveb %a4@,%fp0
+[ 0-9a-f]+: f21b 5840 fsmoveb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5840 fsmoveb %a2@-,%fp0
[ 0-9a-f]+: f22e 5840 0008 fsmoveb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5840 1234 fsmoveb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0044 fdmoved %fp0,%fp0
+[ 0-9a-f]+: f205 4044 fdmovel %d5,%fp0
+[ 0-9a-f]+: f214 4044 fdmovel %a4@,%fp0
+[ 0-9a-f]+: f21b 4044 fdmovel %a3@\+,%fp0
+[ 0-9a-f]+: f222 4044 fdmovel %a2@-,%fp0
[ 0-9a-f]+: f22e 4044 0008 fdmovel %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4044 1234 fdmovel %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4444 fdmoves %d5,%fp0
+[ 0-9a-f]+: f214 4444 fdmoves %a4@,%fp0
+[ 0-9a-f]+: f21b 4444 fdmoves %a3@\+,%fp0
+[ 0-9a-f]+: f222 4444 fdmoves %a2@-,%fp0
[ 0-9a-f]+: f22e 4444 0008 fdmoves %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4444 1234 fdmoves %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5044 fdmovew %d5,%fp0
+[ 0-9a-f]+: f214 5044 fdmovew %a4@,%fp0
+[ 0-9a-f]+: f21b 5044 fdmovew %a3@\+,%fp0
+[ 0-9a-f]+: f222 5044 fdmovew %a2@-,%fp0
[ 0-9a-f]+: f22e 5044 0008 fdmovew %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5044 1234 fdmovew %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5444 fdmoved %a4@,%fp0
+[ 0-9a-f]+: f21b 5444 fdmoved %a3@\+,%fp0
+[ 0-9a-f]+: f222 5444 fdmoved %a2@-,%fp0
[ 0-9a-f]+: f22e 5444 0008 fdmoved %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5444 1234 fdmoved %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5844 fdmoveb %d5,%fp0
+[ 0-9a-f]+: f214 5844 fdmoveb %a4@,%fp0
+[ 0-9a-f]+: f21b 5844 fdmoveb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5844 fdmoveb %a2@-,%fp0
[ 0-9a-f]+: f22e 5844 0008 fdmoveb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5844 1234 fdmoveb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0001 fintd %fp0,%fp0
+[ 0-9a-f]+: f205 4001 fintl %d5,%fp0
+[ 0-9a-f]+: f214 4001 fintl %a4@,%fp0
+[ 0-9a-f]+: f21b 4001 fintl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4001 fintl %a2@-,%fp0
[ 0-9a-f]+: f22e 4001 0008 fintl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4001 1234 fintl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4401 fints %d5,%fp0
+[ 0-9a-f]+: f214 4401 fints %a4@,%fp0
+[ 0-9a-f]+: f21b 4401 fints %a3@\+,%fp0
+[ 0-9a-f]+: f222 4401 fints %a2@-,%fp0
[ 0-9a-f]+: f22e 4401 0008 fints %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4401 1234 fints %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5001 fintw %d5,%fp0
+[ 0-9a-f]+: f214 5001 fintw %a4@,%fp0
+[ 0-9a-f]+: f21b 5001 fintw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5001 fintw %a2@-,%fp0
[ 0-9a-f]+: f22e 5001 0008 fintw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5001 1234 fintw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5401 fintd %a4@,%fp0
+[ 0-9a-f]+: f21b 5401 fintd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5401 fintd %a2@-,%fp0
[ 0-9a-f]+: f22e 5401 0008 fintd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5401 1234 fintd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5801 fintb %d5,%fp0
+[ 0-9a-f]+: f214 5801 fintb %a4@,%fp0
+[ 0-9a-f]+: f21b 5801 fintb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5801 fintb %a2@-,%fp0
[ 0-9a-f]+: f22e 5801 0008 fintb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5801 1234 fintb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0003 fintrzd %fp0,%fp0
+[ 0-9a-f]+: f205 4003 fintrzl %d5,%fp0
+[ 0-9a-f]+: f214 4003 fintrzl %a4@,%fp0
+[ 0-9a-f]+: f21b 4003 fintrzl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4003 fintrzl %a2@-,%fp0
[ 0-9a-f]+: f22e 4003 0008 fintrzl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4003 1234 fintrzl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4403 fintrzs %d5,%fp0
+[ 0-9a-f]+: f214 4403 fintrzs %a4@,%fp0
+[ 0-9a-f]+: f21b 4403 fintrzs %a3@\+,%fp0
+[ 0-9a-f]+: f222 4403 fintrzs %a2@-,%fp0
[ 0-9a-f]+: f22e 4403 0008 fintrzs %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4403 1234 fintrzs %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5003 fintrzw %d5,%fp0
+[ 0-9a-f]+: f214 5003 fintrzw %a4@,%fp0
+[ 0-9a-f]+: f21b 5003 fintrzw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5003 fintrzw %a2@-,%fp0
[ 0-9a-f]+: f22e 5003 0008 fintrzw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5003 1234 fintrzw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5403 fintrzd %a4@,%fp0
+[ 0-9a-f]+: f21b 5403 fintrzd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5403 fintrzd %a2@-,%fp0
[ 0-9a-f]+: f22e 5403 0008 fintrzd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5403 1234 fintrzd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5803 fintrzb %d5,%fp0
+[ 0-9a-f]+: f214 5803 fintrzb %a4@,%fp0
+[ 0-9a-f]+: f21b 5803 fintrzb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5803 fintrzb %a2@-,%fp0
[ 0-9a-f]+: f22e 5803 0008 fintrzb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5803 1234 fintrzb %pc@\(.*\),%fp0
[ 0-9a-f]+: f200 0038 fcmpd %fp0,%fp0
+[ 0-9a-f]+: f205 4038 fcmpl %d5,%fp0
+[ 0-9a-f]+: f214 4038 fcmpl %a4@,%fp0
+[ 0-9a-f]+: f21b 4038 fcmpl %a3@\+,%fp0
+[ 0-9a-f]+: f222 4038 fcmpl %a2@-,%fp0
[ 0-9a-f]+: f22e 4038 0008 fcmpl %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4038 1234 fcmpl %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 4438 fcmps %d5,%fp0
+[ 0-9a-f]+: f214 4438 fcmps %a4@,%fp0
+[ 0-9a-f]+: f21b 4438 fcmps %a3@\+,%fp0
+[ 0-9a-f]+: f222 4438 fcmps %a2@-,%fp0
[ 0-9a-f]+: f22e 4438 0008 fcmps %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 4438 1234 fcmps %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5038 fcmpw %d5,%fp0
+[ 0-9a-f]+: f214 5038 fcmpw %a4@,%fp0
+[ 0-9a-f]+: f21b 5038 fcmpw %a3@\+,%fp0
+[ 0-9a-f]+: f222 5038 fcmpw %a2@-,%fp0
[ 0-9a-f]+: f22e 5038 0008 fcmpw %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5038 1234 fcmpw %pc@\(.*\),%fp0
+[ 0-9a-f]+: f214 5438 fcmpd %a4@,%fp0
+[ 0-9a-f]+: f21b 5438 fcmpd %a3@\+,%fp0
+[ 0-9a-f]+: f222 5438 fcmpd %a2@-,%fp0
[ 0-9a-f]+: f22e 5438 0008 fcmpd %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5438 1234 fcmpd %pc@\(.*\),%fp0
+[ 0-9a-f]+: f205 5838 fcmpb %d5,%fp0
+[ 0-9a-f]+: f214 5838 fcmpb %a4@,%fp0
+[ 0-9a-f]+: f21b 5838 fcmpb %a3@\+,%fp0
+[ 0-9a-f]+: f222 5838 fcmpb %a2@-,%fp0
[ 0-9a-f]+: f22e 5838 0008 fcmpb %fp@\(8\),%fp0
+[ 0-9a-f]+: f23a 5838 1234 fcmpb %pc@\(.*\),%fp0
[ 0-9a-f]+: f22e f0f2 0008 fmovemd %fp0-%fp3/%fp6,%fp@\(8\)
[ 0-9a-f]+: f22e d02c 0008 fmovemd %fp@\(8\),%fp2/%fp4-%fp5
[ 0-9a-f]+: f22e f027 0008 fmovemd %fp2/%fp5-%fp7,%fp@\(8\)
diff --git a/gas/testsuite/gas/m68k/mcf-fpu.s b/gas/testsuite/gas/m68k/mcf-fpu.s
index 99231a74e31f..fd2a15621c52 100644
--- a/gas/testsuite/gas/m68k/mcf-fpu.s
+++ b/gas/testsuite/gas/m68k/mcf-fpu.s
@@ -2,167 +2,815 @@
.text
fsqrtd %fp0,%fp0
+ fsqrtl %d5,%fp0
+ fsqrtl %a4@,%fp0
+ fsqrtl %a3@+,%fp0
+ fsqrtl %a2@-,%fp0
fsqrtl %fp@(8),%fp0
+ fsqrtl %pc@(.+0x1238),%fp0
+ fsqrts %d5,%fp0
+ fsqrts %a4@,%fp0
+ fsqrts %a3@+,%fp0
+ fsqrts %a2@-,%fp0
fsqrts %fp@(8),%fp0
+ fsqrts %pc@(.+0x1238),%fp0
+ fsqrtw %d5,%fp0
+ fsqrtw %a4@,%fp0
+ fsqrtw %a3@+,%fp0
+ fsqrtw %a2@-,%fp0
fsqrtw %fp@(8),%fp0
+ fsqrtw %pc@(.+0x1238),%fp0
+ fsqrtd %a4@,%fp0
+ fsqrtd %a3@+,%fp0
+ fsqrtd %a2@-,%fp0
fsqrtd %fp@(8),%fp0
+ fsqrtd %pc@(.+0x1238),%fp0
+ fsqrtb %d5,%fp0
+ fsqrtb %a4@,%fp0
+ fsqrtb %a3@+,%fp0
+ fsqrtb %a2@-,%fp0
fsqrtb %fp@(8),%fp0
+ fsqrtb %pc@(.+0x1238),%fp0
fssqrtd %fp0,%fp0
+ fssqrtl %d5,%fp0
+ fssqrtl %a4@,%fp0
+ fssqrtl %a3@+,%fp0
+ fssqrtl %a2@-,%fp0
fssqrtl %fp@(8),%fp0
+ fssqrtl %pc@(.+0x1238),%fp0
+ fssqrts %d5,%fp0
+ fssqrts %a4@,%fp0
+ fssqrts %a3@+,%fp0
+ fssqrts %a2@-,%fp0
fssqrts %fp@(8),%fp0
+ fssqrts %pc@(.+0x1238),%fp0
+ fssqrtw %d5,%fp0
+ fssqrtw %a4@,%fp0
+ fssqrtw %a3@+,%fp0
+ fssqrtw %a2@-,%fp0
fssqrtw %fp@(8),%fp0
+ fssqrtw %pc@(.+0x1238),%fp0
+ fssqrtd %a4@,%fp0
+ fssqrtd %a3@+,%fp0
+ fssqrtd %a2@-,%fp0
fssqrtd %fp@(8),%fp0
+ fssqrtd %pc@(.+0x1238),%fp0
+ fssqrtb %d5,%fp0
+ fssqrtb %a4@,%fp0
+ fssqrtb %a3@+,%fp0
+ fssqrtb %a2@-,%fp0
fssqrtb %fp@(8),%fp0
+ fssqrtb %pc@(.+0x1238),%fp0
fdsqrtd %fp0,%fp0
+ fdsqrtl %d5,%fp0
+ fdsqrtl %a4@,%fp0
+ fdsqrtl %a3@+,%fp0
+ fdsqrtl %a2@-,%fp0
fdsqrtl %fp@(8),%fp0
+ fdsqrtl %pc@(.+0x1238),%fp0
+ fdsqrts %d5,%fp0
+ fdsqrts %a4@,%fp0
+ fdsqrts %a3@+,%fp0
+ fdsqrts %a2@-,%fp0
fdsqrts %fp@(8),%fp0
+ fdsqrts %pc@(.+0x1238),%fp0
+ fdsqrtw %d5,%fp0
+ fdsqrtw %a4@,%fp0
+ fdsqrtw %a3@+,%fp0
+ fdsqrtw %a2@-,%fp0
fdsqrtw %fp@(8),%fp0
+ fdsqrtw %pc@(.+0x1238),%fp0
+ fdsqrtd %a4@,%fp0
+ fdsqrtd %a3@+,%fp0
+ fdsqrtd %a2@-,%fp0
fdsqrtd %fp@(8),%fp0
+ fdsqrtd %pc@(.+0x1238),%fp0
+ fdsqrtb %d5,%fp0
+ fdsqrtb %a4@,%fp0
+ fdsqrtb %a3@+,%fp0
+ fdsqrtb %a2@-,%fp0
fdsqrtb %fp@(8),%fp0
+ fdsqrtb %pc@(.+0x1238),%fp0
fabsd %fp0,%fp0
+ fabsl %d5,%fp0
+ fabsl %a4@,%fp0
+ fabsl %a3@+,%fp0
+ fabsl %a2@-,%fp0
fabsl %fp@(8),%fp0
+ fabsl %pc@(.+0x1238),%fp0
+ fabss %d5,%fp0
+ fabss %a4@,%fp0
+ fabss %a3@+,%fp0
+ fabss %a2@-,%fp0
fabss %fp@(8),%fp0
+ fabss %pc@(.+0x1238),%fp0
+ fabsw %d5,%fp0
+ fabsw %a4@,%fp0
+ fabsw %a3@+,%fp0
+ fabsw %a2@-,%fp0
fabsw %fp@(8),%fp0
+ fabsw %pc@(.+0x1238),%fp0
+ fabsd %a4@,%fp0
+ fabsd %a3@+,%fp0
+ fabsd %a2@-,%fp0
fabsd %fp@(8),%fp0
+ fabsd %pc@(.+0x1238),%fp0
+ fabsb %d5,%fp0
+ fabsb %a4@,%fp0
+ fabsb %a3@+,%fp0
+ fabsb %a2@-,%fp0
fabsb %fp@(8),%fp0
+ fabsb %pc@(.+0x1238),%fp0
fsabsd %fp0,%fp0
+ fsabsl %d5,%fp0
+ fsabsl %a4@,%fp0
+ fsabsl %a3@+,%fp0
+ fsabsl %a2@-,%fp0
fsabsl %fp@(8),%fp0
+ fsabsl %pc@(.+0x1238),%fp0
+ fsabss %d5,%fp0
+ fsabss %a4@,%fp0
+ fsabss %a3@+,%fp0
+ fsabss %a2@-,%fp0
fsabss %fp@(8),%fp0
+ fsabss %pc@(.+0x1238),%fp0
+ fsabsw %d5,%fp0
+ fsabsw %a4@,%fp0
+ fsabsw %a3@+,%fp0
+ fsabsw %a2@-,%fp0
fsabsw %fp@(8),%fp0
+ fsabsw %pc@(.+0x1238),%fp0
+ fsabsd %a4@,%fp0
+ fsabsd %a3@+,%fp0
+ fsabsd %a2@-,%fp0
fsabsd %fp@(8),%fp0
+ fsabsd %pc@(.+0x1238),%fp0
+ fsabsb %d5,%fp0
+ fsabsb %a4@,%fp0
+ fsabsb %a3@+,%fp0
+ fsabsb %a2@-,%fp0
fsabsb %fp@(8),%fp0
+ fsabsb %pc@(.+0x1238),%fp0
fdabsd %fp0,%fp0
+ fdabsl %d5,%fp0
+ fdabsl %a4@,%fp0
+ fdabsl %a3@+,%fp0
+ fdabsl %a2@-,%fp0
fdabsl %fp@(8),%fp0
+ fdabsl %pc@(.+0x1238),%fp0
+ fdabss %d5,%fp0
+ fdabss %a4@,%fp0
+ fdabss %a3@+,%fp0
+ fdabss %a2@-,%fp0
fdabss %fp@(8),%fp0
+ fdabss %pc@(.+0x1238),%fp0
+ fdabsw %d5,%fp0
+ fdabsw %a4@,%fp0
+ fdabsw %a3@+,%fp0
+ fdabsw %a2@-,%fp0
fdabsw %fp@(8),%fp0
+ fdabsw %pc@(.+0x1238),%fp0
+ fdabsd %a4@,%fp0
+ fdabsd %a3@+,%fp0
+ fdabsd %a2@-,%fp0
fdabsd %fp@(8),%fp0
+ fdabsd %pc@(.+0x1238),%fp0
+ fdabsb %d5,%fp0
+ fdabsb %a4@,%fp0
+ fdabsb %a3@+,%fp0
+ fdabsb %a2@-,%fp0
fdabsb %fp@(8),%fp0
+ fdabsb %pc@(.+0x1238),%fp0
fnegd %fp0,%fp0
+ fnegl %d5,%fp0
+ fnegl %a4@,%fp0
+ fnegl %a3@+,%fp0
+ fnegl %a2@-,%fp0
fnegl %fp@(8),%fp0
+ fnegl %pc@(.+0x1238),%fp0
+ fnegs %d5,%fp0
+ fnegs %a4@,%fp0
+ fnegs %a3@+,%fp0
+ fnegs %a2@-,%fp0
fnegs %fp@(8),%fp0
+ fnegs %pc@(.+0x1238),%fp0
+ fnegw %d5,%fp0
+ fnegw %a4@,%fp0
+ fnegw %a3@+,%fp0
+ fnegw %a2@-,%fp0
fnegw %fp@(8),%fp0
+ fnegw %pc@(.+0x1238),%fp0
+ fnegd %a4@,%fp0
+ fnegd %a3@+,%fp0
+ fnegd %a2@-,%fp0
fnegd %fp@(8),%fp0
+ fnegd %pc@(.+0x1238),%fp0
+ fnegb %d5,%fp0
+ fnegb %a4@,%fp0
+ fnegb %a3@+,%fp0
+ fnegb %a2@-,%fp0
fnegb %fp@(8),%fp0
+ fnegb %pc@(.+0x1238),%fp0
fsnegd %fp0,%fp0
+ fsnegl %d5,%fp0
+ fsnegl %a4@,%fp0
+ fsnegl %a3@+,%fp0
+ fsnegl %a2@-,%fp0
fsnegl %fp@(8),%fp0
+ fsnegl %pc@(.+0x1238),%fp0
+ fsnegs %d5,%fp0
+ fsnegs %a4@,%fp0
+ fsnegs %a3@+,%fp0
+ fsnegs %a2@-,%fp0
fsnegs %fp@(8),%fp0
+ fsnegs %pc@(.+0x1238),%fp0
+ fsnegw %d5,%fp0
+ fsnegw %a4@,%fp0
+ fsnegw %a3@+,%fp0
+ fsnegw %a2@-,%fp0
fsnegw %fp@(8),%fp0
+ fsnegw %pc@(.+0x1238),%fp0
+ fsnegd %a4@,%fp0
+ fsnegd %a3@+,%fp0
+ fsnegd %a2@-,%fp0
fsnegd %fp@(8),%fp0
+ fsnegd %pc@(.+0x1238),%fp0
+ fsnegb %d5,%fp0
+ fsnegb %a4@,%fp0
+ fsnegb %a3@+,%fp0
+ fsnegb %a2@-,%fp0
fsnegb %fp@(8),%fp0
+ fsnegb %pc@(.+0x1238),%fp0
fdnegd %fp0,%fp0
+ fdnegl %d5,%fp0
+ fdnegl %a4@,%fp0
+ fdnegl %a3@+,%fp0
+ fdnegl %a2@-,%fp0
fdnegl %fp@(8),%fp0
+ fdnegl %pc@(.+0x1238),%fp0
+ fdnegs %d5,%fp0
+ fdnegs %a4@,%fp0
+ fdnegs %a3@+,%fp0
+ fdnegs %a2@-,%fp0
fdnegs %fp@(8),%fp0
+ fdnegs %pc@(.+0x1238),%fp0
+ fdnegw %d5,%fp0
+ fdnegw %a4@,%fp0
+ fdnegw %a3@+,%fp0
+ fdnegw %a2@-,%fp0
fdnegw %fp@(8),%fp0
+ fdnegw %pc@(.+0x1238),%fp0
+ fdnegd %a4@,%fp0
+ fdnegd %a3@+,%fp0
+ fdnegd %a2@-,%fp0
fdnegd %fp@(8),%fp0
+ fdnegd %pc@(.+0x1238),%fp0
+ fdnegb %d5,%fp0
+ fdnegb %a4@,%fp0
+ fdnegb %a3@+,%fp0
+ fdnegb %a2@-,%fp0
fdnegb %fp@(8),%fp0
+ fdnegb %pc@(.+0x1238),%fp0
fdivd %fp0,%fp0
+ fdivl %d5,%fp0
+ fdivl %a4@,%fp0
+ fdivl %a3@+,%fp0
+ fdivl %a2@-,%fp0
fdivl %fp@(8),%fp0
+ fdivl %pc@(.+0x1238),%fp0
+ fdivs %d5,%fp0
+ fdivs %a4@,%fp0
+ fdivs %a3@+,%fp0
+ fdivs %a2@-,%fp0
fdivs %fp@(8),%fp0
+ fdivs %pc@(.+0x1238),%fp0
+ fdivw %d5,%fp0
+ fdivw %a4@,%fp0
+ fdivw %a3@+,%fp0
+ fdivw %a2@-,%fp0
fdivw %fp@(8),%fp0
+ fdivw %pc@(.+0x1238),%fp0
+ fdivd %a4@,%fp0
+ fdivd %a3@+,%fp0
+ fdivd %a2@-,%fp0
fdivd %fp@(8),%fp0
+ fdivd %pc@(.+0x1238),%fp0
+ fdivb %d5,%fp0
+ fdivb %a4@,%fp0
+ fdivb %a3@+,%fp0
+ fdivb %a2@-,%fp0
fdivb %fp@(8),%fp0
+ fdivb %pc@(.+0x1238),%fp0
fsdivd %fp0,%fp0
+ fsdivl %d5,%fp0
+ fsdivl %a4@,%fp0
+ fsdivl %a3@+,%fp0
+ fsdivl %a2@-,%fp0
fsdivl %fp@(8),%fp0
+ fsdivl %pc@(.+0x1238),%fp0
+ fsdivs %d5,%fp0
+ fsdivs %a4@,%fp0
+ fsdivs %a3@+,%fp0
+ fsdivs %a2@-,%fp0
fsdivs %fp@(8),%fp0
+ fsdivs %pc@(.+0x1238),%fp0
+ fsdivw %d5,%fp0
+ fsdivw %a4@,%fp0
+ fsdivw %a3@+,%fp0
+ fsdivw %a2@-,%fp0
fsdivw %fp@(8),%fp0
+ fsdivw %pc@(.+0x1238),%fp0
+ fsdivd %a4@,%fp0
+ fsdivd %a3@+,%fp0
+ fsdivd %a2@-,%fp0
fsdivd %fp@(8),%fp0
+ fsdivd %pc@(.+0x1238),%fp0
+ fsdivb %d5,%fp0
+ fsdivb %a4@,%fp0
+ fsdivb %a3@+,%fp0
+ fsdivb %a2@-,%fp0
fsdivb %fp@(8),%fp0
+ fsdivb %pc@(.+0x1238),%fp0
fddivd %fp0,%fp0
+ fddivl %d5,%fp0
+ fddivl %a4@,%fp0
+ fddivl %a3@+,%fp0
+ fddivl %a2@-,%fp0
fddivl %fp@(8),%fp0
+ fddivl %pc@(.+0x1238),%fp0
+ fddivs %d5,%fp0
+ fddivs %a4@,%fp0
+ fddivs %a3@+,%fp0
+ fddivs %a2@-,%fp0
fddivs %fp@(8),%fp0
+ fddivs %pc@(.+0x1238),%fp0
+ fddivw %d5,%fp0
+ fddivw %a4@,%fp0
+ fddivw %a3@+,%fp0
+ fddivw %a2@-,%fp0
fddivw %fp@(8),%fp0
+ fddivw %pc@(.+0x1238),%fp0
+ fddivd %a4@,%fp0
+ fddivd %a3@+,%fp0
+ fddivd %a2@-,%fp0
fddivd %fp@(8),%fp0
+ fddivd %pc@(.+0x1238),%fp0
+ fddivb %d5,%fp0
+ fddivb %a4@,%fp0
+ fddivb %a3@+,%fp0
+ fddivb %a2@-,%fp0
fddivb %fp@(8),%fp0
+ fddivb %pc@(.+0x1238),%fp0
faddd %fp0,%fp0
+ faddl %d5,%fp0
+ faddl %a4@,%fp0
+ faddl %a3@+,%fp0
+ faddl %a2@-,%fp0
faddl %fp@(8),%fp0
+ faddl %pc@(.+0x1238),%fp0
+ fadds %d5,%fp0
+ fadds %a4@,%fp0
+ fadds %a3@+,%fp0
+ fadds %a2@-,%fp0
fadds %fp@(8),%fp0
+ fadds %pc@(.+0x1238),%fp0
+ faddw %d5,%fp0
+ faddw %a4@,%fp0
+ faddw %a3@+,%fp0
+ faddw %a2@-,%fp0
faddw %fp@(8),%fp0
+ faddw %pc@(.+0x1238),%fp0
+ faddd %a4@,%fp0
+ faddd %a3@+,%fp0
+ faddd %a2@-,%fp0
faddd %fp@(8),%fp0
+ faddd %pc@(.+0x1238),%fp0
+ faddb %d5,%fp0
+ faddb %a4@,%fp0
+ faddb %a3@+,%fp0
+ faddb %a2@-,%fp0
faddb %fp@(8),%fp0
+ faddb %pc@(.+0x1238),%fp0
fsaddd %fp0,%fp0
+ fsaddl %d5,%fp0
+ fsaddl %a4@,%fp0
+ fsaddl %a3@+,%fp0
+ fsaddl %a2@-,%fp0
fsaddl %fp@(8),%fp0
+ fsaddl %pc@(.+0x1238),%fp0
+ fsadds %d5,%fp0
+ fsadds %a4@,%fp0
+ fsadds %a3@+,%fp0
+ fsadds %a2@-,%fp0
fsadds %fp@(8),%fp0
+ fsadds %pc@(.+0x1238),%fp0
+ fsaddw %d5,%fp0
+ fsaddw %a4@,%fp0
+ fsaddw %a3@+,%fp0
+ fsaddw %a2@-,%fp0
fsaddw %fp@(8),%fp0
+ fsaddw %pc@(.+0x1238),%fp0
+ fsaddd %a4@,%fp0
+ fsaddd %a3@+,%fp0
+ fsaddd %a2@-,%fp0
fsaddd %fp@(8),%fp0
+ fsaddd %pc@(.+0x1238),%fp0
+ fsaddb %d5,%fp0
+ fsaddb %a4@,%fp0
+ fsaddb %a3@+,%fp0
+ fsaddb %a2@-,%fp0
fsaddb %fp@(8),%fp0
+ fsaddb %pc@(.+0x1238),%fp0
fdaddd %fp0,%fp0
+ fdaddl %d5,%fp0
+ fdaddl %a4@,%fp0
+ fdaddl %a3@+,%fp0
+ fdaddl %a2@-,%fp0
fdaddl %fp@(8),%fp0
+ fdaddl %pc@(.+0x1238),%fp0
+ fdadds %d5,%fp0
+ fdadds %a4@,%fp0
+ fdadds %a3@+,%fp0
+ fdadds %a2@-,%fp0
fdadds %fp@(8),%fp0
+ fdadds %pc@(.+0x1238),%fp0
+ fdaddw %d5,%fp0
+ fdaddw %a4@,%fp0
+ fdaddw %a3@+,%fp0
+ fdaddw %a2@-,%fp0
fdaddw %fp@(8),%fp0
+ fdaddw %pc@(.+0x1238),%fp0
+ fdaddd %a4@,%fp0
+ fdaddd %a3@+,%fp0
+ fdaddd %a2@-,%fp0
fdaddd %fp@(8),%fp0
+ fdaddd %pc@(.+0x1238),%fp0
+ fdaddb %d5,%fp0
+ fdaddb %a4@,%fp0
+ fdaddb %a3@+,%fp0
+ fdaddb %a2@-,%fp0
fdaddb %fp@(8),%fp0
+ fdaddb %pc@(.+0x1238),%fp0
fmuld %fp0,%fp0
+ fmull %d5,%fp0
+ fmull %a4@,%fp0
+ fmull %a3@+,%fp0
+ fmull %a2@-,%fp0
fmull %fp@(8),%fp0
+ fmull %pc@(.+0x1238),%fp0
+ fmuls %d5,%fp0
+ fmuls %a4@,%fp0
+ fmuls %a3@+,%fp0
+ fmuls %a2@-,%fp0
fmuls %fp@(8),%fp0
+ fmuls %pc@(.+0x1238),%fp0
+ fmulw %d5,%fp0
+ fmulw %a4@,%fp0
+ fmulw %a3@+,%fp0
+ fmulw %a2@-,%fp0
fmulw %fp@(8),%fp0
+ fmulw %pc@(.+0x1238),%fp0
+ fmuld %a4@,%fp0
+ fmuld %a3@+,%fp0
+ fmuld %a2@-,%fp0
fmuld %fp@(8),%fp0
+ fmuld %pc@(.+0x1238),%fp0
+ fmulb %d5,%fp0
+ fmulb %a4@,%fp0
+ fmulb %a3@+,%fp0
+ fmulb %a2@-,%fp0
fmulb %fp@(8),%fp0
+ fmulb %pc@(.+0x1238),%fp0
fsmuld %fp0,%fp0
+ fsmull %d5,%fp0
+ fsmull %a4@,%fp0
+ fsmull %a3@+,%fp0
+ fsmull %a2@-,%fp0
fsmull %fp@(8),%fp0
+ fsmull %pc@(.+0x1238),%fp0
+ fsmuls %d5,%fp0
+ fsmuls %a4@,%fp0
+ fsmuls %a3@+,%fp0
+ fsmuls %a2@-,%fp0
fsmuls %fp@(8),%fp0
+ fsmuls %pc@(.+0x1238),%fp0
+ fsmulw %d5,%fp0
+ fsmulw %a4@,%fp0
+ fsmulw %a3@+,%fp0
+ fsmulw %a2@-,%fp0
fsmulw %fp@(8),%fp0
+ fsmulw %pc@(.+0x1238),%fp0
+ fsmuld %a4@,%fp0
+ fsmuld %a3@+,%fp0
+ fsmuld %a2@-,%fp0
fsmuld %fp@(8),%fp0
+ fsmuld %pc@(.+0x1238),%fp0
+ fsmulb %d5,%fp0
+ fsmulb %a4@,%fp0
+ fsmulb %a3@+,%fp0
+ fsmulb %a2@-,%fp0
fsmulb %fp@(8),%fp0
+ fsmulb %pc@(.+0x1238),%fp0
fdmuld %fp0,%fp0
+ fdmull %d5,%fp0
+ fdmull %a4@,%fp0
+ fdmull %a3@+,%fp0
+ fdmull %a2@-,%fp0
fdmull %fp@(8),%fp0
+ fdmull %pc@(.+0x1238),%fp0
+ fdmuls %d5,%fp0
+ fdmuls %a4@,%fp0
+ fdmuls %a3@+,%fp0
+ fdmuls %a2@-,%fp0
fdmuls %fp@(8),%fp0
+ fdmuls %pc@(.+0x1238),%fp0
+ fdmulw %d5,%fp0
+ fdmulw %a4@,%fp0
+ fdmulw %a3@+,%fp0
+ fdmulw %a2@-,%fp0
fdmulw %fp@(8),%fp0
+ fdmulw %pc@(.+0x1238),%fp0
+ fdmuld %a4@,%fp0
+ fdmuld %a3@+,%fp0
+ fdmuld %a2@-,%fp0
fdmuld %fp@(8),%fp0
+ fdmuld %pc@(.+0x1238),%fp0
+ fdmulb %d5,%fp0
+ fdmulb %a4@,%fp0
+ fdmulb %a3@+,%fp0
+ fdmulb %a2@-,%fp0
fdmulb %fp@(8),%fp0
+ fdmulb %pc@(.+0x1238),%fp0
fsubd %fp0,%fp0
+ fsubl %d5,%fp0
+ fsubl %a4@,%fp0
+ fsubl %a3@+,%fp0
+ fsubl %a2@-,%fp0
fsubl %fp@(8),%fp0
+ fsubl %pc@(.+0x1238),%fp0
+ fsubs %d5,%fp0
+ fsubs %a4@,%fp0
+ fsubs %a3@+,%fp0
+ fsubs %a2@-,%fp0
fsubs %fp@(8),%fp0
+ fsubs %pc@(.+0x1238),%fp0
+ fsubw %d5,%fp0
+ fsubw %a4@,%fp0
+ fsubw %a3@+,%fp0
+ fsubw %a2@-,%fp0
fsubw %fp@(8),%fp0
+ fsubw %pc@(.+0x1238),%fp0
+ fsubd %a4@,%fp0
+ fsubd %a3@+,%fp0
+ fsubd %a2@-,%fp0
fsubd %fp@(8),%fp0
+ fsubd %pc@(.+0x1238),%fp0
+ fsubb %d5,%fp0
+ fsubb %a4@,%fp0
+ fsubb %a3@+,%fp0
+ fsubb %a2@-,%fp0
fsubb %fp@(8),%fp0
+ fsubb %pc@(.+0x1238),%fp0
fssubd %fp0,%fp0
+ fssubl %d5,%fp0
+ fssubl %a4@,%fp0
+ fssubl %a3@+,%fp0
+ fssubl %a2@-,%fp0
fssubl %fp@(8),%fp0
+ fssubl %pc@(.+0x1238),%fp0
+ fssubs %d5,%fp0
+ fssubs %a4@,%fp0
+ fssubs %a3@+,%fp0
+ fssubs %a2@-,%fp0
fssubs %fp@(8),%fp0
+ fssubs %pc@(.+0x1238),%fp0
+ fssubw %d5,%fp0
+ fssubw %a4@,%fp0
+ fssubw %a3@+,%fp0
+ fssubw %a2@-,%fp0
fssubw %fp@(8),%fp0
+ fssubw %pc@(.+0x1238),%fp0
+ fssubd %a4@,%fp0
+ fssubd %a3@+,%fp0
+ fssubd %a2@-,%fp0
fssubd %fp@(8),%fp0
+ fssubd %pc@(.+0x1238),%fp0
+ fssubb %d5,%fp0
+ fssubb %a4@,%fp0
+ fssubb %a3@+,%fp0
+ fssubb %a2@-,%fp0
fssubb %fp@(8),%fp0
+ fssubb %pc@(.+0x1238),%fp0
fdsubd %fp0,%fp0
+ fdsubl %d5,%fp0
+ fdsubl %a4@,%fp0
+ fdsubl %a3@+,%fp0
+ fdsubl %a2@-,%fp0
fdsubl %fp@(8),%fp0
+ fdsubl %pc@(.+0x1238),%fp0
+ fdsubs %d5,%fp0
+ fdsubs %a4@,%fp0
+ fdsubs %a3@+,%fp0
+ fdsubs %a2@-,%fp0
fdsubs %fp@(8),%fp0
+ fdsubs %pc@(.+0x1238),%fp0
+ fdsubw %d5,%fp0
+ fdsubw %a4@,%fp0
+ fdsubw %a3@+,%fp0
+ fdsubw %a2@-,%fp0
fdsubw %fp@(8),%fp0
+ fdsubw %pc@(.+0x1238),%fp0
+ fdsubd %a4@,%fp0
+ fdsubd %a3@+,%fp0
+ fdsubd %a2@-,%fp0
fdsubd %fp@(8),%fp0
+ fdsubd %pc@(.+0x1238),%fp0
+ fdsubb %d5,%fp0
+ fdsubb %a4@,%fp0
+ fdsubb %a3@+,%fp0
+ fdsubb %a2@-,%fp0
fdsubb %fp@(8),%fp0
+ fdsubb %pc@(.+0x1238),%fp0
fmoved %fp0,%fp0
+ fmovel %d5,%fp0
+ fmovel %a4@,%fp0
+ fmovel %a3@+,%fp0
+ fmovel %a2@-,%fp0
fmovel %fp@(8),%fp0
+ fmovel %pc@(.+0x1238),%fp0
+ fmoves %d5,%fp0
+ fmoves %a4@,%fp0
+ fmoves %a3@+,%fp0
+ fmoves %a2@-,%fp0
fmoves %fp@(8),%fp0
+ fmoves %pc@(.+0x1238),%fp0
+ fmovew %d5,%fp0
+ fmovew %a4@,%fp0
+ fmovew %a3@+,%fp0
+ fmovew %a2@-,%fp0
fmovew %fp@(8),%fp0
+ fmovew %pc@(.+0x1238),%fp0
+ fmoved %a4@,%fp0
+ fmoved %a3@+,%fp0
+ fmoved %a2@-,%fp0
fmoved %fp@(8),%fp0
+ fmoved %pc@(.+0x1238),%fp0
+ fmoveb %d5,%fp0
+ fmoveb %a4@,%fp0
+ fmoveb %a3@+,%fp0
+ fmoveb %a2@-,%fp0
fmoveb %fp@(8),%fp0
+ fmoveb %pc@(.+0x1238),%fp0
fsmoved %fp0,%fp0
+ fsmovel %d5,%fp0
+ fsmovel %a4@,%fp0
+ fsmovel %a3@+,%fp0
+ fsmovel %a2@-,%fp0
fsmovel %fp@(8),%fp0
+ fsmovel %pc@(.+0x1238),%fp0
+ fsmoves %d5,%fp0
+ fsmoves %a4@,%fp0
+ fsmoves %a3@+,%fp0
+ fsmoves %a2@-,%fp0
fsmoves %fp@(8),%fp0
+ fsmoves %pc@(.+0x1238),%fp0
+ fsmovew %d5,%fp0
+ fsmovew %a4@,%fp0
+ fsmovew %a3@+,%fp0
+ fsmovew %a2@-,%fp0
fsmovew %fp@(8),%fp0
+ fsmovew %pc@(.+0x1238),%fp0
+ fsmoved %a4@,%fp0
+ fsmoved %a3@+,%fp0
+ fsmoved %a2@-,%fp0
fsmoved %fp@(8),%fp0
+ fsmoved %pc@(.+0x1238),%fp0
+ fsmoveb %d5,%fp0
+ fsmoveb %a4@,%fp0
+ fsmoveb %a3@+,%fp0
+ fsmoveb %a2@-,%fp0
fsmoveb %fp@(8),%fp0
+ fsmoveb %pc@(.+0x1238),%fp0
fdmoved %fp0,%fp0
+ fdmovel %d5,%fp0
+ fdmovel %a4@,%fp0
+ fdmovel %a3@+,%fp0
+ fdmovel %a2@-,%fp0
fdmovel %fp@(8),%fp0
+ fdmovel %pc@(.+0x1238),%fp0
+ fdmoves %d5,%fp0
+ fdmoves %a4@,%fp0
+ fdmoves %a3@+,%fp0
+ fdmoves %a2@-,%fp0
fdmoves %fp@(8),%fp0
+ fdmoves %pc@(.+0x1238),%fp0
+ fdmovew %d5,%fp0
+ fdmovew %a4@,%fp0
+ fdmovew %a3@+,%fp0
+ fdmovew %a2@-,%fp0
fdmovew %fp@(8),%fp0
+ fdmovew %pc@(.+0x1238),%fp0
+ fdmoved %a4@,%fp0
+ fdmoved %a3@+,%fp0
+ fdmoved %a2@-,%fp0
fdmoved %fp@(8),%fp0
+ fdmoved %pc@(.+0x1238),%fp0
+ fdmoveb %d5,%fp0
+ fdmoveb %a4@,%fp0
+ fdmoveb %a3@+,%fp0
+ fdmoveb %a2@-,%fp0
fdmoveb %fp@(8),%fp0
+ fdmoveb %pc@(.+0x1238),%fp0
fintd %fp0,%fp0
+ fintl %d5,%fp0
+ fintl %a4@,%fp0
+ fintl %a3@+,%fp0
+ fintl %a2@-,%fp0
fintl %fp@(8),%fp0
+ fintl %pc@(.+0x1238),%fp0
+ fints %d5,%fp0
+ fints %a4@,%fp0
+ fints %a3@+,%fp0
+ fints %a2@-,%fp0
fints %fp@(8),%fp0
+ fints %pc@(.+0x1238),%fp0
+ fintw %d5,%fp0
+ fintw %a4@,%fp0
+ fintw %a3@+,%fp0
+ fintw %a2@-,%fp0
fintw %fp@(8),%fp0
+ fintw %pc@(.+0x1238),%fp0
+ fintd %a4@,%fp0
+ fintd %a3@+,%fp0
+ fintd %a2@-,%fp0
fintd %fp@(8),%fp0
+ fintd %pc@(.+0x1238),%fp0
+ fintb %d5,%fp0
+ fintb %a4@,%fp0
+ fintb %a3@+,%fp0
+ fintb %a2@-,%fp0
fintb %fp@(8),%fp0
+ fintb %pc@(.+0x1238),%fp0
fintrzd %fp0,%fp0
+ fintrzl %d5,%fp0
+ fintrzl %a4@,%fp0
+ fintrzl %a3@+,%fp0
+ fintrzl %a2@-,%fp0
fintrzl %fp@(8),%fp0
+ fintrzl %pc@(.+0x1238),%fp0
+ fintrzs %d5,%fp0
+ fintrzs %a4@,%fp0
+ fintrzs %a3@+,%fp0
+ fintrzs %a2@-,%fp0
fintrzs %fp@(8),%fp0
+ fintrzs %pc@(.+0x1238),%fp0
+ fintrzw %d5,%fp0
+ fintrzw %a4@,%fp0
+ fintrzw %a3@+,%fp0
+ fintrzw %a2@-,%fp0
fintrzw %fp@(8),%fp0
+ fintrzw %pc@(.+0x1238),%fp0
+ fintrzd %a4@,%fp0
+ fintrzd %a3@+,%fp0
+ fintrzd %a2@-,%fp0
fintrzd %fp@(8),%fp0
+ fintrzd %pc@(.+0x1238),%fp0
+ fintrzb %d5,%fp0
+ fintrzb %a4@,%fp0
+ fintrzb %a3@+,%fp0
+ fintrzb %a2@-,%fp0
fintrzb %fp@(8),%fp0
+ fintrzb %pc@(.+0x1238),%fp0
fcmpd %fp0,%fp0
+ fcmpl %d5,%fp0
+ fcmpl %a4@,%fp0
+ fcmpl %a3@+,%fp0
+ fcmpl %a2@-,%fp0
fcmpl %fp@(8),%fp0
+ fcmpl %pc@(.+0x1238),%fp0
+ fcmps %d5,%fp0
+ fcmps %a4@,%fp0
+ fcmps %a3@+,%fp0
+ fcmps %a2@-,%fp0
fcmps %fp@(8),%fp0
+ fcmps %pc@(.+0x1238),%fp0
+ fcmpw %d5,%fp0
+ fcmpw %a4@,%fp0
+ fcmpw %a3@+,%fp0
+ fcmpw %a2@-,%fp0
fcmpw %fp@(8),%fp0
+ fcmpw %pc@(.+0x1238),%fp0
+ fcmpd %a4@,%fp0
+ fcmpd %a3@+,%fp0
+ fcmpd %a2@-,%fp0
fcmpd %fp@(8),%fp0
+ fcmpd %pc@(.+0x1238),%fp0
+ fcmpb %d5,%fp0
+ fcmpb %a4@,%fp0
+ fcmpb %a3@+,%fp0
+ fcmpb %a2@-,%fp0
fcmpb %fp@(8),%fp0
+ fcmpb %pc@(.+0x1238),%fp0
fmovemd %fp0-%fp3/%fp6,%fp@(8)
fmovemd %fp@(8),%fp5/%fp4/%fp2
fmovemd #0x27,%fp@(8)
diff --git a/gas/testsuite/gas/m68k/mcf-trap.d b/gas/testsuite/gas/m68k/mcf-trap.d
new file mode 100644
index 000000000000..63d18fd7bfd4
--- /dev/null
+++ b/gas/testsuite/gas/m68k/mcf-trap.d
@@ -0,0 +1,15 @@
+#name: mcf-trap
+#objdump: -d
+#as: -m5208
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <.text>:
+[ 0-9a-f]+: 51fc t[rap]*f
+[ 0-9a-f]+: 51fa 1234 t[rap]*fw #4660
+[ 0-9a-f]+: 51fb 1234 5678 t[rap]*fl #305419896
+[ 0-9a-f]+: 51fc t[rap]*f
+[ 0-9a-f]+: 51fa 1234 t[rap]*fw #4660
+[ 0-9a-f]+: 51fb 1234 5678 t[rap]*fl #305419896
diff --git a/gas/testsuite/gas/m68k/mcf-trap.s b/gas/testsuite/gas/m68k/mcf-trap.s
new file mode 100644
index 000000000000..a5d6acc7db86
--- /dev/null
+++ b/gas/testsuite/gas/m68k/mcf-trap.s
@@ -0,0 +1,9 @@
+ # the m68k compatible names
+ trapf
+ trapf.w #0x1234
+ trapf.l #0x12345678
+
+ # the coldfire specific names
+ tpf
+ tpf.w #0x1234
+ tpf.l #0x12345678
diff --git a/gas/testsuite/gas/m68k/mcf-wdebug.d b/gas/testsuite/gas/m68k/mcf-wdebug.d
new file mode 100644
index 000000000000..257d1e386031
--- /dev/null
+++ b/gas/testsuite/gas/m68k/mcf-wdebug.d
@@ -0,0 +1,11 @@
+#name: mcf-wdebug
+#objdump: -d
+#as: -m5208
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <foo>:
+ 0: fbd0 0003 wdebugl %a0@
+ 4: fbd0 0003 wdebugl %a0@
diff --git a/gas/testsuite/gas/m68k/mcf-wdebug.s b/gas/testsuite/gas/m68k/mcf-wdebug.s
new file mode 100644
index 000000000000..36b9f27df9d9
--- /dev/null
+++ b/gas/testsuite/gas/m68k/mcf-wdebug.s
@@ -0,0 +1,6 @@
+# Check that gas recognizes both wdebug and wdebug.l.
+ .text
+ .globl foo
+foo:
+ wdebug (%a0)
+ wdebug.l (%a0)
diff --git a/gas/testsuite/gas/m68k/p3041.d b/gas/testsuite/gas/m68k/p3041.d
new file mode 100644
index 000000000000..b4a41c4a01ee
--- /dev/null
+++ b/gas/testsuite/gas/m68k/p3041.d
@@ -0,0 +1,15 @@
+#name: PR 3041
+#objdump: -dr
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <.*>:
+ 0: 4ef9 0000 0002 [ ]+jmp 2 <mylabel-0x6>
+ 2: .* mylabel
+ 6: 4e71 [ ]+nop
+
+0+8 <mylabel>:
+ 8: 4e71 [ ]+nop
+ a: 4e71 [ ]+nop
diff --git a/gas/testsuite/gas/m68k/p3041.s b/gas/testsuite/gas/m68k/p3041.s
new file mode 100644
index 000000000000..96a8910b104c
--- /dev/null
+++ b/gas/testsuite/gas/m68k/p3041.s
@@ -0,0 +1,6 @@
+ jmp mylabel+2
+ nop
+ .weak mylabel
+mylabel:
+ nop
+ nop
diff --git a/gas/testsuite/gas/macros/macros.exp b/gas/testsuite/gas/macros/macros.exp
index e175ad9a53ec..62392ec3b48c 100644
--- a/gas/testsuite/gas/macros/macros.exp
+++ b/gas/testsuite/gas/macros/macros.exp
@@ -1,18 +1,5 @@
# Run some tests of gas macros.
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "macros $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
if { ![istarget hppa*-*-*] || [istarget *-*-linux*] } {
run_dump_test test1
}
@@ -69,6 +56,7 @@ run_dump_test app3
run_dump_test app4
run_list_test badarg ""
+
case $target_triplet in {
{ *c54x*-*-* } { }
{ *c4x*-*-* } { }
diff --git a/gas/testsuite/gas/maxq10/maxq10.exp b/gas/testsuite/gas/maxq10/maxq10.exp
index 482bd4ca2c23..8887b53494eb 100644
--- a/gas/testsuite/gas/maxq10/maxq10.exp
+++ b/gas/testsuite/gas/maxq10/maxq10.exp
@@ -1,19 +1,6 @@
#
# MAXQ10 tests
#
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "maxq10 $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
proc gas_64_check { } {
global NM
global NMFLAGS
diff --git a/gas/testsuite/gas/maxq20/maxq20.exp b/gas/testsuite/gas/maxq20/maxq20.exp
index d2857f617b96..6d952e9e3ed5 100644
--- a/gas/testsuite/gas/maxq20/maxq20.exp
+++ b/gas/testsuite/gas/maxq20/maxq20.exp
@@ -1,19 +1,6 @@
#
# MAXQ20 tests
#
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "maxq20 $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
proc gas_64_check { } {
global NM
global NMFLAGS
diff --git a/gas/testsuite/gas/mcore/allinsn.d b/gas/testsuite/gas/mcore/allinsn.d
index 1565ea5d5fe3..a53805bae2f5 100644
--- a/gas/testsuite/gas/mcore/allinsn.d
+++ b/gas/testsuite/gas/mcore/allinsn.d
@@ -40,7 +40,7 @@ Disassembly of section \.text:
14: 300f bclri r15, 0
0+016 <bf>:
- 16: eff4 bf 0x0
+ 16: eff4 bf 0x.*0
0+018 <bgeni>:
18: 3270 bgeni r0, 7
@@ -64,7 +64,7 @@ Disassembly of section \.text:
24: 2df3 bmaski r3, 31
0+026 <br>:
- 26: f7ff br 0x26
+ 26: f7ff br 0x.*26
0+028 <brev>:
28: 00f4 brev r4
@@ -73,10 +73,10 @@ Disassembly of section \.text:
2a: 35e5 bseti r5, 30
0+02c <bsr>:
- 2c: ffe9 bsr 0x0
+ 2c: ffe9 bsr 0x.*0.*
0+02e <bt>:
- 2e: e7e8 bt 0x0
+ 2e: e7e8 bt 0x.*0
0+030 <btsti>:
30: 37b6 btsti r6, 27
@@ -148,7 +148,7 @@ Disassembly of section \.text:
5c: 150f ixw r15, r0
0+05e <jbf>:
- 5e: efd0 bf 0x0
+ 5e: efd0 bf 0x.*0
0+060 <jbr>:
60: f00e br 0x7e
@@ -202,10 +202,10 @@ Disassembly of section \.text:
80: 048e loopt r8, 0x64
0+082 <LRW>:
- 82: 7903 lrw r9, (0x86|0x0 // from address pool at 0x90)
+ 82: 7901 lrw r9, 0x3C0C1BBA
0+084 <lrw>:
- 84: 7904 lrw r9, 0x4321
+ 84: 7903 lrw r9, 0x4321
0+086 <foolit>:
86: 1234 mov r4, r3
@@ -218,184 +218,181 @@ Disassembly of section \.text:
8c: 0000 bkpt
8c: ADDR32 \.text
8e: 0000 bkpt
- 90: (0000 bkpt|0086 dect r6)
- 90: ADDR32 \.text(\+0x86)?
+ 90: 4321 \.short 0x4321
92: 0000 bkpt
- 94: 4321 \.short 0x4321
- 96: 0000 bkpt
-0+098 <lsli>:
- 98: 3dfd lsli r13, 31
+0+094 <lsli>:
+ 94: 3dfd lsli r13, 31
-0+09a <lsr>:
- 9a: 0bfe lsr r14, r15
+0+096 <lsr>:
+ 96: 0bfe lsr r14, r15
-0+09c <lsrc>:
- 9c: 3e00 lsrc r0
+0+098 <lsrc>:
+ 98: 3e00 lsrc r0
-0+09e <lsri>:
- 9e: 3e11 lsri r1, 1
+0+09a <lsri>:
+ 9a: 3e11 lsri r1, 1
-0+0a0 <mclri>:
- a0: 3064 bclri r4, 6
+0+09c <mclri>:
+ 9c: 3064 bclri r4, 6
-0+0a2 <mfcr>:
- a2: 1002 mfcr r2, psr
+0+09e <mfcr>:
+ 9e: 1002 mfcr r2, psr
-0+0a4 <mov>:
- a4: 1243 mov r3, r4
+0+0a0 <mov>:
+ a0: 1243 mov r3, r4
-0+0a6 <movf>:
- a6: 0a65 movf r5, r6
+0+0a2 <movf>:
+ a2: 0a65 movf r5, r6
-0+0a8 <movi>:
- a8: 67f7 movi r7, 127
+0+0a4 <movi>:
+ a4: 67f7 movi r7, 127
-0+0aa <movt>:
- aa: 0298 movt r8, r9
+0+0a6 <movt>:
+ a6: 0298 movt r8, r9
-0+0ac <mtcr>:
- ac: 180a mtcr r10, psr
+0+0a8 <mtcr>:
+ a8: 180a mtcr r10, psr
-0+0ae <mult>:
- ae: 03cb mult r11, r12
+0+0aa <mult>:
+ aa: 03cb mult r11, r12
-0+0b0 <mvc>:
- b0: 002d mvc r13
+0+0ac <mvc>:
+ ac: 002d mvc r13
-0+0b2 <mvcv>:
- b2: 003e mvcv r14
+0+0ae <mvcv>:
+ ae: 003e mvcv r14
-0+0b4 <neg>:
- b4: 2802 rsubi r2, 0
+0+0b0 <neg>:
+ b0: 2802 rsubi r2, 0
-0+0b6 <not>:
- b6: 01ff not r15
+0+0b2 <not>:
+ b2: 01ff not r15
-0+0b8 <or>:
- b8: 1e10 or r0, r1
+0+0b4 <or>:
+ b4: 1e10 or r0, r1
-0+0ba <rfi>:
- ba: 0003 rfi
+0+0b6 <rfi>:
+ b6: 0003 rfi
-0+0bc <rolc>:
- bc: 0666 addc r6, r6
+0+0b8 <rolc>:
+ b8: 0666 addc r6, r6
-0+0be <rori>:
- be: 39a9 rotli r9, 26
+0+0ba <rori>:
+ ba: 39a9 rotli r9, 26
-0+0c0 <rotlc>:
- c0: 0666 addc r6, r6
+0+0bc <rotlc>:
+ bc: 0666 addc r6, r6
-0+0c2 <rotli>:
- c2: 38a2 rotli r2, 10
+0+0be <rotli>:
+ be: 38a2 rotli r2, 10
-0+0c4 <rotri>:
- c4: 39a9 rotli r9, 26
+0+0c0 <rotri>:
+ c0: 39a9 rotli r9, 26
-0+0c6 <rsub>:
- c6: 1443 rsub r3, r4
+0+0c2 <rsub>:
+ c2: 1443 rsub r3, r4
-0+0c8 <rsubi>:
- c8: 2805 rsubi r5, 0
+0+0c4 <rsubi>:
+ c4: 2805 rsubi r5, 0
-0+0ca <rte>:
- ca: 0002 rte
+0+0c6 <rte>:
+ c6: 0002 rte
-0+0cc <rts>:
- cc: 00cf jmp r15
+0+0c8 <rts>:
+ c8: 00cf jmp r15
-0+0ce <setc>:
- ce: 0c00 cmphs r0, r0
+0+0ca <setc>:
+ ca: 0c00 cmphs r0, r0
-0+0d0 <sextb>:
- d0: 0156 sextb r6
+0+0cc <sextb>:
+ cc: 0156 sextb r6
-0+0d2 <sexth>:
- d2: 0177 sexth r7
+0+0ce <sexth>:
+ ce: 0177 sexth r7
-0+0d4 <st\.b>:
- d4: b809 stb r8, \(r9, 0\)
+0+0d0 <st\.b>:
+ d0: b809 stb r8, \(r9, 0\)
-0+0d6 <st\.h>:
- d6: da1b sth r10, \(r11, 2\)
+0+0d2 <st\.h>:
+ d2: da1b sth r10, \(r11, 2\)
-0+0d8 <st\.w>:
- d8: 9c1d st r12, \(r13, 4\)
+0+0d4 <st\.w>:
+ d4: 9c1d st r12, \(r13, 4\)
-0+0da <stb>:
- da: beff stb r14, \(r15, 15\)
+0+0d6 <stb>:
+ d6: beff stb r14, \(r15, 15\)
-0+0dc <sth>:
- dc: d0f1 sth r0, \(r1, 30\)
+0+0d8 <sth>:
+ d8: d0f1 sth r0, \(r1, 30\)
-0+0de <stw>:
- de: 92f3 st r2, \(r3, 60\)
+0+0da <stw>:
+ da: 92f3 st r2, \(r3, 60\)
-0+0e0 <st>:
- e0: 9405 st r4, \(r5, 0\)
+0+0dc <st>:
+ dc: 9405 st r4, \(r5, 0\)
-0+0e2 <stm>:
- e2: 007e stm r14-r15, \(r0\)
+0+0de <stm>:
+ de: 007e stm r14-r15, \(r0\)
-0+0e4 <stop>:
- e4: 0004 stop
+0+0e0 <stop>:
+ e0: 0004 stop
-0+0e6 <stq>:
- e6: 0051 stq r4-r7, \(r1\)
+0+0e2 <stq>:
+ e2: 0051 stq r4-r7, \(r1\)
-0+0e8 <subc>:
- e8: 07d7 subc r7, r13
+0+0e4 <subc>:
+ e4: 07d7 subc r7, r13
-0+0ea <subi>:
- ea: 25fe subi r14, 32
+0+0e6 <subi>:
+ e6: 25fe subi r14, 32
-0+0ec <subu>:
- ec: 0539 subu r9, r3
+0+0e8 <subu>:
+ e8: 0539 subu r9, r3
-0+0ee <sync>:
- ee: 0001 sync
+0+0ea <sync>:
+ ea: 0001 sync
-0+0f0 <tstlt>:
- f0: 37f5 btsti r5, 31
+0+0ec <tstlt>:
+ ec: 37f5 btsti r5, 31
-0+0f2 <tstne>:
- f2: 2a07 cmpnei r7, 0
+0+0ee <tstne>:
+ ee: 2a07 cmpnei r7, 0
-0+0f4 <trap>:
- f4: 000a trap 2
+0+0f0 <trap>:
+ f0: 000a trap 2
-0+0f6 <tst>:
- f6: 0eee tst r14, r14
+0+0f2 <tst>:
+ f2: 0eee tst r14, r14
-0+0f8 <tstnbz>:
- f8: 0192 tstnbz r2
+0+0f4 <tstnbz>:
+ f4: 0192 tstnbz r2
-0+0fa <wait>:
- fa: 0005 wait
+0+0f6 <wait>:
+ f6: 0005 wait
-0+0fc <xor>:
- fc: 170f xor r15, r0
+0+0f8 <xor>:
+ f8: 170f xor r15, r0
-0+0fe <xsr>:
- fe: 380b xsr r11
+0+0fa <xsr>:
+ fa: 380b xsr r11
-0+0100 <xtrb0>:
- 100: 0131 xtrb0 r1, r1
+0+0fc <xtrb0>:
+ fc: 0131 xtrb0 r1, r1
-0+0102 <xtrb1>:
- 102: 0122 xtrb1 r1, r2
+0+0fe <xtrb1>:
+ fe: 0122 xtrb1 r1, r2
-0+0104 <xtrb2>:
- 104: 0110 xtrb2 r1, r0
+0+0100 <xtrb2>:
+ 100: 0110 xtrb2 r1, r0
-0+0106 <xtrb3>:
- 106: 010d xtrb3 r1, r13
+0+0102 <xtrb3>:
+ 102: 010d xtrb3 r1, r13
-0+0108 <zextb>:
- 108: 0148 zextb r8
+0+0104 <zextb>:
+ 104: 0148 zextb r8
-0+010a <zexth>:
- 10a: 0164 zexth r4
- 10c: 0f00 cmpne r0, r0
- 10e: 0f00 cmpne r0, r0
+0+0106 <zexth>:
+ 106: 0164 zexth r4
+ 108: 0f00 cmpne r0, r0
+ 10a: 0f00 cmpne r0, r0
diff --git a/gas/testsuite/gas/mcore/allinsn.s b/gas/testsuite/gas/mcore/allinsn.s
index 84068404e74a..e9196e750754 100644
--- a/gas/testsuite/gas/mcore/allinsn.s
+++ b/gas/testsuite/gas/mcore/allinsn.s
@@ -13,11 +13,11 @@ footext:
test addc "r1,r2" // A double forward slash starts a line comment
test addi "r3, 1" # So does a hash
test addu "r4, r5" // White space between operands should be ignored
- test and "r6,r7" ; test andi "r8,#2" // A semicolon seperates statements
+ test and "r6,r7" ; test andi "r8,2" // A semicolon seperates statements
test andn "r9, r10"
test asr "r11, R12" // Uppercase R is allowed as a register prefix
test asrc "r13"
- test asri "r14,#0x1f"
+ test asri "r14,0x1f"
test bclri "r15,0"
test bf footext
test bgeni "sp, 7" // r0 can also be refered to as 'sp'
@@ -25,7 +25,7 @@ footext:
test BGENi "r0, 31" // mnemonics should not be allowed, but we relax this...
test bgenr "r1, r2"
test bkpt
- test bmaski "r3,#8"
+ test bmaski "r3,8"
test BMASKI "r3,0x1f"
test br . // Dot means the current address
test brev r4
@@ -64,9 +64,9 @@ footext:
test jsr r2
test jsri footext
test ld.b "r3,(r4,0)"
- test ld.h "r5 , ( r6, #2)"
+ test ld.h "r5 , ( r6, 2)"
test ld.w "r7, (r8, 0x4)"
- test ldb "r9,(r10,#0xf)"
+ test ldb "r9,(r10,0xf)"
test ldh "r11, (r12, 30)"
test ld "r13, (r14, 20)"
test ldw "r13, (r14, 60)"
@@ -104,7 +104,7 @@ foolit:
test rolc "r6, 1"
test rori "r9, 6"
test rotlc "r6, 1"
- test rotli "r2, #10"
+ test rotli "r2, 10"
test rotri "r9, 6"
test rsub "r3, r4"
test rsubi "r5, 0x0"
diff --git a/gas/testsuite/gas/mep/allinsn.d b/gas/testsuite/gas/mep/allinsn.d
new file mode 100644
index 000000000000..3a1f62c30609
--- /dev/null
+++ b/gas/testsuite/gas/mep/allinsn.d
@@ -0,0 +1,1345 @@
+#as:
+#objdump: -dr
+#name: allinsn
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <sb>:
+ 0: 07 88 sb \$7,\(\$8\)
+ 2: 05 98 sb \$5,\(\$9\)
+ 4: 07 e8 sb \$7,\(\$gp\)
+ 6: 0e 88 sb \$gp,\(\$8\)
+ 8: 0f e8 sb \$sp,\(\$gp\)
+
+0000000a <sh>:
+ a: 03 89 sh \$3,\(\$8\)
+ c: 0c 19 sh \$12,\(\$1\)
+ e: 0d 29 sh \$tp,\(\$2\)
+ 10: 02 89 sh \$2,\(\$8\)
+ 12: 0c a9 sh \$12,\(\$10\)
+
+00000014 <sw>:
+ 14: 0b 0a sw \$11,\(\$0\)
+ 16: 03 7a sw \$3,\(\$7\)
+ 18: 0d ea sw \$tp,\(\$gp\)
+ 1a: 08 9a sw \$8,\(\$9\)
+ 1c: 0e 8a sw \$gp,\(\$8\)
+
+0000001e <lb>:
+ 1e: 0c bc lb \$12,\(\$11\)
+ 20: 09 2c lb \$9,\(\$2\)
+ 22: 08 bc lb \$8,\(\$11\)
+ 24: 0e 2c lb \$gp,\(\$2\)
+ 26: 02 cc lb \$2,\(\$12\)
+
+00000028 <lh>:
+ 28: 0f 8d lh \$sp,\(\$8\)
+ 2a: 03 ad lh \$3,\(\$10\)
+ 2c: 09 fd lh \$9,\(\$sp\)
+ 2e: 06 fd lh \$6,\(\$sp\)
+ 30: 0f bd lh \$sp,\(\$11\)
+
+00000032 <lw>:
+ 32: 0c ae lw \$12,\(\$10\)
+ 34: 09 de lw \$9,\(\$tp\)
+ 36: 0c ee lw \$12,\(\$gp\)
+ 38: 0c be lw \$12,\(\$11\)
+ 3a: 0d ae lw \$tp,\(\$10\)
+
+0000003c <lbu>:
+ 3c: 0e eb lbu \$gp,\(\$gp\)
+ 3e: 0c 8b lbu \$12,\(\$8\)
+ 40: 0e 1b lbu \$gp,\(\$1\)
+ 42: 08 cb lbu \$8,\(\$12\)
+ 44: 0c 1b lbu \$12,\(\$1\)
+
+00000046 <lhu>:
+ 46: 0f 4f lhu \$sp,\(\$4\)
+ 48: 0e 4f lhu \$gp,\(\$4\)
+ 4a: 05 4f lhu \$5,\(\$4\)
+ 4c: 0f df lhu \$sp,\(\$tp\)
+ 4e: 04 ff lhu \$4,\(\$sp\)
+
+00000050 <sw_sp>:
+ 50: c9 8a 00 03 sw \$9,3\(\$8\)
+ 54: ca 5a 00 04 sw \$10,4\(\$5\)
+ 58: c0 ea 00 03 sw \$0,3\(\$gp\)
+ 5c: c0 8a 00 02 sw \$0,2\(\$8\)
+ 60: cf 8a 00 01 sw \$sp,1\(\$8\)
+
+00000064 <lw_sp>:
+ 64: cd 5e 00 01 lw \$tp,1\(\$5\)
+ 68: cf 0e 00 01 lw \$sp,1\(\$0\)
+ 6c: c0 ce 00 04 lw \$0,4\(\$12\)
+ 70: cb de 00 01 lw \$11,1\(\$tp\)
+ 74: c9 4e 00 03 lw \$9,3\(\$4\)
+
+00000078 <sb_tp>:
+ 78: c5 18 00 01 sb \$5,1\(\$1\)
+ 7c: ca 98 00 01 sb \$10,1\(\$9\)
+ 80: c5 38 00 03 sb \$5,3\(\$3\)
+ 84: c5 38 00 01 sb \$5,1\(\$3\)
+ 88: ca 48 00 04 sb \$10,4\(\$4\)
+
+0000008c <sh_tp>:
+ 8c: c3 09 00 01 sh \$3,1\(\$0\)
+ 90: cd 99 00 01 sh \$tp,1\(\$9\)
+ 94: c9 a9 00 04 sh \$9,4\(\$10\)
+ 98: cf e9 00 03 sh \$sp,3\(\$gp\)
+ 9c: ce 99 00 04 sh \$gp,4\(\$9\)
+
+000000a0 <sw_tp>:
+ a0: c6 da 00 02 sw \$6,2\(\$tp\)
+ a4: c6 fa 00 01 sw \$6,1\(\$sp\)
+ a8: c2 3a 00 02 sw \$2,2\(\$3\)
+ ac: c6 ca 00 02 sw \$6,2\(\$12\)
+ b0: c3 ba 00 01 sw \$3,1\(\$11\)
+
+000000b4 <lb_tp>:
+ b4: cd bc 00 04 lb \$tp,4\(\$11\)
+ b8: cd 8c 00 04 lb \$tp,4\(\$8\)
+ bc: c5 5c 00 04 lb \$5,4\(\$5\)
+ c0: cf ec 00 02 lb \$sp,2\(\$gp\)
+ c4: c3 3c 00 02 lb \$3,2\(\$3\)
+
+000000c8 <lh_tp>:
+ c8: c7 8d 00 02 lh \$7,2\(\$8\)
+ cc: c4 8d 00 03 lh \$4,3\(\$8\)
+ d0: ce fd 00 01 lh \$gp,1\(\$sp\)
+ d4: c9 0d 00 01 lh \$9,1\(\$0\)
+ d8: cd 0d 00 02 lh \$tp,2\(\$0\)
+
+000000dc <lw_tp>:
+ dc: 48 07 lw \$8,0x4\(\$sp\)
+ de: cb 9e 00 04 lw \$11,4\(\$9\)
+ e2: ce 2e 00 01 lw \$gp,1\(\$2\)
+ e6: c9 ee 00 02 lw \$9,2\(\$gp\)
+ ea: c8 ce 00 01 lw \$8,1\(\$12\)
+
+000000ee <lbu_tp>:
+ ee: cc 9b 00 01 lbu \$12,1\(\$9\)
+ f2: cb 9b 00 01 lbu \$11,1\(\$9\)
+ f6: ce 8b 00 03 lbu \$gp,3\(\$8\)
+ fa: c0 fb 00 02 lbu \$0,2\(\$sp\)
+ fe: cd bb 00 01 lbu \$tp,1\(\$11\)
+
+00000102 <lhu_tp>:
+ 102: ce af 00 02 lhu \$gp,2\(\$10\)
+ 106: cb 8f 00 01 lhu \$11,1\(\$8\)
+ 10a: c1 0f 00 01 lhu \$1,1\(\$0\)
+ 10e: c7 ff 00 02 lhu \$7,2\(\$sp\)
+ 112: 8b 83 lhu \$3,0x2\(\$tp\)
+
+00000114 <sb16>:
+ 114: c7 b8 ff ff sb \$7,-1\(\$11\)
+ 118: cd e8 00 01 sb \$tp,1\(\$gp\)
+ 11c: c3 e8 00 01 sb \$3,1\(\$gp\)
+ 120: ce 68 00 02 sb \$gp,2\(\$6\)
+ 124: ce 78 00 01 sb \$gp,1\(\$7\)
+
+00000128 <sh16>:
+ 128: cc 49 ff ff sh \$12,-1\(\$4\)
+ 12c: cf 19 00 01 sh \$sp,1\(\$1\)
+ 130: c2 c9 ff fe sh \$2,-2\(\$12\)
+ 134: c9 b9 00 02 sh \$9,2\(\$11\)
+ 138: c9 c9 ff fe sh \$9,-2\(\$12\)
+
+0000013c <sw16>:
+ 13c: cb ea ff ff sw \$11,-1\(\$gp\)
+ 140: 44 06 sw \$4,0x4\(\$sp\)
+ 142: c2 3a ff fe sw \$2,-2\(\$3\)
+ 146: c6 2a ff ff sw \$6,-1\(\$2\)
+ 14a: c8 da ff fe sw \$8,-2\(\$tp\)
+
+0000014e <lb16>:
+ 14e: ca 2c ff fe lb \$10,-2\(\$2\)
+ 152: c3 bc ff fe lb \$3,-2\(\$11\)
+ 156: cc 5c 00 01 lb \$12,1\(\$5\)
+ 15a: c5 5c 00 01 lb \$5,1\(\$5\)
+ 15e: cb dc 00 02 lb \$11,2\(\$tp\)
+
+00000162 <lh16>:
+ 162: cf bd ff ff lh \$sp,-1\(\$11\)
+ 166: cd bd ff fe lh \$tp,-2\(\$11\)
+ 16a: c2 ad 00 01 lh \$2,1\(\$10\)
+ 16e: c8 7d ff ff lh \$8,-1\(\$7\)
+ 172: ce bd ff ff lh \$gp,-1\(\$11\)
+
+00000176 <lw16>:
+ 176: c0 5e ff ff lw \$0,-1\(\$5\)
+ 17a: cc 7e ff fe lw \$12,-2\(\$7\)
+ 17e: c1 3e ff fe lw \$1,-2\(\$3\)
+ 182: c1 7e 00 02 lw \$1,2\(\$7\)
+ 186: c4 8e 00 01 lw \$4,1\(\$8\)
+
+0000018a <lbu16>:
+ 18a: cc 4b ff ff lbu \$12,-1\(\$4\)
+ 18e: ce bb 00 01 lbu \$gp,1\(\$11\)
+ 192: c1 db ff ff lbu \$1,-1\(\$tp\)
+ 196: c9 db ff ff lbu \$9,-1\(\$tp\)
+ 19a: c8 fb 00 01 lbu \$8,1\(\$sp\)
+
+0000019e <lhu16>:
+ 19e: cd ff ff ff lhu \$tp,-1\(\$sp\)
+ 1a2: ce 8f 00 02 lhu \$gp,2\(\$8\)
+ 1a6: cf cf ff ff lhu \$sp,-1\(\$12\)
+ 1aa: c3 0f ff ff lhu \$3,-1\(\$0\)
+ 1ae: c3 cf ff fe lhu \$3,-2\(\$12\)
+
+000001b2 <sw24>:
+ 1b2: eb 06 00 00 sw \$11,\(0x4\)
+ 1b6: ef 06 00 00 sw \$sp,\(0x4\)
+ 1ba: e7 0a 00 00 sw \$7,\(0x8\)
+ 1be: ea 12 00 00 sw \$10,\(0x10\)
+ 1c2: e8 a2 00 00 sw \$8,\(0xa0\)
+
+000001c6 <lw24>:
+ 1c6: e4 07 00 00 lw \$4,\(0x4\)
+ 1ca: ef 07 00 00 lw \$sp,\(0x4\)
+ 1ce: e4 13 00 00 lw \$4,\(0x10\)
+ 1d2: e8 03 00 00 lw \$8,\(0x0\)
+ 1d6: ed 0b 00 00 lw \$tp,\(0x8\)
+
+000001da <extb>:
+ 1da: 1d 0d extb \$tp
+ 1dc: 1d 0d extb \$tp
+ 1de: 16 0d extb \$6
+ 1e0: 1e 0d extb \$gp
+ 1e2: 1a 0d extb \$10
+
+000001e4 <exth>:
+ 1e4: 1f 2d exth \$sp
+ 1e6: 12 2d exth \$2
+ 1e8: 15 2d exth \$5
+ 1ea: 1a 2d exth \$10
+ 1ec: 14 2d exth \$4
+
+000001ee <extub>:
+ 1ee: 12 8d extub \$2
+ 1f0: 1d 8d extub \$tp
+ 1f2: 13 8d extub \$3
+ 1f4: 19 8d extub \$9
+ 1f6: 1e 8d extub \$gp
+
+000001f8 <extuh>:
+ 1f8: 18 ad extuh \$8
+ 1fa: 18 ad extuh \$8
+ 1fc: 14 ad extuh \$4
+ 1fe: 10 ad extuh \$0
+ 200: 10 ad extuh \$0
+
+00000202 <ssarb>:
+ 202: 12 8c ssarb 2\(\$8\)
+ 204: 12 dc ssarb 2\(\$tp\)
+ 206: 11 dc ssarb 1\(\$tp\)
+ 208: 12 5c ssarb 2\(\$5\)
+ 20a: 10 9c ssarb 0\(\$9\)
+
+0000020c <mov>:
+ 20c: 02 30 mov \$2,\$3
+ 20e: 03 b0 mov \$3,\$11
+ 210: 0f a0 mov \$sp,\$10
+ 212: 0f 00 mov \$sp,\$0
+ 214: 03 d0 mov \$3,\$tp
+
+00000216 <movi8>:
+ 216: 5b ff mov \$11,-1
+ 218: 56 02 mov \$6,2
+ 21a: 5f ff mov \$sp,-1
+ 21c: 5f 01 mov \$sp,1
+ 21e: 5e ff mov \$gp,-1
+
+00000220 <movi16>:
+ 220: 5f 00 mov \$sp,0
+ 222: 50 02 mov \$0,2
+ 224: 58 ff mov \$8,-1
+ 226: 5c 01 mov \$12,1
+ 228: 57 ff mov \$7,-1
+
+0000022a <movu24>:
+ 22a: d2 01 00 00 movu \$2,0x1
+ 22e: ca 11 00 04 movu \$10,0x4
+ 232: c9 11 00 00 movu \$9,0x0
+ 236: d4 03 00 00 movu \$4,0x3
+ 23a: ce 11 00 01 movu \$gp,0x1
+
+0000023e <movu16>:
+ 23e: cf 11 00 01 movu \$sp,0x1
+ 242: d6 03 00 00 movu \$6,0x3
+ 246: d0 03 00 00 movu \$0,0x3
+ 24a: ce 11 00 03 movu \$gp,0x3
+ 24e: ca 11 00 02 movu \$10,0x2
+
+00000252 <movh>:
+ 252: c8 21 00 02 movh \$8,0x2
+ 256: cd 21 00 01 movh \$tp,0x1
+ 25a: ce 21 00 02 movh \$gp,0x2
+ 25e: cc 21 00 00 movh \$12,0x0
+ 262: cb 21 00 02 movh \$11,0x2
+
+00000266 <add3>:
+ 266: 9b 36 add3 \$6,\$11,\$3
+ 268: 9d 5e add3 \$gp,\$tp,\$5
+ 26a: 9b 73 add3 \$3,\$11,\$7
+ 26c: 9e dd add3 \$tp,\$gp,\$tp
+ 26e: 9e 80 add3 \$0,\$gp,\$8
+
+00000270 <add>:
+ 270: 6c 08 add \$12,2
+ 272: 6c fc add \$12,-1
+ 274: 64 04 add \$4,1
+ 276: 66 04 add \$6,1
+ 278: 66 08 add \$6,2
+
+0000027a <add3i>:
+ 27a: 4b 04 add3 \$11,\$sp,0x4
+ 27c: c4 f0 00 01 add3 \$4,\$sp,1
+ 280: 40 00 add3 \$0,\$sp,0x0
+ 282: cd f0 00 03 add3 \$tp,\$sp,3
+ 286: 4b 00 add3 \$11,\$sp,0x0
+
+00000288 <advck3>:
+ 288: 0e a7 advck3 \$0,\$gp,\$10
+ 28a: 0d 07 advck3 \$0,\$tp,\$0
+ 28c: 0e d7 advck3 \$0,\$gp,\$tp
+ 28e: 07 87 advck3 \$0,\$7,\$8
+ 290: 01 27 advck3 \$0,\$1,\$2
+
+00000292 <sub>:
+ 292: 08 e4 sub \$8,\$gp
+ 294: 01 94 sub \$1,\$9
+ 296: 0d 74 sub \$tp,\$7
+ 298: 0f 34 sub \$sp,\$3
+ 29a: 02 74 sub \$2,\$7
+
+0000029c <sbvck3>:
+ 29c: 03 e5 sbvck3 \$0,\$3,\$gp
+ 29e: 03 75 sbvck3 \$0,\$3,\$7
+ 2a0: 0a a5 sbvck3 \$0,\$10,\$10
+ 2a2: 04 d5 sbvck3 \$0,\$4,\$tp
+ 2a4: 0a f5 sbvck3 \$0,\$10,\$sp
+
+000002a6 <neg>:
+ 2a6: 0e 71 neg \$gp,\$7
+ 2a8: 01 71 neg \$1,\$7
+ 2aa: 02 b1 neg \$2,\$11
+ 2ac: 0d 81 neg \$tp,\$8
+ 2ae: 0e d1 neg \$gp,\$tp
+
+000002b0 <slt3>:
+ 2b0: 0e 82 slt3 \$0,\$gp,\$8
+ 2b2: 04 d2 slt3 \$0,\$4,\$tp
+ 2b4: 0a e2 slt3 \$0,\$10,\$gp
+ 2b6: 0e 52 slt3 \$0,\$gp,\$5
+ 2b8: 03 c2 slt3 \$0,\$3,\$12
+
+000002ba <sltu3>:
+ 2ba: 02 83 sltu3 \$0,\$2,\$8
+ 2bc: 0e b3 sltu3 \$0,\$gp,\$11
+ 2be: 02 d3 sltu3 \$0,\$2,\$tp
+ 2c0: 09 83 sltu3 \$0,\$9,\$8
+ 2c2: 06 93 sltu3 \$0,\$6,\$9
+
+000002c4 <slt3i>:
+ 2c4: 66 11 slt3 \$0,\$6,0x2
+ 2c6: 6b 09 slt3 \$0,\$11,0x1
+ 2c8: 6f 01 slt3 \$0,\$sp,0x0
+ 2ca: 63 01 slt3 \$0,\$3,0x0
+ 2cc: 6d 01 slt3 \$0,\$tp,0x0
+
+000002ce <sltu3i>:
+ 2ce: 6e 25 sltu3 \$0,\$gp,0x4
+ 2d0: 6d 1d sltu3 \$0,\$tp,0x3
+ 2d2: 63 0d sltu3 \$0,\$3,0x1
+ 2d4: 6c 05 sltu3 \$0,\$12,0x0
+ 2d6: 61 1d sltu3 \$0,\$1,0x3
+
+000002d8 <sl1ad3>:
+ 2d8: 28 e6 sl1ad3 \$0,\$8,\$gp
+ 2da: 24 26 sl1ad3 \$0,\$4,\$2
+ 2dc: 2f c6 sl1ad3 \$0,\$sp,\$12
+ 2de: 29 16 sl1ad3 \$0,\$9,\$1
+ 2e0: 28 26 sl1ad3 \$0,\$8,\$2
+
+000002e2 <sl2ad3>:
+ 2e2: 28 d7 sl2ad3 \$0,\$8,\$tp
+ 2e4: 22 37 sl2ad3 \$0,\$2,\$3
+ 2e6: 28 97 sl2ad3 \$0,\$8,\$9
+ 2e8: 27 c7 sl2ad3 \$0,\$7,\$12
+ 2ea: 24 c7 sl2ad3 \$0,\$4,\$12
+
+000002ec <add3x>:
+ 2ec: cd b0 00 01 add3 \$tp,\$11,1
+ 2f0: cd 40 ff ff add3 \$tp,\$4,-1
+ 2f4: c2 d0 00 01 add3 \$2,\$tp,1
+ 2f8: c3 e0 00 01 add3 \$3,\$gp,1
+ 2fc: ca f0 00 02 add3 \$10,\$sp,2
+
+00000300 <slt3x>:
+ 300: c8 12 ff ff slt3 \$8,\$1,-1
+ 304: c0 32 ff fe slt3 \$0,\$3,-2
+ 308: c9 f2 ff ff slt3 \$9,\$sp,-1
+ 30c: c3 82 00 02 slt3 \$3,\$8,2
+ 310: cd e2 00 00 slt3 \$tp,\$gp,0
+
+00000314 <sltu3x>:
+ 314: cf b3 00 02 sltu3 \$sp,\$11,0x2
+ 318: c6 03 00 01 sltu3 \$6,\$0,0x1
+ 31c: c9 b3 00 03 sltu3 \$9,\$11,0x3
+ 320: 64 05 sltu3 \$0,\$4,0x0
+ 322: cd e3 00 04 sltu3 \$tp,\$gp,0x4
+
+00000326 <or>:
+ 326: 1f e0 or \$sp,\$gp
+ 328: 18 30 or \$8,\$3
+ 32a: 10 f0 or \$0,\$sp
+ 32c: 1d 00 or \$tp,\$0
+ 32e: 18 60 or \$8,\$6
+
+00000330 <and>:
+ 330: 1f f1 and \$sp,\$sp
+ 332: 16 e1 and \$6,\$gp
+ 334: 14 21 and \$4,\$2
+ 336: 15 81 and \$5,\$8
+ 338: 17 e1 and \$7,\$gp
+
+0000033a <xor>:
+ 33a: 11 c2 xor \$1,\$12
+ 33c: 1c d2 xor \$12,\$tp
+ 33e: 1a 82 xor \$10,\$8
+ 340: 1f b2 xor \$sp,\$11
+ 342: 1c 82 xor \$12,\$8
+
+00000344 <nor>:
+ 344: 19 53 nor \$9,\$5
+ 346: 18 23 nor \$8,\$2
+ 348: 1f 93 nor \$sp,\$9
+ 34a: 15 f3 nor \$5,\$sp
+ 34c: 1f e3 nor \$sp,\$gp
+
+0000034e <or3>:
+ 34e: cd f4 00 02 or3 \$tp,\$sp,0x2
+ 352: cf d4 00 03 or3 \$sp,\$tp,0x3
+ 356: c0 a4 00 04 or3 \$0,\$10,0x4
+ 35a: c9 f4 00 03 or3 \$9,\$sp,0x3
+ 35e: c9 f4 00 00 or3 \$9,\$sp,0x0
+
+00000362 <and3>:
+ 362: c5 85 00 01 and3 \$5,\$8,0x1
+ 366: cb e5 00 03 and3 \$11,\$gp,0x3
+ 36a: c6 05 00 00 and3 \$6,\$0,0x0
+ 36e: cf f5 00 00 and3 \$sp,\$sp,0x0
+ 372: c1 a5 00 03 and3 \$1,\$10,0x3
+
+00000376 <xor3>:
+ 376: c0 06 00 02 xor3 \$0,\$0,0x2
+ 37a: cf 66 00 00 xor3 \$sp,\$6,0x0
+ 37e: cd 56 00 00 xor3 \$tp,\$5,0x0
+ 382: cf 76 00 00 xor3 \$sp,\$7,0x0
+ 386: cf f6 00 02 xor3 \$sp,\$sp,0x2
+
+0000038a <sra>:
+ 38a: 24 1d sra \$4,\$1
+ 38c: 28 fd sra \$8,\$sp
+ 38e: 21 1d sra \$1,\$1
+ 390: 20 5d sra \$0,\$5
+ 392: 29 1d sra \$9,\$1
+
+00000394 <srl>:
+ 394: 22 bc srl \$2,\$11
+ 396: 2f 7c srl \$sp,\$7
+ 398: 21 7c srl \$1,\$7
+ 39a: 23 dc srl \$3,\$tp
+ 39c: 2e 1c srl \$gp,\$1
+
+0000039e <sll>:
+ 39e: 2b 0e sll \$11,\$0
+ 3a0: 2d 8e sll \$tp,\$8
+ 3a2: 28 9e sll \$8,\$9
+ 3a4: 2d fe sll \$tp,\$sp
+ 3a6: 2f fe sll \$sp,\$sp
+
+000003a8 <srai>:
+ 3a8: 61 13 sra \$1,0x2
+ 3aa: 6f 1b sra \$sp,0x3
+ 3ac: 6f 1b sra \$sp,0x3
+ 3ae: 66 23 sra \$6,0x4
+ 3b0: 6f 1b sra \$sp,0x3
+
+000003b2 <srli>:
+ 3b2: 6a 02 srl \$10,0x0
+ 3b4: 69 1a srl \$9,0x3
+ 3b6: 66 22 srl \$6,0x4
+ 3b8: 6a 12 srl \$10,0x2
+ 3ba: 68 1a srl \$8,0x3
+
+000003bc <slli>:
+ 3bc: 60 06 sll \$0,0x0
+ 3be: 64 06 sll \$4,0x0
+ 3c0: 6d 16 sll \$tp,0x2
+ 3c2: 6b 16 sll \$11,0x2
+ 3c4: 66 06 sll \$6,0x0
+
+000003c6 <sll3>:
+ 3c6: 6d 27 sll3 \$0,\$tp,0x4
+ 3c8: 6e 07 sll3 \$0,\$gp,0x0
+ 3ca: 68 17 sll3 \$0,\$8,0x2
+ 3cc: 63 17 sll3 \$0,\$3,0x2
+ 3ce: 68 07 sll3 \$0,\$8,0x0
+
+000003d0 <fsft>:
+ 3d0: 2e af fsft \$gp,\$10
+ 3d2: 2e 9f fsft \$gp,\$9
+ 3d4: 2f df fsft \$sp,\$tp
+ 3d6: 2b 3f fsft \$11,\$3
+ 3d8: 25 3f fsft \$5,\$3
+
+000003da <bra>:
+ 3da: b0 02 bra 3dc <bra\+0x2>
+ 3dc: bf fe bra 3da <bra>
+ 3de: b0 02 bra 3e0 <bra\+0x6>
+ 3e0: b0 00 bra 3e0 <bra\+0x6>
+ 3e2: b0 02 bra 3e4 <beqz>
+
+000003e4 <beqz>:
+ 3e4: a1 fe beqz \$1,3e2 <bra\+0x8>
+ 3e6: af 02 beqz \$sp,3e8 <beqz\+0x4>
+ 3e8: a4 04 beqz \$4,3ec <beqz\+0x8>
+ 3ea: a4 00 beqz \$4,3ea <beqz\+0x6>
+ 3ec: a9 fe beqz \$9,3ea <beqz\+0x6>
+
+000003ee <bnez>:
+ 3ee: a8 03 bnez \$8,3f0 <bnez\+0x2>
+ 3f0: ad 03 bnez \$tp,3f2 <bnez\+0x4>
+ 3f2: ae 01 bnez \$gp,3f2 <bnez\+0x4>
+ 3f4: a6 03 bnez \$6,3f6 <bnez\+0x8>
+ 3f6: a8 fd bnez \$8,3f2 <bnez\+0x4>
+
+000003f8 <beqi>:
+ 3f8: ed 30 00 00 beqi \$tp,0x3,3f8 <beqi>
+ 3fc: e0 40 ff ff beqi \$0,0x4,3fa <beqi\+0x2>
+ 400: ef 40 ff ff beqi \$sp,0x4,3fe <beqi\+0x6>
+ 404: ed 20 00 00 beqi \$tp,0x2,404 <beqi\+0xc>
+ 408: e4 20 ff fc beqi \$4,0x2,400 <beqi\+0x8>
+
+0000040c <bnei>:
+ 40c: e8 14 00 00 bnei \$8,0x1,40c <bnei>
+ 410: e5 14 00 01 bnei \$5,0x1,412 <bnei\+0x6>
+ 414: e5 04 00 04 bnei \$5,0x0,41c <bnei\+0x10>
+ 418: e9 44 ff ff bnei \$9,0x4,416 <bnei\+0xa>
+ 41c: e0 44 ff fc bnei \$0,0x4,414 <bnei\+0x8>
+
+00000420 <blti>:
+ 420: e7 3c 00 00 blti \$7,0x3,420 <blti>
+ 424: e1 1c 00 00 blti \$1,0x1,424 <blti\+0x4>
+ 428: e8 2c 00 01 blti \$8,0x2,42a <blti\+0xa>
+ 42c: eb 2c 00 01 blti \$11,0x2,42e <blti\+0xe>
+ 430: ef 3c ff ff blti \$sp,0x3,42e <blti\+0xe>
+
+00000434 <bgei>:
+ 434: e4 38 ff fc bgei \$4,0x3,42c <blti\+0xc>
+ 438: e7 08 00 01 bgei \$7,0x0,43a <bgei\+0x6>
+ 43c: ed 18 00 00 bgei \$tp,0x1,43c <bgei\+0x8>
+ 440: e5 28 ff ff bgei \$5,0x2,43e <bgei\+0xa>
+ 444: ec 48 ff fc bgei \$12,0x4,43c <bgei\+0x8>
+
+00000448 <beq>:
+ 448: e7 21 ff ff beq \$7,\$2,446 <bgei\+0x12>
+ 44c: e1 31 ff fc beq \$1,\$3,444 <bgei\+0x10>
+ 450: e2 01 00 01 beq \$2,\$0,452 <beq\+0xa>
+ 454: ef 81 00 01 beq \$sp,\$8,456 <beq\+0xe>
+ 458: e3 01 00 00 beq \$3,\$0,458 <beq\+0x10>
+
+0000045c <bne>:
+ 45c: e6 35 00 00 bne \$6,\$3,45c <bne>
+ 460: ef 35 ff fc bne \$sp,\$3,458 <beq\+0x10>
+ 464: e8 05 00 01 bne \$8,\$0,466 <bne\+0xa>
+ 468: ee f5 00 04 bne \$gp,\$sp,470 <bsr12>
+ 46c: ef 45 00 01 bne \$sp,\$4,46e <bne\+0x12>
+
+00000470 <bsr12>:
+ 470: b0 03 bsr 472 <bsr12\+0x2>
+ 472: bf f9 bsr 46a <bne\+0xe>
+ 474: bf f1 bsr 464 <bne\+0x8>
+ 476: bf ff bsr 474 <bsr12\+0x4>
+ 478: bf f9 bsr 470 <bsr12>
+
+0000047a <bsr24>:
+ 47a: b0 05 bsr 47e <bsr24\+0x4>
+ 47c: bf ff bsr 47a <bsr24>
+ 47e: bf fd bsr 47a <bsr24>
+ 480: b0 01 bsr 480 <bsr24\+0x6>
+ 482: b0 03 bsr 484 <jmp>
+
+00000484 <jmp>:
+ 484: 10 2e jmp \$2
+ 486: 10 de jmp \$tp
+ 488: 10 5e jmp \$5
+ 48a: 10 fe jmp \$sp
+ 48c: 10 8e jmp \$8
+
+0000048e <jmp24>:
+ 48e: d8 28 00 00 jmp 4 <sb\+0x4>
+ 492: d8 18 00 00 jmp 2 <sb\+0x2>
+ 496: d8 08 00 00 jmp 0 <sb>
+ 49a: d8 18 00 00 jmp 2 <sb\+0x2>
+ 49e: d8 28 00 00 jmp 4 <sb\+0x4>
+
+000004a2 <jsr>:
+ 4a2: 10 ff jsr \$sp
+ 4a4: 10 df jsr \$tp
+ 4a6: 10 df jsr \$tp
+ 4a8: 10 6f jsr \$6
+ 4aa: 10 6f jsr \$6
+
+000004ac <ret>:
+ 4ac: 70 02 ret
+
+000004ae <repeat>:
+ 4ae: e4 09 00 01 repeat \$4,4b0 <repeat\+0x2>
+ 4b2: e8 09 00 02 repeat \$8,4b6 <repeat\+0x8>
+ 4b6: e0 09 00 04 repeat \$0,4be <repeat\+0x10>
+ 4ba: e6 09 00 01 repeat \$6,4bc <repeat\+0xe>
+ 4be: e4 09 00 01 repeat \$4,4c0 <repeat\+0x12>
+
+000004c2 <erepeat>:
+ 4c2: e0 19 00 01 erepeat 4c4 <erepeat\+0x2>
+ 4c6: e0 19 00 00 erepeat 4c6 <erepeat\+0x4>
+ 4ca: e0 19 00 01 erepeat 4cc <erepeat\+0xa>
+ 4ce: e0 19 ff ff erepeat 4cc <erepeat\+0xa>
+ 4d2: e0 19 00 00 erepeat 4d2 <erepeat\+0x10>
+
+000004d6 <stc>:
+ 4d6: 7d e8 stc \$tp,\$mb1
+ 4d8: 7d c9 stc \$tp,\$ccfg
+ 4da: 7b 89 stc \$11,\$dbg
+ 4dc: 7a c9 stc \$10,\$ccfg
+ 4de: 79 39 stc \$9,\$epc
+
+000004e0 <ldc>:
+ 4e0: 7d 8a ldc \$tp,\$lo
+ 4e2: 78 7b ldc \$8,\$npc
+ 4e4: 79 ca ldc \$9,\$mb0
+ 4e6: 7f 2a ldc \$sp,\$sar
+ 4e8: 79 cb ldc \$9,\$ccfg
+
+000004ea <di>:
+ 4ea: 70 00 di
+
+000004ec <ei>:
+ 4ec: 70 10 ei
+
+000004ee <reti>:
+ 4ee: 70 12 reti
+
+000004f0 <halt>:
+ 4f0: 70 22 halt
+
+000004f2 <swi>:
+ 4f2: 70 26 swi 0x2
+ 4f4: 70 06 swi 0x0
+ 4f6: 70 26 swi 0x2
+ 4f8: 70 36 swi 0x3
+ 4fa: 70 16 swi 0x1
+
+000004fc <break>:
+ 4fc: 70 32 break
+
+000004fe <syncm>:
+ 4fe: 70 11 syncm
+
+00000500 <stcb>:
+ 500: f5 04 00 04 stcb \$5,0x4
+ 504: f5 04 00 01 stcb \$5,0x1
+ 508: fe 04 00 00 stcb \$gp,0x0
+ 50c: ff 04 00 04 stcb \$sp,0x4
+ 510: fb 04 00 02 stcb \$11,0x2
+
+00000514 <ldcb>:
+ 514: f2 14 00 03 ldcb \$2,0x3
+ 518: f2 14 00 04 ldcb \$2,0x4
+ 51c: f9 14 00 01 ldcb \$9,0x1
+ 520: fa 14 00 04 ldcb \$10,0x4
+ 524: f1 14 00 04 ldcb \$1,0x4
+
+00000528 <bsetm>:
+ 528: 20 a0 bsetm \(\$10\),0x0
+ 52a: 20 f0 bsetm \(\$sp\),0x0
+ 52c: 22 10 bsetm \(\$1\),0x2
+ 52e: 24 f0 bsetm \(\$sp\),0x4
+ 530: 24 80 bsetm \(\$8\),0x4
+
+00000532 <bclrm>:
+ 532: 20 51 bclrm \(\$5\),0x0
+ 534: 22 51 bclrm \(\$5\),0x2
+ 536: 20 81 bclrm \(\$8\),0x0
+ 538: 22 91 bclrm \(\$9\),0x2
+ 53a: 23 51 bclrm \(\$5\),0x3
+
+0000053c <bnotm>:
+ 53c: 24 e2 bnotm \(\$gp\),0x4
+ 53e: 24 b2 bnotm \(\$11\),0x4
+ 540: 20 a2 bnotm \(\$10\),0x0
+ 542: 24 d2 bnotm \(\$tp\),0x4
+ 544: 20 82 bnotm \(\$8\),0x0
+
+00000546 <btstm>:
+ 546: 20 e3 btstm \$0,\(\$gp\),0x0
+ 548: 21 e3 btstm \$0,\(\$gp\),0x1
+ 54a: 20 b3 btstm \$0,\(\$11\),0x0
+ 54c: 23 e3 btstm \$0,\(\$gp\),0x3
+ 54e: 22 83 btstm \$0,\(\$8\),0x2
+
+00000550 <tas>:
+ 550: 27 d4 tas \$7,\(\$tp\)
+ 552: 27 c4 tas \$7,\(\$12\)
+ 554: 23 84 tas \$3,\(\$8\)
+ 556: 22 54 tas \$2,\(\$5\)
+ 558: 26 a4 tas \$6,\(\$10\)
+
+0000055a <cache>:
+ 55a: 71 d4 cache 0x1,\(\$tp\)
+ 55c: 73 c4 cache 0x3,\(\$12\)
+ 55e: 73 94 cache 0x3,\(\$9\)
+ 560: 74 24 cache 0x4,\(\$2\)
+ 562: 74 74 cache 0x4,\(\$7\)
+
+00000564 <mul>:
+ 564: 18 e4 mul \$8,\$gp
+ 566: 12 94 mul \$2,\$9
+ 568: 1e f4 mul \$gp,\$sp
+ 56a: 19 74 mul \$9,\$7
+ 56c: 17 b4 mul \$7,\$11
+
+0000056e <mulu>:
+ 56e: 12 55 mulu \$2,\$5
+ 570: 16 e5 mulu \$6,\$gp
+ 572: 1e f5 mulu \$gp,\$sp
+ 574: 1b e5 mulu \$11,\$gp
+ 576: 13 95 mulu \$3,\$9
+
+00000578 <mulr>:
+ 578: 1c 66 mulr \$12,\$6
+ 57a: 1d 86 mulr \$tp,\$8
+ 57c: 17 a6 mulr \$7,\$10
+ 57e: 1e 16 mulr \$gp,\$1
+ 580: 10 f6 mulr \$0,\$sp
+
+00000582 <mulru>:
+ 582: 14 27 mulru \$4,\$2
+ 584: 1e 17 mulru \$gp,\$1
+ 586: 1f 47 mulru \$sp,\$4
+ 588: 1a 67 mulru \$10,\$6
+ 58a: 10 e7 mulru \$0,\$gp
+
+0000058c <madd>:
+ 58c: f4 b1 30 04 madd \$4,\$11
+ 590: ff e1 30 04 madd \$sp,\$gp
+ 594: fe f1 30 04 madd \$gp,\$sp
+ 598: f4 d1 30 04 madd \$4,\$tp
+ 59c: f1 e1 30 04 madd \$1,\$gp
+
+000005a0 <maddu>:
+ 5a0: f0 11 30 05 maddu \$0,\$1
+ 5a4: f7 61 30 05 maddu \$7,\$6
+ 5a8: f9 51 30 05 maddu \$9,\$5
+ 5ac: fe f1 30 05 maddu \$gp,\$sp
+ 5b0: f7 d1 30 05 maddu \$7,\$tp
+
+000005b4 <maddr>:
+ 5b4: f6 81 30 06 maddr \$6,\$8
+ 5b8: f9 e1 30 06 maddr \$9,\$gp
+ 5bc: f8 e1 30 06 maddr \$8,\$gp
+ 5c0: f3 21 30 06 maddr \$3,\$2
+ 5c4: f1 b1 30 06 maddr \$1,\$11
+
+000005c8 <maddru>:
+ 5c8: fa 31 30 07 maddru \$10,\$3
+ 5cc: ff c1 30 07 maddru \$sp,\$12
+ 5d0: f8 81 30 07 maddru \$8,\$8
+ 5d4: fe 31 30 07 maddru \$gp,\$3
+ 5d8: f8 f1 30 07 maddru \$8,\$sp
+
+000005dc <div>:
+ 5dc: 19 38 div \$9,\$3
+ 5de: 14 e8 div \$4,\$gp
+ 5e0: 12 c8 div \$2,\$12
+ 5e2: 18 d8 div \$8,\$tp
+ 5e4: 1d 68 div \$tp,\$6
+
+000005e6 <divu>:
+ 5e6: 19 59 divu \$9,\$5
+ 5e8: 18 d9 divu \$8,\$tp
+ 5ea: 10 e9 divu \$0,\$gp
+ 5ec: 19 59 divu \$9,\$5
+ 5ee: 10 59 divu \$0,\$5
+
+000005f0 <dret>:
+ 5f0: 70 13 dret
+
+000005f2 <dbreak>:
+ 5f2: 70 33 dbreak
+
+000005f4 <ldz>:
+ 5f4: fe 41 00 00 ldz \$gp,\$4
+ 5f8: fa b1 00 00 ldz \$10,\$11
+ 5fc: f9 91 00 00 ldz \$9,\$9
+ 600: ff d1 00 00 ldz \$sp,\$tp
+ 604: fe 31 00 00 ldz \$gp,\$3
+
+00000608 <abs>:
+ 608: ff 91 00 03 abs \$sp,\$9
+ 60c: f5 41 00 03 abs \$5,\$4
+ 610: fd d1 00 03 abs \$tp,\$tp
+ 614: f0 31 00 03 abs \$0,\$3
+ 618: f3 e1 00 03 abs \$3,\$gp
+
+0000061c <ave>:
+ 61c: fb a1 00 02 ave \$11,\$10
+ 620: f8 a1 00 02 ave \$8,\$10
+ 624: fe 21 00 02 ave \$gp,\$2
+ 628: fa c1 00 02 ave \$10,\$12
+ 62c: ff 81 00 02 ave \$sp,\$8
+
+00000630 <min>:
+ 630: f8 31 00 04 min \$8,\$3
+ 634: f7 01 00 04 min \$7,\$0
+ 638: f2 21 00 04 min \$2,\$2
+ 63c: f5 61 00 04 min \$5,\$6
+ 640: fb 51 00 04 min \$11,\$5
+
+00000644 <max>:
+ 644: fb f1 00 05 max \$11,\$sp
+ 648: fe 01 00 05 max \$gp,\$0
+ 64c: fc f1 00 05 max \$12,\$sp
+ 650: fe 21 00 05 max \$gp,\$2
+ 654: fe f1 00 05 max \$gp,\$sp
+
+00000658 <minu>:
+ 658: fb 81 00 06 minu \$11,\$8
+ 65c: f7 51 00 06 minu \$7,\$5
+ 660: f8 e1 00 06 minu \$8,\$gp
+ 664: fb 41 00 06 minu \$11,\$4
+ 668: f2 f1 00 06 minu \$2,\$sp
+
+0000066c <maxu>:
+ 66c: f3 31 00 07 maxu \$3,\$3
+ 670: fd 01 00 07 maxu \$tp,\$0
+ 674: f4 81 00 07 maxu \$4,\$8
+ 678: fe 21 00 07 maxu \$gp,\$2
+ 67c: fc 81 00 07 maxu \$12,\$8
+
+00000680 <clip>:
+ 680: fa 01 10 08 clip \$10,0x1
+ 684: ff 01 10 20 clip \$sp,0x4
+ 688: f4 01 10 18 clip \$4,0x3
+ 68c: ff 01 10 18 clip \$sp,0x3
+ 690: f1 01 10 00 clip \$1,0x0
+
+00000694 <clipu>:
+ 694: fa 01 10 21 clipu \$10,0x4
+ 698: fd 01 10 09 clipu \$tp,0x1
+ 69c: f5 01 10 21 clipu \$5,0x4
+ 6a0: fe 01 10 01 clipu \$gp,0x0
+ 6a4: f5 01 10 09 clipu \$5,0x1
+
+000006a8 <sadd>:
+ 6a8: f5 01 00 08 sadd \$5,\$0
+ 6ac: ff 31 00 08 sadd \$sp,\$3
+ 6b0: f0 a1 00 08 sadd \$0,\$10
+ 6b4: ff c1 00 08 sadd \$sp,\$12
+ 6b8: f4 21 00 08 sadd \$4,\$2
+
+000006bc <ssub>:
+ 6bc: f1 a1 00 0a ssub \$1,\$10
+ 6c0: f4 71 00 0a ssub \$4,\$7
+ 6c4: f8 31 00 0a ssub \$8,\$3
+ 6c8: f7 e1 00 0a ssub \$7,\$gp
+ 6cc: fd 41 00 0a ssub \$tp,\$4
+
+000006d0 <saddu>:
+ 6d0: f9 e1 00 09 saddu \$9,\$gp
+ 6d4: f0 a1 00 09 saddu \$0,\$10
+ 6d8: f7 c1 00 09 saddu \$7,\$12
+ 6dc: f5 f1 00 09 saddu \$5,\$sp
+ 6e0: fd 31 00 09 saddu \$tp,\$3
+
+000006e4 <ssubu>:
+ 6e4: ff e1 00 0b ssubu \$sp,\$gp
+ 6e8: f0 f1 00 0b ssubu \$0,\$sp
+ 6ec: f3 a1 00 0b ssubu \$3,\$10
+ 6f0: ff d1 00 0b ssubu \$sp,\$tp
+ 6f4: f2 91 00 0b ssubu \$2,\$9
+
+000006f8 <swcp>:
+ 6f8: 33 d8 swcp \$c3,\(\$tp\)
+ 6fa: 3f d8 swcp \$c15,\(\$tp\)
+ 6fc: 3d 08 swcp \$c13,\(\$0\)
+ 6fe: 3c c8 swcp \$c12,\(\$12\)
+ 700: 39 e8 swcp \$c9,\(\$gp\)
+
+00000702 <lwcp>:
+ 702: 37 39 lwcp \$c7,\(\$3\)
+ 704: 36 39 lwcp \$c6,\(\$3\)
+ 706: 30 29 lwcp \$c0,\(\$2\)
+ 708: 38 89 lwcp \$c8,\(\$8\)
+ 70a: 3b d9 lwcp \$c11,\(\$tp\)
+
+0000070c <smcp>:
+ 70c: 3e 9a smcp \$c14,\(\$9\)
+ 70e: 32 8a smcp \$c2,\(\$8\)
+ 710: 3e fa smcp \$c14,\(\$sp\)
+ 712: 3a 8a smcp \$c10,\(\$8\)
+ 714: 32 8a smcp \$c2,\(\$8\)
+
+00000716 <lmcp>:
+ 716: 3b 1b lmcp \$c11,\(\$1\)
+ 718: 38 8b lmcp \$c8,\(\$8\)
+ 71a: 3b db lmcp \$c11,\(\$tp\)
+ 71c: 38 0b lmcp \$c8,\(\$0\)
+ 71e: 38 eb lmcp \$c8,\(\$gp\)
+
+00000720 <swcpi>:
+ 720: 37 00 swcpi \$c7,\(\$0\+\)
+ 722: 36 e0 swcpi \$c6,\(\$gp\+\)
+ 724: 3c 80 swcpi \$c12,\(\$8\+\)
+ 726: 3e f0 swcpi \$c14,\(\$sp\+\)
+ 728: 36 00 swcpi \$c6,\(\$0\+\)
+
+0000072a <lwcpi>:
+ 72a: 38 21 lwcpi \$c8,\(\$2\+\)
+ 72c: 39 01 lwcpi \$c9,\(\$0\+\)
+ 72e: 33 e1 lwcpi \$c3,\(\$gp\+\)
+ 730: 3d 51 lwcpi \$c13,\(\$5\+\)
+ 732: 3b e1 lwcpi \$c11,\(\$gp\+\)
+
+00000734 <smcpi>:
+ 734: 38 22 smcpi \$c8,\(\$2\+\)
+ 736: 3b 92 smcpi \$c11,\(\$9\+\)
+ 738: 34 32 smcpi \$c4,\(\$3\+\)
+ 73a: 3e 22 smcpi \$c14,\(\$2\+\)
+ 73c: 39 32 smcpi \$c9,\(\$3\+\)
+
+0000073e <lmcpi>:
+ 73e: 36 e3 lmcpi \$c6,\(\$gp\+\)
+ 740: 39 53 lmcpi \$c9,\(\$5\+\)
+ 742: 3a 63 lmcpi \$c10,\(\$6\+\)
+ 744: 31 63 lmcpi \$c1,\(\$6\+\)
+ 746: 32 83 lmcpi \$c2,\(\$8\+\)
+
+00000748 <swcp16>:
+ 748: f0 2c ff ff swcp \$c0,-1\(\$2\)
+ 74c: f5 ac 00 01 swcp \$c5,1\(\$10\)
+ 750: f8 cc 00 02 swcp \$c8,2\(\$12\)
+ 754: fe 1c ff ff swcp \$c14,-1\(\$1\)
+ 758: fc 3c 00 02 swcp \$c12,2\(\$3\)
+
+0000075c <lwcp16>:
+ 75c: f8 5d ff ff lwcp \$c8,-1\(\$5\)
+ 760: fc fd 00 01 lwcp \$c12,1\(\$sp\)
+ 764: f1 0d 00 02 lwcp \$c1,2\(\$0\)
+ 768: f4 dd 00 01 lwcp \$c4,1\(\$tp\)
+ 76c: f6 bd 00 02 lwcp \$c6,2\(\$11\)
+
+00000770 <smcp16>:
+ 770: f9 ae ff ff smcp \$c9,-1\(\$10\)
+ 774: fe ee 00 01 smcp \$c14,1\(\$gp\)
+ 778: f3 fe 00 02 smcp \$c3,2\(\$sp\)
+ 77c: ff 8e ff fe smcp \$c15,-2\(\$8\)
+ 780: fd de 00 01 smcp \$c13,1\(\$tp\)
+
+00000784 <lmcp16>:
+ 784: f0 ff 00 01 lmcp \$c0,1\(\$sp\)
+ 788: ff 8f 00 01 lmcp \$c15,1\(\$8\)
+ 78c: f2 8f ff ff lmcp \$c2,-1\(\$8\)
+ 790: fe 8f 00 01 lmcp \$c14,1\(\$8\)
+ 794: f1 af ff ff lmcp \$c1,-1\(\$10\)
+
+00000798 <sbcpa>:
+ 798: fe f5 00 02 sbcpa \$c14,\(\$sp\+\),2
+ 79c: f2 45 00 fe sbcpa \$c2,\(\$4\+\),-2
+ 7a0: f8 15 00 00 sbcpa \$c8,\(\$1\+\),0
+ 7a4: fb 35 00 00 sbcpa \$c11,\(\$3\+\),0
+ 7a8: f9 e5 00 fe sbcpa \$c9,\(\$gp\+\),-2
+
+000007ac <lbcpa>:
+ 7ac: f7 25 40 fe lbcpa \$c7,\(\$2\+\),-2
+ 7b0: fc f5 40 02 lbcpa \$c12,\(\$sp\+\),2
+ 7b4: f5 45 40 fe lbcpa \$c5,\(\$4\+\),-2
+ 7b8: f7 45 40 fe lbcpa \$c7,\(\$4\+\),-2
+ 7bc: f8 f5 40 00 lbcpa \$c8,\(\$sp\+\),0
+
+000007c0 <shcpa>:
+ 7c0: f0 e5 10 00 shcpa \$c0,\(\$gp\+\),0
+ 7c4: fc f5 10 10 shcpa \$c12,\(\$sp\+\),16
+ 7c8: f1 45 10 04 shcpa \$c1,\(\$4\+\),4
+ 7cc: f5 45 10 e0 shcpa \$c5,\(\$4\+\),-32
+ 7d0: f1 f5 10 00 shcpa \$c1,\(\$sp\+\),0
+
+000007d4 <lhcpa>:
+ 7d4: f4 45 50 00 lhcpa \$c4,\(\$4\+\),0
+ 7d8: f6 55 50 30 lhcpa \$c6,\(\$5\+\),48
+ 7dc: f3 65 50 cc lhcpa \$c3,\(\$6\+\),-52
+ 7e0: f8 65 50 e8 lhcpa \$c8,\(\$6\+\),-24
+ 7e4: f0 95 50 00 lhcpa \$c0,\(\$9\+\),0
+
+000007e8 <swcpa>:
+ 7e8: f1 95 20 10 swcpa \$c1,\(\$9\+\),16
+ 7ec: f7 f5 20 20 swcpa \$c7,\(\$sp\+\),32
+ 7f0: f3 c5 20 30 swcpa \$c3,\(\$12\+\),48
+ 7f4: fa 95 20 08 swcpa \$c10,\(\$9\+\),8
+ 7f8: fe 85 20 04 swcpa \$c14,\(\$8\+\),4
+
+000007fc <lwcpa>:
+ 7fc: f6 e5 60 f8 lwcpa \$c6,\(\$gp\+\),-8
+ 800: f4 75 60 04 lwcpa \$c4,\(\$7\+\),4
+ 804: fb e5 60 f0 lwcpa \$c11,\(\$gp\+\),-16
+ 808: fa f5 60 e0 lwcpa \$c10,\(\$sp\+\),-32
+ 80c: f2 25 60 08 lwcpa \$c2,\(\$2\+\),8
+
+00000810 <smcpa>:
+ 810: fd f5 30 f8 smcpa \$c13,\(\$sp\+\),-8
+ 814: f6 75 30 f8 smcpa \$c6,\(\$7\+\),-8
+ 818: f5 35 30 10 smcpa \$c5,\(\$3\+\),16
+ 81c: fd f5 30 10 smcpa \$c13,\(\$sp\+\),16
+ 820: f3 c5 30 30 smcpa \$c3,\(\$12\+\),48
+
+00000824 <lmcpa>:
+ 824: f9 45 70 00 lmcpa \$c9,\(\$4\+\),0
+ 828: f3 f5 70 f0 lmcpa \$c3,\(\$sp\+\),-16
+ 82c: ff d5 70 08 lmcpa \$c15,\(\$tp\+\),8
+ 830: f8 85 70 f8 lmcpa \$c8,\(\$8\+\),-8
+ 834: fa 95 70 00 lmcpa \$c10,\(\$9\+\),0
+
+00000838 <sbcpm0>:
+ 838: fa d5 08 08 sbcpm0 \$c10,\(\$tp\+\),8
+ 83c: fd 55 08 f8 sbcpm0 \$c13,\(\$5\+\),-8
+ 840: f4 55 08 f8 sbcpm0 \$c4,\(\$5\+\),-8
+ 844: fa d5 08 10 sbcpm0 \$c10,\(\$tp\+\),16
+ 848: f4 55 08 e8 sbcpm0 \$c4,\(\$5\+\),-24
+
+0000084c <lbcpm0>:
+ 84c: f0 45 48 00 lbcpm0 \$c0,\(\$4\+\),0
+ 850: f9 75 48 f8 lbcpm0 \$c9,\(\$7\+\),-8
+ 854: fc 85 48 18 lbcpm0 \$c12,\(\$8\+\),24
+ 858: f8 c5 48 10 lbcpm0 \$c8,\(\$12\+\),16
+ 85c: f7 85 48 10 lbcpm0 \$c7,\(\$8\+\),16
+
+00000860 <shcpm0>:
+ 860: f2 d5 18 02 shcpm0 \$c2,\(\$tp\+\),2
+ 864: f7 f5 18 fe shcpm0 \$c7,\(\$sp\+\),-2
+ 868: f8 25 18 02 shcpm0 \$c8,\(\$2\+\),2
+ 86c: fd 55 18 00 shcpm0 \$c13,\(\$5\+\),0
+ 870: f3 e5 18 08 shcpm0 \$c3,\(\$gp\+\),8
+
+00000874 <lhcpm0>:
+ 874: f7 45 58 08 lhcpm0 \$c7,\(\$4\+\),8
+ 878: f3 35 58 fe lhcpm0 \$c3,\(\$3\+\),-2
+ 87c: f3 15 58 00 lhcpm0 \$c3,\(\$1\+\),0
+ 880: f2 e5 58 00 lhcpm0 \$c2,\(\$gp\+\),0
+ 884: fc 65 58 02 lhcpm0 \$c12,\(\$6\+\),2
+
+00000888 <swcpm0>:
+ 888: f8 85 28 20 swcpm0 \$c8,\(\$8\+\),32
+ 88c: f9 f5 28 00 swcpm0 \$c9,\(\$sp\+\),0
+ 890: f9 25 28 f0 swcpm0 \$c9,\(\$2\+\),-16
+ 894: f0 e5 28 30 swcpm0 \$c0,\(\$gp\+\),48
+ 898: ff 15 28 08 swcpm0 \$c15,\(\$1\+\),8
+
+0000089c <lwcpm0>:
+ 89c: fe a5 68 fc lwcpm0 \$c14,\(\$10\+\),-4
+ 8a0: fb f5 68 fc lwcpm0 \$c11,\(\$sp\+\),-4
+ 8a4: f5 75 68 f8 lwcpm0 \$c5,\(\$7\+\),-8
+ 8a8: f2 c5 68 20 lwcpm0 \$c2,\(\$12\+\),32
+ 8ac: f2 e5 68 10 lwcpm0 \$c2,\(\$gp\+\),16
+
+000008b0 <smcpm0>:
+ 8b0: f1 c5 38 08 smcpm0 \$c1,\(\$12\+\),8
+ 8b4: f8 45 38 f0 smcpm0 \$c8,\(\$4\+\),-16
+ 8b8: fa b5 38 00 smcpm0 \$c10,\(\$11\+\),0
+ 8bc: f1 35 38 f0 smcpm0 \$c1,\(\$3\+\),-16
+ 8c0: fb f5 38 f8 smcpm0 \$c11,\(\$sp\+\),-8
+
+000008c4 <lmcpm0>:
+ 8c4: fe a5 78 00 lmcpm0 \$c14,\(\$10\+\),0
+ 8c8: f6 f5 78 f0 lmcpm0 \$c6,\(\$sp\+\),-16
+ 8cc: fd 15 78 08 lmcpm0 \$c13,\(\$1\+\),8
+ 8d0: fa d5 78 e8 lmcpm0 \$c10,\(\$tp\+\),-24
+ 8d4: f7 e5 78 e8 lmcpm0 \$c7,\(\$gp\+\),-24
+
+000008d8 <sbcpm1>:
+ 8d8: f9 85 0c 00 sbcpm1 \$c9,\(\$8\+\),0
+ 8dc: f7 c5 0c e8 sbcpm1 \$c7,\(\$12\+\),-24
+ 8e0: ff 55 0c e8 sbcpm1 \$c15,\(\$5\+\),-24
+ 8e4: f5 d5 0c 10 sbcpm1 \$c5,\(\$tp\+\),16
+ 8e8: f6 15 0c 80 sbcpm1 \$c6,\(\$1\+\),-128
+
+000008ec <lbcpm1>:
+ 8ec: f6 e5 4c 02 lbcpm1 \$c6,\(\$gp\+\),2
+ 8f0: f7 d5 4c fe lbcpm1 \$c7,\(\$tp\+\),-2
+ 8f4: f4 d5 4c 01 lbcpm1 \$c4,\(\$tp\+\),1
+ 8f8: fc 25 4c fe lbcpm1 \$c12,\(\$2\+\),-2
+ 8fc: fb 75 4c 01 lbcpm1 \$c11,\(\$7\+\),1
+
+00000900 <shcpm1>:
+ 900: f4 85 1c 18 shcpm1 \$c4,\(\$8\+\),24
+ 904: fb 65 1c f0 shcpm1 \$c11,\(\$6\+\),-16
+ 908: f7 85 1c 08 shcpm1 \$c7,\(\$8\+\),8
+ 90c: f5 c5 1c 10 shcpm1 \$c5,\(\$12\+\),16
+ 910: f0 85 1c e0 shcpm1 \$c0,\(\$8\+\),-32
+
+00000914 <lhcpm1>:
+ 914: fb 05 5c 00 lhcpm1 \$c11,\(\$0\+\),0
+ 918: f7 d5 5c fe lhcpm1 \$c7,\(\$tp\+\),-2
+ 91c: fa 85 5c 08 lhcpm1 \$c10,\(\$8\+\),8
+ 920: f3 d5 5c 00 lhcpm1 \$c3,\(\$tp\+\),0
+ 924: f9 65 5c 02 lhcpm1 \$c9,\(\$6\+\),2
+
+00000928 <swcpm1>:
+ 928: f9 85 2c 18 swcpm1 \$c9,\(\$8\+\),24
+ 92c: f9 e5 2c 00 swcpm1 \$c9,\(\$gp\+\),0
+ 930: f9 85 2c 10 swcpm1 \$c9,\(\$8\+\),16
+ 934: fe 15 2c 00 swcpm1 \$c14,\(\$1\+\),0
+ 938: f2 f5 2c 08 swcpm1 \$c2,\(\$sp\+\),8
+
+0000093c <lwcpm1>:
+ 93c: f8 85 6c 00 lwcpm1 \$c8,\(\$8\+\),0
+ 940: f3 e5 6c f0 lwcpm1 \$c3,\(\$gp\+\),-16
+ 944: f7 65 6c f8 lwcpm1 \$c7,\(\$6\+\),-8
+ 948: fe 85 6c e8 lwcpm1 \$c14,\(\$8\+\),-24
+ 94c: f3 85 6c 18 lwcpm1 \$c3,\(\$8\+\),24
+
+00000950 <smcpm1>:
+ 950: fa 45 3c 00 smcpm1 \$c10,\(\$4\+\),0
+ 954: f6 f5 3c f0 smcpm1 \$c6,\(\$sp\+\),-16
+ 958: fd 75 3c e8 smcpm1 \$c13,\(\$7\+\),-24
+ 95c: f3 e5 3c f8 smcpm1 \$c3,\(\$gp\+\),-8
+ 960: f0 25 3c 08 smcpm1 \$c0,\(\$2\+\),8
+
+00000964 <lmcpm1>:
+ 964: fc 15 7c 00 lmcpm1 \$c12,\(\$1\+\),0
+ 968: f0 65 7c 08 lmcpm1 \$c0,\(\$6\+\),8
+ 96c: f6 25 7c f8 lmcpm1 \$c6,\(\$2\+\),-8
+ 970: fc e5 7c f0 lmcpm1 \$c12,\(\$gp\+\),-16
+ 974: fe f5 7c 30 lmcpm1 \$c14,\(\$sp\+\),48
+
+00000... <bcpeq>:
+ ...: d8 44 00 00 bcpeq 0x4,... <bcpeq>
+ ...: d8 04 ff ff bcpeq 0x0,... <bcpeq\+0x2>
+ ...: d8 44 ff ff bcpeq 0x4,... <bcpeq\+0x6>
+ ...: d8 14 00 01 bcpeq 0x1,... <bcpeq\+0xe>
+ ...: d8 24 00 01 bcpeq 0x2,... <bcpeq\+0x12>
+
+00000... <bcpne>:
+ ...: d8 25 00 00 bcpne 0x2,... <bcpne>
+ ...: d8 45 00 00 bcpne 0x4,... <bcpne\+0x4>
+ ...: d8 15 00 00 bcpne 0x1,... <bcpne\+0x8>
+ ...: d8 45 00 00 bcpne 0x4,... <bcpne\+0xc>
+ ...: d8 15 00 01 bcpne 0x1,... <bcpne\+0x12>
+
+00000... <bcpat>:
+ ...: d8 16 ff ff bcpat 0x1,... <bcpne\+0x12>
+ ...: d8 06 00 01 bcpat 0x0,... <bcpat\+0x6>
+ ...: d8 06 ff ff bcpat 0x0,... <bcpat\+0x6>
+ ...: d8 26 00 00 bcpat 0x2,... <bcpat\+0xc>
+ ...: d8 16 ff ff bcpat 0x1,... <bcpat\+0xe>
+
+00000... <bcpaf>:
+ ...: d8 47 00 00 bcpaf 0x4,... <bcpaf>
+ ...: d8 37 00 00 bcpaf 0x3,... <bcpaf\+0x4>
+ ...: d8 47 00 00 bcpaf 0x4,... <bcpaf\+0x8>
+ ...: d8 17 00 01 bcpaf 0x1,... <bcpaf\+0xe>
+ ...: d8 47 00 01 bcpaf 0x4,... <bcpaf\+0x12>
+
+00000... <synccp>:
+ ...: 70 21 synccp
+
+00000... <jsrv>:
+ ...: 18 bf jsrv \$11
+ ...: 18 5f jsrv \$5
+ ...: 18 af jsrv \$10
+ ...: 18 cf jsrv \$12
+ ...: 18 af jsrv \$10
+
+00000... <bsrv>:
+ ...: df fb ff ff bsrv ... <jsrv\+0x8>
+ ...: df fb ff ff bsrv ... <bsrv\+0x2>
+ ...: df fb ff ff bsrv ... <bsrv\+0x6>
+ ...: d8 1b 00 00 bsrv ... <bsrv\+0xe>
+ ...: d8 0b 00 00 bsrv ... <bsrv\+0x10>
+
+00000... <case106341>:
+ ...: 7a 78 stc \$10,\$hi
+ ...: 70 8a ldc \$0,\$lo
+
+00000... <case106821>:
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: c0 08 00 01 sb \$0,1\(\$0\)
+ ...: c0 08 00 01 sb \$0,1\(\$0\)
+ ...: c0 08 00 00 sb \$0,0\(\$0\)
+ ...: c0 08 00 00 sb \$0,0\(\$0\)
+ ...: c0 08 00 01 sb \$0,1\(\$0\)
+ ...: c0 08 00 01 sb \$0,1\(\$0\)
+ ...: c0 09 00 01 sh \$0,1\(\$0\)
+ ...: c0 09 00 01 sh \$0,1\(\$0\)
+ ...: c0 09 00 00 sh \$0,0\(\$0\)
+ ...: c0 09 00 00 sh \$0,0\(\$0\)
+ ...: c0 09 00 01 sh \$0,1\(\$0\)
+ ...: c0 09 00 01 sh \$0,1\(\$0\)
+ ...: c0 0a 00 01 sw \$0,1\(\$0\)
+ ...: c0 0a 00 01 sw \$0,1\(\$0\)
+ ...: c0 0a 00 00 sw \$0,0\(\$0\)
+ ...: c0 0a 00 00 sw \$0,0\(\$0\)
+ ...: c0 0a 00 01 sw \$0,1\(\$0\)
+ ...: c0 0a 00 01 sw \$0,1\(\$0\)
+ ...: c0 0c 00 01 lb \$0,1\(\$0\)
+ ...: c0 0c 00 01 lb \$0,1\(\$0\)
+ ...: c0 0c 00 00 lb \$0,0\(\$0\)
+ ...: c0 0c 00 00 lb \$0,0\(\$0\)
+ ...: c0 0c 00 01 lb \$0,1\(\$0\)
+ ...: c0 0c 00 01 lb \$0,1\(\$0\)
+ ...: c0 0d 00 01 lh \$0,1\(\$0\)
+ ...: c0 0d 00 01 lh \$0,1\(\$0\)
+ ...: c0 0d 00 00 lh \$0,0\(\$0\)
+ ...: c0 0d 00 00 lh \$0,0\(\$0\)
+ ...: c0 0d 00 01 lh \$0,1\(\$0\)
+ ...: c0 0d 00 01 lh \$0,1\(\$0\)
+ ...: c0 0e 00 01 lw \$0,1\(\$0\)
+ ...: c0 0e 00 01 lw \$0,1\(\$0\)
+ ...: c0 0e 00 00 lw \$0,0\(\$0\)
+ ...: c0 0e 00 00 lw \$0,0\(\$0\)
+ ...: c0 0e 00 01 lw \$0,1\(\$0\)
+ ...: c0 0e 00 01 lw \$0,1\(\$0\)
+ ...: c0 0b 00 01 lbu \$0,1\(\$0\)
+ ...: c0 0b 00 01 lbu \$0,1\(\$0\)
+ ...: c0 0b 00 00 lbu \$0,0\(\$0\)
+ ...: c0 0b 00 00 lbu \$0,0\(\$0\)
+ ...: c0 0b 00 01 lbu \$0,1\(\$0\)
+ ...: c0 0b 00 01 lbu \$0,1\(\$0\)
+ ...: c0 0f 00 01 lhu \$0,1\(\$0\)
+ ...: c0 0f 00 01 lhu \$0,1\(\$0\)
+ ...: c0 0f 00 00 lhu \$0,0\(\$0\)
+ ...: c0 0f 00 00 lhu \$0,0\(\$0\)
+ ...: c0 0f 00 01 lhu \$0,1\(\$0\)
+ ...: c0 0f 00 01 lhu \$0,1\(\$0\)
+ ...: c0 08 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 08 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 08 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 08 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 09 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 09 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 09 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 09 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 0a 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 0a 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 0a 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 0a 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 0c 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 0c 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 0c 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 0c 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 0d 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 0d 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 0d 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 0d 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 0e 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 0e 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 0e 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 0e 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 0b 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 0b 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 0b 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 0b 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 0f 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 0f 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 0f 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 0f 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
diff --git a/gas/testsuite/gas/mep/allinsn.exp b/gas/testsuite/gas/mep/allinsn.exp
new file mode 100644
index 000000000000..259ed10b1a14
--- /dev/null
+++ b/gas/testsuite/gas/mep/allinsn.exp
@@ -0,0 +1,9 @@
+# MEP assembler testsuite. -*- Tcl -*-
+
+if [istarget mep*-*-*] {
+ foreach test {allinsn dj1 dj2} {
+ run_dump_test $test
+ run_dump_test $test.le
+ }
+ run_dump_test branch1
+}
diff --git a/gas/testsuite/gas/mep/allinsn.le.d b/gas/testsuite/gas/mep/allinsn.le.d
new file mode 100644
index 000000000000..2d9c50bad6e0
--- /dev/null
+++ b/gas/testsuite/gas/mep/allinsn.le.d
@@ -0,0 +1,1346 @@
+#as: -EL
+#objdump: -dr
+#source: allinsn.s
+#name: allinsn.le
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <sb>:
+ 0: 88 07 sb \$7,\(\$8\)
+ 2: 98 05 sb \$5,\(\$9\)
+ 4: e8 07 sb \$7,\(\$gp\)
+ 6: 88 0e sb \$gp,\(\$8\)
+ 8: e8 0f sb \$sp,\(\$gp\)
+
+0000000a <sh>:
+ a: 89 03 sh \$3,\(\$8\)
+ c: 19 0c sh \$12,\(\$1\)
+ e: 29 0d sh \$tp,\(\$2\)
+ 10: 89 02 sh \$2,\(\$8\)
+ 12: a9 0c sh \$12,\(\$10\)
+
+00000014 <sw>:
+ 14: 0a 0b sw \$11,\(\$0\)
+ 16: 7a 03 sw \$3,\(\$7\)
+ 18: ea 0d sw \$tp,\(\$gp\)
+ 1a: 9a 08 sw \$8,\(\$9\)
+ 1c: 8a 0e sw \$gp,\(\$8\)
+
+0000001e <lb>:
+ 1e: bc 0c lb \$12,\(\$11\)
+ 20: 2c 09 lb \$9,\(\$2\)
+ 22: bc 08 lb \$8,\(\$11\)
+ 24: 2c 0e lb \$gp,\(\$2\)
+ 26: cc 02 lb \$2,\(\$12\)
+
+00000028 <lh>:
+ 28: 8d 0f lh \$sp,\(\$8\)
+ 2a: ad 03 lh \$3,\(\$10\)
+ 2c: fd 09 lh \$9,\(\$sp\)
+ 2e: fd 06 lh \$6,\(\$sp\)
+ 30: bd 0f lh \$sp,\(\$11\)
+
+00000032 <lw>:
+ 32: ae 0c lw \$12,\(\$10\)
+ 34: de 09 lw \$9,\(\$tp\)
+ 36: ee 0c lw \$12,\(\$gp\)
+ 38: be 0c lw \$12,\(\$11\)
+ 3a: ae 0d lw \$tp,\(\$10\)
+
+0000003c <lbu>:
+ 3c: eb 0e lbu \$gp,\(\$gp\)
+ 3e: 8b 0c lbu \$12,\(\$8\)
+ 40: 1b 0e lbu \$gp,\(\$1\)
+ 42: cb 08 lbu \$8,\(\$12\)
+ 44: 1b 0c lbu \$12,\(\$1\)
+
+00000046 <lhu>:
+ 46: 4f 0f lhu \$sp,\(\$4\)
+ 48: 4f 0e lhu \$gp,\(\$4\)
+ 4a: 4f 05 lhu \$5,\(\$4\)
+ 4c: df 0f lhu \$sp,\(\$tp\)
+ 4e: ff 04 lhu \$4,\(\$sp\)
+
+00000050 <sw_sp>:
+ 50: 8a c9 03 00 sw \$9,3\(\$8\)
+ 54: 5a ca 04 00 sw \$10,4\(\$5\)
+ 58: ea c0 03 00 sw \$0,3\(\$gp\)
+ 5c: 8a c0 02 00 sw \$0,2\(\$8\)
+ 60: 8a cf 01 00 sw \$sp,1\(\$8\)
+
+00000064 <lw_sp>:
+ 64: 5e cd 01 00 lw \$tp,1\(\$5\)
+ 68: 0e cf 01 00 lw \$sp,1\(\$0\)
+ 6c: ce c0 04 00 lw \$0,4\(\$12\)
+ 70: de cb 01 00 lw \$11,1\(\$tp\)
+ 74: 4e c9 03 00 lw \$9,3\(\$4\)
+
+00000078 <sb_tp>:
+ 78: 18 c5 01 00 sb \$5,1\(\$1\)
+ 7c: 98 ca 01 00 sb \$10,1\(\$9\)
+ 80: 38 c5 03 00 sb \$5,3\(\$3\)
+ 84: 38 c5 01 00 sb \$5,1\(\$3\)
+ 88: 48 ca 04 00 sb \$10,4\(\$4\)
+
+0000008c <sh_tp>:
+ 8c: 09 c3 01 00 sh \$3,1\(\$0\)
+ 90: 99 cd 01 00 sh \$tp,1\(\$9\)
+ 94: a9 c9 04 00 sh \$9,4\(\$10\)
+ 98: e9 cf 03 00 sh \$sp,3\(\$gp\)
+ 9c: 99 ce 04 00 sh \$gp,4\(\$9\)
+
+000000a0 <sw_tp>:
+ a0: da c6 02 00 sw \$6,2\(\$tp\)
+ a4: fa c6 01 00 sw \$6,1\(\$sp\)
+ a8: 3a c2 02 00 sw \$2,2\(\$3\)
+ ac: ca c6 02 00 sw \$6,2\(\$12\)
+ b0: ba c3 01 00 sw \$3,1\(\$11\)
+
+000000b4 <lb_tp>:
+ b4: bc cd 04 00 lb \$tp,4\(\$11\)
+ b8: 8c cd 04 00 lb \$tp,4\(\$8\)
+ bc: 5c c5 04 00 lb \$5,4\(\$5\)
+ c0: ec cf 02 00 lb \$sp,2\(\$gp\)
+ c4: 3c c3 02 00 lb \$3,2\(\$3\)
+
+000000c8 <lh_tp>:
+ c8: 8d c7 02 00 lh \$7,2\(\$8\)
+ cc: 8d c4 03 00 lh \$4,3\(\$8\)
+ d0: fd ce 01 00 lh \$gp,1\(\$sp\)
+ d4: 0d c9 01 00 lh \$9,1\(\$0\)
+ d8: 0d cd 02 00 lh \$tp,2\(\$0\)
+
+000000dc <lw_tp>:
+ dc: 07 48 lw \$8,0x4\(\$sp\)
+ de: 9e cb 04 00 lw \$11,4\(\$9\)
+ e2: 2e ce 01 00 lw \$gp,1\(\$2\)
+ e6: ee c9 02 00 lw \$9,2\(\$gp\)
+ ea: ce c8 01 00 lw \$8,1\(\$12\)
+
+000000ee <lbu_tp>:
+ ee: 9b cc 01 00 lbu \$12,1\(\$9\)
+ f2: 9b cb 01 00 lbu \$11,1\(\$9\)
+ f6: 8b ce 03 00 lbu \$gp,3\(\$8\)
+ fa: fb c0 02 00 lbu \$0,2\(\$sp\)
+ fe: bb cd 01 00 lbu \$tp,1\(\$11\)
+
+00000102 <lhu_tp>:
+ 102: af ce 02 00 lhu \$gp,2\(\$10\)
+ 106: 8f cb 01 00 lhu \$11,1\(\$8\)
+ 10a: 0f c1 01 00 lhu \$1,1\(\$0\)
+ 10e: ff c7 02 00 lhu \$7,2\(\$sp\)
+ 112: 83 8b lhu \$3,0x2\(\$tp\)
+
+00000114 <sb16>:
+ 114: b8 c7 ff ff sb \$7,-1\(\$11\)
+ 118: e8 cd 01 00 sb \$tp,1\(\$gp\)
+ 11c: e8 c3 01 00 sb \$3,1\(\$gp\)
+ 120: 68 ce 02 00 sb \$gp,2\(\$6\)
+ 124: 78 ce 01 00 sb \$gp,1\(\$7\)
+
+00000128 <sh16>:
+ 128: 49 cc ff ff sh \$12,-1\(\$4\)
+ 12c: 19 cf 01 00 sh \$sp,1\(\$1\)
+ 130: c9 c2 fe ff sh \$2,-2\(\$12\)
+ 134: b9 c9 02 00 sh \$9,2\(\$11\)
+ 138: c9 c9 fe ff sh \$9,-2\(\$12\)
+
+0000013c <sw16>:
+ 13c: ea cb ff ff sw \$11,-1\(\$gp\)
+ 140: 06 44 sw \$4,0x4\(\$sp\)
+ 142: 3a c2 fe ff sw \$2,-2\(\$3\)
+ 146: 2a c6 ff ff sw \$6,-1\(\$2\)
+ 14a: da c8 fe ff sw \$8,-2\(\$tp\)
+
+0000014e <lb16>:
+ 14e: 2c ca fe ff lb \$10,-2\(\$2\)
+ 152: bc c3 fe ff lb \$3,-2\(\$11\)
+ 156: 5c cc 01 00 lb \$12,1\(\$5\)
+ 15a: 5c c5 01 00 lb \$5,1\(\$5\)
+ 15e: dc cb 02 00 lb \$11,2\(\$tp\)
+
+00000162 <lh16>:
+ 162: bd cf ff ff lh \$sp,-1\(\$11\)
+ 166: bd cd fe ff lh \$tp,-2\(\$11\)
+ 16a: ad c2 01 00 lh \$2,1\(\$10\)
+ 16e: 7d c8 ff ff lh \$8,-1\(\$7\)
+ 172: bd ce ff ff lh \$gp,-1\(\$11\)
+
+00000176 <lw16>:
+ 176: 5e c0 ff ff lw \$0,-1\(\$5\)
+ 17a: 7e cc fe ff lw \$12,-2\(\$7\)
+ 17e: 3e c1 fe ff lw \$1,-2\(\$3\)
+ 182: 7e c1 02 00 lw \$1,2\(\$7\)
+ 186: 8e c4 01 00 lw \$4,1\(\$8\)
+
+0000018a <lbu16>:
+ 18a: 4b cc ff ff lbu \$12,-1\(\$4\)
+ 18e: bb ce 01 00 lbu \$gp,1\(\$11\)
+ 192: db c1 ff ff lbu \$1,-1\(\$tp\)
+ 196: db c9 ff ff lbu \$9,-1\(\$tp\)
+ 19a: fb c8 01 00 lbu \$8,1\(\$sp\)
+
+0000019e <lhu16>:
+ 19e: ff cd ff ff lhu \$tp,-1\(\$sp\)
+ 1a2: 8f ce 02 00 lhu \$gp,2\(\$8\)
+ 1a6: cf cf ff ff lhu \$sp,-1\(\$12\)
+ 1aa: 0f c3 ff ff lhu \$3,-1\(\$0\)
+ 1ae: cf c3 fe ff lhu \$3,-2\(\$12\)
+
+000001b2 <sw24>:
+ 1b2: 06 eb 00 00 sw \$11,\(0x4\)
+ 1b6: 06 ef 00 00 sw \$sp,\(0x4\)
+ 1ba: 0a e7 00 00 sw \$7,\(0x8\)
+ 1be: 12 ea 00 00 sw \$10,\(0x10\)
+ 1c2: a2 e8 00 00 sw \$8,\(0xa0\)
+
+000001c6 <lw24>:
+ 1c6: 07 e4 00 00 lw \$4,\(0x4\)
+ 1ca: 07 ef 00 00 lw \$sp,\(0x4\)
+ 1ce: 13 e4 00 00 lw \$4,\(0x10\)
+ 1d2: 03 e8 00 00 lw \$8,\(0x0\)
+ 1d6: 0b ed 00 00 lw \$tp,\(0x8\)
+
+000001da <extb>:
+ 1da: 0d 1d extb \$tp
+ 1dc: 0d 1d extb \$tp
+ 1de: 0d 16 extb \$6
+ 1e0: 0d 1e extb \$gp
+ 1e2: 0d 1a extb \$10
+
+000001e4 <exth>:
+ 1e4: 2d 1f exth \$sp
+ 1e6: 2d 12 exth \$2
+ 1e8: 2d 15 exth \$5
+ 1ea: 2d 1a exth \$10
+ 1ec: 2d 14 exth \$4
+
+000001ee <extub>:
+ 1ee: 8d 12 extub \$2
+ 1f0: 8d 1d extub \$tp
+ 1f2: 8d 13 extub \$3
+ 1f4: 8d 19 extub \$9
+ 1f6: 8d 1e extub \$gp
+
+000001f8 <extuh>:
+ 1f8: ad 18 extuh \$8
+ 1fa: ad 18 extuh \$8
+ 1fc: ad 14 extuh \$4
+ 1fe: ad 10 extuh \$0
+ 200: ad 10 extuh \$0
+
+00000202 <ssarb>:
+ 202: 8c 12 ssarb 2\(\$8\)
+ 204: dc 12 ssarb 2\(\$tp\)
+ 206: dc 11 ssarb 1\(\$tp\)
+ 208: 5c 12 ssarb 2\(\$5\)
+ 20a: 9c 10 ssarb 0\(\$9\)
+
+0000020c <mov>:
+ 20c: 30 02 mov \$2,\$3
+ 20e: b0 03 mov \$3,\$11
+ 210: a0 0f mov \$sp,\$10
+ 212: 00 0f mov \$sp,\$0
+ 214: d0 03 mov \$3,\$tp
+
+00000216 <movi8>:
+ 216: ff 5b mov \$11,-1
+ 218: 02 56 mov \$6,2
+ 21a: ff 5f mov \$sp,-1
+ 21c: 01 5f mov \$sp,1
+ 21e: ff 5e mov \$gp,-1
+
+00000220 <movi16>:
+ 220: 00 5f mov \$sp,0
+ 222: 02 50 mov \$0,2
+ 224: ff 58 mov \$8,-1
+ 226: 01 5c mov \$12,1
+ 228: ff 57 mov \$7,-1
+
+0000022a <movu24>:
+ 22a: 01 d2 00 00 movu \$2,0x1
+ 22e: 11 ca 04 00 movu \$10,0x4
+ 232: 11 c9 00 00 movu \$9,0x0
+ 236: 03 d4 00 00 movu \$4,0x3
+ 23a: 11 ce 01 00 movu \$gp,0x1
+
+0000023e <movu16>:
+ 23e: 11 cf 01 00 movu \$sp,0x1
+ 242: 03 d6 00 00 movu \$6,0x3
+ 246: 03 d0 00 00 movu \$0,0x3
+ 24a: 11 ce 03 00 movu \$gp,0x3
+ 24e: 11 ca 02 00 movu \$10,0x2
+
+00000252 <movh>:
+ 252: 21 c8 02 00 movh \$8,0x2
+ 256: 21 cd 01 00 movh \$tp,0x1
+ 25a: 21 ce 02 00 movh \$gp,0x2
+ 25e: 21 cc 00 00 movh \$12,0x0
+ 262: 21 cb 02 00 movh \$11,0x2
+
+00000266 <add3>:
+ 266: 36 9b add3 \$6,\$11,\$3
+ 268: 5e 9d add3 \$gp,\$tp,\$5
+ 26a: 73 9b add3 \$3,\$11,\$7
+ 26c: dd 9e add3 \$tp,\$gp,\$tp
+ 26e: 80 9e add3 \$0,\$gp,\$8
+
+00000270 <add>:
+ 270: 08 6c add \$12,2
+ 272: fc 6c add \$12,-1
+ 274: 04 64 add \$4,1
+ 276: 04 66 add \$6,1
+ 278: 08 66 add \$6,2
+
+0000027a <add3i>:
+ 27a: 04 4b add3 \$11,\$sp,0x4
+ 27c: f0 c4 01 00 add3 \$4,\$sp,1
+ 280: 00 40 add3 \$0,\$sp,0x0
+ 282: f0 cd 03 00 add3 \$tp,\$sp,3
+ 286: 00 4b add3 \$11,\$sp,0x0
+
+00000288 <advck3>:
+ 288: a7 0e advck3 \$0,\$gp,\$10
+ 28a: 07 0d advck3 \$0,\$tp,\$0
+ 28c: d7 0e advck3 \$0,\$gp,\$tp
+ 28e: 87 07 advck3 \$0,\$7,\$8
+ 290: 27 01 advck3 \$0,\$1,\$2
+
+00000292 <sub>:
+ 292: e4 08 sub \$8,\$gp
+ 294: 94 01 sub \$1,\$9
+ 296: 74 0d sub \$tp,\$7
+ 298: 34 0f sub \$sp,\$3
+ 29a: 74 02 sub \$2,\$7
+
+0000029c <sbvck3>:
+ 29c: e5 03 sbvck3 \$0,\$3,\$gp
+ 29e: 75 03 sbvck3 \$0,\$3,\$7
+ 2a0: a5 0a sbvck3 \$0,\$10,\$10
+ 2a2: d5 04 sbvck3 \$0,\$4,\$tp
+ 2a4: f5 0a sbvck3 \$0,\$10,\$sp
+
+000002a6 <neg>:
+ 2a6: 71 0e neg \$gp,\$7
+ 2a8: 71 01 neg \$1,\$7
+ 2aa: b1 02 neg \$2,\$11
+ 2ac: 81 0d neg \$tp,\$8
+ 2ae: d1 0e neg \$gp,\$tp
+
+000002b0 <slt3>:
+ 2b0: 82 0e slt3 \$0,\$gp,\$8
+ 2b2: d2 04 slt3 \$0,\$4,\$tp
+ 2b4: e2 0a slt3 \$0,\$10,\$gp
+ 2b6: 52 0e slt3 \$0,\$gp,\$5
+ 2b8: c2 03 slt3 \$0,\$3,\$12
+
+000002ba <sltu3>:
+ 2ba: 83 02 sltu3 \$0,\$2,\$8
+ 2bc: b3 0e sltu3 \$0,\$gp,\$11
+ 2be: d3 02 sltu3 \$0,\$2,\$tp
+ 2c0: 83 09 sltu3 \$0,\$9,\$8
+ 2c2: 93 06 sltu3 \$0,\$6,\$9
+
+000002c4 <slt3i>:
+ 2c4: 11 66 slt3 \$0,\$6,0x2
+ 2c6: 09 6b slt3 \$0,\$11,0x1
+ 2c8: 01 6f slt3 \$0,\$sp,0x0
+ 2ca: 01 63 slt3 \$0,\$3,0x0
+ 2cc: 01 6d slt3 \$0,\$tp,0x0
+
+000002ce <sltu3i>:
+ 2ce: 25 6e sltu3 \$0,\$gp,0x4
+ 2d0: 1d 6d sltu3 \$0,\$tp,0x3
+ 2d2: 0d 63 sltu3 \$0,\$3,0x1
+ 2d4: 05 6c sltu3 \$0,\$12,0x0
+ 2d6: 1d 61 sltu3 \$0,\$1,0x3
+
+000002d8 <sl1ad3>:
+ 2d8: e6 28 sl1ad3 \$0,\$8,\$gp
+ 2da: 26 24 sl1ad3 \$0,\$4,\$2
+ 2dc: c6 2f sl1ad3 \$0,\$sp,\$12
+ 2de: 16 29 sl1ad3 \$0,\$9,\$1
+ 2e0: 26 28 sl1ad3 \$0,\$8,\$2
+
+000002e2 <sl2ad3>:
+ 2e2: d7 28 sl2ad3 \$0,\$8,\$tp
+ 2e4: 37 22 sl2ad3 \$0,\$2,\$3
+ 2e6: 97 28 sl2ad3 \$0,\$8,\$9
+ 2e8: c7 27 sl2ad3 \$0,\$7,\$12
+ 2ea: c7 24 sl2ad3 \$0,\$4,\$12
+
+000002ec <add3x>:
+ 2ec: b0 cd 01 00 add3 \$tp,\$11,1
+ 2f0: 40 cd ff ff add3 \$tp,\$4,-1
+ 2f4: d0 c2 01 00 add3 \$2,\$tp,1
+ 2f8: e0 c3 01 00 add3 \$3,\$gp,1
+ 2fc: f0 ca 02 00 add3 \$10,\$sp,2
+
+00000300 <slt3x>:
+ 300: 12 c8 ff ff slt3 \$8,\$1,-1
+ 304: 32 c0 fe ff slt3 \$0,\$3,-2
+ 308: f2 c9 ff ff slt3 \$9,\$sp,-1
+ 30c: 82 c3 02 00 slt3 \$3,\$8,2
+ 310: e2 cd 00 00 slt3 \$tp,\$gp,0
+
+00000314 <sltu3x>:
+ 314: b3 cf 02 00 sltu3 \$sp,\$11,0x2
+ 318: 03 c6 01 00 sltu3 \$6,\$0,0x1
+ 31c: b3 c9 03 00 sltu3 \$9,\$11,0x3
+ 320: 05 64 sltu3 \$0,\$4,0x0
+ 322: e3 cd 04 00 sltu3 \$tp,\$gp,0x4
+
+00000326 <or>:
+ 326: e0 1f or \$sp,\$gp
+ 328: 30 18 or \$8,\$3
+ 32a: f0 10 or \$0,\$sp
+ 32c: 00 1d or \$tp,\$0
+ 32e: 60 18 or \$8,\$6
+
+00000330 <and>:
+ 330: f1 1f and \$sp,\$sp
+ 332: e1 16 and \$6,\$gp
+ 334: 21 14 and \$4,\$2
+ 336: 81 15 and \$5,\$8
+ 338: e1 17 and \$7,\$gp
+
+0000033a <xor>:
+ 33a: c2 11 xor \$1,\$12
+ 33c: d2 1c xor \$12,\$tp
+ 33e: 82 1a xor \$10,\$8
+ 340: b2 1f xor \$sp,\$11
+ 342: 82 1c xor \$12,\$8
+
+00000344 <nor>:
+ 344: 53 19 nor \$9,\$5
+ 346: 23 18 nor \$8,\$2
+ 348: 93 1f nor \$sp,\$9
+ 34a: f3 15 nor \$5,\$sp
+ 34c: e3 1f nor \$sp,\$gp
+
+0000034e <or3>:
+ 34e: f4 cd 02 00 or3 \$tp,\$sp,0x2
+ 352: d4 cf 03 00 or3 \$sp,\$tp,0x3
+ 356: a4 c0 04 00 or3 \$0,\$10,0x4
+ 35a: f4 c9 03 00 or3 \$9,\$sp,0x3
+ 35e: f4 c9 00 00 or3 \$9,\$sp,0x0
+
+00000362 <and3>:
+ 362: 85 c5 01 00 and3 \$5,\$8,0x1
+ 366: e5 cb 03 00 and3 \$11,\$gp,0x3
+ 36a: 05 c6 00 00 and3 \$6,\$0,0x0
+ 36e: f5 cf 00 00 and3 \$sp,\$sp,0x0
+ 372: a5 c1 03 00 and3 \$1,\$10,0x3
+
+00000376 <xor3>:
+ 376: 06 c0 02 00 xor3 \$0,\$0,0x2
+ 37a: 66 cf 00 00 xor3 \$sp,\$6,0x0
+ 37e: 56 cd 00 00 xor3 \$tp,\$5,0x0
+ 382: 76 cf 00 00 xor3 \$sp,\$7,0x0
+ 386: f6 cf 02 00 xor3 \$sp,\$sp,0x2
+
+0000038a <sra>:
+ 38a: 1d 24 sra \$4,\$1
+ 38c: fd 28 sra \$8,\$sp
+ 38e: 1d 21 sra \$1,\$1
+ 390: 5d 20 sra \$0,\$5
+ 392: 1d 29 sra \$9,\$1
+
+00000394 <srl>:
+ 394: bc 22 srl \$2,\$11
+ 396: 7c 2f srl \$sp,\$7
+ 398: 7c 21 srl \$1,\$7
+ 39a: dc 23 srl \$3,\$tp
+ 39c: 1c 2e srl \$gp,\$1
+
+0000039e <sll>:
+ 39e: 0e 2b sll \$11,\$0
+ 3a0: 8e 2d sll \$tp,\$8
+ 3a2: 9e 28 sll \$8,\$9
+ 3a4: fe 2d sll \$tp,\$sp
+ 3a6: fe 2f sll \$sp,\$sp
+
+000003a8 <srai>:
+ 3a8: 13 61 sra \$1,0x2
+ 3aa: 1b 6f sra \$sp,0x3
+ 3ac: 1b 6f sra \$sp,0x3
+ 3ae: 23 66 sra \$6,0x4
+ 3b0: 1b 6f sra \$sp,0x3
+
+000003b2 <srli>:
+ 3b2: 02 6a srl \$10,0x0
+ 3b4: 1a 69 srl \$9,0x3
+ 3b6: 22 66 srl \$6,0x4
+ 3b8: 12 6a srl \$10,0x2
+ 3ba: 1a 68 srl \$8,0x3
+
+000003bc <slli>:
+ 3bc: 06 60 sll \$0,0x0
+ 3be: 06 64 sll \$4,0x0
+ 3c0: 16 6d sll \$tp,0x2
+ 3c2: 16 6b sll \$11,0x2
+ 3c4: 06 66 sll \$6,0x0
+
+000003c6 <sll3>:
+ 3c6: 27 6d sll3 \$0,\$tp,0x4
+ 3c8: 07 6e sll3 \$0,\$gp,0x0
+ 3ca: 17 68 sll3 \$0,\$8,0x2
+ 3cc: 17 63 sll3 \$0,\$3,0x2
+ 3ce: 07 68 sll3 \$0,\$8,0x0
+
+000003d0 <fsft>:
+ 3d0: af 2e fsft \$gp,\$10
+ 3d2: 9f 2e fsft \$gp,\$9
+ 3d4: df 2f fsft \$sp,\$tp
+ 3d6: 3f 2b fsft \$11,\$3
+ 3d8: 3f 25 fsft \$5,\$3
+
+000003da <bra>:
+ 3da: 02 b0 bra 3dc <bra\+0x2>
+ 3dc: fe bf bra 3da <bra>
+ 3de: 02 b0 bra 3e0 <bra\+0x6>
+ 3e0: 00 b0 bra 3e0 <bra\+0x6>
+ 3e2: 02 b0 bra 3e4 <beqz>
+
+000003e4 <beqz>:
+ 3e4: fe a1 beqz \$1,3e2 <bra\+0x8>
+ 3e6: 02 af beqz \$sp,3e8 <beqz\+0x4>
+ 3e8: 04 a4 beqz \$4,3ec <beqz\+0x8>
+ 3ea: 00 a4 beqz \$4,3ea <beqz\+0x6>
+ 3ec: fe a9 beqz \$9,3ea <beqz\+0x6>
+
+000003ee <bnez>:
+ 3ee: 03 a8 bnez \$8,3f0 <bnez\+0x2>
+ 3f0: 03 ad bnez \$tp,3f2 <bnez\+0x4>
+ 3f2: 01 ae bnez \$gp,3f2 <bnez\+0x4>
+ 3f4: 03 a6 bnez \$6,3f6 <bnez\+0x8>
+ 3f6: fd a8 bnez \$8,3f2 <bnez\+0x4>
+
+000003f8 <beqi>:
+ 3f8: 30 ed 00 00 beqi \$tp,0x3,3f8 <beqi>
+ 3fc: 40 e0 ff ff beqi \$0,0x4,3fa <beqi\+0x2>
+ 400: 40 ef ff ff beqi \$sp,0x4,3fe <beqi\+0x6>
+ 404: 20 ed 00 00 beqi \$tp,0x2,404 <beqi\+0xc>
+ 408: 20 e4 fc ff beqi \$4,0x2,400 <beqi\+0x8>
+
+0000040c <bnei>:
+ 40c: 14 e8 00 00 bnei \$8,0x1,40c <bnei>
+ 410: 14 e5 01 00 bnei \$5,0x1,412 <bnei\+0x6>
+ 414: 04 e5 04 00 bnei \$5,0x0,41c <bnei\+0x10>
+ 418: 44 e9 ff ff bnei \$9,0x4,416 <bnei\+0xa>
+ 41c: 44 e0 fc ff bnei \$0,0x4,414 <bnei\+0x8>
+
+00000420 <blti>:
+ 420: 3c e7 00 00 blti \$7,0x3,420 <blti>
+ 424: 1c e1 00 00 blti \$1,0x1,424 <blti\+0x4>
+ 428: 2c e8 01 00 blti \$8,0x2,42a <blti\+0xa>
+ 42c: 2c eb 01 00 blti \$11,0x2,42e <blti\+0xe>
+ 430: 3c ef ff ff blti \$sp,0x3,42e <blti\+0xe>
+
+00000434 <bgei>:
+ 434: 38 e4 fc ff bgei \$4,0x3,42c <blti\+0xc>
+ 438: 08 e7 01 00 bgei \$7,0x0,43a <bgei\+0x6>
+ 43c: 18 ed 00 00 bgei \$tp,0x1,43c <bgei\+0x8>
+ 440: 28 e5 ff ff bgei \$5,0x2,43e <bgei\+0xa>
+ 444: 48 ec fc ff bgei \$12,0x4,43c <bgei\+0x8>
+
+00000448 <beq>:
+ 448: 21 e7 ff ff beq \$7,\$2,446 <bgei\+0x12>
+ 44c: 31 e1 fc ff beq \$1,\$3,444 <bgei\+0x10>
+ 450: 01 e2 01 00 beq \$2,\$0,452 <beq\+0xa>
+ 454: 81 ef 01 00 beq \$sp,\$8,456 <beq\+0xe>
+ 458: 01 e3 00 00 beq \$3,\$0,458 <beq\+0x10>
+
+0000045c <bne>:
+ 45c: 35 e6 00 00 bne \$6,\$3,45c <bne>
+ 460: 35 ef fc ff bne \$sp,\$3,458 <beq\+0x10>
+ 464: 05 e8 01 00 bne \$8,\$0,466 <bne\+0xa>
+ 468: f5 ee 04 00 bne \$gp,\$sp,470 <bsr12>
+ 46c: 45 ef 01 00 bne \$sp,\$4,46e <bne\+0x12>
+
+00000470 <bsr12>:
+ 470: 03 b0 bsr 472 <bsr12\+0x2>
+ 472: f9 bf bsr 46a <bne\+0xe>
+ 474: f1 bf bsr 464 <bne\+0x8>
+ 476: ff bf bsr 474 <bsr12\+0x4>
+ 478: f9 bf bsr 470 <bsr12>
+
+0000047a <bsr24>:
+ 47a: 05 b0 bsr 47e <bsr24\+0x4>
+ 47c: ff bf bsr 47a <bsr24>
+ 47e: fd bf bsr 47a <bsr24>
+ 480: 01 b0 bsr 480 <bsr24\+0x6>
+ 482: 03 b0 bsr 484 <jmp>
+
+00000484 <jmp>:
+ 484: 2e 10 jmp \$2
+ 486: de 10 jmp \$tp
+ 488: 5e 10 jmp \$5
+ 48a: fe 10 jmp \$sp
+ 48c: 8e 10 jmp \$8
+
+0000048e <jmp24>:
+ 48e: 28 d8 00 00 jmp 4 <sb\+0x4>
+ 492: 18 d8 00 00 jmp 2 <sb\+0x2>
+ 496: 08 d8 00 00 jmp 0 <sb>
+ 49a: 18 d8 00 00 jmp 2 <sb\+0x2>
+ 49e: 28 d8 00 00 jmp 4 <sb\+0x4>
+
+000004a2 <jsr>:
+ 4a2: ff 10 jsr \$sp
+ 4a4: df 10 jsr \$tp
+ 4a6: df 10 jsr \$tp
+ 4a8: 6f 10 jsr \$6
+ 4aa: 6f 10 jsr \$6
+
+000004ac <ret>:
+ 4ac: 02 70 ret
+
+000004ae <repeat>:
+ 4ae: 09 e4 01 00 repeat \$4,4b0 <repeat\+0x2>
+ 4b2: 09 e8 02 00 repeat \$8,4b6 <repeat\+0x8>
+ 4b6: 09 e0 04 00 repeat \$0,4be <repeat\+0x10>
+ 4ba: 09 e6 01 00 repeat \$6,4bc <repeat\+0xe>
+ 4be: 09 e4 01 00 repeat \$4,4c0 <repeat\+0x12>
+
+000004c2 <erepeat>:
+ 4c2: 19 e0 01 00 erepeat 4c4 <erepeat\+0x2>
+ 4c6: 19 e0 00 00 erepeat 4c6 <erepeat\+0x4>
+ 4ca: 19 e0 01 00 erepeat 4cc <erepeat\+0xa>
+ 4ce: 19 e0 ff ff erepeat 4cc <erepeat\+0xa>
+ 4d2: 19 e0 00 00 erepeat 4d2 <erepeat\+0x10>
+
+000004d6 <stc>:
+ 4d6: e8 7d stc \$tp,\$mb1
+ 4d8: c9 7d stc \$tp,\$ccfg
+ 4da: 89 7b stc \$11,\$dbg
+ 4dc: c9 7a stc \$10,\$ccfg
+ 4de: 39 79 stc \$9,\$epc
+
+000004e0 <ldc>:
+ 4e0: 8a 7d ldc \$tp,\$lo
+ 4e2: 7b 78 ldc \$8,\$npc
+ 4e4: ca 79 ldc \$9,\$mb0
+ 4e6: 2a 7f ldc \$sp,\$sar
+ 4e8: cb 79 ldc \$9,\$ccfg
+
+000004ea <di>:
+ 4ea: 00 70 di
+
+000004ec <ei>:
+ 4ec: 10 70 ei
+
+000004ee <reti>:
+ 4ee: 12 70 reti
+
+000004f0 <halt>:
+ 4f0: 22 70 halt
+
+000004f2 <swi>:
+ 4f2: 26 70 swi 0x2
+ 4f4: 06 70 swi 0x0
+ 4f6: 26 70 swi 0x2
+ 4f8: 36 70 swi 0x3
+ 4fa: 16 70 swi 0x1
+
+000004fc <break>:
+ 4fc: 32 70 break
+
+000004fe <syncm>:
+ 4fe: 11 70 syncm
+
+00000500 <stcb>:
+ 500: 04 f5 04 00 stcb \$5,0x4
+ 504: 04 f5 01 00 stcb \$5,0x1
+ 508: 04 fe 00 00 stcb \$gp,0x0
+ 50c: 04 ff 04 00 stcb \$sp,0x4
+ 510: 04 fb 02 00 stcb \$11,0x2
+
+00000514 <ldcb>:
+ 514: 14 f2 03 00 ldcb \$2,0x3
+ 518: 14 f2 04 00 ldcb \$2,0x4
+ 51c: 14 f9 01 00 ldcb \$9,0x1
+ 520: 14 fa 04 00 ldcb \$10,0x4
+ 524: 14 f1 04 00 ldcb \$1,0x4
+
+00000528 <bsetm>:
+ 528: a0 20 bsetm \(\$10\),0x0
+ 52a: f0 20 bsetm \(\$sp\),0x0
+ 52c: 10 22 bsetm \(\$1\),0x2
+ 52e: f0 24 bsetm \(\$sp\),0x4
+ 530: 80 24 bsetm \(\$8\),0x4
+
+00000532 <bclrm>:
+ 532: 51 20 bclrm \(\$5\),0x0
+ 534: 51 22 bclrm \(\$5\),0x2
+ 536: 81 20 bclrm \(\$8\),0x0
+ 538: 91 22 bclrm \(\$9\),0x2
+ 53a: 51 23 bclrm \(\$5\),0x3
+
+0000053c <bnotm>:
+ 53c: e2 24 bnotm \(\$gp\),0x4
+ 53e: b2 24 bnotm \(\$11\),0x4
+ 540: a2 20 bnotm \(\$10\),0x0
+ 542: d2 24 bnotm \(\$tp\),0x4
+ 544: 82 20 bnotm \(\$8\),0x0
+
+00000546 <btstm>:
+ 546: e3 20 btstm \$0,\(\$gp\),0x0
+ 548: e3 21 btstm \$0,\(\$gp\),0x1
+ 54a: b3 20 btstm \$0,\(\$11\),0x0
+ 54c: e3 23 btstm \$0,\(\$gp\),0x3
+ 54e: 83 22 btstm \$0,\(\$8\),0x2
+
+00000550 <tas>:
+ 550: d4 27 tas \$7,\(\$tp\)
+ 552: c4 27 tas \$7,\(\$12\)
+ 554: 84 23 tas \$3,\(\$8\)
+ 556: 54 22 tas \$2,\(\$5\)
+ 558: a4 26 tas \$6,\(\$10\)
+
+0000055a <cache>:
+ 55a: d4 71 cache 0x1,\(\$tp\)
+ 55c: c4 73 cache 0x3,\(\$12\)
+ 55e: 94 73 cache 0x3,\(\$9\)
+ 560: 24 74 cache 0x4,\(\$2\)
+ 562: 74 74 cache 0x4,\(\$7\)
+
+00000564 <mul>:
+ 564: e4 18 mul \$8,\$gp
+ 566: 94 12 mul \$2,\$9
+ 568: f4 1e mul \$gp,\$sp
+ 56a: 74 19 mul \$9,\$7
+ 56c: b4 17 mul \$7,\$11
+
+0000056e <mulu>:
+ 56e: 55 12 mulu \$2,\$5
+ 570: e5 16 mulu \$6,\$gp
+ 572: f5 1e mulu \$gp,\$sp
+ 574: e5 1b mulu \$11,\$gp
+ 576: 95 13 mulu \$3,\$9
+
+00000578 <mulr>:
+ 578: 66 1c mulr \$12,\$6
+ 57a: 86 1d mulr \$tp,\$8
+ 57c: a6 17 mulr \$7,\$10
+ 57e: 16 1e mulr \$gp,\$1
+ 580: f6 10 mulr \$0,\$sp
+
+00000582 <mulru>:
+ 582: 27 14 mulru \$4,\$2
+ 584: 17 1e mulru \$gp,\$1
+ 586: 47 1f mulru \$sp,\$4
+ 588: 67 1a mulru \$10,\$6
+ 58a: e7 10 mulru \$0,\$gp
+
+0000058c <madd>:
+ 58c: b1 f4 04 30 madd \$4,\$11
+ 590: e1 ff 04 30 madd \$sp,\$gp
+ 594: f1 fe 04 30 madd \$gp,\$sp
+ 598: d1 f4 04 30 madd \$4,\$tp
+ 59c: e1 f1 04 30 madd \$1,\$gp
+
+000005a0 <maddu>:
+ 5a0: 11 f0 05 30 maddu \$0,\$1
+ 5a4: 61 f7 05 30 maddu \$7,\$6
+ 5a8: 51 f9 05 30 maddu \$9,\$5
+ 5ac: f1 fe 05 30 maddu \$gp,\$sp
+ 5b0: d1 f7 05 30 maddu \$7,\$tp
+
+000005b4 <maddr>:
+ 5b4: 81 f6 06 30 maddr \$6,\$8
+ 5b8: e1 f9 06 30 maddr \$9,\$gp
+ 5bc: e1 f8 06 30 maddr \$8,\$gp
+ 5c0: 21 f3 06 30 maddr \$3,\$2
+ 5c4: b1 f1 06 30 maddr \$1,\$11
+
+000005c8 <maddru>:
+ 5c8: 31 fa 07 30 maddru \$10,\$3
+ 5cc: c1 ff 07 30 maddru \$sp,\$12
+ 5d0: 81 f8 07 30 maddru \$8,\$8
+ 5d4: 31 fe 07 30 maddru \$gp,\$3
+ 5d8: f1 f8 07 30 maddru \$8,\$sp
+
+000005dc <div>:
+ 5dc: 38 19 div \$9,\$3
+ 5de: e8 14 div \$4,\$gp
+ 5e0: c8 12 div \$2,\$12
+ 5e2: d8 18 div \$8,\$tp
+ 5e4: 68 1d div \$tp,\$6
+
+000005e6 <divu>:
+ 5e6: 59 19 divu \$9,\$5
+ 5e8: d9 18 divu \$8,\$tp
+ 5ea: e9 10 divu \$0,\$gp
+ 5ec: 59 19 divu \$9,\$5
+ 5ee: 59 10 divu \$0,\$5
+
+000005f0 <dret>:
+ 5f0: 13 70 dret
+
+000005f2 <dbreak>:
+ 5f2: 33 70 dbreak
+
+000005f4 <ldz>:
+ 5f4: 41 fe 00 00 ldz \$gp,\$4
+ 5f8: b1 fa 00 00 ldz \$10,\$11
+ 5fc: 91 f9 00 00 ldz \$9,\$9
+ 600: d1 ff 00 00 ldz \$sp,\$tp
+ 604: 31 fe 00 00 ldz \$gp,\$3
+
+00000608 <abs>:
+ 608: 91 ff 03 00 abs \$sp,\$9
+ 60c: 41 f5 03 00 abs \$5,\$4
+ 610: d1 fd 03 00 abs \$tp,\$tp
+ 614: 31 f0 03 00 abs \$0,\$3
+ 618: e1 f3 03 00 abs \$3,\$gp
+
+0000061c <ave>:
+ 61c: a1 fb 02 00 ave \$11,\$10
+ 620: a1 f8 02 00 ave \$8,\$10
+ 624: 21 fe 02 00 ave \$gp,\$2
+ 628: c1 fa 02 00 ave \$10,\$12
+ 62c: 81 ff 02 00 ave \$sp,\$8
+
+00000630 <min>:
+ 630: 31 f8 04 00 min \$8,\$3
+ 634: 01 f7 04 00 min \$7,\$0
+ 638: 21 f2 04 00 min \$2,\$2
+ 63c: 61 f5 04 00 min \$5,\$6
+ 640: 51 fb 04 00 min \$11,\$5
+
+00000644 <max>:
+ 644: f1 fb 05 00 max \$11,\$sp
+ 648: 01 fe 05 00 max \$gp,\$0
+ 64c: f1 fc 05 00 max \$12,\$sp
+ 650: 21 fe 05 00 max \$gp,\$2
+ 654: f1 fe 05 00 max \$gp,\$sp
+
+00000658 <minu>:
+ 658: 81 fb 06 00 minu \$11,\$8
+ 65c: 51 f7 06 00 minu \$7,\$5
+ 660: e1 f8 06 00 minu \$8,\$gp
+ 664: 41 fb 06 00 minu \$11,\$4
+ 668: f1 f2 06 00 minu \$2,\$sp
+
+0000066c <maxu>:
+ 66c: 31 f3 07 00 maxu \$3,\$3
+ 670: 01 fd 07 00 maxu \$tp,\$0
+ 674: 81 f4 07 00 maxu \$4,\$8
+ 678: 21 fe 07 00 maxu \$gp,\$2
+ 67c: 81 fc 07 00 maxu \$12,\$8
+
+00000680 <clip>:
+ 680: 01 fa 08 10 clip \$10,0x1
+ 684: 01 ff 20 10 clip \$sp,0x4
+ 688: 01 f4 18 10 clip \$4,0x3
+ 68c: 01 ff 18 10 clip \$sp,0x3
+ 690: 01 f1 00 10 clip \$1,0x0
+
+00000694 <clipu>:
+ 694: 01 fa 21 10 clipu \$10,0x4
+ 698: 01 fd 09 10 clipu \$tp,0x1
+ 69c: 01 f5 21 10 clipu \$5,0x4
+ 6a0: 01 fe 01 10 clipu \$gp,0x0
+ 6a4: 01 f5 09 10 clipu \$5,0x1
+
+000006a8 <sadd>:
+ 6a8: 01 f5 08 00 sadd \$5,\$0
+ 6ac: 31 ff 08 00 sadd \$sp,\$3
+ 6b0: a1 f0 08 00 sadd \$0,\$10
+ 6b4: c1 ff 08 00 sadd \$sp,\$12
+ 6b8: 21 f4 08 00 sadd \$4,\$2
+
+000006bc <ssub>:
+ 6bc: a1 f1 0a 00 ssub \$1,\$10
+ 6c0: 71 f4 0a 00 ssub \$4,\$7
+ 6c4: 31 f8 0a 00 ssub \$8,\$3
+ 6c8: e1 f7 0a 00 ssub \$7,\$gp
+ 6cc: 41 fd 0a 00 ssub \$tp,\$4
+
+000006d0 <saddu>:
+ 6d0: e1 f9 09 00 saddu \$9,\$gp
+ 6d4: a1 f0 09 00 saddu \$0,\$10
+ 6d8: c1 f7 09 00 saddu \$7,\$12
+ 6dc: f1 f5 09 00 saddu \$5,\$sp
+ 6e0: 31 fd 09 00 saddu \$tp,\$3
+
+000006e4 <ssubu>:
+ 6e4: e1 ff 0b 00 ssubu \$sp,\$gp
+ 6e8: f1 f0 0b 00 ssubu \$0,\$sp
+ 6ec: a1 f3 0b 00 ssubu \$3,\$10
+ 6f0: d1 ff 0b 00 ssubu \$sp,\$tp
+ 6f4: 91 f2 0b 00 ssubu \$2,\$9
+
+000006f8 <swcp>:
+ 6f8: d8 33 swcp \$c3,\(\$tp\)
+ 6fa: d8 3f swcp \$c15,\(\$tp\)
+ 6fc: 08 3d swcp \$c13,\(\$0\)
+ 6fe: c8 3c swcp \$c12,\(\$12\)
+ 700: e8 39 swcp \$c9,\(\$gp\)
+
+00000702 <lwcp>:
+ 702: 39 37 lwcp \$c7,\(\$3\)
+ 704: 39 36 lwcp \$c6,\(\$3\)
+ 706: 29 30 lwcp \$c0,\(\$2\)
+ 708: 89 38 lwcp \$c8,\(\$8\)
+ 70a: d9 3b lwcp \$c11,\(\$tp\)
+
+0000070c <smcp>:
+ 70c: 9a 3e smcp \$c14,\(\$9\)
+ 70e: 8a 32 smcp \$c2,\(\$8\)
+ 710: fa 3e smcp \$c14,\(\$sp\)
+ 712: 8a 3a smcp \$c10,\(\$8\)
+ 714: 8a 32 smcp \$c2,\(\$8\)
+
+00000716 <lmcp>:
+ 716: 1b 3b lmcp \$c11,\(\$1\)
+ 718: 8b 38 lmcp \$c8,\(\$8\)
+ 71a: db 3b lmcp \$c11,\(\$tp\)
+ 71c: 0b 38 lmcp \$c8,\(\$0\)
+ 71e: eb 38 lmcp \$c8,\(\$gp\)
+
+00000720 <swcpi>:
+ 720: 00 37 swcpi \$c7,\(\$0\+\)
+ 722: e0 36 swcpi \$c6,\(\$gp\+\)
+ 724: 80 3c swcpi \$c12,\(\$8\+\)
+ 726: f0 3e swcpi \$c14,\(\$sp\+\)
+ 728: 00 36 swcpi \$c6,\(\$0\+\)
+
+0000072a <lwcpi>:
+ 72a: 21 38 lwcpi \$c8,\(\$2\+\)
+ 72c: 01 39 lwcpi \$c9,\(\$0\+\)
+ 72e: e1 33 lwcpi \$c3,\(\$gp\+\)
+ 730: 51 3d lwcpi \$c13,\(\$5\+\)
+ 732: e1 3b lwcpi \$c11,\(\$gp\+\)
+
+00000734 <smcpi>:
+ 734: 22 38 smcpi \$c8,\(\$2\+\)
+ 736: 92 3b smcpi \$c11,\(\$9\+\)
+ 738: 32 34 smcpi \$c4,\(\$3\+\)
+ 73a: 22 3e smcpi \$c14,\(\$2\+\)
+ 73c: 32 39 smcpi \$c9,\(\$3\+\)
+
+0000073e <lmcpi>:
+ 73e: e3 36 lmcpi \$c6,\(\$gp\+\)
+ 740: 53 39 lmcpi \$c9,\(\$5\+\)
+ 742: 63 3a lmcpi \$c10,\(\$6\+\)
+ 744: 63 31 lmcpi \$c1,\(\$6\+\)
+ 746: 83 32 lmcpi \$c2,\(\$8\+\)
+
+00000748 <swcp16>:
+ 748: 2c f0 ff ff swcp \$c0,-1\(\$2\)
+ 74c: ac f5 01 00 swcp \$c5,1\(\$10\)
+ 750: cc f8 02 00 swcp \$c8,2\(\$12\)
+ 754: 1c fe ff ff swcp \$c14,-1\(\$1\)
+ 758: 3c fc 02 00 swcp \$c12,2\(\$3\)
+
+0000075c <lwcp16>:
+ 75c: 5d f8 ff ff lwcp \$c8,-1\(\$5\)
+ 760: fd fc 01 00 lwcp \$c12,1\(\$sp\)
+ 764: 0d f1 02 00 lwcp \$c1,2\(\$0\)
+ 768: dd f4 01 00 lwcp \$c4,1\(\$tp\)
+ 76c: bd f6 02 00 lwcp \$c6,2\(\$11\)
+
+00000770 <smcp16>:
+ 770: ae f9 ff ff smcp \$c9,-1\(\$10\)
+ 774: ee fe 01 00 smcp \$c14,1\(\$gp\)
+ 778: fe f3 02 00 smcp \$c3,2\(\$sp\)
+ 77c: 8e ff fe ff smcp \$c15,-2\(\$8\)
+ 780: de fd 01 00 smcp \$c13,1\(\$tp\)
+
+00000784 <lmcp16>:
+ 784: ff f0 01 00 lmcp \$c0,1\(\$sp\)
+ 788: 8f ff 01 00 lmcp \$c15,1\(\$8\)
+ 78c: 8f f2 ff ff lmcp \$c2,-1\(\$8\)
+ 790: 8f fe 01 00 lmcp \$c14,1\(\$8\)
+ 794: af f1 ff ff lmcp \$c1,-1\(\$10\)
+
+00000798 <sbcpa>:
+ 798: f5 fe 02 00 sbcpa \$c14,\(\$sp\+\),2
+ 79c: 45 f2 fe 00 sbcpa \$c2,\(\$4\+\),-2
+ 7a0: 15 f8 00 00 sbcpa \$c8,\(\$1\+\),0
+ 7a4: 35 fb 00 00 sbcpa \$c11,\(\$3\+\),0
+ 7a8: e5 f9 fe 00 sbcpa \$c9,\(\$gp\+\),-2
+
+000007ac <lbcpa>:
+ 7ac: 25 f7 fe 40 lbcpa \$c7,\(\$2\+\),-2
+ 7b0: f5 fc 02 40 lbcpa \$c12,\(\$sp\+\),2
+ 7b4: 45 f5 fe 40 lbcpa \$c5,\(\$4\+\),-2
+ 7b8: 45 f7 fe 40 lbcpa \$c7,\(\$4\+\),-2
+ 7bc: f5 f8 00 40 lbcpa \$c8,\(\$sp\+\),0
+
+000007c0 <shcpa>:
+ 7c0: e5 f0 00 10 shcpa \$c0,\(\$gp\+\),0
+ 7c4: f5 fc 10 10 shcpa \$c12,\(\$sp\+\),16
+ 7c8: 45 f1 04 10 shcpa \$c1,\(\$4\+\),4
+ 7cc: 45 f5 e0 10 shcpa \$c5,\(\$4\+\),-32
+ 7d0: f5 f1 00 10 shcpa \$c1,\(\$sp\+\),0
+
+000007d4 <lhcpa>:
+ 7d4: 45 f4 00 50 lhcpa \$c4,\(\$4\+\),0
+ 7d8: 55 f6 30 50 lhcpa \$c6,\(\$5\+\),48
+ 7dc: 65 f3 cc 50 lhcpa \$c3,\(\$6\+\),-52
+ 7e0: 65 f8 e8 50 lhcpa \$c8,\(\$6\+\),-24
+ 7e4: 95 f0 00 50 lhcpa \$c0,\(\$9\+\),0
+
+000007e8 <swcpa>:
+ 7e8: 95 f1 10 20 swcpa \$c1,\(\$9\+\),16
+ 7ec: f5 f7 20 20 swcpa \$c7,\(\$sp\+\),32
+ 7f0: c5 f3 30 20 swcpa \$c3,\(\$12\+\),48
+ 7f4: 95 fa 08 20 swcpa \$c10,\(\$9\+\),8
+ 7f8: 85 fe 04 20 swcpa \$c14,\(\$8\+\),4
+
+000007fc <lwcpa>:
+ 7fc: e5 f6 f8 60 lwcpa \$c6,\(\$gp\+\),-8
+ 800: 75 f4 04 60 lwcpa \$c4,\(\$7\+\),4
+ 804: e5 fb f0 60 lwcpa \$c11,\(\$gp\+\),-16
+ 808: f5 fa e0 60 lwcpa \$c10,\(\$sp\+\),-32
+ 80c: 25 f2 08 60 lwcpa \$c2,\(\$2\+\),8
+
+00000810 <smcpa>:
+ 810: f5 fd f8 30 smcpa \$c13,\(\$sp\+\),-8
+ 814: 75 f6 f8 30 smcpa \$c6,\(\$7\+\),-8
+ 818: 35 f5 10 30 smcpa \$c5,\(\$3\+\),16
+ 81c: f5 fd 10 30 smcpa \$c13,\(\$sp\+\),16
+ 820: c5 f3 30 30 smcpa \$c3,\(\$12\+\),48
+
+00000824 <lmcpa>:
+ 824: 45 f9 00 70 lmcpa \$c9,\(\$4\+\),0
+ 828: f5 f3 f0 70 lmcpa \$c3,\(\$sp\+\),-16
+ 82c: d5 ff 08 70 lmcpa \$c15,\(\$tp\+\),8
+ 830: 85 f8 f8 70 lmcpa \$c8,\(\$8\+\),-8
+ 834: 95 fa 00 70 lmcpa \$c10,\(\$9\+\),0
+
+00000838 <sbcpm0>:
+ 838: d5 fa 08 08 sbcpm0 \$c10,\(\$tp\+\),8
+ 83c: 55 fd f8 08 sbcpm0 \$c13,\(\$5\+\),-8
+ 840: 55 f4 f8 08 sbcpm0 \$c4,\(\$5\+\),-8
+ 844: d5 fa 10 08 sbcpm0 \$c10,\(\$tp\+\),16
+ 848: 55 f4 e8 08 sbcpm0 \$c4,\(\$5\+\),-24
+
+0000084c <lbcpm0>:
+ 84c: 45 f0 00 48 lbcpm0 \$c0,\(\$4\+\),0
+ 850: 75 f9 f8 48 lbcpm0 \$c9,\(\$7\+\),-8
+ 854: 85 fc 18 48 lbcpm0 \$c12,\(\$8\+\),24
+ 858: c5 f8 10 48 lbcpm0 \$c8,\(\$12\+\),16
+ 85c: 85 f7 10 48 lbcpm0 \$c7,\(\$8\+\),16
+
+00000860 <shcpm0>:
+ 860: d5 f2 02 18 shcpm0 \$c2,\(\$tp\+\),2
+ 864: f5 f7 fe 18 shcpm0 \$c7,\(\$sp\+\),-2
+ 868: 25 f8 02 18 shcpm0 \$c8,\(\$2\+\),2
+ 86c: 55 fd 00 18 shcpm0 \$c13,\(\$5\+\),0
+ 870: e5 f3 08 18 shcpm0 \$c3,\(\$gp\+\),8
+
+00000874 <lhcpm0>:
+ 874: 45 f7 08 58 lhcpm0 \$c7,\(\$4\+\),8
+ 878: 35 f3 fe 58 lhcpm0 \$c3,\(\$3\+\),-2
+ 87c: 15 f3 00 58 lhcpm0 \$c3,\(\$1\+\),0
+ 880: e5 f2 00 58 lhcpm0 \$c2,\(\$gp\+\),0
+ 884: 65 fc 02 58 lhcpm0 \$c12,\(\$6\+\),2
+
+00000888 <swcpm0>:
+ 888: 85 f8 20 28 swcpm0 \$c8,\(\$8\+\),32
+ 88c: f5 f9 00 28 swcpm0 \$c9,\(\$sp\+\),0
+ 890: 25 f9 f0 28 swcpm0 \$c9,\(\$2\+\),-16
+ 894: e5 f0 30 28 swcpm0 \$c0,\(\$gp\+\),48
+ 898: 15 ff 08 28 swcpm0 \$c15,\(\$1\+\),8
+
+0000089c <lwcpm0>:
+ 89c: a5 fe fc 68 lwcpm0 \$c14,\(\$10\+\),-4
+ 8a0: f5 fb fc 68 lwcpm0 \$c11,\(\$sp\+\),-4
+ 8a4: 75 f5 f8 68 lwcpm0 \$c5,\(\$7\+\),-8
+ 8a8: c5 f2 20 68 lwcpm0 \$c2,\(\$12\+\),32
+ 8ac: e5 f2 10 68 lwcpm0 \$c2,\(\$gp\+\),16
+
+000008b0 <smcpm0>:
+ 8b0: c5 f1 08 38 smcpm0 \$c1,\(\$12\+\),8
+ 8b4: 45 f8 f0 38 smcpm0 \$c8,\(\$4\+\),-16
+ 8b8: b5 fa 00 38 smcpm0 \$c10,\(\$11\+\),0
+ 8bc: 35 f1 f0 38 smcpm0 \$c1,\(\$3\+\),-16
+ 8c0: f5 fb f8 38 smcpm0 \$c11,\(\$sp\+\),-8
+
+000008c4 <lmcpm0>:
+ 8c4: a5 fe 00 78 lmcpm0 \$c14,\(\$10\+\),0
+ 8c8: f5 f6 f0 78 lmcpm0 \$c6,\(\$sp\+\),-16
+ 8cc: 15 fd 08 78 lmcpm0 \$c13,\(\$1\+\),8
+ 8d0: d5 fa e8 78 lmcpm0 \$c10,\(\$tp\+\),-24
+ 8d4: e5 f7 e8 78 lmcpm0 \$c7,\(\$gp\+\),-24
+
+000008d8 <sbcpm1>:
+ 8d8: 85 f9 00 0c sbcpm1 \$c9,\(\$8\+\),0
+ 8dc: c5 f7 e8 0c sbcpm1 \$c7,\(\$12\+\),-24
+ 8e0: 55 ff e8 0c sbcpm1 \$c15,\(\$5\+\),-24
+ 8e4: d5 f5 10 0c sbcpm1 \$c5,\(\$tp\+\),16
+ 8e8: 15 f6 80 0c sbcpm1 \$c6,\(\$1\+\),-128
+
+000008ec <lbcpm1>:
+ 8ec: e5 f6 02 4c lbcpm1 \$c6,\(\$gp\+\),2
+ 8f0: d5 f7 fe 4c lbcpm1 \$c7,\(\$tp\+\),-2
+ 8f4: d5 f4 01 4c lbcpm1 \$c4,\(\$tp\+\),1
+ 8f8: 25 fc fe 4c lbcpm1 \$c12,\(\$2\+\),-2
+ 8fc: 75 fb 01 4c lbcpm1 \$c11,\(\$7\+\),1
+
+00000900 <shcpm1>:
+ 900: 85 f4 18 1c shcpm1 \$c4,\(\$8\+\),24
+ 904: 65 fb f0 1c shcpm1 \$c11,\(\$6\+\),-16
+ 908: 85 f7 08 1c shcpm1 \$c7,\(\$8\+\),8
+ 90c: c5 f5 10 1c shcpm1 \$c5,\(\$12\+\),16
+ 910: 85 f0 e0 1c shcpm1 \$c0,\(\$8\+\),-32
+
+00000914 <lhcpm1>:
+ 914: 05 fb 00 5c lhcpm1 \$c11,\(\$0\+\),0
+ 918: d5 f7 fe 5c lhcpm1 \$c7,\(\$tp\+\),-2
+ 91c: 85 fa 08 5c lhcpm1 \$c10,\(\$8\+\),8
+ 920: d5 f3 00 5c lhcpm1 \$c3,\(\$tp\+\),0
+ 924: 65 f9 02 5c lhcpm1 \$c9,\(\$6\+\),2
+
+00000928 <swcpm1>:
+ 928: 85 f9 18 2c swcpm1 \$c9,\(\$8\+\),24
+ 92c: e5 f9 00 2c swcpm1 \$c9,\(\$gp\+\),0
+ 930: 85 f9 10 2c swcpm1 \$c9,\(\$8\+\),16
+ 934: 15 fe 00 2c swcpm1 \$c14,\(\$1\+\),0
+ 938: f5 f2 08 2c swcpm1 \$c2,\(\$sp\+\),8
+
+0000093c <lwcpm1>:
+ 93c: 85 f8 00 6c lwcpm1 \$c8,\(\$8\+\),0
+ 940: e5 f3 f0 6c lwcpm1 \$c3,\(\$gp\+\),-16
+ 944: 65 f7 f8 6c lwcpm1 \$c7,\(\$6\+\),-8
+ 948: 85 fe e8 6c lwcpm1 \$c14,\(\$8\+\),-24
+ 94c: 85 f3 18 6c lwcpm1 \$c3,\(\$8\+\),24
+
+00000950 <smcpm1>:
+ 950: 45 fa 00 3c smcpm1 \$c10,\(\$4\+\),0
+ 954: f5 f6 f0 3c smcpm1 \$c6,\(\$sp\+\),-16
+ 958: 75 fd e8 3c smcpm1 \$c13,\(\$7\+\),-24
+ 95c: e5 f3 f8 3c smcpm1 \$c3,\(\$gp\+\),-8
+ 960: 25 f0 08 3c smcpm1 \$c0,\(\$2\+\),8
+
+00000964 <lmcpm1>:
+ 964: 15 fc 00 7c lmcpm1 \$c12,\(\$1\+\),0
+ 968: 65 f0 08 7c lmcpm1 \$c0,\(\$6\+\),8
+ 96c: 25 f6 f8 7c lmcpm1 \$c6,\(\$2\+\),-8
+ 970: e5 fc f0 7c lmcpm1 \$c12,\(\$gp\+\),-16
+ 974: f5 fe 30 7c lmcpm1 \$c14,\(\$sp\+\),48
+
+00000... <bcpeq>:
+ ...: 44 d8 00 00 bcpeq 0x4,... <bcpeq>
+ ...: 04 d8 ff ff bcpeq 0x0,... <bcpeq\+0x2>
+ ...: 44 d8 ff ff bcpeq 0x4,... <bcpeq\+0x6>
+ ...: 14 d8 01 00 bcpeq 0x1,... <bcpeq\+0xe>
+ ...: 24 d8 01 00 bcpeq 0x2,... <bcpeq\+0x12>
+
+00000... <bcpne>:
+ ...: 25 d8 00 00 bcpne 0x2,... <bcpne>
+ ...: 45 d8 00 00 bcpne 0x4,... <bcpne\+0x4>
+ ...: 15 d8 00 00 bcpne 0x1,... <bcpne\+0x8>
+ ...: 45 d8 00 00 bcpne 0x4,... <bcpne\+0xc>
+ ...: 15 d8 01 00 bcpne 0x1,... <bcpne\+0x12>
+
+00000... <bcpat>:
+ ...: 16 d8 ff ff bcpat 0x1,... <bcpne\+0x12>
+ ...: 06 d8 01 00 bcpat 0x0,... <bcpat\+0x6>
+ ...: 06 d8 ff ff bcpat 0x0,... <bcpat\+0x6>
+ ...: 26 d8 00 00 bcpat 0x2,... <bcpat\+0xc>
+ ...: 16 d8 ff ff bcpat 0x1,... <bcpat\+0xe>
+
+00000... <bcpaf>:
+ ...: 47 d8 00 00 bcpaf 0x4,... <bcpaf>
+ ...: 37 d8 00 00 bcpaf 0x3,... <bcpaf\+0x4>
+ ...: 47 d8 00 00 bcpaf 0x4,... <bcpaf\+0x8>
+ ...: 17 d8 01 00 bcpaf 0x1,... <bcpaf\+0xe>
+ ...: 47 d8 01 00 bcpaf 0x4,... <bcpaf\+0x12>
+
+00000... <synccp>:
+ ...: 21 70 synccp
+
+00000... <jsrv>:
+ ...: bf 18 jsrv \$11
+ ...: 5f 18 jsrv \$5
+ ...: af 18 jsrv \$10
+ ...: cf 18 jsrv \$12
+ ...: af 18 jsrv \$10
+
+00000... <bsrv>:
+ ...: fb df ff ff bsrv ... <jsrv\+0x8>
+ ...: fb df ff ff bsrv ... <bsrv\+0x2>
+ ...: fb df ff ff bsrv ... <bsrv\+0x6>
+ ...: 1b d8 00 00 bsrv ... <bsrv\+0xe>
+ ...: 0b d8 00 00 bsrv ... <bsrv\+0x10>
+
+00000... <case106341>:
+ ...: 78 7a stc \$10,\$hi
+ ...: 8a 70 ldc \$0,\$lo
+
+00000... <case106821>:
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 08 c0 01 00 sb \$0,1\(\$0\)
+ ...: 08 c0 01 00 sb \$0,1\(\$0\)
+ ...: 08 c0 00 00 sb \$0,0\(\$0\)
+ ...: 08 c0 00 00 sb \$0,0\(\$0\)
+ ...: 08 c0 01 00 sb \$0,1\(\$0\)
+ ...: 08 c0 01 00 sb \$0,1\(\$0\)
+ ...: 09 c0 01 00 sh \$0,1\(\$0\)
+ ...: 09 c0 01 00 sh \$0,1\(\$0\)
+ ...: 09 c0 00 00 sh \$0,0\(\$0\)
+ ...: 09 c0 00 00 sh \$0,0\(\$0\)
+ ...: 09 c0 01 00 sh \$0,1\(\$0\)
+ ...: 09 c0 01 00 sh \$0,1\(\$0\)
+ ...: 0a c0 01 00 sw \$0,1\(\$0\)
+ ...: 0a c0 01 00 sw \$0,1\(\$0\)
+ ...: 0a c0 00 00 sw \$0,0\(\$0\)
+ ...: 0a c0 00 00 sw \$0,0\(\$0\)
+ ...: 0a c0 01 00 sw \$0,1\(\$0\)
+ ...: 0a c0 01 00 sw \$0,1\(\$0\)
+ ...: 0c c0 01 00 lb \$0,1\(\$0\)
+ ...: 0c c0 01 00 lb \$0,1\(\$0\)
+ ...: 0c c0 00 00 lb \$0,0\(\$0\)
+ ...: 0c c0 00 00 lb \$0,0\(\$0\)
+ ...: 0c c0 01 00 lb \$0,1\(\$0\)
+ ...: 0c c0 01 00 lb \$0,1\(\$0\)
+ ...: 0d c0 01 00 lh \$0,1\(\$0\)
+ ...: 0d c0 01 00 lh \$0,1\(\$0\)
+ ...: 0d c0 00 00 lh \$0,0\(\$0\)
+ ...: 0d c0 00 00 lh \$0,0\(\$0\)
+ ...: 0d c0 01 00 lh \$0,1\(\$0\)
+ ...: 0d c0 01 00 lh \$0,1\(\$0\)
+ ...: 0e c0 01 00 lw \$0,1\(\$0\)
+ ...: 0e c0 01 00 lw \$0,1\(\$0\)
+ ...: 0e c0 00 00 lw \$0,0\(\$0\)
+ ...: 0e c0 00 00 lw \$0,0\(\$0\)
+ ...: 0e c0 01 00 lw \$0,1\(\$0\)
+ ...: 0e c0 01 00 lw \$0,1\(\$0\)
+ ...: 0b c0 01 00 lbu \$0,1\(\$0\)
+ ...: 0b c0 01 00 lbu \$0,1\(\$0\)
+ ...: 0b c0 00 00 lbu \$0,0\(\$0\)
+ ...: 0b c0 00 00 lbu \$0,0\(\$0\)
+ ...: 0b c0 01 00 lbu \$0,1\(\$0\)
+ ...: 0b c0 01 00 lbu \$0,1\(\$0\)
+ ...: 0f c0 01 00 lhu \$0,1\(\$0\)
+ ...: 0f c0 01 00 lhu \$0,1\(\$0\)
+ ...: 0f c0 00 00 lhu \$0,0\(\$0\)
+ ...: 0f c0 00 00 lhu \$0,0\(\$0\)
+ ...: 0f c0 01 00 lhu \$0,1\(\$0\)
+ ...: 0f c0 01 00 lhu \$0,1\(\$0\)
+ ...: 08 c0 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 08 c0 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 08 c0 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 08 c0 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 09 c0 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 09 c0 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 09 c0 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 09 c0 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 0a c0 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 0a c0 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 0a c0 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 0a c0 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 0c c0 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 0c c0 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 0c c0 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 0c c0 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 0d c0 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 0d c0 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 0d c0 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 0d c0 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 0e c0 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 0e c0 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 0e c0 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 0e c0 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 0b c0 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 0b c0 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 0b c0 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 0b c0 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 0f c0 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 0f c0 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 0f c0 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 0f c0 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
diff --git a/gas/testsuite/gas/mep/allinsn.s b/gas/testsuite/gas/mep/allinsn.s
new file mode 100644
index 000000000000..784337c865d3
--- /dev/null
+++ b/gas/testsuite/gas/mep/allinsn.s
@@ -0,0 +1,1536 @@
+ .data
+foodata: .word 42
+ .text
+footext:
+ .text
+ .global sb
+sb:
+ sb $7,($fp)
+ sb $5,($9)
+ sb $7,($14)
+ sb $14,($fp)
+ sb $15,($14)
+ .text
+ .global sh
+sh:
+ sh $3,($fp)
+ sh $12,($1)
+ sh $13,($2)
+ sh $2,($8)
+ sh $12,($10)
+ .text
+ .global sw
+sw:
+ sw $11,($0)
+ sw $3,($7)
+ sw $13,($14)
+ sw $8,($9)
+ sw $gp,($fp)
+ .text
+ .global lb
+lb:
+ lb $12,($11)
+ lb $9,($2)
+ lb $fp,($11)
+ lb $gp,($2)
+ lb $2,($12)
+ .text
+ .global lh
+lh:
+ lh $15,($8)
+ lh $3,($10)
+ lh $9,($sp)
+ lh $6,($sp)
+ lh $15,($11)
+ .text
+ .global lw
+lw:
+ lw $12,($10)
+ lw $9,($13)
+ lw $12,($gp)
+ lw $12,($11)
+ lw $13,($10)
+ .text
+ .global lbu
+lbu:
+ lbu $14,($14)
+ lbu $12,($fp)
+ lbu $gp,($1)
+ lbu $fp,($12)
+ lbu $12,($1)
+ .text
+ .global lhu
+lhu:
+ lhu $15,($4)
+ lhu $14,($4)
+ lhu $5,($4)
+ lhu $sp,($tp)
+ lhu $4,($15)
+ .text
+ .global sw_sp
+sw_sp:
+ sw $9,3($8)
+ sw $10,4($5)
+ sw $0,3($gp)
+ sw $0,2($8)
+ sw $15,1($8)
+ .text
+ .global lw_sp
+lw_sp:
+ lw $tp,1($5)
+ lw $15,1($0)
+ lw $0,4($12)
+ lw $11,1($tp)
+ lw $9,3($4)
+ .text
+ .global sb_tp
+sb_tp:
+ sb $5,1($1)
+ sb $10,1($9)
+ sb $5,3($3)
+ sb $5,1($3)
+ sb $10,4($4)
+ .text
+ .global sh_tp
+sh_tp:
+ sh $3,1($0)
+ sh $tp,1($9)
+ sh $9,4($10)
+ sh $15,3($14)
+ sh $14,4($9)
+ .text
+ .global sw_tp
+sw_tp:
+ sw $6,2($13)
+ sw $6,1($15)
+ sw $2,2($3)
+ sw $6,2($12)
+ sw $3,1($11)
+ .text
+ .global lb_tp
+lb_tp:
+ lb $tp,4($11)
+ lb $13,4($8)
+ lb $5,4($5)
+ lb $sp,2($gp)
+ lb $3,2($3)
+ .text
+ .global lh_tp
+lh_tp:
+ lh $7,2($fp)
+ lh $4,3($8)
+ lh $14,1($sp)
+ lh $9,1($0)
+ lh $13,2($0)
+ .text
+ .global lw_tp
+lw_tp:
+ lw $8,4($15)
+ lw $11,4($9)
+ lw $gp,1($2)
+ lw $9,2($14)
+ lw $8,1($12)
+ .text
+ .global lbu_tp
+lbu_tp:
+ lbu $12,1($9)
+ lbu $11,1($9)
+ lbu $14,3($8)
+ lbu $0,2($sp)
+ lbu $13,1($11)
+ .text
+ .global lhu_tp
+lhu_tp:
+ lhu $14,2($10)
+ lhu $11,1($8)
+ lhu $1,1($0)
+ lhu $7,2($15)
+ lhu $3,2($tp)
+ .text
+ .global sb16
+sb16:
+ sb $7,-1($11)
+ sb $tp,1($gp)
+ sb $3,1($gp)
+ sb $14,2($6)
+ sb $14,1($7)
+ .text
+ .global sh16
+sh16:
+ sh $12,-1($4)
+ sh $sp,1($1)
+ sh $2,-2($12)
+ sh $9,2($11)
+ sh $9,-2($12)
+ .text
+ .global sw16
+sw16:
+ sw $11,-1($gp)
+ sw $4,4($15)
+ sw $2,-2($3)
+ sw $6,-1($2)
+ sw $fp,-2($tp)
+ .text
+ .global lb16
+lb16:
+ lb $10,-2($2)
+ lb $3,-2($11)
+ lb $12,1($5)
+ lb $5,1($5)
+ lb $11,2($13)
+ .text
+ .global lh16
+lh16:
+ lh $sp,-1($11)
+ lh $tp,-2($11)
+ lh $2,1($10)
+ lh $8,-1($7)
+ lh $14,-1($11)
+ .text
+ .global lw16
+lw16:
+ lw $0,-1($5)
+ lw $12,-2($7)
+ lw $1,-2($3)
+ lw $1,2($7)
+ lw $4,1($fp)
+ .text
+ .global lbu16
+lbu16:
+ lbu $12,-1($4)
+ lbu $14,1($11)
+ lbu $1,-1($13)
+ lbu $9,-1($tp)
+ lbu $8,1($15)
+ .text
+ .global lhu16
+lhu16:
+ lhu $tp,-1($15)
+ lhu $gp,2($fp)
+ lhu $15,-1($12)
+ lhu $3,-1($0)
+ lhu $3,-2($12)
+ .text
+ .global sw24
+sw24:
+ sw $11,(4)
+ sw $sp,(4)
+ sw $7,(8)
+ sw $10,(16)
+ sw $8,(160)
+ .text
+ .global lw24
+lw24:
+ lw $4,(4)
+ lw $sp,(4)
+ lw $4,(16)
+ lw $fp,(0)
+ lw $tp,(8)
+ .text
+ .global extb
+extb:
+ extb $13
+ extb $tp
+ extb $6
+ extb $14
+ extb $10
+ .text
+ .global exth
+exth:
+ exth $15
+ exth $2
+ exth $5
+ exth $10
+ exth $4
+ .text
+ .global extub
+extub:
+ extub $2
+ extub $tp
+ extub $3
+ extub $9
+ extub $gp
+ .text
+ .global extuh
+extuh:
+ extuh $8
+ extuh $8
+ extuh $4
+ extuh $0
+ extuh $0
+ .text
+ .global ssarb
+ssarb:
+ ssarb 2($fp)
+ ssarb 2($13)
+ ssarb 1($13)
+ ssarb 2($5)
+ ssarb 0($9)
+ .text
+ .global mov
+mov:
+ mov $2,$3
+ mov $3,$11
+ mov $15,$10
+ mov $15,$0
+ mov $3,$tp
+ .text
+ .global movi8
+movi8:
+ mov $11,-1
+ mov $6,2
+ mov $sp,-1
+ mov $sp,1
+ mov $gp,-1
+ .text
+ .global movi16
+movi16:
+ mov $15,0
+ mov $0,2
+ mov $8,-1
+ mov $12,1
+ mov $7,-1
+ .text
+ .global movu24
+movu24:
+ movu $2,1
+ movu $10,4
+ movu $9,0
+ movu $4,3
+ movu $14,1
+ .text
+ .global movu16
+movu16:
+ movu $sp,1
+ movu $6,3
+ movu $0,3
+ movu $gp,3
+ movu $10,2
+ .text
+ .global movh
+movh:
+ movh $8,2
+ movh $13,1
+ movh $gp,2
+ movh $12,0
+ movh $11,2
+ .text
+ .global add3
+add3:
+ add3 $6,$11,$3
+ add3 $14,$13,$5
+ add3 $3,$11,$7
+ add3 $13,$14,$13
+ add3 $0,$14,$8
+ .text
+ .global add
+add:
+ add $12,2
+ add $12,-1
+ add $4,1
+ add $6,1
+ add $6,2
+ .text
+ .global add3i
+add3i:
+ add3 $11,$sp,4
+ add3 $4,$sp,1
+ add3 $0,$sp,0
+ add3 $13,$sp,3
+ add3 $11,$sp,0
+ .text
+ .global advck3
+advck3:
+ advck3 $0,$gp,$10
+ advck3 $0,$tp,$0
+ advck3 $0,$gp,$13
+ advck3 $0,$7,$fp
+ advck3 $0,$1,$2
+ .text
+ .global sub
+sub:
+ sub $8,$14
+ sub $1,$9
+ sub $13,$7
+ sub $15,$3
+ sub $2,$7
+ .text
+ .global sbvck3
+sbvck3:
+ sbvck3 $0,$3,$gp
+ sbvck3 $0,$3,$7
+ sbvck3 $0,$10,$10
+ sbvck3 $0,$4,$tp
+ sbvck3 $0,$10,$15
+ .text
+ .global neg
+neg:
+ neg $14,$7
+ neg $1,$7
+ neg $2,$11
+ neg $13,$fp
+ neg $14,$13
+ .text
+ .global slt3
+slt3:
+ slt3 $0,$14,$8
+ slt3 $0,$4,$13
+ slt3 $0,$10,$14
+ slt3 $0,$14,$5
+ slt3 $0,$3,$12
+ .text
+ .global sltu3
+sltu3:
+ sltu3 $0,$2,$8
+ sltu3 $0,$gp,$11
+ sltu3 $0,$2,$tp
+ sltu3 $0,$9,$fp
+ sltu3 $0,$6,$9
+ .text
+ .global slt3i
+slt3i:
+ slt3 $0,$6,2
+ slt3 $0,$11,1
+ slt3 $0,$15,0
+ slt3 $0,$3,0
+ slt3 $0,$tp,0
+ .text
+ .global sltu3i
+sltu3i:
+ sltu3 $0,$14,4
+ sltu3 $0,$tp,3
+ sltu3 $0,$3,1
+ sltu3 $0,$12,0
+ sltu3 $0,$1,3
+ .text
+ .global sl1ad3
+sl1ad3:
+ sl1ad3 $0,$fp,$gp
+ sl1ad3 $0,$4,$2
+ sl1ad3 $0,$sp,$12
+ sl1ad3 $0,$9,$1
+ sl1ad3 $0,$fp,$2
+ .text
+ .global sl2ad3
+sl2ad3:
+ sl2ad3 $0,$8,$13
+ sl2ad3 $0,$2,$3
+ sl2ad3 $0,$8,$9
+ sl2ad3 $0,$7,$12
+ sl2ad3 $0,$4,$12
+ .text
+ .global add3x
+add3x:
+ add3 $tp,$11,1
+ add3 $tp,$4,-1
+ add3 $2,$13,1
+ add3 $3,$gp,1
+ add3 $10,$15,2
+ .text
+ .global slt3x
+slt3x:
+ slt3 $fp,$1,-1
+ slt3 $0,$3,-2
+ slt3 $9,$15,-1
+ slt3 $3,$fp,2
+ slt3 $tp,$14,0
+ .text
+ .global sltu3x
+sltu3x:
+ sltu3 $15,$11,2
+ sltu3 $6,$0,1
+ sltu3 $9,$11,3
+ sltu3 $0,$4,0
+ sltu3 $13,$gp,4
+ .text
+ .global or
+or:
+ or $sp,$gp
+ or $fp,$3
+ or $0,$sp
+ or $tp,$0
+ or $8,$6
+ .text
+ .global and
+and:
+ and $15,$sp
+ and $6,$14
+ and $4,$2
+ and $5,$fp
+ and $7,$14
+ .text
+ .global xor
+xor:
+ xor $1,$12
+ xor $12,$tp
+ xor $10,$8
+ xor $sp,$11
+ xor $12,$8
+ .text
+ .global nor
+nor:
+ nor $9,$5
+ nor $8,$2
+ nor $15,$9
+ nor $5,$sp
+ nor $sp,$14
+ .text
+ .global or3
+or3:
+ or3 $13,$sp,2
+ or3 $sp,$tp,3
+ or3 $0,$10,4
+ or3 $9,$15,3
+ or3 $9,$sp,0
+ .text
+ .global and3
+and3:
+ and3 $5,$8,1
+ and3 $11,$gp,3
+ and3 $6,$0,0
+ and3 $sp,$sp,0
+ and3 $1,$10,3
+ .text
+ .global xor3
+xor3:
+ xor3 $0,$0,2
+ xor3 $15,$6,0
+ xor3 $13,$5,0
+ xor3 $15,$7,0
+ xor3 $15,$sp,2
+ .text
+ .global sra
+sra:
+ sra $4,$1
+ sra $fp,$15
+ sra $1,$1
+ sra $0,$5
+ sra $9,$1
+ .text
+ .global srl
+srl:
+ srl $2,$11
+ srl $15,$7
+ srl $1,$7
+ srl $3,$13
+ srl $14,$1
+ .text
+ .global sll
+sll:
+ sll $11,$0
+ sll $tp,$fp
+ sll $8,$9
+ sll $13,$15
+ sll $sp,$sp
+ .text
+ .global srai
+srai:
+ sra $1,2
+ sra $15,3
+ sra $sp,3
+ sra $6,4
+ sra $sp,3
+ .text
+ .global srli
+srli:
+ srl $10,0
+ srl $9,3
+ srl $6,4
+ srl $10,2
+ srl $8,3
+ .text
+ .global slli
+slli:
+ sll $0,0
+ sll $4,0
+ sll $13,2
+ sll $11,2
+ sll $6,0
+ .text
+ .global sll3
+sll3:
+ sll3 $0,$tp,4
+ sll3 $0,$14,0
+ sll3 $0,$8,2
+ sll3 $0,$3,2
+ sll3 $0,$fp,0
+ .text
+ .global fsft
+fsft:
+ fsft $gp,$10
+ fsft $gp,$9
+ fsft $15,$13
+ fsft $11,$3
+ fsft $5,$3
+ .text
+ .global bra
+bra:
+ bra 2
+ bra -2
+ bra 2
+ bra 0
+ bra 2
+ .text
+ .global beqz
+beqz:
+ beqz $1,-2
+ beqz $sp,2
+ beqz $4,4
+ beqz $4,0
+ beqz $9,-2
+ .text
+ .global bnez
+bnez:
+ bnez $8,2
+ bnez $13,2
+ bnez $gp,0
+ bnez $6,2
+ bnez $8,-4
+ .text
+ .global beqi
+beqi:
+ beqi $tp,3,0
+ beqi $0,4,-2
+ beqi $sp,4,-2
+ beqi $13,2,0
+ beqi $4,2,-8
+ .text
+ .global bnei
+bnei:
+ bnei $8,1,0
+ bnei $5,1,2
+ bnei $5,0,8
+ bnei $9,4,-2
+ bnei $0,4,-8
+ .text
+ .global blti
+blti:
+ blti $7,3,0
+ blti $1,1,0
+ blti $8,2,2
+ blti $11,2,2
+ blti $15,3,-2
+ .text
+ .global bgei
+bgei:
+ bgei $4,3,-8
+ bgei $7,0,2
+ bgei $13,1,0
+ bgei $5,2,-2
+ bgei $12,4,-8
+ .text
+ .global beq
+beq:
+ beq $7,$2,-2
+ beq $1,$3,-8
+ beq $2,$0,2
+ beq $sp,$fp,2
+ beq $3,$0,0
+ .text
+ .global bne
+bne:
+ bne $6,$3,0
+ bne $sp,$3,-8
+ bne $8,$0,2
+ bne $gp,$sp,8
+ bne $sp,$4,2
+ .text
+ .global bsr12
+bsr12:
+ bsr 2
+ bsr -8
+ bsr -16
+ bsr -2
+ bsr -8
+ .text
+ .global bsr24
+bsr24:
+ bsr 4
+ bsr -2
+ bsr -4
+ bsr 0
+ bsr 2
+ .text
+ .global jmp
+jmp:
+ jmp $2
+ jmp $tp
+ jmp $5
+ jmp $sp
+ jmp $fp
+ .text
+ .global jmp24
+jmp24:
+ jmp 4
+ jmp 2
+ jmp 0
+ jmp 2
+ jmp 4
+ .text
+ .global jsr
+jsr:
+ jsr $15
+ jsr $13
+ jsr $13
+ jsr $6
+ jsr $6
+ .text
+ .global ret
+ret:
+ ret
+ .text
+ .global repeat
+repeat:
+ repeat $4,2
+ repeat $fp,4
+ repeat $0,8
+ repeat $6,2
+ repeat $4,2
+ .text
+ .global erepeat
+erepeat:
+ erepeat 2
+ erepeat 0
+ erepeat 2
+ erepeat -2
+ erepeat 0
+ .text
+ .global stc
+stc:
+ stc $13,$mb1
+ stc $tp,$ccfg
+ stc $11,$dbg
+ stc $10,$ccfg
+ stc $9,$epc
+ .text
+ .global ldc
+ldc:
+ ldc $tp,$lo
+ ldc $8,$npc
+ ldc $9,$mb0
+ ldc $15,$sar
+ ldc $9,$ccfg
+ .text
+ .global di
+di:
+ di
+ .text
+ .global ei
+ei:
+ ei
+ .text
+ .global reti
+reti:
+ reti
+ .text
+ .global halt
+halt:
+ halt
+ .text
+ .global swi
+swi:
+ swi 2
+ swi 0
+ swi 2
+ swi 3
+ swi 1
+ .text
+ .global break
+break:
+ break
+ .text
+ .global sycnm
+syncm:
+ syncm
+ .text
+ .global stcb
+stcb:
+ stcb $5,4
+ stcb $5,1
+ stcb $gp,0
+ stcb $15,4
+ stcb $11,2
+ .text
+ .global ldcb
+ldcb:
+ ldcb $2,3
+ ldcb $2,4
+ ldcb $9,1
+ ldcb $10,4
+ ldcb $1,4
+ .text
+ .global bsetm
+bsetm:
+ bsetm ($10),0
+ bsetm ($sp),0
+ bsetm ($1),2
+ bsetm ($sp),4
+ bsetm ($8),4
+ .text
+ .global bclrm
+bclrm:
+ bclrm ($5),0
+ bclrm ($5),2
+ bclrm ($8),0
+ bclrm ($9),2
+ bclrm ($5),3
+ .text
+ .global bnotm
+bnotm:
+ bnotm ($14),4
+ bnotm ($11),4
+ bnotm ($10),0
+ bnotm ($tp),4
+ bnotm ($fp),0
+ .text
+ .global btstm
+btstm:
+ btstm $0,($14),0
+ btstm $0,($14),1
+ btstm $0,($11),0
+ btstm $0,($14),3
+ btstm $0,($fp),2
+ .text
+ .global tas
+tas:
+ tas $7,($tp)
+ tas $7,($12)
+ tas $3,($fp)
+ tas $2,($5)
+ tas $6,($10)
+ .text
+ .global cache
+cache:
+ cache 1,($13)
+ cache 3,($12)
+ cache 3,($9)
+ cache 4,($2)
+ cache 4,($7)
+ .text
+ .global mul
+mul:
+ mul $8,$14
+ mul $2,$9
+ mul $14,$15
+ mul $9,$7
+ mul $7,$11
+ .text
+ .global mulu
+mulu:
+ mulu $2,$5
+ mulu $6,$gp
+ mulu $gp,$sp
+ mulu $11,$14
+ mulu $3,$9
+ .text
+ .global mulr
+mulr:
+ mulr $12,$6
+ mulr $13,$8
+ mulr $7,$10
+ mulr $gp,$1
+ mulr $0,$15
+ .text
+ .global mulru
+mulru:
+ mulru $4,$2
+ mulru $14,$1
+ mulru $15,$4
+ mulru $10,$6
+ mulru $0,$gp
+ .text
+ .global madd
+madd:
+ madd $4,$11
+ madd $15,$14
+ madd $14,$sp
+ madd $4,$tp
+ madd $1,$gp
+ .text
+ .global maddu
+maddu:
+ maddu $0,$1
+ maddu $7,$6
+ maddu $9,$5
+ maddu $gp,$15
+ maddu $7,$13
+ .text
+ .global maddr
+maddr:
+ maddr $6,$fp
+ maddr $9,$14
+ maddr $8,$gp
+ maddr $3,$2
+ maddr $1,$11
+ .text
+ .global maddru
+maddru:
+ maddru $10,$3
+ maddru $15,$12
+ maddru $8,$fp
+ maddru $14,$3
+ maddru $fp,$15
+ .text
+ .global div
+div:
+ div $9,$3
+ div $4,$14
+ div $2,$12
+ div $fp,$tp
+ div $tp,$6
+ .text
+ .global divu
+divu:
+ divu $9,$5
+ divu $8,$13
+ divu $0,$14
+ divu $9,$5
+ divu $0,$5
+ .text
+ .global dret
+dret:
+ dret
+ .text
+ .global dbreak
+dbreak:
+ dbreak
+ .text
+ .global ldz
+ldz:
+ ldz $gp,$4
+ ldz $10,$11
+ ldz $9,$9
+ ldz $15,$tp
+ ldz $gp,$3
+ .text
+ .global abs
+abs:
+ abs $sp,$9
+ abs $5,$4
+ abs $tp,$13
+ abs $0,$3
+ abs $3,$14
+ .text
+ .global ave
+ave:
+ ave $11,$10
+ ave $fp,$10
+ ave $14,$2
+ ave $10,$12
+ ave $15,$8
+ .text
+ .global min
+min:
+ min $8,$3
+ min $7,$0
+ min $2,$2
+ min $5,$6
+ min $11,$5
+ .text
+ .global max
+max:
+ max $11,$sp
+ max $gp,$0
+ max $12,$sp
+ max $gp,$2
+ max $14,$sp
+ .text
+ .global minu
+minu:
+ minu $11,$8
+ minu $7,$5
+ minu $fp,$14
+ minu $11,$4
+ minu $2,$sp
+ .text
+ .global maxu
+maxu:
+ maxu $3,$3
+ maxu $13,$0
+ maxu $4,$fp
+ maxu $gp,$2
+ maxu $12,$fp
+ .text
+ .global clip
+clip:
+ clip $10,1
+ clip $15,4
+ clip $4,3
+ clip $15,3
+ clip $1,0
+ .text
+ .global clipu
+clipu:
+ clipu $10,4
+ clipu $13,1
+ clipu $5,4
+ clipu $14,0
+ clipu $5,1
+ .text
+ .global sadd
+sadd:
+ sadd $5,$0
+ sadd $15,$3
+ sadd $0,$10
+ sadd $sp,$12
+ sadd $4,$2
+ .text
+ .global ssub
+ssub:
+ ssub $1,$10
+ ssub $4,$7
+ ssub $fp,$3
+ ssub $7,$gp
+ ssub $13,$4
+ .text
+ .global saddu
+saddu:
+ saddu $9,$14
+ saddu $0,$10
+ saddu $7,$12
+ saddu $5,$15
+ saddu $13,$3
+ .text
+ .global ssubu
+ssubu:
+ ssubu $15,$gp
+ ssubu $0,$15
+ ssubu $3,$10
+ ssubu $sp,$13
+ ssubu $2,$9
+ .text
+ .global swcp
+swcp:
+ swcp $c3,($13)
+ swcp $c15,($13)
+ swcp $c13,($0)
+ swcp $c12,($12)
+ swcp $c9,($gp)
+ .text
+ .global lwcp
+lwcp:
+ lwcp $c7,($3)
+ lwcp $c6,($3)
+ lwcp $c0,($2)
+ lwcp $c8,($fp)
+ lwcp $c11,($13)
+ .text
+ .global smcp
+smcp:
+ smcp $c14,($9)
+ smcp $c2,($fp)
+ smcp $c14,($15)
+ smcp $c10,($8)
+ smcp $c2,($8)
+ .text
+ .global lmcp
+lmcp:
+ lmcp $c11,($1)
+ lmcp $c8,($8)
+ lmcp $c11,($13)
+ lmcp $c8,($0)
+ lmcp $c8,($14)
+ .text
+ .global swcpi
+swcpi:
+ swcpi $c7,($0+)
+ swcpi $c6,($gp+)
+ swcpi $c12,($8+)
+ swcpi $c14,($15+)
+ swcpi $c6,($0+)
+ .text
+ .global lwcpi
+lwcpi:
+ lwcpi $c8,($2+)
+ lwcpi $c9,($0+)
+ lwcpi $c3,($14+)
+ lwcpi $c13,($5+)
+ lwcpi $c11,($gp+)
+ .text
+ .global smcpi
+smcpi:
+ smcpi $c8,($2+)
+ smcpi $c11,($9+)
+ smcpi $c4,($3+)
+ smcpi $c14,($2+)
+ smcpi $c9,($3+)
+ .text
+ .global lmcpi
+lmcpi:
+ lmcpi $c6,($14+)
+ lmcpi $c9,($5+)
+ lmcpi $c10,($6+)
+ lmcpi $c1,($6+)
+ lmcpi $c2,($8+)
+ .text
+ .global swcp16
+swcp16:
+ swcp $c0,-1($2)
+ swcp $c5,1($10)
+ swcp $c8,2($12)
+ swcp $c14,-1($1)
+ swcp $c12,2($3)
+ .text
+ .global lwcp16
+lwcp16:
+ lwcp $c8,-1($5)
+ lwcp $c12,1($15)
+ lwcp $c1,2($0)
+ lwcp $c4,1($13)
+ lwcp $c6,2($11)
+ .text
+ .global smcp16
+smcp16:
+ smcp $c9,-1($10)
+ smcp $c14,1($gp)
+ smcp $c3,2($sp)
+ smcp $c15,-2($8)
+ smcp $c13,1($13)
+ .text
+ .global lmcp16
+lmcp16:
+ lmcp $c0,1($15)
+ lmcp $c15,1($fp)
+ lmcp $c2,-1($8)
+ lmcp $c14,1($fp)
+ lmcp $c1,-1($10)
+ .text
+ .global sbcpa
+sbcpa:
+ sbcpa $c14,($sp+),2
+ sbcpa $c2,($4+),-2
+ sbcpa $c8,($1+),0
+ sbcpa $c11,($3+),0
+ sbcpa $c9,($14+),-2
+ .text
+ .global lbcpa
+lbcpa:
+ lbcpa $c7,($2+),-2
+ lbcpa $c12,($sp+),2
+ lbcpa $c5,($4+),-2
+ lbcpa $c7,($4+),-2
+ lbcpa $c8,($15+),0
+ .text
+ .global shcpa
+shcpa:
+ shcpa $c0,($14+),0
+ shcpa $c12,($sp+),16
+ shcpa $c1,($4+),4
+ shcpa $c5,($4+),-32
+ shcpa $c1,($15+),0
+ .text
+ .global lhcpa
+lhcpa:
+ lhcpa $c4,($4+),0
+ lhcpa $c6,($5+),48
+ lhcpa $c3,($6+),-52
+ lhcpa $c8,($6+),-24
+ lhcpa $c0,($9+),0
+ .text
+ .global swcpa
+swcpa:
+ swcpa $c1,($9+),16
+ swcpa $c7,($sp+),32
+ swcpa $c3,($12+),48
+ swcpa $c10,($9+),8
+ swcpa $c14,($8+),4
+ .text
+ .global lwcpa
+lwcpa:
+ lwcpa $c6,($gp+),-8
+ lwcpa $c4,($7+),4
+ lwcpa $c11,($gp+),-16
+ lwcpa $c10,($sp+),-32
+ lwcpa $c2,($2+),8
+ .text
+ .global smcpa
+smcpa:
+ smcpa $c13,($15+),-8
+ smcpa $c6,($7+),-8
+ smcpa $c5,($3+),16
+ smcpa $c13,($15+),16
+ smcpa $c3,($12+),48
+ .text
+ .global lmcpa
+lmcpa:
+ lmcpa $c9,($4+),0
+ lmcpa $c3,($sp+),-16
+ lmcpa $c15,($13+),8
+ lmcpa $c8,($8+),-8
+ lmcpa $c10,($9+),0
+ .text
+ .global sbcpm0
+sbcpm0:
+ sbcpm0 $c10,($13+),8
+ sbcpm0 $c13,($5+),-8
+ sbcpm0 $c4,($5+),-8
+ sbcpm0 $c10,($tp+),16
+ sbcpm0 $c4,($5+),-24
+ .text
+ .global lbcpm0
+lbcpm0:
+ lbcpm0 $c0,($4+),0
+ lbcpm0 $c9,($7+),-8
+ lbcpm0 $c12,($fp+),24
+ lbcpm0 $c8,($12+),16
+ lbcpm0 $c7,($fp+),16
+ .text
+ .global shcpm0
+shcpm0:
+ shcpm0 $c2,($13+),2
+ shcpm0 $c7,($15+),-2
+ shcpm0 $c8,($2+),2
+ shcpm0 $c13,($5+),0
+ shcpm0 $c3,($14+),8
+ .text
+ .global lhcpm0
+lhcpm0:
+ lhcpm0 $c7,($4+),8
+ lhcpm0 $c3,($3+),-2
+ lhcpm0 $c3,($1+),0
+ lhcpm0 $c2,($gp+),0
+ lhcpm0 $c12,($6+),2
+ .text
+ .global swcpm0
+swcpm0:
+ swcpm0 $c8,($fp+),32
+ swcpm0 $c9,($sp+),0
+ swcpm0 $c9,($2+),-16
+ swcpm0 $c0,($14+),48
+ swcpm0 $c15,($1+),8
+ .text
+ .global lwcpm0
+lwcpm0:
+ lwcpm0 $c14,($10+),-4
+ lwcpm0 $c11,($sp+),-4
+ lwcpm0 $c5,($7+),-8
+ lwcpm0 $c2,($12+),32
+ lwcpm0 $c2,($gp+),16
+ .text
+ .global smcpm0
+smcpm0:
+ smcpm0 $c1,($12+),8
+ smcpm0 $c8,($4+),-16
+ smcpm0 $c10,($11+),0
+ smcpm0 $c1,($3+),-16
+ smcpm0 $c11,($sp+),-8
+ .text
+ .global lmcpm0
+lmcpm0:
+ lmcpm0 $c14,($10+),0
+ lmcpm0 $c6,($15+),-16
+ lmcpm0 $c13,($1+),8
+ lmcpm0 $c10,($tp+),-24
+ lmcpm0 $c7,($14+),-24
+ .text
+ .global sbcpm1
+sbcpm1:
+ sbcpm1 $c9,($fp+),0
+ sbcpm1 $c7,($12+),-24
+ sbcpm1 $c15,($5+),-24
+ sbcpm1 $c5,($tp+),16
+ sbcpm1 $c6,($1+),-128
+ .text
+ .global lbcpm1
+lbcpm1:
+ lbcpm1 $c6,($gp+),2
+ lbcpm1 $c7,($tp+),-2
+ lbcpm1 $c4,($13+),1
+ lbcpm1 $c12,($2+),-2
+ lbcpm1 $c11,($7+),1
+ .text
+ .global shcpm1
+shcpm1:
+ shcpm1 $c4,($fp+),24
+ shcpm1 $c11,($6+),-16
+ shcpm1 $c7,($8+),8
+ shcpm1 $c5,($12+),16
+ shcpm1 $c0,($8+),-32
+ .text
+ .global lhcpm1
+lhcpm1:
+ lhcpm1 $c11,($0+),0
+ lhcpm1 $c7,($tp+),-2
+ lhcpm1 $c10,($8+),8
+ lhcpm1 $c3,($tp+),0
+ lhcpm1 $c9,($6+),2
+ .text
+ .global swcpm1
+swcpm1:
+ swcpm1 $c9,($8+),24
+ swcpm1 $c9,($14+),0
+ swcpm1 $c9,($fp+),16
+ swcpm1 $c14,($1+),0
+ swcpm1 $c2,($sp+),8
+ .text
+ .global lwcpm1
+lwcpm1:
+ lwcpm1 $c8,($fp+),0
+ lwcpm1 $c3,($14+),-16
+ lwcpm1 $c7,($6+),-8
+ lwcpm1 $c14,($fp+),-24
+ lwcpm1 $c3,($fp+),24
+ .text
+ .global smcpm1
+smcpm1:
+ smcpm1 $c10,($4+),0
+ smcpm1 $c6,($sp+),-16
+ smcpm1 $c13,($7+),-24
+ smcpm1 $c3,($gp+),-8
+ smcpm1 $c0,($2+),8
+ .text
+ .global lmcpm1
+lmcpm1:
+ lmcpm1 $c12,($1+),0
+ lmcpm1 $c0,($6+),8
+ lmcpm1 $c6,($2+),-8
+ lmcpm1 $c12,($gp+),-16
+ lmcpm1 $c14,($15+),48
+/*
+ .text
+ .global cmov1
+cmov1:
+ cmov $c11,$10
+ cmov $c14,$3
+ cmov $c3,$15
+ cmov $c6,$5
+ cmov $c6,$10
+ .text
+ .global cmov2
+cmov2:
+ cmov $11,$c2
+ cmov $10,$c2
+ cmov $tp,$c10
+ cmov $12,$c9
+ cmov $15,$c3
+ .text
+ .global cmovc1
+cmovc1:
+ cmovc $ccr9,$sp
+ cmovc $ccr12,$fp
+ cmovc $ccr1,$4
+ cmovc $ccr11,$sp
+ cmovc $ccr14,$7
+ .text
+ .global cmovc2
+cmovc2:
+ cmovc $fp,$ccr6
+ cmovc $fp,$ccr6
+ cmovc $7,$ccr8
+ cmovc $sp,$ccr12
+ cmovc $sp,$ccr5
+ .text
+ .global cmovh1
+cmovh1:
+ cmovh $c8,$1
+ cmovh $c12,$sp
+ cmovh $c11,$5
+ cmovh $c4,$4
+ cmovh $c3,$gp
+ .text
+ .global cmovh2
+cmovh2:
+ cmovh $4,$c7
+ cmovh $gp,$c8
+ cmovh $6,$c10
+ cmovh $2,$c8
+ cmovh $10,$c4
+*/
+ .text
+ .global bcpeq
+bcpeq:
+ bcpeq 4,0
+ bcpeq 0,-2
+ bcpeq 4,-2
+ bcpeq 1,2
+ bcpeq 2,2
+ .text
+ .global bcpne
+bcpne:
+ bcpne 2,0
+ bcpne 4,0
+ bcpne 1,0
+ bcpne 4,0
+ bcpne 1,2
+ .text
+ .global bcpat
+bcpat:
+ bcpat 1,-2
+ bcpat 0,2
+ bcpat 0,-2
+ bcpat 2,0
+ bcpat 1,-2
+ .text
+ .global bcpaf
+bcpaf:
+ bcpaf 4,0
+ bcpaf 3,0
+ bcpaf 4,0
+ bcpaf 1,2
+ bcpaf 4,2
+ .text
+ .global synccp
+synccp:
+ synccp
+ .text
+ .global jsrv
+jsrv:
+ jsrv $11
+ jsrv $5
+ jsrv $10
+ jsrv $12
+ jsrv $10
+ .text
+ .global bsrv
+bsrv:
+ bsrv -2
+ bsrv -2
+ bsrv -2
+ bsrv 2
+ bsrv 0
+ .text
+ .global case106341
+case106341:
+ stc $10,7
+ ldc $0, (4 + 4)
+case106821:
+ /* Actual 16 bit form */
+ sb $0,($0)
+ sh $0,($0)
+ sw $0,($0)
+ lb $0,($0)
+ lh $0,($0)
+ lw $0,($0)
+ lbu $0,($0)
+ lhu $0,($0)
+ /* Should use 16 bit form */
+ sb $0,0($0)
+ sb $0,%lo(0)($0)
+ sb $0,%hi(0)($0)
+ sb $0,%uhi(0)($0)
+ sb $0,%sdaoff(0)($0)
+ sb $0,%tpoff(0)($0)
+ sh $0,0($0)
+ sh $0,%lo(0)($0)
+ sh $0,%hi(0)($0)
+ sh $0,%uhi(0)($0)
+ sh $0,%sdaoff(0)($0)
+ sh $0,%tpoff(0)($0)
+ sw $0,0($0)
+ sw $0,%lo(0)($0)
+ sw $0,%hi(0)($0)
+ sw $0,%uhi(0)($0)
+ sw $0,%sdaoff(0)($0)
+ sw $0,%tpoff(0)($0)
+ lb $0,0($0)
+ lb $0,%lo(0)($0)
+ lb $0,%hi(0)($0)
+ lb $0,%uhi(0)($0)
+ lb $0,%sdaoff(0)($0)
+ lb $0,%tpoff(0)($0)
+ lh $0,0($0)
+ lh $0,%lo(0)($0)
+ lh $0,%hi(0)($0)
+ lh $0,%uhi(0)($0)
+ lh $0,%sdaoff(0)($0)
+ lh $0,%tpoff(0)($0)
+ lw $0,0($0)
+ lw $0,%lo(0)($0)
+ lw $0,%hi(0)($0)
+ lw $0,%uhi(0)($0)
+ lw $0,%sdaoff(0)($0)
+ lw $0,%tpoff(0)($0)
+ lbu $0,0($0)
+ lbu $0,%lo(0)($0)
+ lbu $0,%hi(0)($0)
+ lbu $0,%uhi(0)($0)
+ lbu $0,%sdaoff(0)($0)
+ lbu $0,%tpoff(0)($0)
+ lhu $0,0($0)
+ lhu $0,%lo(0)($0)
+ lhu $0,%hi(0)($0)
+ lhu $0,%uhi(0)($0)
+ lhu $0,%sdaoff(0)($0)
+ lhu $0,%tpoff(0)($0)
+ /* Should use 32 bit form */
+ sb $0,1($0)
+ sb $0,%lo(1)($0)
+ sb $0,%hi(1)($0)
+ sb $0,%uhi(1)($0)
+ sb $0,%sdaoff(1)($0)
+ sb $0,%tpoff(1)($0)
+ sh $0,1($0)
+ sh $0,%lo(1)($0)
+ sh $0,%hi(1)($0)
+ sh $0,%uhi(1)($0)
+ sh $0,%sdaoff(1)($0)
+ sh $0,%tpoff(1)($0)
+ sw $0,1($0)
+ sw $0,%lo(1)($0)
+ sw $0,%hi(1)($0)
+ sw $0,%uhi(1)($0)
+ sw $0,%sdaoff(1)($0)
+ sw $0,%tpoff(1)($0)
+ lb $0,1($0)
+ lb $0,%lo(1)($0)
+ lb $0,%hi(1)($0)
+ lb $0,%uhi(1)($0)
+ lb $0,%sdaoff(1)($0)
+ lb $0,%tpoff(1)($0)
+ lh $0,1($0)
+ lh $0,%lo(1)($0)
+ lh $0,%hi(1)($0)
+ lh $0,%uhi(1)($0)
+ lh $0,%sdaoff(1)($0)
+ lh $0,%tpoff(1)($0)
+ lw $0,1($0)
+ lw $0,%lo(1)($0)
+ lw $0,%hi(1)($0)
+ lw $0,%uhi(1)($0)
+ lw $0,%sdaoff(1)($0)
+ lw $0,%tpoff(1)($0)
+ lbu $0,1($0)
+ lbu $0,%lo(1)($0)
+ lbu $0,%hi(1)($0)
+ lbu $0,%uhi(1)($0)
+ lbu $0,%sdaoff(1)($0)
+ lbu $0,%tpoff(1)($0)
+ lhu $0,1($0)
+ lhu $0,%lo(1)($0)
+ lhu $0,%hi(1)($0)
+ lhu $0,%uhi(1)($0)
+ lhu $0,%sdaoff(1)($0)
+ lhu $0,%tpoff(1)($0)
+ /* Should use 32 bit form */
+ sb $0,case106821($0)
+ sb $0,%lo(case106821)($0)
+ sb $0,%hi(case106821)($0)
+ sb $0,%uhi(case106821)($0)
+ sh $0,case106821($0)
+ sh $0,%lo(case106821)($0)
+ sh $0,%hi(case106821)($0)
+ sh $0,%uhi(case106821)($0)
+ sw $0,case106821($0)
+ sw $0,%lo(case106821)($0)
+ sw $0,%hi(case106821)($0)
+ sw $0,%uhi(case106821)($0)
+ lb $0,case106821($0)
+ lb $0,%lo(case106821)($0)
+ lb $0,%hi(case106821)($0)
+ lb $0,%uhi(case106821)($0)
+ lh $0,case106821($0)
+ lh $0,%lo(case106821)($0)
+ lh $0,%hi(case106821)($0)
+ lh $0,%uhi(case106821)($0)
+ lw $0,case106821($0)
+ lw $0,%lo(case106821)($0)
+ lw $0,%hi(case106821)($0)
+ lw $0,%uhi(case106821)($0)
+ lbu $0,case106821($0)
+ lbu $0,%lo(case106821)($0)
+ lbu $0,%hi(case106821)($0)
+ lbu $0,%uhi(case106821)($0)
+ lhu $0,case106821($0)
+ lhu $0,%lo(case106821)($0)
+ lhu $0,%hi(case106821)($0)
+ lhu $0,%uhi(case106821)($0)
diff --git a/gas/testsuite/gas/mep/branch1.d b/gas/testsuite/gas/mep/branch1.d
new file mode 100644
index 000000000000..271b9184a548
--- /dev/null
+++ b/gas/testsuite/gas/mep/branch1.d
@@ -0,0 +1,14 @@
+#objdump: -dzr
+
+.*: *file format elf32-mep
+
+Disassembly of section \.text:
+
+.* <.*>:
+ .*: 00 00 * nop
+ .*: e4 51 00 04 * beq \$4,\$5,.* <foo>
+ .*: 00 00 * nop
+ .*: 00 00 * nop
+
+.* <foo>:
+ .*: 00 00 * nop
diff --git a/gas/testsuite/gas/mep/branch1.s b/gas/testsuite/gas/mep/branch1.s
new file mode 100644
index 000000000000..7c69985d7e50
--- /dev/null
+++ b/gas/testsuite/gas/mep/branch1.s
@@ -0,0 +1,7 @@
+ .globl foo
+ nop
+ beq $4,$5,foo
+ nop
+ nop
+foo:
+ nop
diff --git a/gas/testsuite/gas/mep/complex-relocs.exp b/gas/testsuite/gas/mep/complex-relocs.exp
new file mode 100644
index 000000000000..ed8a72a413bf
--- /dev/null
+++ b/gas/testsuite/gas/mep/complex-relocs.exp
@@ -0,0 +1,42 @@
+# complex relocations testsuite
+
+proc ld_test { objects ldflags dest test } {
+ set ld_output [target_link $objects $dest $ldflags]
+ if [string match "" $ld_output] then { pass $test } else { fail $test }
+}
+
+proc ld_test_error { objects ldflags dest test } {
+ set ld_output [target_link $objects $dest $ldflags]
+ if [string match "" $ld_output] then { fail $test } else { pass $test }
+}
+
+proc objdump_test { exec flags dest test } {
+ set objdump [find_binutils_prog objdump]
+ verbose -log "$objdump $flags $exec > $dest"
+ catch "exec $objdump $flags $exec > $dest" objdump_output
+ if [string match "" $objdump_output] then { pass $test } else { fail $test }
+}
+
+proc regexp_test { file1 file2 test } {
+ if [regexp_diff $file1 $file2] then { fail $test } else { pass $test }
+}
+
+
+global srcdir subdir
+if [istarget mep*-*-*] {
+
+ # test that complex relocs between files work, generally
+ gas_test relocs-junk1.s {-mconfig=fmax -o relocs-junk1.o} {} {assembling relocs-junk1}
+ gas_test relocs-syms.s {-mconfig=fmax -o relocs-syms.o} {} {assembling relocs-syms}
+ gas_test relocs-junk2.s {-mconfig=fmax -o relocs-junk2.o} {} {assembling relocs-junk2}
+ gas_test relocs-refs.s {-mconfig=fmax -o relocs-refs.o} {} {assembling relocs-refs}
+ ld_test {relocs-junk1.o relocs-syms.o relocs-junk2.o relocs-refs.o} {--defsym __stack=0x1ffff0 --defsym __sbss_end=0x1000 -e 1233} {relocs.x} {linking relocs.x}
+ objdump_test {relocs.x} {-dzs} {relocs.dump} {disassembling relocs.x}
+ regexp_test {relocs.dump} "$srcdir/$subdir/relocs.d" {matching disassembly for relocs.x}
+
+ foreach test {3} {
+ # perform specific negative boundary tests
+ gas_test "relocs-bad$test.s" [list -mconfig=fmax -o "relocs-bad$test.o"] {} [list assembling "relocs-bad$test"]
+ ld_test_error "relocs-bad$test.o" {-e 1233} "relocs-bad$test.x" [list linking "relocs-bad$test"]
+ }
+}
diff --git a/gas/testsuite/gas/mep/dj1.d b/gas/testsuite/gas/mep/dj1.d
new file mode 100644
index 000000000000..c314d724ce68
--- /dev/null
+++ b/gas/testsuite/gas/mep/dj1.d
@@ -0,0 +1,1393 @@
+#as:
+#objdump: -dr
+#name: dj1
+
+dump.o: file format elf32-mep
+
+Disassembly of section .text:
+
+00000000 <.text>:
+ 0: 00 00 nop
+ 2: 01 00 mov \$1,\$0
+ 4: 02 00 mov \$2,\$0
+ 6: 03 00 mov \$3,\$0
+ 8: 04 00 mov \$4,\$0
+ a: 05 00 mov \$5,\$0
+ c: 06 00 mov \$6,\$0
+ e: 07 00 mov \$7,\$0
+ 10: 08 00 mov \$8,\$0
+ 12: 09 00 mov \$9,\$0
+ 14: 0a 00 mov \$10,\$0
+ 16: 0b 00 mov \$11,\$0
+ 18: 0c 00 mov \$12,\$0
+ 1a: 0d 00 mov \$tp,\$0
+ 1c: 0e 00 mov \$gp,\$0
+ 1e: 0f 00 mov \$sp,\$0
+ 20: 08 00 mov \$8,\$0
+ 22: 0d 00 mov \$tp,\$0
+ 24: 0e 00 mov \$gp,\$0
+ 26: 0f 00 mov \$sp,\$0
+ 28: 00 08 sb \$0,\(\$0\)
+ 2a: 00 09 sh \$0,\(\$0\)
+ 2c: 00 0a sw \$0,\(\$0\)
+ 2e: 00 0c lb \$0,\(\$0\)
+ 30: 00 0d lh \$0,\(\$0\)
+ 32: 00 0e lw \$0,\(\$0\)
+ 34: 00 0b lbu \$0,\(\$0\)
+ 36: 00 0f lhu \$0,\(\$0\)
+ 38: 0f 08 sb \$sp,\(\$0\)
+ 3a: 0f 09 sh \$sp,\(\$0\)
+ 3c: 0f 0a sw \$sp,\(\$0\)
+ 3e: 0f 0c lb \$sp,\(\$0\)
+ 40: 0f 0d lh \$sp,\(\$0\)
+ 42: 0f 0e lw \$sp,\(\$0\)
+ 44: 0f 0b lbu \$sp,\(\$0\)
+ 46: 0f 0f lhu \$sp,\(\$0\)
+ 48: 00 f8 sb \$0,\(\$sp\)
+ 4a: 00 f9 sh \$0,\(\$sp\)
+ 4c: 00 fa sw \$0,\(\$sp\)
+ 4e: 00 fc lb \$0,\(\$sp\)
+ 50: 00 fd lh \$0,\(\$sp\)
+ 52: 00 fe lw \$0,\(\$sp\)
+ 54: 00 fb lbu \$0,\(\$sp\)
+ 56: 00 ff lhu \$0,\(\$sp\)
+ 58: 0f f8 sb \$sp,\(\$sp\)
+ 5a: 0f f9 sh \$sp,\(\$sp\)
+ 5c: 0f fa sw \$sp,\(\$sp\)
+ 5e: 0f fc lb \$sp,\(\$sp\)
+ 60: 0f fd lh \$sp,\(\$sp\)
+ 62: 0f fe lw \$sp,\(\$sp\)
+ 64: 0f fb lbu \$sp,\(\$sp\)
+ 66: 0f ff lhu \$sp,\(\$sp\)
+ 68: 00 fa sw \$0,\(\$sp\)
+ 6a: 00 fe lw \$0,\(\$sp\)
+ 6c: 0f fa sw \$sp,\(\$sp\)
+ 6e: 0f fe lw \$sp,\(\$sp\)
+ 70: 40 7e sw \$0,0x7c\(\$sp\)
+ 72: 40 7f lw \$0,0x7c\(\$sp\)
+ 74: 4f 7e sw \$sp,0x7c\(\$sp\)
+ 76: 4f 7f lw \$sp,0x7c\(\$sp\)
+ 78: 00 fa sw \$0,\(\$sp\)
+ 7a: 00 fe lw \$0,\(\$sp\)
+ 7c: 0f fa sw \$sp,\(\$sp\)
+ 7e: 0f fe lw \$sp,\(\$sp\)
+ 80: 40 7e sw \$0,0x7c\(\$sp\)
+ 82: 40 7f lw \$0,0x7c\(\$sp\)
+ 84: 4f 7e sw \$sp,0x7c\(\$sp\)
+ 86: 4f 7f lw \$sp,0x7c\(\$sp\)
+ 88: 00 d8 sb \$0,\(\$tp\)
+ 8a: 00 dc lb \$0,\(\$tp\)
+ 8c: 00 db lbu \$0,\(\$tp\)
+ 8e: 07 d8 sb \$7,\(\$tp\)
+ 90: 07 dc lb \$7,\(\$tp\)
+ 92: 07 db lbu \$7,\(\$tp\)
+ 94: 80 7f sb \$0,0x7f\(\$tp\)
+ 96: 88 7f lb \$0,0x7f\(\$tp\)
+ 98: 48 ff lbu \$0,0x7f\(\$tp\)
+ 9a: 87 7f sb \$7,0x7f\(\$tp\)
+ 9c: 8f 7f lb \$7,0x7f\(\$tp\)
+ 9e: 4f ff lbu \$7,0x7f\(\$tp\)
+ a0: 80 00 sb \$0,0x0\(\$tp\)
+ a0: R_MEP_TPREL7 symbol
+ a2: 88 00 lb \$0,0x0\(\$tp\)
+ a2: R_MEP_TPREL7 symbol
+ a4: 48 80 lbu \$0,0x0\(\$tp\)
+ a4: R_MEP_TPREL7 symbol
+ a6: 87 00 sb \$7,0x0\(\$tp\)
+ a6: R_MEP_TPREL7 symbol
+ a8: 8f 00 lb \$7,0x0\(\$tp\)
+ a8: R_MEP_TPREL7 symbol
+ aa: 4f 80 lbu \$7,0x0\(\$tp\)
+ aa: R_MEP_TPREL7 symbol
+ ac: 00 d8 sb \$0,\(\$tp\)
+ ae: 00 dc lb \$0,\(\$tp\)
+ b0: 00 db lbu \$0,\(\$tp\)
+ b2: 07 d8 sb \$7,\(\$tp\)
+ b4: 07 dc lb \$7,\(\$tp\)
+ b6: 07 db lbu \$7,\(\$tp\)
+ b8: 80 7f sb \$0,0x7f\(\$tp\)
+ ba: 88 7f lb \$0,0x7f\(\$tp\)
+ bc: 48 ff lbu \$0,0x7f\(\$tp\)
+ be: 87 7f sb \$7,0x7f\(\$tp\)
+ c0: 8f 7f lb \$7,0x7f\(\$tp\)
+ c2: 4f ff lbu \$7,0x7f\(\$tp\)
+ c4: 80 00 sb \$0,0x0\(\$tp\)
+ c4: R_MEP_TPREL7 symbol
+ c6: 88 00 lb \$0,0x0\(\$tp\)
+ c6: R_MEP_TPREL7 symbol
+ c8: 48 80 lbu \$0,0x0\(\$tp\)
+ c8: R_MEP_TPREL7 symbol
+ ca: 87 00 sb \$7,0x0\(\$tp\)
+ ca: R_MEP_TPREL7 symbol
+ cc: 8f 00 lb \$7,0x0\(\$tp\)
+ cc: R_MEP_TPREL7 symbol
+ ce: 4f 80 lbu \$7,0x0\(\$tp\)
+ ce: R_MEP_TPREL7 symbol
+ d0: 00 d9 sh \$0,\(\$tp\)
+ d2: 00 dd lh \$0,\(\$tp\)
+ d4: 00 df lhu \$0,\(\$tp\)
+ d6: 07 d9 sh \$7,\(\$tp\)
+ d8: 07 dd lh \$7,\(\$tp\)
+ da: 07 df lhu \$7,\(\$tp\)
+ dc: 80 fe sh \$0,0x7e\(\$tp\)
+ de: 88 fe lh \$0,0x7e\(\$tp\)
+ e0: 88 ff lhu \$0,0x7e\(\$tp\)
+ e2: 87 fe sh \$7,0x7e\(\$tp\)
+ e4: 8f fe lh \$7,0x7e\(\$tp\)
+ e6: 8f ff lhu \$7,0x7e\(\$tp\)
+ e8: 80 80 sh \$0,0x0\(\$tp\)
+ e8: R_MEP_TPREL7A2 symbol
+ ea: 88 80 lh \$0,0x0\(\$tp\)
+ ea: R_MEP_TPREL7A2 symbol
+ ec: 88 81 lhu \$0,0x0\(\$tp\)
+ ec: R_MEP_TPREL7A2 symbol
+ ee: 87 80 sh \$7,0x0\(\$tp\)
+ ee: R_MEP_TPREL7A2 symbol
+ f0: 8f 80 lh \$7,0x0\(\$tp\)
+ f0: R_MEP_TPREL7A2 symbol
+ f2: 8f 81 lhu \$7,0x0\(\$tp\)
+ f2: R_MEP_TPREL7A2 symbol
+ f4: 00 d9 sh \$0,\(\$tp\)
+ f6: 00 dd lh \$0,\(\$tp\)
+ f8: 00 df lhu \$0,\(\$tp\)
+ fa: 07 d9 sh \$7,\(\$tp\)
+ fc: 07 dd lh \$7,\(\$tp\)
+ fe: 07 df lhu \$7,\(\$tp\)
+ 100: 80 fe sh \$0,0x7e\(\$tp\)
+ 102: 88 fe lh \$0,0x7e\(\$tp\)
+ 104: 88 ff lhu \$0,0x7e\(\$tp\)
+ 106: 87 fe sh \$7,0x7e\(\$tp\)
+ 108: 8f fe lh \$7,0x7e\(\$tp\)
+ 10a: 8f ff lhu \$7,0x7e\(\$tp\)
+ 10c: 80 80 sh \$0,0x0\(\$tp\)
+ 10c: R_MEP_TPREL7A2 symbol
+ 10e: 88 80 lh \$0,0x0\(\$tp\)
+ 10e: R_MEP_TPREL7A2 symbol
+ 110: 88 81 lhu \$0,0x0\(\$tp\)
+ 110: R_MEP_TPREL7A2 symbol
+ 112: 87 80 sh \$7,0x0\(\$tp\)
+ 112: R_MEP_TPREL7A2 symbol
+ 114: 8f 80 lh \$7,0x0\(\$tp\)
+ 114: R_MEP_TPREL7A2 symbol
+ 116: 8f 81 lhu \$7,0x0\(\$tp\)
+ 116: R_MEP_TPREL7A2 symbol
+ 118: 00 da sw \$0,\(\$tp\)
+ 11a: 00 de lw \$0,\(\$tp\)
+ 11c: 07 da sw \$7,\(\$tp\)
+ 11e: 07 de lw \$7,\(\$tp\)
+ 120: 40 fe sw \$0,0x7c\(\$tp\)
+ 122: 40 ff lw \$0,0x7c\(\$tp\)
+ 124: 47 fe sw \$7,0x7c\(\$tp\)
+ 126: 47 ff lw \$7,0x7c\(\$tp\)
+ 128: 40 82 sw \$0,0x0\(\$tp\)
+ 128: R_MEP_TPREL7A4 symbol
+ 12a: 40 83 lw \$0,0x0\(\$tp\)
+ 12a: R_MEP_TPREL7A4 symbol
+ 12c: 47 82 sw \$7,0x0\(\$tp\)
+ 12c: R_MEP_TPREL7A4 symbol
+ 12e: 47 83 lw \$7,0x0\(\$tp\)
+ 12e: R_MEP_TPREL7A4 symbol
+ 130: 00 da sw \$0,\(\$tp\)
+ 132: 00 de lw \$0,\(\$tp\)
+ 134: 07 da sw \$7,\(\$tp\)
+ 136: 07 de lw \$7,\(\$tp\)
+ 138: 40 fe sw \$0,0x7c\(\$tp\)
+ 13a: 40 ff lw \$0,0x7c\(\$tp\)
+ 13c: 47 fe sw \$7,0x7c\(\$tp\)
+ 13e: 47 ff lw \$7,0x7c\(\$tp\)
+ 140: 40 82 sw \$0,0x0\(\$tp\)
+ 140: R_MEP_TPREL7A4 symbol
+ 142: 40 83 lw \$0,0x0\(\$tp\)
+ 142: R_MEP_TPREL7A4 symbol
+ 144: 47 82 sw \$7,0x0\(\$tp\)
+ 144: R_MEP_TPREL7A4 symbol
+ 146: 47 83 lw \$7,0x0\(\$tp\)
+ 146: R_MEP_TPREL7A4 symbol
+ 148: c0 08 80 00 sb \$0,-32768\(\$0\)
+ 14c: c0 09 80 00 sh \$0,-32768\(\$0\)
+ 150: c0 0a 80 00 sw \$0,-32768\(\$0\)
+ 154: c0 0c 80 00 lb \$0,-32768\(\$0\)
+ 158: c0 0d 80 00 lh \$0,-32768\(\$0\)
+ 15c: c0 0e 80 00 lw \$0,-32768\(\$0\)
+ 160: c0 0b 80 00 lbu \$0,-32768\(\$0\)
+ 164: c0 0f 80 00 lhu \$0,-32768\(\$0\)
+ 168: cf 08 80 00 sb \$sp,-32768\(\$0\)
+ 16c: cf 09 80 00 sh \$sp,-32768\(\$0\)
+ 170: cf 0a 80 00 sw \$sp,-32768\(\$0\)
+ 174: cf 0c 80 00 lb \$sp,-32768\(\$0\)
+ 178: cf 0d 80 00 lh \$sp,-32768\(\$0\)
+ 17c: cf 0e 80 00 lw \$sp,-32768\(\$0\)
+ 180: cf 0b 80 00 lbu \$sp,-32768\(\$0\)
+ 184: cf 0f 80 00 lhu \$sp,-32768\(\$0\)
+ 188: c0 08 7f ff sb \$0,32767\(\$0\)
+ 18c: c0 09 7f ff sh \$0,32767\(\$0\)
+ 190: c0 0a 7f ff sw \$0,32767\(\$0\)
+ 194: c0 0c 7f ff lb \$0,32767\(\$0\)
+ 198: c0 0d 7f ff lh \$0,32767\(\$0\)
+ 19c: c0 0e 7f ff lw \$0,32767\(\$0\)
+ 1a0: c0 0b 7f ff lbu \$0,32767\(\$0\)
+ 1a4: c0 0f 7f ff lhu \$0,32767\(\$0\)
+ 1a8: cf 08 7f ff sb \$sp,32767\(\$0\)
+ 1ac: cf 09 7f ff sh \$sp,32767\(\$0\)
+ 1b0: cf 0a 7f ff sw \$sp,32767\(\$0\)
+ 1b4: cf 0c 7f ff lb \$sp,32767\(\$0\)
+ 1b8: cf 0d 7f ff lh \$sp,32767\(\$0\)
+ 1bc: cf 0e 7f ff lw \$sp,32767\(\$0\)
+ 1c0: cf 0b 7f ff lbu \$sp,32767\(\$0\)
+ 1c4: cf 0f 7f ff lhu \$sp,32767\(\$0\)
+ 1c8: c0 08 00 00 sb \$0,0\(\$0\)
+ 1c8: R_MEP_GPREL symbol
+ 1cc: c0 09 00 00 sh \$0,0\(\$0\)
+ 1cc: R_MEP_GPREL symbol
+ 1d0: c0 0a 00 00 sw \$0,0\(\$0\)
+ 1d0: R_MEP_GPREL symbol
+ 1d4: c0 0c 00 00 lb \$0,0\(\$0\)
+ 1d4: R_MEP_GPREL symbol
+ 1d8: c0 0d 00 00 lh \$0,0\(\$0\)
+ 1d8: R_MEP_GPREL symbol
+ 1dc: c0 0e 00 00 lw \$0,0\(\$0\)
+ 1dc: R_MEP_GPREL symbol
+ 1e0: c0 0b 00 00 lbu \$0,0\(\$0\)
+ 1e0: R_MEP_GPREL symbol
+ 1e4: c0 0f 00 00 lhu \$0,0\(\$0\)
+ 1e4: R_MEP_GPREL symbol
+ 1e8: cf 08 00 00 sb \$sp,0\(\$0\)
+ 1e8: R_MEP_GPREL symbol
+ 1ec: cf 09 00 00 sh \$sp,0\(\$0\)
+ 1ec: R_MEP_GPREL symbol
+ 1f0: cf 0a 00 00 sw \$sp,0\(\$0\)
+ 1f0: R_MEP_GPREL symbol
+ 1f4: cf 0c 00 00 lb \$sp,0\(\$0\)
+ 1f4: R_MEP_GPREL symbol
+ 1f8: cf 0d 00 00 lh \$sp,0\(\$0\)
+ 1f8: R_MEP_GPREL symbol
+ 1fc: cf 0e 00 00 lw \$sp,0\(\$0\)
+ 1fc: R_MEP_GPREL symbol
+ 200: cf 0b 00 00 lbu \$sp,0\(\$0\)
+ 200: R_MEP_GPREL symbol
+ 204: cf 0f 00 00 lhu \$sp,0\(\$0\)
+ 204: R_MEP_GPREL symbol
+ 208: c0 08 80 00 sb \$0,-32768\(\$0\)
+ 20c: c0 09 80 00 sh \$0,-32768\(\$0\)
+ 210: c0 0a 80 00 sw \$0,-32768\(\$0\)
+ 214: c0 0c 80 00 lb \$0,-32768\(\$0\)
+ 218: c0 0d 80 00 lh \$0,-32768\(\$0\)
+ 21c: c0 0e 80 00 lw \$0,-32768\(\$0\)
+ 220: c0 0b 80 00 lbu \$0,-32768\(\$0\)
+ 224: c0 0f 80 00 lhu \$0,-32768\(\$0\)
+ 228: cf 08 80 00 sb \$sp,-32768\(\$0\)
+ 22c: cf 09 80 00 sh \$sp,-32768\(\$0\)
+ 230: cf 0a 80 00 sw \$sp,-32768\(\$0\)
+ 234: cf 0c 80 00 lb \$sp,-32768\(\$0\)
+ 238: cf 0d 80 00 lh \$sp,-32768\(\$0\)
+ 23c: cf 0e 80 00 lw \$sp,-32768\(\$0\)
+ 240: cf 0b 80 00 lbu \$sp,-32768\(\$0\)
+ 244: cf 0f 80 00 lhu \$sp,-32768\(\$0\)
+ 248: c0 08 7f ff sb \$0,32767\(\$0\)
+ 24c: c0 09 7f ff sh \$0,32767\(\$0\)
+ 250: c0 0a 7f ff sw \$0,32767\(\$0\)
+ 254: c0 0c 7f ff lb \$0,32767\(\$0\)
+ 258: c0 0d 7f ff lh \$0,32767\(\$0\)
+ 25c: c0 0e 7f ff lw \$0,32767\(\$0\)
+ 260: c0 0b 7f ff lbu \$0,32767\(\$0\)
+ 264: c0 0f 7f ff lhu \$0,32767\(\$0\)
+ 268: cf 08 7f ff sb \$sp,32767\(\$0\)
+ 26c: cf 09 7f ff sh \$sp,32767\(\$0\)
+ 270: cf 0a 7f ff sw \$sp,32767\(\$0\)
+ 274: cf 0c 7f ff lb \$sp,32767\(\$0\)
+ 278: cf 0d 7f ff lh \$sp,32767\(\$0\)
+ 27c: cf 0e 7f ff lw \$sp,32767\(\$0\)
+ 280: cf 0b 7f ff lbu \$sp,32767\(\$0\)
+ 284: cf 0f 7f ff lhu \$sp,32767\(\$0\)
+ 288: c0 08 00 00 sb \$0,0\(\$0\)
+ 288: R_MEP_TPREL symbol
+ 28c: c0 09 00 00 sh \$0,0\(\$0\)
+ 28c: R_MEP_TPREL symbol
+ 290: c0 0a 00 00 sw \$0,0\(\$0\)
+ 290: R_MEP_TPREL symbol
+ 294: c0 0c 00 00 lb \$0,0\(\$0\)
+ 294: R_MEP_TPREL symbol
+ 298: c0 0d 00 00 lh \$0,0\(\$0\)
+ 298: R_MEP_TPREL symbol
+ 29c: c0 0e 00 00 lw \$0,0\(\$0\)
+ 29c: R_MEP_TPREL symbol
+ 2a0: c0 0b 00 00 lbu \$0,0\(\$0\)
+ 2a0: R_MEP_TPREL symbol
+ 2a4: c0 0f 00 00 lhu \$0,0\(\$0\)
+ 2a4: R_MEP_TPREL symbol
+ 2a8: cf 08 00 00 sb \$sp,0\(\$0\)
+ 2a8: R_MEP_TPREL symbol
+ 2ac: cf 09 00 00 sh \$sp,0\(\$0\)
+ 2ac: R_MEP_TPREL symbol
+ 2b0: cf 0a 00 00 sw \$sp,0\(\$0\)
+ 2b0: R_MEP_TPREL symbol
+ 2b4: cf 0c 00 00 lb \$sp,0\(\$0\)
+ 2b4: R_MEP_TPREL symbol
+ 2b8: cf 0d 00 00 lh \$sp,0\(\$0\)
+ 2b8: R_MEP_TPREL symbol
+ 2bc: cf 0e 00 00 lw \$sp,0\(\$0\)
+ 2bc: R_MEP_TPREL symbol
+ 2c0: cf 0b 00 00 lbu \$sp,0\(\$0\)
+ 2c0: R_MEP_TPREL symbol
+ 2c4: cf 0f 00 00 lhu \$sp,0\(\$0\)
+ 2c4: R_MEP_TPREL symbol
+ 2c8: c0 f8 80 00 sb \$0,-32768\(\$sp\)
+ 2cc: c0 f9 80 00 sh \$0,-32768\(\$sp\)
+ 2d0: c0 fa 80 00 sw \$0,-32768\(\$sp\)
+ 2d4: c0 fc 80 00 lb \$0,-32768\(\$sp\)
+ 2d8: c0 fd 80 00 lh \$0,-32768\(\$sp\)
+ 2dc: c0 fe 80 00 lw \$0,-32768\(\$sp\)
+ 2e0: c0 fb 80 00 lbu \$0,-32768\(\$sp\)
+ 2e4: c0 ff 80 00 lhu \$0,-32768\(\$sp\)
+ 2e8: cf f8 80 00 sb \$sp,-32768\(\$sp\)
+ 2ec: cf f9 80 00 sh \$sp,-32768\(\$sp\)
+ 2f0: cf fa 80 00 sw \$sp,-32768\(\$sp\)
+ 2f4: cf fc 80 00 lb \$sp,-32768\(\$sp\)
+ 2f8: cf fd 80 00 lh \$sp,-32768\(\$sp\)
+ 2fc: cf fe 80 00 lw \$sp,-32768\(\$sp\)
+ 300: cf fb 80 00 lbu \$sp,-32768\(\$sp\)
+ 304: cf ff 80 00 lhu \$sp,-32768\(\$sp\)
+ 308: c0 f8 7f ff sb \$0,32767\(\$sp\)
+ 30c: c0 f9 7f ff sh \$0,32767\(\$sp\)
+ 310: c0 fa 7f ff sw \$0,32767\(\$sp\)
+ 314: c0 fc 7f ff lb \$0,32767\(\$sp\)
+ 318: c0 fd 7f ff lh \$0,32767\(\$sp\)
+ 31c: c0 fe 7f ff lw \$0,32767\(\$sp\)
+ 320: c0 fb 7f ff lbu \$0,32767\(\$sp\)
+ 324: c0 ff 7f ff lhu \$0,32767\(\$sp\)
+ 328: cf f8 7f ff sb \$sp,32767\(\$sp\)
+ 32c: cf f9 7f ff sh \$sp,32767\(\$sp\)
+ 330: cf fa 7f ff sw \$sp,32767\(\$sp\)
+ 334: cf fc 7f ff lb \$sp,32767\(\$sp\)
+ 338: cf fd 7f ff lh \$sp,32767\(\$sp\)
+ 33c: cf fe 7f ff lw \$sp,32767\(\$sp\)
+ 340: cf fb 7f ff lbu \$sp,32767\(\$sp\)
+ 344: cf ff 7f ff lhu \$sp,32767\(\$sp\)
+ 348: c0 f8 00 00 sb \$0,0\(\$sp\)
+ 348: R_MEP_GPREL symbol
+ 34c: c0 f9 00 00 sh \$0,0\(\$sp\)
+ 34c: R_MEP_GPREL symbol
+ 350: c0 fa 00 00 sw \$0,0\(\$sp\)
+ 350: R_MEP_GPREL symbol
+ 354: c0 fc 00 00 lb \$0,0\(\$sp\)
+ 354: R_MEP_GPREL symbol
+ 358: c0 fd 00 00 lh \$0,0\(\$sp\)
+ 358: R_MEP_GPREL symbol
+ 35c: c0 fe 00 00 lw \$0,0\(\$sp\)
+ 35c: R_MEP_GPREL symbol
+ 360: c0 fb 00 00 lbu \$0,0\(\$sp\)
+ 360: R_MEP_GPREL symbol
+ 364: c0 ff 00 00 lhu \$0,0\(\$sp\)
+ 364: R_MEP_GPREL symbol
+ 368: cf f8 00 00 sb \$sp,0\(\$sp\)
+ 368: R_MEP_GPREL symbol
+ 36c: cf f9 00 00 sh \$sp,0\(\$sp\)
+ 36c: R_MEP_GPREL symbol
+ 370: cf fa 00 00 sw \$sp,0\(\$sp\)
+ 370: R_MEP_GPREL symbol
+ 374: cf fc 00 00 lb \$sp,0\(\$sp\)
+ 374: R_MEP_GPREL symbol
+ 378: cf fd 00 00 lh \$sp,0\(\$sp\)
+ 378: R_MEP_GPREL symbol
+ 37c: cf fe 00 00 lw \$sp,0\(\$sp\)
+ 37c: R_MEP_GPREL symbol
+ 380: cf fb 00 00 lbu \$sp,0\(\$sp\)
+ 380: R_MEP_GPREL symbol
+ 384: cf ff 00 00 lhu \$sp,0\(\$sp\)
+ 384: R_MEP_GPREL symbol
+ 388: c0 f8 80 00 sb \$0,-32768\(\$sp\)
+ 38c: c0 f9 80 00 sh \$0,-32768\(\$sp\)
+ 390: c0 fa 80 00 sw \$0,-32768\(\$sp\)
+ 394: c0 fc 80 00 lb \$0,-32768\(\$sp\)
+ 398: c0 fd 80 00 lh \$0,-32768\(\$sp\)
+ 39c: c0 fe 80 00 lw \$0,-32768\(\$sp\)
+ 3a0: c0 fb 80 00 lbu \$0,-32768\(\$sp\)
+ 3a4: c0 ff 80 00 lhu \$0,-32768\(\$sp\)
+ 3a8: cf f8 80 00 sb \$sp,-32768\(\$sp\)
+ 3ac: cf f9 80 00 sh \$sp,-32768\(\$sp\)
+ 3b0: cf fa 80 00 sw \$sp,-32768\(\$sp\)
+ 3b4: cf fc 80 00 lb \$sp,-32768\(\$sp\)
+ 3b8: cf fd 80 00 lh \$sp,-32768\(\$sp\)
+ 3bc: cf fe 80 00 lw \$sp,-32768\(\$sp\)
+ 3c0: cf fb 80 00 lbu \$sp,-32768\(\$sp\)
+ 3c4: cf ff 80 00 lhu \$sp,-32768\(\$sp\)
+ 3c8: c0 f8 7f ff sb \$0,32767\(\$sp\)
+ 3cc: c0 f9 7f ff sh \$0,32767\(\$sp\)
+ 3d0: c0 fa 7f ff sw \$0,32767\(\$sp\)
+ 3d4: c0 fc 7f ff lb \$0,32767\(\$sp\)
+ 3d8: c0 fd 7f ff lh \$0,32767\(\$sp\)
+ 3dc: c0 fe 7f ff lw \$0,32767\(\$sp\)
+ 3e0: c0 fb 7f ff lbu \$0,32767\(\$sp\)
+ 3e4: c0 ff 7f ff lhu \$0,32767\(\$sp\)
+ 3e8: cf f8 7f ff sb \$sp,32767\(\$sp\)
+ 3ec: cf f9 7f ff sh \$sp,32767\(\$sp\)
+ 3f0: cf fa 7f ff sw \$sp,32767\(\$sp\)
+ 3f4: cf fc 7f ff lb \$sp,32767\(\$sp\)
+ 3f8: cf fd 7f ff lh \$sp,32767\(\$sp\)
+ 3fc: cf fe 7f ff lw \$sp,32767\(\$sp\)
+ 400: cf fb 7f ff lbu \$sp,32767\(\$sp\)
+ 404: cf ff 7f ff lhu \$sp,32767\(\$sp\)
+ 408: c0 f8 00 00 sb \$0,0\(\$sp\)
+ 408: R_MEP_TPREL symbol
+ 40c: c0 f9 00 00 sh \$0,0\(\$sp\)
+ 40c: R_MEP_TPREL symbol
+ 410: 40 02 sw \$0,0x0\(\$sp\)
+ 410: R_MEP_TPREL7A4 symbol
+ 412: c0 fc 00 00 lb \$0,0\(\$sp\)
+ 412: R_MEP_TPREL symbol
+ 416: c0 fd 00 00 lh \$0,0\(\$sp\)
+ 416: R_MEP_TPREL symbol
+ 41a: 40 03 lw \$0,0x0\(\$sp\)
+ 41a: R_MEP_TPREL7A4 symbol
+ 41c: c0 fb 00 00 lbu \$0,0\(\$sp\)
+ 41c: R_MEP_TPREL symbol
+ 420: c0 ff 00 00 lhu \$0,0\(\$sp\)
+ 420: R_MEP_TPREL symbol
+ 424: cf f8 00 00 sb \$sp,0\(\$sp\)
+ 424: R_MEP_TPREL symbol
+ 428: cf f9 00 00 sh \$sp,0\(\$sp\)
+ 428: R_MEP_TPREL symbol
+ 42c: 4f 02 sw \$sp,0x0\(\$sp\)
+ 42c: R_MEP_TPREL7A4 symbol
+ 42e: cf fc 00 00 lb \$sp,0\(\$sp\)
+ 42e: R_MEP_TPREL symbol
+ 432: cf fd 00 00 lh \$sp,0\(\$sp\)
+ 432: R_MEP_TPREL symbol
+ 436: 4f 03 lw \$sp,0x0\(\$sp\)
+ 436: R_MEP_TPREL7A4 symbol
+ 438: cf fb 00 00 lbu \$sp,0\(\$sp\)
+ 438: R_MEP_TPREL symbol
+ 43c: cf ff 00 00 lhu \$sp,0\(\$sp\)
+ 43c: R_MEP_TPREL symbol
+ 440: e0 02 00 00 sw \$0,\(0x0\)
+ 444: e0 03 00 00 lw \$0,\(0x0\)
+ 448: ef 02 00 00 sw \$sp,\(0x0\)
+ 44c: ef 03 00 00 lw \$sp,\(0x0\)
+ 450: e0 fe ff ff sw \$0,\(0xfffffc\)
+ 454: e0 ff ff ff lw \$0,\(0xfffffc\)
+ 458: ef fe ff ff sw \$sp,\(0xfffffc\)
+ 45c: ef ff ff ff lw \$sp,\(0xfffffc\)
+ 460: e0 02 00 00 sw \$0,\(0x0\)
+ 460: R_MEP_ADDR24A4 symbol
+ 464: e0 03 00 00 lw \$0,\(0x0\)
+ 464: R_MEP_ADDR24A4 symbol
+ 468: ef 02 00 00 sw \$sp,\(0x0\)
+ 468: R_MEP_ADDR24A4 symbol
+ 46c: ef 03 00 00 lw \$sp,\(0x0\)
+ 46c: R_MEP_ADDR24A4 symbol
+ 470: 10 0d extb \$0
+ 472: 10 8d extub \$0
+ 474: 10 2d exth \$0
+ 476: 10 ad extuh \$0
+ 478: 1f 0d extb \$sp
+ 47a: 1f 8d extub \$sp
+ 47c: 1f 2d exth \$sp
+ 47e: 1f ad extuh \$sp
+ 480: 10 0c ssarb 0\(\$0\)
+ 482: 13 0c ssarb 3\(\$0\)
+ 484: 10 fc ssarb 0\(\$sp\)
+ 486: 13 fc ssarb 3\(\$sp\)
+ 488: 00 00 nop
+ 48a: 0f 00 mov \$sp,\$0
+ 48c: 00 f0 mov \$0,\$sp
+ 48e: 0f f0 mov \$sp,\$sp
+ 490: c0 01 80 00 mov \$0,-32768
+ 494: cf 01 80 00 mov \$sp,-32768
+ 498: 50 80 mov \$0,-128
+ 49a: 5f 80 mov \$sp,-128
+ 49c: 50 00 mov \$0,0
+ 49e: 5f 00 mov \$sp,0
+ 4a0: 50 7f mov \$0,127
+ 4a2: 5f 7f mov \$sp,127
+ 4a4: c0 01 7f ff mov \$0,32767
+ 4a8: cf 01 7f ff mov \$sp,32767
+ 4ac: c0 01 00 00 mov \$0,0
+ 4ac: R_MEP_LOW16 symbol
+ 4b0: c0 01 00 00 mov \$0,0
+ 4b0: R_MEP_HI16S symbol
+ 4b4: c0 01 00 00 mov \$0,0
+ 4b4: R_MEP_HI16U symbol
+ 4b8: c0 01 00 00 mov \$0,0
+ 4b8: R_MEP_GPREL symbol
+ 4bc: c0 01 00 00 mov \$0,0
+ 4bc: R_MEP_TPREL symbol
+ 4c0: d0 00 00 00 movu \$0,0x0
+ 4c4: d7 00 00 00 movu \$7,0x0
+ 4c8: d0 ff ff ff movu \$0,0xffffff
+ 4cc: d7 ff ff ff movu \$7,0xffffff
+ 4d0: c0 11 00 00 movu \$0,0x0
+ 4d0: R_MEP_LOW16 symbol
+ 4d4: c7 11 00 00 movu \$7,0x0
+ 4d4: R_MEP_LOW16 symbol
+ 4d8: d0 00 00 00 movu \$0,0x0
+ 4d8: R_MEP_UIMM24 symbol
+ 4dc: d7 00 00 00 movu \$7,0x0
+ 4dc: R_MEP_UIMM24 symbol
+ 4e0: d0 00 00 00 movu \$0,0x0
+ 4e4: c0 21 00 00 movh \$0,0x0
+ 4e8: cf 11 00 00 movu \$sp,0x0
+ 4ec: cf 21 00 00 movh \$sp,0x0
+ 4f0: d0 ff 00 ff movu \$0,0xffff
+ 4f4: c0 21 ff ff movh \$0,0xffff
+ 4f8: cf 11 ff ff movu \$sp,0xffff
+ 4fc: cf 21 ff ff movh \$sp,0xffff
+ 500: c0 11 00 00 movu \$0,0x0
+ 500: R_MEP_LOW16 symbol
+ 504: c0 21 00 00 movh \$0,0x0
+ 504: R_MEP_LOW16 symbol
+ 508: cf 11 00 00 movu \$sp,0x0
+ 508: R_MEP_LOW16 symbol
+ 50c: cf 21 00 00 movh \$sp,0x0
+ 50c: R_MEP_LOW16 symbol
+ 510: c0 11 00 00 movu \$0,0x0
+ 510: R_MEP_HI16S symbol
+ 514: c0 21 00 00 movh \$0,0x0
+ 514: R_MEP_HI16S symbol
+ 518: cf 11 00 00 movu \$sp,0x0
+ 518: R_MEP_HI16S symbol
+ 51c: cf 21 00 00 movh \$sp,0x0
+ 51c: R_MEP_HI16S symbol
+ 520: c0 11 00 00 movu \$0,0x0
+ 520: R_MEP_HI16U symbol
+ 524: c0 21 00 00 movh \$0,0x0
+ 524: R_MEP_HI16U symbol
+ 528: cf 11 00 00 movu \$sp,0x0
+ 528: R_MEP_HI16U symbol
+ 52c: cf 21 00 00 movh \$sp,0x0
+ 52c: R_MEP_HI16U symbol
+ 530: c0 11 56 78 movu \$0,0x5678
+ 534: c0 21 56 78 movh \$0,0x5678
+ 538: cf 11 56 78 movu \$sp,0x5678
+ 53c: cf 21 56 78 movh \$sp,0x5678
+ 540: c0 11 12 34 movu \$0,0x1234
+ 544: c0 21 12 34 movh \$0,0x1234
+ 548: cf 11 12 34 movu \$sp,0x1234
+ 54c: cf 21 12 34 movh \$sp,0x1234
+ 550: c0 11 12 34 movu \$0,0x1234
+ 554: c0 21 12 34 movh \$0,0x1234
+ 558: cf 11 12 34 movu \$sp,0x1234
+ 55c: cf 21 12 34 movh \$sp,0x1234
+ 560: 90 00 add3 \$0,\$0,\$0
+ 562: 90 0f add3 \$sp,\$0,\$0
+ 564: 9f 00 add3 \$0,\$sp,\$0
+ 566: 9f 0f add3 \$sp,\$sp,\$0
+ 568: 90 f0 add3 \$0,\$0,\$sp
+ 56a: 90 ff add3 \$sp,\$0,\$sp
+ 56c: 9f f0 add3 \$0,\$sp,\$sp
+ 56e: 9f ff add3 \$sp,\$sp,\$sp
+ 570: 60 c0 add \$0,-16
+ 572: 6f c0 add \$sp,-16
+ 574: 60 00 add \$0,0
+ 576: 6f 00 add \$sp,0
+ 578: 60 3c add \$0,15
+ 57a: 6f 3c add \$sp,15
+ 57c: 40 00 add3 \$0,\$sp,0x0
+ 57e: 4f 00 add3 \$sp,\$sp,0x0
+ 580: 40 7c add3 \$0,\$sp,0x7c
+ 582: 4f 7c add3 \$sp,\$sp,0x7c
+ 584: c0 f0 00 01 add3 \$0,\$sp,1
+ 588: cf f0 00 01 add3 \$sp,\$sp,1
+ 58c: 00 07 advck3 \$0,\$0,\$0
+ 58e: 00 05 sbvck3 \$0,\$0,\$0
+ 590: 0f 07 advck3 \$0,\$sp,\$0
+ 592: 0f 05 sbvck3 \$0,\$sp,\$0
+ 594: 00 f7 advck3 \$0,\$0,\$sp
+ 596: 00 f5 sbvck3 \$0,\$0,\$sp
+ 598: 0f f7 advck3 \$0,\$sp,\$sp
+ 59a: 0f f5 sbvck3 \$0,\$sp,\$sp
+ 59c: 00 04 sub \$0,\$0
+ 59e: 00 01 neg \$0,\$0
+ 5a0: 0f 04 sub \$sp,\$0
+ 5a2: 0f 01 neg \$sp,\$0
+ 5a4: 00 f4 sub \$0,\$sp
+ 5a6: 00 f1 neg \$0,\$sp
+ 5a8: 0f f4 sub \$sp,\$sp
+ 5aa: 0f f1 neg \$sp,\$sp
+ 5ac: 00 02 slt3 \$0,\$0,\$0
+ 5ae: 00 03 sltu3 \$0,\$0,\$0
+ 5b0: 20 06 sl1ad3 \$0,\$0,\$0
+ 5b2: 20 07 sl2ad3 \$0,\$0,\$0
+ 5b4: 0f 02 slt3 \$0,\$sp,\$0
+ 5b6: 0f 03 sltu3 \$0,\$sp,\$0
+ 5b8: 2f 06 sl1ad3 \$0,\$sp,\$0
+ 5ba: 2f 07 sl2ad3 \$0,\$sp,\$0
+ 5bc: 00 f2 slt3 \$0,\$0,\$sp
+ 5be: 00 f3 sltu3 \$0,\$0,\$sp
+ 5c0: 20 f6 sl1ad3 \$0,\$0,\$sp
+ 5c2: 20 f7 sl2ad3 \$0,\$0,\$sp
+ 5c4: 0f f2 slt3 \$0,\$sp,\$sp
+ 5c6: 0f f3 sltu3 \$0,\$sp,\$sp
+ 5c8: 2f f6 sl1ad3 \$0,\$sp,\$sp
+ 5ca: 2f f7 sl2ad3 \$0,\$sp,\$sp
+ 5cc: c0 00 80 00 add3 \$0,\$0,-32768
+ 5d0: cf 00 80 00 add3 \$sp,\$0,-32768
+ 5d4: c0 f0 80 00 add3 \$0,\$sp,-32768
+ 5d8: cf f0 80 00 add3 \$sp,\$sp,-32768
+ 5dc: c0 00 7f ff add3 \$0,\$0,32767
+ 5e0: cf 00 7f ff add3 \$sp,\$0,32767
+ 5e4: c0 f0 7f ff add3 \$0,\$sp,32767
+ 5e8: cf f0 7f ff add3 \$sp,\$sp,32767
+ 5ec: c0 00 00 00 add3 \$0,\$0,0
+ 5ec: R_MEP_LOW16 symbol
+ 5f0: cf 00 00 00 add3 \$sp,\$0,0
+ 5f0: R_MEP_LOW16 symbol
+ 5f4: c0 f0 00 00 add3 \$0,\$sp,0
+ 5f4: R_MEP_LOW16 symbol
+ 5f8: cf f0 00 00 add3 \$sp,\$sp,0
+ 5f8: R_MEP_LOW16 symbol
+ 5fc: 60 01 slt3 \$0,\$0,0x0
+ 5fe: 60 05 sltu3 \$0,\$0,0x0
+ 600: 6f 01 slt3 \$0,\$sp,0x0
+ 602: 6f 05 sltu3 \$0,\$sp,0x0
+ 604: 60 f9 slt3 \$0,\$0,0x1f
+ 606: 60 fd sltu3 \$0,\$0,0x1f
+ 608: 6f f9 slt3 \$0,\$sp,0x1f
+ 60a: 6f fd sltu3 \$0,\$sp,0x1f
+ 60c: 10 00 or \$0,\$0
+ 60e: 10 01 and \$0,\$0
+ 610: 10 02 xor \$0,\$0
+ 612: 10 03 nor \$0,\$0
+ 614: 1f 00 or \$sp,\$0
+ 616: 1f 01 and \$sp,\$0
+ 618: 1f 02 xor \$sp,\$0
+ 61a: 1f 03 nor \$sp,\$0
+ 61c: 10 f0 or \$0,\$sp
+ 61e: 10 f1 and \$0,\$sp
+ 620: 10 f2 xor \$0,\$sp
+ 622: 10 f3 nor \$0,\$sp
+ 624: 1f f0 or \$sp,\$sp
+ 626: 1f f1 and \$sp,\$sp
+ 628: 1f f2 xor \$sp,\$sp
+ 62a: 1f f3 nor \$sp,\$sp
+ 62c: c0 04 00 00 or3 \$0,\$0,0x0
+ 630: c0 05 00 00 and3 \$0,\$0,0x0
+ 634: c0 06 00 00 xor3 \$0,\$0,0x0
+ 638: cf 04 00 00 or3 \$sp,\$0,0x0
+ 63c: cf 05 00 00 and3 \$sp,\$0,0x0
+ 640: cf 06 00 00 xor3 \$sp,\$0,0x0
+ 644: c0 f4 00 00 or3 \$0,\$sp,0x0
+ 648: c0 f5 00 00 and3 \$0,\$sp,0x0
+ 64c: c0 f6 00 00 xor3 \$0,\$sp,0x0
+ 650: cf f4 00 00 or3 \$sp,\$sp,0x0
+ 654: cf f5 00 00 and3 \$sp,\$sp,0x0
+ 658: cf f6 00 00 xor3 \$sp,\$sp,0x0
+ 65c: c0 04 ff ff or3 \$0,\$0,0xffff
+ 660: c0 05 ff ff and3 \$0,\$0,0xffff
+ 664: c0 06 ff ff xor3 \$0,\$0,0xffff
+ 668: cf 04 ff ff or3 \$sp,\$0,0xffff
+ 66c: cf 05 ff ff and3 \$sp,\$0,0xffff
+ 670: cf 06 ff ff xor3 \$sp,\$0,0xffff
+ 674: c0 f4 ff ff or3 \$0,\$sp,0xffff
+ 678: c0 f5 ff ff and3 \$0,\$sp,0xffff
+ 67c: c0 f6 ff ff xor3 \$0,\$sp,0xffff
+ 680: cf f4 ff ff or3 \$sp,\$sp,0xffff
+ 684: cf f5 ff ff and3 \$sp,\$sp,0xffff
+ 688: cf f6 ff ff xor3 \$sp,\$sp,0xffff
+ 68c: c0 04 00 00 or3 \$0,\$0,0x0
+ 68c: R_MEP_LOW16 symbol
+ 690: c0 05 00 00 and3 \$0,\$0,0x0
+ 690: R_MEP_LOW16 symbol
+ 694: c0 06 00 00 xor3 \$0,\$0,0x0
+ 694: R_MEP_LOW16 symbol
+ 698: cf 04 00 00 or3 \$sp,\$0,0x0
+ 698: R_MEP_LOW16 symbol
+ 69c: cf 05 00 00 and3 \$sp,\$0,0x0
+ 69c: R_MEP_LOW16 symbol
+ 6a0: cf 06 00 00 xor3 \$sp,\$0,0x0
+ 6a0: R_MEP_LOW16 symbol
+ 6a4: c0 f4 00 00 or3 \$0,\$sp,0x0
+ 6a4: R_MEP_LOW16 symbol
+ 6a8: c0 f5 00 00 and3 \$0,\$sp,0x0
+ 6a8: R_MEP_LOW16 symbol
+ 6ac: c0 f6 00 00 xor3 \$0,\$sp,0x0
+ 6ac: R_MEP_LOW16 symbol
+ 6b0: cf f4 00 00 or3 \$sp,\$sp,0x0
+ 6b0: R_MEP_LOW16 symbol
+ 6b4: cf f5 00 00 and3 \$sp,\$sp,0x0
+ 6b4: R_MEP_LOW16 symbol
+ 6b8: cf f6 00 00 xor3 \$sp,\$sp,0x0
+ 6b8: R_MEP_LOW16 symbol
+ 6bc: 20 0d sra \$0,\$0
+ 6be: 20 0c srl \$0,\$0
+ 6c0: 20 0e sll \$0,\$0
+ 6c2: 20 0f fsft \$0,\$0
+ 6c4: 2f 0d sra \$sp,\$0
+ 6c6: 2f 0c srl \$sp,\$0
+ 6c8: 2f 0e sll \$sp,\$0
+ 6ca: 2f 0f fsft \$sp,\$0
+ 6cc: 20 fd sra \$0,\$sp
+ 6ce: 20 fc srl \$0,\$sp
+ 6d0: 20 fe sll \$0,\$sp
+ 6d2: 20 ff fsft \$0,\$sp
+ 6d4: 2f fd sra \$sp,\$sp
+ 6d6: 2f fc srl \$sp,\$sp
+ 6d8: 2f fe sll \$sp,\$sp
+ 6da: 2f ff fsft \$sp,\$sp
+ 6dc: 60 03 sra \$0,0x0
+ 6de: 60 02 srl \$0,0x0
+ 6e0: 60 06 sll \$0,0x0
+ 6e2: 6f 03 sra \$sp,0x0
+ 6e4: 6f 02 srl \$sp,0x0
+ 6e6: 6f 06 sll \$sp,0x0
+ 6e8: 60 fb sra \$0,0x1f
+ 6ea: 60 fa srl \$0,0x1f
+ 6ec: 60 fe sll \$0,0x1f
+ 6ee: 6f fb sra \$sp,0x1f
+ 6f0: 6f fa srl \$sp,0x1f
+ 6f2: 6f fe sll \$sp,0x1f
+ 6f4: 60 07 sll3 \$0,\$0,0x0
+ 6f6: 6f 07 sll3 \$0,\$sp,0x0
+ 6f8: 60 ff sll3 \$0,\$0,0x1f
+ 6fa: 6f ff sll3 \$0,\$sp,0x1f
+ 6fc: b8 02 bra 0xfffffefe
+ 6fe: e0 01 04 00 beq \$0,\$0,0xefe
+ 702: b0 00 bra 0x702
+ 702: R_MEP_PCREL12A2 symbol
+ 704: a0 82 beqz \$0,0x686
+ 706: a0 83 bnez \$0,0x688
+ 708: af 82 beqz \$sp,0x68a
+ 70a: af 83 bnez \$sp,0x68c
+ 70c: e0 00 00 40 beqi \$0,0x0,0x78c
+ 710: e0 04 00 40 bnei \$0,0x0,0x790
+ 714: ef 00 00 40 beqi \$sp,0x0,0x794
+ 718: ef 04 00 40 bnei \$sp,0x0,0x798
+ 71c: a0 00 beqz \$0,0x71c
+ 71c: R_MEP_PCREL8A2 symbol
+ 71e: a0 01 bnez \$0,0x71e
+ 71e: R_MEP_PCREL8A2 symbol
+ 720: af 00 beqz \$sp,0x720
+ 720: R_MEP_PCREL8A2 symbol
+ 722: af 01 bnez \$sp,0x722
+ 722: R_MEP_PCREL8A2 symbol
+ 724: e0 00 80 02 beqi \$0,0x0,0xffff0728
+ 728: e0 04 80 02 bnei \$0,0x0,0xffff072c
+ 72c: e0 0c 80 02 blti \$0,0x0,0xffff0730
+ 730: e0 08 80 02 bgei \$0,0x0,0xffff0734
+ 734: ef 00 80 02 beqi \$sp,0x0,0xffff0738
+ 738: ef 04 80 02 bnei \$sp,0x0,0xffff073c
+ 73c: ef 0c 80 02 blti \$sp,0x0,0xffff0740
+ 740: ef 08 80 02 bgei \$sp,0x0,0xffff0744
+ 744: e0 f0 80 02 beqi \$0,0xf,0xffff0748
+ 748: e0 f4 80 02 bnei \$0,0xf,0xffff074c
+ 74c: e0 fc 80 02 blti \$0,0xf,0xffff0750
+ 750: e0 f8 80 02 bgei \$0,0xf,0xffff0754
+ 754: ef f0 80 02 beqi \$sp,0xf,0xffff0758
+ 758: ef f4 80 02 bnei \$sp,0xf,0xffff075c
+ 75c: ef fc 80 02 blti \$sp,0xf,0xffff0760
+ 760: ef f8 80 02 bgei \$sp,0xf,0xffff0764
+ 764: e0 00 3f ff beqi \$0,0x0,0x8762
+ 768: e0 04 3f ff bnei \$0,0x0,0x8766
+ 76c: e0 0c 3f ff blti \$0,0x0,0x876a
+ 770: e0 08 3f ff bgei \$0,0x0,0x876e
+ 774: ef 00 3f ff beqi \$sp,0x0,0x8772
+ 778: ef 04 3f ff bnei \$sp,0x0,0x8776
+ 77c: ef 0c 3f ff blti \$sp,0x0,0x877a
+ 780: ef 08 3f ff bgei \$sp,0x0,0x877e
+ 784: e0 f0 3f ff beqi \$0,0xf,0x8782
+ 788: e0 f4 3f ff bnei \$0,0xf,0x8786
+ 78c: e0 fc 3f ff blti \$0,0xf,0x878a
+ 790: e0 f8 3f ff bgei \$0,0xf,0x878e
+ 794: ef f0 3f ff beqi \$sp,0xf,0x8792
+ 798: ef f4 3f ff bnei \$sp,0xf,0x8796
+ 79c: ef fc 3f ff blti \$sp,0xf,0x879a
+ 7a0: ef f8 3f ff bgei \$sp,0xf,0x879e
+ 7a4: e0 00 00 00 beqi \$0,0x0,0x7a4
+ 7a4: R_MEP_PCREL17A2 symbol
+ 7a8: e0 04 00 00 bnei \$0,0x0,0x7a8
+ 7a8: R_MEP_PCREL17A2 symbol
+ 7ac: e0 0c 00 00 blti \$0,0x0,0x7ac
+ 7ac: R_MEP_PCREL17A2 symbol
+ 7b0: e0 08 00 00 bgei \$0,0x0,0x7b0
+ 7b0: R_MEP_PCREL17A2 symbol
+ 7b4: ef 00 00 00 beqi \$sp,0x0,0x7b4
+ 7b4: R_MEP_PCREL17A2 symbol
+ 7b8: ef 04 00 00 bnei \$sp,0x0,0x7b8
+ 7b8: R_MEP_PCREL17A2 symbol
+ 7bc: ef 0c 00 00 blti \$sp,0x0,0x7bc
+ 7bc: R_MEP_PCREL17A2 symbol
+ 7c0: ef 08 00 00 bgei \$sp,0x0,0x7c0
+ 7c0: R_MEP_PCREL17A2 symbol
+ 7c4: e0 f0 00 00 beqi \$0,0xf,0x7c4
+ 7c4: R_MEP_PCREL17A2 symbol
+ 7c8: e0 f4 00 00 bnei \$0,0xf,0x7c8
+ 7c8: R_MEP_PCREL17A2 symbol
+ 7cc: e0 fc 00 00 blti \$0,0xf,0x7cc
+ 7cc: R_MEP_PCREL17A2 symbol
+ 7d0: e0 f8 00 00 bgei \$0,0xf,0x7d0
+ 7d0: R_MEP_PCREL17A2 symbol
+ 7d4: ef f0 00 00 beqi \$sp,0xf,0x7d4
+ 7d4: R_MEP_PCREL17A2 symbol
+ 7d8: ef f4 00 00 bnei \$sp,0xf,0x7d8
+ 7d8: R_MEP_PCREL17A2 symbol
+ 7dc: ef fc 00 00 blti \$sp,0xf,0x7dc
+ 7dc: R_MEP_PCREL17A2 symbol
+ 7e0: ef f8 00 00 bgei \$sp,0xf,0x7e0
+ 7e0: R_MEP_PCREL17A2 symbol
+ 7e4: e0 01 80 02 beq \$0,\$0,0xffff07e8
+ 7e8: e0 05 80 02 bne \$0,\$0,0xffff07ec
+ 7ec: ef 01 80 02 beq \$sp,\$0,0xffff07f0
+ 7f0: ef 05 80 02 bne \$sp,\$0,0xffff07f4
+ 7f4: e0 f1 80 02 beq \$0,\$sp,0xffff07f8
+ 7f8: e0 f5 80 02 bne \$0,\$sp,0xffff07fc
+ 7fc: ef f1 80 02 beq \$sp,\$sp,0xffff0800
+ 800: ef f5 80 02 bne \$sp,\$sp,0xffff0804
+ 804: e0 01 3f ff beq \$0,\$0,0x8802
+ 808: e0 05 3f ff bne \$0,\$0,0x8806
+ 80c: ef 01 3f ff beq \$sp,\$0,0x880a
+ 810: ef 05 3f ff bne \$sp,\$0,0x880e
+ 814: e0 f1 3f ff beq \$0,\$sp,0x8812
+ 818: e0 f5 3f ff bne \$0,\$sp,0x8816
+ 81c: ef f1 3f ff beq \$sp,\$sp,0x881a
+ 820: ef f5 3f ff bne \$sp,\$sp,0x881e
+ 824: e0 01 00 00 beq \$0,\$0,0x824
+ 824: R_MEP_PCREL17A2 symbol
+ 828: e0 05 00 00 bne \$0,\$0,0x828
+ 828: R_MEP_PCREL17A2 symbol
+ 82c: ef 01 00 00 beq \$sp,\$0,0x82c
+ 82c: R_MEP_PCREL17A2 symbol
+ 830: ef 05 00 00 bne \$sp,\$0,0x830
+ 830: R_MEP_PCREL17A2 symbol
+ 834: e0 f1 00 00 beq \$0,\$sp,0x834
+ 834: R_MEP_PCREL17A2 symbol
+ 838: e0 f5 00 00 bne \$0,\$sp,0x838
+ 838: R_MEP_PCREL17A2 symbol
+ 83c: ef f1 00 00 beq \$sp,\$sp,0x83c
+ 83c: R_MEP_PCREL17A2 symbol
+ 840: ef f5 00 00 bne \$sp,\$sp,0x840
+ 840: R_MEP_PCREL17A2 symbol
+ 844: d8 29 80 00 bsr 0xff800848
+ 848: b8 03 bsr 0x4a
+ 84a: d8 09 00 08 bsr 0x104a
+ 84e: d8 19 80 00 bsr 0xff800850
+ 852: d8 09 00 00 bsr 0x852
+ 852: R_MEP_PCREL24A2 symbol
+ 856: 10 0e jmp \$0
+ 858: 10 fe jmp \$sp
+ 85a: d8 08 00 00 jmp 0x0
+ 85e: df f8 ff ff jmp 0xfffffe
+ 862: d8 08 00 00 jmp 0x0
+ 862: R_MEP_PCABS24A2 symbol
+ 866: 10 0f jsr \$0
+ 868: 10 ff jsr \$sp
+ 86a: 70 02 ret
+ 86c: e0 09 80 02 repeat \$0,0xffff0870
+ 870: ef 09 80 02 repeat \$sp,0xffff0874
+ 874: e0 09 3f ff repeat \$0,0x8872
+ 878: ef 09 3f ff repeat \$sp,0x8876
+ 87c: e0 09 00 00 repeat \$0,0x87c
+ 87c: R_MEP_PCREL17A2 symbol
+ 880: ef 09 00 00 repeat \$sp,0x880
+ 880: R_MEP_PCREL17A2 symbol
+ 884: e0 19 80 02 erepeat 0xffff0888
+ 888: e0 19 3f ff erepeat 0x8886
+ 88c: e0 19 00 00 erepeat 0x88c
+ 88c: R_MEP_PCREL17A2 symbol
+ 890: 70 08 stc \$0,\$pc
+ 892: 70 0a ldc \$0,\$pc
+ 894: 7f 08 stc \$sp,\$pc
+ 896: 7f 0a ldc \$sp,\$pc
+ 898: 70 18 stc \$0,\$lp
+ 89a: 70 1a ldc \$0,\$lp
+ 89c: 7f 18 stc \$sp,\$lp
+ 89e: 7f 1a ldc \$sp,\$lp
+ 8a0: 70 28 stc \$0,\$sar
+ 8a2: 70 2a ldc \$0,\$sar
+ 8a4: 7f 28 stc \$sp,\$sar
+ 8a6: 7f 2a ldc \$sp,\$sar
+ 8a8: 70 48 stc \$0,\$rpb
+ 8aa: 70 4a ldc \$0,\$rpb
+ 8ac: 7f 48 stc \$sp,\$rpb
+ 8ae: 7f 4a ldc \$sp,\$rpb
+ 8b0: 70 58 stc \$0,\$rpe
+ 8b2: 70 5a ldc \$0,\$rpe
+ 8b4: 7f 58 stc \$sp,\$rpe
+ 8b6: 7f 5a ldc \$sp,\$rpe
+ 8b8: 70 68 stc \$0,\$rpc
+ 8ba: 70 6a ldc \$0,\$rpc
+ 8bc: 7f 68 stc \$sp,\$rpc
+ 8be: 7f 6a ldc \$sp,\$rpc
+ 8c0: 70 78 stc \$0,\$hi
+ 8c2: 70 7a ldc \$0,\$hi
+ 8c4: 7f 78 stc \$sp,\$hi
+ 8c6: 7f 7a ldc \$sp,\$hi
+ 8c8: 70 88 stc \$0,\$lo
+ 8ca: 70 8a ldc \$0,\$lo
+ 8cc: 7f 88 stc \$sp,\$lo
+ 8ce: 7f 8a ldc \$sp,\$lo
+ 8d0: 70 c8 stc \$0,\$mb0
+ 8d2: 70 ca ldc \$0,\$mb0
+ 8d4: 7f c8 stc \$sp,\$mb0
+ 8d6: 7f ca ldc \$sp,\$mb0
+ 8d8: 70 d8 stc \$0,\$me0
+ 8da: 70 da ldc \$0,\$me0
+ 8dc: 7f d8 stc \$sp,\$me0
+ 8de: 7f da ldc \$sp,\$me0
+ 8e0: 70 e8 stc \$0,\$mb1
+ 8e2: 70 ea ldc \$0,\$mb1
+ 8e4: 7f e8 stc \$sp,\$mb1
+ 8e6: 7f ea ldc \$sp,\$mb1
+ 8e8: 70 f8 stc \$0,\$me1
+ 8ea: 70 fa ldc \$0,\$me1
+ 8ec: 7f f8 stc \$sp,\$me1
+ 8ee: 7f fa ldc \$sp,\$me1
+ 8f0: 70 09 stc \$0,\$psw
+ 8f2: 70 0b ldc \$0,\$psw
+ 8f4: 7f 09 stc \$sp,\$psw
+ 8f6: 7f 0b ldc \$sp,\$psw
+ 8f8: 70 19 stc \$0,\$id
+ 8fa: 70 1b ldc \$0,\$id
+ 8fc: 7f 19 stc \$sp,\$id
+ 8fe: 7f 1b ldc \$sp,\$id
+ 900: 70 29 stc \$0,\$tmp
+ 902: 70 2b ldc \$0,\$tmp
+ 904: 7f 29 stc \$sp,\$tmp
+ 906: 7f 2b ldc \$sp,\$tmp
+ 908: 70 39 stc \$0,\$epc
+ 90a: 70 3b ldc \$0,\$epc
+ 90c: 7f 39 stc \$sp,\$epc
+ 90e: 7f 3b ldc \$sp,\$epc
+ 910: 70 49 stc \$0,\$exc
+ 912: 70 4b ldc \$0,\$exc
+ 914: 7f 49 stc \$sp,\$exc
+ 916: 7f 4b ldc \$sp,\$exc
+ 918: 70 59 stc \$0,\$cfg
+ 91a: 70 5b ldc \$0,\$cfg
+ 91c: 7f 59 stc \$sp,\$cfg
+ 91e: 7f 5b ldc \$sp,\$cfg
+ 920: 70 79 stc \$0,\$npc
+ 922: 70 7b ldc \$0,\$npc
+ 924: 7f 79 stc \$sp,\$npc
+ 926: 7f 7b ldc \$sp,\$npc
+ 928: 70 89 stc \$0,\$dbg
+ 92a: 70 8b ldc \$0,\$dbg
+ 92c: 7f 89 stc \$sp,\$dbg
+ 92e: 7f 8b ldc \$sp,\$dbg
+ 930: 70 99 stc \$0,\$depc
+ 932: 70 9b ldc \$0,\$depc
+ 934: 7f 99 stc \$sp,\$depc
+ 936: 7f 9b ldc \$sp,\$depc
+ 938: 70 a9 stc \$0,\$opt
+ 93a: 70 ab ldc \$0,\$opt
+ 93c: 7f a9 stc \$sp,\$opt
+ 93e: 7f ab ldc \$sp,\$opt
+ 940: 70 b9 stc \$0,\$rcfg
+ 942: 70 bb ldc \$0,\$rcfg
+ 944: 7f b9 stc \$sp,\$rcfg
+ 946: 7f bb ldc \$sp,\$rcfg
+ 948: 70 c9 stc \$0,\$ccfg
+ 94a: 70 cb ldc \$0,\$ccfg
+ 94c: 7f c9 stc \$sp,\$ccfg
+ 94e: 7f cb ldc \$sp,\$ccfg
+ 950: 70 00 di
+ 952: 70 10 ei
+ 954: 70 12 reti
+ 956: 70 22 halt
+ 958: 70 32 break
+ 95a: 70 11 syncm
+ 95c: 70 06 swi 0x0
+ 95e: 70 36 swi 0x3
+ 960: f0 04 00 00 stcb \$0,0x0
+ 964: f0 14 00 00 ldcb \$0,0x0
+ 968: ff 04 00 00 stcb \$sp,0x0
+ 96c: ff 14 00 00 ldcb \$sp,0x0
+ 970: f0 04 ff ff stcb \$0,0xffff
+ 974: f0 14 ff ff ldcb \$0,0xffff
+ 978: ff 04 ff ff stcb \$sp,0xffff
+ 97c: ff 14 ff ff ldcb \$sp,0xffff
+ 980: f0 04 00 00 stcb \$0,0x0
+ 982: R_MEP_16 symbol
+ 984: f0 14 00 00 ldcb \$0,0x0
+ 986: R_MEP_16 symbol
+ 988: ff 04 00 00 stcb \$sp,0x0
+ 98a: R_MEP_16 symbol
+ 98c: ff 14 00 00 ldcb \$sp,0x0
+ 98e: R_MEP_16 symbol
+ 990: 20 00 bsetm \(\$0\),0x0
+ 992: 20 01 bclrm \(\$0\),0x0
+ 994: 20 02 bnotm \(\$0\),0x0
+ 996: 20 f0 bsetm \(\$sp\),0x0
+ 998: 20 f1 bclrm \(\$sp\),0x0
+ 99a: 20 f2 bnotm \(\$sp\),0x0
+ 99c: 27 00 bsetm \(\$0\),0x7
+ 99e: 27 01 bclrm \(\$0\),0x7
+ 9a0: 27 02 bnotm \(\$0\),0x7
+ 9a2: 27 f0 bsetm \(\$sp\),0x7
+ 9a4: 27 f1 bclrm \(\$sp\),0x7
+ 9a6: 27 f2 bnotm \(\$sp\),0x7
+ 9a8: 20 03 btstm \$0,\(\$0\),0x0
+ 9aa: 20 f3 btstm \$0,\(\$sp\),0x0
+ 9ac: 27 03 btstm \$0,\(\$0\),0x7
+ 9ae: 27 f3 btstm \$0,\(\$sp\),0x7
+ 9b0: 20 04 tas \$0,\(\$0\)
+ 9b2: 2f 04 tas \$sp,\(\$0\)
+ 9b4: 20 f4 tas \$0,\(\$sp\)
+ 9b6: 2f f4 tas \$sp,\(\$sp\)
+ 9b8: 70 04 cache 0x0,\(\$0\)
+ 9ba: 73 04 cache 0x3,\(\$0\)
+ 9bc: 70 f4 cache 0x0,\(\$sp\)
+ 9be: 73 f4 cache 0x3,\(\$sp\)
+ 9c0: 10 04 mul \$0,\$0
+ 9c2: f0 01 30 04 madd \$0,\$0
+ 9c6: 10 06 mulr \$0,\$0
+ 9c8: f0 01 30 06 maddr \$0,\$0
+ 9cc: 10 05 mulu \$0,\$0
+ 9ce: f0 01 30 05 maddu \$0,\$0
+ 9d2: 10 07 mulru \$0,\$0
+ 9d4: f0 01 30 07 maddru \$0,\$0
+ 9d8: 1f 04 mul \$sp,\$0
+ 9da: ff 01 30 04 madd \$sp,\$0
+ 9de: 1f 06 mulr \$sp,\$0
+ 9e0: ff 01 30 06 maddr \$sp,\$0
+ 9e4: 1f 05 mulu \$sp,\$0
+ 9e6: ff 01 30 05 maddu \$sp,\$0
+ 9ea: 1f 07 mulru \$sp,\$0
+ 9ec: ff 01 30 07 maddru \$sp,\$0
+ 9f0: 10 f4 mul \$0,\$sp
+ 9f2: f0 f1 30 04 madd \$0,\$sp
+ 9f6: 10 f6 mulr \$0,\$sp
+ 9f8: f0 f1 30 06 maddr \$0,\$sp
+ 9fc: 10 f5 mulu \$0,\$sp
+ 9fe: f0 f1 30 05 maddu \$0,\$sp
+ a02: 10 f7 mulru \$0,\$sp
+ a04: f0 f1 30 07 maddru \$0,\$sp
+ a08: 1f f4 mul \$sp,\$sp
+ a0a: ff f1 30 04 madd \$sp,\$sp
+ a0e: 1f f6 mulr \$sp,\$sp
+ a10: ff f1 30 06 maddr \$sp,\$sp
+ a14: 1f f5 mulu \$sp,\$sp
+ a16: ff f1 30 05 maddu \$sp,\$sp
+ a1a: 1f f7 mulru \$sp,\$sp
+ a1c: ff f1 30 07 maddru \$sp,\$sp
+ a20: 10 08 div \$0,\$0
+ a22: 10 09 divu \$0,\$0
+ a24: 1f 08 div \$sp,\$0
+ a26: 1f 09 divu \$sp,\$0
+ a28: 10 f8 div \$0,\$sp
+ a2a: 10 f9 divu \$0,\$sp
+ a2c: 1f f8 div \$sp,\$sp
+ a2e: 1f f9 divu \$sp,\$sp
+ a30: 70 13 dret
+ a32: 70 33 dbreak
+ a34: f0 01 00 00 ldz \$0,\$0
+ a38: f0 01 00 03 abs \$0,\$0
+ a3c: f0 01 00 02 ave \$0,\$0
+ a40: ff 01 00 00 ldz \$sp,\$0
+ a44: ff 01 00 03 abs \$sp,\$0
+ a48: ff 01 00 02 ave \$sp,\$0
+ a4c: f0 f1 00 00 ldz \$0,\$sp
+ a50: f0 f1 00 03 abs \$0,\$sp
+ a54: f0 f1 00 02 ave \$0,\$sp
+ a58: ff f1 00 00 ldz \$sp,\$sp
+ a5c: ff f1 00 03 abs \$sp,\$sp
+ a60: ff f1 00 02 ave \$sp,\$sp
+ a64: f0 01 00 04 min \$0,\$0
+ a68: f0 01 00 05 max \$0,\$0
+ a6c: f0 01 00 06 minu \$0,\$0
+ a70: f0 01 00 07 maxu \$0,\$0
+ a74: ff 01 00 04 min \$sp,\$0
+ a78: ff 01 00 05 max \$sp,\$0
+ a7c: ff 01 00 06 minu \$sp,\$0
+ a80: ff 01 00 07 maxu \$sp,\$0
+ a84: f0 f1 00 04 min \$0,\$sp
+ a88: f0 f1 00 05 max \$0,\$sp
+ a8c: f0 f1 00 06 minu \$0,\$sp
+ a90: f0 f1 00 07 maxu \$0,\$sp
+ a94: ff f1 00 04 min \$sp,\$sp
+ a98: ff f1 00 05 max \$sp,\$sp
+ a9c: ff f1 00 06 minu \$sp,\$sp
+ aa0: ff f1 00 07 maxu \$sp,\$sp
+ aa4: f0 01 10 00 clip \$0,0x0
+ aa8: f0 01 10 01 clipu \$0,0x0
+ aac: ff 01 10 00 clip \$sp,0x0
+ ab0: ff 01 10 01 clipu \$sp,0x0
+ ab4: f0 01 10 f8 clip \$0,0x1f
+ ab8: f0 01 10 f9 clipu \$0,0x1f
+ abc: ff 01 10 f8 clip \$sp,0x1f
+ ac0: ff 01 10 f9 clipu \$sp,0x1f
+ ac4: f0 01 00 08 sadd \$0,\$0
+ ac8: f0 01 00 0a ssub \$0,\$0
+ acc: f0 01 00 09 saddu \$0,\$0
+ ad0: f0 01 00 0b ssubu \$0,\$0
+ ad4: ff 01 00 08 sadd \$sp,\$0
+ ad8: ff 01 00 0a ssub \$sp,\$0
+ adc: ff 01 00 09 saddu \$sp,\$0
+ ae0: ff 01 00 0b ssubu \$sp,\$0
+ ae4: f0 f1 00 08 sadd \$0,\$sp
+ ae8: f0 f1 00 0a ssub \$0,\$sp
+ aec: f0 f1 00 09 saddu \$0,\$sp
+ af0: f0 f1 00 0b ssubu \$0,\$sp
+ af4: ff f1 00 08 sadd \$sp,\$sp
+ af8: ff f1 00 0a ssub \$sp,\$sp
+ afc: ff f1 00 09 saddu \$sp,\$sp
+ b00: ff f1 00 0b ssubu \$sp,\$sp
+ b04: 30 08 swcp \$c0,\(\$0\)
+ b06: 30 09 lwcp \$c0,\(\$0\)
+ b08: 30 0a smcp \$c0,\(\$0\)
+ b0a: 30 0b lmcp \$c0,\(\$0\)
+ b0c: 3f 08 swcp \$c15,\(\$0\)
+ b0e: 3f 09 lwcp \$c15,\(\$0\)
+ b10: 3f 0a smcp \$c15,\(\$0\)
+ b12: 3f 0b lmcp \$c15,\(\$0\)
+ b14: 30 f8 swcp \$c0,\(\$sp\)
+ b16: 30 f9 lwcp \$c0,\(\$sp\)
+ b18: 30 fa smcp \$c0,\(\$sp\)
+ b1a: 30 fb lmcp \$c0,\(\$sp\)
+ b1c: 3f f8 swcp \$c15,\(\$sp\)
+ b1e: 3f f9 lwcp \$c15,\(\$sp\)
+ b20: 3f fa smcp \$c15,\(\$sp\)
+ b22: 3f fb lmcp \$c15,\(\$sp\)
+ b24: 30 00 swcpi \$c0,\(\$0\+\)
+ b26: 30 01 lwcpi \$c0,\(\$0\+\)
+ b28: 30 02 smcpi \$c0,\(\$0\+\)
+ b2a: 30 03 lmcpi \$c0,\(\$0\+\)
+ b2c: 3f 00 swcpi \$c15,\(\$0\+\)
+ b2e: 3f 01 lwcpi \$c15,\(\$0\+\)
+ b30: 3f 02 smcpi \$c15,\(\$0\+\)
+ b32: 3f 03 lmcpi \$c15,\(\$0\+\)
+ b34: 30 f0 swcpi \$c0,\(\$sp\+\)
+ b36: 30 f1 lwcpi \$c0,\(\$sp\+\)
+ b38: 30 f2 smcpi \$c0,\(\$sp\+\)
+ b3a: 30 f3 lmcpi \$c0,\(\$sp\+\)
+ b3c: 3f f0 swcpi \$c15,\(\$sp\+\)
+ b3e: 3f f1 lwcpi \$c15,\(\$sp\+\)
+ b40: 3f f2 smcpi \$c15,\(\$sp\+\)
+ b42: 3f f3 lmcpi \$c15,\(\$sp\+\)
+ b44: f0 05 00 80 sbcpa \$c0,\(\$0\+\),-128
+ b48: f0 05 40 80 lbcpa \$c0,\(\$0\+\),-128
+ b4c: f0 05 08 80 sbcpm0 \$c0,\(\$0\+\),-128
+ b50: f0 05 48 80 lbcpm0 \$c0,\(\$0\+\),-128
+ b54: f0 05 0c 80 sbcpm1 \$c0,\(\$0\+\),-128
+ b58: f0 05 4c 80 lbcpm1 \$c0,\(\$0\+\),-128
+ b5c: ff 05 00 80 sbcpa \$c15,\(\$0\+\),-128
+ b60: ff 05 40 80 lbcpa \$c15,\(\$0\+\),-128
+ b64: ff 05 08 80 sbcpm0 \$c15,\(\$0\+\),-128
+ b68: ff 05 48 80 lbcpm0 \$c15,\(\$0\+\),-128
+ b6c: ff 05 0c 80 sbcpm1 \$c15,\(\$0\+\),-128
+ b70: ff 05 4c 80 lbcpm1 \$c15,\(\$0\+\),-128
+ b74: f0 f5 00 80 sbcpa \$c0,\(\$sp\+\),-128
+ b78: f0 f5 40 80 lbcpa \$c0,\(\$sp\+\),-128
+ b7c: f0 f5 08 80 sbcpm0 \$c0,\(\$sp\+\),-128
+ b80: f0 f5 48 80 lbcpm0 \$c0,\(\$sp\+\),-128
+ b84: f0 f5 0c 80 sbcpm1 \$c0,\(\$sp\+\),-128
+ b88: f0 f5 4c 80 lbcpm1 \$c0,\(\$sp\+\),-128
+ b8c: ff f5 00 80 sbcpa \$c15,\(\$sp\+\),-128
+ b90: ff f5 40 80 lbcpa \$c15,\(\$sp\+\),-128
+ b94: ff f5 08 80 sbcpm0 \$c15,\(\$sp\+\),-128
+ b98: ff f5 48 80 lbcpm0 \$c15,\(\$sp\+\),-128
+ b9c: ff f5 0c 80 sbcpm1 \$c15,\(\$sp\+\),-128
+ ba0: ff f5 4c 80 lbcpm1 \$c15,\(\$sp\+\),-128
+ ba4: f0 05 00 7f sbcpa \$c0,\(\$0\+\),127
+ ba8: f0 05 40 7f lbcpa \$c0,\(\$0\+\),127
+ bac: f0 05 08 7f sbcpm0 \$c0,\(\$0\+\),127
+ bb0: f0 05 48 7f lbcpm0 \$c0,\(\$0\+\),127
+ bb4: f0 05 0c 7f sbcpm1 \$c0,\(\$0\+\),127
+ bb8: f0 05 4c 7f lbcpm1 \$c0,\(\$0\+\),127
+ bbc: ff 05 00 7f sbcpa \$c15,\(\$0\+\),127
+ bc0: ff 05 40 7f lbcpa \$c15,\(\$0\+\),127
+ bc4: ff 05 08 7f sbcpm0 \$c15,\(\$0\+\),127
+ bc8: ff 05 48 7f lbcpm0 \$c15,\(\$0\+\),127
+ bcc: ff 05 0c 7f sbcpm1 \$c15,\(\$0\+\),127
+ bd0: ff 05 4c 7f lbcpm1 \$c15,\(\$0\+\),127
+ bd4: f0 f5 00 7f sbcpa \$c0,\(\$sp\+\),127
+ bd8: f0 f5 40 7f lbcpa \$c0,\(\$sp\+\),127
+ bdc: f0 f5 08 7f sbcpm0 \$c0,\(\$sp\+\),127
+ be0: f0 f5 48 7f lbcpm0 \$c0,\(\$sp\+\),127
+ be4: f0 f5 0c 7f sbcpm1 \$c0,\(\$sp\+\),127
+ be8: f0 f5 4c 7f lbcpm1 \$c0,\(\$sp\+\),127
+ bec: ff f5 00 7f sbcpa \$c15,\(\$sp\+\),127
+ bf0: ff f5 40 7f lbcpa \$c15,\(\$sp\+\),127
+ bf4: ff f5 08 7f sbcpm0 \$c15,\(\$sp\+\),127
+ bf8: ff f5 48 7f lbcpm0 \$c15,\(\$sp\+\),127
+ bfc: ff f5 0c 7f sbcpm1 \$c15,\(\$sp\+\),127
+ c00: ff f5 4c 7f lbcpm1 \$c15,\(\$sp\+\),127
+ c04: f0 05 10 80 shcpa \$c0,\(\$0\+\),-128
+ c08: f0 05 50 80 lhcpa \$c0,\(\$0\+\),-128
+ c0c: f0 05 18 80 shcpm0 \$c0,\(\$0\+\),-128
+ c10: f0 05 58 80 lhcpm0 \$c0,\(\$0\+\),-128
+ c14: f0 05 1c 80 shcpm1 \$c0,\(\$0\+\),-128
+ c18: f0 05 5c 80 lhcpm1 \$c0,\(\$0\+\),-128
+ c1c: ff 05 10 80 shcpa \$c15,\(\$0\+\),-128
+ c20: ff 05 50 80 lhcpa \$c15,\(\$0\+\),-128
+ c24: ff 05 18 80 shcpm0 \$c15,\(\$0\+\),-128
+ c28: ff 05 58 80 lhcpm0 \$c15,\(\$0\+\),-128
+ c2c: ff 05 1c 80 shcpm1 \$c15,\(\$0\+\),-128
+ c30: ff 05 5c 80 lhcpm1 \$c15,\(\$0\+\),-128
+ c34: f0 f5 10 80 shcpa \$c0,\(\$sp\+\),-128
+ c38: f0 f5 50 80 lhcpa \$c0,\(\$sp\+\),-128
+ c3c: f0 f5 18 80 shcpm0 \$c0,\(\$sp\+\),-128
+ c40: f0 f5 58 80 lhcpm0 \$c0,\(\$sp\+\),-128
+ c44: f0 f5 1c 80 shcpm1 \$c0,\(\$sp\+\),-128
+ c48: f0 f5 5c 80 lhcpm1 \$c0,\(\$sp\+\),-128
+ c4c: ff f5 10 80 shcpa \$c15,\(\$sp\+\),-128
+ c50: ff f5 50 80 lhcpa \$c15,\(\$sp\+\),-128
+ c54: ff f5 18 80 shcpm0 \$c15,\(\$sp\+\),-128
+ c58: ff f5 58 80 lhcpm0 \$c15,\(\$sp\+\),-128
+ c5c: ff f5 1c 80 shcpm1 \$c15,\(\$sp\+\),-128
+ c60: ff f5 5c 80 lhcpm1 \$c15,\(\$sp\+\),-128
+ c64: f0 05 10 7e shcpa \$c0,\(\$0\+\),126
+ c68: f0 05 50 7e lhcpa \$c0,\(\$0\+\),126
+ c6c: f0 05 18 7e shcpm0 \$c0,\(\$0\+\),126
+ c70: f0 05 58 7e lhcpm0 \$c0,\(\$0\+\),126
+ c74: f0 05 1c 7e shcpm1 \$c0,\(\$0\+\),126
+ c78: f0 05 5c 7e lhcpm1 \$c0,\(\$0\+\),126
+ c7c: ff 05 10 7e shcpa \$c15,\(\$0\+\),126
+ c80: ff 05 50 7e lhcpa \$c15,\(\$0\+\),126
+ c84: ff 05 18 7e shcpm0 \$c15,\(\$0\+\),126
+ c88: ff 05 58 7e lhcpm0 \$c15,\(\$0\+\),126
+ c8c: ff 05 1c 7e shcpm1 \$c15,\(\$0\+\),126
+ c90: ff 05 5c 7e lhcpm1 \$c15,\(\$0\+\),126
+ c94: f0 f5 10 7e shcpa \$c0,\(\$sp\+\),126
+ c98: f0 f5 50 7e lhcpa \$c0,\(\$sp\+\),126
+ c9c: f0 f5 18 7e shcpm0 \$c0,\(\$sp\+\),126
+ ca0: f0 f5 58 7e lhcpm0 \$c0,\(\$sp\+\),126
+ ca4: f0 f5 1c 7e shcpm1 \$c0,\(\$sp\+\),126
+ ca8: f0 f5 5c 7e lhcpm1 \$c0,\(\$sp\+\),126
+ cac: ff f5 10 7e shcpa \$c15,\(\$sp\+\),126
+ cb0: ff f5 50 7e lhcpa \$c15,\(\$sp\+\),126
+ cb4: ff f5 18 7e shcpm0 \$c15,\(\$sp\+\),126
+ cb8: ff f5 58 7e lhcpm0 \$c15,\(\$sp\+\),126
+ cbc: ff f5 1c 7e shcpm1 \$c15,\(\$sp\+\),126
+ cc0: ff f5 5c 7e lhcpm1 \$c15,\(\$sp\+\),126
+ cc4: f0 05 20 80 swcpa \$c0,\(\$0\+\),-128
+ cc8: f0 05 60 80 lwcpa \$c0,\(\$0\+\),-128
+ ccc: f0 05 28 80 swcpm0 \$c0,\(\$0\+\),-128
+ cd0: f0 05 68 80 lwcpm0 \$c0,\(\$0\+\),-128
+ cd4: f0 05 2c 80 swcpm1 \$c0,\(\$0\+\),-128
+ cd8: f0 05 6c 80 lwcpm1 \$c0,\(\$0\+\),-128
+ cdc: ff 05 20 80 swcpa \$c15,\(\$0\+\),-128
+ ce0: ff 05 60 80 lwcpa \$c15,\(\$0\+\),-128
+ ce4: ff 05 28 80 swcpm0 \$c15,\(\$0\+\),-128
+ ce8: ff 05 68 80 lwcpm0 \$c15,\(\$0\+\),-128
+ cec: ff 05 2c 80 swcpm1 \$c15,\(\$0\+\),-128
+ cf0: ff 05 6c 80 lwcpm1 \$c15,\(\$0\+\),-128
+ cf4: f0 f5 20 80 swcpa \$c0,\(\$sp\+\),-128
+ cf8: f0 f5 60 80 lwcpa \$c0,\(\$sp\+\),-128
+ cfc: f0 f5 28 80 swcpm0 \$c0,\(\$sp\+\),-128
+ d00: f0 f5 68 80 lwcpm0 \$c0,\(\$sp\+\),-128
+ d04: f0 f5 2c 80 swcpm1 \$c0,\(\$sp\+\),-128
+ d08: f0 f5 6c 80 lwcpm1 \$c0,\(\$sp\+\),-128
+ d0c: ff f5 20 80 swcpa \$c15,\(\$sp\+\),-128
+ d10: ff f5 60 80 lwcpa \$c15,\(\$sp\+\),-128
+ d14: ff f5 28 80 swcpm0 \$c15,\(\$sp\+\),-128
+ d18: ff f5 68 80 lwcpm0 \$c15,\(\$sp\+\),-128
+ d1c: ff f5 2c 80 swcpm1 \$c15,\(\$sp\+\),-128
+ d20: ff f5 6c 80 lwcpm1 \$c15,\(\$sp\+\),-128
+ d24: f0 05 20 7c swcpa \$c0,\(\$0\+\),124
+ d28: f0 05 60 7c lwcpa \$c0,\(\$0\+\),124
+ d2c: f0 05 28 7c swcpm0 \$c0,\(\$0\+\),124
+ d30: f0 05 68 7c lwcpm0 \$c0,\(\$0\+\),124
+ d34: f0 05 2c 7c swcpm1 \$c0,\(\$0\+\),124
+ d38: f0 05 6c 7c lwcpm1 \$c0,\(\$0\+\),124
+ d3c: ff 05 20 7c swcpa \$c15,\(\$0\+\),124
+ d40: ff 05 60 7c lwcpa \$c15,\(\$0\+\),124
+ d44: ff 05 28 7c swcpm0 \$c15,\(\$0\+\),124
+ d48: ff 05 68 7c lwcpm0 \$c15,\(\$0\+\),124
+ d4c: ff 05 2c 7c swcpm1 \$c15,\(\$0\+\),124
+ d50: ff 05 6c 7c lwcpm1 \$c15,\(\$0\+\),124
+ d54: f0 f5 20 7c swcpa \$c0,\(\$sp\+\),124
+ d58: f0 f5 60 7c lwcpa \$c0,\(\$sp\+\),124
+ d5c: f0 f5 28 7c swcpm0 \$c0,\(\$sp\+\),124
+ d60: f0 f5 68 7c lwcpm0 \$c0,\(\$sp\+\),124
+ d64: f0 f5 2c 7c swcpm1 \$c0,\(\$sp\+\),124
+ d68: f0 f5 6c 7c lwcpm1 \$c0,\(\$sp\+\),124
+ d6c: ff f5 20 7c swcpa \$c15,\(\$sp\+\),124
+ d70: ff f5 60 7c lwcpa \$c15,\(\$sp\+\),124
+ d74: ff f5 28 7c swcpm0 \$c15,\(\$sp\+\),124
+ d78: ff f5 68 7c lwcpm0 \$c15,\(\$sp\+\),124
+ d7c: ff f5 2c 7c swcpm1 \$c15,\(\$sp\+\),124
+ d80: ff f5 6c 7c lwcpm1 \$c15,\(\$sp\+\),124
+ d84: f0 05 30 80 smcpa \$c0,\(\$0\+\),-128
+ d88: f0 05 70 80 lmcpa \$c0,\(\$0\+\),-128
+ d8c: f0 05 38 80 smcpm0 \$c0,\(\$0\+\),-128
+ d90: f0 05 78 80 lmcpm0 \$c0,\(\$0\+\),-128
+ d94: f0 05 3c 80 smcpm1 \$c0,\(\$0\+\),-128
+ d98: f0 05 7c 80 lmcpm1 \$c0,\(\$0\+\),-128
+ d9c: ff 05 30 80 smcpa \$c15,\(\$0\+\),-128
+ da0: ff 05 70 80 lmcpa \$c15,\(\$0\+\),-128
+ da4: ff 05 38 80 smcpm0 \$c15,\(\$0\+\),-128
+ da8: ff 05 78 80 lmcpm0 \$c15,\(\$0\+\),-128
+ dac: ff 05 3c 80 smcpm1 \$c15,\(\$0\+\),-128
+ db0: ff 05 7c 80 lmcpm1 \$c15,\(\$0\+\),-128
+ db4: f0 f5 30 80 smcpa \$c0,\(\$sp\+\),-128
+ db8: f0 f5 70 80 lmcpa \$c0,\(\$sp\+\),-128
+ dbc: f0 f5 38 80 smcpm0 \$c0,\(\$sp\+\),-128
+ dc0: f0 f5 78 80 lmcpm0 \$c0,\(\$sp\+\),-128
+ dc4: f0 f5 3c 80 smcpm1 \$c0,\(\$sp\+\),-128
+ dc8: f0 f5 7c 80 lmcpm1 \$c0,\(\$sp\+\),-128
+ dcc: ff f5 30 80 smcpa \$c15,\(\$sp\+\),-128
+ dd0: ff f5 70 80 lmcpa \$c15,\(\$sp\+\),-128
+ dd4: ff f5 38 80 smcpm0 \$c15,\(\$sp\+\),-128
+ dd8: ff f5 78 80 lmcpm0 \$c15,\(\$sp\+\),-128
+ ddc: ff f5 3c 80 smcpm1 \$c15,\(\$sp\+\),-128
+ de0: ff f5 7c 80 lmcpm1 \$c15,\(\$sp\+\),-128
+ de4: f0 05 30 78 smcpa \$c0,\(\$0\+\),120
+ de8: f0 05 70 78 lmcpa \$c0,\(\$0\+\),120
+ dec: f0 05 38 78 smcpm0 \$c0,\(\$0\+\),120
+ df0: f0 05 78 78 lmcpm0 \$c0,\(\$0\+\),120
+ df4: f0 05 3c 78 smcpm1 \$c0,\(\$0\+\),120
+ df8: f0 05 7c 78 lmcpm1 \$c0,\(\$0\+\),120
+ dfc: ff 05 30 78 smcpa \$c15,\(\$0\+\),120
+ e00: ff 05 70 78 lmcpa \$c15,\(\$0\+\),120
+ e04: ff 05 38 78 smcpm0 \$c15,\(\$0\+\),120
+ e08: ff 05 78 78 lmcpm0 \$c15,\(\$0\+\),120
+ e0c: ff 05 3c 78 smcpm1 \$c15,\(\$0\+\),120
+ e10: ff 05 7c 78 lmcpm1 \$c15,\(\$0\+\),120
+ e14: f0 f5 30 78 smcpa \$c0,\(\$sp\+\),120
+ e18: f0 f5 70 78 lmcpa \$c0,\(\$sp\+\),120
+ e1c: f0 f5 38 78 smcpm0 \$c0,\(\$sp\+\),120
+ e20: f0 f5 78 78 lmcpm0 \$c0,\(\$sp\+\),120
+ e24: f0 f5 3c 78 smcpm1 \$c0,\(\$sp\+\),120
+ e28: f0 f5 7c 78 lmcpm1 \$c0,\(\$sp\+\),120
+ e2c: ff f5 30 78 smcpa \$c15,\(\$sp\+\),120
+ e30: ff f5 70 78 lmcpa \$c15,\(\$sp\+\),120
+ e34: ff f5 38 78 smcpm0 \$c15,\(\$sp\+\),120
+ e38: ff f5 78 78 lmcpm0 \$c15,\(\$sp\+\),120
+ e3c: ff f5 3c 78 smcpm1 \$c15,\(\$sp\+\),120
+ e40: ff f5 7c 78 lmcpm1 \$c15,\(\$sp\+\),120
+ e44: d8 04 80 02 bcpeq 0x0,0xffff0e48
+ e48: d8 05 80 02 bcpne 0x0,0xffff0e4c
+ e4c: d8 06 80 02 bcpat 0x0,0xffff0e50
+ e50: d8 07 80 02 bcpaf 0x0,0xffff0e54
+ e54: d8 f4 80 02 bcpeq 0xf,0xffff0e58
+ e58: d8 f5 80 02 bcpne 0xf,0xffff0e5c
+ e5c: d8 f6 80 02 bcpat 0xf,0xffff0e60
+ e60: d8 f7 80 02 bcpaf 0xf,0xffff0e64
+ e64: d8 04 3f ff bcpeq 0x0,0x8e62
+ e68: d8 05 3f ff bcpne 0x0,0x8e66
+ e6c: d8 06 3f ff bcpat 0x0,0x8e6a
+ e70: d8 07 3f ff bcpaf 0x0,0x8e6e
+ e74: d8 f4 3f ff bcpeq 0xf,0x8e72
+ e78: d8 f5 3f ff bcpne 0xf,0x8e76
+ e7c: d8 f6 3f ff bcpat 0xf,0x8e7a
+ e80: d8 f7 3f ff bcpaf 0xf,0x8e7e
+ e84: d8 04 00 00 bcpeq 0x0,0xe84
+ e84: R_MEP_PCREL17A2 symbol
+ e88: d8 05 00 00 bcpne 0x0,0xe88
+ e88: R_MEP_PCREL17A2 symbol
+ e8c: d8 06 00 00 bcpat 0x0,0xe8c
+ e8c: R_MEP_PCREL17A2 symbol
+ e90: d8 07 00 00 bcpaf 0x0,0xe90
+ e90: R_MEP_PCREL17A2 symbol
+ e94: d8 f4 00 00 bcpeq 0xf,0xe94
+ e94: R_MEP_PCREL17A2 symbol
+ e98: d8 f5 00 00 bcpne 0xf,0xe98
+ e98: R_MEP_PCREL17A2 symbol
+ e9c: d8 f6 00 00 bcpat 0xf,0xe9c
+ e9c: R_MEP_PCREL17A2 symbol
+ ea0: d8 f7 00 00 bcpaf 0xf,0xea0
+ ea0: R_MEP_PCREL17A2 symbol
+ ea4: 70 21 synccp
+ ea6: 18 0f jsrv \$0
+ ea8: 18 ff jsrv \$sp
+ eaa: d8 2b 80 00 bsrv 0xff800eae
+ eae: df fb 7f ff bsrv 0x800eac
+ eb2: d8 0b 00 00 bsrv 0xeb2
+ eb2: R_MEP_PCREL24A2 symbol
+ eb6: 00 00 nop
+ eb6: R_MEP_8 symbol
+ eb7: R_MEP_16 symbol
+ eb8: 00 00 nop
+ eb9: R_MEP_32 symbol
+ eba: 00 00 nop
+.*
+
diff --git a/gas/testsuite/gas/mep/dj1.le.d b/gas/testsuite/gas/mep/dj1.le.d
new file mode 100644
index 000000000000..c860c5be0fa0
--- /dev/null
+++ b/gas/testsuite/gas/mep/dj1.le.d
@@ -0,0 +1,1393 @@
+#as: -EL
+#objdump: -dr
+#source: dj1.s
+#name: dj1.le
+
+dump.o: file format elf32-mep-little
+
+Disassembly of section .text:
+
+00000000 <.text>:
+ 0: 00 00 nop
+ 2: 00 01 mov \$1,\$0
+ 4: 00 02 mov \$2,\$0
+ 6: 00 03 mov \$3,\$0
+ 8: 00 04 mov \$4,\$0
+ a: 00 05 mov \$5,\$0
+ c: 00 06 mov \$6,\$0
+ e: 00 07 mov \$7,\$0
+ 10: 00 08 mov \$8,\$0
+ 12: 00 09 mov \$9,\$0
+ 14: 00 0a mov \$10,\$0
+ 16: 00 0b mov \$11,\$0
+ 18: 00 0c mov \$12,\$0
+ 1a: 00 0d mov \$tp,\$0
+ 1c: 00 0e mov \$gp,\$0
+ 1e: 00 0f mov \$sp,\$0
+ 20: 00 08 mov \$8,\$0
+ 22: 00 0d mov \$tp,\$0
+ 24: 00 0e mov \$gp,\$0
+ 26: 00 0f mov \$sp,\$0
+ 28: 08 00 sb \$0,\(\$0\)
+ 2a: 09 00 sh \$0,\(\$0\)
+ 2c: 0a 00 sw \$0,\(\$0\)
+ 2e: 0c 00 lb \$0,\(\$0\)
+ 30: 0d 00 lh \$0,\(\$0\)
+ 32: 0e 00 lw \$0,\(\$0\)
+ 34: 0b 00 lbu \$0,\(\$0\)
+ 36: 0f 00 lhu \$0,\(\$0\)
+ 38: 08 0f sb \$sp,\(\$0\)
+ 3a: 09 0f sh \$sp,\(\$0\)
+ 3c: 0a 0f sw \$sp,\(\$0\)
+ 3e: 0c 0f lb \$sp,\(\$0\)
+ 40: 0d 0f lh \$sp,\(\$0\)
+ 42: 0e 0f lw \$sp,\(\$0\)
+ 44: 0b 0f lbu \$sp,\(\$0\)
+ 46: 0f 0f lhu \$sp,\(\$0\)
+ 48: f8 00 sb \$0,\(\$sp\)
+ 4a: f9 00 sh \$0,\(\$sp\)
+ 4c: fa 00 sw \$0,\(\$sp\)
+ 4e: fc 00 lb \$0,\(\$sp\)
+ 50: fd 00 lh \$0,\(\$sp\)
+ 52: fe 00 lw \$0,\(\$sp\)
+ 54: fb 00 lbu \$0,\(\$sp\)
+ 56: ff 00 lhu \$0,\(\$sp\)
+ 58: f8 0f sb \$sp,\(\$sp\)
+ 5a: f9 0f sh \$sp,\(\$sp\)
+ 5c: fa 0f sw \$sp,\(\$sp\)
+ 5e: fc 0f lb \$sp,\(\$sp\)
+ 60: fd 0f lh \$sp,\(\$sp\)
+ 62: fe 0f lw \$sp,\(\$sp\)
+ 64: fb 0f lbu \$sp,\(\$sp\)
+ 66: ff 0f lhu \$sp,\(\$sp\)
+ 68: fa 00 sw \$0,\(\$sp\)
+ 6a: fe 00 lw \$0,\(\$sp\)
+ 6c: fa 0f sw \$sp,\(\$sp\)
+ 6e: fe 0f lw \$sp,\(\$sp\)
+ 70: 7e 40 sw \$0,0x7c\(\$sp\)
+ 72: 7f 40 lw \$0,0x7c\(\$sp\)
+ 74: 7e 4f sw \$sp,0x7c\(\$sp\)
+ 76: 7f 4f lw \$sp,0x7c\(\$sp\)
+ 78: fa 00 sw \$0,\(\$sp\)
+ 7a: fe 00 lw \$0,\(\$sp\)
+ 7c: fa 0f sw \$sp,\(\$sp\)
+ 7e: fe 0f lw \$sp,\(\$sp\)
+ 80: 7e 40 sw \$0,0x7c\(\$sp\)
+ 82: 7f 40 lw \$0,0x7c\(\$sp\)
+ 84: 7e 4f sw \$sp,0x7c\(\$sp\)
+ 86: 7f 4f lw \$sp,0x7c\(\$sp\)
+ 88: d8 00 sb \$0,\(\$tp\)
+ 8a: dc 00 lb \$0,\(\$tp\)
+ 8c: db 00 lbu \$0,\(\$tp\)
+ 8e: d8 07 sb \$7,\(\$tp\)
+ 90: dc 07 lb \$7,\(\$tp\)
+ 92: db 07 lbu \$7,\(\$tp\)
+ 94: 7f 80 sb \$0,0x7f\(\$tp\)
+ 96: 7f 88 lb \$0,0x7f\(\$tp\)
+ 98: ff 48 lbu \$0,0x7f\(\$tp\)
+ 9a: 7f 87 sb \$7,0x7f\(\$tp\)
+ 9c: 7f 8f lb \$7,0x7f\(\$tp\)
+ 9e: ff 4f lbu \$7,0x7f\(\$tp\)
+ a0: 00 80 sb \$0,0x0\(\$tp\)
+ a0: R_MEP_TPREL7 symbol
+ a2: 00 88 lb \$0,0x0\(\$tp\)
+ a2: R_MEP_TPREL7 symbol
+ a4: 80 48 lbu \$0,0x0\(\$tp\)
+ a4: R_MEP_TPREL7 symbol
+ a6: 00 87 sb \$7,0x0\(\$tp\)
+ a6: R_MEP_TPREL7 symbol
+ a8: 00 8f lb \$7,0x0\(\$tp\)
+ a8: R_MEP_TPREL7 symbol
+ aa: 80 4f lbu \$7,0x0\(\$tp\)
+ aa: R_MEP_TPREL7 symbol
+ ac: d8 00 sb \$0,\(\$tp\)
+ ae: dc 00 lb \$0,\(\$tp\)
+ b0: db 00 lbu \$0,\(\$tp\)
+ b2: d8 07 sb \$7,\(\$tp\)
+ b4: dc 07 lb \$7,\(\$tp\)
+ b6: db 07 lbu \$7,\(\$tp\)
+ b8: 7f 80 sb \$0,0x7f\(\$tp\)
+ ba: 7f 88 lb \$0,0x7f\(\$tp\)
+ bc: ff 48 lbu \$0,0x7f\(\$tp\)
+ be: 7f 87 sb \$7,0x7f\(\$tp\)
+ c0: 7f 8f lb \$7,0x7f\(\$tp\)
+ c2: ff 4f lbu \$7,0x7f\(\$tp\)
+ c4: 00 80 sb \$0,0x0\(\$tp\)
+ c4: R_MEP_TPREL7 symbol
+ c6: 00 88 lb \$0,0x0\(\$tp\)
+ c6: R_MEP_TPREL7 symbol
+ c8: 80 48 lbu \$0,0x0\(\$tp\)
+ c8: R_MEP_TPREL7 symbol
+ ca: 00 87 sb \$7,0x0\(\$tp\)
+ ca: R_MEP_TPREL7 symbol
+ cc: 00 8f lb \$7,0x0\(\$tp\)
+ cc: R_MEP_TPREL7 symbol
+ ce: 80 4f lbu \$7,0x0\(\$tp\)
+ ce: R_MEP_TPREL7 symbol
+ d0: d9 00 sh \$0,\(\$tp\)
+ d2: dd 00 lh \$0,\(\$tp\)
+ d4: df 00 lhu \$0,\(\$tp\)
+ d6: d9 07 sh \$7,\(\$tp\)
+ d8: dd 07 lh \$7,\(\$tp\)
+ da: df 07 lhu \$7,\(\$tp\)
+ dc: fe 80 sh \$0,0x7e\(\$tp\)
+ de: fe 88 lh \$0,0x7e\(\$tp\)
+ e0: ff 88 lhu \$0,0x7e\(\$tp\)
+ e2: fe 87 sh \$7,0x7e\(\$tp\)
+ e4: fe 8f lh \$7,0x7e\(\$tp\)
+ e6: ff 8f lhu \$7,0x7e\(\$tp\)
+ e8: 80 80 sh \$0,0x0\(\$tp\)
+ e8: R_MEP_TPREL7A2 symbol
+ ea: 80 88 lh \$0,0x0\(\$tp\)
+ ea: R_MEP_TPREL7A2 symbol
+ ec: 81 88 lhu \$0,0x0\(\$tp\)
+ ec: R_MEP_TPREL7A2 symbol
+ ee: 80 87 sh \$7,0x0\(\$tp\)
+ ee: R_MEP_TPREL7A2 symbol
+ f0: 80 8f lh \$7,0x0\(\$tp\)
+ f0: R_MEP_TPREL7A2 symbol
+ f2: 81 8f lhu \$7,0x0\(\$tp\)
+ f2: R_MEP_TPREL7A2 symbol
+ f4: d9 00 sh \$0,\(\$tp\)
+ f6: dd 00 lh \$0,\(\$tp\)
+ f8: df 00 lhu \$0,\(\$tp\)
+ fa: d9 07 sh \$7,\(\$tp\)
+ fc: dd 07 lh \$7,\(\$tp\)
+ fe: df 07 lhu \$7,\(\$tp\)
+ 100: fe 80 sh \$0,0x7e\(\$tp\)
+ 102: fe 88 lh \$0,0x7e\(\$tp\)
+ 104: ff 88 lhu \$0,0x7e\(\$tp\)
+ 106: fe 87 sh \$7,0x7e\(\$tp\)
+ 108: fe 8f lh \$7,0x7e\(\$tp\)
+ 10a: ff 8f lhu \$7,0x7e\(\$tp\)
+ 10c: 80 80 sh \$0,0x0\(\$tp\)
+ 10c: R_MEP_TPREL7A2 symbol
+ 10e: 80 88 lh \$0,0x0\(\$tp\)
+ 10e: R_MEP_TPREL7A2 symbol
+ 110: 81 88 lhu \$0,0x0\(\$tp\)
+ 110: R_MEP_TPREL7A2 symbol
+ 112: 80 87 sh \$7,0x0\(\$tp\)
+ 112: R_MEP_TPREL7A2 symbol
+ 114: 80 8f lh \$7,0x0\(\$tp\)
+ 114: R_MEP_TPREL7A2 symbol
+ 116: 81 8f lhu \$7,0x0\(\$tp\)
+ 116: R_MEP_TPREL7A2 symbol
+ 118: da 00 sw \$0,\(\$tp\)
+ 11a: de 00 lw \$0,\(\$tp\)
+ 11c: da 07 sw \$7,\(\$tp\)
+ 11e: de 07 lw \$7,\(\$tp\)
+ 120: fe 40 sw \$0,0x7c\(\$tp\)
+ 122: ff 40 lw \$0,0x7c\(\$tp\)
+ 124: fe 47 sw \$7,0x7c\(\$tp\)
+ 126: ff 47 lw \$7,0x7c\(\$tp\)
+ 128: 82 40 sw \$0,0x0\(\$tp\)
+ 128: R_MEP_TPREL7A4 symbol
+ 12a: 83 40 lw \$0,0x0\(\$tp\)
+ 12a: R_MEP_TPREL7A4 symbol
+ 12c: 82 47 sw \$7,0x0\(\$tp\)
+ 12c: R_MEP_TPREL7A4 symbol
+ 12e: 83 47 lw \$7,0x0\(\$tp\)
+ 12e: R_MEP_TPREL7A4 symbol
+ 130: da 00 sw \$0,\(\$tp\)
+ 132: de 00 lw \$0,\(\$tp\)
+ 134: da 07 sw \$7,\(\$tp\)
+ 136: de 07 lw \$7,\(\$tp\)
+ 138: fe 40 sw \$0,0x7c\(\$tp\)
+ 13a: ff 40 lw \$0,0x7c\(\$tp\)
+ 13c: fe 47 sw \$7,0x7c\(\$tp\)
+ 13e: ff 47 lw \$7,0x7c\(\$tp\)
+ 140: 82 40 sw \$0,0x0\(\$tp\)
+ 140: R_MEP_TPREL7A4 symbol
+ 142: 83 40 lw \$0,0x0\(\$tp\)
+ 142: R_MEP_TPREL7A4 symbol
+ 144: 82 47 sw \$7,0x0\(\$tp\)
+ 144: R_MEP_TPREL7A4 symbol
+ 146: 83 47 lw \$7,0x0\(\$tp\)
+ 146: R_MEP_TPREL7A4 symbol
+ 148: 08 c0 00 80 sb \$0,-32768\(\$0\)
+ 14c: 09 c0 00 80 sh \$0,-32768\(\$0\)
+ 150: 0a c0 00 80 sw \$0,-32768\(\$0\)
+ 154: 0c c0 00 80 lb \$0,-32768\(\$0\)
+ 158: 0d c0 00 80 lh \$0,-32768\(\$0\)
+ 15c: 0e c0 00 80 lw \$0,-32768\(\$0\)
+ 160: 0b c0 00 80 lbu \$0,-32768\(\$0\)
+ 164: 0f c0 00 80 lhu \$0,-32768\(\$0\)
+ 168: 08 cf 00 80 sb \$sp,-32768\(\$0\)
+ 16c: 09 cf 00 80 sh \$sp,-32768\(\$0\)
+ 170: 0a cf 00 80 sw \$sp,-32768\(\$0\)
+ 174: 0c cf 00 80 lb \$sp,-32768\(\$0\)
+ 178: 0d cf 00 80 lh \$sp,-32768\(\$0\)
+ 17c: 0e cf 00 80 lw \$sp,-32768\(\$0\)
+ 180: 0b cf 00 80 lbu \$sp,-32768\(\$0\)
+ 184: 0f cf 00 80 lhu \$sp,-32768\(\$0\)
+ 188: 08 c0 ff 7f sb \$0,32767\(\$0\)
+ 18c: 09 c0 ff 7f sh \$0,32767\(\$0\)
+ 190: 0a c0 ff 7f sw \$0,32767\(\$0\)
+ 194: 0c c0 ff 7f lb \$0,32767\(\$0\)
+ 198: 0d c0 ff 7f lh \$0,32767\(\$0\)
+ 19c: 0e c0 ff 7f lw \$0,32767\(\$0\)
+ 1a0: 0b c0 ff 7f lbu \$0,32767\(\$0\)
+ 1a4: 0f c0 ff 7f lhu \$0,32767\(\$0\)
+ 1a8: 08 cf ff 7f sb \$sp,32767\(\$0\)
+ 1ac: 09 cf ff 7f sh \$sp,32767\(\$0\)
+ 1b0: 0a cf ff 7f sw \$sp,32767\(\$0\)
+ 1b4: 0c cf ff 7f lb \$sp,32767\(\$0\)
+ 1b8: 0d cf ff 7f lh \$sp,32767\(\$0\)
+ 1bc: 0e cf ff 7f lw \$sp,32767\(\$0\)
+ 1c0: 0b cf ff 7f lbu \$sp,32767\(\$0\)
+ 1c4: 0f cf ff 7f lhu \$sp,32767\(\$0\)
+ 1c8: 08 c0 00 00 sb \$0,0\(\$0\)
+ 1c8: R_MEP_GPREL symbol
+ 1cc: 09 c0 00 00 sh \$0,0\(\$0\)
+ 1cc: R_MEP_GPREL symbol
+ 1d0: 0a c0 00 00 sw \$0,0\(\$0\)
+ 1d0: R_MEP_GPREL symbol
+ 1d4: 0c c0 00 00 lb \$0,0\(\$0\)
+ 1d4: R_MEP_GPREL symbol
+ 1d8: 0d c0 00 00 lh \$0,0\(\$0\)
+ 1d8: R_MEP_GPREL symbol
+ 1dc: 0e c0 00 00 lw \$0,0\(\$0\)
+ 1dc: R_MEP_GPREL symbol
+ 1e0: 0b c0 00 00 lbu \$0,0\(\$0\)
+ 1e0: R_MEP_GPREL symbol
+ 1e4: 0f c0 00 00 lhu \$0,0\(\$0\)
+ 1e4: R_MEP_GPREL symbol
+ 1e8: 08 cf 00 00 sb \$sp,0\(\$0\)
+ 1e8: R_MEP_GPREL symbol
+ 1ec: 09 cf 00 00 sh \$sp,0\(\$0\)
+ 1ec: R_MEP_GPREL symbol
+ 1f0: 0a cf 00 00 sw \$sp,0\(\$0\)
+ 1f0: R_MEP_GPREL symbol
+ 1f4: 0c cf 00 00 lb \$sp,0\(\$0\)
+ 1f4: R_MEP_GPREL symbol
+ 1f8: 0d cf 00 00 lh \$sp,0\(\$0\)
+ 1f8: R_MEP_GPREL symbol
+ 1fc: 0e cf 00 00 lw \$sp,0\(\$0\)
+ 1fc: R_MEP_GPREL symbol
+ 200: 0b cf 00 00 lbu \$sp,0\(\$0\)
+ 200: R_MEP_GPREL symbol
+ 204: 0f cf 00 00 lhu \$sp,0\(\$0\)
+ 204: R_MEP_GPREL symbol
+ 208: 08 c0 00 80 sb \$0,-32768\(\$0\)
+ 20c: 09 c0 00 80 sh \$0,-32768\(\$0\)
+ 210: 0a c0 00 80 sw \$0,-32768\(\$0\)
+ 214: 0c c0 00 80 lb \$0,-32768\(\$0\)
+ 218: 0d c0 00 80 lh \$0,-32768\(\$0\)
+ 21c: 0e c0 00 80 lw \$0,-32768\(\$0\)
+ 220: 0b c0 00 80 lbu \$0,-32768\(\$0\)
+ 224: 0f c0 00 80 lhu \$0,-32768\(\$0\)
+ 228: 08 cf 00 80 sb \$sp,-32768\(\$0\)
+ 22c: 09 cf 00 80 sh \$sp,-32768\(\$0\)
+ 230: 0a cf 00 80 sw \$sp,-32768\(\$0\)
+ 234: 0c cf 00 80 lb \$sp,-32768\(\$0\)
+ 238: 0d cf 00 80 lh \$sp,-32768\(\$0\)
+ 23c: 0e cf 00 80 lw \$sp,-32768\(\$0\)
+ 240: 0b cf 00 80 lbu \$sp,-32768\(\$0\)
+ 244: 0f cf 00 80 lhu \$sp,-32768\(\$0\)
+ 248: 08 c0 ff 7f sb \$0,32767\(\$0\)
+ 24c: 09 c0 ff 7f sh \$0,32767\(\$0\)
+ 250: 0a c0 ff 7f sw \$0,32767\(\$0\)
+ 254: 0c c0 ff 7f lb \$0,32767\(\$0\)
+ 258: 0d c0 ff 7f lh \$0,32767\(\$0\)
+ 25c: 0e c0 ff 7f lw \$0,32767\(\$0\)
+ 260: 0b c0 ff 7f lbu \$0,32767\(\$0\)
+ 264: 0f c0 ff 7f lhu \$0,32767\(\$0\)
+ 268: 08 cf ff 7f sb \$sp,32767\(\$0\)
+ 26c: 09 cf ff 7f sh \$sp,32767\(\$0\)
+ 270: 0a cf ff 7f sw \$sp,32767\(\$0\)
+ 274: 0c cf ff 7f lb \$sp,32767\(\$0\)
+ 278: 0d cf ff 7f lh \$sp,32767\(\$0\)
+ 27c: 0e cf ff 7f lw \$sp,32767\(\$0\)
+ 280: 0b cf ff 7f lbu \$sp,32767\(\$0\)
+ 284: 0f cf ff 7f lhu \$sp,32767\(\$0\)
+ 288: 08 c0 00 00 sb \$0,0\(\$0\)
+ 288: R_MEP_TPREL symbol
+ 28c: 09 c0 00 00 sh \$0,0\(\$0\)
+ 28c: R_MEP_TPREL symbol
+ 290: 0a c0 00 00 sw \$0,0\(\$0\)
+ 290: R_MEP_TPREL symbol
+ 294: 0c c0 00 00 lb \$0,0\(\$0\)
+ 294: R_MEP_TPREL symbol
+ 298: 0d c0 00 00 lh \$0,0\(\$0\)
+ 298: R_MEP_TPREL symbol
+ 29c: 0e c0 00 00 lw \$0,0\(\$0\)
+ 29c: R_MEP_TPREL symbol
+ 2a0: 0b c0 00 00 lbu \$0,0\(\$0\)
+ 2a0: R_MEP_TPREL symbol
+ 2a4: 0f c0 00 00 lhu \$0,0\(\$0\)
+ 2a4: R_MEP_TPREL symbol
+ 2a8: 08 cf 00 00 sb \$sp,0\(\$0\)
+ 2a8: R_MEP_TPREL symbol
+ 2ac: 09 cf 00 00 sh \$sp,0\(\$0\)
+ 2ac: R_MEP_TPREL symbol
+ 2b0: 0a cf 00 00 sw \$sp,0\(\$0\)
+ 2b0: R_MEP_TPREL symbol
+ 2b4: 0c cf 00 00 lb \$sp,0\(\$0\)
+ 2b4: R_MEP_TPREL symbol
+ 2b8: 0d cf 00 00 lh \$sp,0\(\$0\)
+ 2b8: R_MEP_TPREL symbol
+ 2bc: 0e cf 00 00 lw \$sp,0\(\$0\)
+ 2bc: R_MEP_TPREL symbol
+ 2c0: 0b cf 00 00 lbu \$sp,0\(\$0\)
+ 2c0: R_MEP_TPREL symbol
+ 2c4: 0f cf 00 00 lhu \$sp,0\(\$0\)
+ 2c4: R_MEP_TPREL symbol
+ 2c8: f8 c0 00 80 sb \$0,-32768\(\$sp\)
+ 2cc: f9 c0 00 80 sh \$0,-32768\(\$sp\)
+ 2d0: fa c0 00 80 sw \$0,-32768\(\$sp\)
+ 2d4: fc c0 00 80 lb \$0,-32768\(\$sp\)
+ 2d8: fd c0 00 80 lh \$0,-32768\(\$sp\)
+ 2dc: fe c0 00 80 lw \$0,-32768\(\$sp\)
+ 2e0: fb c0 00 80 lbu \$0,-32768\(\$sp\)
+ 2e4: ff c0 00 80 lhu \$0,-32768\(\$sp\)
+ 2e8: f8 cf 00 80 sb \$sp,-32768\(\$sp\)
+ 2ec: f9 cf 00 80 sh \$sp,-32768\(\$sp\)
+ 2f0: fa cf 00 80 sw \$sp,-32768\(\$sp\)
+ 2f4: fc cf 00 80 lb \$sp,-32768\(\$sp\)
+ 2f8: fd cf 00 80 lh \$sp,-32768\(\$sp\)
+ 2fc: fe cf 00 80 lw \$sp,-32768\(\$sp\)
+ 300: fb cf 00 80 lbu \$sp,-32768\(\$sp\)
+ 304: ff cf 00 80 lhu \$sp,-32768\(\$sp\)
+ 308: f8 c0 ff 7f sb \$0,32767\(\$sp\)
+ 30c: f9 c0 ff 7f sh \$0,32767\(\$sp\)
+ 310: fa c0 ff 7f sw \$0,32767\(\$sp\)
+ 314: fc c0 ff 7f lb \$0,32767\(\$sp\)
+ 318: fd c0 ff 7f lh \$0,32767\(\$sp\)
+ 31c: fe c0 ff 7f lw \$0,32767\(\$sp\)
+ 320: fb c0 ff 7f lbu \$0,32767\(\$sp\)
+ 324: ff c0 ff 7f lhu \$0,32767\(\$sp\)
+ 328: f8 cf ff 7f sb \$sp,32767\(\$sp\)
+ 32c: f9 cf ff 7f sh \$sp,32767\(\$sp\)
+ 330: fa cf ff 7f sw \$sp,32767\(\$sp\)
+ 334: fc cf ff 7f lb \$sp,32767\(\$sp\)
+ 338: fd cf ff 7f lh \$sp,32767\(\$sp\)
+ 33c: fe cf ff 7f lw \$sp,32767\(\$sp\)
+ 340: fb cf ff 7f lbu \$sp,32767\(\$sp\)
+ 344: ff cf ff 7f lhu \$sp,32767\(\$sp\)
+ 348: f8 c0 00 00 sb \$0,0\(\$sp\)
+ 348: R_MEP_GPREL symbol
+ 34c: f9 c0 00 00 sh \$0,0\(\$sp\)
+ 34c: R_MEP_GPREL symbol
+ 350: fa c0 00 00 sw \$0,0\(\$sp\)
+ 350: R_MEP_GPREL symbol
+ 354: fc c0 00 00 lb \$0,0\(\$sp\)
+ 354: R_MEP_GPREL symbol
+ 358: fd c0 00 00 lh \$0,0\(\$sp\)
+ 358: R_MEP_GPREL symbol
+ 35c: fe c0 00 00 lw \$0,0\(\$sp\)
+ 35c: R_MEP_GPREL symbol
+ 360: fb c0 00 00 lbu \$0,0\(\$sp\)
+ 360: R_MEP_GPREL symbol
+ 364: ff c0 00 00 lhu \$0,0\(\$sp\)
+ 364: R_MEP_GPREL symbol
+ 368: f8 cf 00 00 sb \$sp,0\(\$sp\)
+ 368: R_MEP_GPREL symbol
+ 36c: f9 cf 00 00 sh \$sp,0\(\$sp\)
+ 36c: R_MEP_GPREL symbol
+ 370: fa cf 00 00 sw \$sp,0\(\$sp\)
+ 370: R_MEP_GPREL symbol
+ 374: fc cf 00 00 lb \$sp,0\(\$sp\)
+ 374: R_MEP_GPREL symbol
+ 378: fd cf 00 00 lh \$sp,0\(\$sp\)
+ 378: R_MEP_GPREL symbol
+ 37c: fe cf 00 00 lw \$sp,0\(\$sp\)
+ 37c: R_MEP_GPREL symbol
+ 380: fb cf 00 00 lbu \$sp,0\(\$sp\)
+ 380: R_MEP_GPREL symbol
+ 384: ff cf 00 00 lhu \$sp,0\(\$sp\)
+ 384: R_MEP_GPREL symbol
+ 388: f8 c0 00 80 sb \$0,-32768\(\$sp\)
+ 38c: f9 c0 00 80 sh \$0,-32768\(\$sp\)
+ 390: fa c0 00 80 sw \$0,-32768\(\$sp\)
+ 394: fc c0 00 80 lb \$0,-32768\(\$sp\)
+ 398: fd c0 00 80 lh \$0,-32768\(\$sp\)
+ 39c: fe c0 00 80 lw \$0,-32768\(\$sp\)
+ 3a0: fb c0 00 80 lbu \$0,-32768\(\$sp\)
+ 3a4: ff c0 00 80 lhu \$0,-32768\(\$sp\)
+ 3a8: f8 cf 00 80 sb \$sp,-32768\(\$sp\)
+ 3ac: f9 cf 00 80 sh \$sp,-32768\(\$sp\)
+ 3b0: fa cf 00 80 sw \$sp,-32768\(\$sp\)
+ 3b4: fc cf 00 80 lb \$sp,-32768\(\$sp\)
+ 3b8: fd cf 00 80 lh \$sp,-32768\(\$sp\)
+ 3bc: fe cf 00 80 lw \$sp,-32768\(\$sp\)
+ 3c0: fb cf 00 80 lbu \$sp,-32768\(\$sp\)
+ 3c4: ff cf 00 80 lhu \$sp,-32768\(\$sp\)
+ 3c8: f8 c0 ff 7f sb \$0,32767\(\$sp\)
+ 3cc: f9 c0 ff 7f sh \$0,32767\(\$sp\)
+ 3d0: fa c0 ff 7f sw \$0,32767\(\$sp\)
+ 3d4: fc c0 ff 7f lb \$0,32767\(\$sp\)
+ 3d8: fd c0 ff 7f lh \$0,32767\(\$sp\)
+ 3dc: fe c0 ff 7f lw \$0,32767\(\$sp\)
+ 3e0: fb c0 ff 7f lbu \$0,32767\(\$sp\)
+ 3e4: ff c0 ff 7f lhu \$0,32767\(\$sp\)
+ 3e8: f8 cf ff 7f sb \$sp,32767\(\$sp\)
+ 3ec: f9 cf ff 7f sh \$sp,32767\(\$sp\)
+ 3f0: fa cf ff 7f sw \$sp,32767\(\$sp\)
+ 3f4: fc cf ff 7f lb \$sp,32767\(\$sp\)
+ 3f8: fd cf ff 7f lh \$sp,32767\(\$sp\)
+ 3fc: fe cf ff 7f lw \$sp,32767\(\$sp\)
+ 400: fb cf ff 7f lbu \$sp,32767\(\$sp\)
+ 404: ff cf ff 7f lhu \$sp,32767\(\$sp\)
+ 408: f8 c0 00 00 sb \$0,0\(\$sp\)
+ 408: R_MEP_TPREL symbol
+ 40c: f9 c0 00 00 sh \$0,0\(\$sp\)
+ 40c: R_MEP_TPREL symbol
+ 410: 02 40 sw \$0,0x0\(\$sp\)
+ 410: R_MEP_TPREL7A4 symbol
+ 412: fc c0 00 00 lb \$0,0\(\$sp\)
+ 412: R_MEP_TPREL symbol
+ 416: fd c0 00 00 lh \$0,0\(\$sp\)
+ 416: R_MEP_TPREL symbol
+ 41a: 03 40 lw \$0,0x0\(\$sp\)
+ 41a: R_MEP_TPREL7A4 symbol
+ 41c: fb c0 00 00 lbu \$0,0\(\$sp\)
+ 41c: R_MEP_TPREL symbol
+ 420: ff c0 00 00 lhu \$0,0\(\$sp\)
+ 420: R_MEP_TPREL symbol
+ 424: f8 cf 00 00 sb \$sp,0\(\$sp\)
+ 424: R_MEP_TPREL symbol
+ 428: f9 cf 00 00 sh \$sp,0\(\$sp\)
+ 428: R_MEP_TPREL symbol
+ 42c: 02 4f sw \$sp,0x0\(\$sp\)
+ 42c: R_MEP_TPREL7A4 symbol
+ 42e: fc cf 00 00 lb \$sp,0\(\$sp\)
+ 42e: R_MEP_TPREL symbol
+ 432: fd cf 00 00 lh \$sp,0\(\$sp\)
+ 432: R_MEP_TPREL symbol
+ 436: 03 4f lw \$sp,0x0\(\$sp\)
+ 436: R_MEP_TPREL7A4 symbol
+ 438: fb cf 00 00 lbu \$sp,0\(\$sp\)
+ 438: R_MEP_TPREL symbol
+ 43c: ff cf 00 00 lhu \$sp,0\(\$sp\)
+ 43c: R_MEP_TPREL symbol
+ 440: 02 e0 00 00 sw \$0,\(0x0\)
+ 444: 03 e0 00 00 lw \$0,\(0x0\)
+ 448: 02 ef 00 00 sw \$sp,\(0x0\)
+ 44c: 03 ef 00 00 lw \$sp,\(0x0\)
+ 450: fe e0 ff ff sw \$0,\(0xfffffc\)
+ 454: ff e0 ff ff lw \$0,\(0xfffffc\)
+ 458: fe ef ff ff sw \$sp,\(0xfffffc\)
+ 45c: ff ef ff ff lw \$sp,\(0xfffffc\)
+ 460: 02 e0 00 00 sw \$0,\(0x0\)
+ 460: R_MEP_ADDR24A4 symbol
+ 464: 03 e0 00 00 lw \$0,\(0x0\)
+ 464: R_MEP_ADDR24A4 symbol
+ 468: 02 ef 00 00 sw \$sp,\(0x0\)
+ 468: R_MEP_ADDR24A4 symbol
+ 46c: 03 ef 00 00 lw \$sp,\(0x0\)
+ 46c: R_MEP_ADDR24A4 symbol
+ 470: 0d 10 extb \$0
+ 472: 8d 10 extub \$0
+ 474: 2d 10 exth \$0
+ 476: ad 10 extuh \$0
+ 478: 0d 1f extb \$sp
+ 47a: 8d 1f extub \$sp
+ 47c: 2d 1f exth \$sp
+ 47e: ad 1f extuh \$sp
+ 480: 0c 10 ssarb 0\(\$0\)
+ 482: 0c 13 ssarb 3\(\$0\)
+ 484: fc 10 ssarb 0\(\$sp\)
+ 486: fc 13 ssarb 3\(\$sp\)
+ 488: 00 00 nop
+ 48a: 00 0f mov \$sp,\$0
+ 48c: f0 00 mov \$0,\$sp
+ 48e: f0 0f mov \$sp,\$sp
+ 490: 01 c0 00 80 mov \$0,-32768
+ 494: 01 cf 00 80 mov \$sp,-32768
+ 498: 80 50 mov \$0,-128
+ 49a: 80 5f mov \$sp,-128
+ 49c: 00 50 mov \$0,0
+ 49e: 00 5f mov \$sp,0
+ 4a0: 7f 50 mov \$0,127
+ 4a2: 7f 5f mov \$sp,127
+ 4a4: 01 c0 ff 7f mov \$0,32767
+ 4a8: 01 cf ff 7f mov \$sp,32767
+ 4ac: 01 c0 00 00 mov \$0,0
+ 4ac: R_MEP_LOW16 symbol
+ 4b0: 01 c0 00 00 mov \$0,0
+ 4b0: R_MEP_HI16S symbol
+ 4b4: 01 c0 00 00 mov \$0,0
+ 4b4: R_MEP_HI16U symbol
+ 4b8: 01 c0 00 00 mov \$0,0
+ 4b8: R_MEP_GPREL symbol
+ 4bc: 01 c0 00 00 mov \$0,0
+ 4bc: R_MEP_TPREL symbol
+ 4c0: 00 d0 00 00 movu \$0,0x0
+ 4c4: 00 d7 00 00 movu \$7,0x0
+ 4c8: ff d0 ff ff movu \$0,0xffffff
+ 4cc: ff d7 ff ff movu \$7,0xffffff
+ 4d0: 11 c0 00 00 movu \$0,0x0
+ 4d0: R_MEP_LOW16 symbol
+ 4d4: 11 c7 00 00 movu \$7,0x0
+ 4d4: R_MEP_LOW16 symbol
+ 4d8: 00 d0 00 00 movu \$0,0x0
+ 4d8: R_MEP_UIMM24 symbol
+ 4dc: 00 d7 00 00 movu \$7,0x0
+ 4dc: R_MEP_UIMM24 symbol
+ 4e0: 00 d0 00 00 movu \$0,0x0
+ 4e4: 21 c0 00 00 movh \$0,0x0
+ 4e8: 11 cf 00 00 movu \$sp,0x0
+ 4ec: 21 cf 00 00 movh \$sp,0x0
+ 4f0: ff d0 ff 00 movu \$0,0xffff
+ 4f4: 21 c0 ff ff movh \$0,0xffff
+ 4f8: 11 cf ff ff movu \$sp,0xffff
+ 4fc: 21 cf ff ff movh \$sp,0xffff
+ 500: 11 c0 00 00 movu \$0,0x0
+ 500: R_MEP_LOW16 symbol
+ 504: 21 c0 00 00 movh \$0,0x0
+ 504: R_MEP_LOW16 symbol
+ 508: 11 cf 00 00 movu \$sp,0x0
+ 508: R_MEP_LOW16 symbol
+ 50c: 21 cf 00 00 movh \$sp,0x0
+ 50c: R_MEP_LOW16 symbol
+ 510: 11 c0 00 00 movu \$0,0x0
+ 510: R_MEP_HI16S symbol
+ 514: 21 c0 00 00 movh \$0,0x0
+ 514: R_MEP_HI16S symbol
+ 518: 11 cf 00 00 movu \$sp,0x0
+ 518: R_MEP_HI16S symbol
+ 51c: 21 cf 00 00 movh \$sp,0x0
+ 51c: R_MEP_HI16S symbol
+ 520: 11 c0 00 00 movu \$0,0x0
+ 520: R_MEP_HI16U symbol
+ 524: 21 c0 00 00 movh \$0,0x0
+ 524: R_MEP_HI16U symbol
+ 528: 11 cf 00 00 movu \$sp,0x0
+ 528: R_MEP_HI16U symbol
+ 52c: 21 cf 00 00 movh \$sp,0x0
+ 52c: R_MEP_HI16U symbol
+ 530: 11 c0 78 56 movu \$0,0x5678
+ 534: 21 c0 78 56 movh \$0,0x5678
+ 538: 11 cf 78 56 movu \$sp,0x5678
+ 53c: 21 cf 78 56 movh \$sp,0x5678
+ 540: 11 c0 34 12 movu \$0,0x1234
+ 544: 21 c0 34 12 movh \$0,0x1234
+ 548: 11 cf 34 12 movu \$sp,0x1234
+ 54c: 21 cf 34 12 movh \$sp,0x1234
+ 550: 11 c0 34 12 movu \$0,0x1234
+ 554: 21 c0 34 12 movh \$0,0x1234
+ 558: 11 cf 34 12 movu \$sp,0x1234
+ 55c: 21 cf 34 12 movh \$sp,0x1234
+ 560: 00 90 add3 \$0,\$0,\$0
+ 562: 0f 90 add3 \$sp,\$0,\$0
+ 564: 00 9f add3 \$0,\$sp,\$0
+ 566: 0f 9f add3 \$sp,\$sp,\$0
+ 568: f0 90 add3 \$0,\$0,\$sp
+ 56a: ff 90 add3 \$sp,\$0,\$sp
+ 56c: f0 9f add3 \$0,\$sp,\$sp
+ 56e: ff 9f add3 \$sp,\$sp,\$sp
+ 570: c0 60 add \$0,-16
+ 572: c0 6f add \$sp,-16
+ 574: 00 60 add \$0,0
+ 576: 00 6f add \$sp,0
+ 578: 3c 60 add \$0,15
+ 57a: 3c 6f add \$sp,15
+ 57c: 00 40 add3 \$0,\$sp,0x0
+ 57e: 00 4f add3 \$sp,\$sp,0x0
+ 580: 7c 40 add3 \$0,\$sp,0x7c
+ 582: 7c 4f add3 \$sp,\$sp,0x7c
+ 584: f0 c0 01 00 add3 \$0,\$sp,1
+ 588: f0 cf 01 00 add3 \$sp,\$sp,1
+ 58c: 07 00 advck3 \$0,\$0,\$0
+ 58e: 05 00 sbvck3 \$0,\$0,\$0
+ 590: 07 0f advck3 \$0,\$sp,\$0
+ 592: 05 0f sbvck3 \$0,\$sp,\$0
+ 594: f7 00 advck3 \$0,\$0,\$sp
+ 596: f5 00 sbvck3 \$0,\$0,\$sp
+ 598: f7 0f advck3 \$0,\$sp,\$sp
+ 59a: f5 0f sbvck3 \$0,\$sp,\$sp
+ 59c: 04 00 sub \$0,\$0
+ 59e: 01 00 neg \$0,\$0
+ 5a0: 04 0f sub \$sp,\$0
+ 5a2: 01 0f neg \$sp,\$0
+ 5a4: f4 00 sub \$0,\$sp
+ 5a6: f1 00 neg \$0,\$sp
+ 5a8: f4 0f sub \$sp,\$sp
+ 5aa: f1 0f neg \$sp,\$sp
+ 5ac: 02 00 slt3 \$0,\$0,\$0
+ 5ae: 03 00 sltu3 \$0,\$0,\$0
+ 5b0: 06 20 sl1ad3 \$0,\$0,\$0
+ 5b2: 07 20 sl2ad3 \$0,\$0,\$0
+ 5b4: 02 0f slt3 \$0,\$sp,\$0
+ 5b6: 03 0f sltu3 \$0,\$sp,\$0
+ 5b8: 06 2f sl1ad3 \$0,\$sp,\$0
+ 5ba: 07 2f sl2ad3 \$0,\$sp,\$0
+ 5bc: f2 00 slt3 \$0,\$0,\$sp
+ 5be: f3 00 sltu3 \$0,\$0,\$sp
+ 5c0: f6 20 sl1ad3 \$0,\$0,\$sp
+ 5c2: f7 20 sl2ad3 \$0,\$0,\$sp
+ 5c4: f2 0f slt3 \$0,\$sp,\$sp
+ 5c6: f3 0f sltu3 \$0,\$sp,\$sp
+ 5c8: f6 2f sl1ad3 \$0,\$sp,\$sp
+ 5ca: f7 2f sl2ad3 \$0,\$sp,\$sp
+ 5cc: 00 c0 00 80 add3 \$0,\$0,-32768
+ 5d0: 00 cf 00 80 add3 \$sp,\$0,-32768
+ 5d4: f0 c0 00 80 add3 \$0,\$sp,-32768
+ 5d8: f0 cf 00 80 add3 \$sp,\$sp,-32768
+ 5dc: 00 c0 ff 7f add3 \$0,\$0,32767
+ 5e0: 00 cf ff 7f add3 \$sp,\$0,32767
+ 5e4: f0 c0 ff 7f add3 \$0,\$sp,32767
+ 5e8: f0 cf ff 7f add3 \$sp,\$sp,32767
+ 5ec: 00 c0 00 00 add3 \$0,\$0,0
+ 5ec: R_MEP_LOW16 symbol
+ 5f0: 00 cf 00 00 add3 \$sp,\$0,0
+ 5f0: R_MEP_LOW16 symbol
+ 5f4: f0 c0 00 00 add3 \$0,\$sp,0
+ 5f4: R_MEP_LOW16 symbol
+ 5f8: f0 cf 00 00 add3 \$sp,\$sp,0
+ 5f8: R_MEP_LOW16 symbol
+ 5fc: 01 60 slt3 \$0,\$0,0x0
+ 5fe: 05 60 sltu3 \$0,\$0,0x0
+ 600: 01 6f slt3 \$0,\$sp,0x0
+ 602: 05 6f sltu3 \$0,\$sp,0x0
+ 604: f9 60 slt3 \$0,\$0,0x1f
+ 606: fd 60 sltu3 \$0,\$0,0x1f
+ 608: f9 6f slt3 \$0,\$sp,0x1f
+ 60a: fd 6f sltu3 \$0,\$sp,0x1f
+ 60c: 00 10 or \$0,\$0
+ 60e: 01 10 and \$0,\$0
+ 610: 02 10 xor \$0,\$0
+ 612: 03 10 nor \$0,\$0
+ 614: 00 1f or \$sp,\$0
+ 616: 01 1f and \$sp,\$0
+ 618: 02 1f xor \$sp,\$0
+ 61a: 03 1f nor \$sp,\$0
+ 61c: f0 10 or \$0,\$sp
+ 61e: f1 10 and \$0,\$sp
+ 620: f2 10 xor \$0,\$sp
+ 622: f3 10 nor \$0,\$sp
+ 624: f0 1f or \$sp,\$sp
+ 626: f1 1f and \$sp,\$sp
+ 628: f2 1f xor \$sp,\$sp
+ 62a: f3 1f nor \$sp,\$sp
+ 62c: 04 c0 00 00 or3 \$0,\$0,0x0
+ 630: 05 c0 00 00 and3 \$0,\$0,0x0
+ 634: 06 c0 00 00 xor3 \$0,\$0,0x0
+ 638: 04 cf 00 00 or3 \$sp,\$0,0x0
+ 63c: 05 cf 00 00 and3 \$sp,\$0,0x0
+ 640: 06 cf 00 00 xor3 \$sp,\$0,0x0
+ 644: f4 c0 00 00 or3 \$0,\$sp,0x0
+ 648: f5 c0 00 00 and3 \$0,\$sp,0x0
+ 64c: f6 c0 00 00 xor3 \$0,\$sp,0x0
+ 650: f4 cf 00 00 or3 \$sp,\$sp,0x0
+ 654: f5 cf 00 00 and3 \$sp,\$sp,0x0
+ 658: f6 cf 00 00 xor3 \$sp,\$sp,0x0
+ 65c: 04 c0 ff ff or3 \$0,\$0,0xffff
+ 660: 05 c0 ff ff and3 \$0,\$0,0xffff
+ 664: 06 c0 ff ff xor3 \$0,\$0,0xffff
+ 668: 04 cf ff ff or3 \$sp,\$0,0xffff
+ 66c: 05 cf ff ff and3 \$sp,\$0,0xffff
+ 670: 06 cf ff ff xor3 \$sp,\$0,0xffff
+ 674: f4 c0 ff ff or3 \$0,\$sp,0xffff
+ 678: f5 c0 ff ff and3 \$0,\$sp,0xffff
+ 67c: f6 c0 ff ff xor3 \$0,\$sp,0xffff
+ 680: f4 cf ff ff or3 \$sp,\$sp,0xffff
+ 684: f5 cf ff ff and3 \$sp,\$sp,0xffff
+ 688: f6 cf ff ff xor3 \$sp,\$sp,0xffff
+ 68c: 04 c0 00 00 or3 \$0,\$0,0x0
+ 68c: R_MEP_LOW16 symbol
+ 690: 05 c0 00 00 and3 \$0,\$0,0x0
+ 690: R_MEP_LOW16 symbol
+ 694: 06 c0 00 00 xor3 \$0,\$0,0x0
+ 694: R_MEP_LOW16 symbol
+ 698: 04 cf 00 00 or3 \$sp,\$0,0x0
+ 698: R_MEP_LOW16 symbol
+ 69c: 05 cf 00 00 and3 \$sp,\$0,0x0
+ 69c: R_MEP_LOW16 symbol
+ 6a0: 06 cf 00 00 xor3 \$sp,\$0,0x0
+ 6a0: R_MEP_LOW16 symbol
+ 6a4: f4 c0 00 00 or3 \$0,\$sp,0x0
+ 6a4: R_MEP_LOW16 symbol
+ 6a8: f5 c0 00 00 and3 \$0,\$sp,0x0
+ 6a8: R_MEP_LOW16 symbol
+ 6ac: f6 c0 00 00 xor3 \$0,\$sp,0x0
+ 6ac: R_MEP_LOW16 symbol
+ 6b0: f4 cf 00 00 or3 \$sp,\$sp,0x0
+ 6b0: R_MEP_LOW16 symbol
+ 6b4: f5 cf 00 00 and3 \$sp,\$sp,0x0
+ 6b4: R_MEP_LOW16 symbol
+ 6b8: f6 cf 00 00 xor3 \$sp,\$sp,0x0
+ 6b8: R_MEP_LOW16 symbol
+ 6bc: 0d 20 sra \$0,\$0
+ 6be: 0c 20 srl \$0,\$0
+ 6c0: 0e 20 sll \$0,\$0
+ 6c2: 0f 20 fsft \$0,\$0
+ 6c4: 0d 2f sra \$sp,\$0
+ 6c6: 0c 2f srl \$sp,\$0
+ 6c8: 0e 2f sll \$sp,\$0
+ 6ca: 0f 2f fsft \$sp,\$0
+ 6cc: fd 20 sra \$0,\$sp
+ 6ce: fc 20 srl \$0,\$sp
+ 6d0: fe 20 sll \$0,\$sp
+ 6d2: ff 20 fsft \$0,\$sp
+ 6d4: fd 2f sra \$sp,\$sp
+ 6d6: fc 2f srl \$sp,\$sp
+ 6d8: fe 2f sll \$sp,\$sp
+ 6da: ff 2f fsft \$sp,\$sp
+ 6dc: 03 60 sra \$0,0x0
+ 6de: 02 60 srl \$0,0x0
+ 6e0: 06 60 sll \$0,0x0
+ 6e2: 03 6f sra \$sp,0x0
+ 6e4: 02 6f srl \$sp,0x0
+ 6e6: 06 6f sll \$sp,0x0
+ 6e8: fb 60 sra \$0,0x1f
+ 6ea: fa 60 srl \$0,0x1f
+ 6ec: fe 60 sll \$0,0x1f
+ 6ee: fb 6f sra \$sp,0x1f
+ 6f0: fa 6f srl \$sp,0x1f
+ 6f2: fe 6f sll \$sp,0x1f
+ 6f4: 07 60 sll3 \$0,\$0,0x0
+ 6f6: 07 6f sll3 \$0,\$sp,0x0
+ 6f8: ff 60 sll3 \$0,\$0,0x1f
+ 6fa: ff 6f sll3 \$0,\$sp,0x1f
+ 6fc: 02 b8 bra 0xfffffefe
+ 6fe: 01 e0 00 04 beq \$0,\$0,0xefe
+ 702: 00 b0 bra 0x702
+ 702: R_MEP_PCREL12A2 symbol
+ 704: 82 a0 beqz \$0,0x686
+ 706: 83 a0 bnez \$0,0x688
+ 708: 82 af beqz \$sp,0x68a
+ 70a: 83 af bnez \$sp,0x68c
+ 70c: 00 e0 40 00 beqi \$0,0x0,0x78c
+ 710: 04 e0 40 00 bnei \$0,0x0,0x790
+ 714: 00 ef 40 00 beqi \$sp,0x0,0x794
+ 718: 04 ef 40 00 bnei \$sp,0x0,0x798
+ 71c: 00 a0 beqz \$0,0x71c
+ 71c: R_MEP_PCREL8A2 symbol
+ 71e: 01 a0 bnez \$0,0x71e
+ 71e: R_MEP_PCREL8A2 symbol
+ 720: 00 af beqz \$sp,0x720
+ 720: R_MEP_PCREL8A2 symbol
+ 722: 01 af bnez \$sp,0x722
+ 722: R_MEP_PCREL8A2 symbol
+ 724: 00 e0 02 80 beqi \$0,0x0,0xffff0728
+ 728: 04 e0 02 80 bnei \$0,0x0,0xffff072c
+ 72c: 0c e0 02 80 blti \$0,0x0,0xffff0730
+ 730: 08 e0 02 80 bgei \$0,0x0,0xffff0734
+ 734: 00 ef 02 80 beqi \$sp,0x0,0xffff0738
+ 738: 04 ef 02 80 bnei \$sp,0x0,0xffff073c
+ 73c: 0c ef 02 80 blti \$sp,0x0,0xffff0740
+ 740: 08 ef 02 80 bgei \$sp,0x0,0xffff0744
+ 744: f0 e0 02 80 beqi \$0,0xf,0xffff0748
+ 748: f4 e0 02 80 bnei \$0,0xf,0xffff074c
+ 74c: fc e0 02 80 blti \$0,0xf,0xffff0750
+ 750: f8 e0 02 80 bgei \$0,0xf,0xffff0754
+ 754: f0 ef 02 80 beqi \$sp,0xf,0xffff0758
+ 758: f4 ef 02 80 bnei \$sp,0xf,0xffff075c
+ 75c: fc ef 02 80 blti \$sp,0xf,0xffff0760
+ 760: f8 ef 02 80 bgei \$sp,0xf,0xffff0764
+ 764: 00 e0 ff 3f beqi \$0,0x0,0x8762
+ 768: 04 e0 ff 3f bnei \$0,0x0,0x8766
+ 76c: 0c e0 ff 3f blti \$0,0x0,0x876a
+ 770: 08 e0 ff 3f bgei \$0,0x0,0x876e
+ 774: 00 ef ff 3f beqi \$sp,0x0,0x8772
+ 778: 04 ef ff 3f bnei \$sp,0x0,0x8776
+ 77c: 0c ef ff 3f blti \$sp,0x0,0x877a
+ 780: 08 ef ff 3f bgei \$sp,0x0,0x877e
+ 784: f0 e0 ff 3f beqi \$0,0xf,0x8782
+ 788: f4 e0 ff 3f bnei \$0,0xf,0x8786
+ 78c: fc e0 ff 3f blti \$0,0xf,0x878a
+ 790: f8 e0 ff 3f bgei \$0,0xf,0x878e
+ 794: f0 ef ff 3f beqi \$sp,0xf,0x8792
+ 798: f4 ef ff 3f bnei \$sp,0xf,0x8796
+ 79c: fc ef ff 3f blti \$sp,0xf,0x879a
+ 7a0: f8 ef ff 3f bgei \$sp,0xf,0x879e
+ 7a4: 00 e0 00 00 beqi \$0,0x0,0x7a4
+ 7a4: R_MEP_PCREL17A2 symbol
+ 7a8: 04 e0 00 00 bnei \$0,0x0,0x7a8
+ 7a8: R_MEP_PCREL17A2 symbol
+ 7ac: 0c e0 00 00 blti \$0,0x0,0x7ac
+ 7ac: R_MEP_PCREL17A2 symbol
+ 7b0: 08 e0 00 00 bgei \$0,0x0,0x7b0
+ 7b0: R_MEP_PCREL17A2 symbol
+ 7b4: 00 ef 00 00 beqi \$sp,0x0,0x7b4
+ 7b4: R_MEP_PCREL17A2 symbol
+ 7b8: 04 ef 00 00 bnei \$sp,0x0,0x7b8
+ 7b8: R_MEP_PCREL17A2 symbol
+ 7bc: 0c ef 00 00 blti \$sp,0x0,0x7bc
+ 7bc: R_MEP_PCREL17A2 symbol
+ 7c0: 08 ef 00 00 bgei \$sp,0x0,0x7c0
+ 7c0: R_MEP_PCREL17A2 symbol
+ 7c4: f0 e0 00 00 beqi \$0,0xf,0x7c4
+ 7c4: R_MEP_PCREL17A2 symbol
+ 7c8: f4 e0 00 00 bnei \$0,0xf,0x7c8
+ 7c8: R_MEP_PCREL17A2 symbol
+ 7cc: fc e0 00 00 blti \$0,0xf,0x7cc
+ 7cc: R_MEP_PCREL17A2 symbol
+ 7d0: f8 e0 00 00 bgei \$0,0xf,0x7d0
+ 7d0: R_MEP_PCREL17A2 symbol
+ 7d4: f0 ef 00 00 beqi \$sp,0xf,0x7d4
+ 7d4: R_MEP_PCREL17A2 symbol
+ 7d8: f4 ef 00 00 bnei \$sp,0xf,0x7d8
+ 7d8: R_MEP_PCREL17A2 symbol
+ 7dc: fc ef 00 00 blti \$sp,0xf,0x7dc
+ 7dc: R_MEP_PCREL17A2 symbol
+ 7e0: f8 ef 00 00 bgei \$sp,0xf,0x7e0
+ 7e0: R_MEP_PCREL17A2 symbol
+ 7e4: 01 e0 02 80 beq \$0,\$0,0xffff07e8
+ 7e8: 05 e0 02 80 bne \$0,\$0,0xffff07ec
+ 7ec: 01 ef 02 80 beq \$sp,\$0,0xffff07f0
+ 7f0: 05 ef 02 80 bne \$sp,\$0,0xffff07f4
+ 7f4: f1 e0 02 80 beq \$0,\$sp,0xffff07f8
+ 7f8: f5 e0 02 80 bne \$0,\$sp,0xffff07fc
+ 7fc: f1 ef 02 80 beq \$sp,\$sp,0xffff0800
+ 800: f5 ef 02 80 bne \$sp,\$sp,0xffff0804
+ 804: 01 e0 ff 3f beq \$0,\$0,0x8802
+ 808: 05 e0 ff 3f bne \$0,\$0,0x8806
+ 80c: 01 ef ff 3f beq \$sp,\$0,0x880a
+ 810: 05 ef ff 3f bne \$sp,\$0,0x880e
+ 814: f1 e0 ff 3f beq \$0,\$sp,0x8812
+ 818: f5 e0 ff 3f bne \$0,\$sp,0x8816
+ 81c: f1 ef ff 3f beq \$sp,\$sp,0x881a
+ 820: f5 ef ff 3f bne \$sp,\$sp,0x881e
+ 824: 01 e0 00 00 beq \$0,\$0,0x824
+ 824: R_MEP_PCREL17A2 symbol
+ 828: 05 e0 00 00 bne \$0,\$0,0x828
+ 828: R_MEP_PCREL17A2 symbol
+ 82c: 01 ef 00 00 beq \$sp,\$0,0x82c
+ 82c: R_MEP_PCREL17A2 symbol
+ 830: 05 ef 00 00 bne \$sp,\$0,0x830
+ 830: R_MEP_PCREL17A2 symbol
+ 834: f1 e0 00 00 beq \$0,\$sp,0x834
+ 834: R_MEP_PCREL17A2 symbol
+ 838: f5 e0 00 00 bne \$0,\$sp,0x838
+ 838: R_MEP_PCREL17A2 symbol
+ 83c: f1 ef 00 00 beq \$sp,\$sp,0x83c
+ 83c: R_MEP_PCREL17A2 symbol
+ 840: f5 ef 00 00 bne \$sp,\$sp,0x840
+ 840: R_MEP_PCREL17A2 symbol
+ 844: 29 d8 00 80 bsr 0xff800848
+ 848: 03 b8 bsr 0x4a
+ 84a: 09 d8 08 00 bsr 0x104a
+ 84e: 19 d8 00 80 bsr 0xff800850
+ 852: 09 d8 00 00 bsr 0x852
+ 852: R_MEP_PCREL24A2 symbol
+ 856: 0e 10 jmp \$0
+ 858: fe 10 jmp \$sp
+ 85a: 08 d8 00 00 jmp 0x0
+ 85e: f8 df ff ff jmp 0xfffffe
+ 862: 08 d8 00 00 jmp 0x0
+ 862: R_MEP_PCABS24A2 symbol
+ 866: 0f 10 jsr \$0
+ 868: ff 10 jsr \$sp
+ 86a: 02 70 ret
+ 86c: 09 e0 02 80 repeat \$0,0xffff0870
+ 870: 09 ef 02 80 repeat \$sp,0xffff0874
+ 874: 09 e0 ff 3f repeat \$0,0x8872
+ 878: 09 ef ff 3f repeat \$sp,0x8876
+ 87c: 09 e0 00 00 repeat \$0,0x87c
+ 87c: R_MEP_PCREL17A2 symbol
+ 880: 09 ef 00 00 repeat \$sp,0x880
+ 880: R_MEP_PCREL17A2 symbol
+ 884: 19 e0 02 80 erepeat 0xffff0888
+ 888: 19 e0 ff 3f erepeat 0x8886
+ 88c: 19 e0 00 00 erepeat 0x88c
+ 88c: R_MEP_PCREL17A2 symbol
+ 890: 08 70 stc \$0,\$pc
+ 892: 0a 70 ldc \$0,\$pc
+ 894: 08 7f stc \$sp,\$pc
+ 896: 0a 7f ldc \$sp,\$pc
+ 898: 18 70 stc \$0,\$lp
+ 89a: 1a 70 ldc \$0,\$lp
+ 89c: 18 7f stc \$sp,\$lp
+ 89e: 1a 7f ldc \$sp,\$lp
+ 8a0: 28 70 stc \$0,\$sar
+ 8a2: 2a 70 ldc \$0,\$sar
+ 8a4: 28 7f stc \$sp,\$sar
+ 8a6: 2a 7f ldc \$sp,\$sar
+ 8a8: 48 70 stc \$0,\$rpb
+ 8aa: 4a 70 ldc \$0,\$rpb
+ 8ac: 48 7f stc \$sp,\$rpb
+ 8ae: 4a 7f ldc \$sp,\$rpb
+ 8b0: 58 70 stc \$0,\$rpe
+ 8b2: 5a 70 ldc \$0,\$rpe
+ 8b4: 58 7f stc \$sp,\$rpe
+ 8b6: 5a 7f ldc \$sp,\$rpe
+ 8b8: 68 70 stc \$0,\$rpc
+ 8ba: 6a 70 ldc \$0,\$rpc
+ 8bc: 68 7f stc \$sp,\$rpc
+ 8be: 6a 7f ldc \$sp,\$rpc
+ 8c0: 78 70 stc \$0,\$hi
+ 8c2: 7a 70 ldc \$0,\$hi
+ 8c4: 78 7f stc \$sp,\$hi
+ 8c6: 7a 7f ldc \$sp,\$hi
+ 8c8: 88 70 stc \$0,\$lo
+ 8ca: 8a 70 ldc \$0,\$lo
+ 8cc: 88 7f stc \$sp,\$lo
+ 8ce: 8a 7f ldc \$sp,\$lo
+ 8d0: c8 70 stc \$0,\$mb0
+ 8d2: ca 70 ldc \$0,\$mb0
+ 8d4: c8 7f stc \$sp,\$mb0
+ 8d6: ca 7f ldc \$sp,\$mb0
+ 8d8: d8 70 stc \$0,\$me0
+ 8da: da 70 ldc \$0,\$me0
+ 8dc: d8 7f stc \$sp,\$me0
+ 8de: da 7f ldc \$sp,\$me0
+ 8e0: e8 70 stc \$0,\$mb1
+ 8e2: ea 70 ldc \$0,\$mb1
+ 8e4: e8 7f stc \$sp,\$mb1
+ 8e6: ea 7f ldc \$sp,\$mb1
+ 8e8: f8 70 stc \$0,\$me1
+ 8ea: fa 70 ldc \$0,\$me1
+ 8ec: f8 7f stc \$sp,\$me1
+ 8ee: fa 7f ldc \$sp,\$me1
+ 8f0: 09 70 stc \$0,\$psw
+ 8f2: 0b 70 ldc \$0,\$psw
+ 8f4: 09 7f stc \$sp,\$psw
+ 8f6: 0b 7f ldc \$sp,\$psw
+ 8f8: 19 70 stc \$0,\$id
+ 8fa: 1b 70 ldc \$0,\$id
+ 8fc: 19 7f stc \$sp,\$id
+ 8fe: 1b 7f ldc \$sp,\$id
+ 900: 29 70 stc \$0,\$tmp
+ 902: 2b 70 ldc \$0,\$tmp
+ 904: 29 7f stc \$sp,\$tmp
+ 906: 2b 7f ldc \$sp,\$tmp
+ 908: 39 70 stc \$0,\$epc
+ 90a: 3b 70 ldc \$0,\$epc
+ 90c: 39 7f stc \$sp,\$epc
+ 90e: 3b 7f ldc \$sp,\$epc
+ 910: 49 70 stc \$0,\$exc
+ 912: 4b 70 ldc \$0,\$exc
+ 914: 49 7f stc \$sp,\$exc
+ 916: 4b 7f ldc \$sp,\$exc
+ 918: 59 70 stc \$0,\$cfg
+ 91a: 5b 70 ldc \$0,\$cfg
+ 91c: 59 7f stc \$sp,\$cfg
+ 91e: 5b 7f ldc \$sp,\$cfg
+ 920: 79 70 stc \$0,\$npc
+ 922: 7b 70 ldc \$0,\$npc
+ 924: 79 7f stc \$sp,\$npc
+ 926: 7b 7f ldc \$sp,\$npc
+ 928: 89 70 stc \$0,\$dbg
+ 92a: 8b 70 ldc \$0,\$dbg
+ 92c: 89 7f stc \$sp,\$dbg
+ 92e: 8b 7f ldc \$sp,\$dbg
+ 930: 99 70 stc \$0,\$depc
+ 932: 9b 70 ldc \$0,\$depc
+ 934: 99 7f stc \$sp,\$depc
+ 936: 9b 7f ldc \$sp,\$depc
+ 938: a9 70 stc \$0,\$opt
+ 93a: ab 70 ldc \$0,\$opt
+ 93c: a9 7f stc \$sp,\$opt
+ 93e: ab 7f ldc \$sp,\$opt
+ 940: b9 70 stc \$0,\$rcfg
+ 942: bb 70 ldc \$0,\$rcfg
+ 944: b9 7f stc \$sp,\$rcfg
+ 946: bb 7f ldc \$sp,\$rcfg
+ 948: c9 70 stc \$0,\$ccfg
+ 94a: cb 70 ldc \$0,\$ccfg
+ 94c: c9 7f stc \$sp,\$ccfg
+ 94e: cb 7f ldc \$sp,\$ccfg
+ 950: 00 70 di
+ 952: 10 70 ei
+ 954: 12 70 reti
+ 956: 22 70 halt
+ 958: 32 70 break
+ 95a: 11 70 syncm
+ 95c: 06 70 swi 0x0
+ 95e: 36 70 swi 0x3
+ 960: 04 f0 00 00 stcb \$0,0x0
+ 964: 14 f0 00 00 ldcb \$0,0x0
+ 968: 04 ff 00 00 stcb \$sp,0x0
+ 96c: 14 ff 00 00 ldcb \$sp,0x0
+ 970: 04 f0 ff ff stcb \$0,0xffff
+ 974: 14 f0 ff ff ldcb \$0,0xffff
+ 978: 04 ff ff ff stcb \$sp,0xffff
+ 97c: 14 ff ff ff ldcb \$sp,0xffff
+ 980: 04 f0 00 00 stcb \$0,0x0
+ 982: R_MEP_16 symbol
+ 984: 14 f0 00 00 ldcb \$0,0x0
+ 986: R_MEP_16 symbol
+ 988: 04 ff 00 00 stcb \$sp,0x0
+ 98a: R_MEP_16 symbol
+ 98c: 14 ff 00 00 ldcb \$sp,0x0
+ 98e: R_MEP_16 symbol
+ 990: 00 20 bsetm \(\$0\),0x0
+ 992: 01 20 bclrm \(\$0\),0x0
+ 994: 02 20 bnotm \(\$0\),0x0
+ 996: f0 20 bsetm \(\$sp\),0x0
+ 998: f1 20 bclrm \(\$sp\),0x0
+ 99a: f2 20 bnotm \(\$sp\),0x0
+ 99c: 00 27 bsetm \(\$0\),0x7
+ 99e: 01 27 bclrm \(\$0\),0x7
+ 9a0: 02 27 bnotm \(\$0\),0x7
+ 9a2: f0 27 bsetm \(\$sp\),0x7
+ 9a4: f1 27 bclrm \(\$sp\),0x7
+ 9a6: f2 27 bnotm \(\$sp\),0x7
+ 9a8: 03 20 btstm \$0,\(\$0\),0x0
+ 9aa: f3 20 btstm \$0,\(\$sp\),0x0
+ 9ac: 03 27 btstm \$0,\(\$0\),0x7
+ 9ae: f3 27 btstm \$0,\(\$sp\),0x7
+ 9b0: 04 20 tas \$0,\(\$0\)
+ 9b2: 04 2f tas \$sp,\(\$0\)
+ 9b4: f4 20 tas \$0,\(\$sp\)
+ 9b6: f4 2f tas \$sp,\(\$sp\)
+ 9b8: 04 70 cache 0x0,\(\$0\)
+ 9ba: 04 73 cache 0x3,\(\$0\)
+ 9bc: f4 70 cache 0x0,\(\$sp\)
+ 9be: f4 73 cache 0x3,\(\$sp\)
+ 9c0: 04 10 mul \$0,\$0
+ 9c2: 01 f0 04 30 madd \$0,\$0
+ 9c6: 06 10 mulr \$0,\$0
+ 9c8: 01 f0 06 30 maddr \$0,\$0
+ 9cc: 05 10 mulu \$0,\$0
+ 9ce: 01 f0 05 30 maddu \$0,\$0
+ 9d2: 07 10 mulru \$0,\$0
+ 9d4: 01 f0 07 30 maddru \$0,\$0
+ 9d8: 04 1f mul \$sp,\$0
+ 9da: 01 ff 04 30 madd \$sp,\$0
+ 9de: 06 1f mulr \$sp,\$0
+ 9e0: 01 ff 06 30 maddr \$sp,\$0
+ 9e4: 05 1f mulu \$sp,\$0
+ 9e6: 01 ff 05 30 maddu \$sp,\$0
+ 9ea: 07 1f mulru \$sp,\$0
+ 9ec: 01 ff 07 30 maddru \$sp,\$0
+ 9f0: f4 10 mul \$0,\$sp
+ 9f2: f1 f0 04 30 madd \$0,\$sp
+ 9f6: f6 10 mulr \$0,\$sp
+ 9f8: f1 f0 06 30 maddr \$0,\$sp
+ 9fc: f5 10 mulu \$0,\$sp
+ 9fe: f1 f0 05 30 maddu \$0,\$sp
+ a02: f7 10 mulru \$0,\$sp
+ a04: f1 f0 07 30 maddru \$0,\$sp
+ a08: f4 1f mul \$sp,\$sp
+ a0a: f1 ff 04 30 madd \$sp,\$sp
+ a0e: f6 1f mulr \$sp,\$sp
+ a10: f1 ff 06 30 maddr \$sp,\$sp
+ a14: f5 1f mulu \$sp,\$sp
+ a16: f1 ff 05 30 maddu \$sp,\$sp
+ a1a: f7 1f mulru \$sp,\$sp
+ a1c: f1 ff 07 30 maddru \$sp,\$sp
+ a20: 08 10 div \$0,\$0
+ a22: 09 10 divu \$0,\$0
+ a24: 08 1f div \$sp,\$0
+ a26: 09 1f divu \$sp,\$0
+ a28: f8 10 div \$0,\$sp
+ a2a: f9 10 divu \$0,\$sp
+ a2c: f8 1f div \$sp,\$sp
+ a2e: f9 1f divu \$sp,\$sp
+ a30: 13 70 dret
+ a32: 33 70 dbreak
+ a34: 01 f0 00 00 ldz \$0,\$0
+ a38: 01 f0 03 00 abs \$0,\$0
+ a3c: 01 f0 02 00 ave \$0,\$0
+ a40: 01 ff 00 00 ldz \$sp,\$0
+ a44: 01 ff 03 00 abs \$sp,\$0
+ a48: 01 ff 02 00 ave \$sp,\$0
+ a4c: f1 f0 00 00 ldz \$0,\$sp
+ a50: f1 f0 03 00 abs \$0,\$sp
+ a54: f1 f0 02 00 ave \$0,\$sp
+ a58: f1 ff 00 00 ldz \$sp,\$sp
+ a5c: f1 ff 03 00 abs \$sp,\$sp
+ a60: f1 ff 02 00 ave \$sp,\$sp
+ a64: 01 f0 04 00 min \$0,\$0
+ a68: 01 f0 05 00 max \$0,\$0
+ a6c: 01 f0 06 00 minu \$0,\$0
+ a70: 01 f0 07 00 maxu \$0,\$0
+ a74: 01 ff 04 00 min \$sp,\$0
+ a78: 01 ff 05 00 max \$sp,\$0
+ a7c: 01 ff 06 00 minu \$sp,\$0
+ a80: 01 ff 07 00 maxu \$sp,\$0
+ a84: f1 f0 04 00 min \$0,\$sp
+ a88: f1 f0 05 00 max \$0,\$sp
+ a8c: f1 f0 06 00 minu \$0,\$sp
+ a90: f1 f0 07 00 maxu \$0,\$sp
+ a94: f1 ff 04 00 min \$sp,\$sp
+ a98: f1 ff 05 00 max \$sp,\$sp
+ a9c: f1 ff 06 00 minu \$sp,\$sp
+ aa0: f1 ff 07 00 maxu \$sp,\$sp
+ aa4: 01 f0 00 10 clip \$0,0x0
+ aa8: 01 f0 01 10 clipu \$0,0x0
+ aac: 01 ff 00 10 clip \$sp,0x0
+ ab0: 01 ff 01 10 clipu \$sp,0x0
+ ab4: 01 f0 f8 10 clip \$0,0x1f
+ ab8: 01 f0 f9 10 clipu \$0,0x1f
+ abc: 01 ff f8 10 clip \$sp,0x1f
+ ac0: 01 ff f9 10 clipu \$sp,0x1f
+ ac4: 01 f0 08 00 sadd \$0,\$0
+ ac8: 01 f0 0a 00 ssub \$0,\$0
+ acc: 01 f0 09 00 saddu \$0,\$0
+ ad0: 01 f0 0b 00 ssubu \$0,\$0
+ ad4: 01 ff 08 00 sadd \$sp,\$0
+ ad8: 01 ff 0a 00 ssub \$sp,\$0
+ adc: 01 ff 09 00 saddu \$sp,\$0
+ ae0: 01 ff 0b 00 ssubu \$sp,\$0
+ ae4: f1 f0 08 00 sadd \$0,\$sp
+ ae8: f1 f0 0a 00 ssub \$0,\$sp
+ aec: f1 f0 09 00 saddu \$0,\$sp
+ af0: f1 f0 0b 00 ssubu \$0,\$sp
+ af4: f1 ff 08 00 sadd \$sp,\$sp
+ af8: f1 ff 0a 00 ssub \$sp,\$sp
+ afc: f1 ff 09 00 saddu \$sp,\$sp
+ b00: f1 ff 0b 00 ssubu \$sp,\$sp
+ b04: 08 30 swcp \$c0,\(\$0\)
+ b06: 09 30 lwcp \$c0,\(\$0\)
+ b08: 0a 30 smcp \$c0,\(\$0\)
+ b0a: 0b 30 lmcp \$c0,\(\$0\)
+ b0c: 08 3f swcp \$c15,\(\$0\)
+ b0e: 09 3f lwcp \$c15,\(\$0\)
+ b10: 0a 3f smcp \$c15,\(\$0\)
+ b12: 0b 3f lmcp \$c15,\(\$0\)
+ b14: f8 30 swcp \$c0,\(\$sp\)
+ b16: f9 30 lwcp \$c0,\(\$sp\)
+ b18: fa 30 smcp \$c0,\(\$sp\)
+ b1a: fb 30 lmcp \$c0,\(\$sp\)
+ b1c: f8 3f swcp \$c15,\(\$sp\)
+ b1e: f9 3f lwcp \$c15,\(\$sp\)
+ b20: fa 3f smcp \$c15,\(\$sp\)
+ b22: fb 3f lmcp \$c15,\(\$sp\)
+ b24: 00 30 swcpi \$c0,\(\$0\+\)
+ b26: 01 30 lwcpi \$c0,\(\$0\+\)
+ b28: 02 30 smcpi \$c0,\(\$0\+\)
+ b2a: 03 30 lmcpi \$c0,\(\$0\+\)
+ b2c: 00 3f swcpi \$c15,\(\$0\+\)
+ b2e: 01 3f lwcpi \$c15,\(\$0\+\)
+ b30: 02 3f smcpi \$c15,\(\$0\+\)
+ b32: 03 3f lmcpi \$c15,\(\$0\+\)
+ b34: f0 30 swcpi \$c0,\(\$sp\+\)
+ b36: f1 30 lwcpi \$c0,\(\$sp\+\)
+ b38: f2 30 smcpi \$c0,\(\$sp\+\)
+ b3a: f3 30 lmcpi \$c0,\(\$sp\+\)
+ b3c: f0 3f swcpi \$c15,\(\$sp\+\)
+ b3e: f1 3f lwcpi \$c15,\(\$sp\+\)
+ b40: f2 3f smcpi \$c15,\(\$sp\+\)
+ b42: f3 3f lmcpi \$c15,\(\$sp\+\)
+ b44: 05 f0 80 00 sbcpa \$c0,\(\$0\+\),-128
+ b48: 05 f0 80 40 lbcpa \$c0,\(\$0\+\),-128
+ b4c: 05 f0 80 08 sbcpm0 \$c0,\(\$0\+\),-128
+ b50: 05 f0 80 48 lbcpm0 \$c0,\(\$0\+\),-128
+ b54: 05 f0 80 0c sbcpm1 \$c0,\(\$0\+\),-128
+ b58: 05 f0 80 4c lbcpm1 \$c0,\(\$0\+\),-128
+ b5c: 05 ff 80 00 sbcpa \$c15,\(\$0\+\),-128
+ b60: 05 ff 80 40 lbcpa \$c15,\(\$0\+\),-128
+ b64: 05 ff 80 08 sbcpm0 \$c15,\(\$0\+\),-128
+ b68: 05 ff 80 48 lbcpm0 \$c15,\(\$0\+\),-128
+ b6c: 05 ff 80 0c sbcpm1 \$c15,\(\$0\+\),-128
+ b70: 05 ff 80 4c lbcpm1 \$c15,\(\$0\+\),-128
+ b74: f5 f0 80 00 sbcpa \$c0,\(\$sp\+\),-128
+ b78: f5 f0 80 40 lbcpa \$c0,\(\$sp\+\),-128
+ b7c: f5 f0 80 08 sbcpm0 \$c0,\(\$sp\+\),-128
+ b80: f5 f0 80 48 lbcpm0 \$c0,\(\$sp\+\),-128
+ b84: f5 f0 80 0c sbcpm1 \$c0,\(\$sp\+\),-128
+ b88: f5 f0 80 4c lbcpm1 \$c0,\(\$sp\+\),-128
+ b8c: f5 ff 80 00 sbcpa \$c15,\(\$sp\+\),-128
+ b90: f5 ff 80 40 lbcpa \$c15,\(\$sp\+\),-128
+ b94: f5 ff 80 08 sbcpm0 \$c15,\(\$sp\+\),-128
+ b98: f5 ff 80 48 lbcpm0 \$c15,\(\$sp\+\),-128
+ b9c: f5 ff 80 0c sbcpm1 \$c15,\(\$sp\+\),-128
+ ba0: f5 ff 80 4c lbcpm1 \$c15,\(\$sp\+\),-128
+ ba4: 05 f0 7f 00 sbcpa \$c0,\(\$0\+\),127
+ ba8: 05 f0 7f 40 lbcpa \$c0,\(\$0\+\),127
+ bac: 05 f0 7f 08 sbcpm0 \$c0,\(\$0\+\),127
+ bb0: 05 f0 7f 48 lbcpm0 \$c0,\(\$0\+\),127
+ bb4: 05 f0 7f 0c sbcpm1 \$c0,\(\$0\+\),127
+ bb8: 05 f0 7f 4c lbcpm1 \$c0,\(\$0\+\),127
+ bbc: 05 ff 7f 00 sbcpa \$c15,\(\$0\+\),127
+ bc0: 05 ff 7f 40 lbcpa \$c15,\(\$0\+\),127
+ bc4: 05 ff 7f 08 sbcpm0 \$c15,\(\$0\+\),127
+ bc8: 05 ff 7f 48 lbcpm0 \$c15,\(\$0\+\),127
+ bcc: 05 ff 7f 0c sbcpm1 \$c15,\(\$0\+\),127
+ bd0: 05 ff 7f 4c lbcpm1 \$c15,\(\$0\+\),127
+ bd4: f5 f0 7f 00 sbcpa \$c0,\(\$sp\+\),127
+ bd8: f5 f0 7f 40 lbcpa \$c0,\(\$sp\+\),127
+ bdc: f5 f0 7f 08 sbcpm0 \$c0,\(\$sp\+\),127
+ be0: f5 f0 7f 48 lbcpm0 \$c0,\(\$sp\+\),127
+ be4: f5 f0 7f 0c sbcpm1 \$c0,\(\$sp\+\),127
+ be8: f5 f0 7f 4c lbcpm1 \$c0,\(\$sp\+\),127
+ bec: f5 ff 7f 00 sbcpa \$c15,\(\$sp\+\),127
+ bf0: f5 ff 7f 40 lbcpa \$c15,\(\$sp\+\),127
+ bf4: f5 ff 7f 08 sbcpm0 \$c15,\(\$sp\+\),127
+ bf8: f5 ff 7f 48 lbcpm0 \$c15,\(\$sp\+\),127
+ bfc: f5 ff 7f 0c sbcpm1 \$c15,\(\$sp\+\),127
+ c00: f5 ff 7f 4c lbcpm1 \$c15,\(\$sp\+\),127
+ c04: 05 f0 80 10 shcpa \$c0,\(\$0\+\),-128
+ c08: 05 f0 80 50 lhcpa \$c0,\(\$0\+\),-128
+ c0c: 05 f0 80 18 shcpm0 \$c0,\(\$0\+\),-128
+ c10: 05 f0 80 58 lhcpm0 \$c0,\(\$0\+\),-128
+ c14: 05 f0 80 1c shcpm1 \$c0,\(\$0\+\),-128
+ c18: 05 f0 80 5c lhcpm1 \$c0,\(\$0\+\),-128
+ c1c: 05 ff 80 10 shcpa \$c15,\(\$0\+\),-128
+ c20: 05 ff 80 50 lhcpa \$c15,\(\$0\+\),-128
+ c24: 05 ff 80 18 shcpm0 \$c15,\(\$0\+\),-128
+ c28: 05 ff 80 58 lhcpm0 \$c15,\(\$0\+\),-128
+ c2c: 05 ff 80 1c shcpm1 \$c15,\(\$0\+\),-128
+ c30: 05 ff 80 5c lhcpm1 \$c15,\(\$0\+\),-128
+ c34: f5 f0 80 10 shcpa \$c0,\(\$sp\+\),-128
+ c38: f5 f0 80 50 lhcpa \$c0,\(\$sp\+\),-128
+ c3c: f5 f0 80 18 shcpm0 \$c0,\(\$sp\+\),-128
+ c40: f5 f0 80 58 lhcpm0 \$c0,\(\$sp\+\),-128
+ c44: f5 f0 80 1c shcpm1 \$c0,\(\$sp\+\),-128
+ c48: f5 f0 80 5c lhcpm1 \$c0,\(\$sp\+\),-128
+ c4c: f5 ff 80 10 shcpa \$c15,\(\$sp\+\),-128
+ c50: f5 ff 80 50 lhcpa \$c15,\(\$sp\+\),-128
+ c54: f5 ff 80 18 shcpm0 \$c15,\(\$sp\+\),-128
+ c58: f5 ff 80 58 lhcpm0 \$c15,\(\$sp\+\),-128
+ c5c: f5 ff 80 1c shcpm1 \$c15,\(\$sp\+\),-128
+ c60: f5 ff 80 5c lhcpm1 \$c15,\(\$sp\+\),-128
+ c64: 05 f0 7e 10 shcpa \$c0,\(\$0\+\),126
+ c68: 05 f0 7e 50 lhcpa \$c0,\(\$0\+\),126
+ c6c: 05 f0 7e 18 shcpm0 \$c0,\(\$0\+\),126
+ c70: 05 f0 7e 58 lhcpm0 \$c0,\(\$0\+\),126
+ c74: 05 f0 7e 1c shcpm1 \$c0,\(\$0\+\),126
+ c78: 05 f0 7e 5c lhcpm1 \$c0,\(\$0\+\),126
+ c7c: 05 ff 7e 10 shcpa \$c15,\(\$0\+\),126
+ c80: 05 ff 7e 50 lhcpa \$c15,\(\$0\+\),126
+ c84: 05 ff 7e 18 shcpm0 \$c15,\(\$0\+\),126
+ c88: 05 ff 7e 58 lhcpm0 \$c15,\(\$0\+\),126
+ c8c: 05 ff 7e 1c shcpm1 \$c15,\(\$0\+\),126
+ c90: 05 ff 7e 5c lhcpm1 \$c15,\(\$0\+\),126
+ c94: f5 f0 7e 10 shcpa \$c0,\(\$sp\+\),126
+ c98: f5 f0 7e 50 lhcpa \$c0,\(\$sp\+\),126
+ c9c: f5 f0 7e 18 shcpm0 \$c0,\(\$sp\+\),126
+ ca0: f5 f0 7e 58 lhcpm0 \$c0,\(\$sp\+\),126
+ ca4: f5 f0 7e 1c shcpm1 \$c0,\(\$sp\+\),126
+ ca8: f5 f0 7e 5c lhcpm1 \$c0,\(\$sp\+\),126
+ cac: f5 ff 7e 10 shcpa \$c15,\(\$sp\+\),126
+ cb0: f5 ff 7e 50 lhcpa \$c15,\(\$sp\+\),126
+ cb4: f5 ff 7e 18 shcpm0 \$c15,\(\$sp\+\),126
+ cb8: f5 ff 7e 58 lhcpm0 \$c15,\(\$sp\+\),126
+ cbc: f5 ff 7e 1c shcpm1 \$c15,\(\$sp\+\),126
+ cc0: f5 ff 7e 5c lhcpm1 \$c15,\(\$sp\+\),126
+ cc4: 05 f0 80 20 swcpa \$c0,\(\$0\+\),-128
+ cc8: 05 f0 80 60 lwcpa \$c0,\(\$0\+\),-128
+ ccc: 05 f0 80 28 swcpm0 \$c0,\(\$0\+\),-128
+ cd0: 05 f0 80 68 lwcpm0 \$c0,\(\$0\+\),-128
+ cd4: 05 f0 80 2c swcpm1 \$c0,\(\$0\+\),-128
+ cd8: 05 f0 80 6c lwcpm1 \$c0,\(\$0\+\),-128
+ cdc: 05 ff 80 20 swcpa \$c15,\(\$0\+\),-128
+ ce0: 05 ff 80 60 lwcpa \$c15,\(\$0\+\),-128
+ ce4: 05 ff 80 28 swcpm0 \$c15,\(\$0\+\),-128
+ ce8: 05 ff 80 68 lwcpm0 \$c15,\(\$0\+\),-128
+ cec: 05 ff 80 2c swcpm1 \$c15,\(\$0\+\),-128
+ cf0: 05 ff 80 6c lwcpm1 \$c15,\(\$0\+\),-128
+ cf4: f5 f0 80 20 swcpa \$c0,\(\$sp\+\),-128
+ cf8: f5 f0 80 60 lwcpa \$c0,\(\$sp\+\),-128
+ cfc: f5 f0 80 28 swcpm0 \$c0,\(\$sp\+\),-128
+ d00: f5 f0 80 68 lwcpm0 \$c0,\(\$sp\+\),-128
+ d04: f5 f0 80 2c swcpm1 \$c0,\(\$sp\+\),-128
+ d08: f5 f0 80 6c lwcpm1 \$c0,\(\$sp\+\),-128
+ d0c: f5 ff 80 20 swcpa \$c15,\(\$sp\+\),-128
+ d10: f5 ff 80 60 lwcpa \$c15,\(\$sp\+\),-128
+ d14: f5 ff 80 28 swcpm0 \$c15,\(\$sp\+\),-128
+ d18: f5 ff 80 68 lwcpm0 \$c15,\(\$sp\+\),-128
+ d1c: f5 ff 80 2c swcpm1 \$c15,\(\$sp\+\),-128
+ d20: f5 ff 80 6c lwcpm1 \$c15,\(\$sp\+\),-128
+ d24: 05 f0 7c 20 swcpa \$c0,\(\$0\+\),124
+ d28: 05 f0 7c 60 lwcpa \$c0,\(\$0\+\),124
+ d2c: 05 f0 7c 28 swcpm0 \$c0,\(\$0\+\),124
+ d30: 05 f0 7c 68 lwcpm0 \$c0,\(\$0\+\),124
+ d34: 05 f0 7c 2c swcpm1 \$c0,\(\$0\+\),124
+ d38: 05 f0 7c 6c lwcpm1 \$c0,\(\$0\+\),124
+ d3c: 05 ff 7c 20 swcpa \$c15,\(\$0\+\),124
+ d40: 05 ff 7c 60 lwcpa \$c15,\(\$0\+\),124
+ d44: 05 ff 7c 28 swcpm0 \$c15,\(\$0\+\),124
+ d48: 05 ff 7c 68 lwcpm0 \$c15,\(\$0\+\),124
+ d4c: 05 ff 7c 2c swcpm1 \$c15,\(\$0\+\),124
+ d50: 05 ff 7c 6c lwcpm1 \$c15,\(\$0\+\),124
+ d54: f5 f0 7c 20 swcpa \$c0,\(\$sp\+\),124
+ d58: f5 f0 7c 60 lwcpa \$c0,\(\$sp\+\),124
+ d5c: f5 f0 7c 28 swcpm0 \$c0,\(\$sp\+\),124
+ d60: f5 f0 7c 68 lwcpm0 \$c0,\(\$sp\+\),124
+ d64: f5 f0 7c 2c swcpm1 \$c0,\(\$sp\+\),124
+ d68: f5 f0 7c 6c lwcpm1 \$c0,\(\$sp\+\),124
+ d6c: f5 ff 7c 20 swcpa \$c15,\(\$sp\+\),124
+ d70: f5 ff 7c 60 lwcpa \$c15,\(\$sp\+\),124
+ d74: f5 ff 7c 28 swcpm0 \$c15,\(\$sp\+\),124
+ d78: f5 ff 7c 68 lwcpm0 \$c15,\(\$sp\+\),124
+ d7c: f5 ff 7c 2c swcpm1 \$c15,\(\$sp\+\),124
+ d80: f5 ff 7c 6c lwcpm1 \$c15,\(\$sp\+\),124
+ d84: 05 f0 80 30 smcpa \$c0,\(\$0\+\),-128
+ d88: 05 f0 80 70 lmcpa \$c0,\(\$0\+\),-128
+ d8c: 05 f0 80 38 smcpm0 \$c0,\(\$0\+\),-128
+ d90: 05 f0 80 78 lmcpm0 \$c0,\(\$0\+\),-128
+ d94: 05 f0 80 3c smcpm1 \$c0,\(\$0\+\),-128
+ d98: 05 f0 80 7c lmcpm1 \$c0,\(\$0\+\),-128
+ d9c: 05 ff 80 30 smcpa \$c15,\(\$0\+\),-128
+ da0: 05 ff 80 70 lmcpa \$c15,\(\$0\+\),-128
+ da4: 05 ff 80 38 smcpm0 \$c15,\(\$0\+\),-128
+ da8: 05 ff 80 78 lmcpm0 \$c15,\(\$0\+\),-128
+ dac: 05 ff 80 3c smcpm1 \$c15,\(\$0\+\),-128
+ db0: 05 ff 80 7c lmcpm1 \$c15,\(\$0\+\),-128
+ db4: f5 f0 80 30 smcpa \$c0,\(\$sp\+\),-128
+ db8: f5 f0 80 70 lmcpa \$c0,\(\$sp\+\),-128
+ dbc: f5 f0 80 38 smcpm0 \$c0,\(\$sp\+\),-128
+ dc0: f5 f0 80 78 lmcpm0 \$c0,\(\$sp\+\),-128
+ dc4: f5 f0 80 3c smcpm1 \$c0,\(\$sp\+\),-128
+ dc8: f5 f0 80 7c lmcpm1 \$c0,\(\$sp\+\),-128
+ dcc: f5 ff 80 30 smcpa \$c15,\(\$sp\+\),-128
+ dd0: f5 ff 80 70 lmcpa \$c15,\(\$sp\+\),-128
+ dd4: f5 ff 80 38 smcpm0 \$c15,\(\$sp\+\),-128
+ dd8: f5 ff 80 78 lmcpm0 \$c15,\(\$sp\+\),-128
+ ddc: f5 ff 80 3c smcpm1 \$c15,\(\$sp\+\),-128
+ de0: f5 ff 80 7c lmcpm1 \$c15,\(\$sp\+\),-128
+ de4: 05 f0 78 30 smcpa \$c0,\(\$0\+\),120
+ de8: 05 f0 78 70 lmcpa \$c0,\(\$0\+\),120
+ dec: 05 f0 78 38 smcpm0 \$c0,\(\$0\+\),120
+ df0: 05 f0 78 78 lmcpm0 \$c0,\(\$0\+\),120
+ df4: 05 f0 78 3c smcpm1 \$c0,\(\$0\+\),120
+ df8: 05 f0 78 7c lmcpm1 \$c0,\(\$0\+\),120
+ dfc: 05 ff 78 30 smcpa \$c15,\(\$0\+\),120
+ e00: 05 ff 78 70 lmcpa \$c15,\(\$0\+\),120
+ e04: 05 ff 78 38 smcpm0 \$c15,\(\$0\+\),120
+ e08: 05 ff 78 78 lmcpm0 \$c15,\(\$0\+\),120
+ e0c: 05 ff 78 3c smcpm1 \$c15,\(\$0\+\),120
+ e10: 05 ff 78 7c lmcpm1 \$c15,\(\$0\+\),120
+ e14: f5 f0 78 30 smcpa \$c0,\(\$sp\+\),120
+ e18: f5 f0 78 70 lmcpa \$c0,\(\$sp\+\),120
+ e1c: f5 f0 78 38 smcpm0 \$c0,\(\$sp\+\),120
+ e20: f5 f0 78 78 lmcpm0 \$c0,\(\$sp\+\),120
+ e24: f5 f0 78 3c smcpm1 \$c0,\(\$sp\+\),120
+ e28: f5 f0 78 7c lmcpm1 \$c0,\(\$sp\+\),120
+ e2c: f5 ff 78 30 smcpa \$c15,\(\$sp\+\),120
+ e30: f5 ff 78 70 lmcpa \$c15,\(\$sp\+\),120
+ e34: f5 ff 78 38 smcpm0 \$c15,\(\$sp\+\),120
+ e38: f5 ff 78 78 lmcpm0 \$c15,\(\$sp\+\),120
+ e3c: f5 ff 78 3c smcpm1 \$c15,\(\$sp\+\),120
+ e40: f5 ff 78 7c lmcpm1 \$c15,\(\$sp\+\),120
+ e44: 04 d8 02 80 bcpeq 0x0,0xffff0e48
+ e48: 05 d8 02 80 bcpne 0x0,0xffff0e4c
+ e4c: 06 d8 02 80 bcpat 0x0,0xffff0e50
+ e50: 07 d8 02 80 bcpaf 0x0,0xffff0e54
+ e54: f4 d8 02 80 bcpeq 0xf,0xffff0e58
+ e58: f5 d8 02 80 bcpne 0xf,0xffff0e5c
+ e5c: f6 d8 02 80 bcpat 0xf,0xffff0e60
+ e60: f7 d8 02 80 bcpaf 0xf,0xffff0e64
+ e64: 04 d8 ff 3f bcpeq 0x0,0x8e62
+ e68: 05 d8 ff 3f bcpne 0x0,0x8e66
+ e6c: 06 d8 ff 3f bcpat 0x0,0x8e6a
+ e70: 07 d8 ff 3f bcpaf 0x0,0x8e6e
+ e74: f4 d8 ff 3f bcpeq 0xf,0x8e72
+ e78: f5 d8 ff 3f bcpne 0xf,0x8e76
+ e7c: f6 d8 ff 3f bcpat 0xf,0x8e7a
+ e80: f7 d8 ff 3f bcpaf 0xf,0x8e7e
+ e84: 04 d8 00 00 bcpeq 0x0,0xe84
+ e84: R_MEP_PCREL17A2 symbol
+ e88: 05 d8 00 00 bcpne 0x0,0xe88
+ e88: R_MEP_PCREL17A2 symbol
+ e8c: 06 d8 00 00 bcpat 0x0,0xe8c
+ e8c: R_MEP_PCREL17A2 symbol
+ e90: 07 d8 00 00 bcpaf 0x0,0xe90
+ e90: R_MEP_PCREL17A2 symbol
+ e94: f4 d8 00 00 bcpeq 0xf,0xe94
+ e94: R_MEP_PCREL17A2 symbol
+ e98: f5 d8 00 00 bcpne 0xf,0xe98
+ e98: R_MEP_PCREL17A2 symbol
+ e9c: f6 d8 00 00 bcpat 0xf,0xe9c
+ e9c: R_MEP_PCREL17A2 symbol
+ ea0: f7 d8 00 00 bcpaf 0xf,0xea0
+ ea0: R_MEP_PCREL17A2 symbol
+ ea4: 21 70 synccp
+ ea6: 0f 18 jsrv \$0
+ ea8: ff 18 jsrv \$sp
+ eaa: 2b d8 00 80 bsrv 0xff800eae
+ eae: fb df ff 7f bsrv 0x800eac
+ eb2: 0b d8 00 00 bsrv 0xeb2
+ eb2: R_MEP_PCREL24A2 symbol
+ eb6: 00 00 nop
+ eb6: R_MEP_8 symbol
+ eb7: R_MEP_16 symbol
+ eb8: 00 00 nop
+ eb9: R_MEP_32 symbol
+ eba: 00 00 nop
+.*
diff --git a/gas/testsuite/gas/mep/dj1.s b/gas/testsuite/gas/mep/dj1.s
new file mode 100644
index 000000000000..e281cb8fa9b1
--- /dev/null
+++ b/gas/testsuite/gas/mep/dj1.s
@@ -0,0 +1,1306 @@
+
+ mov $0,$0
+ mov $1,$0
+ mov $2,$0
+ mov $3,$0
+ mov $4,$0
+ mov $5,$0
+ mov $6,$0
+ mov $7,$0
+ mov $8,$0
+ mov $9,$0
+ mov $10,$0
+ mov $11,$0
+ mov $12,$0
+ mov $13,$0
+ mov $14,$0
+ mov $15,$0
+
+ mov $fp,$0
+ mov $tp,$0
+ mov $gp,$0
+ mov $sp,$0
+
+
+ sb $0,($0)
+ sh $0,($0)
+ sw $0,($0)
+ lb $0,($0)
+ lh $0,($0)
+ lw $0,($0)
+ lbu $0,($0)
+ lhu $0,($0)
+ sb $15,($0)
+ sh $15,($0)
+ sw $15,($0)
+ lb $15,($0)
+ lh $15,($0)
+ lw $15,($0)
+ lbu $15,($0)
+ lhu $15,($0)
+ sb $0,($15)
+ sh $0,($15)
+ sw $0,($15)
+ lb $0,($15)
+ lh $0,($15)
+ lw $0,($15)
+ lbu $0,($15)
+ lhu $0,($15)
+ sb $15,($15)
+ sh $15,($15)
+ sw $15,($15)
+ lb $15,($15)
+ lh $15,($15)
+ lw $15,($15)
+ lbu $15,($15)
+ lhu $15,($15)
+
+ sw $0,0($sp)
+ lw $0,0($sp)
+ sw $15,0($sp)
+ lw $15,0($sp)
+ sw $0,124($sp)
+ lw $0,124($sp)
+ sw $15,124($sp)
+ lw $15,124($sp)
+ sw $0,0($15)
+ lw $0,0($15)
+ sw $15,0($15)
+ lw $15,0($15)
+ sw $0,124($15)
+ lw $0,124($15)
+ sw $15,124($15)
+ lw $15,124($15)
+
+ sb $0,0($tp)
+ lb $0,0($tp)
+ lbu $0,0($tp)
+ sb $7,0($tp)
+ lb $7,0($tp)
+ lbu $7,0($tp)
+ sb $0,127($tp)
+ lb $0,127($tp)
+ lbu $0,127($tp)
+ sb $7,127($tp)
+ lb $7,127($tp)
+ lbu $7,127($tp)
+ sb $0,%tpoff(symbol)($tp)
+ lb $0,%tpoff(symbol)($tp)
+ lbu $0,%tpoff(symbol)($tp)
+ sb $7,%tpoff(symbol)($tp)
+ lb $7,%tpoff(symbol)($tp)
+ lbu $7,%tpoff(symbol)($tp)
+ sb $0,0($13)
+ lb $0,0($13)
+ lbu $0,0($13)
+ sb $7,0($13)
+ lb $7,0($13)
+ lbu $7,0($13)
+ sb $0,127($13)
+ lb $0,127($13)
+ lbu $0,127($13)
+ sb $7,127($13)
+ lb $7,127($13)
+ lbu $7,127($13)
+ sb $0,%tpoff(symbol)($13)
+ lb $0,%tpoff(symbol)($13)
+ lbu $0,%tpoff(symbol)($13)
+ sb $7,%tpoff(symbol)($13)
+ lb $7,%tpoff(symbol)($13)
+ lbu $7,%tpoff(symbol)($13)
+
+ sh $0,0($tp)
+ lh $0,0($tp)
+ lhu $0,0($tp)
+ sh $7,0($tp)
+ lh $7,0($tp)
+ lhu $7,0($tp)
+ sh $0,126($tp)
+ lh $0,126($tp)
+ lhu $0,126($tp)
+ sh $7,126($tp)
+ lh $7,126($tp)
+ lhu $7,126($tp)
+ sh $0,%tpoff(symbol)($tp)
+ lh $0,%tpoff(symbol)($tp)
+ lhu $0,%tpoff(symbol)($tp)
+ sh $7,%tpoff(symbol)($tp)
+ lh $7,%tpoff(symbol)($tp)
+ lhu $7,%tpoff(symbol)($tp)
+ sh $0,0($13)
+ lh $0,0($13)
+ lhu $0,0($13)
+ sh $7,0($13)
+ lh $7,0($13)
+ lhu $7,0($13)
+ sh $0,126($13)
+ lh $0,126($13)
+ lhu $0,126($13)
+ sh $7,126($13)
+ lh $7,126($13)
+ lhu $7,126($13)
+ sh $0,%tpoff(symbol)($13)
+ lh $0,%tpoff(symbol)($13)
+ lhu $0,%tpoff(symbol)($13)
+ sh $7,%tpoff(symbol)($13)
+ lh $7,%tpoff(symbol)($13)
+ lhu $7,%tpoff(symbol)($13)
+
+ sw $0,0($tp)
+ lw $0,0($tp)
+ sw $7,0($tp)
+ lw $7,0($tp)
+ sw $0,124($tp)
+ lw $0,124($tp)
+ sw $7,124($tp)
+ lw $7,124($tp)
+ sw $0,%tpoff(symbol)($tp)
+ lw $0,%tpoff(symbol)($tp)
+ sw $7,%tpoff(symbol)($tp)
+ lw $7,%tpoff(symbol)($tp)
+ sw $0,0($13)
+ lw $0,0($13)
+ sw $7,0($13)
+ lw $7,0($13)
+ sw $0,124($13)
+ lw $0,124($13)
+ sw $7,124($13)
+ lw $7,124($13)
+ sw $0,%tpoff(symbol)($13)
+ lw $0,%tpoff(symbol)($13)
+ sw $7,%tpoff(symbol)($13)
+ lw $7,%tpoff(symbol)($13)
+
+ sb $0,-32768($0)
+ sh $0,-32768($0)
+ sw $0,-32768($0)
+ lb $0,-32768($0)
+ lh $0,-32768($0)
+ lw $0,-32768($0)
+ lbu $0,-32768($0)
+ lhu $0,-32768($0)
+ sb $15,-32768($0)
+ sh $15,-32768($0)
+ sw $15,-32768($0)
+ lb $15,-32768($0)
+ lh $15,-32768($0)
+ lw $15,-32768($0)
+ lbu $15,-32768($0)
+ lhu $15,-32768($0)
+ sb $0,32767($0)
+ sh $0,32767($0)
+ sw $0,32767($0)
+ lb $0,32767($0)
+ lh $0,32767($0)
+ lw $0,32767($0)
+ lbu $0,32767($0)
+ lhu $0,32767($0)
+ sb $15,32767($0)
+ sh $15,32767($0)
+ sw $15,32767($0)
+ lb $15,32767($0)
+ lh $15,32767($0)
+ lw $15,32767($0)
+ lbu $15,32767($0)
+ lhu $15,32767($0)
+ sb $0,%sdaoff(symbol)($0)
+ sh $0,%sdaoff(symbol)($0)
+ sw $0,%sdaoff(symbol)($0)
+ lb $0,%sdaoff(symbol)($0)
+ lh $0,%sdaoff(symbol)($0)
+ lw $0,%sdaoff(symbol)($0)
+ lbu $0,%sdaoff(symbol)($0)
+ lhu $0,%sdaoff(symbol)($0)
+ sb $15,%sdaoff(symbol)($0)
+ sh $15,%sdaoff(symbol)($0)
+ sw $15,%sdaoff(symbol)($0)
+ lb $15,%sdaoff(symbol)($0)
+ lh $15,%sdaoff(symbol)($0)
+ lw $15,%sdaoff(symbol)($0)
+ lbu $15,%sdaoff(symbol)($0)
+ lhu $15,%sdaoff(symbol)($0)
+ sb $0,-32768($0)
+ sh $0,-32768($0)
+ sw $0,-32768($0)
+ lb $0,-32768($0)
+ lh $0,-32768($0)
+ lw $0,-32768($0)
+ lbu $0,-32768($0)
+ lhu $0,-32768($0)
+ sb $15,-32768($0)
+ sh $15,-32768($0)
+ sw $15,-32768($0)
+ lb $15,-32768($0)
+ lh $15,-32768($0)
+ lw $15,-32768($0)
+ lbu $15,-32768($0)
+ lhu $15,-32768($0)
+ sb $0,32767($0)
+ sh $0,32767($0)
+ sw $0,32767($0)
+ lb $0,32767($0)
+ lh $0,32767($0)
+ lw $0,32767($0)
+ lbu $0,32767($0)
+ lhu $0,32767($0)
+ sb $15,32767($0)
+ sh $15,32767($0)
+ sw $15,32767($0)
+ lb $15,32767($0)
+ lh $15,32767($0)
+ lw $15,32767($0)
+ lbu $15,32767($0)
+ lhu $15,32767($0)
+ sb $0,%tpoff(symbol)($0)
+ sh $0,%tpoff(symbol)($0)
+ sw $0,%tpoff(symbol)($0)
+ lb $0,%tpoff(symbol)($0)
+ lh $0,%tpoff(symbol)($0)
+ lw $0,%tpoff(symbol)($0)
+ lbu $0,%tpoff(symbol)($0)
+ lhu $0,%tpoff(symbol)($0)
+ sb $15,%tpoff(symbol)($0)
+ sh $15,%tpoff(symbol)($0)
+ sw $15,%tpoff(symbol)($0)
+ lb $15,%tpoff(symbol)($0)
+ lh $15,%tpoff(symbol)($0)
+ lw $15,%tpoff(symbol)($0)
+ lbu $15,%tpoff(symbol)($0)
+ lhu $15,%tpoff(symbol)($0)
+ sb $0,-32768($15)
+ sh $0,-32768($15)
+ sw $0,-32768($15)
+ lb $0,-32768($15)
+ lh $0,-32768($15)
+ lw $0,-32768($15)
+ lbu $0,-32768($15)
+ lhu $0,-32768($15)
+ sb $15,-32768($15)
+ sh $15,-32768($15)
+ sw $15,-32768($15)
+ lb $15,-32768($15)
+ lh $15,-32768($15)
+ lw $15,-32768($15)
+ lbu $15,-32768($15)
+ lhu $15,-32768($15)
+ sb $0,32767($15)
+ sh $0,32767($15)
+ sw $0,32767($15)
+ lb $0,32767($15)
+ lh $0,32767($15)
+ lw $0,32767($15)
+ lbu $0,32767($15)
+ lhu $0,32767($15)
+ sb $15,32767($15)
+ sh $15,32767($15)
+ sw $15,32767($15)
+ lb $15,32767($15)
+ lh $15,32767($15)
+ lw $15,32767($15)
+ lbu $15,32767($15)
+ lhu $15,32767($15)
+ sb $0,%sdaoff(symbol)($15)
+ sh $0,%sdaoff(symbol)($15)
+ sw $0,%sdaoff(symbol)($15)
+ lb $0,%sdaoff(symbol)($15)
+ lh $0,%sdaoff(symbol)($15)
+ lw $0,%sdaoff(symbol)($15)
+ lbu $0,%sdaoff(symbol)($15)
+ lhu $0,%sdaoff(symbol)($15)
+ sb $15,%sdaoff(symbol)($15)
+ sh $15,%sdaoff(symbol)($15)
+ sw $15,%sdaoff(symbol)($15)
+ lb $15,%sdaoff(symbol)($15)
+ lh $15,%sdaoff(symbol)($15)
+ lw $15,%sdaoff(symbol)($15)
+ lbu $15,%sdaoff(symbol)($15)
+ lhu $15,%sdaoff(symbol)($15)
+ sb $0,-32768($15)
+ sh $0,-32768($15)
+ sw $0,-32768($15)
+ lb $0,-32768($15)
+ lh $0,-32768($15)
+ lw $0,-32768($15)
+ lbu $0,-32768($15)
+ lhu $0,-32768($15)
+ sb $15,-32768($15)
+ sh $15,-32768($15)
+ sw $15,-32768($15)
+ lb $15,-32768($15)
+ lh $15,-32768($15)
+ lw $15,-32768($15)
+ lbu $15,-32768($15)
+ lhu $15,-32768($15)
+ sb $0,32767($15)
+ sh $0,32767($15)
+ sw $0,32767($15)
+ lb $0,32767($15)
+ lh $0,32767($15)
+ lw $0,32767($15)
+ lbu $0,32767($15)
+ lhu $0,32767($15)
+ sb $15,32767($15)
+ sh $15,32767($15)
+ sw $15,32767($15)
+ lb $15,32767($15)
+ lh $15,32767($15)
+ lw $15,32767($15)
+ lbu $15,32767($15)
+ lhu $15,32767($15)
+ sb $0,%tpoff(symbol)($15)
+ sh $0,%tpoff(symbol)($15)
+ sw $0,%tpoff(symbol)($15)
+ lb $0,%tpoff(symbol)($15)
+ lh $0,%tpoff(symbol)($15)
+ lw $0,%tpoff(symbol)($15)
+ lbu $0,%tpoff(symbol)($15)
+ lhu $0,%tpoff(symbol)($15)
+ sb $15,%tpoff(symbol)($15)
+ sh $15,%tpoff(symbol)($15)
+ sw $15,%tpoff(symbol)($15)
+ lb $15,%tpoff(symbol)($15)
+ lh $15,%tpoff(symbol)($15)
+ lw $15,%tpoff(symbol)($15)
+ lbu $15,%tpoff(symbol)($15)
+ lhu $15,%tpoff(symbol)($15)
+
+ sw $0,(0)
+ lw $0,(0)
+ sw $15,(0)
+ lw $15,(0)
+ sw $0,(0xfffffc)
+ lw $0,(0xfffffc)
+ sw $15,(0xfffffc)
+ lw $15,(0xfffffc)
+ sw $0,(symbol)
+ lw $0,(symbol)
+ sw $15,(symbol)
+ lw $15,(symbol)
+
+
+ extb $0
+ extub $0
+ exth $0
+ extuh $0
+ extb $15
+ extub $15
+ exth $15
+ extuh $15
+
+
+ ssarb 0($0)
+ ssarb 3($0)
+ ssarb 0($15)
+ ssarb 3($15)
+
+
+ mov $0,$0
+ mov $15,$0
+ mov $0,$15
+ mov $15,$15
+ mov $0,-32768
+ mov $15,-32768
+ mov $0,-128
+ mov $15,-128
+ mov $0,0
+ mov $15,0
+ mov $0,127
+ mov $15,127
+ mov $0,32767
+ mov $15,32767
+
+ mov $0,%lo(symbol)
+ mov $0,%hi(symbol)
+ mov $0,%uhi(symbol)
+ mov $0,%sdaoff(symbol)
+ mov $0,%tpoff(symbol)
+
+ movu $0,0
+ movu $7,0
+ movu $0,0xffffff
+ movu $7,0xffffff
+ movu $0,%lo(symbol)
+ movu $7,%lo(symbol)
+ movu $0,symbol
+ movu $7,symbol
+
+ movu $0,0
+ movh $0,0
+ movu $15,0
+ movh $15,0
+ movu $0,0xffff
+ movh $0,0xffff
+ movu $15,0xffff
+ movh $15,0xffff
+
+ movu $0,%lo(symbol)
+ movh $0,%lo(symbol)
+ movu $15,%lo(symbol)
+ movh $15,%lo(symbol)
+ movu $0,%hi(symbol)
+ movh $0,%hi(symbol)
+ movu $15,%hi(symbol)
+ movh $15,%hi(symbol)
+ movu $0,%uhi(symbol)
+ movh $0,%uhi(symbol)
+ movu $15,%uhi(symbol)
+ movh $15,%uhi(symbol)
+ movu $0,%lo(0x12345678)
+ movh $0,%lo(0x12345678)
+ movu $15,%lo(0x12345678)
+ movh $15,%lo(0x12345678)
+ movu $0,%hi(0x12345678)
+ movh $0,%hi(0x12345678)
+ movu $15,%hi(0x12345678)
+ movh $15,%hi(0x12345678)
+ movu $0,%uhi(0x12345678)
+ movh $0,%uhi(0x12345678)
+ movu $15,%uhi(0x12345678)
+ movh $15,%uhi(0x12345678)
+
+
+ add3 $0,$0,$0
+ add3 $15,$0,$0
+ add3 $0,$15,$0
+ add3 $15,$15,$0
+ add3 $0,$0,$15
+ add3 $15,$0,$15
+ add3 $0,$15,$15
+ add3 $15,$15,$15
+
+ add $0,-16
+ add $15,-16
+ add $0,0
+ add $15,0
+ add $0,15
+ add $15,15
+
+ add3 $0,$sp,0
+ add3 $15,$sp,0
+ add3 $0,$sp,124
+ add3 $15,$sp,124
+ add3 $0,$sp,1
+ add3 $15,$sp,1
+
+ advck3 $0,$0,$0
+ sbvck3 $0,$0,$0
+ advck3 $0,$15,$0
+ sbvck3 $0,$15,$0
+ advck3 $0,$0,$15
+ sbvck3 $0,$0,$15
+ advck3 $0,$15,$15
+ sbvck3 $0,$15,$15
+
+ sub $0,$0
+ neg $0,$0
+ sub $15,$0
+ neg $15,$0
+ sub $0,$15
+ neg $0,$15
+ sub $15,$15
+ neg $15,$15
+
+ slt3 $0,$0,$0
+ sltu3 $0,$0,$0
+ sl1ad3 $0,$0,$0
+ sl2ad3 $0,$0,$0
+ slt3 $0,$15,$0
+ sltu3 $0,$15,$0
+ sl1ad3 $0,$15,$0
+ sl2ad3 $0,$15,$0
+ slt3 $0,$0,$15
+ sltu3 $0,$0,$15
+ sl1ad3 $0,$0,$15
+ sl2ad3 $0,$0,$15
+ slt3 $0,$15,$15
+ sltu3 $0,$15,$15
+ sl1ad3 $0,$15,$15
+ sl2ad3 $0,$15,$15
+
+ add3 $0,$0,-32768
+ add3 $15,$0,-32768
+ add3 $0,$15,-32768
+ add3 $15,$15,-32768
+ add3 $0,$0,32767
+ add3 $15,$0,32767
+ add3 $0,$15,32767
+ add3 $15,$15,32767
+ add3 $0,$0,%lo(symbol)
+ add3 $15,$0,%lo(symbol)
+ add3 $0,$15,%lo(symbol)
+ add3 $15,$15,%lo(symbol)
+
+ slt3 $0,$0,0
+ sltu3 $0,$0,0
+ slt3 $0,$15,0
+ sltu3 $0,$15,0
+ slt3 $0,$0,31
+ sltu3 $0,$0,31
+ slt3 $0,$15,31
+ sltu3 $0,$15,31
+
+
+ or $0,$0
+ and $0,$0
+ xor $0,$0
+ nor $0,$0
+ or $15,$0
+ and $15,$0
+ xor $15,$0
+ nor $15,$0
+ or $0,$15
+ and $0,$15
+ xor $0,$15
+ nor $0,$15
+ or $15,$15
+ and $15,$15
+ xor $15,$15
+ nor $15,$15
+
+ or3 $0,$0,0
+ and3 $0,$0,0
+ xor3 $0,$0,0
+ or3 $15,$0,0
+ and3 $15,$0,0
+ xor3 $15,$0,0
+ or3 $0,$15,0
+ and3 $0,$15,0
+ xor3 $0,$15,0
+ or3 $15,$15,0
+ and3 $15,$15,0
+ xor3 $15,$15,0
+ or3 $0,$0,65535
+ and3 $0,$0,65535
+ xor3 $0,$0,65535
+ or3 $15,$0,65535
+ and3 $15,$0,65535
+ xor3 $15,$0,65535
+ or3 $0,$15,65535
+ and3 $0,$15,65535
+ xor3 $0,$15,65535
+ or3 $15,$15,65535
+ and3 $15,$15,65535
+ xor3 $15,$15,65535
+ or3 $0,$0,%lo(symbol)
+ and3 $0,$0,%lo(symbol)
+ xor3 $0,$0,%lo(symbol)
+ or3 $15,$0,%lo(symbol)
+ and3 $15,$0,%lo(symbol)
+ xor3 $15,$0,%lo(symbol)
+ or3 $0,$15,%lo(symbol)
+ and3 $0,$15,%lo(symbol)
+ xor3 $0,$15,%lo(symbol)
+ or3 $15,$15,%lo(symbol)
+ and3 $15,$15,%lo(symbol)
+ xor3 $15,$15,%lo(symbol)
+
+
+ sra $0,$0
+ srl $0,$0
+ sll $0,$0
+ fsft $0,$0
+ sra $15,$0
+ srl $15,$0
+ sll $15,$0
+ fsft $15,$0
+ sra $0,$15
+ srl $0,$15
+ sll $0,$15
+ fsft $0,$15
+ sra $15,$15
+ srl $15,$15
+ sll $15,$15
+ fsft $15,$15
+
+ sra $0,0
+ srl $0,0
+ sll $0,0
+ sra $15,0
+ srl $15,0
+ sll $15,0
+ sra $0,31
+ srl $0,31
+ sll $0,31
+ sra $15,31
+ srl $15,31
+ sll $15,31
+
+ sll3 $0,$0,0
+ sll3 $0,$15,0
+ sll3 $0,$0,31
+ sll3 $0,$15,31
+
+
+ bra .-2048+2
+ bra .+2046+2
+ bra symbol
+
+ beqz $0,.-128+2
+ bnez $0,.-128+2
+ beqz $15,.-128+2
+ bnez $15,.-128+2
+ beqz $0,.+126+2
+ bnez $0,.+126+2
+ beqz $15,.+126+2
+ bnez $15,.+126+2
+ beqz $0,symbol
+ bnez $0,symbol
+ beqz $15,symbol
+ bnez $15,symbol
+
+ beqi $0,0,.-65536+4
+ bnei $0,0,.-65536+4
+ blti $0,0,.-65536+4
+ bgei $0,0,.-65536+4
+ beqi $15,0,.-65536+4
+ bnei $15,0,.-65536+4
+ blti $15,0,.-65536+4
+ bgei $15,0,.-65536+4
+ beqi $0,15,.-65536+4
+ bnei $0,15,.-65536+4
+ blti $0,15,.-65536+4
+ bgei $0,15,.-65536+4
+ beqi $15,15,.-65536+4
+ bnei $15,15,.-65536+4
+ blti $15,15,.-65536+4
+ bgei $15,15,.-65536+4
+ beqi $0,0,.+32763+4
+ bnei $0,0,.+32763+4
+ blti $0,0,.+32763+4
+ bgei $0,0,.+32763+4
+ beqi $15,0,.+32763+4
+ bnei $15,0,.+32763+4
+ blti $15,0,.+32763+4
+ bgei $15,0,.+32763+4
+ beqi $0,15,.+32763+4
+ bnei $0,15,.+32763+4
+ blti $0,15,.+32763+4
+ bgei $0,15,.+32763+4
+ beqi $15,15,.+32763+4
+ bnei $15,15,.+32763+4
+ blti $15,15,.+32763+4
+ bgei $15,15,.+32763+4
+ beqi $0,0,symbol
+ bnei $0,0,symbol
+ blti $0,0,symbol
+ bgei $0,0,symbol
+ beqi $15,0,symbol
+ bnei $15,0,symbol
+ blti $15,0,symbol
+ bgei $15,0,symbol
+ beqi $0,15,symbol
+ bnei $0,15,symbol
+ blti $0,15,symbol
+ bgei $0,15,symbol
+ beqi $15,15,symbol
+ bnei $15,15,symbol
+ blti $15,15,symbol
+ bgei $15,15,symbol
+
+ beq $0,$0,.-65536+4
+ bne $0,$0,.-65536+4
+ beq $15,$0,.-65536+4
+ bne $15,$0,.-65536+4
+ beq $0,$15,.-65536+4
+ bne $0,$15,.-65536+4
+ beq $15,$15,.-65536+4
+ bne $15,$15,.-65536+4
+ beq $0,$0,.+32763+4
+ bne $0,$0,.+32763+4
+ beq $15,$0,.+32763+4
+ bne $15,$0,.+32763+4
+ beq $0,$15,.+32763+4
+ bne $0,$15,.+32763+4
+ beq $15,$15,.+32763+4
+ bne $15,$15,.+32763+4
+ beq $0,$0,symbol
+ bne $0,$0,symbol
+ beq $15,$0,symbol
+ bne $15,$0,symbol
+ beq $0,$15,symbol
+ bne $0,$15,symbol
+ beq $15,$15,symbol
+ bne $15,$15,symbol
+
+ bsr .-0x800000+4
+ bsr .-2048+2
+ bsr .+2046+2
+ bsr .+0x7ffffe+4
+ bsr symbol
+
+ jmp $0
+ jmp $15
+ jmp 0
+ jmp 0xfffffe
+ jmp symbol
+
+ jsr $0
+ jsr $15
+
+ ret
+
+ repeat $0,.-65536+4
+ repeat $15,.-65536+4
+ repeat $0,.+32763+4
+ repeat $15,.+32763+4
+ repeat $0,symbol
+ repeat $15,symbol
+
+ erepeat .-65536+4
+ erepeat .+32763+4
+ erepeat symbol
+
+
+ stc $0,$pc
+ ldc $0,$pc
+ stc $15,$pc
+ ldc $15,$pc
+ stc $0,$lp
+ ldc $0,$lp
+ stc $15,$lp
+ ldc $15,$lp
+ stc $0,$sar
+ ldc $0,$sar
+ stc $15,$sar
+ ldc $15,$sar
+ stc $0,$rpb
+ ldc $0,$rpb
+ stc $15,$rpb
+ ldc $15,$rpb
+ stc $0,$rpe
+ ldc $0,$rpe
+ stc $15,$rpe
+ ldc $15,$rpe
+ stc $0,$rpc
+ ldc $0,$rpc
+ stc $15,$rpc
+ ldc $15,$rpc
+ stc $0,$hi
+ ldc $0,$hi
+ stc $15,$hi
+ ldc $15,$hi
+ stc $0,$lo
+ ldc $0,$lo
+ stc $15,$lo
+ ldc $15,$lo
+ stc $0,$mb0
+ ldc $0,$mb0
+ stc $15,$mb0
+ ldc $15,$mb0
+ stc $0,$me0
+ ldc $0,$me0
+ stc $15,$me0
+ ldc $15,$me0
+ stc $0,$mb1
+ ldc $0,$mb1
+ stc $15,$mb1
+ ldc $15,$mb1
+ stc $0,$me1
+ ldc $0,$me1
+ stc $15,$me1
+ ldc $15,$me1
+
+ stc $0,$psw
+ ldc $0,$psw
+ stc $15,$psw
+ ldc $15,$psw
+ stc $0,$id
+ ldc $0,$id
+ stc $15,$id
+ ldc $15,$id
+ stc $0,$tmp
+ ldc $0,$tmp
+ stc $15,$tmp
+ ldc $15,$tmp
+ stc $0,$epc
+ ldc $0,$epc
+ stc $15,$epc
+ ldc $15,$epc
+ stc $0,$exc
+ ldc $0,$exc
+ stc $15,$exc
+ ldc $15,$exc
+ stc $0,$cfg
+ ldc $0,$cfg
+ stc $15,$cfg
+ ldc $15,$cfg
+ stc $0,$npc
+ ldc $0,$npc
+ stc $15,$npc
+ ldc $15,$npc
+ stc $0,$dbg
+ ldc $0,$dbg
+ stc $15,$dbg
+ ldc $15,$dbg
+ stc $0,$depc
+ ldc $0,$depc
+ stc $15,$depc
+ ldc $15,$depc
+ stc $0,$opt
+ ldc $0,$opt
+ stc $15,$opt
+ ldc $15,$opt
+ stc $0,$rcfg
+ ldc $0,$rcfg
+ stc $15,$rcfg
+ ldc $15,$rcfg
+ stc $0,$ccfg
+ ldc $0,$ccfg
+ stc $15,$ccfg
+ ldc $15,$ccfg
+
+ di
+ ei
+ reti
+ halt
+ break
+ syncm
+
+ swi 0
+ swi 3
+
+ stcb $0,0
+ ldcb $0,0
+ stcb $15,0
+ ldcb $15,0
+ stcb $0,65535
+ ldcb $0,65535
+ stcb $15,65535
+ ldcb $15,65535
+ stcb $0,symbol
+ ldcb $0,symbol
+ stcb $15,symbol
+ ldcb $15,symbol
+
+
+ bsetm ($0),0
+ bclrm ($0),0
+ bnotm ($0),0
+ bsetm ($15),0
+ bclrm ($15),0
+ bnotm ($15),0
+ bsetm ($0),7
+ bclrm ($0),7
+ bnotm ($0),7
+ bsetm ($15),7
+ bclrm ($15),7
+ bnotm ($15),7
+
+ btstm $0,($0),0
+ btstm $0,($15),0
+ btstm $0,($0),7
+ btstm $0,($15),7
+
+ tas $0,($0)
+ tas $15,($0)
+ tas $0,($15)
+ tas $15,($15)
+
+
+ cache 0,($0)
+ cache 3,($0)
+ cache 0,($15)
+ cache 3,($15)
+
+ mul $0,$0
+ madd $0,$0
+ mulr $0,$0
+ maddr $0,$0
+ mulu $0,$0
+ maddu $0,$0
+ mulru $0,$0
+ maddru $0,$0
+ mul $15,$0
+ madd $15,$0
+ mulr $15,$0
+ maddr $15,$0
+ mulu $15,$0
+ maddu $15,$0
+ mulru $15,$0
+ maddru $15,$0
+ mul $0,$15
+ madd $0,$15
+ mulr $0,$15
+ maddr $0,$15
+ mulu $0,$15
+ maddu $0,$15
+ mulru $0,$15
+ maddru $0,$15
+ mul $15,$15
+ madd $15,$15
+ mulr $15,$15
+ maddr $15,$15
+ mulu $15,$15
+ maddu $15,$15
+ mulru $15,$15
+ maddru $15,$15
+
+ div $0,$0
+ divu $0,$0
+ div $15,$0
+ divu $15,$0
+ div $0,$15
+ divu $0,$15
+ div $15,$15
+ divu $15,$15
+
+ dret
+ dbreak
+
+ ldz $0,$0
+ abs $0,$0
+ ave $0,$0
+ ldz $15,$0
+ abs $15,$0
+ ave $15,$0
+ ldz $0,$15
+ abs $0,$15
+ ave $0,$15
+ ldz $15,$15
+ abs $15,$15
+ ave $15,$15
+
+ min $0,$0
+ max $0,$0
+ minu $0,$0
+ maxu $0,$0
+ min $15,$0
+ max $15,$0
+ minu $15,$0
+ maxu $15,$0
+ min $0,$15
+ max $0,$15
+ minu $0,$15
+ maxu $0,$15
+ min $15,$15
+ max $15,$15
+ minu $15,$15
+ maxu $15,$15
+
+ clip $0,0
+ clipu $0,0
+ clip $15,0
+ clipu $15,0
+ clip $0,31
+ clipu $0,31
+ clip $15,31
+ clipu $15,31
+
+ sadd $0,$0
+ ssub $0,$0
+ saddu $0,$0
+ ssubu $0,$0
+ sadd $15,$0
+ ssub $15,$0
+ saddu $15,$0
+ ssubu $15,$0
+ sadd $0,$15
+ ssub $0,$15
+ saddu $0,$15
+ ssubu $0,$15
+ sadd $15,$15
+ ssub $15,$15
+ saddu $15,$15
+ ssubu $15,$15
+
+ swcp $c0,($0)
+ lwcp $c0,($0)
+ smcp $c0,($0)
+ lmcp $c0,($0)
+ swcp $c15,($0)
+ lwcp $c15,($0)
+ smcp $c15,($0)
+ lmcp $c15,($0)
+ swcp $c0,($15)
+ lwcp $c0,($15)
+ smcp $c0,($15)
+ lmcp $c0,($15)
+ swcp $c15,($15)
+ lwcp $c15,($15)
+ smcp $c15,($15)
+ lmcp $c15,($15)
+
+ swcpi $c0,($0+)
+ lwcpi $c0,($0+)
+ smcpi $c0,($0+)
+ lmcpi $c0,($0+)
+ swcpi $c15,($0+)
+ lwcpi $c15,($0+)
+ smcpi $c15,($0+)
+ lmcpi $c15,($0+)
+ swcpi $c0,($15+)
+ lwcpi $c0,($15+)
+ smcpi $c0,($15+)
+ lmcpi $c0,($15+)
+ swcpi $c15,($15+)
+ lwcpi $c15,($15+)
+ smcpi $c15,($15+)
+ lmcpi $c15,($15+)
+
+ sbcpa $c0,($0+),-128
+ lbcpa $c0,($0+),-128
+ sbcpm0 $c0,($0+),-128
+ lbcpm0 $c0,($0+),-128
+ sbcpm1 $c0,($0+),-128
+ lbcpm1 $c0,($0+),-128
+ sbcpa $c15,($0+),-128
+ lbcpa $c15,($0+),-128
+ sbcpm0 $c15,($0+),-128
+ lbcpm0 $c15,($0+),-128
+ sbcpm1 $c15,($0+),-128
+ lbcpm1 $c15,($0+),-128
+ sbcpa $c0,($15+),-128
+ lbcpa $c0,($15+),-128
+ sbcpm0 $c0,($15+),-128
+ lbcpm0 $c0,($15+),-128
+ sbcpm1 $c0,($15+),-128
+ lbcpm1 $c0,($15+),-128
+ sbcpa $c15,($15+),-128
+ lbcpa $c15,($15+),-128
+ sbcpm0 $c15,($15+),-128
+ lbcpm0 $c15,($15+),-128
+ sbcpm1 $c15,($15+),-128
+ lbcpm1 $c15,($15+),-128
+ sbcpa $c0,($0+),127
+ lbcpa $c0,($0+),127
+ sbcpm0 $c0,($0+),127
+ lbcpm0 $c0,($0+),127
+ sbcpm1 $c0,($0+),127
+ lbcpm1 $c0,($0+),127
+ sbcpa $c15,($0+),127
+ lbcpa $c15,($0+),127
+ sbcpm0 $c15,($0+),127
+ lbcpm0 $c15,($0+),127
+ sbcpm1 $c15,($0+),127
+ lbcpm1 $c15,($0+),127
+ sbcpa $c0,($15+),127
+ lbcpa $c0,($15+),127
+ sbcpm0 $c0,($15+),127
+ lbcpm0 $c0,($15+),127
+ sbcpm1 $c0,($15+),127
+ lbcpm1 $c0,($15+),127
+ sbcpa $c15,($15+),127
+ lbcpa $c15,($15+),127
+ sbcpm0 $c15,($15+),127
+ lbcpm0 $c15,($15+),127
+ sbcpm1 $c15,($15+),127
+ lbcpm1 $c15,($15+),127
+
+ shcpa $c0,($0+),-128
+ lhcpa $c0,($0+),-128
+ shcpm0 $c0,($0+),-128
+ lhcpm0 $c0,($0+),-128
+ shcpm1 $c0,($0+),-128
+ lhcpm1 $c0,($0+),-128
+ shcpa $c15,($0+),-128
+ lhcpa $c15,($0+),-128
+ shcpm0 $c15,($0+),-128
+ lhcpm0 $c15,($0+),-128
+ shcpm1 $c15,($0+),-128
+ lhcpm1 $c15,($0+),-128
+ shcpa $c0,($15+),-128
+ lhcpa $c0,($15+),-128
+ shcpm0 $c0,($15+),-128
+ lhcpm0 $c0,($15+),-128
+ shcpm1 $c0,($15+),-128
+ lhcpm1 $c0,($15+),-128
+ shcpa $c15,($15+),-128
+ lhcpa $c15,($15+),-128
+ shcpm0 $c15,($15+),-128
+ lhcpm0 $c15,($15+),-128
+ shcpm1 $c15,($15+),-128
+ lhcpm1 $c15,($15+),-128
+ shcpa $c0,($0+),126
+ lhcpa $c0,($0+),126
+ shcpm0 $c0,($0+),126
+ lhcpm0 $c0,($0+),126
+ shcpm1 $c0,($0+),126
+ lhcpm1 $c0,($0+),126
+ shcpa $c15,($0+),126
+ lhcpa $c15,($0+),126
+ shcpm0 $c15,($0+),126
+ lhcpm0 $c15,($0+),126
+ shcpm1 $c15,($0+),126
+ lhcpm1 $c15,($0+),126
+ shcpa $c0,($15+),126
+ lhcpa $c0,($15+),126
+ shcpm0 $c0,($15+),126
+ lhcpm0 $c0,($15+),126
+ shcpm1 $c0,($15+),126
+ lhcpm1 $c0,($15+),126
+ shcpa $c15,($15+),126
+ lhcpa $c15,($15+),126
+ shcpm0 $c15,($15+),126
+ lhcpm0 $c15,($15+),126
+ shcpm1 $c15,($15+),126
+ lhcpm1 $c15,($15+),126
+
+ swcpa $c0,($0+),-128
+ lwcpa $c0,($0+),-128
+ swcpm0 $c0,($0+),-128
+ lwcpm0 $c0,($0+),-128
+ swcpm1 $c0,($0+),-128
+ lwcpm1 $c0,($0+),-128
+ swcpa $c15,($0+),-128
+ lwcpa $c15,($0+),-128
+ swcpm0 $c15,($0+),-128
+ lwcpm0 $c15,($0+),-128
+ swcpm1 $c15,($0+),-128
+ lwcpm1 $c15,($0+),-128
+ swcpa $c0,($15+),-128
+ lwcpa $c0,($15+),-128
+ swcpm0 $c0,($15+),-128
+ lwcpm0 $c0,($15+),-128
+ swcpm1 $c0,($15+),-128
+ lwcpm1 $c0,($15+),-128
+ swcpa $c15,($15+),-128
+ lwcpa $c15,($15+),-128
+ swcpm0 $c15,($15+),-128
+ lwcpm0 $c15,($15+),-128
+ swcpm1 $c15,($15+),-128
+ lwcpm1 $c15,($15+),-128
+ swcpa $c0,($0+),124
+ lwcpa $c0,($0+),124
+ swcpm0 $c0,($0+),124
+ lwcpm0 $c0,($0+),124
+ swcpm1 $c0,($0+),124
+ lwcpm1 $c0,($0+),124
+ swcpa $c15,($0+),124
+ lwcpa $c15,($0+),124
+ swcpm0 $c15,($0+),124
+ lwcpm0 $c15,($0+),124
+ swcpm1 $c15,($0+),124
+ lwcpm1 $c15,($0+),124
+ swcpa $c0,($15+),124
+ lwcpa $c0,($15+),124
+ swcpm0 $c0,($15+),124
+ lwcpm0 $c0,($15+),124
+ swcpm1 $c0,($15+),124
+ lwcpm1 $c0,($15+),124
+ swcpa $c15,($15+),124
+ lwcpa $c15,($15+),124
+ swcpm0 $c15,($15+),124
+ lwcpm0 $c15,($15+),124
+ swcpm1 $c15,($15+),124
+ lwcpm1 $c15,($15+),124
+
+ smcpa $c0,($0+),-128
+ lmcpa $c0,($0+),-128
+ smcpm0 $c0,($0+),-128
+ lmcpm0 $c0,($0+),-128
+ smcpm1 $c0,($0+),-128
+ lmcpm1 $c0,($0+),-128
+ smcpa $c15,($0+),-128
+ lmcpa $c15,($0+),-128
+ smcpm0 $c15,($0+),-128
+ lmcpm0 $c15,($0+),-128
+ smcpm1 $c15,($0+),-128
+ lmcpm1 $c15,($0+),-128
+ smcpa $c0,($15+),-128
+ lmcpa $c0,($15+),-128
+ smcpm0 $c0,($15+),-128
+ lmcpm0 $c0,($15+),-128
+ smcpm1 $c0,($15+),-128
+ lmcpm1 $c0,($15+),-128
+ smcpa $c15,($15+),-128
+ lmcpa $c15,($15+),-128
+ smcpm0 $c15,($15+),-128
+ lmcpm0 $c15,($15+),-128
+ smcpm1 $c15,($15+),-128
+ lmcpm1 $c15,($15+),-128
+ smcpa $c0,($0+),120
+ lmcpa $c0,($0+),120
+ smcpm0 $c0,($0+),120
+ lmcpm0 $c0,($0+),120
+ smcpm1 $c0,($0+),120
+ lmcpm1 $c0,($0+),120
+ smcpa $c15,($0+),120
+ lmcpa $c15,($0+),120
+ smcpm0 $c15,($0+),120
+ lmcpm0 $c15,($0+),120
+ smcpm1 $c15,($0+),120
+ lmcpm1 $c15,($0+),120
+ smcpa $c0,($15+),120
+ lmcpa $c0,($15+),120
+ smcpm0 $c0,($15+),120
+ lmcpm0 $c0,($15+),120
+ smcpm1 $c0,($15+),120
+ lmcpm1 $c0,($15+),120
+ smcpa $c15,($15+),120
+ lmcpa $c15,($15+),120
+ smcpm0 $c15,($15+),120
+ lmcpm0 $c15,($15+),120
+ smcpm1 $c15,($15+),120
+ lmcpm1 $c15,($15+),120
+
+/*
+ cmov $c0,$0
+ cmov $c15,$0
+ cmov $c0,$15
+ cmov $c15,$15
+
+ cmov $0,$c0
+ cmov $15,$c0
+ cmov $0,$c15
+ cmov $15,$c15
+
+ cmovc $ccr0,$0
+ cmovc $ccr15,$0
+ cmovc $ccr0,$15
+ cmovc $ccr15,$15
+
+ cmovc $0,$ccr0
+ cmovc $15,$ccr0
+ cmovc $0,$ccr15
+ cmovc $15,$ccr15
+
+ cmovh $c0,$0
+ cmovh $c15,$0
+ cmovh $c0,$15
+ cmovh $c15,$15
+
+ cmovh $0,$c0
+ cmovh $15,$c0
+ cmovh $0,$c15
+ cmovh $15,$c15
+*/
+ bcpeq 0,.-65536+4
+ bcpne 0,.-65536+4
+ bcpat 0,.-65536+4
+ bcpaf 0,.-65536+4
+ bcpeq 15,.-65536+4
+ bcpne 15,.-65536+4
+ bcpat 15,.-65536+4
+ bcpaf 15,.-65536+4
+ bcpeq 0,.+32763+4
+ bcpne 0,.+32763+4
+ bcpat 0,.+32763+4
+ bcpaf 0,.+32763+4
+ bcpeq 15,.+32763+4
+ bcpne 15,.+32763+4
+ bcpat 15,.+32763+4
+ bcpaf 15,.+32763+4
+ bcpeq 0,symbol
+ bcpne 0,symbol
+ bcpat 0,symbol
+ bcpaf 0,symbol
+ bcpeq 15,symbol
+ bcpne 15,symbol
+ bcpat 15,symbol
+ bcpaf 15,symbol
+
+ synccp
+
+ jsrv $0
+ jsrv $15
+
+ bsrv .+4-0x800000
+ bsrv .+4+0x7ffffb
+ bsrv symbol
+
+
+ .byte symbol
+ .short symbol
+ .long symbol
+
+
diff --git a/gas/testsuite/gas/mep/dj2.d b/gas/testsuite/gas/mep/dj2.d
new file mode 100644
index 000000000000..9634cf4c4327
--- /dev/null
+++ b/gas/testsuite/gas/mep/dj2.d
@@ -0,0 +1,11 @@
+#as:
+#objdump: -dr
+#name: dj2
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <.text>:
+ 0: 07 88 sb \$7,\(\$8\)
+ 2: 05 98 sb \$5,\(\$9\)
diff --git a/gas/testsuite/gas/mep/dj2.le.d b/gas/testsuite/gas/mep/dj2.le.d
new file mode 100644
index 000000000000..1c1053c51a9e
--- /dev/null
+++ b/gas/testsuite/gas/mep/dj2.le.d
@@ -0,0 +1,12 @@
+#as: -EL
+#objdump: -dr
+#source: dj2.s
+#name: dj2.le
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <.text>:
+ 0: 88 07 sb \$7,\(\$8\)
+ 2: 98 05 sb \$5,\(\$9\)
diff --git a/gas/testsuite/gas/mep/dj2.s b/gas/testsuite/gas/mep/dj2.s
new file mode 100644
index 000000000000..4eabf82b0f08
--- /dev/null
+++ b/gas/testsuite/gas/mep/dj2.s
@@ -0,0 +1,5 @@
+
+ .text
+ sb $7,($fp)
+ sb $5,($9)
+
diff --git a/gas/testsuite/gas/mep/relocs-bad3.s b/gas/testsuite/gas/mep/relocs-bad3.s
new file mode 100644
index 000000000000..1e80a6b0dda3
--- /dev/null
+++ b/gas/testsuite/gas/mep/relocs-bad3.s
@@ -0,0 +1,15 @@
+ .global main
+
+test:
+ mov $0,0
+
+# negative test from case 106708
+
+L1:
+ mov $1,1
+ mov $1,((L1 & 0x00007fff) | 0x00008000)
+ ret
+ mov $0,0
+main:
+ mov $0,0
+ ret
diff --git a/gas/testsuite/gas/mep/relocs-junk1.s b/gas/testsuite/gas/mep/relocs-junk1.s
new file mode 100644
index 000000000000..6e9c6c2be09b
--- /dev/null
+++ b/gas/testsuite/gas/mep/relocs-junk1.s
@@ -0,0 +1,8 @@
+junk1:
+ nop
+ nop
+ nop
+ nop
+ nop
+ .data
+foodata: .word 42
diff --git a/gas/testsuite/gas/mep/relocs-junk2.s b/gas/testsuite/gas/mep/relocs-junk2.s
new file mode 100644
index 000000000000..361ad6ec7cf7
--- /dev/null
+++ b/gas/testsuite/gas/mep/relocs-junk2.s
@@ -0,0 +1,7 @@
+junk2:
+ nop
+ nop
+ nop
+ nop
+ nop
+ \ No newline at end of file
diff --git a/gas/testsuite/gas/mep/relocs-refs.s b/gas/testsuite/gas/mep/relocs-refs.s
new file mode 100644
index 000000000000..43dc77ee64b9
--- /dev/null
+++ b/gas/testsuite/gas/mep/relocs-refs.s
@@ -0,0 +1,55 @@
+
+ .global main
+ .global foo
+ .global bar
+main:
+ nop
+ nop
+ lb $5, foo($3)
+ bsr foo
+ repeat $5, foo
+
+ nop
+ nop
+ lb $5, (-foo & 0xffff)($3)
+ bsr -foo
+ repeat $5, -foo
+
+ nop
+ nop
+ lb $5, (foo + bar)($3)
+ bsr (foo + bar)
+ repeat $5, (foo + bar)
+
+ jmp (foo << 3)
+ jmp (foo >> 3)
+ jmp (foo - bar) & 0x7fffff
+ jmp (foo - main) & 0x7fffff
+ jmp (.text - foo) & 0x7fffff
+ jmp (.data - foo) & 0x7fffff
+ jmp (foo - %sizeof(.text))
+ jmp (foo * 7)
+ jmp (foo / 7)
+ jmp (foo % 7)
+ jmp (foo ^ bar)
+ jmp (foo | bar)
+ jmp (foo & bar)
+ jmp (foo == bar) << 5
+ jmp (foo < bar) << 5
+ jmp (foo <= bar) << 5
+ jmp (foo > bar) << 5
+ jmp (foo >= bar) << 5
+ # jmp (foo != bar) # FIXME this appears to not work atm.
+ jmp (foo && bar) << 5
+ jmp (foo || bar) << 5
+
+ nop
+ nop
+ nop
+ nop
+
+ jmp %sizeof(.data) >> (((main ^ (bar + 0xf)) - ((foo | .text) << 2)) / 3)
+
+ nop
+ nop
+ nop
diff --git a/gas/testsuite/gas/mep/relocs-syms.s b/gas/testsuite/gas/mep/relocs-syms.s
new file mode 100644
index 000000000000..508efaf10327
--- /dev/null
+++ b/gas/testsuite/gas/mep/relocs-syms.s
@@ -0,0 +1,18 @@
+ .global foo
+ .global bar
+ nop
+ nop
+ nop
+ nop
+foo:
+ nop
+ nop
+ nop
+ nop
+bar:
+ nop
+ nop
+ nop
+ nop
+ nop
+ \ No newline at end of file
diff --git a/gas/testsuite/gas/mep/relocs.d b/gas/testsuite/gas/mep/relocs.d
new file mode 100644
index 000000000000..602545a316e5
--- /dev/null
+++ b/gas/testsuite/gas/mep/relocs.d
@@ -0,0 +1,98 @@
+
+relocs.x: file format elf32-mep
+
+Contents of section .text:
+ 1000 00000000 00000000 00000000 00000000 ................
+ 1010 00000000 00000000 00000000 00000000 ................
+ 1020 00000000 00000000 00000000 00000000 ................
+ 1030 0000c53c 1012dee9 ffffe509 ffec0000 ...<............
+ 1040 0000c53c efeedd49 ffdfe509 efd20000 ...<...I........
+ 1050 0000c53c 202cdeb9 000fe509 07e9dc88 ...< ,..........
+ 1060 0080d818 0002dfc8 7fffdf28 7fffdf78 ...........\(...x
+ 1070 7fffdd98 0001da98 000fdbf8 0070da58 .............p.X
+ 1080 0002d828 0000d848 0000d8d8 0010d898 ...\(...H........
+ 1090 0010d808 0000d908 0000d908 0000d808 ................
+ 10a0 0000d808 0000d908 0000d908 00000000 ................
+ 10b0 00000000 0000d808 00000000 00000000 ................
+Contents of section .rostacktab:
+ 10c0 001ffff0 ....
+Contents of section .data:
+ 11c4 0000002a ...*
+Disassembly of section .text:
+
+00001000 <junk1>:
+ 1000: 00 00 nop
+ 1002: 00 00 nop
+ 1004: 00 00 nop
+ 1006: 00 00 nop
+ 1008: 00 00 nop
+ 100a: 00 00 nop
+ 100c: 00 00 nop
+ 100e: 00 00 nop
+ 1010: 00 00 nop
+
+00001012 <foo>:
+ 1012: 00 00 nop
+ 1014: 00 00 nop
+ 1016: 00 00 nop
+ 1018: 00 00 nop
+
+0000101a <bar>:
+ 101a: 00 00 nop
+ 101c: 00 00 nop
+ 101e: 00 00 nop
+ 1020: 00 00 nop
+ 1022: 00 00 nop
+
+00001024 <junk2>:
+ 1024: 00 00 nop
+ 1026: 00 00 nop
+ 1028: 00 00 nop
+ 102a: 00 00 nop
+ 102c: 00 00 nop
+
+0000102e <main>:
+ 102e: 00 00 nop
+ 1030: 00 00 nop
+ 1032: c5 3c 10 12 lb \$5,4114\(\$3\)
+ 1036: de e9 ff ff bsr 1012 <&:s3:foo:s3:bar>
+ 103a: e5 09 ff ec repeat \$5,1012 <&:s3:foo:s3:bar>
+ 103e: 00 00 nop
+ 1040: 00 00 nop
+ 1042: c5 3c ef ee lb \$5,-4114\(\$3\)
+ 1046: dd 49 ff df bsr ffffefee <0-:s3:foo>
+ 104a: e5 09 ef d2 repeat \$5,ffffefee <0-:s3:foo>
+ 104e: 00 00 nop
+ 1050: 00 00 nop
+ 1052: c5 3c 20 2c lb \$5,8236\(\$3\)
+ 1056: de b9 00 0f bsr 202c <\+:s3:foo:s3:bar>
+ 105a: e5 09 07 e9 repeat \$5,202c <\+:s3:foo:s3:bar>
+ 105e: dc 88 00 80 jmp 8090 <<<:s3:foo:#00000003>
+ 1062: d8 18 00 02 jmp 202 <>>:s3:foo:#00000003>
+ 1066: df c8 7f ff jmp 7ffff8 <&:-:s3:foo:s3:bar:#007fffff>
+ 106a: df 28 7f ff jmp 7fffe4 <&:-:s3:foo:s4:main:#007fffff>
+ 106e: df 78 7f ff jmp 7fffee <&:-:S5:.text:s3:foo:#007fffff>
+ 1072: dd 98 00 01 jmp 1b2 <&:-:S5:.data:s3:foo:#007fffff>
+ 1076: da 98 00 0f jmp f52 <-:s3:foo:\+:s9:.text.end:0-:S5:.text>
+ 107a: db f8 00 70 jmp 707e <\*:s3:foo:#00000007>
+ 107e: da 58 00 02 jmp 24a <>>:s3:foo:#00000003\+0x48>
+ 1082: d8 28 00 00 jmp 4 <__assert_based_size\+0x3>
+ 1086: d8 48 00 00 jmp 8 <\^:s3:foo:s3:bar>
+ 108a: d8 d8 00 10 jmp 101a <|:s3:foo:s3:bar>
+ 108e: d8 98 00 10 jmp 1012 <&:s3:foo:s3:bar>
+ 1092: d8 08 00 00 jmp 0 <<<:==:s3:foo:s3:bar:#00000005>
+ 1096: d9 08 00 00 jmp 20 <<<:&&:s3:foo:s3:bar:#00000005>
+ 109a: d9 08 00 00 jmp 20 <<<:&&:s3:foo:s3:bar:#00000005>
+ 109e: d8 08 00 00 jmp 0 <<<:==:s3:foo:s3:bar:#00000005>
+ 10a2: d8 08 00 00 jmp 0 <<<:==:s3:foo:s3:bar:#00000005>
+ 10a6: d9 08 00 00 jmp 20 <<<:&&:s3:foo:s3:bar:#00000005>
+ 10aa: d9 08 00 00 jmp 20 <<<:&&:s3:foo:s3:bar:#00000005>
+ 10ae: 00 00 nop
+ 10b0: 00 00 nop
+ 10b2: 00 00 nop
+ 10b4: 00 00 nop
+ 10b6: d8 08 00 00 jmp 0 <<<:==:s3:foo:s3:bar:#00000005>
+ 10ba: 00 00 nop
+ 10bc: 00 00 nop
+ 10be: 00 00 nop
+#pass
diff --git a/gas/testsuite/gas/mips/cp0sel-names-mips32r2.d b/gas/testsuite/gas/mips/cp0sel-names-mips32r2.d
index 6f3660d4ca76..aa4c8a5e3d9c 100644
--- a/gas/testsuite/gas/mips/cp0sel-names-mips32r2.d
+++ b/gas/testsuite/gas/mips/cp0sel-names-mips32r2.d
@@ -8,27 +8,27 @@
.*: +file format .*mips.*
Disassembly of section .text:
-0+0000 <[^>]*> 40800001 mtc0 \$0,\$0,1
-0+0004 <[^>]*> 40800002 mtc0 \$0,\$0,2
-0+0008 <[^>]*> 40800003 mtc0 \$0,\$0,3
+0+0000 <[^>]*> 40800001 mtc0 \$0,c0_mvpcontrol
+0+0004 <[^>]*> 40800002 mtc0 \$0,c0_mvpconf0
+0+0008 <[^>]*> 40800003 mtc0 \$0,c0_mvpconf1
0+000c <[^>]*> 40800004 mtc0 \$0,\$0,4
0+0010 <[^>]*> 40800005 mtc0 \$0,\$0,5
0+0014 <[^>]*> 40800006 mtc0 \$0,\$0,6
0+0018 <[^>]*> 40800007 mtc0 \$0,\$0,7
-0+001c <[^>]*> 40800801 mtc0 \$0,\$1,1
-0+0020 <[^>]*> 40800802 mtc0 \$0,\$1,2
-0+0024 <[^>]*> 40800803 mtc0 \$0,\$1,3
-0+0028 <[^>]*> 40800804 mtc0 \$0,\$1,4
-0+002c <[^>]*> 40800805 mtc0 \$0,\$1,5
-0+0030 <[^>]*> 40800806 mtc0 \$0,\$1,6
+0+001c <[^>]*> 40800801 mtc0 \$0,c0_vpecontrol
+0+0020 <[^>]*> 40800802 mtc0 \$0,c0_vpeconf0
+0+0024 <[^>]*> 40800803 mtc0 \$0,c0_vpeconf1
+0+0028 <[^>]*> 40800804 mtc0 \$0,c0_yqmask
+0+002c <[^>]*> 40800805 mtc0 \$0,c0_vpeschedule
+0+0030 <[^>]*> 40800806 mtc0 \$0,c0_vpeschefback
0+0034 <[^>]*> 40800807 mtc0 \$0,\$1,7
-0+0038 <[^>]*> 40801001 mtc0 \$0,\$2,1
-0+003c <[^>]*> 40801002 mtc0 \$0,\$2,2
-0+0040 <[^>]*> 40801003 mtc0 \$0,\$2,3
-0+0044 <[^>]*> 40801004 mtc0 \$0,\$2,4
-0+0048 <[^>]*> 40801005 mtc0 \$0,\$2,5
-0+004c <[^>]*> 40801006 mtc0 \$0,\$2,6
-0+0050 <[^>]*> 40801007 mtc0 \$0,\$2,7
+0+0038 <[^>]*> 40801001 mtc0 \$0,c0_tcstatus
+0+003c <[^>]*> 40801002 mtc0 \$0,c0_tcbind
+0+0040 <[^>]*> 40801003 mtc0 \$0,c0_tcrestart
+0+0044 <[^>]*> 40801004 mtc0 \$0,c0_tchalt
+0+0048 <[^>]*> 40801005 mtc0 \$0,c0_tccontext
+0+004c <[^>]*> 40801006 mtc0 \$0,c0_tcschedule
+0+0050 <[^>]*> 40801007 mtc0 \$0,c0_tcschefback
0+0054 <[^>]*> 40801801 mtc0 \$0,\$3,1
0+0058 <[^>]*> 40801802 mtc0 \$0,\$3,2
0+005c <[^>]*> 40801803 mtc0 \$0,\$3,3
@@ -50,11 +50,11 @@ Disassembly of section .text:
0+009c <[^>]*> 40802805 mtc0 \$0,\$5,5
0+00a0 <[^>]*> 40802806 mtc0 \$0,\$5,6
0+00a4 <[^>]*> 40802807 mtc0 \$0,\$5,7
-0+00a8 <[^>]*> 40803001 mtc0 \$0,\$6,1
-0+00ac <[^>]*> 40803002 mtc0 \$0,\$6,2
-0+00b0 <[^>]*> 40803003 mtc0 \$0,\$6,3
-0+00b4 <[^>]*> 40803004 mtc0 \$0,\$6,4
-0+00b8 <[^>]*> 40803005 mtc0 \$0,\$6,5
+0+00a8 <[^>]*> 40803001 mtc0 \$0,c0_srsconf0
+0+00ac <[^>]*> 40803002 mtc0 \$0,c0_srsconf1
+0+00b0 <[^>]*> 40803003 mtc0 \$0,c0_srsconf2
+0+00b4 <[^>]*> 40803004 mtc0 \$0,c0_srsconf3
+0+00b8 <[^>]*> 40803005 mtc0 \$0,c0_srsconf4
0+00bc <[^>]*> 40803006 mtc0 \$0,\$6,6
0+00c0 <[^>]*> 40803007 mtc0 \$0,\$6,7
0+00c4 <[^>]*> 40803801 mtc0 \$0,\$7,1
diff --git a/gas/testsuite/gas/mips/cp0sel-names-mips64r2.d b/gas/testsuite/gas/mips/cp0sel-names-mips64r2.d
index 9222800a67be..22aa180ee235 100644
--- a/gas/testsuite/gas/mips/cp0sel-names-mips64r2.d
+++ b/gas/testsuite/gas/mips/cp0sel-names-mips64r2.d
@@ -8,27 +8,27 @@
.*: +file format .*mips.*
Disassembly of section .text:
-0+0000 <[^>]*> 40800001 mtc0 \$0,\$0,1
-0+0004 <[^>]*> 40800002 mtc0 \$0,\$0,2
-0+0008 <[^>]*> 40800003 mtc0 \$0,\$0,3
+0+0000 <[^>]*> 40800001 mtc0 \$0,c0_mvpcontrol
+0+0004 <[^>]*> 40800002 mtc0 \$0,c0_mvpconf0
+0+0008 <[^>]*> 40800003 mtc0 \$0,c0_mvpconf1
0+000c <[^>]*> 40800004 mtc0 \$0,\$0,4
0+0010 <[^>]*> 40800005 mtc0 \$0,\$0,5
0+0014 <[^>]*> 40800006 mtc0 \$0,\$0,6
0+0018 <[^>]*> 40800007 mtc0 \$0,\$0,7
-0+001c <[^>]*> 40800801 mtc0 \$0,\$1,1
-0+0020 <[^>]*> 40800802 mtc0 \$0,\$1,2
-0+0024 <[^>]*> 40800803 mtc0 \$0,\$1,3
-0+0028 <[^>]*> 40800804 mtc0 \$0,\$1,4
-0+002c <[^>]*> 40800805 mtc0 \$0,\$1,5
-0+0030 <[^>]*> 40800806 mtc0 \$0,\$1,6
+0+001c <[^>]*> 40800801 mtc0 \$0,c0_vpecontrol
+0+0020 <[^>]*> 40800802 mtc0 \$0,c0_vpeconf0
+0+0024 <[^>]*> 40800803 mtc0 \$0,c0_vpeconf1
+0+0028 <[^>]*> 40800804 mtc0 \$0,c0_yqmask
+0+002c <[^>]*> 40800805 mtc0 \$0,c0_vpeschedule
+0+0030 <[^>]*> 40800806 mtc0 \$0,c0_vpeschefback
0+0034 <[^>]*> 40800807 mtc0 \$0,\$1,7
-0+0038 <[^>]*> 40801001 mtc0 \$0,\$2,1
-0+003c <[^>]*> 40801002 mtc0 \$0,\$2,2
-0+0040 <[^>]*> 40801003 mtc0 \$0,\$2,3
-0+0044 <[^>]*> 40801004 mtc0 \$0,\$2,4
-0+0048 <[^>]*> 40801005 mtc0 \$0,\$2,5
-0+004c <[^>]*> 40801006 mtc0 \$0,\$2,6
-0+0050 <[^>]*> 40801007 mtc0 \$0,\$2,7
+0+0038 <[^>]*> 40801001 mtc0 \$0,c0_tcstatus
+0+003c <[^>]*> 40801002 mtc0 \$0,c0_tcbind
+0+0040 <[^>]*> 40801003 mtc0 \$0,c0_tcrestart
+0+0044 <[^>]*> 40801004 mtc0 \$0,c0_tchalt
+0+0048 <[^>]*> 40801005 mtc0 \$0,c0_tccontext
+0+004c <[^>]*> 40801006 mtc0 \$0,c0_tcschedule
+0+0050 <[^>]*> 40801007 mtc0 \$0,c0_tcschefback
0+0054 <[^>]*> 40801801 mtc0 \$0,\$3,1
0+0058 <[^>]*> 40801802 mtc0 \$0,\$3,2
0+005c <[^>]*> 40801803 mtc0 \$0,\$3,3
@@ -50,11 +50,11 @@ Disassembly of section .text:
0+009c <[^>]*> 40802805 mtc0 \$0,\$5,5
0+00a0 <[^>]*> 40802806 mtc0 \$0,\$5,6
0+00a4 <[^>]*> 40802807 mtc0 \$0,\$5,7
-0+00a8 <[^>]*> 40803001 mtc0 \$0,\$6,1
-0+00ac <[^>]*> 40803002 mtc0 \$0,\$6,2
-0+00b0 <[^>]*> 40803003 mtc0 \$0,\$6,3
-0+00b4 <[^>]*> 40803004 mtc0 \$0,\$6,4
-0+00b8 <[^>]*> 40803005 mtc0 \$0,\$6,5
+0+00a8 <[^>]*> 40803001 mtc0 \$0,c0_srsconf0
+0+00ac <[^>]*> 40803002 mtc0 \$0,c0_srsconf1
+0+00b0 <[^>]*> 40803003 mtc0 \$0,c0_srsconf2
+0+00b4 <[^>]*> 40803004 mtc0 \$0,c0_srsconf3
+0+00b8 <[^>]*> 40803005 mtc0 \$0,c0_srsconf4
0+00bc <[^>]*> 40803006 mtc0 \$0,\$6,6
0+00c0 <[^>]*> 40803007 mtc0 \$0,\$6,7
0+00c4 <[^>]*> 40803801 mtc0 \$0,\$7,1
diff --git a/gas/testsuite/gas/mips/e32-rel2.d b/gas/testsuite/gas/mips/e32-rel2.d
index 3983c7fd6f91..a43fd33059a5 100644
--- a/gas/testsuite/gas/mips/e32-rel2.d
+++ b/gas/testsuite/gas/mips/e32-rel2.d
@@ -1,5 +1,6 @@
#objdump: -sr -j .text
#name: MIPS ELF reloc 2 (32-bit)
+#as: -mabi=32
#source: elf-rel2.s
# Test the GPREL and LITERAL generation.
diff --git a/gas/testsuite/gas/mips/e32-rel4.d b/gas/testsuite/gas/mips/e32-rel4.d
index 81ae4e7fc1b2..35deea45efca 100644
--- a/gas/testsuite/gas/mips/e32-rel4.d
+++ b/gas/testsuite/gas/mips/e32-rel4.d
@@ -1,5 +1,6 @@
#objdump: --prefix-addresses -dr
-#name: MIPS ELF reloc 4
+#name: MIPS ELF reloc 4 (32-bit)
+#as: -mabi=32
#source: elf-rel4.s
.*: +file format.*
diff --git a/gas/testsuite/gas/mips/elf-rel26.d b/gas/testsuite/gas/mips/elf-rel26.d
new file mode 100644
index 000000000000..d176acbf52c2
--- /dev/null
+++ b/gas/testsuite/gas/mips/elf-rel26.d
@@ -0,0 +1,22 @@
+#as: -mips32 -EL -KPIC
+#readelf: --relocs
+#name: MIPS ELF reloc 26
+
+Relocation section '\.rel\.pdr' .*
+ *Offset.*
+00.*
+
+Relocation section '\.rel\.text\.foo' at offset .* contains 11 entries:
+ *Offset * Info * Type * Sym\.Value * Sym\. Name
+0+000 * .+ * R_MIPS_HI16 * 0+0 * _gp_disp
+0+004 * .+ * R_MIPS_LO16 * 0+0 * _gp_disp
+0+014 * .+ * R_MIPS_GOT16 * 0+0 * \$LC28
+0+01c * .+ * R_MIPS_LO16 * 0+0 * \$LC28
+0+020 * .+ * R_MIPS_CALL16 * 0+0 * bar
+0+030 * .+ * R_MIPS_PC16 * 0+0 * \$L846
+0+034 * .+ * R_MIPS_GOT16 * 0+0 * \$LC27
+0+038 * .+ * R_MIPS_PC16 * 0+0 * \$L848
+0+048 * .+ * R_MIPS_PC16 * 0+0 * \$L925
+0+010 * .+ * R_MIPS_GOT16 * 0+0 * \.rodata\.foo
+0+05c * .+ * R_MIPS_LO16 * 0+0 * \.rodata\.foo
+#pass
diff --git a/gas/testsuite/gas/mips/elf-rel26.s b/gas/testsuite/gas/mips/elf-rel26.s
new file mode 100644
index 000000000000..ed6984a169e0
--- /dev/null
+++ b/gas/testsuite/gas/mips/elf-rel26.s
@@ -0,0 +1,62 @@
+ .section .text.foo,"axG",@progbits,foo,comdat
+ .align 2
+ .weak foo
+ .ent foo
+ .type foo, @function
+foo:
+$LFB308:
+ .frame $fp,136,$31 # vars= 72, regs= 10/0, args= 16, gp= 8
+ .mask 0xc0ff0000,-4
+ .fmask 0x00000000,0
+ .set noreorder
+ .cpload $25
+
+ .set nomacro
+ bne $3,$0,$L924
+ lw $25,%got($L874)($28)
+ .set macro
+ .set reorder
+ lw $5,%got($LC28)($28)
+ lw $4,136($fp)
+ addiu $5,$5,%lo($LC28)
+ lw $25,%call16(bar)($28)
+ .set noreorder
+ .set nomacro
+ jalr $25
+ li $6,-1 # 0xffffffffffffffff
+ .set macro
+ .set reorder
+ lw $25,64($fp)
+ .set noreorder
+ .set nomacro
+ bne $25,$0,$L846
+ lw $5,%got($LC27)($28)
+ b $L848
+ sw $0,68($fp)
+ .set macro
+ .set reorder
+$L920:
+ lb $3,0($18)
+ li $2,59 # 0x3b
+ .set noreorder
+ .set nomacro
+ beq $3,$2,$L925
+ lw $25,76($fp)
+ b $L920
+ addiu $18,$18,1
+ .set macro
+ .set reorder
+
+$L924:
+ sll $2,$2,2
+ addiu $25,$25,%lo($L874)
+ addu $2,$2,$25
+ lw $3,0($2)
+ addu $3,$3,$28
+ j $3
+ .end foo
+ .section .rodata.foo,"aG",@progbits,foo,comdat
+ .align 2
+ .align 2
+$L874:
+ .gpword $L924
diff --git a/gas/testsuite/gas/mips/elf-rel6-n32.d b/gas/testsuite/gas/mips/elf-rel6-n32.d
new file mode 100644
index 000000000000..258fcf656b67
--- /dev/null
+++ b/gas/testsuite/gas/mips/elf-rel6-n32.d
@@ -0,0 +1,16 @@
+#objdump: -dr --prefix-addresses
+#name: MIPS ELF reloc 6 n32
+#as: -mabi=n32 -march=mips64
+#source: elf-rel6.s
+
+.*: +file format elf.*mips.*
+
+Disassembly of section \.text:
+0+00 <.*> lb v0,0\(v1\)
+ 0: R_MIPS16_GPREL bar
+0+04 <.*> lb v0,0\(v1\)
+ 4: R_MIPS16_GPREL bar\+0x1
+0+08 <.*> lb v0,0\(v1\)
+ 8: R_MIPS16_GPREL bar\+0x1234
+0+0c <[^>]*> nop
+0+0e <[^>]*> nop
diff --git a/gas/testsuite/gas/mips/elf-rel6-n64.d b/gas/testsuite/gas/mips/elf-rel6-n64.d
new file mode 100644
index 000000000000..d65b10ab3133
--- /dev/null
+++ b/gas/testsuite/gas/mips/elf-rel6-n64.d
@@ -0,0 +1,22 @@
+#objdump: -dr --prefix-addresses
+#name: MIPS ELF reloc 6 n64
+#as: -mabi=64 -march=mips64
+#source: elf-rel6.s
+
+.*: +file format elf.*mips.*
+
+Disassembly of section \.text:
+0+00 <.*> lb v0,0\(v1\)
+ 0: R_MIPS16_GPREL bar
+ 0: R_MIPS_NONE \*ABS\*
+ 0: R_MIPS_NONE \*ABS\*
+0+04 <.*> lb v0,0\(v1\)
+ 4: R_MIPS16_GPREL bar\+0x1
+ 4: R_MIPS_NONE \*ABS\*\+0x1
+ 4: R_MIPS_NONE \*ABS\*\+0x1
+0+08 <.*> lb v0,0\(v1\)
+ 8: R_MIPS16_GPREL bar\+0x1234
+ 8: R_MIPS_NONE \*ABS\*\+0x1234
+ 8: R_MIPS_NONE \*ABS\*\+0x1234
+0+0c <[^>]*> nop
+0+0e <[^>]*> nop
diff --git a/gas/testsuite/gas/mips/elf-rel6.d b/gas/testsuite/gas/mips/elf-rel6.d
index 85efe9d0aed0..cea8d7fd81b9 100644
--- a/gas/testsuite/gas/mips/elf-rel6.d
+++ b/gas/testsuite/gas/mips/elf-rel6.d
@@ -9,7 +9,7 @@ Disassembly of section \.text:
0: R_MIPS16_GPREL bar
0+04 <.*> lb v0,1\(v1\)
4: R_MIPS16_GPREL bar
-0+08 <[^>]*> nop
-0+0a <[^>]*> nop
+0+08 <.*> lb v0,4660\(v1\)
+ 8: R_MIPS16_GPREL bar
0+0c <[^>]*> nop
0+0e <[^>]*> nop
diff --git a/gas/testsuite/gas/mips/elf-rel6.s b/gas/testsuite/gas/mips/elf-rel6.s
index 6735d7555fad..34c3a84b6ff8 100644
--- a/gas/testsuite/gas/mips/elf-rel6.s
+++ b/gas/testsuite/gas/mips/elf-rel6.s
@@ -13,6 +13,7 @@ bar: .byte 3
f:
lb $2,%gprel(bar)($3)
lb $2,%gprel(bar+1)($3)
+ lb $2,%gprel(bar+0x1234)($3)
.end f
# align section end to 16-byte boundary for easier testing on multiple targets
diff --git a/gas/testsuite/gas/mips/mips-gp32-fp64-pic.d b/gas/testsuite/gas/mips/mips-gp32-fp64-pic.d
index 52c1701bd411..3ebbe3f4cf4c 100644
--- a/gas/testsuite/gas/mips/mips-gp32-fp64-pic.d
+++ b/gas/testsuite/gas/mips/mips-gp32-fp64-pic.d
@@ -1,6 +1,7 @@
#objdump: -d -mmips:8000
#as: -32 -march=8000 -EB -mgp32 -mfp64 -KPIC
#name: MIPS -mgp32 -mfp64 (SVR4 PIC)
+#stderr: mips-gp32-fp64.l
.*: +file format.*
diff --git a/gas/testsuite/gas/mips/mips-gp32-fp64.d b/gas/testsuite/gas/mips/mips-gp32-fp64.d
index b266f702f6d4..8fcd56380fa8 100644
--- a/gas/testsuite/gas/mips/mips-gp32-fp64.d
+++ b/gas/testsuite/gas/mips/mips-gp32-fp64.d
@@ -1,6 +1,7 @@
#objdump: -d -mmips:8000
#as: -32 -march=8000 -EB -mgp32 -mfp64
#name: MIPS -mgp32 -mfp64
+#stderr: mips-gp32-fp64.l
.*: +file format.*
diff --git a/gas/testsuite/gas/mips/mips-gp32-fp64.l b/gas/testsuite/gas/mips/mips-gp32-fp64.l
new file mode 100644
index 000000000000..de3f3b06ce28
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips-gp32-fp64.l
@@ -0,0 +1,2 @@
+Assembler messages:
+Warning: -mfp64 used with a 32-bit ABI
diff --git a/gas/testsuite/gas/mips/mips-gp64-fp32-pic.d b/gas/testsuite/gas/mips/mips-gp64-fp32-pic.d
index f5a8e8963942..52fe8afd013a 100644
--- a/gas/testsuite/gas/mips/mips-gp64-fp32-pic.d
+++ b/gas/testsuite/gas/mips/mips-gp64-fp32-pic.d
@@ -1,6 +1,7 @@
#objdump: -d -mmips:8000
#as: -mabi=o64 -march=8000 -EB -mfp32 -KPIC
#name: MIPS -mgp64 -mfp32 (SVR4 PIC)
+#stderr: mips-gp64-fp32-pic.l
.*: +file format.*
diff --git a/gas/testsuite/gas/mips/mips-gp64-fp32-pic.l b/gas/testsuite/gas/mips/mips-gp64-fp32-pic.l
new file mode 100644
index 000000000000..2d3730301237
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips-gp64-fp32-pic.l
@@ -0,0 +1,2 @@
+Assembler messages:
+Warning: -mfp32 used with a 64-bit ABI
diff --git a/gas/testsuite/gas/mips/mips-gp64-fp32.l b/gas/testsuite/gas/mips/mips-gp64-fp32.l
index 4f26b42dce1a..3668a25e3b20 100644
--- a/gas/testsuite/gas/mips/mips-gp64-fp32.l
+++ b/gas/testsuite/gas/mips/mips-gp64-fp32.l
@@ -1,4 +1,5 @@
-.*: Assembler messages:
+Assembler messages:
+Warning: -mfp32 used with a 64-bit ABI
.*:92: Warning: Macro instruction expanded into multiple instructions in a branch delay slot
.*:96: Warning: Macro instruction expanded into multiple instructions in a branch delay slot
.*:100: Warning: Macro instruction expanded into multiple instructions in a branch delay slot
diff --git a/gas/testsuite/gas/mips/mips-gp64-fp64.d b/gas/testsuite/gas/mips/mips-gp64-fp64.d
index bf3e44f84f0e..3e1bfd5d5b8e 100644
--- a/gas/testsuite/gas/mips/mips-gp64-fp64.d
+++ b/gas/testsuite/gas/mips/mips-gp64-fp64.d
@@ -1,7 +1,7 @@
#objdump: -d -mmips:8000
#as: -mabi=o64 -march=8000 -EB
#name: MIPS -mgp64 -mfp64
-#stderr: mips-gp64-fp32.l
+#stderr: mips-gp64-fp64.l
.*: +file format.*
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index 7843f2a9742b..523a7738242a 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -292,27 +292,6 @@ proc run_dump_test_arches { name arch_list } {
}
}
-# run_list_test NAME OPTS (optional): TESTNAME
-#
-# Assemble the file "NAME.d" and compare the assembler standard error
-# output against the regular expressions given in the file "NAME.l".
-# The assembler is passed the flags given in OPTS. If TESTNAME is
-# provided, it will be used as the name of the test.
-proc run_list_test { name opts {testname {}} } {
- global srcdir subdir
- if { [string length $testname] == 0 } then {
- set testname "MIPS $name"
- }
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
# run_list_test_arch NAME OPTS ARCH
#
# Invoke "run_list_test" for test NAME with options OPTS, with extra
@@ -390,6 +369,8 @@ mips_arch_create sb1 64 mips64 { mips3d } \
if { [istarget mips*-*-vxworks*] } {
run_dump_test "vxworks1"
run_dump_test "vxworks1-xgot"
+ run_dump_test "vxworks1-el"
+ run_dump_test "vxworks1-xgot-el"
} elseif { [istarget mips*-*-*] } {
set no_mips16 0
set elf [expr [istarget *-*-elf*] || [istarget *-*-irix5*] || [istarget *-*-irix6* ] || [istarget *-*-linux*] || [istarget *-*-netbsd*] ]
@@ -400,7 +381,7 @@ if { [istarget mips*-*-vxworks*] } {
set addr32 [expr [istarget mipstx39*-*-*] || [istarget mips-*-linux*] || [istarget mipsel-*-linux*]]
set has_newabi [expr [istarget *-*-irix6*] || [istarget mips64*-*-linux*]]
- if { [istarget "mips*-*-*linux*"] } then {
+ if { [istarget "mips*-*-*linux*"] || [istarget "mips*-sde-elf*"] } then {
set tmips "t"
} else {
set tmips ""
@@ -531,6 +512,8 @@ if { [istarget mips*-*-vxworks*] } {
if { $elf && !$no_mips16 } {
run_dump_test "mips16"
run_dump_test "mips16-64"
+ # Check MIPS16e extensions
+ run_dump_test_arches "mips16e" [mips_arch_list_matching mips32]
# Check jalx handling
run_dump_test "mips16-jalx"
run_dump_test "mips-jalx"
@@ -559,6 +542,8 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test_arches "mips32" [mips_arch_list_matching mips32]
+ run_dump_test_arches "mips32-sf32" [mips_arch_list_matching mips32]
+
run_dump_test_arches "mips32r2" [mips_arch_list_matching mips32r2]
run_list_test_arches "mips32r2-ill" "-32" \
[mips_arch_list_matching mips32r2 gpr32]
@@ -633,20 +618,17 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test "mips-abi32-pic2"
run_dump_test "elf${el}-rel"
- if {[istarget mips64*-*-*] || [istarget mipsisa32*-*-*]
- || [istarget mipsisa64*-*-*]} {
- run_dump_test "elf${el}-rel2"
- } else {
- run_dump_test "e32${el}-rel2"
- }
+ run_dump_test_arches "elf${el}-rel2" [mips_arch_list_matching gpr64]
+ run_dump_test "e32${el}-rel2"
run_dump_test "elf${el}-rel3"
- if {[istarget mips64*-*-*]} {
- run_dump_test "elf-rel4"
- } else {
- run_dump_test "e32-rel4"
- }
+ run_dump_test_arches "elf-rel4" [mips_arch_list_matching gpr64]
+ run_dump_test "e32-rel4"
run_dump_test "elf-rel5"
run_dump_test "elf-rel6"
+ if $has_newabi {
+ run_dump_test "elf-rel6-n32"
+ run_dump_test "elf-rel6-n64"
+ }
run_dump_test "elf-rel7"
run_dump_test "elf-rel8"
run_dump_test "elf-rel9"
@@ -684,6 +666,7 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test "elf-rel25"
run_dump_test "elf-rel25a"
+ run_dump_test "elf-rel26"
if { !$no_mips16 } {
run_dump_test "${tmips}mips${el}16-e"
@@ -766,7 +749,10 @@ if { [istarget mips*-*-vxworks*] } {
run_list_test "noat-6" ""
run_list_test "noat-7" ""
- run_dump_test_arches "mips32-dsp" [mips_arch_list_matching mips32 !sb1]
+ run_dump_test_arches "smartmips" [mips_arch_list_matching mips32 !gpr64]
+ run_dump_test_arches "mips32-dsp" [mips_arch_list_matching mips32r2]
+ run_dump_test_arches "mips32-dspr2" [mips_arch_list_matching mips32r2]
+ run_dump_test_arches "mips64-dsp" [mips_arch_list_matching mips64r2]
run_dump_test_arches "mips32-mt" [mips_arch_list_matching mips32r2 !gpr64]
if { $elf && !$no_mips16 } {
@@ -778,7 +764,14 @@ if { [istarget mips*-*-vxworks*] } {
if { !$no_mips16 } {
run_dump_test "mips16e-jrc"
run_dump_test "mips16e-save"
+ run_dump_test "mips16e-64"
+ run_list_test "mips16e-64" "-march=mips32 -32"
+ run_dump_test "mips16-intermix"
}
run_dump_test "vxworks1"
run_dump_test "vxworks1-xgot"
+ run_dump_test "vxworks1-el"
+ run_dump_test "vxworks1-xgot-el"
+
+ run_dump_test "noreorder"
}
diff --git a/gas/testsuite/gas/mips/mips16-intermix.d b/gas/testsuite/gas/mips/mips16-intermix.d
new file mode 100644
index 000000000000..9b541eefebcf
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-intermix.d
@@ -0,0 +1,164 @@
+#objdump: -t
+#as: -mips32r2
+#name: MIPS16 intermix
+
+.*: +file format .*mips.*
+
+SYMBOL TABLE:
+#...
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static1_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static1_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static32_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static32_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static16_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static16_l
+0+[0-9a-f]+ l d .mips16.fn.m16_d 0+[0-9a-f]+ .mips16.fn.m16_d
+0+[0-9a-f]+ l F .mips16.fn.m16_d 0+[0-9a-f]+ __fn_stub_m16_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static_d
+0+[0-9a-f]+ l d .mips16.fn.m16_static_d 0+[0-9a-f]+ .mips16.fn.m16_static_d
+0+[0-9a-f]+ l F .mips16.fn.m16_static_d 0+[0-9a-f]+ __fn_stub_m16_static_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static1_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static1_d
+0+[0-9a-f]+ l d .mips16.fn.m16_static1_d 0+[0-9a-f]+ .mips16.fn.m16_static1_d
+0+[0-9a-f]+ l F .mips16.fn.m16_static1_d 0+[0-9a-f]+ __fn_stub_m16_static1_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static32_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static32_d
+0+[0-9a-f]+ l d .mips16.fn.m16_static32_d 0+[0-9a-f]+ .mips16.fn.m16_static32_d
+0+[0-9a-f]+ l F .mips16.fn.m16_static32_d 0+[0-9a-f]+ __fn_stub_m16_static32_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static16_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static16_d
+0+[0-9a-f]+ l d .mips16.fn.m16_static16_d 0+[0-9a-f]+ .mips16.fn.m16_static16_d
+0+[0-9a-f]+ l F .mips16.fn.m16_static16_d 0+[0-9a-f]+ __fn_stub_m16_static16_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static_ld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static_ld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static1_ld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static1_ld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static32_ld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static32_ld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static16_ld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static16_ld
+0+[0-9a-f]+ l d .mips16.fn.m16_dl 0+[0-9a-f]+ .mips16.fn.m16_dl
+0+[0-9a-f]+ l F .mips16.fn.m16_dl 0+[0-9a-f]+ __fn_stub_m16_dl
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static_dl
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static_dl
+0+[0-9a-f]+ l d .mips16.fn.m16_static_dl 0+[0-9a-f]+ .mips16.fn.m16_static_dl
+0+[0-9a-f]+ l F .mips16.fn.m16_static_dl 0+[0-9a-f]+ __fn_stub_m16_static_dl
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static1_dl
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static1_dl
+0+[0-9a-f]+ l d .mips16.fn.m16_static1_dl 0+[0-9a-f]+ .mips16.fn.m16_static1_dl
+0+[0-9a-f]+ l F .mips16.fn.m16_static1_dl 0+[0-9a-f]+ __fn_stub_m16_static1_dl
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static32_dl
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static32_dl
+0+[0-9a-f]+ l d .mips16.fn.m16_static32_dl 0+[0-9a-f]+ .mips16.fn.m16_static32_dl
+0+[0-9a-f]+ l F .mips16.fn.m16_static32_dl 0+[0-9a-f]+ __fn_stub_m16_static32_dl
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static16_dl
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static16_dl
+0+[0-9a-f]+ l d .mips16.fn.m16_static16_dl 0+[0-9a-f]+ .mips16.fn.m16_static16_dl
+0+[0-9a-f]+ l F .mips16.fn.m16_static16_dl 0+[0-9a-f]+ __fn_stub_m16_static16_dl
+0+[0-9a-f]+ l d .mips16.fn.m16_dlld 0+[0-9a-f]+ .mips16.fn.m16_dlld
+0+[0-9a-f]+ l F .mips16.fn.m16_dlld 0+[0-9a-f]+ __fn_stub_m16_dlld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static_dlld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static_dlld
+0+[0-9a-f]+ l d .mips16.fn.m16_static_dlld 0+[0-9a-f]+ .mips16.fn.m16_static_dlld
+0+[0-9a-f]+ l F .mips16.fn.m16_static_dlld 0+[0-9a-f]+ __fn_stub_m16_static_dlld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static1_dlld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static1_dlld
+0+[0-9a-f]+ l d .mips16.fn.m16_static1_dlld 0+[0-9a-f]+ .mips16.fn.m16_static1_dlld
+0+[0-9a-f]+ l F .mips16.fn.m16_static1_dlld 0+[0-9a-f]+ __fn_stub_m16_static1_dlld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static32_dlld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static32_dlld
+0+[0-9a-f]+ l d .mips16.fn.m16_static32_dlld 0+[0-9a-f]+ .mips16.fn.m16_static32_dlld
+0+[0-9a-f]+ l F .mips16.fn.m16_static32_dlld 0+[0-9a-f]+ __fn_stub_m16_static32_dlld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static16_dlld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static16_dlld
+0+[0-9a-f]+ l d .mips16.fn.m16_static16_dlld 0+[0-9a-f]+ .mips16.fn.m16_static16_dlld
+0+[0-9a-f]+ l F .mips16.fn.m16_static16_dlld 0+[0-9a-f]+ __fn_stub_m16_static16_dlld
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static_d_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static_d_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static1_d_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static1_d_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static32_d_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static32_d_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static16_d_l
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static16_d_l
+0+[0-9a-f]+ l d .mips16.fn.m16_d_d 0+[0-9a-f]+ .mips16.fn.m16_d_d
+0+[0-9a-f]+ l F .mips16.fn.m16_d_d 0+[0-9a-f]+ __fn_stub_m16_d_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static_d_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static_d_d
+0+[0-9a-f]+ l d .mips16.fn.m16_static_d_d 0+[0-9a-f]+ .mips16.fn.m16_static_d_d
+0+[0-9a-f]+ l F .mips16.fn.m16_static_d_d 0+[0-9a-f]+ __fn_stub_m16_static_d_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static1_d_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static1_d_d
+0+[0-9a-f]+ l d .mips16.fn.m16_static1_d_d 0+[0-9a-f]+ .mips16.fn.m16_static1_d_d
+0+[0-9a-f]+ l F .mips16.fn.m16_static1_d_d 0+[0-9a-f]+ __fn_stub_m16_static1_d_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static32_d_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static32_d_d
+0+[0-9a-f]+ l d .mips16.fn.m16_static32_d_d 0+[0-9a-f]+ .mips16.fn.m16_static32_d_d
+0+[0-9a-f]+ l F .mips16.fn.m16_static32_d_d 0+[0-9a-f]+ __fn_stub_m16_static32_d_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ m32_static16_d_d
+0+[0-9a-f]+ l F .text 0+[0-9a-f]+ 0xf0 m16_static16_d_d
+0+[0-9a-f]+ l d .mips16.fn.m16_static16_d_d 0+[0-9a-f]+ .mips16.fn.m16_static16_d_d
+0+[0-9a-f]+ l F .mips16.fn.m16_static16_d_d 0+[0-9a-f]+ __fn_stub_m16_static16_d_d
+0+[0-9a-f]+ l d .mips16.call.m32_static1_d 0+[0-9a-f]+ .mips16.call.m32_static1_d
+0+[0-9a-f]+ l F .mips16.call.m32_static1_d 0+[0-9a-f]+ __call_stub_m32_static1_d
+0+[0-9a-f]+ l d .mips16.call.m16_static1_d 0+[0-9a-f]+ .mips16.call.m16_static1_d
+0+[0-9a-f]+ l F .mips16.call.m16_static1_d 0+[0-9a-f]+ __call_stub_m16_static1_d
+0+[0-9a-f]+ l d .mips16.call.m32_static1_dl 0+[0-9a-f]+ .mips16.call.m32_static1_dl
+0+[0-9a-f]+ l F .mips16.call.m32_static1_dl 0+[0-9a-f]+ __call_stub_m32_static1_dl
+0+[0-9a-f]+ l d .mips16.call.m16_static1_dl 0+[0-9a-f]+ .mips16.call.m16_static1_dl
+0+[0-9a-f]+ l F .mips16.call.m16_static1_dl 0+[0-9a-f]+ __call_stub_m16_static1_dl
+0+[0-9a-f]+ l d .mips16.call.m32_static1_dlld 0+[0-9a-f]+ .mips16.call.m32_static1_dlld
+0+[0-9a-f]+ l F .mips16.call.m32_static1_dlld 0+[0-9a-f]+ __call_stub_m32_static1_dlld
+0+[0-9a-f]+ l d .mips16.call.m16_static1_dlld 0+[0-9a-f]+ .mips16.call.m16_static1_dlld
+0+[0-9a-f]+ l F .mips16.call.m16_static1_dlld 0+[0-9a-f]+ __call_stub_m16_static1_dlld
+0+[0-9a-f]+ l d .mips16.call.fp.m32_static1_d_l 0+[0-9a-f]+ .mips16.call.fp.m32_static1_d_l
+0+[0-9a-f]+ l F .mips16.call.fp.m32_static1_d_l 0+[0-9a-f]+ __call_stub_fp_m32_static1_d_l
+0+[0-9a-f]+ l d .mips16.call.fp.m16_static1_d_l 0+[0-9a-f]+ .mips16.call.fp.m16_static1_d_l
+0+[0-9a-f]+ l F .mips16.call.fp.m16_static1_d_l 0+[0-9a-f]+ __call_stub_fp_m16_static1_d_l
+0+[0-9a-f]+ l d .mips16.call.fp.m32_static1_d_d 0+[0-9a-f]+ .mips16.call.fp.m32_static1_d_d
+0+[0-9a-f]+ l F .mips16.call.fp.m32_static1_d_d 0+[0-9a-f]+ __call_stub_fp_m32_static1_d_d
+0+[0-9a-f]+ l d .mips16.call.fp.m16_static1_d_d 0+[0-9a-f]+ .mips16.call.fp.m16_static1_d_d
+0+[0-9a-f]+ l F .mips16.call.fp.m16_static1_d_d 0+[0-9a-f]+ __call_stub_fp_m16_static1_d_d
+0+[0-9a-f]+ l d .mips16.call.m32_static16_d 0+[0-9a-f]+ .mips16.call.m32_static16_d
+0+[0-9a-f]+ l F .mips16.call.m32_static16_d 0+[0-9a-f]+ __call_stub_m32_static16_d
+0+[0-9a-f]+ l d .mips16.call.m16_static16_d 0+[0-9a-f]+ .mips16.call.m16_static16_d
+0+[0-9a-f]+ l F .mips16.call.m16_static16_d 0+[0-9a-f]+ __call_stub_m16_static16_d
+0+[0-9a-f]+ l d .mips16.call.m32_static16_dl 0+[0-9a-f]+ .mips16.call.m32_static16_dl
+0+[0-9a-f]+ l F .mips16.call.m32_static16_dl 0+[0-9a-f]+ __call_stub_m32_static16_dl
+0+[0-9a-f]+ l d .mips16.call.m16_static16_dl 0+[0-9a-f]+ .mips16.call.m16_static16_dl
+0+[0-9a-f]+ l F .mips16.call.m16_static16_dl 0+[0-9a-f]+ __call_stub_m16_static16_dl
+0+[0-9a-f]+ l d .mips16.call.m32_static16_dlld 0+[0-9a-f]+ .mips16.call.m32_static16_dlld
+0+[0-9a-f]+ l F .mips16.call.m32_static16_dlld 0+[0-9a-f]+ __call_stub_m32_static16_dlld
+0+[0-9a-f]+ l d .mips16.call.m16_static16_dlld 0+[0-9a-f]+ .mips16.call.m16_static16_dlld
+0+[0-9a-f]+ l F .mips16.call.m16_static16_dlld 0+[0-9a-f]+ __call_stub_m16_static16_dlld
+0+[0-9a-f]+ l d .mips16.call.fp.m32_static16_d_l 0+[0-9a-f]+ .mips16.call.fp.m32_static16_d_l
+0+[0-9a-f]+ l F .mips16.call.fp.m32_static16_d_l 0+[0-9a-f]+ __call_stub_fp_m32_static16_d_l
+0+[0-9a-f]+ l d .mips16.call.fp.m16_static16_d_l 0+[0-9a-f]+ .mips16.call.fp.m16_static16_d_l
+0+[0-9a-f]+ l F .mips16.call.fp.m16_static16_d_l 0+[0-9a-f]+ __call_stub_fp_m16_static16_d_l
+0+[0-9a-f]+ l d .mips16.call.fp.m32_static16_d_d 0+[0-9a-f]+ .mips16.call.fp.m32_static16_d_d
+0+[0-9a-f]+ l F .mips16.call.fp.m32_static16_d_d 0+[0-9a-f]+ __call_stub_fp_m32_static16_d_d
+0+[0-9a-f]+ l d .mips16.call.fp.m16_static16_d_d 0+[0-9a-f]+ .mips16.call.fp.m16_static16_d_d
+0+[0-9a-f]+ l F .mips16.call.fp.m16_static16_d_d 0+[0-9a-f]+ __call_stub_fp_m16_static16_d_d
+#...
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ m32_l
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ 0xf0 m16_l
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ m32_d
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ 0xf0 m16_d
+#...
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ m32_ld
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ 0xf0 m16_ld
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ m32_dl
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ 0xf0 m16_dl
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ m32_dlld
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ 0xf0 m16_dlld
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ m32_d_l
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ 0xf0 m16_d_l
+#...
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ m32_d_d
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ 0xf0 m16_d_d
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ f32
+0+[0-9a-f]+ g F .text 0+[0-9a-f]+ 0xf0 f16
+#pass
diff --git a/gas/testsuite/gas/mips/mips16-intermix.s b/gas/testsuite/gas/mips/mips16-intermix.s
new file mode 100644
index 000000000000..49b0cc97668e
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-intermix.s
@@ -0,0 +1,2631 @@
+ .text
+ .align 2
+ .globl m32_l
+ .set nomips16
+ .ent m32_l
+m32_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_l
+
+ .align 2
+ .globl m16_l
+ .set mips16
+ .ent m16_l
+m16_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static_l
+m32_static_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_static_l
+
+ .align 2
+ .set mips16
+ .ent m16_static_l
+m16_static_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_static_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_l
+m32_static1_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_static1_l
+
+ .align 2
+ .set mips16
+ .ent m16_static1_l
+m16_static1_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_static1_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_l
+m32_static32_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_static32_l
+
+ .align 2
+ .set mips16
+ .ent m16_static32_l
+m16_static32_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_static32_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_l
+m32_static16_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_static16_l
+
+ .align 2
+ .set mips16
+ .ent m16_static16_l
+m16_static16_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_static16_l
+
+ .align 2
+ .globl m32_d
+ .set nomips16
+ .ent m32_d
+m32_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_d
+
+ .align 2
+ .globl m16_d
+ .set mips16
+ .ent m16_d
+m16_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_d
+ # Stub function for m16_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_d
+__fn_stub_m16_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static_d
+m32_static_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static_d
+
+ .align 2
+ .set mips16
+ .ent m16_static_d
+m16_static_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_static_d
+ # Stub function for m16_static_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static_d
+__fn_stub_m16_static_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_d
+m32_static1_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static1_d
+
+ .align 2
+ .set mips16
+ .ent m16_static1_d
+m16_static1_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_static1_d
+ # Stub function for m16_static1_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static1_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static1_d
+__fn_stub_m16_static1_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static1_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static1_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_d
+m32_static32_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static32_d
+
+ .align 2
+ .set mips16
+ .ent m16_static32_d
+m16_static32_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_static32_d
+ # Stub function for m16_static32_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static32_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static32_d
+__fn_stub_m16_static32_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static32_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static32_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_d
+m32_static16_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static16_d
+
+ .align 2
+ .set mips16
+ .ent m16_static16_d
+m16_static16_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_static16_d
+ # Stub function for m16_static16_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static16_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static16_d
+__fn_stub_m16_static16_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static16_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static16_d
+ .previous
+
+ .align 2
+ .globl m32_ld
+ .set nomips16
+ .ent m32_ld
+m32_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_ld
+
+ .align 2
+ .globl m16_ld
+ .set mips16
+ .ent m16_ld
+m16_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_ld
+
+ .align 2
+ .set nomips16
+ .ent m32_static_ld
+m32_static_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_static_ld
+
+ .align 2
+ .set mips16
+ .ent m16_static_ld
+m16_static_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static_ld
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_ld
+m32_static1_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_static1_ld
+
+ .align 2
+ .set mips16
+ .ent m16_static1_ld
+m16_static1_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static1_ld
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_ld
+m32_static32_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_static32_ld
+
+ .align 2
+ .set mips16
+ .ent m16_static32_ld
+m16_static32_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static32_ld
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_ld
+m32_static16_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_static16_ld
+
+ .align 2
+ .set mips16
+ .ent m16_static16_ld
+m16_static16_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static16_ld
+
+ .align 2
+ .globl m32_dl
+ .set nomips16
+ .ent m32_dl
+m32_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_dl
+
+ .align 2
+ .globl m16_dl
+ .set mips16
+ .ent m16_dl
+m16_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_dl
+ # Stub function for m16_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_dl
+__fn_stub_m16_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_dl
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static_dl
+m32_static_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_static_dl
+
+ .align 2
+ .set mips16
+ .ent m16_static_dl
+m16_static_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static_dl
+ # Stub function for m16_static_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_static_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static_dl
+__fn_stub_m16_static_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static_dl
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_dl
+m32_static1_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_static1_dl
+
+ .align 2
+ .set mips16
+ .ent m16_static1_dl
+m16_static1_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static1_dl
+ # Stub function for m16_static1_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_static1_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static1_dl
+__fn_stub_m16_static1_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static1_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static1_dl
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_dl
+m32_static32_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_static32_dl
+
+ .align 2
+ .set mips16
+ .ent m16_static32_dl
+m16_static32_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static32_dl
+ # Stub function for m16_static32_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_static32_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static32_dl
+__fn_stub_m16_static32_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static32_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static32_dl
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_dl
+m32_static16_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_static16_dl
+
+ .align 2
+ .set mips16
+ .ent m16_static16_dl
+m16_static16_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static16_dl
+ # Stub function for m16_static16_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_static16_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static16_dl
+__fn_stub_m16_static16_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static16_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static16_dl
+ .previous
+
+ .align 2
+ .globl m32_dlld
+ .set nomips16
+ .ent m32_dlld
+m32_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_dlld
+
+ .align 2
+ .globl m16_dlld
+ .set mips16
+ .ent m16_dlld
+m16_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_dlld
+ # Stub function for m16_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_dlld
+__fn_stub_m16_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_dlld
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static_dlld
+m32_static_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_static_dlld
+
+ .align 2
+ .set mips16
+ .ent m16_static_dlld
+m16_static_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_static_dlld
+ # Stub function for m16_static_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_static_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static_dlld
+__fn_stub_m16_static_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static_dlld
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_dlld
+m32_static1_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_static1_dlld
+
+ .align 2
+ .set mips16
+ .ent m16_static1_dlld
+m16_static1_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_static1_dlld
+ # Stub function for m16_static1_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_static1_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static1_dlld
+__fn_stub_m16_static1_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static1_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static1_dlld
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_dlld
+m32_static32_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_static32_dlld
+
+ .align 2
+ .set mips16
+ .ent m16_static32_dlld
+m16_static32_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_static32_dlld
+ # Stub function for m16_static32_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_static32_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static32_dlld
+__fn_stub_m16_static32_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static32_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static32_dlld
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_dlld
+m32_static16_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_static16_dlld
+
+ .align 2
+ .set mips16
+ .ent m16_static16_dlld
+m16_static16_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_static16_dlld
+ # Stub function for m16_static16_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_static16_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static16_dlld
+__fn_stub_m16_static16_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static16_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static16_dlld
+ .previous
+
+ .align 2
+ .globl m32_d_l
+ .set nomips16
+ .ent m32_d_l
+m32_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_d_l
+
+ .align 2
+ .globl m16_d_l
+ .set mips16
+ .ent m16_d_l
+m16_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ jal __mips16_floatsidf
+ jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_d_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static_d_l
+m32_static_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_static_d_l
+
+ .align 2
+ .set mips16
+ .ent m16_static_d_l
+m16_static_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ jal __mips16_floatsidf
+ jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_static_d_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_d_l
+m32_static1_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_static1_d_l
+
+ .align 2
+ .set mips16
+ .ent m16_static1_d_l
+m16_static1_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ jal __mips16_floatsidf
+ jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_static1_d_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_d_l
+m32_static32_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_static32_d_l
+
+ .align 2
+ .set mips16
+ .ent m16_static32_d_l
+m16_static32_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ jal __mips16_floatsidf
+ jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_static32_d_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_d_l
+m32_static16_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_static16_d_l
+
+ .align 2
+ .set mips16
+ .ent m16_static16_d_l
+m16_static16_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ jal __mips16_floatsidf
+ jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_static16_d_l
+
+ .align 2
+ .globl m32_d_d
+ .set nomips16
+ .ent m32_d_d
+m32_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_d_d
+
+ .align 2
+ .globl m16_d_d
+ .set mips16
+ .ent m16_d_d
+m16_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_d_d
+ # Stub function for m16_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_d_d
+__fn_stub_m16_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_d_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static_d_d
+m32_static_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static_d_d
+
+ .align 2
+ .set mips16
+ .ent m16_static_d_d
+m16_static_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_static_d_d
+ # Stub function for m16_static_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static_d_d
+__fn_stub_m16_static_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static_d_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_d_d
+m32_static1_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static1_d_d
+
+ .align 2
+ .set mips16
+ .ent m16_static1_d_d
+m16_static1_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_static1_d_d
+ # Stub function for m16_static1_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static1_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static1_d_d
+__fn_stub_m16_static1_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static1_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static1_d_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_d_d
+m32_static32_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static32_d_d
+
+ .align 2
+ .set mips16
+ .ent m16_static32_d_d
+m16_static32_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_static32_d_d
+ # Stub function for m16_static32_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static32_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static32_d_d
+__fn_stub_m16_static32_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static32_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static32_d_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_d_d
+m32_static16_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static16_d_d
+
+ .align 2
+ .set mips16
+ .ent m16_static16_d_d
+m16_static16_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_static16_d_d
+ # Stub function for m16_static16_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static16_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static16_d_d
+__fn_stub_m16_static16_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static16_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static16_d_d
+ .previous
+
+ .align 2
+ .globl f32
+ .set nomips16
+ .ent f32
+f32:
+ .frame $sp,64,$31 # vars= 0, regs= 3/3, args= 24, gp= 0
+ .mask 0x80030000,-32
+ .fmask 0x03f00000,-8
+ .set noreorder
+ .set nomacro
+
+ addiu $sp,$sp,-64
+ sw $17,28($sp)
+ move $17,$4
+ sw $31,32($sp)
+ sdc1 $f24,56($sp)
+ sw $16,24($sp)
+ sdc1 $f22,48($sp)
+ sdc1 $f20,40($sp)
+ mtc1 $7,$f22
+ jal m32_static1_l
+ mtc1 $6,$f23
+
+ move $4,$17
+ jal m16_static1_l
+ move $16,$2
+
+ addu $16,$16,$2
+ jal m32_static1_d
+ mov.d $f12,$f22
+
+ addu $16,$16,$2
+ jal m16_static1_d
+ mov.d $f12,$f22
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m32_static1_ld
+ addu $16,$16,$2
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m16_static1_ld
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m32_static1_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m16_static1_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ sdc1 $f22,16($sp)
+ mov.d $f12,$f22
+ jal m32_static1_dlld
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ mov.d $f12,$f22
+ sdc1 $f22,16($sp)
+ jal m16_static1_dlld
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m32_static1_d_l
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m16_static1_d_l
+ mov.d $f20,$f0
+
+ add.d $f20,$f20,$f0
+ jal m32_static1_d_d
+ mov.d $f12,$f22
+
+ add.d $f20,$f20,$f0
+ jal m16_static1_d_d
+ mov.d $f12,$f22
+
+ move $4,$17
+ jal m32_static32_l
+ add.d $f20,$f20,$f0
+
+ move $4,$17
+ jal m16_static32_l
+ addu $16,$16,$2
+
+ addu $16,$16,$2
+ jal m32_static32_d
+ mov.d $f12,$f22
+
+ addu $16,$16,$2
+ jal m16_static32_d
+ mov.d $f12,$f22
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m32_static32_ld
+ addu $16,$16,$2
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m16_static32_ld
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m32_static32_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m16_static32_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ sdc1 $f22,16($sp)
+ mov.d $f12,$f22
+ jal m32_static32_dlld
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ mov.d $f12,$f22
+ sdc1 $f22,16($sp)
+ jal m16_static32_dlld
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m32_static32_d_l
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m16_static32_d_l
+ add.d $f20,$f20,$f0
+
+ add.d $f20,$f20,$f0
+ jal m32_static32_d_d
+ mov.d $f12,$f22
+
+ mtc1 $16,$f24
+ add.d $f20,$f20,$f0
+ jal m16_static32_d_d
+ mov.d $f12,$f22
+
+ lw $31,32($sp)
+ lw $17,28($sp)
+ lw $16,24($sp)
+ add.d $f20,$f20,$f0
+ ldc1 $f22,48($sp)
+ cvt.d.w $f0,$f24
+ ldc1 $f24,56($sp)
+ add.d $f0,$f0,$f20
+ ldc1 $f20,40($sp)
+ j $31
+ addiu $sp,$sp,64
+
+ .set macro
+ .set reorder
+ .end f32
+
+ # Stub function to call m32_static1_d (double)
+ .set nomips16
+ .section .mips16.call.m32_static1_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static1_d
+__call_stub_m32_static1_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static1_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static1_d
+ .previous
+
+ # Stub function to call m16_static1_d (double)
+ .set nomips16
+ .section .mips16.call.m16_static1_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static1_d
+__call_stub_m16_static1_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static1_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static1_d
+ .previous
+
+ # Stub function to call m32_static1_dl (double)
+ .set nomips16
+ .section .mips16.call.m32_static1_dl,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static1_dl
+__call_stub_m32_static1_dl:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static1_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static1_dl
+ .previous
+
+ # Stub function to call m16_static1_dl (double)
+ .set nomips16
+ .section .mips16.call.m16_static1_dl,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static1_dl
+__call_stub_m16_static1_dl:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static1_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static1_dl
+ .previous
+
+ # Stub function to call m32_static1_dlld (double)
+ .set nomips16
+ .section .mips16.call.m32_static1_dlld,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static1_dlld
+__call_stub_m32_static1_dlld:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static1_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static1_dlld
+ .previous
+
+ # Stub function to call m16_static1_dlld (double)
+ .set nomips16
+ .section .mips16.call.m16_static1_dlld,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static1_dlld
+__call_stub_m16_static1_dlld:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static1_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static1_dlld
+ .previous
+
+ # Stub function to call double m32_static1_d_l ()
+ .set nomips16
+ .section .mips16.call.fp.m32_static1_d_l,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m32_static1_d_l
+__call_stub_fp_m32_static1_d_l:
+ .set noreorder
+ move $18,$31
+ jal m32_static1_d_l
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m32_static1_d_l
+ .previous
+
+ # Stub function to call double m16_static1_d_l ()
+ .set nomips16
+ .section .mips16.call.fp.m16_static1_d_l,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m16_static1_d_l
+__call_stub_fp_m16_static1_d_l:
+ .set noreorder
+ move $18,$31
+ jal m16_static1_d_l
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m16_static1_d_l
+ .previous
+
+ # Stub function to call double m32_static1_d_d (double)
+ .set nomips16
+ .section .mips16.call.fp.m32_static1_d_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m32_static1_d_d
+__call_stub_fp_m32_static1_d_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ move $18,$31
+ jal m32_static1_d_d
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m32_static1_d_d
+ .previous
+
+ # Stub function to call double m16_static1_d_d (double)
+ .set nomips16
+ .section .mips16.call.fp.m16_static1_d_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m16_static1_d_d
+__call_stub_fp_m16_static1_d_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ move $18,$31
+ jal m16_static1_d_d
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m16_static1_d_d
+ .previous
+
+ # Stub function to call m32_static16_d (double)
+ .set nomips16
+ .section .mips16.call.m32_static16_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static16_d
+__call_stub_m32_static16_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static16_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static16_d
+ .previous
+
+ # Stub function to call m16_static16_d (double)
+ .set nomips16
+ .section .mips16.call.m16_static16_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static16_d
+__call_stub_m16_static16_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static16_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static16_d
+ .previous
+
+ # Stub function to call m32_static16_dl (double)
+ .set nomips16
+ .section .mips16.call.m32_static16_dl,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static16_dl
+__call_stub_m32_static16_dl:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static16_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static16_dl
+ .previous
+
+ # Stub function to call m16_static16_dl (double)
+ .set nomips16
+ .section .mips16.call.m16_static16_dl,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static16_dl
+__call_stub_m16_static16_dl:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static16_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static16_dl
+ .previous
+
+ # Stub function to call m32_static16_dlld (double)
+ .set nomips16
+ .section .mips16.call.m32_static16_dlld,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static16_dlld
+__call_stub_m32_static16_dlld:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static16_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static16_dlld
+ .previous
+
+ # Stub function to call m16_static16_dlld (double)
+ .set nomips16
+ .section .mips16.call.m16_static16_dlld,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static16_dlld
+__call_stub_m16_static16_dlld:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static16_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static16_dlld
+ .previous
+
+ # Stub function to call double m32_static16_d_l ()
+ .set nomips16
+ .section .mips16.call.fp.m32_static16_d_l,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m32_static16_d_l
+__call_stub_fp_m32_static16_d_l:
+ .set noreorder
+ move $18,$31
+ jal m32_static16_d_l
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m32_static16_d_l
+ .previous
+
+ # Stub function to call double m16_static16_d_l ()
+ .set nomips16
+ .section .mips16.call.fp.m16_static16_d_l,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m16_static16_d_l
+__call_stub_fp_m16_static16_d_l:
+ .set noreorder
+ move $18,$31
+ jal m16_static16_d_l
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m16_static16_d_l
+ .previous
+
+ # Stub function to call double m32_static16_d_d (double)
+ .set nomips16
+ .section .mips16.call.fp.m32_static16_d_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m32_static16_d_d
+__call_stub_fp_m32_static16_d_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ move $18,$31
+ jal m32_static16_d_d
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m32_static16_d_d
+ .previous
+
+ # Stub function to call double m16_static16_d_d (double)
+ .set nomips16
+ .section .mips16.call.fp.m16_static16_d_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m16_static16_d_d
+__call_stub_fp_m16_static16_d_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ move $18,$31
+ jal m16_static16_d_d
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m16_static16_d_d
+ .previous
+
+ .align 2
+ .globl f16
+ .set mips16
+ .ent f16
+f16:
+ .frame $sp,104,$31 # vars= 64, regs= 4/0, args= 24, gp= 0
+ .mask 0x80070000,-4
+ .fmask 0x00000000,0
+ save 104,$16,$17,$18,$31
+ move $17,$4
+ sw $7,116($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static1_l
+ sw $6,112($sp)
+ .set macro
+ .set reorder
+
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static1_l
+ move $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static1_d
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static1_d
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $7,116($sp)
+ lw $6,112($sp)
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static1_ld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $7,116($sp)
+ lw $6,112($sp)
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static1_ld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static1_dl
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static1_dl
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $3,116($sp)
+ lw $6,112($sp)
+ sw $3,20($sp)
+ move $5,$3
+ sw $6,16($sp)
+ move $4,$6
+ move $7,$17
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static1_dlld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ addu $16,$2
+ lw $7,112($sp)
+ lw $2,116($sp)
+ move $6,$17
+ move $5,$2
+ sw $7,16($sp)
+ move $4,$7
+ sw $2,20($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static1_dlld
+ move $7,$17
+ .set macro
+ .set reorder
+
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static1_d_l
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ move $4,$17
+ sw $3,28($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static1_d_l
+ sw $2,24($sp)
+ .set macro
+ .set reorder
+
+ lw $5,28($sp)
+ lw $4,24($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ sw $3,36($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static1_d_d
+ sw $2,32($sp)
+ .set macro
+ .set reorder
+
+ lw $5,36($sp)
+ lw $4,32($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ sw $3,44($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static1_d_d
+ sw $2,40($sp)
+ .set macro
+ .set reorder
+
+ lw $5,44($sp)
+ lw $4,40($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ move $4,$17
+ sw $3,52($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static16_l
+ sw $2,48($sp)
+ .set macro
+ .set reorder
+
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static16_l
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static16_d
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static16_d
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $7,116($sp)
+ lw $6,112($sp)
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static16_ld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $7,116($sp)
+ lw $6,112($sp)
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static16_ld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static16_dl
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static16_dl
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $4,116($sp)
+ lw $6,112($sp)
+ sw $4,20($sp)
+ sw $6,16($sp)
+ move $5,$4
+ move $7,$17
+ move $4,$6
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static16_dlld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ addu $16,$2
+ lw $3,116($sp)
+ lw $2,112($sp)
+ move $6,$17
+ move $7,$17
+ sw $3,20($sp)
+ move $5,$3
+ sw $2,16($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static16_dlld
+ move $4,$2
+ .set macro
+ .set reorder
+
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static16_d_l
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ move $4,$17
+ sw $3,60($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static16_d_l
+ sw $2,56($sp)
+ .set macro
+ .set reorder
+
+ lw $5,60($sp)
+ lw $4,56($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ sw $3,68($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static16_d_d
+ sw $2,64($sp)
+ .set macro
+ .set reorder
+
+ lw $5,68($sp)
+ lw $4,64($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ sw $3,76($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static16_d_d
+ sw $2,72($sp)
+ .set macro
+ .set reorder
+
+ lw $5,76($sp)
+ lw $4,72($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ move $4,$16
+ sw $3,84($sp)
+ .set noreorder
+ .set nomacro
+ jal __mips16_floatsidf
+ sw $2,80($sp)
+ .set macro
+ .set reorder
+
+ lw $7,84($sp)
+ lw $6,80($sp)
+ move $5,$3
+ .set noreorder
+ .set nomacro
+ jal __mips16_adddf3
+ move $4,$2
+ .set macro
+ .set reorder
+
+ jal __mips16_ret_df
+ restore 104,$16,$17,$18,$31
+ j $31
+ .end f16
diff --git a/gas/testsuite/gas/mips/mips16e-64.d b/gas/testsuite/gas/mips/mips16e-64.d
new file mode 100644
index 000000000000..9eb098f60a2f
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16e-64.d
@@ -0,0 +1,19 @@
+#objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric -mmips:16
+#as: -march=mips64
+#name: MIPS16e-64
+#source: mips16e-64.s
+
+# Test the 64bit instructions of mips16e.
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+
+0x00000000 ecd1 sew \$4
+0x00000002 ec51 zew \$4
+0x00000004 6500 nop
+0x00000006 6500 nop
+0x00000008 6500 nop
+0x0000000a 6500 nop
+0x0000000c 6500 nop
+0x0000000e 6500 nop
diff --git a/gas/testsuite/gas/mips/mips16e-64.l b/gas/testsuite/gas/mips/mips16e-64.l
new file mode 100644
index 000000000000..8df0c0575a51
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16e-64.l
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*: Error: opcode not supported on this processor: .* (.*) `sew'
+.*: Error: opcode not supported on this processor: .* (.*) `zew'
diff --git a/gas/testsuite/gas/mips/mips16e-64.s b/gas/testsuite/gas/mips/mips16e-64.s
new file mode 100644
index 000000000000..39b359731442
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16e-64.s
@@ -0,0 +1,9 @@
+# Test the 64bit instructions of mips16e.
+
+ .text
+ .set mips16
+
+ sew $4
+ zew $4
+
+ .p2align 4
diff --git a/gas/testsuite/gas/mips/mips16e-save.d b/gas/testsuite/gas/mips/mips16e-save.d
index 6e18d8c32060..5f836866b9bc 100644
--- a/gas/testsuite/gas/mips/mips16e-save.d
+++ b/gas/testsuite/gas/mips/mips16e-save.d
@@ -39,5 +39,5 @@ Disassembly of section .text:
60:[ ]+6470[ ]+restore[ ]+128,ra,s0-s1
62:[ ]+f010 6441[ ]+restore[ ]+136,ra
66:[ ]+f100 6408[ ]+restore[ ]+64,s2
- 6a:[ ]+f71b 6470[ ]+restore[ ]+128,ra,s0-s8,a0-a3
+ 6a:[ ]+f71a 6470[ ]+restore[ ]+a0-a1,128,ra,s0-s8,a2-a3
6e:[ ]+6500[ ]+nop
diff --git a/gas/testsuite/gas/mips/mips16e.d b/gas/testsuite/gas/mips/mips16e.d
new file mode 100644
index 000000000000..53aa0d32aad6
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16e.d
@@ -0,0 +1,50 @@
+#objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric
+#name: MIPS16e
+#as: -32
+
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+0+0000 <[^>]*> eac0 jalrc \$2
+0+0002 <[^>]*> eac0 jalrc \$2
+0+0004 <[^>]*> e8a0 jrc \$31
+0+0006 <[^>]*> ea80 jrc \$2
+0+0008 <[^>]*> eac0 jalrc \$2
+0+000a <[^>]*> eac0 jalrc \$2
+0+000c <[^>]*> eac0 jalrc \$2
+0+000e <[^>]*> eac0 jalrc \$2
+0+0010 <[^>]*> e8a0 jrc \$31
+0+0012 <[^>]*> ea80 jrc \$2
+0+0014 <[^>]*> e8a0 jrc \$31
+0+0016 <[^>]*> ea80 jrc \$2
+0+0018 <[^>]*> eac0 jalrc \$2
+0+001a <[^>]*> 1800 0000 jal 00000000 <[^>]*>
+ 1a: R_MIPS16_26 foo
+0+001e <[^>]*> 4281 addiu \$4,\$2,1
+0+0020 <[^>]*> eac0 jalrc \$2
+0+0022 <[^>]*> 1800 0000 jal 00000000 <[^>]*>
+ 22: R_MIPS16_26 foo
+0+0026 <[^>]*> 6500 nop
+0+0028 <[^>]*> 6782 move \$4,\$2
+0+002a <[^>]*> eac0 jalrc \$2
+0+002c <[^>]*> 6782 move \$4,\$2
+0+002e <[^>]*> ea80 jrc \$2
+0+0030 <[^>]*> 6782 move \$4,\$2
+0+0032 <[^>]*> e8a0 jrc \$31
+0+0034 <[^>]*> ec91 seb \$4
+0+0036 <[^>]*> ecb1 seh \$4
+0+0038 <[^>]*> ec11 zeb \$4
+0+003a <[^>]*> ec31 zeh \$4
+0+003c <[^>]*> 64c1 save 8,\$31
+0+003e <[^>]*> 64c0 save 128,\$31
+0+0040 <[^>]*> 64e2 save 16,\$31,\$16
+0+0042 <[^>]*> 64f2 save 16,\$31,\$16-\$17
+0+0044 <[^>]*> 64df save 120,\$31,\$17
+0+0046 <[^>]*> f010 64e1 save 136,\$31,\$16
+0+004a <[^>]*> f004 64f2 save \$4,16,\$31,\$16-\$17
+0+004e <[^>]*> f308 64e2 save \$4-\$5,16,\$31,\$16,\$18-\$20
+0+0052 <[^>]*> f30c 64f2 save \$4-\$6,16,\$31,\$16-\$20
+0+0056 <[^>]*> f70e 64d2 save \$4-\$7,16,\$31,\$17-\$30
+0+005a <[^>]*> f30a 64e2 save \$4-\$5,16,\$31,\$16,\$18-\$20,\$6-\$7
+0+005e <[^>]*> 6500 nop
diff --git a/gas/testsuite/gas/mips/mips16e.s b/gas/testsuite/gas/mips/mips16e.s
new file mode 100644
index 000000000000..72e2d0928fb1
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16e.s
@@ -0,0 +1,58 @@
+# Test the mips16e instruction set.
+
+ .set mips16
+ .text
+stuff:
+ # explicit compact jumps
+ jalrc $2
+ jalrc $31,$2
+ jrc $31
+ jrc $2
+
+ # these jumps should all be converted to compact versions
+ jalr $2
+ jalr $31,$2
+ jal $2
+ jal $31,$2
+ jr $31
+ jr $2
+ j $31
+ j $2
+
+ # make sure unconditional jumps don't swap with compact jumps
+ # and vice versa.
+ jalr $2
+ .set noreorder
+ jal foo # mustn't swap with previous jalr
+ addu $4,$2,1
+ .set reorder
+ jalr $2
+ jal foo
+
+ move $4,$2
+1: jal $2 # can't swap with move
+
+ move $4,$2
+1: jr $2 # can't swap with move
+
+ move $4,$2
+1: jr $31 # can't swap with move
+
+ seb $4
+ seh $4
+ zeb $4
+ zeh $4
+
+ save $31,8
+ save $31,128
+ save $31,$16,16
+ save $31,$16-$17,16
+ save $31,$17,120
+ save $31,$16,136
+ save $4,$31,$16-$17,16
+ save $4-$5,$31,$16,$18,$19,$20,16
+ save $4-$6,$31,$16-$20,16
+ save $4-$7,$31,$17,$18-$30,16
+ save $4-$5,$31,$16,$18,$19,$20,16,$6-$7
+
+ .p2align 4
diff --git a/gas/testsuite/gas/mips/mips32-dsp.d b/gas/testsuite/gas/mips/mips32-dsp.d
index 486f630ac942..d538abd5abe4 100644
--- a/gas/testsuite/gas/mips/mips32-dsp.d
+++ b/gas/testsuite/gas/mips/mips32-dsp.d
@@ -1,7 +1,6 @@
#objdump: -dr --prefix-addresses --show-raw-insn
#name: MIPS DSP ASE for MIPS32
#as: -mdsp -32
-#stderr: mips32-dsp.l
# Check MIPS DSP ASE for MIPS32 Instruction Assembly
@@ -38,141 +37,103 @@ Disassembly of section .text:
0+006c <[^>]*> 7c1cdf52 preceu\.ph\.qbr k1,gp
0+0070 <[^>]*> 7c1de792 preceu\.ph\.qbla gp,sp
0+0074 <[^>]*> 7c1eefd2 preceu\.ph\.qbra sp,s8
-0+0078 <[^>]*> 7cfff013 shll\.qb s8,ra,0x7
-0+007c <[^>]*> 7c1ff013 shll\.qb s8,ra,0x0
-0+0080 <[^>]*> 7cfff013 shll\.qb s8,ra,0x7
-0+0084 <[^>]*> 7c1ff013 shll\.qb s8,ra,0x0
-0+0088 <[^>]*> 7c20f893 shllv\.qb ra,zero,at
-0+008c <[^>]*> 7de10213 shll\.ph zero,at,0xf
-0+0090 <[^>]*> 7c010213 shll\.ph zero,at,0x0
-0+0094 <[^>]*> 7de10213 shll\.ph zero,at,0xf
-0+0098 <[^>]*> 7c010213 shll\.ph zero,at,0x0
-0+009c <[^>]*> 7c620a93 shllv\.ph at,v0,v1
-0+00a0 <[^>]*> 7de31313 shll_s\.ph v0,v1,0xf
-0+00a4 <[^>]*> 7c031313 shll_s\.ph v0,v1,0x0
-0+00a8 <[^>]*> 7de31313 shll_s\.ph v0,v1,0xf
-0+00ac <[^>]*> 7c031313 shll_s\.ph v0,v1,0x0
-0+00b0 <[^>]*> 7ca41b93 shllv_s\.ph v1,a0,a1
-0+00b4 <[^>]*> 7fe52513 shll_s\.w a0,a1,0x1f
-0+00b8 <[^>]*> 7c052513 shll_s\.w a0,a1,0x0
-0+00bc <[^>]*> 7fe52513 shll_s\.w a0,a1,0x1f
-0+00c0 <[^>]*> 7c052513 shll_s\.w a0,a1,0x0
-0+00c4 <[^>]*> 7ce62d93 shllv_s\.w a1,a2,a3
-0+00c8 <[^>]*> 7ce73053 shrl\.qb a2,a3,0x7
-0+00cc <[^>]*> 7c073053 shrl\.qb a2,a3,0x0
-0+00d0 <[^>]*> 7ce73053 shrl\.qb a2,a3,0x7
-0+00d4 <[^>]*> 7c073053 shrl\.qb a2,a3,0x0
-0+00d8 <[^>]*> 7d2838d3 shrlv\.qb a3,t0,t1
-0+00dc <[^>]*> 7de94253 shra\.ph t0,t1,0xf
-0+00e0 <[^>]*> 7c094253 shra\.ph t0,t1,0x0
-0+00e4 <[^>]*> 7de94253 shra\.ph t0,t1,0xf
-0+00e8 <[^>]*> 7c094253 shra\.ph t0,t1,0x0
-0+00ec <[^>]*> 7d6a4ad3 shrav\.ph t1,t2,t3
-0+00f0 <[^>]*> 7deb5353 shra_r\.ph t2,t3,0xf
-0+00f4 <[^>]*> 7c0b5353 shra_r\.ph t2,t3,0x0
-0+00f8 <[^>]*> 7deb5353 shra_r\.ph t2,t3,0xf
-0+00fc <[^>]*> 7c0b5353 shra_r\.ph t2,t3,0x0
-0+0100 <[^>]*> 7dac5bd3 shrav_r\.ph t3,t4,t5
-0+0104 <[^>]*> 7fed6553 shra_r\.w t4,t5,0x1f
-0+0108 <[^>]*> 7c0d6553 shra_r\.w t4,t5,0x0
-0+010c <[^>]*> 7fed6553 shra_r\.w t4,t5,0x1f
-0+0110 <[^>]*> 7c0d6553 shra_r\.w t4,t5,0x0
-0+0114 <[^>]*> 7dee6dd3 shrav_r\.w t5,t6,t7
-0+0118 <[^>]*> 7df07190 muleu_s\.ph\.qbl t6,t7,s0
-0+011c <[^>]*> 7e1179d0 muleu_s\.ph\.qbr t7,s0,s1
-0+0120 <[^>]*> 7e3287d0 mulq_rs\.ph s0,s1,s2
-0+0124 <[^>]*> 7e538f10 muleq_s\.w\.phl s1,s2,s3
-0+0128 <[^>]*> 7e749750 muleq_s\.w\.phr s2,s3,s4
-0+012c <[^>]*> 7e7400f0 dpau\.h\.qbl \$ac0,s3,s4
-0+0130 <[^>]*> 7e9509f0 dpau\.h\.qbr \$ac1,s4,s5
-0+0134 <[^>]*> 7eb612f0 dpsu\.h\.qbl \$ac2,s5,s6
-0+0138 <[^>]*> 7ed71bf0 dpsu\.h\.qbr \$ac3,s6,s7
-0+013c <[^>]*> 7ef80130 dpaq_s\.w\.ph \$ac0,s7,t8
-0+0140 <[^>]*> 7f190970 dpsq_s\.w\.ph \$ac1,t8,t9
-0+0144 <[^>]*> 7f3a11b0 mulsaq_s\.w\.ph \$ac2,t9,k0
-0+0148 <[^>]*> 7f5b1b30 dpaq_sa\.l\.w \$ac3,k0,k1
-0+014c <[^>]*> 7f7c0370 dpsq_sa\.l\.w \$ac0,k1,gp
-0+0150 <[^>]*> 7f9d0d30 maq_s\.w\.phl \$ac1,gp,sp
-0+0154 <[^>]*> 7fbe15b0 maq_s\.w\.phr \$ac2,sp,s8
-0+0158 <[^>]*> 7fdf1c30 maq_sa\.w\.phl \$ac3,s8,ra
-0+015c <[^>]*> 7fe004b0 maq_sa\.w\.phr \$ac0,ra,zero
-0+0160 <[^>]*> 7c0106d2 bitrev zero,at
-0+0164 <[^>]*> 7c41000c insv at,v0
-0+0168 <[^>]*> 7cff1092 repl\.qb v0,0xff
-0+016c <[^>]*> 7c001092 repl\.qb v0,0x0
-0+0170 <[^>]*> 7cff1092 repl\.qb v0,0xff
-0+0174 <[^>]*> 7c001092 repl\.qb v0,0x0
-0+0178 <[^>]*> 7c0418d2 replv\.qb v1,a0
-0+017c <[^>]*> 7dff2292 repl\.ph a0,511
-0+0180 <[^>]*> 7e002292 repl\.ph a0,-512
-0+0184 <[^>]*> 7dff2292 repl\.ph a0,511
-0+0188 <[^>]*> 7e002292 repl\.ph a0,-512
-0+018c <[^>]*> 7c062ad2 replv\.ph a1,a2
-0+0190 <[^>]*> 7cc70011 cmpu\.eq\.qb a2,a3
-0+0194 <[^>]*> 7ce80051 cmpu\.lt\.qb a3,t0
-0+0198 <[^>]*> 7d090091 cmpu\.le\.qb t0,t1
-0+019c <[^>]*> 7d4b4911 cmpgu\.eq\.qb t1,t2,t3
-0+01a0 <[^>]*> 7d6c5151 cmpgu\.lt\.qb t2,t3,t4
-0+01a4 <[^>]*> 7d8d5991 cmpgu\.le\.qb t3,t4,t5
-0+01a8 <[^>]*> 7d8d0211 cmp\.eq\.ph t4,t5
-0+01ac <[^>]*> 7dae0251 cmp\.lt\.ph t5,t6
-0+01b0 <[^>]*> 7dcf0291 cmp\.le\.ph t6,t7
-0+01b4 <[^>]*> 7e1178d1 pick\.qb t7,s0,s1
-0+01b8 <[^>]*> 7e3282d1 pick\.ph s0,s1,s2
-0+01bc <[^>]*> 7e538b91 packrl\.ph s1,s2,s3
-0+01c0 <[^>]*> 7ff20838 extr\.w s2,\$ac1,0x1f
-0+01c4 <[^>]*> 7c120838 extr\.w s2,\$ac1,0x0
-0+01c8 <[^>]*> 7ff20838 extr\.w s2,\$ac1,0x1f
-0+01cc <[^>]*> 7c120838 extr\.w s2,\$ac1,0x0
-0+01d0 <[^>]*> 7ff31138 extr_r\.w s3,\$ac2,0x1f
-0+01d4 <[^>]*> 7c131138 extr_r\.w s3,\$ac2,0x0
-0+01d8 <[^>]*> 7ff31138 extr_r\.w s3,\$ac2,0x1f
-0+01dc <[^>]*> 7c131138 extr_r\.w s3,\$ac2,0x0
-0+01e0 <[^>]*> 7ff419b8 extr_rs\.w s4,\$ac3,0x1f
-0+01e4 <[^>]*> 7c1419b8 extr_rs\.w s4,\$ac3,0x0
-0+01e8 <[^>]*> 7ff419b8 extr_rs\.w s4,\$ac3,0x1f
-0+01ec <[^>]*> 7c1419b8 extr_rs\.w s4,\$ac3,0x0
-0+01f0 <[^>]*> 7ff503b8 extr_s\.h s5,\$ac0,0x1f
-0+01f4 <[^>]*> 7c1503b8 extr_s\.h s5,\$ac0,0x0
-0+01f8 <[^>]*> 7ff503b8 extr_s\.h s5,\$ac0,0x1f
-0+01fc <[^>]*> 7c1503b8 extr_s\.h s5,\$ac0,0x0
-0+0200 <[^>]*> 7ef60bf8 extrv_s\.h s6,\$ac1,s7
-0+0204 <[^>]*> 7f171078 extrv\.w s7,\$ac2,t8
-0+0208 <[^>]*> 7f381978 extrv_r\.w t8,\$ac3,t9
-0+020c <[^>]*> 7f5901f8 extrv_rs\.w t9,\$ac0,k0
-0+0210 <[^>]*> 7ffa08b8 extp k0,\$ac1,0x1f
-0+0214 <[^>]*> 7c1a08b8 extp k0,\$ac1,0x0
-0+0218 <[^>]*> 7ffa08b8 extp k0,\$ac1,0x1f
-0+021c <[^>]*> 7c1a08b8 extp k0,\$ac1,0x0
-0+0220 <[^>]*> 7f9b10f8 extpv k1,\$ac2,gp
-0+0224 <[^>]*> 7ffc1ab8 extpdp gp,\$ac3,0x1f
-0+0228 <[^>]*> 7c1c1ab8 extpdp gp,\$ac3,0x0
-0+022c <[^>]*> 7ffc1ab8 extpdp gp,\$ac3,0x1f
-0+0230 <[^>]*> 7c1c1ab8 extpdp gp,\$ac3,0x0
-0+0234 <[^>]*> 7fdd02f8 extpdpv sp,\$ac0,s8
-0+0238 <[^>]*> 7df00eb8 shilo \$ac1,31
-0+023c <[^>]*> 7e000eb8 shilo \$ac1,-32
-0+0240 <[^>]*> 7df00eb8 shilo \$ac1,31
-0+0244 <[^>]*> 7e000eb8 shilo \$ac1,-32
-0+0248 <[^>]*> 7fc016f8 shilov \$ac2,s8
-0+024c <[^>]*> 7fe01ff8 mthlip ra,\$ac3
-0+0250 <[^>]*> 00000010 mfhi zero
-0+0254 <[^>]*> 00200812 mflo at,\$ac1
-0+0258 <[^>]*> 00401011 mthi v0,\$ac2
-0+025c <[^>]*> 00601813 mtlo v1,\$ac3
-0+0260 <[^>]*> 7c81fcf8 wrdsp a0,0x3f
-0+0264 <[^>]*> 7c8004f8 wrdsp a0,0x0
-0+0268 <[^>]*> 7c81fcf8 wrdsp a0,0x3f
-0+026c <[^>]*> 7c8004f8 wrdsp a0,0x0
-0+0270 <[^>]*> 7cbffcf8 wrdsp a1
-0+0274 <[^>]*> 7c3f34b8 rddsp a2,0x3f
-0+0278 <[^>]*> 7c0034b8 rddsp a2,0x0
-0+027c <[^>]*> 7c3f34b8 rddsp a2,0x3f
-0+0280 <[^>]*> 7c0034b8 rddsp a2,0x0
-0+0284 <[^>]*> 7fff3cb8 rddsp a3
-0+0288 <[^>]*> 7d49418a lbux t0,t1\(t2\)
-0+028c <[^>]*> 7d6a490a lhx t1,t2\(t3\)
-0+0290 <[^>]*> 7d8b500a lwx t2,t3\(t4\)
-0+0294 <[^>]*> 041cff5a bposge32 0+0000 <text_label>
-0+0298 <[^>]*> 00000000 nop
- ...
+0+0078 <[^>]*> 7c1ff013 shll\.qb s8,ra,0x0
+0+007c <[^>]*> 7cfff013 shll\.qb s8,ra,0x7
+0+0080 <[^>]*> 7c20f893 shllv\.qb ra,zero,at
+0+0084 <[^>]*> 7c010213 shll\.ph zero,at,0x0
+0+0088 <[^>]*> 7de10213 shll\.ph zero,at,0xf
+0+008c <[^>]*> 7c620a93 shllv\.ph at,v0,v1
+0+0090 <[^>]*> 7c031313 shll_s\.ph v0,v1,0x0
+0+0094 <[^>]*> 7de31313 shll_s\.ph v0,v1,0xf
+0+0098 <[^>]*> 7ca41b93 shllv_s\.ph v1,a0,a1
+0+009c <[^>]*> 7c052513 shll_s\.w a0,a1,0x0
+0+00a0 <[^>]*> 7fe52513 shll_s\.w a0,a1,0x1f
+0+00a4 <[^>]*> 7ce62d93 shllv_s\.w a1,a2,a3
+0+00a8 <[^>]*> 7c073053 shrl\.qb a2,a3,0x0
+0+00ac <[^>]*> 7ce73053 shrl\.qb a2,a3,0x7
+0+00b0 <[^>]*> 7d2838d3 shrlv\.qb a3,t0,t1
+0+00b4 <[^>]*> 7c094253 shra\.ph t0,t1,0x0
+0+00b8 <[^>]*> 7de94253 shra\.ph t0,t1,0xf
+0+00bc <[^>]*> 7d6a4ad3 shrav\.ph t1,t2,t3
+0+00c0 <[^>]*> 7c0b5353 shra_r\.ph t2,t3,0x0
+0+00c4 <[^>]*> 7deb5353 shra_r\.ph t2,t3,0xf
+0+00c8 <[^>]*> 7dac5bd3 shrav_r\.ph t3,t4,t5
+0+00cc <[^>]*> 7c0d6553 shra_r\.w t4,t5,0x0
+0+00d0 <[^>]*> 7fed6553 shra_r\.w t4,t5,0x1f
+0+00d4 <[^>]*> 7dee6dd3 shrav_r\.w t5,t6,t7
+0+00d8 <[^>]*> 7df07190 muleu_s\.ph\.qbl t6,t7,s0
+0+00dc <[^>]*> 7e1179d0 muleu_s\.ph\.qbr t7,s0,s1
+0+00e0 <[^>]*> 7e3287d0 mulq_rs\.ph s0,s1,s2
+0+00e4 <[^>]*> 7e538f10 muleq_s\.w\.phl s1,s2,s3
+0+00e8 <[^>]*> 7e749750 muleq_s\.w\.phr s2,s3,s4
+0+00ec <[^>]*> 7e7400f0 dpau\.h\.qbl \$ac0,s3,s4
+0+00f0 <[^>]*> 7e9509f0 dpau\.h\.qbr \$ac1,s4,s5
+0+00f4 <[^>]*> 7eb612f0 dpsu\.h\.qbl \$ac2,s5,s6
+0+00f8 <[^>]*> 7ed71bf0 dpsu\.h\.qbr \$ac3,s6,s7
+0+00fc <[^>]*> 7ef80130 dpaq_s\.w\.ph \$ac0,s7,t8
+0+0100 <[^>]*> 7f190970 dpsq_s\.w\.ph \$ac1,t8,t9
+0+0104 <[^>]*> 7f3a11b0 mulsaq_s\.w\.ph \$ac2,t9,k0
+0+0108 <[^>]*> 7f5b1b30 dpaq_sa\.l\.w \$ac3,k0,k1
+0+010c <[^>]*> 7f7c0370 dpsq_sa\.l\.w \$ac0,k1,gp
+0+0110 <[^>]*> 7f9d0d30 maq_s\.w\.phl \$ac1,gp,sp
+0+0114 <[^>]*> 7fbe15b0 maq_s\.w\.phr \$ac2,sp,s8
+0+0118 <[^>]*> 7fdf1c30 maq_sa\.w\.phl \$ac3,s8,ra
+0+011c <[^>]*> 7fe004b0 maq_sa\.w\.phr \$ac0,ra,zero
+0+0120 <[^>]*> 7c0106d2 bitrev zero,at
+0+0124 <[^>]*> 7c41000c insv at,v0
+0+0128 <[^>]*> 7c001092 repl\.qb v0,0x0
+0+012c <[^>]*> 7cff1092 repl\.qb v0,0xff
+0+0130 <[^>]*> 7c0418d2 replv\.qb v1,a0
+0+0134 <[^>]*> 7e002292 repl\.ph a0,-512
+0+0138 <[^>]*> 7dff2292 repl\.ph a0,511
+0+013c <[^>]*> 7c062ad2 replv\.ph a1,a2
+0+0140 <[^>]*> 7cc70011 cmpu\.eq\.qb a2,a3
+0+0144 <[^>]*> 7ce80051 cmpu\.lt\.qb a3,t0
+0+0148 <[^>]*> 7d090091 cmpu\.le\.qb t0,t1
+0+014c <[^>]*> 7d4b4911 cmpgu\.eq\.qb t1,t2,t3
+0+0150 <[^>]*> 7d6c5151 cmpgu\.lt\.qb t2,t3,t4
+0+0154 <[^>]*> 7d8d5991 cmpgu\.le\.qb t3,t4,t5
+0+0158 <[^>]*> 7d8d0211 cmp\.eq\.ph t4,t5
+0+015c <[^>]*> 7dae0251 cmp\.lt\.ph t5,t6
+0+0160 <[^>]*> 7dcf0291 cmp\.le\.ph t6,t7
+0+0164 <[^>]*> 7e1178d1 pick\.qb t7,s0,s1
+0+0168 <[^>]*> 7e3282d1 pick\.ph s0,s1,s2
+0+016c <[^>]*> 7e538b91 packrl\.ph s1,s2,s3
+0+0170 <[^>]*> 7c120838 extr\.w s2,\$ac1,0x0
+0+0174 <[^>]*> 7ff20838 extr\.w s2,\$ac1,0x1f
+0+0178 <[^>]*> 7c131138 extr_r\.w s3,\$ac2,0x0
+0+017c <[^>]*> 7ff31138 extr_r\.w s3,\$ac2,0x1f
+0+0180 <[^>]*> 7c1419b8 extr_rs\.w s4,\$ac3,0x0
+0+0184 <[^>]*> 7ff419b8 extr_rs\.w s4,\$ac3,0x1f
+0+0188 <[^>]*> 7c1503b8 extr_s\.h s5,\$ac0,0x0
+0+018c <[^>]*> 7ff503b8 extr_s\.h s5,\$ac0,0x1f
+0+0190 <[^>]*> 7ef60bf8 extrv_s\.h s6,\$ac1,s7
+0+0194 <[^>]*> 7f171078 extrv\.w s7,\$ac2,t8
+0+0198 <[^>]*> 7f381978 extrv_r\.w t8,\$ac3,t9
+0+019c <[^>]*> 7f5901f8 extrv_rs\.w t9,\$ac0,k0
+0+01a0 <[^>]*> 7c1a08b8 extp k0,\$ac1,0x0
+0+01a4 <[^>]*> 7ffa08b8 extp k0,\$ac1,0x1f
+0+01a8 <[^>]*> 7f9b10f8 extpv k1,\$ac2,gp
+0+01ac <[^>]*> 7c1c1ab8 extpdp gp,\$ac3,0x0
+0+01b0 <[^>]*> 7ffc1ab8 extpdp gp,\$ac3,0x1f
+0+01b4 <[^>]*> 7fdd02f8 extpdpv sp,\$ac0,s8
+0+01b8 <[^>]*> 7e000eb8 shilo \$ac1,-32
+0+01bc <[^>]*> 7df00eb8 shilo \$ac1,31
+0+01c0 <[^>]*> 7fc016f8 shilov \$ac2,s8
+0+01c4 <[^>]*> 7fe01ff8 mthlip ra,\$ac3
+0+01c8 <[^>]*> 00000010 mfhi zero
+0+01cc <[^>]*> 00200812 mflo at,\$ac1
+0+01d0 <[^>]*> 00401011 mthi v0,\$ac2
+0+01d4 <[^>]*> 00601813 mtlo v1,\$ac3
+0+01d8 <[^>]*> 7c8004f8 wrdsp a0,0x0
+0+01dc <[^>]*> 7c81fcf8 wrdsp a0,0x3f
+0+01e0 <[^>]*> 7cbffcf8 wrdsp a1
+0+01e4 <[^>]*> 7c0034b8 rddsp a2,0x0
+0+01e8 <[^>]*> 7c3f34b8 rddsp a2,0x3f
+0+01ec <[^>]*> 7fff3cb8 rddsp a3
+0+01f0 <[^>]*> 7d49418a lbux t0,t1\(t2\)
+0+01f4 <[^>]*> 7d6a490a lhx t1,t2\(t3\)
+0+01f8 <[^>]*> 7d8b500a lwx t2,t3\(t4\)
+0+01fc <[^>]*> 041cff80 bposge32 00000000 <text_label>
+0+0200 <[^>]*> 00000000 nop
+ \.\.\.
diff --git a/gas/testsuite/gas/mips/mips32-dsp.l b/gas/testsuite/gas/mips/mips32-dsp.l
deleted file mode 100644
index c7d3e7a14cfe..000000000000
--- a/gas/testsuite/gas/mips/mips32-dsp.l
+++ /dev/null
@@ -1,39 +0,0 @@
-.*: Assembler messages:
-.*:39: Warning: DSP immediate not in range 0..7 \([0-9]*\)
-.*:42: Warning: DSP immediate not in range 0..7 \(8\)
-.*:44: Warning: DSP immediate not in range 0..15 \([0-9]*\)
-.*:47: Warning: DSP immediate not in range 0..15 \(16\)
-.*:49: Warning: DSP immediate not in range 0..15 \([0-9]*\)
-.*:52: Warning: DSP immediate not in range 0..15 \(16\)
-.*:54: Warning: DSP immediate not in range 0..31 \([0-9]*\)
-.*:57: Warning: DSP immediate not in range 0..31 \(32\)
-.*:59: Warning: DSP immediate not in range 0..7 \([0-9]*\)
-.*:62: Warning: DSP immediate not in range 0..7 \(8\)
-.*:64: Warning: DSP immediate not in range 0..15 \([0-9]*\)
-.*:67: Warning: DSP immediate not in range 0..15 \(16\)
-.*:69: Warning: DSP immediate not in range 0..15 \([0-9]*\)
-.*:72: Warning: DSP immediate not in range 0..15 \(16\)
-.*:74: Warning: DSP immediate not in range 0..31 \([0-9]*\)
-.*:77: Warning: DSP immediate not in range 0..31 \(32\)
-.*:99: Warning: DSP immediate not in range 0..255 \([0-9]*\)
-.*:102: Warning: DSP immediate not in range 0..255 \(256\)
-.*:104: Warning: DSP immediate not in range -512..511 \(-513\)
-.*:107: Warning: DSP immediate not in range -512..511 \(512\)
-.*:121: Warning: DSP immediate not in range 0..31 \([0-9]*\)
-.*:124: Warning: DSP immediate not in range 0..31 \(32\)
-.*:125: Warning: DSP immediate not in range 0..31 \([0-9]*\)
-.*:128: Warning: DSP immediate not in range 0..31 \(32\)
-.*:129: Warning: DSP immediate not in range 0..31 \([0-9]*\)
-.*:132: Warning: DSP immediate not in range 0..31 \(32\)
-.*:133: Warning: DSP immediate not in range 0..31 \([0-9]*\)
-.*:136: Warning: DSP immediate not in range 0..31 \(32\)
-.*:141: Warning: DSP immediate not in range 0..31 \([0-9]*\)
-.*:144: Warning: DSP immediate not in range 0..31 \(32\)
-.*:146: Warning: DSP immediate not in range 0..31 \([0-9]*\)
-.*:149: Warning: DSP immediate not in range 0..31 \(32\)
-.*:151: Warning: DSP immediate not in range -32..31 \(-33\)
-.*:154: Warning: DSP immediate not in range -32..31 \(32\)
-.*:161: Warning: DSP immediate not in range 0..63 \([0-9]*\)
-.*:164: Warning: DSP immediate not in range 0..63 \(64\)
-.*:166: Warning: DSP immediate not in range 0..63 \([0-9]*\)
-.*:169: Warning: DSP immediate not in range 0..63 \(64\)
diff --git a/gas/testsuite/gas/mips/mips32-dsp.s b/gas/testsuite/gas/mips/mips32-dsp.s
index aa818ce85138..8c5d46cad0e9 100644
--- a/gas/testsuite/gas/mips/mips32-dsp.s
+++ b/gas/testsuite/gas/mips/mips32-dsp.s
@@ -1,6 +1,7 @@
# source file to test assembly of MIPS DSP ASE for MIPS32 instructions
.set noreorder
+ .set nomacro
.set noat
.text
@@ -36,45 +37,29 @@ text_label:
preceu.ph.qbr $27,$28
preceu.ph.qbla $28,$29
preceu.ph.qbra $29,$30
- shll.qb $30,$31,-1
shll.qb $30,$31,0
shll.qb $30,$31,7
- shll.qb $30,$31,8
shllv.qb $31,$0,$1
- shll.ph $0,$1,-1
shll.ph $0,$1,0
shll.ph $0,$1,15
- shll.ph $0,$1,16
shllv.ph $1,$2,$3
- shll_s.ph $2,$3,-1
shll_s.ph $2,$3,0
shll_s.ph $2,$3,15
- shll_s.ph $2,$3,16
shllv_s.ph $3,$4,$5
- shll_s.w $4,$5,-1
shll_s.w $4,$5,0
shll_s.w $4,$5,31
- shll_s.w $4,$5,32
shllv_s.w $5,$6,$7
- shrl.qb $6,$7,-1
shrl.qb $6,$7,0
shrl.qb $6,$7,7
- shrl.qb $6,$7,8
shrlv.qb $7,$8,$9
- shra.ph $8,$9,-1
shra.ph $8,$9,0
shra.ph $8,$9,15
- shra.ph $8,$9,16
shrav.ph $9,$10,$11
- shra_r.ph $10,$11,-1
shra_r.ph $10,$11,0
shra_r.ph $10,$11,15
- shra_r.ph $10,$11,16
shrav_r.ph $11,$12,$13
- shra_r.w $12,$13,-1
shra_r.w $12,$13,0
shra_r.w $12,$13,31
- shra_r.w $12,$13,32
shrav_r.w $13,$14,$15
muleu_s.ph.qbl $14,$15,$16
muleu_s.ph.qbr $15,$16,$17
@@ -96,15 +81,11 @@ text_label:
maq_sa.w.phr $ac0,$31,$0
bitrev $0,$1
insv $1,$2
- repl.qb $2,-1
repl.qb $2,0
repl.qb $2,255
- repl.qb $2,256
replv.qb $3,$4
- repl.ph $4,-513
repl.ph $4,-512
repl.ph $4,511
- repl.ph $4,512
replv.ph $5,$6
cmpu.eq.qb $6,$7
cmpu.lt.qb $7,$8
@@ -118,55 +99,37 @@ text_label:
pick.qb $15,$16,$17
pick.ph $16,$17,$18
packrl.ph $17,$18,$19
- extr.w $18,$ac1,-1
extr.w $18,$ac1,0
extr.w $18,$ac1,31
- extr.w $18,$ac1,32
- extr_r.w $19,$ac2,-1
extr_r.w $19,$ac2,0
extr_r.w $19,$ac2,31
- extr_r.w $19,$ac2,32
- extr_rs.w $20,$ac3,-1
extr_rs.w $20,$ac3,0
extr_rs.w $20,$ac3,31
- extr_rs.w $20,$ac3,32
- extr_s.h $21,$ac0,-1
extr_s.h $21,$ac0,0
extr_s.h $21,$ac0,31
- extr_s.h $21,$ac0,32
extrv_s.h $22,$ac1,$23
extrv.w $23,$ac2,$24
extrv_r.w $24,$ac3,$25
extrv_rs.w $25,$ac0,$26
- extp $26,$ac1,-1
extp $26,$ac1,0
extp $26,$ac1,31
- extp $26,$ac1,32
extpv $27,$ac2,$28
- extpdp $28,$ac3,-1
extpdp $28,$ac3,0
extpdp $28,$ac3,31
- extpdp $28,$ac3,32
extpdpv $29,$ac0,$30
- shilo $ac1,-33
shilo $ac1,-32
shilo $ac1,31
- shilo $ac1,32
shilov $ac2,$30
mthlip $31,$ac3
mfhi $0,$ac0
mflo $1,$ac1
mthi $2,$ac2
mtlo $3,$ac3
- wrdsp $4,-1
wrdsp $4,0
wrdsp $4,63
- wrdsp $4,64
wrdsp $5
- rddsp $6,-1
rddsp $6,0
rddsp $6,63
- rddsp $6,64
rddsp $7
lbux $8,$9($10)
lhx $9,$10($11)
diff --git a/gas/testsuite/gas/mips/mips32-dspr2.d b/gas/testsuite/gas/mips/mips32-dspr2.d
new file mode 100644
index 000000000000..90c20ef711c3
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips32-dspr2.d
@@ -0,0 +1,72 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS DSP ASE Rev2 for MIPS32
+#as: -mdspr2 -32
+
+# Check MIPS DSP ASE Rev2 for MIPS32 Instruction Assembly
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 7c010052 absq_s\.qb zero,at
+0+0004 <[^>]*> 7c430a10 addu\.ph at,v0,v1
+0+0008 <[^>]*> 7c641310 addu_s\.ph v0,v1,a0
+0+000c <[^>]*> 7c851818 adduh\.qb v1,a0,a1
+0+0010 <[^>]*> 7ca62098 adduh_r\.qb a0,a1,a2
+0+0014 <[^>]*> 7cc50031 append a1,a2,0x0
+0+0018 <[^>]*> 7cc5f831 append a1,a2,0x1f
+0+001c <[^>]*> 00000000 nop
+0+0020 <[^>]*> 7ce60c31 balign a2,a3,0x1
+0+0024 <[^>]*> 7cc73391 packrl.ph a2,a2,a3
+0+0028 <[^>]*> 7ce61c31 balign a2,a3,0x3
+0+002c <[^>]*> 7ce83611 cmpgdu\.eq\.qb a2,a3,t0
+0+0030 <[^>]*> 7d093e51 cmpgdu\.lt\.qb a3,t0,t1
+0+0034 <[^>]*> 7d2a4691 cmpgdu\.le\.qb t0,t1,t2
+0+0038 <[^>]*> 7d2a0030 dpa\.w\.ph \$ac0,t1,t2
+0+003c <[^>]*> 7d4b0870 dps\.w\.ph \$ac1,t2,t3
+0+0040 <[^>]*> 716c1000 madd \$ac2,t3,t4
+0+0044 <[^>]*> 718d1801 maddu \$ac3,t4,t5
+0+0048 <[^>]*> 71ae0004 msub t5,t6
+0+004c <[^>]*> 71cf0805 msubu \$ac1,t6,t7
+0+0050 <[^>]*> 7e117b18 mul\.ph t7,s0,s1
+0+0054 <[^>]*> 7e328398 mul_s\.ph s0,s1,s2
+0+0058 <[^>]*> 7e538dd8 mulq_rs\.w s1,s2,s3
+0+005c <[^>]*> 7e749790 mulq_s\.ph s2,s3,s4
+0+0060 <[^>]*> 7e959d98 mulq_s\.w s3,s4,s5
+0+0064 <[^>]*> 7e9510b0 mulsa\.w\.ph \$ac2,s4,s5
+0+0068 <[^>]*> 02b61818 mult \$ac3,s5,s6
+0+006c <[^>]*> 02d70019 multu s6,s7
+0+0070 <[^>]*> 7f19bb51 precr\.qb\.ph s7,t8,t9
+0+0074 <[^>]*> 7f380791 precr_sra\.ph\.w t8,t9,0x0
+0+0078 <[^>]*> 7f38ff91 precr_sra\.ph\.w t8,t9,0x1f
+0+007c <[^>]*> 7f5907d1 precr_sra_r\.ph\.w t9,k0,0x0
+0+0080 <[^>]*> 7f59ffd1 precr_sra_r\.ph\.w t9,k0,0x1f
+0+0084 <[^>]*> 7f7a0071 prepend k0,k1,0x0
+0+0088 <[^>]*> 7f7af871 prepend k0,k1,0x1f
+0+008c <[^>]*> 7c1cd913 shra\.qb k1,gp,0x0
+0+0090 <[^>]*> 7cfcd913 shra\.qb k1,gp,0x7
+0+0094 <[^>]*> 7c1de153 shra_r\.qb gp,sp,0x0
+0+0098 <[^>]*> 7cfde153 shra_r\.qb gp,sp,0x7
+0+009c <[^>]*> 7ffee993 shrav\.qb sp,s8,ra
+0+00a0 <[^>]*> 7c1ff1d3 shrav_r\.qb s8,ra,zero
+0+00a4 <[^>]*> 7c00fe53 shrl\.ph ra,zero,0x0
+0+00a8 <[^>]*> 7de0fe53 shrl\.ph ra,zero,0xf
+0+00ac <[^>]*> 7c4106d3 shrlv\.ph zero,at,v0
+0+00b0 <[^>]*> 7c430a50 subu\.ph at,v0,v1
+0+00b4 <[^>]*> 7c641350 subu_s\.ph v0,v1,a0
+0+00b8 <[^>]*> 7c851858 subuh\.qb v1,a0,a1
+0+00bc <[^>]*> 7ca620d8 subuh_r\.qb a0,a1,a2
+0+00c0 <[^>]*> 7cc72a18 addqh\.ph a1,a2,a3
+0+00c4 <[^>]*> 7ce83298 addqh_r\.ph a2,a3,t0
+0+00c8 <[^>]*> 7d093c18 addqh\.w a3,t0,t1
+0+00cc <[^>]*> 7d2a4498 addqh_r\.w t0,t1,t2
+0+00d0 <[^>]*> 7d4b4a58 subqh\.ph t1,t2,t3
+0+00d4 <[^>]*> 7d6c52d8 subqh_r\.ph t2,t3,t4
+0+00d8 <[^>]*> 7d8d5c58 subqh\.w t3,t4,t5
+0+00dc <[^>]*> 7dae64d8 subqh_r\.w t4,t5,t6
+0+00e0 <[^>]*> 7dae0a30 dpax\.w\.ph \$ac1,t5,t6
+0+00e4 <[^>]*> 7dcf1270 dpsx\.w\.ph \$ac2,t6,t7
+0+00e8 <[^>]*> 7df01e30 dpaqx_s\.w\.ph \$ac3,t7,s0
+0+00ec <[^>]*> 7e1106b0 dpaqx_sa\.w\.ph \$ac0,s0,s1
+0+00f0 <[^>]*> 7e320e70 dpsqx_s\.w\.ph \$ac1,s1,s2
+0+00f4 <[^>]*> 7e5316f0 dpsqx_sa\.w\.ph \$ac2,s2,s3
+ \.\.\.
diff --git a/gas/testsuite/gas/mips/mips32-dspr2.s b/gas/testsuite/gas/mips/mips32-dspr2.s
new file mode 100644
index 000000000000..e22d79807292
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips32-dspr2.s
@@ -0,0 +1,73 @@
+# source file to test assembly of MIPS DSP ASE Rev2 for MIPS32 instructions
+
+ .set noreorder
+ .set noat
+
+ .text
+text_label:
+
+ absq_s.qb $0,$1
+ addu.ph $1,$2,$3
+ addu_s.ph $2,$3,$4
+ adduh.qb $3,$4,$5
+ adduh_r.qb $4,$5,$6
+ append $5,$6,0
+ append $5,$6,31
+ balign $6,$7,0
+ balign $6,$7,1
+ balign $6,$7,2
+ balign $6,$7,3
+ cmpgdu.eq.qb $6,$7,$8
+ cmpgdu.lt.qb $7,$8,$9
+ cmpgdu.le.qb $8,$9,$10
+ dpa.w.ph $ac0,$9,$10
+ dps.w.ph $ac1,$10,$11
+ madd $ac2,$11,$12
+ maddu $ac3,$12,$13
+ msub $ac0,$13,$14
+ msubu $ac1,$14,$15
+ mul.ph $15,$16,$17
+ mul_s.ph $16,$17,$18
+ mulq_rs.w $17,$18,$19
+ mulq_s.ph $18,$19,$20
+ mulq_s.w $19,$20,$21
+ mulsa.w.ph $ac2,$20,$21
+ mult $ac3,$21,$22
+ multu $ac0,$22,$23
+ precr.qb.ph $23,$24,$25
+ precr_sra.ph.w $24,$25,0
+ precr_sra.ph.w $24,$25,31
+ precr_sra_r.ph.w $25,$26,0
+ precr_sra_r.ph.w $25,$26,31
+ prepend $26,$27,0
+ prepend $26,$27,31
+ shra.qb $27,$28,0
+ shra.qb $27,$28,7
+ shra_r.qb $28,$29,0
+ shra_r.qb $28,$29,7
+ shrav.qb $29,$30,$31
+ shrav_r.qb $30,$31,$0
+ shrl.ph $31,$0,0
+ shrl.ph $31,$0,15
+ shrlv.ph $0,$1,$2
+ subu.ph $1,$2,$3
+ subu_s.ph $2,$3,$4
+ subuh.qb $3,$4,$5
+ subuh_r.qb $4,$5,$6
+ addqh.ph $5,$6,$7
+ addqh_r.ph $6,$7,$8
+ addqh.w $7,$8,$9
+ addqh_r.w $8,$9,$10
+ subqh.ph $9,$10,$11
+ subqh_r.ph $10,$11,$12
+ subqh.w $11,$12,$13
+ subqh_r.w $12,$13,$14
+ dpax.w.ph $ac1,$13,$14
+ dpsx.w.ph $ac2,$14,$15
+ dpaqx_s.w.ph $ac3,$15,$16
+ dpaqx_sa.w.ph $ac0,$16,$17
+ dpsqx_s.w.ph $ac1,$17,$18
+ dpsqx_sa.w.ph $ac2,$18,$19
+
+# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .space 8
diff --git a/gas/testsuite/gas/mips/mips32-mt.d b/gas/testsuite/gas/mips/mips32-mt.d
index ffb3e975362e..c64073271b33 100644
--- a/gas/testsuite/gas/mips/mips32-mt.d
+++ b/gas/testsuite/gas/mips/mips32-mt.d
@@ -567,260 +567,68 @@ Disassembly of section .text:
0+08b0 <[^>]*> 418a5824 mttc2 t2,\$11
0+08b4 <[^>]*> 418b6034 mtthc2 t3,\$12
0+08b8 <[^>]*> 418c6825 cttc2 t4,\$13
-0+08bc <[^>]*> 410e6830 mftr t5,t6,1,0,1
-0+08c0 <[^>]*> 410e6831 mftr t5,t6,1,1,1
-0+08c4 <[^>]*> 410e6832 mfthc1 t5,\$f14
-0+08c8 <[^>]*> 410e6833 mftr t5,t6,1,3,1
-0+08cc <[^>]*> 410e6834 mfthc2 t5,\$14
-0+08d0 <[^>]*> 410e6835 mftr t5,t6,1,5,1
-0+08d4 <[^>]*> 410e6836 mftr t5,t6,1,6,1
-0+08d8 <[^>]*> 410e6837 mftr t5,t6,1,7,1
-0+08dc <[^>]*> 410e6820 mftgpr t5,t6
-0+08e0 <[^>]*> 410e6821 mftacx t5,\$ac3
-0+08e4 <[^>]*> 410e6822 mftc1 t5,\$f14
-0+08e8 <[^>]*> 410e6823 cftc1 t5,\$14
-0+08ec <[^>]*> 410e6824 mftc2 t5,\$14
-0+08f0 <[^>]*> 410e6825 cftc2 t5,\$14
-0+08f4 <[^>]*> 410e6826 mftr t5,t6,1,6,0
-0+08f8 <[^>]*> 410e6827 mftr t5,t6,1,7,0
-0+08fc <[^>]*> 410e6830 mftr t5,t6,1,0,1
-0+0900 <[^>]*> 410e6831 mftr t5,t6,1,1,1
-0+0904 <[^>]*> 410e6832 mfthc1 t5,\$f14
-0+0908 <[^>]*> 410e6833 mftr t5,t6,1,3,1
-0+090c <[^>]*> 410e6834 mfthc2 t5,\$14
-0+0910 <[^>]*> 410e6835 mftr t5,t6,1,5,1
-0+0914 <[^>]*> 410e6836 mftr t5,t6,1,6,1
-0+0918 <[^>]*> 410e6837 mftr t5,t6,1,7,1
-0+091c <[^>]*> 410e6820 mftgpr t5,t6
-0+0920 <[^>]*> 410e6821 mftacx t5,\$ac3
-0+0924 <[^>]*> 410e6822 mftc1 t5,\$f14
-0+0928 <[^>]*> 410e6823 cftc1 t5,\$14
-0+092c <[^>]*> 410e6824 mftc2 t5,\$14
-0+0930 <[^>]*> 410e6825 cftc2 t5,\$14
-0+0934 <[^>]*> 410e6826 mftr t5,t6,1,6,0
-0+0938 <[^>]*> 410e6827 mftr t5,t6,1,7,0
-0+093c <[^>]*> 410e6810 mftr t5,t6,0,0,1
-0+0940 <[^>]*> 410e6811 mftr t5,t6,0,1,1
-0+0944 <[^>]*> 410e6812 mftr t5,t6,0,2,1
-0+0948 <[^>]*> 410e6813 mftr t5,t6,0,3,1
-0+094c <[^>]*> 410e6814 mftr t5,t6,0,4,1
-0+0950 <[^>]*> 410e6815 mftr t5,t6,0,5,1
-0+0954 <[^>]*> 410e6816 mftr t5,t6,0,6,1
-0+0958 <[^>]*> 410e6817 mftr t5,t6,0,7,1
-0+095c <[^>]*> 410e6800 mftc0 t5,c0_epc
-0+0960 <[^>]*> 410e6801 mftc0 t5,\$14,1
-0+0964 <[^>]*> 410e6802 mftc0 t5,\$14,2
-0+0968 <[^>]*> 410e6803 mftc0 t5,\$14,3
-0+096c <[^>]*> 410e6804 mftc0 t5,\$14,4
-0+0970 <[^>]*> 410e6805 mftc0 t5,\$14,5
-0+0974 <[^>]*> 410e6806 mftc0 t5,\$14,6
-0+0978 <[^>]*> 410e6807 mftc0 t5,\$14,7
-0+097c <[^>]*> 410e6810 mftr t5,t6,0,0,1
-0+0980 <[^>]*> 410e6811 mftr t5,t6,0,1,1
-0+0984 <[^>]*> 410e6812 mftr t5,t6,0,2,1
-0+0988 <[^>]*> 410e6813 mftr t5,t6,0,3,1
-0+098c <[^>]*> 410e6814 mftr t5,t6,0,4,1
-0+0990 <[^>]*> 410e6815 mftr t5,t6,0,5,1
-0+0994 <[^>]*> 410e6816 mftr t5,t6,0,6,1
-0+0998 <[^>]*> 410e6817 mftr t5,t6,0,7,1
-0+099c <[^>]*> 410e6800 mftc0 t5,c0_epc
-0+09a0 <[^>]*> 410e6801 mftc0 t5,\$14,1
-0+09a4 <[^>]*> 410e6802 mftc0 t5,\$14,2
-0+09a8 <[^>]*> 410e6803 mftc0 t5,\$14,3
-0+09ac <[^>]*> 410e6804 mftc0 t5,\$14,4
-0+09b0 <[^>]*> 410e6805 mftc0 t5,\$14,5
-0+09b4 <[^>]*> 410e6806 mftc0 t5,\$14,6
-0+09b8 <[^>]*> 410e6807 mftc0 t5,\$14,7
-0+09bc <[^>]*> 410e6830 mftr t5,t6,1,0,1
-0+09c0 <[^>]*> 410e6831 mftr t5,t6,1,1,1
-0+09c4 <[^>]*> 410e6832 mfthc1 t5,\$f14
-0+09c8 <[^>]*> 410e6833 mftr t5,t6,1,3,1
-0+09cc <[^>]*> 410e6834 mfthc2 t5,\$14
-0+09d0 <[^>]*> 410e6835 mftr t5,t6,1,5,1
-0+09d4 <[^>]*> 410e6836 mftr t5,t6,1,6,1
-0+09d8 <[^>]*> 410e6837 mftr t5,t6,1,7,1
-0+09dc <[^>]*> 410e6820 mftgpr t5,t6
-0+09e0 <[^>]*> 410e6821 mftacx t5,\$ac3
-0+09e4 <[^>]*> 410e6822 mftc1 t5,\$f14
-0+09e8 <[^>]*> 410e6823 cftc1 t5,\$14
-0+09ec <[^>]*> 410e6824 mftc2 t5,\$14
-0+09f0 <[^>]*> 410e6825 cftc2 t5,\$14
-0+09f4 <[^>]*> 410e6826 mftr t5,t6,1,6,0
-0+09f8 <[^>]*> 410e6827 mftr t5,t6,1,7,0
-0+09fc <[^>]*> 410e6830 mftr t5,t6,1,0,1
-0+0a00 <[^>]*> 410e6831 mftr t5,t6,1,1,1
-0+0a04 <[^>]*> 410e6832 mfthc1 t5,\$f14
-0+0a08 <[^>]*> 410e6833 mftr t5,t6,1,3,1
-0+0a0c <[^>]*> 410e6834 mfthc2 t5,\$14
-0+0a10 <[^>]*> 410e6835 mftr t5,t6,1,5,1
-0+0a14 <[^>]*> 410e6836 mftr t5,t6,1,6,1
-0+0a18 <[^>]*> 410e6837 mftr t5,t6,1,7,1
-0+0a1c <[^>]*> 410e6820 mftgpr t5,t6
-0+0a20 <[^>]*> 410e6821 mftacx t5,\$ac3
-0+0a24 <[^>]*> 410e6822 mftc1 t5,\$f14
-0+0a28 <[^>]*> 410e6823 cftc1 t5,\$14
-0+0a2c <[^>]*> 410e6824 mftc2 t5,\$14
-0+0a30 <[^>]*> 410e6825 cftc2 t5,\$14
-0+0a34 <[^>]*> 410e6826 mftr t5,t6,1,6,0
-0+0a38 <[^>]*> 410e6827 mftr t5,t6,1,7,0
-0+0a3c <[^>]*> 410e6810 mftr t5,t6,0,0,1
-0+0a40 <[^>]*> 410e6811 mftr t5,t6,0,1,1
-0+0a44 <[^>]*> 410e6812 mftr t5,t6,0,2,1
-0+0a48 <[^>]*> 410e6813 mftr t5,t6,0,3,1
-0+0a4c <[^>]*> 410e6814 mftr t5,t6,0,4,1
-0+0a50 <[^>]*> 410e6815 mftr t5,t6,0,5,1
-0+0a54 <[^>]*> 410e6816 mftr t5,t6,0,6,1
-0+0a58 <[^>]*> 410e6817 mftr t5,t6,0,7,1
-0+0a5c <[^>]*> 410e6800 mftc0 t5,c0_epc
-0+0a60 <[^>]*> 410e6801 mftc0 t5,\$14,1
-0+0a64 <[^>]*> 410e6802 mftc0 t5,\$14,2
-0+0a68 <[^>]*> 410e6803 mftc0 t5,\$14,3
-0+0a6c <[^>]*> 410e6804 mftc0 t5,\$14,4
-0+0a70 <[^>]*> 410e6805 mftc0 t5,\$14,5
-0+0a74 <[^>]*> 410e6806 mftc0 t5,\$14,6
-0+0a78 <[^>]*> 410e6807 mftc0 t5,\$14,7
-0+0a7c <[^>]*> 410e6810 mftr t5,t6,0,0,1
-0+0a80 <[^>]*> 410e6811 mftr t5,t6,0,1,1
-0+0a84 <[^>]*> 410e6812 mftr t5,t6,0,2,1
-0+0a88 <[^>]*> 410e6813 mftr t5,t6,0,3,1
-0+0a8c <[^>]*> 410e6814 mftr t5,t6,0,4,1
-0+0a90 <[^>]*> 410e6815 mftr t5,t6,0,5,1
-0+0a94 <[^>]*> 410e6816 mftr t5,t6,0,6,1
-0+0a98 <[^>]*> 410e6817 mftr t5,t6,0,7,1
-0+0a9c <[^>]*> 410e6800 mftc0 t5,c0_epc
-0+0aa0 <[^>]*> 410e6801 mftc0 t5,\$14,1
-0+0aa4 <[^>]*> 410e6802 mftc0 t5,\$14,2
-0+0aa8 <[^>]*> 410e6803 mftc0 t5,\$14,3
-0+0aac <[^>]*> 410e6804 mftc0 t5,\$14,4
-0+0ab0 <[^>]*> 410e6805 mftc0 t5,\$14,5
-0+0ab4 <[^>]*> 410e6806 mftc0 t5,\$14,6
-0+0ab8 <[^>]*> 410e6807 mftc0 t5,\$14,7
-0+0abc <[^>]*> 418d7030 mttr t5,t6,1,0,1
-0+0ac0 <[^>]*> 418d7031 mttr t5,t6,1,1,1
-0+0ac4 <[^>]*> 418d7032 mtthc1 t5,\$f14
-0+0ac8 <[^>]*> 418d7033 mttr t5,t6,1,3,1
-0+0acc <[^>]*> 418d7034 mtthc2 t5,\$14
-0+0ad0 <[^>]*> 418d7035 mttr t5,t6,1,5,1
-0+0ad4 <[^>]*> 418d7036 mttr t5,t6,1,6,1
-0+0ad8 <[^>]*> 418d7037 mttr t5,t6,1,7,1
-0+0adc <[^>]*> 418d7020 mttgpr t5,t6
-0+0ae0 <[^>]*> 418d7021 mttacx t5,\$ac3
-0+0ae4 <[^>]*> 418d7022 mttc1 t5,\$f14
-0+0ae8 <[^>]*> 418d7023 cttc1 t5,\$14
-0+0aec <[^>]*> 418d7024 mttc2 t5,\$14
-0+0af0 <[^>]*> 418d7025 cttc2 t5,\$14
-0+0af4 <[^>]*> 418d7026 mttr t5,t6,1,6,0
-0+0af8 <[^>]*> 418d7027 mttr t5,t6,1,7,0
-0+0afc <[^>]*> 418d7030 mttr t5,t6,1,0,1
-0+0b00 <[^>]*> 418d7031 mttr t5,t6,1,1,1
-0+0b04 <[^>]*> 418d7032 mtthc1 t5,\$f14
-0+0b08 <[^>]*> 418d7033 mttr t5,t6,1,3,1
-0+0b0c <[^>]*> 418d7034 mtthc2 t5,\$14
-0+0b10 <[^>]*> 418d7035 mttr t5,t6,1,5,1
-0+0b14 <[^>]*> 418d7036 mttr t5,t6,1,6,1
-0+0b18 <[^>]*> 418d7037 mttr t5,t6,1,7,1
-0+0b1c <[^>]*> 418d7020 mttgpr t5,t6
-0+0b20 <[^>]*> 418d7021 mttacx t5,\$ac3
-0+0b24 <[^>]*> 418d7022 mttc1 t5,\$f14
-0+0b28 <[^>]*> 418d7023 cttc1 t5,\$14
-0+0b2c <[^>]*> 418d7024 mttc2 t5,\$14
-0+0b30 <[^>]*> 418d7025 cttc2 t5,\$14
-0+0b34 <[^>]*> 418d7026 mttr t5,t6,1,6,0
-0+0b38 <[^>]*> 418d7027 mttr t5,t6,1,7,0
-0+0b3c <[^>]*> 418d7010 mttr t5,t6,0,0,1
-0+0b40 <[^>]*> 418d7011 mttr t5,t6,0,1,1
-0+0b44 <[^>]*> 418d7012 mttr t5,t6,0,2,1
-0+0b48 <[^>]*> 418d7013 mttr t5,t6,0,3,1
-0+0b4c <[^>]*> 418d7014 mttr t5,t6,0,4,1
-0+0b50 <[^>]*> 418d7015 mttr t5,t6,0,5,1
-0+0b54 <[^>]*> 418d7016 mttr t5,t6,0,6,1
-0+0b58 <[^>]*> 418d7017 mttr t5,t6,0,7,1
-0+0b5c <[^>]*> 418d7000 mttc0 t5,c0_epc
-0+0b60 <[^>]*> 418d7001 mttc0 t5,\$14,1
-0+0b64 <[^>]*> 418d7002 mttc0 t5,\$14,2
-0+0b68 <[^>]*> 418d7003 mttc0 t5,\$14,3
-0+0b6c <[^>]*> 418d7004 mttc0 t5,\$14,4
-0+0b70 <[^>]*> 418d7005 mttc0 t5,\$14,5
-0+0b74 <[^>]*> 418d7006 mttc0 t5,\$14,6
-0+0b78 <[^>]*> 418d7007 mttc0 t5,\$14,7
-0+0b7c <[^>]*> 418d7010 mttr t5,t6,0,0,1
-0+0b80 <[^>]*> 418d7011 mttr t5,t6,0,1,1
-0+0b84 <[^>]*> 418d7012 mttr t5,t6,0,2,1
-0+0b88 <[^>]*> 418d7013 mttr t5,t6,0,3,1
-0+0b8c <[^>]*> 418d7014 mttr t5,t6,0,4,1
-0+0b90 <[^>]*> 418d7015 mttr t5,t6,0,5,1
-0+0b94 <[^>]*> 418d7016 mttr t5,t6,0,6,1
-0+0b98 <[^>]*> 418d7017 mttr t5,t6,0,7,1
-0+0b9c <[^>]*> 418d7000 mttc0 t5,c0_epc
-0+0ba0 <[^>]*> 418d7001 mttc0 t5,\$14,1
-0+0ba4 <[^>]*> 418d7002 mttc0 t5,\$14,2
-0+0ba8 <[^>]*> 418d7003 mttc0 t5,\$14,3
-0+0bac <[^>]*> 418d7004 mttc0 t5,\$14,4
-0+0bb0 <[^>]*> 418d7005 mttc0 t5,\$14,5
-0+0bb4 <[^>]*> 418d7006 mttc0 t5,\$14,6
-0+0bb8 <[^>]*> 418d7007 mttc0 t5,\$14,7
-0+0bbc <[^>]*> 418d7030 mttr t5,t6,1,0,1
-0+0bc0 <[^>]*> 418d7031 mttr t5,t6,1,1,1
-0+0bc4 <[^>]*> 418d7032 mtthc1 t5,\$f14
-0+0bc8 <[^>]*> 418d7033 mttr t5,t6,1,3,1
-0+0bcc <[^>]*> 418d7034 mtthc2 t5,\$14
-0+0bd0 <[^>]*> 418d7035 mttr t5,t6,1,5,1
-0+0bd4 <[^>]*> 418d7036 mttr t5,t6,1,6,1
-0+0bd8 <[^>]*> 418d7037 mttr t5,t6,1,7,1
-0+0bdc <[^>]*> 418d7020 mttgpr t5,t6
-0+0be0 <[^>]*> 418d7021 mttacx t5,\$ac3
-0+0be4 <[^>]*> 418d7022 mttc1 t5,\$f14
-0+0be8 <[^>]*> 418d7023 cttc1 t5,\$14
-0+0bec <[^>]*> 418d7024 mttc2 t5,\$14
-0+0bf0 <[^>]*> 418d7025 cttc2 t5,\$14
-0+0bf4 <[^>]*> 418d7026 mttr t5,t6,1,6,0
-0+0bf8 <[^>]*> 418d7027 mttr t5,t6,1,7,0
-0+0bfc <[^>]*> 418d7030 mttr t5,t6,1,0,1
-0+0c00 <[^>]*> 418d7031 mttr t5,t6,1,1,1
-0+0c04 <[^>]*> 418d7032 mtthc1 t5,\$f14
-0+0c08 <[^>]*> 418d7033 mttr t5,t6,1,3,1
-0+0c0c <[^>]*> 418d7034 mtthc2 t5,\$14
-0+0c10 <[^>]*> 418d7035 mttr t5,t6,1,5,1
-0+0c14 <[^>]*> 418d7036 mttr t5,t6,1,6,1
-0+0c18 <[^>]*> 418d7037 mttr t5,t6,1,7,1
-0+0c1c <[^>]*> 418d7020 mttgpr t5,t6
-0+0c20 <[^>]*> 418d7021 mttacx t5,\$ac3
-0+0c24 <[^>]*> 418d7022 mttc1 t5,\$f14
-0+0c28 <[^>]*> 418d7023 cttc1 t5,\$14
-0+0c2c <[^>]*> 418d7024 mttc2 t5,\$14
-0+0c30 <[^>]*> 418d7025 cttc2 t5,\$14
-0+0c34 <[^>]*> 418d7026 mttr t5,t6,1,6,0
-0+0c38 <[^>]*> 418d7027 mttr t5,t6,1,7,0
-0+0c3c <[^>]*> 418d7010 mttr t5,t6,0,0,1
-0+0c40 <[^>]*> 418d7011 mttr t5,t6,0,1,1
-0+0c44 <[^>]*> 418d7012 mttr t5,t6,0,2,1
-0+0c48 <[^>]*> 418d7013 mttr t5,t6,0,3,1
-0+0c4c <[^>]*> 418d7014 mttr t5,t6,0,4,1
-0+0c50 <[^>]*> 418d7015 mttr t5,t6,0,5,1
-0+0c54 <[^>]*> 418d7016 mttr t5,t6,0,6,1
-0+0c58 <[^>]*> 418d7017 mttr t5,t6,0,7,1
-0+0c5c <[^>]*> 418d7000 mttc0 t5,c0_epc
-0+0c60 <[^>]*> 418d7001 mttc0 t5,\$14,1
-0+0c64 <[^>]*> 418d7002 mttc0 t5,\$14,2
-0+0c68 <[^>]*> 418d7003 mttc0 t5,\$14,3
-0+0c6c <[^>]*> 418d7004 mttc0 t5,\$14,4
-0+0c70 <[^>]*> 418d7005 mttc0 t5,\$14,5
-0+0c74 <[^>]*> 418d7006 mttc0 t5,\$14,6
-0+0c78 <[^>]*> 418d7007 mttc0 t5,\$14,7
-0+0c7c <[^>]*> 418d7010 mttr t5,t6,0,0,1
-0+0c80 <[^>]*> 418d7011 mttr t5,t6,0,1,1
-0+0c84 <[^>]*> 418d7012 mttr t5,t6,0,2,1
-0+0c88 <[^>]*> 418d7013 mttr t5,t6,0,3,1
-0+0c8c <[^>]*> 418d7014 mttr t5,t6,0,4,1
-0+0c90 <[^>]*> 418d7015 mttr t5,t6,0,5,1
-0+0c94 <[^>]*> 418d7016 mttr t5,t6,0,6,1
-0+0c98 <[^>]*> 418d7017 mttr t5,t6,0,7,1
-0+0c9c <[^>]*> 418d7000 mttc0 t5,c0_epc
-0+0ca0 <[^>]*> 418d7001 mttc0 t5,\$14,1
-0+0ca4 <[^>]*> 418d7002 mttc0 t5,\$14,2
-0+0ca8 <[^>]*> 418d7003 mttc0 t5,\$14,3
-0+0cac <[^>]*> 418d7004 mttc0 t5,\$14,4
-0+0cb0 <[^>]*> 418d7005 mttc0 t5,\$14,5
-0+0cb4 <[^>]*> 418d7006 mttc0 t5,\$14,6
-0+0cb8 <[^>]*> 418d7007 mttc0 t5,\$14,7
+0+08bc <[^>]*> 410e6800 mftc0 t5,c0_epc
+0+08c0 <[^>]*> 410e6801 mftc0 t5,\$14,1
+0+08c4 <[^>]*> 410e6802 mftc0 t5,\$14,2
+0+08c8 <[^>]*> 410e6803 mftc0 t5,\$14,3
+0+08cc <[^>]*> 410e6804 mftc0 t5,\$14,4
+0+08d0 <[^>]*> 410e6805 mftc0 t5,\$14,5
+0+08d4 <[^>]*> 410e6806 mftc0 t5,\$14,6
+0+08d8 <[^>]*> 410e6807 mftc0 t5,\$14,7
+0+08dc <[^>]*> 410e6810 mftr t5,t6,0,0,1
+0+08e0 <[^>]*> 410e6811 mftr t5,t6,0,1,1
+0+08e4 <[^>]*> 410e6812 mftr t5,t6,0,2,1
+0+08e8 <[^>]*> 410e6813 mftr t5,t6,0,3,1
+0+08ec <[^>]*> 410e6814 mftr t5,t6,0,4,1
+0+08f0 <[^>]*> 410e6815 mftr t5,t6,0,5,1
+0+08f4 <[^>]*> 410e6816 mftr t5,t6,0,6,1
+0+08f8 <[^>]*> 410e6817 mftr t5,t6,0,7,1
+0+08fc <[^>]*> 410e6820 mftgpr t5,t6
+0+0900 <[^>]*> 410e6821 mftacx t5,\$ac3
+0+0904 <[^>]*> 410e6822 mftc1 t5,\$f14
+0+0908 <[^>]*> 410e6823 cftc1 t5,\$14
+0+090c <[^>]*> 410e6824 mftc2 t5,\$14
+0+0910 <[^>]*> 410e6825 cftc2 t5,\$14
+0+0914 <[^>]*> 410e6826 mftr t5,t6,1,6,0
+0+0918 <[^>]*> 410e6827 mftr t5,t6,1,7,0
+0+091c <[^>]*> 410e6830 mftr t5,t6,1,0,1
+0+0920 <[^>]*> 410e6831 mftr t5,t6,1,1,1
+0+0924 <[^>]*> 410e6832 mfthc1 t5,\$f14
+0+0928 <[^>]*> 410e6833 mftr t5,t6,1,3,1
+0+092c <[^>]*> 410e6834 mfthc2 t5,\$14
+0+0930 <[^>]*> 410e6835 mftr t5,t6,1,5,1
+0+0934 <[^>]*> 410e6836 mftr t5,t6,1,6,1
+0+0938 <[^>]*> 410e6837 mftr t5,t6,1,7,1
+0+093c <[^>]*> 418d7000 mttc0 t5,c0_epc
+0+0940 <[^>]*> 418d7001 mttc0 t5,\$14,1
+0+0944 <[^>]*> 418d7002 mttc0 t5,\$14,2
+0+0948 <[^>]*> 418d7003 mttc0 t5,\$14,3
+0+094c <[^>]*> 418d7004 mttc0 t5,\$14,4
+0+0950 <[^>]*> 418d7005 mttc0 t5,\$14,5
+0+0954 <[^>]*> 418d7006 mttc0 t5,\$14,6
+0+0958 <[^>]*> 418d7007 mttc0 t5,\$14,7
+0+095c <[^>]*> 418d7010 mttr t5,t6,0,0,1
+0+0960 <[^>]*> 418d7011 mttr t5,t6,0,1,1
+0+0964 <[^>]*> 418d7012 mttr t5,t6,0,2,1
+0+0968 <[^>]*> 418d7013 mttr t5,t6,0,3,1
+0+096c <[^>]*> 418d7014 mttr t5,t6,0,4,1
+0+0970 <[^>]*> 418d7015 mttr t5,t6,0,5,1
+0+0974 <[^>]*> 418d7016 mttr t5,t6,0,6,1
+0+0978 <[^>]*> 418d7017 mttr t5,t6,0,7,1
+0+097c <[^>]*> 418d7020 mttgpr t5,t6
+0+0980 <[^>]*> 418d7021 mttacx t5,\$ac3
+0+0984 <[^>]*> 418d7022 mttc1 t5,\$f14
+0+0988 <[^>]*> 418d7023 cttc1 t5,\$14
+0+098c <[^>]*> 418d7024 mttc2 t5,\$14
+0+0990 <[^>]*> 418d7025 cttc2 t5,\$14
+0+0994 <[^>]*> 418d7026 mttr t5,t6,1,6,0
+0+0998 <[^>]*> 418d7027 mttr t5,t6,1,7,0
+0+099c <[^>]*> 418d7030 mttr t5,t6,1,0,1
+0+09a0 <[^>]*> 418d7031 mttr t5,t6,1,1,1
+0+09a4 <[^>]*> 418d7032 mtthc1 t5,\$f14
+0+09a8 <[^>]*> 418d7033 mttr t5,t6,1,3,1
+0+09ac <[^>]*> 418d7034 mtthc2 t5,\$14
+0+09b0 <[^>]*> 418d7035 mttr t5,t6,1,5,1
+0+09b4 <[^>]*> 418d7036 mttr t5,t6,1,6,1
+0+09b8 <[^>]*> 418d7037 mttr t5,t6,1,7,1
\.\.\.
diff --git a/gas/testsuite/gas/mips/mips32-mt.l b/gas/testsuite/gas/mips/mips32-mt.l
deleted file mode 100644
index a3f32f27de12..000000000000
--- a/gas/testsuite/gas/mips/mips32-mt.l
+++ /dev/null
@@ -1,257 +0,0 @@
-.*: Assembler messages:
-.*:568: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:568: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:569: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:569: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:570: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:570: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:571: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:571: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:572: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:572: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:573: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:573: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:574: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:574: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:575: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:575: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:576: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:577: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:578: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:579: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:580: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:581: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:582: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:583: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:584: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:585: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:586: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:587: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:588: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:589: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:590: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:591: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:592: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:592: Warning: MT immediate not in range 0..1 \(2\)
-.*:593: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:593: Warning: MT immediate not in range 0..1 \(2\)
-.*:594: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:594: Warning: MT immediate not in range 0..1 \(2\)
-.*:595: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:595: Warning: MT immediate not in range 0..1 \(2\)
-.*:596: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:596: Warning: MT immediate not in range 0..1 \(2\)
-.*:597: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:597: Warning: MT immediate not in range 0..1 \(2\)
-.*:598: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:598: Warning: MT immediate not in range 0..1 \(2\)
-.*:599: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:599: Warning: MT immediate not in range 0..1 \(2\)
-.*:600: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:601: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:602: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:603: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:604: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:605: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:606: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:607: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:624: Warning: MT immediate not in range 0..1 \(2\)
-.*:625: Warning: MT immediate not in range 0..1 \(2\)
-.*:626: Warning: MT immediate not in range 0..1 \(2\)
-.*:627: Warning: MT immediate not in range 0..1 \(2\)
-.*:628: Warning: MT immediate not in range 0..1 \(2\)
-.*:629: Warning: MT immediate not in range 0..1 \(2\)
-.*:630: Warning: MT immediate not in range 0..1 \(2\)
-.*:631: Warning: MT immediate not in range 0..1 \(2\)
-.*:632: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:633: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:634: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:635: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:636: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:637: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:638: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:639: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:656: Warning: MT immediate not in range 0..1 \(2\)
-.*:657: Warning: MT immediate not in range 0..1 \(2\)
-.*:658: Warning: MT immediate not in range 0..1 \(2\)
-.*:659: Warning: MT immediate not in range 0..1 \(2\)
-.*:660: Warning: MT immediate not in range 0..1 \(2\)
-.*:661: Warning: MT immediate not in range 0..1 \(2\)
-.*:662: Warning: MT immediate not in range 0..1 \(2\)
-.*:663: Warning: MT immediate not in range 0..1 \(2\)
-.*:664: Warning: MT immediate not in range 0..1 \(2\)
-.*:664: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:665: Warning: MT immediate not in range 0..1 \(2\)
-.*:665: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:666: Warning: MT immediate not in range 0..1 \(2\)
-.*:666: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:667: Warning: MT immediate not in range 0..1 \(2\)
-.*:667: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:668: Warning: MT immediate not in range 0..1 \(2\)
-.*:668: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:669: Warning: MT immediate not in range 0..1 \(2\)
-.*:669: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:670: Warning: MT immediate not in range 0..1 \(2\)
-.*:670: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:671: Warning: MT immediate not in range 0..1 \(2\)
-.*:671: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:672: Warning: MT immediate not in range 0..1 \(2\)
-.*:673: Warning: MT immediate not in range 0..1 \(2\)
-.*:674: Warning: MT immediate not in range 0..1 \(2\)
-.*:675: Warning: MT immediate not in range 0..1 \(2\)
-.*:676: Warning: MT immediate not in range 0..1 \(2\)
-.*:677: Warning: MT immediate not in range 0..1 \(2\)
-.*:678: Warning: MT immediate not in range 0..1 \(2\)
-.*:679: Warning: MT immediate not in range 0..1 \(2\)
-.*:680: Warning: MT immediate not in range 0..1 \(2\)
-.*:681: Warning: MT immediate not in range 0..1 \(2\)
-.*:682: Warning: MT immediate not in range 0..1 \(2\)
-.*:683: Warning: MT immediate not in range 0..1 \(2\)
-.*:684: Warning: MT immediate not in range 0..1 \(2\)
-.*:685: Warning: MT immediate not in range 0..1 \(2\)
-.*:686: Warning: MT immediate not in range 0..1 \(2\)
-.*:687: Warning: MT immediate not in range 0..1 \(2\)
-.*:688: Warning: MT immediate not in range 0..1 \(2\)
-.*:688: Warning: MT immediate not in range 0..1 \(2\)
-.*:689: Warning: MT immediate not in range 0..1 \(2\)
-.*:689: Warning: MT immediate not in range 0..1 \(2\)
-.*:690: Warning: MT immediate not in range 0..1 \(2\)
-.*:690: Warning: MT immediate not in range 0..1 \(2\)
-.*:691: Warning: MT immediate not in range 0..1 \(2\)
-.*:691: Warning: MT immediate not in range 0..1 \(2\)
-.*:692: Warning: MT immediate not in range 0..1 \(2\)
-.*:692: Warning: MT immediate not in range 0..1 \(2\)
-.*:693: Warning: MT immediate not in range 0..1 \(2\)
-.*:693: Warning: MT immediate not in range 0..1 \(2\)
-.*:694: Warning: MT immediate not in range 0..1 \(2\)
-.*:694: Warning: MT immediate not in range 0..1 \(2\)
-.*:695: Warning: MT immediate not in range 0..1 \(2\)
-.*:695: Warning: MT immediate not in range 0..1 \(2\)
-.*:696: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:696: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:697: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:697: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:698: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:698: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:699: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:699: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:700: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:700: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:701: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:701: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:702: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:702: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:703: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:703: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:704: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:705: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:706: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:707: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:708: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:709: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:710: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:711: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:712: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:713: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:714: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:715: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:716: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:717: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:718: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:719: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:720: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:720: Warning: MT immediate not in range 0..1 \(2\)
-.*:721: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:721: Warning: MT immediate not in range 0..1 \(2\)
-.*:722: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:722: Warning: MT immediate not in range 0..1 \(2\)
-.*:723: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:723: Warning: MT immediate not in range 0..1 \(2\)
-.*:724: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:724: Warning: MT immediate not in range 0..1 \(2\)
-.*:725: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:725: Warning: MT immediate not in range 0..1 \(2\)
-.*:726: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:726: Warning: MT immediate not in range 0..1 \(2\)
-.*:727: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:727: Warning: MT immediate not in range 0..1 \(2\)
-.*:728: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:729: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:730: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:731: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:732: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:733: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:734: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:735: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:752: Warning: MT immediate not in range 0..1 \(2\)
-.*:753: Warning: MT immediate not in range 0..1 \(2\)
-.*:754: Warning: MT immediate not in range 0..1 \(2\)
-.*:755: Warning: MT immediate not in range 0..1 \(2\)
-.*:756: Warning: MT immediate not in range 0..1 \(2\)
-.*:757: Warning: MT immediate not in range 0..1 \(2\)
-.*:758: Warning: MT immediate not in range 0..1 \(2\)
-.*:759: Warning: MT immediate not in range 0..1 \(2\)
-.*:760: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:761: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:762: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:763: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:764: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:765: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:766: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:767: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:784: Warning: MT immediate not in range 0..1 \(2\)
-.*:785: Warning: MT immediate not in range 0..1 \(2\)
-.*:786: Warning: MT immediate not in range 0..1 \(2\)
-.*:787: Warning: MT immediate not in range 0..1 \(2\)
-.*:788: Warning: MT immediate not in range 0..1 \(2\)
-.*:789: Warning: MT immediate not in range 0..1 \(2\)
-.*:790: Warning: MT immediate not in range 0..1 \(2\)
-.*:791: Warning: MT immediate not in range 0..1 \(2\)
-.*:792: Warning: MT immediate not in range 0..1 \(2\)
-.*:792: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:793: Warning: MT immediate not in range 0..1 \(2\)
-.*:793: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:794: Warning: MT immediate not in range 0..1 \(2\)
-.*:794: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:795: Warning: MT immediate not in range 0..1 \(2\)
-.*:795: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:796: Warning: MT immediate not in range 0..1 \(2\)
-.*:796: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:797: Warning: MT immediate not in range 0..1 \(2\)
-.*:797: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:798: Warning: MT immediate not in range 0..1 \(2\)
-.*:798: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:799: Warning: MT immediate not in range 0..1 \(2\)
-.*:799: Warning: MT immediate not in range 0..1 \([0-9]*\)
-.*:800: Warning: MT immediate not in range 0..1 \(2\)
-.*:801: Warning: MT immediate not in range 0..1 \(2\)
-.*:802: Warning: MT immediate not in range 0..1 \(2\)
-.*:803: Warning: MT immediate not in range 0..1 \(2\)
-.*:804: Warning: MT immediate not in range 0..1 \(2\)
-.*:805: Warning: MT immediate not in range 0..1 \(2\)
-.*:806: Warning: MT immediate not in range 0..1 \(2\)
-.*:807: Warning: MT immediate not in range 0..1 \(2\)
-.*:808: Warning: MT immediate not in range 0..1 \(2\)
-.*:809: Warning: MT immediate not in range 0..1 \(2\)
-.*:810: Warning: MT immediate not in range 0..1 \(2\)
-.*:811: Warning: MT immediate not in range 0..1 \(2\)
-.*:812: Warning: MT immediate not in range 0..1 \(2\)
-.*:813: Warning: MT immediate not in range 0..1 \(2\)
-.*:814: Warning: MT immediate not in range 0..1 \(2\)
-.*:815: Warning: MT immediate not in range 0..1 \(2\)
-.*:816: Warning: MT immediate not in range 0..1 \(2\)
-.*:816: Warning: MT immediate not in range 0..1 \(2\)
-.*:817: Warning: MT immediate not in range 0..1 \(2\)
-.*:817: Warning: MT immediate not in range 0..1 \(2\)
-.*:818: Warning: MT immediate not in range 0..1 \(2\)
-.*:818: Warning: MT immediate not in range 0..1 \(2\)
-.*:819: Warning: MT immediate not in range 0..1 \(2\)
-.*:819: Warning: MT immediate not in range 0..1 \(2\)
-.*:820: Warning: MT immediate not in range 0..1 \(2\)
-.*:820: Warning: MT immediate not in range 0..1 \(2\)
-.*:821: Warning: MT immediate not in range 0..1 \(2\)
-.*:821: Warning: MT immediate not in range 0..1 \(2\)
-.*:822: Warning: MT immediate not in range 0..1 \(2\)
-.*:822: Warning: MT immediate not in range 0..1 \(2\)
-.*:823: Warning: MT immediate not in range 0..1 \(2\)
-.*:823: Warning: MT immediate not in range 0..1 \(2\)
diff --git a/gas/testsuite/gas/mips/mips32-mt.s b/gas/testsuite/gas/mips/mips32-mt.s
index a3d8eeda0de3..8363256c6834 100644
--- a/gas/testsuite/gas/mips/mips32-mt.s
+++ b/gas/testsuite/gas/mips/mips32-mt.s
@@ -565,46 +565,6 @@ text_label:
mttc2 $10,$11
mtthc2 $11,$12
cttc2 $12,$13
- mftr $13,$14,-1,0,-1
- mftr $13,$14,-1,1,-1
- mftr $13,$14,-1,2,-1
- mftr $13,$14,-1,3,-1
- mftr $13,$14,-1,4,-1
- mftr $13,$14,-1,5,-1
- mftr $13,$14,-1,6,-1
- mftr $13,$14,-1,7,-1
- mftr $13,$14,-1,0,0
- mftr $13,$14,-1,1,0
- mftr $13,$14,-1,2,0
- mftr $13,$14,-1,3,0
- mftr $13,$14,-1,4,0
- mftr $13,$14,-1,5,0
- mftr $13,$14,-1,6,0
- mftr $13,$14,-1,7,0
- mftr $13,$14,-1,0,1
- mftr $13,$14,-1,1,1
- mftr $13,$14,-1,2,1
- mftr $13,$14,-1,3,1
- mftr $13,$14,-1,4,1
- mftr $13,$14,-1,5,1
- mftr $13,$14,-1,6,1
- mftr $13,$14,-1,7,1
- mftr $13,$14,-1,0,2
- mftr $13,$14,-1,1,2
- mftr $13,$14,-1,2,2
- mftr $13,$14,-1,3,2
- mftr $13,$14,-1,4,2
- mftr $13,$14,-1,5,2
- mftr $13,$14,-1,6,2
- mftr $13,$14,-1,7,2
- mftr $13,$14,0,0,-1
- mftr $13,$14,0,1,-1
- mftr $13,$14,0,2,-1
- mftr $13,$14,0,3,-1
- mftr $13,$14,0,4,-1
- mftr $13,$14,0,5,-1
- mftr $13,$14,0,6,-1
- mftr $13,$14,0,7,-1
mftr $13,$14,0,0,0
mftr $13,$14,0,1,0
mftr $13,$14,0,2,0
@@ -621,22 +581,6 @@ text_label:
mftr $13,$14,0,5,1
mftr $13,$14,0,6,1
mftr $13,$14,0,7,1
- mftr $13,$14,0,0,2
- mftr $13,$14,0,1,2
- mftr $13,$14,0,2,2
- mftr $13,$14,0,3,2
- mftr $13,$14,0,4,2
- mftr $13,$14,0,5,2
- mftr $13,$14,0,6,2
- mftr $13,$14,0,7,2
- mftr $13,$14,1,0,-1
- mftr $13,$14,1,1,-1
- mftr $13,$14,1,2,-1
- mftr $13,$14,1,3,-1
- mftr $13,$14,1,4,-1
- mftr $13,$14,1,5,-1
- mftr $13,$14,1,6,-1
- mftr $13,$14,1,7,-1
mftr $13,$14,1,0,0
mftr $13,$14,1,1,0
mftr $13,$14,1,2,0
@@ -653,86 +597,6 @@ text_label:
mftr $13,$14,1,5,1
mftr $13,$14,1,6,1
mftr $13,$14,1,7,1
- mftr $13,$14,1,0,2
- mftr $13,$14,1,1,2
- mftr $13,$14,1,2,2
- mftr $13,$14,1,3,2
- mftr $13,$14,1,4,2
- mftr $13,$14,1,5,2
- mftr $13,$14,1,6,2
- mftr $13,$14,1,7,2
- mftr $13,$14,2,0,-1
- mftr $13,$14,2,1,-1
- mftr $13,$14,2,2,-1
- mftr $13,$14,2,3,-1
- mftr $13,$14,2,4,-1
- mftr $13,$14,2,5,-1
- mftr $13,$14,2,6,-1
- mftr $13,$14,2,7,-1
- mftr $13,$14,2,0,0
- mftr $13,$14,2,1,0
- mftr $13,$14,2,2,0
- mftr $13,$14,2,3,0
- mftr $13,$14,2,4,0
- mftr $13,$14,2,5,0
- mftr $13,$14,2,6,0
- mftr $13,$14,2,7,0
- mftr $13,$14,2,0,1
- mftr $13,$14,2,1,1
- mftr $13,$14,2,2,1
- mftr $13,$14,2,3,1
- mftr $13,$14,2,4,1
- mftr $13,$14,2,5,1
- mftr $13,$14,2,6,1
- mftr $13,$14,2,7,1
- mftr $13,$14,2,0,2
- mftr $13,$14,2,1,2
- mftr $13,$14,2,2,2
- mftr $13,$14,2,3,2
- mftr $13,$14,2,4,2
- mftr $13,$14,2,5,2
- mftr $13,$14,2,6,2
- mftr $13,$14,2,7,2
- mttr $13,$14,-1,0,-1
- mttr $13,$14,-1,1,-1
- mttr $13,$14,-1,2,-1
- mttr $13,$14,-1,3,-1
- mttr $13,$14,-1,4,-1
- mttr $13,$14,-1,5,-1
- mttr $13,$14,-1,6,-1
- mttr $13,$14,-1,7,-1
- mttr $13,$14,-1,0,0
- mttr $13,$14,-1,1,0
- mttr $13,$14,-1,2,0
- mttr $13,$14,-1,3,0
- mttr $13,$14,-1,4,0
- mttr $13,$14,-1,5,0
- mttr $13,$14,-1,6,0
- mttr $13,$14,-1,7,0
- mttr $13,$14,-1,0,1
- mttr $13,$14,-1,1,1
- mttr $13,$14,-1,2,1
- mttr $13,$14,-1,3,1
- mttr $13,$14,-1,4,1
- mttr $13,$14,-1,5,1
- mttr $13,$14,-1,6,1
- mttr $13,$14,-1,7,1
- mttr $13,$14,-1,0,2
- mttr $13,$14,-1,1,2
- mttr $13,$14,-1,2,2
- mttr $13,$14,-1,3,2
- mttr $13,$14,-1,4,2
- mttr $13,$14,-1,5,2
- mttr $13,$14,-1,6,2
- mttr $13,$14,-1,7,2
- mttr $13,$14,0,0,-1
- mttr $13,$14,0,1,-1
- mttr $13,$14,0,2,-1
- mttr $13,$14,0,3,-1
- mttr $13,$14,0,4,-1
- mttr $13,$14,0,5,-1
- mttr $13,$14,0,6,-1
- mttr $13,$14,0,7,-1
mttr $13,$14,0,0,0
mttr $13,$14,0,1,0
mttr $13,$14,0,2,0
@@ -749,22 +613,6 @@ text_label:
mttr $13,$14,0,5,1
mttr $13,$14,0,6,1
mttr $13,$14,0,7,1
- mttr $13,$14,0,0,2
- mttr $13,$14,0,1,2
- mttr $13,$14,0,2,2
- mttr $13,$14,0,3,2
- mttr $13,$14,0,4,2
- mttr $13,$14,0,5,2
- mttr $13,$14,0,6,2
- mttr $13,$14,0,7,2
- mttr $13,$14,1,0,-1
- mttr $13,$14,1,1,-1
- mttr $13,$14,1,2,-1
- mttr $13,$14,1,3,-1
- mttr $13,$14,1,4,-1
- mttr $13,$14,1,5,-1
- mttr $13,$14,1,6,-1
- mttr $13,$14,1,7,-1
mttr $13,$14,1,0,0
mttr $13,$14,1,1,0
mttr $13,$14,1,2,0
@@ -781,46 +629,6 @@ text_label:
mttr $13,$14,1,5,1
mttr $13,$14,1,6,1
mttr $13,$14,1,7,1
- mttr $13,$14,1,0,2
- mttr $13,$14,1,1,2
- mttr $13,$14,1,2,2
- mttr $13,$14,1,3,2
- mttr $13,$14,1,4,2
- mttr $13,$14,1,5,2
- mttr $13,$14,1,6,2
- mttr $13,$14,1,7,2
- mttr $13,$14,2,0,-1
- mttr $13,$14,2,1,-1
- mttr $13,$14,2,2,-1
- mttr $13,$14,2,3,-1
- mttr $13,$14,2,4,-1
- mttr $13,$14,2,5,-1
- mttr $13,$14,2,6,-1
- mttr $13,$14,2,7,-1
- mttr $13,$14,2,0,0
- mttr $13,$14,2,1,0
- mttr $13,$14,2,2,0
- mttr $13,$14,2,3,0
- mttr $13,$14,2,4,0
- mttr $13,$14,2,5,0
- mttr $13,$14,2,6,0
- mttr $13,$14,2,7,0
- mttr $13,$14,2,0,1
- mttr $13,$14,2,1,1
- mttr $13,$14,2,2,1
- mttr $13,$14,2,3,1
- mttr $13,$14,2,4,1
- mttr $13,$14,2,5,1
- mttr $13,$14,2,6,1
- mttr $13,$14,2,7,1
- mttr $13,$14,2,0,2
- mttr $13,$14,2,1,2
- mttr $13,$14,2,2,2
- mttr $13,$14,2,3,2
- mttr $13,$14,2,4,2
- mttr $13,$14,2,5,2
- mttr $13,$14,2,6,2
- mttr $13,$14,2,7,2
# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
.space 8
diff --git a/gas/testsuite/gas/mips/mips32-sf32.d b/gas/testsuite/gas/mips/mips32-sf32.d
new file mode 100644
index 000000000000..4de9844d2615
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips32-sf32.d
@@ -0,0 +1,19 @@
+#objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric
+#name: MIPS32 odd single-precision float registers
+#as: -32
+
+# Check MIPS32 instruction assembly
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 3c013f80 lui \$1,0x3f80
+0+0004 <[^>]*> 44810800 mtc1 \$1,\$f1
+0+0008 <[^>]*> c783c000 lwc1 \$f3,-16384\(\$28\)
+ 8: R_MIPS_LITERAL \.lit4\+0x4000
+0+000c <[^>]*> 46030940 add.s \$f5,\$f1,\$f3
+0+0010 <[^>]*> 46003a21 cvt.d.s \$f8,\$f7
+0+0014 <[^>]*> 46803a21 cvt.d.w \$f8,\$f7
+0+0018 <[^>]*> 462041e0 cvt.s.d \$f7,\$f8
+0+001c <[^>]*> 462041cd trunc.w.d \$f7,\$f8
+ \.\.\.
diff --git a/gas/testsuite/gas/mips/mips32-sf32.s b/gas/testsuite/gas/mips/mips32-sf32.s
new file mode 100644
index 000000000000..68b7e4ea7603
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips32-sf32.s
@@ -0,0 +1,14 @@
+
+ .text
+func:
+ .set noreorder
+ li.s $f1, 1.0
+ li.s $f3, 1.9
+ add.s $f5, $f1, $f3
+ cvt.d.s $f8,$f7
+ cvt.d.w $f8,$f7
+ cvt.s.d $f7,$f8
+ trunc.w.d $f7,$f8
+
+# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .space 8
diff --git a/gas/testsuite/gas/mips/mips32.d b/gas/testsuite/gas/mips/mips32.d
index cb226d8f43b0..14693fc84ecc 100644
--- a/gas/testsuite/gas/mips/mips32.d
+++ b/gas/testsuite/gas/mips/mips32.d
@@ -38,19 +38,37 @@ Disassembly of section .text:
0+0070 <[^>]*> bc250000 cache 0x5,0\(at\)
0+0074 <[^>]*> bc457fff cache 0x5,32767\(v0\)
0+0078 <[^>]*> bc658000 cache 0x5,-32768\(v1\)
-0+007c <[^>]*> 42000018 eret
-0+0080 <[^>]*> 42000008 tlbp
-0+0084 <[^>]*> 42000001 tlbr
-0+0088 <[^>]*> 42000002 tlbwi
-0+008c <[^>]*> 42000006 tlbwr
-0+0090 <[^>]*> 42000020 wait
-0+0094 <[^>]*> 42000020 wait
-0+0098 <[^>]*> 4359e260 wait 0x56789
-0+009c <[^>]*> 0000000d break
-0+00a0 <[^>]*> 0000000d break
-0+00a4 <[^>]*> 0345000d break 0x345
-0+00a8 <[^>]*> 0048d14d break 0x48,0x345
-0+00ac <[^>]*> 7000003f sdbbp
-0+00b0 <[^>]*> 7000003f sdbbp
-0+00b4 <[^>]*> 7159e27f sdbbp 0x56789
- ...
+0+007c <[^>]*> 3c010001 lui at,0x1
+0+0080 <[^>]*> 00240821 addu at,at,a0
+0+0084 <[^>]*> bc258000 cache 0x5,-32768\(at\)
+0+0088 <[^>]*> 3c01ffff lui at,0xffff
+0+008c <[^>]*> 00250821 addu at,at,a1
+0+0090 <[^>]*> bc257fff cache 0x5,32767\(at\)
+0+0094 <[^>]*> 3c010001 lui at,0x1
+0+0098 <[^>]*> bc258000 cache 0x5,-32768\(at\)
+0+009c <[^>]*> 3c01ffff lui at,0xffff
+0+00a0 <[^>]*> bc257fff cache 0x5,32767\(at\)
+0+00a4 <[^>]*> 42000018 eret
+0+00a8 <[^>]*> 42000008 tlbp
+0+00ac <[^>]*> 42000001 tlbr
+0+00b0 <[^>]*> 42000002 tlbwi
+0+00b4 <[^>]*> 42000006 tlbwr
+0+00b8 <[^>]*> 42000020 wait
+0+00bc <[^>]*> 42000020 wait
+0+00c0 <[^>]*> 4359e260 wait 0x56789
+0+00c4 <[^>]*> 0000000d break
+0+00c8 <[^>]*> 0000000d break
+0+00cc <[^>]*> 0345000d break 0x345
+0+00d0 <[^>]*> 0048d14d break 0x48,0x345
+0+00d4 <[^>]*> 7000003f sdbbp
+0+00d8 <[^>]*> 7000003f sdbbp
+0+00dc <[^>]*> 7159e27f sdbbp 0x56789
+0+00e0 <[^>]*> 4900ffc7 bc2f 0+0000 <text_label>
+0+00e4 <[^>]*> 00000000 nop
+0+00e8 <[^>]*> 4906ffc5 bc2fl \$cc1,0+0000 <text_label>
+0+00ec <[^>]*> 00000000 nop
+0+00f0 <[^>]*> 4919ffc3 bc2t \$cc6,0+0000 <text_label>
+0+00f4 <[^>]*> 00000000 nop
+0+00f8 <[^>]*> 491fffc1 bc2tl \$cc7,0+0000 <text_label>
+0+00fc <[^>]*> 00000000 nop
+ \.\.\.
diff --git a/gas/testsuite/gas/mips/mips32.s b/gas/testsuite/gas/mips/mips32.s
index b3fb6fe13bf6..f54265805439 100644
--- a/gas/testsuite/gas/mips/mips32.s
+++ b/gas/testsuite/gas/mips/mips32.s
@@ -49,6 +49,12 @@ text_label:
cache 5, ($1)
cache 5, 32767($2)
cache 5, -32768($3)
+ .set at
+ cache 5, 32768($4)
+ cache 5, -32769($5)
+ cache 5, 32768
+ cache 5, -32769
+ .set noat
eret
tlbp
tlbr
@@ -73,5 +79,15 @@ text_label:
sdbbp 0 # disassembles without code
sdbbp 0x56789
+ # Cop2 branches with cond code number, like bc1t/f
+ bc2f $cc0,text_label
+ nop
+ bc2fl $cc1,text_label
+ nop
+ bc2t $cc6,text_label
+ nop
+ bc2tl $cc7,text_label
+ nop
+
# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
.space 8
diff --git a/gas/testsuite/gas/mips/mips4.d b/gas/testsuite/gas/mips/mips4.d
index bc3e924948d3..1dfcb3983d1a 100644
--- a/gas/testsuite/gas/mips/mips4.d
+++ b/gas/testsuite/gas/mips/mips4.d
@@ -21,7 +21,7 @@ Disassembly of section .text:
0+0030 <[^>]*> ldxc1 \$f2,a0\(a1\)
0+0034 <[^>]*> lwxc1 \$f2,a0\(a1\)
0+0038 <[^>]*> madd.d \$f0,\$f2,\$f4,\$f6
-0+003c <[^>]*> madd.s \$f0,\$f2,\$f4,\$f6
+0+003c <[^>]*> madd.s \$f10,\$f8,\$f2,\$f0
0+0040 <[^>]*> movf a0,a1,\$fcc4
0+0044 <[^>]*> movf.d \$f4,\$f6,\$fcc0
0+0048 <[^>]*> movf.s \$f4,\$f6,\$fcc0
@@ -40,11 +40,12 @@ Disassembly of section .text:
0+007c <[^>]*> nmadd.s \$f0,\$f2,\$f4,\$f6
0+0080 <[^>]*> nmsub.d \$f0,\$f2,\$f4,\$f6
0+0084 <[^>]*> nmsub.s \$f0,\$f2,\$f4,\$f6
-0+0088 <[^>]*> prefx 0x4,a0\(a1\)
-0+008c <[^>]*> recip.d \$f4,\$f6
-0+0090 <[^>]*> recip.s \$f4,\$f6
-0+0094 <[^>]*> rsqrt.d \$f4,\$f6
-0+0098 <[^>]*> rsqrt.s \$f4,\$f6
-0+009c <[^>]*> sdxc1 \$f4,a0\(a1\)
-0+00a0 <[^>]*> swxc1 \$f4,a0\(a1\)
+0+0088 <[^>]*> pref 0x4,0\(a0\)
+0+008c <[^>]*> prefx 0x4,a0\(a1\)
+0+0090 <[^>]*> recip.d \$f4,\$f6
+0+0094 <[^>]*> recip.s \$f4,\$f6
+0+0098 <[^>]*> rsqrt.d \$f4,\$f6
+0+009c <[^>]*> rsqrt.s \$f4,\$f6
+0+00a0 <[^>]*> sdxc1 \$f4,a0\(a1\)
+0+00a4 <[^>]*> swxc1 \$f4,a0\(a1\)
...
diff --git a/gas/testsuite/gas/mips/mips4.s b/gas/testsuite/gas/mips/mips4.s
index 591292bb6b34..d346c2af2b9f 100644
--- a/gas/testsuite/gas/mips/mips4.s
+++ b/gas/testsuite/gas/mips/mips4.s
@@ -11,7 +11,8 @@ text_label:
ldxc1 $f2,$4($5)
lwxc1 $f2,$4($5)
madd.d $f0,$f2,$f4,$f6
- madd.s $f0,$f2,$f4,$f6
+ # This choice of arguments is so that it matches bc3f on pre-mips4.
+ madd.s $f10,$f8,$f2,$f0
movf $4,$5,$fcc4
movf.d $f4,$f6,$fcc0
movf.s $f4,$f6,$fcc0
@@ -30,14 +31,8 @@ text_label:
nmadd.s $f0,$f2,$f4,$f6
nmsub.d $f0,$f2,$f4,$f6
nmsub.s $f0,$f2,$f4,$f6
-
- # We don't test pref because currently the disassembler will
- # disassemble it as lwc3. lwc3 is correct for mips1 to mips3,
- # while pref is correct for mips4. Unfortunately, the
- # disassembler does not know which architecture it is
- # disassembling for.
- # pref 4,0($4)
-
+ # It used to be disabled due to a clash with lwc3.
+ pref 4,0($4)
prefx 4,$4($5)
recip.d $f4,$f6
recip.s $f4,$f6
diff --git a/gas/testsuite/gas/mips/mips64-dsp.d b/gas/testsuite/gas/mips/mips64-dsp.d
new file mode 100644
index 000000000000..11009a012c52
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips64-dsp.d
@@ -0,0 +1,172 @@
+#objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=32
+#name: MIPS DSP ASE for MIPS64
+#as: -mdsp
+
+# Check MIPS DSP ASE for MIPS64 Instruction Assembly
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 7c010456 absq_s\.pw zero,at
+0+0004 <[^>]*> 7c1ff256 absq_s\.qh s8,ra
+0+0008 <[^>]*> 7cc72c94 addq\.pw a1,a2,a3
+0+000c <[^>]*> 7ce83594 addq_s\.pw a2,a3,t0
+0+0010 <[^>]*> 7c641294 addq\.qh v0,v1,a0
+0+0014 <[^>]*> 7c851b94 addq_s\.qh v1,a0,a1
+0+0018 <[^>]*> 7d4b4814 addu\.ob t1,t2,t3
+0+001c <[^>]*> 7d6c5114 addu_s\.ob t2,t3,t4
+0+0020 <[^>]*> 041dfff7 bposge64 00000000 <text_label>
+0+0024 <[^>]*> 00000000 nop
+0+0028 <[^>]*> 7e950415 cmp\.eq\.pw s4,s5
+0+002c <[^>]*> 7eb60455 cmp\.lt\.pw s5,s6
+0+0030 <[^>]*> 7ed70495 cmp\.le\.pw s6,s7
+0+0034 <[^>]*> 7e320215 cmp\.eq\.qh s1,s2
+0+0038 <[^>]*> 7e530255 cmp\.lt\.qh s2,s3
+0+003c <[^>]*> 7e740295 cmp\.le\.qh s3,s4
+0+0040 <[^>]*> 7dcf0015 cmpu\.eq\.ob t6,t7
+0+0044 <[^>]*> 7df00055 cmpu\.lt\.ob t7,s0
+0+0048 <[^>]*> 7e110095 cmpu\.le\.ob s0,s1
+0+004c <[^>]*> 7d2a4115 cmpgu\.eq\.ob t0,t1,t2
+0+0050 <[^>]*> 7d4b4955 cmpgu\.lt\.ob t1,t2,t3
+0+0054 <[^>]*> 7d6c5195 cmpgu\.le\.ob t2,t3,t4
+0+0058 <[^>]*> 7c1f1abc dextpdp ra,\$ac3,0x0
+0+005c <[^>]*> 7c3f1abc dextpdp ra,\$ac3,0x1
+0+0060 <[^>]*> 7fff1abc dextpdp ra,\$ac3,0x1f
+0+0064 <[^>]*> 7c2002fc dextpdpv zero,\$ac0,at
+0+0068 <[^>]*> 7c1d08bc dextp sp,\$ac1,0x0
+0+006c <[^>]*> 7c3d08bc dextp sp,\$ac1,0x1
+0+0070 <[^>]*> 7ffd08bc dextp sp,\$ac1,0x1f
+0+0074 <[^>]*> 7ffe10fc dextpv s8,\$ac2,ra
+0+0078 <[^>]*> 7c031c3c dextr\.l v1,\$ac3,0x0
+0+007c <[^>]*> 7c231c3c dextr\.l v1,\$ac3,0x1
+0+0080 <[^>]*> 7fe31c3c dextr\.l v1,\$ac3,0x1f
+0+0084 <[^>]*> 7c04053c dextr_r\.l a0,\$ac0,0x0
+0+0088 <[^>]*> 7c24053c dextr_r\.l a0,\$ac0,0x1
+0+008c <[^>]*> 7fe4053c dextr_r\.l a0,\$ac0,0x1f
+0+0090 <[^>]*> 7c050dbc dextr_rs\.l a1,\$ac1,0x0
+0+0094 <[^>]*> 7c250dbc dextr_rs\.l a1,\$ac1,0x1
+0+0098 <[^>]*> 7fe50dbc dextr_rs\.l a1,\$ac1,0x1f
+0+009c <[^>]*> 7c01093c dextr_r\.w at,\$ac1,0x0
+0+00a0 <[^>]*> 7c21093c dextr_r\.w at,\$ac1,0x1
+0+00a4 <[^>]*> 7fe1093c dextr_r\.w at,\$ac1,0x1f
+0+00a8 <[^>]*> 7c0211bc dextr_rs\.w v0,\$ac2,0x0
+0+00ac <[^>]*> 7c2211bc dextr_rs\.w v0,\$ac2,0x1
+0+00b0 <[^>]*> 7fe211bc dextr_rs\.w v0,\$ac2,0x1f
+0+00b4 <[^>]*> 7c0213bc dextr_s\.h v0,\$ac2,0x0
+0+00b8 <[^>]*> 7c2213bc dextr_s\.h v0,\$ac2,0x1
+0+00bc <[^>]*> 7fe213bc dextr_s\.h v0,\$ac2,0x1f
+0+00c0 <[^>]*> 7c00003c dextr\.w zero,\$ac0,0x0
+0+00c4 <[^>]*> 7c20003c dextr\.w zero,\$ac0,0x1
+0+00c8 <[^>]*> 7fe0003c dextr\.w zero,\$ac0,0x1f
+0+00cc <[^>]*> 7d8b187c dextrv\.w t3,\$ac3,t4
+0+00d0 <[^>]*> 7dac017c dextrv_r\.w t4,\$ac0,t5
+0+00d4 <[^>]*> 7dcd09fc dextrv_rs\.w t5,\$ac1,t6
+0+00d8 <[^>]*> 7dee147c dextrv\.l t6,\$ac2,t7
+0+00dc <[^>]*> 7e0f1d7c dextrv_r\.l t7,\$ac3,s0
+0+00e0 <[^>]*> 7e3005fc dextrv_rs\.l s0,\$ac0,s1
+0+00e4 <[^>]*> 7f7a000d dinsv k0,k1
+0+00e8 <[^>]*> 7e950e74 dmadd \$ac1,s4,s5
+0+00ec <[^>]*> 7eb61774 dmaddu \$ac2,s5,s6
+0+00f0 <[^>]*> 7ed71ef4 dmsub \$ac3,s6,s7
+0+00f4 <[^>]*> 7ef807f4 dmsubu \$ac0,s7,t8
+0+00f8 <[^>]*> 7c8017fc dmthlip a0,\$ac2
+0+00fc <[^>]*> 7c010b34 dpaq_sa\.l\.pw \$ac1,zero,at
+0+0100 <[^>]*> 7eb61134 dpaq_s\.w\.qh \$ac2,s5,s6
+0+0104 <[^>]*> 7df000f4 dpau\.h\.obl \$ac0,t7,s0
+0+0108 <[^>]*> 7e1109f4 dpau\.h\.obr \$ac1,s0,s1
+0+010c <[^>]*> 7c640374 dpsq_sa\.l\.pw \$ac0,v1,a0
+0+0110 <[^>]*> 7f190974 dpsq_s\.w\.qh \$ac1,t8,t9
+0+0114 <[^>]*> 7e3212f4 dpsu\.h\.obl \$ac2,s1,s2
+0+0118 <[^>]*> 7e531bf4 dpsu\.h\.obr \$ac3,s2,s3
+0+011c <[^>]*> 7e001ebc dshilo \$ac3,-64
+0+0120 <[^>]*> 7df81ebc dshilo \$ac3,63
+0+0124 <[^>]*> 7c4006fc dshilov \$ac0,v0
+0+0128 <[^>]*> 7e51820a ldx s0,s1\(s2\)
+0+012c <[^>]*> 7d4b1c34 maq_sa\.w\.qhll \$ac3,t2,t3
+0+0130 <[^>]*> 7d6c0474 maq_sa\.w\.qhlr \$ac0,t3,t4
+0+0134 <[^>]*> 7d8d0cb4 maq_sa\.w\.qhrl \$ac1,t4,t5
+0+0138 <[^>]*> 7dae14f4 maq_sa\.w\.qhrr \$ac2,t5,t6
+0+013c <[^>]*> 7e110f34 maq_s\.l\.pwl \$ac1,s0,s1
+0+0140 <[^>]*> 7e3217b4 maq_s\.l\.pwr \$ac2,s1,s2
+0+0144 <[^>]*> 7d4b1d34 maq_s\.w\.qhll \$ac3,t2,t3
+0+0148 <[^>]*> 7d6c0574 maq_s\.w\.qhlr \$ac0,t3,t4
+0+014c <[^>]*> 7d8d0db4 maq_s\.w\.qhrl \$ac1,t4,t5
+0+0150 <[^>]*> 7dae15f4 maq_s\.w\.qhrr \$ac2,t5,t6
+0+0154 <[^>]*> 7d8d5f14 muleq_s\.pw\.qhl t3,t4,t5
+0+0158 <[^>]*> 7dae6754 muleq_s\.pw\.qhr t4,t5,t6
+0+015c <[^>]*> 7ca62194 muleu_s\.qh\.obl a0,a1,a2
+0+0160 <[^>]*> 7cc729d4 muleu_s\.qh\.obr a1,a2,a3
+0+0164 <[^>]*> 7ce837d0 mulq_rs\.ph a2,a3,t0
+0+0168 <[^>]*> 7d2a47d4 mulq_rs\.qh t0,t1,t2
+0+016c <[^>]*> 7f7c01b4 mulsaq_s\.w\.qh \$ac0,k1,gp
+0+0170 <[^>]*> 7fbe13b4 mulsaq_s\.l\.pw \$ac2,sp,s8
+0+0174 <[^>]*> 7fbee395 packrl\.pw gp,sp,s8
+0+0178 <[^>]*> 7f5bc8d5 pick\.ob t9,k0,k1
+0+017c <[^>]*> 7f7cd2d5 pick\.qh k0,k1,gp
+0+0180 <[^>]*> 7f9ddcd5 pick\.pw k1,gp,sp
+0+0184 <[^>]*> 7c0f7316 preceq\.pw\.qhl t6,t7
+0+0188 <[^>]*> 7c107b56 preceq\.pw\.qhr t7,s0
+0+018c <[^>]*> 7c118396 preceq\.pw\.qhla s0,s1
+0+0190 <[^>]*> 7c128bd6 preceq\.pw\.qhra s1,s2
+0+0194 <[^>]*> 7c139516 preceq\.s\.l\.pwl s2,s3
+0+0198 <[^>]*> 7c149d56 preceq\.s\.l\.pwr s3,s4
+0+019c <[^>]*> 7c19c116 precequ\.pw\.qhl t8,t9
+0+01a0 <[^>]*> 7c1ac956 precequ\.pw\.qhr t9,k0
+0+01a4 <[^>]*> 7c1bd196 precequ\.pw\.qhla k0,k1
+0+01a8 <[^>]*> 7c1cd9d6 precequ\.pw\.qhra k1,gp
+0+01ac <[^>]*> 7c1de716 preceu\.qh\.obl gp,sp
+0+01b0 <[^>]*> 7c1eef56 preceu\.qh\.obr sp,s8
+0+01b4 <[^>]*> 7c1ff796 preceu\.qh\.obla s8,ra
+0+01b8 <[^>]*> 7c00ffd6 preceu\.qh\.obra ra,zero
+0+01bc <[^>]*> 7ca62315 precrq\.ob\.qh a0,a1,a2
+0+01c0 <[^>]*> 7d093f15 precrq\.pw\.l a3,t0,t1
+0+01c4 <[^>]*> 7cc72d15 precrq\.qh\.pw a1,a2,a3
+0+01c8 <[^>]*> 7ce83555 precrq_rs\.qh\.pw a2,a3,t0
+0+01cc <[^>]*> 7d4b4bd5 precrqu_s\.ob\.qh t1,t2,t3
+0+01d0 <[^>]*> 7f60d514 raddu\.l\.ob k0,k1
+0+01d4 <[^>]*> 7c00e896 repl\.ob sp,0x0
+0+01d8 <[^>]*> 7cffe896 repl\.ob sp,0xff
+0+01dc <[^>]*> 7c1ff0d6 replv\.ob s8,ra
+0+01e0 <[^>]*> 7e000a96 repl\.qh at,-512
+0+01e4 <[^>]*> 7dff0a96 repl\.qh at,511
+0+01e8 <[^>]*> 7c0312d6 replv\.qh v0,v1
+0+01ec <[^>]*> 7e001c96 repl\.pw v1,-512
+0+01f0 <[^>]*> 7dff1c96 repl\.pw v1,511
+0+01f4 <[^>]*> 7c0524d6 replv\.pw a0,a1
+0+01f8 <[^>]*> 7c031017 shll\.ob v0,v1,0x0
+0+01fc <[^>]*> 7ce31017 shll\.ob v0,v1,0x7
+0+0200 <[^>]*> 7ca41897 shllv\.ob v1,a0,a1
+0+0204 <[^>]*> 7c094217 shll\.qh t0,t1,0x0
+0+0208 <[^>]*> 7de94217 shll\.qh t0,t1,0xf
+0+020c <[^>]*> 7d6a4a97 shllv\.qh t1,t2,t3
+0+0210 <[^>]*> 7c0b5317 shll_s\.qh t2,t3,0x0
+0+0214 <[^>]*> 7deb5317 shll_s\.qh t2,t3,0xf
+0+0218 <[^>]*> 7dac5b97 shllv_s\.qh t3,t4,t5
+0+021c <[^>]*> 7c0f7417 shll\.pw t6,t7,0x0
+0+0220 <[^>]*> 7fef7417 shll\.pw t6,t7,0x1f
+0+0224 <[^>]*> 7e307c97 shllv\.pw t7,s0,s1
+0+0228 <[^>]*> 7c118517 shll_s\.pw s0,s1,0x0
+0+022c <[^>]*> 7ff18517 shll_s\.pw s0,s1,0x1f
+0+0230 <[^>]*> 7e728d97 shllv_s\.pw s1,s2,s3
+0+0234 <[^>]*> 7c1de257 shra\.qh gp,sp,0x0
+0+0238 <[^>]*> 7dfde257 shra\.qh gp,sp,0xf
+0+023c <[^>]*> 7ffeead7 shrav\.qh sp,s8,ra
+0+0240 <[^>]*> 7c1ff357 shra_r\.qh s8,ra,0x0
+0+0244 <[^>]*> 7dfff357 shra_r\.qh s8,ra,0xf
+0+0248 <[^>]*> 7c20fbd7 shrav_r\.qh ra,zero,at
+0+024c <[^>]*> 7c010457 shra\.pw zero,at,0x0
+0+0250 <[^>]*> 7fe10457 shra\.pw zero,at,0x1f
+0+0254 <[^>]*> 7c620cd7 shrav\.pw at,v0,v1
+0+0258 <[^>]*> 7c031557 shra_r\.pw v0,v1,0x0
+0+025c <[^>]*> 7fe31557 shra_r\.pw v0,v1,0x1f
+0+0260 <[^>]*> 7ca41dd7 shrav_r\.pw v1,a0,a1
+0+0264 <[^>]*> 7c15a057 shrl\.ob s4,s5,0x0
+0+0268 <[^>]*> 7cf5a057 shrl\.ob s4,s5,0x7
+0+026c <[^>]*> 7ef6a8d7 shrlv\.ob s5,s6,s7
+0+0270 <[^>]*> 7e3282d4 subq\.qh s0,s1,s2
+0+0274 <[^>]*> 7e538bd4 subq_s\.qh s1,s2,s3
+0+0278 <[^>]*> 7e7494d4 subq\.pw s2,s3,s4
+0+027c <[^>]*> 7e959dd4 subq_s\.pw s3,s4,s5
+0+0280 <[^>]*> 7eb6a054 subu\.ob s4,s5,s6
+0+0284 <[^>]*> 7ed7a954 subu_s\.ob s5,s6,s7
+ \.\.\.
diff --git a/gas/testsuite/gas/mips/mips64-dsp.s b/gas/testsuite/gas/mips/mips64-dsp.s
new file mode 100644
index 000000000000..b372e651bbc8
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips64-dsp.s
@@ -0,0 +1,174 @@
+# source file to test assembly of MIPS DSP ASE for MIPS64 instructions
+
+ .set noreorder
+ .set nomacro
+ .set noat
+
+ .text
+text_label:
+
+ absq_s.pw $0,$1
+ absq_s.qh $30,$31
+ addq.pw $5,$6,$7
+ addq_s.pw $6,$7,$8
+ addq.qh $2,$3,$4
+ addq_s.qh $3,$4,$5
+ addu.ob $9,$10,$11
+ addu_s.ob $10,$11,$12
+ bposge64 text_label
+ nop
+ cmp.eq.pw $20,$21
+ cmp.lt.pw $21,$22
+ cmp.le.pw $22,$23
+ cmp.eq.qh $17,$18
+ cmp.lt.qh $18,$19
+ cmp.le.qh $19,$20
+ cmpu.eq.ob $14,$15
+ cmpu.lt.ob $15,$16
+ cmpu.le.ob $16,$17
+ cmpgu.eq.ob $8,$9,$10
+ cmpgu.lt.ob $9,$10,$11
+ cmpgu.le.ob $10,$11,$12
+ dextpdp $31,$ac3,0
+ dextpdp $31,$ac3,1
+ dextpdp $31,$ac3,31
+ dextpdpv $0,$ac0,$1
+ dextp $29,$ac1,0
+ dextp $29,$ac1,1
+ dextp $29,$ac1,31
+ dextpv $30,$ac2,$31
+ dextr.l $3,$ac3,0
+ dextr.l $3,$ac3,1
+ dextr.l $3,$ac3,31
+ dextr_r.l $4,$ac0,0
+ dextr_r.l $4,$ac0,1
+ dextr_r.l $4,$ac0,31
+ dextr_rs.l $5,$ac1,0
+ dextr_rs.l $5,$ac1,1
+ dextr_rs.l $5,$ac1,31
+ dextr_r.w $1,$ac1,0
+ dextr_r.w $1,$ac1,1
+ dextr_r.w $1,$ac1,31
+ dextr_rs.w $2,$ac2,0
+ dextr_rs.w $2,$ac2,1
+ dextr_rs.w $2,$ac2,31
+ dextr_s.h $2,$ac2,0
+ dextr_s.h $2,$ac2,1
+ dextr_s.h $2,$ac2,31
+ dextr.w $0,$ac0,0
+ dextr.w $0,$ac0,1
+ dextr.w $0,$ac0,31
+ dextrv.w $11,$ac3,$12
+ dextrv_r.w $12,$ac0,$13
+ dextrv_rs.w $13,$ac1,$14
+ dextrv.l $14,$ac2,$15
+ dextrv_r.l $15,$ac3,$16
+ dextrv_rs.l $16,$ac0,$17
+ dinsv $26,$27
+ dmadd $ac1,$20,$21
+ dmaddu $ac2,$21,$22
+ dmsub $ac3,$22,$23
+ dmsubu $ac0,$23,$24
+ dmthlip $4,$ac2
+ dpaq_sa.l.pw $ac1,$0,$1
+ dpaq_s.w.qh $ac2,$21,$22
+ dpau.h.obl $ac0,$15,$16
+ dpau.h.obr $ac1,$16,$17
+ dpsq_sa.l.pw $ac0,$3,$4
+ dpsq_s.w.qh $ac1,$24,$25
+ dpsu.h.obl $ac2,$17,$18
+ dpsu.h.obr $ac3,$18,$19
+ dshilo $ac3,-64
+ dshilo $ac3,63
+ dshilov $ac0,$2
+ ldx $16,$17($18)
+ maq_sa.w.qhll $ac3,$10,$11
+ maq_sa.w.qhlr $ac0,$11,$12
+ maq_sa.w.qhrl $ac1,$12,$13
+ maq_sa.w.qhrr $ac2,$13,$14
+ maq_s.l.pwl $ac1,$16,$17
+ maq_s.l.pwr $ac2,$17,$18
+ maq_s.w.qhll $ac3,$10,$11
+ maq_s.w.qhlr $ac0,$11,$12
+ maq_s.w.qhrl $ac1,$12,$13
+ maq_s.w.qhrr $ac2,$13,$14
+ muleq_s.pw.qhl $11,$12,$13
+ muleq_s.pw.qhr $12,$13,$14
+ muleu_s.qh.obl $4,$5,$6
+ muleu_s.qh.obr $5,$6,$7
+ mulq_rs.ph $6,$7,$8
+ mulq_rs.qh $8,$9,$10
+ mulsaq_s.w.qh $ac0,$27,$28
+ mulsaq_s.l.pw $ac2,$29,$30
+ packrl.pw $28,$29,$30
+ pick.ob $25,$26,$27
+ pick.qh $26,$27,$28
+ pick.pw $27,$28,$29
+ preceq.pw.qhl $14,$15
+ preceq.pw.qhr $15,$16
+ preceq.pw.qhla $16,$17
+ preceq.pw.qhra $17,$18
+ preceq.s.l.pwl $18,$19
+ preceq.s.l.pwr $19,$20
+ precequ.pw.qhl $24,$25
+ precequ.pw.qhr $25,$26
+ precequ.pw.qhla $26,$27
+ precequ.pw.qhra $27,$28
+ preceu.qh.obl $28,$29
+ preceu.qh.obr $29,$30
+ preceu.qh.obla $30,$31
+ preceu.qh.obra $31,$0
+ precrq.ob.qh $4,$5,$6
+ precrq.pw.l $7,$8,$9
+ precrq.qh.pw $5,$6,$7
+ precrq_rs.qh.pw $6,$7,$8
+ precrqu_s.ob.qh $9,$10,$11
+ raddu.l.ob $26,$27
+ repl.ob $29,0
+ repl.ob $29,255
+ replv.ob $30,$31
+ repl.qh $1,-512
+ repl.qh $1,511
+ replv.qh $2,$3
+ repl.pw $3,-512
+ repl.pw $3,511
+ replv.pw $4,$5
+ shll.ob $2,$3,0
+ shll.ob $2,$3,7
+ shllv.ob $3,$4,$5
+ shll.qh $8,$9,0
+ shll.qh $8,$9,15
+ shllv.qh $9,$10,$11
+ shll_s.qh $10,$11,0
+ shll_s.qh $10,$11,15
+ shllv_s.qh $11,$12,$13
+ shll.pw $14,$15,0
+ shll.pw $14,$15,31
+ shllv.pw $15,$16,$17
+ shll_s.pw $16,$17,0
+ shll_s.pw $16,$17,31
+ shllv_s.pw $17,$18,$19
+ shra.qh $28,$29,0
+ shra.qh $28,$29,15
+ shrav.qh $29,$30,$31
+ shra_r.qh $30,$31,0
+ shra_r.qh $30,$31,15
+ shrav_r.qh $31,$0,$1
+ shra.pw $0,$1,0
+ shra.pw $0,$1,31
+ shrav.pw $1,$2,$3
+ shra_r.pw $2,$3,0
+ shra_r.pw $2,$3,31
+ shrav_r.pw $3,$4,$5
+ shrl.ob $20,$21,0
+ shrl.ob $20,$21,7
+ shrlv.ob $21,$22,$23
+ subq.qh $16,$17,$18
+ subq_s.qh $17,$18,$19
+ subq.pw $18,$19,$20
+ subq_s.pw $19,$20,$21
+ subu.ob $20,$21,$22
+ subu_s.ob $21,$22,$23
+
+# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .space 8
diff --git a/gas/testsuite/gas/mips/noreorder.d b/gas/testsuite/gas/mips/noreorder.d
new file mode 100644
index 000000000000..0866ca018314
--- /dev/null
+++ b/gas/testsuite/gas/mips/noreorder.d
@@ -0,0 +1,23 @@
+#objdump: -dr --disassemble-zeroes
+#as: -march=mips2 -mabi=32
+#name: noreorder test
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+
+00000000 <per_cpu_trap_init>:
+ 0: 00000000 nop
+ 4: 00000000 nop
+ 8: 0c000000 jal 0 <per_cpu_trap_init>
+ 8: R_MIPS_26 cpu_cache_init
+ c: 00000000 nop
+ 10: 8fbf0010 lw ra,16\(sp\)
+ 14: 08000000 j 0 <per_cpu_trap_init>
+ 14: R_MIPS_26 tlb_init
+ 18: 27bd0018 addiu sp,sp,24
+ 1c: 00000000 nop
+ 20: 00000000 nop
+ 24: 1000fff6 b 0 <per_cpu_trap_init>
+ 28: 00000000 nop
+ 2c: 00000000 nop
diff --git a/gas/testsuite/gas/mips/noreorder.s b/gas/testsuite/gas/mips/noreorder.s
new file mode 100644
index 000000000000..71e92efacf21
--- /dev/null
+++ b/gas/testsuite/gas/mips/noreorder.s
@@ -0,0 +1,25 @@
+ .text
+ .globl per_cpu_trap_init
+ .ent per_cpu_trap_init
+ .type per_cpu_trap_init, @function
+per_cpu_trap_init:
+$L807:
+ nop
+ nop
+ # Removing this .align make the code assemble correctly
+ .align 3
+ jal cpu_cache_init
+ lw $31,16($sp)
+ .set noreorder
+ j tlb_init
+ addiu $sp,$sp,24
+ # Replacing this .word with a nop causes the code to be assembled corrrectly
+ .word 0
+ # Removing this nop causes the code to be compiled correctly
+ nop
+ .set reorder
+
+ b $L807
+ .end per_cpu_trap_init
+
+ .p2align 4
diff --git a/gas/testsuite/gas/mips/set-arch.d b/gas/testsuite/gas/mips/set-arch.d
index 66e52654b9e0..7639adb2822f 100644
--- a/gas/testsuite/gas/mips/set-arch.d
+++ b/gas/testsuite/gas/mips/set-arch.d
@@ -168,9 +168,9 @@ Disassembly of section \.text:
00000280 <[^>]*> 000000c0 sll zero,zero,0x3
00000284 <[^>]*> 7ca43980 0x7ca43980
00000288 <[^>]*> 7ca46984 0x7ca46984
-0000028c <[^>]*> 0100fc09 0x100fc09
-00000290 <[^>]*> 0120a409 0x120a409
-00000294 <[^>]*> 01000408 0x1000408
+0000028c <[^>]*> 0100fc09 jalr.hb t0
+00000290 <[^>]*> 0120a409 jalr.hb s4,t1
+00000294 <[^>]*> 01000408 jr.hb t0
00000298 <[^>]*> 7c0a003b 0x7c0a003b
0000029c <[^>]*> 7c0b083b 0x7c0b083b
000002a0 <[^>]*> 7c0c103b 0x7c0c103b
@@ -334,7 +334,7 @@ Disassembly of section \.text:
00000518 <[^>]*> 48a41018 0x48a41018
0000051c <[^>]*> 4984101f 0x4984101f
00000520 <[^>]*> 49c4101f 0x49c4101f
-00000524 <[^>]*> 4904101f 0x4904101f
+00000524 <[^>]*> 4904101f bc2f \$cc1,000045a4 <[^>]*>
00000528 <[^>]*> 4944101f 0x4944101f
0000052c <[^>]*> 48c62090 0x48c62090
00000530 <[^>]*> 4bce3110 c2 0x1ce3110
diff --git a/gas/testsuite/gas/mips/smartmips.d b/gas/testsuite/gas/mips/smartmips.d
new file mode 100644
index 000000000000..8bff68285d49
--- /dev/null
+++ b/gas/testsuite/gas/mips/smartmips.d
@@ -0,0 +1,29 @@
+#objdump: -dr --prefix-addresses --show-raw-insn -M reg-names=numeric
+#name: SmartMIPS
+#as: -msmartmips -32
+
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+
+0+0000 <[^>]*> 00c52046 rorv \$4,\$5,\$6
+0+0004 <[^>]*> 00c52046 rorv \$4,\$5,\$6
+0+0008 <[^>]*> 00c52046 rorv \$4,\$5,\$6
+0+000c <[^>]*> 00c52046 rorv \$4,\$5,\$6
+0+0010 <[^>]*> 002527c2 ror \$4,\$5,0x1f
+0+0014 <[^>]*> 00252202 ror \$4,\$5,0x8
+0+0018 <[^>]*> 00252042 ror \$4,\$5,0x1
+0+001c <[^>]*> 00252002 ror \$4,\$5,0x0
+0+0020 <[^>]*> 002527c2 ror \$4,\$5,0x1f
+0+0024 <[^>]*> 00252042 ror \$4,\$5,0x1
+0+0028 <[^>]*> 00252602 ror \$4,\$5,0x18
+0+002c <[^>]*> 002527c2 ror \$4,\$5,0x1f
+0+0030 <[^>]*> 00252002 ror \$4,\$5,0x0
+0+0034 <[^>]*> 70a41088 lwxs \$2,\$4\(\$5\)
+0+0038 <[^>]*> 72110441 maddp \$16,\$17
+0+003c <[^>]*> 016c0459 multp \$11,\$12
+0+0040 <[^>]*> 00004052 mflhxu \$8
+0+0044 <[^>]*> 00800053 mtlhx \$4
+0+0048 <[^>]*> 70d80481 pperm \$6,\$24
+0+004c <[^>]*> 00000000 nop
diff --git a/gas/testsuite/gas/mips/smartmips.s b/gas/testsuite/gas/mips/smartmips.s
new file mode 100644
index 000000000000..00e9895bd013
--- /dev/null
+++ b/gas/testsuite/gas/mips/smartmips.s
@@ -0,0 +1,31 @@
+# Source file used to test SmartMIPS instruction set
+
+ .text
+stuff:
+ ror $4,$5,$6
+ rorv $4,$5,$6
+ rotr $4,$5,$6
+ rotrv $4,$5,$6
+
+ ror $4,$5,31
+ ror $4,$5,8
+ ror $4,$5,1
+ ror $4,$5,0
+ rotr $4,$5,31
+
+ rol $4,$5,31
+ rol $4,$5,8
+ rol $4,$5,1
+ rol $4,$5,0
+
+ lwxs $2,$4($5)
+
+ maddp $16,$17
+ multp $11,$12
+
+ mflhxu $8
+ mtlhx $4
+
+ pperm $6,$24
+
+ .p2align 4
diff --git a/gas/testsuite/gas/mmix/bspec-1.d b/gas/testsuite/gas/mmix/bspec-1.d
index 2b15a4c443d0..c648a02f676d 100644
--- a/gas/testsuite/gas/mmix/bspec-1.d
+++ b/gas/testsuite/gas/mmix/bspec-1.d
@@ -23,4 +23,5 @@ Hex dump of section '\.text':
0x0+ fd010203 .*
Hex dump of section '\.MMIX\.spec_data\.2':
+ NOTE: This section has relocations against it, but these have NOT been applied to this dump.
0x0+ 00000000 .*
diff --git a/gas/testsuite/gas/mmix/bspec-2.d b/gas/testsuite/gas/mmix/bspec-2.d
index 04fdbdd5e5ff..73cf96c8b972 100644
--- a/gas/testsuite/gas/mmix/bspec-2.d
+++ b/gas/testsuite/gas/mmix/bspec-2.d
@@ -23,4 +23,5 @@ Hex dump of section '\.text':
0x0+ fd010203 .*
Hex dump of section '\.MMIX\.spec_data\.2':
+ NOTE: This section has relocations against it, but these have NOT been applied to this dump.
0x0+ 00000000 0000002a 00000000 00000000 .*
diff --git a/gas/testsuite/gas/mmix/comment-1.d b/gas/testsuite/gas/mmix/comment-1.d
index 142dca78fe8a..22ffdf5160a4 100644
--- a/gas/testsuite/gas/mmix/comment-1.d
+++ b/gas/testsuite/gas/mmix/comment-1.d
@@ -31,6 +31,7 @@ Symbol table '\.symtab' contains 12 entries:
11: 0+ 0 NOTYPE GLOBAL DEFAULT UND target3
Hex dump of section '\.text':
+ NOTE: This section has relocations against it, but these have NOT been applied to this dump.
0x0+ 0000007b 00010017 00010203 01030201 .*
0x0+10 09050006 09070208 0509000a 050b030c .*
0x0+20 230f1011 23121300 23141516 34170018 .*
diff --git a/gas/testsuite/gas/mmix/mmix-list.exp b/gas/testsuite/gas/mmix/mmix-list.exp
index 8d2a294f7c5b..e4a98d0cd80b 100644
--- a/gas/testsuite/gas/mmix/mmix-list.exp
+++ b/gas/testsuite/gas/mmix/mmix-list.exp
@@ -1,4 +1,4 @@
-# Copyright (C) 2001 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2007 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
@@ -18,24 +18,6 @@ if { ! [istarget "mmix-*"] } {
return
}
-proc run_list_test { name opts } {
- global srcdir subdir runtests
-
- if ![runtest_file_p $runtests $name] then {
- return
- }
-
- set testname "mmix list $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
proc run_mmix_list_tests { } {
global srcdir subdir runtests
foreach test_name [lsort [find ${srcdir}/${subdir} *.l]] {
diff --git a/gas/testsuite/gas/mn10300/basic.exp b/gas/testsuite/gas/mn10300/basic.exp
index b80e006cd215..37c1972738ff 100644
--- a/gas/testsuite/gas/mn10300/basic.exp
+++ b/gas/testsuite/gas/mn10300/basic.exp
@@ -1,4 +1,4 @@
-# Copyright (C) 1996, 2000, 2002, 2004 Free Software Foundation, Inc.
+# Copyright (C) 1996, 2000, 2002, 2004, 2007 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
@@ -1768,20 +1768,6 @@ proc do_am33_8 {} {
if [expr $x==67] then { pass $testname } else { fail $testname }
}
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "mn10300 $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- return
- }
- pass $testname
-}
-
-
if [istarget mn10300*-*-*] then {
# Test the basic instruction parser.
do_add
diff --git a/gas/testsuite/gas/msp430/msp430.exp b/gas/testsuite/gas/msp430/msp430.exp
index a45ae4b630b5..c5e8052e0422 100644
--- a/gas/testsuite/gas/msp430/msp430.exp
+++ b/gas/testsuite/gas/msp430/msp430.exp
@@ -1,19 +1,6 @@
#
# msp430 tests
#
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "msp430 $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- exit
- return
- }
- pass $testname
-}
if [expr [istarget "msp430-*-*"]] then {
run_dump_test "opcode"
diff --git a/gas/testsuite/gas/pdp11/pdp11.exp b/gas/testsuite/gas/pdp11/pdp11.exp
index 9ee6435df12a..91ccddbb2ef2 100644
--- a/gas/testsuite/gas/pdp11/pdp11.exp
+++ b/gas/testsuite/gas/pdp11/pdp11.exp
@@ -1,19 +1,6 @@
#
# pdp11/pdp11 tests
#
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "pdp11 $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- exit
- return
- }
- pass $testname
-}
if [expr [istarget "pdp11-*-*"]] then {
diff --git a/gas/testsuite/gas/ppc/booke.d b/gas/testsuite/gas/ppc/booke.d
index 56c7d5e3ae45..b07033f675e5 100644
--- a/gas/testsuite/gas/ppc/booke.d
+++ b/gas/testsuite/gas/ppc/booke.d
@@ -142,11 +142,15 @@ Disassembly of section \.text:
1c0: 7c 00 06 ac mbar
1c4: 7c 00 06 ac mbar
1c8: 7c 20 06 ac mbar 1
- 1cc: 7c 12 42 a6 mfsprg r0,2
- 1d0: 7c 12 42 a6 mfsprg r0,2
- 1d4: 7c 12 43 a6 mtsprg 2,r0
- 1d8: 7c 12 43 a6 mtsprg 2,r0
- 1dc: 7c 07 42 a6 mfsprg r0,7
- 1e0: 7c 07 42 a6 mfsprg r0,7
- 1e4: 7c 17 43 a6 mtsprg 7,r0
- 1e8: 7c 17 43 a6 mtsprg 7,r0
+ 1cc: 7d 8d 77 24 tlbsx r12,r13,r14
+ 1d0: 7d 8d 77 25 tlbsx\. r12,r13,r14
+ 1d4: 7d 8d 77 26 tlbsxe r12,r13,r14
+ 1d8: 7d 8d 77 27 tlbsxe\. r12,r13,r14
+ 1dc: 7c 12 42 a6 mfsprg r0,2
+ 1e0: 7c 12 42 a6 mfsprg r0,2
+ 1e4: 7c 12 43 a6 mtsprg 2,r0
+ 1e8: 7c 12 43 a6 mtsprg 2,r0
+ 1ec: 7c 07 42 a6 mfsprg r0,7
+ 1f0: 7c 07 42 a6 mfsprg r0,7
+ 1f4: 7c 17 43 a6 mtsprg 7,r0
+ 1f8: 7c 17 43 a6 mtsprg 7,r0
diff --git a/gas/testsuite/gas/ppc/booke.s b/gas/testsuite/gas/ppc/booke.s
index 0c6cf88f66a4..fa53c019b674 100644
--- a/gas/testsuite/gas/ppc/booke.s
+++ b/gas/testsuite/gas/ppc/booke.s
@@ -135,6 +135,11 @@ branch_target_8:
mbar 0
mbar 1
+ tlbsx 12, 13, 14
+ tlbsx. 12, 13, 14
+ tlbsxe 12, 13, 14
+ tlbsxe. 12, 13, 14
+
mfsprg 0, 2
mfsprg2 0
mtsprg 2, 0
diff --git a/gas/testsuite/gas/ppc/cell.d b/gas/testsuite/gas/ppc/cell.d
new file mode 100644
index 000000000000..799a8e09aba8
--- /dev/null
+++ b/gas/testsuite/gas/ppc/cell.d
@@ -0,0 +1,31 @@
+#as: -mcell
+#objdump: -dr -Mcell
+#name: Cell tests
+
+
+.*: +file format elf(32)?(64)?-powerpc.*
+
+
+Disassembly of section \.text:
+
+0000000000000000 <.text>:
+ 0: 7c 01 14 0e lvlx v0,r1,r2
+ 4: 7c 00 14 0e lvlx v0,0,r2
+ 8: 7c 01 16 0e lvlxl v0,r1,r2
+ c: 7c 00 16 0e lvlxl v0,0,r2
+ 10: 7c 01 14 4e lvrx v0,r1,r2
+ 14: 7c 00 14 4e lvrx v0,0,r2
+ 18: 7c 01 16 4e lvrxl v0,r1,r2
+ 1c: 7c 00 16 4e lvrxl v0,0,r2
+ 20: 7c 01 15 0e stvlx v0,r1,r2
+ 24: 7c 00 15 0e stvlx v0,0,r2
+ 28: 7c 01 17 0e stvlxl v0,r1,r2
+ 2c: 7c 00 17 0e stvlxl v0,0,r2
+ 30: 7c 01 15 4e stvrx v0,r1,r2
+ 34: 7c 00 15 4e stvrx v0,0,r2
+ 38: 7c 01 17 4e stvrxl v0,r1,r2
+ 3c: 7c 00 17 4e stvrxl v0,0,r2
+ 40: 7c 00 0c 28 ldbrx r0,0,r1
+ 44: 7c 01 14 28 ldbrx r0,r1,r2
+ 48: 7c 00 0d 28 stdbrx r0,0,r1
+ 4c: 7c 01 15 28 stdbrx r0,r1,r2
diff --git a/gas/testsuite/gas/ppc/cell.s b/gas/testsuite/gas/ppc/cell.s
new file mode 100644
index 000000000000..29853866147e
--- /dev/null
+++ b/gas/testsuite/gas/ppc/cell.s
@@ -0,0 +1,24 @@
+ .section ".text"
+ lvlx %r0, %r1, %r2
+ lvlx %r0, 0, %r2
+ lvlxl %r0, %r1, %r2
+ lvlxl %r0, 0, %r2
+ lvrx %r0, %r1, %r2
+ lvrx %r0, 0, %r2
+ lvrxl %r0, %r1, %r2
+ lvrxl %r0, 0, %r2
+
+ stvlx %r0, %r1, %r2
+ stvlx %r0, 0, %r2
+ stvlxl %r0, %r1, %r2
+ stvlxl %r0, 0, %r2
+ stvrx %r0, %r1, %r2
+ stvrx %r0, 0, %r2
+ stvrxl %r0, %r1, %r2
+ stvrxl %r0, 0, %r2
+
+ ldbrx %r0, 0, %r1
+ ldbrx %r0, %r1, %r2
+
+ stdbrx %r0, 0, %r1
+ stdbrx %r0, %r1, %r2
diff --git a/gas/testsuite/gas/ppc/ppc.exp b/gas/testsuite/gas/ppc/ppc.exp
index 0dd4648f021d..0e2db22c66ee 100644
--- a/gas/testsuite/gas/ppc/ppc.exp
+++ b/gas/testsuite/gas/ppc/ppc.exp
@@ -11,6 +11,8 @@ if { [istarget powerpc64*-*-*] || [istarget *-*-elf64*]} then {
run_dump_test "astest2_64"
run_dump_test "test1elf64"
run_dump_test "power4"
+ run_dump_test "cell"
+ run_list_test "range64" "-a64"
} elseif { [istarget powerpc*-*aix*] } then {
run_dump_test "test1xcoff32"
} elseif { [istarget powerpc*-*-*bsd*] \
@@ -38,5 +40,6 @@ if { [istarget powerpc*-*-*] } then {
run_dump_test "altivec"
run_dump_test "booke"
run_dump_test "e500"
+ run_list_test "range" "-a32"
}
}
diff --git a/gas/testsuite/gas/ppc/range.l b/gas/testsuite/gas/ppc/range.l
new file mode 100644
index 000000000000..9a71ca4f88f3
--- /dev/null
+++ b/gas/testsuite/gas/ppc/range.l
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*:6: Error: operand out of range.*
+.*:7: Error: operand out of range.*
diff --git a/gas/testsuite/gas/ppc/range.s b/gas/testsuite/gas/ppc/range.s
new file mode 100644
index 000000000000..04251e5e93bf
--- /dev/null
+++ b/gas/testsuite/gas/ppc/range.s
@@ -0,0 +1,7 @@
+ .text
+ lbz 4,-32768(3)
+ lbz 5,-1(3)
+ lbz 6,2(3)
+ lbz 7,32767(3)
+ lbz 8,32768(3)
+ lbz 9,-32769(3)
diff --git a/gas/testsuite/gas/ppc/range64.l b/gas/testsuite/gas/ppc/range64.l
new file mode 100644
index 000000000000..6e28b7c7e9fc
--- /dev/null
+++ b/gas/testsuite/gas/ppc/range64.l
@@ -0,0 +1,6 @@
+.*: Assembler messages:
+.*:3: Error: operand out of domain \(-1 is not a multiple of 4\)
+.*:4: Error: operand out of domain \(2 is not a multiple of 4\)
+.*:5: Error: operand out of range.*
+.*:6: Error: operand out of range.*
+.*:7: Error: operand out of range.*
diff --git a/gas/testsuite/gas/ppc/range64.s b/gas/testsuite/gas/ppc/range64.s
new file mode 100644
index 000000000000..b4a04cf76314
--- /dev/null
+++ b/gas/testsuite/gas/ppc/range64.s
@@ -0,0 +1,7 @@
+ .text
+ ld 4,-32768(3)
+ ld 5,-1(3)
+ ld 6,2(3)
+ ld 7,32767(3)
+ ld 8,32768(3)
+ ld 9,-32769(3)
diff --git a/gas/testsuite/gas/ppc/reloc.d b/gas/testsuite/gas/ppc/reloc.d
new file mode 100644
index 000000000000..006604b12b9c
--- /dev/null
+++ b/gas/testsuite/gas/ppc/reloc.d
@@ -0,0 +1,12 @@
+#readelf: -r --wide
+#name: reloc
+
+Relocation section '\.rela\.data' at .* contains 2 entries:
+ Offset Info Type Sym\. Value Symbol's Name \+ Addend
+0+08 .* R_PPC_ADDR32 .* y \+ f+fc
+0+0c .* R_PPC_ADDR32 .* y \+ 0
+
+Relocation section '\.rela\.data\.other' at .* contains 2 entries:
+ Offset Info Type Sym\. Value Symbol's Name \+ Addend
+0+00 .* R_PPC_ADDR32 .* x \+ 0
+0+04 .* R_PPC_ADDR32 .* x \+ f+fc
diff --git a/gas/testsuite/gas/ppc/reloc.s b/gas/testsuite/gas/ppc/reloc.s
new file mode 100644
index 000000000000..19e4355eb71f
--- /dev/null
+++ b/gas/testsuite/gas/ppc/reloc.s
@@ -0,0 +1,13 @@
+ .reloc x+8, R_PPC_ADDR32, y-4
+
+ .data
+x:
+ .long 0,0,0,0
+
+ .section .data.other,"aw",@progbits
+y:
+ .long 0,0,0,0
+
+ .reloc 0, R_PPC_ADDR32, x
+ .reloc y+4, R_PPC_ADDR32, x-4
+ .reloc x+12, R_PPC_ADDR32, y
diff --git a/gas/testsuite/gas/s390/esa-g5.d b/gas/testsuite/gas/s390/esa-g5.d
index 0c38e419b82b..16021f6e93ef 100644
--- a/gas/testsuite/gas/s390/esa-g5.d
+++ b/gas/testsuite/gas/s390/esa-g5.d
@@ -104,9 +104,9 @@ Disassembly of section .text:
.*: b3 b4 00 69 [ ]*cefr %r6,%f9
.*: 39 69 [ ]*cer %f6,%f9
.*: b2 1a 5f ff [ ]*cfc 4095\(%r5\)
-.*: b3 99 50 69 [ ]*cfdbr %f6,5,%r9
-.*: b3 98 50 69 [ ]*cfebr %f6,5,%r9
-.*: b3 9a 50 69 [ ]*cfxbr %f6,5,%r9
+.*: b3 99 50 69 [ ]*cfdbr %r6,5,%f9
+.*: b3 98 50 69 [ ]*cfebr %r6,5,%f9
+.*: b3 9a 50 69 [ ]*cfxbr %r6,5,%f9
.*: 49 65 af ff [ ]*ch %r6,4095\(%r5,%r10\)
.*: a7 6e 80 01 [ ]*chi %r6,-32767
.*: b2 41 00 69 [ ]*cksm %r6,%r9
@@ -341,7 +341,7 @@ Disassembly of section .text:
.*: b2 18 5f ff [ ]*pc 4095\(%r5\)
.*: b2 2e 00 69 [ ]*pgin %r6,%r9
.*: b2 2f 00 69 [ ]*pgout %r6,%r9
-.*: e9 ff 5f ff af ff [ ]*pka 4095\(256,%r5\),4095\(%r10\)
+.*: e9 1f 5f ff af ff [ ]*pka 4095\(%r5\),4095\(32,%r10\)
.*: e1 ff 5f ff af ff [ ]*pku 4095\(256,%r5\),4095\(%r10\)
.*: ee 69 5f ff af ff [ ]*plo %r6,4095\(%r5\),%r9,4095\(%r10\)
.*: 01 01 [ ]*pr
diff --git a/gas/testsuite/gas/s390/esa-g5.s b/gas/testsuite/gas/s390/esa-g5.s
index 314cbbb09640..3ff0b5343600 100644
--- a/gas/testsuite/gas/s390/esa-g5.s
+++ b/gas/testsuite/gas/s390/esa-g5.s
@@ -98,9 +98,9 @@ foo:
cefr %r6,%f9
cer %f6,%f9
cfc 4095(%r5)
- cfdbr %r6,5,%r9
- cfebr %r6,5,%r9
- cfxbr %r6,5,%r9
+ cfdbr %r6,5,%f9
+ cfebr %r6,5,%f9
+ cfxbr %r6,5,%f9
ch %r6,4095(%r5,%r10)
chi %r6,-32767
cksm %r6,%r9
@@ -335,7 +335,7 @@ foo:
pc 4095(%r5)
pgin %r6,%r9
pgout %r6,%r9
- pka 4095(256,%r5),4095(%r10)
+ pka 4095(%r5),4095(32,%r10)
pku 4095(256,%r5),4095(%r10)
plo %r6,4095(%r5),%r9,4095(%r10)
pr
diff --git a/gas/testsuite/gas/s390/operands.d b/gas/testsuite/gas/s390/operands.d
deleted file mode 100644
index d1744086ba26..000000000000
--- a/gas/testsuite/gas/s390/operands.d
+++ /dev/null
@@ -1,23 +0,0 @@
-#name: s390 operands
-#objdump: -dr
-
-.*: +file format .*
-
-Disassembly of section .text:
-
-.* <foo>:
- 0: 01 01 [ ]*pr
- 2: a7 1a 80 01 [ ]*ahi %r1,-32767
- 6: 18 12 [ ]*lr %r1,%r2
- 8: b2 5e 00 12 [ ]*srst %r1,%r2
- c: b3 5b 93 12 [ ]*didbr %f1,%f9,%f2,3
- 10: ba 12 40 03 [ ]*cs %r1,%r2,3\(%r4\)
- 14: 84 12 00 00 [ ]*brxh %r1,%r2,14 <foo\+0x14>
-[ ]*16: R_390_PC16DBL test_rsi\+0x2
- 18: 58 13 40 02 [ ]*l %r1,2\(%r3,%r4\)
- 1c: ed 10 30 02 00 1a [ ]*adb %f1,2\(%r3\)
- 22: ed 24 50 03 10 1e [ ]*madb %f1,%f2,3\(%r4,%r5\)
- 28: b2 33 20 01 [ ]*ssch 1\(%r2\)
- 2c: 92 03 20 01 [ ]*mvi 1\(%r2\),3
- 30: d2 26 30 01 50 04 [ ]*mvc 1\(39,%r3\),4\(%r5\)
- 36: e5 01 20 01 40 03 [ ]*tprot 1\(%r2\),3\(%r4\)
diff --git a/gas/testsuite/gas/s390/operands.s b/gas/testsuite/gas/s390/operands.s
deleted file mode 100644
index 9f030e835f75..000000000000
--- a/gas/testsuite/gas/s390/operands.s
+++ /dev/null
@@ -1,16 +0,0 @@
-.text
-foo:
- .insn e,0x0101
- .insn ri,0xa70a0000,%r1,-32767
- .insn rr,0x1800,%r1,%r2
- .insn rre,0xb25e0000,%r1,%r2
- .insn rrf,0xb35b0000,%f1,%f2,9,%f3
- .insn rs,0xba000000,%r1,%r2,3(%r4)
- .insn rsi,0x84000000,%r1,%r2,test_rsi
- .insn rx,0x58000000,%r1,2(%r3,%r4)
- .insn rxe,0xed000000001a,%f1,2(%r3)
- .insn rxf,0xed000000001e,%f1,%f2,3(%r4,%r5)
- .insn s,0xb2330000,1(%r2)
- .insn si,0x92000000,1(%r2),3
- .insn ss,0xd20000000000,1(2,%r3),4(%r5),6
- .insn sse,0xe50100000000,1(%r2),3(%r4)
diff --git a/gas/testsuite/gas/s390/operands64.d b/gas/testsuite/gas/s390/operands64.d
deleted file mode 100644
index 5cae0553e146..000000000000
--- a/gas/testsuite/gas/s390/operands64.d
+++ /dev/null
@@ -1,14 +0,0 @@
-#name: s390x operands
-#objdump: -dr
-
-.*: +file format .*
-
-Disassembly of section .text:
-
-.* <foo>:
- 0: ec 12 00 00 00 45 [ ]*brxlg %r1,%r2,0 <foo>
-[ ]*2: R_390_PC16DBL test_rie\+0x2
- 6: c0 e5 00 00 00 00 [ ]*brasl %r14,6 <foo\+0x6>
-[ ]*8: R_390_PC32DBL test_ril\+0x2
- c: eb 12 40 03 00 0d [ ]*sllg %r1,%r2,3\(%r4\)
- 12: 07 07 [ ]*bcr 0,%r7
diff --git a/gas/testsuite/gas/s390/operands64.s b/gas/testsuite/gas/s390/operands64.s
deleted file mode 100644
index 6313cb275a00..000000000000
--- a/gas/testsuite/gas/s390/operands64.s
+++ /dev/null
@@ -1,6 +0,0 @@
-.text
-foo:
- .insn rie,0xec0000000045,%r1,%r2,test_rie
- .insn ril,0xc00500000000,%r14,test_ril
- .insn rse,0xeb000000000d,%r1,%r2,3(%r4)
-
diff --git a/gas/testsuite/gas/s390/s390.exp b/gas/testsuite/gas/s390/s390.exp
index 3d9a4a135c80..8739bdd93272 100644
--- a/gas/testsuite/gas/s390/s390.exp
+++ b/gas/testsuite/gas/s390/s390.exp
@@ -1,19 +1,6 @@
#
# s390/s390x tests
#
-proc run_list_test { name opts } {
- global srcdir subdir
- set testname "s390 $name"
- set file $srcdir/$subdir/$name
- gas_run ${name}.s $opts ">&dump.out"
- if { [regexp_diff "dump.out" "${file}.l"] } then {
- fail $testname
- verbose "output is [file_contents "dump.out"]" 2
- exit
- return
- }
- pass $testname
-}
if [expr [istarget "s390-*-*"] || [istarget "s390x-*-*"]] then {
@@ -32,6 +19,7 @@ if [expr [istarget "s390-*-*"] || [istarget "s390x-*-*"]] then {
run_dump_test "zarch-z900" "{as -m64}"
run_dump_test "zarch-z990" "{as -m64} {as -march=z990}"
run_dump_test "zarch-z9-109" "{as -m64} {as -march=z9-109}"
+ run_dump_test "zarch-z9-ec" "{as -m64} {as -march=z9-ec}"
run_dump_test "zarch-reloc" "{as -m64}"
run_dump_test "zarch-operands" "{as -m64} {as -march=z9-109}"
}
diff --git a/gas/testsuite/gas/s390/zarch-z9-ec.d b/gas/testsuite/gas/s390/zarch-z9-ec.d
new file mode 100644
index 000000000000..142ec0db7506
--- /dev/null
+++ b/gas/testsuite/gas/s390/zarch-z9-ec.d
@@ -0,0 +1,76 @@
+#name: s390x opcode
+#objdump: -drw
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+.* <foo>:
+.*: b3 70 00 62 [ ]*lpdfr %f6,%f2
+.*: b3 71 00 62 [ ]*lndfr %f6,%f2
+.*: b3 72 10 62 [ ]*cpsdr %f6,%f1,%f2
+.*: b3 73 00 62 [ ]*lcdfr %f6,%f2
+.*: b3 c1 00 62 [ ]*ldgr %f6,%r2
+.*: b3 cd 00 26 [ ]*lgdr %r2,%f6
+.*: b3 d2 40 62 [ ]*adtr %f6,%f2,%f4
+.*: b3 da 40 62 [ ]*axtr %f6,%f2,%f4
+.*: b3 e4 00 62 [ ]*cdtr %f6,%f2
+.*: b3 ec 00 62 [ ]*cxtr %f6,%f2
+.*: b3 e0 00 62 [ ]*kdtr %f6,%f2
+.*: b3 e8 00 62 [ ]*kxtr %f6,%f2
+.*: b3 f4 00 62 [ ]*cedtr %f6,%f2
+.*: b3 fc 00 62 [ ]*cextr %f6,%f2
+.*: b3 f1 00 62 [ ]*cdgtr %f6,%r2
+.*: b3 f9 00 62 [ ]*cxgtr %f6,%r2
+.*: b3 f3 00 62 [ ]*cdstr %f6,%r2
+.*: b3 fb 00 62 [ ]*cxstr %f6,%r2
+.*: b3 f2 00 62 [ ]*cdutr %f6,%r2
+.*: b3 fa 00 62 [ ]*cxutr %f6,%r2
+.*: b3 e1 10 26 [ ]*cgdtr %r2,1,%f6
+.*: b3 e9 10 26 [ ]*cgxtr %r2,1,%f6
+.*: b3 e3 00 26 [ ]*csdtr %r2,%f6
+.*: b3 eb 00 26 [ ]*csxtr %r2,%f6
+.*: b3 e2 00 26 [ ]*cudtr %r2,%f6
+.*: b3 ea 00 26 [ ]*cuxtr %r2,%f6
+.*: b3 d1 40 62 [ ]*ddtr %f6,%f2,%f4
+.*: b3 d9 40 62 [ ]*dxtr %f6,%f2,%f4
+.*: b3 e5 00 26 [ ]*eedtr %r2,%f6
+.*: b3 ed 00 26 [ ]*eextr %r2,%f6
+.*: b3 e7 00 26 [ ]*esdtr %r2,%f6
+.*: b3 ef 00 26 [ ]*esxtr %r2,%f6
+.*: b3 f6 20 64 [ ]*iedtr %f6,%f2,%r4
+.*: b3 fe 20 64 [ ]*iextr %f6,%f2,%r4
+.*: b3 d6 00 62 [ ]*ltdtr %f6,%f2
+.*: b3 de 00 62 [ ]*ltxtr %f6,%f2
+.*: b3 d7 13 62 [ ]*fidtr %f6,1,%f2,3
+.*: b3 df 13 62 [ ]*fixtr %f6,1,%f2,3
+.*: b2 bd 10 03 [ ]*lfas 3\(%r1\)
+.*: b3 d4 01 62 [ ]*ldetr %f6,%f2,1
+.*: b3 dc 01 62 [ ]*lxdtr %f6,%f2,1
+.*: b3 d5 13 62 [ ]*ledtr %f6,1,%f2,3
+.*: b3 dd 13 62 [ ]*ldxtr %f6,1,%f2,3
+.*: b3 d0 40 62 [ ]*mdtr %f6,%f2,%f4
+.*: b3 d8 40 62 [ ]*mxtr %f6,%f2,%f4
+.*: b3 f5 21 64 [ ]*qadtr %f6,%f2,%f4,1
+.*: b3 fd 21 64 [ ]*qaxtr %f6,%f2,%f4,1
+.*: b3 f7 21 64 [ ]*rrdtr %f6,%f2,%f4,1
+.*: b3 ff 21 64 [ ]*rrxtr %f6,%f2,%f4,1
+.*: b2 b9 10 03 [ ]*srnmt 3\(%r1\)
+.*: b3 85 00 20 [ ]*sfasr %r2
+.*: ed 21 40 03 60 40 [ ]*sldt %f6,%f2,3\(%r1,%r4\)
+.*: ed 21 40 03 60 48 [ ]*slxt %f6,%f2,3\(%r1,%r4\)
+.*: ed 21 40 03 60 41 [ ]*srdt %f6,%f2,3\(%r1,%r4\)
+.*: ed 21 40 03 60 49 [ ]*srxt %f6,%f2,3\(%r1,%r4\)
+.*: b3 d3 40 62 [ ]*sdtr %f6,%f2,%f4
+.*: b3 db 40 62 [ ]*sxtr %f6,%f2,%f4
+.*: ed 61 20 03 00 50 [ ]*tcet %f6,3\(%r1,%r2\)
+.*: ed 61 20 03 00 54 [ ]*tcdt %f6,3\(%r1,%r2\)
+.*: ed 61 20 03 00 58 [ ]*tcxt %f6,3\(%r1,%r2\)
+.*: ed 61 20 03 00 51 [ ]*tget %f6,3\(%r1,%r2\)
+.*: ed 61 20 03 00 55 [ ]*tgdt %f6,3\(%r1,%r2\)
+.*: ed 61 20 03 00 59 [ ]*tgxt %f6,3\(%r1,%r2\)
+.*: 01 0a [ ]*pfpo
+.*: c8 31 10 0a 20 14 [ ]*ectg 10\(%r1\),20\(%r2\),%r3
+.*: c8 32 10 0a 20 14 [ ]*csst 10\(%r1\),20\(%r2\),%r3
+# Expect 2 bytes of padding.
+.*: 07 07 [ ]*bcr 0,%r7
diff --git a/gas/testsuite/gas/s390/zarch-z9-ec.s b/gas/testsuite/gas/s390/zarch-z9-ec.s
new file mode 100644
index 000000000000..9139b7543a8a
--- /dev/null
+++ b/gas/testsuite/gas/s390/zarch-z9-ec.s
@@ -0,0 +1,72 @@
+.text
+foo:
+ lpdfr %f6,%f2
+ lndfr %f6,%f2
+ cpsdr %f6,%f1,%f2
+ lcdfr %f6,%f2
+ ldgr %f6,%r2
+ lgdr %r2,%f6
+ adtr %f6,%f2,%f4
+ axtr %f6,%f2,%f4
+ cdtr %f6,%f2
+ cxtr %f6,%f2
+ kdtr %f6,%f2
+ kxtr %f6,%f2
+ cedtr %f6,%f2
+ cextr %f6,%f2
+ cdgtr %f6,%r2
+ cxgtr %f6,%r2
+ cdstr %f6,%r2
+ cxstr %f6,%r2
+ cdutr %f6,%r2
+ cxutr %f6,%r2
+ cgdtr %r2,1,%f6
+ cgxtr %r2,1,%f6
+ csdtr %r2,%f6
+ csxtr %r2,%f6
+ cudtr %r2,%f6
+ cuxtr %r2,%f6
+ ddtr %f6,%f2,%f4
+ dxtr %f6,%f2,%f4
+ eedtr %r2,%f6
+ eextr %r2,%f6
+ esdtr %r2,%f6
+ esxtr %r2,%f6
+ iedtr %f6,%f2,%r4
+ iextr %f6,%f2,%r4
+ ltdtr %f6,%f2
+ ltxtr %f6,%f2
+ fidtr %f6,1,%f2,3
+ fixtr %f6,1,%f2,3
+ lfas 3(%r1)
+ ldetr %f6,%f2,1
+ lxdtr %f6,%f2,1
+ ledtr %f6,1,%f2,3
+ ldxtr %f6,1,%f2,3
+ mdtr %f6,%f2,%f4
+ mxtr %f6,%f2,%f4
+ qadtr %f6,%f2,%f4,1
+ qaxtr %f6,%f2,%f4,1
+ rrdtr %f6,%f2,%f4,1
+ rrxtr %f6,%f2,%f4,1
+ srnmt 3(%r1)
+ sfasr %r2
+ sldt %f6,%f2,3(%r1,%r4)
+ slxt %f6,%f2,3(%r1,%r4)
+ srdt %f6,%f2,3(%r1,%r4)
+ srxt %f6,%f2,3(%r1,%r4)
+ sdtr %f6,%f2,%f4
+ sxtr %f6,%f2,%f4
+ tcet %f6,3(%r1,%r2)
+ tcdt %f6,3(%r1,%r2)
+ tcxt %f6,3(%r1,%r2)
+ tget %f6,3(%r1,%r2)
+ tgdt %f6,3(%r1,%r2)
+ tgxt %f6,3(%r1,%r2)
+ pfpo
+ ectg 10(%r1),20(%r2),%r3
+ csst 10(%r1),20(%r2),%r3
+ /* The following .data section is 4 byte aligned.
+ So we get 2 additional bytes of 07 07 wherefor
+ we have to provide an instruction. */
+ bcr 0,%r7
diff --git a/gas/testsuite/gas/s390/zarch-z900.d b/gas/testsuite/gas/s390/zarch-z900.d
index 0f701282acf9..dc21077dedfd 100644
--- a/gas/testsuite/gas/s390/zarch-z900.d
+++ b/gas/testsuite/gas/s390/zarch-z900.d
@@ -29,20 +29,20 @@ Disassembly of section .text:
.*: eb 96 5f ff 00 3e [ ]*cdsg %r9,%r6,4095\(%r5\)
.*: b3 a4 00 96 [ ]*cegbr %r9,%r6
.*: b3 c4 00 96 [ ]*cegr %r9,%r6
-.*: b3 b9 90 65 [ ]*cfdr %f6,9,%r5
-.*: b3 b8 90 65 [ ]*cfer %f6,9,%r5
-.*: b3 ba 90 65 [ ]*cfxr %f6,9,%r5
+.*: b3 b9 90 65 [ ]*cfdr %r6,9,%f5
+.*: b3 b8 90 65 [ ]*cfer %r6,9,%f5
+.*: b3 ba 90 65 [ ]*cfxr %r6,9,%f5
.*: e3 95 af ff 00 20 [ ]*cg %r9,4095\(%r5,%r10\)
-.*: b3 a9 f0 65 [ ]*cgdbr %f6,15,%r5
-.*: b3 c9 f0 65 [ ]*cgdr %f6,15,%r5
-.*: b3 a8 f0 65 [ ]*cgebr %f6,15,%r5
-.*: b3 c8 f0 65 [ ]*cger %f6,15,%r5
+.*: b3 a9 f0 65 [ ]*cgdbr %r6,15,%f5
+.*: b3 c9 f0 65 [ ]*cgdr %r6,15,%f5
+.*: b3 a8 f0 65 [ ]*cgebr %r6,15,%f5
+.*: b3 c8 f0 65 [ ]*cger %r6,15,%f5
.*: e3 95 af ff 00 30 [ ]*cgf %r9,4095\(%r5,%r10\)
.*: b9 30 00 96 [ ]*cgfr %r9,%r6
.*: a7 9f 80 01 [ ]*cghi %r9,-32767
.*: b9 20 00 96 [ ]*cgr %r9,%r6
-.*: b3 aa f0 65 [ ]*cgxbr %f6,15,%r5
-.*: b3 ca f0 65 [ ]*cgxr %f6,15,%r5
+.*: b3 aa f0 65 [ ]*cgxbr %r6,15,%f5
+.*: b3 ca f0 65 [ ]*cgxr %r6,15,%f5
.*: e3 95 af ff 00 21 [ ]*clg %r9,4095\(%r5,%r10\)
.*: e3 95 af ff 00 31 [ ]*clgf %r9,4095\(%r5,%r10\)
.*: b9 31 00 96 [ ]*clgfr %r9,%r6
diff --git a/gas/testsuite/gas/s390/zarch-z900.s b/gas/testsuite/gas/s390/zarch-z900.s
index f5e737113c5e..688033a32e91 100644
--- a/gas/testsuite/gas/s390/zarch-z900.s
+++ b/gas/testsuite/gas/s390/zarch-z900.s
@@ -23,20 +23,20 @@ foo:
cdsg %r9,%r6,4095(%r5)
cegbr %r9,%r6
cegr %r9,%r6
- cfdr %f6,9,%r5
- cfer %f6,9,%r5
- cfxr %f6,9,%r5
+ cfdr %r6,9,%f5
+ cfer %r6,9,%f5
+ cfxr %r6,9,%f5
cg %r9,4095(%r5,%r10)
- cgdbr %f6,15,%r5
- cgdr %f6,15,%r5
- cgebr %f6,15,%r5
- cger %f6,15,%r5
+ cgdbr %r6,15,%f5
+ cgdr %r6,15,%f5
+ cgebr %r6,15,%f5
+ cger %r6,15,%f5
cgf %r9,4095(%r5,%r10)
cgfr %r9,%r6
cghi %r9,-32767
cgr %r9,%r6
- cgxbr %f6,15,%r5
- cgxr %f6,15,%r5
+ cgxbr %r6,15,%f5
+ cgxr %r6,15,%f5
clg %r9,4095(%r5,%r10)
clgf %r9,4095(%r5,%r10)
clgfr %r9,%r6
diff --git a/gas/testsuite/gas/score/addi.d b/gas/testsuite/gas/score/addi.d
new file mode 100644
index 000000000000..148ecd714339
--- /dev/null
+++ b/gas/testsuite/gas/score/addi.d
@@ -0,0 +1,33 @@
+#as:
+#objdump: -d
+#source: addi.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <.text>:
+ 0: 84008003 addi.c r0, 1
+ 4: 84008003 addi.c r0, 1
+ 8: 85e08021 addi.c r15, 16
+ c: 85e08021 addi.c r15, 16
+ 10: 85e18001 addi.c r15, 16384
+ 14: 85e18001 addi.c r15, 16384
+ 18: 6818 addei! r8, 3
+ 1a: 6818 addei! r8, 3
+ 1c: 6f78 addei! r15, 15
+ 1e: 0000 nop!
+ 20: 85e1ffff addi.c r15, 32767
+ ...
+ 30: 8403ffff addi.c r0, -1
+ 34: 8403ffff addi.c r0, -1
+ 38: 85e3ffe1 addi.c r15, -16
+ 3c: 85e3ffe1 addi.c r15, -16
+ 40: 85e38001 addi.c r15, -16384
+ 44: 85e38001 addi.c r15, -16384
+ 48: 6898 subei! r8, 3
+ 4a: 6898 subei! r8, 3
+ 4c: 6ff8 subei! r15, 15
+ 4e: 0000 nop!
+ 50: 85e1ffff addi.c r15, 32767
+#pass
diff --git a/gas/testsuite/gas/score/addi.s b/gas/testsuite/gas/score/addi.s
new file mode 100644
index 000000000000..e87620e5c590
--- /dev/null
+++ b/gas/testsuite/gas/score/addi.s
@@ -0,0 +1,37 @@
+/*
+ * test relax
+ * addi <-> addei! : for addei : register number must be in 0-15, offset : 4b, only 16b -> 32b
+ * (1)addi rD, simm16 : rD = rD + simm16, -32768 <= simm16 <= 32767
+ * (2)addei! rD, imm4 : rD = rD + 2**imm4
+ * addi <-> subei! : for addei : register number must be in 0-15, offset : 4b, only 16b -> 32b
+ * (1)addi rD, simm16 : rD = rD + simm16, -32768 <= simm16 <= 32767
+ * (2)subei! rD, imm4 : rD = rD + 2**imm4
+
+ * Author: ligang
+ */
+
+/* This macro transform 16b instruction to 32b. */
+.macro tran1632 insn32, insn16, sign
+.align 4
+
+ \insn16 r0, 0 #16b -> 32b
+ \insn32 r0, \sign * 1
+
+ \insn16 r15, 4 #16b -> 32b
+ \insn32 r15, \sign * 16
+
+ \insn16 r15, 14 #16b -> 32b
+ \insn32 r15, \sign * 1024 * 16
+
+ \insn16 r8, 3 #No transform
+ \insn16 r8, 3 #No transform
+
+ \insn16 r15, 15 #No transform. Because 2**15 = 32768, extend range of addi
+ \insn32 r15, 0x7FFF
+
+.endm
+
+.text
+
+ tran1632 "addi.c", "addei!", 1
+ tran1632 "addi.c", "subei!", -1
diff --git a/gas/testsuite/gas/score/b.d b/gas/testsuite/gas/score/b.d
new file mode 100644
index 000000000000..133540e4673d
--- /dev/null
+++ b/gas/testsuite/gas/score/b.d
@@ -0,0 +1,18 @@
+#as:
+#objdump: -d
+#source: b.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <L1>:
+ 0: 4f00 b! 0 <L1>
+ 2: 4fff b! 0 <L1>
+ 4: 4ffe b! 0 <L1>
+ 6: 4ffd b! 0 <L1>
+ 8: 4ffc b! 0 <L1>
+ a: 4ffb b! 0 <L1>
+ c: 93ffbff4 b 0 <L1>
+ 10: 8254e010 add r18, r20, r24
+#pass
diff --git a/gas/testsuite/gas/score/b.s b/gas/testsuite/gas/score/b.s
new file mode 100644
index 000000000000..002347c04f38
--- /dev/null
+++ b/gas/testsuite/gas/score/b.s
@@ -0,0 +1,30 @@
+/*
+ * test relax
+ * b <-> b! : jump range must be in 8 bit, only 32b -> 16b
+
+ * Author: ligang
+ */
+
+.macro tran insn32, insn16
+/* This block transform 32b instruction to 16b. */
+.align 4
+
+ \insn32 #32b -> 16b
+ \insn16
+
+ \insn32 #32b -> 16b
+ \insn32 #32b -> 16b
+
+ \insn16
+ \insn32 #32b -> 16b
+
+ \insn32 #No transform
+ add r18, r20, r24
+
+.endm
+
+L1:
+
+ tran "b L1", "b! L1"
+ #tran "b 0x8", "b! 0x8"
+
diff --git a/gas/testsuite/gas/score/bittst.d b/gas/testsuite/gas/score/bittst.d
new file mode 100644
index 000000000000..0bb6651b30a3
--- /dev/null
+++ b/gas/testsuite/gas/score/bittst.d
@@ -0,0 +1,36 @@
+#as:
+#objdump: -d
+#source: bittst.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+ 0: 6016 bittst! r0, 0x2
+ 2: 6016 bittst! r0, 0x2
+ 4: 6f26 bittst! r15, 0x4
+ 6: 6f26 bittst! r15, 0x4
+ 8: 6f0e bittst! r15, 0x1
+ a: 6f0e bittst! r15, 0x1
+ c: 6f1e bittst! r15, 0x3
+ e: 6f1e bittst! r15, 0x3
+ 10: 6816 bittst! r8, 0x2
+ 12: 6816 bittst! r8, 0x2
+ 14: 800f842d bittst.c r15, 0x1
+ 18: 801a902d bittst.c r26, 0x4
+ 1c: 0000 nop!
+ 1e: 0000 nop!
+ 20: 8000882d bittst.c r0, 0x2
+ 24: 8014882d bittst.c r20, 0x2
+ 28: 81ef902d bittst.c r15, 0x4
+ 2c: 8019902d bittst.c r25, 0x4
+ 30: 81ef842d bittst.c r15, 0x1
+ 34: 8019842d bittst.c r25, 0x1
+ 38: 680e bittst! r8, 0x1
+ 3a: 680e bittst! r8, 0x1
+ 3c: 6626 bittst! r6, 0x4
+ 3e: 6626 bittst! r6, 0x4
+ 40: 671e bittst! r7, 0x3
+ 42: 671e bittst! r7, 0x3
+#pass
diff --git a/gas/testsuite/gas/score/bittst.s b/gas/testsuite/gas/score/bittst.s
new file mode 100644
index 000000000000..b6657b9a5d5d
--- /dev/null
+++ b/gas/testsuite/gas/score/bittst.s
@@ -0,0 +1,59 @@
+/*
+ * test relax
+ * bittst.c <-> bittst! : register number must be in 0-15
+
+ * Author: ligang
+ */
+
+/* This macro transform 32b instruction to 16b. */
+.macro tran3216 insn32, insn16
+
+ \insn32 r0, 2 #32b -> 16b
+ \insn16 r0, 2
+
+ \insn32 r15, 4 #32b -> 16b
+ \insn16 r15, 4
+
+ \insn32 r15, 1 #32b -> 16b
+ \insn16 r15, 1
+
+ \insn16 r15, 3
+ \insn32 r15, 3 #32b -> 16b
+
+ \insn32 r8, 2 #32b -> 16b
+ \insn32 r8, 2 #32b -> 16b
+
+ \insn32 r15, 1 #No transform
+ \insn32 r26, 4
+
+.endm
+
+/* This macro transform 16b instruction to 32b. */
+.macro tran1632 insn32, insn16
+.align 4
+
+ \insn16 r0, 2 #16b -> 32b
+ \insn32 r20, 2
+
+ \insn16 r15, 4 #16b -> 32b
+ \insn32 r25, 4
+
+ \insn16 r15, 1 #16b -> 32b
+ \insn32 r25, 1
+
+ \insn16 r8, 1 #No transform
+ \insn16 r8, 1 #No transform
+
+ \insn16 r6, 4 #No transform
+ \insn32 r6, 4 #32b -> 16b
+
+ \insn32 r7, 3 #32b -> 16b
+ \insn16 r7, 3 #No transform
+
+.endm
+
+.text
+
+ tran3216 "bittst.c", "bittst!"
+ tran1632 "bittst.c", "bittst!"
+
diff --git a/gas/testsuite/gas/score/br.d b/gas/testsuite/gas/score/br.d
new file mode 100644
index 000000000000..273632fbd03f
--- /dev/null
+++ b/gas/testsuite/gas/score/br.d
@@ -0,0 +1,49 @@
+#as:
+#objdump: -d
+#source: br.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <.text>:
+ 0: 0f04 br! r0
+ 2: 0f04 br! r0
+ 4: 0ff4 br! r15
+ 6: 0ff4 br! r15
+ 8: 0f34 br! r3
+ a: 0f34 br! r3
+ c: 0f54 br! r5
+ e: 0f54 br! r5
+ 10: 8003bc08 br r3
+ 14: 801fbc08 br r31
+ ...
+ 20: 0f0c brl! r0
+ 22: 0f0c brl! r0
+ 24: 0ffc brl! r15
+ 26: 0ffc brl! r15
+ 28: 0f3c brl! r3
+ 2a: 0f3c brl! r3
+ 2c: 0f5c brl! r5
+ 2e: 0f5c brl! r5
+ 30: 8003bc09 brl r3
+ 34: 801fbc09 brl r31
+ ...
+ 40: 8000bc08 br r0
+ 44: 8017bc08 br r23
+ 48: 800fbc08 br r15
+ 4c: 801bbc08 br r27
+ 50: 0f64 br! r6
+ 52: 0f64 br! r6
+ 54: 0f34 br! r3
+ 56: 0f34 br! r3
+ ...
+ 60: 8000bc09 brl r0
+ 64: 8017bc09 brl r23
+ 68: 800fbc09 brl r15
+ 6c: 801bbc09 brl r27
+ 70: 0f6c brl! r6
+ 72: 0f6c brl! r6
+ 74: 0f3c brl! r3
+ 76: 0f3c brl! r3
+#pass
diff --git a/gas/testsuite/gas/score/br.s b/gas/testsuite/gas/score/br.s
new file mode 100644
index 000000000000..e60e058d8190
--- /dev/null
+++ b/gas/testsuite/gas/score/br.s
@@ -0,0 +1,53 @@
+/*
+ * test relax
+ * br <-> br! : register number must be in 0-15
+ * brl <-> brl! : register number must be in 0-15
+
+ * Author: ligang
+ */
+
+/* This macro transform 32b instruction to 16b. */
+.macro tran3216 insn32, insn16
+.align 4
+
+ \insn32 r0 #32b -> 16b
+ \insn16 r0
+
+ \insn32 r15 #32b -> 16b
+ \insn16 r15
+
+ \insn32 r3 #32b -> 16b
+ \insn32 r3 #32b -> 16b
+
+ \insn16 r5
+ \insn32 r5 #32b -> 16b
+
+ \insn32 r3 #No transform
+ \insn32 r31 #No transform
+
+.endm
+
+/* This macro transform 16b instruction to 32b. */
+.macro tran1632 insn32, insn16
+.align 4
+
+ \insn16 r0 #16b -> 32b
+ \insn32 r23
+
+ \insn16 r15 #16b -> 32b
+ \insn32 r27
+
+ \insn16 r6 #No transform
+ \insn32 r6
+
+ \insn16 r3 #No transform
+ \insn16 r3
+
+.endm
+
+ tran3216 "br", "br!"
+ tran3216 "brl", "brl!"
+
+ tran1632 "br", "br!"
+ tran1632 "brl", "brl!"
+
diff --git a/gas/testsuite/gas/score/ldi.d b/gas/testsuite/gas/score/ldi.d
new file mode 100644
index 000000000000..edd806d7b40c
--- /dev/null
+++ b/gas/testsuite/gas/score/ldi.d
@@ -0,0 +1,29 @@
+#as:
+#objdump: -d
+#source: ldi.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+ 0: 5200 ldiu! r2, 0
+ 2: 5200 ldiu! r2, 0
+ 4: 53ff ldiu! r3, 255
+ 6: 53ff ldiu! r3, 255
+ 8: 5409 ldiu! r4, 9
+ a: 5409 ldiu! r4, 9
+ c: 53ff ldiu! r3, 255
+ e: 53ff ldiu! r3, 255
+ 10: 85188006 ldi r8, 0x3\(3\)
+ 14: 87388006 ldi r25, 0x3\(3\)
+ ...
+ 20: 84588000 ldi r2, 0x0\(0\)
+ 24: 87388000 ldi r25, 0x0\(0\)
+ 28: 847881fe ldi r3, 0xff\(255\)
+ 2c: 86f88002 ldi r23, 0x1\(1\)
+ 30: 5fff ldiu! r15, 255
+ 32: 5fff ldiu! r15, 255
+ 34: 5803 ldiu! r8, 3
+ 36: 5803 ldiu! r8, 3
+#pass
diff --git a/gas/testsuite/gas/score/ldi.s b/gas/testsuite/gas/score/ldi.s
new file mode 100644
index 000000000000..d180da34d56d
--- /dev/null
+++ b/gas/testsuite/gas/score/ldi.s
@@ -0,0 +1,53 @@
+/*
+ * test relax
+ * ldi <-> ldiu! : for ldiu! : register number must be in 0-15, simm16: [0-255]
+ * (1)ldi rD, simm16 : rD = simm16
+ * (2)ldiu! rD, imm8 : rD = ZE(imm8)
+
+ * Author: ligang
+ */
+
+/* This macro transform 32b instruction to 16b. */
+.macro tran3216 insn32, insn16
+.align 4
+
+ \insn32 r2, 0 #32b -> 16b
+ \insn16 r2, 0
+
+ \insn32 r3, 255 #32b -> 16b
+ \insn16 r3, 255
+
+ \insn32 r4, 9 #32b -> 16b
+ \insn32 r4, 9 #32b -> 16b
+
+ \insn16 r3, 255
+ \insn32 r3, 255 #32b -> 16b
+
+ \insn32 r8, 3 #No transform
+ \insn32 r25, 3 #No transform
+
+
+.endm
+
+/* This macro transform 16b instruction to 32b. */
+.macro tran1632 insn32, insn16
+.align 4
+
+ \insn16 r2, 0 #16b -> 32b
+ \insn32 r25, 0
+
+ \insn16 r3, 255 #16b -> 32b
+ \insn32 r23, 1
+
+ \insn16 r15, 255 #No transform
+ \insn32 r15, 255
+
+ \insn16 r8, 3 #No transform
+ \insn16 r8, 3 #No transform
+
+.endm
+
+.text
+
+ tran3216 "ldi", "ldiu!"
+ tran1632 "ldi", "ldiu!"
diff --git a/gas/testsuite/gas/score/ls32ls16.d b/gas/testsuite/gas/score/ls32ls16.d
new file mode 100644
index 000000000000..a6ddfa60e1f8
--- /dev/null
+++ b/gas/testsuite/gas/score/ls32ls16.d
@@ -0,0 +1,145 @@
+#as:
+#objdump: -d
+#source: ls32ls16.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <.text>:
+ ...
+ 10: 2038 lw! r0, \[r3\]
+ 12: 2038 lw! r0, \[r3\]
+ 14: 23f8 lw! r3, \[r15\]
+ 16: 23f8 lw! r3, \[r15\]
+ 18: 2f88 lw! r15, \[r8\]
+ 1a: 2f88 lw! r15, \[r8\]
+ 1c: c0888000 lw r4, \[r8, 0\]
+ 20: c3338000 lw r25, \[r19, 0\]
+ 24: 2578 lw! r5, \[r7\]
+ 26: 2578 lw! r5, \[r7\]
+ 28: 2238 lw! r2, \[r3\]
+ 2a: 2238 lw! r2, \[r3\]
+ ...
+ 40: 2039 lh! r0, \[r3\]
+ 42: 2039 lh! r0, \[r3\]
+ 44: 23f9 lh! r3, \[r15\]
+ 46: 23f9 lh! r3, \[r15\]
+ 48: 2f89 lh! r15, \[r8\]
+ 4a: 2f89 lh! r15, \[r8\]
+ 4c: c4888000 lh r4, \[r8, 0\]
+ 50: c7338000 lh r25, \[r19, 0\]
+ 54: 2579 lh! r5, \[r7\]
+ 56: 2579 lh! r5, \[r7\]
+ 58: 2239 lh! r2, \[r3\]
+ 5a: 2239 lh! r2, \[r3\]
+ ...
+ 110: 203b lbu! r0, \[r3\]
+ 112: 203b lbu! r0, \[r3\]
+ 114: 23fb lbu! r3, \[r15\]
+ 116: 23fb lbu! r3, \[r15\]
+ 118: 2f8b lbu! r15, \[r8\]
+ 11a: 2f8b lbu! r15, \[r8\]
+ 11c: d8888000 lbu r4, \[r8, 0\]
+ 120: db338000 lbu r25, \[r19, 0\]
+ 124: 257b lbu! r5, \[r7\]
+ 126: 257b lbu! r5, \[r7\]
+ 128: 223b lbu! r2, \[r3\]
+ 12a: 223b lbu! r2, \[r3\]
+ ...
+ 210: 203c sw! r0, \[r3\]
+ 212: 203c sw! r0, \[r3\]
+ 214: 23fc sw! r3, \[r15\]
+ 216: 23fc sw! r3, \[r15\]
+ 218: 2f8c sw! r15, \[r8\]
+ 21a: 2f8c sw! r15, \[r8\]
+ 21c: d0888000 sw r4, \[r8, 0\]
+ 220: d3338000 sw r25, \[r19, 0\]
+ 224: 257c sw! r5, \[r7\]
+ 226: 257c sw! r5, \[r7\]
+ 228: 223c sw! r2, \[r3\]
+ 22a: 223c sw! r2, \[r3\]
+ 22c: 0000 nop!
+ 22e: 0000 nop!
+ 230: 203d sh! r0, \[r3\]
+ 232: 203d sh! r0, \[r3\]
+ 234: 23fd sh! r3, \[r15\]
+ 236: 23fd sh! r3, \[r15\]
+ 238: 2f8d sh! r15, \[r8\]
+ 23a: 2f8d sh! r15, \[r8\]
+ 23c: d4888000 sh r4, \[r8, 0\]
+ 240: d7338000 sh r25, \[r19, 0\]
+ 244: 257d sh! r5, \[r7\]
+ 246: 257d sh! r5, \[r7\]
+ 248: 223d sh! r2, \[r3\]
+ 24a: 223d sh! r2, \[r3\]
+ 24c: 0000 nop!
+ 24e: 0000 nop!
+ 250: 203f sb! r0, \[r3\]
+ 252: 203f sb! r0, \[r3\]
+ 254: 23ff sb! r3, \[r15\]
+ 256: 23ff sb! r3, \[r15\]
+ 258: 2f8f sb! r15, \[r8\]
+ 25a: 2f8f sb! r15, \[r8\]
+ 25c: dc888000 sb r4, \[r8, 0\]
+ 260: df338000 sb r25, \[r19, 0\]
+ 264: 257f sb! r5, \[r7\]
+ 266: 257f sb! r5, \[r7\]
+ 268: 223f sb! r2, \[r3\]
+ 26a: 223f sb! r2, \[r3\]
+ 26c: 0000 nop!
+ 26e: 0000 nop!
+ 270: c0038000 lw r0, \[r3, 0\]
+ 274: c257800a lw r18, \[r23, 10\]
+ 278: c1e08000 lw r15, \[r0, 0\]
+ 27c: c23a800a lw r17, \[r26, 10\]
+ 280: 2688 lw! r6, \[r8\]
+ 282: 2688 lw! r6, \[r8\]
+ 284: 2378 lw! r3, \[r7\]
+ 286: 2378 lw! r3, \[r7\]
+ ...
+ 290: c4038000 lh r0, \[r3, 0\]
+ 294: c657800a lh r18, \[r23, 10\]
+ 298: c5e08000 lh r15, \[r0, 0\]
+ 29c: c63a800a lh r17, \[r26, 10\]
+ 2a0: 2689 lh! r6, \[r8\]
+ 2a2: 2689 lh! r6, \[r8\]
+ 2a4: 2379 lh! r3, \[r7\]
+ 2a6: 2379 lh! r3, \[r7\]
+ ...
+ 2b0: d8038000 lbu r0, \[r3, 0\]
+ 2b4: da57800a lbu r18, \[r23, 10\]
+ 2b8: d9e08000 lbu r15, \[r0, 0\]
+ 2bc: da3a800a lbu r17, \[r26, 10\]
+ 2c0: 268b lbu! r6, \[r8\]
+ 2c2: 268b lbu! r6, \[r8\]
+ 2c4: 237b lbu! r3, \[r7\]
+ 2c6: 237b lbu! r3, \[r7\]
+ ...
+ 2d0: d0038000 sw r0, \[r3, 0\]
+ 2d4: d257800a sw r18, \[r23, 10\]
+ 2d8: d1e08000 sw r15, \[r0, 0\]
+ 2dc: d23a800a sw r17, \[r26, 10\]
+ 2e0: 268c sw! r6, \[r8\]
+ 2e2: 268c sw! r6, \[r8\]
+ 2e4: 237c sw! r3, \[r7\]
+ 2e6: 237c sw! r3, \[r7\]
+ ...
+ 2f0: d4038000 sh r0, \[r3, 0\]
+ 2f4: d657800a sh r18, \[r23, 10\]
+ 2f8: d5e08000 sh r15, \[r0, 0\]
+ 2fc: d63a800a sh r17, \[r26, 10\]
+ 300: 268d sh! r6, \[r8\]
+ 302: 268d sh! r6, \[r8\]
+ 304: 237d sh! r3, \[r7\]
+ 306: 237d sh! r3, \[r7\]
+ ...
+ 310: dc038000 sb r0, \[r3, 0\]
+ 314: de57800a sb r18, \[r23, 10\]
+ 318: dde08000 sb r15, \[r0, 0\]
+ 31c: de3a800a sb r17, \[r26, 10\]
+ 320: 268f sb! r6, \[r8\]
+ 322: 268f sb! r6, \[r8\]
+ 324: 237f sb! r3, \[r7\]
+ 326: 237f sb! r3, \[r7\]
+#pass
diff --git a/gas/testsuite/gas/score/ls32ls16.s b/gas/testsuite/gas/score/ls32ls16.s
new file mode 100644
index 000000000000..387d41dab9e9
--- /dev/null
+++ b/gas/testsuite/gas/score/ls32ls16.s
@@ -0,0 +1,70 @@
+/*
+ * test relax
+ * lw <-> lw! : register number must be in 0-15, offset == 0
+ * lh <-> lh! : register number must be in 0-15, offset == 0
+ * lbu <-> lbu! : register number must be in 0-15, offset == 0
+ * sw <-> sw! : register number must be in 0-15, offset == 0
+ * sh <-> sh! : register number must be in 0-15, offset == 0
+ * sb <-> sb! : register number must be in 0-15, offset == 0
+
+ * Author: ligang
+ */
+
+/* This macro transform 32b instruction to 16b. */
+.macro tran3216 insn32, insn16
+.align 4
+
+ \insn32 r0, [r3, 0] #32b -> 16b
+ \insn16 r0, [r3]
+
+ \insn32 r3, [r15, 0] #32b -> 16b
+ \insn16 r3, [r15]
+
+ \insn32 r15, [r8, 0] #32b -> 16b
+ \insn16 r15, [r8]
+
+ \insn32 r4, [r8, 0] #No transform
+ \insn32 r25, [r19, 0]
+
+ \insn32 r5, [r7, 0] #32b -> 16b
+ \insn32 r5, [r7, 0] #32b -> 16b
+
+ \insn16 r2, [r3]
+ \insn32 r2, [r3, 0] #32b -> 16b
+
+.endm
+
+/* This macro transform 16b instruction to 32b. */
+.macro tran1632 insn32, insn16
+.align 4
+
+ \insn16 r0, [r3] #16b -> 32b
+ \insn32 r18, [r23, 10]
+
+ \insn16 r15, [r0] #16b -> 32b
+ \insn32 r17, [r26, 10]
+
+ \insn16 r6, [r8] #No transform
+ \insn16 r6, [r8] #No transform
+
+ \insn16 r3, [r7] #No transform
+ \insn32 r3, [r7, 0]
+
+.endm
+.space 1
+ tran3216 "lw", "lw!"
+.fill 10, 1
+ tran3216 "lh", "lh!"
+.org 0x101
+ tran3216 "lbu", "lbu!"
+.org 0x203
+ tran3216 "sw", "sw!"
+ tran3216 "sh", "sh!"
+ tran3216 "sb", "sb!"
+
+ tran1632 "lw", "lw!"
+ tran1632 "lh", "lh!"
+ tran1632 "lbu", "lbu!"
+ tran1632 "sw", "sw!"
+ tran1632 "sh", "sh!"
+ tran1632 "sb", "sb!"
diff --git a/gas/testsuite/gas/score/ls32ls16p.d b/gas/testsuite/gas/score/ls32ls16p.d
new file mode 100644
index 000000000000..aa1d3a64de66
--- /dev/null
+++ b/gas/testsuite/gas/score/ls32ls16p.d
@@ -0,0 +1,135 @@
+#as:
+#objdump: -d
+#source: ls32ls16p.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <.text>:
+ 0: 7320 lwp! r3, 16
+ 2: 7320 lwp! r3, 16
+ 4: 7460 lwp! r4, 48
+ 6: 7460 lwp! r4, 48
+ 8: 7790 lwp! r7, 72
+ a: 7790 lwp! r7, 72
+ c: 7840 lwp! r8, 32
+ e: 7840 lwp! r8, 32
+ 10: c0a28080 lw r5, \[r2, 128\]
+ 14: c0a28080 lw r5, \[r2, 128\]
+ 18: c0c68020 lw r6, \[r6, 32\]
+ 1c: c0c68020 lw r6, \[r6, 32\]
+ 20: 7321 lhp! r3, 8
+ 22: 7321 lhp! r3, 8
+ 24: 7461 lhp! r4, 24
+ 26: 7461 lhp! r4, 24
+ 28: 7791 lhp! r7, 36
+ 2a: 7791 lhp! r7, 36
+ 2c: 7841 lhp! r8, 16
+ 2e: 7841 lhp! r8, 16
+ 30: c4a28040 lh r5, \[r2, 64\]
+ 34: c4a28040 lh r5, \[r2, 64\]
+ 38: c4c68010 lh r6, \[r6, 16\]
+ 3c: c4c68010 lh r6, \[r6, 16\]
+ 40: 7323 lbup! r3, 4
+ 42: 7323 lbup! r3, 4
+ 44: 7463 lbup! r4, 12
+ 46: 7463 lbup! r4, 12
+ 48: 7793 lbup! r7, 18
+ 4a: 7793 lbup! r7, 18
+ 4c: 7843 lbup! r8, 8
+ 4e: 7843 lbup! r8, 8
+ 50: d8a28020 lbu r5, \[r2, 32\]
+ 54: d8a28020 lbu r5, \[r2, 32\]
+ 58: d8c68008 lbu r6, \[r6, 8\]
+ 5c: d8c68008 lbu r6, \[r6, 8\]
+ 60: 7324 swp! r3, 16
+ 62: 7324 swp! r3, 16
+ 64: 7464 swp! r4, 48
+ 66: 7464 swp! r4, 48
+ 68: 7794 swp! r7, 72
+ 6a: 7794 swp! r7, 72
+ 6c: 7844 swp! r8, 32
+ 6e: 7844 swp! r8, 32
+ 70: d0a28080 sw r5, \[r2, 128\]
+ 74: d0a28080 sw r5, \[r2, 128\]
+ 78: d0c68020 sw r6, \[r6, 32\]
+ 7c: d0c68020 sw r6, \[r6, 32\]
+ 80: 7325 shp! r3, 8
+ 82: 7325 shp! r3, 8
+ 84: 7465 shp! r4, 24
+ 86: 7465 shp! r4, 24
+ 88: 7795 shp! r7, 36
+ 8a: 7795 shp! r7, 36
+ 8c: 7845 shp! r8, 16
+ 8e: 7845 shp! r8, 16
+ 90: d4a28040 sh r5, \[r2, 64\]
+ 94: d4a28040 sh r5, \[r2, 64\]
+ 98: d4c68010 sh r6, \[r6, 16\]
+ 9c: d4c68010 sh r6, \[r6, 16\]
+ a0: 7327 sbp! r3, 4
+ a2: 7327 sbp! r3, 4
+ a4: 7467 sbp! r4, 12
+ a6: 7467 sbp! r4, 12
+ a8: 7797 sbp! r7, 18
+ aa: 7797 sbp! r7, 18
+ ac: 7847 sbp! r8, 8
+ ae: 7847 sbp! r8, 8
+ b0: dca28020 sb r5, \[r2, 32\]
+ b4: dca28020 sb r5, \[r2, 32\]
+ b8: dcc68008 sb r6, \[r6, 8\]
+ bc: dcc68008 sb r6, \[r6, 8\]
+ c0: c002800c lw r0, \[r2, 12\]
+ c4: c00580ff lw r0, \[r5, 255\]
+ c8: c1e28000 lw r15, \[r2, 0\]
+ cc: c1e480ff lw r15, \[r4, 255\]
+ d0: 7410 lwp! r4, 8
+ d2: 7410 lwp! r4, 8
+ d4: 7710 lwp! r7, 8
+ d6: 7740 lwp! r7, 32
+ ...
+ e0: c402800c lh r0, \[r2, 12\]
+ e4: c40580ff lh r0, \[r5, 255\]
+ e8: c5e28000 lh r15, \[r2, 0\]
+ ec: c5e480ff lh r15, \[r4, 255\]
+ f0: 7421 lhp! r4, 8
+ f2: 7421 lhp! r4, 8
+ f4: 7721 lhp! r7, 8
+ f6: 7741 lhp! r7, 16
+ ...
+ 100: d802800c lbu r0, \[r2, 12\]
+ 104: d80580ff lbu r0, \[r5, 255\]
+ 108: d9e28000 lbu r15, \[r2, 0\]
+ 10c: d9e480ff lbu r15, \[r4, 255\]
+ 110: 7443 lbup! r4, 8
+ 112: 7443 lbup! r4, 8
+ 114: 7743 lbup! r7, 8
+ 116: 7743 lbup! r7, 8
+ ...
+ 120: d002800c sw r0, \[r2, 12\]
+ 124: d00580ff sw r0, \[r5, 255\]
+ 128: d1e28000 sw r15, \[r2, 0\]
+ 12c: d1e480ff sw r15, \[r4, 255\]
+ 130: 7414 swp! r4, 8
+ 132: 7414 swp! r4, 8
+ 134: 7714 swp! r7, 8
+ 136: 7744 swp! r7, 32
+ ...
+ 140: d402800c sh r0, \[r2, 12\]
+ 144: d40580ff sh r0, \[r5, 255\]
+ 148: d5e28000 sh r15, \[r2, 0\]
+ 14c: d5e480ff sh r15, \[r4, 255\]
+ 150: 7425 shp! r4, 8
+ 152: 7425 shp! r4, 8
+ 154: 7725 shp! r7, 8
+ 156: 7745 shp! r7, 16
+ ...
+ 160: dc02800c sb r0, \[r2, 12\]
+ 164: dc0580ff sb r0, \[r5, 255\]
+ 168: dde28000 sb r15, \[r2, 0\]
+ 16c: dde480ff sb r15, \[r4, 255\]
+ 170: 7447 sbp! r4, 8
+ 172: 7447 sbp! r4, 8
+ 174: 7747 sbp! r7, 8
+ 176: 7747 sbp! r7, 8
+#pass
diff --git a/gas/testsuite/gas/score/ls32ls16p.s b/gas/testsuite/gas/score/ls32ls16p.s
new file mode 100644
index 000000000000..72aa6125c769
--- /dev/null
+++ b/gas/testsuite/gas/score/ls32ls16p.s
@@ -0,0 +1,68 @@
+/*
+ * test relax
+ * lw <-> lwp! : rs = r2, offset & 0x3 == 0, offset >> 2 : 5b
+ * lh <-> lhp! : rs = r2, offset & 0x1 == 0, offset >> 1 : 5b
+ * lbu <-> lbu! : rs = r2, offset != 0, offset : 5b
+ * sw <-> swp! : rs = r2, offset & 0x3 == 0, offset >> 2 : 5b
+ * sh <-> shp! : rs = r2, offset & 0x1 == 0, offset >> 1 : 5b
+ * sb <-> sb! : rs = r2, offset != 0, offset : 5b
+
+ * Author: ligang
+ */
+
+/* This macro transform 32b instruction to 16b. */
+.macro tran3216 insn32, insn16, shift
+.align 4
+
+ \insn32 r3, [r2, 0x4 << \shift] #32b -> 16b
+ \insn16 r3, 0x4 << \shift
+
+ \insn32 r4, [r2, 0xC << \shift] #32b -> 16b
+ \insn16 r4, 0xC << \shift
+
+ \insn32 r7, [r2, 0x12 << \shift] #32b -> 16b
+ \insn32 r7, [r2, 0x12 << \shift] #32b -> 16b
+
+ \insn16 r8, 0x8 << \shift
+ \insn32 r8, [r2, 0x8 << \shift] #32b -> 16b
+
+ \insn32 r5, [r2, 0x20 << \shift] #No transform
+ \insn32 r5, [r2, 0x20 << \shift] #No transform
+
+ \insn32 r6, [r6, 0x8 << \shift] #No transform
+ \insn32 r6, [r6, 0x8 << \shift] #No transform
+
+.endm
+
+/* This macro transform 16b instruction to 32b. */
+.macro tran1632 insn32, insn16, shift
+.align 4
+
+ \insn16 r0, 0xC #16b -> 32b
+ \insn32 r0, [r5, 0xFF]
+
+ \insn16 r15, 0x0 #16b -> 32b
+ \insn32 r15, [r4, 0xFF]
+
+ \insn16 r4, 0x8 #No transform
+ \insn16 r4, 0x8 #No transform
+
+ \insn16 r7, 0x8 #No transform
+ \insn32 r7, [r2, 0x8 << \shift]
+
+.endm
+
+ tran3216 "lw", "lwp!", 2
+ tran3216 "lh", "lhp!", 1
+ tran3216 "lbu", "lbup!", 0
+ tran3216 "sw", "swp!", 2
+ tran3216 "sh", "shp!", 1
+ tran3216 "sb", "sbp!", 0
+
+ tran1632 "lw", "lwp!", 2
+ tran1632 "lh", "lhp!", 1
+ tran1632 "lbu", "lbup!", 0
+ tran1632 "sw", "swp!", 2
+ tran1632 "sh", "shp!", 1
+ tran1632 "sb", "sbp!", 0
+
diff --git a/gas/testsuite/gas/score/move.d b/gas/testsuite/gas/score/move.d
new file mode 100644
index 000000000000..0bec506ec8eb
--- /dev/null
+++ b/gas/testsuite/gas/score/move.d
@@ -0,0 +1,60 @@
+#as:
+#objdump: -d
+#source: move.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <.text>:
+ 0: 00f3 mv! r0, r15
+ 2: 00f3 mv! r0, r15
+ 4: 0ff3 mv! r15, r15
+ 6: 0ff3 mv! r15, r15
+ 8: 0353 mv! r3, r5
+ a: 0353 mv! r3, r5
+ c: 0673 mv! r6, r7
+ e: 0673 mv! r6, r7
+ 10: 810abc56 mv r8, r10
+ 14: 82b7bc56 mv r21, r23
+ ...
+ 20: 800fbc56 mv r0, r15
+ 24: 82fbbc56 mv r23, r27
+ 28: 0283 mv! r2, r8
+ 2a: 0283 mv! r2, r8
+ 2c: 0283 mv! r2, r8
+ 2e: 0283 mv! r2, r8
+ 30: 0f02 mhfl! r31, r0
+ 32: 0f02 mhfl! r31, r0
+ 34: 00f2 mhfl! r16, r15
+ 36: 00f2 mhfl! r16, r15
+ 38: 0752 mhfl! r23, r5
+ 3a: 0752 mhfl! r23, r5
+ 3c: 0a72 mhfl! r26, r7
+ 3e: 0a72 mhfl! r26, r7
+ 40: 838abc56 mv gp, r10
+ 44: 82b7bc56 mv r21, r23
+ ...
+ 50: 83e0bc56 mv r31, r0
+ 54: 82fbbc56 mv r23, r27
+ 58: 0682 mhfl! r22, r8
+ 5a: 0682 mhfl! r22, r8
+ 5c: 07f2 mhfl! r23, r15
+ 5e: 07f2 mhfl! r23, r15
+ 60: 00f1 mlfh! r0, r31
+ 62: 00f1 mlfh! r0, r31
+ 64: 0f01 mlfh! r15, r16
+ 66: 0f01 mlfh! r15, r16
+ 68: 0571 mlfh! r5, r23
+ 6a: 0571 mlfh! r5, r23
+ 6c: 07a1 mlfh! r7, r26
+ 6e: 07a1 mlfh! r7, r26
+ 70: 815cbc56 mv r10, gp
+ 74: 82b7bc56 mv r21, r23
+ ...
+ 80: 801fbc56 mv r0, r31
+ 84: 82fbbc56 mv r23, r27
+ 88: 0861 mlfh! r8, r22
+ 8a: 0861 mlfh! r8, r22
+ 8c: 0f71 mlfh! r15, r23
+ 8e: 0f71 mlfh! r15, r23
diff --git a/gas/testsuite/gas/score/move.s b/gas/testsuite/gas/score/move.s
new file mode 100644
index 000000000000..3a4623eda45e
--- /dev/null
+++ b/gas/testsuite/gas/score/move.s
@@ -0,0 +1,98 @@
+/*
+ * test relax
+ * mv <-> mv! : for mv! : register number must be in 0-15
+ * mv <-> mhfl! : for mhfl! : rD must be in 16-31, rS must be in 0-15
+ * mv <-> mlfh! : for mhfl! : rD must be in 0-15, rS must be in 16-31
+
+ * Author: ligang
+ */
+
+/* This block test mv -> mv! */
+.align 4
+
+ mv r0, r15 #32b -> 16b
+ mv! r0, r15
+
+ mv r15, r15 #32b -> 16b
+ mv! r15, r15
+
+ mv r3, r5 #32b -> 16b
+ mv r3, r5 #32b -> 16b
+
+ mv! r6, r7
+ mv r6, r7 #32b -> 16b
+
+ mv r8, r10 #No transform
+ mv r21, r23
+
+/* This block test mv! -> mv */
+.align 4
+
+ mv! r0, r15 #16b -> 32b
+ mv r23, r27
+
+ mv! r2, r8 #No transform
+ mv! r2, r8 #No transform
+
+ mv! r2, r8 #No transform
+ mv r2, r8
+
+/* This block test mv -> mhfl! */
+.align 4
+
+ mv r31, r0 #32b -> 16b
+ mhfl! r31, r0
+
+ mv r16, r15 #32b -> 16b
+ mv! r16, r15
+
+ mv r23, r5 #32b -> 16b
+ mv r23, r5 #32b -> 16b
+
+ mhfl! r26, r7
+ mv r26, r7 #32b -> 16b
+
+ mv r28, r10 #No transform
+ mv r21, r23
+
+/* This block test mhfl! -> mv */
+.align 4
+
+ mhfl! r31, r0 #16b -> 32b
+ mv r23, r27
+
+ mhfl! r22, r8 #No transform
+ mhfl! r22, r8 #No transform
+
+ mhfl! r23, r15 #No transform
+ mv r23, r15
+
+/* This block test mv -> mlfh! */
+.align 4
+
+ mv r0, r31 #32b -> 16b
+ mlfh! r0, r31
+
+ mv r15, r16 #32b -> 16b
+ mv! r15, r16
+
+ mv r5, r23 #32b -> 16b
+ mv r5, r23 #32b -> 16b
+
+ mlfh! r7, r26
+ mv r7, r26 #32b -> 16b
+
+ mv r10, r28 #No transform
+ mv r21, r23
+
+/* This block test mhfl! -> mv */
+.align 4
+
+ mlfh! r0, r31 #16b -> 32b
+ mv r23, r27
+
+ mlfh! r8, r22 #No transform
+ mlfh! r8, r22 #No transform
+
+ mlfh! r15, r23 #No transform
+ mv r15, r23
diff --git a/gas/testsuite/gas/score/nop.d b/gas/testsuite/gas/score/nop.d
new file mode 100644
index 000000000000..83e98b7faa03
--- /dev/null
+++ b/gas/testsuite/gas/score/nop.d
@@ -0,0 +1,15 @@
+#as:
+#objdump: -d
+#source: nop.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+ ...
+ c: 80008000 nop
+ 10: 8254e010 add r18, r20, r24
+ ...
+ 28: 80008000 nop
+ 2c: 8254e026 xor r18, r20, r24
diff --git a/gas/testsuite/gas/score/nop.s b/gas/testsuite/gas/score/nop.s
new file mode 100644
index 000000000000..26955528ae12
--- /dev/null
+++ b/gas/testsuite/gas/score/nop.s
@@ -0,0 +1,38 @@
+/*
+ * test relax
+ * nop <-> nop!
+
+ * Author: ligang
+ */
+
+.macro tran insn32, insn16
+/* This block transform 32b instruction to 16b. */
+.align 4
+
+ \insn32 #32b -> 16b
+ \insn16
+
+ \insn32 #32b -> 16b
+ \insn32 #32b -> 16b
+
+ \insn16
+ \insn32 #32b -> 16b
+
+ \insn32 #No transform
+ add r18, r20, r24
+
+/* This block transform 16b instruction to 32b. */
+.align 4
+
+ \insn16 #No transform
+ \insn32
+
+ \insn16 #No transform
+ \insn16
+
+ \insn16 #16b -> 32b
+ xor r18, r20, r24
+
+.endm
+
+ tran "nop", "nop!"
diff --git a/gas/testsuite/gas/score/postlw.d b/gas/testsuite/gas/score/postlw.d
new file mode 100644
index 000000000000..25867f4edc34
--- /dev/null
+++ b/gas/testsuite/gas/score/postlw.d
@@ -0,0 +1,32 @@
+#as:
+#objdump: -d
+#source: postlw.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+ 0: 27fa pop! r23, \[r7\]
+ 2: 27fa pop! r23, \[r7\]
+ 4: 202a pop! r0, \[r2\]
+ 6: 202a pop! r0, \[r2\]
+ 8: 2f0a pop! r15, \[r0\]
+ a: 2f0a pop! r15, \[r0\]
+ c: 2f7a pop! r15, \[r7\]
+ e: 2f7a pop! r15, \[r7\]
+ 10: 29ba pop! r25, \[r3\]
+ 12: 29ba pop! r25, \[r3\]
+ 14: 9f0d8020 lw r24, \[r13\]\+, 4
+ 18: 9ee78028 lw r23, \[r7\]\+, 5
+ 1c: 0000 nop!
+ 1e: 0000 nop!
+ 20: 9c078020 lw r0, \[r7\]\+, 4
+ 24: 9f2d8020 lw r25, \[r13\]\+, 4
+ 28: 9f208020 lw r25, \[r0\]\+, 4
+ 2c: 9e578020 lw r18, \[r23\]\+, 4
+ 30: 263a pop! r6, \[r3\]
+ 32: 263a pop! r6, \[r3\]
+ 34: 237a pop! r3, \[r7\]
+ 36: 237a pop! r3, \[r7\]
+#pass
diff --git a/gas/testsuite/gas/score/postlw.s b/gas/testsuite/gas/score/postlw.s
new file mode 100644
index 000000000000..499ea94a5956
--- /dev/null
+++ b/gas/testsuite/gas/score/postlw.s
@@ -0,0 +1,54 @@
+/*
+ * test relax
+ * post lw <-> pop! : offset == 4
+ * syntax:
+ lw rD, [rA]+, simm12 : rD and rA can be 0-31
+ pop! rD, [rAg0] : rAg0 must be in 0-7, rD can be 0-31
+
+ * Author: ligang
+ */
+
+/* This macro transform 32b instruction to 16b. */
+.macro tran3216 insn32, insn16
+.align 4
+
+ \insn32 r23, [r7]+, 4 #32b -> 16b
+ \insn16 r23, [r7]
+
+ \insn32 r0, [r2]+, 4 #32b -> 16b
+ \insn16 r0, [r2]
+
+ \insn32 r15, [r0]+, 4 #32b -> 16b
+ \insn16 r15, [r0]
+
+ \insn16 r15, [r7]
+ \insn32 r15, [r7]+, 4 #32b -> 16b
+
+ \insn32 r25, [r3]+, 4 #32b -> 16b
+ \insn32 r25, [r3]+, 4 #32b -> 16b
+
+ \insn32 r24, [r13]+, 4 #No transform
+ \insn32 r23, [r7]+, 5 #No transform
+
+.endm
+
+/* This macro transform 16b instruction to 32b. */
+.macro tran1632 insn32, insn16
+.align 4
+
+ \insn16 r0, [r7] #16b -> 32b
+ \insn32 r25, [r13]+, 4
+
+ \insn16 r25, [r0] #16b -> 32b
+ \insn32 r18, [r23]+, 4
+
+ \insn16 r6, [r3] #No transform
+ \insn16 r6, [r3] #No transform
+
+ \insn16 r3, [r7] #No transform
+ \insn32 r3, [r7]+, 4
+
+.endm
+
+ tran3216 "lw", "pop!"
+ tran1632 "lw", "pop!"
diff --git a/gas/testsuite/gas/score/presw.d b/gas/testsuite/gas/score/presw.d
new file mode 100644
index 000000000000..cc4092fdcc82
--- /dev/null
+++ b/gas/testsuite/gas/score/presw.d
@@ -0,0 +1,32 @@
+#as:
+#objdump: -d
+#source: presw.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <.text>:
+ 0: 202e push! r0, \[r2\]
+ 2: 202e push! r0, \[r2\]
+ 4: 27fe push! r23, \[r7\]
+ 6: 27fe push! r23, \[r7\]
+ 8: 2f0e push! r15, \[r0\]
+ a: 2f0e push! r15, \[r0\]
+ c: 2f7e push! r15, \[r7\]
+ e: 2f7e push! r15, \[r7\]
+ 10: 29be push! r25, \[r3\]
+ 12: 29be push! r25, \[r3\]
+ 14: 8f0dffe4 sw r24, \[r13, -4\]\+
+ 18: 8ee7ffdc sw r23, \[r7, -5\]\+
+ 1c: 0000 nop!
+ 1e: 0000 nop!
+ 20: 8c07ffe4 sw r0, \[r7, -4\]\+
+ 24: 8f2dffe4 sw r25, \[r13, -4\]\+
+ 28: 8f20ffe4 sw r25, \[r0, -4\]\+
+ 2c: 8e57ffe4 sw r18, \[r23, -4\]\+
+ 30: 263e push! r6, \[r3\]
+ 32: 263e push! r6, \[r3\]
+ 34: 237e push! r3, \[r7\]
+ 36: 237e push! r3, \[r7\]
+#pass
diff --git a/gas/testsuite/gas/score/presw.s b/gas/testsuite/gas/score/presw.s
new file mode 100644
index 000000000000..bcc11d102c89
--- /dev/null
+++ b/gas/testsuite/gas/score/presw.s
@@ -0,0 +1,54 @@
+/*
+ * test relax
+ * pre sw <-> push! : offset == -4
+ * syntax:
+ sw rD, [rA, simm12]+ : rD and rA can be 0-31
+ push! rD, [rAg0] : rAg0 must be in 0-7, rD can be 0-31
+
+ * Author: ligang
+ */
+
+/* This macro transform 32b instruction to 16b. */
+.macro tran3216 insn32, insn16
+.align 4
+
+ \insn32 r0, [r2, -4]+ #32b -> 16b
+ \insn16 r0, [r2]
+
+ \insn32 r23, [r7, -4]+ #32b -> 16b
+ \insn16 r23, [r7]
+
+ \insn32 r15, [r0, -4]+ #32b -> 16b
+ \insn16 r15, [r0]
+
+ \insn16 r15, [r7]
+ \insn32 r15, [r7, -4]+ #32b -> 16b
+
+ \insn32 r25, [r3, -4]+ #32b -> 16b
+ \insn32 r25, [r3, -4]+ #32b -> 16b
+
+ \insn32 r24, [r13, -4]+ #No transform
+ \insn32 r23, [r7, -5]+ #No transform
+
+.endm
+
+/* This macro transform 16b instruction to 32b. */
+.macro tran1632 insn32, insn16
+.align 4
+
+ \insn16 r0, [r7] #16b -> 32b
+ \insn32 r25, [r13, -4]+
+
+ \insn16 r25, [r0] #16b -> 32b
+ \insn32 r18, [r23, -4]+
+
+ \insn16 r6, [r3] #No transform
+ \insn16 r6, [r3] #No transform
+
+ \insn16 r3, [r7] #No transform
+ \insn32 r3, [r7, -4]+
+
+.endm
+
+ tran3216 "sw", "push!"
+ tran1632 "sw", "push!"
diff --git a/gas/testsuite/gas/score/rD_rA.d b/gas/testsuite/gas/score/rD_rA.d
new file mode 100644
index 000000000000..36f29f65c101
--- /dev/null
+++ b/gas/testsuite/gas/score/rD_rA.d
@@ -0,0 +1,90 @@
+#as:
+#objdump: -d
+#source: rD_rA.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+ 0: 2076 not! r0, r7
+ 2: 2076 not! r0, r7
+ 4: 2f46 not! r15, r4
+ 6: 2f46 not! r15, r4
+ 8: 2ff6 not! r15, r15
+ a: 2ff6 not! r15, r15
+ c: 2f36 not! r15, r3
+ e: 2f36 not! r15, r3
+ 10: 2826 not! r8, r2
+ 12: 2826 not! r8, r2
+ 14: 81e58025 not.c r15, r5
+ 18: 83578025 not.c r26, r23
+ 1c: 0000 nop!
+ 1e: 0000 nop!
+ 20: 2072 neg! r0, r7
+ 22: 2072 neg! r0, r7
+ 24: 2f42 neg! r15, r4
+ 26: 2f42 neg! r15, r4
+ 28: 2ff2 neg! r15, r15
+ 2a: 2ff2 neg! r15, r15
+ 2c: 2f32 neg! r15, r3
+ 2e: 2f32 neg! r15, r3
+ 30: 2822 neg! r8, r2
+ 32: 2822 neg! r8, r2
+ 34: 81e0941f neg.c r15, r5
+ 38: 8340dc1f neg.c r26, r23
+ 3c: 0000 nop!
+ 3e: 0000 nop!
+ 40: 2073 cmp! r0, r7
+ 42: 2073 cmp! r0, r7
+ 44: 2f43 cmp! r15, r4
+ 46: 2f43 cmp! r15, r4
+ 48: 2ff3 cmp! r15, r15
+ 4a: 2ff3 cmp! r15, r15
+ 4c: 2f33 cmp! r15, r3
+ 4e: 2f33 cmp! r15, r3
+ 50: 2823 cmp! r8, r2
+ 52: 2823 cmp! r8, r2
+ 54: 806f9419 cmp.c r15, r5
+ 58: 807adc19 cmp.c r26, r23
+ 5c: 0000 nop!
+ 5e: 0000 nop!
+ 60: 80028025 not.c r0, r2
+ 64: 82958025 not.c r20, r21
+ 68: 81e48025 not.c r15, r4
+ 6c: 83358025 not.c r25, r21
+ 70: 81e38025 not.c r15, r3
+ 74: 83368025 not.c r25, r22
+ 78: 2836 not! r8, r3
+ 7a: 2836 not! r8, r3
+ 7c: 2626 not! r6, r2
+ 7e: 2626 not! r6, r2
+ 80: 2746 not! r7, r4
+ 82: 2746 not! r7, r4
+ ...
+ 90: 8000881f neg.c r0, r2
+ 94: 8280d41f neg.c r20, r21
+ 98: 81ef901f neg.c r15, r4
+ 9c: 8320d41f neg.c r25, r21
+ a0: 81ef8c1f neg.c r15, r3
+ a4: 8320d81f neg.c r25, r22
+ a8: 2832 neg! r8, r3
+ aa: 2832 neg! r8, r3
+ ac: 2622 neg! r6, r2
+ ae: 2622 neg! r6, r2
+ b0: 2742 neg! r7, r4
+ b2: 2742 neg! r7, r4
+ ...
+ c0: 80608819 cmp.c r0, r2
+ c4: 8074d419 cmp.c r20, r21
+ c8: 806f9019 cmp.c r15, r4
+ cc: 8079d419 cmp.c r25, r21
+ d0: 806f8c19 cmp.c r15, r3
+ d4: 8079d819 cmp.c r25, r22
+ d8: 2833 cmp! r8, r3
+ da: 2833 cmp! r8, r3
+ dc: 2623 cmp! r6, r2
+ de: 2623 cmp! r6, r2
+ e0: 2743 cmp! r7, r4
+ e2: 2743 cmp! r7, r4
+#pass
diff --git a/gas/testsuite/gas/score/rD_rA.s b/gas/testsuite/gas/score/rD_rA.s
new file mode 100644
index 000000000000..0f1c0d43ae01
--- /dev/null
+++ b/gas/testsuite/gas/score/rD_rA.s
@@ -0,0 +1,66 @@
+/*
+ * test relax
+ * not.c <-> not! : register number must be in 0-15
+ * neg.c <-> neg! : register number must be in 0-15
+ * cmp.c <-> cmp! : register number must be in 0-15
+
+ * Author: ligang
+ */
+
+/* This macro transform 32b instruction to 16b. */
+.macro tran3216 insn32, insn16
+.align 4
+
+ \insn32 r0, r7 #32b -> 16b
+ \insn16 r0, r7
+
+ \insn32 r15, r4 #32b -> 16b
+ \insn16 r15, r4
+
+ \insn32 r15, r15 #32b -> 16b
+ \insn16 r15, r15
+
+ \insn16 r15, r3
+ \insn32 r15, r3 #32b -> 16b
+
+ \insn32 r8, r2 #32b -> 16b
+ \insn32 r8, r2 #32b -> 16b
+
+ \insn32 r15, r5 #No transform
+ \insn32 r26, r23
+
+.endm
+
+/* This macro transform 16b instruction to 32b. */
+.macro tran1632 insn32, insn16
+.align 4
+
+ \insn16 r0, r2 #16b -> 32b
+ \insn32 r20, r21
+
+ \insn16 r15, r4 #16b -> 32b
+ \insn32 r25, r21
+
+ \insn16 r15, r3 #16b -> 32b
+ \insn32 r25, r22
+
+ \insn16 r8, r3 #No transform
+ \insn16 r8, r3 #No transform
+
+ \insn16 r6, r2 #No transform
+ \insn32 r6, r2 #32b -> 16b
+
+ \insn32 r7, r4 #32b -> 16b
+ \insn16 r7, r4 #No transform
+
+.endm
+
+.text
+
+ tran3216 "not.c", "not!"
+ tran3216 "neg.c", "neg!"
+ tran3216 "cmp.c", "cmp!"
+
+ tran1632 "not.c", "not!"
+ tran1632 "neg.c", "neg!"
+ tran1632 "cmp.c", "cmp!"
diff --git a/gas/testsuite/gas/score/rD_rA_BN.d b/gas/testsuite/gas/score/rD_rA_BN.d
new file mode 100644
index 000000000000..505e458fd55e
--- /dev/null
+++ b/gas/testsuite/gas/score/rD_rA_BN.d
@@ -0,0 +1,144 @@
+#as:
+#objdump: -d
+#source: rD_rA_BN.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+ 0: 6014 bitclr! r0, 0x2
+ 2: 6014 bitclr! r0, 0x2
+ 4: 6f24 bitclr! r15, 0x4
+ 6: 6f24 bitclr! r15, 0x4
+ 8: 6f0c bitclr! r15, 0x1
+ a: 6f0c bitclr! r15, 0x1
+ c: 6f1c bitclr! r15, 0x3
+ e: 6f1c bitclr! r15, 0x3
+ 10: 681c bitclr! r8, 0x3
+ 12: 681c bitclr! r8, 0x3
+ 14: 81ef8429 bitclr.c r15, r15, 0x1
+ 18: 83579029 bitclr.c r26, r23, 0x4
+ 1c: 0000 nop!
+ 1e: 0000 nop!
+ 20: 6015 bitset! r0, 0x2
+ 22: 6015 bitset! r0, 0x2
+ 24: 6f25 bitset! r15, 0x4
+ 26: 6f25 bitset! r15, 0x4
+ 28: 6f0d bitset! r15, 0x1
+ 2a: 6f0d bitset! r15, 0x1
+ 2c: 6f1d bitset! r15, 0x3
+ 2e: 6f1d bitset! r15, 0x3
+ 30: 681d bitset! r8, 0x3
+ 32: 681d bitset! r8, 0x3
+ 34: 81ef842b bitset.c r15, r15, 0x1
+ 38: 8357902b bitset.c r26, r23, 0x4
+ 3c: 0000 nop!
+ 3e: 0000 nop!
+ 40: 6017 bittgl! r0, 0x2
+ 42: 6017 bittgl! r0, 0x2
+ 44: 6f27 bittgl! r15, 0x4
+ 46: 6f27 bittgl! r15, 0x4
+ 48: 6f0f bittgl! r15, 0x1
+ 4a: 6f0f bittgl! r15, 0x1
+ 4c: 6f1f bittgl! r15, 0x3
+ 4e: 6f1f bittgl! r15, 0x3
+ 50: 681f bittgl! r8, 0x3
+ 52: 681f bittgl! r8, 0x3
+ 54: 81ef842f bittgl.c r15, r15, 0x1
+ 58: 8357902f bittgl.c r26, r23, 0x4
+ 5c: 0000 nop!
+ 5e: 0000 nop!
+ 60: 6011 slli! r0, 2
+ 62: 6011 slli! r0, 2
+ 64: 6f21 slli! r15, 4
+ 66: 6f21 slli! r15, 4
+ 68: 6f09 slli! r15, 1
+ 6a: 6f09 slli! r15, 1
+ 6c: 6f19 slli! r15, 3
+ 6e: 6f19 slli! r15, 3
+ 70: 6819 slli! r8, 3
+ 72: 6819 slli! r8, 3
+ 74: 81ef8471 slli.c r15, r15, 1
+ 78: 83579071 slli.c r26, r23, 4
+ 7c: 0000 nop!
+ 7e: 0000 nop!
+ 80: 6013 srli! r0, 2
+ 82: 6013 srli! r0, 2
+ 84: 6f23 srli! r15, 4
+ 86: 6f23 srli! r15, 4
+ 88: 6f0b srli! r15, 1
+ 8a: 6f0b srli! r15, 1
+ 8c: 6f1b srli! r15, 3
+ 8e: 6f1b srli! r15, 3
+ 90: 681b srli! r8, 3
+ 92: 681b srli! r8, 3
+ 94: 81ef8475 srli.c r15, r15, 1
+ 98: 83579075 srli.c r26, r23, 4
+ 9c: 0000 nop!
+ 9e: 0000 nop!
+ a0: 80008829 bitclr.c r0, r0, 0x2
+ a4: 82958829 bitclr.c r20, r21, 0x2
+ a8: 81ef9029 bitclr.c r15, r15, 0x4
+ ac: 83359029 bitclr.c r25, r21, 0x4
+ b0: 81ef8429 bitclr.c r15, r15, 0x1
+ b4: 83368429 bitclr.c r25, r22, 0x1
+ b8: 681c bitclr! r8, 0x3
+ ba: 681c bitclr! r8, 0x3
+ bc: 6624 bitclr! r6, 0x4
+ be: 6624 bitclr! r6, 0x4
+ c0: 6914 bitclr! r9, 0x2
+ c2: 6914 bitclr! r9, 0x2
+ ...
+ d0: 8000882b bitset.c r0, r0, 0x2
+ d4: 8295882b bitset.c r20, r21, 0x2
+ d8: 81ef902b bitset.c r15, r15, 0x4
+ dc: 8335902b bitset.c r25, r21, 0x4
+ e0: 81ef842b bitset.c r15, r15, 0x1
+ e4: 8336842b bitset.c r25, r22, 0x1
+ e8: 681d bitset! r8, 0x3
+ ea: 681d bitset! r8, 0x3
+ ec: 6625 bitset! r6, 0x4
+ ee: 6625 bitset! r6, 0x4
+ f0: 6915 bitset! r9, 0x2
+ f2: 6915 bitset! r9, 0x2
+ ...
+ 100: 8000882f bittgl.c r0, r0, 0x2
+ 104: 8295882f bittgl.c r20, r21, 0x2
+ 108: 81ef902f bittgl.c r15, r15, 0x4
+ 10c: 8335902f bittgl.c r25, r21, 0x4
+ 110: 81ef842f bittgl.c r15, r15, 0x1
+ 114: 8336842f bittgl.c r25, r22, 0x1
+ 118: 681f bittgl! r8, 0x3
+ 11a: 681f bittgl! r8, 0x3
+ 11c: 6627 bittgl! r6, 0x4
+ 11e: 6627 bittgl! r6, 0x4
+ 120: 6917 bittgl! r9, 0x2
+ 122: 6917 bittgl! r9, 0x2
+ ...
+ 130: 80008871 slli.c r0, r0, 2
+ 134: 82958871 slli.c r20, r21, 2
+ 138: 81ef9071 slli.c r15, r15, 4
+ 13c: 83359071 slli.c r25, r21, 4
+ 140: 81ef8471 slli.c r15, r15, 1
+ 144: 83368471 slli.c r25, r22, 1
+ 148: 6819 slli! r8, 3
+ 14a: 6819 slli! r8, 3
+ 14c: 6621 slli! r6, 4
+ 14e: 6621 slli! r6, 4
+ 150: 6911 slli! r9, 2
+ 152: 6911 slli! r9, 2
+ ...
+ 160: 80008875 srli.c r0, r0, 2
+ 164: 82958875 srli.c r20, r21, 2
+ 168: 81ef9075 srli.c r15, r15, 4
+ 16c: 83359075 srli.c r25, r21, 4
+ 170: 81ef8475 srli.c r15, r15, 1
+ 174: 83368475 srli.c r25, r22, 1
+ 178: 681b srli! r8, 3
+ 17a: 681b srli! r8, 3
+ 17c: 6623 srli! r6, 4
+ 17e: 6623 srli! r6, 4
+ 180: 6913 srli! r9, 2
+ 182: 6913 srli! r9, 2
+#pass
diff --git a/gas/testsuite/gas/score/rD_rA_BN.s b/gas/testsuite/gas/score/rD_rA_BN.s
new file mode 100644
index 000000000000..224438f85b23
--- /dev/null
+++ b/gas/testsuite/gas/score/rD_rA_BN.s
@@ -0,0 +1,73 @@
+/*
+ * test relax
+ * bitclr.c <-> bitclr! : register number must be in 0-15
+ * bitset.c <-> bitset! : register number must be in 0-15
+ * bittgl.c <-> bittgl! : register number must be in 0-15
+ * slli.c <-> slli! : register number must be in 0-15
+ * srli.c <-> srli! : register number must be in 0-15
+
+ * Author: ligang
+ */
+
+/* This macro transform 32b instruction to 16b. */
+.macro tran3216 insn32, insn16
+.align 4
+
+ \insn32 r0, r0, 2 #32b -> 16b
+ \insn16 r0, 2
+
+ \insn32 r15, r15, 4 #32b -> 16b
+ \insn16 r15, 4
+
+ \insn32 r15, r15, 1 #32b -> 16b
+ \insn16 r15, 1
+
+ \insn16 r15, 3
+ \insn32 r15, r15, 3 #32b -> 16b
+
+ \insn32 r8, r8, 3 #32b -> 16b
+ \insn32 r8, r8, 3 #32b -> 16b
+
+ \insn32 r15, r15, 1 #No transform
+ \insn32 r26, r23, 4
+
+.endm
+
+/* This macro transform 16b instruction to 32b. */
+.macro tran1632 insn32, insn16
+.align 4
+
+ \insn16 r0, 2 #16b -> 32b
+ \insn32 r20, r21, 2
+
+ \insn16 r15, 4 #16b -> 32b
+ \insn32 r25, r21, 4
+
+ \insn16 r15, 1 #16b -> 32b
+ \insn32 r25, r22, 1
+
+ \insn16 r8, 3 #No transform
+ \insn16 r8, 3 #No transform
+
+ \insn16 r6, 4 #No transform
+ \insn32 r6, r6, 4 #32b -> 16b
+
+ \insn32 r9, r9, 2 #32b -> 16b
+ \insn16 r9, 2 #No transform
+
+.endm
+
+.text
+
+ tran3216 "bitclr.c", "bitclr!"
+ tran3216 "bitset.c", "bitset!"
+ tran3216 "bittgl.c", "bittgl!"
+ tran3216 "slli.c", "slli!"
+ tran3216 "srli.c", "srli!"
+
+ tran1632 "bitclr.c", "bitclr!"
+ tran1632 "bitset.c", "bitset!"
+ tran1632 "bittgl.c", "bittgl!"
+ tran1632 "slli.c", "slli!"
+ tran1632 "srli.c", "srli!"
+
diff --git a/gas/testsuite/gas/score/rD_rA_rB.d b/gas/testsuite/gas/score/rD_rA_rB.d
new file mode 100644
index 000000000000..d897ebc7391b
--- /dev/null
+++ b/gas/testsuite/gas/score/rD_rA_rB.d
@@ -0,0 +1,252 @@
+#as:
+#objdump: -d
+#source: rD_rA_rB.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+ 0: 2020 add! r0, r2
+ 2: 2020 add! r0, r2
+ 4: 2540 add! r5, r4
+ 6: 2540 add! r5, r4
+ 8: 2f40 add! r15, r4
+ a: 2f40 add! r15, r4
+ c: 2f30 add! r15, r3
+ e: 2f30 add! r15, r3
+ 10: 2830 add! r8, r3
+ 12: 2830 add! r8, r3
+ 14: 81ef9811 add.c r15, r15, r6
+ 18: 83579011 add.c r26, r23, r4
+ 1c: 0000 nop!
+ 1e: 0000 nop!
+ 20: 0029 addc! r0, r2
+ 22: 0029 addc! r0, r2
+ 24: 0549 addc! r5, r4
+ 26: 0549 addc! r5, r4
+ 28: 0f49 addc! r15, r4
+ 2a: 0f49 addc! r15, r4
+ 2c: 0f39 addc! r15, r3
+ 2e: 0f39 addc! r15, r3
+ 30: 0839 addc! r8, r3
+ 32: 0839 addc! r8, r3
+ 34: 81ef9813 addc.c r15, r15, r6
+ 38: 83579013 addc.c r26, r23, r4
+ 3c: 0000 nop!
+ 3e: 0000 nop!
+ 40: 2021 sub! r0, r2
+ 42: 2021 sub! r0, r2
+ 44: 2541 sub! r5, r4
+ 46: 2541 sub! r5, r4
+ 48: 2f41 sub! r15, r4
+ 4a: 2f41 sub! r15, r4
+ 4c: 2f31 sub! r15, r3
+ 4e: 2f31 sub! r15, r3
+ 50: 2831 sub! r8, r3
+ 52: 2831 sub! r8, r3
+ 54: 81ef9815 sub.c r15, r15, r6
+ 58: 83579015 sub.c r26, r23, r4
+ 5c: 0000 nop!
+ 5e: 0000 nop!
+ 60: 2024 and! r0, r2
+ 62: 2024 and! r0, r2
+ 64: 2544 and! r5, r4
+ 66: 2544 and! r5, r4
+ 68: 2f44 and! r15, r4
+ 6a: 2f44 and! r15, r4
+ 6c: 2f34 and! r15, r3
+ 6e: 2f34 and! r15, r3
+ 70: 2834 and! r8, r3
+ 72: 2834 and! r8, r3
+ 74: 81ef9821 and.c r15, r15, r6
+ 78: 83579021 and.c r26, r23, r4
+ 7c: 0000 nop!
+ 7e: 0000 nop!
+ 80: 2025 or! r0, r2
+ 82: 2025 or! r0, r2
+ 84: 2545 or! r5, r4
+ 86: 2545 or! r5, r4
+ 88: 2f45 or! r15, r4
+ 8a: 2f45 or! r15, r4
+ 8c: 2f35 or! r15, r3
+ 8e: 2f35 or! r15, r3
+ 90: 2835 or! r8, r3
+ 92: 2835 or! r8, r3
+ 94: 81ef9823 or.c r15, r15, r6
+ 98: 83579023 or.c r26, r23, r4
+ 9c: 0000 nop!
+ 9e: 0000 nop!
+ a0: 2027 xor! r0, r2
+ a2: 2027 xor! r0, r2
+ a4: 2547 xor! r5, r4
+ a6: 2547 xor! r5, r4
+ a8: 2f47 xor! r15, r4
+ aa: 2f47 xor! r15, r4
+ ac: 2f37 xor! r15, r3
+ ae: 2f37 xor! r15, r3
+ b0: 2837 xor! r8, r3
+ b2: 2837 xor! r8, r3
+ b4: 81ef9827 xor.c r15, r15, r6
+ b8: 83579027 xor.c r26, r23, r4
+ bc: 0000 nop!
+ be: 0000 nop!
+ c0: 002b sra! r0, r2
+ c2: 002b sra! r0, r2
+ c4: 054b sra! r5, r4
+ c6: 054b sra! r5, r4
+ c8: 0f4b sra! r15, r4
+ ca: 0f4b sra! r15, r4
+ cc: 0f3b sra! r15, r3
+ ce: 0f3b sra! r15, r3
+ d0: 083b sra! r8, r3
+ d2: 083b sra! r8, r3
+ d4: 81ef9837 sra.c r15, r15, r6
+ d8: 83579037 sra.c r26, r23, r4
+ dc: 0000 nop!
+ de: 0000 nop!
+ e0: 002a srl! r0, r2
+ e2: 002a srl! r0, r2
+ e4: 054a srl! r5, r4
+ e6: 054a srl! r5, r4
+ e8: 0f4a srl! r15, r4
+ ea: 0f4a srl! r15, r4
+ ec: 0f3a srl! r15, r3
+ ee: 0f3a srl! r15, r3
+ f0: 083a srl! r8, r3
+ f2: 083a srl! r8, r3
+ f4: 81ef9835 srl.c r15, r15, r6
+ f8: 83579035 srl.c r26, r23, r4
+ fc: 0000 nop!
+ fe: 0000 nop!
+ 100: 0028 sll! r0, r2
+ 102: 0028 sll! r0, r2
+ 104: 0548 sll! r5, r4
+ 106: 0548 sll! r5, r4
+ 108: 0f48 sll! r15, r4
+ 10a: 0f48 sll! r15, r4
+ 10c: 0f38 sll! r15, r3
+ 10e: 0f38 sll! r15, r3
+ 110: 0838 sll! r8, r3
+ 112: 0838 sll! r8, r3
+ 114: 81ef9831 sll.c r15, r15, r6
+ 118: 83579031 sll.c r26, r23, r4
+ 11c: 0000 nop!
+ 11e: 0000 nop!
+ 120: 80008811 add.c r0, r0, r2
+ 124: 82958811 add.c r20, r21, r2
+ 128: 81ef9011 add.c r15, r15, r4
+ 12c: 83359011 add.c r25, r21, r4
+ 130: 81ef8c11 add.c r15, r15, r3
+ 134: 83368c11 add.c r25, r22, r3
+ 138: 2870 add! r8, r7
+ 13a: 2870 add! r8, r7
+ 13c: 2640 add! r6, r4
+ 13e: 2640 add! r6, r4
+ 140: 2740 add! r7, r4
+ 142: 2740 add! r7, r4
+ ...
+ 150: 80008813 addc.c r0, r0, r2
+ 154: 82958813 addc.c r20, r21, r2
+ 158: 81ef9013 addc.c r15, r15, r4
+ 15c: 83359013 addc.c r25, r21, r4
+ 160: 81ef8c13 addc.c r15, r15, r3
+ 164: 83368c13 addc.c r25, r22, r3
+ 168: 0879 addc! r8, r7
+ 16a: 0879 addc! r8, r7
+ 16c: 0649 addc! r6, r4
+ 16e: 0649 addc! r6, r4
+ 170: 0749 addc! r7, r4
+ 172: 0749 addc! r7, r4
+ ...
+ 180: 80008815 sub.c r0, r0, r2
+ 184: 82958815 sub.c r20, r21, r2
+ 188: 81ef9015 sub.c r15, r15, r4
+ 18c: 83359015 sub.c r25, r21, r4
+ 190: 81ef8c15 sub.c r15, r15, r3
+ 194: 83368c15 sub.c r25, r22, r3
+ 198: 2871 sub! r8, r7
+ 19a: 2871 sub! r8, r7
+ 19c: 2641 sub! r6, r4
+ 19e: 2641 sub! r6, r4
+ 1a0: 2741 sub! r7, r4
+ 1a2: 2741 sub! r7, r4
+ ...
+ 1b0: 80008821 and.c r0, r0, r2
+ 1b4: 82958821 and.c r20, r21, r2
+ 1b8: 81ef9021 and.c r15, r15, r4
+ 1bc: 83359021 and.c r25, r21, r4
+ 1c0: 81ef8c21 and.c r15, r15, r3
+ 1c4: 83368c21 and.c r25, r22, r3
+ 1c8: 2874 and! r8, r7
+ 1ca: 2874 and! r8, r7
+ 1cc: 2644 and! r6, r4
+ 1ce: 2644 and! r6, r4
+ 1d0: 2744 and! r7, r4
+ 1d2: 2744 and! r7, r4
+ ...
+ 1e0: 80008823 or.c r0, r0, r2
+ 1e4: 82958823 or.c r20, r21, r2
+ 1e8: 81ef9023 or.c r15, r15, r4
+ 1ec: 83359023 or.c r25, r21, r4
+ 1f0: 81ef8c23 or.c r15, r15, r3
+ 1f4: 83368c23 or.c r25, r22, r3
+ 1f8: 2875 or! r8, r7
+ 1fa: 2875 or! r8, r7
+ 1fc: 2645 or! r6, r4
+ 1fe: 2645 or! r6, r4
+ 200: 2745 or! r7, r4
+ 202: 2745 or! r7, r4
+ ...
+ 210: 80008827 xor.c r0, r0, r2
+ 214: 82958827 xor.c r20, r21, r2
+ 218: 81ef9027 xor.c r15, r15, r4
+ 21c: 83359027 xor.c r25, r21, r4
+ 220: 81ef8c27 xor.c r15, r15, r3
+ 224: 83368c27 xor.c r25, r22, r3
+ 228: 2877 xor! r8, r7
+ 22a: 2877 xor! r8, r7
+ 22c: 2647 xor! r6, r4
+ 22e: 2647 xor! r6, r4
+ 230: 2747 xor! r7, r4
+ 232: 2747 xor! r7, r4
+ ...
+ 240: 80008837 sra.c r0, r0, r2
+ 244: 82958837 sra.c r20, r21, r2
+ 248: 81ef9037 sra.c r15, r15, r4
+ 24c: 83359037 sra.c r25, r21, r4
+ 250: 81ef8c37 sra.c r15, r15, r3
+ 254: 83368c37 sra.c r25, r22, r3
+ 258: 087b sra! r8, r7
+ 25a: 087b sra! r8, r7
+ 25c: 064b sra! r6, r4
+ 25e: 064b sra! r6, r4
+ 260: 074b sra! r7, r4
+ 262: 074b sra! r7, r4
+ ...
+ 270: 80008835 srl.c r0, r0, r2
+ 274: 82958835 srl.c r20, r21, r2
+ 278: 81ef9035 srl.c r15, r15, r4
+ 27c: 83359035 srl.c r25, r21, r4
+ 280: 81ef8c35 srl.c r15, r15, r3
+ 284: 83368c35 srl.c r25, r22, r3
+ 288: 087a srl! r8, r7
+ 28a: 087a srl! r8, r7
+ 28c: 064a srl! r6, r4
+ 28e: 064a srl! r6, r4
+ 290: 074a srl! r7, r4
+ 292: 074a srl! r7, r4
+ ...
+ 2a0: 80008831 sll.c r0, r0, r2
+ 2a4: 82958831 sll.c r20, r21, r2
+ 2a8: 81ef9031 sll.c r15, r15, r4
+ 2ac: 83359031 sll.c r25, r21, r4
+ 2b0: 81ef8c31 sll.c r15, r15, r3
+ 2b4: 83368c31 sll.c r25, r22, r3
+ 2b8: 0878 sll! r8, r7
+ 2ba: 0878 sll! r8, r7
+ 2bc: 0648 sll! r6, r4
+ 2be: 0648 sll! r6, r4
+ 2c0: 0748 sll! r7, r4
+ 2c2: 0748 sll! r7, r4
+#pass
diff --git a/gas/testsuite/gas/score/rD_rA_rB.s b/gas/testsuite/gas/score/rD_rA_rB.s
new file mode 100644
index 000000000000..1a72b131109c
--- /dev/null
+++ b/gas/testsuite/gas/score/rD_rA_rB.s
@@ -0,0 +1,86 @@
+/*
+ * test relax
+ * add.c <-> add! : register number must be in 0-15
+ * addc.c <-> addc! : register number must be in 0-15
+ * sub.c <-> sub! : register number must be in 0-15
+ * and.c <-> and! : register number must be in 0-15
+ * or.c <-> or! : register number must be in 0-15
+ * xor.c <-> xor! : register number must be in 0-15
+ * sra.c <-> sra! : register number must be in 0-15
+ * srl.c <-> srl! : register number must be in 0-15
+ * sll.c <-> sll! : register number must be in 0-15
+
+ * Author: ligang
+ */
+
+
+/* This macro transform 32b instruction to 16b. */
+.macro tran3216 insn32, insn16
+.align 4
+
+ \insn32 r0, r0, r2 #32b -> 16b
+ \insn16 r0, r2
+
+ \insn32 r5, r5, r4 #32b -> 16b
+ \insn16 r5, r4
+
+ \insn32 r15, r15, r4 #32b -> 16b
+ \insn16 r15, r4
+
+ \insn16 r15, r3
+ \insn32 r15, r15, r3 #32b -> 16b
+
+ \insn32 r8, r8, r3 #32b -> 16b
+ \insn32 r8, r8, r3 #32b -> 16b
+
+ \insn32 r15, r15, r6 #No transform
+ \insn32 r26, r23, r4
+
+.endm
+
+/* This macro transform 16b instruction to 32b. */
+.macro tran1632 insn32, insn16
+.align 4
+
+ \insn16 r0, r2 #16b -> 32b
+ \insn32 r20, r21, r2
+
+ \insn16 r15, r4 #16b -> 32b
+ \insn32 r25, r21, r4
+
+ \insn16 r15, r3 #16b -> 32b
+ \insn32 r25, r22, r3
+
+ \insn16 r8, r7 #No transform
+ \insn16 r8, r7 #No transform
+
+ \insn16 r6, r4 #No transform
+ \insn32 r6, r6, r4
+
+ \insn32 r7, r7, r4 #32b -> 16b
+ \insn16 r7, r4 #No transform
+
+.endm
+
+.text
+
+ tran3216 "add.c", "add!"
+ tran3216 "addc.c", "addc!"
+ tran3216 "sub.c", "sub!"
+ tran3216 "and.c", "and!"
+ tran3216 "or.c", "or!"
+ tran3216 "xor.c", "xor!"
+ tran3216 "sra.c", "sra!"
+ tran3216 "srl.c", "srl!"
+ tran3216 "sll.c", "sll!"
+
+ tran1632 "add.c", "add!"
+ tran1632 "addc.c", "addc!"
+ tran1632 "sub.c", "sub!"
+ tran1632 "and.c", "and!"
+ tran1632 "or.c", "or!"
+ tran1632 "xor.c", "xor!"
+ tran1632 "sra.c", "sra!"
+ tran1632 "srl.c", "srl!"
+ tran1632 "sll.c", "sll!"
+
diff --git a/gas/testsuite/gas/score/relax.exp b/gas/testsuite/gas/score/relax.exp
new file mode 100644
index 000000000000..6a8f2b838bcb
--- /dev/null
+++ b/gas/testsuite/gas/score/relax.exp
@@ -0,0 +1,20 @@
+# test relax
+
+if [istarget score-*-*] then {
+ run_dump_test "ldi"
+ run_dump_test "nop"
+ run_dump_test "tcond"
+ run_dump_test "ls32ls16"
+ run_dump_test "ls32ls16p"
+ run_dump_test "postlw"
+ run_dump_test "presw"
+ run_dump_test "rD_rA_rB"
+ run_dump_test "bittst"
+ run_dump_test "addi"
+ run_dump_test "br"
+ run_dump_test "b"
+ run_dump_test "move"
+ run_dump_test "rD_rA_BN"
+ run_dump_test "rD_rA"
+}
+
diff --git a/gas/testsuite/gas/score/tcond.d b/gas/testsuite/gas/score/tcond.d
new file mode 100644
index 000000000000..04460cfcb0a1
--- /dev/null
+++ b/gas/testsuite/gas/score/tcond.d
@@ -0,0 +1,264 @@
+#as:
+#objdump: -d
+#source: tcond.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+ 0: 0f05 tset!
+ 2: 0f05 tset!
+ 4: 0f05 tset!
+ 6: 0f05 tset!
+ 8: 0f05 tset!
+ a: 0f05 tset!
+ c: 8000bc54 tset
+ 10: 8254e010 add r18, r20, r24
+ ...
+ 20: 0f05 tset!
+ 22: 0f05 tset!
+ 24: 0f05 tset!
+ 26: 0f05 tset!
+ 28: 8000bc54 tset
+ 2c: 8254e026 xor r18, r20, r24
+ 30: 0005 tcs!
+ 32: 0005 tcs!
+ 34: 0005 tcs!
+ 36: 0005 tcs!
+ 38: 0005 tcs!
+ 3a: 0005 tcs!
+ 3c: 80008054 tcs
+ 40: 8254e010 add r18, r20, r24
+ ...
+ 50: 0005 tcs!
+ 52: 0005 tcs!
+ 54: 0005 tcs!
+ 56: 0005 tcs!
+ 58: 80008054 tcs
+ 5c: 8254e026 xor r18, r20, r24
+ 60: 0105 tcc!
+ 62: 0105 tcc!
+ 64: 0105 tcc!
+ 66: 0105 tcc!
+ 68: 0105 tcc!
+ 6a: 0105 tcc!
+ 6c: 80008454 tcc
+ 70: 8254e010 add r18, r20, r24
+ ...
+ 80: 0105 tcc!
+ 82: 0105 tcc!
+ 84: 0105 tcc!
+ 86: 0105 tcc!
+ 88: 80008454 tcc
+ 8c: 8254e026 xor r18, r20, r24
+ 90: 0205 tgtu!
+ 92: 0205 tgtu!
+ 94: 0205 tgtu!
+ 96: 0205 tgtu!
+ 98: 0205 tgtu!
+ 9a: 0205 tgtu!
+ 9c: 80008854 tgtu
+ a0: 8254e010 add r18, r20, r24
+ ...
+ b0: 0205 tgtu!
+ b2: 0205 tgtu!
+ b4: 0205 tgtu!
+ b6: 0205 tgtu!
+ b8: 80008854 tgtu
+ bc: 8254e026 xor r18, r20, r24
+ c0: 0305 tleu!
+ c2: 0305 tleu!
+ c4: 0305 tleu!
+ c6: 0305 tleu!
+ c8: 0305 tleu!
+ ca: 0305 tleu!
+ cc: 80008c54 tleu
+ d0: 8254e010 add r18, r20, r24
+ ...
+ e0: 0305 tleu!
+ e2: 0305 tleu!
+ e4: 0305 tleu!
+ e6: 0305 tleu!
+ e8: 80008c54 tleu
+ ec: 8254e026 xor r18, r20, r24
+ f0: 0405 teq!
+ f2: 0405 teq!
+ f4: 0405 teq!
+ f6: 0405 teq!
+ f8: 0405 teq!
+ fa: 0405 teq!
+ fc: 80009054 teq
+ 100: 8254e010 add r18, r20, r24
+ ...
+ 110: 0405 teq!
+ 112: 0405 teq!
+ 114: 0405 teq!
+ 116: 0405 teq!
+ 118: 80009054 teq
+ 11c: 8254e026 xor r18, r20, r24
+ 120: 0505 tne!
+ 122: 0505 tne!
+ 124: 0505 tne!
+ 126: 0505 tne!
+ 128: 0505 tne!
+ 12a: 0505 tne!
+ 12c: 80009454 tne
+ 130: 8254e010 add r18, r20, r24
+ ...
+ 140: 0505 tne!
+ 142: 0505 tne!
+ 144: 0505 tne!
+ 146: 0505 tne!
+ 148: 80009454 tne
+ 14c: 8254e026 xor r18, r20, r24
+ 150: 0605 tgt!
+ 152: 0605 tgt!
+ 154: 0605 tgt!
+ 156: 0605 tgt!
+ 158: 0605 tgt!
+ 15a: 0605 tgt!
+ 15c: 80009854 tgt
+ 160: 8254e010 add r18, r20, r24
+ ...
+ 170: 0605 tgt!
+ 172: 0605 tgt!
+ 174: 0605 tgt!
+ 176: 0605 tgt!
+ 178: 80009854 tgt
+ 17c: 8254e026 xor r18, r20, r24
+ 180: 0705 tle!
+ 182: 0705 tle!
+ 184: 0705 tle!
+ 186: 0705 tle!
+ 188: 0705 tle!
+ 18a: 0705 tle!
+ 18c: 80009c54 tle
+ 190: 8254e010 add r18, r20, r24
+ ...
+ 1a0: 0705 tle!
+ 1a2: 0705 tle!
+ 1a4: 0705 tle!
+ 1a6: 0705 tle!
+ 1a8: 80009c54 tle
+ 1ac: 8254e026 xor r18, r20, r24
+ 1b0: 0805 tge!
+ 1b2: 0805 tge!
+ 1b4: 0805 tge!
+ 1b6: 0805 tge!
+ 1b8: 0805 tge!
+ 1ba: 0805 tge!
+ 1bc: 8000a054 tge
+ 1c0: 8254e010 add r18, r20, r24
+ ...
+ 1d0: 0805 tge!
+ 1d2: 0805 tge!
+ 1d4: 0805 tge!
+ 1d6: 0805 tge!
+ 1d8: 8000a054 tge
+ 1dc: 8254e026 xor r18, r20, r24
+ 1e0: 0905 tlt!
+ 1e2: 0905 tlt!
+ 1e4: 0905 tlt!
+ 1e6: 0905 tlt!
+ 1e8: 0905 tlt!
+ 1ea: 0905 tlt!
+ 1ec: 8000a454 tlt
+ 1f0: 8254e010 add r18, r20, r24
+ ...
+ 200: 0905 tlt!
+ 202: 0905 tlt!
+ 204: 0905 tlt!
+ 206: 0905 tlt!
+ 208: 8000a454 tlt
+ 20c: 8254e026 xor r18, r20, r24
+ 210: 0a05 tmi!
+ 212: 0a05 tmi!
+ 214: 0a05 tmi!
+ 216: 0a05 tmi!
+ 218: 0a05 tmi!
+ 21a: 0a05 tmi!
+ 21c: 8000a854 tmi
+ 220: 8254e010 add r18, r20, r24
+ ...
+ 230: 0a05 tmi!
+ 232: 0a05 tmi!
+ 234: 0a05 tmi!
+ 236: 0a05 tmi!
+ 238: 8000a854 tmi
+ 23c: 8254e026 xor r18, r20, r24
+ 240: 0b05 tpl!
+ 242: 0b05 tpl!
+ 244: 0b05 tpl!
+ 246: 0b05 tpl!
+ 248: 0b05 tpl!
+ 24a: 0b05 tpl!
+ 24c: 8000ac54 tpl
+ 250: 8254e010 add r18, r20, r24
+ ...
+ 260: 0b05 tpl!
+ 262: 0b05 tpl!
+ 264: 0b05 tpl!
+ 266: 0b05 tpl!
+ 268: 8000ac54 tpl
+ 26c: 8254e026 xor r18, r20, r24
+ 270: 0c05 tvs!
+ 272: 0c05 tvs!
+ 274: 0c05 tvs!
+ 276: 0c05 tvs!
+ 278: 0c05 tvs!
+ 27a: 0c05 tvs!
+ 27c: 8000b054 tvs
+ 280: 8254e010 add r18, r20, r24
+ ...
+ 290: 0c05 tvs!
+ 292: 0c05 tvs!
+ 294: 0c05 tvs!
+ 296: 0c05 tvs!
+ 298: 8000b054 tvs
+ 29c: 8254e026 xor r18, r20, r24
+ 2a0: 0d05 tvc!
+ 2a2: 0d05 tvc!
+ 2a4: 0d05 tvc!
+ 2a6: 0d05 tvc!
+ 2a8: 0d05 tvc!
+ 2aa: 0d05 tvc!
+ 2ac: 8000b454 tvc
+ 2b0: 8254e010 add r18, r20, r24
+ ...
+ 2c0: 0d05 tvc!
+ 2c2: 0d05 tvc!
+ 2c4: 0d05 tvc!
+ 2c6: 0d05 tvc!
+ 2c8: 8000b454 tvc
+ 2cc: 8254e026 xor r18, r20, r24
+ 2d0: 0e05 tcnz!
+ 2d2: 0e05 tcnz!
+ 2d4: 0e05 tcnz!
+ 2d6: 0e05 tcnz!
+ 2d8: 0e05 tcnz!
+ 2da: 0e05 tcnz!
+ 2dc: 8000b854 tcnz
+ 2e0: 8254e010 add r18, r20, r24
+ ...
+ 2f0: 0e05 tcnz!
+ 2f2: 0e05 tcnz!
+ 2f4: 0e05 tcnz!
+ 2f6: 0e05 tcnz!
+ 2f8: 8000b854 tcnz
+ 2fc: 8254e026 xor r18, r20, r24
+ 300: 6062 sdbbp! 12
+ 302: 6062 sdbbp! 12
+ 304: 6062 sdbbp! 12
+ 306: 6062 sdbbp! 12
+ 308: 6062 sdbbp! 12
+ 30a: 6062 sdbbp! 12
+ 30c: 800c8006 sdbbp 12
+ 310: 8254e010 add r18, r20, r24
+ ...
+ 320: 6062 sdbbp! 12
+ 322: 6062 sdbbp! 12
+ 324: 6062 sdbbp! 12
+ 326: 6062 sdbbp! 12
+ 328: 800c8006 sdbbp 12
+ 32c: 8254e026 xor r18, r20, r24
diff --git a/gas/testsuite/gas/score/tcond.s b/gas/testsuite/gas/score/tcond.s
new file mode 100644
index 000000000000..fe89bad3a1d7
--- /dev/null
+++ b/gas/testsuite/gas/score/tcond.s
@@ -0,0 +1,55 @@
+/*
+ * test relax
+ * Tcond <-> Tcond!
+ * sdbbp <-> sdbbp!
+
+ * Author: ligang
+ */
+
+.macro tran insn32, insn16
+/* This block transform 32b instruction to 16b. */
+.align 4
+
+ \insn32 #32b -> 16b
+ \insn16
+
+ \insn32 #32b -> 16b
+ \insn32 #32b -> 16b
+
+ \insn16
+ \insn32 #32b -> 16b
+
+ \insn32 #No transform
+ add r18, r20, r24
+
+/* This block transform 16b instruction to 32b. */
+.align 4
+
+ \insn16 #No transform
+ \insn32
+
+ \insn16 #No transform
+ \insn16
+
+ \insn16 #16b -> 32b
+ xor r18, r20, r24
+
+.endm
+
+ tran "tset", "tset!"
+ tran "tcs", "tcs!"
+ tran "tcc", "tcc!"
+ tran "tgtu", "tgtu!"
+ tran "tleu", "tleu!"
+ tran "teq", "teq!"
+ tran "tne", "tne!"
+ tran "tgt", "tgt!"
+ tran "tle", "tle!"
+ tran "tge", "tge!"
+ tran "tlt", "tlt!"
+ tran "tmi", "tmi!"
+ tran "tpl", "tpl!"
+ tran "tvs", "tvs!"
+ tran "tvc", "tvc!"
+ tran "tcnz", "tcnz!"
+ tran "sdbbp 12", "sdbbp! 12"
diff --git a/gas/testsuite/gas/sh/basic.exp b/gas/testsuite/gas/sh/basic.exp
index 093048b87dc9..2f9424d98e6f 100644
--- a/gas/testsuite/gas/sh/basic.exp
+++ b/gas/testsuite/gas/sh/basic.exp
@@ -167,6 +167,8 @@ if [istarget sh*-*-*] then {
# Test --allow-reg-prefix.
run_dump_test "reg-prefix"
+
+ run_dump_test "too_large"
}
}
diff --git a/gas/testsuite/gas/sh/pcrel-coff.d b/gas/testsuite/gas/sh/pcrel-coff.d
index eaca1fd7cea2..9946bf51e151 100644
--- a/gas/testsuite/gas/sh/pcrel-coff.d
+++ b/gas/testsuite/gas/sh/pcrel-coff.d
@@ -7,11 +7,11 @@
Disassembly of section .text:
00000000 <code>:
- 0: d1 03 mov\.l 10 <litpool>,r1 ! 0xfffffff0
- 2: d1 03 mov\.l 10 <litpool>,r1 ! 0xfffffff0
+ 0: d1 03 mov\.l 10 <litpool>,r1 ! fffffff0
+ 2: d1 03 mov\.l 10 <litpool>,r1 ! fffffff0
4: c7 02 mova 10 <litpool>,r0
6: 61 02 mov\.l @r0,r1
- 8: d1 01 mov\.l 10 <litpool>,r1 ! 0xfffffff0
+ 8: d1 01 mov\.l 10 <litpool>,r1 ! fffffff0
a: 01 03 bsrf r1
c: 00 09 nop
e: 00 09 nop
diff --git a/gas/testsuite/gas/sh/pcrel-hms.d b/gas/testsuite/gas/sh/pcrel-hms.d
index 12df66771932..233886d88568 100644
--- a/gas/testsuite/gas/sh/pcrel-hms.d
+++ b/gas/testsuite/gas/sh/pcrel-hms.d
@@ -9,13 +9,13 @@
Disassembly of section .text:
00000000 <code>:
- 0: d0 04 mov\.l 14 <litpool>,r0 ! 0xffffffec
- 2: d1 05 mov\.l 18 <litpool\+0x4>,r1 ! 0x90009
- 4: d1 03 mov\.l 14 <litpool>,r1 ! 0xffffffec
- 6: d1 03 mov\.l 14 <litpool>,r1 ! 0xffffffec
+ 0: d0 04 mov\.l 14 <litpool>,r0 ! ffffffec
+ 2: d1 05 mov\.l 18 <litpool\+0x4>,r1 ! 90009
+ 4: d1 03 mov\.l 14 <litpool>,r1 ! ffffffec
+ 6: d1 03 mov\.l 14 <litpool>,r1 ! ffffffec
8: c7 02 mova 14 <litpool>,r0
a: 61 02 mov\.l @r0,r1
- c: d1 01 mov\.l 14 <litpool>,r1 ! 0xffffffec
+ c: d1 01 mov\.l 14 <litpool>,r1 ! ffffffec
e: 01 03 bsrf r1
10: 00 09 nop
12: 00 09 nop
diff --git a/gas/testsuite/gas/sh/pcrel.d b/gas/testsuite/gas/sh/pcrel.d
index 9e81b60cdf8f..b9f8fcd5560c 100644
--- a/gas/testsuite/gas/sh/pcrel.d
+++ b/gas/testsuite/gas/sh/pcrel.d
@@ -8,13 +8,13 @@
Disassembly of section .text:
00000000 <code>:
- 0: d0 04 mov\.l 14 <litpool>,r0 ! 0xffffffec
+ 0: d0 04 mov\.l 14 <litpool>,r0 ! ffffffec
2: d1 05 mov\.l 18 <litpool\+0x4>,r1
- 4: d1 03 mov\.l 14 <litpool>,r1 ! 0xffffffec
- 6: d1 03 mov\.l 14 <litpool>,r1 ! 0xffffffec
+ 4: d1 03 mov\.l 14 <litpool>,r1 ! ffffffec
+ 6: d1 03 mov\.l 14 <litpool>,r1 ! ffffffec
8: c7 02 mova 14 <litpool>,r0
a: 61 02 mov\.l @r0,r1
- c: d1 01 mov\.l 14 <litpool>,r1 ! 0xffffffec
+ c: d1 01 mov\.l 14 <litpool>,r1 ! ffffffec
e: 01 03 bsrf r1
10: 00 09 nop
12: 00 09 nop
diff --git a/gas/testsuite/gas/sh/pcrel2.d b/gas/testsuite/gas/sh/pcrel2.d
index 21df0aa7d2f2..519214a45c64 100644
--- a/gas/testsuite/gas/sh/pcrel2.d
+++ b/gas/testsuite/gas/sh/pcrel2.d
@@ -8,8 +8,8 @@ Disassembly of section \.text:
00000000 <code>:
0: 8b 01 bf 6 <foo>
- 2: d0 02 mov\.l c <bar>,r0 ! 0x6 .*
- 4: 90 02 mov\.w c <bar>,r0 ! 0x0 .*
+ 2: d0 02 mov\.l c <bar>,r0 ! 6 .*
+ 4: 90 02 mov\.w c <bar>,r0 ! 0 .*
00000006 <foo>:
6: af fe bra 6 <foo>
diff --git a/gas/testsuite/gas/sh/pic.d b/gas/testsuite/gas/sh/pic.d
index 9a2d0cecdde6..8d3e69fa69df 100644
--- a/gas/testsuite/gas/sh/pic.d
+++ b/gas/testsuite/gas/sh/pic.d
@@ -6,25 +6,25 @@
Disassembly of section \.text:
0x00000000 c7 0a mova 0x0000002c,r0
-0x00000002 dc 0a mov\.l 0x0000002c,r12 ! 0x0
+0x00000002 dc 0a mov\.l 0x0000002c,r12 ! 0
0x00000004 3c 0c add r0,r12
-0x00000006 d0 0a mov\.l 0x00000030,r0 ! 0x0
+0x00000006 d0 0a mov\.l 0x00000030,r0 ! 0
0x00000008 00 ce mov\.l @\(r0,r12\),r0
0x0000000a 40 0b jsr @r0
0x0000000c 00 09 nop
-0x0000000e d0 09 mov\.l 0x00000034,r0 ! 0x0
+0x0000000e d0 09 mov\.l 0x00000034,r0 ! 0
0x00000010 30 cc add r12,r0
0x00000012 40 0b jsr @r0
0x00000014 00 09 nop
-0x00000016 d1 08 mov\.l 0x00000038,r1 ! 0x0
+0x00000016 d1 08 mov\.l 0x00000038,r1 ! 0
0x00000018 c7 07 mova 0x00000038,r0
0x0000001a 30 1c add r1,r0
0x0000001c 40 0b jsr @r0
0x0000001e 00 09 nop
-0x00000020 d0 06 mov\.l 0x0000003c,r0 ! 0x16
+0x00000020 d0 06 mov\.l 0x0000003c,r0 ! 16
0x00000022 40 0b jsr @r0
0x00000024 00 09 nop
-0x00000026 d0 06 mov\.l 0x00000040,r0 ! 0x14
+0x00000026 d0 06 mov\.l 0x00000040,r0 ! 14
0x00000028 40 0b jsr @r0
0x0000002a 00 09 nop
\.\.\.
diff --git a/gas/testsuite/gas/sh/sh64/syntax-1.d b/gas/testsuite/gas/sh/sh64/syntax-1.d
index 84a9c2552102..b48329324ad6 100644
--- a/gas/testsuite/gas/sh/sh64/syntax-1.d
+++ b/gas/testsuite/gas/sh/sh64/syntax-1.d
@@ -85,7 +85,7 @@ Disassembly of section .text:
104: e00107f0 prefi r0,32
0000000000000108 <.*>:
- 108: 90 01 mov.w 10e <.*>,r0 ! 0x8101
+ 108: 90 01 mov.w 10e <.*>,r0 ! 8101
10a: 85 01 mov.w @\(2,r0\),r0
10c: c5 01 mov.w @\(2,gbr\),r0
10e: 81 01 mov.w r0,@\(2,r0\)
@@ -94,7 +94,7 @@ Disassembly of section .text:
114: 89 01 bt 11a <.*>
116: a0 01 bra 11c <.*>
118: b0 01 bsr 11e <.*>
- 11a: d0 00 mov.l 11c <.*>,r0 ! 0x5001c601
+ 11a: d0 00 mov.l 11c <.*>,r0 ! 5001c601
11c: 50 01 mov.l @\(4,r0\),r0
11e: c6 01 mov.l @\(4,gbr\),r0
120: c7 01 mova 128 <.*>,r0
diff --git a/gas/testsuite/gas/sh/tlsd.d b/gas/testsuite/gas/sh/tlsd.d
index b4d75974c85e..055b5a7c6ece 100644
--- a/gas/testsuite/gas/sh/tlsd.d
+++ b/gas/testsuite/gas/sh/tlsd.d
@@ -11,12 +11,12 @@ Disassembly of section .text:
2: 2f e6 [ ]*mov\.l r14,@-r15
4: 4f 22 [ ]*sts\.l pr,@-r15
6: c7 14 [ ]*mova 58 <fn\+0x58>,r0
- 8: dc 13 [ ]*mov\.l 58 <fn\+0x58>,r12[ ]+! 0x0 .*
+ 8: dc 13 [ ]*mov\.l 58 <fn\+0x58>,r12[ ]+! 0 .*
a: 3c 0c [ ]*add r0,r12
c: 6e f3 [ ]*mov r15,r14
- e: d4 04 [ ]*mov\.l 20 <fn\+0x20>,r4[ ]+! 0x0 .*
+ e: d4 04 [ ]*mov\.l 20 <fn\+0x20>,r4[ ]+! 0 .*
10: c7 04 [ ]*mova 24 <fn\+0x24>,r0
- 12: d1 04 [ ]*mov\.l 24 <fn\+0x24>,r1[ ]+! 0x0 .*
+ 12: d1 04 [ ]*mov\.l 24 <fn\+0x24>,r1[ ]+! 0 .*
14: 31 0c [ ]*add r0,r1
16: 41 0b [ ]*jsr @r1
18: 34 cc [ ]*add r12,r4
@@ -26,9 +26,9 @@ Disassembly of section .text:
\.\.\.
[ ]+20: R_SH_TLS_GD_32 foo
[ ]+24: R_SH_PLT32 __tls_get_addr
- 28: d4 03 [ ]*mov\.l 38 <fn\+0x38>,r4[ ]+! 0x0 .*
+ 28: d4 03 [ ]*mov\.l 38 <fn\+0x38>,r4[ ]+! 0 .*
2a: c7 04 [ ]*mova 3c <fn\+0x3c>,r0
- 2c: d1 03 [ ]*mov\.l 3c <fn\+0x3c>,r1[ ]+! 0x0 .*
+ 2c: d1 03 [ ]*mov\.l 3c <fn\+0x3c>,r1[ ]+! 0 .*
2e: 31 0c [ ]*add r0,r1
30: 41 0b [ ]*jsr @r1
32: 34 cc [ ]*add r12,r4
@@ -38,10 +38,10 @@ Disassembly of section .text:
[ ]+38: R_SH_TLS_LD_32 bar
[ ]+3c: R_SH_PLT32 __tls_get_addr
40: e2 01 [ ]*mov #1,r2
- 42: d1 06 [ ]*mov\.l 5c <fn\+0x5c>,r1[ ]+! 0x0 .*
+ 42: d1 06 [ ]*mov\.l 5c <fn\+0x5c>,r1[ ]+! 0 .*
44: 30 1c [ ]*add r1,r0
46: 20 22 [ ]*mov\.l r2,@r0
- 48: d1 05 [ ]*mov\.l 60 <fn\+0x60>,r1[ ]+! 0x0 .*
+ 48: d1 05 [ ]*mov\.l 60 <fn\+0x60>,r1[ ]+! 0 .*
4a: 30 1c [ ]*add r1,r0
4c: 6f e3 [ ]*mov r14,r15
4e: 4f 26 [ ]*lds\.l @r15\+,pr
diff --git a/gas/testsuite/gas/sh/tlsnopic.d b/gas/testsuite/gas/sh/tlsnopic.d
index 69131276ccee..739f48de879c 100644
--- a/gas/testsuite/gas/sh/tlsnopic.d
+++ b/gas/testsuite/gas/sh/tlsnopic.d
@@ -10,7 +10,7 @@ Disassembly of section .text:
0: 2f e6 [ ]*mov\.l r14,@-r15
2: 6e f3 [ ]*mov r15,r14
4: 01 12 [ ]*stc gbr,r1
- 6: d0 02 [ ]*mov\.l 10 <fn\+0x10>,r0[ ]+! 0x0 .*
+ 6: d0 02 [ ]*mov\.l 10 <fn\+0x10>,r0[ ]+! 0 .*
8: 30 1c [ ]*add r1,r0
a: 6f e3 [ ]*mov r14,r15
c: 00 0b [ ]*rts
diff --git a/gas/testsuite/gas/sh/tlspic.d b/gas/testsuite/gas/sh/tlspic.d
index 207ab1a2f4b2..66043ba1839e 100644
--- a/gas/testsuite/gas/sh/tlspic.d
+++ b/gas/testsuite/gas/sh/tlspic.d
@@ -11,9 +11,9 @@ Disassembly of section .text:
2: 2f e6 [ ]*mov\.l r14,@-r15
4: 6e f3 [ ]*mov r15,r14
6: c7 08 [ ]*mova 28 <fn\+0x28>,r0
- 8: dc 07 [ ]*mov\.l 28 <fn\+0x28>,r12[ ]+! 0x0 .*
+ 8: dc 07 [ ]*mov\.l 28 <fn\+0x28>,r12[ ]+! 0 .*
a: 3c 0c [ ]*add r0,r12
- c: d0 02 [ ]*mov\.l 18 <fn\+0x18>,r0[ ]+! 0x0 .*
+ c: d0 02 [ ]*mov\.l 18 <fn\+0x18>,r0[ ]+! 0 .*
e: 01 12 [ ]*stc gbr,r1
10: 00 ce [ ]*mov\.l @\(r0,r12\),r0
12: a0 03 [ ]*bra 1c <fn\+0x1c>
diff --git a/gas/testsuite/gas/sh/too_large.d b/gas/testsuite/gas/sh/too_large.d
new file mode 100644
index 000000000000..597e74516e01
--- /dev/null
+++ b/gas/testsuite/gas/sh/too_large.d
@@ -0,0 +1,9 @@
+#name: Check for bogus overflow errors in .byte directives
+#as: -big -relax -isa=sh4a
+#nm: -n
+
+[ ]*U \.L318
+[ ]*U \.L319
+[ ]*U \.L320
+[ ]*U \.L321
+0+00100 t \.L307
diff --git a/gas/testsuite/gas/sh/too_large.s b/gas/testsuite/gas/sh/too_large.s
new file mode 100644
index 000000000000..b67b8f716d07
--- /dev/null
+++ b/gas/testsuite/gas/sh/too_large.s
@@ -0,0 +1,39 @@
+ .file "too_large.c"
+ .text
+ nop
+ .align 8
+.L307:
+ .byte .L302-.L307
+ .byte .L303-.L307
+ .byte .L304-.L307
+ .byte .L305-.L307
+.L304:
+ mov.l .L318,r1
+ jsr @r1
+ mov r8,r4
+ lds r0,fpul
+ fsts fpul,fr1
+ flds fr1,fpul
+ sts fpul,r0
+ mov r14,r15
+ lds.l @r15+,pr
+ mov.l @r15+,r14
+ mov.l @r15+,r8
+ rts
+ nop
+.L305:
+ mov.l .L319,r7
+ jsr @r7
+ mov r8,r4
+ lds r0,fpul
+ bra .L307
+ fsts fpul,fr1
+.L303:
+ mov.l .L320,r6
+ jsr @r6
+ mov r8,r4
+ lds r0,fpul
+ bra .L307
+ fsts fpul,fr1
+.L302:
+ mov.l .L321,r5
diff --git a/gas/testsuite/gas/sparc/pr4587.l b/gas/testsuite/gas/sparc/pr4587.l
new file mode 100644
index 000000000000..fd05091b1e27
--- /dev/null
+++ b/gas/testsuite/gas/sparc/pr4587.l
@@ -0,0 +1,2 @@
+.*pr4587.s: Assembler messages:
+.*pr4587.s:18: Error: Illegal operands
diff --git a/gas/testsuite/gas/sparc/pr4587.s b/gas/testsuite/gas/sparc/pr4587.s
new file mode 100644
index 000000000000..a058c1d07a38
--- /dev/null
+++ b/gas/testsuite/gas/sparc/pr4587.s
@@ -0,0 +1,22 @@
+ .section .data
+ .align 4
+zero: .single 0.0
+
+ .section .text
+ .align 4
+ .global main
+main:
+ save %sp, -96, %sp
+
+ ! Zero-out the first FP register
+ set zero, %l0
+ ld [%l0], %f0
+
+ ! Compare it to itself
+ ! The third reg (%f0) will cause a segfault in as
+ ! fcmps only takes two regs... this should be illegal operand error
+ fcmps %f0, %f0, %f0
+
+ ! Return 0
+ ret
+ restore %g0, %g0, %o0
diff --git a/gas/testsuite/gas/sparc/sparc.exp b/gas/testsuite/gas/sparc/sparc.exp
index a2e362dbba11..876f9acf8011 100644
--- a/gas/testsuite/gas/sparc/sparc.exp
+++ b/gas/testsuite/gas/sparc/sparc.exp
@@ -48,6 +48,13 @@ if [istarget sparc*-*-*] {
run_dump_test "pcrel64"
run_dump_test "plt64"
}
+ run_dump_test "v9branch1"
+ run_dump_test "v9branch2"
+ run_dump_test "v9branch3"
+ run_dump_test "v9branch4"
+ run_dump_test "v9branch5"
+
+ run_list_test "pr4587" ""
}
if [istarget sparc-*-vxworks*] {
diff --git a/gas/testsuite/gas/sparc/v9branch1.d b/gas/testsuite/gas/sparc/v9branch1.d
new file mode 100644
index 000000000000..c2c05e4d88b4
--- /dev/null
+++ b/gas/testsuite/gas/sparc/v9branch1.d
@@ -0,0 +1,23 @@
+#as: -Av9
+#objdump: -dr --prefix-addresses
+#name: v9branch1
+
+.*: +file format .*sparc.*
+
+Disassembly of section .text:
+0x0+000000 brz %o0, 0x0+01fffc
+0x0+000004 nop
+ ...
+0x0+01fff8 nop
+0x0+01fffc nop
+ ...
+0x0+03fffc brz %o0, 0x0+01fffc
+0x0+040000 nop
+0x0+040004 bne %icc, 0x0+140000
+0x0+040008 nop
+ ...
+0x0+13fffc nop
+0x0+140000 nop
+ ...
+0x0+240000 bne %icc, 0x0+140000
+0x0+240004 nop
diff --git a/gas/testsuite/gas/sparc/v9branch1.s b/gas/testsuite/gas/sparc/v9branch1.s
new file mode 100644
index 000000000000..15c4a6aecd60
--- /dev/null
+++ b/gas/testsuite/gas/sparc/v9branch1.s
@@ -0,0 +1,18 @@
+ # Check if maximum possible branch distances for v9 branches are accepted
+ .text
+ brz,pt %o0, 1f
+ nop
+ .skip (128 * 1024 - 16)
+ nop
+1: nop
+ .skip (128 * 1024 - 4)
+ brz,pt %o0, 1b
+ nop
+ bne,pt %icc, 2f
+ nop
+ .skip (1024 * 1024 - 16)
+ nop
+2: nop
+ .skip (1024 * 1024 - 4)
+ bne,pt %icc, 2b
+ nop
diff --git a/gas/testsuite/gas/sparc/v9branch2.d b/gas/testsuite/gas/sparc/v9branch2.d
new file mode 100644
index 000000000000..dcad03b336f5
--- /dev/null
+++ b/gas/testsuite/gas/sparc/v9branch2.d
@@ -0,0 +1,3 @@
+#as: -Av9
+#name: v9branch2
+#error: :3:.*relocation.*overflow
diff --git a/gas/testsuite/gas/sparc/v9branch2.s b/gas/testsuite/gas/sparc/v9branch2.s
new file mode 100644
index 000000000000..6048a82d7b8d
--- /dev/null
+++ b/gas/testsuite/gas/sparc/v9branch2.s
@@ -0,0 +1,7 @@
+ # Text for relocation overflow diagnostic
+ .text
+ brz,pt %o0, 1f
+ nop
+ .skip (128 * 1024 - 12)
+ nop
+1: nop
diff --git a/gas/testsuite/gas/sparc/v9branch3.d b/gas/testsuite/gas/sparc/v9branch3.d
new file mode 100644
index 000000000000..f8105fd70399
--- /dev/null
+++ b/gas/testsuite/gas/sparc/v9branch3.d
@@ -0,0 +1,3 @@
+#as: -Av9
+#name: v9branch3
+#error: :5:.*relocation.*overflow
diff --git a/gas/testsuite/gas/sparc/v9branch3.s b/gas/testsuite/gas/sparc/v9branch3.s
new file mode 100644
index 000000000000..6bcfea08313b
--- /dev/null
+++ b/gas/testsuite/gas/sparc/v9branch3.s
@@ -0,0 +1,6 @@
+ # Text for relocation overflow diagnostic
+ .text
+1: nop
+ .skip (128 * 1024)
+ brz,pt %o0, 1b
+ nop
diff --git a/gas/testsuite/gas/sparc/v9branch4.d b/gas/testsuite/gas/sparc/v9branch4.d
new file mode 100644
index 000000000000..4379388eb576
--- /dev/null
+++ b/gas/testsuite/gas/sparc/v9branch4.d
@@ -0,0 +1,3 @@
+#as: -Av9
+#name: v9branch4
+#error: :3:.*relocation.*overflow
diff --git a/gas/testsuite/gas/sparc/v9branch4.s b/gas/testsuite/gas/sparc/v9branch4.s
new file mode 100644
index 000000000000..bf2306f34f01
--- /dev/null
+++ b/gas/testsuite/gas/sparc/v9branch4.s
@@ -0,0 +1,7 @@
+ # Text for relocation overflow diagnostic
+ .text
+ bne,pt %icc, 1f
+ nop
+ .skip (1024 * 1024 - 12)
+ nop
+1: nop
diff --git a/gas/testsuite/gas/sparc/v9branch5.d b/gas/testsuite/gas/sparc/v9branch5.d
new file mode 100644
index 000000000000..937a3eacb7ec
--- /dev/null
+++ b/gas/testsuite/gas/sparc/v9branch5.d
@@ -0,0 +1,3 @@
+#as: -Av9
+#name: v9branch5
+#error: :5:.*relocation.*overflow
diff --git a/gas/testsuite/gas/sparc/v9branch5.s b/gas/testsuite/gas/sparc/v9branch5.s
new file mode 100644
index 000000000000..733aa2a3ed28
--- /dev/null
+++ b/gas/testsuite/gas/sparc/v9branch5.s
@@ -0,0 +1,6 @@
+ # Text for relocation overflow diagnostic
+ .text
+1: nop
+ .skip (1024 * 1024)
+ bne,pt %icc, 1b
+ nop
diff --git a/gas/testsuite/gas/v850/v850e1.d b/gas/testsuite/gas/v850/v850e1.d
index 3f176d13c3bd..9fb689b5d3c7 100644
--- a/gas/testsuite/gas/v850/v850e1.d
+++ b/gas/testsuite/gas/v850/v850e1.d
@@ -11,7 +11,7 @@ Disassembly of section .text:
0x0+04 e0 1f 40 23 [ ]*bsw sp, gp
0x0+08 05 02 [ ]*callt 5
0x0+0a e8 3f e4 00 [ ]*clr1 r7, r8
-0x0+0e f6 17 14 1b [ ]*cmov nz, 22, r2, sp
+0x0+0e f6 17 14 1b [ ]*cmov nz, -10, r2, sp
0x0+12 e1 17 34 1b [ ]*cmov nz, r1, r2, sp
0x0+16 e0 07 44 01 [ ]*ctret
0x0+1a e0 07 46 01 [ ]*dbret
diff --git a/gas/testsuite/gas/z8k/calr.d b/gas/testsuite/gas/z8k/calr.d
index fd6f7d8293db..5ba3db904b4f 100644
--- a/gas/testsuite/gas/z8k/calr.d
+++ b/gas/testsuite/gas/z8k/calr.d
@@ -6,16 +6,16 @@
Disassembly of section \.text:
-00000000 <label1>:
+0*00000000 <label1>:
0: d803 calr 0xffc
2: d800 calr 0x1004
\.\.\.
-00000ffc <label2>:
+0*00000ffc <label2>:
ffc: d7ff calr 0x0
ffe: 8d07 nop
1000: 8d07 nop
1002: 8d07 nop
-00001004 <label3>:
+0*00001004 <label3>:
1004: 8d07 nop
diff --git a/gas/testsuite/gas/z8k/ctrl-names.d b/gas/testsuite/gas/z8k/ctrl-names.d
index ecf004fa89bb..ae69e97749b4 100644
--- a/gas/testsuite/gas/z8k/ctrl-names.d
+++ b/gas/testsuite/gas/z8k/ctrl-names.d
@@ -1,12 +1,12 @@
#as:
#objdump: -d
-#name: jmp cc
+#name: control register names
.*: +file format coff-z8k
Disassembly of section \.text:
-00000000 <\.text>:
+0*00000000 <\.text>:
0: 7d02 ldctl r0,fcw
2: 7d0a ldctl fcw,r0
4: 7d03 ldctl r0,refresh
diff --git a/gas/testsuite/gas/z8k/djnz.d b/gas/testsuite/gas/z8k/djnz.d
index 5b6eca73cafc..053a7d03fc28 100644
--- a/gas/testsuite/gas/z8k/djnz.d
+++ b/gas/testsuite/gas/z8k/djnz.d
@@ -6,14 +6,14 @@
Disassembly of section \.text:
-00000000 <label1>:
+0*00000000 <label1>:
0: 8d07 nop
\.\.\.
fa: f0fe djnz r0,0x0
fc: f87f dbjnz rl0,0x0
fe: 8d07 nop
-00000100 <label2>:
+0*00000100 <label2>:
100: 8d07 nop
\.\.\.
1fa: f87e dbjnz rl0,0x100
diff --git a/gas/testsuite/gas/z8k/inout.d b/gas/testsuite/gas/z8k/inout.d
index 0f0f772940b7..7b9696bb0290 100644
--- a/gas/testsuite/gas/z8k/inout.d
+++ b/gas/testsuite/gas/z8k/inout.d
@@ -6,7 +6,7 @@
Disassembly of section \.text:
-00000000 <\.text>:
+0*00000000 <\.text>:
0: 3b14 4444 in r1,#0x4444
4: 3a34 0123 inb rh3,#0x123
8: 3d08 in r8,@r0
diff --git a/gas/testsuite/gas/z8k/jmp-cc.d b/gas/testsuite/gas/z8k/jmp-cc.d
index 012e97f7b14b..11940500ed89 100644
--- a/gas/testsuite/gas/z8k/jmp-cc.d
+++ b/gas/testsuite/gas/z8k/jmp-cc.d
@@ -6,7 +6,7 @@
Disassembly of section \.text:
-00000000 <\.text>:
+0*00000000 <\.text>:
0: e01f jr f,0x40
2: e11e jr lt,0x40
4: e21d jr le,0x40
@@ -37,7 +37,7 @@ Disassembly of section \.text:
3c: e801 jr t,0x40
3e: e800 jr t,0x40
-00000040 <dd>:
+0*00000040 <dd>:
40: e8ff jr t,0x40
42: e8fe jr t,0x40
44: 8d07 nop
diff --git a/gas/testsuite/gas/z8k/jr-back.d b/gas/testsuite/gas/z8k/jr-back.d
index 0b80140380f6..bc244332a543 100644
--- a/gas/testsuite/gas/z8k/jr-back.d
+++ b/gas/testsuite/gas/z8k/jr-back.d
@@ -6,7 +6,7 @@
Disassembly of section \.text:
-00000000 <start>:
+0*00000000 <start>:
0: 8d07 nop
\.\.\.
fa: e882 jr t,0x0
diff --git a/gas/testsuite/gas/z8k/jr-forw.d b/gas/testsuite/gas/z8k/jr-forw.d
index 6d2f4680f006..a0de55c96311 100644
--- a/gas/testsuite/gas/z8k/jr-forw.d
+++ b/gas/testsuite/gas/z8k/jr-forw.d
@@ -6,11 +6,11 @@
Disassembly of section \.text:
-00000000 <.text>:
+0*00000000 <.text>:
0: e87f jr t,0x100
2: e87e jr t,0x100
4: e87d jr t,0x100
\.\.\.
-00000100 <dest>:
+0*00000100 <dest>:
100: 8d07 nop
diff --git a/gas/testsuite/gas/z8k/reglabel.d b/gas/testsuite/gas/z8k/reglabel.d
new file mode 100644
index 000000000000..a16cad502eca
--- /dev/null
+++ b/gas/testsuite/gas/z8k/reglabel.d
@@ -0,0 +1,268 @@
+#as:
+#objdump: -d
+#name: reglabel
+
+.*: +file format coff-z8k
+
+Disassembly of section \.text:
+
+0*00000000 <sp_label>:
+ 0: 7600 0000 lda r0,0x0
+
+0*00000004 <r0_label>:
+ 4: 7600 0004 lda r0,0x4
+
+0*00000008 <r1_label>:
+ 8: 7600 0008 lda r0,0x8
+
+0*0000000c <r2_label>:
+ c: 7600 000c lda r0,0xc
+
+0*00000010 <r3_label>:
+ 10: 7600 0010 lda r0,0x10
+
+0*00000014 <r4_label>:
+ 14: 7600 0014 lda r0,0x14
+
+0*00000018 <r5_label>:
+ 18: 7600 0018 lda r0,0x18
+
+0*0000001c <r6_label>:
+ 1c: 7600 001c lda r0,0x1c
+
+0*00000020 <r7_label>:
+ 20: 7600 0020 lda r0,0x20
+
+0*00000024 <r8_label>:
+ 24: 7600 0024 lda r0,0x24
+
+0*00000028 <r9_label>:
+ 28: 7600 0028 lda r0,0x28
+
+0*0000002c <r10_label>:
+ 2c: 7600 002c lda r0,0x2c
+
+0*00000030 <r11_label>:
+ 30: 7600 0030 lda r0,0x30
+
+0*00000034 <r12_label>:
+ 34: 7600 0034 lda r0,0x34
+
+0*00000038 <r13_label>:
+ 38: 7600 0038 lda r0,0x38
+
+0*0000003c <r14_label>:
+ 3c: 7600 003c lda r0,0x3c
+
+0*00000040 <r15_label>:
+ 40: 7600 0040 lda r0,0x40
+
+0*00000044 <r16_label>:
+ 44: 7600 0044 lda r0,0x44
+
+0*00000048 <rr0_label>:
+ 48: 7600 0048 lda r0,0x48
+
+0*0000004c <rr1_label>:
+ 4c: 7600 004c lda r0,0x4c
+
+0*00000050 <rr2_label>:
+ 50: 7600 0050 lda r0,0x50
+
+0*00000054 <rr3_label>:
+ 54: 7600 0054 lda r0,0x54
+
+0*00000058 <rr4_label>:
+ 58: 7600 0058 lda r0,0x58
+
+0*0000005c <rr5_label>:
+ 5c: 7600 005c lda r0,0x5c
+
+0*00000060 <rr6_label>:
+ 60: 7600 0060 lda r0,0x60
+
+0*00000064 <rr7_label>:
+ 64: 7600 0064 lda r0,0x64
+
+0*00000068 <rr8_label>:
+ 68: 7600 0068 lda r0,0x68
+
+0*0000006c <rr9_label>:
+ 6c: 7600 006c lda r0,0x6c
+
+0*00000070 <rr10_label>:
+ 70: 7600 0070 lda r0,0x70
+
+0*00000074 <rr11_label>:
+ 74: 7600 0074 lda r0,0x74
+
+0*00000078 <rr12_label>:
+ 78: 7600 0078 lda r0,0x78
+
+0*0000007c <rr13_label>:
+ 7c: 7600 007c lda r0,0x7c
+
+0*00000080 <rr14_label>:
+ 80: 7600 0080 lda r0,0x80
+
+0*00000084 <rr15_label>:
+ 84: 7600 0084 lda r0,0x84
+
+0*00000088 <rr16_label>:
+ 88: 7600 0088 lda r0,0x88
+
+0*0000008c <rq0_label>:
+ 8c: 7600 008c lda r0,0x8c
+
+0*00000090 <rq1_label>:
+ 90: 7600 0090 lda r0,0x90
+
+0*00000094 <rq2_label>:
+ 94: 7600 0094 lda r0,0x94
+
+0*00000098 <rq3_label>:
+ 98: 7600 0098 lda r0,0x98
+
+0*0000009c <rq4_label>:
+ 9c: 7600 009c lda r0,0x9c
+
+0*000000a0 <rq5_label>:
+ a0: 7600 00a0 lda r0,0xa0
+
+0*000000a4 <rq6_label>:
+ a4: 7600 00a4 lda r0,0xa4
+
+0*000000a8 <rq7_label>:
+ a8: 7600 00a8 lda r0,0xa8
+
+0*000000ac <rq8_label>:
+ ac: 7600 00ac lda r0,0xac
+
+0*000000b0 <rq9_label>:
+ b0: 7600 00b0 lda r0,0xb0
+
+0*000000b4 <rq10_label>:
+ b4: 7600 00b4 lda r0,0xb4
+
+0*000000b8 <rq11_label>:
+ b8: 7600 00b8 lda r0,0xb8
+
+0*000000bc <rq12_label>:
+ bc: 7600 00bc lda r0,0xbc
+
+0*000000c0 <rq13_label>:
+ c0: 7600 00c0 lda r0,0xc0
+
+0*000000c4 <rq14_label>:
+ c4: 7600 00c4 lda r0,0xc4
+
+0*000000c8 <rq15_label>:
+ c8: 7600 00c8 lda r0,0xc8
+
+0*000000cc <rq16_label>:
+ cc: 7600 00cc lda r0,0xcc
+
+0*000000d0 <rh0_label>:
+ d0: 7600 00d0 lda r0,0xd0
+
+0*000000d4 <rh1_label>:
+ d4: 7600 00d4 lda r0,0xd4
+
+0*000000d8 <rh2_label>:
+ d8: 7600 00d8 lda r0,0xd8
+
+0*000000dc <rh3_label>:
+ dc: 7600 00dc lda r0,0xdc
+
+0*000000e0 <rh4_label>:
+ e0: 7600 00e0 lda r0,0xe0
+
+0*000000e4 <rh5_label>:
+ e4: 7600 00e4 lda r0,0xe4
+
+0*000000e8 <rh6_label>:
+ e8: 7600 00e8 lda r0,0xe8
+
+0*000000ec <rh7_label>:
+ ec: 7600 00ec lda r0,0xec
+
+0*000000f0 <rh8_label>:
+ f0: 7600 00f0 lda r0,0xf0
+
+0*000000f4 <rh9_label>:
+ f4: 7600 00f4 lda r0,0xf4
+
+0*000000f8 <rh10_label>:
+ f8: 7600 00f8 lda r0,0xf8
+
+0*000000fc <rh11_label>:
+ fc: 7600 00fc lda r0,0xfc
+
+0*00000100 <rh12_label>:
+ 100: 7600 0100 lda r0,0x100
+
+0*00000104 <rh13_label>:
+ 104: 7600 0104 lda r0,0x104
+
+0*00000108 <rh14_label>:
+ 108: 7600 0108 lda r0,0x108
+
+0*0000010c <rh15_label>:
+ 10c: 7600 010c lda r0,0x10c
+
+0*00000110 <rh16_label>:
+ 110: 7600 0110 lda r0,0x110
+
+0*00000114 <rl0_label>:
+ 114: 7600 0114 lda r0,0x114
+
+0*00000118 <rl1_label>:
+ 118: 7600 0118 lda r0,0x118
+
+0*0000011c <rl2_label>:
+ 11c: 7600 011c lda r0,0x11c
+
+0*00000120 <rl3_label>:
+ 120: 7600 0120 lda r0,0x120
+
+0*00000124 <rl4_label>:
+ 124: 7600 0124 lda r0,0x124
+
+0*00000128 <rl5_label>:
+ 128: 7600 0128 lda r0,0x128
+
+0*0000012c <rl6_label>:
+ 12c: 7600 012c lda r0,0x12c
+
+0*00000130 <rl7_label>:
+ 130: 7600 0130 lda r0,0x130
+
+0*00000134 <rl8_label>:
+ 134: 7600 0134 lda r0,0x134
+
+0*00000138 <rl9_label>:
+ 138: 7600 0138 lda r0,0x138
+
+0*0000013c <rl10_label>:
+ 13c: 7600 013c lda r0,0x13c
+
+0*00000140 <rl11_label>:
+ 140: 7600 0140 lda r0,0x140
+
+0*00000144 <rl12_label>:
+ 144: 7600 0144 lda r0,0x144
+
+0*00000148 <rl13_label>:
+ 148: 7600 0148 lda r0,0x148
+
+0*0000014c <rl14_label>:
+ 14c: 7600 014c lda r0,0x14c
+
+0*00000150 <rl15_label>:
+ 150: 7600 0150 lda r0,0x150
+
+0*00000154 <rl16_label>:
+ 154: 7600 0154 lda r0,0x154
+
+0*00000158 <r00_label>:
+ 158: 7600 0158 lda r0,0x158
diff --git a/gas/testsuite/gas/z8k/reglabel.s b/gas/testsuite/gas/z8k/reglabel.s
new file mode 100644
index 000000000000..b722b14b9b6e
--- /dev/null
+++ b/gas/testsuite/gas/z8k/reglabel.s
@@ -0,0 +1,99 @@
+! labels starting with a valid register name
+
+.text
+
+sp_label: lda r0,sp_label
+
+r0_label: lda r0,r0_label
+r1_label: lda r0,r1_label
+r2_label: lda r0,r2_label
+r3_label: lda r0,r3_label
+r4_label: lda r0,r4_label
+r5_label: lda r0,r5_label
+r6_label: lda r0,r6_label
+r7_label: lda r0,r7_label
+r8_label: lda r0,r8_label
+r9_label: lda r0,r9_label
+r10_label: lda r0,r10_label
+r11_label: lda r0,r11_label
+r12_label: lda r0,r12_label
+r13_label: lda r0,r13_label
+r14_label: lda r0,r14_label
+r15_label: lda r0,r15_label
+r16_label: lda r0,r16_label ! not a valid register name anyway
+
+rr0_label: lda r0,rr0_label
+rr1_label: lda r0,rr1_label ! not a valid register name anyway
+rr2_label: lda r0,rr2_label
+rr3_label: lda r0,rr3_label ! not a valid register name anyway
+rr4_label: lda r0,rr4_label
+rr5_label: lda r0,rr5_label ! not a valid register name anyway
+rr6_label: lda r0,rr6_label
+rr7_label: lda r0,rr7_label ! not a valid register name anyway
+rr8_label: lda r0,rr8_label
+rr9_label: lda r0,rr9_label ! not a valid register name anyway
+rr10_label: lda r0,rr10_label
+rr11_label: lda r0,rr11_label ! not a valid register name anyway
+rr12_label: lda r0,rr12_label
+rr13_label: lda r0,rr13_label ! not a valid register name anyway
+rr14_label: lda r0,rr14_label
+rr15_label: lda r0,rr15_label ! not a valid register name anyway
+rr16_label: lda r0,rr16_label ! not a valid register name anyway
+
+rq0_label: lda r0,rq0_label
+rq1_label: lda r0,rq1_label ! not a valid register name anyway
+rq2_label: lda r0,rq2_label ! not a valid register name anyway
+rq3_label: lda r0,rq3_label ! not a valid register name anyway
+rq4_label: lda r0,rq4_label
+rq5_label: lda r0,rq5_label ! not a valid register name anyway
+rq6_label: lda r0,rq6_label ! not a valid register name anyway
+rq7_label: lda r0,rq7_label ! not a valid register name anyway
+rq8_label: lda r0,rq8_label
+rq9_label: lda r0,rq9_label ! not a valid register name anyway
+rq10_label: lda r0,rq10_label ! not a valid register name anyway
+rq11_label: lda r0,rq11_label ! not a valid register name anyway
+rq12_label: lda r0,rq12_label
+rq13_label: lda r0,rq13_label ! not a valid register name anyway
+rq14_label: lda r0,rq14_label ! not a valid register name anyway
+rq15_label: lda r0,rq15_label ! not a valid register name anyway
+rq16_label: lda r0,rq16_label ! not a valid register name anyway
+
+
+rh0_label: lda r0,rh0_label
+rh1_label: lda r0,rh1_label
+rh2_label: lda r0,rh2_label
+rh3_label: lda r0,rh3_label
+rh4_label: lda r0,rh4_label
+rh5_label: lda r0,rh5_label
+rh6_label: lda r0,rh6_label
+rh7_label: lda r0,rh7_label
+rh8_label: lda r0,rh8_label ! not a valid register name anyway
+rh9_label: lda r0,rh9_label ! not a valid register name anyway
+rh10_label: lda r0,rh10_label ! not a valid register name anyway
+rh11_label: lda r0,rh11_label ! not a valid register name anyway
+rh12_label: lda r0,rh12_label ! not a valid register name anyway
+rh13_label: lda r0,rh13_label ! not a valid register name anyway
+rh14_label: lda r0,rh14_label ! not a valid register name anyway
+rh15_label: lda r0,rh15_label ! not a valid register name anyway
+rh16_label: lda r0,rh16_label ! not a valid register name anyway
+
+rl0_label: lda r0,rl0_label
+rl1_label: lda r0,rl1_label
+rl2_label: lda r0,rl2_label
+rl3_label: lda r0,rl3_label
+rl4_label: lda r0,rl4_label
+rl5_label: lda r0,rl5_label
+rl6_label: lda r0,rl6_label
+rl7_label: lda r0,rl7_label
+rl8_label: lda r0,rl8_label ! not a valid register name anyway
+rl9_label: lda r0,rl9_label ! not a valid register name anyway
+rl10_label: lda r0,rl10_label ! not a valid register name anyway
+rl11_label: lda r0,rl11_label ! not a valid register name anyway
+rl12_label: lda r0,rl12_label ! not a valid register name anyway
+rl13_label: lda r0,rl13_label ! not a valid register name anyway
+rl14_label: lda r0,rl14_label ! not a valid register name anyway
+rl15_label: lda r0,rl15_label ! not a valid register name anyway
+rl16_label: lda r0,rl16_label ! not a valid register name anyway
+
+r00_label: lda r0,r00_label ! not a valid register name anyway
+
diff --git a/gas/testsuite/gas/z8k/ret-cc.d b/gas/testsuite/gas/z8k/ret-cc.d
index 86ccc1e68f95..6b8d0c317713 100644
--- a/gas/testsuite/gas/z8k/ret-cc.d
+++ b/gas/testsuite/gas/z8k/ret-cc.d
@@ -1,12 +1,12 @@
#as:
#objdump: -d
-#name: jmp cc
+#name: return on condition code
.*: +file format coff-z8k
Disassembly of section \.text:
-00000000 <\.text>:
+0*00000000 <\.text>:
0: 9e00 ret f
2: 9e01 ret lt
4: 9e02 ret le
@@ -37,7 +37,7 @@ Disassembly of section \.text:
36: 9e08 ret t
38: 9e08 ret t
-0000003a <dd>:
+0*0000003a <dd>:
3a: e8ff jr t,0x3a
3c: e8fe jr t,0x3a
3e: 8d07 nop
diff --git a/gas/testsuite/gas/z8k/z8k.exp b/gas/testsuite/gas/z8k/z8k.exp
index 60cbca5776ac..3f966328faef 100644
--- a/gas/testsuite/gas/z8k/z8k.exp
+++ b/gas/testsuite/gas/z8k/z8k.exp
@@ -45,4 +45,8 @@ if [istarget z8k-*-*] then {
# ctrl names test
run_dump_test "ctrl-names"
+
+# labels starting with register names test
+
+ run_dump_test "reglabel"
}
diff --git a/gas/testsuite/lib/gas-defs.exp b/gas/testsuite/lib/gas-defs.exp
index 827e22f70f07..eabd018add9e 100644
--- a/gas/testsuite/lib/gas-defs.exp
+++ b/gas/testsuite/lib/gas-defs.exp
@@ -1,5 +1,5 @@
# Copyright (C) 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-# 2004, 2005 Free Software Foundation, Inc.
+# 2004, 2005, 2007 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
@@ -53,12 +53,21 @@ proc all_ones { args } {
return 1
}
+# ${tool}_finish (gas_finish) will be called by runtest.exp. But
+# gas_finish should only be used with gas_start. We use gas_started
+# to tell gas_finish if gas_start has been called so that runtest.exp
+# can call gas_finish without closing the wrong fd.
+set gas_started 0
+
proc gas_start { prog as_opts } {
global AS
global ASFLAGS
global srcdir
global subdir
global spawn_id
+ global gas_started
+
+ set gas_started 1
verbose -log "Starting $AS $ASFLAGS $as_opts $prog" 2
catch {
@@ -71,9 +80,13 @@ proc gas_start { prog as_opts } {
proc gas_finish { } {
global spawn_id
+ global gas_started
- catch "close"
- catch "wait"
+ if { $gas_started == 1 } {
+ catch "close"
+ catch "wait"
+ set gas_started 0
+ }
}
proc want_no_output { testname } {
@@ -875,3 +888,25 @@ if ![string length [info proc prune_warnings]] {
return $text
}
}
+
+# run_list_test NAME OPTS (optional): TESTNAME
+#
+# Assemble the file "NAME.d" with command line options OPTS and
+# compare the assembler standard error output against thee regular
+# expressions given in the file "NAME.l". If TESTNAME is provided,
+# it will be used as the name of the test.
+
+proc run_list_test { name opts {testname {}} } {
+ global srcdir subdir
+ if { [string length $testname] == 0 } then {
+ set testname "[file tail $subdir] $name"
+ }
+ set file $srcdir/$subdir/$name
+ gas_run ${name}.s $opts ">&dump.out"
+ if { [regexp_diff "dump.out" "${file}.l"] } then {
+ fail $testname
+ verbose "output is [file_contents "dump.out"]" 2
+ return
+ }
+ pass $testname
+}
diff --git a/gas/testsuite/lib/gas-dg.exp b/gas/testsuite/lib/gas-dg.exp
index 92f7f3136c17..801b9b4e93c1 100644
--- a/gas/testsuite/lib/gas-dg.exp
+++ b/gas/testsuite/lib/gas-dg.exp
@@ -36,7 +36,8 @@ proc gas-dg-test { prog do_what tool_flags } {
regsub -all "//" $dir "/" dir
regsub -all "//" $prog "/" prog
if [string match "$dir/*" $prog] {
- regsub "$dir" $prog "" prog
+ # We use (?q) to treat $dir as a literal.
+ regsub "(?q)$dir" $prog "" prog
}
# FIXME: This should be gas_start but it doesn't set comp_output.
diff --git a/gas/write.c b/gas/write.c
index 9186717c4f85..29ea2843857f 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -1,6 +1,6 @@
/* write.c - emit .o file
Copyright 1986, 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
- 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -27,6 +27,7 @@
#include "obstack.h"
#include "output-file.h"
#include "dwarf2dbg.h"
+#include "libbfd.h"
#ifndef TC_ADJUST_RELOC_COUNT
#define TC_ADJUST_RELOC_COUNT(FIX, COUNT)
@@ -45,7 +46,6 @@
#ifndef TC_FORCE_RELOCATION_LOCAL
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
(!(FIX)->fx_pcrel \
- || (FIX)->fx_plt \
|| TC_FORCE_RELOCATION (FIX))
#endif
@@ -97,6 +97,16 @@
#define TC_FAKE_LABEL(NAME) (strcmp ((NAME), FAKE_LABEL_NAME) == 0)
#endif
+/* Positive values of TC_FX_SIZE_SLACK allow a target to define
+ fixups that far past the end of a frag. Having such fixups
+ is of course most most likely a bug in setting fx_size correctly.
+ A negative value disables the fixup check entirely, which is
+ appropriate for something like the Renesas / SuperH SH_COUNT
+ reloc. */
+#ifndef TC_FX_SIZE_SLACK
+#define TC_FX_SIZE_SLACK(FIX) 0
+#endif
+
/* Used to control final evaluation of expressions. */
int finalize_syms = 0;
@@ -107,9 +117,10 @@ symbolS *abs_section_sym;
/* Remember the value of dot when parsing expressions. */
addressT dot_value;
-void print_fixup (fixS *);
+/* Relocs generated by ".reloc" pseudo. */
+struct reloc_list* reloc_list;
-static void renumber_sections (bfd *, asection *, PTR);
+void print_fixup (fixS *);
/* We generally attach relocs to frag chains. However, after we have
chained these all together into a segment, any relocs we add after
@@ -121,22 +132,6 @@ static int n_fixups;
#define RELOC_ENUM enum bfd_reloc_code_real
-static fixS *fix_new_internal (fragS *, int where, int size,
- symbolS *add, symbolS *sub,
- offsetT offset, int pcrel,
- RELOC_ENUM r_type);
-static long fixup_segment (fixS *, segT);
-static relax_addressT relax_align (relax_addressT addr, int align);
-static fragS *chain_frchains_together_1 (segT, struct frchain *);
-static void chain_frchains_together (bfd *, segT, PTR);
-static void cvt_frag_to_fill (segT, fragS *);
-static void adjust_reloc_syms (bfd *, asection *, PTR);
-static void fix_segment (bfd *, asection *, PTR);
-static void write_relocs (bfd *, asection *, PTR);
-static void write_contents (bfd *, asection *, PTR);
-static void set_symtab (void);
-static void merge_data_into_text (void);
-
/* Create a fixS in obstack 'notes'. */
static fixS *
@@ -153,7 +148,7 @@ fix_new_internal (fragS *frag, /* Which frag? */
n_fixups++;
- fixP = (fixS *) obstack_alloc (&notes, sizeof (fixS));
+ fixP = obstack_alloc (&notes, sizeof (fixS));
fixP->fx_frag = frag;
fixP->fx_where = where;
@@ -169,13 +164,13 @@ fix_new_internal (fragS *frag, /* Which frag? */
fixP->fx_offset = offset;
fixP->fx_dot_value = dot_value;
fixP->fx_pcrel = pcrel;
- fixP->fx_plt = 0;
fixP->fx_r_type = r_type;
fixP->fx_im_disp = 0;
fixP->fx_pcrel_adjust = 0;
fixP->fx_bit_fixP = 0;
fixP->fx_addnumber = 0;
fixP->fx_tcbit = 0;
+ fixP->fx_tcbit2 = 0;
fixP->fx_done = 0;
fixP->fx_no_overflow = 0;
fixP->fx_signed = 0;
@@ -365,7 +360,7 @@ get_recorded_alignment (segT seg)
/* Reset the section indices after removing the gas created sections. */
static void
-renumber_sections (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, PTR countparg)
+renumber_sections (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *countparg)
{
int *countp = (int *) countparg;
@@ -379,7 +374,7 @@ chain_frchains_together_1 (segT section, struct frchain *frchp)
fragS dummy, *prev_frag = &dummy;
fixS fix_dummy, *prev_fix = &fix_dummy;
- for (; frchp && frchp->frch_seg == section; frchp = frchp->frch_next)
+ for (; frchp; frchp = frchp->frch_next)
{
prev_frag->fr_next = frchp->frch_root;
prev_frag = frchp->frch_last;
@@ -394,6 +389,7 @@ chain_frchains_together_1 (segT section, struct frchain *frchp)
}
}
assert (prev_frag->fr_type != 0);
+ assert (prev_frag != &dummy);
prev_frag->fr_next = 0;
return prev_frag;
}
@@ -401,7 +397,7 @@ chain_frchains_together_1 (segT section, struct frchain *frchp)
static void
chain_frchains_together (bfd *abfd ATTRIBUTE_UNUSED,
segT section,
- PTR xxx ATTRIBUTE_UNUSED)
+ void *xxx ATTRIBUTE_UNUSED)
{
segment_info_type *info;
@@ -529,10 +525,8 @@ relax_seg (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *xxx)
info->changed = 1;
}
-static void size_seg (bfd *, asection *, PTR);
-
static void
-size_seg (bfd *abfd, asection *sec, PTR xxx ATTRIBUTE_UNUSED)
+size_seg (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED)
{
flagword flags;
fragS *fragp;
@@ -562,11 +556,7 @@ size_seg (bfd *abfd, asection *sec, PTR xxx ATTRIBUTE_UNUSED)
if (size > 0 && ! seginfo->bss)
flags |= SEC_HAS_CONTENTS;
- /* @@ This is just an approximation. */
- if (seginfo && seginfo->fix_root)
- flags |= SEC_RELOC;
- else
- flags &= ~SEC_RELOC;
+ flags &= ~SEC_RELOC;
x = bfd_set_section_flags (abfd, sec, flags);
assert (x);
@@ -637,13 +627,93 @@ dump_section_relocs (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, FILE *stream)
#define EMIT_SECTION_SYMBOLS 1
#endif
+/* Resolve U.A.OFFSET_SYM and U.A.SYM fields of RELOC_LIST entries,
+ and check for validity. Convert RELOC_LIST from using U.A fields
+ to U.B fields. */
+static void
+resolve_reloc_expr_symbols (void)
+{
+ struct reloc_list *r;
+
+ for (r = reloc_list; r; r = r->next)
+ {
+ expressionS *symval;
+ symbolS *sym;
+ bfd_vma offset, addend;
+ asection *sec;
+ reloc_howto_type *howto;
+
+ resolve_symbol_value (r->u.a.offset_sym);
+ symval = symbol_get_value_expression (r->u.a.offset_sym);
+
+ offset = 0;
+ sym = NULL;
+ if (symval->X_op == O_constant)
+ sym = r->u.a.offset_sym;
+ else if (symval->X_op == O_symbol)
+ {
+ sym = symval->X_add_symbol;
+ offset = symval->X_add_number;
+ symval = symbol_get_value_expression (symval->X_add_symbol);
+ }
+ if (sym == NULL
+ || symval->X_op != O_constant
+ || (sec = S_GET_SEGMENT (sym)) == NULL
+ || !SEG_NORMAL (sec))
+ {
+ as_bad_where (r->file, r->line, _("invalid offset expression"));
+ sec = NULL;
+ }
+ else
+ offset += S_GET_VALUE (sym);
+
+ sym = NULL;
+ addend = r->u.a.addend;
+ if (r->u.a.sym != NULL)
+ {
+ resolve_symbol_value (r->u.a.sym);
+ symval = symbol_get_value_expression (r->u.a.sym);
+ if (symval->X_op == O_constant)
+ sym = r->u.a.sym;
+ else if (symval->X_op == O_symbol)
+ {
+ sym = symval->X_add_symbol;
+ addend += symval->X_add_number;
+ symval = symbol_get_value_expression (symval->X_add_symbol);
+ }
+ if (symval->X_op != O_constant)
+ {
+ as_bad_where (r->file, r->line, _("invalid reloc expression"));
+ sec = NULL;
+ }
+ else if (sym != NULL)
+ symbol_mark_used_in_reloc (sym);
+ }
+ if (sym == NULL)
+ {
+ if (abs_section_sym == NULL)
+ abs_section_sym = section_symbol (absolute_section);
+ sym = abs_section_sym;
+ }
+
+ howto = r->u.a.howto;
+
+ r->u.b.sec = sec;
+ r->u.b.s = symbol_get_bfdsym (sym);
+ r->u.b.r.sym_ptr_ptr = &r->u.b.s;
+ r->u.b.r.address = offset;
+ r->u.b.r.addend = addend;
+ r->u.b.r.howto = howto;
+ }
+}
+
/* This pass over fixups decides whether symbols can be replaced with
section symbols. */
static void
adjust_reloc_syms (bfd *abfd ATTRIBUTE_UNUSED,
asection *sec,
- PTR xxx ATTRIBUTE_UNUSED)
+ void *xxx ATTRIBUTE_UNUSED)
{
segment_info_type *seginfo = seg_info (sec);
fixS *fixp;
@@ -680,17 +750,21 @@ adjust_reloc_syms (bfd *abfd ATTRIBUTE_UNUSED,
/* If this symbol is equated to an undefined or common symbol,
convert the fixup to being against that symbol. */
- if (symbol_equated_reloc_p (sym)
- || S_IS_WEAKREFR (sym))
+ while (symbol_equated_reloc_p (sym)
+ || S_IS_WEAKREFR (sym))
{
+ symbolS *newsym = symbol_get_value_expression (sym)->X_add_symbol;
+ if (sym == newsym)
+ break;
fixp->fx_offset += symbol_get_value_expression (sym)->X_add_number;
- sym = symbol_get_value_expression (sym)->X_add_symbol;
- fixp->fx_addsy = sym;
+ fixp->fx_addsy = newsym;
+ sym = newsym;
}
if (symbol_mri_common_p (sym))
{
- /* These symbols are handled specially in fixup_segment. */
+ fixp->fx_offset += S_GET_VALUE (sym);
+ fixp->fx_addsy = symbol_get_value_expression (sym)->X_add_symbol;
continue;
}
@@ -719,14 +793,14 @@ adjust_reloc_syms (bfd *abfd ATTRIBUTE_UNUSED,
if (bfd_is_abs_section (symsec))
{
/* The fixup_segment routine normally will not use this
- symbol in a relocation. */
+ symbol in a relocation. */
continue;
}
/* Don't try to reduce relocs which refer to non-local symbols
- in .linkonce sections. It can lead to confusion when a
- debugging section refers to a .linkonce section. I hope
- this will always be correct. */
+ in .linkonce sections. It can lead to confusion when a
+ debugging section refers to a .linkonce section. I hope
+ this will always be correct. */
if (symsec != sec && ! S_IS_LOCAL (sym))
{
if ((symsec->flags & SEC_LINK_ONCE) != 0
@@ -763,10 +837,241 @@ adjust_reloc_syms (bfd *abfd ATTRIBUTE_UNUSED,
dump_section_relocs (abfd, sec, stderr);
}
+/* fixup_segment()
+
+ Go through all the fixS's in a segment and see which ones can be
+ handled now. (These consist of fixS where we have since discovered
+ the value of a symbol, or the address of the frag involved.)
+ For each one, call md_apply_fix to put the fix into the frag data.
+
+ Result is a count of how many relocation structs will be needed to
+ handle the remaining fixS's that we couldn't completely handle here.
+ These will be output later by emit_relocations(). */
+
+static long
+fixup_segment (fixS *fixP, segT this_segment)
+{
+ long seg_reloc_count = 0;
+ valueT add_number;
+ fragS *fragP;
+ segT add_symbol_segment = absolute_section;
+
+ if (fixP != NULL && abs_section_sym == NULL)
+ abs_section_sym = section_symbol (absolute_section);
+
+ /* If the linker is doing the relaxing, we must not do any fixups.
+
+ Well, strictly speaking that's not true -- we could do any that
+ are PC-relative and don't cross regions that could change size.
+ And for the i960 we might be able to turn callx/callj into bal
+ anyways in cases where we know the maximum displacement. */
+ if (linkrelax && TC_LINKRELAX_FIXUP (this_segment))
+ {
+ for (; fixP; fixP = fixP->fx_next)
+ if (!fixP->fx_done)
+ {
+ if (fixP->fx_addsy == NULL)
+ {
+ /* There was no symbol required by this relocation.
+ However, BFD doesn't really handle relocations
+ without symbols well. So fake up a local symbol in
+ the absolute section. */
+ fixP->fx_addsy = abs_section_sym;
+ }
+ symbol_mark_used_in_reloc (fixP->fx_addsy);
+ if (fixP->fx_subsy != NULL)
+ symbol_mark_used_in_reloc (fixP->fx_subsy);
+ seg_reloc_count++;
+ }
+ TC_ADJUST_RELOC_COUNT (fixP, seg_reloc_count);
+ return seg_reloc_count;
+ }
+
+ for (; fixP; fixP = fixP->fx_next)
+ {
+#ifdef DEBUG5
+ fprintf (stderr, "\nprocessing fixup:\n");
+ print_fixup (fixP);
+#endif
+
+ fragP = fixP->fx_frag;
+ know (fragP);
+#ifdef TC_VALIDATE_FIX
+ TC_VALIDATE_FIX (fixP, this_segment, skip);
+#endif
+ add_number = fixP->fx_offset;
+
+ if (fixP->fx_addsy != NULL)
+ add_symbol_segment = S_GET_SEGMENT (fixP->fx_addsy);
+
+ if (fixP->fx_subsy != NULL)
+ {
+ segT sub_symbol_segment;
+ resolve_symbol_value (fixP->fx_subsy);
+ sub_symbol_segment = S_GET_SEGMENT (fixP->fx_subsy);
+ if (fixP->fx_addsy != NULL
+ && sub_symbol_segment == add_symbol_segment
+ && !TC_FORCE_RELOCATION_SUB_SAME (fixP, add_symbol_segment))
+ {
+ add_number += S_GET_VALUE (fixP->fx_addsy);
+ add_number -= S_GET_VALUE (fixP->fx_subsy);
+ fixP->fx_offset = add_number;
+ fixP->fx_addsy = NULL;
+ fixP->fx_subsy = NULL;
+#ifdef TC_M68K
+ /* See the comment below about 68k weirdness. */
+ fixP->fx_pcrel = 0;
+#endif
+ }
+ else if (sub_symbol_segment == absolute_section
+ && !TC_FORCE_RELOCATION_SUB_ABS (fixP))
+ {
+ add_number -= S_GET_VALUE (fixP->fx_subsy);
+ fixP->fx_offset = add_number;
+ fixP->fx_subsy = NULL;
+ }
+ else if (sub_symbol_segment == this_segment
+ && !TC_FORCE_RELOCATION_SUB_LOCAL (fixP))
+ {
+ add_number -= S_GET_VALUE (fixP->fx_subsy);
+ fixP->fx_offset = (add_number + fixP->fx_dot_value
+ + fixP->fx_frag->fr_address);
+
+ /* Make it pc-relative. If the back-end code has not
+ selected a pc-relative reloc, cancel the adjustment
+ we do later on all pc-relative relocs. */
+ if (0
+#ifdef TC_M68K
+ /* Do this for m68k even if it's already described
+ as pc-relative. On the m68k, an operand of
+ "pc@(foo-.-2)" should address "foo" in a
+ pc-relative mode. */
+ || 1
+#endif
+ || !fixP->fx_pcrel)
+ add_number += MD_PCREL_FROM_SECTION (fixP, this_segment);
+ fixP->fx_subsy = NULL;
+ fixP->fx_pcrel = 1;
+ }
+ else if (!TC_VALIDATE_FIX_SUB (fixP))
+ {
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("can't resolve `%s' {%s section} - `%s' {%s section}"),
+ fixP->fx_addsy ? S_GET_NAME (fixP->fx_addsy) : "0",
+ segment_name (add_symbol_segment),
+ S_GET_NAME (fixP->fx_subsy),
+ segment_name (sub_symbol_segment));
+ }
+ }
+
+ if (fixP->fx_addsy)
+ {
+ if (add_symbol_segment == this_segment
+ && !TC_FORCE_RELOCATION_LOCAL (fixP))
+ {
+ /* This fixup was made when the symbol's segment was
+ SEG_UNKNOWN, but it is now in the local segment.
+ So we know how to do the address without relocation. */
+ add_number += S_GET_VALUE (fixP->fx_addsy);
+ fixP->fx_offset = add_number;
+ if (fixP->fx_pcrel)
+ add_number -= MD_PCREL_FROM_SECTION (fixP, this_segment);
+ fixP->fx_addsy = NULL;
+ fixP->fx_pcrel = 0;
+ }
+ else if (add_symbol_segment == absolute_section
+ && !TC_FORCE_RELOCATION_ABS (fixP))
+ {
+ add_number += S_GET_VALUE (fixP->fx_addsy);
+ fixP->fx_offset = add_number;
+ fixP->fx_addsy = NULL;
+ }
+ else if (add_symbol_segment != undefined_section
+ && ! bfd_is_com_section (add_symbol_segment)
+ && MD_APPLY_SYM_VALUE (fixP))
+ add_number += S_GET_VALUE (fixP->fx_addsy);
+ }
+
+ if (fixP->fx_pcrel)
+ {
+ add_number -= MD_PCREL_FROM_SECTION (fixP, this_segment);
+ if (!fixP->fx_done && fixP->fx_addsy == NULL)
+ {
+ /* There was no symbol required by this relocation.
+ However, BFD doesn't really handle relocations
+ without symbols well. So fake up a local symbol in
+ the absolute section. */
+ fixP->fx_addsy = abs_section_sym;
+ }
+ }
+
+ if (!fixP->fx_done)
+ md_apply_fix (fixP, &add_number, this_segment);
+
+ if (!fixP->fx_done)
+ {
+ ++seg_reloc_count;
+ if (fixP->fx_addsy == NULL)
+ fixP->fx_addsy = abs_section_sym;
+ symbol_mark_used_in_reloc (fixP->fx_addsy);
+ if (fixP->fx_subsy != NULL)
+ symbol_mark_used_in_reloc (fixP->fx_subsy);
+ }
+
+ if (!fixP->fx_bit_fixP && !fixP->fx_no_overflow && fixP->fx_size != 0)
+ {
+ if (fixP->fx_size < sizeof (valueT))
+ {
+ valueT mask;
+
+ mask = 0;
+ mask--; /* Set all bits to one. */
+ mask <<= fixP->fx_size * 8 - (fixP->fx_signed ? 1 : 0);
+ if ((add_number & mask) != 0 && (add_number & mask) != mask)
+ {
+ char buf[50], buf2[50];
+ sprint_value (buf, fragP->fr_address + fixP->fx_where);
+ if (add_number > 1000)
+ sprint_value (buf2, add_number);
+ else
+ sprintf (buf2, "%ld", (long) add_number);
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("value of %s too large for field of %d bytes at %s"),
+ buf2, fixP->fx_size, buf);
+ } /* Generic error checking. */
+ }
+#ifdef WARN_SIGNED_OVERFLOW_WORD
+ /* Warn if a .word value is too large when treated as a signed
+ number. We already know it is not too negative. This is to
+ catch over-large switches generated by gcc on the 68k. */
+ if (!flag_signed_overflow_ok
+ && fixP->fx_size == 2
+ && add_number > 0x7fff)
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("signed .word overflow; switch may be too large; %ld at 0x%lx"),
+ (long) add_number,
+ (long) (fragP->fr_address + fixP->fx_where));
+#endif
+ } /* Not a bit fix. */
+
+#ifdef TC_VALIDATE_FIX
+ skip: ATTRIBUTE_UNUSED_LABEL
+ ;
+#endif
+#ifdef DEBUG5
+ fprintf (stderr, "result:\n");
+ print_fixup (fixP);
+#endif
+ } /* For each fixS in this segment. */
+
+ TC_ADJUST_RELOC_COUNT (fixP, seg_reloc_count);
+ return seg_reloc_count;
+}
+
static void
fix_segment (bfd *abfd ATTRIBUTE_UNUSED,
asection *sec,
- PTR xxx ATTRIBUTE_UNUSED)
+ void *xxx ATTRIBUTE_UNUSED)
{
segment_info_type *seginfo = seg_info (sec);
@@ -774,14 +1079,40 @@ fix_segment (bfd *abfd ATTRIBUTE_UNUSED,
}
static void
-write_relocs (bfd *abfd, asection *sec, PTR xxx ATTRIBUTE_UNUSED)
+install_reloc (asection *sec, arelent *reloc, fragS *fragp,
+ char *file, unsigned int line)
+{
+ char *err;
+ bfd_reloc_status_type s;
+
+ s = bfd_install_relocation (stdoutput, reloc,
+ fragp->fr_literal, fragp->fr_address,
+ sec, &err);
+ switch (s)
+ {
+ case bfd_reloc_ok:
+ break;
+ case bfd_reloc_overflow:
+ as_bad_where (file, line, _("relocation overflow"));
+ break;
+ case bfd_reloc_outofrange:
+ as_bad_where (file, line, _("relocation out of range"));
+ break;
+ default:
+ as_fatal (_("%s:%u: bad return from bfd_install_relocation: %x"),
+ file, line, s);
+ }
+}
+
+static void
+write_relocs (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED)
{
segment_info_type *seginfo = seg_info (sec);
unsigned int i;
unsigned int n;
+ struct reloc_list *my_reloc_list, **rp, *r;
arelent **relocs;
fixS *fixp;
- char *err;
/* If seginfo is NULL, we did not create this section; don't do
anything with it. */
@@ -790,153 +1121,73 @@ write_relocs (bfd *abfd, asection *sec, PTR xxx ATTRIBUTE_UNUSED)
n = 0;
for (fixp = seginfo->fix_root; fixp; fixp = fixp->fx_next)
- n++;
+ if (!fixp->fx_done)
+ n++;
-#ifndef RELOC_EXPANSION_POSSIBLE
- /* Set up reloc information as well. */
- relocs = (arelent **) xcalloc (n, sizeof (arelent *));
+#ifdef RELOC_EXPANSION_POSSIBLE
+ n *= MAX_RELOC_EXPANSION;
+#endif
- i = 0;
- for (fixp = seginfo->fix_root; fixp != (fixS *) NULL; fixp = fixp->fx_next)
+ /* Extract relocs for this section from reloc_list. */
+ rp = &reloc_list;
+ my_reloc_list = NULL;
+ while ((r = *rp) != NULL)
{
- arelent *reloc;
- bfd_reloc_status_type s;
- symbolS *sym;
-
- if (fixp->fx_done)
- {
- n--;
- continue;
- }
-
- /* If this is an undefined symbol which was equated to another
- symbol, then generate the reloc against the latter symbol
- rather than the former. */
- sym = fixp->fx_addsy;
- while (symbol_equated_reloc_p (sym))
- {
- symbolS *n;
-
- /* We must avoid looping, as that can occur with a badly
- written program. */
- n = symbol_get_value_expression (sym)->X_add_symbol;
- if (n == sym)
- break;
- fixp->fx_offset += symbol_get_value_expression (sym)->X_add_number;
- sym = n;
- }
- fixp->fx_addsy = sym;
-
- reloc = tc_gen_reloc (sec, fixp);
- if (!reloc)
+ if (r->u.b.sec == sec)
{
- n--;
- continue;
+ *rp = r->next;
+ r->next = my_reloc_list;
+ my_reloc_list = r;
+ n++;
}
-
- /*
- This test is triggered inappropriately for the SH:
- if (fixp->fx_where + fixp->fx_size
- > fixp->fx_frag->fr_fix + fixp->fx_frag->fr_offset)
- abort ();
- */
-
- s = bfd_install_relocation (stdoutput, reloc,
- fixp->fx_frag->fr_literal,
- fixp->fx_frag->fr_address,
- sec, &err);
- switch (s)
- {
- case bfd_reloc_ok:
- break;
- case bfd_reloc_overflow:
- as_bad_where (fixp->fx_file, fixp->fx_line,
- _("relocation overflow"));
- break;
- case bfd_reloc_outofrange:
- as_bad_where (fixp->fx_file, fixp->fx_line,
- _("relocation out of range"));
- break;
- default:
- as_fatal (_("%s:%u: bad return from bfd_install_relocation: %x"),
- fixp->fx_file, fixp->fx_line, s);
- }
- relocs[i++] = reloc;
+ else
+ rp = &r->next;
}
-#else
- n = n * MAX_RELOC_EXPANSION;
- /* Set up reloc information as well. */
- relocs = (arelent **) xcalloc (n, sizeof (arelent *));
+
+ relocs = xcalloc (n, sizeof (arelent *));
i = 0;
for (fixp = seginfo->fix_root; fixp != (fixS *) NULL; fixp = fixp->fx_next)
{
- arelent **reloc;
- bfd_reloc_status_type s;
- symbolS *sym;
int j;
+ int fx_size, slack;
+ offsetT loc;
if (fixp->fx_done)
- {
- n--;
- continue;
- }
+ continue;
+
+ fx_size = fixp->fx_size;
+ slack = TC_FX_SIZE_SLACK (fixp);
+ if (slack > 0)
+ fx_size = fx_size > slack ? fx_size - slack : 0;
+ loc = fixp->fx_where + fx_size;
+ if (slack >= 0 && loc > fixp->fx_frag->fr_fix)
+ as_bad_where (fixp->fx_file, fixp->fx_line,
+ _("internal error: fixup not contained within frag"));
- /* If this is an undefined symbol which was equated to another
- symbol, then generate the reloc against the latter symbol
- rather than the former. */
- sym = fixp->fx_addsy;
- while (symbol_equated_reloc_p (sym))
- {
- symbolS *n;
-
- /* We must avoid looping, as that can occur with a badly
- written program. */
- n = symbol_get_value_expression (sym)->X_add_symbol;
- if (n == sym)
- break;
- fixp->fx_offset += symbol_get_value_expression (sym)->X_add_number;
- sym = n;
- }
- fixp->fx_addsy = sym;
+#ifndef RELOC_EXPANSION_POSSIBLE
+ {
+ arelent *reloc = tc_gen_reloc (sec, fixp);
- reloc = tc_gen_reloc (sec, fixp);
+ if (!reloc)
+ continue;
+ relocs[i++] = reloc;
+ j = 1;
+ }
+#else
+ {
+ arelent **reloc = tc_gen_reloc (sec, fixp);
- for (j = 0; reloc[j]; j++)
- {
+ for (j = 0; reloc[j]; j++)
relocs[i++] = reloc[j];
- assert (i <= n);
- }
- if (fixp->fx_where + fixp->fx_size
- > fixp->fx_frag->fr_fix + fixp->fx_frag->fr_offset)
- as_bad_where (fixp->fx_file, fixp->fx_line,
- _("internal error: fixup not contained within frag"));
- for (j = 0; reloc[j]; j++)
- {
- s = bfd_install_relocation (stdoutput, reloc[j],
- fixp->fx_frag->fr_literal,
- fixp->fx_frag->fr_address,
- sec, &err);
- switch (s)
- {
- case bfd_reloc_ok:
- break;
- case bfd_reloc_overflow:
- as_bad_where (fixp->fx_file, fixp->fx_line,
- _("relocation overflow"));
- break;
- case bfd_reloc_outofrange:
- as_bad_where (fixp->fx_file, fixp->fx_line,
- _("relocation out of range"));
- break;
- default:
- as_fatal (_("%s:%u: bad return from bfd_install_relocation: %x"),
- fixp->fx_file, fixp->fx_line, s);
- }
- }
+ }
+#endif
+
+ for ( ; j != 0; --j)
+ install_reloc (sec, relocs[i - j], fixp->fx_frag,
+ fixp->fx_file, fixp->fx_line);
}
n = i;
-#endif
#ifdef DEBUG4
{
@@ -956,12 +1207,30 @@ write_relocs (bfd *abfd, asection *sec, PTR xxx ATTRIBUTE_UNUSED)
}
#endif
+ for (r = my_reloc_list; r != NULL; r = r->next)
+ {
+ fragS *f;
+ for (f = seginfo->frchainP->frch_root; f; f = f->fr_next)
+ if (f->fr_address <= r->u.b.r.address
+ && r->u.b.r.address < f->fr_address + f->fr_fix)
+ break;
+ if (f == NULL)
+ as_bad_where (r->file, r->line,
+ _("reloc not within (fixed part of) section"));
+ else
+ {
+ relocs[n++] = &r->u.b.r;
+ install_reloc (sec, &r->u.b.r, f, r->file, r->line);
+ }
+ }
+
if (n)
- bfd_set_reloc (stdoutput, sec, relocs, n);
- else
- bfd_set_section_flags (abfd, sec,
- (bfd_get_section_flags (abfd, sec)
- & (flagword) ~SEC_RELOC));
+ {
+ flagword flags = bfd_get_section_flags (abfd, sec);
+ flags |= SEC_RELOC;
+ bfd_set_section_flags (abfd, sec, flags);
+ bfd_set_reloc (stdoutput, sec, relocs, n);
+ }
#ifdef SET_SECTION_RELOCS
SET_SECTION_RELOCS (sec, relocs, n);
@@ -987,7 +1256,7 @@ write_relocs (bfd *abfd, asection *sec, PTR xxx ATTRIBUTE_UNUSED)
static void
write_contents (bfd *abfd ATTRIBUTE_UNUSED,
asection *sec,
- PTR xxx ATTRIBUTE_UNUSED)
+ void *xxx ATTRIBUTE_UNUSED)
{
segment_info_type *seginfo = seg_info (sec);
addressT offset = 0;
@@ -1014,11 +1283,8 @@ write_contents (bfd *abfd ATTRIBUTE_UNUSED,
f->fr_literal, (file_ptr) offset,
(bfd_size_type) f->fr_fix);
if (!x)
- {
- bfd_perror (stdoutput->filename);
- as_perror (_("FATAL: Can't write %s"), stdoutput->filename);
- exit (EXIT_FAILURE);
- }
+ as_fatal (_("can't write %s: %s"), stdoutput->filename,
+ bfd_errmsg (bfd_get_error ()));
offset += f->fr_fix;
}
fill_literal = f->fr_literal + f->fr_fix;
@@ -1038,12 +1304,8 @@ write_contents (bfd *abfd ATTRIBUTE_UNUSED,
(file_ptr) offset,
(bfd_size_type) fill_size);
if (!x)
- {
- bfd_perror (stdoutput->filename);
- as_perror (_("FATAL: Can't write %s"),
- stdoutput->filename);
- exit (EXIT_FAILURE);
- }
+ as_fatal (_("can't write %s: %s"), stdoutput->filename,
+ bfd_errmsg (bfd_get_error ()));
offset += fill_size;
}
}
@@ -1097,7 +1359,6 @@ set_symtab (void)
asymbol **asympp;
symbolS *symp;
bfd_boolean result;
- extern PTR bfd_alloc (bfd *, bfd_size_type);
/* Count symbols. We can't rely on a count made by the loop in
write_object_file, because *_frob_file may add a new symbol or
@@ -1111,7 +1372,7 @@ set_symtab (void)
int i;
bfd_size_type amt = (bfd_size_type) nsyms * sizeof (asymbol *);
- asympp = (asymbol **) bfd_alloc (stdoutput, amt);
+ asympp = bfd_alloc (stdoutput, amt);
symp = symbol_rootP;
for (i = 0; i < nsyms; i++, symp = symbol_next (symp))
{
@@ -1138,8 +1399,7 @@ set_symtab (void)
of the section. This allows proper nop-filling at the end of
code-bearing sections. */
#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) \
- (!(FRCHAIN)->frch_next || (FRCHAIN)->frch_next->frch_seg != (SEG) \
- ? get_recorded_alignment (SEG) : 0)
+ (!(FRCHAIN)->frch_next ? get_recorded_alignment (SEG) : 0)
#else
#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 0
#endif
@@ -1149,48 +1409,58 @@ void
subsegs_finish (void)
{
struct frchain *frchainP;
+ asection *s;
- for (frchainP = frchain_root; frchainP; frchainP = frchainP->frch_next)
+ for (s = stdoutput->sections; s; s = s->next)
{
- int alignment = 0;
-
- subseg_set (frchainP->frch_seg, frchainP->frch_subseg);
+ segment_info_type *seginfo = seg_info (s);
+ if (!seginfo)
+ continue;
- /* This now gets called even if we had errors. In that case,
- any alignment is meaningless, and, moreover, will look weird
- if we are generating a listing. */
- if (!had_errors ())
+ for (frchainP = seginfo->frchainP;
+ frchainP != NULL;
+ frchainP = frchainP->frch_next)
{
- alignment = SUB_SEGMENT_ALIGN (now_seg, frchainP);
- if ((bfd_get_section_flags (now_seg->owner, now_seg) & SEC_MERGE)
- && now_seg->entsize)
- {
- unsigned int entsize = now_seg->entsize;
- int entalign = 0;
+ int alignment = 0;
+
+ subseg_set (s, frchainP->frch_subseg);
- while ((entsize & 1) == 0)
+ /* This now gets called even if we had errors. In that case,
+ any alignment is meaningless, and, moreover, will look weird
+ if we are generating a listing. */
+ if (!had_errors ())
+ {
+ alignment = SUB_SEGMENT_ALIGN (now_seg, frchainP);
+ if ((bfd_get_section_flags (now_seg->owner, now_seg) & SEC_MERGE)
+ && now_seg->entsize)
{
- ++entalign;
- entsize >>= 1;
+ unsigned int entsize = now_seg->entsize;
+ int entalign = 0;
+
+ while ((entsize & 1) == 0)
+ {
+ ++entalign;
+ entsize >>= 1;
+ }
+ if (entalign > alignment)
+ alignment = entalign;
}
- if (entalign > alignment)
- alignment = entalign;
}
- }
- if (subseg_text_p (now_seg))
- frag_align_code (alignment, 0);
- else
- frag_align (alignment, 0, 0);
+ if (subseg_text_p (now_seg))
+ frag_align_code (alignment, 0);
+ else
+ frag_align (alignment, 0, 0);
- /* frag_align will have left a new frag.
- Use this last frag for an empty ".fill".
+ /* frag_align will have left a new frag.
+ Use this last frag for an empty ".fill".
- For this segment ...
- Create a last frag. Do not leave a "being filled in frag". */
- frag_wane (frag_now);
- frag_now->fr_fix = 0;
- know (frag_now->fr_next == NULL);
+ For this segment ...
+ Create a last frag. Do not leave a "being filled in frag". */
+ frag_wane (frag_now);
+ frag_now->fr_fix = 0;
+ know (frag_now->fr_next == NULL);
+ }
}
}
@@ -1411,6 +1681,7 @@ write_object_file (void)
resolve_symbol_value (symp);
}
resolve_local_symbol_values ();
+ resolve_reloc_expr_symbols ();
PROGRESS (1);
@@ -1478,7 +1749,7 @@ write_object_file (void)
resolve_symbol_value (symp);
/* Skip symbols which were equated to undefined or common
- symbols. */
+ symbols. */
if (symbol_equated_reloc_p (symp)
|| S_IS_WEAKREFR (symp))
{
@@ -1807,23 +2078,48 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
/* Do relax(). */
{
unsigned long max_iterations;
- offsetT stretch; /* May be any size, 0 or negative. */
- /* Cumulative number of addresses we have relaxed this pass.
- We may have relaxed more than one address. */
- int stretched; /* Have we stretched on this pass? */
- /* This is 'cuz stretch may be zero, when, in fact some piece of code
- grew, and another shrank. If a branch instruction doesn't fit anymore,
- we could be scrod. */
+
+ /* Cumulative address adjustment. */
+ offsetT stretch;
+
+ /* Have we made any adjustment this pass? We can't just test
+ stretch because one piece of code may have grown and another
+ shrank. */
+ int stretched;
+
+ /* Most horrible, but gcc may give us some exception data that
+ is impossible to assemble, of the form
+
+ .align 4
+ .byte 0, 0
+ .uleb128 end - start
+ start:
+ .space 128*128 - 1
+ .align 4
+ end:
+
+ If the leb128 is two bytes in size, then end-start is 128*128,
+ which requires a three byte leb128. If the leb128 is three
+ bytes in size, then end-start is 128*128-1, which requires a
+ two byte leb128. We work around this dilemma by inserting
+ an extra 4 bytes of alignment just after the .align. This
+ works because the data after the align is accessed relative to
+ the end label.
+
+ This counter is used in a tiny state machine to detect
+ whether a leb128 followed by an align is impossible to
+ relax. */
+ int rs_leb128_fudge = 0;
/* We want to prevent going into an infinite loop where one frag grows
depending upon the location of a symbol which is in turn moved by
the growing frag. eg:
- foo = .
- .org foo+16
- foo = .
+ foo = .
+ .org foo+16
+ foo = .
- So we dictate that this algorithm can be at most O2. */
+ So we dictate that this algorithm can be at most O2. */
max_iterations = frag_count * frag_count;
/* Check for overflow. */
if (max_iterations < frag_count)
@@ -1936,6 +2232,49 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
}
growth = newoff - oldoff;
+
+ /* If this align happens to follow a leb128 and
+ we have determined that the leb128 is bouncing
+ in size, then break the cycle by inserting an
+ extra alignment. */
+ if (growth < 0
+ && (rs_leb128_fudge & 16) != 0
+ && (rs_leb128_fudge & 15) >= 2)
+ {
+ segment_info_type *seginfo = seg_info (segment);
+ struct obstack *ob = &seginfo->frchainP->frch_obstack;
+ struct frag *newf;
+
+ newf = frag_alloc (ob);
+ obstack_blank_fast (ob, fragP->fr_var);
+ obstack_finish (ob);
+ memcpy (newf, fragP, SIZEOF_STRUCT_FRAG);
+ memcpy (newf->fr_literal,
+ fragP->fr_literal + fragP->fr_fix,
+ fragP->fr_var);
+ newf->fr_type = rs_fill;
+ newf->fr_fix = 0;
+ newf->fr_offset = (((offsetT) 1 << fragP->fr_offset)
+ / fragP->fr_var);
+ if (newf->fr_offset * newf->fr_var
+ != (offsetT) 1 << fragP->fr_offset)
+ {
+ newf->fr_offset = (offsetT) 1 << fragP->fr_offset;
+ newf->fr_var = 1;
+ }
+ /* Include growth of new frag, because rs_fill
+ frags don't normally grow. */
+ growth += newf->fr_offset * newf->fr_var;
+ /* The new frag address is newoff. Adjust this
+ for the amount we'll add when we process the
+ new frag. */
+ newf->fr_address = newoff - stretch - growth;
+ newf->relax_marker ^= 1;
+ fragP->fr_next = newf;
+#ifdef DEBUG
+ as_warn (_("padding added"));
+#endif
+ }
}
break;
@@ -1946,11 +2285,11 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
if (symbolP)
{
- /* Convert from an actual address to an octet offset
- into the section. Here it is assumed that the
- section's VMA is zero, and can omit subtracting it
- from the symbol's value to get the address offset. */
- know (S_GET_SEGMENT (symbolP)->vma == 0);
+ /* Convert from an actual address to an octet offset
+ into the section. Here it is assumed that the
+ section's VMA is zero, and can omit subtracting it
+ from the symbol's value to get the address offset. */
+ know (S_GET_SEGMENT (symbolP)->vma == 0);
target += S_GET_VALUE (symbolP) * OCTETS_PER_BYTE;
}
@@ -1986,7 +2325,7 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
_("attempt to move .org backwards"));
/* We've issued an error message. Change the
- frag to avoid cascading errors. */
+ frag to avoid cascading errors. */
fragP->fr_type = rs_align;
fragP->fr_subtype = 0;
fragP->fr_offset = 0;
@@ -2075,8 +2414,23 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
{
stretch += growth;
stretched = 1;
+ if (fragP->fr_type == rs_leb128)
+ rs_leb128_fudge += 16;
+ else if (fragP->fr_type == rs_align
+ && (rs_leb128_fudge & 16) != 0
+ && stretch == 0)
+ rs_leb128_fudge += 16;
+ else
+ rs_leb128_fudge = 0;
}
}
+
+ if (stretch == 0
+ && (rs_leb128_fudge & 16) == 0
+ && (rs_leb128_fudge & -16) != 0)
+ rs_leb128_fudge += 1;
+ else
+ rs_leb128_fudge = 0;
}
/* Until nothing further to relax. */
while (stretched && -- max_iterations);
@@ -2095,246 +2449,6 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
return ret;
}
-/* fixup_segment()
-
- Go through all the fixS's in a segment and see which ones can be
- handled now. (These consist of fixS where we have since discovered
- the value of a symbol, or the address of the frag involved.)
- For each one, call md_apply_fix to put the fix into the frag data.
-
- Result is a count of how many relocation structs will be needed to
- handle the remaining fixS's that we couldn't completely handle here.
- These will be output later by emit_relocations(). */
-
-static long
-fixup_segment (fixS *fixP, segT this_segment)
-{
- long seg_reloc_count = 0;
- valueT add_number;
- fragS *fragP;
- segT add_symbol_segment = absolute_section;
-
- if (fixP != NULL && abs_section_sym == NULL)
- abs_section_sym = section_symbol (absolute_section);
-
- /* If the linker is doing the relaxing, we must not do any fixups.
-
- Well, strictly speaking that's not true -- we could do any that
- are PC-relative and don't cross regions that could change size.
- And for the i960 we might be able to turn callx/callj into bal
- anyways in cases where we know the maximum displacement. */
- if (linkrelax && TC_LINKRELAX_FIXUP (this_segment))
- {
- for (; fixP; fixP = fixP->fx_next)
- if (!fixP->fx_done)
- {
- if (fixP->fx_addsy == NULL)
- {
- /* There was no symbol required by this relocation.
- However, BFD doesn't really handle relocations
- without symbols well. So fake up a local symbol in
- the absolute section. */
- fixP->fx_addsy = abs_section_sym;
- }
- symbol_mark_used_in_reloc (fixP->fx_addsy);
- if (fixP->fx_subsy != NULL)
- symbol_mark_used_in_reloc (fixP->fx_subsy);
- seg_reloc_count++;
- }
- TC_ADJUST_RELOC_COUNT (fixP, seg_reloc_count);
- return seg_reloc_count;
- }
-
- for (; fixP; fixP = fixP->fx_next)
- {
-#ifdef DEBUG5
- fprintf (stderr, "\nprocessing fixup:\n");
- print_fixup (fixP);
-#endif
-
- fragP = fixP->fx_frag;
- know (fragP);
-#ifdef TC_VALIDATE_FIX
- TC_VALIDATE_FIX (fixP, this_segment, skip);
-#endif
- add_number = fixP->fx_offset;
-
- if (fixP->fx_addsy != NULL
- && symbol_mri_common_p (fixP->fx_addsy))
- {
- add_number += S_GET_VALUE (fixP->fx_addsy);
- fixP->fx_offset = add_number;
- fixP->fx_addsy
- = symbol_get_value_expression (fixP->fx_addsy)->X_add_symbol;
- }
-
- if (fixP->fx_addsy != NULL)
- add_symbol_segment = S_GET_SEGMENT (fixP->fx_addsy);
-
- if (fixP->fx_subsy != NULL)
- {
- segT sub_symbol_segment;
- resolve_symbol_value (fixP->fx_subsy);
- sub_symbol_segment = S_GET_SEGMENT (fixP->fx_subsy);
- if (fixP->fx_addsy != NULL
- && sub_symbol_segment == add_symbol_segment
- && !TC_FORCE_RELOCATION_SUB_SAME (fixP, add_symbol_segment))
- {
- add_number += S_GET_VALUE (fixP->fx_addsy);
- add_number -= S_GET_VALUE (fixP->fx_subsy);
- fixP->fx_offset = add_number;
- fixP->fx_addsy = NULL;
- fixP->fx_subsy = NULL;
-#ifdef TC_M68K
- /* See the comment below about 68k weirdness. */
- fixP->fx_pcrel = 0;
-#endif
- }
- else if (sub_symbol_segment == absolute_section
- && !TC_FORCE_RELOCATION_SUB_ABS (fixP))
- {
- add_number -= S_GET_VALUE (fixP->fx_subsy);
- fixP->fx_offset = add_number;
- fixP->fx_subsy = NULL;
- }
- else if (sub_symbol_segment == this_segment
- && !TC_FORCE_RELOCATION_SUB_LOCAL (fixP))
- {
- add_number -= S_GET_VALUE (fixP->fx_subsy);
- fixP->fx_offset = (add_number + fixP->fx_dot_value
- + fixP->fx_frag->fr_address);
-
- /* Make it pc-relative. If the back-end code has not
- selected a pc-relative reloc, cancel the adjustment
- we do later on all pc-relative relocs. */
- if (0
-#ifdef TC_M68K
- /* Do this for m68k even if it's already described
- as pc-relative. On the m68k, an operand of
- "pc@(foo-.-2)" should address "foo" in a
- pc-relative mode. */
- || 1
-#endif
- || !fixP->fx_pcrel)
- add_number += MD_PCREL_FROM_SECTION (fixP, this_segment);
- fixP->fx_subsy = NULL;
- fixP->fx_pcrel = 1;
- }
- else if (!TC_VALIDATE_FIX_SUB (fixP))
- {
- as_bad_where (fixP->fx_file, fixP->fx_line,
- _("can't resolve `%s' {%s section} - `%s' {%s section}"),
- fixP->fx_addsy ? S_GET_NAME (fixP->fx_addsy) : "0",
- segment_name (add_symbol_segment),
- S_GET_NAME (fixP->fx_subsy),
- segment_name (sub_symbol_segment));
- }
- }
-
- if (fixP->fx_addsy)
- {
- if (add_symbol_segment == this_segment
- && !TC_FORCE_RELOCATION_LOCAL (fixP))
- {
- /* This fixup was made when the symbol's segment was
- SEG_UNKNOWN, but it is now in the local segment.
- So we know how to do the address without relocation. */
- add_number += S_GET_VALUE (fixP->fx_addsy);
- fixP->fx_offset = add_number;
- if (fixP->fx_pcrel)
- add_number -= MD_PCREL_FROM_SECTION (fixP, this_segment);
- fixP->fx_addsy = NULL;
- fixP->fx_pcrel = 0;
- }
- else if (add_symbol_segment == absolute_section
- && !TC_FORCE_RELOCATION_ABS (fixP))
- {
- add_number += S_GET_VALUE (fixP->fx_addsy);
- fixP->fx_offset = add_number;
- fixP->fx_addsy = NULL;
- }
- else if (add_symbol_segment != undefined_section
- && ! bfd_is_com_section (add_symbol_segment)
- && MD_APPLY_SYM_VALUE (fixP))
- add_number += S_GET_VALUE (fixP->fx_addsy);
- }
-
- if (fixP->fx_pcrel)
- {
- add_number -= MD_PCREL_FROM_SECTION (fixP, this_segment);
- if (!fixP->fx_done && fixP->fx_addsy == NULL)
- {
- /* There was no symbol required by this relocation.
- However, BFD doesn't really handle relocations
- without symbols well. So fake up a local symbol in
- the absolute section. */
- fixP->fx_addsy = abs_section_sym;
- }
- }
-
- if (!fixP->fx_done)
- md_apply_fix (fixP, &add_number, this_segment);
-
- if (!fixP->fx_done)
- {
- ++seg_reloc_count;
- if (fixP->fx_addsy == NULL)
- fixP->fx_addsy = abs_section_sym;
- symbol_mark_used_in_reloc (fixP->fx_addsy);
- if (fixP->fx_subsy != NULL)
- symbol_mark_used_in_reloc (fixP->fx_subsy);
- }
-
- if (!fixP->fx_bit_fixP && !fixP->fx_no_overflow && fixP->fx_size != 0)
- {
- if (fixP->fx_size < sizeof (valueT))
- {
- valueT mask;
-
- mask = 0;
- mask--; /* Set all bits to one. */
- mask <<= fixP->fx_size * 8 - (fixP->fx_signed ? 1 : 0);
- if ((add_number & mask) != 0 && (add_number & mask) != mask)
- {
- char buf[50], buf2[50];
- sprint_value (buf, fragP->fr_address + fixP->fx_where);
- if (add_number > 1000)
- sprint_value (buf2, add_number);
- else
- sprintf (buf2, "%ld", (long) add_number);
- as_bad_where (fixP->fx_file, fixP->fx_line,
- _("value of %s too large for field of %d bytes at %s"),
- buf2, fixP->fx_size, buf);
- } /* Generic error checking. */
- }
-#ifdef WARN_SIGNED_OVERFLOW_WORD
- /* Warn if a .word value is too large when treated as a signed
- number. We already know it is not too negative. This is to
- catch over-large switches generated by gcc on the 68k. */
- if (!flag_signed_overflow_ok
- && fixP->fx_size == 2
- && add_number > 0x7fff)
- as_bad_where (fixP->fx_file, fixP->fx_line,
- _("signed .word overflow; switch may be too large; %ld at 0x%lx"),
- (long) add_number,
- (long) (fragP->fr_address + fixP->fx_where));
-#endif
- } /* Not a bit fix. */
-
-#ifdef TC_VALIDATE_FIX
- skip: ATTRIBUTE_UNUSED_LABEL
- ;
-#endif
-#ifdef DEBUG5
- fprintf (stderr, "result:\n");
- print_fixup (fixP);
-#endif
- } /* For each fixS in this segment. */
-
- TC_ADJUST_RELOC_COUNT (fixP, seg_reloc_count);
- return seg_reloc_count;
-}
-
void
number_to_chars_bigendian (char *buf, valueT val, int n)
{
diff --git a/gas/write.h b/gas/write.h
index 1f9b72dbf265..4f75eb6d611a 100644
--- a/gas/write.h
+++ b/gas/write.h
@@ -1,6 +1,7 @@
/* write.h
Copyright 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001,
- 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+ 2002, 2003, 2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -22,12 +23,6 @@
#ifndef __write_h__
#define __write_h__
-#ifndef TC_I960
-#ifdef hpux
-#define EXEC_MACHINE_TYPE HP9000S200_ID
-#endif
-#endif /* TC_I960 */
-
/* This is the name of a fake symbol which will never appear in the
assembler output. S_IS_LOCAL detects it because of the \001. */
#ifndef FAKE_LABEL_NAME
@@ -45,29 +40,16 @@ struct fix
/* These small fields are grouped together for compactness of
this structure, and efficiency of access on some architectures. */
- /* pc-relative offset adjust (only used by m68k) */
- char fx_pcrel_adjust;
-
- /* How many bytes are involved? */
- unsigned char fx_size;
-
/* Is this a pc-relative relocation? */
unsigned fx_pcrel : 1;
- /* Is this a relocation to a procedure linkage table entry? If so,
- some of the reductions we try to apply are invalid. A better way
- might be to represent PLT entries with different kinds of
- symbols, and use normal relocations (with undefined symbols);
- look into it for version 2.6. */
- unsigned fx_plt : 1;
-
/* Is this value an immediate displacement? */
- /* Only used on i960 and ns32k; merge it into TC_FIX_TYPE sometime. */
+ /* Only used on ns32k; merge it into TC_FIX_TYPE sometime. */
unsigned fx_im_disp : 2;
- /* A bit for the CPU specific code.
- This probably can be folded into tc_fix_data, below. */
+ /* Some bits for the CPU specific code. */
unsigned fx_tcbit : 1;
+ unsigned fx_tcbit2 : 1;
/* Has this relocation already been applied? */
unsigned fx_done : 1;
@@ -82,6 +64,12 @@ struct fix
/* The value is signed when checking for overflow. */
unsigned fx_signed : 1;
+ /* pc-relative offset adjust (only used by m68k and m68hc11) */
+ char fx_pcrel_adjust;
+
+ /* How many bytes are involved? */
+ unsigned char fx_size;
+
/* Which frag does this fix apply to? */
fragS *fx_frag;
@@ -132,6 +120,10 @@ struct fix
const struct cgen_insn *insn;
/* Target specific data, usually reloc number. */
int opinfo;
+ /* Which ifield this fixup applies to. */
+ struct cgen_maybe_multi_ifield * field;
+ /* is this field is the MSB field in a set? */
+ int msb_field_p;
} fx_cgen;
#endif
@@ -144,11 +136,33 @@ struct fix
typedef struct fix fixS;
+struct reloc_list
+{
+ struct reloc_list *next;
+ union
+ {
+ struct
+ {
+ symbolS *offset_sym;
+ reloc_howto_type *howto;
+ symbolS *sym;
+ bfd_vma addend;
+ } a;
+ struct
+ {
+ asection *sec;
+ asymbol *s;
+ arelent r;
+ } b;
+ } u;
+ char *file;
+ unsigned int line;
+};
+
extern int finalize_syms;
extern symbolS *abs_section_sym;
extern addressT dot_value;
-extern long string_byte_count;
-extern int section_alignment[];
+extern struct reloc_list* reloc_list;
extern void append (char **charPP, char *fromP, unsigned long length);
extern void record_alignment (segT seg, int align);
diff --git a/gettext.m4 b/gettext.m4
deleted file mode 100644
index 2c54fb8c1409..000000000000
--- a/gettext.m4
+++ /dev/null
@@ -1,346 +0,0 @@
-# This file is derived from `gettext.m4'. The difference is that the
-# included macros assume Cygnus-style source and build trees.
-
-# Macro to add for using GNU gettext.
-# Ulrich Drepper <drepper@cygnus.com>, 1995.
-#
-# This file file 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.
-
-# serial 3
-
-AC_DEFUN([CY_WITH_NLS],
- [AC_MSG_CHECKING([whether NLS is requested])
- dnl Default is enabled NLS
- AC_ARG_ENABLE(nls,
- [ --disable-nls do not use Native Language Support],
- USE_NLS=$enableval, USE_NLS=yes)
- AC_MSG_RESULT($USE_NLS)
- AC_SUBST(USE_NLS)
-
- USE_INCLUDED_LIBINTL=no
-
- dnl If we use NLS figure out what method
- if test "$USE_NLS" = "yes"; then
- AC_MSG_CHECKING([whether included gettext is requested])
- AC_ARG_WITH(included-gettext,
- [ --with-included-gettext use the GNU gettext library included here],
- nls_cv_force_use_gnu_gettext=$withval,
- nls_cv_force_use_gnu_gettext=no)
- AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
-
- nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
- if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
- dnl User does not insist on using GNU NLS library. Figure out what
- dnl to use. If gettext or catgets are available (in this order) we
- dnl use this. Else we have to fall back to GNU NLS library.
- dnl catgets is only used if permitted by option --with-catgets.
- nls_cv_header_intl=
- nls_cv_header_libgt=
- CATOBJEXT=
-
- AC_CHECK_HEADER(libintl.h,
- [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc,
- [AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")],
- gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)])
-
- if test "$gt_cv_func_gettext_libc" != "yes"; then
- AC_CHECK_LIB(intl, bindtextdomain,
- [AC_CACHE_CHECK([for gettext in libintl],
- gt_cv_func_gettext_libintl,
- [AC_TRY_LINK([], [return (int) gettext ("")],
- gt_cv_func_gettext_libintl=yes,
- gt_cv_func_gettext_libintl=no)])])
- fi
-
- if test "$gt_cv_func_gettext_libc" = "yes" \
- || test "$gt_cv_func_gettext_libintl" = "yes"; then
- AC_DEFINE(HAVE_GETTEXT, 1,
- [Define as 1 if you have gettext and don't want to use GNU gettext.])
- AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
- if test "$MSGFMT" != "no"; then
- AC_CHECK_FUNCS(dcgettext)
- AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
- AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
- AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
- return _nl_msg_cat_cntr],
- [CATOBJEXT=.gmo
- DATADIRNAME=share],
- [CATOBJEXT=.mo
- DATADIRNAME=lib])
- INSTOBJEXT=.mo
- fi
- fi
- ])
-
- dnl In the standard gettext, we would now check for catgets.
- dnl However, we never want to use catgets for our releases.
-
- 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
- dnl Mark actions used to generate GNU NLS library.
- INTLOBJS="\$(GETTOBJS)"
- AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt)
- AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
- AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
- AC_SUBST(MSGFMT)
- 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
-
- dnl Test whether we really found GNU xgettext.
- if test "$XGETTEXT" != ":"; then
- dnl If it is no GNU xgettext we define it as : so that the
- dnl Makefiles still can work.
- if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
- : ;
- else
- AC_MSG_RESULT(
- [found xgettext programs is not GNU xgettext; ignore it])
- 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
-
- dnl These rules are solely for the distribution goal. While doing this
- dnl we only have to keep exactly one list of the available catalogs
- dnl in configure.in.
- for lang in $ALL_LINGUAS; do
- GMOFILES="$GMOFILES $lang.gmo"
- POFILES="$POFILES $lang.po"
- done
-
- dnl Make all variables we use known to autoconf.
- AC_SUBST(USE_INCLUDED_LIBINTL)
- AC_SUBST(CATALOGS)
- AC_SUBST(CATOBJEXT)
- AC_SUBST(DATADIRNAME)
- AC_SUBST(GMOFILES)
- AC_SUBST(INSTOBJEXT)
- AC_SUBST(INTLDEPS)
- AC_SUBST(INTLLIBS)
- AC_SUBST(INTLOBJS)
- AC_SUBST(POFILES)
- AC_SUBST(POSUB)
- if test "x$CATOBJEXT" != "x"; then
- AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if NLS is requested])
- fi
- ])
-
-AC_DEFUN([CY_GNU_GETTEXT],
- [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_REQUIRE([AC_PROG_RANLIB])dnl
- AC_REQUIRE([AC_ISC_POSIX])dnl
- AC_REQUIRE([AC_HEADER_STDC])dnl
- AC_REQUIRE([AC_C_CONST])dnl
- AC_REQUIRE([AC_C_INLINE])dnl
- AC_REQUIRE([AC_TYPE_OFF_T])dnl
- AC_REQUIRE([AC_TYPE_SIZE_T])dnl
- AC_REQUIRE([AC_FUNC_ALLOCA])dnl
- AC_REQUIRE([AC_FUNC_MMAP])dnl
-
- AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
-unistd.h values.h sys/param.h])
- AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
-__argz_count __argz_stringify __argz_next])
-
- if test "${ac_cv_func_stpcpy+set}" != "set"; then
- AC_CHECK_FUNCS(stpcpy)
- fi
- if test "${ac_cv_func_stpcpy}" = "yes"; then
- AC_DEFINE(HAVE_STPCPY, 1, [Define if you have the stpcpy function])
- fi
-
- AM_LC_MESSAGES
- CY_WITH_NLS
-
- if test "x$CATOBJEXT" != "x"; then
- if test "x$ALL_LINGUAS" = "x"; then
- LINGUAS=
- else
- AC_MSG_CHECKING(for catalogs to be installed)
- NEW_LINGUAS=
- for lang in ${LINGUAS=$ALL_LINGUAS}; do
- case "$ALL_LINGUAS" in
- *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
- esac
- done
- LINGUAS=$NEW_LINGUAS
- AC_MSG_RESULT($LINGUAS)
- fi
-
- dnl Construct list of names of catalog files to be constructed.
- if test -n "$LINGUAS"; then
- for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
- fi
- fi
-
- dnl The reference to <locale.h> in the installed <libintl.h> file
- dnl must be resolved because we cannot expect the users of this
- dnl to define HAVE_LOCALE_H.
- 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
- AC_SUBST(INCLUDE_LOCALE_H)
-
- dnl Determine which catalog format we have (if any is needed)
- dnl For now we know about two different formats:
- dnl Linux libc-5 and the normal X/Open format
- if test -f $srcdir/po2tbl.sed.in; then
- if test "$CATOBJEXT" = ".cat"; then
- AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
-
- dnl Transform the SED scripts while copying because some dumb SEDs
- dnl cannot handle comments.
- sed -e '/^#/d' $srcdir/$msgformat-msg.sed > po2msg.sed
- fi
- dnl po2tbl.sed is always needed.
- sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
- $srcdir/po2tbl.sed.in > po2tbl.sed
- fi
-
- dnl In the intl/Makefile.in we have a special dependency which makes
- dnl only sense for gettext. We comment this out for non-gettext
- dnl packages.
- if test "$PACKAGE" = "gettext"; then
- GT_NO="#NO#"
- GT_YES=
- else
- GT_NO=
- GT_YES="#YES#"
- fi
- AC_SUBST(GT_NO)
- AC_SUBST(GT_YES)
-
- MKINSTALLDIRS="\$(srcdir)/../../mkinstalldirs"
- AC_SUBST(MKINSTALLDIRS)
-
- dnl *** For now the libtool support in intl/Makefile is not for real.
- l=
- AC_SUBST(l)
-
- dnl Generate list of files to be processed by xgettext which will
- dnl be included in po/Makefile. But only do this if the po directory
- dnl exists in srcdir and contains POTFILES.in.
- 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
- ])
-
-# Search path for a program which passes the given test.
-# Ulrich Drepper <drepper@cygnus.com>, 1996.
-#
-# This file file 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.
-
-# serial 1
-
-dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
-dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
-AC_DEFUN([AM_PATH_PROG_WITH_TEST],
-[# Extract the first word of "$2", so it can be a program name with args.
-set dummy $2; ac_word=[$]2
-AC_MSG_CHECKING([for $ac_word])
-AC_CACHE_VAL(ac_cv_path_$1,
-[case "[$]$1" in
- /*)
- ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in ifelse([$5], , $PATH, [$5]); do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if [$3]; then
- ac_cv_path_$1="$ac_dir/$ac_word"
- break
- fi
- fi
- done
- IFS="$ac_save_ifs"
-dnl If no 4th arg is given, leave the cache variable unset,
-dnl so AC_PATH_PROGS will keep looking.
-ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
-])dnl
- ;;
-esac])dnl
-$1="$ac_cv_path_$1"
-if test -n "[$]$1"; then
- AC_MSG_RESULT([$]$1)
-else
- AC_MSG_RESULT(no)
-fi
-AC_SUBST($1)dnl
-])
-
-# Check whether LC_MESSAGES is available in <locale.h>.
-# Ulrich Drepper <drepper@cygnus.com>, 1995.
-#
-# This file file 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.
-
-# serial 1
-
-AC_DEFUN([AM_LC_MESSAGES],
- [if test $ac_cv_header_locale_h = yes; then
- AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
- [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
- am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
- if test $am_cv_val_LC_MESSAGES = yes; then
- AC_DEFINE(HAVE_LC_MESSAGES, 1,
- [Define if your locale.h file contains LC_MESSAGES.])
- fi
- fi])
diff --git a/gold/Makefile.am b/gold/Makefile.am
new file mode 100644
index 000000000000..a411127df94d
--- /dev/null
+++ b/gold/Makefile.am
@@ -0,0 +1,112 @@
+# Process this file with automake to generate Makefile.in
+
+AUTOMAKE_OPTIONS =
+
+SUBDIRS = po testsuite
+
+tooldir = $(exec_prefix)/$(target_alias)
+
+ACLOCAL_AMFLAGS = -I ../bfd -I ../config
+
+AM_CXXFLAGS = $(WARN_CXXFLAGS) $(LFS_CXXFLAGS)
+
+INCLUDES = -D_GNU_SOURCE \
+ -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../elfcpp \
+ -DLOCALEDIR="\"$(datadir)/locale\"" \
+ @INCINTL@
+
+YFLAGS = -d
+
+noinst_PROGRAMS = ld-new
+noinst_LIBRARIES = libgold.a
+
+CCFILES = \
+ archive.cc \
+ common.cc \
+ defstd.cc \
+ dirsearch.cc \
+ dynobj.cc \
+ fileread.cc \
+ gold.cc \
+ gold-threads.cc \
+ layout.cc \
+ merge.cc \
+ object.cc \
+ options.cc \
+ output.cc \
+ readsyms.cc \
+ reloc.cc \
+ resolve.cc \
+ script.cc \
+ symtab.cc \
+ stringpool.cc \
+ target-select.cc \
+ workqueue.cc
+
+HFILES = \
+ archive.h \
+ common.h \
+ defstd.h \
+ dirsearch.h \
+ dynobj.h \
+ fileread.h \
+ gold.h \
+ gold-threads.h \
+ layout.h \
+ merge.h \
+ object.h \
+ options.h \
+ output.h \
+ readsyms.h \
+ reloc.h \
+ reloc-types.h \
+ script.h \
+ script-c.h \
+ stringpool.h \
+ symtab.h \
+ target.h \
+ target-reloc.h \
+ target-select.h \
+ workqueue.h
+
+TARGETFILES = \
+ i386.cc
+
+YFILES = \
+ yyscript.y
+
+EXTRA_DIST = yyscript.c yyscript.h
+
+libgold_a_SOURCES = $(CCFILES) $(HFILES) $(YFILES)
+
+ld_new_SOURCES = main.cc $(TARGETFILES)
+ld_new_DEPENDENCIES = libgold.a $(LIBINTL_DEP)
+ld_new_LDADD = libgold.a $(LIBINTL)
+
+# Use an explicit dependency for the bison generated header file.
+script.$(OBJEXT): yyscript.h
+
+# We have to build libgold.a before we run the tests.
+check: libgold.a
+
+.PHONY: install-exec-local
+
+install-exec-local: ld-new$(EXEEXT)
+ $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(tooldir)/bin
+ n=`echo ld | sed '$(transform)'; \
+ $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(bindir)/$${n}$(EXEEXT); \
+ if test "$(bindir)" != "$(tooldir)/bin"; then \
+ rm -f $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \
+ ln $(DESTDIR)$(bindir)/$${n}$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT) >/dev/null 2>/dev/null \
+ || $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \
+ fi
+
+# We want install to imply install-info as per GNU standards, despite
+# the cygnus option.
+install-data-local: install-info
+
+POTFILES= $(CCFILES) $(HFILES) $(TARGETFILES)
+
+po/POTFILES.in: @MAINT@ Makefile
+ for f in $(POTFILES); do echo $$f; done | LC_COLLATE= sort > tmp \
+ && mv tmp $(srcdir)/po/POTFILES.in
diff --git a/gold/Makefile.in b/gold/Makefile.in
new file mode 100644
index 000000000000..884b1a52c888
--- /dev/null
+++ b/gold/Makefile.in
@@ -0,0 +1,873 @@
+# 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@
+
+# Process this file with automake to generate Makefile.in
+
+
+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 = README $(am__configure_deps) $(srcdir)/../config.guess \
+ $(srcdir)/../config.sub $(srcdir)/../depcomp \
+ $(srcdir)/../install-sh $(srcdir)/../missing \
+ $(srcdir)/../mkinstalldirs $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/config.in \
+ $(top_srcdir)/configure $(top_srcdir)/po/Make-in yyscript.c \
+ yyscript.h
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/progtest.m4 \
+ $(top_srcdir)/../config/po.m4 $(top_srcdir)/../config/nls.m4 \
+ $(top_srcdir)/../config/gettext-sister.m4 \
+ $(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/configure.ac
+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
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+libgold_a_AR = $(AR) $(ARFLAGS)
+libgold_a_LIBADD =
+am__objects_1 = archive.$(OBJEXT) common.$(OBJEXT) defstd.$(OBJEXT) \
+ dirsearch.$(OBJEXT) dynobj.$(OBJEXT) fileread.$(OBJEXT) \
+ gold.$(OBJEXT) gold-threads.$(OBJEXT) layout.$(OBJEXT) \
+ merge.$(OBJEXT) object.$(OBJEXT) options.$(OBJEXT) \
+ output.$(OBJEXT) readsyms.$(OBJEXT) reloc.$(OBJEXT) \
+ resolve.$(OBJEXT) script.$(OBJEXT) symtab.$(OBJEXT) \
+ stringpool.$(OBJEXT) target-select.$(OBJEXT) \
+ workqueue.$(OBJEXT)
+am__objects_2 =
+am__objects_3 = yyscript.$(OBJEXT)
+am_libgold_a_OBJECTS = $(am__objects_1) $(am__objects_2) \
+ $(am__objects_3)
+libgold_a_OBJECTS = $(am_libgold_a_OBJECTS)
+PROGRAMS = $(noinst_PROGRAMS)
+am__objects_4 = i386.$(OBJEXT)
+am_ld_new_OBJECTS = main.$(OBJEXT) $(am__objects_4)
+ld_new_OBJECTS = $(am_ld_new_OBJECTS)
+am__DEPENDENCIES_1 =
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
+depcomp = $(SHELL) $(top_srcdir)/../depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
+SOURCES = $(libgold_a_SOURCES) $(ld_new_SOURCES)
+DIST_SOURCES = $(libgold_a_SOURCES) $(ld_new_SOURCES)
+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
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d $(distdir) \
+ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+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@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GMSGFMT = @GMSGFMT@
+INCINTL = @INCINTL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+LDFLAGS = @LDFLAGS@
+LFS_CXXFLAGS = @LFS_CXXFLAGS@
+LIBINTL = @LIBINTL@
+LIBINTL_DEP = @LIBINTL_DEP@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+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@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+YACC = @YACC@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_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@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+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@
+AUTOMAKE_OPTIONS =
+SUBDIRS = po testsuite
+tooldir = $(exec_prefix)/$(target_alias)
+ACLOCAL_AMFLAGS = -I ../bfd -I ../config
+AM_CXXFLAGS = $(WARN_CXXFLAGS) $(LFS_CXXFLAGS)
+INCLUDES = -D_GNU_SOURCE \
+ -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../elfcpp \
+ -DLOCALEDIR="\"$(datadir)/locale\"" \
+ @INCINTL@
+
+YFLAGS = -d
+noinst_LIBRARIES = libgold.a
+CCFILES = \
+ archive.cc \
+ common.cc \
+ defstd.cc \
+ dirsearch.cc \
+ dynobj.cc \
+ fileread.cc \
+ gold.cc \
+ gold-threads.cc \
+ layout.cc \
+ merge.cc \
+ object.cc \
+ options.cc \
+ output.cc \
+ readsyms.cc \
+ reloc.cc \
+ resolve.cc \
+ script.cc \
+ symtab.cc \
+ stringpool.cc \
+ target-select.cc \
+ workqueue.cc
+
+HFILES = \
+ archive.h \
+ common.h \
+ defstd.h \
+ dirsearch.h \
+ dynobj.h \
+ fileread.h \
+ gold.h \
+ gold-threads.h \
+ layout.h \
+ merge.h \
+ object.h \
+ options.h \
+ output.h \
+ readsyms.h \
+ reloc.h \
+ reloc-types.h \
+ script.h \
+ script-c.h \
+ stringpool.h \
+ symtab.h \
+ target.h \
+ target-reloc.h \
+ target-select.h \
+ workqueue.h
+
+TARGETFILES = \
+ i386.cc
+
+YFILES = \
+ yyscript.y
+
+EXTRA_DIST = yyscript.c yyscript.h
+libgold_a_SOURCES = $(CCFILES) $(HFILES) $(YFILES)
+ld_new_SOURCES = main.cc $(TARGETFILES)
+ld_new_DEPENDENCIES = libgold.a $(LIBINTL_DEP)
+ld_new_LDADD = libgold.a $(LIBINTL)
+POTFILES = $(CCFILES) $(HFILES) $(TARGETFILES)
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .cc .o .obj .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-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+yyscript.h: yyscript.c
+ @if test ! -f $@; then \
+ rm -f yyscript.c; \
+ $(MAKE) yyscript.c; \
+ else :; fi
+libgold.a: $(libgold_a_OBJECTS) $(libgold_a_DEPENDENCIES)
+ -rm -f libgold.a
+ $(libgold_a_AR) libgold.a $(libgold_a_OBJECTS) $(libgold_a_LIBADD)
+ $(RANLIB) libgold.a
+
+clean-noinstPROGRAMS:
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+ld-new$(EXEEXT): $(ld_new_OBJECTS) $(ld_new_DEPENDENCIES)
+ @rm -f ld-new$(EXEEXT)
+ $(CXXLINK) $(ld_new_LDFLAGS) $(ld_new_OBJECTS) $(ld_new_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/archive.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defstd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirsearch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dynobj.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileread.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gold-threads.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gold.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/layout.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/merge.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/options.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/output.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readsyms.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/script.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stringpool.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symtab.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/target-select.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/workqueue.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yyscript.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.cc.o:
+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.y.c:
+ $(YACCCOMPILE) $<
+ if test -f y.tab.h; then \
+ to=`echo "$*_H" | sed \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
+ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`; \
+ sed -e "/^#/!b" -e "s/Y_TAB_H/$$to/g" -e "s|y\.tab\.h|$*.h|" \
+ y.tab.h >$*.ht; \
+ rm -f y.tab.h; \
+ if cmp -s $*.ht $*.h; then \
+ rm -f $*.ht ;\
+ else \
+ mv $*.ht $*.h; \
+ fi; \
+ fi
+ if test -f y.output; then \
+ mv y.output $*.output; \
+ fi
+ sed '/^#/ s|y\.tab\.c|$@|' y.tab.c >$@t && mv $@t $@
+ rm -f y.tab.c
+uninstall-info-am:
+
+# 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
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ mkdir $(distdir)
+ $(mkdir_p) $(distdir)/.. $(distdir)/../bfd $(distdir)/../config $(distdir)/po
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(mkdir_p) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r $(distdir)
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && cd $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+distuninstallcheck:
+ @cd $(distuninstallcheck_dir) \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LIBRARIES) $(PROGRAMS) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+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:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+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 yyscript.c
+ -rm -f yyscript.h
+clean: clean-recursive
+
+clean-am: clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-data-local
+
+install-exec-am: install-exec-local
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+ check-am clean clean-generic clean-noinstLIBRARIES \
+ clean-noinstPROGRAMS clean-recursive ctags ctags-recursive \
+ dist dist-all dist-bzip2 dist-gzip dist-shar dist-tarZ \
+ dist-zip distcheck distclean distclean-compile \
+ distclean-generic distclean-hdr distclean-recursive \
+ distclean-tags distcleancheck distdir distuninstallcheck 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-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic maintainer-clean-recursive \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am uninstall-info-am
+
+
+# Use an explicit dependency for the bison generated header file.
+script.$(OBJEXT): yyscript.h
+
+# We have to build libgold.a before we run the tests.
+check: libgold.a
+
+.PHONY: install-exec-local
+
+install-exec-local: ld-new$(EXEEXT)
+ $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(tooldir)/bin
+ n=`echo ld | sed '$(transform)'; \
+ $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(bindir)/$${n}$(EXEEXT); \
+ if test "$(bindir)" != "$(tooldir)/bin"; then \
+ rm -f $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \
+ ln $(DESTDIR)$(bindir)/$${n}$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT) >/dev/null 2>/dev/null \
+ || $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \
+ fi
+
+# We want install to imply install-info as per GNU standards, despite
+# the cygnus option.
+install-data-local: install-info
+
+po/POTFILES.in: @MAINT@ Makefile
+ for f in $(POTFILES); do echo $$f; done | LC_COLLATE= sort > tmp \
+ && mv tmp $(srcdir)/po/POTFILES.in
+# 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/gold/README b/gold/README
new file mode 100644
index 000000000000..aa318f2daa8e
--- /dev/null
+++ b/gold/README
@@ -0,0 +1,18 @@
+gold is an ELF linker. It is intended to have complete support for
+ELF and to run as fast as possible on modern systems.
+
+It is written in C++. It is (intended to be) a GNU program, and
+therefore follows the GNU formatting standards as modified for C++.
+Source documents in order of precedence:
+ http://www.gnu.org/prep/standards/
+ http://gcc.gnu.org/onlinedocs/libstdc++/17_intro/C++STYLE
+ http://www.zembu.com/eng/procs/c++style.html
+
+The linker is intended to have complete support for cross-compilation,
+which still supporting the normal case of native linking as fast as
+possible. This makes the code more complex.
+
+Many functions are actually templates whose parameter is the ELF file
+class (e.g., 32 bits or 64 bits). The code is the same, but we don't
+want to pay the execution time cost of always using 64-bit integers if
+the target is 32 bits.
diff --git a/gold/aclocal.m4 b/gold/aclocal.m4
new file mode 100644
index 000000000000..4438a34308e6
--- /dev/null
+++ b/gold/aclocal.m4
@@ -0,0 +1,877 @@
+# 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)])
+
+# 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([../config/depstand.m4])
+m4_include([../config/lead-dot.m4])
+m4_include([../config/progtest.m4])
+m4_include([../config/po.m4])
+m4_include([../config/nls.m4])
+m4_include([../config/gettext-sister.m4])
+m4_include([../bfd/warning.m4])
diff --git a/gold/archive.cc b/gold/archive.cc
new file mode 100644
index 000000000000..d0854036a672
--- /dev/null
+++ b/gold/archive.cc
@@ -0,0 +1,368 @@
+// archive.cc -- archive support for gold
+
+#include "gold.h"
+
+#include <cerrno>
+#include <cstring>
+#include <climits>
+#include <vector>
+
+#include "elfcpp.h"
+#include "fileread.h"
+#include "readsyms.h"
+#include "symtab.h"
+#include "object.h"
+#include "archive.h"
+
+namespace gold
+{
+
+// The header of an entry in the archive. This is all readable text,
+// padded with spaces where necesary. If the contents of an archive
+// are all text file, the entire archive is readable.
+
+struct Archive::Archive_header
+{
+ // The entry name.
+ char ar_name[16];
+ // The file modification time.
+ char ar_date[12];
+ // The user's UID in decimal.
+ char ar_uid[6];
+ // The user's GID in decimal.
+ char ar_gid[6];
+ // The file mode in octal.
+ char ar_mode[8];
+ // The file size in decimal.
+ char ar_size[10];
+ // The final magic code.
+ char ar_fmag[2];
+};
+
+// Archive methods.
+
+const char Archive::armag[sarmag] =
+{
+ '!', '<', 'a', 'r', 'c', 'h', '>', '\n'
+};
+
+const char Archive::arfmag[2] = { '`', '\n' };
+
+// Set up the archive: read the symbol map and the extended name
+// table.
+
+void
+Archive::setup()
+{
+ // The first member of the archive should be the symbol table.
+ std::string armap_name;
+ off_t armap_size = this->read_header(sarmag, &armap_name);
+ if (!armap_name.empty())
+ {
+ fprintf(stderr, _("%s: %s: no archive symbol table (run ranlib)\n"),
+ program_name, this->name().c_str());
+ gold_exit(false);
+ }
+
+ // Read in the entire armap.
+ const unsigned char* p = this->get_view(sarmag + sizeof(Archive_header),
+ armap_size);
+
+ // Numbers in the armap are always big-endian.
+ const elfcpp::Elf_Word* pword = reinterpret_cast<const elfcpp::Elf_Word*>(p);
+ unsigned int nsyms = elfcpp::Swap<32, true>::readval(pword);
+ ++pword;
+
+ // Note that the addition is in units of sizeof(elfcpp::Elf_Word).
+ const char* pnames = reinterpret_cast<const char*>(pword + nsyms);
+
+ this->armap_.resize(nsyms);
+
+ for (unsigned int i = 0; i < nsyms; ++i)
+ {
+ this->armap_[i].name = pnames;
+ this->armap_[i].offset = elfcpp::Swap<32, true>::readval(pword);
+ pnames += strlen(pnames) + 1;
+ ++pword;
+ }
+
+ if (reinterpret_cast<const unsigned char*>(pnames) - p > armap_size)
+ {
+ fprintf(stderr, _("%s: %s: bad archive symbol table names\n"),
+ program_name, this->name().c_str());
+ gold_exit(false);
+ }
+
+ // See if there is an extended name table.
+ off_t off = sarmag + sizeof(Archive_header) + armap_size;
+ if ((off & 1) != 0)
+ ++off;
+ std::string xname;
+ off_t extended_size = this->read_header(off, &xname);
+ if (xname == "/")
+ {
+ p = this->get_view(off + sizeof(Archive_header), extended_size);
+ const char* px = reinterpret_cast<const char*>(p);
+ this->extended_names_.assign(px, extended_size);
+ }
+
+ // This array keeps track of which symbols are for archive elements
+ // which we have already included in the link.
+ this->seen_.resize(nsyms);
+
+ // Opening the file locked it. Unlock it now.
+ this->input_file_->file().unlock();
+}
+
+// Read the header of an archive member at OFF. Fail if something
+// goes wrong. Return the size of the member. Set *PNAME to the name
+// of the member.
+
+off_t
+Archive::read_header(off_t off, std::string* pname)
+{
+ const unsigned char* p = this->get_view(off, sizeof(Archive_header));
+ const Archive_header* hdr = reinterpret_cast<const Archive_header*>(p);
+
+ if (memcmp(hdr->ar_fmag, arfmag, sizeof arfmag) != 0)
+ {
+ fprintf(stderr, _("%s; %s: malformed archive header at %ld\n"),
+ program_name, this->name().c_str(),
+ static_cast<long>(off));
+ gold_exit(false);
+ }
+
+ const int size_string_size = sizeof hdr->ar_size;
+ char size_string[size_string_size + 1];
+ memcpy(size_string, hdr->ar_size, size_string_size);
+ char* ps = size_string + size_string_size;
+ while (ps[-1] == ' ')
+ --ps;
+ *ps = '\0';
+
+ errno = 0;
+ char* end;
+ off_t member_size = strtol(size_string, &end, 10);
+ if (*end != '\0'
+ || member_size < 0
+ || (member_size == LONG_MAX && errno == ERANGE))
+ {
+ fprintf(stderr, _("%s: %s: malformed archive header size at %ld\n"),
+ program_name, this->name().c_str(),
+ static_cast<long>(off));
+ gold_exit(false);
+ }
+
+ if (hdr->ar_name[0] != '/')
+ {
+ const char* name_end = strchr(hdr->ar_name, '/');
+ if (name_end == NULL
+ || name_end - hdr->ar_name >= static_cast<int>(sizeof hdr->ar_name))
+ {
+ fprintf(stderr, _("%s: %s: malformed archive header name at %ld\n"),
+ program_name, this->name().c_str(),
+ static_cast<long>(off));
+ gold_exit(false);
+ }
+ pname->assign(hdr->ar_name, name_end - hdr->ar_name);
+ }
+ else if (hdr->ar_name[1] == ' ')
+ {
+ // This is the symbol table.
+ pname->clear();
+ }
+ else if (hdr->ar_name[1] == '/')
+ {
+ // This is the extended name table.
+ pname->assign(1, '/');
+ }
+ else
+ {
+ errno = 0;
+ long x = strtol(hdr->ar_name + 1, &end, 10);
+ if (*end != ' '
+ || x < 0
+ || (x == LONG_MAX && errno == ERANGE)
+ || static_cast<size_t>(x) >= this->extended_names_.size())
+ {
+ fprintf(stderr, _("%s: %s: bad extended name index at %ld\n"),
+ program_name, this->name().c_str(),
+ static_cast<long>(off));
+ gold_exit(false);
+ }
+
+ const char* name = this->extended_names_.data() + x;
+ const char* name_end = strchr(name, '/');
+ if (static_cast<size_t>(name_end - name) > this->extended_names_.size()
+ || name_end[1] != '\n')
+ {
+ fprintf(stderr, _("%s: %s: bad extended name entry at header %ld\n"),
+ program_name, this->name().c_str(),
+ static_cast<long>(off));
+ gold_exit(false);
+ }
+ pname->assign(name, name_end - name);
+ }
+
+ return member_size;
+}
+
+// Select members from the archive and add them to the link. We walk
+// through the elements in the archive map, and look each one up in
+// the symbol table. If it exists as a strong undefined symbol, we
+// pull in the corresponding element. We have to do this in a loop,
+// since pulling in one element may create new undefined symbols which
+// may be satisfied by other objects in the archive.
+
+void
+Archive::add_symbols(const General_options& options, Symbol_table* symtab,
+ Layout* layout, Input_objects* input_objects)
+{
+ const size_t armap_size = this->armap_.size();
+
+ bool added_new_object;
+ do
+ {
+ added_new_object = false;
+ off_t last = -1;
+ for (size_t i = 0; i < armap_size; ++i)
+ {
+ if (this->seen_[i])
+ continue;
+ if (this->armap_[i].offset == last)
+ {
+ this->seen_[i] = true;
+ continue;
+ }
+
+ Symbol* sym = symtab->lookup(this->armap_[i].name);
+ if (sym == NULL)
+ continue;
+ else if (!sym->is_undefined())
+ {
+ this->seen_[i] = true;
+ continue;
+ }
+ else if (sym->binding() == elfcpp::STB_WEAK)
+ continue;
+
+ // We want to include this object in the link.
+ last = this->armap_[i].offset;
+ this->include_member(options, symtab, layout, input_objects, last);
+ this->seen_[i] = true;
+ added_new_object = true;
+ }
+ }
+ while (added_new_object);
+}
+
+// Include an archive member in the link. OFF is the file offset of
+// the member header.
+
+void
+Archive::include_member(const General_options& options, Symbol_table* symtab,
+ Layout* layout, Input_objects* input_objects,
+ off_t off)
+{
+ std::string n;
+ this->read_header(off, &n);
+
+ size_t memoff = off + sizeof(Archive_header);
+
+ // Read enough of the file to pick up the entire ELF header.
+ int ehdr_size = elfcpp::Elf_sizes<64>::ehdr_size;
+ off_t bytes;
+ const unsigned char* p = this->input_file_->file().get_view(memoff,
+ ehdr_size,
+ &bytes);
+ if (bytes < 4)
+ {
+ fprintf(stderr, _("%s: %s: member at %ld is not an ELF object"),
+ program_name, this->name().c_str(),
+ static_cast<long>(off));
+ gold_exit(false);
+ }
+
+ static unsigned char elfmagic[4] =
+ {
+ elfcpp::ELFMAG0, elfcpp::ELFMAG1,
+ elfcpp::ELFMAG2, elfcpp::ELFMAG3
+ };
+ if (memcmp(p, elfmagic, 4) != 0)
+ {
+ fprintf(stderr, _("%s: %s: member at %ld is not an ELF object"),
+ program_name, this->name().c_str(),
+ static_cast<long>(off));
+ gold_exit(false);
+ }
+
+ Object* obj = make_elf_object((std::string(this->input_file_->filename())
+ + "(" + n + ")"),
+ this->input_file_, memoff, p, bytes);
+
+ input_objects->add_object(obj);
+
+ Read_symbols_data sd;
+ obj->read_symbols(&sd);
+ obj->layout(options, symtab, layout, &sd);
+ obj->add_symbols(symtab, &sd);
+}
+
+// Add_archive_symbols methods.
+
+Add_archive_symbols::~Add_archive_symbols()
+{
+ if (this->this_blocker_ != NULL)
+ delete this->this_blocker_;
+ // next_blocker_ is deleted by the task associated with the next
+ // input file.
+}
+
+// Return whether we can add the archive symbols. We are blocked by
+// this_blocker_. We block next_blocker_. We also lock the file.
+
+Task::Is_runnable_type
+Add_archive_symbols::is_runnable(Workqueue*)
+{
+ if (this->this_blocker_ != NULL && this->this_blocker_->is_blocked())
+ return IS_BLOCKED;
+ return IS_RUNNABLE;
+}
+
+class Add_archive_symbols::Add_archive_symbols_locker : public Task_locker
+{
+ public:
+ Add_archive_symbols_locker(Task_token& token, Workqueue* workqueue,
+ File_read& file)
+ : blocker_(token, workqueue), filelock_(file)
+ { }
+
+ private:
+ Task_locker_block blocker_;
+ Task_locker_obj<File_read> filelock_;
+};
+
+Task_locker*
+Add_archive_symbols::locks(Workqueue* workqueue)
+{
+ return new Add_archive_symbols_locker(*this->next_blocker_,
+ workqueue,
+ this->archive_->file());
+}
+
+void
+Add_archive_symbols::run(Workqueue*)
+{
+ this->archive_->add_symbols(this->options_, this->symtab_, this->layout_,
+ this->input_objects_);
+
+ if (this->input_group_ != NULL)
+ this->input_group_->add_archive(this->archive_);
+ else
+ {
+ // We no longer need to know about this archive.
+ delete this->archive_;
+ }
+}
+
+} // End namespace gold.
diff --git a/gold/archive.h b/gold/archive.h
new file mode 100644
index 000000000000..193a9e2de820
--- /dev/null
+++ b/gold/archive.h
@@ -0,0 +1,162 @@
+// archive.h -- archive support for gold -*- C++ -*-
+
+#ifndef GOLD_ARCHIVE_H
+#define GOLD_ARCHIVE_H
+
+#include <string>
+#include <vector>
+
+#include "workqueue.h"
+
+namespace gold
+{
+
+class General_options;
+class Input_file;
+class Input_objects;
+class Input_group;
+class Layout;
+class Symbol_table;
+
+// This class represents an archive--generally a libNAME.a file.
+// Archives have a symbol table and a list of objects.
+
+class Archive
+{
+ public:
+ Archive(const std::string& name, Input_file* input_file)
+ : name_(name), input_file_(input_file), armap_(), extended_names_()
+ { }
+
+ // The length of the magic string at the start of an archive.
+ static const int sarmag = 8;
+
+ // The magic string at the start of an archive.
+ static const char armag[sarmag];
+
+ // The string expected at the end of an archive member header.
+ static const char arfmag[2];
+
+ // The name of the object.
+ const std::string&
+ name() const
+ { return this->name_; }
+
+ // Set up the archive: read the symbol map.
+ void
+ setup();
+
+ // Get a reference to the underlying file.
+ File_read&
+ file()
+ { return this->input_file_->file(); }
+
+ // Lock the underlying file.
+ void
+ lock()
+ { this->input_file_->file().lock(); }
+
+ // Unlock the underlying file.
+ void
+ unlock()
+ { this->input_file_->file().unlock(); }
+
+ // Return whether the underlying file is locked.
+ bool
+ is_locked() const
+ { return this->input_file_->file().is_locked(); }
+
+ // Select members from the archive as needed and add them to the
+ // link.
+ void
+ add_symbols(const General_options&, Symbol_table*, Layout*, Input_objects*);
+
+ private:
+ Archive(const Archive&);
+ Archive& operator=(const Archive&);
+
+ struct Archive_header;
+
+ // Get a view into the underlying file.
+ const unsigned char*
+ get_view(off_t start, off_t size)
+ { return this->input_file_->file().get_view(start, size); }
+
+ // Read an archive member header at OFF. Return the size of the
+ // member, and set *PNAME to the name.
+ off_t
+ read_header(off_t off, std::string* pname);
+
+ // Include an archive member in the link.
+ void
+ include_member(const General_options&, Symbol_table*, Layout*,
+ Input_objects*, off_t off);
+
+ // An entry in the archive map of symbols to object files.
+ struct Armap_entry
+ {
+ // The symbol name.
+ const char* name;
+ // The offset to the file.
+ off_t offset;
+ };
+
+ // Name of object as printed to user.
+ std::string name_;
+ // For reading the file.
+ Input_file* input_file_;
+ // The archive map.
+ std::vector<Armap_entry> armap_;
+ // The extended name table.
+ std::string extended_names_;
+ // Track which symbols in the archive map are for elements which
+ // have already been included in the link.
+ std::vector<bool> seen_;
+};
+
+// This class is used to read an archive and pick out the desired
+// elements and add them to the link.
+
+class Add_archive_symbols : public Task
+{
+ public:
+ Add_archive_symbols(const General_options& options, Symbol_table* symtab,
+ Layout* layout, Input_objects* input_objects,
+ Archive* archive, Input_group* input_group,
+ Task_token* this_blocker,
+ Task_token* next_blocker)
+ : options_(options), symtab_(symtab), layout_(layout),
+ input_objects_(input_objects), archive_(archive),
+ input_group_(input_group), this_blocker_(this_blocker),
+ next_blocker_(next_blocker)
+ { }
+
+ ~Add_archive_symbols();
+
+ // The standard Task methods.
+
+ Is_runnable_type
+ is_runnable(Workqueue*);
+
+ Task_locker*
+ locks(Workqueue*);
+
+ void
+ run(Workqueue*);
+
+ private:
+ class Add_archive_symbols_locker;
+
+ const General_options& options_;
+ Symbol_table* symtab_;
+ Layout* layout_;
+ Input_objects* input_objects_;
+ Archive* archive_;
+ Input_group* input_group_;
+ Task_token* this_blocker_;
+ Task_token* next_blocker_;
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_ARCHIVE_H)
diff --git a/gold/common.cc b/gold/common.cc
new file mode 100644
index 000000000000..e83219c901f0
--- /dev/null
+++ b/gold/common.cc
@@ -0,0 +1,210 @@
+// common.cc -- handle common symbols for gold
+
+#include "gold.h"
+
+#include <algorithm>
+
+#include "workqueue.h"
+#include "layout.h"
+#include "output.h"
+#include "symtab.h"
+#include "common.h"
+
+namespace gold
+{
+
+// Allocate_commons_task methods.
+
+// This task allocates the common symbols. We need a lock on the
+// symbol table.
+
+Task::Is_runnable_type
+Allocate_commons_task::is_runnable(Workqueue*)
+{
+ if (!this->symtab_lock_->is_writable())
+ return IS_LOCKED;
+ return IS_RUNNABLE;
+}
+
+// Return the locks we hold: one on the symbol table, and one blocker.
+
+class Allocate_commons_task::Allocate_commons_locker : public Task_locker
+{
+ public:
+ Allocate_commons_locker(Task_token& symtab_lock, Task* task,
+ Task_token& blocker, Workqueue* workqueue)
+ : symtab_locker_(symtab_lock, task),
+ blocker_(blocker, workqueue)
+ { }
+
+ private:
+ Task_locker_write symtab_locker_;
+ Task_locker_block blocker_;
+};
+
+Task_locker*
+Allocate_commons_task::locks(Workqueue* workqueue)
+{
+ return new Allocate_commons_locker(*this->symtab_lock_, this,
+ *this->blocker_, workqueue);
+}
+
+// Allocate the common symbols.
+
+void
+Allocate_commons_task::run(Workqueue*)
+{
+ this->symtab_->allocate_commons(this->options_, this->layout_);
+}
+
+// This class is used to sort the common symbol by size. We put the
+// larger common symbols first.
+
+template<int size>
+class Sort_commons
+{
+ public:
+ Sort_commons(const Symbol_table* symtab)
+ : symtab_(symtab)
+ { }
+
+ bool operator()(const Symbol* a, const Symbol* b) const;
+
+ private:
+ const Symbol_table* symtab_;
+};
+
+template<int size>
+bool
+Sort_commons<size>::operator()(const Symbol* pa, const Symbol* pb) const
+{
+ if (pa == NULL)
+ return false;
+ if (pb == NULL)
+ return true;
+
+ const Symbol_table* symtab = this->symtab_;
+ const Sized_symbol<size>* psa;
+ psa = symtab->get_sized_symbol SELECT_SIZE_NAME(size) (pa
+ SELECT_SIZE(size));
+ const Sized_symbol<size>* psb;
+ psb = symtab->get_sized_symbol SELECT_SIZE_NAME(size) (pb
+ SELECT_SIZE(size));
+
+ typename Sized_symbol<size>::Size_type sa = psa->symsize();
+ typename Sized_symbol<size>::Size_type sb = psb->symsize();
+ if (sa < sb)
+ return false;
+ else if (sb > sa)
+ return true;
+
+ // When the symbols are the same size, we sort them by alignment.
+ typename Sized_symbol<size>::Value_type va = psa->value();
+ typename Sized_symbol<size>::Value_type vb = psb->value();
+ if (va < vb)
+ return false;
+ else if (vb > va)
+ return true;
+
+ // Otherwise we stabilize the sort by sorting by name.
+ return strcmp(psa->name(), psb->name()) < 0;
+}
+
+// Allocate the common symbols.
+
+void
+Symbol_table::allocate_commons(const General_options& options, Layout* layout)
+{
+ if (this->get_size() == 32)
+ this->do_allocate_commons<32>(options, layout);
+ else if (this->get_size() == 64)
+ this->do_allocate_commons<64>(options, layout);
+ else
+ gold_unreachable();
+}
+
+// Allocated the common symbols, sized version.
+
+template<int size>
+void
+Symbol_table::do_allocate_commons(const General_options&,
+ Layout* layout)
+{
+ typedef typename Sized_symbol<size>::Value_type Value_type;
+ typedef typename Sized_symbol<size>::Size_type Size_type;
+
+ // We've kept a list of all the common symbols. But the symbol may
+ // have been resolved to a defined symbol by now. And it may be a
+ // forwarder. First remove all non-common symbols.
+ bool any = false;
+ uint64_t addralign = 0;
+ for (Commons_type::iterator p = this->commons_.begin();
+ p != this->commons_.end();
+ ++p)
+ {
+ Symbol* sym = *p;
+ if (sym->is_forwarder())
+ {
+ sym = this->resolve_forwards(sym);
+ *p = sym;
+ }
+ if (!sym->is_common())
+ *p = NULL;
+ else
+ {
+ any = true;
+ Sized_symbol<size>* ssym;
+ ssym = this->get_sized_symbol SELECT_SIZE_NAME(size) (
+ sym
+ SELECT_SIZE(size));
+ if (ssym->value() > addralign)
+ addralign = ssym->value();
+ }
+ }
+ if (!any)
+ return;
+
+ // Sort the common symbols by size, so that they pack better into
+ // memory.
+ std::sort(this->commons_.begin(), this->commons_.end(),
+ Sort_commons<size>(this));
+
+ // Place them in a newly allocated .bss section.
+
+ Output_data_space *poc = new Output_data_space(addralign);
+
+ layout->add_output_section_data(".bss", elfcpp::SHT_NOBITS,
+ elfcpp::SHF_WRITE | elfcpp::SHF_ALLOC,
+ poc);
+
+ // Allocate them all.
+
+ off_t off = 0;
+ for (Commons_type::iterator p = this->commons_.begin();
+ p != this->commons_.end();
+ ++p)
+ {
+ Symbol* sym = *p;
+ if (sym == NULL)
+ break;
+
+ Sized_symbol<size>* ssym;
+ ssym = this->get_sized_symbol SELECT_SIZE_NAME(size) (sym
+ SELECT_SIZE(size));
+
+ off = align_address(off, ssym->value());
+
+ Size_type symsize = ssym->symsize();
+ ssym->init(ssym->name(), poc, off, symsize, ssym->type(),
+ ssym->binding(), ssym->visibility(), ssym->nonvis(),
+ false);
+
+ off += symsize;
+ }
+
+ poc->set_space_size(off);
+
+ this->commons_.clear();
+}
+
+} // End namespace gold.
diff --git a/gold/common.h b/gold/common.h
new file mode 100644
index 000000000000..75237a6a5c52
--- /dev/null
+++ b/gold/common.h
@@ -0,0 +1,49 @@
+// common.h -- handle common symbols for gold -*- C++ -*-
+
+#ifndef GOLD_COMMON_H
+#define GOLD_COMMON_H
+
+#include "workqueue.h"
+
+namespace gold
+{
+
+class General_options;
+class Symbol_table;
+
+// This task is used to allocate the common symbols.
+
+class Allocate_commons_task : public Task
+{
+ public:
+ Allocate_commons_task(const General_options& options, Symbol_table* symtab,
+ Layout* layout, Task_token* symtab_lock,
+ Task_token* blocker)
+ : options_(options), symtab_(symtab), layout_(layout),
+ symtab_lock_(symtab_lock), blocker_(blocker)
+ { }
+
+ // The standard Task methods.
+
+ Is_runnable_type
+ is_runnable(Workqueue*);
+
+ Task_locker*
+ locks(Workqueue*);
+
+ void
+ run(Workqueue*);
+
+ private:
+ class Allocate_commons_locker;
+
+ const General_options& options_;
+ Symbol_table* symtab_;
+ Layout* layout_;
+ Task_token* symtab_lock_;
+ Task_token* blocker_;
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_COMMON_H)
diff --git a/gold/config.in b/gold/config.in
new file mode 100644
index 000000000000..1d40c66bac36
--- /dev/null
+++ b/gold/config.in
@@ -0,0 +1,75 @@
+/* config.in. Generated from configure.ac by autoheader. */
+
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
+#undef ENABLE_NLS
+
+/* Define to 1 if you have the <ext/hash_map> header file. */
+#undef HAVE_EXT_HASH_MAP
+
+/* Define to 1 if you have the <ext/hash_set> header file. */
+#undef HAVE_EXT_HASH_SET
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Whether the C++ compiler can call a template member with no arguments */
+#undef HAVE_MEMBER_TEMPLATE_SPECIFICATIONS
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/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 <tr1/unordered_map> header file. */
+#undef HAVE_TR1_UNORDERED_MAP
+
+/* Define to 1 if you have the <tr1/unordered_set> header file. */
+#undef HAVE_TR1_UNORDERED_SET
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* 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
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if your processor stores words with the most significant byte
+ first (like Motorola and SPARC, unlike Intel and VAX). */
+#undef WORDS_BIGENDIAN
diff --git a/gold/configure b/gold/configure
new file mode 100755
index 000000000000..5d69594d33fb
--- /dev/null
+++ b/gold/configure
@@ -0,0 +1,6715 @@
+#! /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="gold.cc"
+# 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 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 CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE YACC RANLIB ac_ct_RANLIB USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT MKINSTALLDIRS MSGFMT MSGMERGE WARN_CFLAGS NO_WERROR WARN_CXXFLAGS LFS_CXXFLAGS CXXCPP EGREP MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBOBJS LTLIBOBJS'
+ac_subst_files=''
+
+# 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_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_CXXCPP_set=${CXXCPP+set}
+ac_env_CXXCPP_value=$CXXCPP
+ac_cv_env_CXXCPP_set=${CXXCPP+set}
+ac_cv_env_CXXCPP_value=$CXXCPP
+
+#
+# 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
+ --disable-nls do not use Native Language Support
+ --enable-werror treat compile warnings as errors
+ --enable-build-warnings enable build-time compiler warnings
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+
+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>
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ CXXCPP 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}-
+
+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
+
+# 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=gold
+ VERSION=0.1
+
+
+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 -'
+
+
+
+
+
+
+ ac_config_headers="$ac_config_headers config.h:config.in"
+
+
+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
+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
+
+
+
+
+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
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+ 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_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # 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_CXX="$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
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+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_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_CXX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+ CXX=$ac_ct_CXX
+fi
+
+
+# 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_cxx_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_cxx_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_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_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_cxx_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_cxx_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+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_cxx_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_cxx_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
+
+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
+
+depcc="$CXX" 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_CXX_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_CXX_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_CXX_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+
+
+if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+ am__fastdepCXX_TRUE=
+ am__fastdepCXX_FALSE='#'
+else
+ am__fastdepCXX_TRUE='#'
+ am__fastdepCXX_FALSE=
+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"
+
+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
+
+# 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'
+
+# If we haven't got the data from the intl directory,
+# assume NLS is disabled.
+USE_NLS=no
+LIBINTL=
+LIBINTL_DEP=
+INCINTL=
+XGETTEXT=
+GMSGFMT=
+POSUB=
+
+if test -f ../intl/config.intl; then
+ . ../intl/config.intl
+fi
+echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
+if test x"$USE_NLS" != xyes; then
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+
+ echo "$as_me:$LINENO: checking for catalogs to be installed" >&5
+echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6
+ # Look for .po and .gmo files in the source directory.
+ CATALOGS=
+ XLINGUAS=
+ for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
+ # If there aren't any .gmo files the shell will give us the
+ # literal string "../path/to/srcdir/po/*.gmo" which has to be
+ # weeded out.
+ case "$cat" in *\**)
+ continue;;
+ esac
+ # The quadruple backslash is collapsed to a double backslash
+ # by the backticks, then collapsed again by the double quotes,
+ # leaving us with one backslash in the sed expression (right
+ # before the dot that mustn't act as a wildcard).
+ cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
+ lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
+ # The user is allowed to set LINGUAS to a list of languages to
+ # install catalogs for. If it's empty that means "all of them."
+ if test "x$LINGUAS" = x; then
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ else
+ case "$LINGUAS" in *$lang*)
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ ;;
+ esac
+ fi
+ done
+ LINGUAS="$XLINGUAS"
+ echo "$as_me:$LINENO: result: $LINGUAS" >&5
+echo "${ECHO_T}$LINGUAS" >&6
+
+
+ DATADIRNAME=share
+
+ INSTOBJEXT=.mo
+
+ GENCAT=gencat
+
+ CATOBJEXT=.gmo
+
+fi
+
+ MKINSTALLDIRS=
+ if test -n "$ac_aux_dir"; then
+ case "$ac_aux_dir" in
+ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+ esac
+ fi
+ if test -z "$MKINSTALLDIRS"; then
+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+ fi
+
+
+
+ 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
+
+
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+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.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+ 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
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+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.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+ ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+ 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
+
+ rm -f messages.po
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_MSGMERGE+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+ ;;
+esac
+fi
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+echo "${ECHO_T}$MSGMERGE" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+ if test "$GMSGFMT" != ":"; then
+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+ echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6
+ GMSGFMT=":"
+ fi
+ fi
+
+ if test "$XGETTEXT" != ":"; then
+ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
+echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
+ XGETTEXT=":"
+ fi
+ rm -f messages.po
+ fi
+
+ ac_config_commands="$ac_config_commands default-1"
+
+
+
+
+echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
+echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6
+if test "${ac_cv_c_bigendian+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # See if sys/param.h defines the BYTE_ORDER macro.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/param.h>
+
+int
+main ()
+{
+#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
+ bogus endian macros
+#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
+ # It does; now see whether it defined to BIG_ENDIAN or not.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+#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_bigendian=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_bigendian=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+# It does not; compile a test program.
+if test "$cross_compiling" = yes; then
+ # try to guess the endianness by grepping values into an object file
+ ac_cv_c_bigendian=unknown
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
+short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+int
+main ()
+{
+ _ascii (); _ebcdic ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
+ ac_cv_c_bigendian=yes
+fi
+if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+ if test "$ac_cv_c_bigendian" = unknown; then
+ ac_cv_c_bigendian=no
+ else
+ # finding both strings is unlikely to happen, but who knows?
+ ac_cv_c_bigendian=unknown
+ fi
+fi
+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
+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 ()
+{
+ /* Are we little or big endian? From Harbison&Steele. */
+ union
+ {
+ long l;
+ char c[sizeof (long)];
+ } u;
+ u.l = 1;
+ exit (u.c[sizeof (long) - 1] == 1);
+}
+_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_bigendian=no
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_bigendian=yes
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+echo "${ECHO_T}$ac_cv_c_bigendian" >&6
+case $ac_cv_c_bigendian in
+ yes)
+
+cat >>confdefs.h <<\_ACEOF
+#define WORDS_BIGENDIAN 1
+_ACEOF
+ ;;
+ no)
+ ;;
+ *)
+ { { echo "$as_me:$LINENO: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&5
+echo "$as_me: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+
+
+
+
+
+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
+
+
+
+
+
+WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//'`
+
+
+LFS_CXXFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_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
+if test -z "$CXXCPP"; then
+ if test "${ac_cv_prog_CXXCPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_cxx_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_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_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_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_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_CXXCPP=$CXXCPP
+
+fi
+ CXXCPP=$ac_cv_prog_CXXCPP
+else
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
+ac_preproc_ok=false
+for ac_cxx_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_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_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_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_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 \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_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_cxx_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
+
+# 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_cxx_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
+
+
+
+
+for ac_header in tr1/unordered_set tr1/unordered_map
+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_cxx_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_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_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_cxx_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_header in ext/hash_map ext/hash_set
+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_cxx_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_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_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_cxx_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
+
+
+cat >conftest.$ac_ext <<_ACEOF
+
+class c { public: template<int i> void fn(); };
+template<int i> void foo(c cv) { cv.fn<i>(); }
+template void foo<1>(c cv);
+_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_cxx_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
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MEMBER_TEMPLATE_SPECIFICATIONS
+_ACEOF
+
+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 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
+
+
+
+ ac_config_files="$ac_config_files Makefile testsuite/Makefile po/Makefile.in:po/Make-in"
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, 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 "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCXX\" 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"
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+ # from automake.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "testsuite/Makefile" ) CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;;
+ "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;;
+ "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+ "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,@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,@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,@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,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@CXXDEPMODE@,$CXXDEPMODE,;t t
+s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
+s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
+s,@YACC@,$YACC,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@USE_NLS@,$USE_NLS,;t t
+s,@LIBINTL@,$LIBINTL,;t t
+s,@LIBINTL_DEP@,$LIBINTL_DEP,;t t
+s,@INCINTL@,$INCINTL,;t t
+s,@XGETTEXT@,$XGETTEXT,;t t
+s,@GMSGFMT@,$GMSGFMT,;t t
+s,@POSUB@,$POSUB,;t t
+s,@CATALOGS@,$CATALOGS,;t t
+s,@DATADIRNAME@,$DATADIRNAME,;t t
+s,@INSTOBJEXT@,$INSTOBJEXT,;t t
+s,@GENCAT@,$GENCAT,;t t
+s,@CATOBJEXT@,$CATOBJEXT,;t t
+s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
+s,@MSGFMT@,$MSGFMT,;t t
+s,@MSGMERGE@,$MSGMERGE,;t t
+s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t
+s,@NO_WERROR@,$NO_WERROR,;t t
+s,@WARN_CXXFLAGS@,$WARN_CXXFLAGS,;t t
+s,@LFS_CXXFLAGS@,$LFS_CXXFLAGS,;t t
+s,@CXXCPP@,$CXXCPP,;t t
+s,@EGREP@,$EGREP,;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,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ 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-1 )
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ GMOFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
+ esac
+done
+_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/gold/configure.ac b/gold/configure.ac
new file mode 100644
index 000000000000..5cbaf2c455d9
--- /dev/null
+++ b/gold/configure.ac
@@ -0,0 +1,52 @@
+dnl Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.59)
+AC_INIT
+AC_CONFIG_SRCDIR([gold.cc])
+
+AC_CANONICAL_TARGET
+
+AM_INIT_AUTOMAKE(gold, 0.1)
+
+AM_CONFIG_HEADER(config.h:config.in)
+
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_YACC
+AC_PROG_RANLIB
+AC_PROG_INSTALL
+ZW_GNU_GETTEXT_SISTER_DIR
+AM_PO_SUBDIRS
+
+AC_C_BIGENDIAN
+
+AC_EXEEXT
+
+AM_BINUTILS_WARNINGS
+
+WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//'`
+AC_SUBST(WARN_CXXFLAGS)
+
+dnl Force support for large files by default. This may need to be
+dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
+LFS_CXXFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
+AC_SUBST(LFS_CXXFLAGS)
+
+AC_LANG_PUSH(C++)
+
+AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
+AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
+
+dnl Test whether the compiler can specify a member templates to call.
+AC_COMPILE_IFELSE([
+class c { public: template<int i> void fn(); };
+template<int i> void foo(c cv) { cv.fn<i>(); }
+template void foo<1>(c cv);],
+[AC_DEFINE(HAVE_MEMBER_TEMPLATE_SPECIFICATIONS, [],
+ [Whether the C++ compiler can call a template member with no arguments])])
+
+AC_LANG_POP(C++)
+
+AM_MAINTAINER_MODE
+
+AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
diff --git a/gold/defstd.cc b/gold/defstd.cc
new file mode 100644
index 000000000000..50a977a3b907
--- /dev/null
+++ b/gold/defstd.cc
@@ -0,0 +1,239 @@
+// defstd.cc -- define standard symbols for gold.
+
+#include "gold.h"
+
+#include "symtab.h"
+#include "defstd.h"
+
+// This is a simple file which defines the standard symbols like
+// "_end".
+
+namespace
+{
+
+using namespace gold;
+
+const Define_symbol_in_section in_section[] =
+{
+ {
+ "__preinit_array_start", // name
+ ".preinit_array", // output_section
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_HIDDEN, // visibility
+ 0, // nonvis
+ false, // offset_is_from_end
+ true // only_if_ref
+ },
+ {
+ "__preinit_array_end", // name
+ ".preinit_array", // output_section
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_HIDDEN, // visibility
+ 0, // nonvis
+ true, // offset_is_from_end
+ true // only_if_ref
+ },
+ {
+ "__init_array_start", // name
+ ".init_array", // output_section
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_HIDDEN, // visibility
+ 0, // nonvis
+ false, // offset_is_from_end
+ true // only_if_ref
+ },
+ {
+ "__init_array_end", // name
+ ".init_array", // output_section
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_HIDDEN, // visibility
+ 0, // nonvis
+ true, // offset_is_from_end
+ true // only_if_ref
+ },
+ {
+ "__fini_array_start", // name
+ ".fini_array", // output_section
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_HIDDEN, // visibility
+ 0, // nonvis
+ false, // offset_is_from_end
+ true // only_if_ref
+ },
+ {
+ "__fini_array_end", // name
+ ".fini_array", // output_section
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_HIDDEN, // visibility
+ 0, // nonvis
+ true, // offset_is_from_end
+ true // only_if_ref
+ }
+};
+
+const int in_section_count = sizeof in_section / sizeof in_section[0];
+
+const Define_symbol_in_segment in_segment[] =
+{
+ {
+ "__executable_start", // name
+ elfcpp::PT_LOAD, // segment_type
+ elfcpp::PF(0), // segment_flags_set
+ elfcpp::PF(0), // segment_flags_clear
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_DEFAULT, // visibility
+ 0, // nonvis
+ Symbol::SEGMENT_START, // offset_from_base
+ true // only_if_ref
+ },
+ {
+ "etext", // name
+ elfcpp::PT_LOAD, // segment_type
+ elfcpp::PF_X, // segment_flags_set
+ elfcpp::PF_W, // segment_flags_clear
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_DEFAULT, // visibility
+ 0, // nonvis
+ Symbol::SEGMENT_END, // offset_from_base
+ true // only_if_ref
+ },
+ {
+ "_etext", // name
+ elfcpp::PT_LOAD, // segment_type
+ elfcpp::PF_X, // segment_flags_set
+ elfcpp::PF_W, // segment_flags_clear
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_DEFAULT, // visibility
+ 0, // nonvis
+ Symbol::SEGMENT_END, // offset_from_base
+ true // only_if_ref
+ },
+ {
+ "__etext", // name
+ elfcpp::PT_LOAD, // segment_type
+ elfcpp::PF_X, // segment_flags_set
+ elfcpp::PF_W, // segment_flags_clear
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_DEFAULT, // visibility
+ 0, // nonvis
+ Symbol::SEGMENT_END, // offset_from_base
+ true // only_if_ref
+ },
+ {
+ "_edata", // name
+ elfcpp::PT_LOAD, // segment_type
+ elfcpp::PF_X, // segment_flags_set
+ elfcpp::PF(0), // segment_flags_clear
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_DEFAULT, // visibility
+ 0, // nonvis
+ Symbol::SEGMENT_BSS, // offset_from_base
+ false // only_if_ref
+ },
+ {
+ "edata", // name
+ elfcpp::PT_LOAD, // segment_type
+ elfcpp::PF_X, // segment_flags_set
+ elfcpp::PF(0), // segment_flags_clear
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_DEFAULT, // visibility
+ 0, // nonvis
+ Symbol::SEGMENT_BSS, // offset_from_base
+ true // only_if_ref
+ },
+ {
+ "__bss_start", // name
+ elfcpp::PT_LOAD, // segment_type
+ elfcpp::PF_X, // segment_flags_set
+ elfcpp::PF(0), // segment_flags_clear
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_DEFAULT, // visibility
+ 0, // nonvis
+ Symbol::SEGMENT_BSS, // offset_from_base
+ false // only_if_ref
+ },
+ {
+ "_end", // name
+ elfcpp::PT_LOAD, // segment_type
+ elfcpp::PF_X, // segment_flags_set
+ elfcpp::PF(0), // segment_flags_clear
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_DEFAULT, // visibility
+ 0, // nonvis
+ Symbol::SEGMENT_START, // offset_from_base
+ false // only_if_ref
+ },
+ {
+ "end", // name
+ elfcpp::PT_LOAD, // segment_type
+ elfcpp::PF_X, // segment_flags_set
+ elfcpp::PF(0), // segment_flags_clear
+ 0, // value
+ 0, // size
+ elfcpp::STT_NOTYPE, // type
+ elfcpp::STB_GLOBAL, // binding
+ elfcpp::STV_DEFAULT, // visibility
+ 0, // nonvis
+ Symbol::SEGMENT_START, // offset_from_base
+ false // only_if_ref
+ }
+};
+
+const int in_segment_count = sizeof in_segment / sizeof in_segment[0];
+
+} // End anonymous namespace.
+
+namespace gold
+{
+
+void
+define_standard_symbols(Symbol_table* symtab, const Layout* layout,
+ Target* target)
+{
+ symtab->define_symbols(layout, target, in_section_count, in_section);
+ symtab->define_symbols(layout, target, in_segment_count, in_segment);
+}
+
+} // End namespace gold.
diff --git a/gold/defstd.h b/gold/defstd.h
new file mode 100644
index 000000000000..f578b49d76f2
--- /dev/null
+++ b/gold/defstd.h
@@ -0,0 +1,16 @@
+// defstd.h -- define standard symbols for gold -*- C++ -*-
+
+#ifndef GOLD_DEFSTD_H
+#define GOLD_DEFSTD_H
+
+#include "symtab.h"
+
+namespace gold
+{
+
+extern void
+define_standard_symbols(Symbol_table*, const Layout*, Target*);
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_DEFSTD_H)
diff --git a/gold/dirsearch.cc b/gold/dirsearch.cc
new file mode 100644
index 000000000000..d1298d81757d
--- /dev/null
+++ b/gold/dirsearch.cc
@@ -0,0 +1,236 @@
+// dirsearch.cc -- directory searching for gold
+
+#include "gold.h"
+
+#include <cerrno>
+#include <sys/types.h>
+#include <dirent.h>
+
+#include "gold-threads.h"
+#include "dirsearch.h"
+
+namespace
+{
+
+// Read all the files in a directory.
+
+class Dir_cache
+{
+ public:
+ Dir_cache(const char* dirname)
+ : dirname_(dirname), files_()
+ { }
+
+ // Read the files in the directory.
+ void read_files();
+
+ // Return whether a file (a base name) is present in the directory.
+ bool find(const std::string&) const;
+
+ private:
+ // We can not copy this class.
+ Dir_cache(const Dir_cache&);
+ Dir_cache& operator=(const Dir_cache&);
+
+ const char* dirname_;
+ Unordered_set<std::string> files_;
+};
+
+void
+Dir_cache::read_files()
+{
+ DIR* d = opendir(this->dirname_);
+ if (d == NULL)
+ {
+ // We ignore directories which do not exist.
+ if (errno == ENOENT)
+ return;
+
+ char *s = NULL;
+ if (asprintf(&s, _("can not read directory %s"), this->dirname_) < 0)
+ gold::gold_nomem();
+ gold::gold_fatal(s, true);
+ }
+
+ dirent* de;
+ while ((de = readdir(d)) != NULL)
+ this->files_.insert(std::string(de->d_name));
+
+ if (closedir(d) != 0)
+ gold::gold_fatal("closedir failed", true);
+}
+
+bool
+Dir_cache::find(const std::string& basename) const
+{
+ return this->files_.find(basename) != this->files_.end();
+}
+
+// A mapping from directory names to caches. A lock permits
+// concurrent update. There is no lock for read operations--some
+// other mechanism must be used to prevent reads from conflicting with
+// writes.
+
+class Dir_caches
+{
+ public:
+ Dir_caches()
+ : lock_(), caches_()
+ { }
+
+ ~Dir_caches();
+
+ // Add a cache for a directory.
+ void add(const char*);
+
+ // Look up a directory in the cache. This much be locked against
+ // calls to Add.
+ Dir_cache* lookup(const char*) const;
+
+ private:
+ // We can not copy this class.
+ Dir_caches(const Dir_caches&);
+ Dir_caches& operator=(const Dir_caches&);
+
+ typedef Unordered_map<const char*, Dir_cache*> Cache_hash;
+
+ gold::Lock lock_;
+ Cache_hash caches_;
+};
+
+Dir_caches::~Dir_caches()
+{
+ for (Cache_hash::iterator p = this->caches_.begin();
+ p != this->caches_.end();
+ ++p)
+ delete p->second;
+}
+
+void
+Dir_caches::add(const char* dirname)
+{
+ {
+ gold::Hold_lock hl(this->lock_);
+ if (this->lookup(dirname) != NULL)
+ return;
+ }
+
+ Dir_cache* cache = new Dir_cache(dirname);
+
+ cache->read_files();
+
+ {
+ gold::Hold_lock hl(this->lock_);
+
+ std::pair<const char*, Dir_cache*> v(dirname, cache);
+ std::pair<Cache_hash::iterator, bool> p = this->caches_.insert(v);
+ gold_assert(p.second);
+ }
+}
+
+Dir_cache*
+Dir_caches::lookup(const char* dirname) const
+{
+ Cache_hash::const_iterator p = this->caches_.find(dirname);
+ if (p == this->caches_.end())
+ return NULL;
+ return p->second;
+}
+
+// The caches.
+
+Dir_caches caches;
+
+// A Task to read the directory.
+
+class Dir_cache_task : public gold::Task
+{
+ public:
+ Dir_cache_task(const char* dir, gold::Task_token& token)
+ : dir_(dir), token_(token)
+ { }
+
+ Is_runnable_type is_runnable(gold::Workqueue*);
+
+ gold::Task_locker* locks(gold::Workqueue*);
+
+ void run(gold::Workqueue*);
+
+ private:
+ const char* dir_;
+ gold::Task_token& token_;
+};
+
+// We can always run the task to read the directory.
+
+gold::Task::Is_runnable_type
+Dir_cache_task::is_runnable(gold::Workqueue*)
+{
+ return IS_RUNNABLE;
+}
+
+// Return the locks to hold. We use a blocker lock to prevent file
+// lookups from starting until the directory contents have been read.
+
+gold::Task_locker*
+Dir_cache_task::locks(gold::Workqueue* workqueue)
+{
+ return new gold::Task_locker_block(this->token_, workqueue);
+}
+
+// Run the task--read the directory contents.
+
+void
+Dir_cache_task::run(gold::Workqueue*)
+{
+ caches.add(this->dir_);
+}
+
+}
+
+namespace gold
+{
+
+Dirsearch::Dirsearch()
+ : directories_(), token_()
+{
+}
+
+void
+Dirsearch::add(Workqueue* workqueue, const char* d)
+{
+ this->directories_.push_back(d);
+ this->token_.add_blocker();
+ workqueue->queue(new Dir_cache_task(d, this->token_));
+}
+
+void
+Dirsearch::add(Workqueue* workqueue, const General_options::Dir_list& list)
+{
+ for (General_options::Dir_list::const_iterator p = list.begin();
+ p != list.end();
+ ++p)
+ this->add(workqueue, *p);
+}
+
+std::string
+Dirsearch::find(const std::string& n1, const std::string& n2) const
+{
+ gold_assert(!this->token_.is_blocked());
+
+ for (std::list<const char*>::const_iterator p = this->directories_.begin();
+ p != this->directories_.end();
+ ++p)
+ {
+ Dir_cache* pdc = caches.lookup(*p);
+ gold_assert(pdc != NULL);
+ if (pdc->find(n1))
+ return std::string(*p) + '/' + n1;
+ if (!n2.empty() && pdc->find(n2))
+ return std::string(*p) + '/' + n2;
+ }
+
+ return std::string();
+}
+
+} // End namespace gold.
diff --git a/gold/dirsearch.h b/gold/dirsearch.h
new file mode 100644
index 000000000000..8b6ba59bf583
--- /dev/null
+++ b/gold/dirsearch.h
@@ -0,0 +1,57 @@
+// dirsearch.h -- directory searching for gold -*- C++ -*-
+
+#ifndef GOLD_DIRSEARCH_H
+#define GOLD_DIRSEARCH_H
+
+#include <string>
+#include <list>
+
+#include "workqueue.h"
+
+namespace gold
+{
+
+class General_options;
+
+// A simple interface to manage directories to be searched for
+// libraries.
+
+class Dirsearch
+{
+ public:
+ Dirsearch();
+
+ // Add a directory to the search path.
+ void
+ add(Workqueue*, const char*);
+
+ // Add a list of directories to the search path.
+ void
+ add(Workqueue*, const General_options::Dir_list&);
+
+ // Search for a file, giving one or two names to search for (the
+ // second one may be empty). Return a full path name for the file,
+ // or the empty string if it could not be found. This may only be
+ // called if the token is not blocked.
+ std::string
+ find(const std::string&, const std::string& n2 = std::string()) const;
+
+ // Return a reference to the blocker token which controls access.
+ const Task_token&
+ token() const
+ { return this->token_; }
+
+ private:
+ // We can not copy this class.
+ Dirsearch(const Dirsearch&);
+ Dirsearch& operator=(const Dirsearch&);
+
+ // Directories to search.
+ std::list<const char*> directories_;
+ // Blocker token to control access from tasks.
+ Task_token token_;
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_DIRSEARCH_H)
diff --git a/gold/dynobj.cc b/gold/dynobj.cc
new file mode 100644
index 000000000000..1bd5a85e4392
--- /dev/null
+++ b/gold/dynobj.cc
@@ -0,0 +1,1647 @@
+// dynobj.cc -- dynamic object support for gold
+
+#include "gold.h"
+
+#include <vector>
+#include <cstring>
+
+#include "elfcpp.h"
+#include "symtab.h"
+#include "dynobj.h"
+
+namespace gold
+{
+
+// Class Dynobj.
+
+// Return the string to use in a DT_NEEDED entry.
+
+const char*
+Dynobj::soname() const
+{
+ if (!this->soname_.empty())
+ return this->soname_.c_str();
+ return this->name().c_str();
+}
+
+// Class Sized_dynobj.
+
+template<int size, bool big_endian>
+Sized_dynobj<size, big_endian>::Sized_dynobj(
+ const std::string& name,
+ Input_file* input_file,
+ off_t offset,
+ const elfcpp::Ehdr<size, big_endian>& ehdr)
+ : Dynobj(name, input_file, offset),
+ elf_file_(this, ehdr)
+{
+}
+
+// Set up the object.
+
+template<int size, bool big_endian>
+void
+Sized_dynobj<size, big_endian>::setup(
+ const elfcpp::Ehdr<size, big_endian>& ehdr)
+{
+ this->set_target(ehdr.get_e_machine(), size, big_endian,
+ ehdr.get_e_ident()[elfcpp::EI_OSABI],
+ ehdr.get_e_ident()[elfcpp::EI_ABIVERSION]);
+
+ const unsigned int shnum = this->elf_file_.shnum();
+ this->set_shnum(shnum);
+}
+
+// Find the SHT_DYNSYM section and the various version sections, and
+// the dynamic section, given the section headers.
+
+template<int size, bool big_endian>
+void
+Sized_dynobj<size, big_endian>::find_dynsym_sections(
+ const unsigned char* pshdrs,
+ unsigned int* pdynsym_shndx,
+ unsigned int* pversym_shndx,
+ unsigned int* pverdef_shndx,
+ unsigned int* pverneed_shndx,
+ unsigned int* pdynamic_shndx)
+{
+ *pdynsym_shndx = -1U;
+ *pversym_shndx = -1U;
+ *pverdef_shndx = -1U;
+ *pverneed_shndx = -1U;
+ *pdynamic_shndx = -1U;
+
+ const unsigned int shnum = this->shnum();
+ const unsigned char* p = pshdrs;
+ for (unsigned int i = 0; i < shnum; ++i, p += This::shdr_size)
+ {
+ typename This::Shdr shdr(p);
+
+ unsigned int* pi;
+ switch (shdr.get_sh_type())
+ {
+ case elfcpp::SHT_DYNSYM:
+ pi = pdynsym_shndx;
+ break;
+ case elfcpp::SHT_GNU_versym:
+ pi = pversym_shndx;
+ break;
+ case elfcpp::SHT_GNU_verdef:
+ pi = pverdef_shndx;
+ break;
+ case elfcpp::SHT_GNU_verneed:
+ pi = pverneed_shndx;
+ break;
+ case elfcpp::SHT_DYNAMIC:
+ pi = pdynamic_shndx;
+ break;
+ default:
+ pi = NULL;
+ break;
+ }
+
+ if (pi == NULL)
+ continue;
+
+ if (*pi != -1U)
+ {
+ fprintf(stderr,
+ _("%s: %s: unexpected duplicate type %u section: %u, %u\n"),
+ program_name, this->name().c_str(), shdr.get_sh_type(),
+ *pi, i);
+ gold_exit(false);
+ }
+
+ *pi = i;
+ }
+}
+
+// Read the contents of section SHNDX. PSHDRS points to the section
+// headers. TYPE is the expected section type. LINK is the expected
+// section link. Store the data in *VIEW and *VIEW_SIZE. The
+// section's sh_info field is stored in *VIEW_INFO.
+
+template<int size, bool big_endian>
+void
+Sized_dynobj<size, big_endian>::read_dynsym_section(
+ const unsigned char* pshdrs,
+ unsigned int shndx,
+ elfcpp::SHT type,
+ unsigned int link,
+ File_view** view,
+ off_t* view_size,
+ unsigned int* view_info)
+{
+ if (shndx == -1U)
+ {
+ *view = NULL;
+ *view_size = 0;
+ *view_info = 0;
+ return;
+ }
+
+ typename This::Shdr shdr(pshdrs + shndx * This::shdr_size);
+
+ gold_assert(shdr.get_sh_type() == type);
+
+ if (shdr.get_sh_link() != link)
+ {
+ fprintf(stderr,
+ _("%s: %s: unexpected link in section %u header: %u != %u\n"),
+ program_name, this->name().c_str(), shndx,
+ shdr.get_sh_link(), link);
+ gold_exit(false);
+ }
+
+ *view = this->get_lasting_view(shdr.get_sh_offset(), shdr.get_sh_size());
+ *view_size = shdr.get_sh_size();
+ *view_info = shdr.get_sh_info();
+}
+
+// Set the soname field if this shared object has a DT_SONAME tag.
+// PSHDRS points to the section headers. DYNAMIC_SHNDX is the section
+// index of the SHT_DYNAMIC section. STRTAB_SHNDX, STRTAB, and
+// STRTAB_SIZE are the section index and contents of a string table
+// which may be the one associated with the SHT_DYNAMIC section.
+
+template<int size, bool big_endian>
+void
+Sized_dynobj<size, big_endian>::set_soname(const unsigned char* pshdrs,
+ unsigned int dynamic_shndx,
+ unsigned int strtab_shndx,
+ const unsigned char* strtabu,
+ off_t strtab_size)
+{
+ typename This::Shdr dynamicshdr(pshdrs + dynamic_shndx * This::shdr_size);
+ gold_assert(dynamicshdr.get_sh_type() == elfcpp::SHT_DYNAMIC);
+
+ const off_t dynamic_size = dynamicshdr.get_sh_size();
+ const unsigned char* pdynamic = this->get_view(dynamicshdr.get_sh_offset(),
+ dynamic_size);
+
+ const unsigned int link = dynamicshdr.get_sh_link();
+ if (link != strtab_shndx)
+ {
+ if (link >= this->shnum())
+ {
+ fprintf(stderr,
+ _("%s: %s: DYNAMIC section %u link out of range: %u\n"),
+ program_name, this->name().c_str(),
+ dynamic_shndx, link);
+ gold_exit(false);
+ }
+
+ typename This::Shdr strtabshdr(pshdrs + link * This::shdr_size);
+ if (strtabshdr.get_sh_type() != elfcpp::SHT_STRTAB)
+ {
+ fprintf(stderr,
+ _("%s: %s: DYNAMIC section %u link %u is not a strtab\n"),
+ program_name, this->name().c_str(),
+ dynamic_shndx, link);
+ gold_exit(false);
+ }
+
+ strtab_size = strtabshdr.get_sh_size();
+ strtabu = this->get_view(strtabshdr.get_sh_offset(), strtab_size);
+ }
+
+ for (const unsigned char* p = pdynamic;
+ p < pdynamic + dynamic_size;
+ p += This::dyn_size)
+ {
+ typename This::Dyn dyn(p);
+
+ if (dyn.get_d_tag() == elfcpp::DT_SONAME)
+ {
+ off_t val = dyn.get_d_val();
+ if (val >= strtab_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: DT_SONAME value out of range: "
+ "%lld >= %lld\n"),
+ program_name, this->name().c_str(),
+ static_cast<long long>(val),
+ static_cast<long long>(strtab_size));
+ gold_exit(false);
+ }
+
+ const char* strtab = reinterpret_cast<const char*>(strtabu);
+ this->set_soname_string(strtab + val);
+ return;
+ }
+
+ if (dyn.get_d_tag() == elfcpp::DT_NULL)
+ return;
+ }
+
+ fprintf(stderr, _("%s: %s: missing DT_NULL in dynamic segment\n"),
+ program_name, this->name().c_str());
+ gold_exit(false);
+}
+
+// Read the symbols and sections from a dynamic object. We read the
+// dynamic symbols, not the normal symbols.
+
+template<int size, bool big_endian>
+void
+Sized_dynobj<size, big_endian>::do_read_symbols(Read_symbols_data* sd)
+{
+ this->read_section_data(&this->elf_file_, sd);
+
+ const unsigned char* const pshdrs = sd->section_headers->data();
+
+ unsigned int dynsym_shndx;
+ unsigned int versym_shndx;
+ unsigned int verdef_shndx;
+ unsigned int verneed_shndx;
+ unsigned int dynamic_shndx;
+ this->find_dynsym_sections(pshdrs, &dynsym_shndx, &versym_shndx,
+ &verdef_shndx, &verneed_shndx, &dynamic_shndx);
+
+ unsigned int strtab_shndx = -1U;
+
+ if (dynsym_shndx == -1U)
+ {
+ sd->symbols = NULL;
+ sd->symbols_size = 0;
+ sd->symbol_names = NULL;
+ sd->symbol_names_size = 0;
+ }
+ else
+ {
+ // Get the dynamic symbols.
+ typename This::Shdr dynsymshdr(pshdrs + dynsym_shndx * This::shdr_size);
+ gold_assert(dynsymshdr.get_sh_type() == elfcpp::SHT_DYNSYM);
+
+ sd->symbols = this->get_lasting_view(dynsymshdr.get_sh_offset(),
+ dynsymshdr.get_sh_size());
+ sd->symbols_size = dynsymshdr.get_sh_size();
+
+ // Get the symbol names.
+ strtab_shndx = dynsymshdr.get_sh_link();
+ if (strtab_shndx >= this->shnum())
+ {
+ fprintf(stderr,
+ _("%s: %s: invalid dynamic symbol table name index: %u\n"),
+ program_name, this->name().c_str(), strtab_shndx);
+ gold_exit(false);
+ }
+ typename This::Shdr strtabshdr(pshdrs + strtab_shndx * This::shdr_size);
+ if (strtabshdr.get_sh_type() != elfcpp::SHT_STRTAB)
+ {
+ fprintf(stderr,
+ _("%s: %s: dynamic symbol table name section "
+ "has wrong type: %u\n"),
+ program_name, this->name().c_str(),
+ static_cast<unsigned int>(strtabshdr.get_sh_type()));
+ gold_exit(false);
+ }
+
+ sd->symbol_names = this->get_lasting_view(strtabshdr.get_sh_offset(),
+ strtabshdr.get_sh_size());
+ sd->symbol_names_size = strtabshdr.get_sh_size();
+
+ // Get the version information.
+
+ unsigned int dummy;
+ this->read_dynsym_section(pshdrs, versym_shndx, elfcpp::SHT_GNU_versym,
+ dynsym_shndx, &sd->versym, &sd->versym_size,
+ &dummy);
+
+ // We require that the version definition and need section link
+ // to the same string table as the dynamic symbol table. This
+ // is not a technical requirement, but it always happens in
+ // practice. We could change this if necessary.
+
+ this->read_dynsym_section(pshdrs, verdef_shndx, elfcpp::SHT_GNU_verdef,
+ strtab_shndx, &sd->verdef, &sd->verdef_size,
+ &sd->verdef_info);
+
+ this->read_dynsym_section(pshdrs, verneed_shndx, elfcpp::SHT_GNU_verneed,
+ strtab_shndx, &sd->verneed, &sd->verneed_size,
+ &sd->verneed_info);
+ }
+
+ // Read the SHT_DYNAMIC section to find whether this shared object
+ // has a DT_SONAME tag. This doesn't really have anything to do
+ // with reading the symbols, but this is a convenient place to do
+ // it.
+ if (dynamic_shndx != -1U)
+ this->set_soname(pshdrs, dynamic_shndx, strtab_shndx,
+ (sd->symbol_names == NULL
+ ? NULL
+ : sd->symbol_names->data()),
+ sd->symbol_names_size);
+}
+
+// Lay out the input sections for a dynamic object. We don't want to
+// include sections from a dynamic object, so all that we actually do
+// here is check for .gnu.warning sections.
+
+template<int size, bool big_endian>
+void
+Sized_dynobj<size, big_endian>::do_layout(const General_options&,
+ Symbol_table* symtab,
+ Layout*,
+ Read_symbols_data* sd)
+{
+ const unsigned int shnum = this->shnum();
+ if (shnum == 0)
+ return;
+
+ // Get the section headers.
+ const unsigned char* pshdrs = sd->section_headers->data();
+
+ // Get the section names.
+ const unsigned char* pnamesu = sd->section_names->data();
+ const char* pnames = reinterpret_cast<const char*>(pnamesu);
+
+ // Skip the first, dummy, section.
+ pshdrs += This::shdr_size;
+ for (unsigned int i = 1; i < shnum; ++i, pshdrs += This::shdr_size)
+ {
+ typename This::Shdr shdr(pshdrs);
+
+ if (shdr.get_sh_name() >= sd->section_names_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: bad section name offset for section %u: %lu\n"),
+ program_name, this->name().c_str(), i,
+ static_cast<unsigned long>(shdr.get_sh_name()));
+ gold_exit(false);
+ }
+
+ const char* name = pnames + shdr.get_sh_name();
+
+ this->handle_gnu_warning_section(name, i, symtab);
+ }
+
+ delete sd->section_headers;
+ sd->section_headers = NULL;
+ delete sd->section_names;
+ sd->section_names = NULL;
+}
+
+// Add an entry to the vector mapping version numbers to version
+// strings.
+
+template<int size, bool big_endian>
+void
+Sized_dynobj<size, big_endian>::set_version_map(
+ Version_map* version_map,
+ unsigned int ndx,
+ const char* name) const
+{
+ if (ndx >= version_map->size())
+ version_map->resize(ndx + 1);
+ if ((*version_map)[ndx] != NULL)
+ {
+ fprintf(stderr, _("%s: %s: duplicate definition for version %u\n"),
+ program_name, this->name().c_str(), ndx);
+ gold_exit(false);
+ }
+ (*version_map)[ndx] = name;
+}
+
+// Add mappings for the version definitions to VERSION_MAP.
+
+template<int size, bool big_endian>
+void
+Sized_dynobj<size, big_endian>::make_verdef_map(
+ Read_symbols_data* sd,
+ Version_map* version_map) const
+{
+ if (sd->verdef == NULL)
+ return;
+
+ const char* names = reinterpret_cast<const char*>(sd->symbol_names->data());
+ off_t names_size = sd->symbol_names_size;
+
+ const unsigned char* pverdef = sd->verdef->data();
+ off_t verdef_size = sd->verdef_size;
+ const unsigned int count = sd->verdef_info;
+
+ const unsigned char* p = pverdef;
+ for (unsigned int i = 0; i < count; ++i)
+ {
+ elfcpp::Verdef<size, big_endian> verdef(p);
+
+ if (verdef.get_vd_version() != elfcpp::VER_DEF_CURRENT)
+ {
+ fprintf(stderr, _("%s: %s: unexpected verdef version %u\n"),
+ program_name, this->name().c_str(), verdef.get_vd_version());
+ gold_exit(false);
+ }
+
+ const unsigned int vd_ndx = verdef.get_vd_ndx();
+
+ // The GNU linker clears the VERSYM_HIDDEN bit. I'm not
+ // sure why.
+
+ // The first Verdaux holds the name of this version. Subsequent
+ // ones are versions that this one depends upon, which we don't
+ // care about here.
+ const unsigned int vd_cnt = verdef.get_vd_cnt();
+ if (vd_cnt < 1)
+ {
+ fprintf(stderr, _("%s: %s: verdef vd_cnt field too small: %u\n"),
+ program_name, this->name().c_str(), vd_cnt);
+ gold_exit(false);
+ }
+
+ const unsigned int vd_aux = verdef.get_vd_aux();
+ if ((p - pverdef) + vd_aux >= verdef_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: verdef vd_aux field out of range: %u\n"),
+ program_name, this->name().c_str(), vd_aux);
+ gold_exit(false);
+ }
+
+ const unsigned char* pvda = p + vd_aux;
+ elfcpp::Verdaux<size, big_endian> verdaux(pvda);
+
+ const unsigned int vda_name = verdaux.get_vda_name();
+ if (vda_name >= names_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: verdaux vda_name field out of range: %u\n"),
+ program_name, this->name().c_str(), vda_name);
+ gold_exit(false);
+ }
+
+ this->set_version_map(version_map, vd_ndx, names + vda_name);
+
+ const unsigned int vd_next = verdef.get_vd_next();
+ if ((p - pverdef) + vd_next >= verdef_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: verdef vd_next field out of range: %u\n"),
+ program_name, this->name().c_str(), vd_next);
+ gold_exit(false);
+ }
+
+ p += vd_next;
+ }
+}
+
+// Add mappings for the required versions to VERSION_MAP.
+
+template<int size, bool big_endian>
+void
+Sized_dynobj<size, big_endian>::make_verneed_map(
+ Read_symbols_data* sd,
+ Version_map* version_map) const
+{
+ if (sd->verneed == NULL)
+ return;
+
+ const char* names = reinterpret_cast<const char*>(sd->symbol_names->data());
+ off_t names_size = sd->symbol_names_size;
+
+ const unsigned char* pverneed = sd->verneed->data();
+ const off_t verneed_size = sd->verneed_size;
+ const unsigned int count = sd->verneed_info;
+
+ const unsigned char* p = pverneed;
+ for (unsigned int i = 0; i < count; ++i)
+ {
+ elfcpp::Verneed<size, big_endian> verneed(p);
+
+ if (verneed.get_vn_version() != elfcpp::VER_NEED_CURRENT)
+ {
+ fprintf(stderr, _("%s: %s: unexpected verneed version %u\n"),
+ program_name, this->name().c_str(),
+ verneed.get_vn_version());
+ gold_exit(false);
+ }
+
+ const unsigned int vn_aux = verneed.get_vn_aux();
+
+ if ((p - pverneed) + vn_aux >= verneed_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: verneed vn_aux field out of range: %u\n"),
+ program_name, this->name().c_str(), vn_aux);
+ gold_exit(false);
+ }
+
+ const unsigned int vn_cnt = verneed.get_vn_cnt();
+ const unsigned char* pvna = p + vn_aux;
+ for (unsigned int j = 0; j < vn_cnt; ++j)
+ {
+ elfcpp::Vernaux<size, big_endian> vernaux(pvna);
+
+ const unsigned int vna_name = vernaux.get_vna_name();
+ if (vna_name >= names_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: vernaux vna_name field "
+ "out of range: %u\n"),
+ program_name, this->name().c_str(), vna_name);
+ gold_exit(false);
+ }
+
+ this->set_version_map(version_map, vernaux.get_vna_other(),
+ names + vna_name);
+
+ const unsigned int vna_next = vernaux.get_vna_next();
+ if ((pvna - pverneed) + vna_next >= verneed_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: verneed vna_next field "
+ "out of range: %u\n"),
+ program_name, this->name().c_str(), vna_next);
+ gold_exit(false);
+ }
+
+ pvna += vna_next;
+ }
+
+ const unsigned int vn_next = verneed.get_vn_next();
+ if ((p - pverneed) + vn_next >= verneed_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: verneed vn_next field out of range: %u\n"),
+ program_name, this->name().c_str(), vn_next);
+ gold_exit(false);
+ }
+
+ p += vn_next;
+ }
+}
+
+// Create a vector mapping version numbers to version strings.
+
+template<int size, bool big_endian>
+void
+Sized_dynobj<size, big_endian>::make_version_map(
+ Read_symbols_data* sd,
+ Version_map* version_map) const
+{
+ if (sd->verdef == NULL && sd->verneed == NULL)
+ return;
+
+ // A guess at the maximum version number we will see. If this is
+ // wrong we will be less efficient but still correct.
+ version_map->reserve(sd->verdef_info + sd->verneed_info * 10);
+
+ this->make_verdef_map(sd, version_map);
+ this->make_verneed_map(sd, version_map);
+}
+
+// Add the dynamic symbols to the symbol table.
+
+template<int size, bool big_endian>
+void
+Sized_dynobj<size, big_endian>::do_add_symbols(Symbol_table* symtab,
+ Read_symbols_data* sd)
+{
+ if (sd->symbols == NULL)
+ {
+ gold_assert(sd->symbol_names == NULL);
+ gold_assert(sd->versym == NULL && sd->verdef == NULL
+ && sd->verneed == NULL);
+ return;
+ }
+
+ const int sym_size = This::sym_size;
+ const size_t symcount = sd->symbols_size / sym_size;
+ if (symcount * sym_size != sd->symbols_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: size of dynamic symbols is not "
+ "multiple of symbol size\n"),
+ program_name, this->name().c_str());
+ gold_exit(false);
+ }
+
+ Version_map version_map;
+ this->make_version_map(sd, &version_map);
+
+ const char* sym_names =
+ reinterpret_cast<const char*>(sd->symbol_names->data());
+ symtab->add_from_dynobj(this, sd->symbols->data(), symcount,
+ sym_names, sd->symbol_names_size,
+ (sd->versym == NULL
+ ? NULL
+ : sd->versym->data()),
+ sd->versym_size,
+ &version_map);
+
+ delete sd->symbols;
+ sd->symbols = NULL;
+ delete sd->symbol_names;
+ sd->symbol_names = NULL;
+ if (sd->versym != NULL)
+ {
+ delete sd->versym;
+ sd->versym = NULL;
+ }
+ if (sd->verdef != NULL)
+ {
+ delete sd->verdef;
+ sd->verdef = NULL;
+ }
+ if (sd->verneed != NULL)
+ {
+ delete sd->verneed;
+ sd->verneed = NULL;
+ }
+}
+
+// Given a vector of hash codes, compute the number of hash buckets to
+// use.
+
+unsigned int
+Dynobj::compute_bucket_count(const std::vector<uint32_t>& hashcodes,
+ bool for_gnu_hash_table)
+{
+ // FIXME: Implement optional hash table optimization.
+
+ // Array used to determine the number of hash table buckets to use
+ // based on the number of symbols there are. If there are fewer
+ // than 3 symbols we use 1 bucket, fewer than 17 symbols we use 3
+ // buckets, fewer than 37 we use 17 buckets, and so forth. We never
+ // use more than 32771 buckets. This is straight from the old GNU
+ // linker.
+ static const unsigned int buckets[] =
+ {
+ 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
+ 16411, 32771
+ };
+ const int buckets_count = sizeof buckets / sizeof buckets[0];
+
+ unsigned int symcount = hashcodes.size();
+ unsigned int ret = 1;
+ for (int i = 0; i < buckets_count; ++i)
+ {
+ if (symcount < buckets[i])
+ break;
+ ret = buckets[i];
+ }
+
+ if (for_gnu_hash_table && ret < 2)
+ ret = 2;
+
+ return ret;
+}
+
+// The standard ELF hash function. This hash function must not
+// change, as the dynamic linker uses it also.
+
+uint32_t
+Dynobj::elf_hash(const char* name)
+{
+ const unsigned char* nameu = reinterpret_cast<const unsigned char*>(name);
+ uint32_t h = 0;
+ unsigned char c;
+ while ((c = *nameu++) != '\0')
+ {
+ h = (h << 4) + c;
+ uint32_t g = h & 0xf0000000;
+ if (g != 0)
+ {
+ h ^= g >> 24;
+ // The ELF ABI says h &= ~g, but using xor is equivalent in
+ // this case (since g was set from h) and may save one
+ // instruction.
+ h ^= g;
+ }
+ }
+ return h;
+}
+
+// Create a standard ELF hash table, setting *PPHASH and *PHASHLEN.
+// DYNSYMS is a vector with all the global dynamic symbols.
+// LOCAL_DYNSYM_COUNT is the number of local symbols in the dynamic
+// symbol table.
+
+void
+Dynobj::create_elf_hash_table(const Target* target,
+ const std::vector<Symbol*>& dynsyms,
+ unsigned int local_dynsym_count,
+ unsigned char** pphash,
+ unsigned int* phashlen)
+{
+ unsigned int dynsym_count = dynsyms.size();
+
+ // Get the hash values for all the symbols.
+ std::vector<uint32_t> dynsym_hashvals(dynsym_count);
+ for (unsigned int i = 0; i < dynsym_count; ++i)
+ dynsym_hashvals[i] = Dynobj::elf_hash(dynsyms[i]->name());
+
+ const unsigned int bucketcount =
+ Dynobj::compute_bucket_count(dynsym_hashvals, false);
+
+ std::vector<uint32_t> bucket(bucketcount);
+ std::vector<uint32_t> chain(local_dynsym_count + dynsym_count);
+
+ for (unsigned int i = 0; i < dynsym_count; ++i)
+ {
+ unsigned int dynsym_index = dynsyms[i]->dynsym_index();
+ unsigned int bucketpos = dynsym_hashvals[i] % bucketcount;
+ chain[dynsym_index] = bucket[bucketpos];
+ bucket[bucketpos] = dynsym_index;
+ }
+
+ unsigned int hashlen = ((2
+ + bucketcount
+ + local_dynsym_count
+ + dynsym_count)
+ * 4);
+ unsigned char* phash = new unsigned char[hashlen];
+
+ if (target->is_big_endian())
+ Dynobj::sized_create_elf_hash_table<true>(bucket, chain, phash, hashlen);
+ else
+ Dynobj::sized_create_elf_hash_table<false>(bucket, chain, phash, hashlen);
+
+ *pphash = phash;
+ *phashlen = hashlen;
+}
+
+// Fill in an ELF hash table.
+
+template<bool big_endian>
+void
+Dynobj::sized_create_elf_hash_table(const std::vector<uint32_t>& bucket,
+ const std::vector<uint32_t>& chain,
+ unsigned char* phash,
+ unsigned int hashlen)
+{
+ unsigned char* p = phash;
+
+ const unsigned int bucketcount = bucket.size();
+ const unsigned int chaincount = chain.size();
+
+ elfcpp::Swap<32, big_endian>::writeval(p, bucketcount);
+ p += 4;
+ elfcpp::Swap<32, big_endian>::writeval(p, chaincount);
+ p += 4;
+
+ for (unsigned int i = 0; i < bucketcount; ++i)
+ {
+ elfcpp::Swap<32, big_endian>::writeval(p, bucket[i]);
+ p += 4;
+ }
+
+ for (unsigned int i = 0; i < chaincount; ++i)
+ {
+ elfcpp::Swap<32, big_endian>::writeval(p, chain[i]);
+ p += 4;
+ }
+
+ gold_assert(static_cast<unsigned int>(p - phash) == hashlen);
+}
+
+// The hash function used for the GNU hash table. This hash function
+// must not change, as the dynamic linker uses it also.
+
+uint32_t
+Dynobj::gnu_hash(const char* name)
+{
+ const unsigned char* nameu = reinterpret_cast<const unsigned char*>(name);
+ uint32_t h = 5381;
+ unsigned char c;
+ while ((c = *nameu++) != '\0')
+ h = (h << 5) + h + c;
+ return h;
+}
+
+// Create a GNU hash table, setting *PPHASH and *PHASHLEN. GNU hash
+// tables are an extension to ELF which are recognized by the GNU
+// dynamic linker. They are referenced using dynamic tag DT_GNU_HASH.
+// TARGET is the target. DYNSYMS is a vector with all the global
+// symbols which will be going into the dynamic symbol table.
+// LOCAL_DYNSYM_COUNT is the number of local symbols in the dynamic
+// symbol table.
+
+void
+Dynobj::create_gnu_hash_table(const Target* target,
+ const std::vector<Symbol*>& dynsyms,
+ unsigned int local_dynsym_count,
+ unsigned char** pphash,
+ unsigned int* phashlen)
+{
+ const unsigned int count = dynsyms.size();
+
+ // Sort the dynamic symbols into two vectors. Symbols which we do
+ // not want to put into the hash table we store into
+ // UNHASHED_DYNSYMS. Symbols which we do want to store we put into
+ // HASHED_DYNSYMS. DYNSYM_HASHVALS is parallel to HASHED_DYNSYMS,
+ // and records the hash codes.
+
+ std::vector<Symbol*> unhashed_dynsyms;
+ unhashed_dynsyms.reserve(count);
+
+ std::vector<Symbol*> hashed_dynsyms;
+ hashed_dynsyms.reserve(count);
+
+ std::vector<uint32_t> dynsym_hashvals;
+ dynsym_hashvals.reserve(count);
+
+ for (unsigned int i = 0; i < count; ++i)
+ {
+ Symbol* sym = dynsyms[i];
+
+ // FIXME: Should put on unhashed_dynsyms if the symbol is
+ // hidden.
+ if (sym->is_undefined())
+ unhashed_dynsyms.push_back(sym);
+ else
+ {
+ hashed_dynsyms.push_back(sym);
+ dynsym_hashvals.push_back(Dynobj::gnu_hash(sym->name()));
+ }
+ }
+
+ // Put the unhashed symbols at the start of the global portion of
+ // the dynamic symbol table.
+ const unsigned int unhashed_count = unhashed_dynsyms.size();
+ unsigned int unhashed_dynsym_index = local_dynsym_count;
+ for (unsigned int i = 0; i < unhashed_count; ++i)
+ {
+ unhashed_dynsyms[i]->set_dynsym_index(unhashed_dynsym_index);
+ ++unhashed_dynsym_index;
+ }
+
+ // For the actual data generation we call out to a templatized
+ // function.
+ int size = target->get_size();
+ bool big_endian = target->is_big_endian();
+ if (size == 32)
+ {
+ if (big_endian)
+ Dynobj::sized_create_gnu_hash_table<32, true>(hashed_dynsyms,
+ dynsym_hashvals,
+ unhashed_dynsym_index,
+ pphash,
+ phashlen);
+ else
+ Dynobj::sized_create_gnu_hash_table<32, false>(hashed_dynsyms,
+ dynsym_hashvals,
+ unhashed_dynsym_index,
+ pphash,
+ phashlen);
+ }
+ else if (size == 64)
+ {
+ if (big_endian)
+ Dynobj::sized_create_gnu_hash_table<64, true>(hashed_dynsyms,
+ dynsym_hashvals,
+ unhashed_dynsym_index,
+ pphash,
+ phashlen);
+ else
+ Dynobj::sized_create_gnu_hash_table<64, false>(hashed_dynsyms,
+ dynsym_hashvals,
+ unhashed_dynsym_index,
+ pphash,
+ phashlen);
+ }
+ else
+ gold_unreachable();
+}
+
+// Create the actual data for a GNU hash table. This is just a copy
+// of the code from the old GNU linker.
+
+template<int size, bool big_endian>
+void
+Dynobj::sized_create_gnu_hash_table(
+ const std::vector<Symbol*>& hashed_dynsyms,
+ const std::vector<uint32_t>& dynsym_hashvals,
+ unsigned int unhashed_dynsym_count,
+ unsigned char** pphash,
+ unsigned int* phashlen)
+{
+ if (hashed_dynsyms.empty())
+ {
+ // Special case for the empty hash table.
+ unsigned int hashlen = 5 * 4 + size / 8;
+ unsigned char* phash = new unsigned char[hashlen];
+ // One empty bucket.
+ elfcpp::Swap<32, big_endian>::writeval(phash, 1);
+ // Symbol index above unhashed symbols.
+ elfcpp::Swap<32, big_endian>::writeval(phash + 4, unhashed_dynsym_count);
+ // One word for bitmask.
+ elfcpp::Swap<32, big_endian>::writeval(phash + 8, 1);
+ // Only bloom filter.
+ elfcpp::Swap<32, big_endian>::writeval(phash + 12, 0);
+ // No valid hashes.
+ elfcpp::Swap<size, big_endian>::writeval(phash + 16, 0);
+ // No hashes in only bucket.
+ elfcpp::Swap<32, big_endian>::writeval(phash + 16 + size / 8, 0);
+
+ *phashlen = hashlen;
+ *pphash = phash;
+
+ return;
+ }
+
+ const unsigned int bucketcount =
+ Dynobj::compute_bucket_count(dynsym_hashvals, true);
+
+ const unsigned int nsyms = hashed_dynsyms.size();
+
+ uint32_t maskbitslog2 = 1;
+ uint32_t x = nsyms >> 1;
+ while (x != 0)
+ {
+ ++maskbitslog2;
+ x >>= 1;
+ }
+ if (maskbitslog2 < 3)
+ maskbitslog2 = 5;
+ else if (((1U << (maskbitslog2 - 2)) & nsyms) != 0)
+ maskbitslog2 += 3;
+ else
+ maskbitslog2 += 2;
+
+ uint32_t shift1;
+ if (size == 32)
+ shift1 = 5;
+ else
+ {
+ if (maskbitslog2 == 5)
+ maskbitslog2 = 6;
+ shift1 = 6;
+ }
+ uint32_t mask = (1U << shift1) - 1U;
+ uint32_t shift2 = maskbitslog2;
+ uint32_t maskbits = 1U << maskbitslog2;
+ uint32_t maskwords = 1U << (maskbitslog2 - shift1);
+
+ typedef typename elfcpp::Elf_types<size>::Elf_WXword Word;
+ std::vector<Word> bitmask(maskwords);
+ std::vector<uint32_t> counts(bucketcount);
+ std::vector<uint32_t> indx(bucketcount);
+ uint32_t symindx = unhashed_dynsym_count;
+
+ // Count the number of times each hash bucket is used.
+ for (unsigned int i = 0; i < nsyms; ++i)
+ ++counts[dynsym_hashvals[i] % bucketcount];
+
+ unsigned int cnt = symindx;
+ for (unsigned int i = 0; i < bucketcount; ++i)
+ {
+ indx[i] = cnt;
+ cnt += counts[i];
+ }
+
+ unsigned int hashlen = (4 + bucketcount + nsyms) * 4;
+ hashlen += maskbits / 8;
+ unsigned char* phash = new unsigned char[hashlen];
+
+ elfcpp::Swap<32, big_endian>::writeval(phash, bucketcount);
+ elfcpp::Swap<32, big_endian>::writeval(phash + 4, symindx);
+ elfcpp::Swap<32, big_endian>::writeval(phash + 8, maskwords);
+ elfcpp::Swap<32, big_endian>::writeval(phash + 12, shift2);
+
+ unsigned char* p = phash + 16 + maskbits / 8;
+ for (unsigned int i = 0; i < bucketcount; ++i)
+ {
+ if (counts[i] == 0)
+ elfcpp::Swap<32, big_endian>::writeval(p, 0);
+ else
+ elfcpp::Swap<32, big_endian>::writeval(p, indx[i]);
+ p += 4;
+ }
+
+ for (unsigned int i = 0; i < nsyms; ++i)
+ {
+ Symbol* sym = hashed_dynsyms[i];
+ uint32_t hashval = dynsym_hashvals[i];
+
+ unsigned int bucket = hashval % bucketcount;
+ unsigned int val = ((hashval >> shift1)
+ & ((maskbits >> shift1) - 1));
+ bitmask[val] |= (static_cast<Word>(1U)) << (hashval & mask);
+ bitmask[val] |= (static_cast<Word>(1U)) << ((hashval >> shift2) & mask);
+ val = hashval & ~ 1U;
+ if (counts[bucket] == 1)
+ {
+ // Last element terminates the chain.
+ val |= 1;
+ }
+ elfcpp::Swap<32, big_endian>::writeval(p + (indx[bucket] - symindx) * 4,
+ val);
+ --counts[bucket];
+
+ sym->set_dynsym_index(indx[bucket]);
+ ++indx[bucket];
+ }
+
+ p = phash + 16;
+ for (unsigned int i = 0; i < maskwords; ++i)
+ {
+ elfcpp::Swap<size, big_endian>::writeval(p, bitmask[i]);
+ p += size / 8;
+ }
+
+ *phashlen = hashlen;
+ *pphash = phash;
+}
+
+// Verdef methods.
+
+// Write this definition to a buffer for the output section.
+
+template<int size, bool big_endian>
+unsigned char*
+Verdef::write(const Stringpool* dynpool, bool is_last, unsigned char* pb
+ ACCEPT_SIZE_ENDIAN) const
+{
+ const int verdef_size = elfcpp::Elf_sizes<size>::verdef_size;
+ const int verdaux_size = elfcpp::Elf_sizes<size>::verdaux_size;
+
+ elfcpp::Verdef_write<size, big_endian> vd(pb);
+ vd.set_vd_version(elfcpp::VER_DEF_CURRENT);
+ vd.set_vd_flags((this->is_base_ ? elfcpp::VER_FLG_BASE : 0)
+ | (this->is_weak_ ? elfcpp::VER_FLG_WEAK : 0));
+ vd.set_vd_ndx(this->index());
+ vd.set_vd_cnt(1 + this->deps_.size());
+ vd.set_vd_hash(Dynobj::elf_hash(this->name()));
+ vd.set_vd_aux(verdef_size);
+ vd.set_vd_next(is_last
+ ? 0
+ : verdef_size + (1 + this->deps_.size()) * verdaux_size);
+ pb += verdef_size;
+
+ elfcpp::Verdaux_write<size, big_endian> vda(pb);
+ vda.set_vda_name(dynpool->get_offset(this->name()));
+ vda.set_vda_next(this->deps_.empty() ? 0 : verdaux_size);
+ pb += verdaux_size;
+
+ Deps::const_iterator p;
+ unsigned int i;
+ for (p = this->deps_.begin(), i = 0;
+ p != this->deps_.end();
+ ++p, ++i)
+ {
+ elfcpp::Verdaux_write<size, big_endian> vda(pb);
+ vda.set_vda_name(dynpool->get_offset(*p));
+ vda.set_vda_next(i + 1 >= this->deps_.size() ? 0 : verdaux_size);
+ pb += verdaux_size;
+ }
+
+ return pb;
+}
+
+// Verneed methods.
+
+Verneed::~Verneed()
+{
+ for (Need_versions::iterator p = this->need_versions_.begin();
+ p != this->need_versions_.end();
+ ++p)
+ delete *p;
+}
+
+// Add a new version to this file reference.
+
+Verneed_version*
+Verneed::add_name(const char* name)
+{
+ Verneed_version* vv = new Verneed_version(name);
+ this->need_versions_.push_back(vv);
+ return vv;
+}
+
+// Set the version indexes starting at INDEX.
+
+unsigned int
+Verneed::finalize(unsigned int index)
+{
+ for (Need_versions::iterator p = this->need_versions_.begin();
+ p != this->need_versions_.end();
+ ++p)
+ {
+ (*p)->set_index(index);
+ ++index;
+ }
+ return index;
+}
+
+// Write this list of referenced versions to a buffer for the output
+// section.
+
+template<int size, bool big_endian>
+unsigned char*
+Verneed::write(const Stringpool* dynpool, bool is_last,
+ unsigned char* pb ACCEPT_SIZE_ENDIAN) const
+{
+ const int verneed_size = elfcpp::Elf_sizes<size>::verneed_size;
+ const int vernaux_size = elfcpp::Elf_sizes<size>::vernaux_size;
+
+ elfcpp::Verneed_write<size, big_endian> vn(pb);
+ vn.set_vn_version(elfcpp::VER_NEED_CURRENT);
+ vn.set_vn_cnt(this->need_versions_.size());
+ vn.set_vn_file(dynpool->get_offset(this->filename()));
+ vn.set_vn_aux(verneed_size);
+ vn.set_vn_next(is_last
+ ? 0
+ : verneed_size + this->need_versions_.size() * vernaux_size);
+ pb += verneed_size;
+
+ Need_versions::const_iterator p;
+ unsigned int i;
+ for (p = this->need_versions_.begin(), i = 0;
+ p != this->need_versions_.end();
+ ++p, ++i)
+ {
+ elfcpp::Vernaux_write<size, big_endian> vna(pb);
+ vna.set_vna_hash(Dynobj::elf_hash((*p)->version()));
+ // FIXME: We need to sometimes set VER_FLG_WEAK here.
+ vna.set_vna_flags(0);
+ vna.set_vna_other((*p)->index());
+ vna.set_vna_name(dynpool->get_offset((*p)->version()));
+ vna.set_vna_next(i + 1 >= this->need_versions_.size()
+ ? 0
+ : vernaux_size);
+ pb += vernaux_size;
+ }
+
+ return pb;
+}
+
+// Versions methods.
+
+Versions::~Versions()
+{
+ for (Defs::iterator p = this->defs_.begin();
+ p != this->defs_.end();
+ ++p)
+ delete *p;
+
+ for (Needs::iterator p = this->needs_.begin();
+ p != this->needs_.end();
+ ++p)
+ delete *p;
+}
+
+// Record version information for a symbol going into the dynamic
+// symbol table.
+
+void
+Versions::record_version(const General_options* options,
+ Stringpool* dynpool, const Symbol* sym)
+{
+ gold_assert(!this->is_finalized_);
+ gold_assert(sym->version() != NULL);
+
+ Stringpool::Key version_key;
+ const char* version = dynpool->add(sym->version(), &version_key);
+
+ if (!sym->is_from_dynobj())
+ this->add_def(options, sym, version, version_key);
+ else
+ {
+ // This is a version reference.
+
+ Object* object = sym->object();
+ gold_assert(object->is_dynamic());
+ Dynobj* dynobj = static_cast<Dynobj*>(object);
+
+ this->add_need(dynpool, dynobj->soname(), version, version_key);
+ }
+}
+
+// We've found a symbol SYM defined in version VERSION.
+
+void
+Versions::add_def(const General_options* options, const Symbol* sym,
+ const char* version, Stringpool::Key version_key)
+{
+ Key k(version_key, 0);
+ Version_base* const vbnull = NULL;
+ std::pair<Version_table::iterator, bool> ins =
+ this->version_table_.insert(std::make_pair(k, vbnull));
+
+ if (!ins.second)
+ {
+ // We already have an entry for this version.
+ Version_base* vb = ins.first->second;
+
+ // We have now seen a symbol in this version, so it is not
+ // weak.
+ vb->clear_weak();
+
+ // FIXME: When we support version scripts, we will need to
+ // check whether this symbol should be forced local.
+ }
+ else
+ {
+ // If we are creating a shared object, it is an error to
+ // find a definition of a symbol with a version which is not
+ // in the version script.
+ if (options->is_shared())
+ {
+ fprintf(stderr, _("%s: symbol %s has undefined version %s\n"),
+ program_name, sym->name(), version);
+ gold_exit(false);
+ }
+
+ // If this is the first version we are defining, first define
+ // the base version. FIXME: Should use soname here when
+ // creating a shared object.
+ Verdef* vdbase = new Verdef(options->output_file_name(), true, false,
+ true);
+ this->defs_.push_back(vdbase);
+
+ // When creating a regular executable, automatically define
+ // a new version.
+ Verdef* vd = new Verdef(version, false, false, false);
+ this->defs_.push_back(vd);
+ ins.first->second = vd;
+ }
+}
+
+// Add a reference to version NAME in file FILENAME.
+
+void
+Versions::add_need(Stringpool* dynpool, const char* filename, const char* name,
+ Stringpool::Key name_key)
+{
+ Stringpool::Key filename_key;
+ filename = dynpool->add(filename, &filename_key);
+
+ Key k(name_key, filename_key);
+ Version_base* const vbnull = NULL;
+ std::pair<Version_table::iterator, bool> ins =
+ this->version_table_.insert(std::make_pair(k, vbnull));
+
+ if (!ins.second)
+ {
+ // We already have an entry for this filename/version.
+ return;
+ }
+
+ // See whether we already have this filename. We don't expect many
+ // version references, so we just do a linear search. This could be
+ // replaced by a hash table.
+ Verneed* vn = NULL;
+ for (Needs::iterator p = this->needs_.begin();
+ p != this->needs_.end();
+ ++p)
+ {
+ if ((*p)->filename() == filename)
+ {
+ vn = *p;
+ break;
+ }
+ }
+
+ if (vn == NULL)
+ {
+ // We have a new filename.
+ vn = new Verneed(filename);
+ this->needs_.push_back(vn);
+ }
+
+ ins.first->second = vn->add_name(name);
+}
+
+// Set the version indexes. Create a new dynamic version symbol for
+// each new version definition.
+
+unsigned int
+Versions::finalize(const Target* target, Symbol_table* symtab,
+ unsigned int dynsym_index, std::vector<Symbol*>* syms)
+{
+ gold_assert(!this->is_finalized_);
+
+ unsigned int vi = 1;
+
+ for (Defs::iterator p = this->defs_.begin();
+ p != this->defs_.end();
+ ++p)
+ {
+ (*p)->set_index(vi);
+ ++vi;
+
+ // Create a version symbol if necessary.
+ if (!(*p)->is_symbol_created())
+ {
+ Symbol* vsym = symtab->define_as_constant(target, (*p)->name(),
+ (*p)->name(), 0, 0,
+ elfcpp::STT_OBJECT,
+ elfcpp::STB_GLOBAL,
+ elfcpp::STV_DEFAULT, 0,
+ false);
+ vsym->set_needs_dynsym_entry();
+ ++dynsym_index;
+ syms->push_back(vsym);
+ // The name is already in the dynamic pool.
+ }
+ }
+
+ // Index 1 is used for global symbols.
+ if (vi == 1)
+ {
+ gold_assert(this->defs_.empty());
+ vi = 2;
+ }
+
+ for (Needs::iterator p = this->needs_.begin();
+ p != this->needs_.end();
+ ++p)
+ vi = (*p)->finalize(vi);
+
+ this->is_finalized_ = true;
+
+ return dynsym_index;
+}
+
+// Return the version index to use for a symbol. This does two hash
+// table lookups: one in DYNPOOL and one in this->version_table_.
+// Another approach alternative would be store a pointer in SYM, which
+// would increase the size of the symbol table. Or perhaps we could
+// use a hash table from dynamic symbol pointer values to Version_base
+// pointers.
+
+unsigned int
+Versions::version_index(const Stringpool* dynpool, const Symbol* sym) const
+{
+ Stringpool::Key version_key;
+ const char* version = dynpool->find(sym->version(), &version_key);
+ gold_assert(version != NULL);
+
+ Key k;
+ if (!sym->is_from_dynobj())
+ k = Key(version_key, 0);
+ else
+ {
+ Object* object = sym->object();
+ gold_assert(object->is_dynamic());
+ Dynobj* dynobj = static_cast<Dynobj*>(object);
+
+ Stringpool::Key filename_key;
+ const char* filename = dynpool->find(dynobj->soname(), &filename_key);
+ gold_assert(filename != NULL);
+
+ k = Key(version_key, filename_key);
+ }
+
+ Version_table::const_iterator p = this->version_table_.find(k);
+ gold_assert(p != this->version_table_.end());
+
+ return p->second->index();
+}
+
+// Return an allocated buffer holding the contents of the symbol
+// version section.
+
+template<int size, bool big_endian>
+void
+Versions::symbol_section_contents(const Stringpool* dynpool,
+ unsigned int local_symcount,
+ const std::vector<Symbol*>& syms,
+ unsigned char** pp,
+ unsigned int* psize
+ ACCEPT_SIZE_ENDIAN) const
+{
+ gold_assert(this->is_finalized_);
+
+ unsigned int sz = (local_symcount + syms.size()) * 2;
+ unsigned char* pbuf = new unsigned char[sz];
+
+ for (unsigned int i = 0; i < local_symcount; ++i)
+ elfcpp::Swap<16, big_endian>::writeval(pbuf + i * 2,
+ elfcpp::VER_NDX_LOCAL);
+
+ for (std::vector<Symbol*>::const_iterator p = syms.begin();
+ p != syms.end();
+ ++p)
+ {
+ unsigned int version_index;
+ const char* version = (*p)->version();
+ if (version == NULL)
+ version_index = elfcpp::VER_NDX_GLOBAL;
+ else
+ version_index = this->version_index(dynpool, *p);
+ elfcpp::Swap<16, big_endian>::writeval(pbuf + (*p)->dynsym_index() * 2,
+ version_index);
+ }
+
+ *pp = pbuf;
+ *psize = sz;
+}
+
+// Return an allocated buffer holding the contents of the version
+// definition section.
+
+template<int size, bool big_endian>
+void
+Versions::def_section_contents(const Stringpool* dynpool,
+ unsigned char** pp, unsigned int* psize,
+ unsigned int* pentries
+ ACCEPT_SIZE_ENDIAN) const
+{
+ gold_assert(this->is_finalized_);
+ gold_assert(!this->defs_.empty());
+
+ const int verdef_size = elfcpp::Elf_sizes<size>::verdef_size;
+ const int verdaux_size = elfcpp::Elf_sizes<size>::verdaux_size;
+
+ unsigned int sz = 0;
+ for (Defs::const_iterator p = this->defs_.begin();
+ p != this->defs_.end();
+ ++p)
+ {
+ sz += verdef_size + verdaux_size;
+ sz += (*p)->count_dependencies() * verdaux_size;
+ }
+
+ unsigned char* pbuf = new unsigned char[sz];
+
+ unsigned char* pb = pbuf;
+ Defs::const_iterator p;
+ unsigned int i;
+ for (p = this->defs_.begin(), i = 0;
+ p != this->defs_.end();
+ ++p, ++i)
+ pb = (*p)->write SELECT_SIZE_ENDIAN_NAME(size, big_endian)(
+ dynpool, i + 1 >= this->defs_.size(), pb
+ SELECT_SIZE_ENDIAN(size, big_endian));
+
+ gold_assert(static_cast<unsigned int>(pb - pbuf) == sz);
+
+ *pp = pbuf;
+ *psize = sz;
+ *pentries = this->defs_.size();
+}
+
+// Return an allocated buffer holding the contents of the version
+// reference section.
+
+template<int size, bool big_endian>
+void
+Versions::need_section_contents(const Stringpool* dynpool,
+ unsigned char** pp, unsigned int *psize,
+ unsigned int *pentries
+ ACCEPT_SIZE_ENDIAN) const
+{
+ gold_assert(this->is_finalized_);
+ gold_assert(!this->needs_.empty());
+
+ const int verneed_size = elfcpp::Elf_sizes<size>::verneed_size;
+ const int vernaux_size = elfcpp::Elf_sizes<size>::vernaux_size;
+
+ unsigned int sz = 0;
+ for (Needs::const_iterator p = this->needs_.begin();
+ p != this->needs_.end();
+ ++p)
+ {
+ sz += verneed_size;
+ sz += (*p)->count_versions() * vernaux_size;
+ }
+
+ unsigned char* pbuf = new unsigned char[sz];
+
+ unsigned char* pb = pbuf;
+ Needs::const_iterator p;
+ unsigned int i;
+ for (p = this->needs_.begin(), i = 0;
+ p != this->needs_.end();
+ ++p, ++i)
+ pb = (*p)->write SELECT_SIZE_ENDIAN_NAME(size, big_endian)(
+ dynpool, i + 1 >= this->needs_.size(), pb
+ SELECT_SIZE_ENDIAN(size, big_endian));
+
+ gold_assert(static_cast<unsigned int>(pb - pbuf) == sz);
+
+ *pp = pbuf;
+ *psize = sz;
+ *pentries = this->needs_.size();
+}
+
+// Instantiate the templates we need. We could use the configure
+// script to restrict this to only the ones for implemented targets.
+
+template
+class Sized_dynobj<32, false>;
+
+template
+class Sized_dynobj<32, true>;
+
+template
+class Sized_dynobj<64, false>;
+
+template
+class Sized_dynobj<64, true>;
+
+template
+void
+Versions::symbol_section_contents<32, false>(
+ const Stringpool*,
+ unsigned int,
+ const std::vector<Symbol*>&,
+ unsigned char**,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(32, false)) const;
+
+template
+void
+Versions::symbol_section_contents<32, true>(
+ const Stringpool*,
+ unsigned int,
+ const std::vector<Symbol*>&,
+ unsigned char**,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(32, true)) const;
+
+template
+void
+Versions::symbol_section_contents<64, false>(
+ const Stringpool*,
+ unsigned int,
+ const std::vector<Symbol*>&,
+ unsigned char**,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(64, false)) const;
+
+template
+void
+Versions::symbol_section_contents<64, true>(
+ const Stringpool*,
+ unsigned int,
+ const std::vector<Symbol*>&,
+ unsigned char**,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(64, true)) const;
+
+template
+void
+Versions::def_section_contents<32, false>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(32, false)) const;
+
+template
+void
+Versions::def_section_contents<32, true>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(32, true)) const;
+
+template
+void
+Versions::def_section_contents<64, false>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(64, false)) const;
+
+template
+void
+Versions::def_section_contents<64, true>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(64, true)) const;
+
+template
+void
+Versions::need_section_contents<32, false>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(32, false)) const;
+
+template
+void
+Versions::need_section_contents<32, true>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(32, true)) const;
+
+template
+void
+Versions::need_section_contents<64, false>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(64, false)) const;
+
+template
+void
+Versions::need_section_contents<64, true>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(64, true)) const;
+
+} // End namespace gold.
diff --git a/gold/dynobj.h b/gold/dynobj.h
new file mode 100644
index 000000000000..d63aa6af0b21
--- /dev/null
+++ b/gold/dynobj.h
@@ -0,0 +1,494 @@
+// dynobj.h -- dynamic object support for gold -*- C++ -*-
+
+#ifndef GOLD_DYNOBJ_H
+#define GOLD_DYNOBJ_H
+
+#include <vector>
+
+#include "stringpool.h"
+#include "object.h"
+
+namespace gold
+{
+
+class General_options;
+
+// A dynamic object (ET_DYN). This is an abstract base class itself.
+// The implementations is the template class Sized_dynobj.
+
+class Dynobj : public Object
+{
+ public:
+ Dynobj(const std::string& name, Input_file* input_file, off_t offset = 0)
+ : Object(name, input_file, true, offset), soname_()
+ { }
+
+ // Return the name to use in a DT_NEEDED entry for this object.
+ const char*
+ soname() const;
+
+ // Compute the ELF hash code for a string.
+ static uint32_t
+ elf_hash(const char*);
+
+ // Create a standard ELF hash table, setting *PPHASH and *PHASHLEN.
+ // DYNSYMS is the global dynamic symbols. LOCAL_DYNSYM_COUNT is the
+ // number of local dynamic symbols, which is the index of the first
+ // dynamic gobal symbol.
+ static void
+ create_elf_hash_table(const Target*, const std::vector<Symbol*>& dynsyms,
+ unsigned int local_dynsym_count,
+ unsigned char** pphash,
+ unsigned int* phashlen);
+
+ // Create a GNU hash table, setting *PPHASH and *PHASHLEN. DYNSYMS
+ // is the global dynamic symbols. LOCAL_DYNSYM_COUNT is the number
+ // of local dynamic symbols, which is the index of the first dynamic
+ // gobal symbol.
+ static void
+ create_gnu_hash_table(const Target*, const std::vector<Symbol*>& dynsyms,
+ unsigned int local_dynsym_count,
+ unsigned char** pphash, unsigned int* phashlen);
+
+ protected:
+ // Set the DT_SONAME string.
+ void
+ set_soname_string(const char* s)
+ { this->soname_.assign(s); }
+
+ private:
+ // Compute the GNU hash code for a string.
+ static uint32_t
+ gnu_hash(const char*);
+
+ // Compute the number of hash buckets to use.
+ static unsigned int
+ compute_bucket_count(const std::vector<uint32_t>& hashcodes,
+ bool for_gnu_hash_table);
+
+ // Sized version of create_elf_hash_table.
+ template<bool big_endian>
+ static void
+ sized_create_elf_hash_table(const std::vector<uint32_t>& bucket,
+ const std::vector<uint32_t>& chain,
+ unsigned char* phash,
+ unsigned int hashlen);
+
+ // Sized version of create_gnu_hash_table.
+ template<int size, bool big_endian>
+ static void
+ sized_create_gnu_hash_table(const std::vector<Symbol*>& hashed_dynsyms,
+ const std::vector<uint32_t>& dynsym_hashvals,
+ unsigned int unhashed_dynsym_count,
+ unsigned char** pphash,
+ unsigned int* phashlen);
+
+ // The DT_SONAME name, if any.
+ std::string soname_;
+};
+
+// A dynamic object, size and endian specific version.
+
+template<int size, bool big_endian>
+class Sized_dynobj : public Dynobj
+{
+ public:
+ Sized_dynobj(const std::string& name, Input_file* input_file, off_t offset,
+ const typename elfcpp::Ehdr<size, big_endian>&);
+
+ // Set up the object file based on the ELF header.
+ void
+ setup(const typename elfcpp::Ehdr<size, big_endian>&);
+
+ // Read the symbols.
+ void
+ do_read_symbols(Read_symbols_data*);
+
+ // Lay out the input sections.
+ void
+ do_layout(const General_options&, Symbol_table*, Layout*,
+ Read_symbols_data*);
+
+ // Add the symbols to the symbol table.
+ void
+ do_add_symbols(Symbol_table*, Read_symbols_data*);
+
+ // Get the name of a section.
+ std::string
+ do_section_name(unsigned int shndx)
+ { return this->elf_file_.section_name(shndx); }
+
+ // Return a view of the contents of a section. Set *PLEN to the
+ // size.
+ Object::Location
+ do_section_contents(unsigned int shndx)
+ { return this->elf_file_.section_contents(shndx); }
+
+ // Return section flags.
+ uint64_t
+ do_section_flags(unsigned int shndx)
+ { return this->elf_file_.section_flags(shndx); }
+
+ private:
+ // For convenience.
+ typedef Sized_dynobj<size, big_endian> This;
+ static const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
+ static const int sym_size = elfcpp::Elf_sizes<size>::sym_size;
+ static const int dyn_size = elfcpp::Elf_sizes<size>::dyn_size;
+ typedef elfcpp::Shdr<size, big_endian> Shdr;
+ typedef elfcpp::Dyn<size, big_endian> Dyn;
+
+ // Find the dynamic symbol table and the version sections, given the
+ // section headers.
+ void
+ find_dynsym_sections(const unsigned char* pshdrs,
+ unsigned int* pdynshm_shndx,
+ unsigned int* pversym_shndx,
+ unsigned int* pverdef_shndx,
+ unsigned int* pverneed_shndx,
+ unsigned int* pdynamic_shndx);
+
+ // Read the dynamic symbol section SHNDX.
+ void
+ read_dynsym_section(const unsigned char* pshdrs, unsigned int shndx,
+ elfcpp::SHT type, unsigned int link,
+ File_view** view, off_t* view_size,
+ unsigned int* view_info);
+
+ // Set the SONAME from the SHT_DYNAMIC section at DYNAMIC_SHNDX.
+ // The STRTAB parameters may have the relevant string table.
+ void
+ set_soname(const unsigned char* pshdrs, unsigned int dynamic_shndx,
+ unsigned int strtab_shndx, const unsigned char* strtabu,
+ off_t strtab_size);
+
+ // Mapping from version number to version name.
+ typedef std::vector<const char*> Version_map;
+
+ // Create the version map.
+ void
+ make_version_map(Read_symbols_data* sd, Version_map*) const;
+
+ // Add version definitions to the version map.
+ void
+ make_verdef_map(Read_symbols_data* sd, Version_map*) const;
+
+ // Add version references to the version map.
+ void
+ make_verneed_map(Read_symbols_data* sd, Version_map*) const;
+
+ // Add an entry to the version map.
+ void
+ set_version_map(Version_map*, unsigned int ndx, const char* name) const;
+
+ // General access to the ELF file.
+ elfcpp::Elf_file<size, big_endian, Object> elf_file_;
+};
+
+// A base class for Verdef and Verneed_version which just handles the
+// version index which will be stored in the SHT_GNU_versym section.
+
+class Version_base
+{
+ public:
+ Version_base()
+ : index_(-1U)
+ { }
+
+ virtual
+ ~Version_base()
+ { }
+
+ // Return the version index.
+ unsigned int
+ index() const
+ {
+ gold_assert(this->index_ != -1U);
+ return this->index_;
+ }
+
+ // Set the version index.
+ void
+ set_index(unsigned int index)
+ {
+ gold_assert(this->index_ == -1U);
+ this->index_ = index;
+ }
+
+ // Clear the weak flag in a version definition.
+ virtual void
+ clear_weak() = 0;
+
+ private:
+ Version_base(const Version_base&);
+ Version_base& operator=(const Version_base&);
+
+ // The index of the version definition or reference.
+ unsigned int index_;
+};
+
+// This class handles a version being defined in the file we are
+// generating.
+
+class Verdef : public Version_base
+{
+ public:
+ Verdef(const char* name, bool is_base, bool is_weak, bool is_symbol_created)
+ : name_(name), deps_(), is_base_(is_base), is_weak_(is_weak),
+ is_symbol_created_(is_symbol_created)
+ { }
+
+ // Return the version name.
+ const char*
+ name() const
+ { return this->name_; }
+
+ // Return the number of dependencies.
+ unsigned int
+ count_dependencies() const
+ { return this->deps_.size(); }
+
+ // Add a dependency to this version. The NAME should be
+ // canonicalized in the dynamic Stringpool.
+ void
+ add_dependency(const char* name)
+ { this->deps_.push_back(name); }
+
+ // Return whether this definition is weak.
+ bool
+ is_weak() const
+ { return this->is_weak_; }
+
+ // Clear the weak flag.
+ void
+ clear_weak()
+ { this->is_weak_ = false; }
+
+ // Return whether a version symbol has been created for this
+ // definition.
+ bool
+ is_symbol_created() const
+ { return this->is_symbol_created_; }
+
+ // Write contents to buffer.
+ template<int size, bool big_endian>
+ unsigned char*
+ write(const Stringpool*, bool is_last, unsigned char*
+ ACCEPT_SIZE_ENDIAN) const;
+
+ private:
+ Verdef(const Verdef&);
+ Verdef& operator=(const Verdef&);
+
+ // The type of the list of version dependencies. Each dependency
+ // should be canonicalized in the dynamic Stringpool.
+ typedef std::vector<const char*> Deps;
+
+ // The name of this version. This should be canonicalized in the
+ // dynamic Stringpool.
+ const char* name_;
+ // A list of other versions which this version depends upon.
+ Deps deps_;
+ // Whether this is the base version.
+ bool is_base_;
+ // Whether this version is weak.
+ bool is_weak_;
+ // Whether a version symbol has been created.
+ bool is_symbol_created_;
+};
+
+// A referened version. This will be associated with a filename by
+// Verneed.
+
+class Verneed_version : public Version_base
+{
+ public:
+ Verneed_version(const char* version)
+ : version_(version)
+ { }
+
+ // Return the version name.
+ const char*
+ version() const
+ { return this->version_; }
+
+ // Clear the weak flag. This is invalid for a reference.
+ void
+ clear_weak()
+ { gold_unreachable(); }
+
+ private:
+ Verneed_version(const Verneed_version&);
+ Verneed_version& operator=(const Verneed_version&);
+
+ const char* version_;
+};
+
+// Version references in a single dynamic object.
+
+class Verneed
+{
+ public:
+ Verneed(const char* filename)
+ : filename_(filename), need_versions_()
+ { }
+
+ ~Verneed();
+
+ // Return the file name.
+ const char*
+ filename() const
+ { return this->filename_; }
+
+ // Return the number of versions.
+ unsigned int
+ count_versions() const
+ { return this->need_versions_.size(); }
+
+ // Add a version name. The name should be canonicalized in the
+ // dynamic Stringpool. If the name is already present, this does
+ // nothing.
+ Verneed_version*
+ add_name(const char* name);
+
+ // Set the version indexes, starting at INDEX. Return the updated
+ // INDEX.
+ unsigned int
+ finalize(unsigned int index);
+
+ // Write contents to buffer.
+ template<int size, bool big_endian>
+ unsigned char*
+ write(const Stringpool*, bool is_last, unsigned char*
+ ACCEPT_SIZE_ENDIAN) const;
+
+ private:
+ Verneed(const Verneed&);
+ Verneed& operator=(const Verneed&);
+
+ // The type of the list of version names. Each name should be
+ // canonicalized in the dynamic Stringpool.
+ typedef std::vector<Verneed_version*> Need_versions;
+
+ // The filename of the dynamic object. This should be
+ // canonicalized in the dynamic Stringpool.
+ const char* filename_;
+ // The list of version names.
+ Need_versions need_versions_;
+};
+
+// This class handles version definitions and references which go into
+// the output file.
+
+class Versions
+{
+ public:
+ Versions()
+ : defs_(), needs_(), version_table_(), is_finalized_(false)
+ { }
+
+ ~Versions();
+
+ // SYM is going into the dynamic symbol table and has a version.
+ // Record the appropriate version information.
+ void
+ record_version(const General_options*, Stringpool*, const Symbol* sym);
+
+ // Set the version indexes. DYNSYM_INDEX is the index we should use
+ // for the next dynamic symbol. We add new dynamic symbols to SYMS
+ // and return an updated DYNSYM_INDEX.
+ unsigned int
+ finalize(const Target*, Symbol_table* symtab, unsigned int dynsym_index,
+ std::vector<Symbol*>* syms);
+
+ // Return whether there are any version definitions.
+ bool
+ any_defs() const
+ { return !this->defs_.empty(); }
+
+ // Return whether there are any version references.
+ bool
+ any_needs() const
+ { return !this->needs_.empty(); }
+
+ // Build an allocated buffer holding the contents of the symbol
+ // version section (.gnu.version).
+ template<int size, bool big_endian>
+ void
+ symbol_section_contents(const Stringpool*, unsigned int local_symcount,
+ const std::vector<Symbol*>& syms,
+ unsigned char**, unsigned int*
+ ACCEPT_SIZE_ENDIAN) const;
+
+ // Build an allocated buffer holding the contents of the version
+ // definition section (.gnu.version_d).
+ template<int size, bool big_endian>
+ void
+ def_section_contents(const Stringpool*, unsigned char**,
+ unsigned int* psize, unsigned int* pentries
+ ACCEPT_SIZE_ENDIAN) const;
+
+ // Build an allocated buffer holding the contents of the version
+ // reference section (.gnu.version_r).
+ template<int size, bool big_endian>
+ void
+ need_section_contents(const Stringpool*, unsigned char**,
+ unsigned int* psize, unsigned int* pentries
+ ACCEPT_SIZE_ENDIAN) const;
+
+ private:
+ // The type of the list of version definitions.
+ typedef std::vector<Verdef*> Defs;
+
+ // The type of the list of version references.
+ typedef std::vector<Verneed*> Needs;
+
+ // Handle a symbol SYM defined with version VERSION.
+ void
+ add_def(const General_options*, const Symbol* sym, const char* version,
+ Stringpool::Key);
+
+ // Add a reference to version NAME in file FILENAME.
+ void
+ add_need(Stringpool*, const char* filename, const char* name,
+ Stringpool::Key);
+
+ // Return the version index to use for SYM.
+ unsigned int
+ version_index(const Stringpool*, const Symbol* sym) const;
+
+ // We keep a hash table mapping canonicalized name/version pairs to
+ // a version base.
+ typedef std::pair<Stringpool::Key, Stringpool::Key> Key;
+
+ struct Version_table_hash
+ {
+ size_t
+ operator()(const Key& k) const
+ { return k.first + k.second; }
+ };
+
+ struct Version_table_eq
+ {
+ bool
+ operator()(const Key& k1, const Key& k2) const
+ { return k1.first == k2.first && k1.second == k2.second; }
+ };
+
+ typedef Unordered_map<Key, Version_base*, Version_table_hash,
+ Version_table_eq> Version_table;
+
+ // The version definitions.
+ Defs defs_;
+ // The version references.
+ Needs needs_;
+ // The mapping from a canonicalized version/filename pair to a
+ // version index. The filename may be NULL.
+ Version_table version_table_;
+ // Whether the version indexes have been set.
+ bool is_finalized_;
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_DYNOBJ_H)
diff --git a/gold/fileread.cc b/gold/fileread.cc
new file mode 100644
index 000000000000..1a142022569a
--- /dev/null
+++ b/gold/fileread.cc
@@ -0,0 +1,379 @@
+// fileread.cc -- read files for gold
+
+#include "gold.h"
+
+#include <cstring>
+#include <cerrno>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "options.h"
+#include "dirsearch.h"
+#include "fileread.h"
+
+namespace gold
+{
+
+// Class File_read::View.
+
+File_read::View::~View()
+{
+ gold_assert(!this->is_locked());
+ delete[] this->data_;
+}
+
+void
+File_read::View::lock()
+{
+ ++this->lock_count_;
+}
+
+void
+File_read::View::unlock()
+{
+ gold_assert(this->lock_count_ > 0);
+ --this->lock_count_;
+}
+
+bool
+File_read::View::is_locked()
+{
+ return this->lock_count_ > 0;
+}
+
+// Class File_read.
+
+// The File_read class is designed to support file descriptor caching,
+// but this is not currently implemented.
+
+File_read::~File_read()
+{
+ gold_assert(this->lock_count_ == 0);
+ if (this->descriptor_ >= 0)
+ {
+ if (close(this->descriptor_) < 0)
+ fprintf(stderr, _("%s: warning: close(%s) failed: %s"),
+ program_name, this->name_.c_str(), strerror(errno));
+ this->descriptor_ = -1;
+ }
+ this->name_.clear();
+ this->clear_views(true);
+}
+
+// Open the file.
+
+bool
+File_read::open(const std::string& name)
+{
+ gold_assert(this->lock_count_ == 0
+ && this->descriptor_ < 0
+ && this->name_.empty());
+ this->name_ = name;
+ this->descriptor_ = ::open(this->name_.c_str(), O_RDONLY);
+ ++this->lock_count_;
+ return this->descriptor_ >= 0;
+}
+
+// Open the file for testing purposes.
+
+bool
+File_read::open(const std::string& name, const unsigned char* contents,
+ off_t contents_size)
+{
+ gold_assert(this->lock_count_ == 0
+ && this->descriptor_ < 0
+ && this->name_.empty());
+ this->name_ = name;
+ this->contents_ = contents;
+ this->contents_size_ = contents_size;
+ ++this->lock_count_;
+ return true;
+}
+
+void
+File_read::lock()
+{
+ ++this->lock_count_;
+}
+
+void
+File_read::unlock()
+{
+ gold_assert(this->lock_count_ > 0);
+ --this->lock_count_;
+}
+
+bool
+File_read::is_locked()
+{
+ return this->lock_count_ > 0;
+}
+
+// See if we have a view which covers the file starting at START for
+// SIZE bytes. Return a pointer to the View if found, NULL if not.
+
+inline File_read::View*
+File_read::find_view(off_t start, off_t size)
+{
+ off_t page = File_read::page_offset(start);
+ Views::iterator p = this->views_.find(page);
+ if (p == this->views_.end())
+ return NULL;
+ if (p->second->size() - (start - page) < size)
+ return NULL;
+ return p->second;
+}
+
+// Read data from the file. Return the number of bytes read. If
+// PBYTES is not NULL, store the number of bytes in *PBYTES, otherwise
+// require that we read exactly the number of bytes requested.
+
+off_t
+File_read::do_read(off_t start, off_t size, void* p, off_t* pbytes)
+{
+ gold_assert(this->lock_count_ > 0);
+
+ off_t bytes;
+ if (this->contents_ == NULL)
+ {
+ int o = this->descriptor_;
+
+ if (lseek(o, start, SEEK_SET) < 0)
+ {
+ fprintf(stderr, _("%s: %s: lseek to %lld failed: %s"),
+ program_name, this->filename().c_str(),
+ static_cast<long long>(start),
+ strerror(errno));
+ gold_exit(false);
+ }
+
+ bytes = ::read(o, p, size);
+ if (bytes < 0)
+ {
+ fprintf(stderr, _("%s: %s: read failed: %s\n"),
+ program_name, this->filename().c_str(), strerror(errno));
+ gold_exit(false);
+ }
+ }
+ else
+ {
+ bytes = this->contents_size_ - start;
+ if (bytes < 0)
+ bytes = 0;
+ else if (bytes > size)
+ bytes = size;
+ memcpy(p, this->contents_ + start, bytes);
+ }
+
+ if (pbytes != NULL)
+ *pbytes = bytes;
+ else if (bytes != size)
+ {
+ fprintf(stderr,
+ _("%s: %s: file too short: read only %lld of %lld "
+ "bytes at %lld\n"),
+ program_name, this->filename().c_str(),
+ static_cast<long long>(bytes),
+ static_cast<long long>(size),
+ static_cast<long long>(start));
+ gold_exit(false);
+ }
+
+ return bytes;
+}
+
+void
+File_read::read(off_t start, off_t size, void* p, off_t* pbytes)
+{
+ gold_assert(this->lock_count_ > 0);
+
+ File_read::View* pv = this->find_view(start, size);
+ if (pv != NULL)
+ {
+ memcpy(p, pv->data() + (start - pv->start()), size);
+ if (pbytes != NULL)
+ *pbytes = size;
+ return;
+ }
+
+ this->do_read(start, size, p, pbytes);
+}
+
+// Find an existing view or make a new one.
+
+File_read::View*
+File_read::find_or_make_view(off_t start, off_t size, off_t* pbytes)
+{
+ gold_assert(this->lock_count_ > 0);
+
+ off_t poff = File_read::page_offset(start);
+
+ File_read::View* const vnull = NULL;
+ std::pair<Views::iterator, bool> ins =
+ this->views_.insert(std::make_pair(poff, vnull));
+
+ if (!ins.second)
+ {
+ // There was an existing view at this offset.
+ File_read::View* v = ins.first->second;
+ if (v->size() - (start - v->start()) >= size)
+ {
+ if (pbytes != NULL)
+ *pbytes = size;
+ return v;
+ }
+
+ // This view is not large enough.
+ this->saved_views_.push_back(v);
+ }
+
+ // We need to read data from the file.
+
+ off_t psize = File_read::pages(size + (start - poff));
+ unsigned char* p = new unsigned char[psize];
+
+ off_t got_bytes;
+ off_t bytes = this->do_read(poff, psize, p, &got_bytes);
+
+ File_read::View* v = new File_read::View(poff, bytes, p);
+
+ ins.first->second = v;
+
+ if (bytes - (start - poff) >= size)
+ {
+ if (pbytes != NULL)
+ *pbytes = size;
+ return v;
+ }
+
+ if (pbytes != NULL)
+ {
+ *pbytes = bytes - (start - poff);
+ return v;
+ }
+
+ fprintf(stderr,
+ _("%s: %s: file too short: read only %lld of %lld bytes at %lld\n"),
+ program_name, this->filename().c_str(),
+ static_cast<long long>(bytes - (start - poff)),
+ static_cast<long long>(size),
+ static_cast<long long>(start));
+ gold_exit(false);
+}
+
+// This implementation of get_view just reads into a memory buffer,
+// which we store on view_list_. At some point we should support
+// mmap.
+
+const unsigned char*
+File_read::get_view(off_t start, off_t size, off_t* pbytes)
+{
+ gold_assert(this->lock_count_ > 0);
+ File_read::View* pv = this->find_or_make_view(start, size, pbytes);
+ return pv->data() + (start - pv->start());
+}
+
+File_view*
+File_read::get_lasting_view(off_t start, off_t size, off_t* pbytes)
+{
+ gold_assert(this->lock_count_ > 0);
+ File_read::View* pv = this->find_or_make_view(start, size, pbytes);
+ pv->lock();
+ return new File_view(*this, pv, pv->data() + (start - pv->start()));
+}
+
+// Remove all the file views.
+
+void
+File_read::clear_views(bool destroying)
+{
+ for (Views::iterator p = this->views_.begin();
+ p != this->views_.end();
+ ++p)
+ {
+ if (!p->second->is_locked())
+ delete p->second;
+ else
+ {
+ gold_assert(!destroying);
+ this->saved_views_.push_back(p->second);
+ }
+ }
+ this->views_.clear();
+
+ Saved_views::iterator p = this->saved_views_.begin();
+ while (p != this->saved_views_.end())
+ {
+ if (!(*p)->is_locked())
+ {
+ delete *p;
+ p = this->saved_views_.erase(p);
+ }
+ else
+ {
+ gold_assert(!destroying);
+ ++p;
+ }
+ }
+}
+
+// Class File_view.
+
+File_view::~File_view()
+{
+ gold_assert(this->file_.is_locked());
+ this->view_->unlock();
+}
+
+// Class Input_file.
+
+// Create a file for testing.
+
+Input_file::Input_file(const char* name, const unsigned char* contents,
+ off_t size)
+ : file_()
+{
+ this->input_argument_ =
+ new Input_file_argument(name, false, Position_dependent_options());
+ bool ok = file_.open(name, contents, size);
+ gold_assert(ok);
+}
+
+// Open the file.
+
+void
+Input_file::open(const General_options& options, const Dirsearch& dirpath)
+{
+ std::string name;
+ if (!this->input_argument_->is_lib())
+ name = this->input_argument_->name();
+ else
+ {
+ std::string n1("lib");
+ n1 += this->input_argument_->name();
+ std::string n2;
+ if (options.is_static())
+ n1 += ".a";
+ else
+ {
+ n2 = n1 + ".a";
+ n1 += ".so";
+ }
+ name = dirpath.find(n1, n2);
+ if (name.empty())
+ {
+ fprintf(stderr, _("%s: cannot find %s\n"), program_name,
+ this->input_argument_->name());
+ gold_exit(false);
+ }
+ }
+
+ if (!this->file_.open(name))
+ {
+ fprintf(stderr, _("%s: cannot open %s: %s\n"), program_name,
+ name.c_str(), strerror(errno));
+ gold_exit(false);
+ }
+}
+
+} // End namespace gold.
diff --git a/gold/fileread.h b/gold/fileread.h
new file mode 100644
index 000000000000..178e7f355e44
--- /dev/null
+++ b/gold/fileread.h
@@ -0,0 +1,257 @@
+// fileread.h -- read files for gold -*- C++ -*-
+
+// Classes used to read data from binary input files.
+
+#ifndef GOLD_FILEREAD_H
+#define GOLD_FILEREAD_H
+
+#include <list>
+#include <map>
+#include <string>
+
+#include "options.h"
+
+namespace gold
+{
+
+class Dirsearch;
+class File_view;
+
+// File_read manages a file descriptor for a file we are reading. We
+// close file descriptors if we run out of them, so this class reopens
+// the file as needed.
+
+class File_read
+{
+ public:
+ File_read()
+ : name_(), descriptor_(-1), lock_count_(0), views_(),
+ saved_views_(), contents_(NULL), contents_size_(0)
+ { }
+
+ ~File_read();
+
+ // Open a file.
+ bool
+ open(const std::string& name);
+
+ // Pretend to open the file, but provide the file contents. No
+ // actual file system activity will occur. This is used for
+ // testing.
+ bool
+ open(const std::string& name, const unsigned char* contents, off_t size);
+
+ // Return the file name.
+ const std::string&
+ filename() const
+ { return this->name_; }
+
+ // Lock the file for access within a particular Task::run execution.
+ // This means that the descriptor can not be closed. This routine
+ // may only be called from the main thread.
+ void
+ lock();
+
+ // Unlock the descriptor, permitting it to be closed if necessary.
+ void
+ unlock();
+
+ // Test whether the object is locked.
+ bool
+ is_locked();
+
+ // Return a view into the file. The pointer will remain valid until
+ // the File_read is unlocked. If PBYTES is NULL, it is an error if
+ // we can not read enough data. Otherwise *PBYTES is set to the
+ // number of bytes read.
+ const unsigned char*
+ get_view(off_t start, off_t size, off_t *pbytes = NULL);
+
+ // Read data from the file into the buffer P. PBYTES is as in
+ // get_view.
+ void
+ read(off_t start, off_t size, void* p, off_t *pbytes = NULL);
+
+ // Return a lasting view into the file. This is allocated with new,
+ // and the caller is responsible for deleting it when done. The
+ // data associated with this view will remain valid until the view
+ // is deleted. PBYTES is handled as with get_view.
+ File_view*
+ get_lasting_view(off_t start, off_t size, off_t *pbytes = NULL);
+
+ private:
+ // This class may not be copied.
+ File_read(const File_read&);
+ File_read& operator=(const File_read&);
+
+ // A view into the file when not using mmap.
+ class View
+ {
+ public:
+ View(off_t start, off_t size, unsigned char* data)
+ : start_(start), size_(size), data_(data), lock_count_(0)
+ { }
+
+ ~View();
+
+ off_t
+ start() const
+ { return this->start_; }
+
+ off_t
+ size() const
+ { return this->size_; }
+
+ unsigned char*
+ data() const
+ { return this->data_; }
+
+ void
+ lock();
+
+ void
+ unlock();
+
+ bool
+ is_locked();
+
+ private:
+ View(const View&);
+ View& operator=(const View&);
+
+ off_t start_;
+ off_t size_;
+ unsigned char* data_;
+ int lock_count_;
+ };
+
+ friend class File_view;
+
+ // Find a view into the file.
+ View*
+ find_view(off_t start, off_t size);
+
+ // Read data from the file into a buffer.
+ off_t
+ do_read(off_t start, off_t size, void* p, off_t* pbytes);
+
+ // Find or make a view into the file.
+ View*
+ find_or_make_view(off_t start, off_t size, off_t* pbytes);
+
+ // Clear the file views.
+ void
+ clear_views(bool);
+
+ // The size of a file page for buffering data.
+ static const off_t page_size = 8192;
+
+ // Given a file offset, return the page offset.
+ static off_t
+ page_offset(off_t file_offset)
+ { return file_offset & ~ (page_size - 1); }
+
+ // Given a file size, return the size to read integral pages.
+ static off_t
+ pages(off_t file_size)
+ { return (file_size + (page_size - 1)) & ~ (page_size - 1); }
+
+ // The type of a mapping from page start to views.
+ typedef std::map<off_t, View*> Views;
+
+ // A simple list of Views.
+ typedef std::list<View*> Saved_views;
+
+ // File name.
+ std::string name_;
+ // File descriptor.
+ int descriptor_;
+ // Number of locks on the file.
+ int lock_count_;
+ // Buffered views into the file.
+ Views views_;
+ // List of views which were locked but had to be removed from views_
+ // because they were not large enough.
+ Saved_views saved_views_;
+ // Specified file contents. Used only for testing purposes.
+ const unsigned char* contents_;
+ // Specified file size. Used only for testing purposes.
+ off_t contents_size_;
+};
+
+// A view of file data that persists even when the file is unlocked.
+// Callers should destroy these when no longer required. These are
+// obtained form File_read::get_lasting_view. They may only be
+// destroyed when the underlying File_read is locked.
+
+class File_view
+{
+ public:
+ // This may only be called when the underlying File_read is locked.
+ ~File_view();
+
+ // Return a pointer to the data associated with this view.
+ const unsigned char*
+ data() const
+ { return this->data_; }
+
+ private:
+ File_view(const File_view&);
+ File_view& operator=(const File_view&);
+
+ friend class File_read;
+
+ // Callers have to get these via File_read::get_lasting_view.
+ File_view(File_read& file, File_read::View* view, const unsigned char* data)
+ : file_(file), view_(view), data_(data)
+ { }
+
+ File_read& file_;
+ File_read::View* view_;
+ const unsigned char* data_;
+};
+
+// All the information we hold for a single input file. This can be
+// an object file, a shared library, or an archive.
+
+class Input_file
+{
+ public:
+ Input_file(const Input_file_argument* input_argument)
+ : input_argument_(input_argument), file_()
+ { }
+
+ // Create an input file with the contents already provided. This is
+ // only used for testing. With this path, don't call the open
+ // method.
+ Input_file(const char* name, const unsigned char* contents, off_t size);
+
+ // Open the file.
+ void
+ open(const General_options&, const Dirsearch&);
+
+ // Return the name given by the user.
+ const char*
+ name() const
+ { return this->input_argument_->name(); }
+
+ // Return the file name.
+ const std::string&
+ filename() const
+ { return this->file_.filename(); }
+
+ File_read&
+ file()
+ { return this->file_; }
+
+ private:
+ Input_file(const Input_file&);
+ Input_file& operator=(const Input_file&);
+
+ const Input_file_argument* input_argument_;
+ File_read file_;
+};
+
+} // end namespace gold
+
+#endif // !defined(GOLD_FILEREAD_H)
diff --git a/gold/gold-threads.cc b/gold/gold-threads.cc
new file mode 100644
index 000000000000..537373969ada
--- /dev/null
+++ b/gold/gold-threads.cc
@@ -0,0 +1,228 @@
+// gold-threads.cc -- thread support for gold
+
+#include "gold.h"
+
+#ifdef ENABLE_THREADS
+#include <pthread.h>
+#endif
+
+#include "gold-threads.h"
+
+namespace gold
+{
+
+// Class Lock_impl.
+
+class Lock_impl
+{
+ public:
+ Lock_impl();
+ ~Lock_impl();
+
+ void acquire();
+
+ void release();
+
+private:
+ // This class can not be copied.
+ Lock_impl(const Lock_impl&);
+ Lock_impl& operator=(const Lock_impl&);
+
+ friend class Condvar_impl;
+
+#ifdef ENABLE_THREADS
+ pthread_mutex_t mutex_;
+#else
+ bool acquired_;
+#endif
+};
+
+#ifdef ENABLE_THREADS
+
+Lock_impl::Lock_impl()
+{
+ pthread_mutexattr_t attr;
+ if (pthread_mutexattr_init(&attr) != 0)
+ gold_fatal(_("pthead_mutextattr_init failed"), true);
+#ifdef PTHREAD_MUTEXT_ADAPTIVE_NP
+ if (pthread_mutextattr_settype(&attr, PTHREAD_MUTEX_ADAPTIVE_NP) != 0)
+ gold_fatal(_("pthread_mutextattr_settype failed"), true);
+#endif
+
+ if (pthread_mutex_init (&this->mutex_, &attr) != 0)
+ gold_fatal(_("pthread_mutex_init failed"), true);
+
+ if (pthread_mutexattr_destroy(&attr) != 0)
+ gold_fatal(_("pthread_mutexattr_destroy failed"), true);
+}
+
+Lock_impl::~Lock_impl()
+{
+ if (pthread_mutex_destroy(&this->mutex_) != 0)
+ gold_fatal(_("pthread_mutex_destroy failed"), true);
+}
+
+void
+Lock_impl::acquire()
+{
+ if (pthread_mutex_lock(&this->mutex_) != 0)
+ gold_fatal(_("pthread_mutex_lock failed"), true);
+}
+
+void
+Lock_impl::release()
+{
+ if (pthread_mutex_unlock(&this->mutex_) != 0)
+ gold_fatal(_("pthread_mutex_unlock failed"), true);
+}
+
+#else // !defined(ENABLE_THREADS)
+
+Lock_impl::Lock_impl()
+ : acquired_(false)
+{
+}
+
+Lock_impl::~Lock_impl()
+{
+ gold_assert(!this->acquired_);
+}
+
+void
+Lock_impl::acquire()
+{
+ gold_assert(!this->acquired_);
+ this->acquired_ = true;
+}
+
+void
+Lock_impl::release()
+{
+ gold_assert(this->acquired_);
+ this->acquired_ = false;
+}
+
+#endif // !defined(ENABLE_THREADS)
+
+// Methods for Lock class.
+
+Lock::Lock()
+{
+ this->lock_ = new Lock_impl;
+}
+
+Lock::~Lock()
+{
+ delete this->lock_;
+}
+
+void
+Lock::acquire()
+{
+ this->lock_->acquire();
+}
+
+void
+Lock::release()
+{
+ this->lock_->release();
+}
+
+// Class Condvar_impl.
+
+class Condvar_impl
+{
+ public:
+ Condvar_impl();
+ ~Condvar_impl();
+
+ void wait(Lock_impl*);
+ void signal();
+
+ private:
+ // This class can not be copied.
+ Condvar_impl(const Condvar_impl&);
+ Condvar_impl& operator=(const Condvar_impl&);
+
+#ifdef ENABLE_THREADS
+ pthread_cond_t cond_;
+#endif
+};
+
+#ifdef ENABLE_THREADS
+
+Condvar_impl::Condvar_impl()
+{
+ if (pthread_cond_init(&this->cond_, NULL) != 0)
+ gold_fatal(_("pthread_cond_init failed"), true);
+}
+
+Condvar_impl::~Condvar_impl()
+{
+ if (pthread_cond_destroy(&this->cond_) != 0)
+ gold_fatal(_("pthread_cond_destroy failed"), true);
+}
+
+void
+Condvar_impl::wait(Lock_impl* li)
+{
+ if (pthread_cond_wait(&this->cond_, &li->mutex_) != 0)
+ gold_fatal(_("pthread_cond_wait failed"), true);
+}
+
+void
+Condvar_impl::signal()
+{
+ if (pthread_cond_signal(&this->cond_) != 0)
+ gold_fatal(_("pthread_cond_signal failed"), true);
+}
+
+#else // !defined(ENABLE_THREADS)
+
+Condvar_impl::Condvar_impl()
+{
+}
+
+Condvar_impl::~Condvar_impl()
+{
+}
+
+void
+Condvar_impl::wait(Lock_impl* li)
+{
+ gold_assert(li->acquired_);
+}
+
+void
+Condvar_impl::signal()
+{
+}
+
+#endif // !defined(ENABLE_THREADS)
+
+// Methods for Condvar class.
+
+Condvar::Condvar(Lock& lock)
+ : lock_(lock)
+{
+ this->condvar_ = new Condvar_impl;
+}
+
+Condvar::~Condvar()
+{
+ delete this->condvar_;
+}
+
+void
+Condvar::wait()
+{
+ this->condvar_->wait(this->lock_.get_impl());
+}
+
+void
+Condvar::signal()
+{
+ this->condvar_->signal();
+}
+
+} // End namespace gold.
diff --git a/gold/gold-threads.h b/gold/gold-threads.h
new file mode 100644
index 000000000000..e2a8388ac136
--- /dev/null
+++ b/gold/gold-threads.h
@@ -0,0 +1,101 @@
+// gold-threads.h -- thread support for gold -*- C++ -*-
+
+// gold can be configured to support threads. If threads are
+// supported, the user can specify at runtime whether or not to
+// support them. This provides an interface to manage locking
+// accordingly.
+
+// Lock
+// A simple lock class.
+
+#ifndef GOLD_THREADS_H
+#define GOLD_THREADS_H
+
+namespace gold
+{
+
+class Lock_impl;
+class Condvar;
+
+// A simple lock class.
+
+class Lock
+{
+ public:
+ Lock();
+ ~Lock();
+
+ // Acquire the lock.
+ void
+ acquire();
+
+ // Release the lock.
+ void
+ release();
+
+ private:
+ // This class can not be copied.
+ Lock(const Lock&);
+ Lock& operator=(const Lock&);
+
+ friend class Condvar;
+ Lock_impl*
+ get_impl() const
+ { return this->lock_; }
+
+ Lock_impl* lock_;
+};
+
+// RAII for Lock.
+
+class Hold_lock
+{
+ public:
+ Hold_lock(Lock& lock)
+ : lock_(lock)
+ { this->lock_.acquire(); }
+
+ ~Hold_lock()
+ { this->lock_.release(); }
+
+ private:
+ // This class can not be copied.
+ Hold_lock(const Hold_lock&);
+ Hold_lock& operator=(const Hold_lock&);
+
+ Lock& lock_;
+};
+
+class Condvar_impl;
+
+// A simple condition variable class. It is always associated with a
+// specific lock.
+
+class Condvar
+{
+ public:
+ Condvar(Lock& lock);
+ ~Condvar();
+
+ // Wait for the condition variable to be signalled. This should
+ // only be called when the lock is held.
+ void
+ wait();
+
+ // Signal the condition variable. This should only be called when
+ // the lock is held.
+ void
+ signal();
+
+ private:
+ // This class can not be copied.
+ Condvar(const Condvar&);
+ Condvar& operator=(const Condvar&);
+
+ Lock& lock_;
+ Condvar_impl* condvar_;
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_THREADS_H)
diff --git a/gold/gold.cc b/gold/gold.cc
new file mode 100644
index 000000000000..e7b7ae2939d7
--- /dev/null
+++ b/gold/gold.cc
@@ -0,0 +1,239 @@
+// gold.cc -- main linker functions
+
+#include "gold.h"
+
+#include <cstdlib>
+#include <cstdio>
+#include <cstring>
+#include <unistd.h>
+
+#include "options.h"
+#include "workqueue.h"
+#include "dirsearch.h"
+#include "readsyms.h"
+#include "symtab.h"
+#include "common.h"
+#include "object.h"
+#include "layout.h"
+#include "reloc.h"
+#include "defstd.h"
+
+namespace gold
+{
+
+const char* program_name;
+
+void
+gold_exit(bool status)
+{
+ exit(status ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
+void
+gold_fatal(const char* msg, bool perrno)
+{
+ fprintf(stderr, "%s: ", program_name);
+ if (perrno)
+ perror(msg);
+ else
+ fprintf(stderr, "%s\n", msg);
+ gold_exit(false);
+}
+
+void
+gold_nomem()
+{
+ // We are out of memory, so try hard to print a reasonable message.
+ // Note that we don't try to translate this message, since the
+ // translation process itself will require memory.
+ write(2, program_name, strlen(program_name));
+ const char* const s = ": out of memory\n";
+ write(2, s, strlen(s));
+ gold_exit(false);
+}
+
+// Handle an unreachable case.
+
+void
+do_gold_unreachable(const char* filename, int lineno, const char* function)
+{
+ fprintf(stderr, "%s: internal error in %s, at %s:%d\n",
+ program_name, function, filename, lineno);
+ gold_exit(false);
+}
+
+// This class arranges to run the functions done in the middle of the
+// link. It is just a closure.
+
+class Middle_runner : public Task_function_runner
+{
+ public:
+ Middle_runner(const General_options& options,
+ const Input_objects* input_objects,
+ Symbol_table* symtab,
+ Layout* layout)
+ : options_(options), input_objects_(input_objects), symtab_(symtab),
+ layout_(layout)
+ { }
+
+ void
+ run(Workqueue*);
+
+ private:
+ const General_options& options_;
+ const Input_objects* input_objects_;
+ Symbol_table* symtab_;
+ Layout* layout_;
+};
+
+void
+Middle_runner::run(Workqueue* workqueue)
+{
+ queue_middle_tasks(this->options_, this->input_objects_, this->symtab_,
+ this->layout_, workqueue);
+}
+
+// Queue up the initial set of tasks for this link job.
+
+void
+queue_initial_tasks(const General_options& options,
+ const Dirsearch& search_path,
+ const Command_line& cmdline,
+ Workqueue* workqueue, Input_objects* input_objects,
+ Symbol_table* symtab, Layout* layout)
+{
+ if (cmdline.begin() == cmdline.end())
+ gold_fatal(_("no input files"), false);
+
+ // Read the input files. We have to add the symbols to the symbol
+ // table in order. We do this by creating a separate blocker for
+ // each input file. We associate the blocker with the following
+ // input file, to give us a convenient place to delete it.
+ Task_token* this_blocker = NULL;
+ for (Command_line::const_iterator p = cmdline.begin();
+ p != cmdline.end();
+ ++p)
+ {
+ Task_token* next_blocker = new Task_token();
+ next_blocker->add_blocker();
+ workqueue->queue(new Read_symbols(options, input_objects, symtab, layout,
+ search_path, &*p, NULL, this_blocker,
+ next_blocker));
+ this_blocker = next_blocker;
+ }
+
+ workqueue->queue(new Task_function(new Middle_runner(options,
+ input_objects,
+ symtab,
+ layout),
+ this_blocker));
+}
+
+// Queue up the middle set of tasks. These are the tasks which run
+// after all the input objects have been found and all the symbols
+// have been read, but before we lay out the output file.
+
+void
+queue_middle_tasks(const General_options& options,
+ const Input_objects* input_objects,
+ Symbol_table* symtab,
+ Layout* layout,
+ Workqueue* workqueue)
+{
+ // Define some sections and symbols needed for a dynamic link. This
+ // handles some cases we want to see before we read the relocs.
+ layout->create_initial_dynamic_sections(input_objects, symtab);
+
+ // Predefine standard symbols. This should be fast, so we don't
+ // bother to create a task for it.
+ define_standard_symbols(symtab, layout, input_objects->target());
+
+ // Read the relocations of the input files. We do this to find
+ // which symbols are used by relocations which require a GOT and/or
+ // a PLT entry, or a COPY reloc. When we implement garbage
+ // collection we will do it here by reading the relocations in a
+ // breadth first search by references.
+ //
+ // We could also read the relocations during the first pass, and
+ // mark symbols at that time. That is how the old GNU linker works.
+ // Doing that is more complex, since we may later decide to discard
+ // some of the sections, and thus change our minds about the types
+ // of references made to the symbols.
+ Task_token* blocker = new Task_token();
+ Task_token* symtab_lock = new Task_token();
+ for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
+ p != input_objects->relobj_end();
+ ++p)
+ {
+ // We can read and process the relocations in any order. But we
+ // only want one task to write to the symbol table at a time.
+ // So we queue up a task for each object to read the
+ // relocations. That task will in turn queue a task to wait
+ // until it can write to the symbol table.
+ blocker->add_blocker();
+ workqueue->queue(new Read_relocs(options, symtab, layout, *p,
+ symtab_lock, blocker));
+ }
+
+ // Allocate common symbols. This requires write access to the
+ // symbol table, but is independent of the relocation processing.
+ blocker->add_blocker();
+ workqueue->queue(new Allocate_commons_task(options, symtab, layout,
+ symtab_lock, blocker));
+
+ // When all those tasks are complete, we can start laying out the
+ // output file.
+ workqueue->queue(new Task_function(new Layout_task_runner(options,
+ input_objects,
+ symtab,
+ layout),
+ blocker));
+}
+
+// Queue up the final set of tasks. This is called at the end of
+// Layout_task.
+
+void
+queue_final_tasks(const General_options& options,
+ const Input_objects* input_objects,
+ const Symbol_table* symtab,
+ const Layout* layout,
+ Workqueue* workqueue,
+ Output_file* of)
+{
+ // Use a blocker to block the final cleanup task.
+ Task_token* final_blocker = new Task_token();
+
+ // Queue a task for each input object to relocate the sections and
+ // write out the local symbols.
+ for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
+ p != input_objects->relobj_end();
+ ++p)
+ {
+ final_blocker->add_blocker();
+ workqueue->queue(new Relocate_task(options, symtab, layout, *p, of,
+ final_blocker));
+ }
+
+ // Queue a task to write out the symbol table.
+ final_blocker->add_blocker();
+ workqueue->queue(new Write_symbols_task(symtab,
+ input_objects->target(),
+ layout->sympool(),
+ layout->dynpool(),
+ of,
+ final_blocker));
+
+ // Queue a task to write out everything else.
+ final_blocker->add_blocker();
+ workqueue->queue(new Write_data_task(layout, symtab,
+ input_objects->target(),
+ of, final_blocker));
+
+ // Queue a task to close the output file. This will be blocked by
+ // FINAL_BLOCKER.
+ workqueue->queue(new Task_function(new Close_task_runner(of),
+ final_blocker));
+}
+
+} // End namespace gold.
diff --git a/gold/gold.h b/gold/gold.h
new file mode 100644
index 000000000000..288d9eb937bf
--- /dev/null
+++ b/gold/gold.h
@@ -0,0 +1,214 @@
+// gold.h -- general definitions for gold -*- C++ -*-
+
+#ifndef GOLD_GOLD_H
+
+#include "config.h"
+#include "ansidecl.h"
+
+#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
+
+// Figure out how to get a hash set and a hash map.
+
+#if defined(HAVE_TR1_UNORDERED_SET) && defined(HAVE_TR1_UNORDERED_MAP)
+
+#include <tr1/unordered_set>
+#include <tr1/unordered_map>
+
+// We need a template typedef here.
+
+#define Unordered_set std::tr1::unordered_set
+#define Unordered_map std::tr1::unordered_map
+
+#elif defined(HAVE_EXT_HASH_MAP) && defined(HAVE_EXT_HASH_SET)
+
+#include <ext/hash_map>
+#include <ext/hash_set>
+#include <string>
+
+#define Unordered_set __gnu_cxx::hash_set
+#define Unordered_map __gnu_cxx::hash_map
+
+namespace __gnu_cxx
+{
+
+template<>
+struct hash<std::string>
+{
+ size_t
+ operator()(std::string s) const
+ { return __stl_hash_string(s.c_str()); }
+};
+
+template<typename T>
+struct hash<T*>
+{
+ size_t
+ operator()(T* p) const
+ { return reinterpret_cast<size_t>(p); }
+};
+
+}
+
+#else
+
+// The fallback is to just use set and map.
+
+#include <set>
+#include <map>
+
+#define Unordered_set std::set
+#define Unordered_map std::map
+
+#endif
+
+namespace gold
+{
+// This is a hack to work around a problem with older versions of g++.
+// The problem is that they don't support calling a member template by
+// specifying the template parameters. It works to pass in an
+// argument for argument dependent lookup.
+
+// To use this, the member template method declaration should put
+// ACCEPT_SIZE or ACCEPT_SIZE_ENDIAN after the last parameter. If the
+// method takes no parameters, use ACCEPT_SIZE_ONLY or
+// ACCEPT_SIZE_ENDIAN_ONLY.
+
+// When calling the method, instead of using fn<size>, use fn
+// SELECT_SIZE_NAME or SELECT_SIZE_ENDIAN_NAME. And after the last
+// argument, put SELECT_SIZE(size) or SELECT_SIZE_ENDIAN(size,
+// big_endian). If there is only one argment, use the _ONLY variants.
+
+#ifdef HAVE_MEMBER_TEMPLATE_SPECIFICATIONS
+
+#define SELECT_SIZE_NAME(size) <size>
+#define SELECT_SIZE(size)
+#define SELECT_SIZE_ONLY(size)
+#define ACCEPT_SIZE
+#define ACCEPT_SIZE_ONLY
+#define ACCEPT_SIZE_EXPLICIT(size)
+
+#define SELECT_SIZE_ENDIAN_NAME(size, big_endian) <size, big_endian>
+#define SELECT_SIZE_ENDIAN(size, big_endian)
+#define SELECT_SIZE_ENDIAN_ONLY(size, big_endian)
+#define ACCEPT_SIZE_ENDIAN
+#define ACCEPT_SIZE_ENDIAN_ONLY
+#define ACCEPT_SIZE_ENDIAN_EXPLICIT(size, big_endian)
+
+#else // !defined(HAVE_MEMBER_TEMPLATE_SPECIFICATIONS)
+
+template<int size>
+class Select_size { };
+template<int size, bool big_endian>
+class Select_size_endian { };
+
+#define SELECT_SIZE_NAME(size)
+#define SELECT_SIZE(size) , Select_size<size>()
+#define SELECT_SIZE_ONLY(size) Select_size<size>()
+#define ACCEPT_SIZE , Select_size<size>
+#define ACCEPT_SIZE_ONLY Select_size<size>
+#define ACCEPT_SIZE_EXPLICIT(size) , Select_size<size>
+
+#define SELECT_SIZE_ENDIAN_NAME(size, big_endian)
+#define SELECT_SIZE_ENDIAN(size, big_endian) \
+ , Select_size_endian<size, big_endian>()
+#define SELECT_SIZE_ENDIAN_ONLY(size, big_endian) \
+ Select_size_endian<size, big_endian>()
+#define ACCEPT_SIZE_ENDIAN , Select_size_endian<size, big_endian>
+#define ACCEPT_SIZE_ENDIAN_ONLY Select_size_endian<size, big_endian>
+#define ACCEPT_SIZE_ENDIAN_EXPLICIT(size, big_endian) \
+ , Select_size_endian<size, big_endian>
+
+#endif // !defined(HAVE_MEMBER_TEMPLATE_SPECIFICATIONS)
+
+} // End namespace gold.
+
+namespace gold
+{
+
+class General_options;
+class Command_line;
+class Input_argument_list;
+class Dirsearch;
+class Input_objects;
+class Symbol_table;
+class Layout;
+class Workqueue;
+class Output_file;
+
+// The name of the program as used in error messages.
+extern const char* program_name;
+
+// This function is called to exit the program. Status is true to
+// exit success (0) and false to exit failure (1).
+extern void
+gold_exit(bool status) ATTRIBUTE_NORETURN;
+
+// This function is called to emit an unexpected error message and a
+// newline, and then exit with failure. If PERRNO is true, it reports
+// the error in errno.
+extern void
+gold_fatal(const char* msg, bool perrno) ATTRIBUTE_NORETURN;
+
+// This is function is called in some cases if we run out of memory.
+extern void
+gold_nomem() ATTRIBUTE_NORETURN;
+
+// This macro and function are used in cases which can not arise if
+// the code is written correctly.
+
+#define gold_unreachable() \
+ (gold::do_gold_unreachable(__FILE__, __LINE__, __FUNCTION__))
+
+extern void do_gold_unreachable(const char*, int, const char*)
+ ATTRIBUTE_NORETURN;
+
+// Assertion check.
+
+#define gold_assert(expr) ((void)(!(expr) ? gold_unreachable(), 0 : 0))
+
+// Queue up the first set of tasks.
+extern void
+queue_initial_tasks(const General_options&,
+ const Dirsearch&,
+ const Command_line&,
+ Workqueue*,
+ Input_objects*,
+ Symbol_table*,
+ Layout*);
+
+// Queue up the middle set of tasks.
+extern void
+queue_middle_tasks(const General_options&,
+ const Input_objects*,
+ Symbol_table*,
+ Layout*,
+ Workqueue*);
+
+// Queue up the final set of tasks.
+extern void
+queue_final_tasks(const General_options&,
+ const Input_objects*,
+ const Symbol_table*,
+ const Layout*,
+ Workqueue*,
+ Output_file* of);
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_GOLD_H)
diff --git a/gold/i386.cc b/gold/i386.cc
new file mode 100644
index 000000000000..448453aa3495
--- /dev/null
+++ b/gold/i386.cc
@@ -0,0 +1,1517 @@
+// i386.cc -- i386 target support for gold.
+
+#include "gold.h"
+
+#include <cstring>
+
+#include "elfcpp.h"
+#include "reloc.h"
+#include "i386.h"
+#include "object.h"
+#include "symtab.h"
+#include "layout.h"
+#include "output.h"
+#include "target.h"
+#include "target-reloc.h"
+#include "target-select.h"
+
+namespace
+{
+
+using namespace gold;
+
+class Output_data_plt_i386;
+
+// The i386 target class.
+
+class Target_i386 : public Sized_target<32, false>
+{
+ public:
+ typedef Output_data_reloc<elfcpp::SHT_REL, true, 32, false> Reloc_section;
+
+ Target_i386()
+ : Sized_target<32, false>(&i386_info),
+ got_(NULL), plt_(NULL), got_plt_(NULL), rel_dyn_(NULL),
+ copy_relocs_(NULL), dynbss_(NULL)
+ { }
+
+ // Scan the relocations to look for symbol adjustments.
+ void
+ scan_relocs(const General_options& options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Sized_relobj<32, false>* object,
+ unsigned int data_shndx,
+ unsigned int sh_type,
+ const unsigned char* prelocs,
+ size_t reloc_count,
+ size_t local_symbol_count,
+ const unsigned char* plocal_symbols,
+ Symbol** global_symbols);
+
+ // Finalize the sections.
+ void
+ do_finalize_sections(const General_options*, Layout*);
+
+ // Relocate a section.
+ void
+ relocate_section(const Relocate_info<32, false>*,
+ unsigned int sh_type,
+ const unsigned char* prelocs,
+ size_t reloc_count,
+ unsigned char* view,
+ elfcpp::Elf_types<32>::Elf_Addr view_address,
+ off_t view_size);
+
+ private:
+ // The class which scans relocations.
+ struct Scan
+ {
+ inline void
+ local(const General_options& options, Symbol_table* symtab,
+ Layout* layout, Target_i386* target,
+ Sized_relobj<32, false>* object,
+ unsigned int data_shndx,
+ const elfcpp::Rel<32, false>& reloc, unsigned int r_type,
+ const elfcpp::Sym<32, false>& lsym);
+
+ inline void
+ global(const General_options& options, Symbol_table* symtab,
+ Layout* layout, Target_i386* target,
+ Sized_relobj<32, false>* object,
+ unsigned int data_shndx,
+ const elfcpp::Rel<32, false>& reloc, unsigned int r_type,
+ Symbol* gsym);
+ };
+
+ // The class which implements relocation.
+ class Relocate
+ {
+ public:
+ Relocate()
+ : skip_call_tls_get_addr_(false)
+ { }
+
+ ~Relocate()
+ {
+ if (this->skip_call_tls_get_addr_)
+ {
+ // FIXME: This needs to specify the location somehow.
+ fprintf(stderr, _("%s: missing expected TLS relocation\n"),
+ program_name);
+ gold_exit(false);
+ }
+ }
+
+ // Do a relocation. Return false if the caller should not issue
+ // any warnings about this relocation.
+ inline bool
+ relocate(const Relocate_info<32, false>*, Target_i386*, size_t relnum,
+ const elfcpp::Rel<32, false>&,
+ unsigned int r_type, const Sized_symbol<32>*,
+ const Symbol_value<32>*,
+ unsigned char*, elfcpp::Elf_types<32>::Elf_Addr,
+ off_t);
+
+ private:
+ // Do a TLS relocation.
+ inline void
+ relocate_tls(const Relocate_info<32, false>*, size_t relnum,
+ const elfcpp::Rel<32, false>&,
+ unsigned int r_type, const Sized_symbol<32>*,
+ const Symbol_value<32>*,
+ unsigned char*, elfcpp::Elf_types<32>::Elf_Addr, off_t);
+
+ // Do a TLS Initial-Exec to Local-Exec transition.
+ static inline void
+ tls_ie_to_le(const Relocate_info<32, false>*, size_t relnum,
+ Output_segment* tls_segment,
+ const elfcpp::Rel<32, false>&, unsigned int r_type,
+ elfcpp::Elf_types<32>::Elf_Addr value,
+ unsigned char* view,
+ off_t view_size);
+
+ // Do a TLS Global-Dynamic to Local-Exec transition.
+ inline void
+ tls_gd_to_le(const Relocate_info<32, false>*, size_t relnum,
+ Output_segment* tls_segment,
+ const elfcpp::Rel<32, false>&, unsigned int r_type,
+ elfcpp::Elf_types<32>::Elf_Addr value,
+ unsigned char* view,
+ off_t view_size);
+
+ // Check the range for a TLS relocation.
+ static inline void
+ check_range(const Relocate_info<32, false>*, size_t relnum,
+ const elfcpp::Rel<32, false>&, off_t, off_t);
+
+ // Check the validity of a TLS relocation. This is like assert.
+ static inline void
+ check_tls(const Relocate_info<32, false>*, size_t relnum,
+ const elfcpp::Rel<32, false>&, bool);
+
+ // This is set if we should skip the next reloc, which should be a
+ // PLT32 reloc against ___tls_get_addr.
+ bool skip_call_tls_get_addr_;
+ };
+
+ // Adjust TLS relocation type based on the options and whether this
+ // is a local symbol.
+ static unsigned int
+ optimize_tls_reloc(const General_options*, bool is_final, int r_type);
+
+ // Get the GOT section, creating it if necessary.
+ Output_data_got<32, false>*
+ got_section(const General_options*, Symbol_table*, Layout*);
+
+ // Create a PLT entry for a global symbol.
+ void
+ make_plt_entry(const General_options* options, Symbol_table*,
+ Layout*, Symbol*);
+
+ // Get the PLT section.
+ Output_data_plt_i386*
+ plt_section() const
+ {
+ gold_assert(this->plt_ != NULL);
+ return this->plt_;
+ }
+
+ // Get the dynamic reloc section, creating it if necessary.
+ Reloc_section*
+ rel_dyn_section(Layout*);
+
+ // Copy a relocation against a global symbol.
+ void
+ copy_reloc(const General_options*, Symbol_table*, Layout*,
+ Sized_relobj<32, false>*, unsigned int,
+ Symbol*, const elfcpp::Rel<32, false>&);
+
+ // Information about this specific target which we pass to the
+ // general Target structure.
+ static const Target::Target_info i386_info;
+
+ // The GOT section.
+ Output_data_got<32, false>* got_;
+ // The PLT section.
+ Output_data_plt_i386* plt_;
+ // The GOT PLT section.
+ Output_data_space* got_plt_;
+ // The dynamic reloc section.
+ Reloc_section* rel_dyn_;
+ // Relocs saved to avoid a COPY reloc.
+ Copy_relocs<32, false>* copy_relocs_;
+ // Space for variables copied with a COPY reloc.
+ Output_data_space* dynbss_;
+};
+
+const Target::Target_info Target_i386::i386_info =
+{
+ 32, // size
+ false, // is_big_endian
+ elfcpp::EM_386, // machine_code
+ false, // has_make_symbol
+ false, // has_resolve
+ "/usr/lib/libc.so.1", // dynamic_linker
+ 0x08048000, // text_segment_address
+ 0x1000, // abi_pagesize
+ 0x1000 // common_pagesize
+};
+
+// Get the GOT section, creating it if necessary.
+
+Output_data_got<32, false>*
+Target_i386::got_section(const General_options* options, Symbol_table* symtab,
+ Layout* layout)
+{
+ if (this->got_ == NULL)
+ {
+ gold_assert(options != NULL && symtab != NULL && layout != NULL);
+
+ this->got_ = new Output_data_got<32, false>(options);
+
+ layout->add_output_section_data(".got", elfcpp::SHT_PROGBITS,
+ elfcpp::SHF_ALLOC | elfcpp::SHF_WRITE,
+ this->got_);
+
+ // The old GNU linker creates a .got.plt section. We just
+ // create another set of data in the .got section. Note that we
+ // always create a PLT if we create a GOT, although the PLT
+ // might be empty.
+ this->got_plt_ = new Output_data_space(4);
+ layout->add_output_section_data(".got", elfcpp::SHT_PROGBITS,
+ elfcpp::SHF_ALLOC | elfcpp::SHF_WRITE,
+ this->got_plt_);
+
+ // The first three entries are reserved.
+ this->got_plt_->set_space_size(3 * 4);
+
+ // Define _GLOBAL_OFFSET_TABLE_ at the start of the PLT.
+ symtab->define_in_output_data(this, "_GLOBAL_OFFSET_TABLE_", NULL,
+ this->got_plt_,
+ 0, 0, elfcpp::STT_OBJECT,
+ elfcpp::STB_LOCAL,
+ elfcpp::STV_HIDDEN, 0,
+ false, false);
+ }
+
+ return this->got_;
+}
+
+// Get the dynamic reloc section, creating it if necessary.
+
+Target_i386::Reloc_section*
+Target_i386::rel_dyn_section(Layout* layout)
+{
+ if (this->rel_dyn_ == NULL)
+ {
+ gold_assert(layout != NULL);
+ this->rel_dyn_ = new Reloc_section();
+ layout->add_output_section_data(".rel.dyn", elfcpp::SHT_REL,
+ elfcpp::SHF_ALLOC, this->rel_dyn_);
+ }
+ return this->rel_dyn_;
+}
+
+// A class to handle the PLT data.
+
+class Output_data_plt_i386 : public Output_section_data
+{
+ public:
+ typedef Output_data_reloc<elfcpp::SHT_REL, true, 32, false> Reloc_section;
+
+ Output_data_plt_i386(Layout*, Output_data_space*, bool is_shared);
+
+ // Add an entry to the PLT.
+ void
+ add_entry(Symbol* gsym);
+
+ // Return the .rel.plt section data.
+ const Reloc_section*
+ rel_plt() const
+ { return this->rel_; }
+
+ protected:
+ void
+ do_adjust_output_section(Output_section* os);
+
+ private:
+ // The size of an entry in the PLT.
+ static const int plt_entry_size = 16;
+
+ // The first entry in the PLT for an executable.
+ static unsigned char exec_first_plt_entry[plt_entry_size];
+
+ // The first entry in the PLT for a shared object.
+ static unsigned char dyn_first_plt_entry[plt_entry_size];
+
+ // Other entries in the PLT for an executable.
+ static unsigned char exec_plt_entry[plt_entry_size];
+
+ // Other entries in the PLT for a shared object.
+ static unsigned char dyn_plt_entry[plt_entry_size];
+
+ // Set the final size.
+ void
+ do_set_address(uint64_t, off_t)
+ { this->set_data_size((this->count_ + 1) * plt_entry_size); }
+
+ // Write out the PLT data.
+ void
+ do_write(Output_file*);
+
+ // The reloc section.
+ Reloc_section* rel_;
+ // The .got.plt section.
+ Output_data_space* got_plt_;
+ // The number of PLT entries.
+ unsigned int count_;
+ // Whether we are generated a shared object.
+ bool is_shared_;
+};
+
+// Create the PLT section. The ordinary .got section is an argument,
+// since we need to refer to the start. We also create our own .got
+// section just for PLT entries.
+
+Output_data_plt_i386::Output_data_plt_i386(Layout* layout,
+ Output_data_space* got_plt,
+ bool is_shared)
+ : Output_section_data(4), got_plt_(got_plt), is_shared_(is_shared)
+{
+ this->rel_ = new Reloc_section();
+ layout->add_output_section_data(".rel.plt", elfcpp::SHT_REL,
+ elfcpp::SHF_ALLOC, this->rel_);
+}
+
+// For some reason
+
+void
+Output_data_plt_i386::do_adjust_output_section(Output_section* os)
+{
+ // UnixWare sets the entsize of .plt to 4, and so does the old GNU
+ // linker, and so do we.
+ os->set_entsize(4);
+}
+
+// Add an entry to the PLT.
+
+void
+Output_data_plt_i386::add_entry(Symbol* gsym)
+{
+ gold_assert(!gsym->has_plt_offset());
+
+ // Note that when setting the PLT offset we skip the initial
+ // reserved PLT entry.
+ gsym->set_plt_offset((this->count_ + 1) * plt_entry_size);
+
+ ++this->count_;
+
+ off_t got_offset = this->got_plt_->data_size();
+
+ // Every PLT entry needs a GOT entry which points back to the PLT
+ // entry (this will be changed by the dynamic linker, normally
+ // lazily when the function is called).
+ this->got_plt_->set_space_size(got_offset + 4);
+
+ // Every PLT entry needs a reloc.
+ gsym->set_needs_dynsym_entry();
+ this->rel_->add_global(gsym, elfcpp::R_386_JUMP_SLOT, this->got_plt_,
+ got_offset);
+
+ // Note that we don't need to save the symbol. The contents of the
+ // PLT are independent of which symbols are used. The symbols only
+ // appear in the relocations.
+}
+
+// The first entry in the PLT for an executable.
+
+unsigned char Output_data_plt_i386::exec_first_plt_entry[plt_entry_size] =
+{
+ 0xff, 0x35, // pushl contents of memory address
+ 0, 0, 0, 0, // replaced with address of .got + 4
+ 0xff, 0x25, // jmp indirect
+ 0, 0, 0, 0, // replaced with address of .got + 8
+ 0, 0, 0, 0 // unused
+};
+
+// The first entry in the PLT for a shared object.
+
+unsigned char Output_data_plt_i386::dyn_first_plt_entry[plt_entry_size] =
+{
+ 0xff, 0xb3, 4, 0, 0, 0, // pushl 4(%ebx)
+ 0xff, 0xa3, 8, 0, 0, 0, // jmp *8(%ebx)
+ 0, 0, 0, 0 // unused
+};
+
+// Subsequent entries in the PLT for an executable.
+
+unsigned char Output_data_plt_i386::exec_plt_entry[plt_entry_size] =
+{
+ 0xff, 0x25, // jmp indirect
+ 0, 0, 0, 0, // replaced with address of symbol in .got
+ 0x68, // pushl immediate
+ 0, 0, 0, 0, // replaced with offset into relocation table
+ 0xe9, // jmp relative
+ 0, 0, 0, 0 // replaced with offset to start of .plt
+};
+
+// Subsequent entries in the PLT for a shared object.
+
+unsigned char Output_data_plt_i386::dyn_plt_entry[plt_entry_size] =
+{
+ 0xff, 0xa3, // jmp *offset(%ebx)
+ 0, 0, 0, 0, // replaced with offset of symbol in .got
+ 0x68, // pushl immediate
+ 0, 0, 0, 0, // replaced with offset into relocation table
+ 0xe9, // jmp relative
+ 0, 0, 0, 0 // replaced with offset to start of .plt
+};
+
+// Write out the PLT. This uses the hand-coded instructions above,
+// and adjusts them as needed. This is all specified by the i386 ELF
+// Processor Supplement.
+
+void
+Output_data_plt_i386::do_write(Output_file* of)
+{
+ const off_t offset = this->offset();
+ const off_t oview_size = this->data_size();
+ unsigned char* const oview = of->get_output_view(offset, oview_size);
+
+ const off_t got_file_offset = this->got_plt_->offset();
+ const off_t got_size = this->got_plt_->data_size();
+ unsigned char* const got_view = of->get_output_view(got_file_offset,
+ got_size);
+
+ unsigned char* pov = oview;
+
+ elfcpp::Elf_types<32>::Elf_Addr plt_address = this->address();
+ elfcpp::Elf_types<32>::Elf_Addr got_address = this->got_plt_->address();
+
+ if (this->is_shared_)
+ memcpy(pov, dyn_first_plt_entry, plt_entry_size);
+ else
+ {
+ memcpy(pov, exec_first_plt_entry, plt_entry_size);
+ elfcpp::Swap_unaligned<32, false>::writeval(pov + 2, got_address + 4);
+ elfcpp::Swap<32, false>::writeval(pov + 8, got_address + 8);
+ }
+ pov += plt_entry_size;
+
+ unsigned char* got_pov = got_view;
+
+ memset(got_pov, 0, 12);
+ got_pov += 12;
+
+ const int rel_size = elfcpp::Elf_sizes<32>::rel_size;
+
+ unsigned int plt_offset = plt_entry_size;
+ unsigned int plt_rel_offset = 0;
+ unsigned int got_offset = 12;
+ const unsigned int count = this->count_;
+ for (unsigned int i = 0;
+ i < count;
+ ++i,
+ pov += plt_entry_size,
+ got_pov += 4,
+ plt_offset += plt_entry_size,
+ plt_rel_offset += rel_size,
+ got_offset += 4)
+ {
+ // Set and adjust the PLT entry itself.
+
+ if (this->is_shared_)
+ {
+ memcpy(pov, dyn_plt_entry, plt_entry_size);
+ elfcpp::Swap_unaligned<32, false>::writeval(pov + 2, got_offset);
+ }
+ else
+ {
+ memcpy(pov, exec_plt_entry, plt_entry_size);
+ elfcpp::Swap_unaligned<32, false>::writeval(pov + 2,
+ (got_address
+ + got_offset));
+ }
+
+ elfcpp::Swap_unaligned<32, false>::writeval(pov + 7, plt_rel_offset);
+ elfcpp::Swap<32, false>::writeval(pov + 12,
+ - (plt_offset + plt_entry_size));
+
+ // Set the entry in the GOT.
+ elfcpp::Swap<32, false>::writeval(got_pov, plt_address + plt_offset + 6);
+ }
+
+ gold_assert(pov - oview == oview_size);
+ gold_assert(got_pov - got_view == got_size);
+
+ of->write_output_view(offset, oview_size, oview);
+ of->write_output_view(got_file_offset, got_size, got_view);
+}
+
+// Create a PLT entry for a global symbol.
+
+void
+Target_i386::make_plt_entry(const General_options* options,
+ Symbol_table* symtab, Layout* layout, Symbol* gsym)
+{
+ if (gsym->has_plt_offset())
+ return;
+
+ if (this->plt_ == NULL)
+ {
+ // Create the GOT sections first.
+ this->got_section(options, symtab, layout);
+
+ this->plt_ = new Output_data_plt_i386(layout, this->got_plt_,
+ options->is_shared());
+ layout->add_output_section_data(".plt", elfcpp::SHT_PROGBITS,
+ (elfcpp::SHF_ALLOC
+ | elfcpp::SHF_EXECINSTR),
+ this->plt_);
+ }
+
+ this->plt_->add_entry(gsym);
+}
+
+// Handle a relocation against a non-function symbol defined in a
+// dynamic object. The traditional way to handle this is to generate
+// a COPY relocation to copy the variable at runtime from the shared
+// object into the executable's data segment. However, this is
+// undesirable in general, as if the size of the object changes in the
+// dynamic object, the executable will no longer work correctly. If
+// this relocation is in a writable section, then we can create a
+// dynamic reloc and the dynamic linker will resolve it to the correct
+// address at runtime. However, we do not want do that if the
+// relocation is in a read-only section, as it would prevent the
+// readonly segment from being shared. And if we have to eventually
+// generate a COPY reloc, then any dynamic relocations will be
+// useless. So this means that if this is a writable section, we need
+// to save the relocation until we see whether we have to create a
+// COPY relocation for this symbol for any other relocation.
+
+void
+Target_i386::copy_reloc(const General_options* options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Sized_relobj<32, false>* object,
+ unsigned int data_shndx, Symbol* gsym,
+ const elfcpp::Rel<32, false>& rel)
+{
+ Sized_symbol<32>* ssym;
+ ssym = symtab->get_sized_symbol SELECT_SIZE_NAME(32) (gsym
+ SELECT_SIZE(32));
+
+ if (!Copy_relocs<32, false>::need_copy_reloc(options, object,
+ data_shndx, ssym))
+ {
+ // So far we do not need a COPY reloc. Save this relocation.
+ // If it turns out that we never need a COPY reloc for this
+ // symbol, then we will emit the relocation.
+ if (this->copy_relocs_ == NULL)
+ this->copy_relocs_ = new Copy_relocs<32, false>();
+ this->copy_relocs_->save(ssym, object, data_shndx, rel);
+ }
+ else
+ {
+ // Allocate space for this symbol in the .bss section.
+
+ elfcpp::Elf_types<32>::Elf_WXword symsize = ssym->symsize();
+
+ // There is no defined way to determine the required alignment
+ // of the symbol. We pick the alignment based on the size. We
+ // set an arbitrary maximum of 256.
+ unsigned int align;
+ for (align = 1; align < 512; align <<= 1)
+ if ((symsize & align) != 0)
+ break;
+
+ if (this->dynbss_ == NULL)
+ {
+ this->dynbss_ = new Output_data_space(align);
+ layout->add_output_section_data(".bss",
+ elfcpp::SHT_NOBITS,
+ (elfcpp::SHF_ALLOC
+ | elfcpp::SHF_WRITE),
+ this->dynbss_);
+ }
+
+ Output_data_space* dynbss = this->dynbss_;
+
+ if (align > dynbss->addralign())
+ dynbss->set_space_alignment(align);
+
+ off_t dynbss_size = dynbss->data_size();
+ dynbss_size = align_address(dynbss_size, align);
+ off_t offset = dynbss_size;
+ dynbss->set_space_size(dynbss_size + symsize);
+
+ // Define the symbol in the .dynbss section.
+ symtab->define_in_output_data(this, ssym->name(), ssym->version(),
+ dynbss, offset, symsize, ssym->type(),
+ ssym->binding(), ssym->visibility(),
+ ssym->nonvis(), false, false);
+
+ // Add the COPY reloc.
+ ssym->set_needs_dynsym_entry();
+ Reloc_section* rel_dyn = this->rel_dyn_section(layout);
+ rel_dyn->add_global(ssym, elfcpp::R_386_COPY, dynbss, offset);
+ }
+}
+
+// Optimize the TLS relocation type based on what we know about the
+// symbol. IS_FINAL is true if the final address of this symbol is
+// known at link time.
+
+unsigned int
+Target_i386::optimize_tls_reloc(const General_options* options,
+ bool is_final,
+ int r_type)
+{
+ // If we are generating a shared library, then we can't do anything
+ // in the linker.
+ if (options->is_shared())
+ return r_type;
+
+ switch (r_type)
+ {
+ case elfcpp::R_386_TLS_GD:
+ case elfcpp::R_386_TLS_GOTDESC:
+ case elfcpp::R_386_TLS_DESC_CALL:
+ // These are Global-Dynamic which permits fully general TLS
+ // access. Since we know that we are generating an executable,
+ // we can convert this to Initial-Exec. If we also know that
+ // this is a local symbol, we can further switch to Local-Exec.
+ if (is_final)
+ return elfcpp::R_386_TLS_LE_32;
+ return elfcpp::R_386_TLS_IE_32;
+
+ case elfcpp::R_386_TLS_LDM:
+ // This is Local-Dynamic, which refers to a local symbol in the
+ // dynamic TLS block. Since we know that we generating an
+ // executable, we can switch to Local-Exec.
+ return elfcpp::R_386_TLS_LE_32;
+
+ case elfcpp::R_386_TLS_LDO_32:
+ // Another type of Local-Dynamic relocation.
+ return elfcpp::R_386_TLS_LE;
+
+ case elfcpp::R_386_TLS_IE:
+ case elfcpp::R_386_TLS_GOTIE:
+ case elfcpp::R_386_TLS_IE_32:
+ // These are Initial-Exec relocs which get the thread offset
+ // from the GOT. If we know that we are linking against the
+ // local symbol, we can switch to Local-Exec, which links the
+ // thread offset into the instruction.
+ if (is_final)
+ return elfcpp::R_386_TLS_LE_32;
+ return r_type;
+
+ case elfcpp::R_386_TLS_LE:
+ case elfcpp::R_386_TLS_LE_32:
+ // When we already have Local-Exec, there is nothing further we
+ // can do.
+ return r_type;
+
+ default:
+ gold_unreachable();
+ }
+}
+
+// Scan a relocation for a local symbol.
+
+inline void
+Target_i386::Scan::local(const General_options& options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Target_i386* target,
+ Sized_relobj<32, false>* object,
+ unsigned int,
+ const elfcpp::Rel<32, false>&,
+ unsigned int r_type,
+ const elfcpp::Sym<32, false>&)
+{
+ switch (r_type)
+ {
+ case elfcpp::R_386_NONE:
+ case elfcpp::R_386_GNU_VTINHERIT:
+ case elfcpp::R_386_GNU_VTENTRY:
+ break;
+
+ case elfcpp::R_386_32:
+ case elfcpp::R_386_16:
+ case elfcpp::R_386_8:
+ // FIXME: If we are generating a shared object we need to copy
+ // this relocation into the object.
+ gold_assert(!options.is_shared());
+ break;
+
+ case elfcpp::R_386_PC32:
+ case elfcpp::R_386_PC16:
+ case elfcpp::R_386_PC8:
+ break;
+
+ case elfcpp::R_386_GOTOFF:
+ case elfcpp::R_386_GOTPC:
+ // We need a GOT section.
+ target->got_section(&options, symtab, layout);
+ break;
+
+ case elfcpp::R_386_COPY:
+ case elfcpp::R_386_GLOB_DAT:
+ case elfcpp::R_386_JUMP_SLOT:
+ case elfcpp::R_386_RELATIVE:
+ case elfcpp::R_386_TLS_TPOFF:
+ case elfcpp::R_386_TLS_DTPMOD32:
+ case elfcpp::R_386_TLS_DTPOFF32:
+ case elfcpp::R_386_TLS_TPOFF32:
+ case elfcpp::R_386_TLS_DESC:
+ fprintf(stderr, _("%s: %s: unexpected reloc %u in object file\n"),
+ program_name, object->name().c_str(), r_type);
+ gold_exit(false);
+ break;
+
+ case elfcpp::R_386_TLS_IE:
+ case elfcpp::R_386_TLS_GOTIE:
+ case elfcpp::R_386_TLS_LE:
+ case elfcpp::R_386_TLS_GD:
+ case elfcpp::R_386_TLS_LDM:
+ case elfcpp::R_386_TLS_LDO_32:
+ case elfcpp::R_386_TLS_IE_32:
+ case elfcpp::R_386_TLS_LE_32:
+ case elfcpp::R_386_TLS_GOTDESC:
+ case elfcpp::R_386_TLS_DESC_CALL:
+ r_type = Target_i386::optimize_tls_reloc(&options,
+ !options.is_shared(),
+ r_type);
+ switch (r_type)
+ {
+ case elfcpp::R_386_TLS_LE:
+ case elfcpp::R_386_TLS_LE_32:
+ // FIXME: If generating a shared object, we need to copy
+ // this relocation into the object.
+ gold_assert(!options.is_shared());
+ break;
+
+ case elfcpp::R_386_TLS_IE:
+ case elfcpp::R_386_TLS_GOTIE:
+ case elfcpp::R_386_TLS_GD:
+ case elfcpp::R_386_TLS_LDM:
+ case elfcpp::R_386_TLS_LDO_32:
+ case elfcpp::R_386_TLS_IE_32:
+ case elfcpp::R_386_TLS_GOTDESC:
+ case elfcpp::R_386_TLS_DESC_CALL:
+ fprintf(stderr,
+ _("%s: %s: unsupported reloc %u against local symbol\n"),
+ program_name, object->name().c_str(), r_type);
+ break;
+ }
+ break;
+
+ case elfcpp::R_386_GOT32:
+ case elfcpp::R_386_PLT32:
+ case elfcpp::R_386_32PLT:
+ case elfcpp::R_386_TLS_GD_32:
+ case elfcpp::R_386_TLS_GD_PUSH:
+ case elfcpp::R_386_TLS_GD_CALL:
+ case elfcpp::R_386_TLS_GD_POP:
+ case elfcpp::R_386_TLS_LDM_32:
+ case elfcpp::R_386_TLS_LDM_PUSH:
+ case elfcpp::R_386_TLS_LDM_CALL:
+ case elfcpp::R_386_TLS_LDM_POP:
+ case elfcpp::R_386_USED_BY_INTEL_200:
+ default:
+ fprintf(stderr, _("%s: %s: unsupported reloc %u against local symbol\n"),
+ program_name, object->name().c_str(), r_type);
+ break;
+ }
+}
+
+// Scan a relocation for a global symbol.
+
+inline void
+Target_i386::Scan::global(const General_options& options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Target_i386* target,
+ Sized_relobj<32, false>* object,
+ unsigned int data_shndx,
+ const elfcpp::Rel<32, false>& reloc,
+ unsigned int r_type,
+ Symbol* gsym)
+{
+ switch (r_type)
+ {
+ case elfcpp::R_386_NONE:
+ case elfcpp::R_386_GNU_VTINHERIT:
+ case elfcpp::R_386_GNU_VTENTRY:
+ break;
+
+ case elfcpp::R_386_32:
+ case elfcpp::R_386_PC32:
+ case elfcpp::R_386_16:
+ case elfcpp::R_386_PC16:
+ case elfcpp::R_386_8:
+ case elfcpp::R_386_PC8:
+ // FIXME: If we are generating a shared object we may need to
+ // copy this relocation into the object. If this symbol is
+ // defined in a shared object, we may need to copy this
+ // relocation in order to avoid a COPY relocation.
+ gold_assert(!options.is_shared());
+
+ if (gsym->is_from_dynobj())
+ {
+ // This symbol is defined in a dynamic object. If it is a
+ // function, we make a PLT entry. Otherwise we need to
+ // either generate a COPY reloc or copy this reloc.
+ if (gsym->type() == elfcpp::STT_FUNC)
+ target->make_plt_entry(&options, symtab, layout, gsym);
+ else
+ target->copy_reloc(&options, symtab, layout, object, data_shndx,
+ gsym, reloc);
+ }
+
+ break;
+
+ case elfcpp::R_386_GOT32:
+ // The symbol requires a GOT entry.
+ if (target->got_section(&options, symtab, layout)->add_global(gsym))
+ {
+ // If this symbol is not fully resolved, we need to add a
+ // dynamic relocation for it.
+ if (!gsym->final_value_is_known(&options))
+ gold_unreachable();
+ }
+ break;
+
+ case elfcpp::R_386_PLT32:
+ // If the symbol is fully resolved, this is just a PC32 reloc.
+ // Otherwise we need a PLT entry.
+ if (gsym->final_value_is_known(&options))
+ break;
+ target->make_plt_entry(&options, symtab, layout, gsym);
+ break;
+
+ case elfcpp::R_386_GOTOFF:
+ case elfcpp::R_386_GOTPC:
+ // We need a GOT section.
+ target->got_section(&options, symtab, layout);
+ break;
+
+ case elfcpp::R_386_COPY:
+ case elfcpp::R_386_GLOB_DAT:
+ case elfcpp::R_386_JUMP_SLOT:
+ case elfcpp::R_386_RELATIVE:
+ case elfcpp::R_386_TLS_TPOFF:
+ case elfcpp::R_386_TLS_DTPMOD32:
+ case elfcpp::R_386_TLS_DTPOFF32:
+ case elfcpp::R_386_TLS_TPOFF32:
+ case elfcpp::R_386_TLS_DESC:
+ fprintf(stderr, _("%s: %s: unexpected reloc %u in object file\n"),
+ program_name, object->name().c_str(), r_type);
+ gold_exit(false);
+ break;
+
+ case elfcpp::R_386_TLS_IE:
+ case elfcpp::R_386_TLS_GOTIE:
+ case elfcpp::R_386_TLS_LE:
+ case elfcpp::R_386_TLS_GD:
+ case elfcpp::R_386_TLS_LDM:
+ case elfcpp::R_386_TLS_LDO_32:
+ case elfcpp::R_386_TLS_IE_32:
+ case elfcpp::R_386_TLS_LE_32:
+ case elfcpp::R_386_TLS_GOTDESC:
+ case elfcpp::R_386_TLS_DESC_CALL:
+ {
+ const bool is_final = gsym->final_value_is_known(&options);
+ r_type = Target_i386::optimize_tls_reloc(&options, is_final, r_type);
+ switch (r_type)
+ {
+ case elfcpp::R_386_TLS_LE:
+ case elfcpp::R_386_TLS_LE_32:
+ // FIXME: If generating a shared object, we need to copy
+ // this relocation into the object.
+ gold_assert(!options.is_shared());
+ break;
+
+ case elfcpp::R_386_TLS_IE:
+ case elfcpp::R_386_TLS_GOTIE:
+ case elfcpp::R_386_TLS_GD:
+ case elfcpp::R_386_TLS_LDM:
+ case elfcpp::R_386_TLS_LDO_32:
+ case elfcpp::R_386_TLS_IE_32:
+ case elfcpp::R_386_TLS_GOTDESC:
+ case elfcpp::R_386_TLS_DESC_CALL:
+ fprintf(stderr,
+ _("%s: %s: unsupported reloc %u "
+ "against global symbol %s\n"),
+ program_name, object->name().c_str(), r_type,
+ gsym->name());
+ break;
+ }
+ }
+ break;
+
+ case elfcpp::R_386_32PLT:
+ case elfcpp::R_386_TLS_GD_32:
+ case elfcpp::R_386_TLS_GD_PUSH:
+ case elfcpp::R_386_TLS_GD_CALL:
+ case elfcpp::R_386_TLS_GD_POP:
+ case elfcpp::R_386_TLS_LDM_32:
+ case elfcpp::R_386_TLS_LDM_PUSH:
+ case elfcpp::R_386_TLS_LDM_CALL:
+ case elfcpp::R_386_TLS_LDM_POP:
+ case elfcpp::R_386_USED_BY_INTEL_200:
+ default:
+ fprintf(stderr,
+ _("%s: %s: unsupported reloc %u against global symbol %s\n"),
+ program_name, object->name().c_str(), r_type, gsym->name());
+ break;
+ }
+}
+
+// Scan relocations for a section.
+
+void
+Target_i386::scan_relocs(const General_options& options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Sized_relobj<32, false>* object,
+ unsigned int data_shndx,
+ unsigned int sh_type,
+ const unsigned char* prelocs,
+ size_t reloc_count,
+ size_t local_symbol_count,
+ const unsigned char* plocal_symbols,
+ Symbol** global_symbols)
+{
+ if (sh_type == elfcpp::SHT_RELA)
+ {
+ fprintf(stderr, _("%s: %s: unsupported RELA reloc section\n"),
+ program_name, object->name().c_str());
+ gold_exit(false);
+ }
+
+ gold::scan_relocs<32, false, Target_i386, elfcpp::SHT_REL,
+ Target_i386::Scan>(
+ options,
+ symtab,
+ layout,
+ this,
+ object,
+ data_shndx,
+ prelocs,
+ reloc_count,
+ local_symbol_count,
+ plocal_symbols,
+ global_symbols);
+}
+
+// Finalize the sections.
+
+void
+Target_i386::do_finalize_sections(const General_options* options,
+ Layout* layout)
+{
+ // Fill in some more dynamic tags.
+ Output_data_dynamic* const odyn = layout->dynamic_data();
+ if (odyn != NULL)
+ {
+ if (this->got_plt_ != NULL)
+ odyn->add_section_address(elfcpp::DT_PLTGOT, this->got_plt_);
+
+ if (this->plt_ != NULL)
+ {
+ const Output_data* od = this->plt_->rel_plt();
+ odyn->add_section_size(elfcpp::DT_PLTRELSZ, od);
+ odyn->add_section_address(elfcpp::DT_JMPREL, od);
+ odyn->add_constant(elfcpp::DT_PLTREL, elfcpp::DT_REL);
+ }
+
+ if (this->rel_dyn_ != NULL)
+ {
+ const Output_data* od = this->rel_dyn_;
+ odyn->add_section_address(elfcpp::DT_REL, od);
+ odyn->add_section_size(elfcpp::DT_RELSZ, od);
+ odyn->add_constant(elfcpp::DT_RELENT,
+ elfcpp::Elf_sizes<32>::rel_size);
+ }
+
+ if (!options->is_shared())
+ {
+ // The value of the DT_DEBUG tag is filled in by the dynamic
+ // linker at run time, and used by the debugger.
+ odyn->add_constant(elfcpp::DT_DEBUG, 0);
+ }
+ }
+
+ // Emit any relocs we saved in an attempt to avoid generating COPY
+ // relocs.
+ if (this->copy_relocs_ == NULL)
+ return;
+ if (this->copy_relocs_->any_to_emit())
+ {
+ Reloc_section* rel_dyn = this->rel_dyn_section(layout);
+ this->copy_relocs_->emit(rel_dyn);
+ }
+ delete this->copy_relocs_;
+ this->copy_relocs_ = NULL;
+}
+
+// Perform a relocation.
+
+inline bool
+Target_i386::Relocate::relocate(const Relocate_info<32, false>* relinfo,
+ Target_i386* target,
+ size_t relnum,
+ const elfcpp::Rel<32, false>& rel,
+ unsigned int r_type,
+ const Sized_symbol<32>* gsym,
+ const Symbol_value<32>* psymval,
+ unsigned char* view,
+ elfcpp::Elf_types<32>::Elf_Addr address,
+ off_t view_size)
+{
+ if (this->skip_call_tls_get_addr_)
+ {
+ if (r_type != elfcpp::R_386_PLT32
+ || gsym == NULL
+ || strcmp(gsym->name(), "___tls_get_addr") != 0)
+ {
+ fprintf(stderr, _("%s: %s: missing expected TLS relocation\n"),
+ program_name,
+ relinfo->location(relnum, rel.get_r_offset()).c_str());
+ gold_exit(false);
+ }
+
+ this->skip_call_tls_get_addr_ = false;
+
+ return false;
+ }
+
+ // Pick the value to use for symbols defined in shared objects.
+ Symbol_value<32> symval;
+ if (gsym != NULL && gsym->is_from_dynobj())
+ {
+ if (!gsym->has_plt_offset())
+ gold_unreachable();
+
+ symval.set_output_value(target->plt_section()->address()
+ + gsym->plt_offset());
+ psymval = &symval;
+ }
+
+ const Sized_relobj<32, false>* object = relinfo->object;
+
+ switch (r_type)
+ {
+ case elfcpp::R_386_NONE:
+ case elfcpp::R_386_GNU_VTINHERIT:
+ case elfcpp::R_386_GNU_VTENTRY:
+ break;
+
+ case elfcpp::R_386_32:
+ Relocate_functions<32, false>::rel32(view, object, psymval);
+ break;
+
+ case elfcpp::R_386_PC32:
+ Relocate_functions<32, false>::pcrel32(view, object, psymval, address);
+ break;
+
+ case elfcpp::R_386_16:
+ Relocate_functions<32, false>::rel16(view, object, psymval);
+ break;
+
+ case elfcpp::R_386_PC16:
+ Relocate_functions<32, false>::pcrel16(view, object, psymval, address);
+ break;
+
+ case elfcpp::R_386_8:
+ Relocate_functions<32, false>::rel8(view, object, psymval);
+ break;
+
+ case elfcpp::R_386_PC8:
+ Relocate_functions<32, false>::pcrel8(view, object, psymval, address);
+ break;
+
+ case elfcpp::R_386_PLT32:
+ gold_assert(gsym->has_plt_offset()
+ || gsym->final_value_is_known(relinfo->options));
+ Relocate_functions<32, false>::pcrel32(view, object, psymval, address);
+ break;
+
+ case elfcpp::R_386_GOT32:
+ // Local GOT offsets not yet supported.
+ gold_assert(gsym);
+ gold_assert(gsym->has_got_offset());
+ Relocate_functions<32, false>::rel32(view, gsym->got_offset());
+ break;
+
+ case elfcpp::R_386_GOTOFF:
+ {
+ elfcpp::Elf_types<32>::Elf_Addr value;
+ value = (psymval->value(object, 0)
+ - target->got_section(NULL, NULL, NULL)->address());
+ Relocate_functions<32, false>::rel32(view, value);
+ }
+ break;
+
+ case elfcpp::R_386_GOTPC:
+ {
+ elfcpp::Elf_types<32>::Elf_Addr value;
+ value = target->got_section(NULL, NULL, NULL)->address();
+ Relocate_functions<32, false>::pcrel32(view, value, address);
+ }
+ break;
+
+ case elfcpp::R_386_COPY:
+ case elfcpp::R_386_GLOB_DAT:
+ case elfcpp::R_386_JUMP_SLOT:
+ case elfcpp::R_386_RELATIVE:
+ case elfcpp::R_386_TLS_TPOFF:
+ case elfcpp::R_386_TLS_DTPMOD32:
+ case elfcpp::R_386_TLS_DTPOFF32:
+ case elfcpp::R_386_TLS_TPOFF32:
+ case elfcpp::R_386_TLS_DESC:
+ fprintf(stderr, _("%s: %s: unexpected reloc %u in object file\n"),
+ program_name,
+ relinfo->location(relnum, rel.get_r_offset()).c_str(),
+ r_type);
+ gold_exit(false);
+ break;
+
+ case elfcpp::R_386_TLS_IE:
+ case elfcpp::R_386_TLS_GOTIE:
+ case elfcpp::R_386_TLS_LE:
+ case elfcpp::R_386_TLS_GD:
+ case elfcpp::R_386_TLS_LDM:
+ case elfcpp::R_386_TLS_LDO_32:
+ case elfcpp::R_386_TLS_IE_32:
+ case elfcpp::R_386_TLS_LE_32:
+ case elfcpp::R_386_TLS_GOTDESC:
+ case elfcpp::R_386_TLS_DESC_CALL:
+ this->relocate_tls(relinfo, relnum, rel, r_type, gsym, psymval, view,
+ address, view_size);
+ break;
+
+ case elfcpp::R_386_32PLT:
+ case elfcpp::R_386_TLS_GD_32:
+ case elfcpp::R_386_TLS_GD_PUSH:
+ case elfcpp::R_386_TLS_GD_CALL:
+ case elfcpp::R_386_TLS_GD_POP:
+ case elfcpp::R_386_TLS_LDM_32:
+ case elfcpp::R_386_TLS_LDM_PUSH:
+ case elfcpp::R_386_TLS_LDM_CALL:
+ case elfcpp::R_386_TLS_LDM_POP:
+ case elfcpp::R_386_USED_BY_INTEL_200:
+ default:
+ fprintf(stderr, _("%s: %s: unsupported reloc %u\n"),
+ program_name,
+ relinfo->location(relnum, rel.get_r_offset()).c_str(),
+ r_type);
+ // gold_exit(false);
+ break;
+ }
+
+ return true;
+}
+
+// Perform a TLS relocation.
+
+inline void
+Target_i386::Relocate::relocate_tls(const Relocate_info<32, false>* relinfo,
+ size_t relnum,
+ const elfcpp::Rel<32, false>& rel,
+ unsigned int r_type,
+ const Sized_symbol<32>* gsym,
+ const Symbol_value<32>* psymval,
+ unsigned char* view,
+ elfcpp::Elf_types<32>::Elf_Addr,
+ off_t view_size)
+{
+ Output_segment* tls_segment = relinfo->layout->tls_segment();
+ if (tls_segment == NULL)
+ {
+ fprintf(stderr, _("%s: %s: TLS reloc but no TLS segment\n"),
+ program_name,
+ relinfo->location(relnum, rel.get_r_offset()).c_str());
+ gold_exit(false);
+ }
+
+ elfcpp::Elf_types<32>::Elf_Addr value = psymval->value(relinfo->object, 0);
+
+ const bool is_final = (gsym == NULL
+ ? !relinfo->options->is_shared()
+ : gsym->final_value_is_known(relinfo->options));
+ const unsigned int opt_r_type =
+ Target_i386::optimize_tls_reloc(relinfo->options, is_final, r_type);
+ switch (r_type)
+ {
+ case elfcpp::R_386_TLS_LE_32:
+ value = tls_segment->vaddr() + tls_segment->memsz() - value;
+ Relocate_functions<32, false>::rel32(view, value);
+ break;
+
+ case elfcpp::R_386_TLS_LE:
+ value = value - (tls_segment->vaddr() + tls_segment->memsz());
+ Relocate_functions<32, false>::rel32(view, value);
+ break;
+
+ case elfcpp::R_386_TLS_IE:
+ case elfcpp::R_386_TLS_GOTIE:
+ case elfcpp::R_386_TLS_IE_32:
+ if (opt_r_type == elfcpp::R_386_TLS_LE_32)
+ {
+ Target_i386::Relocate::tls_ie_to_le(relinfo, relnum, tls_segment,
+ rel, r_type, value, view,
+ view_size);
+ break;
+ }
+ fprintf(stderr, _("%s: %s: unsupported reloc type %u\n"),
+ program_name,
+ relinfo->location(relnum, rel.get_r_offset()).c_str(),
+ r_type);
+ // gold_exit(false);
+ break;
+
+ case elfcpp::R_386_TLS_GD:
+ if (opt_r_type == elfcpp::R_386_TLS_LE_32)
+ {
+ this->tls_gd_to_le(relinfo, relnum, tls_segment,
+ rel, r_type, value, view,
+ view_size);
+ break;
+ }
+ fprintf(stderr, _("%s: %s: unsupported reloc %u\n"),
+ program_name,
+ relinfo->location(relnum, rel.get_r_offset()).c_str(),
+ r_type);
+ // gold_exit(false);
+ break;
+
+ case elfcpp::R_386_TLS_LDM:
+ case elfcpp::R_386_TLS_LDO_32:
+ case elfcpp::R_386_TLS_GOTDESC:
+ case elfcpp::R_386_TLS_DESC_CALL:
+ fprintf(stderr, _("%s: %s: unsupported reloc %u\n"),
+ program_name,
+ relinfo->location(relnum, rel.get_r_offset()).c_str(),
+ r_type);
+ // gold_exit(false);
+ break;
+ }
+}
+
+// Do a relocation in which we convert a TLS Initial-Exec to a
+// Local-Exec.
+
+inline void
+Target_i386::Relocate::tls_ie_to_le(const Relocate_info<32, false>* relinfo,
+ size_t relnum,
+ Output_segment* tls_segment,
+ const elfcpp::Rel<32, false>& rel,
+ unsigned int r_type,
+ elfcpp::Elf_types<32>::Elf_Addr value,
+ unsigned char* view,
+ off_t view_size)
+{
+ // We have to actually change the instructions, which means that we
+ // need to examine the opcodes to figure out which instruction we
+ // are looking at.
+ if (r_type == elfcpp::R_386_TLS_IE)
+ {
+ // movl %gs:XX,%eax ==> movl $YY,%eax
+ // movl %gs:XX,%reg ==> movl $YY,%reg
+ // addl %gs:XX,%reg ==> addl $YY,%reg
+ Target_i386::Relocate::check_range(relinfo, relnum, rel, view_size, -1);
+ Target_i386::Relocate::check_range(relinfo, relnum, rel, view_size, 4);
+
+ unsigned char op1 = view[-1];
+ if (op1 == 0xa1)
+ {
+ // movl XX,%eax ==> movl $YY,%eax
+ view[-1] = 0xb8;
+ }
+ else
+ {
+ Target_i386::Relocate::check_range(relinfo, relnum, rel,
+ view_size, -2);
+
+ unsigned char op2 = view[-2];
+ if (op2 == 0x8b)
+ {
+ // movl XX,%reg ==> movl $YY,%reg
+ Target_i386::Relocate::check_tls(relinfo, relnum, rel,
+ (op1 & 0xc7) == 0x05);
+ view[-2] = 0xc7;
+ view[-1] = 0xc0 | ((op1 >> 3) & 7);
+ }
+ else if (op2 == 0x03)
+ {
+ // addl XX,%reg ==> addl $YY,%reg
+ Target_i386::Relocate::check_tls(relinfo, relnum, rel,
+ (op1 & 0xc7) == 0x05);
+ view[-2] = 0x81;
+ view[-1] = 0xc0 | ((op1 >> 3) & 7);
+ }
+ else
+ Target_i386::Relocate::check_tls(relinfo, relnum, rel, 0);
+ }
+ }
+ else
+ {
+ // subl %gs:XX(%reg1),%reg2 ==> subl $YY,%reg2
+ // movl %gs:XX(%reg1),%reg2 ==> movl $YY,%reg2
+ // addl %gs:XX(%reg1),%reg2 ==> addl $YY,$reg2
+ Target_i386::Relocate::check_range(relinfo, relnum, rel, view_size, -2);
+ Target_i386::Relocate::check_range(relinfo, relnum, rel, view_size, 4);
+
+ unsigned char op1 = view[-1];
+ unsigned char op2 = view[-2];
+ Target_i386::Relocate::check_tls(relinfo, relnum, rel,
+ (op1 & 0xc0) == 0x80 && (op1 & 7) != 4);
+ if (op2 == 0x8b)
+ {
+ // movl %gs:XX(%reg1),%reg2 ==> movl $YY,%reg2
+ view[-2] = 0xc7;
+ view[-1] = 0xc0 | ((op1 >> 3) & 7);
+ }
+ else if (op2 == 0x2b)
+ {
+ // subl %gs:XX(%reg1),%reg2 ==> subl $YY,%reg2
+ view[-2] = 0x81;
+ view[-1] = 0xe8 | ((op1 >> 3) & 7);
+ }
+ else if (op2 == 0x03)
+ {
+ // addl %gs:XX(%reg1),%reg2 ==> addl $YY,$reg2
+ view[-2] = 0x81;
+ view[-1] = 0xc0 | ((op1 >> 3) & 7);
+ }
+ else
+ Target_i386::Relocate::check_tls(relinfo, relnum, rel, 0);
+ }
+
+ value = tls_segment->vaddr() + tls_segment->memsz() - value;
+ if (r_type == elfcpp::R_386_TLS_IE || r_type == elfcpp::R_386_TLS_GOTIE)
+ value = - value;
+
+ Relocate_functions<32, false>::rel32(view, value);
+}
+
+// Do a relocation in which we convert a TLS Global-Dynamic to a
+// Local-Exec.
+
+inline void
+Target_i386::Relocate::tls_gd_to_le(const Relocate_info<32, false>* relinfo,
+ size_t relnum,
+ Output_segment* tls_segment,
+ const elfcpp::Rel<32, false>& rel,
+ unsigned int,
+ elfcpp::Elf_types<32>::Elf_Addr value,
+ unsigned char* view,
+ off_t view_size)
+{
+ // leal foo(,%reg,1),%eax; call ___tls_get_addr
+ // ==> movl %gs,0,%eax; subl $foo@tpoff,%eax
+ // leal foo(%reg),%eax; call ___tls_get_addr
+ // ==> movl %gs:0,%eax; subl $foo@tpoff,%eax
+
+ Target_i386::Relocate::check_range(relinfo, relnum, rel, view_size, -2);
+ Target_i386::Relocate::check_range(relinfo, relnum, rel, view_size, 9);
+
+ unsigned char op1 = view[-1];
+ unsigned char op2 = view[-2];
+
+ Target_i386::Relocate::check_tls(relinfo, relnum, rel,
+ op2 == 0x8d || op2 == 0x04);
+ Target_i386::Relocate::check_tls(relinfo, relnum, rel,
+ view[4] == 0xe8);
+
+ int roff = 5;
+
+ if (op2 == 0x04)
+ {
+ Target_i386::Relocate::check_range(relinfo, relnum, rel, view_size, -3);
+ Target_i386::Relocate::check_tls(relinfo, relnum, rel,
+ view[-3] == 0x8d);
+ Target_i386::Relocate::check_tls(relinfo, relnum, rel,
+ ((op1 & 0xc7) == 0x05
+ && op1 != (4 << 3)));
+ memcpy(view - 3, "\x65\xa1\0\0\0\0\x81\xe8\0\0\0", 12);
+ }
+ else
+ {
+ Target_i386::Relocate::check_tls(relinfo, relnum, rel,
+ (op1 & 0xf8) == 0x80 && (op1 & 7) != 4);
+ if (rel.get_r_offset() + 9 < view_size && view[9] == 0x90)
+ {
+ // There is a trailing nop. Use the size byte subl.
+ memcpy(view - 2, "\x65\xa1\0\0\0\0\x81\xe8\0\0\0", 12);
+ roff = 6;
+ }
+ else
+ {
+ // Use the five byte subl.
+ memcpy(view - 2, "\x65\xa1\0\0\0\0\x2d\0\0\0", 11);
+ }
+ }
+
+ value = tls_segment->vaddr() + tls_segment->memsz() - value;
+ Relocate_functions<32, false>::rel32(view + roff, value);
+
+ // The next reloc should be a PLT32 reloc against __tls_get_addr.
+ // We can skip it.
+ this->skip_call_tls_get_addr_ = true;
+}
+
+// Check the range for a TLS relocation.
+
+inline void
+Target_i386::Relocate::check_range(const Relocate_info<32, false>* relinfo,
+ size_t relnum,
+ const elfcpp::Rel<32, false>& rel,
+ off_t view_size, off_t off)
+{
+ off_t offset = rel.get_r_offset() + off;
+ if (offset < 0 || offset > view_size)
+ {
+ fprintf(stderr, _("%s: %s: TLS relocation out of range\n"),
+ program_name,
+ relinfo->location(relnum, rel.get_r_offset()).c_str());
+ gold_exit(false);
+ }
+}
+
+// Check the validity of a TLS relocation. This is like assert.
+
+inline void
+Target_i386::Relocate::check_tls(const Relocate_info<32, false>* relinfo,
+ size_t relnum,
+ const elfcpp::Rel<32, false>& rel,
+ bool valid)
+{
+ if (!valid)
+ {
+ fprintf(stderr,
+ _("%s: %s: TLS relocation against invalid instruction\n"),
+ program_name,
+ relinfo->location(relnum, rel.get_r_offset()).c_str());
+ gold_exit(false);
+ }
+}
+
+// Relocate section data.
+
+void
+Target_i386::relocate_section(const Relocate_info<32, false>* relinfo,
+ unsigned int sh_type,
+ const unsigned char* prelocs,
+ size_t reloc_count,
+ unsigned char* view,
+ elfcpp::Elf_types<32>::Elf_Addr address,
+ off_t view_size)
+{
+ gold_assert(sh_type == elfcpp::SHT_REL);
+
+ gold::relocate_section<32, false, Target_i386, elfcpp::SHT_REL,
+ Target_i386::Relocate>(
+ relinfo,
+ this,
+ prelocs,
+ reloc_count,
+ view,
+ address,
+ view_size);
+}
+
+// The selector for i386 object files.
+
+class Target_selector_i386 : public Target_selector
+{
+public:
+ Target_selector_i386()
+ : Target_selector(elfcpp::EM_386, 32, false)
+ { }
+
+ Target*
+ recognize(int machine, int osabi, int abiversion);
+
+ private:
+ Target_i386* target_;
+};
+
+// Recognize an i386 object file when we already know that the machine
+// number is EM_386.
+
+Target*
+Target_selector_i386::recognize(int, int, int)
+{
+ if (this->target_ == NULL)
+ this->target_ = new Target_i386();
+ return this->target_;
+}
+
+Target_selector_i386 target_selector_i386;
+
+} // End anonymous namespace.
diff --git a/gold/layout.cc b/gold/layout.cc
new file mode 100644
index 000000000000..62ba5f30dec9
--- /dev/null
+++ b/gold/layout.cc
@@ -0,0 +1,1440 @@
+// layout.cc -- lay out output file sections for gold
+
+#include "gold.h"
+
+#include <cstring>
+#include <algorithm>
+#include <iostream>
+#include <utility>
+
+#include "output.h"
+#include "symtab.h"
+#include "dynobj.h"
+#include "layout.h"
+
+namespace gold
+{
+
+// Layout_task_runner methods.
+
+// Lay out the sections. This is called after all the input objects
+// have been read.
+
+void
+Layout_task_runner::run(Workqueue* workqueue)
+{
+ off_t file_size = this->layout_->finalize(this->input_objects_,
+ this->symtab_);
+
+ // Now we know the final size of the output file and we know where
+ // each piece of information goes.
+ Output_file* of = new Output_file(this->options_);
+ of->open(file_size);
+
+ // Queue up the final set of tasks.
+ gold::queue_final_tasks(this->options_, this->input_objects_,
+ this->symtab_, this->layout_, workqueue, of);
+}
+
+// Layout methods.
+
+Layout::Layout(const General_options& options)
+ : options_(options), namepool_(), sympool_(), dynpool_(), signatures_(),
+ section_name_map_(), segment_list_(), section_list_(),
+ unattached_section_list_(), special_output_list_(),
+ tls_segment_(NULL), symtab_section_(NULL),
+ dynsym_section_(NULL), dynamic_section_(NULL), dynamic_data_(NULL)
+{
+ // Make space for more than enough segments for a typical file.
+ // This is just for efficiency--it's OK if we wind up needing more.
+ this->segment_list_.reserve(12);
+
+ // We expect three unattached Output_data objects: the file header,
+ // the segment headers, and the section headers.
+ this->special_output_list_.reserve(3);
+}
+
+// Hash a key we use to look up an output section mapping.
+
+size_t
+Layout::Hash_key::operator()(const Layout::Key& k) const
+{
+ return k.first + k.second.first + k.second.second;
+}
+
+// Whether to include this section in the link.
+
+template<int size, bool big_endian>
+bool
+Layout::include_section(Object*, const char*,
+ const elfcpp::Shdr<size, big_endian>& shdr)
+{
+ // Some section types are never linked. Some are only linked when
+ // doing a relocateable link.
+ switch (shdr.get_sh_type())
+ {
+ case elfcpp::SHT_NULL:
+ case elfcpp::SHT_SYMTAB:
+ case elfcpp::SHT_DYNSYM:
+ case elfcpp::SHT_STRTAB:
+ case elfcpp::SHT_HASH:
+ case elfcpp::SHT_DYNAMIC:
+ case elfcpp::SHT_SYMTAB_SHNDX:
+ return false;
+
+ case elfcpp::SHT_RELA:
+ case elfcpp::SHT_REL:
+ case elfcpp::SHT_GROUP:
+ return this->options_.is_relocatable();
+
+ default:
+ // FIXME: Handle stripping debug sections here.
+ return true;
+ }
+}
+
+// Return an output section named NAME, or NULL if there is none.
+
+Output_section*
+Layout::find_output_section(const char* name) const
+{
+ for (Section_name_map::const_iterator p = this->section_name_map_.begin();
+ p != this->section_name_map_.end();
+ ++p)
+ if (strcmp(p->second->name(), name) == 0)
+ return p->second;
+ return NULL;
+}
+
+// Return an output segment of type TYPE, with segment flags SET set
+// and segment flags CLEAR clear. Return NULL if there is none.
+
+Output_segment*
+Layout::find_output_segment(elfcpp::PT type, elfcpp::Elf_Word set,
+ elfcpp::Elf_Word clear) const
+{
+ for (Segment_list::const_iterator p = this->segment_list_.begin();
+ p != this->segment_list_.end();
+ ++p)
+ if (static_cast<elfcpp::PT>((*p)->type()) == type
+ && ((*p)->flags() & set) == set
+ && ((*p)->flags() & clear) == 0)
+ return *p;
+ return NULL;
+}
+
+// Return the output section to use for section NAME with type TYPE
+// and section flags FLAGS.
+
+Output_section*
+Layout::get_output_section(const char* name, Stringpool::Key name_key,
+ elfcpp::Elf_Word type, elfcpp::Elf_Xword flags)
+{
+ // We should ignore some flags.
+ flags &= ~ (elfcpp::SHF_INFO_LINK
+ | elfcpp::SHF_LINK_ORDER
+ | elfcpp::SHF_GROUP
+ | elfcpp::SHF_MERGE
+ | elfcpp::SHF_STRINGS);
+
+ const Key key(name_key, std::make_pair(type, flags));
+ const std::pair<Key, Output_section*> v(key, NULL);
+ std::pair<Section_name_map::iterator, bool> ins(
+ this->section_name_map_.insert(v));
+
+ if (!ins.second)
+ return ins.first->second;
+ else
+ {
+ // This is the first time we've seen this name/type/flags
+ // combination.
+ Output_section* os = this->make_output_section(name, type, flags);
+ ins.first->second = os;
+ return os;
+ }
+}
+
+// Return the output section to use for input section SHNDX, with name
+// NAME, with header HEADER, from object OBJECT. Set *OFF to the
+// offset of this input section without the output section.
+
+template<int size, bool big_endian>
+Output_section*
+Layout::layout(Relobj* object, unsigned int shndx, const char* name,
+ const elfcpp::Shdr<size, big_endian>& shdr, off_t* off)
+{
+ if (!this->include_section(object, name, shdr))
+ return NULL;
+
+ // If we are not doing a relocateable link, choose the name to use
+ // for the output section.
+ size_t len = strlen(name);
+ if (!this->options_.is_relocatable())
+ name = Layout::output_section_name(name, &len);
+
+ // FIXME: Handle SHF_OS_NONCONFORMING here.
+
+ // Canonicalize the section name.
+ Stringpool::Key name_key;
+ name = this->namepool_.add(name, len, &name_key);
+
+ // Find the output section. The output section is selected based on
+ // the section name, type, and flags.
+ Output_section* os = this->get_output_section(name, name_key,
+ shdr.get_sh_type(),
+ shdr.get_sh_flags());
+
+ // FIXME: Handle SHF_LINK_ORDER somewhere.
+
+ *off = os->add_input_section(object, shndx, name, shdr);
+
+ return os;
+}
+
+// Add POSD to an output section using NAME, TYPE, and FLAGS.
+
+void
+Layout::add_output_section_data(const char* name, elfcpp::Elf_Word type,
+ elfcpp::Elf_Xword flags,
+ Output_section_data* posd)
+{
+ // Canonicalize the name.
+ Stringpool::Key name_key;
+ name = this->namepool_.add(name, &name_key);
+
+ Output_section* os = this->get_output_section(name, name_key, type, flags);
+ os->add_output_section_data(posd);
+}
+
+// Map section flags to segment flags.
+
+elfcpp::Elf_Word
+Layout::section_flags_to_segment(elfcpp::Elf_Xword flags)
+{
+ elfcpp::Elf_Word ret = elfcpp::PF_R;
+ if ((flags & elfcpp::SHF_WRITE) != 0)
+ ret |= elfcpp::PF_W;
+ if ((flags & elfcpp::SHF_EXECINSTR) != 0)
+ ret |= elfcpp::PF_X;
+ return ret;
+}
+
+// Make a new Output_section, and attach it to segments as
+// appropriate.
+
+Output_section*
+Layout::make_output_section(const char* name, elfcpp::Elf_Word type,
+ elfcpp::Elf_Xword flags)
+{
+ Output_section* os = new Output_section(name, type, flags);
+ this->section_list_.push_back(os);
+
+ if ((flags & elfcpp::SHF_ALLOC) == 0)
+ this->unattached_section_list_.push_back(os);
+ else
+ {
+ // This output section goes into a PT_LOAD segment.
+
+ elfcpp::Elf_Word seg_flags = Layout::section_flags_to_segment(flags);
+
+ // The only thing we really care about for PT_LOAD segments is
+ // whether or not they are writable, so that is how we search
+ // for them. People who need segments sorted on some other
+ // basis will have to wait until we implement a mechanism for
+ // them to describe the segments they want.
+
+ Segment_list::const_iterator p;
+ for (p = this->segment_list_.begin();
+ p != this->segment_list_.end();
+ ++p)
+ {
+ if ((*p)->type() == elfcpp::PT_LOAD
+ && ((*p)->flags() & elfcpp::PF_W) == (seg_flags & elfcpp::PF_W))
+ {
+ (*p)->add_output_section(os, seg_flags);
+ break;
+ }
+ }
+
+ if (p == this->segment_list_.end())
+ {
+ Output_segment* oseg = new Output_segment(elfcpp::PT_LOAD,
+ seg_flags);
+ this->segment_list_.push_back(oseg);
+ oseg->add_output_section(os, seg_flags);
+ }
+
+ // If we see a loadable SHT_NOTE section, we create a PT_NOTE
+ // segment.
+ if (type == elfcpp::SHT_NOTE)
+ {
+ // See if we already have an equivalent PT_NOTE segment.
+ for (p = this->segment_list_.begin();
+ p != segment_list_.end();
+ ++p)
+ {
+ if ((*p)->type() == elfcpp::PT_NOTE
+ && (((*p)->flags() & elfcpp::PF_W)
+ == (seg_flags & elfcpp::PF_W)))
+ {
+ (*p)->add_output_section(os, seg_flags);
+ break;
+ }
+ }
+
+ if (p == this->segment_list_.end())
+ {
+ Output_segment* oseg = new Output_segment(elfcpp::PT_NOTE,
+ seg_flags);
+ this->segment_list_.push_back(oseg);
+ oseg->add_output_section(os, seg_flags);
+ }
+ }
+
+ // If we see a loadable SHF_TLS section, we create a PT_TLS
+ // segment. There can only be one such segment.
+ if ((flags & elfcpp::SHF_TLS) != 0)
+ {
+ if (this->tls_segment_ == NULL)
+ {
+ this->tls_segment_ = new Output_segment(elfcpp::PT_TLS,
+ seg_flags);
+ this->segment_list_.push_back(this->tls_segment_);
+ }
+ this->tls_segment_->add_output_section(os, seg_flags);
+ }
+ }
+
+ return os;
+}
+
+// Create the dynamic sections which are needed before we read the
+// relocs.
+
+void
+Layout::create_initial_dynamic_sections(const Input_objects* input_objects,
+ Symbol_table* symtab)
+{
+ if (!input_objects->any_dynamic())
+ return;
+
+ const char* dynamic_name = this->namepool_.add(".dynamic", NULL);
+ this->dynamic_section_ = this->make_output_section(dynamic_name,
+ elfcpp::SHT_DYNAMIC,
+ (elfcpp::SHF_ALLOC
+ | elfcpp::SHF_WRITE));
+
+ symtab->define_in_output_data(input_objects->target(), "_DYNAMIC", NULL,
+ this->dynamic_section_, 0, 0,
+ elfcpp::STT_OBJECT, elfcpp::STB_LOCAL,
+ elfcpp::STV_HIDDEN, 0, false, false);
+
+ this->dynamic_data_ = new Output_data_dynamic(input_objects->target(),
+ &this->dynpool_);
+
+ this->dynamic_section_->add_output_section_data(this->dynamic_data_);
+}
+
+// Find the first read-only PT_LOAD segment, creating one if
+// necessary.
+
+Output_segment*
+Layout::find_first_load_seg()
+{
+ for (Segment_list::const_iterator p = this->segment_list_.begin();
+ p != this->segment_list_.end();
+ ++p)
+ {
+ if ((*p)->type() == elfcpp::PT_LOAD
+ && ((*p)->flags() & elfcpp::PF_R) != 0
+ && ((*p)->flags() & elfcpp::PF_W) == 0)
+ return *p;
+ }
+
+ Output_segment* load_seg = new Output_segment(elfcpp::PT_LOAD, elfcpp::PF_R);
+ this->segment_list_.push_back(load_seg);
+ return load_seg;
+}
+
+// Finalize the layout. When this is called, we have created all the
+// output sections and all the output segments which are based on
+// input sections. We have several things to do, and we have to do
+// them in the right order, so that we get the right results correctly
+// and efficiently.
+
+// 1) Finalize the list of output segments and create the segment
+// table header.
+
+// 2) Finalize the dynamic symbol table and associated sections.
+
+// 3) Determine the final file offset of all the output segments.
+
+// 4) Determine the final file offset of all the SHF_ALLOC output
+// sections.
+
+// 5) Create the symbol table sections and the section name table
+// section.
+
+// 6) Finalize the symbol table: set symbol values to their final
+// value and make a final determination of which symbols are going
+// into the output symbol table.
+
+// 7) Create the section table header.
+
+// 8) Determine the final file offset of all the output sections which
+// are not SHF_ALLOC, including the section table header.
+
+// 9) Finalize the ELF file header.
+
+// This function returns the size of the output file.
+
+off_t
+Layout::finalize(const Input_objects* input_objects, Symbol_table* symtab)
+{
+ Target* const target = input_objects->target();
+ const int size = target->get_size();
+
+ target->finalize_sections(&this->options_, this);
+
+ Output_segment* phdr_seg = NULL;
+ if (input_objects->any_dynamic())
+ {
+ // There was a dynamic object in the link. We need to create
+ // some information for the dynamic linker.
+
+ // Create the PT_PHDR segment which will hold the program
+ // headers.
+ phdr_seg = new Output_segment(elfcpp::PT_PHDR, elfcpp::PF_R);
+ this->segment_list_.push_back(phdr_seg);
+
+ // Create the dynamic symbol table, including the hash table.
+ Output_section* dynstr;
+ std::vector<Symbol*> dynamic_symbols;
+ unsigned int local_dynamic_count;
+ Versions versions;
+ this->create_dynamic_symtab(target, symtab, &dynstr,
+ &local_dynamic_count, &dynamic_symbols,
+ &versions);
+
+ // Create the .interp section to hold the name of the
+ // interpreter, and put it in a PT_INTERP segment.
+ this->create_interp(target);
+
+ // Finish the .dynamic section to hold the dynamic data, and put
+ // it in a PT_DYNAMIC segment.
+ this->finish_dynamic_section(input_objects, symtab);
+
+ // We should have added everything we need to the dynamic string
+ // table.
+ this->dynpool_.set_string_offsets();
+
+ // Create the version sections. We can't do this until the
+ // dynamic string table is complete.
+ this->create_version_sections(target, &versions, local_dynamic_count,
+ dynamic_symbols, dynstr);
+ }
+
+ // FIXME: Handle PT_GNU_STACK.
+
+ Output_segment* load_seg = this->find_first_load_seg();
+
+ // Lay out the segment headers.
+ bool big_endian = target->is_big_endian();
+ Output_segment_headers* segment_headers;
+ segment_headers = new Output_segment_headers(size, big_endian,
+ this->segment_list_);
+ load_seg->add_initial_output_data(segment_headers);
+ this->special_output_list_.push_back(segment_headers);
+ if (phdr_seg != NULL)
+ phdr_seg->add_initial_output_data(segment_headers);
+
+ // Lay out the file header.
+ Output_file_header* file_header;
+ file_header = new Output_file_header(size,
+ big_endian,
+ this->options_,
+ target,
+ symtab,
+ segment_headers);
+ load_seg->add_initial_output_data(file_header);
+ this->special_output_list_.push_back(file_header);
+
+ // We set the output section indexes in set_segment_offsets and
+ // set_section_offsets.
+ unsigned int shndx = 1;
+
+ // Set the file offsets of all the segments, and all the sections
+ // they contain.
+ off_t off = this->set_segment_offsets(target, load_seg, &shndx);
+
+ // Create the symbol table sections.
+ this->create_symtab_sections(size, input_objects, symtab, &off);
+
+ // Create the .shstrtab section.
+ Output_section* shstrtab_section = this->create_shstrtab();
+
+ // Set the file offsets of all the sections not associated with
+ // segments.
+ off = this->set_section_offsets(off, &shndx);
+
+ // Create the section table header.
+ Output_section_headers* oshdrs = this->create_shdrs(size, big_endian, &off);
+
+ file_header->set_section_info(oshdrs, shstrtab_section);
+
+ // Now we know exactly where everything goes in the output file.
+ Output_data::layout_complete();
+
+ return off;
+}
+
+// Return whether SEG1 should be before SEG2 in the output file. This
+// is based entirely on the segment type and flags. When this is
+// called the segment addresses has normally not yet been set.
+
+bool
+Layout::segment_precedes(const Output_segment* seg1,
+ const Output_segment* seg2)
+{
+ elfcpp::Elf_Word type1 = seg1->type();
+ elfcpp::Elf_Word type2 = seg2->type();
+
+ // The single PT_PHDR segment is required to precede any loadable
+ // segment. We simply make it always first.
+ if (type1 == elfcpp::PT_PHDR)
+ {
+ gold_assert(type2 != elfcpp::PT_PHDR);
+ return true;
+ }
+ if (type2 == elfcpp::PT_PHDR)
+ return false;
+
+ // The single PT_INTERP segment is required to precede any loadable
+ // segment. We simply make it always second.
+ if (type1 == elfcpp::PT_INTERP)
+ {
+ gold_assert(type2 != elfcpp::PT_INTERP);
+ return true;
+ }
+ if (type2 == elfcpp::PT_INTERP)
+ return false;
+
+ // We then put PT_LOAD segments before any other segments.
+ if (type1 == elfcpp::PT_LOAD && type2 != elfcpp::PT_LOAD)
+ return true;
+ if (type2 == elfcpp::PT_LOAD && type1 != elfcpp::PT_LOAD)
+ return false;
+
+ // We put the PT_TLS segment last, because that is where the dynamic
+ // linker expects to find it (this is just for efficiency; other
+ // positions would also work correctly).
+ if (type1 == elfcpp::PT_TLS && type2 != elfcpp::PT_TLS)
+ return false;
+ if (type2 == elfcpp::PT_TLS && type1 != elfcpp::PT_TLS)
+ return true;
+
+ const elfcpp::Elf_Word flags1 = seg1->flags();
+ const elfcpp::Elf_Word flags2 = seg2->flags();
+
+ // The order of non-PT_LOAD segments is unimportant. We simply sort
+ // by the numeric segment type and flags values. There should not
+ // be more than one segment with the same type and flags.
+ if (type1 != elfcpp::PT_LOAD)
+ {
+ if (type1 != type2)
+ return type1 < type2;
+ gold_assert(flags1 != flags2);
+ return flags1 < flags2;
+ }
+
+ // We sort PT_LOAD segments based on the flags. Readonly segments
+ // come before writable segments. Then executable segments come
+ // before non-executable segments. Then the unlikely case of a
+ // non-readable segment comes before the normal case of a readable
+ // segment. If there are multiple segments with the same type and
+ // flags, we require that the address be set, and we sort by
+ // virtual address and then physical address.
+ if ((flags1 & elfcpp::PF_W) != (flags2 & elfcpp::PF_W))
+ return (flags1 & elfcpp::PF_W) == 0;
+ if ((flags1 & elfcpp::PF_X) != (flags2 & elfcpp::PF_X))
+ return (flags1 & elfcpp::PF_X) != 0;
+ if ((flags1 & elfcpp::PF_R) != (flags2 & elfcpp::PF_R))
+ return (flags1 & elfcpp::PF_R) == 0;
+
+ uint64_t vaddr1 = seg1->vaddr();
+ uint64_t vaddr2 = seg2->vaddr();
+ if (vaddr1 != vaddr2)
+ return vaddr1 < vaddr2;
+
+ uint64_t paddr1 = seg1->paddr();
+ uint64_t paddr2 = seg2->paddr();
+ gold_assert(paddr1 != paddr2);
+ return paddr1 < paddr2;
+}
+
+// Set the file offsets of all the segments, and all the sections they
+// contain. They have all been created. LOAD_SEG must be be laid out
+// first. Return the offset of the data to follow.
+
+off_t
+Layout::set_segment_offsets(const Target* target, Output_segment* load_seg,
+ unsigned int *pshndx)
+{
+ // Sort them into the final order.
+ std::sort(this->segment_list_.begin(), this->segment_list_.end(),
+ Layout::Compare_segments());
+
+ // Find the PT_LOAD segments, and set their addresses and offsets
+ // and their section's addresses and offsets.
+ uint64_t addr = target->text_segment_address();
+ off_t off = 0;
+ bool was_readonly = false;
+ for (Segment_list::iterator p = this->segment_list_.begin();
+ p != this->segment_list_.end();
+ ++p)
+ {
+ if ((*p)->type() == elfcpp::PT_LOAD)
+ {
+ if (load_seg != NULL && load_seg != *p)
+ gold_unreachable();
+ load_seg = NULL;
+
+ // If the last segment was readonly, and this one is not,
+ // then skip the address forward one page, maintaining the
+ // same position within the page. This lets us store both
+ // segments overlapping on a single page in the file, but
+ // the loader will put them on different pages in memory.
+
+ uint64_t orig_addr = addr;
+ uint64_t orig_off = off;
+
+ uint64_t aligned_addr = addr;
+ uint64_t abi_pagesize = target->abi_pagesize();
+ if (was_readonly && ((*p)->flags() & elfcpp::PF_W) != 0)
+ {
+ uint64_t align = (*p)->addralign();
+
+ addr = align_address(addr, align);
+ aligned_addr = addr;
+ if ((addr & (abi_pagesize - 1)) != 0)
+ addr = addr + abi_pagesize;
+ }
+
+ unsigned int shndx_hold = *pshndx;
+ off = orig_off + ((addr - orig_addr) & (abi_pagesize - 1));
+ uint64_t new_addr = (*p)->set_section_addresses(addr, &off, pshndx);
+
+ // Now that we know the size of this segment, we may be able
+ // to save a page in memory, at the cost of wasting some
+ // file space, by instead aligning to the start of a new
+ // page. Here we use the real machine page size rather than
+ // the ABI mandated page size.
+
+ if (aligned_addr != addr)
+ {
+ uint64_t common_pagesize = target->common_pagesize();
+ uint64_t first_off = (common_pagesize
+ - (aligned_addr
+ & (common_pagesize - 1)));
+ uint64_t last_off = new_addr & (common_pagesize - 1);
+ if (first_off > 0
+ && last_off > 0
+ && ((aligned_addr & ~ (common_pagesize - 1))
+ != (new_addr & ~ (common_pagesize - 1)))
+ && first_off + last_off <= common_pagesize)
+ {
+ *pshndx = shndx_hold;
+ addr = align_address(aligned_addr, common_pagesize);
+ off = orig_off + ((addr - orig_addr) & (abi_pagesize - 1));
+ new_addr = (*p)->set_section_addresses(addr, &off, pshndx);
+ }
+ }
+
+ addr = new_addr;
+
+ if (((*p)->flags() & elfcpp::PF_W) == 0)
+ was_readonly = true;
+ }
+ }
+
+ // Handle the non-PT_LOAD segments, setting their offsets from their
+ // section's offsets.
+ for (Segment_list::iterator p = this->segment_list_.begin();
+ p != this->segment_list_.end();
+ ++p)
+ {
+ if ((*p)->type() != elfcpp::PT_LOAD)
+ (*p)->set_offset();
+ }
+
+ return off;
+}
+
+// Set the file offset of all the sections not associated with a
+// segment.
+
+off_t
+Layout::set_section_offsets(off_t off, unsigned int* pshndx)
+{
+ for (Section_list::iterator p = this->unattached_section_list_.begin();
+ p != this->unattached_section_list_.end();
+ ++p)
+ {
+ (*p)->set_out_shndx(*pshndx);
+ ++*pshndx;
+ if ((*p)->offset() != -1)
+ continue;
+ off = align_address(off, (*p)->addralign());
+ (*p)->set_address(0, off);
+ off += (*p)->data_size();
+ }
+ return off;
+}
+
+// Create the symbol table sections. Here we also set the final
+// values of the symbols. At this point all the loadable sections are
+// fully laid out.
+
+void
+Layout::create_symtab_sections(int size, const Input_objects* input_objects,
+ Symbol_table* symtab,
+ off_t* poff)
+{
+ int symsize;
+ unsigned int align;
+ if (size == 32)
+ {
+ symsize = elfcpp::Elf_sizes<32>::sym_size;
+ align = 4;
+ }
+ else if (size == 64)
+ {
+ symsize = elfcpp::Elf_sizes<64>::sym_size;
+ align = 8;
+ }
+ else
+ gold_unreachable();
+
+ off_t off = *poff;
+ off = align_address(off, align);
+ off_t startoff = off;
+
+ // Save space for the dummy symbol at the start of the section. We
+ // never bother to write this out--it will just be left as zero.
+ off += symsize;
+ unsigned int local_symbol_index = 1;
+
+ // Add STT_SECTION symbols for each Output section which needs one.
+ for (Section_list::iterator p = this->section_list_.begin();
+ p != this->section_list_.end();
+ ++p)
+ {
+ if (!(*p)->needs_symtab_index())
+ (*p)->set_symtab_index(-1U);
+ else
+ {
+ (*p)->set_symtab_index(local_symbol_index);
+ ++local_symbol_index;
+ off += symsize;
+ }
+ }
+
+ for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
+ p != input_objects->relobj_end();
+ ++p)
+ {
+ Task_lock_obj<Object> tlo(**p);
+ unsigned int index = (*p)->finalize_local_symbols(local_symbol_index,
+ off,
+ &this->sympool_);
+ off += (index - local_symbol_index) * symsize;
+ local_symbol_index = index;
+ }
+
+ unsigned int local_symcount = local_symbol_index;
+ gold_assert(local_symcount * symsize == off - startoff);
+
+ off_t dynoff;
+ size_t dyn_global_index;
+ size_t dyncount;
+ if (this->dynsym_section_ == NULL)
+ {
+ dynoff = 0;
+ dyn_global_index = 0;
+ dyncount = 0;
+ }
+ else
+ {
+ dyn_global_index = this->dynsym_section_->info();
+ off_t locsize = dyn_global_index * this->dynsym_section_->entsize();
+ dynoff = this->dynsym_section_->offset() + locsize;
+ dyncount = (this->dynsym_section_->data_size() - locsize) / symsize;
+ gold_assert(dyncount * symsize
+ == this->dynsym_section_->data_size() - locsize);
+ }
+
+ off = symtab->finalize(local_symcount, off, dynoff, dyn_global_index,
+ dyncount, &this->sympool_);
+
+ this->sympool_.set_string_offsets();
+
+ const char* symtab_name = this->namepool_.add(".symtab", NULL);
+ Output_section* osymtab = this->make_output_section(symtab_name,
+ elfcpp::SHT_SYMTAB,
+ 0);
+ this->symtab_section_ = osymtab;
+
+ Output_section_data* pos = new Output_data_space(off - startoff,
+ align);
+ osymtab->add_output_section_data(pos);
+
+ const char* strtab_name = this->namepool_.add(".strtab", NULL);
+ Output_section* ostrtab = this->make_output_section(strtab_name,
+ elfcpp::SHT_STRTAB,
+ 0);
+
+ Output_section_data* pstr = new Output_data_strtab(&this->sympool_);
+ ostrtab->add_output_section_data(pstr);
+
+ osymtab->set_address(0, startoff);
+ osymtab->set_link_section(ostrtab);
+ osymtab->set_info(local_symcount);
+ osymtab->set_entsize(symsize);
+
+ *poff = off;
+}
+
+// Create the .shstrtab section, which holds the names of the
+// sections. At the time this is called, we have created all the
+// output sections except .shstrtab itself.
+
+Output_section*
+Layout::create_shstrtab()
+{
+ // FIXME: We don't need to create a .shstrtab section if we are
+ // stripping everything.
+
+ const char* name = this->namepool_.add(".shstrtab", NULL);
+
+ this->namepool_.set_string_offsets();
+
+ Output_section* os = this->make_output_section(name, elfcpp::SHT_STRTAB, 0);
+
+ Output_section_data* posd = new Output_data_strtab(&this->namepool_);
+ os->add_output_section_data(posd);
+
+ return os;
+}
+
+// Create the section headers. SIZE is 32 or 64. OFF is the file
+// offset.
+
+Output_section_headers*
+Layout::create_shdrs(int size, bool big_endian, off_t* poff)
+{
+ Output_section_headers* oshdrs;
+ oshdrs = new Output_section_headers(size, big_endian, this,
+ &this->segment_list_,
+ &this->unattached_section_list_,
+ &this->namepool_);
+ off_t off = align_address(*poff, oshdrs->addralign());
+ oshdrs->set_address(0, off);
+ off += oshdrs->data_size();
+ *poff = off;
+ this->special_output_list_.push_back(oshdrs);
+ return oshdrs;
+}
+
+// Create the dynamic symbol table.
+
+void
+Layout::create_dynamic_symtab(const Target* target, Symbol_table* symtab,
+ Output_section **pdynstr,
+ unsigned int* plocal_dynamic_count,
+ std::vector<Symbol*>* pdynamic_symbols,
+ Versions* pversions)
+{
+ // Count all the symbols in the dynamic symbol table, and set the
+ // dynamic symbol indexes.
+
+ // Skip symbol 0, which is always all zeroes.
+ unsigned int index = 1;
+
+ // Add STT_SECTION symbols for each Output section which needs one.
+ for (Section_list::iterator p = this->section_list_.begin();
+ p != this->section_list_.end();
+ ++p)
+ {
+ if (!(*p)->needs_dynsym_index())
+ (*p)->set_dynsym_index(-1U);
+ else
+ {
+ (*p)->set_dynsym_index(index);
+ ++index;
+ }
+ }
+
+ // FIXME: Some targets apparently require local symbols in the
+ // dynamic symbol table. Here is where we will have to count them,
+ // and set the dynamic symbol indexes, and add the names to
+ // this->dynpool_.
+
+ unsigned int local_symcount = index;
+ *plocal_dynamic_count = local_symcount;
+
+ // FIXME: We have to tell set_dynsym_indexes whether the
+ // -E/--export-dynamic option was used.
+ index = symtab->set_dynsym_indexes(&this->options_, target, index,
+ pdynamic_symbols, &this->dynpool_,
+ pversions);
+
+ int symsize;
+ unsigned int align;
+ const int size = target->get_size();
+ if (size == 32)
+ {
+ symsize = elfcpp::Elf_sizes<32>::sym_size;
+ align = 4;
+ }
+ else if (size == 64)
+ {
+ symsize = elfcpp::Elf_sizes<64>::sym_size;
+ align = 8;
+ }
+ else
+ gold_unreachable();
+
+ // Create the dynamic symbol table section.
+
+ const char* dynsym_name = this->namepool_.add(".dynsym", NULL);
+ Output_section* dynsym = this->make_output_section(dynsym_name,
+ elfcpp::SHT_DYNSYM,
+ elfcpp::SHF_ALLOC);
+
+ Output_section_data* odata = new Output_data_space(index * symsize,
+ align);
+ dynsym->add_output_section_data(odata);
+
+ dynsym->set_info(local_symcount);
+ dynsym->set_entsize(symsize);
+ dynsym->set_addralign(align);
+
+ this->dynsym_section_ = dynsym;
+
+ Output_data_dynamic* const odyn = this->dynamic_data_;
+ odyn->add_section_address(elfcpp::DT_SYMTAB, dynsym);
+ odyn->add_constant(elfcpp::DT_SYMENT, symsize);
+
+ // Create the dynamic string table section.
+
+ const char* dynstr_name = this->namepool_.add(".dynstr", NULL);
+ Output_section* dynstr = this->make_output_section(dynstr_name,
+ elfcpp::SHT_STRTAB,
+ elfcpp::SHF_ALLOC);
+
+ Output_section_data* strdata = new Output_data_strtab(&this->dynpool_);
+ dynstr->add_output_section_data(strdata);
+
+ dynsym->set_link_section(dynstr);
+ this->dynamic_section_->set_link_section(dynstr);
+
+ odyn->add_section_address(elfcpp::DT_STRTAB, dynstr);
+ odyn->add_section_size(elfcpp::DT_STRSZ, dynstr);
+
+ *pdynstr = dynstr;
+
+ // Create the hash tables.
+
+ // FIXME: We need an option to create a GNU hash table.
+
+ unsigned char* phash;
+ unsigned int hashlen;
+ Dynobj::create_elf_hash_table(target, *pdynamic_symbols, local_symcount,
+ &phash, &hashlen);
+
+ const char* hash_name = this->namepool_.add(".hash", NULL);
+ Output_section* hashsec = this->make_output_section(hash_name,
+ elfcpp::SHT_HASH,
+ elfcpp::SHF_ALLOC);
+
+ Output_section_data* hashdata = new Output_data_const_buffer(phash,
+ hashlen,
+ align);
+ hashsec->add_output_section_data(hashdata);
+
+ hashsec->set_link_section(dynsym);
+ hashsec->set_entsize(4);
+
+ odyn->add_section_address(elfcpp::DT_HASH, hashsec);
+}
+
+// Create the version sections.
+
+void
+Layout::create_version_sections(const Target* target, const Versions* versions,
+ unsigned int local_symcount,
+ const std::vector<Symbol*>& dynamic_symbols,
+ const Output_section* dynstr)
+{
+ if (!versions->any_defs() && !versions->any_needs())
+ return;
+
+ if (target->get_size() == 32)
+ {
+ if (target->is_big_endian())
+ this->sized_create_version_sections SELECT_SIZE_ENDIAN_NAME(32, true)(
+ versions, local_symcount, dynamic_symbols, dynstr
+ SELECT_SIZE_ENDIAN(32, true));
+ else
+ this->sized_create_version_sections SELECT_SIZE_ENDIAN_NAME(32, false)(
+ versions, local_symcount, dynamic_symbols, dynstr
+ SELECT_SIZE_ENDIAN(32, false));
+ }
+ else if (target->get_size() == 64)
+ {
+ if (target->is_big_endian())
+ this->sized_create_version_sections SELECT_SIZE_ENDIAN_NAME(64, true)(
+ versions, local_symcount, dynamic_symbols, dynstr
+ SELECT_SIZE_ENDIAN(64, true));
+ else
+ this->sized_create_version_sections SELECT_SIZE_ENDIAN_NAME(64, false)(
+ versions, local_symcount, dynamic_symbols, dynstr
+ SELECT_SIZE_ENDIAN(64, false));
+ }
+ else
+ gold_unreachable();
+}
+
+// Create the version sections, sized version.
+
+template<int size, bool big_endian>
+void
+Layout::sized_create_version_sections(
+ const Versions* versions,
+ unsigned int local_symcount,
+ const std::vector<Symbol*>& dynamic_symbols,
+ const Output_section* dynstr
+ ACCEPT_SIZE_ENDIAN)
+{
+ const char* vname = this->namepool_.add(".gnu.version", NULL);
+ Output_section* vsec = this->make_output_section(vname,
+ elfcpp::SHT_GNU_versym,
+ elfcpp::SHF_ALLOC);
+
+ unsigned char* vbuf;
+ unsigned int vsize;
+ versions->symbol_section_contents SELECT_SIZE_ENDIAN_NAME(size, big_endian)(
+ &this->dynpool_, local_symcount, dynamic_symbols, &vbuf, &vsize
+ SELECT_SIZE_ENDIAN(size, big_endian));
+
+ Output_section_data* vdata = new Output_data_const_buffer(vbuf, vsize, 2);
+
+ vsec->add_output_section_data(vdata);
+ vsec->set_entsize(2);
+ vsec->set_link_section(this->dynsym_section_);
+
+ Output_data_dynamic* const odyn = this->dynamic_data_;
+ odyn->add_section_address(elfcpp::DT_VERSYM, vsec);
+
+ if (versions->any_defs())
+ {
+ const char* vdname = this->namepool_.add(".gnu.version_d", NULL);
+ Output_section *vdsec;
+ vdsec = this->make_output_section(vdname, elfcpp::SHT_GNU_verdef,
+ elfcpp::SHF_ALLOC);
+
+ unsigned char* vdbuf;
+ unsigned int vdsize;
+ unsigned int vdentries;
+ versions->def_section_contents SELECT_SIZE_ENDIAN_NAME(size, big_endian)(
+ &this->dynpool_, &vdbuf, &vdsize, &vdentries
+ SELECT_SIZE_ENDIAN(size, big_endian));
+
+ Output_section_data* vddata = new Output_data_const_buffer(vdbuf,
+ vdsize,
+ 4);
+
+ vdsec->add_output_section_data(vddata);
+ vdsec->set_link_section(dynstr);
+ vdsec->set_info(vdentries);
+
+ odyn->add_section_address(elfcpp::DT_VERDEF, vdsec);
+ odyn->add_constant(elfcpp::DT_VERDEFNUM, vdentries);
+ }
+
+ if (versions->any_needs())
+ {
+ const char* vnname = this->namepool_.add(".gnu.version_r", NULL);
+ Output_section* vnsec;
+ vnsec = this->make_output_section(vnname, elfcpp::SHT_GNU_verneed,
+ elfcpp::SHF_ALLOC);
+
+ unsigned char* vnbuf;
+ unsigned int vnsize;
+ unsigned int vnentries;
+ versions->need_section_contents SELECT_SIZE_ENDIAN_NAME(size, big_endian)
+ (&this->dynpool_, &vnbuf, &vnsize, &vnentries
+ SELECT_SIZE_ENDIAN(size, big_endian));
+
+ Output_section_data* vndata = new Output_data_const_buffer(vnbuf,
+ vnsize,
+ 4);
+
+ vnsec->add_output_section_data(vndata);
+ vnsec->set_link_section(dynstr);
+ vnsec->set_info(vnentries);
+
+ odyn->add_section_address(elfcpp::DT_VERNEED, vnsec);
+ odyn->add_constant(elfcpp::DT_VERNEEDNUM, vnentries);
+ }
+}
+
+// Create the .interp section and PT_INTERP segment.
+
+void
+Layout::create_interp(const Target* target)
+{
+ const char* interp = this->options_.dynamic_linker();
+ if (interp == NULL)
+ {
+ interp = target->dynamic_linker();
+ gold_assert(interp != NULL);
+ }
+
+ size_t len = strlen(interp) + 1;
+
+ Output_section_data* odata = new Output_data_const(interp, len, 1);
+
+ const char* interp_name = this->namepool_.add(".interp", NULL);
+ Output_section* osec = this->make_output_section(interp_name,
+ elfcpp::SHT_PROGBITS,
+ elfcpp::SHF_ALLOC);
+ osec->add_output_section_data(odata);
+
+ Output_segment* oseg = new Output_segment(elfcpp::PT_INTERP, elfcpp::PF_R);
+ this->segment_list_.push_back(oseg);
+ oseg->add_initial_output_section(osec, elfcpp::PF_R);
+}
+
+// Finish the .dynamic section and PT_DYNAMIC segment.
+
+void
+Layout::finish_dynamic_section(const Input_objects* input_objects,
+ const Symbol_table* symtab)
+{
+ Output_segment* oseg = new Output_segment(elfcpp::PT_DYNAMIC,
+ elfcpp::PF_R | elfcpp::PF_W);
+ this->segment_list_.push_back(oseg);
+ oseg->add_initial_output_section(this->dynamic_section_,
+ elfcpp::PF_R | elfcpp::PF_W);
+
+ Output_data_dynamic* const odyn = this->dynamic_data_;
+
+ for (Input_objects::Dynobj_iterator p = input_objects->dynobj_begin();
+ p != input_objects->dynobj_end();
+ ++p)
+ {
+ // FIXME: Handle --as-needed.
+ odyn->add_string(elfcpp::DT_NEEDED, (*p)->soname());
+ }
+
+ // FIXME: Support --init and --fini.
+ Symbol* sym = symtab->lookup("_init");
+ if (sym != NULL && sym->is_defined() && !sym->is_from_dynobj())
+ odyn->add_symbol(elfcpp::DT_INIT, sym);
+
+ sym = symtab->lookup("_fini");
+ if (sym != NULL && sym->is_defined() && !sym->is_from_dynobj())
+ odyn->add_symbol(elfcpp::DT_FINI, sym);
+
+ // FIXME: Support DT_INIT_ARRAY and DT_FINI_ARRAY.
+}
+
+// The mapping of .gnu.linkonce section names to real section names.
+
+#define MAPPING_INIT(f, t) { f, sizeof(f) - 1, t, sizeof(t) - 1 }
+const Layout::Linkonce_mapping Layout::linkonce_mapping[] =
+{
+ MAPPING_INIT("d.rel.ro", ".data.rel.ro"), // Must be before "d".
+ MAPPING_INIT("t", ".text"),
+ MAPPING_INIT("r", ".rodata"),
+ MAPPING_INIT("d", ".data"),
+ MAPPING_INIT("b", ".bss"),
+ MAPPING_INIT("s", ".sdata"),
+ MAPPING_INIT("sb", ".sbss"),
+ MAPPING_INIT("s2", ".sdata2"),
+ MAPPING_INIT("sb2", ".sbss2"),
+ MAPPING_INIT("wi", ".debug_info"),
+ MAPPING_INIT("td", ".tdata"),
+ MAPPING_INIT("tb", ".tbss"),
+ MAPPING_INIT("lr", ".lrodata"),
+ MAPPING_INIT("l", ".ldata"),
+ MAPPING_INIT("lb", ".lbss"),
+};
+#undef MAPPING_INIT
+
+const int Layout::linkonce_mapping_count =
+ sizeof(Layout::linkonce_mapping) / sizeof(Layout::linkonce_mapping[0]);
+
+// Return the name of the output section to use for a .gnu.linkonce
+// section. This is based on the default ELF linker script of the old
+// GNU linker. For example, we map a name like ".gnu.linkonce.t.foo"
+// to ".text". Set *PLEN to the length of the name. *PLEN is
+// initialized to the length of NAME.
+
+const char*
+Layout::linkonce_output_name(const char* name, size_t *plen)
+{
+ const char* s = name + sizeof(".gnu.linkonce") - 1;
+ if (*s != '.')
+ return name;
+ ++s;
+ const Linkonce_mapping* plm = linkonce_mapping;
+ for (int i = 0; i < linkonce_mapping_count; ++i, ++plm)
+ {
+ if (strncmp(s, plm->from, plm->fromlen) == 0 && s[plm->fromlen] == '.')
+ {
+ *plen = plm->tolen;
+ return plm->to;
+ }
+ }
+ return name;
+}
+
+// Choose the output section name to use given an input section name.
+// Set *PLEN to the length of the name. *PLEN is initialized to the
+// length of NAME.
+
+const char*
+Layout::output_section_name(const char* name, size_t* plen)
+{
+ if (Layout::is_linkonce(name))
+ {
+ // .gnu.linkonce sections are laid out as though they were named
+ // for the sections are placed into.
+ return Layout::linkonce_output_name(name, plen);
+ }
+
+ // If the section name has no '.', or only an initial '.', we use
+ // the name unchanged (i.e., ".text" is unchanged).
+
+ // Otherwise, if the section name does not include ".rel", we drop
+ // the last '.' and everything that follows (i.e., ".text.XXX"
+ // becomes ".text").
+
+ // Otherwise, if the section name has zero or one '.' after the
+ // ".rel", we use the name unchanged (i.e., ".rel.text" is
+ // unchanged).
+
+ // Otherwise, we drop the last '.' and everything that follows
+ // (i.e., ".rel.text.XXX" becomes ".rel.text").
+
+ const char* s = name;
+ if (*s == '.')
+ ++s;
+ const char* sdot = strchr(s, '.');
+ if (sdot == NULL)
+ return name;
+
+ const char* srel = strstr(s, ".rel");
+ if (srel == NULL)
+ {
+ *plen = sdot - name;
+ return name;
+ }
+
+ sdot = strchr(srel + 1, '.');
+ if (sdot == NULL)
+ return name;
+ sdot = strchr(sdot + 1, '.');
+ if (sdot == NULL)
+ return name;
+
+ *plen = sdot - name;
+ return name;
+}
+
+// Record the signature of a comdat section, and return whether to
+// include it in the link. If GROUP is true, this is a regular
+// section group. If GROUP is false, this is a group signature
+// derived from the name of a linkonce section. We want linkonce
+// signatures and group signatures to block each other, but we don't
+// want a linkonce signature to block another linkonce signature.
+
+bool
+Layout::add_comdat(const char* signature, bool group)
+{
+ std::string sig(signature);
+ std::pair<Signatures::iterator, bool> ins(
+ this->signatures_.insert(std::make_pair(sig, group)));
+
+ if (ins.second)
+ {
+ // This is the first time we've seen this signature.
+ return true;
+ }
+
+ if (ins.first->second)
+ {
+ // We've already seen a real section group with this signature.
+ return false;
+ }
+ else if (group)
+ {
+ // This is a real section group, and we've already seen a
+ // linkonce section with tihs signature. Record that we've seen
+ // a section group, and don't include this section group.
+ ins.first->second = true;
+ return false;
+ }
+ else
+ {
+ // We've already seen a linkonce section and this is a linkonce
+ // section. These don't block each other--this may be the same
+ // symbol name with different section types.
+ return true;
+ }
+}
+
+// Write out data not associated with a section or the symbol table.
+
+void
+Layout::write_data(const Symbol_table* symtab, const Target* target,
+ Output_file* of) const
+{
+ const Output_section* symtab_section = this->symtab_section_;
+ for (Section_list::const_iterator p = this->section_list_.begin();
+ p != this->section_list_.end();
+ ++p)
+ {
+ if ((*p)->needs_symtab_index())
+ {
+ gold_assert(symtab_section != NULL);
+ unsigned int index = (*p)->symtab_index();
+ gold_assert(index > 0 && index != -1U);
+ off_t off = (symtab_section->offset()
+ + index * symtab_section->entsize());
+ symtab->write_section_symbol(target, *p, of, off);
+ }
+ }
+
+ const Output_section* dynsym_section = this->dynsym_section_;
+ for (Section_list::const_iterator p = this->section_list_.begin();
+ p != this->section_list_.end();
+ ++p)
+ {
+ if ((*p)->needs_dynsym_index())
+ {
+ gold_assert(dynsym_section != NULL);
+ unsigned int index = (*p)->dynsym_index();
+ gold_assert(index > 0 && index != -1U);
+ off_t off = (dynsym_section->offset()
+ + index * dynsym_section->entsize());
+ symtab->write_section_symbol(target, *p, of, off);
+ }
+ }
+
+ // Write out the Output_sections. Most won't have anything to
+ // write, since most of the data will come from input sections which
+ // are handled elsewhere. But some Output_sections do have
+ // Output_data.
+ for (Section_list::const_iterator p = this->section_list_.begin();
+ p != this->section_list_.end();
+ ++p)
+ (*p)->write(of);
+
+ // Write out the Output_data which are not in an Output_section.
+ for (Data_list::const_iterator p = this->special_output_list_.begin();
+ p != this->special_output_list_.end();
+ ++p)
+ (*p)->write(of);
+}
+
+// Write_data_task methods.
+
+// We can always run this task.
+
+Task::Is_runnable_type
+Write_data_task::is_runnable(Workqueue*)
+{
+ return IS_RUNNABLE;
+}
+
+// We need to unlock FINAL_BLOCKER when finished.
+
+Task_locker*
+Write_data_task::locks(Workqueue* workqueue)
+{
+ return new Task_locker_block(*this->final_blocker_, workqueue);
+}
+
+// Run the task--write out the data.
+
+void
+Write_data_task::run(Workqueue*)
+{
+ this->layout_->write_data(this->symtab_, this->target_, this->of_);
+}
+
+// Write_symbols_task methods.
+
+// We can always run this task.
+
+Task::Is_runnable_type
+Write_symbols_task::is_runnable(Workqueue*)
+{
+ return IS_RUNNABLE;
+}
+
+// We need to unlock FINAL_BLOCKER when finished.
+
+Task_locker*
+Write_symbols_task::locks(Workqueue* workqueue)
+{
+ return new Task_locker_block(*this->final_blocker_, workqueue);
+}
+
+// Run the task--write out the symbols.
+
+void
+Write_symbols_task::run(Workqueue*)
+{
+ this->symtab_->write_globals(this->target_, this->sympool_, this->dynpool_,
+ this->of_);
+}
+
+// Close_task_runner methods.
+
+// Run the task--close the file.
+
+void
+Close_task_runner::run(Workqueue*)
+{
+ this->of_->close();
+}
+
+// Instantiate the templates we need. We could use the configure
+// script to restrict this to only the ones for implemented targets.
+
+template
+Output_section*
+Layout::layout<32, false>(Relobj* object, unsigned int shndx, const char* name,
+ const elfcpp::Shdr<32, false>& shdr, off_t*);
+
+template
+Output_section*
+Layout::layout<32, true>(Relobj* object, unsigned int shndx, const char* name,
+ const elfcpp::Shdr<32, true>& shdr, off_t*);
+
+template
+Output_section*
+Layout::layout<64, false>(Relobj* object, unsigned int shndx, const char* name,
+ const elfcpp::Shdr<64, false>& shdr, off_t*);
+
+template
+Output_section*
+Layout::layout<64, true>(Relobj* object, unsigned int shndx, const char* name,
+ const elfcpp::Shdr<64, true>& shdr, off_t*);
+
+
+} // End namespace gold.
diff --git a/gold/layout.h b/gold/layout.h
new file mode 100644
index 000000000000..8b349cc0a4bd
--- /dev/null
+++ b/gold/layout.h
@@ -0,0 +1,430 @@
+// layout.h -- lay out output file sections for gold -*- C++ -*-
+
+#ifndef GOLD_LAYOUT_H
+#define GOLD_LAYOUT_H
+
+#include <list>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "workqueue.h"
+#include "object.h"
+#include "dynobj.h"
+#include "stringpool.h"
+
+namespace gold
+{
+
+class General_options;
+class Input_objects;
+class Symbol_table;
+class Output_section_data;
+class Output_section;
+class Output_section_headers;
+class Output_segment;
+class Output_data;
+class Output_data_dynamic;
+class Target;
+
+// This task function handles mapping the input sections to output
+// sections and laying them out in memory.
+
+class Layout_task_runner : public Task_function_runner
+{
+ public:
+ // OPTIONS is the command line options, INPUT_OBJECTS is the list of
+ // input objects, SYMTAB is the symbol table, LAYOUT is the layout
+ // object.
+ Layout_task_runner(const General_options& options,
+ const Input_objects* input_objects,
+ Symbol_table* symtab,
+ Layout* layout)
+ : options_(options), input_objects_(input_objects), symtab_(symtab),
+ layout_(layout)
+ { }
+
+ // Run the operation.
+ void
+ run(Workqueue*);
+
+ private:
+ Layout_task_runner(const Layout_task_runner&);
+ Layout_task_runner& operator=(const Layout_task_runner&);
+
+ const General_options& options_;
+ const Input_objects* input_objects_;
+ Symbol_table* symtab_;
+ Layout* layout_;
+};
+
+// This class handles the details of laying out input sections.
+
+class Layout
+{
+ public:
+ Layout(const General_options& options);
+
+ // Given an input section SHNDX, named NAME, with data in SHDR, from
+ // the object file OBJECT, return the output section where this
+ // input section should go. Set *OFFSET to the offset within the
+ // output section.
+ template<int size, bool big_endian>
+ Output_section*
+ layout(Relobj *object, unsigned int shndx, const char* name,
+ const elfcpp::Shdr<size, big_endian>& shdr, off_t* offset);
+
+ // Add an Output_section_data to the layout. This is used for
+ // special sections like the GOT section.
+ void
+ add_output_section_data(const char* name, elfcpp::Elf_Word type,
+ elfcpp::Elf_Xword flags,
+ Output_section_data*);
+
+ // Create dynamic sections if necessary.
+ void
+ create_initial_dynamic_sections(const Input_objects*, Symbol_table*);
+
+ // Return the Stringpool used for symbol names.
+ const Stringpool*
+ sympool() const
+ { return &this->sympool_; }
+
+ // Return the Stringpool used for dynamic symbol names and dynamic
+ // tags.
+ const Stringpool*
+ dynpool() const
+ { return &this->dynpool_; }
+
+ // Return whether a section is a .gnu.linkonce section, given the
+ // section name.
+ static inline bool
+ is_linkonce(const char* name)
+ { return strncmp(name, ".gnu.linkonce", sizeof(".gnu.linkonce") - 1) == 0; }
+
+ // Record the signature of a comdat section, and return whether to
+ // include it in the link. The GROUP parameter is true for a
+ // section group signature, false for a signature derived from a
+ // .gnu.linkonce section.
+ bool
+ add_comdat(const char*, bool group);
+
+ // Finalize the layout after all the input sections have been added.
+ off_t
+ finalize(const Input_objects*, Symbol_table*);
+
+ // Return the TLS segment. This will return NULL if there isn't
+ // one.
+ Output_segment*
+ tls_segment() const
+ { return this->tls_segment_; }
+
+ // Return the normal symbol table.
+ Output_section*
+ symtab_section() const
+ {
+ gold_assert(this->symtab_section_ != NULL);
+ return this->symtab_section_;
+ }
+
+ // Return the dynamic symbol table.
+ Output_section*
+ dynsym_section() const
+ {
+ gold_assert(this->dynsym_section_ != NULL);
+ return this->dynsym_section_;
+ }
+
+ // Return the dynamic tags.
+ Output_data_dynamic*
+ dynamic_data() const
+ { return this->dynamic_data_; }
+
+ // Write out data not associated with an input file or the symbol
+ // table.
+ void
+ write_data(const Symbol_table*, const Target*, Output_file*) const;
+
+ // Return an output section named NAME, or NULL if there is none.
+ Output_section*
+ find_output_section(const char* name) const;
+
+ // Return an output segment of type TYPE, with segment flags SET set
+ // and segment flags CLEAR clear. Return NULL if there is none.
+ Output_segment*
+ find_output_segment(elfcpp::PT type, elfcpp::Elf_Word set,
+ elfcpp::Elf_Word clear) const;
+
+ // The list of segments.
+
+ typedef std::vector<Output_segment*> Segment_list;
+
+ // The list of sections not attached to a segment.
+
+ typedef std::vector<Output_section*> Section_list;
+
+ // The list of information to write out which is not attached to
+ // either a section or a segment.
+ typedef std::vector<Output_data*> Data_list;
+
+ private:
+ Layout(const Layout&);
+ Layout& operator=(const Layout&);
+
+ // Mapping from .gnu.linkonce section names to output section names.
+ struct Linkonce_mapping
+ {
+ const char* from;
+ int fromlen;
+ const char* to;
+ int tolen;
+ };
+ static const Linkonce_mapping linkonce_mapping[];
+ static const int linkonce_mapping_count;
+
+ // Find the first read-only PT_LOAD segment, creating one if
+ // necessary.
+ Output_segment*
+ find_first_load_seg();
+
+ // Create the output sections for the symbol table.
+ void
+ create_symtab_sections(int size, const Input_objects*, Symbol_table*,
+ off_t*);
+
+ // Create the .shstrtab section.
+ Output_section*
+ create_shstrtab();
+
+ // Create the section header table.
+ Output_section_headers*
+ create_shdrs(int size, bool big_endian, off_t*);
+
+ // Create the dynamic symbol table.
+ void
+ create_dynamic_symtab(const Target*, Symbol_table*, Output_section** pdynstr,
+ unsigned int* plocal_dynamic_count,
+ std::vector<Symbol*>* pdynamic_symbols,
+ Versions* versions);
+
+ // Finish the .dynamic section and PT_DYNAMIC segment.
+ void
+ finish_dynamic_section(const Input_objects*, const Symbol_table*);
+
+ // Create the .interp section and PT_INTERP segment.
+ void
+ create_interp(const Target* target);
+
+ // Create the version sections.
+ void
+ create_version_sections(const Target*, const Versions*,
+ unsigned int local_symcount,
+ const std::vector<Symbol*>& dynamic_symbols,
+ const Output_section* dynstr);
+
+ template<int size, bool big_endian>
+ void
+ sized_create_version_sections(const Versions* versions,
+ unsigned int local_symcount,
+ const std::vector<Symbol*>& dynamic_symbols,
+ const Output_section* dynstr
+ ACCEPT_SIZE_ENDIAN);
+
+ // Return whether to include this section in the link.
+ template<int size, bool big_endian>
+ bool
+ include_section(Object* object, const char* name,
+ const elfcpp::Shdr<size, big_endian>&);
+
+ // Return the output section name to use given an input section
+ // name. Set *PLEN to the length of the name. *PLEN must be
+ // initialized to the length of NAME.
+ static const char*
+ output_section_name(const char* name, size_t* plen);
+
+ // Return the output section name to use for a linkonce section
+ // name. PLEN is as for output_section_name.
+ static const char*
+ linkonce_output_name(const char* name, size_t* plen);
+
+ // Return the output section for NAME, TYPE and FLAGS.
+ Output_section*
+ get_output_section(const char* name, Stringpool::Key name_key,
+ elfcpp::Elf_Word type, elfcpp::Elf_Xword flags);
+
+ // Create a new Output_section.
+ Output_section*
+ make_output_section(const char* name, elfcpp::Elf_Word type,
+ elfcpp::Elf_Xword flags);
+
+ // Set the final file offsets of all the segments.
+ off_t
+ set_segment_offsets(const Target*, Output_segment*, unsigned int* pshndx);
+
+ // Set the final file offsets and section indexes of all the
+ // sections not associated with a segment.
+ off_t
+ set_section_offsets(off_t, unsigned int *pshndx);
+
+ // Return whether SEG1 comes before SEG2 in the output file.
+ static bool
+ segment_precedes(const Output_segment* seg1, const Output_segment* seg2);
+
+ // Map from section flags to segment flags.
+ static elfcpp::Elf_Word
+ section_flags_to_segment(elfcpp::Elf_Xword flags);
+
+ // A mapping used for group signatures.
+ typedef Unordered_map<std::string, bool> Signatures;
+
+ // Mapping from input section name/type/flags to output section. We
+ // use canonicalized strings here.
+
+ typedef std::pair<Stringpool::Key,
+ std::pair<elfcpp::Elf_Word, elfcpp::Elf_Xword> > Key;
+
+ struct Hash_key
+ {
+ size_t
+ operator()(const Key& k) const;
+ };
+
+ typedef Unordered_map<Key, Output_section*, Hash_key> Section_name_map;
+
+ // A comparison class for segments.
+
+ struct Compare_segments
+ {
+ bool
+ operator()(const Output_segment* seg1, const Output_segment* seg2)
+ { return Layout::segment_precedes(seg1, seg2); }
+ };
+
+ // A reference to the options on the command line.
+ const General_options& options_;
+ // The output section names.
+ Stringpool namepool_;
+ // The output symbol names.
+ Stringpool sympool_;
+ // The dynamic strings, if needed.
+ Stringpool dynpool_;
+ // The list of group sections and linkonce sections which we have seen.
+ Signatures signatures_;
+ // The mapping from input section name/type/flags to output sections.
+ Section_name_map section_name_map_;
+ // The list of output segments.
+ Segment_list segment_list_;
+ // The list of output sections.
+ Section_list section_list_;
+ // The list of output sections which are not attached to any output
+ // segment.
+ Section_list unattached_section_list_;
+ // The list of unattached Output_data objects which require special
+ // handling because they are not Output_sections.
+ Data_list special_output_list_;
+ // A pointer to the PT_TLS segment if there is one.
+ Output_segment* tls_segment_;
+ // The SHT_SYMTAB output section.
+ Output_section* symtab_section_;
+ // The SHT_DYNSYM output section if there is one.
+ Output_section* dynsym_section_;
+ // The SHT_DYNAMIC output section if there is one.
+ Output_section* dynamic_section_;
+ // The dynamic data which goes into dynamic_section_.
+ Output_data_dynamic* dynamic_data_;
+};
+
+// This task handles writing out data which is not part of a section
+// or segment.
+
+class Write_data_task : public Task
+{
+ public:
+ Write_data_task(const Layout* layout, const Symbol_table* symtab,
+ const Target* target, Output_file* of,
+ Task_token* final_blocker)
+ : layout_(layout), symtab_(symtab), target_(target), of_(of),
+ final_blocker_(final_blocker)
+ { }
+
+ // The standard Task methods.
+
+ Is_runnable_type
+ is_runnable(Workqueue*);
+
+ Task_locker*
+ locks(Workqueue*);
+
+ void
+ run(Workqueue*);
+
+ private:
+ const Layout* layout_;
+ const Symbol_table* symtab_;
+ const Target* target_;
+ Output_file* of_;
+ Task_token* final_blocker_;
+};
+
+// This task handles writing out the global symbols.
+
+class Write_symbols_task : public Task
+{
+ public:
+ Write_symbols_task(const Symbol_table* symtab, const Target* target,
+ const Stringpool* sympool, const Stringpool* dynpool,
+ Output_file* of, Task_token* final_blocker)
+ : symtab_(symtab), target_(target), sympool_(sympool), dynpool_(dynpool),
+ of_(of), final_blocker_(final_blocker)
+ { }
+
+ // The standard Task methods.
+
+ Is_runnable_type
+ is_runnable(Workqueue*);
+
+ Task_locker*
+ locks(Workqueue*);
+
+ void
+ run(Workqueue*);
+
+ private:
+ const Symbol_table* symtab_;
+ const Target* target_;
+ const Stringpool* sympool_;
+ const Stringpool* dynpool_;
+ Output_file* of_;
+ Task_token* final_blocker_;
+};
+
+// This task function handles closing the file.
+
+class Close_task_runner : public Task_function_runner
+{
+ public:
+ Close_task_runner(Output_file* of)
+ : of_(of)
+ { }
+
+ // Run the operation.
+ void
+ run(Workqueue*);
+
+ private:
+ Output_file* of_;
+};
+
+// A small helper function to align an address.
+
+inline uint64_t
+align_address(uint64_t address, uint64_t addralign)
+{
+ if (addralign != 0)
+ address = (address + addralign - 1) &~ (addralign - 1);
+ return address;
+}
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_LAYOUT_H)
diff --git a/gold/main.cc b/gold/main.cc
new file mode 100644
index 000000000000..ea65c2da27e1
--- /dev/null
+++ b/gold/main.cc
@@ -0,0 +1,57 @@
+// main.cc -- gold main function.
+
+#include "gold.h"
+
+#include "options.h"
+#include "dirsearch.h"
+#include "workqueue.h"
+#include "object.h"
+#include "symtab.h"
+#include "layout.h"
+
+using namespace gold;
+
+int
+main(int argc, char** argv)
+{
+#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];
+
+ // Handle the command line options.
+ Command_line command_line;
+ command_line.process(argc - 1, argv + 1);
+
+ // The work queue.
+ Workqueue workqueue(command_line.options());
+
+ // The list of input objects.
+ Input_objects input_objects;
+
+ // The symbol table.
+ Symbol_table symtab;
+
+ // The layout object.
+ Layout layout(command_line.options());
+
+ // Get the search path from the -L options.
+ Dirsearch search_path;
+ search_path.add(&workqueue, command_line.options().search_path());
+
+ // Queue up the first set of tasks.
+ queue_initial_tasks(command_line.options(), search_path,
+ command_line, &workqueue, &input_objects,
+ &symtab, &layout);
+
+ // Run the main task processing loop.
+ workqueue.process();
+
+ gold_exit(true);
+}
diff --git a/gold/merge.cc b/gold/merge.cc
new file mode 100644
index 000000000000..7af4faa03c92
--- /dev/null
+++ b/gold/merge.cc
@@ -0,0 +1,333 @@
+// merge.cc -- handle section merging for gold
+
+#include "gold.h"
+
+#include <cstdlib>
+
+#include "merge.h"
+
+namespace gold
+{
+
+// Sort the entries in a merge mapping. The key is an input object, a
+// section index in that object, and an offset in that section.
+
+bool
+Output_merge_base::Merge_key_less::operator()(const Merge_key& mk1,
+ const Merge_key& mk2) const
+{
+ // The order of different objects and different sections doesn't
+ // matter. We want to get consistent results across links so we
+ // don't use pointer comparison.
+ if (mk1.object != mk2.object)
+ return mk1.object->name() < mk2.object->name();
+ if (mk1.shndx != mk2.shndx)
+ return mk1.shndx < mk2.shndx;
+ return mk1.offset < mk2.offset;
+}
+
+// Add a mapping from an OFFSET in input section SHNDX in object
+// OBJECT to an OUTPUT_OFFSET in a merged output section. This
+// manages the mapping used to resolve relocations against merged
+// sections.
+
+void
+Output_merge_base::add_mapping(Relobj* object, unsigned int shndx,
+ off_t offset, off_t output_offset)
+{
+ Merge_key mk;
+ mk.object = object;
+ mk.shndx = shndx;
+ mk.offset = offset;
+ std::pair<Merge_map::iterator, bool> ins =
+ this->merge_map_.insert(std::make_pair(mk, output_offset));
+ gold_assert(ins.second);
+}
+
+// Return the output address for an input address. The input address
+// is at offset OFFSET in section SHNDX in OBJECT.
+// OUTPUT_SECTION_ADDRESS is the address of the output section. If we
+// know the address, set *POUTPUT and return true. Otherwise return
+// false.
+
+bool
+Output_merge_base::do_output_address(const Relobj* object, unsigned int shndx,
+ off_t offset,
+ uint64_t output_section_address,
+ uint64_t* poutput) const
+{
+ gold_assert(output_section_address == this->address());
+
+ Merge_key mk;
+ mk.object = object;
+ mk.shndx = shndx;
+ mk.offset = offset;
+ Merge_map::const_iterator p = this->merge_map_.lower_bound(mk);
+
+ // If MK is not in the map, lower_bound returns the next iterator
+ // larger than it.
+ if (p->first.object != object
+ || p->first.shndx != shndx
+ || p->first.offset != offset)
+ {
+ if (p == this->merge_map_.begin())
+ return false;
+ --p;
+ }
+
+ if (p->first.object != object || p->first.shndx != shndx)
+ return false;
+
+ // Any input section is fully mapped: we don't need to know the size
+ // of the range starting at P->FIRST.OFFSET.
+ *poutput = output_section_address + p->second + (offset - p->first.offset);
+ return true;
+}
+
+// Compute the hash code for a fixed-size constant.
+
+size_t
+Output_merge_data::Merge_data_hash::operator()(Merge_data_key k) const
+{
+ const unsigned char* p = this->pomd_->constant(k);
+ uint64_t entsize = this->pomd_->entsize();
+
+ // Fowler/Noll/Vo (FNV) hash (type FNV-1a).
+ if (sizeof(size_t) == 8)
+ {
+ size_t result = static_cast<size_t>(14695981039346656037ULL);
+ for (uint64_t i = 0; i < entsize; ++i)
+ {
+ result &= (size_t) *p++;
+ result *= 1099511628211ULL;
+ }
+ return result;
+ }
+ else
+ {
+ size_t result = 2166136261UL;
+ for (uint64_t i = 0; i < entsize; ++i)
+ {
+ result ^= (size_t) *p++;
+ result *= 16777619UL;
+ }
+ return result;
+ }
+}
+
+// Return whether one hash table key equals another.
+
+bool
+Output_merge_data::Merge_data_eq::operator()(Merge_data_key k1,
+ Merge_data_key k2) const
+{
+ const unsigned char* p1 = this->pomd_->constant(k1);
+ const unsigned char* p2 = this->pomd_->constant(k2);
+ return memcmp(p1, p2, this->pomd_->entsize()) == 0;
+}
+
+// Add a constant to the end of the section contents.
+
+void
+Output_merge_data::add_constant(const unsigned char* p)
+{
+ uint64_t entsize = this->entsize();
+ if (this->len_ + entsize > this->alc_)
+ {
+ if (this->alc_ == 0)
+ this->alc_ = 128 * entsize;
+ else
+ this->alc_ *= 2;
+ this->p_ = static_cast<unsigned char*>(realloc(this->p_, this->alc_));
+ if (this->p_ == NULL)
+ gold_fatal("out of memory", true);
+ }
+
+ memcpy(this->p_ + this->len_, p, entsize);
+ this->len_ += entsize;
+}
+
+// Add the input section SHNDX in OBJECT to a merged output section
+// which holds fixed length constants. Return whether we were able to
+// handle the section; if not, it will be linked as usual without
+// constant merging.
+
+bool
+Output_merge_data::do_add_input_section(Relobj* object, unsigned int shndx)
+{
+ off_t len;
+ const unsigned char* p = object->section_contents(shndx, &len);
+
+ uint64_t entsize = this->entsize();
+
+ if (len % entsize != 0)
+ return false;
+
+ for (off_t i = 0; i < len; i += entsize, p += entsize)
+ {
+ // Add the constant to the section contents. If we find that it
+ // is already in the hash table, we will remove it again.
+ Merge_data_key k = this->len_;
+ this->add_constant(p);
+
+ std::pair<Merge_data_hashtable::iterator, bool> ins =
+ this->hashtable_.insert(k);
+
+ if (!ins.second)
+ {
+ // Key was already present. Remove the copy we just added.
+ this->len_ -= entsize;
+ k = *ins.first;
+ }
+
+ // Record the offset of this constant in the output section.
+ this->add_mapping(object, shndx, i, k);
+ }
+
+ return true;
+}
+
+// Set the final data size in a merged output section with fixed size
+// constants.
+
+void
+Output_merge_data::do_set_address(uint64_t, off_t)
+{
+ // Release the memory we don't need.
+ this->p_ = static_cast<unsigned char*>(realloc(this->p_, this->len_));
+ gold_assert(this->p_ != NULL);
+ this->set_data_size(this->len_);
+}
+
+// Write the data of a merged output section with fixed size constants
+// to the file.
+
+void
+Output_merge_data::do_write(Output_file* of)
+{
+ of->write(this->offset(), this->p_, this->len_);
+}
+
+// Compute a hash code for a Merge_string_key, which is an object, a
+// section index, and an offset.
+
+template<typename Char_type>
+size_t
+Output_merge_string<Char_type>::Merge_string_key_hash::operator()(
+ const Merge_string_key& key) const
+{
+ // This is a very simple minded hash code. Fix it if it we get too
+ // many collisions.
+ const std::string& oname(key.object->name());
+ return oname[0] + oname.length() + key.shndx + key.offset;
+}
+
+// Compare two Merge_string_keys for equality.
+
+template<typename Char_type>
+bool
+Output_merge_string<Char_type>::Merge_string_key_eq::operator()(
+ const Merge_string_key& k1, const Merge_string_key& k2) const
+{
+ return (k1.object == k2.object
+ && k1.shndx == k2.shndx
+ && k1.offset == k2.offset);
+}
+
+// Add an input section to a merged string section.
+
+template<typename Char_type>
+bool
+Output_merge_string<Char_type>::do_add_input_section(Relobj* object,
+ unsigned int shndx)
+{
+ off_t len;
+ const unsigned char* pdata = object->section_contents(shndx, &len);
+
+ const Char_type* p = reinterpret_cast<const Char_type*>(pdata);
+
+ if (len % sizeof(Char_type) != 0)
+ {
+ fprintf(stderr,
+ _("%s: %s: mergeable string section length not multiple of "
+ "character size\n"),
+ program_name, object->name().c_str());
+ gold_exit(false);
+ }
+ len /= sizeof(Char_type);
+
+ off_t i = 0;
+ while (i < len)
+ {
+ off_t plen = 0;
+ for (const Char_type* pl = p; *pl != 0; ++pl)
+ {
+ ++plen;
+ if (i + plen >= len)
+ {
+ fprintf(stderr,
+ _("%s: %s: entry in mergeable string section "
+ "not null terminated\n"),
+ program_name, object->name().c_str());
+ gold_exit(false);
+ }
+ }
+
+ const Char_type* str = this->stringpool_.add(p, NULL);
+
+ Merge_string_key k(object, shndx, i);
+ typename Merge_string_hashtable::value_type v(k, str);
+ bool b = this->hashtable_.insert(v).second;
+ gold_assert(b);
+
+ p += plen + 1;
+ i += plen + 1;
+ }
+
+ return true;
+}
+
+// Set the final data size of a merged string section. This is where
+// we finalize the mappings from the input sections to the output
+// section.
+
+template<typename Char_type>
+void
+Output_merge_string<Char_type>::do_set_address(uint64_t, off_t)
+{
+ this->stringpool_.set_string_offsets();
+
+ for (typename Merge_string_hashtable::const_iterator p =
+ this->hashtable_.begin();
+ p != this->hashtable_.end();
+ ++p)
+ this->add_mapping(p->first.object, p->first.shndx, p->first.offset,
+ this->stringpool_.get_offset(p->second));
+
+ this->set_data_size(this->stringpool_.get_strtab_size());
+
+ // Save some memory.
+ this->hashtable_.clear();
+}
+
+// Write out a merged string section.
+
+template<typename Char_type>
+void
+Output_merge_string<Char_type>::do_write(Output_file* of)
+{
+ this->stringpool_.write(of, this->offset());
+}
+
+// Instantiate the templates we need.
+
+template
+class Output_merge_string<char>;
+
+template
+class Output_merge_string<uint16_t>;
+
+template
+class Output_merge_string<uint32_t>;
+
+} // End namespace gold.
diff --git a/gold/merge.h b/gold/merge.h
new file mode 100644
index 000000000000..dd97bf2d39e2
--- /dev/null
+++ b/gold/merge.h
@@ -0,0 +1,226 @@
+// merge.h -- handle section merging for gold -*- C++ -*-
+
+#ifndef GOLD_MERGE_H
+#define GOLD_MERGE_H
+
+#include <climits>
+
+#include "stringpool.h"
+#include "output.h"
+
+namespace gold
+{
+
+// A general class for SHF_MERGE data, to hold functions shared by
+// fixed-size constant data and string data.
+
+class Output_merge_base : public Output_section_data
+{
+ public:
+ Output_merge_base(uint64_t entsize)
+ : Output_section_data(1), merge_map_(), entsize_(entsize)
+ { }
+
+ // Return the output address for an input address.
+ bool
+ do_output_address(const Relobj* object, unsigned int shndx, off_t offset,
+ uint64_t output_section_address, uint64_t* poutput) const;
+
+ protected:
+ // Return the entry size.
+ uint64_t
+ entsize() const
+ { return this->entsize_; }
+
+ // Add a mapping from an OFFSET in input section SHNDX in object
+ // OBJECT to an OUTPUT_OFFSET in the output section.
+ void
+ add_mapping(Relobj* object, unsigned int shndx, off_t offset,
+ off_t output_offset);
+
+ private:
+ // We build a mapping from OBJECT/SHNDX/OFFSET to an offset in the
+ // output section.
+ struct Merge_key
+ {
+ const Relobj* object;
+ unsigned int shndx;
+ off_t offset;
+ };
+
+ struct Merge_key_less
+ {
+ bool
+ operator()(const Merge_key&, const Merge_key&) const;
+ };
+
+ typedef std::map<Merge_key, off_t, Merge_key_less> Merge_map;
+
+ // A mapping from input object/section/offset to offset in output
+ // section.
+ Merge_map merge_map_;
+
+ // The entry size. For fixed-size constants, this is the size of
+ // the constants. For strings, this is the size of a character.
+ uint64_t entsize_;
+};
+
+// Handle SHF_MERGE sections with fixed-size constant data.
+
+class Output_merge_data : public Output_merge_base
+{
+ public:
+ Output_merge_data(uint64_t entsize)
+ : Output_merge_base(entsize), p_(NULL), len_(0), alc_(0),
+ hashtable_(128, Merge_data_hash(this), Merge_data_eq(this))
+ { }
+
+ // Add an input section.
+ bool
+ do_add_input_section(Relobj* object, unsigned int shndx);
+
+ // Set the final data size.
+ void
+ do_set_address(uint64_t, off_t);
+
+ // Write the data to the file.
+ void
+ do_write(Output_file*);
+
+ private:
+ // We build a hash table of the fixed-size constants. Each constant
+ // is stored as a pointer into the section data we are accumulating.
+
+ // A key in the hash table. This is an offset in the section
+ // contents we are building.
+ typedef off_t Merge_data_key;
+
+ // Compute the hash code. To do this we need a pointer back to the
+ // object holding the data.
+ class Merge_data_hash
+ {
+ public:
+ Merge_data_hash(const Output_merge_data* pomd)
+ : pomd_(pomd)
+ { }
+
+ size_t
+ operator()(Merge_data_key) const;
+
+ private:
+ const Output_merge_data* pomd_;
+ };
+
+ friend class Merge_data_hash;
+
+ // Compare two entries in the hash table for equality. To do this
+ // we need a pointer back to the object holding the data. Note that
+ // we now have a pointer to the object stored in two places in the
+ // hash table. Fixing this would require specializing the hash
+ // table, which would be hard to do portably.
+ class Merge_data_eq
+ {
+ public:
+ Merge_data_eq(const Output_merge_data* pomd)
+ : pomd_(pomd)
+ { }
+
+ bool
+ operator()(Merge_data_key k1, Merge_data_key k2) const;
+
+ private:
+ const Output_merge_data* pomd_;
+ };
+
+ friend class Merge_data_eq;
+
+ // The type of the hash table.
+ typedef Unordered_set<Merge_data_key, Merge_data_hash, Merge_data_eq>
+ Merge_data_hashtable;
+
+ // Given a hash table key, which is just an offset into the section
+ // data, return a pointer to the corresponding constant.
+ const unsigned char*
+ constant(Merge_data_key k) const
+ {
+ gold_assert(k >= 0 && k < this->len_);
+ return this->p_ + k;
+ }
+
+ // Add a constant to the output.
+ void
+ add_constant(const unsigned char*);
+
+ // The accumulated data.
+ unsigned char* p_;
+ // The length of the accumulated data.
+ off_t len_;
+ // The size of the allocated buffer.
+ size_t alc_;
+ // The hash table.
+ Merge_data_hashtable hashtable_;
+};
+
+// Handle SHF_MERGE sections with string data. This is a template
+// based on the type of the characters in the string.
+
+template<typename Char_type>
+class Output_merge_string : public Output_merge_base
+{
+ public:
+ Output_merge_string()
+ : Output_merge_base(sizeof(Char_type)), stringpool_(false), hashtable_()
+ { }
+
+ // Add an input section.
+ bool
+ do_add_input_section(Relobj* object, unsigned int shndx);
+
+ // Set the final data size.
+ void
+ do_set_address(uint64_t, off_t);
+
+ // Write the data to the file.
+ void
+ do_write(Output_file*);
+
+ private:
+ // As we see input sections, we build a mapping from object, section
+ // index and offset to strings.
+ struct Merge_string_key
+ {
+ Relobj* object;
+ unsigned int shndx;
+ off_t offset;
+
+ Merge_string_key(Relobj *objecta, unsigned int shndxa, off_t offseta)
+ : object(objecta), shndx(shndxa), offset(offseta)
+ { }
+ };
+
+ struct Merge_string_key_hash
+ {
+ size_t
+ operator()(const Merge_string_key&) const;
+ };
+
+ struct Merge_string_key_eq
+ {
+ bool
+ operator()(const Merge_string_key&, const Merge_string_key&) const;
+ };
+
+ typedef Unordered_map<Merge_string_key, const Char_type*,
+ Merge_string_key_hash, Merge_string_key_eq>
+ Merge_string_hashtable;
+
+ // As we see the strings, we add them to a Stringpool.
+ Stringpool_template<Char_type> stringpool_;
+ // Map from a location in an input object to an entry in the
+ // Stringpool.
+ Merge_string_hashtable hashtable_;
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_MERGE_H)
diff --git a/gold/object.cc b/gold/object.cc
new file mode 100644
index 000000000000..eb975c6c7345
--- /dev/null
+++ b/gold/object.cc
@@ -0,0 +1,973 @@
+// object.cc -- support for an object file for linking in gold
+
+#include "gold.h"
+
+#include <cerrno>
+#include <cstring>
+#include <cstdarg>
+
+#include "target-select.h"
+#include "layout.h"
+#include "output.h"
+#include "symtab.h"
+#include "object.h"
+#include "dynobj.h"
+
+namespace gold
+{
+
+// Class Object.
+
+// Set the target based on fields in the ELF file header.
+
+void
+Object::set_target(int machine, int size, bool big_endian, int osabi,
+ int abiversion)
+{
+ Target* target = select_target(machine, size, big_endian, osabi, abiversion);
+ if (target == NULL)
+ {
+ fprintf(stderr, _("%s: %s: unsupported ELF machine number %d\n"),
+ program_name, this->name().c_str(), machine);
+ gold_exit(false);
+ }
+ this->target_ = target;
+}
+
+// Report an error for the elfcpp::Elf_file interface.
+
+void
+Object::error(const char* format, ...)
+{
+ va_list args;
+
+ fprintf(stderr, "%s: %s: ", program_name, this->name().c_str());
+ va_start(args, format);
+ vfprintf(stderr, format, args);
+ va_end(args);
+ putc('\n', stderr);
+
+ gold_exit(false);
+}
+
+// Return a view of the contents of a section.
+
+const unsigned char*
+Object::section_contents(unsigned int shndx, off_t* plen)
+{
+ Location loc(this->do_section_contents(shndx));
+ *plen = loc.data_size;
+ return this->get_view(loc.file_offset, loc.data_size);
+}
+
+// Read the section data into SD. This is code common to Sized_relobj
+// and Sized_dynobj, so we put it into Object.
+
+template<int size, bool big_endian>
+void
+Object::read_section_data(elfcpp::Elf_file<size, big_endian, Object>* elf_file,
+ Read_symbols_data* sd)
+{
+ const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
+
+ // Read the section headers.
+ const off_t shoff = elf_file->shoff();
+ const unsigned int shnum = this->shnum();
+ sd->section_headers = this->get_lasting_view(shoff, shnum * shdr_size);
+
+ // Read the section names.
+ const unsigned char* pshdrs = sd->section_headers->data();
+ const unsigned char* pshdrnames = pshdrs + elf_file->shstrndx() * shdr_size;
+ typename elfcpp::Shdr<size, big_endian> shdrnames(pshdrnames);
+
+ if (shdrnames.get_sh_type() != elfcpp::SHT_STRTAB)
+ {
+ fprintf(stderr,
+ _("%s: %s: section name section has wrong type: %u\n"),
+ program_name, this->name().c_str(),
+ static_cast<unsigned int>(shdrnames.get_sh_type()));
+ gold_exit(false);
+ }
+
+ sd->section_names_size = shdrnames.get_sh_size();
+ sd->section_names = this->get_lasting_view(shdrnames.get_sh_offset(),
+ sd->section_names_size);
+}
+
+// If NAME is the name of a special .gnu.warning section, arrange for
+// the warning to be issued. SHNDX is the section index. Return
+// whether it is a warning section.
+
+bool
+Object::handle_gnu_warning_section(const char* name, unsigned int shndx,
+ Symbol_table* symtab)
+{
+ const char warn_prefix[] = ".gnu.warning.";
+ const int warn_prefix_len = sizeof warn_prefix - 1;
+ if (strncmp(name, warn_prefix, warn_prefix_len) == 0)
+ {
+ symtab->add_warning(name + warn_prefix_len, this, shndx);
+ return true;
+ }
+ return false;
+}
+
+// Class Sized_relobj.
+
+template<int size, bool big_endian>
+Sized_relobj<size, big_endian>::Sized_relobj(
+ const std::string& name,
+ Input_file* input_file,
+ off_t offset,
+ const elfcpp::Ehdr<size, big_endian>& ehdr)
+ : Relobj(name, input_file, offset),
+ elf_file_(this, ehdr),
+ symtab_shndx_(-1U),
+ local_symbol_count_(0),
+ output_local_symbol_count_(0),
+ symbols_(NULL),
+ local_symbol_offset_(0),
+ local_values_()
+{
+}
+
+template<int size, bool big_endian>
+Sized_relobj<size, big_endian>::~Sized_relobj()
+{
+}
+
+// Set up an object file based on the file header. This sets up the
+// target and reads the section information.
+
+template<int size, bool big_endian>
+void
+Sized_relobj<size, big_endian>::setup(
+ const elfcpp::Ehdr<size, big_endian>& ehdr)
+{
+ this->set_target(ehdr.get_e_machine(), size, big_endian,
+ ehdr.get_e_ident()[elfcpp::EI_OSABI],
+ ehdr.get_e_ident()[elfcpp::EI_ABIVERSION]);
+
+ const unsigned int shnum = this->elf_file_.shnum();
+ this->set_shnum(shnum);
+}
+
+// Find the SHT_SYMTAB section, given the section headers. The ELF
+// standard says that maybe in the future there can be more than one
+// SHT_SYMTAB section. Until somebody figures out how that could
+// work, we assume there is only one.
+
+template<int size, bool big_endian>
+void
+Sized_relobj<size, big_endian>::find_symtab(const unsigned char* pshdrs)
+{
+ const unsigned int shnum = this->shnum();
+ this->symtab_shndx_ = 0;
+ if (shnum > 0)
+ {
+ // Look through the sections in reverse order, since gas tends
+ // to put the symbol table at the end.
+ const unsigned char* p = pshdrs + shnum * This::shdr_size;
+ unsigned int i = shnum;
+ while (i > 0)
+ {
+ --i;
+ p -= This::shdr_size;
+ typename This::Shdr shdr(p);
+ if (shdr.get_sh_type() == elfcpp::SHT_SYMTAB)
+ {
+ this->symtab_shndx_ = i;
+ break;
+ }
+ }
+ }
+}
+
+// Read the sections and symbols from an object file.
+
+template<int size, bool big_endian>
+void
+Sized_relobj<size, big_endian>::do_read_symbols(Read_symbols_data* sd)
+{
+ this->read_section_data(&this->elf_file_, sd);
+
+ const unsigned char* const pshdrs = sd->section_headers->data();
+
+ this->find_symtab(pshdrs);
+
+ if (this->symtab_shndx_ == 0)
+ {
+ // No symbol table. Weird but legal.
+ sd->symbols = NULL;
+ sd->symbols_size = 0;
+ sd->symbol_names = NULL;
+ sd->symbol_names_size = 0;
+ return;
+ }
+
+ // Get the symbol table section header.
+ typename This::Shdr symtabshdr(pshdrs
+ + this->symtab_shndx_ * This::shdr_size);
+ gold_assert(symtabshdr.get_sh_type() == elfcpp::SHT_SYMTAB);
+
+ // We only need the external symbols.
+ const int sym_size = This::sym_size;
+ const unsigned int loccount = symtabshdr.get_sh_info();
+ this->local_symbol_count_ = loccount;
+ off_t locsize = loccount * sym_size;
+ off_t extoff = symtabshdr.get_sh_offset() + locsize;
+ off_t extsize = symtabshdr.get_sh_size() - locsize;
+
+ // Read the symbol table.
+ File_view* fvsymtab = this->get_lasting_view(extoff, extsize);
+
+ // Read the section header for the symbol names.
+ unsigned int strtab_shndx = symtabshdr.get_sh_link();
+ if (strtab_shndx >= this->shnum())
+ {
+ fprintf(stderr, _("%s: %s: invalid symbol table name index: %u\n"),
+ program_name, this->name().c_str(), strtab_shndx);
+ gold_exit(false);
+ }
+ typename This::Shdr strtabshdr(pshdrs + strtab_shndx * This::shdr_size);
+ if (strtabshdr.get_sh_type() != elfcpp::SHT_STRTAB)
+ {
+ fprintf(stderr,
+ _("%s: %s: symbol table name section has wrong type: %u\n"),
+ program_name, this->name().c_str(),
+ static_cast<unsigned int>(strtabshdr.get_sh_type()));
+ gold_exit(false);
+ }
+
+ // Read the symbol names.
+ File_view* fvstrtab = this->get_lasting_view(strtabshdr.get_sh_offset(),
+ strtabshdr.get_sh_size());
+
+ sd->symbols = fvsymtab;
+ sd->symbols_size = extsize;
+ sd->symbol_names = fvstrtab;
+ sd->symbol_names_size = strtabshdr.get_sh_size();
+}
+
+// Return whether to include a section group in the link. LAYOUT is
+// used to keep track of which section groups we have already seen.
+// INDEX is the index of the section group and SHDR is the section
+// header. If we do not want to include this group, we set bits in
+// OMIT for each section which should be discarded.
+
+template<int size, bool big_endian>
+bool
+Sized_relobj<size, big_endian>::include_section_group(
+ Layout* layout,
+ unsigned int index,
+ const elfcpp::Shdr<size, big_endian>& shdr,
+ std::vector<bool>* omit)
+{
+ // Read the section contents.
+ const unsigned char* pcon = this->get_view(shdr.get_sh_offset(),
+ shdr.get_sh_size());
+ const elfcpp::Elf_Word* pword =
+ reinterpret_cast<const elfcpp::Elf_Word*>(pcon);
+
+ // The first word contains flags. We only care about COMDAT section
+ // groups. Other section groups are always included in the link
+ // just like ordinary sections.
+ elfcpp::Elf_Word flags = elfcpp::Swap<32, big_endian>::readval(pword);
+ if ((flags & elfcpp::GRP_COMDAT) == 0)
+ return true;
+
+ // Look up the group signature, which is the name of a symbol. This
+ // is a lot of effort to go to to read a string. Why didn't they
+ // just use the name of the SHT_GROUP section as the group
+ // signature?
+
+ // Get the appropriate symbol table header (this will normally be
+ // the single SHT_SYMTAB section, but in principle it need not be).
+ const unsigned int link = shdr.get_sh_link();
+ typename This::Shdr symshdr(this, this->elf_file_.section_header(link));
+
+ // Read the symbol table entry.
+ if (shdr.get_sh_info() >= symshdr.get_sh_size() / This::sym_size)
+ {
+ fprintf(stderr, _("%s: %s: section group %u info %u out of range\n"),
+ program_name, this->name().c_str(), index, shdr.get_sh_info());
+ gold_exit(false);
+ }
+ off_t symoff = symshdr.get_sh_offset() + shdr.get_sh_info() * This::sym_size;
+ const unsigned char* psym = this->get_view(symoff, This::sym_size);
+ elfcpp::Sym<size, big_endian> sym(psym);
+
+ // Read the symbol table names.
+ off_t symnamelen;
+ const unsigned char* psymnamesu;
+ psymnamesu = this->section_contents(symshdr.get_sh_link(), &symnamelen);
+ const char* psymnames = reinterpret_cast<const char*>(psymnamesu);
+
+ // Get the section group signature.
+ if (sym.get_st_name() >= symnamelen)
+ {
+ fprintf(stderr, _("%s: %s: symbol %u name offset %u out of range\n"),
+ program_name, this->name().c_str(), shdr.get_sh_info(),
+ sym.get_st_name());
+ gold_exit(false);
+ }
+
+ const char* signature = psymnames + sym.get_st_name();
+
+ // It seems that some versions of gas will create a section group
+ // associated with a section symbol, and then fail to give a name to
+ // the section symbol. In such a case, use the name of the section.
+ // FIXME.
+ std::string secname;
+ if (signature[0] == '\0' && sym.get_st_type() == elfcpp::STT_SECTION)
+ {
+ secname = this->section_name(sym.get_st_shndx());
+ signature = secname.c_str();
+ }
+
+ // Record this section group, and see whether we've already seen one
+ // with the same signature.
+ if (layout->add_comdat(signature, true))
+ return true;
+
+ // This is a duplicate. We want to discard the sections in this
+ // group.
+ size_t count = shdr.get_sh_size() / sizeof(elfcpp::Elf_Word);
+ for (size_t i = 1; i < count; ++i)
+ {
+ elfcpp::Elf_Word secnum =
+ elfcpp::Swap<32, big_endian>::readval(pword + i);
+ if (secnum >= this->shnum())
+ {
+ fprintf(stderr,
+ _("%s: %s: section %u in section group %u out of range"),
+ program_name, this->name().c_str(), secnum,
+ index);
+ gold_exit(false);
+ }
+ (*omit)[secnum] = true;
+ }
+
+ return false;
+}
+
+// Whether to include a linkonce section in the link. NAME is the
+// name of the section and SHDR is the section header.
+
+// Linkonce sections are a GNU extension implemented in the original
+// GNU linker before section groups were defined. The semantics are
+// that we only include one linkonce section with a given name. The
+// name of a linkonce section is normally .gnu.linkonce.T.SYMNAME,
+// where T is the type of section and SYMNAME is the name of a symbol.
+// In an attempt to make linkonce sections interact well with section
+// groups, we try to identify SYMNAME and use it like a section group
+// signature. We want to block section groups with that signature,
+// but not other linkonce sections with that signature. We also use
+// the full name of the linkonce section as a normal section group
+// signature.
+
+template<int size, bool big_endian>
+bool
+Sized_relobj<size, big_endian>::include_linkonce_section(
+ Layout* layout,
+ const char* name,
+ const elfcpp::Shdr<size, big_endian>&)
+{
+ const char* symname = strrchr(name, '.') + 1;
+ bool include1 = layout->add_comdat(symname, false);
+ bool include2 = layout->add_comdat(name, true);
+ return include1 && include2;
+}
+
+// Lay out the input sections. We walk through the sections and check
+// whether they should be included in the link. If they should, we
+// pass them to the Layout object, which will return an output section
+// and an offset.
+
+template<int size, bool big_endian>
+void
+Sized_relobj<size, big_endian>::do_layout(const General_options& options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Read_symbols_data* sd)
+{
+ const unsigned int shnum = this->shnum();
+ if (shnum == 0)
+ return;
+
+ // Get the section headers.
+ const unsigned char* pshdrs = sd->section_headers->data();
+
+ // Get the section names.
+ const unsigned char* pnamesu = sd->section_names->data();
+ const char* pnames = reinterpret_cast<const char*>(pnamesu);
+
+ std::vector<Map_to_output>& map_sections(this->map_to_output());
+ map_sections.resize(shnum);
+
+ // Keep track of which sections to omit.
+ std::vector<bool> omit(shnum, false);
+
+ // Skip the first, dummy, section.
+ pshdrs += This::shdr_size;
+ for (unsigned int i = 1; i < shnum; ++i, pshdrs += This::shdr_size)
+ {
+ typename This::Shdr shdr(pshdrs);
+
+ if (shdr.get_sh_name() >= sd->section_names_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: bad section name offset for section %u: %lu\n"),
+ program_name, this->name().c_str(), i,
+ static_cast<unsigned long>(shdr.get_sh_name()));
+ gold_exit(false);
+ }
+
+ const char* name = pnames + shdr.get_sh_name();
+
+ if (this->handle_gnu_warning_section(name, i, symtab))
+ {
+ if (!options.is_relocatable())
+ omit[i] = true;
+ }
+
+ bool discard = omit[i];
+ if (!discard)
+ {
+ if (shdr.get_sh_type() == elfcpp::SHT_GROUP)
+ {
+ if (!this->include_section_group(layout, i, shdr, &omit))
+ discard = true;
+ }
+ else if (Layout::is_linkonce(name))
+ {
+ if (!this->include_linkonce_section(layout, name, shdr))
+ discard = true;
+ }
+ }
+
+ if (discard)
+ {
+ // Do not include this section in the link.
+ map_sections[i].output_section = NULL;
+ continue;
+ }
+
+ off_t offset;
+ Output_section* os = layout->layout(this, i, name, shdr, &offset);
+
+ map_sections[i].output_section = os;
+ map_sections[i].offset = offset;
+ }
+
+ delete sd->section_headers;
+ sd->section_headers = NULL;
+ delete sd->section_names;
+ sd->section_names = NULL;
+}
+
+// Add the symbols to the symbol table.
+
+template<int size, bool big_endian>
+void
+Sized_relobj<size, big_endian>::do_add_symbols(Symbol_table* symtab,
+ Read_symbols_data* sd)
+{
+ if (sd->symbols == NULL)
+ {
+ gold_assert(sd->symbol_names == NULL);
+ return;
+ }
+
+ const int sym_size = This::sym_size;
+ size_t symcount = sd->symbols_size / sym_size;
+ if (symcount * sym_size != sd->symbols_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: size of symbols is not multiple of symbol size\n"),
+ program_name, this->name().c_str());
+ gold_exit(false);
+ }
+
+ this->symbols_ = new Symbol*[symcount];
+
+ const char* sym_names =
+ reinterpret_cast<const char*>(sd->symbol_names->data());
+ symtab->add_from_relobj(this, sd->symbols->data(), symcount, sym_names,
+ sd->symbol_names_size, this->symbols_);
+
+ delete sd->symbols;
+ sd->symbols = NULL;
+ delete sd->symbol_names;
+ sd->symbol_names = NULL;
+}
+
+// Finalize the local symbols. Here we record the file offset at
+// which they should be output, we add their names to *POOL, and we
+// add their values to THIS->LOCAL_VALUES_. Return the symbol index.
+// This function is always called from the main thread. The actual
+// output of the local symbols will occur in a separate task.
+
+template<int size, bool big_endian>
+unsigned int
+Sized_relobj<size, big_endian>::do_finalize_local_symbols(unsigned int index,
+ off_t off,
+ Stringpool* pool)
+{
+ gold_assert(this->symtab_shndx_ != -1U);
+ if (this->symtab_shndx_ == 0)
+ {
+ // This object has no symbols. Weird but legal.
+ return index;
+ }
+
+ gold_assert(off == static_cast<off_t>(align_address(off, size >> 3)));
+
+ this->local_symbol_offset_ = off;
+
+ // Read the symbol table section header.
+ const unsigned int symtab_shndx = this->symtab_shndx_;
+ typename This::Shdr symtabshdr(this,
+ this->elf_file_.section_header(symtab_shndx));
+ gold_assert(symtabshdr.get_sh_type() == elfcpp::SHT_SYMTAB);
+
+ // Read the local symbols.
+ const int sym_size = This::sym_size;
+ const unsigned int loccount = this->local_symbol_count_;
+ gold_assert(loccount == symtabshdr.get_sh_info());
+ off_t locsize = loccount * sym_size;
+ const unsigned char* psyms = this->get_view(symtabshdr.get_sh_offset(),
+ locsize);
+
+ this->local_values_.resize(loccount);
+
+ // Read the symbol names.
+ const unsigned int strtab_shndx = symtabshdr.get_sh_link();
+ off_t strtab_size;
+ const unsigned char* pnamesu = this->section_contents(strtab_shndx,
+ &strtab_size);
+ const char* pnames = reinterpret_cast<const char*>(pnamesu);
+
+ // Loop over the local symbols.
+
+ const std::vector<Map_to_output>& mo(this->map_to_output());
+ unsigned int shnum = this->shnum();
+ unsigned int count = 0;
+ // Skip the first, dummy, symbol.
+ psyms += sym_size;
+ for (unsigned int i = 1; i < loccount; ++i, psyms += sym_size)
+ {
+ elfcpp::Sym<size, big_endian> sym(psyms);
+
+ Symbol_value<size>& lv(this->local_values_[i]);
+
+ unsigned int shndx = sym.get_st_shndx();
+ lv.set_input_shndx(shndx);
+
+ if (shndx >= elfcpp::SHN_LORESERVE)
+ {
+ if (shndx == elfcpp::SHN_ABS)
+ lv.set_output_value(sym.get_st_value());
+ else
+ {
+ // FIXME: Handle SHN_XINDEX.
+ fprintf(stderr,
+ _("%s: %s: unknown section index %u "
+ "for local symbol %u\n"),
+ program_name, this->name().c_str(), shndx, i);
+ gold_exit(false);
+ }
+ }
+ else
+ {
+ if (shndx >= shnum)
+ {
+ fprintf(stderr,
+ _("%s: %s: local symbol %u section index %u "
+ "out of range\n"),
+ program_name, this->name().c_str(), i, shndx);
+ gold_exit(false);
+ }
+
+ Output_section* os = mo[shndx].output_section;
+
+ if (os == NULL)
+ {
+ lv.set_output_value(0);
+ lv.set_no_output_symtab_entry();
+ continue;
+ }
+
+ if (mo[shndx].offset == -1)
+ lv.set_input_value(sym.get_st_value());
+ else
+ lv.set_output_value(mo[shndx].output_section->address()
+ + mo[shndx].offset
+ + sym.get_st_value());
+ }
+
+ // Decide whether this symbol should go into the output file.
+
+ if (sym.get_st_type() == elfcpp::STT_SECTION)
+ {
+ lv.set_no_output_symtab_entry();
+ continue;
+ }
+
+ if (sym.get_st_name() >= strtab_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: local symbol %u section name "
+ "out of range: %u >= %u\n"),
+ program_name, this->name().c_str(),
+ i, sym.get_st_name(),
+ static_cast<unsigned int>(strtab_size));
+ gold_exit(false);
+ }
+
+ const char* name = pnames + sym.get_st_name();
+ pool->add(name, NULL);
+ lv.set_output_symtab_index(index);
+ ++index;
+ ++count;
+ }
+
+ this->output_local_symbol_count_ = count;
+
+ return index;
+}
+
+// Return the value of a local symbol defined in input section SHNDX,
+// with value VALUE, adding addend ADDEND. This handles SHF_MERGE
+// sections.
+template<int size, bool big_endian>
+typename elfcpp::Elf_types<size>::Elf_Addr
+Sized_relobj<size, big_endian>::local_value(unsigned int shndx,
+ Address value,
+ Address addend) const
+{
+ const std::vector<Map_to_output>& mo(this->map_to_output());
+ Output_section* os = mo[shndx].output_section;
+ if (os == NULL)
+ return addend;
+ gold_assert(mo[shndx].offset == -1);
+ return os->output_address(this, shndx, value + addend);
+}
+
+// Write out the local symbols.
+
+template<int size, bool big_endian>
+void
+Sized_relobj<size, big_endian>::write_local_symbols(Output_file* of,
+ const Stringpool* sympool)
+{
+ gold_assert(this->symtab_shndx_ != -1U);
+ if (this->symtab_shndx_ == 0)
+ {
+ // This object has no symbols. Weird but legal.
+ return;
+ }
+
+ // Read the symbol table section header.
+ const unsigned int symtab_shndx = this->symtab_shndx_;
+ typename This::Shdr symtabshdr(this,
+ this->elf_file_.section_header(symtab_shndx));
+ gold_assert(symtabshdr.get_sh_type() == elfcpp::SHT_SYMTAB);
+ const unsigned int loccount = this->local_symbol_count_;
+ gold_assert(loccount == symtabshdr.get_sh_info());
+
+ // Read the local symbols.
+ const int sym_size = This::sym_size;
+ off_t locsize = loccount * sym_size;
+ const unsigned char* psyms = this->get_view(symtabshdr.get_sh_offset(),
+ locsize);
+
+ // Read the symbol names.
+ const unsigned int strtab_shndx = symtabshdr.get_sh_link();
+ off_t strtab_size;
+ const unsigned char* pnamesu = this->section_contents(strtab_shndx,
+ &strtab_size);
+ const char* pnames = reinterpret_cast<const char*>(pnamesu);
+
+ // Get a view into the output file.
+ off_t output_size = this->output_local_symbol_count_ * sym_size;
+ unsigned char* oview = of->get_output_view(this->local_symbol_offset_,
+ output_size);
+
+ const std::vector<Map_to_output>& mo(this->map_to_output());
+
+ gold_assert(this->local_values_.size() == loccount);
+
+ unsigned char* ov = oview;
+ psyms += sym_size;
+ for (unsigned int i = 1; i < loccount; ++i, psyms += sym_size)
+ {
+ elfcpp::Sym<size, big_endian> isym(psyms);
+
+ if (!this->local_values_[i].needs_output_symtab_entry())
+ continue;
+
+ unsigned int st_shndx = isym.get_st_shndx();
+ if (st_shndx < elfcpp::SHN_LORESERVE)
+ {
+ gold_assert(st_shndx < mo.size());
+ if (mo[st_shndx].output_section == NULL)
+ continue;
+ st_shndx = mo[st_shndx].output_section->out_shndx();
+ }
+
+ elfcpp::Sym_write<size, big_endian> osym(ov);
+
+ gold_assert(isym.get_st_name() < strtab_size);
+ const char* name = pnames + isym.get_st_name();
+ osym.put_st_name(sympool->get_offset(name));
+ osym.put_st_value(this->local_values_[i].value(this, 0));
+ osym.put_st_size(isym.get_st_size());
+ osym.put_st_info(isym.get_st_info());
+ osym.put_st_other(isym.get_st_other());
+ osym.put_st_shndx(st_shndx);
+
+ ov += sym_size;
+ }
+
+ gold_assert(ov - oview == output_size);
+
+ of->write_output_view(this->local_symbol_offset_, output_size, oview);
+}
+
+// Input_objects methods.
+
+// Add a regular relocatable object to the list. Return false if this
+// object should be ignored.
+
+bool
+Input_objects::add_object(Object* obj)
+{
+ if (!obj->is_dynamic())
+ this->relobj_list_.push_back(static_cast<Relobj*>(obj));
+ else
+ {
+ // See if this is a duplicate SONAME.
+ Dynobj* dynobj = static_cast<Dynobj*>(obj);
+
+ std::pair<Unordered_set<std::string>::iterator, bool> ins =
+ this->sonames_.insert(dynobj->soname());
+ if (!ins.second)
+ {
+ // We have already seen a dynamic object with this soname.
+ return false;
+ }
+
+ this->dynobj_list_.push_back(dynobj);
+ }
+
+ Target* target = obj->target();
+ if (this->target_ == NULL)
+ this->target_ = target;
+ else if (this->target_ != target)
+ {
+ fprintf(stderr, "%s: %s: incompatible target\n",
+ program_name, obj->name().c_str());
+ gold_exit(false);
+ }
+
+ return true;
+}
+
+// Relocate_info methods.
+
+// Return a string describing the location of a relocation. This is
+// only used in error messages.
+
+template<int size, bool big_endian>
+std::string
+Relocate_info<size, big_endian>::location(size_t relnum, off_t) const
+{
+ std::string ret(this->object->name());
+ ret += ": reloc ";
+ char buf[100];
+ snprintf(buf, sizeof buf, "%zu", relnum);
+ ret += buf;
+ ret += " in reloc section ";
+ snprintf(buf, sizeof buf, "%u", this->reloc_shndx);
+ ret += buf;
+ ret += " (" + this->object->section_name(this->reloc_shndx);
+ ret += ") for section ";
+ snprintf(buf, sizeof buf, "%u", this->data_shndx);
+ ret += buf;
+ ret += " (" + this->object->section_name(this->data_shndx) + ")";
+ return ret;
+}
+
+} // End namespace gold.
+
+namespace
+{
+
+using namespace gold;
+
+// Read an ELF file with the header and return the appropriate
+// instance of Object.
+
+template<int size, bool big_endian>
+Object*
+make_elf_sized_object(const std::string& name, Input_file* input_file,
+ off_t offset, const elfcpp::Ehdr<size, big_endian>& ehdr)
+{
+ int et = ehdr.get_e_type();
+ if (et == elfcpp::ET_REL)
+ {
+ Sized_relobj<size, big_endian>* obj =
+ new Sized_relobj<size, big_endian>(name, input_file, offset, ehdr);
+ obj->setup(ehdr);
+ return obj;
+ }
+ else if (et == elfcpp::ET_DYN)
+ {
+ Sized_dynobj<size, big_endian>* obj =
+ new Sized_dynobj<size, big_endian>(name, input_file, offset, ehdr);
+ obj->setup(ehdr);
+ return obj;
+ }
+ else
+ {
+ fprintf(stderr, _("%s: %s: unsupported ELF file type %d\n"),
+ program_name, name.c_str(), et);
+ gold_exit(false);
+ }
+}
+
+} // End anonymous namespace.
+
+namespace gold
+{
+
+// Read an ELF file and return the appropriate instance of Object.
+
+Object*
+make_elf_object(const std::string& name, Input_file* input_file, off_t offset,
+ const unsigned char* p, off_t bytes)
+{
+ if (bytes < elfcpp::EI_NIDENT)
+ {
+ fprintf(stderr, _("%s: %s: ELF file too short\n"),
+ program_name, name.c_str());
+ gold_exit(false);
+ }
+
+ int v = p[elfcpp::EI_VERSION];
+ if (v != elfcpp::EV_CURRENT)
+ {
+ if (v == elfcpp::EV_NONE)
+ fprintf(stderr, _("%s: %s: invalid ELF version 0\n"),
+ program_name, name.c_str());
+ else
+ fprintf(stderr, _("%s: %s: unsupported ELF version %d\n"),
+ program_name, name.c_str(), v);
+ gold_exit(false);
+ }
+
+ int c = p[elfcpp::EI_CLASS];
+ if (c == elfcpp::ELFCLASSNONE)
+ {
+ fprintf(stderr, _("%s: %s: invalid ELF class 0\n"),
+ program_name, name.c_str());
+ gold_exit(false);
+ }
+ else if (c != elfcpp::ELFCLASS32
+ && c != elfcpp::ELFCLASS64)
+ {
+ fprintf(stderr, _("%s: %s: unsupported ELF class %d\n"),
+ program_name, name.c_str(), c);
+ gold_exit(false);
+ }
+
+ int d = p[elfcpp::EI_DATA];
+ if (d == elfcpp::ELFDATANONE)
+ {
+ fprintf(stderr, _("%s: %s: invalid ELF data encoding\n"),
+ program_name, name.c_str());
+ gold_exit(false);
+ }
+ else if (d != elfcpp::ELFDATA2LSB
+ && d != elfcpp::ELFDATA2MSB)
+ {
+ fprintf(stderr, _("%s: %s: unsupported ELF data encoding %d\n"),
+ program_name, name.c_str(), d);
+ gold_exit(false);
+ }
+
+ bool big_endian = d == elfcpp::ELFDATA2MSB;
+
+ if (c == elfcpp::ELFCLASS32)
+ {
+ if (bytes < elfcpp::Elf_sizes<32>::ehdr_size)
+ {
+ fprintf(stderr, _("%s: %s: ELF file too short\n"),
+ program_name, name.c_str());
+ gold_exit(false);
+ }
+ if (big_endian)
+ {
+ elfcpp::Ehdr<32, true> ehdr(p);
+ return make_elf_sized_object<32, true>(name, input_file,
+ offset, ehdr);
+ }
+ else
+ {
+ elfcpp::Ehdr<32, false> ehdr(p);
+ return make_elf_sized_object<32, false>(name, input_file,
+ offset, ehdr);
+ }
+ }
+ else
+ {
+ if (bytes < elfcpp::Elf_sizes<32>::ehdr_size)
+ {
+ fprintf(stderr, _("%s: %s: ELF file too short\n"),
+ program_name, name.c_str());
+ gold_exit(false);
+ }
+ if (big_endian)
+ {
+ elfcpp::Ehdr<64, true> ehdr(p);
+ return make_elf_sized_object<64, true>(name, input_file,
+ offset, ehdr);
+ }
+ else
+ {
+ elfcpp::Ehdr<64, false> ehdr(p);
+ return make_elf_sized_object<64, false>(name, input_file,
+ offset, ehdr);
+ }
+ }
+}
+
+// Instantiate the templates we need. We could use the configure
+// script to restrict this to only the ones for implemented targets.
+
+template
+class Sized_relobj<32, false>;
+
+template
+class Sized_relobj<32, true>;
+
+template
+class Sized_relobj<64, false>;
+
+template
+class Sized_relobj<64, true>;
+
+template
+struct Relocate_info<32, false>;
+
+template
+struct Relocate_info<32, true>;
+
+template
+struct Relocate_info<64, false>;
+
+template
+struct Relocate_info<64, true>;
+
+} // End namespace gold.
diff --git a/gold/object.h b/gold/object.h
new file mode 100644
index 000000000000..2027f8e97dff
--- /dev/null
+++ b/gold/object.h
@@ -0,0 +1,820 @@
+// object.h -- support for an object file for linking in gold -*- C++ -*-
+
+#ifndef GOLD_OBJECT_H
+#define GOLD_OBJECT_H
+
+#include <string>
+#include <vector>
+
+#include "elfcpp.h"
+#include "elfcpp_file.h"
+#include "fileread.h"
+#include "target.h"
+
+namespace gold
+{
+
+class General_options;
+class Layout;
+class Output_section;
+class Output_file;
+class Dynobj;
+
+template<typename Stringpool_char>
+class Stringpool_template;
+
+// Data to pass from read_symbols() to add_symbols().
+
+struct Read_symbols_data
+{
+ // Section headers.
+ File_view* section_headers;
+ // Section names.
+ File_view* section_names;
+ // Size of section name data in bytes.
+ off_t section_names_size;
+ // Symbol data.
+ File_view* symbols;
+ // Size of symbol data in bytes.
+ off_t symbols_size;
+ // Symbol names.
+ File_view* symbol_names;
+ // Size of symbol name data in bytes.
+ off_t symbol_names_size;
+
+ // Version information. This is only used on dynamic objects.
+ // Version symbol data (from SHT_GNU_versym section).
+ File_view* versym;
+ off_t versym_size;
+ // Version definition data (from SHT_GNU_verdef section).
+ File_view* verdef;
+ off_t verdef_size;
+ unsigned int verdef_info;
+ // Needed version data (from SHT_GNU_verneed section).
+ File_view* verneed;
+ off_t verneed_size;
+ unsigned int verneed_info;
+};
+
+// Data about a single relocation section. This is read in
+// read_relocs and processed in scan_relocs.
+
+struct Section_relocs
+{
+ // Index of reloc section.
+ unsigned int reloc_shndx;
+ // Index of section that relocs apply to.
+ unsigned int data_shndx;
+ // Contents of reloc section.
+ File_view* contents;
+ // Reloc section type.
+ unsigned int sh_type;
+ // Number of reloc entries.
+ size_t reloc_count;
+};
+
+// Relocations in an object file. This is read in read_relocs and
+// processed in scan_relocs.
+
+struct Read_relocs_data
+{
+ typedef std::vector<Section_relocs> Relocs_list;
+ // The relocations.
+ Relocs_list relocs;
+ // The local symbols.
+ File_view* local_symbols;
+};
+
+// Object is an abstract base class which represents either a 32-bit
+// or a 64-bit input object. This can be a regular object file
+// (ET_REL) or a shared object (ET_DYN).
+
+class Object
+{
+ public:
+ // NAME is the name of the object as we would report it to the user
+ // (e.g., libfoo.a(bar.o) if this is in an archive. INPUT_FILE is
+ // used to read the file. OFFSET is the offset within the input
+ // file--0 for a .o or .so file, something else for a .a file.
+ Object(const std::string& name, Input_file* input_file, bool is_dynamic,
+ off_t offset = 0)
+ : name_(name), input_file_(input_file), offset_(offset), shnum_(-1U),
+ is_dynamic_(is_dynamic), target_(NULL)
+ { }
+
+ virtual ~Object()
+ { }
+
+ // Return the name of the object as we would report it to the tuser.
+ const std::string&
+ name() const
+ { return this->name_; }
+
+ // Return whether this is a dynamic object.
+ bool
+ is_dynamic() const
+ { return this->is_dynamic_; }
+
+ // Return the target structure associated with this object.
+ Target*
+ target() const
+ { return this->target_; }
+
+ // Lock the underlying file.
+ void
+ lock()
+ { this->input_file_->file().lock(); }
+
+ // Unlock the underlying file.
+ void
+ unlock()
+ { this->input_file_->file().unlock(); }
+
+ // Return whether the underlying file is locked.
+ bool
+ is_locked() const
+ { return this->input_file_->file().is_locked(); }
+
+ // Return the sized target structure associated with this object.
+ // This is like the target method but it returns a pointer of
+ // appropriate checked type.
+ template<int size, bool big_endian>
+ Sized_target<size, big_endian>*
+ sized_target(ACCEPT_SIZE_ENDIAN_ONLY);
+
+ // Get the number of sections.
+ unsigned int
+ shnum() const
+ { return this->shnum_; }
+
+ // Return a view of the contents of a section. Set *PLEN to the
+ // size.
+ const unsigned char*
+ section_contents(unsigned int shndx, off_t* plen);
+
+ // Return the name of a section given a section index. This is only
+ // used for error messages.
+ std::string
+ section_name(unsigned int shndx)
+ { return this->do_section_name(shndx); }
+
+ // Return the section flags given a section index.
+ uint64_t
+ section_flags(unsigned int shndx)
+ { return this->do_section_flags(shndx); }
+
+ // Read the symbol information.
+ void
+ read_symbols(Read_symbols_data* sd)
+ { return this->do_read_symbols(sd); }
+
+ // Pass sections which should be included in the link to the Layout
+ // object, and record where the sections go in the output file.
+ void
+ layout(const General_options& options, Symbol_table* symtab,
+ Layout* layout, Read_symbols_data* sd)
+ { this->do_layout(options, symtab, layout, sd); }
+
+ // Add symbol information to the global symbol table.
+ void
+ add_symbols(Symbol_table* symtab, Read_symbols_data* sd)
+ { this->do_add_symbols(symtab, sd); }
+
+ // Functions and types for the elfcpp::Elf_file interface. This
+ // permit us to use Object as the File template parameter for
+ // elfcpp::Elf_file.
+
+ // The View class is returned by view. It must support a single
+ // method, data(). This is trivial, because get_view does what we
+ // need.
+ class View
+ {
+ public:
+ View(const unsigned char* p)
+ : p_(p)
+ { }
+
+ const unsigned char*
+ data() const
+ { return this->p_; }
+
+ private:
+ const unsigned char* p_;
+ };
+
+ // Return a View.
+ View
+ view(off_t file_offset, off_t data_size)
+ { return View(this->get_view(file_offset, data_size)); }
+
+ // Report an error.
+ void
+ error(const char* format, ...) ATTRIBUTE_PRINTF_2;
+
+ // A location in the file.
+ struct Location
+ {
+ off_t file_offset;
+ off_t data_size;
+
+ Location(off_t fo, off_t ds)
+ : file_offset(fo), data_size(ds)
+ { }
+ };
+
+ // Get a View given a Location.
+ View view(Location loc)
+ { return View(this->get_view(loc.file_offset, loc.data_size)); }
+
+ protected:
+ // Read the symbols--implemented by child class.
+ virtual void
+ do_read_symbols(Read_symbols_data*) = 0;
+
+ // Lay out sections--implemented by child class.
+ virtual void
+ do_layout(const General_options&, Symbol_table*, Layout*,
+ Read_symbols_data*) = 0;
+
+ // Add symbol information to the global symbol table--implemented by
+ // child class.
+ virtual void
+ do_add_symbols(Symbol_table*, Read_symbols_data*) = 0;
+
+ // Return the location of the contents of a section. Implemented by
+ // child class.
+ virtual Location
+ do_section_contents(unsigned int shndx) = 0;
+
+ // Get the name of a section--implemented by child class.
+ virtual std::string
+ do_section_name(unsigned int shndx) = 0;
+
+ // Get section flags--implemented by child class.
+ virtual uint64_t
+ do_section_flags(unsigned int shndx) = 0;
+
+ // Get the file.
+ Input_file*
+ input_file() const
+ { return this->input_file_; }
+
+ // Get the offset into the file.
+ off_t
+ offset() const
+ { return this->offset_; }
+
+ // Get a view into the underlying file.
+ const unsigned char*
+ get_view(off_t start, off_t size)
+ { return this->input_file_->file().get_view(start + this->offset_, size); }
+
+ // Get a lasting view into the underlying file.
+ File_view*
+ get_lasting_view(off_t start, off_t size)
+ {
+ return this->input_file_->file().get_lasting_view(start + this->offset_,
+ size);
+ }
+
+ // Read data from the underlying file.
+ void
+ read(off_t start, off_t size, void* p)
+ { this->input_file_->file().read(start + this->offset_, size, p); }
+
+ // Set the target.
+ void
+ set_target(int machine, int size, bool big_endian, int osabi,
+ int abiversion);
+
+ // Set the number of sections.
+ void
+ set_shnum(int shnum)
+ { this->shnum_ = shnum; }
+
+ // Functions used by both Sized_relobj and Sized_dynobj.
+
+ // Read the section data into a Read_symbols_data object.
+ template<int size, bool big_endian>
+ void
+ read_section_data(elfcpp::Elf_file<size, big_endian, Object>*,
+ Read_symbols_data*);
+
+ // If NAME is the name of a special .gnu.warning section, arrange
+ // for the warning to be issued. SHNDX is the section index.
+ // Return whether it is a warning section.
+ bool
+ handle_gnu_warning_section(const char* name, unsigned int shndx,
+ Symbol_table*);
+
+ private:
+ // This class may not be copied.
+ Object(const Object&);
+ Object& operator=(const Object&);
+
+ // Name of object as printed to user.
+ std::string name_;
+ // For reading the file.
+ Input_file* input_file_;
+ // Offset within the file--0 for an object file, non-0 for an
+ // archive.
+ off_t offset_;
+ // Number of input sections.
+ unsigned int shnum_;
+ // Whether this is a dynamic object.
+ bool is_dynamic_;
+ // Target functions--may be NULL if the target is not known.
+ Target* target_;
+};
+
+// Implement sized_target inline for efficiency. This approach breaks
+// static type checking, but is made safe using asserts.
+
+template<int size, bool big_endian>
+inline Sized_target<size, big_endian>*
+Object::sized_target(ACCEPT_SIZE_ENDIAN_ONLY)
+{
+ gold_assert(this->target_->get_size() == size);
+ gold_assert(this->target_->is_big_endian() ? big_endian : !big_endian);
+ return static_cast<Sized_target<size, big_endian>*>(this->target_);
+}
+
+// A regular object (ET_REL). This is an abstract base class itself.
+// The implementation is the template class Sized_relobj.
+
+class Relobj : public Object
+{
+ public:
+ Relobj(const std::string& name, Input_file* input_file, off_t offset = 0)
+ : Object(name, input_file, false, offset)
+ { }
+
+ // Read the relocs.
+ void
+ read_relocs(Read_relocs_data* rd)
+ { return this->do_read_relocs(rd); }
+
+ // Scan the relocs and adjust the symbol table.
+ void
+ scan_relocs(const General_options& options, Symbol_table* symtab,
+ Layout* layout, Read_relocs_data* rd)
+ { return this->do_scan_relocs(options, symtab, layout, rd); }
+
+ // Initial local symbol processing: set the offset where local
+ // symbol information will be stored; add local symbol names to
+ // *POOL; return the new local symbol index.
+ unsigned int
+ finalize_local_symbols(unsigned int index, off_t off,
+ Stringpool_template<char>* pool)
+ { return this->do_finalize_local_symbols(index, off, pool); }
+
+ // Relocate the input sections and write out the local symbols.
+ void
+ relocate(const General_options& options, const Symbol_table* symtab,
+ const Layout* layout, Output_file* of)
+ { return this->do_relocate(options, symtab, layout, of); }
+
+ // Return whether an input section is being included in the link.
+ bool
+ is_section_included(unsigned int shndx) const
+ {
+ gold_assert(shndx < this->map_to_output_.size());
+ return this->map_to_output_[shndx].output_section != NULL;
+ }
+
+ // Given a section index, return the corresponding Output_section
+ // (which will be NULL if the section is not included in the link)
+ // and set *POFF to the offset within that section.
+ inline Output_section*
+ output_section(unsigned int shndx, off_t* poff) const;
+
+ // Set the offset of an input section within its output section.
+ void
+ set_section_offset(unsigned int shndx, off_t off)
+ {
+ gold_assert(shndx < this->map_to_output_.size());
+ this->map_to_output_[shndx].offset = off;
+ }
+
+ protected:
+ // What we need to know to map an input section to an output
+ // section. We keep an array of these, one for each input section,
+ // indexed by the input section number.
+ struct Map_to_output
+ {
+ // The output section. This is NULL if the input section is to be
+ // discarded.
+ Output_section* output_section;
+ // The offset within the output section. This is -1 if the
+ // section requires special handling.
+ off_t offset;
+ };
+
+ // Read the relocs--implemented by child class.
+ virtual void
+ do_read_relocs(Read_relocs_data*) = 0;
+
+ // Scan the relocs--implemented by child class.
+ virtual void
+ do_scan_relocs(const General_options&, Symbol_table*, Layout*,
+ Read_relocs_data*) = 0;
+
+ // Finalize local symbols--implemented by child class.
+ virtual unsigned int
+ do_finalize_local_symbols(unsigned int, off_t,
+ Stringpool_template<char>*) = 0;
+
+ // Relocate the input sections and write out the local
+ // symbols--implemented by child class.
+ virtual void
+ do_relocate(const General_options& options, const Symbol_table* symtab,
+ const Layout*, Output_file* of) = 0;
+
+ // Return the vector mapping input sections to output sections.
+ std::vector<Map_to_output>&
+ map_to_output()
+ { return this->map_to_output_; }
+
+ const std::vector<Map_to_output>&
+ map_to_output() const
+ { return this->map_to_output_; }
+
+ private:
+ // Mapping from input sections to output section.
+ std::vector<Map_to_output> map_to_output_;
+};
+
+// Implement Object::output_section inline for efficiency.
+inline Output_section*
+Relobj::output_section(unsigned int shndx, off_t* poff) const
+{
+ gold_assert(shndx < this->map_to_output_.size());
+ const Map_to_output& mo(this->map_to_output_[shndx]);
+ *poff = mo.offset;
+ return mo.output_section;
+}
+
+// This POD class is holds the value of a symbol. This is used for
+// local symbols, and for all symbols during relocation processing.
+// In order to process relocs we need to be able to handle SHF_MERGE
+// sections correctly.
+
+template<int size>
+class Symbol_value
+{
+ public:
+ typedef typename elfcpp::Elf_types<size>::Elf_Addr Value;
+
+ Symbol_value()
+ : output_symtab_index_(0), input_shndx_(0), needs_output_address_(false),
+ value_(0)
+ { }
+
+ // Get the value of this symbol. OBJECT is the object in which this
+ // symbol is defined, and ADDEND is an addend to add to the value.
+ template<bool big_endian>
+ Value
+ value(const Sized_relobj<size, big_endian>* object, Value addend) const
+ {
+ if (!this->needs_output_address_)
+ return this->value_ + addend;
+ return object->local_value(this->input_shndx_, this->value_, addend);
+ }
+
+ // Set the value of this symbol in the output symbol table.
+ void
+ set_output_value(Value value)
+ {
+ this->value_ = value;
+ this->needs_output_address_ = false;
+ }
+
+ // If this symbol is mapped to an output section which requires
+ // special handling to determine the output value, we store the
+ // value of the symbol in the input file. This is used for
+ // SHF_MERGE sections.
+ void
+ set_input_value(Value value)
+ {
+ this->value_ = value;
+ this->needs_output_address_ = true;
+ }
+
+ // Return whether this symbol should go into the output symbol
+ // table.
+ bool
+ needs_output_symtab_entry() const
+ {
+ gold_assert(this->output_symtab_index_ != 0);
+ return this->output_symtab_index_ != -1U;
+ }
+
+ // Return the index in the output symbol table.
+ unsigned int
+ output_symtab_index() const
+ {
+ gold_assert(this->output_symtab_index_ != 0);
+ return this->output_symtab_index_;
+ }
+
+ // Set the index in the output symbol table.
+ void
+ set_output_symtab_index(unsigned int i)
+ {
+ gold_assert(this->output_symtab_index_ == 0);
+ this->output_symtab_index_ = i;
+ }
+
+ // Record that this symbol should not go into the output symbol
+ // table.
+ void
+ set_no_output_symtab_entry()
+ {
+ gold_assert(this->output_symtab_index_ == 0);
+ this->output_symtab_index_ = -1U;
+ }
+
+ // Set the index of the input section in the input file.
+ void
+ set_input_shndx(unsigned int i)
+ { this->input_shndx_ = i; }
+
+ private:
+ // The index of this local symbol in the output symbol table. This
+ // will be -1 if the symbol should not go into the symbol table.
+ unsigned int output_symtab_index_;
+ // The section index in the input file in which this symbol is
+ // defined.
+ unsigned int input_shndx_ : 31;
+ // Whether getting the value of this symbol requires calling an
+ // Output_section method. For example, this will be true of a
+ // STT_SECTION symbol in a SHF_MERGE section.
+ bool needs_output_address_ : 1;
+ // The value of the symbol. If !needs_output_address_, this is the
+ // value in the output file. If needs_output_address_, this is the
+ // value in the input file.
+ Value value_;
+};
+
+// A regular object file. This is size and endian specific.
+
+template<int size, bool big_endian>
+class Sized_relobj : public Relobj
+{
+ public:
+ typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
+ typedef std::vector<Symbol_value<size> > Local_values;
+
+ Sized_relobj(const std::string& name, Input_file* input_file, off_t offset,
+ const typename elfcpp::Ehdr<size, big_endian>&);
+
+ ~Sized_relobj();
+
+ // Set up the object file based on the ELF header.
+ void
+ setup(const typename elfcpp::Ehdr<size, big_endian>&);
+
+ // Return the index of local symbol SYM in the ordinary symbol
+ // table. A value of -1U means that the symbol is not being output.
+ unsigned int
+ symtab_index(unsigned int sym) const
+ {
+ gold_assert(sym < this->local_values_.size());
+ return this->local_values_[sym].output_symtab_index();
+ }
+
+ // Read the symbols.
+ void
+ do_read_symbols(Read_symbols_data*);
+
+ // Lay out the input sections.
+ void
+ do_layout(const General_options&, Symbol_table*, Layout*,
+ Read_symbols_data*);
+
+ // Add the symbols to the symbol table.
+ void
+ do_add_symbols(Symbol_table*, Read_symbols_data*);
+
+ // Read the relocs.
+ void
+ do_read_relocs(Read_relocs_data*);
+
+ // Scan the relocs and adjust the symbol table.
+ void
+ do_scan_relocs(const General_options&, Symbol_table*, Layout*,
+ Read_relocs_data*);
+
+ // Finalize the local symbols.
+ unsigned int
+ do_finalize_local_symbols(unsigned int, off_t,
+ Stringpool_template<char>*);
+
+ // Relocate the input sections and write out the local symbols.
+ void
+ do_relocate(const General_options& options, const Symbol_table* symtab,
+ const Layout*, Output_file* of);
+
+ // Get the name of a section.
+ std::string
+ do_section_name(unsigned int shndx)
+ { return this->elf_file_.section_name(shndx); }
+
+ // Return the location of the contents of a section.
+ Object::Location
+ do_section_contents(unsigned int shndx)
+ { return this->elf_file_.section_contents(shndx); }
+
+ // Return section flags.
+ uint64_t
+ do_section_flags(unsigned int shndx)
+ { return this->elf_file_.section_flags(shndx); }
+
+ // Return the appropriate Sized_target structure.
+ Sized_target<size, big_endian>*
+ sized_target()
+ {
+ return this->Object::sized_target
+ SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
+ SELECT_SIZE_ENDIAN_ONLY(size, big_endian));
+ }
+
+ // Return the value of a local symbol define in input section SHNDX,
+ // with value VALUE, adding addend ADDEND. This handles SHF_MERGE
+ // sections.
+ Address
+ local_value(unsigned int shndx, Address value, Address addend) const;
+
+ private:
+ // For convenience.
+ typedef Sized_relobj<size, big_endian> This;
+ static const int ehdr_size = elfcpp::Elf_sizes<size>::ehdr_size;
+ static const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
+ static const int sym_size = elfcpp::Elf_sizes<size>::sym_size;
+ typedef elfcpp::Shdr<size, big_endian> Shdr;
+
+ // Find the SHT_SYMTAB section, given the section headers.
+ void
+ find_symtab(const unsigned char* pshdrs);
+
+ // Whether to include a section group in the link.
+ bool
+ include_section_group(Layout*, unsigned int,
+ const elfcpp::Shdr<size, big_endian>&,
+ std::vector<bool>*);
+
+ // Whether to include a linkonce section in the link.
+ bool
+ include_linkonce_section(Layout*, const char*,
+ const elfcpp::Shdr<size, big_endian>&);
+
+ // Views and sizes when relocating.
+ struct View_size
+ {
+ unsigned char* view;
+ typename elfcpp::Elf_types<size>::Elf_Addr address;
+ off_t offset;
+ off_t view_size;
+ };
+
+ typedef std::vector<View_size> Views;
+
+ // Write section data to the output file. Record the views and
+ // sizes in VIEWS for use when relocating.
+ void
+ write_sections(const unsigned char* pshdrs, Output_file*, Views*);
+
+ // Relocate the sections in the output file.
+ void
+ relocate_sections(const General_options& options, const Symbol_table*,
+ const Layout*, const unsigned char* pshdrs, Views*);
+
+ // Write out the local symbols.
+ void
+ write_local_symbols(Output_file*,
+ const Stringpool_template<char>*);
+
+ // General access to the ELF file.
+ elfcpp::Elf_file<size, big_endian, Object> elf_file_;
+ // Index of SHT_SYMTAB section.
+ unsigned int symtab_shndx_;
+ // The number of local symbols.
+ unsigned int local_symbol_count_;
+ // The number of local symbols which go into the output file.
+ unsigned int output_local_symbol_count_;
+ // The entries in the symbol table for the external symbols.
+ Symbol** symbols_;
+ // File offset for local symbols.
+ off_t local_symbol_offset_;
+ // Values of local symbols.
+ Local_values local_values_;
+};
+
+// A class to manage the list of all objects.
+
+class Input_objects
+{
+ public:
+ Input_objects()
+ : relobj_list_(), dynobj_list_(), target_(NULL), sonames_()
+ { }
+
+ // The type of the list of input relocateable objects.
+ typedef std::vector<Relobj*> Relobj_list;
+ typedef Relobj_list::const_iterator Relobj_iterator;
+
+ // The type of the list of input dynamic objects.
+ typedef std::vector<Dynobj*> Dynobj_list;
+ typedef Dynobj_list::const_iterator Dynobj_iterator;
+
+ // Add an object to the list. Return true if all is well, or false
+ // if this object should be ignored.
+ bool
+ add_object(Object*);
+
+ // Get the target we should use for the output file.
+ Target*
+ target() const
+ { return this->target_; }
+
+ // Iterate over all regular objects.
+
+ Relobj_iterator
+ relobj_begin() const
+ { return this->relobj_list_.begin(); }
+
+ Relobj_iterator
+ relobj_end() const
+ { return this->relobj_list_.end(); }
+
+ // Iterate over all dynamic objects.
+
+ Dynobj_iterator
+ dynobj_begin() const
+ { return this->dynobj_list_.begin(); }
+
+ Dynobj_iterator
+ dynobj_end() const
+ { return this->dynobj_list_.end(); }
+
+ // Return whether we have seen any dynamic objects.
+ bool
+ any_dynamic() const
+ { return !this->dynobj_list_.empty(); }
+
+ private:
+ Input_objects(const Input_objects&);
+ Input_objects& operator=(const Input_objects&);
+
+ // The list of ordinary objects included in the link.
+ Relobj_list relobj_list_;
+ // The list of dynamic objects included in the link.
+ Dynobj_list dynobj_list_;
+ // The target.
+ Target* target_;
+ // SONAMEs that we have seen.
+ Unordered_set<std::string> sonames_;
+};
+
+// Some of the information we pass to the relocation routines. We
+// group this together to avoid passing a dozen different arguments.
+
+template<int size, bool big_endian>
+struct Relocate_info
+{
+ // Command line options.
+ const General_options* options;
+ // Symbol table.
+ const Symbol_table* symtab;
+ // Layout.
+ const Layout* layout;
+ // Object being relocated.
+ Sized_relobj<size, big_endian>* object;
+ // Number of local symbols.
+ unsigned int local_symbol_count;
+ // Values of local symbols.
+ const typename Sized_relobj<size, big_endian>::Local_values* local_values;
+ // Global symbols.
+ const Symbol* const * symbols;
+ // Section index of relocation section.
+ unsigned int reloc_shndx;
+ // Section index of section being relocated.
+ unsigned int data_shndx;
+
+ // Return a string showing the location of a relocation. This is
+ // only used for error messages.
+ std::string
+ location(size_t relnum, off_t reloffset) const;
+};
+
+// Return an Object appropriate for the input file. P is BYTES long,
+// and holds the ELF header.
+
+extern Object*
+make_elf_object(const std::string& name, Input_file*,
+ off_t offset, const unsigned char* p,
+ off_t bytes);
+
+} // end namespace gold
+
+#endif // !defined(GOLD_OBJECT_H)
diff --git a/gold/options.cc b/gold/options.cc
new file mode 100644
index 000000000000..b8339e8a6253
--- /dev/null
+++ b/gold/options.cc
@@ -0,0 +1,579 @@
+// options.c -- handle command line options for gold
+
+#include <iostream>
+
+#include "gold.h"
+#include "options.h"
+
+namespace gold
+{
+
+// The information we keep for a single command line option.
+
+struct options::One_option
+{
+ // The single character option name, or '\0' if this is only a long
+ // option.
+ char short_option;
+
+ // The long option name, or NULL if this is only a short option.
+ const char* long_option;
+
+ // Description of the option for --help output, or NULL if there is none.
+ const char* doc;
+
+ // How to print the option name in --help output, or NULL to use the
+ // default.
+ const char* help_output;
+
+ // Long option dash control. This is ignored if long_option is
+ // NULL.
+ enum
+ {
+ // Long option normally takes one dash; two dashes are also
+ // accepted.
+ ONE_DASH,
+ // Long option normally takes two dashes; one dash is also
+ // accepted.
+ TWO_DASHES,
+ // Long option always takes two dashes.
+ EXACTLY_TWO_DASHES
+ } dash;
+
+ // Function for special handling, or NULL. Returns the number of
+ // arguments to skip. This will normally be at least 1, but it may
+ // be 0 if this function changes *argv. ARG points to the location
+ // in *ARGV where the option starts, which may be helpful for a
+ // short option.
+ int (*special)(int argc, char** argv, char *arg, Command_line*);
+
+ // If this is a position independent option which does not take an
+ // argument, this is the member function to call to record it.
+ void (General_options::*general_noarg)();
+
+ // If this is a position independent function which takes an
+ // argument, this is the member function to call to record it.
+ void (General_options::*general_arg)(const char*);
+
+ // If this is a position dependent option which does not take an
+ // argument, this is the member function to call to record it.
+ void (Position_dependent_options::*dependent_noarg)();
+
+ // If this is a position dependent option which takes an argument,
+ // this is the member function to record it.
+ void (Position_dependent_options::*dependent_arg)(const char*);
+
+ // Return whether this option takes an argument.
+ bool
+ takes_argument() const
+ { return this->general_arg != NULL || this->dependent_arg != NULL; }
+};
+
+class options::Command_line_options
+{
+ public:
+ static const One_option options[];
+ static const int options_size;
+};
+
+} // End namespace gold.
+
+namespace
+{
+
+// Handle the special -l option, which adds an input file.
+
+int
+library(int argc, char** argv, char* arg, gold::Command_line* cmdline)
+{
+ return cmdline->process_l_option(argc, argv, arg);
+}
+
+// Handle the special --start-group option.
+
+int
+start_group(int, char**, char* arg, gold::Command_line* cmdline)
+{
+ cmdline->start_group(arg);
+ return 1;
+}
+
+// Handle the special --end-group option.
+
+int
+end_group(int, char**, char* arg, gold::Command_line* cmdline)
+{
+ cmdline->end_group(arg);
+ return 1;
+}
+
+// Report usage information for ld --help, and exit.
+
+int
+help(int, char**, char*, gold::Command_line*)
+{
+ printf(_("Usage: %s [options] file...\nOptions:\n"), gold::program_name);
+
+ const int options_size = gold::options::Command_line_options::options_size;
+ const gold::options::One_option* options =
+ gold::options::Command_line_options::options;
+ for (int i = 0; i < options_size; ++i)
+ {
+ if (options[i].doc == NULL)
+ continue;
+
+ printf(" ");
+ int len = 2;
+ bool comma = false;
+
+ int j = i;
+ do
+ {
+ if (options[j].help_output != NULL)
+ {
+ if (comma)
+ {
+ printf(", ");
+ len += 2;
+ }
+ printf(options[j].help_output);
+ len += std::strlen(options[i].help_output);
+ }
+ else
+ {
+ if (options[j].short_option != '\0')
+ {
+ if (comma)
+ {
+ printf(", ");
+ len += 2;
+ }
+ printf("-%c", options[j].short_option);
+ len += 2;
+ }
+
+ if (options[j].long_option != NULL)
+ {
+ if (comma)
+ {
+ printf(", ");
+ len += 2;
+ }
+ if (options[j].dash == gold::options::One_option::ONE_DASH)
+ {
+ printf("-");
+ ++len;
+ }
+ else
+ {
+ printf("--");
+ len += 2;
+ }
+ printf("%s", options[j].long_option);
+ len += std::strlen(options[j].long_option);
+ }
+ }
+ ++j;
+ }
+ while (j < options_size && options[j].doc == NULL);
+
+ if (len > 30)
+ {
+ printf("\n");
+ len = 0;
+ }
+ for (; len < 30; ++len)
+ std::putchar(' ');
+
+ std::puts(options[i].doc);
+ }
+
+ gold::gold_exit(true);
+
+ return 0;
+}
+
+} // End anonymous namespace.
+
+namespace gold
+{
+
+// Helper macros used to specify the options. We could also do this
+// using constructors, but then g++ would generate code to initialize
+// the array. We want the array to be initialized statically so that
+// we get better startup time.
+
+#define GENERAL_NOARG(short_option, long_option, doc, help, dash, func) \
+ { short_option, long_option, doc, help, options::One_option::dash, \
+ NULL, func, NULL, NULL, NULL }
+#define GENERAL_ARG(short_option, long_option, doc, help, dash, func) \
+ { short_option, long_option, doc, help, options::One_option::dash, \
+ NULL, NULL, func, NULL, NULL }
+#define POSDEP_NOARG(short_option, long_option, doc, help, dash, func) \
+ { short_option, long_option, doc, help, options::One_option::dash, \
+ NULL, NULL, NULL, func, NULL }
+#define POSDEP_ARG(short_option, long_option, doc, help, dash, func) \
+ { short_option, long_option, doc, help, options::One_option::dash, \
+ NULL, NULL, NULL, NULL, func }
+#define SPECIAL(short_option, long_option, doc, help, dash, func) \
+ { short_option, long_option, doc, help, options::One_option::dash, \
+ func, NULL, NULL, NULL, NULL }
+
+// Here is the actual list of options which we accept.
+
+const options::One_option
+options::Command_line_options::options[] =
+{
+ SPECIAL('l', "library", N_("Search for library LIBNAME"),
+ N_("-lLIBNAME --library LIBNAME"), TWO_DASHES,
+ &library),
+ SPECIAL('(', "start-group", N_("Start a library search group"), NULL,
+ TWO_DASHES, &start_group),
+ SPECIAL(')', "end-group", N_("End a library search group"), NULL,
+ TWO_DASHES, &end_group),
+ GENERAL_ARG('I', "dynamic-linker", N_("Set dynamic linker path"),
+ N_("-I PROGRAM, --dynamic-linker PROGRAM"), TWO_DASHES,
+ &General_options::set_dynamic_linker),
+ GENERAL_ARG('L', "library-path", N_("Add directory to search path"),
+ N_("-L DIR, --library-path DIR"), TWO_DASHES,
+ &General_options::add_to_search_path),
+ GENERAL_ARG('m', NULL, N_("Ignored for compatibility"), NULL, ONE_DASH,
+ &General_options::ignore),
+ GENERAL_ARG('o', "output", N_("Set output file name"),
+ N_("-o FILE, --output FILE"), TWO_DASHES,
+ &General_options::set_output_file_name),
+ GENERAL_NOARG('r', NULL, N_("Generate relocatable output"), NULL,
+ ONE_DASH, &General_options::set_relocatable),
+ GENERAL_NOARG('\0', "shared", N_("Generate shared library"),
+ NULL, ONE_DASH, &General_options::set_shared),
+ GENERAL_NOARG('\0', "static", N_("Do not link against shared libraries"),
+ NULL, ONE_DASH, &General_options::set_static),
+ POSDEP_NOARG('\0', "as-needed",
+ N_("Only set DT_NEEDED for following dynamic libs if used"),
+ NULL, TWO_DASHES, &Position_dependent_options::set_as_needed),
+ POSDEP_NOARG('\0', "no-as-needed",
+ N_("Always DT_NEEDED for following dynamic libs (default)"),
+ NULL, TWO_DASHES, &Position_dependent_options::clear_as_needed),
+ SPECIAL('\0', "help", N_("Report usage information"), NULL,
+ TWO_DASHES, &help)
+};
+
+const int options::Command_line_options::options_size =
+ sizeof (options) / sizeof (options[0]);
+
+// The default values for the general options.
+
+General_options::General_options()
+ : dynamic_linker_(NULL),
+ search_path_(),
+ output_file_name_("a.out"),
+ is_relocatable_(false),
+ is_shared_(false),
+ is_static_(false)
+{
+}
+
+// The default values for the position dependent options.
+
+Position_dependent_options::Position_dependent_options()
+ : do_static_search_(false)
+{
+}
+
+// Input_arguments methods.
+
+// Add a file to the list.
+
+void
+Input_arguments::add_file(const Input_file_argument& file)
+{
+ if (!this->in_group_)
+ this->input_argument_list_.push_back(Input_argument(file));
+ else
+ {
+ gold_assert(!this->input_argument_list_.empty());
+ gold_assert(this->input_argument_list_.back().is_group());
+ this->input_argument_list_.back().group()->add_file(file);
+ }
+}
+
+// Start a group.
+
+void
+Input_arguments::start_group()
+{
+ gold_assert(!this->in_group_);
+ Input_file_group* group = new Input_file_group();
+ this->input_argument_list_.push_back(Input_argument(group));
+ this->in_group_ = true;
+}
+
+// End a group.
+
+void
+Input_arguments::end_group()
+{
+ gold_assert(this->in_group_);
+ this->in_group_ = false;
+}
+
+// Command_line options.
+
+Command_line::Command_line()
+ : options_(), position_options_(), inputs_()
+{
+}
+
+// Process the command line options.
+
+void
+Command_line::process(int argc, char** argv)
+{
+ const int options_size = options::Command_line_options::options_size;
+ const options::One_option* options =
+ options::Command_line_options::options;
+ bool no_more_options = false;
+ int i = 0;
+ while (i < argc)
+ {
+ if (argv[i][0] != '-' || no_more_options)
+ {
+ this->add_file(argv[i], false);
+ ++i;
+ continue;
+ }
+
+ // Option starting with '-'.
+ int dashes = 1;
+ if (argv[i][1] == '-')
+ {
+ dashes = 2;
+ if (argv[i][2] == '\0')
+ {
+ no_more_options = true;
+ continue;
+ }
+ }
+
+ // Look for a long option match.
+ char* opt = argv[i] + dashes;
+ char first = opt[0];
+ int skiparg = 0;
+ char* arg = strchr(opt, '=');
+ if (arg != NULL)
+ *arg = '\0';
+ else if (i + 1 < argc)
+ {
+ arg = argv[i + 1];
+ skiparg = 1;
+ }
+
+ int j;
+ for (j = 0; j < options_size; ++j)
+ {
+ if (options[j].long_option != NULL
+ && (dashes == 2
+ || (options[j].dash
+ != options::One_option::EXACTLY_TWO_DASHES))
+ && first == options[j].long_option[0]
+ && strcmp(opt, options[j].long_option) == 0)
+ {
+ if (options[j].special)
+ i += options[j].special(argc - 1, argv + i, opt, this);
+ else
+ {
+ if (!options[j].takes_argument())
+ {
+ arg = NULL;
+ skiparg = 0;
+ }
+ else
+ {
+ if (arg == NULL)
+ this->usage(_("missing argument"), argv[i]);
+ }
+ this->apply_option(options[j], arg);
+ i += skiparg + 1;
+ }
+ break;
+ }
+ }
+ if (j < options_size)
+ continue;
+
+ // If we saw two dashes, we need to see a long option.
+ if (dashes == 2)
+ this->usage(_("unknown option"), argv[i]);
+
+ // Look for a short option match. There may be more than one
+ // short option in a given argument.
+ bool done = false;
+ char* s = argv[i] + 1;
+ ++i;
+ while (*s != '\0' && !done)
+ {
+ char opt = *s;
+ int j;
+ for (j = 0; j < options_size; ++j)
+ {
+ if (options[j].short_option == opt)
+ {
+ if (options[j].special)
+ {
+ // Undo the argument skip done above.
+ --i;
+ i += options[j].special(argc - i, argv + i, s, this);
+ done = true;
+ }
+ else
+ {
+ arg = NULL;
+ if (options[j].takes_argument())
+ {
+ if (s[1] != '\0')
+ {
+ arg = s + 1;
+ done = true;
+ }
+ else if (i < argc)
+ {
+ arg = argv[i];
+ ++i;
+ }
+ else
+ this->usage(_("missing argument"), opt);
+ }
+ this->apply_option(options[j], arg);
+ }
+ break;
+ }
+ }
+
+ if (j >= options_size)
+ this->usage(_("unknown option"), *s);
+
+ ++s;
+ }
+ }
+
+ if (this->inputs_.in_group())
+ {
+ fprintf(stderr, _("%s: missing group end"), program_name);
+ this->usage();
+ }
+
+ // FIXME: We should only do this when configured in native mode.
+ this->options_.add_to_search_path("/lib");
+ this->options_.add_to_search_path("/usr/lib");
+}
+
+// Apply a command line option.
+
+void
+Command_line::apply_option(const options::One_option& opt,
+ const char* arg)
+{
+ if (arg == NULL)
+ {
+ if (opt.general_noarg)
+ (this->options_.*(opt.general_noarg))();
+ else if (opt.dependent_noarg)
+ (this->position_options_.*(opt.dependent_noarg))();
+ else
+ gold_unreachable();
+ }
+ else
+ {
+ if (opt.general_arg)
+ (this->options_.*(opt.general_arg))(arg);
+ else if (opt.dependent_arg)
+ (this->position_options_.*(opt.dependent_arg))(arg);
+ else
+ gold_unreachable();
+ }
+}
+
+// Add an input file or library.
+
+void
+Command_line::add_file(const char* name, bool is_lib)
+{
+ Input_file_argument file(name, is_lib, this->position_options_);
+ this->inputs_.add_file(file);
+}
+
+// Handle the -l option, which requires special treatment.
+
+int
+Command_line::process_l_option(int argc, char** argv, char* arg)
+{
+ int ret;
+ const char* libname;
+ if (arg[1] != '\0')
+ {
+ ret = 1;
+ libname = arg + 1;
+ }
+ else if (argc > 1)
+ {
+ ret = 2;
+ libname = argv[argc + 1];
+ }
+ else
+ this->usage(_("missing argument"), arg);
+
+ this->add_file(libname, true);
+
+ return ret;
+}
+
+// Handle the --start-group option.
+
+void
+Command_line::start_group(const char* arg)
+{
+ if (this->inputs_.in_group())
+ this->usage(_("may not nest groups"), arg);
+ this->inputs_.start_group();
+}
+
+// Handle the --end-group option.
+
+void
+Command_line::end_group(const char* arg)
+{
+ if (!this->inputs_.in_group())
+ this->usage(_("group end without group start"), arg);
+ this->inputs_.end_group();
+}
+
+// Report a usage error. */
+
+void
+Command_line::usage()
+{
+ fprintf(stderr,
+ _("%s: use the --help option for usage information\n"),
+ program_name);
+ gold_exit(false);
+}
+
+void
+Command_line::usage(const char* msg, const char *opt)
+{
+ fprintf(stderr,
+ _("%s: %s: %s\n"),
+ program_name, opt, msg);
+ this->usage();
+}
+
+void
+Command_line::usage(const char* msg, char opt)
+{
+ fprintf(stderr,
+ _("%s: -%c: %s\n"),
+ program_name, opt, msg);
+ this->usage();
+}
+
+} // End namespace gold.
diff --git a/gold/options.h b/gold/options.h
new file mode 100644
index 000000000000..56907c058ead
--- /dev/null
+++ b/gold/options.h
@@ -0,0 +1,394 @@
+// options.h -- handle command line options for gold -*- C++ -*-
+
+// Command_line
+// Holds everything we get from the command line.
+// General_options (from Command_line::options())
+// Options which are not position dependent.
+// Input_argument (from Command_line::inputs())
+// The list of input files, including -l options.
+// Position_dependent_options (from Input_argument::options())
+// Position dependent options which apply to this argument.
+
+#ifndef GOLD_OPTIONS_H
+#define GOLD_OPTIONS_H
+
+#include <list>
+#include <string>
+#include <vector>
+
+namespace gold
+{
+
+class Command_line;
+class Input_file_group;
+
+namespace options {
+
+class Command_line_options;
+struct One_option;
+
+} // End namespace gold::options.
+
+// The position independent options which apply to the whole link.
+// There are a lot of them.
+
+class General_options
+{
+ public:
+ General_options();
+
+ // -I: dynamic linker name.
+ const char*
+ dynamic_linker() const
+ { return this->dynamic_linker_; }
+
+ // -L: Library search path.
+ typedef std::list<const char*> Dir_list;
+
+ const Dir_list&
+ search_path() const
+ { return this->search_path_; }
+
+ // -o: Output file name.
+ const char*
+ output_file_name() const
+ { return this->output_file_name_; }
+
+ // -r: Whether we are doing a relocatable link.
+ bool
+ is_relocatable() const
+ { return this->is_relocatable_; }
+
+ // --shared: Whether generating a shared object.
+ bool
+ is_shared() const
+ { return this->is_shared_; }
+
+ // --static: Whether doing a static link.
+ bool
+ is_static() const
+ { return this->is_static_; }
+
+ private:
+ // Don't copy this structure.
+ General_options(const General_options&);
+ General_options& operator=(const General_options&);
+
+ friend class Command_line;
+ friend class options::Command_line_options;
+
+ void
+ set_dynamic_linker(const char* arg)
+ { this->dynamic_linker_ = arg; }
+
+ void
+ add_to_search_path(const char* arg)
+ { this->search_path_.push_back(arg); }
+
+ void
+ set_output_file_name(const char* arg)
+ { this->output_file_name_ = arg; }
+
+ void
+ set_relocatable()
+ { this->is_relocatable_ = true; }
+
+ void
+ set_shared()
+ { this->is_shared_ = true; }
+
+ void
+ set_static()
+ { this->is_static_ = true; }
+
+ void
+ ignore(const char*)
+ { }
+
+ const char* dynamic_linker_;
+ Dir_list search_path_;
+ const char* output_file_name_;
+ bool is_relocatable_;
+ bool is_shared_;
+ bool is_static_;
+};
+
+// The current state of the position dependent options.
+
+class Position_dependent_options
+{
+ public:
+ Position_dependent_options();
+
+ // -Bstatic: Whether we are searching for a static archive rather
+ // than a shared object.
+ bool
+ do_static_search() const
+ { return this->do_static_search_; }
+
+ // --as-needed: Whether to add a DT_NEEDED argument only if the
+ // dynamic object is used.
+ bool
+ as_needed() const
+ { return this->as_needed_; }
+
+ void
+ set_static_search()
+ { this->do_static_search_ = true; }
+
+ void
+ set_dynamic_search()
+ { this->do_static_search_ = false; }
+
+ void
+ set_as_needed()
+ { this->as_needed_ = true; }
+
+ void
+ clear_as_needed()
+ { this->as_needed_ = false; }
+
+ private:
+ bool do_static_search_;
+ bool as_needed_;
+};
+
+// A single file or library argument from the command line.
+
+class Input_file_argument
+{
+ public:
+ Input_file_argument()
+ : name_(), is_lib_(false), options_()
+ { }
+
+ Input_file_argument(const char* name, bool is_lib,
+ const Position_dependent_options& options)
+ : name_(name), is_lib_(is_lib), options_(options)
+ { }
+
+ const char*
+ name() const
+ { return this->name_.c_str(); }
+
+ const Position_dependent_options&
+ options() const
+ { return this->options_; }
+
+ bool
+ is_lib() const
+ { return this->is_lib_; }
+
+ private:
+ // We use std::string, not const char*, here for convenience when
+ // using script files, so that we do not have to preserve the string
+ // in that case.
+ std::string name_;
+ bool is_lib_;
+ Position_dependent_options options_;
+};
+
+// A file or library, or a group, from the command line.
+
+class Input_argument
+{
+ public:
+ // Create a file or library argument.
+ explicit Input_argument(Input_file_argument file)
+ : is_file_(true), file_(file), group_(NULL)
+ { }
+
+ // Create a group argument.
+ explicit Input_argument(Input_file_group* group)
+ : is_file_(false), group_(group)
+ { }
+
+ // Return whether this is a file.
+ bool
+ is_file() const
+ { return this->is_file_; }
+
+ // Return whether this is a group.
+ bool
+ is_group() const
+ { return !this->is_file_; }
+
+ // Return the information about the file.
+ const Input_file_argument&
+ file() const
+ {
+ gold_assert(this->is_file_);
+ return this->file_;
+ }
+
+ // Return the information about the group.
+ const Input_file_group*
+ group() const
+ {
+ gold_assert(!this->is_file_);
+ return this->group_;
+ }
+
+ Input_file_group*
+ group()
+ {
+ gold_assert(!this->is_file_);
+ return this->group_;
+ }
+
+ private:
+ bool is_file_;
+ Input_file_argument file_;
+ Input_file_group* group_;
+};
+
+// A group from the command line. This is a set of arguments within
+// --start-group ... --end-group.
+
+class Input_file_group
+{
+ public:
+ typedef std::vector<Input_argument> Files;
+ typedef Files::const_iterator const_iterator;
+
+ Input_file_group()
+ : files_()
+ { }
+
+ // Add a file to the end of the group.
+ void
+ add_file(const Input_file_argument& arg)
+ { this->files_.push_back(Input_argument(arg)); }
+
+ // Iterators to iterate over the group contents.
+
+ const_iterator
+ begin() const
+ { return this->files_.begin(); }
+
+ const_iterator
+ end() const
+ { return this->files_.end(); }
+
+ private:
+ Files files_;
+};
+
+// A list of files from the command line or a script.
+
+class Input_arguments
+{
+ public:
+ typedef std::vector<Input_argument> Input_argument_list;
+ typedef Input_argument_list::const_iterator const_iterator;
+
+ Input_arguments()
+ : input_argument_list_(), in_group_(false)
+ { }
+
+ // Add a file.
+ void
+ add_file(const Input_file_argument& arg);
+
+ // Start a group (the --start-group option).
+ void
+ start_group();
+
+ // End a group (the --end-group option).
+ void
+ end_group();
+
+ // Return whether we are currently in a group.
+ bool
+ in_group() const
+ { return this->in_group_; }
+
+ // Iterators to iterate over the list of input files.
+
+ const_iterator
+ begin() const
+ { return this->input_argument_list_.begin(); }
+
+ const_iterator
+ end() const
+ { return this->input_argument_list_.end(); }
+
+ // Return whether the list is empty.
+ bool
+ empty() const
+ { return this->input_argument_list_.empty(); }
+
+ private:
+ Input_argument_list input_argument_list_;
+ bool in_group_;
+};
+
+// All the information read from the command line.
+
+class Command_line
+{
+ public:
+ typedef Input_arguments::const_iterator const_iterator;
+
+ Command_line();
+
+ // Process the command line options. This will exit with an
+ // appropriate error message if an unrecognized option is seen.
+ void
+ process(int argc, char** argv);
+
+ // Handle a -l option.
+ int
+ process_l_option(int, char**, char*);
+
+ // Handle a --start-group option.
+ void
+ start_group(const char* arg);
+
+ // Handle a --end-group option.
+ void
+ end_group(const char* arg);
+
+ // Get the general options.
+ const General_options&
+ options() const
+ { return this->options_; }
+
+ // Iterators to iterate over the list of input files.
+
+ const_iterator
+ begin() const
+ { return this->inputs_.begin(); }
+
+ const_iterator
+ end() const
+ { return this->inputs_.end(); }
+
+ private:
+ Command_line(const Command_line&);
+ Command_line& operator=(const Command_line&);
+
+ // Report usage error.
+ void
+ usage() ATTRIBUTE_NORETURN;
+ void
+ usage(const char* msg, const char* opt) ATTRIBUTE_NORETURN;
+ void
+ usage(const char* msg, char opt) ATTRIBUTE_NORETURN;
+
+ // Apply a command line option.
+ void
+ apply_option(const gold::options::One_option&, const char*);
+
+ // Add a file.
+ void
+ add_file(const char* name, bool is_lib);
+
+ General_options options_;
+ Position_dependent_options position_options_;
+ Input_arguments inputs_;
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_OPTIONS_H)
diff --git a/gold/output.cc b/gold/output.cc
new file mode 100644
index 000000000000..2a7400def77c
--- /dev/null
+++ b/gold/output.cc
@@ -0,0 +1,1670 @@
+// output.cc -- manage the output file for gold
+
+#include "gold.h"
+
+#include <cstdlib>
+#include <cerrno>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <algorithm>
+
+#include "object.h"
+#include "symtab.h"
+#include "reloc.h"
+#include "merge.h"
+#include "output.h"
+
+namespace gold
+{
+
+// Output_data variables.
+
+bool Output_data::sizes_are_fixed;
+
+// Output_data methods.
+
+Output_data::~Output_data()
+{
+}
+
+// Set the address and offset.
+
+void
+Output_data::set_address(uint64_t addr, off_t off)
+{
+ this->address_ = addr;
+ this->offset_ = off;
+
+ // Let the child class know.
+ this->do_set_address(addr, off);
+}
+
+// Return the default alignment for a size--32 or 64.
+
+uint64_t
+Output_data::default_alignment(int size)
+{
+ if (size == 32)
+ return 4;
+ else if (size == 64)
+ return 8;
+ else
+ gold_unreachable();
+}
+
+// Output_section_header methods. This currently assumes that the
+// segment and section lists are complete at construction time.
+
+Output_section_headers::Output_section_headers(
+ int size,
+ bool big_endian,
+ const Layout* layout,
+ const Layout::Segment_list* segment_list,
+ const Layout::Section_list* unattached_section_list,
+ const Stringpool* secnamepool)
+ : size_(size),
+ big_endian_(big_endian),
+ layout_(layout),
+ segment_list_(segment_list),
+ unattached_section_list_(unattached_section_list),
+ secnamepool_(secnamepool)
+{
+ // Count all the sections. Start with 1 for the null section.
+ off_t count = 1;
+ for (Layout::Segment_list::const_iterator p = segment_list->begin();
+ p != segment_list->end();
+ ++p)
+ if ((*p)->type() == elfcpp::PT_LOAD)
+ count += (*p)->output_section_count();
+ count += unattached_section_list->size();
+
+ int shdr_size;
+ if (size == 32)
+ shdr_size = elfcpp::Elf_sizes<32>::shdr_size;
+ else if (size == 64)
+ shdr_size = elfcpp::Elf_sizes<64>::shdr_size;
+ else
+ gold_unreachable();
+
+ this->set_data_size(count * shdr_size);
+}
+
+// Write out the section headers.
+
+void
+Output_section_headers::do_write(Output_file* of)
+{
+ if (this->size_ == 32)
+ {
+ if (this->big_endian_)
+ this->do_sized_write<32, true>(of);
+ else
+ this->do_sized_write<32, false>(of);
+ }
+ else if (this->size_ == 64)
+ {
+ if (this->big_endian_)
+ this->do_sized_write<64, true>(of);
+ else
+ this->do_sized_write<64, false>(of);
+ }
+ else
+ gold_unreachable();
+}
+
+template<int size, bool big_endian>
+void
+Output_section_headers::do_sized_write(Output_file* of)
+{
+ off_t all_shdrs_size = this->data_size();
+ unsigned char* view = of->get_output_view(this->offset(), all_shdrs_size);
+
+ const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
+ unsigned char* v = view;
+
+ {
+ typename elfcpp::Shdr_write<size, big_endian> oshdr(v);
+ oshdr.put_sh_name(0);
+ oshdr.put_sh_type(elfcpp::SHT_NULL);
+ oshdr.put_sh_flags(0);
+ oshdr.put_sh_addr(0);
+ oshdr.put_sh_offset(0);
+ oshdr.put_sh_size(0);
+ oshdr.put_sh_link(0);
+ oshdr.put_sh_info(0);
+ oshdr.put_sh_addralign(0);
+ oshdr.put_sh_entsize(0);
+ }
+
+ v += shdr_size;
+
+ unsigned shndx = 1;
+ for (Layout::Segment_list::const_iterator p = this->segment_list_->begin();
+ p != this->segment_list_->end();
+ ++p)
+ v = (*p)->write_section_headers SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
+ this->layout_, this->secnamepool_, v, &shndx
+ SELECT_SIZE_ENDIAN(size, big_endian));
+ for (Layout::Section_list::const_iterator p =
+ this->unattached_section_list_->begin();
+ p != this->unattached_section_list_->end();
+ ++p)
+ {
+ gold_assert(shndx == (*p)->out_shndx());
+ elfcpp::Shdr_write<size, big_endian> oshdr(v);
+ (*p)->write_header(this->layout_, this->secnamepool_, &oshdr);
+ v += shdr_size;
+ ++shndx;
+ }
+
+ of->write_output_view(this->offset(), all_shdrs_size, view);
+}
+
+// Output_segment_header methods.
+
+Output_segment_headers::Output_segment_headers(
+ int size,
+ bool big_endian,
+ const Layout::Segment_list& segment_list)
+ : size_(size), big_endian_(big_endian), segment_list_(segment_list)
+{
+ int phdr_size;
+ if (size == 32)
+ phdr_size = elfcpp::Elf_sizes<32>::phdr_size;
+ else if (size == 64)
+ phdr_size = elfcpp::Elf_sizes<64>::phdr_size;
+ else
+ gold_unreachable();
+
+ this->set_data_size(segment_list.size() * phdr_size);
+}
+
+void
+Output_segment_headers::do_write(Output_file* of)
+{
+ if (this->size_ == 32)
+ {
+ if (this->big_endian_)
+ this->do_sized_write<32, true>(of);
+ else
+ this->do_sized_write<32, false>(of);
+ }
+ else if (this->size_ == 64)
+ {
+ if (this->big_endian_)
+ this->do_sized_write<64, true>(of);
+ else
+ this->do_sized_write<64, false>(of);
+ }
+ else
+ gold_unreachable();
+}
+
+template<int size, bool big_endian>
+void
+Output_segment_headers::do_sized_write(Output_file* of)
+{
+ const int phdr_size = elfcpp::Elf_sizes<size>::phdr_size;
+ off_t all_phdrs_size = this->segment_list_.size() * phdr_size;
+ unsigned char* view = of->get_output_view(this->offset(),
+ all_phdrs_size);
+ unsigned char* v = view;
+ for (Layout::Segment_list::const_iterator p = this->segment_list_.begin();
+ p != this->segment_list_.end();
+ ++p)
+ {
+ elfcpp::Phdr_write<size, big_endian> ophdr(v);
+ (*p)->write_header(&ophdr);
+ v += phdr_size;
+ }
+
+ of->write_output_view(this->offset(), all_phdrs_size, view);
+}
+
+// Output_file_header methods.
+
+Output_file_header::Output_file_header(int size,
+ bool big_endian,
+ const General_options& options,
+ const Target* target,
+ const Symbol_table* symtab,
+ const Output_segment_headers* osh)
+ : size_(size),
+ big_endian_(big_endian),
+ options_(options),
+ target_(target),
+ symtab_(symtab),
+ segment_header_(osh),
+ section_header_(NULL),
+ shstrtab_(NULL)
+{
+ int ehdr_size;
+ if (size == 32)
+ ehdr_size = elfcpp::Elf_sizes<32>::ehdr_size;
+ else if (size == 64)
+ ehdr_size = elfcpp::Elf_sizes<64>::ehdr_size;
+ else
+ gold_unreachable();
+
+ this->set_data_size(ehdr_size);
+}
+
+// Set the section table information for a file header.
+
+void
+Output_file_header::set_section_info(const Output_section_headers* shdrs,
+ const Output_section* shstrtab)
+{
+ this->section_header_ = shdrs;
+ this->shstrtab_ = shstrtab;
+}
+
+// Write out the file header.
+
+void
+Output_file_header::do_write(Output_file* of)
+{
+ if (this->size_ == 32)
+ {
+ if (this->big_endian_)
+ this->do_sized_write<32, true>(of);
+ else
+ this->do_sized_write<32, false>(of);
+ }
+ else if (this->size_ == 64)
+ {
+ if (this->big_endian_)
+ this->do_sized_write<64, true>(of);
+ else
+ this->do_sized_write<64, false>(of);
+ }
+ else
+ gold_unreachable();
+}
+
+// Write out the file header with appropriate size and endianess.
+
+template<int size, bool big_endian>
+void
+Output_file_header::do_sized_write(Output_file* of)
+{
+ gold_assert(this->offset() == 0);
+
+ int ehdr_size = elfcpp::Elf_sizes<size>::ehdr_size;
+ unsigned char* view = of->get_output_view(0, ehdr_size);
+ elfcpp::Ehdr_write<size, big_endian> oehdr(view);
+
+ unsigned char e_ident[elfcpp::EI_NIDENT];
+ memset(e_ident, 0, elfcpp::EI_NIDENT);
+ e_ident[elfcpp::EI_MAG0] = elfcpp::ELFMAG0;
+ e_ident[elfcpp::EI_MAG1] = elfcpp::ELFMAG1;
+ e_ident[elfcpp::EI_MAG2] = elfcpp::ELFMAG2;
+ e_ident[elfcpp::EI_MAG3] = elfcpp::ELFMAG3;
+ if (size == 32)
+ e_ident[elfcpp::EI_CLASS] = elfcpp::ELFCLASS32;
+ else if (size == 64)
+ e_ident[elfcpp::EI_CLASS] = elfcpp::ELFCLASS64;
+ else
+ gold_unreachable();
+ e_ident[elfcpp::EI_DATA] = (big_endian
+ ? elfcpp::ELFDATA2MSB
+ : elfcpp::ELFDATA2LSB);
+ e_ident[elfcpp::EI_VERSION] = elfcpp::EV_CURRENT;
+ // FIXME: Some targets may need to set EI_OSABI and EI_ABIVERSION.
+ oehdr.put_e_ident(e_ident);
+
+ elfcpp::ET e_type;
+ // FIXME: ET_DYN.
+ if (this->options_.is_relocatable())
+ e_type = elfcpp::ET_REL;
+ else
+ e_type = elfcpp::ET_EXEC;
+ oehdr.put_e_type(e_type);
+
+ oehdr.put_e_machine(this->target_->machine_code());
+ oehdr.put_e_version(elfcpp::EV_CURRENT);
+
+ // FIXME: Need to support -e, and target specific entry symbol.
+ Symbol* sym = this->symtab_->lookup("_start");
+ typename Sized_symbol<size>::Value_type v;
+ if (sym == NULL)
+ v = 0;
+ else
+ {
+ Sized_symbol<size>* ssym;
+ ssym = this->symtab_->get_sized_symbol SELECT_SIZE_NAME(size) (
+ sym SELECT_SIZE(size));
+ v = ssym->value();
+ }
+ oehdr.put_e_entry(v);
+
+ oehdr.put_e_phoff(this->segment_header_->offset());
+ oehdr.put_e_shoff(this->section_header_->offset());
+
+ // FIXME: The target needs to set the flags.
+ oehdr.put_e_flags(0);
+
+ oehdr.put_e_ehsize(elfcpp::Elf_sizes<size>::ehdr_size);
+ oehdr.put_e_phentsize(elfcpp::Elf_sizes<size>::phdr_size);
+ oehdr.put_e_phnum(this->segment_header_->data_size()
+ / elfcpp::Elf_sizes<size>::phdr_size);
+ oehdr.put_e_shentsize(elfcpp::Elf_sizes<size>::shdr_size);
+ oehdr.put_e_shnum(this->section_header_->data_size()
+ / elfcpp::Elf_sizes<size>::shdr_size);
+ oehdr.put_e_shstrndx(this->shstrtab_->out_shndx());
+
+ of->write_output_view(0, ehdr_size, view);
+}
+
+// Output_data_const methods.
+
+void
+Output_data_const::do_write(Output_file* of)
+{
+ of->write(this->offset(), this->data_.data(), this->data_.size());
+}
+
+// Output_data_const_buffer methods.
+
+void
+Output_data_const_buffer::do_write(Output_file* of)
+{
+ of->write(this->offset(), this->p_, this->data_size());
+}
+
+// Output_section_data methods.
+
+// Record the output section, and set the entry size and such.
+
+void
+Output_section_data::set_output_section(Output_section* os)
+{
+ gold_assert(this->output_section_ == NULL);
+ this->output_section_ = os;
+ this->do_adjust_output_section(os);
+}
+
+// Return the section index of the output section.
+
+unsigned int
+Output_section_data::do_out_shndx() const
+{
+ gold_assert(this->output_section_ != NULL);
+ return this->output_section_->out_shndx();
+}
+
+// Output_data_strtab methods.
+
+// Set the address. We don't actually care about the address, but we
+// do set our final size.
+
+void
+Output_data_strtab::do_set_address(uint64_t, off_t)
+{
+ this->strtab_->set_string_offsets();
+ this->set_data_size(this->strtab_->get_strtab_size());
+}
+
+// Write out a string table.
+
+void
+Output_data_strtab::do_write(Output_file* of)
+{
+ this->strtab_->write(of, this->offset());
+}
+
+// Output_reloc methods.
+
+// Get the symbol index of a relocation.
+
+template<bool dynamic, int size, bool big_endian>
+unsigned int
+Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::get_symbol_index()
+ const
+{
+ unsigned int index;
+ switch (this->local_sym_index_)
+ {
+ case INVALID_CODE:
+ gold_unreachable();
+
+ case GSYM_CODE:
+ if (this->u1_.gsym == NULL)
+ index = 0;
+ else if (dynamic)
+ index = this->u1_.gsym->dynsym_index();
+ else
+ index = this->u1_.gsym->symtab_index();
+ break;
+
+ case SECTION_CODE:
+ if (dynamic)
+ index = this->u1_.os->dynsym_index();
+ else
+ index = this->u1_.os->symtab_index();
+ break;
+
+ default:
+ if (dynamic)
+ {
+ // FIXME: It seems that some targets may need to generate
+ // dynamic relocations against local symbols for some
+ // reasons. This will have to be addressed at some point.
+ gold_unreachable();
+ }
+ else
+ index = this->u1_.relobj->symtab_index(this->local_sym_index_);
+ break;
+ }
+ gold_assert(index != -1U);
+ return index;
+}
+
+// Write out the offset and info fields of a Rel or Rela relocation
+// entry.
+
+template<bool dynamic, int size, bool big_endian>
+template<typename Write_rel>
+void
+Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::write_rel(
+ Write_rel* wr) const
+{
+ Address address = this->address_;
+ if (this->shndx_ != INVALID_CODE)
+ {
+ off_t off;
+ Output_section* os = this->u2_.relobj->output_section(this->shndx_,
+ &off);
+ gold_assert(os != NULL);
+ address += os->address() + off;
+ }
+ else if (this->u2_.od != NULL)
+ address += this->u2_.od->address();
+ wr->put_r_offset(address);
+ wr->put_r_info(elfcpp::elf_r_info<size>(this->get_symbol_index(),
+ this->type_));
+}
+
+// Write out a Rel relocation.
+
+template<bool dynamic, int size, bool big_endian>
+void
+Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::write(
+ unsigned char* pov) const
+{
+ elfcpp::Rel_write<size, big_endian> orel(pov);
+ this->write_rel(&orel);
+}
+
+// Write out a Rela relocation.
+
+template<bool dynamic, int size, bool big_endian>
+void
+Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>::write(
+ unsigned char* pov) const
+{
+ elfcpp::Rela_write<size, big_endian> orel(pov);
+ this->rel_.write_rel(&orel);
+ orel.put_r_addend(this->addend_);
+}
+
+// Output_data_reloc_base methods.
+
+// Adjust the output section.
+
+template<int sh_type, bool dynamic, int size, bool big_endian>
+void
+Output_data_reloc_base<sh_type, dynamic, size, big_endian>
+ ::do_adjust_output_section(Output_section* os)
+{
+ if (sh_type == elfcpp::SHT_REL)
+ os->set_entsize(elfcpp::Elf_sizes<size>::rel_size);
+ else if (sh_type == elfcpp::SHT_RELA)
+ os->set_entsize(elfcpp::Elf_sizes<size>::rela_size);
+ else
+ gold_unreachable();
+ if (dynamic)
+ os->set_should_link_to_dynsym();
+ else
+ os->set_should_link_to_symtab();
+}
+
+// Write out relocation data.
+
+template<int sh_type, bool dynamic, int size, bool big_endian>
+void
+Output_data_reloc_base<sh_type, dynamic, size, big_endian>::do_write(
+ Output_file* of)
+{
+ const off_t off = this->offset();
+ const off_t oview_size = this->data_size();
+ unsigned char* const oview = of->get_output_view(off, oview_size);
+
+ unsigned char* pov = oview;
+ for (typename Relocs::const_iterator p = this->relocs_.begin();
+ p != this->relocs_.end();
+ ++p)
+ {
+ p->write(pov);
+ pov += reloc_size;
+ }
+
+ gold_assert(pov - oview == oview_size);
+
+ of->write_output_view(off, oview_size, oview);
+
+ // We no longer need the relocation entries.
+ this->relocs_.clear();
+}
+
+// Output_data_got::Got_entry methods.
+
+// Write out the entry.
+
+template<int size, bool big_endian>
+void
+Output_data_got<size, big_endian>::Got_entry::write(
+ const General_options* options,
+ unsigned char* pov) const
+{
+ Valtype val = 0;
+
+ switch (this->local_sym_index_)
+ {
+ case GSYM_CODE:
+ {
+ Symbol* gsym = this->u_.gsym;
+
+ // If the symbol is resolved locally, we need to write out its
+ // value. Otherwise we just write zero. The target code is
+ // responsible for creating a relocation entry to fill in the
+ // value at runtime.
+ if (gsym->final_value_is_known(options))
+ {
+ Sized_symbol<size>* sgsym;
+ // This cast is a bit ugly. We don't want to put a
+ // virtual method in Symbol, because we want Symbol to be
+ // as small as possible.
+ sgsym = static_cast<Sized_symbol<size>*>(gsym);
+ val = sgsym->value();
+ }
+ }
+ break;
+
+ case CONSTANT_CODE:
+ val = this->u_.constant;
+ break;
+
+ default:
+ gold_unreachable();
+ }
+
+ elfcpp::Swap<size, big_endian>::writeval(pov, val);
+}
+
+// Output_data_got methods.
+
+// Add an entry for a global symbol to the GOT. This returns true if
+// this is a new GOT entry, false if the symbol already had a GOT
+// entry.
+
+template<int size, bool big_endian>
+bool
+Output_data_got<size, big_endian>::add_global(Symbol* gsym)
+{
+ if (gsym->has_got_offset())
+ return false;
+
+ this->entries_.push_back(Got_entry(gsym));
+ this->set_got_size();
+ gsym->set_got_offset(this->last_got_offset());
+ return true;
+}
+
+// Write out the GOT.
+
+template<int size, bool big_endian>
+void
+Output_data_got<size, big_endian>::do_write(Output_file* of)
+{
+ const int add = size / 8;
+
+ const off_t off = this->offset();
+ const off_t oview_size = this->data_size();
+ unsigned char* const oview = of->get_output_view(off, oview_size);
+
+ unsigned char* pov = oview;
+ for (typename Got_entries::const_iterator p = this->entries_.begin();
+ p != this->entries_.end();
+ ++p)
+ {
+ p->write(this->options_, pov);
+ pov += add;
+ }
+
+ gold_assert(pov - oview == oview_size);
+
+ of->write_output_view(off, oview_size, oview);
+
+ // We no longer need the GOT entries.
+ this->entries_.clear();
+}
+
+// Output_data_dynamic::Dynamic_entry methods.
+
+// Write out the entry.
+
+template<int size, bool big_endian>
+void
+Output_data_dynamic::Dynamic_entry::write(
+ unsigned char* pov,
+ const Stringpool* pool
+ ACCEPT_SIZE_ENDIAN) const
+{
+ typename elfcpp::Elf_types<size>::Elf_WXword val;
+ switch (this->classification_)
+ {
+ case DYNAMIC_NUMBER:
+ val = this->u_.val;
+ break;
+
+ case DYNAMIC_SECTION_ADDRESS:
+ val = this->u_.od->address();
+ break;
+
+ case DYNAMIC_SECTION_SIZE:
+ val = this->u_.od->data_size();
+ break;
+
+ case DYNAMIC_SYMBOL:
+ {
+ const Sized_symbol<size>* s =
+ static_cast<const Sized_symbol<size>*>(this->u_.sym);
+ val = s->value();
+ }
+ break;
+
+ case DYNAMIC_STRING:
+ val = pool->get_offset(this->u_.str);
+ break;
+
+ default:
+ gold_unreachable();
+ }
+
+ elfcpp::Dyn_write<size, big_endian> dw(pov);
+ dw.put_d_tag(this->tag_);
+ dw.put_d_val(val);
+}
+
+// Output_data_dynamic methods.
+
+// Adjust the output section to set the entry size.
+
+void
+Output_data_dynamic::do_adjust_output_section(Output_section* os)
+{
+ if (this->target_->get_size() == 32)
+ os->set_entsize(elfcpp::Elf_sizes<32>::dyn_size);
+ else if (this->target_->get_size() == 64)
+ os->set_entsize(elfcpp::Elf_sizes<64>::dyn_size);
+ else
+ gold_unreachable();
+}
+
+// Set the final data size.
+
+void
+Output_data_dynamic::do_set_address(uint64_t, off_t)
+{
+ // Add the terminating entry.
+ this->add_constant(elfcpp::DT_NULL, 0);
+
+ int dyn_size;
+ if (this->target_->get_size() == 32)
+ dyn_size = elfcpp::Elf_sizes<32>::dyn_size;
+ else if (this->target_->get_size() == 64)
+ dyn_size = elfcpp::Elf_sizes<64>::dyn_size;
+ else
+ gold_unreachable();
+ this->set_data_size(this->entries_.size() * dyn_size);
+}
+
+// Write out the dynamic entries.
+
+void
+Output_data_dynamic::do_write(Output_file* of)
+{
+ if (this->target_->get_size() == 32)
+ {
+ if (this->target_->is_big_endian())
+ this->sized_write<32, true>(of);
+ else
+ this->sized_write<32, false>(of);
+ }
+ else if (this->target_->get_size() == 64)
+ {
+ if (this->target_->is_big_endian())
+ this->sized_write<64, true>(of);
+ else
+ this->sized_write<64, false>(of);
+ }
+ else
+ gold_unreachable();
+}
+
+template<int size, bool big_endian>
+void
+Output_data_dynamic::sized_write(Output_file* of)
+{
+ const int dyn_size = elfcpp::Elf_sizes<size>::dyn_size;
+
+ const off_t offset = this->offset();
+ const off_t oview_size = this->data_size();
+ unsigned char* const oview = of->get_output_view(offset, oview_size);
+
+ unsigned char* pov = oview;
+ for (typename Dynamic_entries::const_iterator p = this->entries_.begin();
+ p != this->entries_.end();
+ ++p)
+ {
+ p->write SELECT_SIZE_ENDIAN_NAME(size, big_endian)(
+ pov, this->pool_ SELECT_SIZE_ENDIAN(size, big_endian));
+ pov += dyn_size;
+ }
+
+ gold_assert(pov - oview == oview_size);
+
+ of->write_output_view(offset, oview_size, oview);
+
+ // We no longer need the dynamic entries.
+ this->entries_.clear();
+}
+
+// Output_section::Input_section methods.
+
+// Return the data size. For an input section we store the size here.
+// For an Output_section_data, we have to ask it for the size.
+
+off_t
+Output_section::Input_section::data_size() const
+{
+ if (this->is_input_section())
+ return this->u1_.data_size;
+ else
+ return this->u2_.posd->data_size();
+}
+
+// Set the address and file offset.
+
+void
+Output_section::Input_section::set_address(uint64_t addr, off_t off,
+ off_t secoff)
+{
+ if (this->is_input_section())
+ this->u2_.object->set_section_offset(this->shndx_, off - secoff);
+ else
+ this->u2_.posd->set_address(addr, off);
+}
+
+// Try to turn an input address into an output address.
+
+bool
+Output_section::Input_section::output_address(const Relobj* object,
+ unsigned int shndx,
+ off_t offset,
+ uint64_t output_section_address,
+ uint64_t *poutput) const
+{
+ if (!this->is_input_section())
+ return this->u2_.posd->output_address(object, shndx, offset,
+ output_section_address, poutput);
+ else
+ {
+ if (this->u2_.object != object)
+ return false;
+ off_t output_offset;
+ Output_section* os = object->output_section(shndx, &output_offset);
+ gold_assert(os != NULL);
+ *poutput = output_section_address + output_offset + offset;
+ return true;
+ }
+}
+
+// Write out the data. We don't have to do anything for an input
+// section--they are handled via Object::relocate--but this is where
+// we write out the data for an Output_section_data.
+
+void
+Output_section::Input_section::write(Output_file* of)
+{
+ if (!this->is_input_section())
+ this->u2_.posd->write(of);
+}
+
+// Output_section methods.
+
+// Construct an Output_section. NAME will point into a Stringpool.
+
+Output_section::Output_section(const char* name, elfcpp::Elf_Word type,
+ elfcpp::Elf_Xword flags)
+ : name_(name),
+ addralign_(0),
+ entsize_(0),
+ link_section_(NULL),
+ link_(0),
+ info_section_(NULL),
+ info_(0),
+ type_(type),
+ flags_(flags),
+ out_shndx_(0),
+ symtab_index_(0),
+ dynsym_index_(0),
+ input_sections_(),
+ first_input_offset_(0),
+ needs_symtab_index_(false),
+ needs_dynsym_index_(false),
+ should_link_to_symtab_(false),
+ should_link_to_dynsym_(false)
+{
+}
+
+Output_section::~Output_section()
+{
+}
+
+// Set the entry size.
+
+void
+Output_section::set_entsize(uint64_t v)
+{
+ if (this->entsize_ == 0)
+ this->entsize_ = v;
+ else
+ gold_assert(this->entsize_ == v);
+}
+
+// Add the input section SHNDX, with header SHDR, named SECNAME, in
+// OBJECT, to the Output_section. Return the offset of the input
+// section within the output section. We don't always keep track of
+// input sections for an Output_section. Instead, each Object keeps
+// track of the Output_section for each of its input sections.
+
+template<int size, bool big_endian>
+off_t
+Output_section::add_input_section(Relobj* object, unsigned int shndx,
+ const char* secname,
+ const elfcpp::Shdr<size, big_endian>& shdr)
+{
+ elfcpp::Elf_Xword addralign = shdr.get_sh_addralign();
+ if ((addralign & (addralign - 1)) != 0)
+ {
+ fprintf(stderr, _("%s: %s: invalid alignment %lu for section \"%s\"\n"),
+ program_name, object->name().c_str(),
+ static_cast<unsigned long>(addralign), secname);
+ gold_exit(false);
+ }
+
+ if (addralign > this->addralign_)
+ this->addralign_ = addralign;
+
+ // If this is a SHF_MERGE section, we pass all the input sections to
+ // a Output_data_merge.
+ if ((shdr.get_sh_flags() & elfcpp::SHF_MERGE) != 0)
+ {
+ if (this->add_merge_input_section(object, shndx, shdr.get_sh_flags(),
+ shdr.get_sh_entsize(),
+ addralign))
+ {
+ // Tell the relocation routines that they need to call the
+ // output_address method to determine the final address.
+ return -1;
+ }
+ }
+
+ off_t ssize = this->data_size();
+ ssize = align_address(ssize, addralign);
+ this->set_data_size(ssize + shdr.get_sh_size());
+
+ // We need to keep track of this section if we are already keeping
+ // track of sections, or if we are relaxing. FIXME: Add test for
+ // relaxing.
+ if (! this->input_sections_.empty())
+ this->input_sections_.push_back(Input_section(object, shndx,
+ shdr.get_sh_size(),
+ addralign));
+
+ return ssize;
+}
+
+// Add arbitrary data to an output section.
+
+void
+Output_section::add_output_section_data(Output_section_data* posd)
+{
+ Input_section inp(posd);
+ this->add_output_section_data(&inp);
+}
+
+// Add arbitrary data to an output section by Input_section.
+
+void
+Output_section::add_output_section_data(Input_section* inp)
+{
+ if (this->input_sections_.empty())
+ this->first_input_offset_ = this->data_size();
+
+ this->input_sections_.push_back(*inp);
+
+ uint64_t addralign = inp->addralign();
+ if (addralign > this->addralign_)
+ this->addralign_ = addralign;
+
+ inp->set_output_section(this);
+}
+
+// Add a merge section to an output section.
+
+void
+Output_section::add_output_merge_section(Output_section_data* posd,
+ bool is_string, uint64_t entsize)
+{
+ Input_section inp(posd, is_string, entsize);
+ this->add_output_section_data(&inp);
+}
+
+// Add an input section to a SHF_MERGE section.
+
+bool
+Output_section::add_merge_input_section(Relobj* object, unsigned int shndx,
+ uint64_t flags, uint64_t entsize,
+ uint64_t addralign)
+{
+ // We only merge constants if the alignment is not more than the
+ // entry size. This could be handled, but it's unusual.
+ if (addralign > entsize)
+ return false;
+
+ bool is_string = (flags & elfcpp::SHF_STRINGS) != 0;
+ Input_section_list::iterator p;
+ for (p = this->input_sections_.begin();
+ p != this->input_sections_.end();
+ ++p)
+ if (p->is_merge_section(is_string, entsize))
+ break;
+
+ // We handle the actual constant merging in Output_merge_data or
+ // Output_merge_string_data.
+ if (p != this->input_sections_.end())
+ p->add_input_section(object, shndx);
+ else
+ {
+ Output_section_data* posd;
+ if (!is_string)
+ posd = new Output_merge_data(entsize);
+ else if (entsize == 1)
+ posd = new Output_merge_string<char>();
+ else if (entsize == 2)
+ posd = new Output_merge_string<uint16_t>();
+ else if (entsize == 4)
+ posd = new Output_merge_string<uint32_t>();
+ else
+ return false;
+
+ this->add_output_merge_section(posd, is_string, entsize);
+ posd->add_input_section(object, shndx);
+ }
+
+ return true;
+}
+
+// Return the output virtual address of OFFSET relative to the start
+// of input section SHNDX in object OBJECT.
+
+uint64_t
+Output_section::output_address(const Relobj* object, unsigned int shndx,
+ off_t offset) const
+{
+ uint64_t addr = this->address() + this->first_input_offset_;
+ for (Input_section_list::const_iterator p = this->input_sections_.begin();
+ p != this->input_sections_.end();
+ ++p)
+ {
+ addr = align_address(addr, p->addralign());
+ uint64_t output;
+ if (p->output_address(object, shndx, offset, addr, &output))
+ return output;
+ addr += p->data_size();
+ }
+
+ // If we get here, it means that we don't know the mapping for this
+ // input section. This might happen in principle if
+ // add_input_section were called before add_output_section_data.
+ // But it should never actually happen.
+
+ gold_unreachable();
+}
+
+// Set the address of an Output_section. This is where we handle
+// setting the addresses of any Output_section_data objects.
+
+void
+Output_section::do_set_address(uint64_t address, off_t startoff)
+{
+ if (this->input_sections_.empty())
+ return;
+
+ off_t off = startoff + this->first_input_offset_;
+ for (Input_section_list::iterator p = this->input_sections_.begin();
+ p != this->input_sections_.end();
+ ++p)
+ {
+ off = align_address(off, p->addralign());
+ p->set_address(address + (off - startoff), off, startoff);
+ off += p->data_size();
+ }
+
+ this->set_data_size(off - startoff);
+}
+
+// Write the section header to *OSHDR.
+
+template<int size, bool big_endian>
+void
+Output_section::write_header(const Layout* layout,
+ const Stringpool* secnamepool,
+ elfcpp::Shdr_write<size, big_endian>* oshdr) const
+{
+ oshdr->put_sh_name(secnamepool->get_offset(this->name_));
+ oshdr->put_sh_type(this->type_);
+ oshdr->put_sh_flags(this->flags_);
+ oshdr->put_sh_addr(this->address());
+ oshdr->put_sh_offset(this->offset());
+ oshdr->put_sh_size(this->data_size());
+ if (this->link_section_ != NULL)
+ oshdr->put_sh_link(this->link_section_->out_shndx());
+ else if (this->should_link_to_symtab_)
+ oshdr->put_sh_link(layout->symtab_section()->out_shndx());
+ else if (this->should_link_to_dynsym_)
+ oshdr->put_sh_link(layout->dynsym_section()->out_shndx());
+ else
+ oshdr->put_sh_link(this->link_);
+ if (this->info_section_ != NULL)
+ oshdr->put_sh_info(this->info_section_->out_shndx());
+ else
+ oshdr->put_sh_info(this->info_);
+ oshdr->put_sh_addralign(this->addralign_);
+ oshdr->put_sh_entsize(this->entsize_);
+}
+
+// Write out the data. For input sections the data is written out by
+// Object::relocate, but we have to handle Output_section_data objects
+// here.
+
+void
+Output_section::do_write(Output_file* of)
+{
+ for (Input_section_list::iterator p = this->input_sections_.begin();
+ p != this->input_sections_.end();
+ ++p)
+ p->write(of);
+}
+
+// Output segment methods.
+
+Output_segment::Output_segment(elfcpp::Elf_Word type, elfcpp::Elf_Word flags)
+ : output_data_(),
+ output_bss_(),
+ vaddr_(0),
+ paddr_(0),
+ memsz_(0),
+ align_(0),
+ offset_(0),
+ filesz_(0),
+ type_(type),
+ flags_(flags),
+ is_align_known_(false)
+{
+}
+
+// Add an Output_section to an Output_segment.
+
+void
+Output_segment::add_output_section(Output_section* os,
+ elfcpp::Elf_Word seg_flags,
+ bool front)
+{
+ gold_assert((os->flags() & elfcpp::SHF_ALLOC) != 0);
+ gold_assert(!this->is_align_known_);
+
+ // Update the segment flags.
+ this->flags_ |= seg_flags;
+
+ Output_segment::Output_data_list* pdl;
+ if (os->type() == elfcpp::SHT_NOBITS)
+ pdl = &this->output_bss_;
+ else
+ pdl = &this->output_data_;
+
+ // So that PT_NOTE segments will work correctly, we need to ensure
+ // that all SHT_NOTE sections are adjacent. This will normally
+ // happen automatically, because all the SHT_NOTE input sections
+ // will wind up in the same output section. However, it is possible
+ // for multiple SHT_NOTE input sections to have different section
+ // flags, and thus be in different output sections, but for the
+ // different section flags to map into the same segment flags and
+ // thus the same output segment.
+
+ // Note that while there may be many input sections in an output
+ // section, there are normally only a few output sections in an
+ // output segment. This loop is expected to be fast.
+
+ if (os->type() == elfcpp::SHT_NOTE && !pdl->empty())
+ {
+ Output_segment::Output_data_list::iterator p = pdl->end();
+ do
+ {
+ --p;
+ if ((*p)->is_section_type(elfcpp::SHT_NOTE))
+ {
+ // We don't worry about the FRONT parameter.
+ ++p;
+ pdl->insert(p, os);
+ return;
+ }
+ }
+ while (p != pdl->begin());
+ }
+
+ // Similarly, so that PT_TLS segments will work, we need to group
+ // SHF_TLS sections. An SHF_TLS/SHT_NOBITS section is a special
+ // case: we group the SHF_TLS/SHT_NOBITS sections right after the
+ // SHF_TLS/SHT_PROGBITS sections. This lets us set up PT_TLS
+ // correctly.
+ if ((os->flags() & elfcpp::SHF_TLS) != 0 && !this->output_data_.empty())
+ {
+ pdl = &this->output_data_;
+ bool nobits = os->type() == elfcpp::SHT_NOBITS;
+ bool sawtls = false;
+ Output_segment::Output_data_list::iterator p = pdl->end();
+ do
+ {
+ --p;
+ bool insert;
+ if ((*p)->is_section_flag_set(elfcpp::SHF_TLS))
+ {
+ sawtls = true;
+ // Put a NOBITS section after the first TLS section.
+ // But a PROGBITS section after the first TLS/PROGBITS
+ // section.
+ insert = nobits || !(*p)->is_section_type(elfcpp::SHT_NOBITS);
+ }
+ else
+ {
+ // If we've gone past the TLS sections, but we've seen a
+ // TLS section, then we need to insert this section now.
+ insert = sawtls;
+ }
+
+ if (insert)
+ {
+ // We don't worry about the FRONT parameter.
+ ++p;
+ pdl->insert(p, os);
+ return;
+ }
+ }
+ while (p != pdl->begin());
+
+ // There are no TLS sections yet; put this one at the requested
+ // location in the section list.
+ }
+
+ if (front)
+ pdl->push_front(os);
+ else
+ pdl->push_back(os);
+}
+
+// Add an Output_data (which is not an Output_section) to the start of
+// a segment.
+
+void
+Output_segment::add_initial_output_data(Output_data* od)
+{
+ gold_assert(!this->is_align_known_);
+ this->output_data_.push_front(od);
+}
+
+// Return the maximum alignment of the Output_data in Output_segment.
+// Once we compute this, we prohibit new sections from being added.
+
+uint64_t
+Output_segment::addralign()
+{
+ if (!this->is_align_known_)
+ {
+ uint64_t addralign;
+
+ addralign = Output_segment::maximum_alignment(&this->output_data_);
+ if (addralign > this->align_)
+ this->align_ = addralign;
+
+ addralign = Output_segment::maximum_alignment(&this->output_bss_);
+ if (addralign > this->align_)
+ this->align_ = addralign;
+
+ this->is_align_known_ = true;
+ }
+
+ return this->align_;
+}
+
+// Return the maximum alignment of a list of Output_data.
+
+uint64_t
+Output_segment::maximum_alignment(const Output_data_list* pdl)
+{
+ uint64_t ret = 0;
+ for (Output_data_list::const_iterator p = pdl->begin();
+ p != pdl->end();
+ ++p)
+ {
+ uint64_t addralign = (*p)->addralign();
+ if (addralign > ret)
+ ret = addralign;
+ }
+ return ret;
+}
+
+// Set the section addresses for an Output_segment. ADDR is the
+// address and *POFF is the file offset. Set the section indexes
+// starting with *PSHNDX. Return the address of the immediately
+// following segment. Update *POFF and *PSHNDX.
+
+uint64_t
+Output_segment::set_section_addresses(uint64_t addr, off_t* poff,
+ unsigned int* pshndx)
+{
+ gold_assert(this->type_ == elfcpp::PT_LOAD);
+
+ this->vaddr_ = addr;
+ this->paddr_ = addr;
+
+ off_t orig_off = *poff;
+ this->offset_ = orig_off;
+
+ *poff = align_address(*poff, this->addralign());
+
+ addr = this->set_section_list_addresses(&this->output_data_, addr, poff,
+ pshndx);
+ this->filesz_ = *poff - orig_off;
+
+ off_t off = *poff;
+
+ uint64_t ret = this->set_section_list_addresses(&this->output_bss_, addr,
+ poff, pshndx);
+ this->memsz_ = *poff - orig_off;
+
+ // Ignore the file offset adjustments made by the BSS Output_data
+ // objects.
+ *poff = off;
+
+ return ret;
+}
+
+// Set the addresses and file offsets in a list of Output_data
+// structures.
+
+uint64_t
+Output_segment::set_section_list_addresses(Output_data_list* pdl,
+ uint64_t addr, off_t* poff,
+ unsigned int* pshndx)
+{
+ off_t startoff = *poff;
+
+ off_t off = startoff;
+ for (Output_data_list::iterator p = pdl->begin();
+ p != pdl->end();
+ ++p)
+ {
+ off = align_address(off, (*p)->addralign());
+ (*p)->set_address(addr + (off - startoff), off);
+
+ // Unless this is a PT_TLS segment, we want to ignore the size
+ // of a SHF_TLS/SHT_NOBITS section. Such a section does not
+ // affect the size of a PT_LOAD segment.
+ if (this->type_ == elfcpp::PT_TLS
+ || !(*p)->is_section_flag_set(elfcpp::SHF_TLS)
+ || !(*p)->is_section_type(elfcpp::SHT_NOBITS))
+ off += (*p)->data_size();
+
+ if ((*p)->is_section())
+ {
+ (*p)->set_out_shndx(*pshndx);
+ ++*pshndx;
+ }
+ }
+
+ *poff = off;
+ return addr + (off - startoff);
+}
+
+// For a non-PT_LOAD segment, set the offset from the sections, if
+// any.
+
+void
+Output_segment::set_offset()
+{
+ gold_assert(this->type_ != elfcpp::PT_LOAD);
+
+ if (this->output_data_.empty() && this->output_bss_.empty())
+ {
+ this->vaddr_ = 0;
+ this->paddr_ = 0;
+ this->memsz_ = 0;
+ this->align_ = 0;
+ this->offset_ = 0;
+ this->filesz_ = 0;
+ return;
+ }
+
+ const Output_data* first;
+ if (this->output_data_.empty())
+ first = this->output_bss_.front();
+ else
+ first = this->output_data_.front();
+ this->vaddr_ = first->address();
+ this->paddr_ = this->vaddr_;
+ this->offset_ = first->offset();
+
+ if (this->output_data_.empty())
+ this->filesz_ = 0;
+ else
+ {
+ const Output_data* last_data = this->output_data_.back();
+ this->filesz_ = (last_data->address()
+ + last_data->data_size()
+ - this->vaddr_);
+ }
+
+ const Output_data* last;
+ if (this->output_bss_.empty())
+ last = this->output_data_.back();
+ else
+ last = this->output_bss_.back();
+ this->memsz_ = (last->address()
+ + last->data_size()
+ - this->vaddr_);
+}
+
+// Return the number of Output_sections in an Output_segment.
+
+unsigned int
+Output_segment::output_section_count() const
+{
+ return (this->output_section_count_list(&this->output_data_)
+ + this->output_section_count_list(&this->output_bss_));
+}
+
+// Return the number of Output_sections in an Output_data_list.
+
+unsigned int
+Output_segment::output_section_count_list(const Output_data_list* pdl) const
+{
+ unsigned int count = 0;
+ for (Output_data_list::const_iterator p = pdl->begin();
+ p != pdl->end();
+ ++p)
+ {
+ if ((*p)->is_section())
+ ++count;
+ }
+ return count;
+}
+
+// Write the segment data into *OPHDR.
+
+template<int size, bool big_endian>
+void
+Output_segment::write_header(elfcpp::Phdr_write<size, big_endian>* ophdr)
+{
+ ophdr->put_p_type(this->type_);
+ ophdr->put_p_offset(this->offset_);
+ ophdr->put_p_vaddr(this->vaddr_);
+ ophdr->put_p_paddr(this->paddr_);
+ ophdr->put_p_filesz(this->filesz_);
+ ophdr->put_p_memsz(this->memsz_);
+ ophdr->put_p_flags(this->flags_);
+ ophdr->put_p_align(this->addralign());
+}
+
+// Write the section headers into V.
+
+template<int size, bool big_endian>
+unsigned char*
+Output_segment::write_section_headers(const Layout* layout,
+ const Stringpool* secnamepool,
+ unsigned char* v,
+ unsigned int *pshndx
+ ACCEPT_SIZE_ENDIAN) const
+{
+ // Every section that is attached to a segment must be attached to a
+ // PT_LOAD segment, so we only write out section headers for PT_LOAD
+ // segments.
+ if (this->type_ != elfcpp::PT_LOAD)
+ return v;
+
+ v = this->write_section_headers_list
+ SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
+ layout, secnamepool, &this->output_data_, v, pshndx
+ SELECT_SIZE_ENDIAN(size, big_endian));
+ v = this->write_section_headers_list
+ SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
+ layout, secnamepool, &this->output_bss_, v, pshndx
+ SELECT_SIZE_ENDIAN(size, big_endian));
+ return v;
+}
+
+template<int size, bool big_endian>
+unsigned char*
+Output_segment::write_section_headers_list(const Layout* layout,
+ const Stringpool* secnamepool,
+ const Output_data_list* pdl,
+ unsigned char* v,
+ unsigned int* pshndx
+ ACCEPT_SIZE_ENDIAN) const
+{
+ const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
+ for (Output_data_list::const_iterator p = pdl->begin();
+ p != pdl->end();
+ ++p)
+ {
+ if ((*p)->is_section())
+ {
+ const Output_section* ps = static_cast<const Output_section*>(*p);
+ gold_assert(*pshndx == ps->out_shndx());
+ elfcpp::Shdr_write<size, big_endian> oshdr(v);
+ ps->write_header(layout, secnamepool, &oshdr);
+ v += shdr_size;
+ ++*pshndx;
+ }
+ }
+ return v;
+}
+
+// Output_file methods.
+
+Output_file::Output_file(const General_options& options)
+ : options_(options),
+ name_(options.output_file_name()),
+ o_(-1),
+ file_size_(0),
+ base_(NULL)
+{
+}
+
+// Open the output file.
+
+void
+Output_file::open(off_t file_size)
+{
+ this->file_size_ = file_size;
+
+ int mode = this->options_.is_relocatable() ? 0666 : 0777;
+ int o = ::open(this->name_, O_RDWR | O_CREAT | O_TRUNC, mode);
+ if (o < 0)
+ {
+ fprintf(stderr, _("%s: %s: open: %s\n"),
+ program_name, this->name_, strerror(errno));
+ gold_exit(false);
+ }
+ this->o_ = o;
+
+ // Write out one byte to make the file the right size.
+ if (::lseek(o, file_size - 1, SEEK_SET) < 0)
+ {
+ fprintf(stderr, _("%s: %s: lseek: %s\n"),
+ program_name, this->name_, strerror(errno));
+ gold_exit(false);
+ }
+ char b = 0;
+ if (::write(o, &b, 1) != 1)
+ {
+ fprintf(stderr, _("%s: %s: write: %s\n"),
+ program_name, this->name_, strerror(errno));
+ gold_exit(false);
+ }
+
+ // Map the file into memory.
+ void* base = ::mmap(NULL, file_size, PROT_READ | PROT_WRITE,
+ MAP_SHARED, o, 0);
+ if (base == MAP_FAILED)
+ {
+ fprintf(stderr, _("%s: %s: mmap: %s\n"),
+ program_name, this->name_, strerror(errno));
+ gold_exit(false);
+ }
+ this->base_ = static_cast<unsigned char*>(base);
+}
+
+// Close the output file.
+
+void
+Output_file::close()
+{
+ if (::munmap(this->base_, this->file_size_) < 0)
+ {
+ fprintf(stderr, _("%s: %s: munmap: %s\n"),
+ program_name, this->name_, strerror(errno));
+ gold_exit(false);
+ }
+ this->base_ = NULL;
+
+ if (::close(this->o_) < 0)
+ {
+ fprintf(stderr, _("%s: %s: close: %s\n"),
+ program_name, this->name_, strerror(errno));
+ gold_exit(false);
+ }
+ this->o_ = -1;
+}
+
+// Instantiate the templates we need. We could use the configure
+// script to restrict this to only the ones for implemented targets.
+
+template
+off_t
+Output_section::add_input_section<32, false>(
+ Relobj* object,
+ unsigned int shndx,
+ const char* secname,
+ const elfcpp::Shdr<32, false>& shdr);
+
+template
+off_t
+Output_section::add_input_section<32, true>(
+ Relobj* object,
+ unsigned int shndx,
+ const char* secname,
+ const elfcpp::Shdr<32, true>& shdr);
+
+template
+off_t
+Output_section::add_input_section<64, false>(
+ Relobj* object,
+ unsigned int shndx,
+ const char* secname,
+ const elfcpp::Shdr<64, false>& shdr);
+
+template
+off_t
+Output_section::add_input_section<64, true>(
+ Relobj* object,
+ unsigned int shndx,
+ const char* secname,
+ const elfcpp::Shdr<64, true>& shdr);
+
+template
+class Output_data_reloc<elfcpp::SHT_REL, false, 32, false>;
+
+template
+class Output_data_reloc<elfcpp::SHT_REL, false, 32, true>;
+
+template
+class Output_data_reloc<elfcpp::SHT_REL, false, 64, false>;
+
+template
+class Output_data_reloc<elfcpp::SHT_REL, false, 64, true>;
+
+template
+class Output_data_reloc<elfcpp::SHT_REL, true, 32, false>;
+
+template
+class Output_data_reloc<elfcpp::SHT_REL, true, 32, true>;
+
+template
+class Output_data_reloc<elfcpp::SHT_REL, true, 64, false>;
+
+template
+class Output_data_reloc<elfcpp::SHT_REL, true, 64, true>;
+
+template
+class Output_data_reloc<elfcpp::SHT_RELA, false, 32, false>;
+
+template
+class Output_data_reloc<elfcpp::SHT_RELA, false, 32, true>;
+
+template
+class Output_data_reloc<elfcpp::SHT_RELA, false, 64, false>;
+
+template
+class Output_data_reloc<elfcpp::SHT_RELA, false, 64, true>;
+
+template
+class Output_data_reloc<elfcpp::SHT_RELA, true, 32, false>;
+
+template
+class Output_data_reloc<elfcpp::SHT_RELA, true, 32, true>;
+
+template
+class Output_data_reloc<elfcpp::SHT_RELA, true, 64, false>;
+
+template
+class Output_data_reloc<elfcpp::SHT_RELA, true, 64, true>;
+
+template
+class Output_data_got<32, false>;
+
+template
+class Output_data_got<32, true>;
+
+template
+class Output_data_got<64, false>;
+
+template
+class Output_data_got<64, true>;
+
+} // End namespace gold.
+
diff --git a/gold/output.h b/gold/output.h
new file mode 100644
index 000000000000..7ed53ff06d77
--- /dev/null
+++ b/gold/output.h
@@ -0,0 +1,1801 @@
+// output.h -- manage the output file for gold -*- C++ -*-
+
+#ifndef GOLD_OUTPUT_H
+#define GOLD_OUTPUT_H
+
+#include <list>
+#include <vector>
+
+#include "elfcpp.h"
+#include "layout.h"
+#include "reloc-types.h"
+
+namespace gold
+{
+
+class General_options;
+class Object;
+class Symbol;
+class Output_file;
+class Output_section;
+class Target;
+template<int size, bool big_endian>
+class Sized_target;
+template<int size, bool big_endian>
+class Sized_relobj;
+
+// An abtract class for data which has to go into the output file.
+
+class Output_data
+{
+ public:
+ explicit Output_data(off_t data_size = 0)
+ : address_(0), data_size_(data_size), offset_(-1)
+ { }
+
+ virtual
+ ~Output_data();
+
+ // Return the address. This is only valid after Layout::finalize is
+ // finished.
+ uint64_t
+ address() const
+ { return this->address_; }
+
+ // Return the size of the data. This must be valid after
+ // Layout::finalize calls set_address, but need not be valid before
+ // then.
+ off_t
+ data_size() const
+ { return this->data_size_; }
+
+ // Return the file offset. This is only valid after
+ // Layout::finalize is finished.
+ off_t
+ offset() const
+ { return this->offset_; }
+
+ // Return the required alignment.
+ uint64_t
+ addralign() const
+ { return this->do_addralign(); }
+
+ // Return whether this is an Output_section.
+ bool
+ is_section() const
+ { return this->do_is_section(); }
+
+ // Return whether this is an Output_section of the specified type.
+ bool
+ is_section_type(elfcpp::Elf_Word stt) const
+ { return this->do_is_section_type(stt); }
+
+ // Return whether this is an Output_section with the specified flag
+ // set.
+ bool
+ is_section_flag_set(elfcpp::Elf_Xword shf) const
+ { return this->do_is_section_flag_set(shf); }
+
+ // Return the output section index, if there is an output section.
+ unsigned int
+ out_shndx() const
+ { return this->do_out_shndx(); }
+
+ // Set the output section index, if this is an output section.
+ void
+ set_out_shndx(unsigned int shndx)
+ { this->do_set_out_shndx(shndx); }
+
+ // Set the address and file offset of this data. This is called
+ // during Layout::finalize.
+ void
+ set_address(uint64_t addr, off_t off);
+
+ // Write the data to the output file. This is called after
+ // Layout::finalize is complete.
+ void
+ write(Output_file* file)
+ { this->do_write(file); }
+
+ // This is called by Layout::finalize to note that all sizes must
+ // now be fixed.
+ static void
+ layout_complete()
+ { Output_data::sizes_are_fixed = true; }
+
+ protected:
+ // Functions that child classes may or in some cases must implement.
+
+ // Write the data to the output file.
+ virtual void
+ do_write(Output_file*) = 0;
+
+ // Return the required alignment.
+ virtual uint64_t
+ do_addralign() const = 0;
+
+ // Return whether this is an Output_section.
+ virtual bool
+ do_is_section() const
+ { return false; }
+
+ // Return whether this is an Output_section of the specified type.
+ // This only needs to be implement by Output_section.
+ virtual bool
+ do_is_section_type(elfcpp::Elf_Word) const
+ { return false; }
+
+ // Return whether this is an Output_section with the specific flag
+ // set. This only needs to be implemented by Output_section.
+ virtual bool
+ do_is_section_flag_set(elfcpp::Elf_Xword) const
+ { return false; }
+
+ // Return the output section index, if there is an output section.
+ virtual unsigned int
+ do_out_shndx() const
+ { gold_unreachable(); }
+
+ // Set the output section index, if this is an output section.
+ virtual void
+ do_set_out_shndx(unsigned int)
+ { gold_unreachable(); }
+
+ // Set the address and file offset of the data. This only needs to
+ // be implemented if the child needs to know. The child class can
+ // set its size in this call.
+ virtual void
+ do_set_address(uint64_t, off_t)
+ { }
+
+ // Functions that child classes may call.
+
+ // Set the size of the data.
+ void
+ set_data_size(off_t data_size)
+ {
+ gold_assert(!Output_data::sizes_are_fixed);
+ this->data_size_ = data_size;
+ }
+
+ // Return default alignment for a size--32 or 64.
+ static uint64_t
+ default_alignment(int size);
+
+ private:
+ Output_data(const Output_data&);
+ Output_data& operator=(const Output_data&);
+
+ // This is used for verification, to make sure that we don't try to
+ // change any sizes after we set the section addresses.
+ static bool sizes_are_fixed;
+
+ // Memory address in file (not always meaningful).
+ uint64_t address_;
+ // Size of data in file.
+ off_t data_size_;
+ // Offset within file.
+ off_t offset_;
+};
+
+// Output the section headers.
+
+class Output_section_headers : public Output_data
+{
+ public:
+ Output_section_headers(int size,
+ bool big_endian,
+ const Layout*,
+ const Layout::Segment_list*,
+ const Layout::Section_list*,
+ const Stringpool*);
+
+ // Write the data to the file.
+ void
+ do_write(Output_file*);
+
+ // Return the required alignment.
+ uint64_t
+ do_addralign() const
+ { return Output_data::default_alignment(this->size_); }
+
+ private:
+ // Write the data to the file with the right size and endianness.
+ template<int size, bool big_endian>
+ void
+ do_sized_write(Output_file*);
+
+ int size_;
+ bool big_endian_;
+ const Layout* layout_;
+ const Layout::Segment_list* segment_list_;
+ const Layout::Section_list* unattached_section_list_;
+ const Stringpool* secnamepool_;
+};
+
+// Output the segment headers.
+
+class Output_segment_headers : public Output_data
+{
+ public:
+ Output_segment_headers(int size, bool big_endian,
+ const Layout::Segment_list& segment_list);
+
+ // Write the data to the file.
+ void
+ do_write(Output_file*);
+
+ // Return the required alignment.
+ uint64_t
+ do_addralign() const
+ { return Output_data::default_alignment(this->size_); }
+
+ private:
+ // Write the data to the file with the right size and endianness.
+ template<int size, bool big_endian>
+ void
+ do_sized_write(Output_file*);
+
+ int size_;
+ bool big_endian_;
+ const Layout::Segment_list& segment_list_;
+};
+
+// Output the ELF file header.
+
+class Output_file_header : public Output_data
+{
+ public:
+ Output_file_header(int size,
+ bool big_endian,
+ const General_options&,
+ const Target*,
+ const Symbol_table*,
+ const Output_segment_headers*);
+
+ // Add information about the section headers. We lay out the ELF
+ // file header before we create the section headers.
+ void set_section_info(const Output_section_headers*,
+ const Output_section* shstrtab);
+
+ // Write the data to the file.
+ void
+ do_write(Output_file*);
+
+ // Return the required alignment.
+ uint64_t
+ do_addralign() const
+ { return Output_data::default_alignment(this->size_); }
+
+ // Set the address and offset--we only implement this for error
+ // checking.
+ void
+ do_set_address(uint64_t, off_t off) const
+ { gold_assert(off == 0); }
+
+ private:
+ // Write the data to the file with the right size and endianness.
+ template<int size, bool big_endian>
+ void
+ do_sized_write(Output_file*);
+
+ int size_;
+ bool big_endian_;
+ const General_options& options_;
+ const Target* target_;
+ const Symbol_table* symtab_;
+ const Output_segment_headers* segment_header_;
+ const Output_section_headers* section_header_;
+ const Output_section* shstrtab_;
+};
+
+// Output sections are mainly comprised of input sections. However,
+// there are cases where we have data to write out which is not in an
+// input section. Output_section_data is used in such cases. This is
+// an abstract base class.
+
+class Output_section_data : public Output_data
+{
+ public:
+ Output_section_data(off_t data_size, uint64_t addralign)
+ : Output_data(data_size), output_section_(NULL), addralign_(addralign)
+ { }
+
+ Output_section_data(uint64_t addralign)
+ : Output_data(0), output_section_(NULL), addralign_(addralign)
+ { }
+
+ // Return the output section.
+ const Output_section*
+ output_section() const
+ { return this->output_section_; }
+
+ // Record the output section.
+ void
+ set_output_section(Output_section* os);
+
+ // Add an input section, for SHF_MERGE sections. This returns true
+ // if the section was handled.
+ bool
+ add_input_section(Relobj* object, unsigned int shndx)
+ { return this->do_add_input_section(object, shndx); }
+
+ // Given an input OBJECT, an input section index SHNDX within that
+ // object, and an OFFSET relative to the start of that input
+ // section, return whether or not the output address is known.
+ // OUTPUT_SECTION_ADDRESS is the address of the output section which
+ // this is a part of. If this function returns true, it sets
+ // *POUTPUT to the output address.
+ virtual bool
+ output_address(const Relobj* object, unsigned int shndx, off_t offset,
+ uint64_t output_section_address, uint64_t *poutput) const
+ {
+ return this->do_output_address(object, shndx, offset,
+ output_section_address, poutput);
+ }
+
+ protected:
+ // The child class must implement do_write.
+
+ // The child class may implement specific adjustments to the output
+ // section.
+ virtual void
+ do_adjust_output_section(Output_section*)
+ { }
+
+ // May be implemented by child class. Return true if the section
+ // was handled.
+ virtual bool
+ do_add_input_section(Relobj*, unsigned int)
+ { gold_unreachable(); }
+
+ // The child class may implement output_address.
+ virtual bool
+ do_output_address(const Relobj*, unsigned int, off_t, uint64_t,
+ uint64_t*) const
+ { return false; }
+
+ // Return the required alignment.
+ uint64_t
+ do_addralign() const
+ { return this->addralign_; }
+
+ // Return the section index of the output section.
+ unsigned int
+ do_out_shndx() const;
+
+ // Set the alignment.
+ void
+ set_addralign(uint64_t addralign)
+ { this->addralign_ = addralign; }
+
+ private:
+ // The output section for this section.
+ const Output_section* output_section_;
+ // The required alignment.
+ uint64_t addralign_;
+};
+
+// A simple case of Output_data in which we have constant data to
+// output.
+
+class Output_data_const : public Output_section_data
+{
+ public:
+ Output_data_const(const std::string& data, uint64_t addralign)
+ : Output_section_data(data.size(), addralign), data_(data)
+ { }
+
+ Output_data_const(const char* p, off_t len, uint64_t addralign)
+ : Output_section_data(len, addralign), data_(p, len)
+ { }
+
+ Output_data_const(const unsigned char* p, off_t len, uint64_t addralign)
+ : Output_section_data(len, addralign),
+ data_(reinterpret_cast<const char*>(p), len)
+ { }
+
+ // Add more data.
+ void
+ add_data(const std::string& add)
+ {
+ this->data_.append(add);
+ this->set_data_size(this->data_.size());
+ }
+
+ // Write the data to the output file.
+ void
+ do_write(Output_file*);
+
+ private:
+ std::string data_;
+};
+
+// Another version of Output_data with constant data, in which the
+// buffer is allocated by the caller.
+
+class Output_data_const_buffer : public Output_section_data
+{
+ public:
+ Output_data_const_buffer(const unsigned char* p, off_t len,
+ uint64_t addralign)
+ : Output_section_data(len, addralign), p_(p)
+ { }
+
+ // Write the data the output file.
+ void
+ do_write(Output_file*);
+
+ private:
+ const unsigned char* p_;
+};
+
+// A place holder for data written out via some other mechanism.
+
+class Output_data_space : public Output_section_data
+{
+ public:
+ Output_data_space(off_t data_size, uint64_t addralign)
+ : Output_section_data(data_size, addralign)
+ { }
+
+ explicit Output_data_space(uint64_t addralign)
+ : Output_section_data(addralign)
+ { }
+
+ // Set the size.
+ void
+ set_space_size(off_t space_size)
+ { this->set_data_size(space_size); }
+
+ // Set the alignment.
+ void
+ set_space_alignment(uint64_t align)
+ { this->set_addralign(align); }
+
+ // Write out the data--this must be handled elsewhere.
+ void
+ do_write(Output_file*)
+ { }
+};
+
+// A string table which goes into an output section.
+
+class Output_data_strtab : public Output_section_data
+{
+ public:
+ Output_data_strtab(Stringpool* strtab)
+ : Output_section_data(1), strtab_(strtab)
+ { }
+
+ // This is called to set the address and file offset. Here we make
+ // sure that the Stringpool is finalized.
+ void
+ do_set_address(uint64_t, off_t);
+
+ // Write out the data.
+ void
+ do_write(Output_file*);
+
+ private:
+ Stringpool* strtab_;
+};
+
+// This POD class is used to represent a single reloc in the output
+// file. This could be a private class within Output_data_reloc, but
+// the templatization is complex enough that I broke it out into a
+// separate class. The class is templatized on either elfcpp::SHT_REL
+// or elfcpp::SHT_RELA, and also on whether this is a dynamic
+// relocation or an ordinary relocation.
+
+// A relocation can be against a global symbol, a local symbol, an
+// output section, or the undefined symbol at index 0. We represent
+// the latter by using a NULL global symbol.
+
+template<int sh_type, bool dynamic, int size, bool big_endian>
+class Output_reloc;
+
+template<bool dynamic, int size, bool big_endian>
+class Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
+{
+ public:
+ typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
+
+ // An uninitialized entry. We need this because we want to put
+ // instances of this class into an STL container.
+ Output_reloc()
+ : local_sym_index_(INVALID_CODE)
+ { }
+
+ // A reloc against a global symbol.
+
+ Output_reloc(Symbol* gsym, unsigned int type, Output_data* od,
+ Address address)
+ : address_(address), local_sym_index_(GSYM_CODE), type_(type),
+ shndx_(INVALID_CODE)
+ {
+ this->u1_.gsym = gsym;
+ this->u2_.od = od;
+ }
+
+ Output_reloc(Symbol* gsym, unsigned int type, Relobj* relobj,
+ unsigned int shndx, Address address)
+ : address_(address), local_sym_index_(GSYM_CODE), type_(type),
+ shndx_(shndx)
+ {
+ gold_assert(shndx != INVALID_CODE);
+ this->u1_.gsym = gsym;
+ this->u2_.relobj = relobj;
+ }
+
+ // A reloc against a local symbol.
+
+ Output_reloc(Sized_relobj<size, big_endian>* relobj,
+ unsigned int local_sym_index,
+ unsigned int type,
+ Output_data* od,
+ Address address)
+ : address_(address), local_sym_index_(local_sym_index), type_(type),
+ shndx_(INVALID_CODE)
+ {
+ gold_assert(local_sym_index != GSYM_CODE
+ && local_sym_index != INVALID_CODE);
+ this->u1_.relobj = relobj;
+ this->u2_.od = od;
+ }
+
+ Output_reloc(Sized_relobj<size, big_endian>* relobj,
+ unsigned int local_sym_index,
+ unsigned int type,
+ unsigned int shndx,
+ Address address)
+ : address_(address), local_sym_index_(local_sym_index), type_(type),
+ shndx_(shndx)
+ {
+ gold_assert(local_sym_index != GSYM_CODE
+ && local_sym_index != INVALID_CODE);
+ gold_assert(shndx != INVALID_CODE);
+ this->u1_.relobj = relobj;
+ this->u2_.relobj = relobj;
+ }
+
+ // A reloc against the STT_SECTION symbol of an output section.
+
+ Output_reloc(Output_section* os, unsigned int type, Output_data* od,
+ Address address)
+ : address_(address), local_sym_index_(SECTION_CODE), type_(type),
+ shndx_(INVALID_CODE)
+ {
+ this->u1_.os = os;
+ this->u2_.od = od;
+ }
+
+ Output_reloc(Output_section* os, unsigned int type, Relobj* relobj,
+ unsigned int shndx, Address address)
+ : address_(address), local_sym_index_(SECTION_CODE), type_(type),
+ shndx_(shndx)
+ {
+ gold_assert(shndx != INVALID_CODE);
+ this->u1_.os = os;
+ this->u2_.relobj = relobj;
+ }
+
+ // Write the reloc entry to an output view.
+ void
+ write(unsigned char* pov) const;
+
+ // Write the offset and info fields to Write_rel.
+ template<typename Write_rel>
+ void write_rel(Write_rel*) const;
+
+ private:
+ // Return the symbol index. We can't do a double template
+ // specialization, so we do a secondary template here.
+ unsigned int
+ get_symbol_index() const;
+
+ // Codes for local_sym_index_.
+ enum
+ {
+ // Global symbol.
+ GSYM_CODE = -1U,
+ // Output section.
+ SECTION_CODE = -2U,
+ // Invalid uninitialized entry.
+ INVALID_CODE = -3U
+ };
+
+ union
+ {
+ // For a local symbol, the object. We will never generate a
+ // relocation against a local symbol in a dynamic object; that
+ // doesn't make sense. And our callers will always be
+ // templatized, so we use Sized_relobj here.
+ Sized_relobj<size, big_endian>* relobj;
+ // For a global symbol, the symbol. If this is NULL, it indicates
+ // a relocation against the undefined 0 symbol.
+ Symbol* gsym;
+ // For a relocation against an output section, the output section.
+ Output_section* os;
+ } u1_;
+ union
+ {
+ // If shndx_ is not INVALID CODE, the object which holds the input
+ // section being used to specify the reloc address.
+ Relobj* relobj;
+ // If shndx_ is INVALID_CODE, the output data being used to
+ // specify the reloc address. This may be NULL if the reloc
+ // address is absolute.
+ Output_data* od;
+ } u2_;
+ // The address offset within the input section or the Output_data.
+ Address address_;
+ // For a local symbol, the local symbol index. This is GSYM_CODE
+ // for a global symbol, or INVALID_CODE for an uninitialized value.
+ unsigned int local_sym_index_;
+ // The reloc type--a processor specific code.
+ unsigned int type_;
+ // If the reloc address is an input section in an object, the
+ // section index. This is INVALID_CODE if the reloc address is
+ // specified in some other way.
+ unsigned int shndx_;
+};
+
+// The SHT_RELA version of Output_reloc<>. This is just derived from
+// the SHT_REL version of Output_reloc, but it adds an addend.
+
+template<bool dynamic, int size, bool big_endian>
+class Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
+{
+ public:
+ typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
+ typedef typename elfcpp::Elf_types<size>::Elf_Addr Addend;
+
+ // An uninitialized entry.
+ Output_reloc()
+ : rel_()
+ { }
+
+ // A reloc against a global symbol.
+
+ Output_reloc(Symbol* gsym, unsigned int type, Output_data* od,
+ Address address, Addend addend)
+ : rel_(gsym, type, od, address), addend_(addend)
+ { }
+
+ Output_reloc(Symbol* gsym, unsigned int type, Relobj* relobj,
+ unsigned int shndx, Address address, Addend addend)
+ : rel_(gsym, type, relobj, shndx, address), addend_(addend)
+ { }
+
+ // A reloc against a local symbol.
+
+ Output_reloc(Sized_relobj<size, big_endian>* relobj,
+ unsigned int local_sym_index,
+ unsigned int type, Output_data* od, Address address,
+ Addend addend)
+ : rel_(relobj, local_sym_index, type, od, address), addend_(addend)
+ { }
+
+ Output_reloc(Sized_relobj<size, big_endian>* relobj,
+ unsigned int local_sym_index,
+ unsigned int type,
+ unsigned int shndx,
+ Address address,
+ Addend addend)
+ : rel_(relobj, local_sym_index, type, shndx, address),
+ addend_(addend)
+ { }
+
+ // A reloc against the STT_SECTION symbol of an output section.
+
+ Output_reloc(Output_section* os, unsigned int type, Output_data* od,
+ Address address, Addend addend)
+ : rel_(os, type, od, address), addend_(addend)
+ { }
+
+ Output_reloc(Output_section* os, unsigned int type, Relobj* relobj,
+ unsigned int shndx, Address address, Addend addend)
+ : rel_(os, type, relobj, shndx, address), addend_(addend)
+ { }
+
+ // Write the reloc entry to an output view.
+ void
+ write(unsigned char* pov) const;
+
+ private:
+ // The basic reloc.
+ Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian> rel_;
+ // The addend.
+ Addend addend_;
+};
+
+// Output_data_reloc is used to manage a section containing relocs.
+// SH_TYPE is either elfcpp::SHT_REL or elfcpp::SHT_RELA. DYNAMIC
+// indicates whether this is a dynamic relocation or a normal
+// relocation. Output_data_reloc_base is a base class.
+// Output_data_reloc is the real class, which we specialize based on
+// the reloc type.
+
+template<int sh_type, bool dynamic, int size, bool big_endian>
+class Output_data_reloc_base : public Output_section_data
+{
+ public:
+ typedef Output_reloc<sh_type, dynamic, size, big_endian> Output_reloc_type;
+ typedef typename Output_reloc_type::Address Address;
+ static const int reloc_size =
+ Reloc_types<sh_type, size, big_endian>::reloc_size;
+
+ // Construct the section.
+ Output_data_reloc_base()
+ : Output_section_data(Output_data::default_alignment(size))
+ { }
+
+ // Write out the data.
+ void
+ do_write(Output_file*);
+
+ protected:
+ // Set the entry size and the link.
+ void
+ do_adjust_output_section(Output_section *os);
+
+ // Add a relocation entry.
+ void
+ add(const Output_reloc_type& reloc)
+ {
+ this->relocs_.push_back(reloc);
+ this->set_data_size(this->relocs_.size() * reloc_size);
+ }
+
+ private:
+ typedef std::vector<Output_reloc_type> Relocs;
+
+ Relocs relocs_;
+};
+
+// The class which callers actually create.
+
+template<int sh_type, bool dynamic, int size, bool big_endian>
+class Output_data_reloc;
+
+// The SHT_REL version of Output_data_reloc.
+
+template<bool dynamic, int size, bool big_endian>
+class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
+ : public Output_data_reloc_base<elfcpp::SHT_REL, dynamic, size, big_endian>
+{
+ private:
+ typedef Output_data_reloc_base<elfcpp::SHT_REL, dynamic, size,
+ big_endian> Base;
+
+ public:
+ typedef typename Base::Output_reloc_type Output_reloc_type;
+ typedef typename Output_reloc_type::Address Address;
+
+ Output_data_reloc()
+ : Output_data_reloc_base<elfcpp::SHT_REL, dynamic, size, big_endian>()
+ { }
+
+ // Add a reloc against a global symbol.
+
+ void
+ add_global(Symbol* gsym, unsigned int type, Output_data* od, Address address)
+ { this->add(Output_reloc_type(gsym, type, od, address)); }
+
+ void
+ add_global(Symbol* gsym, unsigned int type, Relobj* relobj,
+ unsigned int shndx, Address address)
+ { this->add(Output_reloc_type(gsym, type, relobj, shndx, address)); }
+
+ // Add a reloc against a local symbol.
+
+ void
+ add_local(Sized_relobj<size, big_endian>* relobj,
+ unsigned int local_sym_index, unsigned int type,
+ Output_data* od, Address address)
+ { this->add(Output_reloc_type(relobj, local_sym_index, type, od, address)); }
+
+ void
+ add_local(Sized_relobj<size, big_endian>* relobj,
+ unsigned int local_sym_index, unsigned int type,
+ unsigned int shndx, Address address)
+ { this->add(Output_reloc_type(relobj, local_sym_index, type, shndx,
+ address)); }
+
+
+ // A reloc against the STT_SECTION symbol of an output section.
+
+ void
+ add_output_section(Output_section* os, unsigned int type,
+ Output_data* od, Address address)
+ { this->add(Output_reloc_type(os, type, od, address)); }
+
+ void
+ add_output_section(Output_section* os, unsigned int type,
+ Relobj* relobj, unsigned int shndx, Address address)
+ { this->add(Output_reloc_type(os, type, relobj, shndx, address)); }
+};
+
+// The SHT_RELA version of Output_data_reloc.
+
+template<bool dynamic, int size, bool big_endian>
+class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
+ : public Output_data_reloc_base<elfcpp::SHT_RELA, dynamic, size, big_endian>
+{
+ private:
+ typedef Output_data_reloc_base<elfcpp::SHT_RELA, dynamic, size,
+ big_endian> Base;
+
+ public:
+ typedef typename Base::Output_reloc_type Output_reloc_type;
+ typedef typename Output_reloc_type::Address Address;
+ typedef typename Output_reloc_type::Addend Addend;
+
+ Output_data_reloc()
+ : Output_data_reloc_base<elfcpp::SHT_RELA, dynamic, size, big_endian>()
+ { }
+
+ // Add a reloc against a global symbol.
+
+ void
+ add_global(Symbol* gsym, unsigned int type, Output_data* od,
+ Address address, Addend addend)
+ { this->add(Output_reloc_type(gsym, type, od, address, addend)); }
+
+ void
+ add_global(Symbol* gsym, unsigned int type, Relobj* relobj,
+ unsigned int shndx, Address address, Addend addend)
+ { this->add(Output_reloc_type(gsym, type, relobj, shndx, address, addend)); }
+
+ // Add a reloc against a local symbol.
+
+ void
+ add_local(Sized_relobj<size, big_endian>* relobj,
+ unsigned int local_sym_index, unsigned int type,
+ Output_data* od, Address address, Addend addend)
+ {
+ this->add(Output_reloc_type(relobj, local_sym_index, type, od, address,
+ addend));
+ }
+
+ void
+ add_local(Sized_relobj<size, big_endian>* relobj,
+ unsigned int local_sym_index, unsigned int type,
+ unsigned int shndx, Address address, Addend addend)
+ {
+ this->add(Output_reloc_type(relobj, local_sym_index, type, shndx, address,
+ addend));
+ }
+
+ // A reloc against the STT_SECTION symbol of an output section.
+
+ void
+ add_output_section(Output_section* os, unsigned int type, Output_data* od,
+ Address address, Addend addend)
+ { this->add(Output_reloc_type(os, type, od, address, addend)); }
+
+ void
+ add_output_section(Output_section* os, unsigned int type, Relobj* relobj,
+ unsigned int shndx, Address address, Addend addend)
+ { this->add(Output_reloc_type(os, type, relobj, shndx, address, addend)); }
+};
+
+// Output_data_got is used to manage a GOT. Each entry in the GOT is
+// for one symbol--either a global symbol or a local symbol in an
+// object. The target specific code adds entries to the GOT as
+// needed.
+
+template<int size, bool big_endian>
+class Output_data_got : public Output_section_data
+{
+ public:
+ typedef typename elfcpp::Elf_types<size>::Elf_Addr Valtype;
+
+ Output_data_got(const General_options* options)
+ : Output_section_data(Output_data::default_alignment(size)),
+ options_(options), entries_()
+ { }
+
+ // Add an entry for a global symbol to the GOT. Return true if this
+ // is a new GOT entry, false if the symbol was already in the GOT.
+ bool
+ add_global(Symbol* gsym);
+
+ // Add an entry for a local symbol to the GOT. This returns the
+ // offset of the new entry from the start of the GOT.
+ unsigned int
+ add_local(Object* object, unsigned int sym_index)
+ {
+ this->entries_.push_back(Got_entry(object, sym_index));
+ this->set_got_size();
+ return this->last_got_offset();
+ }
+
+ // Add a constant to the GOT. This returns the offset of the new
+ // entry from the start of the GOT.
+ unsigned int
+ add_constant(Valtype constant)
+ {
+ this->entries_.push_back(Got_entry(constant));
+ this->set_got_size();
+ return this->last_got_offset();
+ }
+
+ // Write out the GOT table.
+ void
+ do_write(Output_file*);
+
+ private:
+ // This POD class holds a single GOT entry.
+ class Got_entry
+ {
+ public:
+ // Create a zero entry.
+ Got_entry()
+ : local_sym_index_(CONSTANT_CODE)
+ { this->u_.constant = 0; }
+
+ // Create a global symbol entry.
+ explicit Got_entry(Symbol* gsym)
+ : local_sym_index_(GSYM_CODE)
+ { this->u_.gsym = gsym; }
+
+ // Create a local symbol entry.
+ Got_entry(Object* object, unsigned int local_sym_index)
+ : local_sym_index_(local_sym_index)
+ {
+ gold_assert(local_sym_index != GSYM_CODE
+ && local_sym_index != CONSTANT_CODE);
+ this->u_.object = object;
+ }
+
+ // Create a constant entry. The constant is a host value--it will
+ // be swapped, if necessary, when it is written out.
+ explicit Got_entry(Valtype constant)
+ : local_sym_index_(CONSTANT_CODE)
+ { this->u_.constant = constant; }
+
+ // Write the GOT entry to an output view.
+ void
+ write(const General_options*, unsigned char* pov) const;
+
+ private:
+ enum
+ {
+ GSYM_CODE = -1U,
+ CONSTANT_CODE = -2U
+ };
+
+ union
+ {
+ // For a local symbol, the object.
+ Object* object;
+ // For a global symbol, the symbol.
+ Symbol* gsym;
+ // For a constant, the constant.
+ Valtype constant;
+ } u_;
+ // For a local symbol, the local symbol index. This is GSYM_CODE
+ // for a global symbol, or CONSTANT_CODE for a constant.
+ unsigned int local_sym_index_;
+ };
+
+ typedef std::vector<Got_entry> Got_entries;
+
+ // Return the offset into the GOT of GOT entry I.
+ unsigned int
+ got_offset(unsigned int i) const
+ { return i * (size / 8); }
+
+ // Return the offset into the GOT of the last entry added.
+ unsigned int
+ last_got_offset() const
+ { return this->got_offset(this->entries_.size() - 1); }
+
+ // Set the size of the section.
+ void
+ set_got_size()
+ { this->set_data_size(this->got_offset(this->entries_.size())); }
+
+ // Options.
+ const General_options* options_;
+ // The list of GOT entries.
+ Got_entries entries_;
+};
+
+// Output_data_dynamic is used to hold the data in SHT_DYNAMIC
+// section.
+
+class Output_data_dynamic : public Output_section_data
+{
+ public:
+ Output_data_dynamic(const Target* target, Stringpool* pool)
+ : Output_section_data(Output_data::default_alignment(target->get_size())),
+ target_(target), entries_(), pool_(pool)
+ { }
+
+ // Add a new dynamic entry with a fixed numeric value.
+ void
+ add_constant(elfcpp::DT tag, unsigned int val)
+ { this->add_entry(Dynamic_entry(tag, val)); }
+
+ // Add a new dynamic entry with the address of output data.
+ void
+ add_section_address(elfcpp::DT tag, const Output_data* od)
+ { this->add_entry(Dynamic_entry(tag, od, false)); }
+
+ // Add a new dynamic entry with the size of output data.
+ void
+ add_section_size(elfcpp::DT tag, const Output_data* od)
+ { this->add_entry(Dynamic_entry(tag, od, true)); }
+
+ // Add a new dynamic entry with the address of a symbol.
+ void
+ add_symbol(elfcpp::DT tag, const Symbol* sym)
+ { this->add_entry(Dynamic_entry(tag, sym)); }
+
+ // Add a new dynamic entry with a string.
+ void
+ add_string(elfcpp::DT tag, const char* str)
+ { this->add_entry(Dynamic_entry(tag, this->pool_->add(str, NULL))); }
+
+ // Set the final data size.
+ void
+ do_set_address(uint64_t, off_t);
+
+ // Write out the dynamic entries.
+ void
+ do_write(Output_file*);
+
+ protected:
+ // Adjust the output section to set the entry size.
+ void
+ do_adjust_output_section(Output_section*);
+
+ private:
+ // This POD class holds a single dynamic entry.
+ class Dynamic_entry
+ {
+ public:
+ // Create an entry with a fixed numeric value.
+ Dynamic_entry(elfcpp::DT tag, unsigned int val)
+ : tag_(tag), classification_(DYNAMIC_NUMBER)
+ { this->u_.val = val; }
+
+ // Create an entry with the size or address of a section.
+ Dynamic_entry(elfcpp::DT tag, const Output_data* od, bool section_size)
+ : tag_(tag),
+ classification_(section_size
+ ? DYNAMIC_SECTION_SIZE
+ : DYNAMIC_SECTION_ADDRESS)
+ { this->u_.od = od; }
+
+ // Create an entry with the address of a symbol.
+ Dynamic_entry(elfcpp::DT tag, const Symbol* sym)
+ : tag_(tag), classification_(DYNAMIC_SYMBOL)
+ { this->u_.sym = sym; }
+
+ // Create an entry with a string.
+ Dynamic_entry(elfcpp::DT tag, const char* str)
+ : tag_(tag), classification_(DYNAMIC_STRING)
+ { this->u_.str = str; }
+
+ // Write the dynamic entry to an output view.
+ template<int size, bool big_endian>
+ void
+ write(unsigned char* pov, const Stringpool* ACCEPT_SIZE_ENDIAN) const;
+
+ private:
+ enum Classification
+ {
+ // Number.
+ DYNAMIC_NUMBER,
+ // Section address.
+ DYNAMIC_SECTION_ADDRESS,
+ // Section size.
+ DYNAMIC_SECTION_SIZE,
+ // Symbol adress.
+ DYNAMIC_SYMBOL,
+ // String.
+ DYNAMIC_STRING
+ };
+
+ union
+ {
+ // For DYNAMIC_NUMBER.
+ unsigned int val;
+ // For DYNAMIC_SECTION_ADDRESS and DYNAMIC_SECTION_SIZE.
+ const Output_data* od;
+ // For DYNAMIC_SYMBOL.
+ const Symbol* sym;
+ // For DYNAMIC_STRING.
+ const char* str;
+ } u_;
+ // The dynamic tag.
+ elfcpp::DT tag_;
+ // The type of entry.
+ Classification classification_;
+ };
+
+ // Add an entry to the list.
+ void
+ add_entry(const Dynamic_entry& entry)
+ { this->entries_.push_back(entry); }
+
+ // Sized version of write function.
+ template<int size, bool big_endian>
+ void
+ sized_write(Output_file* of);
+
+ // The type of the list of entries.
+ typedef std::vector<Dynamic_entry> Dynamic_entries;
+
+ // The target.
+ const Target* target_;
+ // The entries.
+ Dynamic_entries entries_;
+ // The pool used for strings.
+ Stringpool* pool_;
+};
+
+// An output section. We don't expect to have too many output
+// sections, so we don't bother to do a template on the size.
+
+class Output_section : public Output_data
+{
+ public:
+ // Create an output section, giving the name, type, and flags.
+ Output_section(const char* name, elfcpp::Elf_Word, elfcpp::Elf_Xword);
+ virtual ~Output_section();
+
+ // Add a new input section SHNDX, named NAME, with header SHDR, from
+ // object OBJECT. Return the offset within the output section.
+ template<int size, bool big_endian>
+ off_t
+ add_input_section(Relobj* object, unsigned int shndx, const char *name,
+ const elfcpp::Shdr<size, big_endian>& shdr);
+
+ // Add generated data POSD to this output section.
+ void
+ add_output_section_data(Output_section_data* posd);
+
+ // Return the section name.
+ const char*
+ name() const
+ { return this->name_; }
+
+ // Return the section type.
+ elfcpp::Elf_Word
+ type() const
+ { return this->type_; }
+
+ // Return the section flags.
+ elfcpp::Elf_Xword
+ flags() const
+ { return this->flags_; }
+
+ // Return the section index in the output file.
+ unsigned int
+ do_out_shndx() const
+ { return this->out_shndx_; }
+
+ // Set the output section index.
+ void
+ do_set_out_shndx(unsigned int shndx)
+ { this->out_shndx_ = shndx; }
+
+ // Return the entsize field.
+ uint64_t
+ entsize() const
+ { return this->entsize_; }
+
+ // Set the entsize field.
+ void
+ set_entsize(uint64_t v);
+
+ // Set the link field to the output section index of a section.
+ void
+ set_link_section(const Output_data* od)
+ {
+ gold_assert(this->link_ == 0
+ && !this->should_link_to_symtab_
+ && !this->should_link_to_dynsym_);
+ this->link_section_ = od;
+ }
+
+ // Set the link field to a constant.
+ void
+ set_link(unsigned int v)
+ {
+ gold_assert(this->link_section_ == NULL
+ && !this->should_link_to_symtab_
+ && !this->should_link_to_dynsym_);
+ this->link_ = v;
+ }
+
+ // Record that this section should link to the normal symbol table.
+ void
+ set_should_link_to_symtab()
+ {
+ gold_assert(this->link_section_ == NULL
+ && this->link_ == 0
+ && !this->should_link_to_dynsym_);
+ this->should_link_to_symtab_ = true;
+ }
+
+ // Record that this section should link to the dynamic symbol table.
+ void
+ set_should_link_to_dynsym()
+ {
+ gold_assert(this->link_section_ == NULL
+ && this->link_ == 0
+ && !this->should_link_to_symtab_);
+ this->should_link_to_dynsym_ = true;
+ }
+
+ // Return the info field.
+ unsigned int
+ info() const
+ {
+ gold_assert(this->info_section_ == NULL);
+ return this->info_;
+ }
+
+ // Set the info field to the output section index of a section.
+ void
+ set_info_section(const Output_data* od)
+ {
+ gold_assert(this->info_ == 0);
+ this->info_section_ = od;
+ }
+
+ // Set the info field to a constant.
+ void
+ set_info(unsigned int v)
+ {
+ gold_assert(this->info_section_ == NULL);
+ this->info_ = v;
+ }
+
+ // Set the addralign field.
+ void
+ set_addralign(uint64_t v)
+ { this->addralign_ = v; }
+
+ // Indicate that we need a symtab index.
+ void
+ set_needs_symtab_index()
+ { this->needs_symtab_index_ = true; }
+
+ // Return whether we need a symtab index.
+ bool
+ needs_symtab_index() const
+ { return this->needs_symtab_index_; }
+
+ // Get the symtab index.
+ unsigned int
+ symtab_index() const
+ {
+ gold_assert(this->symtab_index_ != 0);
+ return this->symtab_index_;
+ }
+
+ // Set the symtab index.
+ void
+ set_symtab_index(unsigned int index)
+ {
+ gold_assert(index != 0);
+ this->symtab_index_ = index;
+ }
+
+ // Indicate that we need a dynsym index.
+ void
+ set_needs_dynsym_index()
+ { this->needs_dynsym_index_ = true; }
+
+ // Return whether we need a dynsym index.
+ bool
+ needs_dynsym_index() const
+ { return this->needs_dynsym_index_; }
+
+ // Get the dynsym index.
+ unsigned int
+ dynsym_index() const
+ {
+ gold_assert(this->dynsym_index_ != 0);
+ return this->dynsym_index_;
+ }
+
+ // Set the dynsym index.
+ void
+ set_dynsym_index(unsigned int index)
+ {
+ gold_assert(index != 0);
+ this->dynsym_index_ = index;
+ }
+
+ // Return the output virtual address of OFFSET relative to the start
+ // of input section SHNDX in object OBJECT.
+ uint64_t
+ output_address(const Relobj* object, unsigned int shndx,
+ off_t offset) const;
+
+ // Set the address of the Output_section. For a typical
+ // Output_section, there is nothing to do, but if there are any
+ // Output_section_data objects we need to set the final addresses
+ // here.
+ void
+ do_set_address(uint64_t, off_t);
+
+ // Write the data to the file. For a typical Output_section, this
+ // does nothing: the data is written out by calling Object::Relocate
+ // on each input object. But if there are any Output_section_data
+ // objects we do need to write them out here.
+ void
+ do_write(Output_file*);
+
+ // Return the address alignment--function required by parent class.
+ uint64_t
+ do_addralign() const
+ { return this->addralign_; }
+
+ // Return whether this is an Output_section.
+ bool
+ do_is_section() const
+ { return true; }
+
+ // Return whether this is a section of the specified type.
+ bool
+ do_is_section_type(elfcpp::Elf_Word type) const
+ { return this->type_ == type; }
+
+ // Return whether the specified section flag is set.
+ bool
+ do_is_section_flag_set(elfcpp::Elf_Xword flag) const
+ { return (this->flags_ & flag) != 0; }
+
+ // Write the section header into *OPHDR.
+ template<int size, bool big_endian>
+ void
+ write_header(const Layout*, const Stringpool*,
+ elfcpp::Shdr_write<size, big_endian>*) const;
+
+ private:
+ // In some cases we need to keep a list of the input sections
+ // associated with this output section. We only need the list if we
+ // might have to change the offsets of the input section within the
+ // output section after we add the input section. The ordinary
+ // input sections will be written out when we process the object
+ // file, and as such we don't need to track them here. We do need
+ // to track Output_section_data objects here. We store instances of
+ // this structure in a std::vector, so it must be a POD. There can
+ // be many instances of this structure, so we use a union to save
+ // some space.
+ class Input_section
+ {
+ public:
+ Input_section()
+ : shndx_(0), p2align_(0)
+ {
+ this->u1_.data_size = 0;
+ this->u2_.object = NULL;
+ }
+
+ // For an ordinary input section.
+ Input_section(Relobj* object, unsigned int shndx, off_t data_size,
+ uint64_t addralign)
+ : shndx_(shndx),
+ p2align_(ffsll(static_cast<long long>(addralign)))
+ {
+ gold_assert(shndx != OUTPUT_SECTION_CODE
+ && shndx != MERGE_DATA_SECTION_CODE
+ && shndx != MERGE_STRING_SECTION_CODE);
+ this->u1_.data_size = data_size;
+ this->u2_.object = object;
+ }
+
+ // For a non-merge output section.
+ Input_section(Output_section_data* posd)
+ : shndx_(OUTPUT_SECTION_CODE),
+ p2align_(ffsll(static_cast<long long>(posd->addralign())))
+ {
+ this->u1_.data_size = 0;
+ this->u2_.posd = posd;
+ }
+
+ // For a merge section.
+ Input_section(Output_section_data* posd, bool is_string, uint64_t entsize)
+ : shndx_(is_string
+ ? MERGE_STRING_SECTION_CODE
+ : MERGE_DATA_SECTION_CODE),
+ p2align_(ffsll(static_cast<long long>(posd->addralign())))
+ {
+ this->u1_.entsize = entsize;
+ this->u2_.posd = posd;
+ }
+
+ // The required alignment.
+ uint64_t
+ addralign() const
+ {
+ return (this->p2align_ == 0
+ ? 0
+ : static_cast<uint64_t>(1) << (this->p2align_ - 1));
+ }
+
+ // Return the required size.
+ off_t
+ data_size() const;
+
+ // Return whether this is a merge section which matches the
+ // parameters.
+ bool
+ is_merge_section(bool is_string, uint64_t entsize) const
+ {
+ return (this->shndx_ == (is_string
+ ? MERGE_STRING_SECTION_CODE
+ : MERGE_DATA_SECTION_CODE)
+ && this->u1_.entsize == entsize);
+ }
+
+ // Set the output section.
+ void
+ set_output_section(Output_section* os)
+ {
+ gold_assert(!this->is_input_section());
+ this->u2_.posd->set_output_section(os);
+ }
+
+ // Set the address and file offset. This is called during
+ // Layout::finalize. SECOFF is the file offset of the enclosing
+ // section.
+ void
+ set_address(uint64_t addr, off_t off, off_t secoff);
+
+ // Add an input section, for SHF_MERGE sections.
+ bool
+ add_input_section(Relobj* object, unsigned int shndx)
+ {
+ gold_assert(this->shndx_ == MERGE_DATA_SECTION_CODE
+ || this->shndx_ == MERGE_STRING_SECTION_CODE);
+ return this->u2_.posd->add_input_section(object, shndx);
+ }
+
+ // Given an input OBJECT, an input section index SHNDX within that
+ // object, and an OFFSET relative to the start of that input
+ // section, return whether or not the output address is known.
+ // OUTPUT_SECTION_ADDRESS is the address of the output section
+ // which this is a part of. If this function returns true, it
+ // sets *POUTPUT to the output address.
+ bool
+ output_address(const Relobj* object, unsigned int shndx, off_t offset,
+ uint64_t output_section_address, uint64_t *poutput) const;
+
+ // Write out the data. This does nothing for an input section.
+ void
+ write(Output_file*);
+
+ private:
+ // Code values which appear in shndx_. If the value is not one of
+ // these codes, it is the input section index in the object file.
+ enum
+ {
+ // An Output_section_data.
+ OUTPUT_SECTION_CODE = -1U,
+ // An Output_section_data for an SHF_MERGE section with
+ // SHF_STRINGS not set.
+ MERGE_DATA_SECTION_CODE = -2U,
+ // An Output_section_data for an SHF_MERGE section with
+ // SHF_STRINGS set.
+ MERGE_STRING_SECTION_CODE = -3U
+ };
+
+ // Whether this is an input section.
+ bool
+ is_input_section() const
+ {
+ return (this->shndx_ != OUTPUT_SECTION_CODE
+ && this->shndx_ != MERGE_DATA_SECTION_CODE
+ && this->shndx_ != MERGE_STRING_SECTION_CODE);
+ }
+
+ // For an ordinary input section, this is the section index in the
+ // input file. For an Output_section_data, this is
+ // OUTPUT_SECTION_CODE or MERGE_DATA_SECTION_CODE or
+ // MERGE_STRING_SECTION_CODE.
+ unsigned int shndx_;
+ // The required alignment, stored as a power of 2.
+ unsigned int p2align_;
+ union
+ {
+ // For an ordinary input section, the section size.
+ off_t data_size;
+ // For OUTPUT_SECTION_CODE, this is not used. For
+ // MERGE_DATA_SECTION_CODE or MERGE_STRING_SECTION_CODE, the
+ // entity size.
+ uint64_t entsize;
+ } u1_;
+ union
+ {
+ // For an ordinary input section, the object which holds the
+ // input section.
+ Relobj* object;
+ // For OUTPUT_SECTION_CODE or MERGE_DATA_SECTION_CODE or
+ // MERGE_STRING_SECTION_CODE, the data.
+ Output_section_data* posd;
+ } u2_;
+ };
+
+ typedef std::vector<Input_section> Input_section_list;
+
+ // Add a new output section by Input_section.
+ void
+ add_output_section_data(Input_section*);
+
+ // Add an SHF_MERGE input section. Returns true if the section was
+ // handled.
+ bool
+ add_merge_input_section(Relobj* object, unsigned int shndx, uint64_t flags,
+ uint64_t entsize, uint64_t addralign);
+
+ // Add an output SHF_MERGE section POSD to this output section.
+ // IS_STRING indicates whether it is a SHF_STRINGS section, and
+ // ENTSIZE is the entity size. This returns the entry added to
+ // input_sections_.
+ void
+ add_output_merge_section(Output_section_data* posd, bool is_string,
+ uint64_t entsize);
+
+ // Most of these fields are only valid after layout.
+
+ // The name of the section. This will point into a Stringpool.
+ const char* name_;
+ // The section address is in the parent class.
+ // The section alignment.
+ uint64_t addralign_;
+ // The section entry size.
+ uint64_t entsize_;
+ // The file offset is in the parent class.
+ // Set the section link field to the index of this section.
+ const Output_data* link_section_;
+ // If link_section_ is NULL, this is the link field.
+ unsigned int link_;
+ // Set the section info field to the index of this section.
+ const Output_data* info_section_;
+ // If info_section_ is NULL, this is the section info field.
+ unsigned int info_;
+ // The section type.
+ elfcpp::Elf_Word type_;
+ // The section flags.
+ elfcpp::Elf_Xword flags_;
+ // The section index.
+ unsigned int out_shndx_;
+ // If there is a STT_SECTION for this output section in the normal
+ // symbol table, this is the symbol index. This starts out as zero.
+ // It is initialized in Layout::finalize() to be the index, or -1U
+ // if there isn't one.
+ unsigned int symtab_index_;
+ // If there is a STT_SECTION for this output section in the dynamic
+ // symbol table, this is the symbol index. This starts out as zero.
+ // It is initialized in Layout::finalize() to be the index, or -1U
+ // if there isn't one.
+ unsigned int dynsym_index_;
+ // The input sections. This will be empty in cases where we don't
+ // need to keep track of them.
+ Input_section_list input_sections_;
+ // The offset of the first entry in input_sections_.
+ off_t first_input_offset_;
+ // Whether this output section needs a STT_SECTION symbol in the
+ // normal symbol table. This will be true if there is a relocation
+ // which needs it.
+ bool needs_symtab_index_ : 1;
+ // Whether this output section needs a STT_SECTION symbol in the
+ // dynamic symbol table. This will be true if there is a dynamic
+ // relocation which needs it.
+ bool needs_dynsym_index_ : 1;
+ // Whether the link field of this output section should point to the
+ // normal symbol table.
+ bool should_link_to_symtab_ : 1;
+ // Whether the link field of this output section should point to the
+ // dynamic symbol table.
+ bool should_link_to_dynsym_ : 1;
+};
+
+// An output segment. PT_LOAD segments are built from collections of
+// output sections. Other segments typically point within PT_LOAD
+// segments, and are built directly as needed.
+
+class Output_segment
+{
+ public:
+ // Create an output segment, specifying the type and flags.
+ Output_segment(elfcpp::Elf_Word, elfcpp::Elf_Word);
+
+ // Return the virtual address.
+ uint64_t
+ vaddr() const
+ { return this->vaddr_; }
+
+ // Return the physical address.
+ uint64_t
+ paddr() const
+ { return this->paddr_; }
+
+ // Return the segment type.
+ elfcpp::Elf_Word
+ type() const
+ { return this->type_; }
+
+ // Return the segment flags.
+ elfcpp::Elf_Word
+ flags() const
+ { return this->flags_; }
+
+ // Return the memory size.
+ uint64_t
+ memsz() const
+ { return this->memsz_; }
+
+ // Return the file size.
+ off_t
+ filesz() const
+ { return this->filesz_; }
+
+ // Return the maximum alignment of the Output_data.
+ uint64_t
+ addralign();
+
+ // Add an Output_section to this segment.
+ void
+ add_output_section(Output_section* os, elfcpp::Elf_Word seg_flags)
+ { this->add_output_section(os, seg_flags, false); }
+
+ // Add an Output_section to the start of this segment.
+ void
+ add_initial_output_section(Output_section* os, elfcpp::Elf_Word seg_flags)
+ { this->add_output_section(os, seg_flags, true); }
+
+ // Add an Output_data (which is not an Output_section) to the start
+ // of this segment.
+ void
+ add_initial_output_data(Output_data*);
+
+ // Set the address of the segment to ADDR and the offset to *POFF
+ // (aligned if necessary), and set the addresses and offsets of all
+ // contained output sections accordingly. Set the section indexes
+ // of all contained output sections starting with *PSHNDX. Return
+ // the address of the immediately following segment. Update *POFF
+ // and *PSHNDX. This should only be called for a PT_LOAD segment.
+ uint64_t
+ set_section_addresses(uint64_t addr, off_t* poff, unsigned int* pshndx);
+
+ // Set the offset of this segment based on the section. This should
+ // only be called for a non-PT_LOAD segment.
+ void
+ set_offset();
+
+ // Return the number of output sections.
+ unsigned int
+ output_section_count() const;
+
+ // Write the segment header into *OPHDR.
+ template<int size, bool big_endian>
+ void
+ write_header(elfcpp::Phdr_write<size, big_endian>*);
+
+ // Write the section headers of associated sections into V.
+ template<int size, bool big_endian>
+ unsigned char*
+ write_section_headers(const Layout*, const Stringpool*, unsigned char* v,
+ unsigned int* pshndx ACCEPT_SIZE_ENDIAN) const;
+
+ private:
+ Output_segment(const Output_segment&);
+ Output_segment& operator=(const Output_segment&);
+
+ typedef std::list<Output_data*> Output_data_list;
+
+ // Add an Output_section to this segment, specifying front or back.
+ void
+ add_output_section(Output_section*, elfcpp::Elf_Word seg_flags,
+ bool front);
+
+ // Find the maximum alignment in an Output_data_list.
+ static uint64_t
+ maximum_alignment(const Output_data_list*);
+
+ // Set the section addresses in an Output_data_list.
+ uint64_t
+ set_section_list_addresses(Output_data_list*, uint64_t addr, off_t* poff,
+ unsigned int* pshndx);
+
+ // Return the number of Output_sections in an Output_data_list.
+ unsigned int
+ output_section_count_list(const Output_data_list*) const;
+
+ // Write the section headers in the list into V.
+ template<int size, bool big_endian>
+ unsigned char*
+ write_section_headers_list(const Layout*, const Stringpool*,
+ const Output_data_list*, unsigned char* v,
+ unsigned int* pshdx ACCEPT_SIZE_ENDIAN) const;
+
+ // The list of output data with contents attached to this segment.
+ Output_data_list output_data_;
+ // The list of output data without contents attached to this segment.
+ Output_data_list output_bss_;
+ // The segment virtual address.
+ uint64_t vaddr_;
+ // The segment physical address.
+ uint64_t paddr_;
+ // The size of the segment in memory.
+ uint64_t memsz_;
+ // The segment alignment.
+ uint64_t align_;
+ // The offset of the segment data within the file.
+ off_t offset_;
+ // The size of the segment data in the file.
+ off_t filesz_;
+ // The segment type;
+ elfcpp::Elf_Word type_;
+ // The segment flags.
+ elfcpp::Elf_Word flags_;
+ // Whether we have set align_.
+ bool is_align_known_;
+};
+
+// This class represents the output file.
+
+class Output_file
+{
+ public:
+ Output_file(const General_options& options);
+
+ // Open the output file. FILE_SIZE is the final size of the file.
+ void
+ open(off_t file_size);
+
+ // Close the output file and make sure there are no error.
+ void
+ close();
+
+ // We currently always use mmap which makes the view handling quite
+ // simple. In the future we may support other approaches.
+
+ // Write data to the output file.
+ void
+ write(off_t offset, const void* data, off_t len)
+ { memcpy(this->base_ + offset, data, len); }
+
+ // Get a buffer to use to write to the file, given the offset into
+ // the file and the size.
+ unsigned char*
+ get_output_view(off_t start, off_t size)
+ {
+ gold_assert(start >= 0 && size >= 0 && start + size <= this->file_size_);
+ return this->base_ + start;
+ }
+
+ // VIEW must have been returned by get_output_view. Write the
+ // buffer to the file, passing in the offset and the size.
+ void
+ write_output_view(off_t, off_t, unsigned char*)
+ { }
+
+ private:
+ // General options.
+ const General_options& options_;
+ // File name.
+ const char* name_;
+ // File descriptor.
+ int o_;
+ // File size.
+ off_t file_size_;
+ // Base of file mapped into memory.
+ unsigned char* base_;
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_OUTPUT_H)
diff --git a/gold/po/Make-in b/gold/po/Make-in
new file mode 100644
index 000000000000..88ce78fa6e46
--- /dev/null
+++ b/gold/po/Make-in
@@ -0,0 +1,256 @@
+# 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@
+top_builddir = @top_builddir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = $(prefix)/@DATADIRNAME@
+localedir = $(datadir)/locale
+gnulocaledir = $(prefix)/share/locale
+gettextsrcdir = $(prefix)/share/gettext/po
+subdir = po
+
+DESTDIR =
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+
+CC = @CC@
+GENCAT = @GENCAT@
+GMSGFMT = PATH=../src:$$PATH @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = PATH=../src:$$PATH @XGETTEXT@
+MSGMERGE = PATH=../src:$$PATH msgmerge
+
+DEFS = @DEFS@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+
+INCLUDES = -I.. -I$(top_srcdir)/intl
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+SOURCES = cat-id-tbl.c
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
+stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+INSTOBJEXT = @INSTOBJEXT@
+
+.SUFFIXES:
+.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
+
+.c.o:
+ $(COMPILE) $<
+
+.po.pox:
+ $(MAKE) $(PACKAGE).pot
+ $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
+
+.po.mo:
+ $(MSGFMT) -o $@ $<
+
+.po.gmo:
+ file=$(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 --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/gold/po/POTFILES.in b/gold/po/POTFILES.in
new file mode 100644
index 000000000000..0c4145af71a7
--- /dev/null
+++ b/gold/po/POTFILES.in
@@ -0,0 +1,46 @@
+archive.cc
+archive.h
+common.cc
+common.h
+defstd.cc
+defstd.h
+dirsearch.cc
+dirsearch.h
+dynobj.cc
+dynobj.h
+fileread.cc
+fileread.h
+gold.cc
+gold.h
+gold-threads.cc
+gold-threads.h
+i386.cc
+layout.cc
+layout.h
+merge.cc
+merge.h
+object.cc
+object.h
+options.cc
+options.h
+output.cc
+output.h
+readsyms.cc
+readsyms.h
+reloc.cc
+reloc.h
+reloc-types.h
+resolve.cc
+script.cc
+script-c.h
+script.h
+stringpool.cc
+stringpool.h
+symtab.cc
+symtab.h
+target.h
+target-reloc.h
+target-select.cc
+target-select.h
+workqueue.cc
+workqueue.h
diff --git a/gold/po/gold.pot b/gold/po/gold.pot
new file mode 100644
index 000000000000..79d0628dc44f
--- /dev/null
+++ b/gold/po/gold.pot
@@ -0,0 +1,654 @@
+# 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: 2007-05-16 10:40-0700\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"
+
+#: archive.cc:62
+#, c-format
+msgid "%s: %s: no archive symbol table (run ranlib)\n"
+msgstr ""
+
+#: archive.cc:91
+#, c-format
+msgid "%s: %s: bad archive symbol table names\n"
+msgstr ""
+
+#: archive.cc:129
+#, c-format
+msgid "%s; %s: malformed archive header at %ld\n"
+msgstr ""
+
+#: archive.cc:150
+#, c-format
+msgid "%s: %s: malformed archive header size at %ld\n"
+msgstr ""
+
+#: archive.cc:162
+#, c-format
+msgid "%s: %s: malformed archive header name at %ld\n"
+msgstr ""
+
+#: archive.cc:188
+#, c-format
+msgid "%s: %s: bad extended name index at %ld\n"
+msgstr ""
+
+#: archive.cc:199
+#, c-format
+msgid "%s: %s: bad extended name entry at header %ld\n"
+msgstr ""
+
+#: archive.cc:280 archive.cc:293
+#, c-format
+msgid "%s: %s: member at %ld is not an ELF object"
+msgstr ""
+
+#: dirsearch.cc:50
+#, c-format
+msgid "can not read directory %s"
+msgstr ""
+
+#: dynobj.cc:109
+#, c-format
+msgid "%s: %s: unexpected duplicate type %u section: %u, %u\n"
+msgstr ""
+
+#: dynobj.cc:150
+#, c-format
+msgid "%s: %s: unexpected link in section %u header: %u != %u\n"
+msgstr ""
+
+#: dynobj.cc:188
+#, c-format
+msgid "%s: %s: DYNAMIC section %u link out of range: %u\n"
+msgstr ""
+
+#: dynobj.cc:198
+#, c-format
+msgid "%s: %s: DYNAMIC section %u link %u is not a strtab\n"
+msgstr ""
+
+#: dynobj.cc:220
+#, c-format
+msgid "%s: %s: DT_SONAME value out of range: %lld >= %lld\n"
+msgstr ""
+
+#: dynobj.cc:237
+#, c-format
+msgid "%s: %s: missing DT_NULL in dynamic segment\n"
+msgstr ""
+
+#: dynobj.cc:285
+#, c-format
+msgid "%s: %s: invalid dynamic symbol table name index: %u\n"
+msgstr ""
+
+#: dynobj.cc:293
+#, c-format
+msgid "%s: %s: dynamic symbol table name section has wrong type: %u\n"
+msgstr ""
+
+#: dynobj.cc:368 object.cc:420
+#, c-format
+msgid "%s: %s: bad section name offset for section %u: %lu\n"
+msgstr ""
+
+#: dynobj.cc:399
+#, c-format
+msgid "%s: %s: duplicate definition for version %u\n"
+msgstr ""
+
+#: dynobj.cc:431
+#, c-format
+msgid "%s: %s: unexpected verdef version %u\n"
+msgstr ""
+
+#: dynobj.cc:447
+#, c-format
+msgid "%s: %s: verdef vd_cnt field too small: %u\n"
+msgstr ""
+
+#: dynobj.cc:456
+#, c-format
+msgid "%s: %s: verdef vd_aux field out of range: %u\n"
+msgstr ""
+
+#: dynobj.cc:468
+#, c-format
+msgid "%s: %s: verdaux vda_name field out of range: %u\n"
+msgstr ""
+
+#: dynobj.cc:479
+#, c-format
+msgid "%s: %s: verdef vd_next field out of range: %u\n"
+msgstr ""
+
+#: dynobj.cc:513
+#, c-format
+msgid "%s: %s: unexpected verneed version %u\n"
+msgstr ""
+
+#: dynobj.cc:524
+#, c-format
+msgid "%s: %s: verneed vn_aux field out of range: %u\n"
+msgstr ""
+
+#: dynobj.cc:539
+#, c-format
+msgid "%s: %s: vernaux vna_name field out of range: %u\n"
+msgstr ""
+
+#: dynobj.cc:552
+#, c-format
+msgid "%s: %s: verneed vna_next field out of range: %u\n"
+msgstr ""
+
+#: dynobj.cc:565
+#, c-format
+msgid "%s: %s: verneed vn_next field out of range: %u\n"
+msgstr ""
+
+#: dynobj.cc:613
+#, c-format
+msgid "%s: %s: size of dynamic symbols is not multiple of symbol size\n"
+msgstr ""
+
+#: dynobj.cc:1241
+#, c-format
+msgid "%s: symbol %s has undefined version %s\n"
+msgstr ""
+
+#: fileread.cc:55
+#, c-format
+msgid "%s: warning: close(%s) failed: %s"
+msgstr ""
+
+#: fileread.cc:143
+#, c-format
+msgid "%s: %s: lseek to %lld failed: %s"
+msgstr ""
+
+#: fileread.cc:153
+#, c-format
+msgid "%s: %s: read failed: %s\n"
+msgstr ""
+
+#: fileread.cc:173 fileread.cc:256
+#, c-format
+msgid "%s: %s: file too short: read only %lld of %lld bytes at %lld\n"
+msgstr ""
+
+#: fileread.cc:365
+#, c-format
+msgid "%s: cannot find %s\n"
+msgstr ""
+
+#: fileread.cc:373
+#, c-format
+msgid "%s: cannot open %s: %s\n"
+msgstr ""
+
+#: gold.cc:106
+msgid "no input files"
+msgstr ""
+
+#: gold-threads.cc:46
+msgid "pthead_mutextattr_init failed"
+msgstr ""
+
+#: gold-threads.cc:49
+msgid "pthread_mutextattr_settype failed"
+msgstr ""
+
+#: gold-threads.cc:53
+msgid "pthread_mutex_init failed"
+msgstr ""
+
+#: gold-threads.cc:56
+msgid "pthread_mutexattr_destroy failed"
+msgstr ""
+
+#: gold-threads.cc:62
+msgid "pthread_mutex_destroy failed"
+msgstr ""
+
+#: gold-threads.cc:69
+msgid "pthread_mutex_lock failed"
+msgstr ""
+
+#: gold-threads.cc:76
+msgid "pthread_mutex_unlock failed"
+msgstr ""
+
+#: gold-threads.cc:157
+msgid "pthread_cond_init failed"
+msgstr ""
+
+#: gold-threads.cc:163
+msgid "pthread_cond_destroy failed"
+msgstr ""
+
+#: gold-threads.cc:170
+msgid "pthread_cond_wait failed"
+msgstr ""
+
+#: gold-threads.cc:177
+msgid "pthread_cond_signal failed"
+msgstr ""
+
+#. FIXME: This needs to specify the location somehow.
+#: i386.cc:100
+#, c-format
+msgid "%s: missing expected TLS relocation\n"
+msgstr ""
+
+#: i386.cc:729 i386.cc:870 i386.cc:1136
+#, c-format
+msgid "%s: %s: unexpected reloc %u in object file\n"
+msgstr ""
+
+#: i386.cc:765 i386.cc:784
+#, c-format
+msgid "%s: %s: unsupported reloc %u against local symbol\n"
+msgstr ""
+
+#: i386.cc:906 i386.cc:927
+#, c-format
+msgid "%s: %s: unsupported reloc %u against global symbol %s\n"
+msgstr ""
+
+#: i386.cc:950
+#, c-format
+msgid "%s: %s: unsupported RELA reloc section\n"
+msgstr ""
+
+#: i386.cc:1041
+#, c-format
+msgid "%s: %s: missing expected TLS relocation\n"
+msgstr ""
+
+#: i386.cc:1168 i386.cc:1245 i386.cc:1256
+#, c-format
+msgid "%s: %s: unsupported reloc %u\n"
+msgstr ""
+
+#: i386.cc:1195
+#, c-format
+msgid "%s: %s: TLS reloc but no TLS segment\n"
+msgstr ""
+
+#: i386.cc:1230
+#, c-format
+msgid "%s: %s: unsupported reloc type %u\n"
+msgstr ""
+
+#: i386.cc:1439
+#, c-format
+msgid "%s: %s: TLS relocation out of range\n"
+msgstr ""
+
+#: i386.cc:1457
+#, c-format
+msgid "%s: %s: TLS relocation against invalid instruction\n"
+msgstr ""
+
+#: merge.cc:252
+#, c-format
+msgid ""
+"%s: %s: mergeable string section length not multiple of character size\n"
+msgstr ""
+
+#: merge.cc:269
+#, c-format
+msgid "%s: %s: entry in mergeable string section not null terminated\n"
+msgstr ""
+
+#: object.cc:30
+#, c-format
+msgid "%s: %s: unsupported ELF machine number %d\n"
+msgstr ""
+
+#: object.cc:86
+#, c-format
+msgid "%s: %s: section name section has wrong type: %u\n"
+msgstr ""
+
+#: object.cc:228
+#, c-format
+msgid "%s: %s: invalid symbol table name index: %u\n"
+msgstr ""
+
+#: object.cc:236
+#, c-format
+msgid "%s: %s: symbol table name section has wrong type: %u\n"
+msgstr ""
+
+#: object.cc:292
+#, c-format
+msgid "%s: %s: section group %u info %u out of range\n"
+msgstr ""
+
+#: object.cc:309
+#, c-format
+msgid "%s: %s: symbol %u name offset %u out of range\n"
+msgstr ""
+
+#: object.cc:343
+#, c-format
+msgid "%s: %s: section %u in section group %u out of range"
+msgstr ""
+
+#: object.cc:487
+#, c-format
+msgid "%s: %s: size of symbols is not multiple of symbol size\n"
+msgstr ""
+
+#: object.cc:575
+#, c-format
+msgid "%s: %s: unknown section index %u for local symbol %u\n"
+msgstr ""
+
+#: object.cc:586
+#, c-format
+msgid "%s: %s: local symbol %u section index %u out of range\n"
+msgstr ""
+
+#: object.cc:620
+#, c-format
+msgid "%s: %s: local symbol %u section name out of range: %u >= %u\n"
+msgstr ""
+
+#: object.cc:834
+#, c-format
+msgid "%s: %s: unsupported ELF file type %d\n"
+msgstr ""
+
+#: object.cc:853 object.cc:906 object.cc:927
+#, c-format
+msgid "%s: %s: ELF file too short\n"
+msgstr ""
+
+#: object.cc:862
+#, c-format
+msgid "%s: %s: invalid ELF version 0\n"
+msgstr ""
+
+#: object.cc:865
+#, c-format
+msgid "%s: %s: unsupported ELF version %d\n"
+msgstr ""
+
+#: object.cc:873
+#, c-format
+msgid "%s: %s: invalid ELF class 0\n"
+msgstr ""
+
+#: object.cc:880
+#, c-format
+msgid "%s: %s: unsupported ELF class %d\n"
+msgstr ""
+
+#: object.cc:888
+#, c-format
+msgid "%s: %s: invalid ELF data encoding\n"
+msgstr ""
+
+#: object.cc:895
+#, c-format
+msgid "%s: %s: unsupported ELF data encoding %d\n"
+msgstr ""
+
+#: options.cc:115
+#, c-format
+msgid ""
+"Usage: %s [options] file...\n"
+"Options:\n"
+msgstr ""
+
+#: options.cc:227
+msgid "Search for library LIBNAME"
+msgstr ""
+
+#: options.cc:228
+msgid "-lLIBNAME --library LIBNAME"
+msgstr ""
+
+#: options.cc:230
+msgid "Start a library search group"
+msgstr ""
+
+#: options.cc:232
+msgid "End a library search group"
+msgstr ""
+
+#: options.cc:234
+msgid "Set dynamic linker path"
+msgstr ""
+
+#: options.cc:235
+msgid "-I PROGRAM, --dynamic-linker PROGRAM"
+msgstr ""
+
+#: options.cc:237
+msgid "Add directory to search path"
+msgstr ""
+
+#: options.cc:238
+msgid "-L DIR, --library-path DIR"
+msgstr ""
+
+#: options.cc:240
+msgid "Ignored for compatibility"
+msgstr ""
+
+#: options.cc:242
+msgid "Set output file name"
+msgstr ""
+
+#: options.cc:243
+msgid "-o FILE, --output FILE"
+msgstr ""
+
+#: options.cc:245
+msgid "Generate relocatable output"
+msgstr ""
+
+#: options.cc:247
+msgid "Generate shared library"
+msgstr ""
+
+#: options.cc:249
+msgid "Do not link against shared libraries"
+msgstr ""
+
+#: options.cc:252
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr ""
+
+#: options.cc:255
+msgid "Always DT_NEEDED for following dynamic libs (default)"
+msgstr ""
+
+#: options.cc:257
+msgid "Report usage information"
+msgstr ""
+
+#: options.cc:393 options.cc:444 options.cc:523
+msgid "missing argument"
+msgstr ""
+
+#: options.cc:406 options.cc:453
+msgid "unknown option"
+msgstr ""
+
+#: options.cc:461
+#, c-format
+msgid "%s: missing group end"
+msgstr ""
+
+#: options.cc:536
+msgid "may not nest groups"
+msgstr ""
+
+#: options.cc:546
+msgid "group end without group start"
+msgstr ""
+
+#: options.cc:556
+#, c-format
+msgid "%s: use the --help option for usage information\n"
+msgstr ""
+
+#: options.cc:565 script.cc:1133
+#, c-format
+msgid "%s: %s: %s\n"
+msgstr ""
+
+#: options.cc:574
+#, c-format
+msgid "%s: -%c: %s\n"
+msgstr ""
+
+#: output.cc:903
+#, c-format
+msgid "%s: %s: invalid alignment %lu for section \"%s\"\n"
+msgstr ""
+
+#: output.cc:1519
+#, c-format
+msgid "%s: %s: open: %s\n"
+msgstr ""
+
+#: output.cc:1528
+#, c-format
+msgid "%s: %s: lseek: %s\n"
+msgstr ""
+
+#: output.cc:1535
+#, c-format
+msgid "%s: %s: write: %s\n"
+msgstr ""
+
+#: output.cc:1545
+#, c-format
+msgid "%s: %s: mmap: %s\n"
+msgstr ""
+
+#: output.cc:1559
+#, c-format
+msgid "%s: %s: munmap: %s\n"
+msgstr ""
+
+#: output.cc:1567
+#, c-format
+msgid "%s: %s: close: %s\n"
+msgstr ""
+
+#: readsyms.cc:93
+#, c-format
+msgid "%s: %s: ordinary object found in input group\n"
+msgstr ""
+
+#: readsyms.cc:136
+#, c-format
+msgid "%s: %s: file is empty\n"
+msgstr ""
+
+#. Here we have to handle any other input file types we need.
+#: readsyms.cc:149
+#, c-format
+msgid "%s: %s: not an object or archive\n"
+msgstr ""
+
+#: reloc.cc:169 reloc.cc:413
+#, c-format
+msgid "%s: %s: relocation section %u has bad info %u\n"
+msgstr ""
+
+#: reloc.cc:188 reloc.cc:430
+#, c-format
+msgid "%s: %s: relocation section %u uses unexpected symbol table %u\n"
+msgstr ""
+
+#: reloc.cc:204 reloc.cc:449
+#, c-format
+msgid "%s: %s: unexpected entsize for reloc section %u: %lu != %u"
+msgstr ""
+
+#: reloc.cc:215 reloc.cc:460
+#, c-format
+msgid "%s: %s: reloc section %u size %lu uneven"
+msgstr ""
+
+#: resolve.cc:147
+#, c-format
+msgid "%s: %s: invalid STB_LOCAL symbol %s in external symbols\n"
+msgstr ""
+
+#: resolve.cc:153
+#, c-format
+msgid "%s: %s: unsupported symbol binding %d for symbol %s\n"
+msgstr ""
+
+#: symtab.cc:450 symtab.cc:547
+#, c-format
+msgid "%s: %s: mixing 32-bit and 64-bit ELF objects\n"
+msgstr ""
+
+#: symtab.cc:467
+#, c-format
+msgid "%s: %s: bad global symbol name offset %u at %lu\n"
+msgstr ""
+
+#: symtab.cc:554
+#, c-format
+msgid "%s: %s: too few symbol versions\n"
+msgstr ""
+
+#: symtab.cc:574
+#, c-format
+msgid "%s: %s: bad symbol name offset %u at %lu\n"
+msgstr ""
+
+#: symtab.cc:618
+#, c-format
+msgid "%s: %s: versym for symbol %zu out of range: %u\n"
+msgstr ""
+
+#: symtab.cc:626
+#, c-format
+msgid "%s: %s: versym for symbol %zu has no name: %u\n"
+msgstr ""
+
+#: symtab.cc:1106 symtab.cc:1278
+#, c-format
+msgid "%s: %s: unsupported symbol section 0x%x\n"
+msgstr ""
+
+#: symtab.cc:1471
+#, c-format
+msgid "%s: %s: warning: %s\n"
+msgstr ""
+
+#: target-reloc.h:170
+#, c-format
+msgid "%s: %s: reloc has bad offset %zu\n"
+msgstr ""
+
+#: target-reloc.h:180
+#, c-format
+msgid "%s: %s: undefined reference to '%s'\n"
+msgstr ""
diff --git a/gold/readsyms.cc b/gold/readsyms.cc
new file mode 100644
index 000000000000..86828fc0a7c4
--- /dev/null
+++ b/gold/readsyms.cc
@@ -0,0 +1,313 @@
+// readsyms.cc -- read input file symbols for gold
+
+#include "gold.h"
+
+#include <cstring>
+
+#include "elfcpp.h"
+#include "options.h"
+#include "dirsearch.h"
+#include "symtab.h"
+#include "object.h"
+#include "archive.h"
+#include "script.h"
+#include "readsyms.h"
+
+namespace gold
+{
+
+// Class read_symbols.
+
+Read_symbols::~Read_symbols()
+{
+ // The this_blocker_ and next_blocker_ pointers are passed on to the
+ // Add_symbols task.
+}
+
+// Return whether a Read_symbols task is runnable. We can read an
+// ordinary input file immediately. For an archive specified using
+// -l, we have to wait until the search path is complete.
+
+Task::Is_runnable_type
+Read_symbols::is_runnable(Workqueue*)
+{
+ if (this->input_argument_->is_file()
+ && this->input_argument_->file().is_lib()
+ && this->dirpath_.token().is_blocked())
+ return IS_BLOCKED;
+
+ return IS_RUNNABLE;
+}
+
+// Return a Task_locker for a Read_symbols task. We don't need any
+// locks here.
+
+Task_locker*
+Read_symbols::locks(Workqueue*)
+{
+ return NULL;
+}
+
+// Run a Read_symbols task. This is where we actually read the
+// symbols and relocations.
+
+void
+Read_symbols::run(Workqueue* workqueue)
+{
+ if (this->input_argument_->is_group())
+ {
+ gold_assert(this->input_group_ == NULL);
+ this->do_group(workqueue);
+ return;
+ }
+
+ Input_file* input_file = new Input_file(&this->input_argument_->file());
+ input_file->open(this->options_, this->dirpath_);
+
+ // Read enough of the file to pick up the entire ELF header.
+
+ int ehdr_size = elfcpp::Elf_sizes<64>::ehdr_size;
+ off_t bytes;
+ const unsigned char* p = input_file->file().get_view(0, ehdr_size, &bytes);
+ if (bytes >= 4)
+ {
+ static unsigned char elfmagic[4] =
+ {
+ elfcpp::ELFMAG0, elfcpp::ELFMAG1,
+ elfcpp::ELFMAG2, elfcpp::ELFMAG3
+ };
+ if (memcmp(p, elfmagic, 4) == 0)
+ {
+ // This is an ELF object.
+
+ Object* obj = make_elf_object(input_file->filename(),
+ input_file, 0, p, bytes);
+
+ // We don't have a way to record a non-archive in an input
+ // group. If this is an ordinary object file, we can't
+ // include it more than once anyhow. If this is a dynamic
+ // object, then including it a second time changes nothing.
+ if (this->input_group_ != NULL && !obj->is_dynamic())
+ {
+ fprintf(stderr,
+ _("%s: %s: ordinary object found in input group\n"),
+ program_name, input_file->name());
+ gold_exit(false);
+ }
+
+ Read_symbols_data* sd = new Read_symbols_data;
+ obj->read_symbols(sd);
+ workqueue->queue_front(new Add_symbols(this->options_,
+ this->input_objects_,
+ this->symtab_, this->layout_,
+ obj, sd,
+ this->this_blocker_,
+ this->next_blocker_));
+
+ // Opening the file locked it, so now we need to unlock it.
+ input_file->file().unlock();
+
+ return;
+ }
+ }
+
+ if (bytes >= Archive::sarmag)
+ {
+ if (memcmp(p, Archive::armag, Archive::sarmag) == 0)
+ {
+ // This is an archive.
+ Archive* arch = new Archive(this->input_argument_->file().name(),
+ input_file);
+ arch->setup();
+ workqueue->queue(new Add_archive_symbols(this->options_,
+ this->symtab_,
+ this->layout_,
+ this->input_objects_,
+ arch,
+ this->input_group_,
+ this->this_blocker_,
+ this->next_blocker_));
+ return;
+ }
+ }
+
+ if (bytes == 0)
+ {
+ fprintf(stderr, _("%s: %s: file is empty\n"),
+ program_name, input_file->file().filename().c_str());
+ gold_exit(false);
+ }
+
+ // Try to parse this file as a script.
+ if (read_input_script(workqueue, this->options_, this->symtab_,
+ this->layout_, this->dirpath_, this->input_objects_,
+ this->input_group_, this->input_argument_, input_file,
+ p, bytes, this->this_blocker_, this->next_blocker_))
+ return;
+
+ // Here we have to handle any other input file types we need.
+ fprintf(stderr, _("%s: %s: not an object or archive\n"),
+ program_name, input_file->file().filename().c_str());
+ gold_exit(false);
+}
+
+// Handle a group. We need to walk through the arguments over and
+// over until we don't see any new undefined symbols. We do this by
+// setting off Read_symbols Tasks as usual, but recording the archive
+// entries instead of deleting them. We also start a Finish_group
+// Task which runs after we've read all the symbols. In that task we
+// process the archives in a loop until we are done.
+
+void
+Read_symbols::do_group(Workqueue* workqueue)
+{
+ Input_group* input_group = new Input_group();
+
+ const Input_file_group* group = this->input_argument_->group();
+ Task_token* this_blocker = this->this_blocker_;
+ for (Input_file_group::const_iterator p = group->begin();
+ p != group->end();
+ ++p)
+ {
+ const Input_argument* arg = &*p;
+ gold_assert(arg->is_file());
+
+ Task_token* next_blocker = new Task_token();
+ next_blocker->add_blocker();
+ workqueue->queue(new Read_symbols(this->options_, this->input_objects_,
+ this->symtab_, this->layout_,
+ this->dirpath_, arg, input_group,
+ this_blocker, next_blocker));
+ this_blocker = next_blocker;
+ }
+
+ const int saw_undefined = this->symtab_->saw_undefined();
+ workqueue->queue(new Finish_group(this->options_,
+ this->input_objects_,
+ this->symtab_,
+ this->layout_,
+ input_group,
+ saw_undefined,
+ this_blocker,
+ this->next_blocker_));
+}
+
+// Class Add_symbols.
+
+Add_symbols::~Add_symbols()
+{
+ if (this->this_blocker_ != NULL)
+ delete this->this_blocker_;
+ // next_blocker_ is deleted by the task associated with the next
+ // input file.
+}
+
+// We are blocked by this_blocker_. We block next_blocker_. We also
+// lock the file.
+
+Task::Is_runnable_type
+Add_symbols::is_runnable(Workqueue*)
+{
+ if (this->this_blocker_ != NULL && this->this_blocker_->is_blocked())
+ return IS_BLOCKED;
+ if (this->object_->is_locked())
+ return IS_LOCKED;
+ return IS_RUNNABLE;
+}
+
+class Add_symbols::Add_symbols_locker : public Task_locker
+{
+ public:
+ Add_symbols_locker(Task_token& token, Workqueue* workqueue,
+ Object* object)
+ : blocker_(token, workqueue), objlock_(*object)
+ { }
+
+ private:
+ Task_locker_block blocker_;
+ Task_locker_obj<Object> objlock_;
+};
+
+Task_locker*
+Add_symbols::locks(Workqueue* workqueue)
+{
+ return new Add_symbols_locker(*this->next_blocker_, workqueue,
+ this->object_);
+}
+
+// Add the symbols in the object to the symbol table.
+
+void
+Add_symbols::run(Workqueue*)
+{
+ if (!this->input_objects_->add_object(this->object_))
+ {
+ // FIXME: We need to close the descriptor here.
+ delete this->object_;
+ }
+ else
+ {
+ this->object_->layout(this->options_, this->symtab_, this->layout_,
+ this->sd_);
+ this->object_->add_symbols(this->symtab_, this->sd_);
+ }
+ delete this->sd_;
+ this->sd_ = NULL;
+}
+
+// Class Finish_group.
+
+Finish_group::~Finish_group()
+{
+ if (this->this_blocker_ != NULL)
+ delete this->this_blocker_;
+ // next_blocker_ is deleted by the task associated with the next
+ // input file following the group.
+}
+
+// We need to wait for THIS_BLOCKER_ and unblock NEXT_BLOCKER_.
+
+Task::Is_runnable_type
+Finish_group::is_runnable(Workqueue*)
+{
+ if (this->this_blocker_ != NULL && this->this_blocker_->is_blocked())
+ return IS_BLOCKED;
+ return IS_RUNNABLE;
+}
+
+Task_locker*
+Finish_group::locks(Workqueue* workqueue)
+{
+ return new Task_locker_block(*this->next_blocker_, workqueue);
+}
+
+// Loop over the archives until there are no new undefined symbols.
+
+void
+Finish_group::run(Workqueue*)
+{
+ int saw_undefined = this->saw_undefined_;
+ while (saw_undefined != this->symtab_->saw_undefined())
+ {
+ saw_undefined = this->symtab_->saw_undefined();
+
+ for (Input_group::const_iterator p = this->input_group_->begin();
+ p != this->input_group_->end();
+ ++p)
+ {
+ Task_lock_obj<Archive> tl(**p);
+
+ (*p)->add_symbols(this->options_, this->symtab_, this->layout_,
+ this->input_objects_);
+ }
+ }
+
+ // Delete all the archives now that we no longer need them.
+ for (Input_group::const_iterator p = this->input_group_->begin();
+ p != this->input_group_->end();
+ ++p)
+ delete *p;
+ delete this->input_group_;
+}
+
+} // End namespace gold.
diff --git a/gold/readsyms.h b/gold/readsyms.h
new file mode 100644
index 000000000000..d5ada61d25ed
--- /dev/null
+++ b/gold/readsyms.h
@@ -0,0 +1,194 @@
+// readsyms.h -- read input file symbols for gold -*- C++ -*-
+
+#ifndef GOLD_READSYMS_H
+#define GOLD_READSYMS_H
+
+#include <vector>
+
+#include "workqueue.h"
+#include "object.h"
+
+namespace gold
+{
+
+class Input_objects;
+class Symbol_table;
+class Input_group;
+class Archive;
+
+// This Task is responsible for reading the symbols from an input
+// file. This also includes reading the relocations so that we can
+// check for any that require a PLT and/or a GOT. After the data has
+// been read, this queues up another task to actually add the symbols
+// to the symbol table. The tasks are separated because the file
+// reading can occur in parallel but adding the symbols must be done
+// in the order of the input files.
+
+class Read_symbols : public Task
+{
+ public:
+ // DIRPATH is the list of directories to search for libraries.
+ // INPUT is the file to read. INPUT_GROUP is not NULL if we are in
+ // the middle of an input group. THIS_BLOCKER is used to prevent
+ // the associated Add_symbols task from running before the previous
+ // one has completed; it will be NULL for the first task.
+ // NEXT_BLOCKER is used to block the next input file from adding
+ // symbols.
+ Read_symbols(const General_options& options, Input_objects* input_objects,
+ Symbol_table* symtab, Layout* layout, const Dirsearch& dirpath,
+ const Input_argument* input_argument, Input_group* input_group,
+ Task_token* this_blocker, Task_token* next_blocker)
+ : options_(options), input_objects_(input_objects), symtab_(symtab),
+ layout_(layout), dirpath_(dirpath), input_argument_(input_argument),
+ input_group_(input_group), this_blocker_(this_blocker),
+ next_blocker_(next_blocker)
+ { }
+
+ ~Read_symbols();
+
+ // The standard Task methods.
+
+ Is_runnable_type
+ is_runnable(Workqueue*);
+
+ Task_locker*
+ locks(Workqueue*);
+
+ void
+ run(Workqueue*);
+
+ private:
+ // Handle an archive group.
+ void
+ do_group(Workqueue*);
+
+ const General_options& options_;
+ Input_objects* input_objects_;
+ Symbol_table* symtab_;
+ Layout* layout_;
+ const Dirsearch& dirpath_;
+ const Input_argument* input_argument_;
+ Input_group* input_group_;
+ Task_token* this_blocker_;
+ Task_token* next_blocker_;
+};
+
+// This Task handles adding the symbols to the symbol table. These
+// tasks must be run in the same order as the arguments appear on the
+// command line.
+
+class Add_symbols : public Task
+{
+ public:
+ // THIS_BLOCKER is used to prevent this task from running before the
+ // one for the previous input file. NEXT_BLOCKER is used to prevent
+ // the next task from running.
+ Add_symbols(const General_options& options, Input_objects* input_objects,
+ Symbol_table* symtab, Layout* layout, Object* object,
+ Read_symbols_data* sd, Task_token* this_blocker,
+ Task_token* next_blocker)
+ : options_(options), input_objects_(input_objects), symtab_(symtab),
+ layout_(layout), object_(object), sd_(sd), this_blocker_(this_blocker),
+ next_blocker_(next_blocker)
+ { }
+
+ ~Add_symbols();
+
+ // The standard Task methods.
+
+ Is_runnable_type
+ is_runnable(Workqueue*);
+
+ Task_locker*
+ locks(Workqueue*);
+
+ void
+ run(Workqueue*);
+
+private:
+ class Add_symbols_locker;
+
+ const General_options& options_;
+ Input_objects* input_objects_;
+ Symbol_table* symtab_;
+ Layout* layout_;
+ Object* object_;
+ Read_symbols_data* sd_;
+ Task_token* this_blocker_;
+ Task_token* next_blocker_;
+};
+
+// This class is used to track the archives in a group.
+
+class Input_group
+{
+ public:
+ typedef std::vector<Archive*> Archives;
+ typedef Archives::const_iterator const_iterator;
+
+ Input_group()
+ : archives_()
+ { }
+
+ // Add an archive to the group.
+ void
+ add_archive(Archive* arch)
+ { this->archives_.push_back(arch); }
+
+ // Loop over the archives in the group.
+
+ const_iterator
+ begin() const
+ { return this->archives_.begin(); }
+
+ const_iterator
+ end() const
+ { return this->archives_.end(); }
+
+ private:
+ Archives archives_;
+};
+
+// This class is used to finish up handling a group. It is just a
+// closure.
+
+class Finish_group : public Task
+{
+ public:
+ Finish_group(const General_options& options, Input_objects* input_objects,
+ Symbol_table* symtab, Layout* layout, Input_group* input_group,
+ int saw_undefined, Task_token* this_blocker,
+ Task_token* next_blocker)
+ : options_(options), input_objects_(input_objects), symtab_(symtab),
+ layout_(layout), input_group_(input_group),
+ saw_undefined_(saw_undefined), this_blocker_(this_blocker),
+ next_blocker_(next_blocker)
+ { }
+
+ ~Finish_group();
+
+ // The standard Task methods.
+
+ Is_runnable_type
+ is_runnable(Workqueue*);
+
+ Task_locker*
+ locks(Workqueue*);
+
+ void
+ run(Workqueue*);
+
+ private:
+ const General_options& options_;
+ Input_objects* input_objects_;
+ Symbol_table* symtab_;
+ Layout* layout_;
+ Input_group* input_group_;
+ int saw_undefined_;
+ Task_token* this_blocker_;
+ Task_token* next_blocker_;
+};
+
+} // end namespace gold
+
+#endif // !defined(GOLD_READSYMS_H)
diff --git a/gold/reloc-types.h b/gold/reloc-types.h
new file mode 100644
index 000000000000..62538d60117c
--- /dev/null
+++ b/gold/reloc-types.h
@@ -0,0 +1,36 @@
+// reloc-types.h -- ELF relocation templates for gold -*- C++ -*-
+
+// This header files defines a few convenient templated types for use
+// when handling ELF relocations.
+
+#ifndef GOLD_RELOC_TYPES_H
+#define GOLD_RELOC_TYPES_H
+
+#include "elfcpp.h"
+
+namespace gold
+{
+
+// Pick the ELF relocation accessor class and the size based on
+// SH_TYPE, which is either elfcpp::SHT_REL or elfcpp::SHT_RELA.
+
+template<int sh_type, int size, bool big_endian>
+struct Reloc_types;
+
+template<int size, bool big_endian>
+struct Reloc_types<elfcpp::SHT_REL, size, big_endian>
+{
+ typedef typename elfcpp::Rel<size, big_endian> Reloc;
+ static const int reloc_size = elfcpp::Elf_sizes<size>::rel_size;
+};
+
+template<int size, bool big_endian>
+struct Reloc_types<elfcpp::SHT_RELA, size, big_endian>
+{
+ typedef typename elfcpp::Rela<size, big_endian> Reloc;
+ static const int reloc_size = elfcpp::Elf_sizes<size>::rela_size;
+};
+
+}; // End namespace gold.
+
+#endif // !defined(GOLD_RELOC_TYPE_SH)
diff --git a/gold/reloc.cc b/gold/reloc.cc
new file mode 100644
index 000000000000..76ab19613953
--- /dev/null
+++ b/gold/reloc.cc
@@ -0,0 +1,738 @@
+// reloc.cc -- relocate input files for gold.
+
+#include "gold.h"
+
+#include "workqueue.h"
+#include "object.h"
+#include "symtab.h"
+#include "output.h"
+#include "reloc.h"
+
+namespace gold
+{
+
+// Read_relocs methods.
+
+// These tasks just read the relocation information from the file.
+// After reading it, the start another task to process the
+// information. These tasks requires access to the file.
+
+Task::Is_runnable_type
+Read_relocs::is_runnable(Workqueue*)
+{
+ return this->object_->is_locked() ? IS_LOCKED : IS_RUNNABLE;
+}
+
+// Lock the file.
+
+Task_locker*
+Read_relocs::locks(Workqueue*)
+{
+ return new Task_locker_obj<Object>(*this->object_);
+}
+
+// Read the relocations and then start a Scan_relocs_task.
+
+void
+Read_relocs::run(Workqueue* workqueue)
+{
+ Read_relocs_data *rd = new Read_relocs_data;
+ this->object_->read_relocs(rd);
+ workqueue->queue_front(new Scan_relocs(this->options_, this->symtab_,
+ this->layout_, this->object_, rd,
+ this->symtab_lock_, this->blocker_));
+}
+
+// Scan_relocs methods.
+
+// These tasks scan the relocations read by Read_relocs and mark up
+// the symbol table to indicate which relocations are required. We
+// use a lock on the symbol table to keep them from interfering with
+// each other.
+
+Task::Is_runnable_type
+Scan_relocs::is_runnable(Workqueue*)
+{
+ if (!this->symtab_lock_->is_writable() || this->object_->is_locked())
+ return IS_LOCKED;
+ return IS_RUNNABLE;
+}
+
+// Return the locks we hold: one on the file, one on the symbol table
+// and one blocker.
+
+class Scan_relocs::Scan_relocs_locker : public Task_locker
+{
+ public:
+ Scan_relocs_locker(Object* object, Task_token& symtab_lock, Task* task,
+ Task_token& blocker, Workqueue* workqueue)
+ : objlock_(*object), symtab_locker_(symtab_lock, task),
+ blocker_(blocker, workqueue)
+ { }
+
+ private:
+ Task_locker_obj<Object> objlock_;
+ Task_locker_write symtab_locker_;
+ Task_locker_block blocker_;
+};
+
+Task_locker*
+Scan_relocs::locks(Workqueue* workqueue)
+{
+ return new Scan_relocs_locker(this->object_, *this->symtab_lock_, this,
+ *this->blocker_, workqueue);
+}
+
+// Scan the relocs.
+
+void
+Scan_relocs::run(Workqueue*)
+{
+ this->object_->scan_relocs(this->options_, this->symtab_, this->layout_,
+ this->rd_);
+ delete this->rd_;
+ this->rd_ = NULL;
+}
+
+// Relocate_task methods.
+
+// These tasks are always runnable.
+
+Task::Is_runnable_type
+Relocate_task::is_runnable(Workqueue*)
+{
+ return IS_RUNNABLE;
+}
+
+// We want to lock the file while we run. We want to unblock
+// FINAL_BLOCKER when we are done.
+
+class Relocate_task::Relocate_locker : public Task_locker
+{
+ public:
+ Relocate_locker(Task_token& token, Workqueue* workqueue,
+ Object* object)
+ : blocker_(token, workqueue), objlock_(*object)
+ { }
+
+ private:
+ Task_locker_block blocker_;
+ Task_locker_obj<Object> objlock_;
+};
+
+Task_locker*
+Relocate_task::locks(Workqueue* workqueue)
+{
+ return new Relocate_locker(*this->final_blocker_, workqueue,
+ this->object_);
+}
+
+// Run the task.
+
+void
+Relocate_task::run(Workqueue*)
+{
+ this->object_->relocate(this->options_, this->symtab_, this->layout_,
+ this->of_);
+}
+
+// Read the relocs and local symbols from the object file and store
+// the information in RD.
+
+template<int size, bool big_endian>
+void
+Sized_relobj<size, big_endian>::do_read_relocs(Read_relocs_data* rd)
+{
+ rd->relocs.clear();
+
+ unsigned int shnum = this->shnum();
+ if (shnum == 0)
+ return;
+
+ rd->relocs.reserve(shnum / 2);
+
+ const unsigned char *pshdrs = this->get_view(this->elf_file_.shoff(),
+ shnum * This::shdr_size);
+ // Skip the first, dummy, section.
+ const unsigned char *ps = pshdrs + This::shdr_size;
+ for (unsigned int i = 1; i < shnum; ++i, ps += This::shdr_size)
+ {
+ typename This::Shdr shdr(ps);
+
+ unsigned int sh_type = shdr.get_sh_type();
+ if (sh_type != elfcpp::SHT_REL && sh_type != elfcpp::SHT_RELA)
+ continue;
+
+ unsigned int shndx = shdr.get_sh_info();
+ if (shndx >= shnum)
+ {
+ fprintf(stderr, _("%s: %s: relocation section %u has bad info %u\n"),
+ program_name, this->name().c_str(), i, shndx);
+ gold_exit(false);
+ }
+
+ if (!this->is_section_included(shndx))
+ continue;
+
+ // We are scanning relocations in order to fill out the GOT and
+ // PLT sections. Relocations for sections which are not
+ // allocated (typically debugging sections) should not add new
+ // GOT and PLT entries. So we skip them.
+ typename This::Shdr secshdr(pshdrs + shndx * This::shdr_size);
+ if ((secshdr.get_sh_flags() & elfcpp::SHF_ALLOC) == 0)
+ continue;
+
+ if (shdr.get_sh_link() != this->symtab_shndx_)
+ {
+ fprintf(stderr,
+ _("%s: %s: relocation section %u uses unexpected "
+ "symbol table %u\n"),
+ program_name, this->name().c_str(), i, shdr.get_sh_link());
+ gold_exit(false);
+ }
+
+ off_t sh_size = shdr.get_sh_size();
+
+ unsigned int reloc_size;
+ if (sh_type == elfcpp::SHT_REL)
+ reloc_size = elfcpp::Elf_sizes<size>::rel_size;
+ else
+ reloc_size = elfcpp::Elf_sizes<size>::rela_size;
+ if (reloc_size != shdr.get_sh_entsize())
+ {
+ fprintf(stderr,
+ _("%s: %s: unexpected entsize for reloc section %u: "
+ "%lu != %u"),
+ program_name, this->name().c_str(), i,
+ static_cast<unsigned long>(shdr.get_sh_entsize()),
+ reloc_size);
+ gold_exit(false);
+ }
+
+ size_t reloc_count = sh_size / reloc_size;
+ if (reloc_count * reloc_size != sh_size)
+ {
+ fprintf(stderr, _("%s: %s: reloc section %u size %lu uneven"),
+ program_name, this->name().c_str(), i,
+ static_cast<unsigned long>(sh_size));
+ gold_exit(false);
+ }
+
+ rd->relocs.push_back(Section_relocs());
+ Section_relocs& sr(rd->relocs.back());
+ sr.reloc_shndx = i;
+ sr.data_shndx = shndx;
+ sr.contents = this->get_lasting_view(shdr.get_sh_offset(), sh_size);
+ sr.sh_type = sh_type;
+ sr.reloc_count = reloc_count;
+ }
+
+ // Read the local symbols.
+ gold_assert(this->symtab_shndx_ != -1U);
+ if (this->symtab_shndx_ == 0 || this->local_symbol_count_ == 0)
+ rd->local_symbols = NULL;
+ else
+ {
+ typename This::Shdr symtabshdr(pshdrs
+ + this->symtab_shndx_ * This::shdr_size);
+ gold_assert(symtabshdr.get_sh_type() == elfcpp::SHT_SYMTAB);
+ const int sym_size = This::sym_size;
+ const unsigned int loccount = this->local_symbol_count_;
+ gold_assert(loccount == symtabshdr.get_sh_info());
+ off_t locsize = loccount * sym_size;
+ rd->local_symbols = this->get_lasting_view(symtabshdr.get_sh_offset(),
+ locsize);
+ }
+}
+
+// Scan the relocs and adjust the symbol table. This looks for
+// relocations which require GOT/PLT/COPY relocations.
+
+template<int size, bool big_endian>
+void
+Sized_relobj<size, big_endian>::do_scan_relocs(const General_options& options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Read_relocs_data* rd)
+{
+ Sized_target<size, big_endian>* target = this->sized_target();
+
+ const unsigned char* local_symbols;
+ if (rd->local_symbols == NULL)
+ local_symbols = NULL;
+ else
+ local_symbols = rd->local_symbols->data();
+
+ for (Read_relocs_data::Relocs_list::iterator p = rd->relocs.begin();
+ p != rd->relocs.end();
+ ++p)
+ {
+ target->scan_relocs(options, symtab, layout, this, p->data_shndx,
+ p->sh_type, p->contents->data(), p->reloc_count,
+ this->local_symbol_count_,
+ local_symbols,
+ this->symbols_);
+ delete p->contents;
+ p->contents = NULL;
+ }
+
+ if (rd->local_symbols != NULL)
+ {
+ delete rd->local_symbols;
+ rd->local_symbols = NULL;
+ }
+}
+
+// Relocate the input sections and write out the local symbols.
+
+template<int size, bool big_endian>
+void
+Sized_relobj<size, big_endian>::do_relocate(const General_options& options,
+ const Symbol_table* symtab,
+ const Layout* layout,
+ Output_file* of)
+{
+ unsigned int shnum = this->shnum();
+
+ // Read the section headers.
+ const unsigned char* pshdrs = this->get_view(this->elf_file_.shoff(),
+ shnum * This::shdr_size);
+
+ Views views;
+ views.resize(shnum);
+
+ // Make two passes over the sections. The first one copies the
+ // section data to the output file. The second one applies
+ // relocations.
+
+ this->write_sections(pshdrs, of, &views);
+
+ // Apply relocations.
+
+ this->relocate_sections(options, symtab, layout, pshdrs, &views);
+
+ // Write out the accumulated views.
+ for (unsigned int i = 1; i < shnum; ++i)
+ {
+ if (views[i].view != NULL)
+ of->write_output_view(views[i].offset, views[i].view_size,
+ views[i].view);
+ }
+
+ // Write out the local symbols.
+ this->write_local_symbols(of, layout->sympool());
+}
+
+// Write section data to the output file. PSHDRS points to the
+// section headers. Record the views in *PVIEWS for use when
+// relocating.
+
+template<int size, bool big_endian>
+void
+Sized_relobj<size, big_endian>::write_sections(const unsigned char* pshdrs,
+ Output_file* of,
+ Views* pviews)
+{
+ unsigned int shnum = this->shnum();
+ std::vector<Map_to_output>& map_sections(this->map_to_output());
+
+ const unsigned char* p = pshdrs + This::shdr_size;
+ for (unsigned int i = 1; i < shnum; ++i, p += This::shdr_size)
+ {
+ View_size* pvs = &(*pviews)[i];
+
+ pvs->view = NULL;
+
+ if (map_sections[i].offset == -1)
+ continue;
+
+ const Output_section* os = map_sections[i].output_section;
+ if (os == NULL)
+ continue;
+
+ typename This::Shdr shdr(p);
+
+ if (shdr.get_sh_type() == elfcpp::SHT_NOBITS)
+ continue;
+
+ off_t start = os->offset() + map_sections[i].offset;
+ off_t sh_size = shdr.get_sh_size();
+
+ if (sh_size == 0)
+ continue;
+
+ gold_assert(map_sections[i].offset >= 0
+ && map_sections[i].offset + sh_size <= os->data_size());
+
+ unsigned char* view = of->get_output_view(start, sh_size);
+ this->read(shdr.get_sh_offset(), sh_size, view);
+
+ pvs->view = view;
+ pvs->address = os->address() + map_sections[i].offset;
+ pvs->offset = start;
+ pvs->view_size = sh_size;
+ }
+}
+
+// Relocate section data. VIEWS points to the section data as views
+// in the output file.
+
+template<int size, bool big_endian>
+void
+Sized_relobj<size, big_endian>::relocate_sections(
+ const General_options& options,
+ const Symbol_table* symtab,
+ const Layout* layout,
+ const unsigned char* pshdrs,
+ Views* pviews)
+{
+ unsigned int shnum = this->shnum();
+ Sized_target<size, big_endian>* target = this->sized_target();
+
+ Relocate_info<size, big_endian> relinfo;
+ relinfo.options = &options;
+ relinfo.symtab = symtab;
+ relinfo.layout = layout;
+ relinfo.object = this;
+ relinfo.local_symbol_count = this->local_symbol_count_;
+ relinfo.local_values = &this->local_values_;
+ relinfo.symbols = this->symbols_;
+
+ const unsigned char* p = pshdrs + This::shdr_size;
+ for (unsigned int i = 1; i < shnum; ++i, p += This::shdr_size)
+ {
+ typename This::Shdr shdr(p);
+
+ unsigned int sh_type = shdr.get_sh_type();
+ if (sh_type != elfcpp::SHT_REL && sh_type != elfcpp::SHT_RELA)
+ continue;
+
+ unsigned int index = shdr.get_sh_info();
+ if (index >= this->shnum())
+ {
+ fprintf(stderr, _("%s: %s: relocation section %u has bad info %u\n"),
+ program_name, this->name().c_str(), i, index);
+ gold_exit(false);
+ }
+
+ if (!this->is_section_included(index))
+ {
+ // This relocation section is against a section which we
+ // discarded.
+ continue;
+ }
+
+ gold_assert((*pviews)[index].view != NULL);
+
+ if (shdr.get_sh_link() != this->symtab_shndx_)
+ {
+ fprintf(stderr,
+ _("%s: %s: relocation section %u uses unexpected "
+ "symbol table %u\n"),
+ program_name, this->name().c_str(), i, shdr.get_sh_link());
+ gold_exit(false);
+ }
+
+ off_t sh_size = shdr.get_sh_size();
+ const unsigned char* prelocs = this->get_view(shdr.get_sh_offset(),
+ sh_size);
+
+ unsigned int reloc_size;
+ if (sh_type == elfcpp::SHT_REL)
+ reloc_size = elfcpp::Elf_sizes<size>::rel_size;
+ else
+ reloc_size = elfcpp::Elf_sizes<size>::rela_size;
+
+ if (reloc_size != shdr.get_sh_entsize())
+ {
+ fprintf(stderr,
+ _("%s: %s: unexpected entsize for reloc section %u: "
+ "%lu != %u"),
+ program_name, this->name().c_str(), i,
+ static_cast<unsigned long>(shdr.get_sh_entsize()),
+ reloc_size);
+ gold_exit(false);
+ }
+
+ size_t reloc_count = sh_size / reloc_size;
+ if (reloc_count * reloc_size != sh_size)
+ {
+ fprintf(stderr, _("%s: %s: reloc section %u size %lu uneven"),
+ program_name, this->name().c_str(), i,
+ static_cast<unsigned long>(sh_size));
+ gold_exit(false);
+ }
+
+ relinfo.reloc_shndx = i;
+ relinfo.data_shndx = index;
+ target->relocate_section(&relinfo,
+ sh_type,
+ prelocs,
+ reloc_count,
+ (*pviews)[index].view,
+ (*pviews)[index].address,
+ (*pviews)[index].view_size);
+ }
+}
+
+// Copy_relocs::Copy_reloc_entry methods.
+
+// Return whether we should emit this reloc. We should emit it if the
+// symbol is still defined in a dynamic object. If we should not emit
+// it, we clear it, to save ourselves the test next time.
+
+template<int size, bool big_endian>
+bool
+Copy_relocs<size, big_endian>::Copy_reloc_entry::should_emit()
+{
+ if (this->sym_ == NULL)
+ return false;
+ if (this->sym_->is_from_dynobj())
+ return true;
+ this->sym_ = NULL;
+ return false;
+}
+
+// Emit a reloc into a SHT_REL section.
+
+template<int size, bool big_endian>
+void
+Copy_relocs<size, big_endian>::Copy_reloc_entry::emit(
+ Output_data_reloc<elfcpp::SHT_REL, true, size, big_endian>* reloc_data)
+{
+ this->sym_->set_needs_dynsym_entry();
+ reloc_data->add_global(this->sym_, this->reloc_type_, this->relobj_,
+ this->shndx_, this->address_);
+}
+
+// Emit a reloc into a SHT_RELA section.
+
+template<int size, bool big_endian>
+void
+Copy_relocs<size, big_endian>::Copy_reloc_entry::emit(
+ Output_data_reloc<elfcpp::SHT_RELA, true, size, big_endian>* reloc_data)
+{
+ this->sym_->set_needs_dynsym_entry();
+ reloc_data->add_global(this->sym_, this->reloc_type_, this->relobj_,
+ this->shndx_, this->address_, this->addend_);
+}
+
+// Copy_relocs methods.
+
+// Return whether we need a COPY reloc for a relocation against GSYM.
+// The relocation is being applied to section SHNDX in OBJECT.
+
+template<int size, bool big_endian>
+bool
+Copy_relocs<size, big_endian>::need_copy_reloc(
+ const General_options*,
+ Relobj* object,
+ unsigned int shndx,
+ Sized_symbol<size>* sym)
+{
+ // FIXME: Handle -z nocopyrelocs.
+
+ if (sym->symsize() == 0)
+ return false;
+
+ // If this is a readonly section, then we need a COPY reloc.
+ // Otherwise we can use a dynamic reloc.
+ if ((object->section_flags(shndx) & elfcpp::SHF_WRITE) == 0)
+ return true;
+
+ return false;
+}
+
+// Save a Rel reloc.
+
+template<int size, bool big_endian>
+void
+Copy_relocs<size, big_endian>::save(
+ Symbol* sym,
+ Relobj* relobj,
+ unsigned int shndx,
+ const elfcpp::Rel<size, big_endian>& rel)
+{
+ unsigned int reloc_type = elfcpp::elf_r_type<size>(rel.get_r_info());
+ this->entries_.push_back(Copy_reloc_entry(sym, reloc_type, relobj, shndx,
+ rel.get_r_offset(), 0));
+}
+
+// Save a Rela reloc.
+
+template<int size, bool big_endian>
+void
+Copy_relocs<size, big_endian>::save(
+ Symbol* sym,
+ Relobj* relobj,
+ unsigned int shndx,
+ const elfcpp::Rela<size, big_endian>& rela)
+{
+ unsigned int reloc_type = elfcpp::elf_r_type<size>(rela.get_r_info());
+ this->entries_.push_back(Copy_reloc_entry(sym, reloc_type, relobj, shndx,
+ rela.get_r_offset(),
+ rela.get_r_addend()));
+}
+
+// Return whether there are any relocs to emit. We don't want to emit
+// a reloc if the symbol is no longer defined in a dynamic object.
+
+template<int size, bool big_endian>
+bool
+Copy_relocs<size, big_endian>::any_to_emit()
+{
+ for (typename Copy_reloc_entries::iterator p = this->entries_.begin();
+ p != this->entries_.end();
+ ++p)
+ {
+ if (p->should_emit())
+ return true;
+ }
+ return false;
+}
+
+// Emit relocs.
+
+template<int size, bool big_endian>
+template<int sh_type>
+void
+Copy_relocs<size, big_endian>::emit(
+ Output_data_reloc<sh_type, true, size, big_endian>* reloc_data)
+{
+ for (typename Copy_reloc_entries::iterator p = this->entries_.begin();
+ p != this->entries_.end();
+ ++p)
+ {
+ if (p->should_emit())
+ p->emit(reloc_data);
+ }
+}
+
+// Instantiate the templates we need. We could use the configure
+// script to restrict this to only the ones for implemented targets.
+
+template
+void
+Sized_relobj<32, false>::do_read_relocs(Read_relocs_data* rd);
+
+template
+void
+Sized_relobj<32, true>::do_read_relocs(Read_relocs_data* rd);
+
+template
+void
+Sized_relobj<64, false>::do_read_relocs(Read_relocs_data* rd);
+
+template
+void
+Sized_relobj<64, true>::do_read_relocs(Read_relocs_data* rd);
+
+template
+void
+Sized_relobj<32, false>::do_scan_relocs(const General_options& options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Read_relocs_data* rd);
+
+template
+void
+Sized_relobj<32, true>::do_scan_relocs(const General_options& options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Read_relocs_data* rd);
+
+template
+void
+Sized_relobj<64, false>::do_scan_relocs(const General_options& options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Read_relocs_data* rd);
+
+template
+void
+Sized_relobj<64, true>::do_scan_relocs(const General_options& options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Read_relocs_data* rd);
+
+template
+void
+Sized_relobj<32, false>::do_relocate(const General_options& options,
+ const Symbol_table* symtab,
+ const Layout* layout,
+ Output_file* of);
+
+template
+void
+Sized_relobj<32, true>::do_relocate(const General_options& options,
+ const Symbol_table* symtab,
+ const Layout* layout,
+ Output_file* of);
+
+template
+void
+Sized_relobj<64, false>::do_relocate(const General_options& options,
+ const Symbol_table* symtab,
+ const Layout* layout,
+ Output_file* of);
+
+template
+void
+Sized_relobj<64, true>::do_relocate(const General_options& options,
+ const Symbol_table* symtab,
+ const Layout* layout,
+ Output_file* of);
+
+template
+class Copy_relocs<32, false>;
+
+template
+class Copy_relocs<32, true>;
+
+template
+class Copy_relocs<64, false>;
+
+template
+class Copy_relocs<64, true>;
+
+template
+void
+Copy_relocs<32, false>::emit<elfcpp::SHT_REL>(
+ Output_data_reloc<elfcpp::SHT_REL, true, 32, false>*);
+
+template
+void
+Copy_relocs<32, true>::emit<elfcpp::SHT_REL>(
+ Output_data_reloc<elfcpp::SHT_REL, true, 32, true>*);
+
+template
+void
+Copy_relocs<64, false>::emit<elfcpp::SHT_REL>(
+ Output_data_reloc<elfcpp::SHT_REL, true, 64, false>*);
+
+template
+void
+Copy_relocs<64, true>::emit<elfcpp::SHT_REL>(
+ Output_data_reloc<elfcpp::SHT_REL, true, 64, true>*);
+
+template
+void
+Copy_relocs<32, false>::emit<elfcpp::SHT_RELA>(
+ Output_data_reloc<elfcpp::SHT_RELA , true, 32, false>*);
+
+template
+void
+Copy_relocs<32, true>::emit<elfcpp::SHT_RELA>(
+ Output_data_reloc<elfcpp::SHT_RELA, true, 32, true>*);
+
+template
+void
+Copy_relocs<64, false>::emit<elfcpp::SHT_RELA>(
+ Output_data_reloc<elfcpp::SHT_RELA, true, 64, false>*);
+
+template
+void
+Copy_relocs<64, true>::emit<elfcpp::SHT_RELA>(
+ Output_data_reloc<elfcpp::SHT_RELA, true, 64, true>*);
+
+} // End namespace gold.
diff --git a/gold/reloc.h b/gold/reloc.h
new file mode 100644
index 000000000000..1aa0d896717f
--- /dev/null
+++ b/gold/reloc.h
@@ -0,0 +1,409 @@
+// reloc.h -- relocate input files for gold -*- C++ -*-
+
+#ifndef GOLD_RELOC_H
+#define GOLD_RELOC_H
+
+#include <byteswap.h>
+
+#include "workqueue.h"
+
+namespace gold
+{
+
+class General_options;
+class Relobj;
+class Read_relocs_data;
+class Symbol;
+class Layout;
+
+template<int size>
+class Sized_symbol;
+
+template<int size, bool big_endian>
+class Sized_relobj;
+
+template<int size>
+class Symbol_value;
+
+template<int sh_type, bool dynamic, int size, bool big_endian>
+class Output_data_reloc;
+
+// A class to read the relocations for an object file, and then queue
+// up a task to see if they require any GOT/PLT/COPY relocations in
+// the symbol table.
+
+class Read_relocs : public Task
+{
+ public:
+ // SYMTAB_LOCK is used to lock the symbol table. BLOCKER should be
+ // unblocked when the Scan_relocs task completes.
+ Read_relocs(const General_options& options, Symbol_table* symtab,
+ Layout* layout, Relobj* object, Task_token* symtab_lock,
+ Task_token* blocker)
+ : options_(options), symtab_(symtab), layout_(layout), object_(object),
+ symtab_lock_(symtab_lock), blocker_(blocker)
+ { }
+
+ // The standard Task methods.
+
+ Is_runnable_type
+ is_runnable(Workqueue*);
+
+ Task_locker*
+ locks(Workqueue*);
+
+ void
+ run(Workqueue*);
+
+ private:
+ const General_options& options_;
+ Symbol_table* symtab_;
+ Layout* layout_;
+ Relobj* object_;
+ Task_token* symtab_lock_;
+ Task_token* blocker_;
+};
+
+// Scan the relocations for an object to see if they require any
+// GOT/PLT/COPY relocations.
+
+class Scan_relocs : public Task
+{
+ public:
+ // SYMTAB_LOCK is used to lock the symbol table. BLOCKER should be
+ // unblocked when the task completes.
+ Scan_relocs(const General_options& options, Symbol_table* symtab,
+ Layout* layout, Relobj* object, Read_relocs_data* rd,
+ Task_token* symtab_lock, Task_token* blocker)
+ : options_(options), symtab_(symtab), layout_(layout), object_(object),
+ rd_(rd), symtab_lock_(symtab_lock), blocker_(blocker)
+ { }
+
+ // The standard Task methods.
+
+ Is_runnable_type
+ is_runnable(Workqueue*);
+
+ Task_locker*
+ locks(Workqueue*);
+
+ void
+ run(Workqueue*);
+
+ private:
+ class Scan_relocs_locker;
+
+ const General_options& options_;
+ Symbol_table* symtab_;
+ Layout* layout_;
+ Relobj* object_;
+ Read_relocs_data* rd_;
+ Task_token* symtab_lock_;
+ Task_token* blocker_;
+};
+
+// A class to perform all the relocations for an object file.
+
+class Relocate_task : public Task
+{
+ public:
+ Relocate_task(const General_options& options, const Symbol_table* symtab,
+ const Layout* layout, Relobj* object, Output_file* of,
+ Task_token* final_blocker)
+ : options_(options), symtab_(symtab), layout_(layout), object_(object),
+ of_(of), final_blocker_(final_blocker)
+ { }
+
+ // The standard Task methods.
+
+ Is_runnable_type
+ is_runnable(Workqueue*);
+
+ Task_locker*
+ locks(Workqueue*);
+
+ void
+ run(Workqueue*);
+
+ private:
+ class Relocate_locker;
+
+ const General_options& options_;
+ const Symbol_table* symtab_;
+ const Layout* layout_;
+ Relobj* object_;
+ Output_file* of_;
+ Task_token* final_blocker_;
+};
+
+// Standard relocation routines which are used on many targets. Here
+// SIZE and BIG_ENDIAN refer to the target, not the relocation type.
+
+template<int size, bool big_endian>
+class Relocate_functions
+{
+private:
+ // Do a simple relocation with the addend in the section contents.
+ // VALSIZE is the size of the value.
+ template<int valsize>
+ static inline void
+ rel(unsigned char* view,
+ typename elfcpp::Swap<valsize, big_endian>::Valtype value)
+ {
+ typedef typename elfcpp::Swap<valsize, big_endian>::Valtype Valtype;
+ Valtype* wv = reinterpret_cast<Valtype*>(view);
+ Valtype x = elfcpp::Swap<valsize, big_endian>::readval(wv);
+ elfcpp::Swap<valsize, big_endian>::writeval(wv, x + value);
+ }
+
+ // Do a simple relocation using a Symbol_value with the addend in
+ // the section contents. VALSIZE is the size of the value to
+ // relocate.
+ template<int valsize>
+ static inline void
+ rel(unsigned char* view,
+ const Sized_relobj<size, big_endian>* object,
+ const Symbol_value<size>* psymval)
+ {
+ typedef typename elfcpp::Swap<valsize, big_endian>::Valtype Valtype;
+ Valtype* wv = reinterpret_cast<Valtype*>(view);
+ Valtype x = elfcpp::Swap<valsize, big_endian>::readval(wv);
+ x = psymval->value(object, x);
+ elfcpp::Swap<valsize, big_endian>::writeval(wv, x);
+ }
+
+ // Do a simple PC relative relocation with the addend in the section
+ // contents. VALSIZE is the size of the value.
+ template<int valsize>
+ static inline void
+ pcrel(unsigned char* view,
+ typename elfcpp::Swap<valsize, big_endian>::Valtype value,
+ typename elfcpp::Elf_types<size>::Elf_Addr address)
+ {
+ typedef typename elfcpp::Swap<valsize, big_endian>::Valtype Valtype;
+ Valtype* wv = reinterpret_cast<Valtype*>(view);
+ Valtype x = elfcpp::Swap<valsize, big_endian>::readval(wv);
+ elfcpp::Swap<valsize, big_endian>::writeval(wv, x + value - address);
+ }
+
+ // Do a simple PC relative relocation with a Symbol_value with the
+ // addend in the section contents. VALSIZE is the size of the
+ // value.
+ template<int valsize>
+ static inline void
+ pcrel(unsigned char* view,
+ const Sized_relobj<size, big_endian>* object,
+ const Symbol_value<size>* psymval,
+ typename elfcpp::Elf_types<size>::Elf_Addr address)
+ {
+ typedef typename elfcpp::Swap<valsize, big_endian>::Valtype Valtype;
+ Valtype* wv = reinterpret_cast<Valtype*>(view);
+ Valtype x = elfcpp::Swap<valsize, big_endian>::readval(wv);
+ x = psymval->value(object, x);
+ elfcpp::Swap<valsize, big_endian>::writeval(wv, x - address);
+ }
+
+ typedef Relocate_functions<size, big_endian> This;
+
+public:
+ // Do a simple 8-bit REL relocation with the addend in the section
+ // contents.
+ static inline void
+ rel8(unsigned char* view, unsigned char value)
+ { This::template rel<8>(view, value); }
+
+ static inline void
+ rel8(unsigned char* view,
+ const Sized_relobj<size, big_endian>* object,
+ const Symbol_value<size>* psymval)
+ { This::template rel<8>(view, object, psymval); }
+
+ // Do a simple 8-bit PC relative relocation with the addend in the
+ // section contents.
+ static inline void
+ pcrel8(unsigned char* view, unsigned char value,
+ typename elfcpp::Elf_types<size>::Elf_Addr address)
+ { This::template pcrel<8>(view, value, address); }
+
+ static inline void
+ pcrel8(unsigned char* view,
+ const Sized_relobj<size, big_endian>* object,
+ const Symbol_value<size>* psymval,
+ typename elfcpp::Elf_types<size>::Elf_Addr address)
+ { This::template pcrel<8>(view, object, psymval, address); }
+
+ // Do a simple 16-bit REL relocation with the addend in the section
+ // contents.
+ static inline void
+ rel16(unsigned char* view, elfcpp::Elf_Half value)
+ { This::template rel<16>(view, value); }
+
+ static inline void
+ rel16(unsigned char* view,
+ const Sized_relobj<size, big_endian>* object,
+ const Symbol_value<size>* psymval)
+ { This::template rel<16>(view, object, psymval); }
+
+ // Do a simple 32-bit PC relative REL relocation with the addend in
+ // the section contents.
+ static inline void
+ pcrel16(unsigned char* view, elfcpp::Elf_Word value,
+ typename elfcpp::Elf_types<size>::Elf_Addr address)
+ { This::template pcrel<16>(view, value, address); }
+
+ static inline void
+ pcrel16(unsigned char* view,
+ const Sized_relobj<size, big_endian>* object,
+ const Symbol_value<size>* psymval,
+ typename elfcpp::Elf_types<size>::Elf_Addr address)
+ { This::template pcrel<16>(view, object, psymval, address); }
+
+ // Do a simple 32-bit REL relocation with the addend in the section
+ // contents.
+ static inline void
+ rel32(unsigned char* view, elfcpp::Elf_Word value)
+ { This::template rel<32>(view, value); }
+
+ static inline void
+ rel32(unsigned char* view,
+ const Sized_relobj<size, big_endian>* object,
+ const Symbol_value<size>* psymval)
+ { This::template rel<32>(view, object, psymval); }
+
+ // Do a simple 32-bit PC relative REL relocation with the addend in
+ // the section contents.
+ static inline void
+ pcrel32(unsigned char* view, elfcpp::Elf_Word value,
+ typename elfcpp::Elf_types<size>::Elf_Addr address)
+ { This::template pcrel<32>(view, value, address); }
+
+ static inline void
+ pcrel32(unsigned char* view,
+ const Sized_relobj<size, big_endian>* object,
+ const Symbol_value<size>* psymval,
+ typename elfcpp::Elf_types<size>::Elf_Addr address)
+ { This::template pcrel<32>(view, object, psymval, address); }
+
+ // Do a simple 64-bit REL relocation with the addend in the section
+ // contents.
+ static inline void
+ rel64(unsigned char* view, elfcpp::Elf_Xword value)
+ { This::template rel<64>(view, value); }
+
+ static inline void
+ rel64(unsigned char* view,
+ const Sized_relobj<size, big_endian>* object,
+ const Symbol_value<size>* psymval)
+ { This::template rel<64>(view, object, psymval); }
+
+ // Do a simple 64-bit PC relative REL relocation with the addend in
+ // the section contents.
+ static inline void
+ pcrel64(unsigned char* view, elfcpp::Elf_Xword value,
+ typename elfcpp::Elf_types<size>::Elf_Addr address)
+ { This::template pcrel<64>(view, value, address); }
+
+ static inline void
+ pcrel64(unsigned char* view,
+ const Sized_relobj<size, big_endian>* object,
+ const Symbol_value<size>* psymval,
+ typename elfcpp::Elf_types<size>::Elf_Addr address)
+ { This::template pcrel<64>(view, object, psymval, address); }
+};
+
+// We try to avoid COPY relocations when possible. A COPY relocation
+// may be required when an executable refers to a variable defined in
+// a shared library. COPY relocations are problematic because they
+// tie the executable to the exact size of the variable in the shared
+// library. We can avoid them if all the references to the variable
+// are in a writeable section. In that case we can simply use dynamic
+// relocations. However, when scanning relocs, we don't know when we
+// see the relocation whether we will be forced to use a COPY
+// relocation or not. So we have to save the relocation during the
+// reloc scanning, and then emit it as a dynamic relocation if
+// necessary. This class implements that. It is used by the target
+// specific code.
+
+template<int size, bool big_endian>
+class Copy_relocs
+{
+ public:
+ Copy_relocs()
+ : entries_()
+ { }
+
+ // Return whether we need a COPY reloc for a reloc against GSYM,
+ // which is being applied to section SHNDX in OBJECT.
+ static bool
+ need_copy_reloc(const General_options*, Relobj* object, unsigned int shndx,
+ Sized_symbol<size>* gsym);
+
+ // Save a Rel against SYM for possible emission later. SHNDX is the
+ // index of the section to which the reloc is being applied.
+ void
+ save(Symbol* sym, Relobj*, unsigned int shndx,
+ const elfcpp::Rel<size, big_endian>&);
+
+ // Save a Rela against SYM for possible emission later.
+ void
+ save(Symbol* sym, Relobj*, unsigned int shndx,
+ const elfcpp::Rela<size, big_endian>&);
+
+ // Return whether there are any relocs to emit. This also discards
+ // entries which need not be emitted.
+ bool
+ any_to_emit();
+
+ // Emit relocs for each symbol which did not get a COPY reloc (i.e.,
+ // is still defined in the dynamic object).
+ template<int sh_type>
+ void
+ emit(Output_data_reloc<sh_type, true, size, big_endian>*);
+
+ private:
+ typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
+ typedef typename elfcpp::Elf_types<size>::Elf_Addr Addend;
+
+ // This POD class holds the entries we are saving.
+ class Copy_reloc_entry
+ {
+ public:
+ Copy_reloc_entry(Symbol* sym, unsigned int reloc_type,
+ Relobj* relobj, unsigned int shndx,
+ Address address, Addend addend)
+ : sym_(sym), reloc_type_(reloc_type), relobj_(relobj),
+ shndx_(shndx), address_(address), addend_(addend)
+ { }
+
+ // Return whether we should emit this reloc. If we should not
+ // emit, we clear it.
+ bool
+ should_emit();
+
+ // Emit this reloc.
+
+ void
+ emit(Output_data_reloc<elfcpp::SHT_REL, true, size, big_endian>*);
+
+ void
+ emit(Output_data_reloc<elfcpp::SHT_RELA, true, size, big_endian>*);
+
+ private:
+ Symbol* sym_;
+ unsigned int reloc_type_;
+ Relobj* relobj_;
+ unsigned int shndx_;
+ Address address_;
+ Addend addend_;
+ };
+
+ // A list of relocs to be saved.
+ typedef std::vector<Copy_reloc_entry> Copy_reloc_entries;
+
+ // The list of relocs we are saving.
+ Copy_reloc_entries entries_;
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_RELOC_H)
diff --git a/gold/resolve.cc b/gold/resolve.cc
new file mode 100644
index 000000000000..1d874863d628
--- /dev/null
+++ b/gold/resolve.cc
@@ -0,0 +1,560 @@
+// resolve.cc -- symbol resolution for gold
+
+#include "gold.h"
+
+#include "elfcpp.h"
+#include "target.h"
+#include "object.h"
+#include "symtab.h"
+
+namespace gold
+{
+
+// Symbol methods used in this file.
+
+// Override the fields in Symbol.
+
+template<int size, bool big_endian>
+void
+Symbol::override_base(const elfcpp::Sym<size, big_endian>& sym,
+ Object* object, const char* version)
+{
+ gold_assert(this->source_ == FROM_OBJECT);
+ this->u_.from_object.object = object;
+ if (version != NULL && this->version() != version)
+ {
+ gold_assert(this->version() == NULL);
+ this->version_ = version;
+ }
+ // FIXME: Handle SHN_XINDEX.
+ this->u_.from_object.shndx = sym.get_st_shndx();
+ this->type_ = sym.get_st_type();
+ this->binding_ = sym.get_st_bind();
+ this->visibility_ = sym.get_st_visibility();
+ this->nonvis_ = sym.get_st_nonvis();
+}
+
+// Override the fields in Sized_symbol.
+
+template<int size>
+template<bool big_endian>
+void
+Sized_symbol<size>::override(const elfcpp::Sym<size, big_endian>& sym,
+ Object* object, const char* version)
+{
+ this->override_base(sym, object, version);
+ this->value_ = sym.get_st_value();
+ this->symsize_ = sym.get_st_size();
+}
+
+// Resolve a symbol. This is called the second and subsequent times
+// we see a symbol. TO is the pre-existing symbol. SYM is the new
+// symbol, seen in OBJECT. VERSION of the version of SYM.
+
+template<int size, bool big_endian>
+void
+Symbol_table::resolve(Sized_symbol<size>* to,
+ const elfcpp::Sym<size, big_endian>& sym,
+ Object* object, const char* version)
+{
+ if (object->target()->has_resolve())
+ {
+ Sized_target<size, big_endian>* sized_target;
+ sized_target = object->sized_target
+ SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
+ SELECT_SIZE_ENDIAN_ONLY(size, big_endian));
+ sized_target->resolve(to, sym, object, version);
+ return;
+ }
+
+ // Build a little code for each symbol.
+ // Bit 0: 0 for global, 1 for weak.
+ // Bit 1: 0 for regular object, 1 for shared object
+ // Bits 2-3: 0 for normal, 1 for undefined, 2 for common
+ // This gives us values from 0 to 11:
+
+ enum
+ {
+ DEF = 0,
+ WEAK_DEF = 1,
+ DYN_DEF = 2,
+ DYN_WEAK_DEF = 3,
+ UNDEF = 4,
+ WEAK_UNDEF = 5,
+ DYN_UNDEF = 6,
+ DYN_WEAK_UNDEF = 7,
+ COMMON = 8,
+ WEAK_COMMON = 9,
+ DYN_COMMON = 10,
+ DYN_WEAK_COMMON = 11
+ };
+
+ int tobits;
+ switch (to->binding())
+ {
+ case elfcpp::STB_GLOBAL:
+ tobits = 0;
+ break;
+
+ case elfcpp::STB_WEAK:
+ tobits = 1;
+ break;
+
+ case elfcpp::STB_LOCAL:
+ // We should only see externally visible symbols in the symbol
+ // table.
+ gold_unreachable();
+
+ default:
+ // Any target which wants to handle STB_LOOS, etc., needs to
+ // define a resolve method.
+ gold_unreachable();
+ }
+
+ if (to->source() == Symbol::FROM_OBJECT
+ && to->object()->is_dynamic())
+ tobits |= (1 << 1);
+
+ switch (to->shndx())
+ {
+ case elfcpp::SHN_UNDEF:
+ tobits |= (1 << 2);
+ break;
+
+ case elfcpp::SHN_COMMON:
+ tobits |= (2 << 2);
+ break;
+
+ default:
+ if (to->type() == elfcpp::STT_COMMON)
+ tobits |= (2 << 2);
+ break;
+ }
+
+ int frombits;
+ switch (sym.get_st_bind())
+ {
+ case elfcpp::STB_GLOBAL:
+ frombits = 0;
+ break;
+
+ case elfcpp::STB_WEAK:
+ frombits = 1;
+ break;
+
+ case elfcpp::STB_LOCAL:
+ fprintf(stderr,
+ _("%s: %s: invalid STB_LOCAL symbol %s in external symbols\n"),
+ program_name, object->name().c_str(), to->name());
+ gold_exit(false);
+
+ default:
+ fprintf(stderr,
+ _("%s: %s: unsupported symbol binding %d for symbol %s\n"),
+ program_name, object->name().c_str(),
+ static_cast<int>(sym.get_st_bind()), to->name());
+ gold_exit(false);
+ }
+
+ if (!object->is_dynamic())
+ {
+ // Record that we've seen this symbol in a regular object.
+ to->set_in_reg();
+ }
+ else
+ {
+ frombits |= (1 << 1);
+
+ // Record that we've seen this symbol in a dynamic object.
+ to->set_in_dyn();
+ }
+
+ switch (sym.get_st_shndx())
+ {
+ case elfcpp::SHN_UNDEF:
+ frombits |= (1 << 2);
+ break;
+
+ case elfcpp::SHN_COMMON:
+ frombits |= (2 << 2);
+ break;
+
+ default:
+ if (sym.get_st_type() == elfcpp::STT_COMMON)
+ frombits |= (2 << 2);
+ break;
+ }
+
+ if ((tobits & (1 << 1)) != (frombits & (1 << 1)))
+ {
+ // This symbol is seen in both a dynamic object and a regular
+ // object. That means that we need the symbol to go into the
+ // dynamic symbol table, so that the dynamic linker can use the
+ // regular symbol to override or define the dynamic symbol.
+ to->set_needs_dynsym_entry();
+ }
+
+ // FIXME: Warn if either but not both of TO and SYM are STT_TLS.
+
+ // We use a giant switch table for symbol resolution. This code is
+ // unwieldy, but: 1) it is efficient; 2) we definitely handle all
+ // cases; 3) it is easy to change the handling of a particular case.
+ // The alternative would be a series of conditionals, but it is easy
+ // to get the ordering wrong. This could also be done as a table,
+ // but that is no easier to understand than this large switch
+ // statement.
+
+ switch (tobits * 16 + frombits)
+ {
+ case DEF * 16 + DEF:
+ // Two definitions of the same symbol.
+ fprintf(stderr, "%s: %s: multiple definition of %s\n",
+ program_name, object->name().c_str(), to->name());
+ // FIXME: Report locations. Record that we have seen an error.
+ return;
+
+ case WEAK_DEF * 16 + DEF:
+ // We've seen a weak definition, and now we see a strong
+ // definition. In the original SVR4 linker, this was treated as
+ // a multiple definition error. In the Solaris linker and the
+ // GNU linker, a weak definition followed by a regular
+ // definition causes the weak definition to be overridden. We
+ // are currently compatible with the GNU linker. In the future
+ // we should add a target specific option to change this.
+ // FIXME.
+ to->override(sym, object, version);
+ return;
+
+ case DYN_DEF * 16 + DEF:
+ case DYN_WEAK_DEF * 16 + DEF:
+ // We've seen a definition in a dynamic object, and now we see a
+ // definition in a regular object. The definition in the
+ // regular object overrides the definition in the dynamic
+ // object.
+ to->override(sym, object, version);
+ return;
+
+ case UNDEF * 16 + DEF:
+ case WEAK_UNDEF * 16 + DEF:
+ case DYN_UNDEF * 16 + DEF:
+ case DYN_WEAK_UNDEF * 16 + DEF:
+ // We've seen an undefined reference, and now we see a
+ // definition. We use the definition.
+ to->override(sym, object, version);
+ return;
+
+ case COMMON * 16 + DEF:
+ case WEAK_COMMON * 16 + DEF:
+ case DYN_COMMON * 16 + DEF:
+ case DYN_WEAK_COMMON * 16 + DEF:
+ // We've seen a common symbol and now we see a definition. The
+ // definition overrides. FIXME: We should optionally issue, version a
+ // warning.
+ to->override(sym, object, version);
+ return;
+
+ case DEF * 16 + WEAK_DEF:
+ case WEAK_DEF * 16 + WEAK_DEF:
+ // We've seen a definition and now we see a weak definition. We
+ // ignore the new weak definition.
+ return;
+
+ case DYN_DEF * 16 + WEAK_DEF:
+ case DYN_WEAK_DEF * 16 + WEAK_DEF:
+ // We've seen a dynamic definition and now we see a regular weak
+ // definition. The regular weak definition overrides.
+ to->override(sym, object, version);
+ return;
+
+ case UNDEF * 16 + WEAK_DEF:
+ case WEAK_UNDEF * 16 + WEAK_DEF:
+ case DYN_UNDEF * 16 + WEAK_DEF:
+ case DYN_WEAK_UNDEF * 16 + WEAK_DEF:
+ // A weak definition of a currently undefined symbol.
+ to->override(sym, object, version);
+ return;
+
+ case COMMON * 16 + WEAK_DEF:
+ case WEAK_COMMON * 16 + WEAK_DEF:
+ // A weak definition does not override a common definition.
+ return;
+
+ case DYN_COMMON * 16 + WEAK_DEF:
+ case DYN_WEAK_COMMON * 16 + WEAK_DEF:
+ // A weak definition does override a definition in a dynamic
+ // object. FIXME: We should optionally issue a warning.
+ to->override(sym, object, version);
+ return;
+
+ case DEF * 16 + DYN_DEF:
+ case WEAK_DEF * 16 + DYN_DEF:
+ case DYN_DEF * 16 + DYN_DEF:
+ case DYN_WEAK_DEF * 16 + DYN_DEF:
+ // Ignore a dynamic definition if we already have a definition.
+ return;
+
+ case UNDEF * 16 + DYN_DEF:
+ case WEAK_UNDEF * 16 + DYN_DEF:
+ case DYN_UNDEF * 16 + DYN_DEF:
+ case DYN_WEAK_UNDEF * 16 + DYN_DEF:
+ // Use a dynamic definition if we have a reference.
+ to->override(sym, object, version);
+ return;
+
+ case COMMON * 16 + DYN_DEF:
+ case WEAK_COMMON * 16 + DYN_DEF:
+ case DYN_COMMON * 16 + DYN_DEF:
+ case DYN_WEAK_COMMON * 16 + DYN_DEF:
+ // Ignore a dynamic definition if we already have a common
+ // definition.
+ return;
+
+ case DEF * 16 + DYN_WEAK_DEF:
+ case WEAK_DEF * 16 + DYN_WEAK_DEF:
+ case DYN_DEF * 16 + DYN_WEAK_DEF:
+ case DYN_WEAK_DEF * 16 + DYN_WEAK_DEF:
+ // Ignore a weak dynamic definition if we already have a
+ // definition.
+ return;
+
+ case UNDEF * 16 + DYN_WEAK_DEF:
+ case WEAK_UNDEF * 16 + DYN_WEAK_DEF:
+ case DYN_UNDEF * 16 + DYN_WEAK_DEF:
+ case DYN_WEAK_UNDEF * 16 + DYN_WEAK_DEF:
+ // Use a weak dynamic definition if we have a reference.
+ to->override(sym, object, version);
+ return;
+
+ case COMMON * 16 + DYN_WEAK_DEF:
+ case WEAK_COMMON * 16 + DYN_WEAK_DEF:
+ case DYN_COMMON * 16 + DYN_WEAK_DEF:
+ case DYN_WEAK_COMMON * 16 + DYN_WEAK_DEF:
+ // Ignore a weak dynamic definition if we already have a common
+ // definition.
+ return;
+
+ case DEF * 16 + UNDEF:
+ case WEAK_DEF * 16 + UNDEF:
+ case DYN_DEF * 16 + UNDEF:
+ case DYN_WEAK_DEF * 16 + UNDEF:
+ case UNDEF * 16 + UNDEF:
+ // A new undefined reference tells us nothing.
+ return;
+
+ case WEAK_UNDEF * 16 + UNDEF:
+ case DYN_UNDEF * 16 + UNDEF:
+ case DYN_WEAK_UNDEF * 16 + UNDEF:
+ // A strong undef overrides a dynamic or weak undef.
+ to->override(sym, object, version);
+ return;
+
+ case COMMON * 16 + UNDEF:
+ case WEAK_COMMON * 16 + UNDEF:
+ case DYN_COMMON * 16 + UNDEF:
+ case DYN_WEAK_COMMON * 16 + UNDEF:
+ // A new undefined reference tells us nothing.
+ return;
+
+ case DEF * 16 + WEAK_UNDEF:
+ case WEAK_DEF * 16 + WEAK_UNDEF:
+ case DYN_DEF * 16 + WEAK_UNDEF:
+ case DYN_WEAK_DEF * 16 + WEAK_UNDEF:
+ case UNDEF * 16 + WEAK_UNDEF:
+ case WEAK_UNDEF * 16 + WEAK_UNDEF:
+ case DYN_UNDEF * 16 + WEAK_UNDEF:
+ case DYN_WEAK_UNDEF * 16 + WEAK_UNDEF:
+ case COMMON * 16 + WEAK_UNDEF:
+ case WEAK_COMMON * 16 + WEAK_UNDEF:
+ case DYN_COMMON * 16 + WEAK_UNDEF:
+ case DYN_WEAK_COMMON * 16 + WEAK_UNDEF:
+ // A new weak undefined reference tells us nothing.
+ return;
+
+ case DEF * 16 + DYN_UNDEF:
+ case WEAK_DEF * 16 + DYN_UNDEF:
+ case DYN_DEF * 16 + DYN_UNDEF:
+ case DYN_WEAK_DEF * 16 + DYN_UNDEF:
+ case UNDEF * 16 + DYN_UNDEF:
+ case WEAK_UNDEF * 16 + DYN_UNDEF:
+ case DYN_UNDEF * 16 + DYN_UNDEF:
+ case DYN_WEAK_UNDEF * 16 + DYN_UNDEF:
+ case COMMON * 16 + DYN_UNDEF:
+ case WEAK_COMMON * 16 + DYN_UNDEF:
+ case DYN_COMMON * 16 + DYN_UNDEF:
+ case DYN_WEAK_COMMON * 16 + DYN_UNDEF:
+ // A new dynamic undefined reference tells us nothing.
+ return;
+
+ case DEF * 16 + DYN_WEAK_UNDEF:
+ case WEAK_DEF * 16 + DYN_WEAK_UNDEF:
+ case DYN_DEF * 16 + DYN_WEAK_UNDEF:
+ case DYN_WEAK_DEF * 16 + DYN_WEAK_UNDEF:
+ case UNDEF * 16 + DYN_WEAK_UNDEF:
+ case WEAK_UNDEF * 16 + DYN_WEAK_UNDEF:
+ case DYN_UNDEF * 16 + DYN_WEAK_UNDEF:
+ case DYN_WEAK_UNDEF * 16 + DYN_WEAK_UNDEF:
+ case COMMON * 16 + DYN_WEAK_UNDEF:
+ case WEAK_COMMON * 16 + DYN_WEAK_UNDEF:
+ case DYN_COMMON * 16 + DYN_WEAK_UNDEF:
+ case DYN_WEAK_COMMON * 16 + DYN_WEAK_UNDEF:
+ // A new weak dynamic undefined reference tells us nothing.
+ return;
+
+ case DEF * 16 + COMMON:
+ // A common symbol does not override a definition.
+ return;
+
+ case WEAK_DEF * 16 + COMMON:
+ case DYN_DEF * 16 + COMMON:
+ case DYN_WEAK_DEF * 16 + COMMON:
+ // A common symbol does override a weak definition or a dynamic
+ // definition.
+ to->override(sym, object, version);
+ return;
+
+ case UNDEF * 16 + COMMON:
+ case WEAK_UNDEF * 16 + COMMON:
+ case DYN_UNDEF * 16 + COMMON:
+ case DYN_WEAK_UNDEF * 16 + COMMON:
+ // A common symbol is a definition for a reference.
+ to->override(sym, object, version);
+ return;
+
+ case COMMON * 16 + COMMON:
+ // Set the size to the maximum.
+ if (sym.get_st_size() > to->symsize())
+ to->set_symsize(sym.get_st_size());
+ return;
+
+ case WEAK_COMMON * 16 + COMMON:
+ // I'm not sure just what a weak common symbol means, but
+ // presumably it can be overridden by a regular common symbol.
+ to->override(sym, object, version);
+ return;
+
+ case DYN_COMMON * 16 + COMMON:
+ case DYN_WEAK_COMMON * 16 + COMMON:
+ {
+ // Use the real common symbol, but adjust the size if necessary.
+ typename Sized_symbol<size>::Size_type symsize = to->symsize();
+ to->override(sym, object, version);
+ if (to->symsize() < symsize)
+ to->set_symsize(symsize);
+ }
+ return;
+
+ case DEF * 16 + WEAK_COMMON:
+ case WEAK_DEF * 16 + WEAK_COMMON:
+ case DYN_DEF * 16 + WEAK_COMMON:
+ case DYN_WEAK_DEF * 16 + WEAK_COMMON:
+ // Whatever a weak common symbol is, it won't override a
+ // definition.
+ return;
+
+ case UNDEF * 16 + WEAK_COMMON:
+ case WEAK_UNDEF * 16 + WEAK_COMMON:
+ case DYN_UNDEF * 16 + WEAK_COMMON:
+ case DYN_WEAK_UNDEF * 16 + WEAK_COMMON:
+ // A weak common symbol is better than an undefined symbol.
+ to->override(sym, object, version);
+ return;
+
+ case COMMON * 16 + WEAK_COMMON:
+ case WEAK_COMMON * 16 + WEAK_COMMON:
+ case DYN_COMMON * 16 + WEAK_COMMON:
+ case DYN_WEAK_COMMON * 16 + WEAK_COMMON:
+ // Ignore a weak common symbol in the presence of a real common
+ // symbol.
+ return;
+
+ case DEF * 16 + DYN_COMMON:
+ case WEAK_DEF * 16 + DYN_COMMON:
+ case DYN_DEF * 16 + DYN_COMMON:
+ case DYN_WEAK_DEF * 16 + DYN_COMMON:
+ // Ignore a dynamic common symbol in the presence of a
+ // definition.
+ return;
+
+ case UNDEF * 16 + DYN_COMMON:
+ case WEAK_UNDEF * 16 + DYN_COMMON:
+ case DYN_UNDEF * 16 + DYN_COMMON:
+ case DYN_WEAK_UNDEF * 16 + DYN_COMMON:
+ // A dynamic common symbol is a definition of sorts.
+ to->override(sym, object, version);
+ return;
+
+ case COMMON * 16 + DYN_COMMON:
+ case WEAK_COMMON * 16 + DYN_COMMON:
+ case DYN_COMMON * 16 + DYN_COMMON:
+ case DYN_WEAK_COMMON * 16 + DYN_COMMON:
+ // Set the size to the maximum.
+ if (sym.get_st_size() > to->symsize())
+ to->set_symsize(sym.get_st_size());
+ return;
+
+ case DEF * 16 + DYN_WEAK_COMMON:
+ case WEAK_DEF * 16 + DYN_WEAK_COMMON:
+ case DYN_DEF * 16 + DYN_WEAK_COMMON:
+ case DYN_WEAK_DEF * 16 + DYN_WEAK_COMMON:
+ // A common symbol is ignored in the face of a definition.
+ return;
+
+ case UNDEF * 16 + DYN_WEAK_COMMON:
+ case WEAK_UNDEF * 16 + DYN_WEAK_COMMON:
+ case DYN_UNDEF * 16 + DYN_WEAK_COMMON:
+ case DYN_WEAK_UNDEF * 16 + DYN_WEAK_COMMON:
+ // I guess a weak common symbol is better than a definition.
+ to->override(sym, object, version);
+ return;
+
+ case COMMON * 16 + DYN_WEAK_COMMON:
+ case WEAK_COMMON * 16 + DYN_WEAK_COMMON:
+ case DYN_COMMON * 16 + DYN_WEAK_COMMON:
+ case DYN_WEAK_COMMON * 16 + DYN_WEAK_COMMON:
+ // Set the size to the maximum.
+ if (sym.get_st_size() > to->symsize())
+ to->set_symsize(sym.get_st_size());
+ return;
+
+ default:
+ gold_unreachable();
+ }
+}
+
+// Instantiate the templates we need. We could use the configure
+// script to restrict this to only the ones needed for implemented
+// targets.
+
+template
+void
+Symbol_table::resolve<32, true>(
+ Sized_symbol<32>* to,
+ const elfcpp::Sym<32, true>& sym,
+ Object* object,
+ const char* version);
+
+template
+void
+Symbol_table::resolve<32, false>(
+ Sized_symbol<32>* to,
+ const elfcpp::Sym<32, false>& sym,
+ Object* object,
+ const char* version);
+
+template
+void
+Symbol_table::resolve<64, true>(
+ Sized_symbol<64>* to,
+ const elfcpp::Sym<64, true>& sym,
+ Object* object,
+ const char* version);
+
+template
+void
+Symbol_table::resolve<64, false>(
+ Sized_symbol<64>* to,
+ const elfcpp::Sym<64, false>& sym,
+ Object* object,
+ const char* version);
+
+} // End namespace gold.
diff --git a/gold/script-c.h b/gold/script-c.h
new file mode 100644
index 000000000000..e40488985d0f
--- /dev/null
+++ b/gold/script-c.h
@@ -0,0 +1,53 @@
+/* script-c.h -- C interface for linker scripts in gold. */
+
+/* This file exists so that both the bison parser and script.cc can
+ include it, so that they can communicate back and forth. */
+
+#ifndef GOLD_SCRIPT_C_H
+#define GOLD_SCRIPT_C_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "yyscript.h"
+
+/* The bison parser function. */
+
+extern int
+yyparse(void* closure);
+
+/* Called by the bison parser skeleton to return the next token. */
+
+extern int
+yylex(YYSTYPE*, void* closure);
+
+/* Called by the bison parser skeleton to report an error. */
+
+extern void
+yyerror(void* closure, const char*);
+
+/* Called by the bison parser to add a file to the link. */
+
+extern void
+script_add_file(void* closure, const char*);
+
+/* Called by the bison parser to start and stop a group. */
+
+extern void
+script_start_group(void* closure);
+extern void
+script_end_group(void* closure);
+
+/* Called by the bison parser to start and end an AS_NEEDED list. */
+
+extern void
+script_start_as_needed(void* closure);
+extern void
+script_end_as_needed(void* closure);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(GOLD_SCRIPT_C_H) */
diff --git a/gold/script.cc b/gold/script.cc
new file mode 100644
index 000000000000..f5584d9b01ea
--- /dev/null
+++ b/gold/script.cc
@@ -0,0 +1,1193 @@
+// script.cc -- handle linker scripts for gold.
+
+#include "gold.h"
+
+#include <string>
+#include <vector>
+#include <cstdio>
+#include <cstdlib>
+
+#include "options.h"
+#include "fileread.h"
+#include "workqueue.h"
+#include "readsyms.h"
+#include "yyscript.h"
+#include "script.h"
+#include "script-c.h"
+
+namespace gold
+{
+
+// A token read from a script file. We don't implement keywords here;
+// all keywords are simply represented as a string.
+
+class Token
+{
+ public:
+ // Token classification.
+ enum Classification
+ {
+ // Token is invalid.
+ TOKEN_INVALID,
+ // Token indicates end of input.
+ TOKEN_EOF,
+ // Token is a string of characters.
+ TOKEN_STRING,
+ // Token is an operator.
+ TOKEN_OPERATOR,
+ // Token is a number (an integer).
+ TOKEN_INTEGER
+ };
+
+ // We need an empty constructor so that we can put this STL objects.
+ Token()
+ : classification_(TOKEN_INVALID), value_(), opcode_(0),
+ lineno_(0), charpos_(0)
+ { }
+
+ // A general token with no value.
+ Token(Classification classification, int lineno, int charpos)
+ : classification_(classification), value_(), opcode_(0),
+ lineno_(lineno), charpos_(charpos)
+ {
+ gold_assert(classification == TOKEN_INVALID
+ || classification == TOKEN_EOF);
+ }
+
+ // A general token with a value.
+ Token(Classification classification, const std::string& value,
+ int lineno, int charpos)
+ : classification_(classification), value_(value), opcode_(0),
+ lineno_(lineno), charpos_(charpos)
+ {
+ gold_assert(classification != TOKEN_INVALID
+ && classification != TOKEN_EOF);
+ }
+
+ // A token representing a string of characters.
+ Token(const std::string& s, int lineno, int charpos)
+ : classification_(TOKEN_STRING), value_(s), opcode_(0),
+ lineno_(lineno), charpos_(charpos)
+ { }
+
+ // A token representing an operator.
+ Token(int opcode, int lineno, int charpos)
+ : classification_(TOKEN_OPERATOR), value_(), opcode_(opcode),
+ lineno_(lineno), charpos_(charpos)
+ { }
+
+ // Return whether the token is invalid.
+ bool
+ is_invalid() const
+ { return this->classification_ == TOKEN_INVALID; }
+
+ // Return whether this is an EOF token.
+ bool
+ is_eof() const
+ { return this->classification_ == TOKEN_EOF; }
+
+ // Return the token classification.
+ Classification
+ classification() const
+ { return this->classification_; }
+
+ // Return the line number at which the token starts.
+ int
+ lineno() const
+ { return this->lineno_; }
+
+ // Return the character position at this the token starts.
+ int
+ charpos() const
+ { return this->charpos_; }
+
+ // Get the value of a token.
+
+ const std::string&
+ string_value() const
+ {
+ gold_assert(this->classification_ == TOKEN_STRING);
+ return this->value_;
+ }
+
+ int
+ operator_value() const
+ {
+ gold_assert(this->classification_ == TOKEN_OPERATOR);
+ return this->opcode_;
+ }
+
+ int64_t
+ integer_value() const
+ {
+ gold_assert(this->classification_ == TOKEN_INTEGER);
+ return strtoll(this->value_.c_str(), NULL, 0);
+ }
+
+ private:
+ // The token classification.
+ Classification classification_;
+ // The token value, for TOKEN_STRING or TOKEN_INTEGER.
+ std::string value_;
+ // The token value, for TOKEN_OPERATOR.
+ int opcode_;
+ // The line number where this token started (one based).
+ int lineno_;
+ // The character position within the line where this token started
+ // (one based).
+ int charpos_;
+};
+
+// This class handles lexing a file into a sequence of tokens. We
+// don't expect linker scripts to be large, so we just read them and
+// tokenize them all at once.
+
+class Lex
+{
+ public:
+ Lex(Input_file* input_file)
+ : input_file_(input_file), tokens_()
+ { }
+
+ // Tokenize the file. Return the final token, which will be either
+ // an invalid token or an EOF token. An invalid token indicates
+ // that tokenization failed.
+ Token
+ tokenize();
+
+ // A token sequence.
+ typedef std::vector<Token> Token_sequence;
+
+ // Return the tokens.
+ const Token_sequence&
+ tokens() const
+ { return this->tokens_; }
+
+ private:
+ Lex(const Lex&);
+ Lex& operator=(const Lex&);
+
+ // Read the file into a string buffer.
+ void
+ read_file(std::string*);
+
+ // Make a general token with no value at the current location.
+ Token
+ make_token(Token::Classification c, const char* p) const
+ { return Token(c, this->lineno_, p - this->linestart_ + 1); }
+
+ // Make a general token with a value at the current location.
+ Token
+ make_token(Token::Classification c, const std::string& v, const char* p)
+ const
+ { return Token(c, v, this->lineno_, p - this->linestart_ + 1); }
+
+ // Make an operator token at the current location.
+ Token
+ make_token(int opcode, const char* p) const
+ { return Token(opcode, this->lineno_, p - this->linestart_ + 1); }
+
+ // Make an invalid token at the current location.
+ Token
+ make_invalid_token(const char* p)
+ { return this->make_token(Token::TOKEN_INVALID, p); }
+
+ // Make an EOF token at the current location.
+ Token
+ make_eof_token(const char* p)
+ { return this->make_token(Token::TOKEN_EOF, p); }
+
+ // Return whether C can be the first character in a name. C2 is the
+ // next character, since we sometimes need that.
+ static inline bool
+ can_start_name(char c, char c2);
+
+ // Return whether C can appear in a name which has already started.
+ static inline bool
+ can_continue_name(char c);
+
+ // Return whether C, C2, C3 can start a hex number.
+ static inline bool
+ can_start_hex(char c, char c2, char c3);
+
+ // Return whether C can appear in a hex number.
+ static inline bool
+ can_continue_hex(char c);
+
+ // Return whether C can start a non-hex number.
+ static inline bool
+ can_start_number(char c);
+
+ // Return whether C can appear in a non-hex number.
+ static inline bool
+ can_continue_number(char c)
+ { return Lex::can_start_number(c); }
+
+ // If C1 C2 C3 form a valid three character operator, return the
+ // opcode. Otherwise return 0.
+ static inline int
+ three_char_operator(char c1, char c2, char c3);
+
+ // If C1 C2 form a valid two character operator, return the opcode.
+ // Otherwise return 0.
+ static inline int
+ two_char_operator(char c1, char c2);
+
+ // If C1 is a valid one character operator, return the opcode.
+ // Otherwise return 0.
+ static inline int
+ one_char_operator(char c1);
+
+ // Read the next token.
+ Token
+ get_token(const char**);
+
+ // Skip a C style /* */ comment. Return false if the comment did
+ // not end.
+ bool
+ skip_c_comment(const char**);
+
+ // Skip a line # comment. Return false if there was no newline.
+ bool
+ skip_line_comment(const char**);
+
+ // Build a token CLASSIFICATION from all characters that match
+ // CAN_CONTINUE_FN. The token starts at START. Start matching from
+ // MATCH. Set *PP to the character following the token.
+ inline Token
+ gather_token(Token::Classification, bool (*can_continue_fn)(char),
+ const char* start, const char* match, const char** pp);
+
+ // Build a token from a quoted string.
+ Token
+ gather_quoted_string(const char** pp);
+
+ // The file we are reading.
+ Input_file* input_file_;
+ // The token sequence we create.
+ Token_sequence tokens_;
+ // The current line number.
+ int lineno_;
+ // The start of the current line in the buffer.
+ const char* linestart_;
+};
+
+// Read the whole file into memory. We don't expect linker scripts to
+// be large, so we just use a std::string as a buffer. We ignore the
+// data we've already read, so that we read aligned buffers.
+
+void
+Lex::read_file(std::string* contents)
+{
+ contents->clear();
+ off_t off = 0;
+ off_t got;
+ unsigned char buf[BUFSIZ];
+ do
+ {
+ this->input_file_->file().read(off, sizeof buf, buf, &got);
+ contents->append(reinterpret_cast<char*>(&buf[0]), got);
+ }
+ while (got == sizeof buf);
+}
+
+// Return whether C can be the start of a name, if the next character
+// is C2. A name can being with a letter, underscore, period, or
+// dollar sign. Because a name can be a file name, we also permit
+// forward slash, backslash, and tilde. Tilde is the tricky case
+// here; GNU ld also uses it as a bitwise not operator. It is only
+// recognized as the operator if it is not immediately followed by
+// some character which can appear in a symbol. That is, "~0" is a
+// symbol name, and "~ 0" is an expression using bitwise not. We are
+// compatible.
+
+inline bool
+Lex::can_start_name(char c, char c2)
+{
+ switch (c)
+ {
+ case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+ case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+ case 'M': case 'N': case 'O': case 'Q': case 'P': case 'R':
+ case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+ case 'Y': case 'Z':
+ case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+ case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+ case 'm': case 'n': case 'o': case 'q': case 'p': case 'r':
+ case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+ case 'y': case 'z':
+ case '_': case '.': case '$': case '/': case '\\':
+ return true;
+
+ case '~':
+ return can_continue_name(c2);
+
+ default:
+ return false;
+ }
+}
+
+// Return whether C can continue a name which has already started.
+// Subsequent characters in a name are the same as the leading
+// characters, plus digits and "=+-:[],?*". So in general the linker
+// script language requires spaces around operators.
+
+inline bool
+Lex::can_continue_name(char c)
+{
+ switch (c)
+ {
+ case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+ case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+ case 'M': case 'N': case 'O': case 'Q': case 'P': case 'R':
+ case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+ case 'Y': case 'Z':
+ case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+ case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+ case 'm': case 'n': case 'o': case 'q': case 'p': case 'r':
+ case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+ case 'y': case 'z':
+ case '_': case '.': case '$': case '/': case '\\':
+ case '~':
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ case '=': case '+': case '-': case ':': case '[': case ']':
+ case ',': case '?': case '*':
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+// For a number we accept 0x followed by hex digits, or any sequence
+// of digits. The old linker accepts leading '$' for hex, and
+// trailing HXBOD. Those are for MRI compatibility and we don't
+// accept them. The old linker also accepts trailing MK for mega or
+// kilo. Those are mentioned in the documentation, and we accept
+// them.
+
+// Return whether C1 C2 C3 can start a hex number.
+
+inline bool
+Lex::can_start_hex(char c1, char c2, char c3)
+{
+ if (c1 == '0' && (c2 == 'x' || c2 == 'X'))
+ return Lex::can_continue_hex(c3);
+ return false;
+}
+
+// Return whether C can appear in a hex number.
+
+inline bool
+Lex::can_continue_hex(char c)
+{
+ switch (c)
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+ case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+// Return whether C can start a non-hex number.
+
+inline bool
+Lex::can_start_number(char c)
+{
+ switch (c)
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+// If C1 C2 C3 form a valid three character operator, return the
+// opcode (defined in the yyscript.h file generated from yyscript.y).
+// Otherwise return 0.
+
+inline int
+Lex::three_char_operator(char c1, char c2, char c3)
+{
+ switch (c1)
+ {
+ case '<':
+ if (c2 == '<' && c3 == '=')
+ return LSHIFTEQ;
+ break;
+ case '>':
+ if (c2 == '>' && c3 == '=')
+ return RSHIFTEQ;
+ break;
+ default:
+ break;
+ }
+ return 0;
+}
+
+// If C1 C2 form a valid two character operator, return the opcode
+// (defined in the yyscript.h file generated from yyscript.y).
+// Otherwise return 0.
+
+inline int
+Lex::two_char_operator(char c1, char c2)
+{
+ switch (c1)
+ {
+ case '=':
+ if (c2 == '=')
+ return EQ;
+ break;
+ case '!':
+ if (c2 == '=')
+ return NE;
+ break;
+ case '+':
+ if (c2 == '=')
+ return PLUSEQ;
+ break;
+ case '-':
+ if (c2 == '=')
+ return MINUSEQ;
+ break;
+ case '*':
+ if (c2 == '=')
+ return MULTEQ;
+ break;
+ case '/':
+ if (c2 == '=')
+ return DIVEQ;
+ break;
+ case '|':
+ if (c2 == '=')
+ return OREQ;
+ if (c2 == '|')
+ return OROR;
+ break;
+ case '&':
+ if (c2 == '=')
+ return ANDEQ;
+ if (c2 == '&')
+ return ANDAND;
+ break;
+ case '>':
+ if (c2 == '=')
+ return GE;
+ if (c2 == '>')
+ return RSHIFT;
+ break;
+ case '<':
+ if (c2 == '=')
+ return LE;
+ if (c2 == '<')
+ return LSHIFT;
+ break;
+ default:
+ break;
+ }
+ return 0;
+}
+
+// If C1 is a valid operator, return the opcode. Otherwise return 0.
+
+inline int
+Lex::one_char_operator(char c1)
+{
+ switch (c1)
+ {
+ case '+':
+ case '-':
+ case '*':
+ case '/':
+ case '%':
+ case '!':
+ case '&':
+ case '|':
+ case '^':
+ case '~':
+ case '<':
+ case '>':
+ case '=':
+ case '?':
+ case ',':
+ case '(':
+ case ')':
+ case '{':
+ case '}':
+ case '[':
+ case ']':
+ case ':':
+ case ';':
+ return c1;
+ default:
+ return 0;
+ }
+}
+
+// Skip a C style comment. *PP points to just after the "/*". Return
+// false if the comment did not end.
+
+bool
+Lex::skip_c_comment(const char** pp)
+{
+ const char* p = *pp;
+ while (p[0] != '*' || p[1] != '/')
+ {
+ if (*p == '\0')
+ {
+ *pp = p;
+ return false;
+ }
+
+ if (*p == '\n')
+ {
+ ++this->lineno_;
+ this->linestart_ = p + 1;
+ }
+ ++p;
+ }
+
+ *pp = p + 2;
+ return true;
+}
+
+// Skip a line # comment. Return false if there was no newline.
+
+bool
+Lex::skip_line_comment(const char** pp)
+{
+ const char* p = *pp;
+ size_t skip = strcspn(p, "\n");
+ if (p[skip] == '\0')
+ {
+ *pp = p + skip;
+ return false;
+ }
+
+ p += skip + 1;
+ ++this->lineno_;
+ this->linestart_ = p;
+ *pp = p;
+
+ return true;
+}
+
+// Build a token CLASSIFICATION from all characters that match
+// CAN_CONTINUE_FN. Update *PP.
+
+inline Token
+Lex::gather_token(Token::Classification classification,
+ bool (*can_continue_fn)(char),
+ const char* start,
+ const char* match,
+ const char **pp)
+{
+ while ((*can_continue_fn)(*match))
+ ++match;
+ *pp = match;
+ return this->make_token(classification,
+ std::string(start, match - start),
+ start);
+}
+
+// Build a token from a quoted string.
+
+Token
+Lex::gather_quoted_string(const char** pp)
+{
+ const char* start = *pp;
+ const char* p = start;
+ ++p;
+ size_t skip = strcspn(p, "\"\n");
+ if (p[skip] != '"')
+ return this->make_invalid_token(start);
+ *pp = p + skip + 1;
+ return this->make_token(Token::TOKEN_STRING,
+ std::string(p, skip),
+ start);
+}
+
+// Return the next token at *PP. Update *PP. General guideline: we
+// require linker scripts to be simple ASCII. No unicode linker
+// scripts. In particular we can assume that any '\0' is the end of
+// the input.
+
+Token
+Lex::get_token(const char** pp)
+{
+ const char* p = *pp;
+
+ while (true)
+ {
+ if (*p == '\0')
+ {
+ *pp = p;
+ return this->make_eof_token(p);
+ }
+
+ // Skip whitespace quickly.
+ while (*p == ' ' || *p == '\t')
+ ++p;
+
+ if (*p == '\n')
+ {
+ ++p;
+ ++this->lineno_;
+ this->linestart_ = p;
+ continue;
+ }
+
+ // Skip C style comments.
+ if (p[0] == '/' && p[1] == '*')
+ {
+ int lineno = this->lineno_;
+ int charpos = p - this->linestart_ + 1;
+
+ *pp = p + 2;
+ if (!this->skip_c_comment(pp))
+ return Token(Token::TOKEN_INVALID, lineno, charpos);
+ p = *pp;
+
+ continue;
+ }
+
+ // Skip line comments.
+ if (*p == '#')
+ {
+ *pp = p + 1;
+ if (!this->skip_line_comment(pp))
+ return this->make_eof_token(p);
+ p = *pp;
+ continue;
+ }
+
+ // Check for a name.
+ if (Lex::can_start_name(p[0], p[1]))
+ return this->gather_token(Token::TOKEN_STRING,
+ Lex::can_continue_name,
+ p, p + 2, pp);
+
+ // We accept any arbitrary name in double quotes, as long as it
+ // does not cross a line boundary.
+ if (*p == '"')
+ {
+ *pp = p;
+ return this->gather_quoted_string(pp);
+ }
+
+ // Check for a number.
+
+ if (Lex::can_start_hex(p[0], p[1], p[2]))
+ return this->gather_token(Token::TOKEN_INTEGER,
+ Lex::can_continue_hex,
+ p, p + 3, pp);
+
+ if (Lex::can_start_number(p[0]))
+ return this->gather_token(Token::TOKEN_INTEGER,
+ Lex::can_continue_number,
+ p, p + 1, pp);
+
+ // Check for operators.
+
+ int opcode = Lex::three_char_operator(p[0], p[1], p[2]);
+ if (opcode != 0)
+ {
+ *pp = p + 3;
+ return this->make_token(opcode, p);
+ }
+
+ opcode = Lex::two_char_operator(p[0], p[1]);
+ if (opcode != 0)
+ {
+ *pp = p + 2;
+ return this->make_token(opcode, p);
+ }
+
+ opcode = Lex::one_char_operator(p[0]);
+ if (opcode != 0)
+ {
+ *pp = p + 1;
+ return this->make_token(opcode, p);
+ }
+
+ return this->make_token(Token::TOKEN_INVALID, p);
+ }
+}
+
+// Tokenize the file. Return the final token.
+
+Token
+Lex::tokenize()
+{
+ std::string contents;
+ this->read_file(&contents);
+
+ const char* p = contents.c_str();
+
+ this->lineno_ = 1;
+ this->linestart_ = p;
+
+ while (true)
+ {
+ Token t(this->get_token(&p));
+
+ // Don't let an early null byte fool us into thinking that we've
+ // reached the end of the file.
+ if (t.is_eof()
+ && static_cast<size_t>(p - contents.c_str()) < contents.length())
+ t = this->make_invalid_token(p);
+
+ if (t.is_invalid() || t.is_eof())
+ return t;
+
+ this->tokens_.push_back(t);
+ }
+}
+
+// A trivial task which waits for THIS_BLOCKER to be clear and then
+// clears NEXT_BLOCKER. THIS_BLOCKER may be NULL.
+
+class Script_unblock : public Task
+{
+ public:
+ Script_unblock(Task_token* this_blocker, Task_token* next_blocker)
+ : this_blocker_(this_blocker), next_blocker_(next_blocker)
+ { }
+
+ ~Script_unblock()
+ {
+ if (this->this_blocker_ != NULL)
+ delete this->this_blocker_;
+ }
+
+ Is_runnable_type
+ is_runnable(Workqueue*)
+ {
+ if (this->this_blocker_ != NULL && this->this_blocker_->is_blocked())
+ return IS_BLOCKED;
+ return IS_RUNNABLE;
+ }
+
+ Task_locker*
+ locks(Workqueue* workqueue)
+ {
+ return new Task_locker_block(*this->next_blocker_, workqueue);
+ }
+
+ void
+ run(Workqueue*)
+ { }
+
+ private:
+ Task_token* this_blocker_;
+ Task_token* next_blocker_;
+};
+
+// This class holds data passed through the parser to the lexer and to
+// the parser support functions. This avoids global variables. We
+// can't use global variables because we need not be called in the
+// main thread.
+
+class Parser_closure
+{
+ public:
+ Parser_closure(const char* filename,
+ const Position_dependent_options& posdep_options,
+ bool in_group,
+ const Lex::Token_sequence* tokens)
+ : filename_(filename), posdep_options_(posdep_options),
+ in_group_(in_group), tokens_(tokens),
+ next_token_index_(0), inputs_(NULL)
+ { }
+
+ // Return the file name.
+ const char*
+ filename() const
+ { return this->filename_; }
+
+ // Return the position dependent options. The caller may modify
+ // this.
+ Position_dependent_options&
+ position_dependent_options()
+ { return this->posdep_options_; }
+
+ // Return whether this script is being run in a group.
+ bool
+ in_group() const
+ { return this->in_group_; }
+
+ // Whether we are at the end of the token list.
+ bool
+ at_eof() const
+ { return this->next_token_index_ >= this->tokens_->size(); }
+
+ // Return the next token.
+ const Token*
+ next_token()
+ {
+ const Token* ret = &(*this->tokens_)[this->next_token_index_];
+ ++this->next_token_index_;
+ return ret;
+ }
+
+ // Return the list of input files, creating it if necessary. This
+ // is a space leak--we never free the INPUTS_ pointer.
+ Input_arguments*
+ inputs()
+ {
+ if (this->inputs_ == NULL)
+ this->inputs_ = new Input_arguments();
+ return this->inputs_;
+ }
+
+ // Return whether we saw any input files.
+ bool
+ saw_inputs() const
+ { return this->inputs_ != NULL && !this->inputs_->empty(); }
+
+ private:
+ // The name of the file we are reading.
+ const char* filename_;
+ // The position dependent options.
+ Position_dependent_options posdep_options_;
+ // Whether we are currently in a --start-group/--end-group.
+ bool in_group_;
+
+ // The tokens to be returned by the lexer.
+ const Lex::Token_sequence* tokens_;
+ // The index of the next token to return.
+ unsigned int next_token_index_;
+ // New input files found to add to the link.
+ Input_arguments* inputs_;
+};
+
+// FILE was found as an argument on the command line. Try to read it
+// as a script. We've already read BYTES of data into P, but we
+// ignore that. Return true if the file was handled.
+
+bool
+read_input_script(Workqueue* workqueue, const General_options& options,
+ Symbol_table* symtab, Layout* layout,
+ const Dirsearch& dirsearch, Input_objects* input_objects,
+ Input_group* input_group,
+ const Input_argument* input_argument,
+ Input_file* input_file, const unsigned char*, off_t,
+ Task_token* this_blocker, Task_token* next_blocker)
+{
+ Lex lex(input_file);
+ if (lex.tokenize().is_invalid())
+ return false;
+
+ Parser_closure closure(input_file->filename().c_str(),
+ input_argument->file().options(),
+ input_group != NULL,
+ &lex.tokens());
+
+ if (yyparse(&closure) != 0)
+ return false;
+
+ // THIS_BLOCKER must be clear before we may add anything to the
+ // symbol table. We are responsible for unblocking NEXT_BLOCKER
+ // when we are done. We are responsible for deleting THIS_BLOCKER
+ // when it is unblocked.
+
+ if (!closure.saw_inputs())
+ {
+ // The script did not add any files to read. Note that we are
+ // not permitted to call NEXT_BLOCKER->unblock() here even if
+ // THIS_BLOCKER is NULL, as we are not in the main thread.
+ workqueue->queue(new Script_unblock(this_blocker, next_blocker));
+ return true;
+ }
+
+ for (Input_arguments::const_iterator p = closure.inputs()->begin();
+ p != closure.inputs()->end();
+ ++p)
+ {
+ Task_token* nb;
+ if (p + 1 == closure.inputs()->end())
+ nb = next_blocker;
+ else
+ {
+ nb = new Task_token();
+ nb->add_blocker();
+ }
+ workqueue->queue(new Read_symbols(options, input_objects, symtab,
+ layout, dirsearch, &*p,
+ input_group, this_blocker, nb));
+ this_blocker = nb;
+ }
+
+ return true;
+}
+
+// Manage mapping from keywords to the codes expected by the bison
+// parser.
+
+class Keyword_to_parsecode
+{
+ public:
+ // The structure which maps keywords to parsecodes.
+ struct Keyword_parsecode
+ {
+ // Keyword.
+ const char* keyword;
+ // Corresponding parsecode.
+ int parsecode;
+ };
+
+ // Return the parsecode corresponding KEYWORD, or 0 if it is not a
+ // keyword.
+ static int
+ keyword_to_parsecode(const char* keyword);
+
+ private:
+ // The array of all keywords.
+ static const Keyword_parsecode keyword_parsecodes_[];
+
+ // The number of keywords.
+ static const int keyword_count;
+};
+
+// Mapping from keyword string to keyword parsecode. This array must
+// be kept in sorted order. Parsecodes are looked up using bsearch.
+// This array must correspond to the list of parsecodes in yyscript.y.
+
+const Keyword_to_parsecode::Keyword_parsecode
+Keyword_to_parsecode::keyword_parsecodes_[] =
+{
+ { "ABSOLUTE", ABSOLUTE },
+ { "ADDR", ADDR },
+ { "ALIGN", ALIGN_K },
+ { "ASSERT", ASSERT_K },
+ { "AS_NEEDED", AS_NEEDED },
+ { "AT", AT },
+ { "BIND", BIND },
+ { "BLOCK", BLOCK },
+ { "BYTE", BYTE },
+ { "CONSTANT", CONSTANT },
+ { "CONSTRUCTORS", CONSTRUCTORS },
+ { "COPY", COPY },
+ { "CREATE_OBJECT_SYMBOLS", CREATE_OBJECT_SYMBOLS },
+ { "DATA_SEGMENT_ALIGN", DATA_SEGMENT_ALIGN },
+ { "DATA_SEGMENT_END", DATA_SEGMENT_END },
+ { "DATA_SEGMENT_RELRO_END", DATA_SEGMENT_RELRO_END },
+ { "DEFINED", DEFINED },
+ { "DSECT", DSECT },
+ { "ENTRY", ENTRY },
+ { "EXCLUDE_FILE", EXCLUDE_FILE },
+ { "EXTERN", EXTERN },
+ { "FILL", FILL },
+ { "FLOAT", FLOAT },
+ { "FORCE_COMMON_ALLOCATION", FORCE_COMMON_ALLOCATION },
+ { "GROUP", GROUP },
+ { "HLL", HLL },
+ { "INCLUDE", INCLUDE },
+ { "INFO", INFO },
+ { "INHIBIT_COMMON_ALLOCATION", INHIBIT_COMMON_ALLOCATION },
+ { "INPUT", INPUT },
+ { "KEEP", KEEP },
+ { "LENGTH", LENGTH },
+ { "LOADADDR", LOADADDR },
+ { "LONG", LONG },
+ { "MAP", MAP },
+ { "MAX", MAX_K },
+ { "MEMORY", MEMORY },
+ { "MIN", MIN_K },
+ { "NEXT", NEXT },
+ { "NOCROSSREFS", NOCROSSREFS },
+ { "NOFLOAT", NOFLOAT },
+ { "NOLOAD", NOLOAD },
+ { "ONLY_IF_RO", ONLY_IF_RO },
+ { "ONLY_IF_RW", ONLY_IF_RW },
+ { "ORIGIN", ORIGIN },
+ { "OUTPUT", OUTPUT },
+ { "OUTPUT_ARCH", OUTPUT_ARCH },
+ { "OUTPUT_FORMAT", OUTPUT_FORMAT },
+ { "OVERLAY", OVERLAY },
+ { "PHDRS", PHDRS },
+ { "PROVIDE", PROVIDE },
+ { "PROVIDE_HIDDEN", PROVIDE_HIDDEN },
+ { "QUAD", QUAD },
+ { "SEARCH_DIR", SEARCH_DIR },
+ { "SECTIONS", SECTIONS },
+ { "SEGMENT_START", SEGMENT_START },
+ { "SHORT", SHORT },
+ { "SIZEOF", SIZEOF },
+ { "SIZEOF_HEADERS", SIZEOF_HEADERS },
+ { "SORT_BY_ALIGNMENT", SORT_BY_ALIGNMENT },
+ { "SORT_BY_NAME", SORT_BY_NAME },
+ { "SPECIAL", SPECIAL },
+ { "SQUAD", SQUAD },
+ { "STARTUP", STARTUP },
+ { "SUBALIGN", SUBALIGN },
+ { "SYSLIB", SYSLIB },
+ { "TARGET", TARGET_K },
+ { "TRUNCATE", TRUNCATE },
+ { "VERSION", VERSIONK },
+ { "global", GLOBAL },
+ { "l", LENGTH },
+ { "len", LENGTH },
+ { "local", LOCAL },
+ { "o", ORIGIN },
+ { "org", ORIGIN },
+ { "sizeof_headers", SIZEOF_HEADERS },
+};
+
+const int Keyword_to_parsecode::keyword_count =
+ (sizeof(Keyword_to_parsecode::keyword_parsecodes_)
+ / sizeof(Keyword_to_parsecode::keyword_parsecodes_[0]));
+
+// Comparison function passed to bsearch.
+
+extern "C"
+{
+
+static int
+ktt_compare(const void* keyv, const void* kttv)
+{
+ const char* key = static_cast<const char*>(keyv);
+ const Keyword_to_parsecode::Keyword_parsecode* ktt =
+ static_cast<const Keyword_to_parsecode::Keyword_parsecode*>(kttv);
+ return strcmp(key, ktt->keyword);
+}
+
+} // End extern "C".
+
+int
+Keyword_to_parsecode::keyword_to_parsecode(const char* keyword)
+{
+ void* kttv = bsearch(keyword,
+ Keyword_to_parsecode::keyword_parsecodes_,
+ Keyword_to_parsecode::keyword_count,
+ sizeof(Keyword_to_parsecode::keyword_parsecodes_[0]),
+ ktt_compare);
+ if (kttv == NULL)
+ return 0;
+ Keyword_parsecode* ktt = static_cast<Keyword_parsecode*>(kttv);
+ return ktt->parsecode;
+}
+
+} // End namespace gold.
+
+// The remaining functions are extern "C", so it's clearer to not put
+// them in namespace gold.
+
+using namespace gold;
+
+// This function is called by the bison parser to return the next
+// token.
+
+extern "C" int
+yylex(YYSTYPE* lvalp, void* closurev)
+{
+ Parser_closure* closure = static_cast<Parser_closure*>(closurev);
+
+ if (closure->at_eof())
+ return 0;
+
+ const Token* token = closure->next_token();
+
+ switch (token->classification())
+ {
+ default:
+ case Token::TOKEN_INVALID:
+ case Token::TOKEN_EOF:
+ gold_unreachable();
+
+ case Token::TOKEN_STRING:
+ {
+ const char* str = token->string_value().c_str();
+ int parsecode = Keyword_to_parsecode::keyword_to_parsecode(str);
+ if (parsecode != 0)
+ return parsecode;
+ lvalp->string = str;
+ return STRING;
+ }
+
+ case Token::TOKEN_OPERATOR:
+ return token->operator_value();
+
+ case Token::TOKEN_INTEGER:
+ lvalp->integer = token->integer_value();
+ return INTEGER;
+ }
+}
+
+// This function is called by the bison parser to report an error.
+
+extern "C" void
+yyerror(void* closurev, const char* message)
+{
+ Parser_closure* closure = static_cast<Parser_closure*>(closurev);
+
+ fprintf(stderr, _("%s: %s: %s\n"),
+ program_name, closure->filename(), message);
+ gold_exit(false);
+}
+
+// Called by the bison parser to add a file to the link.
+
+extern "C" void
+script_add_file(void* closurev, const char* name)
+{
+ Parser_closure* closure = static_cast<Parser_closure*>(closurev);
+ Input_file_argument file(name, false, closure->position_dependent_options());
+ closure->inputs()->add_file(file);
+}
+
+// Called by the bison parser to start a group. If we are already in
+// a group, that means that this script was invoked within a
+// --start-group --end-group sequence on the command line, or that
+// this script was found in a GROUP of another script. In that case,
+// we simply continue the existing group, rather than starting a new
+// one. It is possible to construct a case in which this will do
+// something other than what would happen if we did a recursive group,
+// but it's hard to imagine why the different behaviour would be
+// useful for a real program. Avoiding recursive groups is simpler
+// and more efficient.
+
+extern "C" void
+script_start_group(void* closurev)
+{
+ Parser_closure* closure = static_cast<Parser_closure*>(closurev);
+ if (!closure->in_group())
+ closure->inputs()->start_group();
+}
+
+// Called by the bison parser at the end of a group.
+
+extern "C" void
+script_end_group(void* closurev)
+{
+ Parser_closure* closure = static_cast<Parser_closure*>(closurev);
+ if (!closure->in_group())
+ closure->inputs()->end_group();
+}
+
+// Called by the bison parser to start an AS_NEEDED list.
+
+extern "C" void
+script_start_as_needed(void* closurev)
+{
+ Parser_closure* closure = static_cast<Parser_closure*>(closurev);
+ closure->position_dependent_options().set_as_needed();
+}
+
+// Called by the bison parser at the end of an AS_NEEDED list.
+
+extern "C" void
+script_end_as_needed(void* closurev)
+{
+ Parser_closure* closure = static_cast<Parser_closure*>(closurev);
+ closure->position_dependent_options().clear_as_needed();
+}
diff --git a/gold/script.h b/gold/script.h
new file mode 100644
index 000000000000..de2e5af1a661
--- /dev/null
+++ b/gold/script.h
@@ -0,0 +1,39 @@
+// script.h -- handle linker scripts for gold -*- C++ -*-
+
+// We implement a subset of the original GNU ld linker script language
+// for compatibility. The goal is not to implement the entire
+// language. It is merely to implement enough to handle common uses.
+// In particular we need to handle /usr/lib/libc.so on a typical
+// GNU/Linux system, and we want to handle linker scripts used by the
+// Linux kernel build.
+
+#ifndef GOLD_SCRIPT_H
+#define GOLD_SCRIPT_H
+
+namespace gold
+{
+
+class General_options;
+class Symbol_table;
+class Layout;
+class Input_objects;
+class Input_group;
+class Input_file;
+class Task_token;
+
+// FILE was found as an argument on the command line, but was not
+// recognized as an ELF file. Try to read it as a script. We've
+// already read BYTES of data into P. Return true if the file was
+// handled. This has to handle /usr/lib/libc.so on a GNU/Linux
+// system.
+
+bool
+read_input_script(Workqueue*, const General_options&, Symbol_table*, Layout*,
+ const Dirsearch&, Input_objects*, Input_group*,
+ const Input_argument*, Input_file*, const unsigned char* p,
+ off_t bytes, Task_token* this_blocker,
+ Task_token* next_blocker);
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_SCRIPT_H)
diff --git a/gold/stringpool.cc b/gold/stringpool.cc
new file mode 100644
index 000000000000..34c11b4fc42a
--- /dev/null
+++ b/gold/stringpool.cc
@@ -0,0 +1,386 @@
+// stringpool.cc -- a string pool for gold
+
+#include "gold.h"
+
+#include <cstring>
+#include <algorithm>
+#include <vector>
+
+#include "output.h"
+#include "stringpool.h"
+
+namespace gold
+{
+
+template<typename Stringpool_char>
+Stringpool_template<Stringpool_char>::Stringpool_template(bool zero_null)
+ : string_set_(), strings_(), strtab_size_(0), next_index_(1),
+ zero_null_(zero_null)
+{
+}
+
+template<typename Stringpool_char>
+Stringpool_template<Stringpool_char>::~Stringpool_template()
+{
+ for (typename std::list<Stringdata*>::iterator p = this->strings_.begin();
+ p != this->strings_.end();
+ ++p)
+ delete[] reinterpret_cast<char*>(*p);
+}
+
+// Return the length of a string of arbitrary character type.
+
+template<typename Stringpool_char>
+size_t
+Stringpool_template<Stringpool_char>::string_length(const Stringpool_char* p)
+{
+ size_t len = 0;
+ for (; *p != 0; ++p)
+ ++len;
+ return len;
+}
+
+// Specialize string_length for char. Maybe we could just use
+// std::char_traits<>::length?
+
+template<>
+inline size_t
+Stringpool_template<char>::string_length(const char* p)
+{
+ return strlen(p);
+}
+
+// Equality comparison function.
+
+template<typename Stringpool_char>
+bool
+Stringpool_template<Stringpool_char>::Stringpool_eq::operator()(
+ const Stringpool_char* s1,
+ const Stringpool_char* s2) const
+{
+ while (*s1 != 0)
+ if (*s1++ != *s2++)
+ return false;
+ return *s2 == 0;
+}
+
+// Specialize equality comparison for char.
+
+template<>
+bool
+Stringpool_template<char>::Stringpool_eq::operator()(const char* s1,
+ const char* s2) const
+{
+ return strcmp(s1, s2) == 0;
+}
+
+// Hash function.
+
+template<typename Stringpool_char>
+size_t
+Stringpool_template<Stringpool_char>::Stringpool_hash::operator()(
+ const Stringpool_char* s) const
+{
+ // Fowler/Noll/Vo (FNV) hash (type FNV-1a).
+ if (sizeof(size_t) == 8)
+ {
+ size_t result = static_cast<size_t>(14695981039346656037ULL);
+ while (*s != 0)
+ {
+ const char* p = reinterpret_cast<const char*>(s);
+ for (size_t i = 0; i < sizeof(Stringpool_char); ++i)
+ {
+ result &= (size_t) *p++;
+ result *= 1099511628211ULL;
+ }
+ ++s;
+ }
+ return result;
+ }
+ else
+ {
+ size_t result = 2166136261UL;
+ while (*s != 0)
+ {
+ const char* p = reinterpret_cast<const char*>(s);
+ for (size_t i = 0; i < sizeof(Stringpool_char); ++i)
+ {
+ result ^= (size_t) *p++;
+ result *= 16777619UL;
+ }
+ ++s;
+ }
+ return result;
+ }
+}
+
+// Add a string to the list of canonical strings. Return a pointer to
+// the canonical string. If PKEY is not NULL, set *PKEY to the key.
+
+template<typename Stringpool_char>
+const Stringpool_char*
+Stringpool_template<Stringpool_char>::add_string(const Stringpool_char* s,
+ Key* pkey)
+{
+ // We are in trouble if we've already computed the string offsets.
+ gold_assert(this->strtab_size_ == 0);
+
+ // The size we allocate for a new Stringdata.
+ const size_t buffer_size = 1000;
+ // The amount we multiply the Stringdata index when calculating the
+ // key.
+ const size_t key_mult = 1024;
+ gold_assert(key_mult >= buffer_size);
+
+ size_t len = (string_length(s) + 1) * sizeof(Stringpool_char);
+
+ size_t alc;
+ bool front = true;
+ if (len > buffer_size)
+ {
+ alc = sizeof(Stringdata) + len;
+ front = false;
+ }
+ else if (this->strings_.empty())
+ alc = sizeof(Stringdata) + buffer_size;
+ else
+ {
+ Stringdata *psd = this->strings_.front();
+ if (len > psd->alc - psd->len)
+ alc = sizeof(Stringdata) + buffer_size;
+ else
+ {
+ char* ret = psd->data + psd->len;
+ memcpy(ret, s, len);
+
+ if (pkey != NULL)
+ *pkey = psd->index * key_mult + psd->len;
+
+ psd->len += len;
+
+ return reinterpret_cast<const Stringpool_char*>(ret);
+ }
+ }
+
+ Stringdata *psd = reinterpret_cast<Stringdata*>(new char[alc]);
+ psd->alc = alc - sizeof(Stringdata);
+ memcpy(psd->data, s, len);
+ psd->len = len;
+ psd->index = this->next_index_;
+ ++this->next_index_;
+
+ if (pkey != NULL)
+ *pkey = psd->index * key_mult;
+
+ if (front)
+ this->strings_.push_front(psd);
+ else
+ this->strings_.push_back(psd);
+
+ return reinterpret_cast<const Stringpool_char*>(psd->data);
+}
+
+// Add a string to a string pool.
+
+template<typename Stringpool_char>
+const Stringpool_char*
+Stringpool_template<Stringpool_char>::add(const Stringpool_char* s, Key* pkey)
+{
+ // FIXME: This will look up the entry twice in the hash table. The
+ // problem is that we can't insert S before we canonicalize it. I
+ // don't think there is a way to handle this correctly with
+ // unordered_map, so this should be replaced with custom code to do
+ // what we need, which is to return the empty slot.
+
+ typename String_set_type::const_iterator p = this->string_set_.find(s);
+ if (p != this->string_set_.end())
+ {
+ if (pkey != NULL)
+ *pkey = p->second.first;
+ return p->first;
+ }
+
+ Key k;
+ const Stringpool_char* ret = this->add_string(s, &k);
+
+ const off_t ozero = 0;
+ std::pair<const Stringpool_char*, Val> element(ret,
+ std::make_pair(k, ozero));
+ std::pair<typename String_set_type::iterator, bool> ins =
+ this->string_set_.insert(element);
+ gold_assert(ins.second);
+
+ if (pkey != NULL)
+ *pkey = k;
+
+ return ret;
+}
+
+// Add a prefix of a string to a string pool.
+
+template<typename Stringpool_char>
+const Stringpool_char*
+Stringpool_template<Stringpool_char>::add(const Stringpool_char* s, size_t len,
+ Key* pkey)
+{
+ // FIXME: This implementation should be rewritten when we rewrite
+ // the hash table to avoid copying.
+ std::basic_string<Stringpool_char> st(s, len);
+ return this->add(st, pkey);
+}
+
+template<typename Stringpool_char>
+const Stringpool_char*
+Stringpool_template<Stringpool_char>::find(const Stringpool_char* s,
+ Key* pkey) const
+{
+ typename String_set_type::const_iterator p = this->string_set_.find(s);
+ if (p == this->string_set_.end())
+ return NULL;
+
+ if (pkey != NULL)
+ *pkey = p->second.first;
+
+ return p->first;
+}
+
+// Comparison routine used when sorting into an ELF strtab. We want
+// to sort this so that when one string is a suffix of another, we
+// always see the shorter string immediately after the longer string.
+// For example, we want to see these strings in this order:
+// abcd
+// cd
+// d
+// When strings are not suffixes, we don't care what order they are
+// in, but we need to ensure that suffixes wind up next to each other.
+// So we do a reversed lexicographic sort on the reversed string.
+
+template<typename Stringpool_char>
+bool
+Stringpool_template<Stringpool_char>::Stringpool_sort_comparison::operator()(
+ typename String_set_type::iterator it1,
+ typename String_set_type::iterator it2) const
+{
+ const Stringpool_char* s1 = it1->first;
+ const Stringpool_char* s2 = it2->first;
+ size_t len1 = string_length(s1);
+ size_t len2 = string_length(s2);
+ size_t minlen = len1 < len2 ? len1 : len2;
+ const Stringpool_char* p1 = s1 + len1 - 1;
+ const Stringpool_char* p2 = s2 + len2 - 1;
+ for (size_t i = minlen; i > 0; --i, --p1, --p2)
+ {
+ if (*p1 != *p2)
+ return *p1 > *p2;
+ }
+ return len1 > len2;
+}
+
+// Return whether s1 is a suffix of s2.
+
+template<typename Stringpool_char>
+bool
+Stringpool_template<Stringpool_char>::is_suffix(const Stringpool_char* s1,
+ const Stringpool_char* s2)
+{
+ size_t len1 = string_length(s1);
+ size_t len2 = string_length(s2);
+ if (len1 > len2)
+ return false;
+ return memcmp(s1, s2 + len2 - len1, len1 * sizeof(Stringpool_char)) == 0;
+}
+
+// Turn the stringpool into an ELF strtab: determine the offsets of
+// each string in the table.
+
+template<typename Stringpool_char>
+void
+Stringpool_template<Stringpool_char>::set_string_offsets()
+{
+ if (this->strtab_size_ != 0)
+ {
+ // We've already computed the offsets.
+ return;
+ }
+
+ size_t count = this->string_set_.size();
+
+ std::vector<typename String_set_type::iterator> v;
+ v.reserve(count);
+
+ for (typename String_set_type::iterator p = this->string_set_.begin();
+ p != this->string_set_.end();
+ ++p)
+ v.push_back(p);
+
+ std::sort(v.begin(), v.end(), Stringpool_sort_comparison());
+
+ const size_t charsize = sizeof(Stringpool_char);
+
+ // Offset 0 may be reserved for the empty string.
+ off_t offset = this->zero_null_ ? charsize : 0;
+ for (size_t i = 0; i < count; ++i)
+ {
+ if (this->zero_null_ && v[i]->first[0] == 0)
+ v[i]->second.second = 0;
+ else if (i > 0 && is_suffix(v[i]->first, v[i - 1]->first))
+ v[i]->second.second = (v[i - 1]->second.second
+ + ((string_length(v[i - 1]->first)
+ - string_length(v[i]->first))
+ * charsize));
+ else
+ {
+ v[i]->second.second = offset;
+ offset += (string_length(v[i]->first) + 1) * charsize;
+ }
+ }
+
+ this->strtab_size_ = offset;
+}
+
+// Get the offset of a string in the ELF strtab. The string must
+// exist.
+
+template<typename Stringpool_char>
+off_t
+Stringpool_template<Stringpool_char>::get_offset(const Stringpool_char* s)
+ const
+{
+ gold_assert(this->strtab_size_ != 0);
+ typename String_set_type::const_iterator p = this->string_set_.find(s);
+ if (p != this->string_set_.end())
+ return p->second.second;
+ gold_unreachable();
+}
+
+// Write the ELF strtab into the output file at the specified offset.
+
+template<typename Stringpool_char>
+void
+Stringpool_template<Stringpool_char>::write(Output_file* of, off_t offset)
+{
+ gold_assert(this->strtab_size_ != 0);
+ unsigned char* viewu = of->get_output_view(offset, this->strtab_size_);
+ char* view = reinterpret_cast<char*>(viewu);
+ if (this->zero_null_)
+ view[0] = '\0';
+ for (typename String_set_type::const_iterator p = this->string_set_.begin();
+ p != this->string_set_.end();
+ ++p)
+ memcpy(view + p->second.second, p->first,
+ (string_length(p->first) + 1) * sizeof(Stringpool_char));
+ of->write_output_view(offset, this->strtab_size_, viewu);
+}
+
+// Instantiate the templates we need.
+
+template
+class Stringpool_template<char>;
+
+template
+class Stringpool_template<uint16_t>;
+
+template
+class Stringpool_template<uint32_t>;
+
+} // End namespace gold.
diff --git a/gold/stringpool.h b/gold/stringpool.h
new file mode 100644
index 000000000000..b9a65f6db98d
--- /dev/null
+++ b/gold/stringpool.h
@@ -0,0 +1,167 @@
+// stringpool.h -- a string pool for gold -*- C++ -*-
+
+#include <string>
+#include <list>
+
+// Stringpool
+// Manage a pool of unique strings.
+
+#ifndef GOLD_STRINGPOOL_H
+#define GOLD_STRINGPOOL_H
+
+namespace gold
+{
+
+class Output_file;
+
+template<typename Stringpool_char>
+class Stringpool_template
+{
+ public:
+ // The type of a key into the stringpool. A key value will always
+ // be the same during any run of the linker. The string pointers
+ // may change when using address space randomization. We use key
+ // values in order to get repeatable runs when the value is inserted
+ // into an unordered hash table. Zero is never a valid key.
+ typedef size_t Key;
+
+ // Create a Stringpool. ZERO_NULL is true if we should reserve
+ // offset 0 to hold the empty string.
+ Stringpool_template(bool zero_null = true);
+
+ ~Stringpool_template();
+
+ // Add a string to the pool. This returns a canonical permanent
+ // pointer to the string. If PKEY is not NULL, this sets *PKEY to
+ // the key for the string.
+ const Stringpool_char*
+ add(const Stringpool_char*, Key* pkey);
+
+ const Stringpool_char*
+ add(const std::basic_string<Stringpool_char>& s, Key* pkey)
+ { return this->add(s.c_str(), pkey); }
+
+ // Add the prefix of a string to the pool.
+ const Stringpool_char*
+ add(const Stringpool_char*, size_t, Key* pkey);
+
+ // If a string is present, return the canonical string. Otherwise,
+ // return NULL. If PKEY is not NULL, set *PKEY to the key.
+ const Stringpool_char*
+ find(const Stringpool_char*, Key* pkey) const;
+
+ // Turn the stringpool into an ELF strtab: determine the offsets of
+ // all the strings.
+ void
+ set_string_offsets();
+
+ // Get the offset of a string in an ELF strtab. This returns the
+ // offset in bytes, not characters.
+ off_t
+ get_offset(const Stringpool_char*) const;
+
+ off_t
+ get_offset(const std::basic_string<Stringpool_char>& s) const
+ { return this->get_offset(s.c_str()); }
+
+ // Get the size of the ELF strtab. This returns the number of
+ // bytes, not characters.
+ off_t
+ get_strtab_size() const
+ {
+ gold_assert(this->strtab_size_ != 0);
+ return this->strtab_size_;
+ }
+
+ // Write the strtab into the output file at the specified offset.
+ void
+ write(Output_file*, off_t offset);
+
+ private:
+ Stringpool_template(const Stringpool_template&);
+ Stringpool_template& operator=(const Stringpool_template&);
+
+ // Return the length of a string.
+ static size_t
+ string_length(const Stringpool_char*);
+
+ // We store the actual data in a list of these buffers.
+ struct Stringdata
+ {
+ // Length of data in buffer.
+ size_t len;
+ // Allocated size of buffer.
+ size_t alc;
+ // Buffer index.
+ unsigned int index;
+ // Buffer.
+ char data[1];
+ };
+
+ // Copy a string into the buffers, returning a canonical string.
+ const Stringpool_char*
+ add_string(const Stringpool_char*, Key*);
+
+ struct Stringpool_hash
+ {
+ size_t
+ operator()(const Stringpool_char*) const;
+ };
+
+ struct Stringpool_eq
+ {
+ bool
+ operator()(const Stringpool_char* p1, const Stringpool_char* p2) const;
+ };
+
+ // Return whether s1 is a suffix of s2.
+ static bool
+ is_suffix(const Stringpool_char* s1, const Stringpool_char* s2);
+
+ // The hash table is a map from string names to a pair of Key and
+ // ELF strtab offsets. We only use the offsets if we turn this into
+ // an ELF strtab section.
+
+ typedef std::pair<Key, off_t> Val;
+
+#ifdef HAVE_TR1_UNORDERED_SET
+ typedef Unordered_map<const Stringpool_char*, Val, Stringpool_hash,
+ Stringpool_eq,
+ std::allocator<std::pair<const Stringpool_char* const,
+ Val> >,
+ true> String_set_type;
+#else
+ typedef Unordered_map<const Stringpool_char*, Val, Stringpool_hash,
+ Stringpool_eq> String_set_type;
+#endif
+
+ // Comparison routine used when sorting into an ELF strtab.
+
+ struct Stringpool_sort_comparison
+ {
+ bool
+ operator()(typename String_set_type::iterator,
+ typename String_set_type::iterator) const;
+ };
+
+ // List of Stringdata structures.
+ typedef std::list<Stringdata*> Stringdata_list;
+
+ // Mapping from const char* to namepool entry.
+ String_set_type string_set_;
+ // List of buffers.
+ Stringdata_list strings_;
+ // Size of ELF strtab.
+ off_t strtab_size_;
+ // Next Stringdata index.
+ unsigned int next_index_;
+ // Whether to reserve offset 0 to hold the null string.
+ bool zero_null_;
+};
+
+// The most common type of Stringpool.
+typedef Stringpool_template<char> Stringpool;
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_STRINGPOOL_H)
diff --git a/gold/strtab.h b/gold/strtab.h
new file mode 100644
index 000000000000..ab22b8fc286f
--- /dev/null
+++ b/gold/strtab.h
@@ -0,0 +1,73 @@
+// strtab.h -- manage an ELF string table for gold -*- C++ -*-
+
+#ifndef GOLD_STRTAB_H
+#define GOLD_STRTAB_H
+
+#include <cstring>
+#include <string>
+
+namespace gold
+{
+
+// This class holds an ELF string table. We keep a reference count
+// for each string, which we use to determine which strings are
+// actually required at the end. When all operations are done, the
+// string table is finalized, which sets the offsets to use for each
+// string.
+
+class Strtab
+{
+ public:
+ Strtab();
+
+ ~Strtab();
+
+ Strtab_ref* add(const char*);
+
+ Strtab_ref* add(const std::string& s)
+ { return this->add(s.c_str()); }
+
+ private:
+ Strtab(const Strtab&);
+ Strtab& operator=(const Strtab&);
+
+ struct strtab_hash
+ {
+ std::size_t
+ operator()(const char*p);
+ };
+
+ struct strtab_eq
+ {
+ bool
+ operator()(const char* p1, const char* p2)
+ { return strcmp(p1, p2) == 0; }
+ };
+
+ Unordered_map<const char*, Strtab_ref*, strtab_hash, strtab_eq,
+ std::allocator<std::pair<const char* const, Strtab_ref*> >,
+ true> strings_;
+};
+
+// Users of Strtab work with pointers to Strtab_ref structures. These
+// are allocated via new and should be deleted if the string is no
+// longer needed.
+
+class Strtab_ref
+{
+ public:
+ ~Strtab_ref();
+
+ const char*
+ str() const;
+
+ private:
+ Strtab_ref(const Strtab_ref&);
+ Strtab_ref& operator=(const Strtab_ref&);
+
+ int refs_;
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_STRTAB_H)
diff --git a/gold/symtab.cc b/gold/symtab.cc
new file mode 100644
index 000000000000..01e000d874e7
--- /dev/null
+++ b/gold/symtab.cc
@@ -0,0 +1,1567 @@
+// symtab.cc -- the gold symbol table
+
+#include "gold.h"
+
+#include <stdint.h>
+#include <string>
+#include <utility>
+
+#include "object.h"
+#include "dynobj.h"
+#include "output.h"
+#include "target.h"
+#include "workqueue.h"
+#include "symtab.h"
+
+namespace gold
+{
+
+// Class Symbol.
+
+// Initialize fields in Symbol. This initializes everything except u_
+// and source_.
+
+void
+Symbol::init_fields(const char* name, const char* version,
+ elfcpp::STT type, elfcpp::STB binding,
+ elfcpp::STV visibility, unsigned char nonvis)
+{
+ this->name_ = name;
+ this->version_ = version;
+ this->symtab_index_ = 0;
+ this->dynsym_index_ = 0;
+ this->got_offset_ = 0;
+ this->type_ = type;
+ this->binding_ = binding;
+ this->visibility_ = visibility;
+ this->nonvis_ = nonvis;
+ this->is_target_special_ = false;
+ this->is_def_ = false;
+ this->is_forwarder_ = false;
+ this->needs_dynsym_entry_ = false;
+ this->in_reg_ = false;
+ this->in_dyn_ = false;
+ this->has_got_offset_ = false;
+ this->has_warning_ = false;
+}
+
+// Initialize the fields in the base class Symbol for SYM in OBJECT.
+
+template<int size, bool big_endian>
+void
+Symbol::init_base(const char* name, const char* version, Object* object,
+ const elfcpp::Sym<size, big_endian>& sym)
+{
+ this->init_fields(name, version, sym.get_st_type(), sym.get_st_bind(),
+ sym.get_st_visibility(), sym.get_st_nonvis());
+ this->u_.from_object.object = object;
+ // FIXME: Handle SHN_XINDEX.
+ this->u_.from_object.shndx = sym.get_st_shndx();
+ this->source_ = FROM_OBJECT;
+ this->in_reg_ = !object->is_dynamic();
+ this->in_dyn_ = object->is_dynamic();
+}
+
+// Initialize the fields in the base class Symbol for a symbol defined
+// in an Output_data.
+
+void
+Symbol::init_base(const char* name, Output_data* od, elfcpp::STT type,
+ elfcpp::STB binding, elfcpp::STV visibility,
+ unsigned char nonvis, bool offset_is_from_end)
+{
+ this->init_fields(name, NULL, type, binding, visibility, nonvis);
+ this->u_.in_output_data.output_data = od;
+ this->u_.in_output_data.offset_is_from_end = offset_is_from_end;
+ this->source_ = IN_OUTPUT_DATA;
+ this->in_reg_ = true;
+}
+
+// Initialize the fields in the base class Symbol for a symbol defined
+// in an Output_segment.
+
+void
+Symbol::init_base(const char* name, Output_segment* os, elfcpp::STT type,
+ elfcpp::STB binding, elfcpp::STV visibility,
+ unsigned char nonvis, Segment_offset_base offset_base)
+{
+ this->init_fields(name, NULL, type, binding, visibility, nonvis);
+ this->u_.in_output_segment.output_segment = os;
+ this->u_.in_output_segment.offset_base = offset_base;
+ this->source_ = IN_OUTPUT_SEGMENT;
+ this->in_reg_ = true;
+}
+
+// Initialize the fields in the base class Symbol for a symbol defined
+// as a constant.
+
+void
+Symbol::init_base(const char* name, elfcpp::STT type,
+ elfcpp::STB binding, elfcpp::STV visibility,
+ unsigned char nonvis)
+{
+ this->init_fields(name, NULL, type, binding, visibility, nonvis);
+ this->source_ = CONSTANT;
+ this->in_reg_ = true;
+}
+
+// Initialize the fields in Sized_symbol for SYM in OBJECT.
+
+template<int size>
+template<bool big_endian>
+void
+Sized_symbol<size>::init(const char* name, const char* version, Object* object,
+ const elfcpp::Sym<size, big_endian>& sym)
+{
+ this->init_base(name, version, object, sym);
+ this->value_ = sym.get_st_value();
+ this->symsize_ = sym.get_st_size();
+}
+
+// Initialize the fields in Sized_symbol for a symbol defined in an
+// Output_data.
+
+template<int size>
+void
+Sized_symbol<size>::init(const char* name, Output_data* od,
+ Value_type value, Size_type symsize,
+ elfcpp::STT type, elfcpp::STB binding,
+ elfcpp::STV visibility, unsigned char nonvis,
+ bool offset_is_from_end)
+{
+ this->init_base(name, od, type, binding, visibility, nonvis,
+ offset_is_from_end);
+ this->value_ = value;
+ this->symsize_ = symsize;
+}
+
+// Initialize the fields in Sized_symbol for a symbol defined in an
+// Output_segment.
+
+template<int size>
+void
+Sized_symbol<size>::init(const char* name, Output_segment* os,
+ Value_type value, Size_type symsize,
+ elfcpp::STT type, elfcpp::STB binding,
+ elfcpp::STV visibility, unsigned char nonvis,
+ Segment_offset_base offset_base)
+{
+ this->init_base(name, os, type, binding, visibility, nonvis, offset_base);
+ this->value_ = value;
+ this->symsize_ = symsize;
+}
+
+// Initialize the fields in Sized_symbol for a symbol defined as a
+// constant.
+
+template<int size>
+void
+Sized_symbol<size>::init(const char* name, Value_type value, Size_type symsize,
+ elfcpp::STT type, elfcpp::STB binding,
+ elfcpp::STV visibility, unsigned char nonvis)
+{
+ this->init_base(name, type, binding, visibility, nonvis);
+ this->value_ = value;
+ this->symsize_ = symsize;
+}
+
+// Class Symbol_table.
+
+Symbol_table::Symbol_table()
+ : size_(0), saw_undefined_(0), offset_(0), table_(), namepool_(),
+ forwarders_(), commons_(), warnings_()
+{
+}
+
+Symbol_table::~Symbol_table()
+{
+}
+
+// The hash function. The key is always canonicalized, so we use a
+// simple combination of the pointers.
+
+size_t
+Symbol_table::Symbol_table_hash::operator()(const Symbol_table_key& key) const
+{
+ return key.first ^ key.second;
+}
+
+// The symbol table key equality function. This is only called with
+// canonicalized name and version strings, so we can use pointer
+// comparison.
+
+bool
+Symbol_table::Symbol_table_eq::operator()(const Symbol_table_key& k1,
+ const Symbol_table_key& k2) const
+{
+ return k1.first == k2.first && k1.second == k2.second;
+}
+
+// Make TO a symbol which forwards to FROM.
+
+void
+Symbol_table::make_forwarder(Symbol* from, Symbol* to)
+{
+ gold_assert(from != to);
+ gold_assert(!from->is_forwarder() && !to->is_forwarder());
+ this->forwarders_[from] = to;
+ from->set_forwarder();
+}
+
+// Resolve the forwards from FROM, returning the real symbol.
+
+Symbol*
+Symbol_table::resolve_forwards(const Symbol* from) const
+{
+ gold_assert(from->is_forwarder());
+ Unordered_map<const Symbol*, Symbol*>::const_iterator p =
+ this->forwarders_.find(from);
+ gold_assert(p != this->forwarders_.end());
+ return p->second;
+}
+
+// Look up a symbol by name.
+
+Symbol*
+Symbol_table::lookup(const char* name, const char* version) const
+{
+ Stringpool::Key name_key;
+ name = this->namepool_.find(name, &name_key);
+ if (name == NULL)
+ return NULL;
+
+ Stringpool::Key version_key = 0;
+ if (version != NULL)
+ {
+ version = this->namepool_.find(version, &version_key);
+ if (version == NULL)
+ return NULL;
+ }
+
+ Symbol_table_key key(name_key, version_key);
+ Symbol_table::Symbol_table_type::const_iterator p = this->table_.find(key);
+ if (p == this->table_.end())
+ return NULL;
+ return p->second;
+}
+
+// Resolve a Symbol with another Symbol. This is only used in the
+// unusual case where there are references to both an unversioned
+// symbol and a symbol with a version, and we then discover that that
+// version is the default version. Because this is unusual, we do
+// this the slow way, by converting back to an ELF symbol.
+
+template<int size, bool big_endian>
+void
+Symbol_table::resolve(Sized_symbol<size>* to, const Sized_symbol<size>* from,
+ const char* version ACCEPT_SIZE_ENDIAN)
+{
+ unsigned char buf[elfcpp::Elf_sizes<size>::sym_size];
+ elfcpp::Sym_write<size, big_endian> esym(buf);
+ // We don't bother to set the st_name field.
+ esym.put_st_value(from->value());
+ esym.put_st_size(from->symsize());
+ esym.put_st_info(from->binding(), from->type());
+ esym.put_st_other(from->visibility(), from->nonvis());
+ esym.put_st_shndx(from->shndx());
+ Symbol_table::resolve(to, esym.sym(), from->object(), version);
+}
+
+// Add one symbol from OBJECT to the symbol table. NAME is symbol
+// name and VERSION is the version; both are canonicalized. DEF is
+// whether this is the default version.
+
+// If DEF is true, then this is the definition of a default version of
+// a symbol. That means that any lookup of NAME/NULL and any lookup
+// of NAME/VERSION should always return the same symbol. This is
+// obvious for references, but in particular we want to do this for
+// definitions: overriding NAME/NULL should also override
+// NAME/VERSION. If we don't do that, it would be very hard to
+// override functions in a shared library which uses versioning.
+
+// We implement this by simply making both entries in the hash table
+// point to the same Symbol structure. That is easy enough if this is
+// the first time we see NAME/NULL or NAME/VERSION, but it is possible
+// that we have seen both already, in which case they will both have
+// independent entries in the symbol table. We can't simply change
+// the symbol table entry, because we have pointers to the entries
+// attached to the object files. So we mark the entry attached to the
+// object file as a forwarder, and record it in the forwarders_ map.
+// Note that entries in the hash table will never be marked as
+// forwarders.
+
+template<int size, bool big_endian>
+Symbol*
+Symbol_table::add_from_object(Object* object,
+ const char *name,
+ Stringpool::Key name_key,
+ const char *version,
+ Stringpool::Key version_key,
+ bool def,
+ const elfcpp::Sym<size, big_endian>& sym)
+{
+ Symbol* const snull = NULL;
+ std::pair<typename Symbol_table_type::iterator, bool> ins =
+ this->table_.insert(std::make_pair(std::make_pair(name_key, version_key),
+ snull));
+
+ std::pair<typename Symbol_table_type::iterator, bool> insdef =
+ std::make_pair(this->table_.end(), false);
+ if (def)
+ {
+ const Stringpool::Key vnull_key = 0;
+ insdef = this->table_.insert(std::make_pair(std::make_pair(name_key,
+ vnull_key),
+ snull));
+ }
+
+ // ins.first: an iterator, which is a pointer to a pair.
+ // ins.first->first: the key (a pair of name and version).
+ // ins.first->second: the value (Symbol*).
+ // ins.second: true if new entry was inserted, false if not.
+
+ Sized_symbol<size>* ret;
+ bool was_undefined;
+ bool was_common;
+ if (!ins.second)
+ {
+ // We already have an entry for NAME/VERSION.
+ ret = this->get_sized_symbol SELECT_SIZE_NAME(size) (ins.first->second
+ SELECT_SIZE(size));
+ gold_assert(ret != NULL);
+
+ was_undefined = ret->is_undefined();
+ was_common = ret->is_common();
+
+ Symbol_table::resolve(ret, sym, object, version);
+
+ if (def)
+ {
+ if (insdef.second)
+ {
+ // This is the first time we have seen NAME/NULL. Make
+ // NAME/NULL point to NAME/VERSION.
+ insdef.first->second = ret;
+ }
+ else if (insdef.first->second != ret)
+ {
+ // This is the unfortunate case where we already have
+ // entries for both NAME/VERSION and NAME/NULL.
+ const Sized_symbol<size>* sym2;
+ sym2 = this->get_sized_symbol SELECT_SIZE_NAME(size) (
+ insdef.first->second
+ SELECT_SIZE(size));
+ Symbol_table::resolve SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
+ ret, sym2, version SELECT_SIZE_ENDIAN(size, big_endian));
+ this->make_forwarder(insdef.first->second, ret);
+ insdef.first->second = ret;
+ }
+ }
+ }
+ else
+ {
+ // This is the first time we have seen NAME/VERSION.
+ gold_assert(ins.first->second == NULL);
+
+ was_undefined = false;
+ was_common = false;
+
+ if (def && !insdef.second)
+ {
+ // We already have an entry for NAME/NULL. If we override
+ // it, then change it to NAME/VERSION.
+ ret = this->get_sized_symbol SELECT_SIZE_NAME(size) (
+ insdef.first->second
+ SELECT_SIZE(size));
+ Symbol_table::resolve(ret, sym, object, version);
+ ins.first->second = ret;
+ }
+ else
+ {
+ Sized_target<size, big_endian>* target =
+ object->sized_target SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
+ SELECT_SIZE_ENDIAN_ONLY(size, big_endian));
+ if (!target->has_make_symbol())
+ ret = new Sized_symbol<size>();
+ else
+ {
+ ret = target->make_symbol();
+ if (ret == NULL)
+ {
+ // This means that we don't want a symbol table
+ // entry after all.
+ if (!def)
+ this->table_.erase(ins.first);
+ else
+ {
+ this->table_.erase(insdef.first);
+ // Inserting insdef invalidated ins.
+ this->table_.erase(std::make_pair(name_key,
+ version_key));
+ }
+ return NULL;
+ }
+ }
+
+ ret->init(name, version, object, sym);
+
+ ins.first->second = ret;
+ if (def)
+ {
+ // This is the first time we have seen NAME/NULL. Point
+ // it at the new entry for NAME/VERSION.
+ gold_assert(insdef.second);
+ insdef.first->second = ret;
+ }
+ }
+ }
+
+ // Record every time we see a new undefined symbol, to speed up
+ // archive groups.
+ if (!was_undefined && ret->is_undefined())
+ ++this->saw_undefined_;
+
+ // Keep track of common symbols, to speed up common symbol
+ // allocation.
+ if (!was_common && ret->is_common())
+ this->commons_.push_back(ret);
+
+ return ret;
+}
+
+// Add all the symbols in a relocatable object to the hash table.
+
+template<int size, bool big_endian>
+void
+Symbol_table::add_from_relobj(
+ Sized_relobj<size, big_endian>* relobj,
+ const unsigned char* syms,
+ size_t count,
+ const char* sym_names,
+ size_t sym_name_size,
+ Symbol** sympointers)
+{
+ // We take the size from the first object we see.
+ if (this->get_size() == 0)
+ this->set_size(size);
+
+ if (size != this->get_size() || size != relobj->target()->get_size())
+ {
+ fprintf(stderr, _("%s: %s: mixing 32-bit and 64-bit ELF objects\n"),
+ program_name, relobj->name().c_str());
+ gold_exit(false);
+ }
+
+ const int sym_size = elfcpp::Elf_sizes<size>::sym_size;
+
+ const unsigned char* p = syms;
+ for (size_t i = 0; i < count; ++i, p += sym_size)
+ {
+ elfcpp::Sym<size, big_endian> sym(p);
+ elfcpp::Sym<size, big_endian>* psym = &sym;
+
+ unsigned int st_name = psym->get_st_name();
+ if (st_name >= sym_name_size)
+ {
+ fprintf(stderr,
+ _("%s: %s: bad global symbol name offset %u at %lu\n"),
+ program_name, relobj->name().c_str(), st_name,
+ static_cast<unsigned long>(i));
+ gold_exit(false);
+ }
+
+ const char* name = sym_names + st_name;
+
+ // A symbol defined in a section which we are not including must
+ // be treated as an undefined symbol.
+ unsigned char symbuf[sym_size];
+ elfcpp::Sym<size, big_endian> sym2(symbuf);
+ unsigned int st_shndx = psym->get_st_shndx();
+ if (st_shndx != elfcpp::SHN_UNDEF
+ && st_shndx < elfcpp::SHN_LORESERVE
+ && !relobj->is_section_included(st_shndx))
+ {
+ memcpy(symbuf, p, sym_size);
+ elfcpp::Sym_write<size, big_endian> sw(symbuf);
+ sw.put_st_shndx(elfcpp::SHN_UNDEF);
+ psym = &sym2;
+ }
+
+ // In an object file, an '@' in the name separates the symbol
+ // name from the version name. If there are two '@' characters,
+ // this is the default version.
+ const char* ver = strchr(name, '@');
+
+ Symbol* res;
+ if (ver == NULL)
+ {
+ Stringpool::Key name_key;
+ name = this->namepool_.add(name, &name_key);
+ res = this->add_from_object(relobj, name, name_key, NULL, 0,
+ false, *psym);
+ }
+ else
+ {
+ Stringpool::Key name_key;
+ name = this->namepool_.add(name, ver - name, &name_key);
+
+ bool def = false;
+ ++ver;
+ if (*ver == '@')
+ {
+ def = true;
+ ++ver;
+ }
+
+ Stringpool::Key ver_key;
+ ver = this->namepool_.add(ver, &ver_key);
+
+ res = this->add_from_object(relobj, name, name_key, ver, ver_key,
+ def, *psym);
+ }
+
+ *sympointers++ = res;
+ }
+}
+
+// Add all the symbols in a dynamic object to the hash table.
+
+template<int size, bool big_endian>
+void
+Symbol_table::add_from_dynobj(
+ Sized_dynobj<size, big_endian>* dynobj,
+ const unsigned char* syms,
+ size_t count,
+ const char* sym_names,
+ size_t sym_name_size,
+ const unsigned char* versym,
+ size_t versym_size,
+ const std::vector<const char*>* version_map)
+{
+ // We take the size from the first object we see.
+ if (this->get_size() == 0)
+ this->set_size(size);
+
+ if (size != this->get_size() || size != dynobj->target()->get_size())
+ {
+ fprintf(stderr, _("%s: %s: mixing 32-bit and 64-bit ELF objects\n"),
+ program_name, dynobj->name().c_str());
+ gold_exit(false);
+ }
+
+ if (versym != NULL && versym_size / 2 < count)
+ {
+ fprintf(stderr, _("%s: %s: too few symbol versions\n"),
+ program_name, dynobj->name().c_str());
+ gold_exit(false);
+ }
+
+ const int sym_size = elfcpp::Elf_sizes<size>::sym_size;
+
+ const unsigned char* p = syms;
+ const unsigned char* vs = versym;
+ for (size_t i = 0; i < count; ++i, p += sym_size, vs += 2)
+ {
+ elfcpp::Sym<size, big_endian> sym(p);
+
+ // Ignore symbols with local binding.
+ if (sym.get_st_bind() == elfcpp::STB_LOCAL)
+ continue;
+
+ unsigned int st_name = sym.get_st_name();
+ if (st_name >= sym_name_size)
+ {
+ fprintf(stderr, _("%s: %s: bad symbol name offset %u at %lu\n"),
+ program_name, dynobj->name().c_str(), st_name,
+ static_cast<unsigned long>(i));
+ gold_exit(false);
+ }
+
+ const char* name = sym_names + st_name;
+
+ if (versym == NULL)
+ {
+ Stringpool::Key name_key;
+ name = this->namepool_.add(name, &name_key);
+ this->add_from_object(dynobj, name, name_key, NULL, 0,
+ false, sym);
+ continue;
+ }
+
+ // Read the version information.
+
+ unsigned int v = elfcpp::Swap<16, big_endian>::readval(vs);
+
+ bool hidden = (v & elfcpp::VERSYM_HIDDEN) != 0;
+ v &= elfcpp::VERSYM_VERSION;
+
+ if (v == static_cast<unsigned int>(elfcpp::VER_NDX_LOCAL))
+ {
+ // This symbol should not be visible outside the object.
+ continue;
+ }
+
+ // At this point we are definitely going to add this symbol.
+ Stringpool::Key name_key;
+ name = this->namepool_.add(name, &name_key);
+
+ if (v == static_cast<unsigned int>(elfcpp::VER_NDX_GLOBAL))
+ {
+ // This symbol does not have a version.
+ this->add_from_object(dynobj, name, name_key, NULL, 0, false, sym);
+ continue;
+ }
+
+ if (v >= version_map->size())
+ {
+ fprintf(stderr,
+ _("%s: %s: versym for symbol %zu out of range: %u\n"),
+ program_name, dynobj->name().c_str(), i, v);
+ gold_exit(false);
+ }
+
+ const char* version = (*version_map)[v];
+ if (version == NULL)
+ {
+ fprintf(stderr, _("%s: %s: versym for symbol %zu has no name: %u\n"),
+ program_name, dynobj->name().c_str(), i, v);
+ gold_exit(false);
+ }
+
+ Stringpool::Key version_key;
+ version = this->namepool_.add(version, &version_key);
+
+ // If this is an absolute symbol, and the version name and
+ // symbol name are the same, then this is the version definition
+ // symbol. These symbols exist to support using -u to pull in
+ // particular versions. We do not want to record a version for
+ // them.
+ if (sym.get_st_shndx() == elfcpp::SHN_ABS && name_key == version_key)
+ {
+ this->add_from_object(dynobj, name, name_key, NULL, 0, false, sym);
+ continue;
+ }
+
+ const bool def = !hidden && sym.get_st_shndx() != elfcpp::SHN_UNDEF;
+
+ this->add_from_object(dynobj, name, name_key, version, version_key,
+ def, sym);
+ }
+}
+
+// Create and return a specially defined symbol. If ONLY_IF_REF is
+// true, then only create the symbol if there is a reference to it.
+
+template<int size, bool big_endian>
+Sized_symbol<size>*
+Symbol_table::define_special_symbol(const Target* target, const char* name,
+ const char* version, bool only_if_ref
+ ACCEPT_SIZE_ENDIAN)
+{
+ gold_assert(this->size_ == size);
+
+ Symbol* oldsym;
+ Sized_symbol<size>* sym;
+
+ if (only_if_ref)
+ {
+ oldsym = this->lookup(name, version);
+ if (oldsym == NULL || !oldsym->is_undefined())
+ return NULL;
+ sym = NULL;
+
+ // Canonicalize NAME and VERSION.
+ name = oldsym->name();
+ version = oldsym->version();
+ }
+ else
+ {
+ // Canonicalize NAME and VERSION.
+ Stringpool::Key name_key;
+ name = this->namepool_.add(name, &name_key);
+
+ Stringpool::Key version_key = 0;
+ if (version != NULL)
+ version = this->namepool_.add(version, &version_key);
+
+ Symbol* const snull = NULL;
+ std::pair<typename Symbol_table_type::iterator, bool> ins =
+ this->table_.insert(std::make_pair(std::make_pair(name_key,
+ version_key),
+ snull));
+
+ if (!ins.second)
+ {
+ // We already have a symbol table entry for NAME/VERSION.
+ oldsym = ins.first->second;
+ gold_assert(oldsym != NULL);
+ sym = NULL;
+ }
+ else
+ {
+ // We haven't seen this symbol before.
+ gold_assert(ins.first->second == NULL);
+
+ if (!target->has_make_symbol())
+ sym = new Sized_symbol<size>();
+ else
+ {
+ gold_assert(target->get_size() == size);
+ gold_assert(target->is_big_endian() ? big_endian : !big_endian);
+ typedef Sized_target<size, big_endian> My_target;
+ const My_target* sized_target =
+ static_cast<const My_target*>(target);
+ sym = sized_target->make_symbol();
+ if (sym == NULL)
+ return NULL;
+ }
+
+ ins.first->second = sym;
+ oldsym = NULL;
+ }
+ }
+
+ if (oldsym != NULL)
+ {
+ gold_assert(sym == NULL);
+
+ sym = this->get_sized_symbol SELECT_SIZE_NAME(size) (oldsym
+ SELECT_SIZE(size));
+ gold_assert(sym->source() == Symbol::FROM_OBJECT);
+ const int old_shndx = sym->shndx();
+ if (old_shndx != elfcpp::SHN_UNDEF
+ && old_shndx != elfcpp::SHN_COMMON
+ && !sym->object()->is_dynamic())
+ {
+ fprintf(stderr, "%s: linker defined: multiple definition of %s\n",
+ program_name, name);
+ // FIXME: Report old location. Record that we have seen an
+ // error.
+ return NULL;
+ }
+
+ // Our new definition is going to override the old reference.
+ }
+
+ return sym;
+}
+
+// Define a symbol based on an Output_data.
+
+Symbol*
+Symbol_table::define_in_output_data(const Target* target, const char* name,
+ const char* version, Output_data* od,
+ uint64_t value, uint64_t symsize,
+ elfcpp::STT type, elfcpp::STB binding,
+ elfcpp::STV visibility,
+ unsigned char nonvis,
+ bool offset_is_from_end,
+ bool only_if_ref)
+{
+ gold_assert(target->get_size() == this->size_);
+ if (this->size_ == 32)
+ return this->do_define_in_output_data<32>(target, name, version, od, value,
+ symsize, type, binding,
+ visibility, nonvis,
+ offset_is_from_end, only_if_ref);
+ else if (this->size_ == 64)
+ return this->do_define_in_output_data<64>(target, name, version, od, value,
+ symsize, type, binding,
+ visibility, nonvis,
+ offset_is_from_end, only_if_ref);
+ else
+ gold_unreachable();
+}
+
+// Define a symbol in an Output_data, sized version.
+
+template<int size>
+Sized_symbol<size>*
+Symbol_table::do_define_in_output_data(
+ const Target* target,
+ const char* name,
+ const char* version,
+ Output_data* od,
+ typename elfcpp::Elf_types<size>::Elf_Addr value,
+ typename elfcpp::Elf_types<size>::Elf_WXword symsize,
+ elfcpp::STT type,
+ elfcpp::STB binding,
+ elfcpp::STV visibility,
+ unsigned char nonvis,
+ bool offset_is_from_end,
+ bool only_if_ref)
+{
+ Sized_symbol<size>* sym;
+
+ if (target->is_big_endian())
+ sym = this->define_special_symbol SELECT_SIZE_ENDIAN_NAME(size, true) (
+ target, name, version, only_if_ref
+ SELECT_SIZE_ENDIAN(size, true));
+ else
+ sym = this->define_special_symbol SELECT_SIZE_ENDIAN_NAME(size, false) (
+ target, name, version, only_if_ref
+ SELECT_SIZE_ENDIAN(size, false));
+
+ if (sym == NULL)
+ return NULL;
+
+ sym->init(name, od, value, symsize, type, binding, visibility, nonvis,
+ offset_is_from_end);
+
+ return sym;
+}
+
+// Define a symbol based on an Output_segment.
+
+Symbol*
+Symbol_table::define_in_output_segment(const Target* target, const char* name,
+ const char* version, Output_segment* os,
+ uint64_t value, uint64_t symsize,
+ elfcpp::STT type, elfcpp::STB binding,
+ elfcpp::STV visibility,
+ unsigned char nonvis,
+ Symbol::Segment_offset_base offset_base,
+ bool only_if_ref)
+{
+ gold_assert(target->get_size() == this->size_);
+ if (this->size_ == 32)
+ return this->do_define_in_output_segment<32>(target, name, version, os,
+ value, symsize, type, binding,
+ visibility, nonvis,
+ offset_base, only_if_ref);
+ else if (this->size_ == 64)
+ return this->do_define_in_output_segment<64>(target, name, version, os,
+ value, symsize, type, binding,
+ visibility, nonvis,
+ offset_base, only_if_ref);
+ else
+ gold_unreachable();
+}
+
+// Define a symbol in an Output_segment, sized version.
+
+template<int size>
+Sized_symbol<size>*
+Symbol_table::do_define_in_output_segment(
+ const Target* target,
+ const char* name,
+ const char* version,
+ Output_segment* os,
+ typename elfcpp::Elf_types<size>::Elf_Addr value,
+ typename elfcpp::Elf_types<size>::Elf_WXword symsize,
+ elfcpp::STT type,
+ elfcpp::STB binding,
+ elfcpp::STV visibility,
+ unsigned char nonvis,
+ Symbol::Segment_offset_base offset_base,
+ bool only_if_ref)
+{
+ Sized_symbol<size>* sym;
+
+ if (target->is_big_endian())
+ sym = this->define_special_symbol SELECT_SIZE_ENDIAN_NAME(size, true) (
+ target, name, version, only_if_ref
+ SELECT_SIZE_ENDIAN(size, true));
+ else
+ sym = this->define_special_symbol SELECT_SIZE_ENDIAN_NAME(size, false) (
+ target, name, version, only_if_ref
+ SELECT_SIZE_ENDIAN(size, false));
+
+ if (sym == NULL)
+ return NULL;
+
+ sym->init(name, os, value, symsize, type, binding, visibility, nonvis,
+ offset_base);
+
+ return sym;
+}
+
+// Define a special symbol with a constant value. It is a multiple
+// definition error if this symbol is already defined.
+
+Symbol*
+Symbol_table::define_as_constant(const Target* target, const char* name,
+ const char* version, uint64_t value,
+ uint64_t symsize, elfcpp::STT type,
+ elfcpp::STB binding, elfcpp::STV visibility,
+ unsigned char nonvis, bool only_if_ref)
+{
+ gold_assert(target->get_size() == this->size_);
+ if (this->size_ == 32)
+ return this->do_define_as_constant<32>(target, name, version, value,
+ symsize, type, binding, visibility,
+ nonvis, only_if_ref);
+ else if (this->size_ == 64)
+ return this->do_define_as_constant<64>(target, name, version, value,
+ symsize, type, binding, visibility,
+ nonvis, only_if_ref);
+ else
+ gold_unreachable();
+}
+
+// Define a symbol as a constant, sized version.
+
+template<int size>
+Sized_symbol<size>*
+Symbol_table::do_define_as_constant(
+ const Target* target,
+ const char* name,
+ const char* version,
+ typename elfcpp::Elf_types<size>::Elf_Addr value,
+ typename elfcpp::Elf_types<size>::Elf_WXword symsize,
+ elfcpp::STT type,
+ elfcpp::STB binding,
+ elfcpp::STV visibility,
+ unsigned char nonvis,
+ bool only_if_ref)
+{
+ Sized_symbol<size>* sym;
+
+ if (target->is_big_endian())
+ sym = this->define_special_symbol SELECT_SIZE_ENDIAN_NAME(size, true) (
+ target, name, version, only_if_ref
+ SELECT_SIZE_ENDIAN(size, true));
+ else
+ sym = this->define_special_symbol SELECT_SIZE_ENDIAN_NAME(size, false) (
+ target, name, version, only_if_ref
+ SELECT_SIZE_ENDIAN(size, false));
+
+ if (sym == NULL)
+ return NULL;
+
+ sym->init(name, value, symsize, type, binding, visibility, nonvis);
+
+ return sym;
+}
+
+// Define a set of symbols in output sections.
+
+void
+Symbol_table::define_symbols(const Layout* layout, const Target* target,
+ int count, const Define_symbol_in_section* p)
+{
+ for (int i = 0; i < count; ++i, ++p)
+ {
+ Output_section* os = layout->find_output_section(p->output_section);
+ if (os != NULL)
+ this->define_in_output_data(target, p->name, NULL, os, p->value,
+ p->size, p->type, p->binding,
+ p->visibility, p->nonvis,
+ p->offset_is_from_end, p->only_if_ref);
+ else
+ this->define_as_constant(target, p->name, NULL, 0, p->size, p->type,
+ p->binding, p->visibility, p->nonvis,
+ p->only_if_ref);
+ }
+}
+
+// Define a set of symbols in output segments.
+
+void
+Symbol_table::define_symbols(const Layout* layout, const Target* target,
+ int count, const Define_symbol_in_segment* p)
+{
+ for (int i = 0; i < count; ++i, ++p)
+ {
+ Output_segment* os = layout->find_output_segment(p->segment_type,
+ p->segment_flags_set,
+ p->segment_flags_clear);
+ if (os != NULL)
+ this->define_in_output_segment(target, p->name, NULL, os, p->value,
+ p->size, p->type, p->binding,
+ p->visibility, p->nonvis,
+ p->offset_base, p->only_if_ref);
+ else
+ this->define_as_constant(target, p->name, NULL, 0, p->size, p->type,
+ p->binding, p->visibility, p->nonvis,
+ p->only_if_ref);
+ }
+}
+
+// Set the dynamic symbol indexes. INDEX is the index of the first
+// global dynamic symbol. Pointers to the symbols are stored into the
+// vector SYMS. The names are added to DYNPOOL. This returns an
+// updated dynamic symbol index.
+
+unsigned int
+Symbol_table::set_dynsym_indexes(const General_options* options,
+ const Target* target,
+ unsigned int index,
+ std::vector<Symbol*>* syms,
+ Stringpool* dynpool,
+ Versions* versions)
+{
+ for (Symbol_table_type::iterator p = this->table_.begin();
+ p != this->table_.end();
+ ++p)
+ {
+ Symbol* sym = p->second;
+
+ // Note that SYM may already have a dynamic symbol index, since
+ // some symbols appear more than once in the symbol table, with
+ // and without a version.
+
+ if (!sym->needs_dynsym_entry())
+ sym->set_dynsym_index(-1U);
+ else if (!sym->has_dynsym_index())
+ {
+ sym->set_dynsym_index(index);
+ ++index;
+ syms->push_back(sym);
+ dynpool->add(sym->name(), NULL);
+
+ // Record any version information.
+ if (sym->version() != NULL)
+ versions->record_version(options, dynpool, sym);
+ }
+ }
+
+ // Finish up the versions. In some cases this may add new dynamic
+ // symbols.
+ index = versions->finalize(target, this, index, syms);
+
+ return index;
+}
+
+// Set the final values for all the symbols. The index of the first
+// global symbol in the output file is INDEX. Record the file offset
+// OFF. Add their names to POOL. Return the new file offset.
+
+off_t
+Symbol_table::finalize(unsigned int index, off_t off, off_t dynoff,
+ size_t dyn_global_index, size_t dyncount,
+ Stringpool* pool)
+{
+ off_t ret;
+
+ gold_assert(index != 0);
+ this->first_global_index_ = index;
+
+ this->dynamic_offset_ = dynoff;
+ this->first_dynamic_global_index_ = dyn_global_index;
+ this->dynamic_count_ = dyncount;
+
+ if (this->size_ == 32)
+ ret = this->sized_finalize<32>(index, off, pool);
+ else if (this->size_ == 64)
+ ret = this->sized_finalize<64>(index, off, pool);
+ else
+ gold_unreachable();
+
+ // Now that we have the final symbol table, we can reliably note
+ // which symbols should get warnings.
+ this->warnings_.note_warnings(this);
+
+ return ret;
+}
+
+// Set the final value for all the symbols. This is called after
+// Layout::finalize, so all the output sections have their final
+// address.
+
+template<int size>
+off_t
+Symbol_table::sized_finalize(unsigned index, off_t off, Stringpool* pool)
+{
+ off = align_address(off, size >> 3);
+ this->offset_ = off;
+
+ size_t orig_index = index;
+
+ const int sym_size = elfcpp::Elf_sizes<size>::sym_size;
+ for (Symbol_table_type::iterator p = this->table_.begin();
+ p != this->table_.end();
+ ++p)
+ {
+ Sized_symbol<size>* sym = static_cast<Sized_symbol<size>*>(p->second);
+
+ // FIXME: Here we need to decide which symbols should go into
+ // the output file, based on --strip.
+
+ // The default version of a symbol may appear twice in the
+ // symbol table. We only need to finalize it once.
+ if (sym->has_symtab_index())
+ continue;
+
+ if (!sym->in_reg())
+ {
+ gold_assert(!sym->has_symtab_index());
+ sym->set_symtab_index(-1U);
+ gold_assert(sym->dynsym_index() == -1U);
+ continue;
+ }
+
+ typename Sized_symbol<size>::Value_type value;
+
+ switch (sym->source())
+ {
+ case Symbol::FROM_OBJECT:
+ {
+ unsigned int shndx = sym->shndx();
+
+ // FIXME: We need some target specific support here.
+ if (shndx >= elfcpp::SHN_LORESERVE
+ && shndx != elfcpp::SHN_ABS)
+ {
+ fprintf(stderr, _("%s: %s: unsupported symbol section 0x%x\n"),
+ program_name, sym->name(), shndx);
+ gold_exit(false);
+ }
+
+ Object* symobj = sym->object();
+ if (symobj->is_dynamic())
+ {
+ value = 0;
+ shndx = elfcpp::SHN_UNDEF;
+ }
+ else if (shndx == elfcpp::SHN_UNDEF)
+ value = 0;
+ else if (shndx == elfcpp::SHN_ABS)
+ value = sym->value();
+ else
+ {
+ Relobj* relobj = static_cast<Relobj*>(symobj);
+ off_t secoff;
+ Output_section* os = relobj->output_section(shndx, &secoff);
+
+ if (os == NULL)
+ {
+ sym->set_symtab_index(-1U);
+ gold_assert(sym->dynsym_index() == -1U);
+ continue;
+ }
+
+ value = sym->value() + os->address() + secoff;
+ }
+ }
+ break;
+
+ case Symbol::IN_OUTPUT_DATA:
+ {
+ Output_data* od = sym->output_data();
+ value = sym->value() + od->address();
+ if (sym->offset_is_from_end())
+ value += od->data_size();
+ }
+ break;
+
+ case Symbol::IN_OUTPUT_SEGMENT:
+ {
+ Output_segment* os = sym->output_segment();
+ value = sym->value() + os->vaddr();
+ switch (sym->offset_base())
+ {
+ case Symbol::SEGMENT_START:
+ break;
+ case Symbol::SEGMENT_END:
+ value += os->memsz();
+ break;
+ case Symbol::SEGMENT_BSS:
+ value += os->filesz();
+ break;
+ default:
+ gold_unreachable();
+ }
+ }
+ break;
+
+ case Symbol::CONSTANT:
+ value = sym->value();
+ break;
+
+ default:
+ gold_unreachable();
+ }
+
+ sym->set_value(value);
+ sym->set_symtab_index(index);
+ pool->add(sym->name(), NULL);
+ ++index;
+ off += sym_size;
+ }
+
+ this->output_count_ = index - orig_index;
+
+ return off;
+}
+
+// Write out the global symbols.
+
+void
+Symbol_table::write_globals(const Target* target, const Stringpool* sympool,
+ const Stringpool* dynpool, Output_file* of) const
+{
+ if (this->size_ == 32)
+ {
+ if (target->is_big_endian())
+ this->sized_write_globals<32, true>(target, sympool, dynpool, of);
+ else
+ this->sized_write_globals<32, false>(target, sympool, dynpool, of);
+ }
+ else if (this->size_ == 64)
+ {
+ if (target->is_big_endian())
+ this->sized_write_globals<64, true>(target, sympool, dynpool, of);
+ else
+ this->sized_write_globals<64, false>(target, sympool, dynpool, of);
+ }
+ else
+ gold_unreachable();
+}
+
+// Write out the global symbols.
+
+template<int size, bool big_endian>
+void
+Symbol_table::sized_write_globals(const Target*,
+ const Stringpool* sympool,
+ const Stringpool* dynpool,
+ Output_file* of) const
+{
+ const int sym_size = elfcpp::Elf_sizes<size>::sym_size;
+ unsigned int index = this->first_global_index_;
+ const off_t oview_size = this->output_count_ * sym_size;
+ unsigned char* const psyms = of->get_output_view(this->offset_, oview_size);
+
+ unsigned int dynamic_count = this->dynamic_count_;
+ off_t dynamic_size = dynamic_count * sym_size;
+ unsigned int first_dynamic_global_index = this->first_dynamic_global_index_;
+ unsigned char* dynamic_view;
+ if (this->dynamic_offset_ == 0)
+ dynamic_view = NULL;
+ else
+ dynamic_view = of->get_output_view(this->dynamic_offset_, dynamic_size);
+
+ unsigned char* ps = psyms;
+ for (Symbol_table_type::const_iterator p = this->table_.begin();
+ p != this->table_.end();
+ ++p)
+ {
+ Sized_symbol<size>* sym = static_cast<Sized_symbol<size>*>(p->second);
+
+ unsigned int sym_index = sym->symtab_index();
+ unsigned int dynsym_index;
+ if (dynamic_view == NULL)
+ dynsym_index = -1U;
+ else
+ dynsym_index = sym->dynsym_index();
+
+ if (sym_index == -1U && dynsym_index == -1U)
+ {
+ // This symbol is not included in the output file.
+ continue;
+ }
+
+ if (sym_index == index)
+ ++index;
+ else if (sym_index != -1U)
+ {
+ // We have already seen this symbol, because it has a
+ // default version.
+ gold_assert(sym_index < index);
+ if (dynsym_index == -1U)
+ continue;
+ sym_index = -1U;
+ }
+
+ unsigned int shndx;
+ switch (sym->source())
+ {
+ case Symbol::FROM_OBJECT:
+ {
+ unsigned int in_shndx = sym->shndx();
+
+ // FIXME: We need some target specific support here.
+ if (in_shndx >= elfcpp::SHN_LORESERVE
+ && in_shndx != elfcpp::SHN_ABS)
+ {
+ fprintf(stderr, _("%s: %s: unsupported symbol section 0x%x\n"),
+ program_name, sym->name(), in_shndx);
+ gold_exit(false);
+ }
+
+ Object* symobj = sym->object();
+ if (symobj->is_dynamic())
+ {
+ // FIXME.
+ shndx = elfcpp::SHN_UNDEF;
+ }
+ else if (in_shndx == elfcpp::SHN_UNDEF
+ || in_shndx == elfcpp::SHN_ABS)
+ shndx = in_shndx;
+ else
+ {
+ Relobj* relobj = static_cast<Relobj*>(symobj);
+ off_t secoff;
+ Output_section* os = relobj->output_section(in_shndx, &secoff);
+ gold_assert(os != NULL);
+ shndx = os->out_shndx();
+ }
+ }
+ break;
+
+ case Symbol::IN_OUTPUT_DATA:
+ shndx = sym->output_data()->out_shndx();
+ break;
+
+ case Symbol::IN_OUTPUT_SEGMENT:
+ shndx = elfcpp::SHN_ABS;
+ break;
+
+ case Symbol::CONSTANT:
+ shndx = elfcpp::SHN_ABS;
+ break;
+
+ default:
+ gold_unreachable();
+ }
+
+ if (sym_index != -1U)
+ {
+ this->sized_write_symbol SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
+ sym, shndx, sympool, ps
+ SELECT_SIZE_ENDIAN(size, big_endian));
+ ps += sym_size;
+ }
+
+ if (dynsym_index != -1U)
+ {
+ dynsym_index -= first_dynamic_global_index;
+ gold_assert(dynsym_index < dynamic_count);
+ unsigned char* pd = dynamic_view + (dynsym_index * sym_size);
+ this->sized_write_symbol SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
+ sym, shndx, dynpool, pd
+ SELECT_SIZE_ENDIAN(size, big_endian));
+ }
+ }
+
+ gold_assert(ps - psyms == oview_size);
+
+ of->write_output_view(this->offset_, oview_size, psyms);
+ if (dynamic_view != NULL)
+ of->write_output_view(this->dynamic_offset_, dynamic_size, dynamic_view);
+}
+
+// Write out the symbol SYM, in section SHNDX, to P. POOL is the
+// strtab holding the name.
+
+template<int size, bool big_endian>
+void
+Symbol_table::sized_write_symbol(Sized_symbol<size>* sym,
+ unsigned int shndx,
+ const Stringpool* pool,
+ unsigned char* p
+ ACCEPT_SIZE_ENDIAN) const
+{
+ elfcpp::Sym_write<size, big_endian> osym(p);
+ osym.put_st_name(pool->get_offset(sym->name()));
+ osym.put_st_value(sym->value());
+ osym.put_st_size(sym->symsize());
+ osym.put_st_info(elfcpp::elf_st_info(sym->binding(), sym->type()));
+ osym.put_st_other(elfcpp::elf_st_other(sym->visibility(), sym->nonvis()));
+ osym.put_st_shndx(shndx);
+}
+
+// Write out a section symbol. Return the update offset.
+
+void
+Symbol_table::write_section_symbol(const Target* target,
+ const Output_section *os,
+ Output_file* of,
+ off_t offset) const
+{
+ if (this->size_ == 32)
+ {
+ if (target->is_big_endian())
+ this->sized_write_section_symbol<32, true>(os, of, offset);
+ else
+ this->sized_write_section_symbol<32, false>(os, of, offset);
+ }
+ else if (this->size_ == 64)
+ {
+ if (target->is_big_endian())
+ this->sized_write_section_symbol<64, true>(os, of, offset);
+ else
+ this->sized_write_section_symbol<64, false>(os, of, offset);
+ }
+ else
+ gold_unreachable();
+}
+
+// Write out a section symbol, specialized for size and endianness.
+
+template<int size, bool big_endian>
+void
+Symbol_table::sized_write_section_symbol(const Output_section* os,
+ Output_file* of,
+ off_t offset) const
+{
+ const int sym_size = elfcpp::Elf_sizes<size>::sym_size;
+
+ unsigned char* pov = of->get_output_view(offset, sym_size);
+
+ elfcpp::Sym_write<size, big_endian> osym(pov);
+ osym.put_st_name(0);
+ osym.put_st_value(os->address());
+ osym.put_st_size(0);
+ osym.put_st_info(elfcpp::elf_st_info(elfcpp::STB_LOCAL,
+ elfcpp::STT_SECTION));
+ osym.put_st_other(elfcpp::elf_st_other(elfcpp::STV_DEFAULT, 0));
+ osym.put_st_shndx(os->out_shndx());
+
+ of->write_output_view(offset, sym_size, pov);
+}
+
+// Warnings functions.
+
+// Add a new warning.
+
+void
+Warnings::add_warning(Symbol_table* symtab, const char* name, Object* obj,
+ unsigned int shndx)
+{
+ name = symtab->canonicalize_name(name);
+ this->warnings_[name].set(obj, shndx);
+}
+
+// Look through the warnings and mark the symbols for which we should
+// warn. This is called during Layout::finalize when we know the
+// sources for all the symbols.
+
+void
+Warnings::note_warnings(Symbol_table* symtab)
+{
+ for (Warning_table::iterator p = this->warnings_.begin();
+ p != this->warnings_.end();
+ ++p)
+ {
+ Symbol* sym = symtab->lookup(p->first, NULL);
+ if (sym != NULL
+ && sym->source() == Symbol::FROM_OBJECT
+ && sym->object() == p->second.object)
+ {
+ sym->set_has_warning();
+
+ // Read the section contents to get the warning text. It
+ // would be nicer if we only did this if we have to actually
+ // issue a warning. Unfortunately, warnings are issued as
+ // we relocate sections. That means that we can not lock
+ // the object then, as we might try to issue the same
+ // warning multiple times simultaneously.
+ {
+ Task_locker_obj<Object> tl(*p->second.object);
+ const unsigned char* c;
+ off_t len;
+ c = p->second.object->section_contents(p->second.shndx, &len);
+ p->second.set_text(reinterpret_cast<const char*>(c), len);
+ }
+ }
+ }
+}
+
+// Issue a warning. This is called when we see a relocation against a
+// symbol for which has a warning.
+
+void
+Warnings::issue_warning(const Symbol* sym, const std::string& location) const
+{
+ gold_assert(sym->has_warning());
+ Warning_table::const_iterator p = this->warnings_.find(sym->name());
+ gold_assert(p != this->warnings_.end());
+ fprintf(stderr, _("%s: %s: warning: %s\n"), program_name, location.c_str(),
+ p->second.text.c_str());
+}
+
+// Instantiate the templates we need. We could use the configure
+// script to restrict this to only the ones needed for implemented
+// targets.
+
+template
+void
+Symbol_table::add_from_relobj<32, true>(
+ Sized_relobj<32, true>* relobj,
+ const unsigned char* syms,
+ size_t count,
+ const char* sym_names,
+ size_t sym_name_size,
+ Symbol** sympointers);
+
+template
+void
+Symbol_table::add_from_relobj<32, false>(
+ Sized_relobj<32, false>* relobj,
+ const unsigned char* syms,
+ size_t count,
+ const char* sym_names,
+ size_t sym_name_size,
+ Symbol** sympointers);
+
+template
+void
+Symbol_table::add_from_relobj<64, true>(
+ Sized_relobj<64, true>* relobj,
+ const unsigned char* syms,
+ size_t count,
+ const char* sym_names,
+ size_t sym_name_size,
+ Symbol** sympointers);
+
+template
+void
+Symbol_table::add_from_relobj<64, false>(
+ Sized_relobj<64, false>* relobj,
+ const unsigned char* syms,
+ size_t count,
+ const char* sym_names,
+ size_t sym_name_size,
+ Symbol** sympointers);
+
+template
+void
+Symbol_table::add_from_dynobj<32, true>(
+ Sized_dynobj<32, true>* dynobj,
+ const unsigned char* syms,
+ size_t count,
+ const char* sym_names,
+ size_t sym_name_size,
+ const unsigned char* versym,
+ size_t versym_size,
+ const std::vector<const char*>* version_map);
+
+template
+void
+Symbol_table::add_from_dynobj<32, false>(
+ Sized_dynobj<32, false>* dynobj,
+ const unsigned char* syms,
+ size_t count,
+ const char* sym_names,
+ size_t sym_name_size,
+ const unsigned char* versym,
+ size_t versym_size,
+ const std::vector<const char*>* version_map);
+
+template
+void
+Symbol_table::add_from_dynobj<64, true>(
+ Sized_dynobj<64, true>* dynobj,
+ const unsigned char* syms,
+ size_t count,
+ const char* sym_names,
+ size_t sym_name_size,
+ const unsigned char* versym,
+ size_t versym_size,
+ const std::vector<const char*>* version_map);
+
+template
+void
+Symbol_table::add_from_dynobj<64, false>(
+ Sized_dynobj<64, false>* dynobj,
+ const unsigned char* syms,
+ size_t count,
+ const char* sym_names,
+ size_t sym_name_size,
+ const unsigned char* versym,
+ size_t versym_size,
+ const std::vector<const char*>* version_map);
+
+} // End namespace gold.
diff --git a/gold/symtab.h b/gold/symtab.h
new file mode 100644
index 000000000000..66e98bc6d25e
--- /dev/null
+++ b/gold/symtab.h
@@ -0,0 +1,1050 @@
+// symtab.h -- the gold symbol table -*- C++ -*-
+
+// Symbol_table
+// The symbol table.
+
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "elfcpp.h"
+#include "stringpool.h"
+#include "object.h"
+
+#ifndef GOLD_SYMTAB_H
+#define GOLD_SYMTAB_H
+
+namespace gold
+{
+
+class Object;
+class Relobj;
+template<int size, bool big_endian>
+class Sized_relobj;
+class Dynobj;
+template<int size, bool big_endian>
+class Sized_dynobj;
+class Versions;
+class Output_data;
+class Output_section;
+class Output_segment;
+class Output_file;
+class Target;
+
+// The base class of an entry in the symbol table. The symbol table
+// can have a lot of entries, so we don't want this class to big.
+// Size dependent fields can be found in the template class
+// Sized_symbol. Targets may support their own derived classes.
+
+class Symbol
+{
+ public:
+ // Because we want the class to be small, we don't use any virtual
+ // functions. But because symbols can be defined in different
+ // places, we need to classify them. This enum is the different
+ // sources of symbols we support.
+ enum Source
+ {
+ // Symbol defined in a relocatable or dynamic input file--this is
+ // the most common case.
+ FROM_OBJECT,
+ // Symbol defined in an Output_data, a special section created by
+ // the target.
+ IN_OUTPUT_DATA,
+ // Symbol defined in an Output_segment, with no associated
+ // section.
+ IN_OUTPUT_SEGMENT,
+ // Symbol value is constant.
+ CONSTANT
+ };
+
+ // When the source is IN_OUTPUT_SEGMENT, we need to describe what
+ // the offset means.
+ enum Segment_offset_base
+ {
+ // From the start of the segment.
+ SEGMENT_START,
+ // From the end of the segment.
+ SEGMENT_END,
+ // From the filesz of the segment--i.e., after the loaded bytes
+ // but before the bytes which are allocated but zeroed.
+ SEGMENT_BSS
+ };
+
+ // Return the symbol name.
+ const char*
+ name() const
+ { return this->name_; }
+
+ // Return the symbol version. This will return NULL for an
+ // unversioned symbol.
+ const char*
+ version() const
+ { return this->version_; }
+
+ // Return the symbol source.
+ Source
+ source() const
+ { return this->source_; }
+
+ // Return the object with which this symbol is associated.
+ Object*
+ object() const
+ {
+ gold_assert(this->source_ == FROM_OBJECT);
+ return this->u_.from_object.object;
+ }
+
+ // Return the index of the section in the input relocatable or
+ // dynamic object file.
+ unsigned int
+ shndx() const
+ {
+ gold_assert(this->source_ == FROM_OBJECT);
+ return this->u_.from_object.shndx;
+ }
+
+ // Return the output data section with which this symbol is
+ // associated, if the symbol was specially defined with respect to
+ // an output data section.
+ Output_data*
+ output_data() const
+ {
+ gold_assert(this->source_ == IN_OUTPUT_DATA);
+ return this->u_.in_output_data.output_data;
+ }
+
+ // If this symbol was defined with respect to an output data
+ // section, return whether the value is an offset from end.
+ bool
+ offset_is_from_end() const
+ {
+ gold_assert(this->source_ == IN_OUTPUT_DATA);
+ return this->u_.in_output_data.offset_is_from_end;
+ }
+
+ // Return the output segment with which this symbol is associated,
+ // if the symbol was specially defined with respect to an output
+ // segment.
+ Output_segment*
+ output_segment() const
+ {
+ gold_assert(this->source_ == IN_OUTPUT_SEGMENT);
+ return this->u_.in_output_segment.output_segment;
+ }
+
+ // If this symbol was defined with respect to an output segment,
+ // return the offset base.
+ Segment_offset_base
+ offset_base() const
+ {
+ gold_assert(this->source_ == IN_OUTPUT_SEGMENT);
+ return this->u_.in_output_segment.offset_base;
+ }
+
+ // Return the symbol binding.
+ elfcpp::STB
+ binding() const
+ { return this->binding_; }
+
+ // Return the symbol type.
+ elfcpp::STT
+ type() const
+ { return this->type_; }
+
+ // Return the symbol visibility.
+ elfcpp::STV
+ visibility() const
+ { return this->visibility_; }
+
+ // Return the non-visibility part of the st_other field.
+ unsigned char
+ nonvis() const
+ { return this->nonvis_; }
+
+ // Return whether this symbol is a forwarder. This will never be
+ // true of a symbol found in the hash table, but may be true of
+ // symbol pointers attached to object files.
+ bool
+ is_forwarder() const
+ { return this->is_forwarder_; }
+
+ // Mark this symbol as a forwarder.
+ void
+ set_forwarder()
+ { this->is_forwarder_ = true; }
+
+ // Return whether this symbol needs an entry in the dynamic symbol
+ // table.
+ bool
+ needs_dynsym_entry() const
+ { return this->needs_dynsym_entry_; }
+
+ // Mark this symbol as needing an entry in the dynamic symbol table.
+ void
+ set_needs_dynsym_entry()
+ { this->needs_dynsym_entry_ = true; }
+
+ // Return whether this symbol has been seen in a regular object.
+ bool
+ in_reg() const
+ { return this->in_reg_; }
+
+ // Mark this symbol as having been seen in a regular object.
+ void
+ set_in_reg()
+ { this->in_reg_ = true; }
+
+ // Mark this symbol as having been seen in a dynamic object.
+ void
+ set_in_dyn()
+ { this->in_dyn_ = true; }
+
+ // Return the index of this symbol in the output file symbol table.
+ // A value of -1U means that this symbol is not going into the
+ // output file. This starts out as zero, and is set to a non-zero
+ // value by Symbol_table::finalize. It is an error to ask for the
+ // symbol table index before it has been set.
+ unsigned int
+ symtab_index() const
+ {
+ gold_assert(this->symtab_index_ != 0);
+ return this->symtab_index_;
+ }
+
+ // Set the index of the symbol in the output file symbol table.
+ void
+ set_symtab_index(unsigned int index)
+ {
+ gold_assert(index != 0);
+ this->symtab_index_ = index;
+ }
+
+ // Return whether this symbol already has an index in the output
+ // file symbol table.
+ bool
+ has_symtab_index() const
+ { return this->symtab_index_ != 0; }
+
+ // Return the index of this symbol in the dynamic symbol table. A
+ // value of -1U means that this symbol is not going into the dynamic
+ // symbol table. This starts out as zero, and is set to a non-zero
+ // during Layout::finalize. It is an error to ask for the dynamic
+ // symbol table index before it has been set.
+ unsigned int
+ dynsym_index() const
+ {
+ gold_assert(this->dynsym_index_ != 0);
+ return this->dynsym_index_;
+ }
+
+ // Set the index of the symbol in the dynamic symbol table.
+ void
+ set_dynsym_index(unsigned int index)
+ {
+ gold_assert(index != 0);
+ this->dynsym_index_ = index;
+ }
+
+ // Return whether this symbol already has an index in the dynamic
+ // symbol table.
+ bool
+ has_dynsym_index() const
+ { return this->dynsym_index_ != 0; }
+
+ // Return whether this symbol has an entry in the GOT section.
+ bool
+ has_got_offset() const
+ { return this->has_got_offset_; }
+
+ // Return the offset into the GOT section of this symbol.
+ unsigned int
+ got_offset() const
+ {
+ gold_assert(this->has_got_offset());
+ return this->got_offset_;
+ }
+
+ // Set the GOT offset of this symbol.
+ void
+ set_got_offset(unsigned int got_offset)
+ {
+ this->has_got_offset_ = true;
+ this->got_offset_ = got_offset;
+ }
+
+ // Return whether this symbol has an entry in the PLT section.
+ bool
+ has_plt_offset() const
+ { return this->has_plt_offset_; }
+
+ // Return the offset into the PLT section of this symbol.
+ unsigned int
+ plt_offset() const
+ {
+ gold_assert(this->has_plt_offset());
+ return this->plt_offset_;
+ }
+
+ // Set the PLT offset of this symbol.
+ void
+ set_plt_offset(unsigned int plt_offset)
+ {
+ this->has_plt_offset_ = true;
+ this->plt_offset_ = plt_offset;
+ }
+
+ // Return true if the final value of this symbol is known at link
+ // time.
+ bool
+ final_value_is_known(const General_options* options) const
+ {
+ if (options->is_shared())
+ return false;
+ return this->source_ != FROM_OBJECT || !this->object()->is_dynamic();
+ }
+
+ // Return whether this is a defined symbol (not undefined or
+ // common).
+ bool
+ is_defined() const
+ {
+ return (this->source_ != FROM_OBJECT
+ || (this->shndx() != elfcpp::SHN_UNDEF
+ && this->shndx() != elfcpp::SHN_COMMON));
+ }
+
+ // Return true if this symbol is from a dynamic object.
+ bool
+ is_from_dynobj() const
+ {
+ return this->source_ == FROM_OBJECT && this->object()->is_dynamic();
+ }
+
+ // Return whether this is an undefined symbol.
+ bool
+ is_undefined() const
+ {
+ return this->source_ == FROM_OBJECT && this->shndx() == elfcpp::SHN_UNDEF;
+ }
+
+ // Return whether this is a common symbol.
+ bool
+ is_common() const
+ {
+ return (this->source_ == FROM_OBJECT
+ && (this->shndx() == elfcpp::SHN_COMMON
+ || this->type_ == elfcpp::STT_COMMON));
+ }
+
+ // Return whether there should be a warning for references to this
+ // symbol.
+ bool
+ has_warning() const
+ { return this->has_warning_; }
+
+ // Mark this symbol as having a warning.
+ void
+ set_has_warning()
+ { this->has_warning_ = true; }
+
+ protected:
+ // Instances of this class should always be created at a specific
+ // size.
+ Symbol()
+ { memset(this, 0, sizeof *this); }
+
+ // Initialize the general fields.
+ void
+ init_fields(const char* name, const char* version,
+ elfcpp::STT type, elfcpp::STB binding,
+ elfcpp::STV visibility, unsigned char nonvis);
+
+ // Initialize fields from an ELF symbol in OBJECT.
+ template<int size, bool big_endian>
+ void
+ init_base(const char *name, const char* version, Object* object,
+ const elfcpp::Sym<size, big_endian>&);
+
+ // Initialize fields for an Output_data.
+ void
+ init_base(const char* name, Output_data*, elfcpp::STT, elfcpp::STB,
+ elfcpp::STV, unsigned char nonvis, bool offset_is_from_end);
+
+ // Initialize fields for an Output_segment.
+ void
+ init_base(const char* name, Output_segment* os, elfcpp::STT type,
+ elfcpp::STB binding, elfcpp::STV visibility,
+ unsigned char nonvis, Segment_offset_base offset_base);
+
+ // Initialize fields for a constant.
+ void
+ init_base(const char* name, elfcpp::STT type, elfcpp::STB binding,
+ elfcpp::STV visibility, unsigned char nonvis);
+
+ // Override existing symbol.
+ template<int size, bool big_endian>
+ void
+ override_base(const elfcpp::Sym<size, big_endian>&, Object* object,
+ const char* version);
+
+ private:
+ Symbol(const Symbol&);
+ Symbol& operator=(const Symbol&);
+
+ // Symbol name (expected to point into a Stringpool).
+ const char* name_;
+ // Symbol version (expected to point into a Stringpool). This may
+ // be NULL.
+ const char* version_;
+
+ union
+ {
+ // This struct is used if SOURCE_ == FROM_OBJECT.
+ struct
+ {
+ // Object in which symbol is defined, or in which it was first
+ // seen.
+ Object* object;
+ // Section number in object_ in which symbol is defined.
+ unsigned int shndx;
+ } from_object;
+
+ // This struct is used if SOURCE_ == IN_OUTPUT_DATA.
+ struct
+ {
+ // Output_data in which symbol is defined. Before
+ // Layout::finalize the symbol's value is an offset within the
+ // Output_data.
+ Output_data* output_data;
+ // True if the offset is from the end, false if the offset is
+ // from the beginning.
+ bool offset_is_from_end;
+ } in_output_data;
+
+ // This struct is used if SOURCE_ == IN_OUTPUT_SEGMENT.
+ struct
+ {
+ // Output_segment in which the symbol is defined. Before
+ // Layout::finalize the symbol's value is an offset.
+ Output_segment* output_segment;
+ // The base to use for the offset before Layout::finalize.
+ Segment_offset_base offset_base;
+ } in_output_segment;
+ } u_;
+
+ // The index of this symbol in the output file. If the symbol is
+ // not going into the output file, this value is -1U. This field
+ // starts as always holding zero. It is set to a non-zero value by
+ // Symbol_table::finalize.
+ unsigned int symtab_index_;
+
+ // The index of this symbol in the dynamic symbol table. If the
+ // symbol is not going into the dynamic symbol table, this value is
+ // -1U. This field starts as always holding zero. It is set to a
+ // non-zero value during Layout::finalize.
+ unsigned int dynsym_index_;
+
+ // If this symbol has an entry in the GOT section (has_got_offset_
+ // is true), this is the offset from the start of the GOT section.
+ unsigned int got_offset_;
+
+ // If this symbol has an entry in the PLT section (has_plt_offset_
+ // is true), then this is the offset from the start of the PLT
+ // section.
+ unsigned int plt_offset_;
+
+ // Symbol type.
+ elfcpp::STT type_ : 4;
+ // Symbol binding.
+ elfcpp::STB binding_ : 4;
+ // Symbol visibility.
+ elfcpp::STV visibility_ : 2;
+ // Rest of symbol st_other field.
+ unsigned int nonvis_ : 6;
+ // The type of symbol.
+ Source source_ : 3;
+ // True if this symbol always requires special target-specific
+ // handling.
+ bool is_target_special_ : 1;
+ // True if this is the default version of the symbol.
+ bool is_def_ : 1;
+ // True if this symbol really forwards to another symbol. This is
+ // used when we discover after the fact that two different entries
+ // in the hash table really refer to the same symbol. This will
+ // never be set for a symbol found in the hash table, but may be set
+ // for a symbol found in the list of symbols attached to an Object.
+ // It forwards to the symbol found in the forwarders_ map of
+ // Symbol_table.
+ bool is_forwarder_ : 1;
+ // True if this symbol needs to be in the dynamic symbol table.
+ bool needs_dynsym_entry_ : 1;
+ // True if we've seen this symbol in a regular object.
+ bool in_reg_ : 1;
+ // True if we've seen this symbol in a dynamic object.
+ bool in_dyn_ : 1;
+ // True if the symbol has an entry in the GOT section.
+ bool has_got_offset_ : 1;
+ // True if the symbol has an entry in the PLT section.
+ bool has_plt_offset_ : 1;
+ // True if there is a warning for this symbol.
+ bool has_warning_ : 1;
+};
+
+// The parts of a symbol which are size specific. Using a template
+// derived class like this helps us use less space on a 32-bit system.
+
+template<int size>
+class Sized_symbol : public Symbol
+{
+ public:
+ typedef typename elfcpp::Elf_types<size>::Elf_Addr Value_type;
+ typedef typename elfcpp::Elf_types<size>::Elf_WXword Size_type;
+
+ Sized_symbol()
+ { }
+
+ // Initialize fields from an ELF symbol in OBJECT.
+ template<bool big_endian>
+ void
+ init(const char *name, const char* version, Object* object,
+ const elfcpp::Sym<size, big_endian>&);
+
+ // Initialize fields for an Output_data.
+ void
+ init(const char* name, Output_data*, Value_type value, Size_type symsize,
+ elfcpp::STT, elfcpp::STB, elfcpp::STV, unsigned char nonvis,
+ bool offset_is_from_end);
+
+ // Initialize fields for an Output_segment.
+ void
+ init(const char* name, Output_segment*, Value_type value, Size_type symsize,
+ elfcpp::STT, elfcpp::STB, elfcpp::STV, unsigned char nonvis,
+ Segment_offset_base offset_base);
+
+ // Initialize fields for a constant.
+ void
+ init(const char* name, Value_type value, Size_type symsize,
+ elfcpp::STT, elfcpp::STB, elfcpp::STV, unsigned char nonvis);
+
+ // Override existing symbol.
+ template<bool big_endian>
+ void
+ override(const elfcpp::Sym<size, big_endian>&, Object* object,
+ const char* version);
+
+ // Return the symbol's value.
+ Value_type
+ value() const
+ { return this->value_; }
+
+ // Return the symbol's size (we can't call this 'size' because that
+ // is a template parameter).
+ Size_type
+ symsize() const
+ { return this->symsize_; }
+
+ // Set the symbol size. This is used when resolving common symbols.
+ void
+ set_symsize(Size_type symsize)
+ { this->symsize_ = symsize; }
+
+ // Set the symbol value. This is called when we store the final
+ // values of the symbols into the symbol table.
+ void
+ set_value(Value_type value)
+ { this->value_ = value; }
+
+ private:
+ Sized_symbol(const Sized_symbol&);
+ Sized_symbol& operator=(const Sized_symbol&);
+
+ // Symbol value. Before Layout::finalize this is the offset in the
+ // input section. This is set to the final value during
+ // Layout::finalize.
+ Value_type value_;
+ // Symbol size.
+ Size_type symsize_;
+};
+
+// A struct describing a symbol defined by the linker, where the value
+// of the symbol is defined based on an output section. This is used
+// for symbols defined by the linker, like "_init_array_start".
+
+struct Define_symbol_in_section
+{
+ // The symbol name.
+ const char* name;
+ // The name of the output section with which this symbol should be
+ // associated. If there is no output section with that name, the
+ // symbol will be defined as zero.
+ const char* output_section;
+ // The offset of the symbol within the output section. This is an
+ // offset from the start of the output section, unless start_at_end
+ // is true, in which case this is an offset from the end of the
+ // output section.
+ uint64_t value;
+ // The size of the symbol.
+ uint64_t size;
+ // The symbol type.
+ elfcpp::STT type;
+ // The symbol binding.
+ elfcpp::STB binding;
+ // The symbol visibility.
+ elfcpp::STV visibility;
+ // The rest of the st_other field.
+ unsigned char nonvis;
+ // If true, the value field is an offset from the end of the output
+ // section.
+ bool offset_is_from_end;
+ // If true, this symbol is defined only if we see a reference to it.
+ bool only_if_ref;
+};
+
+// A struct describing a symbol defined by the linker, where the value
+// of the symbol is defined based on a segment. This is used for
+// symbols defined by the linker, like "_end". We describe the
+// segment with which the symbol should be associated by its
+// characteristics. If no segment meets these characteristics, the
+// symbol will be defined as zero. If there is more than one segment
+// which meets these characteristics, we will use the first one.
+
+struct Define_symbol_in_segment
+{
+ // The symbol name.
+ const char* name;
+ // The segment type where the symbol should be defined, typically
+ // PT_LOAD.
+ elfcpp::PT segment_type;
+ // Bitmask of segment flags which must be set.
+ elfcpp::PF segment_flags_set;
+ // Bitmask of segment flags which must be clear.
+ elfcpp::PF segment_flags_clear;
+ // The offset of the symbol within the segment. The offset is
+ // calculated from the position set by offset_base.
+ uint64_t value;
+ // The size of the symbol.
+ uint64_t size;
+ // The symbol type.
+ elfcpp::STT type;
+ // The symbol binding.
+ elfcpp::STB binding;
+ // The symbol visibility.
+ elfcpp::STV visibility;
+ // The rest of the st_other field.
+ unsigned char nonvis;
+ // The base from which we compute the offset.
+ Symbol::Segment_offset_base offset_base;
+ // If true, this symbol is defined only if we see a reference to it.
+ bool only_if_ref;
+};
+
+// This class manages warnings. Warnings are a GNU extension. When
+// we see a section named .gnu.warning.SYM in an object file, and if
+// we wind using the definition of SYM from that object file, then we
+// will issue a warning for any relocation against SYM from a
+// different object file. The text of the warning is the contents of
+// the section. This is not precisely the definition used by the old
+// GNU linker; the old GNU linker treated an occurrence of
+// .gnu.warning.SYM as defining a warning symbol. A warning symbol
+// would trigger a warning on any reference. However, it was
+// inconsistent in that a warning in a dynamic object only triggered
+// if there was no definition in a regular object. This linker is
+// different in that we only issue a warning if we use the symbol
+// definition from the same object file as the warning section.
+
+class Warnings
+{
+ public:
+ Warnings()
+ : warnings_()
+ { }
+
+ // Add a warning for symbol NAME in section SHNDX in object OBJ.
+ void
+ add_warning(Symbol_table* symtab, const char* name, Object* obj,
+ unsigned int shndx);
+
+ // For each symbol for which we should give a warning, make a note
+ // on the symbol.
+ void
+ note_warnings(Symbol_table* symtab);
+
+ // Issue a warning for a reference to SYM at LOCATION.
+ void
+ issue_warning(const Symbol* sym, const std::string& location) const;
+
+ private:
+ Warnings(const Warnings&);
+ Warnings& operator=(const Warnings&);
+
+ // What we need to know to get the warning text.
+ struct Warning_location
+ {
+ // The object the warning is in.
+ Object* object;
+ // The index of the warning section.
+ unsigned int shndx;
+ // The warning text if we have already loaded it.
+ std::string text;
+
+ Warning_location()
+ : object(NULL), shndx(0), text()
+ { }
+
+ void
+ set(Object* o, unsigned int s)
+ {
+ this->object = o;
+ this->shndx = s;
+ }
+
+ void
+ set_text(const char* t, off_t l)
+ { this->text.assign(t, l); }
+ };
+
+ // A mapping from warning symbol names (canonicalized in
+ // Symbol_table's namepool_ field) to
+ typedef Unordered_map<const char*, Warning_location> Warning_table;
+
+ Warning_table warnings_;
+};
+
+// The main linker symbol table.
+
+class Symbol_table
+{
+ public:
+ Symbol_table();
+
+ ~Symbol_table();
+
+ // Add COUNT external symbols from the relocatable object RELOBJ to
+ // the symbol table. SYMS is the symbols, SYM_NAMES is their names,
+ // SYM_NAME_SIZE is the size of SYM_NAMES. This sets SYMPOINTERS to
+ // point to the symbols in the symbol table.
+ template<int size, bool big_endian>
+ void
+ add_from_relobj(Sized_relobj<size, big_endian>* relobj,
+ const unsigned char* syms, size_t count,
+ const char* sym_names, size_t sym_name_size,
+ Symbol** sympointers);
+
+ // Add COUNT dynamic symbols from the dynamic object DYNOBJ to the
+ // symbol table. SYMS is the symbols. SYM_NAMES is their names.
+ // SYM_NAME_SIZE is the size of SYM_NAMES. The other parameters are
+ // symbol version data.
+ template<int size, bool big_endian>
+ void
+ add_from_dynobj(Sized_dynobj<size, big_endian>* dynobj,
+ const unsigned char* syms, size_t count,
+ const char* sym_names, size_t sym_name_size,
+ const unsigned char* versym, size_t versym_size,
+ const std::vector<const char*>*);
+
+ // Define a special symbol based on an Output_data. It is a
+ // multiple definition error if this symbol is already defined.
+ Symbol*
+ define_in_output_data(const Target*, const char* name, const char* version,
+ Output_data*, uint64_t value, uint64_t symsize,
+ elfcpp::STT type, elfcpp::STB binding,
+ elfcpp::STV visibility, unsigned char nonvis,
+ bool offset_is_from_end, bool only_if_ref);
+
+ // Define a special symbol based on an Output_segment. It is a
+ // multiple definition error if this symbol is already defined.
+ Symbol*
+ define_in_output_segment(const Target*, const char* name,
+ const char* version, Output_segment*,
+ uint64_t value, uint64_t symsize,
+ elfcpp::STT type, elfcpp::STB binding,
+ elfcpp::STV visibility, unsigned char nonvis,
+ Symbol::Segment_offset_base, bool only_if_ref);
+
+ // Define a special symbol with a constant value. It is a multiple
+ // definition error if this symbol is already defined.
+ Symbol*
+ define_as_constant(const Target*, const char* name, const char* version,
+ uint64_t value, uint64_t symsize, elfcpp::STT type,
+ elfcpp::STB binding, elfcpp::STV visibility,
+ unsigned char nonvis, bool only_if_ref);
+
+ // Define a set of symbols in output sections.
+ void
+ define_symbols(const Layout*, const Target*, int count,
+ const Define_symbol_in_section*);
+
+ // Define a set of symbols in output segments.
+ void
+ define_symbols(const Layout*, const Target*, int count,
+ const Define_symbol_in_segment*);
+
+ // Look up a symbol.
+ Symbol*
+ lookup(const char*, const char* version = NULL) const;
+
+ // Return the real symbol associated with the forwarder symbol FROM.
+ Symbol*
+ resolve_forwards(const Symbol* from) const;
+
+ // Return the bitsize (32 or 64) of the symbols in the table.
+ int
+ get_size() const
+ { return this->size_; }
+
+ // Return the sized version of a symbol in this table.
+ template<int size>
+ Sized_symbol<size>*
+ get_sized_symbol(Symbol* ACCEPT_SIZE) const;
+
+ template<int size>
+ const Sized_symbol<size>*
+ get_sized_symbol(const Symbol* ACCEPT_SIZE) const;
+
+ // Return the count of undefined symbols seen.
+ int
+ saw_undefined() const
+ { return this->saw_undefined_; }
+
+ // Allocate the common symbols
+ void
+ allocate_commons(const General_options&, Layout*);
+
+ // Add a warning for symbol NAME in section SHNDX in object OBJ.
+ void
+ add_warning(const char* name, Object* obj, unsigned int shndx)
+ { this->warnings_.add_warning(this, name, obj, shndx); }
+
+ // Canonicalize a symbol name for use in the hash table.
+ const char*
+ canonicalize_name(const char* name)
+ { return this->namepool_.add(name, NULL); }
+
+ // Possibly issue a warning for a reference to SYM at LOCATION which
+ // is in OBJ.
+ void
+ issue_warning(const Symbol* sym, const std::string& location) const
+ { this->warnings_.issue_warning(sym, location); }
+
+ // Set the dynamic symbol indexes. INDEX is the index of the first
+ // global dynamic symbol. Pointers to the symbols are stored into
+ // the vector. The names are stored into the Stringpool. This
+ // returns an updated dynamic symbol index.
+ unsigned int
+ set_dynsym_indexes(const General_options*, const Target*, unsigned int index,
+ std::vector<Symbol*>*, Stringpool*, Versions*);
+
+ // Finalize the symbol table after we have set the final addresses
+ // of all the input sections. This sets the final symbol indexes,
+ // values and adds the names to *POOL. INDEX is the index of the
+ // first global symbol. OFF is the file offset of the global symbol
+ // table, DYNOFF is the offset of the globals in the dynamic symbol
+ // table, DYN_GLOBAL_INDEX is the index of the first global dynamic
+ // symbol, and DYNCOUNT is the number of global dynamic symbols.
+ // This records the parameters, and returns the new file offset.
+ off_t
+ finalize(unsigned int index, off_t off, off_t dynoff,
+ size_t dyn_global_index, size_t dyncount, Stringpool* pool);
+
+ // Write out the global symbols.
+ void
+ write_globals(const Target*, const Stringpool*, const Stringpool*,
+ Output_file*) const;
+
+ // Write out a section symbol. Return the updated offset.
+ void
+ write_section_symbol(const Target*, const Output_section*, Output_file*,
+ off_t) const;
+
+ private:
+ Symbol_table(const Symbol_table&);
+ Symbol_table& operator=(const Symbol_table&);
+
+ // Set the size (32 or 64) of the symbols in the table.
+ void
+ set_size(int size)
+ { this->size_ = size; }
+
+ // Make FROM a forwarder symbol to TO.
+ void
+ make_forwarder(Symbol* from, Symbol* to);
+
+ // Add a symbol.
+ template<int size, bool big_endian>
+ Symbol*
+ add_from_object(Object*, const char *name, Stringpool::Key name_key,
+ const char *version, Stringpool::Key version_key,
+ bool def, const elfcpp::Sym<size, big_endian>& sym);
+
+ // Resolve symbols.
+ template<int size, bool big_endian>
+ static void
+ resolve(Sized_symbol<size>* to,
+ const elfcpp::Sym<size, big_endian>& sym,
+ Object*, const char* version);
+
+ template<int size, bool big_endian>
+ static void
+ resolve(Sized_symbol<size>* to, const Sized_symbol<size>* from,
+ const char* version ACCEPT_SIZE_ENDIAN);
+
+ // Define a special symbol.
+ template<int size, bool big_endian>
+ Sized_symbol<size>*
+ define_special_symbol(const Target* target, const char* name,
+ const char* version, bool only_if_ref
+ ACCEPT_SIZE_ENDIAN);
+
+ // Define a symbol in an Output_data, sized version.
+ template<int size>
+ Sized_symbol<size>*
+ do_define_in_output_data(const Target*, const char* name,
+ const char* version, Output_data*,
+ typename elfcpp::Elf_types<size>::Elf_Addr value,
+ typename elfcpp::Elf_types<size>::Elf_WXword ssize,
+ elfcpp::STT type, elfcpp::STB binding,
+ elfcpp::STV visibility, unsigned char nonvis,
+ bool offset_is_from_end, bool only_if_ref);
+
+ // Define a symbol in an Output_segment, sized version.
+ template<int size>
+ Sized_symbol<size>*
+ do_define_in_output_segment(
+ const Target*, const char* name, const char* version, Output_segment* os,
+ typename elfcpp::Elf_types<size>::Elf_Addr value,
+ typename elfcpp::Elf_types<size>::Elf_WXword ssize,
+ elfcpp::STT type, elfcpp::STB binding,
+ elfcpp::STV visibility, unsigned char nonvis,
+ Symbol::Segment_offset_base offset_base, bool only_if_ref);
+
+ // Define a symbol as a constant, sized version.
+ template<int size>
+ Sized_symbol<size>*
+ do_define_as_constant(
+ const Target*, const char* name, const char* version,
+ typename elfcpp::Elf_types<size>::Elf_Addr value,
+ typename elfcpp::Elf_types<size>::Elf_WXword ssize,
+ elfcpp::STT type, elfcpp::STB binding,
+ elfcpp::STV visibility, unsigned char nonvis,
+ bool only_if_ref);
+
+ // Allocate the common symbols, sized version.
+ template<int size>
+ void
+ do_allocate_commons(const General_options&, Layout*);
+
+ // Finalize symbols specialized for size.
+ template<int size>
+ off_t
+ sized_finalize(unsigned int, off_t, Stringpool*);
+
+ // Write globals specialized for size and endianness.
+ template<int size, bool big_endian>
+ void
+ sized_write_globals(const Target*, const Stringpool*, const Stringpool*,
+ Output_file*) const;
+
+ // Write out a symbol to P.
+ template<int size, bool big_endian>
+ void
+ sized_write_symbol(Sized_symbol<size>*, unsigned int shndx,
+ const Stringpool*, unsigned char* p
+ ACCEPT_SIZE_ENDIAN) const;
+
+ // Write out a section symbol, specialized for size and endianness.
+ template<int size, bool big_endian>
+ void
+ sized_write_section_symbol(const Output_section*, Output_file*, off_t) const;
+
+ // The type of the symbol hash table.
+
+ typedef std::pair<Stringpool::Key, Stringpool::Key> Symbol_table_key;
+
+ struct Symbol_table_hash
+ {
+ size_t
+ operator()(const Symbol_table_key&) const;
+ };
+
+ struct Symbol_table_eq
+ {
+ bool
+ operator()(const Symbol_table_key&, const Symbol_table_key&) const;
+ };
+
+ typedef Unordered_map<Symbol_table_key, Symbol*, Symbol_table_hash,
+ Symbol_table_eq> Symbol_table_type;
+
+ // The type of the list of common symbols.
+
+ typedef std::vector<Symbol*> Commons_type;
+
+ // The size of the symbols in the symbol table (32 or 64).
+ int size_;
+
+ // We increment this every time we see a new undefined symbol, for
+ // use in archive groups.
+ int saw_undefined_;
+
+ // The index of the first global symbol in the output file.
+ unsigned int first_global_index_;
+
+ // The file offset within the output symtab section where we should
+ // write the table.
+ off_t offset_;
+
+ // The number of global symbols we want to write out.
+ size_t output_count_;
+
+ // The file offset of the global dynamic symbols, or 0 if none.
+ off_t dynamic_offset_;
+
+ // The index of the first global dynamic symbol.
+ unsigned int first_dynamic_global_index_;
+
+ // The number of global dynamic symbols, or 0 if none.
+ off_t dynamic_count_;
+
+ // The symbol hash table.
+ Symbol_table_type table_;
+
+ // A pool of symbol names. This is used for all global symbols.
+ // Entries in the hash table point into this pool.
+ Stringpool namepool_;
+
+ // Forwarding symbols.
+ Unordered_map<const Symbol*, Symbol*> forwarders_;
+
+ // We don't expect there to be very many common symbols, so we keep
+ // a list of them. When we find a common symbol we add it to this
+ // list. It is possible that by the time we process the list the
+ // symbol is no longer a common symbol. It may also have become a
+ // forwarder.
+ Commons_type commons_;
+
+ // Manage symbol warnings.
+ Warnings warnings_;
+};
+
+// We inline get_sized_symbol for efficiency.
+
+template<int size>
+Sized_symbol<size>*
+Symbol_table::get_sized_symbol(Symbol* sym ACCEPT_SIZE) const
+{
+ gold_assert(size == this->get_size());
+ return static_cast<Sized_symbol<size>*>(sym);
+}
+
+template<int size>
+const Sized_symbol<size>*
+Symbol_table::get_sized_symbol(const Symbol* sym ACCEPT_SIZE) const
+{
+ gold_assert(size == this->get_size());
+ return static_cast<const Sized_symbol<size>*>(sym);
+}
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_SYMTAB_H)
diff --git a/gold/target-reloc.h b/gold/target-reloc.h
new file mode 100644
index 000000000000..d282805dbebb
--- /dev/null
+++ b/gold/target-reloc.h
@@ -0,0 +1,193 @@
+// target-reloc.h -- target specific relocation support -*- C++ -*-
+
+#ifndef GOLD_TARGET_RELOC_H
+#define GOLD_TARGET_RELOC_H
+
+#include "elfcpp.h"
+#include "object.h"
+#include "symtab.h"
+#include "reloc-types.h"
+
+namespace gold
+{
+
+// This function implements the generic part of reloc scanning. This
+// is an inline function which takes a class whose operator()
+// implements the machine specific part of scanning. We do it this
+// way to avoidmaking a function call for each relocation, and to
+// avoid repeating the generic code for each target.
+
+template<int size, bool big_endian, typename Target_type, int sh_type,
+ typename Scan>
+inline void
+scan_relocs(
+ const General_options& options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Target_type* target,
+ Sized_relobj<size, big_endian>* object,
+ unsigned int data_shndx,
+ const unsigned char* prelocs,
+ size_t reloc_count,
+ size_t local_count,
+ const unsigned char* plocal_syms,
+ Symbol** global_syms)
+{
+ typedef typename Reloc_types<sh_type, size, big_endian>::Reloc Reltype;
+ const int reloc_size = Reloc_types<sh_type, size, big_endian>::reloc_size;
+ const int sym_size = elfcpp::Elf_sizes<size>::sym_size;
+ Scan scan;
+
+ for (size_t i = 0; i < reloc_count; ++i, prelocs += reloc_size)
+ {
+ Reltype reloc(prelocs);
+
+ typename elfcpp::Elf_types<size>::Elf_WXword r_info = reloc.get_r_info();
+ unsigned int r_sym = elfcpp::elf_r_sym<size>(r_info);
+ unsigned int r_type = elfcpp::elf_r_type<size>(r_info);
+
+ if (r_sym < local_count)
+ {
+ gold_assert(plocal_syms != NULL);
+ typename elfcpp::Sym<size, big_endian> lsym(plocal_syms
+ + r_sym * sym_size);
+ const unsigned int shndx = lsym.get_st_shndx();
+ if (shndx < elfcpp::SHN_LORESERVE
+ && shndx != elfcpp::SHN_UNDEF
+ && !object->is_section_included(lsym.get_st_shndx()))
+ {
+ // RELOC is a relocation against a local symbol in a
+ // section we are discarding. We can ignore this
+ // relocation. It will eventually become a reloc
+ // against the value zero.
+ //
+ // FIXME: We should issue a warning if this is an
+ // allocated section; is this the best place to do it?
+ //
+ // FIXME: The old GNU linker would in some cases look
+ // for the linkonce section which caused this section to
+ // be discarded, and, if the other section was the same
+ // size, change the reloc to refer to the other section.
+ // That seems risky and weird to me, and I don't know of
+ // any case where it is actually required.
+
+ continue;
+ }
+
+ scan.local(options, symtab, layout, target, object, data_shndx,
+ reloc, r_type, lsym);
+ }
+ else
+ {
+ Symbol* gsym = global_syms[r_sym - local_count];
+ gold_assert(gsym != NULL);
+ if (gsym->is_forwarder())
+ gsym = symtab->resolve_forwards(gsym);
+
+ scan.global(options, symtab, layout, target, object, data_shndx,
+ reloc, r_type, gsym);
+ }
+ }
+}
+
+// This function implements the generic part of relocation processing.
+// This is an inline function which take a class whose operator()
+// implements the machine specific part of relocation. We do it this
+// way to avoid making a function call for each relocation, and to
+// avoid repeating the generic relocation handling code for each
+// target.
+
+// SIZE is the ELF size: 32 or 64. BIG_ENDIAN is the endianness of
+// the data. SH_TYPE is the section type: SHT_REL or SHT_RELA.
+// RELOCATE implements operator() to do a relocation.
+
+// PRELOCS points to the relocation data. RELOC_COUNT is the number
+// of relocs. VIEW is the section data, VIEW_ADDRESS is its memory
+// address, and VIEW_SIZE is the size.
+
+template<int size, bool big_endian, typename Target_type, int sh_type,
+ typename Relocate>
+inline void
+relocate_section(
+ const Relocate_info<size, big_endian>* relinfo,
+ Target_type* target,
+ const unsigned char* prelocs,
+ size_t reloc_count,
+ unsigned char* view,
+ typename elfcpp::Elf_types<size>::Elf_Addr view_address,
+ off_t view_size)
+{
+ typedef typename Reloc_types<sh_type, size, big_endian>::Reloc Reltype;
+ const int reloc_size = Reloc_types<sh_type, size, big_endian>::reloc_size;
+ Relocate relocate;
+
+ unsigned int local_count = relinfo->local_symbol_count;
+ const typename Sized_relobj<size, big_endian>::Local_values* local_values =
+ relinfo->local_values;
+ const Symbol* const * global_syms = relinfo->symbols;
+
+ for (size_t i = 0; i < reloc_count; ++i, prelocs += reloc_size)
+ {
+ Reltype reloc(prelocs);
+
+ off_t offset = reloc.get_r_offset();
+
+ typename elfcpp::Elf_types<size>::Elf_WXword r_info = reloc.get_r_info();
+ unsigned int r_sym = elfcpp::elf_r_sym<size>(r_info);
+ unsigned int r_type = elfcpp::elf_r_type<size>(r_info);
+
+ const Sized_symbol<size>* sym;
+
+ Symbol_value<size> symval;
+ const Symbol_value<size> *psymval;
+ if (r_sym < local_count)
+ {
+ sym = NULL;
+ psymval = &(*local_values)[r_sym];
+ }
+ else
+ {
+ const Symbol* gsym = global_syms[r_sym - local_count];
+ gold_assert(gsym != NULL);
+ if (gsym->is_forwarder())
+ gsym = relinfo->symtab->resolve_forwards(gsym);
+
+ sym = static_cast<const Sized_symbol<size>*>(gsym);
+ if (sym->has_symtab_index())
+ symval.set_output_symtab_index(sym->symtab_index());
+ else
+ symval.set_no_output_symtab_entry();
+ symval.set_output_value(sym->value());
+ psymval = &symval;
+ }
+
+ if (!relocate.relocate(relinfo, target, i, reloc, r_type, sym, psymval,
+ view + offset, view_address + offset, view_size))
+ continue;
+
+ if (offset < 0 || offset >= view_size)
+ {
+ fprintf(stderr, _("%s: %s: reloc has bad offset %zu\n"),
+ program_name, relinfo->location(i, offset).c_str(),
+ static_cast<size_t>(offset));
+ gold_exit(false);
+ }
+
+ if (sym != NULL
+ && sym->is_undefined()
+ && sym->binding() != elfcpp::STB_WEAK)
+ {
+ fprintf(stderr, _("%s: %s: undefined reference to '%s'\n"),
+ program_name, relinfo->location(i, offset).c_str(),
+ sym->name());
+ // gold_exit(false);
+ }
+
+ if (sym != NULL && sym->has_warning())
+ relinfo->symtab->issue_warning(sym, relinfo->location(i, offset));
+ }
+}
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_TARGET_RELOC_H)
diff --git a/gold/target-select.cc b/gold/target-select.cc
new file mode 100644
index 000000000000..d15d0e346d1d
--- /dev/null
+++ b/gold/target-select.cc
@@ -0,0 +1,52 @@
+// target-select.cc -- select a target for an object file
+
+#include "gold.h"
+
+#include "elfcpp.h"
+#include "target-select.h"
+
+namespace
+{
+
+// The start of the list of target selectors.
+
+gold::Target_selector* target_selectors;
+
+} // End anonymous namespace.
+
+namespace gold
+{
+
+// Construct a Target_selector, which means adding it to the linked
+// list. This runs at global constructor time, so we want it to be
+// fast.
+
+Target_selector::Target_selector(int machine, int size, bool big_endian)
+ : machine_(machine), size_(size), big_endian_(big_endian)
+{
+ this->next_ = target_selectors;
+ target_selectors = this;
+}
+
+// Find the target for an ELF file.
+
+extern Target*
+select_target(int machine, int size, bool big_endian, int osabi,
+ int abiversion)
+{
+ for (Target_selector* p = target_selectors; p != NULL; p = p->next())
+ {
+ int pmach = p->machine();
+ if ((pmach == machine || pmach == elfcpp::EM_NONE)
+ && p->size() == size
+ && p->big_endian() ? big_endian : !big_endian)
+ {
+ Target* ret = p->recognize(machine, osabi, abiversion);
+ if (ret != NULL)
+ return ret;
+ }
+ }
+ return NULL;
+}
+
+} // End namespace gold.
diff --git a/gold/target-select.h b/gold/target-select.h
new file mode 100644
index 000000000000..8ccd75fac757
--- /dev/null
+++ b/gold/target-select.h
@@ -0,0 +1,69 @@
+// target-select.h -- select a target for an object file -*- C++ -*-
+
+#ifndef GOLD_TARGET_SELECT_H
+#define GOLD_TARGET_SELECT_H
+
+namespace gold
+{
+
+class Target;
+
+// We want to avoid a master list of targets, which implies using a
+// global constructor. And we also want the program to start up as
+// quickly as possible, which implies avoiding global constructors.
+// We compromise on a very simple global constructor. We use a target
+// selector, which specifies an ELF machine number and a recognition
+// function. We use global constructors to build a linked list of
+// target selectors--a simple pointer list, not a std::list.
+
+class Target_selector
+{
+ public:
+ // Create a target selector for a specific machine number, size (32
+ // or 64), and endianness. The machine number can be EM_NONE to
+ // test for any machine number.
+ Target_selector(int machine, int size, bool big_endian);
+
+ virtual ~Target_selector()
+ { }
+
+ // If we can handle this target, return a pointer to a target
+ // structure. The size and endianness are known.
+ virtual Target* recognize(int machine, int osabi, int abiversion) = 0;
+
+ // Return the next Target_selector in the linked list.
+ Target_selector*
+ next() const
+ { return this->next_; }
+
+ // Return the machine number this selector is looking for, which can
+ // be EM_NONE to match any machine number.
+ int
+ machine() const
+ { return this->machine_; }
+
+ // Return the size this is looking for (32 or 64).
+ int
+ size() const
+ { return this->size_; }
+
+ // Return the endianness this is looking for.
+ bool
+ big_endian() const
+ { return this->big_endian_; }
+
+ private:
+ int machine_;
+ int size_;
+ bool big_endian_;
+ Target_selector* next_;
+};
+
+// Select the target for an ELF file.
+
+extern Target* select_target(int machine, int size, bool big_endian,
+ int osabi, int abiversion);
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_TARGET_SELECT_H)
diff --git a/gold/target.h b/gold/target.h
new file mode 100644
index 000000000000..9181a93193d5
--- /dev/null
+++ b/gold/target.h
@@ -0,0 +1,210 @@
+// target.h -- target support for gold -*- C++ -*-
+
+// The abstract class Target is the interface for target specific
+// support. It defines abstract methods which each target must
+// implement. Typically there will be one target per processor, but
+// in some cases it may be necessary to have subclasses.
+
+// For speed and consistency we want to use inline functions to handle
+// relocation processing. So besides implementations of the abstract
+// methods, each target is expected to define a template
+// specialization of the relocation functions.
+
+#ifndef GOLD_TARGET_H
+#define GOLD_TARGET_H
+
+#include "elfcpp.h"
+
+namespace gold
+{
+
+class General_options;
+class Object;
+template<int size, bool big_endian>
+class Sized_relobj;
+template<int size, bool big_endian>
+struct Relocate_info;
+class Symbol;
+template<int size>
+class Sized_symbol;
+class Symbol_table;
+
+// The abstract class for target specific handling.
+
+class Target
+{
+ public:
+ virtual ~Target()
+ { }
+
+ // Return the bit size that this target implements. This should
+ // return 32 or 64.
+ int
+ get_size() const
+ { return this->pti_->size; }
+
+ // Return whether this target is big-endian.
+ bool
+ is_big_endian() const
+ { return this->pti_->is_big_endian; }
+
+ // Machine code to store in e_machine field of ELF header.
+ elfcpp::EM
+ machine_code() const
+ { return this->pti_->machine_code; }
+
+ // Whether this target has a specific make_symbol function.
+ bool
+ has_make_symbol() const
+ { return this->pti_->has_make_symbol; }
+
+ // Whether this target has a specific resolve function.
+ bool
+ has_resolve() const
+ { return this->pti_->has_resolve; }
+
+ // Return the default name of the dynamic linker.
+ const char*
+ dynamic_linker() const
+ { return this->pti_->dynamic_linker; }
+
+ // Return the default address to use for the text segment.
+ uint64_t
+ text_segment_address() const
+ { return this->pti_->text_segment_address; }
+
+ // Return the ABI specified page size.
+ uint64_t
+ abi_pagesize() const
+ { return this->pti_->abi_pagesize; }
+
+ // Return the common page size used on actual systems.
+ uint64_t
+ common_pagesize() const
+ { return this->pti_->common_pagesize; }
+
+ // This is called to tell the target to complete any sections it is
+ // handling. After this all sections must have their final size.
+ void
+ finalize_sections(const General_options* options, Layout* layout)
+ { return this->do_finalize_sections(options, layout); }
+
+ protected:
+ // This struct holds the constant information for a child class. We
+ // use a struct to avoid the overhead of virtual function calls for
+ // simple information.
+ struct Target_info
+ {
+ // Address size (32 or 64).
+ int size;
+ // Whether the target is big endian.
+ bool is_big_endian;
+ // The code to store in the e_machine field of the ELF header.
+ elfcpp::EM machine_code;
+ // Whether this target has a specific make_symbol function.
+ bool has_make_symbol;
+ // Whether this target has a specific resolve function.
+ bool has_resolve;
+ // The default dynamic linker name.
+ const char* dynamic_linker;
+ // The default text segment address.
+ uint64_t text_segment_address;
+ // The ABI specified page size.
+ uint64_t abi_pagesize;
+ // The common page size used by actual implementations.
+ uint64_t common_pagesize;
+ };
+
+ Target(const Target_info* pti)
+ : pti_(pti)
+ { }
+
+ // Virtual function which may be implemented by the child class.
+ virtual void
+ do_finalize_sections(const General_options*, Layout*)
+ { }
+
+ private:
+ Target(const Target&);
+ Target& operator=(const Target&);
+
+ // The target information.
+ const Target_info* pti_;
+};
+
+// The abstract class for a specific size and endianness of target.
+// Each actual target implementation class should derive from an
+// instantiation of Sized_target.
+
+template<int size, bool big_endian>
+class Sized_target : public Target
+{
+ public:
+ // Make a new symbol table entry for the target. This should be
+ // overridden by a target which needs additional information in the
+ // symbol table. This will only be called if has_make_symbol()
+ // returns true.
+ virtual Sized_symbol<size>*
+ make_symbol() const
+ { gold_unreachable(); }
+
+ // Resolve a symbol for the target. This should be overridden by a
+ // target which needs to take special action. TO is the
+ // pre-existing symbol. SYM is the new symbol, seen in OBJECT.
+ // VERSION is the version of SYM. This will only be called if
+ // has_resolve() returns true.
+ virtual void
+ resolve(Symbol*, const elfcpp::Sym<size, big_endian>&, Object*,
+ const char*)
+ { gold_unreachable(); }
+
+ // Scan the relocs for a section, and record any information
+ // required for the symbol. OPTIONS is the command line options.
+ // SYMTAB is the symbol table. OBJECT is the object in which the
+ // section appears. DATA_SHNDX is the section index that these
+ // relocs apply to. SH_TYPE is the type of the relocation section,
+ // SHT_REL or SHT_RELA. PRELOCS points to the relocation data.
+ // RELOC_COUNT is the number of relocs. LOCAL_SYMBOL_COUNT is the
+ // number of local symbols. PLOCAL_SYMBOLS points to the local
+ // symbol data from OBJECT. GLOBAL_SYMBOLS is the array of pointers
+ // to the global symbol table from OBJECT.
+ virtual void
+ scan_relocs(const General_options& options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Sized_relobj<size, big_endian>* object,
+ unsigned int data_shndx,
+ unsigned int sh_type,
+ const unsigned char* prelocs,
+ size_t reloc_count,
+ size_t local_symbol_count,
+ const unsigned char* plocal_symbols,
+ Symbol** global_symbols) = 0;
+
+ // Relocate section data. SH_TYPE is the type of the relocation
+ // section, SHT_REL or SHT_RELA. PRELOCS points to the relocation
+ // information. RELOC_COUNT is the number of relocs. VIEW is a
+ // view into the output file holding the section contents,
+ // VIEW_ADDRESS is the virtual address of the view, and VIEW_SIZE is
+ // the size of the view.
+ virtual void
+ relocate_section(const Relocate_info<size, big_endian>*,
+ unsigned int sh_type,
+ const unsigned char* prelocs,
+ size_t reloc_count,
+ unsigned char* view,
+ typename elfcpp::Elf_types<size>::Elf_Addr view_address,
+ off_t view_size) = 0;
+
+ protected:
+ Sized_target(const Target::Target_info* pti)
+ : Target(pti)
+ {
+ gold_assert(pti->size == size);
+ gold_assert(pti->is_big_endian ? big_endian : !big_endian);
+ }
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_TARGET_H)
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
new file mode 100644
index 000000000000..122be70592b2
--- /dev/null
+++ b/gold/testsuite/Makefile.am
@@ -0,0 +1,22 @@
+# Process this file with automake to generate Makefile.in
+
+AUTOMAKE_OPTIONS =
+
+AM_CXXFLAGS = $(WARN_CXXFLAGS) $(LFS_CXXFLAGS)
+
+INCLUDES = -D_GNU_SOURCE \
+ -I$(srcdir) -I$(srcdir)/.. -I$(srcdir)/../../include \
+ -I$(srcdir)/../../elfcpp \
+ -DLOCALEDIR="\"$(datadir)/locale\"" \
+ @INCINTL@
+
+TESTS = object_unittest
+
+check_LIBRARIES = libgoldtest.a
+libgoldtest_a_SOURCES = test.cc testmain.cc testfile.cc
+
+LDADD = libgoldtest.a ../libgold.a
+
+check_PROGRAMS = object_unittest
+
+object_unittest_SOURCES = object_unittest.cc
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
new file mode 100644
index 000000000000..4967af6c862c
--- /dev/null
+++ b/gold/testsuite/Makefile.in
@@ -0,0 +1,521 @@
+# 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@
+
+# Process this file with automake to generate Makefile.in
+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@
+check_PROGRAMS = object_unittest$(EXEEXT)
+subdir = testsuite
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/progtest.m4 \
+ $(top_srcdir)/../config/po.m4 $(top_srcdir)/../config/nls.m4 \
+ $(top_srcdir)/../config/gettext-sister.m4 \
+ $(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+AR = ar
+ARFLAGS = cru
+libgoldtest_a_AR = $(AR) $(ARFLAGS)
+libgoldtest_a_LIBADD =
+am_libgoldtest_a_OBJECTS = test.$(OBJEXT) testmain.$(OBJEXT) \
+ testfile.$(OBJEXT)
+libgoldtest_a_OBJECTS = $(am_libgoldtest_a_OBJECTS)
+am_object_unittest_OBJECTS = object_unittest.$(OBJEXT)
+object_unittest_OBJECTS = $(am_object_unittest_OBJECTS)
+object_unittest_LDADD = $(LDADD)
+object_unittest_DEPENDENCIES = libgoldtest.a ../libgold.a
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/../depcomp
+am__depfiles_maybe = depfiles
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+SOURCES = $(libgoldtest_a_SOURCES) $(object_unittest_SOURCES)
+DIST_SOURCES = $(libgoldtest_a_SOURCES) $(object_unittest_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+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@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GMSGFMT = @GMSGFMT@
+INCINTL = @INCINTL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+LDFLAGS = @LDFLAGS@
+LFS_CXXFLAGS = @LFS_CXXFLAGS@
+LIBINTL = @LIBINTL@
+LIBINTL_DEP = @LIBINTL_DEP@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+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@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+YACC = @YACC@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_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@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+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@
+AUTOMAKE_OPTIONS =
+AM_CXXFLAGS = $(WARN_CXXFLAGS) $(LFS_CXXFLAGS)
+INCLUDES = -D_GNU_SOURCE \
+ -I$(srcdir) -I$(srcdir)/.. -I$(srcdir)/../../include \
+ -I$(srcdir)/../../elfcpp \
+ -DLOCALEDIR="\"$(datadir)/locale\"" \
+ @INCINTL@
+
+TESTS = object_unittest
+check_LIBRARIES = libgoldtest.a
+libgoldtest_a_SOURCES = test.cc testmain.cc testfile.cc
+LDADD = libgoldtest.a ../libgold.a
+object_unittest_SOURCES = object_unittest.cc
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign testsuite/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-checkLIBRARIES:
+ -test -z "$(check_LIBRARIES)" || rm -f $(check_LIBRARIES)
+libgoldtest.a: $(libgoldtest_a_OBJECTS) $(libgoldtest_a_DEPENDENCIES)
+ -rm -f libgoldtest.a
+ $(libgoldtest_a_AR) libgoldtest.a $(libgoldtest_a_OBJECTS) $(libgoldtest_a_LIBADD)
+ $(RANLIB) libgoldtest.a
+
+clean-checkPROGRAMS:
+ -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
+object_unittest$(EXEEXT): $(object_unittest_OBJECTS) $(object_unittest_DEPENDENCIES)
+ @rm -f object_unittest$(EXEEXT)
+ $(CXXLINK) $(object_unittest_LDFLAGS) $(object_unittest_OBJECTS) $(object_unittest_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object_unittest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testfile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testmain.Po@am__quote@
+
+.cc.o:
+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+uninstall-info-am:
+
+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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ 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; }'`; \
+ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ 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; }'`; \
+ 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
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list='$(TESTS)'; \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ echo "XPASS: $$tst"; \
+ ;; \
+ *) \
+ echo "PASS: $$tst"; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xfail=`expr $$xfail + 1`; \
+ echo "XFAIL: $$tst"; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ echo "FAIL: $$tst"; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ echo "SKIP: $$tst"; \
+ fi; \
+ done; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="All $$all tests passed"; \
+ else \
+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all tests failed"; \
+ else \
+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ skipped="($$skip tests were not run)"; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ test -z "$$skipped" || echo "$$skipped"; \
+ test -z "$$report" || echo "$$report"; \
+ echo "$$dashes"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_LIBRARIES) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+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:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+ clean-checkLIBRARIES clean-checkPROGRAMS clean-generic ctags \
+ distclean distclean-compile distclean-generic distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-info-am
+
+# 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/gold/testsuite/object_unittest.cc b/gold/testsuite/object_unittest.cc
new file mode 100644
index 000000000000..c15237d822bd
--- /dev/null
+++ b/gold/testsuite/object_unittest.cc
@@ -0,0 +1,41 @@
+// object_unittest.cc -- test Object, Relobj, etc.
+
+#include "gold.h"
+
+#include "object.h"
+
+#include "test.h"
+#include "testfile.h"
+
+namespace gold_testsuite
+{
+
+using namespace gold;
+
+// Test basic Object functionality.
+
+bool
+Object_test(Test_report*)
+{
+ Input_file input_file("test.o", test_file_1, test_file_1_size);
+ Object* object = make_elf_object("test.o", &input_file, 0,
+ test_file_1, test_file_1_size);
+ CHECK(object->name() == "test.o");
+ CHECK(!object->is_dynamic());
+ CHECK(object->target() == target_test_pointer);
+ CHECK(object->is_locked());
+ object->unlock();
+ CHECK(!object->is_locked());
+ object->lock();
+ CHECK(object->shnum() == 5);
+ CHECK(object->section_name(0).empty());
+ CHECK(object->section_name(1) == ".test");
+ CHECK(object->section_flags(0) == 0);
+ CHECK(object->section_flags(1) == elfcpp::SHF_ALLOC);
+ object->unlock();
+ return true;
+}
+
+Register_test object_register("Object", Object_test);
+
+} // End namespace gold_testsuite.
diff --git a/gold/testsuite/test.cc b/gold/testsuite/test.cc
new file mode 100644
index 000000000000..37a4ada9ab06
--- /dev/null
+++ b/gold/testsuite/test.cc
@@ -0,0 +1,78 @@
+// test.cc -- simplistic test framework for gold.
+
+#include "gold.h"
+
+#include <cstdio>
+
+#include "test.h"
+
+namespace gold_testsuite
+{
+
+// Test_framework methods.
+
+// The current test being run.
+
+Test_report* Test_framework::current_report;
+
+// Run a test.
+
+void
+Test_framework::run(const char *name, bool (*pfn)(Test_report*))
+{
+ this->testname_ = name;
+ this->current_fail_ = false;
+
+ Test_report tr(this);
+ Test_framework::current_report = &tr;
+
+ if ((*pfn)(&tr) && !this->current_fail_)
+ {
+ printf("PASS: %s\n", name);
+ ++this->passes_;
+ }
+ else
+ {
+ printf("FAIL: %s\n", name);
+ ++this->failures_;
+ }
+
+ Test_framework::current_report = NULL;
+ this->testname_ = NULL;
+}
+
+// Let a test report an error.
+
+void
+Test_framework::error(const char* message)
+{
+ printf("ERROR: %s: %s\n", this->testname_, message);
+ this->fail();
+}
+
+// Register_test methods.
+
+// Linked list of all registered tests.
+
+Register_test* Register_test::all_tests;
+
+// Register a test.
+
+Register_test::Register_test(const char* name, bool (*pfn)(Test_report*))
+ : name_(name), pfn_(pfn), next_(Register_test::all_tests)
+{
+ Register_test::all_tests = this;
+}
+
+// Run all registered tests.
+
+void
+Register_test::run_tests(Test_framework* tf)
+{
+ for (Register_test* p = Register_test::all_tests;
+ p != NULL;
+ p = p->next_)
+ tf->run(p->name_, p->pfn_);
+}
+
+} // End namespace gold_testsuite.
diff --git a/gold/testsuite/test.h b/gold/testsuite/test.h
new file mode 100644
index 000000000000..e0556e267316
--- /dev/null
+++ b/gold/testsuite/test.h
@@ -0,0 +1,121 @@
+// test.h -- simplistic test framework for gold unittests -*- C++ -*-
+
+#ifndef GOLD_TESTSUITE_TEST_H
+#define GOLD_TESTSUITE_TEST_H
+
+namespace gold_testsuite
+{
+
+class Test_report;
+
+// This class handles basic test framework functionality.
+
+class Test_framework
+{
+ public:
+ Test_framework()
+ : testname_(NULL), current_fail_(0), passes_(0), failures_(0)
+ { }
+
+ // Return number of failures.
+ unsigned int
+ failures() const
+ { return this->failures_; }
+
+ // Run a test.
+ void
+ run(const char* name, bool (*pfn)(Test_report*));
+
+ // Get the current Test_report. This is used by the test support
+ // macros.
+ static Test_report*
+ report()
+ { return Test_framework::current_report; }
+
+ private:
+ friend class Test_report;
+
+ // Cause the current test to fail.
+ void
+ fail()
+ { ++this->current_fail_ = true; }
+
+ // Report an error from the current test.
+ void
+ error(const char* message);
+
+ // Current Test_report. This is a static variable valid while a
+ // test is being run.
+ static Test_report* current_report;
+
+ // Current test being run.
+ const char* testname_;
+ // Whether the current test is failing.
+ bool current_fail_;
+ // Total number of passeed tests.
+ unsigned int passes_;
+ // Total number of failed tests.
+ unsigned int failures_;
+};
+
+// An instance of this class is passed to each test function.
+
+class Test_report
+{
+public:
+ Test_report(Test_framework* tf)
+ : tf_(tf)
+ { }
+
+ // Mark the test as failing.
+ void
+ fail()
+ { this->tf_->fail(); }
+
+ // Report an error.
+ void
+ error(const char* message)
+ { this->tf_->error(message); }
+
+private:
+ Test_framework* tf_;
+};
+
+// This class registers a test function so that the testsuite runs it.
+
+class Register_test
+{
+ public:
+ Register_test(const char* name, bool (*pfn)(Test_report*));
+
+ // Run all registered tests.
+ static void
+ run_tests(Test_framework*);
+
+ private:
+ // Linked list of all tests.
+ static Register_test* all_tests;
+
+ // Test name.
+ const char* name_;
+ // Function to call. It should return true if the test passes,
+ // false if it fails.
+ bool (*pfn_)(Test_report*);
+ // Next test in linked list.
+ Register_test* next_;
+};
+
+} // End namespace gold_testsuite.
+
+// These macros are for convenient use in tests.
+
+// Check that a condition is true. If it is false, report a failure.
+
+#define CHECK(cond) \
+ ((cond) ? 0 : (::gold_testsuite::Test_framework::report()->fail(), 0))
+
+// Report an error during a test.
+
+#define ERROR(msg) (::gold_testsuite::Test_framework::report()->error(msg))
+
+#endif // !defined(GOLD_TESTSUITE_TEST_H)
diff --git a/gold/testsuite/testfile.cc b/gold/testsuite/testfile.cc
new file mode 100644
index 000000000000..bfe3c9d7a18b
--- /dev/null
+++ b/gold/testsuite/testfile.cc
@@ -0,0 +1,261 @@
+// testfile.cc -- Dummy ELF objects for testing purposes.
+
+#include "gold.h"
+
+#include "target.h"
+#include "target-select.h"
+
+#include "test.h"
+#include "testfile.h"
+
+namespace gold_testsuite
+{
+
+using namespace gold;
+
+// A Target used for testing purposes.
+
+class Target_test : public Sized_target<32, false>
+{
+ public:
+ Target_test()
+ : Sized_target<32, false>(&test_target_info)
+ { }
+
+ void
+ scan_relocs(const General_options&, Symbol_table*, Layout*,
+ Sized_relobj<32, false>*, unsigned int, unsigned int,
+ const unsigned char*, size_t, size_t, const unsigned char*,
+ Symbol**)
+ { ERROR("call to Target_test::scan_relocs"); }
+
+ void
+ relocate_section(const Relocate_info<32, false>*, unsigned int,
+ const unsigned char*, size_t, unsigned char*,
+ elfcpp::Elf_types<32>::Elf_Addr, off_t)
+ { ERROR("call to Target_test::relocate_section"); }
+
+ static const Target::Target_info test_target_info;
+};
+
+const Target::Target_info Target_test::test_target_info =
+{
+ 32, // size
+ false, // is_big_endian
+ static_cast<elfcpp::EM>(0xffff), // machine_code
+ false, // has_make_symbol
+ false, // has_resolve
+ "/dummy", // dynamic_linker
+ 0x08000000, // text_segment_address
+ 0x1000, // abi_pagesize
+ 0x1000 // common_pagesize
+};
+
+// The single test target.
+
+Target_test target_test;
+
+// A pointer to the test target. This is used in CHECKs.
+
+Target* target_test_pointer = &target_test;
+
+// Select the test target.
+
+class Target_selector_test : public Target_selector
+{
+ public:
+ Target_selector_test()
+ : Target_selector(0xffff, 32, false)
+ { }
+
+ Target*
+ recognize(int, int, int)
+ { return &target_test; }
+};
+
+// Register the test target selector.
+
+Target_selector_test target_selector_test;
+
+// A simple ELF object with one empty section, named ".test" and one
+// globally visible symbol named "test".
+
+const unsigned char test_file_1[] =
+{
+ // Ehdr
+ // EI_MAG[0-3]
+ 0x7f, 'E', 'L', 'F',
+ // EI_CLASS: 32 bit.
+ 1,
+ // EI_DATA: little endian
+ 1,
+ // EI_VERSION
+ 1,
+ // EI_OSABI
+ 0,
+ // EI_ABIVERSION
+ 0,
+ // EI_PAD
+ 0, 0, 0, 0, 0, 0, 0,
+ // e_type: ET_REL
+ 1, 0,
+ // e_machine: a magic value used for testing.
+ 0xff, 0xff,
+ // e_version
+ 1, 0, 0, 0,
+ // e_entry
+ 0, 0, 0, 0,
+ // e_phoff
+ 0, 0, 0, 0,
+ // e_shoff: starts right after file header
+ 52, 0, 0, 0,
+ // e_flags
+ 0, 0, 0, 0,
+ // e_ehsize
+ 52, 0,
+ // e_phentsize
+ 32, 0,
+ // e_phnum
+ 0, 0,
+ // e_shentsize
+ 40, 0,
+ // e_shnum: dummy, .test, .symtab, .strtab, .shstrtab
+ 5, 0,
+ // e_shstrndx
+ 4, 0,
+
+ // Offset 52
+ // Shdr 0: dummy entry
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+
+ // Offset 92
+ // Shdr 1: .test
+ // sh_name: after initial null
+ 1, 0, 0, 0,
+ // sh_type: SHT_PROGBITS
+ 1, 0, 0, 0,
+ // sh_flags: SHF_ALLOC
+ 2, 0, 0, 0,
+ // sh_addr
+ 0, 0, 0, 0,
+ // sh_offset: after file header + 5 section headers
+ 252, 0, 0, 0,
+ // sh_size
+ 0, 0, 0, 0,
+ // sh_link
+ 0, 0, 0, 0,
+ // sh_info
+ 0, 0, 0, 0,
+ // sh_addralign
+ 1, 0, 0, 0,
+ // sh_entsize
+ 0, 0, 0, 0,
+
+ // Offset 132
+ // Shdr 2: .symtab
+ // sh_name: 1 null byte + ".test\0"
+ 7, 0, 0, 0,
+ // sh_type: SHT_SYMTAB
+ 2, 0, 0, 0,
+ // sh_flags
+ 0, 0, 0, 0,
+ // sh_addr
+ 0, 0, 0, 0,
+ // sh_offset: after file header + 5 section headers + empty section
+ 252, 0, 0, 0,
+ // sh_size: two symbols: dummy symbol + test symbol
+ 32, 0, 0, 0,
+ // sh_link: to .strtab
+ 3, 0, 0, 0,
+ // sh_info: one local symbol, the dummy symbol
+ 1, 0, 0, 0,
+ // sh_addralign
+ 4, 0, 0, 0,
+ // sh_entsize: size of symbol
+ 16, 0, 0, 0,
+
+ // Offset 172
+ // Shdr 3: .strtab
+ // sh_name: 1 null byte + ".test\0" + ".symtab\0"
+ 15, 0, 0, 0,
+ // sh_type: SHT_STRTAB
+ 3, 0, 0, 0,
+ // sh_flags
+ 0, 0, 0, 0,
+ // sh_addr
+ 0, 0, 0, 0,
+ // sh_offset: after .symtab section. 284 == 0x11c
+ 0x1c, 0x1, 0, 0,
+ // sh_size: 1 null byte + "test\0"
+ 6, 0, 0, 0,
+ // sh_link
+ 0, 0, 0, 0,
+ // sh_info
+ 0, 0, 0, 0,
+ // sh_addralign
+ 1, 0, 0, 0,
+ // sh_entsize
+ 0, 0, 0, 0,
+
+ // Offset 212
+ // Shdr 4: .shstrtab
+ // sh_name: 1 null byte + ".test\0" + ".symtab\0" + ".strtab\0"
+ 23, 0, 0, 0,
+ // sh_type: SHT_STRTAB
+ 3, 0, 0, 0,
+ // sh_flags
+ 0, 0, 0, 0,
+ // sh_addr
+ 0, 0, 0, 0,
+ // sh_offset: after .strtab section. 290 == 0x122
+ 0x22, 0x1, 0, 0,
+ // sh_size: all section names
+ 33, 0, 0, 0,
+ // sh_link
+ 0, 0, 0, 0,
+ // sh_info
+ 0, 0, 0, 0,
+ // sh_addralign
+ 1, 0, 0, 0,
+ // sh_entsize
+ 0, 0, 0, 0,
+
+ // Offset 252
+ // Contents of .symtab section
+ // Symbol 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ // Offset 268
+ // Symbol 1
+ // st_name
+ 1, 0, 0, 0,
+ // st_value
+ 0, 0, 0, 0,
+ // st_size
+ 0, 0, 0, 0,
+ // st_info: STT_NOTYPE, STB_GLOBAL
+ 0x10,
+ // st_other
+ 0,
+ // st_shndx: In .test
+ 1, 0,
+
+ // Offset 284
+ // Contents of .strtab section
+ '\0',
+ 't', 'e', 's', 't', '\0',
+
+ // Offset 290
+ // Contents of .shstrtab section
+ '\0',
+ '.', 't', 'e', 's', 't', '\0',
+ '.', 's', 'y', 'm', 't', 'a', 'b', '\0',
+ '.', 's', 't', 'r', 't', 'a', 'b', '\0',
+ '.', 's', 'h', 's', 't', 'r', 't', 'a', 'b', '\0'
+};
+
+const unsigned int test_file_1_size = sizeof test_file_1;
+
+} // End namespace gold_testsuite.
diff --git a/gold/testsuite/testfile.h b/gold/testsuite/testfile.h
new file mode 100644
index 000000000000..c123107e4969
--- /dev/null
+++ b/gold/testsuite/testfile.h
@@ -0,0 +1,20 @@
+// testfile.h -- test input files -*- C++ -*-
+
+#ifndef GOLD_TESTSUITE_TESTFILE_H
+#define GOLD_TESTSUITE_TESTFILE_H
+
+namespace gold
+{
+class Target;
+}
+
+namespace gold_testsuite
+{
+
+extern gold::Target* target_test_pointer;
+extern const unsigned char test_file_1[];
+extern const unsigned int test_file_1_size;
+
+}; // End namespace gold_testsuite.
+
+#endif // !defined(GOLD_TESTSUITE_TESTFILE_H)
diff --git a/gold/testsuite/testmain.cc b/gold/testsuite/testmain.cc
new file mode 100644
index 000000000000..eb46b72d84f6
--- /dev/null
+++ b/gold/testsuite/testmain.cc
@@ -0,0 +1,18 @@
+// testmain.cc -- main function for simplisitic gold test framework.
+
+#include "gold.h"
+
+#include "test.h"
+
+using namespace gold_testsuite;
+
+int
+main(int, char** argv)
+{
+ gold::program_name = argv[0];
+
+ Test_framework tf;
+ Register_test::run_tests(&tf);
+
+ exit(tf.failures());
+}
diff --git a/gold/workqueue.cc b/gold/workqueue.cc
new file mode 100644
index 000000000000..9062118aaa00
--- /dev/null
+++ b/gold/workqueue.cc
@@ -0,0 +1,404 @@
+// workqueue.cc -- the workqueue for gold
+
+#include "gold.h"
+
+#include "workqueue.h"
+
+namespace gold
+{
+
+// Task_token methods.
+
+Task_token::Task_token()
+ : is_blocker_(false), readers_(0), writer_(NULL)
+{
+}
+
+Task_token::~Task_token()
+{
+ gold_assert(this->readers_ == 0 && this->writer_ == NULL);
+}
+
+bool
+Task_token::is_readable() const
+{
+ gold_assert(!this->is_blocker_);
+ return this->writer_ == NULL;
+}
+
+void
+Task_token::add_reader()
+{
+ gold_assert(!this->is_blocker_);
+ gold_assert(this->is_readable());
+ ++this->readers_;
+}
+
+void
+Task_token::remove_reader()
+{
+ gold_assert(!this->is_blocker_);
+ gold_assert(this->readers_ > 0);
+ --this->readers_;
+}
+
+bool
+Task_token::is_writable() const
+{
+ gold_assert(!this->is_blocker_);
+ return this->writer_ == NULL && this->readers_ == 0;
+}
+
+void
+Task_token::add_writer(const Task* t)
+{
+ gold_assert(!this->is_blocker_);
+ gold_assert(this->is_writable());
+ this->writer_ = t;
+}
+
+void
+Task_token::remove_writer(const Task* t)
+{
+ gold_assert(!this->is_blocker_);
+ gold_assert(this->writer_ == t);
+ this->writer_ = NULL;
+}
+
+bool
+Task_token::has_write_lock(const Task* t)
+{
+ gold_assert(!this->is_blocker_);
+ return this->writer_ == t;
+}
+
+// For blockers, we just use the readers_ field.
+
+void
+Task_token::add_blocker()
+{
+ if (this->readers_ == 0 && this->writer_ == NULL)
+ this->is_blocker_ = true;
+ else
+ gold_assert(this->is_blocker_);
+ ++this->readers_;
+}
+
+bool
+Task_token::remove_blocker()
+{
+ gold_assert(this->is_blocker_ && this->readers_ > 0);
+ --this->readers_;
+ return this->readers_ == 0;
+}
+
+bool
+Task_token::is_blocked() const
+{
+ gold_assert(this->is_blocker_
+ || (this->readers_ == 0 && this->writer_ == NULL));
+ return this->readers_ > 0;
+}
+
+// The Task_block_token class.
+
+Task_block_token::Task_block_token(Task_token& token, Workqueue* workqueue)
+ : token_(token), workqueue_(workqueue)
+{
+ // We must increment the block count when the task is created and
+ // put on the queue. This object is created when the task is run,
+ // so we don't increment the block count here.
+ gold_assert(this->token_.is_blocked());
+}
+
+Task_block_token::~Task_block_token()
+{
+ if (this->token_.remove_blocker())
+ {
+ // Tell the workqueue that a blocker was cleared. This is
+ // always called in the main thread, so no locking is required.
+ this->workqueue_->cleared_blocker();
+ }
+}
+
+// The Workqueue_runner abstract class.
+
+class Workqueue_runner
+{
+ public:
+ Workqueue_runner(Workqueue* workqueue)
+ : workqueue_(workqueue)
+ { }
+ virtual ~Workqueue_runner()
+ { }
+
+ // Run a task. This is always called in the main thread.
+ virtual void run(Task*, Task_locker*) = 0;
+
+ protected:
+ // This is called by an implementation when a task is completed.
+ void completed(Task* t, Task_locker* tl)
+ { this->workqueue_->completed(t, tl); }
+
+ Workqueue* get_workqueue() const
+ { return this->workqueue_; }
+
+ private:
+ Workqueue* workqueue_;
+};
+
+// The simple single-threaded implementation of Workqueue_runner.
+
+class Workqueue_runner_single : public Workqueue_runner
+{
+ public:
+ Workqueue_runner_single(Workqueue* workqueue)
+ : Workqueue_runner(workqueue)
+ { }
+ ~Workqueue_runner_single()
+ { }
+
+ void run(Task*, Task_locker*);
+};
+
+void
+Workqueue_runner_single::run(Task* t, Task_locker* tl)
+{
+ t->run(this->get_workqueue());
+ this->completed(t, tl);
+}
+
+// Workqueue methods.
+
+Workqueue::Workqueue(const General_options&)
+ : tasks_lock_(),
+ tasks_(),
+ completed_lock_(),
+ completed_(),
+ running_(0),
+ completed_condvar_(this->completed_lock_),
+ cleared_blockers_(0)
+{
+ // At some point we will select the specific implementation of
+ // Workqueue_runner to use based on the command line options.
+ this->runner_ = new Workqueue_runner_single(this);
+}
+
+Workqueue::~Workqueue()
+{
+ gold_assert(this->tasks_.empty());
+ gold_assert(this->completed_.empty());
+ gold_assert(this->running_ == 0);
+}
+
+// Add a task to the queue.
+
+void
+Workqueue::queue(Task* t)
+{
+ Hold_lock hl(this->tasks_lock_);
+ this->tasks_.push_back(t);
+}
+
+// Add a task to the front of the queue.
+
+void
+Workqueue::queue_front(Task* t)
+{
+ Hold_lock hl(this->tasks_lock_);
+ this->tasks_.push_front(t);
+}
+
+// Clear the list of completed tasks. Return whether we cleared
+// anything. The completed_lock_ must be held when this is called.
+
+bool
+Workqueue::clear_completed()
+{
+ if (this->completed_.empty())
+ return false;
+ do
+ {
+ delete this->completed_.front();
+ this->completed_.pop_front();
+ }
+ while (!this->completed_.empty());
+ return true;
+}
+
+// Find a runnable task in TASKS, which is non-empty. Return NULL if
+// none could be found. The tasks_lock_ must be held when this is
+// called. Sets ALL_BLOCKED if all non-runnable tasks are waiting on
+// a blocker.
+
+Task*
+Workqueue::find_runnable(Task_list& tasks, bool* all_blocked)
+{
+ Task* tlast = tasks.back();
+ *all_blocked = true;
+ while (true)
+ {
+ Task* t = tasks.front();
+ tasks.pop_front();
+
+ Task::Is_runnable_type is_runnable = t->is_runnable(this);
+ if (is_runnable == Task::IS_RUNNABLE)
+ return t;
+
+ if (is_runnable != Task::IS_BLOCKED)
+ *all_blocked = false;
+
+ tasks.push_back(t);
+
+ if (t == tlast)
+ {
+ // We couldn't find any runnable task. If there are any
+ // completed tasks, free their locks and try again.
+
+ {
+ Hold_lock hl2(this->completed_lock_);
+
+ if (!this->clear_completed())
+ {
+ // There had better be some tasks running, or we will
+ // never find a runnable task.
+ gold_assert(this->running_ > 0);
+
+ // We couldn't find any runnable tasks, and we
+ // couldn't release any locks.
+ return NULL;
+ }
+ }
+
+ // We're going around again, so recompute ALL_BLOCKED.
+ *all_blocked = true;
+ }
+ }
+}
+
+// Process all the tasks on the workqueue. This is the main loop in
+// the linker. Note that as we process tasks, new tasks will be
+// added.
+
+void
+Workqueue::process()
+{
+ while (true)
+ {
+ Task* t;
+ bool empty;
+ bool all_blocked;
+
+ {
+ Hold_lock hl(this->tasks_lock_);
+
+ if (this->tasks_.empty())
+ {
+ t = NULL;
+ empty = true;
+ all_blocked = false;
+ }
+ else
+ {
+ t = this->find_runnable(this->tasks_, &all_blocked);
+ empty = false;
+ }
+ }
+
+ // If T != NULL, it is a task we can run.
+ // If T == NULL && empty, then there are no tasks waiting to
+ // be run at this level.
+ // If T == NULL && !empty, then there tasks waiting to be
+ // run at this level, but they are waiting for something to
+ // unlock.
+
+ if (t != NULL)
+ this->run(t);
+ else if (!empty)
+ {
+ {
+ Hold_lock hl(this->completed_lock_);
+
+ // There must be something for us to wait for, or we won't
+ // be able to make progress.
+ gold_assert(this->running_ > 0 || !this->completed_.empty());
+
+ if (all_blocked)
+ {
+ this->cleared_blockers_ = 0;
+ this->clear_completed();
+ while (this->cleared_blockers_ == 0)
+ {
+ gold_assert(this->running_ > 0);
+ this->completed_condvar_.wait();
+ this->clear_completed();
+ }
+ }
+ else
+ {
+ if (this->running_ > 0)
+ {
+ // Wait for a task to finish.
+ this->completed_condvar_.wait();
+ }
+ this->clear_completed();
+ }
+ }
+ }
+ else
+ {
+ {
+ Hold_lock hl(this->completed_lock_);
+
+ // If there are no running tasks, then we are done.
+ if (this->running_ == 0)
+ {
+ this->clear_completed();
+ return;
+ }
+
+ // Wait for a task to finish. Then we have to loop around
+ // again in case it added any new tasks before finishing.
+ this->completed_condvar_.wait();
+ this->clear_completed();
+ }
+ }
+ }
+}
+
+// Run a task. This is always called in the main thread.
+
+void
+Workqueue::run(Task* t)
+{
+ ++this->running_;
+ this->runner_->run(t, t->locks(this));
+}
+
+// This is called when a task is completed to put the locks on the
+// list to be released. We use a list because we only want the locks
+// to be released in the main thread.
+
+void
+Workqueue::completed(Task* t, Task_locker* tl)
+{
+ {
+ Hold_lock hl(this->completed_lock_);
+ gold_assert(this->running_ > 0);
+ --this->running_;
+ this->completed_.push_back(tl);
+ this->completed_condvar_.signal();
+ }
+ delete t;
+}
+
+// This is called when the last task for a blocker has completed.
+// This is always called in the main thread.
+
+void
+Workqueue::cleared_blocker()
+{
+ ++this->cleared_blockers_;
+}
+
+} // End namespace gold.
diff --git a/gold/workqueue.h b/gold/workqueue.h
new file mode 100644
index 000000000000..ed7a5b00d7dd
--- /dev/null
+++ b/gold/workqueue.h
@@ -0,0 +1,419 @@
+// workqueue.h -- the work queue for gold -*- C++ -*-
+
+// After processing the command line, everything the linker does is
+// driven from a work queue. This permits us to parallelize the
+// linker where possible.
+
+// Task_token
+// A simple locking implementation to ensure proper task ordering.
+// Task_read_token, Task_write_token
+// Lock a Task_token for read or write.
+// Task_locker
+// Task locking using RAII.
+// Task
+// An abstract class for jobs to run.
+
+#ifndef GOLD_WORKQUEUE_H
+#define GOLD_WORKQUEUE_H
+
+#include "gold-threads.h"
+#include "fileread.h"
+
+namespace gold
+{
+
+class General_options;
+class Task;
+class Workqueue;
+
+// Some tasks require access to shared data structures, such as the
+// symbol table. Some tasks must be executed in a particular error,
+// such as reading input file symbol tables--if we see foo.o -llib, we
+// have to read the symbols for foo.o before we read the ones for
+// -llib. To implement this safely and efficiently, we use tokens.
+// Task_tokens support shared read/exclusive write access to some
+// resource. Alternatively, they support blockers: blockers implement
+// the requirement that some set of tasks must complete before another
+// set of tasks can start. In such a case we increment the block
+// count when we create the task, and decrement it when the task
+// completes. Task_tokens are only manipulated by the main thread, so
+// they do not themselves require any locking.
+
+class Task_token
+{
+ public:
+ Task_token();
+
+ ~Task_token();
+
+ // A read/write token uses these methods.
+
+ bool
+ is_readable() const;
+
+ void
+ add_reader();
+
+ void
+ remove_reader();
+
+ bool
+ is_writable() const;
+
+ void
+ add_writer(const Task*);
+
+ void
+ remove_writer(const Task*);
+
+ bool
+ has_write_lock(const Task*);
+
+ // A blocker token uses these methods.
+
+ void
+ add_blocker();
+
+ // Returns true if block count drops to zero.
+ bool
+ remove_blocker();
+
+ bool
+ is_blocked() const;
+
+ private:
+ // It makes no sense to copy these.
+ Task_token(const Task_token&);
+ Task_token& operator=(const Task_token&);
+
+ bool is_blocker_;
+ int readers_;
+ const Task* writer_;
+};
+
+// In order to support tokens more reliably, we provide objects which
+// handle them using RAII.
+
+class Task_read_token
+{
+ public:
+ Task_read_token(Task_token& token)
+ : token_(token)
+ { this->token_.add_reader(); }
+
+ ~Task_read_token()
+ { this->token_.remove_reader(); }
+
+ private:
+ Task_read_token(const Task_read_token&);
+ Task_read_token& operator=(const Task_read_token&);
+
+ Task_token& token_;
+};
+
+class Task_write_token
+{
+ public:
+ Task_write_token(Task_token& token, const Task* task)
+ : token_(token), task_(task)
+ { this->token_.add_writer(this->task_); }
+
+ ~Task_write_token()
+ { this->token_.remove_writer(this->task_); }
+
+ private:
+ Task_write_token(const Task_write_token&);
+ Task_write_token& operator=(const Task_write_token&);
+
+ Task_token& token_;
+ const Task* task_;
+};
+
+class Task_block_token
+{
+ public:
+ // The blocker count must be incremented when the task is created.
+ // This object is created when the task is run. When we unblock the
+ // last task, we notify the workqueue.
+ Task_block_token(Task_token& token, Workqueue* workqueue);
+ ~Task_block_token();
+
+ private:
+ Task_block_token(const Task_block_token&);
+ Task_block_token& operator=(const Task_block_token&);
+
+ Task_token& token_;
+ Workqueue* workqueue_;
+};
+
+// An object which implements an RAII lock for any object which
+// supports lock and unlock methods.
+
+template<typename Obj>
+class Task_lock_obj
+{
+ public:
+ Task_lock_obj(Obj& obj)
+ : obj_(obj)
+ { this->obj_.lock(); }
+
+ ~Task_lock_obj()
+ { this->obj_.unlock(); }
+
+ private:
+ Task_lock_obj(const Task_lock_obj&);
+ Task_lock_obj& operator=(const Task_lock_obj&);
+
+ Obj& obj_;
+};
+
+// An abstract class used to lock Task_tokens using RAII. A typical
+// implementation would simply have a set of members of type
+// Task_read_token, Task_write_token, and Task_block_token.
+
+class Task_locker
+{
+ public:
+ Task_locker()
+ { }
+
+ virtual ~Task_locker()
+ { }
+};
+
+// A version of Task_locker which may be used for a single read lock.
+
+class Task_locker_read : public Task_locker
+{
+ public:
+ Task_locker_read(Task_token& token)
+ : read_token_(token)
+ { }
+
+ private:
+ Task_locker_read(const Task_locker_read&);
+ Task_locker_read& operator=(const Task_locker_read&);
+
+ Task_read_token read_token_;
+};
+
+// A version of Task_locker which may be used for a single write lock.
+
+class Task_locker_write : public Task_locker
+{
+ public:
+ Task_locker_write(Task_token& token, const Task* task)
+ : write_token_(token, task)
+ { }
+
+ private:
+ Task_locker_write(const Task_locker_write&);
+ Task_locker_write& operator=(const Task_locker_write&);
+
+ Task_write_token write_token_;
+};
+
+// A version of Task_locker which may be used for a single blocker
+// lock.
+
+class Task_locker_block : public Task_locker
+{
+ public:
+ Task_locker_block(Task_token& token, Workqueue* workqueue)
+ : block_token_(token, workqueue)
+ { }
+
+ private:
+ Task_locker_block(const Task_locker_block&);
+ Task_locker_block& operator=(const Task_locker_block&);
+
+ Task_block_token block_token_;
+};
+
+// A version of Task_locker which may be used to hold a lock on any
+// object which supports lock() and unlock() methods.
+
+template<typename Obj>
+class Task_locker_obj : public Task_locker
+{
+ public:
+ Task_locker_obj(Obj& obj)
+ : obj_lock_(obj)
+ { }
+
+ private:
+ Task_locker_obj(const Task_locker_obj&);
+ Task_locker_obj& operator=(const Task_locker_obj&);
+
+ Task_lock_obj<Obj> obj_lock_;
+};
+
+// The superclass for tasks to be placed on the workqueue. Each
+// specific task class will inherit from this one.
+
+class Task
+{
+ public:
+ Task()
+ { }
+ virtual ~Task()
+ { }
+
+ // Type returned by Is_runnable.
+ enum Is_runnable_type
+ {
+ // Task is runnable.
+ IS_RUNNABLE,
+ // Task is waiting for a block to clear.
+ IS_BLOCKED,
+ // Task is not waiting for a block, but is not runnable--i.e., is
+ // waiting for a lock.
+ IS_LOCKED
+ };
+
+ // Return whether the task can be run now. This method is only
+ // called from the main thread.
+ virtual Is_runnable_type
+ is_runnable(Workqueue*) = 0;
+
+ // Return a pointer to a Task_locker which locks all the resources
+ // required by the task. We delete the pointer when the task is
+ // complete. This method can return NULL if no locks are required.
+ // This method is only called from the main thread.
+ virtual Task_locker*
+ locks(Workqueue*) = 0;
+
+ // Run the task.
+ virtual void
+ run(Workqueue*) = 0;
+
+ private:
+ Task(const Task&);
+ Task& operator=(const Task&);
+};
+
+// A simple task which waits for a blocker and then runs a function.
+
+class Task_function_runner
+{
+ public:
+ virtual ~Task_function_runner()
+ { }
+
+ virtual void
+ run(Workqueue*) = 0;
+};
+
+class Task_function : public Task
+{
+ public:
+ // Both points should be allocated using new, and will be deleted
+ // after the task runs.
+ Task_function(Task_function_runner* runner, Task_token* blocker)
+ : runner_(runner), blocker_(blocker)
+ { }
+
+ ~Task_function()
+ {
+ delete this->runner_;
+ delete this->blocker_;
+ }
+
+ // The standard task methods.
+
+ // Wait until the task is unblocked.
+ Is_runnable_type
+ is_runnable(Workqueue*)
+ { return this->blocker_->is_blocked() ? IS_BLOCKED : IS_RUNNABLE; }
+
+ // This type of task does not normally hold any locks.
+ virtual Task_locker*
+ locks(Workqueue*)
+ { return NULL; }
+
+ // Run the action.
+ void
+ run(Workqueue* workqueue)
+ { this->runner_->run(workqueue); }
+
+ private:
+ Task_function(const Task_function&);
+ Task_function& operator=(const Task_function&);
+
+ Task_function_runner* runner_;
+ Task_token* blocker_;
+};
+
+// The workqueue
+
+class Workqueue_runner;
+
+class Workqueue
+{
+ public:
+ Workqueue(const General_options&);
+ ~Workqueue();
+
+ // Add a new task to the work queue.
+ void
+ queue(Task*);
+
+ // Add a new task to the front of the work queue. It will be the
+ // next task to run if it is ready.
+ void
+ queue_front(Task*);
+
+ // Process all the tasks on the work queue.
+ void
+ process();
+
+ // A complete set of blocking tasks has completed.
+ void
+ cleared_blocker();
+
+ private:
+ // This class can not be copied.
+ Workqueue(const Workqueue&);
+ Workqueue& operator=(const Workqueue&);
+
+ typedef std::list<Task*> Task_list;
+
+ // Run a task.
+ void run(Task*);
+
+ friend class Workqueue_runner;
+
+ // Find a runnable task.
+ Task* find_runnable(Task_list&, bool*);
+
+ // Add a lock to the completed queue.
+ void completed(Task*, Task_locker*);
+
+ // Clear the completed queue.
+ bool clear_completed();
+
+ // How to run a task. Only accessed from main thread.
+ Workqueue_runner* runner_;
+
+ // Lock for access to tasks_ members.
+ Lock tasks_lock_;
+ // List of tasks to execute at each link level.
+ Task_list tasks_;
+
+ // Lock for access to completed_ and running_ members.
+ Lock completed_lock_;
+ // List of Task_locker objects for main thread to free.
+ std::list<Task_locker*> completed_;
+ // Number of tasks currently running.
+ int running_;
+ // Condition variable signalled when a new entry is added to completed_.
+ Condvar completed_condvar_;
+
+ // Number of blocker tokens which were fully cleared. Only accessed
+ // from main thread.
+ int cleared_blockers_;
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_WORKQUEUE_H)
diff --git a/gold/yyscript.y b/gold/yyscript.y
new file mode 100644
index 000000000000..0bd2b603b2e5
--- /dev/null
+++ b/gold/yyscript.y
@@ -0,0 +1,168 @@
+/* yyscript.y -- linker script grammer for gold. */
+
+/* This is a bison grammar to parse a subset of the original GNU ld
+ linker script language. */
+
+%{
+
+#include "config.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "script-c.h"
+
+%}
+
+/* We need to use a pure parser because we might be multi-threaded.
+ We pass some arguments through the parser to the lexer. */
+
+%pure-parser
+
+%parse-param {void* closure}
+%lex-param {void* closure}
+
+/* Since we require bison anyhow, we take advantage of it. */
+
+%error-verbose
+
+/* The values associated with tokens. */
+
+%union {
+ const char* string;
+ int64_t integer;
+}
+
+/* Operators, including a precedence table for expressions. */
+
+%right PLUSEQ MINUSEQ MULTEQ DIVEQ '=' LSHIFTEQ RSHIFTEQ ANDEQ OREQ
+%right '?' ':'
+%left OROR
+%left ANDAND
+%left '|'
+%left '^'
+%left '&'
+%left EQ NE
+%left '<' '>' LE GE
+%left LSHIFT RSHIFT
+%left '+' '-'
+%left '*' '/' '%'
+
+/* Constants. */
+
+%token <string> STRING
+%token <integer> INTEGER
+
+/* Keywords. This list is taken from ldgram.y and ldlex.l in the old
+ GNU linker, with the keywords which only appear in MRI mode
+ removed. Not all these keywords are actually used in this grammar.
+ In most cases the keyword is recognized as the token name in upper
+ case. The comments indicate where this is not the case. */
+
+%token ABSOLUTE
+%token ADDR
+%token ALIGN_K /* ALIGN */
+%token ASSERT_K /* ASSERT */
+%token AS_NEEDED
+%token AT
+%token BIND
+%token BLOCK
+%token BYTE
+%token CONSTANT
+%token CONSTRUCTORS
+%token COPY
+%token CREATE_OBJECT_SYMBOLS
+%token DATA_SEGMENT_ALIGN
+%token DATA_SEGMENT_END
+%token DATA_SEGMENT_RELRO_END
+%token DEFINED
+%token DSECT
+%token ENTRY
+%token EXCLUDE_FILE
+%token EXTERN
+%token FILL
+%token FLOAT
+%token FORCE_COMMON_ALLOCATION
+%token GLOBAL /* global */
+%token GROUP
+%token HLL
+%token INCLUDE
+%token INFO
+%token INHIBIT_COMMON_ALLOCATION
+%token INPUT
+%token KEEP
+%token LENGTH /* LENGTH, l, len */
+%token LOADADDR
+%token LOCAL /* local */
+%token LONG
+%token MAP
+%token MAX_K /* MAX */
+%token MEMORY
+%token MIN_K /* MIN */
+%token NEXT
+%token NOCROSSREFS
+%token NOFLOAT
+%token NOLOAD
+%token ONLY_IF_RO
+%token ONLY_IF_RW
+%token ORIGIN /* ORIGIN, o, org */
+%token OUTPUT
+%token OUTPUT_ARCH
+%token OUTPUT_FORMAT
+%token OVERLAY
+%token PHDRS
+%token PROVIDE
+%token PROVIDE_HIDDEN
+%token QUAD
+%token SEARCH_DIR
+%token SECTIONS
+%token SEGMENT_START
+%token SHORT
+%token SIZEOF
+%token SIZEOF_HEADERS /* SIZEOF_HEADERS, sizeof_headers */
+%token SORT_BY_ALIGNMENT
+%token SORT_BY_NAME
+%token SPECIAL
+%token SQUAD
+%token STARTUP
+%token SUBALIGN
+%token SYSLIB
+%token TARGET_K /* TARGET */
+%token TRUNCATE
+%token VERSIONK /* VERSION */
+
+%%
+
+file_list:
+ file_list file_cmd
+ | /* empty */
+ ;
+
+file_cmd:
+ OUTPUT_FORMAT '(' STRING ')'
+ | GROUP
+ { script_start_group(closure); }
+ '(' input_list ')'
+ { script_end_group(closure); }
+ ;
+
+input_list:
+ input_list_element
+ | input_list opt_comma input_list_element
+ ;
+
+input_list_element:
+ STRING
+ { script_add_file(closure, $1); }
+ | AS_NEEDED
+ { script_start_as_needed(closure); }
+ '(' input_list ')'
+ { script_end_as_needed(closure); }
+ ;
+
+opt_comma:
+ ','
+ | /* empty */
+ ;
+
+%%
diff --git a/gprof/ChangeLog b/gprof/ChangeLog
index 8768a37d334b..a44279da1419 100644
--- a/gprof/ChangeLog
+++ b/gprof/ChangeLog
@@ -1,11 +1,253 @@
+2007-07-02 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * gconfig.in: Regenerate.
+ * po/gprof.pot: Regenerate.
+
+2007-06-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * aclocal.m4: Regenerated.
+ * Makefile.in: Likewise.
+
+2007-06-20 Nick Clifton <nickc@redhat.com>
+
+ * gprof.texi: Refer readers to the gcov tool if they want
+ line-by-line profiling.
+
+2007-06-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (ACLOCAL_AMFLAGS): Add -I ../config -I ../bfd.
+
+ * acinclude.m4: Removed.
+
+ * Makefile.in: Regenerated.
+ * aclocal.m4: Likewise.
+ * configure: Likewise.
+
+2007-05-24 Steve Ellcey <sje@cup.hp.com>
+
+ * Makefile.in: Regnerate.
+ * configure: Regenerate.
+ * aclocal.m4: Regenerate.
+
+2007-05-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gprof.texi: Remove orphaned "@end ignore".
+
+2007-05-22 Nick Clifton <nickc@redhat.com>
+
+ * gprof.texi: Use @copying around the copyright notice.
+
+2007-05-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * hist.c (scale_and_align_entries): Avoid C99 feature.
+
+2007-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * corefile.c (core_create_function_syms, core_create_line_syms): Don't
+ set discard_underscores.
+ * gprof.c (discard_underscores): Delete.
+ * gprof.h (discard_underscores): Delete.
+ * sym_ids.c (match): Use bfd_get_symbol_leading_char to check for
+ leading underscores.
+ * utils.c (print_name_only): Call bfd_demangle rather than
+ cplus_demangle.
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2007-04-14 Steve Ellcey <sje@cup.hp.com>
+
+ * Makefile.am: Add ACLOCAL_AMFLAGS.
+ * Makefile.in: Regenerate.
+
+2007-04-10 Vladimir Prus <vladimir@codesourcery.com>
+
+ * hist.h (struct histogram)
+ (histograms, num_histograms): New.
+ * hist.c (find_histogram, find_histogram_for_pc)
+ (read_histogram_header): New.
+ (s_lowpc, s_highpc, lowpc, highpc, hist_num_bins)
+ (hist_sample): Remove.
+ (hist_read_rec): Use the above, and handle multiple
+ histogram records with disjoint address ranges.
+ (hist_write_hist): Support several histogram records.
+ (scale_and_align_entries): Adjust for multiple histograms.
+ (hist_assign_samples_1): New.
+ (hist_assign_samples): Use the above.
+ (hist_clip_symbol_address): New.
+ * hist.h (hist_check_address)
+ (hist_clip_symbol_address): Declare.
+ * gmon_io.c (gmon_out_read, gmon_out_write): Adjust handling
+ of legacy format for multiple histogram changes.
+ * corefile.c (find_call): Check for core_text_space and
+ clip symbol address range here.
+ * vax.c (vax_find_call): Don't check for
+ core_text_space, or clip the symbol's address range here.
+ Use hist_check_address to check call's target address.
+ * sparc.c: Likewise.
+ * tahoe.c: Likewise.
+ * i386.c: Likewise.
+ * mips.c: Likewise. Also use core_text_sect->vma as the base
+ address for code accesses, just like other machine-specific
+ routines do.
+ * gprof.texi: Adjust for the new logic.
+
+2007-03-28 Richard Sandiford <richard@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+
+ * gprof.texi: Put the contents after the title page rather
+ than at the end of the document.
+
+2007-03-22 Joseph Myers <joseph@codesourcery.com>
+
+ * Makefile.am (TEXI2POD): Include $(AM_MAKEINFOFLAGS).
+ (AM_MAKEINFOFLAGS, TEXI2DVI): Define with -I ../bfd/doc.
+ * Makefile.in: Regenerate.
+ * gprof.texi: Include bfdver.texi. Report both VERSION_PACKAGE
+ and VERSION.
+
+2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (REPORT_BUGS_TO): Removed.
+ (INCLUDES): Remove -DREPORT_BUGS_TO.
+ * Makefile.in: Regenerated.
+
+ * configure.in (--with-bugurl): Removed.
+ * configure: Regenerated.
+
+2007-03-01 Joseph Myers <joseph@codesourcery.com>
+
+ * gprof.c: Include bfdver.h
+ (main): Use BFD_VERSION_STRING for version number and package
+ name.
+ * Makefile.am (PKGVERSION): Remove.
+ (INCLUDES): Update.
+ Regenerate dependencies.
+ * Makefile.in: Regenerate.
+ * configure.in (PKGVERSION): Remove.
+ * configure: Regenerate.
+
+2007-02-17 Mark Mitchell <mark@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+ Vladimir Prus <vladimir@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+
+ * configure.in (--with-pkgversion, --with-bugurl): New options.
+ * configure: Regenerate.
+ * Makefile.am (PKGVERSION, REPORT_BUGS_TO): Define.
+ (INCLUDES): Define PKGVERSION and REPORT_BUGS_TO.
+ Regenerate dependencies.
+ * Makefile.in: Regenerate.
+ * gprof.c (usage): Don't print empty REPORT_BUGS_TO.
+ (main): Include PKGVERSION in version output.
+ * gprof.h: Remove include of bin-bugs.h.
+
+2007-01-16 Ben Elliston <bje@au.ibm.com>
+
+ * corefile.c (parse_error): New function.
+ (read_function_mappings): Check calls to fscanf and report any
+ errors in parsing the mapping file.
+
+2006-12-12 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (gprof_TEXINFOS): Set.
+ (gprof.info gprof.dvi gprof.html): Delete rule.
+ * Makefile.in: Regenerated.
+
+2006-12-11 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.in: Define GENINSRC_NEVER.
+ * doc/Makefile.am (gprof.info): Remove srcdir prefix.
+ (MAINTAINERCLEANFILES): Add info file.
+ (DISTCLEANFILES): Pretend to add info file.
+ * po/Make-in (.po.gmo): Put gmo files in objdir.
+ * configure, Makefile.in: Regenerated.
+
+2006-11-27 Nick Clifton <nickc@redhat.com>
+
+ * po/ms.po: Updated Malay translation.
+
+2006-11-22 Nick Clifton <nickc@redhat.com>
+
+ * configure.in (LINGUAS): Add ms.
+ * po/ms.po: New Malay translation.
+
+2006-10-17 Bob Wilson <bob.wilson@acm.org>
+
+ * gprof.c (main): Fix option string for -r and -R.
+
+2006-10-16 Bob Wilson <bob.wilson@acm.org>
+
+ * gprof.texi (Analysis Options): Argument for -n/-N is mandatory.
+
+2006-10-16 Bob Wilson <bob.wilson@acm.org>
+
+ * gprof.c (main): Fix option string for -C, -n and -N.
+
+2006-09-26 Thiemo Seufer <ths@networkno.de>
+
+ * gprof.texi: Fix install failure.
+
+2006-09-19 Bob Wilson <bob.wilson@acm.org>
+
+ * gprof.texi: Use TeX-style quotes and em-dashes consistently.
+ Specify section names in cross references. Fix typos.
+ Omit "next", "previous" and "up" fields from @node lines.
+ (SYNOPSIS): Show map_file argument to --file-ordering.
+ (Compiling): Remove extra, truncated lines from example output.
+ (Cycles): Fix references to "called" field.
+ (Internals): Allow hyphenation between file:function names.
+ (GNU Free Documentation License): Update formatting to match fdl.texi.
+
+2006-07-24 Ralk Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * gprof.texi: Fix some typos.
+
2006-06-07 Joseph S. Myers <joseph@codesourcery.com>
* po/Make-in (pdf, ps): New dummy targets.
+2006-06-05 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/Make-in (top_builddir): Define.
+
+2006-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.in: Regenerate.
+ * gconfig.in: Regenerate.
+
+2006-05-31 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am: Replace INTLLIBS and INTLDEPS with LIBINTL
+ and LIBINTL_DEP everywhere.
+ (INCLUDES): Use @INCINTL@.
+ * acinclude.m4: Include new gettext macros.
+ * configure.in: Use ZW_GNU_GETTEXT_SISTER_DIR and AM_PO_SUBDIRS.
+ Remove local code for po/Makefile.
+ * Makefile.in, aclocal.m4, configure: Regenerated.
+
2006-05-30 Nick Clifton <nickc@redhat.com>
* po/es.po: Updated Spanish translation.
+2006-05-02 James E Wilson <wilson@specifix.com>
+
+ * gprof.c (main): When setting default output_style, add separate
+ checks for INPUT_HISTOGRAM and INPUT_CALL_GRAPH.
+
+2006-04-25 Masaki Muranaka <monaka@monami-software.com>
+
+ PR 2587
+ * Makefile.am: Add empty rule for .m -> .o build in order to work
+ around bug in gmake shipped by Apple.
+ * Makefile.in: Regenerate.
+
+2006-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * configure: Regenerate.
+
2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
* po/Make-in: Add install-html target.
diff --git a/gprof/Makefile.am b/gprof/Makefile.am
index 1b862675353f..74039372e058 100644
--- a/gprof/Makefile.am
+++ b/gprof/Makefile.am
@@ -1,6 +1,7 @@
## Process this file with automake to generate Makefile.in
AUTOMAKE_OPTIONS = cygnus
+ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd
SUFFIXES = .m
@@ -16,7 +17,9 @@ AM_CFLAGS = $(WARN_CFLAGS)
MKDEP = gcc -MM
-INCLUDES = -D_GNU_SOURCE -DDEBUG -I../bfd -I$(srcdir)/../include -I$(srcdir)/../bfd -I$(srcdir)/../intl -I../intl -I. -DLOCALEDIR="\"$(datadir)/locale\""
+INCLUDES = -D_GNU_SOURCE -DDEBUG -I../bfd -I$(srcdir)/../include \
+ -I$(srcdir)/../bfd @INCINTL@ -I. \
+ -DLOCALEDIR="\"$(datadir)/locale\""
bin_PROGRAMS = gprof
@@ -26,8 +29,8 @@ sources = basic_blocks.c call_graph.c cg_arcs.c cg_dfn.c \
search_list.c symtab.c sym_ids.c utils.c \
i386.c alpha.c vax.c tahoe.c sparc.c mips.c
gprof_SOURCES = $(sources) flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
-gprof_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a $(INTLDEPS)
-gprof_LDADD = ../bfd/libbfd.la ../libiberty/libiberty.a $(INTLLIBS)
+gprof_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a $(LIBINTL_DEP)
+gprof_LDADD = ../bfd/libbfd.la ../libiberty/libiberty.a $(LIBINTL)
noinst_HEADERS = \
basic_blocks.h call_graph.h cg_arcs.h cg_dfn.h cg_print.h \
@@ -39,6 +42,9 @@ EXTRA_DIST = $(BUILT_SOURCES) bbconv.pl $(man_MANS)
diststuff: $(BUILT_SOURCES) info $(man_MANS)
+# This empty rule is a hack against gmake patched by Apple.
+%.o:%.m
+
.m.c:
awk -f $(srcdir)/gen-c-prog.awk > ./$*.c \
FUNCTION=`(echo $*|sed -e 's,.*/,,g' -e 's/_bl//')`_blurb \
@@ -51,14 +57,16 @@ po/POTFILES.in: @MAINT@ Makefile
MANCONF = -Dman
-TEXI2POD = perl $(srcdir)/../etc/texi2pod.pl
+TEXI2POD = perl $(srcdir)/../etc/texi2pod.pl $(AM_MAKEINFOFLAGS)
POD2MAN = pod2man --center="GNU" --release="binutils-$(VERSION)" --section=1
info_TEXINFOS = gprof.texi
+gprof_TEXINFOS = config.texi
man_MANS = gprof.1
-$(srcdir)/gprof.info: gprof.texi config.texi
+AM_MAKEINFOFLAGS = -I "$(srcdir)" -I ../bfd/doc
+TEXI2DVI = texi2dvi -I "$(srcdir)" -I ../bfd/doc
config.texi:
echo "@set top_srcdir $(top_srcdir)" >> ./config.texi
@@ -174,115 +182,131 @@ dep-am: DEP
CLEANFILES = dep.sed DEP DEPA DEP1 DEP2
+MAINTAINERCLEANFILES = gprof.info
+
+# Automake 1.9 will only build info files in the objdir if they are
+# mentioned in DISTCLEANFILES. It doesn't have to be unconditional,
+# though, so we use a bogus condition.
+if GENINSRC_NEVER
+DISTCLEANFILES = gprof.info
+endif
+
# DO NOT DELETE THIS LINE -- mkdep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
basic_blocks.o: basic_blocks.c $(INCDIR)/libiberty.h \
$(INCDIR)/ansidecl.h gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
- $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h basic_blocks.h \
- corefile.h gmon_io.h gmon_out.h search_list.h source.h \
- symtab.h sym_ids.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h basic_blocks.h corefile.h gmon_io.h gmon_out.h \
+ search_list.h source.h symtab.h sym_ids.h
call_graph.o: call_graph.c gprof.h $(BFDDIR)/sysdep.h \
- $(INCDIR)/ansidecl.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
+ ../bfd/config.h $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h gconfig.h search_list.h source.h \
symtab.h cg_arcs.h call_graph.h corefile.h gmon_io.h \
gmon_out.h sym_ids.h
cg_arcs.o: cg_arcs.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
- symtab.h call_graph.h cg_arcs.h cg_dfn.h cg_print.h \
+ gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h gconfig.h search_list.h \
+ source.h symtab.h call_graph.h cg_arcs.h cg_dfn.h cg_print.h \
utils.h sym_ids.h
cg_dfn.o: cg_dfn.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
- symtab.h cg_arcs.h cg_dfn.h utils.h
+ gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h gconfig.h search_list.h \
+ source.h symtab.h cg_arcs.h cg_dfn.h utils.h
cg_print.o: cg_print.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
- symtab.h cg_arcs.h cg_print.h hist.h utils.h corefile.h
+ gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h gconfig.h search_list.h \
+ source.h symtab.h cg_arcs.h cg_print.h hist.h utils.h \
+ corefile.h
corefile.o: corefile.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
- symtab.h corefile.h
-gmon_io.o: gmon_io.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h basic_blocks.h \
- corefile.h call_graph.h gmon_io.h gmon_out.h gmon.h \
- hertz.h hist.h $(INCDIR)/libiberty.h
+ gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h gconfig.h search_list.h \
+ source.h symtab.h hist.h corefile.h
+gmon_io.o: gmon_io.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ basic_blocks.h corefile.h call_graph.h gmon_io.h gmon_out.h \
+ gmon.h hertz.h hist.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
gprof.o: gprof.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
- symtab.h basic_blocks.h call_graph.h cg_arcs.h cg_print.h \
- corefile.h gmon_io.h hertz.h hist.h sym_ids.h $(INCDIR)/demangle.h
-hertz.o: hertz.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- hertz.h
+ gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h gconfig.h ../bfd/bfdver.h \
+ search_list.h source.h symtab.h basic_blocks.h call_graph.h \
+ cg_arcs.h cg_print.h corefile.h gmon_io.h hertz.h hist.h \
+ sym_ids.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h
+hertz.o: hertz.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h hertz.h
hist.o: hist.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
- symtab.h corefile.h gmon_io.h gmon_out.h hist.h sym_ids.h \
- utils.h
-source.o: source.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/libiberty.h search_list.h source.h
+ gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h gconfig.h search_list.h \
+ source.h symtab.h corefile.h gmon_io.h gmon_out.h hist.h \
+ sym_ids.h utils.h
+source.o: source.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/filenames.h search_list.h source.h
search_list.o: search_list.c $(INCDIR)/libiberty.h \
$(INCDIR)/ansidecl.h gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
- $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h search_list.h
-symtab.o: symtab.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h
+symtab.o: symtab.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h
sym_ids.o: sym_ids.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/safe-ctype.h gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
- $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h search_list.h \
- source.h symtab.h cg_arcs.h sym_ids.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ sym_ids.h corefile.h
utils.o: utils.c $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
$(INCDIR)/ansidecl.h gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
- $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h search_list.h \
- source.h symtab.h cg_arcs.h utils.h
-i386.o: i386.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h \
- hist.h
-alpha.o: alpha.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h \
- hist.h
-vax.o: vax.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h \
- hist.h
-tahoe.o: tahoe.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h \
- hist.h
-sparc.o: sparc.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h \
- hist.h
-mips.o: mips.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h \
- hist.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ utils.h corefile.h
+i386.o: i386.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h hist.h
+alpha.o: alpha.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h hist.h
+vax.o: vax.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h hist.h
+tahoe.o: tahoe.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h hist.h
+sparc.o: sparc.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h hist.h
+mips.o: mips.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h hist.h
flat_bl.o: flat_bl.c $(INCDIR)/ansidecl.h
bsd_callg_bl.o: bsd_callg_bl.c $(INCDIR)/ansidecl.h
fsf_callg_bl.o: fsf_callg_bl.c $(INCDIR)/ansidecl.h
diff --git a/gprof/Makefile.in b/gprof/Makefile.in
index 328a3da48d77..d609fe33e1c0 100644
--- a/gprof/Makefile.in
+++ b/gprof/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -15,8 +15,6 @@
@SET_MAKE@
-SOURCES = $(gprof_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
@@ -47,12 +45,18 @@ DIST_COMMON = $(srcdir)/../config.guess $(srcdir)/../config.sub README \
$(srcdir)/gconfig.in $(srcdir)/../mkinstalldirs \
$(top_srcdir)/po/Make-in $(srcdir)/../ltmain.sh \
$(srcdir)/../config.guess $(srcdir)/../config.sub \
- $(noinst_HEADERS)
+ $(gprof_TEXINFOS) $(noinst_HEADERS)
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
- $(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/../libtool.m4 \
- $(top_srcdir)/../gettext.m4 $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/../bfd/warning.m4 \
+ $(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/gettext-sister.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/nls.m4 $(top_srcdir)/../config/po.m4 \
+ $(top_srcdir)/../config/progtest.m4 \
+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
+ $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -79,14 +83,14 @@ depcomp =
am__depfiles_maybe =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(gprof_SOURCES)
-INFO_DEPS = $(srcdir)/gprof.info
+INFO_DEPS = gprof.info
TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex
am__TEXINFO_TEX_DIR = $(top_srcdir)/../texinfo
DVIS = gprof.dvi
@@ -94,11 +98,6 @@ PDFS = gprof.pdf
PSS = gprof.ps
HTMLS = gprof.html
TEXINFOS = gprof.texi
-TEXI2DVI = `if test -f $(top_srcdir)/../texinfo/util/texi2dvi; then \
- echo $(top_srcdir)/../texinfo/util/texi2dvi; \
- else \
- echo texi2dvi; \
- fi`
TEXI2PDF = $(TEXI2DVI) --pdf --batch
MAKEINFOHTML = $(MAKEINFO) --html
AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
@@ -117,10 +116,10 @@ ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
+AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
@@ -136,25 +135,28 @@ CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
+DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
-GMOFILES = @GMOFILES@
+FGREP = @FGREP@
+GENCAT = @GENCAT@
+GENINSRC_NEVER_FALSE = @GENINSRC_NEVER_FALSE@
+GENINSRC_NEVER_TRUE = @GENINSRC_NEVER_TRUE@
GMSGFMT = @GMSGFMT@
-GT_NO = @GT_NO@
-GT_YES = @GT_YES@
-INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
+GREP = @GREP@
+INCINTL = @INCINTL@
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@
+LD = @LD@
LDFLAGS = @LDFLAGS@
+LIBINTL = @LIBINTL@
+LIBINTL_DEP = @LIBINTL_DEP@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
@@ -166,6 +168,8 @@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
NO_WERROR = @NO_WERROR@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
@@ -175,18 +179,19 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-POFILES = @POFILES@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
-USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
XGETTEXT = @XGETTEXT@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
@@ -215,10 +220,10 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-l = @l@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -233,6 +238,7 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
AUTOMAKE_OPTIONS = cygnus
+ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd
SUFFIXES = .m
SUBDIRS = po
BASEDIR = $(srcdir)/..
@@ -240,15 +246,18 @@ BFDDIR = $(BASEDIR)/bfd
INCDIR = $(BASEDIR)/include
AM_CFLAGS = $(WARN_CFLAGS)
MKDEP = gcc -MM
-INCLUDES = -D_GNU_SOURCE -DDEBUG -I../bfd -I$(srcdir)/../include -I$(srcdir)/../bfd -I$(srcdir)/../intl -I../intl -I. -DLOCALEDIR="\"$(datadir)/locale\""
+INCLUDES = -D_GNU_SOURCE -DDEBUG -I../bfd -I$(srcdir)/../include \
+ -I$(srcdir)/../bfd @INCINTL@ -I. \
+ -DLOCALEDIR="\"$(datadir)/locale\""
+
sources = basic_blocks.c call_graph.c cg_arcs.c cg_dfn.c \
cg_print.c corefile.c gmon_io.c gprof.c hertz.c hist.c source.c \
search_list.c symtab.c sym_ids.c utils.c \
i386.c alpha.c vax.c tahoe.c sparc.c mips.c
gprof_SOURCES = $(sources) flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
-gprof_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a $(INTLDEPS)
-gprof_LDADD = ../bfd/libbfd.la ../libiberty/libiberty.a $(INTLLIBS)
+gprof_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a $(LIBINTL_DEP)
+gprof_LDADD = ../bfd/libbfd.la ../libiberty/libiberty.a $(LIBINTL)
noinst_HEADERS = \
basic_blocks.h call_graph.h cg_arcs.h cg_dfn.h cg_print.h \
corefile.h gmon.h gmon_io.h gmon_out.h gprof.h hertz.h hist.h \
@@ -258,32 +267,41 @@ BUILT_SOURCES = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
EXTRA_DIST = $(BUILT_SOURCES) bbconv.pl $(man_MANS)
POTFILES = $(sources) $(noinst_HEADERS)
MANCONF = -Dman
-TEXI2POD = perl $(srcdir)/../etc/texi2pod.pl
+TEXI2POD = perl $(srcdir)/../etc/texi2pod.pl $(AM_MAKEINFOFLAGS)
POD2MAN = pod2man --center="GNU" --release="binutils-$(VERSION)" --section=1
info_TEXINFOS = gprof.texi
+gprof_TEXINFOS = config.texi
man_MANS = gprof.1
+AM_MAKEINFOFLAGS = -I "$(srcdir)" -I ../bfd/doc
+TEXI2DVI = texi2dvi -I "$(srcdir)" -I ../bfd/doc
html__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
CLEANFILES = dep.sed DEP DEPA DEP1 DEP2
+MAINTAINERCLEANFILES = gprof.info
+
+# Automake 1.9 will only build info files in the objdir if they are
+# mentioned in DISTCLEANFILES. It doesn't have to be unconditional,
+# though, so we use a bogus condition.
+@GENINSRC_NEVER_TRUE@DISTCLEANFILES = gprof.info
all: $(BUILT_SOURCES) gconfig.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
-.SUFFIXES: .m .c .dvi .html .info .lo .o .obj .pdf .ps .texi
+.SUFFIXES: .m .c .dvi .lo .o .obj .ps
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 \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --cygnus '; \
+ cd $(srcdir) && $(AUTOMAKE) --cygnus \
&& exit 0; \
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign Makefile
+ $(AUTOMAKE) --cygnus Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -377,40 +395,38 @@ clean-libtool:
distclean-libtool:
-rm -f libtool
-.texi.info:
+gprof.info: gprof.texi $(gprof_TEXINFOS)
restore=: && backupdir="$(am__leading_dot)am$$$$" && \
- am__cwd=`pwd` && cd $(srcdir) && \
rm -rf $$backupdir && mkdir $$backupdir && \
- 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; \
- cd "$$am__cwd"; \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
- -o $@ $<; \
+ -o $@ `test -f 'gprof.texi' || echo '$(srcdir)/'`gprof.texi; \
then \
rc=0; \
- cd $(srcdir); \
else \
rc=$$?; \
- cd $(srcdir) && \
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
fi; \
rm -rf $$backupdir; exit $$rc
-.texi.dvi:
+gprof.dvi: gprof.texi $(gprof_TEXINFOS)
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
- $(TEXI2DVI) $<
+ $(TEXI2DVI) -o $@ `test -f 'gprof.texi' || echo '$(srcdir)/'`gprof.texi
-.texi.pdf:
+gprof.pdf: gprof.texi $(gprof_TEXINFOS)
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
- $(TEXI2PDF) $<
+ $(TEXI2PDF) -o $@ `test -f 'gprof.texi' || echo '$(srcdir)/'`gprof.texi
-.texi.html:
+gprof.html: gprof.texi $(gprof_TEXINFOS)
rm -rf $(@:.html=.htp)
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
- -o $(@:.html=.htp) $<; \
+ -o $(@:.html=.htp) `test -f 'gprof.texi' || echo '$(srcdir)/'`gprof.texi; \
then \
rm -rf $@; \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
@@ -420,10 +436,8 @@ distclean-libtool:
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
exit 1; \
fi
-gprof.dvi: gprof.texi
-gprof.pdf: gprof.texi
-gprof.html: gprof.texi
.dvi.ps:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
$(DVIPS) -o $@ $<
uninstall-info-am:
@@ -685,11 +699,13 @@ clean-generic:
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."
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-recursive
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
@@ -799,6 +815,9 @@ uninstall-man: uninstall-man1
diststuff: $(BUILT_SOURCES) info $(man_MANS)
+# This empty rule is a hack against gmake patched by Apple.
+%.o:%.m
+
.m.c:
awk -f $(srcdir)/gen-c-prog.awk > ./$*.c \
FUNCTION=`(echo $*|sed -e 's,.*/,,g' -e 's/_bl//')`_blurb \
@@ -807,8 +826,6 @@ po/POTFILES.in: @MAINT@ Makefile
for f in $(POTFILES); do echo $$f; done | LC_COLLATE= sort > tmp \
&& mv tmp $(srcdir)/po/POTFILES.in
-$(srcdir)/gprof.info: gprof.texi config.texi
-
config.texi:
echo "@set top_srcdir $(top_srcdir)" >> ./config.texi
@@ -923,111 +940,118 @@ dep-am: DEP
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
basic_blocks.o: basic_blocks.c $(INCDIR)/libiberty.h \
$(INCDIR)/ansidecl.h gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
- $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h basic_blocks.h \
- corefile.h gmon_io.h gmon_out.h search_list.h source.h \
- symtab.h sym_ids.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h basic_blocks.h corefile.h gmon_io.h gmon_out.h \
+ search_list.h source.h symtab.h sym_ids.h
call_graph.o: call_graph.c gprof.h $(BFDDIR)/sysdep.h \
- $(INCDIR)/ansidecl.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
+ ../bfd/config.h $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h gconfig.h search_list.h source.h \
symtab.h cg_arcs.h call_graph.h corefile.h gmon_io.h \
gmon_out.h sym_ids.h
cg_arcs.o: cg_arcs.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
- symtab.h call_graph.h cg_arcs.h cg_dfn.h cg_print.h \
+ gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h gconfig.h search_list.h \
+ source.h symtab.h call_graph.h cg_arcs.h cg_dfn.h cg_print.h \
utils.h sym_ids.h
cg_dfn.o: cg_dfn.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
- symtab.h cg_arcs.h cg_dfn.h utils.h
+ gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h gconfig.h search_list.h \
+ source.h symtab.h cg_arcs.h cg_dfn.h utils.h
cg_print.o: cg_print.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
- symtab.h cg_arcs.h cg_print.h hist.h utils.h corefile.h
+ gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h gconfig.h search_list.h \
+ source.h symtab.h cg_arcs.h cg_print.h hist.h utils.h \
+ corefile.h
corefile.o: corefile.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
- symtab.h corefile.h
-gmon_io.o: gmon_io.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h basic_blocks.h \
- corefile.h call_graph.h gmon_io.h gmon_out.h gmon.h \
- hertz.h hist.h $(INCDIR)/libiberty.h
+ gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h gconfig.h search_list.h \
+ source.h symtab.h hist.h corefile.h
+gmon_io.o: gmon_io.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ basic_blocks.h corefile.h call_graph.h gmon_io.h gmon_out.h \
+ gmon.h hertz.h hist.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
gprof.o: gprof.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
- symtab.h basic_blocks.h call_graph.h cg_arcs.h cg_print.h \
- corefile.h gmon_io.h hertz.h hist.h sym_ids.h $(INCDIR)/demangle.h
-hertz.o: hertz.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- hertz.h
+ gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h gconfig.h ../bfd/bfdver.h \
+ search_list.h source.h symtab.h basic_blocks.h call_graph.h \
+ cg_arcs.h cg_print.h corefile.h gmon_io.h hertz.h hist.h \
+ sym_ids.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h
+hertz.o: hertz.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h hertz.h
hist.o: hist.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/filenames.h ../bfd/bfd.h $(INCDIR)/symcat.h \
- gconfig.h $(INCDIR)/bin-bugs.h search_list.h source.h \
- symtab.h corefile.h gmon_io.h gmon_out.h hist.h sym_ids.h \
- utils.h
-source.o: source.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- $(INCDIR)/libiberty.h search_list.h source.h
+ gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h gconfig.h search_list.h \
+ source.h symtab.h corefile.h gmon_io.h gmon_out.h hist.h \
+ sym_ids.h utils.h
+source.o: source.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/filenames.h search_list.h source.h
search_list.o: search_list.c $(INCDIR)/libiberty.h \
$(INCDIR)/ansidecl.h gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
- $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h search_list.h
-symtab.o: symtab.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h
+symtab.o: symtab.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h
sym_ids.o: sym_ids.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/safe-ctype.h gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
- $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h search_list.h \
- source.h symtab.h cg_arcs.h sym_ids.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ sym_ids.h corefile.h
utils.o: utils.c $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
$(INCDIR)/ansidecl.h gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
- $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h ../bfd/bfd.h \
- $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h search_list.h \
- source.h symtab.h cg_arcs.h utils.h
-i386.o: i386.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h \
- hist.h
-alpha.o: alpha.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h \
- hist.h
-vax.o: vax.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h \
- hist.h
-tahoe.o: tahoe.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h \
- hist.h
-sparc.o: sparc.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h \
- hist.h
-mips.o: mips.c gprof.h $(BFDDIR)/sysdep.h $(INCDIR)/ansidecl.h \
- ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
- ../bfd/bfd.h $(INCDIR)/symcat.h gconfig.h $(INCDIR)/bin-bugs.h \
- search_list.h source.h symtab.h cg_arcs.h corefile.h \
- hist.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ utils.h corefile.h
+i386.o: i386.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h hist.h
+alpha.o: alpha.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h hist.h
+vax.o: vax.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h hist.h
+tahoe.o: tahoe.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h hist.h
+sparc.o: sparc.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h hist.h
+mips.o: mips.c gprof.h $(BFDDIR)/sysdep.h ../bfd/config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ gconfig.h search_list.h source.h symtab.h cg_arcs.h \
+ corefile.h hist.h
flat_bl.o: flat_bl.c $(INCDIR)/ansidecl.h
bsd_callg_bl.o: bsd_callg_bl.c $(INCDIR)/ansidecl.h
fsf_callg_bl.o: fsf_callg_bl.c $(INCDIR)/ansidecl.h
diff --git a/gprof/acinclude.m4 b/gprof/acinclude.m4
deleted file mode 100644
index 73763e115579..000000000000
--- a/gprof/acinclude.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-sinclude(../bfd/warning.m4)
-sinclude(../libtool.m4)
-dnl The lines below arrange for aclocal not to bring libtool.m4
-dnl AM_PROG_LIBTOOL into aclocal.m4, while still arranging for automake
-dnl to add a definition of LIBTOOL to Makefile.in.
-ifelse(yes,no,[
-AC_DEFUN([AM_PROG_LIBTOOL],)
-AC_SUBST(LIBTOOL)
-])
-
-sinclude(../gettext.m4)
-ifelse(yes,no,[
-AC_DEFUN([CY_WITH_NLS],)
-AC_SUBST(INTLLIBS)
-])
diff --git a/gprof/aclocal.m4 b/gprof/aclocal.m4
index eecfff5dbb21..1a4efc4c403c 100644
--- a/gprof/aclocal.m4
+++ b/gprof/aclocal.m4
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.9.5 -*- Autoconf -*-
+# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005 Free Software Foundation, Inc.
@@ -28,7 +28,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
# 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.5])])
+ [AM_AUTOMAKE_VERSION([1.9.6])])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
@@ -468,27 +468,6 @@ AC_DEFUN([AM_PROG_INSTALL_SH],
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])])
-
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering
@@ -877,4 +856,14 @@ AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
-m4_include([acinclude.m4])
+m4_include([../bfd/warning.m4])
+m4_include([../config/depstand.m4])
+m4_include([../config/gettext-sister.m4])
+m4_include([../config/lead-dot.m4])
+m4_include([../config/nls.m4])
+m4_include([../config/po.m4])
+m4_include([../config/progtest.m4])
+m4_include([../libtool.m4])
+m4_include([../ltoptions.m4])
+m4_include([../ltsugar.m4])
+m4_include([../ltversion.m4])
diff --git a/gprof/alpha.c b/gprof/alpha.c
index b89e9ccf553d..b14e842c5ebb 100644
--- a/gprof/alpha.c
+++ b/gprof/alpha.c
@@ -104,18 +104,6 @@ alpha_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
indirect_child.cg.cyc.head = &indirect_child;
}
- if (!core_text_space)
- {
- return;
- }
- if (p_lowpc < s_lowpc)
- {
- p_lowpc = s_lowpc;
- }
- if (p_highpc > s_highpc)
- {
- p_highpc = s_highpc;
- }
DBG (CALLDEBUG, printf (_("[find_call] %s: 0x%lx to 0x%lx\n"),
parent->name, (unsigned long) p_lowpc,
(unsigned long) p_highpc));
@@ -157,7 +145,7 @@ alpha_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
*/
dest_pc = pc + 4 + (((bfd_signed_vma) (insn & 0x1fffff)
^ 0x100000) - 0x100000);
- if (dest_pc >= s_lowpc && dest_pc <= s_highpc)
+ if (hist_check_address (dest_pc))
{
child = sym_lookup (&symtab, dest_pc);
DBG (CALLDEBUG,
diff --git a/gprof/bsd_callg_bl.c b/gprof/bsd_callg_bl.c
deleted file mode 100644
index 149767421fd1..000000000000
--- a/gprof/bsd_callg_bl.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* ==> Do not modify this file!! It is created automatically
- from bsd_callg_bl.m using the gen-c-prog.awk script. <== */
-
-#include <stdio.h>
-#include "ansidecl.h"
-
-void bsd_callg_blurb (FILE *);
-void
-bsd_callg_blurb (file)
- FILE *file;
-{
- fputs ("\n", file);
- fputs ("\n", file);
- fputs ("\n", file);
- fputs ("call graph profile:\n", file);
- fputs (" The sum of self and descendents is the major sort\n", file);
- fputs (" for this listing.\n", file);
- fputs ("\n", file);
- fputs (" function entries:\n", file);
- fputs ("\n", file);
- fputs ("index the index of the function in the call graph\n", file);
- fputs (" listing, as an aid to locating it (see below).\n", file);
- fputs ("\n", file);
- fputs ("%time the percentage of the total time of the program\n", file);
- fputs (" accounted for by this function and its\n", file);
- fputs (" descendents.\n", file);
- fputs ("\n", file);
- fputs ("self the number of seconds spent in this function\n", file);
- fputs (" itself.\n", file);
- fputs ("\n", file);
- fputs ("descendents\n", file);
- fputs (" the number of seconds spent in the descendents of\n", file);
- fputs (" this function on behalf of this function.\n", file);
- fputs ("\n", file);
- fputs ("called the number of times this function is called (other\n", file);
- fputs (" than recursive calls).\n", file);
- fputs ("\n", file);
- fputs ("self the number of times this function calls itself\n", file);
- fputs (" recursively.\n", file);
- fputs ("\n", file);
- fputs ("name the name of the function, with an indication of\n", file);
- fputs (" its membership in a cycle, if any.\n", file);
- fputs ("\n", file);
- fputs ("index the index of the function in the call graph\n", file);
- fputs (" listing, as an aid to locating it.\n", file);
- fputs ("\n", file);
- fputs ("\n", file);
- fputs ("\n", file);
- fputs (" parent listings:\n", file);
- fputs ("\n", file);
- fputs ("self* the number of seconds of this function's self time\n", file);
- fputs (" which is due to calls from this parent.\n", file);
- fputs ("\n", file);
- fputs ("descendents*\n", file);
- fputs (" the number of seconds of this function's\n", file);
- fputs (" descendent time which is due to calls from this\n", file);
- fputs (" parent.\n", file);
- fputs ("\n", file);
- fputs ("called** the number of times this function is called by\n", file);
- fputs (" this parent. This is the numerator of the\n", file);
- fputs (" fraction which divides up the function's time to\n", file);
- fputs (" its parents.\n", file);
- fputs ("\n", file);
- fputs ("total* the number of times this function was called by\n", file);
- fputs (" all of its parents. This is the denominator of\n", file);
- fputs (" the propagation fraction.\n", file);
- fputs ("\n", file);
- fputs ("parents the name of this parent, with an indication of the\n", file);
- fputs (" parent's membership in a cycle, if any.\n", file);
- fputs ("\n", file);
- fputs ("index the index of this parent in the call graph\n", file);
- fputs (" listing, as an aid in locating it.\n", file);
- fputs ("\n", file);
- fputs ("\n", file);
- fputs ("\n", file);
- fputs (" children listings:\n", file);
- fputs ("\n", file);
- fputs ("self* the number of seconds of this child's self time\n", file);
- fputs (" which is due to being called by this function.\n", file);
- fputs ("\n", file);
- fputs ("descendent*\n", file);
- fputs (" the number of seconds of this child's descendent's\n", file);
- fputs (" time which is due to being called by this\n", file);
- fputs (" function.\n", file);
- fputs ("\n", file);
- fputs ("called** the number of times this child is called by this\n", file);
- fputs (" function. This is the numerator of the\n", file);
- fputs (" propagation fraction for this child.\n", file);
- fputs ("\n", file);
- fputs ("total* the number of times this child is called by all\n", file);
- fputs (" functions. This is the denominator of the\n", file);
- fputs (" propagation fraction.\n", file);
- fputs ("\n", file);
- fputs ("children the name of this child, and an indication of its\n", file);
- fputs (" membership in a cycle, if any.\n", file);
- fputs ("\n", file);
- fputs ("index the index of this child in the call graph listing,\n", file);
- fputs (" as an aid to locating it.\n", file);
- fputs ("\n", file);
- fputs ("\n", file);
- fputs ("\n", file);
- fputs (" * these fields are omitted for parents (or\n", file);
- fputs (" children) in the same cycle as the function. If\n", file);
- fputs (" the function (or child) is a member of a cycle,\n", file);
- fputs (" the propagated times and propagation denominator\n", file);
- fputs (" represent the self time and descendent time of the\n", file);
- fputs (" cycle as a whole.\n", file);
- fputs ("\n", file);
- fputs (" ** static-only parents and children are indicated\n", file);
- fputs (" by a call count of 0.\n", file);
- fputs ("\n", file);
- fputs ("\n", file);
- fputs ("\n", file);
- fputs (" cycle listings:\n", file);
- fputs (" the cycle as a whole is listed with the same\n", file);
- fputs (" fields as a function entry. Below it are listed\n", file);
- fputs (" the members of the cycle, and their contributions\n", file);
- fputs (" to the time and call counts of the cycle.\n", file);
- fputs (" \n", file);
-}
diff --git a/gprof/config.texi b/gprof/config.texi
deleted file mode 100644
index b36d901dc33b..000000000000
--- a/gprof/config.texi
+++ /dev/null
@@ -1 +0,0 @@
-@set top_srcdir .././gprof
diff --git a/gprof/configure b/gprof/configure
index 35a019bd1d84..bfc8cca980f1 100755
--- a/gprof/configure
+++ b/gprof/configure
@@ -241,6 +241,155 @@ IFS=" $as_nl"
$as_unset CDPATH
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+ ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<_LT_EOF
+$*
+_LT_EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+ if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+ then
+ break
+ fi
+ done
+ fi
+
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+ else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$ECHO" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ ECHO='print -r'
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+ else
+ # Try using printf.
+ ECHO='printf %s\n'
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "$0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ ECHO=echo
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
# Name of the host.
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
# so uname gets run too.
@@ -309,7 +458,7 @@ ac_includes_default="\
# 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 CPP EGREP ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT USE_INCLUDED_LIBINTL CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB INCLUDE_LOCALE_H GT_NO GT_YES MKINSTALLDIRS l MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT WARN_CFLAGS NO_WERROR datarootdir docdir htmldir LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir 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 LIBTOOL SED EGREP FGREP GREP LD DUMPBIN ac_ct_DUMPBIN NM LN_S AR ac_ct_AR RANLIB ac_ct_RANLIB lt_ECHO CPP USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT MKINSTALLDIRS MSGFMT MSGMERGE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT GENINSRC_NEVER_TRUE GENINSRC_NEVER_FALSE WARN_CFLAGS NO_WERROR datarootdir docdir htmldir LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -852,22 +1001,25 @@ Optional Features:
--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
+ --enable-shared[=PKGS]
+ build shared libraries [default=yes]
+ --enable-static[=PKGS]
+ build static libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
--disable-nls do not use Native Language Support
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
- --enable-werror treat compile warnings as errors
- --enable-build-warnings Enable build-time compiler warnings
+ --enable-werror treat compile warnings as errors
+ --enable-build-warnings enable build-time compiler warnings
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-included-gettext use the GNU gettext library included here
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
Some influential environment variables:
CC C compiler command
@@ -3071,73 +3223,264 @@ fi
+
+
+macro_version='2.1a'
+macro_revision='1.2435'
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Set options
+
+enable_dlopen=no
+
+
+enable_win32_dll=no
+
+
# 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
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
enable_shared=yes
fi;
+
+
+
+
+
+
+
+
# Check whether --enable-static 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
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
enable_static=yes
fi;
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+ withval="$with_pic"
+ pic_mode="$withval"
+else
+ pic_mode=default
+fi;
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
# Check whether --enable-fast-install 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
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
enable_fast_install=yes
fi;
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
+if test "${lt_cv_path_SED+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+
+fi
+
+SED=$lt_cv_path_SED
+
+echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+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 fgrep" >&5
+echo $ECHO_N "checking for fgrep... $ECHO_C" >&6
+if test "${ac_cv_prog_fgrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo 'ab*c' | (grep -F 'ab*c') >/dev/null 2>&1
+ then ac_cv_prog_fgrep='grep -F'
+ else ac_cv_prog_fgrep='fgrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_fgrep" >&5
+echo "${ECHO_T}$ac_cv_prog_fgrep" >&6
+ FGREP=$ac_cv_prog_fgrep
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
# Check whether --with-gnu-ld or --without-gnu-ld was given.
if test "${with_gnu_ld+set}" = set; then
withval="$with_gnu_ld"
@@ -3148,8 +3491,8 @@ 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
+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -3159,12 +3502,12 @@ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
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%/%"`
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
done
test -z "$LD" && LD="$ac_prog"
;;
@@ -3188,22 +3531,26 @@ 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-:}"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
lt_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
+ # but apparently some variants of GNU ld 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
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
test "$with_gnu_ld" != no && break
- else
+ ;;
+ *)
test "$with_gnu_ld" != yes && break
- fi
+ ;;
+ esac
fi
done
- IFS="$ac_save_ifs"
+ IFS="$lt_save_ifs"
else
lt_cv_path_LD="$LD" # Let the user override the test with a path.
fi
@@ -3225,32 +3572,31 @@ 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
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
lt_cv_prog_gnu_ld=yes
-else
+ ;;
+*)
lt_cv_prog_gnu_ld=no
-fi
+ ;;
+esac
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
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
+echo $ECHO_N "checking for BSD- or MS-compatible name lister (nm)... $ECHO_C" >&6
if test "${lt_cv_path_NM+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -3258,35 +3604,173 @@ else
# 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
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
fi
- fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+ 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_DUMPBIN+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DUMPBIN="$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
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+echo "${ECHO_T}$DUMPBIN" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$DUMPBIN" && break
done
- IFS="$ac_save_ifs"
- test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+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_DUMPBIN+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
+echo "${ECHO_T}$ac_ct_DUMPBIN" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+test -n "$ac_ct_DUMPBIN" || ac_ct_DUMPBIN=":"
+
+ DUMPBIN=$ac_ct_DUMPBIN
fi
-NM="$lt_cv_path_NM"
-echo "$as_me:$LINENO: result: $NM" >&5
-echo "${ECHO_T}$NM" >&6
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+echo $ECHO_N "checking the name lister ($NM) interface... $ECHO_C" >&6
+if test "${lt_cv_nm_interface+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:3759: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:3762: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:3765: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
+echo "${ECHO_T}$lt_cv_nm_interface" >&6
echo "$as_me:$LINENO: checking whether ln -s works" >&5
echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
@@ -3299,8 +3783,234 @@ else
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
+# 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
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # 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 all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`getconf ARG_MAX 2> /dev/null`
+ if test -n $lt_cv_sys_max_cmd_len; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ 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
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+echo $ECHO_N "checking whether the shell understands some XSI constructs... $ECHO_C" >&6
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+echo "$as_me:$LINENO: result: $xsi_shell" >&5
+echo "${ECHO_T}$xsi_shell" >&6
+
+
+echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+echo $ECHO_N "checking whether the shell understands \"+=\"... $ECHO_C" >&6
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+echo "$as_me:$LINENO: result: $lt_shell_append" >&5
+echo "${ECHO_T}$lt_shell_append" >&6
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+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
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6
if test "${lt_cv_deplibs_check_method+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -3313,13 +4023,13 @@ lt_cv_deplibs_check_method='unknown'
# `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.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
# If you have `file' or equivalent on your system and you're not sure
# whether `pass_all' will *always* work, you probably want this one.
case $host_os in
-aix*)
+aix4* | aix5*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -3327,39 +4037,42 @@ beos*)
lt_cv_deplibs_check_method=pass_all
;;
-bsdi4*)
+bsdi[45]*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
lt_cv_file_magic_cmd='/usr/bin/file -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
-cygwin* | mingw* |pw32*)
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
;;
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
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
@@ -3373,92 +4086,116 @@ gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-hpux10.20*|hpux11*)
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
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"
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
;;
*)
- 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"
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
;;
esac
- lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
lt_cv_deplibs_check_method=pass_all
;;
# This must be Linux ELF.
-linux-gnu*)
+linux* | k*bsd*-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]+$'
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
else
- lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
fi
;;
-newsos6)
+newos6*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
osf3* | osf4* | osf5*)
- # 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*)
+rdos*)
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*)
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
lt_cv_deplibs_check_method=pass_all
;;
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+sysv4 | sysv4.3*)
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*`
;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
fi
@@ -3466,222 +4203,29 @@ 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
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
-# 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
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
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
+if test "${ac_cv_prog_AR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -3690,7 +4234,7 @@ do
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"
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -3699,27 +4243,27 @@ 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
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&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
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
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
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -3728,30 +4272,43 @@ do
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"
+ ac_cv_prog_ac_ct_AR="ar"
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=":"
+ test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
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
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
else
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
- RANLIB=$ac_ct_RANLIB
+ AR=$ac_ct_AR
else
- RANLIB="$ac_cv_prog_RANLIB"
+ AR="$ac_cv_prog_AR"
fi
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
@@ -3832,345 +4389,23 @@ else
STRIP="$ac_cv_prog_STRIP"
fi
+test -z "$STRIP" && STRIP=:
-# 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 3869 "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
-
-
-
-
-
-
-
- ac_config_headers="$ac_config_headers gconfig.h:gconfig.in"
-
-
-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
+ # 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_CC+set}" = set; then
+if test "${ac_cv_prog_RANLIB+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.
+ 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
@@ -4179,7 +4414,7 @@ do
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"
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -4188,27 +4423,27 @@ 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
+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_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
+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_CC+set}" = set; then
+if test "${ac_cv_prog_ac_ct_RANLIB+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.
+ 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
@@ -4217,810 +4452,485 @@ do
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"
+ 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_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
+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
- CC=$ac_ct_CC
+ RANLIB=$ac_ct_RANLIB
else
- CC="$ac_cv_prog_CC"
+ RANLIB="$ac_cv_prog_RANLIB"
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
+test -z "$RANLIB" && RANLIB=:
-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
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
fi
-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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+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 ()
-{
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
- ;
- 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
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
-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"
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
else
- CFLAGS=
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
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];
+ # Check to see that the pipe works correctly.
+ pipe_works=no
-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;
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
}
-_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
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ 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); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ (exit $ac_status); }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
ac_status=$?
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
+ (exit $ac_status); } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
-fi
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-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
+ cat <<_LT_EOF >> conftest.$ac_ext
-# 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 ()
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
{
-exit (42);
- ;
- return 0;
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
}
-_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
+#endif
-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;
+#ifdef __cplusplus
}
-_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
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 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
+ (exit $ac_status); } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
done
-rm -f conftest*
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
+
fi
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+ echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-# 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'
-for ac_func in setmode
-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
+
+
+
+
+
+
+
+
+# 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 && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$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.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line 4820 "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*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$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-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ 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
- cat >conftest.$ac_ext <<_ACEOF
+ 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. */
-/* 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;
}
@@ -5047,107 +4957,51 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ lt_cv_cc_needs_belf=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+lt_cv_cc_needs_belf=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
+ 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
-done
-
-
-ALL_LINGUAS="fr tr sv es id da pt_BR de vi rw ga"
-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
+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
-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
+ ;;
+sparc*-*solaris*)
+ # 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
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *) LD="${LD-ld} -64" ;;
+ esac
+ ;;
+ esac
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
+ rm -rf conftest*
+ ;;
+esac
- RANLIB=$ac_ct_RANLIB
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
+need_locks="$enable_libtool_lock"
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -5384,21 +5238,6 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
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
@@ -5565,9 +5404,23 @@ _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
+# 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
@@ -5576,60 +5429,9 @@ _ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+$ac_includes_default
-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;
-}
+#include <$ac_header>
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
@@ -5653,44 +5455,45 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_c_const=yes
+ eval "$as_ac_Header=yes"
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_c_const=no
+eval "$as_ac_Header=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
+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
-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
+done
+
+
+
+for ac_header in dlfcn.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
- 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
+$ac_includes_default
+#include <$ac_header>
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
@@ -5714,67 +5517,1385 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_c_inline=$ac_kw; break
+ 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
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
fi
-echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
-echo "${ECHO_T}$ac_cv_c_inline" >&6
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+if test "${lt_cv_objdir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6
+objdir=$lt_cv_objdir
-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
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ 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_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ 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_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ 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
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:5920: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:5924: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ fi
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ lt_prog_compiler_pic='-qnocommon'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
;;
esac
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6242: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:6246: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
+
+if test x"$lt_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
-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
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
+if test "${lt_prog_compiler_static_works+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ lt_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_static_works=yes
+ fi
+ else
+ lt_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
+
+if test x"$lt_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6347: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:6351: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6402: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:6406: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ fi
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ ld_shlibs=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ *)
+ tmp_sharedflag='-shared' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >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>
+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
+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
@@ -5788,59 +6909,62 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_Header=yes"
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
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
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >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
+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
@@ -5854,59 +6978,287 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_type_off_t=yes
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
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
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
-cat >>confdefs.h <<_ACEOF
-#define off_t long
-_ACEOF
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ fi
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
-fi
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
-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
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[012])
+ allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ ;;
+ esac
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ whole_archive_flag_spec=''
+ link_all_deplibs=yes
+ if test "$GCC" = yes ; then
+ if test "${lt_cv_apple_cc_single_mod+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;
-}
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi-module to the
+ # link flags.
+ echo "int foo(void){return 1;}" > conftest.c
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib ${wl}-single_module conftest.c
+ if test -f libconftest.dylib; then
+ lt_cv_apple_cc_single_mod=yes
+ rm libconftest.dylib
+ fi
+ rm conftest.$ac_ext
+ fi
+fi
+
+ output_verbose_link_cmd=echo
+ if test "X$lt_cv_apple_cc_single_mod" = Xyes ; then
+ archive_cmds='$CC -dynamiclib $single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $single_module -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ module_expsym_cmds='sed -e "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd=echo
+ archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`$ECHO $rpath/$soname` $verstring'
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ module_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat >conftest.$ac_ext <<_ACEOF
+int foo(void) {}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (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
@@ -5920,51 +7272,939 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_type_size_t=yes
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
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
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned
-_ACEOF
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
-fi
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
-# 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
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > 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); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc=no
+ else
+ archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+withGCC=$GCC
+if test "$withGCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ if test "$host_cpu" = m68k; then
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ else
+ dynamic_linker=no
+ fi
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $withGCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
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;
}
@@ -5991,62 +8231,418 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_working_alloca_h=yes
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir"; then
+ shlibpath_overrides_runpath=yes
+fi
+
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
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
fi
-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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
fi
-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
+
+
+
+
+
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+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
+/* 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 dlopen ();
int
main ()
{
-char *p = (char *) alloca (1);
+dlopen ();
;
return 0;
}
@@ -6073,73 +8669,35 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_func_alloca_works=yes
+ ac_cv_lib_dl_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_func_alloca_works=no
+ac_cv_lib_dl_dlopen=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_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
-
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
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
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
-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 "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -6148,12 +8706,12 @@ _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.
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
+#define shl_load innocuous_shl_load
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
+ which can conflict with char shl_load (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
@@ -6163,7 +8721,7 @@ cat >>conftest.$ac_ext <<_ACEOF
# include <assert.h>
#endif
-#undef $ac_func
+#undef shl_load
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
@@ -6172,14 +8730,14 @@ 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 ();
+char shl_load ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
choke me
#else
-char (*f) () = $ac_func;
+char (*f) () = shl_load;
#endif
#ifdef __cplusplus
}
@@ -6188,7 +8746,7 @@ char (*f) () = $ac_func;
int
main ()
{
-return f != $ac_func;
+return f != shl_load;
;
return 0;
}
@@ -6215,126 +8773,53 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_func_shl_load=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_func_shl_load=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
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
else
- if test "$cross_compiling" = yes; then
- ac_cv_c_stack_direction=0
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+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;
-}
+/* 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 shl_load ();
int
main ()
{
- exit (find_stack_direction () < 0);
+shl_load ();
+ ;
+ return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
+rm -f conftest.$ac_objext 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
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -6348,122 +8833,31 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_header_compiler=yes
+ ac_cv_lib_dld_shl_load=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ac_cv_lib_dld_shl_load=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
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
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 "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -6472,12 +8866,12 @@ _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.
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
+#define dlopen innocuous_dlopen
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
+ which can conflict with char dlopen (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
@@ -6487,7 +8881,7 @@ cat >>conftest.$ac_ext <<_ACEOF
# include <assert.h>
#endif
-#undef $ac_func
+#undef dlopen
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
@@ -6496,14 +8890,14 @@ 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 ();
+char dlopen ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
choke me
#else
-char (*f) () = $ac_func;
+char (*f) () = dlopen;
#endif
#ifdef __cplusplus
}
@@ -6512,7 +8906,7 @@ char (*f) () = $ac_func;
int
main ()
{
-return f != $ac_func;
+return f != dlopen;
;
return 0;
}
@@ -6539,239 +8933,53 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_func_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_func_dlopen=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
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
else
- if test "$cross_compiling" = yes; then
- ac_cv_func_mmap_fixed_mapped=no
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+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 */
+/* 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 dlopen ();
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);
+dlopen ();
+ ;
+ return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
+rm -f conftest.$ac_objext 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
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -6785,181 +8993,53 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_header_compiler=yes
+ ac_cv_lib_dl_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ac_cv_lib_dl_dlopen=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
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
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 "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+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
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+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
-
+char dlopen ();
int
main ()
{
-return f != $ac_func;
+dlopen ();
;
return 0;
}
@@ -6986,84 +9066,47 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_lib_svld_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_lib_svld_dlopen=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: `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 "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+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
-
+char dld_link ();
int
main ()
{
-return f != $ac_func;
+dld_link ();
;
return 0;
}
@@ -7090,39 +9133,742 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_lib_dld_dld_link=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_lib_dld_dld_link=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: `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
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 9199 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}
+_LT_EOF
+ 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); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 9299 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}
+_LT_EOF
+ 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); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+ echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+ ac_config_headers="$ac_config_headers gconfig.h:gconfig.in"
+
+
+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
- if test "${ac_cv_func_stpcpy}" = "yes"; then
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_STPCPY 1
-_ACEOF
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
- 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
- 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
+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
@@ -7131,18 +9877,21 @@ _ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <locale.h>
+
int
main ()
{
-return LC_MESSAGES
+#ifndef __GNUC__
+ choke me
+#endif
+
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+rm -f conftest.$ac_objext
+if { (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
@@ -7156,87 +9905,48 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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
- am_cv_val_LC_MESSAGES=yes
+ ac_compiler_gnu=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
+ac_compiler_gnu=no
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
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
-# 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
+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
- # 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
+ 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>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
@@ -7260,124 +9970,104 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_header_compiler=yes
+ ac_cv_prog_cc_g=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ac_cv_prog_cc_g=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
+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
- ac_cpp_err=
+ CFLAGS="-g"
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
-
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
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 "$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
- cat >conftest.$ac_ext <<_ACEOF
+ 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 <libintl.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 (int) gettext ("")
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[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
+# 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
@@ -7391,58 +10081,94 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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
- gt_cv_func_gettext_libc=yes
+ ac_cv_prog_cc_stdc=$ac_arg
+break
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
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
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"
+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. */
-
-/* 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 ();
+$ac_declaration
+#include <stdlib.h>
int
main ()
{
-bindtextdomain ();
+exit (42);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+rm -f conftest.$ac_objext
+if { (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
@@ -7456,49 +10182,38 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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_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
+continue
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
+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 ()
{
-return (int) gettext ("")
+exit (42);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+rm -f conftest.$ac_objext
+if { (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
@@ -7512,73 +10227,121 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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
- gt_cv_func_gettext_libintl=yes
+ break
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
+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
- fi
-
- if test "$gt_cv_func_gettext_libc" = "yes" \
- || test "$gt_cv_func_gettext_libintl" = "yes"; then
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETTEXT 1
-_ACEOF
+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
- # 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
+# 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
- case "$MSGFMT" in
- /*)
- ac_cv_path_MSGFMT="$MSGFMT" # 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=.
+ # 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/* ) ;;
*)
- 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"
- ;;
+ # 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
-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
+ 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
- if test "$MSGFMT" != "no"; then
+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'
+
+
-for ac_func in dcgettext
+for ac_func in setmode
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -7679,150 +10442,140 @@ _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
+ALL_LINGUAS="fr tr sv es id da pt_BR de vi rw ga ms"
+# If we haven't got the data from the intl directory,
+# assume NLS is disabled.
+USE_NLS=no
+LIBINTL=
+LIBINTL_DEP=
+INCINTL=
+XGETTEXT=
+GMSGFMT=
+POSUB=
-if test -n "$GMSGFMT"; then
- echo "$as_me:$LINENO: result: $GMSGFMT" >&5
-echo "${ECHO_T}$GMSGFMT" >&6
-else
+if test -f ../intl/config.intl; then
+ . ../intl/config.intl
+fi
+echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
+if test x"$USE_NLS" != xyes; then
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
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+
+ echo "$as_me:$LINENO: checking for catalogs to be installed" >&5
+echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6
+ # Look for .po and .gmo files in the source directory.
+ CATALOGS=
+ XLINGUAS=
+ for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
+ # If there aren't any .gmo files the shell will give us the
+ # literal string "../path/to/srcdir/po/*.gmo" which has to be
+ # weeded out.
+ case "$cat" in *\**)
+ continue;;
+ esac
+ # The quadruple backslash is collapsed to a double backslash
+ # by the backticks, then collapsed again by the double quotes,
+ # leaving us with one backslash in the sed expression (right
+ # before the dot that mustn't act as a wildcard).
+ cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
+ lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
+ # The user is allowed to set LINGUAS to a list of languages to
+ # install catalogs for. If it's empty that means "all of them."
+ if test "x$LINGUAS" = x; then
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ else
+ case "$LINGUAS" in *$lang*)
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ ;;
+ esac
fi
done
- 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
+ LINGUAS="$XLINGUAS"
+ echo "$as_me:$LINENO: result: $LINGUAS" >&5
+echo "${ECHO_T}$LINGUAS" >&6
- 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
+ DATADIRNAME=share
+
+ INSTOBJEXT=.mo
+
+ GENCAT=gencat
+
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
+ MKINSTALLDIRS=
+ if test -n "$ac_aux_dir"; then
+ case "$ac_aux_dir" in
+ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+ esac
+ fi
+ if test -z "$MKINSTALLDIRS"; then
+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+ fi
+
+
+ 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
- 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.
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
@@ -7830,27 +10583,31 @@ 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.
- ;;
+ [\\/]* | ?:[\\/]*)
+ 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"
- ;;
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
esac
fi
MSGFMT="$ac_cv_path_MSGFMT"
-if test -n "$MSGFMT"; then
+if test "$MSGFMT" != ":"; then
echo "$as_me:$LINENO: result: $MSGFMT" >&5
echo "${ECHO_T}$MSGFMT" >&6
else
@@ -7858,7 +10615,7 @@ else
echo "${ECHO_T}no" >&6
fi
- # Extract the first word of "gmsgfmt", so it can be a program name with args.
+ # 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
@@ -7898,7 +10655,37 @@ else
echo "${ECHO_T}no" >&6
fi
- # Extract the first word of "xgettext", so it can be a program name with args.
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
@@ -7906,27 +10693,31 @@ 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.
- ;;
+ [\\/]* | ?:[\\/]*)
+ 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"
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
- ;;
+ ;;
esac
fi
XGETTEXT="$ac_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
+if test "$XGETTEXT" != ":"; then
echo "$as_me:$LINENO: result: $XGETTEXT" >&5
echo "${ECHO_T}$XGETTEXT" >&6
else
@@ -7934,282 +10725,103 @@ else
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
+ rm -f messages.po
- 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
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
else
- ac_cpp_err=
+ PATH_SEPARATOR=:
fi
-else
- ac_cpp_err=yes
+ rm -f conf$$.sh
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
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
+rm -f conf$$.file
-# 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
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; 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_MSGMERGE+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
;;
- 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
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
;;
esac
-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
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+echo "${ECHO_T}$MSGMERGE" >&6
else
- msgformat=xopen
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+ if test "$GMSGFMT" != ":"; then
+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+ echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6
+ GMSGFMT=":"
+ fi
+ 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 "$XGETTEXT" != ":"; then
+ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
+echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
+ XGETTEXT=":"
+ fi
+ rm -f messages.po
+ fi
+ ac_config_commands="$ac_config_commands default-1"
- 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
echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
@@ -8238,6 +10850,16 @@ fi
+if false; then
+ GENINSRC_NEVER_TRUE=
+ GENINSRC_NEVER_FALSE='#'
+else
+ GENINSRC_NEVER_TRUE='#'
+ GENINSRC_NEVER_FALSE=
+fi
+
+
+
for ac_header in sys/gmon_out.h
do
@@ -8511,8 +11133,6 @@ 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
@@ -8625,6 +11245,13 @@ 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
+if test -z "${GENINSRC_NEVER_TRUE}" && test -z "${GENINSRC_NEVER_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"GENINSRC_NEVER\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"GENINSRC_NEVER\" 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
@@ -9061,6 +11688,253 @@ cat >>$CONFIG_STATUS <<_ACEOF
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+ ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+ # from automake.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+
_ACEOF
@@ -9073,7 +11947,8 @@ do
"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" ;;
+ "libtool" ) CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
"gconfig.h" ) CONFIG_HEADERS="$CONFIG_HEADERS gconfig.h:gconfig.in" ;;
*) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
@@ -9210,36 +12085,42 @@ 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,@LIBTOOL@,$LIBTOOL,;t t
+s,@SED@,$SED,;t t
+s,@EGREP@,$EGREP,;t t
+s,@FGREP@,$FGREP,;t t
+s,@GREP@,$GREP,;t t
+s,@LD@,$LD,;t t
+s,@DUMPBIN@,$DUMPBIN,;t t
+s,@ac_ct_DUMPBIN@,$ac_ct_DUMPBIN,;t t
+s,@NM@,$NM,;t t
s,@LN_S@,$LN_S,;t t
+s,@AR@,$AR,;t t
+s,@ac_ct_AR@,$ac_ct_AR,;t t
s,@RANLIB@,$RANLIB,;t t
s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s,@LIBTOOL@,$LIBTOOL,;t t
+s,@lt_ECHO@,$lt_ECHO,;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,@LIBINTL@,$LIBINTL,;t t
+s,@LIBINTL_DEP@,$LIBINTL_DEP,;t t
+s,@INCINTL@,$INCINTL,;t t
s,@XGETTEXT@,$XGETTEXT,;t t
-s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t
+s,@GMSGFMT@,$GMSGFMT,;t t
+s,@POSUB@,$POSUB,;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,@GENCAT@,$GENCAT,;t t
+s,@CATOBJEXT@,$CATOBJEXT,;t t
s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
-s,@l@,$l,;t t
+s,@MSGFMT@,$MSGFMT,;t t
+s,@MSGMERGE@,$MSGMERGE,;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,@GENINSRC_NEVER_TRUE@,$GENINSRC_NEVER_TRUE,;t t
+s,@GENINSRC_NEVER_FALSE@,$GENINSRC_NEVER_FALSE,;t t
s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t
s,@NO_WERROR@,$NO_WERROR,;t t
s,@datarootdir@,$datarootdir,;t t
@@ -9929,7 +12810,656 @@ echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
done
done
;;
- default ) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;;
+ libtool )
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# 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, a copy can be downloaded from
+# http://www.gnu.org/copyleft/gpl.html, or by writing to the Free
+# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1+=\$2"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1=\$$1\$2"
+}
+_LT_EOF
+ ;;
+ esac
+
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+ ;;
+ default-1 )
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ GMOFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
esac
done
_ACEOF
diff --git a/gprof/configure.in b/gprof/configure.in
index 5f0f59f96e82..95c2b8640c23 100644
--- a/gprof/configure.in
+++ b/gprof/configure.in
@@ -24,10 +24,12 @@ AC_PROG_INSTALL
AC_CHECK_FUNCS(setmode)
-ALL_LINGUAS="fr tr sv es id da pt_BR de vi rw ga"
-CY_GNU_GETTEXT
+ALL_LINGUAS="fr tr sv es id da pt_BR de vi rw ga ms"
+ZW_GNU_GETTEXT_SISTER_DIR
+AM_PO_SUBDIRS
AM_MAINTAINER_MODE
+AM_CONDITIONAL(GENINSRC_NEVER, false)
AC_EXEEXT
AC_CHECK_HEADERS(sys/gmon_out.h)
@@ -50,5 +52,4 @@ AC_SUBST(docdir)
AC_SUBST(htmldir)
AC_CONFIG_FILES([Makefile po/Makefile.in:po/Make-in])
-AC_CONFIG_COMMANDS([default],[[sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile]],[[]])
AC_OUTPUT
diff --git a/gprof/corefile.c b/gprof/corefile.c
index a8620efc45f4..a078d61c8933 100644
--- a/gprof/corefile.c
+++ b/gprof/corefile.c
@@ -25,6 +25,7 @@
#include "search_list.h"
#include "source.h"
#include "symtab.h"
+#include "hist.h"
#include "corefile.h"
bfd *core_bfd;
@@ -53,6 +54,13 @@ extern void sparc_find_call (Sym *, bfd_vma, bfd_vma);
extern void mips_find_call (Sym *, bfd_vma, bfd_vma);
static void
+parse_error (const char *filename)
+{
+ fprintf (stderr, _("%s: unable to parse mapping file %s.\n"), whoami, filename);
+ done (1);
+}
+
+static void
read_function_mappings (const char *filename)
{
FILE *file = fopen (filename, "r");
@@ -74,21 +82,21 @@ read_function_mappings (const char *filename)
matches = fscanf (file, "%[^\n:]", dummy);
if (!matches)
- {
- fprintf (stderr, _("%s: unable to parse mapping file %s.\n"),
- whoami, filename);
- done (1);
- }
+ parse_error (filename);
/* Just skip messages about files with no symbols. */
if (!strncmp (dummy, "No symbols in ", 14))
{
- fscanf (file, "\n");
+ matches = fscanf (file, "\n");
+ if (matches == EOF)
+ parse_error (filename);
continue;
}
/* Don't care what else is on this line at this point. */
- fscanf (file, "%[^\n]\n", dummy);
+ matches = fscanf (file, "%[^\n]\n", dummy);
+ if (!matches)
+ parse_error (filename);
count++;
}
@@ -108,16 +116,14 @@ read_function_mappings (const char *filename)
matches = fscanf (file, "%[^\n:]", dummy);
if (!matches)
- {
- fprintf (stderr, _("%s: unable to parse mapping file %s.\n"),
- whoami, filename);
- done (1);
- }
+ parse_error (filename);
/* Just skip messages about files with no symbols. */
if (!strncmp (dummy, "No symbols in ", 14))
{
- fscanf (file, "\n");
+ matches = fscanf (file, "\n");
+ if (matches == EOF)
+ parse_error (filename);
continue;
}
@@ -126,7 +132,9 @@ read_function_mappings (const char *filename)
strcpy (symbol_map[count].file_name, dummy);
/* Now we need the function name. */
- fscanf (file, "%[^\n]\n", dummy);
+ matches = fscanf (file, "%[^\n]\n", dummy);
+ if (!matches)
+ parse_error (filename);
tmp = strrchr (dummy, ' ') + 1;
symbol_map[count].function_name = xmalloc (strlen (tmp) + 1);
strcpy (symbol_map[count].function_name, tmp);
@@ -262,6 +270,11 @@ core_get_text_space (bfd *cbfd)
void
find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
{
+ if (core_text_space == 0)
+ return;
+
+ hist_clip_symbol_address (&p_lowpc, &p_highpc);
+
switch (bfd_get_arch (core_bfd))
{
case bfd_arch_i386:
@@ -568,12 +581,6 @@ core_create_function_syms ()
else
max_vma = MAX (symtab.limit->addr, max_vma);
- /* If we see "main" without an initial '_', we assume names
- are *not* prefixed by '_'. */
- if (symtab.limit->name[0] == 'm' && discard_underscores
- && strcmp (symtab.limit->name, "main") == 0)
- discard_underscores = 0;
-
DBG (AOUTDEBUG, printf ("[core_create_function_syms] %ld %s 0x%lx\n",
(long) (symtab.limit - symtab.base),
symtab.limit->name,
@@ -733,12 +740,6 @@ core_create_line_syms ()
prev = ltab.limit;
- /* If we see "main" without an initial '_', we assume names
- are *not* prefixed by '_'. */
- if (ltab.limit->name[0] == 'm' && discard_underscores
- && strcmp (ltab.limit->name, "main") == 0)
- discard_underscores = 0;
-
DBG (AOUTDEBUG, printf ("[core_create_line_syms] %lu %s 0x%lx\n",
(unsigned long) (ltab.limit - ltab.base),
ltab.limit->name,
diff --git a/gprof/flat_bl.c b/gprof/flat_bl.c
deleted file mode 100644
index 8bfe80b91ee1..000000000000
--- a/gprof/flat_bl.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ==> Do not modify this file!! It is created automatically
- from flat_bl.m using the gen-c-prog.awk script. <== */
-
-#include <stdio.h>
-#include "ansidecl.h"
-
-void flat_blurb (FILE *);
-void
-flat_blurb (file)
- FILE *file;
-{
- fputs ("\n", file);
- fputs (" % the percentage of the total running time of the\n", file);
- fputs ("time program used by this function.\n", file);
- fputs ("\n", file);
- fputs ("cumulative a running sum of the number of seconds accounted\n", file);
- fputs (" seconds for by this function and those listed above it.\n", file);
- fputs ("\n", file);
- fputs (" self the number of seconds accounted for by this\n", file);
- fputs ("seconds function alone. This is the major sort for this\n", file);
- fputs (" listing.\n", file);
- fputs ("\n", file);
- fputs ("calls the number of times this function was invoked, if\n", file);
- fputs (" this function is profiled, else blank.\n", file);
- fputs (" \n", file);
- fputs (" self the average number of milliseconds spent in this\n", file);
- fputs ("ms/call function per call, if this function is profiled,\n", file);
- fputs (" else blank.\n", file);
- fputs ("\n", file);
- fputs (" total the average number of milliseconds spent in this\n", file);
- fputs ("ms/call function and its descendents per call, if this \n", file);
- fputs (" function is profiled, else blank.\n", file);
- fputs ("\n", file);
- fputs ("name the name of the function. This is the minor sort\n", file);
- fputs (" for this listing. The index shows the location of\n", file);
- fputs (" the function in the gprof listing. If the index is\n", file);
- fputs (" in parenthesis it shows where it would appear in\n", file);
- fputs (" the gprof listing if it were to be printed.\n", file);
-}
diff --git a/gprof/fsf_callg_bl.c b/gprof/fsf_callg_bl.c
deleted file mode 100644
index e298de24262a..000000000000
--- a/gprof/fsf_callg_bl.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* ==> Do not modify this file!! It is created automatically
- from fsf_callg_bl.m using the gen-c-prog.awk script. <== */
-
-#include <stdio.h>
-#include "ansidecl.h"
-
-void fsf_callg_blurb (FILE *);
-void
-fsf_callg_blurb (file)
- FILE *file;
-{
- fputs ("\n", file);
- fputs (" This table describes the call tree of the program, and was sorted by\n", file);
- fputs (" the total amount of time spent in each function and its children.\n", file);
- fputs ("\n", file);
- fputs (" Each entry in this table consists of several lines. The line with the\n", file);
- fputs (" index number at the left hand margin lists the current function.\n", file);
- fputs (" The lines above it list the functions that called this function,\n", file);
- fputs (" and the lines below it list the functions this one called.\n", file);
- fputs (" This line lists:\n", file);
- fputs (" index A unique number given to each element of the table.\n", file);
- fputs (" Index numbers are sorted numerically.\n", file);
- fputs (" The index number is printed next to every function name so\n", file);
- fputs (" it is easier to look up where the function in the table.\n", file);
- fputs ("\n", file);
- fputs (" % time This is the percentage of the `total' time that was spent\n", file);
- fputs (" in this function and its children. Note that due to\n", file);
- fputs (" different viewpoints, functions excluded by options, etc,\n", file);
- fputs (" these numbers will NOT add up to 100%.\n", file);
- fputs ("\n", file);
- fputs (" self This is the total amount of time spent in this function.\n", file);
- fputs ("\n", file);
- fputs (" children This is the total amount of time propagated into this\n", file);
- fputs (" function by its children.\n", file);
- fputs ("\n", file);
- fputs (" called This is the number of times the function was called.\n", file);
- fputs (" If the function called itself recursively, the number\n", file);
- fputs (" only includes non-recursive calls, and is followed by\n", file);
- fputs (" a `+' and the number of recursive calls.\n", file);
- fputs ("\n", file);
- fputs (" name The name of the current function. The index number is\n", file);
- fputs (" printed after it. If the function is a member of a\n", file);
- fputs (" cycle, the cycle number is printed between the\n", file);
- fputs (" function's name and the index number.\n", file);
- fputs ("\n", file);
- fputs ("\n", file);
- fputs (" For the function's parents, the fields have the following meanings:\n", file);
- fputs ("\n", file);
- fputs (" self This is the amount of time that was propagated directly\n", file);
- fputs (" from the function into this parent.\n", file);
- fputs ("\n", file);
- fputs (" children This is the amount of time that was propagated from\n", file);
- fputs (" the function's children into this parent.\n", file);
- fputs ("\n", file);
- fputs (" called This is the number of times this parent called the\n", file);
- fputs (" function `/' the total number of times the function\n", file);
- fputs (" was called. Recursive calls to the function are not\n", file);
- fputs (" included in the number after the `/'.\n", file);
- fputs ("\n", file);
- fputs (" name This is the name of the parent. The parent's index\n", file);
- fputs (" number is printed after it. If the parent is a\n", file);
- fputs (" member of a cycle, the cycle number is printed between\n", file);
- fputs (" the name and the index number.\n", file);
- fputs ("\n", file);
- fputs (" If the parents of the function cannot be determined, the word\n", file);
- fputs (" `<spontaneous>' is printed in the `name' field, and all the other\n", file);
- fputs (" fields are blank.\n", file);
- fputs ("\n", file);
- fputs (" For the function's children, the fields have the following meanings:\n", file);
- fputs ("\n", file);
- fputs (" self This is the amount of time that was propagated directly\n", file);
- fputs (" from the child into the function.\n", file);
- fputs ("\n", file);
- fputs (" children This is the amount of time that was propagated from the\n", file);
- fputs (" child's children to the function.\n", file);
- fputs ("\n", file);
- fputs (" called This is the number of times the function called\n", file);
- fputs (" this child `/' the total number of times the child\n", file);
- fputs (" was called. Recursive calls by the child are not\n", file);
- fputs (" listed in the number after the `/'.\n", file);
- fputs ("\n", file);
- fputs (" name This is the name of the child. The child's index\n", file);
- fputs (" number is printed after it. If the child is a\n", file);
- fputs (" member of a cycle, the cycle number is printed\n", file);
- fputs (" between the name and the index number.\n", file);
- fputs ("\n", file);
- fputs (" If there are any cycles (circles) in the call graph, there is an\n", file);
- fputs (" entry for the cycle-as-a-whole. This entry shows who called the\n", file);
- fputs (" cycle (as parents) and the members of the cycle (as children.)\n", file);
- fputs (" The `+' recursive calls entry shows the number of function calls that\n", file);
- fputs (" were internal to the cycle, and the calls entry for each member shows,\n", file);
- fputs (" for that member, how many times it was called from other members of\n", file);
- fputs (" the cycle.\n", file);
- fputs ("\n", file);
-}
diff --git a/gprof/gconfig.in b/gprof/gconfig.in
index 48951acb6d70..579750ccef4d 100644
--- a/gprof/gconfig.in
+++ b/gprof/gconfig.in
@@ -1,77 +1,21 @@
/* gconfig.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 */
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
#undef ENABLE_NLS
-/* 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
-
/* Is the prototype for getopt in <unistd.h> in the expected format? */
#undef HAVE_DECL_GETOPT
-/* 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 <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
/* 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 <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 `setenv' function. */
-#undef HAVE_SETENV
-
-/* Define to 1 if you have the `setlocale' function. */
-#undef HAVE_SETLOCALE
-
/* Define to 1 if you have the `setmode' function. */
#undef HAVE_SETMODE
@@ -81,15 +25,6 @@
/* 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
@@ -99,9 +34,6 @@
/* Define to 1 if you have the <sys/gmon_out.h> header file. */
#undef HAVE_SYS_GMON_OUT_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
@@ -111,17 +43,9 @@
/* 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
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#undef LT_OBJDIR
/* Name of package */
#undef PACKAGE
@@ -141,31 +65,8 @@
/* 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
/* Version number of package */
#undef VERSION
-
-/* 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/gprof/gmon_io.c b/gprof/gmon_io.c
index e56ab7a36958..1abf427bafc8 100644
--- a/gprof/gmon_io.c
+++ b/gprof/gmon_io.c
@@ -388,10 +388,10 @@ gmon_out_read (const char *filename)
int samp_bytes, header_size = 0;
unsigned long count;
bfd_vma from_pc, self_pc;
- static struct hdr h;
UNIT raw_bin_count;
struct hdr tmp;
unsigned int version;
+ unsigned int hist_num_bins;
/* Information from a gmon.out file is in two parts: an array of
sampling hits within pc ranges, and the arcs. */
@@ -430,7 +430,7 @@ gmon_out_read (const char *filename)
if (gmon_io_read_32 (ifp, &profrate))
goto bad_gmon_file;
- if (!s_highpc)
+ if (!histograms)
hz = profrate;
else if (hz != (int) profrate)
{
@@ -480,35 +480,37 @@ gmon_out_read (const char *filename)
done (1);
}
- if (s_highpc && (tmp.low_pc != h.low_pc
- || tmp.high_pc != h.high_pc || tmp.ncnt != h.ncnt))
+ samp_bytes = tmp.ncnt - header_size;
+ hist_num_bins = samp_bytes / sizeof (UNIT);
+ if (histograms && (tmp.low_pc != histograms->lowpc
+ || tmp.high_pc != histograms->highpc
+ || (hist_num_bins != histograms->num_bins)))
{
fprintf (stderr, _("%s: incompatible with first gmon file\n"),
filename);
done (1);
}
- h = tmp;
- s_lowpc = (bfd_vma) h.low_pc;
- s_highpc = (bfd_vma) h.high_pc;
- lowpc = (bfd_vma) h.low_pc / sizeof (UNIT);
- highpc = (bfd_vma) h.high_pc / sizeof (UNIT);
- samp_bytes = h.ncnt - header_size;
- hist_num_bins = samp_bytes / sizeof (UNIT);
+ if (!histograms)
+ {
+ histograms = xmalloc (sizeof (struct histogram));
+ histograms->lowpc = tmp.low_pc;
+ histograms->highpc = tmp.high_pc;
+ histograms->num_bins = hist_num_bins;
+ histograms->sample = xmalloc (hist_num_bins * sizeof (int));
+ memset (histograms->sample, 0,
+ hist_num_bins * sizeof (int));
+ }
DBG (SAMPLEDEBUG,
printf ("[gmon_out_read] lowpc 0x%lx highpc 0x%lx ncnt %d\n",
- (unsigned long) h.low_pc, (unsigned long) h.high_pc,
- h.ncnt);
- printf ("[gmon_out_read] s_lowpc 0x%lx s_highpc 0x%lx\n",
- (unsigned long) s_lowpc, (unsigned long) s_highpc);
- printf ("[gmon_out_read] lowpc 0x%lx highpc 0x%lx\n",
- (unsigned long) lowpc, (unsigned long) highpc);
+ (unsigned long) tmp.low_pc, (unsigned long) tmp.high_pc,
+ tmp.ncnt);
printf ("[gmon_out_read] samp_bytes %d hist_num_bins %d\n",
samp_bytes, hist_num_bins));
/* Make sure that we have sensible values. */
- if (samp_bytes < 0 || lowpc > highpc)
+ if (samp_bytes < 0 || histograms->lowpc > histograms->highpc)
{
fprintf (stderr,
_("%s: file '%s' does not appear to be in gmon.out format\n"),
@@ -519,14 +521,6 @@ gmon_out_read (const char *filename)
if (hist_num_bins)
++nhist;
- if (!hist_sample)
- {
- hist_sample =
- (int *) xmalloc (hist_num_bins * sizeof (hist_sample[0]));
-
- memset (hist_sample, 0, hist_num_bins * sizeof (hist_sample[0]));
- }
-
for (i = 0; i < hist_num_bins; ++i)
{
if (fread (raw_bin_count, sizeof (raw_bin_count), 1, ifp) != 1)
@@ -537,7 +531,8 @@ gmon_out_read (const char *filename)
done (1);
}
- hist_sample[i] += bfd_get_16 (core_bfd, (bfd_byte *) raw_bin_count);
+ histograms->sample[i]
+ += bfd_get_16 (core_bfd, (bfd_byte *) raw_bin_count);
}
/* The rest of the file consists of a bunch of
@@ -684,9 +679,10 @@ gmon_out_write (const char *filename)
/* Write the parts of the headers that are common to both the
old BSD and 4.4BSD formats. */
- if (gmon_io_write_vma (ofp, s_lowpc)
- || gmon_io_write_vma (ofp, s_highpc)
- || gmon_io_write_32 (ofp, hist_num_bins * sizeof (UNIT) + hdrsize))
+ if (gmon_io_write_vma (ofp, histograms->lowpc)
+ || gmon_io_write_vma (ofp, histograms->highpc)
+ || gmon_io_write_32 (ofp, histograms->num_bins
+ * sizeof (UNIT) + hdrsize))
{
perror (filename);
done (1);
@@ -714,9 +710,9 @@ gmon_out_write (const char *filename)
}
/* Dump the samples. */
- for (i = 0; i < hist_num_bins; ++i)
+ for (i = 0; i < histograms->num_bins; ++i)
{
- bfd_put_16 (core_bfd, (bfd_vma) hist_sample[i],
+ bfd_put_16 (core_bfd, (bfd_vma) histograms->sample[i],
(bfd_byte *) &raw_bin_count[0]);
if (fwrite (&raw_bin_count[0], sizeof (raw_bin_count), 1, ofp) != 1)
{
diff --git a/gprof/gprof.1 b/gprof/gprof.1
deleted file mode 100644
index 40fa6147d8fa..000000000000
--- a/gprof/gprof.1
+++ /dev/null
@@ -1,742 +0,0 @@
-.\" 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 "GPROF 1"
-.TH GPROF 1 "2006-04-16" "binutils-2.16.92" "GNU"
-.SH "NAME"
-gprof \- display call graph profile data
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-gprof [ \-[abcDhilLrsTvwxyz] ] [ \-[ACeEfFJnNOpPqQZ][\fIname\fR] ]
- [ \-I \fIdirs\fR ] [ \-d[\fInum\fR] ] [ \-k \fIfrom/to\fR ]
- [ \-m \fImin-count\fR ] [ \-R \fImap_file\fR ] [ \-t \fItable-length\fR ]
- [ \-\-[no\-]annotated\-source[=\fIname\fR] ]
- [ \-\-[no\-]exec\-counts[=\fIname\fR] ]
- [ \-\-[no\-]flat\-profile[=\fIname\fR] ] [ \-\-[no\-]graph[=\fIname\fR] ]
- [ \-\-[no\-]time=\fIname\fR] [ \-\-all\-lines ] [ \-\-brief ]
- [ \-\-debug[=\fIlevel\fR] ] [ \-\-function\-ordering ]
- [ \-\-file\-ordering ] [ \-\-directory\-path=\fIdirs\fR ]
- [ \-\-display\-unused\-functions ] [ \-\-file\-format=\fIname\fR ]
- [ \-\-file\-info ] [ \-\-help ] [ \-\-line ] [ \-\-min\-count=\fIn\fR ]
- [ \-\-no\-static ] [ \-\-print\-path ] [ \-\-separate\-files ]
- [ \-\-static\-call\-graph ] [ \-\-sum ] [ \-\-table\-length=\fIlen\fR ]
- [ \-\-traditional ] [ \-\-version ] [ \-\-width=\fIn\fR ]
- [ \-\-ignore\-non\-functions ] [ \-\-demangle[=\fI\s-1STYLE\s0\fR] ]
- [ \-\-no\-demangle ] [ \fIimage-file\fR ] [ \fIprofile-file\fR ... ]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\f(CW\*(C`gprof\*(C'\fR produces an execution profile of C, Pascal, or Fortran77
-programs. The effect of called routines is incorporated in the profile
-of each caller. The profile data is taken from the call graph profile file
-(\fIgmon.out\fR default) which is created by programs
-that are compiled with the \fB\-pg\fR option of
-\&\f(CW\*(C`cc\*(C'\fR, \f(CW\*(C`pc\*(C'\fR, and \f(CW\*(C`f77\*(C'\fR.
-The \fB\-pg\fR option also links in versions of the library routines
-that are compiled for profiling. \f(CW\*(C`Gprof\*(C'\fR reads the given object
-file (the default is \f(CW\*(C`a.out\*(C'\fR) and establishes the relation between
-its symbol table and the call graph profile from \fIgmon.out\fR.
-If more than one profile file is specified, the \f(CW\*(C`gprof\*(C'\fR
-output shows the sum of the profile information in the given profile files.
-.PP
-\&\f(CW\*(C`Gprof\*(C'\fR calculates the amount of time spent in each routine.
-Next, these times are propagated along the edges of the call graph.
-Cycles are discovered, and calls into a cycle are made to share the time
-of the cycle.
-.PP
-Several forms of output are available from the analysis.
-.PP
-The \fIflat profile\fR shows how much time your program spent in each function,
-and how many times that function was called. If you simply want to know
-which functions burn most of the cycles, it is stated concisely here.
-.PP
-The \fIcall graph\fR shows, for each function, which functions called it, which
-other functions it called, and how many times. There is also an estimate
-of how much time was spent in the subroutines of each function. This can
-suggest places where you might try to eliminate function calls that use a
-lot of time.
-.PP
-The \fIannotated source\fR listing is a copy of the program's
-source code, labeled with the number of times each line of the
-program was executed.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-These options specify which of several output formats
-\&\f(CW\*(C`gprof\*(C'\fR should produce.
-.PP
-Many of these options take an optional \fIsymspec\fR to specify
-functions to be included or excluded. These options can be
-specified multiple times, with different symspecs, to include
-or exclude sets of symbols.
-.PP
-Specifying any of these options overrides the default (\fB\-p \-q\fR),
-which prints a flat profile and call graph analysis
-for all functions.
-.ie n .IP """\-A[\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-A[\f(CIsymspec\f(CW]\fR" 4
-.IX Item "-A[symspec]"
-.PD 0
-.ie n .IP """\-\-annotated\-source[=\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-\-annotated\-source[=\f(CIsymspec\f(CW]\fR" 4
-.IX Item "--annotated-source[=symspec]"
-.PD
-The \fB\-A\fR option causes \f(CW\*(C`gprof\*(C'\fR to print annotated source code.
-If \fIsymspec\fR is specified, print output only for matching symbols.
-.ie n .IP """\-b""" 4
-.el .IP "\f(CW\-b\fR" 4
-.IX Item "-b"
-.PD 0
-.ie n .IP """\-\-brief""" 4
-.el .IP "\f(CW\-\-brief\fR" 4
-.IX Item "--brief"
-.PD
-If the \fB\-b\fR option is given, \f(CW\*(C`gprof\*(C'\fR doesn't print the
-verbose blurbs that try to explain the meaning of all of the fields in
-the tables. This is useful if you intend to print out the output, or
-are tired of seeing the blurbs.
-.ie n .IP """\-C[\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-C[\f(CIsymspec\f(CW]\fR" 4
-.IX Item "-C[symspec]"
-.PD 0
-.ie n .IP """\-\-exec\-counts[=\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-\-exec\-counts[=\f(CIsymspec\f(CW]\fR" 4
-.IX Item "--exec-counts[=symspec]"
-.PD
-The \fB\-C\fR option causes \f(CW\*(C`gprof\*(C'\fR to
-print a tally of functions and the number of times each was called.
-If \fIsymspec\fR is specified, print tally only for matching symbols.
-.Sp
-If the profile data file contains basic-block count records, specifying
-the \fB\-l\fR option, along with \fB\-C\fR, will cause basic-block
-execution counts to be tallied and displayed.
-.ie n .IP """\-i""" 4
-.el .IP "\f(CW\-i\fR" 4
-.IX Item "-i"
-.PD 0
-.ie n .IP """\-\-file\-info""" 4
-.el .IP "\f(CW\-\-file\-info\fR" 4
-.IX Item "--file-info"
-.PD
-The \fB\-i\fR option causes \f(CW\*(C`gprof\*(C'\fR to display summary information
-about the profile data file(s) and then exit. The number of histogram,
-call graph, and basic-block count records is displayed.
-.ie n .IP """\-I \f(CIdirs\f(CW""" 4
-.el .IP "\f(CW\-I \f(CIdirs\f(CW\fR" 4
-.IX Item "-I dirs"
-.PD 0
-.ie n .IP """\-\-directory\-path=\f(CIdirs\f(CW""" 4
-.el .IP "\f(CW\-\-directory\-path=\f(CIdirs\f(CW\fR" 4
-.IX Item "--directory-path=dirs"
-.PD
-The \fB\-I\fR option specifies a list of search directories in
-which to find source files. Environment variable \fI\s-1GPROF_PATH\s0\fR
-can also be used to convey this information.
-Used mostly for annotated source output.
-.ie n .IP """\-J[\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-J[\f(CIsymspec\f(CW]\fR" 4
-.IX Item "-J[symspec]"
-.PD 0
-.ie n .IP """\-\-no\-annotated\-source[=\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-\-no\-annotated\-source[=\f(CIsymspec\f(CW]\fR" 4
-.IX Item "--no-annotated-source[=symspec]"
-.PD
-The \fB\-J\fR option causes \f(CW\*(C`gprof\*(C'\fR not to
-print annotated source code.
-If \fIsymspec\fR is specified, \f(CW\*(C`gprof\*(C'\fR prints annotated source,
-but excludes matching symbols.
-.ie n .IP """\-L""" 4
-.el .IP "\f(CW\-L\fR" 4
-.IX Item "-L"
-.PD 0
-.ie n .IP """\-\-print\-path""" 4
-.el .IP "\f(CW\-\-print\-path\fR" 4
-.IX Item "--print-path"
-.PD
-Normally, source filenames are printed with the path
-component suppressed. The \fB\-L\fR option causes \f(CW\*(C`gprof\*(C'\fR
-to print the full pathname of
-source filenames, which is determined
-from symbolic debugging information in the image file
-and is relative to the directory in which the compiler
-was invoked.
-.ie n .IP """\-p[\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-p[\f(CIsymspec\f(CW]\fR" 4
-.IX Item "-p[symspec]"
-.PD 0
-.ie n .IP """\-\-flat\-profile[=\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-\-flat\-profile[=\f(CIsymspec\f(CW]\fR" 4
-.IX Item "--flat-profile[=symspec]"
-.PD
-The \fB\-p\fR option causes \f(CW\*(C`gprof\*(C'\fR to print a flat profile.
-If \fIsymspec\fR is specified, print flat profile only for matching symbols.
-.ie n .IP """\-P[\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-P[\f(CIsymspec\f(CW]\fR" 4
-.IX Item "-P[symspec]"
-.PD 0
-.ie n .IP """\-\-no\-flat\-profile[=\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-\-no\-flat\-profile[=\f(CIsymspec\f(CW]\fR" 4
-.IX Item "--no-flat-profile[=symspec]"
-.PD
-The \fB\-P\fR option causes \f(CW\*(C`gprof\*(C'\fR to suppress printing a flat profile.
-If \fIsymspec\fR is specified, \f(CW\*(C`gprof\*(C'\fR prints a flat profile,
-but excludes matching symbols.
-.ie n .IP """\-q[\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-q[\f(CIsymspec\f(CW]\fR" 4
-.IX Item "-q[symspec]"
-.PD 0
-.ie n .IP """\-\-graph[=\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-\-graph[=\f(CIsymspec\f(CW]\fR" 4
-.IX Item "--graph[=symspec]"
-.PD
-The \fB\-q\fR option causes \f(CW\*(C`gprof\*(C'\fR to print the call graph analysis.
-If \fIsymspec\fR is specified, print call graph only for matching symbols
-and their children.
-.ie n .IP """\-Q[\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-Q[\f(CIsymspec\f(CW]\fR" 4
-.IX Item "-Q[symspec]"
-.PD 0
-.ie n .IP """\-\-no\-graph[=\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-\-no\-graph[=\f(CIsymspec\f(CW]\fR" 4
-.IX Item "--no-graph[=symspec]"
-.PD
-The \fB\-Q\fR option causes \f(CW\*(C`gprof\*(C'\fR to suppress printing the
-call graph.
-If \fIsymspec\fR is specified, \f(CW\*(C`gprof\*(C'\fR prints a call graph,
-but excludes matching symbols.
-.ie n .IP """\-t""" 4
-.el .IP "\f(CW\-t\fR" 4
-.IX Item "-t"
-.PD 0
-.ie n .IP """\-\-table\-length=\f(CInum\f(CW""" 4
-.el .IP "\f(CW\-\-table\-length=\f(CInum\f(CW\fR" 4
-.IX Item "--table-length=num"
-.PD
-The \fB\-t\fR option causes the \fInum\fR most active source lines in
-each source file to be listed when source annotation is enabled. The
-default is 10.
-.ie n .IP """\-y""" 4
-.el .IP "\f(CW\-y\fR" 4
-.IX Item "-y"
-.PD 0
-.ie n .IP """\-\-separate\-files""" 4
-.el .IP "\f(CW\-\-separate\-files\fR" 4
-.IX Item "--separate-files"
-.PD
-This option affects annotated source output only.
-Normally, \f(CW\*(C`gprof\*(C'\fR prints annotated source files
-to standard\-output. If this option is specified,
-annotated source for a file named \fIpath/\fIfilename\fI\fR
-is generated in the file \fI\fIfilename\fI\-ann\fR. If the underlying
-filesystem would truncate \fI\fIfilename\fI\-ann\fR so that it
-overwrites the original \fI\fIfilename\fI\fR, \f(CW\*(C`gprof\*(C'\fR generates
-annotated source in the file \fI\fIfilename\fI.ann\fR instead (if the
-original file name has an extension, that extension is \fIreplaced\fR
-with \fI.ann\fR).
-.ie n .IP """\-Z[\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-Z[\f(CIsymspec\f(CW]\fR" 4
-.IX Item "-Z[symspec]"
-.PD 0
-.ie n .IP """\-\-no\-exec\-counts[=\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-\-no\-exec\-counts[=\f(CIsymspec\f(CW]\fR" 4
-.IX Item "--no-exec-counts[=symspec]"
-.PD
-The \fB\-Z\fR option causes \f(CW\*(C`gprof\*(C'\fR not to
-print a tally of functions and the number of times each was called.
-If \fIsymspec\fR is specified, print tally, but exclude matching symbols.
-.ie n .IP """\-r""" 4
-.el .IP "\f(CW\-r\fR" 4
-.IX Item "-r"
-.PD 0
-.ie n .IP """\-\-function\-ordering""" 4
-.el .IP "\f(CW\-\-function\-ordering\fR" 4
-.IX Item "--function-ordering"
-.PD
-The \fB\-\-function\-ordering\fR option causes \f(CW\*(C`gprof\*(C'\fR to print a
-suggested function ordering for the program based on profiling data.
-This option suggests an ordering which may improve paging, tlb and
-cache behavior for the program on systems which support arbitrary
-ordering of functions in an executable.
-.Sp
-The exact details of how to force the linker to place functions
-in a particular order is system dependent and out of the scope of this
-manual.
-.ie n .IP """\-R \f(CImap_file\f(CW""" 4
-.el .IP "\f(CW\-R \f(CImap_file\f(CW\fR" 4
-.IX Item "-R map_file"
-.PD 0
-.ie n .IP """\-\-file\-ordering \f(CImap_file\f(CW""" 4
-.el .IP "\f(CW\-\-file\-ordering \f(CImap_file\f(CW\fR" 4
-.IX Item "--file-ordering map_file"
-.PD
-The \fB\-\-file\-ordering\fR option causes \f(CW\*(C`gprof\*(C'\fR to print a
-suggested .o link line ordering for the program based on profiling data.
-This option suggests an ordering which may improve paging, tlb and
-cache behavior for the program on systems which do not support arbitrary
-ordering of functions in an executable.
-.Sp
-Use of the \fB\-a\fR argument is highly recommended with this option.
-.Sp
-The \fImap_file\fR argument is a pathname to a file which provides
-function name to object file mappings. The format of the file is similar to
-the output of the program \f(CW\*(C`nm\*(C'\fR.
-.Sp
-.Vb 8
-\& c\-parse.o:00000000 T yyparse
-\& c\-parse.o:00000004 C yyerrflag
-\& c\-lang.o:00000000 T maybe_objc_method_name
-\& c\-lang.o:00000000 T print_lang_statistics
-\& c\-lang.o:00000000 T recognize_objc_keyword
-\& c\-decl.o:00000000 T print_lang_identifier
-\& c\-decl.o:00000000 T print_lang_type
-\& ...
-.Ve
-.Sp
-To create a \fImap_file\fR with \s-1GNU\s0 \f(CW\*(C`nm\*(C'\fR, type a command like
-\&\f(CW\*(C`nm \-\-extern\-only \-\-defined\-only \-v \-\-print\-file\-name program\-name\*(C'\fR.
-.ie n .IP """\-T""" 4
-.el .IP "\f(CW\-T\fR" 4
-.IX Item "-T"
-.PD 0
-.ie n .IP """\-\-traditional""" 4
-.el .IP "\f(CW\-\-traditional\fR" 4
-.IX Item "--traditional"
-.PD
-The \fB\-T\fR option causes \f(CW\*(C`gprof\*(C'\fR to print its output in
-\&\*(L"traditional\*(R" \s-1BSD\s0 style.
-.ie n .IP """\-w \f(CIwidth\f(CW""" 4
-.el .IP "\f(CW\-w \f(CIwidth\f(CW\fR" 4
-.IX Item "-w width"
-.PD 0
-.ie n .IP """\-\-width=\f(CIwidth\f(CW""" 4
-.el .IP "\f(CW\-\-width=\f(CIwidth\f(CW\fR" 4
-.IX Item "--width=width"
-.PD
-Sets width of output lines to \fIwidth\fR.
-Currently only used when printing the function index at the bottom
-of the call graph.
-.ie n .IP """\-x""" 4
-.el .IP "\f(CW\-x\fR" 4
-.IX Item "-x"
-.PD 0
-.ie n .IP """\-\-all\-lines""" 4
-.el .IP "\f(CW\-\-all\-lines\fR" 4
-.IX Item "--all-lines"
-.PD
-This option affects annotated source output only.
-By default, only the lines at the beginning of a basic-block
-are annotated. If this option is specified, every line in
-a basic-block is annotated by repeating the annotation for the
-first line. This behavior is similar to \f(CW\*(C`tcov\*(C'\fR's \fB\-a\fR.
-.ie n .IP """\-\-demangle[=\f(CIstyle\f(CW]""" 4
-.el .IP "\f(CW\-\-demangle[=\f(CIstyle\f(CW]\fR" 4
-.IX Item "--demangle[=style]"
-.PD 0
-.ie n .IP """\-\-no\-demangle""" 4
-.el .IP "\f(CW\-\-no\-demangle\fR" 4
-.IX Item "--no-demangle"
-.PD
-These options control whether \*(C+ symbol names should be demangled when
-printing output. The default is to demangle symbols. The
-\&\f(CW\*(C`\-\-no\-demangle\*(C'\fR option may be used to turn off demangling. Different
-compilers have different mangling styles. The optional demangling style
-argument can be used to choose an appropriate demangling style for your
-compiler.
-.Sh "Analysis Options"
-.IX Subsection "Analysis Options"
-.ie n .IP """\-a""" 4
-.el .IP "\f(CW\-a\fR" 4
-.IX Item "-a"
-.PD 0
-.ie n .IP """\-\-no\-static""" 4
-.el .IP "\f(CW\-\-no\-static\fR" 4
-.IX Item "--no-static"
-.PD
-The \fB\-a\fR option causes \f(CW\*(C`gprof\*(C'\fR to suppress the printing of
-statically declared (private) functions. (These are functions whose
-names are not listed as global, and which are not visible outside the
-file/function/block where they were defined.) Time spent in these
-functions, calls to/from them, etc, will all be attributed to the
-function that was loaded directly before it in the executable file.
-This option affects both the flat profile and the call graph.
-.ie n .IP """\-c""" 4
-.el .IP "\f(CW\-c\fR" 4
-.IX Item "-c"
-.PD 0
-.ie n .IP """\-\-static\-call\-graph""" 4
-.el .IP "\f(CW\-\-static\-call\-graph\fR" 4
-.IX Item "--static-call-graph"
-.PD
-The \fB\-c\fR option causes the call graph of the program to be
-augmented by a heuristic which examines the text space of the object
-file and identifies function calls in the binary machine code.
-Since normal call graph records are only generated when functions are
-entered, this option identifies children that could have been called,
-but never were. Calls to functions that were not compiled with
-profiling enabled are also identified, but only if symbol table
-entries are present for them.
-Calls to dynamic library routines are typically \fInot\fR found
-by this option.
-Parents or children identified via this heuristic
-are indicated in the call graph with call counts of \fB0\fR.
-.ie n .IP """\-D""" 4
-.el .IP "\f(CW\-D\fR" 4
-.IX Item "-D"
-.PD 0
-.ie n .IP """\-\-ignore\-non\-functions""" 4
-.el .IP "\f(CW\-\-ignore\-non\-functions\fR" 4
-.IX Item "--ignore-non-functions"
-.PD
-The \fB\-D\fR option causes \f(CW\*(C`gprof\*(C'\fR to ignore symbols which
-are not known to be functions. This option will give more accurate
-profile data on systems where it is supported (Solaris and \s-1HPUX\s0 for
-example).
-.ie n .IP """\-k \f(CIfrom\f(CW/\f(CIto\f(CW""" 4
-.el .IP "\f(CW\-k \f(CIfrom\f(CW/\f(CIto\f(CW\fR" 4
-.IX Item "-k from/to"
-The \fB\-k\fR option allows you to delete from the call graph any arcs from
-symbols matching symspec \fIfrom\fR to those matching symspec \fIto\fR.
-.ie n .IP """\-l""" 4
-.el .IP "\f(CW\-l\fR" 4
-.IX Item "-l"
-.PD 0
-.ie n .IP """\-\-line""" 4
-.el .IP "\f(CW\-\-line\fR" 4
-.IX Item "--line"
-.PD
-The \fB\-l\fR option enables line-by-line profiling, which causes
-histogram hits to be charged to individual source code lines,
-instead of functions.
-If the program was compiled with basic-block counting enabled,
-this option will also identify how many times each line of
-code was executed.
-While line-by-line profiling can help isolate where in a large function
-a program is spending its time, it also significantly increases
-the running time of \f(CW\*(C`gprof\*(C'\fR, and magnifies statistical
-inaccuracies.
-.ie n .IP """\-m \f(CInum\f(CW""" 4
-.el .IP "\f(CW\-m \f(CInum\f(CW\fR" 4
-.IX Item "-m num"
-.PD 0
-.ie n .IP """\-\-min\-count=\f(CInum\f(CW""" 4
-.el .IP "\f(CW\-\-min\-count=\f(CInum\f(CW\fR" 4
-.IX Item "--min-count=num"
-.PD
-This option affects execution count output only.
-Symbols that are executed less than \fInum\fR times are suppressed.
-.ie n .IP """\-n[\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-n[\f(CIsymspec\f(CW]\fR" 4
-.IX Item "-n[symspec]"
-.PD 0
-.ie n .IP """\-\-time[=\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-\-time[=\f(CIsymspec\f(CW]\fR" 4
-.IX Item "--time[=symspec]"
-.PD
-The \fB\-n\fR option causes \f(CW\*(C`gprof\*(C'\fR, in its call graph analysis,
-to only propagate times for symbols matching \fIsymspec\fR.
-.ie n .IP """\-N[\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-N[\f(CIsymspec\f(CW]\fR" 4
-.IX Item "-N[symspec]"
-.PD 0
-.ie n .IP """\-\-no\-time[=\f(CIsymspec\f(CW]""" 4
-.el .IP "\f(CW\-\-no\-time[=\f(CIsymspec\f(CW]\fR" 4
-.IX Item "--no-time[=symspec]"
-.PD
-The \fB\-n\fR option causes \f(CW\*(C`gprof\*(C'\fR, in its call graph analysis,
-not to propagate times for symbols matching \fIsymspec\fR.
-.ie n .IP """\-z""" 4
-.el .IP "\f(CW\-z\fR" 4
-.IX Item "-z"
-.PD 0
-.ie n .IP """\-\-display\-unused\-functions""" 4
-.el .IP "\f(CW\-\-display\-unused\-functions\fR" 4
-.IX Item "--display-unused-functions"
-.PD
-If you give the \fB\-z\fR option, \f(CW\*(C`gprof\*(C'\fR will mention all
-functions in the flat profile, even those that were never called, and
-that had no time spent in them. This is useful in conjunction with the
-\&\fB\-c\fR option for discovering which routines were never called.
-.Sh "Miscellaneous Options"
-.IX Subsection "Miscellaneous Options"
-.ie n .IP """\-d[\f(CInum\f(CW]""" 4
-.el .IP "\f(CW\-d[\f(CInum\f(CW]\fR" 4
-.IX Item "-d[num]"
-.PD 0
-.ie n .IP """\-\-debug[=\f(CInum\f(CW]""" 4
-.el .IP "\f(CW\-\-debug[=\f(CInum\f(CW]\fR" 4
-.IX Item "--debug[=num]"
-.PD
-The \fB\-d\fR \fInum\fR option specifies debugging options.
-If \fInum\fR is not specified, enable all debugging.
-.ie n .IP """\-h""" 4
-.el .IP "\f(CW\-h\fR" 4
-.IX Item "-h"
-.PD 0
-.ie n .IP """\-\-help""" 4
-.el .IP "\f(CW\-\-help\fR" 4
-.IX Item "--help"
-.PD
-The \fB\-h\fR option prints command line usage.
-.ie n .IP """\-O\f(CIname\f(CW""" 4
-.el .IP "\f(CW\-O\f(CIname\f(CW\fR" 4
-.IX Item "-Oname"
-.PD 0
-.ie n .IP """\-\-file\-format=\f(CIname\f(CW""" 4
-.el .IP "\f(CW\-\-file\-format=\f(CIname\f(CW\fR" 4
-.IX Item "--file-format=name"
-.PD
-Selects the format of the profile data files. Recognized formats are
-\&\fBauto\fR (the default), \fBbsd\fR, \fB4.4bsd\fR, \fBmagic\fR, and
-\&\fBprof\fR (not yet supported).
-.ie n .IP """\-s""" 4
-.el .IP "\f(CW\-s\fR" 4
-.IX Item "-s"
-.PD 0
-.ie n .IP """\-\-sum""" 4
-.el .IP "\f(CW\-\-sum\fR" 4
-.IX Item "--sum"
-.PD
-The \fB\-s\fR option causes \f(CW\*(C`gprof\*(C'\fR to summarize the information
-in the profile data files it read in, and write out a profile data
-file called \fIgmon.sum\fR, which contains all the information from
-the profile data files that \f(CW\*(C`gprof\*(C'\fR read in. The file \fIgmon.sum\fR
-may be one of the specified input files; the effect of this is to
-merge the data in the other input files into \fIgmon.sum\fR.
-.Sp
-Eventually you can run \f(CW\*(C`gprof\*(C'\fR again without \fB\-s\fR to analyze the
-cumulative data in the file \fIgmon.sum\fR.
-.ie n .IP """\-v""" 4
-.el .IP "\f(CW\-v\fR" 4
-.IX Item "-v"
-.PD 0
-.ie n .IP """\-\-version""" 4
-.el .IP "\f(CW\-\-version\fR" 4
-.IX Item "--version"
-.PD
-The \fB\-v\fR flag causes \f(CW\*(C`gprof\*(C'\fR to print the current version
-number, and then exit.
-.Sh "Deprecated Options"
-.IX Subsection "Deprecated Options"
-.RS 4
-These options have been replaced with newer versions that use symspecs.
-.RE
-.ie n .IP """\-e \f(CIfunction_name\f(CW""" 4
-.el .IP "\f(CW\-e \f(CIfunction_name\f(CW\fR" 4
-.IX Item "-e function_name"
-The \fB\-e\fR \fIfunction\fR option tells \f(CW\*(C`gprof\*(C'\fR to not print
-information about the function \fIfunction_name\fR (and its
-children...) in the call graph. The function will still be listed
-as a child of any functions that call it, but its index number will be
-shown as \fB[not printed]\fR. More than one \fB\-e\fR option may be
-given; only one \fIfunction_name\fR may be indicated with each \fB\-e\fR
-option.
-.ie n .IP """\-E \f(CIfunction_name\f(CW""" 4
-.el .IP "\f(CW\-E \f(CIfunction_name\f(CW\fR" 4
-.IX Item "-E function_name"
-The \f(CW\*(C`\-E \f(CIfunction\f(CW\*(C'\fR option works like the \f(CW\*(C`\-e\*(C'\fR option, but
-time spent in the function (and children who were not called from
-anywhere else), will not be used to compute the percentages-of-time for
-the call graph. More than one \fB\-E\fR option may be given; only one
-\&\fIfunction_name\fR may be indicated with each \fB\-E\fR option.
-.ie n .IP """\-f \f(CIfunction_name\f(CW""" 4
-.el .IP "\f(CW\-f \f(CIfunction_name\f(CW\fR" 4
-.IX Item "-f function_name"
-The \fB\-f\fR \fIfunction\fR option causes \f(CW\*(C`gprof\*(C'\fR to limit the
-call graph to the function \fIfunction_name\fR and its children (and
-their children...). More than one \fB\-f\fR option may be given;
-only one \fIfunction_name\fR may be indicated with each \fB\-f\fR
-option.
-.ie n .IP """\-F \f(CIfunction_name\f(CW""" 4
-.el .IP "\f(CW\-F \f(CIfunction_name\f(CW\fR" 4
-.IX Item "-F function_name"
-The \fB\-F\fR \fIfunction\fR option works like the \f(CW\*(C`\-f\*(C'\fR option, but
-only time spent in the function and its children (and their
-children...) will be used to determine total-time and
-percentages-of-time for the call graph. More than one \fB\-F\fR option
-may be given; only one \fIfunction_name\fR may be indicated with each
-\&\fB\-F\fR option. The \fB\-F\fR option overrides the \fB\-E\fR option.
-.SH "FILES"
-.IX Header "FILES"
-.ie n .IP """\f(CIa.out\f(CW""" 4
-.el .IP "\f(CW\f(CIa.out\f(CW\fR" 4
-.IX Item "a.out"
-the namelist and text space.
-.ie n .IP """\f(CIgmon.out\f(CW""" 4
-.el .IP "\f(CW\f(CIgmon.out\f(CW\fR" 4
-.IX Item "gmon.out"
-dynamic call graph and profile.
-.ie n .IP """\f(CIgmon.sum\f(CW""" 4
-.el .IP "\f(CW\f(CIgmon.sum\f(CW\fR" 4
-.IX Item "gmon.sum"
-summarized dynamic call graph and profile.
-.SH "BUGS"
-.IX Header "BUGS"
-The granularity of the sampling is shown, but remains
-statistical at best.
-We assume that the time for each execution of a function
-can be expressed by the total time for the function divided
-by the number of times the function is called.
-Thus the time propagated along the call graph arcs to the function's
-parents is directly proportional to the number of times that
-arc is traversed.
-.PP
-Parents that are not themselves profiled will have the time of
-their profiled children propagated to them, but they will appear
-to be spontaneously invoked in the call graph listing, and will
-not have their time propagated further.
-Similarly, signal catchers, even though profiled, will appear
-to be spontaneous (although for more obscure reasons).
-Any profiled children of signal catchers should have their times
-propagated properly, unless the signal catcher was invoked during
-the execution of the profiling routine, in which case all is lost.
-.PP
-The profiled program must call \f(CW\*(C`exit\*(C'\fR(2)
-or return normally for the profiling information to be saved
-in the \fIgmon.out\fR file.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-\&\fImonitor\fR\|(3), \fIprofil\fR\|(2), \fIcc\fR\|(1), \fIprof\fR\|(1), and the Info entry for \fIgprof\fR.
-.PP
-\&\*(L"An Execution Profiler for Modular Programs\*(R",
-by S. Graham, P. Kessler, M. McKusick;
-Software \- Practice and Experience,
-Vol. 13, pp. 671\-685, 1983.
-.PP
-\&\*(L"gprof: A Call Graph Execution Profiler\*(R",
-by S. Graham, P. Kessler, M. McKusick;
-Proceedings of the \s-1SIGPLAN\s0 '82 Symposium on Compiler Construction,
-\&\s-1SIGPLAN\s0 Notices, Vol. 17, No 6, pp. 120\-126, June 1982.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (C) 1988, 92, 97, 98, 99, 2000, 2001, 2003 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/gprof/gprof.c b/gprof/gprof.c
index dc6b618fdfd4..aca143c8b865 100644
--- a/gprof/gprof.c
+++ b/gprof/gprof.c
@@ -29,6 +29,7 @@
#include "libiberty.h"
#include "gprof.h"
+#include "bfdver.h"
#include "search_list.h"
#include "source.h"
#include "symtab.h"
@@ -59,7 +60,6 @@ int output_style = 0;
int output_width = 80;
bfd_boolean bsd_style_output = FALSE;
bfd_boolean demangle = TRUE;
-bfd_boolean discard_underscores = TRUE;
bfd_boolean ignore_direct_calls = FALSE;
bfd_boolean ignore_static_funcs = FALSE;
bfd_boolean ignore_zeros = TRUE;
@@ -170,7 +170,7 @@ Usage: %s [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][name]] [-I dirs]\n\
[--demangle[=STYLE]] [--no-demangle] [@FILE]\n\
[image-file] [profile-file...]\n"),
whoami);
- if (status == 0)
+ if (REPORT_BUGS_TO[0] && status == 0)
fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
done (status);
}
@@ -200,7 +200,7 @@ main (int argc, char **argv)
expandargv (&argc, &argv);
while ((ch = getopt_long (argc, argv,
- "aA::bBcCd::De:E:f:F:hiI:J::k:lLm:n::N::O:p::P::q::Q::st:Tvw:xyzZ::",
+ "aA::bBcC::d::De:E:f:F:hiI:J::k:lLm:n:N:O:p::P::q::Q::rR:st:Tvw:xyzZ::",
long_options, 0))
!= EOF)
{
@@ -411,7 +411,7 @@ main (int argc, char **argv)
break;
case 'v':
/* This output is intended to follow the GNU standards document. */
- printf (_("GNU gprof %s\n"), VERSION);
+ printf (_("GNU gprof %s\n"), BFD_VERSION_STRING);
printf (_("Based on BSD gprof, copyright 1983 Regents of the University of California.\n"));
printf (_("\
This program is free software. This program has absolutely no warranty.\n"));
@@ -545,7 +545,12 @@ This program is free software. This program has absolutely no warranty.\n"));
if (output_style == 0)
{
if (gmon_input & (INPUT_HISTOGRAM | INPUT_CALL_GRAPH))
- output_style = STYLE_FLAT_PROFILE | STYLE_CALL_GRAPH;
+ {
+ if (gmon_input & INPUT_HISTOGRAM)
+ output_style |= STYLE_FLAT_PROFILE;
+ if (gmon_input & INPUT_CALL_GRAPH)
+ output_style |= STYLE_CALL_GRAPH;
+ }
else
output_style = STYLE_EXEC_COUNTS;
diff --git a/gprof/gprof.h b/gprof/gprof.h
index a651699f238d..4cb9e4a75f17 100644
--- a/gprof/gprof.h
+++ b/gprof/gprof.h
@@ -68,8 +68,6 @@
#define _(String) gettext (String)
#endif
-#include "bin-bugs.h"
-
#define STYLE_FLAT_PROFILE (1<<0)
#define STYLE_CALL_GRAPH (1<<1)
#define STYLE_SUMMARY_FILE (1<<2)
@@ -121,7 +119,6 @@ extern int output_style;
extern int output_width; /* controls column width in index */
extern bfd_boolean bsd_style_output; /* as opposed to FSF style output */
extern bfd_boolean demangle; /* demangle symbol names? */
-extern bfd_boolean discard_underscores; /* discard leading underscores? */
extern bfd_boolean ignore_direct_calls; /* don't count direct calls */
extern bfd_boolean ignore_static_funcs; /* suppress static functions */
extern bfd_boolean ignore_zeros; /* ignore unused symbols/files */
diff --git a/gprof/gprof.info b/gprof/gprof.info
deleted file mode 100644
index 787399908d2c..000000000000
--- a/gprof/gprof.info
+++ /dev/null
@@ -1,2313 +0,0 @@
-This is .././gprof/gprof.info, produced by makeinfo version 4.8 from
-.././gprof/gprof.texi.
-
-START-INFO-DIR-ENTRY
-* gprof: (gprof). Profiling your program's execution
-END-INFO-DIR-ENTRY
-
- This file documents the gprof profiler of the GNU system.
-
- Copyright (C) 1988, 92, 97, 98, 99, 2000, 2001, 2003 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".
-
-
-File: gprof.info, Node: Top, Next: Introduction, Up: (dir)
-
-Profiling a Program: Where Does It Spend Its Time?
-**************************************************
-
-This manual describes the GNU profiler, `gprof', and how you can use it
-to determine which parts of a program are taking most of the execution
-time. We assume that you know how to write, compile, and execute
-programs. GNU `gprof' was written by Jay Fenlason.
-
- 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:
-
-* Introduction:: What profiling means, and why it is useful.
-
-* Compiling:: How to compile your program for profiling.
-* Executing:: Executing your program to generate profile data
-* Invoking:: How to run `gprof', and its options
-
-* Output:: Interpreting `gprof''s output
-
-* Inaccuracy:: Potential problems you should be aware of
-* How do I?:: Answers to common questions
-* Incompatibilities:: (between GNU `gprof' and Unix `gprof'.)
-* Details:: Details of how profiling is done
-* GNU Free Documentation License:: GNU Free Documentation License
-
-
-File: gprof.info, Node: Introduction, Next: Compiling, Prev: Top, Up: Top
-
-1 Introduction to Profiling
-***************************
-
-Profiling allows you to learn where your program spent its time and
-which functions called which other functions while it was executing.
-This information can show you which pieces of your program are slower
-than you expected, and might be candidates for rewriting to make your
-program execute faster. It can also tell you which functions are being
-called more or less often than you expected. This may help you spot
-bugs that had otherwise been unnoticed.
-
- Since the profiler uses information collected during the actual
-execution of your program, it can be used on programs that are too
-large or too complex to analyze by reading the source. However, how
-your program is run will affect the information that shows up in the
-profile data. If you don't use some feature of your program while it
-is being profiled, no profile information will be generated for that
-feature.
-
- Profiling has several steps:
-
- * You must compile and link your program with profiling enabled.
- *Note Compiling::.
-
- * You must execute your program to generate a profile data file.
- *Note Executing::.
-
- * You must run `gprof' to analyze the profile data. *Note
- Invoking::.
-
- The next three chapters explain these steps in greater detail.
-
- Several forms of output are available from the analysis.
-
- The "flat profile" shows how much time your program spent in each
-function, and how many times that function was called. If you simply
-want to know which functions burn most of the cycles, it is stated
-concisely here. *Note Flat Profile::.
-
- The "call graph" shows, for each function, which functions called
-it, which other functions it called, and how many times. There is also
-an estimate of how much time was spent in the subroutines of each
-function. This can suggest places where you might try to eliminate
-function calls that use a lot of time. *Note Call Graph::.
-
- The "annotated source" listing is a copy of the program's source
-code, labeled with the number of times each line of the program was
-executed. *Note Annotated Source::.
-
- To better understand how profiling works, you may wish to read a
-description of its implementation. *Note Implementation::.
-
-
-File: gprof.info, Node: Compiling, Next: Executing, Prev: Introduction, Up: Top
-
-2 Compiling a Program for Profiling
-***********************************
-
-The first step in generating profile information for your program is to
-compile and link it with profiling enabled.
-
- To compile a source file for profiling, specify the `-pg' option when
-you run the compiler. (This is in addition to the options you normally
-use.)
-
- To link the program for profiling, if you use a compiler such as `cc'
-to do the linking, simply specify `-pg' in addition to your usual
-options. The same option, `-pg', alters either compilation or linking
-to do what is necessary for profiling. Here are examples:
-
- cc -g -c myprog.c utils.c -pg
- cc -o myprog myprog.o utils.o -pg
-
- The `-pg' option also works with a command that both compiles and
-links:
-
- cc -o myprog myprog.c utils.c -g -pg
-
- Note: The `-pg' option must be part of your compilation options as
-well as your link options. If it is not then no call-graph data will
-be gathered and when you run `gprof' you will get an error message like
-this:
-
- gprof: gmon.out file is missing call-graph data
-
- If you add the `-Q' switch to suppress the printing of the call
-graph data you will still be able to see the time samples:
-
- Flat profile:
-
- Each sample counts as 0.01 seconds.
- % cumulative self self total
- time seconds seconds calls Ts/call Ts/call name
- 44.12 0.07 0.07 zazLoop
- 35.29 0.14 0.06 main
- 20.59 0.17 0.04 bazMillion
-
- % the percentage of the total running time of the
-
- If you run the linker `ld' directly instead of through a compiler
-such as `cc', you may have to specify a profiling startup file
-`gcrt0.o' as the first input file instead of the usual startup file
-`crt0.o'. In addition, you would probably want to specify the
-profiling C library, `libc_p.a', by writing `-lc_p' instead of the
-usual `-lc'. This is not absolutely necessary, but doing this gives
-you number-of-calls information for standard library functions such as
-`read' and `open'. For example:
-
- ld -o myprog /lib/gcrt0.o myprog.o utils.o -lc_p
-
- If you compile only some of the modules of the program with `-pg',
-you can still profile the program, but you won't get complete
-information about the modules that were compiled without `-pg'. The
-only information you get for the functions in those modules is the
-total time spent in them; there is no record of how many times they
-were called, or from where. This will not affect the flat profile
-(except that the `calls' field for the functions will be blank), but
-will greatly reduce the usefulness of the call graph.
-
- If you wish to perform line-by-line profiling, you will also need to
-specify the `-g' option, instructing the compiler to insert debugging
-symbols into the program that match program addresses to source code
-lines. *Note Line-by-line::.
-
- In addition to the `-pg' and `-g' options, older versions of GCC
-required you to specify the `-a' option when compiling in order to
-instrument it to perform basic-block counting. Newer versions do not
-require this option and will not accept it; basic-block counting is
-always enabled when `-pg' is on.
-
- When basic-block counting is enabled, as the program runs it will
-count how many times it executed each branch of each `if' statement,
-each iteration of each `do' loop, etc. This will enable `gprof' to
-construct an annotated source code listing showing how many times each
-line of code was executed.
-
- It also worth noting that GCC supports a different profiling method
-which is enabled by the `-fprofile-arcs', `-ftest-coverage' and
-`-fprofile-values' switches. These switches do not produce data which
-is useful to `gprof' however, so they are not discussed further here.
-There is also the `-finstrument-functions' switch which will cause GCC
-to insert calls to special user supplied instrumentation routines at
-the entry and exit of every function in their program. This can be
-used to implement an alternative profiling scheme.
-
-
-File: gprof.info, Node: Executing, Next: Invoking, Prev: Compiling, Up: Top
-
-3 Executing the Program
-***********************
-
-Once the program is compiled for profiling, you must run it in order to
-generate the information that `gprof' needs. Simply run the program as
-usual, using the normal arguments, file names, etc. The program should
-run normally, producing the same output as usual. It will, however, run
-somewhat slower than normal because of the time spent collecting and the
-writing the profile data.
-
- The way you run the program--the arguments and input that you give
-it--may have a dramatic effect on what the profile information shows.
-The profile data will describe the parts of the program that were
-activated for the particular input you use. For example, if the first
-command you give to your program is to quit, the profile data will show
-the time used in initialization and in cleanup, but not much else.
-
- Your program will write the profile data into a file called
-`gmon.out' just before exiting. If there is already a file called
-`gmon.out', its contents are overwritten. There is currently no way to
-tell the program to write the profile data under a different name, but
-you can rename the file afterwards if you are concerned that it may be
-overwritten.
-
- In order to write the `gmon.out' file properly, your program must
-exit normally: by returning from `main' or by calling `exit'. Calling
-the low-level function `_exit' does not write the profile data, and
-neither does abnormal termination due to an unhandled signal.
-
- The `gmon.out' file is written in the program's _current working
-directory_ at the time it exits. This means that if your program calls
-`chdir', the `gmon.out' file will be left in the last directory your
-program `chdir''d to. If you don't have permission to write in this
-directory, the file is not written, and you will get an error message.
-
- Older versions of the GNU profiling library may also write a file
-called `bb.out'. This file, if present, contains an human-readable
-listing of the basic-block execution counts. Unfortunately, the
-appearance of a human-readable `bb.out' means the basic-block counts
-didn't get written into `gmon.out'. The Perl script `bbconv.pl',
-included with the `gprof' source distribution, will convert a `bb.out'
-file into a format readable by `gprof'. Invoke it like this:
-
- bbconv.pl < bb.out > BH-DATA
-
- This translates the information in `bb.out' into a form that `gprof'
-can understand. But you still need to tell `gprof' about the existence
-of this translated information. To do that, include BB-DATA on the
-`gprof' command line, _along with `gmon.out'_, like this:
-
- gprof OPTIONS EXECUTABLE-FILE gmon.out BB-DATA [YET-MORE-PROFILE-DATA-FILES...] [> OUTFILE]
-
-
-File: gprof.info, Node: Invoking, Next: Output, Prev: Executing, Up: Top
-
-4 `gprof' Command Summary
-*************************
-
-After you have a profile data file `gmon.out', you can run `gprof' to
-interpret the information in it. The `gprof' program prints a flat
-profile and a call graph on standard output. Typically you would
-redirect the output of `gprof' into a file with `>'.
-
- You run `gprof' like this:
-
- gprof OPTIONS [EXECUTABLE-FILE [PROFILE-DATA-FILES...]] [> OUTFILE]
-
-Here square-brackets indicate optional arguments.
-
- If you omit the executable file name, the file `a.out' is used. If
-you give no profile data file name, the file `gmon.out' is used. If
-any file is not in the proper format, or if the profile data file does
-not appear to belong to the executable file, an error message is
-printed.
-
- You can give more than one profile data file by entering all their
-names after the executable file name; then the statistics in all the
-data files are summed together.
-
- The order of these options does not matter.
-
-* Menu:
-
-* Output Options:: Controlling `gprof''s output style
-* Analysis Options:: Controlling how `gprof' analyses its data
-* Miscellaneous Options::
-* Deprecated Options:: Options you no longer need to use, but which
- have been retained for compatibility
-* Symspecs:: Specifying functions to include or exclude
-
-
-File: gprof.info, Node: Output Options, Next: Analysis Options, Up: Invoking
-
-4.1 Output Options
-==================
-
-These options specify which of several output formats `gprof' should
-produce.
-
- Many of these options take an optional "symspec" to specify
-functions to be included or excluded. These options can be specified
-multiple times, with different symspecs, to include or exclude sets of
-symbols. *Note Symspecs::.
-
- Specifying any of these options overrides the default (`-p -q'),
-which prints a flat profile and call graph analysis for all functions.
-
-`-A[SYMSPEC]'
-`--annotated-source[=SYMSPEC]'
- The `-A' option causes `gprof' to print annotated source code. If
- SYMSPEC is specified, print output only for matching symbols.
- *Note Annotated Source::.
-
-`-b'
-`--brief'
- If the `-b' option is given, `gprof' doesn't print the verbose
- blurbs that try to explain the meaning of all of the fields in the
- tables. This is useful if you intend to print out the output, or
- are tired of seeing the blurbs.
-
-`-C[SYMSPEC]'
-`--exec-counts[=SYMSPEC]'
- The `-C' option causes `gprof' to print a tally of functions and
- the number of times each was called. If SYMSPEC is specified,
- print tally only for matching symbols.
-
- If the profile data file contains basic-block count records,
- specifying the `-l' option, along with `-C', will cause basic-block
- execution counts to be tallied and displayed.
-
-`-i'
-`--file-info'
- The `-i' option causes `gprof' to display summary information
- about the profile data file(s) and then exit. The number of
- histogram, call graph, and basic-block count records is displayed.
-
-`-I DIRS'
-`--directory-path=DIRS'
- The `-I' option specifies a list of search directories in which to
- find source files. Environment variable GPROF_PATH can also be
- used to convey this information. Used mostly for annotated source
- output.
-
-`-J[SYMSPEC]'
-`--no-annotated-source[=SYMSPEC]'
- The `-J' option causes `gprof' not to print annotated source code.
- If SYMSPEC is specified, `gprof' prints annotated source, but
- excludes matching symbols.
-
-`-L'
-`--print-path'
- Normally, source filenames are printed with the path component
- suppressed. The `-L' option causes `gprof' to print the full
- pathname of source filenames, which is determined from symbolic
- debugging information in the image file and is relative to the
- directory in which the compiler was invoked.
-
-`-p[SYMSPEC]'
-`--flat-profile[=SYMSPEC]'
- The `-p' option causes `gprof' to print a flat profile. If
- SYMSPEC is specified, print flat profile only for matching symbols.
- *Note Flat Profile::.
-
-`-P[SYMSPEC]'
-`--no-flat-profile[=SYMSPEC]'
- The `-P' option causes `gprof' to suppress printing a flat profile.
- If SYMSPEC is specified, `gprof' prints a flat profile, but
- excludes matching symbols.
-
-`-q[SYMSPEC]'
-`--graph[=SYMSPEC]'
- The `-q' option causes `gprof' to print the call graph analysis.
- If SYMSPEC is specified, print call graph only for matching symbols
- and their children. *Note Call Graph::.
-
-`-Q[SYMSPEC]'
-`--no-graph[=SYMSPEC]'
- The `-Q' option causes `gprof' to suppress printing the call graph.
- If SYMSPEC is specified, `gprof' prints a call graph, but excludes
- matching symbols.
-
-`-t'
-`--table-length=NUM'
- The `-t' option causes the NUM most active source lines in each
- source file to be listed when source annotation is enabled. The
- default is 10.
-
-`-y'
-`--separate-files'
- This option affects annotated source output only. Normally,
- `gprof' prints annotated source files to standard-output. If this
- option is specified, annotated source for a file named
- `path/FILENAME' is generated in the file `FILENAME-ann'. If the
- underlying filesystem would truncate `FILENAME-ann' so that it
- overwrites the original `FILENAME', `gprof' generates annotated
- source in the file `FILENAME.ann' instead (if the original file
- name has an extension, that extension is _replaced_ with `.ann').
-
-`-Z[SYMSPEC]'
-`--no-exec-counts[=SYMSPEC]'
- The `-Z' option causes `gprof' not to print a tally of functions
- and the number of times each was called. If SYMSPEC is specified,
- print tally, but exclude matching symbols.
-
-`-r'
-`--function-ordering'
- The `--function-ordering' option causes `gprof' to print a
- suggested function ordering for the program based on profiling
- data. This option suggests an ordering which may improve paging,
- tlb and cache behavior for the program on systems which support
- arbitrary ordering of functions in an executable.
-
- The exact details of how to force the linker to place functions in
- a particular order is system dependent and out of the scope of this
- manual.
-
-`-R MAP_FILE'
-`--file-ordering MAP_FILE'
- The `--file-ordering' option causes `gprof' to print a suggested
- .o link line ordering for the program based on profiling data.
- This option suggests an ordering which may improve paging, tlb and
- cache behavior for the program on systems which do not support
- arbitrary ordering of functions in an executable.
-
- Use of the `-a' argument is highly recommended with this option.
-
- The MAP_FILE argument is a pathname to a file which provides
- function name to object file mappings. The format of the file is
- similar to the output of the program `nm'.
-
- c-parse.o:00000000 T yyparse
- c-parse.o:00000004 C yyerrflag
- c-lang.o:00000000 T maybe_objc_method_name
- c-lang.o:00000000 T print_lang_statistics
- c-lang.o:00000000 T recognize_objc_keyword
- c-decl.o:00000000 T print_lang_identifier
- c-decl.o:00000000 T print_lang_type
- ...
-
- To create a MAP_FILE with GNU `nm', type a command like `nm
- --extern-only --defined-only -v --print-file-name program-name'.
-
-`-T'
-`--traditional'
- The `-T' option causes `gprof' to print its output in
- "traditional" BSD style.
-
-`-w WIDTH'
-`--width=WIDTH'
- Sets width of output lines to WIDTH. Currently only used when
- printing the function index at the bottom of the call graph.
-
-`-x'
-`--all-lines'
- This option affects annotated source output only. By default,
- only the lines at the beginning of a basic-block are annotated.
- If this option is specified, every line in a basic-block is
- annotated by repeating the annotation for the first line. This
- behavior is similar to `tcov''s `-a'.
-
-`--demangle[=STYLE]'
-`--no-demangle'
- These options control whether C++ symbol names should be demangled
- when printing output. The default is to demangle symbols. The
- `--no-demangle' option may be used to turn off demangling.
- Different compilers have different mangling styles. The optional
- demangling style argument can be used to choose an appropriate
- demangling style for your compiler.
-
-
-File: gprof.info, Node: Analysis Options, Next: Miscellaneous Options, Prev: Output Options, Up: Invoking
-
-4.2 Analysis Options
-====================
-
-`-a'
-`--no-static'
- The `-a' option causes `gprof' to suppress the printing of
- statically declared (private) functions. (These are functions
- whose names are not listed as global, and which are not visible
- outside the file/function/block where they were defined.) Time
- spent in these functions, calls to/from them, etc, will all be
- attributed to the function that was loaded directly before it in
- the executable file. This option affects both the flat profile
- and the call graph.
-
-`-c'
-`--static-call-graph'
- The `-c' option causes the call graph of the program to be
- augmented by a heuristic which examines the text space of the
- object file and identifies function calls in the binary machine
- code. Since normal call graph records are only generated when
- functions are entered, this option identifies children that could
- have been called, but never were. Calls to functions that were
- not compiled with profiling enabled are also identified, but only
- if symbol table entries are present for them. Calls to dynamic
- library routines are typically _not_ found by this option.
- Parents or children identified via this heuristic are indicated in
- the call graph with call counts of `0'.
-
-`-D'
-`--ignore-non-functions'
- The `-D' option causes `gprof' to ignore symbols which are not
- known to be functions. This option will give more accurate
- profile data on systems where it is supported (Solaris and HPUX for
- example).
-
-`-k FROM/TO'
- The `-k' option allows you to delete from the call graph any arcs
- from symbols matching symspec FROM to those matching symspec TO.
-
-`-l'
-`--line'
- The `-l' option enables line-by-line profiling, which causes
- histogram hits to be charged to individual source code lines,
- instead of functions. If the program was compiled with
- basic-block counting enabled, this option will also identify how
- many times each line of code was executed. While line-by-line
- profiling can help isolate where in a large function a program is
- spending its time, it also significantly increases the running
- time of `gprof', and magnifies statistical inaccuracies. *Note
- Sampling Error::.
-
-`-m NUM'
-`--min-count=NUM'
- This option affects execution count output only. Symbols that are
- executed less than NUM times are suppressed.
-
-`-n[SYMSPEC]'
-`--time[=SYMSPEC]'
- The `-n' option causes `gprof', in its call graph analysis, to
- only propagate times for symbols matching SYMSPEC.
-
-`-N[SYMSPEC]'
-`--no-time[=SYMSPEC]'
- The `-n' option causes `gprof', in its call graph analysis, not to
- propagate times for symbols matching SYMSPEC.
-
-`-z'
-`--display-unused-functions'
- If you give the `-z' option, `gprof' will mention all functions in
- the flat profile, even those that were never called, and that had
- no time spent in them. This is useful in conjunction with the
- `-c' option for discovering which routines were never called.
-
-
-
-File: gprof.info, Node: Miscellaneous Options, Next: Deprecated Options, Prev: Analysis Options, Up: Invoking
-
-4.3 Miscellaneous Options
-=========================
-
-`-d[NUM]'
-`--debug[=NUM]'
- The `-d NUM' option specifies debugging options. If NUM is not
- specified, enable all debugging. *Note Debugging::.
-
-`-h'
-`--help'
- The `-h' option prints command line usage.
-
-`-ONAME'
-`--file-format=NAME'
- Selects the format of the profile data files. Recognized formats
- are `auto' (the default), `bsd', `4.4bsd', `magic', and `prof'
- (not yet supported).
-
-`-s'
-`--sum'
- The `-s' option causes `gprof' to summarize the information in the
- profile data files it read in, and write out a profile data file
- called `gmon.sum', which contains all the information from the
- profile data files that `gprof' read in. The file `gmon.sum' may
- be one of the specified input files; the effect of this is to
- merge the data in the other input files into `gmon.sum'.
-
- Eventually you can run `gprof' again without `-s' to analyze the
- cumulative data in the file `gmon.sum'.
-
-`-v'
-`--version'
- The `-v' flag causes `gprof' to print the current version number,
- and then exit.
-
-
-
-File: gprof.info, Node: Deprecated Options, Next: Symspecs, Prev: Miscellaneous Options, Up: Invoking
-
-4.4 Deprecated Options
-======================
-
- These options have been replaced with newer versions that use
- symspecs.
-
-`-e FUNCTION_NAME'
- The `-e FUNCTION' option tells `gprof' to not print information
- about the function FUNCTION_NAME (and its children...) in the call
- graph. The function will still be listed as a child of any
- functions that call it, but its index number will be shown as
- `[not printed]'. More than one `-e' option may be given; only one
- FUNCTION_NAME may be indicated with each `-e' option.
-
-`-E FUNCTION_NAME'
- The `-E FUNCTION' option works like the `-e' option, but time
- spent in the function (and children who were not called from
- anywhere else), will not be used to compute the
- percentages-of-time for the call graph. More than one `-E' option
- may be given; only one FUNCTION_NAME may be indicated with each
- `-E' option.
-
-`-f FUNCTION_NAME'
- The `-f FUNCTION' option causes `gprof' to limit the call graph to
- the function FUNCTION_NAME and its children (and their
- children...). More than one `-f' option may be given; only one
- FUNCTION_NAME may be indicated with each `-f' option.
-
-`-F FUNCTION_NAME'
- The `-F FUNCTION' option works like the `-f' option, but only time
- spent in the function and its children (and their children...)
- will be used to determine total-time and percentages-of-time for
- the call graph. More than one `-F' option may be given; only one
- FUNCTION_NAME may be indicated with each `-F' option. The `-F'
- option overrides the `-E' option.
-
-
- Note that only one function can be specified with each `-e', `-E',
-`-f' or `-F' option. To specify more than one function, use multiple
-options. For example, this command:
-
- gprof -e boring -f foo -f bar myprogram > gprof.output
-
-lists in the call graph all functions that were reached from either
-`foo' or `bar' and were not reachable from `boring'.
-
-
-File: gprof.info, Node: Symspecs, Prev: Deprecated Options, Up: Invoking
-
-4.5 Symspecs
-============
-
-Many of the output options allow functions to be included or excluded
-using "symspecs" (symbol specifications), which observe the following
-syntax:
-
- filename_containing_a_dot
- | funcname_not_containing_a_dot
- | linenumber
- | ( [ any_filename ] `:' ( any_funcname | linenumber ) )
-
- Here are some sample symspecs:
-
-`main.c'
- Selects everything in file `main.c'--the dot in the string tells
- `gprof' to interpret the string as a filename, rather than as a
- function name. To select a file whose name does not contain a
- dot, a trailing colon should be specified. For example, `odd:' is
- interpreted as the file named `odd'.
-
-`main'
- Selects all functions named `main'.
-
- Note that there may be multiple instances of the same function name
- because some of the definitions may be local (i.e., static).
- Unless a function name is unique in a program, you must use the
- colon notation explained below to specify a function from a
- specific source file.
-
- Sometimes, function names contain dots. In such cases, it is
- necessary to add a leading colon to the name. For example,
- `:.mul' selects function `.mul'.
-
- In some object file formats, symbols have a leading underscore.
- `gprof' will normally not print these underscores. When you name a
- symbol in a symspec, you should type it exactly as `gprof' prints
- it in its output. For example, if the compiler produces a symbol
- `_main' from your `main' function, `gprof' still prints it as
- `main' in its output, so you should use `main' in symspecs.
-
-`main.c:main'
- Selects function `main' in file `main.c'.
-
-`main.c:134'
- Selects line 134 in file `main.c'.
-
-
-File: gprof.info, Node: Output, Next: Inaccuracy, Prev: Invoking, Up: Top
-
-5 Interpreting `gprof''s Output
-*******************************
-
-`gprof' can produce several different output styles, the most important
-of which are described below. The simplest output styles (file
-information, execution count, and function and file ordering) are not
-described here, but are documented with the respective options that
-trigger them. *Note Output Options::.
-
-* Menu:
-
-* Flat Profile:: The flat profile shows how much time was spent
- executing directly in each function.
-* Call Graph:: The call graph shows which functions called which
- others, and how much time each function used
- when its subroutine calls are included.
-* Line-by-line:: `gprof' can analyze individual source code lines
-* Annotated Source:: The annotated source listing displays source code
- labeled with execution counts
-
-
-File: gprof.info, Node: Flat Profile, Next: Call Graph, Up: Output
-
-5.1 The Flat Profile
-====================
-
-The "flat profile" shows the total amount of time your program spent
-executing each function. Unless the `-z' option is given, functions
-with no apparent time spent in them, and no apparent calls to them, are
-not mentioned. Note that if a function was not compiled for profiling,
-and didn't run long enough to show up on the program counter histogram,
-it will be indistinguishable from a function that was never called.
-
- This is part of a flat profile for a small program:
-
- Flat profile:
-
- Each sample counts as 0.01 seconds.
- % cumulative self self total
- time seconds seconds calls ms/call ms/call name
- 33.34 0.02 0.02 7208 0.00 0.00 open
- 16.67 0.03 0.01 244 0.04 0.12 offtime
- 16.67 0.04 0.01 8 1.25 1.25 memccpy
- 16.67 0.05 0.01 7 1.43 1.43 write
- 16.67 0.06 0.01 mcount
- 0.00 0.06 0.00 236 0.00 0.00 tzset
- 0.00 0.06 0.00 192 0.00 0.00 tolower
- 0.00 0.06 0.00 47 0.00 0.00 strlen
- 0.00 0.06 0.00 45 0.00 0.00 strchr
- 0.00 0.06 0.00 1 0.00 50.00 main
- 0.00 0.06 0.00 1 0.00 0.00 memcpy
- 0.00 0.06 0.00 1 0.00 10.11 print
- 0.00 0.06 0.00 1 0.00 0.00 profil
- 0.00 0.06 0.00 1 0.00 50.00 report
- ...
-
-The functions are sorted by first by decreasing run-time spent in them,
-then by decreasing number of calls, then alphabetically by name. The
-functions `mcount' and `profil' are part of the profiling apparatus and
-appear in every flat profile; their time gives a measure of the amount
-of overhead due to profiling.
-
- Just before the column headers, a statement appears indicating how
-much time each sample counted as. This "sampling period" estimates the
-margin of error in each of the time figures. A time figure that is not
-much larger than this is not reliable. In this example, each sample
-counted as 0.01 seconds, suggesting a 100 Hz sampling rate. The
-program's total execution time was 0.06 seconds, as indicated by the
-`cumulative seconds' field. Since each sample counted for 0.01
-seconds, this means only six samples were taken during the run. Two of
-the samples occurred while the program was in the `open' function, as
-indicated by the `self seconds' field. Each of the other four samples
-occurred one each in `offtime', `memccpy', `write', and `mcount'.
-Since only six samples were taken, none of these values can be regarded
-as particularly reliable. In another run, the `self seconds' field for
-`mcount' might well be `0.00' or `0.02'. *Note Sampling Error::, for a
-complete discussion.
-
- The remaining functions in the listing (those whose `self seconds'
-field is `0.00') didn't appear in the histogram samples at all.
-However, the call graph indicated that they were called, so therefore
-they are listed, sorted in decreasing order by the `calls' field.
-Clearly some time was spent executing these functions, but the paucity
-of histogram samples prevents any determination of how much time each
-took.
-
- Here is what the fields in each line mean:
-
-`% time'
- This is the percentage of the total execution time your program
- spent in this function. These should all add up to 100%.
-
-`cumulative seconds'
- This is the cumulative total number of seconds the computer spent
- executing this functions, plus the time spent in all the functions
- above this one in this table.
-
-`self seconds'
- This is the number of seconds accounted for by this function alone.
- The flat profile listing is sorted first by this number.
-
-`calls'
- This is the total number of times the function was called. If the
- function was never called, or the number of times it was called
- cannot be determined (probably because the function was not
- compiled with profiling enabled), the "calls" field is blank.
-
-`self ms/call'
- This represents the average number of milliseconds spent in this
- function per call, if this function is profiled. Otherwise, this
- field is blank for this function.
-
-`total ms/call'
- This represents the average number of milliseconds spent in this
- function and its descendants per call, if this function is
- profiled. Otherwise, this field is blank for this function. This
- is the only field in the flat profile that uses call graph
- analysis.
-
-`name'
- This is the name of the function. The flat profile is sorted by
- this field alphabetically after the "self seconds" and "calls"
- fields are sorted.
-
-
-File: gprof.info, Node: Call Graph, Next: Line-by-line, Prev: Flat Profile, Up: Output
-
-5.2 The Call Graph
-==================
-
-The "call graph" shows how much time was spent in each function and its
-children. From this information, you can find functions that, while
-they themselves may not have used much time, called other functions
-that did use unusual amounts of time.
-
- Here is a sample call from a small program. This call came from the
-same `gprof' run as the flat profile example in the previous chapter.
-
- granularity: each sample hit covers 2 byte(s) for 20.00% of 0.05 seconds
-
- index % time self children called name
- <spontaneous>
- [1] 100.0 0.00 0.05 start [1]
- 0.00 0.05 1/1 main [2]
- 0.00 0.00 1/2 on_exit [28]
- 0.00 0.00 1/1 exit [59]
- -----------------------------------------------
- 0.00 0.05 1/1 start [1]
- [2] 100.0 0.00 0.05 1 main [2]
- 0.00 0.05 1/1 report [3]
- -----------------------------------------------
- 0.00 0.05 1/1 main [2]
- [3] 100.0 0.00 0.05 1 report [3]
- 0.00 0.03 8/8 timelocal [6]
- 0.00 0.01 1/1 print [9]
- 0.00 0.01 9/9 fgets [12]
- 0.00 0.00 12/34 strncmp <cycle 1> [40]
- 0.00 0.00 8/8 lookup [20]
- 0.00 0.00 1/1 fopen [21]
- 0.00 0.00 8/8 chewtime [24]
- 0.00 0.00 8/16 skipspace [44]
- -----------------------------------------------
- [4] 59.8 0.01 0.02 8+472 <cycle 2 as a whole> [4]
- 0.01 0.02 244+260 offtime <cycle 2> [7]
- 0.00 0.00 236+1 tzset <cycle 2> [26]
- -----------------------------------------------
-
- The lines full of dashes divide this table into "entries", one for
-each function. Each entry has one or more lines.
-
- In each entry, the primary line is the one that starts with an index
-number in square brackets. The end of this line says which function
-the entry is for. The preceding lines in the entry describe the
-callers of this function and the following lines describe its
-subroutines (also called "children" when we speak of the call graph).
-
- The entries are sorted by time spent in the function and its
-subroutines.
-
- The internal profiling function `mcount' (*note Flat Profile::) is
-never mentioned in the call graph.
-
-* Menu:
-
-* Primary:: Details of the primary line's contents.
-* Callers:: Details of caller-lines' contents.
-* Subroutines:: Details of subroutine-lines' contents.
-* Cycles:: When there are cycles of recursion,
- such as `a' calls `b' calls `a'...
-
-
-File: gprof.info, Node: Primary, Next: Callers, Up: Call Graph
-
-5.2.1 The Primary Line
-----------------------
-
-The "primary line" in a call graph entry is the line that describes the
-function which the entry is about and gives the overall statistics for
-this function.
-
- For reference, we repeat the primary line from the entry for function
-`report' in our main example, together with the heading line that shows
-the names of the fields:
-
- index % time self children called name
- ...
- [3] 100.0 0.00 0.05 1 report [3]
-
- Here is what the fields in the primary line mean:
-
-`index'
- Entries are numbered with consecutive integers. Each function
- therefore has an index number, which appears at the beginning of
- its primary line.
-
- Each cross-reference to a function, as a caller or subroutine of
- another, gives its index number as well as its name. The index
- number guides you if you wish to look for the entry for that
- function.
-
-`% time'
- This is the percentage of the total time that was spent in this
- function, including time spent in subroutines called from this
- function.
-
- The time spent in this function is counted again for the callers of
- this function. Therefore, adding up these percentages is
- meaningless.
-
-`self'
- This is the total amount of time spent in this function. This
- should be identical to the number printed in the `seconds' field
- for this function in the flat profile.
-
-`children'
- This is the total amount of time spent in the subroutine calls
- made by this function. This should be equal to the sum of all the
- `self' and `children' entries of the children listed directly
- below this function.
-
-`called'
- This is the number of times the function was called.
-
- If the function called itself recursively, there are two numbers,
- separated by a `+'. The first number counts non-recursive calls,
- and the second counts recursive calls.
-
- In the example above, the function `report' was called once from
- `main'.
-
-`name'
- This is the name of the current function. The index number is
- repeated after it.
-
- If the function is part of a cycle of recursion, the cycle number
- is printed between the function's name and the index number (*note
- Cycles::). For example, if function `gnurr' is part of cycle
- number one, and has index number twelve, its primary line would be
- end like this:
-
- gnurr <cycle 1> [12]
-
-
-File: gprof.info, Node: Callers, Next: Subroutines, Prev: Primary, Up: Call Graph
-
-5.2.2 Lines for a Function's Callers
-------------------------------------
-
-A function's entry has a line for each function it was called by.
-These lines' fields correspond to the fields of the primary line, but
-their meanings are different because of the difference in context.
-
- For reference, we repeat two lines from the entry for the function
-`report', the primary line and one caller-line preceding it, together
-with the heading line that shows the names of the fields:
-
- index % time self children called name
- ...
- 0.00 0.05 1/1 main [2]
- [3] 100.0 0.00 0.05 1 report [3]
-
- Here are the meanings of the fields in the caller-line for `report'
-called from `main':
-
-`self'
- An estimate of the amount of time spent in `report' itself when it
- was called from `main'.
-
-`children'
- An estimate of the amount of time spent in subroutines of `report'
- when `report' was called from `main'.
-
- The sum of the `self' and `children' fields is an estimate of the
- amount of time spent within calls to `report' from `main'.
-
-`called'
- Two numbers: the number of times `report' was called from `main',
- followed by the total number of non-recursive calls to `report'
- from all its callers.
-
-`name and index number'
- The name of the caller of `report' to which this line applies,
- followed by the caller's index number.
-
- Not all functions have entries in the call graph; some options to
- `gprof' request the omission of certain functions. When a caller
- has no entry of its own, it still has caller-lines in the entries
- of the functions it calls.
-
- If the caller is part of a recursion cycle, the cycle number is
- printed between the name and the index number.
-
- If the identity of the callers of a function cannot be determined, a
-dummy caller-line is printed which has `<spontaneous>' as the "caller's
-name" and all other fields blank. This can happen for signal handlers.
-
-
-File: gprof.info, Node: Subroutines, Next: Cycles, Prev: Callers, Up: Call Graph
-
-5.2.3 Lines for a Function's Subroutines
-----------------------------------------
-
-A function's entry has a line for each of its subroutines--in other
-words, a line for each other function that it called. These lines'
-fields correspond to the fields of the primary line, but their meanings
-are different because of the difference in context.
-
- For reference, we repeat two lines from the entry for the function
-`main', the primary line and a line for a subroutine, together with the
-heading line that shows the names of the fields:
-
- index % time self children called name
- ...
- [2] 100.0 0.00 0.05 1 main [2]
- 0.00 0.05 1/1 report [3]
-
- Here are the meanings of the fields in the subroutine-line for `main'
-calling `report':
-
-`self'
- An estimate of the amount of time spent directly within `report'
- when `report' was called from `main'.
-
-`children'
- An estimate of the amount of time spent in subroutines of `report'
- when `report' was called from `main'.
-
- The sum of the `self' and `children' fields is an estimate of the
- total time spent in calls to `report' from `main'.
-
-`called'
- Two numbers, the number of calls to `report' from `main' followed
- by the total number of non-recursive calls to `report'. This
- ratio is used to determine how much of `report''s `self' and
- `children' time gets credited to `main'. *Note Assumptions::.
-
-`name'
- The name of the subroutine of `main' to which this line applies,
- followed by the subroutine's index number.
-
- If the caller is part of a recursion cycle, the cycle number is
- printed between the name and the index number.
-
-
-File: gprof.info, Node: Cycles, Prev: Subroutines, Up: Call Graph
-
-5.2.4 How Mutually Recursive Functions Are Described
-----------------------------------------------------
-
-The graph may be complicated by the presence of "cycles of recursion"
-in the call graph. A cycle exists if a function calls another function
-that (directly or indirectly) calls (or appears to call) the original
-function. For example: if `a' calls `b', and `b' calls `a', then `a'
-and `b' form a cycle.
-
- Whenever there are call paths both ways between a pair of functions,
-they belong to the same cycle. If `a' and `b' call each other and `b'
-and `c' call each other, all three make one cycle. Note that even if
-`b' only calls `a' if it was not called from `a', `gprof' cannot
-determine this, so `a' and `b' are still considered a cycle.
-
- The cycles are numbered with consecutive integers. When a function
-belongs to a cycle, each time the function name appears in the call
-graph it is followed by `<cycle NUMBER>'.
-
- The reason cycles matter is that they make the time values in the
-call graph paradoxical. The "time spent in children" of `a' should
-include the time spent in its subroutine `b' and in `b''s
-subroutines--but one of `b''s subroutines is `a'! How much of `a''s
-time should be included in the children of `a', when `a' is indirectly
-recursive?
-
- The way `gprof' resolves this paradox is by creating a single entry
-for the cycle as a whole. The primary line of this entry describes the
-total time spent directly in the functions of the cycle. The
-"subroutines" of the cycle are the individual functions of the cycle,
-and all other functions that were called directly by them. The
-"callers" of the cycle are the functions, outside the cycle, that
-called functions in the cycle.
-
- Here is an example portion of a call graph which shows a cycle
-containing functions `a' and `b'. The cycle was entered by a call to
-`a' from `main'; both `a' and `b' called `c'.
-
- index % time self children called name
- ----------------------------------------
- 1.77 0 1/1 main [2]
- [3] 91.71 1.77 0 1+5 <cycle 1 as a whole> [3]
- 1.02 0 3 b <cycle 1> [4]
- 0.75 0 2 a <cycle 1> [5]
- ----------------------------------------
- 3 a <cycle 1> [5]
- [4] 52.85 1.02 0 0 b <cycle 1> [4]
- 2 a <cycle 1> [5]
- 0 0 3/6 c [6]
- ----------------------------------------
- 1.77 0 1/1 main [2]
- 2 b <cycle 1> [4]
- [5] 38.86 0.75 0 1 a <cycle 1> [5]
- 3 b <cycle 1> [4]
- 0 0 3/6 c [6]
- ----------------------------------------
-
-(The entire call graph for this program contains in addition an entry
-for `main', which calls `a', and an entry for `c', with callers `a' and
-`b'.)
-
- index % time self children called name
- <spontaneous>
- [1] 100.00 0 1.93 0 start [1]
- 0.16 1.77 1/1 main [2]
- ----------------------------------------
- 0.16 1.77 1/1 start [1]
- [2] 100.00 0.16 1.77 1 main [2]
- 1.77 0 1/1 a <cycle 1> [5]
- ----------------------------------------
- 1.77 0 1/1 main [2]
- [3] 91.71 1.77 0 1+5 <cycle 1 as a whole> [3]
- 1.02 0 3 b <cycle 1> [4]
- 0.75 0 2 a <cycle 1> [5]
- 0 0 6/6 c [6]
- ----------------------------------------
- 3 a <cycle 1> [5]
- [4] 52.85 1.02 0 0 b <cycle 1> [4]
- 2 a <cycle 1> [5]
- 0 0 3/6 c [6]
- ----------------------------------------
- 1.77 0 1/1 main [2]
- 2 b <cycle 1> [4]
- [5] 38.86 0.75 0 1 a <cycle 1> [5]
- 3 b <cycle 1> [4]
- 0 0 3/6 c [6]
- ----------------------------------------
- 0 0 3/6 b <cycle 1> [4]
- 0 0 3/6 a <cycle 1> [5]
- [6] 0.00 0 0 6 c [6]
- ----------------------------------------
-
- The `self' field of the cycle's primary line is the total time spent
-in all the functions of the cycle. It equals the sum of the `self'
-fields for the individual functions in the cycle, found in the entry in
-the subroutine lines for these functions.
-
- The `children' fields of the cycle's primary line and subroutine
-lines count only subroutines outside the cycle. Even though `a' calls
-`b', the time spent in those calls to `b' is not counted in `a''s
-`children' time. Thus, we do not encounter the problem of what to do
-when the time in those calls to `b' includes indirect recursive calls
-back to `a'.
-
- The `children' field of a caller-line in the cycle's entry estimates
-the amount of time spent _in the whole cycle_, and its other
-subroutines, on the times when that caller called a function in the
-cycle.
-
- The `calls' field in the primary line for the cycle has two numbers:
-first, the number of times functions in the cycle were called by
-functions outside the cycle; second, the number of times they were
-called by functions in the cycle (including times when a function in
-the cycle calls itself). This is a generalization of the usual split
-into non-recursive and recursive calls.
-
- The `calls' field of a subroutine-line for a cycle member in the
-cycle's entry says how many time that function was called from
-functions in the cycle. The total of all these is the second number in
-the primary line's `calls' field.
-
- In the individual entry for a function in a cycle, the other
-functions in the same cycle can appear as subroutines and as callers.
-These lines show how many times each function in the cycle called or
-was called from each other function in the cycle. The `self' and
-`children' fields in these lines are blank because of the difficulty of
-defining meanings for them when recursion is going on.
-
-
-File: gprof.info, Node: Line-by-line, Next: Annotated Source, Prev: Call Graph, Up: Output
-
-5.3 Line-by-line Profiling
-==========================
-
-`gprof''s `-l' option causes the program to perform "line-by-line"
-profiling. In this mode, histogram samples are assigned not to
-functions, but to individual lines of source code. The program usually
-must be compiled with a `-g' option, in addition to `-pg', in order to
-generate debugging symbols for tracking source code lines.
-
- The flat profile is the most useful output table in line-by-line
-mode. The call graph isn't as useful as normal, since the current
-version of `gprof' does not propagate call graph arcs from source code
-lines to the enclosing function. The call graph does, however, show
-each line of code that called each function, along with a count.
-
- Here is a section of `gprof''s output, without line-by-line
-profiling. Note that `ct_init' accounted for four histogram hits, and
-13327 calls to `init_block'.
-
- Flat profile:
-
- Each sample counts as 0.01 seconds.
- % cumulative self self total
- time seconds seconds calls us/call us/call name
- 30.77 0.13 0.04 6335 6.31 6.31 ct_init
-
-
- Call graph (explanation follows)
-
-
- granularity: each sample hit covers 4 byte(s) for 7.69% of 0.13 seconds
-
- index % time self children called name
-
- 0.00 0.00 1/13496 name_too_long
- 0.00 0.00 40/13496 deflate
- 0.00 0.00 128/13496 deflate_fast
- 0.00 0.00 13327/13496 ct_init
- [7] 0.0 0.00 0.00 13496 init_block
-
- Now let's look at some of `gprof''s output from the same program run,
-this time with line-by-line profiling enabled. Note that `ct_init''s
-four histogram hits are broken down into four lines of source code -
-one hit occurred on each of lines 349, 351, 382 and 385. In the call
-graph, note how `ct_init''s 13327 calls to `init_block' are broken down
-into one call from line 396, 3071 calls from line 384, 3730 calls from
-line 385, and 6525 calls from 387.
-
- Flat profile:
-
- Each sample counts as 0.01 seconds.
- % cumulative self
- time seconds seconds calls name
- 7.69 0.10 0.01 ct_init (trees.c:349)
- 7.69 0.11 0.01 ct_init (trees.c:351)
- 7.69 0.12 0.01 ct_init (trees.c:382)
- 7.69 0.13 0.01 ct_init (trees.c:385)
-
-
- Call graph (explanation follows)
-
-
- granularity: each sample hit covers 4 byte(s) for 7.69% of 0.13 seconds
-
- % time self children called name
-
- 0.00 0.00 1/13496 name_too_long (gzip.c:1440)
- 0.00 0.00 1/13496 deflate (deflate.c:763)
- 0.00 0.00 1/13496 ct_init (trees.c:396)
- 0.00 0.00 2/13496 deflate (deflate.c:727)
- 0.00 0.00 4/13496 deflate (deflate.c:686)
- 0.00 0.00 5/13496 deflate (deflate.c:675)
- 0.00 0.00 12/13496 deflate (deflate.c:679)
- 0.00 0.00 16/13496 deflate (deflate.c:730)
- 0.00 0.00 128/13496 deflate_fast (deflate.c:654)
- 0.00 0.00 3071/13496 ct_init (trees.c:384)
- 0.00 0.00 3730/13496 ct_init (trees.c:385)
- 0.00 0.00 6525/13496 ct_init (trees.c:387)
- [6] 0.0 0.00 0.00 13496 init_block (trees.c:408)
-
-
-File: gprof.info, Node: Annotated Source, Prev: Line-by-line, Up: Output
-
-5.4 The Annotated Source Listing
-================================
-
-`gprof''s `-A' option triggers an annotated source listing, which lists
-the program's source code, each function labeled with the number of
-times it was called. You may also need to specify the `-I' option, if
-`gprof' can't find the source code files.
-
- Compiling with `gcc ... -g -pg -a' augments your program with
-basic-block counting code, in addition to function counting code. This
-enables `gprof' to determine how many times each line of code was
-executed. For example, consider the following function, taken from
-gzip, with line numbers added:
-
- 1 ulg updcrc(s, n)
- 2 uch *s;
- 3 unsigned n;
- 4 {
- 5 register ulg c;
- 6
- 7 static ulg crc = (ulg)0xffffffffL;
- 8
- 9 if (s == NULL) {
- 10 c = 0xffffffffL;
- 11 } else {
- 12 c = crc;
- 13 if (n) do {
- 14 c = crc_32_tab[...];
- 15 } while (--n);
- 16 }
- 17 crc = c;
- 18 return c ^ 0xffffffffL;
- 19 }
-
- `updcrc' has at least five basic-blocks. One is the function
-itself. The `if' statement on line 9 generates two more basic-blocks,
-one for each branch of the `if'. A fourth basic-block results from the
-`if' on line 13, and the contents of the `do' loop form the fifth
-basic-block. The compiler may also generate additional basic-blocks to
-handle various special cases.
-
- A program augmented for basic-block counting can be analyzed with
-`gprof -l -A'. I also suggest use of the `-x' option, which ensures
-that each line of code is labeled at least once. Here is `updcrc''s
-annotated source listing for a sample `gzip' run:
-
- ulg updcrc(s, n)
- uch *s;
- unsigned n;
- 2 ->{
- register ulg c;
-
- static ulg crc = (ulg)0xffffffffL;
-
- 2 -> if (s == NULL) {
- 1 -> c = 0xffffffffL;
- 1 -> } else {
- 1 -> c = crc;
- 1 -> if (n) do {
- 26312 -> c = crc_32_tab[...];
- 26312,1,26311 -> } while (--n);
- }
- 2 -> crc = c;
- 2 -> return c ^ 0xffffffffL;
- 2 ->}
-
- In this example, the function was called twice, passing once through
-each branch of the `if' statement. The body of the `do' loop was
-executed a total of 26312 times. Note how the `while' statement is
-annotated. It began execution 26312 times, once for each iteration
-through the loop. One of those times (the last time) it exited, while
-it branched back to the beginning of the loop 26311 times.
-
-
-File: gprof.info, Node: Inaccuracy, Next: How do I?, Prev: Output, Up: Top
-
-6 Inaccuracy of `gprof' Output
-******************************
-
-* Menu:
-
-* Sampling Error:: Statistical margins of error
-* Assumptions:: Estimating children times
-
-
-File: gprof.info, Node: Sampling Error, Next: Assumptions, Up: Inaccuracy
-
-6.1 Statistical Sampling Error
-==============================
-
-The run-time figures that `gprof' gives you are based on a sampling
-process, so they are subject to statistical inaccuracy. If a function
-runs only a small amount of time, so that on the average the sampling
-process ought to catch that function in the act only once, there is a
-pretty good chance it will actually find that function zero times, or
-twice.
-
- By contrast, the number-of-calls and basic-block figures are derived
-by counting, not sampling. They are completely accurate and will not
-vary from run to run if your program is deterministic.
-
- The "sampling period" that is printed at the beginning of the flat
-profile says how often samples are taken. The rule of thumb is that a
-run-time figure is accurate if it is considerably bigger than the
-sampling period.
-
- The actual amount of error can be predicted. For N samples, the
-_expected_ error is the square-root of N. For example, if the sampling
-period is 0.01 seconds and `foo''s run-time is 1 second, N is 100
-samples (1 second/0.01 seconds), sqrt(N) is 10 samples, so the expected
-error in `foo''s run-time is 0.1 seconds (10*0.01 seconds), or ten
-percent of the observed value. Again, if the sampling period is 0.01
-seconds and `bar''s run-time is 100 seconds, N is 10000 samples,
-sqrt(N) is 100 samples, so the expected error in `bar''s run-time is 1
-second, or one percent of the observed value. It is likely to vary
-this much _on the average_ from one profiling run to the next.
-(_Sometimes_ it will vary more.)
-
- This does not mean that a small run-time figure is devoid of
-information. If the program's _total_ run-time is large, a small
-run-time for one function does tell you that that function used an
-insignificant fraction of the whole program's time. Usually this means
-it is not worth optimizing.
-
- One way to get more accuracy is to give your program more (but
-similar) input data so it will take longer. Another way is to combine
-the data from several runs, using the `-s' option of `gprof'. Here is
-how:
-
- 1. Run your program once.
-
- 2. Issue the command `mv gmon.out gmon.sum'.
-
- 3. Run your program again, the same as before.
-
- 4. Merge the new data in `gmon.out' into `gmon.sum' with this command:
-
- gprof -s EXECUTABLE-FILE gmon.out gmon.sum
-
- 5. Repeat the last two steps as often as you wish.
-
- 6. Analyze the cumulative data using this command:
-
- gprof EXECUTABLE-FILE gmon.sum > OUTPUT-FILE
-
-
-File: gprof.info, Node: Assumptions, Prev: Sampling Error, Up: Inaccuracy
-
-6.2 Estimating `children' Times
-===============================
-
-Some of the figures in the call graph are estimates--for example, the
-`children' time values and all the time figures in caller and
-subroutine lines.
-
- There is no direct information about these measurements in the
-profile data itself. Instead, `gprof' estimates them by making an
-assumption about your program that might or might not be true.
-
- The assumption made is that the average time spent in each call to
-any function `foo' is not correlated with who called `foo'. If `foo'
-used 5 seconds in all, and 2/5 of the calls to `foo' came from `a',
-then `foo' contributes 2 seconds to `a''s `children' time, by
-assumption.
-
- This assumption is usually true enough, but for some programs it is
-far from true. Suppose that `foo' returns very quickly when its
-argument is zero; suppose that `a' always passes zero as an argument,
-while other callers of `foo' pass other arguments. In this program,
-all the time spent in `foo' is in the calls from callers other than `a'.
-But `gprof' has no way of knowing this; it will blindly and incorrectly
-charge 2 seconds of time in `foo' to the children of `a'.
-
- We hope some day to put more complete data into `gmon.out', so that
-this assumption is no longer needed, if we can figure out how. For the
-nonce, the estimated figures are usually more useful than misleading.
-
-
-File: gprof.info, Node: How do I?, Next: Incompatibilities, Prev: Inaccuracy, Up: Top
-
-7 Answers to Common Questions
-*****************************
-
-How can I get more exact information about hot spots in my program?
- Looking at the per-line call counts only tells part of the story.
- Because `gprof' can only report call times and counts by function,
- the best way to get finer-grained information on where the program
- is spending its time is to re-factor large functions into sequences
- of calls to smaller ones. Beware however that this can introduce
- artifical hot spots since compiling with `-pg' adds a significant
- overhead to function calls. An alternative solution is to use a
- non-intrusive profiler, e.g. oprofile.
-
-How do I find which lines in my program were executed the most times?
- Compile your program with basic-block counting enabled, run it,
- then use the following pipeline:
-
- gprof -l -C OBJFILE | sort -k 3 -n -r
-
- This listing will show you the lines in your code executed most
- often, but not necessarily those that consumed the most time.
-
-How do I find which lines in my program called a particular function?
- Use `gprof -l' and lookup the function in the call graph. The
- callers will be broken down by function and line number.
-
-How do I analyze a program that runs for less than a second?
- Try using a shell script like this one:
-
- for i in `seq 1 100`; do
- fastprog
- mv gmon.out gmon.out.$i
- done
-
- gprof -s fastprog gmon.out.*
-
- gprof fastprog gmon.sum
-
- If your program is completely deterministic, all the call counts
- will be simple multiples of 100 (i.e. a function called once in
- each run will appear with a call count of 100).
-
-
-
-File: gprof.info, Node: Incompatibilities, Next: Details, Prev: How do I?, Up: Top
-
-8 Incompatibilities with Unix `gprof'
-*************************************
-
-GNU `gprof' and Berkeley Unix `gprof' use the same data file
-`gmon.out', and provide essentially the same information. But there
-are a few differences.
-
- * GNU `gprof' uses a new, generalized file format with support for
- basic-block execution counts and non-realtime histograms. A magic
- cookie and version number allows `gprof' to easily identify new
- style files. Old BSD-style files can still be read. *Note File
- Format::.
-
- * For a recursive function, Unix `gprof' lists the function as a
- parent and as a child, with a `calls' field that lists the number
- of recursive calls. GNU `gprof' omits these lines and puts the
- number of recursive calls in the primary line.
-
- * When a function is suppressed from the call graph with `-e', GNU
- `gprof' still lists it as a subroutine of functions that call it.
-
- * GNU `gprof' accepts the `-k' with its argument in the form
- `from/to', instead of `from to'.
-
- * In the annotated source listing, if there are multiple basic
- blocks on the same line, GNU `gprof' prints all of their counts,
- separated by commas.
-
- * The blurbs, field widths, and output formats are different. GNU
- `gprof' prints blurbs after the tables, so that you can see the
- tables without skipping the blurbs.
-
-
-File: gprof.info, Node: Details, Next: GNU Free Documentation License, Prev: Incompatibilities, Up: Top
-
-9 Details of Profiling
-**********************
-
-* Menu:
-
-* Implementation:: How a program collects profiling information
-* File Format:: Format of `gmon.out' files
-* Internals:: `gprof''s internal operation
-* Debugging:: Using `gprof''s `-d' option
-
-
-File: gprof.info, Node: Implementation, Next: File Format, Up: Details
-
-9.1 Implementation of Profiling
-===============================
-
-Profiling works by changing how every function in your program is
-compiled so that when it is called, it will stash away some information
-about where it was called from. From this, the profiler can figure out
-what function called it, and can count how many times it was called.
-This change is made by the compiler when your program is compiled with
-the `-pg' option, which causes every function to call `mcount' (or
-`_mcount', or `__mcount', depending on the OS and compiler) as one of
-its first operations.
-
- The `mcount' routine, included in the profiling library, is
-responsible for recording in an in-memory call graph table both its
-parent routine (the child) and its parent's parent. This is typically
-done by examining the stack frame to find both the address of the
-child, and the return address in the original parent. Since this is a
-very machine-dependent operation, `mcount' itself is typically a short
-assembly-language stub routine that extracts the required information,
-and then calls `__mcount_internal' (a normal C function) with two
-arguments - `frompc' and `selfpc'. `__mcount_internal' is responsible
-for maintaining the in-memory call graph, which records `frompc',
-`selfpc', and the number of times each of these call arcs was traversed.
-
- GCC Version 2 provides a magical function
-(`__builtin_return_address'), which allows a generic `mcount' function
-to extract the required information from the stack frame. However, on
-some architectures, most notably the SPARC, using this builtin can be
-very computationally expensive, and an assembly language version of
-`mcount' is used for performance reasons.
-
- Number-of-calls information for library routines is collected by
-using a special version of the C library. The programs in it are the
-same as in the usual C library, but they were compiled with `-pg'. If
-you link your program with `gcc ... -pg', it automatically uses the
-profiling version of the library.
-
- Profiling also involves watching your program as it runs, and
-keeping a histogram of where the program counter happens to be every
-now and then. Typically the program counter is looked at around 100
-times per second of run time, but the exact frequency may vary from
-system to system.
-
- This is done is one of two ways. Most UNIX-like operating systems
-provide a `profil()' system call, which registers a memory array with
-the kernel, along with a scale factor that determines how the program's
-address space maps into the array. Typical scaling values cause every
-2 to 8 bytes of address space to map into a single array slot. On
-every tick of the system clock (assuming the profiled program is
-running), the value of the program counter is examined and the
-corresponding slot in the memory array is incremented. Since this is
-done in the kernel, which had to interrupt the process anyway to handle
-the clock interrupt, very little additional system overhead is required.
-
- However, some operating systems, most notably Linux 2.0 (and
-earlier), do not provide a `profil()' system call. On such a system,
-arrangements are made for the kernel to periodically deliver a signal
-to the process (typically via `setitimer()'), which then performs the
-same operation of examining the program counter and incrementing a slot
-in the memory array. Since this method requires a signal to be
-delivered to user space every time a sample is taken, it uses
-considerably more overhead than kernel-based profiling. Also, due to
-the added delay required to deliver the signal, this method is less
-accurate as well.
-
- A special startup routine allocates memory for the histogram and
-either calls `profil()' or sets up a clock signal handler. This
-routine (`monstartup') can be invoked in several ways. On Linux
-systems, a special profiling startup file `gcrt0.o', which invokes
-`monstartup' before `main', is used instead of the default `crt0.o'.
-Use of this special startup file is one of the effects of using `gcc
-... -pg' to link. On SPARC systems, no special startup files are used.
-Rather, the `mcount' routine, when it is invoked for the first time
-(typically when `main' is called), calls `monstartup'.
-
- If the compiler's `-a' option was used, basic-block counting is also
-enabled. Each object file is then compiled with a static array of
-counts, initially zero. In the executable code, every time a new
-basic-block begins (i.e. when an `if' statement appears), an extra
-instruction is inserted to increment the corresponding count in the
-array. At compile time, a paired array was constructed that recorded
-the starting address of each basic-block. Taken together, the two
-arrays record the starting address of every basic-block, along with the
-number of times it was executed.
-
- The profiling library also includes a function (`mcleanup') which is
-typically registered using `atexit()' to be called as the program
-exits, and is responsible for writing the file `gmon.out'. Profiling
-is turned off, various headers are output, and the histogram is
-written, followed by the call-graph arcs and the basic-block counts.
-
- The output from `gprof' gives no indication of parts of your program
-that are limited by I/O or swapping bandwidth. This is because samples
-of the program counter are taken at fixed intervals of the program's
-run time. Therefore, the time measurements in `gprof' output say
-nothing about time that your program was not running. For example, a
-part of the program that creates so much data that it cannot all fit in
-physical memory at once may run very slowly due to thrashing, but
-`gprof' will say it uses little time. On the other hand, sampling by
-run time has the advantage that the amount of load due to other users
-won't directly affect the output you get.
-
-
-File: gprof.info, Node: File Format, Next: Internals, Prev: Implementation, Up: Details
-
-9.2 Profiling Data File Format
-==============================
-
-The old BSD-derived file format used for profile data does not contain a
-magic cookie that allows to check whether a data file really is a
-`gprof' file. Furthermore, it does not provide a version number, thus
-rendering changes to the file format almost impossible. GNU `gprof'
-uses a new file format that provides these features. For backward
-compatibility, GNU `gprof' continues to support the old BSD-derived
-format, but not all features are supported with it. For example,
-basic-block execution counts cannot be accommodated by the old file
-format.
-
- The new file format is defined in header file `gmon_out.h'. It
-consists of a header containing the magic cookie and a version number,
-as well as some spare bytes available for future extensions. All data
-in a profile data file is in the native format of the target for which
-the profile was collected. GNU `gprof' adapts automatically to the
-byte-order in use.
-
- In the new file format, the header is followed by a sequence of
-records. Currently, there are three different record types: histogram
-records, call-graph arc records, and basic-block execution count
-records. Each file can contain any number of each record type. When
-reading a file, GNU `gprof' will ensure records of the same type are
-compatible with each other and compute the union of all records. For
-example, for basic-block execution counts, the union is simply the sum
-of all execution counts for each basic-block.
-
-9.2.1 Histogram Records
------------------------
-
-Histogram records consist of a header that is followed by an array of
-bins. The header contains the text-segment range that the histogram
-spans, the size of the histogram in bytes (unlike in the old BSD
-format, this does not include the size of the header), the rate of the
-profiling clock, and the physical dimension that the bin counts
-represent after being scaled by the profiling clock rate. The physical
-dimension is specified in two parts: a long name of up to 15 characters
-and a single character abbreviation. For example, a histogram
-representing real-time would specify the long name as "seconds" and the
-abbreviation as "s". This feature is useful for architectures that
-support performance monitor hardware (which, fortunately, is becoming
-increasingly common). For example, under DEC OSF/1, the "uprofile"
-command can be used to produce a histogram of, say, instruction cache
-misses. In this case, the dimension in the histogram header could be
-set to "i-cache misses" and the abbreviation could be set to "1"
-(because it is simply a count, not a physical dimension). Also, the
-profiling rate would have to be set to 1 in this case.
-
- Histogram bins are 16-bit numbers and each bin represent an equal
-amount of text-space. For example, if the text-segment is one thousand
-bytes long and if there are ten bins in the histogram, each bin
-represents one hundred bytes.
-
-9.2.2 Call-Graph Records
-------------------------
-
-Call-graph records have a format that is identical to the one used in
-the BSD-derived file format. It consists of an arc in the call graph
-and a count indicating the number of times the arc was traversed during
-program execution. Arcs are specified by a pair of addresses: the
-first must be within caller's function and the second must be within
-the callee's function. When performing profiling at the function
-level, these addresses can point anywhere within the respective
-function. However, when profiling at the line-level, it is better if
-the addresses are as close to the call-site/entry-point as possible.
-This will ensure that the line-level call-graph is able to identify
-exactly which line of source code performed calls to a function.
-
-9.2.3 Basic-Block Execution Count Records
------------------------------------------
-
-Basic-block execution count records consist of a header followed by a
-sequence of address/count pairs. The header simply specifies the
-length of the sequence. In an address/count pair, the address
-identifies a basic-block and the count specifies the number of times
-that basic-block was executed. Any address within the basic-address can
-be used.
-
-
-File: gprof.info, Node: Internals, Next: Debugging, Prev: File Format, Up: Details
-
-9.3 `gprof''s Internal Operation
-================================
-
-Like most programs, `gprof' begins by processing its options. During
-this stage, it may building its symspec list (`sym_ids.c:sym_id_add'),
-if options are specified which use symspecs. `gprof' maintains a
-single linked list of symspecs, which will eventually get turned into
-12 symbol tables, organized into six include/exclude pairs - one pair
-each for the flat profile (INCL_FLAT/EXCL_FLAT), the call graph arcs
-(INCL_ARCS/EXCL_ARCS), printing in the call graph
-(INCL_GRAPH/EXCL_GRAPH), timing propagation in the call graph
-(INCL_TIME/EXCL_TIME), the annotated source listing
-(INCL_ANNO/EXCL_ANNO), and the execution count listing
-(INCL_EXEC/EXCL_EXEC).
-
- After option processing, `gprof' finishes building the symspec list
-by adding all the symspecs in `default_excluded_list' to the exclude
-lists EXCL_TIME and EXCL_GRAPH, and if line-by-line profiling is
-specified, EXCL_FLAT as well. These default excludes are not added to
-EXCL_ANNO, EXCL_ARCS, and EXCL_EXEC.
-
- Next, the BFD library is called to open the object file, verify that
-it is an object file, and read its symbol table (`core.c:core_init'),
-using `bfd_canonicalize_symtab' after mallocing an appropriately sized
-array of symbols. At this point, function mappings are read (if the
-`--file-ordering' option has been specified), and the core text space
-is read into memory (if the `-c' option was given).
-
- `gprof''s own symbol table, an array of Sym structures, is now built.
-This is done in one of two ways, by one of two routines, depending on
-whether line-by-line profiling (`-l' option) has been enabled. For
-normal profiling, the BFD canonical symbol table is scanned. For
-line-by-line profiling, every text space address is examined, and a new
-symbol table entry gets created every time the line number changes. In
-either case, two passes are made through the symbol table - one to
-count the size of the symbol table required, and the other to actually
-read the symbols. In between the two passes, a single array of type
-`Sym' is created of the appropriate length. Finally,
-`symtab.c:symtab_finalize' is called to sort the symbol table and
-remove duplicate entries (entries with the same memory address).
-
- The symbol table must be a contiguous array for two reasons. First,
-the `qsort' library function (which sorts an array) will be used to
-sort the symbol table. Also, the symbol lookup routine
-(`symtab.c:sym_lookup'), which finds symbols based on memory address,
-uses a binary search algorithm which requires the symbol table to be a
-sorted array. Function symbols are indicated with an `is_func' flag.
-Line number symbols have no special flags set. Additionally, a symbol
-can have an `is_static' flag to indicate that it is a local symbol.
-
- With the symbol table read, the symspecs can now be translated into
-Syms (`sym_ids.c:sym_id_parse'). Remember that a single symspec can
-match multiple symbols. An array of symbol tables (`syms') is created,
-each entry of which is a symbol table of Syms to be included or
-excluded from a particular listing. The master symbol table and the
-symspecs are examined by nested loops, and every symbol that matches a
-symspec is inserted into the appropriate syms table. This is done
-twice, once to count the size of each required symbol table, and again
-to build the tables, which have been malloced between passes. From now
-on, to determine whether a symbol is on an include or exclude symspec
-list, `gprof' simply uses its standard symbol lookup routine on the
-appropriate table in the `syms' array.
-
- Now the profile data file(s) themselves are read
-(`gmon_io.c:gmon_out_read'), first by checking for a new-style
-`gmon.out' header, then assuming this is an old-style BSD `gmon.out' if
-the magic number test failed.
-
- New-style histogram records are read by `hist.c:hist_read_rec'. For
-the first histogram record, allocate a memory array to hold all the
-bins, and read them in. When multiple profile data files (or files
-with multiple histogram records) are read, the starting address, ending
-address, number of bins and sampling rate must match between the
-various histograms, or a fatal error will result. If everything
-matches, just sum the additional histograms into the existing in-memory
-array.
-
- As each call graph record is read (`call_graph.c:cg_read_rec'), the
-parent and child addresses are matched to symbol table entries, and a
-call graph arc is created by `cg_arcs.c:arc_add', unless the arc fails
-a symspec check against INCL_ARCS/EXCL_ARCS. As each arc is added, a
-linked list is maintained of the parent's child arcs, and of the child's
-parent arcs. Both the child's call count and the arc's call count are
-incremented by the record's call count.
-
- Basic-block records are read (`basic_blocks.c:bb_read_rec'), but
-only if line-by-line profiling has been selected. Each basic-block
-address is matched to a corresponding line symbol in the symbol table,
-and an entry made in the symbol's bb_addr and bb_calls arrays. Again,
-if multiple basic-block records are present for the same address, the
-call counts are cumulative.
-
- A gmon.sum file is dumped, if requested (`gmon_io.c:gmon_out_write').
-
- If histograms were present in the data files, assign them to symbols
-(`hist.c:hist_assign_samples') by iterating over all the sample bins
-and assigning them to symbols. Since the symbol table is sorted in
-order of ascending memory addresses, we can simple follow along in the
-symbol table as we make our pass over the sample bins. This step
-includes a symspec check against INCL_FLAT/EXCL_FLAT. Depending on the
-histogram scale factor, a sample bin may span multiple symbols, in
-which case a fraction of the sample count is allocated to each symbol,
-proportional to the degree of overlap. This effect is rare for normal
-profiling, but overlaps are more common during line-by-line profiling,
-and can cause each of two adjacent lines to be credited with half a
-hit, for example.
-
- If call graph data is present, `cg_arcs.c:cg_assemble' is called.
-First, if `-c' was specified, a machine-dependent routine (`find_call')
-scans through each symbol's machine code, looking for subroutine call
-instructions, and adding them to the call graph with a zero call count.
-A topological sort is performed by depth-first numbering all the
-symbols (`cg_dfn.c:cg_dfn'), so that children are always numbered less
-than their parents, then making a array of pointers into the symbol
-table and sorting it into numerical order, which is reverse topological
-order (children appear before parents). Cycles are also detected at
-this point, all members of which are assigned the same topological
-number. Two passes are now made through this sorted array of symbol
-pointers. The first pass, from end to beginning (parents to children),
-computes the fraction of child time to propagate to each parent and a
-print flag. The print flag reflects symspec handling of
-INCL_GRAPH/EXCL_GRAPH, with a parent's include or exclude (print or no
-print) property being propagated to its children, unless they
-themselves explicitly appear in INCL_GRAPH or EXCL_GRAPH. A second
-pass, from beginning to end (children to parents) actually propagates
-the timings along the call graph, subject to a check against
-INCL_TIME/EXCL_TIME. With the print flag, fractions, and timings now
-stored in the symbol structures, the topological sort array is now
-discarded, and a new array of pointers is assembled, this time sorted
-by propagated time.
-
- Finally, print the various outputs the user requested, which is now
-fairly straightforward. The call graph (`cg_print.c:cg_print') and
-flat profile (`hist.c:hist_print') are regurgitations of values already
-computed. The annotated source listing
-(`basic_blocks.c:print_annotated_source') uses basic-block information,
-if present, to label each line of code with call counts, otherwise only
-the function call counts are presented.
-
- The function ordering code is marginally well documented in the
-source code itself (`cg_print.c'). Basically, the functions with the
-most use and the most parents are placed first, followed by other
-functions with the most use, followed by lower use functions, followed
-by unused functions at the end.
-
-
-File: gprof.info, Node: Debugging, Prev: Internals, Up: Details
-
-9.3.1 Debugging `gprof'
------------------------
-
-If `gprof' was compiled with debugging enabled, the `-d' option
-triggers debugging output (to stdout) which can be helpful in
-understanding its operation. The debugging number specified is
-interpreted as a sum of the following options:
-
-2 - Topological sort
- Monitor depth-first numbering of symbols during call graph analysis
-
-4 - Cycles
- Shows symbols as they are identified as cycle heads
-
-16 - Tallying
- As the call graph arcs are read, show each arc and how the total
- calls to each function are tallied
-
-32 - Call graph arc sorting
- Details sorting individual parents/children within each call graph
- entry
-
-64 - Reading histogram and call graph records
- Shows address ranges of histograms as they are read, and each call
- graph arc
-
-128 - Symbol table
- Reading, classifying, and sorting the symbol table from the object
- file. For line-by-line profiling (`-l' option), also shows line
- numbers being assigned to memory addresses.
-
-256 - Static call graph
- Trace operation of `-c' option
-
-512 - Symbol table and arc table lookups
- Detail operation of lookup routines
-
-1024 - Call graph propagation
- Shows how function times are propagated along the call graph
-
-2048 - Basic-blocks
- Shows basic-block records as they are read from profile data (only
- meaningful with `-l' option)
-
-4096 - Symspecs
- Shows symspec-to-symbol pattern matching operation
-
-8192 - Annotate source
- Tracks operation of `-A' option
-
-
-File: gprof.info, Node: GNU Free Documentation License, Prev: Details, Up: Top
-
-10 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:
-
- 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.
-
-
-
-Tag Table:
-Node: Top735
-Node: Introduction1974
-Node: Compiling4304
-Node: Executing8522
-Node: Invoking11314
-Node: Output Options12729
-Node: Analysis Options19751
-Node: Miscellaneous Options22953
-Node: Deprecated Options24186
-Node: Symspecs26265
-Node: Output28091
-Node: Flat Profile29117
-Node: Call Graph34047
-Node: Primary37262
-Node: Callers39803
-Node: Subroutines41920
-Node: Cycles43729
-Node: Line-by-line50503
-Node: Annotated Source54237
-Node: Inaccuracy57093
-Node: Sampling Error57351
-Node: Assumptions59921
-Node: How do I?61390
-Node: Incompatibilities63206
-Node: Details64674
-Node: Implementation65067
-Node: File Format70964
-Node: Internals75254
-Node: Debugging83631
-Node: GNU Free Documentation License85236
-
-End Tag Table
diff --git a/gprof/gprof.texi b/gprof/gprof.texi
index a81b109ec523..e609ffec9e91 100644
--- a/gprof/gprof.texi
+++ b/gprof/gprof.texi
@@ -1,10 +1,15 @@
\input texinfo @c -*-texinfo-*-
@setfilename gprof.info
-@c Copyright 1988, 1992, 1993, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+@c Copyright 1988, 1992, 1993, 1998, 1999, 2000, 2001, 2002, 2003,
+@c 2004, 2007
@c Free Software Foundation, Inc.
@settitle GNU gprof
@setchapternewpage odd
+@c man begin INCLUDE
+@include bfdver.texi
+@c man end
+
@ifinfo
@c This is a dir.info fragment to support semi-automated addition of
@c manuals to an info tree. zoo@cygnus.com is developing this facility.
@@ -15,29 +20,21 @@ END-INFO-DIR-ENTRY
@end format
@end ifinfo
-@ifinfo
+@copying
This file documents the gprof profiler of the GNU system.
@c man begin COPYRIGHT
-Copyright (C) 1988, 92, 97, 98, 99, 2000, 2001, 2003 Free Software Foundation, Inc.
+Copyright @copyright{} 1988, 92, 97, 98, 99, 2000, 2001, 2003, 2007 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".
+section entitled ``GNU Free Documentation License''.
@c man end
-
-@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
+@end copying
@finalout
@smallbook
@@ -45,6 +42,10 @@ notice identical to this one except for the removal of this paragraph
@titlepage
@title GNU gprof
@subtitle The @sc{gnu} Profiler
+@ifset VERSION_PACKAGE
+@subtitle @value{VERSION_PACKAGE}
+@end ifset
+@subtitle Version @value{VERSION}
@author Jay Fenlason and Richard Stallman
@page
@@ -63,9 +64,10 @@ Copyright @copyright{} 1988, 92, 97, 98, 99, 2000, 2003 Free Software Foundation
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".
+ section entitled ``GNU Free Documentation License''.
@end titlepage
+@contents
@ifnottex
@node Top
@@ -76,9 +78,15 @@ can use it to determine which parts of a program are taking most of the
execution time. We assume that you know how to write, compile, and
execute programs. @sc{gnu} @code{gprof} was written by Jay Fenlason.
+This manual is for @code{gprof}
+@ifset VERSION_PACKAGE
+@value{VERSION_PACKAGE}
+@end ifset
+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".
+section entitled ``GNU Free Documentation License''.
@menu
* Introduction:: What profiling means, and why it is useful.
@@ -87,7 +95,7 @@ section entitled "GNU Free Documentation License".
* Executing:: Executing your program to generate profile data
* Invoking:: How to run @code{gprof}, and its options
-* Output:: Interpreting @code{gprof}'s output
+* Output:: Interpreting @code{gprof}'s output
* Inaccuracy:: Potential problems you should be aware of
* How do I?:: Answers to common questions
@@ -113,7 +121,7 @@ gprof [ -[abcDhilLrsTvwxyz] ] [ -[ACeEfFJnNOpPqQZ][@var{name}] ]
[ --[no-]flat-profile[=@var{name}] ] [ --[no-]graph[=@var{name}] ]
[ --[no-]time=@var{name}] [ --all-lines ] [ --brief ]
[ --debug[=@var{level}] ] [ --function-ordering ]
- [ --file-ordering ] [ --directory-path=@var{dirs} ]
+ [ --file-ordering @var{map_file} ] [ --directory-path=@var{dirs} ]
[ --display-unused-functions ] [ --file-format=@var{name} ]
[ --file-info ] [ --help ] [ --line ] [ --min-count=@var{n} ]
[ --no-static ] [ --print-path ] [ --separate-files ]
@@ -216,15 +224,15 @@ Profiling has several steps:
@itemize @bullet
@item
You must compile and link your program with profiling enabled.
-@xref{Compiling}.
+@xref{Compiling, ,Compiling a Program for Profiling}.
@item
You must execute your program to generate a profile data file.
-@xref{Executing}.
+@xref{Executing, ,Executing the Program}.
@item
You must run @code{gprof} to analyze the profile data.
-@xref{Invoking}.
+@xref{Invoking, ,@code{gprof} Command Summary}.
@end itemize
The next three chapters explain these steps in greater detail.
@@ -236,22 +244,23 @@ Several forms of output are available from the analysis.
The @dfn{flat profile} shows how much time your program spent in each function,
and how many times that function was called. If you simply want to know
which functions burn most of the cycles, it is stated concisely here.
-@xref{Flat Profile}.
+@xref{Flat Profile, ,The Flat Profile}.
The @dfn{call graph} shows, for each function, which functions called it, which
other functions it called, and how many times. There is also an estimate
of how much time was spent in the subroutines of each function. This can
suggest places where you might try to eliminate function calls that use a
-lot of time. @xref{Call Graph}.
+lot of time. @xref{Call Graph, ,The Call Graph}.
The @dfn{annotated source} listing is a copy of the program's
source code, labeled with the number of times each line of the
-program was executed. @xref{Annotated Source}.
+program was executed. @xref{Annotated Source, ,The Annotated Source
+Listing}.
@c man end
To better understand how profiling works, you may wish to read
a description of its implementation.
-@xref{Implementation}.
+@xref{Implementation, ,Implementation of Profiling}.
@node Compiling
@chapter Compiling a Program for Profiling
@@ -300,8 +309,6 @@ Each sample counts as 0.01 seconds.
44.12 0.07 0.07 zazLoop
35.29 0.14 0.06 main
20.59 0.17 0.04 bazMillion
-
- % the percentage of the total running time of the
@end example
If you run the linker @code{ld} directly instead of through a compiler
@@ -327,30 +334,17 @@ will not affect the flat profile (except that the @code{calls} field for
the functions will be blank), but will greatly reduce the usefulness of the
call graph.
-If you wish to perform line-by-line profiling,
-you will also need to specify the @samp{-g} option,
-instructing the compiler to insert debugging symbols into the program
-that match program addresses to source code lines.
-@xref{Line-by-line}.
-
-In addition to the @samp{-pg} and @samp{-g} options, older versions of
-GCC required you to specify the @samp{-a} option when compiling in
-order to instrument it to perform basic-block counting. Newer
-versions do not require this option and will not accept it;
-basic-block counting is always enabled when @samp{-pg} is on.
-
-When basic-block counting is enabled, as the program runs
-it will count how many times it executed each branch of each @samp{if}
-statement, each iteration of each @samp{do} loop, etc. This will
-enable @code{gprof} to construct an annotated source code
-listing showing how many times each line of code was executed.
-
-It also worth noting that GCC supports a different profiling method
-which is enabled by the @samp{-fprofile-arcs}, @samp{-ftest-coverage}
-and @samp{-fprofile-values} switches. These switches do not produce
-data which is useful to @code{gprof} however, so they are not
-discussed further here. There is also the
-@samp{-finstrument-functions} switch which will cause GCC to insert
+If you wish to perform line-by-line profiling you should use the
+@code{gcov} tool instead of @code{gprof}. See that tool's manual or
+info pages for more details of how to do this.
+
+Note, older versions of @code{gcc} produce line-by-line profiling
+information that works with @code{gprof} rather than @code{gcov} so
+there is still support for displaying this kind of information in
+@code{gprof}. @xref{Line-by-line, ,Line-by-line Profiling}.
+
+It also worth noting that @code{gcc} implements a
+@samp{-finstrument-functions} command line option which will insert
calls to special user supplied instrumentation routines at the entry
and exit of every function in their program. This can be used to
implement an alternative profiling scheme.
@@ -362,7 +356,7 @@ Once the program is compiled for profiling, you must run it in order to
generate the information that @code{gprof} needs. Simply run the program
as usual, using the normal arguments, file names, etc. The program should
run normally, producing the same output as usual. It will, however, run
-somewhat slower than normal because of the time spent collecting and the
+somewhat slower than normal because of the time spent collecting and
writing the profile data.
The way you run the program---the arguments and input that you give
@@ -442,14 +436,14 @@ The order of these options does not matter.
@menu
* Output Options:: Controlling @code{gprof}'s output style
-* Analysis Options:: Controlling how @code{gprof} analyses its data
+* Analysis Options:: Controlling how @code{gprof} analyzes its data
* Miscellaneous Options::
* Deprecated Options:: Options you no longer need to use, but which
have been retained for compatibility
* Symspecs:: Specifying functions to include or exclude
@end menu
-@node Output Options,Analysis Options,,Invoking
+@node Output Options
@section Output Options
@c man begin OPTIONS
@@ -459,7 +453,7 @@ These options specify which of several output formats
Many of these options take an optional @dfn{symspec} to specify
functions to be included or excluded. These options can be
specified multiple times, with different symspecs, to include
-or exclude sets of symbols. @xref{Symspecs}.
+or exclude sets of symbols. @xref{Symspecs, ,Symspecs}.
Specifying any of these options overrides the default (@samp{-p -q}),
which prints a flat profile and call graph analysis
@@ -471,7 +465,7 @@ for all functions.
@itemx --annotated-source[=@var{symspec}]
The @samp{-A} option causes @code{gprof} to print annotated source code.
If @var{symspec} is specified, print output only for matching symbols.
-@xref{Annotated Source}.
+@xref{Annotated Source, ,The Annotated Source Listing}.
@item -b
@itemx --brief
@@ -524,7 +518,7 @@ was invoked.
@itemx --flat-profile[=@var{symspec}]
The @samp{-p} option causes @code{gprof} to print a flat profile.
If @var{symspec} is specified, print flat profile only for matching symbols.
-@xref{Flat Profile}.
+@xref{Flat Profile, ,The Flat Profile}.
@item -P[@var{symspec}]
@itemx --no-flat-profile[=@var{symspec}]
@@ -537,7 +531,7 @@ but excludes matching symbols.
The @samp{-q} option causes @code{gprof} to print the call graph analysis.
If @var{symspec} is specified, print call graph only for matching symbols
and their children.
-@xref{Call Graph}.
+@xref{Call Graph, ,The Call Graph}.
@item -Q[@var{symspec}]
@itemx --no-graph[=@var{symspec}]
@@ -559,7 +553,7 @@ Normally, @code{gprof} prints annotated source files
to standard-output. If this option is specified,
annotated source for a file named @file{path/@var{filename}}
is generated in the file @file{@var{filename}-ann}. If the underlying
-filesystem would truncate @file{@var{filename}-ann} so that it
+file system would truncate @file{@var{filename}-ann} so that it
overwrites the original @file{@var{filename}}, @code{gprof} generates
annotated source in the file @file{@var{filename}.ann} instead (if the
original file name has an extension, that extension is @emph{replaced}
@@ -643,7 +637,7 @@ argument can be used to choose an appropriate demangling style for your
compiler.
@end table
-@node Analysis Options,Miscellaneous Options,Output Options,Invoking
+@node Analysis Options
@section Analysis Options
@table @code
@@ -654,7 +648,7 @@ The @samp{-a} option causes @code{gprof} to suppress the printing of
statically declared (private) functions. (These are functions whose
names are not listed as global, and which are not visible outside the
file/function/block where they were defined.) Time spent in these
-functions, calls to/from them, etc, will all be attributed to the
+functions, calls to/from them, etc., will all be attributed to the
function that was loaded directly before it in the executable file.
@c This is compatible with Unix @code{gprof}, but a bad idea.
This option affects both the flat profile and the call graph.
@@ -689,7 +683,10 @@ symbols matching symspec @var{from} to those matching symspec @var{to}.
@itemx --line
The @samp{-l} option enables line-by-line profiling, which causes
histogram hits to be charged to individual source code lines,
-instead of functions.
+instead of functions. This feature only works with programs compiled
+by older versions of the @code{gcc} compiler. Newer versions of
+@code{gcc} are designed to work with the @code{gcov} tool instead.
+
If the program was compiled with basic-block counting enabled,
this option will also identify how many times each line of
code was executed.
@@ -697,20 +694,20 @@ While line-by-line profiling can help isolate where in a large function
a program is spending its time, it also significantly increases
the running time of @code{gprof}, and magnifies statistical
inaccuracies.
-@xref{Sampling Error}.
+@xref{Sampling Error, ,Statistical Sampling Error}.
@item -m @var{num}
@itemx --min-count=@var{num}
This option affects execution count output only.
Symbols that are executed less than @var{num} times are suppressed.
-@item -n[@var{symspec}]
-@itemx --time[=@var{symspec}]
+@item -n@var{symspec}
+@itemx --time=@var{symspec}
The @samp{-n} option causes @code{gprof}, in its call graph analysis,
to only propagate times for symbols matching @var{symspec}.
-@item -N[@var{symspec}]
-@itemx --no-time[=@var{symspec}]
+@item -N@var{symspec}
+@itemx --no-time=@var{symspec}
The @samp{-n} option causes @code{gprof}, in its call graph analysis,
not to propagate times for symbols matching @var{symspec}.
@@ -723,7 +720,7 @@ that had no time spent in them. This is useful in conjunction with the
@end table
-@node Miscellaneous Options,Deprecated Options,Analysis Options,Invoking
+@node Miscellaneous Options
@section Miscellaneous Options
@table @code
@@ -732,7 +729,7 @@ that had no time spent in them. This is useful in conjunction with the
@itemx --debug[=@var{num}]
The @samp{-d @var{num}} option specifies debugging options.
If @var{num} is not specified, enable all debugging.
-@xref{Debugging}.
+@xref{Debugging, ,Debugging @code{gprof}}.
@item -h
@itemx --help
@@ -763,7 +760,7 @@ number, and then exit.
@end table
-@node Deprecated Options,Symspecs,Miscellaneous Options,Invoking
+@node Deprecated Options
@section Deprecated Options
@table @code
@@ -817,7 +814,7 @@ gprof -e boring -f foo -f bar myprogram > gprof.output
lists in the call graph all functions that were reached from either
@code{foo} or @code{bar} and were not reachable from @code{boring}.
-@node Symspecs,,Deprecated Options,Invoking
+@node Symspecs
@section Symspecs
Many of the output options allow functions to be included or excluded
@@ -878,7 +875,7 @@ most important of which are described below. The simplest output
styles (file information, execution count, and function and file ordering)
are not described here, but are documented with the respective options
that trigger them.
-@xref{Output Options}.
+@xref{Output Options, ,Output Options}.
@menu
* Flat Profile:: The flat profile shows how much time was spent
@@ -892,7 +889,7 @@ that trigger them.
@end menu
-@node Flat Profile,Call Graph,,Output
+@node Flat Profile
@section The Flat Profile
@cindex flat profile
@@ -932,7 +929,7 @@ Each sample counts as 0.01 seconds.
@end smallexample
@noindent
-The functions are sorted by first by decreasing run-time spent in them,
+The functions are sorted first by decreasing run-time spent in them,
then by decreasing number of calls, then alphabetically by name. The
functions @samp{mcount} and @samp{profil} are part of the profiling
apparatus and appear in every flat profile; their time gives a measure of
@@ -957,7 +954,8 @@ be regarded as particularly reliable.
In another run,
the @samp{self seconds} field for
@samp{mcount} might well be @samp{0.00} or @samp{0.02}.
-@xref{Sampling Error}, for a complete discussion.
+@xref{Sampling Error, ,Statistical Sampling Error},
+for a complete discussion.
The remaining functions in the listing (those whose
@samp{self seconds} field is @samp{0.00}) didn't appear
@@ -1007,7 +1005,7 @@ field alphabetically after the @dfn{self seconds} and @dfn{calls}
fields are sorted.
@end table
-@node Call Graph,Line-by-line,Flat Profile,Output
+@node Call Graph
@section The Call Graph
@cindex call graph
@@ -1018,7 +1016,7 @@ functions that did use unusual amounts of time.
Here is a sample call from a small program. This call came from the
same @code{gprof} run as the flat profile example in the previous
-chapter.
+section.
@smallexample
@group
@@ -1046,7 +1044,7 @@ index % time self children called name
0.00 0.00 8/8 chewtime [24]
0.00 0.00 8/16 skipspace [44]
-----------------------------------------------
-[4] 59.8 0.01 0.02 8+472 <cycle 2 as a whole> [4]
+[4] 59.8 0.01 0.02 8+472 <cycle 2 as a whole> [4]
0.01 0.02 244+260 offtime <cycle 2> [7]
0.00 0.00 236+1 tzset <cycle 2> [26]
-----------------------------------------------
@@ -1064,8 +1062,8 @@ function and the following lines describe its subroutines (also called
The entries are sorted by time spent in the function and its subroutines.
-The internal profiling function @code{mcount} (@pxref{Flat Profile})
-is never mentioned in the call graph.
+The internal profiling function @code{mcount} (@pxref{Flat Profile, ,The
+Flat Profile}) is never mentioned in the call graph.
@menu
* Primary:: Details of the primary line's contents.
@@ -1141,7 +1139,8 @@ repeated after it.
If the function is part of a cycle of recursion, the cycle number is
printed between the function's name and the index number
-(@pxref{Cycles}). For example, if function @code{gnurr} is part of
+(@pxref{Cycles, ,How Mutually Recursive Functions Are Described}).
+For example, if function @code{gnurr} is part of
cycle number one, and has index number twelve, its primary line would
be end like this:
@@ -1150,7 +1149,7 @@ gnurr <cycle 1> [12]
@end example
@end table
-@node Callers, Subroutines, Primary, Call Graph
+@node Callers
@subsection Lines for a Function's Callers
A function's entry has a line for each function it was called by.
@@ -1208,7 +1207,7 @@ signal handlers.
@c What if some calls have determinable callers' names but not all?
@c FIXME - still relevant?
-@node Subroutines, Cycles, Callers, Call Graph
+@node Subroutines
@subsection Lines for a Function's Subroutines
A function's entry has a line for each of its subroutines---in other
@@ -1247,7 +1246,7 @@ Two numbers, the number of calls to @code{report} from @code{main}
followed by the total number of non-recursive calls to @code{report}.
This ratio is used to determine how much of @code{report}'s @code{self}
and @code{children} time gets credited to @code{main}.
-@xref{Assumptions}.
+@xref{Assumptions, ,Estimating @code{children} Times}.
@item name
The name of the subroutine of @code{main} to which this line applies,
@@ -1257,7 +1256,7 @@ If the caller is part of a recursion cycle, the cycle number is
printed between the name and the index number.
@end table
-@node Cycles,, Subroutines, Call Graph
+@node Cycles
@subsection How Mutually Recursive Functions Are Described
@cindex cycle
@cindex recursion cycle
@@ -1373,17 +1372,17 @@ The @code{children} field of a caller-line in the cycle's entry estimates
the amount of time spent @emph{in the whole cycle}, and its other
subroutines, on the times when that caller called a function in the cycle.
-The @code{calls} field in the primary line for the cycle has two numbers:
+The @code{called} field in the primary line for the cycle has two numbers:
first, the number of times functions in the cycle were called by functions
outside the cycle; second, the number of times they were called by
functions in the cycle (including times when a function in the cycle calls
itself). This is a generalization of the usual split into non-recursive and
recursive calls.
-The @code{calls} field of a subroutine-line for a cycle member in the
+The @code{called} field of a subroutine-line for a cycle member in the
cycle's entry says how many time that function was called from functions in
the cycle. The total of all these is the second number in the primary line's
-@code{calls} field.
+@code{called} field.
In the individual entry for a function in a cycle, the other functions in
the same cycle can appear as subroutines and as callers. These lines show
@@ -1392,15 +1391,22 @@ function in the cycle. The @code{self} and @code{children} fields in these
lines are blank because of the difficulty of defining meanings for them
when recursion is going on.
-@node Line-by-line,Annotated Source,Call Graph,Output
+@node Line-by-line
@section Line-by-line Profiling
@code{gprof}'s @samp{-l} option causes the program to perform
@dfn{line-by-line} profiling. In this mode, histogram
samples are assigned not to functions, but to individual
-lines of source code. The program usually must be compiled
-with a @samp{-g} option, in addition to @samp{-pg}, in order
+lines of source code. This only works with programs compiled with
+older versions of the @code{gcc} compiler. Newer versions of @code{gcc}
+use a different program - @code{gcov} - to display line-by-line
+profiling information.
+
+With the older versions of @code{gcc} the program usually has to be
+compiled with a @samp{-g} option, in addition to @samp{-pg}, in order
to generate debugging symbols for tracking source code lines.
+Note, in much older versions of @code{gcc} the program had to be
+compiled with the @samp{-a} command line option as well.
The flat profile is the most useful output table
in line-by-line mode.
@@ -1440,7 +1446,7 @@ index % time self children called name
Now let's look at some of @code{gprof}'s output from the same program run,
this time with line-by-line profiling enabled. Note that @code{ct_init}'s
-four histogram hits are broken down into four lines of source code - one hit
+four histogram hits are broken down into four lines of source code---one hit
occurred on each of lines 349, 351, 382 and 385. In the call graph,
note how
@code{ct_init}'s 13327 calls to @code{init_block} are broken down
@@ -1483,7 +1489,7 @@ granularity: each sample hit covers 4 byte(s) for 7.69% of 0.13 seconds
@end smallexample
-@node Annotated Source,,Line-by-line,Output
+@node Annotated Source
@section The Annotated Source Listing
@code{gprof}'s @samp{-A} option triggers an annotated source listing,
@@ -1491,10 +1497,13 @@ which lists the program's source code, each function labeled with the
number of times it was called. You may also need to specify the
@samp{-I} option, if @code{gprof} can't find the source code files.
-Compiling with @samp{gcc @dots{} -g -pg -a} augments your program
-with basic-block counting code, in addition to function counting code.
-This enables @code{gprof} to determine how many times each line
-of code was executed.
+With older versions of @code{gcc} compiling with @samp{gcc @dots{} -g
+-pg -a} augments your program with basic-block counting code, in
+addition to function counting code. This enables @code{gprof} to
+determine how many times each line of code was executed. With newer
+versions of @code{gcc} support for displaying basic-block counts is
+provided by the @code{gcov} program.
+
For example, consider the following function, taken from gzip,
with line numbers added:
@@ -1530,8 +1539,9 @@ the fifth basic-block. The compiler may also generate additional
basic-blocks to handle various special cases.
A program augmented for basic-block counting can be analyzed with
-@samp{gprof -l -A}. I also suggest use of the @samp{-x} option,
-which ensures that each line of code is labeled at least once.
+@samp{gprof -l -A}.
+The @samp{-x} option is also helpful,
+to ensure that each line of code is labeled at least once.
Here is @code{updcrc}'s
annotated source listing for a sample @code{gzip} run:
@@ -1545,9 +1555,9 @@ annotated source listing for a sample @code{gzip} run:
static ulg crc = (ulg)0xffffffffL;
2 -> if (s == NULL) @{
- 1 -> c = 0xffffffffL;
+ 1 -> c = 0xffffffffL;
1 -> @} else @{
- 1 -> c = crc;
+ 1 -> c = crc;
1 -> if (n) do @{
26312 -> c = crc_32_tab[...];
26312,1,26311 -> @} while (--n);
@@ -1572,7 +1582,7 @@ it exited, while it branched back to the beginning of the loop 26311 times.
* Assumptions:: Estimating children times
@end menu
-@node Sampling Error,Assumptions,,Inaccuracy
+@node Sampling Error
@section Statistical Sampling Error
The run-time figures that @code{gprof} gives you are based on a sampling
@@ -1643,7 +1653,7 @@ gprof @var{executable-file} gmon.sum > @var{output-file}
@end example
@end enumerate
-@node Assumptions,,Sampling Error,Inaccuracy
+@node Assumptions
@section Estimating @code{children} Times
Some of the figures in the call graph are estimates---for example, the
@@ -1672,7 +1682,7 @@ incorrectly charge 2 seconds of time in @code{foo} to the children of
@c FIXME - has this been fixed?
We hope some day to put more complete data into @file{gmon.out}, so that
this assumption is no longer needed, if we can figure out how. For the
-nonce, the estimated figures are usually more useful than misleading.
+novice, the estimated figures are usually more useful than misleading.
@node How do I?
@chapter Answers to Common Questions
@@ -1685,21 +1695,13 @@ Because @code{gprof} can only report call times and counts by function,
the best way to get finer-grained information on where the program
is spending its time is to re-factor large functions into sequences
of calls to smaller ones. Beware however that this can introduce
-artifical hot spots since compiling with @samp{-pg} adds a significant
+artificial hot spots since compiling with @samp{-pg} adds a significant
overhead to function calls. An alternative solution is to use a
non-intrusive profiler, e.g.@: oprofile.
@item How do I find which lines in my program were executed the most times?
-Compile your program with basic-block counting enabled, run it, then
-use the following pipeline:
-
-@example
-gprof -l -C @var{objfile} | sort -k 3 -n -r
-@end example
-
-This listing will show you the lines in your code executed most often,
-but not necessarily those that consumed the most time.
+Use the @code{gcov} program.
@item How do I find which lines in my program called a particular function?
@@ -1722,7 +1724,7 @@ gprof fastprog gmon.sum
@end example
If your program is completely deterministic, all the call counts
-will be simple multiples of 100 (i.e. a function called once in
+will be simple multiples of 100 (i.e., a function called once in
each run will appear with a call count of 100).
@end table
@@ -1740,7 +1742,7 @@ there are a few differences.
for basic-block execution counts and non-realtime histograms. A magic
cookie and version number allows @code{gprof} to easily identify
new style files. Old BSD-style files can still be read.
-@xref{File Format}.
+@xref{File Format, ,Profiling Data File Format}.
@item
For a recursive function, Unix @code{gprof} lists the function as a
@@ -1784,7 +1786,7 @@ tables without skipping the blurbs.
* Debugging:: Using @code{gprof}'s @samp{-d} option
@end menu
-@node Implementation,File Format,,Details
+@node Implementation
@section Implementation of Profiling
Profiling works by changing how every function in your program is compiled
@@ -1805,7 +1807,7 @@ Since this is a very machine-dependent operation, @code{mcount}
itself is typically a short assembly-language stub routine
that extracts the required
information, and then calls @code{__mcount_internal}
-(a normal C function) with two arguments - @code{frompc} and @code{selfpc}.
+(a normal C function) with two arguments---@code{frompc} and @code{selfpc}.
@code{__mcount_internal} is responsible for maintaining
the in-memory call graph, which records @code{frompc}, @code{selfpc},
and the number of times each of these call arcs was traversed.
@@ -1872,7 +1874,7 @@ If the compiler's @samp{-a} option was used, basic-block counting
is also enabled. Each object file is then compiled with a static array
of counts, initially zero.
In the executable code, every time a new basic-block begins
-(i.e. when an @code{if} statement appears), an extra instruction
+(i.e., when an @code{if} statement appears), an extra instruction
is inserted to increment the corresponding count in the array.
At compile time, a paired array was constructed that recorded
the starting address of each basic-block. Taken together,
@@ -1896,7 +1898,7 @@ slowly due to thrashing, but @code{gprof} will say it uses little time. On
the other hand, sampling by run time has the advantage that the amount of
load due to other users won't directly affect the output you get.
-@node File Format,Internals,Implementation,Details
+@node File Format
@section Profiling Data File Format
The old BSD-derived file format used for profile data does not contain a
@@ -1936,13 +1938,13 @@ represent after being scaled by the profiling clock rate. The
physical dimension is specified in two parts: a long name of up to 15
characters and a single character abbreviation. For example, a
histogram representing real-time would specify the long name as
-"seconds" and the abbreviation as "s". This feature is useful for
+``seconds'' and the abbreviation as ``s''. This feature is useful for
architectures that support performance monitor hardware (which,
fortunately, is becoming increasingly common). For example, under DEC
-OSF/1, the "uprofile" command can be used to produce a histogram of,
+OSF/1, the ``uprofile'' command can be used to produce a histogram of,
say, instruction cache misses. In this case, the dimension in the
-histogram header could be set to "i-cache misses" and the abbreviation
-could be set to "1" (because it is simply a count, not a physical
+histogram header could be set to ``i-cache misses'' and the abbreviation
+could be set to ``1'' (because it is simply a count, not a physical
dimension). Also, the profiling rate would have to be set to 1 in
this case.
@@ -1976,16 +1978,16 @@ identifies a basic-block and the count specifies the number of times
that basic-block was executed. Any address within the basic-address can
be used.
-@node Internals,Debugging,File Format,Details
+@node Internals
@section @code{gprof}'s Internal Operation
Like most programs, @code{gprof} begins by processing its options.
During this stage, it may building its symspec list
-(@code{sym_ids.c:sym_id_add}), if
+(@code{sym_ids.c:@-sym_id_add}), if
options are specified which use symspecs.
@code{gprof} maintains a single linked list of symspecs,
which will eventually get turned into 12 symbol tables,
-organized into six include/exclude pairs - one
+organized into six include/exclude pairs---one
pair each for the flat profile (INCL_FLAT/EXCL_FLAT),
the call graph arcs (INCL_ARCS/EXCL_ARCS),
printing in the call graph (INCL_GRAPH/EXCL_GRAPH),
@@ -2002,7 +2004,7 @@ These default excludes are not added to EXCL_ANNO, EXCL_ARCS, and EXCL_EXEC.
Next, the BFD library is called to open the object file,
verify that it is an object file,
-and read its symbol table (@code{core.c:core_init}),
+and read its symbol table (@code{core.c:@-core_init}),
using @code{bfd_canonicalize_symtab} after mallocing
an appropriately sized array of symbols. At this point,
function mappings are read (if the @samp{--file-ordering} option
@@ -2019,18 +2021,18 @@ For line-by-line profiling, every
text space address is examined, and a new symbol table entry
gets created every time the line number changes.
In either case, two passes are made through the symbol
-table - one to count the size of the symbol table required,
+table---one to count the size of the symbol table required,
and the other to actually read the symbols. In between the
two passes, a single array of type @code{Sym} is created of
the appropriate length.
-Finally, @code{symtab.c:symtab_finalize}
+Finally, @code{symtab.c:@-symtab_finalize}
is called to sort the symbol table and remove duplicate entries
(entries with the same memory address).
The symbol table must be a contiguous array for two reasons.
First, the @code{qsort} library function (which sorts an array)
will be used to sort the symbol table.
-Also, the symbol lookup routine (@code{symtab.c:sym_lookup}),
+Also, the symbol lookup routine (@code{symtab.c:@-sym_lookup}),
which finds symbols
based on memory address, uses a binary search algorithm
which requires the symbol table to be a sorted array.
@@ -2040,7 +2042,7 @@ Additionally, a symbol can have an @code{is_static} flag
to indicate that it is a local symbol.
With the symbol table read, the symspecs can now be translated
-into Syms (@code{sym_ids.c:sym_id_parse}). Remember that a single
+into Syms (@code{sym_ids.c:@-sym_id_parse}). Remember that a single
symspec can match multiple symbols.
An array of symbol tables
(@code{syms}) is created, each entry of which is a symbol table
@@ -2056,32 +2058,33 @@ standard symbol lookup routine on the appropriate table
in the @code{syms} array.
Now the profile data file(s) themselves are read
-(@code{gmon_io.c:gmon_out_read}),
+(@code{gmon_io.c:@-gmon_out_read}),
first by checking for a new-style @samp{gmon.out} header,
then assuming this is an old-style BSD @samp{gmon.out}
if the magic number test failed.
-New-style histogram records are read by @code{hist.c:hist_read_rec}.
+New-style histogram records are read by @code{hist.c:@-hist_read_rec}.
For the first histogram record, allocate a memory array to hold
all the bins, and read them in.
When multiple profile data files (or files with multiple histogram
-records) are read, the starting address, ending address, number
-of bins and sampling rate must match between the various histograms,
-or a fatal error will result.
-If everything matches, just sum the additional histograms into
-the existing in-memory array.
-
-As each call graph record is read (@code{call_graph.c:cg_read_rec}),
+records) are read, the memory ranges of each pair of histogram records
+must be either equal, or non-overlapping. For each pair of histogram
+records, the resolution (memory region size divided by the number of
+bins) must be the same. The time unit must be the same for all
+histogram records. If the above containts are met, all histograms
+for the same memory range are merged.
+
+As each call graph record is read (@code{call_graph.c:@-cg_read_rec}),
the parent and child addresses
are matched to symbol table entries, and a call graph arc is
-created by @code{cg_arcs.c:arc_add}, unless the arc fails a symspec
+created by @code{cg_arcs.c:@-arc_add}, unless the arc fails a symspec
check against INCL_ARCS/EXCL_ARCS. As each arc is added,
a linked list is maintained of the parent's child arcs, and of the child's
parent arcs.
Both the child's call count and the arc's call count are
incremented by the record's call count.
-Basic-block records are read (@code{basic_blocks.c:bb_read_rec}),
+Basic-block records are read (@code{basic_blocks.c:@-bb_read_rec}),
but only if line-by-line profiling has been selected.
Each basic-block address is matched to a corresponding line
symbol in the symbol table, and an entry made in the symbol's
@@ -2089,10 +2092,10 @@ bb_addr and bb_calls arrays. Again, if multiple basic-block
records are present for the same address, the call counts
are cumulative.
-A gmon.sum file is dumped, if requested (@code{gmon_io.c:gmon_out_write}).
+A gmon.sum file is dumped, if requested (@code{gmon_io.c:@-gmon_out_write}).
If histograms were present in the data files, assign them to symbols
-(@code{hist.c:hist_assign_samples}) by iterating over all the sample
+(@code{hist.c:@-hist_assign_samples}) by iterating over all the sample
bins and assigning them to symbols. Since the symbol table
is sorted in order of ascending memory addresses, we can
simple follow along in the symbol table as we make our pass
@@ -2107,13 +2110,13 @@ are more common during line-by-line profiling, and can
cause each of two adjacent lines to be credited with half
a hit, for example.
-If call graph data is present, @code{cg_arcs.c:cg_assemble} is called.
+If call graph data is present, @code{cg_arcs.c:@-cg_assemble} is called.
First, if @samp{-c} was specified, a machine-dependent
routine (@code{find_call}) scans through each symbol's machine code,
looking for subroutine call instructions, and adding them
to the call graph with a zero call count.
A topological sort is performed by depth-first numbering
-all the symbols (@code{cg_dfn.c:cg_dfn}), so that
+all the symbols (@code{cg_dfn.c:@-cg_dfn}), so that
children are always numbered less than their parents,
then making a array of pointers into the symbol table and sorting it into
numerical order, which is reverse topological
@@ -2136,10 +2139,10 @@ structures, the topological sort array is now discarded, and a
new array of pointers is assembled, this time sorted by propagated time.
Finally, print the various outputs the user requested, which is now fairly
-straightforward. The call graph (@code{cg_print.c:cg_print}) and
-flat profile (@code{hist.c:hist_print}) are regurgitations of values
+straightforward. The call graph (@code{cg_print.c:@-cg_print}) and
+flat profile (@code{hist.c:@-hist_print}) are regurgitations of values
already computed. The annotated source listing
-(@code{basic_blocks.c:print_annotated_source}) uses basic-block
+(@code{basic_blocks.c:@-print_annotated_source}) uses basic-block
information, if present, to label each line of code with call counts,
otherwise only the function call counts are presented.
@@ -2150,8 +2153,8 @@ placed first, followed by other functions with the most use,
followed by lower use functions, followed by unused functions
at the end.
-@node Debugging,,Internals,Details
-@subsection Debugging @code{gprof}
+@node Debugging
+@section Debugging @code{gprof}
If @code{gprof} was compiled with debugging enabled,
the @samp{-d} option triggers debugging output
@@ -2192,30 +2195,30 @@ Tracks operation of @samp{-A} option
@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
+@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
+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
+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.
@@ -2228,20 +2231,21 @@ 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
+@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
+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".
+addressed as ``you.''
-A "Modified Version" of the Document means any work containing the
+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
+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
@@ -2252,15 +2256,15 @@ 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
+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,
+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,
+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
@@ -2270,7 +2274,7 @@ 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".
+not ``Transparent'' is called ``Opaque.''
Examples of suitable formats for Transparent copies include plain
ASCII without markup, Texinfo input format, LaTeX input format, SGML
@@ -2282,15 +2286,15 @@ 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,
+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
+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
+@sp 1
+@item
+VERBATIM COPYING
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
@@ -2304,9 +2308,9 @@ 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
+@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
@@ -2342,9 +2346,9 @@ 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
+@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
@@ -2357,48 +2361,48 @@ 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.
+ 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).
+ 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.
+ 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.
+ 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.
+ 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
+ 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
+ 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.
+ 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.
+ 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",
+ 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.
+ 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.
-
+ 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
@@ -2406,7 +2410,7 @@ 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
+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
@@ -2425,9 +2429,9 @@ 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
+@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
@@ -2445,14 +2449,14 @@ 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 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
+``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
@@ -2464,15 +2468,15 @@ 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
+@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
+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.
@@ -2482,9 +2486,9 @@ 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
+@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.
@@ -2496,9 +2500,9 @@ 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
+@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
@@ -2507,9 +2511,9 @@ 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
+@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
@@ -2519,42 +2523,44 @@ 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
+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
-ADDENDUM: How to use this License for your documents
+@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
- 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".
+@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"
+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.
+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.
-@contents
@bye
NEEDS AN INDEX
diff --git a/gprof/hist.c b/gprof/hist.c
index 024f6653e662..9c7f446a6d4b 100644
--- a/gprof/hist.c
+++ b/gprof/hist.c
@@ -31,6 +31,9 @@
#include "hist.h"
#include "sym_ids.h"
#include "utils.h"
+#include "math.h"
+#include "stdio.h"
+#include "stdlib.h"
#define UNITS_TO_CODE (offset_to_code / sizeof(UNIT))
@@ -42,11 +45,9 @@ static int cmp_time (const PTR, const PTR);
/* Declarations of automatically generated functions to output blurbs. */
extern void flat_blurb (FILE * fp);
-bfd_vma s_lowpc; /* Lowest address in .text. */
-bfd_vma s_highpc = 0; /* Highest address in .text. */
-bfd_vma lowpc, highpc; /* Same, but expressed in UNITs. */
-unsigned int hist_num_bins = 0; /* Number of histogram samples. */
-int *hist_sample = 0; /* Histogram samples (shorts in the file!). */
+static histogram *find_histogram (bfd_vma lowpc, bfd_vma highpc);
+static histogram *find_histogram_for_pc (bfd_vma pc);
+
double hist_scale;
static char hist_dimension[16] = "seconds";
static char hist_dimension_abbrev = 's';
@@ -76,23 +77,30 @@ SItab[] =
{ 'a', 1e+18 } /* ato */
};
+/* Reads just the header part of histogram record into
+ *RECORD from IFP. FILENAME is the name of IFP and
+ is provided for formatting error messages only.
-/* Read the histogram from file IFP. FILENAME is the name of IFP and
- is provided for formatting error messages only. */
-
-void
-hist_read_rec (FILE * ifp, const char *filename)
+ If FIRST is non-zero, sets global variables HZ, HIST_DIMENSION,
+ HIST_DIMENSION_ABBREV, HIST_SCALE. If FIRST is zero, checks
+ that the new histogram is compatible with already-set values
+ of those variables and emits an error if that's not so. */
+static void
+read_histogram_header (histogram *record,
+ FILE *ifp, const char *filename,
+ int first)
{
- bfd_vma n_lowpc, n_highpc;
- unsigned int i, ncnt, profrate;
- UNIT count;
-
- if (gmon_io_read_vma (ifp, &n_lowpc)
- || gmon_io_read_vma (ifp, &n_highpc)
- || gmon_io_read_32 (ifp, &ncnt)
+ unsigned int profrate;
+ char n_hist_dimension[15];
+ char n_hist_dimension_abbrev;
+ double n_hist_scale;
+
+ if (gmon_io_read_vma (ifp, &record->lowpc)
+ || gmon_io_read_vma (ifp, &record->highpc)
+ || gmon_io_read_32 (ifp, &record->num_bins)
|| gmon_io_read_32 (ifp, &profrate)
- || gmon_io_read (ifp, hist_dimension, 15)
- || gmon_io_read (ifp, &hist_dimension_abbrev, 1))
+ || gmon_io_read (ifp, n_hist_dimension, 15)
+ || gmon_io_read (ifp, &n_hist_dimension_abbrev, 1))
{
fprintf (stderr, _("%s: %s: unexpected end of file\n"),
whoami, filename);
@@ -100,94 +108,178 @@ hist_read_rec (FILE * ifp, const char *filename)
done (1);
}
- if (!s_highpc)
+ n_hist_scale = (double)((record->highpc - record->lowpc) / sizeof (UNIT))
+ / record->num_bins;
+
+ if (first)
{
- /* This is the first histogram record. */
- s_lowpc = n_lowpc;
- s_highpc = n_highpc;
- lowpc = (bfd_vma) n_lowpc / sizeof (UNIT);
- highpc = (bfd_vma) n_highpc / sizeof (UNIT);
- hist_num_bins = ncnt;
+ /* We don't try to veryfy profrate is the same for all histogram
+ records. If we have two histogram records for the same
+ address range and profiling samples is done as often
+ as possible as opposed on timer, then the actual profrate will
+ be slightly different. Most of the time the difference does not
+ matter and insisting that profiling rate is exactly the same
+ will only create inconvenient. */
hz = profrate;
+ memcpy (hist_dimension, n_hist_dimension, 15);
+ hist_dimension_abbrev = n_hist_dimension_abbrev;
+ hist_scale = n_hist_scale;
}
-
- DBG (SAMPLEDEBUG,
- printf ("[hist_read_rec] n_lowpc 0x%lx n_highpc 0x%lx ncnt %u\n",
- (unsigned long) n_lowpc, (unsigned long) n_highpc, ncnt);
- printf ("[hist_read_rec] s_lowpc 0x%lx s_highpc 0x%lx nsamples %u\n",
- (unsigned long) s_lowpc, (unsigned long) s_highpc,
- hist_num_bins);
- printf ("[hist_read_rec] lowpc 0x%lx highpc 0x%lx\n",
- (unsigned long) lowpc, (unsigned long) highpc));
-
- if (n_lowpc != s_lowpc || n_highpc != s_highpc
- || ncnt != hist_num_bins || hz != (int) profrate)
+ else
{
- fprintf (stderr, _("%s: `%s' is incompatible with first gmon file\n"),
- whoami, filename);
- done (1);
+ if (strncmp (n_hist_dimension, hist_dimension, 15) != 0)
+ {
+ fprintf (stderr,
+ _("%s: dimension unit changed between histogram records\n"
+ "%s: from '%s'\n"
+ "%s: to '%s'\n"),
+ whoami, whoami, hist_dimension, whoami, n_hist_dimension);
+ done (1);
+ }
+
+ if (n_hist_dimension_abbrev != hist_dimension_abbrev)
+ {
+ fprintf (stderr,
+ _("%s: dimension abbreviation changed between histogram records\n"
+ "%s: from '%c'\n"
+ "%s: to '%c'\n"),
+ whoami, whoami, hist_dimension_abbrev, whoami, n_hist_dimension_abbrev);
+ done (1);
+ }
+
+ /* The only reason we require the same scale for histograms is that
+ there's code (notably printing code), that prints units,
+ and it would be very confusing to have one unit mean different
+ things for different functions. */
+ if (fabs (hist_scale - n_hist_scale) > 0.000001)
+ {
+ fprintf (stderr,
+ _("%s: different scales in histogram records"),
+ whoami);
+ done (1);
+ }
}
+}
- if (!hist_sample)
+/* Read the histogram from file IFP. FILENAME is the name of IFP and
+ is provided for formatting error messages only. */
+
+void
+hist_read_rec (FILE * ifp, const char *filename)
+{
+ bfd_vma lowpc, highpc;
+ histogram n_record;
+ histogram *record, *existing_record;
+ unsigned i;
+
+ /* 1. Read the header and see if there's existing record for the
+ same address range and that there are no overlapping records. */
+ read_histogram_header (&n_record, ifp, filename, num_histograms == 0);
+
+ existing_record = find_histogram (n_record.lowpc, n_record.highpc);
+ if (existing_record)
{
- hist_sample = (int *) xmalloc (hist_num_bins * sizeof (hist_sample[0]));
- memset (hist_sample, 0, hist_num_bins * sizeof (hist_sample[0]));
+ record = existing_record;
+ }
+ else
+ {
+ /* If this record overlaps, but does not completely match an existing
+ record, it's an error. */
+ lowpc = n_record.lowpc;
+ highpc = n_record.highpc;
+ hist_clip_symbol_address (&lowpc, &highpc);
+ if (lowpc != highpc)
+ {
+ fprintf (stderr,
+ _("%s: overlapping histogram records\n"),
+ whoami);
+ done (1);
+ }
+
+ /* This is new record. Add it to global array and allocate space for
+ the samples. */
+ histograms = xrealloc (histograms,
+ sizeof (histogram) * (num_histograms + 1));
+ memcpy (histograms + num_histograms,
+ &n_record, sizeof (histogram));
+ record = &histograms[num_histograms];
+ ++num_histograms;
+
+ record->sample = (int *) xmalloc (record->num_bins
+ * sizeof (record->sample[0]));
+ memset (record->sample, 0, record->num_bins * sizeof (record->sample[0]));
}
- for (i = 0; i < hist_num_bins; ++i)
+ /* 2. We have either a new record (with zeroed histogram data), or an existing
+ record with some data in the histogram already. Read new data into the
+ record, adding hit counts. */
+
+ DBG (SAMPLEDEBUG,
+ printf ("[hist_read_rec] n_lowpc 0x%lx n_highpc 0x%lx ncnt %u\n",
+ (unsigned long) record->lowpc, (unsigned long) record->highpc,
+ record->num_bins));
+
+ for (i = 0; i < record->num_bins; ++i)
{
+ UNIT count;
if (fread (&count[0], sizeof (count), 1, ifp) != 1)
{
fprintf (stderr,
_("%s: %s: unexpected EOF after reading %u of %u samples\n"),
- whoami, filename, i, hist_num_bins);
+ whoami, filename, i, record->num_bins);
done (1);
}
- hist_sample[i] += bfd_get_16 (core_bfd, (bfd_byte *) & count[0]);
+ record->sample[i] += bfd_get_16 (core_bfd, (bfd_byte *) & count[0]);
DBG (SAMPLEDEBUG,
printf ("[hist_read_rec] 0x%lx: %u\n",
- (unsigned long) (n_lowpc + i * (n_highpc - n_lowpc) / ncnt),
- hist_sample[i]));
+ (unsigned long) (record->lowpc
+ + i * (record->highpc - record->lowpc)
+ / record->num_bins),
+ record->sample[i]));
}
}
-/* Write execution histogram to file OFP. FILENAME is the name
+/* Write all execution histograms file OFP. FILENAME is the name
of OFP and is provided for formatting error-messages only. */
void
hist_write_hist (FILE * ofp, const char *filename)
{
UNIT count;
- unsigned int i;
-
- /* Write header. */
+ unsigned int i, r;
- if (gmon_io_write_8 (ofp, GMON_TAG_TIME_HIST)
- || gmon_io_write_vma (ofp, s_lowpc)
- || gmon_io_write_vma (ofp, s_highpc)
- || gmon_io_write_32 (ofp, hist_num_bins)
- || gmon_io_write_32 (ofp, hz)
- || gmon_io_write (ofp, hist_dimension, 15)
- || gmon_io_write (ofp, &hist_dimension_abbrev, 1))
+ for (r = 0; r < num_histograms; ++r)
{
- perror (filename);
- done (1);
- }
-
- for (i = 0; i < hist_num_bins; ++i)
- {
- bfd_put_16 (core_bfd, (bfd_vma) hist_sample[i], (bfd_byte *) &count[0]);
-
- if (fwrite (&count[0], sizeof (count), 1, ofp) != 1)
+ histogram *record = &histograms[r];
+
+ /* Write header. */
+
+ if (gmon_io_write_8 (ofp, GMON_TAG_TIME_HIST)
+ || gmon_io_write_vma (ofp, record->lowpc)
+ || gmon_io_write_vma (ofp, record->highpc)
+ || gmon_io_write_32 (ofp, record->num_bins)
+ || gmon_io_write_32 (ofp, hz)
+ || gmon_io_write (ofp, hist_dimension, 15)
+ || gmon_io_write (ofp, &hist_dimension_abbrev, 1))
{
perror (filename);
done (1);
}
+
+ for (i = 0; i < record->num_bins; ++i)
+ {
+ bfd_put_16 (core_bfd, (bfd_vma) record->sample[i], (bfd_byte *) &count[0]);
+
+ if (fwrite (&count[0], sizeof (count), 1, ofp) != 1)
+ {
+ perror (filename);
+ done (1);
+ }
+ }
}
}
-
/* Calculate scaled entry point addresses (to save time in
hist_assign_samples), and, on architectures that have procedure
entry masks at the start of a function, possibly push the scaled
@@ -204,18 +296,24 @@ scale_and_align_entries ()
for (sym = symtab.base; sym < symtab.limit; sym++)
{
+ histogram *r = find_histogram_for_pc (sym->addr);
+
sym->hist.scaled_addr = sym->addr / sizeof (UNIT);
- bin_of_entry = (sym->hist.scaled_addr - lowpc) / hist_scale;
- bin_of_code = ((sym->hist.scaled_addr + UNITS_TO_CODE - lowpc)
- / hist_scale);
- if (bin_of_entry < bin_of_code)
+
+ if (r)
{
- DBG (SAMPLEDEBUG,
- printf ("[scale_and_align_entries] pushing 0x%lx to 0x%lx\n",
- (unsigned long) sym->hist.scaled_addr,
- (unsigned long) (sym->hist.scaled_addr
- + UNITS_TO_CODE)));
- sym->hist.scaled_addr += UNITS_TO_CODE;
+ bin_of_entry = (sym->hist.scaled_addr - r->lowpc) / hist_scale;
+ bin_of_code = ((sym->hist.scaled_addr + UNITS_TO_CODE - r->lowpc)
+ / hist_scale);
+ if (bin_of_entry < bin_of_code)
+ {
+ DBG (SAMPLEDEBUG,
+ printf ("[scale_and_align_entries] pushing 0x%lx to 0x%lx\n",
+ (unsigned long) sym->hist.scaled_addr,
+ (unsigned long) (sym->hist.scaled_addr
+ + UNITS_TO_CODE)));
+ sym->hist.scaled_addr += UNITS_TO_CODE;
+ }
}
}
}
@@ -258,8 +356,8 @@ scale_and_align_entries ()
four bytes of text space and never have any overlap (the two end
cases, above). */
-void
-hist_assign_samples ()
+static void
+hist_assign_samples_1 (histogram *r)
{
bfd_vma bin_low_pc, bin_high_pc;
bfd_vma sym_low_pc, sym_high_pc;
@@ -268,15 +366,12 @@ hist_assign_samples ()
unsigned int i, j;
double time, credit;
- /* Read samples and assign to symbols. */
- hist_scale = highpc - lowpc;
- hist_scale /= hist_num_bins;
- scale_and_align_entries ();
+ bfd_vma lowpc = r->lowpc / sizeof (UNIT);
/* Iterate over all sample bins. */
- for (i = 0, j = 1; i < hist_num_bins; ++i)
+ for (i = 0, j = 1; i < r->num_bins; ++i)
{
- bin_count = hist_sample[i];
+ bin_count = r->sample[i];
if (! bin_count)
continue;
@@ -344,6 +439,18 @@ hist_assign_samples ()
total_time));
}
+/* Calls 'hist_assign_sampes_1' for all histogram records read so far. */
+void
+hist_assign_samples ()
+{
+ unsigned i;
+
+ scale_and_align_entries ();
+
+ for (i = 0; i < num_histograms; ++i)
+ hist_assign_samples_1 (&histograms[i]);
+
+}
/* Print header for flag histogram profile. */
@@ -552,3 +659,90 @@ hist_print ()
if (print_descriptions && !bsd_style_output)
flat_blurb (stdout);
}
+
+int
+hist_check_address (unsigned address)
+{
+ unsigned i;
+
+ for (i = 0; i < num_histograms; ++i)
+ if (histograms[i].lowpc <= address && address < histograms[i].highpc)
+ return 1;
+
+ return 0;
+}
+
+#if ! defined(min)
+#define min(a,b) (((a)<(b)) ? (a) : (b))
+#endif
+#if ! defined(max)
+#define max(a,b) (((a)>(b)) ? (a) : (b))
+#endif
+
+void
+hist_clip_symbol_address (bfd_vma *p_lowpc, bfd_vma *p_highpc)
+{
+ unsigned i;
+ int found = 0;
+
+ if (num_histograms == 0)
+ {
+ *p_highpc = *p_lowpc;
+ return;
+ }
+
+ for (i = 0; i < num_histograms; ++i)
+ {
+ bfd_vma common_low, common_high;
+ common_low = max (histograms[i].lowpc, *p_lowpc);
+ common_high = min (histograms[i].highpc, *p_highpc);
+
+ if (common_low < common_high)
+ {
+ if (found)
+ {
+ fprintf (stderr,
+ _("%s: found a symbol that covers "
+ "several histogram records"),
+ whoami);
+ done (1);
+ }
+
+ found = 1;
+ *p_lowpc = common_low;
+ *p_highpc = common_high;
+ }
+ }
+
+ if (!found)
+ *p_highpc = *p_lowpc;
+}
+
+/* Find and return exising histogram record having the same lowpc and
+ highpc as passed via the parameters. Return NULL if nothing is found.
+ The return value is valid until any new histogram is read. */
+static histogram *
+find_histogram (bfd_vma lowpc, bfd_vma highpc)
+{
+ unsigned i;
+ for (i = 0; i < num_histograms; ++i)
+ {
+ if (histograms[i].lowpc == lowpc && histograms[i].highpc == highpc)
+ return &histograms[i];
+ }
+ return 0;
+}
+
+/* Given a PC, return histogram record which address range include this PC.
+ Return NULL if there's no such record. */
+static histogram *
+find_histogram_for_pc (bfd_vma pc)
+{
+ unsigned i;
+ for (i = 0; i < num_histograms; ++i)
+ {
+ if (histograms[i].lowpc <= pc && pc < histograms[i].highpc)
+ return &histograms[i];
+ }
+ return 0;
+}
diff --git a/gprof/hist.h b/gprof/hist.h
index 96624c68b016..4ed69580aedb 100644
--- a/gprof/hist.h
+++ b/gprof/hist.h
@@ -21,20 +21,37 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#ifndef hist_h
#define hist_h
-extern bfd_vma s_lowpc; /* Lowpc from the profile file. */
-extern bfd_vma s_highpc; /* Highpc from the profile file. */
-extern bfd_vma lowpc, highpc; /* Range profiled, in UNIT's. */
-extern unsigned int hist_num_bins; /* Number of histogram bins. */
-extern int *hist_sample; /* Code histogram. */
+typedef struct histogram
+{
+ bfd_vma lowpc;
+ bfd_vma highpc;
+ unsigned int num_bins;
+ int *sample; /* Histogram samples (shorts in the file!). */
+} histogram;
+
+histogram *histograms;
+unsigned num_histograms;
/* Scale factor converting samples to pc values:
each sample covers HIST_SCALE bytes. */
extern double hist_scale;
-
extern void hist_read_rec (FILE *, const char *);
extern void hist_write_hist (FILE *, const char *);
extern void hist_assign_samples (void);
extern void hist_print (void);
+/* Checks if ADDRESS is within the range of addresses for which
+ we have histogram data. Returns 1 if so and 0 otherwise. */
+extern int hist_check_address (unsigned address);
+
+/* Given a range of addresses for a symbol, find a histogram record
+ that intersects with this range, and clips the range to that
+ histogram record, modifying *P_LOWPC and *P_HIGHPC.
+
+ If no intersection is found, *P_LOWPC and *P_HIGHPC will be set to
+ one unspecified value. If more that one intersection is found,
+ an error is emitted. */
+extern void hist_clip_symbol_address (bfd_vma *p_lowpc, bfd_vma *p_highpc);
+
#endif /* hist_h */
diff --git a/gprof/i386.c b/gprof/i386.c
index 91d38fa06cb5..bdf8bd1b8320 100644
--- a/gprof/i386.c
+++ b/gprof/i386.c
@@ -53,18 +53,6 @@ i386_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
Sym *child;
bfd_vma pc, destpc;
- if (core_text_space == 0)
- {
- return;
- }
- if (p_lowpc < s_lowpc)
- {
- p_lowpc = s_lowpc;
- }
- if (p_highpc > s_highpc)
- {
- p_highpc = s_highpc;
- }
DBG (CALLDEBUG, printf ("[findcall] %s: 0x%lx to 0x%lx\n",
parent->name, (unsigned long) p_lowpc,
(unsigned long) p_highpc));
@@ -83,7 +71,7 @@ i386_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
*/
destpc = bfd_get_32 (core_bfd, instructp + 1) + pc + 5;
- if (destpc >= s_lowpc && destpc <= s_highpc)
+ if (hist_check_address (destpc))
{
child = sym_lookup (&symtab, destpc);
if (child && child->addr == destpc)
diff --git a/gprof/mips.c b/gprof/mips.c
index 96d2707e0547..7a7344df0d4e 100644
--- a/gprof/mips.c
+++ b/gprof/mips.c
@@ -56,24 +56,13 @@ mips_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
indirect_child.cg.cyc.head = &indirect_child;
}
- if (!core_text_space)
- {
- return;
- }
- if (p_lowpc < s_lowpc)
- {
- p_lowpc = s_lowpc;
- }
- if (p_highpc > s_highpc)
- {
- p_highpc = s_highpc;
- }
DBG (CALLDEBUG, printf (_("[find_call] %s: 0x%lx to 0x%lx\n"),
parent->name, (unsigned long) p_lowpc,
(unsigned long) p_highpc));
for (pc = p_lowpc; pc < p_highpc; pc += 4)
{
- op = bfd_get_32 (core_bfd, &((char *)core_text_space)[pc - s_lowpc]);
+ op = bfd_get_32 (core_bfd, ((unsigned char *)core_text_space
+ + pc - core_text_sect->vma));
if ((op & 0xfc000000) == 0x0c000000)
{
/* This is a "jal" instruction. Check that the destination
@@ -82,7 +71,7 @@ mips_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
printf (_("[find_call] 0x%lx: jal"), (unsigned long) pc));
offset = (op & 0x03ffffff) << 2;
dest_pc = (pc & ~(bfd_vma) 0xfffffff) | offset;
- if (dest_pc >= s_lowpc && dest_pc <= s_highpc)
+ if (hist_check_address (dest_pc))
{
child = sym_lookup (&symtab, dest_pc);
DBG (CALLDEBUG,
diff --git a/gprof/po/Make-in b/gprof/po/Make-in
index 42863f2ab203..b2988cb743fb 100644
--- a/gprof/po/Make-in
+++ b/gprof/po/Make-in
@@ -16,6 +16,7 @@ SHELL = /bin/sh
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
+top_builddir = @top_builddir@
prefix = @prefix@
exec_prefix = @exec_prefix@
@@ -72,7 +73,7 @@ INSTOBJEXT = @INSTOBJEXT@
$(MSGFMT) -o $@ $<
.po.gmo:
- file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+ file=`echo $* | sed 's,.*/,,'`.gmo \
&& rm -f $$file && $(GMSGFMT) -o $$file $<
.po.cat:
diff --git a/gprof/po/da.gmo b/gprof/po/da.gmo
deleted file mode 100644
index d2bfe782d2aa..000000000000
--- a/gprof/po/da.gmo
+++ /dev/null
Binary files differ
diff --git a/gprof/po/de.gmo b/gprof/po/de.gmo
deleted file mode 100644
index 7ab32d8ff169..000000000000
--- a/gprof/po/de.gmo
+++ /dev/null
Binary files differ
diff --git a/gprof/po/es.gmo b/gprof/po/es.gmo
deleted file mode 100644
index 9bb39047bbf4..000000000000
--- a/gprof/po/es.gmo
+++ /dev/null
Binary files differ
diff --git a/gprof/po/fr.gmo b/gprof/po/fr.gmo
deleted file mode 100644
index 1909dd46ca83..000000000000
--- a/gprof/po/fr.gmo
+++ /dev/null
Binary files differ
diff --git a/gprof/po/ga.gmo b/gprof/po/ga.gmo
deleted file mode 100644
index efe85ddd2d76..000000000000
--- a/gprof/po/ga.gmo
+++ /dev/null
Binary files differ
diff --git a/gprof/po/gprof.pot b/gprof/po/gprof.pot
index 295436b25854..ad8c41ad8bb5 100644
--- a/gprof/po/gprof.pot
+++ b/gprof/po/gprof.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-10-01 07:23+0930\n"
+"POT-Creation-Date: 2007-05-15 16:49+0930\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"
@@ -20,22 +20,22 @@ msgstr ""
msgid "<indirect child>"
msgstr ""
-#: alpha.c:119 mips.c:71
+#: alpha.c:107 mips.c:59
#, c-format
msgid "[find_call] %s: 0x%lx to 0x%lx\n"
msgstr ""
-#: alpha.c:141
+#: alpha.c:129
#, c-format
msgid "[find_call] 0x%lx: jsr%s <indirect_child>\n"
msgstr ""
-#: alpha.c:151
+#: alpha.c:139
#, c-format
msgid "[find_call] 0x%lx: bsr"
msgstr ""
-#: basic_blocks.c:128 call_graph.c:89 hist.c:97
+#: basic_blocks.c:128 call_graph.c:89 hist.c:105
#, c-format
msgid "%s: %s: unexpected end of file\n"
msgstr ""
@@ -120,7 +120,7 @@ msgid ""
"\n"
msgstr ""
-#: cg_print.c:78 hist.c:359
+#: cg_print.c:78 hist.c:466
#, c-format
msgid ""
"\n"
@@ -170,7 +170,7 @@ msgstr ""
msgid "descendants"
msgstr ""
-#: cg_print.c:98 hist.c:385
+#: cg_print.c:98 hist.c:492
msgid "name"
msgstr ""
@@ -210,47 +210,47 @@ msgstr ""
msgid "<cycle %d>"
msgstr ""
-#: corefile.c:64
+#: corefile.c:59
#, c-format
-msgid "%s: could not open %s.\n"
+msgid "%s: unable to parse mapping file %s.\n"
msgstr ""
-#: corefile.c:78 corefile.c:112
+#: corefile.c:72
#, c-format
-msgid "%s: unable to parse mapping file %s.\n"
+msgid "%s: could not open %s.\n"
msgstr ""
-#: corefile.c:158
+#: corefile.c:166
#, c-format
-msgid "%s: %s: not in a.out format\n"
+msgid "%s: %s: not in executable format\n"
msgstr ""
-#: corefile.c:169
+#: corefile.c:177
#, c-format
msgid "%s: can't find .text section in %s\n"
msgstr ""
-#: corefile.c:244
+#: corefile.c:252
#, c-format
msgid "%s: ran out room for %lu bytes of text space\n"
msgstr ""
-#: corefile.c:258
+#: corefile.c:266
#, c-format
msgid "%s: can't do -c\n"
msgstr ""
-#: corefile.c:292
+#: corefile.c:305
#, c-format
msgid "%s: -c not supported on architecture %s\n"
msgstr ""
-#: corefile.c:457
+#: corefile.c:470
#, c-format
msgid "%s: file `%s' has no symbols\n"
msgstr ""
-#: corefile.c:771
+#: corefile.c:772
#, c-format
msgid "%s: somebody miscounted: ltab.len=%d instead of %ld\n"
msgstr ""
@@ -285,62 +285,62 @@ msgstr ""
msgid "%s: profiling rate incompatible with first gmon file\n"
msgstr ""
-#: gmon_io.c:486
+#: gmon_io.c:489
#, c-format
msgid "%s: incompatible with first gmon file\n"
msgstr ""
-#: gmon_io.c:514
+#: gmon_io.c:516
#, c-format
msgid "%s: file '%s' does not appear to be in gmon.out format\n"
msgstr ""
-#: gmon_io.c:535
+#: gmon_io.c:529
#, c-format
msgid "%s: unexpected EOF after reading %d/%d bins\n"
msgstr ""
-#: gmon_io.c:568
+#: gmon_io.c:563
#, c-format
msgid "time is in ticks, not seconds\n"
msgstr ""
-#: gmon_io.c:574 gmon_io.c:750
+#: gmon_io.c:569 gmon_io.c:746
#, c-format
msgid "%s: don't know how to deal with file format %d\n"
msgstr ""
-#: gmon_io.c:581
+#: gmon_io.c:576
#, c-format
msgid "File `%s' (version %d) contains:\n"
msgstr ""
-#: gmon_io.c:584
+#: gmon_io.c:579
#, c-format
msgid "\t%d histogram record\n"
msgstr ""
-#: gmon_io.c:585
+#: gmon_io.c:580
#, c-format
msgid "\t%d histogram records\n"
msgstr ""
-#: gmon_io.c:587
+#: gmon_io.c:582
#, c-format
msgid "\t%d call-graph record\n"
msgstr ""
-#: gmon_io.c:588
+#: gmon_io.c:583
#, c-format
msgid "\t%d call-graph records\n"
msgstr ""
-#: gmon_io.c:590
+#: gmon_io.c:585
#, c-format
msgid "\t%d basic-block count record\n"
msgstr ""
-#: gmon_io.c:591
+#: gmon_io.c:586
#, c-format
msgid "\t%d basic-block count records\n"
msgstr ""
@@ -359,7 +359,7 @@ msgid ""
"\t[--no-static] [--print-path] [--separate-files]\n"
"\t[--static-call-graph] [--sum] [--table-length=len] [--traditional]\n"
"\t[--version] [--width=n] [--ignore-non-functions]\n"
-"\t[--demangle[=STYLE]] [--no-demangle]\n"
+"\t[--demangle[=STYLE]] [--no-demangle] [@FILE]\n"
"\t[image-file] [profile-file...]\n"
msgstr ""
@@ -412,73 +412,94 @@ msgstr ""
msgid "%s: sorry, file format `prof' is not yet supported\n"
msgstr ""
-#: gprof.c:576
+#: gprof.c:581
#, c-format
msgid "%s: gmon.out file is missing histogram\n"
msgstr ""
-#: gprof.c:583
+#: gprof.c:588
#, c-format
msgid "%s: gmon.out file is missing call-graph data\n"
msgstr ""
-#: hist.c:126
+#: hist.c:133
+#, c-format
+msgid ""
+"%s: dimension unit changed between histogram records\n"
+"%s: from '%s'\n"
+"%s: to '%s'\n"
+msgstr ""
+
+#: hist.c:143
#, c-format
-msgid "%s: `%s' is incompatible with first gmon file\n"
+msgid ""
+"%s: dimension abbreviation changed between histogram records\n"
+"%s: from '%c'\n"
+"%s: to '%c'\n"
+msgstr ""
+
+#: hist.c:157
+#, c-format
+msgid "%s: different scales in histogram records"
+msgstr ""
+
+#: hist.c:194
+#, c-format
+msgid "%s: overlapping histogram records\n"
msgstr ""
-#: hist.c:142
+#: hist.c:228
#, c-format
msgid "%s: %s: unexpected EOF after reading %u of %u samples\n"
msgstr ""
-#: hist.c:355
+#: hist.c:462
#, c-format
msgid "%c%c/call"
msgstr ""
-#: hist.c:363
+#: hist.c:470
#, c-format
msgid ""
" for %.2f%% of %.2f %s\n"
"\n"
msgstr ""
-#: hist.c:369
+#: hist.c:476
#, c-format
msgid ""
"\n"
"Each sample counts as %g %s.\n"
msgstr ""
-#: hist.c:374
+#: hist.c:481
#, c-format
msgid ""
" no time accumulated\n"
"\n"
msgstr ""
-#: hist.c:381
+#: hist.c:488
msgid "cumulative"
msgstr ""
-#: hist.c:381
+#: hist.c:488
msgid "self "
msgstr ""
-#: hist.c:381
+#: hist.c:488
msgid "total "
msgstr ""
-#: hist.c:384
+#: hist.c:491
msgid "time"
msgstr ""
-#: hist.c:384
+#: hist.c:491
msgid "calls"
msgstr ""
-#: hist.c:473
+#: hist.c:580
#, c-format
msgid ""
"\n"
@@ -487,17 +508,22 @@ msgid ""
"flat profile:\n"
msgstr ""
-#: hist.c:479
+#: hist.c:586
#, c-format
msgid "Flat profile:\n"
msgstr ""
-#: mips.c:82
+#: hist.c:705
+#, c-format
+msgid "%s: found a symbol that covers several histogram records"
+msgstr ""
+
+#: mips.c:71
#, c-format
msgid "[find_call] 0x%lx: jal"
msgstr ""
-#: mips.c:107
+#: mips.c:96
#, c-format
msgid "[find_call] 0x%lx: jalr\n"
msgstr ""
@@ -512,7 +538,7 @@ msgstr ""
msgid "*** File %s:\n"
msgstr ""
-#: utils.c:107
+#: utils.c:99
#, c-format
msgid " <cycle %d>"
msgstr ""
diff --git a/gprof/po/id.gmo b/gprof/po/id.gmo
deleted file mode 100644
index bbf145e41b69..000000000000
--- a/gprof/po/id.gmo
+++ /dev/null
Binary files differ
diff --git a/gprof/po/ms.po b/gprof/po/ms.po
new file mode 100644
index 000000000000..ed481cd80e38
--- /dev/null
+++ b/gprof/po/ms.po
@@ -0,0 +1,561 @@
+# gprof Bahasa Melayu (Malay) (ms).
+# Copyright (C) 2006 Free Software Foundation, Inc.
+# Copyright (C) 2006 Sharuzzaman Ahmat Raslan
+# This file is distributed under the same license as the gprof package.
+# Sharuzzaman Ahmat Raslan <sharuzzaman@myrealbox.com>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gprof 2.16.93\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-01 07:23+0930\n"
+"PO-Revision-Date: 2006-11-25 22:35+0800\n"
+"Last-Translator: Sharuzzaman Ahmat Raslan <sharuzzaman@myrealbox.com>\n"
+"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: alpha.c:102 mips.c:54
+msgid "<indirect child>"
+msgstr "<anak tidak terus>"
+
+#: alpha.c:119 mips.c:71
+#, c-format
+msgid "[find_call] %s: 0x%lx to 0x%lx\n"
+msgstr "[find_call] %s: 0x%lx ke 0x%lx\n"
+
+#: alpha.c:141
+#, c-format
+msgid "[find_call] 0x%lx: jsr%s <indirect_child>\n"
+msgstr "[find_call] 0x%lx: jsr%s <indirect_child>\n"
+
+#: alpha.c:151
+#, c-format
+msgid "[find_call] 0x%lx: bsr"
+msgstr "[find_call] 0x%lx: bsr"
+
+#: basic_blocks.c:128 call_graph.c:89 hist.c:97
+#, c-format
+msgid "%s: %s: unexpected end of file\n"
+msgstr "%s: %s: akhir fail tidak dijangka\n"
+
+#: basic_blocks.c:196
+#, c-format
+msgid "%s: warning: ignoring basic-block exec counts (use -l or --line)\n"
+msgstr "%s: amaran: mengabaikan kiraan pelaksanaan blok-asas (guna -l atau --line)\n"
+
+#. FIXME: This only works if bfd_vma is unsigned long.
+#: basic_blocks.c:289 basic_blocks.c:299
+#, c-format
+msgid "%s:%d: (%s:0x%lx) %lu executions\n"
+msgstr "%s:%d: (%s:0x%lx) %lu pelaksanaan\n"
+
+#: basic_blocks.c:290 basic_blocks.c:300
+msgid "<unknown>"
+msgstr "<tidak diketahui>"
+
+#: basic_blocks.c:543
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Top %d Lines:\n"
+"\n"
+" Line Count\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"%d Baris Tertinggi:\n"
+"\n"
+" Baris Kiraan\n"
+"\n"
+
+#: basic_blocks.c:567
+#, c-format
+msgid ""
+"\n"
+"Execution Summary:\n"
+"\n"
+msgstr ""
+"\n"
+"Ringkasan Pelaksanaan:\n"
+"\n"
+
+#: basic_blocks.c:568
+#, c-format
+msgid "%9ld Executable lines in this file\n"
+msgstr "%9ld Baris bolehlaksana dalam fail ini\n"
+
+#: basic_blocks.c:570
+#, c-format
+msgid "%9ld Lines executed\n"
+msgstr "%9ld Baris dilaksana\n"
+
+#: basic_blocks.c:571
+#, c-format
+msgid "%9.2f Percent of the file executed\n"
+msgstr "%9.2f Peratus fail dilaksana\n"
+
+#: basic_blocks.c:575
+#, c-format
+msgid ""
+"\n"
+"%9lu Total number of line executions\n"
+msgstr ""
+"\n"
+"%9lu Jumlah baris pelaksanaan\n"
+
+#: basic_blocks.c:577
+#, c-format
+msgid "%9.2f Average executions per line\n"
+msgstr "%9.2f Purata pelaksanaan per baris\n"
+
+#: call_graph.c:68
+#, c-format
+msgid "[cg_tally] arc from %s to %s traversed %lu times\n"
+msgstr "[cg_tally] arc dari %s ke %s berpindah %lu kali\n"
+
+#: cg_print.c:73
+#, c-format
+msgid ""
+"\t\t Call graph (explanation follows)\n"
+"\n"
+msgstr ""
+"\t\t Graf panggilan (di ikuti penerangan)\n"
+"\n"
+
+#: cg_print.c:75
+#, c-format
+msgid ""
+"\t\t\tCall graph\n"
+"\n"
+msgstr ""
+"\t\t\tGraf panggilan\n"
+"\n"
+
+#: cg_print.c:78 hist.c:359
+#, c-format
+msgid ""
+"\n"
+"granularity: each sample hit covers %ld byte(s)"
+msgstr ""
+"\n"
+"kebutiran: setiap kali sampel melitupi %ld byte"
+
+#: cg_print.c:82
+#, c-format
+msgid ""
+" for %.2f%% of %.2f seconds\n"
+"\n"
+msgstr ""
+" untuk %.2f%% dari %.2f saat\n"
+"\n"
+
+#: cg_print.c:86
+#, c-format
+msgid ""
+" no time propagated\n"
+"\n"
+msgstr ""
+" tiada masa terambat\n"
+"\n"
+
+#: cg_print.c:95 cg_print.c:98 cg_print.c:100
+msgid "called"
+msgstr "dipanggil"
+
+#: cg_print.c:95 cg_print.c:100
+msgid "total"
+msgstr "jumlah"
+
+#: cg_print.c:95
+msgid "parents"
+msgstr "induk"
+
+#: cg_print.c:97 cg_print.c:98
+msgid "index"
+msgstr "indeks"
+
+#: cg_print.c:97
+#, c-format
+msgid "%time"
+msgstr "%time"
+
+#: cg_print.c:97 cg_print.c:98
+msgid "self"
+msgstr "sendiri"
+
+#: cg_print.c:97
+msgid "descendants"
+msgstr "keturunan"
+
+#: cg_print.c:98 hist.c:385
+msgid "name"
+msgstr "nama"
+
+#: cg_print.c:100
+msgid "children"
+msgstr "anak"
+
+#: cg_print.c:105
+#, c-format
+msgid "index %% time self children called name\n"
+msgstr "indeks %% masa sendiri anak dipanggil nama\n"
+
+#: cg_print.c:128
+#, c-format
+msgid " <cycle %d as a whole> [%d]\n"
+msgstr " <pusingan %d sepenuhnya> [%d]\n"
+
+#: cg_print.c:354
+#, c-format
+msgid "%6.6s %5.5s %7.7s %11.11s %7.7s %7.7s <spontaneous>\n"
+msgstr "%6.6s %5.5s %7.7s %11.11s %7.7s %7.7s <secara spontan>\n"
+
+#: cg_print.c:355
+#, c-format
+msgid "%6.6s %5.5s %7.7s %7.7s %7.7s %7.7s <spontaneous>\n"
+msgstr "%6.6s %5.5s %7.7s %7.7s %7.7s %7.7s <spontan>\n"
+
+#: cg_print.c:589
+#, c-format
+msgid ""
+"Index by function name\n"
+"\n"
+msgstr ""
+"Indeks dengan nama fungsi\n"
+"\n"
+
+#: cg_print.c:646 cg_print.c:655
+#, c-format
+msgid "<cycle %d>"
+msgstr "<pusingan %d>"
+
+#: corefile.c:64
+#, c-format
+msgid "%s: could not open %s.\n"
+msgstr "%s: tidak dapat membuka %s.\n"
+
+#: corefile.c:78 corefile.c:112
+#, c-format
+msgid "%s: unable to parse mapping file %s.\n"
+msgstr "%s: tidak dapat menghurai fail pemetaan %s.\n"
+
+#: corefile.c:158
+#, c-format
+msgid "%s: %s: not in a.out format\n"
+msgstr "%s: %s: bukan dalam format a.out\n"
+
+#: corefile.c:169
+#, c-format
+msgid "%s: can't find .text section in %s\n"
+msgstr "%s: tidak dapat mencari seksyen .text dalam %s\n"
+
+#: corefile.c:244
+#, c-format
+msgid "%s: ran out room for %lu bytes of text space\n"
+msgstr "%s: tidak cukup ruang untuk %lu byte bagi ruang teks\n"
+
+#: corefile.c:258
+#, c-format
+msgid "%s: can't do -c\n"
+msgstr "%s: tidak dapat melakukan -c\n"
+
+#: corefile.c:292
+#, c-format
+msgid "%s: -c not supported on architecture %s\n"
+msgstr "%s: -c tidak disokong pada rekabentuk %s\n"
+
+#: corefile.c:457
+#, c-format
+msgid "%s: file `%s' has no symbols\n"
+msgstr "%s: fail `%s' tidak mempunyai simbol\n"
+
+#: corefile.c:771
+#, c-format
+msgid "%s: somebody miscounted: ltab.len=%d instead of %ld\n"
+msgstr "%s: seseorang salah mengira: ltab.len=%d berbanding %ld\n"
+
+#: gmon_io.c:83
+#, c-format
+msgid "%s: address size has unexpected value of %u\n"
+msgstr "%s: saiz alamat mempunyai nilai %u tidak dijangka\n"
+
+#: gmon_io.c:320 gmon_io.c:416
+#, c-format
+msgid "%s: file too short to be a gmon file\n"
+msgstr "%s: fail terlalu pendek untuk menjadi fail gmon\n"
+
+#: gmon_io.c:330 gmon_io.c:459
+#, c-format
+msgid "%s: file `%s' has bad magic cookie\n"
+msgstr "%s: fail `%s' mempunyai cecikut magik buruk\n"
+
+#: gmon_io.c:341
+#, c-format
+msgid "%s: file `%s' has unsupported version %d\n"
+msgstr "%s: fail `%s' tidak mempunyai versi disokong %d\n"
+
+#: gmon_io.c:371
+#, c-format
+msgid "%s: %s: found bad tag %d (file corrupted?)\n"
+msgstr "%s: %s: tag buruk %d dijumpai (fail rosak?)\n"
+
+#: gmon_io.c:438
+#, c-format
+msgid "%s: profiling rate incompatible with first gmon file\n"
+msgstr "%s: kadar pemprofilan tidak sepadan dengan fail gmon pertama\n"
+
+#: gmon_io.c:486
+#, c-format
+msgid "%s: incompatible with first gmon file\n"
+msgstr "%s: tidak sepadan dengan fail gmon pertama\n"
+
+#: gmon_io.c:514
+#, c-format
+msgid "%s: file '%s' does not appear to be in gmon.out format\n"
+msgstr "%s: fail '%s' tidak kelihatan seperti dialam format gmon.out\n"
+
+#: gmon_io.c:535
+#, c-format
+msgid "%s: unexpected EOF after reading %d/%d bins\n"
+msgstr "%s: EOF tidak dijangka selepas membaca %d/%d bins\n"
+
+#: gmon_io.c:568
+#, c-format
+msgid "time is in ticks, not seconds\n"
+msgstr "masa dalam tick, bukan saat\n"
+
+#: gmon_io.c:574 gmon_io.c:750
+#, c-format
+msgid "%s: don't know how to deal with file format %d\n"
+msgstr "%s: tidak tahu bagaimana untuk menguruskan format fail %d\n"
+
+#: gmon_io.c:581
+#, c-format
+msgid "File `%s' (version %d) contains:\n"
+msgstr "Fail `%s' (versi %d) mengandungi:\n"
+
+#: gmon_io.c:584
+#, c-format
+msgid "\t%d histogram record\n"
+msgstr "\t%d rekod histogram\n"
+
+#: gmon_io.c:585
+#, c-format
+msgid "\t%d histogram records\n"
+msgstr "\t%d rekod histogram\n"
+
+#: gmon_io.c:587
+#, c-format
+msgid "\t%d call-graph record\n"
+msgstr "\t%d rekod graf panggilan\n"
+
+#: gmon_io.c:588
+#, c-format
+msgid "\t%d call-graph records\n"
+msgstr "\t%d rekod graf panggilan\n"
+
+#: gmon_io.c:590
+#, c-format
+msgid "\t%d basic-block count record\n"
+msgstr "\t%d rekod kiraan blok-asas\n"
+
+#: gmon_io.c:591
+#, c-format
+msgid "\t%d basic-block count records\n"
+msgstr "\t%d rekod kiraan blok-asas\n"
+
+#: gprof.c:158
+#, c-format
+msgid ""
+"Usage: %s [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][name]] [-I dirs]\n"
+"\t[-d[num]] [-k from/to] [-m min-count] [-t table-length]\n"
+"\t[--[no-]annotated-source[=name]] [--[no-]exec-counts[=name]]\n"
+"\t[--[no-]flat-profile[=name]] [--[no-]graph[=name]]\n"
+"\t[--[no-]time=name] [--all-lines] [--brief] [--debug[=level]]\n"
+"\t[--function-ordering] [--file-ordering]\n"
+"\t[--directory-path=dirs] [--display-unused-functions]\n"
+"\t[--file-format=name] [--file-info] [--help] [--line] [--min-count=n]\n"
+"\t[--no-static] [--print-path] [--separate-files]\n"
+"\t[--static-call-graph] [--sum] [--table-length=len] [--traditional]\n"
+"\t[--version] [--width=n] [--ignore-non-functions]\n"
+"\t[--demangle[=STYLE]] [--no-demangle]\n"
+"\t[image-file] [profile-file...]\n"
+msgstr ""
+"Penggunaan: %s [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][name]] [-I dirs]\n"
+"\t[-d[num]] [-k from/to] [-m min-count] [-t table-length]\n"
+"\t[--[no-]annotated-source[=name]] [--[no-]exec-counts[=name]]\n"
+"\t[--[no-]flat-profile[=name]] [--[no-]graph[=name]]\n"
+"\t[--[no-]time=name] [--all-lines] [--brief] [--debug[=level]]\n"
+"\t[--function-ordering] [--file-ordering]\n"
+"\t[--directory-path=dirs] [--display-unused-functions]\n"
+"\t[--file-format=name] [--file-info] [--help] [--line] [--min-count=n]\n"
+"\t[--no-static] [--print-path] [--separate-files]\n"
+"\t[--static-call-graph] [--sum] [--table-length=len] [--traditional]\n"
+"\t[--version] [--width=n] [--ignore-non-functions]\n"
+"\t[--demangle[=STYLE]] [--no-demangle]\n"
+"\t[image-file] [profile-file...]\n"
+
+#: gprof.c:174
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr "Lapor pepijat ke %s\n"
+
+#: gprof.c:250
+#, c-format
+msgid "%s: debugging not supported; -d ignored\n"
+msgstr "%s: nyahpepijat tidak disokong; -d diabaikan\n"
+
+#: gprof.c:330
+#, c-format
+msgid "%s: unknown file format %s\n"
+msgstr "%s: format fail %s tidak diketahui\n"
+
+#. This output is intended to follow the GNU standards document.
+#: gprof.c:414
+#, c-format
+msgid "GNU gprof %s\n"
+msgstr "GNU gprof %s\n"
+
+#: gprof.c:415
+#, c-format
+msgid "Based on BSD gprof, copyright 1983 Regents of the University of California.\n"
+msgstr "Diasaskan pada BSD gprof, hakcipta 1983 Regents of the University of California.\n"
+
+#: gprof.c:416
+#, c-format
+msgid "This program is free software. This program has absolutely no warranty.\n"
+msgstr "Program ini adalah perisian bebas. Program ini tidak mempunyai sebarang warranti.\n"
+
+#: gprof.c:457
+#, c-format
+msgid "%s: unknown demangling style `%s'\n"
+msgstr "%s: gaya nyahkusut `%s' tidak diketahui\n"
+
+#: gprof.c:477
+#, c-format
+msgid "%s: Only one of --function-ordering and --file-ordering may be specified.\n"
+msgstr "%s: Hanya satu dari --function-ordering dan --file-ordering boleh dinyatakan.\n"
+
+#: gprof.c:527
+#, c-format
+msgid "%s: sorry, file format `prof' is not yet supported\n"
+msgstr "%s: maaf, format format `prof' belum lagi disokong\n"
+
+#: gprof.c:576
+#, c-format
+msgid "%s: gmon.out file is missing histogram\n"
+msgstr "%s: fail gmon.out kehilangan histogram\n"
+
+#: gprof.c:583
+#, c-format
+msgid "%s: gmon.out file is missing call-graph data\n"
+msgstr "%s: fail gmon.out kehilangan data graf-panggilan\n"
+
+#: hist.c:126
+#, c-format
+msgid "%s: `%s' is incompatible with first gmon file\n"
+msgstr "%s: `%s' tidak sepadan dengan fail gmon pertama\n"
+
+#: hist.c:142
+#, c-format
+msgid "%s: %s: unexpected EOF after reading %u of %u samples\n"
+msgstr "%s: %s: EOF tidak dijangka selepas membaca %u dari %u sampel\n"
+
+#: hist.c:355
+#, c-format
+msgid "%c%c/call"
+msgstr "%c%c/panggilan"
+
+#: hist.c:363
+#, c-format
+msgid ""
+" for %.2f%% of %.2f %s\n"
+"\n"
+msgstr ""
+" untuk %.2f%% dari %.2f %s\n"
+"\n"
+
+#: hist.c:369
+#, c-format
+msgid ""
+"\n"
+"Each sample counts as %g %s.\n"
+msgstr ""
+"\n"
+"Setiap sampel kira sebagai %g %s.\n"
+
+#: hist.c:374
+#, c-format
+msgid ""
+" no time accumulated\n"
+"\n"
+msgstr ""
+" tiada masa dikumpulkan\n"
+"\n"
+
+#: hist.c:381
+msgid "cumulative"
+msgstr "kumulatif"
+
+#: hist.c:381
+msgid "self "
+msgstr "sendiri"
+
+#: hist.c:381
+msgid "total "
+msgstr "jumlah"
+
+#: hist.c:384
+msgid "time"
+msgstr "masa"
+
+#: hist.c:384
+msgid "calls"
+msgstr "panggilan"
+
+#: hist.c:473
+#, c-format
+msgid ""
+"\n"
+"\n"
+"\n"
+"flat profile:\n"
+msgstr ""
+"\n"
+"\n"
+"\n"
+"profil mendatar:\n"
+
+#: hist.c:479
+#, c-format
+msgid "Flat profile:\n"
+msgstr "Profil mendatar:\n"
+
+#: mips.c:82
+#, c-format
+msgid "[find_call] 0x%lx: jal"
+msgstr "[find_call] 0x%lx: jal"
+
+#: mips.c:107
+#, c-format
+msgid "[find_call] 0x%lx: jalr\n"
+msgstr "[find_call] 0x%lx: jalr\n"
+
+#: source.c:162
+#, c-format
+msgid "%s: could not locate `%s'\n"
+msgstr "%s: tidak dapat mengesan `%s'\n"
+
+#: source.c:237
+#, c-format
+msgid "*** File %s:\n"
+msgstr "*** Fail %s:\n"
+
+#: utils.c:107
+#, c-format
+msgid " <cycle %d>"
+msgstr " <pusingan %d>"
diff --git a/gprof/po/pt_BR.gmo b/gprof/po/pt_BR.gmo
deleted file mode 100644
index 32876f760040..000000000000
--- a/gprof/po/pt_BR.gmo
+++ /dev/null
Binary files differ
diff --git a/gprof/po/rw.gmo b/gprof/po/rw.gmo
deleted file mode 100644
index a7a1d907d3a8..000000000000
--- a/gprof/po/rw.gmo
+++ /dev/null
Binary files differ
diff --git a/gprof/po/sv.gmo b/gprof/po/sv.gmo
deleted file mode 100644
index a37b0ef2cc76..000000000000
--- a/gprof/po/sv.gmo
+++ /dev/null
Binary files differ
diff --git a/gprof/po/tr.gmo b/gprof/po/tr.gmo
deleted file mode 100644
index 82735ab742f9..000000000000
--- a/gprof/po/tr.gmo
+++ /dev/null
Binary files differ
diff --git a/gprof/po/vi.gmo b/gprof/po/vi.gmo
deleted file mode 100644
index 162edd92b48b..000000000000
--- a/gprof/po/vi.gmo
+++ /dev/null
Binary files differ
diff --git a/gprof/sparc.c b/gprof/sparc.c
index 685db2fc4a52..47592d88670c 100644
--- a/gprof/sparc.c
+++ b/gprof/sparc.c
@@ -48,18 +48,6 @@ sparc_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
unsigned int insn;
Sym *child;
- if (core_text_space == 0)
- {
- return;
- }
- if (p_lowpc < s_lowpc)
- {
- p_lowpc = s_lowpc;
- }
- if (p_highpc > s_highpc)
- {
- p_highpc = s_highpc;
- }
DBG (CALLDEBUG, printf ("[find_call] %s: 0x%lx to 0x%lx\n",
parent->name, (unsigned long) p_lowpc,
(unsigned long) p_highpc));
@@ -77,7 +65,7 @@ sparc_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
*/
dest_pc = pc + (((bfd_signed_vma) (insn & 0x3fffffff)
^ 0x20000000) - 0x20000000);
- if (dest_pc >= s_lowpc && dest_pc <= s_highpc)
+ if (hist_check_address (dest_pc))
{
child = sym_lookup (&symtab, dest_pc);
DBG (CALLDEBUG,
diff --git a/gprof/sym_ids.c b/gprof/sym_ids.c
index d41a716b78e5..5b8f3971bf12 100644
--- a/gprof/sym_ids.c
+++ b/gprof/sym_ids.c
@@ -27,6 +27,7 @@
#include "symtab.h"
#include "cg_arcs.h"
#include "sym_ids.h"
+#include "corefile.h"
static struct sym_id
{
@@ -218,12 +219,19 @@ parse_id (struct sym_id *id)
static bfd_boolean
match (Sym *pattern, Sym *sym)
{
- return (pattern->file ? pattern->file == sym->file : TRUE)
- && (pattern->line_num ? pattern->line_num == sym->line_num : TRUE)
- && (pattern->name
- ? strcmp (pattern->name,
- sym->name+(discard_underscores && sym->name[0] == '_')) == 0
- : TRUE);
+ if (pattern->file && pattern->file != sym->file)
+ return FALSE;
+ if (pattern->line_num && pattern->line_num != sym->line_num)
+ return FALSE;
+ if (pattern->name)
+ {
+ const char *sym_name = sym->name;
+ if (*sym_name && bfd_get_symbol_leading_char (core_bfd) == *sym_name)
+ sym_name++;
+ if (strcmp (pattern->name, sym_name) != 0)
+ return FALSE;
+ }
+ return TRUE;
}
diff --git a/gprof/tahoe.c b/gprof/tahoe.c
index de94db6938af..c1d9c42742ac 100644
--- a/gprof/tahoe.c
+++ b/gprof/tahoe.c
@@ -235,18 +235,6 @@ tahoe_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
indirectchild.cg.cyc.head = &indirectchild;
}
- if (core_text_space == 0)
- {
- return;
- }
- if (p_lowpc < s_lowpc)
- {
- p_lowpc = s_lowpc;
- }
- if (p_highpc > s_highpc)
- {
- p_highpc = s_highpc;
- }
DBG (CALLDEBUG, printf ("[findcall] %s: 0x%lx to 0x%lx\n",
parent->name, (unsigned long) p_lowpc,
(unsigned long) p_highpc));
@@ -307,7 +295,7 @@ tahoe_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
* a function.
*/
destpc = pc + tahoe_offset (instructp + length);
- if (destpc >= s_lowpc && destpc <= s_highpc)
+ if (hist_check_address (destpc))
{
child = sym_lookup (&symtab, destpc);
DBG (CALLDEBUG,
diff --git a/gprof/utils.c b/gprof/utils.c
index 146e1f376c66..cf79fd6a9419 100644
--- a/gprof/utils.c
+++ b/gprof/utils.c
@@ -33,6 +33,7 @@
#include "symtab.h"
#include "cg_arcs.h"
#include "utils.h"
+#include "corefile.h"
/*
@@ -49,20 +50,11 @@ print_name_only (Sym *self)
if (name)
{
- if (!bsd_style_output)
+ if (!bsd_style_output && demangle)
{
- if (name[0] == '_' && name[1] && discard_underscores)
- {
- name++;
- }
- if (demangle)
- {
- demangled = cplus_demangle (name, DMGL_ANSI | DMGL_PARAMS);
- if (demangled)
- {
- name = demangled;
- }
- }
+ demangled = bfd_demangle (core_bfd, name, DMGL_ANSI | DMGL_PARAMS);
+ if (demangled)
+ name = demangled;
}
printf ("%s", name);
size = strlen (name);
diff --git a/gprof/vax.c b/gprof/vax.c
index 6216589d9605..a6904c1e9881 100644
--- a/gprof/vax.c
+++ b/gprof/vax.c
@@ -247,18 +247,6 @@ vax_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
indirectchild.cg.cyc.head = &indirectchild;
}
- if (core_text_space == 0)
- {
- return;
- }
- if (p_lowpc < s_lowpc)
- {
- p_lowpc = s_lowpc;
- }
- if (p_highpc > s_highpc)
- {
- p_highpc = s_highpc;
- }
DBG (CALLDEBUG, printf ("[findcall] %s: 0x%lx to 0x%lx\n",
parent->name, (unsigned long) p_lowpc,
(unsigned long) p_highpc));
@@ -318,7 +306,7 @@ vax_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
* a function.
*/
destpc = pc + vax_offset (instructp + length);
- if (destpc >= s_lowpc && destpc <= s_highpc)
+ if (hist_check_address (destpc))
{
child = sym_lookup (&symtab, destpc);
DBG (CALLDEBUG,
diff --git a/include/ChangeLog b/include/ChangeLog
index 0a3787aac37d..275d7291df6f 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,146 @@
+2007-07-03 Nathan Sidwell <nathan@codesourcery.com>
+
+ * opcode/m68k.h: Document j K & E.
+
+2007-06-29 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
+
+ * dis-asm.h (print_insn_cr16): New prototype.
+
+2007-06-01 Noah Misch <noah@cs.caltech.edu>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * bfdlink.h (struct bfd_link_info): Add input_bfds_tail.
+
+2007-05-07 Nathan Froyd <froydnj@codesourcery.com>
+
+ * libiberty.h (writeargv): Declare.
+
+2007-04-30 Alan Modra <amodra@bigpond.net.au>
+
+ * bfdlink.h (struct bfd_link_info): Add "info" and "minfo".
+
+2007-04-25 Mark Mitchell <mark@codesourcery.com>
+
+ * demangle.h: Change license to LGPL + exception.
+
+2007-04-10 Richard Henderson <rth@redhat.com>
+
+ * bfdlink.h (struct bfd_link_info): Add relax_trip.
+
+2007-03-29 Joel Brobecker <brobecker@adacore.com>
+
+ * filenames.h (FILENAME_CMP): Adjust define to call filename_cmp
+ regardless of the type of file system.
+
+2007-03-06 Jan Hubicka <jh@suse.cz>
+
+ * ansidecl.h (ATTRIBUTE_COLD, ATTRIBUTE_HOT): New.
+
+2007-02-21 Nick Clifton <nickc@redhat.com>
+
+ * bfdlink.h (struct bfd_link_callbacks): Add
+ override_segment_assignment field.
+
+2007-02-17 Mark Mitchell <mark@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+ Vladimir Prus <vladimir@codesourcery.com
+ Joseph Myers <joseph@codesourcery.com>
+
+ * bin-bugs.h: Remove.
+
+2007-02-09 Joseph S. Myers <joseph@codesourcery.com>
+
+ * libiberty.h (pex_write_input): Remove prototype.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * Contribute the following changes:
+ 2001-03-26 Ben Elliston <bje@redhat.com>
+
+ * dis-asm.h (print_insn_mep): Declare.
+
+2007-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * dis-asm.h (print_i386_disassembler_options): New.
+
+2007-01-31 Vladimir Prus <vladimir@codesourcery.com>
+
+ * libiberty.h (PEX_STDERR_TO_PIPE): New define.
+ (PEX_BINARY_ERROR): New define.
+ (pex_read_err): New function.
+
+2007-01-29 Simon Baldwin <simonb@google.com>
+
+ * demangle.h: New cplus_demangle_print_callback,
+ cplus_demangle_v3_callback, and java_demangle_v3_callback function
+ prototypes, and demangle_callbackref type definition.
+
+2007-01-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3831
+ * bfdlink.h (bfd_link_info): Rename dynamic to dynamic_list.
+ Add dynamic and dynamic_data.
+
+2006-12-05 Michael Tautschnig <tautschn@model.in.tum.de>
+ Nick Clifton <nickc@redhat.com>
+
+ * ansidecl.h (ATTRIBUTE_PACKED): Define.
+
+2006-11-30 Andrew Stubbs <andrew.stubbs@st.com>
+ J"orn Rennecke <joern.rennecke@st.com>
+
+ PR driver/29931
+ * libiberty.h (make_relative_prefix_ignore_links): Declare.
+
+2006-11-27 Bob Wilson <bob.wilson@acm.org>
+
+ * xtensa-config.h (XSHAL_ABI): New.
+ (XTHAL_ABI_WINDOWED, XTHAL_ABI_CALL0): New.
+
+2006-11-27 Bob Wilson <bob.wilson@acm.org>
+
+ * xtensa-isa.h (STATIC_LIBISA): Delete.
+
+2006-10-30 Paul Brook <paul@codesourcery.com>
+
+ * dis-asm.h (disassemble_info): Add symtab, symtab_pos and
+ symtab_size.
+
+2006-10-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3111
+ * bfdlink.h (bfd_link_info): Add reduce_memory_overheads.
+
+2006-10-25 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
+ Yukishige Shibata <shibata@rd.scei.sony.co.jp>
+ Nobuhisa Fujinami <fnami@rd.scei.sony.co.jp>
+ Takeaki Fukuoka <fukuoka@rd.scei.sony.co.jp>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * dis-asm.h (print_insn_spu): Declare.
+
+2006-10-17 Mark Shinwell <shinwell@codesourcery.com>
+
+ * elf/arm.h: Define TAG_CPU_ARCH_* constants.
+
+2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * dis-asm.h: Add prototypes for Score disassembler routines.
+
+2006-09-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * bfdlink.h (bfd_elf_dynamic_list): New.
+ (bfd_link_info): Add a dynamic field.
+
+2006-08-04 Marcelo Tosatti <marcelo@kvack.org>
+
+ * bfdlink.h (struct bfd_link_info): New field: print_gc_sections.
+
+2006-07-10 Jakub Jelinek <jakub@redhat.com>
+
+ * bfdlink.h (struct bfd_link_info): Add emit_hash and
+ emit_gnu_hash bitfields.
+
2006-04-11 Jim Blandy <jimb@codesourcery.com>
* libiberty.h (pex_input_file, pex_input_pipe): New declarations.
@@ -17,6 +160,11 @@
R_BFIN_GOTOFFLO): New relocs.
(EF_BFIN_PIC, EF_BFIN_FDPIC, EF_BFIN_PIC_FLAGS): New macros.
+2006-03-23 Michael Matz <matz@suse.de>
+
+ * elf/x86-64.h: Add the new relocations with their official
+ numbers.
+
2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
Anil Paranjape <anilp1@kpitcummins.com>
Shilin Shakti <shilins@kpitcummins.com>
diff --git a/include/ansidecl.h b/include/ansidecl.h
index a1a765d63f32..c19955a98a67 100644
--- a/include/ansidecl.h
+++ b/include/ansidecl.h
@@ -361,6 +361,28 @@ So instead we use the macro below and test it against specific values. */
# endif /* GNUC >= 3.0 */
#endif /* ATTRIBUTE_ALIGNED_ALIGNOF */
+/* Useful for structures whose layout must much some binary specification
+ regardless of the alignment and padding qualities of the compiler. */
+#ifndef ATTRIBUTE_PACKED
+# define ATTRIBUTE_PACKED __attribute__ ((packed))
+#endif
+
+/* Attribute `hot' and `cold' was valid as of gcc 4.3. */
+#ifndef ATTRIBUTE_COLD
+# if (GCC_VERSION >= 4003)
+# define ATTRIBUTE_COLD __attribute__ ((__cold__))
+# else
+# define ATTRIBUTE_COLD
+# endif /* GNUC >= 4.3 */
+#endif /* ATTRIBUTE_COLD */
+#ifndef ATTRIBUTE_HOT
+# if (GCC_VERSION >= 4003)
+# define ATTRIBUTE_HOT __attribute__ ((__hot__))
+# else
+# define ATTRIBUTE_HOT
+# endif /* GNUC >= 4.3 */
+#endif /* ATTRIBUTE_HOT */
+
/* We use __extension__ in some places to suppress -pedantic warnings
about GCC extensions. This feature didn't work properly before
gcc 2.8. */
diff --git a/include/bfdlink.h b/include/bfdlink.h
index f4b7aa7cfa41..a373225a335c 100644
--- a/include/bfdlink.h
+++ b/include/bfdlink.h
@@ -1,6 +1,6 @@
/* bfdlink.h -- header file for BFD link routines
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -221,6 +221,8 @@ enum report_method
RM_GENERATE_ERROR
};
+struct bfd_elf_dynamic_list;
+
/* This structure holds all the information needed to communicate
between BFD and the linker when doing a link. */
@@ -324,6 +326,27 @@ struct bfd_link_info
/* TRUE if unreferenced sections should be removed. */
unsigned int gc_sections: 1;
+ /* TRUE if user shoudl be informed of removed unreferenced sections. */
+ unsigned int print_gc_sections: 1;
+
+ /* TRUE if .hash section should be created. */
+ unsigned int emit_hash: 1;
+
+ /* TRUE if .gnu.hash section should be created. */
+ unsigned int emit_gnu_hash: 1;
+
+ /* If TRUE reduce memory overheads, at the expense of speed. This will
+ cause map file generation to use an O(N^2) algorithm and disable
+ caching ELF symbol buffer. */
+ unsigned int reduce_memory_overheads: 1;
+
+ /* TRUE if all data symbols should be dynamic. */
+ unsigned int dynamic_data: 1;
+
+ /* TRUE if some symbols have to be dynamic, controlled by
+ --dynamic-list command line options. */
+ unsigned int dynamic: 1;
+
/* What to do with unresolved symbols in an object file.
When producing executables the default is GENERATE_ERROR.
When producing shared libraries the default is IGNORE. The
@@ -372,6 +395,7 @@ struct bfd_link_info
/* The list of input BFD's involved in the link. These are chained
together via the link_next field. */
bfd *input_bfds;
+ bfd **input_bfds_tail;
/* If a symbol should be created for each input BFD, this is section
where those symbols should be placed. It must be a section in
@@ -401,6 +425,11 @@ struct bfd_link_info
current pass, starting from 0. */
int relax_pass;
+ /* Number of relaxation trips. This number is incremented every
+ time the relaxation pass is restarted due to a previous
+ relaxation returning true in *AGAIN. */
+ int relax_trip;
+
/* Non-zero if auto-import thunks for DATA items in pei386 DLLs
should be generated/linked against. Set to 1 if this feature
is explicitly requested by the user, -1 if enabled by default. */
@@ -422,10 +451,13 @@ struct bfd_link_info
/* Start and end of RELRO region. */
bfd_vma relro_start, relro_end;
+
+ /* List of symbols should be dynamic. */
+ struct bfd_elf_dynamic_list *dynamic_list;
};
-/* This structures holds a set of callback functions. These are
- called by the BFD linker routines. Except for einfo, the first
+/* This structures holds a set of callback functions. These are called
+ by the BFD linker routines. Except for the info functions, the first
argument to each callback function is the bfd_link_info structure
being used and each function returns a boolean value. If the
function returns FALSE, then the BFD function which called it should
@@ -537,9 +569,22 @@ struct bfd_link_callbacks
bfd_boolean (*notice)
(struct bfd_link_info *, const char *name,
bfd *abfd, asection *section, bfd_vma address);
- /* General link info message. */
+ /* Error or warning link info message. */
void (*einfo)
(const char *fmt, ...);
+ /* General link info message. */
+ void (*info)
+ (const char *fmt, ...);
+ /* Message to be printed in linker map file. */
+ void (*minfo)
+ (const char *fmt, ...);
+ /* This callback provides a chance for users of the BFD library to
+ override its decision about whether to place two adjacent sections
+ into the same segment. */
+ bfd_boolean (*override_segment_assignment)
+ (struct bfd_link_info *, bfd * abfd,
+ asection * current_section, asection * previous_section,
+ bfd_boolean new_segment);
};
/* The linker builds link_order structures which tell the code how to
@@ -715,4 +760,12 @@ struct bfd_elf_version_tree
struct bfd_elf_version_expr *prev, const char *sym);
};
+struct bfd_elf_dynamic_list
+{
+ struct bfd_elf_version_expr_head head;
+ struct bfd_elf_version_expr *(*match)
+ (struct bfd_elf_version_expr_head *head,
+ struct bfd_elf_version_expr *prev, const char *sym);
+};
+
#endif
diff --git a/include/bin-bugs.h b/include/bin-bugs.h
deleted file mode 100644
index 63901b044f46..000000000000
--- a/include/bin-bugs.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#ifndef REPORT_BUGS_TO
-#define REPORT_BUGS_TO "<URL:http://www.sourceware.org/bugzilla/>"
-#endif
diff --git a/include/coff/ChangeLog b/include/coff/ChangeLog
index f41c115bdadb..3fa22bffd3ad 100644
--- a/include/coff/ChangeLog
+++ b/include/coff/ChangeLog
@@ -1,3 +1,41 @@
+2007-04-27 Alan Modra <amodra@bigpond.net.au>
+
+ * rs6000.h: Write Mimi's name in ASCII.
+
+2007-03-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * internal.h (internal_extra_pe_aouthdr): Add Magic,
+ MajorLinkerVersion, MinorLinkerVersion, SizeOfCode,
+ SizeOfInitializedData, SizeOfUninitializedData,
+ AddressOfEntryPoint, BaseOfCode and BaseOfData.
+
+2006-12-05 Michael Tautschnig <tautschn@model.in.tum.de>
+ Nick Clifton <nickc@redhat.com>
+
+ * external.h (struct external_aouthdr): Add ATTRIBUTE_PACKED.
+ (struct external_syment): Likewise.
+ (union external_auxent): Likewise.
+
+2006-11-14 Phil Lello <phil.lello@homecall.co.uk>
+
+ * pe.h: Added defines for IMAGE_SUBSYSTEM_EFI_ROM and
+ IMAGE_SUBSYSTEM_XBOX.
+ * internal.h: Added defines for PE directory entry types.
+ NB: in internal.h because IMAGE_NUMBEROF_DIRECTORY_ENTRYIES is in
+ pe.h
+
+2006-09-20 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * external.h: Add proper external_aouthdr64 structure (without
+ data_start member).
+ (AOUTHDRSZ64): Set according structure size.
+ (AOUTHDR64): As typedef of external_aouthdr64 structure.
+ * internal.h: Add relocation identifiers for coff.
+ * pe.h: Add define IMAGE_FILE_MACHINE_AMD64 the coff signature.
+ (PEPAOUTHDR): Adjust structure to have proper size (using AOUTHDR64).
+ (PEPAOUTSZ): Calculated size of 240.
+ * x86_64.h: Coff information for x86_64 (AMD64).
+
2006-02-05 Arnold Metselaar <arnold.metselaar@planet.nl>
* internal.h: Add relocation number R_IMM24 for Z80.
diff --git a/include/coff/external.h b/include/coff/external.h
index 9e760bd86dae..8dabc8ab4848 100644
--- a/include/coff/external.h
+++ b/include/coff/external.h
@@ -1,6 +1,6 @@
/* external.h -- External COFF structures
- Copyright 2001 Free Software Foundation, Inc.
+ Copyright 2001, 2006 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -50,12 +50,26 @@ typedef struct external_aouthdr
char entry[4]; /* entry pt. */
char text_start[4]; /* base of text used for this file */
char data_start[4]; /* base of data used for this file */
- }
+ } ATTRIBUTE_PACKED
AOUTHDR;
#define AOUTHDRSZ 28
#define AOUTSZ 28
-#endif
+
+typedef struct external_aouthdr64
+{
+ char magic[2]; /* Type of file. */
+ char vstamp[2]; /* Version stamp. */
+ char tsize[4]; /* Text size in bytes, padded to FW bdry*/
+ char dsize[4]; /* Initialized data " ". */
+ char bsize[4]; /* Uninitialized data " ". */
+ char entry[4]; /* Entry pt. */
+ char text_start[4]; /* Base of text used for this file. */
+}
+AOUTHDR64;
+#define AOUTHDRSZ64 24
+
+#endif /* not DO_NOT_DEFINE_AOUTHDR */
#ifndef DO_NOT_DEFINE_SCNHDR
/********************** SECTION HEADER **********************/
@@ -150,7 +164,7 @@ struct external_syment
char e_type[2];
char e_sclass[1];
char e_numaux[1];
-};
+} ATTRIBUTE_PACKED ;
#define SYMENT struct external_syment
#define SYMESZ 18
@@ -242,7 +256,7 @@ union external_auxent
char x_tvlen[2]; /* length of .tv */
char x_tvran[2][2]; /* tv range */
} x_tv; /* info about .tv section (in auxent of symbol .tv)) */
-};
+} ATTRIBUTE_PACKED ;
#define AUXENT union external_auxent
#define AUXESZ 18
diff --git a/include/coff/internal.h b/include/coff/internal.h
index ed0918a6aeaf..afe6889ed5ca 100644
--- a/include/coff/internal.h
+++ b/include/coff/internal.h
@@ -1,7 +1,7 @@
/* Internal format of COFF object file data structures, for GNU BFD.
This file is part of BFD, the Binary File Descriptor library.
- Copyright 1999, 2000, 2001, 2002, 2003, 2004. 2005
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004. 2005, 2006
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
@@ -103,6 +103,22 @@ typedef struct _IMAGE_DATA_DIRECTORY
bfd_vma VirtualAddress;
long Size;
} IMAGE_DATA_DIRECTORY;
+#define PE_EXPORT_TABLE 0
+#define PE_IMPORT_TABLE 1
+#define PE_RESOURCE_TABLE 2
+#define PE_EXCEPTION_TABLE 3
+#define PE_CERTIFICATE_TABLE 4
+#define PE_BASE_RELOCATION_TABLE 5
+#define PE_DEBUG_DATA 6
+#define PE_ARCHITECTURE 7
+#define PE_GLOBAL_PTR 8
+#define PE_TLS_TABLE 9
+#define PE_LOAD_CONFIG_TABLE 10
+#define PE_BOUND_IMPORT_TABLE 11
+#define PE_IMPORT_ADDRESS_TABLE 12
+#define PE_DELAY_IMPORT_DESCRIPTOR 13
+#define PE_CLR_RUNTIME_HEADER 14
+/* DataDirectory[15] is currently reserved, so no define. */
#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
/* Default image base for NT. */
@@ -122,6 +138,28 @@ typedef struct _IMAGE_DATA_DIRECTORY
struct internal_extra_pe_aouthdr
{
+ /* FIXME: The following entries are in AOUTHDR. But they aren't
+ available internally in bfd. We add them here so that objdump
+ can dump them. */
+ /* The state of the image file */
+ short Magic;
+ /* Linker major version number */
+ char MajorLinkerVersion;
+ /* Linker minor version number */
+ char MinorLinkerVersion;
+ /* Total size of all code sections */
+ long SizeOfCode;
+ /* Total size of all initialized data sections */
+ long SizeOfInitializedData;
+ /* Total size of all uninitialized data sections */
+ long SizeOfUninitializedData;
+ /* Address of entry point relative to image base. */
+ bfd_vma AddressOfEntryPoint;
+ /* Address of the first code section relative to image base. */
+ bfd_vma BaseOfCode;
+ /* Address of the first data section relative to image base. */
+ bfd_vma BaseOfData;
+
/* PE stuff */
bfd_vma ImageBase; /* address of specific location in memory that
file is located, NT default 0x10000 */
@@ -604,6 +642,25 @@ struct internal_reloc
unsigned long r_offset; /* Used by Alpha ECOFF, SPARC, others */
};
+/* X86-64 relocations. */
+#define R_AMD64_ABS 0 /* Reference is absolute, no relocation is necessary. */
+#define R_AMD64_DIR64 1 /* 64-bit address (VA). */
+#define R_AMD64_DIR32 2 /* 32-bit address (VA) R_DIR32. */
+#define R_AMD64_IMAGEBASE 3 /* 32-bit absolute ref w/o base R_IMAGEBASE. */
+#define R_AMD64_PCRLONG 4 /* 32-bit relative address from byte following reloc R_PCRLONG. */
+#define R_AMD64_PCRLONG_1 5 /* 32-bit relative address from byte distance 1 from reloc. */
+#define R_AMD64_PCRLONG_2 6 /* 32-bit relative address from byte distance 2 from reloc. */
+#define R_AMD64_PCRLONG_3 7 /* 32-bit relative address from byte distance 3 from reloc. */
+#define R_AMD64_PCRLONG_4 8 /* 32-bit relative address from byte distance 4 from reloc. */
+#define R_AMD64_PCRLONG_5 9 /* 32-bit relative address from byte distance 5 from reloc. */
+#define R_AMD64_SECTION 10 /* Section index. */
+#define R_AMD64_SECREL 11 /* 32 bit offset from base of section containing target R_SECREL. */
+#define R_AMD64_SECREL7 12 /* 7 bit unsigned offset from base of section containing target. */
+#define R_AMD64_TOKEN 13 /* 32 bit metadata token. */
+#define R_AMD64_PCRQUAD 14 /* Pseude PC64 relocation - Note: not specified by MS/AMD but need for gas pc-relative 64bit wide relocation generated by ELF. */
+
+/* i386 Relocations. */
+
#define R_DIR16 1
#define R_REL24 5
#define R_DIR32 6
diff --git a/include/coff/pe.h b/include/coff/pe.h
index 643cea480c97..277621cd41b0 100644
--- a/include/coff/pe.h
+++ b/include/coff/pe.h
@@ -1,6 +1,6 @@
/* pe.h - PE COFF header information
- Copyright 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2001, 2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -119,6 +119,7 @@
#define IMAGE_FILE_MACHINE_THUMB 0x01c2
#define IMAGE_FILE_MACHINE_TRICORE 0x0520
#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
+#define IMAGE_FILE_MACHINE_AMD64 0x8664
#define IMAGE_SUBSYSTEM_UNKNOWN 0
#define IMAGE_SUBSYSTEM_NATIVE 1
@@ -129,6 +130,8 @@
#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
+#define IMAGE_SUBSYSTEM_EFI_ROM 13
+#define IMAGE_SUBSYSTEM_XBOX 14
/* Magic values that are true for all dos/nt implementations. */
#define DOSMAGIC 0x5a4d
@@ -259,6 +262,7 @@ typedef struct
/* IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; */
char DataDirectory[16][2][4]; /* 16 entries, 2 elements/entry, 4 chars. */
} PEAOUTHDR;
+
#undef AOUTSZ
#define AOUTSZ (AOUTHDRSZ + 196)
@@ -267,8 +271,11 @@ typedef struct
of just 4 bytes long. */
typedef struct
{
+#ifdef AOUTHDRSZ64
+ AOUTHDR64 standard;
+#else
AOUTHDR standard;
-
+#endif
/* NT extra fields; see internal.h for descriptions. */
char ImageBase[8];
char SectionAlignment[4];
@@ -294,7 +301,12 @@ typedef struct
/* IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; */
char DataDirectory[16][2][4]; /* 16 entries, 2 elements/entry, 4 chars. */
} PEPAOUTHDR;
+
+#ifdef AOUTHDRSZ64
+#define PEPAOUTSZ (AOUTHDRSZ64 + 196 + 5 * 4) /* = 240 */
+#else
#define PEPAOUTSZ 240
+#endif
#undef E_FILNMLEN
#define E_FILNMLEN 18 /* # characters in a file name. */
diff --git a/include/coff/rs6000.h b/include/coff/rs6000.h
index 5323662823ed..a4e6eb5f9ee8 100644
--- a/include/coff/rs6000.h
+++ b/include/coff/rs6000.h
@@ -1,10 +1,6 @@
/* IBM RS/6000 "XCOFF" file definitions for BFD.
Copyright (C) 1990, 1991, 2001 Free Software Foundation, Inc.
- FIXME: Can someone provide a transliteration of this name into ASCII?
- Using the following chars caused a compiler warning on HIUX (so I replaced
- them with octal escapes), and isn't useful without an understanding of what
- character set it is.
- Written by Mimi Ph\373\364ng-Th\345o V\365 of IBM
+ Written by Mimi Phuong-Thao Vo of IBM
and John Gilmore of Cygnus Support. */
/********************** FILE HEADER **********************/
diff --git a/include/coff/x86_64.h b/include/coff/x86_64.h
new file mode 100644
index 000000000000..b58dd2f236ec
--- /dev/null
+++ b/include/coff/x86_64.h
@@ -0,0 +1,54 @@
+/* COFF information for AMD 64.
+ Copyright 2006 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Written by Kai Tietz, OneVision Software GmbH&CoKg. */
+
+#define L_LNNO_SIZE 2
+#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
+
+#include "coff/external.h"
+
+#define AMD64MAGIC 0x8664
+
+#define AMD64BADMAG(x) ((x).f_magic != AMD64MAGIC)
+#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
+
+#define OMAGIC 0404 /* Object files, eg as output. */
+#define ZMAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC /* Demand load format, eg normal ld output 0x10b. */
+#define STMAGIC 0401 /* Target shlib. */
+#define SHMAGIC 0443 /* Host shlib. */
+
+/* Define some NT default values. */
+/* #define NT_IMAGE_BASE 0x400000 moved to internal.h. */
+#define NT_SECTION_ALIGNMENT 0x1000
+#define NT_FILE_ALIGNMENT 0x200
+#define NT_DEF_RESERVE 0x100000
+#define NT_DEF_COMMIT 0x1000
+
+/* Relocation directives. */
+
+struct external_reloc
+{
+ char r_vaddr[4];
+ char r_symndx[4];
+ char r_type[2];
+};
+
+#define RELOC struct external_reloc
+#define RELSZ 10
diff --git a/include/demangle.h b/include/demangle.h
index af2946727369..49f23e543ed8 100644
--- a/include/demangle.h
+++ b/include/demangle.h
@@ -1,21 +1,30 @@
/* Defs for interface to demanglers.
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002,
- 2003, 2004 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2007 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. */
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License
+ as published by the Free Software Foundation; either version 2, or
+ (at your option) any later version.
+
+ In addition to the permissions in the GNU Library General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Library Public License restrictions do apply in other
+ respects; for example, they cover modification of the file, and
+ distribution when not linked into a combined executable.)
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ 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 !defined (DEMANGLE_H)
@@ -131,13 +140,25 @@ cplus_demangle_set_style (enum demangling_styles style);
extern enum demangling_styles
cplus_demangle_name_to_style (const char *name);
-/* V3 ABI demangling entry points, defined in cp-demangle.c. */
-extern char*
-cplus_demangle_v3 (const char* mangled, int options);
+/* Callback typedef for allocation-less demangler interfaces. */
+typedef void (*demangle_callbackref) (const char *, size_t, void *);
+
+/* V3 ABI demangling entry points, defined in cp-demangle.c. Callback
+ variants return non-zero on success, zero on error. char* variants
+ return a string allocated by malloc on success, NULL on error. */
+extern int
+cplus_demangle_v3_callback (const char *mangled, int options,
+ demangle_callbackref callback, void *opaque);
extern char*
-java_demangle_v3 (const char* mangled);
+cplus_demangle_v3 (const char *mangled, int options);
+extern int
+java_demangle_v3_callback (const char *mangled,
+ demangle_callbackref callback, void *opaque);
+
+extern char*
+java_demangle_v3 (const char *mangled);
enum gnu_v3_ctor_kinds {
gnu_v3_complete_object_ctor = 1,
@@ -529,6 +550,25 @@ cplus_demangle_print (int options,
int estimated_length,
size_t *p_allocated_size);
+/* This function takes a struct demangle_component tree and passes back
+ a demangled string in one or more calls to a callback function.
+ The first argument is DMGL_* options. The second is the tree to
+ demangle. The third is a pointer to a callback function; on each call
+ this receives an element of the demangled string, its length, and an
+ opaque value. The fourth is the opaque value passed to the callback.
+ The callback is called once or more to return the full demangled
+ string. The demangled element string is always nul-terminated, though
+ its length is also provided for convenience. In contrast to
+ cplus_demangle_print(), this function does not allocate heap memory
+ to grow output strings (except perhaps where alloca() is implemented
+ by malloc()), and so is normally safe for use where the heap has been
+ corrupted. On success, this function returns 1; on failure, 0. */
+
+extern int
+cplus_demangle_print_callback (int options,
+ const struct demangle_component *tree,
+ demangle_callbackref callback, void *opaque);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/include/dis-asm.h b/include/dis-asm.h
index bdbf9f88c5f6..40afe17cfd7b 100644
--- a/include/dis-asm.h
+++ b/include/dis-asm.h
@@ -1,6 +1,6 @@
/* Interface between the opcode library and its callers.
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
@@ -35,9 +35,10 @@ extern "C" {
#include <stdio.h>
#include "bfd.h"
-typedef int (*fprintf_ftype) (void *, const char*, ...) ATTRIBUTE_FPTR_PRINTF_2;
+ typedef int (*fprintf_ftype) (void *, const char*, ...) /*ATTRIBUTE_FPTR_PRINTF_2*/;
-enum dis_insn_type {
+enum dis_insn_type
+{
dis_noninsn, /* Not a valid instruction */
dis_nonbranch, /* Not a branch instruction */
dis_branch, /* Unconditional branch */
@@ -58,7 +59,8 @@ enum dis_insn_type {
It must be initialized before it is first passed; this can be done
by hand, or using one of the initialization macros below. */
-typedef struct disassemble_info {
+typedef struct disassemble_info
+{
fprintf_ftype fprintf_func;
void *stream;
void *application_data;
@@ -94,6 +96,12 @@ typedef struct disassemble_info {
/* Number of symbols in array. */
int num_symbols;
+ /* Symbol table provided for targets that want to look at it. This is
+ used on Arm to find mapping symbols and determine Arm/Thumb code. */
+ asymbol **symtab;
+ int symtab_pos;
+ int symtab_size;
+
/* For use by the disassembler.
The top 16 bits are reserved for public use (and are documented here).
The bottom 16 bits are for the internal use of the disassembler. */
@@ -201,59 +209,66 @@ typedef struct disassemble_info {
target address. Return number of octets processed. */
typedef int (*disassembler_ftype) (bfd_vma, disassemble_info *);
-extern int print_insn_big_mips (bfd_vma, disassemble_info *);
-extern int print_insn_little_mips (bfd_vma, disassemble_info *);
-extern int print_insn_i386 (bfd_vma, disassemble_info *);
-extern int print_insn_i386_att (bfd_vma, disassemble_info *);
-extern int print_insn_i386_intel (bfd_vma, disassemble_info *);
-extern int print_insn_ia64 (bfd_vma, disassemble_info *);
-extern int print_insn_i370 (bfd_vma, disassemble_info *);
-extern int print_insn_m68hc11 (bfd_vma, disassemble_info *);
-extern int print_insn_m68hc12 (bfd_vma, disassemble_info *);
-extern int print_insn_m68k (bfd_vma, disassemble_info *);
-extern int print_insn_z80 (bfd_vma, disassemble_info *);
-extern int print_insn_z8001 (bfd_vma, disassemble_info *);
-extern int print_insn_z8002 (bfd_vma, disassemble_info *);
-extern int print_insn_h8300 (bfd_vma, disassemble_info *);
-extern int print_insn_h8300h (bfd_vma, disassemble_info *);
-extern int print_insn_h8300s (bfd_vma, disassemble_info *);
-extern int print_insn_h8500 (bfd_vma, disassemble_info *);
extern int print_insn_alpha (bfd_vma, disassemble_info *);
-extern int print_insn_big_arm (bfd_vma, disassemble_info *);
-extern int print_insn_little_arm (bfd_vma, disassemble_info *);
-extern int print_insn_sparc (bfd_vma, disassemble_info *);
extern int print_insn_avr (bfd_vma, disassemble_info *);
extern int print_insn_bfin (bfd_vma, disassemble_info *);
+extern int print_insn_big_arm (bfd_vma, disassemble_info *);
+extern int print_insn_big_mips (bfd_vma, disassemble_info *);
+extern int print_insn_big_or32 (bfd_vma, disassemble_info *);
+extern int print_insn_big_powerpc (bfd_vma, disassemble_info *);
+extern int print_insn_big_score (bfd_vma, disassemble_info *);
+extern int print_insn_cr16 (bfd_vma, disassemble_info *);
+extern int print_insn_crx (bfd_vma, disassemble_info *);
extern int print_insn_d10v (bfd_vma, disassemble_info *);
extern int print_insn_d30v (bfd_vma, disassemble_info *);
extern int print_insn_dlx (bfd_vma, disassemble_info *);
extern int print_insn_fr30 (bfd_vma, disassemble_info *);
+extern int print_insn_frv (bfd_vma, disassemble_info *);
+extern int print_insn_h8300 (bfd_vma, disassemble_info *);
+extern int print_insn_h8300h (bfd_vma, disassemble_info *);
+extern int print_insn_h8300s (bfd_vma, disassemble_info *);
+extern int print_insn_h8500 (bfd_vma, disassemble_info *);
extern int print_insn_hppa (bfd_vma, disassemble_info *);
+extern int print_insn_i370 (bfd_vma, disassemble_info *);
+extern int print_insn_i386 (bfd_vma, disassemble_info *);
+extern int print_insn_i386_att (bfd_vma, disassemble_info *);
+extern int print_insn_i386_intel (bfd_vma, disassemble_info *);
extern int print_insn_i860 (bfd_vma, disassemble_info *);
extern int print_insn_i960 (bfd_vma, disassemble_info *);
+extern int print_insn_ia64 (bfd_vma, disassemble_info *);
extern int print_insn_ip2k (bfd_vma, disassemble_info *);
+extern int print_insn_iq2000 (bfd_vma, disassemble_info *);
+extern int print_insn_little_arm (bfd_vma, disassemble_info *);
+extern int print_insn_little_mips (bfd_vma, disassemble_info *);
+extern int print_insn_little_or32 (bfd_vma, disassemble_info *);
+extern int print_insn_little_powerpc (bfd_vma, disassemble_info *);
+extern int print_insn_little_score (bfd_vma, disassemble_info *);
+extern int print_insn_m32c (bfd_vma, disassemble_info *);
extern int print_insn_m32r (bfd_vma, disassemble_info *);
+extern int print_insn_m68hc11 (bfd_vma, disassemble_info *);
+extern int print_insn_m68hc12 (bfd_vma, disassemble_info *);
+extern int print_insn_m68k (bfd_vma, disassemble_info *);
extern int print_insn_m88k (bfd_vma, disassemble_info *);
-extern int print_insn_maxq_little (bfd_vma, disassemble_info *);
extern int print_insn_maxq_big (bfd_vma, disassemble_info *);
+extern int print_insn_maxq_little (bfd_vma, disassemble_info *);
extern int print_insn_mcore (bfd_vma, disassemble_info *);
+extern int print_insn_mep (bfd_vma, disassemble_info *);
extern int print_insn_mmix (bfd_vma, disassemble_info *);
extern int print_insn_mn10200 (bfd_vma, disassemble_info *);
extern int print_insn_mn10300 (bfd_vma, disassemble_info *);
-extern int print_insn_mt (bfd_vma, disassemble_info *);
extern int print_insn_msp430 (bfd_vma, disassemble_info *);
+extern int print_insn_mt (bfd_vma, disassemble_info *);
extern int print_insn_ns32k (bfd_vma, disassemble_info *);
-extern int print_insn_crx (bfd_vma, disassemble_info *);
extern int print_insn_openrisc (bfd_vma, disassemble_info *);
-extern int print_insn_big_or32 (bfd_vma, disassemble_info *);
-extern int print_insn_little_or32 (bfd_vma, disassemble_info *);
extern int print_insn_pdp11 (bfd_vma, disassemble_info *);
extern int print_insn_pj (bfd_vma, disassemble_info *);
-extern int print_insn_big_powerpc (bfd_vma, disassemble_info *);
-extern int print_insn_little_powerpc (bfd_vma, disassemble_info *);
extern int print_insn_rs6000 (bfd_vma, disassemble_info *);
extern int print_insn_s390 (bfd_vma, disassemble_info *);
extern int print_insn_sh (bfd_vma, disassemble_info *);
+extern int print_insn_sh64 (bfd_vma, disassemble_info *);
+extern int print_insn_sh64x_media (bfd_vma, disassemble_info *);
+extern int print_insn_sparc (bfd_vma, disassemble_info *);
+extern int print_insn_spu (bfd_vma, disassemble_info *);
extern int print_insn_tic30 (bfd_vma, disassemble_info *);
extern int print_insn_tic4x (bfd_vma, disassemble_info *);
extern int print_insn_tic54x (bfd_vma, disassemble_info *);
@@ -261,25 +276,24 @@ extern int print_insn_tic80 (bfd_vma, disassemble_info *);
extern int print_insn_v850 (bfd_vma, disassemble_info *);
extern int print_insn_vax (bfd_vma, disassemble_info *);
extern int print_insn_w65 (bfd_vma, disassemble_info *);
+extern int print_insn_xc16x (bfd_vma, disassemble_info *);
extern int print_insn_xstormy16 (bfd_vma, disassemble_info *);
extern int print_insn_xtensa (bfd_vma, disassemble_info *);
-extern int print_insn_sh64 (bfd_vma, disassemble_info *);
-extern int print_insn_sh64x_media (bfd_vma, disassemble_info *);
-extern int print_insn_frv (bfd_vma, disassemble_info *);
-extern int print_insn_iq2000 (bfd_vma, disassemble_info *);
-extern int print_insn_xc16x (bfd_vma, disassemble_info *);
-extern int print_insn_m32c (bfd_vma, disassemble_info *);
+extern int print_insn_z80 (bfd_vma, disassemble_info *);
+extern int print_insn_z8001 (bfd_vma, disassemble_info *);
+extern int print_insn_z8002 (bfd_vma, disassemble_info *);
extern disassembler_ftype arc_get_disassembler (void *);
extern disassembler_ftype cris_get_disassembler (bfd *);
+extern void print_i386_disassembler_options (FILE *);
extern void print_mips_disassembler_options (FILE *);
extern void print_ppc_disassembler_options (FILE *);
extern void print_arm_disassembler_options (FILE *);
extern void parse_arm_disassembler_option (char *);
-extern int get_arm_regname_num_options (void);
-extern int set_arm_regname_option (int);
-extern int get_arm_regnames (int, const char **, const char **, const char *const **);
+extern int get_arm_regname_num_options (void);
+extern int set_arm_regname_option (int);
+extern int get_arm_regnames (int, const char **, const char **, const char *const **);
extern bfd_boolean arm_symbol_is_valid (asymbol *, struct disassemble_info *);
/* Fetch the disassembler for a given BFD, if that support is available. */
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index 48ce81c1354a..ba08331c4c02 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,3 +1,169 @@
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
+
+ * ppc.h (Tag_GNU_Power_ABI_FP): Define.
+
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
+
+ * mips.h (Tag_GNU_MIPS_ABI_FP): Define.
+
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
+
+ * arm.h (elf32_arm_add_eabi_attr_int,
+ elf32_arm_add_eabi_attr_string, elf32_arm_add_eabi_attr_compat,
+ elf32_arm_get_eabi_attr_int, elf32_arm_set_eabi_attr_contents,
+ elf32_arm_eabi_attr_size, Tag_NULL, Tag_File, Tag_Section,
+ Tag_Symbol, Tag_compatibility): Remove.
+ * common.h (SHT_GNU_ATTRIBUTES): Define.
+
+2007-06-29 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
+
+ * common.h (EM_CR16): New entry for CR16 cpu.
+ * cr16.h: New file.
+
+2007-06-11 Sterling Augustine <sterling@tensilica.com>
+ Bob Wilson <bob.wilson@acm.org>
+
+ * xtensa.h (XTENSA_PROP_INSN_NO_TRANSFORM): Renamed to...
+ (XTENSA_PROP_NO_TRANSFORM): ...this.
+
+2007-05-18 Caroline Tice <ctice@apple.com>
+
+ * dwarf2.h: (enum dwarf_location_atom): Add new DW_OP,
+ DW_OP_GNU_uninit.
+
+2007-05-12 Alan Modra <amodra@bigpond.net.au>
+
+ * spu.h (R_SPU_ADDR16X): Define.
+ (R_SPU_PPU32, R_SPU_PPU64): Renumber.
+
+2007-05-11 Alan Modra <amodra@bigpond.net.au>
+
+ * spu.h (R_SPU_PPU32, R_SPU_PPU64): Define.
+
+2007-05-02 Alan Modra <amodra@bigpond.net.au>
+
+ * internal.h (ELF_IS_SECTION_IN_SEGMENT): Check both file offset
+ and vma for appropriate sections.
+
+2007-04-26 Jan Beulich <jbeulich@novell.com>
+
+ * common.h (DT_ENCODING): Correct value (back to spec mandated
+ value).
+
+2007-03-08 Alan Modra <amodra@bigpond.net.au>
+
+ * v850.h (V850_OTHER_TDA_BYTE): Delete.
+ (V850_OTHER_SDA, V850_OTHER_ZDA, V850_OTHER_TDA): Assign bits
+ that don't clash with visibility bits.
+
+2007-03-07 Alan Modra <amodra@bigpond.net.au>
+
+ * common.h (ELF_ST_VISIBILITY): Comment typo fix.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+ Richard Sandiford <rsandifo@redhat.com>
+ Richard Henderson <rth@redhat.com>
+ DJ Delorie <dj@redhat.com>
+ Ben Elliston <bje@redhat.com>
+
+ * mep.h: New file.
+ * common.h (EM_CYGNUS_MEP): Define.
+
+2007-02-15 Dave Brolley <brolley@redhat.com>
+
+ From Graydon Hoare <graydon@redhat.com>:
+ * common.h (STT_RELC, STT_SRELC, R_RELC): New macros.
+
+2007-01-08 Kazu Hirata <kazu@codesourcery.com>
+
+ * m68k.h (EF_M68K_FIDO): New.
+ (EF_M68K_ARCH_MASK): OR EF_M68K_FIDO.
+ (EF_M68K_CPU32_FIDO_A, EF_M68K_CPU32_MASK): Remove.
+
+2006-12-25 Kazu Hirata <kazu@codesourcery.com>
+
+ * m68k.h (EF_M68K_CPU32_FIDO_A, EF_M68K_CPU32_MASK): New.
+
+2006-12-19 Kazu Hirata <kazu@codesourcery.com>
+
+ * m68k.h (EF_M68K_ARCH_MASK): New.
+
+2006-12-19 Nathan Sidwell <nathan@codesourcery.com>
+
+ * internal.h (struct elf_segment_map): Add p_vaddr_offset field.
+
+2006-12-07 Kazu Hirata <kazu@codesourcery.com>
+
+ * m68k.h (EF_M68K_ISA_MASK, EF_M68K_ISA_A_NODIV,
+ EF_M68K_ISA_A, EF_M68K_ISA_A_PLUS, EF_M68K_ISA_B_NOUSP,
+ EF_M68K_ISA_B, EF_M68K_ISA_C, EF_M68K_MAC_MASK, EF_M68K_MAC,
+ EF_M68K_EMAC, EF_M68K_EMAC_B, EF_M68K_FLOAT): Rename to
+ EF_M68K_CF_ISA_MASK, EF_M68K_CF_ISA_A_NODIV, EF_M68K_CF_ISA_A,
+ EF_M68K_CF_ISA_A_PLUS, EF_M68K_CF_ISA_B_NOUSP,
+ EF_M68K_CF_ISA_B, EF_M68K_CF_ISA_C, EF_M68K_CF_MAC_MASK,
+ EF_M68K_CF_MAC, EF_M68K_CF_EMAC, EF_M68K_CF_EMAC_B,
+ EF_M68K_CF_FLOAT, respectively.
+
+2006-12-05 Michael Tautschnig <tautschn@model.in.tum.de>
+ Nick Clifton <nickc@redhat.com>
+
+ * external.h (struct Elf_External_Versym): Use ATTRIBUTE_PACKED.
+
+2006-10-28 Richard Sandiford <richard@codesourcery.com>
+
+ * mips.h (R_MIPS_GLOB_DAT): Define
+ (R_MIPS_max): Bump by 1.
+
+2006-10-25 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
+ Yukishige Shibata <shibata@rd.scei.sony.co.jp>
+ Nobuhisa Fujinami <fnami@rd.scei.sony.co.jp>
+ Takeaki Fukuoka <fukuoka@rd.scei.sony.co.jp>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * common.h (EM_SPU): Define.
+ * spu.h: New file.
+
+2006-10-19 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * score.h (EF_SCORE_PIC): Redefine EF_SCORE_PIC as 0x80000000.
+ (EF_SCORE_FIXDEP): Redefine EF_SCORE_FIXDEP as 0x40000000.
+ (EF_SCORE_HASENTRY): Delete.
+
+2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * score.h: New file.
+ * common.h: Add Score machine number.
+
+2006-07-10 Jakub Jelinek <jakub@redhat.com>
+
+ * common.h (SHT_GNU_HASH, DT_GNU_HASH): Define.
+
+2006-05-31 H.J. Lu <hongjiu.lu@intel.com>
+
+ * internal.h (ELF_SECTION_SIZE): New.
+ (ELF_IS_SECTION_IN_SEGMENT): Likewise.
+ (ELF_IS_SECTION_IN_SEGMENT_FILE): Updated.
+ (ELF_IS_SECTION_IN_SEGMENT_MEMORY): Likewise.
+
+2006-05-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * internal.h (struct elf_segment_map): Add p_align and p_align_valid.
+
+2006-05-24 Carlos O'Donell <carlos@systemhalted.org>
+ Randolph Chung <randolph@tausq.org>
+ * hppa.h (R_PARISC_TLS_GD21L, R_PARISC_TLS_GD14R, R_PARISC_TLS_GDCALL,
+ R_PARISC_TLS_LDM21L, R_PARISC_TLS_LDM14R, R_PARISC_TLS_LDMCALL,
+ R_PARISC_TLS_LDO21L, R_PARISC_TLS_LDO14R, R_PARISC_TLS_DTPMOD32,
+ R_PARISC_TLS_DTPMOD64, R_PARISC_TLS_DTPOFF32, R_PARISC_TLS_DTPOFF64):
+ New TLS relocs.
+ (R_PARISC_TLS_LE21L, R_PARISC_TLS_LE14R, R_PARISC_TLS_IE21L,
+ R_PARISC_TLS_IE14R, R_PARISC_TLS_TPREL32, R_PARISC_TLS_TPREL64):
+ Define TLS relocs using existing equivalents.
+
+2006-05-24 Bjoern Haase <bjoern.m.haase@web.de>
+
+ * avr.h: Add E_AVR_MACH_AVR6, R_AVR_LO8_LDI_GS and R_AVR_HI8_LDI_GS.
+
2006-03-22 Richard Sandiford <richard@codesourcery.com>
Daniel Jacobowitz <dan@codesourcery.com>
Phil Edwards <phil@codesourcery.com>
diff --git a/include/elf/arm.h b/include/elf/arm.h
index 8311c131c99c..e70188338786 100644
--- a/include/elf/arm.h
+++ b/include/elf/arm.h
@@ -84,6 +84,19 @@
#define PF_ARM_PI 0x20000000 /* Segment is position-independent. */
#define PF_ARM_ABS 0x40000000 /* Segment must be loaded at its base address. */
+/* Values for the Tag_CPU_arch EABI attribute. */
+#define TAG_CPU_ARCH_PRE_V4 0
+#define TAG_CPU_ARCH_V4 1
+#define TAG_CPU_ARCH_V4T 2
+#define TAG_CPU_ARCH_V5T 3
+#define TAG_CPU_ARCH_V5TE 4
+#define TAG_CPU_ARCH_V5TEJ 5
+#define TAG_CPU_ARCH_V6 6
+#define TAG_CPU_ARCH_V6KZ 7
+#define TAG_CPU_ARCH_V6T2 8
+#define TAG_CPU_ARCH_V6K 9
+#define TAG_CPU_ARCH_V7 10
+
/* Relocation types. */
START_RELOC_NUMBERS (elf_arm_reloc_type)
@@ -169,9 +182,9 @@ START_RELOC_NUMBERS (elf_arm_reloc_type)
RELOC_NUMBER (R_ARM_LDRS_SB_G0, 78)
RELOC_NUMBER (R_ARM_LDRS_SB_G1, 79)
RELOC_NUMBER (R_ARM_LDRS_SB_G2, 80)
- RELOC_NUMBER (R_ARM_LDC_G0, 81)
- RELOC_NUMBER (R_ARM_LDC_G1, 82)
- RELOC_NUMBER (R_ARM_LDC_G2, 83)
+ RELOC_NUMBER (R_ARM_LDC_SB_G0, 81)
+ RELOC_NUMBER (R_ARM_LDC_SB_G1, 82)
+ RELOC_NUMBER (R_ARM_LDC_SB_G2, 83)
RELOC_NUMBER (R_ARM_MOVW_BREL_NC, 84)
RELOC_NUMBER (R_ARM_MOVT_BREL, 85)
RELOC_NUMBER (R_ARM_MOVW_BREL, 86)
@@ -221,26 +234,15 @@ START_RELOC_NUMBERS (elf_arm_reloc_type)
FAKE_RELOC (R_ARM_GOT32, R_ARM_GOT_BREL) /* 32 bit GOT entry. */
FAKE_RELOC (R_ARM_ROSEGREL32, R_ARM_SBREL31) /* ??? */
FAKE_RELOC (R_ARM_AMP_VCALL9, R_ARM_BREL_ADJ) /* Thumb-something. Not used. */
- FAKE_RELOC (R_ARM_PC13, R_ARM_LDR_PC_G0) /* Unclear whether meaning is different. */
END_RELOC_NUMBERS (R_ARM_max)
#ifdef BFD_ARCH_SIZE
-/* Routines for manipulating EABI object attributes. */
-void elf32_arm_add_eabi_attr_int (bfd *, int, unsigned int);
-void elf32_arm_add_eabi_attr_string (bfd *, int, const char *);
-void elf32_arm_add_eabi_attr_compat (bfd *, unsigned int, const char *);
-int elf32_arm_get_eabi_attr_int (bfd *, int);
-
-void elf32_arm_set_eabi_attr_contents (bfd *, bfd_byte *, bfd_vma);
-bfd_vma elf32_arm_eabi_attr_size (bfd *);
+/* EABI object attributes. */
enum
{
- Tag_NULL,
- Tag_File,
- Tag_Section,
- Tag_Symbol,
- Tag_CPU_raw_name,
+ /* 0-3 are generic. */
+ Tag_CPU_raw_name = 4,
Tag_CPU_name,
Tag_CPU_arch,
Tag_CPU_arch_profile,
@@ -268,7 +270,7 @@ enum
Tag_ABI_WMMX_args,
Tag_ABI_optimization_goals,
Tag_ABI_FP_optimization_goals,
- Tag_compatibility,
+ /* 32 is generic. */
};
#endif
diff --git a/include/elf/avr.h b/include/elf/avr.h
index f16043805eb6..d2ffbe07f622 100644
--- a/include/elf/avr.h
+++ b/include/elf/avr.h
@@ -1,5 +1,5 @@
/* AVR ELF support for BFD.
- Copyright 1999, 2000, 2004 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2004, 2006 Free Software Foundation, Inc.
Contributed by Denis Chertykov <denisc@overta.ru>
This file is part of BFD, the Binary File Descriptor library.
@@ -35,6 +35,7 @@
#define E_AVR_MACH_AVR3 3
#define E_AVR_MACH_AVR4 4
#define E_AVR_MACH_AVR5 5
+#define E_AVR_MACH_AVR6 6
/* Relocations. */
START_RELOC_NUMBERS (elf_avr_reloc_type)
@@ -62,6 +63,8 @@ START_RELOC_NUMBERS (elf_avr_reloc_type)
RELOC_NUMBER (R_AVR_6_ADIW, 21)
RELOC_NUMBER (R_AVR_MS8_LDI, 22)
RELOC_NUMBER (R_AVR_MS8_LDI_NEG, 23)
+ RELOC_NUMBER (R_AVR_LO8_LDI_GS, 24)
+ RELOC_NUMBER (R_AVR_HI8_LDI_GS, 25)
END_RELOC_NUMBERS (R_AVR_max)
#endif /* _ELF_AVR_H */
diff --git a/include/elf/common.h b/include/elf/common.h
index b11171b56b40..2eb6853e6669 100644
--- a/include/elf/common.h
+++ b/include/elf/common.h
@@ -1,6 +1,6 @@
/* ELF support for BFD.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Fred Fish @ Cygnus Support, from information published
@@ -118,6 +118,7 @@
#define EM_PPC 20 /* PowerPC */
#define EM_PPC64 21 /* 64-bit PowerPC */
#define EM_S390 22 /* IBM S/390 */
+#define EM_SPU 23 /* Sony/Toshiba/IBM SPU */
#define EM_V800 36 /* NEC V800 series */
#define EM_FR20 37 /* Fujitsu FR20 */
@@ -185,6 +186,8 @@
#define EM_BLACKFIN 106 /* ADI Blackfin */
#define EM_ALTERA_NIOS2 113 /* Altera Nios II soft-core processor */
#define EM_CRX 114 /* National Semiconductor CRX */
+#define EM_CR16 115 /* National Semiconductor CompactRISC - CR16 */
+#define EM_SCORE 135 /* Sunplus Score */
/* If it is necessary to assign new unofficial EM_* values, please pick large
random numbers (0x8523, 0xa7f2, etc.) to minimize the chances of collision
@@ -278,6 +281,8 @@
/* NIOS magic number - no EABI available. */
#define EM_NIOS32 0xFEBB
+#define EM_CYGNUS_MEP 0xF00D /* Toshiba MeP */
+
/* See the above comment before you add a new EM_* value here. */
/* Values for e_version. */
@@ -338,6 +343,8 @@
#define SHT_LOOS 0x60000000 /* First of OS specific semantics */
#define SHT_HIOS 0x6fffffff /* Last of OS specific semantics */
+#define SHT_GNU_ATTRIBUTES 0x6ffffff5 /* Object attributes */
+#define SHT_GNU_HASH 0x6ffffff6 /* GNU style symbol hash table */
#define SHT_GNU_LIBLIST 0x6ffffff7 /* List of prelink dependencies */
/* The next three section types are defined by Solaris, and are named
@@ -445,7 +452,7 @@
#define ELF64_ST_INFO ELF_ST_INFO
/* This macro disassembles and assembles a symbol's visibility into
- the st_other field. The STV_ defines specificy the actual visibility. */
+ the st_other field. The STV_ defines specify the actual visibility. */
#define ELF_ST_VISIBILITY(v) ((v) & 0x3)
/* The remaining bits in the st_other field are not currently used.
@@ -472,6 +479,8 @@
#define STT_FILE 4 /* Symbol gives a file name */
#define STT_COMMON 5 /* An uninitialised common block */
#define STT_TLS 6 /* Thread local data object */
+#define STT_RELC 8 /* Complex relocation expression */
+#define STT_SRELC 9 /* Signed Complex relocation expression */
#define STT_LOOS 10 /* OS-specific semantics */
#define STT_HIOS 12 /* OS-specific semantics */
#define STT_LOPROC 13 /* Application-specific semantics */
@@ -543,7 +552,7 @@
#define DT_FINI_ARRAYSZ 28
#define DT_RUNPATH 29
#define DT_FLAGS 30
-#define DT_ENCODING 31
+#define DT_ENCODING 32
#define DT_PREINIT_ARRAY 32
#define DT_PREINIT_ARRAYSZ 33
@@ -577,6 +586,7 @@
#define DT_VALRNGHI 0x6ffffdff
#define DT_ADDRRNGLO 0x6ffffe00
+#define DT_GNU_HASH 0x6ffffef5
#define DT_TLSDESC_PLT 0x6ffffef6
#define DT_TLSDESC_GOT 0x6ffffef7
#define DT_GNU_CONFLICT 0x6ffffef8
diff --git a/include/elf/cr16.h b/include/elf/cr16.h
new file mode 100644
index 000000000000..e3f6c50b1260
--- /dev/null
+++ b/include/elf/cr16.h
@@ -0,0 +1,56 @@
+/* CR16 ELF support for BFD.
+ Copyright 2007 Free Software Foundation, Inc.
+ Contributed by M R Swami Reddy.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _ELF_CR16_H
+#define _ELF_CR16_H
+
+#include "elf/reloc-macros.h"
+
+/* Creating indices for reloc_map_index array. */
+START_RELOC_NUMBERS(elf_cr16_reloc_type)
+ RELOC_NUMBER (R_CR16_NONE, 0)
+ RELOC_NUMBER (R_CR16_NUM8, 1)
+ RELOC_NUMBER (R_CR16_NUM16, 2)
+ RELOC_NUMBER (R_CR16_NUM32, 3)
+ RELOC_NUMBER (R_CR16_NUM32a, 4)
+ RELOC_NUMBER (R_CR16_REGREL4, 5)
+ RELOC_NUMBER (R_CR16_REGREL4a, 6)
+ RELOC_NUMBER (R_CR16_REGREL14, 7)
+ RELOC_NUMBER (R_CR16_REGREL14a, 8)
+ RELOC_NUMBER (R_CR16_REGREL16, 9)
+ RELOC_NUMBER (R_CR16_REGREL20, 10)
+ RELOC_NUMBER (R_CR16_REGREL20a, 11)
+ RELOC_NUMBER (R_CR16_ABS20, 12)
+ RELOC_NUMBER (R_CR16_ABS24, 13)
+ RELOC_NUMBER (R_CR16_IMM4, 14)
+ RELOC_NUMBER (R_CR16_IMM8, 15)
+ RELOC_NUMBER (R_CR16_IMM16, 16)
+ RELOC_NUMBER (R_CR16_IMM20, 17)
+ RELOC_NUMBER (R_CR16_IMM24, 18)
+ RELOC_NUMBER (R_CR16_IMM32, 19)
+ RELOC_NUMBER (R_CR16_IMM32a, 20)
+ RELOC_NUMBER (R_CR16_DISP4, 21)
+ RELOC_NUMBER (R_CR16_DISP8, 22)
+ RELOC_NUMBER (R_CR16_DISP16, 23)
+ RELOC_NUMBER (R_CR16_DISP24, 24)
+ RELOC_NUMBER (R_CR16_DISP24a, 25)
+END_RELOC_NUMBERS(R_CR16_MAX)
+
+#endif /* _ELF_CR16_H */
diff --git a/include/elf/dwarf2.h b/include/elf/dwarf2.h
index 264952af1394..2683f5131c74 100644
--- a/include/elf/dwarf2.h
+++ b/include/elf/dwarf2.h
@@ -540,6 +540,7 @@ enum dwarf_location_atom
DW_OP_bit_piece = 0x9d,
/* GNU extensions. */
DW_OP_GNU_push_tls_address = 0xe0,
+ DW_OP_GNU_uninit = 0xf0,
/* HP extensions. */
DW_OP_HP_unknown = 0xe0, /* Ouch, the same as GNU_push_tls_address. */
DW_OP_HP_is_value = 0xe1,
diff --git a/include/elf/external.h b/include/elf/external.h
index 5985e94b0226..21450f00595c 100644
--- a/include/elf/external.h
+++ b/include/elf/external.h
@@ -245,11 +245,7 @@ typedef struct {
typedef struct {
unsigned char vs_vers[2];
-}
-#ifdef __GNUC__
- __attribute__ ((packed))
-#endif
- Elf_External_Versym;
+} ATTRIBUTE_PACKED Elf_External_Versym;
/* Structure for syminfo section. */
typedef struct
diff --git a/include/elf/hppa.h b/include/elf/hppa.h
index 15be2d5655a3..c9b3200ac9e0 100644
--- a/include/elf/hppa.h
+++ b/include/elf/hppa.h
@@ -1,22 +1,22 @@
/* HPPA ELF support for BFD.
- Copyright 1993, 1994, 1995, 1998, 1999, 2000, 2005
+ Copyright 1993, 1994, 1995, 1998, 1999, 2000, 2005, 2006
Free Software Foundation, Inc.
-This file is part of BFD, the Binary File Descriptor library.
+ This file is part of BFD, the Binary File Descriptor library.
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+ This program is free software; you can 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.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU General Public 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 definitions specific to the HPPA ELF ABI. Note
that most of this is not actually implemented by BFD. */
@@ -80,10 +80,10 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
/* These are strictly for compatibility with the older elf32-hppa
implementation. Hopefully we can eliminate them in the future. */
/* Optional section holding argument location/relocation info. */
-#define SHT_PARISC_SYMEXTN SHT_LOPROC+8
+#define SHT_PARISC_SYMEXTN SHT_LOPROC + 8
/* Option section for linker stubs. */
-#define SHT_PARISC_STUBS SHT_LOPROC+9
+#define SHT_PARISC_STUBS SHT_LOPROC + 9
/* Processor specific section flags. */
@@ -480,8 +480,28 @@ RELOC_NUMBER (R_PARISC_LTOFF_TP16DF, 231)
RELOC_NUMBER (R_PARISC_GNU_VTENTRY, 232)
RELOC_NUMBER (R_PARISC_GNU_VTINHERIT, 233)
+RELOC_NUMBER (R_PARISC_TLS_GD21L, 234)
+RELOC_NUMBER (R_PARISC_TLS_GD14R, 235)
+RELOC_NUMBER (R_PARISC_TLS_GDCALL, 236)
+RELOC_NUMBER (R_PARISC_TLS_LDM21L, 237)
+RELOC_NUMBER (R_PARISC_TLS_LDM14R, 238)
+RELOC_NUMBER (R_PARISC_TLS_LDMCALL, 239)
+RELOC_NUMBER (R_PARISC_TLS_LDO21L, 240)
+RELOC_NUMBER (R_PARISC_TLS_LDO14R, 241)
+RELOC_NUMBER (R_PARISC_TLS_DTPMOD32, 242)
+RELOC_NUMBER (R_PARISC_TLS_DTPMOD64, 243)
+RELOC_NUMBER (R_PARISC_TLS_DTPOFF32, 244)
+RELOC_NUMBER (R_PARISC_TLS_DTPOFF64, 245)
+
END_RELOC_NUMBERS (R_PARISC_UNIMPLEMENTED)
+#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L
+#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R
+#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L
+#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R
+#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32
+#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64
+
#ifndef RELOC_MACROS_GEN_FUNC
typedef enum elf_hppa_reloc_type elf_hppa_reloc_type;
#endif
diff --git a/include/elf/internal.h b/include/elf/internal.h
index e4eba7d6cb34..152171136c19 100644
--- a/include/elf/internal.h
+++ b/include/elf/internal.h
@@ -1,6 +1,6 @@
/* ELF support for BFD.
Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000, 2001, 2002,
- 2003 Free Software Foundation, Inc.
+ 2003, 2006, 2007 Free Software Foundation, Inc.
Written by Fred Fish @ Cygnus Support, from information published
in "UNIX System V Release 4, Programmers Guide: ANSI C and
@@ -235,12 +235,19 @@ struct elf_segment_map
unsigned long p_flags;
/* Program segment physical address. */
bfd_vma p_paddr;
+ /* Program segment virtual address offset from section vma. */
+ bfd_vma p_vaddr_offset;
+ /* Program segment alignment. */
+ bfd_vma p_align;
/* Whether the p_flags field is valid; if not, the flags are based
on the section flags. */
unsigned int p_flags_valid : 1;
/* Whether the p_paddr field is valid; if not, the physical address
is based on the section lma values. */
unsigned int p_paddr_valid : 1;
+ /* Whether the p_align field is valid; if not, PT_LOAD segment
+ alignment is based on the default maximum page size. */
+ unsigned int p_align_valid : 1;
/* Whether this segment includes the file header. */
unsigned int includes_filehdr : 1;
/* Whether this segment includes the program headers. */
@@ -251,29 +258,42 @@ struct elf_segment_map
asection *sections[1];
};
+/* .tbss is special. It doesn't contribute memory space to normal
+ segments and it doesn't take file space in normal segments. */
+#define ELF_SECTION_SIZE(sec_hdr, segment) \
+ (((sec_hdr->sh_flags & SHF_TLS) == 0 \
+ || sec_hdr->sh_type != SHT_NOBITS \
+ || segment->p_type == PT_TLS) ? sec_hdr->sh_size : 0)
+
+/* Decide if the given sec_hdr is in the given segment. PT_TLS segment
+ contains only SHF_TLS sections. Only PT_LOAD and PT_TLS segments
+ can contain SHF_TLS sections. */
+#define ELF_IS_SECTION_IN_SEGMENT(sec_hdr, segment) \
+ (((((sec_hdr->sh_flags & SHF_TLS) != 0) \
+ && (segment->p_type == PT_TLS \
+ || segment->p_type == PT_LOAD)) \
+ || ((sec_hdr->sh_flags & SHF_TLS) == 0 \
+ && segment->p_type != PT_TLS)) \
+ /* Any section besides one of type SHT_NOBITS must have a file \
+ offset within the segment. */ \
+ && (sec_hdr->sh_type == SHT_NOBITS \
+ || ((bfd_vma) sec_hdr->sh_offset >= segment->p_offset \
+ && (sec_hdr->sh_offset + ELF_SECTION_SIZE(sec_hdr, segment) \
+ <= segment->p_offset + segment->p_filesz))) \
+ /* SHF_ALLOC sections must have VMAs within the segment. */ \
+ && ((sec_hdr->sh_flags & SHF_ALLOC) == 0 \
+ || (sec_hdr->sh_addr >= segment->p_vaddr \
+ && (sec_hdr->sh_addr + ELF_SECTION_SIZE(sec_hdr, segment) \
+ <= segment->p_vaddr + segment->p_memsz))))
+
/* Decide if the given sec_hdr is in the given segment in file. */
#define ELF_IS_SECTION_IN_SEGMENT_FILE(sec_hdr, segment) \
(sec_hdr->sh_size > 0 \
- /* PT_TLS segment contains only SHF_TLS sections. */ \
- && (segment->p_type != PT_TLS \
- || (sec_hdr->sh_flags & SHF_TLS) != 0) \
- /* Compare allocated sec_hdrs by VMA, unallocated sec_hdrs \
- by file offset. */ \
- && (sec_hdr->sh_flags & SHF_ALLOC \
- ? (sec_hdr->sh_addr >= segment->p_vaddr \
- && sec_hdr->sh_addr + sec_hdr->sh_size \
- <= segment->p_vaddr + segment->p_memsz) \
- : ((bfd_vma) sec_hdr->sh_offset >= segment->p_offset \
- && (sec_hdr->sh_offset + sec_hdr->sh_size \
- <= segment->p_offset + segment->p_filesz))))
+ && ELF_IS_SECTION_IN_SEGMENT (sec_hdr, segment))
/* Decide if the given sec_hdr is in the given segment in memory. */
#define ELF_IS_SECTION_IN_SEGMENT_MEMORY(sec_hdr, segment) \
- (ELF_IS_SECTION_IN_SEGMENT_FILE (sec_hdr, segment) \
- /* .tbss is special. It doesn't contribute memory space to \
- normal segments. */ \
- && (!((sec_hdr->sh_flags & SHF_TLS) != 0 \
- && sec_hdr->sh_type == SHT_NOBITS) \
- || segment->p_type == PT_TLS))
+ (ELF_SECTION_SIZE(sec_hdr, segment) > 0 \
+ && ELF_IS_SECTION_IN_SEGMENT (sec_hdr, segment))
#endif /* _ELF_INTERNAL_H */
diff --git a/include/elf/m68k.h b/include/elf/m68k.h
index 08d0c441988b..a9f2203a6884 100644
--- a/include/elf/m68k.h
+++ b/include/elf/m68k.h
@@ -52,24 +52,30 @@ START_RELOC_NUMBERS (elf_m68k_reloc_type)
RELOC_NUMBER (R_68K_GNU_VTENTRY, 24)
END_RELOC_NUMBERS (R_68K_max)
+/* We use the top 24 bits to encode information about the
+ architecture variant. */
#define EF_M68K_CPU32 0x00810000
#define EF_M68K_M68000 0x01000000
#define EF_M68K_CFV4E 0x00008000
+#define EF_M68K_FIDO 0x02000000
+#define EF_M68K_ARCH_MASK \
+ (EF_M68K_M68000 | EF_M68K_CPU32 | EF_M68K_CFV4E | EF_M68K_FIDO)
/* We use the bottom 8 bits to encode information about the
- coldfire variant. */
-#define EF_M68K_ISA_MASK 0x0F /* Which ISA */
-#define EF_M68K_ISA_A_NODIV 0x01 /* ISA A except for div */
-#define EF_M68K_ISA_A 0x02
-#define EF_M68K_ISA_A_PLUS 0x03
-#define EF_M68K_ISA_B_NOUSP 0x04 /* ISA_B except for USP */
-#define EF_M68K_ISA_B 0x05
-#define EF_M68K_ISA_C 0x06
-#define EF_M68K_MAC_MASK 0x30
-#define EF_M68K_MAC 0x10 /* MAC */
-#define EF_M68K_EMAC 0x20 /* EMAC */
-#define EF_M68K_EMAC_B 0x30 /* EMAC_B */
-#define EF_M68K_FLOAT 0x40 /* Has float insns */
+ coldfire variant. If we use any of these bits, the top 24 bits are
+ either 0 or EF_M68K_CFV4E. */
+#define EF_M68K_CF_ISA_MASK 0x0F /* Which ISA */
+#define EF_M68K_CF_ISA_A_NODIV 0x01 /* ISA A except for div */
+#define EF_M68K_CF_ISA_A 0x02
+#define EF_M68K_CF_ISA_A_PLUS 0x03
+#define EF_M68K_CF_ISA_B_NOUSP 0x04 /* ISA_B except for USP */
+#define EF_M68K_CF_ISA_B 0x05
+#define EF_M68K_CF_ISA_C 0x06
+#define EF_M68K_CF_MAC_MASK 0x30
+#define EF_M68K_CF_MAC 0x10 /* MAC */
+#define EF_M68K_CF_EMAC 0x20 /* EMAC */
+#define EF_M68K_CF_EMAC_B 0x30 /* EMAC_B */
+#define EF_M68K_CF_FLOAT 0x40 /* Has float insns */
#define EF_M68K_CF_MASK 0xFF
#endif
diff --git a/include/elf/mep.h b/include/elf/mep.h
new file mode 100644
index 000000000000..51eb8d06bc69
--- /dev/null
+++ b/include/elf/mep.h
@@ -0,0 +1,84 @@
+/* Toshiba MeP ELF support for BFD.
+ Copyright (C) 2001, 2004, 2005 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation, Inc.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifndef _ELF_MEP_H
+#define _ELF_MEP_H
+
+/* Bits in the sh_flags field of Elf32_Shdr: */
+
+#define SHF_MEP_VLIW 0x10000000 /* contains vliw code */
+
+/* This bit is reserved by BFD for processor specific stuff. Name
+ it properly so that we can easily stay consistent elsewhere. */
+#define SEC_MEP_VLIW SEC_TIC54X_BLOCK
+
+#include "elf/reloc-macros.h"
+
+/* Note: The comments in this file are used by bfd/mep-relocs.pl to
+ build parts of bfd/elf32-mep.c. */
+
+/* Relocations. */
+START_RELOC_NUMBERS (elf_mep_reloc_type)
+
+ /* These two must appear first so that they are not processed by bfd/mep-relocs.pl. */
+ RELOC_NUMBER (R_MEP_NONE, 0)
+ RELOC_NUMBER (R_RELC, 1)
+
+ RELOC_NUMBER (R_MEP_8, 2) /* 7654 3210 U */
+ RELOC_NUMBER (R_MEP_16, 3) /* fedc ba98 7654 3210 U */
+ RELOC_NUMBER (R_MEP_32, 4) /* vuts rqpo nmlk jihg fedc ba98 7654 3210 U */
+
+ RELOC_NUMBER (R_MEP_PCREL8A2, 5) /* ---- ---- 7654 321- S PC-REL */
+ RELOC_NUMBER (R_MEP_PCREL12A2, 6) /* ---- ba98 7654 321- S PC-REL */
+ RELOC_NUMBER (R_MEP_PCREL17A2, 7) /* ---- ---- ---- ---- gfed cba9 8765 4321 S PC-REL */
+ RELOC_NUMBER (R_MEP_PCREL24A2, 8) /* ---- -765 4321 ---- nmlk jihg fedc ba98 S PC-REL */
+ RELOC_NUMBER (R_MEP_PCABS24A2, 9) /* ---- -765 4321 ---- nmlk jihg fedc ba98 U */
+
+ RELOC_NUMBER (R_MEP_LOW16, 10) /* ---- ---- ---- ---- fedc ba98 7654 3210 U no-overflow */
+ RELOC_NUMBER (R_MEP_HI16U, 11) /* ---- ---- ---- ---- vuts rqpo nmlk jihg U no-overflow */
+ RELOC_NUMBER (R_MEP_HI16S, 12) /* ---- ---- ---- ---- vuts rqpo nmlk jihg S no-overflow */
+ RELOC_NUMBER (R_MEP_GPREL, 13) /* ---- ---- ---- ---- fedc ba98 7654 3210 S GP-REL*/
+ RELOC_NUMBER (R_MEP_TPREL, 14) /* ---- ---- ---- ---- fedc ba98 7654 3210 S TP-REL*/
+
+ RELOC_NUMBER (R_MEP_TPREL7, 15) /* ---- ---- -654 3210 U TP-REL */
+ RELOC_NUMBER (R_MEP_TPREL7A2, 16) /* ---- ---- -654 321- U TP-REL */
+ RELOC_NUMBER (R_MEP_TPREL7A4, 17) /* ---- ---- -654 32-- U TP-REL */
+
+ RELOC_NUMBER (R_MEP_UIMM24, 18) /* ---- ---- 7654 3210 nmlk jihg fedc ba98 U */
+ RELOC_NUMBER (R_MEP_ADDR24A4, 19) /* ---- ---- 7654 32-- nmlk jihg fedc ba98 U */
+
+ RELOC_NUMBER (R_MEP_GNU_VTINHERIT, 20) /* ---- ---- ---- ---- U no-overflow */
+ RELOC_NUMBER (R_MEP_GNU_VTENTRY, 21) /* ---- ---- ---- ---- U no-overflow */
+
+END_RELOC_NUMBERS(R_MEP_max)
+
+#define EF_MEP_CPU_MASK 0xff000000 /* specific cpu bits */
+#define EF_MEP_CPU_MEP 0x00000000 /* generic MEP */
+#define EF_MEP_CPU_C2 0x01000000 /* MEP c2 */
+#define EF_MEP_CPU_C3 0x02000000 /* MEP c3 */
+#define EF_MEP_CPU_C4 0x04000000 /* MEP c4 */
+#define EF_MEP_CPU_H1 0x10000000 /* MEP h1 */
+
+#define EF_MEP_LIBRARY 0x00000100 /* Built as a library */
+
+#define EF_MEP_INDEX_MASK 0x000000ff /* Configuration index */
+
+#define EF_MEP_ALL_FLAGS 0xff0001ff
+
+#endif /* _ELF_MEP_H */
diff --git a/include/elf/mips.h b/include/elf/mips.h
index f22bd4d4213a..4f6067575186 100644
--- a/include/elf/mips.h
+++ b/include/elf/mips.h
@@ -87,7 +87,8 @@ START_RELOC_NUMBERS (elf_mips_reloc_type)
RELOC_NUMBER (R_MIPS_TLS_TPREL64, 48)
RELOC_NUMBER (R_MIPS_TLS_TPREL_HI16, 49)
RELOC_NUMBER (R_MIPS_TLS_TPREL_LO16, 50)
- FAKE_RELOC (R_MIPS_max, 51)
+ RELOC_NUMBER (R_MIPS_GLOB_DAT, 51)
+ FAKE_RELOC (R_MIPS_max, 52)
/* These relocs are used for the mips16. */
FAKE_RELOC (R_MIPS16_min, 100)
RELOC_NUMBER (R_MIPS16_26, 100)
@@ -1005,4 +1006,15 @@ extern void bfd_mips_elf64_swap_reginfo_out
#define OHWA0_R4KEOP_CLEAN 0x00000002
+/* Object attribute tags. */
+enum
+{
+ /* 0-3 are generic. */
+ Tag_GNU_MIPS_ABI_FP = 4, /* Value 1 for hard-float -mdouble-float, 2
+ for hard-float -msingle-float, 3 for
+ soft-float; 0 for not tagged or not
+ using any ABIs affected by the
+ differences. */
+};
+
#endif /* _ELF_MIPS_H */
diff --git a/include/elf/ppc.h b/include/elf/ppc.h
index ca5035274d9a..fe48814d86f2 100644
--- a/include/elf/ppc.h
+++ b/include/elf/ppc.h
@@ -171,4 +171,15 @@ END_RELOC_NUMBERS (R_PPC_max)
builds when those objects \
are not to be furhter \
relocated. */
+
+/* Object attribute tags. */
+enum
+{
+ /* 0-3 are generic. */
+ Tag_GNU_Power_ABI_FP = 4, /* Value 1 for hard-float, 2 for
+ soft-float; 0 for not tagged or not
+ using any ABIs affected by the
+ differences. */
+};
+
#endif /* _ELF_PPC_H */
diff --git a/include/elf/reloc-macros.h b/include/elf/reloc-macros.h
index 51e86b5af151..a67419d220ca 100644
--- a/include/elf/reloc-macros.h
+++ b/include/elf/reloc-macros.h
@@ -98,4 +98,4 @@ name (unsigned long rtype) \
#endif
-#endif /* RELOC_MACROS_H */
+#endif /* _RELOC_MACROS_H */
diff --git a/include/elf/score.h b/include/elf/score.h
new file mode 100644
index 000000000000..ec3b32f16c46
--- /dev/null
+++ b/include/elf/score.h
@@ -0,0 +1,123 @@
+/* Score ELF support for BFD.
+ Copyright 2006 Free Software Foundation, Inc.
+ Contributed by
+ Mei Ligang (ligang@sunnorth.com.cn)
+ Pei-Lin Tsai (pltsai@sunplus.com)
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _ELF_SCORE_H
+#define _ELF_SCORE_H
+
+#include "elf/reloc-macros.h"
+
+#define SCORE_SIMULATOR_ACTIVE 1
+#define OPC_PTMASK 0xc0000000 /* Parity-bit Mask. */
+#define OPC16_PTMASK 0x00008000
+/* The parity-bit denotes. */
+#define OPC_32 0xc0000000 /* Denotes 32b instruction, (default). */
+#define OPC_16 0x00000000 /* Denotes 16b instruction. */
+#define OPC_PE 0x8000 /* Denotes parallel-execution instructions. */
+#define GP_DISP_LABEL "_gp_disp"
+
+/* Processor specific flags for the ELF header e_flags field: */
+
+/* File contains position independent code. */
+#define EF_SCORE_PIC 0x80000000
+
+/* Fix data dependency. */
+#define EF_SCORE_FIXDEP 0x40000000
+
+/* Defined and allocated common symbol. Value is virtual address. If
+ relocated, alignment must be preserved. */
+#define SHN_SCORE_TEXT 0xff01
+#define SHN_SCORE_DATA 0xff02
+/* Small common symbol. */
+#define SHN_SCORE_SCOMMON 0xff03
+
+/* Processor specific section flags. */
+
+/* This section must be in the global data area. */
+#define SHF_SCORE_GPREL 0x10000000
+
+/* This section should be merged. */
+#define SHF_SCORE_MERGE 0x20000000
+
+/* This section contains address data of size implied by section
+ element size. */
+#define SHF_SCORE_ADDR 0x40000000
+
+/* This section contains string data. */
+#define SHF_SCORE_STRING 0x80000000
+
+/* This section may not be stripped. */
+#define SHF_SCORE_NOSTRIP 0x08000000
+
+/* This section is local to threads. */
+#define SHF_SCORE_LOCAL 0x04000000
+
+/* Linker should generate implicit weak names for this section. */
+#define SHF_SCORE_NAMES 0x02000000
+
+/* Section contais text/data which may be replicated in other sections.
+ Linker should retain only one copy. */
+#define SHF_SCORE_NODUPES 0x01000000
+
+/* Processor specific dynamic array tags. */
+
+/* Base address of the segment. */
+#define DT_SCORE_BASE_ADDRESS 0x70000001
+/* Number of local global offset table entries. */
+#define DT_SCORE_LOCAL_GOTNO 0x70000002
+/* Number of entries in the .dynsym section. */
+#define DT_SCORE_SYMTABNO 0x70000003
+/* Index of first dynamic symbol in global offset table. */
+#define DT_SCORE_GOTSYM 0x70000004
+/* Index of first external dynamic symbol not referenced locally. */
+#define DT_SCORE_UNREFEXTNO 0x70000005
+/* Number of page table entries in global offset table. */
+#define DT_SCORE_HIPAGENO 0x70000006
+
+
+/* Processor specific section types. */
+
+
+/* Relocation types. */
+START_RELOC_NUMBERS (elf_score_reloc_type)
+ RELOC_NUMBER (R_SCORE_NONE, 0)
+ RELOC_NUMBER (R_SCORE_HI16, 1)
+ RELOC_NUMBER (R_SCORE_LO16, 2)
+ RELOC_NUMBER (R_SCORE_DUMMY1, 3)
+ RELOC_NUMBER (R_SCORE_24, 4)
+ RELOC_NUMBER (R_SCORE_PC19, 5)
+ RELOC_NUMBER (R_SCORE16_11, 6)
+ RELOC_NUMBER (R_SCORE16_PC8, 7)
+ RELOC_NUMBER (R_SCORE_ABS32, 8)
+ RELOC_NUMBER (R_SCORE_ABS16, 9)
+ RELOC_NUMBER (R_SCORE_DUMMY2, 10)
+ RELOC_NUMBER (R_SCORE_GP15, 11)
+ RELOC_NUMBER (R_SCORE_GNU_VTINHERIT, 12)
+ RELOC_NUMBER (R_SCORE_GNU_VTENTRY, 13)
+ RELOC_NUMBER (R_SCORE_GOT15, 14)
+ RELOC_NUMBER (R_SCORE_GOT_LO16, 15)
+ RELOC_NUMBER (R_SCORE_CALL15, 16)
+ RELOC_NUMBER (R_SCORE_GPREL32, 17)
+ RELOC_NUMBER (R_SCORE_REL32, 18)
+ RELOC_NUMBER (R_SCORE_DUMMY_HI16, 19)
+END_RELOC_NUMBERS (R_SCORE_max)
+
+#endif /* _ELF_SCORE_H */
diff --git a/include/elf/spu.h b/include/elf/spu.h
new file mode 100644
index 000000000000..ef949804e78e
--- /dev/null
+++ b/include/elf/spu.h
@@ -0,0 +1,60 @@
+/* SPU ELF support for BFD.
+
+ Copyright 2006, 2007 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _ELF_SPU_H
+#define _ELF_SPU_H
+
+#include "elf/reloc-macros.h"
+
+/* elf32-spu.c depends on these being consecutive. */
+START_RELOC_NUMBERS (elf_spu_reloc_type)
+ RELOC_NUMBER (R_SPU_NONE, 0)
+ RELOC_NUMBER (R_SPU_ADDR10, 1)
+ RELOC_NUMBER (R_SPU_ADDR16, 2)
+ RELOC_NUMBER (R_SPU_ADDR16_HI, 3)
+ RELOC_NUMBER (R_SPU_ADDR16_LO, 4)
+ RELOC_NUMBER (R_SPU_ADDR18, 5)
+ RELOC_NUMBER (R_SPU_ADDR32, 6)
+ RELOC_NUMBER (R_SPU_REL16, 7)
+ RELOC_NUMBER (R_SPU_ADDR7, 8)
+ RELOC_NUMBER (R_SPU_REL9, 9)
+ RELOC_NUMBER (R_SPU_REL9I, 10)
+ RELOC_NUMBER (R_SPU_ADDR10I, 11)
+ RELOC_NUMBER (R_SPU_ADDR16I, 12)
+ RELOC_NUMBER (R_SPU_REL32, 13)
+ RELOC_NUMBER (R_SPU_ADDR16X, 14)
+ RELOC_NUMBER (R_SPU_PPU32, 15)
+ RELOC_NUMBER (R_SPU_PPU64, 16)
+END_RELOC_NUMBERS (R_SPU_max)
+
+/* Program header extensions */
+
+/* Mark a PT_LOAD segment as containing an overlay which should not
+ initially be loaded. */
+#define PF_OVERLAY (1 << 27)
+
+/* SPU Dynamic Object Information. */
+#define PT_SPU_INFO 0x70000000
+
+/* SPU plugin information */
+#define SPU_PLUGIN_NAME "SPUNAME"
+#define SPU_PTNOTE_SPUNAME ".note.spu_name"
+
+#endif /* _ELF_SPU_H */
diff --git a/include/elf/v850.h b/include/elf/v850.h
index 95dab49b67d2..a88969d9159c 100644
--- a/include/elf/v850.h
+++ b/include/elf/v850.h
@@ -1,5 +1,5 @@
/* V850 ELF support for BFD.
- Copyright 1997, 1998, 2000, 2002, 2003, 2004
+ Copyright 1997, 1998, 2000, 2002, 2003, 2004, 2007
Free Software Foundation, Inc.
Created by Michael Meissner, Cygnus Support <meissner@cygnus.com>
@@ -41,10 +41,9 @@
/* Flags for the st_other field. */
-#define V850_OTHER_SDA 0x01 /* Symbol had SDA relocations. */
-#define V850_OTHER_ZDA 0x02 /* Symbol had ZDA relocations. */
-#define V850_OTHER_TDA 0x04 /* Symbol had TDA relocations. */
-#define V850_OTHER_TDA_BYTE 0x08 /* Symbol had TDA byte relocations. */
+#define V850_OTHER_SDA 0x10 /* Symbol had SDA relocations. */
+#define V850_OTHER_ZDA 0x20 /* Symbol had ZDA relocations. */
+#define V850_OTHER_TDA 0x40 /* Symbol had TDA relocations. */
#define V850_OTHER_ERROR 0x80 /* Symbol had an error reported. */
/* V850 relocations. */
diff --git a/include/elf/xtensa.h b/include/elf/xtensa.h
index 0de9741b6d1c..bd83a140b2e8 100644
--- a/include/elf/xtensa.h
+++ b/include/elf/xtensa.h
@@ -140,7 +140,9 @@ typedef struct property_table_entry_t
/* Instruction-only properties about code. */
#define XTENSA_PROP_INSN_NO_DENSITY 0x00000040
#define XTENSA_PROP_INSN_NO_REORDER 0x00000080
-#define XTENSA_PROP_INSN_NO_TRANSFORM 0x00000100
+/* Historically, NO_TRANSFORM was a property of instructions,
+ but it should apply to literals under certain circumstances. */
+#define XTENSA_PROP_NO_TRANSFORM 0x00000100
/* Branch target alignment information. This transmits information
to the linker optimization about the priority of aligning a
diff --git a/include/filenames.h b/include/filenames.h
index 6b72fd249b40..5338208e0242 100644
--- a/include/filenames.h
+++ b/include/filenames.h
@@ -5,7 +5,7 @@
use forward- and back-slash in path names interchangeably, and
some of them have case-insensitive file names.
- Copyright 2000, 2001 Free Software Foundation, Inc.
+ Copyright 2000, 2001, 2007 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -38,14 +38,15 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
want to know whether to prepend the current working directory to
a file name, which should not be done with a name like d:foo. */
#define IS_ABSOLUTE_PATH(f) (IS_DIR_SEPARATOR((f)[0]) || (((f)[0]) && ((f)[1] == ':')))
-#define FILENAME_CMP(s1, s2) strcasecmp(s1, s2)
#else /* not DOSish */
#define IS_DIR_SEPARATOR(c) ((c) == '/')
#define IS_ABSOLUTE_PATH(f) (IS_DIR_SEPARATOR((f)[0]))
-#define FILENAME_CMP(s1, s2) strcmp(s1, s2)
#endif /* not DOSish */
+extern int filename_cmp (const char *s1, const char *s2);
+#define FILENAME_CMP(s1, s2) filename_cmp(s1, s2)
+
#endif /* FILENAMES_H */
diff --git a/include/gdb/ChangeLog b/include/gdb/ChangeLog
index 2693f6407a03..2c0933c63611 100644
--- a/include/gdb/ChangeLog
+++ b/include/gdb/ChangeLog
@@ -1,3 +1,7 @@
+2007-01-09 Daniel Jacobowitz <dan@codesourcery.com>
+
+ Updated copyright notices for most files.
+
2005-07-08 Ben Elliston <bje@au.ibm.com>
* callback.h: Remove ANSI_PROTOTYPES conditional code.
diff --git a/include/gdb/callback.h b/include/gdb/callback.h
index b7ed3cdfa2a0..b3e523ce481b 100644
--- a/include/gdb/callback.h
+++ b/include/gdb/callback.h
@@ -1,5 +1,5 @@
/* Remote target system call callback support.
- Copyright 1997 Free Software Foundation, Inc.
+ Copyright 1997, 2007 Free Software Foundation, Inc.
Contributed by Cygnus Solutions.
This file is part of GDB.
diff --git a/include/gdb/fileio.h b/include/gdb/fileio.h
index d84478103e2a..885077578454 100644
--- a/include/gdb/fileio.h
+++ b/include/gdb/fileio.h
@@ -1,6 +1,6 @@
/* Hosted File I/O interface definitions, for GDB, the GNU Debugger.
- Copyright 2003 Free Software Foundation, Inc.
+ Copyright 2003, 2007 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
diff --git a/include/gdb/remote-sim.h b/include/gdb/remote-sim.h
index a49ba1a89e91..90cff00123ab 100644
--- a/include/gdb/remote-sim.h
+++ b/include/gdb/remote-sim.h
@@ -1,7 +1,7 @@
/* This file defines the interface between the simulator and gdb.
- Copyright 1993, 1994, 1996, 1997, 1998, 2000, 2002 Free Software
- Foundation, Inc.
+ Copyright 1993, 1994, 1996, 1997, 1998, 2000, 2002, 2007
+ Free Software Foundation, Inc.
This file is part of GDB.
diff --git a/include/gdb/signals.h b/include/gdb/signals.h
index b6f5d4853125..c43ddc18571a 100644
--- a/include/gdb/signals.h
+++ b/include/gdb/signals.h
@@ -1,7 +1,6 @@
/* Target signal numbers for GDB and the GDB remote protocol.
- Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
- 1997, 1998, 1999, 2000, 2001, 2002
- Free Software Foundation, Inc.
+ Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+ 1998, 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
This file is part of GDB.
diff --git a/include/gdb/sim-arm.h b/include/gdb/sim-arm.h
index 5598f73fa8fa..0b8ac99092a5 100644
--- a/include/gdb/sim-arm.h
+++ b/include/gdb/sim-arm.h
@@ -1,6 +1,6 @@
/* This file defines the interface between the Arm simulator and GDB.
- Copyright 2002, 2003 Free Software Foundation, Inc.
+ Copyright 2002, 2003, 2007 Free Software Foundation, Inc.
Contributed by Red Hat.
diff --git a/include/gdb/sim-d10v.h b/include/gdb/sim-d10v.h
index 8294b14858bb..959999e30ea2 100644
--- a/include/gdb/sim-d10v.h
+++ b/include/gdb/sim-d10v.h
@@ -1,6 +1,6 @@
/* This file defines the interface between the d10v simulator and gdb.
- Copyright 1999, 2002 Free Software Foundation, Inc.
+ Copyright 1999, 2002, 2007 Free Software Foundation, Inc.
This file is part of GDB.
diff --git a/include/gdb/sim-frv.h b/include/gdb/sim-frv.h
index 0a1e0212e521..e0b40be49211 100644
--- a/include/gdb/sim-frv.h
+++ b/include/gdb/sim-frv.h
@@ -1,6 +1,6 @@
/* This file defines the interface between the FR-V simulator and GDB.
- Copyright 2003 Free Software Foundation, Inc.
+ Copyright 2003, 2007 Free Software Foundation, Inc.
Contributed by Red Hat.
diff --git a/include/gdb/sim-h8300.h b/include/gdb/sim-h8300.h
index 246370aec23a..e542cc25f885 100644
--- a/include/gdb/sim-h8300.h
+++ b/include/gdb/sim-h8300.h
@@ -1,5 +1,5 @@
/* This file defines the interface between the h8300 simulator and gdb.
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2007 Free Software Foundation, Inc.
This file is part of GDB.
diff --git a/include/gdb/sim-m32c.h b/include/gdb/sim-m32c.h
index 6097add82d67..ba3943c6d3e2 100644
--- a/include/gdb/sim-m32c.h
+++ b/include/gdb/sim-m32c.h
@@ -1,5 +1,5 @@
/* This file defines the interface between the m32c simulator and gdb.
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2007 Free Software Foundation, Inc.
This file is part of GDB.
diff --git a/include/gdb/sim-ppc.h b/include/gdb/sim-ppc.h
index e31a67112927..2933485f3d99 100644
--- a/include/gdb/sim-ppc.h
+++ b/include/gdb/sim-ppc.h
@@ -1,6 +1,6 @@
/* sim-ppc.h --- interface between PowerPC simulator and GDB.
- Copyright 2004 Free Software Foundation, Inc.
+ Copyright 2004, 2007 Free Software Foundation, Inc.
Contributed by Red Hat.
diff --git a/include/gdb/sim-sh.h b/include/gdb/sim-sh.h
index a40eff6311c7..13e5019d4714 100644
--- a/include/gdb/sim-sh.h
+++ b/include/gdb/sim-sh.h
@@ -1,5 +1,5 @@
/* This file defines the interface between the sh simulator and gdb.
- Copyright (C) 2000, 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2002, 2004, 2007 Free Software Foundation, Inc.
This file is part of GDB.
diff --git a/include/libiberty.h b/include/libiberty.h
index 6bd318e0fe5d..4e697343fb6f 100644
--- a/include/libiberty.h
+++ b/include/libiberty.h
@@ -86,6 +86,10 @@ extern char **dupargv (char **) ATTRIBUTE_MALLOC;
extern void expandargv PARAMS ((int *, char ***));
+/* Write argv to an @-file, inserting necessary quoting. */
+
+extern int writeargv PARAMS ((char **, FILE *));
+
/* Return the last component of a path name. Note that we can't use a
prototype here because the parameter is declared inconsistently
across different systems, sometimes as "char *" and sometimes as
@@ -197,6 +201,13 @@ extern long get_run_time (void);
extern char *make_relative_prefix (const char *, const char *,
const char *) ATTRIBUTE_MALLOC;
+/* Generate a relocated path to some installation directory without
+ attempting to follow any soft links. Allocates
+ return value using malloc. */
+
+extern char *make_relative_prefix_ignore_links (const char *, const char *,
+ const char *) ATTRIBUTE_MALLOC;
+
/* Choose a temporary directory to use for scratch files. */
extern char *choose_temp_base (void) ATTRIBUTE_MALLOC;
@@ -393,6 +404,19 @@ extern struct pex_obj *pex_init (int flags, const char *pname,
PEX_BINARY_INPUT. */
#define PEX_BINARY_OUTPUT 0x20
+/* Capture stderr to a pipe. The output can be read by
+ calling pex_read_err and reading from the returned
+ FILE object. This flag may be specified only for
+ the last program in a pipeline.
+
+ This flag is supported only on Unix and Windows. */
+#define PEX_STDERR_TO_PIPE 0x40
+
+/* Capture stderr in binary mode. This flag is ignored
+ on Unix. */
+#define PEX_BINARY_ERROR 0x80
+
+
/* Execute one program. Returns NULL on success. On error returns an
error string (typically just the name of a system call); the error
string is statically allocated.
@@ -448,32 +472,22 @@ extern const char *pex_run (struct pex_obj *obj, int flags,
const char *outname, const char *errname,
int *err);
-/* Return a `FILE' pointer FP for the standard input of the first
- program in the pipeline; FP is opened for writing. You must have
- passed `PEX_USE_PIPES' to the `pex_init' call that returned OBJ.
- You must close FP yourself with `fclose' to indicate that the
- pipeline's input is complete.
-
- The file descriptor underlying FP is marked not to be inherited by
- child processes.
-
- This call is not supported on systems which do not support pipes;
- it returns with an error. (We could implement it by writing a
- temporary file, but then you would need to write all your data and
- close FP before your first call to `pex_run' -- and that wouldn't
- work on systems that do support pipes: the pipe would fill up, and
- you would block. So there isn't any easy way to conceal the
- differences between the two types of systems.)
-
- If you call both `pex_write_input' and `pex_read_output', be
- careful to avoid deadlock. If the output pipe fills up, so that
- each program in the pipeline is waiting for the next to read more
- data, and you fill the input pipe by writing more data to FP, then
- there is no way to make progress: the only process that could read
- data from the output pipe is you, but you are blocked on the input
- pipe. */
-
-extern FILE *pex_write_input (struct pex_obj *obj, int binary);
+/* As for pex_run (), but takes an extra parameter to enable the
+ environment for the child process to be specified.
+
+ ENV The environment for the child process, specified as
+ an array of character pointers. Each element of the
+ array should point to a string of the form VAR=VALUE,
+ with the exception of the last element which must be
+ a null pointer.
+*/
+
+extern const char *pex_run_in_environment (struct pex_obj *obj, int flags,
+ const char *executable,
+ char * const *argv,
+ char * const *env,
+ const char *outname,
+ const char *errname, int *err);
/* Return a stream for a temporary file to pass to the first program
in the pipeline as input. The file name is chosen as for pex_run.
@@ -497,6 +511,14 @@ extern FILE *pex_input_pipe (struct pex_obj *obj, int binary);
extern FILE *pex_read_output (struct pex_obj *, int binary);
+/* Read the standard error of the last program to be executed.
+ pex_run can not be called after this. BINARY should be non-zero if
+ the file should be opened in binary mode; this is ignored on Unix.
+ Returns NULL on error. Don't call fclose on the returned FILE; it
+ will be closed by pex_free. */
+
+extern FILE *pex_read_err (struct pex_obj *, int binary);
+
/* Return exit status of all programs in VECTOR. COUNT indicates the
size of VECTOR. The status codes in the vector are in the order of
the calls to pex_run. Returns 0 on error, 1 on success. */
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog
index 0c67a5ce1233..689e278c721c 100644
--- a/include/opcode/ChangeLog
+++ b/include/opcode/ChangeLog
@@ -1,8 +1,187 @@
-2006-05-26 Richard Sandiford <richard@codesourcery.com>
+2006-06-29 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
+
+ * cr16.h: New file for CR16 target.
+
+2007-05-02 Alan Modra <amodra@bigpond.net.au>
+
+ * ppc.h (PPC_OPERAND_PLUS1): Update comment.
+
+2007-04-23 Nathan Sidwell <nathan@codesourcery.com>
+
+ * m68k.h (mcfisa_c): New.
+ (mcfusp, mcf_mask): Adjust.
+
+2007-04-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ppc.h (struct powerpc_operand): Replace "bits" with "bitm".
+ (num_powerpc_operands): Declare.
+ (PPC_OPERAND_SIGNED et al): Redefine as hex.
+ (PPC_OPERAND_PLUS1): Define.
+
+2007-03-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386.h (REX_MODE64): Renamed to ...
+ (REX_W): This.
+ (REX_EXTX): Renamed to ...
+ (REX_R): This.
+ (REX_EXTY): Renamed to ...
+ (REX_X): This.
+ (REX_EXTZ): Renamed to ...
+ (REX_B): This.
+
+2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386.h: Add entries from config/tc-i386.h and move tables
+ to opcodes/i386-opc.h.
+
+2007-03-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386.h (FloatDR): Removed.
+ (i386_optab): Use FloatD and FloatD|FloatR instead of FloatDR.
+
+2007-03-01 Alan Modra <amodra@bigpond.net.au>
+
+ * spu-insns.h: Add soma double-float insns.
+
+2007-02-20 Thiemo Seufer <ths@mips.com>
+ Chao-Ying Fu <fu@mips.com>
+
+ * mips.h (OP_SH_BP, OP_MASK_BP): Add support for balign instruction.
+ (INSN_DSPR2): Add flag for DSP R2 instructions.
+ (M_BALIGN): New macro.
+
+2007-02-14 Alan Modra <amodra@bigpond.net.au>
+
+ * i386.h (i386_optab): Replace all occurrences of Seg2ShortForm
+ and Seg3ShortFrom with Shortform.
+
+2007-02-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/4027
+ * i386.h (i386_optab): Put the real "test" before the pseudo
+ one.
+
+2007-01-08 Kazu Hirata <kazu@codesourcery.com>
+
+ * m68k.h (m68010up): OR fido_a.
+
+2006-12-25 Kazu Hirata <kazu@codesourcery.com>
+
+ * m68k.h (fido_a): New.
+
+2006-12-24 Kazu Hirata <kazu@codesourcery.com>
+
+ * m68k.h (mcfmac, mcfemac, cfloat, mcfhwdiv, mcfisa_a,
+ mcfisa_aa, mcfisa_b, mcfusp, mcf_mask): Double the defined
+ values.
+
+2006-11-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386.h (i386_optab): Replace CpuPNI with CpuSSE3.
+
+2006-10-31 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * score-inst.h (enum score_insn_type): Add Insn_internal.
+
+2006-10-25 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
+ Yukishige Shibata <shibata@rd.scei.sony.co.jp>
+ Nobuhisa Fujinami <fnami@rd.scei.sony.co.jp>
+ Takeaki Fukuoka <fukuoka@rd.scei.sony.co.jp>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * spu-insns.h: New file.
+ * spu.h: New file.
+
+2006-10-24 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ * ppc.h (PPC_OPCODE_CELL): Define.
+
+2006-10-23 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+
+ * i386.h : Modify opcode to support for the change in POPCNT opcode
+ in amdfam10 architecture.
+
+2006-09-28 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386.h: Replace CpuMNI with CpuSSSE3.
+
+2006-09-26 Mark Shinwell <shinwell@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+ Ian Lance Taylor <ian@wasabisystems.com>
+ Ben Elliston <bje@wasabisystems.com>
+
+ * arm.h (ARM_CEXT_IWMMXT2, ARM_ARCH_IWMMXT2): Define.
+
+2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * score-datadep.h: New file.
+ * score-inst.h: New file.
+
+2006-07-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386.h (i386_optab): Remove InvMem from maskmovq, movhlps,
+ movlhps, movmskps, pextrw, pmovmskb, movmskpd, maskmovdqu,
+ movdq2q and movq2dq.
+
+2006-07-10 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+ Michael Meissner <michael.meissner@amd.com>
+
+ * i386.h: Add amdfam10 new instructions (SSE4a and ABM instructions).
+
+2006-06-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386.h (i386_optab): Add "nop" with memory reference.
+
+2006-06-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386.h (i386_optab): Update comment for 64bit NOP.
+
+2006-06-06 Ben Elliston <bje@au.ibm.com>
+ Anton Blanchard <anton@samba.org>
+
+ * ppc.h (PPC_OPCODE_POWER6): Define.
+ Adjust whitespace.
+
+2006-06-05 Thiemo Seufer <ths@mips.com>
+
+ * mips.h: Improve description of MT flags.
+
+2006-05-25 Richard Sandiford <richard@codesourcery.com>
* m68k.h (mcf_mask): Define.
-2006-04-07 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+2006-05-05 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+
+ * mips.h (enum): Add macro M_CACHE_AB.
+
+2006-05-04 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+ David Ung <davidu@mips.com>
+
+ * mips.h: Add INSN_SMARTMIPS define.
+
+2006-04-30 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+
+ * mips.h: Defines udi bits and masks. Add description of
+ characters which may appear in the args field of udi
+ instructions.
+
+2006-04-26 Thiemo Seufer <ths@networkno.de>
+
+ * mips.h: Improve comments describing the bitfield instruction
+ fields.
+
+2006-04-26 Julian Brown <julian@codesourcery.com>
+
+ * arm.h (FPU_VFP_EXT_V3): Define constant.
+ (FPU_NEON_EXT_V1): Likewise.
+ (FPU_VFP_HARD): Update.
+ (FPU_VFP_V3): Define macro.
+ (FPU_ARCH_VFP_V3, FPU_ARCH_VFP_V3_PLUS_NEON_V1): Define macros.
+
+2006-04-07 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
* avr.h (AVR_ISA_PWMx): New.
diff --git a/include/opcode/arm.h b/include/opcode/arm.h
index 1d3aa5aeb3d2..24a89cfcb1d1 100644
--- a/include/opcode/arm.h
+++ b/include/opcode/arm.h
@@ -49,6 +49,7 @@
#define ARM_CEXT_XSCALE 0x00000001 /* Allow MIA etc. */
#define ARM_CEXT_MAVERICK 0x00000002 /* Use Cirrus/DSP coprocessor. */
#define ARM_CEXT_IWMMXT 0x00000004 /* Intel Wireless MMX technology coprocessor. */
+#define ARM_CEXT_IWMMXT2 0x00000008 /* Intel Wireless MMX technology coprocessor version 2. */
#define FPU_ENDIAN_PURE 0x80000000 /* Pure-endian doubles. */
#define FPU_ENDIAN_BIG 0 /* Double words-big-endian. */
@@ -58,6 +59,8 @@
#define FPU_VFP_EXT_V1xD 0x08000000 /* Base VFP instruction set. */
#define FPU_VFP_EXT_V1 0x04000000 /* Double-precision insns. */
#define FPU_VFP_EXT_V2 0x02000000 /* ARM10E VFPr1. */
+#define FPU_VFP_EXT_V3 0x01000000 /* VFPv3 insns. */
+#define FPU_NEON_EXT_V1 0x00800000 /* Neon (SIMD) insns. */
/* Architectures are the sum of the base and extensions. The ARM ARM (rev E)
defines the following: ARMv3, ARMv3M, ARMv4xM, ARMv4, ARMv4TxM, ARMv4T,
@@ -101,11 +104,15 @@
#define ARM_ARCH_XSCALE ARM_FEATURE (ARM_AEXT_V5TE, ARM_CEXT_XSCALE)
#define ARM_ARCH_IWMMXT \
ARM_FEATURE (ARM_AEXT_V5TE, ARM_CEXT_XSCALE | ARM_CEXT_IWMMXT)
+#define ARM_ARCH_IWMMXT2 \
+ ARM_FEATURE (ARM_AEXT_V5TE, ARM_CEXT_XSCALE | ARM_CEXT_IWMMXT | ARM_CEXT_IWMMXT2)
#define FPU_VFP_V1xD (FPU_VFP_EXT_V1xD | FPU_ENDIAN_PURE)
#define FPU_VFP_V1 (FPU_VFP_V1xD | FPU_VFP_EXT_V1)
#define FPU_VFP_V2 (FPU_VFP_V1 | FPU_VFP_EXT_V2)
-#define FPU_VFP_HARD (FPU_VFP_EXT_V1xD | FPU_VFP_EXT_V1 | FPU_VFP_EXT_V2)
+#define FPU_VFP_V3 (FPU_VFP_V2 | FPU_VFP_EXT_V3)
+#define FPU_VFP_HARD (FPU_VFP_EXT_V1xD | FPU_VFP_EXT_V1 | FPU_VFP_EXT_V2 \
+ | FPU_VFP_EXT_V3 | FPU_NEON_EXT_V1)
#define FPU_FPA (FPU_FPA_EXT_V1 | FPU_FPA_EXT_V2)
/* Deprecated */
@@ -117,6 +124,10 @@
#define FPU_ARCH_VFP_V1xD ARM_FEATURE (0, FPU_VFP_V1xD)
#define FPU_ARCH_VFP_V1 ARM_FEATURE (0, FPU_VFP_V1)
#define FPU_ARCH_VFP_V2 ARM_FEATURE (0, FPU_VFP_V2)
+#define FPU_ARCH_VFP_V3 ARM_FEATURE (0, FPU_VFP_V3)
+#define FPU_ARCH_NEON_V1 ARM_FEATURE (0, FPU_NEON_EXT_V1)
+#define FPU_ARCH_VFP_V3_PLUS_NEON_V1 \
+ ARM_FEATURE (0, FPU_VFP_V3 | FPU_NEON_EXT_V1)
#define FPU_ARCH_VFP_HARD ARM_FEATURE (0, FPU_VFP_HARD)
#define FPU_ARCH_ENDIAN_PURE ARM_FEATURE (0, FPU_ENDIAN_PURE)
diff --git a/include/opcode/cr16.h b/include/opcode/cr16.h
new file mode 100644
index 000000000000..b7e3be554fcd
--- /dev/null
+++ b/include/opcode/cr16.h
@@ -0,0 +1,437 @@
+/* cr16.h -- Header file for CR16 opcode and register tables.
+ Copyright 2007 Free Software Foundation, Inc.
+ Contributed by M R Swami Reddy
+
+ This file is part of GAS, GDB and the GNU binutils.
+
+ GAS, GDB, and GNU binutils is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2, or (at your
+ option) any later version.
+
+ GAS, GDB, and GNU binutils are distributed in the hope that they will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public 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 _CR16_H_
+#define _CR16_H_
+
+/* CR16 core Registers :
+ The enums are used as indices to CR16 registers table (cr16_regtab).
+ Therefore, order MUST be preserved. */
+
+typedef enum
+ {
+ /* 16-bit general purpose registers. */
+ r0, r1, r2, r3,
+ r4, r5, r6, r7,
+ r8, r9, r10, r11,
+ r12_L = 12, r13_L = 13, ra = 14, sp_L = 15,
+
+ /* 32-bit general purpose registers. */
+ r12 = 12, r13 = 13, r14 = 14, r15 = 15,
+ era = 14, sp = 15, RA,
+
+ /* Not a register. */
+ nullregister,
+ MAX_REG
+ }
+reg;
+
+/* CR16 processor registers and special registers :
+ The enums are used as indices to CR16 processor registers table
+ (cr16_pregtab). Therefore, order MUST be preserved. */
+
+typedef enum
+ {
+ /* processor registers. */
+ dbs = MAX_REG,
+ dsr, dcrl, dcrh,
+ car0l, car0h, car1l, car1h,
+ cfg, psr, intbasel, intbaseh,
+ ispl, isph, uspl, usph,
+ dcr = dcrl,
+ car0 = car0l,
+ car1 = car1l,
+ intbase = intbasel,
+ isp = ispl,
+ usp = uspl,
+ /* Not a processor register. */
+ nullpregister = usph + 1,
+ MAX_PREG
+ }
+preg;
+
+/* CR16 Register types. */
+
+typedef enum
+ {
+ CR16_R_REGTYPE, /* r<N> */
+ CR16_RP_REGTYPE, /* reg pair */
+ CR16_P_REGTYPE /* Processor register */
+ }
+reg_type;
+
+/* CR16 argument types :
+ The argument types correspond to instructions operands
+
+ Argument types :
+ r - register
+ rp - register pair
+ c - constant
+ i - immediate
+ idxr - index with register
+ idxrp - index with register pair
+ rbase - register base
+ rpbase - register pair base
+ pr - processor register */
+
+typedef enum
+ {
+ arg_r,
+ arg_c,
+ arg_cr,
+ arg_crp,
+ arg_ic,
+ arg_icr,
+ arg_idxr,
+ arg_idxrp,
+ arg_rbase,
+ arg_rpbase,
+ arg_rp,
+ arg_pr,
+ arg_prp,
+ arg_cc,
+ arg_ra,
+ /* Not an argument. */
+ nullargs
+ }
+argtype;
+
+/* CR16 operand types:The operand types correspond to instructions operands.*/
+
+typedef enum
+ {
+ dummy,
+ /* N-bit signed immediate. */
+ imm3, imm4, imm5, imm6, imm16, imm20, imm32,
+ /* N-bit unsigned immediate. */
+ uimm3, uimm3_1, uimm4, uimm4_1, uimm5, uimm16, uimm20, uimm32,
+ /* N-bit signed displacement. */
+ disps5, disps17, disps25,
+ /* N-bit unsigned displacement. */
+ dispe9,
+ /* N-bit absolute address. */
+ abs20, abs24,
+ /* Register relative. */
+ rra, rbase, rbase_disps20, rbase_dispe20,
+ /* Register pair relative. */
+ rpbase_disps0, rpbase_dispe4, rpbase_disps4, rpbase_disps16,
+ rpbase_disps20, rpbase_dispe20,
+ /* Register index. */
+ rindex7_abs20, rindex8_abs20,
+ /* Register pair index. */
+ rpindex_disps0, rpindex_disps14, rpindex_disps20,
+ /* register. */
+ regr,
+ /* register pair. */
+ regp,
+ /* processor register. */
+ pregr,
+ /* processor register 32 bit. */
+ pregrp,
+ /* condition code - 4 bit. */
+ cc,
+ /* Not an operand. */
+ nulloperand,
+ /* Maximum supported operand. */
+ MAX_OPRD
+ }
+operand_type;
+
+/* CR16 instruction types. */
+
+#define NO_TYPE_INS 0
+#define ARITH_INS 1
+#define LD_STOR_INS 2
+#define BRANCH_INS 3
+#define ARITH_BYTE_INS 4
+#define SHIFT_INS 5
+#define BRANCH_NEQ_INS 6
+#define LD_STOR_INS_INC 7
+#define STOR_IMM_INS 8
+#define CSTBIT_INS 9
+
+/* Maximum value supported for instruction types. */
+#define CR16_INS_MAX (1 << 4)
+/* Mask to record an instruction type. */
+#define CR16_INS_MASK (CR16_INS_MAX - 1)
+/* Return instruction type, given instruction's attributes. */
+#define CR16_INS_TYPE(attr) ((attr) & CR16_INS_MASK)
+
+/* Indicates whether this instruction has a register list as parameter. */
+#define REG_LIST CR16_INS_MAX
+
+/* The operands in binary and assembly are placed in reverse order.
+ load - (REVERSE_MATCH)/store - (! REVERSE_MATCH). */
+#define REVERSE_MATCH (1 << 5)
+
+/* Printing formats, where the instruction prefix isn't consecutive. */
+#define FMT_1 (1 << 9) /* 0xF0F00000 */
+#define FMT_2 (1 << 10) /* 0xFFF0FF00 */
+#define FMT_3 (1 << 11) /* 0xFFF00F00 */
+#define FMT_4 (1 << 12) /* 0xFFF0F000 */
+#define FMT_5 (1 << 13) /* 0xFFF0FFF0 */
+#define FMT_CR16 (FMT_1 | FMT_2 | FMT_3 | FMT_4 | FMT_5)
+
+/* Indicates whether this instruction can be relaxed. */
+#define RELAXABLE (1 << 14)
+
+/* Indicates that instruction uses user registers (and not
+ general-purpose registers) as operands. */
+#define USER_REG (1 << 15)
+
+
+/* Instruction shouldn't allow 'sp' usage. */
+#define NO_SP (1 << 17)
+
+/* Instruction shouldn't allow to push a register which is used as a rptr. */
+#define NO_RPTR (1 << 18)
+
+/* Maximum operands per instruction. */
+#define MAX_OPERANDS 5
+/* Maximum register name length. */
+#define MAX_REGNAME_LEN 10
+/* Maximum instruction length. */
+#define MAX_INST_LEN 256
+
+
+/* Values defined for the flags field of a struct operand_entry. */
+
+/* Operand must be an unsigned number. */
+#define OP_UNSIGNED (1 << 0)
+/* Operand must be a signed number. */
+#define OP_SIGNED (1 << 1)
+/* Operand must be a negative number. */
+#define OP_NEG (1 << 2)
+/* A special load/stor 4-bit unsigned displacement operand. */
+#define OP_DEC (1 << 3)
+/* Operand must be an even number. */
+#define OP_EVEN (1 << 4)
+/* Operand is shifted right. */
+#define OP_SHIFT (1 << 5)
+/* Operand is shifted right and decremented. */
+#define OP_SHIFT_DEC (1 << 6)
+/* Operand has reserved escape sequences. */
+#define OP_ESC (1 << 7)
+/* Operand must be a ABS20 number. */
+#define OP_ABS20 (1 << 8)
+/* Operand must be a ABS24 number. */
+#define OP_ABS24 (1 << 9)
+/* Operand has reserved escape sequences type 1. */
+#define OP_ESC1 (1 << 10)
+
+/* Single operand description. */
+
+typedef struct
+ {
+ /* Operand type. */
+ operand_type op_type;
+ /* Operand location within the opcode. */
+ unsigned int shift;
+ }
+operand_desc;
+
+/* Instruction data structure used in instruction table. */
+
+typedef struct
+ {
+ /* Name. */
+ const char *mnemonic;
+ /* Size (in words). */
+ unsigned int size;
+ /* Constant prefix (matched by the disassembler). */
+ unsigned long match; /* ie opcode */
+ /* Match size (in bits). */
+ /* MASK: if( (i & match_bits) == match ) then match */
+ int match_bits;
+ /* Attributes. */
+ unsigned int flags;
+ /* Operands (always last, so unreferenced operands are initialized). */
+ operand_desc operands[MAX_OPERANDS];
+ }
+inst;
+
+/* Data structure for a single instruction's arguments (Operands). */
+
+typedef struct
+ {
+ /* Register or base register. */
+ reg r;
+ /* Register pair register. */
+ reg rp;
+ /* Index register. */
+ reg i_r;
+ /* Processor register. */
+ preg pr;
+ /* Processor register. 32 bit */
+ preg prp;
+ /* Constant/immediate/absolute value. */
+ long constant;
+ /* CC code. */
+ unsigned int cc;
+ /* Scaled index mode. */
+ unsigned int scale;
+ /* Argument type. */
+ argtype type;
+ /* Size of the argument (in bits) required to represent. */
+ int size;
+ /* The type of the expression. */
+ unsigned char X_op;
+ }
+argument;
+
+/* Internal structure to hold the various entities
+ corresponding to the current assembling instruction. */
+
+typedef struct
+ {
+ /* Number of arguments. */
+ int nargs;
+ /* The argument data structure for storing args (operands). */
+ argument arg[MAX_OPERANDS];
+/* The following fields are required only by CR16-assembler. */
+#ifdef TC_CR16
+ /* Expression used for setting the fixups (if any). */
+ expressionS exp;
+ bfd_reloc_code_real_type rtype;
+#endif /* TC_CR16 */
+ /* Instruction size (in bytes). */
+ int size;
+ }
+ins;
+
+/* Structure to hold information about predefined operands. */
+
+typedef struct
+ {
+ /* Size (in bits). */
+ unsigned int bit_size;
+ /* Argument type. */
+ argtype arg_type;
+ /* One bit syntax flags. */
+ int flags;
+ }
+operand_entry;
+
+/* Structure to hold trap handler information. */
+
+typedef struct
+ {
+ /* Trap name. */
+ char *name;
+ /* Index in dispatch table. */
+ unsigned int entry;
+ }
+trap_entry;
+
+/* Structure to hold information about predefined registers. */
+
+typedef struct
+ {
+ /* Name (string representation). */
+ char *name;
+ /* Value (enum representation). */
+ union
+ {
+ /* Register. */
+ reg reg_val;
+ /* processor register. */
+ preg preg_val;
+ } value;
+ /* Register image. */
+ int image;
+ /* Register type. */
+ reg_type type;
+ }
+reg_entry;
+
+/* CR16 opcode table. */
+extern const inst cr16_instruction[];
+extern const unsigned int cr16_num_opcodes;
+#define NUMOPCODES cr16_num_opcodes
+
+/* CR16 operands table. */
+extern const operand_entry cr16_optab[];
+
+/* CR16 registers table. */
+extern const reg_entry cr16_regtab[];
+extern const unsigned int cr16_num_regs;
+#define NUMREGS cr16_num_regs
+
+/* CR16 register pair table. */
+extern const reg_entry cr16_regptab[];
+extern const unsigned int cr16_num_regps;
+#define NUMREGPS cr16_num_regps
+
+/* CR16 processor registers table. */
+extern const reg_entry cr16_pregtab[];
+extern const unsigned int cr16_num_pregs;
+#define NUMPREGS cr16_num_pregs
+
+/* CR16 processor registers - 32 bit table. */
+extern const reg_entry cr16_pregptab[];
+extern const unsigned int cr16_num_pregps;
+#define NUMPREGPS cr16_num_pregps
+
+/* CR16 trap/interrupt table. */
+extern const trap_entry cr16_traps[];
+extern const unsigned int cr16_num_traps;
+#define NUMTRAPS cr16_num_traps
+
+/* CR16 CC - codes bit table. */
+extern const char * cr16_b_cond_tab[];
+extern const unsigned int cr16_num_cc;
+#define NUMCC cr16_num_cc;
+
+
+/* Table of instructions with no operands. */
+extern const char * cr16_no_op_insn[];
+
+/* Current instruction we're assembling. */
+extern const inst *instruction;
+
+/* A macro for representing the instruction "constant" opcode, that is,
+ the FIXED part of the instruction. The "constant" opcode is represented
+ as a 32-bit unsigned long, where OPC is expanded (by a left SHIFT)
+ over that range. */
+#define BIN(OPC,SHIFT) (OPC << SHIFT)
+
+/* Is the current instruction type is TYPE ? */
+#define IS_INSN_TYPE(TYPE) \
+ (CR16_INS_TYPE (instruction->flags) == TYPE)
+
+/* Is the current instruction mnemonic is MNEMONIC ? */
+#define IS_INSN_MNEMONIC(MNEMONIC) \
+ (strcmp (instruction->mnemonic, MNEMONIC) == 0)
+
+/* Does the current instruction has register list ? */
+#define INST_HAS_REG_LIST \
+ (instruction->flags & REG_LIST)
+
+
+/* Utility macros for string comparison. */
+#define streq(a, b) (strcmp (a, b) == 0)
+#define strneq(a, b, c) (strncmp (a, b, c) == 0)
+
+/* Long long type handling. */
+/* Replace all appearances of 'long long int' with LONGLONG. */
+typedef long long int LONGLONG;
+typedef unsigned long long ULONGLONG;
+
+#endif /* _CR16_H_ */
diff --git a/include/opcode/i386.h b/include/opcode/i386.h
index 2b2c1e0f9790..4fe769a58bfc 100644
--- a/include/opcode/i386.h
+++ b/include/opcode/i386.h
@@ -1,6 +1,6 @@
-/* opcode/i386.h -- Intel 80386 opcode table
+/* opcode/i386.h -- Intel 80386 opcode macros
Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler, and GDB, the GNU Debugger.
@@ -31,7 +31,7 @@
This happens with all the non-commutative arithmetic floating point
operations with two register operands, where the source register is
- %st, and destination register is %st(i). See FloatDR below.
+ %st, and destination register is %st(i).
The affected opcode map is dceX, dcfX, deeX, defX. */
@@ -48,1668 +48,68 @@
#define OLDGCC_COMPAT SYSV386_COMPAT
#endif
-static const template i386_optab[] =
-{
-
-#define X None
-#define NoSuf (No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf)
-#define b_Suf (No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf)
-#define w_Suf (No_bSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf)
-#define l_Suf (No_bSuf|No_wSuf|No_sSuf|No_xSuf|No_qSuf)
-#define q_Suf (No_bSuf|No_wSuf|No_sSuf|No_lSuf|No_xSuf)
-#define x_Suf (No_bSuf|No_wSuf|No_sSuf|No_lSuf|No_qSuf)
-#define bw_Suf (No_lSuf|No_sSuf|No_xSuf|No_qSuf)
-#define bl_Suf (No_wSuf|No_sSuf|No_xSuf|No_qSuf)
-#define wl_Suf (No_bSuf|No_sSuf|No_xSuf|No_qSuf)
-#define wlq_Suf (No_bSuf|No_sSuf|No_xSuf)
-#define lq_Suf (No_bSuf|No_wSuf|No_sSuf|No_xSuf)
-#define wq_Suf (No_bSuf|No_lSuf|No_sSuf|No_xSuf)
-#define sl_Suf (No_bSuf|No_wSuf|No_xSuf|No_qSuf)
-#define bwl_Suf (No_sSuf|No_xSuf|No_qSuf)
-#define bwlq_Suf (No_sSuf|No_xSuf)
-#define FP (NoSuf)
-#define l_FP (l_Suf)
-#define q_FP (q_Suf|NoRex64)
-#define x_FP (x_Suf|FloatMF)
-#define sl_FP (sl_Suf|FloatMF)
-#if SYSV386_COMPAT
-/* Someone forgot that the FloatR bit reverses the operation when not
- equal to the FloatD bit. ie. Changing only FloatD results in the
- destination being swapped *and* the direction being reversed. */
-#define FloatDR FloatD
-#else
-#define FloatDR (FloatD|FloatR)
-#endif
-
-/* Move instructions. */
#define MOV_AX_DISP32 0xa0
-/* We put the 64bit displacement first and we only mark constants
- larger than 32bit as Disp64. */
-{ "mov", 2, 0xa0, X, Cpu64, bwlq_Suf|D|W, { Disp64, Acc, 0 } },
-{ "mov", 2, 0xa0, X, CpuNo64,bwl_Suf|D|W, { Disp16|Disp32, Acc, 0 } },
-{ "mov", 2, 0x88, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} },
-/* In the 64bit mode the short form mov immediate is redefined to have
- 64bit value. */
-{ "mov", 2, 0xb0, X, 0, bwl_Suf|W|ShortForm, { EncImm, Reg8|Reg16|Reg32, 0 } },
-{ "mov", 2, 0xc6, 0, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0 } },
-{ "mov", 2, 0xb0, X, Cpu64, q_Suf|W|ShortForm, { Imm64, Reg64, 0 } },
-/* The segment register moves accept WordReg so that a segment register
- can be copied to a 32 bit register, and vice versa, without using a
- size prefix. When moving to a 32 bit register, the upper 16 bits
- are set to an implementation defined value (on the Pentium Pro,
- the implementation defined value is zero). */
-{ "mov", 2, 0x8c, X, 0, wl_Suf|Modrm, { SReg2, WordReg|InvMem, 0 } },
-{ "mov", 2, 0x8c, X, 0, w_Suf|Modrm|IgnoreSize, { SReg2, WordMem, 0 } },
-{ "mov", 2, 0x8c, X, Cpu386, wl_Suf|Modrm, { SReg3, WordReg|InvMem, 0 } },
-{ "mov", 2, 0x8c, X, Cpu386, w_Suf|Modrm|IgnoreSize, { SReg3, WordMem, 0 } },
-{ "mov", 2, 0x8e, X, 0, wl_Suf|Modrm|IgnoreSize, { WordReg, SReg2, 0 } },
-{ "mov", 2, 0x8e, X, 0, w_Suf|Modrm|IgnoreSize, { WordMem, SReg2, 0 } },
-{ "mov", 2, 0x8e, X, Cpu386, wl_Suf|Modrm|IgnoreSize, { WordReg, SReg3, 0 } },
-{ "mov", 2, 0x8e, X, Cpu386, w_Suf|Modrm|IgnoreSize, { WordMem, SReg3, 0 } },
-/* Move to/from control debug registers. In the 16 or 32bit modes they are 32bit. In the 64bit
- mode they are 64bit.*/
-{ "mov", 2, 0x0f20, X, Cpu386|CpuNo64, l_Suf|D|Modrm|IgnoreSize,{ Control, Reg32|InvMem, 0} },
-{ "mov", 2, 0x0f20, X, Cpu64, q_Suf|D|Modrm|IgnoreSize|NoRex64,{ Control, Reg64|InvMem, 0} },
-{ "mov", 2, 0x0f21, X, Cpu386|CpuNo64, l_Suf|D|Modrm|IgnoreSize,{ Debug, Reg32|InvMem, 0} },
-{ "mov", 2, 0x0f21, X, Cpu64, q_Suf|D|Modrm|IgnoreSize|NoRex64,{ Debug, Reg64|InvMem, 0} },
-{ "mov", 2, 0x0f24, X, Cpu386|CpuNo64, l_Suf|D|Modrm|IgnoreSize, { Test, Reg32|InvMem, 0} },
-{ "movabs",2, 0xa0, X, Cpu64, bwlq_Suf|D|W, { Disp64, Acc, 0 } },
-{ "movabs",2, 0xb0, X, Cpu64, q_Suf|W|ShortForm, { Imm64, Reg64, 0 } },
-
-/* Move with sign extend. */
-/* "movsbl" & "movsbw" must not be unified into "movsb" to avoid
- conflict with the "movs" string move instruction. */
-{"movsbl", 2, 0x0fbe, X, Cpu386, NoSuf|Modrm, { Reg8|ByteMem, Reg32, 0} },
-{"movsbw", 2, 0x0fbe, X, Cpu386, NoSuf|Modrm, { Reg8|ByteMem, Reg16, 0} },
-{"movswl", 2, 0x0fbf, X, Cpu386, NoSuf|Modrm, { Reg16|ShortMem,Reg32, 0} },
-{"movsbq", 2, 0x0fbe, X, Cpu64, NoSuf|Modrm|Rex64, { Reg8|ByteMem, Reg64, 0} },
-{"movswq", 2, 0x0fbf, X, Cpu64, NoSuf|Modrm|Rex64, { Reg16|ShortMem,Reg64, 0} },
-{"movslq", 2, 0x63, X, Cpu64, NoSuf|Modrm|Rex64, { Reg32|WordMem, Reg64, 0} },
-/* Intel Syntax next 3 insns */
-{"movsx", 2, 0x0fbe, X, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, WordReg, 0} },
-{"movsx", 2, 0x0fbf, X, Cpu386, w_Suf|Modrm, { Reg16|ShortMem, Reg32|Reg64, 0} },
-{"movsx", 2, 0x63, X, Cpu64, l_Suf|Modrm|Rex64, { Reg32|WordMem, Reg64, 0} },
-
-/* Move with zero extend. We can't remove "movzb" since existing
- assembly codes may use it. */
-{"movzb", 2, 0x0fb6, X, Cpu386, wl_Suf|Modrm, { Reg8|ByteMem, WordReg, 0} },
-/* "movzbl" & "movzbw" should not be unified into "movzb" for
- consistency with the sign extending moves above. */
-{"movzbl", 2, 0x0fb6, X, Cpu386, NoSuf|Modrm, { Reg8|ByteMem, Reg32, 0} },
-{"movzbw", 2, 0x0fb6, X, Cpu386, NoSuf|Modrm, { Reg8|ByteMem, Reg16, 0} },
-{"movzwl", 2, 0x0fb7, X, Cpu386, NoSuf|Modrm, { Reg16|ShortMem, Reg32, 0} },
-/* These instructions are not particulary useful, since the zero extend
- 32->64 is implicit, but we can encode them. */
-{"movzbq", 2, 0x0fb6, X, Cpu64, NoSuf|Modrm|Rex64, { Reg8|ByteMem, Reg64, 0} },
-{"movzwq", 2, 0x0fb7, X, Cpu64, NoSuf|Modrm|Rex64, { Reg16|ShortMem, Reg64, 0} },
-/* Intel Syntax next 2 insns (the 64-bit variants are not particulary useful,
- since the zero extend 32->64 is implicit, but we can encode them). */
-{"movzx", 2, 0x0fb6, X, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, WordReg, 0} },
-{"movzx", 2, 0x0fb7, X, Cpu386, w_Suf|Modrm, { Reg16|ShortMem, Reg32|Reg64, 0} },
-
-/* Push instructions. */
-{"push", 1, 0x50, X, CpuNo64, wl_Suf|ShortForm|DefaultSize, { WordReg, 0, 0 } },
-{"push", 1, 0xff, 6, CpuNo64, wl_Suf|Modrm|DefaultSize, { WordReg|WordMem, 0, 0 } },
-{"push", 1, 0x6a, X, Cpu186|CpuNo64, wl_Suf|DefaultSize, { Imm8S, 0, 0} },
-{"push", 1, 0x68, X, Cpu186|CpuNo64, wl_Suf|DefaultSize, { Imm16|Imm32, 0, 0} },
-{"push", 1, 0x06, X, CpuNo64, wl_Suf|Seg2ShortForm|DefaultSize, { SReg2, 0, 0 } },
-{"push", 1, 0x0fa0, X, Cpu386|CpuNo64, wl_Suf|Seg3ShortForm|DefaultSize, { SReg3, 0, 0 } },
-/* In 64bit mode, the operand size is implicitly 64bit. */
-{"push", 1, 0x50, X, Cpu64, wq_Suf|ShortForm|DefaultSize|NoRex64, { Reg16|Reg64, 0, 0 } },
-{"push", 1, 0xff, 6, Cpu64, wq_Suf|Modrm|DefaultSize|NoRex64, { Reg16|Reg64|WordMem, 0, 0 } },
-{"push", 1, 0x6a, X, Cpu64, wq_Suf|DefaultSize|NoRex64, { Imm8S, 0, 0} },
-{"push", 1, 0x68, X, Cpu64, wq_Suf|DefaultSize|NoRex64, { Imm32S|Imm16, 0, 0} },
-{"push", 1, 0x0fa0, X, Cpu64, wq_Suf|Seg3ShortForm|DefaultSize|NoRex64, { SReg3, 0, 0 } },
-
-{"pusha", 0, 0x60, X, Cpu186|CpuNo64, wl_Suf|DefaultSize, { 0, 0, 0 } },
-
-/* Pop instructions. */
-{"pop", 1, 0x58, X, CpuNo64, wl_Suf|ShortForm|DefaultSize, { WordReg, 0, 0 } },
-{"pop", 1, 0x8f, 0, CpuNo64, wl_Suf|Modrm|DefaultSize, { WordReg|WordMem, 0, 0 } },
#define POP_SEG_SHORT 0x07
-{"pop", 1, 0x07, X, CpuNo64, wl_Suf|Seg2ShortForm|DefaultSize, { SReg2, 0, 0 } },
-{"pop", 1, 0x0fa1, X, Cpu386|CpuNo64, wl_Suf|Seg3ShortForm|DefaultSize, { SReg3, 0, 0 } },
-/* In 64bit mode, the operand size is implicitly 64bit. */
-{"pop", 1, 0x58, X, Cpu64, wq_Suf|ShortForm|DefaultSize|NoRex64, { Reg16|Reg64, 0, 0 } },
-{"pop", 1, 0x8f, 0, Cpu64, wq_Suf|Modrm|DefaultSize|NoRex64, { Reg16|Reg64|WordMem, 0, 0 } },
-{"pop", 1, 0x0fa1, X, Cpu64, wq_Suf|Seg3ShortForm|DefaultSize|NoRex64, { SReg3, 0, 0 } },
-
-{"popa", 0, 0x61, X, Cpu186|CpuNo64, wl_Suf|DefaultSize, { 0, 0, 0 } },
-
-/* Exchange instructions.
- xchg commutes: we allow both operand orders.
-
- In the 64bit code, xchg eax, eax is reused for new nop instruction. */
-#if 0 /* While the two entries that are disabled generate shorter code
- for xchg eax, reg (on x86_64), the special case xchg eax, eax
- does not get handled correctly - it degenerates into nop, but
- that way the side effect of zero-extending eax to rax is lost. */
-{"xchg", 2, 0x90, X, 0, wlq_Suf|ShortForm, { WordReg, Acc, 0 } },
-{"xchg", 2, 0x90, X, 0, wlq_Suf|ShortForm, { Acc, WordReg, 0 } },
-#else
-{"xchg", 2, 0x90, X, CpuNo64, wl_Suf|ShortForm, { WordReg, Acc, 0 } },
-{"xchg", 2, 0x90, X, CpuNo64, wl_Suf|ShortForm, { Acc, WordReg, 0 } },
-{"xchg", 2, 0x90, X, Cpu64, wq_Suf|ShortForm, { Reg16|Reg64, Acc, 0 } },
-{"xchg", 2, 0x90, X, Cpu64, wq_Suf|ShortForm, { Acc, Reg16|Reg64, 0 } },
-#endif
-{"xchg", 2, 0x86, X, 0, bwlq_Suf|W|Modrm, { Reg, Reg|AnyMem, 0 } },
-{"xchg", 2, 0x86, X, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, Reg, 0 } },
-
-/* In/out from ports. */
-/* XXX should reject %rax */
-{"in", 2, 0xe4, X, 0, bwl_Suf|W, { Imm8, Acc, 0 } },
-{"in", 2, 0xec, X, 0, bwl_Suf|W, { InOutPortReg, Acc, 0 } },
-{"in", 1, 0xe4, X, 0, bwl_Suf|W, { Imm8, 0, 0 } },
-{"in", 1, 0xec, X, 0, bwl_Suf|W, { InOutPortReg, 0, 0 } },
-{"out", 2, 0xe6, X, 0, bwl_Suf|W, { Acc, Imm8, 0 } },
-{"out", 2, 0xee, X, 0, bwl_Suf|W, { Acc, InOutPortReg, 0 } },
-{"out", 1, 0xe6, X, 0, bwl_Suf|W, { Imm8, 0, 0 } },
-{"out", 1, 0xee, X, 0, bwl_Suf|W, { InOutPortReg, 0, 0 } },
-
-/* Load effective address. */
-{"lea", 2, 0x8d, X, 0, wlq_Suf|Modrm, { WordMem, WordReg, 0 } },
-
-/* Load segment registers from memory. */
-{"lds", 2, 0xc5, X, CpuNo64, wl_Suf|Modrm, { WordMem, WordReg, 0} },
-{"les", 2, 0xc4, X, CpuNo64, wl_Suf|Modrm, { WordMem, WordReg, 0} },
-{"lfs", 2, 0x0fb4, X, Cpu386, wl_Suf|Modrm, { WordMem, WordReg, 0} },
-{"lgs", 2, 0x0fb5, X, Cpu386, wl_Suf|Modrm, { WordMem, WordReg, 0} },
-{"lss", 2, 0x0fb2, X, Cpu386, wl_Suf|Modrm, { WordMem, WordReg, 0} },
-
-/* Flags register instructions. */
-{"clc", 0, 0xf8, X, 0, NoSuf, { 0, 0, 0} },
-{"cld", 0, 0xfc, X, 0, NoSuf, { 0, 0, 0} },
-{"cli", 0, 0xfa, X, 0, NoSuf, { 0, 0, 0} },
-{"clts", 0, 0x0f06, X, Cpu286, NoSuf, { 0, 0, 0} },
-{"cmc", 0, 0xf5, X, 0, NoSuf, { 0, 0, 0} },
-{"lahf", 0, 0x9f, X, 0, NoSuf, { 0, 0, 0} },
-{"sahf", 0, 0x9e, X, 0, NoSuf, { 0, 0, 0} },
-{"pushf", 0, 0x9c, X, CpuNo64,wl_Suf|DefaultSize, { 0, 0, 0} },
-{"pushf", 0, 0x9c, X, Cpu64, wq_Suf|DefaultSize|NoRex64,{ 0, 0, 0} },
-{"popf", 0, 0x9d, X, CpuNo64,wl_Suf|DefaultSize, { 0, 0, 0} },
-{"popf", 0, 0x9d, X, Cpu64, wq_Suf|DefaultSize|NoRex64,{ 0, 0, 0} },
-{"stc", 0, 0xf9, X, 0, NoSuf, { 0, 0, 0} },
-{"std", 0, 0xfd, X, 0, NoSuf, { 0, 0, 0} },
-{"sti", 0, 0xfb, X, 0, NoSuf, { 0, 0, 0} },
-
-/* Arithmetic. */
-{"add", 2, 0x00, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} },
-{"add", 2, 0x83, 0, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"add", 2, 0x04, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} },
-{"add", 2, 0x80, 0, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} },
-
-{"inc", 1, 0x40, X, CpuNo64,wl_Suf|ShortForm, { WordReg, 0, 0} },
-{"inc", 1, 0xfe, 0, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-
-{"sub", 2, 0x28, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} },
-{"sub", 2, 0x83, 5, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"sub", 2, 0x2c, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} },
-{"sub", 2, 0x80, 5, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} },
-
-{"dec", 1, 0x48, X, CpuNo64, wl_Suf|ShortForm, { WordReg, 0, 0} },
-{"dec", 1, 0xfe, 1, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-
-{"sbb", 2, 0x18, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} },
-{"sbb", 2, 0x83, 3, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"sbb", 2, 0x1c, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} },
-{"sbb", 2, 0x80, 3, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} },
-
-{"cmp", 2, 0x38, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} },
-{"cmp", 2, 0x83, 7, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"cmp", 2, 0x3c, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} },
-{"cmp", 2, 0x80, 7, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} },
-
-{"test", 2, 0x84, X, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, Reg, 0} },
-{"test", 2, 0x84, X, 0, bwlq_Suf|W|Modrm, { Reg, Reg|AnyMem, 0} },
-{"test", 2, 0xa8, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} },
-{"test", 2, 0xf6, 0, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} },
-
-{"and", 2, 0x20, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} },
-{"and", 2, 0x83, 4, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"and", 2, 0x24, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} },
-{"and", 2, 0x80, 4, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} },
-
-{"or", 2, 0x08, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} },
-{"or", 2, 0x83, 1, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"or", 2, 0x0c, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} },
-{"or", 2, 0x80, 1, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} },
-
-{"xor", 2, 0x30, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} },
-{"xor", 2, 0x83, 6, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"xor", 2, 0x34, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} },
-{"xor", 2, 0x80, 6, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} },
-
-/* clr with 1 operand is really xor with 2 operands. */
-{"clr", 1, 0x30, X, 0, bwlq_Suf|W|Modrm|regKludge, { Reg, 0, 0 } },
-
-{"adc", 2, 0x10, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} },
-{"adc", 2, 0x83, 2, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"adc", 2, 0x14, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} },
-{"adc", 2, 0x80, 2, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} },
-
-{"neg", 1, 0xf6, 3, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-{"not", 1, 0xf6, 2, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-
-{"aaa", 0, 0x37, X, CpuNo64, NoSuf, { 0, 0, 0} },
-{"aas", 0, 0x3f, X, CpuNo64, NoSuf, { 0, 0, 0} },
-{"daa", 0, 0x27, X, CpuNo64, NoSuf, { 0, 0, 0} },
-{"das", 0, 0x2f, X, CpuNo64, NoSuf, { 0, 0, 0} },
-{"aad", 0, 0xd50a, X, CpuNo64, NoSuf, { 0, 0, 0} },
-{"aad", 1, 0xd5, X, CpuNo64, NoSuf, { Imm8, 0, 0} },
-{"aam", 0, 0xd40a, X, CpuNo64, NoSuf, { 0, 0, 0} },
-{"aam", 1, 0xd4, X, CpuNo64, NoSuf, { Imm8, 0, 0} },
-
-/* Conversion insns. */
-/* Intel naming */
-{"cbw", 0, 0x98, X, 0, NoSuf|Size16, { 0, 0, 0} },
-{"cdqe", 0, 0x98, X, Cpu64, NoSuf|Size64, { 0, 0, 0} },
-{"cwde", 0, 0x98, X, 0, NoSuf|Size32, { 0, 0, 0} },
-{"cwd", 0, 0x99, X, 0, NoSuf|Size16, { 0, 0, 0} },
-{"cdq", 0, 0x99, X, 0, NoSuf|Size32, { 0, 0, 0} },
-{"cqo", 0, 0x99, X, Cpu64, NoSuf|Size64, { 0, 0, 0} },
-/* AT&T naming */
-{"cbtw", 0, 0x98, X, 0, NoSuf|Size16, { 0, 0, 0} },
-{"cltq", 0, 0x98, X, Cpu64, NoSuf|Size64, { 0, 0, 0} },
-{"cwtl", 0, 0x98, X, 0, NoSuf|Size32, { 0, 0, 0} },
-{"cwtd", 0, 0x99, X, 0, NoSuf|Size16, { 0, 0, 0} },
-{"cltd", 0, 0x99, X, 0, NoSuf|Size32, { 0, 0, 0} },
-{"cqto", 0, 0x99, X, Cpu64, NoSuf|Size64, { 0, 0, 0} },
-
-/* Warning! the mul/imul (opcode 0xf6) must only have 1 operand! They are
- expanding 64-bit multiplies, and *cannot* be selected to accomplish
- 'imul %ebx, %eax' (opcode 0x0faf must be used in this case)
- These multiplies can only be selected with single operand forms. */
-{"mul", 1, 0xf6, 4, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-{"imul", 1, 0xf6, 5, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-{"imul", 2, 0x0faf, X, Cpu386, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"imul", 3, 0x6b, X, Cpu186, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, WordReg} },
-{"imul", 3, 0x69, X, Cpu186, wlq_Suf|Modrm, { Imm16|Imm32S|Imm32, WordReg|WordMem, WordReg} },
-/* imul with 2 operands mimics imul with 3 by putting the register in
- both i.rm.reg & i.rm.regmem fields. regKludge enables this
- transformation. */
-{"imul", 2, 0x6b, X, Cpu186, wlq_Suf|Modrm|regKludge,{ Imm8S, WordReg, 0} },
-{"imul", 2, 0x69, X, Cpu186, wlq_Suf|Modrm|regKludge,{ Imm16|Imm32S|Imm32, WordReg, 0} },
-
-{"div", 1, 0xf6, 6, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-{"div", 2, 0xf6, 6, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, Acc, 0} },
-{"idiv", 1, 0xf6, 7, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-{"idiv", 2, 0xf6, 7, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, Acc, 0} },
-
-{"rol", 2, 0xd0, 0, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} },
-{"rol", 2, 0xc0, 0, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} },
-{"rol", 2, 0xd2, 0, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} },
-{"rol", 1, 0xd0, 0, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-
-{"ror", 2, 0xd0, 1, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} },
-{"ror", 2, 0xc0, 1, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} },
-{"ror", 2, 0xd2, 1, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} },
-{"ror", 1, 0xd0, 1, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-
-{"rcl", 2, 0xd0, 2, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} },
-{"rcl", 2, 0xc0, 2, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} },
-{"rcl", 2, 0xd2, 2, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} },
-{"rcl", 1, 0xd0, 2, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-
-{"rcr", 2, 0xd0, 3, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} },
-{"rcr", 2, 0xc0, 3, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} },
-{"rcr", 2, 0xd2, 3, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} },
-{"rcr", 1, 0xd0, 3, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-
-{"sal", 2, 0xd0, 4, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} },
-{"sal", 2, 0xc0, 4, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} },
-{"sal", 2, 0xd2, 4, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} },
-{"sal", 1, 0xd0, 4, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-
-{"shl", 2, 0xd0, 4, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} },
-{"shl", 2, 0xc0, 4, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} },
-{"shl", 2, 0xd2, 4, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} },
-{"shl", 1, 0xd0, 4, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-
-{"shr", 2, 0xd0, 5, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} },
-{"shr", 2, 0xc0, 5, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} },
-{"shr", 2, 0xd2, 5, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} },
-{"shr", 1, 0xd0, 5, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-
-{"sar", 2, 0xd0, 7, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} },
-{"sar", 2, 0xc0, 7, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} },
-{"sar", 2, 0xd2, 7, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} },
-{"sar", 1, 0xd0, 7, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} },
-
-{"shld", 3, 0x0fa4, X, Cpu386, wlq_Suf|Modrm, { Imm8, WordReg, WordReg|WordMem} },
-{"shld", 3, 0x0fa5, X, Cpu386, wlq_Suf|Modrm, { ShiftCount, WordReg, WordReg|WordMem} },
-{"shld", 2, 0x0fa5, X, Cpu386, wlq_Suf|Modrm, { WordReg, WordReg|WordMem, 0} },
-
-{"shrd", 3, 0x0fac, X, Cpu386, wlq_Suf|Modrm, { Imm8, WordReg, WordReg|WordMem} },
-{"shrd", 3, 0x0fad, X, Cpu386, wlq_Suf|Modrm, { ShiftCount, WordReg, WordReg|WordMem} },
-{"shrd", 2, 0x0fad, X, Cpu386, wlq_Suf|Modrm, { WordReg, WordReg|WordMem, 0} },
-
-/* Control transfer instructions. */
-{"call", 1, 0xe8, X, CpuNo64, wl_Suf|JumpDword|DefaultSize, { Disp16|Disp32, 0, 0} },
-{"call", 1, 0xe8, X, Cpu64, wq_Suf|JumpDword|DefaultSize|NoRex64, { Disp16|Disp32, 0, 0} },
-{"call", 1, 0xff, 2, CpuNo64, wl_Suf|Modrm|DefaultSize, { WordReg|WordMem|JumpAbsolute, 0, 0} },
-{"call", 1, 0xff, 2, Cpu64, wq_Suf|Modrm|DefaultSize|NoRex64, { Reg16|Reg64|WordMem|LLongMem|JumpAbsolute, 0, 0} },
-/* Intel Syntax */
-{"call", 2, 0x9a, X, CpuNo64, wl_Suf|JumpInterSegment|DefaultSize, { Imm16, Imm16|Imm32, 0} },
-/* Intel Syntax */
-{"call", 1, 0xff, 3, 0, x_Suf|Modrm|DefaultSize, {WordMem|JumpAbsolute, 0, 0} },
-{"lcall", 2, 0x9a, X, CpuNo64, wl_Suf|JumpInterSegment|DefaultSize, {Imm16, Imm16|Imm32, 0} },
-{"lcall", 1, 0xff, 3, 0, wl_Suf|Modrm|DefaultSize, {WordMem|JumpAbsolute, 0, 0} },
-
#define JUMP_PC_RELATIVE 0xeb
-{"jmp", 1, 0xeb, X, 0, NoSuf|Jump, { Disp,0, 0} },
-{"jmp", 1, 0xff, 4, CpuNo64, wl_Suf|Modrm, { WordReg|WordMem|JumpAbsolute, 0, 0} },
-{"jmp", 1, 0xff, 4, Cpu64, wq_Suf|Modrm|NoRex64, { Reg16|Reg64|ShortMem|LLongMem|JumpAbsolute, 0, 0} },
-/* Intel Syntax. */
-{"jmp", 2, 0xea, X, CpuNo64,wl_Suf|JumpInterSegment, { Imm16, Imm16|Imm32, 0} },
-/* Intel Syntax. */
-{"jmp", 1, 0xff, 5, 0, x_Suf|Modrm, { WordMem|JumpAbsolute, 0, 0} },
-{"ljmp", 2, 0xea, X, CpuNo64, wl_Suf|JumpInterSegment, { Imm16, Imm16|Imm32, 0} },
-{"ljmp", 1, 0xff, 5, 0, wl_Suf|Modrm, { WordMem|JumpAbsolute, 0, 0} },
-
-{"ret", 0, 0xc3, X, CpuNo64,wl_Suf|DefaultSize, { 0, 0, 0} },
-{"ret", 1, 0xc2, X, CpuNo64,wl_Suf|DefaultSize, { Imm16, 0, 0} },
-{"ret", 0, 0xc3, X, Cpu64, wq_Suf|DefaultSize|NoRex64,{ 0, 0, 0} },
-{"ret", 1, 0xc2, X, Cpu64, wq_Suf|DefaultSize|NoRex64,{ Imm16, 0, 0} },
-{"lret", 0, 0xcb, X, 0, wlq_Suf|DefaultSize, { 0, 0, 0} },
-{"lret", 1, 0xca, X, 0, wlq_Suf|DefaultSize, { Imm16, 0, 0} },
-{"enter", 2, 0xc8, X, Cpu186|CpuNo64, wl_Suf|DefaultSize, { Imm16, Imm8, 0} },
-{"enter", 2, 0xc8, X, Cpu64, wq_Suf|DefaultSize|NoRex64, { Imm16, Imm8, 0} },
-{"leave", 0, 0xc9, X, Cpu186|CpuNo64, wl_Suf|DefaultSize, { 0, 0, 0} },
-{"leave", 0, 0xc9, X, Cpu64, wq_Suf|DefaultSize|NoRex64, { 0, 0, 0} },
-
-/* Conditional jumps. */
-{"jo", 1, 0x70, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jno", 1, 0x71, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jb", 1, 0x72, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jc", 1, 0x72, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jnae", 1, 0x72, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jnb", 1, 0x73, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jnc", 1, 0x73, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jae", 1, 0x73, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"je", 1, 0x74, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jz", 1, 0x74, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jne", 1, 0x75, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jnz", 1, 0x75, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jbe", 1, 0x76, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jna", 1, 0x76, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jnbe", 1, 0x77, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"ja", 1, 0x77, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"js", 1, 0x78, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jns", 1, 0x79, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jp", 1, 0x7a, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jpe", 1, 0x7a, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jnp", 1, 0x7b, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jpo", 1, 0x7b, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jl", 1, 0x7c, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jnge", 1, 0x7c, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jnl", 1, 0x7d, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jge", 1, 0x7d, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jle", 1, 0x7e, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jng", 1, 0x7e, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jnle", 1, 0x7f, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-{"jg", 1, 0x7f, X, 0, NoSuf|Jump, { Disp, 0, 0} },
-
-/* jcxz vs. jecxz is chosen on the basis of the address size prefix. */
-{"jcxz", 1, 0xe3, X, CpuNo64,NoSuf|JumpByte|Size16, { Disp, 0, 0} },
-{"jecxz", 1, 0xe3, X, CpuNo64,NoSuf|JumpByte|Size32, { Disp, 0, 0} },
-{"jecxz", 1, 0x67e3, X, Cpu64,NoSuf|JumpByte|Size32, { Disp, 0, 0} },
-{"jrcxz", 1, 0xe3, X, Cpu64, NoSuf|JumpByte|Size64|NoRex64, { Disp, 0, 0} },
-
-/* The loop instructions also use the address size prefix to select
- %cx rather than %ecx for the loop count, so the `w' form of these
- instructions emit an address size prefix rather than a data size
- prefix. */
-{"loop", 1, 0xe2, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} },
-{"loop", 1, 0xe2, X, Cpu64, lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} },
-{"loopz", 1, 0xe1, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} },
-{"loopz", 1, 0xe1, X, Cpu64, lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} },
-{"loope", 1, 0xe1, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} },
-{"loope", 1, 0xe1, X, Cpu64, lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} },
-{"loopnz", 1, 0xe0, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} },
-{"loopnz", 1, 0xe0, X, Cpu64, lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} },
-{"loopne", 1, 0xe0, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} },
-{"loopne", 1, 0xe0, X, Cpu64, lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} },
-
-/* Set byte on flag instructions. */
-{"seto", 1, 0x0f90, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setno", 1, 0x0f91, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setb", 1, 0x0f92, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setc", 1, 0x0f92, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setnae", 1, 0x0f92, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setnb", 1, 0x0f93, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setnc", 1, 0x0f93, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setae", 1, 0x0f93, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"sete", 1, 0x0f94, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setz", 1, 0x0f94, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setne", 1, 0x0f95, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setnz", 1, 0x0f95, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setbe", 1, 0x0f96, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setna", 1, 0x0f96, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setnbe", 1, 0x0f97, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"seta", 1, 0x0f97, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"sets", 1, 0x0f98, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setns", 1, 0x0f99, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setp", 1, 0x0f9a, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setpe", 1, 0x0f9a, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setnp", 1, 0x0f9b, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setpo", 1, 0x0f9b, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setl", 1, 0x0f9c, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setnge", 1, 0x0f9c, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setnl", 1, 0x0f9d, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setge", 1, 0x0f9d, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setle", 1, 0x0f9e, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setng", 1, 0x0f9e, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setnle", 1, 0x0f9f, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-{"setg", 1, 0x0f9f, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} },
-
-/* String manipulation. */
-{"cmps", 0, 0xa6, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} },
-{"cmps", 2, 0xa6, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, AnyMem, 0} },
-{"scmp", 0, 0xa6, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} },
-{"scmp", 2, 0xa6, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, AnyMem, 0} },
-{"ins", 0, 0x6c, X, Cpu186, bwl_Suf|W|IsString, { 0, 0, 0} },
-{"ins", 2, 0x6c, X, Cpu186, bwl_Suf|W|IsString, { InOutPortReg, AnyMem|EsSeg, 0} },
-{"outs", 0, 0x6e, X, Cpu186, bwl_Suf|W|IsString, { 0, 0, 0} },
-{"outs", 2, 0x6e, X, Cpu186, bwl_Suf|W|IsString, { AnyMem, InOutPortReg, 0} },
-{"lods", 0, 0xac, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} },
-{"lods", 1, 0xac, X, 0, bwlq_Suf|W|IsString, { AnyMem, 0, 0} },
-{"lods", 2, 0xac, X, 0, bwlq_Suf|W|IsString, { AnyMem, Acc, 0} },
-{"slod", 0, 0xac, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} },
-{"slod", 1, 0xac, X, 0, bwlq_Suf|W|IsString, { AnyMem, 0, 0} },
-{"slod", 2, 0xac, X, 0, bwlq_Suf|W|IsString, { AnyMem, Acc, 0} },
-{"movs", 0, 0xa4, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} },
-{"movs", 2, 0xa4, X, 0, bwlq_Suf|W|IsString, { AnyMem, AnyMem|EsSeg, 0} },
-{"smov", 0, 0xa4, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} },
-{"smov", 2, 0xa4, X, 0, bwlq_Suf|W|IsString, { AnyMem, AnyMem|EsSeg, 0} },
-{"scas", 0, 0xae, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} },
-{"scas", 1, 0xae, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, 0, 0} },
-{"scas", 2, 0xae, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, Acc, 0} },
-{"ssca", 0, 0xae, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} },
-{"ssca", 1, 0xae, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, 0, 0} },
-{"ssca", 2, 0xae, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, Acc, 0} },
-{"stos", 0, 0xaa, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} },
-{"stos", 1, 0xaa, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, 0, 0} },
-{"stos", 2, 0xaa, X, 0, bwlq_Suf|W|IsString, { Acc, AnyMem|EsSeg, 0} },
-{"ssto", 0, 0xaa, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} },
-{"ssto", 1, 0xaa, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, 0, 0} },
-{"ssto", 2, 0xaa, X, 0, bwlq_Suf|W|IsString, { Acc, AnyMem|EsSeg, 0} },
-{"xlat", 0, 0xd7, X, 0, b_Suf|IsString, { 0, 0, 0} },
-{"xlat", 1, 0xd7, X, 0, b_Suf|IsString, { AnyMem, 0, 0} },
-
-/* Bit manipulation. */
-{"bsf", 2, 0x0fbc, X, Cpu386, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"bsr", 2, 0x0fbd, X, Cpu386, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"bt", 2, 0x0fa3, X, Cpu386, wlq_Suf|Modrm, { WordReg, WordReg|WordMem, 0} },
-{"bt", 2, 0x0fba, 4, Cpu386, wlq_Suf|Modrm, { Imm8, WordReg|WordMem, 0} },
-{"btc", 2, 0x0fbb, X, Cpu386, wlq_Suf|Modrm, { WordReg, WordReg|WordMem, 0} },
-{"btc", 2, 0x0fba, 7, Cpu386, wlq_Suf|Modrm, { Imm8, WordReg|WordMem, 0} },
-{"btr", 2, 0x0fb3, X, Cpu386, wlq_Suf|Modrm, { WordReg, WordReg|WordMem, 0} },
-{"btr", 2, 0x0fba, 6, Cpu386, wlq_Suf|Modrm, { Imm8, WordReg|WordMem, 0} },
-{"bts", 2, 0x0fab, X, Cpu386, wlq_Suf|Modrm, { WordReg, WordReg|WordMem, 0} },
-{"bts", 2, 0x0fba, 5, Cpu386, wlq_Suf|Modrm, { Imm8, WordReg|WordMem, 0} },
-
-/* Interrupts & op. sys insns. */
-/* See gas/config/tc-i386.c for conversion of 'int $3' into the special
- int 3 insn. */
#define INT_OPCODE 0xcd
#define INT3_OPCODE 0xcc
-{"int", 1, 0xcd, X, 0, NoSuf, { Imm8, 0, 0} },
-{"int3", 0, 0xcc, X, 0, NoSuf, { 0, 0, 0} },
-{"into", 0, 0xce, X, CpuNo64, NoSuf, { 0, 0, 0} },
-{"iret", 0, 0xcf, X, 0, wlq_Suf|DefaultSize, { 0, 0, 0} },
-/* i386sl, i486sl, later 486, and Pentium. */
-{"rsm", 0, 0x0faa, X, Cpu386, NoSuf, { 0, 0, 0} },
-
-{"bound", 2, 0x62, X, Cpu186|CpuNo64, wl_Suf|Modrm, { WordReg, WordMem, 0} },
-
-{"hlt", 0, 0xf4, X, 0, NoSuf, { 0, 0, 0} },
-/* nop is actually 'xchgl %eax, %eax'. */
-{"nop", 0, 0x90, X, 0, NoSuf, { 0, 0, 0} },
-
-/* Protection control. */
-{"arpl", 2, 0x63, X, Cpu286|CpuNo64, w_Suf|Modrm|IgnoreSize,{ Reg16, Reg16|ShortMem, 0} },
-{"lar", 2, 0x0f02, X, Cpu286, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"lgdt", 1, 0x0f01, 2, Cpu286|CpuNo64, wl_Suf|Modrm, { WordMem, 0, 0} },
-{"lgdt", 1, 0x0f01, 2, Cpu64, q_Suf|Modrm|NoRex64, { LLongMem, 0, 0} },
-{"lidt", 1, 0x0f01, 3, Cpu286|CpuNo64, wl_Suf|Modrm, { WordMem, 0, 0} },
-{"lidt", 1, 0x0f01, 3, Cpu64, q_Suf|Modrm|NoRex64, { LLongMem, 0, 0} },
-{"lldt", 1, 0x0f00, 2, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} },
-{"lmsw", 1, 0x0f01, 6, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} },
-{"lsl", 2, 0x0f03, X, Cpu286, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"ltr", 1, 0x0f00, 3, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} },
-
-{"sgdt", 1, 0x0f01, 0, Cpu286|CpuNo64, wl_Suf|Modrm, { WordMem, 0, 0} },
-{"sgdt", 1, 0x0f01, 0, Cpu64, q_Suf|Modrm|NoRex64, { LLongMem, 0, 0} },
-{"sidt", 1, 0x0f01, 1, Cpu286|CpuNo64, wl_Suf|Modrm, { WordMem, 0, 0} },
-{"sidt", 1, 0x0f01, 1, Cpu64, q_Suf|Modrm|NoRex64, { LLongMem, 0, 0} },
-{"sldt", 1, 0x0f00, 0, Cpu286, wlq_Suf|Modrm, { WordReg|InvMem, 0, 0} },
-{"sldt", 1, 0x0f00, 0, Cpu286, w_Suf|Modrm|IgnoreSize,{ ShortMem, 0, 0} },
-{"smsw", 1, 0x0f01, 4, Cpu286, wlq_Suf|Modrm, { WordReg|InvMem, 0, 0} },
-{"smsw", 1, 0x0f01, 4, Cpu286, w_Suf|Modrm|IgnoreSize,{ ShortMem, 0, 0} },
-{"str", 1, 0x0f00, 1, Cpu286, wlq_Suf|Modrm, { WordReg|InvMem, 0, 0} },
-{"str", 1, 0x0f00, 1, Cpu286, w_Suf|Modrm|IgnoreSize,{ ShortMem, 0, 0} },
-
-{"verr", 1, 0x0f00, 4, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} },
-{"verw", 1, 0x0f00, 5, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} },
-
-/* Floating point instructions. */
-
-/* load */
-{"fld", 1, 0xd9c0, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-{"fld", 1, 0xd9, 0, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} },
-{"fld", 1, 0xd9c0, X, 0, l_FP|ShortForm|IgnoreSize|Ugh, { FloatReg, 0, 0} },
-/* Intel Syntax */
-{"fld", 1, 0xdb, 5, 0, x_FP|Modrm, { LLongMem, 0, 0} },
-{"fild", 1, 0xdf, 0, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} },
-{"fild", 1, 0xdf, 5, 0, q_FP|Modrm, { LLongMem, 0, 0} },
-{"fildll", 1, 0xdf, 5, 0, FP|Modrm, { LLongMem, 0, 0} },
-{"fldt", 1, 0xdb, 5, 0, FP|Modrm, { LLongMem, 0, 0} },
-{"fbld", 1, 0xdf, 4, 0, x_Suf|Modrm, { LLongMem, 0, 0} },
-
-/* store (no pop) */
-{"fst", 1, 0xddd0, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-{"fst", 1, 0xd9, 2, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} },
-{"fst", 1, 0xddd0, X, 0, l_FP|ShortForm|IgnoreSize|Ugh, { FloatReg, 0, 0} },
-{"fist", 1, 0xdf, 2, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} },
-
-/* store (with pop) */
-{"fstp", 1, 0xddd8, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-{"fstp", 1, 0xd9, 3, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} },
-{"fstp", 1, 0xddd8, X, 0, l_FP|ShortForm|IgnoreSize|Ugh, { FloatReg, 0, 0} },
-/* Intel Syntax */
-{"fstp", 1, 0xdb, 7, 0, x_FP|Modrm, { LLongMem, 0, 0} },
-{"fistp", 1, 0xdf, 3, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} },
-{"fistp", 1, 0xdf, 7, 0, q_FP|Modrm, { LLongMem, 0, 0} },
-{"fistpll",1, 0xdf, 7, 0, FP|Modrm, { LLongMem, 0, 0} },
-{"fstpt", 1, 0xdb, 7, 0, FP|Modrm, { LLongMem, 0, 0} },
-{"fbstp", 1, 0xdf, 6, 0, x_Suf|Modrm, { LLongMem, 0, 0} },
-
-/* exchange %st<n> with %st0 */
-{"fxch", 1, 0xd9c8, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-/* alias for fxch %st(1) */
-{"fxch", 0, 0xd9c9, X, 0, FP, { 0, 0, 0} },
-
-/* comparison (without pop) */
-{"fcom", 1, 0xd8d0, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-/* alias for fcom %st(1) */
-{"fcom", 0, 0xd8d1, X, 0, FP, { 0, 0, 0} },
-{"fcom", 1, 0xd8, 2, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} },
-{"fcom", 1, 0xd8d0, X, 0, l_FP|ShortForm|IgnoreSize|Ugh, { FloatReg, 0, 0} },
-{"ficom", 1, 0xde, 2, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} },
-
-/* comparison (with pop) */
-{"fcomp", 1, 0xd8d8, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-/* alias for fcomp %st(1) */
-{"fcomp", 0, 0xd8d9, X, 0, FP, { 0, 0, 0} },
-{"fcomp", 1, 0xd8, 3, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} },
-{"fcomp", 1, 0xd8d8, X, 0, l_FP|ShortForm|IgnoreSize|Ugh, { FloatReg, 0, 0} },
-{"ficomp", 1, 0xde, 3, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} },
-{"fcompp", 0, 0xded9, X, 0, FP, { 0, 0, 0} },
-
-/* unordered comparison (with pop) */
-{"fucom", 1, 0xdde0, X, Cpu286, FP|ShortForm, { FloatReg, 0, 0} },
-/* alias for fucom %st(1) */
-{"fucom", 0, 0xdde1, X, Cpu286, FP, { 0, 0, 0} },
-{"fucomp", 1, 0xdde8, X, Cpu286, FP|ShortForm, { FloatReg, 0, 0} },
-/* alias for fucomp %st(1) */
-{"fucomp", 0, 0xdde9, X, Cpu286, FP, { 0, 0, 0} },
-{"fucompp",0, 0xdae9, X, Cpu286, FP, { 0, 0, 0} },
-
-{"ftst", 0, 0xd9e4, X, 0, FP, { 0, 0, 0} },
-{"fxam", 0, 0xd9e5, X, 0, FP, { 0, 0, 0} },
-
-/* load constants into %st0 */
-{"fld1", 0, 0xd9e8, X, 0, FP, { 0, 0, 0} },
-{"fldl2t", 0, 0xd9e9, X, 0, FP, { 0, 0, 0} },
-{"fldl2e", 0, 0xd9ea, X, 0, FP, { 0, 0, 0} },
-{"fldpi", 0, 0xd9eb, X, 0, FP, { 0, 0, 0} },
-{"fldlg2", 0, 0xd9ec, X, 0, FP, { 0, 0, 0} },
-{"fldln2", 0, 0xd9ed, X, 0, FP, { 0, 0, 0} },
-{"fldz", 0, 0xd9ee, X, 0, FP, { 0, 0, 0} },
-
-/* Arithmetic. */
-
-/* add */
-{"fadd", 2, 0xd8c0, X, 0, FP|ShortForm|FloatD, { FloatReg, FloatAcc, 0} },
-/* alias for fadd %st(i), %st */
-{"fadd", 1, 0xd8c0, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-#if SYSV386_COMPAT
-/* alias for faddp */
-{"fadd", 0, 0xdec1, X, 0, FP|Ugh, { 0, 0, 0} },
-#endif
-{"fadd", 1, 0xd8, 0, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} },
-{"fiadd", 1, 0xde, 0, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} },
-
-{"faddp", 2, 0xdec0, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} },
-{"faddp", 1, 0xdec0, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-/* alias for faddp %st, %st(1) */
-{"faddp", 0, 0xdec1, X, 0, FP, { 0, 0, 0} },
-{"faddp", 2, 0xdec0, X, 0, FP|ShortForm|Ugh, { FloatReg, FloatAcc, 0} },
-
-/* subtract */
-{"fsub", 2, 0xd8e0, X, 0, FP|ShortForm|FloatDR, { FloatReg, FloatAcc, 0} },
-{"fsub", 1, 0xd8e0, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-#if SYSV386_COMPAT
-/* alias for fsubp */
-{"fsub", 0, 0xdee1, X, 0, FP|Ugh, { 0, 0, 0} },
-#endif
-{"fsub", 1, 0xd8, 4, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} },
-{"fisub", 1, 0xde, 4, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} },
-
-#if SYSV386_COMPAT
-{"fsubp", 2, 0xdee0, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} },
-{"fsubp", 1, 0xdee0, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-{"fsubp", 0, 0xdee1, X, 0, FP, { 0, 0, 0} },
-#if OLDGCC_COMPAT
-{"fsubp", 2, 0xdee0, X, 0, FP|ShortForm|Ugh, { FloatReg, FloatAcc, 0} },
-#endif
-#else
-{"fsubp", 2, 0xdee8, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} },
-{"fsubp", 1, 0xdee8, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-{"fsubp", 0, 0xdee9, X, 0, FP, { 0, 0, 0} },
-#endif
-
-/* subtract reverse */
-{"fsubr", 2, 0xd8e8, X, 0, FP|ShortForm|FloatDR, { FloatReg, FloatAcc, 0} },
-{"fsubr", 1, 0xd8e8, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-#if SYSV386_COMPAT
-/* alias for fsubrp */
-{"fsubr", 0, 0xdee9, X, 0, FP|Ugh, { 0, 0, 0} },
-#endif
-{"fsubr", 1, 0xd8, 5, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} },
-{"fisubr", 1, 0xde, 5, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} },
-
-#if SYSV386_COMPAT
-{"fsubrp", 2, 0xdee8, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} },
-{"fsubrp", 1, 0xdee8, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-{"fsubrp", 0, 0xdee9, X, 0, FP, { 0, 0, 0} },
-#if OLDGCC_COMPAT
-{"fsubrp", 2, 0xdee8, X, 0, FP|ShortForm|Ugh, { FloatReg, FloatAcc, 0} },
-#endif
-#else
-{"fsubrp", 2, 0xdee0, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} },
-{"fsubrp", 1, 0xdee0, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-{"fsubrp", 0, 0xdee1, X, 0, FP, { 0, 0, 0} },
-#endif
-
-/* multiply */
-{"fmul", 2, 0xd8c8, X, 0, FP|ShortForm|FloatD, { FloatReg, FloatAcc, 0} },
-{"fmul", 1, 0xd8c8, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-#if SYSV386_COMPAT
-/* alias for fmulp */
-{"fmul", 0, 0xdec9, X, 0, FP|Ugh, { 0, 0, 0} },
-#endif
-{"fmul", 1, 0xd8, 1, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} },
-{"fimul", 1, 0xde, 1, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} },
-
-{"fmulp", 2, 0xdec8, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} },
-{"fmulp", 1, 0xdec8, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-{"fmulp", 0, 0xdec9, X, 0, FP, { 0, 0, 0} },
-{"fmulp", 2, 0xdec8, X, 0, FP|ShortForm|Ugh, { FloatReg, FloatAcc, 0} },
-
-/* divide */
-{"fdiv", 2, 0xd8f0, X, 0, FP|ShortForm|FloatDR, { FloatReg, FloatAcc, 0} },
-{"fdiv", 1, 0xd8f0, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-#if SYSV386_COMPAT
-/* alias for fdivp */
-{"fdiv", 0, 0xdef1, X, 0, FP|Ugh, { 0, 0, 0} },
-#endif
-{"fdiv", 1, 0xd8, 6, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} },
-{"fidiv", 1, 0xde, 6, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} },
-
-#if SYSV386_COMPAT
-{"fdivp", 2, 0xdef0, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} },
-{"fdivp", 1, 0xdef0, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-{"fdivp", 0, 0xdef1, X, 0, FP, { 0, 0, 0} },
-#if OLDGCC_COMPAT
-{"fdivp", 2, 0xdef0, X, 0, FP|ShortForm|Ugh, { FloatReg, FloatAcc, 0} },
-#endif
-#else
-{"fdivp", 2, 0xdef8, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} },
-{"fdivp", 1, 0xdef8, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-{"fdivp", 0, 0xdef9, X, 0, FP, { 0, 0, 0} },
-#endif
-
-/* divide reverse */
-{"fdivr", 2, 0xd8f8, X, 0, FP|ShortForm|FloatDR, { FloatReg, FloatAcc, 0} },
-{"fdivr", 1, 0xd8f8, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-#if SYSV386_COMPAT
-/* alias for fdivrp */
-{"fdivr", 0, 0xdef9, X, 0, FP|Ugh, { 0, 0, 0} },
-#endif
-{"fdivr", 1, 0xd8, 7, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} },
-{"fidivr", 1, 0xde, 7, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} },
-
-#if SYSV386_COMPAT
-{"fdivrp", 2, 0xdef8, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} },
-{"fdivrp", 1, 0xdef8, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-{"fdivrp", 0, 0xdef9, X, 0, FP, { 0, 0, 0} },
-#if OLDGCC_COMPAT
-{"fdivrp", 2, 0xdef8, X, 0, FP|ShortForm|Ugh, { FloatReg, FloatAcc, 0} },
-#endif
-#else
-{"fdivrp", 2, 0xdef0, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} },
-{"fdivrp", 1, 0xdef0, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-{"fdivrp", 0, 0xdef1, X, 0, FP, { 0, 0, 0} },
-#endif
-
-{"f2xm1", 0, 0xd9f0, X, 0, FP, { 0, 0, 0} },
-{"fyl2x", 0, 0xd9f1, X, 0, FP, { 0, 0, 0} },
-{"fptan", 0, 0xd9f2, X, 0, FP, { 0, 0, 0} },
-{"fpatan", 0, 0xd9f3, X, 0, FP, { 0, 0, 0} },
-{"fxtract",0, 0xd9f4, X, 0, FP, { 0, 0, 0} },
-{"fprem1", 0, 0xd9f5, X, Cpu286, FP, { 0, 0, 0} },
-{"fdecstp",0, 0xd9f6, X, 0, FP, { 0, 0, 0} },
-{"fincstp",0, 0xd9f7, X, 0, FP, { 0, 0, 0} },
-{"fprem", 0, 0xd9f8, X, 0, FP, { 0, 0, 0} },
-{"fyl2xp1",0, 0xd9f9, X, 0, FP, { 0, 0, 0} },
-{"fsqrt", 0, 0xd9fa, X, 0, FP, { 0, 0, 0} },
-{"fsincos",0, 0xd9fb, X, Cpu286, FP, { 0, 0, 0} },
-{"frndint",0, 0xd9fc, X, 0, FP, { 0, 0, 0} },
-{"fscale", 0, 0xd9fd, X, 0, FP, { 0, 0, 0} },
-{"fsin", 0, 0xd9fe, X, Cpu286, FP, { 0, 0, 0} },
-{"fcos", 0, 0xd9ff, X, Cpu286, FP, { 0, 0, 0} },
-{"fchs", 0, 0xd9e0, X, 0, FP, { 0, 0, 0} },
-{"fabs", 0, 0xd9e1, X, 0, FP, { 0, 0, 0} },
-
-/* processor control */
-{"fninit", 0, 0xdbe3, X, 0, FP, { 0, 0, 0} },
-{"finit", 0, 0xdbe3, X, 0, FP|FWait, { 0, 0, 0} },
-{"fldcw", 1, 0xd9, 5, 0, w_Suf|FloatMF|Modrm, { ShortMem, 0, 0} },
-{"fnstcw", 1, 0xd9, 7, 0, w_Suf|FloatMF|Modrm, { ShortMem, 0, 0} },
-{"fstcw", 1, 0xd9, 7, 0, w_Suf|FloatMF|FWait|Modrm, { ShortMem, 0, 0} },
-/* XXX should reject %al, %eax, and %rax */
-{"fnstsw", 1, 0xdfe0, X, 0, FP|IgnoreSize, { Acc, 0, 0} },
-{"fnstsw", 1, 0xdd, 7, 0, w_Suf|FloatMF|Modrm, { ShortMem, 0, 0} },
-{"fnstsw", 0, 0xdfe0, X, 0, FP, { 0, 0, 0} },
-/* XXX should reject %al, %eax, and %rax */
-{"fstsw", 1, 0xdfe0, X, 0, FP|FWait|IgnoreSize, { Acc, 0, 0} },
-{"fstsw", 1, 0xdd, 7, 0, w_Suf|FloatMF|FWait|Modrm, { ShortMem, 0, 0} },
-{"fstsw", 0, 0xdfe0, X, 0, FP|FWait, { 0, 0, 0} },
-{"fnclex", 0, 0xdbe2, X, 0, FP, { 0, 0, 0} },
-{"fclex", 0, 0xdbe2, X, 0, FP|FWait, { 0, 0, 0} },
-/* Short forms of fldenv, fstenv use data size prefix. */
-{"fnstenv",1, 0xd9, 6, 0, sl_Suf|Modrm|DefaultSize, { LLongMem, 0, 0} },
-{"fstenv", 1, 0xd9, 6, 0, sl_Suf|FWait|Modrm|DefaultSize, { LLongMem, 0, 0} },
-{"fldenv", 1, 0xd9, 4, 0, sl_Suf|Modrm|DefaultSize, { LLongMem, 0, 0} },
-{"fnsave", 1, 0xdd, 6, 0, sl_Suf|Modrm|DefaultSize, { LLongMem, 0, 0} },
-{"fsave", 1, 0xdd, 6, 0, sl_Suf|FWait|Modrm|DefaultSize, { LLongMem, 0, 0} },
-{"frstor", 1, 0xdd, 4, 0, sl_Suf|Modrm|DefaultSize, { LLongMem, 0, 0} },
-
-{"ffree", 1, 0xddc0, X, 0, FP|ShortForm, { FloatReg, 0, 0} },
-/* P6:free st(i), pop st */
-{"ffreep", 1, 0xdfc0, X, Cpu686, FP|ShortForm, { FloatReg, 0, 0} },
-{"fnop", 0, 0xd9d0, X, 0, FP, { 0, 0, 0} },
+/* The opcode for the fwait instruction, which disassembler treats as a
+ prefix when it can. */
#define FWAIT_OPCODE 0x9b
-{"fwait", 0, 0x9b, X, 0, FP, { 0, 0, 0} },
-
-/* Opcode prefixes; we allow them as separate insns too. */
-
#define ADDR_PREFIX_OPCODE 0x67
-{"addr16", 0, 0x67, X, Cpu386|CpuNo64, NoSuf|IsPrefix|Size16|IgnoreSize, { 0, 0, 0} },
-{"addr32", 0, 0x67, X, Cpu386,NoSuf|IsPrefix|Size32|IgnoreSize, { 0, 0, 0} },
-{"aword", 0, 0x67, X, Cpu386|CpuNo64,NoSuf|IsPrefix|Size16|IgnoreSize, { 0, 0, 0} },
-{"adword", 0, 0x67, X, Cpu386,NoSuf|IsPrefix|Size32|IgnoreSize, { 0, 0, 0} },
#define DATA_PREFIX_OPCODE 0x66
-{"data16", 0, 0x66, X, Cpu386,NoSuf|IsPrefix|Size16|IgnoreSize, { 0, 0, 0} },
-{"data32", 0, 0x66, X, Cpu386|CpuNo64,NoSuf|IsPrefix|Size32|IgnoreSize, { 0, 0, 0} },
-{"word", 0, 0x66, X, Cpu386,NoSuf|IsPrefix|Size16|IgnoreSize, { 0, 0, 0} },
-{"dword", 0, 0x66, X, Cpu386|CpuNo64,NoSuf|IsPrefix|Size32|IgnoreSize, { 0, 0, 0} },
#define LOCK_PREFIX_OPCODE 0xf0
-{"lock", 0, 0xf0, X, 0, NoSuf|IsPrefix, { 0, 0, 0} },
-{"wait", 0, 0x9b, X, 0, NoSuf|IsPrefix, { 0, 0, 0} },
#define CS_PREFIX_OPCODE 0x2e
-{"cs", 0, 0x2e, X, 0, NoSuf|IsPrefix, { 0, 0, 0} },
#define DS_PREFIX_OPCODE 0x3e
-{"ds", 0, 0x3e, X, 0, NoSuf|IsPrefix, { 0, 0, 0} },
#define ES_PREFIX_OPCODE 0x26
-{"es", 0, 0x26, X, CpuNo64, NoSuf|IsPrefix, { 0, 0, 0} },
#define FS_PREFIX_OPCODE 0x64
-{"fs", 0, 0x64, X, Cpu386, NoSuf|IsPrefix, { 0, 0, 0} },
#define GS_PREFIX_OPCODE 0x65
-{"gs", 0, 0x65, X, Cpu386, NoSuf|IsPrefix, { 0, 0, 0} },
#define SS_PREFIX_OPCODE 0x36
-{"ss", 0, 0x36, X, CpuNo64, NoSuf|IsPrefix, { 0, 0, 0} },
#define REPNE_PREFIX_OPCODE 0xf2
#define REPE_PREFIX_OPCODE 0xf3
-{"rep", 0, 0xf3, X, 0, NoSuf|IsPrefix, { 0, 0, 0} },
-{"repe", 0, 0xf3, X, 0, NoSuf|IsPrefix, { 0, 0, 0} },
-{"repz", 0, 0xf3, X, 0, NoSuf|IsPrefix, { 0, 0, 0} },
-{"repne", 0, 0xf2, X, 0, NoSuf|IsPrefix, { 0, 0, 0} },
-{"repnz", 0, 0xf2, X, 0, NoSuf|IsPrefix, { 0, 0, 0} },
-{"ht", 0, 0x3e, X, 0, NoSuf|IsPrefix, { 0, 0, 0} },
-{"hnt", 0, 0x2e, X, 0, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rex", 0, 0x40, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rexz", 0, 0x41, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rexy", 0, 0x42, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rexyz", 0, 0x43, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rexx", 0, 0x44, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rexxz", 0, 0x45, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rexxy", 0, 0x46, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rexxyz", 0, 0x47, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rex64", 0, 0x48, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rex64z", 0, 0x49, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rex64y", 0, 0x4a, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rex64yz",0, 0x4b, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rex64x", 0, 0x4c, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rex64xz",0, 0x4d, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rex64xy",0, 0x4e, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-{"rex64xyz",0, 0x4f, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} },
-
-/* 486 extensions. */
-
-{"bswap", 1, 0x0fc8, X, Cpu486, lq_Suf|ShortForm, { Reg32|Reg64, 0, 0 } },
-{"xadd", 2, 0x0fc0, X, Cpu486, bwlq_Suf|W|Modrm, { Reg, Reg|AnyMem, 0 } },
-{"cmpxchg", 2, 0x0fb0, X, Cpu486, bwlq_Suf|W|Modrm, { Reg, Reg|AnyMem, 0 } },
-{"invd", 0, 0x0f08, X, Cpu486, NoSuf, { 0, 0, 0} },
-{"wbinvd", 0, 0x0f09, X, Cpu486, NoSuf, { 0, 0, 0} },
-{"invlpg", 1, 0x0f01, 7, Cpu486, NoSuf|Modrm|IgnoreSize, { AnyMem, 0, 0} },
-
-/* 586 and late 486 extensions. */
-{"cpuid", 0, 0x0fa2, X, Cpu486, NoSuf, { 0, 0, 0} },
-
-/* Pentium extensions. */
-{"wrmsr", 0, 0x0f30, X, Cpu586, NoSuf, { 0, 0, 0} },
-{"rdtsc", 0, 0x0f31, X, Cpu586, NoSuf, { 0, 0, 0} },
-{"rdmsr", 0, 0x0f32, X, Cpu586, NoSuf, { 0, 0, 0} },
-{"cmpxchg8b",1,0x0fc7, 1, Cpu586, q_Suf|Modrm, { LLongMem, 0, 0} },
-
-/* Pentium II/Pentium Pro extensions. */
-{"sysenter",0, 0x0f34, X, Cpu686, NoSuf, { 0, 0, 0} },
-{"sysexit", 0, 0x0f35, X, Cpu686, NoSuf, { 0, 0, 0} },
-{"fxsave", 1, 0x0fae, 0, Cpu686, q_Suf|Modrm, { LLongMem, 0, 0} },
-{"fxrstor", 1, 0x0fae, 1, Cpu686, q_Suf|Modrm, { LLongMem, 0, 0} },
-{"rdpmc", 0, 0x0f33, X, Cpu686, NoSuf, { 0, 0, 0} },
-/* official undefined instr. */
-{"ud2", 0, 0x0f0b, X, Cpu686, NoSuf, { 0, 0, 0} },
-/* alias for ud2 */
-{"ud2a", 0, 0x0f0b, X, Cpu686, NoSuf, { 0, 0, 0} },
-/* 2nd. official undefined instr. */
-{"ud2b", 0, 0x0fb9, X, Cpu686, NoSuf, { 0, 0, 0} },
-
-{"cmovo", 2, 0x0f40, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovno", 2, 0x0f41, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovb", 2, 0x0f42, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovc", 2, 0x0f42, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovnae", 2, 0x0f42, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovae", 2, 0x0f43, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovnc", 2, 0x0f43, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovnb", 2, 0x0f43, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmove", 2, 0x0f44, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovz", 2, 0x0f44, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovne", 2, 0x0f45, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovnz", 2, 0x0f45, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovbe", 2, 0x0f46, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovna", 2, 0x0f46, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmova", 2, 0x0f47, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovnbe", 2, 0x0f47, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovs", 2, 0x0f48, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovns", 2, 0x0f49, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovp", 2, 0x0f4a, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovnp", 2, 0x0f4b, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovl", 2, 0x0f4c, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovnge", 2, 0x0f4c, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovge", 2, 0x0f4d, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovnl", 2, 0x0f4d, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovle", 2, 0x0f4e, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovng", 2, 0x0f4e, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovg", 2, 0x0f4f, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-{"cmovnle", 2, 0x0f4f, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} },
-
-{"fcmovb", 2, 0xdac0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovnae",2, 0xdac0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmove", 2, 0xdac8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovbe", 2, 0xdad0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovna", 2, 0xdad0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovu", 2, 0xdad8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovae", 2, 0xdbc0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovnb", 2, 0xdbc0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovne", 2, 0xdbc8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmova", 2, 0xdbd0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovnbe",2, 0xdbd0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovnu", 2, 0xdbd8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-
-{"fcomi", 2, 0xdbf0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcomi", 0, 0xdbf1, X, Cpu686, FP|ShortForm, { 0, 0, 0} },
-{"fcomi", 1, 0xdbf0, X, Cpu686, FP|ShortForm, { FloatReg, 0, 0} },
-{"fucomi", 2, 0xdbe8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fucomi", 0, 0xdbe9, X, Cpu686, FP|ShortForm, { 0, 0, 0} },
-{"fucomi", 1, 0xdbe8, X, Cpu686, FP|ShortForm, { FloatReg, 0, 0} },
-{"fcomip", 2, 0xdff0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcompi", 2, 0xdff0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcompi", 0, 0xdff1, X, Cpu686, FP|ShortForm, { 0, 0, 0} },
-{"fcompi", 1, 0xdff0, X, Cpu686, FP|ShortForm, { FloatReg, 0, 0} },
-{"fucomip", 2, 0xdfe8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fucompi", 2, 0xdfe8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} },
-{"fucompi", 0, 0xdfe9, X, Cpu686, FP|ShortForm, { 0, 0, 0} },
-{"fucompi", 1, 0xdfe8, X, Cpu686, FP|ShortForm, { FloatReg, 0, 0} },
-
-/* Pentium4 extensions. */
-
-{"movnti", 2, 0x0fc3, X, CpuP4, wlq_Suf|Modrm, { WordReg, WordMem, 0 } },
-{"clflush", 1, 0x0fae, 7, CpuP4, NoSuf|Modrm|IgnoreSize, { ByteMem, 0, 0 } },
-{"lfence", 0, 0x0fae, 0xe8, CpuP4, NoSuf|ImmExt, { 0, 0, 0 } },
-{"mfence", 0, 0x0fae, 0xf0, CpuP4, NoSuf|ImmExt, { 0, 0, 0 } },
-{"pause", 0, 0xf390, X, CpuP4, NoSuf, { 0, 0, 0 } },
-
-/* MMX/SSE2 instructions. */
-
-{"emms", 0, 0x0f77, X, CpuMMX, NoSuf, { 0, 0, 0 } },
-/* These really shouldn't allow for Reg64 (movq is the right mnemonic for
- copying between Reg64/Mem64 and RegXMM/RegMMX, as is mandated by Intel's
- spec). AMD's spec, having been in existence for much longer, failed to
- recognize that and specified movd for 32- and 64-bit operations. */
-{"movd", 2, 0x0f6e, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { Reg32|Reg64|LongMem, RegMMX, 0 } },
-{"movd", 2, 0x0f7e, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX, Reg32|Reg64|LongMem, 0 } },
-{"movd", 2, 0x660f6e,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Reg32|Reg64|LongMem, RegXMM, 0 } },
-{"movd", 2, 0x660f7e,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM, Reg32|Reg64|LongMem, 0 } },
-/* In the 64bit mode the short form mov immediate is redefined to have
- 64bit displacement value. */
-{"movq", 2, 0x0f6f, X, CpuMMX, NoSuf|IgnoreSize|Modrm|NoRex64, { RegMMX|LLongMem, RegMMX, 0 } },
-{"movq", 2, 0x0f7f, X, CpuMMX, NoSuf|IgnoreSize|Modrm|NoRex64, { RegMMX, RegMMX|LLongMem, 0 } },
-{"movq", 2, 0xf30f7e,X,CpuSSE2,NoSuf|IgnoreSize|Modrm|NoRex64, { RegXMM|LLongMem, RegXMM, 0 } },
-{"movq", 2, 0x660fd6,X,CpuSSE2,NoSuf|IgnoreSize|Modrm|NoRex64, { RegXMM, RegXMM|LLongMem, 0 } },
-{"movq", 2, 0x0f6e, X, Cpu64, NoSuf|IgnoreSize|Modrm, { Reg64|LLongMem, RegMMX, 0 } },
-{"movq", 2, 0x0f7e, X, Cpu64, NoSuf|IgnoreSize|Modrm, { RegMMX, Reg64|LLongMem, 0 } },
-{"movq", 2, 0x660f6e,X,Cpu64, NoSuf|IgnoreSize|Modrm, { Reg64|LLongMem, RegXMM, 0 } },
-{"movq", 2, 0x660f7e,X,Cpu64, NoSuf|IgnoreSize|Modrm, { RegXMM, Reg64|LLongMem, 0 } },
-/* We put the 64bit displacement first and we only mark constants
- larger than 32bit as Disp64. */
-{"movq", 2, 0xa0, X, Cpu64, NoSuf|D|W|Size64, { Disp64, Acc, 0 } },
-{"movq", 2, 0x88, X, Cpu64, NoSuf|D|W|Modrm|Size64,{ Reg64, Reg64|AnyMem, 0 } },
-{"movq", 2, 0xc6, 0, Cpu64, NoSuf|W|Modrm|Size64, { Imm32S, Reg64|WordMem, 0 } },
-{"movq", 2, 0xb0, X, Cpu64, NoSuf|W|ShortForm|Size64,{ Imm64, Reg64, 0 } },
-/* The segment register moves accept Reg64 so that a segment register
- can be copied to a 64 bit register, and vice versa. */
-{"movq", 2, 0x8c, X, Cpu64, NoSuf|Modrm|Size64, { SReg2|SReg3, Reg64|InvMem, 0 } },
-{"movq", 2, 0x8e, X, Cpu64, NoSuf|Modrm|Size64, { Reg64, SReg2|SReg3, 0 } },
-/* Move to/from control debug registers. In the 16 or 32bit modes they are 32bit. In the 64bit
- mode they are 64bit.*/
-{"movq", 2, 0x0f20, X, Cpu64, NoSuf|D|Modrm|IgnoreSize|NoRex64|Size64,{ Control, Reg64|InvMem, 0} },
-{"movq", 2, 0x0f21, X, Cpu64, NoSuf|D|Modrm|IgnoreSize|NoRex64|Size64,{ Debug, Reg64|InvMem, 0} },
-/* Real MMX instructions. */
-{"packssdw", 2, 0x0f6b, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"packssdw", 2, 0x660f6b,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"packsswb", 2, 0x0f63, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"packsswb", 2, 0x660f63,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"packuswb", 2, 0x0f67, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"packuswb", 2, 0x660f67,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"paddb", 2, 0x0ffc, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"paddb", 2, 0x660ffc,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"paddw", 2, 0x0ffd, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"paddw", 2, 0x660ffd,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"paddd", 2, 0x0ffe, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"paddd", 2, 0x660ffe,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"paddq", 2, 0x0fd4, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } },
-{"paddq", 2, 0x660fd4,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"paddsb", 2, 0x0fec, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"paddsb", 2, 0x660fec,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"paddsw", 2, 0x0fed, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"paddsw", 2, 0x660fed,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"paddusb", 2, 0x0fdc, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"paddusb", 2, 0x660fdc,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"paddusw", 2, 0x0fdd, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"paddusw", 2, 0x660fdd,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pand", 2, 0x0fdb, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pand", 2, 0x660fdb,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pandn", 2, 0x0fdf, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pandn", 2, 0x660fdf,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pcmpeqb", 2, 0x0f74, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pcmpeqb", 2, 0x660f74,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pcmpeqw", 2, 0x0f75, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pcmpeqw", 2, 0x660f75,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pcmpeqd", 2, 0x0f76, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pcmpeqd", 2, 0x660f76,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pcmpgtb", 2, 0x0f64, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pcmpgtb", 2, 0x660f64,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pcmpgtw", 2, 0x0f65, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pcmpgtw", 2, 0x660f65,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pcmpgtd", 2, 0x0f66, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pcmpgtd", 2, 0x660f66,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pmaddwd", 2, 0x0ff5, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pmaddwd", 2, 0x660ff5,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pmulhw", 2, 0x0fe5, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pmulhw", 2, 0x660fe5,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pmullw", 2, 0x0fd5, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pmullw", 2, 0x660fd5,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"por", 2, 0x0feb, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"por", 2, 0x660feb,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psllw", 2, 0x0ff1, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psllw", 2, 0x660ff1,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psllw", 2, 0x0f71, 6, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } },
-{"psllw", 2, 0x660f71,6,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } },
-{"pslld", 2, 0x0ff2, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pslld", 2, 0x660ff2,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pslld", 2, 0x0f72, 6, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } },
-{"pslld", 2, 0x660f72,6,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } },
-{"psllq", 2, 0x0ff3, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psllq", 2, 0x660ff3,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psllq", 2, 0x0f73, 6, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } },
-{"psllq", 2, 0x660f73,6,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } },
-{"psraw", 2, 0x0fe1, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psraw", 2, 0x660fe1,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psraw", 2, 0x0f71, 4, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } },
-{"psraw", 2, 0x660f71,4,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } },
-{"psrad", 2, 0x0fe2, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psrad", 2, 0x660fe2,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psrad", 2, 0x0f72, 4, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } },
-{"psrad", 2, 0x660f72,4,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } },
-{"psrlw", 2, 0x0fd1, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psrlw", 2, 0x660fd1,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psrlw", 2, 0x0f71, 2, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } },
-{"psrlw", 2, 0x660f71,2,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } },
-{"psrld", 2, 0x0fd2, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psrld", 2, 0x660fd2,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psrld", 2, 0x0f72, 2, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } },
-{"psrld", 2, 0x660f72,2,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } },
-{"psrlq", 2, 0x0fd3, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psrlq", 2, 0x660fd3,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psrlq", 2, 0x0f73, 2, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } },
-{"psrlq", 2, 0x660f73,2,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } },
-{"psubb", 2, 0x0ff8, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psubb", 2, 0x660ff8,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psubw", 2, 0x0ff9, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psubw", 2, 0x660ff9,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psubd", 2, 0x0ffa, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psubd", 2, 0x660ffa,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psubq", 2, 0x0ffb, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } },
-{"psubq", 2, 0x660ffb,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psubsb", 2, 0x0fe8, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psubsb", 2, 0x660fe8,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psubsw", 2, 0x0fe9, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psubsw", 2, 0x660fe9,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psubusb", 2, 0x0fd8, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psubusb", 2, 0x660fd8,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psubusw", 2, 0x0fd9, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psubusw", 2, 0x660fd9,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"punpckhbw",2, 0x0f68, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"punpckhbw",2, 0x660f68,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"punpckhwd",2, 0x0f69, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"punpckhwd",2, 0x660f69,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"punpckhdq",2, 0x0f6a, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"punpckhdq",2, 0x660f6a,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"punpcklbw",2, 0x0f60, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"punpcklbw",2, 0x660f60,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"punpcklwd",2, 0x0f61, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"punpcklwd",2, 0x660f61,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"punpckldq",2, 0x0f62, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"punpckldq",2, 0x660f62,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pxor", 2, 0x0fef, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pxor", 2, 0x660fef,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-
-/* PIII Katmai New Instructions / SIMD instructions. */
-
-{"addps", 2, 0x0f58, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"addss", 2, 0xf30f58, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"andnps", 2, 0x0f55, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"andps", 2, 0x0f54, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"cmpeqps", 2, 0x0fc2, 0, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpeqss", 2, 0xf30fc2, 0, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } },
-{"cmpleps", 2, 0x0fc2, 2, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpless", 2, 0xf30fc2, 2, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } },
-{"cmpltps", 2, 0x0fc2, 1, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpltss", 2, 0xf30fc2, 1, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } },
-{"cmpneqps", 2, 0x0fc2, 4, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpneqss", 2, 0xf30fc2, 4, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } },
-{"cmpnleps", 2, 0x0fc2, 6, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpnless", 2, 0xf30fc2, 6, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } },
-{"cmpnltps", 2, 0x0fc2, 5, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpnltss", 2, 0xf30fc2, 5, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } },
-{"cmpordps", 2, 0x0fc2, 7, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpordss", 2, 0xf30fc2, 7, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } },
-{"cmpunordps",2, 0x0fc2, 3, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpunordss",2, 0xf30fc2, 3, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } },
-{"cmpps", 3, 0x0fc2, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } },
-{"cmpss", 3, 0xf30fc2, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|WordMem, RegXMM } },
-{"comiss", 2, 0x0f2f, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"cvtpi2ps", 2, 0x0f2a, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegXMM, 0 } },
-{"cvtps2pi", 2, 0x0f2d, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegMMX, 0 } },
-{"cvtsi2ss", 2, 0xf30f2a, X, CpuSSE, lq_Suf|IgnoreSize|Modrm,{ Reg32|Reg64|WordMem|LLongMem, RegXMM, 0 } },
-{"cvtss2si", 2, 0xf30f2d, X, CpuSSE, lq_Suf|IgnoreSize|Modrm,{ RegXMM|WordMem, Reg32|Reg64, 0 } },
-{"cvttps2pi", 2, 0x0f2c, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegMMX, 0 } },
-{"cvttss2si", 2, 0xf30f2c, X, CpuSSE, lq_Suf|IgnoreSize|Modrm, { RegXMM|WordMem, Reg32|Reg64, 0 } },
-{"divps", 2, 0x0f5e, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"divss", 2, 0xf30f5e, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"ldmxcsr", 1, 0x0fae, 2, CpuSSE, NoSuf|IgnoreSize|Modrm, { WordMem, 0, 0 } },
-{"maskmovq", 2, 0x0ff7, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|InvMem, RegMMX, 0 } },
-{"maxps", 2, 0x0f5f, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"maxss", 2, 0xf30f5f, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"minps", 2, 0x0f5d, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"minss", 2, 0xf30f5d, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"movaps", 2, 0x0f28, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"movaps", 2, 0x0f29, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LLongMem, 0 } },
-{"movhlps", 2, 0x0f12, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|InvMem, RegXMM, 0 } },
-{"movhps", 2, 0x0f16, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { LLongMem, RegXMM, 0 } },
-{"movhps", 2, 0x0f17, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } },
-{"movlhps", 2, 0x0f16, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|InvMem, RegXMM, 0 } },
-{"movlps", 2, 0x0f12, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { LLongMem, RegXMM, 0 } },
-{"movlps", 2, 0x0f13, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } },
-{"movmskps", 2, 0x0f50, X, CpuSSE, lq_Suf|IgnoreSize|Modrm, { RegXMM|InvMem, Reg32|Reg64, 0 } },
-{"movntps", 2, 0x0f2b, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } },
-{"movntq", 2, 0x0fe7, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX, LLongMem, 0 } },
-{"movntdq", 2, 0x660fe7, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } },
-{"movss", 2, 0xf30f10, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"movss", 2, 0xf30f11, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|WordMem, 0 } },
-{"movups", 2, 0x0f10, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"movups", 2, 0x0f11, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LLongMem, 0 } },
-{"mulps", 2, 0x0f59, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"mulss", 2, 0xf30f59, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"orps", 2, 0x0f56, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pavgb", 2, 0x0fe0, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } },
-{"pavgb", 2, 0x660fe0, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pavgw", 2, 0x0fe3, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } },
-{"pavgw", 2, 0x660fe3, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pextrw", 3, 0x0fc5, X, CpuMMX2,lq_Suf|IgnoreSize|Modrm, { Imm8, RegMMX|InvMem, Reg32|Reg64 } },
-{"pextrw", 3, 0x660fc5, X, CpuSSE2,lq_Suf|IgnoreSize|Modrm, { Imm8, RegXMM|InvMem, Reg32|Reg64 } },
-{"pinsrw", 3, 0x0fc4, X, CpuMMX2,lq_Suf|IgnoreSize|Modrm, { Imm8, Reg32|Reg64|ShortMem, RegMMX } },
-{"pinsrw", 3, 0x660fc4, X, CpuSSE2,lq_Suf|IgnoreSize|Modrm, { Imm8, Reg32|Reg64|ShortMem, RegXMM } },
-{"pmaxsw", 2, 0x0fee, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } },
-{"pmaxsw", 2, 0x660fee, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pmaxub", 2, 0x0fde, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } },
-{"pmaxub", 2, 0x660fde, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pminsw", 2, 0x0fea, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } },
-{"pminsw", 2, 0x660fea, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pminub", 2, 0x0fda, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } },
-{"pminub", 2, 0x660fda, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pmovmskb", 2, 0x0fd7, X, CpuMMX2,lq_Suf|IgnoreSize|Modrm, { RegMMX|InvMem, Reg32|Reg64, 0 } },
-{"pmovmskb", 2, 0x660fd7, X, CpuSSE2,lq_Suf|IgnoreSize|Modrm, { RegXMM|InvMem, Reg32|Reg64, 0 } },
-{"pmulhuw", 2, 0x0fe4, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } },
-{"pmulhuw", 2, 0x660fe4, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"prefetchnta", 1, 0x0f18, 0, CpuMMX2,NoSuf|IgnoreSize|Modrm, { LLongMem, 0, 0 } },
-{"prefetcht0", 1, 0x0f18, 1, CpuMMX2,NoSuf|IgnoreSize|Modrm, { LLongMem, 0, 0 } },
-{"prefetcht1", 1, 0x0f18, 2, CpuMMX2,NoSuf|IgnoreSize|Modrm, { LLongMem, 0, 0 } },
-{"prefetcht2", 1, 0x0f18, 3, CpuMMX2,NoSuf|IgnoreSize|Modrm, { LLongMem, 0, 0 } },
-{"psadbw", 2, 0x0ff6, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } },
-{"psadbw", 2, 0x660ff6, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pshufw", 3, 0x0f70, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX|LLongMem, RegMMX } },
-{"rcpps", 2, 0x0f53, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"rcpss", 2, 0xf30f53, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"rsqrtps", 2, 0x0f52, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"rsqrtss", 2, 0xf30f52, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"sfence", 0, 0x0fae, 0xf8, CpuMMX2,NoSuf|IgnoreSize|ImmExt, { 0, 0, 0 } },
-{"shufps", 3, 0x0fc6, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } },
-{"sqrtps", 2, 0x0f51, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"sqrtss", 2, 0xf30f51, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"stmxcsr", 1, 0x0fae, 3, CpuSSE, NoSuf|IgnoreSize|Modrm, { WordMem, 0, 0 } },
-{"subps", 2, 0x0f5c, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"subss", 2, 0xf30f5c, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"ucomiss", 2, 0x0f2e, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"unpckhps", 2, 0x0f15, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"unpcklps", 2, 0x0f14, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"xorps", 2, 0x0f57, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-
-/* SSE-2 instructions. */
-
-{"addpd", 2, 0x660f58, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"addsd", 2, 0xf20f58, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } },
-{"andnpd", 2, 0x660f55, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"andpd", 2, 0x660f54, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } },
-{"cmpeqpd", 2, 0x660fc2, 0, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpeqsd", 2, 0xf20fc2, 0, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
-{"cmplepd", 2, 0x660fc2, 2, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
-{"cmplesd", 2, 0xf20fc2, 2, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
-{"cmpltpd", 2, 0x660fc2, 1, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpltsd", 2, 0xf20fc2, 1, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
-{"cmpneqpd", 2, 0x660fc2, 4, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpneqsd", 2, 0xf20fc2, 4, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
-{"cmpnlepd", 2, 0x660fc2, 6, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpnlesd", 2, 0xf20fc2, 6, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
-{"cmpnltpd", 2, 0x660fc2, 5, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpnltsd", 2, 0xf20fc2, 5, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
-{"cmpordpd", 2, 0x660fc2, 7, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpordsd", 2, 0xf20fc2, 7, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
-{"cmpunordpd",2, 0x660fc2, 3, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpunordsd",2, 0xf20fc2, 3, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
-{"cmppd", 3, 0x660fc2, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } },
-/* Intel mode string compare. */
-{"cmpsd", 0, 0xa7, X, 0, NoSuf|Size32|IsString, { 0, 0, 0} },
-{"cmpsd", 2, 0xa7, X, 0, NoSuf|Size32|IsString, { AnyMem, AnyMem|EsSeg, 0} },
-{"cmpsd", 3, 0xf20fc2, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LongMem, RegXMM } },
-{"comisd", 2, 0x660f2f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } },
-{"cvtpi2pd", 2, 0x660f2a, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegXMM, 0 } },
-{"cvtsi2sd", 2, 0xf20f2a, X, CpuSSE2, lq_Suf|IgnoreSize|Modrm,{ Reg32|Reg64|WordMem|LLongMem, RegXMM, 0 } },
-{"divpd", 2, 0x660f5e, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"divsd", 2, 0xf20f5e, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } },
-{"maxpd", 2, 0x660f5f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"maxsd", 2, 0xf20f5f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } },
-{"minpd", 2, 0x660f5d, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"minsd", 2, 0xf20f5d, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } },
-{"movapd", 2, 0x660f28, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"movapd", 2, 0x660f29, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LLongMem, 0 } },
-{"movhpd", 2, 0x660f16, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { LLongMem, RegXMM, 0 } },
-{"movhpd", 2, 0x660f17, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } },
-{"movlpd", 2, 0x660f12, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { LLongMem, RegXMM, 0 } },
-{"movlpd", 2, 0x660f13, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } },
-{"movmskpd", 2, 0x660f50, X, CpuSSE2, lq_Suf|IgnoreSize|Modrm, { RegXMM|InvMem, Reg32|Reg64, 0 } },
-{"movntpd", 2, 0x660f2b, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } },
-/* Intel mode string move. */
-{"movsd", 0, 0xa5, X, 0, NoSuf|Size32|IsString, { 0, 0, 0} },
-{"movsd", 2, 0xa5, X, 0, NoSuf|Size32|IsString, { AnyMem, AnyMem|EsSeg, 0} },
-{"movsd", 2, 0xf20f10, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } },
-{"movsd", 2, 0xf20f11, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LongMem, 0 } },
-{"movupd", 2, 0x660f10, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"movupd", 2, 0x660f11, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LLongMem, 0 } },
-{"mulpd", 2, 0x660f59, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"mulsd", 2, 0xf20f59, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } },
-{"orpd", 2, 0x660f56, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"shufpd", 3, 0x660fc6, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } },
-{"sqrtpd", 2, 0x660f51, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"sqrtsd", 2, 0xf20f51, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } },
-{"subpd", 2, 0x660f5c, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"subsd", 2, 0xf20f5c, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } },
-{"ucomisd", 2, 0x660f2e, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } },
-{"unpckhpd", 2, 0x660f15, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"unpcklpd", 2, 0x660f14, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"xorpd", 2, 0x660f57, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cvtdq2pd", 2, 0xf30fe6, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cvtpd2dq", 2, 0xf20fe6, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cvtdq2ps", 2, 0x0f5b, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cvtpd2pi", 2, 0x660f2d, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegMMX, 0 } },
-{"cvtpd2ps", 2, 0x660f5a, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cvtps2pd", 2, 0x0f5a, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cvtps2dq", 2, 0x660f5b, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cvtsd2si", 2, 0xf20f2d, X, CpuSSE2, lq_Suf|IgnoreSize|Modrm,{ RegXMM|LLongMem, Reg32|Reg64, 0 } },
-{"cvtsd2ss", 2, 0xf20f5a, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cvtss2sd", 2, 0xf30f5a, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cvttpd2pi", 2, 0x660f2c, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegMMX, 0 } },
-{"cvttsd2si", 2, 0xf20f2c, X, CpuSSE2, lq_Suf|IgnoreSize|Modrm,{ RegXMM|WordMem, Reg32|Reg64, 0 } },
-{"cvttpd2dq", 2, 0x660fe6, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cvttps2dq", 2, 0xf30f5b, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"maskmovdqu",2, 0x660ff7, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|InvMem, RegXMM, 0 } },
-{"movdqa", 2, 0x660f6f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"movdqa", 2, 0x660f7f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LLongMem, 0 } },
-{"movdqu", 2, 0xf30f6f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"movdqu", 2, 0xf30f7f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LLongMem, 0 } },
-{"movdq2q", 2, 0xf20fd6, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|InvMem, RegMMX, 0 } },
-{"movq2dq", 2, 0xf30fd6, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegMMX|InvMem, RegXMM, 0 } },
-{"pmuludq", 2, 0x0ff4, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pmuludq", 2, 0x660ff4, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } },
-{"pshufd", 3, 0x660f70, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } },
-{"pshufhw", 3, 0xf30f70, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } },
-{"pshuflw", 3, 0xf20f70, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } },
-{"pslldq", 2, 0x660f73, 7, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } },
-{"psrldq", 2, 0x660f73, 3, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } },
-{"punpckhqdq",2, 0x660f6d, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"punpcklqdq",2, 0x660f6c, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-
-/* Prescott New Instructions. */
-
-{"addsubpd", 2, 0x660fd0, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"addsubps", 2, 0xf20fd0, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"cmpxchg16b",1, 0x0fc7, 1, CpuPNI|Cpu64, NoSuf|Modrm|Rex64, { LLongMem, 0, 0} },
-{"fisttp", 1, 0xdf, 1, CpuPNI, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} },
-{"fisttp", 1, 0xdd, 1, CpuPNI, q_FP|Modrm, { LLongMem, 0, 0} },
-{"fisttpll", 1, 0xdd, 1, CpuPNI, FP|Modrm, { LLongMem, 0, 0} },
-{"haddpd", 2, 0x660f7c, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"haddps", 2, 0xf20f7c, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"hsubpd", 2, 0x660f7d, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"hsubps", 2, 0xf20f7d, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"lddqu", 2, 0xf20ff0, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { LLongMem, RegXMM, 0 } },
-{"monitor", 0, 0x0f01, 0xc8, CpuPNI, NoSuf|ImmExt, { 0, 0, 0} },
-/* monitor is very special. CX and DX are always 64bits with zero upper
- 32bits in 64bit mode, and 32bits in 16bit and 32bit modes. The
- address size override prefix can be used to overrride the AX size in
- all modes. */
-/* Need to ensure only "monitor %eax/%ax,%ecx,%edx" is accepted. */
-{"monitor", 3, 0x0f01, 0xc8, CpuPNI|CpuNo64, NoSuf|ImmExt, { Reg16|Reg32, Reg32, Reg32 } },
-/* Need to ensure only "monitor %rax/%eax,%rcx,%rdx" is accepted. */
-{"monitor", 3, 0x0f01, 0xc8, CpuPNI|Cpu64, NoSuf|ImmExt|NoRex64, { Reg32|Reg64, Reg64, Reg64 } },
-{"movddup", 2, 0xf20f12, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"movshdup", 2, 0xf30f16, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"movsldup", 2, 0xf30f12, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"mwait", 0, 0x0f01, 0xc9, CpuPNI, NoSuf|ImmExt, { 0, 0, 0} },
-/* mwait is very special. AX and CX are always 64bits with zero upper
- 32bits in 64bit mode, and 32bits in 16bit and 32bit modes. */
-/* Need to ensure only "mwait %eax,%ecx" is accepted. */
-{"mwait", 2, 0x0f01, 0xc9, CpuPNI|CpuNo64, NoSuf|ImmExt, { Reg32, Reg32, 0} },
-/* Need to ensure only "mwait %rax,%rcx" is accepted. */
-{"mwait", 2, 0x0f01, 0xc9, CpuPNI|Cpu64, NoSuf|ImmExt|NoRex64, { Reg64, Reg64, 0} },
-
-/* VMX instructions. */
-{"vmcall", 0, 0x0f01, 0xc1, CpuVMX, NoSuf|ImmExt, { 0, 0, 0} },
-{"vmclear", 1, 0x660fc7, 6, CpuVMX, NoSuf|IgnoreSize|Modrm|NoRex64, { LLongMem, 0, 0} },
-{"vmlaunch", 0, 0x0f01, 0xc2, CpuVMX, NoSuf|ImmExt, { 0, 0, 0} },
-{"vmresume", 0, 0x0f01, 0xc3, CpuVMX, NoSuf|ImmExt, { 0, 0, 0} },
-{"vmptrld", 1, 0x0fc7, 6, CpuVMX, NoSuf|IgnoreSize|Modrm|NoRex64, { LLongMem, 0, 0} },
-{"vmptrst", 1, 0x0fc7, 7, CpuVMX, NoSuf|IgnoreSize|Modrm|NoRex64, { LLongMem, 0, 0} },
-{"vmread", 2, 0x0f78, X, CpuVMX|CpuNo64, l_Suf|Modrm,{ Reg32, Reg32|LongMem, 0} },
-{"vmread", 2, 0x0f78, X, CpuVMX|Cpu64, q_Suf|Modrm|NoRex64,{ Reg64, Reg64|LLongMem, 0} },
-{"vmwrite", 2, 0x0f79, X, CpuVMX|CpuNo64, l_Suf|Modrm,{ Reg32|LongMem, Reg32, 0} },
-{"vmwrite", 2, 0x0f79, X, CpuVMX|Cpu64, q_Suf|Modrm|NoRex64,{ Reg64|LLongMem, Reg64, 0} },
-{"vmxoff", 0, 0x0f01, 0xc4, CpuVMX, NoSuf|ImmExt, { 0, 0, 0} },
-{"vmxon", 1, 0xf30fc7, 6, CpuVMX, NoSuf|IgnoreSize|Modrm|NoRex64, { LLongMem, 0, 0} },
-
-/* Merom New Instructions. */
-
-{"phaddw", 2, 0x0f3801,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"phaddw", 2, 0x660f3801,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"phaddd", 2, 0x0f3802,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"phaddd", 2, 0x660f3802,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"phaddsw", 2, 0x0f3803,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"phaddsw", 2, 0x660f3803,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"phsubw", 2, 0x0f3805,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"phsubw", 2, 0x660f3805,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"phsubd", 2, 0x0f3806,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"phsubd", 2, 0x660f3806,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"phsubsw", 2, 0x0f3807,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"phsubsw", 2, 0x660f3807,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pmaddubsw", 2, 0x0f3804,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pmaddubsw", 2, 0x660f3804,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pmulhrsw", 2, 0x0f380b,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pmulhrsw", 2, 0x660f380b,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pshufb", 2, 0x0f3800,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pshufb", 2, 0x660f3800,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psignb", 2, 0x0f3808,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psignb", 2, 0x660f3808,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psignw", 2, 0x0f3809,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psignw", 2, 0x660f3809,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"psignd", 2, 0x0f380a,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"psignd", 2, 0x660f380a,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"palignr", 3, 0x0f3a0f,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX|LongMem, RegMMX } },
-{"palignr", 3, 0x660f3a0f,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } },
-{"pabsb", 2, 0x0f381c,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pabsb", 2, 0x660f381c,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pabsw", 2, 0x0f381d,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pabsw", 2, 0x660f381d,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-{"pabsd", 2, 0x0f381e,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } },
-{"pabsd", 2, 0x660f381e,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } },
-
-/* AMD 3DNow! instructions. */
-
-{"prefetch", 1, 0x0f0d, 0, Cpu3dnow, NoSuf|IgnoreSize|Modrm, { ByteMem, 0, 0 } },
-{"prefetchw",1, 0x0f0d, 1, Cpu3dnow, NoSuf|IgnoreSize|Modrm, { ByteMem, 0, 0 } },
-{"femms", 0, 0x0f0e, X, Cpu3dnow, NoSuf, { 0, 0, 0 } },
-{"pavgusb", 2, 0x0f0f, 0xbf, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pf2id", 2, 0x0f0f, 0x1d, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pf2iw", 2, 0x0f0f, 0x1c, Cpu3dnowA,NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfacc", 2, 0x0f0f, 0xae, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfadd", 2, 0x0f0f, 0x9e, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfcmpeq", 2, 0x0f0f, 0xb0, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfcmpge", 2, 0x0f0f, 0x90, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfcmpgt", 2, 0x0f0f, 0xa0, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfmax", 2, 0x0f0f, 0xa4, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfmin", 2, 0x0f0f, 0x94, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfmul", 2, 0x0f0f, 0xb4, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfnacc", 2, 0x0f0f, 0x8a, Cpu3dnowA,NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfpnacc", 2, 0x0f0f, 0x8e, Cpu3dnowA,NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfrcp", 2, 0x0f0f, 0x96, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfrcpit1", 2, 0x0f0f, 0xa6, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfrcpit2", 2, 0x0f0f, 0xb6, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfrsqit1", 2, 0x0f0f, 0xa7, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfrsqrt", 2, 0x0f0f, 0x97, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfsub", 2, 0x0f0f, 0x9a, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pfsubr", 2, 0x0f0f, 0xaa, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pi2fd", 2, 0x0f0f, 0x0d, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pi2fw", 2, 0x0f0f, 0x0c, Cpu3dnowA,NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pmulhrw", 2, 0x0f0f, 0xb7, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-{"pswapd", 2, 0x0f0f, 0xbb, Cpu3dnowA,NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } },
-/* AMD extensions. */
-{"syscall", 0, 0x0f05, X, CpuK6, NoSuf, { 0, 0, 0} },
-{"sysret", 0, 0x0f07, X, CpuK6, lq_Suf|DefaultSize, { 0, 0, 0} },
-{"swapgs", 0, 0x0f01, 0xf8, Cpu64, NoSuf|ImmExt, { 0, 0, 0} },
-{"rdtscp", 0, 0x0f01, 0xf9, CpuSledgehammer,NoSuf|ImmExt, { 0, 0, 0} },
+#define TWO_BYTE_OPCODE_ESCAPE 0x0f
+#define NOP_OPCODE (char) 0x90
-/* AMD Pacifica additions. */
-{"clgi", 0, 0x0f01, 0xdd, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } },
-{"invlpga", 0, 0x0f01, 0xdf, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } },
-/* Need to ensure only "invlpga ...,%ecx" is accepted. */
-{"invlpga", 2, 0x0f01, 0xdf, CpuSVME, NoSuf|ImmExt, { AnyMem, Reg32, 0 } },
-{"skinit", 0, 0x0f01, 0xde, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } },
-{"skinit", 1, 0x0f01, 0xde, CpuSVME, NoSuf|ImmExt, { AnyMem, 0, 0 } },
-{"stgi", 0, 0x0f01, 0xdc, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } },
-{"vmload", 0, 0x0f01, 0xda, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } },
-{"vmload", 1, 0x0f01, 0xda, CpuSVME, NoSuf|ImmExt, { AnyMem, 0, 0 } },
-{"vmmcall", 0, 0x0f01, 0xd9, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } },
-{"vmrun", 0, 0x0f01, 0xd8, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } },
-{"vmrun", 1, 0x0f01, 0xd8, CpuSVME, NoSuf|ImmExt, { AnyMem, 0, 0 } },
-{"vmsave", 0, 0x0f01, 0xdb, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } },
-{"vmsave", 1, 0x0f01, 0xdb, CpuSVME, NoSuf|ImmExt, { AnyMem, 0, 0 } },
+/* register numbers */
+#define EBP_REG_NUM 5
+#define ESP_REG_NUM 4
-/* VIA PadLock extensions. */
-{"xstore-rng",0, 0x000fa7, 0xc0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-{"xcrypt-ecb",0, 0xf30fa7, 0xc8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-{"xcrypt-cbc",0, 0xf30fa7, 0xd0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-{"xcrypt-ctr",0, 0xf30fa7, 0xd8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-{"xcrypt-cfb",0, 0xf30fa7, 0xe0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-{"xcrypt-ofb",0, 0xf30fa7, 0xe8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-{"montmul", 0, 0xf30fa6, 0xc0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-{"xsha1", 0, 0xf30fa6, 0xc8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-{"xsha256", 0, 0xf30fa6, 0xd0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-/* Aliases without hyphens. */
-{"xstorerng", 0, 0x000fa7, 0xc0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-{"xcryptecb", 0, 0xf30fa7, 0xc8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-{"xcryptcbc", 0, 0xf30fa7, 0xd0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-{"xcryptctr", 0, 0xf30fa7, 0xd8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-{"xcryptcfb", 0, 0xf30fa7, 0xe0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-{"xcryptofb", 0, 0xf30fa7, 0xe8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
-/* Alias for xstore-rng. */
-{"xstore", 0, 0x000fa7, 0xc0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
+/* modrm_byte.regmem for twobyte escape */
+#define ESCAPE_TO_TWO_BYTE_ADDRESSING ESP_REG_NUM
+/* index_base_byte.index for no index register addressing */
+#define NO_INDEX_REGISTER ESP_REG_NUM
+/* index_base_byte.base for no base register addressing */
+#define NO_BASE_REGISTER EBP_REG_NUM
+#define NO_BASE_REGISTER_16 6
-/* sentinel */
-{NULL, 0, 0, 0, 0, 0, { 0, 0, 0} }
-};
-#undef X
-#undef NoSuf
-#undef b_Suf
-#undef w_Suf
-#undef l_Suf
-#undef q_Suf
-#undef x_Suf
-#undef bw_Suf
-#undef bl_Suf
-#undef wl_Suf
-#undef wlq_Suf
-#undef sl_Suf
-#undef bwl_Suf
-#undef bwlq_Suf
-#undef FP
-#undef l_FP
-#undef q_FP
-#undef x_FP
-#undef sl_FP
+/* modrm.mode = REGMEM_FIELD_HAS_REG when a register is in there */
+#define REGMEM_FIELD_HAS_REG 0x3/* always = 0x3 */
+#define REGMEM_FIELD_HAS_MEM (~REGMEM_FIELD_HAS_REG)
-#define MAX_MNEM_SIZE 16 /* For parsing insn mnemonics from input. */
+/* x86-64 extension prefix. */
+#define REX_OPCODE 0x40
-/* 386 register table. */
+/* Indicates 64 bit operand size. */
+#define REX_W 8
+/* High extension to reg field of modrm byte. */
+#define REX_R 4
+/* High extension to SIB index field. */
+#define REX_X 2
+/* High extension to base field of modrm or SIB, or reg field of opcode. */
+#define REX_B 1
-static const reg_entry i386_regtab[] =
-{
- /* Make %st first as we test for it. */
- {"st", FloatReg|FloatAcc, 0, 0},
- /* 8 bit regs */
-#define REGNAM_AL 1 /* Entry in i386_regtab. */
- {"al", Reg8|Acc, 0, 0},
- {"cl", Reg8|ShiftCount, 0, 1},
- {"dl", Reg8, 0, 2},
- {"bl", Reg8, 0, 3},
- {"ah", Reg8, 0, 4},
- {"ch", Reg8, 0, 5},
- {"dh", Reg8, 0, 6},
- {"bh", Reg8, 0, 7},
- {"axl", Reg8|Acc, RegRex64, 0}, /* Must be in the "al + 8" slot. */
- {"cxl", Reg8, RegRex64, 1},
- {"dxl", Reg8, RegRex64, 2},
- {"bxl", Reg8, RegRex64, 3},
- {"spl", Reg8, RegRex64, 4},
- {"bpl", Reg8, RegRex64, 5},
- {"sil", Reg8, RegRex64, 6},
- {"dil", Reg8, RegRex64, 7},
- {"r8b", Reg8, RegRex64|RegRex, 0},
- {"r9b", Reg8, RegRex64|RegRex, 1},
- {"r10b", Reg8, RegRex64|RegRex, 2},
- {"r11b", Reg8, RegRex64|RegRex, 3},
- {"r12b", Reg8, RegRex64|RegRex, 4},
- {"r13b", Reg8, RegRex64|RegRex, 5},
- {"r14b", Reg8, RegRex64|RegRex, 6},
- {"r15b", Reg8, RegRex64|RegRex, 7},
- /* 16 bit regs */
-#define REGNAM_AX 25
- {"ax", Reg16|Acc, 0, 0},
- {"cx", Reg16, 0, 1},
- {"dx", Reg16|InOutPortReg, 0, 2},
- {"bx", Reg16|BaseIndex, 0, 3},
- {"sp", Reg16, 0, 4},
- {"bp", Reg16|BaseIndex, 0, 5},
- {"si", Reg16|BaseIndex, 0, 6},
- {"di", Reg16|BaseIndex, 0, 7},
- {"r8w", Reg16, RegRex, 0},
- {"r9w", Reg16, RegRex, 1},
- {"r10w", Reg16, RegRex, 2},
- {"r11w", Reg16, RegRex, 3},
- {"r12w", Reg16, RegRex, 4},
- {"r13w", Reg16, RegRex, 5},
- {"r14w", Reg16, RegRex, 6},
- {"r15w", Reg16, RegRex, 7},
- /* 32 bit regs */
-#define REGNAM_EAX 41
- {"eax", Reg32|BaseIndex|Acc, 0, 0}, /* Must be in ax + 16 slot. */
- {"ecx", Reg32|BaseIndex, 0, 1},
- {"edx", Reg32|BaseIndex, 0, 2},
- {"ebx", Reg32|BaseIndex, 0, 3},
- {"esp", Reg32, 0, 4},
- {"ebp", Reg32|BaseIndex, 0, 5},
- {"esi", Reg32|BaseIndex, 0, 6},
- {"edi", Reg32|BaseIndex, 0, 7},
- {"r8d", Reg32|BaseIndex, RegRex, 0},
- {"r9d", Reg32|BaseIndex, RegRex, 1},
- {"r10d", Reg32|BaseIndex, RegRex, 2},
- {"r11d", Reg32|BaseIndex, RegRex, 3},
- {"r12d", Reg32|BaseIndex, RegRex, 4},
- {"r13d", Reg32|BaseIndex, RegRex, 5},
- {"r14d", Reg32|BaseIndex, RegRex, 6},
- {"r15d", Reg32|BaseIndex, RegRex, 7},
- {"rax", Reg64|BaseIndex|Acc, 0, 0},
- {"rcx", Reg64|BaseIndex, 0, 1},
- {"rdx", Reg64|BaseIndex, 0, 2},
- {"rbx", Reg64|BaseIndex, 0, 3},
- {"rsp", Reg64, 0, 4},
- {"rbp", Reg64|BaseIndex, 0, 5},
- {"rsi", Reg64|BaseIndex, 0, 6},
- {"rdi", Reg64|BaseIndex, 0, 7},
- {"r8", Reg64|BaseIndex, RegRex, 0},
- {"r9", Reg64|BaseIndex, RegRex, 1},
- {"r10", Reg64|BaseIndex, RegRex, 2},
- {"r11", Reg64|BaseIndex, RegRex, 3},
- {"r12", Reg64|BaseIndex, RegRex, 4},
- {"r13", Reg64|BaseIndex, RegRex, 5},
- {"r14", Reg64|BaseIndex, RegRex, 6},
- {"r15", Reg64|BaseIndex, RegRex, 7},
- /* Segment registers. */
- {"es", SReg2, 0, 0},
- {"cs", SReg2, 0, 1},
- {"ss", SReg2, 0, 2},
- {"ds", SReg2, 0, 3},
- {"fs", SReg3, 0, 4},
- {"gs", SReg3, 0, 5},
- /* Control registers. */
- {"cr0", Control, 0, 0},
- {"cr1", Control, 0, 1},
- {"cr2", Control, 0, 2},
- {"cr3", Control, 0, 3},
- {"cr4", Control, 0, 4},
- {"cr5", Control, 0, 5},
- {"cr6", Control, 0, 6},
- {"cr7", Control, 0, 7},
- {"cr8", Control, RegRex, 0},
- {"cr9", Control, RegRex, 1},
- {"cr10", Control, RegRex, 2},
- {"cr11", Control, RegRex, 3},
- {"cr12", Control, RegRex, 4},
- {"cr13", Control, RegRex, 5},
- {"cr14", Control, RegRex, 6},
- {"cr15", Control, RegRex, 7},
- /* Debug registers. */
- {"db0", Debug, 0, 0},
- {"db1", Debug, 0, 1},
- {"db2", Debug, 0, 2},
- {"db3", Debug, 0, 3},
- {"db4", Debug, 0, 4},
- {"db5", Debug, 0, 5},
- {"db6", Debug, 0, 6},
- {"db7", Debug, 0, 7},
- {"db8", Debug, RegRex, 0},
- {"db9", Debug, RegRex, 1},
- {"db10", Debug, RegRex, 2},
- {"db11", Debug, RegRex, 3},
- {"db12", Debug, RegRex, 4},
- {"db13", Debug, RegRex, 5},
- {"db14", Debug, RegRex, 6},
- {"db15", Debug, RegRex, 7},
- {"dr0", Debug, 0, 0},
- {"dr1", Debug, 0, 1},
- {"dr2", Debug, 0, 2},
- {"dr3", Debug, 0, 3},
- {"dr4", Debug, 0, 4},
- {"dr5", Debug, 0, 5},
- {"dr6", Debug, 0, 6},
- {"dr7", Debug, 0, 7},
- {"dr8", Debug, RegRex, 0},
- {"dr9", Debug, RegRex, 1},
- {"dr10", Debug, RegRex, 2},
- {"dr11", Debug, RegRex, 3},
- {"dr12", Debug, RegRex, 4},
- {"dr13", Debug, RegRex, 5},
- {"dr14", Debug, RegRex, 6},
- {"dr15", Debug, RegRex, 7},
- /* Test registers. */
- {"tr0", Test, 0, 0},
- {"tr1", Test, 0, 1},
- {"tr2", Test, 0, 2},
- {"tr3", Test, 0, 3},
- {"tr4", Test, 0, 4},
- {"tr5", Test, 0, 5},
- {"tr6", Test, 0, 6},
- {"tr7", Test, 0, 7},
- /* MMX and simd registers. */
- {"mm0", RegMMX, 0, 0},
- {"mm1", RegMMX, 0, 1},
- {"mm2", RegMMX, 0, 2},
- {"mm3", RegMMX, 0, 3},
- {"mm4", RegMMX, 0, 4},
- {"mm5", RegMMX, 0, 5},
- {"mm6", RegMMX, 0, 6},
- {"mm7", RegMMX, 0, 7},
- {"xmm0", RegXMM, 0, 0},
- {"xmm1", RegXMM, 0, 1},
- {"xmm2", RegXMM, 0, 2},
- {"xmm3", RegXMM, 0, 3},
- {"xmm4", RegXMM, 0, 4},
- {"xmm5", RegXMM, 0, 5},
- {"xmm6", RegXMM, 0, 6},
- {"xmm7", RegXMM, 0, 7},
- {"xmm8", RegXMM, RegRex, 0},
- {"xmm9", RegXMM, RegRex, 1},
- {"xmm10", RegXMM, RegRex, 2},
- {"xmm11", RegXMM, RegRex, 3},
- {"xmm12", RegXMM, RegRex, 4},
- {"xmm13", RegXMM, RegRex, 5},
- {"xmm14", RegXMM, RegRex, 6},
- {"xmm15", RegXMM, RegRex, 7},
- /* No type will make this register rejected for all purposes except
- for addressing. This saves creating one extra type for RIP. */
- {"rip", BaseIndex, 0, 0}
-};
+/* max operands per insn */
+#define MAX_OPERANDS 4
-static const reg_entry i386_float_regtab[] =
-{
- {"st(0)", FloatReg|FloatAcc, 0, 0},
- {"st(1)", FloatReg, 0, 1},
- {"st(2)", FloatReg, 0, 2},
- {"st(3)", FloatReg, 0, 3},
- {"st(4)", FloatReg, 0, 4},
- {"st(5)", FloatReg, 0, 5},
- {"st(6)", FloatReg, 0, 6},
- {"st(7)", FloatReg, 0, 7}
-};
+/* max immediates per insn (lcall, ljmp, insertq, extrq) */
+#define MAX_IMMEDIATE_OPERANDS 2
-#define MAX_REG_NAME_SIZE 8 /* For parsing register names from input. */
+/* max memory refs per insn (string ops) */
+#define MAX_MEMORY_OPERANDS 2
-/* Segment stuff. */
-static const seg_entry cs = { "cs", 0x2e };
-static const seg_entry ds = { "ds", 0x3e };
-static const seg_entry ss = { "ss", 0x36 };
-static const seg_entry es = { "es", 0x26 };
-static const seg_entry fs = { "fs", 0x64 };
-static const seg_entry gs = { "gs", 0x65 };
+/* max size of insn mnemonics. */
+#define MAX_MNEM_SIZE 16
+/* max size of register name in insn mnemonics. */
+#define MAX_REG_NAME_SIZE 8
diff --git a/include/opcode/m68k.h b/include/opcode/m68k.h
index 65543e649403..2dd6d3feda00 100644
--- a/include/opcode/m68k.h
+++ b/include/opcode/m68k.h
@@ -31,24 +31,26 @@
#define m68881 0x040
#define m68851 0x080
#define cpu32 0x100 /* e.g., 68332 */
-#define m68k_mask 0x1ff
+#define fido_a 0x200
+#define m68k_mask 0x3ff
-#define mcfmac 0x200 /* ColdFire MAC. */
-#define mcfemac 0x400 /* ColdFire EMAC. */
-#define cfloat 0x800 /* ColdFire FPU. */
-#define mcfhwdiv 0x1000 /* ColdFire hardware divide. */
+#define mcfmac 0x400 /* ColdFire MAC. */
+#define mcfemac 0x800 /* ColdFire EMAC. */
+#define cfloat 0x1000 /* ColdFire FPU. */
+#define mcfhwdiv 0x2000 /* ColdFire hardware divide. */
-#define mcfisa_a 0x2000 /* ColdFire ISA_A. */
-#define mcfisa_aa 0x4000 /* ColdFire ISA_A+. */
-#define mcfisa_b 0x8000 /* ColdFire ISA_B. */
-#define mcfusp 0x10000 /* ColdFire USP instructions. */
-#define mcf_mask 0x1f200
+#define mcfisa_a 0x4000 /* ColdFire ISA_A. */
+#define mcfisa_aa 0x8000 /* ColdFire ISA_A+. */
+#define mcfisa_b 0x10000 /* ColdFire ISA_B. */
+#define mcfisa_c 0x20000 /* ColdFire ISA_C. */
+#define mcfusp 0x40000 /* ColdFire USP instructions. */
+#define mcf_mask 0x7e400
/* Handy aliases. */
#define m68040up (m68040 | m68060)
#define m68030up (m68030 | m68040up)
#define m68020up (m68020 | m68030up)
-#define m68010up (m68010 | cpu32 | m68020up)
+#define m68010up (m68010 | cpu32 | fido_a | m68020up)
#define m68000up (m68000 | m68010up)
#define mfloat (m68881 | m68040 | m68060)
@@ -94,10 +96,15 @@ struct m68k_opcode_alias
The args field is a string containing two characters for each
operand of the instruction. The first specifies the kind of
- operand; the second, the place it is stored. */
+ operand; the second, the place it is stored.
+
+ If the first char of args is '.', it indicates that the opcode is
+ two words. This is only necessary when the match field does not
+ have any bits set in the second opcode word. Such a '.' is skipped
+ for operand processing. */
/* Kinds of operands:
- Characters used: AaBbCcDdEeFfGgHIiJkLlMmnOopQqRrSsTtU VvWwXxYyZz01234|*~%;@!&$?/<>#^+-
+ Characters used: AaBbCcDdEeFfGgHIiJjKkLlMmnOopQqRrSsTtUuVvWwXxYyZz01234|*~%;@!&$?/<>#^+-
D data register only. Stored as 3 bits.
A address register only. Stored as 3 bits.
@@ -232,6 +239,8 @@ struct m68k_opcode_alias
y (modes 2,5)
z (modes 2,5,7.2)
x mov3q immediate operand.
+ j coprocessor ET operand.
+ K coprocessor command number.
4 (modes 2,3,4,5)
*/
@@ -299,6 +308,7 @@ struct m68k_opcode_alias
7 second word, shifted 7
8 second word, shifted 10
9 second word, shifted 5
+ E second word, shifted 9
D store in both place 1 and place 3; for divul and divsl.
B first word, low byte, for branch displacements
W second word (entire), for branch displacements
diff --git a/include/opcode/mips.h b/include/opcode/mips.h
index 4bec5edcc8cc..71822a41bd38 100644
--- a/include/opcode/mips.h
+++ b/include/opcode/mips.h
@@ -169,6 +169,8 @@ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, US
#define OP_MASK_WRDSP 0x3f
#define OP_SH_RDDSP 16
#define OP_MASK_RDDSP 0x3f
+#define OP_SH_BP 11
+#define OP_MASK_BP 0x3
/* MIPS MT ASE */
#define OP_SH_MT_U 5
@@ -203,6 +205,16 @@ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, US
#define MDMX_FMTSEL_VEC_QH 0x15
#define MDMX_FMTSEL_VEC_OB 0x16
+/* UDI */
+#define OP_SH_UDI1 6
+#define OP_MASK_UDI1 0x1f
+#define OP_SH_UDI2 6
+#define OP_MASK_UDI2 0x3ff
+#define OP_SH_UDI3 6
+#define OP_MASK_UDI3 0x7fff
+#define OP_SH_UDI4 6
+#define OP_MASK_UDI4 0xfffff
+
/* This structure holds information for a particular instruction. */
struct mips_opcode
@@ -268,19 +280,20 @@ struct mips_opcode
"x" accept and ignore register name
"z" must be zero register
"K" 5 bit Hardware Register (rdhwr instruction) (OP_*_RD)
- "+A" 5 bit ins/ext position, which becomes LSB (OP_*_SHAMT).
+ "+A" 5 bit ins/ext/dins/dext/dinsm/dextm position, which becomes
+ LSB (OP_*_SHAMT).
Enforces: 0 <= pos < 32.
- "+B" 5 bit ins size, which becomes MSB (OP_*_INSMSB).
+ "+B" 5 bit ins/dins size, which becomes MSB (OP_*_INSMSB).
Requires that "+A" or "+E" occur first to set position.
Enforces: 0 < (pos+size) <= 32.
- "+C" 5 bit ext size, which becomes MSBD (OP_*_EXTMSBD).
+ "+C" 5 bit ext/dext size, which becomes MSBD (OP_*_EXTMSBD).
Requires that "+A" or "+E" occur first to set position.
Enforces: 0 < (pos+size) <= 32.
(Also used by "dext" w/ different limits, but limits for
that are checked by the M_DEXT macro.)
- "+E" 5 bit dins/dext position, which becomes LSB-32 (OP_*_SHAMT).
+ "+E" 5 bit dinsu/dextu position, which becomes LSB-32 (OP_*_SHAMT).
Enforces: 32 <= pos < 64.
- "+F" 5 bit "dinsm" size, which becomes MSB-32 (OP_*_INSMSB).
+ "+F" 5 bit "dinsm/dinsu" size, which becomes MSB-32 (OP_*_INSMSB).
Requires that "+A" or "+E" occur first to set position.
Enforces: 32 < (pos+size) <= 64.
"+G" 5 bit "dextm" size, which becomes MSBD-32 (OP_*_EXTMSBD).
@@ -329,6 +342,7 @@ struct mips_opcode
"Z" MDMX source register (OP_*_FT)
DSP ASE usage:
+ "2" 2 bit unsigned immediate for byte align (OP_*_BP)
"3" 3 bit unsigned immediate (OP_*_SA3)
"4" 4 bit unsigned immediate (OP_*_SA4)
"5" 8 bit unsigned immediate (OP_*_IMM8)
@@ -342,14 +356,20 @@ struct mips_opcode
"@" 10 bit signed immediate (OP_*_IMM10)
MT ASE usage:
- "!" 1 bit immediate at bit 5
- "$" 1 bit immediate at bit 4
+ "!" 1 bit usermode flag (OP_*_MT_U)
+ "$" 1 bit load high flag (OP_*_MT_H)
"*" 2 bit dsp/smartmips accumulator register (OP_*_MTACC_T)
"&" 2 bit dsp/smartmips accumulator register (OP_*_MTACC_D)
"g" 5 bit coprocessor 1 and 2 destination register (OP_*_RD)
"+t" 5 bit coprocessor 0 destination register (OP_*_RT)
"+T" 5 bit coprocessor 0 destination register (OP_*_RT) - disassembly only
+ UDI immediates:
+ "+1" UDI immediate bits 6-10
+ "+2" UDI immediate bits 6-15
+ "+3" UDI immediate bits 6-20
+ "+4" UDI immediate bits 6-25
+
Other:
"()" parens surrounding optional value
"," separates operands
@@ -357,13 +377,14 @@ struct mips_opcode
"+" Start of extension sequence.
Characters used so far, for quick reference when adding more:
- "34567890"
+ "234567890"
"%[]<>(),+:'@!$*&"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklopqrstuvwxz"
Extension character sequences used so far ("+" followed by the
following), for quick reference when adding more:
+ "1234"
"ABCDEFGHIT"
"t"
*/
@@ -467,16 +488,15 @@ struct mips_opcode
#define INSN_ISA64R2 0x00000100
/* Masks used for MIPS-defined ASEs. */
-#define INSN_ASE_MASK 0x0400f000
+#define INSN_ASE_MASK 0x3c00f000
/* DSP ASE */
#define INSN_DSP 0x00001000
+#define INSN_DSP64 0x00002000
/* MIPS 16 ASE */
-#define INSN_MIPS16 0x00002000
+#define INSN_MIPS16 0x00004000
/* MIPS-3D ASE */
-#define INSN_MIPS3D 0x00004000
-/* MDMX ASE */
-#define INSN_MDMX 0x00008000
+#define INSN_MIPS3D 0x00008000
/* Chip specific instructions. These are bitmasks. */
@@ -500,8 +520,15 @@ struct mips_opcode
#define INSN_5400 0x01000000
/* NEC VR5500 instruction. */
#define INSN_5500 0x02000000
+
+/* MDMX ASE */
+#define INSN_MDMX 0x04000000
/* MT ASE */
-#define INSN_MT 0x04000000
+#define INSN_MT 0x08000000
+/* SmartMIPS ASE */
+#define INSN_SMARTMIPS 0x10000000
+/* DSP R2 ASE */
+#define INSN_DSPR2 0x20000000
/* MIPS ISA defines, use instead of hardcoding ISA level. */
@@ -586,6 +613,7 @@ enum
M_ADD_I,
M_ADDU_I,
M_AND_I,
+ M_BALIGN,
M_BEQ,
M_BEQ_I,
M_BEQL_I,
@@ -624,6 +652,7 @@ enum
M_BNE,
M_BNE_I,
M_BNEL_I,
+ M_CACHE_AB,
M_DABS,
M_DADD_I,
M_DADDU_I,
diff --git a/include/opcode/ppc.h b/include/opcode/ppc.h
index f66263086165..6771856fd5f8 100644
--- a/include/opcode/ppc.h
+++ b/include/opcode/ppc.h
@@ -1,6 +1,6 @@
/* ppc.h -- Header file for PowerPC opcode table
- Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support
This file is part of GDB, GAS, and the GNU binutils.
@@ -135,10 +135,16 @@ extern const int powerpc_num_opcodes;
#define PPC_OPCODE_RFMCI 0x800000
/* Opcode is only supported by Power5 architecture. */
-#define PPC_OPCODE_POWER5 0x1000000
+#define PPC_OPCODE_POWER5 0x1000000
/* Opcode is supported by PowerPC e300 family. */
-#define PPC_OPCODE_E300 0x2000000
+#define PPC_OPCODE_E300 0x2000000
+
+/* Opcode is only supported by Power6 architecture. */
+#define PPC_OPCODE_POWER6 0x4000000
+
+/* Opcode is only supported by PowerPC Cell family. */
+#define PPC_OPCODE_CELL 0x8000000
/* A macro to extract the major opcode from an instruction. */
#define PPC_OP(i) (((i) >> 26) & 0x3f)
@@ -147,20 +153,21 @@ extern const int powerpc_num_opcodes;
struct powerpc_operand
{
- /* The number of bits in the operand. */
- int bits;
+ /* A bitmask of bits in the operand. */
+ unsigned int bitm;
- /* How far the operand is left shifted in the instruction. */
+ /* How far the operand is left shifted in the instruction.
+ -1 to indicate that BITM and SHIFT cannot be used to determine
+ where the operand goes in the insn. */
int shift;
/* Insertion function. This is used by the assembler. To insert an
operand value into an instruction, check this field.
If it is NULL, execute
- i |= (op & ((1 << o->bits) - 1)) << o->shift;
+ i |= (op & o->bitm) << o->shift;
(i is the instruction which we are filling in, o is a pointer to
- this structure, and op is the opcode value; this assumes twos
- complement arithmetic).
+ this structure, and op is the operand value).
If this field is not NULL, then simply call it with the
instruction and the operand value. It will return the new value
@@ -176,12 +183,11 @@ struct powerpc_operand
extract this operand type from an instruction, check this field.
If it is NULL, compute
- op = ((i) >> o->shift) & ((1 << o->bits) - 1);
- if ((o->flags & PPC_OPERAND_SIGNED) != 0
- && (op & (1 << (o->bits - 1))) != 0)
- op -= 1 << o->bits;
+ op = (i >> o->shift) & o->bitm;
+ if ((o->flags & PPC_OPERAND_SIGNED) != 0)
+ sign_extend (op);
(i is the instruction, o is a pointer to this structure, and op
- is the result; this assumes twos complement arithmetic).
+ is the result).
If this field is not NULL, then simply call it with the
instruction value. It will return the value of the operand. If
@@ -199,17 +205,18 @@ struct powerpc_operand
the operands field of the powerpc_opcodes table. */
extern const struct powerpc_operand powerpc_operands[];
+extern const unsigned int num_powerpc_operands;
/* Values defined for the flags field of a struct powerpc_operand. */
/* This operand takes signed values. */
-#define PPC_OPERAND_SIGNED (01)
+#define PPC_OPERAND_SIGNED (0x1)
/* This operand takes signed values, but also accepts a full positive
range of values when running in 32 bit mode. That is, if bits is
16, it takes any value from -0x8000 to 0xffff. In 64 bit mode,
this flag is ignored. */
-#define PPC_OPERAND_SIGNOPT (02)
+#define PPC_OPERAND_SIGNOPT (0x2)
/* This operand does not actually exist in the assembler input. This
is used to support extended mnemonics such as mr, for which two
@@ -217,14 +224,14 @@ extern const struct powerpc_operand powerpc_operands[];
insert function with any op value. The disassembler should call
the extract function, ignore the return value, and check the value
placed in the valid argument. */
-#define PPC_OPERAND_FAKE (04)
+#define PPC_OPERAND_FAKE (0x4)
/* The next operand should be wrapped in parentheses rather than
separated from this one by a comma. This is used for the load and
store instructions which want their operands to look like
reg,displacement(reg)
*/
-#define PPC_OPERAND_PARENS (010)
+#define PPC_OPERAND_PARENS (0x8)
/* This operand may use the symbolic names for the CR fields, which
are
@@ -233,26 +240,26 @@ extern const struct powerpc_operand powerpc_operands[];
cr4 4 cr5 5 cr6 6 cr7 7
These may be combined arithmetically, as in cr2*4+gt. These are
only supported on the PowerPC, not the POWER. */
-#define PPC_OPERAND_CR (020)
+#define PPC_OPERAND_CR (0x10)
/* This operand names a register. The disassembler uses this to print
register names with a leading 'r'. */
-#define PPC_OPERAND_GPR (040)
+#define PPC_OPERAND_GPR (0x20)
/* Like PPC_OPERAND_GPR, but don't print a leading 'r' for r0. */
-#define PPC_OPERAND_GPR_0 (0100)
+#define PPC_OPERAND_GPR_0 (0x40)
/* This operand names a floating point register. The disassembler
prints these with a leading 'f'. */
-#define PPC_OPERAND_FPR (0200)
+#define PPC_OPERAND_FPR (0x80)
/* This operand is a relative branch displacement. The disassembler
prints these symbolically if possible. */
-#define PPC_OPERAND_RELATIVE (0400)
+#define PPC_OPERAND_RELATIVE (0x100)
/* This operand is an absolute branch address. The disassembler
prints these symbolically if possible. */
-#define PPC_OPERAND_ABSOLUTE (01000)
+#define PPC_OPERAND_ABSOLUTE (0x200)
/* This operand is optional, and is zero if omitted. This is used for
example, in the optional BF field in the comparison instructions. The
@@ -260,7 +267,7 @@ extern const struct powerpc_operand powerpc_operands[];
and the number of operands remaining for the opcode, and decide
whether this operand is present or not. The disassembler should
print this operand out only if it is not zero. */
-#define PPC_OPERAND_OPTIONAL (02000)
+#define PPC_OPERAND_OPTIONAL (0x400)
/* This flag is only used with PPC_OPERAND_OPTIONAL. If this operand
is omitted, then for the next operand use this operand value plus
@@ -268,24 +275,27 @@ extern const struct powerpc_operand powerpc_operands[];
hack is needed because the Power rotate instructions can take
either 4 or 5 operands. The disassembler should print this operand
out regardless of the PPC_OPERAND_OPTIONAL field. */
-#define PPC_OPERAND_NEXT (04000)
+#define PPC_OPERAND_NEXT (0x800)
/* This operand should be regarded as a negative number for the
purposes of overflow checking (i.e., the normal most negative
number is disallowed and one more than the normal most positive
number is allowed). This flag will only be set for a signed
operand. */
-#define PPC_OPERAND_NEGATIVE (010000)
+#define PPC_OPERAND_NEGATIVE (0x1000)
/* This operand names a vector unit register. The disassembler
prints these with a leading 'v'. */
-#define PPC_OPERAND_VR (020000)
+#define PPC_OPERAND_VR (0x2000)
/* This operand is for the DS field in a DS form instruction. */
-#define PPC_OPERAND_DS (040000)
+#define PPC_OPERAND_DS (0x4000)
/* This operand is for the DQ field in a DQ form instruction. */
-#define PPC_OPERAND_DQ (0100000)
+#define PPC_OPERAND_DQ (0x8000)
+
+/* Valid range of operand is 0..n rather than 0..n-1. */
+#define PPC_OPERAND_PLUS1 (0x10000)
/* The POWER and PowerPC assemblers use a few macros. We keep them
with the operands table for simplicity. The macro table is an
diff --git a/include/opcode/s390.h b/include/opcode/s390.h
index 7bb30de285f9..ae039efe0f27 100644
--- a/include/opcode/s390.h
+++ b/include/opcode/s390.h
@@ -36,7 +36,8 @@ enum s390_opcode_cpu_val
S390_OPCODE_G6,
S390_OPCODE_Z900,
S390_OPCODE_Z990,
- S390_OPCODE_Z9_109
+ S390_OPCODE_Z9_109,
+ S390_OPCODE_Z9_EC
};
/* The opcode table is an array of struct s390_opcode. */
diff --git a/include/opcode/score-datadep.h b/include/opcode/score-datadep.h
new file mode 100644
index 000000000000..8ef35adc807e
--- /dev/null
+++ b/include/opcode/score-datadep.h
@@ -0,0 +1,282 @@
+/* score-datadep.h -- Score Instructions data dependency table
+ Copyright 2006 Free Software Foundation, Inc.
+ Contributed by:
+ Mei Ligang (ligang@sunnorth.com.cn)
+ Pei-Lin Tsai (pltsai@sunplus.com)
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to the Free
+ Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#ifndef SCORE_DATA_DEPENDENCY_H
+#define SCORE_DATA_DEPENDENCY_H
+
+#define INSN_NAME_LEN 16
+
+enum insn_type_for_dependency
+{
+ D_pce,
+ D_cond_br,
+ D_cond_mv,
+ D_cached,
+ D_cachei,
+ D_ldst,
+ D_ldcombine,
+ D_mtcr,
+ D_mfcr,
+ D_mfsr,
+ D_mftlb,
+ D_mtptlb,
+ D_mtrtlb,
+ D_stlb,
+ D_all_insn
+};
+
+struct insn_to_dependency
+{
+ char *insn_name;
+ enum insn_type_for_dependency type;
+};
+
+struct data_dependency
+{
+ enum insn_type_for_dependency pre_insn_type;
+ char pre_reg[6];
+ enum insn_type_for_dependency cur_insn_type;
+ char cur_reg[6];
+ int bubblenum_7;
+ int bubblenum_5;
+ int warn_or_error; /* warning - 0; error - 1 */
+};
+
+static const struct insn_to_dependency insn_to_dependency_table[] =
+{
+ /* pce instruction. */
+ {"pce", D_pce},
+ /* conditional branch instruction. */
+ {"bcs", D_cond_br},
+ {"bcc", D_cond_br},
+ {"bgtu", D_cond_br},
+ {"bleu", D_cond_br},
+ {"beq", D_cond_br},
+ {"bne", D_cond_br},
+ {"bgt", D_cond_br},
+ {"ble", D_cond_br},
+ {"bge", D_cond_br},
+ {"blt", D_cond_br},
+ {"bmi", D_cond_br},
+ {"bpl", D_cond_br},
+ {"bvs", D_cond_br},
+ {"bvc", D_cond_br},
+ {"bcsl", D_cond_br},
+ {"bccl", D_cond_br},
+ {"bgtul", D_cond_br},
+ {"bleul", D_cond_br},
+ {"beql", D_cond_br},
+ {"bnel", D_cond_br},
+ {"bgtl", D_cond_br},
+ {"blel", D_cond_br},
+ {"bgel", D_cond_br},
+ {"bltl", D_cond_br},
+ {"bmil", D_cond_br},
+ {"bpll", D_cond_br},
+ {"bvsl", D_cond_br},
+ {"bvcl", D_cond_br},
+ {"bcs!", D_cond_br},
+ {"bcc!", D_cond_br},
+ {"bgtu!", D_cond_br},
+ {"bleu!", D_cond_br},
+ {"beq!", D_cond_br},
+ {"bne!", D_cond_br},
+ {"bgt!", D_cond_br},
+ {"ble!", D_cond_br},
+ {"bge!", D_cond_br},
+ {"blt!", D_cond_br},
+ {"bmi!", D_cond_br},
+ {"bpl!", D_cond_br},
+ {"bvs!", D_cond_br},
+ {"bvc!", D_cond_br},
+ {"brcs", D_cond_br},
+ {"brcc", D_cond_br},
+ {"brgtu", D_cond_br},
+ {"brleu", D_cond_br},
+ {"breq", D_cond_br},
+ {"brne", D_cond_br},
+ {"brgt", D_cond_br},
+ {"brle", D_cond_br},
+ {"brge", D_cond_br},
+ {"brlt", D_cond_br},
+ {"brmi", D_cond_br},
+ {"brpl", D_cond_br},
+ {"brvs", D_cond_br},
+ {"brvc", D_cond_br},
+ {"brcsl", D_cond_br},
+ {"brccl", D_cond_br},
+ {"brgtul", D_cond_br},
+ {"brleul", D_cond_br},
+ {"breql", D_cond_br},
+ {"brnel", D_cond_br},
+ {"brgtl", D_cond_br},
+ {"brlel", D_cond_br},
+ {"brgel", D_cond_br},
+ {"brltl", D_cond_br},
+ {"brmil", D_cond_br},
+ {"brpll", D_cond_br},
+ {"brvsl", D_cond_br},
+ {"brvcl", D_cond_br},
+ {"brcs!", D_cond_br},
+ {"brcc!", D_cond_br},
+ {"brgtu!", D_cond_br},
+ {"brleu!", D_cond_br},
+ {"breq!", D_cond_br},
+ {"brne!", D_cond_br},
+ {"brgt!", D_cond_br},
+ {"brle!", D_cond_br},
+ {"brge!", D_cond_br},
+ {"brlt!", D_cond_br},
+ {"brmi!", D_cond_br},
+ {"brpl!", D_cond_br},
+ {"brvs!", D_cond_br},
+ {"brvc!", D_cond_br},
+ {"brcsl!", D_cond_br},
+ {"brccl!", D_cond_br},
+ {"brgtul!", D_cond_br},
+ {"brleul!", D_cond_br},
+ {"breql!", D_cond_br},
+ {"brnel!", D_cond_br},
+ {"brgtl!", D_cond_br},
+ {"brlel!", D_cond_br},
+ {"brgel!", D_cond_br},
+ {"brltl!", D_cond_br},
+ {"brmil!", D_cond_br},
+ {"brpll!", D_cond_br},
+ {"brvsl!", D_cond_br},
+ {"brvcl!", D_cond_br},
+ /* conditional move instruction. */
+ {"mvcs", D_cond_mv},
+ {"mvcc", D_cond_mv},
+ {"mvgtu", D_cond_mv},
+ {"mvleu", D_cond_mv},
+ {"mveq", D_cond_mv},
+ {"mvne", D_cond_mv},
+ {"mvgt", D_cond_mv},
+ {"mvle", D_cond_mv},
+ {"mvge", D_cond_mv},
+ {"mvlt", D_cond_mv},
+ {"mvmi", D_cond_mv},
+ {"mvpl", D_cond_mv},
+ {"mvvs", D_cond_mv},
+ {"mvvc", D_cond_mv},
+ /* move spectial instruction. */
+ {"mtcr", D_mtcr},
+ {"mftlb", D_mftlb},
+ {"mtptlb", D_mtptlb},
+ {"mtrtlb", D_mtrtlb},
+ {"stlb", D_stlb},
+ {"mfcr", D_mfcr},
+ {"mfsr", D_mfsr},
+ /* cache instruction. */
+ {"cache 8", D_cached},
+ {"cache 9", D_cached},
+ {"cache 10", D_cached},
+ {"cache 11", D_cached},
+ {"cache 12", D_cached},
+ {"cache 13", D_cached},
+ {"cache 14", D_cached},
+ {"cache 24", D_cached},
+ {"cache 26", D_cached},
+ {"cache 27", D_cached},
+ {"cache 29", D_cached},
+ {"cache 30", D_cached},
+ {"cache 31", D_cached},
+ {"cache 0", D_cachei},
+ {"cache 1", D_cachei},
+ {"cache 2", D_cachei},
+ {"cache 3", D_cachei},
+ {"cache 4", D_cachei},
+ {"cache 16", D_cachei},
+ {"cache 17", D_cachei},
+ /* load/store instruction. */
+ {"lb", D_ldst},
+ {"lbu", D_ldst},
+ {"lbu!", D_ldst},
+ {"lbup!", D_ldst},
+ {"lh", D_ldst},
+ {"lhu", D_ldst},
+ {"lh!", D_ldst},
+ {"lhp!", D_ldst},
+ {"lw", D_ldst},
+ {"lw!", D_ldst},
+ {"lwp!", D_ldst},
+ {"sb", D_ldst},
+ {"sb!", D_ldst},
+ {"sbp!", D_ldst},
+ {"sh", D_ldst},
+ {"sh!", D_ldst},
+ {"shp!", D_ldst},
+ {"sw", D_ldst},
+ {"sw!", D_ldst},
+ {"swp!", D_ldst},
+ {"alw", D_ldst},
+ {"asw", D_ldst},
+ {"push!", D_ldst},
+ {"pushhi!", D_ldst},
+ {"pop!", D_ldst},
+ {"pophi!", D_ldst},
+ {"ldc1", D_ldst},
+ {"ldc2", D_ldst},
+ {"ldc3", D_ldst},
+ {"stc1", D_ldst},
+ {"stc2", D_ldst},
+ {"stc3", D_ldst},
+ {"scb", D_ldst},
+ {"scw", D_ldst},
+ {"sce", D_ldst},
+ /* load combine instruction. */
+ {"lcb", D_ldcombine},
+ {"lcw", D_ldcombine},
+ {"lce", D_ldcombine},
+};
+
+static const struct data_dependency data_dependency_table[] =
+{
+ /* Condition register. */
+ {D_mtcr, "cr1", D_pce, "", 2, 1, 1},
+ {D_mtcr, "cr1", D_cond_br, "", 1, 0, 1},
+ {D_mtcr, "cr1", D_cond_mv, "", 1, 0, 1},
+ /* Status regiser. */
+ {D_mtcr, "cr0", D_all_insn, "", 5, 4, 0},
+ /* CCR regiser. */
+ {D_mtcr, "cr4", D_all_insn, "", 6, 5, 0},
+ /* EntryHi/EntryLo register. */
+ {D_mftlb, "", D_mtptlb, "", 1, 1, 1},
+ {D_mftlb, "", D_mtrtlb, "", 1, 1, 1},
+ {D_mftlb, "", D_stlb, "", 1, 1,1},
+ {D_mftlb, "", D_mfcr, "cr11", 1, 1, 1},
+ {D_mftlb, "", D_mfcr, "cr12", 1, 1, 1},
+ /* Index register. */
+ {D_stlb, "", D_mtptlb, "", 1, 1, 1},
+ {D_stlb, "", D_mftlb, "", 1, 1, 1},
+ {D_stlb, "", D_mfcr, "cr8", 2, 2, 1},
+ /* Cache. */
+ {D_cached, "", D_ldst, "", 1, 1, 0},
+ {D_cached, "", D_ldcombine, "", 1, 1, 0},
+ {D_cachei, "", D_all_insn, "", 5, 4, 0},
+ /* Load combine. */
+ {D_ldcombine, "", D_mfsr, "sr1", 3, 3, 1},
+};
+
+#endif
diff --git a/include/opcode/score-inst.h b/include/opcode/score-inst.h
new file mode 100644
index 000000000000..e87794f77442
--- /dev/null
+++ b/include/opcode/score-inst.h
@@ -0,0 +1,507 @@
+/* score-inst.h -- Score Instructions Table
+ Copyright 2006 Free Software Foundation, Inc.
+ Contributed by:
+ Mei Ligang (ligang@sunnorth.com.cn)
+ Pei-Lin Tsai (pltsai@sunplus.com)
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to the Free
+ Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+ 02110-1301, USA. */
+
+#ifndef SCORE_INST_H
+#define SCORE_INST_H
+
+#define LDST_UNALIGN_MASK 0x0000007f
+#define UA_LCB 0x00000060
+#define UA_LCW 0x00000062
+#define UA_LCE 0x00000066
+#define UA_SCB 0x00000068
+#define UA_SCW 0x0000006a
+#define UA_SCE 0x0000006e
+#define UA_LL 0x0000000c
+#define UA_SC 0x0000000e
+#define LDST16_RR_MASK 0x0000000f
+#define N16_LW 8
+#define N16_LH 9
+#define N16_POP 10
+#define N16_LBU 11
+#define N16_SW 12
+#define N16_SH 13
+#define N16_PUSH 14
+#define N16_SB 15
+#define LDST16_RI_MASK 0x7007
+#define N16_LWP 0x7000
+#define N16_LHP 0x7001
+#define N16_LBUP 0x7003
+#define N16_SWP 0x7004
+#define N16_SHP 0x7005
+#define N16_SBP 0x7007
+#define N16_LIU 0x5000
+
+#define OPC_PSEUDOLDST_MASK 0x00000007
+
+enum
+{
+ INSN_LW = 0,
+ INSN_LH = 1,
+ INSN_LHU = 2,
+ INSN_LB = 3,
+ INSN_SW = 4,
+ INSN_SH = 5,
+ INSN_LBU = 6,
+ INSN_SB = 7,
+};
+
+/* Sub opcdoe opcode. */
+enum
+{
+ INSN16_LBU = 11,
+ INSN16_LH = 9,
+ INSN16_LW = 8,
+ INSN16_SB = 15,
+ INSN16_SH = 13,
+ INSN16_SW = 12,
+};
+
+enum
+{
+ LDST_NOUPDATE = 0,
+ LDST_PRE = 1,
+ LDST_POST = 2,
+};
+
+enum score_insn_type
+{
+ Rd_I4,
+ Rd_I5,
+ Rd_rvalueBP_I5,
+ Rd_lvalueBP_I5,
+ Rd_Rs_I5,
+ x_Rs_I5,
+ x_I5_x,
+ Rd_I8,
+ Rd_Rs_I14,
+ I15,
+ Rd_I16,
+ Rd_rvalueRs_SI10,
+ Rd_lvalueRs_SI10,
+ Rd_rvalueRs_preSI12,
+ Rd_rvalueRs_postSI12,
+ Rd_lvalueRs_preSI12,
+ Rd_lvalueRs_postSI12,
+ Rd_Rs_SI14,
+ Rd_rvalueRs_SI15,
+ Rd_lvalueRs_SI15,
+ Rd_SI16,
+ PC_DISP8div2,
+ PC_DISP11div2,
+ PC_DISP19div2,
+ PC_DISP24div2,
+ Rd_Rs_Rs,
+ x_Rs_x,
+ x_Rs_Rs,
+ Rd_Rs_x,
+ Rd_x_Rs,
+ Rd_x_x,
+ Rd_Rs,
+ Rd_HighRs,
+ Rd_lvalueRs,
+ Rd_rvalueRs,
+ Rd_lvalue32Rs,
+ Rd_rvalue32Rs,
+ x_Rs,
+ NO_OPD,
+ NO16_OPD,
+ OP5_rvalueRs_SI15,
+ I5_Rs_Rs_I5_OP5,
+ x_rvalueRs_post4,
+ Rd_rvalueRs_post4,
+ Rd_x_I5,
+ Rd_lvalueRs_post4,
+ x_lvalueRs_post4,
+ Rd_LowRs,
+ Rd_Rs_Rs_imm,
+ Insn_Type_PCE,
+ Insn_Type_SYN,
+ Insn_GP,
+ Insn_PIC,
+ Insn_internal,
+};
+
+enum score_data_type
+{
+ _IMM4 = 0,
+ _IMM5,
+ _IMM8,
+ _IMM14,
+ _IMM15,
+ _IMM16,
+ _SIMM10 = 6,
+ _SIMM12,
+ _SIMM14,
+ _SIMM15,
+ _SIMM16,
+ _SIMM14_NEG = 11,
+ _IMM16_NEG,
+ _SIMM16_NEG,
+ _IMM20,
+ _IMM25,
+ _DISP8div2 = 16,
+ _DISP11div2,
+ _DISP19div2,
+ _DISP24div2,
+ _VALUE,
+ _VALUE_HI16,
+ _VALUE_LO16,
+ _VALUE_LDST_LO16 = 23,
+ _SIMM16_LA,
+ _IMM5_RSHIFT_1,
+ _IMM5_RSHIFT_2,
+ _SIMM16_LA_POS,
+ _IMM5_RANGE_8_31,
+ _IMM10_RSHIFT_2,
+ _GP_IMM15 = 30,
+ _GP_IMM14 = 31,
+ _SIMM16_pic = 42, /* Index in score_df_range. */
+ _IMM16_LO16_pic = 43,
+ _IMM16_pic = 44,
+};
+
+#define REG_TMP 1
+
+#define OP_REG_TYPE (1 << 6)
+#define OP_IMM_TYPE (1 << 7)
+#define OP_SH_REGD (OP_REG_TYPE |20)
+#define OP_SH_REGS1 (OP_REG_TYPE |15)
+#define OP_SH_REGS2 (OP_REG_TYPE |10)
+#define OP_SH_I (OP_IMM_TYPE | 1)
+#define OP_SH_RI15 (OP_IMM_TYPE | 0)
+#define OP_SH_I12 (OP_IMM_TYPE | 3)
+#define OP_SH_DISP24 (OP_IMM_TYPE | 1)
+#define OP_SH_DISP19_p1 (OP_IMM_TYPE |15)
+#define OP_SH_DISP19_p2 (OP_IMM_TYPE | 1)
+#define OP_SH_I5 (OP_IMM_TYPE |10)
+#define OP_SH_I10 (OP_IMM_TYPE | 5)
+#define OP_SH_COPID (OP_IMM_TYPE | 5)
+#define OP_SH_TRAPI5 (OP_IMM_TYPE |15)
+#define OP_SH_I15 (OP_IMM_TYPE |10)
+
+#define OP16_SH_REGD (OP_REG_TYPE | 8)
+#define OP16_SH_REGS1 (OP_REG_TYPE | 4)
+#define OP16_SH_I45 (OP_IMM_TYPE | 3)
+#define OP16_SH_I8 (OP_IMM_TYPE | 0)
+#define OP16_SH_DISP8 (OP_IMM_TYPE | 0)
+#define OP16_SH_DISP11 (OP_IMM_TYPE | 1)
+
+struct datafield_range
+{
+ int data_type;
+ int bits;
+ int range[2];
+};
+
+struct datafield_range score_df_range[] =
+{
+ {_IMM4, 4, {0, (1 << 4) - 1}}, /* ( 0 ~ 15 ) */
+ {_IMM5, 5, {0, (1 << 5) - 1}}, /* ( 0 ~ 31 ) */
+ {_IMM8, 8, {0, (1 << 8) - 1}}, /* ( 0 ~ 255 ) */
+ {_IMM14, 14, {0, (1 << 14) - 1}}, /* ( 0 ~ 16383) */
+ {_IMM15, 15, {0, (1 << 15) - 1}}, /* ( 0 ~ 32767) */
+ {_IMM16, 16, {0, (1 << 16) - 1}}, /* ( 0 ~ 65535) */
+ {_SIMM10, 10, {-(1 << 9), (1 << 9) - 1}}, /* ( -512 ~ 511 ) */
+ {_SIMM12, 12, {-(1 << 11), (1 << 11) - 1}}, /* ( -2048 ~ 2047 ) */
+ {_SIMM14, 14, {-(1 << 13), (1 << 13) - 1}}, /* ( -8192 ~ 8191 ) */
+ {_SIMM15, 15, {-(1 << 14), (1 << 14) - 1}}, /* (-16384 ~ 16383) */
+ {_SIMM16, 16, {-(1 << 15), (1 << 15) - 1}}, /* (-32768 ~ 32767) */
+ {_SIMM14_NEG, 14, {-(1 << 13), (1 << 13) - 1}}, /* ( -8191 ~ 8192 ) */
+ {_IMM16_NEG, 16, {0, (1 << 16) - 1}}, /* (-65535 ~ 0 ) */
+ {_SIMM16_NEG, 16, {-(1 << 15), (1 << 15) - 1}}, /* (-32768 ~ 32767) */
+ {_IMM20, 20, {0, (1 << 20) - 1}},
+ {_IMM25, 25, {0, (1 << 25) - 1}},
+ {_DISP8div2, 8, {-(1 << 8), (1 << 8) - 1}}, /* ( -256 ~ 255 ) */
+ {_DISP11div2, 11, {0, 0}},
+ {_DISP19div2, 19, {-(1 << 19), (1 << 19) - 1}}, /* (-524288 ~ 524287) */
+ {_DISP24div2, 24, {0, 0}},
+ {_VALUE, 32, {0, ((unsigned int)1 << 31) - 1}},
+ {_VALUE_HI16, 16, {0, (1 << 16) - 1}},
+ {_VALUE_LO16, 16, {0, (1 << 16) - 1}},
+ {_VALUE_LDST_LO16, 16, {0, (1 << 16) - 1}},
+ {_SIMM16_LA, 16, {-(1 << 15), (1 << 15) - 1}}, /* (-32768 ~ 32767) */
+ {_IMM5_RSHIFT_1, 5, {0, (1 << 6) - 1}}, /* ( 0 ~ 63 ) */
+ {_IMM5_RSHIFT_2, 5, {0, (1 << 7) - 1}}, /* ( 0 ~ 127 ) */
+ {_SIMM16_LA_POS, 16, {0, (1 << 15) - 1}}, /* ( 0 ~ 32767) */
+ {_IMM5_RANGE_8_31, 5, {8, 31}}, /* But for cop0 the valid data : (8 ~ 31). */
+ {_IMM10_RSHIFT_2, 10, {-(1 << 11), (1 << 11) - 1}}, /* For ldc#, stc#. */
+ {_SIMM10, 10, {0, (1 << 10) - 1}}, /* ( -1024 ~ 1023 ) */
+ {_SIMM12, 12, {0, (1 << 12) - 1}}, /* ( -2048 ~ 2047 ) */
+ {_SIMM14, 14, {0, (1 << 14) - 1}}, /* ( -8192 ~ 8191 ) */
+ {_SIMM15, 15, {0, (1 << 15) - 1}}, /* (-16384 ~ 16383) */
+ {_SIMM16, 16, {0, (1 << 16) - 1}}, /* (-65536 ~ 65536) */
+ {_SIMM14_NEG, 14, {0, (1 << 16) - 1}}, /* ( -8191 ~ 8192 ) */
+ {_IMM16_NEG, 16, {0, (1 << 16) - 1}}, /* ( 65535 ~ 0 ) */
+ {_SIMM16_NEG, 16, {0, (1 << 16) - 1}}, /* ( 65535 ~ 0 ) */
+ {_IMM20, 20, {0, (1 << 20) - 1}}, /* (-32768 ~ 32767) */
+ {_IMM25, 25, {0, (1 << 25) - 1}}, /* (-32768 ~ 32767) */
+ {_GP_IMM15, 15, {0, (1 << 15) - 1}}, /* ( 0 ~ 65535) */
+ {_GP_IMM14, 14, {0, (1 << 14) - 1}}, /* ( 0 ~ 65535) */
+ {_SIMM16_pic, 16, {-(1 << 15), (1 << 15) - 1}}, /* (-32768 ~ 32767) */
+ {_IMM16_LO16_pic, 16, {0, (1 << 16) - 1}}, /* ( 65535 ~ 0 ) */
+ {_IMM16_pic, 16, {0, (1 << 16) - 1}}, /* ( 0 ~ 65535) */
+};
+
+struct shift_bitmask
+{
+ int opd_type;
+ int opd_num;
+ struct datafield_range *df_range;
+ int sh[4];
+ long fieldbits[4];
+};
+
+struct shift_bitmask score_sh_bits_map[] =
+{
+ {
+ Rd_I4, 2, &score_df_range[_IMM4],
+ {OP16_SH_REGD, OP16_SH_I45, 0, 0},
+ {0xf, 0xf, 0, 0},
+ },
+ {
+ Rd_I5, 2, &score_df_range[_IMM5],
+ {OP16_SH_REGD, OP16_SH_I45, 0, 0},
+ {0xf, 0x1f, 0, 0},
+ },
+ {
+ Rd_rvalueBP_I5, 2, &score_df_range[_IMM5],
+ {OP16_SH_REGD, OP16_SH_I45, 0, 0},
+ {0xf, 0x1f, 0, 0},
+ },
+ {
+ Rd_lvalueBP_I5, 2, &score_df_range[_IMM5],
+ {OP16_SH_REGD, OP16_SH_I45, 0, 0},
+ {0xf, 0x1f, 0, 0},
+ },
+ {
+ Rd_Rs_I5, 3, &score_df_range[_IMM5],
+ {OP_SH_REGD, OP_SH_REGS1, OP_SH_I5, 0},
+ {0x1f, 0x1f, 0x1f, 0},
+ },
+ {
+ x_Rs_I5, 2, &score_df_range[_IMM5],
+ {OP_SH_REGS1, OP_SH_I5, 0, 0},
+ {0x1f, 0x1f, 0, 0},
+ },
+ {
+ x_I5_x, 1, &score_df_range[_IMM5],
+ {OP_SH_TRAPI5, 0, 0, 0},
+ {0x1f, 0, 0, 0},
+ },
+ {
+ Rd_I8, 2, &score_df_range[_IMM8],
+ {OP16_SH_REGD, OP16_SH_I8, 0, 0},
+ {0xf, 0xff, 0, 0},
+ },
+ {
+ Rd_Rs_I14, 3, &score_df_range[_IMM14],
+ {OP_SH_REGD, OP_SH_REGS1, OP_SH_I, 0},
+ {0x1f, 0x1f, 0x3fff, 0},
+ },
+ {
+ I15, 1, &score_df_range[_IMM15],
+ {OP_SH_I15, 0, 0, 0},
+ {0x7fff, 0, 0, 0},
+ },
+ {
+ Rd_I16, 2, &score_df_range[_IMM16],
+ {OP_SH_REGD, OP_SH_I, 0, 0},
+ {0x1f, 0xffff, 0, 0},
+ },
+ {
+ Rd_rvalueRs_SI10, 3, &score_df_range[_SIMM10],
+ {OP_SH_REGD, OP_SH_REGS1, OP_SH_I10, 0},
+ {0x1f, 0x1f, 0x3ff, 0},
+ },
+ {
+ Rd_lvalueRs_SI10, 3, &score_df_range[_SIMM10],
+ {OP_SH_REGD, OP_SH_REGS1, OP_SH_I10, 0},
+ {0x1f, 0x1f, 0x3ff, 0},
+ },
+ {
+ Rd_rvalueRs_preSI12, 3, &score_df_range[_SIMM12],
+ {OP_SH_REGD, OP_SH_REGS1, OP_SH_I12, 0},
+ {0xf, 0xf, 0xfff, 0},
+ },
+ {
+ Rd_rvalueRs_postSI12, 3, &score_df_range[_SIMM12],
+ {OP_SH_REGD, OP_SH_REGS1, OP_SH_I12, 0},
+ {0xf, 0xf, 0xfff, 0},
+ },
+ {
+ Rd_lvalueRs_preSI12, 3, &score_df_range[_SIMM12],
+ {OP_SH_REGD, OP_SH_REGS1, OP_SH_I12, 0},
+ {0xf, 0xf, 0xfff, 0},
+ },
+ {
+ Rd_lvalueRs_postSI12, 3, &score_df_range[_SIMM12],
+ {OP_SH_REGD, OP_SH_REGS1, OP_SH_I12, 0},
+ {0xf, 0xf, 0xfff, 0},
+ },
+ {
+ Rd_Rs_SI14, 3, &score_df_range[_SIMM14],
+ {OP_SH_REGD, OP_SH_REGS1, OP_SH_I, 0},
+ {0x1f, 0x1f, 0x3fff, 0},
+ },
+ {
+ Rd_rvalueRs_SI15, 3, &score_df_range[_SIMM15],
+ {OP_SH_REGD, OP_SH_REGS1, OP_SH_RI15, 0},
+ {0x1f, 0x1f, 0x7fff, 0},
+ },
+ {
+ Rd_lvalueRs_SI15, 3, &score_df_range[_SIMM15],
+ {OP_SH_REGD, OP_SH_REGS1, OP_SH_RI15, 0},
+ {0x1f, 0x1f, 0x7fff, 0},
+ },
+ {
+ Rd_SI16, 2, &score_df_range[_SIMM16],
+ {OP_SH_REGD, OP_SH_I, 0, 0},
+ {0x1f, 0xffff, 0, 0},
+ },
+ {
+ PC_DISP8div2, 1, &score_df_range[_DISP8div2],
+ {OP16_SH_DISP8, 0, 0, 0},
+ {0xff, 0, 0, 0},
+ },
+ {
+ PC_DISP11div2, 1, &score_df_range[_DISP11div2],
+ {OP16_SH_DISP11, 0, 0, 0},
+ {0x7ff, 0, 0, 0},
+ },
+ {
+ PC_DISP19div2, 2, &score_df_range[_DISP19div2],
+ {OP_SH_DISP19_p1, OP_SH_DISP19_p2, 0, 0},
+ {0x3ff, 0x1ff, 0, 0},
+ },
+ {
+ PC_DISP24div2, 1, &score_df_range[_DISP24div2],
+ {OP_SH_DISP24, 0, 0, 0},
+ {0xffffff, 0, 0, 0},
+ },
+ {
+ Rd_Rs_Rs, 3, NULL,
+ {OP_SH_REGD, OP_SH_REGS1, OP_SH_REGS2, 0},
+ {0x1f, 0x1f, 0x1f, 0}
+ },
+ {
+ Rd_Rs_x, 2, NULL,
+ {OP_SH_REGD, OP_SH_REGS1, 0, 0},
+ {0x1f, 0x1f, 0, 0},
+ },
+ {
+ Rd_x_Rs, 2, NULL,
+ {OP_SH_REGD, OP_SH_REGS2, 0, 0},
+ {0x1f, 0x1f, 0, 0},
+ },
+ {
+ Rd_x_x, 1, NULL,
+ {OP_SH_REGD, 0, 0, 0},
+ {0x1f, 0, 0, 0},
+ },
+ {
+ x_Rs_Rs, 2, NULL,
+ {OP_SH_REGS1, OP_SH_REGS2, 0, 0},
+ {0x1f, 0x1f, 0, 0},
+ },
+ {
+ x_Rs_x, 1, NULL,
+ {OP_SH_REGS1, 0, 0, 0},
+ {0x1f, 0, 0, 0},
+ },
+ {
+ Rd_Rs, 2, NULL,
+ {OP16_SH_REGD, OP16_SH_REGS1, 0, 0},
+ {0xf, 0xf, 0, 0},
+ },
+ {
+ Rd_HighRs, 2, NULL,
+ {OP16_SH_REGD, OP16_SH_REGS1, 0, 0},
+ {0xf, 0xf, 0x1f, 0},
+ },
+ {
+ Rd_rvalueRs, 2, NULL,
+ {OP16_SH_REGD, OP16_SH_REGS1, 0, 0},
+ {0xf, 0xf, 0, 0},
+ },
+ {
+ Rd_lvalueRs, 2, NULL,
+ {OP16_SH_REGD, OP16_SH_REGS1, 0, 0},
+ {0xf, 0xf, 0, 0}
+ },
+ {
+ Rd_lvalue32Rs, 2, NULL,
+ {OP_SH_REGD, OP_SH_REGS1, 0, 0},
+ {0x1f, 0x1f, 0, 0},
+ },
+ {
+ Rd_rvalue32Rs, 2, NULL,
+ {OP_SH_REGD, OP_SH_REGS1, 0, 0},
+ {0x1f, 0x1f, 0, 0},
+ },
+ {
+ x_Rs, 1, NULL,
+ {OP16_SH_REGS1, 0, 0, 0},
+ {0xf, 0, 0, 0},
+ },
+ {
+ NO_OPD, 0, NULL,
+ {0, 0, 0, 0},
+ {0, 0, 0, 0},
+ },
+ {
+ NO16_OPD, 0, NULL,
+ {0, 0, 0, 0},
+ {0, 0, 0, 0},
+ },
+};
+
+struct asm_opcode
+{
+ /* Instruction name. */
+ const char *template;
+
+ /* Instruction Opcode. */
+ unsigned long value;
+
+ /* Instruction bit mask. */
+ unsigned long bitmask;
+
+ /* Relax instruction opcode. 0x8000 imply no relaxation. */
+ unsigned long relax_value;
+
+ /* Instruction type. */
+ enum score_insn_type type;
+
+ /* Function to call to parse args. */
+ void (*parms) (char *);
+};
+
+enum insn_class
+{
+ INSN_CLASS_16,
+ INSN_CLASS_32,
+ INSN_CLASS_PCE,
+ INSN_CLASS_SYN
+};
+
+#endif
diff --git a/include/opcode/spu-insns.h b/include/opcode/spu-insns.h
new file mode 100644
index 000000000000..237d8ab81055
--- /dev/null
+++ b/include/opcode/spu-insns.h
@@ -0,0 +1,417 @@
+/* SPU ELF support for BFD.
+
+ Copyright 2006, 2007 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* SPU Opcode Table
+
+-=-=-= FORMAT =-=-=-
+
+ +----+-------+-------+-------+-------+ +------------+-------+-------+-------+
+RRR | op | RC | RB | RA | RT | RI7 | op | I7 | RA | RT |
+ +----+-------+-------+-------+-------+ +------------+-------+-------+-------+
+ 0 3 1 1 2 3 0 1 1 2 3
+ 0 7 4 1 0 7 4 1
+
+ +-----------+--------+-------+-------+ +---------+----------+-------+-------+
+RI8 | op | I8 | RA | RT | RI10 | op | I10 | RA | RT |
+ +-----------+--------+-------+-------+ +---------+----------+-------+-------+
+ 0 9 1 2 3 0 7 1 2 3
+ 7 4 1 7 4 1
+
+ +----------+-----------------+-------+ +--------+-------------------+-------+
+RI16 | op | I16 | RT | RI18 | op | I18 | RT |
+ +----------+-----------------+-------+ +--------+-------------------+-------+
+ 0 8 2 3 0 6 2 3
+ 4 1 4 1
+
+ +------------+-------+-------+-------+ +-------+--+-----------------+-------+
+RR | op | RB | RA | RT | LBT | op |RO| I16 | RO |
+ +------------+-------+-------+-------+ +-------+--+-----------------+-------+
+ 0 1 1 2 3 0 6 8 2 3
+ 0 7 4 1 4 1
+
+ +------------+----+--+-------+-------+
+ LBTI | op | // |RO| RA | RO |
+ +------------+----+--+-------+-------+
+ 0 1 1 1 2 3
+ 0 5 7 4 1
+
+-=-=-= OPCODE =-=-=-
+
+OPCODE field specifies the most significant 11bit of the instruction. Some formats don't have 11bits for opcode field, and in this
+case, bit field other than op are defined as 0s. For example, opcode of fma instruction which is RRR format is defined as 0x700,
+since 0x700 -> 11'b11100000000, this means opcode is 4'b1110, and other 7bits are defined as 7'b0000000.
+
+-=-=-= ASM_FORMAT =-=-=-
+
+RRR category RI7 category
+ ASM_RRR mnemonic RC, RA, RB, RT ASM_RI4 mnemonic RT, RA, I4
+ ASM_RI7 mnemonic RT, RA, I7
+
+RI8 category RI10 category
+ ASM_RUI8 mnemonic RT, RA, UI8 ASM_AI10 mnemonic RA, I10
+ ASM_RI10 mnemonic RT, RA, R10
+ ASM_RI10IDX mnemonic RT, I10(RA)
+
+RI16 category RI18 category
+ ASM_I16W mnemonic I16W ASM_RI18 mnemonic RT, I18
+ ASM_RI16 mnemonic RT, I16
+ ASM_RI16W mnemonic RT, I16W
+
+RR category LBT category
+ ASM_MFSPR mnemonic RT, SA ASM_LBT mnemonic brinst, brtarg
+ ASM_MTSPR mnemonic SA, RT
+ ASM_NOOP mnemonic LBTI category
+ ASM_RA mnemonic RA ASM_LBTI mnemonic brinst, RA
+ ASM_RAB mnemonic RA, RB
+ ASM_RDCH mnemonic RT, CA
+ ASM_RR mnemonic RT, RA, RB
+ ASM_RT mnemonic RT
+ ASM_RTA mnemonic RT, RA
+ ASM_WRCH mnemonic CA, RT
+
+Note that RRR instructions have the names for RC and RT reversed from
+what's in the ISA, in order to put RT in the same position it appears
+for other formats.
+
+-=-=-= DEPENDENCY =-=-=-
+
+DEPENDENCY filed consists of 5 digits. This represents which register is used as source and which register is used as target.
+The first(most significant) digit is always 0. Then it is followd by RC, RB, RA and RT digits.
+If the digit is 0, this means the corresponding register is not used in the instruction.
+If the digit is 1, this means the corresponding register is used as a source in the instruction.
+If the digit is 2, this means the corresponding register is used as a target in the instruction.
+If the digit is 3, this means the corresponding register is used as both source and target in the instruction.
+For example, fms instruction has 00113 as the DEPENDENCY field. This means RC is not used in this operation, RB and RA are
+used as sources and RT is the target.
+
+-=-=-= PIPE =-=-=-
+
+This field shows which execution pipe is used for the instruction
+
+pipe0 execution pipelines:
+ FP6 SP floating pipeline
+ FP7 integer operations executed in SP floating pipeline
+ FPD DP floating pipeline
+ FX2 FXU pipeline
+ FX3 Rotate/Shift pipeline
+ FXB Byte pipeline
+ NOP No pipeline
+
+pipe1 execution pipelines:
+ BR Branch pipeline
+ LNOP No pipeline
+ LS Load/Store pipeline
+ SHUF Shuffle pipeline
+ SPR SPR/CH pipeline
+
+*/
+
+#define _A0() {0}
+#define _A1(a) {1,a}
+#define _A2(a,b) {2,a,b}
+#define _A3(a,b,c) {3,a,b,c}
+#define _A4(a,b,c,d) {4,a,b,c,d}
+
+/* TAG FORMAT OPCODE MNEMONIC ASM_FORMAT DEPENDENCY PIPE COMMENT */
+/* 0[RC][RB][RA][RT] */
+/* 1:src, 2:target */
+
+APUOP(M_BR, RI16, 0x190, "br", _A1(A_R18), 00000, BR) /* BRel IP<-IP+I16 */
+APUOP(M_BRSL, RI16, 0x198, "brsl", _A2(A_T,A_R18), 00002, BR) /* BRelSetLink RT,IP<-IP,IP+I16 */
+APUOP(M_BRA, RI16, 0x180, "bra", _A1(A_S18), 00000, BR) /* BRAbs IP<-I16 */
+APUOP(M_BRASL, RI16, 0x188, "brasl", _A2(A_T,A_S18), 00002, BR) /* BRAbsSetLink RT,IP<-IP,I16 */
+APUOP(M_FSMBI, RI16, 0x194, "fsmbi", _A2(A_T,A_X16), 00002, SHUF) /* FormSelMask%I RT<-fsm(I16) */
+APUOP(M_LQA, RI16, 0x184, "lqa", _A2(A_T,A_S18), 00002, LS) /* LoadQAbs RT<-M[I16] */
+APUOP(M_LQR, RI16, 0x19C, "lqr", _A2(A_T,A_R18), 00002, LS) /* LoadQRel RT<-M[IP+I16] */
+APUOP(M_STOP, RR, 0x000, "stop", _A0(), 00000, BR) /* STOP stop */
+APUOP(M_STOP2, RR, 0x000, "stop", _A1(A_U14), 00000, BR) /* STOP stop */
+APUOP(M_STOPD, RR, 0x140, "stopd", _A3(A_T,A_A,A_B), 00111, BR) /* STOPD stop (with register dependencies) */
+APUOP(M_LNOP, RR, 0x001, "lnop", _A0(), 00000, LNOP) /* LNOP no_operation */
+APUOP(M_SYNC, RR, 0x002, "sync", _A0(), 00000, BR) /* SYNC flush_pipe */
+APUOP(M_DSYNC, RR, 0x003, "dsync", _A0(), 00000, BR) /* DSYNC flush_store_queue */
+APUOP(M_MFSPR, RR, 0x00c, "mfspr", _A2(A_T,A_S), 00002, SPR) /* MFSPR RT<-SA */
+APUOP(M_RDCH, RR, 0x00d, "rdch", _A2(A_T,A_H), 00002, SPR) /* ReaDCHannel RT<-CA:data */
+APUOP(M_RCHCNT, RR, 0x00f, "rchcnt", _A2(A_T,A_H), 00002, SPR) /* ReaDCHanCouNT RT<-CA:count */
+APUOP(M_HBRA, LBT, 0x080, "hbra", _A2(A_S11,A_S18), 00000, LS) /* HBRA BTB[B9]<-M[I16] */
+APUOP(M_HBRR, LBT, 0x090, "hbrr", _A2(A_S11,A_R18), 00000, LS) /* HBRR BTB[B9]<-M[IP+I16] */
+APUOP(M_BRZ, RI16, 0x100, "brz", _A2(A_T,A_R18), 00001, BR) /* BRZ IP<-IP+I16_if(RT) */
+APUOP(M_BRNZ, RI16, 0x108, "brnz", _A2(A_T,A_R18), 00001, BR) /* BRNZ IP<-IP+I16_if(RT) */
+APUOP(M_BRHZ, RI16, 0x110, "brhz", _A2(A_T,A_R18), 00001, BR) /* BRHZ IP<-IP+I16_if(RT) */
+APUOP(M_BRHNZ, RI16, 0x118, "brhnz", _A2(A_T,A_R18), 00001, BR) /* BRHNZ IP<-IP+I16_if(RT) */
+APUOP(M_STQA, RI16, 0x104, "stqa", _A2(A_T,A_S18), 00001, LS) /* SToreQAbs M[I16]<-RT */
+APUOP(M_STQR, RI16, 0x11C, "stqr", _A2(A_T,A_R18), 00001, LS) /* SToreQRel M[IP+I16]<-RT */
+APUOP(M_MTSPR, RR, 0x10c, "mtspr", _A2(A_S,A_T), 00001, SPR) /* MTSPR SA<-RT */
+APUOP(M_WRCH, RR, 0x10d, "wrch", _A2(A_H,A_T), 00001, SPR) /* ChanWRite CA<-RT */
+APUOP(M_LQD, RI10, 0x1a0, "lqd", _A4(A_T,A_S14,A_P,A_A), 00012, LS) /* LoadQDisp RT<-M[Ra+I10] */
+APUOP(M_BI, RR, 0x1a8, "bi", _A1(A_A), 00010, BR) /* BI IP<-RA */
+APUOP(M_BISL, RR, 0x1a9, "bisl", _A2(A_T,A_A), 00012, BR) /* BISL RT,IP<-IP,RA */
+APUOP(M_IRET, RR, 0x1aa, "iret", _A1(A_A), 00010, BR) /* IRET IP<-SRR0 */
+APUOP(M_IRET2, RR, 0x1aa, "iret", _A0(), 00010, BR) /* IRET IP<-SRR0 */
+APUOP(M_BISLED, RR, 0x1ab, "bisled", _A2(A_T,A_A), 00012, BR) /* BISLED RT,IP<-IP,RA_if(ext) */
+APUOP(M_HBR, LBTI, 0x1ac, "hbr", _A2(A_S11I,A_A), 00010, LS) /* HBR BTB[B9]<-M[Ra] */
+APUOP(M_FREST, RR, 0x1b8, "frest", _A2(A_T,A_A), 00012, SHUF) /* FREST RT<-recip(RA) */
+APUOP(M_FRSQEST, RR, 0x1b9, "frsqest", _A2(A_T,A_A), 00012, SHUF) /* FRSQEST RT<-rsqrt(RA) */
+APUOP(M_FSM, RR, 0x1b4, "fsm", _A2(A_T,A_A), 00012, SHUF) /* FormSelMask% RT<-expand(Ra) */
+APUOP(M_FSMH, RR, 0x1b5, "fsmh", _A2(A_T,A_A), 00012, SHUF) /* FormSelMask% RT<-expand(Ra) */
+APUOP(M_FSMB, RR, 0x1b6, "fsmb", _A2(A_T,A_A), 00012, SHUF) /* FormSelMask% RT<-expand(Ra) */
+APUOP(M_GB, RR, 0x1b0, "gb", _A2(A_T,A_A), 00012, SHUF) /* GatherBits% RT<-gather(RA) */
+APUOP(M_GBH, RR, 0x1b1, "gbh", _A2(A_T,A_A), 00012, SHUF) /* GatherBits% RT<-gather(RA) */
+APUOP(M_GBB, RR, 0x1b2, "gbb", _A2(A_T,A_A), 00012, SHUF) /* GatherBits% RT<-gather(RA) */
+APUOP(M_CBD, RI7, 0x1f4, "cbd", _A4(A_T,A_U7,A_P,A_A), 00012, SHUF) /* genCtl%%insD RT<-sta(Ra+I4,siz) */
+APUOP(M_CHD, RI7, 0x1f5, "chd", _A4(A_T,A_U7,A_P,A_A), 00012, SHUF) /* genCtl%%insD RT<-sta(Ra+I4,siz) */
+APUOP(M_CWD, RI7, 0x1f6, "cwd", _A4(A_T,A_U7,A_P,A_A), 00012, SHUF) /* genCtl%%insD RT<-sta(Ra+I4,siz) */
+APUOP(M_CDD, RI7, 0x1f7, "cdd", _A4(A_T,A_U7,A_P,A_A), 00012, SHUF) /* genCtl%%insD RT<-sta(Ra+I4,siz) */
+APUOP(M_ROTQBII, RI7, 0x1f8, "rotqbii", _A3(A_T,A_A,A_U3), 00012, SHUF) /* ROTQBII RT<-RA<<<I7 */
+APUOP(M_ROTQBYI, RI7, 0x1fc, "rotqbyi", _A3(A_T,A_A,A_S7N), 00012, SHUF) /* ROTQBYI RT<-RA<<<(I7*8) */
+APUOP(M_ROTQMBII, RI7, 0x1f9, "rotqmbii", _A3(A_T,A_A,A_S3), 00012, SHUF) /* ROTQMBII RT<-RA<<I7 */
+APUOP(M_ROTQMBYI, RI7, 0x1fd, "rotqmbyi", _A3(A_T,A_A,A_S6), 00012, SHUF) /* ROTQMBYI RT<-RA<<I7 */
+APUOP(M_SHLQBII, RI7, 0x1fb, "shlqbii", _A3(A_T,A_A,A_U3), 00012, SHUF) /* SHLQBII RT<-RA<<I7 */
+APUOP(M_SHLQBYI, RI7, 0x1ff, "shlqbyi", _A3(A_T,A_A,A_U5), 00012, SHUF) /* SHLQBYI RT<-RA<<I7 */
+APUOP(M_STQD, RI10, 0x120, "stqd", _A4(A_T,A_S14,A_P,A_A), 00011, LS) /* SToreQDisp M[Ra+I10]<-RT */
+APUOP(M_BIHNZ, RR, 0x12b, "bihnz", _A2(A_T,A_A), 00011, BR) /* BIHNZ IP<-RA_if(RT) */
+APUOP(M_BIHZ, RR, 0x12a, "bihz", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */
+APUOP(M_BINZ, RR, 0x129, "binz", _A2(A_T,A_A), 00011, BR) /* BINZ IP<-RA_if(RT) */
+APUOP(M_BIZ, RR, 0x128, "biz", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */
+APUOP(M_CBX, RR, 0x1d4, "cbx", _A3(A_T,A_A,A_B), 00112, SHUF) /* genCtl%%insX RT<-sta(Ra+Rb,siz) */
+APUOP(M_CHX, RR, 0x1d5, "chx", _A3(A_T,A_A,A_B), 00112, SHUF) /* genCtl%%insX RT<-sta(Ra+Rb,siz) */
+APUOP(M_CWX, RR, 0x1d6, "cwx", _A3(A_T,A_A,A_B), 00112, SHUF) /* genCtl%%insX RT<-sta(Ra+Rb,siz) */
+APUOP(M_CDX, RR, 0x1d7, "cdx", _A3(A_T,A_A,A_B), 00112, SHUF) /* genCtl%%insX RT<-sta(Ra+Rb,siz) */
+APUOP(M_LQX, RR, 0x1c4, "lqx", _A3(A_T,A_A,A_B), 00112, LS) /* LoadQindeX RT<-M[Ra+Rb] */
+APUOP(M_ROTQBI, RR, 0x1d8, "rotqbi", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQBI RT<-RA<<<Rb */
+APUOP(M_ROTQMBI, RR, 0x1d9, "rotqmbi", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQMBI RT<-RA<<Rb */
+APUOP(M_SHLQBI, RR, 0x1db, "shlqbi", _A3(A_T,A_A,A_B), 00112, SHUF) /* SHLQBI RT<-RA<<Rb */
+APUOP(M_ROTQBY, RR, 0x1dc, "rotqby", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQBY RT<-RA<<<(Rb*8) */
+APUOP(M_ROTQMBY, RR, 0x1dd, "rotqmby", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQMBY RT<-RA<<Rb */
+APUOP(M_SHLQBY, RR, 0x1df, "shlqby", _A3(A_T,A_A,A_B), 00112, SHUF) /* SHLQBY RT<-RA<<Rb */
+APUOP(M_ROTQBYBI, RR, 0x1cc, "rotqbybi", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQBYBI RT<-RA<<Rb */
+APUOP(M_ROTQMBYBI, RR, 0x1cd, "rotqmbybi", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQMBYBI RT<-RA<<Rb */
+APUOP(M_SHLQBYBI, RR, 0x1cf, "shlqbybi", _A3(A_T,A_A,A_B), 00112, SHUF) /* SHLQBYBI RT<-RA<<Rb */
+APUOP(M_STQX, RR, 0x144, "stqx", _A3(A_T,A_A,A_B), 00111, LS) /* SToreQindeX M[Ra+Rb]<-RT */
+APUOP(M_SHUFB, RRR, 0x580, "shufb", _A4(A_C,A_A,A_B,A_T), 02111, SHUF) /* SHUFfleBytes RC<-f(RA,RB,RT) */
+APUOP(M_IL, RI16, 0x204, "il", _A2(A_T,A_S16), 00002, FX2) /* ImmLoad RT<-sxt(I16) */
+APUOP(M_ILH, RI16, 0x20c, "ilh", _A2(A_T,A_X16), 00002, FX2) /* ImmLoadH RT<-I16 */
+APUOP(M_ILHU, RI16, 0x208, "ilhu", _A2(A_T,A_X16), 00002, FX2) /* ImmLoadHUpper RT<-I16<<16 */
+APUOP(M_ILA, RI18, 0x210, "ila", _A2(A_T,A_U18), 00002, FX2) /* ImmLoadAddr RT<-zxt(I18) */
+APUOP(M_NOP, RR, 0x201, "nop", _A1(A_T), 00000, NOP) /* XNOP no_operation */
+APUOP(M_NOP2, RR, 0x201, "nop", _A0(), 00000, NOP) /* XNOP no_operation */
+APUOP(M_IOHL, RI16, 0x304, "iohl", _A2(A_T,A_X16), 00003, FX2) /* AddImmeXt RT<-RT+sxt(I16) */
+APUOP(M_ANDBI, RI10, 0x0b0, "andbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* AND%I RT<-RA&I10 */
+APUOP(M_ANDHI, RI10, 0x0a8, "andhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* AND%I RT<-RA&I10 */
+APUOP(M_ANDI, RI10, 0x0a0, "andi", _A3(A_T,A_A,A_S10), 00012, FX2) /* AND%I RT<-RA&I10 */
+APUOP(M_ORBI, RI10, 0x030, "orbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* OR%I RT<-RA|I10 */
+APUOP(M_ORHI, RI10, 0x028, "orhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* OR%I RT<-RA|I10 */
+APUOP(M_ORI, RI10, 0x020, "ori", _A3(A_T,A_A,A_S10), 00012, FX2) /* OR%I RT<-RA|I10 */
+APUOP(M_ORX, RR, 0x1f0, "orx", _A2(A_T,A_A), 00012, BR) /* ORX RT<-RA.w0|RA.w1|RA.w2|RA.w3 */
+APUOP(M_XORBI, RI10, 0x230, "xorbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* XOR%I RT<-RA^I10 */
+APUOP(M_XORHI, RI10, 0x228, "xorhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* XOR%I RT<-RA^I10 */
+APUOP(M_XORI, RI10, 0x220, "xori", _A3(A_T,A_A,A_S10), 00012, FX2) /* XOR%I RT<-RA^I10 */
+APUOP(M_AHI, RI10, 0x0e8, "ahi", _A3(A_T,A_A,A_S10), 00012, FX2) /* Add%Immed RT<-RA+I10 */
+APUOP(M_AI, RI10, 0x0e0, "ai", _A3(A_T,A_A,A_S10), 00012, FX2) /* Add%Immed RT<-RA+I10 */
+APUOP(M_SFHI, RI10, 0x068, "sfhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* SubFrom%Imm RT<-I10-RA */
+APUOP(M_SFI, RI10, 0x060, "sfi", _A3(A_T,A_A,A_S10), 00012, FX2) /* SubFrom%Imm RT<-I10-RA */
+APUOP(M_CGTBI, RI10, 0x270, "cgtbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* CGT%I RT<-(RA>I10) */
+APUOP(M_CGTHI, RI10, 0x268, "cgthi", _A3(A_T,A_A,A_S10), 00012, FX2) /* CGT%I RT<-(RA>I10) */
+APUOP(M_CGTI, RI10, 0x260, "cgti", _A3(A_T,A_A,A_S10), 00012, FX2) /* CGT%I RT<-(RA>I10) */
+APUOP(M_CLGTBI, RI10, 0x2f0, "clgtbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* CLGT%I RT<-(RA>I10) */
+APUOP(M_CLGTHI, RI10, 0x2e8, "clgthi", _A3(A_T,A_A,A_S10), 00012, FX2) /* CLGT%I RT<-(RA>I10) */
+APUOP(M_CLGTI, RI10, 0x2e0, "clgti", _A3(A_T,A_A,A_S10), 00012, FX2) /* CLGT%I RT<-(RA>I10) */
+APUOP(M_CEQBI, RI10, 0x3f0, "ceqbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* CEQ%I RT<-(RA=I10) */
+APUOP(M_CEQHI, RI10, 0x3e8, "ceqhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* CEQ%I RT<-(RA=I10) */
+APUOP(M_CEQI, RI10, 0x3e0, "ceqi", _A3(A_T,A_A,A_S10), 00012, FX2) /* CEQ%I RT<-(RA=I10) */
+APUOP(M_HGTI, RI10, 0x278, "hgti", _A3(A_T,A_A,A_S10), 00010, FX2) /* HaltGTI halt_if(RA>I10) */
+APUOP(M_HGTI2, RI10, 0x278, "hgti", _A2(A_A,A_S10), 00010, FX2) /* HaltGTI halt_if(RA>I10) */
+APUOP(M_HLGTI, RI10, 0x2f8, "hlgti", _A3(A_T,A_A,A_S10), 00010, FX2) /* HaltLGTI halt_if(RA>I10) */
+APUOP(M_HLGTI2, RI10, 0x2f8, "hlgti", _A2(A_A,A_S10), 00010, FX2) /* HaltLGTI halt_if(RA>I10) */
+APUOP(M_HEQI, RI10, 0x3f8, "heqi", _A3(A_T,A_A,A_S10), 00010, FX2) /* HaltEQImm halt_if(RA=I10) */
+APUOP(M_HEQI2, RI10, 0x3f8, "heqi", _A2(A_A,A_S10), 00010, FX2) /* HaltEQImm halt_if(RA=I10) */
+APUOP(M_MPYI, RI10, 0x3a0, "mpyi", _A3(A_T,A_A,A_S10), 00012, FP7) /* MPYI RT<-RA*I10 */
+APUOP(M_MPYUI, RI10, 0x3a8, "mpyui", _A3(A_T,A_A,A_S10), 00012, FP7) /* MPYUI RT<-RA*I10 */
+APUOP(M_CFLTS, RI8, 0x3b0, "cflts", _A3(A_T,A_A,A_U7A), 00012, FP7) /* CFLTS RT<-int(RA,I8) */
+APUOP(M_CFLTU, RI8, 0x3b2, "cfltu", _A3(A_T,A_A,A_U7A), 00012, FP7) /* CFLTU RT<-int(RA,I8) */
+APUOP(M_CSFLT, RI8, 0x3b4, "csflt", _A3(A_T,A_A,A_U7B), 00012, FP7) /* CSFLT RT<-flt(RA,I8) */
+APUOP(M_CUFLT, RI8, 0x3b6, "cuflt", _A3(A_T,A_A,A_U7B), 00012, FP7) /* CUFLT RT<-flt(RA,I8) */
+APUOP(M_FESD, RR, 0x3b8, "fesd", _A2(A_T,A_A), 00012, FPD) /* FESD RT<-double(RA) */
+APUOP(M_FRDS, RR, 0x3b9, "frds", _A2(A_T,A_A), 00012, FPD) /* FRDS RT<-single(RA) */
+APUOP(M_FSCRRD, RR, 0x398, "fscrrd", _A1(A_T), 00002, FPD) /* FSCRRD RT<-FP_status */
+APUOP(M_FSCRWR, RR, 0x3ba, "fscrwr", _A2(A_T,A_A), 00010, FP7) /* FSCRWR FP_status<-RA */
+APUOP(M_FSCRWR2, RR, 0x3ba, "fscrwr", _A1(A_A), 00010, FP7) /* FSCRWR FP_status<-RA */
+APUOP(M_CLZ, RR, 0x2a5, "clz", _A2(A_T,A_A), 00012, FX2) /* CLZ RT<-clz(RA) */
+APUOP(M_CNTB, RR, 0x2b4, "cntb", _A2(A_T,A_A), 00012, FXB) /* CNT RT<-pop(RA) */
+APUOP(M_XSBH, RR, 0x2b6, "xsbh", _A2(A_T,A_A), 00012, FX2) /* eXtSignBtoH RT<-sign_ext(RA) */
+APUOP(M_XSHW, RR, 0x2ae, "xshw", _A2(A_T,A_A), 00012, FX2) /* eXtSignHtoW RT<-sign_ext(RA) */
+APUOP(M_XSWD, RR, 0x2a6, "xswd", _A2(A_T,A_A), 00012, FX2) /* eXtSignWtoD RT<-sign_ext(RA) */
+APUOP(M_ROTI, RI7, 0x078, "roti", _A3(A_T,A_A,A_S7N), 00012, FX3) /* ROT%I RT<-RA<<<I7 */
+APUOP(M_ROTMI, RI7, 0x079, "rotmi", _A3(A_T,A_A,A_S7), 00012, FX3) /* ROT%MI RT<-RA<<I7 */
+APUOP(M_ROTMAI, RI7, 0x07a, "rotmai", _A3(A_T,A_A,A_S7), 00012, FX3) /* ROTMA%I RT<-RA<<I7 */
+APUOP(M_SHLI, RI7, 0x07b, "shli", _A3(A_T,A_A,A_U6), 00012, FX3) /* SHL%I RT<-RA<<I7 */
+APUOP(M_ROTHI, RI7, 0x07c, "rothi", _A3(A_T,A_A,A_S7N), 00012, FX3) /* ROT%I RT<-RA<<<I7 */
+APUOP(M_ROTHMI, RI7, 0x07d, "rothmi", _A3(A_T,A_A,A_S6), 00012, FX3) /* ROT%MI RT<-RA<<I7 */
+APUOP(M_ROTMAHI, RI7, 0x07e, "rotmahi", _A3(A_T,A_A,A_S6), 00012, FX3) /* ROTMA%I RT<-RA<<I7 */
+APUOP(M_SHLHI, RI7, 0x07f, "shlhi", _A3(A_T,A_A,A_U5), 00012, FX3) /* SHL%I RT<-RA<<I7 */
+APUOP(M_A, RR, 0x0c0, "a", _A3(A_T,A_A,A_B), 00112, FX2) /* Add% RT<-RA+RB */
+APUOP(M_AH, RR, 0x0c8, "ah", _A3(A_T,A_A,A_B), 00112, FX2) /* Add% RT<-RA+RB */
+APUOP(M_SF, RR, 0x040, "sf", _A3(A_T,A_A,A_B), 00112, FX2) /* SubFrom% RT<-RB-RA */
+APUOP(M_SFH, RR, 0x048, "sfh", _A3(A_T,A_A,A_B), 00112, FX2) /* SubFrom% RT<-RB-RA */
+APUOP(M_CGT, RR, 0x240, "cgt", _A3(A_T,A_A,A_B), 00112, FX2) /* CGT% RT<-(RA>RB) */
+APUOP(M_CGTB, RR, 0x250, "cgtb", _A3(A_T,A_A,A_B), 00112, FX2) /* CGT% RT<-(RA>RB) */
+APUOP(M_CGTH, RR, 0x248, "cgth", _A3(A_T,A_A,A_B), 00112, FX2) /* CGT% RT<-(RA>RB) */
+APUOP(M_CLGT, RR, 0x2c0, "clgt", _A3(A_T,A_A,A_B), 00112, FX2) /* CLGT% RT<-(RA>RB) */
+APUOP(M_CLGTB, RR, 0x2d0, "clgtb", _A3(A_T,A_A,A_B), 00112, FX2) /* CLGT% RT<-(RA>RB) */
+APUOP(M_CLGTH, RR, 0x2c8, "clgth", _A3(A_T,A_A,A_B), 00112, FX2) /* CLGT% RT<-(RA>RB) */
+APUOP(M_CEQ, RR, 0x3c0, "ceq", _A3(A_T,A_A,A_B), 00112, FX2) /* CEQ% RT<-(RA=RB) */
+APUOP(M_CEQB, RR, 0x3d0, "ceqb", _A3(A_T,A_A,A_B), 00112, FX2) /* CEQ% RT<-(RA=RB) */
+APUOP(M_CEQH, RR, 0x3c8, "ceqh", _A3(A_T,A_A,A_B), 00112, FX2) /* CEQ% RT<-(RA=RB) */
+APUOP(M_HGT, RR, 0x258, "hgt", _A3(A_T,A_A,A_B), 00110, FX2) /* HaltGT halt_if(RA>RB) */
+APUOP(M_HGT2, RR, 0x258, "hgt", _A2(A_A,A_B), 00110, FX2) /* HaltGT halt_if(RA>RB) */
+APUOP(M_HLGT, RR, 0x2d8, "hlgt", _A3(A_T,A_A,A_B), 00110, FX2) /* HaltLGT halt_if(RA>RB) */
+APUOP(M_HLGT2, RR, 0x2d8, "hlgt", _A2(A_A,A_B), 00110, FX2) /* HaltLGT halt_if(RA>RB) */
+APUOP(M_HEQ, RR, 0x3d8, "heq", _A3(A_T,A_A,A_B), 00110, FX2) /* HaltEQ halt_if(RA=RB) */
+APUOP(M_HEQ2, RR, 0x3d8, "heq", _A2(A_A,A_B), 00110, FX2) /* HaltEQ halt_if(RA=RB) */
+APUOP(M_FCEQ, RR, 0x3c2, "fceq", _A3(A_T,A_A,A_B), 00112, FX2) /* FCEQ RT<-(RA=RB) */
+APUOP(M_FCMEQ, RR, 0x3ca, "fcmeq", _A3(A_T,A_A,A_B), 00112, FX2) /* FCMEQ RT<-(|RA|=|RB|) */
+APUOP(M_FCGT, RR, 0x2c2, "fcgt", _A3(A_T,A_A,A_B), 00112, FX2) /* FCGT RT<-(RA<RB) */
+APUOP(M_FCMGT, RR, 0x2ca, "fcmgt", _A3(A_T,A_A,A_B), 00112, FX2) /* FCMGT RT<-(|RA|<|RB|) */
+APUOP(M_AND, RR, 0x0c1, "and", _A3(A_T,A_A,A_B), 00112, FX2) /* AND RT<-RA&RB */
+APUOP(M_NAND, RR, 0x0c9, "nand", _A3(A_T,A_A,A_B), 00112, FX2) /* NAND RT<-!(RA&RB) */
+APUOP(M_OR, RR, 0x041, "or", _A3(A_T,A_A,A_B), 00112, FX2) /* OR RT<-RA|RB */
+APUOP(M_NOR, RR, 0x049, "nor", _A3(A_T,A_A,A_B), 00112, FX2) /* NOR RT<-!(RA&RB) */
+APUOP(M_XOR, RR, 0x241, "xor", _A3(A_T,A_A,A_B), 00112, FX2) /* XOR RT<-RA^RB */
+APUOP(M_EQV, RR, 0x249, "eqv", _A3(A_T,A_A,A_B), 00112, FX2) /* EQuiValent RT<-!(RA^RB) */
+APUOP(M_ANDC, RR, 0x2c1, "andc", _A3(A_T,A_A,A_B), 00112, FX2) /* ANDComplement RT<-RA&!RB */
+APUOP(M_ORC, RR, 0x2c9, "orc", _A3(A_T,A_A,A_B), 00112, FX2) /* ORComplement RT<-RA|!RB */
+APUOP(M_ABSDB, RR, 0x053, "absdb", _A3(A_T,A_A,A_B), 00112, FXB) /* ABSoluteDiff RT<-|RA-RB| */
+APUOP(M_AVGB, RR, 0x0d3, "avgb", _A3(A_T,A_A,A_B), 00112, FXB) /* AVG% RT<-(RA+RB+1)/2 */
+APUOP(M_SUMB, RR, 0x253, "sumb", _A3(A_T,A_A,A_B), 00112, FXB) /* SUM% RT<-f(RA,RB) */
+APUOP(M_DFA, RR, 0x2cc, "dfa", _A3(A_T,A_A,A_B), 00112, FPD) /* DFAdd RT<-RA+RB */
+APUOP(M_DFM, RR, 0x2ce, "dfm", _A3(A_T,A_A,A_B), 00112, FPD) /* DFMul RT<-RA*RB */
+APUOP(M_DFS, RR, 0x2cd, "dfs", _A3(A_T,A_A,A_B), 00112, FPD) /* DFSub RT<-RA-RB */
+APUOP(M_FA, RR, 0x2c4, "fa", _A3(A_T,A_A,A_B), 00112, FP6) /* FAdd RT<-RA+RB */
+APUOP(M_FM, RR, 0x2c6, "fm", _A3(A_T,A_A,A_B), 00112, FP6) /* FMul RT<-RA*RB */
+APUOP(M_FS, RR, 0x2c5, "fs", _A3(A_T,A_A,A_B), 00112, FP6) /* FSub RT<-RA-RB */
+APUOP(M_MPY, RR, 0x3c4, "mpy", _A3(A_T,A_A,A_B), 00112, FP7) /* MPY RT<-RA*RB */
+APUOP(M_MPYH, RR, 0x3c5, "mpyh", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYH RT<-(RAh*RB)<<16 */
+APUOP(M_MPYHH, RR, 0x3c6, "mpyhh", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYHH RT<-RAh*RBh */
+APUOP(M_MPYHHU, RR, 0x3ce, "mpyhhu", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYHHU RT<-RAh*RBh */
+APUOP(M_MPYS, RR, 0x3c7, "mpys", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYS RT<-(RA*RB)>>16 */
+APUOP(M_MPYU, RR, 0x3cc, "mpyu", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYU RT<-RA*RB */
+APUOP(M_FI, RR, 0x3d4, "fi", _A3(A_T,A_A,A_B), 00112, FP7) /* FInterpolate RT<-f(RA,RB) */
+APUOP(M_ROT, RR, 0x058, "rot", _A3(A_T,A_A,A_B), 00112, FX3) /* ROT% RT<-RA<<<RB */
+APUOP(M_ROTM, RR, 0x059, "rotm", _A3(A_T,A_A,A_B), 00112, FX3) /* ROT%M RT<-RA<<Rb */
+APUOP(M_ROTMA, RR, 0x05a, "rotma", _A3(A_T,A_A,A_B), 00112, FX3) /* ROTMA% RT<-RA<<Rb */
+APUOP(M_SHL, RR, 0x05b, "shl", _A3(A_T,A_A,A_B), 00112, FX3) /* SHL% RT<-RA<<Rb */
+APUOP(M_ROTH, RR, 0x05c, "roth", _A3(A_T,A_A,A_B), 00112, FX3) /* ROT% RT<-RA<<<RB */
+APUOP(M_ROTHM, RR, 0x05d, "rothm", _A3(A_T,A_A,A_B), 00112, FX3) /* ROT%M RT<-RA<<Rb */
+APUOP(M_ROTMAH, RR, 0x05e, "rotmah", _A3(A_T,A_A,A_B), 00112, FX3) /* ROTMA% RT<-RA<<Rb */
+APUOP(M_SHLH, RR, 0x05f, "shlh", _A3(A_T,A_A,A_B), 00112, FX3) /* SHL% RT<-RA<<Rb */
+APUOP(M_MPYHHA, RR, 0x346, "mpyhha", _A3(A_T,A_A,A_B), 00113, FP7) /* MPYHHA RT<-RAh*RBh+RT */
+APUOP(M_MPYHHAU, RR, 0x34e, "mpyhhau", _A3(A_T,A_A,A_B), 00113, FP7) /* MPYHHAU RT<-RAh*RBh+RT */
+APUOP(M_DFMA, RR, 0x35c, "dfma", _A3(A_T,A_A,A_B), 00113, FPD) /* DFMAdd RT<-RT+RA*RB */
+APUOP(M_DFMS, RR, 0x35d, "dfms", _A3(A_T,A_A,A_B), 00113, FPD) /* DFMSub RT<-RA*RB-RT */
+APUOP(M_DFNMS, RR, 0x35e, "dfnms", _A3(A_T,A_A,A_B), 00113, FPD) /* DFNMSub RT<-RT-RA*RB */
+APUOP(M_DFNMA, RR, 0x35f, "dfnma", _A3(A_T,A_A,A_B), 00113, FPD) /* DFNMAdd RT<-(-RT)-RA*RB */
+APUOP(M_FMA, RRR, 0x700, "fma", _A4(A_C,A_A,A_B,A_T), 02111, FP6) /* FMAdd RC<-RT+RA*RB */
+APUOP(M_FMS, RRR, 0x780, "fms", _A4(A_C,A_A,A_B,A_T), 02111, FP6) /* FMSub RC<-RA*RB-RT */
+APUOP(M_FNMS, RRR, 0x680, "fnms", _A4(A_C,A_A,A_B,A_T), 02111, FP6) /* FNMSub RC<-RT-RA*RB */
+APUOP(M_MPYA, RRR, 0x600, "mpya", _A4(A_C,A_A,A_B,A_T), 02111, FP7) /* MPYA RC<-RA*RB+RT */
+APUOP(M_SELB, RRR, 0x400, "selb", _A4(A_C,A_A,A_B,A_T), 02111, FX2) /* SELectBits RC<-RA&RT|RB&!RT */
+/* for system function call, this uses op-code of mtspr */
+APUOP(M_SYSCALL, RI7, 0x10c, "syscall", _A3(A_T,A_A,A_S7N), 00002, SPR) /* System Call */
+/*
+pseudo instruction:
+system call
+value of I9 operation
+0 halt
+1 rt[0] = open(MEM[ra[0]], ra[1])
+2 rt[0] = close(ra[0])
+3 rt[0] = read(ra[0], MEM[ra[1]], ra[2])
+4 rt[0] = write(ra[0], MEM[ra[1]], ra[2])
+5 printf(MEM[ra[0]], ra[1], ra[2], ra[3])
+42 rt[0] = clock()
+52 rt[0] = lseek(ra0, ra1, ra2)
+
+*/
+
+
+/* new multiprecision add/sub */
+APUOP(M_ADDX, RR, 0x340, "addx", _A3(A_T,A_A,A_B), 00113, FX2) /* Add_eXtended RT<-RA+RB+RT */
+APUOP(M_CG, RR, 0x0c2, "cg", _A3(A_T,A_A,A_B), 00112, FX2) /* CarryGenerate RT<-cout(RA+RB) */
+APUOP(M_CGX, RR, 0x342, "cgx", _A3(A_T,A_A,A_B), 00113, FX2) /* CarryGen_eXtd RT<-cout(RA+RB+RT) */
+APUOP(M_SFX, RR, 0x341, "sfx", _A3(A_T,A_A,A_B), 00113, FX2) /* Add_eXtended RT<-RA+RB+RT */
+APUOP(M_BG, RR, 0x042, "bg", _A3(A_T,A_A,A_B), 00112, FX2) /* CarryGenerate RT<-cout(RA+RB) */
+APUOP(M_BGX, RR, 0x343, "bgx", _A3(A_T,A_A,A_B), 00113, FX2) /* CarryGen_eXtd RT<-cout(RA+RB+RT) */
+
+/*
+
+The following ops are a subset of above except with feature bits set.
+Feature bits are bits 11-17 of the instruction:
+
+ 11 - C & P feature bit
+ 12 - disable interrupts
+ 13 - enable interrupts
+
+*/
+APUOPFB(M_BID, RR, 0x1a8, 0x20, "bid", _A1(A_A), 00010, BR) /* BI IP<-RA */
+APUOPFB(M_BIE, RR, 0x1a8, 0x10, "bie", _A1(A_A), 00010, BR) /* BI IP<-RA */
+APUOPFB(M_BISLD, RR, 0x1a9, 0x20, "bisld", _A2(A_T,A_A), 00012, BR) /* BISL RT,IP<-IP,RA */
+APUOPFB(M_BISLE, RR, 0x1a9, 0x10, "bisle", _A2(A_T,A_A), 00012, BR) /* BISL RT,IP<-IP,RA */
+APUOPFB(M_IRETD, RR, 0x1aa, 0x20, "iretd", _A1(A_A), 00010, BR) /* IRET IP<-SRR0 */
+APUOPFB(M_IRETD2, RR, 0x1aa, 0x20, "iretd", _A0(), 00010, BR) /* IRET IP<-SRR0 */
+APUOPFB(M_IRETE, RR, 0x1aa, 0x10, "irete", _A1(A_A), 00010, BR) /* IRET IP<-SRR0 */
+APUOPFB(M_IRETE2, RR, 0x1aa, 0x10, "irete", _A0(), 00010, BR) /* IRET IP<-SRR0 */
+APUOPFB(M_BISLEDD, RR, 0x1ab, 0x20, "bisledd", _A2(A_T,A_A), 00012, BR) /* BISLED RT,IP<-IP,RA_if(ext) */
+APUOPFB(M_BISLEDE, RR, 0x1ab, 0x10, "bislede", _A2(A_T,A_A), 00012, BR) /* BISLED RT,IP<-IP,RA_if(ext) */
+APUOPFB(M_BIHNZD, RR, 0x12b, 0x20, "bihnzd", _A2(A_T,A_A), 00011, BR) /* BIHNZ IP<-RA_if(RT) */
+APUOPFB(M_BIHNZE, RR, 0x12b, 0x10, "bihnze", _A2(A_T,A_A), 00011, BR) /* BIHNZ IP<-RA_if(RT) */
+APUOPFB(M_BIHZD, RR, 0x12a, 0x20, "bihzd", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */
+APUOPFB(M_BIHZE, RR, 0x12a, 0x10, "bihze", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */
+APUOPFB(M_BINZD, RR, 0x129, 0x20, "binzd", _A2(A_T,A_A), 00011, BR) /* BINZ IP<-RA_if(RT) */
+APUOPFB(M_BINZE, RR, 0x129, 0x10, "binze", _A2(A_T,A_A), 00011, BR) /* BINZ IP<-RA_if(RT) */
+APUOPFB(M_BIZD, RR, 0x128, 0x20, "bizd", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */
+APUOPFB(M_BIZE, RR, 0x128, 0x10, "bize", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */
+APUOPFB(M_SYNCC, RR, 0x002, 0x40, "syncc", _A0(), 00000, BR) /* SYNCC flush_pipe */
+APUOPFB(M_HBRP, LBTI, 0x1ac, 0x40, "hbrp", _A0(), 00010, LS) /* HBR BTB[B9]<-M[Ra] */
+
+/* Synonyms required by the AS manual. */
+APUOP(M_LR, RI10, 0x020, "lr", _A2(A_T,A_A), 00012, FX2) /* OR%I RT<-RA|I10 */
+APUOP(M_BIHT, RR, 0x12b, "biht", _A2(A_T,A_A), 00011, BR) /* BIHNZ IP<-RA_if(RT) */
+APUOP(M_BIHF, RR, 0x12a, "bihf", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */
+APUOP(M_BIT, RR, 0x129, "bit", _A2(A_T,A_A), 00011, BR) /* BINZ IP<-RA_if(RT) */
+APUOP(M_BIF, RR, 0x128, "bif", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */
+APUOPFB(M_BIHTD, RR, 0x12b, 0x20, "bihtd", _A2(A_T,A_A), 00011, BR) /* BIHNF IP<-RA_if(RT) */
+APUOPFB(M_BIHTE, RR, 0x12b, 0x10, "bihte", _A2(A_T,A_A), 00011, BR) /* BIHNF IP<-RA_if(RT) */
+APUOPFB(M_BIHFD, RR, 0x12a, 0x20, "bihfd", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */
+APUOPFB(M_BIHFE, RR, 0x12a, 0x10, "bihfe", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */
+APUOPFB(M_BITD, RR, 0x129, 0x20, "bitd", _A2(A_T,A_A), 00011, BR) /* BINF IP<-RA_if(RT) */
+APUOPFB(M_BITE, RR, 0x129, 0x10, "bite", _A2(A_T,A_A), 00011, BR) /* BINF IP<-RA_if(RT) */
+APUOPFB(M_BIFD, RR, 0x128, 0x20, "bifd", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */
+APUOPFB(M_BIFE, RR, 0x128, 0x10, "bife", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */
+
+/* New soma double-float insns. */
+APUOP(M_DFCEQ, RR, 0x3c3, "dfceq", _A3(A_T,A_A,A_B), 00112, FX2) /* DFCEQ RT<-(RA=RB) */
+APUOP(M_DFCMEQ, RR, 0x3cb, "dfcmeq", _A3(A_T,A_A,A_B), 00112, FX2) /* DFCMEQ RT<-(|RA|=|RB|) */
+APUOP(M_DFCGT, RR, 0x2c3, "dfcgt", _A3(A_T,A_A,A_B), 00112, FX2) /* DFCGT RT<-(RA>RB) */
+APUOP(M_DFCMGT, RR, 0x2cb, "dfcmgt", _A3(A_T,A_A,A_B), 00112, FX2) /* DFCMGT RT<-(|RA|>|RB|) */
+APUOP(M_DFTSV, RI7, 0x3bf, "dftsv", _A3(A_T,A_A,A_U7), 00012, FX2) /* DFTSV RT<-testspecial(RA,I7) */
+
+#undef _A0
+#undef _A1
+#undef _A2
+#undef _A3
+#undef _A4
diff --git a/include/opcode/spu.h b/include/opcode/spu.h
new file mode 100644
index 000000000000..975b1fdde4bd
--- /dev/null
+++ b/include/opcode/spu.h
@@ -0,0 +1,126 @@
+/* SPU ELF support for BFD.
+
+ Copyright 2006 Free Software Foundation, Inc.
+
+ This file is part of GDB, GAS, and the GNU binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 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. */
+
+
+/* These two enums are from rel_apu/common/spu_asm_format.h */
+/* definition of instruction format */
+typedef enum {
+ RRR,
+ RI18,
+ RI16,
+ RI10,
+ RI8,
+ RI7,
+ RR,
+ LBT,
+ LBTI,
+ IDATA,
+ UNKNOWN_IFORMAT
+} spu_iformat;
+
+/* These values describe assembly instruction arguments. They indicate
+ * how to encode, range checking and which relocation to use. */
+typedef enum {
+ A_T, /* register at pos 0 */
+ A_A, /* register at pos 7 */
+ A_B, /* register at pos 14 */
+ A_C, /* register at pos 21 */
+ A_S, /* special purpose register at pos 7 */
+ A_H, /* channel register at pos 7 */
+ A_P, /* parenthesis, this has to separate regs from immediates */
+ A_S3,
+ A_S6,
+ A_S7N,
+ A_S7,
+ A_U7A,
+ A_U7B,
+ A_S10B,
+ A_S10,
+ A_S11,
+ A_S11I,
+ A_S14,
+ A_S16,
+ A_S18,
+ A_R18,
+ A_U3,
+ A_U5,
+ A_U6,
+ A_U7,
+ A_U14,
+ A_X16,
+ A_U18,
+ A_MAX
+} spu_aformat;
+
+enum spu_insns {
+#define APUOP(TAG,MACFORMAT,OPCODE,MNEMONIC,ASMFORMAT,DEP,PIPE) \
+ TAG,
+#define APUOPFB(TAG,MACFORMAT,OPCODE,FB,MNEMONIC,ASMFORMAT,DEP,PIPE) \
+ TAG,
+#include "opcode/spu-insns.h"
+#undef APUOP
+#undef APUOPFB
+ M_SPU_MAX
+};
+
+struct spu_opcode
+{
+ spu_iformat insn_type;
+ unsigned int opcode;
+ char *mnemonic;
+ int arg[5];
+};
+
+#define SIGNED_EXTRACT(insn,size,pos) (((int)((insn) << (32-size-pos))) >> (32-size))
+#define UNSIGNED_EXTRACT(insn,size,pos) (((insn) >> pos) & ((1 << size)-1))
+
+#define DECODE_INSN_RT(insn) (insn & 0x7f)
+#define DECODE_INSN_RA(insn) ((insn >> 7) & 0x7f)
+#define DECODE_INSN_RB(insn) ((insn >> 14) & 0x7f)
+#define DECODE_INSN_RC(insn) ((insn >> 21) & 0x7f)
+
+#define DECODE_INSN_I10(insn) SIGNED_EXTRACT(insn,10,14)
+#define DECODE_INSN_U10(insn) UNSIGNED_EXTRACT(insn,10,14)
+
+/* For branching, immediate loads, hbr and lqa/stqa. */
+#define DECODE_INSN_I16(insn) SIGNED_EXTRACT(insn,16,7)
+#define DECODE_INSN_U16(insn) UNSIGNED_EXTRACT(insn,16,7)
+
+/* for stop */
+#define DECODE_INSN_U14(insn) UNSIGNED_EXTRACT(insn,14,0)
+
+/* For ila */
+#define DECODE_INSN_I18(insn) SIGNED_EXTRACT(insn,18,7)
+#define DECODE_INSN_U18(insn) UNSIGNED_EXTRACT(insn,18,7)
+
+/* For rotate and shift and generate control mask */
+#define DECODE_INSN_I7(insn) SIGNED_EXTRACT(insn,7,14)
+#define DECODE_INSN_U7(insn) UNSIGNED_EXTRACT(insn,7,14)
+
+/* For float <-> int conversion */
+#define DECODE_INSN_I8(insn) SIGNED_EXTRACT(insn,8,14)
+#define DECODE_INSN_U8(insn) UNSIGNED_EXTRACT(insn,8,14)
+
+/* For hbr */
+#define DECODE_INSN_I9a(insn) ((SIGNED_EXTRACT(insn,2,23) << 7) | UNSIGNED_EXTRACT(insn,7,0))
+#define DECODE_INSN_I9b(insn) ((SIGNED_EXTRACT(insn,2,14) << 7) | UNSIGNED_EXTRACT(insn,7,0))
+#define DECODE_INSN_U9a(insn) ((UNSIGNED_EXTRACT(insn,2,23) << 7) | UNSIGNED_EXTRACT(insn,7,0))
+#define DECODE_INSN_U9b(insn) ((UNSIGNED_EXTRACT(insn,2,14) << 7) | UNSIGNED_EXTRACT(insn,7,0))
+
diff --git a/include/xtensa-config.h b/include/xtensa-config.h
index 5c0315d6198d..36f9719fe33d 100644
--- a/include/xtensa-config.h
+++ b/include/xtensa-config.h
@@ -1,5 +1,6 @@
/* Xtensa configuration settings.
- Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
This program is free software; you can redistribute it and/or modify
@@ -145,4 +146,12 @@
#undef XCHAL_INST_FETCH_WIDTH
#define XCHAL_INST_FETCH_WIDTH 4
+
+#undef XSHAL_ABI
+#undef XTHAL_ABI_WINDOWED
+#undef XTHAL_ABI_CALL0
+#define XSHAL_ABI XTHAL_ABI_WINDOWED
+#define XTHAL_ABI_WINDOWED 0
+#define XTHAL_ABI_CALL0 1
+
#endif /* !XTENSA_CONFIG_H */
diff --git a/include/xtensa-isa.h b/include/xtensa-isa.h
index 6abf205978af..c4e31ed7ff6c 100644
--- a/include/xtensa-isa.h
+++ b/include/xtensa-isa.h
@@ -1,5 +1,5 @@
/* Interface definition for configurable Xtensa ISA support.
- Copyright 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -24,9 +24,6 @@
extern "C" {
#endif
-/* Use the statically-linked version for the GNU tools. */
-#define STATIC_LIBISA 1
-
/* Version number: This is intended to help support code that works with
versions of this library from multiple Xtensa releases. */
@@ -137,8 +134,8 @@ typedef int xtensa_funcUnit;
retrieved with the "errno" function. For any result other than
xtensa_isa_ok, an error message containing additional information
about the problem can be retrieved using the "error_msg" function.
- The error messages are stored in an internal buffer, which should not
- should be freed and may be overwritten by subsequent operations. */
+ The error messages are stored in an internal buffer, which should
+ not be freed and may be overwritten by subsequent operations. */
typedef enum xtensa_isa_status_enum
{
diff --git a/intl/ChangeLog b/intl/ChangeLog
index 1799509adb22..c511c1ed2280 100644
--- a/intl/ChangeLog
+++ b/intl/ChangeLog
@@ -1,1115 +1,127 @@
-2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
+2006-09-27 Alan Modra <amodra@bigpond.net.au>
- * intl/Makefile.in: Add html info and dvi and install-html to .PHONY
- Add install-html target.
-
-2006-02-27 Carlos O'Donell <carlos@codesourcery.com>
-
- * intl/Makefile.in: Add html target.
-
-2005-05-13 Nick Clifton <nickc@redhat.com>
-
- * Update the address and phone number of the FSF organization in
- the GPL notices in the following files:
- Makefile.in, bindtextdom.c, cat-compat.c, dcgettext.c,
- dgettext.c, explodename.c, finddomain.c, gettext.c, gettext.h,
- gettextP.h, hash-string.h, intl-compat.c, intlh.inst.in,
- l10nflist.c, libgettext.h, libintl.glibc, linux-msg.sed,
- loadinfo.h, loadmsgcat.c, localealias.c, po2tbl.sed.in,
- textdomain.c, xopen-msg.sed
-
-2004-11-30 Tero Niemela <tero_niemela@yahoo.com>
-
- * Makefile.in: Change LOCALEDIR to $(datadir)/share.
-
-2002-01-21 Thomas Klausner <wiz@danbala.ifoer.tuwien.ac.at>
-
- * linux-msg.sed: Comment typo fix.
- * xopen-msg.sed: Likewise.
-
-1998-04-29 Ulrich Drepper <drepper@cygnus.com>
-
- * intl/localealias.c (read_alias_file): Use unsigned char for
- local variables. Remove unused variable tp.
- * intl/l10nflist.c (_nl_normalize_codeset): Use unsigned char *
- for type of codeset. For loosing Solaris systems.
- * intl/loadinfo.h: Adapt prototype of _nl_normalize_codeset.
- * intl/bindtextdom.c (BINDTEXTDOMAIN): Don't define local variable
- len if not needed.
- Patches by Jim Meyering.
-
-1998-04-28 Ulrich Drepper <drepper@cygnus.com>
-
- * loadmsgcat.c (_nl_load_domain): Don't assign the element use_mmap if
- mmap is not supported.
-
- * hash-string.h: Don't include <values.h>.
-
-1998-04-27 Ulrich Drepper <drepper@cygnus.com>
-
- * textdomain.c: Use strdup is available.
-
- * localealias.c: Define HAVE_MEMPCPY so that we can use this
- function. Define and use semapahores to protect modfication of
- global objects when compiling for glibc. Add code to allow
- freeing alias table.
-
- * l10nflist.c: Don't assume stpcpy not being a macro.
-
- * gettextP.h: Define internal_function macri if not already done.
- Use glibc byte-swap macros instead of defining SWAP when compiled
- for glibc.
- (struct loaded_domain): Add elements to allow unloading.
-
- * Makefile.in (distclean): Don't remove libintl.h here.
-
- * bindtextdomain.c: Carry over changes from glibc. Use strdup if
- available.
-
- * dcgettext.c: Don't assume stpcpy not being a macro. Mark internal
- functions. Add memory freeing code for glibc.
-
- * dgettext.c: Update copyright.
-
- * explodename.c: Include stdlib.h and string.h only if they exist.
- Use strings.h eventually.
-
- * finddomain.c: Mark internal functions. Use strdup if available.
- Add memory freeing code for glibc.
-
-1997-10-10 20:00 Ulrich Drepper <drepper@cygnus.com>
-
- * libgettext.h: Fix dummy textdomain and bindtextdomain macros.
- They should return reasonable values.
- Reported by Tom Tromey <tromey@cygnus.com>.
-
-1997-09-16 03:33 Ulrich Drepper <drepper@cygnus.com>
-
- * libgettext.h: Define PARAMS also to `args' if __cplusplus is defined.
- * intlh.inst.in: Likewise.
- Reported by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>.
-
- * libintl.glibc: Update from current glibc version.
-
-1997-09-06 02:10 Ulrich Drepper <drepper@cygnus.com>
-
- * intlh.inst.in: Reformat copyright.
-
-1997-08-19 15:22 Ulrich Drepper <drepper@cygnus.com>
-
- * dcgettext.c (DCGETTEXT): Remove wrong comment.
-
-1997-08-16 00:13 Ulrich Drepper <drepper@cygnus.com>
-
- * Makefile.in (install-data): Don't change directory to install.
-
-1997-08-01 14:30 Ulrich Drepper <drepper@cygnus.com>
-
- * cat-compat.c: Fix copyright.
-
- * localealias.c: Don't define strchr unless !HAVE_STRCHR.
-
- * loadmsgcat.c: Update copyright. Fix typos.
-
- * l10nflist.c: Don't define strchr unless !HAVE_STRCHR.
- (_nl_make_l10nflist): Handle sponsor and revision correctly.
-
- * gettext.c: Update copyright.
- * gettext.h: Likewise.
- * hash-string.h: Likewise.
-
- * finddomain.c: Remoave dead code. Define strchr only if
- !HAVE_STRCHR.
-
- * explodename.c: Include <sys/types.h>.
-
- * explodename.c: Reformat copyright text.
- (_nl_explode_name): Fix typo.
-
- * dcgettext.c: Define and use __set_errno.
- (guess_category_value): Don't use setlocale if HAVE_LC_MESSAGES is
- not defined.
-
- * bindtextdom.c: Pretty printing.
-
-1997-05-01 02:25 Ulrich Drepper <drepper@cygnus.com>
-
- * dcgettext.c (guess_category_value): Don't depend on
- HAVE_LC_MESSAGES. We don't need the macro here.
- Patch by Bruno Haible <haible@ilog.fr>.
-
- * cat-compat.c (textdomain): DoN't refer to HAVE_SETLOCALE_NULL
- macro. Instead use HAVE_LOCALE_NULL and define it when using
- glibc, as in dcgettext.c.
- Patch by Bruno Haible <haible@ilog.fr>.
-
- * Makefile.in (CPPFLAGS): New variable. Reported by Franc,ois
- Pinard.
-
-Mon Mar 10 06:51:17 1997 Ulrich Drepper <drepper@cygnus.com>
-
- * Makefile.in: Implement handling of libtool.
-
- * gettextP.h: Change data structures for use of generic lowlevel
- i18n file handling.
-
-Wed Dec 4 20:21:18 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * textdomain.c: Put parentheses around arguments of memcpy macro
- definition.
- * localealias.c: Likewise.
- * l10nflist.c: Likewise.
- * finddomain.c: Likewise.
- * bindtextdom.c: Likewise.
- Reported by Thomas Esken.
-
-Mon Nov 25 22:57:51 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * textdomain.c: Move definition of `memcpy` macro to right
- position.
-
-Fri Nov 22 04:01:58 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using
- bcopy if not already defined. Reported by Thomas Esken.
- * bindtextdom.c: Likewise.
- * l10nflist.c: Likewise.
- * localealias.c: Likewise.
- * textdomain.c: Likewise.
-
-Tue Oct 29 11:10:27 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * Makefile.in (libdir): Change to use exec_prefix instead of
- prefix. Reported by Knut-HåvardAksnes <etokna@eto.ericsson.se>.
-
-Sat Aug 31 03:07:09 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * l10nflist.c (_nl_normalize_codeset): We convert to lower case,
- so don't prepend uppercase `ISO' for only numeric arg.
-
-Fri Jul 19 00:15:46 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after
- definition of _GNU_SOURCE. Patch by Roland McGrath.
-
- * Makefile.in (uninstall): Fix another bug with `for' loop and
- empty arguments. Patch by Jim Meyering. Correct name os
- uninstalled files: no intl- prefix anymore.
-
- * Makefile.in (install-data): Again work around shells which
- cannot handle mpty for list. Reported by Jim Meyering.
-
-Sat Jul 13 18:11:35 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * Makefile.in (install): Split goal. Now depend on install-exec
- and install-data.
- (install-exec, install-data): New goals. Created from former
- install goal.
- Reported by Karl Berry.
-
-Sat Jun 22 04:58:14 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * Makefile.in (MKINSTALLDIRS): New variable. Path to
- mkinstalldirs script.
- (install): use MKINSTALLDIRS variable or if the script is not present
- try to find it in the $top_scrdir).
-
-Wed Jun 19 02:56:56 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * l10nflist.c: Linux libc *partly* includes the argz_* functions.
- Grr. Work around by renaming the static version and use macros
- for renaming.
-
-Tue Jun 18 20:11:17 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * l10nflist.c: Correct presence test macros of __argz_* functions.
-
- * l10nflist.c: Include <argz.h> based on test of it instead when
- __argz_* functions are available.
- Reported by Andreas Schwab.
-
-Thu Jun 13 15:17:44 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * explodename.c, l10nflist.c: Define NULL for dumb systems.
-
-Tue Jun 11 17:05:13 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * intlh.inst.in, libgettext.h (dcgettext): Rename local variable
- result to __result to prevent name clash.
-
- * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to
- get prototype for stpcpy and strcasecmp.
-
- * intlh.inst.in, libgettext.h: Move declaration of
- `_nl_msg_cat_cntr' outside __extension__ block to prevent warning
- from gcc's -Wnested-extern option.
-
-Fri Jun 7 01:58:00 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * Makefile.in (install): Remove comment.
-
-Thu Jun 6 17:28:17 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * Makefile.in (install): Work around for another Buglix stupidity.
- Always use an `else' close for `if's. Reported by Nelson Beebe.
-
- * Makefile.in (intlh.inst): Correct typo in phony rule.
- Reported by Nelson Beebe.
-
-Thu Jun 6 01:49:52 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * dcgettext.c (read_alias_file): Rename variable alloca_list to
- block_list as the macro calls assume.
- Patch by Eric Backus.
-
- * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using
- malloc.
- (read_alias_file): Rename varriabe alloca_list to block_list as the
- macro calls assume.
- Patch by Eric Backus.
-
- * l10nflist.c: Correct conditional for <argz.h> inclusion.
- Reported by Roland McGrath.
-
- * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not
- all-@USE_NLS@.
-
- * Makefile.in (install): intlh.inst comes from local dir, not
- $(srcdir).
-
- * Makefile.in (intlh.inst): Special handling of this goal. If
- used in gettext, this is really a rul to construct this file. If
- used in any other package it is defined as a .PHONY rule with
- empty body.
-
- * finddomain.c: Extract locale file information handling into
- l10nfile.c. Rename local stpcpy__ function to stpcpy.
-
- * dcgettext.c (stpcpy): Add local definition.
-
- * l10nflist.c: Solve some portability problems. Patches partly by
- Thomas Esken. Add local definition of stpcpy.
-
-Tue Jun 4 02:47:49 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * intlh.inst.in: Don't depend including <locale.h> on
- HAVE_LOCALE_H. Instead configure must rewrite this fiile
- depending on the result of the configure run.
-
- * Makefile.in (install): libintl.inst is now called intlh.inst.
- Add rules for updating intlh.inst from intlh.inst.in.
-
- * libintl.inst: Renamed to intlh.inst.in.
-
- * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1
- because gcc has __buitlin_alloca.
- Reported by Roland McGrath.
-
-Mon Jun 3 00:32:16 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * Makefile.in (installcheck): New goal to fulfill needs of
- automake's distcheck.
-
- * Makefile.in (install): Reorder commands so that VERSION is
- found.
-
- * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in
- @datadir@/gettext.
- (COMSRCS): Add l10nfile.c.
- (OBJECTS): Add l10nfile.o.
- (DISTFILES): Rename to DISTFILE.normal. Remove $(DISTFILES.common).
- (DISTFILE.gettext): Remove $(DISTFILES.common).
- (all-gettext): Remove goal.
- (install): If $(PACKAGE) = gettext install, otherwose do nothing. No
- package but gettext itself should install libintl.h + headers.
- (dist): Extend goal to work for gettext, too.
- (dist-gettext): Remove goal.
-
- * dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc.
-
-Sun Jun 2 17:33:06 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * loadmsgcat.c (_nl_load_domain): Parameter is now comes from
- find_l10nfile.
-
-Sat Jun 1 02:23:03 1996 Ulrich Drepper <drepper@cygnus.com>
-
- * l10nflist.c (__argz_next): Add definition.
-
- * dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca
- code. Use new l10nfile handling.
-
- * localealias.c [!HAVE_ALLOCA]: Add code for handling missing
- alloca code.
-
- * l10nflist.c: Initial revision.
-
-Tue Apr 2 18:51:18 1996 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (all-gettext): New goal. Same as all-yes.
-
-Thu Mar 28 23:01:22 1996 Karl Eichwalder <ke@ke.central.de>
-
- * Makefile.in (gettextsrcdir): Define using @datadir@.
-
-Tue Mar 26 12:39:14 1996 Ulrich Drepper <drepper@myware>
-
- * finddomain.c: Include <ctype.h>. Reported by Roland McGrath.
-
-Sat Mar 23 02:00:35 1996 Ulrich Drepper <drepper@myware>
-
- * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing
- with external declaration.
-
-Sat Mar 2 00:47:09 1996 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (all-no): Rename from all_no.
-
-Sat Feb 17 00:25:59 1996 Ulrich Drepper <drepper@myware>
-
- * gettextP.h [loaded_domain]: Array `successor' must now contain up
- to 63 elements (because of codeset name normalization).
-
- * finddomain.c: Implement codeset name normalization.
-
-Thu Feb 15 04:39:09 1996 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (all): Define to `all-@USE_NLS@'.
- (all-yes, all_no): New goals. `all-no' is noop, `all-yes'
- is former all.
-
-Mon Jan 15 21:46:01 1996 Howard Gayle <howard@hal.com>
-
- * localealias.c (alias_compare): Increment string pointers in loop
- of strcasecmp replacement.
-
-Fri Dec 29 21:16:34 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (install-src): Who commented this goal out ? :-)
-
-Fri Dec 29 15:08:16 1995 Ulrich Drepper <drepper@myware>
-
- * dcgettext.c (DCGETTEXT): Save `errno'. Failing system calls
- should not effect it because a missing catalog is no error.
- Reported by Harald K<o:>nig <koenig@tat.physik.uni-tuebingen.de>.
-
-Tue Dec 19 22:09:13 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (Makefile): Explicitly use $(SHELL) for running
- shell scripts.
-
-Fri Dec 15 17:34:59 1995 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
-
- * Makefile.in (install-src): Only install library and header when
- we use the own implementation. Don't do it when using the
- system's gettext or catgets functions.
-
- * dcgettext.c (find_msg): Must not swap domain->hash_size here.
-
-Sat Dec 9 16:24:37 1995 Ulrich Drepper <drepper@myware>
-
- * localealias.c, libintl.inst, libgettext.h, hash-string.h,
- gettextP.h, finddomain.c, dcgettext.c, cat-compat.c:
- Use PARAMS instead of __P. Suggested by Roland McGrath.
-
-Tue Dec 5 11:39:14 1995 Larry Schwimmer <rosebud@cyclone.stanford.edu>
-
- * libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if
- !_LIBINTL_H' because Solaris defines _LIBINTL_H as empty.
-
-Mon Dec 4 15:42:07 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (install-src):
- Install libintl.inst instead of libintl.h.install.
-
-Sat Dec 2 22:51:38 1995 Marcus Daniels <marcus@sysc.pdx.edu>
-
- * cat-compat.c (textdomain):
- Reverse order in which files are tried you load. First
- try local file, when this failed absolute path.
-
-Wed Nov 29 02:03:53 1995 Nelson H. F. Beebe <beebe@math.utah.edu>
-
- * cat-compat.c (bindtextdomain): Add missing { }.
-
-Sun Nov 26 18:21:41 1995 Ulrich Drepper <drepper@myware>
-
- * libintl.inst: Add missing __P definition. Reported by Nelson Beebe.
-
- * Makefile.in:
- Add dummy `all' and `dvi' goals. Reported by Tom Tromey.
-
-Sat Nov 25 16:12:01 1995 Franc,ois Pinard <pinard@iro.umontreal.ca>
-
- * hash-string.h: Capitalize arguments of macros.
-
-Sat Nov 25 12:01:36 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (DISTFILES): Prevent files names longer than 13
- characters. libintl.h.glibc->libintl.glibc,
- libintl.h.install->libintl.inst. Reported by Joshua R. Poulson.
-
-Sat Nov 25 11:31:12 1995 Eric Backus <ericb@lsid.hp.com>
-
- * dcgettext.c: Fix bug in preprocessor conditionals.
-
-Sat Nov 25 02:35:27 1995 Nelson H. F. Beebe <beebe@math.utah.edu>
-
- * libgettext.h: Solaris cc does not understand
- #if !SYMBOL1 && !SYMBOL2. Sad but true.
-
-Thu Nov 23 16:22:14 1995 Ulrich Drepper <drepper@myware>
-
- * hash-string.h (hash_string):
- Fix for machine with >32 bit `unsigned long's.
-
- * dcgettext.c (DCGETTEXT):
- Fix horrible bug in loop for alternative translation.
-
-Thu Nov 23 01:45:29 1995 Ulrich Drepper <drepper@myware>
-
- * po2tbl.sed.in, linux-msg.sed, xopen-msg.sed:
- Some further simplifications in message number generation.
-
-Mon Nov 20 21:08:43 1995 Ulrich Drepper <drepper@myware>
-
- * libintl.h.glibc: Use __const instead of const in prototypes.
-
- * Makefile.in (install-src):
- Install libintl.h.install instead of libintl.h. This
- is a stripped-down version. Suggested by Peter Miller.
-
- * libintl.h.install, libintl.h.glibc: Initial revision.
-
- * localealias.c (_nl_expand_alias, read_alias_file):
- Protect prototypes in type casts by __P.
-
-Tue Nov 14 16:43:58 1995 Ulrich Drepper <drepper@myware>
-
- * hash-string.h: Correct prototype for hash_string.
-
-Sun Nov 12 12:42:30 1995 Ulrich Drepper <drepper@myware>
-
- * hash-string.h (hash_string): Add prototype.
-
- * gettextP.h: Fix copyright.
- (SWAP): Add prototype.
-
-Wed Nov 8 22:56:33 1995 Ulrich Drepper <drepper@myware>
-
- * localealias.c (read_alias_file): Forgot sizeof.
- Avoid calling *printf function. This introduces a big overhead.
- Patch by Roland McGrath.
-
-Tue Nov 7 14:21:08 1995 Ulrich Drepper <drepper@myware>
-
- * finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy.
-
- * finddomain.c (stpcpy):
- Define substitution function local. The macro was to flaky.
-
- * cat-compat.c: Fix typo.
-
- * xopen-msg.sed, linux-msg.sed:
- While bringing message number to right place only accept digits.
-
- * linux-msg.sed, xopen-msg.sed: Now that the counter does not have
- leading 0s we don't need to remove them. Reported by Marcus
- Daniels.
-
- * Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in
- dependency. Reported by Marcus Daniels.
-
- * cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement.
- Generally cleanup using #if instead of #ifndef.
-
- * Makefile.in: Correct typos in comment. By Franc,ois Pinard.
-
-Mon Nov 6 00:27:02 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (install-src): Don't install libintl.h and libintl.a
- if we use an available gettext implementation.
-
-Sun Nov 5 22:02:08 1995 Ulrich Drepper <drepper@myware>
-
- * libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS. Reported
- by Franc,ois Pinard.
-
- * libgettext.h: Use #if instead of #ifdef/#ifndef.
-
- * finddomain.c:
- Comments describing what has to be done should start with FIXME.
+ * Makefile.in (distclean): Delete config files.
-Sun Nov 5 19:38:01 1995 Ulrich Drepper <drepper@myware>
+2006-09-13 Eric Botcazou <ebotcazou@libertysurf.fr>
- * Makefile.in (DISTFILES): Split. Use DISTFILES with normal meaning.
- DISTFILES.common names the files common to both dist goals.
- DISTFILES.gettext are the files only distributed in GNU gettext.
+ PR other/23541
+ PR other/26507
+ Backport from gettext repository:
-Sun Nov 5 17:32:54 1995 Ulrich Drepper <drepper@myware>
+ 2003-09-04 Bruno Haible <bruno@clisp.org>
+ * dgettext.c: Include <locale.h> after gettextP.h, not before. This
+ ensures that libintl_dcgettext is correctly declared on Solaris.
+ (Needed because Solaris <locale.h> includes libintl.h.)
+ * dngettext.c: Likewise, for the libintl_dcngettext declaration.
- * dcgettext.c (DCGETTEXT): Correct searching in derived locales.
- This was necessary since a change in _nl_find_msg several weeks
- ago. I really don't know this is still not fixed.
+2006-06-07 Daniel Jacobowitz <dan@codesourcery.com>
-Sun Nov 5 12:43:12 1995 Ulrich Drepper <drepper@myware>
+ * Makefile.in (install-info, install-dvi, install-ps, install-pdf):
+ New dummy targets.
- * loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL. This
- might mark a special condition.
+2005-05-23 Carlos O'Donell <carlos@codesourcery.com>
- * finddomain.c (make_entry_rec): Don't make illegal entry as decided.
-
- * Makefile.in (dist): Suppress error message when ln failed.
- Get files from $(srcdir) explicitly.
-
- * libgettext.h (gettext_const): Rename to gettext_noop.
-
-Fri Nov 3 07:36:50 1995 Ulrich Drepper <drepper@myware>
-
- * finddomain.c (make_entry_rec):
- Protect against wrong locale names by testing mask.
-
- * libgettext.h (gettext_const): Add macro definition.
- Capitalize macro arguments.
-
-Thu Nov 2 23:15:51 1995 Ulrich Drepper <drepper@myware>
-
- * finddomain.c (_nl_find_domain):
- Test for pointer != NULL before accessing value.
- Reported by Tom Tromey.
-
- * gettext.c (NULL):
- Define as (void*)0 instad of 0. Reported by Franc,ois Pinard.
-
-Mon Oct 30 21:28:52 1995 Ulrich Drepper <drepper@myware>
-
- * po2tbl.sed.in: Serious typo bug fixed by Jim Meyering.
-
-Sat Oct 28 23:20:47 1995 Ulrich Drepper <drepper@myware>
-
- * libgettext.h: Disable dcgettext optimization for Solaris 2.3.
-
- * localealias.c (alias_compare):
- Peter Miller reported that tolower in some systems is
- even dumber than I thought. Protect call by `isupper'.
-
-Fri Oct 27 22:22:51 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (libdir, includedir): New variables.
- (install-src): Install libintl.a and libintl.h in correct dirs.
-
-Fri Oct 27 22:07:29 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c.
-
- * po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques.
-
- * localealias.c:
- Fix typo and superflous test. Reported by Christian von Roques.
-
-Fri Oct 6 11:52:05 1995 Ulrich Drepper <drepper@myware>
-
- * finddomain.c (_nl_find_domain):
- Correct some remainder from the pre-CEN syntax. Now
- we don't have a constant number of successors anymore.
-
-Wed Sep 27 21:41:13 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (DISTFILES): Add libintl.h.glibc.
-
- * Makefile.in (dist-libc): Add goal for packing sources for glibc.
- (COMSRCS, COMHDRS): Splitted to separate sources shared with glibc.
-
- * loadmsgcat.c: Forget to continue #if line.
-
- * localealias.c:
- [_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name
- space clean.
-
- * dcgettext.c, finddomain.c: Better comment to last change.
-
- * loadmsgcat.c:
- [_LIBC]: Rename fstat, open, close, read, mmap, and munmap to
- __fstat, __open, __close, __read, __mmap, and __munmap resp
- to keep ANSI C name space clean.
-
- * finddomain.c:
- [_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean.
-
- * dcgettext.c:
- [_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to
- keep ANSI C name space clean.
-
- * libgettext.h:
- Include sys/types.h for those old SysV systems out there.
- Reported by Francesco Potorti`.
-
- * loadmsgcat.c (use_mmap): Define if compiled for glibc.
-
- * bindtextdom.c: Include all those standard headers
- unconditionally if _LIBC is defined.
-
- * finddomain.c: Fix 2 times defiend -> defined.
-
- * textdomain.c: Include libintl.h instead of libgettext.h when
- compiling for glibc. Include all those standard headers
- unconditionally if _LIBC is defined.
-
- * localealias.c, loadmsgcat.c: Prepare to be compiled in glibc.
-
- * gettext.c:
- Include libintl.h instead of libgettext.h when compiling for glibc.
- Get NULL from stddef.h if we compile for glibc.
-
- * finddomain.c: Include libintl.h instead of libgettext.h when
- compiling for glibc. Include all those standard headers
- unconditionally if _LIBC is defined.
-
- * dcgettext.c: Include all those standard headers unconditionally
- if _LIBC is defined.
-
- * dgettext.c: If compiled in glibc include libintl.h instead of
- libgettext.h.
- (locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc.
-
- * dcgettext.c: If compiled in glibc include libintl.h instead of
- libgettext.h.
- (getcwd): Don't rely on HAVE_GETCWD when compiling for glibc.
-
- * bindtextdom.c:
- If compiled in glibc include libintl.h instead of libgettext.h.
-
-Mon Sep 25 22:23:06 1995 Ulrich Drepper <drepper@myware>
-
- * localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0.
- Reported by Marcus Daniels.
-
- * cat-compat.c (bindtextdomain):
- String used in putenv must not be recycled.
- Reported by Marcus Daniels.
-
- * libgettext.h (__USE_GNU_GETTEXT):
- Additional symbol to signal that we use GNU gettext
- library.
-
- * cat-compat.c (bindtextdomain):
- Fix bug with the strange stpcpy replacement.
- Reported by Nelson Beebe.
-
-Sat Sep 23 08:23:51 1995 Ulrich Drepper <drepper@myware>
-
- * cat-compat.c: Include <string.h> for stpcpy prototype.
-
- * localealias.c (read_alias_file):
- While expand strdup code temporary variable `cp' hided
- higher level variable with same name. Rename to `tp'.
-
- * textdomain.c (textdomain):
- Avoid warning by using temporary variable in strdup code.
-
- * finddomain.c (_nl_find_domain): Remove unused variable `application'.
-
-Thu Sep 21 15:51:44 1995 Ulrich Drepper <drepper@myware>
-
- * localealias.c (alias_compare):
- Use strcasecmp() only if available. Else use
- implementation in place.
-
- * intl-compat.c:
- Wrapper functions now call *__ functions instead of __*.
-
- * libgettext.h: Declare prototypes for *__ functions instead for __*.
-
- * cat-compat.c, loadmsgcat.c:
- Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
- of the standard libc and so prevent libintl.a from being used
- standalone.
-
- * bindtextdom.c:
- Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
- of the standard libc and so prevent libintl.a from being used
- standalone.
- Rename to bindtextdomain__ if not used in GNU C Library.
-
- * dgettext.c:
- Rename function to dgettext__ if not used in GNU C Library.
-
- * gettext.c:
- Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
- of the standard libc and so prevent libintl.a from being used
- standalone.
- Functions now called gettext__ if not used in GNU C Library.
-
- * dcgettext.c, localealias.c, textdomain.c, finddomain.c:
- Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
- of the standard libc and so prevent libintl.a from being used
- standalone.
-
-Sun Sep 17 23:14:49 1995 Ulrich Drepper <drepper@myware>
-
- * finddomain.c: Correct some bugs in handling of CEN standard
- locale definitions.
-
-Thu Sep 7 01:49:28 1995 Ulrich Drepper <drepper@myware>
-
- * finddomain.c: Implement CEN syntax.
-
- * gettextP.h (loaded_domain): Extend number of successors to 31.
-
-Sat Aug 19 19:25:29 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (aliaspath): Remove path to X11 locale dir.
-
- * Makefile.in: Make install-src depend on install. This helps
- gettext to install the sources and other packages can use the
- install goal.
-
-Sat Aug 19 15:19:33 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (uninstall): Remove stuff installed by install-src.
-
-Tue Aug 15 13:13:53 1995 Ulrich Drepper <drepper@myware>
-
- * VERSION.in: Initial revision.
-
- * Makefile.in (DISTFILES):
- Add VERSION file. This is not necessary for gettext, but
- for other packages using this library.
-
-Tue Aug 15 06:16:44 1995 Ulrich Drepper <drepper@myware>
-
- * gettextP.h (_nl_find_domain):
- New prototype after changing search strategy.
-
- * finddomain.c (_nl_find_domain):
- We now try only to find a specified catalog. Fall back to other
- catalogs listed in the locale list is now done in __dcgettext.
-
- * dcgettext.c (__dcgettext):
- Now we provide message fall back even to different languages.
- I.e. if a message is not available in one language all the other
- in the locale list a tried. Formerly fall back was only possible
- within one language. Implemented by moving one loop from
- _nl_find_domain to here.
-
-Mon Aug 14 23:45:50 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (gettextsrcdir):
- Directory where source of GNU gettext library are made
- available.
- (INSTALL, INSTALL_DATA): Programs used for installing sources.
- (gettext-src): New. Rule to install GNU gettext sources for use in
- gettextize shell script.
-
-Sun Aug 13 14:40:48 1995 Ulrich Drepper <drepper@myware>
-
- * loadmsgcat.c (_nl_load_domain):
- Use mmap for loading only when munmap function is
- also available.
-
- * Makefile.in (install): Depend on `all' goal.
-
-Wed Aug 9 11:04:33 1995 Ulrich Drepper <drepper@myware>
-
- * localealias.c (read_alias_file):
- Do not overwrite '\n' when terminating alias value string.
-
- * localealias.c (read_alias_file):
- Handle long lines. Ignore the rest not fitting in
- the buffer after the initial `fgets' call.
-
-Wed Aug 9 00:54:29 1995 Ulrich Drepper <drepper@myware>
-
- * gettextP.h (_nl_load_domain):
- Add prototype, replacing prototype for _nl_load_msg_cat.
-
- * finddomain.c (_nl_find_domain):
- Remove unneeded variable filename and filename_len.
- (expand_alias): Remove prototype because functions does not
- exist anymore.
-
- * localealias.c (read_alias_file):
- Change type of fname_len parameter to int.
- (xmalloc): Add prototype.
-
- * loadmsgcat.c: Better prototypes for xmalloc.
-
-Tue Aug 8 22:30:39 1995 Ulrich Drepper <drepper@myware>
-
- * finddomain.c (_nl_find_domain):
- Allow alias name to be constructed from the four components.
-
- * Makefile.in (aliaspath): New variable. Set to preliminary value.
- (SOURCES): Add localealias.c.
- (OBJECTS): Add localealias.o.
-
- * gettextP.h: Add prototype for _nl_expand_alias.
-
- * finddomain.c: Aliasing handled in intl/localealias.c.
-
- * localealias.c: Aliasing for locale names.
-
- * bindtextdom.c: Better prototypes for xmalloc and xstrdup.
-
-Mon Aug 7 23:47:42 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (DISTFILES): gettext.perl is now found in misc/.
-
- * cat-compat.c (bindtextdomain):
- Correct implementation. dirname parameter was not used.
- Reported by Marcus Daniels.
-
- * gettextP.h (loaded_domain):
- New fields `successor' and `decided' for oo, lazy
- message handling implementation.
-
- * dcgettext.c:
- Adopt for oo, lazy message handliing.
- Now we can inherit translations from less specific locales.
- (find_msg): New function.
-
- * loadmsgcat.c, finddomain.c:
- Complete rewrite. Implement oo, lazy message handling :-).
- We now have an additional environment variable `LANGUAGE' with
- a higher priority than LC_ALL for the LC_MESSAGE locale.
- Here we can set a colon separated list of specifications each
- of the form `language[_territory[.codeset]][@modifier]'.
-
-Sat Aug 5 09:55:42 1995 Ulrich Drepper <drepper@myware>
-
- * finddomain.c (unistd.h):
- Include to get _PC_PATH_MAX defined on system having it.
-
-Fri Aug 4 22:42:00 1995 Ulrich Drepper <drepper@myware>
-
- * finddomain.c (stpcpy): Include prototype.
-
- * Makefile.in (dist): Remove `copying instead' message.
-
-Wed Aug 2 18:52:03 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (ID, TAGS): Do not use $^.
-
-Tue Aug 1 20:07:11 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (TAGS, ID): Use $^ as command argument.
- (TAGS): Give etags -o option t write to current directory,
- not $(srcdir).
- (ID): Use $(srcdir) instead os $(top_srcdir)/src.
- (distclean): Remove ID.
-
-Sun Jul 30 11:51:46 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (gnulocaledir):
- New variable, always using share/ for data directory.
- (DEFS): Add GNULOCALEDIR, used in finddomain.c.
-
- * finddomain.c (_nl_default_dirname):
- Set to GNULOCALEDIR, because it always has to point
- to the directory where GNU gettext Library writes it to.
-
- * intl-compat.c (textdomain, bindtextdomain):
- Undefine macros before function definition.
-
-Sat Jul 22 01:10:02 1995 Ulrich Drepper <drepper@myware>
-
- * libgettext.h (_LIBINTL_H):
- Protect definition in case where this file is included as
- libgettext.h on Solaris machines. Add comment about this.
-
-Wed Jul 19 02:36:42 1995 Ulrich Drepper <drepper@myware>
-
- * intl-compat.c (textdomain): Correct typo.
-
-Wed Jul 19 01:51:35 1995 Ulrich Drepper <drepper@myware>
-
- * dcgettext.c (dcgettext): Function now called __dcgettext.
-
- * dgettext.c (dgettext): Now called __dgettext and calls
- __dcgettext.
-
- * gettext.c (gettext):
- Function now called __gettext and calls __dgettext.
-
- * textdomain.c (textdomain): Function now called __textdomain.
-
- * bindtextdom.c (bindtextdomain): Function now called
- __bindtextdomain.
-
- * intl-compat.c: Initial revision.
-
- * Makefile.in (SOURCES): Add intl-compat.c.
- (OBJECTS): We always compile the GNU gettext library functions.
- OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o,
- and intl-compat.o.
- (GETTOBJS): Contains now only intl-compat.o.
-
- * libgettext.h:
- Re-include protection matches dualistic character of libgettext.h.
- For all functions in GNU gettext library define __ counter part.
-
- * finddomain.c (strchr): Define as index if not found in C library.
- (_nl_find_domain): For relative paths paste / in between.
-
-Tue Jul 18 16:37:45 1995 Ulrich Drepper <drepper@myware>
-
- * loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h.
-
- * xopen-msg.sed: Fix bug with `msgstr ""' lines.
- A little bit better comments.
-
-Tue Jul 18 01:18:27 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in:
- po-mode.el, makelinks, combine-sh are now found in ../misc.
-
- * po-mode.el, makelinks, combine-sh, elisp-comp:
- Moved to ../misc/.
-
- * libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__.
-
-Sun Jul 16 22:33:02 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (INSTALL, INSTALL_DATA): New variables.
- (install-data, uninstall): Install/uninstall .elc file.
-
- * po-mode.el (Installation comment):
- Add .pox as possible extension of .po files.
-
-Sun Jul 16 13:23:27 1995 Ulrich Drepper <drepper@myware>
-
- * elisp-comp: Complete new version by Franc,ois: This does not
- fail when not compiling in the source directory.
-
-Sun Jul 16 00:12:17 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (../po/cat-id-tbl.o):
- Use $(MAKE) instead of make for recursive make.
-
- * Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh.
- (install-exec): Add missing dummy goal.
- (install-data, uninstall): @ in multi-line shell command at
- beginning, not in front of echo. Reported by Eric Backus.
-
-Sat Jul 15 00:21:28 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (DISTFILES):
- Rename libgettext.perl to gettext.perl to fit in 14 chars
- file systems.
-
- * gettext.perl:
- Rename to gettext.perl to fit in 14 chars file systems.
-
-Thu Jul 13 23:17:20 1995 Ulrich Drepper <drepper@myware>
-
- * cat-compat.c: If !STDC_HEADERS try to include malloc.h.
-
-Thu Jul 13 20:55:02 1995 Ulrich Drepper <drepper@myware>
-
- * po2tbl.sed.in: Pretty printing.
-
- * linux-msg.sed, xopen-msg.sed:
- Correct bugs with handling substitute flags in branches.
-
- * hash-string.h (hash_string):
- Old K&R compilers don't under stand `unsigned char'.
-
- * gettext.h (nls_uint32):
- Some old K&R compilers (eg HP) don't understand `unsigned int'.
-
- * cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes.
-
-Thu Jul 13 01:34:33 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (ELCFILES): New variable.
- (DISTFILES): Add elisp-comp.
- Add implicit rule for .el -> .elc compilation.
- (install-data): install $ELCFILES
- (clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp.
-
- * elisp-comp: Initial revision
-
-Wed Jul 12 16:14:52 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in:
- cat-id-tbl.c is now found in po/. This enables us to use an identical
- intl/ directory in all packages.
-
- * dcgettext.c (dcgettext): hashing does not work for table size <= 2.
-
- * textdomain.c: fix typo (#if def -> #if defined)
-
-Tue Jul 11 18:44:43 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in (stamp-cat-id): use top_srcdir to address source files
- (DISTFILES,distclean): move tupdate.perl to src/
-
- * po-to-tbl.sed.in:
- add additional jump to clear change flag to recognize multiline strings
-
-Tue Jul 11 01:32:50 1995 Ulrich Drepper <drepper@myware>
-
- * textdomain.c: Protect inclusion of stdlib.h and string.h.
-
- * loadmsgcat.c: Protect inclusion of stdlib.h.
-
- * libgettext.h: Protect inclusion of locale.h.
- Allow use in C++ programs.
- Define NULL is not happened already.
-
- * Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of
- po-to-tbl.sed.
- (distclean): remove po-to-tbl.sed and tupdate.perl.
-
- * tupdate.perl.in: Substitute Perl path even in exec line.
- Don't include entries without translation from old .po file.
-
-Tue Jul 4 00:41:51 1995 Ulrich Drepper <drepper@myware>
-
- * tupdate.perl.in: use "Updated: " in msgid "".
-
- * cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR).
- Define getenv if !__STDC__.
-
- * bindtextdom.c: Protect stdlib.h and string.h inclusion.
- Define free if !__STDC__.
-
- * finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
- Define free if !__STDC__.
-
- * cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
-
-Mon Jul 3 23:56:30 1995 Ulrich Drepper <drepper@myware>
-
- * Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR.
- Remove unneeded $(srcdir) from Makefile.in dependency.
-
- * makelinks: Add copyright and short description.
-
- * po-mode.el: Last version for 0.7.
-
- * tupdate.perl.in: Fix die message.
-
- * dcgettext.c: Protect include of string.h.
-
- * gettext.c: Protect include of stdlib.h and further tries to get NULL.
-
- * finddomain.c: Some corrections in includes.
-
- * Makefile.in (INCLUDES): Prune list correct path to Makefile.in.
-
- * po-to-tbl.sed: Adopt for new .po file format.
-
- * linux-msg.sed, xopen-msg.sed: Adopt for new .po file format.
-
-Sun Jul 2 23:55:03 1995 Ulrich Drepper <drepper@myware>
+ * Makefile.in: Add info dvi ps pdf html install-html to .PHONY
+ Add install-html target.
- * tupdate.perl.in: Complete rewrite for new .po file format.
+2005-05-13 Nick Clifton <nickc@redhat.com>
-Sun Jul 2 02:06:50 1995 Ulrich Drepper <drepper@myware>
+ * Update the address and phone number of the FSF organization in
+ the GPL notices in the following files:
+ Makefile.in, bindtextdom.c, dcgettext.c, dcigettext.c,
+ dcngettext.c, dgettext.c, dngettext.c, eval-plural.h,
+ explodename.c, finddomain.c, gettext.c, gettextP.h, gmo.h,
+ hash-string.h, intl-compat.c, l10nflist.c, libgnuintl.h,
+ loadinfo.h, loadmsgcat.c, localcharset.c, localcharset.h,
+ locale.alias, localealias.c, localename.c, log.c, ngettext.c,
+ osdep.c, plural-exp.c, plural-exp.h, plural.c, plural.y,
+ relocatable.c, relocatable.h, textdomain.c
+
+2004-11-24 Kelley Cook <kcook@gcc.gnu.org>
+
+ * aclocal.m4: Regenerate.
+
+2004-09-23 Kelley Cook <kcook@gcc.gnu.org>
+
+ * Makefile.in (config.h.in): Correct dependencies.
+ (stamp-h1): Likewise.
+ (config.intl): Likewise.
+
+2004-09-22 Kelley Cook <kcook@gcc.gnu.org>
+
+ * configure.ac (AC_CONFIG_MACRO_DIR): New.
+ (ACLOCAL, AUTOCONF, AUTOHEADER, MAINT): Substitute.
+ * Makefile.in: Update with maintainer mode rules.
+ * README: Update aclocal regeneration instructions.
+ * aclocal.m4, configure: Regenerate.
+
+2004-09-22 Kelley Cook <kcook@gcc.gnu.org>
+
+ * .cvsignore: Ignore autom4te.cache
+
+2004-04-25 Paolo Bonzini <bonzini@gnu.org>
+
+ * configure.ac: Point config.intl to the parent directory of
+ ${top_builddir}.
+ * configure: Regenerate.
+
+2004-03-10 Kelley Cook <kcook@gcc.gnu.org>
+
+ * configure.ac: Bump AC_PREREQ to 2.59.
+ * configure: Regenerate.
+ * config.h.in: Regenerate.
+
+2004-02-29 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * configure.in: Convert to autoconf 2.57, gratuitous stylistic
+ cleanup, rename to configure.ac.
+ * configure.ac: Renamed from configure.in.
+ * config.h.in: Rebuilt with autoheader 2.57.
+ * configure: Rebuilt with autoconf 2.57
+ * README: Update to reflect rename of configure.in to configure.ac.
+
+2003-07-07 Zack Weinberg <zack@codesourcery.com>
+
+ * README: Update.
+ * Makefile.in (INSTALL, INSTALL_DATA, MKINSTALLDIRS,
+ mkinstalldirs, gettextsrcdir, l): Delete.
+ (COMPILE): Add $(DEFS-$@), remove $(XCFLAGS).
+ (HEADERS): libgnuintl.h not libgnuintl.h.in. Remove os2compat.h.
+ (SOURCES): Remove os2compat.c.
+ (DEFS-dcigettext.o, DEFS-localealias.o, DEFS-localcharset.o,
+ DEFS-relocatable.o): New.
+ (all-yes): Add config.intl.
+ (libintl.h): Use cp, not cat.
+ (INCLUDES): Remove -I..
+ (TAGS, CTAGS, ID): Word wrap.
+ (mostlyclean, distclean): Remove junk.
+ (config.intl): New rule.
+ * aclocal.m4: sinclude ../config/progtest.m4 instead of
+ including it inline.
+ * config.intl.in: New file.
+ * configure.in: Take out unnecessary AC_CONFIG_AUX_DIR.
+ Take out AC_DEFINEs for LOCALEDIR, LOCALE_ALIAS_PATH,
+ LIBDIR, INSTALLDIR. Set LIBINTL_DEP and INCINTL and AC_SUBST
+ them. Add config.intl to AC_OUTPUT.
+ * os2compat.c, os2compat.h: Delete, unused.
+
+2003-07-04 Zack Weinberg <zack@codesourcery.com>
+
+ * Makefile.in: Remove unnecessary capabilities for
+ installation, build of shared libraries, generation of
+ distribution tarballs, etc. Fix all the places that rely on
+ the parent directory. Don't generate libgnuintl.h from
+ anything; do generate $(objdir)/libintl.h from libgnuintl.h if
+ necessary. Adjust DEFS for use of config.h.
+ * libgnuintl.h.in: Rename libgnuintl.h.
+ * README: New file.
+ * config.charset, ref-add.sin, ref-del.sin: Delete (unused).
+ * COPYING.LIB-2.0, COPYING.LIB-2.1: Delete (redundant).
+ * aclocal.m4: New; generated per instructions in gettext manual.
+ * configure.in: New; written from scratch for this configuration.
+ * configure, config.h.in: Generated.
+
+2003-05-22 GNU <bug-gnu-gettext@gnu.org>
+
+ * Version 0.12.1 released.
- * First official release. This directory contains all the code
- needed to internationalize own packages. It provides functions
- which allow to use the X/Open catgets function with an interface
- like the Uniforum gettext function. For system which does not
- have neither of those a complete implementation is provided.
diff --git a/intl/Makefile.in b/intl/Makefile.in
index ed579c7b232b..ca3814dc8512 100644
--- a/intl/Makefile.in
+++ b/intl/Makefile.in
@@ -1,217 +1,237 @@
-# Makefile for directory with message catalog handling in GNU NLS Utilities.
-# Copyright (C) 1995, 1996, 1997, 1998, 2006 Free Software Foundation, Inc.
+# Makefile for directory with message catalog handling library of GNU gettext
+# Copyright (C) 1995-1998, 2000-2003 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)
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library 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.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+# USA.
-PACKAGE = @PACKAGE@
-VERSION = @VERSION@
+# This Makefile has been modified from the original shipped with
+# gettext 0.12.1 to remove the ability to install libintl (which
+# we do not need nor want), the ability to build a shared library
+# (likewise), and a large number of heinous kludges.
-SHELL = /bin/sh
+SHELL = @SHELL@
srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-top_builddir = ..
-VPATH = @srcdir@
+VPATH = $(srcdir)
prefix = @prefix@
exec_prefix = @exec_prefix@
transform = @program_transform_name@
-libdir = $(exec_prefix)/lib
-includedir = $(prefix)/include
-datadir = $(prefix)/@DATADIRNAME@
+libdir = @libdir@
+includedir = @includedir@
+datadir = @datadir@
localedir = $(datadir)/locale
-gnulocaledir = $(datadir)/locale
-gettextsrcdir = @datadir@/gettext/intl
-aliaspath = $(localedir):.
-subdir = intl
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-
-l = @l@
+aliaspath = $(localedir)
AR = ar
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
CC = @CC@
-LIBTOOL = @LIBTOOL@
RANLIB = @RANLIB@
-
-DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \
--DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@
+YACC = @INTLBISON@ -y -d
+YFLAGS = --name-prefix=__gettext
CPPFLAGS = @CPPFLAGS@
CFLAGS = @CFLAGS@
LDFLAGS = @LDFLAGS@
-
-COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
-
-HEADERS = $(COMHDRS) libgettext.h loadinfo.h
-COMHDRS = gettext.h gettextP.h hash-string.h
-SOURCES = $(COMSRCS) intl-compat.c cat-compat.c
-COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
-finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
-explodename.c
-OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
-finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
-explodename.$lo
-CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo
-GETTOBJS = intl-compat.$lo
-DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \
-xopen-msg.sed $(HEADERS) $(SOURCES)
-DISTFILES.normal = VERSION
-DISTFILES.gettext = libintl.glibc intlh.inst.in
-
-.SUFFIXES:
-.SUFFIXES: .c .o .lo
-.c.o:
- $(COMPILE) $<
-.c.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) $<
-
-INCLUDES = -I. -I$(srcdir)
+LIBS = @LIBS@
+DEFS = -DHAVE_CONFIG_H
+
+COMPILE = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(DEFS-$@) $(INCLUDES)
+
+HEADERS = \
+ gmo.h \
+ gettextP.h \
+ hash-string.h \
+ loadinfo.h \
+ plural-exp.h \
+ eval-plural.h \
+ localcharset.h \
+ relocatable.h \
+ libgnuintl.h
+SOURCES = \
+ bindtextdom.c \
+ dcgettext.c \
+ dgettext.c \
+ gettext.c \
+ finddomain.c \
+ loadmsgcat.c \
+ localealias.c \
+ textdomain.c \
+ l10nflist.c \
+ explodename.c \
+ dcigettext.c \
+ dcngettext.c \
+ dngettext.c \
+ ngettext.c \
+ plural.y \
+ plural-exp.c \
+ localcharset.c \
+ relocatable.c \
+ localename.c \
+ log.c \
+ osdep.c \
+ intl-compat.c
+OBJECTS = \
+ bindtextdom.o \
+ dcgettext.o \
+ dgettext.o \
+ gettext.o \
+ finddomain.o \
+ loadmsgcat.o \
+ localealias.o \
+ textdomain.o \
+ l10nflist.o \
+ explodename.o \
+ dcigettext.o \
+ dcngettext.o \
+ dngettext.o \
+ ngettext.o \
+ plural.o \
+ plural-exp.o \
+ localcharset.o \
+ relocatable.o \
+ localename.o \
+ log.o \
+ osdep.o \
+ intl-compat.o
+
+DEFS-dcigettext.o = -DLOCALEDIR="\"$(localedir)\""
+DEFS-localealias.o = -DLOCALE_ALIAS_PATH="\"$(aliaspath)\""
+DEFS-localcharset.o = -DLIBDIR="\"$(libdir)\""
+DEFS-relocatable.o = -DINSTALLDIR="\"$(libdir)\""
all: all-@USE_INCLUDED_LIBINTL@
-
-all-yes: libintl.$la intlh.inst
-all-no:
-install-info:
+all-yes: libintl.a libintl.h config.intl
+all-no: # nothing
libintl.a: $(OBJECTS)
rm -f $@
$(AR) cru $@ $(OBJECTS)
$(RANLIB) $@
-libintl.la: $(OBJECTS)
- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \
- -version-info 1:0 -rpath $(libdir)
+libintl.h: $(srcdir)/libgnuintl.h
+ cp $(srcdir)/libgnuintl.h $@
-../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot
- cd ../po && $(MAKE) cat-id-tbl.$lo
+.SUFFIXES:
+.SUFFIXES: .c .y .o
-check: all
+.c.o:
+ $(COMPILE) $<
+
+.y.c:
+ $(YACC) $(YFLAGS) --output $@ $<
+ rm -f $*.h
+
+INCLUDES = -I. -I$(srcdir)
-# This installation goal is only used in GNU gettext. Packages which
-# only use the library should use install instead.
+check: all
-# We must not install the libintl.h/libintl.a files if we are on a
-# system which has the gettext() function in its C library or in a
-# separate library or use the catgets interface. A special case is
-# where configure found a previously installed GNU gettext library.
-# If you want to use the one which comes with this version of the
-# package, you have to use `configure --with-included-gettext'.
+# The installation targets have been disabled.
install: install-exec install-data
install-exec: all
- if test "$(PACKAGE)" = "gettext" \
- && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
- if test -r $(MKINSTALLDIRS); then \
- $(MKINSTALLDIRS) $(libdir) $(includedir); \
- else \
- $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \
- fi; \
- $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \
- $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \
- else \
- : ; \
- fi
install-data: all
- if test "$(PACKAGE)" = "gettext"; then \
- if test -r $(MKINSTALLDIRS); then \
- $(MKINSTALLDIRS) $(gettextsrcdir); \
- else \
- $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
- fi; \
- $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \
- dists="$(DISTFILES.common)"; \
- for file in $$dists; do \
- $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-
-# Define this as empty until I found a useful application.
+install-strip: install
+installdirs:
installcheck:
-
uninstall:
- dists="$(DISTFILES.common)"; \
- for file in $$dists; do \
- rm -f $(gettextsrcdir)/$$file; \
- done
-.PHONY: html info dvi
-html info dvi:
+.PHONY: info dvi ps pdf html
+.PHONY: install-info install-dvi install-ps install-pdf install-html
-.PHONY: install-html
-install-html:
+info dvi ps pdf html:
+install-info install-dvi install-ps install-pdf install-html:
-$(OBJECTS): config.h libgettext.h
-bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
-dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
+$(OBJECTS): config.h libintl.h
+bindtextdom.o dcgettext.o dcigettext.o dcngettext.o dgettext.o \
+dngettext.o finddomain.o gettext.o intl-compat.o loadmsgcat.o \
+localealias.o ngettext.o textdomain.o: gettextP.h gmo.h loadinfo.h
+dcigettext.o loadmsgcat.o: hash-string.h
+explodename.o l10nflist.o: loadinfo.h
+dcigettext.o loadmsgcat.o plural.o plural-exp.o: plural-exp.h
+dcigettext.o: eval-plural.h
+localcharset.o: localcharset.h
+localealias.o localcharset.o relocatable.o: relocatable.h
tags: TAGS
-
TAGS: $(HEADERS) $(SOURCES)
- here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
+ here=`pwd`; cd $(srcdir) && \
+ etags -o $$here/TAGS $(HEADERS) $(SOURCES)
-id: ID
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES)
+ here=`pwd`; cd $(srcdir) && \
+ ctags -o $$here/CTAGS $(HEADERS) $(SOURCES)
+id: ID
ID: $(HEADERS) $(SOURCES)
- here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
-
+ here=`pwd`; cd $(srcdir) && \
+ mkid -f$$here/ID $(HEADERS) $(SOURCES)
mostlyclean:
- rm -f *.a *.o *.lo core core.*
+ rm -f *.a *.la *.o *.obj *.lo core core.* libintl.h
clean: mostlyclean
distclean: clean
- rm -f Makefile ID TAGS po2msg.sed po2tbl.sed libintl.h config.log
+ rm -f config.status config.cache config.log config.intl config.h
+ rm -f Makefile ID TAGS
maintainer-clean: distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-
-# GNU gettext needs not contain the file `VERSION' but contains some
-# other files which should not be distributed in other packages.
-distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir: Makefile $(DISTFILES)
- if test "$(PACKAGE)" = gettext; then \
- additional="$(DISTFILES.gettext)"; \
- else \
- additional="$(DISTFILES.normal)"; \
- fi; \
- for file in $(DISTFILES.common) $$additional; do \
- ln $(srcdir)/$$file $(distdir) 2> /dev/null \
- || cp -p $(srcdir)/$$file $(distdir); \
- done
-
-dist-libc:
- tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc
-
-Makefile: Makefile.in config.status
- CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-# The dependency for intlh.inst is different in gettext and all other
-# packages. Because we cannot you GNU make features we have to solve
-# the problem while rewriting Makefile.in.
-@GT_YES@intlh.inst: intlh.inst.in ../config.status
-@GT_YES@ cd .. \
-@GT_YES@ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
-@GT_YES@ $(SHELL) ./config.status
-@GT_NO@.PHONY: intlh.inst
-@GT_NO@intlh.inst:
+
+# The 'make dist' targets have been disabled; the GNU toolchain handles this
+# with a script maintained separately from the Makefile.
+dist:
+distdir:
+
+# Rules to rebuild the configuration
+
+Makefile: $(srcdir)/Makefile.in config.status
+ $(SHELL) ./config.status Makefile
+
+config.intl: $(srcdir)/config.intl.in config.status
+ $(SHELL) ./config.status config.intl
+
+config.status: $(srcdir)/configure
+ $(SHELL) ./config.status --recheck
+
+$(srcdir)/configure: @MAINT@ $(srcdir)/aclocal.m4 $(srcdir)/configure.ac
+ cd $(srcdir) && $(AUTOCONF)
+
+$(srcdir)/aclocal.m4: @MAINT@ $(srcdir)/configure.ac \
+ $(srcdir)/../config/codeset.m4 $(srcdir)/../config/gettext.m4 \
+ $(srcdir)/../config/glibc21.m4 $(srcdir)/../config/iconv.m4 \
+ $(srcdir)/../config/intdiv0.m4 $(srcdir)/../config/inttypes-pri.m4 \
+ $(srcdir)/../config/inttypes.m4 $(srcdir)/../config/inttypes_h.m4 \
+ $(srcdir)/../config/lcmessage.m4 $(srcdir)/../config/lib-ld.m4 \
+ $(srcdir)/../config/lib-link.m4 $(srcdir)/../config/lib-prefix.m4 \
+ $(srcdir)/../config/nls.m4 $(srcdir)/../config/po.m4 \
+ $(srcdir)/../config/progtest.m4 $(srcdir)/../config/stdint_h.m4 \
+ $(srcdir)/../config/uintmax_t.m4 $(srcdir)/../config/ulonglong.m4
+ cd $(srcdir) && $(ACLOCAL) -I ../config
+
+config.h: stamp-h1
+ test -f config.h || (rm -f stamp-h1 && $(MAKE) stamp-h1)
+
+stamp-h1: $(srcdir)/config.h.in config.status
+ -rm -f stamp-h1
+ $(SHELL) ./config.status config.h
+
+$(srcdir)/config.h.in: @MAINT@ $(srcdir)/aclocal.m4 $(srcdir)/configure.ac
+ cd $(srcdir) && $(AUTOHEADER)
+ -rm -f stamp-h1
# 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.
diff --git a/intl/README b/intl/README
new file mode 100644
index 000000000000..6104343c9746
--- /dev/null
+++ b/intl/README
@@ -0,0 +1,21 @@
+GNU toolchain edition of GNU libintl 0.12.1
+
+Most of the content of this directory is taken from gettext 0.12.1
+and is owned by that project. Patches should be directed to the
+gettext developers first. However, note the following:
+
+* libintl.h comes from gettext, but is named libgnuintl.h.in in that
+ project's source tree.
+
+* The files COPYING.LIB-2.0 and COPYING.LIB-2.1 are redundant with the
+ top-level COPYING.LIB and have therefore been removed.
+
+* The files config.charset, ref-add.sin, ref-del.sin, os2compat.c,
+ and os2compat.h are not used in this setup and have therefore been
+ removed.
+
+* aclocal.m4 was constructed using automake's "aclocal -I ../config".
+
+* configure.ac, config.intl.in, and Makefile.in were written for this
+ directory layout, by Zack Weinberg <zack@codesourcery.com>. Please
+ direct patches for these files to gcc-patches@gcc.gnu.org.
diff --git a/intl/VERSION b/intl/VERSION
new file mode 100644
index 000000000000..130318357bbe
--- /dev/null
+++ b/intl/VERSION
@@ -0,0 +1 @@
+GNU gettext library from gettext-0.12.1
diff --git a/intl/acconfig.h b/intl/acconfig.h
deleted file mode 100644
index 70f81f808987..000000000000
--- a/intl/acconfig.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Define to 1 if NLS is requested. */
-#undef ENABLE_NLS
-
-/* Define as 1 if you have catgets and don't want to use GNU gettext. */
-#undef HAVE_CATGETS
-
-/* Define as 1 if you have gettext and don't want to use GNU gettext. */
-#undef HAVE_GETTEXT
-
-/* Define as 1 if you have the stpcpy function. */
-#undef HAVE_STPCPY
-
-/* Define if your locale.h file contains LC_MESSAGES. */
-#undef HAVE_LC_MESSAGES
diff --git a/intl/aclocal.m4 b/intl/aclocal.m4
index 225439f21253..5dac23519952 100644
--- a/intl/aclocal.m4
+++ b/intl/aclocal.m4
@@ -1,387 +1,31 @@
-dnl aclocal.m4 generated automatically by aclocal 1.3
-
-dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-dnl This Makefile.in is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-dnl PARTICULAR PURPOSE.
-
-# Like AC_CONFIG_HEADER, but automatically create stamp file.
-
-AC_DEFUN(AM_CONFIG_HEADER,
-[AC_PREREQ([2.12])
-AC_CONFIG_HEADER([$1])
-dnl When config.status generates a header, we must update the stamp-h file.
-dnl This file resides in the same directory as the config header
-dnl that is generated. We must strip everything past the first ":",
-dnl and everything past the last "/".
-AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
-ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
-<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
-<<am_indx=1
-for am_file in <<$1>>; do
- case " <<$>>CONFIG_HEADERS " in
- *" <<$>>am_file "*<<)>>
- echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
- ;;
- esac
- am_indx=`expr "<<$>>am_indx" + 1`
-done<<>>dnl>>)
-changequote([,]))])
-
-
-# serial 1
-
-AC_DEFUN(AM_PROG_INSTALL,
-[AC_REQUIRE([AC_PROG_INSTALL])
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
-AC_SUBST(INSTALL_SCRIPT)dnl
-])
-
-# This file is derived from `gettext.m4'. The difference is that the
-# included macros assume Cygnus-style source and build trees.
-
-# Macro to add for using GNU gettext.
-# Ulrich Drepper <drepper@cygnus.com>, 1995.
-#
-# This file file 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.
-
-# serial 3
-
-AC_DEFUN(CY_WITH_NLS,
- [AC_MSG_CHECKING([whether NLS is requested])
- dnl Default is enabled NLS
- AC_ARG_ENABLE(nls,
- [ --disable-nls do not use Native Language Support],
- USE_NLS=$enableval, USE_NLS=yes)
- AC_MSG_RESULT($USE_NLS)
- AC_SUBST(USE_NLS)
-
- USE_INCLUDED_LIBINTL=no
-
- dnl If we use NLS figure out what method
- if test "$USE_NLS" = "yes"; then
- AC_DEFINE(ENABLE_NLS)
- AC_MSG_CHECKING([whether included gettext is requested])
- AC_ARG_WITH(included-gettext,
- [ --with-included-gettext use the GNU gettext library included here],
- nls_cv_force_use_gnu_gettext=$withval,
- nls_cv_force_use_gnu_gettext=no)
- AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
-
- nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
- if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
- dnl User does not insist on using GNU NLS library. Figure out what
- dnl to use. If gettext or catgets are available (in this order) we
- dnl use this. Else we have to fall back to GNU NLS library.
- dnl catgets is only used if permitted by option --with-catgets.
- nls_cv_header_intl=
- nls_cv_header_libgt=
- CATOBJEXT=NONE
-
- AC_CHECK_HEADER(libintl.h,
- [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc,
- [AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")],
- gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)])
-
- if test "$gt_cv_func_gettext_libc" != "yes"; then
- AC_CHECK_LIB(intl, bindtextdomain,
- [AC_CACHE_CHECK([for gettext in libintl],
- gt_cv_func_gettext_libintl,
- [AC_TRY_LINK([], [return (int) gettext ("")],
- gt_cv_func_gettext_libintl=yes,
- gt_cv_func_gettext_libintl=no)])])
- fi
-
- if test "$gt_cv_func_gettext_libc" = "yes" \
- || test "$gt_cv_func_gettext_libintl" = "yes"; then
- AC_DEFINE(HAVE_GETTEXT)
- AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
- if test "$MSGFMT" != "no"; then
- AC_CHECK_FUNCS(dcgettext)
- AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
- AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
- AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
- return _nl_msg_cat_cntr],
- [CATOBJEXT=.gmo
- DATADIRNAME=share],
- [CATOBJEXT=.mo
- DATADIRNAME=lib])
- INSTOBJEXT=.mo
- fi
- fi
- ])
-
- dnl In the standard gettext, we would now check for catgets.
- dnl However, we never want to use catgets for our releases.
-
- if test "$CATOBJEXT" = "NONE"; then
- dnl Neither gettext nor catgets in included in the C library.
- dnl Fall back on GNU gettext library.
- nls_cv_use_gnu_gettext=yes
- fi
- fi
-
- if test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Mark actions used to generate GNU NLS library.
- INTLOBJS="\$(GETTOBJS)"
- AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt)
- AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
- AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
- AC_SUBST(MSGFMT)
- 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
-
- dnl Test whether we really found GNU xgettext.
- if test "$XGETTEXT" != ":"; then
- dnl If it is no GNU xgettext we define it as : so that the
- dnl Makefiles still can work.
- if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
- : ;
- else
- AC_MSG_RESULT(
- [found xgettext programs is not GNU xgettext; ignore it])
- 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
-
- dnl These rules are solely for the distribution goal. While doing this
- dnl we only have to keep exactly one list of the available catalogs
- dnl in configure.in.
- for lang in $ALL_LINGUAS; do
- GMOFILES="$GMOFILES $lang.gmo"
- POFILES="$POFILES $lang.po"
- done
-
- dnl Make all variables we use known to autoconf.
- AC_SUBST(USE_INCLUDED_LIBINTL)
- AC_SUBST(CATALOGS)
- AC_SUBST(CATOBJEXT)
- AC_SUBST(DATADIRNAME)
- AC_SUBST(GMOFILES)
- AC_SUBST(INSTOBJEXT)
- AC_SUBST(INTLDEPS)
- AC_SUBST(INTLLIBS)
- AC_SUBST(INTLOBJS)
- AC_SUBST(POFILES)
- AC_SUBST(POSUB)
- ])
-
-AC_DEFUN(CY_GNU_GETTEXT,
- [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_REQUIRE([AC_PROG_RANLIB])dnl
- AC_REQUIRE([AC_ISC_POSIX])dnl
- AC_REQUIRE([AC_HEADER_STDC])dnl
- AC_REQUIRE([AC_C_CONST])dnl
- AC_REQUIRE([AC_C_INLINE])dnl
- AC_REQUIRE([AC_TYPE_OFF_T])dnl
- AC_REQUIRE([AC_TYPE_SIZE_T])dnl
- AC_REQUIRE([AC_FUNC_ALLOCA])dnl
- AC_REQUIRE([AC_FUNC_MMAP])dnl
-
- AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
-unistd.h values.h sys/param.h])
- AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
-__argz_count __argz_stringify __argz_next])
-
- if test "${ac_cv_func_stpcpy+set}" != "set"; then
- AC_CHECK_FUNCS(stpcpy)
- fi
- if test "${ac_cv_func_stpcpy}" = "yes"; then
- AC_DEFINE(HAVE_STPCPY)
- fi
-
- AM_LC_MESSAGES
- CY_WITH_NLS
-
- if test "x$CATOBJEXT" != "x"; then
- if test "x$ALL_LINGUAS" = "x"; then
- LINGUAS=
- else
- AC_MSG_CHECKING(for catalogs to be installed)
- NEW_LINGUAS=
- for lang in ${LINGUAS=$ALL_LINGUAS}; do
- case "$ALL_LINGUAS" in
- *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
- esac
- done
- LINGUAS=$NEW_LINGUAS
- AC_MSG_RESULT($LINGUAS)
- fi
-
- dnl Construct list of names of catalog files to be constructed.
- if test -n "$LINGUAS"; then
- for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
- fi
- fi
-
- dnl The reference to <locale.h> in the installed <libintl.h> file
- dnl must be resolved because we cannot expect the users of this
- dnl to define HAVE_LOCALE_H.
- 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
- AC_SUBST(INCLUDE_LOCALE_H)
-
- dnl Determine which catalog format we have (if any is needed)
- dnl For now we know about two different formats:
- dnl Linux libc-5 and the normal X/Open format
- if test -f $srcdir/po2tbl.sed.in; then
- if test "$CATOBJEXT" = ".cat"; then
- AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
-
- dnl Transform the SED scripts while copying because some dumb SEDs
- dnl cannot handle comments.
- sed -e '/^#/d' $srcdir/$msgformat-msg.sed > po2msg.sed
- fi
- dnl po2tbl.sed is always needed.
- sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
- $srcdir/po2tbl.sed.in > po2tbl.sed
- fi
-
- dnl In the intl/Makefile.in we have a special dependency which makes
- dnl only sense for gettext. We comment this out for non-gettext
- dnl packages.
- if test "$PACKAGE" = "gettext"; then
- GT_NO="#NO#"
- GT_YES=
- else
- GT_NO=
- GT_YES="#YES#"
- fi
- AC_SUBST(GT_NO)
- AC_SUBST(GT_YES)
-
- MKINSTALLDIRS="\$(srcdir)/../../mkinstalldirs"
- AC_SUBST(MKINSTALLDIRS)
-
- dnl *** For now the libtool support in intl/Makefile is not for real.
- l=
- AC_SUBST(l)
-
- dnl Generate list of files to be processed by xgettext which will
- dnl be included in po/Makefile. But only do this if the po directory
- dnl exists in srcdir.
- if test -d $srcdir/po; 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
- ])
-
-# Search path for a program which passes the given test.
-# Ulrich Drepper <drepper@cygnus.com>, 1996.
-#
-# This file file 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.
-
-# serial 1
-
-dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
-dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
-AC_DEFUN(AM_PATH_PROG_WITH_TEST,
-[# Extract the first word of "$2", so it can be a program name with args.
-set dummy $2; ac_word=[$]2
-AC_MSG_CHECKING([for $ac_word])
-AC_CACHE_VAL(ac_cv_path_$1,
-[case "[$]$1" in
- /*)
- ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in ifelse([$5], , $PATH, [$5]); do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if [$3]; then
- ac_cv_path_$1="$ac_dir/$ac_word"
- break
- fi
- fi
- done
- IFS="$ac_save_ifs"
-dnl If no 4th arg is given, leave the cache variable unset,
-dnl so AC_PATH_PROGS will keep looking.
-ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
-])dnl
- ;;
-esac])dnl
-$1="$ac_cv_path_$1"
-if test -n "[$]$1"; then
- AC_MSG_RESULT([$]$1)
-else
- AC_MSG_RESULT(no)
-fi
-AC_SUBST($1)dnl
-])
-
-# Check whether LC_MESSAGES is available in <locale.h>.
-# Ulrich Drepper <drepper@cygnus.com>, 1995.
-#
-# This file file 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.
-
-# serial 1
-
-AC_DEFUN(AM_LC_MESSAGES,
- [if test $ac_cv_header_locale_h = yes; then
- AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
- [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
- am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
- if test $am_cv_val_LC_MESSAGES = yes; then
- AC_DEFINE(HAVE_LC_MESSAGES)
- fi
- fi])
-
+# generated automatically by aclocal 1.9.3 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_include([../config/codeset.m4])
+m4_include([../config/gettext.m4])
+m4_include([../config/glibc21.m4])
+m4_include([../config/iconv.m4])
+m4_include([../config/intdiv0.m4])
+m4_include([../config/inttypes-pri.m4])
+m4_include([../config/inttypes.m4])
+m4_include([../config/inttypes_h.m4])
+m4_include([../config/lcmessage.m4])
+m4_include([../config/lib-ld.m4])
+m4_include([../config/lib-link.m4])
+m4_include([../config/lib-prefix.m4])
+m4_include([../config/nls.m4])
+m4_include([../config/po.m4])
+m4_include([../config/progtest.m4])
+m4_include([../config/stdint_h.m4])
+m4_include([../config/uintmax_t.m4])
+m4_include([../config/ulonglong.m4])
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
index 42b87d297b87..6faac5756a31 100644
--- a/intl/bindtextdom.c
+++ b/intl/bindtextdom.c
@@ -1,59 +1,75 @@
/* Implementation of the bindtextdomain(3) function
- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1995-1998, 2000, 2001, 2002 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)
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#else
-# ifdef HAVE_MALLOC_H
-# include <malloc.h>
-# else
-void free ();
-# endif
-#endif
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
-#if defined HAVE_STRING_H || defined _LIBC
-# include <string.h>
+#ifdef _LIBC
+# include <libintl.h>
#else
-# include <strings.h>
-# ifndef memcpy
-# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
-# endif
+# include "libgnuintl.h"
#endif
+#include "gettextP.h"
#ifdef _LIBC
-# include <libintl.h>
+/* We have to handle multi-threaded applications. */
+# include <bits/libc-lock.h>
#else
-# include "libgettext.h"
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_dirname libintl_nl_default_dirname
+# define _nl_domain_bindings libintl_nl_domain_bindings
+#endif
+
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
#endif
-#include "gettext.h"
-#include "gettextP.h"
/* @@ end of prolog @@ */
/* Contains the default location of the message catalogs. */
extern const char _nl_default_dirname[];
+#ifdef _LIBC
+extern const char _nl_default_dirname_internal[] attribute_hidden;
+#else
+# define INTUSE(name) name
+#endif
/* List with bindings of specific domains. */
extern struct binding *_nl_domain_bindings;
+/* Lock variable to protect the global data in the gettext implementation. */
+__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
+
/* Names for the libintl functions are a problem. They must not clash
with existing names and they should follow ANSI C. But this source
@@ -61,25 +77,48 @@ extern struct binding *_nl_domain_bindings;
prefix. So we have to make a difference here. */
#ifdef _LIBC
# define BINDTEXTDOMAIN __bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
# ifndef strdup
# define strdup(str) __strdup (str)
# endif
#else
-# define BINDTEXTDOMAIN bindtextdomain__
+# define BINDTEXTDOMAIN libintl_bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
#endif
-/* Specify that the DOMAINNAME message catalog will be found
- in DIRNAME rather than in the system locale data base. */
-char *
-BINDTEXTDOMAIN (domainname, dirname)
+/* Prototypes for local functions. */
+static void set_binding_values PARAMS ((const char *domainname,
+ const char **dirnamep,
+ const char **codesetp));
+
+/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
+ to be used for the DOMAINNAME message catalog.
+ If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
+ modified, only the current value is returned.
+ If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
+ modified nor returned. */
+static void
+set_binding_values (domainname, dirnamep, codesetp)
const char *domainname;
- const char *dirname;
+ const char **dirnamep;
+ const char **codesetp;
{
struct binding *binding;
+ int modified;
/* Some sanity checks. */
if (domainname == NULL || domainname[0] == '\0')
- return NULL;
+ {
+ if (dirnamep)
+ *dirnamep = NULL;
+ if (codesetp)
+ *codesetp = NULL;
+ return;
+ }
+
+ __libc_rwlock_wrlock (_nl_state_lock);
+
+ modified = 0;
for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
{
@@ -95,83 +134,173 @@ BINDTEXTDOMAIN (domainname, dirname)
}
}
- if (dirname == NULL)
- /* The current binding has be to returned. */
- return binding == NULL ? (char *) _nl_default_dirname : binding->dirname;
-
if (binding != NULL)
{
- /* The domain is already bound. If the new value and the old
- one are equal we simply do nothing. Otherwise replace the
- old binding. */
- if (strcmp (dirname, binding->dirname) != 0)
+ if (dirnamep)
{
- char *new_dirname;
+ const char *dirname = *dirnamep;
- if (strcmp (dirname, _nl_default_dirname) == 0)
- new_dirname = (char *) _nl_default_dirname;
+ if (dirname == NULL)
+ /* The current binding has be to returned. */
+ *dirnamep = binding->dirname;
else
{
+ /* The domain is already bound. If the new value and the old
+ one are equal we simply do nothing. Otherwise replace the
+ old binding. */
+ char *result = binding->dirname;
+ if (strcmp (dirname, result) != 0)
+ {
+ if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
+ result = (char *) INTUSE(_nl_default_dirname);
+ else
+ {
#if defined _LIBC || defined HAVE_STRDUP
- new_dirname = strdup (dirname);
- if (new_dirname == NULL)
- return NULL;
+ result = strdup (dirname);
#else
- size_t len = strlen (dirname) + 1;
- new_dirname = (char *) malloc (len);
- if (new_dirname == NULL)
- return NULL;
-
- memcpy (new_dirname, dirname, len);
+ size_t len = strlen (dirname) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result != NULL, 1))
+ memcpy (result, dirname, len);
#endif
+ }
+
+ if (__builtin_expect (result != NULL, 1))
+ {
+ if (binding->dirname != INTUSE(_nl_default_dirname))
+ free (binding->dirname);
+
+ binding->dirname = result;
+ modified = 1;
+ }
+ }
+ *dirnamep = result;
}
+ }
+
+ if (codesetp)
+ {
+ const char *codeset = *codesetp;
+
+ if (codeset == NULL)
+ /* The current binding has be to returned. */
+ *codesetp = binding->codeset;
+ else
+ {
+ /* The domain is already bound. If the new value and the old
+ one are equal we simply do nothing. Otherwise replace the
+ old binding. */
+ char *result = binding->codeset;
+ if (result == NULL || strcmp (codeset, result) != 0)
+ {
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (codeset);
+#else
+ size_t len = strlen (codeset) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result != NULL, 1))
+ memcpy (result, codeset, len);
+#endif
- if (binding->dirname != _nl_default_dirname)
- free (binding->dirname);
+ if (__builtin_expect (result != NULL, 1))
+ {
+ if (binding->codeset != NULL)
+ free (binding->codeset);
- binding->dirname = new_dirname;
+ binding->codeset = result;
+ binding->codeset_cntr++;
+ modified = 1;
+ }
+ }
+ *codesetp = result;
+ }
}
}
+ else if ((dirnamep == NULL || *dirnamep == NULL)
+ && (codesetp == NULL || *codesetp == NULL))
+ {
+ /* Simply return the default values. */
+ if (dirnamep)
+ *dirnamep = INTUSE(_nl_default_dirname);
+ if (codesetp)
+ *codesetp = NULL;
+ }
else
{
/* We have to create a new binding. */
-#if !defined _LIBC && !defined HAVE_STRDUP
- size_t len;
-#endif
+ size_t len = strlen (domainname) + 1;
struct binding *new_binding =
- (struct binding *) malloc (sizeof (*new_binding));
+ (struct binding *) malloc (offsetof (struct binding, domainname) + len);
+
+ if (__builtin_expect (new_binding == NULL, 0))
+ goto failed;
- if (new_binding == NULL)
- return NULL;
+ memcpy (new_binding->domainname, domainname, len);
+
+ if (dirnamep)
+ {
+ const char *dirname = *dirnamep;
+ if (dirname == NULL)
+ /* The default value. */
+ dirname = INTUSE(_nl_default_dirname);
+ else
+ {
+ if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
+ dirname = INTUSE(_nl_default_dirname);
+ else
+ {
+ char *result;
#if defined _LIBC || defined HAVE_STRDUP
- new_binding->domainname = strdup (domainname);
- if (new_binding->domainname == NULL)
- return NULL;
+ result = strdup (dirname);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_dirname;
#else
- len = strlen (domainname) + 1;
- new_binding->domainname = (char *) malloc (len);
- if (new_binding->domainname == NULL)
- return NULL;
- memcpy (new_binding->domainname, domainname, len);
+ size_t len = strlen (dirname) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_dirname;
+ memcpy (result, dirname, len);
#endif
-
- if (strcmp (dirname, _nl_default_dirname) == 0)
- new_binding->dirname = (char *) _nl_default_dirname;
+ dirname = result;
+ }
+ }
+ *dirnamep = dirname;
+ new_binding->dirname = (char *) dirname;
+ }
else
+ /* The default value. */
+ new_binding->dirname = (char *) INTUSE(_nl_default_dirname);
+
+ new_binding->codeset_cntr = 0;
+
+ if (codesetp)
{
+ const char *codeset = *codesetp;
+
+ if (codeset != NULL)
+ {
+ char *result;
+
#if defined _LIBC || defined HAVE_STRDUP
- new_binding->dirname = strdup (dirname);
- if (new_binding->dirname == NULL)
- return NULL;
+ result = strdup (codeset);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_codeset;
#else
- len = strlen (dirname) + 1;
- new_binding->dirname = (char *) malloc (len);
- if (new_binding->dirname == NULL)
- return NULL;
- memcpy (new_binding->dirname, dirname, len);
+ size_t len = strlen (codeset) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_codeset;
+ memcpy (result, codeset, len);
#endif
+ codeset = result;
+ new_binding->codeset_cntr++;
+ }
+ *codesetp = codeset;
+ new_binding->codeset = (char *) codeset;
}
+ else
+ new_binding->codeset = NULL;
/* Now enqueue it. */
if (_nl_domain_bindings == NULL
@@ -191,13 +320,55 @@ BINDTEXTDOMAIN (domainname, dirname)
binding->next = new_binding;
}
- binding = new_binding;
+ modified = 1;
+
+ /* Here we deal with memory allocation failures. */
+ if (0)
+ {
+ failed_codeset:
+ if (new_binding->dirname != INTUSE(_nl_default_dirname))
+ free (new_binding->dirname);
+ failed_dirname:
+ free (new_binding);
+ failed:
+ if (dirnamep)
+ *dirnamep = NULL;
+ if (codesetp)
+ *codesetp = NULL;
+ }
}
- return binding->dirname;
+ /* If we modified any binding, we flush the caches. */
+ if (modified)
+ ++_nl_msg_cat_cntr;
+
+ __libc_rwlock_unlock (_nl_state_lock);
+}
+
+/* Specify that the DOMAINNAME message catalog will be found
+ in DIRNAME rather than in the system locale data base. */
+char *
+BINDTEXTDOMAIN (domainname, dirname)
+ const char *domainname;
+ const char *dirname;
+{
+ set_binding_values (domainname, &dirname, NULL);
+ return (char *) dirname;
+}
+
+/* Specify the character encoding in which the messages from the
+ DOMAINNAME message catalog will be returned. */
+char *
+BIND_TEXTDOMAIN_CODESET (domainname, codeset)
+ const char *domainname;
+ const char *codeset;
+{
+ set_binding_values (domainname, NULL, &codeset);
+ return (char *) codeset;
}
#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
+/* Aliases for function names in GNU C Library. */
weak_alias (__bindtextdomain, bindtextdomain);
+weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
#endif
diff --git a/intl/cat-compat.c b/intl/cat-compat.c
deleted file mode 100644
index be4afff87b5f..000000000000
--- a/intl/cat-compat.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/* Compatibility code for gettext-using-catgets interface.
- Copyright (C) 1995, 1997 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. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <string.h>
-#else
-char *getenv ();
-# ifdef HAVE_MALLOC_H
-# include <malloc.h>
-# endif
-#endif
-
-#ifdef HAVE_NL_TYPES_H
-# include <nl_types.h>
-#endif
-
-#include "libgettext.h"
-
-/* @@ end of prolog @@ */
-
-/* XPG3 defines the result of `setlocale (category, NULL)' as:
- ``Directs `setlocale()' to query `category' and return the current
- setting of `local'.''
- However it does not specify the exact format. And even worse: POSIX
- defines this not at all. So we can use this feature only on selected
- system (e.g. those using GNU C Library). */
-#ifdef _LIBC
-# define HAVE_LOCALE_NULL
-#endif
-
-/* The catalog descriptor. */
-static nl_catd catalog = (nl_catd) -1;
-
-/* Name of the default catalog. */
-static const char default_catalog_name[] = "messages";
-
-/* Name of currently used catalog. */
-static const char *catalog_name = default_catalog_name;
-
-/* Get ID for given string. If not found return -1. */
-static int msg_to_cat_id PARAMS ((const char *msg));
-
-/* Substitution for systems lacking this function in their C library. */
-#if !_LIBC && !HAVE_STPCPY
-static char *stpcpy PARAMS ((char *dest, const char *src));
-#endif
-
-
-/* Set currently used domain/catalog. */
-char *
-textdomain (domainname)
- const char *domainname;
-{
- nl_catd new_catalog;
- char *new_name;
- size_t new_name_len;
- char *lang;
-
-#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES \
- && defined HAVE_LOCALE_NULL
- lang = setlocale (LC_MESSAGES, NULL);
-#else
- lang = getenv ("LC_ALL");
- if (lang == NULL || lang[0] == '\0')
- {
- lang = getenv ("LC_MESSAGES");
- if (lang == NULL || lang[0] == '\0')
- lang = getenv ("LANG");
- }
-#endif
- if (lang == NULL || lang[0] == '\0')
- lang = "C";
-
- /* See whether name of currently used domain is asked. */
- if (domainname == NULL)
- return (char *) catalog_name;
-
- if (domainname[0] == '\0')
- domainname = default_catalog_name;
-
- /* Compute length of added path element. */
- new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang)
- + sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1
- + sizeof (".cat");
-
- new_name = (char *) malloc (new_name_len);
- if (new_name == NULL)
- return NULL;
-
- strcpy (new_name, PACKAGE);
- new_catalog = catopen (new_name, 0);
-
- if (new_catalog == (nl_catd) -1)
- {
- /* NLSPATH search didn't work, try absolute path */
- sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang,
- PACKAGE);
- new_catalog = catopen (new_name, 0);
-
- if (new_catalog == (nl_catd) -1)
- {
- free (new_name);
- return (char *) catalog_name;
- }
- }
-
- /* Close old catalog. */
- if (catalog != (nl_catd) -1)
- catclose (catalog);
- if (catalog_name != default_catalog_name)
- free ((char *) catalog_name);
-
- catalog = new_catalog;
- catalog_name = new_name;
-
- return (char *) catalog_name;
-}
-
-char *
-bindtextdomain (domainname, dirname)
- const char *domainname;
- const char *dirname;
-{
-#if HAVE_SETENV || HAVE_PUTENV
- char *old_val, *new_val, *cp;
- size_t new_val_len;
-
- /* This does not make much sense here but to be compatible do it. */
- if (domainname == NULL)
- return NULL;
-
- /* Compute length of added path element. If we use setenv we don't need
- the first byts for NLSPATH=, but why complicate the code for this
- peanuts. */
- new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname)
- + sizeof ("/%L/LC_MESSAGES/%N.cat");
-
- old_val = getenv ("NLSPATH");
- if (old_val == NULL || old_val[0] == '\0')
- {
- old_val = NULL;
- new_val_len += 1 + sizeof (LOCALEDIR) - 1
- + sizeof ("/%L/LC_MESSAGES/%N.cat");
- }
- else
- new_val_len += strlen (old_val);
-
- new_val = (char *) malloc (new_val_len);
- if (new_val == NULL)
- return NULL;
-
-# if HAVE_SETENV
- cp = new_val;
-# else
- cp = stpcpy (new_val, "NLSPATH=");
-# endif
-
- cp = stpcpy (cp, dirname);
- cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:");
-
- if (old_val == NULL)
- {
-# if __STDC__
- stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat");
-# else
-
- cp = stpcpy (cp, LOCALEDIR);
- stpcpy (cp, "/%L/LC_MESSAGES/%N.cat");
-# endif
- }
- else
- stpcpy (cp, old_val);
-
-# if HAVE_SETENV
- setenv ("NLSPATH", new_val, 1);
- free (new_val);
-# else
- putenv (new_val);
- /* Do *not* free the environment entry we just entered. It is used
- from now on. */
-# endif
-
-#endif
-
- return (char *) domainname;
-}
-
-#undef gettext
-char *
-gettext (msg)
- const char *msg;
-{
- int msgid;
-
- if (msg == NULL || catalog == (nl_catd) -1)
- return (char *) msg;
-
- /* Get the message from the catalog. We always use set number 1.
- The message ID is computed by the function `msg_to_cat_id'
- which works on the table generated by `po-to-tbl'. */
- msgid = msg_to_cat_id (msg);
- if (msgid == -1)
- return (char *) msg;
-
- return catgets (catalog, 1, msgid, (char *) msg);
-}
-
-/* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries
- for the one equal to msg. If it is found return the ID. In case when
- the string is not found return -1. */
-static int
-msg_to_cat_id (msg)
- const char *msg;
-{
- int cnt;
-
- for (cnt = 0; cnt < _msg_tbl_length; ++cnt)
- if (strcmp (msg, _msg_tbl[cnt]._msg) == 0)
- return _msg_tbl[cnt]._msg_number;
-
- return -1;
-}
-
-
-/* @@ begin of epilog @@ */
-
-/* We don't want libintl.a to depend on any other library. So we
- avoid the non-standard function stpcpy. In GNU C Library this
- function is available, though. Also allow the symbol HAVE_STPCPY
- to be defined. */
-#if !_LIBC && !HAVE_STPCPY
-static char *
-stpcpy (dest, src)
- char *dest;
- const char *src;
-{
- while ((*dest++ = *src++) != '\0')
- /* Do nothing. */ ;
- return dest - 1;
-}
-#endif
diff --git a/intl/config.h.in b/intl/config.h.in
new file mode 100644
index 000000000000..2e905fc84902
--- /dev/null
+++ b/intl/config.h.in
@@ -0,0 +1,245 @@
+/* config.h.in. Generated from configure.ac 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 because we depend on libiconv. */
+#undef DEPENDS_ON_LIBICONV
+
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
+#undef ENABLE_NLS
+
+/* Define to enable relocation. */
+#undef ENABLE_RELOCATABLE
+
+/* 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 if the GNU dcgettext() function is already present or preinstalled.
+ */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the `feof_unlocked' function. */
+#undef HAVE_FEOF_UNLOCKED
+
+/* Define to 1 if you have the `fgets_unlocked' function. */
+#undef HAVE_FGETS_UNLOCKED
+
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
+/* Define to 1 if you have the `getc_unlocked' function. */
+#undef HAVE_GETC_UNLOCKED
+
+/* Define to 1 if you have the `getegid' function. */
+#undef HAVE_GETEGID
+
+/* Define to 1 if you have the `geteuid' function. */
+#undef HAVE_GETEUID
+
+/* Define to 1 if you have the `getgid' function. */
+#undef HAVE_GETGID
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to 1 if you have the `getuid' function. */
+#undef HAVE_GETUID
+
+/* Define if you have the iconv() function. */
+#undef HAVE_ICONV
+
+/* Define if <inttypes.h> exists and doesn't clash with <sys/types.h>. */
+#undef HAVE_INTTYPES_H
+
+/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
+ declares uintmax_t. */
+#undef HAVE_INTTYPES_H_WITH_UINTMAX
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define if your <locale.h> file defines 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 the `mempcpy' function. */
+#undef HAVE_MEMPCPY
+
+/* 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 <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 `setenv' function. */
+#undef HAVE_SETENV
+
+/* Define to 1 if you have the `setlocale' function. */
+#undef HAVE_SETLOCALE
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
+ uintmax_t. */
+#undef HAVE_STDINT_H_WITH_UINTMAX
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 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 `strdup' function. */
+#undef HAVE_STRDUP
+
+/* 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 `strtoul' function. */
+#undef HAVE_STRTOUL
+
+/* 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 `tsearch' function. */
+#undef HAVE_TSEARCH
+
+/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
+#undef HAVE_UINTMAX_T
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define if you have the unsigned long long type. */
+#undef HAVE_UNSIGNED_LONG_LONG
+
+/* 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
+
+/* Define to 1 if you have the `__fsetlocking' function. */
+#undef HAVE___FSETLOCKING
+
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
+/* Define if integer division by zero raises signal SIGFPE. */
+#undef INTDIV0_RAISES_SIGFPE
+
+/* Define because this is libintl. */
+#undef IN_LIBINTL
+
+/* Define because this is a library. */
+#undef IN_LIBRARY
+
+/* Define if there is no xmalloc. */
+#undef NO_XMALLOC
+
+/* 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
+
+/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
+#undef PRI_MACROS_BROKEN
+
+/* 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
+
+/* 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 this entry point correctly. */
+#undef relocate
+
+/* Define this entry point correctly. */
+#undef set_relocation_prefix
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to unsigned long or unsigned long long if <stdint.h> and
+ <inttypes.h> don't define. */
+#undef uintmax_t
diff --git a/intl/config.in b/intl/config.in
deleted file mode 100644
index 8a9049b80dec..000000000000
--- a/intl/config.in
+++ /dev/null
@@ -1,128 +0,0 @@
-/* config.in. Generated automatically from configure.in by autoheader. */
-
-/* Define if using alloca.c. */
-#undef C_ALLOCA
-
-/* Define to empty if the keyword does not work. */
-#undef const
-
-/* 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 if you have alloca, as a function or macro. */
-#undef HAVE_ALLOCA
-
-/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
-#undef HAVE_ALLOCA_H
-
-/* Define if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define as __inline if that's what the C compiler calls it. */
-#undef inline
-
-/* Define to `long' if <sys/types.h> doesn't define. */
-#undef off_t
-
-/* Define if you need to in order for stat and other things to work. */
-#undef _POSIX_SOURCE
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-#undef size_t
-
-/* 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 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to 1 if NLS is requested. */
-#undef ENABLE_NLS
-
-/* Define as 1 if you have catgets and don't want to use GNU gettext. */
-#undef HAVE_CATGETS
-
-/* Define as 1 if you have gettext and don't want to use GNU gettext. */
-#undef HAVE_GETTEXT
-
-/* Define as 1 if you have the stpcpy function. */
-#undef HAVE_STPCPY
-
-/* Define if your locale.h file contains LC_MESSAGES. */
-#undef HAVE_LC_MESSAGES
-
-/* Define if you have the __argz_count function. */
-#undef HAVE___ARGZ_COUNT
-
-/* Define if you have the __argz_next function. */
-#undef HAVE___ARGZ_NEXT
-
-/* Define if you have the __argz_stringify function. */
-#undef HAVE___ARGZ_STRINGIFY
-
-/* Define if you have the dcgettext function. */
-#undef HAVE_DCGETTEXT
-
-/* Define if you have the getcwd function. */
-#undef HAVE_GETCWD
-
-/* Define if you have the getpagesize function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define if you have the munmap function. */
-#undef HAVE_MUNMAP
-
-/* Define if you have the putenv function. */
-#undef HAVE_PUTENV
-
-/* Define if you have the setenv function. */
-#undef HAVE_SETENV
-
-/* Define if you have the setlocale function. */
-#undef HAVE_SETLOCALE
-
-/* Define if you have the stpcpy function. */
-#undef HAVE_STPCPY
-
-/* Define if you have the strcasecmp function. */
-#undef HAVE_STRCASECMP
-
-/* Define if you have the strchr function. */
-#undef HAVE_STRCHR
-
-/* Define if you have the <argz.h> header file. */
-#undef HAVE_ARGZ_H
-
-/* Define if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define if you have the <locale.h> header file. */
-#undef HAVE_LOCALE_H
-
-/* Define if you have the <malloc.h> header file. */
-#undef HAVE_MALLOC_H
-
-/* Define if you have the <nl_types.h> header file. */
-#undef HAVE_NL_TYPES_H
-
-/* Define if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define if you have the <sys/param.h> header file. */
-#undef HAVE_SYS_PARAM_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define if you have the <values.h> header file. */
-#undef HAVE_VALUES_H
-
-/* Define if you have the i library (-li). */
-#undef HAVE_LIBI
diff --git a/intl/config.intl.in b/intl/config.intl.in
new file mode 100644
index 000000000000..040b7cf9d6d2
--- /dev/null
+++ b/intl/config.intl.in
@@ -0,0 +1,12 @@
+# This file records the configuration of libintl in a form that
+# can be read back in by a configure script in a sister directory.
+# See config/gettext.m4 for its use.
+
+USE_NLS='@USE_NLS@'
+LIBINTL='@LIBINTL@'
+LIBINTL_DEP='@LIBINTL_DEP@'
+INCINTL='@INCINTL@'
+
+XGETTEXT='@XGETTEXT@'
+GMSGFMT='@GMSGFMT@'
+POSUB='@POSUB@'
diff --git a/intl/configure b/intl/configure
index 341eea019ae3..1a03102e36b9 100755
--- a/intl/configure
+++ b/intl/configure
@@ -1,30 +1,325 @@
#! /bin/sh
-
# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.12.1
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+# 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
-# Defaults:
-ac_help=
+ ;;
+ 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
-# Any additions from configure.in:
-ac_help="$ac_help
- --disable-nls do not use Native Language Support"
-ac_help="$ac_help
- --with-included-gettext use the GNU gettext library included here"
+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="gettext.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 SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA MKINSTALLDIRS USE_NLS MSGFMT GMSGFMT XGETTEXT MSGMERGE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT build build_cpu build_vendor build_os host host_cpu host_vendor host_os RANLIB ac_ct_RANLIB CPP EGREP ALLOCA GLIBC21 LIBICONV LTLIBICONV INTLBISON BUILD_INCLUDED_LIBINTL USE_INCLUDED_LIBINTL CATOBJEXT DATADIRNAME INSTOBJEXT GENCAT INTLOBJS INTL_LIBTOOL_SUFFIX_PREFIX INTLLIBS LIBINTL LTLIBINTL POSUB ACLOCAL AUTOCONF AUTOHEADER MAINT LIBINTL_DEP INCINTL LIBOBJS LTLIBOBJS'
+ac_subst_files=''
# 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.
-build=NONE
-cache_file=./config.cache
+cache_file=/dev/null
exec_prefix=NONE
-host=NONE
no_create=
-nonopt=NONE
no_recursion=
prefix=NONE
program_prefix=NONE
@@ -33,10 +328,15 @@ program_transform_name=s,x,x,
silent=
site=
srcdir=
-target=NONE
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'
@@ -50,17 +350,9 @@ oldincludedir='/usr/include'
infodir='${prefix}/info'
mandir='${prefix}/man'
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
-
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"
@@ -68,59 +360,59 @@ do
continue
fi
- case "$ac_option" in
- -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) ac_optarg= ;;
- esac
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
# Accept the important Cygnus configure options, so we can diagnose typos.
- case "$ac_option" in
+ case $ac_option in
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir="$ac_optarg" ;;
+ bindir=$ac_optarg ;;
-build | --build | --buil | --bui | --bu)
- ac_prev=build ;;
+ ac_prev=build_alias ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build="$ac_optarg" ;;
+ 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" ;;
+ 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" ;;
+ datadir=$ac_optarg ;;
-disable-* | --disable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- eval "enable_${ac_feature}=no" ;;
+ 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=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
+ 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'" ;;
+ eval "enable_$ac_feature='$ac_optarg'" ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -129,95 +421,47 @@ do
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
- exec_prefix="$ac_optarg" ;;
+ exec_prefix=$ac_optarg ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
- -help | --help | --hel | --he)
- # 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 << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
- --cache-file=FILE cache test results in FILE
- --help print this message
- --no-create do not create output files
- --quiet, --silent do not print \`checking...' messages
- --version print the version of autoconf that created configure
-Directory and file names:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [same as prefix]
- --bindir=DIR user executables in DIR [EPREFIX/bin]
- --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
- --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data in DIR
- [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data in DIR
- [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
- --libdir=DIR object code libraries in DIR [EPREFIX/lib]
- --includedir=DIR C header files in DIR [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
- --infodir=DIR info documentation in DIR [PREFIX/info]
- --mandir=DIR man documentation in DIR [PREFIX/man]
- --srcdir=DIR find the sources in DIR [configure dir or ..]
- --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
-EOF
- cat << EOF
-Host type:
- --build=BUILD configure for building on BUILD [BUILD=HOST]
- --host=HOST configure for HOST [guessed]
- --target=TARGET configure for TARGET [TARGET=HOST]
-Features and packages:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
-EOF
- if test -n "$ac_help"; then
- echo "--enable and --with options recognized:$ac_help"
- fi
- exit 0 ;;
+ -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 ;;
+ ac_prev=host_alias ;;
-host=* | --host=* | --hos=* | --ho=*)
- host="$ac_optarg" ;;
+ 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" ;;
+ includedir=$ac_optarg ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir="$ac_optarg" ;;
+ infodir=$ac_optarg ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir="$ac_optarg" ;;
+ 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" ;;
+ libexecdir=$ac_optarg ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst \
@@ -226,19 +470,19 @@ EOF
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
- localstatedir="$ac_optarg" ;;
+ localstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir="$ac_optarg" ;;
+ 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)
+ | --no-cr | --no-c | -n)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
@@ -252,26 +496,26 @@ EOF
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir="$ac_optarg" ;;
+ oldincludedir=$ac_optarg ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix="$ac_optarg" ;;
+ 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_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_suffix=$ac_optarg ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
@@ -288,7 +532,7 @@ EOF
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name="$ac_optarg" ;;
+ program_transform_name=$ac_optarg ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
@@ -298,7 +542,7 @@ EOF
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
- sbindir="$ac_optarg" ;;
+ sbindir=$ac_optarg ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
@@ -309,58 +553,57 @@ EOF
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
- sharedstatedir="$ac_optarg" ;;
+ sharedstatedir=$ac_optarg ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
- site="$ac_optarg" ;;
+ site=$ac_optarg ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir="$ac_optarg" ;;
+ 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" ;;
+ sysconfdir=$ac_optarg ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target ;;
+ ac_prev=target_alias ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target="$ac_optarg" ;;
+ target_alias=$ac_optarg ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
- -version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.12.1"
- exit 0 ;;
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
-with-* | --with-*)
- ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
+ 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
- *=*) ;;
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
*) ac_optarg=yes ;;
esac
- eval "with_${ac_package}='$ac_optarg'" ;;
+ eval "with_$ac_package='$ac_optarg'" ;;
-without-* | --without-*)
- ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- eval "with_${ac_package}=no" ;;
+ 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.
@@ -371,99 +614,110 @@ EOF
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_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" ;;
+ x_libraries=$ac_optarg ;;
- -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ -*) { 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 ;;
+
*)
- if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
- echo "configure: warning: $ac_option: invalid host type" 1>&2
- fi
- if test "x$nonopt" != xNONE; then
- { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
- fi
- nonopt="$ac_option"
+ # 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
- { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
fi
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
+# 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
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
do
- case "$ac_arg" in
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c) ;;
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ 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
-# NLS nuisances.
-# Only set these to C if already set. These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}" = set; then LANG=C; export LANG; fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+# 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
-# 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
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=dgettext.c
# 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_prog=$0
- ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
- test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ 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=..
@@ -473,13 +727,475 @@ else
fi
if test ! -r $srcdir/$ac_unique_file; then
if test "$ac_srcdir_defaulted" = yes; then
- { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
else
- { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
fi
fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+(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
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_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-nls do not use Native Language Support
+ --disable-rpath do not hardcode runtime library paths
+ --enable-maintainer-mode enable rules only needed by maintainers
+
+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-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
+ --without-libiconv-prefix don't search for libiconv in includedir and libdir
+ --with-included-gettext use the GNU gettext library included here
+ --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
+ --without-libintl-prefix don't search for libintl in includedir and libdir
+
+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
@@ -490,43 +1206,149 @@ if test -z "$CONFIG_SITE"; then
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
- echo "loading site script $ac_site_file"
+ { 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
- echo "loading cache $cache_file"
- . $cache_file
+ # 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 "creating cache $cache_file"
- > $cache_file
+ { 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
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
+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_config_headers="$ac_config_headers config.h"
+
+case ../config in
+ [\\/]* | ?:[\\/]* ) ac_macro_dir=../config ;;
+ *) ac_macro_dir=$srcdir/../config ;;
+esac
+if test -d "$ac_macro_dir"; then :
+else
+ { { echo "$as_me:$LINENO: error: cannot find macro directory \`../config'" >&5
+echo "$as_me: error: cannot find macro directory \`../config'" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+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
+
ac_aux_dir=
for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
if test -f $ac_dir/install-sh; then
@@ -537,14 +1359,20 @@ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
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 "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+ { { 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=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+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.
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
@@ -553,412 +1381,1896 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
# 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 $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:562: checking for a BSD compatible install" >&5
+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 eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- # Account for people who put trailing slashes in PATH elements.
- case "$ac_dir/" in
- /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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
- if test -f $ac_dir/$ac_prog; then
+ 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 $ac_dir/$ac_prog >/dev/null 2>&1; then
+ 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="$ac_dir/$ac_prog -c"
- break 2
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
fi
fi
done
- ;;
- esac
- done
- IFS="$ac_save_IFS"
+ done
+ ;;
+esac
+done
+
fi
if test "${ac_cv_path_install+set}" = set; then
- INSTALL="$ac_cv_path_install"
+ 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"
+ INSTALL=$ac_install_sh
fi
fi
-echo "$ac_t""$INSTALL" 1>&6
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+ MKINSTALLDIRS=
+ if test -n "$ac_aux_dir"; then
+ case "$ac_aux_dir" in
+ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+ esac
+ fi
+ if test -z "$MKINSTALLDIRS"; then
+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+ fi
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:616: checking how to run the C preprocessor" >&5
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
+
+
+ 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
+
+
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
fi
-if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
else
- # This must be in double quotes, not single quotes, because CPP may get
- # substituted into the Makefile and "${CC-cc}" will confuse make.
- CPP="${CC-cc} -E"
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp.
- cat > conftest.$ac_ext <<EOF
-#line 631 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:637: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- :
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+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
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -E -traditional-cpp"
- cat > conftest.$ac_ext <<EOF
-#line 648 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:654: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- :
+ case "$MSGFMT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+ echo "$as_me:$LINENO: result: $MSGFMT" >&5
+echo "${ECHO_T}$MSGFMT" >&6
else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP=/lib/cpp
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-rm -f conftest*
+
+ # 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
-rm -f conftest*
- ac_cv_prog_CPP="$CPP"
+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
- CPP="$ac_cv_prog_CPP"
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
else
- ac_cv_prog_CPP="$CPP"
+ ac_executable_p="test -f"
fi
-echo "$ac_t""$CPP" 1>&6
+rm -f conf$$.file
-echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:677: checking whether ${MAKE-make} sets \${MAKE}" >&5
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+# 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
- cat > conftestmake <<\EOF
-all:
- @echo 'ac_maketemp="${MAKE}"'
-EOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
- eval ac_cv_prog_make_${ac_make}_set=yes
+ case "$XGETTEXT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+ ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+ echo "$as_me:$LINENO: result: $XGETTEXT" >&5
+echo "${ECHO_T}$XGETTEXT" >&6
else
- eval ac_cv_prog_make_${ac_make}_set=no
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-rm -f conftestmake
+
+ rm -f messages.po
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- SET_MAKE=
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
else
- echo "$ac_t""no" 1>&6
- SET_MAKE="MAKE=${MAKE-make}"
+ ac_executable_p="test -f"
fi
+rm -f conf$$.file
-# Extract the first word of "gcc", so it can be a program name with args.
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; 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_MSGMERGE+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+ ;;
+esac
+fi
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+echo "${ECHO_T}$MSGMERGE" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+ if test "$GMSGFMT" != ":"; then
+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+ echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6
+ GMSGFMT=":"
+ fi
+ fi
+
+ if test "$XGETTEXT" != ":"; then
+ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
+echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
+ XGETTEXT=":"
+ fi
+ rm -f messages.po
+ fi
+
+ ac_config_commands="$ac_config_commands default-1"
+
+
+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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:706: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ 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
- 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
- ac_cv_prog_CC="gcc"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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"
+CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
else
- echo "$ac_t""no" 1>&6
+ 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:735: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
ac_prog_rejected=no
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- break
- fi
- done
- IFS="$ac_save_ifs"
+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 $# -gt 0; then
+ 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
- set dummy "$ac_dir/$ac_word" "$@"
- shift
- ac_cv_prog_CC="$@"
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
fi
fi
fi
fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
- test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:783: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+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
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-cat > conftest.$ac_ext <<EOF
-#line 793 "configure"
-#include "confdefs.h"
-main(){return(0);}
-EOF
-if { (eval echo configure:797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- ac_cv_prog_cc_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
- ac_cv_prog_cc_cross=no
- else
- ac_cv_prog_cc_cross=yes
+ 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 "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_prog_cc_works=no
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-rm -fr conftest*
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+ 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 $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:817: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
+echo "$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. */
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:822: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+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
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
+ 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
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:831: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
+
+ ;
+ 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
- ac_cv_prog_gcc=no
+ 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. */
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+int
+main ()
+{
-if test $ac_cv_prog_gcc = yes; then
- GCC=yes
- ac_test_CFLAGS="${CFLAGS+set}"
- ac_save_CFLAGS="$CFLAGS"
- CFLAGS=
- echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:846: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ ;
+ 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
- ac_cv_prog_cc_g=no
-fi
-rm -f conftest*
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_cv_prog_cc_g=no
fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
- if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
- elif test $ac_cv_prog_cc_g = yes; then
+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
- GCC=
- test "${CFLAGS+set}" = set || CFLAGS="-g"
+ 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
-# Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:876: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+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
+
+# 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/'`
+
+
+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
- 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
- ac_cv_prog_RANLIB="ranlib"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+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"
+RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- echo "$ac_t""$RANLIB" 1>&6
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
-echo "configure:903: checking for POSIXized ISC" >&5
-if test -d /etc/conf/kconfig.d &&
- grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
-then
- echo "$ac_t""yes" 1>&6
- ISC=yes # If later tests want to check for ISC.
- cat >> confdefs.h <<\EOF
-#define _POSIX_SOURCE 1
-EOF
+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
- if test "$GCC" = yes; then
- CC="$CC -posix"
+ 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
+
+
+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
+
+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
- CC="$CC -Xp"
+ ac_cpp_err=
fi
else
- echo "$ac_t""no" 1>&6
- ISC=
+ 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
-echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:924: checking for ANSI C header files" >&5
-if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+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
- cat > conftest.$ac_ext <<EOF
-#line 929 "configure"
-#include "confdefs.h"
+ 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>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:937: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
+
+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 "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_stdc=no
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
fi
-rm -f conftest*
+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 <<EOF
-#line 954 "configure"
-#include "confdefs.h"
+ 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>
-EOF
+
+_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "memchr" >/dev/null 2>&1; then
+ $EGREP "memchr" >/dev/null 2>&1; then
:
else
- rm -rf conftest*
ac_cv_header_stdc=no
fi
rm -f conftest*
@@ -967,16 +3279,19 @@ 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 <<EOF
-#line 972 "configure"
-#include "confdefs.h"
+ 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>
-EOF
+
+_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "free" >/dev/null 2>&1; then
+ $EGREP "free" >/dev/null 2>&1; then
:
else
- rm -rf conftest*
ac_cv_header_stdc=no
fi
rm -f conftest*
@@ -985,416 +3300,762 @@ 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
+ if test "$cross_compiling" = yes; then
:
else
- cat > conftest.$ac_ext <<EOF
-#line 993 "configure"
-#include "confdefs.h"
+ 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>
-#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#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); }
+#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
-EOF
-if { (eval echo configure:1004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
+#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 "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_header_stdc=no
+ 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 -fr conftest*
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-
fi
fi
-
-echo "$ac_t""$ac_cv_header_stdc" 1>&6
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
if test $ac_cv_header_stdc = yes; then
- cat >> confdefs.h <<\EOF
+
+cat >>confdefs.h <<\_ACEOF
#define STDC_HEADERS 1
-EOF
-
-fi
-
-echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:1028: checking for working const" >&5
-if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1033 "configure"
-#include "confdefs.h"
-
-int main() {
-
-/* 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;
-}
+_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; }
-EOF
-if { (eval echo configure:1082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+ ;
+ 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 "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_c_const=no
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_const=no
fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-
-echo "$ac_t""$ac_cv_c_const" 1>&6
+echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
if test $ac_cv_c_const = no; then
- cat >> confdefs.h <<\EOF
-#define const
-EOF
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
fi
-echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:1103: checking for inline" >&5
-if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6
+if test "${ac_cv_c_inline+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
- cat > conftest.$ac_ext <<EOF
-#line 1110 "configure"
-#include "confdefs.h"
-
-int main() {
-} $ac_kw foo() {
-; return 0; }
-EOF
-if { (eval echo configure:1117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+ 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 "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest*
+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
+
-echo "$ac_t""$ac_cv_c_inline" 1>&6
-case "$ac_cv_c_inline" in
+case $ac_cv_c_inline in
inline | yes) ;;
- no) cat >> confdefs.h <<\EOF
-#define inline
-EOF
- ;;
- *) cat >> confdefs.h <<EOF
-#define inline $ac_cv_c_inline
-EOF
- ;;
+ *)
+ 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
-echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:1143: checking for off_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+# 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 <<EOF
-#line 1148 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_off_t=yes
+ 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
- rm -rf conftest*
- ac_cv_type_off_t=no
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
fi
-rm -f conftest*
+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
-echo "$ac_t""$ac_cv_type_off_t" 1>&6
-if test $ac_cv_type_off_t = no; then
- cat >> confdefs.h <<\EOF
+
+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
-EOF
+_ACEOF
fi
-echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:1176: checking for size_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6
+if test "${ac_cv_type_size_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 1181 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
+ 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
- rm -rf conftest*
- ac_cv_type_size_t=no
-fi
-rm -f conftest*
+ 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 "$ac_t""$ac_cv_type_size_t" 1>&6
-if test $ac_cv_type_size_t = no; then
- cat >> confdefs.h <<\EOF
+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
-EOF
+_ACEOF
fi
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
-echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:1211: checking for working alloca.h" >&5
-if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1216 "configure"
-#include "confdefs.h"
+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 = alloca(2 * sizeof(int));
-; return 0; }
-EOF
-if { (eval echo configure:1223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- ac_cv_header_alloca_h=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_alloca_h=no
+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*
+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
-echo "$ac_t""$ac_cv_header_alloca_h" 1>&6
-if test $ac_cv_header_alloca_h = yes; then
- cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\_ACEOF
#define HAVE_ALLOCA_H 1
-EOF
+_ACEOF
fi
-echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:1244: checking for alloca" >&5
-if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for alloca" >&5
+echo $ECHO_N "checking for alloca... $ECHO_C" >&6
+if test "${ac_cv_func_alloca_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 1249 "configure"
-#include "confdefs.h"
-
+ 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
-# if HAVE_ALLOCA_H
-# include <alloca.h>
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
# else
-# ifdef _AIX
- #pragma alloca
+# if HAVE_ALLOCA_H
+# include <alloca.h>
# else
-# ifndef alloca /* predefined by HP cc +Olibcalls */
+# 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; }
-EOF
-if { (eval echo configure:1272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
+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 "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_func_alloca_works=no
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_alloca_works=no
fi
-rm -f conftest*
+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
-echo "$ac_t""$ac_cv_func_alloca_works" 1>&6
if test $ac_cv_func_alloca_works = yes; then
- cat >> confdefs.h <<\EOF
-#define HAVE_ALLOCA 1
-EOF
-fi
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA 1
+_ACEOF
-if test $ac_cv_func_alloca_works = no; then
+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.o
- cat >> confdefs.h <<\EOF
+# 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
-EOF
+_ACEOF
-echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:1304: checking whether alloca needs Cray hooks" >&5
-if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
+echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6
+if test "${ac_cv_os_cray+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 1309 "configure"
-#include "confdefs.h"
+ 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
-EOF
+_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "webecray" >/dev/null 2>&1; then
- rm -rf conftest*
+ $EGREP "webecray" >/dev/null 2>&1; then
ac_cv_os_cray=yes
else
- rm -rf conftest*
ac_cv_os_cray=no
fi
rm -f conftest*
fi
-
-echo "$ac_t""$ac_cv_os_cray" 1>&6
+echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
+echo "${ECHO_T}$ac_cv_os_cray" >&6
if test $ac_cv_os_cray = yes; then
-for ac_func in _getb67 GETB67 getb67; do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1334: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1339 "configure"
-#include "confdefs.h"
+ 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. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* 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();
+ 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. */
-int main() {
+#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
-$ac_func();
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
#endif
-; return 0; }
-EOF
-if { (eval echo configure:1362: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
+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 "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
fi
-rm -f conftest*
+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
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<EOF
+cat >>confdefs.h <<_ACEOF
#define CRAY_STACKSEG_END $ac_func
-EOF
+_ACEOF
- break
-else
- echo "$ac_t""no" 1>&6
+ break
fi
-done
+ done
fi
-echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:1389: checking stack direction for C alloca" >&5
-if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
+echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6
+if test "${ac_cv_c_stack_direction+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$cross_compiling" = yes; then
ac_cv_c_stack_direction=0
else
- cat > conftest.$ac_ext <<EOF
-#line 1397 "configure"
-#include "confdefs.h"
+ 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;
@@ -1407,138 +4068,316 @@ find_stack_direction ()
else
return (&dummy > addr) ? 1 : -1;
}
+
+int
main ()
{
- exit (find_stack_direction() < 0);
+ exit (find_stack_direction () < 0);
}
-EOF
-if { (eval echo configure:1416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
+_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 "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_c_stack_direction=-1
+ 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 -fr conftest*
+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
-echo "$ac_t""$ac_cv_c_stack_direction" 1>&6
-cat >> confdefs.h <<EOF
+cat >>confdefs.h <<_ACEOF
#define STACK_DIRECTION $ac_cv_c_stack_direction
-EOF
+_ACEOF
+
fi
-for ac_hdr in unistd.h
+
+
+for ac_header in stdlib.h unistd.h
do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1441: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1446 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1451: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
+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 eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
else
- echo "$ac_t""no" 1>&6
+ 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
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1480: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1485 "configure"
-#include "confdefs.h"
+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. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* 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();
+ 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
-int main() {
+#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
-$ac_func();
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
#endif
-; return 0; }
-EOF
-if { (eval echo configure:1508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
+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 "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
fi
-rm -f conftest*
+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
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
fi
done
-echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:1533: checking for working mmap" >&5
-if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for working mmap" >&5
+echo $ECHO_N "checking for working mmap... $ECHO_C" >&6
+if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$cross_compiling" = yes; then
ac_cv_func_mmap_fixed_mapped=no
else
- cat > conftest.$ac_ext <<EOF
-#line 1541 "configure"
-#include "confdefs.h"
+ 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:
@@ -1552,34 +4391,34 @@ else
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 filesystem buffer cache
+ 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
- propogated back to all the places they're supposed to be.
+ 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 <sys/types.h>
+
#include <fcntl.h>
#include <sys/mman.h>
-/* This mess was copied from the GNU getpagesize.h. */
-#ifndef HAVE_GETPAGESIZE
-# ifdef HAVE_UNISTD_H
-# include <unistd.h>
-# endif
+#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. */
-# ifndef 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 */
-# ifdef HAVE_SYS_PARAM_H
+# if HAVE_SYS_PARAM_H
# include <sys/param.h>
# ifdef EXEC_PAGESIZE
# define getpagesize() EXEC_PAGESIZE
@@ -1606,1345 +4445,4203 @@ else
#endif /* no HAVE_GETPAGESIZE */
-#ifdef __cplusplus
-extern "C" { void *malloc(unsigned); }
-#else
-char *malloc();
-#endif
-
int
-main()
+main ()
{
- char *data, *data2, *data3;
- int i, pagesize;
- int fd;
-
- pagesize = getpagesize();
-
- /*
- * First, make a file with some known garbage in it.
- */
- data = malloc(pagesize);
- if (!data)
- exit(1);
- for (i = 0; i < pagesize; ++i)
- *(data + i) = rand();
- umask(0);
- fd = creat("conftestmmap", 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("conftestmmap", O_RDWR);
- if (fd < 0)
- exit(1);
- data2 = malloc(2 * pagesize);
- if (!data2)
- exit(1);
- data2 += (pagesize - ((int) 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 = 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);
- unlink("conftestmmap");
- exit(0);
+ 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);
}
-
-EOF
-if { (eval echo configure:1681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
+_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 "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_func_mmap_fixed_mapped=no
+ 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 -fr conftest*
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-
fi
-
-echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6
+echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
+echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6
if test $ac_cv_func_mmap_fixed_mapped = yes; then
- cat >> confdefs.h <<\EOF
-#define HAVE_MMAP 1
-EOF
-fi
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MMAP 1
+_ACEOF
-
- for ac_hdr in argz.h limits.h locale.h nl_types.h malloc.h string.h \
-unistd.h values.h sys/param.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1709: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1714 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1719: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
- for ac_func in getcwd munmap putenv setenv setlocale strchr strcasecmp \
-__argz_count __argz_stringify __argz_next
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1749: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1754 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* 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();
+rm -f conftest.mmap
-int main() {
-/* 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
-$ac_func();
+ echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2.1 or newer" >&5
+echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6
+if test "${ac_cv_gnu_library_2_1+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 <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+ Lucky GNU user
+ #endif
#endif
-; return 0; }
-EOF
-if { (eval echo configure:1777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Lucky GNU user" >/dev/null 2>&1; then
+ ac_cv_gnu_library_2_1=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
+ ac_cv_gnu_library_2_1=no
fi
rm -f conftest*
+
+
+
fi
+echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2_1" >&5
+echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6
+
+ GLIBC21="$ac_cv_gnu_library_2_1"
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
+
+
+
+ echo "$as_me:$LINENO: checking whether integer division by zero raises SIGFPE" >&5
+echo $ECHO_N "checking whether integer division by zero raises SIGFPE... $ECHO_C" >&6
+if test "${gt_cv_int_divbyzero_sigfpe+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$ac_t""no" 1>&6
-fi
-done
+ if test "$cross_compiling" = yes; then
- if test "${ac_cv_func_stpcpy+set}" != "set"; then
- for ac_func in stpcpy
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1806: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1811 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* 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();
+ # Guess based on the CPU.
+ case "$host_cpu" in
+ alpha* | i3456786 | m68k | s390*)
+ gt_cv_int_divbyzero_sigfpe="guessing yes";;
+ *)
+ gt_cv_int_divbyzero_sigfpe="guessing no";;
+ esac
-int main() {
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
-/* 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
+#include <stdlib.h>
+#include <signal.h>
+
+static void
+#ifdef __cplusplus
+sigfpe_handler (int sig)
#else
-$ac_func();
+sigfpe_handler (sig) int sig;
+#endif
+{
+ /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */
+ exit (sig != SIGFPE);
+}
+
+int x = 1;
+int y = 0;
+int z;
+int nan;
+
+int main ()
+{
+ signal (SIGFPE, sigfpe_handler);
+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */
+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
+ signal (SIGTRAP, sigfpe_handler);
+#endif
+/* Linux/SPARC yields signal SIGILL. */
+#if defined (__sparc__) && defined (__linux__)
+ signal (SIGILL, sigfpe_handler);
#endif
-; return 0; }
-EOF
-if { (eval echo configure:1834: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
+ z = x / y;
+ nan = y / y;
+ exit (1);
+}
+
+_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
+ gt_cv_int_divbyzero_sigfpe=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
+ 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 )
+gt_cv_int_divbyzero_sigfpe=no
fi
-rm -f conftest*
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
fi
-done
+echo "$as_me:$LINENO: result: $gt_cv_int_divbyzero_sigfpe" >&5
+echo "${ECHO_T}$gt_cv_int_divbyzero_sigfpe" >&6
+ case "$gt_cv_int_divbyzero_sigfpe" in
+ *yes) value=1;;
+ *) value=0;;
+ esac
+
+cat >>confdefs.h <<_ACEOF
+#define INTDIV0_RAISES_SIGFPE $value
+_ACEOF
- fi
- if test "${ac_cv_func_stpcpy}" = "yes"; then
- cat >> confdefs.h <<\EOF
-#define HAVE_STPCPY 1
-EOF
- fi
- if test $ac_cv_header_locale_h = yes; then
- echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:1868: checking for LC_MESSAGES" >&5
-if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ echo "$as_me:$LINENO: checking for inttypes.h" >&5
+echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6
+if test "${jm_ac_cv_header_inttypes_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 1873 "configure"
-#include "confdefs.h"
-#include <locale.h>
-int main() {
-return LC_MESSAGES
-; return 0; }
-EOF
-if { (eval echo configure:1880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- am_cv_val_LC_MESSAGES=yes
+ 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 <inttypes.h>
+int
+main ()
+{
+uintmax_t i = (uintmax_t) -1;
+ ;
+ 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
+ jm_ac_cv_header_inttypes_h=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- am_cv_val_LC_MESSAGES=no
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+jm_ac_cv_header_inttypes_h=no
fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+echo "$as_me:$LINENO: result: $jm_ac_cv_header_inttypes_h" >&5
+echo "${ECHO_T}$jm_ac_cv_header_inttypes_h" >&6
+ if test $jm_ac_cv_header_inttypes_h = yes; then
-echo "$ac_t""$am_cv_val_LC_MESSAGES" 1>&6
- if test $am_cv_val_LC_MESSAGES = yes; then
- cat >> confdefs.h <<\EOF
-#define HAVE_LC_MESSAGES 1
-EOF
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INTTYPES_H_WITH_UINTMAX 1
+_ACEOF
- fi
fi
- echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:1901: checking whether NLS is requested" >&5
- # Check whether --enable-nls or --disable-nls was given.
-if test "${enable_nls+set}" = set; then
- enableval="$enable_nls"
- USE_NLS=$enableval
+
+
+ echo "$as_me:$LINENO: checking for stdint.h" >&5
+echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6
+if test "${jm_ac_cv_header_stdint_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- USE_NLS=yes
+ 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 <stdint.h>
+int
+main ()
+{
+uintmax_t i = (uintmax_t) -1;
+ ;
+ 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
+ jm_ac_cv_header_stdint_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+jm_ac_cv_header_stdint_h=no
fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $jm_ac_cv_header_stdint_h" >&5
+echo "${ECHO_T}$jm_ac_cv_header_stdint_h" >&6
+ if test $jm_ac_cv_header_stdint_h = yes; then
- echo "$ac_t""$USE_NLS" 1>&6
-
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STDINT_H_WITH_UINTMAX 1
+_ACEOF
- USE_INCLUDED_LIBINTL=no
+ fi
- if test "$USE_NLS" = "yes"; then
- cat >> confdefs.h <<\EOF
-#define ENABLE_NLS 1
-EOF
- echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:1921: checking whether included gettext is requested" >&5
- # 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
+ echo "$as_me:$LINENO: checking for unsigned long long" >&5
+echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6
+if test "${ac_cv_type_unsigned_long_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- nls_cv_force_use_gnu_gettext=no
-fi
-
- echo "$ac_t""$nls_cv_force_use_gnu_gettext" 1>&6
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+unsigned long long ull = 1; int i = 63;
+int
+main ()
+{
+unsigned long long ullmax = (unsigned long long) -1;
+ return ull << i | ull >> i | ullmax / ull | ullmax % ull;
+ ;
+ 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_type_unsigned_long_long=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
- 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=NONE
-
- ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:1940: checking for libintl.h" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1945 "configure"
-#include "confdefs.h"
-#include <libintl.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1950: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
+ac_cv_type_unsigned_long_long=no
fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6
-echo "configure:1967: checking for gettext in libc" >&5
-if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long" >&5
+echo "${ECHO_T}$ac_cv_type_unsigned_long_long" >&6
+ if test $ac_cv_type_unsigned_long_long = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UNSIGNED_LONG_LONG 1
+_ACEOF
+
+ fi
+
+
+
+
+ if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then
+
+ test $ac_cv_type_unsigned_long_long = yes \
+ && ac_type='unsigned long long' \
+ || ac_type='unsigned long'
+
+cat >>confdefs.h <<_ACEOF
+#define uintmax_t $ac_type
+_ACEOF
+
+ else
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UINTMAX_T 1
+_ACEOF
+
+ fi
+
+
+ echo "$as_me:$LINENO: checking for inttypes.h" >&5
+echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6
+if test "${gt_cv_header_inttypes_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 1972 "configure"
-#include "confdefs.h"
-#include <libintl.h>
-int main() {
-return (int) gettext ("")
-; return 0; }
-EOF
-if { (eval echo configure:1979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- gt_cv_func_gettext_libc=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- gt_cv_func_gettext_libc=no
-fi
-rm -f conftest*
-fi
-echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6
+ 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 <inttypes.h>
+int
+main ()
+{
- if test "$gt_cv_func_gettext_libc" != "yes"; then
- echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:1995: checking for bindtextdomain in -lintl" >&5
-ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ ;
+ 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
+ gt_cv_header_inttypes_h=yes
else
- ac_save_LIBS="$LIBS"
-LIBS="-lintl $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2003 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* 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; }
-EOF
-if { (eval echo configure:2014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_header_inttypes_h=no
fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6
-echo "configure:2030: checking for gettext in libintl" >&5
-if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: result: $gt_cv_header_inttypes_h" >&5
+echo "${ECHO_T}$gt_cv_header_inttypes_h" >&6
+ if test $gt_cv_header_inttypes_h = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INTTYPES_H 1
+_ACEOF
+
+ fi
+
+
+
+ if test $gt_cv_header_inttypes_h = yes; then
+ echo "$as_me:$LINENO: checking whether the inttypes.h PRIxNN macros are broken" >&5
+echo $ECHO_N "checking whether the inttypes.h PRIxNN macros are broken... $ECHO_C" >&6
+if test "${gt_cv_inttypes_pri_broken+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 2035 "configure"
-#include "confdefs.h"
-int main() {
-return (int) gettext ("")
-; return 0; }
-EOF
-if { (eval echo configure:2042: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- gt_cv_func_gettext_libintl=yes
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+
+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
+ gt_cv_inttypes_pri_broken=no
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- gt_cv_func_gettext_libintl=no
-fi
-rm -f conftest*
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_inttypes_pri_broken=yes
fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$ac_t""$gt_cv_func_gettext_libintl" 1>&6
-else
- echo "$ac_t""no" 1>&6
fi
+echo "$as_me:$LINENO: result: $gt_cv_inttypes_pri_broken" >&5
+echo "${ECHO_T}$gt_cv_inttypes_pri_broken" >&6
+ fi
+ if test "$gt_cv_inttypes_pri_broken" = yes; then
- fi
+cat >>confdefs.h <<_ACEOF
+#define PRI_MACROS_BROKEN 1
+_ACEOF
- if test "$gt_cv_func_gettext_libc" = "yes" \
- || test "$gt_cv_func_gettext_libintl" = "yes"; then
- cat >> confdefs.h <<\EOF
-#define HAVE_GETTEXT 1
-EOF
+ fi
- # Extract the first word of "msgfmt", so it can be a program name with args.
-set dummy msgfmt; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2070: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+
+
+# 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
- case "$MSGFMT" in
- /*)
- ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
- ;;
+ with_gnu_ld=no
+fi;
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+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
+ ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ # 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 "${acl_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_word; then
- if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then
- ac_cv_path_MSGFMT="$ac_dir/$ac_word"
- break
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_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 "$acl_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"
- test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no"
- ;;
-esac
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
fi
-MSGFMT="$ac_cv_path_MSGFMT"
-if test -n "$MSGFMT"; then
- echo "$ac_t""$MSGFMT" 1>&6
+fi
+
+LD="$acl_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 "${acl_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
+ acl_cv_prog_gnu_ld=yes
+else
+ acl_cv_prog_gnu_ld=no
+fi
+fi
+echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+ echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6
+if test "${acl_cv_rpath+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+
+fi
+echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+echo "${ECHO_T}$acl_cv_rpath" >&6
+ wl="$acl_cv_wl"
+ libext="$acl_cv_libext"
+ shlibext="$acl_cv_shlibext"
+ hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ hardcode_direct="$acl_cv_hardcode_direct"
+ hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ # Check whether --enable-rpath or --disable-rpath was given.
+if test "${enable_rpath+set}" = set; then
+ enableval="$enable_rpath"
+ :
+else
+ enable_rpath=yes
+fi;
+
+
+
+
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix or --without-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then
+ withval="$with_libiconv_prefix"
+
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/lib"
+ fi
+ fi
+
+fi;
+ LIBICONV=
+ LTLIBICONV=
+ INCICONV=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='iconv '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ if test $use_additional = yes; then
+ if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+ found_dir="$additional_libdir"
+ found_so="$additional_libdir/lib$name.$shlibext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ else
+ if test -f "$additional_libdir/lib$name.$libext"; then
+ found_dir="$additional_libdir"
+ found_a="$additional_libdir/lib$name.$libext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+ found_dir="$dir"
+ found_so="$dir/lib$name.$shlibext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ else
+ if test -f "$dir/lib$name.$libext"; then
+ found_dir="$dir"
+ found_a="$dir/lib$name.$libext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$hardcode_direct" = yes; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+ fi
+ if test "$hardcode_minus_L" != no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */lib | */lib/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$additional_libdir" != "X/usr/lib"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+ done
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.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
- echo "$ac_t""no" 1>&6
+ eval "$as_ac_Header=\$ac_header_preproc"
fi
- if test "$MSGFMT" != "no"; then
- for ac_func in dcgettext
+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 feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \
+geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \
+strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next \
+__fsetlocking
do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2104: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2109 "configure"
-#include "confdefs.h"
+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. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* 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();
+ 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
-int main() {
+#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
-$ac_func();
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
#endif
-; return 0; }
-EOF
-if { (eval echo configure:2132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
+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 "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
fi
-rm -f conftest*
+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
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
fi
done
- # Extract the first word of "gmsgfmt", so it can be a program name with args.
-set dummy gmsgfmt; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2159: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$GMSGFMT" in
- /*)
- ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
- ;;
- ?:/*)
- ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos 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
- ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
- break
+
+
+
+
+
+
+ am_save_CPPFLAGS="$CPPFLAGS"
+
+ for element in $INCICONV; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
fi
done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
- ;;
-esac
-fi
-GMSGFMT="$ac_cv_path_GMSGFMT"
-if test -n "$GMSGFMT"; then
- echo "$ac_t""$GMSGFMT" 1>&6
+
+
+ echo "$as_me:$LINENO: checking for iconv" >&5
+echo $ECHO_N "checking for iconv... $ECHO_C" >&6
+if test "${am_cv_func_iconv+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$ac_t""no" 1>&6
-fi
- # Extract the first word of "xgettext", so it can be a program name with args.
-set dummy xgettext; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2194: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ 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 <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ 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_func_iconv=yes
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
+ 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 "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ 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 <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ 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_lib_iconv=yes
+ am_cv_func_iconv=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="$am_save_LIBS"
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 "$ac_t""$XGETTEXT" 1>&6
+echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+echo "${ECHO_T}$am_cv_func_iconv" >&6
+ if test "$am_cv_func_iconv" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ICONV 1
+_ACEOF
+
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $LIBICONV" >&5
+echo "${ECHO_T}$LIBICONV" >&6
+ else
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+
+
+
+ if test "$am_cv_func_iconv" = yes; then
+ echo "$as_me:$LINENO: checking for iconv declaration" >&5
+echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6
+ if test "${am_cv_proto_iconv+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$ac_t""no" 1>&6
-fi
- cat > conftest.$ac_ext <<EOF
-#line 2226 "configure"
-#include "confdefs.h"
+ 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; }
-EOF
-if { (eval echo configure:2234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- CATOBJEXT=.gmo
- DATADIRNAME=share
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CATOBJEXT=.mo
- DATADIRNAME=lib
-fi
-rm -f conftest*
- INSTOBJEXT=.mo
- fi
- fi
-
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+
+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
+ am_cv_proto_iconv_arg1=""
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+am_cv_proto_iconv_arg1="const"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
fi
+ am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ echo "$as_me:$LINENO: result: ${ac_t:-
+ }$am_cv_proto_iconv" >&5
+echo "${ECHO_T}${ac_t:-
+ }$am_cv_proto_iconv" >&6
-
- if test "$CATOBJEXT" = "NONE"; then
- nls_cv_use_gnu_gettext=yes
- fi
- fi
+cat >>confdefs.h <<_ACEOF
+#define ICONV_CONST $am_cv_proto_iconv_arg1
+_ACEOF
- 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2266: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ fi
+
+
+ echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5
+echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6
+if test "${am_cv_langinfo_codeset+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
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <langinfo.h>
+int
+main ()
+{
+char* cs = nl_langinfo(CODESET);
+ ;
+ 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_langinfo_codeset=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+am_cv_langinfo_codeset=no
fi
-MSGFMT="$ac_cv_path_MSGFMT"
-if test -n "$MSGFMT"; then
- echo "$ac_t""$MSGFMT" 1>&6
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5
+echo "${ECHO_T}$am_cv_langinfo_codeset" >&6
+ if test $am_cv_langinfo_codeset = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LANGINFO_CODESET 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
- echo "$ac_t""no" 1>&6
+ 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
- # Extract the first word of "gmsgfmt", so it can be a program name with args.
-set dummy gmsgfmt; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2300: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LC_MESSAGES 1
+_ACEOF
+
+ fi
+
+ fi
+
+ for ac_prog in bison
+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_INTLBISON+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.
- ;;
- ?:/*)
- ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos 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
- ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
- ;;
-esac
+ if test -n "$INTLBISON"; then
+ ac_cv_prog_INTLBISON="$INTLBISON" # 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_INTLBISON="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
-GMSGFMT="$ac_cv_path_GMSGFMT"
-if test -n "$GMSGFMT"; then
- echo "$ac_t""$GMSGFMT" 1>&6
+fi
+INTLBISON=$ac_cv_prog_INTLBISON
+if test -n "$INTLBISON"; then
+ echo "$as_me:$LINENO: result: $INTLBISON" >&5
+echo "${ECHO_T}$INTLBISON" >&6
else
- echo "$ac_t""no" 1>&6
+ 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2335: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ test -n "$INTLBISON" && break
+done
+
+ if test -z "$INTLBISON"; then
+ ac_verc_fail=yes
+ else
+ echo "$as_me:$LINENO: checking version of bison" >&5
+echo $ECHO_N "checking version of bison... $ECHO_C" >&6
+ ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+ esac
+ echo "$as_me:$LINENO: result: $ac_prog_version" >&5
+echo "${ECHO_T}$ac_prog_version" >&6
+ fi
+ if test $ac_verc_fail = yes; then
+ INTLBISON=:
+ 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
- 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
+ USE_NLS=yes
+fi;
+ echo "$as_me:$LINENO: result: $USE_NLS" >&5
+echo "${ECHO_T}$USE_NLS" >&6
+
+
+
+
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+
+ 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
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
+echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6
+if test "${gt_cv_func_gnugettext1_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>
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+int
+main ()
+{
+bindtextdomain ("", "");
+return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings
+ ;
+ 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_gnugettext1_libc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_func_gnugettext1_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_gnugettext1_libc" >&5
+echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6
+
+ if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libintl-prefix or --without-libintl-prefix was given.
+if test "${with_libintl_prefix+set}" = set; then
+ withval="$with_libintl_prefix"
+
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/lib"
fi
fi
+
+fi;
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='intl '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ if test $use_additional = yes; then
+ if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+ found_dir="$additional_libdir"
+ found_so="$additional_libdir/lib$name.$shlibext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ else
+ if test -f "$additional_libdir/lib$name.$libext"; then
+ found_dir="$additional_libdir"
+ found_a="$additional_libdir/lib$name.$libext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+ found_dir="$dir"
+ found_so="$dir/lib$name.$shlibext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ else
+ if test -f "$dir/lib$name.$libext"; then
+ found_dir="$dir"
+ found_a="$dir/lib$name.$libext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$hardcode_direct" = yes; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
+ fi
+ if test "$hardcode_minus_L" != no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */lib | */lib/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$additional_libdir" != "X/usr/lib"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ done
done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
- ;;
-esac
-fi
-XGETTEXT="$ac_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
- echo "$ac_t""$XGETTEXT" 1>&6
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
+ done
+ fi
+
+ echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5
+echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6
+if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$ac_t""no" 1>&6
+ gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ 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>
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();
+int
+main ()
+{
+bindtextdomain ("", "");
+return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0)
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ 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_gnugettext1_libintl=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_func_gnugettext1_libintl=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ 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>
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();
+int
+main ()
+{
+bindtextdomain ("", "");
+return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0)
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ 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
+ LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ gt_cv_func_gnugettext1_libintl=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
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"
+fi
+echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libintl" >&5
+echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&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
+ if test "$gt_cv_func_gnugettext1_libc" = "yes" \
+ || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ nls_cv_use_gnu_gettext=yes
+ fi
fi
- if test "$XGETTEXT" != ":"; then
- if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
- : ;
- else
- echo "$ac_t""found xgettext programs is not GNU xgettext; ignore it" 1>&6
- XGETTEXT=":"
- fi
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="\${top_builddir}/intl/libintl.a $LIBICONV"
+ LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ CATOBJEXT=.gmo
fi
- # We need to process the po/ directory.
- POSUB=po
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
else
- DATADIRNAME=share
- nls_cv_header_intl=libintl.h
- nls_cv_header_libgt=libgettext.h
+ USE_NLS=no
fi
+ 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
+ echo "$as_me:$LINENO: checking whether to use NLS" >&5
+echo $ECHO_N "checking whether to use NLS... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $USE_NLS" >&5
+echo "${ECHO_T}$USE_NLS" >&6
+ if test "$USE_NLS" = "yes"; then
+ echo "$as_me:$LINENO: checking where the gettext function comes from" >&5
+echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
fi
+ echo "$as_me:$LINENO: result: $gt_source" >&5
+echo "${ECHO_T}$gt_source" >&6
+ fi
- for lang in $ALL_LINGUAS; do
- GMOFILES="$GMOFILES $lang.gmo"
- POFILES="$POFILES $lang.po"
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
+ echo "$as_me:$LINENO: checking how to link with libintl" >&5
+echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $LIBINTL" >&5
+echo "${ECHO_T}$LIBINTL" >&6
+
+ for element in $INCINTL; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
-
-
-
-
-
-
-
-
-
-
-
-
-
- if test "x$CATOBJEXT" != "x"; then
- if test "x$ALL_LINGUAS" = "x"; then
- LINGUAS=
- else
- echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:2425: checking for catalogs to be installed" >&5
- 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 "$ac_t""$LINGUAS" 1>&6
- fi
+ fi
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GETTEXT 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DCGETTEXT 1
+_ACEOF
+
+ fi
+
+ POSUB=po
+ fi
+
+
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+
+
+
+
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ DATADIRNAME=share
+
+
+ INSTOBJEXT=.mo
+
+
+ GENCAT=gencat
+
+
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+
+
+ INTL_LIBTOOL_SUFFIX_PREFIX=
+
+
+
+ INTLLIBS="$LIBINTL"
+
+
+
+
+
+
+
+# This replaces the extensive use of DEFS in the original Makefile.in.
+
+cat >>confdefs.h <<\_ACEOF
+#define IN_LIBINTL 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define IN_LIBRARY 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define DEPENDS_ON_LIBICONV 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_RELOCATABLE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define NO_XMALLOC 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define set_relocation_prefix libintl_set_relocation_prefix
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define relocate libintl_relocate
+_ACEOF
+
+
+MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
+for ac_prog in aclocal
+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_ACLOCAL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ACLOCAL"; then
+ ac_cv_prog_ACLOCAL="$ACLOCAL" # 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_ACLOCAL="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
- 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
- ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6
-echo "configure:2453: checking for linux/version.h" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2458 "configure"
-#include "confdefs.h"
-#include <linux/version.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2463: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
fi
-rm -f conftest*
fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- msgformat=linux
+ACLOCAL=$ac_cv_prog_ACLOCAL
+if test -n "$ACLOCAL"; then
+ echo "$as_me:$LINENO: result: $ACLOCAL" >&5
+echo "${ECHO_T}$ACLOCAL" >&6
else
- echo "$ac_t""no" 1>&6
-msgformat=xopen
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+ test -n "$ACLOCAL" && break
+done
+test -n "$ACLOCAL" || ACLOCAL="$MISSING aclocal"
- 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 -d $srcdir/po; 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 autoconf
+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_AUTOCONF+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AUTOCONF"; then
+ ac_cv_prog_AUTOCONF="$AUTOCONF" # 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_AUTOCONF="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+fi
+fi
+AUTOCONF=$ac_cv_prog_AUTOCONF
+if test -n "$AUTOCONF"; then
+ echo "$as_me:$LINENO: result: $AUTOCONF" >&5
+echo "${ECHO_T}$AUTOCONF" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$AUTOCONF" && break
+done
+test -n "$AUTOCONF" || AUTOCONF="$MISSING autoconf"
-trap '' 1 2 15
-cat > confcache <<\EOF
+for ac_prog in autoheader
+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_AUTOHEADER+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AUTOHEADER"; then
+ ac_cv_prog_AUTOHEADER="$AUTOHEADER" # 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_AUTOHEADER="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+AUTOHEADER=$ac_cv_prog_AUTOHEADER
+if test -n "$AUTOHEADER"; then
+ echo "$as_me:$LINENO: result: $AUTOHEADER" >&5
+echo "${ECHO_T}$AUTOHEADER" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$AUTOHEADER" && break
+done
+test -n "$AUTOHEADER" || AUTOHEADER="$MISSING autoheader"
+
+
+# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+ enableval="$enable_maintainer_mode"
+
+else
+ enable_maintainer_mode=no
+fi;
+if test "x$enable_maintainer_mode" = xno; then
+ MAINT='#'
+else
+ MAINT=
+fi
+
+
+# Additional info for config.intl.
+
+
+
+LIBINTL_DEP=
+INCINTL=
+case $USE_INCLUDED_LIBINTL in
+ yes)
+ LIBINTL=`echo $LIBINTL | sed 's,${top_builddir},&/..,' `
+ LTLIBINTL=`echo $LTLIBINTL | sed 's,${top_builddir},&/..,' `
+ LIBINTL_DEP='${top_builddir}/../intl/libintl.a'
+ INCINTL='-I${top_builddir}/../intl'
+ ;;
+esac
+
+ ac_config_files="$ac_config_files Makefile config.intl"
+
+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. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
+# 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.
#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
#
-EOF
+# `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) 2>&1 | grep ac_space` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote substitution
- # turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
+{
+ (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
- echo "updating cache $cache_file"
- cat confcache > $cache_file
+ 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
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
+# 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[ ]*=[^:]*$/d'
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
fi
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
-
DEFS=-DHAVE_CONFIG_H
-# Without the "./", some shells look in PATH for config.status.
-: ${CONFIG_STATUS=./config.status}
+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
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
-# Generated automatically by configure.
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${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.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
+# 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
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
+
+# 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
- case "\$ac_option" in
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
- -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.12.1"
- exit 0 ;;
- -help | --help | --hel | --he | --h)
- echo "\$ac_cs_usage"; exit 0 ;;
- *) echo "\$ac_cs_usage"; exit 1 ;;
- esac
+ 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
-ac_given_srcdir=$srcdir
-ac_given_INSTALL="$INSTALL"
+# 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
-trap 'rm -fr `echo "Makefile config.h:config.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@SHELL@%$SHELL%g
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
-s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
-s%@SET_MAKE@%$SET_MAKE%g
-s%@CC@%$CC%g
-s%@RANLIB@%$RANLIB%g
-s%@CPP@%$CPP%g
-s%@ALLOCA@%$ALLOCA%g
-s%@USE_NLS@%$USE_NLS%g
-s%@MSGFMT@%$MSGFMT%g
-s%@GMSGFMT@%$GMSGFMT%g
-s%@XGETTEXT@%$XGETTEXT%g
-s%@USE_INCLUDED_LIBINTL@%$USE_INCLUDED_LIBINTL%g
-s%@CATALOGS@%$CATALOGS%g
-s%@CATOBJEXT@%$CATOBJEXT%g
-s%@DATADIRNAME@%$DATADIRNAME%g
-s%@GMOFILES@%$GMOFILES%g
-s%@INSTOBJEXT@%$INSTOBJEXT%g
-s%@INTLDEPS@%$INTLDEPS%g
-s%@INTLLIBS@%$INTLLIBS%g
-s%@INTLOBJS@%$INTLOBJS%g
-s%@POFILES@%$POFILES%g
-s%@POSUB@%$POSUB%g
-s%@INCLUDE_LOCALE_H@%$INCLUDE_LOCALE_H%g
-s%@GT_NO@%$GT_NO%g
-s%@GT_YES@%$GT_YES%g
-s%@MKINSTALLDIRS@%$MKINSTALLDIRS%g
-s%@l@%$l%g
+ 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
-CEOF
-EOF
-
-cat >> $CONFIG_STATUS <<\EOF
-
-# 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_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # 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" conftest.subs > conftest.s$ac_file
- else
- sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ ;;
+ 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
- if test ! -s conftest.s$ac_file; then
- ac_more_lines=false
- rm -f conftest.s$ac_file
+ 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
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f conftest.s$ac_file"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
- fi
- ac_file=`expr $ac_file + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ 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
-if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
fi
-EOF
-cat >> $CONFIG_STATUS <<EOF
+_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
-CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+ # from automake.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "config.intl" ) CONFIG_FILES="$CONFIG_FILES config.intl" ;;
+ "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ *) { { 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
- # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+# 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
+}
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
- # A "../" for each directory in $ac_dir_suffix.
- ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
- else
- ac_dir_suffix= ac_dots=
+# 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,@SET_MAKE@,$SET_MAKE,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;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,@MSGMERGE@,$MSGMERGE,;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,@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,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@CPP@,$CPP,;t t
+s,@EGREP@,$EGREP,;t t
+s,@ALLOCA@,$ALLOCA,;t t
+s,@GLIBC21@,$GLIBC21,;t t
+s,@LIBICONV@,$LIBICONV,;t t
+s,@LTLIBICONV@,$LTLIBICONV,;t t
+s,@INTLBISON@,$INTLBISON,;t t
+s,@BUILD_INCLUDED_LIBINTL@,$BUILD_INCLUDED_LIBINTL,;t t
+s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t
+s,@CATOBJEXT@,$CATOBJEXT,;t t
+s,@DATADIRNAME@,$DATADIRNAME,;t t
+s,@INSTOBJEXT@,$INSTOBJEXT,;t t
+s,@GENCAT@,$GENCAT,;t t
+s,@INTLOBJS@,$INTLOBJS,;t t
+s,@INTL_LIBTOOL_SUFFIX_PREFIX@,$INTL_LIBTOOL_SUFFIX_PREFIX,;t t
+s,@INTLLIBS@,$INTLLIBS,;t t
+s,@LIBINTL@,$LIBINTL,;t t
+s,@LTLIBINTL@,$LTLIBINTL,;t t
+s,@POSUB@,$POSUB,;t t
+s,@ACLOCAL@,$ACLOCAL,;t t
+s,@AUTOCONF@,$AUTOCONF,;t t
+s,@AUTOHEADER@,$AUTOHEADER,;t t
+s,@MAINT@,$MAINT,;t t
+s,@LIBINTL_DEP@,$LIBINTL_DEP,;t t
+s,@INCINTL@,$INCINTL,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
fi
+fi # test -n "$CONFIG_FILES"
- case "$ac_given_srcdir" in
- .) srcdir=.
- if test -z "$ac_dots"; then top_srcdir=.
- else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
- /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
- *) # Relative path.
- srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
- top_srcdir="$ac_dots$ac_given_srcdir" ;;
+_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
- case "$ac_given_INSTALL" in
- [/$]*) INSTALL="$ac_given_INSTALL" ;;
- *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
- 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
- echo creating "$ac_file"
- rm -f "$ac_file"
- configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
- case "$ac_file" in
- *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
- *) ac_comsub= ;;
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
esac
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-s%@INSTALL@%$INSTALL%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
+ 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='\3'
-ac_dD='%g'
-# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='\([ ]\)%\1#\2define\3'
+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='\4%g'
-# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_eB='$%\1#\2define\3'
-ac_eC=' '
-ac_eD='%g'
-
-if test "${CONFIG_HEADERS+set}" != set; then
-EOF
-cat >> $CONFIG_STATUS <<EOF
- CONFIG_HEADERS="config.h:config.in"
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-fi
-for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+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
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.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
- echo creating $ac_file
-
- rm -f conftest.frag conftest.in conftest.out
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- cat $ac_file_inputs > conftest.in
-
-EOF
-
-# Transform confdefs.h into a sed script conftest.vals that substitutes
-# the proper values into config.h.in to produce config.h. 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.vals
-cat > conftest.hdr <<\EOF
-s/[\\&%]/\\&/g
-s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
-s%ac_d%ac_u%gp
-s%ac_u%ac_e%gp
-EOF
-sed -n -f conftest.hdr confdefs.h > conftest.vals
-rm -f conftest.hdr
+ 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.vals <<\EOF
-s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
-EOF
-
-# Break up conftest.vals because some shells have a limit on
-# the size of here documents, and old seds have small limits too.
+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 :
+while grep . conftest.undefs >/dev/null
do
- ac_lines=`grep -c . conftest.vals`
- # grep -c gives empty output for an empty file on some AIX systems.
- if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
- # Write a limited-size here document to conftest.frag.
- echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ # 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 conftest.frag conftest.in > conftest.out
- rm -f conftest.in
- mv conftest.out conftest.in
-' >> $CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
- rm -f conftest.vals
- mv conftest.tail conftest.vals
-done
-rm -f conftest.vals
-
-cat >> $CONFIG_STATUS <<\EOF
- rm -f conftest.frag conftest.h
- echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
- cat conftest.in >> conftest.h
- rm -f conftest.in
- if cmp -s $ac_file conftest.h 2>/dev/null; then
- echo "$ac_file is unchanged"
- rm -f conftest.h
+ 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
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
+ 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
- rm -f $ac_file
- mv conftest.h $ac_file
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
fi
-fi; done
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
-EOF
+#
+# 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; }; }; }
-cat >> $CONFIG_STATUS <<EOF
-ac_sources="$nls_cv_header_libgt"
-ac_dests="$nls_cv_header_intl"
-EOF
+ ac_builddir=.
-cat >> $CONFIG_STATUS <<\EOF
-srcdir=$ac_given_srcdir
-while test -n "$ac_sources"; do
- set $ac_dests; ac_dest=$1; shift; ac_dests=$*
- set $ac_sources; ac_source=$1; shift; ac_sources=$*
+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
- echo "linking $srcdir/$ac_source to $ac_dest"
+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
- if test ! -r $srcdir/$ac_source; then
- { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; }
- fi
- rm -f $ac_dest
+# 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
- # Make relative symlinks.
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then
- # The dest file is in a subdirectory.
- test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir"
- ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`"
- # A "../" for each directory in $ac_dest_dir_suffix.
- ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'`
- else
- ac_dest_dir_suffix= ac_dots=
- fi
- case "$srcdir" in
- [/$]*) ac_rel_source="$srcdir/$ac_source" ;;
- *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;;
+ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+ case $ac_dest in
+ default-1 )
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ GMOFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
esac
-
- # Make a symlink if possible; otherwise try a hard link.
- if ln -s $ac_rel_source $ac_dest 2>/dev/null ||
- ln $srcdir/$ac_source $ac_dest; then :
- else
- { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; }
- fi
done
-EOF
-cat >> $CONFIG_STATUS <<EOF
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
-
-exit 0
-EOF
+{ (exit 0); exit 0; }
+_ACEOF
chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+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/intl/configure.ac b/intl/configure.ac
new file mode 100644
index 000000000000..df79d2f8f70c
--- /dev/null
+++ b/intl/configure.ac
@@ -0,0 +1,51 @@
+AC_PREREQ(2.59)
+AC_INIT
+AC_CONFIG_SRCDIR(gettext.c)
+AC_CONFIG_HEADER(config.h)
+AC_CONFIG_MACRO_DIR(../config)
+AM_GNU_GETTEXT_VERSION(0.12.1)
+AM_GNU_GETTEXT
+
+# This replaces the extensive use of DEFS in the original Makefile.in.
+AC_DEFINE(IN_LIBINTL, 1, [Define because this is libintl.])
+AC_DEFINE(IN_LIBRARY, 1, [Define because this is a library.])
+AC_DEFINE(DEPENDS_ON_LIBICONV, 1, [Define because we depend on libiconv.])
+AC_DEFINE(ENABLE_RELOCATABLE, 1, [Define to enable relocation.])
+AC_DEFINE(NO_XMALLOC, 1, [Define if there is no xmalloc.])
+AC_DEFINE(set_relocation_prefix, libintl_set_relocation_prefix,
+[Define this entry point correctly.])
+AC_DEFINE(relocate, libintl_relocate,
+[Define this entry point correctly.])
+
+MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
+AC_CHECK_PROGS([ACLOCAL], [aclocal], [$MISSING aclocal])
+AC_CHECK_PROGS([AUTOCONF], [autoconf], [$MISSING autoconf])
+AC_CHECK_PROGS([AUTOHEADER], [autoheader], [$MISSING autoheader])
+
+AC_ARG_ENABLE(maintainer-mode,
+[ --enable-maintainer-mode enable rules only needed by maintainers],,
+enable_maintainer_mode=no)
+if test "x$enable_maintainer_mode" = xno; then
+ MAINT='#'
+else
+ MAINT=
+fi
+AC_SUBST(MAINT)
+
+# Additional info for config.intl.
+AC_SUBST(LIBINTL_DEP)
+AC_SUBST(INCINTL)
+
+LIBINTL_DEP=
+INCINTL=
+case $USE_INCLUDED_LIBINTL in
+ yes)
+ LIBINTL=`echo $LIBINTL | sed 's,${top_builddir},&/..,' `
+ LTLIBINTL=`echo $LTLIBINTL | sed 's,${top_builddir},&/..,' `
+ LIBINTL_DEP='${top_builddir}/../intl/libintl.a'
+ INCINTL='-I${top_builddir}/../intl'
+ ;;
+esac
+
+AC_CONFIG_FILES(Makefile config.intl)
+AC_OUTPUT
diff --git a/intl/configure.in b/intl/configure.in
deleted file mode 100644
index 4ba9c244efae..000000000000
--- a/intl/configure.in
+++ /dev/null
@@ -1,10 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-
-AC_INIT(dgettext.c)
-AM_CONFIG_HEADER(config.h:config.in)
-
-AM_PROG_INSTALL
-CY_GNU_GETTEXT
-AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
-
-AC_OUTPUT(Makefile)
diff --git a/intl/dcgettext.c b/intl/dcgettext.c
index 27586e9159a0..338fd7c615f1 100644
--- a/intl/dcgettext.c
+++ b/intl/dcgettext.c
@@ -1,220 +1,44 @@
/* Implementation of the dcgettext(3) function.
- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1995-1999, 2000, 2001, 2002 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)
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
-#include <sys/types.h>
-
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-# define HAVE_ALLOCA 1
-#else
-# if defined HAVE_ALLOCA_H || defined _LIBC
-# include <alloca.h>
-# else
-# ifdef _AIX
- #pragma alloca
-# else
-# ifndef alloca
-char *alloca ();
-# endif
-# endif
-# endif
-#endif
-
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-#ifndef __set_errno
-# define __set_errno(val) errno = (val)
-#endif
-
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#else
-char *getenv ();
-# ifdef HAVE_MALLOC_H
-# include <malloc.h>
-# else
-void free ();
-# endif
-#endif
-
-#if defined HAVE_STRING_H || defined _LIBC
-# ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-# endif
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#if !HAVE_STRCHR && !defined _LIBC
-# ifndef strchr
-# define strchr index
-# endif
-#endif
-
-#if defined HAVE_UNISTD_H || defined _LIBC
-# include <unistd.h>
-#endif
-
-#include "gettext.h"
#include "gettextP.h"
#ifdef _LIBC
# include <libintl.h>
#else
-# include "libgettext.h"
+# include "libgnuintl.h"
#endif
-#include "hash-string.h"
/* @@ end of prolog @@ */
-#ifdef _LIBC
-/* Rename the non ANSI C functions. This is required by the standard
- because some ANSI C functions will require linking with this object
- file and the name space must not be polluted. */
-# define getcwd __getcwd
-# ifndef stpcpy
-# define stpcpy __stpcpy
-# endif
-#else
-# if !defined HAVE_GETCWD
-char *getwd ();
-# define getcwd(buf, max) getwd (buf)
-# else
-char *getcwd ();
-# endif
-# ifndef HAVE_STPCPY
-static char *stpcpy PARAMS ((char *dest, const char *src));
-# endif
-#endif
-
-/* Amount to increase buffer size by in each try. */
-#define PATH_INCR 32
-
-/* The following is from pathmax.h. */
-/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
- PATH_MAX but might cause redefinition warnings when sys/param.h is
- later included (as on MORE/BSD 4.3). */
-#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))
-# include <limits.h>
-#endif
-
-#ifndef _POSIX_PATH_MAX
-# define _POSIX_PATH_MAX 255
-#endif
-
-#if !defined(PATH_MAX) && defined(_PC_PATH_MAX)
-# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
-#endif
-
-/* Don't include sys/param.h if it already has been. */
-#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)
-# include <sys/param.h>
-#endif
-
-#if !defined(PATH_MAX) && defined(MAXPATHLEN)
-# define PATH_MAX MAXPATHLEN
-#endif
-
-#ifndef PATH_MAX
-# define PATH_MAX _POSIX_PATH_MAX
-#endif
-
-/* XPG3 defines the result of `setlocale (category, NULL)' as:
- ``Directs `setlocale()' to query `category' and return the current
- setting of `local'.''
- However it does not specify the exact format. And even worse: POSIX
- defines this not at all. So we can use this feature only on selected
- system (e.g. those using GNU C Library). */
-#ifdef _LIBC
-# define HAVE_LOCALE_NULL
-#endif
-
-/* Name of the default domain used for gettext(3) prior any call to
- textdomain(3). The default value for this is "messages". */
-const char _nl_default_default_domain[] = "messages";
-
-/* Value used as the default domain for gettext(3). */
-const char *_nl_current_default_domain = _nl_default_default_domain;
-
-/* Contains the default location of the message catalogs. */
-const char _nl_default_dirname[] = GNULOCALEDIR;
-
-/* List with bindings of specific domains created by bindtextdomain()
- calls. */
-struct binding *_nl_domain_bindings;
-
-/* Prototypes for local functions. */
-static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file,
- const char *msgid)) internal_function;
-static const char *category_to_name PARAMS ((int category)) internal_function;
-static const char *guess_category_value PARAMS ((int category,
- const char *categoryname))
- internal_function;
-
-
-/* For those loosing systems which don't have `alloca' we have to add
- some additional code emulating it. */
-#ifdef HAVE_ALLOCA
-/* Nothing has to be done. */
-# define ADD_BLOCK(list, address) /* nothing */
-# define FREE_BLOCKS(list) /* nothing */
-#else
-struct block_list
-{
- void *address;
- struct block_list *next;
-};
-# define ADD_BLOCK(list, addr) \
- do { \
- struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
- /* If we cannot get a free block we cannot add the new element to \
- the list. */ \
- if (newp != NULL) { \
- newp->address = (addr); \
- newp->next = (list); \
- (list) = newp; \
- } \
- } while (0)
-# define FREE_BLOCKS(list) \
- do { \
- while (list != NULL) { \
- struct block_list *old = list; \
- list = list->next; \
- free (old); \
- } \
- } while (0)
-# undef alloca
-# define alloca(size) (malloc (size))
-#endif /* have alloca */
-
-
/* Names for the libintl functions are a problem. They must not clash
with existing names and they should follow ANSI C. But this source
code is also used in GNU C Library where the names have a __
prefix. So we have to make a difference here. */
#ifdef _LIBC
# define DCGETTEXT __dcgettext
+# define DCIGETTEXT __dcigettext
#else
-# define DCGETTEXT dcgettext__
+# define DCGETTEXT libintl_dcgettext
+# define DCIGETTEXT libintl_dcigettext
#endif
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
@@ -225,400 +49,11 @@ DCGETTEXT (domainname, msgid, category)
const char *msgid;
int category;
{
-#ifndef HAVE_ALLOCA
- struct block_list *block_list = NULL;
-#endif
- struct loaded_l10nfile *domain;
- struct binding *binding;
- const char *categoryname;
- const char *categoryvalue;
- char *dirname, *xdomainname;
- char *single_locale;
- char *retval;
- int saved_errno = errno;
-
- /* If no real MSGID is given return NULL. */
- if (msgid == NULL)
- return NULL;
-
- /* If DOMAINNAME is NULL, we are interested in the default domain. If
- CATEGORY is not LC_MESSAGES this might not make much sense but the
- defintion left this undefined. */
- if (domainname == NULL)
- domainname = _nl_current_default_domain;
-
- /* First find matching binding. */
- for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
- {
- int compare = strcmp (domainname, binding->domainname);
- if (compare == 0)
- /* We found it! */
- break;
- if (compare < 0)
- {
- /* It is not in the list. */
- binding = NULL;
- break;
- }
- }
-
- if (binding == NULL)
- dirname = (char *) _nl_default_dirname;
- else if (binding->dirname[0] == '/')
- dirname = binding->dirname;
- else
- {
- /* We have a relative path. Make it absolute now. */
- size_t dirname_len = strlen (binding->dirname) + 1;
- size_t path_max;
- char *ret;
-
- path_max = (unsigned) PATH_MAX;
- path_max += 2; /* The getcwd docs say to do this. */
-
- dirname = (char *) alloca (path_max + dirname_len);
- ADD_BLOCK (block_list, dirname);
-
- __set_errno (0);
- while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE)
- {
- path_max += PATH_INCR;
- dirname = (char *) alloca (path_max + dirname_len);
- ADD_BLOCK (block_list, dirname);
- __set_errno (0);
- }
-
- if (ret == NULL)
- {
- /* We cannot get the current working directory. Don't signal an
- error but simply return the default string. */
- FREE_BLOCKS (block_list);
- __set_errno (saved_errno);
- return (char *) msgid;
- }
-
- stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
- }
-
- /* Now determine the symbolic name of CATEGORY and its value. */
- categoryname = category_to_name (category);
- categoryvalue = guess_category_value (category, categoryname);
-
- xdomainname = (char *) alloca (strlen (categoryname)
- + strlen (domainname) + 5);
- ADD_BLOCK (block_list, xdomainname);
-
- stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
- domainname),
- ".mo");
-
- /* Creating working area. */
- single_locale = (char *) alloca (strlen (categoryvalue) + 1);
- ADD_BLOCK (block_list, single_locale);
-
-
- /* Search for the given string. This is a loop because we perhaps
- got an ordered list of languages to consider for th translation. */
- while (1)
- {
- /* Make CATEGORYVALUE point to the next element of the list. */
- while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
- ++categoryvalue;
- if (categoryvalue[0] == '\0')
- {
- /* The whole contents of CATEGORYVALUE has been searched but
- no valid entry has been found. We solve this situation
- by implicitly appending a "C" entry, i.e. no translation
- will take place. */
- single_locale[0] = 'C';
- single_locale[1] = '\0';
- }
- else
- {
- char *cp = single_locale;
- while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
- *cp++ = *categoryvalue++;
- *cp = '\0';
- }
-
- /* If the current locale value is C (or POSIX) we don't load a
- domain. Return the MSGID. */
- if (strcmp (single_locale, "C") == 0
- || strcmp (single_locale, "POSIX") == 0)
- {
- FREE_BLOCKS (block_list);
- __set_errno (saved_errno);
- return (char *) msgid;
- }
-
-
- /* Find structure describing the message catalog matching the
- DOMAINNAME and CATEGORY. */
- domain = _nl_find_domain (dirname, single_locale, xdomainname);
-
- if (domain != NULL)
- {
- retval = find_msg (domain, msgid);
-
- if (retval == NULL)
- {
- int cnt;
-
- for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
- {
- retval = find_msg (domain->successor[cnt], msgid);
-
- if (retval != NULL)
- break;
- }
- }
-
- if (retval != NULL)
- {
- FREE_BLOCKS (block_list);
- __set_errno (saved_errno);
- return retval;
- }
- }
- }
- /* NOTREACHED */
+ return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
}
#ifdef _LIBC
/* Alias for function name in GNU C Library. */
+INTDEF(__dcgettext)
weak_alias (__dcgettext, dcgettext);
#endif
-
-
-static char *
-internal_function
-find_msg (domain_file, msgid)
- struct loaded_l10nfile *domain_file;
- const char *msgid;
-{
- size_t top, act, bottom;
- struct loaded_domain *domain;
-
- if (domain_file->decided == 0)
- _nl_load_domain (domain_file);
-
- if (domain_file->data == NULL)
- return NULL;
-
- domain = (struct loaded_domain *) domain_file->data;
-
- /* Locate the MSGID and its translation. */
- if (domain->hash_size > 2 && domain->hash_tab != NULL)
- {
- /* Use the hashing table. */
- nls_uint32 len = strlen (msgid);
- nls_uint32 hash_val = hash_string (msgid);
- nls_uint32 idx = hash_val % domain->hash_size;
- nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
- nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
-
- if (nstr == 0)
- /* Hash table entry is empty. */
- return NULL;
-
- if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
- && strcmp (msgid,
- domain->data + W (domain->must_swap,
- domain->orig_tab[nstr - 1].offset)) == 0)
- return (char *) domain->data + W (domain->must_swap,
- domain->trans_tab[nstr - 1].offset);
-
- while (1)
- {
- if (idx >= domain->hash_size - incr)
- idx -= domain->hash_size - incr;
- else
- idx += incr;
-
- nstr = W (domain->must_swap, domain->hash_tab[idx]);
- if (nstr == 0)
- /* Hash table entry is empty. */
- return NULL;
-
- if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
- && strcmp (msgid,
- domain->data + W (domain->must_swap,
- domain->orig_tab[nstr - 1].offset))
- == 0)
- return (char *) domain->data
- + W (domain->must_swap, domain->trans_tab[nstr - 1].offset);
- }
- /* NOTREACHED */
- }
-
- /* Now we try the default method: binary search in the sorted
- array of messages. */
- bottom = 0;
- top = domain->nstrings;
- while (bottom < top)
- {
- int cmp_val;
-
- act = (bottom + top) / 2;
- cmp_val = strcmp (msgid, domain->data
- + W (domain->must_swap,
- domain->orig_tab[act].offset));
- if (cmp_val < 0)
- top = act;
- else if (cmp_val > 0)
- bottom = act + 1;
- else
- break;
- }
-
- /* If an translation is found return this. */
- return bottom >= top ? NULL : (char *) domain->data
- + W (domain->must_swap,
- domain->trans_tab[act].offset);
-}
-
-
-/* Return string representation of locale CATEGORY. */
-static const char *
-internal_function
-category_to_name (category)
- int category;
-{
- const char *retval;
-
- switch (category)
- {
-#ifdef LC_COLLATE
- case LC_COLLATE:
- retval = "LC_COLLATE";
- break;
-#endif
-#ifdef LC_CTYPE
- case LC_CTYPE:
- retval = "LC_CTYPE";
- break;
-#endif
-#ifdef LC_MONETARY
- case LC_MONETARY:
- retval = "LC_MONETARY";
- break;
-#endif
-#ifdef LC_NUMERIC
- case LC_NUMERIC:
- retval = "LC_NUMERIC";
- break;
-#endif
-#ifdef LC_TIME
- case LC_TIME:
- retval = "LC_TIME";
- break;
-#endif
-#ifdef LC_MESSAGES
- case LC_MESSAGES:
- retval = "LC_MESSAGES";
- break;
-#endif
-#ifdef LC_RESPONSE
- case LC_RESPONSE:
- retval = "LC_RESPONSE";
- break;
-#endif
-#ifdef LC_ALL
- case LC_ALL:
- /* This might not make sense but is perhaps better than any other
- value. */
- retval = "LC_ALL";
- break;
-#endif
- default:
- /* If you have a better idea for a default value let me know. */
- retval = "LC_XXX";
- }
-
- return retval;
-}
-
-/* Guess value of current locale from value of the environment variables. */
-static const char *
-internal_function
-guess_category_value (category, categoryname)
- int category;
- const char *categoryname;
-{
- const char *retval;
-
- /* The highest priority value is the `LANGUAGE' environment
- variable. This is a GNU extension. */
- retval = getenv ("LANGUAGE");
- if (retval != NULL && retval[0] != '\0')
- return retval;
-
- /* `LANGUAGE' is not set. So we have to proceed with the POSIX
- methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some
- systems this can be done by the `setlocale' function itself. */
-#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
- return setlocale (category, NULL);
-#else
- /* Setting of LC_ALL overwrites all other. */
- retval = getenv ("LC_ALL");
- if (retval != NULL && retval[0] != '\0')
- return retval;
-
- /* Next comes the name of the desired category. */
- retval = getenv (categoryname);
- if (retval != NULL && retval[0] != '\0')
- return retval;
-
- /* Last possibility is the LANG environment variable. */
- retval = getenv ("LANG");
- if (retval != NULL && retval[0] != '\0')
- return retval;
-
- /* We use C as the default domain. POSIX says this is implementation
- defined. */
- return "C";
-#endif
-}
-
-/* @@ begin of epilog @@ */
-
-/* We don't want libintl.a to depend on any other library. So we
- avoid the non-standard function stpcpy. In GNU C Library this
- function is available, though. Also allow the symbol HAVE_STPCPY
- to be defined. */
-#if !_LIBC && !HAVE_STPCPY
-static char *
-stpcpy (dest, src)
- char *dest;
- const char *src;
-{
- while ((*dest++ = *src++) != '\0')
- /* Do nothing. */ ;
- return dest - 1;
-}
-#endif
-
-
-#ifdef _LIBC
-/* If we want to free all resources we have to do some work at
- program's end. */
-static void __attribute__ ((unused))
-free_mem (void)
-{
- struct binding *runp;
-
- for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next)
- {
- free (runp->domainname);
- if (runp->dirname != _nl_default_dirname)
- /* Yes, this is a pointer comparison. */
- free (runp->dirname);
- }
-
- if (_nl_current_default_domain != _nl_default_default_domain)
- /* Yes, again a pointer comparison. */
- free ((char *) _nl_current_default_domain);
-}
-
-text_set_element (__libc_subfreeres, free_mem);
-#endif
diff --git a/intl/dcigettext.c b/intl/dcigettext.c
new file mode 100644
index 000000000000..a8d4a14d273b
--- /dev/null
+++ b/intl/dcigettext.c
@@ -0,0 +1,1238 @@
+/* Implementation of the internal dcigettext function.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#ifndef __set_errno
+# define __set_errno(val) errno = (val)
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include <locale.h>
+
+#ifdef _LIBC
+ /* Guess whether integer division by zero raises signal SIGFPE.
+ Set to 1 only if you know for sure. In case of doubt, set to 0. */
+# if defined __alpha__ || defined __arm__ || defined __i386__ \
+ || defined __m68k__ || defined __s390__
+# define INTDIV0_RAISES_SIGFPE 1
+# else
+# define INTDIV0_RAISES_SIGFPE 0
+# endif
+#endif
+#if !INTDIV0_RAISES_SIGFPE
+# include <signal.h>
+#endif
+
+#if defined HAVE_SYS_PARAM_H || defined _LIBC
+# include <sys/param.h>
+#endif
+
+#include "gettextP.h"
+#include "plural-exp.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "hash-string.h"
+
+/* Thread safetyness. */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_lock_define_initialized(CLASS, NAME)
+# define __libc_lock_lock(NAME)
+# define __libc_lock_unlock(NAME)
+# define __libc_rwlock_define_initialized(CLASS, NAME)
+# define __libc_rwlock_rdlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* Alignment of types. */
+#if defined __GNUC__ && __GNUC__ >= 2
+# define alignof(TYPE) __alignof__ (TYPE)
+#else
+# define alignof(TYPE) \
+ ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_default_domain libintl_nl_default_default_domain
+# define _nl_current_default_domain libintl_nl_current_default_domain
+# define _nl_default_dirname libintl_nl_default_dirname
+# define _nl_domain_bindings libintl_nl_domain_bindings
+#endif
+
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions. This is required by the standard
+ because some ANSI C functions will require linking with this object
+ file and the name space must not be polluted. */
+# define getcwd __getcwd
+# ifndef stpcpy
+# define stpcpy __stpcpy
+# endif
+# define tfind __tfind
+#else
+# if !defined HAVE_GETCWD
+char *getwd ();
+# define getcwd(buf, max) getwd (buf)
+# else
+char *getcwd ();
+# endif
+# ifndef HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+# endif
+# ifndef HAVE_MEMPCPY
+static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
+# endif
+#endif
+
+/* Amount to increase buffer size by in each try. */
+#define PATH_INCR 32
+
+/* The following is from pathmax.h. */
+/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
+ PATH_MAX but might cause redefinition warnings when sys/param.h is
+ later included (as on MORE/BSD 4.3). */
+#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__)
+# include <limits.h>
+#endif
+
+#ifndef _POSIX_PATH_MAX
+# define _POSIX_PATH_MAX 255
+#endif
+
+#if !defined PATH_MAX && defined _PC_PATH_MAX
+# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
+#endif
+
+/* Don't include sys/param.h if it already has been. */
+#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
+# include <sys/param.h>
+#endif
+
+#if !defined PATH_MAX && defined MAXPATHLEN
+# define PATH_MAX MAXPATHLEN
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX _POSIX_PATH_MAX
+#endif
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
+ it may be concatenated to a directory pathname.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+# define IS_PATH_WITH_DIR(P) \
+ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+#endif
+
+/* This is the type used for the search tree where known translations
+ are stored. */
+struct known_translation_t
+{
+ /* Domain in which to search. */
+ char *domainname;
+
+ /* The category. */
+ int category;
+
+ /* State of the catalog counter at the point the string was found. */
+ int counter;
+
+ /* Catalog where the string was found. */
+ struct loaded_l10nfile *domain;
+
+ /* And finally the translation. */
+ const char *translation;
+ size_t translation_length;
+
+ /* Pointer to the string in question. */
+ char msgid[ZERO];
+};
+
+/* Root of the search tree with known translations. We can use this
+ only if the system provides the `tsearch' function family. */
+#if defined HAVE_TSEARCH || defined _LIBC
+# include <search.h>
+
+static void *root;
+
+# ifdef _LIBC
+# define tsearch __tsearch
+# endif
+
+/* Function to compare two entries in the table of known translations. */
+static int transcmp PARAMS ((const void *p1, const void *p2));
+static int
+transcmp (p1, p2)
+ const void *p1;
+ const void *p2;
+{
+ const struct known_translation_t *s1;
+ const struct known_translation_t *s2;
+ int result;
+
+ s1 = (const struct known_translation_t *) p1;
+ s2 = (const struct known_translation_t *) p2;
+
+ result = strcmp (s1->msgid, s2->msgid);
+ if (result == 0)
+ {
+ result = strcmp (s1->domainname, s2->domainname);
+ if (result == 0)
+ /* We compare the category last (though this is the cheapest
+ operation) since it is hopefully always the same (namely
+ LC_MESSAGES). */
+ result = s1->category - s2->category;
+ }
+
+ return result;
+}
+#endif
+
+#ifndef INTVARDEF
+# define INTVARDEF(name)
+#endif
+#ifndef INTUSE
+# define INTUSE(name) name
+#endif
+
+/* Name of the default domain used for gettext(3) prior any call to
+ textdomain(3). The default value for this is "messages". */
+const char _nl_default_default_domain[] attribute_hidden = "messages";
+
+/* Value used as the default domain for gettext(3). */
+const char *_nl_current_default_domain attribute_hidden
+ = _nl_default_default_domain;
+
+/* Contains the default location of the message catalogs. */
+#if defined __EMX__
+extern const char _nl_default_dirname[];
+#else
+const char _nl_default_dirname[] = LOCALEDIR;
+INTVARDEF (_nl_default_dirname)
+#endif
+
+/* List with bindings of specific domains created by bindtextdomain()
+ calls. */
+struct binding *_nl_domain_bindings;
+
+/* Prototypes for local functions. */
+static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain,
+ unsigned long int n,
+ const char *translation,
+ size_t translation_len))
+ internal_function;
+static const char *guess_category_value PARAMS ((int category,
+ const char *categoryname))
+ internal_function;
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+# define category_to_name(category) _nl_category_names[category]
+#else
+static const char *category_to_name PARAMS ((int category)) internal_function;
+#endif
+
+
+/* For those loosing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done. */
+# define freea(p) /* nothing */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+ void *address;
+ struct block_list *next;
+};
+# define ADD_BLOCK(list, addr) \
+ do { \
+ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
+ /* If we cannot get a free block we cannot add the new element to \
+ the list. */ \
+ if (newp != NULL) { \
+ newp->address = (addr); \
+ newp->next = (list); \
+ (list) = newp; \
+ } \
+ } while (0)
+# define FREE_BLOCKS(list) \
+ do { \
+ while (list != NULL) { \
+ struct block_list *old = list; \
+ list = list->next; \
+ free (old->address); \
+ free (old); \
+ } \
+ } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+# define freea(p) free (p)
+#endif /* have alloca */
+
+
+#ifdef _LIBC
+/* List of blocks allocated for translations. */
+typedef struct transmem_list
+{
+ struct transmem_list *next;
+ char data[ZERO];
+} transmem_block_t;
+static struct transmem_list *transmem_list;
+#else
+typedef unsigned char transmem_block_t;
+#endif
+
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCIGETTEXT __dcigettext
+#else
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation. */
+#ifdef _LIBC
+__libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden)
+#endif
+
+/* Checking whether the binaries runs SUID must be done and glibc provides
+ easier methods therefore we make a difference here. */
+#ifdef _LIBC
+# define ENABLE_SECURE __libc_enable_secure
+# define DETERMINE_SECURE
+#else
+# ifndef HAVE_GETUID
+# define getuid() 0
+# endif
+# ifndef HAVE_GETGID
+# define getgid() 0
+# endif
+# ifndef HAVE_GETEUID
+# define geteuid() getuid()
+# endif
+# ifndef HAVE_GETEGID
+# define getegid() getgid()
+# endif
+static int enable_secure;
+# define ENABLE_SECURE (enable_secure == 1)
+# define DETERMINE_SECURE \
+ if (enable_secure == 0) \
+ { \
+ if (getuid () != geteuid () || getgid () != getegid ()) \
+ enable_secure = 1; \
+ else \
+ enable_secure = -1; \
+ }
+#endif
+
+/* Get the function to evaluate the plural expression. */
+#include "eval-plural.h"
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+ CATEGORY locale and, if PLURAL is nonzero, search over string
+ depending on the plural form determined by N. */
+char *
+DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
+ const char *domainname;
+ const char *msgid1;
+ const char *msgid2;
+ int plural;
+ unsigned long int n;
+ int category;
+{
+#ifndef HAVE_ALLOCA
+ struct block_list *block_list = NULL;
+#endif
+ struct loaded_l10nfile *domain;
+ struct binding *binding;
+ const char *categoryname;
+ const char *categoryvalue;
+ char *dirname, *xdomainname;
+ char *single_locale;
+ char *retval;
+ size_t retlen;
+ int saved_errno;
+#if defined HAVE_TSEARCH || defined _LIBC
+ struct known_translation_t *search;
+ struct known_translation_t **foundp = NULL;
+ size_t msgid_len;
+#endif
+ size_t domainname_len;
+
+ /* If no real MSGID is given return NULL. */
+ if (msgid1 == NULL)
+ return NULL;
+
+#ifdef _LIBC
+ if (category < 0 || category >= __LC_LAST || category == LC_ALL)
+ /* Bogus. */
+ return (plural == 0
+ ? (char *) msgid1
+ /* Use the Germanic plural rule. */
+ : n == 1 ? (char *) msgid1 : (char *) msgid2);
+#endif
+
+ __libc_rwlock_rdlock (_nl_state_lock);
+
+ /* If DOMAINNAME is NULL, we are interested in the default domain. If
+ CATEGORY is not LC_MESSAGES this might not make much sense but the
+ definition left this undefined. */
+ if (domainname == NULL)
+ domainname = _nl_current_default_domain;
+
+ /* OS/2 specific: backward compatibility with older libintl versions */
+#ifdef LC_MESSAGES_COMPAT
+ if (category == LC_MESSAGES_COMPAT)
+ category = LC_MESSAGES;
+#endif
+
+#if defined HAVE_TSEARCH || defined _LIBC
+ msgid_len = strlen (msgid1) + 1;
+
+ /* Try to find the translation among those which we found at
+ some time. */
+ search = (struct known_translation_t *)
+ alloca (offsetof (struct known_translation_t, msgid) + msgid_len);
+ memcpy (search->msgid, msgid1, msgid_len);
+ search->domainname = (char *) domainname;
+ search->category = category;
+
+ foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
+ freea (search);
+ if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
+ {
+ /* Now deal with plural. */
+ if (plural)
+ retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
+ (*foundp)->translation_length);
+ else
+ retval = (char *) (*foundp)->translation;
+
+ __libc_rwlock_unlock (_nl_state_lock);
+ return retval;
+ }
+#endif
+
+ /* Preserve the `errno' value. */
+ saved_errno = errno;
+
+ /* See whether this is a SUID binary or not. */
+ DETERMINE_SECURE;
+
+ /* First find matching binding. */
+ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+ {
+ int compare = strcmp (domainname, binding->domainname);
+ if (compare == 0)
+ /* We found it! */
+ break;
+ if (compare < 0)
+ {
+ /* It is not in the list. */
+ binding = NULL;
+ break;
+ }
+ }
+
+ if (binding == NULL)
+ dirname = (char *) INTUSE(_nl_default_dirname);
+ else if (IS_ABSOLUTE_PATH (binding->dirname))
+ dirname = binding->dirname;
+ else
+ {
+ /* We have a relative path. Make it absolute now. */
+ size_t dirname_len = strlen (binding->dirname) + 1;
+ size_t path_max;
+ char *ret;
+
+ path_max = (unsigned int) PATH_MAX;
+ path_max += 2; /* The getcwd docs say to do this. */
+
+ for (;;)
+ {
+ dirname = (char *) alloca (path_max + dirname_len);
+ ADD_BLOCK (block_list, dirname);
+
+ __set_errno (0);
+ ret = getcwd (dirname, path_max);
+ if (ret != NULL || errno != ERANGE)
+ break;
+
+ path_max += path_max / 2;
+ path_max += PATH_INCR;
+ }
+
+ if (ret == NULL)
+ /* We cannot get the current working directory. Don't signal an
+ error but simply return the default string. */
+ goto return_untranslated;
+
+ stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
+ }
+
+ /* Now determine the symbolic name of CATEGORY and its value. */
+ categoryname = category_to_name (category);
+ categoryvalue = guess_category_value (category, categoryname);
+
+ domainname_len = strlen (domainname);
+ xdomainname = (char *) alloca (strlen (categoryname)
+ + domainname_len + 5);
+ ADD_BLOCK (block_list, xdomainname);
+
+ stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
+ domainname, domainname_len),
+ ".mo");
+
+ /* Creating working area. */
+ single_locale = (char *) alloca (strlen (categoryvalue) + 1);
+ ADD_BLOCK (block_list, single_locale);
+
+
+ /* Search for the given string. This is a loop because we perhaps
+ got an ordered list of languages to consider for the translation. */
+ while (1)
+ {
+ /* Make CATEGORYVALUE point to the next element of the list. */
+ while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
+ ++categoryvalue;
+ if (categoryvalue[0] == '\0')
+ {
+ /* The whole contents of CATEGORYVALUE has been searched but
+ no valid entry has been found. We solve this situation
+ by implicitly appending a "C" entry, i.e. no translation
+ will take place. */
+ single_locale[0] = 'C';
+ single_locale[1] = '\0';
+ }
+ else
+ {
+ char *cp = single_locale;
+ while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
+ *cp++ = *categoryvalue++;
+ *cp = '\0';
+
+ /* When this is a SUID binary we must not allow accessing files
+ outside the dedicated directories. */
+ if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale))
+ /* Ingore this entry. */
+ continue;
+ }
+
+ /* If the current locale value is C (or POSIX) we don't load a
+ domain. Return the MSGID. */
+ if (strcmp (single_locale, "C") == 0
+ || strcmp (single_locale, "POSIX") == 0)
+ break;
+
+ /* Find structure describing the message catalog matching the
+ DOMAINNAME and CATEGORY. */
+ domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
+
+ if (domain != NULL)
+ {
+ retval = _nl_find_msg (domain, binding, msgid1, &retlen);
+
+ if (retval == NULL)
+ {
+ int cnt;
+
+ for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
+ {
+ retval = _nl_find_msg (domain->successor[cnt], binding,
+ msgid1, &retlen);
+
+ if (retval != NULL)
+ {
+ domain = domain->successor[cnt];
+ break;
+ }
+ }
+ }
+
+ if (retval != NULL)
+ {
+ /* Found the translation of MSGID1 in domain DOMAIN:
+ starting at RETVAL, RETLEN bytes. */
+ FREE_BLOCKS (block_list);
+#if defined HAVE_TSEARCH || defined _LIBC
+ if (foundp == NULL)
+ {
+ /* Create a new entry and add it to the search tree. */
+ struct known_translation_t *newp;
+
+ newp = (struct known_translation_t *)
+ malloc (offsetof (struct known_translation_t, msgid)
+ + msgid_len + domainname_len + 1);
+ if (newp != NULL)
+ {
+ newp->domainname =
+ mempcpy (newp->msgid, msgid1, msgid_len);
+ memcpy (newp->domainname, domainname, domainname_len + 1);
+ newp->category = category;
+ newp->counter = _nl_msg_cat_cntr;
+ newp->domain = domain;
+ newp->translation = retval;
+ newp->translation_length = retlen;
+
+ /* Insert the entry in the search tree. */
+ foundp = (struct known_translation_t **)
+ tsearch (newp, &root, transcmp);
+ if (foundp == NULL
+ || __builtin_expect (*foundp != newp, 0))
+ /* The insert failed. */
+ free (newp);
+ }
+ }
+ else
+ {
+ /* We can update the existing entry. */
+ (*foundp)->counter = _nl_msg_cat_cntr;
+ (*foundp)->domain = domain;
+ (*foundp)->translation = retval;
+ (*foundp)->translation_length = retlen;
+ }
+#endif
+ __set_errno (saved_errno);
+
+ /* Now deal with plural. */
+ if (plural)
+ retval = plural_lookup (domain, n, retval, retlen);
+
+ __libc_rwlock_unlock (_nl_state_lock);
+ return retval;
+ }
+ }
+ }
+
+ return_untranslated:
+ /* Return the untranslated MSGID. */
+ FREE_BLOCKS (block_list);
+ __libc_rwlock_unlock (_nl_state_lock);
+#ifndef _LIBC
+ if (!ENABLE_SECURE)
+ {
+ extern void _nl_log_untranslated PARAMS ((const char *logfilename,
+ const char *domainname,
+ const char *msgid1,
+ const char *msgid2,
+ int plural));
+ const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED");
+
+ if (logfilename != NULL && logfilename[0] != '\0')
+ _nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural);
+ }
+#endif
+ __set_errno (saved_errno);
+ return (plural == 0
+ ? (char *) msgid1
+ /* Use the Germanic plural rule. */
+ : n == 1 ? (char *) msgid1 : (char *) msgid2);
+}
+
+
+char *
+internal_function
+_nl_find_msg (domain_file, domainbinding, msgid, lengthp)
+ struct loaded_l10nfile *domain_file;
+ struct binding *domainbinding;
+ const char *msgid;
+ size_t *lengthp;
+{
+ struct loaded_domain *domain;
+ nls_uint32 nstrings;
+ size_t act;
+ char *result;
+ size_t resultlen;
+
+ if (domain_file->decided == 0)
+ _nl_load_domain (domain_file, domainbinding);
+
+ if (domain_file->data == NULL)
+ return NULL;
+
+ domain = (struct loaded_domain *) domain_file->data;
+
+ nstrings = domain->nstrings;
+
+ /* Locate the MSGID and its translation. */
+ if (domain->hash_tab != NULL)
+ {
+ /* Use the hashing table. */
+ nls_uint32 len = strlen (msgid);
+ nls_uint32 hash_val = hash_string (msgid);
+ nls_uint32 idx = hash_val % domain->hash_size;
+ nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+
+ while (1)
+ {
+ nls_uint32 nstr =
+ W (domain->must_swap_hash_tab, domain->hash_tab[idx]);
+
+ if (nstr == 0)
+ /* Hash table entry is empty. */
+ return NULL;
+
+ nstr--;
+
+ /* Compare msgid with the original string at index nstr.
+ We compare the lengths with >=, not ==, because plural entries
+ are represented by strings with an embedded NUL. */
+ if (nstr < nstrings
+ ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len
+ && (strcmp (msgid,
+ domain->data + W (domain->must_swap,
+ domain->orig_tab[nstr].offset))
+ == 0)
+ : domain->orig_sysdep_tab[nstr - nstrings].length > len
+ && (strcmp (msgid,
+ domain->orig_sysdep_tab[nstr - nstrings].pointer)
+ == 0))
+ {
+ act = nstr;
+ goto found;
+ }
+
+ if (idx >= domain->hash_size - incr)
+ idx -= domain->hash_size - incr;
+ else
+ idx += incr;
+ }
+ /* NOTREACHED */
+ }
+ else
+ {
+ /* Try the default method: binary search in the sorted array of
+ messages. */
+ size_t top, bottom;
+
+ bottom = 0;
+ top = nstrings;
+ while (bottom < top)
+ {
+ int cmp_val;
+
+ act = (bottom + top) / 2;
+ cmp_val = strcmp (msgid, (domain->data
+ + W (domain->must_swap,
+ domain->orig_tab[act].offset)));
+ if (cmp_val < 0)
+ top = act;
+ else if (cmp_val > 0)
+ bottom = act + 1;
+ else
+ goto found;
+ }
+ /* No translation was found. */
+ return NULL;
+ }
+
+ found:
+ /* The translation was found at index ACT. If we have to convert the
+ string to use a different character set, this is the time. */
+ if (act < nstrings)
+ {
+ result = (char *)
+ (domain->data + W (domain->must_swap, domain->trans_tab[act].offset));
+ resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
+ }
+ else
+ {
+ result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer;
+ resultlen = domain->trans_sysdep_tab[act - nstrings].length;
+ }
+
+#if defined _LIBC || HAVE_ICONV
+ if (domain->codeset_cntr
+ != (domainbinding != NULL ? domainbinding->codeset_cntr : 0))
+ {
+ /* The domain's codeset has changed through bind_textdomain_codeset()
+ since the message catalog was initialized or last accessed. We
+ have to reinitialize the converter. */
+ _nl_free_domain_conv (domain);
+ _nl_init_domain_conv (domain_file, domain, domainbinding);
+ }
+
+ if (
+# ifdef _LIBC
+ domain->conv != (__gconv_t) -1
+# else
+# if HAVE_ICONV
+ domain->conv != (iconv_t) -1
+# endif
+# endif
+ )
+ {
+ /* We are supposed to do a conversion. First allocate an
+ appropriate table with the same structure as the table
+ of translations in the file, where we can put the pointers
+ to the converted strings in.
+ There is a slight complication with plural entries. They
+ are represented by consecutive NUL terminated strings. We
+ handle this case by converting RESULTLEN bytes, including
+ NULs. */
+
+ if (domain->conv_tab == NULL
+ && ((domain->conv_tab =
+ (char **) calloc (nstrings + domain->n_sysdep_strings,
+ sizeof (char *)))
+ == NULL))
+ /* Mark that we didn't succeed allocating a table. */
+ domain->conv_tab = (char **) -1;
+
+ if (__builtin_expect (domain->conv_tab == (char **) -1, 0))
+ /* Nothing we can do, no more memory. */
+ goto converted;
+
+ if (domain->conv_tab[act] == NULL)
+ {
+ /* We haven't used this string so far, so it is not
+ translated yet. Do this now. */
+ /* We use a bit more efficient memory handling.
+ We allocate always larger blocks which get used over
+ time. This is faster than many small allocations. */
+ __libc_lock_define_initialized (static, lock)
+# define INITIAL_BLOCK_SIZE 4080
+ static unsigned char *freemem;
+ static size_t freemem_size;
+
+ const unsigned char *inbuf;
+ unsigned char *outbuf;
+ int malloc_count;
+# ifndef _LIBC
+ transmem_block_t *transmem_list = NULL;
+# endif
+
+ __libc_lock_lock (lock);
+
+ inbuf = (const unsigned char *) result;
+ outbuf = freemem + sizeof (size_t);
+
+ malloc_count = 0;
+ while (1)
+ {
+ transmem_block_t *newmem;
+# ifdef _LIBC
+ size_t non_reversible;
+ int res;
+
+ if (freemem_size < sizeof (size_t))
+ goto resize_freemem;
+
+ res = __gconv (domain->conv,
+ &inbuf, inbuf + resultlen,
+ &outbuf,
+ outbuf + freemem_size - sizeof (size_t),
+ &non_reversible);
+
+ if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT)
+ break;
+
+ if (res != __GCONV_FULL_OUTPUT)
+ {
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+
+ inbuf = result;
+# else
+# if HAVE_ICONV
+ const char *inptr = (const char *) inbuf;
+ size_t inleft = resultlen;
+ char *outptr = (char *) outbuf;
+ size_t outleft;
+
+ if (freemem_size < sizeof (size_t))
+ goto resize_freemem;
+
+ outleft = freemem_size - sizeof (size_t);
+ if (iconv (domain->conv,
+ (ICONV_CONST char **) &inptr, &inleft,
+ &outptr, &outleft)
+ != (size_t) (-1))
+ {
+ outbuf = (unsigned char *) outptr;
+ break;
+ }
+ if (errno != E2BIG)
+ {
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+# endif
+# endif
+
+ resize_freemem:
+ /* We must allocate a new buffer or resize the old one. */
+ if (malloc_count > 0)
+ {
+ ++malloc_count;
+ freemem_size = malloc_count * INITIAL_BLOCK_SIZE;
+ newmem = (transmem_block_t *) realloc (transmem_list,
+ freemem_size);
+# ifdef _LIBC
+ if (newmem != NULL)
+ transmem_list = transmem_list->next;
+ else
+ {
+ struct transmem_list *old = transmem_list;
+
+ transmem_list = transmem_list->next;
+ free (old);
+ }
+# endif
+ }
+ else
+ {
+ malloc_count = 1;
+ freemem_size = INITIAL_BLOCK_SIZE;
+ newmem = (transmem_block_t *) malloc (freemem_size);
+ }
+ if (__builtin_expect (newmem == NULL, 0))
+ {
+ freemem = NULL;
+ freemem_size = 0;
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+
+# ifdef _LIBC
+ /* Add the block to the list of blocks we have to free
+ at some point. */
+ newmem->next = transmem_list;
+ transmem_list = newmem;
+
+ freemem = newmem->data;
+ freemem_size -= offsetof (struct transmem_list, data);
+# else
+ transmem_list = newmem;
+ freemem = newmem;
+# endif
+
+ outbuf = freemem + sizeof (size_t);
+ }
+
+ /* We have now in our buffer a converted string. Put this
+ into the table of conversions. */
+ *(size_t *) freemem = outbuf - freemem - sizeof (size_t);
+ domain->conv_tab[act] = (char *) freemem;
+ /* Shrink freemem, but keep it aligned. */
+ freemem_size -= outbuf - freemem;
+ freemem = outbuf;
+ freemem += freemem_size & (alignof (size_t) - 1);
+ freemem_size = freemem_size & ~ (alignof (size_t) - 1);
+
+ __libc_lock_unlock (lock);
+ }
+
+ /* Now domain->conv_tab[act] contains the translation of all
+ the plural variants. */
+ result = domain->conv_tab[act] + sizeof (size_t);
+ resultlen = *(size_t *) domain->conv_tab[act];
+ }
+
+ converted:
+ /* The result string is converted. */
+
+#endif /* _LIBC || HAVE_ICONV */
+
+ *lengthp = resultlen;
+ return result;
+}
+
+
+/* Look up a plural variant. */
+static char *
+internal_function
+plural_lookup (domain, n, translation, translation_len)
+ struct loaded_l10nfile *domain;
+ unsigned long int n;
+ const char *translation;
+ size_t translation_len;
+{
+ struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
+ unsigned long int index;
+ const char *p;
+
+ index = plural_eval (domaindata->plural, n);
+ if (index >= domaindata->nplurals)
+ /* This should never happen. It means the plural expression and the
+ given maximum value do not match. */
+ index = 0;
+
+ /* Skip INDEX strings at TRANSLATION. */
+ p = translation;
+ while (index-- > 0)
+ {
+#ifdef _LIBC
+ p = __rawmemchr (p, '\0');
+#else
+ p = strchr (p, '\0');
+#endif
+ /* And skip over the NUL byte. */
+ p++;
+
+ if (p >= translation + translation_len)
+ /* This should never happen. It means the plural expression
+ evaluated to a value larger than the number of variants
+ available for MSGID1. */
+ return (char *) translation;
+ }
+ return (char *) p;
+}
+
+#ifndef _LIBC
+/* Return string representation of locale CATEGORY. */
+static const char *
+internal_function
+category_to_name (category)
+ int category;
+{
+ const char *retval;
+
+ switch (category)
+ {
+#ifdef LC_COLLATE
+ case LC_COLLATE:
+ retval = "LC_COLLATE";
+ break;
+#endif
+#ifdef LC_CTYPE
+ case LC_CTYPE:
+ retval = "LC_CTYPE";
+ break;
+#endif
+#ifdef LC_MONETARY
+ case LC_MONETARY:
+ retval = "LC_MONETARY";
+ break;
+#endif
+#ifdef LC_NUMERIC
+ case LC_NUMERIC:
+ retval = "LC_NUMERIC";
+ break;
+#endif
+#ifdef LC_TIME
+ case LC_TIME:
+ retval = "LC_TIME";
+ break;
+#endif
+#ifdef LC_MESSAGES
+ case LC_MESSAGES:
+ retval = "LC_MESSAGES";
+ break;
+#endif
+#ifdef LC_RESPONSE
+ case LC_RESPONSE:
+ retval = "LC_RESPONSE";
+ break;
+#endif
+#ifdef LC_ALL
+ case LC_ALL:
+ /* This might not make sense but is perhaps better than any other
+ value. */
+ retval = "LC_ALL";
+ break;
+#endif
+ default:
+ /* If you have a better idea for a default value let me know. */
+ retval = "LC_XXX";
+ }
+
+ return retval;
+}
+#endif
+
+/* Guess value of current locale from value of the environment variables. */
+static const char *
+internal_function
+guess_category_value (category, categoryname)
+ int category;
+ const char *categoryname;
+{
+ const char *language;
+ const char *retval;
+
+ /* The highest priority value is the `LANGUAGE' environment
+ variable. But we don't use the value if the currently selected
+ locale is the C locale. This is a GNU extension. */
+ language = getenv ("LANGUAGE");
+ if (language != NULL && language[0] == '\0')
+ language = NULL;
+
+ /* We have to proceed with the POSIX methods of looking to `LC_ALL',
+ `LC_xxx', and `LANG'. On some systems this can be done by the
+ `setlocale' function itself. */
+#ifdef _LIBC
+ retval = __current_locale_name (category);
+#else
+ retval = _nl_locale_name (category, categoryname);
+#endif
+
+ /* Ignore LANGUAGE if the locale is set to "C" because
+ 1. "C" locale usually uses the ASCII encoding, and most international
+ messages use non-ASCII characters. These characters get displayed
+ as question marks (if using glibc's iconv()) or as invalid 8-bit
+ characters (because other iconv()s refuse to convert most non-ASCII
+ characters to ASCII). In any case, the output is ugly.
+ 2. The precise output of some programs in the "C" locale is specified
+ by POSIX and should not depend on environment variables like
+ "LANGUAGE". We allow such programs to use gettext(). */
+ return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
+}
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library. So we
+ avoid the non-standard function stpcpy. In GNU C Library this
+ function is available, though. Also allow the symbol HAVE_STPCPY
+ to be defined. */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+ char *dest;
+ const char *src;
+{
+ while ((*dest++ = *src++) != '\0')
+ /* Do nothing. */ ;
+ return dest - 1;
+}
+#endif
+
+#if !_LIBC && !HAVE_MEMPCPY
+static void *
+mempcpy (dest, src, n)
+ void *dest;
+ const void *src;
+ size_t n;
+{
+ return (void *) ((char *) memcpy (dest, src, n) + n);
+}
+#endif
+
+
+#ifdef _LIBC
+/* If we want to free all resources we have to do some work at
+ program's end. */
+libc_freeres_fn (free_mem)
+{
+ void *old;
+
+ while (_nl_domain_bindings != NULL)
+ {
+ struct binding *oldp = _nl_domain_bindings;
+ _nl_domain_bindings = _nl_domain_bindings->next;
+ if (oldp->dirname != INTUSE(_nl_default_dirname))
+ /* Yes, this is a pointer comparison. */
+ free (oldp->dirname);
+ free (oldp->codeset);
+ free (oldp);
+ }
+
+ if (_nl_current_default_domain != _nl_default_default_domain)
+ /* Yes, again a pointer comparison. */
+ free ((char *) _nl_current_default_domain);
+
+ /* Remove the search tree with the known translations. */
+ __tdestroy (root, free);
+ root = NULL;
+
+ while (transmem_list != NULL)
+ {
+ old = transmem_list;
+ transmem_list = transmem_list->next;
+ free (old);
+ }
+}
+#endif
diff --git a/intl/dcngettext.c b/intl/dcngettext.c
new file mode 100644
index 000000000000..d2fb0f9a9961
--- /dev/null
+++ b/intl/dcngettext.c
@@ -0,0 +1,60 @@
+/* Implementation of the dcngettext(3) function.
+ Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCNGETTEXT __dcngettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCNGETTEXT libintl_dcngettext
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+char *
+DCNGETTEXT (domainname, msgid1, msgid2, n, category)
+ const char *domainname;
+ const char *msgid1;
+ const char *msgid2;
+ unsigned long int n;
+ int category;
+{
+ return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dcngettext, dcngettext);
+#endif
diff --git a/intl/dgettext.c b/intl/dgettext.c
index e4a0cfdb6e05..e497dd9c920b 100644
--- a/intl/dgettext.c
+++ b/intl/dgettext.c
@@ -1,32 +1,33 @@
-/* Implementation of the dgettext(3) function
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Implementation of the dgettext(3) function.
+ Copyright (C) 1995-1997, 2000-2003 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)
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
-#if defined HAVE_LOCALE_H || defined _LIBC
-# include <locale.h>
-#endif
+#include "gettextP.h"
+
+#include <locale.h>
#ifdef _LIBC
# include <libintl.h>
#else
-# include "libgettext.h"
+# include "libgnuintl.h"
#endif
/* @@ end of prolog @@ */
@@ -37,10 +38,10 @@
prefix. So we have to make a difference here. */
#ifdef _LIBC
# define DGETTEXT __dgettext
-# define DCGETTEXT __dcgettext
+# define DCGETTEXT INTUSE(__dcgettext)
#else
-# define DGETTEXT dgettext__
-# define DCGETTEXT dcgettext__
+# define DGETTEXT libintl_dgettext
+# define DCGETTEXT libintl_dcgettext
#endif
/* Look up MSGID in the DOMAINNAME message catalog of the current
diff --git a/intl/dngettext.c b/intl/dngettext.c
new file mode 100644
index 000000000000..8dee80085445
--- /dev/null
+++ b/intl/dngettext.c
@@ -0,0 +1,62 @@
+/* Implementation of the dngettext(3) function.
+ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+#include <locale.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DNGETTEXT __dngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define DNGETTEXT libintl_dngettext
+# define DCNGETTEXT libintl_dcngettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+ LC_MESSAGES locale and skip message according to the plural form. */
+char *
+DNGETTEXT (domainname, msgid1, msgid2, n)
+ const char *domainname;
+ const char *msgid1;
+ const char *msgid2;
+ unsigned long int n;
+{
+ return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dngettext, dngettext);
+#endif
diff --git a/intl/eval-plural.h b/intl/eval-plural.h
new file mode 100644
index 000000000000..5bf1dd161626
--- /dev/null
+++ b/intl/eval-plural.h
@@ -0,0 +1,114 @@
+/* Plural expression evaluation.
+ Copyright (C) 2000-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ 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 STATIC
+#define STATIC static
+#endif
+
+/* Evaluate the plural expression and return an index value. */
+STATIC unsigned long int plural_eval PARAMS ((struct expression *pexp,
+ unsigned long int n))
+ internal_function;
+
+STATIC
+unsigned long int
+internal_function
+plural_eval (pexp, n)
+ struct expression *pexp;
+ unsigned long int n;
+{
+ switch (pexp->nargs)
+ {
+ case 0:
+ switch (pexp->operation)
+ {
+ case var:
+ return n;
+ case num:
+ return pexp->val.num;
+ default:
+ break;
+ }
+ /* NOTREACHED */
+ break;
+ case 1:
+ {
+ /* pexp->operation must be lnot. */
+ unsigned long int arg = plural_eval (pexp->val.args[0], n);
+ return ! arg;
+ }
+ case 2:
+ {
+ unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
+ if (pexp->operation == lor)
+ return leftarg || plural_eval (pexp->val.args[1], n);
+ else if (pexp->operation == land)
+ return leftarg && plural_eval (pexp->val.args[1], n);
+ else
+ {
+ unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
+
+ switch (pexp->operation)
+ {
+ case mult:
+ return leftarg * rightarg;
+ case divide:
+#if !INTDIV0_RAISES_SIGFPE
+ if (rightarg == 0)
+ raise (SIGFPE);
+#endif
+ return leftarg / rightarg;
+ case module:
+#if !INTDIV0_RAISES_SIGFPE
+ if (rightarg == 0)
+ raise (SIGFPE);
+#endif
+ return leftarg % rightarg;
+ case plus:
+ return leftarg + rightarg;
+ case minus:
+ return leftarg - rightarg;
+ case less_than:
+ return leftarg < rightarg;
+ case greater_than:
+ return leftarg > rightarg;
+ case less_or_equal:
+ return leftarg <= rightarg;
+ case greater_or_equal:
+ return leftarg >= rightarg;
+ case equal:
+ return leftarg == rightarg;
+ case not_equal:
+ return leftarg != rightarg;
+ default:
+ break;
+ }
+ }
+ /* NOTREACHED */
+ break;
+ }
+ case 3:
+ {
+ /* pexp->operation must be qmop. */
+ unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
+ return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
+ }
+ }
+ /* NOTREACHED */
+ return 0;
+}
diff --git a/intl/explodename.c b/intl/explodename.c
index 5a911cee91b9..c577c54f5296 100644
--- a/intl/explodename.c
+++ b/intl/explodename.c
@@ -1,33 +1,27 @@
-/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
- 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)
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#endif
-
-#if defined HAVE_STRING_H || defined _LIBC
-# include <string.h>
-#else
-# include <strings.h>
-#endif
+#include <stdlib.h>
+#include <string.h>
#include <sys/types.h>
#include "loadinfo.h"
@@ -43,6 +37,18 @@
/* @@ end of prolog @@ */
+char *
+_nl_find_language (name)
+ const char *name;
+{
+ while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
+ && name[0] != '+' && name[0] != ',')
+ ++name;
+
+ return (char *) name;
+}
+
+
int
_nl_explode_name (name, language, modifier, territory, codeset,
normalized_codeset, special, sponsor, revision)
@@ -74,9 +80,7 @@ _nl_explode_name (name, language, modifier, territory, codeset,
mask = 0;
syntax = undecided;
*language = cp = name;
- while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@'
- && cp[0] != '+' && cp[0] != ',')
- ++cp;
+ cp = _nl_find_language (*language);
if (*language == cp)
/* This does not make sense: language has to be specified. Use
diff --git a/intl/finddomain.c b/intl/finddomain.c
index 5409565fd3d8..e12a638d5c30 100644
--- a/intl/finddomain.c
+++ b/intl/finddomain.c
@@ -1,64 +1,40 @@
/* Handle list of needed message catalogs
- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+ Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@gnu.org>, 1995.
- 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)
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
-#include <ctype.h>
-#include <errno.h>
#include <stdio.h>
#include <sys/types.h>
-
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#else
-# ifdef HAVE_MALLOC_H
-# include <malloc.h>
-# else
-void free ();
-# endif
-#endif
-
-#if defined HAVE_STRING_H || defined _LIBC
-# include <string.h>
-#else
-# include <strings.h>
-# ifndef memcpy
-# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
-# endif
-#endif
-#if !HAVE_STRCHR && !defined _LIBC
-# ifndef strchr
-# define strchr index
-# endif
-#endif
+#include <stdlib.h>
+#include <string.h>
#if defined HAVE_UNISTD_H || defined _LIBC
# include <unistd.h>
#endif
-#include "gettext.h"
#include "gettextP.h"
#ifdef _LIBC
# include <libintl.h>
#else
-# include "libgettext.h"
+# include "libgnuintl.h"
#endif
/* @@ end of prolog @@ */
@@ -71,10 +47,11 @@ static struct loaded_l10nfile *_nl_loaded_domains;
established bindings. */
struct loaded_l10nfile *
internal_function
-_nl_find_domain (dirname, locale, domainname)
+_nl_find_domain (dirname, locale, domainname, domainbinding)
const char *dirname;
char *locale;
const char *domainname;
+ struct binding *domainbinding;
{
struct loaded_l10nfile *retval;
const char *language;
@@ -120,7 +97,7 @@ _nl_find_domain (dirname, locale, domainname)
int cnt;
if (retval->decided == 0)
- _nl_load_domain (retval);
+ _nl_load_domain (retval, domainbinding);
if (retval->data != NULL)
return retval;
@@ -128,7 +105,7 @@ _nl_find_domain (dirname, locale, domainname)
for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
{
if (retval->successor[cnt]->decided == 0)
- _nl_load_domain (retval->successor[cnt]);
+ _nl_load_domain (retval->successor[cnt], domainbinding);
if (retval->successor[cnt]->data != NULL)
break;
@@ -175,14 +152,14 @@ _nl_find_domain (dirname, locale, domainname)
return NULL;
if (retval->decided == 0)
- _nl_load_domain (retval);
+ _nl_load_domain (retval, domainbinding);
if (retval->data == NULL)
{
int cnt;
for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
{
if (retval->successor[cnt]->decided == 0)
- _nl_load_domain (retval->successor[cnt]);
+ _nl_load_domain (retval->successor[cnt], domainbinding);
if (retval->successor[cnt]->data != NULL)
break;
}
@@ -192,13 +169,16 @@ _nl_find_domain (dirname, locale, domainname)
if (alias_value != NULL)
free (locale);
+ /* The space for normalized_codeset is dynamically allocated. Free it. */
+ if (mask & XPG_NORM_CODESET)
+ free ((void *) normalized_codeset);
+
return retval;
}
#ifdef _LIBC
-static void __attribute__ ((unused))
-free_mem (void)
+libc_freeres_fn (free_mem)
{
struct loaded_l10nfile *runp = _nl_loaded_domains;
@@ -208,9 +188,8 @@ free_mem (void)
if (runp->data != NULL)
_nl_unload_domain ((struct loaded_domain *) runp->data);
runp = runp->next;
+ free ((char *) here->filename);
free (here);
}
}
-
-text_set_element (__libc_subfreeres, free_mem);
#endif
diff --git a/intl/gettext.c b/intl/gettext.c
index 6bc5b94d3e82..57130f40a122 100644
--- a/intl/gettext.c
+++ b/intl/gettext.c
@@ -1,19 +1,20 @@
/* Implementation of gettext(3) function.
- Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1997, 2000, 2001, 2002 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)
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
#ifdef HAVE_CONFIG_H
# include <config.h>
@@ -23,21 +24,14 @@
# define __need_NULL
# include <stddef.h>
#else
-# ifdef STDC_HEADERS
-# include <stdlib.h> /* Just for NULL. */
-# else
-# ifdef HAVE_STRING_H
-# include <string.h>
-# else
-# define NULL ((void *) 0)
-# endif
-# endif
+# include <stdlib.h> /* Just for NULL. */
#endif
+#include "gettextP.h"
#ifdef _LIBC
# include <libintl.h>
#else
-# include "libgettext.h"
+# include "libgnuintl.h"
#endif
/* @@ end of prolog @@ */
@@ -48,10 +42,10 @@
prefix. So we have to make a difference here. */
#ifdef _LIBC
# define GETTEXT __gettext
-# define DGETTEXT __dgettext
+# define DCGETTEXT INTUSE(__dcgettext)
#else
-# define GETTEXT gettext__
-# define DGETTEXT dgettext__
+# define GETTEXT libintl_gettext
+# define DCGETTEXT libintl_dcgettext
#endif
/* Look up MSGID in the current default message catalog for the current
@@ -61,7 +55,7 @@ char *
GETTEXT (msgid)
const char *msgid;
{
- return DGETTEXT (NULL, msgid);
+ return DCGETTEXT (NULL, msgid, LC_MESSAGES);
}
#ifdef _LIBC
diff --git a/intl/gettext.h b/intl/gettext.h
deleted file mode 100644
index 3887e876402b..000000000000
--- a/intl/gettext.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Internal header for GNU gettext internationalization functions.
- Copyright (C) 1995, 1997 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 Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-#ifndef _GETTEXT_H
-#define _GETTEXT_H 1
-
-#include <stdio.h>
-
-#if HAVE_LIMITS_H || _LIBC
-# include <limits.h>
-#endif
-
-/* @@ end of prolog @@ */
-
-/* The magic number of the GNU message catalog format. */
-#define _MAGIC 0x950412de
-#define _MAGIC_SWAPPED 0xde120495
-
-/* Revision number of the currently used .mo (binary) file format. */
-#define MO_REVISION_NUMBER 0
-
-/* The following contortions are an attempt to use the C preprocessor
- to determine an unsigned integral type that is 32 bits wide. An
- alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
- doing that would require that the configure script compile and *run*
- the resulting executable. Locally running cross-compiled executables
- is usually not possible. */
-
-#if __STDC__
-# define UINT_MAX_32_BITS 4294967295U
-#else
-# define UINT_MAX_32_BITS 0xFFFFFFFF
-#endif
-
-/* If UINT_MAX isn't defined, assume it's a 32-bit type.
- This should be valid for all systems GNU cares about because
- that doesn't include 16-bit systems, and only modern systems
- (that certainly have <limits.h>) have 64+-bit integral types. */
-
-#ifndef UINT_MAX
-# define UINT_MAX UINT_MAX_32_BITS
-#endif
-
-#if UINT_MAX == UINT_MAX_32_BITS
-typedef unsigned nls_uint32;
-#else
-# if USHRT_MAX == UINT_MAX_32_BITS
-typedef unsigned short nls_uint32;
-# else
-# if ULONG_MAX == UINT_MAX_32_BITS
-typedef unsigned long nls_uint32;
-# else
- /* The following line is intended to throw an error. Using #error is
- not portable enough. */
- "Cannot determine unsigned 32-bit data type."
-# endif
-# endif
-#endif
-
-
-/* Header for binary .mo file format. */
-struct mo_file_header
-{
- /* The magic number. */
- nls_uint32 magic;
- /* The revision number of the file format. */
- nls_uint32 revision;
- /* The number of strings pairs. */
- nls_uint32 nstrings;
- /* Offset of table with start offsets of original strings. */
- nls_uint32 orig_tab_offset;
- /* Offset of table with start offsets of translation strings. */
- nls_uint32 trans_tab_offset;
- /* Size of hashing table. */
- nls_uint32 hash_tab_size;
- /* Offset of first hashing entry. */
- nls_uint32 hash_tab_offset;
-};
-
-struct string_desc
-{
- /* Length of addressed string. */
- nls_uint32 length;
- /* Offset of string in file. */
- nls_uint32 offset;
-};
-
-/* @@ begin of epilog @@ */
-
-#endif /* gettext.h */
diff --git a/intl/gettextP.h b/intl/gettextP.h
index 61e2f871bc80..3ff2dd77a694 100644
--- a/intl/gettextP.h
+++ b/intl/gettextP.h
@@ -1,30 +1,43 @@
-/* Header describing internals of gettext library
- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+/* Header describing internals of libintl library.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
- 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)
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU Library General Public
+ 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 _GETTEXTP_H
#define _GETTEXTP_H
+#include <stddef.h> /* Get size_t. */
+
+#ifdef _LIBC
+# include "../iconv/gconv_int.h"
+#else
+# if HAVE_ICONV
+# include <iconv.h>
+# endif
+#endif
+
#include "loadinfo.h"
+#include "gmo.h" /* Get nls_uint32. */
+
/* @@ end of prolog @@ */
#ifndef PARAMS
-# if __STDC__
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
# define PARAMS(args) args
# else
# define PARAMS(args) ()
@@ -35,6 +48,16 @@
# define internal_function
#endif
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+ almost always true or almost always false. */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
#ifndef W
# define W(flag, data) ((flag) ? SWAP (data) : (data))
#endif
@@ -44,8 +67,6 @@
# include <byteswap.h>
# define SWAP(i) bswap_32 (i)
#else
-static nls_uint32 SWAP PARAMS ((nls_uint32 i));
-
static inline nls_uint32
SWAP (i)
nls_uint32 i;
@@ -55,34 +76,148 @@ SWAP (i)
#endif
+/* In-memory representation of system dependent string. */
+struct sysdep_string_desc
+{
+ /* Length of addressed string, including the trailing NUL. */
+ size_t length;
+ /* Pointer to addressed string. */
+ const char *pointer;
+};
+
+/* The representation of an opened message catalog. */
struct loaded_domain
{
+ /* Pointer to memory containing the .mo file. */
const char *data;
+ /* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed. */
int use_mmap;
+ /* Size of mmap()ed memory. */
size_t mmap_size;
+ /* 1 if the .mo file uses a different endianness than this machine. */
int must_swap;
+ /* Pointer to additional malloc()ed memory. */
+ void *malloced;
+
+ /* Number of static strings pairs. */
nls_uint32 nstrings;
- struct string_desc *orig_tab;
- struct string_desc *trans_tab;
+ /* Pointer to descriptors of original strings in the file. */
+ const struct string_desc *orig_tab;
+ /* Pointer to descriptors of translated strings in the file. */
+ const struct string_desc *trans_tab;
+
+ /* Number of system dependent strings pairs. */
+ nls_uint32 n_sysdep_strings;
+ /* Pointer to descriptors of original sysdep strings. */
+ const struct sysdep_string_desc *orig_sysdep_tab;
+ /* Pointer to descriptors of translated sysdep strings. */
+ const struct sysdep_string_desc *trans_sysdep_tab;
+
+ /* Size of hash table. */
nls_uint32 hash_size;
- nls_uint32 *hash_tab;
+ /* Pointer to hash table. */
+ const nls_uint32 *hash_tab;
+ /* 1 if the hash table uses a different endianness than this machine. */
+ int must_swap_hash_tab;
+
+ int codeset_cntr;
+#ifdef _LIBC
+ __gconv_t conv;
+#else
+# if HAVE_ICONV
+ iconv_t conv;
+# endif
+#endif
+ char **conv_tab;
+
+ struct expression *plural;
+ unsigned long int nplurals;
};
+/* We want to allocate a string at the end of the struct. But ISO C
+ doesn't allow zero sized arrays. */
+#ifdef __GNUC__
+# define ZERO 0
+#else
+# define ZERO 1
+#endif
+
+/* A set of settings bound to a message domain. Used to store settings
+ from bindtextdomain() and bind_textdomain_codeset(). */
struct binding
{
struct binding *next;
- char *domainname;
char *dirname;
+ int codeset_cntr; /* Incremented each time codeset changes. */
+ char *codeset;
+ char domainname[ZERO];
};
+/* A counter which is incremented each time some previous translations
+ become invalid.
+ This variable is part of the external ABI of the GNU libintl. */
+extern int _nl_msg_cat_cntr;
+
+#ifndef _LIBC
+const char *_nl_locale_name PARAMS ((int category, const char *categoryname));
+#endif
+
struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
char *__locale,
- const char *__domainname))
+ const char *__domainname,
+ struct binding *__domainbinding))
internal_function;
-void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain))
+void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
+ struct binding *__domainbinding))
internal_function;
void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
internal_function;
+const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
+ struct loaded_domain *__domain,
+ struct binding *__domainbinding))
+ internal_function;
+void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
+ internal_function;
+
+char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
+ struct binding *domainbinding,
+ const char *msgid, size_t *lengthp))
+ internal_function;
+
+#ifdef _LIBC
+extern char *__gettext PARAMS ((const char *__msgid));
+extern char *__dgettext PARAMS ((const char *__domainname,
+ const char *__msgid));
+extern char *__dcgettext PARAMS ((const char *__domainname,
+ const char *__msgid, int __category));
+extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
+ unsigned long int __n));
+extern char *__dngettext PARAMS ((const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int n));
+extern char *__dcngettext PARAMS ((const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category));
+extern char *__dcigettext PARAMS ((const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ int __plural, unsigned long int __n,
+ int __category));
+extern char *__textdomain PARAMS ((const char *__domainname));
+extern char *__bindtextdomain PARAMS ((const char *__domainname,
+ const char *__dirname));
+extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
+ const char *__codeset));
+#else
+/* Declare the exported libintl_* functions, in a way that allows us to
+ call them under their real name. */
+# define _INTL_REDIRECT_MACROS
+# include "libintl.h"
+extern char *libintl_dcigettext PARAMS ((const char *__domainname,
+ const char *__msgid1,
+ const char *__msgid2,
+ int __plural, unsigned long int __n,
+ int __category));
+#endif
/* @@ begin of epilog @@ */
diff --git a/intl/gmo.h b/intl/gmo.h
new file mode 100644
index 000000000000..ccebb3aa6ad1
--- /dev/null
+++ b/intl/gmo.h
@@ -0,0 +1,148 @@
+/* Description of GNU message catalog format: general file layout.
+ Copyright (C) 1995, 1997, 2000-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ 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 _GETTEXT_H
+#define _GETTEXT_H 1
+
+#include <limits.h>
+
+/* @@ end of prolog @@ */
+
+/* The magic number of the GNU message catalog format. */
+#define _MAGIC 0x950412de
+#define _MAGIC_SWAPPED 0xde120495
+
+/* Revision number of the currently used .mo (binary) file format. */
+#define MO_REVISION_NUMBER 0
+
+/* The following contortions are an attempt to use the C preprocessor
+ to determine an unsigned integral type that is 32 bits wide. An
+ alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
+ as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
+ when cross-compiling. */
+
+#if __STDC__
+# define UINT_MAX_32_BITS 4294967295U
+#else
+# define UINT_MAX_32_BITS 0xFFFFFFFF
+#endif
+
+/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+ This should be valid for all systems GNU cares about because
+ that doesn't include 16-bit systems, and only modern systems
+ (that certainly have <limits.h>) have 64+-bit integral types. */
+
+#ifndef UINT_MAX
+# define UINT_MAX UINT_MAX_32_BITS
+#endif
+
+#if UINT_MAX == UINT_MAX_32_BITS
+typedef unsigned nls_uint32;
+#else
+# if USHRT_MAX == UINT_MAX_32_BITS
+typedef unsigned short nls_uint32;
+# else
+# if ULONG_MAX == UINT_MAX_32_BITS
+typedef unsigned long nls_uint32;
+# else
+ /* The following line is intended to throw an error. Using #error is
+ not portable enough. */
+ "Cannot determine unsigned 32-bit data type."
+# endif
+# endif
+#endif
+
+
+/* Header for binary .mo file format. */
+struct mo_file_header
+{
+ /* The magic number. */
+ nls_uint32 magic;
+ /* The revision number of the file format. */
+ nls_uint32 revision;
+
+ /* The following are only used in .mo files with major revision 0. */
+
+ /* The number of strings pairs. */
+ nls_uint32 nstrings;
+ /* Offset of table with start offsets of original strings. */
+ nls_uint32 orig_tab_offset;
+ /* Offset of table with start offsets of translated strings. */
+ nls_uint32 trans_tab_offset;
+ /* Size of hash table. */
+ nls_uint32 hash_tab_size;
+ /* Offset of first hash table entry. */
+ nls_uint32 hash_tab_offset;
+
+ /* The following are only used in .mo files with minor revision >= 1. */
+
+ /* The number of system dependent segments. */
+ nls_uint32 n_sysdep_segments;
+ /* Offset of table describing system dependent segments. */
+ nls_uint32 sysdep_segments_offset;
+ /* The number of system dependent strings pairs. */
+ nls_uint32 n_sysdep_strings;
+ /* Offset of table with start offsets of original sysdep strings. */
+ nls_uint32 orig_sysdep_tab_offset;
+ /* Offset of table with start offsets of translated sysdep strings. */
+ nls_uint32 trans_sysdep_tab_offset;
+};
+
+/* Descriptor for static string contained in the binary .mo file. */
+struct string_desc
+{
+ /* Length of addressed string, not including the trailing NUL. */
+ nls_uint32 length;
+ /* Offset of string in file. */
+ nls_uint32 offset;
+};
+
+/* The following are only used in .mo files with minor revision >= 1. */
+
+/* Descriptor for system dependent string segment. */
+struct sysdep_segment
+{
+ /* Length of addressed string, including the trailing NUL. */
+ nls_uint32 length;
+ /* Offset of string in file. */
+ nls_uint32 offset;
+};
+
+/* Descriptor for system dependent string. */
+struct sysdep_string
+{
+ /* Offset of static string segments in file. */
+ nls_uint32 offset;
+ /* Alternating sequence of static and system dependent segments.
+ The last segment is a static segment, including the trailing NUL. */
+ struct segment_pair
+ {
+ /* Size of static segment. */
+ nls_uint32 segsize;
+ /* Reference to system dependent string segment, or ~0 at the end. */
+ nls_uint32 sysdepref;
+ } segments[1];
+};
+
+/* Marker for the end of the segments[] array. This has the value 0xFFFFFFFF,
+ regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */
+#define SEGMENTS_END ((nls_uint32) ~0)
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettext.h */
diff --git a/intl/hash-string.h b/intl/hash-string.h
index 662810783643..6eab80f96e35 100644
--- a/intl/hash-string.h
+++ b/intl/hash-string.h
@@ -1,25 +1,25 @@
-/* Implements a string hashing function.
- Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+/* Description of GNU message catalog format: string hashing function.
+ Copyright (C) 1995, 1997, 1998, 2000, 2001 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)
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
/* @@ end of prolog @@ */
#ifndef PARAMS
-# if __STDC__
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
@@ -33,9 +33,9 @@
/* Defines the so called `hashpjw' function by P.J. Weinberger
[see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
1986, 1987 Bell Telephone Laboratories, Inc.] */
-static unsigned long hash_string PARAMS ((const char *__str_param));
+static unsigned long int hash_string PARAMS ((const char *__str_param));
-static inline unsigned long
+static inline unsigned long int
hash_string (str_param)
const char *str_param;
{
@@ -47,8 +47,8 @@ hash_string (str_param)
while (*str != '\0')
{
hval <<= 4;
- hval += (unsigned long) *str++;
- g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4));
+ hval += (unsigned long int) *str++;
+ g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
if (g != 0)
{
hval ^= g >> (HASHWORDBITS - 8);
diff --git a/intl/intl-compat.c b/intl/intl-compat.c
index 415a0f3b4f8f..71a621a32bee 100644
--- a/intl/intl-compat.c
+++ b/intl/intl-compat.c
@@ -1,76 +1,151 @@
/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
Library.
- Copyright (C) 1995 Software Foundation, Inc.
+ Copyright (C) 1995, 2000-2003 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 free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
-#include "libgettext.h"
+#include "gettextP.h"
/* @@ end of prolog @@ */
+/* This file redirects the gettext functions (without prefix) to those
+ defined in the included GNU libintl library (with "libintl_" prefix).
+ It is compiled into libintl in order to make the AM_GNU_GETTEXT test
+ of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which
+ has the redirections primarily in the <libintl.h> include file.
+ It is also compiled into libgnuintl so that libgnuintl.so can be used
+ as LD_PRELOADable library on glibc systems, to provide the extra
+ features that the functions in the libc don't have (namely, logging). */
+
#undef gettext
#undef dgettext
#undef dcgettext
+#undef ngettext
+#undef dngettext
+#undef dcngettext
#undef textdomain
#undef bindtextdomain
+#undef bind_textdomain_codeset
+
+/* When building a DLL, we must export some functions. Note that because
+ the functions are only defined for binary backward compatibility, we
+ don't need to use __declspec(dllimport) in any case. */
+#if defined _MSC_VER && BUILDING_DLL
+# define DLL_EXPORTED __declspec(dllexport)
+#else
+# define DLL_EXPORTED
+#endif
+
+DLL_EXPORTED
char *
-bindtextdomain (domainname, dirname)
+gettext (msgid)
+ const char *msgid;
+{
+ return libintl_gettext (msgid);
+}
+
+
+DLL_EXPORTED
+char *
+dgettext (domainname, msgid)
const char *domainname;
- const char *dirname;
+ const char *msgid;
{
- return bindtextdomain__ (domainname, dirname);
+ return libintl_dgettext (domainname, msgid);
}
+DLL_EXPORTED
char *
dcgettext (domainname, msgid, category)
const char *domainname;
const char *msgid;
int category;
{
- return dcgettext__ (domainname, msgid, category);
+ return libintl_dcgettext (domainname, msgid, category);
}
+DLL_EXPORTED
char *
-dgettext (domainname, msgid)
+ngettext (msgid1, msgid2, n)
+ const char *msgid1;
+ const char *msgid2;
+ unsigned long int n;
+{
+ return libintl_ngettext (msgid1, msgid2, n);
+}
+
+
+DLL_EXPORTED
+char *
+dngettext (domainname, msgid1, msgid2, n)
const char *domainname;
- const char *msgid;
+ const char *msgid1;
+ const char *msgid2;
+ unsigned long int n;
{
- return dgettext__ (domainname, msgid);
+ return libintl_dngettext (domainname, msgid1, msgid2, n);
}
+DLL_EXPORTED
char *
-gettext (msgid)
- const char *msgid;
+dcngettext (domainname, msgid1, msgid2, n, category)
+ const char *domainname;
+ const char *msgid1;
+ const char *msgid2;
+ unsigned long int n;
+ int category;
{
- return gettext__ (msgid);
+ return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
}
+DLL_EXPORTED
char *
textdomain (domainname)
const char *domainname;
{
- return textdomain__ (domainname);
+ return libintl_textdomain (domainname);
+}
+
+
+DLL_EXPORTED
+char *
+bindtextdomain (domainname, dirname)
+ const char *domainname;
+ const char *dirname;
+{
+ return libintl_bindtextdomain (domainname, dirname);
+}
+
+
+DLL_EXPORTED
+char *
+bind_textdomain_codeset (domainname, codeset)
+ const char *domainname;
+ const char *codeset;
+{
+ return libintl_bind_textdomain_codeset (domainname, codeset);
}
diff --git a/intl/intlh.inst.in b/intl/intlh.inst.in
deleted file mode 100644
index 95e15a8f266c..000000000000
--- a/intl/intlh.inst.in
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Message catalogs for internationalization.
- Copyright (C) 1995, 1996, 1997 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. */
-
-#ifndef _LIBINTL_H
-#define _LIBINTL_H 1
-
-@INCLUDE_LOCALE_H@
-
-/* We define an additional symbol to signal that we use the GNU
- implementation of gettext. */
-#define __USE_GNU_GETTEXT 1
-
-#ifndef PARAMS
-# if __STDC__ || defined __cplusplus
-# define PARAMS(args) args
-# else
-# define PARAMS(args) ()
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Look up MSGID in the current default message catalog for the current
- LC_MESSAGES locale. If not found, returns MSGID itself (the default
- text). */
-extern char *gettext PARAMS ((const char *__msgid));
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current
- LC_MESSAGES locale. */
-extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
- locale. */
-extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
- int __category));
-
-
-/* Set the current default message catalog to DOMAINNAME.
- If DOMAINNAME is null, return the current default.
- If DOMAINNAME is "", reset to the default of "messages". */
-extern char *textdomain PARAMS ((const char *__domainname));
-
-/* Specify that the DOMAINNAME message catalog will be found
- in DIRNAME rather than in the system locale data base. */
-extern char *bindtextdomain PARAMS ((const char *__domainname,
- const char *__dirname));
-
-
-/* Optimized version of the functions above. */
-#if defined __OPTIMIZED
-/* These must be a macro. Inlined functions are useless because the
- `__builtin_constant_p' predicate in dcgettext would always return
- false. */
-
-# define gettext(msgid) dgettext ((char *) 0, msgid)
-
-# define dgettext(domainname, msgid) \
- dcgettext (domainname, msgid, LC_MESSAGES)
-
-# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-/* This global variable is defined in loadmsgcat.c. We need a sign,
- whether a new catalog was loaded, which can be associated with all
- translations. */
-extern int _nl_msg_cat_cntr;
-
-# define dcgettext(domainname, msgid, category) \
- (__extension__ \
- ({ \
- char *__result; \
- if (__builtin_constant_p (msgid)) \
- { \
- static char *__translation__; \
- static int __catalog_counter__; \
- if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \
- { \
- __translation__ = \
- (dcgettext) ((domainname), (msgid), (category)); \
- __catalog_counter__ = _nl_msg_cat_cntr; \
- } \
- __result = __translation__; \
- } \
- else \
- __result = (dcgettext) ((domainname), (msgid), (category)); \
- __result; \
- }))
-# endif
-#endif /* Optimizing. */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* libintl.h */
diff --git a/intl/l10nflist.c b/intl/l10nflist.c
index 3ef93b84733e..e858a991aa23 100644
--- a/intl/l10nflist.c
+++ b/intl/l10nflist.c
@@ -1,52 +1,40 @@
-/* Handle list of needed message catalogs
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
- 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)
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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. */
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for stpcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
-
-#if defined HAVE_STRING_H || defined _LIBC
-# ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-# endif
-# include <string.h>
-#else
-# include <strings.h>
-# ifndef memcpy
-# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
-# endif
-#endif
-#if !HAVE_STRCHR && !defined _LIBC
-# ifndef strchr
-# define strchr index
-# endif
-#endif
+#include <string.h>
#if defined _LIBC || defined HAVE_ARGZ_H
# include <argz.h>
#endif
#include <ctype.h>
#include <sys/types.h>
-
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#endif
+#include <stdlib.h>
#include "loadinfo.h"
@@ -74,6 +62,24 @@ static char *stpcpy PARAMS ((char *dest, const char *src));
# endif
#endif
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
+ it may be concatenated to a directory pathname.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+#endif
+
/* Define function which are usually not available. */
#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
@@ -97,6 +103,10 @@ argz_count__ (argz, len)
}
# undef __argz_count
# define __argz_count(argz, len) argz_count__ (argz, len)
+#else
+# ifdef _LIBC
+# define __argz_count(argz, len) INTUSE(__argz_count) (argz, len)
+# endif
#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
@@ -121,6 +131,11 @@ argz_stringify__ (argz, len, sep)
}
# undef __argz_stringify
# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
+#else
+# ifdef _LIBC
+# define __argz_stringify(argz, len, sep) \
+ INTUSE(__argz_stringify) (argz, len, sep)
+# endif
#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
@@ -188,12 +203,18 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
int do_allocate;
{
char *abs_filename;
- struct loaded_l10nfile *last = NULL;
+ struct loaded_l10nfile **lastp;
struct loaded_l10nfile *retval;
char *cp;
+ size_t dirlist_count;
size_t entries;
int cnt;
+ /* If LANGUAGE contains an absolute directory specification, we ignore
+ DIRLIST. */
+ if (IS_ABSOLUTE_PATH (language))
+ dirlist_len = 0;
+
/* Allocate room for the full file name. */
abs_filename = (char *) malloc (dirlist_len
+ strlen (language)
@@ -211,7 +232,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
+ (((mask & CEN_SPONSOR) != 0
|| (mask & CEN_REVISION) != 0)
? (1 + ((mask & CEN_SPONSOR) != 0
- ? strlen (sponsor) + 1 : 0)
+ ? strlen (sponsor) : 0)
+ ((mask & CEN_REVISION) != 0
? strlen (revision) + 1 : 0)) : 0)
+ 1 + strlen (filename) + 1);
@@ -219,14 +240,16 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
if (abs_filename == NULL)
return NULL;
- retval = NULL;
- last = NULL;
-
/* Construct file name. */
- memcpy (abs_filename, dirlist, dirlist_len);
- __argz_stringify (abs_filename, dirlist_len, ':');
- cp = abs_filename + (dirlist_len - 1);
- *cp++ = '/';
+ cp = abs_filename;
+ if (dirlist_len > 0)
+ {
+ memcpy (cp, dirlist, dirlist_len);
+ __argz_stringify (cp, dirlist_len, PATH_SEPARATOR);
+ cp += dirlist_len;
+ cp[-1] = '/';
+ }
+
cp = stpcpy (cp, language);
if ((mask & TERRITORY) != 0)
@@ -273,7 +296,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
/* Look in list of already loaded domains whether it is already
available. */
- last = NULL;
+ lastp = l10nfile_list;
for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
if (retval->filename != NULL)
{
@@ -288,7 +311,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
break;
}
- last = retval;
+ lastp = &retval->next;
}
if (retval != NULL || do_allocate == 0)
@@ -297,48 +320,66 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
return retval;
}
- retval = (struct loaded_l10nfile *)
- malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
- * (1 << pop (mask))
- * sizeof (struct loaded_l10nfile *)));
+ dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1);
+
+ /* Allocate a new loaded_l10nfile. */
+ retval =
+ (struct loaded_l10nfile *)
+ malloc (sizeof (*retval)
+ + (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0))
+ * sizeof (struct loaded_l10nfile *)));
if (retval == NULL)
return NULL;
retval->filename = abs_filename;
- retval->decided = (__argz_count (dirlist, dirlist_len) != 1
+
+ /* We set retval->data to NULL here; it is filled in later.
+ Setting retval->decided to 1 here means that retval does not
+ correspond to a real file (dirlist_count > 1) or is not worth
+ looking up (if an unnormalized codeset was specified). */
+ retval->decided = (dirlist_count > 1
|| ((mask & XPG_CODESET) != 0
&& (mask & XPG_NORM_CODESET) != 0));
retval->data = NULL;
- if (last == NULL)
- {
- retval->next = *l10nfile_list;
- *l10nfile_list = retval;
- }
- else
- {
- retval->next = last->next;
- last->next = retval;
- }
+ retval->next = *lastp;
+ *lastp = retval;
entries = 0;
- /* If the DIRLIST is a real list the RETVAL entry corresponds not to
- a real file. So we have to use the DIRLIST separation mechanism
- of the inner loop. */
- cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
- for (; cnt >= 0; --cnt)
+ /* Recurse to fill the inheritance list of RETVAL.
+ If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL
+ entry does not correspond to a real file; retval->filename contains
+ colons. In this case we loop across all elements of DIRLIST and
+ across all bit patterns dominated by MASK.
+ If the DIRLIST is a single directory or entirely redundant (i.e.
+ DIRLIST_COUNT == 1), we loop across all bit patterns dominated by
+ MASK, excluding MASK itself.
+ In either case, we loop down from MASK to 0. This has the effect
+ that the extra bits in the locale name are dropped in this order:
+ first the modifier, then the territory, then the codeset, then the
+ normalized_codeset. */
+ for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt)
if ((cnt & ~mask) == 0
&& ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
&& ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
{
- /* Iterate over all elements of the DIRLIST. */
- char *dir = NULL;
-
- while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
- != NULL)
+ if (dirlist_count > 1)
+ {
+ /* Iterate over all elements of the DIRLIST. */
+ char *dir = NULL;
+
+ while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
+ != NULL)
+ retval->successor[entries++]
+ = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1,
+ cnt, language, territory, codeset,
+ normalized_codeset, modifier, special,
+ sponsor, revision, filename, 1);
+ }
+ else
retval->successor[entries++]
- = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
- language, territory, codeset,
+ = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len,
+ cnt, language, territory, codeset,
normalized_codeset, modifier, special,
sponsor, revision, filename, 1);
}
@@ -349,10 +390,11 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
/* Normalize codeset name. There is no standard for the codeset
names. Normalization allows the user to use any of the common
- names. */
+ names. The return value is dynamically allocated and has to be
+ freed by the caller. */
const char *
_nl_normalize_codeset (codeset, name_len)
- const unsigned char *codeset;
+ const char *codeset;
size_t name_len;
{
int len = 0;
@@ -362,11 +404,11 @@ _nl_normalize_codeset (codeset, name_len)
size_t cnt;
for (cnt = 0; cnt < name_len; ++cnt)
- if (isalnum (codeset[cnt]))
+ if (isalnum ((unsigned char) codeset[cnt]))
{
++len;
- if (isalpha (codeset[cnt]))
+ if (isalpha ((unsigned char) codeset[cnt]))
only_digit = 0;
}
@@ -380,9 +422,9 @@ _nl_normalize_codeset (codeset, name_len)
wp = retval;
for (cnt = 0; cnt < name_len; ++cnt)
- if (isalpha (codeset[cnt]))
- *wp++ = tolower (codeset[cnt]);
- else if (isdigit (codeset[cnt]))
+ if (isalpha ((unsigned char) codeset[cnt]))
+ *wp++ = tolower ((unsigned char) codeset[cnt]);
+ else if (isdigit ((unsigned char) codeset[cnt]))
*wp++ = codeset[cnt];
*wp = '\0';
diff --git a/intl/libgettext.h b/intl/libgettext.h
deleted file mode 100644
index f8c224e47f7f..000000000000
--- a/intl/libgettext.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Message catalogs for internationalization.
- Copyright (C) 1995, 1996, 1997, 1998 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. */
-
-/* Because on some systems (e.g. Solaris) we sometimes have to include
- the systems libintl.h as well as this file we have more complex
- include protection above. But the systems header might perhaps also
- define _LIBINTL_H and therefore we have to protect the definition here. */
-
-#if !defined _LIBINTL_H || !defined _LIBGETTEXT_H
-#ifndef _LIBINTL_H
-# define _LIBINTL_H 1
-#endif
-#define _LIBGETTEXT_H 1
-
-/* We define an additional symbol to signal that we use the GNU
- implementation of gettext. */
-#define __USE_GNU_GETTEXT 1
-
-#include <sys/types.h>
-
-#if HAVE_LOCALE_H
-# include <locale.h>
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifndef PARAMS
-# if __STDC__ || defined __cplusplus
-# define PARAMS(args) args
-# else
-# define PARAMS(args) ()
-# endif
-#endif
-
-#ifndef NULL
-# if !defined __cplusplus || defined __GNUC__
-# define NULL ((void *) 0)
-# else
-# define NULL (0)
-# endif
-#endif
-
-#if !HAVE_LC_MESSAGES
-/* This value determines the behaviour of the gettext() and dgettext()
- function. But some system does not have this defined. Define it
- to a default value. */
-# define LC_MESSAGES (-1)
-#endif
-
-
-/* Declarations for gettext-using-catgets interface. Derived from
- Jim Meyering's libintl.h. */
-struct _msg_ent
-{
- const char *_msg;
- int _msg_number;
-};
-
-
-#if HAVE_CATGETS
-/* These two variables are defined in the automatically by po-to-tbl.sed
- generated file `cat-id-tbl.c'. */
-extern const struct _msg_ent _msg_tbl[];
-extern int _msg_tbl_length;
-#endif
-
-
-/* For automatical extraction of messages sometimes no real
- translation is needed. Instead the string itself is the result. */
-#define gettext_noop(Str) (Str)
-
-/* Look up MSGID in the current default message catalog for the current
- LC_MESSAGES locale. If not found, returns MSGID itself (the default
- text). */
-extern char *gettext PARAMS ((const char *__msgid));
-extern char *gettext__ PARAMS ((const char *__msgid));
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current
- LC_MESSAGES locale. */
-extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
-extern char *dgettext__ PARAMS ((const char *__domainname,
- const char *__msgid));
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
- locale. */
-extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
- int __category));
-extern char *dcgettext__ PARAMS ((const char *__domainname,
- const char *__msgid, int __category));
-
-
-/* Set the current default message catalog to DOMAINNAME.
- If DOMAINNAME is null, return the current default.
- If DOMAINNAME is "", reset to the default of "messages". */
-extern char *textdomain PARAMS ((const char *__domainname));
-extern char *textdomain__ PARAMS ((const char *__domainname));
-
-/* Specify that the DOMAINNAME message catalog will be found
- in DIRNAME rather than in the system locale data base. */
-extern char *bindtextdomain PARAMS ((const char *__domainname,
- const char *__dirname));
-extern char *bindtextdomain__ PARAMS ((const char *__domainname,
- const char *__dirname));
-
-#if ENABLE_NLS
-
-/* Solaris 2.3 has the gettext function but dcgettext is missing.
- So we omit this optimization for Solaris 2.3. BTW, Solaris 2.4
- has dcgettext. */
-# if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT)
-
-# define gettext(Msgid) \
- dgettext (NULL, Msgid)
-
-# define dgettext(Domainname, Msgid) \
- dcgettext (Domainname, Msgid, LC_MESSAGES)
-
-# if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7
-/* This global variable is defined in loadmsgcat.c. We need a sign,
- whether a new catalog was loaded, which can be associated with all
- translations. */
-extern int _nl_msg_cat_cntr;
-
-# define dcgettext(Domainname, Msgid, Category) \
- (__extension__ \
- ({ \
- char *__result; \
- if (__builtin_constant_p (Msgid)) \
- { \
- static char *__translation__; \
- static int __catalog_counter__; \
- if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \
- { \
- __translation__ = \
- dcgettext__ (Domainname, Msgid, Category); \
- __catalog_counter__ = _nl_msg_cat_cntr; \
- } \
- __result = __translation__; \
- } \
- else \
- __result = dcgettext__ (Domainname, Msgid, Category); \
- __result; \
- }))
-# endif
-# endif
-
-#else
-
-# define gettext(Msgid) (Msgid)
-# define dgettext(Domainname, Msgid) (Msgid)
-# define dcgettext(Domainname, Msgid, Category) (Msgid)
-# define textdomain(Domainname) ((char *) Domainname)
-# define bindtextdomain(Domainname, Dirname) ((char *) Dirname)
-
-#endif
-
-/* @@ begin of epilog @@ */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/intl/libgnuintl.h b/intl/libgnuintl.h
new file mode 100644
index 000000000000..f6138affb591
--- /dev/null
+++ b/intl/libgnuintl.h
@@ -0,0 +1,309 @@
+/* Message catalogs for internationalization.
+ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ 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 _LIBINTL_H
+#define _LIBINTL_H 1
+
+#include <locale.h>
+
+/* The LC_MESSAGES locale category is the category used by the functions
+ gettext() and dgettext(). It is specified in POSIX, but not in ANSI C.
+ On systems that don't define it, use an arbitrary value instead.
+ On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
+ then includes <libintl.h> (i.e. this file!) and then only defines
+ LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES
+ in this case. */
+#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
+# define LC_MESSAGES 1729
+#endif
+
+/* We define an additional symbol to signal that we use the GNU
+ implementation of gettext. */
+#define __USE_GNU_GETTEXT 1
+
+/* Provide information about the supported file formats. Returns the
+ maximum minor revision number supported for a given major revision. */
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
+ ((major) == 0 ? 1 : -1)
+
+/* Resolve a platform specific conflict on DJGPP. GNU gettext takes
+ precedence over _conio_gettext. */
+#ifdef __DJGPP__
+# undef gettext
+#endif
+
+/* Use _INTL_PARAMS, not PARAMS, in order to avoid clashes with identifiers
+ used by programs. Similarly, test __PROTOTYPES, not PROTOTYPES. */
+#ifndef _INTL_PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+# define _INTL_PARAMS(args) args
+# else
+# define _INTL_PARAMS(args) ()
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* We redirect the functions to those prefixed with "libintl_". This is
+ necessary, because some systems define gettext/textdomain/... in the C
+ library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
+ If we used the unprefixed names, there would be cases where the
+ definition in the C library would override the one in the libintl.so
+ shared library. Recall that on ELF systems, the symbols are looked
+ up in the following order:
+ 1. in the executable,
+ 2. in the shared libraries specified on the link command line, in order,
+ 3. in the dependencies of the shared libraries specified on the link
+ command line,
+ 4. in the dlopen()ed shared libraries, in the order in which they were
+ dlopen()ed.
+ The definition in the C library would override the one in libintl.so if
+ either
+ * -lc is given on the link command line and -lintl isn't, or
+ * -lc is given on the link command line before -lintl, or
+ * libintl.so is a dependency of a dlopen()ed shared library but not
+ linked to the executable at link time.
+ Since Solaris gettext() behaves differently than GNU gettext(), this
+ would be unacceptable.
+
+ The redirection happens by default through macros in C, so that &gettext
+ is independent of the compilation unit, but through inline functions in
+ C++, in order not to interfere with the name mangling of class fields or
+ class methods called 'gettext'. */
+
+/* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
+ If he doesn't, we choose the method. A third possible method is
+ _INTL_REDIRECT_ASM, supported only by GCC. */
+#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
+# if __GNUC__ >= 2 && !defined __APPLE_CC__ && (defined __STDC__ || defined __cplusplus)
+# define _INTL_REDIRECT_ASM
+# else
+# ifdef __cplusplus
+# define _INTL_REDIRECT_INLINE
+# else
+# define _INTL_REDIRECT_MACROS
+# endif
+# endif
+#endif
+/* Auxiliary macros. */
+#ifdef _INTL_REDIRECT_ASM
+# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
+# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
+# define _INTL_STRINGIFY(prefix) #prefix
+#else
+# define _INTL_ASM(cname)
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_gettext (const char *__msgid);
+static inline char *gettext (const char *__msgid)
+{
+ return libintl_gettext (__msgid);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define gettext libintl_gettext
+#endif
+extern char *gettext _INTL_PARAMS ((const char *__msgid))
+ _INTL_ASM (libintl_gettext);
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+ LC_MESSAGES locale. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dgettext (const char *__domainname, const char *__msgid);
+static inline char *dgettext (const char *__domainname, const char *__msgid)
+{
+ return libintl_dgettext (__domainname, __msgid);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dgettext libintl_dgettext
+#endif
+extern char *dgettext _INTL_PARAMS ((const char *__domainname,
+ const char *__msgid))
+ _INTL_ASM (libintl_dgettext);
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
+ int __category);
+static inline char *dcgettext (const char *__domainname, const char *__msgid,
+ int __category)
+{
+ return libintl_dcgettext (__domainname, __msgid, __category);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dcgettext libintl_dcgettext
+#endif
+extern char *dcgettext _INTL_PARAMS ((const char *__domainname,
+ const char *__msgid,
+ int __category))
+ _INTL_ASM (libintl_dcgettext);
+#endif
+
+
+/* Similar to `gettext' but select the plural form corresponding to the
+ number N. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n);
+static inline char *ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n)
+{
+ return libintl_ngettext (__msgid1, __msgid2, __n);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define ngettext libintl_ngettext
+#endif
+extern char *ngettext _INTL_PARAMS ((const char *__msgid1,
+ const char *__msgid2,
+ unsigned long int __n))
+ _INTL_ASM (libintl_ngettext);
+#endif
+
+/* Similar to `dgettext' but select the plural form corresponding to the
+ number N. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
+ const char *__msgid2, unsigned long int __n);
+static inline char *dngettext (const char *__domainname, const char *__msgid1,
+ const char *__msgid2, unsigned long int __n)
+{
+ return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dngettext libintl_dngettext
+#endif
+extern char *dngettext _INTL_PARAMS ((const char *__domainname,
+ const char *__msgid1,
+ const char *__msgid2,
+ unsigned long int __n))
+ _INTL_ASM (libintl_dngettext);
+#endif
+
+/* Similar to `dcgettext' but select the plural form corresponding to the
+ number N. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dcngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category);
+static inline char *dcngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category)
+{
+ return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dcngettext libintl_dcngettext
+#endif
+extern char *dcngettext _INTL_PARAMS ((const char *__domainname,
+ const char *__msgid1,
+ const char *__msgid2,
+ unsigned long int __n,
+ int __category))
+ _INTL_ASM (libintl_dcngettext);
+#endif
+
+
+/* Set the current default message catalog to DOMAINNAME.
+ If DOMAINNAME is null, return the current default.
+ If DOMAINNAME is "", reset to the default of "messages". */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_textdomain (const char *__domainname);
+static inline char *textdomain (const char *__domainname)
+{
+ return libintl_textdomain (__domainname);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define textdomain libintl_textdomain
+#endif
+extern char *textdomain _INTL_PARAMS ((const char *__domainname))
+ _INTL_ASM (libintl_textdomain);
+#endif
+
+/* Specify that the DOMAINNAME message catalog will be found
+ in DIRNAME rather than in the system locale data base. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bindtextdomain (const char *__domainname,
+ const char *__dirname);
+static inline char *bindtextdomain (const char *__domainname,
+ const char *__dirname)
+{
+ return libintl_bindtextdomain (__domainname, __dirname);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bindtextdomain libintl_bindtextdomain
+#endif
+extern char *bindtextdomain _INTL_PARAMS ((const char *__domainname,
+ const char *__dirname))
+ _INTL_ASM (libintl_bindtextdomain);
+#endif
+
+/* Specify the character encoding in which the messages from the
+ DOMAINNAME message catalog will be returned. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset);
+static inline char *bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset)
+{
+ return libintl_bind_textdomain_codeset (__domainname, __codeset);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bind_textdomain_codeset libintl_bind_textdomain_codeset
+#endif
+extern char *bind_textdomain_codeset _INTL_PARAMS ((const char *__domainname,
+ const char *__codeset))
+ _INTL_ASM (libintl_bind_textdomain_codeset);
+#endif
+
+
+/* Support for relocatable packages. */
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+#define libintl_set_relocation_prefix libintl_set_relocation_prefix
+extern void
+ libintl_set_relocation_prefix _INTL_PARAMS ((const char *orig_prefix,
+ const char *curr_prefix));
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* libintl.h */
diff --git a/intl/libintl.glibc b/intl/libintl.glibc
deleted file mode 100644
index c55b447678b9..000000000000
--- a/intl/libintl.glibc
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Message catalogs for internationalization.
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
- Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
- This file is derived from the file libgettext.h in the GNU gettext package.
-
- This file is part of the GNU C Library. Its master source is NOT part of
- the C library, however.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-#ifndef _LIBINTL_H
-#define _LIBINTL_H 1
-
-#include <features.h>
-
-/* We define an additional symbol to signal that we use the GNU
- implementation of gettext. */
-#define __USE_GNU_GETTEXT 1
-
-__BEGIN_DECLS
-
-/* Look up MSGID in the current default message catalog for the current
- LC_MESSAGES locale. If not found, returns MSGID itself (the default
- text). */
-extern char *gettext __P ((__const char *__msgid));
-extern char *__gettext __P ((__const char *__msgid));
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current
- LC_MESSAGES locale. */
-extern char *dgettext __P ((__const char *__domainname,
- __const char *__msgid));
-extern char *__dgettext __P ((__const char *__domainname,
- __const char *__msgid));
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
- locale. */
-extern char *dcgettext __P ((__const char *__domainname,
- __const char *__msgid, int __category));
-extern char *__dcgettext __P ((__const char *__domainname,
- __const char *__msgid, int __category));
-
-
-/* Set the current default message catalog to DOMAINNAME.
- If DOMAINNAME is null, return the current default.
- If DOMAINNAME is "", reset to the default of "messages". */
-extern char *textdomain __P ((__const char *__domainname));
-extern char *__textdomain __P ((__const char *__domainname));
-
-/* Specify that the DOMAINNAME message catalog will be found
- in DIRNAME rather than in the system locale data base. */
-extern char *bindtextdomain __P ((__const char *__domainname,
- __const char *__dirname));
-extern char *__bindtextdomain __P ((__const char *__domainname,
- __const char *__dirname));
-
-
-/* Optimized version of the function above. */
-#if defined __OPTIMIZE__
-
-/* We need NULL for `gettext'. */
-# define __need_NULL
-# include <stddef.h>
-
-/* We need LC_MESSAGES for `dgettext'. */
-# include <locale.h>
-
-/* These must be macros. Inlined functions are useless because the
- `__builtin_constant_p' predicate in dcgettext would always return
- false. */
-
-# define gettext(msgid) dgettext (NULL, msgid)
-
-# define dgettext(domainname, msgid) \
- dcgettext (domainname, msgid, LC_MESSAGES)
-
-# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-/* Variable defined in loadmsgcat.c which gets incremented every time a
- new catalog is loaded. */
-extern int _nl_msg_cat_cntr;
-
-# define dcgettext(domainname, msgid, category) \
- (__extension__ \
- ({ \
- char *__result; \
- if (__builtin_constant_p (msgid)) \
- { \
- static char *__translation__; \
- static int __catalog_counter__; \
- if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \
- { \
- __translation__ = \
- __dcgettext ((domainname), (msgid), (category)); \
- __catalog_counter__ = _nl_msg_cat_cntr; \
- } \
- __result = __translation__; \
- } \
- else \
- __result = __dcgettext ((domainname), (msgid), (category)); \
- __result; \
- }))
-# endif
-#endif /* Optimizing. */
-
-
-__END_DECLS
-
-#endif /* libintl.h */
diff --git a/intl/linux-msg.sed b/intl/linux-msg.sed
deleted file mode 100644
index f9b8188d7831..000000000000
--- a/intl/linux-msg.sed
+++ /dev/null
@@ -1,100 +0,0 @@
-# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file
-# Copyright 1995, 2002 Free Software Foundation, Inc.
-# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
-#
-# 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.
-#
-#
-# The first directive in the .msg should be the definition of the
-# message set number. We use always set number 1.
-#
-1 {
- i\
-$set 1 # Automatically created by po2msg.sed
- h
- s/.*/0/
- x
-}
-#
-# Mitch's old catalog format does not allow comments.
-#
-# We copy the original message as a comment into the .msg file.
-#
-/^msgid/ {
- s/msgid[ ]*"//
-#
-# This does not work now with the new format.
-# /"$/! {
-# s/\\$//
-# s/$/ ... (more lines following)"/
-# }
- x
-# The following nice solution is by
-# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
- td
-# Increment a decimal number in pattern space.
-# First hide trailing `9' digits.
- :d
- s/9\(_*\)$/_\1/
- td
-# Assure at least one digit is available.
- s/^\(_*\)$/0\1/
-# Increment the last digit.
- s/8\(_*\)$/9\1/
- s/7\(_*\)$/8\1/
- s/6\(_*\)$/7\1/
- s/5\(_*\)$/6\1/
- s/4\(_*\)$/5\1/
- s/3\(_*\)$/4\1/
- s/2\(_*\)$/3\1/
- s/1\(_*\)$/2\1/
- s/0\(_*\)$/1\1/
-# Convert the hidden `9' digits to `0's.
- s/_/0/g
- x
- G
- s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p
-}
-#
-# The .msg file contains, other than the .po file, only the translations
-# but each given a unique ID. Starting from 1 and incrementing by 1 for
-# each message we assign them to the messages.
-# It is important that the .po file used to generate the cat-id-tbl.c file
-# (with po-to-tbl) is the same as the one used here. (At least the order
-# of declarations must not be changed.)
-#
-/^msgstr/ {
- s/msgstr[ ]*"\(.*\)"/# \1/
-# Clear substitution flag.
- tb
-# Append the next line.
- :b
- N
-# Look whether second part is continuation line.
- s/\(.*\n\)"\(.*\)"/\1\2/
-# Yes, then branch.
- ta
- P
- D
-# Note that D includes a jump to the start!!
-# We found a continuation line. But before printing insert '\'.
- :a
- s/\(.*\)\(\n.*\)/\1\\\2/
- P
-# We cannot use D here.
- s/.*\n\(.*\)/\1/
- tb
-}
-d
diff --git a/intl/loadinfo.h b/intl/loadinfo.h
index b797c0c5baea..5ad5fba76bd0 100644
--- a/intl/loadinfo.h
+++ b/intl/loadinfo.h
@@ -1,29 +1,64 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996-1999, 2000-2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
- 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)
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU Library General Public
+ 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 _LOADINFO_H
+#define _LOADINFO_H 1
+
+/* Declarations of locale dependent catalog lookup functions.
+ Implemented in
+
+ localealias.c Possibly replace a locale name by another.
+ explodename.c Split a locale name into its various fields.
+ l10nflist.c Generate a list of filenames of possible message catalogs.
+ finddomain.c Find and open the relevant message catalogs.
+
+ The main function _nl_find_domain() in finddomain.c is declared
+ in gettextP.h.
+ */
#ifndef PARAMS
-# if __STDC__
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
# define PARAMS(args) args
# else
# define PARAMS(args) ()
# endif
#endif
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+ almost always true or almost always false. */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+/* Separator in PATH like lists of pathnames. */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define PATH_SEPARATOR ';'
+#else
+ /* Unix */
+# define PATH_SEPARATOR ':'
+#endif
+
/* Encoding of locale name parts. */
#define CEN_REVISION 1
#define CEN_SPONSOR 2
@@ -50,9 +85,27 @@ struct loaded_l10nfile
};
-extern const char *_nl_normalize_codeset PARAMS ((const unsigned char *codeset,
+/* Normalize codeset name. There is no standard for the codeset
+ names. Normalization allows the user to use any of the common
+ names. The return value is dynamically allocated and has to be
+ freed by the caller. */
+extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
size_t name_len));
+/* Lookup a locale dependent file.
+ *L10NFILE_LIST denotes a pool of lookup results of locale dependent
+ files of the same kind, sorted in decreasing order of ->filename.
+ DIRLIST and DIRLIST_LEN are an argz list of directories in which to
+ look, containing at least one directory (i.e. DIRLIST_LEN > 0).
+ MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER,
+ SPECIAL, SPONSOR, REVISION are the pieces of the locale name, as
+ produced by _nl_explode_name(). FILENAME is the filename suffix.
+ The return value is the lookup result, either found in *L10NFILE_LIST,
+ or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL.
+ If the return value is non-NULL, it is added to *L10NFILE_LIST, and
+ its ->next field denotes the chaining inside *L10NFILE_LIST, and
+ furthermore its ->successor[] field contains a list of other lookup
+ results from which this lookup result inherits. */
extern struct loaded_l10nfile *
_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
const char *dirlist, size_t dirlist_len, int mask,
@@ -63,9 +116,29 @@ _nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
const char *sponsor, const char *revision,
const char *filename, int do_allocate));
-
+/* Lookup the real locale name for a locale alias NAME, or NULL if
+ NAME is not a locale alias (but possibly a real locale name).
+ The return value is statically allocated and must not be freed. */
extern const char *_nl_expand_alias PARAMS ((const char *name));
+/* Split a locale name NAME into its pieces: language, modifier,
+ territory, codeset, special, sponsor, revision.
+ NAME gets destructively modified: NUL bytes are inserted here and
+ there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY,
+ *CODESET, *SPECIAL, *SPONSOR, *REVISION gets assigned either a
+ pointer into the old NAME string, or NULL. *NORMALIZED_CODESET
+ gets assigned the expanded *CODESET, if it is different from *CODESET;
+ this one is dynamically allocated and has to be freed by the caller.
+ The return value is a bitmask, where each bit corresponds to one
+ filled-in value:
+ XPG_MODIFIER, CEN_AUDIENCE for *MODIFIER,
+ TERRITORY for *TERRITORY,
+ XPG_CODESET for *CODESET,
+ XPG_NORM_CODESET for *NORMALIZED_CODESET,
+ CEN_SPECIAL for *SPECIAL,
+ CEN_SPONSOR for *SPONSOR,
+ CEN_REVISION for *REVISION.
+ */
extern int _nl_explode_name PARAMS ((char *name, const char **language,
const char **modifier,
const char **territory,
@@ -74,3 +147,10 @@ extern int _nl_explode_name PARAMS ((char *name, const char **language,
const char **special,
const char **sponsor,
const char **revision));
+
+/* Split a locale name NAME into a leading language part and all the
+ rest. Return a pointer to the first character after the language,
+ i.e. to the first byte of the rest. */
+extern char *_nl_find_language PARAMS ((const char *name));
+
+#endif /* loadinfo.h */
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
index ab11bc95d5cc..536ee12621da 100644
--- a/intl/loadmsgcat.c
+++ b/intl/loadmsgcat.c
@@ -1,42 +1,455 @@
/* Load needed message catalogs.
- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1995-1999, 2000-2003 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)
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
+#include <ctype.h>
+#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
+#ifdef __GNUC__
+# undef alloca
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
#endif
+#include <stdlib.h>
+#include <string.h>
+
#if defined HAVE_UNISTD_H || defined _LIBC
# include <unistd.h>
#endif
-#if (defined HAVE_MMAP && defined HAVE_MUNMAP) || defined _LIBC
+#ifdef _LIBC
+# include <langinfo.h>
+# include <locale.h>
+#endif
+
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+ || (defined _LIBC && defined _POSIX_MAPPED_FILES)
# include <sys/mman.h>
+# undef HAVE_MMAP
+# define HAVE_MMAP 1
+#else
+# undef HAVE_MMAP
#endif
-#include "gettext.h"
+#if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC
+# include <stdint.h>
+#endif
+#if defined HAVE_INTTYPES_H || defined _LIBC
+# include <inttypes.h>
+#endif
+
+#include "gmo.h"
#include "gettextP.h"
+#include "hash-string.h"
+#include "plural-exp.h"
+
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+#endif
+
+/* Provide fallback values for macros that ought to be defined in <inttypes.h>.
+ Note that our fallback values need not be literal strings, because we don't
+ use them with preprocessor string concatenation. */
+#if !defined PRId8 || PRI_MACROS_BROKEN
+# undef PRId8
+# define PRId8 "d"
+#endif
+#if !defined PRIi8 || PRI_MACROS_BROKEN
+# undef PRIi8
+# define PRIi8 "i"
+#endif
+#if !defined PRIo8 || PRI_MACROS_BROKEN
+# undef PRIo8
+# define PRIo8 "o"
+#endif
+#if !defined PRIu8 || PRI_MACROS_BROKEN
+# undef PRIu8
+# define PRIu8 "u"
+#endif
+#if !defined PRIx8 || PRI_MACROS_BROKEN
+# undef PRIx8
+# define PRIx8 "x"
+#endif
+#if !defined PRIX8 || PRI_MACROS_BROKEN
+# undef PRIX8
+# define PRIX8 "X"
+#endif
+#if !defined PRId16 || PRI_MACROS_BROKEN
+# undef PRId16
+# define PRId16 "d"
+#endif
+#if !defined PRIi16 || PRI_MACROS_BROKEN
+# undef PRIi16
+# define PRIi16 "i"
+#endif
+#if !defined PRIo16 || PRI_MACROS_BROKEN
+# undef PRIo16
+# define PRIo16 "o"
+#endif
+#if !defined PRIu16 || PRI_MACROS_BROKEN
+# undef PRIu16
+# define PRIu16 "u"
+#endif
+#if !defined PRIx16 || PRI_MACROS_BROKEN
+# undef PRIx16
+# define PRIx16 "x"
+#endif
+#if !defined PRIX16 || PRI_MACROS_BROKEN
+# undef PRIX16
+# define PRIX16 "X"
+#endif
+#if !defined PRId32 || PRI_MACROS_BROKEN
+# undef PRId32
+# define PRId32 "d"
+#endif
+#if !defined PRIi32 || PRI_MACROS_BROKEN
+# undef PRIi32
+# define PRIi32 "i"
+#endif
+#if !defined PRIo32 || PRI_MACROS_BROKEN
+# undef PRIo32
+# define PRIo32 "o"
+#endif
+#if !defined PRIu32 || PRI_MACROS_BROKEN
+# undef PRIu32
+# define PRIu32 "u"
+#endif
+#if !defined PRIx32 || PRI_MACROS_BROKEN
+# undef PRIx32
+# define PRIx32 "x"
+#endif
+#if !defined PRIX32 || PRI_MACROS_BROKEN
+# undef PRIX32
+# define PRIX32 "X"
+#endif
+#if !defined PRId64 || PRI_MACROS_BROKEN
+# undef PRId64
+# define PRId64 (sizeof (long) == 8 ? "ld" : "lld")
+#endif
+#if !defined PRIi64 || PRI_MACROS_BROKEN
+# undef PRIi64
+# define PRIi64 (sizeof (long) == 8 ? "li" : "lli")
+#endif
+#if !defined PRIo64 || PRI_MACROS_BROKEN
+# undef PRIo64
+# define PRIo64 (sizeof (long) == 8 ? "lo" : "llo")
+#endif
+#if !defined PRIu64 || PRI_MACROS_BROKEN
+# undef PRIu64
+# define PRIu64 (sizeof (long) == 8 ? "lu" : "llu")
+#endif
+#if !defined PRIx64 || PRI_MACROS_BROKEN
+# undef PRIx64
+# define PRIx64 (sizeof (long) == 8 ? "lx" : "llx")
+#endif
+#if !defined PRIX64 || PRI_MACROS_BROKEN
+# undef PRIX64
+# define PRIX64 (sizeof (long) == 8 ? "lX" : "llX")
+#endif
+#if !defined PRIdLEAST8 || PRI_MACROS_BROKEN
+# undef PRIdLEAST8
+# define PRIdLEAST8 "d"
+#endif
+#if !defined PRIiLEAST8 || PRI_MACROS_BROKEN
+# undef PRIiLEAST8
+# define PRIiLEAST8 "i"
+#endif
+#if !defined PRIoLEAST8 || PRI_MACROS_BROKEN
+# undef PRIoLEAST8
+# define PRIoLEAST8 "o"
+#endif
+#if !defined PRIuLEAST8 || PRI_MACROS_BROKEN
+# undef PRIuLEAST8
+# define PRIuLEAST8 "u"
+#endif
+#if !defined PRIxLEAST8 || PRI_MACROS_BROKEN
+# undef PRIxLEAST8
+# define PRIxLEAST8 "x"
+#endif
+#if !defined PRIXLEAST8 || PRI_MACROS_BROKEN
+# undef PRIXLEAST8
+# define PRIXLEAST8 "X"
+#endif
+#if !defined PRIdLEAST16 || PRI_MACROS_BROKEN
+# undef PRIdLEAST16
+# define PRIdLEAST16 "d"
+#endif
+#if !defined PRIiLEAST16 || PRI_MACROS_BROKEN
+# undef PRIiLEAST16
+# define PRIiLEAST16 "i"
+#endif
+#if !defined PRIoLEAST16 || PRI_MACROS_BROKEN
+# undef PRIoLEAST16
+# define PRIoLEAST16 "o"
+#endif
+#if !defined PRIuLEAST16 || PRI_MACROS_BROKEN
+# undef PRIuLEAST16
+# define PRIuLEAST16 "u"
+#endif
+#if !defined PRIxLEAST16 || PRI_MACROS_BROKEN
+# undef PRIxLEAST16
+# define PRIxLEAST16 "x"
+#endif
+#if !defined PRIXLEAST16 || PRI_MACROS_BROKEN
+# undef PRIXLEAST16
+# define PRIXLEAST16 "X"
+#endif
+#if !defined PRIdLEAST32 || PRI_MACROS_BROKEN
+# undef PRIdLEAST32
+# define PRIdLEAST32 "d"
+#endif
+#if !defined PRIiLEAST32 || PRI_MACROS_BROKEN
+# undef PRIiLEAST32
+# define PRIiLEAST32 "i"
+#endif
+#if !defined PRIoLEAST32 || PRI_MACROS_BROKEN
+# undef PRIoLEAST32
+# define PRIoLEAST32 "o"
+#endif
+#if !defined PRIuLEAST32 || PRI_MACROS_BROKEN
+# undef PRIuLEAST32
+# define PRIuLEAST32 "u"
+#endif
+#if !defined PRIxLEAST32 || PRI_MACROS_BROKEN
+# undef PRIxLEAST32
+# define PRIxLEAST32 "x"
+#endif
+#if !defined PRIXLEAST32 || PRI_MACROS_BROKEN
+# undef PRIXLEAST32
+# define PRIXLEAST32 "X"
+#endif
+#if !defined PRIdLEAST64 || PRI_MACROS_BROKEN
+# undef PRIdLEAST64
+# define PRIdLEAST64 PRId64
+#endif
+#if !defined PRIiLEAST64 || PRI_MACROS_BROKEN
+# undef PRIiLEAST64
+# define PRIiLEAST64 PRIi64
+#endif
+#if !defined PRIoLEAST64 || PRI_MACROS_BROKEN
+# undef PRIoLEAST64
+# define PRIoLEAST64 PRIo64
+#endif
+#if !defined PRIuLEAST64 || PRI_MACROS_BROKEN
+# undef PRIuLEAST64
+# define PRIuLEAST64 PRIu64
+#endif
+#if !defined PRIxLEAST64 || PRI_MACROS_BROKEN
+# undef PRIxLEAST64
+# define PRIxLEAST64 PRIx64
+#endif
+#if !defined PRIXLEAST64 || PRI_MACROS_BROKEN
+# undef PRIXLEAST64
+# define PRIXLEAST64 PRIX64
+#endif
+#if !defined PRIdFAST8 || PRI_MACROS_BROKEN
+# undef PRIdFAST8
+# define PRIdFAST8 "d"
+#endif
+#if !defined PRIiFAST8 || PRI_MACROS_BROKEN
+# undef PRIiFAST8
+# define PRIiFAST8 "i"
+#endif
+#if !defined PRIoFAST8 || PRI_MACROS_BROKEN
+# undef PRIoFAST8
+# define PRIoFAST8 "o"
+#endif
+#if !defined PRIuFAST8 || PRI_MACROS_BROKEN
+# undef PRIuFAST8
+# define PRIuFAST8 "u"
+#endif
+#if !defined PRIxFAST8 || PRI_MACROS_BROKEN
+# undef PRIxFAST8
+# define PRIxFAST8 "x"
+#endif
+#if !defined PRIXFAST8 || PRI_MACROS_BROKEN
+# undef PRIXFAST8
+# define PRIXFAST8 "X"
+#endif
+#if !defined PRIdFAST16 || PRI_MACROS_BROKEN
+# undef PRIdFAST16
+# define PRIdFAST16 "d"
+#endif
+#if !defined PRIiFAST16 || PRI_MACROS_BROKEN
+# undef PRIiFAST16
+# define PRIiFAST16 "i"
+#endif
+#if !defined PRIoFAST16 || PRI_MACROS_BROKEN
+# undef PRIoFAST16
+# define PRIoFAST16 "o"
+#endif
+#if !defined PRIuFAST16 || PRI_MACROS_BROKEN
+# undef PRIuFAST16
+# define PRIuFAST16 "u"
+#endif
+#if !defined PRIxFAST16 || PRI_MACROS_BROKEN
+# undef PRIxFAST16
+# define PRIxFAST16 "x"
+#endif
+#if !defined PRIXFAST16 || PRI_MACROS_BROKEN
+# undef PRIXFAST16
+# define PRIXFAST16 "X"
+#endif
+#if !defined PRIdFAST32 || PRI_MACROS_BROKEN
+# undef PRIdFAST32
+# define PRIdFAST32 "d"
+#endif
+#if !defined PRIiFAST32 || PRI_MACROS_BROKEN
+# undef PRIiFAST32
+# define PRIiFAST32 "i"
+#endif
+#if !defined PRIoFAST32 || PRI_MACROS_BROKEN
+# undef PRIoFAST32
+# define PRIoFAST32 "o"
+#endif
+#if !defined PRIuFAST32 || PRI_MACROS_BROKEN
+# undef PRIuFAST32
+# define PRIuFAST32 "u"
+#endif
+#if !defined PRIxFAST32 || PRI_MACROS_BROKEN
+# undef PRIxFAST32
+# define PRIxFAST32 "x"
+#endif
+#if !defined PRIXFAST32 || PRI_MACROS_BROKEN
+# undef PRIXFAST32
+# define PRIXFAST32 "X"
+#endif
+#if !defined PRIdFAST64 || PRI_MACROS_BROKEN
+# undef PRIdFAST64
+# define PRIdFAST64 PRId64
+#endif
+#if !defined PRIiFAST64 || PRI_MACROS_BROKEN
+# undef PRIiFAST64
+# define PRIiFAST64 PRIi64
+#endif
+#if !defined PRIoFAST64 || PRI_MACROS_BROKEN
+# undef PRIoFAST64
+# define PRIoFAST64 PRIo64
+#endif
+#if !defined PRIuFAST64 || PRI_MACROS_BROKEN
+# undef PRIuFAST64
+# define PRIuFAST64 PRIu64
+#endif
+#if !defined PRIxFAST64 || PRI_MACROS_BROKEN
+# undef PRIxFAST64
+# define PRIxFAST64 PRIx64
+#endif
+#if !defined PRIXFAST64 || PRI_MACROS_BROKEN
+# undef PRIXFAST64
+# define PRIXFAST64 PRIX64
+#endif
+#if !defined PRIdMAX || PRI_MACROS_BROKEN
+# undef PRIdMAX
+# define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld")
+#endif
+#if !defined PRIiMAX || PRI_MACROS_BROKEN
+# undef PRIiMAX
+# define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli")
+#endif
+#if !defined PRIoMAX || PRI_MACROS_BROKEN
+# undef PRIoMAX
+# define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo")
+#endif
+#if !defined PRIuMAX || PRI_MACROS_BROKEN
+# undef PRIuMAX
+# define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu")
+#endif
+#if !defined PRIxMAX || PRI_MACROS_BROKEN
+# undef PRIxMAX
+# define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx")
+#endif
+#if !defined PRIXMAX || PRI_MACROS_BROKEN
+# undef PRIXMAX
+# define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX")
+#endif
+#if !defined PRIdPTR || PRI_MACROS_BROKEN
+# undef PRIdPTR
+# define PRIdPTR \
+ (sizeof (void *) == sizeof (long) ? "ld" : \
+ sizeof (void *) == sizeof (int) ? "d" : \
+ "lld")
+#endif
+#if !defined PRIiPTR || PRI_MACROS_BROKEN
+# undef PRIiPTR
+# define PRIiPTR \
+ (sizeof (void *) == sizeof (long) ? "li" : \
+ sizeof (void *) == sizeof (int) ? "i" : \
+ "lli")
+#endif
+#if !defined PRIoPTR || PRI_MACROS_BROKEN
+# undef PRIoPTR
+# define PRIoPTR \
+ (sizeof (void *) == sizeof (long) ? "lo" : \
+ sizeof (void *) == sizeof (int) ? "o" : \
+ "llo")
+#endif
+#if !defined PRIuPTR || PRI_MACROS_BROKEN
+# undef PRIuPTR
+# define PRIuPTR \
+ (sizeof (void *) == sizeof (long) ? "lu" : \
+ sizeof (void *) == sizeof (int) ? "u" : \
+ "llu")
+#endif
+#if !defined PRIxPTR || PRI_MACROS_BROKEN
+# undef PRIxPTR
+# define PRIxPTR \
+ (sizeof (void *) == sizeof (long) ? "lx" : \
+ sizeof (void *) == sizeof (int) ? "x" : \
+ "llx")
+#endif
+#if !defined PRIXPTR || PRI_MACROS_BROKEN
+# undef PRIXPTR
+# define PRIXPTR \
+ (sizeof (void *) == sizeof (long) ? "lX" : \
+ sizeof (void *) == sizeof (int) ? "X" : \
+ "llX")
+#endif
/* @@ end of prolog @@ */
@@ -51,32 +464,468 @@
# define munmap __munmap
#endif
+/* For those losing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+/* For systems that distinguish between text and binary I/O.
+ O_BINARY is usually declared in <fcntl.h>. */
+#if !defined O_BINARY && defined _O_BINARY
+ /* For MSC-compatible compilers. */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+#ifdef __BEOS__
+ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+/* On reasonable systems, binary I/O is the default. */
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+
+/* Prototypes for local functions. Needed to ensure compiler checking of
+ function argument counts despite of K&R C function definition syntax. */
+static const char *get_sysdep_segment_value PARAMS ((const char *name));
+
+
/* We need a sign, whether a new catalog was loaded, which can be associated
with all translations. This is important if the translations are
cached by one of GCC's features. */
-int _nl_msg_cat_cntr = 0;
+int _nl_msg_cat_cntr;
+
+
+/* Expand a system dependent string segment. Return NULL if unsupported. */
+static const char *
+get_sysdep_segment_value (name)
+ const char *name;
+{
+ /* Test for an ISO C 99 section 7.8.1 format string directive.
+ Syntax:
+ P R I { d | i | o | u | x | X }
+ { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR } */
+ /* We don't use a table of 14 times 6 'const char *' strings here, because
+ data relocations cost startup time. */
+ if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I')
+ {
+ if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u'
+ || name[3] == 'x' || name[3] == 'X')
+ {
+ if (name[4] == '8' && name[5] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId8;
+ if (name[3] == 'i')
+ return PRIi8;
+ if (name[3] == 'o')
+ return PRIo8;
+ if (name[3] == 'u')
+ return PRIu8;
+ if (name[3] == 'x')
+ return PRIx8;
+ if (name[3] == 'X')
+ return PRIX8;
+ abort ();
+ }
+ if (name[4] == '1' && name[5] == '6' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId16;
+ if (name[3] == 'i')
+ return PRIi16;
+ if (name[3] == 'o')
+ return PRIo16;
+ if (name[3] == 'u')
+ return PRIu16;
+ if (name[3] == 'x')
+ return PRIx16;
+ if (name[3] == 'X')
+ return PRIX16;
+ abort ();
+ }
+ if (name[4] == '3' && name[5] == '2' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId32;
+ if (name[3] == 'i')
+ return PRIi32;
+ if (name[3] == 'o')
+ return PRIo32;
+ if (name[3] == 'u')
+ return PRIu32;
+ if (name[3] == 'x')
+ return PRIx32;
+ if (name[3] == 'X')
+ return PRIX32;
+ abort ();
+ }
+ if (name[4] == '6' && name[5] == '4' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId64;
+ if (name[3] == 'i')
+ return PRIi64;
+ if (name[3] == 'o')
+ return PRIo64;
+ if (name[3] == 'u')
+ return PRIu64;
+ if (name[3] == 'x')
+ return PRIx64;
+ if (name[3] == 'X')
+ return PRIX64;
+ abort ();
+ }
+ if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A'
+ && name[7] == 'S' && name[8] == 'T')
+ {
+ if (name[9] == '8' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST8;
+ if (name[3] == 'i')
+ return PRIiLEAST8;
+ if (name[3] == 'o')
+ return PRIoLEAST8;
+ if (name[3] == 'u')
+ return PRIuLEAST8;
+ if (name[3] == 'x')
+ return PRIxLEAST8;
+ if (name[3] == 'X')
+ return PRIXLEAST8;
+ abort ();
+ }
+ if (name[9] == '1' && name[10] == '6' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST16;
+ if (name[3] == 'i')
+ return PRIiLEAST16;
+ if (name[3] == 'o')
+ return PRIoLEAST16;
+ if (name[3] == 'u')
+ return PRIuLEAST16;
+ if (name[3] == 'x')
+ return PRIxLEAST16;
+ if (name[3] == 'X')
+ return PRIXLEAST16;
+ abort ();
+ }
+ if (name[9] == '3' && name[10] == '2' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST32;
+ if (name[3] == 'i')
+ return PRIiLEAST32;
+ if (name[3] == 'o')
+ return PRIoLEAST32;
+ if (name[3] == 'u')
+ return PRIuLEAST32;
+ if (name[3] == 'x')
+ return PRIxLEAST32;
+ if (name[3] == 'X')
+ return PRIXLEAST32;
+ abort ();
+ }
+ if (name[9] == '6' && name[10] == '4' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST64;
+ if (name[3] == 'i')
+ return PRIiLEAST64;
+ if (name[3] == 'o')
+ return PRIoLEAST64;
+ if (name[3] == 'u')
+ return PRIuLEAST64;
+ if (name[3] == 'x')
+ return PRIxLEAST64;
+ if (name[3] == 'X')
+ return PRIXLEAST64;
+ abort ();
+ }
+ }
+ if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S'
+ && name[7] == 'T')
+ {
+ if (name[8] == '8' && name[9] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST8;
+ if (name[3] == 'i')
+ return PRIiFAST8;
+ if (name[3] == 'o')
+ return PRIoFAST8;
+ if (name[3] == 'u')
+ return PRIuFAST8;
+ if (name[3] == 'x')
+ return PRIxFAST8;
+ if (name[3] == 'X')
+ return PRIXFAST8;
+ abort ();
+ }
+ if (name[8] == '1' && name[9] == '6' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST16;
+ if (name[3] == 'i')
+ return PRIiFAST16;
+ if (name[3] == 'o')
+ return PRIoFAST16;
+ if (name[3] == 'u')
+ return PRIuFAST16;
+ if (name[3] == 'x')
+ return PRIxFAST16;
+ if (name[3] == 'X')
+ return PRIXFAST16;
+ abort ();
+ }
+ if (name[8] == '3' && name[9] == '2' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST32;
+ if (name[3] == 'i')
+ return PRIiFAST32;
+ if (name[3] == 'o')
+ return PRIoFAST32;
+ if (name[3] == 'u')
+ return PRIuFAST32;
+ if (name[3] == 'x')
+ return PRIxFAST32;
+ if (name[3] == 'X')
+ return PRIXFAST32;
+ abort ();
+ }
+ if (name[8] == '6' && name[9] == '4' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST64;
+ if (name[3] == 'i')
+ return PRIiFAST64;
+ if (name[3] == 'o')
+ return PRIoFAST64;
+ if (name[3] == 'u')
+ return PRIuFAST64;
+ if (name[3] == 'x')
+ return PRIxFAST64;
+ if (name[3] == 'X')
+ return PRIXFAST64;
+ abort ();
+ }
+ }
+ if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X'
+ && name[7] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdMAX;
+ if (name[3] == 'i')
+ return PRIiMAX;
+ if (name[3] == 'o')
+ return PRIoMAX;
+ if (name[3] == 'u')
+ return PRIuMAX;
+ if (name[3] == 'x')
+ return PRIxMAX;
+ if (name[3] == 'X')
+ return PRIXMAX;
+ abort ();
+ }
+ if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R'
+ && name[7] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdPTR;
+ if (name[3] == 'i')
+ return PRIiPTR;
+ if (name[3] == 'o')
+ return PRIoPTR;
+ if (name[3] == 'u')
+ return PRIuPTR;
+ if (name[3] == 'x')
+ return PRIxPTR;
+ if (name[3] == 'X')
+ return PRIXPTR;
+ abort ();
+ }
+ }
+ }
+ /* Other system dependent strings are not valid. */
+ return NULL;
+}
+/* Initialize the codeset dependent parts of an opened message catalog.
+ Return the header entry. */
+const char *
+internal_function
+_nl_init_domain_conv (domain_file, domain, domainbinding)
+ struct loaded_l10nfile *domain_file;
+ struct loaded_domain *domain;
+ struct binding *domainbinding;
+{
+ /* Find out about the character set the file is encoded with.
+ This can be found (in textual form) in the entry "". If this
+ entry does not exist or if this does not contain the `charset='
+ information, we will assume the charset matches the one the
+ current locale and we don't have to perform any conversion. */
+ char *nullentry;
+ size_t nullentrylen;
+
+ /* Preinitialize fields, to avoid recursion during _nl_find_msg. */
+ domain->codeset_cntr =
+ (domainbinding != NULL ? domainbinding->codeset_cntr : 0);
+#ifdef _LIBC
+ domain->conv = (__gconv_t) -1;
+#else
+# if HAVE_ICONV
+ domain->conv = (iconv_t) -1;
+# endif
+#endif
+ domain->conv_tab = NULL;
+
+ /* Get the header entry. */
+ nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
+
+ if (nullentry != NULL)
+ {
+#if defined _LIBC || HAVE_ICONV
+ const char *charsetstr;
+
+ charsetstr = strstr (nullentry, "charset=");
+ if (charsetstr != NULL)
+ {
+ size_t len;
+ char *charset;
+ const char *outcharset;
+
+ charsetstr += strlen ("charset=");
+ len = strcspn (charsetstr, " \t\n");
+
+ charset = (char *) alloca (len + 1);
+# if defined _LIBC || HAVE_MEMPCPY
+ *((char *) mempcpy (charset, charsetstr, len)) = '\0';
+# else
+ memcpy (charset, charsetstr, len);
+ charset[len] = '\0';
+# endif
+
+ /* The output charset should normally be determined by the
+ locale. But sometimes the locale is not used or not correctly
+ set up, so we provide a possibility for the user to override
+ this. Moreover, the value specified through
+ bind_textdomain_codeset overrides both. */
+ if (domainbinding != NULL && domainbinding->codeset != NULL)
+ outcharset = domainbinding->codeset;
+ else
+ {
+ outcharset = getenv ("OUTPUT_CHARSET");
+ if (outcharset == NULL || outcharset[0] == '\0')
+ {
+# ifdef _LIBC
+ outcharset = _NL_CURRENT (LC_CTYPE, CODESET);
+# else
+# if HAVE_ICONV
+ extern const char *locale_charset PARAMS ((void));
+ outcharset = locale_charset ();
+# endif
+# endif
+ }
+ }
+
+# ifdef _LIBC
+ /* We always want to use transliteration. */
+ outcharset = norm_add_slashes (outcharset, "TRANSLIT");
+ charset = norm_add_slashes (charset, NULL);
+ if (__gconv_open (outcharset, charset, &domain->conv,
+ GCONV_AVOID_NOCONV)
+ != __GCONV_OK)
+ domain->conv = (__gconv_t) -1;
+# else
+# if HAVE_ICONV
+ /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5,
+ we want to use transliteration. */
+# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \
+ || _LIBICONV_VERSION >= 0x0105
+ if (strchr (outcharset, '/') == NULL)
+ {
+ char *tmp;
+
+ len = strlen (outcharset);
+ tmp = (char *) alloca (len + 10 + 1);
+ memcpy (tmp, outcharset, len);
+ memcpy (tmp + len, "//TRANSLIT", 10 + 1);
+ outcharset = tmp;
+
+ domain->conv = iconv_open (outcharset, charset);
+
+ freea (outcharset);
+ }
+ else
+# endif
+ domain->conv = iconv_open (outcharset, charset);
+# endif
+# endif
+
+ freea (charset);
+ }
+#endif /* _LIBC || HAVE_ICONV */
+ }
+
+ return nullentry;
+}
+
+/* Frees the codeset dependent parts of an opened message catalog. */
+void
+internal_function
+_nl_free_domain_conv (domain)
+ struct loaded_domain *domain;
+{
+ if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
+ free (domain->conv_tab);
+
+#ifdef _LIBC
+ if (domain->conv != (__gconv_t) -1)
+ __gconv_close (domain->conv);
+#else
+# if HAVE_ICONV
+ if (domain->conv != (iconv_t) -1)
+ iconv_close (domain->conv);
+# endif
+#endif
+}
/* Load the message catalogs specified by FILENAME. If it is no valid
message catalog do nothing. */
void
internal_function
-_nl_load_domain (domain_file)
+_nl_load_domain (domain_file, domainbinding)
struct loaded_l10nfile *domain_file;
+ struct binding *domainbinding;
{
int fd;
size_t size;
+#ifdef _LIBC
+ struct stat64 st;
+#else
struct stat st;
+#endif
struct mo_file_header *data = (struct mo_file_header *) -1;
-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
- || defined _LIBC
int use_mmap = 0;
-#endif
struct loaded_domain *domain;
+ int revision;
+ const char *nullentry;
domain_file->decided = 1;
domain_file->data = NULL;
+ /* Note that it would be useless to store domainbinding in domain_file
+ because domainbinding might be == NULL now but != NULL later (after
+ a call to bind_textdomain_codeset). */
+
/* If the record does not represent a valid locale the FILENAME
might be NULL. This can happen when according to the given
specification the locale file name is different for XPG and CEN
@@ -85,28 +934,32 @@ _nl_load_domain (domain_file)
return;
/* Try to open the addressed file. */
- fd = open (domain_file->filename, O_RDONLY);
+ fd = open (domain_file->filename, O_RDONLY | O_BINARY);
if (fd == -1)
return;
/* We must know about the size of the file. */
- if (fstat (fd, &st) != 0
- || (size = (size_t) st.st_size) != st.st_size
- || size < sizeof (struct mo_file_header))
+ if (
+#ifdef _LIBC
+ __builtin_expect (fstat64 (fd, &st) != 0, 0)
+#else
+ __builtin_expect (fstat (fd, &st) != 0, 0)
+#endif
+ || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
+ || __builtin_expect (size < sizeof (struct mo_file_header), 0))
{
/* Something went wrong. */
close (fd);
return;
}
-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
- || defined _LIBC
+#ifdef HAVE_MMAP
/* Now we are ready to load the file. If mmap() is available we try
this first. If not available or it failed we try to load it. */
data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
MAP_PRIVATE, fd, 0);
- if (data != (struct mo_file_header *) -1)
+ if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
{
/* mmap() call was successful. */
close (fd);
@@ -130,12 +983,15 @@ _nl_load_domain (domain_file)
do
{
long int nb = (long int) read (fd, read_ptr, to_read);
- if (nb == -1)
+ if (nb <= 0)
{
+#ifdef EINTR
+ if (nb == -1 && errno == EINTR)
+ continue;
+#endif
close (fd);
return;
}
-
read_ptr += nb;
to_read -= nb;
}
@@ -146,11 +1002,11 @@ _nl_load_domain (domain_file)
/* Using the magic number we can test whether it really is a message
catalog file. */
- if (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED)
+ if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
+ 0))
{
/* The magic number is wrong: not a message catalog file. */
-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
- || defined _LIBC
+#ifdef HAVE_MMAP
if (use_mmap)
munmap ((caddr_t) data, size);
else
@@ -159,37 +1015,267 @@ _nl_load_domain (domain_file)
return;
}
- domain_file->data
- = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
- if (domain_file->data == NULL)
+ domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+ if (domain == NULL)
return;
+ domain_file->data = domain;
- domain = (struct loaded_domain *) domain_file->data;
domain->data = (char *) data;
-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
- || defined _LIBC
domain->use_mmap = use_mmap;
-#endif
domain->mmap_size = size;
domain->must_swap = data->magic != _MAGIC;
+ domain->malloced = NULL;
/* Fill in the information about the available tables. */
- switch (W (domain->must_swap, data->revision))
+ revision = W (domain->must_swap, data->revision);
+ /* We support only the major revision 0. */
+ switch (revision >> 16)
{
case 0:
domain->nstrings = W (domain->must_swap, data->nstrings);
- domain->orig_tab = (struct string_desc *)
+ domain->orig_tab = (const struct string_desc *)
((char *) data + W (domain->must_swap, data->orig_tab_offset));
- domain->trans_tab = (struct string_desc *)
+ domain->trans_tab = (const struct string_desc *)
((char *) data + W (domain->must_swap, data->trans_tab_offset));
domain->hash_size = W (domain->must_swap, data->hash_tab_size);
- domain->hash_tab = (nls_uint32 *)
- ((char *) data + W (domain->must_swap, data->hash_tab_offset));
+ domain->hash_tab =
+ (domain->hash_size > 2
+ ? (const nls_uint32 *)
+ ((char *) data + W (domain->must_swap, data->hash_tab_offset))
+ : NULL);
+ domain->must_swap_hash_tab = domain->must_swap;
+
+ /* Now dispatch on the minor revision. */
+ switch (revision & 0xffff)
+ {
+ case 0:
+ domain->n_sysdep_strings = 0;
+ domain->orig_sysdep_tab = NULL;
+ domain->trans_sysdep_tab = NULL;
+ break;
+ case 1:
+ default:
+ {
+ nls_uint32 n_sysdep_strings;
+
+ if (domain->hash_tab == NULL)
+ /* This is invalid. These minor revisions need a hash table. */
+ goto invalid;
+
+ n_sysdep_strings =
+ W (domain->must_swap, data->n_sysdep_strings);
+ if (n_sysdep_strings > 0)
+ {
+ nls_uint32 n_sysdep_segments;
+ const struct sysdep_segment *sysdep_segments;
+ const char **sysdep_segment_values;
+ const nls_uint32 *orig_sysdep_tab;
+ const nls_uint32 *trans_sysdep_tab;
+ size_t memneed;
+ char *mem;
+ struct sysdep_string_desc *inmem_orig_sysdep_tab;
+ struct sysdep_string_desc *inmem_trans_sysdep_tab;
+ nls_uint32 *inmem_hash_tab;
+ unsigned int i;
+
+ /* Get the values of the system dependent segments. */
+ n_sysdep_segments =
+ W (domain->must_swap, data->n_sysdep_segments);
+ sysdep_segments = (const struct sysdep_segment *)
+ ((char *) data
+ + W (domain->must_swap, data->sysdep_segments_offset));
+ sysdep_segment_values =
+ alloca (n_sysdep_segments * sizeof (const char *));
+ for (i = 0; i < n_sysdep_segments; i++)
+ {
+ const char *name =
+ (char *) data
+ + W (domain->must_swap, sysdep_segments[i].offset);
+ nls_uint32 namelen =
+ W (domain->must_swap, sysdep_segments[i].length);
+
+ if (!(namelen > 0 && name[namelen - 1] == '\0'))
+ {
+ freea (sysdep_segment_values);
+ goto invalid;
+ }
+
+ sysdep_segment_values[i] = get_sysdep_segment_value (name);
+ }
+
+ orig_sysdep_tab = (const nls_uint32 *)
+ ((char *) data
+ + W (domain->must_swap, data->orig_sysdep_tab_offset));
+ trans_sysdep_tab = (const nls_uint32 *)
+ ((char *) data
+ + W (domain->must_swap, data->trans_sysdep_tab_offset));
+
+ /* Compute the amount of additional memory needed for the
+ system dependent strings and the augmented hash table. */
+ memneed = 2 * n_sysdep_strings
+ * sizeof (struct sysdep_string_desc)
+ + domain->hash_size * sizeof (nls_uint32);
+ for (i = 0; i < 2 * n_sysdep_strings; i++)
+ {
+ const struct sysdep_string *sysdep_string =
+ (const struct sysdep_string *)
+ ((char *) data
+ + W (domain->must_swap,
+ i < n_sysdep_strings
+ ? orig_sysdep_tab[i]
+ : trans_sysdep_tab[i - n_sysdep_strings]));
+ size_t need = 0;
+ const struct segment_pair *p = sysdep_string->segments;
+
+ if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END)
+ for (p = sysdep_string->segments;; p++)
+ {
+ nls_uint32 sysdepref;
+
+ need += W (domain->must_swap, p->segsize);
+
+ sysdepref = W (domain->must_swap, p->sysdepref);
+ if (sysdepref == SEGMENTS_END)
+ break;
+
+ if (sysdepref >= n_sysdep_segments)
+ {
+ /* Invalid. */
+ freea (sysdep_segment_values);
+ goto invalid;
+ }
+
+ need += strlen (sysdep_segment_values[sysdepref]);
+ }
+
+ memneed += need;
+ }
+
+ /* Allocate additional memory. */
+ mem = (char *) malloc (memneed);
+ if (mem == NULL)
+ goto invalid;
+
+ domain->malloced = mem;
+ inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem;
+ mem += n_sysdep_strings * sizeof (struct sysdep_string_desc);
+ inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem;
+ mem += n_sysdep_strings * sizeof (struct sysdep_string_desc);
+ inmem_hash_tab = (nls_uint32 *) mem;
+ mem += domain->hash_size * sizeof (nls_uint32);
+
+ /* Compute the system dependent strings. */
+ for (i = 0; i < 2 * n_sysdep_strings; i++)
+ {
+ const struct sysdep_string *sysdep_string =
+ (const struct sysdep_string *)
+ ((char *) data
+ + W (domain->must_swap,
+ i < n_sysdep_strings
+ ? orig_sysdep_tab[i]
+ : trans_sysdep_tab[i - n_sysdep_strings]));
+ const char *static_segments =
+ (char *) data
+ + W (domain->must_swap, sysdep_string->offset);
+ const struct segment_pair *p = sysdep_string->segments;
+
+ /* Concatenate the segments, and fill
+ inmem_orig_sysdep_tab[i] (for i < n_sysdep_strings) and
+ inmem_trans_sysdep_tab[i-n_sysdep_strings] (for
+ i >= n_sysdep_strings). */
+
+ if (W (domain->must_swap, p->sysdepref) == SEGMENTS_END)
+ {
+ /* Only one static segment. */
+ inmem_orig_sysdep_tab[i].length =
+ W (domain->must_swap, p->segsize);
+ inmem_orig_sysdep_tab[i].pointer = static_segments;
+ }
+ else
+ {
+ inmem_orig_sysdep_tab[i].pointer = mem;
+
+ for (p = sysdep_string->segments;; p++)
+ {
+ nls_uint32 segsize =
+ W (domain->must_swap, p->segsize);
+ nls_uint32 sysdepref =
+ W (domain->must_swap, p->sysdepref);
+ size_t n;
+
+ if (segsize > 0)
+ {
+ memcpy (mem, static_segments, segsize);
+ mem += segsize;
+ static_segments += segsize;
+ }
+
+ if (sysdepref == SEGMENTS_END)
+ break;
+
+ n = strlen (sysdep_segment_values[sysdepref]);
+ memcpy (mem, sysdep_segment_values[sysdepref], n);
+ mem += n;
+ }
+
+ inmem_orig_sysdep_tab[i].length =
+ mem - inmem_orig_sysdep_tab[i].pointer;
+ }
+ }
+
+ /* Compute the augmented hash table. */
+ for (i = 0; i < domain->hash_size; i++)
+ inmem_hash_tab[i] =
+ W (domain->must_swap_hash_tab, domain->hash_tab[i]);
+ for (i = 0; i < n_sysdep_strings; i++)
+ {
+ const char *msgid = inmem_orig_sysdep_tab[i].pointer;
+ nls_uint32 hash_val = hash_string (msgid);
+ nls_uint32 idx = hash_val % domain->hash_size;
+ nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+
+ for (;;)
+ {
+ if (inmem_hash_tab[idx] == 0)
+ {
+ /* Hash table entry is empty. Use it. */
+ inmem_hash_tab[idx] = 1 + domain->nstrings + i;
+ break;
+ }
+
+ if (idx >= domain->hash_size - incr)
+ idx -= domain->hash_size - incr;
+ else
+ idx += incr;
+ }
+ }
+
+ freea (sysdep_segment_values);
+
+ domain->n_sysdep_strings = n_sysdep_strings;
+ domain->orig_sysdep_tab = inmem_orig_sysdep_tab;
+ domain->trans_sysdep_tab = inmem_trans_sysdep_tab;
+
+ domain->hash_tab = inmem_hash_tab;
+ domain->must_swap_hash_tab = 0;
+ }
+ else
+ {
+ domain->n_sysdep_strings = 0;
+ domain->orig_sysdep_tab = NULL;
+ domain->trans_sysdep_tab = NULL;
+ }
+ }
+ break;
+ }
break;
default:
- /* This is an illegal revision. */
-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
- || defined _LIBC
+ /* This is an invalid revision. */
+ invalid:
+ /* This is an invalid .mo file. */
+ if (domain->malloced)
+ free (domain->malloced);
+#ifdef HAVE_MMAP
if (use_mmap)
munmap ((caddr_t) data, size);
else
@@ -200,9 +1286,13 @@ _nl_load_domain (domain_file)
return;
}
- /* Show that one domain is changed. This might make some cached
- translations invalid. */
- ++_nl_msg_cat_cntr;
+ /* Now initialize the character set converter from the character set
+ the file is encoded with (found in the header entry) to the domain's
+ specified character set or the locale's character set. */
+ nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
+
+ /* Also look for a plural specification. */
+ EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals);
}
@@ -212,9 +1302,19 @@ internal_function
_nl_unload_domain (domain)
struct loaded_domain *domain;
{
+ if (domain->plural != &__gettext_germanic_plural)
+ __gettext_free_exp (domain->plural);
+
+ _nl_free_domain_conv (domain);
+
+ if (domain->malloced)
+ free (domain->malloced);
+
+# ifdef _POSIX_MAPPED_FILES
if (domain->use_mmap)
munmap ((caddr_t) domain->data, domain->mmap_size);
else
+# endif /* _POSIX_MAPPED_FILES */
free ((void *) domain->data);
free (domain);
diff --git a/intl/localcharset.c b/intl/localcharset.c
new file mode 100644
index 000000000000..8ece6e39f69a
--- /dev/null
+++ b/intl/localcharset.c
@@ -0,0 +1,398 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ 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 Bruno Haible <bruno@clisp.org>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification. */
+#include "localcharset.h"
+
+#if HAVE_STDDEF_H
+# include <stddef.h>
+#endif
+
+#include <stdio.h>
+#if HAVE_STRING_H
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# undef WIN32 /* avoid warning on mingw32 */
+# define WIN32
+#endif
+
+#if defined __EMX__
+/* Assume EMX program runs on OS/2, even if compiled under DOS. */
+# define OS2
+#endif
+
+#if !defined WIN32
+# if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+# else
+# if HAVE_SETLOCALE
+# include <locale.h>
+# endif
+# endif
+#elif defined WIN32
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+#if defined OS2
+# define INCL_DOS
+# include <os2.h>
+#endif
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+#endif
+
+#ifndef DIRECTORY_SEPARATOR
+# define DIRECTORY_SEPARATOR '/'
+#endif
+
+#ifndef ISSLASH
+# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
+#endif
+
+#ifdef HAVE_GETC_UNLOCKED
+# undef getc
+# define getc getc_unlocked
+#endif
+
+/* The following static variable is declared 'volatile' to avoid a
+ possible multithread problem in the function get_charset_aliases. If we
+ are running in a threaded environment, and if two threads initialize
+ 'charset_aliases' simultaneously, both will produce the same value,
+ and everything will be ok if the two assignments to 'charset_aliases'
+ are atomic. But I don't know what will happen if the two assignments mix. */
+#if __STDC__ != 1
+# define volatile /* empty */
+#endif
+/* Pointer to the contents of the charset.alias file, if it has already been
+ read, else NULL. Its format is:
+ ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
+static const char * volatile charset_aliases;
+
+/* Return a pointer to the contents of the charset.alias file. */
+static const char *
+get_charset_aliases ()
+{
+ const char *cp;
+
+ cp = charset_aliases;
+ if (cp == NULL)
+ {
+#if !(defined VMS || defined WIN32)
+ FILE *fp;
+ const char *dir = relocate (LIBDIR);
+ const char *base = "charset.alias";
+ char *file_name;
+
+ /* Concatenate dir and base into freshly allocated file_name. */
+ {
+ size_t dir_len = strlen (dir);
+ size_t base_len = strlen (base);
+ int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
+ file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
+ if (file_name != NULL)
+ {
+ memcpy (file_name, dir, dir_len);
+ if (add_slash)
+ file_name[dir_len] = DIRECTORY_SEPARATOR;
+ memcpy (file_name + dir_len + add_slash, base, base_len + 1);
+ }
+ }
+
+ if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
+ /* Out of memory or file not found, treat it as empty. */
+ cp = "";
+ else
+ {
+ /* Parse the file's contents. */
+ int c;
+ char buf1[50+1];
+ char buf2[50+1];
+ char *res_ptr = NULL;
+ size_t res_size = 0;
+ size_t l1, l2;
+
+ for (;;)
+ {
+ c = getc (fp);
+ if (c == EOF)
+ break;
+ if (c == '\n' || c == ' ' || c == '\t')
+ continue;
+ if (c == '#')
+ {
+ /* Skip comment, to end of line. */
+ do
+ c = getc (fp);
+ while (!(c == EOF || c == '\n'));
+ if (c == EOF)
+ break;
+ continue;
+ }
+ ungetc (c, fp);
+ if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
+ break;
+ l1 = strlen (buf1);
+ l2 = strlen (buf2);
+ if (res_size == 0)
+ {
+ res_size = l1 + 1 + l2 + 1;
+ res_ptr = (char *) malloc (res_size + 1);
+ }
+ else
+ {
+ res_size += l1 + 1 + l2 + 1;
+ res_ptr = (char *) realloc (res_ptr, res_size + 1);
+ }
+ if (res_ptr == NULL)
+ {
+ /* Out of memory. */
+ res_size = 0;
+ break;
+ }
+ strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
+ strcpy (res_ptr + res_size - (l2 + 1), buf2);
+ }
+ fclose (fp);
+ if (res_size == 0)
+ cp = "";
+ else
+ {
+ *(res_ptr + res_size) = '\0';
+ cp = res_ptr;
+ }
+ }
+
+ if (file_name != NULL)
+ free (file_name);
+
+#else
+
+# if defined VMS
+ /* To avoid the troubles of an extra file charset.alias_vms in the
+ sources of many GNU packages, simply inline the aliases here. */
+ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
+ "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
+ section 10.7 "Handling Different Character Sets". */
+ cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
+ "ISO8859-2" "\0" "ISO-8859-2" "\0"
+ "ISO8859-5" "\0" "ISO-8859-5" "\0"
+ "ISO8859-7" "\0" "ISO-8859-7" "\0"
+ "ISO8859-8" "\0" "ISO-8859-8" "\0"
+ "ISO8859-9" "\0" "ISO-8859-9" "\0"
+ /* Japanese */
+ "eucJP" "\0" "EUC-JP" "\0"
+ "SJIS" "\0" "SHIFT_JIS" "\0"
+ "DECKANJI" "\0" "DEC-KANJI" "\0"
+ "SDECKANJI" "\0" "EUC-JP" "\0"
+ /* Chinese */
+ "eucTW" "\0" "EUC-TW" "\0"
+ "DECHANYU" "\0" "DEC-HANYU" "\0"
+ "DECHANZI" "\0" "GB2312" "\0"
+ /* Korean */
+ "DECKOREAN" "\0" "EUC-KR" "\0";
+# endif
+
+# if defined WIN32
+ /* To avoid the troubles of installing a separate file in the same
+ directory as the DLL and of retrieving the DLL's directory at
+ runtime, simply inline the aliases here. */
+
+ cp = "CP936" "\0" "GBK" "\0"
+ "CP1361" "\0" "JOHAB" "\0"
+ "CP20127" "\0" "ASCII" "\0"
+ "CP20866" "\0" "KOI8-R" "\0"
+ "CP21866" "\0" "KOI8-RU" "\0"
+ "CP28591" "\0" "ISO-8859-1" "\0"
+ "CP28592" "\0" "ISO-8859-2" "\0"
+ "CP28593" "\0" "ISO-8859-3" "\0"
+ "CP28594" "\0" "ISO-8859-4" "\0"
+ "CP28595" "\0" "ISO-8859-5" "\0"
+ "CP28596" "\0" "ISO-8859-6" "\0"
+ "CP28597" "\0" "ISO-8859-7" "\0"
+ "CP28598" "\0" "ISO-8859-8" "\0"
+ "CP28599" "\0" "ISO-8859-9" "\0"
+ "CP28605" "\0" "ISO-8859-15" "\0";
+# endif
+#endif
+
+ charset_aliases = cp;
+ }
+
+ return cp;
+}
+
+/* Determine the current locale's character encoding, and canonicalize it
+ into one of the canonical names listed in config.charset.
+ The result must not be freed; it is statically allocated.
+ If the canonical name cannot be determined, the result is a non-canonical
+ name. */
+
+#ifdef STATIC
+STATIC
+#endif
+const char *
+locale_charset ()
+{
+ const char *codeset;
+ const char *aliases;
+
+#if !(defined WIN32 || defined OS2)
+
+# if HAVE_LANGINFO_CODESET
+
+ /* Most systems support nl_langinfo (CODESET) nowadays. */
+ codeset = nl_langinfo (CODESET);
+
+# else
+
+ /* On old systems which lack it, use setlocale or getenv. */
+ const char *locale = NULL;
+
+ /* But most old systems don't have a complete set of locales. Some
+ (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't
+ use setlocale here; it would return "C" when it doesn't support the
+ locale name the user has set. */
+# if HAVE_SETLOCALE && 0
+ locale = setlocale (LC_CTYPE, NULL);
+# endif
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_ALL");
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_CTYPE");
+ if (locale == NULL || locale[0] == '\0')
+ locale = getenv ("LANG");
+ }
+ }
+
+ /* On some old systems, one used to set locale = "iso8859_1". On others,
+ you set it to "language_COUNTRY.charset". In any case, we resolve it
+ through the charset.alias file. */
+ codeset = locale;
+
+# endif
+
+#elif defined WIN32
+
+ static char buf[2 + 10 + 1];
+
+ /* Woe32 has a function returning the locale's codepage as a number. */
+ sprintf (buf, "CP%u", GetACP ());
+ codeset = buf;
+
+#elif defined OS2
+
+ const char *locale;
+ static char buf[2 + 10 + 1];
+ ULONG cp[3];
+ ULONG cplen;
+
+ /* Allow user to override the codeset, as set in the operating system,
+ with standard language environment variables. */
+ locale = getenv ("LC_ALL");
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_CTYPE");
+ if (locale == NULL || locale[0] == '\0')
+ locale = getenv ("LANG");
+ }
+ if (locale != NULL && locale[0] != '\0')
+ {
+ /* If the locale name contains an encoding after the dot, return it. */
+ const char *dot = strchr (locale, '.');
+
+ if (dot != NULL)
+ {
+ const char *modifier;
+
+ dot++;
+ /* Look for the possible @... trailer and remove it, if any. */
+ modifier = strchr (dot, '@');
+ if (modifier == NULL)
+ return dot;
+ if (modifier - dot < sizeof (buf))
+ {
+ memcpy (buf, dot, modifier - dot);
+ buf [modifier - dot] = '\0';
+ return buf;
+ }
+ }
+
+ /* Resolve through the charset.alias file. */
+ codeset = locale;
+ }
+ else
+ {
+ /* OS/2 has a function returning the locale's codepage as a number. */
+ if (DosQueryCp (sizeof (cp), cp, &cplen))
+ codeset = "";
+ else
+ {
+ sprintf (buf, "CP%u", cp[0]);
+ codeset = buf;
+ }
+ }
+
+#endif
+
+ if (codeset == NULL)
+ /* The canonical name cannot be determined. */
+ codeset = "";
+
+ /* Resolve alias. */
+ for (aliases = get_charset_aliases ();
+ *aliases != '\0';
+ aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
+ if (strcmp (codeset, aliases) == 0
+ || (aliases[0] == '*' && aliases[1] == '\0'))
+ {
+ codeset = aliases + strlen (aliases) + 1;
+ break;
+ }
+
+ /* Don't return an empty string. GNU libc and GNU libiconv interpret
+ the empty string as denoting "the locale's character encoding",
+ thus GNU libiconv would call this function a second time. */
+ if (codeset[0] == '\0')
+ codeset = "ASCII";
+
+ return codeset;
+}
diff --git a/intl/localcharset.h b/intl/localcharset.h
new file mode 100644
index 000000000000..47b21a0a93f1
--- /dev/null
+++ b/intl/localcharset.h
@@ -0,0 +1,42 @@
+/* Determine a canonical name for the current locale's character encoding.
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+ This file is part of the GNU CHARSET Library.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ 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 _LOCALCHARSET_H
+#define _LOCALCHARSET_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+ into one of the canonical names listed in config.charset.
+ The result must not be freed; it is statically allocated.
+ If the canonical name cannot be determined, the result is a non-canonical
+ name. */
+extern const char * locale_charset (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LOCALCHARSET_H */
diff --git a/intl/locale.alias b/intl/locale.alias
new file mode 100644
index 000000000000..0f15635d98ce
--- /dev/null
+++ b/intl/locale.alias
@@ -0,0 +1,78 @@
+# Locale name alias data base.
+# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+# The format of this file is the same as for the corresponding file of
+# the X Window System, which normally can be found in
+# /usr/lib/X11/locale/locale.alias
+# A single line contains two fields: an alias and a substitution value.
+# All entries are case independent.
+
+# Note: This file is far from being complete. If you have a value for
+# your own site which you think might be useful for others too, share
+# it with the rest of us. Send it using the `glibcbug' script to
+# bugs@gnu.org.
+
+# Packages using this file:
+
+bokmal no_NO.ISO-8859-1
+bokmål no_NO.ISO-8859-1
+catalan ca_ES.ISO-8859-1
+croatian hr_HR.ISO-8859-2
+czech cs_CZ.ISO-8859-2
+danish da_DK.ISO-8859-1
+dansk da_DK.ISO-8859-1
+deutsch de_DE.ISO-8859-1
+dutch nl_NL.ISO-8859-1
+eesti et_EE.ISO-8859-1
+estonian et_EE.ISO-8859-1
+finnish fi_FI.ISO-8859-1
+français fr_FR.ISO-8859-1
+french fr_FR.ISO-8859-1
+galego gl_ES.ISO-8859-1
+galician gl_ES.ISO-8859-1
+german de_DE.ISO-8859-1
+greek el_GR.ISO-8859-7
+hebrew he_IL.ISO-8859-8
+hrvatski hr_HR.ISO-8859-2
+hungarian hu_HU.ISO-8859-2
+icelandic is_IS.ISO-8859-1
+italian it_IT.ISO-8859-1
+japanese ja_JP.eucJP
+japanese.euc ja_JP.eucJP
+ja_JP ja_JP.eucJP
+ja_JP.ujis ja_JP.eucJP
+japanese.sjis ja_JP.SJIS
+korean ko_KR.eucKR
+korean.euc ko_KR.eucKR
+ko_KR ko_KR.eucKR
+lithuanian lt_LT.ISO-8859-13
+nb_NO no_NO.ISO-8859-1
+nb_NO.ISO-8859-1 no_NO.ISO-8859-1
+norwegian no_NO.ISO-8859-1
+nynorsk nn_NO.ISO-8859-1
+polish pl_PL.ISO-8859-2
+portuguese pt_PT.ISO-8859-1
+romanian ro_RO.ISO-8859-2
+russian ru_RU.ISO-8859-5
+slovak sk_SK.ISO-8859-2
+slovene sl_SI.ISO-8859-2
+slovenian sl_SI.ISO-8859-2
+spanish es_ES.ISO-8859-1
+swedish sv_SE.ISO-8859-1
+thai th_TH.TIS-620
+turkish tr_TR.ISO-8859-9
diff --git a/intl/localealias.c b/intl/localealias.c
index 833df0351aa7..5af5b5b6af33 100644
--- a/intl/localealias.c
+++ b/intl/localealias.c
@@ -1,20 +1,27 @@
/* Handle aliases for locale names.
- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+ Copyright (C) 1995-1999, 2000-2001, 2003 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)
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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. */
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
#ifdef HAVE_CONFIG_H
# include <config.h>
@@ -22,55 +29,44 @@
#include <ctype.h>
#include <stdio.h>
+#if defined _LIBC || defined HAVE___FSETLOCKING
+# include <stdio_ext.h>
+#endif
#include <sys/types.h>
#ifdef __GNUC__
+# undef alloca
# define alloca __builtin_alloca
# define HAVE_ALLOCA 1
#else
-# if defined HAVE_ALLOCA_H || defined _LIBC
-# include <alloca.h>
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
# else
-# ifdef _AIX
- #pragma alloca
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
# else
-# ifndef alloca
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
char *alloca ();
+# endif
# endif
# endif
# endif
#endif
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#else
-char *getenv ();
-# ifdef HAVE_MALLOC_H
-# include <malloc.h>
-# else
-void free ();
-# endif
-#endif
+#include <stdlib.h>
+#include <string.h>
-#if defined HAVE_STRING_H || defined _LIBC
-# ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-# endif
-# include <string.h>
+#include "gettextP.h"
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
#else
-# include <strings.h>
-# ifndef memcpy
-# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
-# endif
+# define relocate(pathname) (pathname)
#endif
-#if !HAVE_STRCHR && !defined _LIBC
-# ifndef strchr
-# define strchr index
-# endif
-#endif
-
-#include "gettext.h"
-#include "gettextP.h"
/* @@ end of prolog @@ */
@@ -80,8 +76,11 @@ void free ();
file and the name space must not be polluted. */
# define strcasecmp __strcasecmp
-# define mempcpy __mempcpy
+# ifndef mempcpy
+# define mempcpy __mempcpy
+# endif
# define HAVE_MEMPCPY 1
+# define HAVE___FSETLOCKING 1
/* We need locking here since we can be called from different places. */
# include <bits/libc-lock.h>
@@ -89,41 +88,36 @@ void free ();
__libc_lock_define_initialized (static, lock);
#endif
+#ifndef internal_function
+# define internal_function
+#endif
-/* For those loosing systems which don't have `alloca' we have to add
+/* Some optimizations for glibc. */
+#ifdef _LIBC
+# define FEOF(fp) feof_unlocked (fp)
+# define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp)
+#else
+# define FEOF(fp) feof (fp)
+# define FGETS(buf, n, fp) fgets (buf, n, fp)
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
some additional code emulating it. */
#ifdef HAVE_ALLOCA
-/* Nothing has to be done. */
-# define ADD_BLOCK(list, address) /* nothing */
-# define FREE_BLOCKS(list) /* nothing */
+# define freea(p) /* nothing */
#else
-struct block_list
-{
- void *address;
- struct block_list *next;
-};
-# define ADD_BLOCK(list, addr) \
- do { \
- struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
- /* If we cannot get a free block we cannot add the new element to \
- the list. */ \
- if (newp != NULL) { \
- newp->address = (addr); \
- newp->next = (list); \
- (list) = newp; \
- } \
- } while (0)
-# define FREE_BLOCKS(list) \
- do { \
- while (list != NULL) { \
- struct block_list *old = list; \
- list = list->next; \
- free (old); \
- } \
- } while (0)
-# undef alloca
-# define alloca(size) (malloc (size))
-#endif /* have alloca */
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED
+# undef fgets
+# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
+#endif
+#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED
+# undef feof
+# define feof(s) feof_unlocked (s)
+#endif
struct alias_map
@@ -133,18 +127,22 @@ struct alias_map
};
-static char *string_space = NULL;
-static size_t string_space_act = 0;
-static size_t string_space_max = 0;
-static struct alias_map *map;
-static size_t nmap = 0;
-static size_t maxmap = 0;
+#ifndef _LIBC
+# define libc_freeres_ptr(decl) decl
+#endif
+
+libc_freeres_ptr (static char *string_space);
+static size_t string_space_act;
+static size_t string_space_max;
+libc_freeres_ptr (static struct alias_map *map);
+static size_t nmap;
+static size_t maxmap;
/* Prototypes for local functions. */
static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
internal_function;
-static void extend_alias_table PARAMS ((void));
+static int extend_alias_table PARAMS ((void));
static int alias_compare PARAMS ((const struct alias_map *map1,
const struct alias_map *map2));
@@ -153,7 +151,7 @@ const char *
_nl_expand_alias (name)
const char *name;
{
- static const char *locale_alias_path = LOCALE_ALIAS_PATH;
+ static const char *locale_alias_path;
struct alias_map *retval;
const char *result = NULL;
size_t added;
@@ -162,6 +160,9 @@ _nl_expand_alias (name)
__libc_lock_lock (lock);
#endif
+ if (locale_alias_path == NULL)
+ locale_alias_path = LOCALE_ALIAS_PATH;
+
do
{
struct alias_map item;
@@ -190,11 +191,12 @@ _nl_expand_alias (name)
{
const char *start;
- while (locale_alias_path[0] == ':')
+ while (locale_alias_path[0] == PATH_SEPARATOR)
++locale_alias_path;
start = locale_alias_path;
- while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':')
+ while (locale_alias_path[0] != '\0'
+ && locale_alias_path[0] != PATH_SEPARATOR)
++locale_alias_path;
if (start < locale_alias_path)
@@ -217,16 +219,12 @@ read_alias_file (fname, fname_len)
const char *fname;
int fname_len;
{
-#ifndef HAVE_ALLOCA
- struct block_list *block_list = NULL;
-#endif
FILE *fp;
char *full_fname;
size_t added;
static const char aliasfile[] = "/locale.alias";
full_fname = (char *) alloca (fname_len + sizeof aliasfile);
- ADD_BLOCK (block_list, full_fname);
#ifdef HAVE_MEMPCPY
mempcpy (mempcpy (full_fname, fname, fname_len),
aliasfile, sizeof aliasfile);
@@ -235,60 +233,52 @@ read_alias_file (fname, fname_len)
memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
#endif
- fp = fopen (full_fname, "r");
+ fp = fopen (relocate (full_fname), "r");
+ freea (full_fname);
if (fp == NULL)
- {
- FREE_BLOCKS (block_list);
- return 0;
- }
+ return 0;
+
+#ifdef HAVE___FSETLOCKING
+ /* No threads present. */
+ __fsetlocking (fp, FSETLOCKING_BYCALLER);
+#endif
added = 0;
- while (!feof (fp))
+ while (!FEOF (fp))
{
/* It is a reasonable approach to use a fix buffer here because
a) we are only interested in the first two fields
b) these fields must be usable as file names and so must not
be that long
- */
- unsigned char buf[BUFSIZ];
- unsigned char *alias;
- unsigned char *value;
- unsigned char *cp;
-
- if (fgets (buf, sizeof buf, fp) == NULL)
+ We avoid a multi-kilobyte buffer here since this would use up
+ stack space which we might not have if the program ran out of
+ memory. */
+ char buf[400];
+ char *alias;
+ char *value;
+ char *cp;
+
+ if (FGETS (buf, sizeof buf, fp) == NULL)
/* EOF reached. */
break;
- /* Possibly not the whole line fits into the buffer. Ignore
- the rest of the line. */
- if (strchr (buf, '\n') == NULL)
- {
- char altbuf[BUFSIZ];
- do
- if (fgets (altbuf, sizeof altbuf, fp) == NULL)
- /* Make sure the inner loop will be left. The outer loop
- will exit at the `feof' test. */
- break;
- while (strchr (altbuf, '\n') == NULL);
- }
-
cp = buf;
/* Ignore leading white space. */
- while (isspace (cp[0]))
+ while (isspace ((unsigned char) cp[0]))
++cp;
/* A leading '#' signals a comment line. */
if (cp[0] != '\0' && cp[0] != '#')
{
alias = cp++;
- while (cp[0] != '\0' && !isspace (cp[0]))
+ while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
++cp;
/* Terminate alias name. */
if (cp[0] != '\0')
*cp++ = '\0';
/* Now look for the beginning of the value. */
- while (isspace (cp[0]))
+ while (isspace ((unsigned char) cp[0]))
++cp;
if (cp[0] != '\0')
@@ -297,7 +287,7 @@ read_alias_file (fname, fname_len)
size_t value_len;
value = cp++;
- while (cp[0] != '\0' && !isspace (cp[0]))
+ while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
++cp;
/* Terminate value. */
if (cp[0] == '\n')
@@ -312,7 +302,8 @@ read_alias_file (fname, fname_len)
*cp++ = '\0';
if (nmap >= maxmap)
- extend_alias_table ();
+ if (__builtin_expect (extend_alias_table (), 0))
+ return added;
alias_len = strlen (alias) + 1;
value_len = strlen (value) + 1;
@@ -325,10 +316,19 @@ read_alias_file (fname, fname_len)
? alias_len + value_len : 1024));
char *new_pool = (char *) realloc (string_space, new_size);
if (new_pool == NULL)
+ return added;
+
+ if (__builtin_expect (string_space != new_pool, 0))
{
- FREE_BLOCKS (block_list);
- return added;
+ size_t i;
+
+ for (i = 0; i < nmap; i++)
+ {
+ map[i].alias += new_pool - string_space;
+ map[i].value += new_pool - string_space;
+ }
}
+
string_space = new_pool;
string_space_max = new_size;
}
@@ -345,6 +345,14 @@ read_alias_file (fname, fname_len)
++added;
}
}
+
+ /* Possibly not the whole line fits into the buffer. Ignore
+ the rest of the line. */
+ while (strchr (buf, '\n') == NULL)
+ if (FGETS (buf, sizeof buf, fp) == NULL)
+ /* Make sure the inner loop will be left. The outer loop
+ will exit at the `feof' test. */
+ break;
}
/* Should we test for ferror()? I think we have to silently ignore
@@ -355,12 +363,11 @@ read_alias_file (fname, fname_len)
qsort (map, nmap, sizeof (struct alias_map),
(int (*) PARAMS ((const void *, const void *))) alias_compare);
- FREE_BLOCKS (block_list);
return added;
}
-static void
+static int
extend_alias_table ()
{
size_t new_size;
@@ -371,26 +378,14 @@ extend_alias_table ()
* sizeof (struct alias_map)));
if (new_map == NULL)
/* Simply don't extend: we don't have any more core. */
- return;
+ return -1;
map = new_map;
maxmap = new_size;
+ return 0;
}
-#ifdef _LIBC
-static void __attribute__ ((unused))
-free_mem (void)
-{
- if (string_space != NULL)
- free (string_space);
- if (map != NULL)
- free (map);
-}
-text_set_element (__libc_subfreeres, free_mem);
-#endif
-
-
static int
alias_compare (map1, map2)
const struct alias_map *map1;
diff --git a/intl/localename.c b/intl/localename.c
new file mode 100644
index 000000000000..28c4ca7aab6e
--- /dev/null
+++ b/intl/localename.c
@@ -0,0 +1,772 @@
+/* Determine the current selected locale.
+ Copyright (C) 1995-1999, 2000-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ 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 Ulrich Drepper <drepper@gnu.org>, 1995. */
+/* Win32 code written by Tor Lillqvist <tml@iki.fi>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <locale.h>
+
+#if defined _WIN32 || defined __WIN32__
+# undef WIN32 /* avoid warning on mingw32 */
+# define WIN32
+#endif
+
+#ifdef WIN32
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+/* Mingw headers don't have latest language and sublanguage codes. */
+# ifndef LANG_AFRIKAANS
+# define LANG_AFRIKAANS 0x36
+# endif
+# ifndef LANG_ALBANIAN
+# define LANG_ALBANIAN 0x1c
+# endif
+# ifndef LANG_ARABIC
+# define LANG_ARABIC 0x01
+# endif
+# ifndef LANG_ARMENIAN
+# define LANG_ARMENIAN 0x2b
+# endif
+# ifndef LANG_ASSAMESE
+# define LANG_ASSAMESE 0x4d
+# endif
+# ifndef LANG_AZERI
+# define LANG_AZERI 0x2c
+# endif
+# ifndef LANG_BASQUE
+# define LANG_BASQUE 0x2d
+# endif
+# ifndef LANG_BELARUSIAN
+# define LANG_BELARUSIAN 0x23
+# endif
+# ifndef LANG_BENGALI
+# define LANG_BENGALI 0x45
+# endif
+# ifndef LANG_CATALAN
+# define LANG_CATALAN 0x03
+# endif
+# ifndef LANG_DIVEHI
+# define LANG_DIVEHI 0x65
+# endif
+# ifndef LANG_ESTONIAN
+# define LANG_ESTONIAN 0x25
+# endif
+# ifndef LANG_FAEROESE
+# define LANG_FAEROESE 0x38
+# endif
+# ifndef LANG_FARSI
+# define LANG_FARSI 0x29
+# endif
+# ifndef LANG_GALICIAN
+# define LANG_GALICIAN 0x56
+# endif
+# ifndef LANG_GEORGIAN
+# define LANG_GEORGIAN 0x37
+# endif
+# ifndef LANG_GUJARATI
+# define LANG_GUJARATI 0x47
+# endif
+# ifndef LANG_HEBREW
+# define LANG_HEBREW 0x0d
+# endif
+# ifndef LANG_HINDI
+# define LANG_HINDI 0x39
+# endif
+# ifndef LANG_INDONESIAN
+# define LANG_INDONESIAN 0x21
+# endif
+# ifndef LANG_KANNADA
+# define LANG_KANNADA 0x4b
+# endif
+# ifndef LANG_KASHMIRI
+# define LANG_KASHMIRI 0x60
+# endif
+# ifndef LANG_KAZAK
+# define LANG_KAZAK 0x3f
+# endif
+# ifndef LANG_KONKANI
+# define LANG_KONKANI 0x57
+# endif
+# ifndef LANG_KYRGYZ
+# define LANG_KYRGYZ 0x40
+# endif
+# ifndef LANG_LATVIAN
+# define LANG_LATVIAN 0x26
+# endif
+# ifndef LANG_LITHUANIAN
+# define LANG_LITHUANIAN 0x27
+# endif
+# ifndef LANG_MACEDONIAN
+# define LANG_MACEDONIAN 0x2f
+# endif
+# ifndef LANG_MALAY
+# define LANG_MALAY 0x3e
+# endif
+# ifndef LANG_MALAYALAM
+# define LANG_MALAYALAM 0x4c
+# endif
+# ifndef LANG_MANIPURI
+# define LANG_MANIPURI 0x58
+# endif
+# ifndef LANG_MARATHI
+# define LANG_MARATHI 0x4e
+# endif
+# ifndef LANG_MONGOLIAN
+# define LANG_MONGOLIAN 0x50
+# endif
+# ifndef LANG_NEPALI
+# define LANG_NEPALI 0x61
+# endif
+# ifndef LANG_ORIYA
+# define LANG_ORIYA 0x48
+# endif
+# ifndef LANG_PUNJABI
+# define LANG_PUNJABI 0x46
+# endif
+# ifndef LANG_SANSKRIT
+# define LANG_SANSKRIT 0x4f
+# endif
+# ifndef LANG_SERBIAN
+# define LANG_SERBIAN 0x1a
+# endif
+# ifndef LANG_SINDHI
+# define LANG_SINDHI 0x59
+# endif
+# ifndef LANG_SLOVAK
+# define LANG_SLOVAK 0x1b
+# endif
+# ifndef LANG_SORBIAN
+# define LANG_SORBIAN 0x2e
+# endif
+# ifndef LANG_SWAHILI
+# define LANG_SWAHILI 0x41
+# endif
+# ifndef LANG_SYRIAC
+# define LANG_SYRIAC 0x5a
+# endif
+# ifndef LANG_TAMIL
+# define LANG_TAMIL 0x49
+# endif
+# ifndef LANG_TATAR
+# define LANG_TATAR 0x44
+# endif
+# ifndef LANG_TELUGU
+# define LANG_TELUGU 0x4a
+# endif
+# ifndef LANG_THAI
+# define LANG_THAI 0x1e
+# endif
+# ifndef LANG_UKRAINIAN
+# define LANG_UKRAINIAN 0x22
+# endif
+# ifndef LANG_URDU
+# define LANG_URDU 0x20
+# endif
+# ifndef LANG_UZBEK
+# define LANG_UZBEK 0x43
+# endif
+# ifndef LANG_VIETNAMESE
+# define LANG_VIETNAMESE 0x2a
+# endif
+# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
+# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
+# endif
+# ifndef SUBLANG_ARABIC_IRAQ
+# define SUBLANG_ARABIC_IRAQ 0x02
+# endif
+# ifndef SUBLANG_ARABIC_EGYPT
+# define SUBLANG_ARABIC_EGYPT 0x03
+# endif
+# ifndef SUBLANG_ARABIC_LIBYA
+# define SUBLANG_ARABIC_LIBYA 0x04
+# endif
+# ifndef SUBLANG_ARABIC_ALGERIA
+# define SUBLANG_ARABIC_ALGERIA 0x05
+# endif
+# ifndef SUBLANG_ARABIC_MOROCCO
+# define SUBLANG_ARABIC_MOROCCO 0x06
+# endif
+# ifndef SUBLANG_ARABIC_TUNISIA
+# define SUBLANG_ARABIC_TUNISIA 0x07
+# endif
+# ifndef SUBLANG_ARABIC_OMAN
+# define SUBLANG_ARABIC_OMAN 0x08
+# endif
+# ifndef SUBLANG_ARABIC_YEMEN
+# define SUBLANG_ARABIC_YEMEN 0x09
+# endif
+# ifndef SUBLANG_ARABIC_SYRIA
+# define SUBLANG_ARABIC_SYRIA 0x0a
+# endif
+# ifndef SUBLANG_ARABIC_JORDAN
+# define SUBLANG_ARABIC_JORDAN 0x0b
+# endif
+# ifndef SUBLANG_ARABIC_LEBANON
+# define SUBLANG_ARABIC_LEBANON 0x0c
+# endif
+# ifndef SUBLANG_ARABIC_KUWAIT
+# define SUBLANG_ARABIC_KUWAIT 0x0d
+# endif
+# ifndef SUBLANG_ARABIC_UAE
+# define SUBLANG_ARABIC_UAE 0x0e
+# endif
+# ifndef SUBLANG_ARABIC_BAHRAIN
+# define SUBLANG_ARABIC_BAHRAIN 0x0f
+# endif
+# ifndef SUBLANG_ARABIC_QATAR
+# define SUBLANG_ARABIC_QATAR 0x10
+# endif
+# ifndef SUBLANG_AZERI_LATIN
+# define SUBLANG_AZERI_LATIN 0x01
+# endif
+# ifndef SUBLANG_AZERI_CYRILLIC
+# define SUBLANG_AZERI_CYRILLIC 0x02
+# endif
+# ifndef SUBLANG_CHINESE_MACAU
+# define SUBLANG_CHINESE_MACAU 0x05
+# endif
+# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
+# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
+# endif
+# ifndef SUBLANG_ENGLISH_JAMAICA
+# define SUBLANG_ENGLISH_JAMAICA 0x08
+# endif
+# ifndef SUBLANG_ENGLISH_CARIBBEAN
+# define SUBLANG_ENGLISH_CARIBBEAN 0x09
+# endif
+# ifndef SUBLANG_ENGLISH_BELIZE
+# define SUBLANG_ENGLISH_BELIZE 0x0a
+# endif
+# ifndef SUBLANG_ENGLISH_TRINIDAD
+# define SUBLANG_ENGLISH_TRINIDAD 0x0b
+# endif
+# ifndef SUBLANG_ENGLISH_ZIMBABWE
+# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
+# endif
+# ifndef SUBLANG_ENGLISH_PHILIPPINES
+# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
+# endif
+# ifndef SUBLANG_FRENCH_LUXEMBOURG
+# define SUBLANG_FRENCH_LUXEMBOURG 0x05
+# endif
+# ifndef SUBLANG_FRENCH_MONACO
+# define SUBLANG_FRENCH_MONACO 0x06
+# endif
+# ifndef SUBLANG_GERMAN_LUXEMBOURG
+# define SUBLANG_GERMAN_LUXEMBOURG 0x04
+# endif
+# ifndef SUBLANG_GERMAN_LIECHTENSTEIN
+# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
+# endif
+# ifndef SUBLANG_KASHMIRI_INDIA
+# define SUBLANG_KASHMIRI_INDIA 0x02
+# endif
+# ifndef SUBLANG_MALAY_MALAYSIA
+# define SUBLANG_MALAY_MALAYSIA 0x01
+# endif
+# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM
+# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
+# endif
+# ifndef SUBLANG_NEPALI_INDIA
+# define SUBLANG_NEPALI_INDIA 0x02
+# endif
+# ifndef SUBLANG_SERBIAN_LATIN
+# define SUBLANG_SERBIAN_LATIN 0x02
+# endif
+# ifndef SUBLANG_SERBIAN_CYRILLIC
+# define SUBLANG_SERBIAN_CYRILLIC 0x03
+# endif
+# ifndef SUBLANG_SPANISH_GUATEMALA
+# define SUBLANG_SPANISH_GUATEMALA 0x04
+# endif
+# ifndef SUBLANG_SPANISH_COSTA_RICA
+# define SUBLANG_SPANISH_COSTA_RICA 0x05
+# endif
+# ifndef SUBLANG_SPANISH_PANAMA
+# define SUBLANG_SPANISH_PANAMA 0x06
+# endif
+# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC
+# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
+# endif
+# ifndef SUBLANG_SPANISH_VENEZUELA
+# define SUBLANG_SPANISH_VENEZUELA 0x08
+# endif
+# ifndef SUBLANG_SPANISH_COLOMBIA
+# define SUBLANG_SPANISH_COLOMBIA 0x09
+# endif
+# ifndef SUBLANG_SPANISH_PERU
+# define SUBLANG_SPANISH_PERU 0x0a
+# endif
+# ifndef SUBLANG_SPANISH_ARGENTINA
+# define SUBLANG_SPANISH_ARGENTINA 0x0b
+# endif
+# ifndef SUBLANG_SPANISH_ECUADOR
+# define SUBLANG_SPANISH_ECUADOR 0x0c
+# endif
+# ifndef SUBLANG_SPANISH_CHILE
+# define SUBLANG_SPANISH_CHILE 0x0d
+# endif
+# ifndef SUBLANG_SPANISH_URUGUAY
+# define SUBLANG_SPANISH_URUGUAY 0x0e
+# endif
+# ifndef SUBLANG_SPANISH_PARAGUAY
+# define SUBLANG_SPANISH_PARAGUAY 0x0f
+# endif
+# ifndef SUBLANG_SPANISH_BOLIVIA
+# define SUBLANG_SPANISH_BOLIVIA 0x10
+# endif
+# ifndef SUBLANG_SPANISH_EL_SALVADOR
+# define SUBLANG_SPANISH_EL_SALVADOR 0x11
+# endif
+# ifndef SUBLANG_SPANISH_HONDURAS
+# define SUBLANG_SPANISH_HONDURAS 0x12
+# endif
+# ifndef SUBLANG_SPANISH_NICARAGUA
+# define SUBLANG_SPANISH_NICARAGUA 0x13
+# endif
+# ifndef SUBLANG_SPANISH_PUERTO_RICO
+# define SUBLANG_SPANISH_PUERTO_RICO 0x14
+# endif
+# ifndef SUBLANG_SWEDISH_FINLAND
+# define SUBLANG_SWEDISH_FINLAND 0x02
+# endif
+# ifndef SUBLANG_URDU_PAKISTAN
+# define SUBLANG_URDU_PAKISTAN 0x01
+# endif
+# ifndef SUBLANG_URDU_INDIA
+# define SUBLANG_URDU_INDIA 0x02
+# endif
+# ifndef SUBLANG_UZBEK_LATIN
+# define SUBLANG_UZBEK_LATIN 0x01
+# endif
+# ifndef SUBLANG_UZBEK_CYRILLIC
+# define SUBLANG_UZBEK_CYRILLIC 0x02
+# endif
+#endif
+
+/* XPG3 defines the result of 'setlocale (category, NULL)' as:
+ "Directs 'setlocale()' to query 'category' and return the current
+ setting of 'local'."
+ However it does not specify the exact format. Neither do SUSV2 and
+ ISO C 99. So we can use this feature only on selected systems (e.g.
+ those using GNU C Library). */
+#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
+# define HAVE_LOCALE_NULL
+#endif
+
+/* Determine the current locale's name, and canonicalize it into XPG syntax
+ language[_territory[.codeset]][@modifier]
+ The codeset part in the result is not reliable; the locale_charset()
+ should be used for codeset information instead.
+ The result must not be freed; it is statically allocated. */
+
+const char *
+_nl_locale_name (category, categoryname)
+ int category;
+ const char *categoryname;
+{
+ const char *retval;
+
+#ifndef WIN32
+
+ /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'.
+ On some systems this can be done by the 'setlocale' function itself. */
+# if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
+ retval = setlocale (category, NULL);
+# else
+ /* Setting of LC_ALL overwrites all other. */
+ retval = getenv ("LC_ALL");
+ if (retval == NULL || retval[0] == '\0')
+ {
+ /* Next comes the name of the desired category. */
+ retval = getenv (categoryname);
+ if (retval == NULL || retval[0] == '\0')
+ {
+ /* Last possibility is the LANG environment variable. */
+ retval = getenv ("LANG");
+ if (retval == NULL || retval[0] == '\0')
+ /* We use C as the default domain. POSIX says this is
+ implementation defined. */
+ retval = "C";
+ }
+ }
+# endif
+
+ return retval;
+
+#else /* WIN32 */
+
+ /* Return an XPG style locale name language[_territory][@modifier].
+ Don't even bother determining the codeset; it's not useful in this
+ context, because message catalogs are not specific to a single
+ codeset. */
+
+ LCID lcid;
+ LANGID langid;
+ int primary, sub;
+
+ /* Let the user override the system settings through environment
+ variables, as on POSIX systems. */
+ retval = getenv ("LC_ALL");
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+ retval = getenv (categoryname);
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+ retval = getenv ("LANG");
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+
+ /* Use native Win32 API locale ID. */
+ lcid = GetThreadLocale ();
+
+ /* Strip off the sorting rules, keep only the language part. */
+ langid = LANGIDFROMLCID (lcid);
+
+ /* Split into language and territory part. */
+ primary = PRIMARYLANGID (langid);
+ sub = SUBLANGID (langid);
+
+ /* Dispatch on language.
+ See also http://www.unicode.org/unicode/onlinedat/languages.html .
+ For details about languages, see http://www.ethnologue.com/ . */
+ switch (primary)
+ {
+ case LANG_AFRIKAANS: return "af_ZA";
+ case LANG_ALBANIAN: return "sq_AL";
+ case 0x5e: /* AMHARIC */ return "am_ET";
+ case LANG_ARABIC:
+ switch (sub)
+ {
+ case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA";
+ case SUBLANG_ARABIC_IRAQ: return "ar_IQ";
+ case SUBLANG_ARABIC_EGYPT: return "ar_EG";
+ case SUBLANG_ARABIC_LIBYA: return "ar_LY";
+ case SUBLANG_ARABIC_ALGERIA: return "ar_DZ";
+ case SUBLANG_ARABIC_MOROCCO: return "ar_MA";
+ case SUBLANG_ARABIC_TUNISIA: return "ar_TN";
+ case SUBLANG_ARABIC_OMAN: return "ar_OM";
+ case SUBLANG_ARABIC_YEMEN: return "ar_YE";
+ case SUBLANG_ARABIC_SYRIA: return "ar_SY";
+ case SUBLANG_ARABIC_JORDAN: return "ar_JO";
+ case SUBLANG_ARABIC_LEBANON: return "ar_LB";
+ case SUBLANG_ARABIC_KUWAIT: return "ar_KW";
+ case SUBLANG_ARABIC_UAE: return "ar_AE";
+ case SUBLANG_ARABIC_BAHRAIN: return "ar_BH";
+ case SUBLANG_ARABIC_QATAR: return "ar_QA";
+ }
+ return "ar";
+ case LANG_ARMENIAN: return "hy_AM";
+ case LANG_ASSAMESE: return "as_IN";
+ case LANG_AZERI:
+ switch (sub)
+ {
+ /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */
+ case SUBLANG_AZERI_LATIN: return "az_AZ@latin";
+ case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic";
+ }
+ return "az";
+ case LANG_BASQUE:
+ return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */
+ case LANG_BELARUSIAN: return "be_BY";
+ case LANG_BENGALI: return "bn_IN";
+ case LANG_BULGARIAN: return "bg_BG";
+ case 0x55: /* BURMESE */ return "my_MM";
+ case 0x53: /* CAMBODIAN */ return "km_KH";
+ case LANG_CATALAN: return "ca_ES";
+ case 0x5c: /* CHEROKEE */ return "chr_US";
+ case LANG_CHINESE:
+ switch (sub)
+ {
+ case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW";
+ case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN";
+ case SUBLANG_CHINESE_HONGKONG: return "zh_HK";
+ case SUBLANG_CHINESE_SINGAPORE: return "zh_SG";
+ case SUBLANG_CHINESE_MACAU: return "zh_MO";
+ }
+ return "zh";
+ case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN
+ * What used to be called Serbo-Croatian
+ * should really now be two separate
+ * languages because of political reasons.
+ * (Says tml, who knows nothing about Serbian
+ * or Croatian.)
+ * (I can feel those flames coming already.)
+ */
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "hr_HR";
+ case SUBLANG_SERBIAN_LATIN: return "sr_YU";
+ case SUBLANG_SERBIAN_CYRILLIC: return "sr_YU@cyrillic";
+ }
+ return "hr";
+ case LANG_CZECH: return "cs_CZ";
+ case LANG_DANISH: return "da_DK";
+ case LANG_DIVEHI: return "div_MV";
+ case LANG_DUTCH:
+ switch (sub)
+ {
+ case SUBLANG_DUTCH: return "nl_NL";
+ case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
+ }
+ return "nl";
+ case 0x66: /* EDO */ return "bin_NG";
+ case LANG_ENGLISH:
+ switch (sub)
+ {
+ /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought
+ * English was the language spoken in England.
+ * Oh well.
+ */
+ case SUBLANG_ENGLISH_US: return "en_US";
+ case SUBLANG_ENGLISH_UK: return "en_GB";
+ case SUBLANG_ENGLISH_AUS: return "en_AU";
+ case SUBLANG_ENGLISH_CAN: return "en_CA";
+ case SUBLANG_ENGLISH_NZ: return "en_NZ";
+ case SUBLANG_ENGLISH_EIRE: return "en_IE";
+ case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA";
+ case SUBLANG_ENGLISH_JAMAICA: return "en_JM";
+ case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */
+ case SUBLANG_ENGLISH_BELIZE: return "en_BZ";
+ case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
+ case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
+ case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
+ }
+ return "en";
+ case LANG_ESTONIAN: return "et_EE";
+ case LANG_FAEROESE: return "fo_FO";
+ case LANG_FARSI: return "fa_IR";
+ case LANG_FINNISH: return "fi_FI";
+ case LANG_FRENCH:
+ switch (sub)
+ {
+ case SUBLANG_FRENCH: return "fr_FR";
+ case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE";
+ case SUBLANG_FRENCH_CANADIAN: return "fr_CA";
+ case SUBLANG_FRENCH_SWISS: return "fr_CH";
+ case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
+ case SUBLANG_FRENCH_MONACO: return "fr_MC";
+ }
+ return "fr";
+ case 0x62: /* FRISIAN */ return "fy_NL";
+ case 0x67: /* FULFULDE */ return "ful_NG";
+ case 0x3c: /* GAELIC */
+ switch (sub)
+ {
+ case 0x01: /* SCOTTISH */ return "gd_GB";
+ case 0x02: /* IRISH */ return "ga_IE";
+ }
+ return "C";
+ case LANG_GALICIAN: return "gl_ES";
+ case LANG_GEORGIAN: return "ka_GE";
+ case LANG_GERMAN:
+ switch (sub)
+ {
+ case SUBLANG_GERMAN: return "de_DE";
+ case SUBLANG_GERMAN_SWISS: return "de_CH";
+ case SUBLANG_GERMAN_AUSTRIAN: return "de_AT";
+ case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU";
+ case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI";
+ }
+ return "de";
+ case LANG_GREEK: return "el_GR";
+ case 0x74: /* GUARANI */ return "gn_PY";
+ case LANG_GUJARATI: return "gu_IN";
+ case 0x68: /* HAUSA */ return "ha_NG";
+ case 0x75: /* HAWAIIAN */
+ /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
+ or Hawaii Creole English ("cpe_US", 600000 speakers)? */
+ return "cpe_US";
+ case LANG_HEBREW: return "he_IL";
+ case LANG_HINDI: return "hi_IN";
+ case LANG_HUNGARIAN: return "hu_HU";
+ case 0x69: /* IBIBIO */ return "nic_NG";
+ case LANG_ICELANDIC: return "is_IS";
+ case 0x70: /* IGBO */ return "ibo_NG";
+ case LANG_INDONESIAN: return "id_ID";
+ case 0x5d: /* INUKTITUT */ return "iu_CA";
+ case LANG_ITALIAN:
+ switch (sub)
+ {
+ case SUBLANG_ITALIAN: return "it_IT";
+ case SUBLANG_ITALIAN_SWISS: return "it_CH";
+ }
+ return "it";
+ case LANG_JAPANESE: return "ja_JP";
+ case LANG_KANNADA: return "kn_IN";
+ case 0x71: /* KANURI */ return "kau_NG";
+ case LANG_KASHMIRI:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "ks_PK";
+ case SUBLANG_KASHMIRI_INDIA: return "ks_IN";
+ }
+ return "ks";
+ case LANG_KAZAK: return "kk_KZ";
+ case LANG_KONKANI:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "kok_IN";
+ case LANG_KOREAN: return "ko_KR";
+ case LANG_KYRGYZ: return "ky_KG";
+ case 0x54: /* LAO */ return "lo_LA";
+ case 0x76: /* LATIN */ return "la_VA";
+ case LANG_LATVIAN: return "lv_LV";
+ case LANG_LITHUANIAN: return "lt_LT";
+ case LANG_MACEDONIAN: return "mk_MK";
+ case LANG_MALAY:
+ switch (sub)
+ {
+ case SUBLANG_MALAY_MALAYSIA: return "ms_MY";
+ case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN";
+ }
+ return "ms";
+ case LANG_MALAYALAM: return "ml_IN";
+ case 0x3a: /* MALTESE */ return "mt_MT";
+ case LANG_MANIPURI:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "mni_IN";
+ case LANG_MARATHI: return "mr_IN";
+ case LANG_MONGOLIAN:
+ return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */
+ case LANG_NEPALI:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "ne_NP";
+ case SUBLANG_NEPALI_INDIA: return "ne_IN";
+ }
+ return "ne";
+ case LANG_NORWEGIAN:
+ switch (sub)
+ {
+ case SUBLANG_NORWEGIAN_BOKMAL: return "no_NO";
+ case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
+ }
+ return "no";
+ case LANG_ORIYA: return "or_IN";
+ case 0x72: /* OROMO */ return "om_ET";
+ case 0x79: /* PAPIAMENTU */ return "pap_AN";
+ case 0x63: /* PASHTO */
+ return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */
+ case LANG_POLISH: return "pl_PL";
+ case LANG_PORTUGUESE:
+ switch (sub)
+ {
+ case SUBLANG_PORTUGUESE: return "pt_PT";
+ /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT.
+ Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */
+ case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
+ }
+ return "pt";
+ case LANG_PUNJABI: return "pa_IN";
+ case 0x17: /* RHAETO-ROMANCE */ return "rm_CH";
+ case LANG_ROMANIAN: return "ro_RO";
+ case LANG_RUSSIAN:
+ return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA". */
+ case 0x3b: /* SAMI */ return "se_NO";
+ case LANG_SANSKRIT: return "sa_IN";
+ case LANG_SINDHI: return "sd";
+ case 0x5b: /* SINHALESE */ return "si_LK";
+ case LANG_SLOVAK: return "sk_SK";
+ case LANG_SLOVENIAN: return "sl_SI";
+ case 0x77: /* SOMALI */ return "so_SO";
+ case LANG_SORBIAN:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "wen_DE";
+ case LANG_SPANISH:
+ switch (sub)
+ {
+ case SUBLANG_SPANISH: return "es_ES";
+ case SUBLANG_SPANISH_MEXICAN: return "es_MX";
+ case SUBLANG_SPANISH_MODERN:
+ return "es_ES@modern"; /* not seen on Unix */
+ case SUBLANG_SPANISH_GUATEMALA: return "es_GT";
+ case SUBLANG_SPANISH_COSTA_RICA: return "es_CR";
+ case SUBLANG_SPANISH_PANAMA: return "es_PA";
+ case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO";
+ case SUBLANG_SPANISH_VENEZUELA: return "es_VE";
+ case SUBLANG_SPANISH_COLOMBIA: return "es_CO";
+ case SUBLANG_SPANISH_PERU: return "es_PE";
+ case SUBLANG_SPANISH_ARGENTINA: return "es_AR";
+ case SUBLANG_SPANISH_ECUADOR: return "es_EC";
+ case SUBLANG_SPANISH_CHILE: return "es_CL";
+ case SUBLANG_SPANISH_URUGUAY: return "es_UY";
+ case SUBLANG_SPANISH_PARAGUAY: return "es_PY";
+ case SUBLANG_SPANISH_BOLIVIA: return "es_BO";
+ case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV";
+ case SUBLANG_SPANISH_HONDURAS: return "es_HN";
+ case SUBLANG_SPANISH_NICARAGUA: return "es_NI";
+ case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
+ }
+ return "es";
+ case 0x30: /* SUTU */ return "bnt_TZ";
+ case LANG_SWAHILI: return "sw_KE";
+ case LANG_SWEDISH:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "sv_SE";
+ case SUBLANG_SWEDISH_FINLAND: return "sv_FI";
+ }
+ return "sv";
+ case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */
+ case 0x64: /* TAGALOG */ return "tl_PH";
+ case 0x28: /* TAJIK */ return "tg_TJ";
+ case 0x5f: /* TAMAZIGHT */ return "ber_MA";
+ case LANG_TAMIL:
+ return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */
+ case LANG_TATAR: return "tt_RU";
+ case LANG_TELUGU: return "te_IN";
+ case LANG_THAI: return "th_TH";
+ case 0x51: /* TIBETAN */ return "bo_CN";
+ case 0x73: /* TIGRINYA */ return "ti_ET";
+ case 0x31: /* TSONGA */ return "ts_ZA";
+ case LANG_TURKISH: return "tr_TR";
+ case 0x42: /* TURKMEN */ return "tk_TM";
+ case LANG_UKRAINIAN: return "uk_UA";
+ case LANG_URDU:
+ switch (sub)
+ {
+ case SUBLANG_URDU_PAKISTAN: return "ur_PK";
+ case SUBLANG_URDU_INDIA: return "ur_IN";
+ }
+ return "ur";
+ case LANG_UZBEK:
+ switch (sub)
+ {
+ /* FIXME: Adjust this when Uzbek locales appear on Unix. */
+ case SUBLANG_UZBEK_LATIN: return "uz_UZ@latin";
+ case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic";
+ }
+ return "uz";
+ case 0x33: /* VENDA */ return "ven_ZA";
+ case LANG_VIETNAMESE: return "vi_VN";
+ case 0x52: /* WELSH */ return "cy_GB";
+ case 0x34: /* XHOSA */ return "xh_ZA";
+ case 0x78: /* YI */ return "sit_CN";
+ case 0x3d: /* YIDDISH */ return "yi_IL";
+ case 0x6a: /* YORUBA */ return "yo_NG";
+ case 0x35: /* ZULU */ return "zu_ZA";
+ default: return "C";
+ }
+
+#endif
+}
diff --git a/intl/log.c b/intl/log.c
new file mode 100644
index 000000000000..2ce2d02c5862
--- /dev/null
+++ b/intl/log.c
@@ -0,0 +1,104 @@
+/* Log file output.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ 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 Bruno Haible <bruno@clisp.org>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Print an ASCII string with quotes and escape sequences where needed. */
+static void
+print_escaped (stream, str)
+ FILE *stream;
+ const char *str;
+{
+ putc ('"', stream);
+ for (; *str != '\0'; str++)
+ if (*str == '\n')
+ {
+ fputs ("\\n\"", stream);
+ if (str[1] == '\0')
+ return;
+ fputs ("\n\"", stream);
+ }
+ else
+ {
+ if (*str == '"' || *str == '\\')
+ putc ('\\', stream);
+ putc (*str, stream);
+ }
+ putc ('"', stream);
+}
+
+/* Add to the log file an entry denoting a failed translation. */
+void
+_nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural)
+ const char *logfilename;
+ const char *domainname;
+ const char *msgid1;
+ const char *msgid2;
+ int plural;
+{
+ static char *last_logfilename = NULL;
+ static FILE *last_logfile = NULL;
+ FILE *logfile;
+
+ /* Can we reuse the last opened logfile? */
+ if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0)
+ {
+ /* Close the last used logfile. */
+ if (last_logfilename != NULL)
+ {
+ if (last_logfile != NULL)
+ {
+ fclose (last_logfile);
+ last_logfile = NULL;
+ }
+ free (last_logfilename);
+ last_logfilename = NULL;
+ }
+ /* Open the logfile. */
+ last_logfilename = (char *) malloc (strlen (logfilename) + 1);
+ if (last_logfilename == NULL)
+ return;
+ strcpy (last_logfilename, logfilename);
+ last_logfile = fopen (logfilename, "a");
+ if (last_logfile == NULL)
+ return;
+ }
+ logfile = last_logfile;
+
+ fprintf (logfile, "domain ");
+ print_escaped (logfile, domainname);
+ fprintf (logfile, "\nmsgid ");
+ print_escaped (logfile, msgid1);
+ if (plural)
+ {
+ fprintf (logfile, "\nmsgid_plural ");
+ print_escaped (logfile, msgid2);
+ fprintf (logfile, "\nmsgstr[0] \"\"\n");
+ }
+ else
+ fprintf (logfile, "\nmsgstr \"\"\n");
+ putc ('\n', logfile);
+}
diff --git a/intl/ngettext.c b/intl/ngettext.c
new file mode 100644
index 000000000000..4a3186c03b51
--- /dev/null
+++ b/intl/ngettext.c
@@ -0,0 +1,68 @@
+/* Implementation of ngettext(3) function.
+ Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h> /* Just for NULL. */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+#include <locale.h>
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define NGETTEXT __ngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define NGETTEXT libintl_ngettext
+# define DCNGETTEXT libintl_dcngettext
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+char *
+NGETTEXT (msgid1, msgid2, n)
+ const char *msgid1;
+ const char *msgid2;
+ unsigned long int n;
+{
+ return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__ngettext, ngettext);
+#endif
diff --git a/intl/osdep.c b/intl/osdep.c
new file mode 100644
index 000000000000..83a96a73e038
--- /dev/null
+++ b/intl/osdep.c
@@ -0,0 +1,24 @@
+/* OS dependent parts of libintl.
+ Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ 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 defined __EMX__
+# include "os2compat.c"
+#else
+/* Avoid AIX compiler warning. */
+typedef int dummy;
+#endif
diff --git a/intl/plural-exp.c b/intl/plural-exp.c
new file mode 100644
index 000000000000..be96173e4d6e
--- /dev/null
+++ b/intl/plural-exp.c
@@ -0,0 +1,156 @@
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "plural-exp.h"
+
+#if (defined __GNUC__ && !defined __APPLE_CC__) \
+ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
+
+/* These structs are the constant expression for the germanic plural
+ form determination. It represents the expression "n != 1". */
+static const struct expression plvar =
+{
+ .nargs = 0,
+ .operation = var,
+};
+static const struct expression plone =
+{
+ .nargs = 0,
+ .operation = num,
+ .val =
+ {
+ .num = 1
+ }
+};
+struct expression GERMANIC_PLURAL =
+{
+ .nargs = 2,
+ .operation = not_equal,
+ .val =
+ {
+ .args =
+ {
+ [0] = (struct expression *) &plvar,
+ [1] = (struct expression *) &plone
+ }
+ }
+};
+
+# define INIT_GERMANIC_PLURAL()
+
+#else
+
+/* For compilers without support for ISO C 99 struct/union initializers:
+ Initialization at run-time. */
+
+static struct expression plvar;
+static struct expression plone;
+struct expression GERMANIC_PLURAL;
+
+static void
+init_germanic_plural ()
+{
+ if (plone.val.num == 0)
+ {
+ plvar.nargs = 0;
+ plvar.operation = var;
+
+ plone.nargs = 0;
+ plone.operation = num;
+ plone.val.num = 1;
+
+ GERMANIC_PLURAL.nargs = 2;
+ GERMANIC_PLURAL.operation = not_equal;
+ GERMANIC_PLURAL.val.args[0] = &plvar;
+ GERMANIC_PLURAL.val.args[1] = &plone;
+ }
+}
+
+# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
+
+#endif
+
+void
+internal_function
+EXTRACT_PLURAL_EXPRESSION (nullentry, pluralp, npluralsp)
+ const char *nullentry;
+ struct expression **pluralp;
+ unsigned long int *npluralsp;
+{
+ if (nullentry != NULL)
+ {
+ const char *plural;
+ const char *nplurals;
+
+ plural = strstr (nullentry, "plural=");
+ nplurals = strstr (nullentry, "nplurals=");
+ if (plural == NULL || nplurals == NULL)
+ goto no_plural;
+ else
+ {
+ char *endp;
+ unsigned long int n;
+ struct parse_args args;
+
+ /* First get the number. */
+ nplurals += 9;
+ while (*nplurals != '\0' && isspace ((unsigned char) *nplurals))
+ ++nplurals;
+ if (!(*nplurals >= '0' && *nplurals <= '9'))
+ goto no_plural;
+#if defined HAVE_STRTOUL || defined _LIBC
+ n = strtoul (nplurals, &endp, 10);
+#else
+ for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
+ n = n * 10 + (*endp - '0');
+#endif
+ if (nplurals == endp)
+ goto no_plural;
+ *npluralsp = n;
+
+ /* Due to the restrictions bison imposes onto the interface of the
+ scanner function we have to put the input string and the result
+ passed up from the parser into the same structure which address
+ is passed down to the parser. */
+ plural += 7;
+ args.cp = plural;
+ if (PLURAL_PARSE (&args) != 0)
+ goto no_plural;
+ *pluralp = args.res;
+ }
+ }
+ else
+ {
+ /* By default we are using the Germanic form: singular form only
+ for `one', the plural form otherwise. Yes, this is also what
+ English is using since English is a Germanic language. */
+ no_plural:
+ INIT_GERMANIC_PLURAL ();
+ *pluralp = &GERMANIC_PLURAL;
+ *npluralsp = 2;
+ }
+}
diff --git a/intl/plural-exp.h b/intl/plural-exp.h
new file mode 100644
index 000000000000..cedc0db68824
--- /dev/null
+++ b/intl/plural-exp.h
@@ -0,0 +1,126 @@
+/* Expression parsing and evaluation for plural form selection.
+ Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ 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 _PLURAL_EXP_H
+#define _PLURAL_EXP_H
+
+#ifndef PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+# define PARAMS(args) args
+# else
+# define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+
+/* This is the representation of the expressions to determine the
+ plural form. */
+struct expression
+{
+ int nargs; /* Number of arguments. */
+ enum operator
+ {
+ /* Without arguments: */
+ var, /* The variable "n". */
+ num, /* Decimal number. */
+ /* Unary operators: */
+ lnot, /* Logical NOT. */
+ /* Binary operators: */
+ mult, /* Multiplication. */
+ divide, /* Division. */
+ module, /* Modulo operation. */
+ plus, /* Addition. */
+ minus, /* Subtraction. */
+ less_than, /* Comparison. */
+ greater_than, /* Comparison. */
+ less_or_equal, /* Comparison. */
+ greater_or_equal, /* Comparison. */
+ equal, /* Comparison for equality. */
+ not_equal, /* Comparison for inequality. */
+ land, /* Logical AND. */
+ lor, /* Logical OR. */
+ /* Ternary operators: */
+ qmop /* Question mark operator. */
+ } operation;
+ union
+ {
+ unsigned long int num; /* Number value for `num'. */
+ struct expression *args[3]; /* Up to three arguments. */
+ } val;
+};
+
+/* This is the data structure to pass information to the parser and get
+ the result in a thread-safe way. */
+struct parse_args
+{
+ const char *cp;
+ struct expression *res;
+};
+
+
+/* Names for the libintl functions are a problem. This source code is used
+ 1. in the GNU C Library library,
+ 2. in the GNU libintl library,
+ 3. in the GNU gettext tools.
+ The function names in each situation must be different, to allow for
+ binary incompatible changes in 'struct expression'. Furthermore,
+ 1. in the GNU C Library library, the names have a __ prefix,
+ 2.+3. in the GNU libintl library and in the GNU gettext tools, the names
+ must follow ANSI C and not start with __.
+ So we have to distinguish the three cases. */
+#ifdef _LIBC
+# define FREE_EXPRESSION __gettext_free_exp
+# define PLURAL_PARSE __gettextparse
+# define GERMANIC_PLURAL __gettext_germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural
+#elif defined (IN_LIBINTL)
+# define FREE_EXPRESSION libintl_gettext_free_exp
+# define PLURAL_PARSE libintl_gettextparse
+# define GERMANIC_PLURAL libintl_gettext_germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural
+#else
+# define FREE_EXPRESSION free_plural_expression
+# define PLURAL_PARSE parse_plural_expression
+# define GERMANIC_PLURAL germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
+#endif
+
+extern void FREE_EXPRESSION PARAMS ((struct expression *exp))
+ internal_function;
+extern int PLURAL_PARSE PARAMS ((void *arg));
+extern struct expression GERMANIC_PLURAL attribute_hidden;
+extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry,
+ struct expression **pluralp,
+ unsigned long int *npluralsp))
+ internal_function;
+
+#if !defined (_LIBC) && !defined (IN_LIBINTL)
+extern unsigned long int plural_eval PARAMS ((struct expression *pexp,
+ unsigned long int n));
+#endif
+
+#endif /* _PLURAL_EXP_H */
diff --git a/intl/plural.c b/intl/plural.c
new file mode 100644
index 000000000000..951303a16f5e
--- /dev/null
+++ b/intl/plural.c
@@ -0,0 +1,1518 @@
+/* A Bison parser, made from plural.y
+ by GNU bison 1.35. */
+
+#define YYBISON 1 /* Identify Bison output. */
+
+#define yyparse __gettextparse
+#define yylex __gettextlex
+#define yyerror __gettexterror
+#define yylval __gettextlval
+#define yychar __gettextchar
+#define yydebug __gettextdebug
+#define yynerrs __gettextnerrs
+# define EQUOP2 257
+# define CMPOP2 258
+# define ADDOP2 259
+# define MULOP2 260
+# define NUMBER 261
+
+#line 1 "plural.y"
+
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* The bison generated parser uses alloca. AIX 3 forces us to put this
+ declaration at the beginning of the file. The declaration in bison's
+ skeleton file comes too late. This must come before <config.h>
+ because <config.h> may include arbitrary system headers. */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include "plural-exp.h"
+
+/* The main function generated by the parser is called __gettextparse,
+ but we want it to be called PLURAL_PARSE. */
+#ifndef _LIBC
+# define __gettextparse PLURAL_PARSE
+#endif
+
+#define YYLEX_PARAM &((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM arg
+
+#line 49 "plural.y"
+#ifndef YYSTYPE
+typedef union {
+ unsigned long int num;
+ enum operator op;
+ struct expression *exp;
+} yystype;
+# define YYSTYPE yystype
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+#line 55 "plural.y"
+
+/* Prototypes for local functions. */
+static struct expression *new_exp PARAMS ((int nargs, enum operator op,
+ struct expression * const *args));
+static inline struct expression *new_exp_0 PARAMS ((enum operator op));
+static inline struct expression *new_exp_1 PARAMS ((enum operator op,
+ struct expression *right));
+static struct expression *new_exp_2 PARAMS ((enum operator op,
+ struct expression *left,
+ struct expression *right));
+static inline struct expression *new_exp_3 PARAMS ((enum operator op,
+ struct expression *bexp,
+ struct expression *tbranch,
+ struct expression *fbranch));
+static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
+static void yyerror PARAMS ((const char *str));
+
+/* Allocation of expressions. */
+
+static struct expression *
+new_exp (nargs, op, args)
+ int nargs;
+ enum operator op;
+ struct expression * const *args;
+{
+ int i;
+ struct expression *newp;
+
+ /* If any of the argument could not be malloc'ed, just return NULL. */
+ for (i = nargs - 1; i >= 0; i--)
+ if (args[i] == NULL)
+ goto fail;
+
+ /* Allocate a new expression. */
+ newp = (struct expression *) malloc (sizeof (*newp));
+ if (newp != NULL)
+ {
+ newp->nargs = nargs;
+ newp->operation = op;
+ for (i = nargs - 1; i >= 0; i--)
+ newp->val.args[i] = args[i];
+ return newp;
+ }
+
+ fail:
+ for (i = nargs - 1; i >= 0; i--)
+ FREE_EXPRESSION (args[i]);
+
+ return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (op)
+ enum operator op;
+{
+ return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (op, right)
+ enum operator op;
+ struct expression *right;
+{
+ struct expression *args[1];
+
+ args[0] = right;
+ return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (op, left, right)
+ enum operator op;
+ struct expression *left;
+ struct expression *right;
+{
+ struct expression *args[2];
+
+ args[0] = left;
+ args[1] = right;
+ return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (op, bexp, tbranch, fbranch)
+ enum operator op;
+ struct expression *bexp;
+ struct expression *tbranch;
+ struct expression *fbranch;
+{
+ struct expression *args[3];
+
+ args[0] = bexp;
+ args[1] = tbranch;
+ args[2] = fbranch;
+ return new_exp (3, op, args);
+}
+
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+
+
+#define YYFINAL 27
+#define YYFLAG -32768
+#define YYNTBASE 16
+
+/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
+#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18)
+
+/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
+static const 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, 10, 2, 2, 2, 2, 5, 2,
+ 14, 15, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 12, 2,
+ 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 4, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 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, 6, 7, 8,
+ 9, 11
+};
+
+#if YYDEBUG
+static const short yyprhs[] =
+{
+ 0, 0, 2, 8, 12, 16, 20, 24, 28, 32,
+ 35, 37, 39
+};
+static const short yyrhs[] =
+{
+ 17, 0, 17, 3, 17, 12, 17, 0, 17, 4,
+ 17, 0, 17, 5, 17, 0, 17, 6, 17, 0,
+ 17, 7, 17, 0, 17, 8, 17, 0, 17, 9,
+ 17, 0, 10, 17, 0, 13, 0, 11, 0, 14,
+ 17, 15, 0
+};
+
+#endif
+
+#if YYDEBUG
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const short yyrline[] =
+{
+ 0, 174, 182, 186, 190, 194, 198, 202, 206, 210,
+ 214, 218, 223
+};
+#endif
+
+
+#if (YYDEBUG) || defined YYERROR_VERBOSE
+
+/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
+static const char *const yytname[] =
+{
+ "$", "error", "$undefined.", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2",
+ "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'",
+ "start", "exp", 0
+};
+#endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const short yyr1[] =
+{
+ 0, 16, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const short yyr2[] =
+{
+ 0, 1, 5, 3, 3, 3, 3, 3, 3, 2,
+ 1, 1, 3
+};
+
+/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
+ doesn't specify something else to do. Zero means the default is an
+ error. */
+static const short yydefact[] =
+{
+ 0, 0, 11, 10, 0, 1, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 12, 0, 3, 4, 5,
+ 6, 7, 8, 0, 2, 0, 0, 0
+};
+
+static const short yydefgoto[] =
+{
+ 25, 5
+};
+
+static const short yypact[] =
+{
+ -9, -9,-32768,-32768, -9, 34,-32768, 11, -9, -9,
+ -9, -9, -9, -9, -9,-32768, 24, 39, 43, 16,
+ 26, -3,-32768, -9, 34, 21, 53,-32768
+};
+
+static const short yypgoto[] =
+{
+ -32768, -1
+};
+
+
+#define YYLAST 53
+
+
+static const short yytable[] =
+{
+ 6, 1, 2, 7, 3, 4, 14, 16, 17, 18,
+ 19, 20, 21, 22, 8, 9, 10, 11, 12, 13,
+ 14, 26, 24, 12, 13, 14, 15, 8, 9, 10,
+ 11, 12, 13, 14, 13, 14, 23, 8, 9, 10,
+ 11, 12, 13, 14, 10, 11, 12, 13, 14, 11,
+ 12, 13, 14, 27
+};
+
+static const short yycheck[] =
+{
+ 1, 10, 11, 4, 13, 14, 9, 8, 9, 10,
+ 11, 12, 13, 14, 3, 4, 5, 6, 7, 8,
+ 9, 0, 23, 7, 8, 9, 15, 3, 4, 5,
+ 6, 7, 8, 9, 8, 9, 12, 3, 4, 5,
+ 6, 7, 8, 9, 5, 6, 7, 8, 9, 6,
+ 7, 8, 9, 0
+};
+#define YYPURE 1
+
+/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
+#line 3 "/usr/local/share/bison/bison.simple"
+
+/* Skeleton output parser for bison,
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 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. */
+
+/* This is the parser code that is written into each bison parser when
+ the %semantic_parser declaration is not specified in the grammar.
+ It was written by Richard Stallman by simplifying the hairy parser
+ used when %semantic_parser is specified. */
+
+/* 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. */
+
+#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# if YYSTACK_USE_ALLOCA
+# define YYSTACK_ALLOC alloca
+# else
+# ifndef YYSTACK_USE_ALLOCA
+# if defined (alloca) || defined (_ALLOCA_H)
+# define YYSTACK_ALLOC alloca
+# else
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# else
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# endif
+# define YYSTACK_ALLOC malloc
+# define YYSTACK_FREE free
+# endif
+#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
+
+
+#if (! defined (yyoverflow) \
+ && (! defined (__cplusplus) \
+ || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ short yyss;
+ YYSTYPE yyvs;
+# if YYLSP_NEEDED
+ YYLTYPE yyls;
+# endif
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# if YYLSP_NEEDED
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
+ + 2 * YYSTACK_GAP_MAX)
+# else
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAX)
+# endif
+
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ register 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_MAX; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (0)
+
+#endif
+
+
+#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)
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# endif
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#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 yyerrlab1
+/* 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); \
+ yychar1 = YYTRANSLATE (yychar); \
+ YYPOPSTACK; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror ("syntax error: cannot back up"); \
+ YYERROR; \
+ } \
+while (0)
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+ are run).
+
+ When YYLLOC_DEFAULT is run, CURRENT is set the location of the
+ first token. By default, to implement support for ranges, extend
+ its range to the last symbol. */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ Current.last_line = Rhs[N].last_line; \
+ Current.last_column = Rhs[N].last_column;
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#if YYPURE
+# if YYLSP_NEEDED
+# ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
+# else
+# define YYLEX yylex (&yylval, &yylloc)
+# endif
+# else /* !YYLSP_NEEDED */
+# ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+# else
+# define YYLEX yylex (&yylval)
+# endif
+# endif /* !YYLSP_NEEDED */
+#else /* !YYPURE */
+# define YYLEX yylex ()
+#endif /* !YYPURE */
+
+
+/* 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)
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+#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
+ SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#if YYMAXDEPTH == 0
+# undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+#ifdef 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
+{
+ register 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
+{
+ register char *yyd = yydest;
+ register const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+#endif
+
+#line 315 "/usr/local/share/bison/bison.simple"
+
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+ into yyparse. The argument should have type void *.
+ It should actually point to an object.
+ Grammar actions can access the variable by casting it
+ to the proper pointer type. */
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+# define YYPARSE_PARAM_DECL
+# else
+# define YYPARSE_PARAM_ARG YYPARSE_PARAM
+# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+# endif
+#else /* !YYPARSE_PARAM */
+# define YYPARSE_PARAM_ARG
+# define YYPARSE_PARAM_DECL
+#endif /* !YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes. */
+#ifdef __GNUC__
+# ifdef YYPARSE_PARAM
+int yyparse (void *);
+# else
+int yyparse (void);
+# endif
+#endif
+
+/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
+ variables are global, or local to YYPARSE. */
+
+#define YY_DECL_NON_LSP_VARIABLES \
+/* The lookahead symbol. */ \
+int yychar; \
+ \
+/* The semantic value of the lookahead symbol. */ \
+YYSTYPE yylval; \
+ \
+/* Number of parse errors so far. */ \
+int yynerrs;
+
+#if YYLSP_NEEDED
+# define YY_DECL_VARIABLES \
+YY_DECL_NON_LSP_VARIABLES \
+ \
+/* Location data for the lookahead symbol. */ \
+YYLTYPE yylloc;
+#else
+# define YY_DECL_VARIABLES \
+YY_DECL_NON_LSP_VARIABLES
+#endif
+
+
+/* If nonreentrant, generate the variables here. */
+
+#if !YYPURE
+YY_DECL_VARIABLES
+#endif /* !YYPURE */
+
+int
+yyparse (YYPARSE_PARAM_ARG)
+ YYPARSE_PARAM_DECL
+{
+ /* If reentrant, generate the variables here. */
+#if YYPURE
+ YY_DECL_VARIABLES
+#endif /* !YYPURE */
+
+ register int yystate;
+ register int yyn;
+ int yyresult;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+ /* Lookahead token as an internal (translated) token number. */
+ int yychar1 = 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 yyssa[YYINITDEPTH];
+ short *yyss = yyssa;
+ register short *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ register YYSTYPE *yyvsp;
+
+#if YYLSP_NEEDED
+ /* The location stack. */
+ YYLTYPE yylsa[YYINITDEPTH];
+ YYLTYPE *yyls = yylsa;
+ YYLTYPE *yylsp;
+#endif
+
+#if YYLSP_NEEDED
+# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
+#else
+# define YYPOPSTACK (yyvsp--, yyssp--)
+#endif
+
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+#if YYLSP_NEEDED
+ YYLTYPE yyloc;
+#endif
+
+ /* 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;
+#if YYLSP_NEEDED
+ yylsp = yyls;
+#endif
+ 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 (yyssp >= yyss + yystacksize - 1)
+ {
+ /* 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 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. */
+# if YYLSP_NEEDED
+ YYLTYPE *yyls1 = yyls;
+ /* This used to be a conditional around just the two extra args,
+ but that might be undefined if yyoverflow is a macro. */
+ yyoverflow ("parser stack overflow",
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yyls1, yysize * sizeof (*yylsp),
+ &yystacksize);
+ yyls = yyls1;
+# else
+ yyoverflow ("parser stack overflow",
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+# endif
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyoverflowlab;
+# else
+ /* Extend the stack our own way. */
+ if (yystacksize >= YYMAXDEPTH)
+ goto yyoverflowlab;
+ yystacksize *= 2;
+ if (yystacksize > YYMAXDEPTH)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ short *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyoverflowlab;
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+# if YYLSP_NEEDED
+ YYSTACK_RELOCATE (yyls);
+# endif
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+#if YYLSP_NEEDED
+ yylsp = yyls + yysize - 1;
+#endif
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyssp >= yyss + yystacksize - 1)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ goto yybackup;
+
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+/* Do appropriate processing given the current state. */
+/* Read a lookahead token if we need one and don't already have one. */
+/* yyresume: */
+
+ /* First try to decide what to do without reference to lookahead token. */
+
+ yyn = yypact[yystate];
+ if (yyn == YYFLAG)
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* yychar is either YYEMPTY or YYEOF
+ or a valid token in external form. */
+
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ /* Convert token to internal form (in yychar1) for indexing tables with */
+
+ if (yychar <= 0) /* This means end of input. */
+ {
+ yychar1 = 0;
+ yychar = YYEOF; /* Don't call YYLEX any more */
+
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yychar1 = YYTRANSLATE (yychar);
+
+#if YYDEBUG
+ /* We have to keep this `#if YYDEBUG', since we use variables
+ which are defined only if `YYDEBUG' is set. */
+ if (yydebug)
+ {
+ YYFPRINTF (stderr, "Next token is %d (%s",
+ yychar, yytname[yychar1]);
+ /* Give the individual parser a way to print the precise
+ meaning of a token, for further debugging info. */
+# ifdef YYPRINT
+ YYPRINT (stderr, yychar, yylval);
+# endif
+ YYFPRINTF (stderr, ")\n");
+ }
+#endif
+ }
+
+ yyn += yychar1;
+ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+ goto yydefault;
+
+ yyn = yytable[yyn];
+
+ /* yyn is what to do for this token type in this state.
+ Negative => reduce, -yyn is rule number.
+ Positive => shift, yyn is new state.
+ New state is final state => don't bother to shift,
+ just return success.
+ 0, or most negative number => error. */
+
+ if (yyn < 0)
+ {
+ if (yyn == YYFLAG)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+ else if (yyn == 0)
+ goto yyerrlab;
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ /* Shift the lookahead token. */
+ YYDPRINTF ((stderr, "Shifting token %d (%s), ",
+ yychar, yytname[yychar1]));
+
+ /* Discard the token being shifted unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
+
+ *++yyvsp = yylval;
+#if YYLSP_NEEDED
+ *++yylsp = yylloc;
+#endif
+
+ /* 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 the semantic value of
+ the lookahead token. 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];
+
+#if YYLSP_NEEDED
+ /* Similarly for the default location. Let the user run additional
+ commands if for instance locations are ranges. */
+ yyloc = yylsp[1-yylen];
+ YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
+#endif
+
+#if YYDEBUG
+ /* We have to keep this `#if YYDEBUG', since we use variables which
+ are defined only if `YYDEBUG' is set. */
+ if (yydebug)
+ {
+ int yyi;
+
+ YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
+ yyn, yyrline[yyn]);
+
+ /* Print the symbols being reduced, and their result. */
+ for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
+ YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+ YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+ }
+#endif
+
+ switch (yyn) {
+
+case 1:
+#line 175 "plural.y"
+{
+ if (yyvsp[0].exp == NULL)
+ YYABORT;
+ ((struct parse_args *) arg)->res = yyvsp[0].exp;
+ }
+ break;
+case 2:
+#line 183 "plural.y"
+{
+ yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 3:
+#line 187 "plural.y"
+{
+ yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 4:
+#line 191 "plural.y"
+{
+ yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 5:
+#line 195 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 6:
+#line 199 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 7:
+#line 203 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 8:
+#line 207 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 9:
+#line 211 "plural.y"
+{
+ yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
+ }
+ break;
+case 10:
+#line 215 "plural.y"
+{
+ yyval.exp = new_exp_0 (var);
+ }
+ break;
+case 11:
+#line 219 "plural.y"
+{
+ if ((yyval.exp = new_exp_0 (num)) != NULL)
+ yyval.exp->val.num = yyvsp[0].num;
+ }
+ break;
+case 12:
+#line 224 "plural.y"
+{
+ yyval.exp = yyvsp[-1].exp;
+ }
+ break;
+}
+
+#line 705 "/usr/local/share/bison/bison.simple"
+
+
+ yyvsp -= yylen;
+ yyssp -= yylen;
+#if YYLSP_NEEDED
+ yylsp -= yylen;
+#endif
+
+#if YYDEBUG
+ if (yydebug)
+ {
+ short *yyssp1 = yyss - 1;
+ YYFPRINTF (stderr, "state stack now");
+ while (yyssp1 != yyssp)
+ YYFPRINTF (stderr, " %d", *++yyssp1);
+ YYFPRINTF (stderr, "\n");
+ }
+#endif
+
+ *++yyvsp = yyval;
+#if YYLSP_NEEDED
+ *++yylsp = yyloc;
+#endif
+
+ /* 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 - YYNTBASE] + *yyssp;
+ if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTBASE];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+
+#ifdef YYERROR_VERBOSE
+ yyn = yypact[yystate];
+
+ if (yyn > YYFLAG && yyn < YYLAST)
+ {
+ YYSIZE_T yysize = 0;
+ char *yymsg;
+ int yyx, yycount;
+
+ yycount = 0;
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ for (yyx = yyn < 0 ? -yyn : 0;
+ yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+ if (yycheck[yyx + yyn] == yyx)
+ yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+ yysize += yystrlen ("parse error, unexpected ") + 1;
+ yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
+ yymsg = (char *) YYSTACK_ALLOC (yysize);
+ if (yymsg != 0)
+ {
+ char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
+ yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
+
+ if (yycount < 5)
+ {
+ yycount = 0;
+ for (yyx = yyn < 0 ? -yyn : 0;
+ yyx < (int) (sizeof (yytname) / sizeof (char *));
+ yyx++)
+ if (yycheck[yyx + yyn] == yyx)
+ {
+ const char *yyq = ! yycount ? ", expecting " : " or ";
+ yyp = yystpcpy (yyp, yyq);
+ yyp = yystpcpy (yyp, yytname[yyx]);
+ yycount++;
+ }
+ }
+ yyerror (yymsg);
+ YYSTACK_FREE (yymsg);
+ }
+ else
+ yyerror ("parse error; also virtual memory exhausted");
+ }
+ else
+#endif /* defined (YYERROR_VERBOSE) */
+ yyerror ("parse error");
+ }
+ goto yyerrlab1;
+
+
+/*--------------------------------------------------.
+| yyerrlab1 -- error raised explicitly by an action |
+`--------------------------------------------------*/
+yyerrlab1:
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ /* return failure if at end of input */
+ if (yychar == YYEOF)
+ YYABORT;
+ YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
+ yychar, yytname[yychar1]));
+ yychar = YYEMPTY;
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+
+ yyerrstatus = 3; /* Each real token shifted decrements this */
+
+ goto yyerrhandle;
+
+
+/*-------------------------------------------------------------------.
+| yyerrdefault -- current state does not do anything special for the |
+| error token. |
+`-------------------------------------------------------------------*/
+yyerrdefault:
+#if 0
+ /* This is wrong; only states that explicitly want error tokens
+ should shift them. */
+
+ /* If its default is to accept any token, ok. Otherwise pop it. */
+ yyn = yydefact[yystate];
+ if (yyn)
+ goto yydefault;
+#endif
+
+
+/*---------------------------------------------------------------.
+| yyerrpop -- pop the current state because it cannot handle the |
+| error token |
+`---------------------------------------------------------------*/
+yyerrpop:
+ if (yyssp == yyss)
+ YYABORT;
+ yyvsp--;
+ yystate = *--yyssp;
+#if YYLSP_NEEDED
+ yylsp--;
+#endif
+
+#if YYDEBUG
+ if (yydebug)
+ {
+ short *yyssp1 = yyss - 1;
+ YYFPRINTF (stderr, "Error: state stack now");
+ while (yyssp1 != yyssp)
+ YYFPRINTF (stderr, " %d", *++yyssp1);
+ YYFPRINTF (stderr, "\n");
+ }
+#endif
+
+/*--------------.
+| yyerrhandle. |
+`--------------*/
+yyerrhandle:
+ yyn = yypact[yystate];
+ if (yyn == YYFLAG)
+ goto yyerrdefault;
+
+ yyn += YYTERROR;
+ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+ goto yyerrdefault;
+
+ yyn = yytable[yyn];
+ if (yyn < 0)
+ {
+ if (yyn == YYFLAG)
+ goto yyerrpop;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+ else if (yyn == 0)
+ goto yyerrpop;
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ YYDPRINTF ((stderr, "Shifting error token, "));
+
+ *++yyvsp = yylval;
+#if YYLSP_NEEDED
+ *++yylsp = yylloc;
+#endif
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+/*---------------------------------------------.
+| yyoverflowab -- parser overflow comes here. |
+`---------------------------------------------*/
+yyoverflowlab:
+ yyerror ("parser stack overflow");
+ yyresult = 2;
+ /* Fall through. */
+
+yyreturn:
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+ return yyresult;
+}
+#line 229 "plural.y"
+
+
+void
+internal_function
+FREE_EXPRESSION (exp)
+ struct expression *exp;
+{
+ if (exp == NULL)
+ return;
+
+ /* Handle the recursive case. */
+ switch (exp->nargs)
+ {
+ case 3:
+ FREE_EXPRESSION (exp->val.args[2]);
+ /* FALLTHROUGH */
+ case 2:
+ FREE_EXPRESSION (exp->val.args[1]);
+ /* FALLTHROUGH */
+ case 1:
+ FREE_EXPRESSION (exp->val.args[0]);
+ /* FALLTHROUGH */
+ default:
+ break;
+ }
+
+ free (exp);
+}
+
+
+static int
+yylex (lval, pexp)
+ YYSTYPE *lval;
+ const char **pexp;
+{
+ const char *exp = *pexp;
+ int result;
+
+ while (1)
+ {
+ if (exp[0] == '\0')
+ {
+ *pexp = exp;
+ return YYEOF;
+ }
+
+ if (exp[0] != ' ' && exp[0] != '\t')
+ break;
+
+ ++exp;
+ }
+
+ result = *exp++;
+ switch (result)
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ {
+ unsigned long int n = result - '0';
+ while (exp[0] >= '0' && exp[0] <= '9')
+ {
+ n *= 10;
+ n += exp[0] - '0';
+ ++exp;
+ }
+ lval->num = n;
+ result = NUMBER;
+ }
+ break;
+
+ case '=':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = equal;
+ result = EQUOP2;
+ }
+ else
+ result = YYERRCODE;
+ break;
+
+ case '!':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = not_equal;
+ result = EQUOP2;
+ }
+ break;
+
+ case '&':
+ case '|':
+ if (exp[0] == result)
+ ++exp;
+ else
+ result = YYERRCODE;
+ break;
+
+ case '<':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = less_or_equal;
+ }
+ else
+ lval->op = less_than;
+ result = CMPOP2;
+ break;
+
+ case '>':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = greater_or_equal;
+ }
+ else
+ lval->op = greater_than;
+ result = CMPOP2;
+ break;
+
+ case '*':
+ lval->op = mult;
+ result = MULOP2;
+ break;
+
+ case '/':
+ lval->op = divide;
+ result = MULOP2;
+ break;
+
+ case '%':
+ lval->op = module;
+ result = MULOP2;
+ break;
+
+ case '+':
+ lval->op = plus;
+ result = ADDOP2;
+ break;
+
+ case '-':
+ lval->op = minus;
+ result = ADDOP2;
+ break;
+
+ case 'n':
+ case '?':
+ case ':':
+ case '(':
+ case ')':
+ /* Nothing, just return the character. */
+ break;
+
+ case ';':
+ case '\n':
+ case '\0':
+ /* Be safe and let the user call this function again. */
+ --exp;
+ result = YYEOF;
+ break;
+
+ default:
+ result = YYERRCODE;
+#if YYDEBUG != 0
+ --exp;
+#endif
+ break;
+ }
+
+ *pexp = exp;
+
+ return result;
+}
+
+
+static void
+yyerror (str)
+ const char *str;
+{
+ /* Do nothing. We don't print error messages here. */
+}
diff --git a/intl/plural.y b/intl/plural.y
new file mode 100644
index 000000000000..3f75cf3dbbe4
--- /dev/null
+++ b/intl/plural.y
@@ -0,0 +1,409 @@
+%{
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+/* The bison generated parser uses alloca. AIX 3 forces us to put this
+ declaration at the beginning of the file. The declaration in bison's
+ skeleton file comes too late. This must come before <config.h>
+ because <config.h> may include arbitrary system headers. */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include "plural-exp.h"
+
+/* The main function generated by the parser is called __gettextparse,
+ but we want it to be called PLURAL_PARSE. */
+#ifndef _LIBC
+# define __gettextparse PLURAL_PARSE
+#endif
+
+#define YYLEX_PARAM &((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM arg
+%}
+%pure_parser
+%expect 7
+
+%union {
+ unsigned long int num;
+ enum operator op;
+ struct expression *exp;
+}
+
+%{
+/* Prototypes for local functions. */
+static struct expression *new_exp PARAMS ((int nargs, enum operator op,
+ struct expression * const *args));
+static inline struct expression *new_exp_0 PARAMS ((enum operator op));
+static inline struct expression *new_exp_1 PARAMS ((enum operator op,
+ struct expression *right));
+static struct expression *new_exp_2 PARAMS ((enum operator op,
+ struct expression *left,
+ struct expression *right));
+static inline struct expression *new_exp_3 PARAMS ((enum operator op,
+ struct expression *bexp,
+ struct expression *tbranch,
+ struct expression *fbranch));
+static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
+static void yyerror PARAMS ((const char *str));
+
+/* Allocation of expressions. */
+
+static struct expression *
+new_exp (nargs, op, args)
+ int nargs;
+ enum operator op;
+ struct expression * const *args;
+{
+ int i;
+ struct expression *newp;
+
+ /* If any of the argument could not be malloc'ed, just return NULL. */
+ for (i = nargs - 1; i >= 0; i--)
+ if (args[i] == NULL)
+ goto fail;
+
+ /* Allocate a new expression. */
+ newp = (struct expression *) malloc (sizeof (*newp));
+ if (newp != NULL)
+ {
+ newp->nargs = nargs;
+ newp->operation = op;
+ for (i = nargs - 1; i >= 0; i--)
+ newp->val.args[i] = args[i];
+ return newp;
+ }
+
+ fail:
+ for (i = nargs - 1; i >= 0; i--)
+ FREE_EXPRESSION (args[i]);
+
+ return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (op)
+ enum operator op;
+{
+ return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (op, right)
+ enum operator op;
+ struct expression *right;
+{
+ struct expression *args[1];
+
+ args[0] = right;
+ return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (op, left, right)
+ enum operator op;
+ struct expression *left;
+ struct expression *right;
+{
+ struct expression *args[2];
+
+ args[0] = left;
+ args[1] = right;
+ return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (op, bexp, tbranch, fbranch)
+ enum operator op;
+ struct expression *bexp;
+ struct expression *tbranch;
+ struct expression *fbranch;
+{
+ struct expression *args[3];
+
+ args[0] = bexp;
+ args[1] = tbranch;
+ args[2] = fbranch;
+ return new_exp (3, op, args);
+}
+
+%}
+
+/* This declares that all operators have the same associativity and the
+ precedence order as in C. See [Harbison, Steele: C, A Reference Manual].
+ There is no unary minus and no bitwise operators.
+ Operators with the same syntactic behaviour have been merged into a single
+ token, to save space in the array generated by bison. */
+%right '?' /* ? */
+%left '|' /* || */
+%left '&' /* && */
+%left EQUOP2 /* == != */
+%left CMPOP2 /* < > <= >= */
+%left ADDOP2 /* + - */
+%left MULOP2 /* * / % */
+%right '!' /* ! */
+
+%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
+%token <num> NUMBER
+%type <exp> exp
+
+%%
+
+start: exp
+ {
+ if ($1 == NULL)
+ YYABORT;
+ ((struct parse_args *) arg)->res = $1;
+ }
+ ;
+
+exp: exp '?' exp ':' exp
+ {
+ $$ = new_exp_3 (qmop, $1, $3, $5);
+ }
+ | exp '|' exp
+ {
+ $$ = new_exp_2 (lor, $1, $3);
+ }
+ | exp '&' exp
+ {
+ $$ = new_exp_2 (land, $1, $3);
+ }
+ | exp EQUOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | exp CMPOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | exp ADDOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | exp MULOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | '!' exp
+ {
+ $$ = new_exp_1 (lnot, $2);
+ }
+ | 'n'
+ {
+ $$ = new_exp_0 (var);
+ }
+ | NUMBER
+ {
+ if (($$ = new_exp_0 (num)) != NULL)
+ $$->val.num = $1;
+ }
+ | '(' exp ')'
+ {
+ $$ = $2;
+ }
+ ;
+
+%%
+
+void
+internal_function
+FREE_EXPRESSION (exp)
+ struct expression *exp;
+{
+ if (exp == NULL)
+ return;
+
+ /* Handle the recursive case. */
+ switch (exp->nargs)
+ {
+ case 3:
+ FREE_EXPRESSION (exp->val.args[2]);
+ /* FALLTHROUGH */
+ case 2:
+ FREE_EXPRESSION (exp->val.args[1]);
+ /* FALLTHROUGH */
+ case 1:
+ FREE_EXPRESSION (exp->val.args[0]);
+ /* FALLTHROUGH */
+ default:
+ break;
+ }
+
+ free (exp);
+}
+
+
+static int
+yylex (lval, pexp)
+ YYSTYPE *lval;
+ const char **pexp;
+{
+ const char *exp = *pexp;
+ int result;
+
+ while (1)
+ {
+ if (exp[0] == '\0')
+ {
+ *pexp = exp;
+ return YYEOF;
+ }
+
+ if (exp[0] != ' ' && exp[0] != '\t')
+ break;
+
+ ++exp;
+ }
+
+ result = *exp++;
+ switch (result)
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ {
+ unsigned long int n = result - '0';
+ while (exp[0] >= '0' && exp[0] <= '9')
+ {
+ n *= 10;
+ n += exp[0] - '0';
+ ++exp;
+ }
+ lval->num = n;
+ result = NUMBER;
+ }
+ break;
+
+ case '=':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = equal;
+ result = EQUOP2;
+ }
+ else
+ result = YYERRCODE;
+ break;
+
+ case '!':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = not_equal;
+ result = EQUOP2;
+ }
+ break;
+
+ case '&':
+ case '|':
+ if (exp[0] == result)
+ ++exp;
+ else
+ result = YYERRCODE;
+ break;
+
+ case '<':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = less_or_equal;
+ }
+ else
+ lval->op = less_than;
+ result = CMPOP2;
+ break;
+
+ case '>':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = greater_or_equal;
+ }
+ else
+ lval->op = greater_than;
+ result = CMPOP2;
+ break;
+
+ case '*':
+ lval->op = mult;
+ result = MULOP2;
+ break;
+
+ case '/':
+ lval->op = divide;
+ result = MULOP2;
+ break;
+
+ case '%':
+ lval->op = module;
+ result = MULOP2;
+ break;
+
+ case '+':
+ lval->op = plus;
+ result = ADDOP2;
+ break;
+
+ case '-':
+ lval->op = minus;
+ result = ADDOP2;
+ break;
+
+ case 'n':
+ case '?':
+ case ':':
+ case '(':
+ case ')':
+ /* Nothing, just return the character. */
+ break;
+
+ case ';':
+ case '\n':
+ case '\0':
+ /* Be safe and let the user call this function again. */
+ --exp;
+ result = YYEOF;
+ break;
+
+ default:
+ result = YYERRCODE;
+#if YYDEBUG != 0
+ --exp;
+#endif
+ break;
+ }
+
+ *pexp = exp;
+
+ return result;
+}
+
+
+static void
+yyerror (str)
+ const char *str;
+{
+ /* Do nothing. We don't print error messages here. */
+}
diff --git a/intl/po2tbl.sed.in b/intl/po2tbl.sed.in
deleted file mode 100644
index ebb32f293536..000000000000
--- a/intl/po2tbl.sed.in
+++ /dev/null
@@ -1,102 +0,0 @@
-# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
-# Copyright (C) 1995 Free Software Foundation, Inc.
-# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
-#
-# 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.
-#
-1 {
- i\
-/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot. */\
-\
-#if HAVE_CONFIG_H\
-# include <config.h>\
-#endif\
-\
-#include "libgettext.h"\
-\
-const struct _msg_ent _msg_tbl[] = {
- h
- s/.*/0/
- x
-}
-#
-# Write msgid entries in C array form.
-#
-/^msgid/ {
- s/msgid[ ]*\(".*"\)/ {\1/
- tb
-# Append the next line
- :b
- N
-# Look whether second part is continuation line.
- s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
-# Yes, then branch.
- ta
-# Because we assume that the input file correctly formed the line
-# just read cannot be again be a msgid line. So it's safe to ignore
-# it.
- s/\(.*\)\n.*/\1/
- bc
-# We found a continuation line. But before printing insert '\'.
- :a
- s/\(.*\)\(\n.*\)/\1\\\2/
- P
-# We cannot use D here.
- s/.*\n\(.*\)/\1/
-# Some buggy seds do not clear the `successful substitution since last ``t'''
-# flag on `N', so we do a `t' here to clear it.
- tb
-# Not reached
- :c
- x
-# The following nice solution is by
-# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
- td
-# Increment a decimal number in pattern space.
-# First hide trailing `9' digits.
- :d
- s/9\(_*\)$/_\1/
- td
-# Assure at least one digit is available.
- s/^\(_*\)$/0\1/
-# Increment the last digit.
- s/8\(_*\)$/9\1/
- s/7\(_*\)$/8\1/
- s/6\(_*\)$/7\1/
- s/5\(_*\)$/6\1/
- s/4\(_*\)$/5\1/
- s/3\(_*\)$/4\1/
- s/2\(_*\)$/3\1/
- s/1\(_*\)$/2\1/
- s/0\(_*\)$/1\1/
-# Convert the hidden `9' digits to `0's.
- s/_/0/g
- x
- G
- s/\(.*\)\n\([0-9]*\)/\1, \2},/
- s/\(.*\)"$/\1/
- p
-}
-#
-# Last line.
-#
-$ {
- i\
-};\
-
- g
- s/0*\(.*\)/int _msg_tbl_length = \1;/p
-}
-d
diff --git a/intl/relocatable.c b/intl/relocatable.c
new file mode 100644
index 000000000000..e131a30a94ce
--- /dev/null
+++ b/intl/relocatable.c
@@ -0,0 +1,439 @@
+/* Provide relocatable packages.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+
+/* Tell glibc's <stdio.h> to provide a prototype for getline().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+/* Specification. */
+#include "relocatable.h"
+
+#if ENABLE_RELOCATABLE
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef NO_XMALLOC
+# define xmalloc malloc
+#else
+# include "xmalloc.h"
+#endif
+
+#if DEPENDS_ON_LIBCHARSET
+# include <libcharset.h>
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV
+# include <iconv.h>
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS
+# include <libintl.h>
+#endif
+
+/* Faked cheap 'bool'. */
+#undef bool
+#undef false
+#undef true
+#define bool int
+#define false 0
+#define true 1
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_PATH_WITH_DIR(P) \
+ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+# define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+# define FILESYSTEM_PREFIX_LEN(P) 0
+#endif
+
+/* Original installation prefix. */
+static char *orig_prefix;
+static size_t orig_prefix_len;
+/* Current installation prefix. */
+static char *curr_prefix;
+static size_t curr_prefix_len;
+/* These prefixes do not end in a slash. Anything that will be concatenated
+ to them must start with a slash. */
+
+/* Sets the original and the current installation prefix of this module.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+static void
+set_this_relocation_prefix (const char *orig_prefix_arg,
+ const char *curr_prefix_arg)
+{
+ if (orig_prefix_arg != NULL && curr_prefix_arg != NULL
+ /* Optimization: if orig_prefix and curr_prefix are equal, the
+ relocation is a nop. */
+ && strcmp (orig_prefix_arg, curr_prefix_arg) != 0)
+ {
+ /* Duplicate the argument strings. */
+ char *memory;
+
+ orig_prefix_len = strlen (orig_prefix_arg);
+ curr_prefix_len = strlen (curr_prefix_arg);
+ memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+ if (memory != NULL)
+#endif
+ {
+ memcpy (memory, orig_prefix_arg, orig_prefix_len + 1);
+ orig_prefix = memory;
+ memory += orig_prefix_len + 1;
+ memcpy (memory, curr_prefix_arg, curr_prefix_len + 1);
+ curr_prefix = memory;
+ return;
+ }
+ }
+ orig_prefix = NULL;
+ curr_prefix = NULL;
+ /* Don't worry about wasted memory here - this function is usually only
+ called once. */
+}
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+void
+set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg)
+{
+ set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+
+ /* Now notify all dependent libraries. */
+#if DEPENDS_ON_LIBCHARSET
+ libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109
+ libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix
+ libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+}
+
+/* Convenience function:
+ Computes the current installation prefix, based on the original
+ installation prefix, the original installation directory of a particular
+ file, and the current pathname of this file. Returns NULL upon failure. */
+#ifdef IN_LIBRARY
+#define compute_curr_prefix local_compute_curr_prefix
+static
+#endif
+const char *
+compute_curr_prefix (const char *orig_installprefix,
+ const char *orig_installdir,
+ const char *curr_pathname)
+{
+ const char *curr_installdir;
+ const char *rel_installdir;
+
+ if (curr_pathname == NULL)
+ return NULL;
+
+ /* Determine the relative installation directory, relative to the prefix.
+ This is simply the difference between orig_installprefix and
+ orig_installdir. */
+ if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix))
+ != 0)
+ /* Shouldn't happen - nothing should be installed outside $(prefix). */
+ return NULL;
+ rel_installdir = orig_installdir + strlen (orig_installprefix);
+
+ /* Determine the current installation directory. */
+ {
+ const char *p_base = curr_pathname + FILESYSTEM_PREFIX_LEN (curr_pathname);
+ const char *p = curr_pathname + strlen (curr_pathname);
+ char *q;
+
+ while (p > p_base)
+ {
+ p--;
+ if (ISSLASH (*p))
+ break;
+ }
+
+ q = (char *) xmalloc (p - curr_pathname + 1);
+#ifdef NO_XMALLOC
+ if (q == NULL)
+ return NULL;
+#endif
+ memcpy (q, curr_pathname, p - curr_pathname);
+ q[p - curr_pathname] = '\0';
+ curr_installdir = q;
+ }
+
+ /* Compute the current installation prefix by removing the trailing
+ rel_installdir from it. */
+ {
+ const char *rp = rel_installdir + strlen (rel_installdir);
+ const char *cp = curr_installdir + strlen (curr_installdir);
+ const char *cp_base =
+ curr_installdir + FILESYSTEM_PREFIX_LEN (curr_installdir);
+
+ while (rp > rel_installdir && cp > cp_base)
+ {
+ bool same = false;
+ const char *rpi = rp;
+ const char *cpi = cp;
+
+ while (rpi > rel_installdir && cpi > cp_base)
+ {
+ rpi--;
+ cpi--;
+ if (ISSLASH (*rpi) || ISSLASH (*cpi))
+ {
+ if (ISSLASH (*rpi) && ISSLASH (*cpi))
+ same = true;
+ break;
+ }
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS - case insignificant filesystem */
+ if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi)
+ != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi))
+ break;
+#else
+ if (*rpi != *cpi)
+ break;
+#endif
+ }
+ if (!same)
+ break;
+ /* The last pathname component was the same. opi and cpi now point
+ to the slash before it. */
+ rp = rpi;
+ cp = cpi;
+ }
+
+ if (rp > rel_installdir)
+ /* Unexpected: The curr_installdir does not end with rel_installdir. */
+ return NULL;
+
+ {
+ size_t curr_prefix_len = cp - curr_installdir;
+ char *curr_prefix;
+
+ curr_prefix = (char *) xmalloc (curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+ if (curr_prefix == NULL)
+ return NULL;
+#endif
+ memcpy (curr_prefix, curr_installdir, curr_prefix_len);
+ curr_prefix[curr_prefix_len] = '\0';
+
+ return curr_prefix;
+ }
+ }
+}
+
+#if defined PIC && defined INSTALLDIR
+
+/* Full pathname of shared library, or NULL. */
+static char *shared_library_fullname;
+
+#if defined _WIN32 || defined __WIN32__
+
+/* Determine the full pathname of the shared library when it is loaded. */
+
+BOOL WINAPI
+DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved)
+{
+ (void) reserved;
+
+ if (event == DLL_PROCESS_ATTACH)
+ {
+ /* The DLL is being loaded into an application's address range. */
+ static char location[MAX_PATH];
+
+ if (!GetModuleFileName (module_handle, location, sizeof (location)))
+ /* Shouldn't happen. */
+ return FALSE;
+
+ if (!IS_PATH_WITH_DIR (location))
+ /* Shouldn't happen. */
+ return FALSE;
+
+ shared_library_fullname = strdup (location);
+ }
+
+ return TRUE;
+}
+
+#else /* Unix */
+
+static void
+find_shared_library_fullname ()
+{
+#ifdef __linux__
+ FILE *fp;
+
+ /* Open the current process' maps file. It describes one VMA per line. */
+ fp = fopen ("/proc/self/maps", "r");
+ if (fp)
+ {
+ unsigned long address = (unsigned long) &find_shared_library_fullname;
+ for (;;)
+ {
+ unsigned long start, end;
+ int c;
+
+ if (fscanf (fp, "%lx-%lx", &start, &end) != 2)
+ break;
+ if (address >= start && address <= end - 1)
+ {
+ /* Found it. Now see if this line contains a filename. */
+ while (c = getc (fp), c != EOF && c != '\n' && c != '/')
+ continue;
+ if (c == '/')
+ {
+ size_t size;
+ int len;
+
+ ungetc (c, fp);
+ shared_library_fullname = NULL; size = 0;
+ len = getline (&shared_library_fullname, &size, fp);
+ if (len >= 0)
+ {
+ /* Success: filled shared_library_fullname. */
+ if (len > 0 && shared_library_fullname[len - 1] == '\n')
+ shared_library_fullname[len - 1] = '\0';
+ }
+ }
+ break;
+ }
+ while (c = getc (fp), c != EOF && c != '\n')
+ continue;
+ }
+ fclose (fp);
+ }
+#endif
+}
+
+#endif /* WIN32 / Unix */
+
+/* Return the full pathname of the current shared library.
+ Return NULL if unknown.
+ Guaranteed to work only on Linux and Woe32. */
+static char *
+get_shared_library_fullname ()
+{
+#if !(defined _WIN32 || defined __WIN32__)
+ static bool tried_find_shared_library_fullname;
+ if (!tried_find_shared_library_fullname)
+ {
+ find_shared_library_fullname ();
+ tried_find_shared_library_fullname = true;
+ }
+#endif
+ return shared_library_fullname;
+}
+
+#endif /* PIC */
+
+/* Returns the pathname, relocated according to the current installation
+ directory. */
+const char *
+relocate (const char *pathname)
+{
+#if defined PIC && defined INSTALLDIR
+ static int initialized;
+
+ /* Initialization code for a shared library. */
+ if (!initialized)
+ {
+ /* At this point, orig_prefix and curr_prefix likely have already been
+ set through the main program's set_program_name_and_installdir
+ function. This is sufficient in the case that the library has
+ initially been installed in the same orig_prefix. But we can do
+ better, to also cover the cases that 1. it has been installed
+ in a different prefix before being moved to orig_prefix and (later)
+ to curr_prefix, 2. unlike the program, it has not moved away from
+ orig_prefix. */
+ const char *orig_installprefix = INSTALLPREFIX;
+ const char *orig_installdir = INSTALLDIR;
+ const char *curr_prefix_better;
+
+ curr_prefix_better =
+ compute_curr_prefix (orig_installprefix, orig_installdir,
+ get_shared_library_fullname ());
+ if (curr_prefix_better == NULL)
+ curr_prefix_better = curr_prefix;
+
+ set_relocation_prefix (orig_installprefix, curr_prefix_better);
+
+ initialized = 1;
+ }
+#endif
+
+ /* Note: It is not necessary to perform case insensitive comparison here,
+ even for DOS-like filesystems, because the pathname argument was
+ typically created from the same Makefile variable as orig_prefix came
+ from. */
+ if (orig_prefix != NULL && curr_prefix != NULL
+ && strncmp (pathname, orig_prefix, orig_prefix_len) == 0)
+ {
+ if (pathname[orig_prefix_len] == '\0')
+ /* pathname equals orig_prefix. */
+ return curr_prefix;
+ if (ISSLASH (pathname[orig_prefix_len]))
+ {
+ /* pathname starts with orig_prefix. */
+ const char *pathname_tail = &pathname[orig_prefix_len];
+ char *result =
+ (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1);
+
+#ifdef NO_XMALLOC
+ if (result != NULL)
+#endif
+ {
+ memcpy (result, curr_prefix, curr_prefix_len);
+ strcpy (result + curr_prefix_len, pathname_tail);
+ return result;
+ }
+ }
+ }
+ /* Nothing to relocate. */
+ return pathname;
+}
+
+#endif
diff --git a/intl/relocatable.h b/intl/relocatable.h
new file mode 100644
index 000000000000..5ac0b0445fa5
--- /dev/null
+++ b/intl/relocatable.h
@@ -0,0 +1,67 @@
+/* Provide relocatable packages.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ 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 _RELOCATABLE_H
+#define _RELOCATABLE_H
+
+/* This can be enabled through the configure --enable-relocatable option. */
+#if ENABLE_RELOCATABLE
+
+/* When building a DLL, we must export some functions. Note that because
+ this is a private .h file, we don't need to use __declspec(dllimport)
+ in any case. */
+#if defined _MSC_VER && BUILDING_DLL
+# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport)
+#else
+# define RELOCATABLE_DLL_EXPORTED
+#endif
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+extern RELOCATABLE_DLL_EXPORTED void
+ set_relocation_prefix (const char *orig_prefix,
+ const char *curr_prefix);
+
+/* Returns the pathname, relocated according to the current installation
+ directory. */
+extern const char * relocate (const char *pathname);
+
+/* Memory management: relocate() leaks memory, because it has to construct
+ a fresh pathname. If this is a problem because your program calls
+ relocate() frequently, think about caching the result. */
+
+/* Convenience function:
+ Computes the current installation prefix, based on the original
+ installation prefix, the original installation directory of a particular
+ file, and the current pathname of this file. Returns NULL upon failure. */
+extern const char * compute_curr_prefix (const char *orig_installprefix,
+ const char *orig_installdir,
+ const char *curr_pathname);
+
+#else
+
+/* By default, we use the hardwired pathnames. */
+#define relocate(pathname) (pathname)
+
+#endif
+
+#endif /* _RELOCATABLE_H */
diff --git a/intl/textdomain.c b/intl/textdomain.c
index 9cec75cb5e3c..a06d129f31fd 100644
--- a/intl/textdomain.c
+++ b/intl/textdomain.c
@@ -1,51 +1,60 @@
/* Implementation of the textdomain(3) function.
- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+ Copyright (C) 1995-1998, 2000, 2001, 2002 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)
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+ USA. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#endif
+#include <stdlib.h>
+#include <string.h>
-#if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC
-# include <string.h>
+#ifdef _LIBC
+# include <libintl.h>
#else
-# include <strings.h>
-# ifndef memcpy
-# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
-# endif
+# include "libgnuintl.h"
#endif
+#include "gettextP.h"
#ifdef _LIBC
-# include <libintl.h>
+/* We have to handle multi-threaded applications. */
+# include <bits/libc-lock.h>
#else
-# include "libgettext.h"
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_default_domain libintl_nl_default_default_domain
+# define _nl_current_default_domain libintl_nl_current_default_domain
#endif
/* @@ end of prolog @@ */
/* Name of the default text domain. */
-extern const char _nl_default_default_domain[];
+extern const char _nl_default_default_domain[] attribute_hidden;
/* Default text domain in which entries for gettext(3) are to be found. */
-extern const char *_nl_current_default_domain;
+extern const char *_nl_current_default_domain attribute_hidden;
/* Names for the libintl functions are a problem. They must not clash
@@ -58,9 +67,12 @@ extern const char *_nl_current_default_domain;
# define strdup(str) __strdup (str)
# endif
#else
-# define TEXTDOMAIN textdomain__
+# define TEXTDOMAIN libintl_textdomain
#endif
+/* Lock variable to protect the global data in the gettext implementation. */
+__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
+
/* Set the current default message catalog to DOMAINNAME.
If DOMAINNAME is null, return the current default.
If DOMAINNAME is "", reset to the default of "messages". */
@@ -68,38 +80,60 @@ char *
TEXTDOMAIN (domainname)
const char *domainname;
{
- char *old;
+ char *new_domain;
+ char *old_domain;
/* A NULL pointer requests the current setting. */
if (domainname == NULL)
return (char *) _nl_current_default_domain;
- old = (char *) _nl_current_default_domain;
+ __libc_rwlock_wrlock (_nl_state_lock);
+
+ old_domain = (char *) _nl_current_default_domain;
/* If domain name is the null string set to default domain "messages". */
if (domainname[0] == '\0'
|| strcmp (domainname, _nl_default_default_domain) == 0)
- _nl_current_default_domain = _nl_default_default_domain;
+ {
+ _nl_current_default_domain = _nl_default_default_domain;
+ new_domain = (char *) _nl_current_default_domain;
+ }
+ else if (strcmp (domainname, old_domain) == 0)
+ /* This can happen and people will use it to signal that some
+ environment variable changed. */
+ new_domain = old_domain;
else
{
/* If the following malloc fails `_nl_current_default_domain'
will be NULL. This value will be returned and so signals we
are out of core. */
#if defined _LIBC || defined HAVE_STRDUP
- _nl_current_default_domain = strdup (domainname);
+ new_domain = strdup (domainname);
#else
size_t len = strlen (domainname) + 1;
- char *cp = (char *) malloc (len);
- if (cp != NULL)
- memcpy (cp, domainname, len);
- _nl_current_default_domain = cp;
+ new_domain = (char *) malloc (len);
+ if (new_domain != NULL)
+ memcpy (new_domain, domainname, len);
#endif
+
+ if (new_domain != NULL)
+ _nl_current_default_domain = new_domain;
+ }
+
+ /* We use this possibility to signal a change of the loaded catalogs
+ since this is most likely the case and there is no other easy we
+ to do it. Do it only when the call was successful. */
+ if (new_domain != NULL)
+ {
+ ++_nl_msg_cat_cntr;
+
+ if (old_domain != new_domain && old_domain != _nl_default_default_domain)
+ free (old_domain);
}
- if (old != _nl_default_default_domain)
- free (old);
+ __libc_rwlock_unlock (_nl_state_lock);
- return (char *) _nl_current_default_domain;
+ return new_domain;
}
#ifdef _LIBC
diff --git a/intl/xopen-msg.sed b/intl/xopen-msg.sed
deleted file mode 100644
index 1d257d3e0b92..000000000000
--- a/intl/xopen-msg.sed
+++ /dev/null
@@ -1,104 +0,0 @@
-# po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file
-# Copyright 1995, 2002 Free Software Foundation, Inc.
-# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
-#
-# 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.
-#
-#
-# The first directive in the .msg should be the definition of the
-# message set number. We use always set number 1.
-#
-1 {
- i\
-$set 1 # Automatically created by po2msg.sed
- h
- s/.*/0/
- x
-}
-#
-# We copy all comments into the .msg file. Perhaps they can help.
-#
-/^#/ s/^#[ ]*/$ /p
-#
-# We copy the original message as a comment into the .msg file.
-#
-/^msgid/ {
-# Does not work now
-# /"$/! {
-# s/\\$//
-# s/$/ ... (more lines following)"/
-# }
- s/^msgid[ ]*"\(.*\)"$/$ Original Message: \1/
- p
-}
-#
-# The .msg file contains, other than the .po file, only the translations
-# but each given a unique ID. Starting from 1 and incrementing by 1 for
-# each message we assign them to the messages.
-# It is important that the .po file used to generate the cat-id-tbl.c file
-# (with po-to-tbl) is the same as the one used here. (At least the order
-# of declarations must not be changed.)
-#
-/^msgstr/ {
- s/msgstr[ ]*"\(.*\)"/\1/
- x
-# The following nice solution is by
-# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
- td
-# Increment a decimal number in pattern space.
-# First hide trailing `9' digits.
- :d
- s/9\(_*\)$/_\1/
- td
-# Assure at least one digit is available.
- s/^\(_*\)$/0\1/
-# Increment the last digit.
- s/8\(_*\)$/9\1/
- s/7\(_*\)$/8\1/
- s/6\(_*\)$/7\1/
- s/5\(_*\)$/6\1/
- s/4\(_*\)$/5\1/
- s/3\(_*\)$/4\1/
- s/2\(_*\)$/3\1/
- s/1\(_*\)$/2\1/
- s/0\(_*\)$/1\1/
-# Convert the hidden `9' digits to `0's.
- s/_/0/g
- x
-# Bring the line in the format `<number> <message>'
- G
- s/^[^\n]*$/& /
- s/\(.*\)\n\([0-9]*\)/\2 \1/
-# Clear flag from last substitution.
- tb
-# Append the next line.
- :b
- N
-# Look whether second part is a continuation line.
- s/\(.*\n\)"\(.*\)"/\1\2/
-# Yes, then branch.
- ta
- P
- D
-# Note that `D' includes a jump to the start!!
-# We found a continuation line. But before printing insert '\'.
- :a
- s/\(.*\)\(\n.*\)/\1\\\2/
- P
-# We cannot use the sed command `D' here
- s/.*\n\(.*\)/\1/
- tb
-}
-d
diff --git a/ld/ChangeLog b/ld/ChangeLog
index a912aeab6e24..25bfcd45680f 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,359 +1,705 @@
-2006-07-19 Alan Modra <amodra@bigpond.net.au>
+2007-07-03 Matthias Klose <doko@ubuntu.com>
- * ld.h (handle_asneeded_cref): Declare.
- * ldcref.c: Include objalloc.h.
- (old_table, old_tab, alloc_mark): New variables.
- (tabsize, entsize, refsize, old_symcount): Likewise.
- (add_cref): Use bfd_hash_allocate for refs.
- (handle_asneeded_cref): New function.
- * ldmain.c (notice): Call handle_asneeded_cref for NULL name.
+ * emultempl/spuelf.em (base_name): Correct backslash quoting.
-2006-07-04 Daniel Jacobowitz <dan@codesourcery.com>
+2007-07-02 Alan Modra <amodra@bigpond.net.au>
- Backport:
- 2006-05-19 Alan Modra <amodra@bigpond.net.au>
- * ldlang.c (lang_size_sections_1): Don't check mem regions for
- os->ignored sections.
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * config.in: Regenerate.
+ * po/ld.pot: Regenerate.
-2006-06-12 Fred Fish <fnf@specifix.com>
+2007-06-30 H.J. Lu <hongjiu.lu@intel.com>
- * emulparams/elf32bmip.sh (OTHER_SECTIONS): Keep the
- ".mdebug.<abi>" and ".gcc_compiled_long<size>" sections
- generated by mips gcc.
+ * aclocal.m4: Regenerated.
+ * Makefile.in: Likewise.
-2006-06-09 Alan Modra <amodra@bigpond.net.au>
+2007-06-29 H.J. Lu <hongjiu.lu@intel.com>
- * 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.
+ * NEWS: Remove a line with '*' only.
-2006-06-08 Alan Modra <amodra@bigpond.net.au>
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
- * 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.
+ * emulparams/armelf.sh (OTHER_SECTIONS): Remove .ARM.attributes.
+ (ATTRS_SECTIONS): Define.
+ * scripttempl/elf.sc, scripttempl/elf32sh-symbian.sc,
+ scripttempl/elf_chaos.sc, scripttempl/elfi370.sc,
+ scripttempl/elfxtensa.sc: Handle ATTRS_SECTIONS.
-2006-06-07 Joseph S. Myers <joseph@codesourcery.com>
+2006-06-29 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
- * po/Make-in (pdf, ps): New dummy targets.
+ * scripttemp/elf32cr16.sc: Default linker script.
+ * emulparams/elf32cr16.sh: Emulation script.
+ * emultempl/cr16elf.em: Emulation script.
+ * Makefile.am: Add entry to make cr16 target.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Specify default and other emulation parameters
+ for cr16.
+ * ChangeLog: Added CR16 target entry.
+ * NEWS: Announce the support for the CR16 new target.
-2006-06-02 Joseph S. Myers <joseph@codesourcery.com>
+2007-06-27 Alan Modra <amodra@bigpond.net.au>
- * Makefile.am (TEXI2DVI): Add -I $(top_srcdir)/../libiberty.
- * Makefile.in: Regenerate.
+ * pe-dll.c: Rename uses of bfd.next to bfd.archive_next throughout.
-2006-05-30 Nick Clifton <nickc@redhat.com>
+2007-06-20 Alan Modra <amodra@bigpond.net.au>
- * po/es.po: Updated Spanish translation.
+ * emulparams/elf32_spu.sh (OTHER_SECTIONS): KEEP .note.spu_name.
-2006-05-24 Nick Clifton <nickc@redhat.com>
+2007-06-18 Nathan Sidwell <nathan@codesourcery.com>
- * po/vi.po: Updated Vietnamese translation.
+ * ldlex.l, ldgram.y: Add ALIGNOF.
+ * ldexp.c (exp_print_token, foldname): Likewise.
+ * ld.texinfo: Likewise.
-2006-05-22 Daniel Jacobowitz <dan@codesourcery.com>
+2007-06-18 Alan Modra <amodra@bigpond.net.au>
- * ld-mips-elf/textrel-1.d: Relax some patterns.
+ * Makefile.am: Add eelf32_spu.o rule.
+ * Makefile.in: Regenerate.
+ * emultempl/spuelf.em: Revert last change. Instead use EMBEDSPU
+ defined in Makefile for embedspu name.
-2006-05-22 Nick Clifton <nickc@redhat.com>
+2007-06-18 Alan Modra <amodra@bigpond.net.au>
- * scripttempl/elf32crx.sc (.rdata): Add .rodata.*.
+ * emultempl/spuelf.em (embedded_spu_file): Deduce embedspu program
+ name prefix from that of ld.
-2006-05-05 Alan Modra <amodra@bigpond.net.au>
+2007-06-14 H.J. Lu <hongjiu.lu@intel.com>
- * ld.texinfo: Document PowerPC and PowerPC64 options.
- * gen-doc.texi: Enable.
- * configdoc.texi: Regenerate.
- * ld.info: Regenerate.
+ * Makefile.am (ACLOCAL_AMFLAGS): Add -I ../config -I ../bfd.
-2006-05-02 Daniel Jacobowitz <dan@codesourcery.com>
+ * acinclude.m4: Removed.
- * 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.
+ * Makefile.in: Regenerated.
+ * aclocal.m4: Likewise.
+ * configure: Likewise.
-2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+2007-06-14 Alan Modra <amodra@bigpond.net.au>
- * po/POTFILES.in: Regenerated.
+ * emultempl/spu_ovl.S: Don't trash lr on tail call from one
+ overlay to another.
+ * emultempl/spu_ovl.o: Regenerate.
-2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+2007-06-11 Bob Wilson <bob.wilson@acm.org>
- * config.in: Regenerated.
+ * emulparams/elf32xtensa.sh (OTHER_READONLY_SECTIONS): Add ONLY_IF_RO
+ for .xt_except_table.
+ (OTHER_RELRO_SECTIONS): New.
-2006-04-14 David Heine <dlheine@tensilica.com>
+2007-06-11 Sterling Augustine <sterling@tensilica.com>
Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (replace_insn_sec_with_prop_sec): Use renamed
+ XTENSA_PROP_NO_TRANSFORM flag instead of XTENSA_PROP_INSN_NO_TRANSFORM.
+
+2007-06-01 Noah Misch <noah@cs.caltech.edu>
+ Alan Modra <amodra@bigpond.net.au>
- * 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.
+ * ldlang.c (ldlang_add_file): Use input_bfds_tail.
+ * ldmain.c (main): Init input_bfds_tail. Sort link_info
+ initialization.
-2006-04-11 Diego Pettenò <flameeyes@gentoo.org>
+2007-05-29 Alan Modra <amodra@bigpond.net.au>
- * 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.
+ * emultempl/spuelf.em (base_name): New function, split out from..
+ (embedded_spu_file) ..here. Pass -fPIC or -fpie to embedspu
+ invocation if we deduce a shared lib or position independent
+ executable build by looking at ctrbegin* linker input files.
+
+2007-05-29 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spu_ovl.S (__rv_pattern, __cg_pattern): Set symbol
+ types and sizes.
+ * emultempl/spu_ovl.o: Regenerate.
+
+2007-05-24 Steve Ellcey <sje@cup.hp.com>
+
+ * Makefile.in: Regnerate.
* configure: Regenerate.
+ * aclocal.m4: Regenerate.
-2006-04-07 Bernhard Fischer <aldot@gcc.gnu.org>
+2007-05-24 Nathan Sidwell <nathan@codesourcery.com>
- * ld.texinfo: Fix typo in documentation of --check-sections.
+ * ldlex.l: ASSERT is recognized in SCRIPT env. NAMES cannot
+ contain commas in EXP env.
+ * ldgram.y (extern_name_list): Push to EXP env, move body to ...
+ (extern_name_list_body): ... here.
+ (script_file, ifile_list): Reformat.
+ (statement): Add ASSERT.
-2006-04-07 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+2007-05-22 Nick Clifton <nickc@redhat.com>
- * ldlang.c (load_symbols): Set as_needed and add_needed according
- to the corresponding script's fields while processing it.
+ * ld.texinfo: Use @copying around the copyright notice.
+ * ldint.texinfo: Likewise.
-2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
+2007-05-18 Richard Sandiford <richard@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.
+ * emulparams/elf32ebmipvxworks.sh (OTHER_READONLY_SECTIONS)
+ (OTHER_READWRITE_SECTIONS): Define. Add .rdata sections.
+
+2007-05-16 Richard Sandiford <richard@codesourcery.com>
+
+ * configure.in: Allow sysroots to be relocated under $prefix as
+ well as $exec_prefix.
* configure: Regenerate.
- * po/Make-in: Add install-html target.
-2006-04-06 H.J. Lu <hongjiu.lu@intel.com>
+2007-05-14 Andreas Schwab <schwab@suse.de>
- * emultempl/ia64elf.em: Set link_info.relax_pass to 2. Remove
- link_info.need_relax_finalize.
+ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_new_vers_pattern):
+ Handle null pattern.
- * ldlang.c (relax_sections): New.
- (lang_process): Use. Call relax_sections link_info.relax_pass
- times.
+2007-05-11 Alan Modra <amodra@bigpond.net.au>
- * ldmain.c (main): Set link_info.relax_pass to 1. Remove
- link_info.need_relax_finalize.
+ * emultempl/ppc32elf.em (plt_style): New variable.
+ (old_plt): Delete.
+ (ppc_after_open): Adjust ppc_elf_select_plt_layout call.
+ (PARSE_AND_LIST_PROLOGUE): Define OPTION_NEW_PLT, renumber
+ OPTION_OLD_PLT, OPTION_OLD_GOT and OPTION_STUBSYMS.
+ (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Add secure-plt.
+ (PARSE_AND_LIST_ARGS_CASES): Handle OPTION_NEW_PLT.
+ * ld.texinfo (--secure-plt): Document.
-2006-04-05 Alan Modra <amodra@bigpond.net.au>
+2007-05-08 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.
+ * ld.h (args_type, ld_config_type): Reorder fields.
+ * ldmain.c (main): Don't initialise a bunch of vars we know are
+ zero already.
-2006-04-05 Richard Sandiford <richard@codesourcery.com>
- Daniel Jacobowitz <dan@codesourcery.com>
+2007-05-05 Anatoly Sokolov <aesok@post.ru>
- * 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.
+ * multempl/avrelf.em (PARSE_AND_LIST_ARGS_CASES): Add new value for
+ "--pmem-wrap-around".
+ (PARSE_AND_LIST_OPTIONS): Describe new value for "--pmem-wrap-around".
-2006-04-04 Eric Botcazou <ebotcazou@adacore.com>
+2007-05-03 Bob Wilson <bob.wilson@acm.org>
- * 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.
+ * scripttempl/elfxtensa.sc: Merge changes from elf.sc.
-2006-04-01 Danny Smith <dannysmith@users.sourceforge.net>
+2007-05-03 Alan Modra <amodra@bigpond.net.au>
- * 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.
+ * ld.texinfo (--no-warn-search-mismatch): Document.
+ * ldfile.c (ldfile_try_open_bfd): Don't warn about skipping
+ incompatible libraries if --no-warn-search-mismatch.
+ * ld.h (args_type): Add warn_search_mismatch.
+ * ldmain.c (main): Init it.
+ * lexsup.c (enum option_values): Add OPTION_NO_WARN_SEARCH_MISMATCH.
+ (ld_options): Add entry for --no-warn-search-mismatch.
+ (parse_args): Handle OPTION_NO_WARN_SEARCH_MISMATCH.
+
+2007-05-03 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc: Add .debug_pubtypes and .debug_ranges.
+
+2007-05-01 Robert Millan <rmh@aybabtu.com>
+
+ * ldlang.c (lang_check): Error on architecture mismatch.
+
+2007-04-30 Alan Modra <amodra@bigpond.net.au>
+
+ * ldmain.c (link_callbacks): Init info and minfo fields.
+ * ldmisc.c (minfo): Do nothing if no map file.
+ * emultempl/spuelf.em (stack_analysis, emit_stack_syms): New vars.
+ (spu_after_open): Adjust spu_elf_create_sections call.
+ (spu_before_allocation): Likewise for spu_elf_size_stubs.
+ (OPTION_SPU_STACK_ANALYSIS, OPTION_SPU_STACK_SYMS): Define.
+ (PARSE_AND_LIST_LONGOPTS): Add new entries.
+ (PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_ARGS_CASES): Likewise.
+ * gen-doc.texi: Add @set for SPU and other missing targets.
+ * ld.texinfo: Update man page selection to match gen-doc.texi.
+ Document SPU features.
-2006-03-31 Jakub Jelinek <jakub@redhat.com>
+2007-04-28 Alan Modra <amodra@bigpond.net.au>
- * 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.
+ * ldcref.c (struct cref_hash_entry): Make "demangled" const.
+ (cref_fill_array): Adjust for changed demangler.
+ * ldlang.c (lang_one_common): Likewise.
-2006-03-25 Bernd Schmidt <bernd.schmidt@analog.com>
+2007-04-27 Nathan Froyd <froydnj@codesourcery.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.
+ * emulparams/elf32_sparc.sh: Update comments.
+ * emulparams/elf32bmip.sh: Likewise.
+ * emulparams/elf32ppc.sh: Likewise.
+ * emulparams/vxworks.sh: Likewise.
+
+2007-04-27 Alan Modra <amodra@bigpond.net.au>
+
+ Many files: Include sysdep.h first. Remove duplicate headers.
+ * Makefile.am: Run "make dep-am".
* Makefile.in: Regenerate.
- * 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.
+2007-04-24 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.in: Regenerate.
+
+2007-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ldcref.c (cref_fill_array): Call bfd_demangle rather than demangle.
+ * ldlang.c (lang_one_common): Likewise.
+ * ldmisc.c (vfinfo): Likewise.
+ (demangle): Delete.
+ * ldmisc.h (demangle): Delete.
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2007-04-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (enum section_type): Add overlay_section.
+ * ldlang.c (lang_add_section): Handle flags for overlay_section
+ as per normal_section.
+ (lang_size_sections_1): When setting lma, detect overlays by
+ os->sectype rather than by looking for overlapping vmas.
+ (lang_enter_overlay_section): Use overlay_section type.
+ (lang_leave_overlay): Set first overlay section to normal.
+
+2007-04-14 Steve Ellcey <sje@cup.hp.com>
+
+ * Makefile.am: Add ACLOCAL_AMFLAGS.
* Makefile.in: Regenerate.
-2006-03-16 Alan Modra <amodra@bigpond.net.au>
+2007-04-12 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/elf32xtensa.sh (OTHER_SECTIONS): KEEP property sections.
+
+2007-04-10 Richard Henderson <rth@redhat.com>
- 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.
+ * ldlang.c (relax_sections): Initialize and increment
+ link_info.relax_trip.
-2006-03-07 Richard Sandiford <richard@codesourcery.com>
+2007-04-04 Paul Brook <paul@codesourcery.com>
+
+ * configure.tgt: Loosen checks for arm uclinux eabi targets.
+
+2007-04-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4090
+ * ldexp.h (node_type): Add lineno.
+ * ldexp.c: Include "ldlex.h".
+ (exp_intop): Set the lineno field from lineno.
+ (exp_bigintop): Likewise.
+ (exp_relop): Likewise.
+ (exp_nameop): Likewise.
+ (exp_binop): Set the lineno field from lineno of lhs.
+ (exp_trinop): Likewise.
+ (exp_unop): Set the lineno field from lineno of child.
+ (exp_assop): Set the lineno field from lineno of src.
+ (exp_provide): Likewise.
+ (exp_assert): Set the lineno field from lineno of exp.
+ (exp_get_abs_int): Set lineno from lineno of nonconstant
+ expression when report problem.
+
+2007-03-29 Richard Sandiford <richard@codesourcery.com>
Daniel Jacobowitz <dan@codesourcery.com>
- Zack Weinberg <zack@codesourcery.com>
- Nathan Sidwell <nathan@codesourcery.com>
- Paul Brook <paul@codesourcery.com>
- Ricardo Anguiano <anguiano@codesourcery.com>
+
+ * NEWS: Mention -l:foo.
+ * ld.texinfo: Document it.
+ * ldlang.c (new_afile): If a lang_input_file_is_l_enum
+ entry as a name beginning with a coloh, convert it to a
+ lang_input_file_is_search_file_enum entry without the colon.
+
+2007-03-28 Richard Sandiford <richard@codesourcery.com>
+
+ * ld.h (ld_config_type): Add rpath_separator.
+ * ldmain.c (main): Initialize it.
+ * lexsup.c (parse_args): Honor config.rpath_separator.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_search_needed): Likewise.
+ (gld${EMULATION_NAME}_add_sysroot): Likewise.
+ (gld${EMULATION_NAME}_parse_ld_so_conf): Use config.rpath_separator
+ rather than ':' when building the path.
+ * emultempl/vxworks.em (vxworks_before_parse): New function.
+ Override config.rpath_separator.
+ (LDEMUL_AFTER_OPEN): Do not change if EXTRA_EM_FILE has been
+ set to gld${EMULATION_NAME}_after_open; #define that identifier
+ to vxworks_foo instead.
+ (LDEMUL_BEFORE_PARSE): Override in the same way as LDEMUL_AFTER_OPEN.
+
+2007-03-28 Richard Sandiford <richard@codesourcery.com>
Phil Edwards <phil@codesourcery.com>
- * 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.
+ * ld.texinfo: Put the contents after the title page rather
+ than at the end of the document.
+
+2007-03-26 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Add dependency on ldemul-list.h for powerpc and
+ spu target emul files.
+ * configure.in: Check for mkstemp and waitpid.
* Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * config.in: Regenerate.
+ * ldlang.c (input_file_chain): Make global.
+ (lang_add_input_file): Don't set lang_has_input_file here.
+ * ldlang.h (input_file_chain): Declare.
+ * emultempl/ppc32elf.em (ppc_recognized_file): New function.
+ (LDEMUL_RECOGNIZED_FILE): Define.
+ * emultempl/ppc64elf.em (ppc64_recognized_file): New function.
+ (LDEMUL_RECOGNIZED_FILE): Define.
+ * emultempl/spuelf.em (struct tflist): New.
+ (tmp_file_list): New var.
+ (clean_tmp, embedded_spu_file): New functions.
-2006-03-03 Bjoern Haase <bjoern.m.haase@web.de>
+2007-03-24 Alan Modra <amodra@bigpond.net.au>
- * scripttempl/avr.sc: Add *(.jumptables) *(.lowtext) sections.
- Add KEEP() directives.
- Add *(.data*) *(.rodata) and *(.rodata*) and *(.bss*) to .data and
- .bss output sections.
+ * ldlang.c (lang_insert_orphan): Provide start/stop loadaddr syms
+ rather than defining unconditionally.
+ (lang_leave_overlay_section): Likewise.
+ * ld.texinfo (Overlay Description): Update description and examples
+ for start/stop syms.
-2006-03-03 Richard Sandiford <richard@codesourcery.com>
+2007-03-22 Joseph Myers <joseph@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.
+ * ld.texinfo: Include VERSION_PACKAGE when reporting version.
+
+2007-03-20 Paul Brook <paul@codesourcery.com>
+
+ * emultempl/armelf.em (pic_veneer): New variable.
+ (PARSE_AND_LIST_PROLOGUE): Add OPTION_PIC_VENEER.
+ (PARSE_AND_LIST_ARGS_CASES): Ditto.
+ (PARSE_AND_LIST_LONGOPTS): Add "pic-veneer".
+ (PARSE_AND_LIST_OPTIONS): Ditto.
+ * ld.texinfo: Document --pic-veneer.
+
+2007-03-18 Mark Shinwell <shinwell@codesourcery.com>
+
+ * ld.texinfo: Document --no-enum-size-warning.
+ * emultempl/armelf.em (no_enum_size_warning): New.
+ (arm_elf_create_output_section_statements): Correct typo
+ in comment. Pass no_enum_size_warning to
+ bfd_elf32_arm_set_target_relocs.
+ (PARSE_AND_LIST_PROLOGUE): Define OPTION_NO_ENUM_SIZE_WARNING.
+ (PARSE_AND_LIST_OPTIONS): Document --no-enum-size-warning.
+ (PARSE_AND_LIST_ARGS_CASES): Add OPTION_NO_ENUM_SIZE_WARNING
+ case.
+
+2007-03-19 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * configure.tgt (bfin-*-elf, bfin-*-uclinux*): Add targ_extra_libpath.
+ (bfin-*-linux-uclibc*): New target.
+
+2007-03-16 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * pe-dll.c (make_one): Use pc-relative relocation instead of an
+ absolute relocation for x86_64-pc-mingw32 target.
+
+2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (ld_TEXINFOS): Remove ldver.texi.
+ (AM_MAKEINFOFLAGS): Add -I ../../bfd/doc.
+ (TEXI2DVI): Likewise.
+ (REPORT_BUGS_TO): Removed.
+ (INCLUDES): Remove -DREPORT_BUGS_TO.
+ (ldver.texi): Likewise.
+ (ld.1): Don't depend on ldver.texi.
+ (MOSTLYCLEANFILES): Remove ldver.texi.
+ * Makefile.in: Regenerated.
+
+ * configure.in (--with-bugurl): Removed.
+ * configure: Regenerated.
+
+ * lexsup.c: Include bfdver.h.
+
+ * ld.texinfo: Include bfdver.texi instead of ldver.texi.
-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.
+2007-03-11 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * emultempl/mmixelf.em: Remove incorrect '#line' directive.
+
+2007-03-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_size_sections_1): Correct backwards dot move
+ test to not trigger on overlays. Only warn on backwards move
+ if non-default lma.
+
+2007-03-07 Joseph Myers <joseph@codesourcery.com>
+
+ * configure.in (REPORT_BUGS_TEXI): Define to Texinfo version of
+ bug-reporting URL.
+ * Makefile.am (ldver.texi): Define BUGURL.
+ * ld.texinfo: Use BUGURL.
+ * Makefile.in, configure: Regenerate.
+
+2007-03-07 Nick Clifton <nickc@redhat.com>
+
+ PR ld/4023
+ * emultempl/aix.em (..._before_allocation): Strip sysroot prefix
+ from any paths being inserted into the output binary's DT_RPATH.
+
+2007-03-02 Nathan Sidwell <nathan@codesourcery.com>
+
+ * emulparams/shelf_uclinux.sh: New. Missed in 2007-02-28 commit.
+
+2007-03-01 Joseph Myers <joseph@codesourcery.com>
+
+ * ldver.c (ldversion): Remove word "version" from output. Update
+ copyright date.
+
+2007-02-28 Nathan Sidwell <nathan@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eshelf_uclinux.o
+ (eshelf_uclinux.c): New target.
+ * Makefile.in: Rebuilt.
+ * configure.tgt (sh-*-uclinux* | sh[12]-*-uclinux*): New stanza.
+ * emulparams/shelf_uclinux.sh: New.
+
+2007-02-28 Alan Modra <amodra@bigpond.net.au>
+
+ * configure.tgt: Fix type last change.
+ * configure.tgt (spu-*-elf*): Delete targ_extra_ofiles.
+
+2007-02-27 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (ALL_EMUL_EXTRA_OFILES): Remove spu_inc.o.
+ (eelf32_spu.c): Adjust dependencies.
* Makefile.in: Regenerate.
+ * emultempl/spuelf.em (ovl_mgr): New array. Insert spu_ovl.o
+ code using bin2c.
+ (_binary_spu_ovl_o_start, _binary_spu_ovl_o_end): Delete.
+ (ovl_mgr_stream): Update.
+ * emultempl/spu_inc.s: Delete.
+ * emultempl/spu_none.s: Delete.
+
+2007-02-26 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spuelf.em (_binary_builtin_ovl_mgr_start): Rename
+ to _binary_spu_ovl_o_start.
+ (_binary_builtin_ovl_mgr_end): Rename to _binary_spu_ovl_o_end.
+ (spu_elf_load_ovl_mgr): Fatal error on missing overlay manager.
+ * emultempl/spu_inc.s: Rename symbols.
+ * emultempl/spu_none.s: New file.
+ * emultempl/spu_ovl.S: Update copyright.
+ * Makefile.am (spu_inc.o): Try building with ld -r first, then
+ gas incbin, then build without overlay manager.
+ * Makefile.in: Regenerate.
+
+2007-02-22 Joseph Myers <joseph@codesourcery.com>
+
+ * configure.tgt (mips64*el-*-linux-*, mips64*-*-linux-*,
+ mips*el-*-linux-*, mips*-*-linux-*): Set
+ targ_extra_libpath=$targ_extra_emuls.
+
+2007-02-21 Nick Clifton <nickc@redhat.com>
+
+ * ldlang.c (ldlang_override_segment_assignment): New function.
+ * ldlang.h (ldlang_override_segment_assignment): Prototype.
+ * ldmain.c (link_callbacks): Add
+ ldlang_override_segment_assignment.
+
+2007-02-20 Alan Modra <amodra@bigpond.net.au>
-2006-02-27 Carlos O'Donell <carlos@codesourcery.com>
+ * ldexp.c (fold_name <LOADADDR>): Ensure result is always absolute.
- * Makefile.am: Add html target.
+2007-02-17 Mark Mitchell <mark@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+ Vladimir Prus <vladimir@codesourcery.com
+ Joseph Myers <joseph@codesourcery.com>
+
+ * configure.in (--with-bugurl): New option.
+ * configure: Regenerate.
+ * Makefile.am (REPORT_BUGS_TO): Define.
+ (INCLUDES): Define REPORT_BUGS_TO.
+ Regenerate dependencies.
* Makefile.in: Regenerate.
- * 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.
+ * ld.h: Remove include of bin-bugs.h.
+ * lexsup.c (help): Don't print empty REPORT_BUGS_TO.
+
+2007-02-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ldcref.c (check_reloc_refs): Compare section for local syms.
+
+2007-02-13 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/spu_ovl.S (__ovly_return, __ovly_load): Set sym size.
+ (__ovly_load_event): Define.
+ (size): Rename to osize.
+ * emultempl/spu_ovl.o: Regenerate.
+
+2007-02-13 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf64ppc.sh (OTHER_READWRITE_SECTIONS): Add ".branch_lt".
+ * emultempl/ppc64elf.em (ppc_add_stub_section): Create without
+ SEC_RELOC flag set.
+
+2007-02-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure.in (targ_extra_emuls): Add $targ64_extra_emuls if
+ want64 is true.
+ (targ_extra_libpath): Add $targ64_extra_libpath if want64 is
+ true
+ * configure: Regenerated.
+
+ * configure.tgt (targ_extra_libpath): Initialize.
+ (targ64_extra_emuls): New. Document. Initialize.
+ (targ64_extra_libpath): Likewise.
+ (i[3-7]86-*-linux-*): Set targ64_extra_emuls and
+ targ64_extra_libpath.
+ (powerpc*-*-linux*): Likewise.
+ (s390-*-linux*): Likewise.
+
+2007-02-07 Paul Brook <paul@codesourcery.com>
+
+ * configure.tgt: Add arm*-*-uclinux-*eabi.
+
+2007-02-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldlang.c (lang_size_sections_1): Add a missing `)'.
+
+2007-02-06 Alan Modra <amodra@bigpond.net.au>
+
+ PR ld/3966
+ * ldlang.c (lang_size_sections_1): Don't warn on backwards dot
+ move unless section size is non-zero.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add support for Toshiba MeP.
+ * configure.tgt: Likewise.
+ * scripttempl/mep.sc: New file.
+ * emulparams/elf32mep.sh: New file.
* Makefile.in: Regenerate.
- * 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>
+2006-01-29 Julian Brown <julian@codesourcery.com>
- * configure.tgt (mips*el-*-netbsd*, mips*-*-netbsd*):
- Use the traditional target.
+ * NEWS: Mention --vfp11-denorm-fix option.
+ * ld.texinfo: Document above.
+ * emulparams/armelf_linux.sh (OTHER_TEXT_SECTIONS): Add
+ .vfp11_veneer section.
+ * emulparams/armelf.sh (OTHER_TEXT_SECTIONS): Likewise.
+ * emultempl/armelf.em (vfp11_denorm_fix): New static variable.
+ (arm_elf_before_allocation): Call bfd_elf32_arm_set_vfp11_fix,
+ bfd_elf32_arm_init_maps and bfd_elf32_arm_vfp11_erratum_scan.
+ (arm_elf_after_allocation): New function. Call
+ bfd_elf32_arm_vfp11_fix_veneer_locations for all input statements.
+ (arm_elf_create_output_section_statements): Pass vfp11 fix command
+ line option to BFD.
+ (OPTION_VFP11_DENORM_FIX): New option.
+ (PARSE_AND_LIST_LONGOPTS): Handle new option.
+ (PARSE_AND_LIST_OPTIONS): Likewise.
+ (PARSE_AND_LIST_ARGS_CASES): Likewise.
+ (LDEMUL_AFTER_ALLOCATION): Define.
-2006-02-13 Joseph S. Myers <joseph@codesourcery.com>
+2007-01-24 H.J. Lu <hongjiu.lu@intel.com>
- * configure.tgt (arm*b-*-linux-gnueabi): Change to
- arm*b-*-linux-*eabi.
- (arm*-*-linux-gnueabi): Change to arm*-*-linux-*eabi.
+ * ldgram.y (SIZEOF_HEADERS): Remove duplicated one.
+ (DEFSYMEND): Likewise.
+ (NAME): Likewise.
+ (LNAME): Likewise.
-2006-02-08 H.J. Lu <hongjiu.lu@intel.com>
+2007-01-19 Murali Vemulapati <murali.vemulapati@gmail.com>
- PR ld/2290
- * NEWS: Updated for the Linux linker search order change.
+ * pe-dll.c: (make_one) Conditionally include jump stubs.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_after_open): Identify
+ redundant jump stubs from import libraries and exclude them from
+ link.
- * 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.
+2007-01-19 H.J. Lu <hongjiu.lu@intel.com>
-2006-02-07 Paul Brook <paul@codesourcery.com>
+ * ld.h (args_type): Add new symbolic and dynamic_list fields.
- * emultempl/armelf.em: Include elf/arm.h.
- (arm_elf_finish): Set low address bit if enty point is a Thumb
- function.
+ * ld.texinfo: Update -Bsymbolic-functions.
-2006-02-01 Danny Smith <dannysmith@users.sourceforge.net>
+ * ldmain.c (main): Initialize command_line.symbolic to
+ symbolic_unset and command_line.dynamic_list to
+ dynamic_list_unset. Check -Bsymbolic, -Bsymbolic-functions and
+ --dynamic-list* before setting link_info.symbolic,
+ link_info.dynamic and link_info.dynamic_data.
- * 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.
+ * lexsup.c (option_values): Add OPTION_SYMBOLIC_FUNCTIONS.
+ (ld_options): Use OPTION_SYMBOLIC_FUNCTIONS with
+ -Bsymbolic-functions.
+ (parse_args): Handle -Bsymbolic-functions. Don't set
+ link_info.dynamic, link_info.dynamic_data and link_info.symbolic
+ here. Set command_line.symbolic for -Bsymbolic. Set
+ command_line.dynamic_list and command_line.symbolic for
+ --dynamic-list-data, --dynamic-list-cpp-new,
+ --dynamic-list-cpp-typeinfo and --dynamic-list.
-2006-01-31 Danny Smith dannysmith@users.sourceforge.net
+2007-01-19 Jakub Jelinek <jakub@redhat.com>
+ H.J. Lu <hongjiu.lu@intel.com>
- * NEWS: Mention support for forward exports in PE-COFF dll's.
- * ld.texinfo: Expand documentation of EXPORT statements in
- PE-COFF .def files.
+ * emultempl/elf32.em (handle_option): Make sure -z max-page-size
+ or -z common-page-size argument is a power of 2. Call
+ bfd_emul_set_maxpagesize and bfd_emul_set_commonpagesize.
-2006-01-31 Filip Navara <navaraf@reactos.com>
+2007-01-19 H.J. Lu <hongjiu.lu@intel.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.
+ * ldmain.c (main): Don't call bfd_emul_set_maxpagesize nor
+ bfd_emul_set_commonpagesize.
- * pe-dll.c (process_def_file): Don't crash on malformed
- fastcall symbol names in .def file.
+2007-01-19 H.J. Lu <hongjiu.lu@intel.com>
-2006-01-30 Nick Clifton <nickc@redhat.com>
+ * NEWS: Mention --default-script/-dT.
- * po/vi.po: Updated Vietnamese translation.
+ * ld.h (args_type): Add a default_script field.
-2006-01-27 Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ * ld.texinfo: Document --default-script/-dT.
- * pe-dll.c (pe_dll_generate_implib): Issue "Creating library
- file:" as informational message, not a warning.
+ * ldmain.c (main): Handle command_line.default_script.
-2006-01-18 Roger Sayle <roger@eyesopen.com>
+ * lexsup.c (option_values): Add OPTION_DEFAULT_SCRIPT.
+ (ld_options): Add entries for --default-script and -dT.
+ (parse_args): Handle --default-script/-dT.
- * emultempl/irix.em: Use lbasename instead of basename.
+2007-01-16 H.J. Lu <hongjiu.lu@intel.com>
-2006-01-16 Nick Clifton <nickc@redhat.com>
+ PR ld/3831
+ * NEWS: Mention -Bsymbolic-functions, --dynamic-list-data and
+ --dynamic-list-cpp-new.
- * po/zh_CN.po: New Chinese (simplified) translation.
- * configure.in (ALL_LINGUAS): Add "zh_CH".
- * configure: Regenerate.
+ * ld.texinfo: Document -Bsymbolic-functions, --dynamic-list-data
+ and --dynamic-list-cpp-new.
+
+ * ldlang.c (lang_append_dynamic_list_cpp_new): New.
+ (lang_process): Change link_info.dynamic to
+ link_info.dynamic_list.
+ (lang_append_dynamic_list): Likewise.
+ * ldmain.c (main): Likewise. Initialize link_info.dynamic and
+ link_info.dynamic_data to FALSE.
+
+ * ldlang.h (lang_append_dynamic_list_cpp_new): New.
+
+ * lexsup.c (option_values): Add OPTION_DYNAMIC_LIST_DATA and
+ OPTION_DYNAMIC_LIST_CPP_NEW.
+ (ld_options): Add entries for -Bsymbolic-functions,
+ --dynamic-list-data and --dynamic-list-cpp-new. Make
+ -Bsymbolic-functions an alias of --dynamic-list-data.
+ (parse_args): Change link_info.dynamic to link_info.dynamic_list.
+ Set link_info.dynamic to TRUE for --dynamic-list and
+ --dynamic-list-cpp-typeinfo. Handle --dynamic-list-data and
+ --dynamic-list-cpp-new.
+
+2007-01-11 Nathan Sidwell <nathan@codesourcery.com>
+
+ * emultempl/elf-generic.em (gdl_map_segments): Only allow header
+ shrinkage for the first few iterations.
+
+2007-01-08 Kai Tietz <kai.tietz@onevision.com>
+
+ * configure.tgt: Renamed target x86_64-*-mingw64 to
+ x86_64-*-mingw*.
+
+2007-01-08 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * configure.host: Add i[3-7]86-*-mingw* case.
+
+2007-01-08 Nick Clifton <nickc@redhat.com>
+
+ * pep-dll.h (pep_bfd_is_dll): Add prototype.
+
+2007-01-08 Aurelien Jarno <aurelien@aurel32.net>
+
+ PR ld/3843
+ * configure.tgt (x86_64_[k]freebsd*): Add targ_extra_libpath and
+ tdir_elf_i386_fbsd.
+
+2007-01-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldexp.c (fold_name): Issue error on undefined sections.
-2006-01-16 Bernhard Fischer <aldot@gcc.gnu.org>
+2007-01-02 Alan Modra <amodra@bigpond.net.au>
- * ld.texinfo (Options): Fix typo.
+ * pe-dll.c: Include pe-dll.h.
+ * pep-dll.c (pe_bfd_is_dll): Define.
-For older changes see ChangeLog-2005
+For older changes see ChangeLog-2006
Local Variables:
mode: change-log
diff --git a/ld/ChangeLog-2006 b/ld/ChangeLog-2006
new file mode 100644
index 000000000000..c28addf10bbb
--- /dev/null
+++ b/ld/ChangeLog-2006
@@ -0,0 +1,1364 @@
+2006-12-23 Kazu Hirata <kazu@codesourcery.com>
+
+ * configure.tgt: Recognize fido.
+
+2006-12-18 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c (pe_bfd_is_dll): New function.
+ * pe-dll.h (pe_bfd_is_dll): Declare.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_recognized_file): Recognize
+ dlls using pe_bfd_is_dll instead of using the filename extension.
+
+2006-12-15 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * configure.tgt (NATIVE_LIB_DIRS): Specify for spu-*-elf*.
+
+2006-12-12 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (ld_TEXINFOS): Set.
+ (ld.info ld.dvi ld.html): Delete rule.
+ * Makefile.in: Regenerated.
+
+2006-12-12 Ina Pandit <inap@kpitcummins.com>
+
+ * ldlang.c (print_output_section_statement): Print load address
+ when lma differs from vma.
+
+2006-12-11 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.in: Define GENINSRC_NEVER.
+ * doc/Makefile.am (ld.info): Remove srcdir prefix.
+ (MAINTAINERCLEANFILES): Add info file.
+ (DISTCLEANFILES): Pretend to add info file.
+ * po/Make-in (.po.gmo): Put gmo files in objdir.
+ * configure, Makefile.in: Regenerated.
+
+2006-12-04 Jan Beulich <jbeulich@novell.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Create
+ .eh_frame_hdr section here.
+
+2006-11-27 Ian Lance Taylor <ian@airs.com>
+
+ * Makefile.am (EXTRA_DIST): Put spu_ovl.o in the emultempl
+ subdirectory.
+ * Makefile.in: Regenerate.
+
+2006-11-27 Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (XSHAL_ABI): Add default definition.
+ (replace_insn_sec_with_prop_sec): Use bfd_make_section_with_flags.
+ Delete redundant code to set sections flags and alignment.
+ (xt_config_info_unpack_and_check, check_xtensa_info): New.
+ (elf_xtensa_after_open): Iterate over input statements instead of
+ link_info.input_bfds.
+ (elf_xtensa_before_allocation): Likewise. Call check_xtensa_info for
+ each input, and write a new .xtensa.info section in the output.
+
+2006-11-22 Nick Clifton <nickc@redhat.com>
+
+ * configure.in (LINGUAS): Add ga.
+ * po/ga.po: New Irish translation.
+
+2006-11-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld.texinfo: Fix a typo.
+
+2006-11-20 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/elf32_spu.sh (OTHER_SECTIONS): Define.
+
+2006-11-13 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * emultempl/armelf.em (arm_elf_before_allocation): Only call
+ bfd_elf32_arm_process_before_allocation if no dynamic sections.
+
+2006-11-08 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (gld*_before_allocation): Adjust output section
+ size for warning sections.
+
+2006-11-06 Vladimir Prus <vladimir@codesourcery.com>
+
+ * emultempl/elf32.em (gld*_before_allocation): Don't prepend
+ "warning" to the message.
+
+2006-10-31 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c (autofilter_entry_type): Change name to const.
+ (pe_details_type) : Change target_name, object_target and
+ autofilter_symbollist to const.
+ (autofilter_symbollist_generic): Change to const.
+ (autofilter_symbollist_i386, pe_detail_list, pe_details,
+ autofilter_liblist, autofilter_objlist autofilter_symbolprefixlist,
+ autofilter_symbolsuffixlist): Likewise.
+ (is_import): Fix indentation.
+ (auto_export): Change afptr to const. Move name declaration to
+ beginning of scope.
+ (make_tail): Clear undefined byte.
+ (jmp_ix86_bytes, jmp_sh_bytes, jmp_mips_bytes, jmp_arm_bytes): Change
+ to const.
+ (make_one): Change jmp_bytes to const. Make idata$6 member size
+ arithmetic explicit and add comment.
+
+2006-10-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3111
+ * ld.h (args_type): Remove reduce_memory_overheads.
+
+ * ldlang.c (lang_map): Updated.
+ (section_already_linked): Likewise.
+ (print_input_section): Likewise.
+ * ldmain.c (main): Likewise.
+ * lexsup.c (parse_args): Likewise.
+
+2006-10-29 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c (make_singleton_name_thunk): Re-add the NULL terminator.
+
+2006-10-27 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_map): Don't say SEC_LINKER_CREATED and SEC_KEEP
+ sections have been discarded.
+ (lang_do_version_exports_section): Set SEC_KEEP on export section.
+ * emultempl/elf32.em (before_allocation): Set SEC_KEEP on warning
+ sections.
+
+2006-10-26 Joseph S. Myers <joseph@codesourcery.com>
+ Mark Mitchell <mark@codesourcery.com>
+
+ * configure.tgt (arm*linux*): Support both big- and little-endian.
+
+2006-10-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emulparams/hppa64linux.sh (LARGE_SECTIONS): Renamed to ...
+ (OTHER_BSS_SECTIONS): This.
+ * scripttempl/elf.sc (OTHER_BSS_SECTIONS): Support LARGE_SECTIONS.
+ (LARGE_SECTIONS): Move .lbss sections to OTHER_BSS_SECTIONS.
+
+2006-10-25 Alan Modra <amodra@bigpond.net.au>
+ Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
+ Yukishige Shibata <shibata@rd.scei.sony.co.jp>
+ Nobuhisa Fujinami <fnami@rd.scei.sony.co.jp>
+ Takeaki Fukuoka <fukuoka@rd.scei.sony.co.jp>
+
+ * emulparams/elf32_spu.sh: New file.
+ * emultempl/spu_inc.s: New file.
+ * emultempl/spu_ovl.S: New file.
+ * emultempl/spu_ovl.o: New file.
+ * emultempl/spuelf.em: New file.
+ * Makefile.am: Add SPU support.
+ * configure.tgt: Likewise.
+ * ldlang.c (load_symbols): Make global.
+ * ldlang.h (load_symbols): Declare.
+ * scripttempl/elf.sc (OTHER_BSS_SECTIONS): Add.
+ * Makefile.in: Regenerate.
+
+2006-10-24 Ben Elliston <bje@au.ibm.com>
+
+ * lexsup.c (parse_args): Add a comment noting a fall-through.
+
+2006-10-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure.in (AC_CHECK_HEADERS): Add limits.h and sys/param.h.
+ * configure: Regenerated.
+ * config.in: Likewise.
+
+2006-10-23 Alan Modra <amodra@bigpond.net.au>
+
+ * emulparams/h8300elf.sh (TINY_DATA_SECTION, TINY_BSS_SECTION): Don't
+ set section address on a relocatable link.
+
+ * ld.texinfo (Output Section Discarding): Fix xref.
+
+2006-10-21 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * emulparams/shelf32.sh: Set default stack to 0x80000.
+ * emulparams/shelf64.sh: Likewise.
+
+2006-10-20 Richard Sandiford <richard@codesourcery.com>
+
+ * emulparams/elf32bmip.sh (OTHER_GOT_RELOC_SECTIONS): Define.
+ * emulparams/elf32bmipn32-defs.sh (OTHER_GOT_RELOC_SECTIONS): Likewise.
+
+2006-10-19 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/armelf.em (arm_elf_before_allocation): Run
+ gld${EMULATION_NAME}_before_allocation later.
+ * ldlang.c (lang_size_sections_1): Revert 2006-09-15 change.
+
+2006-10-18 Roy Marples <uberlord@gentoo.org>
+
+ * emulparams/elf64_sparc_fbsd.sh (OUTPUT_FORMAT): Define as
+ elf64-sparc-freebsd.
+
+2006-10-18 Joseph Myers <joseph@codesourcery.com>
+
+ * configure.tgt (i[3-7]86-*-linux-*): Also define
+ targ_extra_libpath in want64 case.
+ * emulparams/elf_x86_64.sh: Handle i[3-7]86-*-linux-* the same as
+ x86_64*-linux*.
+
+2006-10-17 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc (INTERP): Delete. Move definition to..
+ (INITIAL_READONLY_SECTIONS): ..here.
+ * emulparams/criself.sh (INITIAL_READONLY_SECTIONS): Include .interp.
+ * emulparams/elf32bmip.sh (INITIAL_READONLY_SECTIONS): Ditto.
+ * emulparams/elf32bmipn32-defs.sh (INITIAL_READONLY_SECTIONS): Ditto.
+
+2006-10-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (strip_excluded_output_sections): Do strip sections
+ that define syms, but don't ignore them.
+ * ld.texinfo (Output Section Discarding): Revise.
+ * emultempl/armcoff.em (gld${EMULATION_NAME}_finish): Always call
+ finish_default.
+
+2006-10-16 Richard Sandiford <richard@codesourcery.com>
+
+ * Makefile.am (eelf64bmip.c): Depend on emulparams/elf64bmip-defs.sh.
+ (eelf64btsmip.c, eelf64ltsmip.c): Likewise.
+ * Makefile.in: Regenerate.
+ * emulparams/elf32bmipn32-defs.sh (INITIAL_READONLY_SECTIONS): Include
+ .reginfo rather than .MIPS.options.
+ * emulparams/elf64bmip-defs.sh: New file.
+ * emulparams/elf64bmip.sh: Include it.
+ (COMMONPAGESIZE): Delete.
+ * emulparams/elf64btsmip.sh: As for elf64bmip.sh.
+
+2006-10-12 Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (is_inconsistent_linkonce_section): Check
+ for linkonce XCC exception tables (".e" and ".h").
+
+2006-10-11 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/elf32xtensa.sh (TEXT_PLT): Enable.
+ (OTHER_READONLY_SECTIONS): Add linkonce .xt_except_table sections.
+ (OTHER_READWRITE_SECTIONS): Add linkonce .xt_except_desc sections.
+ (OTHER_SDATA_SECTIONS): New.
+ * scripttempl/elfxtensa.sc: Import changes from elf.sc.
+
+2006-10-11 Jakub Jelinek <jakub@redhat.com>
+
+ * ldlang.c (lang_append_dynamic_list): When appending, add all elements
+ of the dynamic list rather than just the first entry.
+
+2006-10-10 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/elf32xtensa.sh (GENERATE_PIE_SCRIPT): Enable.
+
+2006-10-06 Mike Frysinger <vapier@gentoo.org>
+
+ * genscripts.sh: Respect LIBPATH_SUFFIX when not using sysroot.
+
+2006-10-04 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/xtensa-config.sh: Delete file.
+ * emulparams/elf32xtensa.sh: Set MAXPAGESIZE here instead of including
+ xtensa-config.sh.
+ * Makefile.am (eelf32xtensa.c): Remove dependency on xtensa-config.sh.
+ * Makefile.in: Regenerate.
+
+2006-10-03 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c : Fix typo.
+ (autofilter_symbolprefixlist) : Remove __imp_.
+ (is_import) : New.
+ (auto-export) : Remove re-import check. Moved to callers.
+ (process_def_file) : Check is symbol is an import. Always
+ underscore __imp_.
+ Only skip underscore on underscored targets.
+ (make_one) : Always underscore __imp_.
+ (pe_create_runtime_relocator_reference) : Only underscore
+ _pei386_runtime_relocator on underscored targets.
+ (pe_process_import_defs) : Always underscore __imp_.
+ * pe.em (U) : New macro.
+ (set_pe_subsystem) : Remove underscore from _WinMainCRTStartup
+ on wince subsystem case.
+ (pe_find_data_imports) : Use U on "_head_".
+ (gld_${EMULATION_NAME}_unrecognized_file) : Use U.
+
+2006-09-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3223
+ PR ld/3267
+ * ld.texinfo: Updated Output Section Discarding.
+
+ * ldlang.h (lang_output_section_statement_type): Add
+ section_relative_symbol.
+ * ldlang.c (strip_excluded_output_sections): Don't strip a
+ section with a symbol relative to it.
+ (lang_size_sections_1): Mark if an output section has a symbol
+ symbol relative to it.
+
+2006-09-25 Bob Wilson <bob.wilson@acm.org>
+
+ * ld.texinfo (Options): Update description of local symbols for -X.
+
+2006-09-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3249
+ * scripttempl/elf.sc: Don't combine .gnu.linkonce.d.*personality*
+ and .gnu.linkonce.wi.* sections with .data and .debug_info for
+ relocatable link.
+
+2006-09-20 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * configure.in: Add new target x86_64-pc-mingw64.
+ * configure: Regenerate.
+ * configure.tgt: Add definition of target emulation i386pep.
+ * Makefile.am: Add new target files for target-all.
+ * Makefile.in: Regenerate.
+ * pe-dll.c: Adjust to be inheritable by pep_dll.c as include.
+ Fix memory out of bounds excess for idata relocation section data.
+ * pep-dll.c: Add target specific shared object handling.
+ * pep-dll.h: Add target specific definitions for shared object handling.
+ * emulparams/i386pep.sh: Add new emulation params for target x86_64 coff.
+ * emultempl/pep.em: Add new emulation file for target x86_64 coff.
+ * po/POTFILES.in: Regenerate.
+ * scripttempl/pep.sc: Add linker script template for target x86_64 coff.
+ * NEWS: Mention new target.
+
+2006-09-18 Thiemo Seufer <ths@networkno.de>
+
+ * configure.tgt: Add mips*el-sde-elf* and mips*-sde-elf*
+ configurations.
+
+2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * emulparams/scoreelf.sh: New file.
+ * emultempl/scoreelf.em: New file.
+ * Makefile.am: Add Score files.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Add Score target.
+ * NEWS: Mention new target support.
+
+2006-09-16 Nick Clifton <nickc@redhat.com>
+ Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * ldctor.c: Make use of new STRING_COMMA_LEN and CONST_STRNEQ
+ macros defined in bfd.h.
+ * ldmain.c: Likewise.
+ * ldwrite.c: Likewise.
+ * lexsup.c: Likewise.
+ * pe-dll.c: Likewise.
+ * emultempl/aix.em: Likewise.
+ * emultempl/beos.em: Likewise.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+ * emultempl/xtensaelf.em: Likewise.
+
+2006-09-15 Nick Clifton <nickc@redhat.com>
+
+ PR ld/3107
+ * ldlang.c (lang_size_sections_1): Do not abort when encountering
+ a non-empty section that is ignored. Instead produce a warning
+ message.
+
+2006-09-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld.texinfo: Document --dynamic-list-cpp-typeinfo.
+
+2006-09-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (CXX): Set to g++.
+ (CXX_FOR_TARGET): Likewise.
+ * Makefile.in: Regenerated.
+
+ * NEWS: Mention --dynamic-list.
+
+ * ld.texinfo: Document --dynamic-list.
+
+ * ldgram.y: Support dynamic list.
+
+ * ldlang.c (lang_process): Call lang_finalize_version_expr_head
+ on link_info.dynamic if needed.
+ (lang_append_dynamic_list): New.
+ (lang_append_dynamic_list_cpp_typeinfo): New.
+ * ldlang.h (lang_append_dynamic_list): Likewise.
+ * ldlang.h (lang_append_dynamic_list_cpp_typeinfo): Likewise.
+
+ * ldlex.h (input_enum): Add input_dynamic_list.
+ * ldlex.l: Handle it.
+
+ * ldmain.c (main): Initialize link_info.dynamic.
+
+ * lexsup.c (option_values): Add OPTION_DYNAMIC_LIST and
+ OPTION_DYNAMIC_LIST_CPP_TYPEINFO.
+ (ld_options): Add entries for OPTION_DYNAMIC_LIST and
+ OPTION_DYNAMIC_LIST_CPP_TYPEINFO.
+ (parse_args): Handle OPTION_DYNAMIC_LIST and
+ OPTION_DYNAMIC_LIST_CPP_TYPEINFO.
+
+2006-09-07 Joel Sherrill <joel.sherrill@oarcorp.com>
+
+ * emulparams/h8300elf.sh: _tinydata should not be placed in
+ relocatables.
+ * emulparams/h8300.sh: Likewise.
+ * emulparams/h8300sxelf.sh: Likewise.
+
+2006-09-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3015
+ * emultempl/elf32.em: Enable "-z relro" only if $COMMONPAGESIZE
+ is defined.
+
+2006-08-29 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ldlang.c (walk_wild): Allow * to glob '/' in wildcarded match.
+
+2006-08-28 Alan Modra <amodra@bigpond.net.au>
+
+ * scripttempl/elf.sc: Ensure that crtbegin and crtend entries will
+ not match random object files in a path containing "crtbegin" or
+ "crtend" as part of a directory name.
+ * scripttempl/armbpabi.sc: Likewise.
+ * scripttempl/crisaout.sc: Likewise.
+ * scripttempl/elf32crx.sc: Likewise.
+ * scripttempl/elf32sh-symbian.sc: Likewise.
+ * scripttempl/elf_chaos.sc: Likewise.
+ * scripttempl/elfd10v.sc: Likewise.
+ * scripttempl/elfd30v.sc: Likewise.
+ * scripttempl/elfxtensa.sc: Likewise.
+ * scripttempl/iq2000.sc: Likewise.
+ * scripttempl/mmo.sc: Likewise.
+ * scripttempl/xstormy16.sc: Likewise.
+
+2006-08-24 Bob Wilson <bob.wilson@acm.org>
+
+ * emulparams/elf32xtensa.sh (.xt.prop): Add .xt.prop.*.
+ * scripttempl/elfxtensa.sc (.text): Add .literal.*.
+
+2006-08-24 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * ldlang.c (lang_size_sections_1, lang_assignment_statement_enum):
+ Adjust the current address of DEFAULT_MEMORY_REGION even
+ when dot hasn't changed.
+
+2006-08-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (fold_name <LOADADDR>): Return an absolute value
+ rather than a section relative value.
+
+2006-08-22 Alan Modra <amodra@bigpond.net.au>
+
+ * NEWS: Mention LMA default change.
+ * ld.texinfo (Output Section LMA): Update default description.
+ (Location Counter): Clarify backward movement.
+ * ldlang.c (lang_size_sections_1): Leave non-alloc sections with
+ default lma equal to vma. Warn on backward movement of dot.
+
+2006-08-22 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * configure.tgt: Set targ_emul to arm_wince_pe for ARM
+ Windows CE targets.
+
+2006-08-22 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * Makefile.am: Split arm-wince into its own emulation.
+ * Makefile.in: Regenerate.
+ * pe-dll.c : Define PE_ARCH_arm_wince.
+ (pe_detail_list): Add PE_ARCH_arm_wince case.
+ (make_one): Handle PE_ARCH_arm_epoc and PE_ARCH_arm_wince cases.
+ * emulparams/arm_wince_pe.sh: New file.
+ * emultempl/pe.em: Handle new TARGET_IS_arm_wince_pe define.
+ Remap bfd_arm_allocate_interworking_sections,
+ bfd_arm_get_bfd_for_interworking and
+ bfd_arm_process_before_allocation for arm-pe and arm-wince-pe
+ targets too.
+ (gld_${EMULATION_NAME}_recognized_file): Handle arm-wince and
+ arm-epoc bfd format names.
+
+2006-08-18 Paul Brook <paul@codesourcery.com>
+
+ * emultempl/armelf.em (arm_elf_before_allocation): Call
+ gld${EMULATION_NAME}_before_allocation after setting interworking bfd.
+
+2006-08-17 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c (autofilter_symbolprefixlist): Remove .idata$.
+ (generate_reloc): Revert to skipping sections without a SEC_LOAD flag,
+ and to not skipping .idata* sections.
+
+2006-08-16 Alan Modra <amodra@bigpond.net.au>
+
+ PR 3052
+ * ldlang.h (lang_output_section_statement_type): Replace
+ "processed" field with "processed_vma" and "processed_lma".
+ * ldlang.c (lang_do_assignments_1): Move lma setting code..
+ (lang_size_sections_1): ..to here.
+ (lang_reset_memory_regions): Adjust for
+ lang_output_section_statement_type change.
+ * ldexp.c (fold_name): Likewise.
+
+2006-08-08 Peter S. Mazinger <ps.m@gmx.net>
+
+ * emulparams/armelf.sh (MAXPAGESIZE): Changed to
+ "CONSTANT (MAXPAGESIZE)".
+
+2006-08-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3006
+ * ldlang.c (lang_section_bst_type): Moved to ...
+ * ldlang.h: Here.
+
+ * ldlang.h (lang_wild_statement_struct): Add a tree field.
+
+ * ldlang.c (wild_sort_fast): Use the tree field for BST.
+ (wild): Likeise.
+ (analyze_walk_wild_section_handler): Initialize the tree field.
+
+2006-08-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3009
+ * ldlang.c (update_wild_statements): Update the whole wild
+ section list.
+
+2006-08-04 Nick Clifton <nickc@redhat.com>
+ Mike Frysinger <michael.frysinger@analog.com>
+
+ * scripttempl/elf.sc (USER_LABEL_PREFIX): Define.
+ (__preinit_array_start, __preinit_array_end, __init_array_start,
+ __init_array_end, __fini_array_start, __fini_array_end, edata, end):
+ Use ${USER_LABEL_PREFIX}.
+ * emulparams/bfin.sh (DATA_END_SYMBOLS,END_SYMBOLS): Unset.
+ (USER_LABEL_PREFIX): Set.
+
+2006-08-04 Marcelo Tosatti <marcelo@kvack.org>
+
+ * ldmain.c (main): Initialise print_gc_sections field of link_info
+ structure.
+ * lexsup.c: Add --print-gc-sections and --no-print-gc-sections
+ switches.
+ * ld.texinfo: Document new switches.
+ * NEWS: Mention new switches.
+
+2006-08-04 Richard Sandiford <richard@codesourcery.com>
+ Kazu Hirata <kazu@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+
+ * Makefile.am (ALL_EMULATIONS): Add eshelf_vxworks.o and
+ eshlelf_vxworks.o.
+ (eshelf_vxworks.c, eshlelf_vxworks.c): New rules.
+ * Makefile.in: Regenerate.
+ * configure.tgt (sh-*-vxworks): Use shelf_vxworks and
+ shlelf_vxworks.
+ * emulparams/shelf_vxworks.sh: New file.
+ * emulparams/shlelf_vxworks.sh: Likewise.
+ * emulparams/vxworks.sh (FINI): Prefix _etext with ${SYMPREFIX}.
+ (OTHER_END_SYMBOLS): Likewise _ehdr.
+ (DATA_END_SYMBOLS): Likewise _edata.
+ * emultempl/vxworks.em (vxworks_after_open): Check whether output_bfd
+ is indeed an ELF file before dealing with --force-dynamic.
+
+2006-08-02 Petr Salinger <Petr.Salinger@seznam.cz>
+
+ PR binutils/2983
+ * emulparams/elf_x86_64_fbsd.sh (OUTPUT_FORMAT): Define as
+ elf64-x86-64-freebsd.
+
+2006-08-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ldlang.c (init_os): Add flags. Replace bfd_make_section with
+ bfd_make_section_with_flags.
+ (exp_init_os): Updated.
+ (lang_add_section): Call init_os with flags.
+ (map_input_to_output_sections): Likewise.
+
+2006-07-29 Richard Sandiford <richard@codesourcery.com>
+
+ * Makefile.am (eelf32b4300.c): Update dependencies.
+ (eelf32bmip.c): Likewise.
+ (eelf32bsmip.c): Likewise.
+ (eelf32btsmip.c): Likewise.
+ (eelf32btsmipn32.c): Likewise.
+ (eelf32ltsmip.c): Likewise.
+ (eelf32ltsmipn32.c): Likewise.
+ (eelf32ebmip.c): Likewise.
+ (eelf32ebmipvxworks.c): Likewise.
+ (eelf32elmip.c): Likewise.
+ (eelf32elmipvxworks.c): Likewise.
+ (eelf32bmipn32.c): Likewise.
+ (eelf32lmip.c): Likewise.
+ (eelf32mipswindiss.c): Likewise.
+ (eelf32lsmip.c): Likewise.
+ (eelf64bmip.c): Likewise.
+ (eelf64btsmip.c): Likewise.
+ (eelf64ltsmip.c): Likewise.
+ (emipsbig.c): Likewise. Canonicalize ${GENSCRIPTS} line.
+ (emipsbsd.c): Likewise.
+ (emipsidt.c): Update dependencies.
+ (emipsidtl.c): Likewise.
+ (emipslit.c): Likewise.
+ (emipslnews.c): Likewise.
+ (emipspe.c): Likewise. Fix ${GENSCRIPTS} invocation.
+ * Makefile.in: Regenerate.
+ * emulparams/elf32bmip.sh (EXTRA_EM_FILE): Define.
+ * emulparams/elf32bmipn32-defs.sh (EXTRA_EM_FILE): Likewise.
+ * emultempl/irix.em: Include emultempl/mipself.em.
+ * emultempl/mipself.em: New file.
+
+2006-07-26 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf-generic.em (map_segments): Reorganise loop so that
+ layout happens before segment map. Don't do segment map on
+ relocatable link.
+
+2006-07-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (fold_name <LOADADDR>): Use the lma.
+ * ldlang.h (lang_memory_region_type): Delete old_length. Add
+ last_os.
+ * ldlang.c (lang_memory_region_lookup): Init new field.
+ (lang_reset_memory_regions): Reset new field.
+ (lang_insert_orphan): Don't set load_base.
+ (lang_leave_overlay): Likewise.
+ (lang_size_sections_1): Delete unnecessary code setting lma_region
+ to region. Correct lma region check.
+ (lang_do_assignments_1): Rename output_section_statement parm
+ to current_os. Set lma from previous section in region.
+
+ * ldlang.c: Formatting.
+
+2006-07-25 Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (xtensa_strip_inconsistent_linkonce_sections):
+ Set discarded section's output_section to bfd_abs_section_ptr.
+
+2006-07-26 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (analyze_walk_wild_section_handler): Init handler_data
+ earlier.
+
+2006-07-24 Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (is_inconsistent_linkonce_section): Add space
+ in dep_sec_name for null terminator. Make sure dep_sec_name has a
+ ".t" linkonce tag.
+
+2006-07-14 Michael Wetherell <mike.wetherell@ntlworld.com>
+
+ * emulparams/elf_x86_64.sh (LIBPATH_SUFFIX, ELF_INTERPRETER_NAME):
+ Set for *-*-solaris2*.
+
+2006-07-24 Ralk Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * ld.texinfo: Fix spelling mistakes.
+ * ldint.texinfo: Likewise.
+
+2006-07-23 Sonal Santan <sonal.santan@xilinx.com>
+
+ * ldlang.c (lang_section_bst): New structure for sorting sections
+ by name.
+ (wild_sort_fast): New function: Insert a section into a binary
+ search tree.
+ (output_section_callback_fast): New function: Store a section in
+ BST.
+ (output_section_callback_tree_to_list): New function: Convert a
+ BST into a list.
+ (analyze_walk_wild_section_handler): Initialize handler_data
+ elements.
+ (wild): If the data is sorted by name use the BST method to sort
+ the names.
+
+2006-07-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.h (handle_asneeded_cref): Declare.
+ * ldcref.c: Include objalloc.h.
+ (old_table, old_count, old_tab, alloc_mark): New variables.
+ (tabsize, entsize, refsize, old_symcount): Likewise.
+ (add_cref): Use bfd_hash_allocate for refs.
+ (handle_asneeded_cref): New function.
+ * ldmain.c (notice): Call handle_asneeded_cref for NULL name.
+
+2006-07-14 Michael Wetherell <mike.wetherell@ntlworld.com>
+
+ * configure.tgt (i[3-7]86-*-solaris2*, i[3-7]86-*-solaris*): Correct
+ typo setting targ_extra_libpath.
+
+2006-07-10 Jakub Jelinek <jakub@redhat.com>
+
+ * scripttempl/elf.sc: Add .gnu.hash section.
+ * emultempl/elf32.em (OPTION_HASH_STYLE): Define.
+ (gld${EMULATION_NAME}_add_options): Register --hash-style option.
+ (gld${EMULATION_NAME}_handle_option): Handle it.
+ (gld${EMULATION_NAME}_list_options): Document it.
+ * ldmain.c (main): Initialize emit_hash and emit_gnu_hash.
+ * ld.texinfo: Document --hash-style option.
+
+2006-07-10 Nick Clifton <nickc@redhat.com>
+
+ * po/zh_TW.po: New Chinese (traditional) translation.
+ * configure.in (ALL_LINGUAS): Add zh_TW.
+ * configure: Regenerate.
+
+2006-07-07 Nick Clifton <nickc@redhat.com>
+
+ PR ld/2874
+ * ld.texinfo: Remove "Using LD" from the title since it is
+ redundant.
+
+2006-07-06 Mohammed Adnène Trojette <adn@diwi.org>
+
+ PR ld/2877
+ * ld.texinfo: Fix spelling mistakes.
+
+2006-06-27 Pedro Alves <pedro_alves@portugalmail.pt>
+ Nick Clifton <nickc@redhat.com>
+
+ * emultempl/pe.em (gld_$_open_dynamic_archive): Compute maximum
+ length of format strings in the libname_fmt[] array, rather than
+ relying upon a statically chosen value. Adjust xmalloc call to
+ use this longest length.
+
+2006-06-27 Nick Clifton <nickc@redhat.com>
+
+ * ld.texinfo (-rpath-link): Clarify distinction between -rpath and
+ -rpath-link.
+
+2006-06-23 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.tgt (i[3-7]86-*-solaris2*, i[3-7]86-*-solaris*): Set
+ targ_extra_libpath.
+
+2006-06-23 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c (pe_details_type): Add new pointer for symbols list
+ autofilter.
+ (autofilter_symbollist): Split into autofilter_symbollist_generic
+ and autofilter_symbollist_i386.
+ (pe_detail_list): Add autofilter_symbollist_i386 to i386 case and
+ autofilter_symbollist_generic for all the others.
+ (autofilter_symbolprefixlist): Moved _fmode, _impure_ptr, cygwin_attach_dll,
+ cygwin_premain0, cygwin_premain1, cygwin_premain2, cygwin_premain3, environ,
+ into autofilter_symbollist_i386.
+ (auto_export): Get autofilter_symbollist from pe_details.
+
+2006-06-22 Nick Clifton <nickc@redhat.com>
+
+ PR ld/2757
+ * emultempl/pe.em (gld_$_after_open): When reporting non PE format
+ output files mention the file name and the fact that it is an
+ output file.
+
+2006-06-22 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_open_dynamic_archive):
+ Restructure. Add native "%s.lib" format to search list
+ * ld.texinfo (node WIN32): Update documentation on dynamic lib
+ search order. Add another reason for using import libs.
+
+2006-06-21 Mark Shinwell <shinwell@codesourcery.com>
+
+ * ldlang.c (lang_insert_orphan): Correctly handle the case where
+ the section is to end up after the section currently at the end
+ of the list in output_bfd.
+
+2006-06-21 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * emultempl/mmo.em: Improve comments. Explain why there's
+ ELF-stuff here.
+
+2006-06-21 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf-generic.em (gld${EMULATION_NAME}_map_segments): Limit
+ loop to ten iterations. Throw away any previous linker generated
+ segment map.
+ * ldlang.c (lang_phdr_list): Make global.
+ * ldlang.h (lang_phdr_list): Declare.
+ * Makefile.am (ELF_GEN_DEPS): Define. Use in emul deps.
+ * Makefile.in: Regenerate.
+
+2006-06-20 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (ELF_DEPS): Define. Use in emul file deps. Fix
+ many ELF emul file deps that incorrectly said they needed elf32.em
+ instead of generic.em. Add genelf.em as required.
+ * Makefile.in: Regenerate.
+ * ldlang.c (lang_process): Call ldemul_finish before
+ lang_check_section_addresses.
+ * emulparams/arcelf.sh: Generic elf target needs genelf.
+ * emulparams/d30v_e.sh: Likewise.
+ * emulparams/d30v_o.sh: Likewise.
+ * emulparams/d30velf.sh: Likewise.
+ * emulparams/elf32_dlx.sh: Likewise.
+ * emulparams/elf32_i860.sh: Likewise.
+ * emulparams/elf32fr30.sh: Likewise.
+ * emulparams/elf32frv.sh: Likewise.
+ * emulparams/elf32iq10.sh: Likewise.
+ * emulparams/elf32iq2000.sh: Likewise.
+ * emulparams/elf32mt.sh: Likewise.
+ * emulparams/mn10200.sh: Likewise.
+ * emulparams/or32.sh: Likewise.
+ * emulparams/or32elf.sh: Likewise.
+ * emulparams/pjelf.sh: Likewise.
+ * emulparams/msp430all.sh: Likewise. Extract common entries.
+ * emulparams/pjlelf.sh: Include pjelf.sh.
+ * emulparams/elf32frvfd.sh (EXTRA_EM_FILE): Unset.
+ * emulparams/mn10300.sh (EXTRA_EM_FILE): Unset.
+ * emultempl/elf-generic.em: New file.
+ * emultempl/genelf.em: New file.
+ * emultempl/elf32.em: Include elf-generic.em.
+ (gld${EMULATION_NAME}_layout_sections_again): Delete.
+ (gld${EMULATION_NAME}_finish): Call gld${EMULATION_NAME}_map_segments.
+ * emultempl/hppaelf.em (hppaelf_layout_sections_again): Likewise.
+ (gld${EMULATION_NAME}_finish): Rename from hppaelf_finish. Call
+ gld${EMULATION_NAME}_map_segments.
+ (LDEMUL_FINISH): Update.
+ * emultempl/mmo.em: Correct comment. Include elf-bfd.h and
+ source elf-generic.em.
+ (mmo_finish): Call gld${EMULATION_NAME}_map_segments.
+ * emultempl/ppc64elf.em (ppc_layout_sections_again): Likewise.
+ (gld${EMULATION_NAME}_finish): Rename from ppc_finish. Call
+ gld${EMULATION_NAME}_map_segments.
+ (LDEMUL_FINISH): Update.
+
+2006-06-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (fold_name): Adjust bfd_sizeof_headers call.
+
+2006-06-14 Kevin F. Quinn <kevquinn@gentoo.org>
+
+ * ld.texinfo: Document new -z lazy option.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Handle
+ new option.
+ (gld${EMULATION_NAME}_list_options): Update help text.
+
+2006-06-12 Fred Fish <fnf@specifix.com>
+
+ * emulparams/elf32bmip.sh (OTHER_SECTIONS): Keep the
+ ".mdebug.<abi>" and ".gcc_compiled_long<size>" sections
+ generated by mips gcc.
+
+2006-06-12 Thiemo Seufer <ths@mips.com>
+
+ * emulparams/elf64bmip.sh, emulparams/elf64btsmip.sh (COMMONPAGESIZE):
+ Define.
+
+2006-06-09 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (lang_input_statement_type): Use bitfields for booleans.
+ * ldlang.c (struct out_section_hash_entry): Rename from
+ output_statement_hash_entry. Delete output_section_statement_type
+ entry. Add statement_union_type entry. Adjust all users.
+ (output_section_statement_table): Rename from output_statement_table.
+ Adjust all users.
+ (output_section_statement_newfunc): Rename from
+ output_statement_newfunc. Adjust all users.
+ (output_section_statement_table_init): Rename from
+ output_statement_table_init. Adjust all users.
+ (output_section_statement_table_free): Rename from
+ output_statement_table_free. Adjust all users.
+
+2006-06-07 Joseph S. Myers <joseph@codesourcery.com>
+
+ * po/Make-in (pdf, ps): New dummy targets.
+
+2006-06-07 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (enum section_type): Delete dsect_section, copy_section,
+ info_section and overlay_section. Add noalloc_section.
+ * ldlang.c (lang_add_section): Adjust.
+ * ldgram.y (type): Adjust.
+
+2006-06-06 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (init_os): Whitespace.
+ (map_input_to_output_sections): Don't init_os for lang_input_section.
+ (print_all_symbols): Remove forward declaration. Convert to ISO C.
+
+2006-06-05 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/Make-in (top_builddir): Define.
+
+2006-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ldexp.c (exp_get_abs_int): Make error message the same as
+ others emitted in this file.
+
+2006-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * config.in: Regenerate.
+
+2006-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lookup_name): Delete dead code. Remove FIXMEs.
+
+2006-06-03 Alan Modra <amodra@bigpond.net.au>
+
+ * emultempl/elf32.em (global_found): Make it a pointer.
+ (stat_needed, try_needed): Adjust.
+ (check_needed): Don't skip non-loaded as-needed entries. Only
+ consider entries with both filename and the_bfd non-null.
+ (after_open): Try loading non-loaded as-needed libs to satisfy
+ DT_NEEDED libs.
+
+2006-06-02 Joseph S. Myers <joseph@codesourcery.com>
+
+ * Makefile.am (TEXI2DVI): Add -I $(top_srcdir)/../libiberty.
+ * Makefile.in: Regenerate.
+
+2006-05-31 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am: Replace INTLLIBS and INTLDEPS with LIBINTL
+ and LIBINTL_DEP everywhere.
+ (INTLLIBS): Remove.
+ (INCLUDES): Use @INCINTL@.
+ * configure.in: Use ZW_GNU_GETTEXT_SISTER_DIR and AM_PO_SUBDIRS.
+ Remove local code for po/Makefile.
+ * Makefile.in, configure: Regenerated.
+
+2006-05-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emulparams/arcelf.sh (MAXPAGESIZE): Changed to
+ "CONSTANT (MAXPAGESIZE)".
+ * emulparams/armelf_nbsd.sh: Likewise.
+ * emulparams/armelf_vxworks.sh: Likewise.
+ * emulparams/armnto.sh: Likewise.
+ * emulparams/armsymbian.sh: Likewise.
+ * emulparams/crislinux.sh: Likewise.
+ * emulparams/elf32_i860.sh: Likewise.
+ * emulparams/elf32_i960.sh: Likewise.
+ * emulparams/elf32am33lin.sh: Likewise.
+ * emulparams/elf32bfinfd.sh: Likewise.
+ * emulparams/elf32bmipn32-defs.sh: Likewise.
+ * emulparams/elf32frvfd.sh: Likewise.
+ * emulparams/elf32i370.sh: Likewise.
+ * emulparams/elf32lppcnto.sh: Likewise.
+ * emulparams/elf32mcore.sh: Likewise.
+ * emulparams/elf32openrisc.sh: Likewise.
+ * emulparams/elf32ppcnto.sh: Likewise.
+ * emulparams/elf32ppcwindiss.sh: Likewise.
+ * emulparams/elf32vax.sh: Likewise.
+ * emulparams/elf32xc16x.sh: Likewise.
+ * emulparams/elf32xc16xl.sh: Likewise.
+ * emulparams/elf32xc16xs.sh: Likewise.
+ * emulparams/elf64_aix.sh: Likewise.
+ * emulparams/elf64hppa.sh: Likewise.
+ * emulparams/elf64mmix.sh: Likewise.
+ * emulparams/elf_i386_be.sh: Likewise.
+ * emulparams/elf_i386_chaos.sh: Likewise.
+ * emulparams/elf_i386_ldso.sh: Likewise.
+ * emulparams/hppa64linux.sh: Likewise.
+ * emulparams/hppalinux.sh: Likewise.
+ * emulparams/hppaobsd.sh: Likewise.
+ * emulparams/i386lynx.sh: Likewise.
+ * emulparams/i386moss.sh: Likewise.
+ * emulparams/i386nto.sh: Likewise.
+ * emulparams/i386nw.sh: Likewise.
+ * emulparams/m32relf_linux.sh: Likewise.
+ * emulparams/m68kpsos.sh: Likewise.
+ * emulparams/or32elf.sh: Likewise.
+ * emulparams/pjelf.sh: Likewise.
+ * emulparams/pjlelf.sh: Likewise.
+ * emulparams/ppclynx.sh: Likewise.
+ * emulparams/ppcnw.sh: Likewise.
+ * emulparams/shelf32_nbsd.sh : Likewise.
+ * emulparams/shelf_nbsd.sh: Likewise.
+ * emulparams/shelf_nto.sh: Likewise.
+ * emulparams/shlelf_nto.sh: Likewise.
+ * emulparams/xtensa-config.sh: Likewise.
+
+ * emulparams/armelf_linux.sh (MAXPAGESIZE): Changed to
+ "CONSTANT (MAXPAGESIZE)".
+ (COMMONPAGESIZE): Changed to "CONSTANT (COMMONPAGESIZE)".
+ * emulparams/elf32_sparc.sh: Likewise.
+ * emulparams/elf32bmip.sh: Likewise.
+ * emulparams/elf32ppccommon.sh: Likewise.
+ * emulparams/elf64_ia64.sh: Likewise.
+ * emulparams/elf64_s390.sh: Likewise.
+ * emulparams/elf64_sparc.sh: Likewise.
+ * emulparams/elf64alpha.sh: Likewise.
+ * emulparams/elf64ppc.sh: Likewise.
+ * emulparams/elf_i386.sh: Likewise.
+ * emulparams/elf_i386_vxworks.sh: Likewise.
+ * emulparams/elf_s390.sh: Likewise.
+ * emulparams/elf_x86_64.sh: Likewise.
+ * emulparams/shlelf32_linux.sh: Likewise.
+ * emulparams/shlelf_linux.sh: Likewise.
+
+ * emulparams/elf32bmipn32.sh (COMMONPAGESIZE): Changed to
+ "CONSTANT (COMMONPAGESIZE)".
+ * emulparams/elf32btsmipn32.sh: Likewise.
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Add
+ "-z max-page-size=" and "-z common-page-size=".
+ (gld${EMULATION_NAME}_list_options): Likewise.
+
+ * ld.h (ld_config_type): Add maxpagesize and commonpagesize.
+
+ * ld.texinfo: Document "-z max-page-size=" and
+ "-z common-page-size=".
+
+ * ldexp.c (exp_print_token): Handle CONSTANT.
+ (fold_name): Likewise.
+ * ldgram.y: Likewise.
+ * ldlex.l: Likewise.
+
+ * ldmain.c (main): Initiliaze config.maxpagesize and
+ config.commonpagesize. Call bfd_emul_set_maxpagesize if
+ config.maxpagesize isn't 0. Call bfd_emul_set_commonpagesize if
+ config.commonpagesize config.maxpagesize isn't 0.
+
+2006-05-30 Nick Clifton <nickc@redhat.com>
+
+ * po/es.po: Updated Spanish translation.
+
+2006-05-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emulparams/elf_x86_64.sh (MAXPAGESIZE): Updated to 0x200000.
+
+2006-05-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1485
+ * configure.in: Use ${srcdir}/../bfd/config.bfd to check 64bit
+ bfd. Support 64bit host for --enable-targets=all.
+ * configure: Regenerated.
+
+2006-05-24 Nick Clifton <nickc@redhat.com>
+
+ * po/vi.po: Updated Vietnamese translation.
+
+2006-05-24 Bjoern Haase <bjoern.m.haase@web.de>
+
+ * configure.tgt: Add avr6 to emulation list.
+ * Makefile.am: Add eavr6.o and corresponding rule.
+ * Makefile.in: Regenerate.
+ * emulparams/avr6.sh: New file.
+ * emulparams/avrX.sh (TEMPLATE_NAME): Use elf32 instead of generic
+ for target option support.
+ (EXTRA_EM_FILE): Add reference to new em template file avrelf.
+ * scripttempl/avr.sc: Add ".trampolines" section.
+ * emultempl/avrelf.em: Add new file for target specific options.
+
+2006-05-22 Nick Clifton <nickc@redhat.com>
+
+ * scripttempl/elf32crx.sc (.rdata): Add .rodata.*.
+
+2006-05-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (lang_size_sections_1): Don't check mem regions for
+ os->ignored sections.
+
+2005-05-17 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ldlang.c (lang_size_sections): Call lang_reset_memory_regions
+ before redoing one_lang_size_sections_pass.
+
+2006-05-11 Carlos O'Donell <carlos@codesourcery.com>
+
+ * ld.texinfo: Rename "Index" to "LD Index"
+
+2006-05-11 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * pe-dll.c (autofilter_symbollist): Add Dllmain,
+ DllMainCRTStartup, _DllMainCRTStartup and .text.
+ (autofilter_liblist): Add libcegcc.
+ (autofilter_symbolprefixlist): Add __imp_ and .idata$.
+ (generate_reloc): Do not skip sections without a SEC_LOAD flag,
+ they can still contain relocs that need processing.
+ Skip the .idata$6 section.
+ (jmp_arm_bytes): New array: Contains byte codes for an ARM jump.
+ (make_one): Use the new array.
+ (make_import_fixup_entry): Use .idata$2 instead of .idata$3.
+ * emultempl/pe.em (MajorSubsystemVersion): Set to 3 for armpe.
+
+2006-05-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo: Document PowerPC and PowerPC64 options.
+ * gen-doc.texi: Enable.
+
+2006-05-02 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (AM_MAKEINFOFLAGS): Add libiberty.
+ (TEXI2POD): Use AM_MAKEINFOFLAGS.
+ (configdoc.texi): Don't set top_srcdir.
+ * ld.texinfo: Don't use top_srcdir.
+ * aclocal.m4, Makefile.in: Regenerated.
+
+2006-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (wild): Tidy default_common_section loop.
+ (print_input_section): Format.
+
+ * configure: Regenerate.
+
+2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/POTFILES.in: Regenerated.
+
+2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * config.in: Regenerated.
+
+2006-04-14 David Heine <dlheine@tensilica.com>
+ Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (elf_xtensa_before_allocation): Call new
+ function to strip inconsistent linkonce sections.
+ (input_section_linked_worker, input_section_linked): New.
+ (is_inconsistent_linkonce_section): New.
+ (xtensa_strip_inconsistent_linkonce_sections): New.
+
+2006-04-11 Diego Pettenò <flameeyes@gentoo.org>
+
+ * emultempl/elf32.em: Add support for elf-hints.h on FreeBSD
+ and Dragonfly targets.
+ * configure.in (AC_CHECK_HEADERS): Add elf-hints.h.
+ * Makefile.am (HFILES): Add elf-hints-local.h.
+ * elf-hints-local.h: New file.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+
+2006-04-07 Bernhard Fischer <aldot@gcc.gnu.org>
+
+ * ld.texinfo: Fix typo in documentation of --check-sections.
+
+2006-04-07 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ldlang.c (load_symbols): Set as_needed and add_needed according
+ to the corresponding script's fields while processing it.
+
+2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
+
+ * Makefile.am: Add install-html, install-html-am, and
+ install-html-recursive targets.
+ * Makefile.in: Regenerate.
+ * configure.in: AC_SUBST datarootdir, docdir, htmldir.
+ * configure: Regenerate.
+ * po/Make-in: Add install-html target.
+
+2006-04-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/ia64elf.em: Set link_info.relax_pass to 2. Remove
+ link_info.need_relax_finalize.
+
+ * ldlang.c (relax_sections): New.
+ (lang_process): Use. Call relax_sections link_info.relax_pass
+ times.
+
+ * ldmain.c (main): Set link_info.relax_pass to 1. Remove
+ link_info.need_relax_finalize.
+
+2006-04-05 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am (GENSCRIPTS): Pass prefix.
+ * Makefile.in: Regenerate.
+ * genscripts.sh: Adjust for extra parameter.
+ * emultempl/elf32.em (parse_ld_so_conf): Return true iff file
+ exists.
+ (check_ld_so_conf): Use ${prefix}/etc/ld.so.conf if it exists.
+ * NEWS: Update.
+
+2006-04-05 Richard Sandiford <richard@codesourcery.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+
+ * configure.tgt (sparc*-*-vxworks*): New stanza.
+ * emulparams/elf32_sparc_vxworks.sh: New file.
+ * Makefile.am (ALL_EMULATIONS): Add eelf32_sparc_vxworks.o.
+ (eelf32_sparc_vxworks.c): New rule.
+ * Makefile.in: Regenerate.
+
+2006-04-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * ldlang.c (lang_map): Print the list of discarded input sections.
+ (print_input_section): Change parameter and print zero-sized sections.
+ (print_statement): Adjust call to print_input_section.
+
+2006-04-01 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * deffilep.y (def_image_name): If LIBRARY or NAME statement
+ specifies an empty string, retain the name specified on command
+ line.
+ * ld.texinfo: Document above.
+
+2006-03-31 Jakub Jelinek <jakub@redhat.com>
+
+ * ldmisc.c (vfinfo): Revert 2005-10-05 changes. If
+ bfd_find_nearest_line succeeded for %C or %D, but filename
+ is NULL, print section+offset at the end.
+
+2006-03-25 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * emulparams/elf32bfinfd.sh: New file.
+ * emultempl/bfin.em: Delete.
+ * emulparams/bfin.sh: Lose reference to bfin.em.
+ * Makefile.am (eelf32bfin.c): Likewise.
+ (eelf32bfinfd.c): New.
+ * Makefile.in: Regenerate.
+ * configure.tgt (bfin-*-elf, bfin-*-uclinux): Add elf32bfinfd to
+ targ_extra_emuls.
+
+2006-03-22 Richard Sandiford <richard@codesourcery.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+ Zack Weinberg <zack@codesourcery.com>
+ Mark Mitchell <mark@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+
+ * configure.tgt (mips*el-*-vxworks*, mips*-*-vxworks*): Use
+ separate VxWorks emulations.
+ * emulparams/elf32ebmipvxworks.sh: New file.
+ * emulparams/elf32elmipvxworks.sh: New file.
+ * Makefile.am (ALL_EMULATIONS): Add eelf32ebmipvxworks.o and
+ eelf32elmipvxworks.o.
+ (eelf32ebmipvxworks.c, eelf32elmipvxworks.c): New rules.
+ * Makefile.in: Regenerate.
+
+2006-03-16 Alan Modra <amodra@bigpond.net.au>
+
+ PR 2434
+ * ldcref.c (add_cref): Adjust bfd_hash_table_init calls.
+ * ldlang.c (output_statement_table_init, lang_init): Likewise.
+ * ldmain.c (add_ysym, add_wrap, add_keepsyms_file): Likewise.
+ (undefined_symbol): Likewise.
+
+2006-03-07 Richard Sandiford <richard@codesourcery.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+ Zack Weinberg <zack@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+ Paul Brook <paul@codesourcery.com>
+ Ricardo Anguiano <anguiano@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+
+ * emulparams/armelf_vxworks.sh: Include vxworks.sh.
+ (MAXPAGESIZE): Define.
+ * emulparams/vxworks.sh: Undefine EMBEDDED.
+ * Makefile.am (earmelf_vxworks.c): Depend on vxworks.sh and vxworks.em.
+ * Makefile.in: Regenerate.
+
+2006-03-03 Bjoern Haase <bjoern.m.haase@web.de>
+
+ * scripttempl/avr.sc: Add *(.jumptables) *(.lowtext) sections.
+ Add KEEP() directives.
+ Add *(.data*) *(.rodata) and *(.rodata*) and *(.bss*) to .data and
+ .bss output sections.
+
+2006-03-03 Richard Sandiford <richard@codesourcery.com>
+
+ * emulparams/vxworks.sh (VXWORKS_BASE_EM_FILE): New variable.
+ (EXTRA_EM_FILE): Define.
+ * emultempl/vxworks.em: New file.
+ * ld.texinfo (--force-dynamic): Document.
+ * Makefile.am (eelf32ppcvxworks.cm, eelf_i386_vxworks.c): Depend
+ on vxworks.em.
+ * Makefile.in: Regenerate.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * emulparams/elf32ppccommon.sh: New file, extracted from...
+ * emulparams/elf32ppc.sh: ...here.
+ * emulparams/elf32ppcvxworks.sh: Include elf32ppccommon.sh
+ instead of elf32ppc.sh.
+ (BSS_PLT): Remove override.
+ * Makefile.am (eelf32lppc.c): Depend on elf32ppccommons.h.
+ (eelf32lppcnto.c, eelf32lppcsim.c, eelf32ppcnto.c): Likewise.
+ (eelf32ppc.c, eelf32ppc_fbsd.c, eelf32ppcsimm): Likewise.
+ (eelf32ppclinux.c): Likewise.
+ (eelf32ppcvxworks.c): Likewise. Add missing vxworks.sh dependency.
+ * Makefile.in: Regenerate.
+
+2006-02-27 Carlos O'Donell <carlos@codesourcery.com>
+
+ * Makefile.am: Add html target.
+ * Makefile.in: Regenerate.
+ * po/Make-in: Add html target.
+
+2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
+ Anil Paranjape <anilp1@kpitcummins.com>
+ Shilin Shakti <shilins@kpitcummins.com>
+
+ * scripttemp/elf32xc16x.sc: Default linker script for tiny model.
+ * scripttemp/elf32xc16xl.sc: Default linker script for large model.
+ * scripttemp/elf32xc16xs.sc: Default linker script for small model.
+ * emulparams/elf32xc16x.sh: Emulation script for tiny model.
+ * emulparams/elf32xc16xl.sh: Emulation script for large model.
+ * emulparams/elf32xc16xs.sh: Emulation script for small model.
+ * Makefile.am: Add entry to make xc16x target.
+ * Makefile.in: Regenerate.
+ * configure.tgt: Specify default and other emulation parameters
+ for xc16x.
+ * NEWS: Announce the support for the new target.
+
+2006-02-16 Nick Hudson <nick.hudson@dsl.pipex.com>
+
+ * configure.tgt (mips*el-*-netbsd*, mips*-*-netbsd*):
+ Use the traditional target.
+
+2006-02-13 Joseph S. Myers <joseph@codesourcery.com>
+
+ * configure.tgt (arm*b-*-linux-gnueabi): Change to
+ arm*b-*-linux-*eabi.
+ (arm*-*-linux-gnueabi): Change to arm*-*-linux-*eabi.
+
+2006-02-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2290
+ * NEWS: Updated for the Linux linker search order change.
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Call
+ gld${EMULATION_NAME}_check_ld_so_conf before checking default
+ search directories for DT_NEEDED entries.
+
+2006-02-07 Paul Brook <paul@codesourcery.com>
+
+ * emultempl/armelf.em: Include elf/arm.h.
+ (arm_elf_finish): Set low address bit if enty point is a Thumb
+ function.
+
+2006-02-01 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * deffilep.y (def_image_name): If the image name does not have
+ a suffix, append the default.
+ * ld.texinfo: Document NAME, LIBRARY usage in PE-COFF .def files.
+
+2006-01-31 Danny Smith dannysmith@users.sourceforge.net
+
+ * NEWS: Mention support for forward exports in PE-COFF dll's.
+ * ld.texinfo: Expand documentation of EXPORT statements in
+ PE-COFF .def files.
+
+2006-01-31 Filip Navara <navaraf@reactos.com>
+
+ * deffile.h (struct def_file_export): Add field flag_forward.
+ * pe-dll.c (process_def_file): Check for forward exports.
+ (generate_edata): Generate forward export symbols.
+ (fill_edata): Emit them.
+
+ * pe-dll.c (process_def_file): Don't crash on malformed
+ fastcall symbol names in .def file.
+
+2006-01-30 Nick Clifton <nickc@redhat.com>
+
+ * po/vi.po: Updated Vietnamese translation.
+
+2006-01-27 Yitzchak Scott-Thoennes <sthoenna@efn.org>
+
+ * pe-dll.c (pe_dll_generate_implib): Issue "Creating library
+ file:" as informational message, not a warning.
+
+2006-01-18 Roger Sayle <roger@eyesopen.com>
+
+ * emultempl/irix.em: Use lbasename instead of basename.
+
+2006-01-16 Nick Clifton <nickc@redhat.com>
+
+ * po/zh_CN.po: New Chinese (simplified) translation.
+ * configure.in (ALL_LINGUAS): Add "zh_CH".
+ * configure: Regenerate.
+
+2006-01-16 Bernhard Fischer <aldot@gcc.gnu.org>
+
+ * ld.texinfo (Options): Fix typo.
+
+For older changes see ChangeLog-2005
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/ld/Makefile.am b/ld/Makefile.am
index 3f5d1a6e710e..72dd649b641b 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -1,9 +1,7 @@
## Process this file with automake to generate Makefile.in
-## FIXME: work around apparent automake bug.
-INTLLIBS = @INTLLIBS@
-
AUTOMAKE_OPTIONS = cygnus dejagnu
+ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd
SUBDIRS = po
@@ -76,31 +74,36 @@ CC_FOR_TARGET = ` \
fi; \
fi`
-CXX = gcc
+CXX = g++
CXX_FOR_TARGET = ` \
- if [ -f $$r/../gcc/xgcc ] ; then \
+ if [ -f $$r/../gcc/g++ ] ; 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; \
+ echo $$r/../gcc/g++ -B$$r/../gcc/ -idirafter $$r/../newlib/targ-include -idirafter $${srcroot}/../newlib/libc/include -nostdinc; \
else \
- echo $$r/../gcc/xgcc -B$$r/../gcc/; \
+ echo $$r/../gcc/g++ -B$$r/../gcc/; \
fi; \
else \
if [ "@host@" = "@target@" ] ; then \
echo $(CXX); \
else \
- echo gcc | sed '$(transform)'; \
+ echo g++ | sed '$(transform)'; \
fi; \
fi`
noinst_PROGRAMS = ld-new
info_TEXINFOS = ld.texinfo
+ld_TEXINFOS = configdoc.texi
noinst_TEXINFOS = ldint.texinfo
man_MANS = ld.1
-AM_MAKEINFOFLAGS = -I $(srcdir) -I $(BFDDIR)/doc -I $(top_srcdir)/../libiberty
-TEXI2DVI = texi2dvi -I $(srcdir) -I $(BFDDIR)/doc -I $(top_srcdir)/../libiberty
+AM_MAKEINFOFLAGS = -I $(srcdir) -I $(BFDDIR)/doc -I ../bfd/doc \
+ -I $(top_srcdir)/../libiberty
+TEXI2DVI = texi2dvi -I $(srcdir) -I $(BFDDIR)/doc -I ../bfd/doc \
+ -I $(top_srcdir)/../libiberty
-INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) -I$(top_srcdir)/../intl -I../intl $(HDEFINES) $(CFLAGS) -DLOCALEDIR="\"$(datadir)/locale\""
+INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \
+ @INCINTL@ $(HDEFINES) $(CFLAGS) \
+ -DLOCALEDIR="\"$(datadir)/locale\""
BFDLIB = ../bfd/libbfd.la
LIBIBERTY = ../libiberty/libiberty.a
@@ -111,6 +114,7 @@ ALL_EMULATIONS = \
ealpha.o \
earcelf.o \
earm_epoc_pe.o \
+ earm_wince_pe.o \
earmaoutb.o \
earmaoutl.o \
earmcoff.o \
@@ -133,8 +137,10 @@ ALL_EMULATIONS = \
eavr3.o \
eavr4.o \
eavr5.o \
+ eavr6.o \
ecoff_i860.o \
ecoff_sparc.o \
+ eelf32_spu.o \
ecrisaout.o \
ecriself.o \
ecrislinux.o \
@@ -151,6 +157,7 @@ ALL_EMULATIONS = \
eelf32b4300.o \
eelf32bfin.o \
eelf32bfinfd.o \
+ eelf32cr16.o \
eelf32cr16c.o \
eelf32bmip.o \
eelf32bmipn32.o \
@@ -176,6 +183,7 @@ ALL_EMULATIONS = \
eelf32lppcsim.o \
eelf32m32c.o \
eelf32mcore.o \
+ eelf32mep.o \
eelf32mipswindiss.o \
eelf32mt.o \
eelf32openrisc.o \
@@ -241,6 +249,7 @@ ALL_EMULATIONS = \
ei386nw.o \
ei386pe.o \
ei386pe_posix.o \
+ ei386pep.o \
elnk960.o \
em32relf.o \
em32rlelf.o \
@@ -341,6 +350,7 @@ ALL_EMULATIONS = \
eppcpe.o \
eppclynx.o \
eriscix.o \
+ escoreelf.o \
esh.o \
eshelf32.o \
eshlelf32.o \
@@ -355,6 +365,9 @@ ALL_EMULATIONS = \
eshlelf_nbsd.o \
eshelf_nto.o \
eshlelf_nto.o \
+ eshelf_uclinux.o \
+ eshelf_vxworks.o \
+ eshlelf_vxworks.o \
eshl.o \
eshlelf.o \
eshlsymbian.o \
@@ -410,15 +423,16 @@ ALL_64_EMULATIONS = \
ALL_EMUL_EXTRA_OFILES = \
deffilep.o \
- pe-dll.o
+ pe-dll.o \
+ pep-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
+ mri.c ldcref.c pe-dll.c pep-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
+ ldwrite.h mri.h deffile.h pe-dll.h pep-dll.h elf-hints-local.h
GENERATED_CFILES = ldgram.c ldlex.c deffilep.c
GENERATED_HFILES = ldgram.h ldemul-list.h deffilep.h
@@ -455,6 +469,10 @@ ldmain.o: ldmain.c config.status
-DTARGET='"@target@"' @TARGET_SYSTEM_ROOT_DEFINE@ \
$(srcdir)/ldmain.c
+eelf32_spu.o: eelf32_spu.c
+ $(COMPILE) -c -DEMBEDSPU="\"`echo embedspu | sed '$(transform)'`\"" \
+ eelf32_spu.c
+
ldemul-list.h: Makefile
(echo "/* This file is automatically generated. DO NOT EDIT! */";\
for f in `echo " " ${EMULATION_OFILES} "" \
@@ -477,6 +495,8 @@ stringify.sed: ${srcdir}/emultempl/$(STRINGIFY)
GENSCRIPTS = LIB_PATH='${LIB_PATH}' $(SHELL) $(srcdir)/genscripts.sh "${srcdir}" "${libdir}" "${prefix}" "${exec_prefix}" @host@ @target@ @target_alias@ "@EMULATION_LIBPATH@" "@NATIVE_LIB_DIRS@" @use_sysroot@
GEN_DEPENDS = $(srcdir)/genscripts.sh stringify.sed
+ELF_DEPS = $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/elf-generic.em
+ELF_GEN_DEPS = $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/elf-generic.em $(srcdir)/emultempl/genelf.em
@TDIRS@
@@ -496,55 +516,55 @@ 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}
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} arcelf "$(tdir_arcelf)"
earmelf.c: $(srcdir)/emulparams/armelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelf "$(tdir_armelf)"
earmelfb.c: $(srcdir)/emulparams/armelfb.sh $(srcdir)/emulparams/armelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelfb "$(tdir_armelfb)"
earmelf_fbsd.c: $(srcdir)/emulparams/armelf_fbsd.sh \
$(srcdir)/emulparams/armelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelf_fbsd "$(tdir_armelf_fbsd)"
earmelf_linux.c: $(srcdir)/emulparams/armelf_linux.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelf_linux "$(tdir_armelf_linux)"
earmelf_linux_eabi.c: $(srcdir)/emulparams/armelf_linux_eabi.sh \
$(srcdir)/emulparams/armelf_linux.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelf_linux_eabi "$(tdir_armelf_linux_abi)"
earmelfb_linux.c: $(srcdir)/emulparams/armelfb_linux.sh \
$(srcdir)/emulparams/armelf_linux.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelfb_linux "$(tdir_armelfb_linux)"
earmelfb_linux_eabi.c: $(srcdir)/emulparams/armelfb_linux_eabi.sh \
$(srcdir)/emulparams/armelf_linux_eabi.sh \
$(srcdir)/emulparams/armelf_linux.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelfb_linux_eabi "$(tdir_armelfb_linux_abi)"
earmelf_nbsd.c: $(srcdir)/emulparams/armelf_nbsd.sh \
$(srcdir)/emulparams/armelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelf_nbsd "$(tdir_armelf_nbsd)"
earmelfb_nbsd.c: $(srcdir)/emulparams/armelfb_nbsd.sh \
$(srcdir)/emulparams/armelf_nbsd.sh \
$(srcdir)/emulparams/armelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelfb_nbsd "$(tdir_armelfb_nbsd)"
earmelf_vxworks.c: $(srcdir)/emulparams/armelf_vxworks.sh \
$(srcdir)/emulparams/vxworks.sh $(srcdir)/emulparams/armelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/vxworks.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/vxworks.em \
$(srcdir)/emultempl/armelf.em $(srcdir)/scripttempl/elf.sc \
${GEN_DEPENDS}
${GENSCRIPTS} armelf_vxworks "$(tdir_armelf)"
@@ -561,40 +581,47 @@ 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 \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armnto "$(tdir_armnto)"
earm_epoc_pe.c: $(srcdir)/emulparams/arm_epoc_pe.sh \
$(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/epocpe.sc ${GEN_DEPENDS}
${GENSCRIPTS} arm_epoc_pe "$(tdir_armpe)"
+earm_wince_pe.c: $(srcdir)/emulparams/arm_wince_pe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} arm_wince_pe "$(tdir_armpe)"
earmpe.c: $(srcdir)/emulparams/armpe.sh \
$(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
${GENSCRIPTS} armpe "$(tdir_armpe)"
earmsymbian.c: $(srcdir)/emulparams/armsymbian.sh \
- $(srcdir)/emulparams/armelf.sh $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emulparams/armelf.sh $(ELF_DEPS) \
$(srcdir)/emultempl/armelf.em $(srcdir)/scripttempl/armbpabi.sc \
${GEN_DEPENDS}
${GENSCRIPTS} armsymbian "$(tdir_armelf)"
-eavr2.c: $(srcdir)/emulparams/avr2.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+eavr2.c: $(srcdir)/emulparams/avr2.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr2 "$(tdir_avr2)"
-eavr1.c: $(srcdir)/emulparams/avr1.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+eavr1.c: $(srcdir)/emulparams/avr1.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr1 "$(tdir_avr2)"
-eavr3.c: $(srcdir)/emulparams/avr3.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+eavr3.c: $(srcdir)/emulparams/avr3.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr3 "$(tdir_avr2)"
-eavr4.c: $(srcdir)/emulparams/avr4.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+eavr4.c: $(srcdir)/emulparams/avr4.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr4 "$(tdir_avr2)"
-eavr5.c: $(srcdir)/emulparams/avr5.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+eavr5.c: $(srcdir)/emulparams/avr5.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr5 "$(tdir_avr2)"
+eavr6.c: $(srcdir)/emulparams/avr6.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr6 "$(tdir_avr2)"
ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS}
${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)"
@@ -605,332 +632,381 @@ 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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elfd30v.sc ${GEN_DEPENDS}
${GENSCRIPTS} d30v_e "$(tdir_d30v)"
edelta68.c: $(srcdir)/emulparams/delta68.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/delta68.sc ${GEN_DEPENDS}
${GENSCRIPTS} delta68 "$(tdir_delta68)"
eelf32bfin.c: $(srcdir)/emulparams/bfin.sh \
- $(srcdir)/emultempl/elf32.em \
+ $(ELF_DEPS) \
$(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 \
+ $(ELF_DEPS) \
$(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}
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_DEPS) $(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 \
+ $(ELF_DEPS) $(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 \
+ $(ELF_DEPS) $(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 \
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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 \
+eelf32xtensa.c: $(srcdir)/emulparams/elf32xtensa.sh $(ELF_DEPS) \
$(srcdir)/emultempl/xtensaelf.em $(INCDIR)/xtensa-config.h \
$(BFDDIR)/elf-bfd.h $(BFDDIR)/libbfd.h $(INCDIR)/elf/xtensa.h \
$(srcdir)/scripttempl/elfxtensa.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32xtensa "$(tdir_elf32xtensa)"
eelf32fr30.c: $(srcdir)/emulparams/elf32fr30.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_GEN_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32frv "$(tdir_frv)"
+eelf32frvfd.c: $(srcdir)/emulparams/elf32frvfd.sh \
+ $(srcdir)/emulparams/elf32frv.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32frvfd "$(tdir_frv)"
eelf32mcore.c: $(srcdir)/emulparams/elf32mcore.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32mcore "$(tdir_mcore)"
+eelf32mep.c: $(srcdir)/emulparams/elf32mep.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/mep.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mep "$(tdir_mep)"
em32relf.c: $(srcdir)/emulparams/m32relf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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)/emultempl/vxworks.em $(ELF_DEPS) \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32_sparc_vxworks "$(tdir_elf32_sparc_vxworks)"
+eelf32_spu.c: $(srcdir)/emulparams/elf32_spu.sh $(srcdir)/emultempl/spuelf.em \
+ $(srcdir)/emultempl/spu_ovl.o \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_spu "$(tdir_elf32_spu)"
+$(srcdir)/emultempl/spu_ovl.o: @MAINT@ $(srcdir)/emultempl/spu_ovl.S
+ cpp -DOVLY_IRQ_SAVE $(srcdir)/emultempl/spu_ovl.S spu_ovl.s
+ if ../gas/as-new --version \
+ | grep 'target.*spu' >/dev/null 2>/dev/null; then \
+ ../gas/as-new -o $@ spu_ovl.s; \
+ fi
eelf32_i860.c: $(srcdir)/emulparams/elf32_i860.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_GEN_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32b4300 "$(tdir_elf32b4300)"
+eelf32cr16.c: $(srcdir)/emulparams/elf32cr16.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/cr16elf.em \
+ $(srcdir)/scripttempl/elf32cr16.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32cr16 "$(tdir_elf32crx)"
eelf32cr16c.c: $(srcdir)/emulparams/elf32cr16c.sh \
- $(srcdir)/emultempl/elf32.em \
+ $(ELF_DEPS) \
$(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}
+eelf32bmip.c: $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32bmip "$(tdir_elf32bmip)"
eelf32bsmip.c: $(srcdir)/emulparams/elf32bsmip.sh \
- $(srcdir)/emulparams/elf32bmip.sh $(srcdir)/emultempl/irix.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) $(srcdir)/emultempl/irix.em \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32bsmip "$(tdir_elf32bsmip)"
eelf32btsmip.c: $(srcdir)/emulparams/elf32btsmip.sh \
- $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32btsmip "$(tdir_elf32btsmip)"
eelf32crx.c: $(srcdir)/emulparams/elf32crx.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/crxelf.em \
+ $(ELF_DEPS) $(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}
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32btsmipn32 "$(tdir_elf32btsmipn32)"
eelf32ltsmip.c: $(srcdir)/emulparams/elf32ltsmip.sh \
$(srcdir)/emulparams/elf32btsmip.sh $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.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}
+ $(srcdir)/emulparams/elf32btsmipn32.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ltsmipn32 "$(tdir_elf32ltsmipn32)"
eelf32ebmip.c: $(srcdir)/emulparams/elf32ebmip.sh \
- $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ebmip "$(tdir_elf32ebmip)"
eelf32ebmipvxworks.c: $(srcdir)/emulparams/elf32ebmipvxworks.sh \
- $(srcdir)/emulparams/elf32ebmip.sh $(srcdir)/emulparams/vxworks.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/vxworks.em \
- $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf32bmip.sh $(srcdir)/emulparams/vxworks.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/emultempl/vxworks.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ebmipvxworks "$(tdir_elf32ebmipvxworks)"
eelf32elmip.c: $(srcdir)/emulparams/elf32elmip.sh \
$(srcdir)/emulparams/elf32lmip.sh $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.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}
+ $(srcdir)/emulparams/elf32bmip.sh $(srcdir)/emulparams/vxworks.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/emultempl/vxworks.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32elmipvxworks "$(tdir_elf32elmipvxworks)"
eelf32bmipn32.c: $(srcdir)/emulparams/elf32bmipn32.sh \
- $(srcdir)/emultempl/irix.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/irix.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32bmipn32 "$(tdir_elf32bmipn32)"
eelf32l4300.c: $(srcdir)/emulparams/elf32l4300.sh \
$(srcdir)/emulparams/elf32b4300.sh $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \
+ ${GEN_DEPENDS}
${GENSCRIPTS} elf32l4300 "$(tdir_elf32l4300)"
eelf32lmip.c: $(srcdir)/emulparams/elf32lmip.sh \
- $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.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}
+eelf32mipswindiss.c: $(srcdir)/emulparams/elf32mipswindiss.sh $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32mipswindiss "$(tdir_elf32mipswindiss)"
+eelf32m32c.c: $(srcdir)/emulparams/elf32m32c.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32m32c "$(tdir_m32c)"
+eelf32mt.c: $(srcdir)/emulparams/elf32mt.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mt "$(tdir_mt)"
eelf32lppc.c: $(srcdir)/emulparams/elf32lppc.sh \
$(srcdir)/emulparams/elf32ppccommon.sh \
$(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emultempl/ppc32elf.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32lppc "$(tdir_elf32lppc)"
eelf32lppcnto.c: $(srcdir)/emulparams/elf32lppcnto.sh \
$(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
- $(srcdir)/emultempl/ppc32elf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32lppcnto "$(tdir_elf32lppcnto)"
eelf32lppcsim.c: $(srcdir)/emulparams/elf32lppcsim.sh \
$(srcdir)/emulparams/elf32lppc.sh $(srcdir)/emulparams/elf32ppc.sh \
$(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32lppcsim "$(tdir_elf32lppcsim)"
eelf32ppcnto.c: $(srcdir)/emulparams/elf32ppcnto.sh \
$(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
- $(srcdir)/emultempl/ppc32elf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppcnto "$(tdir_elf32ppcnto)"
eelf32ppcwindiss.c: $(srcdir)/emulparams/elf32ppcwindiss.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppcwindiss "$(tdir_elf32ppcwindiss)"
eelf32ppcvxworks.c: $(srcdir)/emulparams/elf32ppcvxworks.sh \
$(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emulparams/vxworks.sh \
- $(srcdir)/emultempl/vxworks.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/vxworks.em $(ELF_DEPS) \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppcvxworks "$(tdir_elf32ppcvxworks)"
eelf32lsmip.c: $(srcdir)/emulparams/elf32lsmip.sh \
$(srcdir)/emulparams/elf32lmip.sh $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32openrisc "$(tdir_openrisc)"
eelf32ppc.c: $(srcdir)/emulparams/elf32ppc.sh \
$(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppc "$(tdir_elf32ppc)"
eelf32ppc_fbsd.c: $(srcdir)/emulparams/elf32ppc_fbsd.sh \
$(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
- $(srcdir)/emultempl/ppc32elf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppc_fbsd "$(tdir_elf32ppc_fbsd)"
eelf32ppcsim.c: $(srcdir)/emulparams/elf32ppcsim.sh \
$(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
- $(srcdir)/emultempl/ppc32elf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppcsim "$(tdir_elf32ppcsim)"
eelf32ppclinux.c: $(srcdir)/emulparams/elf32ppclinux.sh \
$(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
- $(srcdir)/emultempl/ppc32elf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppclinux "$(tdir_elf32ppclinux)"
eelf64ppc.c: $(srcdir)/emulparams/elf64ppc.sh $(srcdir)/emultempl/ppc64elf.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64ppc "$(tdir_elf64ppc)"
eelf64lppc.c: $(srcdir)/emulparams/elf64lppc.sh \
$(srcdir)/emulparams/elf64ppc.sh $(srcdir)/emultempl/ppc64elf.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ldemul-list.h \
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/iq2000.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32iq10 "$(tdir_iq10)"
eelf64alpha.c: $(srcdir)/emulparams/elf64alpha.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/alphaelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/alphaelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64alpha "$(tdir_elf64alpha)"
eelf64alpha_fbsd.c: $(srcdir)/emulparams/elf64alpha_fbsd.sh \
$(srcdir)/emulparams/elf64alpha.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/alphaelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/alphaelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64alpha_fbsd "$(tdir_elf64alpha_fbsd)"
eelf64alpha_nbsd.c: $(srcdir)/emulparams/elf64alpha_nbsd.sh \
$(srcdir)/emulparams/elf64alpha.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/alphaelf.em \
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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 \
+ $(ELF_DEPS) $(srcdir)/emultempl/ia64elf.em \
$(srcdir)/emultempl/needrelax.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64_ia64 "$(tdir_elf64_ia64)"
eelf64_ia64_fbsd.c: $(srcdir)/emulparams/elf64_ia64_fbsd.sh \
$(srcdir)/emulparams/elf64_ia64.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/ia64elf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/ia64elf.em \
$(srcdir)/emultempl/needrelax.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64_ia64_fbsd "$(tdir_elf64_ia64_fbsd)"
eelf64_s390.c: $(srcdir)/emulparams/elf64_s390.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64_sparc "$(tdir_elf64_sparc)"
eelf64_sparc_fbsd.c: $(srcdir)/emulparams/elf64_sparc_fbsd.sh \
$(srcdir)/emulparams/elf64_sparc.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(srcdir)/emulparams/elf64bmip-defs.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/irix.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64bmip "$(tdir_elf64bmip)"
eelf64mmix.c: $(srcdir)/emulparams/elf64mmix.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/mmix-elfnmmo.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/mmix-elfnmmo.em \
$(srcdir)/emultempl/mmixelf.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64mmix "$(tdir_elf64mmix)"
emmo.c: $(srcdir)/emulparams/mmo.sh $(srcdir)/emultempl/mmix-elfnmmo.em \
- $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mmo.em \
+ $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/elf-generic.em \
+ $(srcdir)/emultempl/mmo.em \
$(srcdir)/scripttempl/mmo.sc ${GEN_DEPENDS}
${GENSCRIPTS} mmo "$(tdir_mmo)"
eelf64btsmip.c: $(srcdir)/emulparams/elf64btsmip.sh \
- $(srcdir)/emulparams/elf32bmipn32.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf64bmip-defs.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64btsmip "$(tdir_elf64btsmip)"
eelf64ltsmip.c: $(srcdir)/emulparams/elf64ltsmip.sh \
- $(srcdir)/emulparams/elf64btsmip.sh $(srcdir)/emulparams/elf32bmipn32.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf64btsmip.sh $(srcdir)/emulparams/elf64bmip-defs.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64ltsmip "$(tdir_elf64ltsmip)"
eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf_x86_64 "$(tdir_elf_x86_64)"
eelf_x86_64_fbsd.c: $(srcdir)/emulparams/elf_x86_64_fbsd.sh \
$(srcdir)/emulparams/elf_x86_64.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf_i386_be "$(tdir_elf_i386_be)"
eelf_i386_chaos.c: $(srcdir)/emulparams/elf_i386_chaos.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf_chaos.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf_chaos.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf_i386_chaos "$(tdir_elf_i386_chaos)"
eelf_i386_fbsd.c: $(srcdir)/emulparams/elf_i386_fbsd.sh \
$(srcdir)/emulparams/elf_i386.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf_i386_fbsd "$(tdir_elf_i386_fbsd)"
eelf_i386_ldso.c: $(srcdir)/emulparams/elf_i386_ldso.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf_s390 "$(tdir_elf_s390)"
egld960.c: $(srcdir)/emulparams/gld960.sh \
$(srcdir)/emultempl/gld960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS}
@@ -960,31 +1036,31 @@ 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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} h8300sxnelf "$(tdir_h8300sxnelf)"
eh8500.c: $(srcdir)/emulparams/h8500.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500.sc ${GEN_DEPENDS}
@@ -1008,24 +1084,24 @@ 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 \
+ $(ELF_DEPS) $(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 \
+ $(ELF_DEPS) $(srcdir)/emultempl/hppaelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} hppalinux "$(tdir_hppalinux)"
ehppanbsd.c: $(srcdir)/emulparams/hppanbsd.sh \
$(srcdir)/emulparams/hppaelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/hppaelf.em \
+ $(ELF_DEPS) $(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 \
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} hppa64linux "$(tdir_hppa64linux)"
ei386aout.c: $(srcdir)/emulparams/i386aout.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
@@ -1046,13 +1122,13 @@ 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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} i386lynx "$(tdir_i386lynx)"
ei386mach.c: $(srcdir)/emulparams/i386mach.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
${GENSCRIPTS} i386mach "$(tdir_i386mach)"
ei386moss.c: $(srcdir)/emulparams/i386moss.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} i386moss "$(tdir_i386moss)"
ei386msdos.c: $(srcdir)/emulparams/i386msdos.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386msdos.sc ${GEN_DEPENDS}
@@ -1061,10 +1137,10 @@ 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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS}
${GENSCRIPTS} i386nw "$(tdir_i386nw)"
ei386pe.c: $(srcdir)/emulparams/i386pe.sh \
$(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
@@ -1072,23 +1148,26 @@ ei386pe.c: $(srcdir)/emulparams/i386pe.sh \
ei386pe_posix.c: $(srcdir)/emulparams/i386pe_posix.sh \
$(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
${GENSCRIPTS} i386pe_posix "$(tdir_i386pe_posix)"
+ei386pep.c: $(srcdir)/emulparams/i386pep.sh \
+ $(srcdir)/emultempl/pep.em $(srcdir)/scripttempl/pep.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386pep "$(tdir_i386pe)"
elnk960.c: $(srcdir)/emulparams/lnk960.sh \
$(srcdir)/emultempl/lnk960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS}
${GENSCRIPTS} lnk960 "$(tdir_lnk960)"
em68hc11elf.c: $(srcdir)/emulparams/m68hc11elf.sh \
- $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
$(srcdir)/scripttempl/elfm68hc11.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68hc11elf "$(tdir_m68hc11)"
em68hc11elfb.c: $(srcdir)/emulparams/m68hc11elfb.sh \
- $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
$(srcdir)/scripttempl/elfm68hc11.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68hc11elfb "$(tdir_m68hc11b)"
em68hc12elf.c: $(srcdir)/emulparams/m68hc12elf.sh \
- $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
$(srcdir)/scripttempl/elfm68hc12.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68hc12elf "$(tdir_m68hc12)"
em68hc12elfb.c: $(srcdir)/emulparams/m68hc12elfb.sh \
- $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
$(srcdir)/scripttempl/elfm68hc12.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68hc12elfb "$(tdir_m68hc12b)"
em68k4knbsd.c: $(srcdir)/emulparams/m68k4knbsd.sh \
@@ -1104,12 +1183,12 @@ 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 \
+ $(ELF_DEPS) $(srcdir)/emultempl/m68kelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68kelf "$(tdir_m68kelf)"
em68kelfnbsd.c: $(srcdir)/emulparams/m68kelfnbsd.sh \
$(srcdir)/emulparams/m68kelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/m68kelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/m68kelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68kelfnbsd "$(tdir_m68kelfnbsd)"
em68klinux.c: $(srcdir)/emulparams/m68klinux.sh \
@@ -1119,7 +1198,7 @@ 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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/psos.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68kpsos "$(tdir_m68kpsos)"
em88kbcs.c: $(srcdir)/emulparams/m88kbcs.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m88kbcs.sc ${GEN_DEPENDS}
@@ -1130,270 +1209,270 @@ emaxqcoff.c: $(srcdir)/emulparams/maxqcoff.sh \
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 \
+emipsbig.c: $(srcdir)/emulparams/mipsbig.sh $(srcdir)/emultempl/generic.em \
$(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsbig "$(tdir_mipsbig)"
+emipsbsd.c: $(srcdir)/emulparams/mipsbsd.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/scripttempl/mipsbsd.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsbsd "$(tdir_mipsbsd)"
+emipsidt.c: $(srcdir)/emulparams/mipsidt.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/emultempl/mipsecoff.em $(srcdir)/scripttempl/mips.sc \
+ ${GEN_DEPENDS}
${GENSCRIPTS} mipsidt "$(tdir_mipsidt)"
-emipsidtl.c: $(srcdir)/emulparams/mipsidtl.sh \
- $(srcdir)/emultempl/mipsecoff.em $(srcdir)/emultempl/generic.em \
- $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+emipsidtl.c: $(srcdir)/emulparams/mipsidtl.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/emultempl/mipsecoff.em $(srcdir)/scripttempl/mips.sc \
+ ${GEN_DEPENDS}
${GENSCRIPTS} mipsidtl "$(tdir_mipsidtl)"
-emipslit.c: $(srcdir)/emulparams/mipslit.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+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 \
+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)"
+ ${GENSCRIPTS} mipslnews "$(tdir_mipslnews)"
+emipspe.c: $(srcdir)/emulparams/mipspe.sh $(srcdir)/emultempl/pe.em \
+ $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipspe "$(tdir_mipspe)"
emn10300.c: $(srcdir)/emulparams/mn10300.sh \
$(srcdir)/emulparams/mn10200.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} mn10200 "$(tdir_mn10200)"
emsp430x110.c: $(srcdir)/emulparams/msp430all.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
${GEN_DEPENDS}
${GENSCRIPTS} msp430x449 "$(tdir_msp430x449)" msp430all
enews.c: $(srcdir)/emulparams/news.sh \
@@ -1407,7 +1486,7 @@ 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}
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} or32elf "$(tdir_or32elf)"
epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
@@ -1416,111 +1495,127 @@ 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}
+ $(ELF_GEN_DEPS) $(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}
+epjlelf.c: $(srcdir)/emulparams/pjlelf.sh $(srcdir)/emulparams/pjelf.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} pjlelf "$(tdir_pjlelf)"
eppcmacos.c: $(srcdir)/emulparams/ppcmacos.sh \
$(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS}
${GENSCRIPTS} ppcmacos "$(tdir_ppcmacos)"
eppcnw.c: $(srcdir)/emulparams/ppcnw.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS}
${GENSCRIPTS} ppcnw "$(tdir_ppcnw)"
eppcpe.c: $(srcdir)/emulparams/ppcpe.sh \
$(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/ppcpe.sc ${GEN_DEPENDS}
${GENSCRIPTS} ppcpe "$(tdir_ppcpe)"
eppclynx.c: $(srcdir)/emulparams/ppclynx.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} ppclynx "$(tdir_ppclynx)"
eriscix.c: $(srcdir)/emulparams/riscix.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
${GENSCRIPTS} riscix "$(tdir_riscix)"
+escoreelf.c: $(srcdir)/emulparams/scoreelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/scoreelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} scoreelf "$(tdir_scoreelf)"
esh.c: $(srcdir)/emulparams/sh.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sh.sc ${GEN_DEPENDS}
${GENSCRIPTS} sh "$(tdir_sh)"
eshelf.c: $(srcdir)/emulparams/shelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shelf "$(tdir_shelf)"
eshelf32.c: $(srcdir)/emulparams/shelf32.sh \
$(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
$(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shelf32 "$(tdir_shelf32)"
eshelf32_linux.c: $(srcdir)/emulparams/shelf32_linux.sh \
$(srcdir)/emulparams/shelf32.sh \
$(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
$(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shelf32_linux "$(tdir_shelf32_linux)"
eshelf32_nbsd.c: $(srcdir)/emulparams/shelf32_nbsd.sh \
$(srcdir)/emulparams/shelf32.sh \
$(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
$(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shelf64 "$(tdir_shelf64)"
eshelf64_nbsd.c: $(srcdir)/emulparams/shelf64_nbsd.sh \
$(srcdir)/emulparams/shelf32_nbsd.sh $(srcdir)/emulparams/shelf32.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf_linux "$(tdir_shlelf_linux)"
eshelf_nbsd.c: $(srcdir)/emulparams/shelf_nbsd.sh \
$(srcdir)/emulparams/shelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shelf_nto "$(tdir_shelf_nto)"
+eshelf_vxworks.c: $(srcdir)/emulparams/shelf_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc \
+ $(srcdir)/emultempl/vxworks.em ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_vxworks "$(tdir_shelf_vxworks)"
eshlelf_nbsd.c: $(srcdir)/emulparams/shlelf_nbsd.sh \
$(srcdir)/emulparams/shelf_nbsd.sh \
$(srcdir)/emulparams/shelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf_nto "$(tdir_shlelf_nto)"
+eshlelf_vxworks.c: $(srcdir)/emulparams/shlelf_vxworks.sh \
+ $(srcdir)/emulparams/shelf_vxworks.sh $(srcdir)/emulparams/vxworks.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc $(srcdir)/emultempl/vxworks.em \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_vxworks "$(tdir_shlelf_vxworks)"
+eshelf_uclinux.c: $(srcdir)/emulparams/shelf_uclinux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_uclinux "$(tdir_shelf_uclinux)"
eshlelf.c: $(srcdir)/emulparams/shlelf.sh \
$(srcdir)/emulparams/shelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf32sh-symbian.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlsymbian "$(tdir_shlelf)"
eshlelf32.c: $(srcdir)/emulparams/shlelf32.sh \
$(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h $(srcdir)/emulparams/shelf32.sh \
$(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf32 "$(tdir_shlelf32)"
eshlelf32_linux.c: $(srcdir)/emulparams/shlelf32_linux.sh \
$(srcdir)/emulparams/shelf32_linux.sh $(srcdir)/emulparams/shelf32.sh \
$(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
$(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf32_linux "$(tdir_shlelf32_linux)"
eshlelf32_nbsd.c: $(srcdir)/emulparams/shlelf32_nbsd.sh \
$(srcdir)/emulparams/shelf32_nbsd.sh $(srcdir)/emulparams/shelf32.sh \
$(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
$(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf32_nbsd "$(tdir_shlelf32_nbsd)"
eshlelf64.c: $(srcdir)/emulparams/shlelf64.sh \
$(srcdir)/emulparams/shelf64.sh $(srcdir)/emulparams/shelf32.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf64 "$(tdir_shlelf64)"
eshlelf64_nbsd.c: $(srcdir)/emulparams/shlelf64_nbsd.sh \
$(srcdir)/emulparams/shelf64_nbsd.sh \
$(srcdir)/emulparams/shelf32_nbsd.sh $(srcdir)/emulparams/shelf32.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf64_nbsd "$(tdir_shlelf64_nbsd)"
eshl.c: $(srcdir)/emulparams/shl.sh \
$(srcdir)/emulparams/sh.sh \
@@ -1581,7 +1676,7 @@ 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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/v850.sc ${GEN_DEPENDS}
${GENSCRIPTS} v850 "$(tdir_v850)"
ew65.c: $(srcdir)/emulparams/w65.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/w65.sc ${GEN_DEPENDS}
@@ -1596,25 +1691,14 @@ ez8001.c: $(srcdir)/emulparams/z8001.sh \
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)
+ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL_DEP)
+ld_new_LDADD = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL)
# The generated emulation files mostly have the same dependencies.
$(EMULATION_OFILES): ../bfd/bfd.h sysdep.h config.h $(INCDIR)/bfdlink.h \
@@ -1636,7 +1720,7 @@ check-DEJAGNU: site.exp
CXX="$(CXX_FOR_TARGET)" CXXFLAGS="$(CXXFLAGS)" \
CC_FOR_HOST="$(CC)" CFLAGS_FOR_HOST="$(CFLAGS)" \
OFILES="$(OFILES)" BFDLIB="$(TESTBFDLIB)" \
- LIBIBERTY="$(LIBIBERTY) $(INTLLIBS)" LIBS="$(LIBS)" \
+ LIBIBERTY="$(LIBIBERTY) $(LIBINTL)" LIBS="$(LIBS)" \
$(RUNTESTFLAGS); \
else echo "WARNING: could not find \`runtest'" 1>&2; :;\
fi
@@ -1703,17 +1787,10 @@ 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
+ld.1: $(srcdir)/ld.texinfo configdoc.texi
touch $@
-$(TEXI2POD) $(MANCONF) < $(srcdir)/ld.texinfo > ld.pod
-($(POD2MAN) ld.pod | \
@@ -1722,7 +1799,7 @@ ld.1: $(srcdir)/ld.texinfo configdoc.texi ldver.texi
(rm -f $@.T$$$$ && exit 1)
rm -f ld.pod
-MAINTAINERCLEANFILES = ldver.texi configdoc.texi
+MAINTAINERCLEANFILES = 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.
@@ -1733,7 +1810,7 @@ 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
+CLEANFILES = dep.sed DEP DEPA DEP1 DEP2 spu_ovl.s
.PHONY: install-html install-html-am install-html-recursive
@@ -1812,11 +1889,11 @@ 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)
+EXTRA_DIST = ldgram.c ldgram.h ldlex.c emultempl/spu_ovl.o $(man_MANS)
diststuff: info $(EXTRA_DIST)
all: info ld.1
-# Both info (ld.info) and ld.1 depend on configdoc.texi and ldver.texi.
+# Both info (ld.info) and ld.1 depend on configdoc.texi.
# But info isn't a direct target. Make info-recursive to depend on
# ld.1 to support parallel build.
info-recursive: ld.1
@@ -1825,6 +1902,15 @@ DISTCLEANFILES = tdirs site.exp site.bak stringify.sed
distclean-local:
rm -rf ldscripts
+MAINTAINERCLEANFILES += ld.info
+
+# Automake 1.9 will only build info files in the objdir if they are
+# mentioned in DISTCLEANFILES. It doesn't have to be unconditional,
+# though, so we use a bogus condition.
+if GENINSRC_NEVER
+DISTCLEANFILES += ld.info
+endif
+
# 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
@@ -1872,83 +1958,93 @@ dep-am: DEP
# 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 \
+ldctor.o: ldctor.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h ld.h ldexp.h \
+ ldlang.h ldmisc.h ldgram.h ldmain.h ldctor.h
+ldemul.o: ldemul.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h ld.h ldmisc.h ldexp.h ldlang.h \
+ ldfile.h ldemul.h ldmain.h ldemul-list.h
+ldexp.o: ldexp.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h ld.h ldmain.h ldmisc.h ldexp.h \
+ ldlex.h ldgram.h ldlang.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.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 \
+ldfile.o: ldfile.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h ld.h ldmisc.h \
+ ldexp.h ldlang.h ldfile.h ldmain.h ldgram.h ldlex.h \
+ ldemul.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/filenames.h
+ldlang.o: ldlang.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/obstack.h $(INCDIR)/bfdlink.h ld.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 \
+ $(INCDIR)/libiberty.h $(INCDIR)/hashtab.h
+ldmain.o: ldmain.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/progress.h $(INCDIR)/bfdlink.h $(INCDIR)/filenames.h \
+ ld.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.o: ldmisc.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/demangle.h $(INCDIR)/libiberty.h ld.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 $(INCDIR)/bfdlink.h
+ldver.o: ldver.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ ../bfd/bfdver.h ld.h ldver.h ldexp.h ldlang.h ldfile.h \
+ ldemul.h ldmain.h
+ldwrite.o: ldwrite.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h ld.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 \
+lexsup.o: lexsup.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ ../bfd/bfdver.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/bfdlink.h ld.h ldmain.h \
+ ldmisc.h ldexp.h ldlang.h ldgram.h ldlex.h ldfile.h \
+ ldver.h ldemul.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h
+mri.o: mri.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ ld.h ldexp.h ldlang.h ldmisc.h mri.h ldgram.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h
+ldcref.o: ldcref.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/demangle.h $(INCDIR)/libiberty.h $(INCDIR)/objalloc.h \
+ ld.h ldmain.h ldmisc.h ldexp.h ldlang.h
+pe-dll.o: pe-dll.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h ld.h ldexp.h ldlang.h ldwrite.h \
+ ldmisc.h ldgram.h ldmain.h ldfile.h ldemul.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h deffile.h pe-dll.h
+pep-dll.o: pep-dll.c pe-dll.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h ld.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
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h deffile.h pe-dll.h \
+ pep-dll.h
+ldgram.o: ldgram.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h ld.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 sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/bfdlink.h ld.h ldmisc.h \
+ ldexp.h ldlang.h ldgram.h ldfile.h ldlex.h ldmain.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
+deffilep.o: deffilep.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ ld.h ldmisc.h deffile.h
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/ld/Makefile.in b/ld/Makefile.in
index 2b917b11137f..14ab81f6fa66 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -38,20 +38,31 @@ build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
noinst_PROGRAMS = ld-new$(EXEEXT)
+
+# Automake 1.9 will only build info files in the objdir if they are
+# mentioned in DISTCLEANFILES. It doesn't have to be unconditional,
+# though, so we use a bogus condition.
+@GENINSRC_NEVER_TRUE@am__append_1 = ld.info
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
+ $(srcdir)/../config.guess $(srcdir)/../config.sub \
+ $(ld_TEXINFOS)
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__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \
+ $(top_srcdir)/../bfd/warning.m4 \
+ $(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/gettext-sister.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/nls.m4 $(top_srcdir)/../config/po.m4 \
+ $(top_srcdir)/../config/progtest.m4 \
+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
+ $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -74,11 +85,11 @@ depcomp =
am__depfiles_maybe =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
LTLEXCOMPILE = $(LIBTOOL) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
@@ -87,7 +98,7 @@ LTYACCCOMPILE = $(LIBTOOL) --mode=compile $(YACC) $(YFLAGS) \
$(AM_YFLAGS)
YLWRAP = $(top_srcdir)/../ylwrap
SOURCES = $(ld_new_SOURCES) $(EXTRA_ld_new_SOURCES)
-INFO_DEPS = $(srcdir)/ld.info
+INFO_DEPS = ld.info
TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex
am__TEXINFO_TEX_DIR = $(top_srcdir)/../texinfo
DVIS = ld.dvi
@@ -115,10 +126,10 @@ DEJATOOL = $(PACKAGE)
RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
DIST_SUBDIRS = $(SUBDIRS)
ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
+AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
@@ -134,6 +145,7 @@ CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
+DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
@@ -143,28 +155,30 @@ EMULATION_LIBPATH = @EMULATION_LIBPATH@
EMULATION_OFILES = @EMULATION_OFILES@
EMUL_EXTRA_OFILES = @EMUL_EXTRA_OFILES@
EXEEXT = @EXEEXT@
-GMOFILES = @GMOFILES@
+FGREP = @FGREP@
+GENCAT = @GENCAT@
+GENINSRC_NEVER_FALSE = @GENINSRC_NEVER_FALSE@
+GENINSRC_NEVER_TRUE = @GENINSRC_NEVER_TRUE@
GMSGFMT = @GMSGFMT@
-GT_NO = @GT_NO@
-GT_YES = @GT_YES@
+GREP = @GREP@
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@
+INCINTL = @INCINTL@
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@
+LD = @LD@
LDFLAGS = @LDFLAGS@
LEX = `if [ -f ../flex/flex ]; then echo ../flex/flex; else echo @LEX@; fi`
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBINTL = @LIBINTL@
+LIBINTL_DEP = @LIBINTL_DEP@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
@@ -185,7 +199,9 @@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
NATIVE_LIB_DIRS = @NATIVE_LIB_DIRS@
+NM = @NM@
NO_WERROR = @NO_WERROR@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
@@ -195,9 +211,9 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-POFILES = @POFILES@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRINGIFY = @STRINGIFY@
@@ -207,13 +223,14 @@ 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_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
@@ -242,10 +259,10 @@ htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-l = @l@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -261,6 +278,7 @@ target_os = @target_os@
target_vendor = @target_vendor@
use_sysroot = @use_sysroot@
AUTOMAKE_OPTIONS = cygnus dejagnu
+ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd
SUBDIRS = po
tooldir = $(exec_prefix)/$(target_alias)
YFLAGS = -d
@@ -305,28 +323,36 @@ CC_FOR_TARGET = ` \
fi; \
fi`
-CXX = gcc
+CXX = g++
CXX_FOR_TARGET = ` \
- if [ -f $$r/../gcc/xgcc ] ; then \
+ if [ -f $$r/../gcc/g++ ] ; 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; \
+ echo $$r/../gcc/g++ -B$$r/../gcc/ -idirafter $$r/../newlib/targ-include -idirafter $${srcroot}/../newlib/libc/include -nostdinc; \
else \
- echo $$r/../gcc/xgcc -B$$r/../gcc/; \
+ echo $$r/../gcc/g++ -B$$r/../gcc/; \
fi; \
else \
if [ "@host@" = "@target@" ] ; then \
echo $(CXX); \
else \
- echo gcc | sed '$(transform)'; \
+ echo g++ | sed '$(transform)'; \
fi; \
fi`
info_TEXINFOS = ld.texinfo
+ld_TEXINFOS = configdoc.texi
noinst_TEXINFOS = ldint.texinfo
man_MANS = ld.1
-AM_MAKEINFOFLAGS = -I $(srcdir) -I $(BFDDIR)/doc -I $(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\""
+AM_MAKEINFOFLAGS = -I $(srcdir) -I $(BFDDIR)/doc -I ../bfd/doc \
+ -I $(top_srcdir)/../libiberty
+
+TEXI2DVI = texi2dvi -I $(srcdir) -I $(BFDDIR)/doc -I ../bfd/doc \
+ -I $(top_srcdir)/../libiberty
+
+INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \
+ @INCINTL@ $(HDEFINES) $(CFLAGS) \
+ -DLOCALEDIR="\"$(datadir)/locale\""
+
BFDLIB = ../bfd/libbfd.la
LIBIBERTY = ../libiberty/libiberty.a
ALL_EMULATIONS = \
@@ -335,6 +361,7 @@ ALL_EMULATIONS = \
ealpha.o \
earcelf.o \
earm_epoc_pe.o \
+ earm_wince_pe.o \
earmaoutb.o \
earmaoutl.o \
earmcoff.o \
@@ -357,8 +384,10 @@ ALL_EMULATIONS = \
eavr3.o \
eavr4.o \
eavr5.o \
+ eavr6.o \
ecoff_i860.o \
ecoff_sparc.o \
+ eelf32_spu.o \
ecrisaout.o \
ecriself.o \
ecrislinux.o \
@@ -375,6 +404,7 @@ ALL_EMULATIONS = \
eelf32b4300.o \
eelf32bfin.o \
eelf32bfinfd.o \
+ eelf32cr16.o \
eelf32cr16c.o \
eelf32bmip.o \
eelf32bmipn32.o \
@@ -400,6 +430,7 @@ ALL_EMULATIONS = \
eelf32lppcsim.o \
eelf32m32c.o \
eelf32mcore.o \
+ eelf32mep.o \
eelf32mipswindiss.o \
eelf32mt.o \
eelf32openrisc.o \
@@ -465,6 +496,7 @@ ALL_EMULATIONS = \
ei386nw.o \
ei386pe.o \
ei386pe_posix.o \
+ ei386pep.o \
elnk960.o \
em32relf.o \
em32rlelf.o \
@@ -565,6 +597,7 @@ ALL_EMULATIONS = \
eppcpe.o \
eppclynx.o \
eriscix.o \
+ escoreelf.o \
esh.o \
eshelf32.o \
eshlelf32.o \
@@ -579,6 +612,9 @@ ALL_EMULATIONS = \
eshlelf_nbsd.o \
eshelf_nto.o \
eshlelf_nto.o \
+ eshelf_uclinux.o \
+ eshelf_vxworks.o \
+ eshlelf_vxworks.o \
eshl.o \
eshlelf.o \
eshlsymbian.o \
@@ -634,15 +670,16 @@ ALL_64_EMULATIONS = \
ALL_EMUL_EXTRA_OFILES = \
deffilep.o \
- pe-dll.o
+ pe-dll.o \
+ pep-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
+ mri.c ldcref.c pe-dll.c pep-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
+ ldwrite.h mri.h deffile.h pe-dll.h pep-dll.h elf-hints-local.h
GENERATED_CFILES = ldgram.c ldlex.c deffilep.c
GENERATED_HFILES = ldgram.h ldemul-list.h deffilep.h
@@ -660,15 +697,17 @@ POTFILES = $(CFILES) $(HFILES) $(EMULATION_FILES)
# These all start with e so 'make clean' can find them.
GENSCRIPTS = LIB_PATH='${LIB_PATH}' $(SHELL) $(srcdir)/genscripts.sh "${srcdir}" "${libdir}" "${prefix}" "${exec_prefix}" @host@ @target@ @target_alias@ "@EMULATION_LIBPATH@" "@NATIVE_LIB_DIRS@" @use_sysroot@
GEN_DEPENDS = $(srcdir)/genscripts.sh stringify.sed
+ELF_DEPS = $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/elf-generic.em
+ELF_GEN_DEPS = $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/elf-generic.em $(srcdir)/emultempl/genelf.em
# We need this for automake to use YLWRAP.
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
+ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL_DEP)
+ld_new_LDADD = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL)
+MAINTAINERCLEANFILES = configdoc.texi ld.info
# We want to reconfigure if configure.host or configure.tgt changes. We
# extract version from bfd/configure.in, so we must depend on that also.
@@ -678,33 +717,33 @@ CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host $(srcdir)/configure.tgt \
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
+CLEANFILES = dep.sed DEP DEPA DEP1 DEP2 spu_ovl.s
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
+EXTRA_DIST = ldgram.c ldgram.h ldlex.c emultempl/spu_ovl.o $(man_MANS)
+DISTCLEANFILES = tdirs site.exp site.bak stringify.sed $(am__append_1)
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
-.SUFFIXES: .c .dvi .html .info .l .lo .o .obj .pdf .ps .texinfo .y
+.SUFFIXES: .c .dvi .l .lo .o .obj .ps .y
am--refresh:
@:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
- echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
- cd $(srcdir) && $(AUTOMAKE) --foreign \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --cygnus '; \
+ cd $(srcdir) && $(AUTOMAKE) --cygnus \
&& exit 0; \
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign Makefile
+ $(AUTOMAKE) --cygnus Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -795,42 +834,38 @@ clean-libtool:
distclean-libtool:
-rm -f libtool
-.texinfo.info:
+ld.info: ld.texinfo $(ld_TEXINFOS)
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 $@ $<; \
+ -o $@ `test -f 'ld.texinfo' || echo '$(srcdir)/'`ld.texinfo; \
then \
rc=0; \
- cd $(srcdir); \
else \
rc=$$?; \
- cd $(srcdir) && \
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
fi; \
rm -rf $$backupdir; exit $$rc
-.texinfo.dvi:
+ld.dvi: ld.texinfo $(ld_TEXINFOS)
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
- $(TEXI2DVI) $<
+ $(TEXI2DVI) -o $@ `test -f 'ld.texinfo' || echo '$(srcdir)/'`ld.texinfo
-.texinfo.pdf:
+ld.pdf: ld.texinfo $(ld_TEXINFOS)
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
- $(TEXI2PDF) $<
+ $(TEXI2PDF) -o $@ `test -f 'ld.texinfo' || echo '$(srcdir)/'`ld.texinfo
-.texinfo.html:
+ld.html: ld.texinfo $(ld_TEXINFOS)
rm -rf $(@:.html=.htp)
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
- -o $(@:.html=.htp) $<; \
+ -o $(@:.html=.htp) `test -f 'ld.texinfo' || echo '$(srcdir)/'`ld.texinfo; \
then \
rm -rf $@; \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
@@ -840,10 +875,6 @@ distclean-libtool:
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
exit 1; \
fi
-$(srcdir)/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 $@ $<
@@ -1271,6 +1302,10 @@ ldmain.o: ldmain.c config.status
-DTARGET='"@target@"' @TARGET_SYSTEM_ROOT_DEFINE@ \
$(srcdir)/ldmain.c
+eelf32_spu.o: eelf32_spu.c
+ $(COMPILE) -c -DEMBEDSPU="\"`echo embedspu | sed '$(transform)'`\"" \
+ eelf32_spu.c
+
ldemul-list.h: Makefile
(echo "/* This file is automatically generated. DO NOT EDIT! */";\
for f in `echo " " ${EMULATION_OFILES} "" \
@@ -1307,55 +1342,55 @@ 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}
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} arcelf "$(tdir_arcelf)"
earmelf.c: $(srcdir)/emulparams/armelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelf "$(tdir_armelf)"
earmelfb.c: $(srcdir)/emulparams/armelfb.sh $(srcdir)/emulparams/armelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelfb "$(tdir_armelfb)"
earmelf_fbsd.c: $(srcdir)/emulparams/armelf_fbsd.sh \
$(srcdir)/emulparams/armelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelf_fbsd "$(tdir_armelf_fbsd)"
earmelf_linux.c: $(srcdir)/emulparams/armelf_linux.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelf_linux "$(tdir_armelf_linux)"
earmelf_linux_eabi.c: $(srcdir)/emulparams/armelf_linux_eabi.sh \
$(srcdir)/emulparams/armelf_linux.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelf_linux_eabi "$(tdir_armelf_linux_abi)"
earmelfb_linux.c: $(srcdir)/emulparams/armelfb_linux.sh \
$(srcdir)/emulparams/armelf_linux.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelfb_linux "$(tdir_armelfb_linux)"
earmelfb_linux_eabi.c: $(srcdir)/emulparams/armelfb_linux_eabi.sh \
$(srcdir)/emulparams/armelf_linux_eabi.sh \
$(srcdir)/emulparams/armelf_linux.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelfb_linux_eabi "$(tdir_armelfb_linux_abi)"
earmelf_nbsd.c: $(srcdir)/emulparams/armelf_nbsd.sh \
$(srcdir)/emulparams/armelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelf_nbsd "$(tdir_armelf_nbsd)"
earmelfb_nbsd.c: $(srcdir)/emulparams/armelfb_nbsd.sh \
$(srcdir)/emulparams/armelf_nbsd.sh \
$(srcdir)/emulparams/armelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armelfb_nbsd "$(tdir_armelfb_nbsd)"
earmelf_vxworks.c: $(srcdir)/emulparams/armelf_vxworks.sh \
$(srcdir)/emulparams/vxworks.sh $(srcdir)/emulparams/armelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/vxworks.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/vxworks.em \
$(srcdir)/emultempl/armelf.em $(srcdir)/scripttempl/elf.sc \
${GEN_DEPENDS}
${GENSCRIPTS} armelf_vxworks "$(tdir_armelf)"
@@ -1372,40 +1407,47 @@ 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 \
+ $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} armnto "$(tdir_armnto)"
earm_epoc_pe.c: $(srcdir)/emulparams/arm_epoc_pe.sh \
$(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/epocpe.sc ${GEN_DEPENDS}
${GENSCRIPTS} arm_epoc_pe "$(tdir_armpe)"
+earm_wince_pe.c: $(srcdir)/emulparams/arm_wince_pe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} arm_wince_pe "$(tdir_armpe)"
earmpe.c: $(srcdir)/emulparams/armpe.sh \
$(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
${GENSCRIPTS} armpe "$(tdir_armpe)"
earmsymbian.c: $(srcdir)/emulparams/armsymbian.sh \
- $(srcdir)/emulparams/armelf.sh $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emulparams/armelf.sh $(ELF_DEPS) \
$(srcdir)/emultempl/armelf.em $(srcdir)/scripttempl/armbpabi.sc \
${GEN_DEPENDS}
${GENSCRIPTS} armsymbian "$(tdir_armelf)"
-eavr2.c: $(srcdir)/emulparams/avr2.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+eavr2.c: $(srcdir)/emulparams/avr2.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr2 "$(tdir_avr2)"
-eavr1.c: $(srcdir)/emulparams/avr1.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+eavr1.c: $(srcdir)/emulparams/avr1.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr1 "$(tdir_avr2)"
-eavr3.c: $(srcdir)/emulparams/avr3.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+eavr3.c: $(srcdir)/emulparams/avr3.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr3 "$(tdir_avr2)"
-eavr4.c: $(srcdir)/emulparams/avr4.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+eavr4.c: $(srcdir)/emulparams/avr4.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr4 "$(tdir_avr2)"
-eavr5.c: $(srcdir)/emulparams/avr5.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+eavr5.c: $(srcdir)/emulparams/avr5.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
${GEN_DEPENDS}
${GENSCRIPTS} avr5 "$(tdir_avr2)"
+eavr6.c: $(srcdir)/emulparams/avr6.sh $(srcdir)/emultempl/avrelf.em \
+ $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr6 "$(tdir_avr2)"
ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS}
${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)"
@@ -1416,332 +1458,381 @@ 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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elfd30v.sc ${GEN_DEPENDS}
${GENSCRIPTS} d30v_e "$(tdir_d30v)"
edelta68.c: $(srcdir)/emulparams/delta68.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/delta68.sc ${GEN_DEPENDS}
${GENSCRIPTS} delta68 "$(tdir_delta68)"
eelf32bfin.c: $(srcdir)/emulparams/bfin.sh \
- $(srcdir)/emultempl/elf32.em \
+ $(ELF_DEPS) \
$(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 \
+ $(ELF_DEPS) \
$(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}
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_DEPS) $(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 \
+ $(ELF_DEPS) $(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 \
+ $(ELF_DEPS) $(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 \
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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 \
+eelf32xtensa.c: $(srcdir)/emulparams/elf32xtensa.sh $(ELF_DEPS) \
$(srcdir)/emultempl/xtensaelf.em $(INCDIR)/xtensa-config.h \
$(BFDDIR)/elf-bfd.h $(BFDDIR)/libbfd.h $(INCDIR)/elf/xtensa.h \
$(srcdir)/scripttempl/elfxtensa.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32xtensa "$(tdir_elf32xtensa)"
eelf32fr30.c: $(srcdir)/emulparams/elf32fr30.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_GEN_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32frv "$(tdir_frv)"
+eelf32frvfd.c: $(srcdir)/emulparams/elf32frvfd.sh \
+ $(srcdir)/emulparams/elf32frv.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32frvfd "$(tdir_frv)"
eelf32mcore.c: $(srcdir)/emulparams/elf32mcore.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32mcore "$(tdir_mcore)"
+eelf32mep.c: $(srcdir)/emulparams/elf32mep.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/mep.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mep "$(tdir_mep)"
em32relf.c: $(srcdir)/emulparams/m32relf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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)/emultempl/vxworks.em $(ELF_DEPS) \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32_sparc_vxworks "$(tdir_elf32_sparc_vxworks)"
+eelf32_spu.c: $(srcdir)/emulparams/elf32_spu.sh $(srcdir)/emultempl/spuelf.em \
+ $(srcdir)/emultempl/spu_ovl.o \
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_spu "$(tdir_elf32_spu)"
+$(srcdir)/emultempl/spu_ovl.o: @MAINT@ $(srcdir)/emultempl/spu_ovl.S
+ cpp -DOVLY_IRQ_SAVE $(srcdir)/emultempl/spu_ovl.S spu_ovl.s
+ if ../gas/as-new --version \
+ | grep 'target.*spu' >/dev/null 2>/dev/null; then \
+ ../gas/as-new -o $@ spu_ovl.s; \
+ fi
eelf32_i860.c: $(srcdir)/emulparams/elf32_i860.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_GEN_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32b4300 "$(tdir_elf32b4300)"
+eelf32cr16.c: $(srcdir)/emulparams/elf32cr16.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/cr16elf.em \
+ $(srcdir)/scripttempl/elf32cr16.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32cr16 "$(tdir_elf32crx)"
eelf32cr16c.c: $(srcdir)/emulparams/elf32cr16c.sh \
- $(srcdir)/emultempl/elf32.em \
+ $(ELF_DEPS) \
$(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}
+eelf32bmip.c: $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32bmip "$(tdir_elf32bmip)"
eelf32bsmip.c: $(srcdir)/emulparams/elf32bsmip.sh \
- $(srcdir)/emulparams/elf32bmip.sh $(srcdir)/emultempl/irix.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) $(srcdir)/emultempl/irix.em \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32bsmip "$(tdir_elf32bsmip)"
eelf32btsmip.c: $(srcdir)/emulparams/elf32btsmip.sh \
- $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32btsmip "$(tdir_elf32btsmip)"
eelf32crx.c: $(srcdir)/emulparams/elf32crx.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/crxelf.em \
+ $(ELF_DEPS) $(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}
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32btsmipn32 "$(tdir_elf32btsmipn32)"
eelf32ltsmip.c: $(srcdir)/emulparams/elf32ltsmip.sh \
$(srcdir)/emulparams/elf32btsmip.sh $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.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}
+ $(srcdir)/emulparams/elf32btsmipn32.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ltsmipn32 "$(tdir_elf32ltsmipn32)"
eelf32ebmip.c: $(srcdir)/emulparams/elf32ebmip.sh \
- $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ebmip "$(tdir_elf32ebmip)"
eelf32ebmipvxworks.c: $(srcdir)/emulparams/elf32ebmipvxworks.sh \
- $(srcdir)/emulparams/elf32ebmip.sh $(srcdir)/emulparams/vxworks.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/vxworks.em \
- $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf32bmip.sh $(srcdir)/emulparams/vxworks.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/emultempl/vxworks.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ebmipvxworks "$(tdir_elf32ebmipvxworks)"
eelf32elmip.c: $(srcdir)/emulparams/elf32elmip.sh \
$(srcdir)/emulparams/elf32lmip.sh $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.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}
+ $(srcdir)/emulparams/elf32bmip.sh $(srcdir)/emulparams/vxworks.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/emultempl/vxworks.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32elmipvxworks "$(tdir_elf32elmipvxworks)"
eelf32bmipn32.c: $(srcdir)/emulparams/elf32bmipn32.sh \
- $(srcdir)/emultempl/irix.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/irix.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32bmipn32 "$(tdir_elf32bmipn32)"
eelf32l4300.c: $(srcdir)/emulparams/elf32l4300.sh \
$(srcdir)/emulparams/elf32b4300.sh $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \
+ ${GEN_DEPENDS}
${GENSCRIPTS} elf32l4300 "$(tdir_elf32l4300)"
eelf32lmip.c: $(srcdir)/emulparams/elf32lmip.sh \
- $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.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}
+eelf32mipswindiss.c: $(srcdir)/emulparams/elf32mipswindiss.sh $(ELF_DEPS) \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32mipswindiss "$(tdir_elf32mipswindiss)"
+eelf32m32c.c: $(srcdir)/emulparams/elf32m32c.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32m32c "$(tdir_m32c)"
+eelf32mt.c: $(srcdir)/emulparams/elf32mt.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mt "$(tdir_mt)"
eelf32lppc.c: $(srcdir)/emulparams/elf32lppc.sh \
$(srcdir)/emulparams/elf32ppccommon.sh \
$(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emultempl/ppc32elf.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32lppc "$(tdir_elf32lppc)"
eelf32lppcnto.c: $(srcdir)/emulparams/elf32lppcnto.sh \
$(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
- $(srcdir)/emultempl/ppc32elf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32lppcnto "$(tdir_elf32lppcnto)"
eelf32lppcsim.c: $(srcdir)/emulparams/elf32lppcsim.sh \
$(srcdir)/emulparams/elf32lppc.sh $(srcdir)/emulparams/elf32ppc.sh \
$(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32lppcsim "$(tdir_elf32lppcsim)"
eelf32ppcnto.c: $(srcdir)/emulparams/elf32ppcnto.sh \
$(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
- $(srcdir)/emultempl/ppc32elf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppcnto "$(tdir_elf32ppcnto)"
eelf32ppcwindiss.c: $(srcdir)/emulparams/elf32ppcwindiss.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppcwindiss "$(tdir_elf32ppcwindiss)"
eelf32ppcvxworks.c: $(srcdir)/emulparams/elf32ppcvxworks.sh \
$(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emulparams/vxworks.sh \
- $(srcdir)/emultempl/vxworks.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/vxworks.em $(ELF_DEPS) \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppcvxworks "$(tdir_elf32ppcvxworks)"
eelf32lsmip.c: $(srcdir)/emulparams/elf32lsmip.sh \
$(srcdir)/emulparams/elf32lmip.sh $(srcdir)/emulparams/elf32bmip.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/emultempl/mipself.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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32openrisc "$(tdir_openrisc)"
eelf32ppc.c: $(srcdir)/emulparams/elf32ppc.sh \
$(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppc "$(tdir_elf32ppc)"
eelf32ppc_fbsd.c: $(srcdir)/emulparams/elf32ppc_fbsd.sh \
$(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
- $(srcdir)/emultempl/ppc32elf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppc_fbsd "$(tdir_elf32ppc_fbsd)"
eelf32ppcsim.c: $(srcdir)/emulparams/elf32ppcsim.sh \
$(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
- $(srcdir)/emultempl/ppc32elf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppcsim "$(tdir_elf32ppcsim)"
eelf32ppclinux.c: $(srcdir)/emulparams/elf32ppclinux.sh \
$(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \
- $(srcdir)/emultempl/ppc32elf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \
+ ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32ppclinux "$(tdir_elf32ppclinux)"
eelf64ppc.c: $(srcdir)/emulparams/elf64ppc.sh $(srcdir)/emultempl/ppc64elf.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ldemul-list.h \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64ppc "$(tdir_elf64ppc)"
eelf64lppc.c: $(srcdir)/emulparams/elf64lppc.sh \
$(srcdir)/emulparams/elf64ppc.sh $(srcdir)/emultempl/ppc64elf.em \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ldemul-list.h \
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/iq2000.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32iq10 "$(tdir_iq10)"
eelf64alpha.c: $(srcdir)/emulparams/elf64alpha.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/alphaelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/alphaelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64alpha "$(tdir_elf64alpha)"
eelf64alpha_fbsd.c: $(srcdir)/emulparams/elf64alpha_fbsd.sh \
$(srcdir)/emulparams/elf64alpha.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/alphaelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/alphaelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64alpha_fbsd "$(tdir_elf64alpha_fbsd)"
eelf64alpha_nbsd.c: $(srcdir)/emulparams/elf64alpha_nbsd.sh \
$(srcdir)/emulparams/elf64alpha.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/alphaelf.em \
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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 \
+ $(ELF_DEPS) $(srcdir)/emultempl/ia64elf.em \
$(srcdir)/emultempl/needrelax.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64_ia64 "$(tdir_elf64_ia64)"
eelf64_ia64_fbsd.c: $(srcdir)/emulparams/elf64_ia64_fbsd.sh \
$(srcdir)/emulparams/elf64_ia64.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/ia64elf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/ia64elf.em \
$(srcdir)/emultempl/needrelax.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64_ia64_fbsd "$(tdir_elf64_ia64_fbsd)"
eelf64_s390.c: $(srcdir)/emulparams/elf64_s390.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64_sparc "$(tdir_elf64_sparc)"
eelf64_sparc_fbsd.c: $(srcdir)/emulparams/elf64_sparc_fbsd.sh \
$(srcdir)/emulparams/elf64_sparc.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(srcdir)/emulparams/elf64bmip-defs.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/irix.em $(srcdir)/emultempl/mipself.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64bmip "$(tdir_elf64bmip)"
eelf64mmix.c: $(srcdir)/emulparams/elf64mmix.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/mmix-elfnmmo.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/mmix-elfnmmo.em \
$(srcdir)/emultempl/mmixelf.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64mmix "$(tdir_elf64mmix)"
emmo.c: $(srcdir)/emulparams/mmo.sh $(srcdir)/emultempl/mmix-elfnmmo.em \
- $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mmo.em \
+ $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/elf-generic.em \
+ $(srcdir)/emultempl/mmo.em \
$(srcdir)/scripttempl/mmo.sc ${GEN_DEPENDS}
${GENSCRIPTS} mmo "$(tdir_mmo)"
eelf64btsmip.c: $(srcdir)/emulparams/elf64btsmip.sh \
- $(srcdir)/emulparams/elf32bmipn32.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf64bmip-defs.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64btsmip "$(tdir_elf64btsmip)"
eelf64ltsmip.c: $(srcdir)/emulparams/elf64ltsmip.sh \
- $(srcdir)/emulparams/elf64btsmip.sh $(srcdir)/emulparams/elf32bmipn32.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(srcdir)/emulparams/elf64btsmip.sh $(srcdir)/emulparams/elf64bmip-defs.sh \
+ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
+ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64ltsmip "$(tdir_elf64ltsmip)"
eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf_x86_64 "$(tdir_elf_x86_64)"
eelf_x86_64_fbsd.c: $(srcdir)/emulparams/elf_x86_64_fbsd.sh \
$(srcdir)/emulparams/elf_x86_64.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf_i386_be "$(tdir_elf_i386_be)"
eelf_i386_chaos.c: $(srcdir)/emulparams/elf_i386_chaos.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf_chaos.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf_chaos.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf_i386_chaos "$(tdir_elf_i386_chaos)"
eelf_i386_fbsd.c: $(srcdir)/emulparams/elf_i386_fbsd.sh \
$(srcdir)/emulparams/elf_i386.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf_i386_fbsd "$(tdir_elf_i386_fbsd)"
eelf_i386_ldso.c: $(srcdir)/emulparams/elf_i386_ldso.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf_s390 "$(tdir_elf_s390)"
egld960.c: $(srcdir)/emulparams/gld960.sh \
$(srcdir)/emultempl/gld960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS}
@@ -1771,31 +1862,31 @@ 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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} h8300sxnelf "$(tdir_h8300sxnelf)"
eh8500.c: $(srcdir)/emulparams/h8500.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8500.sc ${GEN_DEPENDS}
@@ -1819,24 +1910,24 @@ 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 \
+ $(ELF_DEPS) $(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 \
+ $(ELF_DEPS) $(srcdir)/emultempl/hppaelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} hppalinux "$(tdir_hppalinux)"
ehppanbsd.c: $(srcdir)/emulparams/hppanbsd.sh \
$(srcdir)/emulparams/hppaelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/hppaelf.em \
+ $(ELF_DEPS) $(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 \
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} hppa64linux "$(tdir_hppa64linux)"
ei386aout.c: $(srcdir)/emulparams/i386aout.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
@@ -1857,13 +1948,13 @@ 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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} i386lynx "$(tdir_i386lynx)"
ei386mach.c: $(srcdir)/emulparams/i386mach.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
${GENSCRIPTS} i386mach "$(tdir_i386mach)"
ei386moss.c: $(srcdir)/emulparams/i386moss.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} i386moss "$(tdir_i386moss)"
ei386msdos.c: $(srcdir)/emulparams/i386msdos.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386msdos.sc ${GEN_DEPENDS}
@@ -1872,10 +1963,10 @@ 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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS}
${GENSCRIPTS} i386nw "$(tdir_i386nw)"
ei386pe.c: $(srcdir)/emulparams/i386pe.sh \
$(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
@@ -1883,23 +1974,26 @@ ei386pe.c: $(srcdir)/emulparams/i386pe.sh \
ei386pe_posix.c: $(srcdir)/emulparams/i386pe_posix.sh \
$(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
${GENSCRIPTS} i386pe_posix "$(tdir_i386pe_posix)"
+ei386pep.c: $(srcdir)/emulparams/i386pep.sh \
+ $(srcdir)/emultempl/pep.em $(srcdir)/scripttempl/pep.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386pep "$(tdir_i386pe)"
elnk960.c: $(srcdir)/emulparams/lnk960.sh \
$(srcdir)/emultempl/lnk960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS}
${GENSCRIPTS} lnk960 "$(tdir_lnk960)"
em68hc11elf.c: $(srcdir)/emulparams/m68hc11elf.sh \
- $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
$(srcdir)/scripttempl/elfm68hc11.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68hc11elf "$(tdir_m68hc11)"
em68hc11elfb.c: $(srcdir)/emulparams/m68hc11elfb.sh \
- $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
$(srcdir)/scripttempl/elfm68hc11.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68hc11elfb "$(tdir_m68hc11b)"
em68hc12elf.c: $(srcdir)/emulparams/m68hc12elf.sh \
- $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
$(srcdir)/scripttempl/elfm68hc12.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68hc12elf "$(tdir_m68hc12)"
em68hc12elfb.c: $(srcdir)/emulparams/m68hc12elfb.sh \
- $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/m68hc1xelf.em $(ELF_DEPS) \
$(srcdir)/scripttempl/elfm68hc12.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68hc12elfb "$(tdir_m68hc12b)"
em68k4knbsd.c: $(srcdir)/emulparams/m68k4knbsd.sh \
@@ -1915,12 +2009,12 @@ 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 \
+ $(ELF_DEPS) $(srcdir)/emultempl/m68kelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68kelf "$(tdir_m68kelf)"
em68kelfnbsd.c: $(srcdir)/emulparams/m68kelfnbsd.sh \
$(srcdir)/emulparams/m68kelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/m68kelf.em \
+ $(ELF_DEPS) $(srcdir)/emultempl/m68kelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68kelfnbsd "$(tdir_m68kelfnbsd)"
em68klinux.c: $(srcdir)/emulparams/m68klinux.sh \
@@ -1930,7 +2024,7 @@ 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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/psos.sc ${GEN_DEPENDS}
${GENSCRIPTS} m68kpsos "$(tdir_m68kpsos)"
em88kbcs.c: $(srcdir)/emulparams/m88kbcs.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/m88kbcs.sc ${GEN_DEPENDS}
@@ -1941,270 +2035,270 @@ emaxqcoff.c: $(srcdir)/emulparams/maxqcoff.sh \
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 \
+emipsbig.c: $(srcdir)/emulparams/mipsbig.sh $(srcdir)/emultempl/generic.em \
$(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsbig "$(tdir_mipsbig)"
+emipsbsd.c: $(srcdir)/emulparams/mipsbsd.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/scripttempl/mipsbsd.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsbsd "$(tdir_mipsbsd)"
+emipsidt.c: $(srcdir)/emulparams/mipsidt.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/emultempl/mipsecoff.em $(srcdir)/scripttempl/mips.sc \
+ ${GEN_DEPENDS}
${GENSCRIPTS} mipsidt "$(tdir_mipsidt)"
-emipsidtl.c: $(srcdir)/emulparams/mipsidtl.sh \
- $(srcdir)/emultempl/mipsecoff.em $(srcdir)/emultempl/generic.em \
- $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+emipsidtl.c: $(srcdir)/emulparams/mipsidtl.sh $(srcdir)/emultempl/generic.em \
+ $(srcdir)/emultempl/mipsecoff.em $(srcdir)/scripttempl/mips.sc \
+ ${GEN_DEPENDS}
${GENSCRIPTS} mipsidtl "$(tdir_mipsidtl)"
-emipslit.c: $(srcdir)/emulparams/mipslit.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+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 \
+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)"
+ ${GENSCRIPTS} mipslnews "$(tdir_mipslnews)"
+emipspe.c: $(srcdir)/emulparams/mipspe.sh $(srcdir)/emultempl/pe.em \
+ $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipspe "$(tdir_mipspe)"
emn10300.c: $(srcdir)/emulparams/mn10300.sh \
$(srcdir)/emulparams/mn10200.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} mn10200 "$(tdir_mn10200)"
emsp430x110.c: $(srcdir)/emulparams/msp430all.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(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 \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf32msp430.sc \
${GEN_DEPENDS}
${GENSCRIPTS} msp430x449 "$(tdir_msp430x449)" msp430all
enews.c: $(srcdir)/emulparams/news.sh \
@@ -2218,7 +2312,7 @@ 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}
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} or32elf "$(tdir_or32elf)"
epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
@@ -2227,111 +2321,127 @@ 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}
+ $(ELF_GEN_DEPS) $(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}
+epjlelf.c: $(srcdir)/emulparams/pjlelf.sh $(srcdir)/emulparams/pjelf.sh \
+ $(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} pjlelf "$(tdir_pjlelf)"
eppcmacos.c: $(srcdir)/emulparams/ppcmacos.sh \
$(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS}
${GENSCRIPTS} ppcmacos "$(tdir_ppcmacos)"
eppcnw.c: $(srcdir)/emulparams/ppcnw.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/nw.sc ${GEN_DEPENDS}
${GENSCRIPTS} ppcnw "$(tdir_ppcnw)"
eppcpe.c: $(srcdir)/emulparams/ppcpe.sh \
$(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/ppcpe.sc ${GEN_DEPENDS}
${GENSCRIPTS} ppcpe "$(tdir_ppcpe)"
eppclynx.c: $(srcdir)/emulparams/ppclynx.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} ppclynx "$(tdir_ppclynx)"
eriscix.c: $(srcdir)/emulparams/riscix.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
${GENSCRIPTS} riscix "$(tdir_riscix)"
+escoreelf.c: $(srcdir)/emulparams/scoreelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/scoreelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} scoreelf "$(tdir_scoreelf)"
esh.c: $(srcdir)/emulparams/sh.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/sh.sc ${GEN_DEPENDS}
${GENSCRIPTS} sh "$(tdir_sh)"
eshelf.c: $(srcdir)/emulparams/shelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shelf "$(tdir_shelf)"
eshelf32.c: $(srcdir)/emulparams/shelf32.sh \
$(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
$(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shelf32 "$(tdir_shelf32)"
eshelf32_linux.c: $(srcdir)/emulparams/shelf32_linux.sh \
$(srcdir)/emulparams/shelf32.sh \
$(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
$(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shelf32_linux "$(tdir_shelf32_linux)"
eshelf32_nbsd.c: $(srcdir)/emulparams/shelf32_nbsd.sh \
$(srcdir)/emulparams/shelf32.sh \
$(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
$(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shelf64 "$(tdir_shelf64)"
eshelf64_nbsd.c: $(srcdir)/emulparams/shelf64_nbsd.sh \
$(srcdir)/emulparams/shelf32_nbsd.sh $(srcdir)/emulparams/shelf32.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf_linux "$(tdir_shlelf_linux)"
eshelf_nbsd.c: $(srcdir)/emulparams/shelf_nbsd.sh \
$(srcdir)/emulparams/shelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shelf_nto "$(tdir_shelf_nto)"
+eshelf_vxworks.c: $(srcdir)/emulparams/shelf_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc \
+ $(srcdir)/emultempl/vxworks.em ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_vxworks "$(tdir_shelf_vxworks)"
eshlelf_nbsd.c: $(srcdir)/emulparams/shlelf_nbsd.sh \
$(srcdir)/emulparams/shelf_nbsd.sh \
$(srcdir)/emulparams/shelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf_nto "$(tdir_shlelf_nto)"
+eshlelf_vxworks.c: $(srcdir)/emulparams/shlelf_vxworks.sh \
+ $(srcdir)/emulparams/shelf_vxworks.sh $(srcdir)/emulparams/vxworks.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc $(srcdir)/emultempl/vxworks.em \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_vxworks "$(tdir_shlelf_vxworks)"
+eshelf_uclinux.c: $(srcdir)/emulparams/shelf_uclinux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_uclinux "$(tdir_shelf_uclinux)"
eshlelf.c: $(srcdir)/emulparams/shlelf.sh \
$(srcdir)/emulparams/shelf.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf32sh-symbian.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlsymbian "$(tdir_shlelf)"
eshlelf32.c: $(srcdir)/emulparams/shlelf32.sh \
$(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h $(srcdir)/emulparams/shelf32.sh \
$(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf32 "$(tdir_shlelf32)"
eshlelf32_linux.c: $(srcdir)/emulparams/shlelf32_linux.sh \
$(srcdir)/emulparams/shelf32_linux.sh $(srcdir)/emulparams/shelf32.sh \
$(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
$(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf32_linux "$(tdir_shlelf32_linux)"
eshlelf32_nbsd.c: $(srcdir)/emulparams/shlelf32_nbsd.sh \
$(srcdir)/emulparams/shelf32_nbsd.sh $(srcdir)/emulparams/shelf32.sh \
$(BFDDIR)/libbfd.h $(INCDIR)/libiberty.h \
$(srcdir)/emultempl/sh64elf.em $(INCDIR)/elf/sh.h $(BFDDIR)/elf-bfd.h \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf32_nbsd "$(tdir_shlelf32_nbsd)"
eshlelf64.c: $(srcdir)/emulparams/shlelf64.sh \
$(srcdir)/emulparams/shelf64.sh $(srcdir)/emulparams/shelf32.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf64 "$(tdir_shlelf64)"
eshlelf64_nbsd.c: $(srcdir)/emulparams/shlelf64_nbsd.sh \
$(srcdir)/emulparams/shelf64_nbsd.sh \
$(srcdir)/emulparams/shelf32_nbsd.sh $(srcdir)/emulparams/shelf32.sh \
- $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} shlelf64_nbsd "$(tdir_shlelf64_nbsd)"
eshl.c: $(srcdir)/emulparams/shl.sh \
$(srcdir)/emulparams/sh.sh \
@@ -2392,7 +2502,7 @@ 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}
+ $(ELF_DEPS) $(srcdir)/scripttempl/v850.sc ${GEN_DEPENDS}
${GENSCRIPTS} v850 "$(tdir_v850)"
ew65.c: $(srcdir)/emulparams/w65.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/w65.sc ${GEN_DEPENDS}
@@ -2407,17 +2517,6 @@ ez8001.c: $(srcdir)/emulparams/z8001.sh \
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 \
@@ -2436,7 +2535,7 @@ check-DEJAGNU: site.exp
CXX="$(CXX_FOR_TARGET)" CXXFLAGS="$(CXXFLAGS)" \
CC_FOR_HOST="$(CC)" CFLAGS_FOR_HOST="$(CFLAGS)" \
OFILES="$(OFILES)" BFDLIB="$(TESTBFDLIB)" \
- LIBIBERTY="$(LIBIBERTY) $(INTLLIBS)" LIBS="$(LIBS)" \
+ LIBIBERTY="$(LIBIBERTY) $(LIBINTL)" LIBS="$(LIBS)" \
$(RUNTESTFLAGS); \
else echo "WARNING: could not find \`runtest'" 1>&2; :;\
fi
@@ -2503,17 +2602,10 @@ 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
+ld.1: $(srcdir)/ld.texinfo configdoc.texi
touch $@
-$(TEXI2POD) $(MANCONF) < $(srcdir)/ld.texinfo > ld.pod
-($(POD2MAN) ld.pod | \
@@ -2599,7 +2691,7 @@ 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.
+# Both info (ld.info) and ld.1 depend on configdoc.texi.
# But info isn't a direct target. Make info-recursive to depend on
# ld.1 to support parallel build.
info-recursive: ld.1
@@ -2653,85 +2745,95 @@ dep-am: DEP
# 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 \
+ldctor.o: ldctor.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h ld.h ldexp.h \
+ ldlang.h ldmisc.h ldgram.h ldmain.h ldctor.h
+ldemul.o: ldemul.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h ld.h ldmisc.h ldexp.h ldlang.h \
+ ldfile.h ldemul.h ldmain.h ldemul-list.h
+ldexp.o: ldexp.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h ld.h ldmain.h ldmisc.h ldexp.h \
+ ldlex.h ldgram.h ldlang.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.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 \
+ldfile.o: ldfile.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h ld.h ldmisc.h \
+ ldexp.h ldlang.h ldfile.h ldmain.h ldgram.h ldlex.h \
+ ldemul.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/filenames.h
+ldlang.o: ldlang.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/obstack.h $(INCDIR)/bfdlink.h ld.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 \
+ $(INCDIR)/libiberty.h $(INCDIR)/hashtab.h
+ldmain.o: ldmain.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/progress.h $(INCDIR)/bfdlink.h $(INCDIR)/filenames.h \
+ ld.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.o: ldmisc.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/demangle.h $(INCDIR)/libiberty.h ld.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 $(INCDIR)/bfdlink.h
+ldver.o: ldver.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ ../bfd/bfdver.h ld.h ldver.h ldexp.h ldlang.h ldfile.h \
+ ldemul.h ldmain.h
+ldwrite.o: ldwrite.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h ld.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 \
+lexsup.o: lexsup.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ ../bfd/bfdver.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/bfdlink.h ld.h ldmain.h \
+ ldmisc.h ldexp.h ldlang.h ldgram.h ldlex.h ldfile.h \
+ ldver.h ldemul.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h
+mri.o: mri.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ ld.h ldexp.h ldlang.h ldmisc.h mri.h ldgram.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h
+ldcref.o: ldcref.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/demangle.h $(INCDIR)/libiberty.h $(INCDIR)/objalloc.h \
+ ld.h ldmain.h ldmisc.h ldexp.h ldlang.h
+pe-dll.o: pe-dll.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h ld.h ldexp.h ldlang.h ldwrite.h \
+ ldmisc.h ldgram.h ldmain.h ldfile.h ldemul.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h deffile.h pe-dll.h
+pep-dll.o: pep-dll.c pe-dll.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h ld.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
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h deffile.h pe-dll.h \
+ pep-dll.h
+ldgram.o: ldgram.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/bfdlink.h ld.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 sysdep.h config.h $(INCDIR)/fopen-same.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/bfdlink.h ld.h ldmisc.h \
+ ldexp.h ldlang.h ldgram.h ldfile.h ldlex.h ldmain.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
+deffilep.o: deffilep.c sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h \
+ ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ ld.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.
diff --git a/ld/NEWS b/ld/NEWS
index 27fb0ae1154b..5de0b5d69fd5 100644
--- a/ld/NEWS
+++ b/ld/NEWS
@@ -1,4 +1,40 @@
-*- text -*-
+* Added support for National Semicondutor CompactRISC (ie CR16) target.
+
+* -l:foo now searches the library path for a filename called foo,
+ without converting it to libfoo.a or libfoo.so.
+
+* Add a new command line option '--default-script=FILE' or '-dT FILE'
+ which specifies a replacement for the built in, default linker
+ script.
+
+* ELF: Add -Bsymbolic-functions, --dynamic-list-cpp-new, which puts C++
+ operator new and delete on the dynamic list, and --dynamic-list-data,
+ builtin list for --dynamic-list, which puts global data symbols on the
+ dynamic list.
+
+* Add support for x86_64 PE+ target.
+
+* Add support for Score target.
+
+* ELF: Add --dynamic-list option to specify a list of global symbols
+ whose references shouldn't be bound to the definition within the
+ shared library, or a list of symbols which should be added to the
+ symbol table in the executable.
+
+* The default output section LMA has changed for allocatable sections from
+ being equal to VMA, to keeping the difference between LMA and VMA the same as
+ the previous output section in the same region. This is a more useful
+ default when using overlays and other cases where you specify an LMA
+ differing from the VMA for some sections.
+
+* New switch: --print-gc-sections to list any sections removed by garabge
+ collection.
+
+* ARM: Added --vfp11-denorm-fix option to work around an erratum in current
+VFP11 coprocessors.
+
+Changes in 2.17:
* Support for the Infineon XC16X has been added by KPIT Cummins Infosystems.
diff --git a/ld/acinclude.m4 b/ld/acinclude.m4
deleted file mode 100644
index 71b09b9f6ac7..000000000000
--- a/ld/acinclude.m4
+++ /dev/null
@@ -1 +0,0 @@
-sinclude(../bfd/acinclude.m4)
diff --git a/ld/aclocal.m4 b/ld/aclocal.m4
index cd4267338b72..ef6a062f1c0e 100644
--- a/ld/aclocal.m4
+++ b/ld/aclocal.m4
@@ -480,27 +480,6 @@ AC_DEFUN([AM_PROG_INSTALL_SH],
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.
#
@@ -910,4 +889,15 @@ AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
-m4_include([acinclude.m4])
+m4_include([../bfd/acinclude.m4])
+m4_include([../bfd/warning.m4])
+m4_include([../config/depstand.m4])
+m4_include([../config/gettext-sister.m4])
+m4_include([../config/lead-dot.m4])
+m4_include([../config/nls.m4])
+m4_include([../config/po.m4])
+m4_include([../config/progtest.m4])
+m4_include([../libtool.m4])
+m4_include([../ltoptions.m4])
+m4_include([../ltsugar.m4])
+m4_include([../ltversion.m4])
diff --git a/ld/config.in b/ld/config.in
index fa2e69fe1f29..cae19e76240a 100644
--- a/ld/config.in
+++ b/ld/config.in
@@ -1,32 +1,12 @@
/* 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 */
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
#undef ENABLE_NLS
/* Additional extension a shared object might have. */
#undef EXTRA_SHLIB_EXTENSION
-/* Define to 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
@@ -54,81 +34,42 @@
*/
#undef HAVE_DIRENT_H
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_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 `mkstemp' function. */
+#undef HAVE_MKSTEMP
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
#undef HAVE_NDIR_H
-/* Define to 1 if you have the <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
@@ -155,17 +96,12 @@
/* 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 `waitpid' function. */
+#undef HAVE_WAITPID
-/* 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
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#undef LT_OBJDIR
/* Name of package */
#undef PACKAGE
@@ -185,13 +121,8 @@
/* 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
+/* The size of a `long', as computed by sizeof. */
+#undef SIZEOF_LONG
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
@@ -205,18 +136,3 @@
/* 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/ld/configdoc.texi b/ld/configdoc.texi
deleted file mode 100644
index 800f64e2fae4..000000000000
--- a/ld/configdoc.texi
+++ /dev/null
@@ -1,22 +0,0 @@
-@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/ld/configure b/ld/configure
index 0cd6f5c99d15..b31790503b3e 100755
--- a/ld/configure
+++ b/ld/configure
@@ -241,6 +241,155 @@ IFS=" $as_nl"
$as_unset CDPATH
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+ ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<_LT_EOF
+$*
+_LT_EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+ if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+ then
+ break
+ fi
+ done
+ fi
+
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+ else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$ECHO" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ ECHO='print -r'
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+ else
+ # Try using printf.
+ ECHO='printf %s\n'
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "$0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ ECHO=echo
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
# Name of the host.
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
# so uname gets run too.
@@ -309,7 +458,7 @@ ac_includes_default="\
# 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_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 LIBTOOL SED EGREP FGREP GREP LD DUMPBIN ac_ct_DUMPBIN NM LN_S AR ac_ct_AR RANLIB ac_ct_RANLIB lt_ECHO CPP use_sysroot TARGET_SYSTEM_ROOT TARGET_SYSTEM_ROOT_DEFINE WARN_CFLAGS NO_WERROR USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT MKINSTALLDIRS MSGFMT MSGMERGE YACC LEX LEXLIB LEX_OUTPUT_ROOT MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT GENINSRC_NEVER_TRUE GENINSRC_NEVER_FALSE 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.
@@ -852,14 +1001,17 @@ Optional Features:
--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
+ --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
+ --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
@@ -867,11 +1019,11 @@ Optional Features:
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-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
--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
@@ -3074,73 +3226,264 @@ fi
+
+
+macro_version='2.1a'
+macro_revision='1.2435'
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Set options
+
+enable_dlopen=no
+
+
+enable_win32_dll=no
+
+
# 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
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
enable_shared=yes
fi;
+
+
+
+
+
+
+
+
# Check whether --enable-static 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
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
enable_static=yes
fi;
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+ withval="$with_pic"
+ pic_mode="$withval"
+else
+ pic_mode=default
+fi;
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
# Check whether --enable-fast-install 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
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
enable_fast_install=yes
fi;
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
+if test "${lt_cv_path_SED+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+
+fi
+
+SED=$lt_cv_path_SED
+
+echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+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 fgrep" >&5
+echo $ECHO_N "checking for fgrep... $ECHO_C" >&6
+if test "${ac_cv_prog_fgrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo 'ab*c' | (grep -F 'ab*c') >/dev/null 2>&1
+ then ac_cv_prog_fgrep='grep -F'
+ else ac_cv_prog_fgrep='fgrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_fgrep" >&5
+echo "${ECHO_T}$ac_cv_prog_fgrep" >&6
+ FGREP=$ac_cv_prog_fgrep
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
# Check whether --with-gnu-ld or --without-gnu-ld was given.
if test "${with_gnu_ld+set}" = set; then
withval="$with_gnu_ld"
@@ -3151,8 +3494,8 @@ 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
+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -3162,12 +3505,12 @@ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
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%/%"`
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
done
test -z "$LD" && LD="$ac_prog"
;;
@@ -3191,22 +3534,26 @@ 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-:}"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
lt_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
+ # but apparently some variants of GNU ld 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
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
test "$with_gnu_ld" != no && break
- else
+ ;;
+ *)
test "$with_gnu_ld" != yes && break
- fi
+ ;;
+ esac
fi
done
- IFS="$ac_save_ifs"
+ IFS="$lt_save_ifs"
else
lt_cv_path_LD="$LD" # Let the user override the test with a path.
fi
@@ -3228,32 +3575,31 @@ 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
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
lt_cv_prog_gnu_ld=yes
-else
+ ;;
+*)
lt_cv_prog_gnu_ld=no
-fi
+ ;;
+esac
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
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
+echo $ECHO_N "checking for BSD- or MS-compatible name lister (nm)... $ECHO_C" >&6
if test "${lt_cv_path_NM+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -3261,35 +3607,173 @@ else
# 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
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
fi
- fi
+ done
+ IFS="$lt_save_ifs"
done
- IFS="$ac_save_ifs"
- test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+ : ${lt_cv_path_NM=no}
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+ 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_DUMPBIN+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DUMPBIN="$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
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+echo "${ECHO_T}$DUMPBIN" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+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_DUMPBIN+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
+echo "${ECHO_T}$ac_ct_DUMPBIN" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-NM="$lt_cv_path_NM"
-echo "$as_me:$LINENO: result: $NM" >&5
-echo "${ECHO_T}$NM" >&6
+ test -n "$ac_ct_DUMPBIN" && break
+done
+test -n "$ac_ct_DUMPBIN" || ac_ct_DUMPBIN=":"
+
+ DUMPBIN=$ac_ct_DUMPBIN
+fi
+
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+echo $ECHO_N "checking the name lister ($NM) interface... $ECHO_C" >&6
+if test "${lt_cv_nm_interface+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:3762: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:3765: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:3768: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
+echo "${ECHO_T}$lt_cv_nm_interface" >&6
echo "$as_me:$LINENO: checking whether ln -s works" >&5
echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
@@ -3302,8 +3786,234 @@ else
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
+# 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
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # 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 all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`getconf ARG_MAX 2> /dev/null`
+ if test -n $lt_cv_sys_max_cmd_len; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ 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
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+echo $ECHO_N "checking whether the shell understands some XSI constructs... $ECHO_C" >&6
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+echo "$as_me:$LINENO: result: $xsi_shell" >&5
+echo "${ECHO_T}$xsi_shell" >&6
+
+
+echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+echo $ECHO_N "checking whether the shell understands \"+=\"... $ECHO_C" >&6
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+echo "$as_me:$LINENO: result: $lt_shell_append" >&5
+echo "${ECHO_T}$lt_shell_append" >&6
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+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
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6
if test "${lt_cv_deplibs_check_method+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -3316,13 +4026,13 @@ lt_cv_deplibs_check_method='unknown'
# `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.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
# If you have `file' or equivalent on your system and you're not sure
# whether `pass_all' will *always* work, you probably want this one.
case $host_os in
-aix*)
+aix4* | aix5*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -3330,39 +4040,42 @@ beos*)
lt_cv_deplibs_check_method=pass_all
;;
-bsdi4*)
+bsdi[45]*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
lt_cv_file_magic_cmd='/usr/bin/file -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
-cygwin* | mingw* |pw32*)
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
;;
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
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
@@ -3376,92 +4089,116 @@ gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-hpux10.20*|hpux11*)
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
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"
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
;;
*)
- 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"
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
;;
esac
- lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
lt_cv_deplibs_check_method=pass_all
;;
# This must be Linux ELF.
-linux-gnu*)
+linux* | k*bsd*-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]+$'
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
else
- lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
fi
;;
-newsos6)
+newos6*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
osf3* | osf4* | osf5*)
- # 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*)
+rdos*)
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*)
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
lt_cv_deplibs_check_method=pass_all
;;
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+sysv4 | sysv4.3*)
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*`
;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
fi
@@ -3469,222 +4206,29 @@ 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
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
-# 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
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
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
+if test "${ac_cv_prog_AR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -3693,7 +4237,7 @@ do
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"
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -3702,27 +4246,27 @@ 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
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&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
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
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
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -3731,30 +4275,43 @@ do
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"
+ ac_cv_prog_ac_ct_AR="ar"
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=":"
+ test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
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
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
else
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
- RANLIB=$ac_ct_RANLIB
+ AR=$ac_ct_AR
else
- RANLIB="$ac_cv_prog_RANLIB"
+ AR="$ac_cv_prog_AR"
fi
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
@@ -3835,483 +4392,23 @@ 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"
+test -z "$STRIP" && STRIP=:
-# 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
+ # 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_CC+set}" = set; then
+if test "${ac_cv_prog_RANLIB+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.
+ 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
@@ -4320,7 +4417,7 @@ do
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"
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -4329,27 +4426,27 @@ 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
+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_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
+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_CC+set}" = set; then
+if test "${ac_cv_prog_ac_ct_RANLIB+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.
+ 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
@@ -4358,628 +4455,492 @@ do
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"
+ 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_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
+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
- CC=$ac_ct_CC
+ RANLIB=$ac_ct_RANLIB
else
- CC="$ac_cv_prog_CC"
+ RANLIB="$ac_cv_prog_RANLIB"
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
+test -z "$RANLIB" && RANLIB=:
-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
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
fi
-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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+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
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
- ;
- return 0;
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
}
-_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
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ 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); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ (exit $ac_status); }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
ac_status=$?
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
+ (exit $ac_status); } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
-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. */
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-int
-main ()
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
- ;
- return 0;
+#ifdef __cplusplus
}
-_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
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 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"
+ (exit $ac_status); } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
else
- CFLAGS="-g"
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
+ rm -f conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
else
- CFLAGS=
+ lt_cv_sys_global_symbol_pipe=
fi
+done
+
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
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&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;
-}
+ echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+fi
-/* 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
+
+
+
+
+
+
+
+
+
+
+
+# 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 && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ (exit $ac_status); }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line 4823 "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); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&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*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
+ (exit $ac_status); }; then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ 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
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ 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
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-$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
+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
@@ -4993,199 +4954,57 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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
- 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
-
+ 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_ext
-ac_ext=c
+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
-# 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
+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
-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
+ ;;
+sparc*-*solaris*)
+ # 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
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *) LD="${LD-ld} -64" ;;
+ esac
+ ;;
+ esac
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
+ rm -rf conftest*
+ ;;
+esac
- RANLIB=$ac_ct_RANLIB
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
+need_locks="$enable_libtool_lock"
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -5422,21 +5241,6 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
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
@@ -5603,132 +5407,34 @@ _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. */
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
-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
+
+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
- 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
+$ac_includes_default
+#include <$ac_header>
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
@@ -5752,47 +5458,29 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_c_inline=$ac_kw; break
+ 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
-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
+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
- ;;
-esac
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
+fi
+done
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
+for ac_header in dlfcn.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -5853,98 +5541,1364 @@ 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
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+if test "${lt_cv_objdir+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;
-}
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
_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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ 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
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
-ac_cv_type_off_t=no
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+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
-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
- :
+
+
+
+
+
+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_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
-cat >>confdefs.h <<_ACEOF
-#define off_t long
-_ACEOF
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ 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
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:5923: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:5927: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ fi
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ lt_prog_compiler_pic='-qnocommon'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6245: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:6249: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
-echo "$as_me:$LINENO: checking for size_t" >&5
-echo $ECHO_N "checking for size_t... $ECHO_C" >&6
-if test "${ac_cv_type_size_t+set}" = set; then
+if test x"$lt_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
+if test "${lt_prog_compiler_static_works+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ lt_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_static_works=yes
+ fi
+ else
+ lt_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
+
+if test x"$lt_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6350: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:6354: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6405: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:6409: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ fi
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ ld_shlibs=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ *)
+ tmp_sharedflag='-shared' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >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
+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
@@ -5958,51 +6912,55 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_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
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
fi
-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
+ 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 -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >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;
}
@@ -6029,65 +6987,277 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_working_alloca_h=yes
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
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
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_ALLOCA_H 1
-_ACEOF
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ fi
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
-fi
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
-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
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[012])
+ allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ ;;
+ esac
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ whole_archive_flag_spec=''
+ link_all_deplibs=yes
+ if test "$GCC" = yes ; then
+ if test "${lt_cv_apple_cc_single_mod+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
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi-module to the
+ # link flags.
+ echo "int foo(void){return 1;}" > conftest.c
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib ${wl}-single_module conftest.c
+ if test -f libconftest.dylib; then
+ lt_cv_apple_cc_single_mod=yes
+ rm libconftest.dylib
+ fi
+ rm conftest.$ac_ext
+ fi
+fi
-int
-main ()
-{
-char *p = (char *) alloca (1);
- ;
- return 0;
-}
+ output_verbose_link_cmd=echo
+ if test "X$lt_cv_apple_cc_single_mod" = Xyes ; then
+ archive_cmds='$CC -dynamiclib $single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $single_module -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ module_expsym_cmds='sed -e "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd=echo
+ archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`$ECHO $rpath/$soname` $verstring'
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ module_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat >conftest.$ac_ext <<_ACEOF
+int foo(void) {}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
@@ -6111,122 +7281,933 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_func_alloca_works=yes
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
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
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
-if test $ac_cv_func_alloca_works = yes; then
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_ALLOCA 1
-_ACEOF
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
-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.
+ *nto* | *qnx*)
+ ;;
-ALLOCA=alloca.$ac_objext
+ openbsd*)
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
-cat >>confdefs.h <<\_ACEOF
-#define C_ALLOCA 1
-_ACEOF
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
-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
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-_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*
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
-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
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > 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); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc=no
+ else
+ archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+withGCC=$GCC
+if test "$withGCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ if test "$host_cpu" = m68k; then
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ else
+ dynamic_linker=no
+ fi
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $withGCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
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;
}
@@ -6253,126 +8234,425 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir"; then
+ shlibpath_overrides_runpath=yes
+fi
+
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
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
-cat >>confdefs.h <<_ACEOF
-#define CRAY_STACKSEG_END $ac_func
-_ACEOF
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
- break
-fi
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
- done
-fi
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
-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 ();
- }
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
else
- return (&dummy > addr) ? 1 : -1;
-}
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
-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
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
-( exit $ac_status )
-ac_cv_c_stack_direction=-1
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
fi
-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
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+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
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
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>
+
+/* 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 dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (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
@@ -6386,122 +8666,41 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_header_compiler=yes
+ ac_cv_lib_dl_dlopen=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
+ac_cv_lib_dl_dlopen=no
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
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
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
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
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
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
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 "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -6510,12 +8709,12 @@ _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.
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
+#define shl_load innocuous_shl_load
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
+ which can conflict with char shl_load (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
@@ -6525,7 +8724,7 @@ cat >>conftest.$ac_ext <<_ACEOF
# include <assert.h>
#endif
-#undef $ac_func
+#undef shl_load
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
@@ -6534,14 +8733,14 @@ 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 ();
+char shl_load ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
choke me
#else
-char (*f) () = $ac_func;
+char (*f) () = shl_load;
#endif
#ifdef __cplusplus
}
@@ -6550,7 +8749,7 @@ char (*f) () = $ac_func;
int
main ()
{
-return f != $ac_func;
+return f != shl_load;
;
return 0;
}
@@ -6577,239 +8776,53 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_func_shl_load=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_func_shl_load=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
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
else
- if test "$cross_compiling" = yes; then
- ac_cv_func_mmap_fixed_mapped=no
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+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 */
+/* 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 shl_load ();
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);
+shl_load ();
+ ;
+ return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
+rm -f conftest.$ac_objext 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
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -6823,132 +8836,31 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_header_compiler=yes
+ ac_cv_lib_dld_shl_load=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ac_cv_lib_dld_shl_load=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
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
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
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
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 "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -6957,12 +8869,12 @@ _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.
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
+#define dlopen innocuous_dlopen
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
+ which can conflict with char dlopen (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
@@ -6972,7 +8884,7 @@ cat >>conftest.$ac_ext <<_ACEOF
# include <assert.h>
#endif
-#undef $ac_func
+#undef dlopen
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
@@ -6981,14 +8893,14 @@ 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 ();
+char dlopen ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
choke me
#else
-char (*f) () = $ac_func;
+char (*f) () = dlopen;
#endif
#ifdef __cplusplus
}
@@ -6997,7 +8909,7 @@ char (*f) () = $ac_func;
int
main ()
{
-return f != $ac_func;
+return f != dlopen;
;
return 0;
}
@@ -7024,84 +8936,46 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_func_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_func_dlopen=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 "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+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
-
+char dlopen ();
int
main ()
{
-return f != $ac_func;
+dlopen ();
;
return 0;
}
@@ -7128,52 +9002,47 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_lib_dl_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_lib_dl_dlopen=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: `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 "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+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>
+
+/* 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 dlopen ();
int
main ()
{
-return LC_MESSAGES
+dlopen ();
;
return 0;
}
@@ -7200,85 +9069,54 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- am_cv_val_LC_MESSAGES=yes
+ ac_cv_lib_svld_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-am_cv_val_LC_MESSAGES=no
+ac_cv_lib_svld_dlopen=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: $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
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
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 "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+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
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
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>
+
+/* 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 dld_link ();
+int
+main ()
+{
+dld_link ();
+ ;
+ return 0;
+}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (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
@@ -7292,110 +9130,889 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_header_compiler=yes
+ ac_cv_lib_dld_dld_link=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
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
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
else
- ac_cpp_err=
+ enable_dlopen=no
fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cpp_err=yes
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 9202 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}
+_LT_EOF
+ 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); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 9302 "configure"
+#include "confdefs.h"
- ac_header_preproc=no
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}
+_LT_EOF
+ 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); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
+rm -fr conftest*
-# 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
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
;;
- 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
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+ echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+
+# 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$prefix" = xNONE; then
+ test_prefix=/usr/local
+ else
+ test_prefix=$prefix
+ fi
+ if test "x$exec_prefix" = xNONE; then
+ test_exec_prefix=$test_prefix
+ else
+ test_exec_prefix=$exec_prefix
+ fi
+ case ${TARGET_SYSTEM_ROOT} in
+ "${test_prefix}"|"${test_prefix}/"*|\
+ "${test_exec_prefix}"|"${test_exec_prefix}/"*|\
+ '${prefix}'|'${prefix}/'*|\
+ '${exec_prefix}'|'${exec_prefix}/'*)
+ t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE"
+ TARGET_SYSTEM_ROOT_DEFINE="$t"
+ ;;
+ esac
+
+else
+
+ use_sysroot=no
+ TARGET_SYSTEM_ROOT=
+ TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"\"'
+
+fi;
+
+
+
+
+
+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
-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
+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
- ac_cv_header_libintl_h=$ac_header_preproc
+ 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
-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
+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
@@ -7404,18 +10021,21 @@ _ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <libintl.h>
+
int
main ()
{
-return (int) gettext ("")
+#ifndef __GNUC__
+ choke me
+#endif
+
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+rm -f conftest.$ac_objext
+if { (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
@@ -7429,58 +10049,52 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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
- gt_cv_func_gettext_libc=yes
+ ac_compiler_gnu=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
+ac_compiler_gnu=no
fi
-echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5
-echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
- 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
+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
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lintl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char 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
+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
@@ -7494,49 +10108,110 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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_lib_intl_bindtextdomain=yes
+ ac_cv_prog_cc_g=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_intl_bindtextdomain=no
+ac_cv_prog_cc_g=no
fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+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: 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 "$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
- cat >conftest.$ac_ext <<_ACEOF
+ 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 (int) gettext ("")
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[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
+# 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
@@ -7550,134 +10225,94 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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
- gt_cv_func_gettext_libintl=yes
+ ac_cv_prog_cc_stdc=$ac_arg
+break
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
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
- 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
+fi
- # 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.
- ;;
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
*)
- 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"
- ;;
+ 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
-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
+# 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
-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
-
+$ac_declaration
+#include <stdlib.h>
int
main ()
{
-return f != $ac_func;
+exit (42);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+rm -f conftest.$ac_objext
+if { (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
@@ -7691,127 +10326,38 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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_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
+continue
fi
-
- cat >conftest.$ac_ext <<_ACEOF
+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 ()
{
-extern int _nl_msg_cat_cntr;
- return _nl_msg_cat_cntr
+exit (42);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+rm -f conftest.$ac_objext
+if { (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
@@ -7825,42 +10371,252 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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
- CATOBJEXT=.gmo
- DATADIRNAME=share
+ break
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
+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 zh_TW ga"
+# If we haven't got the data from the intl directory,
+# assume NLS is disabled.
+USE_NLS=no
+LIBINTL=
+LIBINTL_DEP=
+INCINTL=
+XGETTEXT=
+GMSGFMT=
+POSUB=
+
+if test -f ../intl/config.intl; then
+ . ../intl/config.intl
+fi
+echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
+if test x"$USE_NLS" != xyes; then
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+
+ echo "$as_me:$LINENO: checking for catalogs to be installed" >&5
+echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6
+ # Look for .po and .gmo files in the source directory.
+ CATALOGS=
+ XLINGUAS=
+ for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
+ # If there aren't any .gmo files the shell will give us the
+ # literal string "../path/to/srcdir/po/*.gmo" which has to be
+ # weeded out.
+ case "$cat" in *\**)
+ continue;;
+ esac
+ # The quadruple backslash is collapsed to a double backslash
+ # by the backticks, then collapsed again by the double quotes,
+ # leaving us with one backslash in the sed expression (right
+ # before the dot that mustn't act as a wildcard).
+ cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
+ lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
+ # The user is allowed to set LINGUAS to a list of languages to
+ # install catalogs for. If it's empty that means "all of them."
+ if test "x$LINGUAS" = x; then
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ else
+ case "$LINGUAS" in *$lang*)
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ ;;
+ esac
+ fi
+ done
+ LINGUAS="$XLINGUAS"
+ echo "$as_me:$LINENO: result: $LINGUAS" >&5
+echo "${ECHO_T}$LINGUAS" >&6
- 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.
+ DATADIRNAME=share
+
+ INSTOBJEXT=.mo
+
+ GENCAT=gencat
+
+ CATOBJEXT=.gmo
+
+fi
+
+ MKINSTALLDIRS=
+ if test -n "$ac_aux_dir"; then
+ case "$ac_aux_dir" in
+ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+ esac
+ fi
+ if test -z "$MKINSTALLDIRS"; then
+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+ fi
+
+
+
+ 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
+
+
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
@@ -7868,27 +10624,31 @@ 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.
- ;;
+ [\\/]* | ?:[\\/]*)
+ 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"
- ;;
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
esac
fi
MSGFMT="$ac_cv_path_MSGFMT"
-if test -n "$MSGFMT"; then
+if test "$MSGFMT" != ":"; then
echo "$as_me:$LINENO: result: $MSGFMT" >&5
echo "${ECHO_T}$MSGFMT" >&6
else
@@ -7896,7 +10656,7 @@ else
echo "${ECHO_T}no" >&6
fi
- # Extract the first word of "gmsgfmt", so it can be a program name with args.
+ # 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
@@ -7936,7 +10696,37 @@ else
echo "${ECHO_T}no" >&6
fi
- # Extract the first word of "xgettext", so it can be a program name with args.
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
@@ -7944,27 +10734,31 @@ 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.
- ;;
+ [\\/]* | ?:[\\/]*)
+ 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"
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
- ;;
+ ;;
esac
fi
XGETTEXT="$ac_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
+if test "$XGETTEXT" != ":"; then
echo "$as_me:$LINENO: result: $XGETTEXT" >&5
echo "${ECHO_T}$XGETTEXT" >&6
else
@@ -7972,283 +10766,104 @@ else
echo "${ECHO_T}no" >&6
fi
+ rm -f messages.po
- 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
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
else
- ac_cpp_err=
+ PATH_SEPARATOR=:
fi
-else
- ac_cpp_err=yes
+ rm -f conf$$.sh
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
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
+rm -f conf$$.file
-# 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
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; 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_MSGMERGE+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
;;
- 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
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
;;
esac
-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
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+echo "${ECHO_T}$MSGMERGE" >&6
else
- msgformat=xopen
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+ if test "$GMSGFMT" != ":"; then
+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+ echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6
+ GMSGFMT=":"
+ fi
+ 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"
-
+ if test "$XGETTEXT" != ":"; then
+ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
+echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
+ XGETTEXT=":"
+ fi
+ rm -f messages.po
+ fi
- l=
+ ac_config_commands="$ac_config_commands default-1"
- 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
-
@@ -8596,6 +11211,16 @@ fi
+
+if false; then
+ GENINSRC_NEVER_TRUE=
+ GENINSRC_NEVER_FALSE='#'
+else
+ GENINSRC_NEVER_TRUE='#'
+ GENINSRC_NEVER_FALSE=
+fi
+
+
. ${srcdir}/configure.host
@@ -8608,7 +11233,9 @@ fi
-for ac_header in string.h strings.h stdlib.h unistd.h elf-hints.h
+
+
+for ac_header in string.h strings.h stdlib.h unistd.h elf-hints.h limits.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
@@ -8760,7 +11387,9 @@ done
-for ac_func in sbrk realpath glob
+
+
+for ac_func in glob mkstemp realpath sbrk waitpid
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -9713,6 +12342,15 @@ do
EMUL=$targ_emul
fi
+ if test x${want64} = xfalse; then
+ . ${srcdir}/../bfd/config.bfd
+ fi
+
+ if test x${want64} = xtrue; then
+ targ_extra_emuls="$targ_extra_emuls $targ64_extra_emuls"
+ targ_extra_libpath="$targ_extra_libpath $targ64_extra_libpath"
+ fi
+
for i in $targ_emul $targ_extra_emuls $targ_extra_libpath; do
case " $all_emuls " in
*" e${i}.o "*) ;;
@@ -9755,6 +12393,425 @@ TDIRS=tdirs
if test x${all_targets} = xtrue; then
+ if test x${want64} = xfalse; then
+ echo "$as_me:$LINENO: checking for long" >&5
+echo $ECHO_N "checking for long... $ECHO_C" >&6
+if test "${ac_cv_type_long+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 ((long *) 0)
+ return 0;
+if (sizeof (long))
+ 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_long=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_long=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
+echo "${ECHO_T}$ac_cv_type_long" >&6
+
+echo "$as_me:$LINENO: checking size of long" >&5
+echo $ECHO_N "checking size of long... $ECHO_C" >&6
+if test "${ac_cv_sizeof_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_long" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)];
+test_array [0] = 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_lo=0 ac_mid=0
+ while :; do
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 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_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)];
+test_array [0] = 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_hi=-1 ac_mid=-1
+ while :; do
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)];
+test_array [0] = 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_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ 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 ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 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_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+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
+long longval () { return (long) (sizeof (long)); }
+unsigned long ulongval () { return (long) (sizeof (long)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (long))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (long))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (long))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 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_sizeof_long=`cat conftest.val`
+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 )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_long=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+ if test "x${ac_cv_sizeof_long}" = "x8"; then
+ want64=true
+ fi
+ fi
if test x${want64} = xtrue; then
EMULATION_OFILES='$(ALL_EMULATIONS) $(ALL_64_EMULATIONS)'
else
@@ -9802,7 +12859,6 @@ 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
@@ -9915,6 +12971,13 @@ 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
+if test -z "${GENINSRC_NEVER_TRUE}" && test -z "${GENINSRC_NEVER_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"GENINSRC_NEVER\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"GENINSRC_NEVER\" 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
@@ -10350,6 +13413,254 @@ cat >>$CONFIG_STATUS <<_ACEOF
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+ ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+ # from automake.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+
_ACEOF
@@ -10362,7 +13673,8 @@ do
"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" ;;
+ "libtool" ) CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
"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;}
@@ -10499,38 +13811,42 @@ 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,@LIBTOOL@,$LIBTOOL,;t t
+s,@SED@,$SED,;t t
+s,@EGREP@,$EGREP,;t t
+s,@FGREP@,$FGREP,;t t
+s,@GREP@,$GREP,;t t
+s,@LD@,$LD,;t t
+s,@DUMPBIN@,$DUMPBIN,;t t
+s,@ac_ct_DUMPBIN@,$ac_ct_DUMPBIN,;t t
+s,@NM@,$NM,;t t
s,@LN_S@,$LN_S,;t t
+s,@AR@,$AR,;t t
+s,@ac_ct_AR@,$ac_ct_AR,;t t
s,@RANLIB@,$RANLIB,;t t
s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s,@LIBTOOL@,$LIBTOOL,;t t
+s,@lt_ECHO@,$lt_ECHO,;t t
+s,@CPP@,$CPP,;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,@LIBINTL@,$LIBINTL,;t t
+s,@LIBINTL_DEP@,$LIBINTL_DEP,;t t
+s,@INCINTL@,$INCINTL,;t t
s,@XGETTEXT@,$XGETTEXT,;t t
-s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t
+s,@GMSGFMT@,$GMSGFMT,;t t
+s,@POSUB@,$POSUB,;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,@GENCAT@,$GENCAT,;t t
+s,@CATOBJEXT@,$CATOBJEXT,;t t
s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
-s,@l@,$l,;t t
+s,@MSGFMT@,$MSGFMT,;t t
+s,@MSGMERGE@,$MSGMERGE,;t t
s,@YACC@,$YACC,;t t
s,@LEX@,$LEX,;t t
s,@LEXLIB@,$LEXLIB,;t t
@@ -10538,6 +13854,8 @@ 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,@GENINSRC_NEVER_TRUE@,$GENINSRC_NEVER_TRUE,;t t
+s,@GENINSRC_NEVER_FALSE@,$GENINSRC_NEVER_FALSE,;t t
s,@HDEFINES@,$HDEFINES,;t t
s,@HOSTING_CRT0@,$HOSTING_CRT0,;t t
s,@HOSTING_LIBS@,$HOSTING_LIBS,;t t
@@ -11238,7 +14556,656 @@ echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
done
done
;;
- default ) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;;
+ libtool )
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# 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, a copy can be downloaded from
+# http://www.gnu.org/copyleft/gpl.html, or by writing to the Free
+# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1+=\$2"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1=\$$1\$2"
+}
+_LT_EOF
+ ;;
+ esac
+
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+ ;;
+ default-1 )
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ GMOFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
esac
done
_ACEOF
diff --git a/ld/configure.host b/ld/configure.host
index f9f080f60243..be343eb7e48c 100644
--- a/ld/configure.host
+++ b/ld/configure.host
@@ -147,6 +147,12 @@ i[3-7]86-*-cygwin*)
HOSTING_LIBS="$HOSTING_LIBS"' -lcygwin -L/usr/lib/w32api -luser32 -lkernel32 -ladvapi32 -lshell32 `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi`'
;;
+i[3-7]86-*-mingw*)
+ #We only support msvcrt.dll, crtid == 2.
+ HOSTING_CRT0='/mingw/lib/crt2.o'
+ HOSTING_LIBS='-L/mingw/lib -lmingw32 -lmoldname -lmingwex -lmsvcrt -luser32 -lkernel32 -ladvapi32 -lshell32 -lmingw32 -lmoldname -lmingwex -lmsvcrt `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi`'
+ ;;
+
ia64-*-linux-*)
HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,ld\[^ \]*\*,ld-linux-ia64,g"`
;;
diff --git a/ld/configure.in b/ld/configure.in
index e020288c00c0..0589578a74a6 100644
--- a/ld/configure.in
+++ b/ld/configure.in
@@ -41,17 +41,20 @@ AC_ARG_WITH(sysroot,
TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
use_sysroot=yes
+ if test "x$prefix" = xNONE; then
+ test_prefix=/usr/local
+ else
+ test_prefix=$prefix
+ fi
if test "x$exec_prefix" = xNONE; then
- if test "x$prefix" = xNONE; then
- test_prefix=/usr/local
- else
- test_prefix=$prefix
- fi
+ test_exec_prefix=$test_prefix
else
- test_prefix=$exec_prefix
+ test_exec_prefix=$exec_prefix
fi
case ${TARGET_SYSTEM_ROOT} in
"${test_prefix}"|"${test_prefix}/"*|\
+ "${test_exec_prefix}"|"${test_exec_prefix}/"*|\
+ '${prefix}'|'${prefix}/'*|\
'${exec_prefix}'|'${exec_prefix}/'*)
t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE"
TARGET_SYSTEM_ROOT_DEFINE="$t"
@@ -82,8 +85,9 @@ fi
AC_PROG_CC
AC_PROG_INSTALL
-ALL_LINGUAS="fr sv tr es da vi zh_CN"
-CY_GNU_GETTEXT
+ALL_LINGUAS="fr sv tr es da vi zh_CN zh_TW ga"
+ZW_GNU_GETTEXT_SISTER_DIR
+AM_PO_SUBDIRS
AC_EXEEXT
@@ -91,6 +95,7 @@ AC_PROG_YACC
AM_PROG_LEX
AM_MAINTAINER_MODE
+AM_CONDITIONAL(GENINSRC_NEVER, false)
. ${srcdir}/configure.host
@@ -99,8 +104,8 @@ 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_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h elf-hints.h limits.h sys/param.h)
+AC_CHECK_FUNCS(glob mkstemp realpath sbrk waitpid)
AC_HEADER_DIRENT
AC_MSG_CHECKING(for a known getopt prototype in unistd.h)
@@ -169,6 +174,15 @@ do
EMUL=$targ_emul
fi
+ if test x${want64} = xfalse; then
+ . ${srcdir}/../bfd/config.bfd
+ fi
+
+ if test x${want64} = xtrue; then
+ targ_extra_emuls="$targ_extra_emuls $targ64_extra_emuls"
+ targ_extra_libpath="$targ_extra_libpath $targ64_extra_libpath"
+ fi
+
for i in $targ_emul $targ_extra_emuls $targ_extra_libpath; do
case " $all_emuls " in
*" e${i}.o "*) ;;
@@ -210,10 +224,13 @@ 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} = xfalse; then
+ AC_CHECK_SIZEOF(long)
+ if test "x${ac_cv_sizeof_long}" = "x8"; then
+ want64=true
+ fi
+ fi
if test x${want64} = xtrue; then
EMULATION_OFILES='$(ALL_EMULATIONS) $(ALL_64_EMULATIONS)'
else
@@ -258,5 +275,4 @@ 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])
+AC_OUTPUT(Makefile po/Makefile.in:po/Make-in)
diff --git a/ld/configure.tgt b/ld/configure.tgt
index d324e4ece25a..46e05d33a8ab 100644
--- a/ld/configure.tgt
+++ b/ld/configure.tgt
@@ -9,11 +9,18 @@
# targ_extra_emuls additional linker emulations to provide
# targ_extra_libpath additional linker emulations using LIB_PATH
# targ_extra_ofiles additional objects needed by the emulation
+# targ64_extra_emuls additional linker emulations to provide if
+# --enable-64-bit-bfd is given or if host is 64 bit.
+# targ64_extra_libpath additional linker emulations using LIB_PATH if
+# --enable-64-bit-bfd is given or if host is 64 bit.
# NATIVE_LIB_DIRS library directories to search on this host
# (if we are a native or sysrooted linker)
targ_extra_emuls=
+targ_extra_libpath=
targ_extra_ofiles=
+targ64_extra_emuls=
+targ64_extra_libpath=
# Please try to keep this table in alphabetic order - it makes it
# much easier to lookup a specific archictecture. Naturally any
@@ -37,7 +44,7 @@ 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-wince-pe | arm-*-wince) targ_emul=arm_wince_pe ; targ_extra_ofiles="deffilep.o pe-dll.o" ;;
arm-*-pe) targ_emul=armpe ; targ_extra_ofiles="deffilep.o pe-dll.o" ;;
arm-*-aout | armel-*-aout) targ_emul=armaoutl ;;
armeb-*-aout) targ_emul=armaoutb ;;
@@ -60,11 +67,30 @@ arm-*-elf | arm*-*-eabi*)
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*b-*-linux-*eabi) targ_emul=armelfb_linux_eabi
+ targ_extra_emuls=armelf_linux_eabi
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+arm*b-*-linux-*) targ_emul=armelfb_linux
+ targ_extra_emuls="armelfb armelf armelf_linux"
+ targ_extra_libpath="armelf_linux"
+ ;;
+arm*-*-linux-*eabi) targ_emul=armelf_linux_eabi
+ targ_extra_emuls=armelfb_linux_eabi
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+arm*-*-linux-*) targ_emul=armelf_linux
+ targ_extra_emuls="armelf armelfb armelfb_linux"
+ targ_extra_libpath="armelfb_linux"
+ ;;
+arm*-*-uclinux*eabi) targ_emul=armelf_linux_eabi
+ targ_extra_emuls=armelfb_linux_eabi
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+arm*-*-uclinux*) targ_emul=armelf_linux
+ targ_extra_emuls="armelf armelfb armelfb_linux"
+ targ_extra_libpath="armelfb_linux"
+ ;;
arm-*-vxworks) targ_emul=armelf_vxworks ;;
arm*-*-conix*) targ_emul=armelf ;;
thumb-*-linux-* | thumb-*-uclinux*) targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
@@ -81,10 +107,21 @@ xscale-*-coff) targ_emul=armcoff ;;
xscale-*-elf) targ_emul=armelf
;;
avr-*-*) targ_emul=avr2
- targ_extra_emuls="avr1 avr3 avr4 avr5"
+ targ_extra_emuls="avr1 avr3 avr4 avr5 avr6"
+ ;;
+bfin-*-elf) targ_emul=elf32bfin;
+ targ_extra_emuls="elf32bfinfd"
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+bfin-*-uclinux*) targ_emul=elf32bfin;
+ targ_extra_emuls="elf32bfinfd"
+ targ_extra_libpath=$targ_extra_emuls
+ ;;
+bfin-*-linux-uclibc*) targ_emul=elf32bfin;
+ targ_extra_emuls="elf32bfinfd"
+ targ_extra_libpath=$targ_extra_emuls
;;
-bfin-*-elf) targ_emul=elf32bfin; targ_extra_emuls="elf32bfinfd" ;;
-bfin-*-uclinux*) targ_emul=elf32bfin; targ_extra_emuls="elf32bfinfd" ;;
+cr16-*-elf*) targ_emul=elf32cr16 ;;
cr16c-*-elf*) targ_emul=elf32cr16c
;;
cris-*-*aout*) targ_emul=crisaout
@@ -105,6 +142,7 @@ d30v-*-*) targ_emul=d30velf; targ_extra_emuls="d30v_e d30v_o"
;;
dlx-*-elf*) targ_emul=elf32_dlx
;;
+fido*-*-elf*) targ_emul=m68kelf ;;
fr30-*-*) targ_emul=elf32fr30
;;
frv-*-*linux*) targ_emul=elf32frvfd ;;
@@ -151,9 +189,8 @@ i[3-7]86-*-linux*aout*) targ_emul=i386linux
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
+ targ64_extra_emuls=elf_x86_64
+ targ64_extra_libpath=elf_x86_64
tdir_i386linux=${targ_alias}aout ;;
x86_64-*-linux-*) targ_emul=elf_x86_64
targ_extra_emuls="elf_i386 i386linux"
@@ -163,10 +200,12 @@ x86_64-*-linux-*) targ_emul=elf_x86_64
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"
+ targ_extra_libpath=$targ_extra_emuls
;;
i[3-7]86-*-unixware) targ_emul=elf_i386 ;;
i[3-7]86-*-solaris*) targ_emul=elf_i386_ldso
targ_extra_emuls="elf_i386"
+ targ_extra_libpath=$targ_extra_emuls
;;
i[3-7]86-*-netbsdelf* | \
i[3-7]86-*-netbsd*-gnu* | \
@@ -200,6 +239,9 @@ i[3-7]86-*-freebsd* | i[3-7]86-*-kfreebsd*-gnu)
x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
targ_emul=elf_x86_64_fbsd
targ_extra_emuls="elf_i386_fbsd elf_x86_64 elf_i386"
+ targ_extra_libpath="elf_i386_fbsd"
+ tdir_elf_i386_fbsd=`echo ${targ_alias} \
+ | sed -e 's/x86_64/i386/'`
tdir_elf_i386=`echo ${targ_alias} \
| sed -e 's/x86_64/i386/'` ;;
i[3-7]86-*-sysv*) targ_emul=i386coff ;;
@@ -217,6 +259,8 @@ i[3-7]86-*-cygwin*) targ_emul=i386pe ;
test "$targ" != "$host" && LIB_PATH='${tooldir}/lib/w32api' ;;
i[3-7]86-*-mingw32*) targ_emul=i386pe ;
targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+x86_64-*-mingw*) targ_emul=i386pep ;
+ targ_extra_ofiles="deffilep.o pep-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 ;;
@@ -297,6 +341,7 @@ mcore-*-pe) targ_emul=mcorepe ;
targ_extra_ofiles="deffilep.o pe-dll.o" ;;
mcore-*-elf) targ_emul=elf32mcore
;;
+mep-*-elf) targ_emul=elf32mep ;;
mips*-*-pe) targ_emul=mipspe ;
targ_extra_ofiles="deffilep.o pe-dll.o" ;;
mips*-dec-ultrix*) targ_emul=mipslit ;;
@@ -321,6 +366,10 @@ mips*vr4100el-*-elf*) targ_emul=elf32l4300 ;;
mips*vr4100-*-elf*) targ_emul=elf32b4300 ;;
mips*vr5000el-*-elf*) targ_emul=elf32l4300 ;;
mips*vr5000-*-elf*) targ_emul=elf32b4300 ;;
+mips*el-sde-elf*) targ_emul=elf32ltsmip
+ targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip" ;;
+mips*-sde-elf*) targ_emul=elf32btsmip
+ targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip" ;;
mips*el-*-elf*) targ_emul=elf32elmip ;;
mips*-*-elf*) targ_emul=elf32ebmip ;;
mips*-*-rtems*) targ_emul=elf32ebmip ;;
@@ -331,14 +380,16 @@ mips*-*-vxworks*) targ_emul=elf32ebmipvxworks
mips*-*-windiss) targ_emul=elf32mipswindiss ;;
mips64*el-*-linux-*) targ_emul=elf32ltsmipn32
targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
- targ_extra_libpath="elf32ltsmip elf64ltsmip" ;;
+ targ_extra_libpath=$targ_extra_emuls ;;
mips64*-*-linux-*) targ_emul=elf32btsmipn32
targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
- targ_extra_libpath="elf32btsmip elf64btsmip" ;;
+ targ_extra_libpath=$targ_extra_emuls ;;
mips*el-*-linux-*) targ_emul=elf32ltsmip
- targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip" ;;
+ targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ targ_extra_libpath=$targ_extra_emuls ;;
mips*-*-linux-*) targ_emul=elf32btsmip
- targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip" ;;
+ targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ targ_extra_libpath=$targ_extra_emuls ;;
mips*-*-lnews*) targ_emul=mipslnews ;;
mips*-*-sysv4*) targ_emul=elf32btsmip
;;
@@ -383,10 +434,9 @@ powerpc*-*-linux*) case "${targ}" in
*) 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 ;;
+ targ64_extra_emuls=elf64ppc
+ targ64_extra_libpath=elf64ppc
+ ;;
esac ;;
powerpc*le-*-elf* | powerpc*le-*-eabi* | powerpc*le-*-solaris* \
| powerpc*le-*-sysv* | powerpc*le-*-vxworks*)
@@ -437,12 +487,11 @@ s390x-*-linux*) targ_emul=elf64_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
+ targ64_extra_emuls=elf64_s390
+ targ64_extra_libpath=elf64_s390
+ tdir_elf64_s390=`echo ${targ_alias} | sed -e 's/s390/s390x/'`
;;
+score-*-elf) targ_emul=scoreelf ;;
sh-*-linux*) targ_emul=shlelf_linux
targ_extra_emuls=shelf_linux
targ_extra_libpath=shelf_linux ;;
@@ -470,9 +519,14 @@ 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)
+sh-*-elf* | sh[1234]*-*-elf | sh-*-rtems* | sh-*-kaos*)
targ_emul=shelf
targ_extra_emuls="shlelf sh shl" ;;
+sh-*-uclinux* | sh[12]-*-uclinux*)
+ targ_emul=shelf_uclinux
+ targ_extra_emuls="shelf shlelf sh shl" ;;
+sh-*-vxworks) targ_emul=shelf_vxworks
+ targ_extra_emuls=shlelf_vxworks ;;
sh-*-nto*) targ_emul=shelf_nto
targ_extra_emuls=shlelf_nto ;;
sh-*-pe) targ_emul=shpe ;
@@ -536,6 +590,7 @@ sparc*-*-solaris2*) targ_emul=elf32_sparc ;;
sparc*-wrs-vxworks*) targ_emul=sparcaout ;;
sparc*-*-rtems*) targ_emul=elf32_sparc
;;
+spu-*-elf*) targ_emul=elf32_spu ;;
tic30-*-*aout*) targ_emul=tic30aout ;;
tic30-*-*coff*) targ_emul=tic30coff ;;
tic4x-*-* | c4x-*-*) targ_emul=tic4xcoff ; targ_extra_emuls="tic3xcoff tic3xcoff_onchip" ;;
@@ -609,6 +664,11 @@ sparc*-*-solaris2*)
NATIVE_LIB_DIRS='/usr/local/lib /usr/ccs/lib /lib /usr/lib'
;;
+spu-*-elf*)
+ # This allows to build a pair of PPU/SPU toolchains with common sysroot.
+ NATIVE_LIB_DIRS='/usr/spu/lib'
+ ;;
+
i[03-9x]86-*-cygwin*)
NATIVE_LIB_DIRS='/usr/lib /usr/lib/w32api'
;;
diff --git a/ld/deffilep.y b/ld/deffilep.y
index 5c699f394f89..80efb789f02a 100644
--- a/ld/deffilep.y
+++ b/ld/deffilep.y
@@ -1,6 +1,6 @@
%{ /* deffilep.y - parser for .def files */
-/* Copyright 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
+/* Copyright 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@@ -19,11 +19,10 @@
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 "sysdep.h"
#include "libiberty.h"
#include "safe-ctype.h"
#include "bfd.h"
-#include "sysdep.h"
#include "ld.h"
#include "ldmisc.h"
#include "deffile.h"
diff --git a/ld/emulparams/arcelf.sh b/ld/emulparams/arcelf.sh
index b1c9c1760cee..6c524c9a762a 100644
--- a/ld/emulparams/arcelf.sh
+++ b/ld/emulparams/arcelf.sh
@@ -1,11 +1,12 @@
SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-littlearc"
LITTLE_OUTPUT_FORMAT="elf32-littlearc"
BIG_OUTPUT_FORMAT="elf32-bigarc"
TEXT_START_ADDR=0x0
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x0
ARCH=arc
MACHINE=
ENTRY=start
-#TEMPLATE_NAME=elf32
diff --git a/ld/emulparams/arm_wince_pe.sh b/ld/emulparams/arm_wince_pe.sh
new file mode 100644
index 000000000000..2d0019fc47af
--- /dev/null
+++ b/ld/emulparams/arm_wince_pe.sh
@@ -0,0 +1,14 @@
+ARCH=arm
+SCRIPT_NAME=pe
+
+OUTPUT_FORMAT="pei-arm-wince-little"
+LITTLE_OUTPUT_FORMAT="pei-arm-wince-little"
+BIG_OUTPUT_FORMAT="pei-arm-wince-big"
+
+RELOCATEABLE_OUTPUT_FORMAT="pe-arm-wince-little"
+
+TEMPLATE_NAME=pe
+ENTRY="WinMainCRTStartup"
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/ld/emulparams/armelf.sh b/ld/emulparams/armelf.sh
index 6dc50b271fa9..ba9fdbe3ff4a 100644
--- a/ld/emulparams/armelf.sh
+++ b/ld/emulparams/armelf.sh
@@ -6,12 +6,12 @@ LITTLE_OUTPUT_FORMAT="elf32-littlearm"
TEXT_START_ADDR=0x8000
TEMPLATE_NAME=elf32
EXTRA_EM_FILE=armelf
-OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7)'
+OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7) *(.vfp11_veneer)'
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_SECTIONS='.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }'
+ATTRS_SECTIONS='.ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }'
OTHER_READONLY_SECTIONS="
.ARM.extab ${RELOCATING-0} : { *(.ARM.extab${RELOCATING+* .gnu.linkonce.armextab.*}) }
${RELOCATING+ __exidx_start = .; }
@@ -24,7 +24,7 @@ GENERATE_SHLIB_SCRIPT=yes
ARCH=arm
MACHINE=
-MAXPAGESIZE=256
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ENTRY=_start
EMBEDDED=yes
diff --git a/ld/emulparams/armelf_linux.sh b/ld/emulparams/armelf_linux.sh
index 39b7f656409f..e7f301fd37ca 100644
--- a/ld/emulparams/armelf_linux.sh
+++ b/ld/emulparams/armelf_linux.sh
@@ -3,15 +3,15 @@ SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-littlearm"
BIG_OUTPUT_FORMAT="elf32-bigarm"
LITTLE_OUTPUT_FORMAT="elf32-littlearm"
-MAXPAGESIZE=0x8000
-COMMONPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
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_TEXT_SECTIONS='*(.glue_7t) *(.glue_7) *(.vfp11_veneer)'
OTHER_BSS_SYMBOLS='__bss_start__ = .;'
OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ;'
OTHER_END_SYMBOLS='__end__ = . ;'
diff --git a/ld/emulparams/armelf_nbsd.sh b/ld/emulparams/armelf_nbsd.sh
index 3d9483915356..517cd626594c 100644
--- a/ld/emulparams/armelf_nbsd.sh
+++ b/ld/emulparams/armelf_nbsd.sh
@@ -1,5 +1,5 @@
. ${srcdir}/emulparams/armelf.sh
-MAXPAGESIZE=0x8000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
TEXT_START_ADDR=0x00008000
TARGET2_TYPE=got-rel
diff --git a/ld/emulparams/armelf_vxworks.sh b/ld/emulparams/armelf_vxworks.sh
index 7b6445e83082..ca5c907a07b1 100644
--- a/ld/emulparams/armelf_vxworks.sh
+++ b/ld/emulparams/armelf_vxworks.sh
@@ -2,5 +2,5 @@
OUTPUT_FORMAT="elf32-littlearm-vxworks"
BIG_OUTPUT_FORMAT="elf32-bigarm-vxworks"
LITTLE_OUTPUT_FORMAT="$OUTPUT_FORMAT"
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
. ${srcdir}/emulparams/vxworks.sh
diff --git a/ld/emulparams/armnto.sh b/ld/emulparams/armnto.sh
index 64296129dc2c..ae0b4bea5bc9 100644
--- a/ld/emulparams/armnto.sh
+++ b/ld/emulparams/armnto.sh
@@ -6,7 +6,7 @@ LITTLE_OUTPUT_FORMAT="elf32-littlearm"
TEXT_START_ADDR=0x00100000
TEMPLATE_NAME=elf32
EXTRA_EM_FILE=armelf
-OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7)'
+OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7) *(.vfp11_veneer)'
OTHER_BSS_SYMBOLS='__bss_start__ = .;'
OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ;'
OTHER_END_SYMBOLS='__end__ = . ;'
@@ -17,7 +17,7 @@ GENERATE_SHLIB_SCRIPT=yes
ARCH=arm
MACHINE=
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ENTRY=_start
diff --git a/ld/emulparams/armsymbian.sh b/ld/emulparams/armsymbian.sh
index a52d05b24806..3d7e86495974 100644
--- a/ld/emulparams/armsymbian.sh
+++ b/ld/emulparams/armsymbian.sh
@@ -19,7 +19,4 @@ OTHER_READONLY_SECTIONS="
${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
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
diff --git a/ld/emulparams/avr1.sh b/ld/emulparams/avr1.sh
index 4ccc9ed34f37..7d907fe008d6 100644
--- a/ld/emulparams/avr1.sh
+++ b/ld/emulparams/avr1.sh
@@ -4,7 +4,8 @@ SCRIPT_NAME=avr
OUTPUT_FORMAT="elf32-avr"
MAXPAGESIZE=1
EMBEDDED=yes
-TEMPLATE_NAME=generic
+TEMPLATE_NAME=elf32
TEXT_LENGTH=8K
DATA_LENGTH=0
+EXTRA_EM_FILE=avrelf
diff --git a/ld/emulparams/avr2.sh b/ld/emulparams/avr2.sh
index 9c98ce1dd68c..2bd677bfc8c6 100644
--- a/ld/emulparams/avr2.sh
+++ b/ld/emulparams/avr2.sh
@@ -4,7 +4,8 @@ SCRIPT_NAME=avr
OUTPUT_FORMAT="elf32-avr"
MAXPAGESIZE=1
EMBEDDED=yes
-TEMPLATE_NAME=generic
+TEMPLATE_NAME=elf32
TEXT_LENGTH=8K
DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff --git a/ld/emulparams/avr3.sh b/ld/emulparams/avr3.sh
index 0434d074dec1..ff559e6d29a2 100644
--- a/ld/emulparams/avr3.sh
+++ b/ld/emulparams/avr3.sh
@@ -4,7 +4,8 @@ SCRIPT_NAME=avr
OUTPUT_FORMAT="elf32-avr"
MAXPAGESIZE=1
EMBEDDED=yes
-TEMPLATE_NAME=generic
+TEMPLATE_NAME=elf32
TEXT_LENGTH=128K
DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff --git a/ld/emulparams/avr4.sh b/ld/emulparams/avr4.sh
index 33fc83aff511..2f57cb0eb76e 100644
--- a/ld/emulparams/avr4.sh
+++ b/ld/emulparams/avr4.sh
@@ -4,7 +4,8 @@ SCRIPT_NAME=avr
OUTPUT_FORMAT="elf32-avr"
MAXPAGESIZE=1
EMBEDDED=yes
-TEMPLATE_NAME=generic
+TEMPLATE_NAME=elf32
TEXT_LENGTH=8K
DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff --git a/ld/emulparams/avr5.sh b/ld/emulparams/avr5.sh
index 5b175b82f044..69090beedefa 100644
--- a/ld/emulparams/avr5.sh
+++ b/ld/emulparams/avr5.sh
@@ -4,7 +4,8 @@ SCRIPT_NAME=avr
OUTPUT_FORMAT="elf32-avr"
MAXPAGESIZE=1
EMBEDDED=yes
-TEMPLATE_NAME=generic
+TEMPLATE_NAME=elf32
TEXT_LENGTH=128K
DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff --git a/ld/emulparams/avr6.sh b/ld/emulparams/avr6.sh
new file mode 100644
index 000000000000..5326488ec474
--- /dev/null
+++ b/ld/emulparams/avr6.sh
@@ -0,0 +1,11 @@
+ARCH=avr:6
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+
+TEXT_LENGTH=1024K
+DATA_LENGTH=0xffa0
+EXTRA_EM_FILE=avrelf
diff --git a/ld/emulparams/bfin.sh b/ld/emulparams/bfin.sh
index 5e7adda4dd9b..73e2b946a5a8 100755
--- a/ld/emulparams/bfin.sh
+++ b/ld/emulparams/bfin.sh
@@ -1,7 +1,7 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-bfin"
TEXT_START_ADDR=0x0
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
TARGET_PAGE_SIZE=0x1000
NONPAGED_TEXT_START_ADDR=${TEXT_START_ADDR}
ARCH=bfin
@@ -10,5 +10,4 @@ ENTRY=__start
TEMPLATE_NAME=elf32
GENERATE_SHLIB_SCRIPT=yes
EMBEDDED=yes
-DATA_END_SYMBOLS="__edata = .; PROVIDE (_edata = .);"
-END_SYMBOLS="__end = .; PROVIDE (_end = .);"
+USER_LABEL_PREFIX=_
diff --git a/ld/emulparams/criself.sh b/ld/emulparams/criself.sh
index 0478f345af42..1d374ae44bbc 100644
--- a/ld/emulparams/criself.sh
+++ b/ld/emulparams/criself.sh
@@ -13,7 +13,12 @@ ALIGNMENT=32
TEXT_START_ADDR=0
# Put crt0 for flash/eprom etc. in this section.
-INITIAL_READONLY_SECTIONS='.startup : { KEEP(*(.startup)) }'
+INITIAL_READONLY_SECTIONS=
+if test -z "${CREATE_SHLIB}"; then
+ INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
+fi
+INITIAL_READONLY_SECTIONS="${INITIAL_READONLY_SECTIONS}
+ .startup : { KEEP(*(.startup)) }"
# Setting __Stext to . in TEXT_START_SYMBOLS doesn't get what we want
# most of the time, which is the start of all read-only sections;
diff --git a/ld/emulparams/crislinux.sh b/ld/emulparams/crislinux.sh
index 98d12f3929b8..e41024c9a7af 100644
--- a/ld/emulparams/crislinux.sh
+++ b/ld/emulparams/crislinux.sh
@@ -14,7 +14,7 @@ GENERATE_SHLIB_SCRIPT=yes
# Is this high enough and low enough?
TEXT_START_ADDR=0x80000
-MAXPAGESIZE=8192
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
# We don't do the hoops through DEFINED to provide [_]*start, as it
# doesn't work with --gc-sections, and the start-name is pretty fixed
diff --git a/ld/emulparams/d30v_e.sh b/ld/emulparams/d30v_e.sh
index a8ab5a25dbd1..617a048c898d 100644
--- a/ld/emulparams/d30v_e.sh
+++ b/ld/emulparams/d30v_e.sh
@@ -1,5 +1,7 @@
MACHINE=
SCRIPT_NAME=elfd30v
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-d30v"
TEXT_START_ADDR=0x00000000
DATA_START_ADDR=0x20000000
diff --git a/ld/emulparams/d30v_o.sh b/ld/emulparams/d30v_o.sh
index 6cbcb42abdbd..79ba83ba7e98 100644
--- a/ld/emulparams/d30v_o.sh
+++ b/ld/emulparams/d30v_o.sh
@@ -1,5 +1,7 @@
MACHINE=
SCRIPT_NAME=elfd30v
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-d30v"
TEXT_START_ADDR=0x00000000
DATA_START_ADDR=0x20000000
diff --git a/ld/emulparams/d30velf.sh b/ld/emulparams/d30velf.sh
index 949de78655a7..ab0d70f6bfc7 100644
--- a/ld/emulparams/d30velf.sh
+++ b/ld/emulparams/d30velf.sh
@@ -1,5 +1,7 @@
MACHINE=
SCRIPT_NAME=elfd30v
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-d30v"
TEXT_START_ADDR=0x00000000
DATA_START_ADDR=0x20000000
diff --git a/ld/emulparams/elf32_dlx.sh b/ld/emulparams/elf32_dlx.sh
index d3ff81c34145..525b209209d2 100644
--- a/ld/emulparams/elf32_dlx.sh
+++ b/ld/emulparams/elf32_dlx.sh
@@ -1,5 +1,6 @@
SCRIPT_NAME=dlx
TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-dlx"
ARCH=dlx
MACHINE=
diff --git a/ld/emulparams/elf32_i860.sh b/ld/emulparams/elf32_i860.sh
index 6769fa54d262..589067f818b9 100644
--- a/ld/emulparams/elf32_i860.sh
+++ b/ld/emulparams/elf32_i860.sh
@@ -1,9 +1,11 @@
# A work in progress...
SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-i860-little"
BIG_OUTPUT_FORMAT="elf32-i860"
LITTLE_OUTPUT_FORMAT="elf32-i860-little"
TEXT_START_ADDR=0
PAGE_SIZE=0x1000
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=i860
diff --git a/ld/emulparams/elf32_i960.sh b/ld/emulparams/elf32_i960.sh
index 10ec3fa573b7..1ef729297ab1 100644
--- a/ld/emulparams/elf32_i960.sh
+++ b/ld/emulparams/elf32_i960.sh
@@ -5,4 +5,4 @@ ARCH=i960
MACHINE=
TEXT_START_ADDR=0
EMBEDDED=yes
-MAXPAGESIZE=0x2000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
diff --git a/ld/emulparams/elf32_sparc.sh b/ld/emulparams/elf32_sparc.sh
index af23252949ff..d09d9dc7edb9 100644
--- a/ld/emulparams/elf32_sparc.sh
+++ b/ld/emulparams/elf32_sparc.sh
@@ -1,8 +1,11 @@
+# If you change this file, please also look at files which source this one:
+# elf32_sparc_vxworks.sh
+
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-sparc"
TEXT_START_ADDR=0x10000
-MAXPAGESIZE=0x10000
-COMMONPAGESIZE=0x2000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x10000
ALIGNMENT=8
ARCH=sparc
diff --git a/ld/emulparams/elf32_spu.sh b/ld/emulparams/elf32_spu.sh
new file mode 100644
index 000000000000..4af608cb2e17
--- /dev/null
+++ b/ld/emulparams/elf32_spu.sh
@@ -0,0 +1,20 @@
+SCRIPT_NAME=elf
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=spuelf
+OUTPUT_FORMAT="elf32-spu"
+ARCH=spu
+MACHINE=
+ALIGNMENT=16
+TEXT_START_ADDR=0
+INITIAL_READONLY_SECTIONS='.interrupt : { KEEP(*(.interrupt)) }'
+if test -z "${CREATE_SHLIB}"; then
+ INITIAL_READONLY_SECTIONS="${INITIAL_READONLY_SECTIONS}
+ .interp ${RELOCATING-0} : { *(.interp) }"
+fi
+OTHER_END_SYMBOLS='PROVIDE (__stack = 0x3fff0);'
+NO_SMALL_DATA=true
+EMBEDDED=true
+MAXPAGESIZE=0x80
+DATA_ADDR="ALIGN(${MAXPAGESIZE})"
+OTHER_BSS_SECTIONS=".toe ALIGN(128) : { *(.toe) } = 0"
+OTHER_SECTIONS=".note.spu_name 0 : { KEEP(*(.note.spu_name)) }"
diff --git a/ld/emulparams/elf32am33lin.sh b/ld/emulparams/elf32am33lin.sh
index f8b3a8906217..31dbc70b882d 100644
--- a/ld/emulparams/elf32am33lin.sh
+++ b/ld/emulparams/elf32am33lin.sh
@@ -1,7 +1,7 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-am33lin"
TEXT_START_ADDR=0x8000000
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x8000000
ARCH=mn10300
MACHINE=
diff --git a/ld/emulparams/elf32bfinfd.sh b/ld/emulparams/elf32bfinfd.sh
index 9047c6a750f0..19ec748b7fb9 100644
--- a/ld/emulparams/elf32bfinfd.sh
+++ b/ld/emulparams/elf32bfinfd.sh
@@ -1,7 +1,7 @@
. ${srcdir}/emulparams/bfin.sh
unset STACK_ADDR
OUTPUT_FORMAT="elf32-bfinfdpic"
-MAXPAGESIZE=0x4000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
TEMPLATE_NAME=elf32
GENERATE_SHLIB_SCRIPT=yes
GENERATE_PIE_SCRIPT=yes
diff --git a/ld/emulparams/elf32bmip.sh b/ld/emulparams/elf32bmip.sh
index 614856573faa..ce33674cf93c 100644
--- a/ld/emulparams/elf32bmip.sh
+++ b/ld/emulparams/elf32bmip.sh
@@ -1,5 +1,6 @@
# If you change this file, please also look at files which source this one:
# elf32b4300.sh elf32bsmip.sh elf32btsmip.sh elf32ebmip.sh elf32lmip.sh
+# elf32ebmipvxworks.sh elf32elmipvxworks.sh
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-bigmips"
@@ -7,15 +8,26 @@ BIG_OUTPUT_FORMAT="elf32-bigmips"
LITTLE_OUTPUT_FORMAT="elf32-littlemips"
TEXT_START_ADDR=0x0400000
test -n "${EMBEDDED}" || DATA_ADDR=0x10000000
-MAXPAGESIZE=0x40000
-COMMONPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x0400000
SHLIB_TEXT_START_ADDR=0x5ffe0000
TEXT_DYNAMIC=
-INITIAL_READONLY_SECTIONS="
+INITIAL_READONLY_SECTIONS=
+if test -z "${CREATE_SHLIB}"; then
+ INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
+fi
+INITIAL_READONLY_SECTIONS="${INITIAL_READONLY_SECTIONS}
.reginfo ${RELOCATING-0} : { *(.reginfo) }
"
OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)'
+# Unlike most targets, the MIPS backend puts all dynamic relocations
+# in a single dynobj section, which it also calls ".rel.dyn". It does
+# this so that it can easily sort all dynamic relocations before the
+# output section has been populated.
+OTHER_GOT_RELOC_SECTIONS="
+ .rel.dyn ${RELOCATING-0} : { *(.rel.dyn) }
+"
# If the output has a GOT section, there must be exactly 0x7ff0 bytes
# between .got and _gp. The ". = ." below stops the orphan code from
# inserting other sections between the assignment to _gp and the start
@@ -46,5 +58,6 @@ OTHER_SECTIONS='
ARCH=mips
MACHINE=
TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=mipself
GENERATE_SHLIB_SCRIPT=yes
GENERATE_PIE_SCRIPT=yes
diff --git a/ld/emulparams/elf32bmipn32-defs.sh b/ld/emulparams/elf32bmipn32-defs.sh
index b81ac49ec305..49d2f8545da5 100644
--- a/ld/emulparams/elf32bmipn32-defs.sh
+++ b/ld/emulparams/elf32bmipn32-defs.sh
@@ -11,6 +11,7 @@ BIG_OUTPUT_FORMAT="elf32-bigmips"
LITTLE_OUTPUT_FORMAT="elf32-littlemips"
TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=mipself
case "$EMULATION_NAME" in
elf32*n32*) ELFSIZE=32 ;;
@@ -33,9 +34,16 @@ GENERATE_SHLIB_SCRIPT=yes
GENERATE_PIE_SCRIPT=yes
TEXT_START_ADDR=0x10000000
-MAXPAGESIZE=0x100000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ENTRY=__start
+# Unlike most targets, the MIPS backend puts all dynamic relocations
+# in a single dynobj section, which it also calls ".rel.dyn". It does
+# this so that it can easily sort all dynamic relocations before the
+# output section has been populated.
+OTHER_GOT_RELOC_SECTIONS="
+ .rel.dyn ${RELOCATING-0} : { *(.rel.dyn) }
+"
# GOT-related settings.
# If the output has a GOT section, there must be exactly 0x7ff0 bytes
# between .got and _gp. The ". = ." below stops the orphan code from
@@ -56,7 +64,12 @@ TEXT_START_SYMBOLS='_ftext = . ;'
DATA_START_SYMBOLS='_fdata = . ;'
OTHER_BSS_SYMBOLS='_fbss = .;'
-INITIAL_READONLY_SECTIONS=".MIPS.options : { *(.MIPS.options) }"
+INITIAL_READONLY_SECTIONS=
+if test -z "${CREATE_SHLIB}"; then
+ INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
+fi
+INITIAL_READONLY_SECTIONS="${INITIAL_READONLY_SECTIONS}
+ .reginfo ${RELOCATING-0} : { *(.reginfo) }"
# Discard any .MIPS.content* or .MIPS.events* sections. The linker
# doesn't know how to adjust them.
OTHER_SECTIONS="/DISCARD/ : { *(.MIPS.content*) *(.MIPS.events*) }"
diff --git a/ld/emulparams/elf32bmipn32.sh b/ld/emulparams/elf32bmipn32.sh
index a320eb23ed07..c26b6b3dcb2e 100755
--- a/ld/emulparams/elf32bmipn32.sh
+++ b/ld/emulparams/elf32bmipn32.sh
@@ -3,7 +3,7 @@ OUTPUT_FORMAT="elf32-nbigmips"
BIG_OUTPUT_FORMAT="elf32-nbigmips"
LITTLE_OUTPUT_FORMAT="elf32-nlittlemips"
SHLIB_TEXT_START_ADDR=0x5ffe0000
-COMMONPAGESIZE=0x1000
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
# IRIX6 defines these symbols. 0x34 is the size of the ELF header.
EXECUTABLE_SYMBOLS="
diff --git a/ld/emulparams/elf32btsmipn32.sh b/ld/emulparams/elf32btsmipn32.sh
index 5ca6797e52a9..10c5565cc432 100644
--- a/ld/emulparams/elf32btsmipn32.sh
+++ b/ld/emulparams/elf32btsmipn32.sh
@@ -5,7 +5,7 @@
OUTPUT_FORMAT="elf32-ntradbigmips"
BIG_OUTPUT_FORMAT="elf32-ntradbigmips"
LITTLE_OUTPUT_FORMAT="elf32-ntradlittlemips"
-COMMONPAGESIZE=0x1000
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
# Magic sections.
OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)'
diff --git a/ld/emulparams/elf32cr16.sh b/ld/emulparams/elf32cr16.sh
new file mode 100644
index 000000000000..756d02bf568c
--- /dev/null
+++ b/ld/emulparams/elf32cr16.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=elf32cr16
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf32-cr16"
+ARCH=cr16
+ENTRY=_start
+EXTRA_EM_FILE=cr16elf
diff --git a/ld/emulparams/elf32ebmipvxworks.sh b/ld/emulparams/elf32ebmipvxworks.sh
index 4145488ae28e..6d1cc3c96ca1 100644
--- a/ld/emulparams/elf32ebmipvxworks.sh
+++ b/ld/emulparams/elf32ebmipvxworks.sh
@@ -3,6 +3,15 @@
OUTPUT_FORMAT="elf32-bigmips-vxworks"
BIG_OUTPUT_FORMAT="elf32-bigmips-vxworks"
LITTLE_OUTPUT_FORMAT="elf32-littlemips-vxworks"
+# VxWorks .rdata sections are normally read-only, but one of the objects
+# in libdl.a (the dynamic loader) is actually read-write. Explicitly
+# place the section in the appropriate segment for its flags.
+OTHER_READONLY_SECTIONS="
+ .rdata ${RELOCATING-0} : ONLY_IF_RO { *(.rdata) }
+"
+OTHER_READWRITE_SECTIONS="
+ .rdata ${RELOCATING-0} : ONLY_IF_RW { *(.rdata) }
+"
unset OTHER_GOT_SYMBOLS
SHLIB_TEXT_START_ADDR=0
unset TEXT_DYNAMIC
diff --git a/ld/emulparams/elf32fr30.sh b/ld/emulparams/elf32fr30.sh
index 069c623cd30f..d078155909a1 100755
--- a/ld/emulparams/elf32fr30.sh
+++ b/ld/emulparams/elf32fr30.sh
@@ -1,5 +1,7 @@
MACHINE=
SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-fr30"
TEXT_START_ADDR=0x10000
ARCH=fr30
diff --git a/ld/emulparams/elf32frv.sh b/ld/emulparams/elf32frv.sh
index 16773b716cad..903707243f7d 100755
--- a/ld/emulparams/elf32frv.sh
+++ b/ld/emulparams/elf32frv.sh
@@ -1,5 +1,7 @@
MACHINE=
SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-frv"
TEXT_START_ADDR=0x10000
ARCH=frv
diff --git a/ld/emulparams/elf32frvfd.sh b/ld/emulparams/elf32frvfd.sh
index 42b36f7d63d6..c17466962655 100644
--- a/ld/emulparams/elf32frvfd.sh
+++ b/ld/emulparams/elf32frvfd.sh
@@ -1,8 +1,9 @@
. ${srcdir}/emulparams/elf32frv.sh
unset STACK_ADDR
OUTPUT_FORMAT="elf32-frvfdpic"
-MAXPAGESIZE=0x4000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
TEMPLATE_NAME=elf32
+unset EXTRA_EM_FILE
GENERATE_SHLIB_SCRIPT=yes
GENERATE_PIE_SCRIPT=yes
EMBEDDED= # This gets us program headers mapped as part of the text segment.
diff --git a/ld/emulparams/elf32i370.sh b/ld/emulparams/elf32i370.sh
index d9d5d85617a9..425238c2afcc 100644
--- a/ld/emulparams/elf32i370.sh
+++ b/ld/emulparams/elf32i370.sh
@@ -3,6 +3,6 @@ GENERATE_SHLIB_SCRIPT=yes
SCRIPT_NAME=elfi370
OUTPUT_FORMAT="elf32-i370"
TEXT_START_ADDR=0x01800000
-MAXPAGESIZE=0x40000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=i370
MACHINE=
diff --git a/ld/emulparams/elf32iq10.sh b/ld/emulparams/elf32iq10.sh
index 1721f5228d2f..2c0d75f100ee 100755
--- a/ld/emulparams/elf32iq10.sh
+++ b/ld/emulparams/elf32iq10.sh
@@ -1,5 +1,7 @@
MACHINE=
SCRIPT_NAME=iq2000
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-iq2000"
DATA_ADDR=0x1000
TEXT_START_ADDR=0x80000000
diff --git a/ld/emulparams/elf32iq2000.sh b/ld/emulparams/elf32iq2000.sh
index 18f239da37df..a21276ac22a2 100755
--- a/ld/emulparams/elf32iq2000.sh
+++ b/ld/emulparams/elf32iq2000.sh
@@ -1,5 +1,7 @@
MACHINE=
SCRIPT_NAME=iq2000
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-iq2000"
DATA_ADDR=0x1000
TEXT_START_ADDR=0x80000000
diff --git a/ld/emulparams/elf32lppcnto.sh b/ld/emulparams/elf32lppcnto.sh
index 1f1905542b23..c45260d0236e 100644
--- a/ld/emulparams/elf32lppcnto.sh
+++ b/ld/emulparams/elf32lppcnto.sh
@@ -1,5 +1,5 @@
. ${srcdir}/emulparams/elf32ppc.sh
OUTPUT_FORMAT="elf32-powerpcle"
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
TEXT_START_ADDR=0x48040000
diff --git a/ld/emulparams/elf32mcore.sh b/ld/emulparams/elf32mcore.sh
index 930a9c3c8bcd..6d9f2d6a992c 100644
--- a/ld/emulparams/elf32mcore.sh
+++ b/ld/emulparams/elf32mcore.sh
@@ -4,7 +4,7 @@ BIG_OUTPUT_FORMAT="elf32-mcore-big"
LITTLE_OUTPUT_FORMAT="elf32-mcore-little"
PAGE_SIZE=0x1000
TARGET_PAGE_SIZE=0x400
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
TEXT_START_ADDR=0
NONPAGED_TEXT_START_ADDR=0
ARCH=mcore
diff --git a/ld/emulparams/elf32mep.sh b/ld/emulparams/elf32mep.sh
new file mode 100755
index 000000000000..886ca4728515
--- /dev/null
+++ b/ld/emulparams/elf32mep.sh
@@ -0,0 +1,55 @@
+MACHINE=
+SCRIPT_NAME=mep
+OUTPUT_FORMAT="elf32-mep"
+TEXT_START_ADDR=0x1000
+ARCH=mep
+MAXPAGESIZE=256
+ENTRY=_start
+EMBEDDED=yes
+TEMPLATE_NAME=elf32
+DATA_START_SYMBOLS='__data_start = . ;'
+OTHER_GOT_SYMBOLS='
+ . = ALIGN(4);
+ __sdabase = . + 0x8000;
+ .srodata : { *(.srodata) *(.srodata.*) *(.gnu.linkonce.srd.*) }
+'
+OTHER_SDATA_SECTIONS='
+ PROVIDE (__sdabase = .);
+ __assert_tiny_size = ASSERT ((. < __sdabase) || ((. - __sdabase) <= 0x8000),
+ "tiny section overflow");
+'
+OTHER_READONLY_SECTIONS='
+ __stack = 0x001ffff0;
+ __stack_size = 0x100000;
+ __stack0 = (__stack - (0 * (__stack_size / 1)) + 15) / 16 * 16;
+
+ .rostacktab :
+ {
+ /* Emit a table describing the location of the different stacks.
+ Only 1 processor in the default configuration. */
+ . = ALIGN(4);
+ __stack_table = .;
+ LONG (__stack0);
+ }
+'
+OTHER_END_SYMBOLS='
+ PROVIDE (__heap = _end);
+ PROVIDE (__heap_end = 0);
+'
+OTHER_TEXT_SECTIONS='
+ *(.ftext) *(.ftext.*) *(.gnu.linkonce.ft.*)
+ . = ALIGN(8);
+ *(.vftext) *(.vftext.*) *(.gnu.linkonce.vf.*)
+ *(.frodata) *(.frodata.*) *(.gnu.linkonce.frd.*)
+'
+OTHER_READWRITE_SECTIONS='
+ . = ALIGN(4);
+ __tpbase = .;
+ .based : { *(.based) *(.based.*) *(.gnu.linkonce.based.*) }
+ __assert_based_size = ASSERT ((. - __tpbase) <= 0x80, "based section overflow");
+ .far : { *(.far) *(.far.*) *(.gnu.linkonce.far.*) }
+'
+OTHER_BSS_SECTIONS='
+ __assert_near_size = ASSERT (. <= 0x1000000, "near section overflow");
+ .farbss : { PROVIDE (__farbss_start = .); *(.farbss) *(.farbss.*) PROVIDE (__farbss_end = .); }
+'
diff --git a/ld/emulparams/elf32mt.sh b/ld/emulparams/elf32mt.sh
index 667979e65bb9..04fc1ed83d85 100644
--- a/ld/emulparams/elf32mt.sh
+++ b/ld/emulparams/elf32mt.sh
@@ -1,5 +1,7 @@
MACHINE=
SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-mt"
# See also `include/elf/mt.h'
TEXT_START_ADDR=0x2000
diff --git a/ld/emulparams/elf32openrisc.sh b/ld/emulparams/elf32openrisc.sh
index a65dcd89c57e..53e88ddf86ad 100755
--- a/ld/emulparams/elf32openrisc.sh
+++ b/ld/emulparams/elf32openrisc.sh
@@ -3,7 +3,7 @@ SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-openrisc"
TEXT_START_ADDR=0x10000
ARCH=openrisc
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ENTRY=_start
EMBEDDED=yes
NOP=0x15000000
diff --git a/ld/emulparams/elf32ppc.sh b/ld/emulparams/elf32ppc.sh
index 587b8d3aca0a..68962d7325d7 100644
--- a/ld/emulparams/elf32ppc.sh
+++ b/ld/emulparams/elf32ppc.sh
@@ -1,5 +1,6 @@
# If you change this file, please also look at files which source this one:
-# elf32lppc.sh elf32ppclinux.sh elf32ppcsim.sh
+# elf32lppcnto.sh elf32lppc.sh elf32ppclinux.sh elf32ppcnto.sh
+# elf32ppcsim.sh
. ${srcdir}/emulparams/elf32ppccommon.sh
# Yes, we want duplicate .got and .plt sections. The linker chooses the
diff --git a/ld/emulparams/elf32ppccommon.sh b/ld/emulparams/elf32ppccommon.sh
index b5fbc8d8e898..1a12890b0639 100644
--- a/ld/emulparams/elf32ppccommon.sh
+++ b/ld/emulparams/elf32ppccommon.sh
@@ -6,8 +6,8 @@ GENERATE_PIE_SCRIPT=yes
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-powerpc"
TEXT_START_ADDR=0x01800000
-MAXPAGESIZE=0x10000
-COMMONPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
ARCH=powerpc:common
MACHINE=
EXECUTABLE_SYMBOLS='PROVIDE (__stack = 0); PROVIDE (___stack = 0);'
diff --git a/ld/emulparams/elf32ppcnto.sh b/ld/emulparams/elf32ppcnto.sh
index dd4a79cb91a8..d0b3e3dfb60f 100644
--- a/ld/emulparams/elf32ppcnto.sh
+++ b/ld/emulparams/elf32ppcnto.sh
@@ -1,4 +1,4 @@
. ${srcdir}/emulparams/elf32ppc.sh
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
TEXT_START_ADDR=0x48040000
diff --git a/ld/emulparams/elf32ppcwindiss.sh b/ld/emulparams/elf32ppcwindiss.sh
index c0e6138c29f7..d217de94007c 100644
--- a/ld/emulparams/elf32ppcwindiss.sh
+++ b/ld/emulparams/elf32ppcwindiss.sh
@@ -4,7 +4,7 @@ OUTPUT_FORMAT="elf32-powerpc"
ARCH=powerpc
MACHINE=
EMBEDDED=yes
-MAXPAGESIZE=0x10000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
# The data below is taken from the windiss.dld linker script that comes with
# the Diab linker.
diff --git a/ld/emulparams/elf32vax.sh b/ld/emulparams/elf32vax.sh
index 56bbab7deb38..42e846f22e2b 100644
--- a/ld/emulparams/elf32vax.sh
+++ b/ld/emulparams/elf32vax.sh
@@ -1,7 +1,7 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-vax"
TEXT_START_ADDR=0x10000
-MAXPAGESIZE=0x10000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x1000
ARCH=vax
MACHINE=
diff --git a/ld/emulparams/elf32xc16x.sh b/ld/emulparams/elf32xc16x.sh
index 808feeddc47a..f88ccee8177a 100644
--- a/ld/emulparams/elf32xc16x.sh
+++ b/ld/emulparams/elf32xc16x.sh
@@ -3,6 +3,6 @@ TEMPLATE_NAME=elf32
OUTPUT_FORMAT="elf32-xc16x"
TEXT_START_ADDR=0x00400
ARCH=xc16x
-MAXPAGESIZE=256
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ENTRY=_start
EMBEDDED=yes
diff --git a/ld/emulparams/elf32xc16xl.sh b/ld/emulparams/elf32xc16xl.sh
index 333f2a6fd78a..14eb24bec81b 100644
--- a/ld/emulparams/elf32xc16xl.sh
+++ b/ld/emulparams/elf32xc16xl.sh
@@ -3,6 +3,6 @@ TEMPLATE_NAME=elf32
OUTPUT_FORMAT="elf32-xc16x"
TEXT_START_ADDR=0xc00300
ARCH=xc16x:xc16xl
-MAXPAGESIZE=256
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ENTRY=_start
EMBEDDED=yes
diff --git a/ld/emulparams/elf32xc16xs.sh b/ld/emulparams/elf32xc16xs.sh
index df36f4109771..2454963a970b 100644
--- a/ld/emulparams/elf32xc16xs.sh
+++ b/ld/emulparams/elf32xc16xs.sh
@@ -3,6 +3,6 @@ TEMPLATE_NAME=elf32
OUTPUT_FORMAT="elf32-xc16x"
TEXT_START_ADDR=0xc00300
ARCH=xc16x:xc16xs
-MAXPAGESIZE=256
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ENTRY=_start
EMBEDDED=yes
diff --git a/ld/emulparams/elf32xtensa.sh b/ld/emulparams/elf32xtensa.sh
index c4b13b9a511f..185da49dfbbc 100644
--- a/ld/emulparams/elf32xtensa.sh
+++ b/ld/emulparams/elf32xtensa.sh
@@ -1,7 +1,3 @@
-# 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
@@ -10,26 +6,40 @@ BIG_OUTPUT_FORMAT="elf32-xtensa-be"
LITTLE_OUTPUT_FORMAT="elf32-xtensa-le"
TEXT_START_ADDR=0x400000
NONPAGED_TEXT_START_ADDR=0x400000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=xtensa
MACHINE=
GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
GENERATE_COMBRELOC_SCRIPT=yes
NO_SMALL_DATA=yes
+TEXT_PLT=yes
PLT="/* .plt* sections are embedded in .text */"
GOT=".got ${RELOCATING-0} : { *(.got) }"
OTHER_READONLY_SECTIONS="
.got.loc ${RELOCATING-0} : { *(.got.loc) }
- .xt_except_table ${RELOCATING-0} : { KEEP (*(.xt_except_table)) }
+ .xt_except_table ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.xt_except_table${RELOCATING+ .xt_except_table.* .gnu.linkonce.e.*})) }
+"
+OTHER_RELRO_SECTIONS="
+ .xt_except_table ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.xt_except_table${RELOCATING+ .xt_except_table.* .gnu.linkonce.e.*})) }
"
OTHER_READWRITE_SECTIONS="
.xt_except_desc ${RELOCATING-0} :
{
- *(.xt_except_desc${RELOCATING+ .gnu.linkonce.h.*})
+ *(.xt_except_desc${RELOCATING+ .xt_except_desc.* .gnu.linkonce.h.*})
${RELOCATING+*(.xt_except_desc_end)}
}
"
+OTHER_SDATA_SECTIONS="
+ .lit4 ${RELOCATING-0} :
+ {
+ ${RELOCATING+PROVIDE (_lit4_start = .);}
+ *(.lit4${RELOCATING+ .lit4.* .gnu.linkonce.lit4.*})
+ ${RELOCATING+PROVIDE (_lit4_end = .);}
+ }
+"
OTHER_SECTIONS="
- .xt.lit 0 : { *(.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.*}) }
+ .xt.lit 0 : { KEEP (*(.xt.lit${RELOCATING+ .xt.lit.* .gnu.linkonce.p.*})) }
+ .xt.insn 0 : { KEEP (*(.xt.insn${RELOCATING+ .gnu.linkonce.x.*})) }
+ .xt.prop 0 : { KEEP (*(.xt.prop${RELOCATING+ .xt.prop.* .gnu.linkonce.prop.*})) }
"
diff --git a/ld/emulparams/elf64_aix.sh b/ld/emulparams/elf64_aix.sh
index 738fea94ff03..39325f577201 100644
--- a/ld/emulparams/elf64_aix.sh
+++ b/ld/emulparams/elf64_aix.sh
@@ -5,7 +5,7 @@ TEMPLATE_NAME=elf32
OUTPUT_FORMAT="elf64-ia64-aix-little"
ARCH=ia64
MACHINE=
-MAXPAGESIZE=0x10000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
TEXT_START_ADDR="0x10000000"
DATA_ADDR="ALIGN (0x10000000) + (. & (${MAXPAGESIZE} - 1))"
GENERATE_SHLIB_SCRIPT=yes
diff --git a/ld/emulparams/elf64_ia64.sh b/ld/emulparams/elf64_ia64.sh
index c5be56e8508f..7e5e54d391ed 100644
--- a/ld/emulparams/elf64_ia64.sh
+++ b/ld/emulparams/elf64_ia64.sh
@@ -6,12 +6,12 @@ EXTRA_EM_FILE=ia64elf
OUTPUT_FORMAT="elf64-ia64-little"
ARCH=ia64
MACHINE=
-MAXPAGESIZE=0x10000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
# FIXME: It interferes with linker relaxation. Disable it until it is
# fixed.
if test "0" = "1" -a -n "$CREATE_SHLIB"; then
# Optimize shared libraries for 16K page size
- COMMONPAGESIZE=0x4000
+ COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
fi
TEXT_START_ADDR="0x4000000000000000"
DATA_ADDR="0x6000000000000000 + (. & (${MAXPAGESIZE} - 1))"
diff --git a/ld/emulparams/elf64_s390.sh b/ld/emulparams/elf64_s390.sh
index ea75d319838b..a26bbb63e0de 100644
--- a/ld/emulparams/elf64_s390.sh
+++ b/ld/emulparams/elf64_s390.sh
@@ -2,8 +2,8 @@ SCRIPT_NAME=elf
ELFSIZE=64
OUTPUT_FORMAT="elf64-s390"
TEXT_START_ADDR=0x80000000
-MAXPAGESIZE=0x1000
-COMMONPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x80000000
ARCH="s390:64-bit"
MACHINE=
diff --git a/ld/emulparams/elf64_sparc.sh b/ld/emulparams/elf64_sparc.sh
index 0c0f5d89e3d3..cef4bff96e1b 100644
--- a/ld/emulparams/elf64_sparc.sh
+++ b/ld/emulparams/elf64_sparc.sh
@@ -2,8 +2,8 @@ SCRIPT_NAME=elf
ELFSIZE=64
TEMPLATE_NAME=elf32
OUTPUT_FORMAT="elf64-sparc"
-MAXPAGESIZE=0x100000
-COMMONPAGESIZE=0x2000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
ARCH="sparc:v9"
MACHINE=
DATA_PLT=
diff --git a/ld/emulparams/elf64_sparc_fbsd.sh b/ld/emulparams/elf64_sparc_fbsd.sh
index 232a32143b0c..21d13ab49853 100644
--- a/ld/emulparams/elf64_sparc_fbsd.sh
+++ b/ld/emulparams/elf64_sparc_fbsd.sh
@@ -1,2 +1,4 @@
. ${srcdir}/emulparams/elf64_sparc.sh
. ${srcdir}/emulparams/elf_fbsd.sh
+
+OUTPUT_FORMAT="elf64-sparc-freebsd"
diff --git a/ld/emulparams/elf64alpha.sh b/ld/emulparams/elf64alpha.sh
index 47a0bb009c77..2c3b7d4dd2b6 100644
--- a/ld/emulparams/elf64alpha.sh
+++ b/ld/emulparams/elf64alpha.sh
@@ -5,8 +5,8 @@ TEMPLATE_NAME=elf32
EXTRA_EM_FILE=alphaelf
OUTPUT_FORMAT="elf64-alpha"
TEXT_START_ADDR="0x120000000"
-MAXPAGESIZE=0x10000
-COMMONPAGESIZE=0x2000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
NONPAGED_TEXT_START_ADDR="0x120000000"
ARCH=alpha
MACHINE=
diff --git a/ld/emulparams/elf64bmip-defs.sh b/ld/emulparams/elf64bmip-defs.sh
new file mode 100644
index 000000000000..110f8929de1a
--- /dev/null
+++ b/ld/emulparams/elf64bmip-defs.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf32bmipn32-defs.sh
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+INITIAL_READONLY_SECTIONS=".MIPS.options : { *(.MIPS.options) }"
diff --git a/ld/emulparams/elf64bmip.sh b/ld/emulparams/elf64bmip.sh
index a4ce6d49519e..0df65285f5d1 100755
--- a/ld/emulparams/elf64bmip.sh
+++ b/ld/emulparams/elf64bmip.sh
@@ -1,4 +1,4 @@
-. ${srcdir}/emulparams/elf32bmipn32-defs.sh
+. ${srcdir}/emulparams/elf64bmip-defs.sh
OUTPUT_FORMAT="elf64-bigmips"
BIG_OUTPUT_FORMAT="elf64-bigmips"
LITTLE_OUTPUT_FORMAT="elf64-littlemips"
diff --git a/ld/emulparams/elf64btsmip.sh b/ld/emulparams/elf64btsmip.sh
index 23a20c7b8b02..b9e80bb17b3f 100644
--- a/ld/emulparams/elf64btsmip.sh
+++ b/ld/emulparams/elf64btsmip.sh
@@ -1,7 +1,7 @@
# If you change this file, please also look at files which source this one:
# elf64ltsmip.sh
-. ${srcdir}/emulparams/elf32bmipn32-defs.sh
+. ${srcdir}/emulparams/elf64bmip-defs.sh
OUTPUT_FORMAT="elf64-tradbigmips"
BIG_OUTPUT_FORMAT="elf64-tradbigmips"
LITTLE_OUTPUT_FORMAT="elf64-tradlittlemips"
diff --git a/ld/emulparams/elf64hppa.sh b/ld/emulparams/elf64hppa.sh
index 26c3153f069b..b0a1fdc5008a 100755
--- a/ld/emulparams/elf64hppa.sh
+++ b/ld/emulparams/elf64hppa.sh
@@ -4,7 +4,7 @@ LIB_PATH="=/usr/lib/pa20_64:=/opt/langtools/lib/pa20_64"
TEXT_START_ADDR=0x4000000000001000
DATA_ADDR=0x8000000000001000
TARGET_PAGE_SIZE=4096
-MAXPAGESIZE=4096
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
# The HP dynamic linker actually requires you set the start of text and
# data to some reasonable value. Of course nobody knows what reasoanble
diff --git a/ld/emulparams/elf64mmix.sh b/ld/emulparams/elf64mmix.sh
index 22b207fce164..7f867fb8cff4 100644
--- a/ld/emulparams/elf64mmix.sh
+++ b/ld/emulparams/elf64mmix.sh
@@ -12,11 +12,7 @@ TEXT_START_ADDR='DEFINED (__.MMIX.start..text) ? __.MMIX.start..text : 0'
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
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=mmix
MACHINE=
COMPILE_IN=yes
diff --git a/ld/emulparams/elf64ppc.sh b/ld/emulparams/elf64ppc.sh
index 8285723fba01..2fecba8c3ebe 100644
--- a/ld/emulparams/elf64ppc.sh
+++ b/ld/emulparams/elf64ppc.sh
@@ -7,8 +7,8 @@ SCRIPT_NAME=elf
OUTPUT_FORMAT="elf64-powerpc"
TEXT_START_ADDR=0x10000000
#SEGMENT_SIZE=0x10000000
-MAXPAGESIZE=0x10000
-COMMONPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
ARCH=powerpc:common64
MACHINE=
NOP=0x60000000
@@ -31,7 +31,8 @@ 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)) }"
+ .opd ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { KEEP (*(.opd)) }
+ .branch_lt ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { *(.branch_lt) }"
# Treat a host that matches the target with the possible exception of "64"
# in the name as if it were native.
diff --git a/ld/emulparams/elf_i386.sh b/ld/emulparams/elf_i386.sh
index af7010b6836e..bdeaebb30849 100644
--- a/ld/emulparams/elf_i386.sh
+++ b/ld/emulparams/elf_i386.sh
@@ -1,8 +1,8 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-i386"
TEXT_START_ADDR=0x08048000
-MAXPAGESIZE=0x1000
-COMMONPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x08048000
ARCH=i386
MACHINE=
diff --git a/ld/emulparams/elf_i386_be.sh b/ld/emulparams/elf_i386_be.sh
index 2c681b763afd..460707fc484a 100644
--- a/ld/emulparams/elf_i386_be.sh
+++ b/ld/emulparams/elf_i386_be.sh
@@ -3,7 +3,7 @@ OUTPUT_FORMAT="elf32-i386"
TEXT_START_ADDR=0x80000000
#SHLIB_TEXT_START_ADDR=0x80000000
NONPAGED_TEXT_START_ADDR=0x80000000
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=i386
MACHINE=
NOP=0x90909090
diff --git a/ld/emulparams/elf_i386_chaos.sh b/ld/emulparams/elf_i386_chaos.sh
index e018231f043e..a652913f86e5 100644
--- a/ld/emulparams/elf_i386_chaos.sh
+++ b/ld/emulparams/elf_i386_chaos.sh
@@ -1,7 +1,7 @@
SCRIPT_NAME=elf_chaos
OUTPUT_FORMAT="elf32-i386"
TEXT_START_ADDR=0x40000000
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x40000000
ARCH=i386
MACHINE=
diff --git a/ld/emulparams/elf_i386_ldso.sh b/ld/emulparams/elf_i386_ldso.sh
index a477a6932863..d62184fc9c29 100644
--- a/ld/emulparams/elf_i386_ldso.sh
+++ b/ld/emulparams/elf_i386_ldso.sh
@@ -1,7 +1,7 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-i386"
TEXT_START_ADDR=0x08048000
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x08048000
ARCH=i386
MACHINE=
diff --git a/ld/emulparams/elf_i386_vxworks.sh b/ld/emulparams/elf_i386_vxworks.sh
index 8bce8f722c0b..cb36283da4f6 100644
--- a/ld/emulparams/elf_i386_vxworks.sh
+++ b/ld/emulparams/elf_i386_vxworks.sh
@@ -1,8 +1,8 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-i386-vxworks"
TEXT_START_ADDR=0x08048000
-MAXPAGESIZE=0x1000
-COMMONPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x08048000
ARCH=i386
MACHINE=
diff --git a/ld/emulparams/elf_s390.sh b/ld/emulparams/elf_s390.sh
index 8d057dc3df14..d958504a8345 100644
--- a/ld/emulparams/elf_s390.sh
+++ b/ld/emulparams/elf_s390.sh
@@ -1,8 +1,8 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-s390"
TEXT_START_ADDR=0x00400000
-MAXPAGESIZE=0x1000
-COMMONPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x00400000
ARCH="s390:31-bit"
MACHINE=
diff --git a/ld/emulparams/elf_x86_64.sh b/ld/emulparams/elf_x86_64.sh
index 35240df04cf9..449ccc90bd8d 100644
--- a/ld/emulparams/elf_x86_64.sh
+++ b/ld/emulparams/elf_x86_64.sh
@@ -2,8 +2,8 @@ SCRIPT_NAME=elf
ELFSIZE=64
OUTPUT_FORMAT="elf64-x86-64"
TEXT_START_ADDR=0x400000
-MAXPAGESIZE=0x100000
-COMMONPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x400000
ARCH="i386:x86-64"
MACHINE=
@@ -22,12 +22,16 @@ if [ "x${host}" = "x${target}" ]; then
esac
fi
-# Linux modify the default library search path to first include
+# Linux/Solaris modify the default library search path to first include
# a 64-bit specific directory.
case "$target" in
- x86_64*-linux*)
+ x86_64*-linux*|i[3-7]86-*-linux-*)
case "$EMULATION_NAME" in
*64*) LIBPATH_SUFFIX=64 ;;
esac
;;
+ *-*-solaris2*)
+ LIBPATH_SUFFIX=/amd64
+ ELF_INTERPRETER_NAME=\"/lib/amd64/ld.so.1\"
+ ;;
esac
diff --git a/ld/emulparams/elf_x86_64_fbsd.sh b/ld/emulparams/elf_x86_64_fbsd.sh
index 34258cb92899..35b6a626cd3d 100644
--- a/ld/emulparams/elf_x86_64_fbsd.sh
+++ b/ld/emulparams/elf_x86_64_fbsd.sh
@@ -1,2 +1,3 @@
. ${srcdir}/emulparams/elf_x86_64.sh
. ${srcdir}/emulparams/elf_fbsd.sh
+OUTPUT_FORMAT="elf64-x86-64-freebsd"
diff --git a/ld/emulparams/h8300.sh b/ld/emulparams/h8300.sh
index 68ecdb3be7d4..7042535b4007 100644
--- a/ld/emulparams/h8300.sh
+++ b/ld/emulparams/h8300.sh
@@ -10,7 +10,7 @@ TINY_READONLY_SECTION=".tinyrodata :
TINY_DATA_SECTION=".tinydata 0xff8000 :
{
*(.tinydata)
- _tinydata = .;
+ ${RELOCATING+ _tinydata = .; }
}"
TINY_BSS_SECTION=".tinybss : AT (_tinydata)
{
diff --git a/ld/emulparams/h8300elf.sh b/ld/emulparams/h8300elf.sh
index 67d5b20361e8..fb4db40ddcf9 100644
--- a/ld/emulparams/h8300elf.sh
+++ b/ld/emulparams/h8300elf.sh
@@ -14,12 +14,12 @@ TINY_READONLY_SECTION=".tinyrodata :
{
*(.tinyrodata)
} =0"
-TINY_DATA_SECTION=".tinydata 0xff8000 :
+TINY_DATA_SECTION=".tinydata ${RELOCATING+0xff8000} :
{
*(.tinydata)
- _tinydata = .;
+ ${RELOCATING+ _tinydata = .; }
}"
-TINY_BSS_SECTION=".tinybss : AT (_tinydata)
+TINY_BSS_SECTION=".tinybss : ${RELOCATING+AT (_tinydata)}
{
*(.tinybss)
}"
diff --git a/ld/emulparams/h8300sxelf.sh b/ld/emulparams/h8300sxelf.sh
index bac2cc3cd0e8..c0b715f0ba90 100644
--- a/ld/emulparams/h8300sxelf.sh
+++ b/ld/emulparams/h8300sxelf.sh
@@ -8,7 +8,7 @@ TINY_READONLY_SECTION=".tinyrodata :
TINY_DATA_SECTION=".tinydata 0xff8000 :
{
*(.tinydata)
- _tinydata = .;
+ ${RELOCATING+ _tinydata = .; }
}"
TINY_BSS_SECTION=".tinybss : AT (_tinydata)
{
diff --git a/ld/emulparams/hppa64linux.sh b/ld/emulparams/hppa64linux.sh
index aaf8c7251f5a..1af8e37d3767 100644
--- a/ld/emulparams/hppa64linux.sh
+++ b/ld/emulparams/hppa64linux.sh
@@ -7,7 +7,7 @@ ELFSIZE=64
OUTPUT_FORMAT="elf64-hppa-linux"
TEXT_START_ADDR=0x10000
TARGET_PAGE_SIZE=0x10000
-MAXPAGESIZE=0x10000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=hppa
MACHINE=hppa2.0w
ENTRY="main"
@@ -28,7 +28,7 @@ OTHER_READWRITE_SECTIONS="
.dlt ${RELOCATING-0} : { *(.dlt) }"
# The PA64 ELF port has an additional huge bss section.
-LARGE_SECTIONS=".hbss ${RELOCATING-0} : { *(.hbss) }"
+OTHER_BSS_SECTIONS=".hbss ${RELOCATING-0} : { *(.hbss) }"
#OTHER_SYMBOLS='PROVIDE (__TLS_SIZE = SIZEOF (.tbss));'
OTHER_SYMBOLS='
diff --git a/ld/emulparams/hppalinux.sh b/ld/emulparams/hppalinux.sh
index 89a253f2e0a1..4c4f94334bad 100644
--- a/ld/emulparams/hppalinux.sh
+++ b/ld/emulparams/hppalinux.sh
@@ -6,7 +6,7 @@ ELFSIZE=32
OUTPUT_FORMAT="elf32-hppa-linux"
TEXT_START_ADDR=0x10000
TARGET_PAGE_SIZE=0x10000
-MAXPAGESIZE=0x10000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=hppa
MACHINE=hppa1.1 # We use 1.1 specific features.
NOP=0x08000240
diff --git a/ld/emulparams/hppaobsd.sh b/ld/emulparams/hppaobsd.sh
index 0227dc5c3351..0d3bf949423c 100644
--- a/ld/emulparams/hppaobsd.sh
+++ b/ld/emulparams/hppaobsd.sh
@@ -3,4 +3,4 @@
OUTPUT_FORMAT="elf32-hppa"
TEXT_START_ADDR=0x1000
TARGET_PAGE_SIZE=0x1000
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
diff --git a/ld/emulparams/i386lynx.sh b/ld/emulparams/i386lynx.sh
index 3235ebea01a6..18e0860c0f51 100644
--- a/ld/emulparams/i386lynx.sh
+++ b/ld/emulparams/i386lynx.sh
@@ -4,7 +4,7 @@ ENTRY=_main
TEXT_BASE=0x0
DYN_TEXT_BASE=0x00400000
TEXT_START_ADDR="(DEFINED(_DYNAMIC) ? ${DYN_TEXT_BASE} : ${TEXT_BASE})"
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x1000
ARCH=i386
MACHINE=
diff --git a/ld/emulparams/i386moss.sh b/ld/emulparams/i386moss.sh
index eece4473976c..659c7f2c9d55 100644
--- a/ld/emulparams/i386moss.sh
+++ b/ld/emulparams/i386moss.sh
@@ -1,7 +1,7 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-i386"
TEXT_START_ADDR=0x00002000
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x00002000
ARCH=i386
MACHINE=
diff --git a/ld/emulparams/i386nto.sh b/ld/emulparams/i386nto.sh
index e4872edec511..256d4c8d1418 100644
--- a/ld/emulparams/i386nto.sh
+++ b/ld/emulparams/i386nto.sh
@@ -2,7 +2,7 @@ SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-i386"
TEXT_START_ADDR=0x08048000
TEXT_START_SYMBOLS='_btext = .;'
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x08048000
#SHLIB_TEXT_START_ADDR=0xb0300000
ARCH=i386
diff --git a/ld/emulparams/i386nw.sh b/ld/emulparams/i386nw.sh
index 621b4755b8bc..dd5558cf0008 100644
--- a/ld/emulparams/i386nw.sh
+++ b/ld/emulparams/i386nw.sh
@@ -1,7 +1,7 @@
SCRIPT_NAME=nw
OUTPUT_FORMAT="elf32-i386"
TEXT_START_ADDR=0x08000000
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x08000000
ARCH=i386
NOP=0x90909090
diff --git a/ld/emulparams/i386pep.sh b/ld/emulparams/i386pep.sh
new file mode 100644
index 000000000000..d20f3aba5f05
--- /dev/null
+++ b/ld/emulparams/i386pep.sh
@@ -0,0 +1,9 @@
+ARCH="i386:x86-64"
+SCRIPT_NAME=pep
+OUTPUT_FORMAT="pei-x86-64"
+RELOCATEABLE_OUTPUT_FORMAT="pe-x86-64"
+TEMPLATE_NAME=pep
+ENTRY="_mainCRTStartup"
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/ld/emulparams/m32relf_linux.sh b/ld/emulparams/m32relf_linux.sh
index be2ad23240ca..9a4ee9778e94 100644
--- a/ld/emulparams/m32relf_linux.sh
+++ b/ld/emulparams/m32relf_linux.sh
@@ -5,7 +5,7 @@ OUTPUT_FORMAT="elf32-m32r-linux"
TEXT_START_ADDR=0x1000
ARCH=m32r
MACHINE=
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
# Hmmm, there's got to be a better way. This sets the stack to the
# top of simulator memory (32MB).
diff --git a/ld/emulparams/m68kelf.sh b/ld/emulparams/m68kelf.sh
index b784a3ca54a3..4771f6b50faf 100644
--- a/ld/emulparams/m68kelf.sh
+++ b/ld/emulparams/m68kelf.sh
@@ -1,7 +1,7 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-m68k"
TEXT_START_ADDR=0x80000000
-MAXPAGESIZE=0x2000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
NONPAGED_TEXT_START_ADDR=${TEXT_START_ADDR}
ARCH=m68k
MACHINE=
diff --git a/ld/emulparams/m68kpsos.sh b/ld/emulparams/m68kpsos.sh
index 34eb8ca549ce..22d1598e0ec6 100644
--- a/ld/emulparams/m68kpsos.sh
+++ b/ld/emulparams/m68kpsos.sh
@@ -1,6 +1,6 @@
SCRIPT_NAME=psos
OUTPUT_FORMAT="elf32-m68k"
TEXT_START_ADDR=0x20000
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=m68k
TEMPLATE_NAME=elf32
diff --git a/ld/emulparams/mn10200.sh b/ld/emulparams/mn10200.sh
index f96224b04923..74f48d0c4867 100644
--- a/ld/emulparams/mn10200.sh
+++ b/ld/emulparams/mn10200.sh
@@ -2,6 +2,8 @@
# mn10300.sh
SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-mn10200"
TEXT_START_ADDR=0x0
ARCH=mn10200
diff --git a/ld/emulparams/mn10300.sh b/ld/emulparams/mn10300.sh
index 23bbda440d96..121987c29eeb 100644
--- a/ld/emulparams/mn10300.sh
+++ b/ld/emulparams/mn10300.sh
@@ -2,4 +2,5 @@
OUTPUT_FORMAT="elf32-mn10300"
ARCH=mn10300
TEMPLATE_NAME=elf32
+unset EXTRA_EM_FILE
GENERATE_SHLIB_SCRIPT=yes
diff --git a/ld/emulparams/msp430all.sh b/ld/emulparams/msp430all.sh
index baee02eefd57..57d21c2d409c 100644
--- a/ld/emulparams/msp430all.sh
+++ b/ld/emulparams/msp430all.sh
@@ -4,1005 +4,550 @@
MSP430_NAME=${EMULATION_NAME}
-if [ "${MSP430_NAME}" = "msp430x110" ] ; then
-ARCH=msp:11
-MACHINE=
SCRIPT_NAME=elf32msp430
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-msp430"
+MACHINE=
MAXPAGESIZE=1
EMBEDDED=yes
-TEMPLATE_NAME=generic
+if [ "${MSP430_NAME}" = "msp430x110" ] ; then
+ARCH=msp:11
ROM_START=0xfc00
ROM_SIZE=0x3e0
RAM_START=0x0200
RAM_SIZE=128
-
STACK=0x280
fi
if [ "${MSP430_NAME}" = "msp430x1101" ] ; then
ARCH=msp:110
-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/ld/emulparams/or32.sh b/ld/emulparams/or32.sh
index 0717eb7e06cb..0e22e45d8c3f 100644
--- a/ld/emulparams/or32.sh
+++ b/ld/emulparams/or32.sh
@@ -1,6 +1,5 @@
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/ld/emulparams/or32elf.sh b/ld/emulparams/or32elf.sh
index 04d163038e59..5cb3208ccce7 100644
--- a/ld/emulparams/or32elf.sh
+++ b/ld/emulparams/or32elf.sh
@@ -1,6 +1,8 @@
SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-or32"
TEXT_START_ADDR=0x1000000
TARGET_PAGE_SIZE=0x1000000
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=or32
diff --git a/ld/emulparams/pjelf.sh b/ld/emulparams/pjelf.sh
index acfd2b346c5c..e4d2fa59f077 100644
--- a/ld/emulparams/pjelf.sh
+++ b/ld/emulparams/pjelf.sh
@@ -1,5 +1,7 @@
SCRIPT_NAME=elf
+TEMPLATE_NAME=generic
+EXTRA_EM_FILE=genelf
OUTPUT_FORMAT="elf32-pj"
TEXT_START_ADDR=0x1000000
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=pj
diff --git a/ld/emulparams/pjlelf.sh b/ld/emulparams/pjlelf.sh
index 35958fdea6a1..88c2b646044c 100644
--- a/ld/emulparams/pjlelf.sh
+++ b/ld/emulparams/pjlelf.sh
@@ -1,5 +1,2 @@
-SCRIPT_NAME=elf
+. ${srcdir}/emulparams/pjelf.sh
OUTPUT_FORMAT="elf32-pjl"
-TEXT_START_ADDR=0x1000000
-MAXPAGESIZE=0x1000
-ARCH=pj
diff --git a/ld/emulparams/ppclynx.sh b/ld/emulparams/ppclynx.sh
index 2534687114ed..5c5769ea7965 100644
--- a/ld/emulparams/ppclynx.sh
+++ b/ld/emulparams/ppclynx.sh
@@ -3,7 +3,7 @@ OUTPUT_FORMAT="elf32-powerpc"
TEXT_BASE=0x00002000
DYN_TEXT_BASE=0x00400000
TEXT_START_ADDR="(DEFINED(_DYNAMIC) ? ${DYN_TEXT_BASE} : ${TEXT_BASE})"
-MAXPAGESIZE=0x10000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x1000
ARCH=powerpc
MACHINE=
diff --git a/ld/emulparams/ppcnw.sh b/ld/emulparams/ppcnw.sh
index c3ead43675b8..14b2745caad0 100644
--- a/ld/emulparams/ppcnw.sh
+++ b/ld/emulparams/ppcnw.sh
@@ -2,6 +2,6 @@ SCRIPT_NAME=nw
OUTPUT_FORMAT="elf32-powerpc"
TEXT_START_ADDR=0x0400000
DATA_ADDR=0x10000000
-MAXPAGESIZE=0x40000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
NONPAGED_TEXT_START_ADDR=0x0400000
ARCH=powerpc
diff --git a/ld/emulparams/scoreelf.sh b/ld/emulparams/scoreelf.sh
new file mode 100644
index 000000000000..e138de2b30e4
--- /dev/null
+++ b/ld/emulparams/scoreelf.sh
@@ -0,0 +1,31 @@
+MACHINE=
+SCRIPT_NAME=elf
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf32-bigscore"
+BIG_OUTPUT_FORMAT="elf32-bigscore"
+LITTLE_OUTPUT_FORMAT="elf32-littlescore"
+GROUP="-lm -lc -lglsim -lgcc -lstdc++"
+
+TEXT_START_ADDR=0x00000000
+MAXPAGESIZE=256
+NONPAGED_TEXT_START_ADDR=0x0400000
+SHLIB_TEXT_START_ADDR=0x5ffe0000
+OTHER_GOT_SYMBOLS='
+ _gp = ALIGN(16) + 0x3ff0;
+'
+
+OTHER_BSS_START_SYMBOLS='_bss_start__ = . + ALIGN(4);'
+OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;'
+DATA_START_SYMBOLS='_fdata = . ;'
+SDATA_START_SYMBOLS='_sdata_begin = . ;'
+OTHER_BSS_SYMBOLS='
+ _bss_start = ALIGN(4) ;
+'
+# This sets the stack to the top of the simulator memory (2^19 bytes).
+STACK_ADDR=0x8000000
+
+ARCH=score
+MACHINE=
+ENTRY=_start
+EMBEDDED=yes
+GENERATE_SHLIB_SCRIPT=yes
diff --git a/ld/emulparams/shelf32.sh b/ld/emulparams/shelf32.sh
index 6582b02839a2..c72fadb8fa1a 100644
--- a/ld/emulparams/shelf32.sh
+++ b/ld/emulparams/shelf32.sh
@@ -40,7 +40,7 @@ DTOR_END='___dtors_end = .;'
# 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)} :
+ .stack ${RELOCATING-0}${RELOCATING+(DEFINED(_stack) ? _stack : ALIGN (0x40000) + 0x80000)} :
{
${RELOCATING+_stack = .;}
*(.stack)
diff --git a/ld/emulparams/shelf32_nbsd.sh b/ld/emulparams/shelf32_nbsd.sh
index 14965ef95b5e..63aee8f40842 100644
--- a/ld/emulparams/shelf32_nbsd.sh
+++ b/ld/emulparams/shelf32_nbsd.sh
@@ -5,7 +5,7 @@
OUTPUT_FORMAT="elf32-sh64-nbsd"
TEXT_START_ADDR=0x400000
-MAXPAGESIZE=0x10000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ENTRY=__start
diff --git a/ld/emulparams/shelf64.sh b/ld/emulparams/shelf64.sh
index eb1f6c76ecd0..5037f350187c 100644
--- a/ld/emulparams/shelf64.sh
+++ b/ld/emulparams/shelf64.sh
@@ -7,7 +7,7 @@ EXTRA_EM_FILE=
# We do not need .cranges
test -z "$CREATE_SHLIB" && OTHER_SECTIONS="
- .stack ${RELOCATING-0}${RELOCATING+(DEFINED(_stack) ? _stack : ALIGN (0x40000) + 0x40000)} :
+ .stack ${RELOCATING-0}${RELOCATING+(DEFINED(_stack) ? _stack : ALIGN (0x40000) + 0x80000)} :
{
${RELOCATING+_stack = .;}
*(.stack)
diff --git a/ld/emulparams/shelf_nbsd.sh b/ld/emulparams/shelf_nbsd.sh
index 3fcd49254925..ad295e96845a 100644
--- a/ld/emulparams/shelf_nbsd.sh
+++ b/ld/emulparams/shelf_nbsd.sh
@@ -5,7 +5,7 @@
OUTPUT_FORMAT="elf32-sh-nbsd"
TEXT_START_ADDR=0x400000
-MAXPAGESIZE=0x10000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
DATA_START_SYMBOLS='__data_start = . ;';
diff --git a/ld/emulparams/shelf_nto.sh b/ld/emulparams/shelf_nto.sh
index f2252fb845f3..70a0610ad7eb 100644
--- a/ld/emulparams/shelf_nto.sh
+++ b/ld/emulparams/shelf_nto.sh
@@ -1,7 +1,7 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-sh"
TEXT_START_ADDR=0x08040000
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=sh
MACHINE=
TEMPLATE_NAME=elf32
diff --git a/ld/emulparams/shelf_uclinux.sh b/ld/emulparams/shelf_uclinux.sh
new file mode 100644
index 000000000000..2af5da44b8f7
--- /dev/null
+++ b/ld/emulparams/shelf_uclinux.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/shelf.sh
+
+# We do not want a .stack section
+OTHER_SECTIONS=""
diff --git a/ld/emulparams/shelf_vxworks.sh b/ld/emulparams/shelf_vxworks.sh
new file mode 100644
index 000000000000..a87d52947628
--- /dev/null
+++ b/ld/emulparams/shelf_vxworks.sh
@@ -0,0 +1,19 @@
+# If you change this file, please also look at files which source this one:
+# shlelf_vxworks.sh
+
+SCRIPT_NAME=elf
+BIG_OUTPUT_FORMAT="elf32-sh-vxworks"
+LITTLE_OUTPUT_FORMAT="elf32-shl-vxworks"
+OUTPUT_FORMAT="$BIG_OUTPUT_FORMAT"
+TEXT_START_ADDR=0x1000
+MAXPAGESIZE='CONSTANT (MAXPAGESIZE)'
+ARCH=sh
+MACHINE=
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+ENTRY=__start
+SYMPREFIX=_
+GOT=".got ${RELOCATING-0} : {
+ PROVIDE(__GLOBAL_OFFSET_TABLE_ = .);
+ *(.got.plt) *(.got) }"
+. ${srcdir}/emulparams/vxworks.sh
diff --git a/ld/emulparams/shlelf32_linux.sh b/ld/emulparams/shlelf32_linux.sh
index 59d4179d3124..ba32e79e9e55 100644
--- a/ld/emulparams/shlelf32_linux.sh
+++ b/ld/emulparams/shlelf32_linux.sh
@@ -4,8 +4,8 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-sh64-linux"
TEXT_START_ADDR=0x400000
-MAXPAGESIZE=0x10000
-COMMONPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
ARCH=sh
MACHINE=sh5
ALIGNMENT=8
diff --git a/ld/emulparams/shlelf_linux.sh b/ld/emulparams/shlelf_linux.sh
index 528b7257f3b5..b06df2632075 100644
--- a/ld/emulparams/shlelf_linux.sh
+++ b/ld/emulparams/shlelf_linux.sh
@@ -4,8 +4,8 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-sh-linux"
TEXT_START_ADDR=0x400000
-MAXPAGESIZE=0x10000
-COMMONPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
ARCH=sh
MACHINE=
TEMPLATE_NAME=elf32
diff --git a/ld/emulparams/shlelf_nto.sh b/ld/emulparams/shlelf_nto.sh
index d23e69a6c47a..c6c04f6b29b5 100644
--- a/ld/emulparams/shlelf_nto.sh
+++ b/ld/emulparams/shlelf_nto.sh
@@ -1,7 +1,7 @@
SCRIPT_NAME=elf
OUTPUT_FORMAT="elf32-shl"
TEXT_START_ADDR=0x08040000
-MAXPAGESIZE=0x1000
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=sh
MACHINE=
TEMPLATE_NAME=elf32
diff --git a/ld/emulparams/shlelf_vxworks.sh b/ld/emulparams/shlelf_vxworks.sh
new file mode 100644
index 000000000000..0a055b1bf53c
--- /dev/null
+++ b/ld/emulparams/shlelf_vxworks.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/shelf_vxworks.sh
+OUTPUT_FORMAT="$LITTLE_OUTPUT_FORMAT"
diff --git a/ld/emulparams/vxworks.sh b/ld/emulparams/vxworks.sh
index 4382859e645c..6e399ea87ac6 100644
--- a/ld/emulparams/vxworks.sh
+++ b/ld/emulparams/vxworks.sh
@@ -1,5 +1,7 @@
# If you change this file, please also look at files which source this one:
-# elf_i386_vxworks.sh elf32ppcvxworks.sh elf32ebmipvxworks.sh
+# armelf_vxworks.sh elf32ebmipvxworks.sh elf32elmipvxworks.sh
+# elf_i386_vxworks.sh elf32ppcvxworks.sh elf32_sparc_vxworks.sh
+# shelf_vxworks.sh
# The Diab tools use a different init/fini convention. Initialization code
# is place in sections named ".init$NN". These sections are then concatenated
@@ -17,12 +19,12 @@ FINI_START='_fini = .;
KEEP (*(.fini$0[1-9]));
KEEP (*(.fini$[1-8][0-9]));
KEEP (*(.fini$9[0-8]));'
-FINI_END='KEEP (*(.fini$99));
- PROVIDE (_etext = .);'
+FINI_END="KEEP (*(.fini\$99));
+ PROVIDE (${SYMPREFIX}_etext = .);"
ETEXT_NAME=etext_unrelocated
-OTHER_SYMBOLS="PROVIDE (_ehdr = ${TEXT_START_ADDR});"
-DATA_END_SYMBOLS=".edata : { PROVIDE (_edata = .); }"
+OTHER_END_SYMBOLS="PROVIDE (${SYMPREFIX}_ehdr = ${TEXT_START_ADDR});"
+DATA_END_SYMBOLS=".edata : { PROVIDE (${SYMPREFIX}_edata = .); }"
VXWORKS_BASE_EM_FILE=$EXTRA_EM_FILE
EXTRA_EM_FILE=vxworks
unset EMBEDDED
diff --git a/ld/emulparams/xtensa-config.sh b/ld/emulparams/xtensa-config.sh
deleted file mode 100644
index 5a5e504edde2..000000000000
--- a/ld/emulparams/xtensa-config.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-# Xtensa configuration settings.
-
-MAXPAGESIZE=0x1000
diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em
index d525edd89045..c2617f2ce412 100644
--- a/ld/emultempl/aix.em
+++ b/ld/emultempl/aix.em
@@ -10,7 +10,7 @@ cat >e${EMULATION_NAME}.c <<EOF
/* AIX emulation code for ${EMULATION_NAME}
Copyright 1991, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005
+ 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Steve Chamberlain <sac@cygnus.com>
AIX support by Ian Lance Taylor <ian@cygnus.com>
@@ -34,8 +34,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define TARGET_IS_${EMULATION_NAME}
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libiberty.h"
#include "safe-ctype.h"
#include "getopt.h"
@@ -268,7 +268,7 @@ gld${EMULATION_NAME}_parse_args (int argc, char **argv)
if (indx == 0)
indx = 1;
- if (indx < argc && strncmp (argv[indx], "-b", 2) == 0)
+ if (indx < argc && CONST_STRNEQ (argv[indx], "-b"))
{
char *s;
@@ -651,18 +651,52 @@ gld${EMULATION_NAME}_before_allocation (void)
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)
+ /* PR ld/4023: Strip sysroot prefix from any paths
+ being inserted into the output binary's DT_RPATH. */
+ if (ld_sysroot != NULL
+ && * ld_sysroot != 0)
{
- size_t nlen;
+ const char * name = search_head->name;
+ size_t ld_sysroot_len = strlen (ld_sysroot);
+
+ if (strncmp (name, ld_sysroot, ld_sysroot_len) == 0)
+ name += ld_sysroot_len;
+
+ len = strlen (name);
+ libpath = xmalloc (len + 1);
+ strcpy (libpath, name);
- nlen = strlen (search->name);
- libpath = xrealloc (libpath, len + nlen + 2);
- libpath[len] = ':';
- strcpy (libpath + len + 1, search->name);
- len += nlen + 1;
+ for (search = search_head->next; search != NULL; search = search->next)
+ {
+ size_t nlen;
+
+ name = search->name;
+ if (strncmp (name, ld_sysroot, ld_sysroot_len) == 0)
+ name += ld_sysroot_len;
+
+ nlen = strlen (name);
+ libpath = xrealloc (libpath, len + nlen + 2);
+ libpath[len] = ':';
+ strcpy (libpath + len + 1, name);
+ len += nlen + 1;
+ }
+ }
+ else
+ {
+ len = strlen (search_head->name);
+ libpath = xmalloc (len + 1);
+ strcpy (libpath, search_head->name);
+
+ for (search = search_head->next; search != NULL; search = search->next)
+ {
+ size_t nlen;
+
+ nlen = strlen (search->name);
+ libpath = xrealloc (libpath, len + nlen + 2);
+ libpath[len] = ':';
+ strcpy (libpath + len + 1, search->name);
+ len += nlen + 1;
+ }
}
}
diff --git a/ld/emultempl/armcoff.em b/ld/emultempl/armcoff.em
index d5fd67d8ce2e..a2e2c6c2d07a 100644
--- a/ld/emultempl/armcoff.em
+++ b/ld/emultempl/armcoff.em
@@ -5,7 +5,7 @@ cat >e${EMULATION_NAME}.c <<EOF
/* 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.
+ 2004, 2005, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain steve@cygnus.com
This file is part of GLD, the Gnu Linker.
@@ -26,8 +26,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define TARGET_IS_${EMULATION_NAME}
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "getopt.h"
@@ -154,45 +154,46 @@ gld${EMULATION_NAME}_after_open (void)
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)
+ if (thumb_entry_symbol != 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;
+ struct bfd_link_hash_entry * h;
+
+ h = bfd_link_hash_lookup (link_info.hash, thumb_entry_symbol,
+ FALSE, FALSE, TRUE);
+
+ if (h != (struct bfd_link_hash_entry *) NULL
+ && (h->type == bfd_link_hash_defined
+ || h->type == bfd_link_hash_defweak)
+ && h->u.def.section->output_section != NULL)
+ {
+ static char buffer[32];
+ bfd_vma val;
+
+ /* Special procesing is required for a Thumb entry symbol. The
+ bottom bit of its address must be set. */
+ val = (h->u.def.value
+ + bfd_get_section_vma (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);
}
- else
- einfo (_("%P: warning: connot find thumb start symbol %s\n"), thumb_entry_symbol);
finish_default ();
}
diff --git a/ld/emultempl/armelf.em b/ld/emultempl/armelf.em
index bd74ab5705bf..e9f663f494a5 100644
--- a/ld/emultempl/armelf.em
+++ b/ld/emultempl/armelf.em
@@ -35,6 +35,9 @@ static int target1_is_rel = 0${TARGET1_IS_REL};
static char *target2_type = "${TARGET2_TYPE}";
static int fix_v4bx = 0;
static int use_blx = 0;
+static bfd_arm_vfp11_fix vfp11_denorm_fix = BFD_ARM_VFP11_FIX_DEFAULT;
+static int no_enum_size_warning = 0;
+static int pic_veneer = 0;
static void
gld${EMULATION_NAME}_before_parse (void)
@@ -103,9 +106,6 @@ 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. */
@@ -124,27 +124,55 @@ arm_elf_before_allocation (void)
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))
- {
+ bfd_elf32_arm_set_byteswap_code (&link_info, byteswap_code);
+
+ /* Choose type of VFP11 erratum fix, or warn if specified fix is unnecessary
+ due to architecture version. */
+ bfd_elf32_arm_set_vfp11_fix (output_bfd, &link_info);
+
+ /* We should be able to set the size of the interworking stub section. We
+ can't do it until later if we have dynamic sections, though. */
+ if (! elf_hash_table (&link_info)->dynamic_sections_created)
+ {
+ /* Here we rummage through the found bfds to collect glue information. */
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ /* Initialise mapping tables for code/data. */
+ bfd_elf32_arm_init_maps (is->the_bfd);
+
+ if (!bfd_elf32_arm_process_before_allocation (is->the_bfd,
+ &link_info)
+ || !bfd_elf32_arm_vfp11_erratum_scan (is->the_bfd, &link_info))
/* xgettext:c-format */
einfo (_("Errors encountered processing file %s"), is->filename);
- }
- }
- }
+ }
+ }
+
+ /* Call the standard elf routine. */
+ gld${EMULATION_NAME}_before_allocation ();
/* We have seen it all. Allocate it, and carry on. */
bfd_elf32_arm_allocate_interworking_sections (& link_info);
}
static void
+arm_elf_after_allocation (void)
+{
+ /* Call the standard elf routine. */
+ after_allocation_default ();
+
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ /* Figure out where VFP11 erratum veneers (and the labels returning
+ from same) have been placed. */
+ bfd_elf32_arm_vfp11_fix_veneer_locations (is->the_bfd, &link_info);
+ }
+ }
+}
+
+static void
arm_elf_finish (void)
{
struct bfd_link_hash_entry * h;
@@ -207,13 +235,15 @@ arm_elf_finish (void)
thumb_entry_symbol);
}
-/* This is a convenitent point to tell BFD about target specific flags.
+/* This is a convenient point to tell BFD about target specific flags.
After the output has been created, but before inputs are read. */
static void
arm_elf_create_output_section_statements (void)
{
- bfd_elf32_arm_set_target_relocs (&link_info, target1_is_rel, target2_type,
- fix_v4bx, use_blx);
+ bfd_elf32_arm_set_target_relocs (output_bfd, &link_info, target1_is_rel,
+ target2_type, fix_v4bx, use_blx,
+ vfp11_denorm_fix, no_enum_size_warning,
+ pic_veneer);
}
EOF
@@ -229,6 +259,9 @@ PARSE_AND_LIST_PROLOGUE='
#define OPTION_TARGET2 305
#define OPTION_FIX_V4BX 306
#define OPTION_USE_BLX 307
+#define OPTION_VFP11_DENORM_FIX 308
+#define OPTION_NO_ENUM_SIZE_WARNING 309
+#define OPTION_PIC_VENEER 310
'
PARSE_AND_LIST_SHORTOPTS=p
@@ -242,6 +275,9 @@ PARSE_AND_LIST_LONGOPTS='
{ "target2", required_argument, NULL, OPTION_TARGET2},
{ "fix-v4bx", no_argument, NULL, OPTION_FIX_V4BX},
{ "use-blx", no_argument, NULL, OPTION_USE_BLX},
+ { "vfp11-denorm-fix", required_argument, NULL, OPTION_VFP11_DENORM_FIX},
+ { "no-enum-size-warning", no_argument, NULL, OPTION_NO_ENUM_SIZE_WARNING},
+ { "pic-veneer", no_argument, NULL, OPTION_PIC_VENEER},
'
PARSE_AND_LIST_OPTIONS='
@@ -252,6 +288,9 @@ PARSE_AND_LIST_OPTIONS='
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"));
+ fprintf (file, _(" --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n"));
+ fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible enum sizes\n"));
+ fprintf (file, _(" --pic-veneer Always generate PIC interworking veneers\n"));
'
PARSE_AND_LIST_ARGS_CASES='
@@ -286,12 +325,32 @@ PARSE_AND_LIST_ARGS_CASES='
case OPTION_USE_BLX:
use_blx = 1;
break;
+
+ case OPTION_VFP11_DENORM_FIX:
+ if (strcmp (optarg, "none") == 0)
+ vfp11_denorm_fix = BFD_ARM_VFP11_FIX_NONE;
+ else if (strcmp (optarg, "scalar") == 0)
+ vfp11_denorm_fix = BFD_ARM_VFP11_FIX_SCALAR;
+ else if (strcmp (optarg, "vector") == 0)
+ vfp11_denorm_fix = BFD_ARM_VFP11_FIX_VECTOR;
+ else
+ einfo (_("Unrecognized VFP11 fix type '\''%s'\''.\n"), optarg);
+ break;
+
+ case OPTION_NO_ENUM_SIZE_WARNING:
+ no_enum_size_warning = 1;
+ break;
+
+ case OPTION_PIC_VENEER:
+ pic_veneer = 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_AFTER_ALLOCATION=arm_elf_after_allocation
LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=arm_elf_create_output_section_statements
# Replace the elf before_parse function with our own.
diff --git a/ld/emultempl/avrelf.em b/ld/emultempl/avrelf.em
new file mode 100644
index 000000000000..1f5ab5cf507f
--- /dev/null
+++ b/ld/emultempl/avrelf.em
@@ -0,0 +1,269 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 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 avr-elf
+# specific routines. It is used to generate the trampolines for the avr6
+# family devices where one needs to address the issue that it is not possible
+# to reach the whole program memory by using 16 bit pointers.
+
+cat >>e${EMULATION_NAME}.c <<EOF
+
+#include "elf32-avr.h"
+#include "ldctor.h"
+
+/* The fake file and it's corresponding section meant to hold
+ the linker stubs if needed. */
+
+static lang_input_statement_type *stub_file;
+static asection *avr_stub_section;
+
+/* Variables set by the command-line parameters and transfered
+ to the bfd without use of global shared variables. */
+
+static bfd_boolean avr_no_stubs = FALSE;
+static bfd_boolean avr_debug_relax = FALSE;
+static bfd_boolean avr_debug_stubs = FALSE;
+static bfd_boolean avr_replace_call_ret_sequences = TRUE;
+static bfd_vma avr_pc_wrap_around = 0x10000000;
+
+/* Transfers information to the bfd frontend. */
+
+static void
+avr_elf_set_global_bfd_parameters (void)
+{
+ elf32_avr_setup_params (& link_info,
+ stub_file->the_bfd,
+ avr_stub_section,
+ avr_no_stubs,
+ avr_debug_stubs,
+ avr_debug_relax,
+ avr_pc_wrap_around,
+ avr_replace_call_ret_sequences);
+}
+
+
+/* Makes a conservative estimate of the trampoline section size that could
+ be corrected later on. */
+
+static void
+avr_elf_${EMULATION_NAME}_before_allocation (void)
+{
+ int ret;
+
+ gld${EMULATION_NAME}_before_allocation ();
+
+ /* We only need stubs for the avr6 family. */
+ if (strcmp ("${EMULATION_NAME}","avr6"))
+ avr_no_stubs = TRUE;
+
+ avr_elf_set_global_bfd_parameters ();
+
+ /* If generating a relocatable output file, then
+ we don't have to generate the trampolines. */
+ if (link_info.relocatable)
+ avr_no_stubs = TRUE;
+
+ if (avr_no_stubs)
+ return;
+
+ ret = elf32_avr_setup_section_lists (output_bfd, &link_info);
+
+ if (ret < 0)
+ einfo ("%X%P: can not setup the input section list: %E\n");
+
+ if (ret <= 0)
+ return;
+
+ /* Call into the BFD backend to do the real "stub"-work. */
+ if (! elf32_avr_size_stubs (output_bfd, &link_info, TRUE))
+ einfo ("%X%P: can not size stub section: %E\n");
+}
+
+/* This is called before the input files are opened. We create a new
+ fake input file to hold the stub section and generate the section itself. */
+
+static void
+avr_elf_create_output_section_statements (void)
+{
+ flagword flags;
+
+ stub_file = lang_add_input_file ("linker stubs",
+ lang_input_file_is_fake_enum,
+ NULL);
+
+ stub_file->the_bfd = bfd_create ("linker stubs", 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 stub BFD %E\n");
+ return;
+ }
+
+ /* Now we add the stub section. */
+
+ avr_stub_section = bfd_make_section_anyway (stub_file->the_bfd,
+ ".trampolines");
+ if (avr_stub_section == 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, avr_stub_section, flags))
+ goto err_ret;
+
+ avr_stub_section->alignment_power = 1;
+
+ ldlang_add_file (stub_file);
+
+ return;
+
+ err_ret:
+ einfo ("%X%P: can not make stub section: %E\n");
+ return;
+}
+
+/* Re-calculates the size of the stubs so that we won't waste space. */
+
+static void
+avr_elf_finish (void)
+{
+ if (!avr_no_stubs)
+ {
+ /* 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_avr_size_stubs (output_bfd, &link_info, FALSE))
+ {
+ einfo ("%X%P: can not size stub section: %E\n");
+ return;
+ }
+
+ if (!elf32_avr_build_stubs (&link_info))
+ einfo ("%X%P: can not build stubs: %E\n");
+ }
+ }
+
+ gld${EMULATION_NAME}_finish ();
+}
+
+
+EOF
+
+
+PARSE_AND_LIST_PROLOGUE='
+
+#define OPTION_NO_CALL_RET_REPLACEMENT 301
+#define OPTION_PMEM_WRAP_AROUND 302
+#define OPTION_NO_STUBS 303
+#define OPTION_DEBUG_STUBS 304
+#define OPTION_DEBUG_RELAX 305
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "no-call-ret-replacement", no_argument,
+ NULL, OPTION_NO_CALL_RET_REPLACEMENT},
+ { "pmem-wrap-around", required_argument,
+ NULL, OPTION_PMEM_WRAP_AROUND},
+ { "no-stubs", no_argument,
+ NULL, OPTION_NO_STUBS},
+ { "debug-stubs", no_argument,
+ NULL, OPTION_DEBUG_STUBS},
+ { "debug-relax", no_argument,
+ NULL, OPTION_DEBUG_RELAX},
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _(" --pmem-wrap-around=<val> "
+ "Make the linker relaxation machine assume that a\n"
+ " "
+ "program counter wrap-around occures at address\n"
+ " "
+ "<val>. Supported values are 8k, 16k, 32k and 64k.\n"));
+ fprintf (file, _(" --no-call-ret-replacement "
+ "The relaxation machine normally will\n"
+ " "
+ "substitute two immediately following call/ret\n"
+ " "
+ "instructions by a single jump instruction.\n"
+ " "
+ "This option disables this optimization.\n"));
+ fprintf (file, _(" --no-stubs "
+ "If the linker detects to attempt to access\n"
+ " "
+ "an instruction beyond 128k by a reloc that\n"
+ " "
+ "is limited to 128k max, it inserts a jump\n"
+ " "
+ "stub. You can de-active this with this switch.\n"));
+ fprintf (file, _(" --debug-stubs Used for debugging avr-ld.\n"));
+ fprintf (file, _(" --debug-relax Used for debugging avr-ld.\n"));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+
+ case OPTION_PMEM_WRAP_AROUND:
+ {
+ /* This variable is defined in the bfd library. */
+ if ((!strcmp (optarg,"32k")) || (!strcmp (optarg,"32K")))
+ avr_pc_wrap_around = 32768;
+ else if ((!strcmp (optarg,"8k")) || (!strcmp (optarg,"8K")))
+ avr_pc_wrap_around = 8192;
+ else if ((!strcmp (optarg,"16k")) || (!strcmp (optarg,"16K")))
+ avr_pc_wrap_around = 16384;
+ else if ((!strcmp (optarg,"64k")) || (!strcmp (optarg,"64K")))
+ avr_pc_wrap_around = 0x10000;
+ else
+ return FALSE;
+ }
+ break;
+
+ case OPTION_DEBUG_STUBS:
+ avr_debug_stubs = TRUE;
+ break;
+
+ case OPTION_DEBUG_RELAX:
+ avr_debug_relax = TRUE;
+ break;
+
+ case OPTION_NO_STUBS:
+ avr_no_stubs = TRUE;
+ break;
+
+ case OPTION_NO_CALL_RET_REPLACEMENT:
+ {
+ /* This variable is defined in the bfd library. */
+ avr_replace_call_ret_sequences = FALSE;
+ }
+ break;
+'
+
+#
+# Put these extra avr-elf routines in ld_${EMULATION_NAME}_emulation
+#
+LDEMUL_BEFORE_ALLOCATION=avr_elf_${EMULATION_NAME}_before_allocation
+LDEMUL_FINISH=avr_elf_finish
+LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=avr_elf_create_output_section_statements
diff --git a/ld/emultempl/beos.em b/ld/emultempl/beos.em
index 220ba5900a3f..9f42a4f18157 100644
--- a/ld/emultempl/beos.em
+++ b/ld/emultempl/beos.em
@@ -8,7 +8,7 @@ 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.
+ 2005, 2006, 2007 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
@@ -31,8 +31,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
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 "bfd.h"
#include "bfdlink.h"
#include "getopt.h"
#include "libiberty.h"
@@ -452,16 +452,15 @@ sort_by_section_name (const void *a, const void *b)
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)
+ (*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))
+ if ((CONST_STRNEQ ((*ra)->input_section.section->name, ".stab"))
+ && (! CONST_STRNEQ ((*rb)->input_section.section->name, ".stab")))
return 1;
- return i;
}
return i;
}
@@ -534,7 +533,7 @@ sort_sections (lang_statement_union_type *s)
{
/* Is this the .idata section? */
if (sec->spec.name != NULL
- && strncmp (sec->spec.name, ".idata", 6) == 0)
+ && CONST_STRNEQ (sec->spec.name, ".idata"))
{
/* Sort the children. We want to sort any objects in
the same archive. In order to handle the case of
diff --git a/ld/emultempl/cr16elf.em b/ld/emultempl/cr16elf.em
new file mode 100644
index 000000000000..0881634bb018
--- /dev/null
+++ b/ld/emultempl/cr16elf.em
@@ -0,0 +1,92 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2007 Free Software Foundation, Inc.
+# Contributed by M R Swami Reddy <MR.Swami.Reddy@nsc.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 is sourced from elf32.em, and defines extra cr16-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
+cr16elf_after_parse (void)
+{
+ /* Always behave as if called with --sort-common command line
+ option.
+ This is to emulate the CRTools' method of keeping variables
+ of different alignment in separate sections. */
+ config.sort_common = TRUE;
+
+ /* Don't create a demand-paged executable, since this feature isn't
+ meaninful in CR16 embedded systems. Moreover, when magic_demand_paged
+ is true the link sometimes fails. */
+ config.magic_demand_paged = FALSE;
+}
+
+/* This is called after the sections have been attached to output
+ sections, but before any sizes or addresses have been set. */
+
+static void
+cr16elf_before_allocation (void)
+{
+ /* Call the default first. */
+ gld${EMULATION_NAME}_before_allocation ();
+
+ /* 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 cr16-elf routines in ld_${EMULATION_NAME}_emulation
+#
+LDEMUL_AFTER_PARSE=cr16elf_after_parse
+LDEMUL_BEFORE_ALLOCATION=cr16elf_before_allocation
+
diff --git a/ld/emultempl/elf-generic.em b/ld/emultempl/elf-generic.em
new file mode 100644
index 000000000000..7edee8b68e20
--- /dev/null
+++ b/ld/emultempl/elf-generic.em
@@ -0,0 +1,81 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 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 from ELF targets that use
+# generic.em.
+#
+cat >>e${EMULATION_NAME}.c <<EOF
+
+static void
+gld${EMULATION_NAME}_map_segments (bfd_boolean need_layout)
+{
+ int tries = 10;
+
+ do
+ {
+ if (need_layout)
+ {
+ 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 ();
+
+ need_layout = FALSE;
+ }
+
+ if (output_bfd->xvec->flavour == bfd_target_elf_flavour
+ && !link_info.relocatable)
+ {
+ bfd_size_type phdr_size;
+
+ phdr_size = elf_tdata (output_bfd)->program_header_size;
+ /* If we don't have user supplied phdrs, throw away any
+ previous linker generated program headers. */
+ if (lang_phdr_list == NULL)
+ elf_tdata (output_bfd)->segment_map = NULL;
+ if (!_bfd_elf_map_sections_to_segments (output_bfd, &link_info))
+ einfo ("%F%P: map sections to segments failed: %E\n");
+
+ if (phdr_size != elf_tdata (output_bfd)->program_header_size)
+ {
+ if (tries > 6)
+ /* The first few times we allow any change to
+ phdr_size . */
+ need_layout = TRUE;
+ else if (phdr_size < elf_tdata (output_bfd)->program_header_size)
+ /* After that we only allow the size to grow. */
+ need_layout = TRUE;
+ else
+ elf_tdata (output_bfd)->program_header_size = phdr_size;
+ }
+ }
+ }
+ while (need_layout && --tries);
+
+ if (tries == 0)
+ einfo (_("%P%F: looping in map_segments"));
+}
+EOF
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index 192597960539..d9f6fbb8e656 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -13,7 +13,7 @@ cat >e${EMULATION_NAME}.c <<EOF
/* ${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.
+ 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain <sac@cygnus.com>
ELF support by Ian Lance Taylor <ian@cygnus.com>
@@ -35,9 +35,8 @@ 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 "bfd.h"
#include "libiberty.h"
#include "safe-ctype.h"
#include "getopt.h"
@@ -60,8 +59,7 @@ 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;
+static void gld${EMULATION_NAME}_finish (void);
EOF
@@ -79,6 +77,7 @@ fi
# Import any needed special functions and/or overrides.
#
+. ${srcdir}/emultempl/elf-generic.em
if test -n "$EXTRA_EM_FILE" ; then
. ${srcdir}/emultempl/${EXTRA_EM_FILE}.em
fi
@@ -365,7 +364,7 @@ case ${target} in
struct bfd_link_needed_list *l;
for (l = needed; l != NULL; l = l->next)
- if (strncmp (l->name, "libc.so", 7) == 0)
+ if (CONST_STRNEQ (l->name, "libc.so"))
break;
if (l == NULL)
{
@@ -459,7 +458,7 @@ gld${EMULATION_NAME}_search_needed (const char *path,
{
char *filename, *sset;
- s = strchr (path, ':');
+ s = strchr (path, config.rpath_separator);
if (s == NULL)
s = path + strlen (path);
@@ -492,7 +491,8 @@ EOF
if [ "x${USE_LIBPATH}" = xyes ] ; then
cat >>e${EMULATION_NAME}.c <<EOF
-/* Add the sysroot to every entry in a colon-separated path. */
+/* Add the sysroot to every entry in a path separated by
+ config.rpath_separator. */
static char *
gld${EMULATION_NAME}_add_sysroot (const char *path)
@@ -504,7 +504,7 @@ gld${EMULATION_NAME}_add_sysroot (const char *path)
colons = 0;
i = 0;
while (path[i])
- if (path[i++] == ':')
+ if (path[i++] == config.rpath_separator)
colons++;
if (path[i])
@@ -516,7 +516,7 @@ gld${EMULATION_NAME}_add_sysroot (const char *path)
p = ret + strlen (ret);
i = 0;
while (path[i])
- if (path[i] == ':')
+ if (path[i] == config.rpath_separator)
{
*p++ = path[i++];
strcpy (p, ld_sysroot);
@@ -698,7 +698,7 @@ gld${EMULATION_NAME}_parse_ld_so_conf
if (p[0] == '\0')
continue;
- if (!strncmp (p, "include", 7) && (p[7] == ' ' || p[7] == '\t'))
+ if (CONST_STRNEQ (p, "include") && (p[7] == ' ' || p[7] == '\t'))
{
char *dir, c;
p += 8;
@@ -745,7 +745,7 @@ gld${EMULATION_NAME}_parse_ld_so_conf
info->alloc += p - dir + 256;
info->path = xrealloc (info->path, info->alloc);
}
- info->path[info->len++] = ':';
+ info->path[info->len++] = config.rpath_separator;
}
memcpy (info->path + info->len, dir, p - dir);
info->len += p - dir;
@@ -865,6 +865,42 @@ gld${EMULATION_NAME}_after_open (void)
{
struct bfd_link_needed_list *needed, *l;
+ if (link_info.eh_frame_hdr
+ && ! link_info.traditional_format
+ && ! link_info.relocatable)
+ {
+ struct elf_link_hash_table *htab;
+
+ htab = elf_hash_table (&link_info);
+ if (is_elf_hash_table (htab))
+ {
+ bfd *abfd;
+ asection *s;
+
+ for (abfd = link_info.input_bfds; abfd; abfd = abfd->link_next)
+ {
+ s = bfd_get_section_by_name (abfd, ".eh_frame");
+ if (s && s->size > 8 && !bfd_is_abs_section (s->output_section))
+ break;
+ }
+ if (abfd)
+ {
+ const struct elf_backend_data *bed;
+
+ bed = get_elf_backend_data (abfd);
+ s = bfd_make_section_with_flags (abfd, ".eh_frame_hdr",
+ bed->dynamic_sec_flags
+ | SEC_READONLY);
+ if (s != NULL
+ && bfd_set_section_alignment (abfd, s, 2))
+ htab->eh_info.hdr_sec = s;
+ else
+ einfo ("%P: warning: Cannot create .eh_frame_hdr section,"
+ " --eh-frame-hdr ignored.\n");
+ }
+ }
+ }
+
/* We only need to worry about this when doing a final link. */
if (link_info.relocatable || !link_info.executable)
return;
@@ -1180,10 +1216,8 @@ ${ELF_INTERPRETER_SET_DEFAULT}
{
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;
@@ -1193,14 +1227,12 @@ ${ELF_INTERPRETER_SET_DEFAULT}
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,
+ msg = xmalloc ((size_t) (sz + 1));
+ if (! bfd_get_section_contents (is->the_bfd, s, msg,
(file_ptr) 0, sz))
einfo ("%F%B: Can't read contents of section .gnu.warning: %E\n",
is->the_bfd);
- msg[prefix_len + sz] = '\0';
+ msg[sz] = '\0';
ret = link_info.callbacks->warning (&link_info, msg,
(const char *) NULL,
is->the_bfd, (asection *) NULL,
@@ -1208,13 +1240,20 @@ ${ELF_INTERPRETER_SET_DEFAULT}
ASSERT (ret);
free (msg);
- /* Clobber the section size, so that we don't waste copying the
- warning into the output file. */
+ /* Clobber the section size, so that we don't waste space
+ copying the warning into the output file. If we've already
+ sized the output section, adjust its size. The adjustment
+ is on rawsize because targets that size sections early will
+ have called lang_reset_memory_regions after sizing. */
+ if (s->output_section != NULL
+ && s->output_section->rawsize >= s->size)
+ s->output_section->rawsize -= s->size;
+
s->size = 0;
- /* Also set SEC_EXCLUDE, so that symbols defined in the warning
- section don't get copied to the output. */
- s->flags |= SEC_EXCLUDE;
+ /* Also set SEC_EXCLUDE, so that local symbols defined in the
+ warning section don't get copied to the output. */
+ s->flags |= SEC_EXCLUDE | SEC_KEEP;
}
}
@@ -1326,7 +1365,7 @@ output_rel_find (asection *sec, int isdyn)
lookup = lookup->next)
{
if (lookup->constraint != -1
- && strncmp (".rel", lookup->name, 4) == 0)
+ && CONST_STRNEQ (lookup->name, ".rel"))
{
int lookrela = lookup->name[4] == 'a';
@@ -1435,7 +1474,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s)
default:
break;
}
- else if (strncmp (secname, ".rel", 4) == 0)
+ else if (CONST_STRNEQ (secname, ".rel"))
{
secname = secname[4] == 'a' ? ".rela.dyn" : ".rel.dyn";
isdyn = 1;
@@ -1483,7 +1522,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s)
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
+ && CONST_STRNEQ (secname, ".gnu.warning.")
&& hold[orphan_text].os != NULL)
{
lang_add_section (&hold[orphan_text].os->children, s,
@@ -1502,7 +1541,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s)
;
else if ((s->flags & SEC_LOAD) != 0
&& ((iself && sh_type == SHT_NOTE)
- || (!iself && strncmp (secname, ".note", 5) == 0)))
+ || (!iself && CONST_STRNEQ (secname, ".note"))))
place = &hold[orphan_interp];
else if ((s->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
place = &hold[orphan_bss];
@@ -1511,7 +1550,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s)
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))
+ || (!iself && CONST_STRNEQ (secname, ".rel")))
&& (s->flags & SEC_LOAD) != 0)
place = &hold[orphan_rel];
else if ((s->flags & SEC_CODE) == 0)
@@ -1560,26 +1599,11 @@ 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 ();
+ bfd_boolean need_layout = bfd_elf_discard_info (output_bfd, &link_info);
+ gld${EMULATION_NAME}_map_segments (need_layout);
finish_default ();
}
EOF
@@ -1734,6 +1758,7 @@ cat >>e${EMULATION_NAME}.c <<EOF
#define OPTION_GROUP (OPTION_ENABLE_NEW_DTAGS + 1)
#define OPTION_EH_FRAME_HDR (OPTION_GROUP + 1)
#define OPTION_EXCLUDE_LIBS (OPTION_EH_FRAME_HDR + 1)
+#define OPTION_HASH_STYLE (OPTION_EXCLUDE_LIBS + 1)
static void
gld${EMULATION_NAME}_add_options
@@ -1750,6 +1775,7 @@ cat >>e${EMULATION_NAME}.c <<EOF
{"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS},
{"eh-frame-hdr", no_argument, NULL, OPTION_EH_FRAME_HDR},
{"exclude-libs", required_argument, NULL, OPTION_EXCLUDE_LIBS},
+ {"hash-style", required_argument, NULL, OPTION_HASH_STYLE},
{"Bgroup", no_argument, NULL, OPTION_GROUP},
EOF
fi
@@ -1806,6 +1832,22 @@ cat >>e${EMULATION_NAME}.c <<EOF
add_excluded_libs (optarg);
break;
+ case OPTION_HASH_STYLE:
+ link_info.emit_hash = FALSE;
+ link_info.emit_gnu_hash = FALSE;
+ if (strcmp (optarg, "sysv") == 0)
+ link_info.emit_hash = TRUE;
+ else if (strcmp (optarg, "gnu") == 0)
+ link_info.emit_gnu_hash = TRUE;
+ else if (strcmp (optarg, "both") == 0)
+ {
+ link_info.emit_hash = TRUE;
+ link_info.emit_gnu_hash = TRUE;
+ }
+ else
+ einfo (_("%P%F: invalid hash style \`%s'\n"), optarg);
+ break;
+
case 'z':
if (strcmp (optarg, "initfirst") == 0)
link_info.flags_1 |= (bfd_vma) DF_1_INITFIRST;
@@ -1826,6 +1868,11 @@ cat >>e${EMULATION_NAME}.c <<EOF
link_info.flags |= (bfd_vma) DF_BIND_NOW;
link_info.flags_1 |= (bfd_vma) DF_1_NOW;
}
+ else if (strcmp (optarg, "lazy") == 0)
+ {
+ link_info.flags &= ~(bfd_vma) DF_BIND_NOW;
+ link_info.flags_1 &= ~(bfd_vma) DF_1_NOW;
+ }
else if (strcmp (optarg, "origin") == 0)
{
link_info.flags |= (bfd_vma) DF_ORIGIN;
@@ -1851,10 +1898,41 @@ cat >>e${EMULATION_NAME}.c <<EOF
link_info.noexecstack = TRUE;
link_info.execstack = FALSE;
}
+EOF
+
+ if test -n "$COMMONPAGESIZE"; then
+cat >>e${EMULATION_NAME}.c <<EOF
else if (strcmp (optarg, "relro") == 0)
link_info.relro = TRUE;
else if (strcmp (optarg, "norelro") == 0)
link_info.relro = FALSE;
+EOF
+ fi
+
+cat >>e${EMULATION_NAME}.c <<EOF
+ else if (CONST_STRNEQ (optarg, "max-page-size="))
+ {
+ char *end;
+
+ config.maxpagesize = strtoul (optarg + 14, &end, 0);
+ if (*end || (config.maxpagesize & (config.maxpagesize - 1)) != 0)
+ einfo (_("%P%F: invalid maxium page size \`%s'\n"),
+ optarg + 14);
+ ASSERT (default_target != NULL);
+ bfd_emul_set_maxpagesize (default_target, config.maxpagesize);
+ }
+ else if (CONST_STRNEQ (optarg, "common-page-size="))
+ {
+ char *end;
+ config.commonpagesize = strtoul (optarg + 17, &end, 0);
+ if (*end
+ || (config.commonpagesize & (config.commonpagesize - 1)) != 0)
+ einfo (_("%P%F: invalid common page size \`%s'\n"),
+ optarg + 17);
+ ASSERT (default_target != NULL);
+ bfd_emul_set_commonpagesize (default_target,
+ config.commonpagesize);
+ }
/* What about the other Solaris -z options? FIXME. */
break;
EOF
@@ -1888,11 +1966,13 @@ cat >>e${EMULATION_NAME}.c <<EOF
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, _(" --hash-style=STYLE\tSet hash style to sysv, gnu or both\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 lazy\t\tMark object lazy runtime binding (default)\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"));
@@ -1902,10 +1982,28 @@ cat >>e${EMULATION_NAME}.c <<EOF
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"));
+EOF
+
+ if test -n "$COMMONPAGESIZE"; then
+cat >>e${EMULATION_NAME}.c <<EOF
fprintf (file, _(" -z norelro\t\tDon't create RELRO program header\n"));
+EOF
+ fi
+
+cat >>e${EMULATION_NAME}.c <<EOF
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"));
+EOF
+
+ if test -n "$COMMONPAGESIZE"; then
+cat >>e${EMULATION_NAME}.c <<EOF
fprintf (file, _(" -z relro\t\tCreate RELRO program header\n"));
+EOF
+ fi
+
+cat >>e${EMULATION_NAME}.c <<EOF
+ fprintf (file, _(" -z max-page-size=SIZE\tSet maximum page size to SIZE\n"));
+ fprintf (file, _(" -z common-page-size=SIZE\n\t\t\tSet common page size to SIZE\n"));
fprintf (file, _(" -z KEYWORD\t\tIgnored for Solaris compatibility\n"));
EOF
fi
diff --git a/ld/emultempl/genelf.em b/ld/emultempl/genelf.em
new file mode 100644
index 000000000000..dae75a16ebe7
--- /dev/null
+++ b/ld/emultempl/genelf.em
@@ -0,0 +1,39 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 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 generic.em
+#
+cat >>e${EMULATION_NAME}.c <<EOF
+#include "elf-bfd.h"
+
+EOF
+. ${srcdir}/emultempl/elf-generic.em
+cat >>e${EMULATION_NAME}.c <<EOF
+
+static void
+gld${EMULATION_NAME}_finish (void)
+{
+ gld${EMULATION_NAME}_map_segments (FALSE);
+ finish_default ();
+}
+EOF
+# Put these extra routines in ld_${EMULATION_NAME}_emulation
+#
+LDEMUL_FINISH=gld${EMULATION_NAME}_finish
diff --git a/ld/emultempl/generic.em b/ld/emultempl/generic.em
index 985cdf8e24f4..9ea6d02ed7e0 100644
--- a/ld/emultempl/generic.em
+++ b/ld/emultempl/generic.em
@@ -4,8 +4,8 @@ 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.
+ Copyright 1991, 1992, 1994, 1996, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain steve@cygnus.com
This file is part of GLD, the Gnu Linker.
@@ -26,8 +26,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define TARGET_IS_${EMULATION_NAME}
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "ld.h"
diff --git a/ld/emultempl/gld960.em b/ld/emultempl/gld960.em
index 63b5bb341a3f..11ea43478e75 100644
--- a/ld/emultempl/gld960.em
+++ b/ld/emultempl/gld960.em
@@ -1,7 +1,7 @@
# 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
+/* Copyright 1991, 1992, 1994, 1999, 2000, 2001, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -25,8 +25,8 @@ the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110
*/
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libiberty.h"
#include "bfdlink.h"
diff --git a/ld/emultempl/gld960c.em b/ld/emultempl/gld960c.em
index 6973a06d4035..68f513a62e74 100644
--- a/ld/emultempl/gld960c.em
+++ b/ld/emultempl/gld960c.em
@@ -2,7 +2,7 @@
# 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.
+ 2005, 2007 Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -26,8 +26,8 @@ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
*/
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libiberty.h"
#include "safe-ctype.h"
#include "bfdlink.h"
diff --git a/ld/emultempl/hppaelf.em b/ld/emultempl/hppaelf.em
index 82f37b69168d..61e53cbee463 100644
--- a/ld/emultempl/hppaelf.em
+++ b/ld/emultempl/hppaelf.em
@@ -220,9 +220,8 @@ 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 ();
+ gld${EMULATION_NAME}_map_segments (TRUE);
+ need_laying_out = -1;
}
@@ -248,7 +247,7 @@ build_section_lists (lang_statement_union_type *statement)
to build linker stubs. */
static void
-hppaelf_finish (void)
+gld${EMULATION_NAME}_finish (void)
{
/* bfd_elf_discard_info just plays with debugging sections,
ie. doesn't affect any code, so we can delay resizing the
@@ -288,8 +287,8 @@ hppaelf_finish (void)
}
}
- if (need_laying_out)
- hppaelf_layout_sections_again ();
+ if (need_laying_out != -1)
+ gld${EMULATION_NAME}_map_segments (need_laying_out);
if (! link_info.relocatable)
{
@@ -381,5 +380,5 @@ PARSE_AND_LIST_ARGS_CASES='
# Put these extra hppaelf routines in ld_${EMULATION_NAME}_emulation
#
LDEMUL_AFTER_PARSE=hppaelf_after_parse
-LDEMUL_FINISH=hppaelf_finish
+LDEMUL_FINISH=gld${EMULATION_NAME}_finish
LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=hppaelf_create_output_section_statements
diff --git a/ld/emultempl/irix.em b/ld/emultempl/irix.em
index 5dfc2a44c5a4..0fd9be9974a8 100644
--- a/ld/emultempl/irix.em
+++ b/ld/emultempl/irix.em
@@ -39,3 +39,4 @@ irix_after_open (void)
EOF
LDEMUL_AFTER_OPEN=irix_after_open
+. "${srcdir}/emultempl/mipself.em"
diff --git a/ld/emultempl/linux.em b/ld/emultempl/linux.em
index 996a7ea11004..48ac046884d3 100644
--- a/ld/emultempl/linux.em
+++ b/ld/emultempl/linux.em
@@ -10,7 +10,7 @@ cat >e${EMULATION_NAME}.c <<EOF
/* 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.
+ 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain <sac@cygnus.com>
Linux support by Eric Youngdale <ericy@cais.cais.com>
@@ -32,8 +32,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define TARGET_IS_${EMULATION_NAME}
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "ld.h"
diff --git a/ld/emultempl/lnk960.em b/ld/emultempl/lnk960.em
index 95384d42d5a2..a868b539729f 100644
--- a/ld/emultempl/lnk960.em
+++ b/ld/emultempl/lnk960.em
@@ -2,8 +2,8 @@
# 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.
+ Copyright 1991, 1992, 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003,
+ 2005, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain steve@cygnus.com
This file is part of GLD, the Gnu Linker.
@@ -22,9 +22,9 @@ 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 "sysdep.h"
#include "libiberty.h"
#include "bfd.h"
-#include "sysdep.h"
#include "bfdlink.h"
/*#include "archures.h"*/
diff --git a/ld/emultempl/m68kcoff.em b/ld/emultempl/m68kcoff.em
index 4bf3994b67b3..287dff4cdcf3 100644
--- a/ld/emultempl/m68kcoff.em
+++ b/ld/emultempl/m68kcoff.em
@@ -4,7 +4,8 @@ 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.
+ Copyright 2000, 2002, 2003, 2004, 2005, 2007
+ 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>.
@@ -27,8 +28,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define TARGET_IS_${EMULATION_NAME}
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "ld.h"
diff --git a/ld/emultempl/mipself.em b/ld/emultempl/mipself.em
new file mode 100644
index 000000000000..846cdc51dbb0
--- /dev/null
+++ b/ld/emultempl/mipself.em
@@ -0,0 +1,37 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 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
+static void
+mips_after_parse (void)
+{
+ /* .gnu.hash and the MIPS ABI require .dynsym to be sorted in different
+ ways. .gnu.hash needs symbols to be grouped by hash code whereas the
+ MIPS ABI requires a mapping between the GOT and the symbol table. */
+ if (link_info.emit_gnu_hash)
+ {
+ einfo ("%X%P: .gnu.hash is incompatible with the MIPS ABI\n");
+ link_info.emit_hash = TRUE;
+ link_info.emit_gnu_hash = FALSE;
+ }
+ after_parse_default ();
+}
+EOF
+
+LDEMUL_AFTER_PARSE=mips_after_parse
diff --git a/ld/emultempl/mmixelf.em b/ld/emultempl/mmixelf.em
index 9954343f475a..be8d90790847 100644
--- a/ld/emultempl/mmixelf.em
+++ b/ld/emultempl/mmixelf.em
@@ -24,7 +24,6 @@
. ${srcdir}/emultempl/mmix-elfnmmo.em
cat >>e${EMULATION_NAME}.c <<EOF
-#line 29 "${srcdir}/emultempl/elfmmix.em"
static void
elfmmix_before_parse (void)
diff --git a/ld/emultempl/mmo.em b/ld/emultempl/mmo.em
index 0a7d648bf1b8..11475751da28 100644
--- a/ld/emultempl/mmo.em
+++ b/ld/emultempl/mmo.em
@@ -1,5 +1,5 @@
# This shell script emits a C file. -*- C -*-
-# Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+# Copyright 2001, 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
#
# This file is part of GLD, the Gnu Linker.
#
@@ -18,16 +18,24 @@
# 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.
+# This file is sourced from generic.em.
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. */
+/* Need to have this macro defined before mmix-elfnmmo, which uses the
+ name for the before_allocation function, defined in ldemul.c (for
+ the mmo "emulation") or in elf32.em (for the elf64mmix
+ "emulation"). */
#define gldmmo_before_allocation before_allocation_default
+
+/* We include this header *not* because we expect to handle ELF here
+ but because we re-use the map_segments function in elf-generic.em,
+ a file which is rightly somewhat ELF-centric. But this is only to
+ get a weird testcase right; ld-mmix/bpo-22, forcing ELF to be
+ output from the mmo emulation: -m mmo --oformat elf64-mmix! */
+#include "elf-bfd.h"
EOF
+. ${srcdir}/emultempl/elf-generic.em
. ${srcdir}/emultempl/mmix-elfnmmo.em
cat >>e${EMULATION_NAME}.c <<EOF
@@ -112,6 +120,7 @@ static void
mmo_finish (void)
{
bfd_map_over_sections (output_bfd, mmo_wipe_sec_reloc_flag, NULL);
+ gld${EMULATION_NAME}_map_segments (FALSE);
finish_default ();
}
diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em
index 5afa8da00fef..a540669f7aa3 100644
--- a/ld/emultempl/pe.em
+++ b/ld/emultempl/pe.em
@@ -11,7 +11,7 @@ rm -f e${EMULATION_NAME}.c
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.
+ 2005, 2006, 2007 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
@@ -37,17 +37,20 @@ cat >>e${EMULATION_NAME}.c <<EOF
#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"
+#if defined(TARGET_IS_armpe) \
+ || defined(TARGET_IS_arm_epoc_pe) \
+ || defined(TARGET_IS_arm_wince_pe)
+#define bfd_arm_allocate_interworking_sections \
+ bfd_${EMULATION_NAME}_allocate_interworking_sections
+#define bfd_arm_get_bfd_for_interworking \
+ bfd_${EMULATION_NAME}_get_bfd_for_interworking
+#define bfd_arm_process_before_allocation \
+ bfd_${EMULATION_NAME}_process_before_allocation
+#endif
+
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "getopt.h"
#include "libiberty.h"
@@ -85,10 +88,12 @@ cat >>e${EMULATION_NAME}.c <<EOF
#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)
+#if defined(TARGET_IS_i386pe) \
+ || defined(TARGET_IS_shpe) \
+ || defined(TARGET_IS_mipspe) \
+ || defined(TARGET_IS_armpe) \
+ || defined(TARGET_IS_arm_epoc_pe) \
+ || defined(TARGET_IS_arm_wince_pe)
#define DLL_SUPPORT
#endif
@@ -99,7 +104,8 @@ cat >>e${EMULATION_NAME}.c <<EOF
#undef PE_DEF_SECTION_ALIGNMENT
#undef PE_DEF_FILE_ALIGNMENT
#define NT_EXE_IMAGE_BASE 0x00010000
-#ifdef TARGET_IS_armpe
+
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_wince_pe)
#define PE_DEF_SECTION_ALIGNMENT 0x00001000
#define PE_DEF_SUBSYSTEM 9
#else
@@ -109,6 +115,7 @@ cat >>e${EMULATION_NAME}.c <<EOF
#define PE_DEF_FILE_ALIGNMENT 0x00000200
#endif
+#define U(S) ${INITIAL_SYMBOL_CHAR} S
static struct internal_extra_pe_aouthdr pe;
static int dll;
@@ -139,7 +146,7 @@ gld_${EMULATION_NAME}_before_parse (void)
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
+#if defined TARGET_IS_mipspe || defined TARGET_IS_armpe || defined TARGET_IS_arm_wince_pe
lang_default_entry ("WinMainCRTStartup");
#else
lang_default_entry ("_WinMainCRTStartup");
@@ -282,8 +289,8 @@ static definfo init[] =
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),
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_wince_pe)
+ D(MajorSubsystemVersion,"__major_subsystem_version__", 3),
#else
D(MajorSubsystemVersion,"__major_subsystem_version__", 4),
#endif
@@ -394,7 +401,7 @@ set_pe_subsystem (void)
{ "windows", 2, "WinMainCRTStartup" },
{ "console", 3, "mainCRTStartup" },
{ "posix", 7, "__PosixProcessStartup"},
- { "wince", 9, "_WinMainCRTStartup" },
+ { "wince", 9, "WinMainCRTStartup" },
{ "xbox", 14, "mainCRTStartup" },
{ NULL, 0, NULL }
};
@@ -919,15 +926,14 @@ pe_find_data_imports (void)
for (i = 0; i < nsyms; i++)
{
- if (memcmp (symbols[i]->name, "__head_",
- sizeof ("__head_") - 1))
+ if (! CONST_STRNEQ (symbols[i]->name, U ("_head_")))
continue;
if (pe_dll_extra_pe_debug)
printf ("->%s\n", symbols[i]->name);
pe_data_import_dll = (char*) (symbols[i]->name +
- sizeof ("__head_") - 1);
+ sizeof (U ("_head_")) - 1);
break;
}
@@ -983,7 +989,7 @@ gld_${EMULATION_NAME}_after_open (void)
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"));
+ einfo (_("%F%P: cannot perform PE operations on non PE output file '%B'.\n"), output_bfd);
pe_data (output_bfd)->pe_opthdr = pe;
pe_data (output_bfd)->dll = init[DLLOFF].value;
@@ -997,22 +1003,21 @@ gld_${EMULATION_NAME}_after_open (void)
pe_find_data_imports ();
-#if ! (defined (TARGET_IS_i386pe) || defined (TARGET_IS_armpe))
- if (link_info.shared)
-#else
+#if defined (TARGET_IS_i386pe) \
+ || defined (TARGET_IS_armpe) \
+ || defined (TARGET_IS_arm_epoc_pe) \
+ || defined (TARGET_IS_arm_wince_pe)
if (!link_info.relocatable)
-#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);
+#else
+ if (link_info.shared)
+ pe_dll_build_sections (output_bfd, &link_info);
#endif
-#endif
-#endif
+#endif /* DLL_SUPPORT */
-#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe)
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe)
if (strstr (bfd_get_target (output_bfd), "arm") == NULL)
{
/* The arm backend needs special fields in the output hash structure.
@@ -1026,7 +1031,7 @@ gld_${EMULATION_NAME}_after_open (void)
/* 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))
+ if (bfd_arm_get_bfd_for_interworking (is->the_bfd, & link_info))
break;
}
}
@@ -1055,7 +1060,7 @@ gld_${EMULATION_NAME}_after_open (void)
{
if (strcmp (sec->name, ".idata\$2") == 0)
idata2 = 1;
- if (strncmp (sec->name, ".idata\$", 7) == 0)
+ if (CONST_STRNEQ (sec->name, ".idata\$"))
is_imp = 1;
reloc_count += sec->reloc_count;
}
@@ -1245,6 +1250,74 @@ gld_${EMULATION_NAME}_after_open (void)
}
}
}
+
+ {
+ /* The following chunk of code tries to identify jump stubs in
+ import libraries which are dead code and eliminates them
+ from the final link. For each exported symbol <sym>, there
+ is a object file in the import library with a .text section
+ and several .idata$* sections. The .text section contains the
+ symbol definition for <sym> which is a jump stub of the form
+ jmp *__imp_<sym>. The .idata$5 contains the symbol definition
+ for __imp_<sym> which is the address of the slot for <sym> in
+ the import address table. When a symbol is imported explicitly
+ using __declspec(dllimport) declaration, the compiler generates
+ a reference to __imp_<sym> which directly resolves to the
+ symbol in .idata$5, in which case the jump stub code is not
+ needed. The following code tries to identify jump stub sections
+ in import libraries which are not referred to by anyone and
+ marks them for exclusion from the final link. */
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (is->the_bfd->my_archive)
+ {
+ int is_imp = 0;
+ asection *sec, *stub_sec = NULL;
+
+ /* See if this is an import library thunk. */
+ for (sec = is->the_bfd->sections; sec; sec = sec->next)
+ {
+ if (strncmp (sec->name, ".idata\$", 7) == 0)
+ is_imp = 1;
+ /* The section containing the jmp stub has code
+ and has a reloc. */
+ if ((sec->flags & SEC_CODE) && sec->reloc_count)
+ stub_sec = sec;
+ }
+
+ if (is_imp && stub_sec)
+ {
+ long symsize;
+ asymbol **symbols;
+ long src_count;
+ struct bfd_link_hash_entry * blhe;
+
+ symsize = bfd_get_symtab_upper_bound (is->the_bfd);
+ symbols = xmalloc (symsize);
+ symsize = bfd_canonicalize_symtab (is->the_bfd, symbols);
+
+ for (src_count = 0; src_count < symsize; src_count++)
+ {
+ if (symbols[src_count]->section->id == stub_sec->id)
+ {
+ /* This symbol belongs to the section containing
+ the stub. */
+ blhe = bfd_link_hash_lookup (link_info.hash,
+ symbols[src_count]->name,
+ FALSE, FALSE, TRUE);
+ /* If the symbol in the stub section has no other
+ undefined references, exclude the stub section
+ from the final link. */
+ if (blhe && (blhe->type == bfd_link_hash_defined)
+ && (blhe->u.undef.next == NULL))
+ stub_sec->flags |= SEC_EXCLUDE;
+ }
+ }
+ free (symbols);
+ }
+ }
+ }
+ }
}
static void
@@ -1267,7 +1340,7 @@ gld_${EMULATION_NAME}_before_allocation (void)
ppc_allocate_toc_section (&link_info);
#endif /* TARGET_IS_ppcpe */
-#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe)
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe)
/* FIXME: we should be able to set the size of the interworking stub
section.
@@ -1277,7 +1350,7 @@ gld_${EMULATION_NAME}_before_allocation (void)
{
LANG_FOR_EACH_INPUT_STATEMENT (is)
{
- if (! bfd_arm_pe_process_before_allocation
+ if (! bfd_arm_process_before_allocation
(is->the_bfd, & link_info, support_old_code))
{
/* xgettext:c-format */
@@ -1288,8 +1361,8 @@ gld_${EMULATION_NAME}_before_allocation (void)
}
/* We have seen it all. Allocate it, and carry on. */
- bfd_arm_pe_allocate_interworking_sections (& link_info);
-#endif /* TARGET_IS_armpe */
+ bfd_arm_allocate_interworking_sections (& link_info);
+#endif /* TARGET_IS_armpe || TARGET_IS_arm_epoc_pe || TARGET_IS_arm_wince_pe */
before_allocation_default ();
}
@@ -1338,7 +1411,7 @@ gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIB
{
struct bfd_link_hash_entry *h;
- sprintf (buf, "_%s", pe_def_file->exports[i].internal_name);
+ sprintf (buf, "%s%s", U (""), pe_def_file->exports[i].internal_name);
h = bfd_link_hash_lookup (link_info.hash, buf, TRUE, TRUE, TRUE);
if (h == (struct bfd_link_hash_entry *) NULL)
@@ -1404,19 +1477,14 @@ gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUT
#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);
- }
+#ifdef TARGET_IS_arm_epoc_pe
+ pe_dll_id_target ("epoc-pei-arm-little");
+#endif
+#ifdef TARGET_IS_arm_wince_pe
+ pe_dll_id_target ("pei-arm-wince-little");
+#endif
+ if (pe_bfd_is_dll (entry->the_bfd))
+ return pe_implied_import_dll (entry->filename);
#endif
return FALSE;
}
@@ -1424,7 +1492,7 @@ gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUT
static void
gld_${EMULATION_NAME}_finish (void)
{
-#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe)
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe)
struct bfd_link_hash_entry * h;
if (thumb_entry_symbol != NULL)
@@ -1464,7 +1532,7 @@ gld_${EMULATION_NAME}_finish (void)
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) */
+#endif /* defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe) */
finish_default ();
@@ -1694,87 +1762,100 @@ gld_${EMULATION_NAME}_open_dynamic_archive
(const char *arch ATTRIBUTE_UNUSED, search_dirs_type *search,
lang_input_statement_type *entry)
{
+ static const struct
+ {
+ const char * format;
+ bfd_boolean use_prefix;
+ }
+ libname_fmt [] =
+ {
+ /* Preferred explicit import library for dll's. */
+ { "lib%s.dll.a", FALSE },
+ /* Alternate explicit import library for dll's. */
+ { "%s.dll.a", FALSE },
+ /* "libfoo.a" could be either an import lib or a static lib.
+ For backwards compatibility, libfoo.a needs to precede
+ libfoo.dll and foo.dll in the search. */
+ { "lib%s.a", FALSE },
+ /* The 'native' spelling of an import lib name is "foo.lib". */
+ { "%s.lib", FALSE },
+#ifdef DLL_SUPPORT
+ /* Try "<prefix>foo.dll" (preferred dll name, if specified). */
+ { "%s%s.dll", TRUE },
+#endif
+ /* Try "libfoo.dll" (default preferred dll name). */
+ { "lib%s.dll", FALSE },
+ /* Finally try 'native' dll name "foo.dll". */
+ { "%s.dll", FALSE },
+ /* Note: If adding more formats to this table, make sure to check to
+ see if their length is longer than libname_fmt[0].format, and if
+ so, update the call to xmalloc() below. */
+ { NULL, FALSE }
+ };
+ static unsigned int format_max_len = 0;
const char * filename;
- char * string;
+ char * full_string;
+ char * base_string;
+ unsigned int i;
+
if (! entry->is_archive)
return FALSE;
filename = entry->filename;
- string = (char *) xmalloc (strlen (search->name)
- + strlen (filename)
- + sizeof "/lib.a.dll"
+ if (format_max_len == 0)
+ /* We need to allow space in the memory that we are going to allocate
+ for the characters in the format string. Since the format array is
+ static we only need to calculate this information once. In theory
+ this value could also be computed statically, but this introduces
+ the possibility for a discrepancy and hence a possible memory
+ corruption. The lengths we compute here will be too long because
+ they will include any formating characters (%s) in the strings, but
+ this will not matter. */
+ for (i = 0; libname_fmt[i].format; i++)
+ if (format_max_len < strlen (libname_fmt[i].format))
+ format_max_len = strlen (libname_fmt[i].format);
+
+ full_string = xmalloc (strlen (search->name)
+ + strlen (filename)
+ + format_max_len
#ifdef DLL_SUPPORT
- + (pe_dll_search_prefix ? strlen (pe_dll_search_prefix) : 0)
+ + (pe_dll_search_prefix
+ ? strlen (pe_dll_search_prefix) : 0)
#endif
- + 1);
+ /* Allow for the terminating NUL and for the path
+ separator character that is inserted between
+ search->name and the start of the format string. */
+ + 2);
- /* Try "libfoo.dll.a" first (preferred explicit import library for dll's. */
- sprintf (string, "%s/lib%s.dll.a", search->name, filename);
+ sprintf (full_string, "%s/", search->name);
+ base_string = full_string + strlen (full_string);
- if (! ldfile_try_open_bfd (string, entry))
+ for (i = 0; libname_fmt[i].format; i++)
{
- /* 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))
+#ifdef DLL_SUPPORT
+ if (libname_fmt[i].use_prefix)
{
- /* 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;
- }
- }
- }
- }
+ if (!pe_dll_search_prefix)
+ continue;
+ sprintf (base_string, libname_fmt[i].format, pe_dll_search_prefix, filename);
}
+ else
+#endif
+ sprintf (base_string, libname_fmt[i].format, filename);
+
+ if (ldfile_try_open_bfd (full_string, entry))
+ break;
+ }
+
+ if (!libname_fmt[i].format)
+ {
+ free (full_string);
+ return FALSE;
}
- entry->filename = string;
+ entry->filename = full_string;
return TRUE;
}
diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em
new file mode 100644
index 000000000000..f44471b6a287
--- /dev/null
+++ b/ld/emultempl/pep.em
@@ -0,0 +1,1706 @@
+# 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 2006, 2007 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.
+
+ Written by Kai Tietz, OneVision Software GmbH&CoKg. */
+
+/* For WINDOWS_XP64 and higher */
+/* Based on pe.em, but modified for 64 bit support. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#define COFF_IMAGE_WITH_PE
+#define COFF_WITH_PE
+#define COFF_WITH_pex64
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "getopt.h"
+#include "libiberty.h"
+#include "ld.h"
+#include "ldmain.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include <ldgram.h>
+#include "ldlex.h"
+#include "ldmisc.h"
+#include "ldctor.h"
+#include "coff/internal.h"
+
+/* FIXME: See bfd/peXXigen.c for why we include an architecture specific
+ header in generic PE code. */
+#include "coff/x86_64.h"
+#include "coff/pe.h"
+
+/* FIXME: This is a BFD internal header file, and we should not be
+ using it here. */
+#include "../bfd/libcoff.h"
+
+#undef AOUTSZ
+#define AOUTSZ PEPAOUTSZ
+#define PEAOUTHDR PEPAOUTHDR
+
+#include "deffile.h"
+#include "pep-dll.h"
+#include "safe-ctype.h"
+
+/* Permit the emulation parameters to override the default section
+ alignment by setting OVERRIDE_SECTION_ALIGNMENT. FIXME: This makes
+ it seem that include/coff/internal.h should not define
+ PE_DEF_SECTION_ALIGNMENT. */
+#if PE_DEF_SECTION_ALIGNMENT != ${OVERRIDE_SECTION_ALIGNMENT:-PE_DEF_SECTION_ALIGNMENT}
+#undef PE_DEF_SECTION_ALIGNMENT
+#define PE_DEF_SECTION_ALIGNMENT ${OVERRIDE_SECTION_ALIGNMENT}
+#endif
+
+#ifdef TARGET_IS_i386pep
+#define DLL_SUPPORT
+#endif
+
+#if defined(TARGET_IS_i386pep) || ! defined(DLL_SUPPORT)
+#define PE_DEF_SUBSYSTEM 3
+#else
+#undef NT_EXE_IMAGE_BASE
+#define NT_EXE_IMAGE_BASE 0x00010000
+#undef PE_DEF_SECTION_ALIGNMENT
+#define PE_DEF_SUBSYSTEM 2
+#undef PE_DEF_FILE_ALIGNMENT
+#define PE_DEF_FILE_ALIGNMENT 0x00000200
+#define PE_DEF_SECTION_ALIGNMENT 0x00000400
+#endif
+
+
+static struct internal_extra_pe_aouthdr pep;
+static int dll;
+static flagword real_flags = IMAGE_FILE_LARGE_ADDRESS_AWARE;
+static int support_old_code = 0;
+static lang_assignment_statement_type *image_base_statement = 0;
+
+#ifdef DLL_SUPPORT
+static int pep_enable_stdcall_fixup = -1; /* 0=disable 1=enable. */
+static char * pep_out_def_filename = NULL;
+static char * pep_implib_filename = NULL;
+static int pep_enable_auto_image_base = 0;
+static char * pep_dll_search_prefix = NULL;
+#endif
+
+extern const char *output_filename;
+
+static 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)
+ lang_default_entry ("_WinMainCRTStartup");
+#else
+ lang_default_entry ("${ENTRY}");
+#endif
+#endif
+}
+
+/* PE format extra command line options. */
+
+/* Used for setting flags in the PE header. */
+enum options
+{
+ OPTION_BASE_FILE = 300 + 1,
+ OPTION_DLL,
+ OPTION_FILE_ALIGNMENT,
+ OPTION_IMAGE_BASE,
+ OPTION_MAJOR_IMAGE_VERSION,
+ OPTION_MAJOR_OS_VERSION,
+ OPTION_MAJOR_SUBSYSTEM_VERSION,
+ OPTION_MINOR_IMAGE_VERSION,
+ OPTION_MINOR_OS_VERSION,
+ OPTION_MINOR_SUBSYSTEM_VERSION,
+ OPTION_SECTION_ALIGNMENT,
+ OPTION_STACK,
+ OPTION_SUBSYSTEM,
+ OPTION_HEAP,
+ OPTION_SUPPORT_OLD_CODE,
+ OPTION_OUT_DEF,
+ OPTION_EXPORT_ALL,
+ OPTION_EXCLUDE_SYMBOLS,
+ OPTION_KILL_ATS,
+ OPTION_STDCALL_ALIASES,
+ OPTION_ENABLE_STDCALL_FIXUP,
+ OPTION_DISABLE_STDCALL_FIXUP,
+ OPTION_IMPLIB_FILENAME,
+ OPTION_WARN_DUPLICATE_EXPORTS,
+ OPTION_IMP_COMPAT,
+ OPTION_ENABLE_AUTO_IMAGE_BASE,
+ OPTION_DISABLE_AUTO_IMAGE_BASE,
+ OPTION_DLL_SEARCH_PREFIX,
+ OPTION_NO_DEFAULT_EXCLUDES,
+ OPTION_DLL_ENABLE_AUTO_IMPORT,
+ OPTION_DLL_DISABLE_AUTO_IMPORT,
+ OPTION_ENABLE_EXTRA_PE_DEBUG,
+ OPTION_EXCLUDE_LIBS,
+ OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC,
+ OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC
+};
+
+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},
+#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-pep-debug", no_argument, NULL, OPTION_ENABLE_EXTRA_PE_DEBUG},
+ {"enable-runtime-pseudo-reloc", no_argument, NULL, OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC},
+ {"disable-runtime-pseudo-reloc", no_argument, NULL, OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC},
+#endif
+ {NULL, no_argument, NULL, 0}
+ };
+
+ *longopts = xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
+ memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
+}
+
+/* PE/WIN32; added routines to get the subsystem type, heap and/or stack
+ parameters which may be input from the command line. */
+
+typedef struct
+{
+ void *ptr;
+ int size;
+ int value;
+ char *symbol;
+ int inited;
+} definfo;
+
+#define D(field,symbol,def) {&pep.field,sizeof(pep.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},
+#define MSIMAGEBASEOFF 2
+ D(ImageBase,"__ImageBase", NT_EXE_IMAGE_BASE),
+ 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__", 0),
+ D(MinorImageVersion,"__minor_image_version__", 0),
+ D(MajorSubsystemVersion,"__major_subsystem_version__", 5),
+ D(MinorSubsystemVersion,"__minor_subsystem_version__", 2),
+ 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"));
+#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-pep-debug Enable verbose debug output when building\n\
+ or linking to DLLs (esp. auto-import)\n"));
+#endif
+}
+
+
+static void
+set_pep_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;
+ if (strcmp (name,"__image_base__") == 0)
+ set_pep_name ("__ImageBase", val);
+ return;
+ }
+ }
+ abort ();
+}
+
+
+static void
+set_pep_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_pep_name ("__major_subsystem_version__",
+ strtoul (sver + 1, &end, 0));
+ if (*end == '.')
+ set_pep_name ("__minor_subsystem_version__",
+ strtoul (end + 1, &end, 0));
+ if (*end != '\0')
+ einfo (_("%P: warning: bad version number in -subsystem option\n"));
+ }
+
+ /* Check for numeric subsystem. */
+ temp_subsystem = strtoul (optarg, & end, 0);
+ if ((*end == ':' || *end == '\0') && (temp_subsystem < 65536))
+ {
+ /* Search list for a numeric match to use its entry point. */
+ for (i = 0; v[i].name; i++)
+ if (v[i].value == (int) temp_subsystem)
+ break;
+
+ /* 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_pep_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_pep_value (char *name)
+{
+ char *end;
+
+ set_pep_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_pep_stack_heap (char *resname, char *comname)
+{
+ set_pep_value (resname);
+
+ if (*optarg == ',')
+ {
+ optarg++;
+ set_pep_value (comname);
+ }
+ else if (*optarg)
+ einfo (_("%P%F: strange hex info for PE parameter '%s'\n"), optarg);
+}
+
+
+static bfd_boolean
+gld${EMULATION_NAME}_handle_option (int optc)
+{
+ switch (optc)
+ {
+ default:
+ return FALSE;
+
+ case OPTION_BASE_FILE:
+ link_info.base_file = fopen (optarg, FOPEN_WB);
+ if (link_info.base_file == NULL)
+ {
+ /* xgettext:c-format */
+ fprintf (stderr, _("%s: Can't open base file %s\n"),
+ program_name, optarg);
+ xexit (1);
+ }
+ break;
+
+ /* PE options. */
+ case OPTION_HEAP:
+ set_pep_stack_heap ("__size_of_heap_reserve__", "__size_of_heap_commit__");
+ break;
+ case OPTION_STACK:
+ set_pep_stack_heap ("__size_of_stack_reserve__", "__size_of_stack_commit__");
+ break;
+ case OPTION_SUBSYSTEM:
+ set_pep_subsystem ();
+ break;
+ case OPTION_MAJOR_OS_VERSION:
+ set_pep_value ("__major_os_version__");
+ break;
+ case OPTION_MINOR_OS_VERSION:
+ set_pep_value ("__minor_os_version__");
+ break;
+ case OPTION_MAJOR_SUBSYSTEM_VERSION:
+ set_pep_value ("__major_subsystem_version__");
+ break;
+ case OPTION_MINOR_SUBSYSTEM_VERSION:
+ set_pep_value ("__minor_subsystem_version__");
+ break;
+ case OPTION_MAJOR_IMAGE_VERSION:
+ set_pep_value ("__major_image_version__");
+ break;
+ case OPTION_MINOR_IMAGE_VERSION:
+ set_pep_value ("__minor_image_version__");
+ break;
+ case OPTION_FILE_ALIGNMENT:
+ set_pep_value ("__file_alignment__");
+ break;
+ case OPTION_SECTION_ALIGNMENT:
+ set_pep_value ("__section_alignment__");
+ break;
+ case OPTION_DLL:
+ set_pep_name ("__dll__", 1);
+ break;
+ case OPTION_IMAGE_BASE:
+ set_pep_value ("__image_base__");
+ break;
+ case OPTION_SUPPORT_OLD_CODE:
+ support_old_code = 1;
+ break;
+#ifdef DLL_SUPPORT
+ case OPTION_OUT_DEF:
+ pep_out_def_filename = xstrdup (optarg);
+ break;
+ case OPTION_EXPORT_ALL:
+ pep_dll_export_everything = 1;
+ break;
+ case OPTION_EXCLUDE_SYMBOLS:
+ pep_dll_add_excludes (optarg, 0);
+ break;
+ case OPTION_EXCLUDE_LIBS:
+ pep_dll_add_excludes (optarg, 1);
+ break;
+ case OPTION_KILL_ATS:
+ pep_dll_kill_ats = 1;
+ break;
+ case OPTION_STDCALL_ALIASES:
+ pep_dll_stdcall_aliases = 1;
+ break;
+ case OPTION_ENABLE_STDCALL_FIXUP:
+ pep_enable_stdcall_fixup = 1;
+ break;
+ case OPTION_DISABLE_STDCALL_FIXUP:
+ pep_enable_stdcall_fixup = 0;
+ break;
+ case OPTION_IMPLIB_FILENAME:
+ pep_implib_filename = xstrdup (optarg);
+ break;
+ case OPTION_WARN_DUPLICATE_EXPORTS:
+ pep_dll_warn_dup_exports = 1;
+ break;
+ case OPTION_IMP_COMPAT:
+ pep_dll_compat_implib = 1;
+ break;
+ case OPTION_ENABLE_AUTO_IMAGE_BASE:
+ pep_enable_auto_image_base = 1;
+ break;
+ case OPTION_DISABLE_AUTO_IMAGE_BASE:
+ pep_enable_auto_image_base = 0;
+ break;
+ case OPTION_DLL_SEARCH_PREFIX:
+ pep_dll_search_prefix = xstrdup (optarg);
+ break;
+ case OPTION_NO_DEFAULT_EXCLUDES:
+ pep_dll_do_default_excludes = 0;
+ break;
+ case OPTION_DLL_ENABLE_AUTO_IMPORT:
+ link_info.pei386_auto_import = 1;
+ break;
+ case OPTION_DLL_DISABLE_AUTO_IMPORT:
+ link_info.pei386_auto_import = 0;
+ break;
+ case OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC:
+ link_info.pei386_runtime_pseudo_reloc = 1;
+ break;
+ case OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC:
+ link_info.pei386_runtime_pseudo_reloc = 0;
+ break;
+ case OPTION_ENABLE_EXTRA_PE_DEBUG:
+ pep_dll_extra_pe_debug = 1;
+ break;
+#endif
+ }
+ 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 = (pep_enable_auto_image_base) ?
+ compute_dll_image_base (output_filename) : NT_DLL_IMAGE_BASE;
+#else
+ init[IMAGEBASEOFF].value = NT_DLL_IMAGE_BASE;
+#endif
+ else
+ init[IMAGEBASEOFF].value = NT_EXE_IMAGE_BASE;
+ init[MSIMAGEBASEOFF].value = init[IMAGEBASEOFF].value;
+ }
+
+ /* Don't do any symbol assignments if this is a relocatable link. */
+ if (link_info.relocatable)
+ return;
+
+ /* Glue the assignments into the abs section. */
+ 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 (pep.FileAlignment > pep.SectionAlignment)
+ {
+ einfo (_("%P: warning, file alignment > section alignment.\n"));
+ }
+}
+
+/* This is called after the linker script and the command line options
+ have been read. */
+
+static void
+gld_${EMULATION_NAME}_after_parse (void)
+{
+ /* 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);
+}
+
+/* pep-dll.c directly accesses pep_data_import_dll,
+ so it must be defined outside of #ifdef DLL_SUPPORT.
+ Note - this variable is deliberately not initialised.
+ This allows it to be treated as a common varaible, and only
+ exist in one incarnation in a multiple target enabled linker. */
+char * pep_data_import_dll;
+
+#ifdef DLL_SUPPORT
+static struct bfd_link_hash_entry *pep_undef_found_sym;
+
+static bfd_boolean
+pep_undef_cdecl_match (struct bfd_link_hash_entry *h, void *inf)
+{
+ int sl;
+ char *string = inf;
+
+ sl = strlen (string);
+ if (h->type == bfd_link_hash_defined
+ && strncmp (h->root.string, string, sl) == 0
+ && h->root.string[sl] == '@')
+ {
+ pep_undef_found_sym = h;
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void
+pep_fixup_stdcalls (void)
+{
+ static int gave_warning_message = 0;
+ struct bfd_link_hash_entry *undef, *sym;
+
+ if (pep_dll_extra_pe_debug)
+ printf ("%s\n", __FUNCTION__);
+
+ for (undef = link_info.hash->undefs; undef; undef=undef->u.undef.next)
+ if (undef->type == bfd_link_hash_undefined)
+ {
+ char* at = strchr (undef->root.string, '@');
+ int lead_at = (*undef->root.string == '@');
+ /* 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 (pep_enable_stdcall_fixup == -1)
+ {
+ einfo (_("Warning: resolving %s by linking to %s\n"),
+ undef->root.string, cname);
+ if (! gave_warning_message)
+ {
+ gave_warning_message = 1;
+ einfo (_("Use --enable-stdcall-fixup to disable these warnings\n"));
+ einfo (_("Use --disable-stdcall-fixup to disable these fixups\n"));
+ }
+ }
+ }
+ }
+ else
+ {
+ /* The symbol is a cdecl symbol, so we look for stdcall
+ symbols - which means scanning the whole symbol table. */
+ pep_undef_found_sym = 0;
+ bfd_link_hash_traverse (link_info.hash, pep_undef_cdecl_match,
+ (char *) undef->root.string);
+ sym = pep_undef_found_sym;
+ if (sym)
+ {
+ undef->type = bfd_link_hash_defined;
+ undef->u.def.value = sym->u.def.value;
+ undef->u.def.section = sym->u.def.section;
+
+ if (pep_enable_stdcall_fixup == -1)
+ {
+ einfo (_("Warning: resolving %s by linking to %s\n"),
+ undef->root.string, sym->root.string);
+ if (! gave_warning_message)
+ {
+ gave_warning_message = 1;
+ einfo (_("Use --enable-stdcall-fixup to disable these warnings\n"));
+ einfo (_("Use --disable-stdcall-fixup to disable these fixups\n"));
+ }
+ }
+ }
+ }
+ }
+}
+
+static int
+make_import_fixup (arelent *rel, asection *s)
+{
+ struct bfd_symbol *sym = *rel->sym_ptr_ptr;
+ char addend[4];
+
+ if (pep_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);
+
+ pep_create_import_fixup (rel, s, bfd_get_32 (s->owner, addend));
+
+ return 1;
+}
+
+static void
+pep_find_data_imports (void)
+{
+ struct bfd_link_hash_entry *undef, *sym;
+
+ if (link_info.pei386_auto_import == 0)
+ return;
+
+ for (undef = link_info.hash->undefs; undef; undef=undef->u.undef.next)
+ {
+ if (undef->type == bfd_link_hash_undefined)
+ {
+ /* C++ symbols are *long*. */
+ char buf[4096];
+
+ if (pep_dll_extra_pe_debug)
+ printf ("%s:%s\n", __FUNCTION__, undef->root.string);
+
+ sprintf (buf, "__imp_%s", undef->root.string);
+
+ sym = bfd_link_hash_lookup (link_info.hash, buf, 0, 0, 1);
+
+ if (sym && sym->type == bfd_link_hash_defined)
+ {
+ bfd *b = sym->u.def.section->owner;
+ asymbol **symbols;
+ int nsyms, 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 = xmalloc (symsize);
+ nsyms = bfd_canonicalize_symtab (b, symbols);
+
+ for (i = 0; i < nsyms; i++)
+ {
+ if (! CONST_STRNEQ (symbols[i]->name, "__head_"))
+ continue;
+
+ if (pep_dll_extra_pe_debug)
+ printf ("->%s\n", symbols[i]->name);
+
+ pep_data_import_dll = (char*) (symbols[i]->name +
+ sizeof ("__head_") - 1);
+ break;
+ }
+
+ pep_walk_relocs_of_symbol (&link_info, undef->root.string,
+ make_import_fixup);
+
+ /* Let's differentiate it somehow from defined. */
+ undef->type = bfd_link_hash_defweak;
+ /* We replace original name with __imp_ prefixed, this
+ 1) may trash memory 2) leads to duplicate symbol generation.
+ Still, IMHO it's better than having name poluted. */
+ undef->root.string = sym->root.string;
+ undef->u.def.value = sym->u.def.value;
+ undef->u.def.section = sym->u.def.section;
+ }
+ }
+ }
+}
+
+static bfd_boolean
+pr_sym (struct bfd_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
+{
+ if (pep_dll_extra_pe_debug)
+ printf ("+%s\n", h->string);
+
+ return TRUE;
+}
+#endif /* DLL_SUPPORT */
+
+
+static void
+gld_${EMULATION_NAME}_after_open (void)
+{
+#ifdef DLL_SUPPORT
+ if (pep_dll_extra_pe_debug)
+ {
+ bfd *a;
+ struct bfd_link_hash_entry *sym;
+
+ printf ("%s()\n", __FUNCTION__);
+
+ for (sym = link_info.hash->undefs; sym; sym=sym->u.undef.next)
+ printf ("-%s\n", sym->root.string);
+ bfd_hash_traverse (&link_info.hash->table, pr_sym, NULL);
+
+ for (a = link_info.input_bfds; a; a = a->link_next)
+ printf ("*%s\n",a->filename);
+ }
+#endif
+
+ /* Pass the wacky PE command line options into the output bfd.
+ FIXME: This should be done via a function, rather than by
+ including an internal BFD header. */
+
+ if (coff_data (output_bfd) == NULL || coff_data (output_bfd)->pe == 0)
+ einfo (_("%F%P: cannot perform PE operations on non PE output file '%B'.\n"), output_bfd);
+
+ pe_data (output_bfd)->pe_opthdr = pep;
+ pe_data (output_bfd)->dll = init[DLLOFF].value;
+ pe_data (output_bfd)->real_flags |= real_flags;
+
+#ifdef DLL_SUPPORT
+ if (pep_enable_stdcall_fixup) /* -1=warn or 1=disable */
+ pep_fixup_stdcalls ();
+
+ pep_process_import_defs (output_bfd, & link_info);
+
+ pep_find_data_imports ();
+
+#ifndef TARGET_IS_i386pep
+ if (link_info.shared)
+#else
+ if (!link_info.relocatable)
+#endif
+ pep_dll_build_sections (output_bfd, &link_info);
+
+#ifndef TARGET_IS_i386pep
+ else
+ pep_exe_build_sections (output_bfd, &link_info);
+#endif
+#endif /* DLL_SUPPORT */
+
+ {
+ /* This next chunk of code tries to detect the case where you have
+ two import libraries for the same DLL (specifically,
+ symbolically linking libm.a and libc.a in cygwin to
+ libcygwin.a). In those cases, it's possible for function
+ thunks from the second implib to be used but without the
+ head/tail objects, causing an improper import table. We detect
+ those cases and rename the "other" import libraries to match
+ the one the head/tail come from, so that the linker will sort
+ things nicely and produce a valid import table. */
+
+ LANG_FOR_EACH_INPUT_STATEMENT (is)
+ {
+ if (is->the_bfd->my_archive)
+ {
+ int idata2 = 0, reloc_count=0, is_imp = 0;
+ asection *sec;
+
+ /* See if this is an import library thunk. */
+ for (sec = is->the_bfd->sections; sec; sec = sec->next)
+ {
+ if (strcmp (sec->name, ".idata\$2") == 0)
+ idata2 = 1;
+ if (CONST_STRNEQ (sec->name, ".idata\$"))
+ is_imp = 1;
+ reloc_count += sec->reloc_count;
+ }
+
+ if (is_imp && !idata2 && reloc_count)
+ {
+ /* It is, look for the reference to head and see if it's
+ from our own library. */
+ for (sec = is->the_bfd->sections; sec; sec = sec->next)
+ {
+ int i;
+ long 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 = xmalloc (symsize);
+ symsize = bfd_canonicalize_symtab (is->the_bfd, symbols);
+ if (symsize < 0)
+ {
+ einfo ("%X%P: unable to process symbols: %E");
+ return;
+ }
+
+ relocs = xmalloc ((size_t) relsize);
+ nrelocs = bfd_canonicalize_reloc (is->the_bfd, sec,
+ relocs, symbols);
+ if (nrelocs < 0)
+ {
+ free (relocs);
+ einfo ("%X%P: unable to process relocs: %E");
+ 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)
+{
+ 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)
+ {
+ pep_def_file = def_file_parse (entry->filename, pep_def_file);
+
+ if (pep_def_file)
+ {
+ int i, buflen=0, len;
+ char *buf;
+
+ for (i = 0; i < pep_def_file->num_exports; i++)
+ {
+ len = strlen (pep_def_file->exports[i].internal_name);
+ if (buflen < len + 2)
+ buflen = len + 2;
+ }
+
+ buf = xmalloc (buflen);
+
+ for (i = 0; i < pep_def_file->num_exports; i++)
+ {
+ struct bfd_link_hash_entry *h;
+
+ sprintf (buf, "_%s", pep_def_file->exports[i].internal_name);
+
+ h = bfd_link_hash_lookup (link_info.hash, buf, TRUE, TRUE, TRUE);
+ if (h == (struct bfd_link_hash_entry *) NULL)
+ einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
+ if (h->type == bfd_link_hash_new)
+ {
+ h->type = bfd_link_hash_undefined;
+ h->u.undef.abfd = NULL;
+ bfd_link_add_undef (link_info.hash, h);
+ }
+ }
+ free (buf);
+
+ /* def_file_print (stdout, pep_def_file); */
+ if (pep_def_file->is_dll == 1)
+ link_info.shared = 1;
+
+ if (pep_def_file->base_address != (bfd_vma)(-1))
+ {
+ pep.ImageBase =
+ pe_data (output_bfd)->pe_opthdr.ImageBase =
+ init[IMAGEBASEOFF].value = pep_def_file->base_address;
+ init[IMAGEBASEOFF].inited = 1;
+ if (image_base_statement)
+ image_base_statement->exp =
+ exp_assop ('=', "__image_base__", exp_intop (pep.ImageBase));
+ }
+
+ if (pep_def_file->stack_reserve != -1
+ && ! saw_option ("__size_of_stack_reserve__"))
+ {
+ pep.SizeOfStackReserve = pep_def_file->stack_reserve;
+ if (pep_def_file->stack_commit != -1)
+ pep.SizeOfStackCommit = pep_def_file->stack_commit;
+ }
+ if (pep_def_file->heap_reserve != -1
+ && ! saw_option ("__size_of_heap_reserve__"))
+ {
+ pep.SizeOfHeapReserve = pep_def_file->heap_reserve;
+ if (pep_def_file->heap_commit != -1)
+ pep.SizeOfHeapCommit = pep_def_file->heap_commit;
+ }
+ return TRUE;
+ }
+ }
+#endif
+ return FALSE;
+}
+
+static bfd_boolean
+gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
+{
+#ifdef DLL_SUPPORT
+#ifdef TARGET_IS_i386pep
+ pep_dll_id_target ("pei-x86-64");
+#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 pep_implied_import_dll (fbuf);
+ }
+#endif
+ return FALSE;
+}
+
+static void
+gld_${EMULATION_NAME}_finish (void)
+{
+ finish_default ();
+
+#ifdef DLL_SUPPORT
+ if (link_info.shared
+ || (!link_info.relocatable && pep_def_file->num_exports != 0))
+ {
+ pep_dll_fill_sections (output_bfd, &link_info);
+ if (pep_implib_filename)
+ pep_dll_generate_implib (pep_def_file, pep_implib_filename);
+ }
+
+ if (pep_out_def_filename)
+ pep_dll_generate_def_file (pep_out_def_filename);
+#endif /* DLL_SUPPORT */
+
+ /* I don't know where .idata gets set as code, but it shouldn't be. */
+ {
+ asection *asec = bfd_get_section_by_name (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)
+{
+ static const struct
+ {
+ const char * format;
+ bfd_boolean use_prefix;
+ }
+ libname_fmt [] =
+ {
+ /* Preferred explicit import library for dll's. */
+ { "lib%s.dll.a", FALSE },
+ /* Alternate explicit import library for dll's. */
+ { "%s.dll.a", FALSE },
+ /* "libfoo.a" could be either an import lib or a static lib.
+ For backwards compatibility, libfoo.a needs to precede
+ libfoo.dll and foo.dll in the search. */
+ { "lib%s.a", FALSE },
+ /* The 'native' spelling of an import lib name is "foo.lib". */
+ { "%s.lib", FALSE },
+#ifdef DLL_SUPPORT
+ /* Try "<prefix>foo.dll" (preferred dll name, if specified). */
+ { "%s%s.dll", TRUE },
+#endif
+ /* Try "libfoo.dll" (default preferred dll name). */
+ { "lib%s.dll", FALSE },
+ /* Finally try 'native' dll name "foo.dll". */
+ { "%s.dll", FALSE },
+ /* Note: If adding more formats to this table, make sure to check to
+ see if their length is longer than libname_fmt[0].format, and if
+ so, update the call to xmalloc() below. */
+ { NULL, FALSE }
+ };
+ static unsigned int format_max_len = 0;
+ const char * filename;
+ char * full_string;
+ char * base_string;
+ unsigned int i;
+
+
+ if (! entry->is_archive)
+ return FALSE;
+
+ filename = entry->filename;
+
+ if (format_max_len == 0)
+ /* We need to allow space in the memory that we are going to allocate
+ for the characters in the format string. Since the format array is
+ static we only need to calculate this information once. In theory
+ this value could also be computed statically, but this introduces
+ the possibility for a discrepancy and hence a possible memory
+ corruption. The lengths we compute here will be too long because
+ they will include any formating characters (%s) in the strings, but
+ this will not matter. */
+ for (i = 0; libname_fmt[i].format; i++)
+ if (format_max_len < strlen (libname_fmt[i].format))
+ format_max_len = strlen (libname_fmt[i].format);
+
+ full_string = xmalloc (strlen (search->name)
+ + strlen (filename)
+ + format_max_len
+#ifdef DLL_SUPPORT
+ + (pep_dll_search_prefix
+ ? strlen (pep_dll_search_prefix) : 0)
+#endif
+ /* Allow for the terminating NUL and for the path
+ separator character that is inserted between
+ search->name and the start of the format string. */
+ + 2);
+
+ sprintf (full_string, "%s/", search->name);
+ base_string = full_string + strlen (full_string);
+
+ for (i = 0; libname_fmt[i].format; i++)
+ {
+#ifdef DLL_SUPPORT
+ if (libname_fmt[i].use_prefix)
+ {
+ if (!pep_dll_search_prefix)
+ continue;
+ sprintf (base_string, libname_fmt[i].format, pep_dll_search_prefix, filename);
+ }
+ else
+#endif
+ sprintf (base_string, libname_fmt[i].format, filename);
+
+ if (ldfile_try_open_bfd (full_string, entry))
+ break;
+ }
+
+ if (!libname_fmt[i].format)
+ {
+ free (full_string);
+ return FALSE;
+ }
+
+ entry->filename = full_string;
+
+ return TRUE;
+}
+
+static int
+gld_${EMULATION_NAME}_find_potential_libraries
+ (char *name, lang_input_statement_type *entry)
+{
+ return ldfile_open_file_search (name, entry, "", ".lib");
+}
+
+static char *
+gld_${EMULATION_NAME}_get_script (int *isfile)
+EOF
+# Scripts compiled in.
+# sed commands to quote an ld script as a C string.
+sc="-f stringify.sed"
+
+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/ld/emultempl/ppc32elf.em b/ld/emultempl/ppc32elf.em
index 10f91074dfec..b0239e0b76a5 100644
--- a/ld/emultempl/ppc32elf.em
+++ b/ld/emultempl/ppc32elf.em
@@ -1,5 +1,5 @@
# This shell script emits a C file. -*- C -*-
-# Copyright 2003, 2005 Free Software Foundation, Inc.
+# Copyright 2003, 2005, 2007 Free Software Foundation, Inc.
#
# This file is part of GLD, the Gnu Linker.
#
@@ -45,7 +45,7 @@ static int notlsopt = 0;
static int emit_stub_syms = 0;
/* Chooses the correct place for .plt and .got. */
-static int old_plt = 0;
+static enum ppc_elf_plt_type plt_style = PLT_UNSET;
static int old_got = 0;
static void
@@ -62,7 +62,7 @@ ppc_after_open (void)
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,
+ new_plt = ppc_elf_select_plt_layout (output_bfd, &link_info, plt_style,
emit_stub_syms);
if (new_plt < 0)
einfo ("%X%P: select_plt_layout problem %E\n");
@@ -124,19 +124,40 @@ ppc_before_allocation (void)
EOF
+if grep -q 'ld_elf32_spu_emulation' ldemul-list.h; then
+ cat >>e${EMULATION_NAME}.c <<EOF
+/* Special handling for embedded SPU executables. */
+extern bfd_boolean embedded_spu_file (lang_input_statement_type *, const char *);
+static bfd_boolean gld${EMULATION_NAME}_load_symbols (lang_input_statement_type *);
+
+static bfd_boolean
+ppc_recognized_file (lang_input_statement_type *entry)
+{
+ if (embedded_spu_file (entry, "-m32"))
+ return TRUE;
+
+ return gld${EMULATION_NAME}_load_symbols (entry);
+}
+
+EOF
+LDEMUL_RECOGNIZED_FILE=ppc_recognized_file
+fi
+
# Define some shell vars to insert bits of code into the standard elf
# parse_args and list_options functions.
#
PARSE_AND_LIST_PROLOGUE='
#define OPTION_NO_TLS_OPT 301
-#define OPTION_OLD_PLT 302
-#define OPTION_OLD_GOT 303
-#define OPTION_STUBSYMS 304
+#define OPTION_NEW_PLT 302
+#define OPTION_OLD_PLT 303
+#define OPTION_OLD_GOT 304
+#define OPTION_STUBSYMS 305
'
PARSE_AND_LIST_LONGOPTS='
{ "emit-stub-syms", no_argument, NULL, OPTION_STUBSYMS },
{ "no-tls-optimize", no_argument, NULL, OPTION_NO_TLS_OPT },
+ { "secure-plt", no_argument, NULL, OPTION_NEW_PLT },
{ "bss-plt", no_argument, NULL, OPTION_OLD_PLT },
{ "sdata-got", no_argument, NULL, OPTION_OLD_GOT },
'
@@ -145,6 +166,7 @@ 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\
+ --secure-plt Use new-style PLT if possible.\n\
--bss-plt Force old-style BSS PLT.\n\
--sdata-got Force GOT location just before .sdata.\n"
));
@@ -159,8 +181,12 @@ PARSE_AND_LIST_ARGS_CASES='
notlsopt = 1;
break;
+ case OPTION_NEW_PLT:
+ plt_style = PLT_NEW;
+ break;
+
case OPTION_OLD_PLT:
- old_plt = 1;
+ plt_style = PLT_OLD;
break;
case OPTION_OLD_GOT:
diff --git a/ld/emultempl/ppc64elf.em b/ld/emultempl/ppc64elf.em
index ea337712ed1c..9372f88d3d3d 100644
--- a/ld/emultempl/ppc64elf.em
+++ b/ld/emultempl/ppc64elf.em
@@ -225,7 +225,7 @@ ppc_add_stub_section (const char *stub_sec_name, asection *input_section)
goto err_ret;
flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
- | SEC_HAS_CONTENTS | SEC_RELOC | SEC_IN_MEMORY | SEC_KEEP);
+ | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_KEEP);
if (!bfd_set_section_flags (stub_file->the_bfd, stub_sec, flags))
goto err_ret;
@@ -258,9 +258,8 @@ 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 ();
+ gld${EMULATION_NAME}_map_segments (TRUE);
+ need_laying_out = -1;
}
@@ -311,7 +310,7 @@ build_section_lists (lang_statement_union_type *statement)
/* Final emulation specific call. */
static void
-ppc_finish (void)
+gld${EMULATION_NAME}_finish (void)
{
/* e_entry on PowerPC64 points to the function descriptor for
_start. If _start is missing, default to the first function
@@ -353,8 +352,8 @@ ppc_finish (void)
}
}
- if (need_laying_out)
- ppc_layout_sections_again ();
+ if (need_laying_out != -1)
+ gld${EMULATION_NAME}_map_segments (need_laying_out);
if (link_info.relocatable)
{
@@ -415,17 +414,22 @@ gld${EMULATION_NAME}_new_vers_pattern (struct bfd_elf_version_expr *entry)
unsigned int len;
char *dot_pat;
- if (!dotsyms || entry->pattern[0] == '*' || entry->pattern[0] == '.')
+ if (!dotsyms
+ || (entry->pattern != NULL
+ && (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->pattern != NULL)
+ {
+ 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;
@@ -460,6 +464,24 @@ ppc_lang_for_each_input_file (void (*func) (lang_input_statement_type *))
EOF
+if grep -q 'ld_elf32_spu_emulation' ldemul-list.h; then
+ cat >>e${EMULATION_NAME}.c <<EOF
+/* Special handling for embedded SPU executables. */
+extern bfd_boolean embedded_spu_file (lang_input_statement_type *, const char *);
+static bfd_boolean gld${EMULATION_NAME}_load_symbols (lang_input_statement_type *);
+
+static bfd_boolean
+ppc64_recognized_file (lang_input_statement_type *entry)
+{
+ if (embedded_spu_file (entry, "-m64"))
+ return TRUE;
+
+ return gld${EMULATION_NAME}_load_symbols (entry);
+}
+EOF
+LDEMUL_RECOGNIZED_FILE=ppc64_recognized_file
+fi
+
# Define some shell vars to insert bits of code into the standard elf
# parse_args and list_options functions.
#
@@ -574,6 +596,6 @@ PARSE_AND_LIST_ARGS_CASES='
#
LDEMUL_BEFORE_ALLOCATION=ppc_before_allocation
LDEMUL_AFTER_ALLOCATION=gld${EMULATION_NAME}_after_allocation
-LDEMUL_FINISH=ppc_finish
+LDEMUL_FINISH=gld${EMULATION_NAME}_finish
LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=ppc_create_output_section_statements
LDEMUL_NEW_VERS_PATTERN=gld${EMULATION_NAME}_new_vers_pattern
diff --git a/ld/emultempl/scoreelf.em b/ld/emultempl/scoreelf.em
new file mode 100644
index 000000000000..a529a1b704dd
--- /dev/null
+++ b/ld/emultempl/scoreelf.em
@@ -0,0 +1,74 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2006 Free Software Foundation, Inc.
+# Contributed by:
+# Mei Ligang (ligang@sunnorth.com.cn)
+# Pei-Lin Tsai (pltsai@sunplus.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 is sourced from elf32.em, and defines extra score-elf
+# specific routines.
+#
+cat >>e${EMULATION_NAME}.c <<EOF
+
+static void
+gld${EMULATION_NAME}_before_parse ()
+{
+#ifndef TARGET_ /* I.e., if not generic. */
+ ldfile_set_output_arch ("`echo ${ARCH}`");
+#endif /* not TARGET_ */
+ config.dynamic_link = ${DYNAMIC_LINK-true};
+ config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo true ; else echo false ; fi`;
+}
+
+static void
+score_elf_after_open (void)
+{
+ if (strstr (bfd_get_target (output_bfd), "score") == NULL)
+ {
+ /* The score backend needs special fields in the output hash structure.
+ These will only be created if the output format is an score format,
+ hence we do not support linking and changing output formats at the
+ same time. Use a link followed by objcopy to change output formats. */
+ einfo ("%F%X%P: error: cannot change output format whilst linking S+core binaries\n");
+ return;
+ }
+
+ /* Call the standard elf routine. */
+ gld${EMULATION_NAME}_after_open ();
+}
+
+EOF
+
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+PARSE_AND_LIST_PROLOGUE=''
+PARSE_AND_LIST_SHORTOPTS=
+PARSE_AND_LIST_LONGOPTS=''
+PARSE_AND_LIST_OPTIONS=''
+PARSE_AND_LIST_ARGS_CASES=''
+
+# We have our own after_open and before_allocation functions, but they call
+# the standard routines, so give them a different name.
+LDEMUL_AFTER_OPEN=score_elf_after_open
+
+# Replace the elf before_parse function with our own.
+LDEMUL_BEFORE_PARSE=gld"${EMULATION_NAME}"_before_parse
+
diff --git a/ld/emultempl/spu_ovl.S b/ld/emultempl/spu_ovl.S
new file mode 100644
index 000000000000..adc6ab22a776
--- /dev/null
+++ b/ld/emultempl/spu_ovl.S
@@ -0,0 +1,294 @@
+/* Overlay manager for SPU.
+
+ Copyright 2006, 2007 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. */
+
+/**
+ * MFC DMA defn's.
+ */
+#define MFC_GET_CMD 0x40
+#define MFC_MAX_DMA_SIZE 0x4000
+#define MFC_TAG_UPDATE_ALL 2
+#define MFC_TAG_ID 0
+
+
+/**
+ * Temporary register allocations.
+ * These are saved/restored here.
+ */
+#define tab $75
+#define cgbits $75
+#define add64 $75
+#define ealo $75
+#define newmask $75
+#define tagstat $75
+#define bchn $75
+#define rv1 $75
+
+#define off $76
+#define off64 $76
+#define maxsize $76
+#define oldmask $76
+#define sz $76
+#define lnkr $76
+#define rv2 $76
+
+#define cur $77
+#define cmp $77
+#define buf $77
+#define genwi $77
+#define tagid $77
+#define cmd $77
+#define rv3 $77
+
+#define cgshuf $78
+
+#define vma $6
+
+#define map $7
+#define osize $7
+#define cmp2 $7
+
+#define ea64 $8
+#define retval $8
+
+#ifdef OVLY_IRQ_SAVE
+#define irqtmp $8
+#define irq_stat $9
+#endif
+
+ .extern _ovly_table
+ .extern _ovly_buf_table
+
+ .text
+ .align 4
+ .type __rv_pattern, @object
+ .size __rv_pattern, 16
+__rv_pattern:
+ .word 0x00010203, 0x1c1d1e1f, 0x00010203, 0x10111213
+ .type __cg_pattern, @object
+ .size __cg_pattern, 16
+__cg_pattern:
+ .word 0x04050607, 0x80808080, 0x80808080, 0x80808080
+
+/**
+ * __ovly_return - stub for returning from overlay functions.
+ *
+ * inputs:
+ * $lr link register
+ *
+ * outputs:
+ * $78 old partition number, to be reloaded
+ * $79 return address in old partion number
+ */
+ .global __ovly_return
+ .type __ovly_return, @function
+
+ .word 0
+__ovly_return:
+ shlqbyi $78, $lr, 4
+ shlqbyi $79, $lr, 8
+ biz $78, $79
+ .size __ovly_return, . - __ovly_return
+
+/**
+ * __ovly_load - copy an overlay partion to local store.
+ *
+ * inputs:
+ * $78 partition number to be loaded.
+ * $79 branch target in new partition.
+ * $lr link register, containing return addr.
+ *
+ * outputs:
+ * $lr new link register, returning through __ovly_return.
+ *
+ * Copy a new overlay partition into local store, or return
+ * immediately if the partition is already resident.
+ */
+ .global __ovly_load
+ .type __ovly_load, @function
+
+__ovly_load:
+/* Save temporary registers to stack. */
+ stqd $6, -16($sp)
+ stqd $7, -32($sp)
+ stqd $8, -48($sp)
+
+#ifdef OVLY_IRQ_SAVE
+/* Save irq state, then disable interrupts. */
+ stqd $9, -64($sp)
+ ila irqtmp, __ovly_irq_save
+ rdch irq_stat, $SPU_RdMachStat
+ bid irqtmp
+__ovly_irq_save:
+#endif
+
+/* Set branch hint to overlay target. */
+ hbr __ovly_load_ret, $79
+
+/* Get caller's overlay index by back chaining through stack frames.
+ * Loop until end of stack (back chain all-zeros) or
+ * encountered a link register we set here. */
+ lqd bchn, 0($sp)
+ ila retval, __ovly_return
+
+__ovly_backchain_loop:
+ lqd lnkr, 16(bchn)
+ lqd bchn, 0(bchn)
+ ceq cmp, lnkr, retval
+ ceqi cmp2, bchn, 0
+ or cmp, cmp, cmp2
+ brz cmp, __ovly_backchain_loop
+
+/* If we reached the zero back-chain, then lnkr is bogus. Clear the
+ * part of lnkr that we use later (slot 3). */
+ rotqbyi cmp2, cmp2, 4
+ andc lnkr, lnkr, cmp2
+
+/* Set lr = {__ovly_return, prev ovl ndx, caller return adr, callee ovl ndx}. */
+ lqd rv1, (__rv_pattern-__ovly_return+4)(retval)
+ shufb rv2, retval, lnkr, rv1
+ shufb rv3, $lr, $78, rv1
+ fsmbi rv1, 0xff
+ selb rv2, rv2, rv3, rv1
+/* If we have a tail call from one overlay function to another overlay,
+ then lr is already set up. Don't change it. */
+ ceq rv1, $lr, retval
+ fsmb rv1, rv1
+ selb $lr, rv2, $lr, rv1
+
+/* Branch to $79 if non-overlay */
+ brz $78, __ovly_load_restore
+
+/* Load values from _ovly_table[$78].
+ * extern struct {
+ * u32 vma;
+ * u32 size;
+ * u32 file_offset;
+ * u32 buf;
+ * } _ovly_table[];
+ */
+ shli off, $78, 4
+ ila tab, _ovly_table - 16
+ lqx vma, tab, off
+ rotqbyi buf, vma, 12
+
+/* Load values from _ovly_buf_table[buf].
+ * extern struct {
+ * u32 mapped;
+ * } _ovly_buf_table[];
+ */
+ ila tab, _ovly_buf_table
+ ai off, buf, -1
+ shli off, off, 2
+ lqx map, tab, off
+ rotqby cur, map, off
+
+/* Branch to $79 now if overlay is already mapped. */
+ ceq cmp, $78, cur
+ brnz cmp, __ovly_load_restore
+
+/* Marker for profiling code. If we get here, we are about to load
+ * a new overlay.
+ */
+ .global __ovly_load_event
+ .type __ovly_load_event, @function
+__ovly_load_event:
+
+/* Set _ovly_buf_table[buf].mapped = $78. */
+ cwx genwi, tab, off
+ shufb map, $78, map, genwi
+ stqx map, tab, off
+
+/* A new partition needs to be loaded. Prepare for DMA loop.
+ * _EAR_ is the 64b base EA, filled in at run time by the
+ * loader, and indicating the value for SPU executable image start.
+ */
+ lqd cgshuf, (__cg_pattern-__ovly_return+4)(retval)
+ rotqbyi osize, vma, 4
+ rotqbyi sz, vma, 8
+ lqa ea64, _EAR_
+
+__ovly_xfer_loop:
+/* 64b add to compute next ea64. */
+ rotqmbyi off64, sz, -4
+ cg cgbits, ea64, off64
+ shufb add64, cgbits, cgbits, cgshuf
+ addx add64, ea64, off64
+ ori ea64, add64, 0
+
+/* Setup DMA parameters, then issue DMA request. */
+ rotqbyi ealo, add64, 4
+ ila maxsize, MFC_MAX_DMA_SIZE
+ cgt cmp, osize, maxsize
+ selb sz, osize, maxsize, cmp
+ ila tagid, MFC_TAG_ID
+ wrch $MFC_LSA, vma
+ wrch $MFC_EAH, ea64
+ wrch $MFC_EAL, ealo
+ wrch $MFC_Size, sz
+ wrch $MFC_TagId, tagid
+ ila cmd, MFC_GET_CMD
+ wrch $MFC_Cmd, cmd
+
+/* Increment vma, decrement size, branch back as needed. */
+ a vma, vma, sz
+ sf osize, sz, osize
+ brnz osize, __ovly_xfer_loop
+
+/* Save app's tagmask, wait for DMA complete, restore mask. */
+ rdch oldmask, $MFC_RdTagMask
+#if MFC_TAG_ID < 16
+ ilh newmask, 1 << MFC_TAG_ID
+#else
+ ilhu newmask, 1 << (MFC_TAG_ID - 16)
+#endif
+ wrch $MFC_WrTagMask, newmask
+ ila tagstat, MFC_TAG_UPDATE_ALL
+ wrch $MFC_WrTagUpdate, tagstat
+ rdch tagstat, $MFC_RdTagStat
+ sync
+ wrch $MFC_WrTagMask, oldmask
+
+ .global _ovly_debug_event
+ .type _ovly_debug_event, @function
+_ovly_debug_event:
+/* GDB inserts debugger trap here. */
+ nop
+
+__ovly_load_restore:
+#ifdef OVLY_IRQ_SAVE
+/* Conditionally re-enable interrupts. */
+ andi irq_stat, irq_stat, 1
+ ila irqtmp, __ovly_irq_restore
+ binze irq_stat, irqtmp
+__ovly_irq_restore:
+ lqd $9, -64($sp)
+#endif
+
+/* Restore saved registers. */
+ lqd $8, -48($sp)
+ lqd $7, -32($sp)
+ lqd $6, -16($sp)
+
+__ovly_load_ret:
+/* Branch to target address. */
+ bi $79
+
+ .size __ovly_load, . - __ovly_load
diff --git a/ld/emultempl/spu_ovl.o b/ld/emultempl/spu_ovl.o
new file mode 100644
index 000000000000..a68eea3970aa
--- /dev/null
+++ b/ld/emultempl/spu_ovl.o
Binary files differ
diff --git a/ld/emultempl/spuelf.em b/ld/emultempl/spuelf.em
new file mode 100644
index 000000000000..05adeb8582c6
--- /dev/null
+++ b/ld/emultempl/spuelf.em
@@ -0,0 +1,504 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2006, 2007 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 spu specific
+# features.
+#
+cat >>e${EMULATION_NAME}.c <<EOF
+#include "ldctor.h"
+#include "elf32-spu.h"
+
+/* Non-zero if no overlay processing should be done. */
+static int no_overlays = 0;
+
+/* Non-zero if we want stubs on all calls out of overlay regions. */
+static int non_overlay_stubs = 0;
+
+/* Whether to emit symbols for stubs. */
+static int emit_stub_syms = 0;
+
+/* Non-zero to perform stack space analysis. */
+static int stack_analysis = 0;
+
+/* Whether to emit symbols with stack requirements for each function. */
+static int emit_stack_syms = 0;
+
+/* Range of valid addresses for loadable sections. */
+static bfd_vma local_store_lo = 0;
+static bfd_vma local_store_hi = 0x3ffff;
+
+static const char ovl_mgr[] = {
+EOF
+
+../binutils/bin2c < ${srcdir}/emultempl/spu_ovl.o >> e${EMULATION_NAME}.c
+
+cat >>e${EMULATION_NAME}.c <<EOF
+};
+
+static const struct _ovl_stream ovl_mgr_stream = {
+ ovl_mgr,
+ ovl_mgr + sizeof (ovl_mgr)
+};
+
+static asection *toe = NULL;
+
+
+static int
+is_spu_target (void)
+{
+ extern const bfd_target bfd_elf32_spu_vec;
+
+ return link_info.hash->creator == &bfd_elf32_spu_vec;
+}
+
+/* Create our note section. */
+
+static void
+spu_after_open (void)
+{
+ if (is_spu_target ()
+ && !link_info.relocatable
+ && link_info.input_bfds != NULL
+ && !spu_elf_create_sections (output_bfd, &link_info,
+ stack_analysis, emit_stack_syms))
+ einfo ("%X%P: can not create note section: %E\n");
+
+ gld${EMULATION_NAME}_after_open ();
+}
+
+/* Add section S at the end of output section OUTPUT_NAME.
+
+ Really, we should be duplicating ldlang.c map_input_to_output_sections
+ logic here, ie. using the linker script to find where the section
+ goes. That's rather a lot of code, and we don't want to run
+ map_input_to_output_sections again because most sections are already
+ mapped. So cheat, and put the section in a fixed place, ignoring any
+ attempt via a linker script to put .stub, .ovtab, and built-in
+ overlay manager code somewhere else. */
+
+static void
+spu_place_special_section (asection *s, const char *output_name)
+{
+ lang_output_section_statement_type *os;
+
+ os = lang_output_section_find (output_name);
+ if (os == NULL)
+ {
+ const char *save = s->name;
+ s->name = output_name;
+ gld${EMULATION_NAME}_place_orphan (s);
+ s->name = save;
+ }
+ else
+ lang_add_section (&os->children, s, os);
+
+ s->output_section->size += s->size;
+}
+
+/* Load built-in overlay manager, and tweak overlay section alignment. */
+
+static void
+spu_elf_load_ovl_mgr (void)
+{
+ lang_output_section_statement_type *os;
+ struct elf_link_hash_entry *h;
+
+ h = elf_link_hash_lookup (elf_hash_table (&link_info),
+ "__ovly_load", FALSE, FALSE, FALSE);
+
+ if (h != NULL
+ && (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ && h->def_regular)
+ {
+ /* User supplied __ovly_load. */
+ }
+ else if (ovl_mgr_stream.start == ovl_mgr_stream.end)
+ einfo ("%F%P: no built-in overlay manager\n");
+ else
+ {
+ lang_input_statement_type *ovl_is;
+
+ ovl_is = lang_add_input_file ("builtin ovl_mgr",
+ lang_input_file_is_file_enum,
+ NULL);
+
+ if (!spu_elf_open_builtin_lib (&ovl_is->the_bfd, &ovl_mgr_stream))
+ einfo ("%X%P: can not open built-in overlay manager: %E\n");
+ else
+ {
+ asection *in;
+
+ if (!load_symbols (ovl_is, NULL))
+ einfo ("%X%P: can not load built-in overlay manager: %E\n");
+
+ /* Map overlay manager sections to output sections. */
+ for (in = ovl_is->the_bfd->sections; in != NULL; in = in->next)
+ if ((in->flags & (SEC_ALLOC | SEC_LOAD))
+ == (SEC_ALLOC | SEC_LOAD))
+ spu_place_special_section (in, ".text");
+ }
+ }
+
+ /* Ensure alignment of overlay sections is sufficient. */
+ for (os = &lang_output_section_statement.head->output_section_statement;
+ os != NULL;
+ os = os->next)
+ if (os->bfd_section != NULL
+ && spu_elf_section_data (os->bfd_section) != NULL
+ && spu_elf_section_data (os->bfd_section)->ovl_index != 0)
+ {
+ if (os->bfd_section->alignment_power < 4)
+ os->bfd_section->alignment_power = 4;
+
+ /* Also ensure size rounds up. */
+ os->block_value = 16;
+ }
+}
+
+/* Go find if we need to do anything special for overlays. */
+
+static void
+spu_before_allocation (void)
+{
+ if (is_spu_target ()
+ && !link_info.relocatable
+ && !no_overlays)
+ {
+ /* Size the sections. This is premature, but we need to know the
+ rough layout so that overlays can be found. */
+ expld.phase = lang_mark_phase_enum;
+ expld.dataseg.phase = exp_dataseg_none;
+ one_lang_size_sections_pass (NULL, TRUE);
+
+ /* Find overlays by inspecting section vmas. */
+ if (spu_elf_find_overlays (output_bfd, &link_info))
+ {
+ asection *stub, *ovtab;
+
+ if (!spu_elf_size_stubs (output_bfd, &link_info, non_overlay_stubs,
+ stack_analysis, &stub, &ovtab, &toe))
+ einfo ("%X%P: can not size overlay stubs: %E\n");
+
+ if (stub != NULL)
+ {
+ spu_place_special_section (stub, ".text");
+ spu_place_special_section (ovtab, ".data");
+ spu_place_special_section (toe, ".toe");
+
+ spu_elf_load_ovl_mgr ();
+ }
+ }
+
+ /* We must not cache anything from the preliminary sizing. */
+ lang_reset_memory_regions ();
+ }
+
+ gld${EMULATION_NAME}_before_allocation ();
+}
+
+/* Final emulation specific call. */
+
+static void
+gld${EMULATION_NAME}_finish (void)
+{
+ int need_laying_out;
+
+ need_laying_out = bfd_elf_discard_info (output_bfd, &link_info);
+
+ gld${EMULATION_NAME}_map_segments (need_laying_out);
+
+ if (is_spu_target () && local_store_lo < local_store_hi)
+ {
+ asection *s;
+
+ s = spu_elf_check_vma (output_bfd, local_store_lo, local_store_hi);
+ if (s != NULL)
+ einfo ("%X%P: %A exceeds local store range\n", s);
+ }
+
+ if (toe != NULL
+ && !spu_elf_build_stubs (&link_info,
+ emit_stub_syms || link_info.emitrelocations,
+ toe))
+ einfo ("%X%P: can not build overlay stubs: %E\n");
+
+ finish_default ();
+}
+
+EOF
+
+if grep -q 'ld_elf.*ppc.*_emulation' ldemul-list.h; then
+ cat >>e${EMULATION_NAME}.c <<EOF
+#include "filenames.h"
+#include <fcntl.h>
+#include <sys/wait.h>
+
+struct tflist {
+ struct tflist *next;
+ char name[9];
+};
+
+static struct tflist *tmp_file_list;
+
+static void clean_tmp (void)
+{
+ for (; tmp_file_list != NULL; tmp_file_list = tmp_file_list->next)
+ unlink (tmp_file_list->name);
+}
+
+static const char *
+base_name (const char *path)
+{
+ const char *file = strrchr (path, '/');
+#ifdef HAVE_DOS_BASED_FILE_SYSTEM
+ {
+ char *bslash = strrchr (path, '\\\\');
+
+ if (file == NULL || (bslash != NULL && bslash > file))
+ file = bslash;
+ if (file == NULL
+ && path[0] != '\0'
+ && path[1] == ':')
+ file = path + 1;
+ }
+#endif
+ if (file == NULL)
+ file = path;
+ else
+ ++file;
+ return file;
+}
+
+/* This function is called when building a ppc32 or ppc64 executable
+ to handle embedded spu images. */
+extern bfd_boolean embedded_spu_file (lang_input_statement_type *, const char *);
+
+bfd_boolean
+embedded_spu_file (lang_input_statement_type *entry, const char *flags)
+{
+ const char *cmd[6];
+ const char *sym;
+ char *handle, *p;
+ struct tflist *tf;
+ char *oname;
+ int fd;
+ pid_t pid;
+ int status;
+ union lang_statement_union **old_stat_tail;
+ union lang_statement_union **old_file_tail;
+ union lang_statement_union *new_ent;
+ lang_input_statement_type *search;
+
+ if (entry->the_bfd->format != bfd_object
+ || strcmp (entry->the_bfd->xvec->name, "elf32-spu") != 0
+ || (entry->the_bfd->tdata.elf_obj_data->elf_header->e_type != ET_EXEC
+ && entry->the_bfd->tdata.elf_obj_data->elf_header->e_type != ET_DYN))
+ return FALSE;
+
+ /* Use the filename as the symbol marking the program handle struct. */
+ sym = base_name (entry->the_bfd->filename);
+
+ handle = xstrdup (sym);
+ for (p = handle; *p; ++p)
+ if (!(ISALNUM (*p) || *p == '$' || *p == '.'))
+ *p = '_';
+
+ if (tmp_file_list == NULL)
+ atexit (clean_tmp);
+ tf = xmalloc (sizeof (*tf));
+ tf->next = tmp_file_list;
+ tmp_file_list = tf;
+ oname = tf->name;
+ memcpy (tf->name, "ldXXXXXX", sizeof (tf->name));
+
+#ifdef HAVE_MKSTEMP
+ fd = mkstemp (oname);
+#else
+ oname = mktemp (oname);
+ if (oname == NULL)
+ return FALSE;
+ fd = open (oname, O_RDWR | O_CREAT | O_EXCL, 0600);
+#endif
+ if (fd == -1)
+ return FALSE;
+ close (fd);
+
+ for (search = (lang_input_statement_type *) input_file_chain.head;
+ search != NULL;
+ search = (lang_input_statement_type *) search->next_real_file)
+ {
+ const char *infile = base_name (search->filename);
+
+ if (infile != NULL
+ && strncmp (infile, "crtbegin", 8) == 0)
+ {
+ if (infile[8] == 'S')
+ flags = concat (flags, " -fPIC", NULL);
+ else if (infile[8] == 'T')
+ flags = concat (flags, " -fpie", NULL);
+ break;
+ }
+ }
+
+ /* Use fork() and exec() rather than system() so that we don't
+ need to worry about quoting args. */
+ cmd[0] = EMBEDSPU;
+ cmd[1] = flags;
+ cmd[2] = handle;
+ cmd[3] = entry->the_bfd->filename;
+ cmd[4] = oname;
+ cmd[5] = NULL;
+ if (trace_file_tries)
+ {
+ info_msg (_("running: %s \"%s\" \"%s\" \"%s\" \"%s\"\n"),
+ cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]);
+ fflush (stdout);
+ }
+
+ pid = fork ();
+ if (pid == -1)
+ return FALSE;
+ if (pid == 0)
+ {
+ execvp (cmd[0], (char *const *) cmd);
+ if (strcmp ("embedspu", EMBEDSPU) != 0)
+ {
+ cmd[0] = "embedspu";
+ execvp (cmd[0], (char *const *) cmd);
+ }
+ perror (cmd[0]);
+ _exit (127);
+ }
+#ifdef HAVE_WAITPID
+#define WAITFOR(PID, STAT) waitpid (PID, STAT, 0)
+#else
+#define WAITFOR(PID, STAT) wait (STAT)
+#endif
+ if (WAITFOR (pid, &status) != pid
+ || !WIFEXITED (status)
+ || WEXITSTATUS (status) != 0)
+ return FALSE;
+#undef WAITFOR
+
+ old_stat_tail = stat_ptr->tail;
+ old_file_tail = input_file_chain.tail;
+ if (lang_add_input_file (oname, lang_input_file_is_file_enum, NULL) == NULL)
+ return FALSE;
+
+ /* lang_add_input_file put the new list entry at the end of the statement
+ and input file lists. Move it to just after the current entry. */
+ new_ent = *old_stat_tail;
+ *old_stat_tail = NULL;
+ stat_ptr->tail = old_stat_tail;
+ *old_file_tail = NULL;
+ input_file_chain.tail = old_file_tail;
+ new_ent->header.next = entry->header.next;
+ entry->header.next = new_ent;
+ new_ent->input_statement.next_real_file = entry->next_real_file;
+ entry->next_real_file = new_ent;
+
+ /* Ensure bfd sections are excluded from the output. */
+ bfd_section_list_clear (entry->the_bfd);
+ entry->loaded = TRUE;
+ return TRUE;
+}
+
+EOF
+fi
+
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_SPU_PLUGIN 301
+#define OPTION_SPU_NO_OVERLAYS (OPTION_SPU_PLUGIN + 1)
+#define OPTION_SPU_STUB_SYMS (OPTION_SPU_NO_OVERLAYS + 1)
+#define OPTION_SPU_NON_OVERLAY_STUBS (OPTION_SPU_STUB_SYMS + 1)
+#define OPTION_SPU_LOCAL_STORE (OPTION_SPU_NON_OVERLAY_STUBS + 1)
+#define OPTION_SPU_STACK_ANALYSIS (OPTION_SPU_LOCAL_STORE + 1)
+#define OPTION_SPU_STACK_SYMS (OPTION_SPU_STACK_ANALYSIS + 1)
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "plugin", no_argument, NULL, OPTION_SPU_PLUGIN },
+ { "no-overlays", no_argument, NULL, OPTION_SPU_NO_OVERLAYS },
+ { "emit-stub-syms", no_argument, NULL, OPTION_SPU_STUB_SYMS },
+ { "extra-overlay-stubs", no_argument, NULL, OPTION_SPU_NON_OVERLAY_STUBS },
+ { "local-store", required_argument, NULL, OPTION_SPU_LOCAL_STORE },
+ { "stack-analysis", no_argument, NULL, OPTION_SPU_STACK_ANALYSIS },
+ { "emit-stack-syms", no_argument, NULL, OPTION_SPU_STACK_SYMS },
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _("\
+ --plugin Make SPU plugin.\n\
+ --no-overlays No overlay handling.\n\
+ --emit-stub-syms Add symbols on overlay call stubs.\n\
+ --extra-overlay-stubs Add stubs on all calls out of overlay regions.\n\
+ --local-store=lo:hi Valid address range.\n\
+ --stack-analysis Estimate maximum stack requirement.\n\
+ --emit-stack-syms Add __stack_func giving stack needed for each func.\n"
+ ));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_SPU_PLUGIN:
+ spu_elf_plugin (1);
+ break;
+
+ case OPTION_SPU_NO_OVERLAYS:
+ no_overlays = 1;
+ break;
+
+ case OPTION_SPU_STUB_SYMS:
+ emit_stub_syms = 1;
+ break;
+
+ case OPTION_SPU_NON_OVERLAY_STUBS:
+ non_overlay_stubs = 1;
+ break;
+
+ case OPTION_SPU_LOCAL_STORE:
+ {
+ char *end;
+ local_store_lo = strtoul (optarg, &end, 0);
+ if (*end == '\'':'\'')
+ {
+ local_store_hi = strtoul (end + 1, &end, 0);
+ if (*end == 0)
+ break;
+ }
+ einfo (_("%P%F: invalid --local-store address range `%s'\''\n"), optarg);
+ }
+ break;
+
+ case OPTION_SPU_STACK_ANALYSIS:
+ stack_analysis = 1;
+ break;
+
+ case OPTION_SPU_STACK_SYMS:
+ emit_stack_syms = 1;
+ break;
+'
+
+LDEMUL_AFTER_OPEN=spu_after_open
+LDEMUL_BEFORE_ALLOCATION=spu_before_allocation
+LDEMUL_FINISH=gld${EMULATION_NAME}_finish
diff --git a/ld/emultempl/sunos.em b/ld/emultempl/sunos.em
index a480558c9069..53a572a909d4 100644
--- a/ld/emultempl/sunos.em
+++ b/ld/emultempl/sunos.em
@@ -10,7 +10,7 @@ cat >e${EMULATION_NAME}.c <<EOF
/* 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.
+ 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain <sac@cygnus.com>
SunOS shared library support by Ian Lance Taylor <ian@cygnus.com>
@@ -32,8 +32,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define TARGET_IS_${EMULATION_NAME}
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libiberty.h"
#include "safe-ctype.h"
@@ -160,7 +160,7 @@ gld${EMULATION_NAME}_find_so (lang_input_statement_type *inp)
|| ! inp->dynamic)
return;
- ASSERT (strncmp (inp->local_sym_name, "-l", 2) == 0);
+ ASSERT (CONST_STRNEQ (inp->local_sym_name, "-l"));
for (search = search_head; search != NULL; search = search->next)
{
@@ -273,7 +273,7 @@ gld${EMULATION_NAME}_search_dir
const char *s;
int found_maj, found_min;
- if (strncmp (entry->d_name, "lib", 3) != 0
+ if (! CONST_STRNEQ (entry->d_name, "lib")
|| strncmp (entry->d_name + 3, filename, len) != 0)
continue;
@@ -288,7 +288,7 @@ gld${EMULATION_NAME}_search_dir
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)
+ if (! CONST_STRNEQ (entry->d_name + 3 + len, ".so"))
continue;
if (entry->d_name[6 + len] == '\0')
;
@@ -400,7 +400,7 @@ gld${EMULATION_NAME}_after_open (void)
if (global_found)
continue;
- if (strncmp (lname, "-l", 2) != 0)
+ if (! CONST_STRNEQ (lname, "-l"))
{
bfd *abfd;
@@ -586,7 +586,7 @@ gld${EMULATION_NAME}_check_needed (lang_input_statement_type *s)
{
if (s->filename == NULL)
return;
- if (strncmp (global_needed->name, "-l", 2) != 0)
+ if (! CONST_STRNEQ (global_needed->name, "-l"))
{
if (strcmp (s->filename, global_needed->name) == 0)
global_found = TRUE;
@@ -605,7 +605,7 @@ gld${EMULATION_NAME}_check_needed (lang_input_statement_type *s)
else
++sname;
- if (strncmp (sname, "lib", 3) != 0)
+ if (! CONST_STRNEQ (sname, "lib"))
return;
sname += 3;
diff --git a/ld/emultempl/ticoff.em b/ld/emultempl/ticoff.em
index 0382bbdd8658..113c2b42d7d0 100644
--- a/ld/emultempl/ticoff.em
+++ b/ld/emultempl/ticoff.em
@@ -3,7 +3,8 @@
(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.
+ Copyright 1999, 2000, 2002, 2003, 2004, 2007
+ 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
@@ -24,8 +25,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#define TARGET_IS_${EMULATION_NAME}
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "getopt.h"
diff --git a/ld/emultempl/vanilla.em b/ld/emultempl/vanilla.em
index 212485268734..ece005e8b6e4 100644
--- a/ld/emultempl/vanilla.em
+++ b/ld/emultempl/vanilla.em
@@ -2,7 +2,7 @@
# It does some substitutions.
cat >e${EMULATION_NAME}.c <<EOF
/* A vanilla emulation with no defaults
- Copyright 1991, 1992, 1994, 2000, 2001, 2002, 2003
+ Copyright 1991, 1992, 1994, 2000, 2001, 2002, 2003, 2007
Free Software Foundation, Inc.
Written by Steve Chamberlain steve@cygnus.com
@@ -22,9 +22,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "ld.h"
#include "ldmisc.h"
diff --git a/ld/emultempl/vxworks.em b/ld/emultempl/vxworks.em
index eafbb58d8ef0..b03419fe3fc1 100644
--- a/ld/emultempl/vxworks.em
+++ b/ld/emultempl/vxworks.em
@@ -7,18 +7,27 @@ cat >>e${EMULATION_NAME}.c <<EOF
static int force_dynamic;
static void
+vxworks_before_parse (void)
+{
+ ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse} ();
+ config.rpath_separator = ';';
+}
+
+static void
vxworks_after_open (void)
{
${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open} ();
if (force_dynamic
&& link_info.input_bfds
+ && output_bfd->xvec->flavour == bfd_target_elf_flavour
&& !_bfd_elf_link_create_dynamic_sections (link_info.input_bfds,
&link_info))
einfo ("%X%P: Cannot create dynamic sections %E\n");
if (!force_dynamic
&& !link_info.shared
+ && output_bfd->xvec->flavour == bfd_target_elf_flavour
&& elf_hash_table (&link_info)->dynamic_sections_created)
einfo ("%X%P: Dynamic sections created in non-dynamic link\n");
}
@@ -46,4 +55,27 @@ PARSE_AND_LIST_ARGS_CASES=$PARSE_AND_LIST_ARGS_CASES'
break;
'
-LDEMUL_AFTER_OPEN=vxworks_after_open
+# Hook in our routines above. There are three possibilities:
+#
+# (1) VXWORKS_BASE_EM_FILE did not set the hook's LDEMUL_FOO variable.
+# We want to define LDEMUL_FOO to vxworks_foo in that case,
+#
+# (2) VXWORKS_BASE_EM_FILE set the hook's LDEMUL_FOO variable to
+# gld${EMULATION_NAME}_foo. This means that the file has
+# replaced elf32.em's default definition, so we simply #define
+# the current value of LDEMUL_FOO to vxworks_foo.
+#
+# (3) VXWORKS_BASE_EM_FILE set the hook's LDEMUL_FOO variable to
+# something other than gld${EMULATION_NAME}_foo. We handle
+# this case in the same way as (1).
+for override in before_parse after_open; do
+ var="LDEMUL_`echo ${override} | tr a-z A-Z`"
+ eval value=\$${var}
+ if test "${value}" = "gld${EMULATION_NAME}_${override}"; then
+ cat >>e${EMULATION_NAME}.c <<EOF
+#define ${value} vxworks_${override}
+EOF
+ else
+ eval $var=vxworks_${override}
+ fi
+done
diff --git a/ld/emultempl/xtensaelf.em b/ld/emultempl/xtensaelf.em
index f5d2ba9ceae5..e303e59ce52a 100644
--- a/ld/emultempl/xtensaelf.em
+++ b/ld/emultempl/xtensaelf.em
@@ -16,7 +16,8 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301 USA.
#
# This file is sourced from elf32.em, and defines extra xtensa-elf
@@ -30,6 +31,11 @@ cat >>e${EMULATION_NAME}.c <<EOF
#include "elf/xtensa.h"
#include "bfd.h"
+/* Provide default values for new configuration settings. */
+#ifndef XSHAL_ABI
+#define XSHAL_ABI 0
+#endif
+
static void xtensa_wild_group_interleave (lang_statement_union_type *);
static void xtensa_colocate_output_literals (lang_statement_union_type *);
static void xtensa_strip_inconsistent_linkonce_sections
@@ -128,25 +134,17 @@ replace_insn_sec_with_prop_sec (bfd *abfd,
}
}
- /* Create a Property table section and relocation section for it. */
+ /* Create a property table section for it. */
prop_sec_name = strdup (prop_sec_name);
- prop_sec = bfd_make_section (abfd, prop_sec_name);
+ prop_sec = bfd_make_section_with_flags
+ (abfd, prop_sec_name, bfd_get_section_flags (abfd, insn_sec));
if (prop_sec == NULL
- || ! bfd_set_section_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;
@@ -196,7 +194,7 @@ replace_insn_sec_with_prop_sec (bfd *abfd,
for (entry = 0; entry < entry_count; ++entry)
{
unsigned value;
- unsigned flags = (XTENSA_PROP_INSN | XTENSA_PROP_INSN_NO_TRANSFORM
+ unsigned flags = (XTENSA_PROP_INSN | XTENSA_PROP_NO_TRANSFORM
| XTENSA_PROP_INSN_NO_REORDER);
value = bfd_get_32 (abfd, insn_contents + entry * 8 + 0);
bfd_put_32 (abfd, value, prop_contents + entry * 12 + 0);
@@ -267,8 +265,7 @@ replace_instruction_table_sections (bfd *abfd, asection *sec)
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)
+ else if (CONST_STRNEQ (sec_name, LINKONCE_SEC_OLD_TEXT_BASE_NAME))
{
insn_sec_name = sec_name;
owned_prop_sec_name = (char *) xmalloc (strlen (sec_name) + 20);
@@ -298,17 +295,13 @@ replace_instruction_table_sections (bfd *abfd, asection *sec)
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)
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
{
- asection *sec = abfd->sections;
+ asection *sec = f->the_bfd->sections;
asection *next_sec;
/* Do not use bfd_map_over_sections here since we are removing
@@ -316,20 +309,122 @@ elf_xtensa_after_open (void)
while (sec != NULL)
{
next_sec = sec->next;
- replace_instruction_table_sections (abfd, sec);
+ replace_instruction_table_sections (f->the_bfd, sec);
sec = next_sec;
}
}
}
+static bfd_boolean
+xt_config_info_unpack_and_check (char *data,
+ bfd_boolean *pmismatch,
+ char **pmsg)
+{
+ char *d, *key;
+ unsigned num;
+
+ *pmismatch = FALSE;
+
+ d = data;
+ while (*d)
+ {
+ key = d;
+ d = strchr (d, '=');
+ if (! d)
+ goto error;
+
+ /* Overwrite the equal sign. */
+ *d++ = 0;
+
+ /* Check if this is a quoted string or a number. */
+ if (*d == '"')
+ {
+ /* No string values are currently checked by LD;
+ just skip over the quotes. */
+ d++;
+ d = strchr (d, '"');
+ if (! d)
+ goto error;
+ /* Overwrite the trailing quote. */
+ *d++ = 0;
+ }
+ else
+ {
+ if (*d == 0)
+ goto error;
+ num = strtoul (d, &d, 0);
+
+ if (! strcmp (key, "ABI"))
+ {
+ if (num != XSHAL_ABI)
+ {
+ *pmismatch = TRUE;
+ *pmsg = "ABI does not match";
+ }
+ }
+ else if (! strcmp (key, "USE_ABSOLUTE_LITERALS"))
+ {
+ if (num != XSHAL_USE_ABSOLUTE_LITERALS)
+ {
+ *pmismatch = TRUE;
+ *pmsg = "incompatible use of the Extended L32R option";
+ }
+ }
+ }
+
+ if (*d++ != '\n')
+ goto error;
+ }
+
+ return TRUE;
+
+ error:
+ return FALSE;
+}
+
+
+#define XTINFO_NAME "Xtensa_Info"
+#define XTINFO_NAMESZ 12
+#define XTINFO_TYPE 1
+
+static void
+check_xtensa_info (bfd *abfd, asection *info_sec)
+{
+ char *data, *errmsg = "";
+ bfd_boolean mismatch;
+
+ data = xmalloc (info_sec->size);
+ if (! bfd_get_section_contents (abfd, info_sec, data, 0, info_sec->size))
+ einfo (_("%F%P:%B: cannot read contents of section %A\n"), abfd, info_sec);
+
+ if (info_sec->size > 24
+ && info_sec->size >= 24 + bfd_get_32 (abfd, data + 4)
+ && bfd_get_32 (abfd, data + 0) == XTINFO_NAMESZ
+ && bfd_get_32 (abfd, data + 8) == XTINFO_TYPE
+ && strcmp (data + 12, XTINFO_NAME) == 0
+ && xt_config_info_unpack_and_check (data + 12 + XTINFO_NAMESZ,
+ &mismatch, &errmsg))
+ {
+ if (mismatch)
+ einfo (_("%P:%B: warning: incompatible Xtensa configuration (%s)\n"),
+ abfd, errmsg);
+ }
+ else
+ einfo (_("%P:%B: warning: cannot parse .xtensa.info section\n"), abfd);
+
+ free (data);
+}
+
+
/* This is called after the sections have been attached to output
sections, but before any sizes or addresses have been set. */
static void
elf_xtensa_before_allocation (void)
{
- bfd *in_bfd;
+ asection *info_sec, *first_info_sec;
+ bfd *first_bfd;
bfd_boolean is_big_endian = XCHAL_HAVE_BE;
/* Check that the output endianness matches the Xtensa
@@ -350,18 +445,80 @@ elf_xtensa_before_allocation (void)
"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. */
+ /* Keep track of the first input .xtensa.info section, and as a fallback,
+ the first input bfd where a .xtensa.info section could be created.
+ After the input .xtensa.info has been checked, the contents of the
+ first one will be replaced with the output .xtensa.info table. */
+ first_info_sec = 0;
+ first_bfd = 0;
- for (in_bfd = link_info.input_bfds;
- in_bfd != NULL;
- in_bfd = in_bfd->link_next)
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
{
- 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"));
+ /* Check that the endianness for each input file matches the output.
+ The merge_private_bfd_data hook has already reported any mismatches
+ as errors, but those errors are not fatal. At this point, we
+ cannot go any further if there are any mismatches. */
+ if ((is_big_endian && f->the_bfd->xvec->byteorder == BFD_ENDIAN_LITTLE)
+ || (!is_big_endian && f->the_bfd->xvec->byteorder == BFD_ENDIAN_BIG))
+ einfo (_("%F%P: cross-endian linking for %B not supported\n"),
+ f->the_bfd);
+
+ if (! first_bfd)
+ first_bfd = f->the_bfd;
+
+ info_sec = bfd_get_section_by_name (f->the_bfd, ".xtensa.info");
+ if (! info_sec)
+ continue;
+
+ if (! first_info_sec)
+ first_info_sec = info_sec;
+
+ /* Unpack the .xtensa.info section and check it against the current
+ Xtensa configuration. */
+ check_xtensa_info (f->the_bfd, info_sec);
+
+ /* Do not include this copy of .xtensa.info in the output. */
+ info_sec->size = 0;
+ info_sec->flags |= SEC_EXCLUDE;
+ }
+
+ /* Reuse the first .xtensa.info input section to hold the output
+ .xtensa.info; or, if none were found, create a new section in the
+ first input bfd (assuming there is one). */
+ info_sec = first_info_sec;
+ if (! info_sec && first_bfd)
+ {
+ info_sec = bfd_make_section_with_flags (first_bfd, ".xtensa.info",
+ SEC_HAS_CONTENTS | SEC_READONLY);
+ if (! info_sec)
+ einfo (_("%F%P: failed to create .xtensa.info section\n"));
+ }
+ if (info_sec)
+ {
+ int xtensa_info_size;
+ char *data;
+
+ info_sec->flags &= ~SEC_EXCLUDE;
+ info_sec->flags |= SEC_IN_MEMORY;
+
+ data = xmalloc (100);
+ sprintf (data, "USE_ABSOLUTE_LITERALS=%d\nABI=%d\n",
+ XSHAL_USE_ABSOLUTE_LITERALS, XSHAL_ABI);
+ xtensa_info_size = strlen (data) + 1;
+
+ /* Add enough null terminators to pad to a word boundary. */
+ do
+ data[xtensa_info_size++] = 0;
+ while ((xtensa_info_size & 3) != 0);
+
+ info_sec->size = 12 + XTINFO_NAMESZ + xtensa_info_size;
+ info_sec->contents = xmalloc (info_sec->size);
+ bfd_put_32 (info_sec->owner, XTINFO_NAMESZ, info_sec->contents + 0);
+ bfd_put_32 (info_sec->owner, xtensa_info_size, info_sec->contents + 4);
+ bfd_put_32 (info_sec->owner, XTINFO_TYPE, info_sec->contents + 8);
+ memcpy (info_sec->contents + 12, XTINFO_NAME, XTINFO_NAMESZ);
+ memcpy (info_sec->contents + 12 + XTINFO_NAMESZ, data, xtensa_info_size);
+ free (data);
}
/* Enable relaxation by default if the "--no-relax" option was not
@@ -1185,7 +1342,7 @@ input_section_linked (asection *sec)
}
-/* Strip out any linkonce literal sections or property tables where the
+/* Strip out any linkonce property tables or XCC exception tables where the
associated linkonce text is from a different object file. Normally,
a matching set of linkonce sections is taken from the same object file,
but sometimes the files are compiled differently so that some of the
@@ -1200,28 +1357,33 @@ is_inconsistent_linkonce_section (asection *sec)
{
bfd *abfd = sec->owner;
const char *sec_name = bfd_get_section_name (abfd, sec);
- char *prop_tag = 0;
+ const char *name;
if ((bfd_get_section_flags (abfd, sec) & SEC_LINK_ONCE) == 0
|| strncmp (sec_name, ".gnu.linkonce.", linkonce_len) != 0)
return FALSE;
- /* Check if this is an Xtensa property section. */
- 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)
+ /* Check if this is an Xtensa property section or an exception table
+ for Tensilica's XCC compiler. */
+ name = sec_name + linkonce_len;
+ if (CONST_STRNEQ (name, "prop."))
+ name = strchr (name + 5, '.') + 1;
+ else if (name[1] == '.'
+ && (name[0] == 'p' || name[0] == 'e' || name[0] == 'h'))
+ name += 2;
+ else
+ name = 0;
+
+ if (name)
{
- int tag_len = strlen (prop_tag);
- char *dep_sec_name = xmalloc (strlen (sec_name));
+ char *dep_sec_name = xmalloc (strlen (sec_name) + 1);
asection *dep_sec;
/* Get the associated linkonce text section and check if it is
included in the link. If not, this section is inconsistent
and should be stripped. */
- strcpy (dep_sec_name, ".gnu.linkonce.");
- strcat (dep_sec_name, sec_name + linkonce_len + tag_len);
+ strcpy (dep_sec_name, ".gnu.linkonce.t.");
+ strcat (dep_sec_name, name);
dep_sec = bfd_get_section_by_name (abfd, dep_sec_name);
if (dep_sec == NULL || ! input_section_linked (dep_sec))
{
@@ -1249,6 +1411,7 @@ xtensa_strip_inconsistent_linkonce_sections (lang_statement_list_type *slist)
case lang_input_section_enum:
if (is_inconsistent_linkonce_section (s->input_section.section))
{
+ s->input_section.section->output_section = bfd_abs_section_ptr;
*s_p = s_next;
continue;
}
diff --git a/ld/gen-doc.texi b/ld/gen-doc.texi
index 800f64e2fae4..03ab5583bdab 100644
--- a/ld/gen-doc.texi
+++ b/ld/gen-doc.texi
@@ -3,14 +3,17 @@
@set GENERIC
@c 2. Specific target machines
-@set H8300
-@set I960
@set ARM
+@set H8300
@set HPPA
+@set I960
+@set M68HC11
@set MMIX
@set MSP430
@set POWERPC
@set POWERPC64
+@set Renesas
+@set SPU
@set TICOFF
@set WIN32
@set XTENSA
diff --git a/ld/genscripts.sh b/ld/genscripts.sh
index e9d4f153a7a7..81b78a2cf35e 100755
--- a/ld/genscripts.sh
+++ b/ld/genscripts.sh
@@ -189,6 +189,14 @@ if [ "x${use_sysroot}" != "xyes" ] ; then
::) LIB_PATH=${tool_lib} ;;
*) LIB_PATH=${tool_lib}:${LIB_PATH} ;;
esac
+ # For multilib targets, search both $tool_lib dirs
+ if [ "x${LIBPATH_SUFFIX}" != "x" ] ; then
+ case :${LIB_PATH}: in
+ ::: | *:${tool_lib}${LIBPATH_SUFFIX}:*) ;;
+ ::) LIB_PATH=${tool_lib}${LIBPATH_SUFFIX} ;;
+ *) LIB_PATH=${tool_lib}${LIBPATH_SUFFIX}:${LIB_PATH} ;;
+ esac
+ fi
fi
LIB_SEARCH_DIRS=`echo ${LIB_PATH} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\\"\1\\");/g'`
diff --git a/ld/ld.1 b/ld/ld.1
deleted file mode 100644
index 26003aae5ff7..000000000000
--- a/ld/ld.1
+++ /dev/null
@@ -1,2071 +0,0 @@
-.\" 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/ld/ld.h b/ld/ld.h
index b5a4f55746a0..fd7301bad461 100644
--- a/ld/ld.h
+++ b/ld/ld.h
@@ -1,6 +1,6 @@
/* ld.h -- general linker header file
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -81,8 +81,6 @@ void *alloca ();
# 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: */
@@ -149,22 +147,6 @@ typedef struct {
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;
@@ -179,17 +161,10 @@ typedef struct {
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;
+ /* Warn on attempting to open an incompatible library during a library
+ search. */
+ bfd_boolean warn_search_mismatch;
- /* 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. */
@@ -201,10 +176,53 @@ typedef struct {
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;
+ /* Big or little endian as set on command line. */
+ enum { ENDIAN_UNSET = 0, ENDIAN_BIG, ENDIAN_LITTLE } endian;
+
+ /* -Bsymbolic and -Bsymbolic-functions, as set on command line. */
+ enum
+ {
+ symbolic_unset = 0,
+ symbolic,
+ symbolic_functions,
+ } symbolic;
+
+ /* --dynamic-list, --dynamic-list-cpp-new, --dynamic-list-cpp-typeinfo
+ and --dynamic-list FILE, as set on command line. */
+ enum
+ {
+ dynamic_list_unset = 0,
+ dynamic_list_data,
+ dynamic_list
+ } dynamic_list;
+
+ /* Name of runtime interpreter to invoke. */
+ char *interpreter;
+ /* Name to give runtime libary from the -soname argument. */
+ char *soname;
+
+ /* Runtime library search path from the -rpath argument. */
+ char *rpath;
+
+ /* Link time runtime library search path from the -rpath-link
+ argument. */
+ char *rpath_link;
+
+ /* Name of shared object whose symbol table should be filtered with
+ this shared object. From the --filter option. */
+ char *filter_shlib;
+
+ /* Name of shared object for whose symbol table this shared object
+ is an auxiliary filter. From the --auxiliary option. */
+ char **auxiliary_filters;
+
+ /* A version symbol to be applied to the symbol names found in the
+ .exports sections. */
+ char *version_exports_section;
+
+ /* Default linker script. */
+ char *default_script;
} args_type;
extern args_type command_line;
@@ -212,7 +230,6 @@ 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;
@@ -252,24 +269,35 @@ typedef struct {
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 rpath separation character. Usually ':'. */
+ char rpath_separator;
+
+ char *map_filename;
+ FILE *map_file;
+
+ unsigned int split_by_reloc;
+ bfd_size_type split_by_file;
+
+ bfd_size_type specified_data_size;
+
/* The size of the hash table to use. */
bfd_size_type hash_table_size;
+
+ /* The maximum page size for ELF. */
+ bfd_vma maxpagesize;
+
+ /* The common page size for ELF. */
+ bfd_vma commonpagesize;
} ld_config_type;
extern ld_config_type config;
diff --git a/ld/ld.info b/ld/ld.info
deleted file mode 100644
index 56eee984433d..000000000000
--- a/ld/ld.info
+++ /dev/null
@@ -1,6691 +0,0 @@
-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/ld/ld.texinfo b/ld/ld.texinfo
index 07bb0c3d93a0..71273f4e92c4 100644
--- a/ld/ld.texinfo
+++ b/ld/ld.texinfo
@@ -1,12 +1,12 @@
\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.
+@c 2001, 2002, 2003, 2004, 2005, 2006, 2007 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
+@include bfdver.texi
@c man end
@c @smallbook
@@ -20,33 +20,18 @@
@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 H8300
@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 Renesas
+@set SPU
+@set TICOFF
@set WIN32
@set XTENSA
@end ifset
@@ -60,13 +45,15 @@ 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.
+@copying
+This file documents the @sc{gnu} linker LD
+@ifset VERSION_PACKAGE
+@value{VERSION_PACKAGE}
+@end ifset
+version @value{VERSION}.
-@ignore
+Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007 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
@@ -74,23 +61,18 @@ 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
+@end copying
@iftex
@finalout
@setchapternewpage odd
-@settitle Using LD, the GNU linker
+@settitle The GNU linker
@titlepage
-@title Using ld
-@subtitle The GNU linker
+@title The GNU linker
@sp 1
-@subtitle @code{ld} version 2
+@subtitle @code{ld}
+@ifset VERSION_PACKAGE
+@subtitle @value{VERSION_PACKAGE}
+@end ifset
@subtitle Version @value{VERSION}
@author Steve Chamberlain
@author Ian Lance Taylor
@@ -100,7 +82,7 @@ notice identical to this one except for the removal of this paragraph
{\parskip=0pt
\hfill Red Hat Inc\par
\hfill nickc\@credhat.com, doc\@redhat.com\par
-\hfill {\it Using LD, the GNU linker}\par
+\hfill {\it The GNU linker}\par
\hfill Edited by Jeffrey Osier (jeffrey\@cygnus.com)\par
}
\global\parindent=0pt % Steve likes it this way.
@@ -109,7 +91,7 @@ notice identical to this one except for the removal of this paragraph
@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.
+2002, 2003, 2004, 2005, 2006, 2007 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
@@ -121,12 +103,17 @@ section entitled ``GNU Free Documentation License''.
@end titlepage
@end iftex
+@contents
@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}.
+@top LD
+This file documents the @sc{gnu} linker ld
+@ifset VERSION_PACKAGE
+@value{VERSION_PACKAGE}
+@end ifset
+version @value{VERSION}.
This document is distributed under the terms of the GNU Free
Documentation License. A copy of the license is included in the
@@ -164,6 +151,9 @@ section entitled ``GNU Free Documentation License''.
@ifset POWERPC64
* PowerPC64 ELF64:: ld and PowerPC64 64-bit ELF Support
@end ifset
+@ifset SPU
+* SPU ELF:: ld and SPU ELF Support
+@end ifset
@ifset TICOFF
* TI COFF:: ld and the TI COFF
@end ifset
@@ -182,7 +172,7 @@ section entitled ``GNU Free Documentation License''.
* Reporting Bugs:: Reporting Bugs
* MRI:: MRI Compatible Script Files
* GNU Free Documentation License:: GNU Free Documentation License
-* Index:: Index
+* LD Index:: LD Index
@end menu
@end ifnottex
@@ -216,10 +206,9 @@ 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.
+This man page does not describe the command language; see the
+@command{ld} entry in @code{info} for full details on the command
+language and on other aspects of the GNU linker.
@end ifset
@ifclear SingleFormat
@@ -322,7 +311,7 @@ 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
+only be preceded by two dashes. This is to reduce confusion with the
@samp{-o} option. So for example @samp{-omagic} sets the output file
name to @samp{magic} whereas @samp{--omagic} sets the NMAGIC flag on the
output.
@@ -489,9 +478,9 @@ 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
+You can also use the dynamic list to control what symbols should
be added to the dynamic symbol table if the output format supports it.
-See the description of @samp{--version-script} in @ref{VERSION}.
+See the description of @samp{--dynamic-list}.
@ifclear SingleFormat
@cindex big-endian objects
@@ -550,7 +539,7 @@ 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
+@option{-b}, @option{--format}, @option{--oformat} options, the
@code{TARGET} command in linker scripts, and the @code{GNUTARGET}
environment variable.
@end ifclear
@@ -604,21 +593,24 @@ 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.
+@kindex -l@var{namespec}
+@kindex --library=@var{namespec}
+@item -l@var{namespec}
+@itemx --library=@var{namespec}
+Add the archive or object file specified by @var{namespec} to the
+list of files to link. This option may be used any number of times.
+If @var{namespec} is of the form @file{:@var{filename}}, @command{ld}
+will search the library path for a file called @var{filename}, otherise it
+will search the library path for a file called @file{lib@var{namespec}.a}.
On systems which support shared libraries, @command{ld} may also search for
-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.
+files other than @file{lib@var{namespec}.a}. Specifically, on ELF
+and SunOS systems, @command{ld} will search a directory for a library
+called @file{lib@var{namespec}.so} before searching for one called
+@file{lib@var{namespec}.a}. (By convention, a @code{.so} extension
+indicates a shared library.) Note that this behavior does not apply
+to @file{:@var{filename}}, which always specifies a file called
+@var{filename}.
The linker will search an archive only once, at the location where it is
specified on the command line. If the archive defines a symbol which
@@ -773,7 +765,7 @@ should only be enabled for the final binary.
@cindex retain relocations in final executable
@item -q
@itemx --emit-relocs
-Leave relocation sections and contents in fully linked exececutables.
+Leave relocation sections and contents in fully linked executables.
Post link analysis and optimization tools may need this information in
order to perform correct modifications of executables. This results
in larger executables.
@@ -858,6 +850,22 @@ the current directory, @code{ld} looks for it in the directories
specified by any preceding @samp{-L} options. Multiple @samp{-T}
options accumulate.
+@kindex -dT @var{script}
+@kindex --default-script=@var{script}
+@cindex script files
+@item -dT @var{scriptfile}
+@itemx --default-script=@var{scriptfile}
+Use @var{scriptfile} as the default linker script. @xref{Scripts}.
+
+This option is similar to the @option{--script} option except that
+processing of the script is delayed until after the rest of the
+command line has been processed. This allows options placed after the
+@option{--default-script} option on the command line to affect the
+behaviour of the linker script, which can be important when the linker
+command line cannot be directly controlled by the user. (eg because
+the command line is being constructed by another tool, such as
+@samp{gcc}).
+
@kindex -u @var{symbol}
@kindex --undefined=@var{symbol}
@cindex undefined symbol
@@ -911,11 +919,11 @@ 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}.
+Delete all temporary local symbols. (These symbols start with
+system-specific local label prefixes, typically @samp{.L} for ELF systems
+or @samp{L} for traditional a.out systems.)
@kindex -y @var{symbol}
@kindex --trace-symbol=@var{symbol}
@@ -962,6 +970,12 @@ objects.
Marks the object that its symbol table interposes before all symbols
but the primary executable.
+@item lazy
+When generating an executable or shared library, mark it to tell the
+dynamic linker to defer function call resolution to the point when
+the function is called (lazy binding), rather than at load time.
+Lazy binding is the default.
+
@item loadfltr
Marks the object that its filters be processed immediately at
runtime.
@@ -1007,9 +1021,15 @@ Marks the object may contain $ORIGIN.
@item relro
Create an ELF @code{PT_GNU_RELRO} segment header in the object.
+@item max-page-size=@var{value}
+Set the emulation maximum page size to @var{value}.
+
+@item common-page-size=@var{value}
+Set the emulation common page size to @var{value}.
+
@end table
-Other keywords are ignored for Solaris compatibility.
+Other keywords are ignored for Solaris compatibility.
@kindex -(
@cindex groups of archives
@@ -1110,7 +1130,7 @@ 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.
+libraries.
@kindex -Bsymbolic
@item -Bsymbolic
@@ -1120,6 +1140,39 @@ for a program linked against a shared library to override the definition
within the shared library. This option is only meaningful on ELF
platforms which support shared libraries.
+@kindex -Bsymbolic-functions
+@item -Bsymbolic-functions
+When creating a shared library, bind references to global function
+symbols to the definition within the shared library, if any.
+This option is only meaningful on ELF platforms which support shared
+libraries.
+
+@kindex --dynamic-list=@var{dynamic-list-file}
+@item --dynamic-list=@var{dynamic-list-file}
+Specify the name of a dynamic list file to the linker. This is
+typically used when creating shared libraries to specify a list of
+global symbols whose references shouldn't be bound to the definition
+within the shared library, or creating dynamically linked executables
+to specify a list of symbols which should be added to the symbol table
+in the executable. This option is only meaningful on ELF platforms
+which support shared libraries.
+
+The format of the dynamic list is the same as the version node without
+scope and node name. See @ref{VERSION} for more information.
+
+@kindex --dynamic-list-data
+@item --dynamic-list-data
+Include all global data symbols to the dynamic list.
+
+@kindex --dynamic-list-cpp-new
+@item --dynamic-list-cpp-new
+Provide the builtin dynamic list for C++ operator new and delete. It
+is mainly useful for building shared libstdc++.
+
+@kindex --dynamic-list-cpp-typeinfo
+@item --dynamic-list-cpp-typeinfo
+Provide the builtin dynamic list for C++ runtime type identification.
+
@kindex --check-sections
@kindex --no-check-sections
@item --check-sections
@@ -1220,13 +1273,25 @@ it ends in a @code{.exe} suffix.
@kindex --gc-sections
@kindex --no-gc-sections
@cindex garbage collection
-@item --no-gc-sections
-@itemx --gc-sections
+@item --gc-sections
+@itemx --no-gc-sections
Enable garbage collection of unused input sections. It is ignored on
targets that do not support this option. 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.
+with @samp{-r} or @samp{--emit-relocs}. The default behaviour (of not
+performing this garbage collection) can be restored by specifying
+@samp{--no-gc-sections} on the command line.
+
+@kindex --print-gc-sections
+@kindex --no-print-gc-sections
+@cindex garbage collection
+@item --print-gc-sections
+@itemx --no-print-gc-sections
+List all sections removed by garbage collection. The listing is
+printed on stderr. This option is only effective if garbage
+collection has been enabled via the @samp{--gc-sections}) option. The
+default behaviour (of not listing the sections that are removed) can
+be restored by specifying @samp{--no-print-gc-sections} on the command
+line.
@cindex help
@cindex usage
@@ -1260,7 +1325,7 @@ 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.
+libraries being linked in.
@kindex --allow-multiple-definition
@kindex -z muldefs
@@ -1285,7 +1350,7 @@ 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
+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.
@@ -1316,6 +1381,11 @@ errors. This option should only be used with care, in cases when you
have taken some special action that ensures that the linker errors are
inappropriate.
+@kindex --no-warn-search-mismatch
+@item --no-warn-search-mismatch
+Normally @command{ld} will give a warning if it finds an incompatible
+library during a library search. This option silences the warning.
+
@kindex --no-whole-archive
@item --no-whole-archive
Turn off the effect of the @option{--whole-archive} option for subsequent
@@ -1451,7 +1521,7 @@ SunOS, the linker will form a runtime search patch out of all 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.
+file systems.
For compatibility with other ELF linkers, if the @option{-R} option is
followed by a directory name, rather than a file name, it is treated as
@@ -1481,7 +1551,7 @@ 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.
+libraries:
@enumerate
@item
Any directories specified by @option{-rpath-link} options.
@@ -1490,7 +1560,9 @@ 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.
+at link time. Searching @option{-rpath} in this way is only supported
+by native linkers and cross linkers which have been configured with
+the @option{--with-sysroot} option.
@item
On an ELF system, if the @option{-rpath} and @code{rpath-link} options
were not used, search the contents of the environment variable
@@ -1784,7 +1856,7 @@ the section (@pxref{SECTIONS}).
@kindex --warn-shared-textrel
@item --warn-shared-textrel
-Warn if the linker adds a DT_TEXTREL to a shared object.
+Warn if the linker adds a DT_TEXTREL to a shared object.
@kindex --warn-unresolved-symbols
@item --warn-unresolved-symbols
@@ -1871,6 +1943,14 @@ time it takes the linker to perform its tasks, at the expense of
increasing the linker's memory requirements. Similarly reducing this
value can reduce the memory requirements at the expense of speed.
+@kindex --hash-style=@var{style}
+@item --hash-style=@var{style}
+Set the type of linker's hash table(s). @var{style} can be either
+@code{sysv} for classic ELF @code{.hash} section, @code{gnu} for
+new style GNU @code{.gnu.hash} section or @code{both} for both
+the classic ELF @code{.hash} and new style GNU @code{.gnu.hash}
+hash tables. The default is @code{sysv}.
+
@kindex --reduce-memory-overheads
@item --reduce-memory-overheads
This option reduces memory requirements at ld runtime, at the expense of
@@ -1958,22 +2038,22 @@ 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{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},
+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
+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},
+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{_fmode}, @code{_impure_ptr}, @code{cygwin_attach_dll},
@code{cygwin_premain0}, @code{cygwin_premain1}, @code{cygwin_premain2},
-@code{cygwin_premain3}, and @code{environ}.
+@code{cygwin_premain3}, and @code{environ}.
[This option is specific to the i386 PE targeted port of the linker]
@kindex --exclude-symbols
@@ -2017,9 +2097,9 @@ symbols before they are exported.
@kindex --large-address-aware
@item --large-address-aware
-If given, the appropriate bit in the ``Charateristics'' field of the COFF
+If given, the appropriate bit in the ``Characteristics'' field of the COFF
header is set to indicate that this executable supports virtual addresses
-greater than 2 gigabytes. This should be used in conjuction with the /3GB
+greater than 2 gigabytes. This should be used in conjunction with the /3GB
or /USERVA=@var{value} megabytes switch in the ``[operating systems]''
section of the BOOT.INI. Otherwise, this bit has no effect.
[This option is specific to PE targeted ports of the linker]
@@ -2096,17 +2176,17 @@ default.
@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
+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}.
+@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
+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
@@ -2115,11 +2195,11 @@ 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
+"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
+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
@@ -2661,7 +2741,7 @@ setting afterwards.
@item OUTPUT(@var{filename})
@kindex OUTPUT(@var{filename})
-@cindex output file name in linker scripot
+@cindex output file name in linker script
The @code{OUTPUT} command names the output file. Using
@code{OUTPUT(@var{filename})} in the linker script is exactly like using
@samp{-o @var{filename}} on the command line (@pxref{Options,,Command
@@ -3635,19 +3715,23 @@ scripts.
@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:
+The linker will not create output sections with no contents. This is
+for convenience when referring to input sections that may or may not
+be present in any of the input files. For example:
@smallexample
-.foo @{ *(.foo) @}
+.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.
+@samp{.foo} section in at least one input file, and if the input
+sections are not all empty. Other link script directives that allocate
+space in an output section will also create the output section.
-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 linker will ignore address assignments (@pxref{Output Section Address})
+on discarded output sections, except when the linker script defines
+symbols in the output section. In that case the linker will obey
+the address assignments, possibly advancing dot even though the
+section is discarded.
@cindex /DISCARD/
The special output section name @samp{/DISCARD/} may be used to discard
@@ -3732,15 +3816,20 @@ Every section has a virtual address (VMA) and a load address (LMA); see
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.
+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.
+
+If neither @code{AT} nor @code{AT>} is specified for an allocatable
+section, the linker will set the LMA such that the difference between
+VMA and LMA for the section is the same as the preceding output
+section in the same region. If there is no preceding output section
+or the section is not allocatable, the linker will set the LMA equal
+to the VMA.
@xref{Output Section Region}.
@cindex ROM initialized data
@@ -3929,7 +4018,7 @@ 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
+provides two symbols. The symbol @code{__load_start_@var{secname}} is
defined as the starting load address of the section. The symbol
@code{__load_stop_@var{secname}} is defined as the final load address of
the section. Any characters within @var{secname} which are not legal
@@ -3954,7 +4043,7 @@ Here is an example. Remember that this would appear inside a
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},
+following symbols will be defined if referenced: @code{__load_start_text0},
@code{__load_stop_text0}, @code{__load_start_text1},
@code{__load_stop_text1}.
@@ -3976,11 +4065,11 @@ 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);
+ PROVIDE (__load_start_text0 = LOADADDR (.text0));
+ PROVIDE (__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);
+ PROVIDE (__load_start_text1 = LOADADDR (.text1));
+ PROVIDE (__load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1));
. = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1));
@end group
@end smallexample
@@ -4345,7 +4434,7 @@ 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
+Node name can be omitted, provided it is the only version node
in the version script. Such version script doesn't assign any versions to
symbols, only selects which symbols will be globally visible out and which
won't.
@@ -4554,7 +4643,9 @@ 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.
+location counter may not be moved backwards inside an output section,
+and may not be moved backwards outside of an output section if so
+doing creates areas with overlapping LMAs.
@smallexample
SECTIONS
@@ -4904,6 +4995,25 @@ of @code{ALIGN} is used to defines the value of a symbol.
The builtin function @code{NEXT} is closely related to @code{ALIGN}.
+@item ALIGNOF(@var{section})
+@kindex ALIGNOF(@var{section})
+@cindex section alignment
+Return the alignment in bytes of the named @var{section}, if that section has
+been allocated. If the section has not been allocated when this is
+evaluated, the linker will report an error. In the following example,
+the alignment of the @code{.output} section is stored as the first
+value in that section.
+@smallexample
+@group
+SECTIONS@{ @dots{}
+ .output @{
+ LONG (ALIGNOF (.output))
+ @dots{}
+ @}
+@dots{} @}
+@end group
+@end smallexample
+
@item BLOCK(@var{exp})
@kindex BLOCK(@var{exp})
This is a synonym for @code{ALIGN}, for compatibility with older linker
@@ -5128,6 +5238,9 @@ functionality are not listed.
@ifset POWERPC64
* PowerPC64 ELF64:: @command{ld} and PowerPC64 64-bit ELF Support
@end ifset
+@ifset SPU
+* SPU ELF:: @command{ld} and SPU ELF Support
+@end ifset
@ifset TICOFF
* TI COFF:: @command{ld} and TI COFF
@end ifset
@@ -5180,7 +5293,7 @@ page of memory, and changes them to use the 8 bit address form.
the top page of memory).
@item system control instructions
-@command{ld} finds all @code{ldc.w, stc.w} instrcutions which use the
+@command{ld} finds all @code{ldc.w, stc.w} instructions which use the
32 bit absolute address form, but refer to the top page of memory, and
changes them to use 16 bit address form.
(That is: the linker turns @samp{ldc.w @code{@@}@var{aa}:32,ccr} into
@@ -5314,6 +5427,13 @@ 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.
+@cindex PIC_VENEER
+@kindex --pic-veneer
+The @samp{--pic-veneer} switch makes the linker use PIC sequences for
+ARM/Thumb interworking veneers, even if the rest of the binary
+is not PIC. This avoids problems on uClinux targets where
+@samp{--emit-relocs} is used to generate relocatable binaries.
+
@ifclear GENERIC
@lowersections
@end ifclear
@@ -5325,7 +5445,7 @@ point to the function trampoline.
@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
+between ARM and Thumb code. These stubs only work with code that has
been compiled and assembled with the @samp{-mthumb-interwork} command
line option. If it is necessary to link with old ARM object files or
libraries, which have not been compiled with the -mthumb-interwork
@@ -5397,6 +5517,45 @@ each PLT entry. This should lead to such calls executing slightly faster.
This option is enabled implicitly for SymbianOS, so there is no need to
specify it if you are using that target.
+@cindex VFP11_DENORM_FIX
+@kindex --vfp11-denorm-fix
+The @samp{--vfp11-denorm-fix} switch enables a link-time workaround for a
+bug in certain VFP11 coprocessor hardware, which sometimes allows
+instructions with denorm operands (which must be handled by support code)
+to have those operands overwritten by subsequent instructions before
+the support code can read the intended values.
+
+The bug may be avoided in scalar mode if you allow at least one
+intervening instruction between a VFP11 instruction which uses a register
+and another instruction which writes to the same register, or at least two
+intervening instructions if vector mode is in use. The bug only affects
+full-compliance floating-point mode: you do not need this workaround if
+you are using "runfast" mode. Please contact ARM for further details.
+
+If you know you are using buggy VFP11 hardware, you can
+enable this workaround by specifying the linker option
+@samp{--vfp-denorm-fix=scalar} if you are using the VFP11 scalar
+mode only, or @samp{--vfp-denorm-fix=vector} if you are using
+vector mode (the latter also works for scalar code). The default is
+@samp{--vfp-denorm-fix=none}.
+
+If the workaround is enabled, instructions are scanned for
+potentially-troublesome sequences, and a veneer is created for each
+such sequence which may trigger the erratum. The veneer consists of the
+first instruction of the sequence and a branch back to the subsequent
+instruction. The original instruction is then replaced with a branch to
+the veneer. The extra cycles required to call and return from the veneer
+are sufficient to avoid the erratum in both the scalar and vector cases.
+
+@cindex NO_ENUM_SIZE_WARNING
+@kindex --no-enum-size-warning
+The @samp{--no-enum-size-warning} switch prevents the linker from
+warning when linking object files that specify incompatible EABI
+enumeration size attributes. For example, with this switch enabled,
+linking of an object file using 32-bit enumeration values with another
+using enumeration values fitted into the smallest possible space will
+not be diagnosed.
+
@ifclear GENERIC
@lowersections
@end ifclear
@@ -5550,6 +5709,14 @@ PLT, if all input files (including startup and static libraries) were
compiled with @samp{-msecure-plt}. @samp{--bss-plt} forces the old
BSS PLT (and GOT layout) which can give slightly better performance.
+@kindex --secure-plt
+@item --secure-plt
+@command{ld} will use the new PLT and GOT layout if it is linking new
+@samp{-fpic} or @samp{-fPIC} code, but does not do so automatically
+when linking non-PIC code. This option requests the new PLT and GOT
+layout. A warning will be given if some object file requires the old
+style BSS PLT.
+
@cindex PowerPC GOT
@kindex --sdata-got
@item --sdata-got
@@ -5696,6 +5863,87 @@ Use this option to turn off this feature.
@end ifclear
@end ifset
+@ifset SPU
+@ifclear GENERIC
+@raisesections
+@end ifclear
+
+@node SPU ELF
+@section @command{ld} and SPU ELF Support
+
+@cindex SPU ELF options
+@table @option
+
+@cindex SPU plugins
+@kindex --plugin
+@item --plugin
+This option marks an executable as a PIC plugin module.
+
+@cindex SPU overlays
+@kindex --no-overlays
+@item --no-overlays
+Normally, @command{ld} recognizes calls to functions within overlay
+regions, and redirects such calls to an overlay manager via a stub.
+@command{ld} also provides a built-in overlay manager. This option
+turns off all this special overlay handling.
+
+@cindex SPU overlay stub symbols
+@kindex --emit-stub-syms
+@item --emit-stub-syms
+This option causes @command{ld} to label overlay stubs with a local
+symbol that encodes the stub type and destination.
+
+@cindex SPU extra overlay stubs
+@kindex --extra-overlay-stubs
+@item --extra-overlay-stubs
+This option causes @command{ld} to add overlay call stubs on all
+function calls out of overlay regions. Normally stubs are not added
+on calls to non-overlay regions.
+
+@cindex SPU local store size
+@kindex --local-store=lo:hi
+@item --local-store=lo:hi
+@command{ld} usually checks that a final executable for SPU fits in
+the address range 0 to 256k. This option may be used to change the
+range. Disable the check entirely with @option{--local-store=0:0}.
+
+@cindex SPU
+@kindex --stack-analysis
+@item --stack-analysis
+SPU local store space is limited. Over-allocation of stack space
+unnecessarily limits space available for code and data, while
+under-allocation results in runtime failures. If given this option,
+@command{ld} will provide an estimate of maximum stack usage.
+@command{ld} does this by examining symbols in code sections to
+determine the extents of functions, and looking at function prologues
+for stack adjusting instructions. A call-graph is created by looking
+for relocations on branch instructions. The graph is then searched
+for the maximum stack usage path. Note that this analysis does not
+find calls made via function pointers, and does not handle recursion
+and other cycles in the call graph. Stack usage may be
+under-estimated if your code makes such calls. Also, stack usage for
+dynamic allocation, e.g. alloca, will not be detected. If a link map
+is requested, detailed information about each function's stack usage
+and calls will be given.
+
+@cindex SPU
+@kindex --emit-stack-syms
+@item --emit-stack-syms
+This option, if given along with @option{--stack-analysis} will result
+in @command{ld} emitting stack sizing symbols for each function.
+These take the form @code{__stack_<function_name>} for global
+functions, and @code{__stack_<number>_<function_name>} for static
+functions. @code{<number>} is the section id in hex. The value of
+such symbols is the stack requirement for the corresponding function.
+The symbol size will be zero, type @code{STT_NOTYPE}, binding
+@code{STB_LOCAL}, and section @code{SHN_ABS}.
+@end table
+
+@ifclear GENERIC
+@lowersections
+@end ifclear
+@end ifset
+
@ifset TICOFF
@ifclear GENERIC
@raisesections
@@ -5725,7 +5973,7 @@ header format depends on the default specified by the specific target.
@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
+See @ref{Options,,Command Line Options} for detailed description of the
command line options mentioned here.
@table @emph
@@ -5802,8 +6050,8 @@ 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
+When the .DEF file is used to build an application, rather than a
+library, the @code{NAME <name>} command should be used instead of
@code{LIBRARY}. If @samp{<name>} does not include a suffix, the default
executable suffix, @samp{.EXE} is appended.
@@ -5897,7 +6145,7 @@ 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.
+information.
@end table
@cindex automatic data imports
@@ -5909,7 +6157,7 @@ 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
+decorations to achieve a behavior that conforms to that on POSIX/Un*x
platforms. This feature is enabled with the @samp{--enable-auto-import}
command-line option, although it is enabled by default on cygwin/mingw.
The @samp{--enable-auto-import} option itself now serves mainly to
@@ -5953,7 +6201,7 @@ enabled as needed.
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
+traditional import library method, especially when linking large
libraries or applications. When @command{ld} creates an import lib, each
function or variable exported from the dll is stored in its own bfd, even
though a single bfd could contain many exports. The overhead involved in
@@ -5972,12 +6220,13 @@ 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
+libxxx.dll.a
+xxx.dll.a
+libxxx.a
+xxx.lib
cygxxx.dll (*)
-libxxx.dll
-xxx.dll
+libxxx.dll
+xxx.dll
@end example
before moving on to the next directory in the search path.
@@ -6049,7 +6298,7 @@ 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:
+wonder why import libraries are used at all. There are three reasons:
1. Until recently, the link-directly-to-dll functionality did @emph{not}
work with auto-imported data.
@@ -6060,9 +6309,14 @@ symbols that point to the exports of a dll). Again, the import lib
for the cygwin kernel makes use of this ability, and it is not
possible to do this without an import lib.
+3. Symbol aliases can only be resolved using an import lib. This is
+critical when linking against OS-supplied dll's (eg, the win32 API)
+in which symbols are usually exported as undecorated aliases of their
+stdcall-decorated assembly names.
+
So, import libs are not going away. But the ability to replace
true import libs with a simple symbolic link to (or a copy of)
-a dll, in most cases, is a useful addition to the suite of tools
+a dll, in many cases, is a useful addition to the suite of tools
binutils makes available to the win32 developer. Given the
massive improvements in memory requirements during linking, storage
requirements, and linking speed, we expect that many developers
@@ -6343,8 +6597,10 @@ You can find contact information for many support companies and
individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
distribution.
+@ifset BUGURL
Otherwise, send bug reports for @command{ld} to
-@samp{bug-binutils@@gnu.org}.
+@value{BUGURL}.
+@end ifset
The fundamental principle of reporting bugs usefully is this:
@strong{report all the facts}. If you are not sure whether to state a
@@ -6428,7 +6684,7 @@ 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
+copy of @command{ld} is out of sync, or you have encountered a bug in the
C library on your system. (This has happened!) Your copy might crash
and ours would not. If you told us to expect a crash, then when ours
fails to crash, we would know that the bug was not happening for us. If
@@ -6629,8 +6885,8 @@ If you have more than one @code{SECT} statement for the same
@include fdl.texi
-@node Index
-@unnumbered Index
+@node LD Index
+@unnumbered LD Index
@printindex cp
@@ -6649,6 +6905,4 @@ If you have more than one @code{SECT} statement for the same
% Blame: doc@cygnus.com, 28mar91.
@end tex
-
-@contents
@bye
diff --git a/ld/ldcref.c b/ld/ldcref.c
index ed9f8696d280..4fa29de080a1 100644
--- a/ld/ldcref.c
+++ b/ld/ldcref.c
@@ -1,6 +1,6 @@
/* ldcref.c -- output a cross reference table
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006
- Free Software Foundation, Inc.
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006,
+ 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>
This file is part of GLD, the Gnu Linker.
@@ -23,10 +23,11 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
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 "bfd.h"
#include "bfdlink.h"
#include "libiberty.h"
+#include "demangle.h"
#include "objalloc.h"
#include "ld.h"
@@ -56,7 +57,7 @@ struct cref_ref {
struct cref_hash_entry {
struct bfd_hash_entry root;
/* The demangled name. */
- char *demangled;
+ const char *demangled;
/* References to and definitions of this symbol. */
struct cref_ref *refs;
};
@@ -106,6 +107,7 @@ static size_t cref_symcount;
add syms from an as-needed library. */
static struct bfd_hash_entry **old_table;
static unsigned int old_size;
+static unsigned int old_count;
static void *old_tab;
static void *alloc_mark;
static size_t tabsize, entsize, refsize;
@@ -238,6 +240,7 @@ handle_asneeded_cref (bfd *abfd ATTRIBUTE_UNUSED,
old_ref = (char *) old_ent + entsize;
old_table = cref_table.root.table;
old_size = cref_table.root.size;
+ old_count = cref_table.root.count;
old_symcount = cref_symcount;
for (i = 0; i < cref_table.root.size; i++)
@@ -278,6 +281,7 @@ handle_asneeded_cref (bfd *abfd ATTRIBUTE_UNUSED,
old_ref = (char *) old_ent + entsize;
cref_table.root.table = old_table;
cref_table.root.size = old_size;
+ cref_table.root.count = old_count;
memcpy (cref_table.root.table, old_tab, tabsize);
cref_symcount = old_symcount;
@@ -321,7 +325,10 @@ 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);
+ h->demangled = bfd_demangle (output_bfd, h->root.string,
+ DMGL_ANSI | DMGL_PARAMS);
+ if (h->demangled == NULL)
+ h->demangled = h->root.string;
**pph = h;
@@ -707,11 +714,11 @@ check_reloc_refs (bfd *abfd, asection *sec, void *iarg)
| BSF_WEAK)) != 0))
|| (!global
&& ((*q->sym_ptr_ptr)->flags & (BSF_LOCAL
- | BSF_SECTION_SYM)) != 0))
+ | BSF_SECTION_SYM)) != 0
+ && bfd_get_section (*q->sym_ptr_ptr) == info->defsec))
&& (symname != NULL
? strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), symname) == 0
- : (((*q->sym_ptr_ptr)->flags & BSF_SECTION_SYM) != 0
- && bfd_get_section (*q->sym_ptr_ptr) == info->defsec)))
+ : ((*q->sym_ptr_ptr)->flags & BSF_SECTION_SYM) != 0))
{
/* We found a reloc for the symbol. The symbol is defined
in OUTSECNAME. This reloc is from a section which is
diff --git a/ld/ldctor.c b/ld/ldctor.c
index 3de4ef16051e..ab881ad54b66 100644
--- a/ld/ldctor.c
+++ b/ld/ldctor.c
@@ -1,6 +1,6 @@
/* ldctor.c -- constructor support routines
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004 Free Software Foundation, Inc.
+ 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
By Steve Chamberlain <sac@cygnus.com>
This file is part of GLD, the Gnu Linker.
@@ -20,8 +20,8 @@ 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 "bfd.h"
#include "bfdlink.h"
#include "safe-ctype.h"
@@ -131,7 +131,7 @@ ctor_prio (const char *name)
while (*name == '_')
++name;
- if (strncmp (name, "GLOBAL_", sizeof "GLOBAL_" - 1) != 0)
+ if (! CONST_STRNEQ (name, "GLOBAL_"))
return -1;
name += sizeof "GLOBAL_" - 1;
diff --git a/ld/ldemul.c b/ld/ldemul.c
index fad1f184d596..d4ed3d101695 100644
--- a/ld/ldemul.c
+++ b/ld/ldemul.c
@@ -1,6 +1,6 @@
/* ldemul.c -- clearing house for ld emulation states
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2005
+ 2001, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -20,9 +20,8 @@ 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 "bfd.h"
#include "getopt.h"
#include "bfdlink.h"
diff --git a/ld/ldexp.c b/ld/ldexp.c
index c9d707e793e6..4f1d61d28dea 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -1,6 +1,6 @@
/* This module handles expression trees.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support <sac@cygnus.com>.
@@ -28,14 +28,15 @@
which contains a value, a section to which it is relative and a
valid bit. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "ld.h"
#include "ldmain.h"
#include "ldmisc.h"
#include "ldexp.h"
+#include "ldlex.h"
#include <ldgram.h>
#include "ldlang.h"
#include "libiberty.h"
@@ -96,9 +97,11 @@ exp_print_token (token_code_type code, int infix_p)
{ MAP, "MAP" },
{ ENTRY, "ENTRY" },
{ NEXT, "NEXT" },
+ { ALIGNOF, "ALIGNOF" },
{ SIZEOF, "SIZEOF" },
{ ADDR, "ADDR" },
{ LOADADDR, "LOADADDR" },
+ { CONSTANT, "CONSTANT" },
{ MAX_K, "MAX_K" },
{ REL, "relocatable" },
{ DATA_SEGMENT_ALIGN, "DATA_SEGMENT_ALIGN" },
@@ -149,6 +152,7 @@ exp_intop (bfd_vma value)
{
etree_type *new = stat_alloc (sizeof (new->value));
new->type.node_code = INT;
+ new->type.lineno = lineno;
new->value.value = value;
new->value.str = NULL;
new->type.node_class = etree_value;
@@ -160,6 +164,7 @@ exp_bigintop (bfd_vma value, char *str)
{
etree_type *new = stat_alloc (sizeof (new->value));
new->type.node_code = INT;
+ new->type.lineno = lineno;
new->value.value = value;
new->value.str = str;
new->type.node_class = etree_value;
@@ -173,6 +178,7 @@ exp_relop (asection *section, bfd_vma value)
{
etree_type *new = stat_alloc (sizeof (new->rel));
new->type.node_code = REL;
+ new->type.lineno = lineno;
new->type.node_class = etree_rel;
new->rel.section = section;
new->rel.value = value;
@@ -480,10 +486,11 @@ fold_name (etree_type *tree)
/* 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);
+ hdr_size = bfd_sizeof_headers (output_bfd, &link_info);
new_abs (hdr_size);
}
break;
+
case DEFINED:
if (expld.phase == lang_first_phase_enum)
lang_track_definedness (tree->name.name);
@@ -506,6 +513,7 @@ fold_name (etree_type *tree)
expld.result.valid_p = TRUE;
}
break;
+
case NAME:
if (expld.phase == lang_first_phase_enum)
;
@@ -562,7 +570,13 @@ fold_name (etree_type *tree)
lang_output_section_statement_type *os;
os = lang_output_section_find (tree->name.name);
- if (os != NULL && os->processed)
+ if (os == NULL)
+ {
+ if (expld.phase == lang_final_phase_enum)
+ einfo (_("%F%S: undefined section `%s' referenced in expression\n"),
+ tree->name.name);
+ }
+ else if (os->processed_vma)
new_rel (0, NULL, os->bfd_section);
}
break;
@@ -573,27 +587,50 @@ fold_name (etree_type *tree)
lang_output_section_statement_type *os;
os = lang_output_section_find (tree->name.name);
- if (os != NULL && os->processed)
+ if (os == NULL)
+ {
+ if (expld.phase == lang_final_phase_enum)
+ einfo (_("%F%S: undefined section `%s' referenced in expression\n"),
+ tree->name.name);
+ }
+ else if (os->processed_lma)
{
if (os->load_base == NULL)
- new_rel (0, NULL, os->bfd_section);
+ new_abs (os->bfd_section->lma);
else
- exp_fold_tree_1 (os->load_base);
+ {
+ exp_fold_tree_1 (os->load_base);
+ make_abs ();
+ }
}
}
break;
case SIZEOF:
+ case ALIGNOF:
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);
+ {
+ if (expld.phase == lang_final_phase_enum)
+ einfo (_("%F%S: undefined section `%s' referenced in expression\n"),
+ tree->name.name);
+ new_abs (0);
+ }
+ else if (os->processed_vma)
+ {
+ bfd_vma val;
+
+ if (tree->type.node_code == SIZEOF)
+ val = os->bfd_section->size / bfd_octets_per_byte (output_bfd);
+ else
+ val = (bfd_vma)1 << os->bfd_section->alignment_power;
+
+ new_abs (val);
+ }
}
break;
@@ -623,6 +660,16 @@ fold_name (etree_type *tree)
}
break;
+ case CONSTANT:
+ if (strcmp (tree->name.name, "MAXPAGESIZE") == 0)
+ new_abs (bfd_emul_get_maxpagesize (default_target));
+ else if (strcmp (tree->name.name, "COMMONPAGESIZE") == 0)
+ new_abs (bfd_emul_get_commonpagesize (default_target));
+ else
+ einfo (_("%F%S: unknown constant `%s' referenced in expression\n"),
+ tree->name.name);
+ break;
+
default:
FAIL ();
break;
@@ -796,6 +843,7 @@ exp_binop (int code, etree_type *lhs, etree_type *rhs)
etree_type value, *new;
value.type.node_code = code;
+ value.type.lineno = lhs->type.lineno;
value.binary.lhs = lhs;
value.binary.rhs = rhs;
value.type.node_class = etree_binary;
@@ -814,6 +862,7 @@ exp_trinop (int code, etree_type *cond, etree_type *lhs, etree_type *rhs)
etree_type value, *new;
value.type.node_code = code;
+ value.type.lineno = lhs->type.lineno;
value.trinary.lhs = lhs;
value.trinary.cond = cond;
value.trinary.rhs = rhs;
@@ -833,6 +882,7 @@ exp_unop (int code, etree_type *child)
etree_type value, *new;
value.unary.type.node_code = code;
+ value.unary.type.lineno = child->type.lineno;
value.unary.child = child;
value.unary.type.node_class = etree_unary;
exp_fold_tree_no_dot (&value);
@@ -850,6 +900,7 @@ exp_nameop (int code, const char *name)
etree_type value, *new;
value.name.type.node_code = code;
+ value.name.type.lineno = lineno;
value.name.name = name;
value.name.type.node_class = etree_name;
@@ -870,6 +921,7 @@ exp_assop (int code, const char *dst, etree_type *src)
new = stat_alloc (sizeof (new->assign));
new->type.node_code = code;
+ new->type.lineno = src->type.lineno;
new->type.node_class = etree_assign;
new->assign.src = src;
new->assign.dst = dst;
@@ -885,6 +937,7 @@ exp_provide (const char *dst, etree_type *src, bfd_boolean hidden)
n = stat_alloc (sizeof (n->assign));
n->assign.type.node_code = '=';
+ n->assign.type.lineno = src->type.lineno;
n->assign.type.node_class = etree_provide;
n->assign.src = src;
n->assign.dst = dst;
@@ -901,6 +954,7 @@ exp_assert (etree_type *exp, const char *message)
n = stat_alloc (sizeof (n->assert_s));
n->assert_s.type.node_code = '!';
+ n->assert_s.type.lineno = exp->type.lineno;
n->assert_s.type.node_class = etree_assert;
n->assert_s.child = exp;
n->assert_s.message = message;
@@ -1079,7 +1133,10 @@ exp_get_abs_int (etree_type *tree, int def, char *name)
return expld.result.value;
}
else if (name != NULL && expld.phase != lang_mark_phase_enum)
- einfo (_("%F%S non constant expression for %s\n"), name);
+ {
+ lineno = tree->type.lineno;
+ einfo (_("%F%S: nonconstant expression for %s\n"), name);
+ }
}
return def;
}
diff --git a/ld/ldexp.h b/ld/ldexp.h
index fed3a0da44c9..3534188993a4 100644
--- a/ld/ldexp.h
+++ b/ld/ldexp.h
@@ -32,6 +32,7 @@ typedef struct {
typedef struct {
int node_code;
+ unsigned int lineno;
enum {
etree_binary,
etree_trinary,
diff --git a/ld/ldfile.c b/ld/ldfile.c
index 69d8fd91e44c..9781aac887e1 100644
--- a/ld/ldfile.c
+++ b/ld/ldfile.c
@@ -1,6 +1,6 @@
/* Linker file opening and searching.
Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -21,8 +21,8 @@
/* ldfile.c: look after all the file stuff. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "safe-ctype.h"
#include "ld.h"
@@ -252,8 +252,10 @@ ldfile_try_open_bfd (const char *attempt,
yyin = NULL;
if (skip)
{
- einfo (_("%P: skipping incompatible %s when searching for %s\n"),
- attempt, entry->local_sym_name);
+ if (command_line.warn_search_mismatch)
+ einfo (_("%P: skipping incompatible %s "
+ "when searching for %s\n"),
+ attempt, entry->local_sym_name);
bfd_close (entry->the_bfd);
entry->the_bfd = NULL;
return FALSE;
@@ -279,8 +281,10 @@ ldfile_try_open_bfd (const char *attempt,
&& 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);
+ if (command_line.warn_search_mismatch)
+ einfo (_("%P: skipping incompatible %s "
+ "when searching for %s\n"),
+ attempt, entry->local_sym_name);
bfd_close (entry->the_bfd);
entry->the_bfd = NULL;
return FALSE;
diff --git a/ld/ldgram.c b/ld/ldgram.c
deleted file mode 100644
index 37385a6a9629..000000000000
--- a/ld/ldgram.c
+++ /dev/null
@@ -1,4163 +0,0 @@
-/* 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/ld/ldgram.h b/ld/ldgram.h
deleted file mode 100644
index 438e10715a1c..000000000000
--- a/ld/ldgram.h
+++ /dev/null
@@ -1,307 +0,0 @@
-/* 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/ld/ldgram.y b/ld/ldgram.y
index 3829e6ae00a1..c6f268b1d7cb 100644
--- a/ld/ldgram.y
+++ b/ld/ldgram.y
@@ -1,6 +1,6 @@
/* 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.
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
This file is part of GNU ld.
@@ -26,8 +26,8 @@
#define DONTDECLARE_MALLOC
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "ld.h"
#include "ldexp.h"
@@ -131,14 +131,13 @@ static int error_index;
%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 MEMORY
%token NOLOAD DSECT COPY INFO OVERLAY
-%token NAME LNAME DEFINED TARGET_K SEARCH_DIR MAP ENTRY
+%token DEFINED TARGET_K SEARCH_DIR MAP ENTRY
%token <integer> NEXT
-%token SIZEOF ADDR LOADADDR MAX_K MIN_K
+%token SIZEOF ALIGNOF ADDR LOADADDR MAX_K MIN_K
%token STARTUP HLL SYSLIB FLOAT NOFLOAT NOCROSSREFS
%token ORIGIN FILL
%token LENGTH CREATE_OBJECT_SYMBOLS INPUT GROUP OUTPUT CONSTRUCTORS
@@ -152,9 +151,11 @@ static int error_index;
%token GLOBAL LOCAL VERSIONK INPUT_VERSION_SCRIPT
%token KEEP ONLY_IF_RO ONLY_IF_RW SPECIAL
%token EXCLUDE_FILE
+%token CONSTANT
%type <versyms> vers_defns
%type <versnode> vers_tag
%type <deflist> verdep
+%token INPUT_DYNAMIC_LIST
%%
@@ -162,6 +163,7 @@ file:
INPUT_SCRIPT script_file
| INPUT_MRI_SCRIPT mri_script_file
| INPUT_VERSION_SCRIPT version_script_file
+ | INPUT_DYNAMIC_LIST dynamic_list_file
| INPUT_DEFSYM defsym_expr
;
@@ -278,33 +280,33 @@ casesymlist:
| casesymlist ',' NAME
;
+/* Parsed as expressions so that commas separate entries */
extern_name_list:
+ { ldlex_expression (); }
+ extern_name_list_body
+ { ldlex_popstate (); }
+
+extern_name_list_body:
NAME
{ ldlang_add_undef ($1); }
- | extern_name_list NAME
+ | extern_name_list_body NAME
{ ldlang_add_undef ($2); }
- | extern_name_list ',' NAME
+ | extern_name_list_body ',' NAME
{ ldlang_add_undef ($3); }
;
script_file:
- {
- ldlex_both();
- }
- ifile_list
- {
- ldlex_popstate();
- }
+ { ldlex_both(); }
+ ifile_list
+ { ldlex_popstate(); }
;
-
ifile_list:
- ifile_list ifile_p1
+ ifile_list ifile_p1
|
;
-
ifile_p1:
memory
| sections
@@ -571,6 +573,9 @@ statement:
{
lang_add_fill ($3);
}
+ | ASSERT_K {ldlex_expression ();} '(' exp ',' NAME ')' end
+ { ldlex_popstate ();
+ lang_add_assignment (exp_assert ($4, $6)); }
;
statement_list:
@@ -835,12 +840,16 @@ exp :
| SIZEOF_HEADERS
{ $$ = exp_nameop (SIZEOF_HEADERS,0); }
+ | ALIGNOF '(' NAME ')'
+ { $$ = exp_nameop (ALIGNOF,$3); }
| SIZEOF '(' NAME ')'
{ $$ = exp_nameop (SIZEOF,$3); }
| ADDR '(' NAME ')'
{ $$ = exp_nameop (ADDR,$3); }
| LOADADDR '(' NAME ')'
{ $$ = exp_nameop (LOADADDR,$3); }
+ | CONSTANT '(' NAME ')'
+ { $$ = exp_nameop (CONSTANT,$3); }
| ABSOLUTE '(' exp ')'
{ $$ = exp_unop (ABSOLUTE, $3); }
| ALIGN_K '(' exp ')'
@@ -960,10 +969,10 @@ section: NAME { ldlex_expression(); }
type:
NOLOAD { sectype = noload_section; }
- | DSECT { sectype = dsect_section; }
- | COPY { sectype = copy_section; }
- | INFO { sectype = info_section; }
- | OVERLAY { sectype = overlay_section; }
+ | DSECT { sectype = noalloc_section; }
+ | COPY { sectype = noalloc_section; }
+ | INFO { sectype = noalloc_section; }
+ | OVERLAY { sectype = noalloc_section; }
;
atype:
@@ -1136,6 +1145,34 @@ phdr_val:
}
;
+dynamic_list_file:
+ {
+ ldlex_version_file ();
+ PUSH_ERROR (_("dynamic list"));
+ }
+ dynamic_list_nodes
+ {
+ ldlex_popstate ();
+ POP_ERROR ();
+ }
+ ;
+
+dynamic_list_nodes:
+ dynamic_list_node
+ | dynamic_list_nodes dynamic_list_node
+ ;
+
+dynamic_list_node:
+ '{' dynamic_list_tag '}' ';'
+ ;
+
+dynamic_list_tag:
+ vers_defns ';'
+ {
+ lang_append_dynamic_list ($1);
+ }
+ ;
+
/* This syntax is used within an external version script file. */
version_script_file:
diff --git a/ld/ldint.texinfo b/ld/ldint.texinfo
index dc6e9a65ef38..85d736b088ca 100644
--- a/ld/ldint.texinfo
+++ b/ld/ldint.texinfo
@@ -1,6 +1,7 @@
\input texinfo
@setfilename ldint.info
-@c Copyright 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003
+@c Copyright 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+@c 2003, 2007
@c Free Software Foundation, Inc.
@ifinfo
@@ -11,28 +12,31 @@ END-INFO-DIR-ENTRY
@end format
@end ifinfo
-@ifinfo
+@copying
This file documents the internals of the GNU linker ld.
-Copyright 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000
+Copyright @copyright{} 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2007
Free Software Foundation, Inc.
Contributed by Cygnus Support.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.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 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 ``GNU General Public License'' and ``Funding
+Free Software'', the Front-Cover texts being (a) (see below), and with
+the Back-Cover Texts being (b) (see below). A copy of the license is
+included in the section entitled ``GNU Free Documentation License''.
-@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).
+(a) The FSF's Front-Cover Text is:
-@end ignore
-@end ifinfo
+ A GNU Manual
+
+(b) The FSF's Back-Cover Text is:
+
+ You have freedom to copy and modify this GNU Manual, like GNU
+ software. Copies published by the Free Software Foundation raise
+ funds for GNU development.
+@end copying
@iftex
@finalout
@@ -179,10 +183,10 @@ as well as some conventional shell variables interpreted by the
@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}.
+the script @file{scripttempl/@var{script}.sc}.
@item TEMPLATE_NAME
-This is the name of the @file{emultemlp} script to use. If
+This is the name of the @file{emultempl} script to use. If
@code{TEMPLATE_NAME} is set to @var{template}, @file{genscripts.sh} will
use the script @file{emultempl/@var{template}.em}. If this variable is
not set, the default value is @samp{generic}.
@@ -290,7 +294,7 @@ option. The output has an extension of
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.
+@code{GENERATE_SHLIB_SCRIPT} is defined in the @file{emulparams} file.
The @file{emultempl} script must arrange to use this script at the
appropriate time, normally when the linker is invoked with the @code{-shared
-z combreloc} option. The output has an extension of @file{.xsc}.
@@ -644,7 +648,7 @@ 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
+I.e., whenever client contains something like
@code{mov dll_var,%eax,}
@@ -653,7 +657,7 @@ 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
+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.
diff --git a/ld/ldlang.c b/ld/ldlang.c
index b0a28d54a9fe..a732525b0b81 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -1,6 +1,6 @@
/* Linker command language support.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -20,8 +20,8 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "libiberty.h"
#include "safe-ctype.h"
#include "obstack.h"
@@ -52,7 +52,6 @@ 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;
@@ -62,19 +61,15 @@ 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 *);
@@ -85,12 +80,15 @@ 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);
+static void lang_finalize_version_expr_head
+ (struct bfd_elf_version_expr_head *);
/* 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 };
+lang_statement_list_type input_file_chain;
struct bfd_sym_chain entry_symbol = { NULL, NULL };
static const char *entry_symbol_default = "start";
const char *entry_section = ".text";
@@ -99,6 +97,7 @@ bfd_boolean lang_has_input_file = FALSE;
bfd_boolean had_output_filename = FALSE;
bfd_boolean lang_float_flag = FALSE;
bfd_boolean delete_output_file_on_failure = FALSE;
+struct lang_phdr *lang_phdr_list;
struct lang_nocrossrefs *nocrossref_list;
static struct unique_sections *unique_section_list;
static bfd_boolean ldlang_sysrooted_script = FALSE;
@@ -280,7 +279,7 @@ find_section (lang_input_statement_type *file,
{
section_iterator_callback_data cb_data = { NULL, FALSE };
- bfd_get_section_by_name_if (file->the_bfd, sec->spec.name,
+ 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;
@@ -317,6 +316,124 @@ match_simple_wild (const char *pattern, const char *name)
return TRUE;
}
+/* Compare sections ASEC and BSEC according to SORT. */
+
+static int
+compare_section (sort_type sort, asection *asec, asection *bsec)
+{
+ int ret;
+
+ switch (sort)
+ {
+ default:
+ abort ();
+
+ case by_alignment_name:
+ ret = (bfd_section_alignment (bsec->owner, bsec)
+ - bfd_section_alignment (asec->owner, asec));
+ if (ret)
+ break;
+ /* Fall through. */
+
+ case by_name:
+ ret = strcmp (bfd_get_section_name (asec->owner, asec),
+ bfd_get_section_name (bsec->owner, bsec));
+ break;
+
+ case by_name_alignment:
+ ret = strcmp (bfd_get_section_name (asec->owner, asec),
+ bfd_get_section_name (bsec->owner, bsec));
+ if (ret)
+ break;
+ /* Fall through. */
+
+ case by_alignment:
+ ret = (bfd_section_alignment (bsec->owner, bsec)
+ - bfd_section_alignment (asec->owner, asec));
+ break;
+ }
+
+ return ret;
+}
+
+/* Build a Binary Search Tree to sort sections, unlike insertion sort
+ used in wild_sort(). BST is considerably faster if the number of
+ of sections are large. */
+
+static lang_section_bst_type **
+wild_sort_fast (lang_wild_statement_type *wild,
+ struct wildcard_list *sec,
+ lang_input_statement_type *file ATTRIBUTE_UNUSED,
+ asection *section)
+{
+ lang_section_bst_type **tree;
+
+ tree = &wild->tree;
+ if (!wild->filenames_sorted
+ && (sec == NULL || sec->spec.sorted == none))
+ {
+ /* Append at the right end of tree. */
+ while (*tree)
+ tree = &((*tree)->right);
+ return tree;
+ }
+
+ while (*tree)
+ {
+ /* Find the correct node to append this section. */
+ if (compare_section (sec->spec.sorted, section, (*tree)->section) < 0)
+ tree = &((*tree)->left);
+ else
+ tree = &((*tree)->right);
+ }
+
+ return tree;
+}
+
+/* Use wild_sort_fast to build a BST to sort sections. */
+
+static void
+output_section_callback_fast (lang_wild_statement_type *ptr,
+ struct wildcard_list *sec,
+ asection *section,
+ lang_input_statement_type *file,
+ void *output ATTRIBUTE_UNUSED)
+{
+ lang_section_bst_type *node;
+ lang_section_bst_type **tree;
+
+ if (unique_section_p (section))
+ return;
+
+ node = xmalloc (sizeof (lang_section_bst_type));
+ node->left = 0;
+ node->right = 0;
+ node->section = section;
+
+ tree = wild_sort_fast (ptr, sec, file, section);
+ if (tree != NULL)
+ *tree = node;
+}
+
+/* Convert a sorted sections' BST back to list form. */
+
+static void
+output_section_callback_tree_to_list (lang_wild_statement_type *ptr,
+ lang_section_bst_type *tree,
+ void *output)
+{
+ if (tree->left)
+ output_section_callback_tree_to_list (ptr, tree->left, output);
+
+ lang_add_section (&ptr->children, tree->section,
+ (lang_output_section_statement_type *) output);
+
+ if (tree->right)
+ output_section_callback_tree_to_list (ptr, tree->right, output);
+
+ free (tree);
+}
+
/* Specialized, optimized routines for handling different kinds of
wildcards */
@@ -544,6 +661,11 @@ analyze_walk_wild_section_handler (lang_wild_statement_type *ptr)
int data_counter;
ptr->walk_wild_section_handler = walk_wild_section_general;
+ ptr->handler_data[0] = NULL;
+ ptr->handler_data[1] = NULL;
+ ptr->handler_data[2] = NULL;
+ ptr->handler_data[3] = NULL;
+ ptr->tree = NULL;
/* Count how many wildcard_specs there are, and how many of those
actually use wildcards in the name. Also, bail out if any of the
@@ -669,7 +791,7 @@ walk_wild (lang_wild_statement_type *s, callback_t callback, void *data)
{
LANG_FOR_EACH_INPUT_STATEMENT (f)
{
- if (fnmatch (file_spec, f->filename, FNM_FILE_NAME) == 0)
+ if (fnmatch (file_spec, f->filename, 0) == 0)
walk_wild_file (s, f, callback, data);
}
}
@@ -791,6 +913,14 @@ new_afile (const char *name,
lang_has_input_file = TRUE;
p->target = target;
p->sysrooted = FALSE;
+
+ if (file_type == lang_input_file_is_l_enum
+ && name[0] == ':' && name[1] != '\0')
+ {
+ file_type = lang_input_file_is_search_file_enum;
+ name = name + 1;
+ }
+
switch (file_type)
{
case lang_input_file_is_symbols_only_enum:
@@ -866,7 +996,6 @@ 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);
}
@@ -884,7 +1013,7 @@ static struct bfd_hash_table output_section_statement_table;
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,
+output_section_statement_newfunc (struct bfd_hash_entry *entry,
struct bfd_hash_table *table,
const char *string)
{
@@ -1034,16 +1163,17 @@ lang_memory_region_lookup (const char *const name, bfd_boolean create)
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->last_os = NULL;
+ new->flags = 0;
+ new->not_flags = 0;
new->had_full_message = FALSE;
+ *lang_memory_region_list_tail = new;
+ lang_memory_region_list_tail = &new->next;
+
return new;
}
@@ -1332,7 +1462,6 @@ lang_insert_orphan (asection *s,
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;
@@ -1368,28 +1497,19 @@ lang_insert_orphan (asection *s,
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, ".")));
+ lang_add_assignment (exp_provide (symname,
+ exp_nameop (NAME, "."),
+ FALSE));
}
}
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);
+ NULL, 0);
if (add_child == NULL)
add_child = &os->children;
@@ -1409,8 +1529,9 @@ lang_insert_orphan (asection *s,
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, ".")));
+ lang_add_assignment (exp_provide (symname,
+ exp_nameop (NAME, "."),
+ FALSE));
}
/* Restore the global list pointer. */
@@ -1446,7 +1567,18 @@ lang_insert_orphan (asection *s,
place->section = &output_bfd->sections;
as = *place->section;
- if (as != snew && as->prev != snew)
+
+ 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);
@@ -1613,8 +1745,9 @@ lang_map (void)
continue;
for (s = file->the_bfd->sections; s != NULL; s = s->next)
- if (s->output_section == NULL
- || s->output_section->owner != output_bfd)
+ if ((s->output_section == NULL
+ || s->output_section->owner != output_bfd)
+ && (s->flags & (SEC_LINKER_CREATED | SEC_KEEP)) == 0)
{
if (! dis_header_printed)
{
@@ -1670,7 +1803,7 @@ lang_map (void)
fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
- if (! command_line.reduce_memory_overheads)
+ if (! link_info.reduce_memory_overheads)
{
obstack_begin (&map_obstack, 1000);
for (p = link_info.input_bfds; p != (bfd *) NULL; p = p->link_next)
@@ -1728,7 +1861,8 @@ sort_def_symbol (hash_entry, info)
/* Initialize an output section. */
static void
-init_os (lang_output_section_statement_type *s, asection *isec)
+init_os (lang_output_section_statement_type *s, asection *isec,
+ flagword flags)
{
if (s->bfd_section != NULL)
return;
@@ -1738,7 +1872,8 @@ init_os (lang_output_section_statement_type *s, asection *isec)
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);
+ s->bfd_section = bfd_make_section_with_flags (output_bfd, s->name,
+ flags);
if (s->bfd_section == NULL)
{
einfo (_("%P%F: output format %s cannot represent section called %s\n"),
@@ -1746,7 +1881,8 @@ init_os (lang_output_section_statement_type *s, asection *isec)
}
s->bfd_section->output_section = s->bfd_section;
s->bfd_section->output_offset = 0;
- if (!command_line.reduce_memory_overheads)
+
+ if (!link_info.reduce_memory_overheads)
{
fat_section_userdata_type *new
= stat_alloc (sizeof (fat_section_userdata_type));
@@ -1754,7 +1890,6 @@ init_os (lang_output_section_statement_type *s, asection *isec)
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)
@@ -1816,7 +1951,7 @@ exp_init_os (etree_type *exp)
os = lang_output_section_find (exp->name.name);
if (os != NULL && os->bfd_section == NULL)
- init_os (os, NULL);
+ init_os (os, NULL, 0);
}
}
break;
@@ -1840,7 +1975,7 @@ section_already_linked (bfd *abfd, asection *sec, void *data)
}
if (!(abfd->flags & DYNAMIC))
- bfd_section_already_linked (abfd, sec);
+ bfd_section_already_linked (abfd, sec, &link_info);
}
/* The wild routines.
@@ -1891,8 +2026,33 @@ lang_add_section (lang_statement_list_type *ptr,
lang_input_section_type *new;
flagword flags;
+ 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;
+
+ switch (output->sectype)
+ {
+ case normal_section:
+ case overlay_section:
+ break;
+ case noalloc_section:
+ flags &= ~SEC_ALLOC;
+ break;
+ case noload_section:
+ flags &= ~SEC_LOAD;
+ flags |= SEC_NEVER_LOAD;
+ break;
+ }
+
if (output->bfd_section == NULL)
- init_os (output, section);
+ init_os (output, section, flags);
first = ! output->bfd_section->linker_has_input;
output->bfd_section->linker_has_input = 1;
@@ -1916,17 +2076,6 @@ lang_add_section (lang_statement_list_type *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
@@ -1963,22 +2112,6 @@ lang_add_section (lang_statement_list_type *ptr,
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;
@@ -1996,46 +2129,6 @@ lang_add_section (lang_statement_list_type *ptr,
}
}
-/* 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
@@ -2218,12 +2311,9 @@ lookup_name (const char *name)
/* 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;
+ const char *filename = search->local_sym_name;
- if (filename == NULL && name == NULL)
- return search;
if (filename != NULL
- && name != NULL
&& strcmp (filename, name) == 0)
break;
}
@@ -2233,11 +2323,8 @@ lookup_name (const char *name)
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)
+ don't add this file. */
+ if (search->loaded || !search->real)
return search;
if (! load_symbols (search, NULL))
@@ -2273,7 +2360,7 @@ add_excluded_libs (const char *list)
entry->name[end - p] = '\0';
excluded_libs = entry;
if (*end == '\0')
- break;
+ break;
p = end + 1;
}
}
@@ -2309,7 +2396,7 @@ check_excluded_libs (bfd *abfd)
/* Get the symbols for an input file. */
-static bfd_boolean
+bfd_boolean
load_symbols (lang_input_statement_type *entry,
lang_statement_list_type *place)
{
@@ -2460,19 +2547,33 @@ wild (lang_wild_statement_type *s,
{
struct wildcard_list *sec;
- walk_wild (s, output_section_callback, output);
-
- for (sec = s->section_list; sec != NULL; sec = sec->next)
+ if (s->handler_data[0]
+ && s->handler_data[0]->spec.sorted == by_name
+ && !s->filenames_sorted)
{
- if (default_common_section != NULL)
- break;
+ lang_section_bst_type *tree;
+
+ walk_wild (s, output_section_callback_fast, output);
+
+ tree = s->tree;
+ if (tree)
+ {
+ output_section_callback_tree_to_list (s, tree, output);
+ s->tree = NULL;
+ }
+ }
+ else
+ walk_wild (s, output_section_callback, output);
+
+ if (default_common_section == NULL)
+ for (sec = s->section_list; sec != NULL; sec = sec->next)
if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
{
/* Remember the section that common is going to in case we
later get something which doesn't know where to put it. */
default_common_section = output;
+ break;
}
- }
}
/* Return TRUE iff target is the sought target. */
@@ -3061,7 +3162,8 @@ update_wild_statements (lang_statement_union_type *s)
case lang_wild_statement_enum:
sec = s->wild_statement.section_list;
- if (sec != NULL)
+ for (sec = s->wild_statement.section_list; sec != NULL;
+ sec = sec->next)
{
switch (sec->spec.sorted)
{
@@ -3107,6 +3209,8 @@ map_input_to_output_sections
(lang_statement_union_type *s, const char *target,
lang_output_section_statement_type *os)
{
+ flagword flags;
+
for (; s != NULL; s = s->header.next)
{
switch (s->header.type)
@@ -3156,26 +3260,29 @@ map_input_to_output_sections
/* 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);
+ flags = SEC_HAS_CONTENTS;
/* 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;
+ flags |= SEC_ALLOC | SEC_LOAD;
+ if (os->bfd_section == NULL)
+ init_os (os, NULL, flags);
+ else
+ os->bfd_section->flags |= flags;
break;
- case lang_fill_statement_enum:
case lang_input_section_enum:
+ break;
+ case lang_fill_statement_enum:
case lang_object_symbols_statement_enum:
case lang_reloc_statement_enum:
case lang_padding_statement_enum:
case lang_input_statement_enum:
if (os != NULL && os->bfd_section == NULL)
- init_os (os, NULL);
+ init_os (os, NULL, 0);
break;
case lang_assignment_statement_enum:
if (os != NULL && os->bfd_section == NULL)
- init_os (os, NULL);
+ init_os (os, NULL, 0);
/* Make sure that any sections mentioned in the assignment
are initialized. */
@@ -3185,7 +3292,7 @@ map_input_to_output_sections
FAIL ();
break;
case lang_address_statement_enum:
- /* Mark the specified section with the supplied address.
+ /* 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
@@ -3195,15 +3302,15 @@ map_input_to_output_sections
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
+ 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);
+ init_os (aos, NULL, 0);
aos->addr_tree = s->address_statement.address;
}
break;
@@ -3273,7 +3380,8 @@ strip_excluded_output_sections (void)
{
/* We don't set bfd_section to NULL since bfd_section of the
removed output section statement may still be used. */
- os->ignored = TRUE;
+ if (!os->section_relative_symbol)
+ os->ignored = TRUE;
output_section->flags |= SEC_EXCLUDE;
bfd_section_list_remove (output_bfd, output_section);
output_bfd->section_count--;
@@ -3314,14 +3422,8 @@ print_output_section_statement
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);
- }
+ if (section->vma != section->lma)
+ minfo (_(" load address 0x%V"), section->lma);
}
print_nl ();
@@ -3336,7 +3438,7 @@ print_output_section_statement
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)
{
@@ -3493,8 +3595,7 @@ print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr)
}
static void
-print_all_symbols (sec)
- asection *sec;
+print_all_symbols (asection *sec)
{
struct fat_user_section_struct *ud = get_userdata (sec);
struct map_symbol_def *def;
@@ -3513,64 +3614,61 @@ static void
print_input_section (asection *i)
{
bfd_size_type size = i->size;
+ int len;
+ bfd_vma addr;
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 ();
- 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;
- }
+ ++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;
- }
+ 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);
+ 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;
+ if (size != i->rawsize && i->rawsize != 0)
+ {
+ len = SECTION_NAME_MAP_LENGTH + 3;
#ifdef BFD64
- len += 16;
+ len += 16;
#else
- len += 8;
+ len += 8;
#endif
- while (len > 0)
- {
- print_space ();
- --len;
- }
-
- minfo (_("%W (size before relaxing)\n"), i->rawsize);
+ while (len > 0)
+ {
+ print_space ();
+ --len;
}
- 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);
+ minfo (_("%W (size before relaxing)\n"), i->rawsize);
+ }
- print_dot = addr + TO_ADDR (size);
- }
+ if (i->output_section != NULL && i->output_section->owner == output_bfd)
+ {
+ if (link_info.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);
}
}
@@ -4046,7 +4144,7 @@ lang_check_section_addresses (void)
sections[count] = s;
count++;
}
-
+
if (count <= 1)
return;
@@ -4063,7 +4161,7 @@ lang_check_section_addresses (void)
addresses because overlay sections can have overlapping VMAs
but they must have distinct LMAs. */
os = s;
- os_start = s_start;
+ os_start = s_start;
os_end = s_end;
s = *spp++;
s_start = bfd_section_lma (output_bfd, s);
@@ -4136,11 +4234,12 @@ lang_size_sections_1
{
bfd_vma newdot, after;
lang_output_section_statement_type *os;
+ lang_memory_region_type *r;
os = &s->output_section_statement;
if (os->addr_tree != NULL)
{
- os->processed = FALSE;
+ os->processed_vma = FALSE;
exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
if (!expld.result.valid_p
@@ -4269,24 +4368,117 @@ lang_size_sections_1
lang_size_sections_1 (os->children.head, os, &os->children.head,
os->fill, newdot, relax, check_regions);
- os->processed = TRUE;
+ os->processed_vma = TRUE;
if (bfd_is_abs_section (os->bfd_section) || os->ignored)
+ /* Except for some special linker created sections,
+ no output section should change from zero size
+ after strip_excluded_output_sections. A non-zero
+ size on an ignored section indicates that some
+ input section was not sized early enough. */
+ ASSERT (os->bfd_section->size == 0);
+ else
{
- 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);
+ }
+
+ /* Set section lma. */
+ r = os->region;
+ if (r == NULL)
+ r = lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
+
+ if (os->load_base)
+ {
+ bfd_vma lma = exp_get_abs_int (os->load_base, 0, "load base");
+ os->bfd_section->lma = lma;
}
+ else if (os->region != NULL
+ && os->lma_region != NULL
+ && os->lma_region != os->region)
+ {
+ bfd_vma lma = os->lma_region->current;
- dot = os->bfd_section->vma;
+ if (os->section_alignment != -1)
+ lma = align_power (lma, os->section_alignment);
+ os->bfd_section->lma = lma;
+ }
+ else if (r->last_os != NULL
+ && (os->bfd_section->flags & SEC_ALLOC) != 0)
+ {
+ bfd_vma lma;
+ asection *last;
+
+ last = r->last_os->output_section_statement.bfd_section;
+
+ /* A backwards move of dot should be accompanied by
+ an explicit assignment to the section LMA (ie.
+ os->load_base set) because backwards moves can
+ create overlapping LMAs. */
+ if (dot < last->vma
+ && os->bfd_section->size != 0
+ && dot + os->bfd_section->size <= last->vma)
+ {
+ /* If dot moved backwards then leave lma equal to
+ vma. This is the old default lma, which might
+ just happen to work when the backwards move is
+ sufficiently large. Nag if this changes anything,
+ so people can fix their linker scripts. */
+
+ if (last->vma != last->lma)
+ einfo (_("%P: warning: dot moved backwards before `%s'\n"),
+ os->name);
+ }
+ else
+ {
+ /* If this is an overlay, set the current lma to that
+ at the end of the previous section. */
+ if (os->sectype == overlay_section)
+ lma = last->lma + last->size;
+
+ /* Otherwise, keep the same lma to vma relationship
+ as the previous section. */
+ else
+ lma = dot + last->lma - last->vma;
+
+ if (os->section_alignment != -1)
+ lma = align_power (lma, os->section_alignment);
+ os->bfd_section->lma = lma;
+ }
+ }
+ os->processed_lma = TRUE;
- /* 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);
+ if (bfd_is_abs_section (os->bfd_section) || os->ignored)
+ break;
- os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
+ /* Keep track of normal sections using the default
+ lma region. We use this to set the lma for
+ following sections. Overlays or other linker
+ script assignment to lma might mean that the
+ default lma == vma is incorrect.
+ To avoid warnings about dot moving backwards when using
+ -Ttext, don't start tracking sections until we find one
+ of non-zero size or with lma set differently to vma. */
+ if (((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
+ || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0)
+ && (os->bfd_section->flags & SEC_ALLOC) != 0
+ && (os->bfd_section->size != 0
+ || (r->last_os == NULL
+ && os->bfd_section->vma != os->bfd_section->lma)
+ || (r->last_os != NULL
+ && dot >= (r->last_os->output_section_statement
+ .bfd_section->vma)))
+ && os->lma_region == NULL
+ && !link_info.relocatable)
+ r->last_os = s;
/* .tbss sections effectively have zero size. */
if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
@@ -4316,17 +4508,11 @@ lang_size_sections_1
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);
+ os->lma_region->current
+ = os->bfd_section->lma + TO_ADDR (os->bfd_section->size);
+
if (check_regions)
os_region_check (os, os->lma_region, NULL,
os->bfd_section->lma);
@@ -4442,12 +4628,20 @@ lang_size_sections_1
case lang_assignment_statement_enum:
{
bfd_vma newdot = dot;
+ etree_type *tree = s->assignment_statement.exp;
- exp_fold_tree (s->assignment_statement.exp,
+ exp_fold_tree (tree,
output_section_statement->bfd_section,
&newdot);
- if (newdot != dot && !output_section_statement->ignored)
+ /* This symbol is relative to this section. */
+ if ((tree->type.node_class == etree_provided
+ || tree->type.node_class == etree_assign)
+ && (tree->assign.dst [0] != '.'
+ || tree->assign.dst [1] != '\0'))
+ output_section_statement->section_relative_symbol = 1;
+
+ if (!output_section_statement->ignored)
{
if (output_section_statement == abs_output_section)
{
@@ -4456,7 +4650,7 @@ lang_size_sections_1
lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
FALSE)->current = newdot;
}
- else
+ else if (newdot != dot)
{
/* Insert a pad after this statement. We can't
put the pad before when relaxing, in case the
@@ -4517,6 +4711,48 @@ lang_size_sections_1
return dot;
}
+/* Callback routine that is used in _bfd_elf_map_sections_to_segments.
+ The BFD library has set NEW_SEGMENT to TRUE iff it thinks that
+ CURRENT_SECTION and PREVIOUS_SECTION ought to be placed into different
+ segments. We are allowed an opportunity to override this decision. */
+
+bfd_boolean
+ldlang_override_segment_assignment (struct bfd_link_info * info ATTRIBUTE_UNUSED,
+ bfd * abfd ATTRIBUTE_UNUSED,
+ asection * current_section,
+ asection * previous_section,
+ bfd_boolean new_segment)
+{
+ lang_output_section_statement_type * cur;
+ lang_output_section_statement_type * prev;
+
+ /* The checks below are only necessary when the BFD library has decided
+ that the two sections ought to be placed into the same segment. */
+ if (new_segment)
+ return TRUE;
+
+ /* Paranoia checks. */
+ if (current_section == NULL || previous_section == NULL)
+ return new_segment;
+
+ /* Find the memory regions associated with the two sections.
+ We call lang_output_section_find() here rather than scanning the list
+ of output sections looking for a matching section pointer because if
+ we have a large number of sections then a hash lookup is faster. */
+ cur = lang_output_section_find (current_section->name);
+ prev = lang_output_section_find (previous_section->name);
+
+ /* More paranoia. */
+ if (cur == NULL || prev == NULL)
+ return new_segment;
+
+ /* If the regions are different then force the sections to live in
+ different segments. See the email thread starting at the following
+ URL for the reasons why this is necessary:
+ http://sourceware.org/ml/binutils/2007-02/msg00216.html */
+ return cur->region != prev->region;
+}
+
void
one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
{
@@ -4552,6 +4788,7 @@ lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
expld.dataseg.base -= maxpage;
relro_end -= maxpage;
}
+ lang_reset_memory_regions ();
one_lang_size_sections_pass (relax, check_regions);
if (expld.dataseg.relro_end > relro_end)
{
@@ -4575,6 +4812,7 @@ lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
< old_min_base)
expld.dataseg.base += expld.dataseg.pagesize;
expld.dataseg.base -= (1 << max_alignment_power);
+ lang_reset_memory_regions ();
one_lang_size_sections_pass (relax, check_regions);
}
}
@@ -4595,6 +4833,7 @@ lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
&& first + last <= expld.dataseg.pagesize)
{
expld.dataseg.phase = exp_dataseg_adjust;
+ lang_reset_memory_regions ();
one_lang_size_sections_pass (relax, check_regions);
}
}
@@ -4605,11 +4844,10 @@ lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
/* 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)
+lang_do_assignments_1 (lang_statement_union_type *s,
+ lang_output_section_statement_type *current_os,
+ fill_type *fill,
+ bfd_vma dot)
{
for (; s != NULL; s = s->header.next)
{
@@ -4617,9 +4855,7 @@ lang_do_assignments_1
{
case lang_constructors_statement_enum:
dot = lang_do_assignments_1 (constructor_list.head,
- output_section_statement,
- fill,
- dot);
+ current_os, fill, dot);
break;
case lang_output_section_statement_enum:
@@ -4630,31 +4866,22 @@ lang_do_assignments_1
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);
+ current_os, fill, dot);
break;
case lang_object_symbols_statement_enum:
@@ -4723,7 +4950,7 @@ lang_do_assignments_1
case lang_assignment_statement_enum:
exp_fold_tree (s->assignment_statement.exp,
- output_section_statement->bfd_section,
+ current_os->bfd_section,
&dot);
break;
@@ -4733,8 +4960,7 @@ lang_do_assignments_1
case lang_group_statement_enum:
dot = lang_do_assignments_1 (s->group_statement.children.head,
- output_section_statement,
- fill, dot);
+ current_os, fill, dot);
break;
default:
@@ -4930,7 +5156,7 @@ lang_check (void)
if (compatible == NULL)
{
if (command_line.warn_mismatch)
- einfo (_("%P: warning: %s architecture of input file `%B'"
+ einfo (_("%P%X: %s architecture of input file `%B'"
" is incompatible with %s output\n"),
bfd_printable_name (input_bfd), input_bfd,
bfd_printable_name (output_bfd));
@@ -5041,10 +5267,19 @@ lang_one_common (struct bfd_link_hash_entry *h, void *info)
header_printed = TRUE;
}
- name = demangle (h->root.string);
- minfo ("%s", name);
- len = strlen (name);
- free (name);
+ name = bfd_demangle (output_bfd, h->root.string,
+ DMGL_ANSI | DMGL_PARAMS);
+ if (name == NULL)
+ {
+ minfo ("%s", h->root.string);
+ len = strlen (h->root.string);
+ }
+ else
+ {
+ minfo ("%s", name);
+ len = strlen (name);
+ free (name);
+ }
if (len >= 19)
{
@@ -5200,8 +5435,6 @@ lang_for_each_file (void (*func) (lang_input_statement_type *))
void
ldlang_add_file (lang_input_statement_type *entry)
{
- bfd **pp;
-
lang_statement_append (&file_chain,
(lang_statement_union_type *) entry,
&entry->next);
@@ -5210,9 +5443,9 @@ ldlang_add_file (lang_input_statement_type *entry)
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;
+
+ *link_info.input_bfds_tail = entry->the_bfd;
+ link_info.input_bfds_tail = &entry->the_bfd->link_next;
entry->the_bfd->usrdata = entry;
bfd_set_gp_size (entry->the_bfd, g_switch_value);
@@ -5319,14 +5552,17 @@ lang_reset_memory_regions (void)
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;
+ p->last_os = NULL;
}
for (os = &lang_output_section_statement.head->output_section_statement;
os != NULL;
os = os->next)
- os->processed = FALSE;
+ {
+ os->processed_vma = FALSE;
+ os->processed_lma = FALSE;
+ }
for (o = output_bfd->sections; o != NULL; o = o->next)
{
@@ -5431,9 +5667,11 @@ relax_sections (void)
/* Keep relaxing until bfd_relax_section gives up. */
bfd_boolean relax_again;
+ link_info.relax_trip = -1;
do
{
- relax_again = FALSE;
+ relax_again = FALSE;
+ link_info.relax_trip++;
/* Note: pe-dll.c does something like this also. If you find
you need to change this code, you probably need to change
@@ -5457,6 +5695,10 @@ relax_sections (void)
void
lang_process (void)
{
+ /* Finalize dynamic list. */
+ if (link_info.dynamic_list)
+ lang_finalize_version_expr_head (&link_info.dynamic_list->head);
+
current_target = default_target;
/* Open the output file. */
@@ -5580,13 +5822,13 @@ lang_process (void)
lang_do_assignments ();
+ ldemul_finish ();
+
/* 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 ();
}
@@ -5989,6 +6231,7 @@ lang_record_phdrs (void)
alc = 10;
secs = xmalloc (alc * sizeof (asection *));
last = NULL;
+
for (l = lang_phdr_list; l != NULL; l = l->next)
{
unsigned int c;
@@ -6014,7 +6257,26 @@ lang_record_phdrs (void)
|| os->bfd_section == NULL
|| (os->bfd_section->flags & SEC_ALLOC) == 0)
continue;
- pl = last;
+
+ if (last)
+ pl = last;
+ else
+ {
+ lang_output_section_statement_type * tmp_os;
+
+ /* If we have not run across a section with a program
+ header assigned to it yet, then scan forwards to find
+ one. This prevents inconsistencies in the linker's
+ behaviour when a script has specified just a single
+ header and there are sections in that script which are
+ not assigned to it, and which occur before the first
+ use of that header. See here for more details:
+ http://sourceware.org/ml/binutils/2007-02/msg00291.html */
+ for (tmp_os = os; tmp_os; tmp_os = tmp_os->next)
+ if (tmp_os->phdrs)
+ break;
+ pl = tmp_os->phdrs;
+ }
}
if (os->bfd_section == NULL)
@@ -6133,7 +6395,7 @@ lang_enter_overlay_section (const char *name)
struct overlay_list *n;
etree_type *size;
- lang_enter_output_section_statement (name, overlay_vma, normal_section,
+ lang_enter_output_section_statement (name, overlay_vma, overlay_section,
0, overlay_subalign, 0, 0);
/* If this is the first section, then base the VMA of future
@@ -6188,15 +6450,17 @@ lang_leave_overlay_section (fill_type *fill,
buf = xmalloc (strlen (clean) + sizeof "__load_start_");
sprintf (buf, "__load_start_%s", clean);
- lang_add_assignment (exp_assop ('=', buf,
- exp_nameop (LOADADDR, name)));
+ lang_add_assignment (exp_provide (buf,
+ exp_nameop (LOADADDR, name),
+ FALSE));
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))));
+ lang_add_assignment (exp_provide (buf,
+ exp_binop ('+',
+ exp_nameop (LOADADDR, name),
+ exp_nameop (SIZEOF, name)),
+ FALSE));
free (clean);
}
@@ -6245,12 +6509,10 @@ lang_leave_overlay (etree_type *lma_expr,
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));
-
+ {
+ l->os->load_base = lma_expr;
+ l->os->sectype = normal_section;
+ }
if (phdrs != NULL && l->os->phdrs == NULL)
l->os->phdrs = phdrs;
@@ -6741,7 +7003,7 @@ lang_do_version_exports_section (void)
/* Do not free the contents, as we used them creating the regex. */
/* Do not include this section in the link. */
- sec->flags |= SEC_EXCLUDE;
+ sec->flags |= SEC_EXCLUDE | SEC_KEEP;
}
lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);
@@ -6763,3 +7025,69 @@ lang_add_unique (const char *name)
ent->next = unique_section_list;
unique_section_list = ent;
}
+
+/* Append the list of dynamic symbols to the existing one. */
+
+void
+lang_append_dynamic_list (struct bfd_elf_version_expr *dynamic)
+{
+ if (link_info.dynamic_list)
+ {
+ struct bfd_elf_version_expr *tail;
+ for (tail = dynamic; tail->next != NULL; tail = tail->next)
+ ;
+ tail->next = link_info.dynamic_list->head.list;
+ link_info.dynamic_list->head.list = dynamic;
+ }
+ else
+ {
+ struct bfd_elf_dynamic_list *d;
+
+ d = xcalloc (1, sizeof *d);
+ d->head.list = dynamic;
+ d->match = lang_vers_match;
+ link_info.dynamic_list = d;
+ }
+}
+
+/* Append the list of C++ typeinfo dynamic symbols to the existing
+ one. */
+
+void
+lang_append_dynamic_list_cpp_typeinfo (void)
+{
+ const char * symbols [] =
+ {
+ "typeinfo name for*",
+ "typeinfo for*"
+ };
+ struct bfd_elf_version_expr *dynamic = NULL;
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE (symbols); i++)
+ dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
+ FALSE);
+
+ lang_append_dynamic_list (dynamic);
+}
+
+/* Append the list of C++ operator new and delete dynamic symbols to the
+ existing one. */
+
+void
+lang_append_dynamic_list_cpp_new (void)
+{
+ const char * symbols [] =
+ {
+ "operator new*",
+ "operator delete*"
+ };
+ struct bfd_elf_version_expr *dynamic = NULL;
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE (symbols); i++)
+ dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
+ FALSE);
+
+ lang_append_dynamic_list (dynamic);
+}
diff --git a/ld/ldlang.h b/ld/ldlang.h
index 8b0d492ed096..f52f46ffbc69 100644
--- a/ld/ldlang.h
+++ b/ld/ldlang.h
@@ -1,6 +1,6 @@
/* ldlang.h - linker command language support
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005
+ 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -54,7 +54,7 @@ typedef struct memory_region_struct
bfd_vma origin;
bfd_size_type length;
bfd_vma current;
- bfd_size_type old_length;
+ union lang_statement_union *last_os;
flagword flags;
flagword not_flags;
bfd_boolean had_full_message;
@@ -108,11 +108,9 @@ typedef struct lang_output_statement_struct
enum section_type
{
normal_section,
- dsect_section,
- copy_section,
+ overlay_section,
noload_section,
- info_section,
- overlay_section
+ noalloc_section
};
/* This structure holds a list of program headers describing
@@ -153,9 +151,13 @@ typedef struct lang_output_section_statement_struct
int constraint;
flagword flags;
enum section_type sectype;
- unsigned int processed : 1;
+ unsigned int processed_vma : 1;
+ unsigned int processed_lma : 1;
unsigned int all_input_readonly : 1;
+ /* If this section should be ignored. */
unsigned int ignored : 1;
+ /* If there is a symbol relative to this section. */
+ unsigned int section_relative_symbol : 1;
} lang_output_section_statement_type;
typedef struct
@@ -308,6 +310,15 @@ typedef void (*walk_wild_section_handler_t) (lang_wild_statement_type *,
typedef bfd_boolean (*lang_match_sec_type_func) (bfd *, const asection *,
bfd *, const asection *);
+/* Binary search tree structure to efficiently sort sections by
+ name. */
+typedef struct lang_section_bst
+{
+ asection *section;
+ struct lang_section_bst *left;
+ struct lang_section_bst *right;
+} lang_section_bst_type;
+
struct lang_wild_statement_struct
{
lang_statement_header_type header;
@@ -319,6 +330,7 @@ struct lang_wild_statement_struct
walk_wild_section_handler_t walk_wild_section_handler;
struct wildcard_list *handler_data[4];
+ lang_section_bst_type *tree;
};
typedef struct lang_address_statement_struct
@@ -384,6 +396,8 @@ struct lang_phdr
etree_type *flags;
};
+extern struct lang_phdr *lang_phdr_list;
+
/* This structure is used to hold a list of sections which may not
cross reference each other. */
@@ -443,6 +457,7 @@ extern struct bfd_sym_chain entry_symbol;
extern const char *entry_section;
extern bfd_boolean entry_from_cmdline;
extern lang_statement_list_type file_chain;
+extern lang_statement_list_type input_file_chain;
extern int lang_statement_iteration;
@@ -592,6 +607,9 @@ extern struct bfd_elf_version_deps *lang_add_vers_depend
(struct bfd_elf_version_deps *, const char *);
extern void lang_register_vers_node
(const char *, struct bfd_elf_version_tree *, struct bfd_elf_version_deps *);
+extern void lang_append_dynamic_list (struct bfd_elf_version_expr *);
+extern void lang_append_dynamic_list_cpp_typeinfo (void);
+extern void lang_append_dynamic_list_cpp_new (void);
bfd_boolean unique_section_p
(const asection *);
extern void lang_add_unique
@@ -604,5 +622,11 @@ extern void lang_update_definedness
(const char *, struct bfd_link_hash_entry *);
extern void add_excluded_libs (const char *);
+extern bfd_boolean load_symbols
+ (lang_input_statement_type *, lang_statement_list_type *);
+
+extern bfd_boolean
+ldlang_override_segment_assignment
+ (struct bfd_link_info *, bfd *, asection *, asection *, bfd_boolean);
#endif
diff --git a/ld/ldlex.c b/ld/ldlex.c
deleted file mode 100644
index a18b3bd4c115..000000000000
--- a/ld/ldlex.c
+++ /dev/null
@@ -1,3833 +0,0 @@
-/* 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/ld/ldlex.h b/ld/ldlex.h
index d35ead6a6489..f274c6826dfa 100644
--- a/ld/ldlex.h
+++ b/ld/ldlex.h
@@ -30,6 +30,7 @@ typedef enum input_enum {
input_script,
input_mri_script,
input_version_script,
+ input_dynamic_list,
input_defsym
} input_type;
diff --git a/ld/ldlex.l b/ld/ldlex.l
index 56ec39164b46..b0313d9b1711 100644
--- a/ld/ldlex.l
+++ b/ld/ldlex.l
@@ -1,7 +1,8 @@
%{
/* Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2000, 2001, 2002, 2003, 2004, 2005, 2007
+ Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -25,11 +26,8 @@ This was written by steve chamberlain
sac@cygnus.com
*/
-
-#include <stdio.h>
-
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "safe-ctype.h"
#include "bfdlink.h"
#include "ld.h"
@@ -132,6 +130,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
case input_script: return INPUT_SCRIPT; break;
case input_mri_script: return INPUT_MRI_SCRIPT; break;
case input_version_script: return INPUT_VERSION_SCRIPT; break;
+ case input_dynamic_list: return INPUT_DYNAMIC_LIST; break;
case input_defsym: return INPUT_DEFSYM; break;
default: abort ();
}
@@ -255,9 +254,10 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
<EXPRESSION,BOTH,SCRIPT>"DATA_SEGMENT_END" { RTOKEN(DATA_SEGMENT_END);}
<EXPRESSION,BOTH,SCRIPT>"ADDR" { RTOKEN(ADDR);}
<EXPRESSION,BOTH,SCRIPT>"LOADADDR" { RTOKEN(LOADADDR);}
+<EXPRESSION,BOTH,SCRIPT>"ALIGNOF" { RTOKEN(ALIGNOF); }
<EXPRESSION,BOTH>"MAX" { RTOKEN(MAX_K); }
<EXPRESSION,BOTH>"MIN" { RTOKEN(MIN_K); }
-<EXPRESSION,BOTH>"ASSERT" { RTOKEN(ASSERT_K); }
+<EXPRESSION,BOTH,SCRIPT>"ASSERT" { RTOKEN(ASSERT_K); }
<BOTH,SCRIPT>"ENTRY" { RTOKEN(ENTRY);}
<BOTH,SCRIPT,MRI>"EXTERN" { RTOKEN(EXTERN);}
<EXPRESSION,BOTH,SCRIPT>"NEXT" { RTOKEN(NEXT);}
@@ -316,6 +316,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
<EXPRESSION,BOTH,SCRIPT>"PROVIDE_HIDDEN" { RTOKEN(PROVIDE_HIDDEN); }
<EXPRESSION,BOTH,SCRIPT>"KEEP" { RTOKEN(KEEP); }
<EXPRESSION,BOTH,SCRIPT>"EXCLUDE_FILE" { RTOKEN(EXCLUDE_FILE); }
+<EXPRESSION,BOTH,SCRIPT>"CONSTANT" { RTOKEN(CONSTANT);}
<MRI>"#".*\n? { ++ lineno; }
<MRI>"\n" { ++ lineno; RTOKEN(NEWLINE); }
<MRI>"*".* { /* Mri comment line */ }
@@ -363,11 +364,19 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
}
-<BOTH,EXPRESSION>{FILENAMECHAR1}{FILENAMECHAR}* {
+<BOTH>{FILENAMECHAR1}{FILENAMECHAR}* {
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+<BOTH>"-l"{FILENAMECHAR}+ {
+ yylval.name = xstrdup (yytext + 2);
+ return LNAME;
+ }
+<EXPRESSION>{FILENAMECHAR1}{NOCFILENAMECHAR}* {
yylval.name = xstrdup (yytext);
return NAME;
}
-<BOTH,EXPRESSION>"-l"{FILENAMECHAR}+ {
+<EXPRESSION>"-l"{NOCFILENAMECHAR}+ {
yylval.name = xstrdup (yytext + 2);
return LNAME;
}
diff --git a/ld/ldmain.c b/ld/ldmain.c
index fbc3081221ef..354c41aeccda 100644
--- a/ld/ldmain.c
+++ b/ld/ldmain.c
@@ -1,6 +1,6 @@
/* Main program of GNU linker.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005, 2006
+ 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Steve Chamberlain steve@cygnus.com
@@ -21,9 +21,8 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
-#include <stdio.h>
+#include "bfd.h"
#include "safe-ctype.h"
#include "libiberty.h"
#include "progress.h"
@@ -161,7 +160,10 @@ static struct bfd_link_callbacks link_callbacks =
reloc_dangerous,
unattached_reloc,
notice,
- einfo
+ einfo,
+ info_msg,
+ minfo,
+ ldlang_override_segment_assignment
};
struct bfd_link_info link_info;
@@ -240,25 +242,17 @@ main (int argc, char **argv)
}
#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.rpath_separator = ':';
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;
+ config.make_executable = TRUE;
+ config.magic_demand_paged = TRUE;
+ config.text_read_only = TRUE;
+
command_line.warn_mismatch = TRUE;
+ command_line.warn_search_mismatch = TRUE;
command_line.check_section_addresses = 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
@@ -267,63 +261,22 @@ main (int argc, char **argv)
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.emit_hash = TRUE;
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;
+ link_info.input_bfds_tail = &link_info.input_bfds;
/* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init
and _fini symbols. We are compatible. */
link_info.init_function = "_init";
link_info.fini_function = "_fini";
+ link_info.relax_pass = 1;
link_info.pei386_auto_import = -1;
- link_info.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);
@@ -347,6 +300,43 @@ main (int argc, char **argv)
einfo (_("%P%F: -r and -shared may not be used together\n"));
}
+ /* We may have -Bsymbolic, -Bsymbolic-functions, --dynamic-list-data,
+ --dynamic-list-cpp-new, --dynamic-list-cpp-typeinfo and
+ --dynamic-list FILE. -Bsymbolic and -Bsymbolic-functions are
+ for shared libraries. -Bsymbolic overrides all others and vice
+ versa. */
+ switch (command_line.symbolic)
+ {
+ case symbolic_unset:
+ break;
+ case symbolic:
+ /* -Bsymbolic is for shared library only. */
+ if (link_info.shared)
+ {
+ link_info.symbolic = TRUE;
+ /* Should we free the unused memory? */
+ link_info.dynamic_list = NULL;
+ command_line.dynamic_list = dynamic_list_unset;
+ }
+ break;
+ case symbolic_functions:
+ /* -Bsymbolic-functions is for shared library only. */
+ if (link_info.shared)
+ command_line.dynamic_list = dynamic_list_data;
+ break;
+ }
+
+ switch (command_line.dynamic_list)
+ {
+ case dynamic_list_unset:
+ break;
+ case dynamic_list_data:
+ link_info.dynamic_data = TRUE;
+ case dynamic_list:
+ link_info.dynamic = TRUE;
+ break;
+ }
+
if (! link_info.shared)
{
if (command_line.filter_shlib)
@@ -372,6 +362,16 @@ main (int argc, char **argv)
the -L's in argv have been processed. */
set_scripts_dir ();
+ /* If we have not already opened and parsed a linker script,
+ try the default script from command line first. */
+ if (saved_script_handle == NULL
+ && command_line.default_script != NULL)
+ {
+ ldfile_open_command_file (command_line.default_script);
+ parser_input = input_script;
+ yyparse ();
+ }
+
/* If we have not already opened and parsed a linker script
read the emulation's appropriate default script. */
if (saved_script_handle == NULL)
@@ -594,7 +594,7 @@ get_sysroot (int argc, char **argv)
const char *path;
for (i = 1; i < argc; i++)
- if (strncmp (argv[i], "--sysroot=", strlen ("--sysroot=")) == 0)
+ if (CONST_STRNEQ (argv[i], "--sysroot="))
return argv[i] + strlen ("--sysroot=");
path = get_relative_sysroot (BINDIR);
@@ -623,7 +623,7 @@ get_emulation (int argc, char **argv)
for (i = 1; i < argc; i++)
{
- if (!strncmp (argv[i], "-m", 2))
+ if (CONST_STRNEQ (argv[i], "-m"))
{
if (argv[i][2] == '\0')
{
diff --git a/ld/ldmisc.c b/ld/ldmisc.c
index 8af043aa2b24..292fc45ccdda 100644
--- a/ld/ldmisc.c
+++ b/ld/ldmisc.c
@@ -1,6 +1,6 @@
/* ldmisc.c
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support.
@@ -21,9 +21,9 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
+#include "sysdep.h"
#include "bfd.h"
#include "bfdlink.h"
-#include "sysdep.h"
#include "libiberty.h"
#include "demangle.h"
#include <stdarg.h>
@@ -144,17 +144,24 @@ vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning)
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
+ {
+ fprintf (fp, _("no symbol"));
+ break;
+ }
+ else if (demangling)
{
char *demangled;
- demangled = demangle (name);
- fprintf (fp, "%s", demangled);
- free (demangled);
+ demangled = bfd_demangle (output_bfd, name,
+ DMGL_ANSI | DMGL_PARAMS);
+ if (demangled != NULL)
+ {
+ fprintf (fp, "%s", demangled);
+ free (demangled);
+ break;
+ }
}
+ fprintf (fp, "%s", name);
}
break;
@@ -432,48 +439,6 @@ vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning)
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
@@ -512,11 +477,14 @@ info_assert (const char *file, unsigned int line)
void
minfo (const char *fmt, ...)
{
- va_list arg;
+ if (config.map_file != NULL)
+ {
+ va_list arg;
- va_start (arg, fmt);
- vfinfo (config.map_file, fmt, arg, FALSE);
- va_end (arg);
+ va_start (arg, fmt);
+ vfinfo (config.map_file, fmt, arg, FALSE);
+ va_end (arg);
+ }
}
void
diff --git a/ld/ldmisc.h b/ld/ldmisc.h
index cf7043354632..92f4e2a65eea 100644
--- a/ld/ldmisc.h
+++ b/ld/ldmisc.h
@@ -1,5 +1,5 @@
/* ldmisc.h -
- Copyright 1991, 1992, 1993, 1994, 1996, 1997, 2001, 2003, 2004
+ Copyright 1991, 1992, 1993, 1994, 1996, 1997, 2001, 2003, 2004, 2007
Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -40,6 +40,5 @@ 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/ld/ldver.c b/ld/ldver.c
index 48b914357ef2..776c722a197b 100644
--- a/ld/ldver.c
+++ b/ld/ldver.c
@@ -1,6 +1,6 @@
/* ldver.c -- Print linker version.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2002,
- 2003 Free Software Foundation, Inc.
+ 2003, 2007 Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -18,10 +18,9 @@
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 "sysdep.h"
#include "bfd.h"
#include "bfdver.h"
-#include "sysdep.h"
#include "ld.h"
#include "ldver.h"
@@ -35,11 +34,11 @@ 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);
+ fprintf (stdout, _("GNU ld %s\n"), BFD_VERSION_STRING);
if (noisy & 2)
{
- printf (_("Copyright 2005 Free Software Foundation, Inc.\n"));
+ printf (_("Copyright 2007 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"));
diff --git a/ld/ldver.texi b/ld/ldver.texi
deleted file mode 100644
index 11d1801d6e65..000000000000
--- a/ld/ldver.texi
+++ /dev/null
@@ -1 +0,0 @@
-@set VERSION 2.17
diff --git a/ld/ldwrite.c b/ld/ldwrite.c
index ee9d74a796d6..7c02ff65657e 100644
--- a/ld/ldwrite.c
+++ b/ld/ldwrite.c
@@ -1,6 +1,6 @@
/* 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.
+ 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain sac@cygnus.com
This file is part of GLD, the Gnu Linker.
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 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 "bfd.h"
#include "bfdlink.h"
#include "libiberty.h"
#include "safe-ctype.h"
@@ -293,7 +293,7 @@ build_link_order (lang_statement_union_type *statement)
static bfd_boolean
unsplittable_name (const char *name)
{
- if (strncmp (name, ".stab", 5) == 0)
+ if (CONST_STRNEQ (name, ".stab"))
{
/* There are several stab like string sections. We pattern match on
".stab...str" */
@@ -338,7 +338,7 @@ clone_section (bfd *abfd, asection *s, const char *name, int *count)
{
/* Some section names cannot be truncated, as the name is
used to locate some other section. */
- if (strncmp (name, ".stab", 5) == 0
+ if (CONST_STRNEQ (name, ".stab")
|| strcmp (name, "$GDB_SYMBOLS$") == 0)
{
einfo (_ ("%F%P: cannot create split section name for %s\n"), name);
diff --git a/ld/lexsup.c b/ld/lexsup.c
index c2bef1dd4829..dddbdcaff000 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -1,6 +1,6 @@
/* Parse options for the GNU linker.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -20,9 +20,9 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "config.h"
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
+#include "bfdver.h"
#include "libiberty.h"
#include <stdio.h>
#include <string.h>
@@ -83,6 +83,7 @@ enum option_values
OPTION_NO_DEMANGLE,
OPTION_NO_KEEP_MEMORY,
OPTION_NO_WARN_MISMATCH,
+ OPTION_NO_WARN_SEARCH_MISMATCH,
OPTION_NOINHIBIT_EXEC,
OPTION_NON_SHARED,
OPTION_NO_WHOLE_ARCHIVE,
@@ -97,6 +98,7 @@ enum option_values
OPTION_SORT_SECTION,
OPTION_STATS,
OPTION_SYMBOLIC,
+ OPTION_SYMBOLIC_FUNCTIONS,
OPTION_TASK_LINK,
OPTION_TBSS,
OPTION_TDATA,
@@ -107,6 +109,10 @@ enum option_values
OPTION_VERSION,
OPTION_VERSION_SCRIPT,
OPTION_VERSION_EXPORTS_SECTION,
+ OPTION_DYNAMIC_LIST,
+ OPTION_DYNAMIC_LIST_CPP_NEW,
+ OPTION_DYNAMIC_LIST_CPP_TYPEINFO,
+ OPTION_DYNAMIC_LIST_DATA,
OPTION_WARN_COMMON,
OPTION_WARN_CONSTRUCTORS,
OPTION_WARN_FATAL,
@@ -124,6 +130,8 @@ enum option_values
OPTION_FORCE_EXE_SUFFIX,
OPTION_GC_SECTIONS,
OPTION_NO_GC_SECTIONS,
+ OPTION_PRINT_GC_SECTIONS,
+ OPTION_NO_PRINT_GC_SECTIONS,
OPTION_HASH_SIZE,
OPTION_CHECK_SECTIONS,
OPTION_NO_CHECK_SECTIONS,
@@ -153,7 +161,8 @@ enum option_values
OPTION_WARN_UNRESOLVED_SYMBOLS,
OPTION_ERROR_UNRESOLVED_SYMBOLS,
OPTION_WARN_SHARED_TEXTREL,
- OPTION_REDUCE_MEMORY_OVERHEADS
+ OPTION_REDUCE_MEMORY_OVERHEADS,
+ OPTION_DEFAULT_SCRIPT
};
/* The long options. This structure is used for both the option
@@ -276,6 +285,10 @@ static const struct ld_option ld_options[] =
't', NULL, N_("Trace file opens"), TWO_DASHES },
{ {"script", required_argument, NULL, 'T'},
'T', N_("FILE"), N_("Read linker script"), TWO_DASHES },
+ { {"default-script", required_argument, NULL, OPTION_DEFAULT_SCRIPT},
+ '\0', N_("FILE"), N_("Read default linker script"), TWO_DASHES },
+ { {"dT", required_argument, NULL, OPTION_DEFAULT_SCRIPT},
+ '\0', NULL, NULL, ONE_DASH },
{ {"undefined", required_argument, NULL, 'u'},
'u', N_("SYMBOL"), N_("Start with undefined reference to SYMBOL"),
TWO_DASHES },
@@ -342,6 +355,8 @@ static const struct ld_option ld_options[] =
'\0', NULL, NULL, ONE_DASH },
{ {"Bsymbolic", no_argument, NULL, OPTION_SYMBOLIC},
'\0', NULL, N_("Bind global references locally"), ONE_DASH },
+ { {"Bsymbolic-functions", no_argument, NULL, OPTION_SYMBOLIC_FUNCTIONS},
+ '\0', NULL, N_("Bind global function references locally"), ONE_DASH },
{ {"check-sections", no_argument, NULL, OPTION_CHECK_SECTIONS},
'\0', NULL, N_("Check section addresses for overlaps (default)"),
TWO_DASHES },
@@ -370,6 +385,12 @@ static const struct ld_option ld_options[] =
{ {"no-gc-sections", no_argument, NULL, OPTION_NO_GC_SECTIONS},
'\0', NULL, N_("Don't remove unused sections (default)"),
TWO_DASHES },
+ { {"print-gc-sections", no_argument, NULL, OPTION_PRINT_GC_SECTIONS},
+ '\0', NULL, N_("List removed unused sections on stderr"),
+ TWO_DASHES },
+ { {"no-print-gc-sections", no_argument, NULL, OPTION_NO_PRINT_GC_SECTIONS},
+ '\0', NULL, N_("Do not list removed unused sections"),
+ TWO_DASHES },
{ {"hash-size=<NUMBER>", required_argument, NULL, OPTION_HASH_SIZE},
'\0', NULL, N_("Set default hash table size close to <NUMBER>"),
TWO_DASHES },
@@ -408,6 +429,10 @@ static const struct ld_option ld_options[] =
TWO_DASHES },
{ {"no-warn-mismatch", no_argument, NULL, OPTION_NO_WARN_MISMATCH},
'\0', NULL, N_("Don't warn about mismatched input files"), TWO_DASHES},
+ { {"no-warn-search-mismatch", no_argument, NULL,
+ OPTION_NO_WARN_SEARCH_MISMATCH},
+ '\0', NULL, N_("Don't warn on finding an incompatible library"),
+ TWO_DASHES},
{ {"no-whole-archive", no_argument, NULL, OPTION_NO_WHOLE_ARCHIVE},
'\0', NULL, N_("Turn off --whole-archive"), TWO_DASHES },
{ {"noinhibit-exec", no_argument, NULL, OPTION_NOINHIBIT_EXEC},
@@ -493,6 +518,14 @@ static const struct ld_option ld_options[] =
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 },
+ { {"dynamic-list-data", no_argument, NULL, OPTION_DYNAMIC_LIST_DATA},
+ '\0', NULL, N_("Add data symbols to dynamic list"), TWO_DASHES },
+ { {"dynamic-list-cpp-new", no_argument, NULL, OPTION_DYNAMIC_LIST_CPP_NEW},
+ '\0', NULL, N_("Use C++ operator new/delete dynamic list"), TWO_DASHES },
+ { {"dynamic-list-cpp-typeinfo", no_argument, NULL, OPTION_DYNAMIC_LIST_CPP_TYPEINFO},
+ '\0', NULL, N_("Use C++ typeinfo dynamic list"), TWO_DASHES },
+ { {"dynamic-list", required_argument, NULL, OPTION_DYNAMIC_LIST},
+ '\0', N_("FILE"), N_("Read dynamic list"), TWO_DASHES },
{ {"warn-common", no_argument, NULL, OPTION_WARN_COMMON},
'\0', NULL, N_("Warn about duplicate common symbols"), TWO_DASHES },
{ {"warn-constructors", no_argument, NULL, OPTION_WARN_CONSTRUCTORS},
@@ -666,6 +699,8 @@ parse_args (unsigned argc, char **argv)
{
case '?':
einfo (_("%P: unrecognized option '%s'\n"), argv[last_optind]);
+ /* Fall through. */
+
default:
einfo (_("%P%F: use the --help option for usage information\n"));
@@ -812,6 +847,9 @@ parse_args (unsigned argc, char **argv)
case OPTION_GC_SECTIONS:
link_info.gc_sections = TRUE;
break;
+ case OPTION_PRINT_GC_SECTIONS:
+ link_info.print_gc_sections = TRUE;
+ break;
case OPTION_HELP:
help ();
xexit (0);
@@ -855,6 +893,9 @@ parse_args (unsigned argc, char **argv)
case OPTION_NO_GC_SECTIONS:
link_info.gc_sections = FALSE;
break;
+ case OPTION_NO_PRINT_GC_SECTIONS:
+ link_info.print_gc_sections = FALSE;
+ break;
case OPTION_NO_KEEP_MEMORY:
link_info.keep_memory = FALSE;
break;
@@ -927,6 +968,9 @@ parse_args (unsigned argc, char **argv)
case OPTION_NO_WARN_MISMATCH:
command_line.warn_mismatch = FALSE;
break;
+ case OPTION_NO_WARN_SEARCH_MISMATCH:
+ command_line.warn_search_mismatch = FALSE;
+ break;
case OPTION_NOINHIBIT_EXEC:
force_make_executable = TRUE;
break;
@@ -1008,17 +1052,14 @@ parse_args (unsigned argc, char **argv)
/* 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] == ':'))
+ if (strncmp (optarg, cp, optarg_len) == 0
+ && (cp[optarg_len] == 0
+ || cp[optarg_len] == config.rpath_separator))
/* We found it. */
break;
/* Not yet found. */
- cp = strchr (cp, ':');
+ cp = strchr (cp, config.rpath_separator);
if (cp != NULL)
++cp;
}
@@ -1027,7 +1068,8 @@ parse_args (unsigned argc, char **argv)
if (cp == NULL)
{
buf = xmalloc (rpath_len + optarg_len + 2);
- sprintf (buf, "%s:%s", command_line.rpath, optarg);
+ sprintf (buf, "%s%c%s", command_line.rpath,
+ config.rpath_separator, optarg);
free (command_line.rpath);
command_line.rpath = buf;
}
@@ -1043,7 +1085,8 @@ parse_args (unsigned argc, char **argv)
buf = xmalloc (strlen (command_line.rpath_link)
+ strlen (optarg)
+ 2);
- sprintf (buf, "%s:%s", command_line.rpath_link, optarg);
+ sprintf (buf, "%s%c%s", command_line.rpath_link,
+ config.rpath_separator, optarg);
free (command_line.rpath_link);
command_line.rpath_link = buf;
}
@@ -1109,7 +1152,10 @@ parse_args (unsigned argc, char **argv)
config.stats = TRUE;
break;
case OPTION_SYMBOLIC:
- link_info.symbolic = TRUE;
+ command_line.symbolic = symbolic;
+ break;
+ case OPTION_SYMBOLIC_FUNCTIONS:
+ command_line.symbolic = symbolic_functions;
break;
case 't':
trace_files = TRUE;
@@ -1119,6 +1165,9 @@ parse_args (unsigned argc, char **argv)
parser_input = input_script;
yyparse ();
break;
+ case OPTION_DEFAULT_SCRIPT:
+ command_line.default_script = optarg;
+ break;
case OPTION_SECTION_START:
{
char *optarg2;
@@ -1222,6 +1271,43 @@ parse_args (unsigned argc, char **argv)
.exports sections. */
command_line.version_exports_section = optarg;
break;
+ case OPTION_DYNAMIC_LIST_DATA:
+ command_line.dynamic_list = dynamic_list_data;
+ if (command_line.symbolic == symbolic)
+ command_line.symbolic = symbolic_unset;
+ break;
+ case OPTION_DYNAMIC_LIST_CPP_TYPEINFO:
+ lang_append_dynamic_list_cpp_typeinfo ();
+ if (command_line.dynamic_list != dynamic_list_data)
+ command_line.dynamic_list = dynamic_list;
+ if (command_line.symbolic == symbolic)
+ command_line.symbolic = symbolic_unset;
+ break;
+ case OPTION_DYNAMIC_LIST_CPP_NEW:
+ lang_append_dynamic_list_cpp_new ();
+ if (command_line.dynamic_list != dynamic_list_data)
+ command_line.dynamic_list = dynamic_list;
+ if (command_line.symbolic == symbolic)
+ command_line.symbolic = symbolic_unset;
+ break;
+ case OPTION_DYNAMIC_LIST:
+ /* This option indicates a small script that only specifies
+ a dynamic list. Read it, but don't assume that we've
+ seen a linker script. */
+ {
+ FILE *hold_script_handle;
+
+ hold_script_handle = saved_script_handle;
+ ldfile_open_command_file (optarg);
+ saved_script_handle = hold_script_handle;
+ parser_input = input_dynamic_list;
+ yyparse ();
+ }
+ if (command_line.dynamic_list != dynamic_list_data)
+ command_line.dynamic_list = dynamic_list;
+ if (command_line.symbolic == symbolic)
+ command_line.symbolic = symbolic_unset;
+ break;
case OPTION_WARN_COMMON:
config.warn_common = TRUE;
break;
@@ -1271,7 +1357,7 @@ parse_args (unsigned argc, char **argv)
link_info.discard = discard_all;
break;
case 'Y':
- if (strncmp (optarg, "P,", 2) == 0)
+ if (CONST_STRNEQ (optarg, "P,"))
optarg += 2;
if (default_dirlist != NULL)
free (default_dirlist);
@@ -1331,7 +1417,7 @@ parse_args (unsigned argc, char **argv)
break;
case OPTION_REDUCE_MEMORY_OVERHEADS:
- command_line.reduce_memory_overheads = TRUE;
+ link_info.reduce_memory_overheads = TRUE;
if (config.hash_table_size == 0)
config.hash_table_size = 1021;
break;
@@ -1549,5 +1635,6 @@ help (void)
ldemul_list_emulation_options (stdout);
printf ("\n");
- printf (_("Report bugs to %s\n"), REPORT_BUGS_TO);
+ if (REPORT_BUGS_TO[0])
+ printf (_("Report bugs to %s\n"), REPORT_BUGS_TO);
}
diff --git a/ld/mri.c b/ld/mri.c
index 5330df3b2adb..8fe016075344 100644
--- a/ld/mri.c
+++ b/ld/mri.c
@@ -1,6 +1,6 @@
/* 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.
+ 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -24,8 +24,8 @@ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
Contributed by Steve Chamberlain <sac@cygnus.com>. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "ld.h"
#include "ldexp.h"
#include "ldlang.h"
diff --git a/ld/pe-dll.c b/ld/pe-dll.c
index d4d42e4d36a2..ab743eed7c91 100644
--- a/ld/pe-dll.c
+++ b/ld/pe-dll.c
@@ -1,5 +1,5 @@
/* Routines to help build PEI-format DLLs (Win32 etc)
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by DJ Delorie <dj@cygnus.com>
@@ -20,8 +20,8 @@
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libiberty.h"
#include "safe-ctype.h"
@@ -42,6 +42,29 @@
#include "deffile.h"
#include "pe-dll.h"
+#ifdef pe_use_x86_64
+
+#define PE_IDATA4_SIZE 8
+#define PE_IDATA5_SIZE 8
+#include "pep-dll.h"
+#undef AOUTSZ
+#define AOUTSZ PEPAOUTSZ
+#define PEAOUTHDR PEPAOUTHDR
+
+#else
+
+#include "pe-dll.h"
+
+#endif
+
+#ifndef PE_IDATA4_SIZE
+#define PE_IDATA4_SIZE 4
+#endif
+
+#ifndef PE_IDATA5_SIZE
+#define PE_IDATA5_SIZE 4
+#endif
+
/* This file turns a regular Windows PE image into a DLL. Because of
the complexity of this operation, it has been broken down into a
number of separate modules which are all called by the main function
@@ -49,7 +72,7 @@
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. */
+ See also: ld/emultempl/pe.em and ld/emultempl/pep.em. */
/* Auto-import feature by Paul Sokolovsky
@@ -95,13 +118,13 @@
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
+ IMAGE_IMPORT_DESCRIPTOR and stored in .idata$2 subsection. Each
fixup entry contains pointer to symbol's address within .text section
(marked with __fuN_<sym> symbol, where N is integer), pointer to DLL name
(so, DLL name is referenced by multiple entries), and pointer to symbol
name thunk. Symbol name thunk is singleton vector (__nm_th_<symbol>)
pointing to IMAGE_IMPORT_BY_NAME structure (__nm_<symbol>) directly
- containing imported name. Here comes that "om the edge" problem mentioned
+ containing imported name. Here comes that "on the edge" problem mentioned
above: PE specification rambles that name vector (OriginalFirstThunk)
should run in parallel with addresses vector (FirstThunk), i.e. that they
should have same number of elements and terminated with zero. We violate
@@ -119,7 +142,7 @@
not, prohibiting that (detecting violation) would require more work on
behalf of loader than not doing it.
- See also: ld/emultempl/pe.em. */
+ See also: ld/emultempl/pe.em and ld/emultempl/pep.em. */
static void add_bfd_to_link (bfd *, const char *, struct bfd_link_info *);
@@ -144,38 +167,87 @@ 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;
+{
+ const char *name;
+ int len;
+}
+autofilter_entry_type;
typedef struct
- {
- char *name;
- int len;
- }
-autofilter_entry_type;
+{
+ const char *target_name;
+ const char *object_target;
+ unsigned int imagebase_reloc;
+ int pe_arch;
+ int bfd_arch;
+ bfd_boolean underscored;
+ const autofilter_entry_type* autofilter_symbollist;
+}
+pe_details_type;
+
+static const autofilter_entry_type autofilter_symbollist_generic[] =
+{
+ { STRING_COMMA_LEN (".text") },
+ /* Entry point symbols. */
+ { STRING_COMMA_LEN ("DllMain") },
+ { STRING_COMMA_LEN ("DllMainCRTStartup") },
+ { STRING_COMMA_LEN ("_DllMainCRTStartup") },
+ /* Runtime pseudo-reloc. */
+ { STRING_COMMA_LEN ("_pei386_runtime_relocator") },
+ { STRING_COMMA_LEN ("do_pseudo_reloc") },
+ { STRING_COMMA_LEN (NULL) }
+};
-#define PE_ARCH_i386 1
-#define PE_ARCH_sh 2
-#define PE_ARCH_mips 3
-#define PE_ARCH_arm 4
+static const autofilter_entry_type autofilter_symbollist_i386[] =
+{
+ { STRING_COMMA_LEN (".text") },
+ /* Entry point symbols, and entry hooks. */
+ { STRING_COMMA_LEN ("cygwin_crt0") },
+ { STRING_COMMA_LEN ("DllMain@12") },
+ { STRING_COMMA_LEN ("DllEntryPoint@0") },
+ { STRING_COMMA_LEN ("DllMainCRTStartup@12") },
+ { STRING_COMMA_LEN ("_cygwin_dll_entry@12") },
+ { STRING_COMMA_LEN ("_cygwin_crt0_common@8") },
+ { STRING_COMMA_LEN ("_cygwin_noncygwin_dll_entry@12") },
+ { STRING_COMMA_LEN ("cygwin_attach_dll") },
+ { STRING_COMMA_LEN ("cygwin_premain0") },
+ { STRING_COMMA_LEN ("cygwin_premain1") },
+ { STRING_COMMA_LEN ("cygwin_premain2") },
+ { STRING_COMMA_LEN ("cygwin_premain3") },
+ /* Runtime pseudo-reloc. */
+ { STRING_COMMA_LEN ("_pei386_runtime_relocator") },
+ { STRING_COMMA_LEN ("do_pseudo_reloc") },
+ /* Global vars that should not be exported. */
+ { STRING_COMMA_LEN ("impure_ptr") },
+ { STRING_COMMA_LEN ("_impure_ptr") },
+ { STRING_COMMA_LEN ("_fmode") },
+ { STRING_COMMA_LEN ("environ") },
+ { STRING_COMMA_LEN (NULL) }
+};
+
+#define PE_ARCH_i386 1
+#define PE_ARCH_sh 2
+#define PE_ARCH_mips 3
+#define PE_ARCH_arm 4
#define PE_ARCH_arm_epoc 5
+#define PE_ARCH_arm_wince 6
-static pe_details_type pe_detail_list[] =
+static const pe_details_type pe_detail_list[] =
{
{
+#ifdef pe_use_x86_64
+ "pei-x86-64",
+ "pe-x86-64",
+ 3 /* R_IMAGEBASE */,
+#else
"pei-i386",
"pe-i386",
7 /* R_IMAGEBASE */,
+#endif
PE_ARCH_i386,
bfd_arch_i386,
- 1
+ TRUE,
+ autofilter_symbollist_i386
},
{
"pei-shl",
@@ -183,7 +255,8 @@ static pe_details_type pe_detail_list[] =
16 /* R_SH_IMAGEBASE */,
PE_ARCH_sh,
bfd_arch_sh,
- 1
+ TRUE,
+ autofilter_symbollist_generic
},
{
"pei-mips",
@@ -191,7 +264,8 @@ static pe_details_type pe_detail_list[] =
34 /* MIPS_R_RVA */,
PE_ARCH_mips,
bfd_arch_mips,
- 0
+ FALSE,
+ autofilter_symbollist_generic
},
{
"pei-arm-little",
@@ -199,7 +273,8 @@ static pe_details_type pe_detail_list[] =
11 /* ARM_RVA32 */,
PE_ARCH_arm,
bfd_arch_arm,
- 1
+ TRUE,
+ autofilter_symbollist_generic
},
{
"epoc-pei-arm-little",
@@ -207,83 +282,72 @@ static pe_details_type pe_detail_list[] =
11 /* ARM_RVA32 */,
PE_ARCH_arm_epoc,
bfd_arch_arm,
- 0
+ FALSE,
+ autofilter_symbollist_generic
+ },
+ {
+ "pei-arm-wince-little",
+ "pe-arm-wince-little",
+ 2, /* ARM_RVA32 on Windows CE, see bfd/coff-arm.c. */
+ PE_ARCH_arm_wince,
+ bfd_arch_arm,
+ FALSE,
+ autofilter_symbollist_generic
},
- { NULL, NULL, 0, 0, 0, 0 }
+ { NULL, NULL, 0, 0, 0, FALSE, NULL }
};
-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 }
-};
+static const pe_details_type *pe_details;
/* Do not specify library suffix explicitly, to allow for dllized versions. */
-static autofilter_entry_type autofilter_liblist[] =
+static const 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 }
+ { STRING_COMMA_LEN ("libcegcc") },
+ { STRING_COMMA_LEN ("libcygwin") },
+ { STRING_COMMA_LEN ("libgcc") },
+ { STRING_COMMA_LEN ("libstdc++") },
+ { STRING_COMMA_LEN ("libmingw32") },
+ { STRING_COMMA_LEN ("libmingwex") },
+ { STRING_COMMA_LEN ("libg2c") },
+ { STRING_COMMA_LEN ("libsupc++") },
+ { STRING_COMMA_LEN ("libobjc") },
+ { STRING_COMMA_LEN ("libgcj") },
+ { STRING_COMMA_LEN (NULL) }
};
-static autofilter_entry_type autofilter_objlist[] =
+static const 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 }
+ { STRING_COMMA_LEN ("crt0.o") },
+ { STRING_COMMA_LEN ("crt1.o") },
+ { STRING_COMMA_LEN ("crt2.o") },
+ { STRING_COMMA_LEN ("dllcrt1.o") },
+ { STRING_COMMA_LEN ("dllcrt2.o") },
+ { STRING_COMMA_LEN ("gcrt0.o") },
+ { STRING_COMMA_LEN ("gcrt1.o") },
+ { STRING_COMMA_LEN ("gcrt2.o") },
+ { STRING_COMMA_LEN ("crtbegin.o") },
+ { STRING_COMMA_LEN ("crtend.o") },
+ { STRING_COMMA_LEN (NULL) }
};
-static autofilter_entry_type autofilter_symbolprefixlist[] =
+static const autofilter_entry_type autofilter_symbolprefixlist[] =
{
- /* { "__imp_", 6 }, */
- /* Do __imp_ explicitly to save time. */
- { "__rtti_", 7 },
+ /* _imp_ is treated specially, as it is always underscored. */
+ /* { STRING_COMMA_LEN ("_imp_") }, */
+ /* Don't export some c++ symbols. */
+ { STRING_COMMA_LEN ("__rtti_") },
+ { STRING_COMMA_LEN ("__builtin_") },
/* Don't re-export auto-imported symbols. */
- { "_nm_", 4 },
- { "__builtin_", 10 },
+ { STRING_COMMA_LEN ("_nm_") },
/* 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 }
+ { STRING_COMMA_LEN ("_head_") },
+ { STRING_COMMA_LEN (NULL) }
};
-static autofilter_entry_type autofilter_symbolsuffixlist[] =
+static const autofilter_entry_type autofilter_symbolsuffixlist[] =
{
- { "_iname", 6 },
- { NULL, 0 }
+ { STRING_COMMA_LEN ("_iname") },
+ { STRING_COMMA_LEN (NULL) }
};
#define U(str) (pe_details->underscored ? "_" str : str)
@@ -383,6 +447,11 @@ pe_dll_add_excludes (const char *new_excludes, const int type)
free (local_copy);
}
+static bfd_boolean
+is_import (const char* n)
+{
+ return (CONST_STRNEQ (n, "__imp_"));
+}
/* abfd is a bfd containing n (or NULL)
It can be used for contextual checks. */
@@ -392,15 +461,11 @@ auto_export (bfd *abfd, def_file *d, const char *n)
{
int i;
struct exclude_list_struct *ex;
- autofilter_entry_type *afptr;
+ const 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;
@@ -443,10 +508,10 @@ auto_export (bfd *abfd, def_file *d, const char *n)
/* Don't try to blindly exclude all symbols
that begin with '__'; this was tried and
- it is too restrictive. */
+ it is too restrictive. Instead we have
+ a target specific list to use: */
+ afptr = pe_details->autofilter_symbollist;
- /* Then, exclude specific symbols. */
- afptr = autofilter_symbollist;
while (afptr->name)
{
if (strcmp (n, afptr->name) == 0)
@@ -555,8 +620,12 @@ process_def_file (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
/* We should not re-export imported stuff. */
{
- char *name = xmalloc (strlen (sn) + 2 + 6);
- sprintf (name, "%s%s", U("_imp_"), sn);
+ char *name;
+ if (is_import (sn))
+ continue;
+
+ name = xmalloc (strlen ("__imp_") + strlen (sn) + 1);
+ sprintf (name, "%s%s", "__imp_", sn);
blhe = bfd_link_hash_lookup (info->hash, name,
FALSE, FALSE, FALSE);
@@ -566,7 +635,7 @@ process_def_file (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
continue;
}
- if (*sn == '_')
+ if (pe_details->underscored && *sn == '_')
sn++;
if (auto_export (b, pe_def_file, sn))
@@ -612,6 +681,9 @@ process_def_file (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
{
for (i = 0; i < NE; i++)
{
+ if (is_import (pe_def_file->exports[i].name))
+ continue;
+
if (strchr (pe_def_file->exports[i].name, '@'))
{
int lead_at = (*pe_def_file->exports[i].name == '@');
@@ -1181,6 +1253,12 @@ generate_reloc (bfd *abfd, struct bfd_link_info *info)
switch BITS_AND_SHIFT (relocs[i]->howto->bitsize,
relocs[i]->howto->rightshift)
{
+#ifdef pe_use_x86_64
+ case BITS_AND_SHIFT (64, 0):
+ reloc_data[total_relocs].type = 10;
+ total_relocs++;
+ break;
+#endif
case BITS_AND_SHIFT (32, 0):
reloc_data[total_relocs].type = 3;
total_relocs++;
@@ -1646,21 +1724,21 @@ make_head (bfd *parent)
quick_reloc (abfd, 16, BFD_RELOC_RVA, 1);
save_relocs (id2);
- bfd_set_section_size (abfd, id5, 4);
- d5 = xmalloc (4);
+ bfd_set_section_size (abfd, id5, PE_IDATA5_SIZE);
+ d5 = xmalloc (PE_IDATA5_SIZE);
id5->contents = d5;
- memset (d5, 0, 4);
+ memset (d5, 0, PE_IDATA5_SIZE);
- bfd_set_section_size (abfd, id4, 4);
- d4 = xmalloc (4);
+ bfd_set_section_size (abfd, id4, PE_IDATA4_SIZE);
+ d4 = xmalloc (PE_IDATA4_SIZE);
id4->contents = d4;
- memset (d4, 0, 4);
+ memset (d4, 0, PE_IDATA4_SIZE);
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_set_section_contents (abfd, id5, d5, 0, PE_IDATA5_SIZE);
+ bfd_set_section_contents (abfd, id4, d4, 0, PE_IDATA4_SIZE);
bfd_make_readable (abfd);
return abfd;
@@ -1668,8 +1746,10 @@ make_head (bfd *parent)
/* .section .idata$4
.long 0
+ [.long 0] for PE+
.section .idata$5
.long 0
+ [.long 0] for PE+
.section idata$7
.global __my_dll_iname
__my_dll_iname:
@@ -1702,15 +1782,15 @@ make_tail (bfd *parent)
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);
+ bfd_set_section_size (abfd, id4, PE_IDATA4_SIZE);
+ d4 = xmalloc (PE_IDATA4_SIZE);
id4->contents = d4;
- memset (d4, 0, 4);
+ memset (d4, 0, PE_IDATA4_SIZE);
- bfd_set_section_size (abfd, id5, 4);
- d5 = xmalloc (4);
+ bfd_set_section_size (abfd, id5, PE_IDATA5_SIZE);
+ d5 = xmalloc (PE_IDATA5_SIZE);
id5->contents = d5;
- memset (d5, 0, 4);
+ memset (d5, 0, PE_IDATA5_SIZE);
len = strlen (dll_filename) + 1;
if (len & 1)
@@ -1719,11 +1799,15 @@ make_tail (bfd *parent)
d7 = xmalloc (len);
id7->contents = d7;
strcpy ((char *) d7, dll_filename);
+ /* If len was odd, the above
+ strcpy leaves behind an undefined byte. That is harmless,
+ but we set it to 0 just so the binary dumps are pretty. */
+ d7[len - 1] = 0;
bfd_set_symtab (abfd, symtab, symptr);
- bfd_set_section_contents (abfd, id4, d4, 0, 4);
- bfd_set_section_contents (abfd, id5, d5, 0, 4);
+ bfd_set_section_contents (abfd, id4, d4, 0, PE_IDATA4_SIZE);
+ bfd_set_section_contents (abfd, id5, d5, 0, PE_IDATA5_SIZE);
bfd_set_section_contents (abfd, id7, d7, 0, len);
bfd_make_readable (abfd);
@@ -1751,7 +1835,7 @@ make_tail (bfd *parent)
.short <hint>
.asciz "function" xlate? (add underscore, kill at) */
-static unsigned char jmp_ix86_bytes[] =
+static const unsigned char jmp_ix86_bytes[] =
{
0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90
};
@@ -1763,7 +1847,7 @@ static unsigned char jmp_ix86_bytes[] =
nop
.dw __imp_function */
-static unsigned char jmp_sh_bytes[] =
+static const unsigned char jmp_sh_bytes[] =
{
0x01, 0xd0, 0x02, 0x60, 0x2b, 0x40, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00
};
@@ -1774,39 +1858,62 @@ static unsigned char jmp_sh_bytes[] =
jr $t0
nop */
-static unsigned char jmp_mips_bytes[] =
+static const unsigned char jmp_mips_bytes[] =
{
0x00, 0x00, 0x08, 0x3c, 0x00, 0x00, 0x08, 0x8d,
0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00
};
+static const unsigned char jmp_arm_bytes[] =
+{
+ 0x00, 0xc0, 0x9f, 0xe5, /* ldr ip, [pc] */
+ 0x00, 0xf0, 0x9c, 0xe5, /* ldr pc, [ip] */
+ 0, 0, 0, 0
+};
+
+
static bfd *
-make_one (def_file_export *exp, bfd *parent)
+make_one (def_file_export *exp, bfd *parent, bfd_boolean include_jmp_stub)
{
asection *tx, *id7, *id5, *id4, *id6;
unsigned char *td = NULL, *d7, *d5, *d4, *d6 = NULL;
int len;
char *oname;
bfd *abfd;
- unsigned char *jmp_bytes = NULL;
+ const unsigned char *jmp_bytes = NULL;
int jmp_byte_count = 0;
- switch (pe_details->pe_arch)
+ /* Include the jump stub section only if it is needed. A jump
+ stub is needed if the symbol being imported <sym> is a function
+ symbol and there is at least one undefined reference to that
+ symbol. In other words, if all the import references to <sym> are
+ explicitly through _declspec(dllimport) then the jump stub is not
+ needed. */
+ if (include_jmp_stub)
{
- 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 ();
+ switch (pe_details->pe_arch)
+ {
+ case PE_ARCH_i386:
+ jmp_bytes = jmp_ix86_bytes;
+ jmp_byte_count = sizeof (jmp_ix86_bytes);
+ break;
+ case PE_ARCH_sh:
+ jmp_bytes = jmp_sh_bytes;
+ jmp_byte_count = sizeof (jmp_sh_bytes);
+ break;
+ case PE_ARCH_mips:
+ jmp_bytes = jmp_mips_bytes;
+ jmp_byte_count = sizeof (jmp_mips_bytes);
+ break;
+ case PE_ARCH_arm:
+ case PE_ARCH_arm_epoc:
+ case PE_ARCH_arm_wince:
+ jmp_bytes = jmp_arm_bytes;
+ jmp_byte_count = sizeof (jmp_arm_bytes);
+ break;
+ default:
+ abort ();
+ }
}
oname = xmalloc (20);
@@ -1832,9 +1939,9 @@ make_one (def_file_export *exp, bfd *parent)
{
quick_symbol (abfd, U ("_head_"), dll_symname, "", UNDSEC,
BSF_GLOBAL, 0);
- if (! exp->flag_data)
+ if (include_jmp_stub)
quick_symbol (abfd, "", exp->internal_name, "", tx, BSF_GLOBAL, 0);
- quick_symbol (abfd, U ("_imp_"), exp->internal_name, "", id5,
+ quick_symbol (abfd, "__imp_", exp->internal_name, "", id5,
BSF_GLOBAL, 0);
/* Fastcall applies only to functions,
so no need for auto-import symbol. */
@@ -1843,22 +1950,22 @@ make_one (def_file_export *exp, bfd *parent)
{
quick_symbol (abfd, U ("_head_"), dll_symname, "", UNDSEC,
BSF_GLOBAL, 0);
- if (! exp->flag_data)
+ if (include_jmp_stub)
quick_symbol (abfd, U (""), exp->internal_name, "", tx,
BSF_GLOBAL, 0);
- quick_symbol (abfd, U ("_imp__"), exp->internal_name, "", id5,
+ quick_symbol (abfd, "__imp_", U (""), exp->internal_name, id5,
BSF_GLOBAL, 0);
/* Symbol to reference ord/name of imported
data symbol, used to implement auto-import. */
if (exp->flag_data)
- quick_symbol (abfd, U("_nm__"), exp->internal_name, "", id6,
+ quick_symbol (abfd, U ("_nm_"), U (""), 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)
+ if (include_jmp_stub)
{
bfd_set_section_size (abfd, tx, jmp_byte_count);
td = xmalloc (jmp_byte_count);
@@ -1868,7 +1975,11 @@ make_one (def_file_export *exp, bfd *parent)
switch (pe_details->pe_arch)
{
case PE_ARCH_i386:
- quick_reloc (abfd, 2, BFD_RELOC_32, 2);
+#ifdef pe_use_x86_64
+ quick_reloc (abfd, 2, BFD_RELOC_32_PCREL, 2);
+#else
+ quick_reloc (abfd, 2, BFD_RELOC_32, 2);
+#endif
break;
case PE_ARCH_sh:
quick_reloc (abfd, 8, BFD_RELOC_32, 2);
@@ -1878,11 +1989,18 @@ make_one (def_file_export *exp, bfd *parent)
quick_reloc (abfd, 0, BFD_RELOC_LO16, 0); /* MIPS_R_PAIR */
quick_reloc (abfd, 4, BFD_RELOC_LO16, 2);
break;
+ case PE_ARCH_arm:
+ case PE_ARCH_arm_epoc:
+ case PE_ARCH_arm_wince:
+ quick_reloc (abfd, 8, BFD_RELOC_32, 2);
+ break;
default:
abort ();
}
save_relocs (tx);
}
+ else
+ bfd_set_section_size (abfd, tx, 0);
bfd_set_section_size (abfd, id7, 4);
d7 = xmalloc (4);
@@ -1891,16 +2009,16 @@ make_one (def_file_export *exp, bfd *parent)
quick_reloc (abfd, 0, BFD_RELOC_RVA, 5);
save_relocs (id7);
- bfd_set_section_size (abfd, id5, 4);
- d5 = xmalloc (4);
+ bfd_set_section_size (abfd, id5, PE_IDATA5_SIZE);
+ d5 = xmalloc (PE_IDATA5_SIZE);
id5->contents = d5;
- memset (d5, 0, 4);
+ memset (d5, 0, PE_IDATA5_SIZE);
if (exp->flag_noname)
{
d5[0] = exp->ordinal;
d5[1] = exp->ordinal >> 8;
- d5[3] = 0x80;
+ d5[PE_IDATA5_SIZE - 1] = 0x80;
}
else
{
@@ -1908,16 +2026,16 @@ make_one (def_file_export *exp, bfd *parent)
save_relocs (id5);
}
- bfd_set_section_size (abfd, id4, 4);
- d4 = xmalloc (4);
+ bfd_set_section_size (abfd, id4, PE_IDATA4_SIZE);
+ d4 = xmalloc (PE_IDATA4_SIZE);
id4->contents = d4;
- memset (d4, 0, 4);
+ memset (d4, 0, PE_IDATA4_SIZE);
if (exp->flag_noname)
{
d4[0] = exp->ordinal;
d4[1] = exp->ordinal >> 8;
- d4[3] = 0x80;
+ d4[PE_IDATA4_SIZE - 1] = 0x80;
}
else
{
@@ -1932,7 +2050,8 @@ make_one (def_file_export *exp, bfd *parent)
}
else
{
- len = strlen (exp->name) + 3;
+ /* { short, asciz } */
+ len = 2 + strlen (exp->name) + 1;
if (len & 1)
len++;
bfd_set_section_size (abfd, id6, len);
@@ -1946,10 +2065,11 @@ make_one (def_file_export *exp, bfd *parent)
bfd_set_symtab (abfd, symtab, symptr);
- bfd_set_section_contents (abfd, tx, td, 0, jmp_byte_count);
+ if (include_jmp_stub)
+ bfd_set_section_contents (abfd, tx, td, 0, jmp_byte_count);
bfd_set_section_contents (abfd, id7, d7, 0, 4);
- bfd_set_section_contents (abfd, id5, d5, 0, 4);
- bfd_set_section_contents (abfd, id4, d4, 0, 4);
+ bfd_set_section_contents (abfd, id5, d5, 0, PE_IDATA5_SIZE);
+ bfd_set_section_contents (abfd, id4, d4, 0, PE_IDATA4_SIZE);
if (!exp->flag_noname)
bfd_set_section_contents (abfd, id6, d6, 0, len);
@@ -1983,16 +2103,17 @@ make_singleton_name_thunk (const char *import, bfd *parent)
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);
+ /* We need space for the real thunk and for the null terminator. */
+ bfd_set_section_size (abfd, id4, PE_IDATA4_SIZE * 2);
+ d4 = xmalloc (PE_IDATA4_SIZE * 2);
id4->contents = d4;
- memset (d4, 0, 8);
+ memset (d4, 0, PE_IDATA4_SIZE * 2);
quick_reloc (abfd, 0, BFD_RELOC_RVA, 2);
save_relocs (id4);
bfd_set_symtab (abfd, symtab, symptr);
- bfd_set_section_contents (abfd, id4, d4, 0, 8);
+ bfd_set_section_contents (abfd, id4, d4, 0, PE_IDATA4_SIZE * 2);
bfd_make_readable (abfd);
return abfd;
@@ -2036,19 +2157,10 @@ make_import_fixup_mark (arelent *rel)
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
+/* .section .idata$2
.rva __nm_thnk_SYM (singleton thunk with name of func)
.long 0
.long 0
@@ -2061,8 +2173,8 @@ make_import_fixup_entry (const char *name,
const char *dll_symname,
bfd *parent)
{
- asection *id3;
- unsigned char *d3;
+ asection *id2;
+ unsigned char *d2;
char *oname;
bfd *abfd;
@@ -2079,25 +2191,25 @@ make_import_fixup_entry (const char *name,
symptr = 0;
symtab = xmalloc (6 * sizeof (asymbol *));
- id3 = quick_section (abfd, ".idata$3", SEC_HAS_CONTENTS, 2);
+ id2 = quick_section (abfd, ".idata$2", 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);
+ bfd_set_section_size (abfd, id2, 20);
+ d2 = xmalloc (20);
+ id2->contents = d2;
+ memset (d2, 0, 20);
quick_reloc (abfd, 0, BFD_RELOC_RVA, 1);
quick_reloc (abfd, 12, BFD_RELOC_RVA, 2);
quick_reloc (abfd, 16, BFD_RELOC_RVA, 3);
- save_relocs (id3);
+ save_relocs (id2);
bfd_set_symtab (abfd, symtab, symptr);
- bfd_set_section_contents (abfd, id3, d3, 0, 20);
+ bfd_set_section_contents (abfd, id2, d2, 0, 20);
bfd_make_readable (abfd);
return abfd;
@@ -2179,7 +2291,7 @@ pe_create_runtime_relocator_reference (bfd *parent)
symtab = xmalloc (2 * sizeof (asymbol *));
extern_rt_rel = quick_section (abfd, ".rdata", SEC_HAS_CONTENTS, 2);
- quick_symbol (abfd, "", "__pei386_runtime_relocator", "", UNDSEC,
+ quick_symbol (abfd, "", U ("_pei386_runtime_relocator"), "", UNDSEC,
BSF_NO_FLAGS, 0);
bfd_set_section_size (abfd, extern_rt_rel, 4);
@@ -2302,8 +2414,9 @@ pe_dll_generate_implib (def_file *def, const char *impfilename)
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;
+ n = make_one (def->exports + i, outarch,
+ ! (def->exports + i)->flag_data);
+ n->archive_next = head;
head = n;
def->exports[i].internal_name = internal;
}
@@ -2314,8 +2427,8 @@ pe_dll_generate_implib (def_file *def, const char *impfilename)
return;
/* Now stick them all into the archive. */
- ar_head->next = head;
- ar_tail->next = ar_head;
+ ar_head->archive_next = head;
+ ar_tail->archive_next = ar_head;
head = ar_tail;
if (! bfd_set_archive_head (outarch, head))
@@ -2326,7 +2439,7 @@ pe_dll_generate_implib (def_file *def, const char *impfilename)
while (head != NULL)
{
- bfd *n = head->next;
+ bfd *n = head->archive_next;
bfd_close (head);
head = n;
}
@@ -2378,9 +2491,10 @@ pe_process_import_defs (bfd *output_bfd, struct bfd_link_info *link_info)
/* See if we need this import. */
size_t len = strlen (pe_def_file->imports[i].internal_name);
char *name = xmalloc (len + 2 + 6);
+ bfd_boolean include_jmp_stub = FALSE;
if (lead_at)
- sprintf (name, "%s%s", "",
+ sprintf (name, "%s",
pe_def_file->imports[i].internal_name);
else
sprintf (name, "%s%s",U (""),
@@ -2389,18 +2503,23 @@ pe_process_import_defs (bfd *output_bfd, struct bfd_link_info *link_info)
blhe = bfd_link_hash_lookup (link_info->hash, name,
FALSE, FALSE, FALSE);
+ /* Include the jump stub for <sym> only if the <sym>
+ is undefined. */
if (!blhe || (blhe && blhe->type != bfd_link_hash_undefined))
{
if (lead_at)
- sprintf (name, "%s%s", U ("_imp_"),
+ sprintf (name, "%s%s", "__imp_",
pe_def_file->imports[i].internal_name);
else
- sprintf (name, "%s%s", U ("_imp__"),
+ sprintf (name, "%s%s%s", "__imp_", U (""),
pe_def_file->imports[i].internal_name);
blhe = bfd_link_hash_lookup (link_info->hash, name,
FALSE, FALSE, FALSE);
}
+ else
+ include_jmp_stub = TRUE;
+
free (name);
if (blhe && blhe->type == bfd_link_hash_undefined)
@@ -2421,7 +2540,7 @@ pe_process_import_defs (bfd *output_bfd, struct bfd_link_info *link_info)
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);
+ one = make_one (&exp, output_bfd, (! exp.flag_data) && include_jmp_stub);
add_bfd_to_link (one, one->filename, link_info);
}
}
@@ -2506,13 +2625,23 @@ pe_implied_import_dll (const char *filename)
/* Get pe_header, optional header and numbers of export entries. */
pe_header_offset = pe_get32 (dll, 0x3c);
opthdr_ofs = pe_header_offset + 4 + 20;
+#ifdef pe_use_x86_64
+ num_entries = pe_get32 (dll, opthdr_ofs + 92 + 4 * 4); /* & NumberOfRvaAndSizes. */
+#else
num_entries = pe_get32 (dll, opthdr_ofs + 92);
+#endif
if (num_entries < 1) /* No exports. */
return FALSE;
+#ifdef pe_use_x86_64
+ export_rva = pe_get32 (dll, opthdr_ofs + 96 + 4 * 4);
+ export_size = pe_get32 (dll, opthdr_ofs + 100 + 4 * 4);
+#else
export_rva = pe_get32 (dll, opthdr_ofs + 96);
export_size = pe_get32 (dll, opthdr_ofs + 100);
+#endif
+
nsections = pe_get16 (dll, pe_header_offset + 4 + 2);
secptr = (pe_header_offset + 4 + 20 +
pe_get16 (dll, pe_header_offset + 4 + 16));
@@ -2622,7 +2751,7 @@ pe_implied_import_dll (const char *filename)
/* Skip unwanted symbols, which are
exported in buggy auto-import releases. */
- if (strncmp (erva + name_rva, "_nm_", 4) != 0)
+ if (! CONST_STRNEQ (erva + name_rva, "_nm_"))
{
/* is_data is true if the address is in the data, rdata or bss
segment. */
@@ -2725,3 +2854,11 @@ pe_exe_fill_sections (bfd *abfd, struct bfd_link_info *info)
}
reloc_s->contents = reloc_d;
}
+
+bfd_boolean
+pe_bfd_is_dll (bfd *abfd)
+{
+ return (bfd_get_format (abfd) == bfd_object
+ && obj_pe (abfd)
+ && pe_data (abfd)->dll);
+}
diff --git a/ld/pe-dll.h b/ld/pe-dll.h
index c79e563b6985..03b755d9c619 100644
--- a/ld/pe-dll.h
+++ b/ld/pe-dll.h
@@ -1,5 +1,6 @@
/* pe-dll.h: Header file for routines used to build Windows DLLs.
- Copyright 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2001, 2002, 2003, 2007
+ Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -21,8 +22,8 @@
#ifndef PE_DLL_H
#define PE_DLL_H
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "deffile.h"
@@ -59,4 +60,7 @@ 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);
+extern bfd_boolean pe_bfd_is_dll
+ (bfd *);
+
#endif /* PE_DLL_H */
diff --git a/ld/pep-dll.c b/ld/pep-dll.c
new file mode 100644
index 000000000000..e1826dbbcea4
--- /dev/null
+++ b/ld/pep-dll.c
@@ -0,0 +1,58 @@
+/* Routines to help build PEPI-format DLLs (Win64 etc)
+ Copyright 2006 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Written by Kai Tietz, OneVision Software GmbH&CoKg. */
+
+#define COFF_IMAGE_WITH_PE
+#define COFF_WITH_PE
+#define COFF_WITH_pex64
+
+/* Local defined globals. */
+#define pe_def_file pep_def_file
+#define pe_details pep_details
+#define pe_dll_compat_implib pep_dll_compat_implib
+#define pe_dll_extra_pe_debug pep_dll_extra_pe_debug
+#define pe_dll_export_everything pep_dll_export_everything
+#define pe_dll_do_default_excludes pep_dll_do_default_excludes
+#define pe_dll_kill_ats pep_dll_kill_ats
+#define pe_dll_stdcall_aliases pep_dll_stdcall_aliases
+#define pe_dll_warn_dup_exports pep_dll_warn_dup_exports
+
+/* External globals. */
+#define pe_data_import_dll pep_data_import_dll
+
+/* Unique global name for functions to avoid double defined symbols. */
+#define pe_create_import_fixup pep_create_import_fixup
+#define pe_dll_generate_def_file pep_dll_generate_def_file
+#define pe_process_import_defs pep_process_import_defs
+#define pe_dll_id_target pep_dll_id_target
+#define pe_implied_import_dll pep_implied_import_dll
+#define pe_dll_build_sections pep_dll_build_sections
+#define pe_exe_build_sections pep_exe_build_sections
+#define pe_dll_fill_sections pep_dll_fill_sections
+#define pe_exe_fill_sections pep_exe_fill_sections
+#define pe_dll_generate_implib pep_dll_generate_implib
+#define pe_dll_add_excludes pep_dll_add_excludes
+#define pe_walk_relocs_of_symbol pep_walk_relocs_of_symbol
+#define pe_bfd_is_dll pep_bfd_is_dll
+
+/* Uses x86_64 PE+. */
+#define pe_use_x86_64
+
+#include "pe-dll.c"
diff --git a/ld/pep-dll.h b/ld/pep-dll.h
new file mode 100644
index 000000000000..ee8a44af682a
--- /dev/null
+++ b/ld/pep-dll.h
@@ -0,0 +1,54 @@
+/* pep-dll.h: Header file for routines used to build Windows DLLs.
+ Copyright 2006, 2007 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+ Written by Kai Tietz, OneVision Software GmbH&CoKg. */
+
+#ifndef PEP_DLL_H
+#define PEP_DLL_H
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "deffile.h"
+
+extern def_file * pep_def_file;
+extern int pep_dll_export_everything;
+extern int pep_dll_do_default_excludes;
+extern int pep_dll_kill_ats;
+extern int pep_dll_stdcall_aliases;
+extern int pep_dll_warn_dup_exports;
+extern int pep_dll_compat_implib;
+extern int pep_dll_extra_pe_debug;
+
+extern void pep_dll_id_target (const char *);
+extern void pep_dll_add_excludes (const char *, const int);
+extern void pep_dll_generate_def_file (const char *);
+extern void pep_dll_generate_implib (def_file *, const char *);
+extern void pep_process_import_defs (bfd *, struct bfd_link_info *);
+extern bfd_boolean pep_implied_import_dll (const char *);
+extern void pep_dll_build_sections (bfd *, struct bfd_link_info *);
+extern void pep_exe_build_sections (bfd *, struct bfd_link_info *);
+extern void pep_dll_fill_sections (bfd *, struct bfd_link_info *);
+extern void pep_exe_fill_sections (bfd *, struct bfd_link_info *);
+extern void pep_walk_relocs_of_symbol
+ (struct bfd_link_info *, const char *, int (*) (arelent *, asection *));
+extern void pep_create_import_fixup (arelent * rel, asection *, int);
+extern bfd_boolean pep_bfd_is_dll (bfd *);
+
+#endif /* PEP_DLL_H */
diff --git a/ld/po/Make-in b/ld/po/Make-in
index dcd8cbac76e3..b4ffbb79430b 100644
--- a/ld/po/Make-in
+++ b/ld/po/Make-in
@@ -16,6 +16,7 @@ SHELL = /bin/sh
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
+top_builddir = @top_builddir@
prefix = @prefix@
exec_prefix = @exec_prefix@
@@ -72,7 +73,7 @@ INSTOBJEXT = @INSTOBJEXT@
$(MSGFMT) -o $@ $<
.po.gmo:
- file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+ file=`echo $* | sed 's,.*/,,'`.gmo \
&& rm -f $$file && $(GMSGFMT) -o $$file $<
.po.cat:
diff --git a/ld/po/POTFILES.in b/ld/po/POTFILES.in
index 5bb2e119c5ba..3118cfa4b5f7 100644
--- a/ld/po/POTFILES.in
+++ b/ld/po/POTFILES.in
@@ -28,3 +28,5 @@ mri.c
mri.h
pe-dll.c
pe-dll.h
+pep-dll.c
+pep-dll.h
diff --git a/ld/po/da.gmo b/ld/po/da.gmo
deleted file mode 100644
index 495c6034cd0f..000000000000
--- a/ld/po/da.gmo
+++ /dev/null
Binary files differ
diff --git a/ld/po/es.gmo b/ld/po/es.gmo
deleted file mode 100644
index 4828a32f9e83..000000000000
--- a/ld/po/es.gmo
+++ /dev/null
Binary files differ
diff --git a/ld/po/fr.gmo b/ld/po/fr.gmo
deleted file mode 100644
index e67b1c1b14e5..000000000000
--- a/ld/po/fr.gmo
+++ /dev/null
Binary files differ
diff --git a/ld/po/ga.po b/ld/po/ga.po
new file mode 100644
index 000000000000..74b9b731ade4
--- /dev/null
+++ b/ld/po/ga.po
@@ -0,0 +1,1915 @@
+# Irish translations for ld.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the ld package.
+# Kevin Patrick Scannell <kscanne@gmail.com>, 2005, 2006.
+#
+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-09-13 18:39-0500\n"
+"Last-Translator: Kevin Scannell <kscanne@gmail.com>\n"
+"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: emultempl/armcoff.em:72
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Tacaigh le comh-inoibritheacht le seanchód\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry=<siom> Socraigh siombail ordóige <siom> mar phointe iontrála\n"
+
+#: emultempl/armcoff.em:121
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "Tharla earráidí agus comhad %s á phróiseáil"
+
+#: emultempl/armcoff.em:188 emultempl/pe.em:1455
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: rabhadh: sáraíonn '--thumb-entry %s' rogha '-e %s'\n"
+
+#: emultempl/armcoff.em:193 emultempl/pe.em:1460
+msgid "%P: warning: connot find thumb start symbol %s\n"
+msgstr "%P: rabhadh: ní féidir siombail ordóige tosaigh %s a aimsiú\n"
+
+#: emultempl/pe.em:301
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr " --base_file <bunchomhad> Gin bunchomhad do DLLanna in-athshuite\n"
+
+#: emultempl/pe.em:302
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr " --dll Socraigh bun na híomhá de réir réamhshocraithe do DLLanna\n"
+
+#: emultempl/pe.em:303
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <méid> Socraigh ailíniú comhad\n"
+
+#: emultempl/pe.em:304
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <méid> Socraigh bunmhéid an chairn\n"
+
+#: emultempl/pe.em:305
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <seoladh> Socraigh seoladh tosaigh an chláir inrite\n"
+
+#: emultempl/pe.em:306
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <uimhir> Socraigh uimhir leagan an chláir inrite\n"
+
+#: emultempl/pe.em:307
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <uimhir> Socraigh an leasú CO is lú atá riachtanach\n"
+
+#: emultempl/pe.em:308
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr " --major-subsystem-version <uimhir> Socraigh an leagan fo-chórais is lú atá riachtanach\n"
+
+#: emultempl/pe.em:309
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr " --minor-image-version <uimhir> Socraigh uimhir leasaithe an chláir inrite\n"
+
+#: emultempl/pe.em:310
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <uimhir> Socraigh leagan CO is lú atá riachtanach\n"
+
+#: emultempl/pe.em:311
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr " --minor-subsystem-version <uimhir> Socraigh leasú fo-chórais is lú atá riachtanach\n"
+
+#: emultempl/pe.em:312
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <méid> Socraigh ailíniú rannán\n"
+
+#: emultempl/pe.em:313
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <méid> Socraigh bunmhéid na cruaiche\n"
+
+#: emultempl/pe.em:314
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsystem <ainm>[:<leagan>] Socraigh fo-chóras CO [& leagan] is lú atá riachtanach\n"
+
+#: emultempl/pe.em:315
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Tacaigh le comh-inoibritheacht le seanchód\n"
+
+#: emultempl/pe.em:316
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr " --thumb-entry=<siom> Socraigh siombail ordóige <siom> mar phointe iontrála\n"
+
+#: emultempl/pe.em:318
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias Easpórtáil siombailí le, agus gan @nn\n"
+
+#: emultempl/pe.em:319
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup Ná nasc _sym le _sym@nn\n"
+
+#: emultempl/pe.em:320
+#, c-format
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup Nasc _sym le _sym@nn gan rabhaidh\n"
+
+#: emultempl/pe.em:321
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols siom,siom,... Eisiaigh siombailí ó easpórtáil uathoibríoch\n"
+
+#: emultempl/pe.em:322
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-symbols leabh,leabh,... Eisiaigh leabharlanna ó easpórtáil uathoibríoch\n"
+
+#: emultempl/pe.em:323
+#, c-format
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr " --export-all-symbols Easpórtáil gach siombail chomhchoiteann go DLL go huathoibríoch\n"
+
+#: emultempl/pe.em:324
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at Bain @nn ó shiombailí easpórtáilte\n"
+
+#: emultempl/pe.em:325
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <comhad> Cruthaigh leabharlann iompórtála\n"
+
+#: emultempl/pe.em:326
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <comhad> Cruthaigh comhad .DEF le haghaidh an DLL tógtha\n"
+
+#: emultempl/pe.em:327
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports Tabhair rabhadh faoi easpórtálacha dúbailte.\n"
+
+#: emultempl/pe.em:328
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib Cruthaigh leabharlanna iompórtála atá\n"
+" comhoiriúnach go siarghabhálach;\n"
+" cruthaigh __imp_<SIOMBAIL> freisin.\n"
+
+#: emultempl/pe.em: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 Roghnaigh bun na híomhá le haghaidh\n"
+" DLL mura bhfuil bun roghnaithe cheana\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á roghnaigh bun na híomhá go huathoibríoch. (réamhshocrú)\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=<teaghr> Agus nascadh le dll gan leabharlann\n"
+" iompórtála, úsáid <teaghr><bunainm>.dll\n"
+" in ionad lib<bunainm>.dll \n"
+
+#: emultempl/pe.em:336
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import Déan nascadh sofaisticiúil de _sym le\n"
+" __imp_sym do thagairtí DATA\n"
+
+#: emultempl/pe.em:338
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-import Ná hiompórtáil míreanna DATA ó DLLanna go huathoibríoch\n"
+
+#: emultempl/pe.em: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 Sáraigh teoranta uathiompórtála trí\n"
+" shúda-athshuímh réitithe ag am rite\n"
+" a chur leis.\n"
+
+#: emultempl/pe.em: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 Ná cuir súda-athshuímh am-rite leis\n"
+" le haghaidh DATA uathiompórtáilte.\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 Cumasaigh aschur foclach dífhabhtaithe\n"
+" agus DLL á thógáil, nó le linn nasctha\n"
+" le DLL (uathiompórtáil go háirithe)\n"
+
+#: emultempl/pe.em:347
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr ""
+" --large-address-aware Tacaíonn an clár inrite le seoltaí\n"
+" fíorúla níos mó ná 2 ghigibheart\n"
+
+#: emultempl/pe.em:414
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: rabhadh: drochuimhir leagain i rogha -subsystem\n"
+
+#: emultempl/pe.em:445
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: cineál neamhbhailí fo-chóras %s\n"
+
+#: emultempl/pe.em:484
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: uimhir neamhbhailí heicsidheachúlach le haghaidh paraiméadair PE '%s'\n"
+
+#: emultempl/pe.em:501
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: eolas aisteach heics le haghaidh paraiméadair PE '%s'\n"
+
+#: emultempl/pe.em:518
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s: Ní féidir bunchomhad %s a oscailt\n"
+
+#: emultempl/pe.em:734
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: rabhadh, ailíniú comhaid > ailíniú rannáin.\n"
+
+#: emultempl/pe.em:821 emultempl/pe.em:848
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "Rabhadh: %s á réiteach trí nascadh le %s\n"
+
+#: emultempl/pe.em:826 emultempl/pe.em:853
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Úsáid --enable-stdcall-fixup chun na rabhaidh seo a dhíchumasú\n"
+
+#: emultempl/pe.em:827 emultempl/pe.em:854
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Úsáid --disable-stdcall-fixup chun na ceartúcháin seo a dhíchumasú\n"
+
+#: emultempl/pe.em:873
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: Ní féidir ábhar an rannáin a fháil - eisceacht uathiompórtála\n"
+
+#: emultempl/pe.em:910
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "Eolas: %s á réiteach trí nascadh le %s (uathiompórtáil)\n"
+
+#: emultempl/pe.em:983
+msgid "%F%P: PE operations on non PE file.\n"
+msgstr "%F%P: Oibríochtaí PE ar chomhad neamh-PE.\n"
+
+#: emultempl/pe.em:1258
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "Tharla earráidí agus comhad %s á phróiseáil\n"
+
+#: emultempl/pe.em:1281
+#, c-format
+msgid "Errors encountered processing file %s for interworking"
+msgstr "Tharla earráidí agus comhad %s á phróiseáil le haghaidh comh-inoibritheachta"
+
+#: emultempl/pe.em: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: theip ar bfd_link_hash_lookup: %E\n"
+
+#: ldcref.c:153
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: theip ar bfd_hash_table_init tábla crostagartha a thúsú: %E\n"
+
+#: ldcref.c:159
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: theip ar cref_hash_lookup: %E\n"
+
+#: ldcref.c:225
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Tábla Crostagartha\n"
+"\n"
+
+#: ldcref.c:226
+msgid "Symbol"
+msgstr "Siombail"
+
+#: ldcref.c:234
+#, c-format
+msgid "File\n"
+msgstr "Comhad\n"
+
+#: ldcref.c:238
+#, c-format
+msgid "No symbols\n"
+msgstr "Gan siombailí\n"
+
+#: ldcref.c:359 ldcref.c:478
+msgid "%B%F: could not read symbols; %E\n"
+msgstr "%B%F: níorbh fhéidir siombailí a léamh; %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: níorbh fhéidir siombailí a léamh: %E\n"
+
+#: ldcref.c:414
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: siombail `%T' ar iarraidh ón phríomh-hais-tábla\n"
+
+#: ldcref.c:547 ldcref.c:554 ldmain.c:1273 ldmain.c:1280
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: níorbh fhéidir na hathshuíonna a léamh: %E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:573
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%X%C: crostagairt choiscthe do `%T' ó %s i %s\n"
+
+#: ldctor.c:84
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: Úsáideadh athshuíonna difriúla i dtacar %s\n"
+
+#: ldctor.c:102
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: Formáidí difriúla ar chomhaid oibiachta i dtacar %s\n"
+
+#: ldctor.c:281 ldctor.c:295
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "%P%X: Ní thacaíonn %s le hathshuí %s i gcomhair tacair %s\n"
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%P%X: Méid %d gan tacaíocht do thacar %s\n"
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"Tacar Siombail\n"
+"\n"
+
+#: ldemul.c:227
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S Rinneadh neamhshuim ar SYSLIB\n"
+
+#: ldemul.c:233
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S Rinneadh neamhshuim ar HLL\n"
+
+#: ldemul.c:253
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: mód anaithnid aithrise: %s\n"
+
+#: ldemul.c:254
+msgid "Supported emulations: "
+msgstr "Aithrisí a dtacaítear leo: "
+
+#: ldemul.c:296
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " gan roghanna a bhaineann le haithris.\n"
+
+#: ldexp.c:379
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% le nialas\n"
+
+#: ldexp.c:386
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S / le nialas\n"
+
+#: ldexp.c:583
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S: rinneadh tagairt do shiombail neamh-inréitithe `%s' i slonn\n"
+
+#: ldexp.c:604
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: rinneadh tagairt do shiombail `%s' gan sainmhíniú i slonn\n"
+
+#: ldexp.c:665 ldexp.c:678
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S: rinneadh tagairt do réigiún CUIMHNE `%s' gan sainmhíniú i slonn\n"
+
+#: ldexp.c:757
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "Ní féidir le %F%S sannadh a sholáthar d'áiritheoir suíomhanna\n"
+
+#: ldexp.c:770
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S sannadh neamhbhailí ar áiritheoir suíomhanna\n"
+
+#: ldexp.c:774
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S níl sannadh don áiritheoir suíomhanna bailí taobh amuigh de RANNÁN\n"
+
+#: ldexp.c:783
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr "%F%S ní féidir an t-áiritheoir suíomhanna a bhogadh ar ais (ó %V go %V)\n"
+
+#: ldexp.c:810
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: theip ar chruthú an hais-tábla\n"
+
+#: ldexp.c:1077 ldexp.c:1109
+#, c-format
+msgid "%F%S nonconstant expression for %s\n"
+msgstr "%F%S slonn inathraitheach do %s\n"
+
+#: ldexp.c:1163
+#, c-format
+msgid "%F%S non constant expression for %s\n"
+msgstr "%F%S slonn inathraitheach do %s\n"
+
+#: ldfile.c:139
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "theip ar oscailt %s\n"
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "d'éirigh le hiarracht %s a oscailt\n"
+
+#: ldfile.c:147
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: sprioc neamhbhailí BFD `%s'\n"
+
+#: ldfile.c:255 ldfile.c:282
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: gabh thar %s neamh-chomhoiriúnach agus %s á lorg\n"
+
+#: ldfile.c:267
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr "%F%P: iarracht ar nasc statach de réad dinimiciúil `%s' a dhéanamh\n"
+
+#: ldfile.c:384
+msgid "%F%P: %s (%s): No such file: %E\n"
+msgstr "%F%P: %s (%s): Níl a leithéid de chomhad: %E\n"
+
+#: ldfile.c:387
+msgid "%F%P: %s: No such file: %E\n"
+msgstr "%F%P: %s: Níl a leithéid de chomhad: %E\n"
+
+#: ldfile.c:417
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "%F%P: ní féidir %s a aimsiú i %s\n"
+
+#: ldfile.c:420
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P: ní féidir %s a aimsiú\n"
+
+#: ldfile.c:437 ldfile.c:453
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "ní féidir comhad scripte %s a aimsiú\n"
+
+#: ldfile.c:439 ldfile.c:455
+#, c-format
+msgid "opened script file %s\n"
+msgstr "osclaíodh comhad scripte %s\n"
+
+#: ldfile.c:499
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: ní féidir script nascóra %s a oscailt: %E\n"
+
+#: ldfile.c:546
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: ní féidir meaisín `%s' a léiriú\n"
+
+#: ldlang.c:511
+msgid "%P%F: out of memory during initialization"
+msgstr "%P%F: cuimhne ídithe le linn túsaithe"
+
+#: ldlang.c:551
+msgid "%P:%S: warning: redeclaration of memory region '%s'\n"
+msgstr "%P:%S: rabhadh: athfhógra ar réigiún cuimhne '%s'\n"
+
+#: ldlang.c:557
+msgid "%P:%S: warning: memory region %s not declared\n"
+msgstr "%P:%S: rabhadh: réigiún cuimhne %s gan fógra\n"
+
+#: ldlang.c:1073
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"Cumraíocht Chuimhne\n"
+"\n"
+
+#: ldlang.c:1075
+msgid "Name"
+msgstr "Ainm"
+
+#: ldlang.c:1075
+msgid "Origin"
+msgstr "Bunphointe"
+
+#: ldlang.c:1075
+msgid "Length"
+msgstr "Fad"
+
+#: ldlang.c:1075
+msgid "Attributes"
+msgstr "Tréithe"
+
+#: ldlang.c:1115
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"Script nascóra agus mapa cuimhne\n"
+"\n"
+
+#: ldlang.c:1183
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: Úsáid neamhcheadaithe de rannán `%s'\n"
+
+#: ldlang.c:1193
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: ní féidir le formáid aschurtha %s rannán darb ainm %s a léiriú\n"
+
+#: ldlang.c:1775
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: comhad gan aithint: %E\n"
+
+#: ldlang.c:1776
+msgid "%B: matching formats:"
+msgstr "%B: formáidí comhoiriúnacha:"
+
+#: ldlang.c:1783
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: comhad gan aimsiú: %E\n"
+
+#: ldlang.c:1847
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: ní réad é ball %B sa chartlann\n"
+
+#: ldlang.c:1858 ldlang.c:1872
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: níorbh fhéidir na siombailí a léamh: %E\n"
+
+#: ldlang.c:2127
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr "%P: rabhadh: níorbh fhéidir aon spriocanna a aimsiú a bhí caolcheannach nó mórcheannach, mar is cuí\n"
+
+#: ldlang.c:2141
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: sprioc %s gan aimsiú\n"
+
+#: ldlang.c:2143
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: ní féidir aschomhad %s a oscailt: %E\n"
+
+#: ldlang.c:2149
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: ní féidir comhad oibiachta a dhéanamh: %E\n"
+
+#: ldlang.c:2153
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: ní féidir an ailtireacht a shocrú: %E\n"
+
+#: ldlang.c:2157
+msgid "%P%F: can not create link hash table: %E\n"
+msgstr "%P%F: ní féidir an hais-tábla nasctha a chruthú: %E\n"
+
+#: ldlang.c:2301
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr "%P%F: theip ar bfd_hash_lookup siombail %s a chruthú\n"
+
+#: ldlang.c:2319
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr "%P%F: theip ar bfd_hash_allocate siombail %s a chruthú\n"
+
+#: ldlang.c:2710
+msgid " load address 0x%V"
+msgstr " luchtaigh seoladh 0x%V"
+
+#: ldlang.c:2874
+msgid "%W (size before relaxing)\n"
+msgstr "%W (méid roimh bhogadh)\n"
+
+#: ldlang.c:2961
+#, c-format
+msgid "Address of section %s set to "
+msgstr "Seoladh rannáin %s socraithe "
+
+#: ldlang.c:3114
+#, c-format
+msgid "Fail with %d\n"
+msgstr "Teipthe le %d\n"
+
+#: ldlang.c:3351
+msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
+msgstr "%X%P: forluíonn rannán %s [%V -> %V] rannán %s [%V -> %V]\n"
+
+#: ldlang.c:3379
+msgid "%X%P: address 0x%v of %B section %s is not within region %s\n"
+msgstr "%X%P: níl seoladh 0x%v de %B rannán %s isteach i réigiún %s\n"
+
+#: ldlang.c:3388
+msgid "%X%P: region %s is full (%B section %s)\n"
+msgstr "%X%P: tá réigiún %s lán (%B rannán %s)\n"
+
+#: ldlang.c:3439
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: Earráid inmheánach i gcomhleabharlann COFF, rannán %s\n"
+
+#: ldlang.c:3493
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: earráid: níor socraíodh réigiún cuimhne do rannán inluchtaithe `%s'\n"
+
+#: ldlang.c:3498
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: rabhadh: níor socraíodh réigiún cuimhne do rannán inluchtaithe `%s'\n"
+
+#: ldlang.c:3515
+msgid "%P: warning: changing start of section %s by %u bytes\n"
+msgstr "%P: rabhadh: athrú tús rannáin %s de %u beart\n"
+
+#: ldlang.c:3532
+#, c-format
+msgid "%F%S: non constant or forward reference address expression for section %s\n"
+msgstr "%F%S: slonn seolta tagartha ar aghaidh nó slonn inathraitheach do rannán %s\n"
+
+#: ldlang.c:3703
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: ní féidir rannán a bhogadh: %E\n"
+
+#: ldlang.c:3960
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: ráiteas neamhbhailí sonraí\n"
+
+#: ldlang.c:3999
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: ráiteas neamhbhailí athshuite\n"
+
+#: ldlang.c:4141
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: ní féidir an seoladh tosaigh a shocrú\n"
+
+#: ldlang.c:4154 ldlang.c:4173
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: ní féidir an seoladh tosaigh a shocrú\n"
+
+#: ldlang.c:4166
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: rabhadh: ní féidir siombail iontrála %s a aimsiú; úsáidfear %V de réir réamhshocraithe\n"
+
+#: ldlang.c:4178
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: rabhadh: ní féidir siombail iontrála %s a aimsiú; seoladh tosaigh gan socrú\n"
+
+#: ldlang.c:4227
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: Ní thacaítear le nascadh in-athshuite le hathshuímh ó fhormáid %s (%B) go formáid %s (%B)\n"
+
+#: ldlang.c:4237
+msgid "%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P: rabhadh: níl ailtireacht %s d'inchomhad `%B' comhoiriúnach le haschur %s\n"
+
+#: ldlang.c:4259
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr "%P%X: theip ar chumasc na sonraí a bhaineann leis an sprioc ó chomhad %B\n"
+
+#: ldlang.c:4343
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"Siombailí coitianta á leithdháileadh\n"
+
+#: ldlang.c:4344
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Siombail choitianta méid comhad\n"
+"\n"
+
+#: ldlang.c:4470
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: comhréir neamhbhailí i mbratacha\n"
+
+#: ldlang.c:4740
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: Theip ar chruthú hais-tábla\n"
+
+#: ldlang.c:5057
+msgid "%P%Fmultiple STARTUP files\n"
+msgstr "%P%Filchomhad TOSAITHE\n"
+
+#: ldlang.c:5105
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: tá seoladh luchtaithe agus réigiún luchtaithe sa rannán\n"
+
+#: ldlang.c:5345
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: theip ar bfd_record_phdr: %E\n"
+
+#: ldlang.c:5365
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: sannadh rannán `%s' go phdr `%s' nach bhfuil ann\n"
+
+#: ldlang.c:5751
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: teanga anaithnid `%s' in eolas faoin leagan\n"
+
+#: ldlang.c:5893
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr "%X%P: ní féidir an chlib leagain gan ainm a cheangal le clibeanna leagain eile\n"
+
+#: ldlang.c:5902
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: clib leagain dhúbailte `%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: slonn dúbailte `%s' in eolas faoin leagan\n"
+
+#: ldlang.c:5998
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: ní féidir spleáchóg leagain `%s' a aimsiú\n"
+
+#: ldlang.c:6020
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: ní féidir inneachar an rannáin .exports a léamh\n"
+
+#: ldmain.c:229
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: ní féidir an sprioc réamhshocraithe BFD a shocrú go `%s': %E\n"
+
+#: ldmain.c:341
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F: ní cheadaítear roghanna --relax agus -r le chéile\n"
+
+#: ldmain.c:343
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: ní cheadaítear roghanna -r agus -shared le chéile\n"
+
+#: ldmain.c:347
+msgid "%P%F: -static and -shared may not be used together\n"
+msgstr "%P%F: ní cheadaítear roghanna -static agus -shared le chéile\n"
+
+#: ldmain.c:352
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: caithfidh tú -shared a úsáid in éineacht le -F\n"
+
+#: ldmain.c:354
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: caithfidh tú -shared a úsáid in éineacht le -f\n"
+
+#: ldmain.c:396
+msgid "using external linker script:"
+msgstr "script sheachtrach nascóra in úsáid:"
+
+#: ldmain.c:398
+msgid "using internal linker script:"
+msgstr "script inmheánach nascóra in úsáid:"
+
+#: ldmain.c:432
+msgid "%P%F: no input files\n"
+msgstr "%P%F: gan inchomhaid\n"
+
+#: ldmain.c:436
+msgid "%P: mode %s\n"
+msgstr "%P: mód %s\n"
+
+#: ldmain.c:452
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: ní féidir comhad mapa %s a oscailt: %E\n"
+
+#: ldmain.c:482
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: aimsíodh earráidí nasctha, clár inrite `%s' á scriosadh\n"
+
+#: ldmain.c:491
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: theip ar dhúnadh deiridh: %E\n"
+
+#: ldmain.c:517
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "%X%P: ní féidir foinse na cóipeála `%s' a oscailt\n"
+
+#: ldmain.c:520
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "%X%P: ní féidir sprioc na cóipeála `%s' a oscailt\n"
+
+#: ldmain.c:527
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: Earráid agus comhad `%s' á scríobh\n"
+
+#: ldmain.c:532 pe-dll.c:1447
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: Earráid agus comhad `%s' á dhúnadh\n"
+
+#: ldmain.c:548
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: am iomlán nasctha: %ld.%06ld\n"
+
+#: ldmain.c:551
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: méid sonraí %ld\n"
+
+#: ldmain.c:634
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: argóint ar iarraidh tar éis -m\n"
+
+#: ldmain.c:780 ldmain.c:798 ldmain.c:828
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: theip ar bfd_hash_table_init: %E\n"
+
+#: ldmain.c:784 ldmain.c:802
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: theip ar bfd_hash_lookup: %E\n"
+
+#: ldmain.c:816
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: earráid: retain-symbols-file dúbailte\n"
+
+#: ldmain.c:858
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: theip ar bfd_hash_lookup le haghaidh ionsáite: %E\n"
+
+#: ldmain.c:863
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P: sáraíonn `-retain-symbols-file' na roghanna `-s' agus `-S'\n"
+
+#: ldmain.c:938
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"Cuireadh ball na cartlainne san áireamh mar gheall ar chomhad (siombail)\n"
+"\n"
+
+#: ldmain.c:1008
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: ilmhíniú ar `%T'\n"
+
+#: ldmain.c:1011
+msgid "%D: first defined here\n"
+msgstr "%D: an chéad mhíniú anseo\n"
+
+#: ldmain.c:1015
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: Bogadh á dhíchumasú: ní oibreoidh sé i gceart le sainmhínithe iomadúla\n"
+
+#: ldmain.c:1045
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: rabhadh: sáraíonn an sainmhíniú ar `%T' an ceann coitianta\n"
+
+#: ldmain.c:1048
+msgid "%B: warning: common is here\n"
+msgstr "%B: rabhadh: coitianta anseo\n"
+
+#: ldmain.c:1055
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: rabhadh: bhí `%T' coitianta sáraithe ag sainmhíniú\n"
+
+#: ldmain.c:1058
+msgid "%B: warning: defined here\n"
+msgstr "%B: rabhadh: sainmhíniú anseo\n"
+
+#: ldmain.c:1065
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: rabhadh: bhí `%T' coitianta sáraithe ag ceann coitianta níos mó\n"
+
+#: ldmain.c:1068
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: rabhadh: ceann coitianta níos mó anseo\n"
+
+#: ldmain.c:1072
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: rabhadh: sáraíonn `%T' coitianta an ceann coitianta níos lú\n"
+
+#: ldmain.c:1075
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: rabhadh: ceann coitianta níos lú anseo\n"
+
+#: ldmain.c:1079
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: rabhadh: ilchoitianta `%T'\n"
+
+#: ldmain.c:1081
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: rabhadh: ceann coitianta roimhe anseo\n"
+
+#: ldmain.c:1101 ldmain.c:1139
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: rabhadh: úsáideadh cruthaitheoir comhchoiteann %s\n"
+
+#: ldmain.c:1149
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: earráid in inneall BFD: BFD_RELOC_CTOR gan tacaíocht\n"
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1203 ldmain.c:1205 ldmain.c:1207 ldmain.c:1245 ldmain.c:1293
+msgid "warning: "
+msgstr "rabhadh: "
+
+#: ldmain.c:1327
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: theip ar bfd_hash_table_init: %E\n"
+
+#: ldmain.c:1334
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: theip ar bfd_hash_lookup: %E\n"
+
+#: ldmain.c:1355
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C: tagairt do `%T' gan sainmhíniú\n"
+
+#: ldmain.c:1358
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: rabhadh: tagairt do `%T' gan sainmhíniú\n"
+
+#: ldmain.c:1364
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr "%X%D: tá tuilleadh tagairtí do `%T' gan sainmhíniú thíos\n"
+
+#: ldmain.c:1367
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr "%D: rabhadh: tá tuilleadh tagairtí do `%T' gan sainmhíniú thíos\n"
+
+#: ldmain.c:1378
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B: tagairt do `%T' gan sainmhíniú\n"
+
+#: ldmain.c:1381
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: rabhadh: tagairt do `%T' gan sainmhíniú\n"
+
+#: ldmain.c:1387
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr "%X%B: tá tuilleadh tagairtí do `%T' gan sainmhíniú thíos\n"
+
+#: ldmain.c:1390
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr "%B: rabhadh: tá tuilleadh tagairtí do `%T' gan sainmhíniú thíos\n"
+
+#: ldmain.c:1425 ldmain.c:1478 ldmain.c:1496
+msgid "%P%X: generated"
+msgstr "%P%X: ginte"
+
+#: ldmain.c:1432
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " fágadh forshreafaí athshuite breise as an aschur\n"
+
+#: ldmain.c:1445
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr " teascadh an t-athshuíomh: %s in aghaidh siombaile `%T' gan sainmhíniú"
+
+#: ldmain.c:1450
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr " teascadh an t-athshuíomh: %s in aghaidh siombaile `%T' a sainmhíníodh i rannán %A i %B"
+
+#: ldmain.c:1460
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " teascadh an t-athshuíomh: %s in aghaidh `%T'"
+
+#: ldmain.c:1481
+#, c-format
+msgid "dangerous relocation: %s\n"
+msgstr "athshuí contúirteach: %s\n"
+
+#: ldmain.c:1499
+msgid " reloc refers to symbol `%T' which is not being output\n"
+msgstr " déanann an t-athshuíomh tagairt do shiombail `%T' nach bhfuil aschurtha\n"
+
+#: ldmisc.c:149
+#, c-format
+msgid "no symbol"
+msgstr "gan siombail"
+
+#: ldmisc.c:240
+#, c-format
+msgid "built in linker script:%u"
+msgstr "tógadh sa script nascóra:%u"
+
+#: ldmisc.c:289 ldmisc.c:293
+msgid "%B%F: could not read symbols\n"
+msgstr "%B%F: níorbh fhéidir siombailí a léamh\n"
+
+#: ldmisc.c:329
+msgid "%B: In function `%T':\n"
+msgstr "%B: I bhfeidhm `%T':\n"
+
+#: ldmisc.c:480
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: earráid inmheánach %s %d\n"
+
+#: ldmisc.c:526
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: earráid inmheánach: á thobscor ag %s líne %d i %s\n"
+
+#: ldmisc.c:529
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: earráid inmheánach: á thobscor ag %s líne %d\n"
+
+#: ldmisc.c:531
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F: seol tuairisc ar an bhfabht seo, le do thoil\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:38
+#, c-format
+msgid "GNU ld version %s\n"
+msgstr "ld GNU, leagan %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 ""
+"Is saorbhogearra é an clár seo; is féidir leat é a scaipeadh de réir na\n"
+"gcoinníollacha den GNU General Public License. Níl baránta ar chor ar bith\n"
+"leis an gclár seo.\n"
+
+#: ldver.c:52
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " Aithrisí a dtacaítear leo:\n"
+
+#: ldwrite.c:55 ldwrite.c:191
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: theip ar bfd_new_link_order\n"
+
+#: ldwrite.c:341
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr "%F%P: ní féidir ainm roinnte a chruthú ar rannán %s\n"
+
+#: ldwrite.c:353
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: theip ar chlónáil an rannáin: %E\n"
+
+#: ldwrite.c:391
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x rud éigin eile\n"
+
+#: ldwrite.c:561
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: theip ar an nascadh deiridh: %E\n"
+
+#: lexsup.c:195 lexsup.c:327
+msgid "KEYWORD"
+msgstr "LORGFHOCAL"
+
+#: lexsup.c:195
+msgid "Shared library control for HP/UX compatibility"
+msgstr "Rialú comhleabharlainne, ar son comhoiriúnachta le HP/UX"
+
+#: lexsup.c:198
+msgid "ARCH"
+msgstr "AILTIREACHT"
+
+#: lexsup.c:198
+msgid "Set architecture"
+msgstr "Socraigh an ailtireacht"
+
+#: lexsup.c:200 lexsup.c:421
+msgid "TARGET"
+msgstr "SPRIOC"
+
+#: lexsup.c:200
+msgid "Specify target for following input files"
+msgstr "Sonraigh sprioc do na hinchomhaid seo a leanas"
+
+#: lexsup.c:203 lexsup.c:252 lexsup.c:264 lexsup.c:277 lexsup.c:380
+#: lexsup.c:433 lexsup.c:490
+msgid "FILE"
+msgstr "COMHAD"
+
+#: lexsup.c:203
+msgid "Read MRI format linker script"
+msgstr "Léigh script nascóra i bhformáid MRI"
+
+#: lexsup.c:205
+msgid "Force common symbols to be defined"
+msgstr "Cuir iallach ar shiombailí coitianta a bheith sainmhínithe"
+
+#: lexsup.c:209 lexsup.c:475 lexsup.c:477 lexsup.c:479
+msgid "ADDRESS"
+msgstr "SEOLADH"
+
+#: lexsup.c:209
+msgid "Set start address"
+msgstr "Socraigh seoladh tosaithe"
+
+#: lexsup.c:211
+msgid "Export all dynamic symbols"
+msgstr "Easpórtáil gach siombail dhinimiciúil"
+
+#: lexsup.c:213
+msgid "Link big-endian objects"
+msgstr "Nasc réada mórcheannacha"
+
+#: lexsup.c:215
+msgid "Link little-endian objects"
+msgstr "Nasc réada caolcheannacha"
+
+#: lexsup.c:217 lexsup.c:220
+msgid "SHLIB"
+msgstr "SHLIB"
+
+#: lexsup.c:217
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Scagaire cúntach do thábla siombaile comhréada"
+
+#: lexsup.c:220
+msgid "Filter for shared object symbol table"
+msgstr "Scagaire do thábla siombaile comhréada"
+
+#: lexsup.c:223
+msgid "Ignored"
+msgstr "Neamhaird tugtha air"
+
+#: lexsup.c:225
+msgid "SIZE"
+msgstr "MÉID"
+
+#: lexsup.c:225
+msgid "Small data size (if no size, same as --shared)"
+msgstr "Méid bheag sonraí (mura bhfuil méid ann, ar comhbhrí le --shared)"
+
+#: lexsup.c:228
+msgid "FILENAME"
+msgstr "COMHADAINM"
+
+#: lexsup.c:228
+msgid "Set internal name of shared library"
+msgstr "Socraigh an t-ainm inmheánach ar an gcomhleabharlann"
+
+#: lexsup.c:230
+msgid "PROGRAM"
+msgstr "CLÁR"
+
+#: lexsup.c:230
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "Úsáid CLÁR mar an nascóir dinimiciúil"
+
+#: lexsup.c:233
+msgid "LIBNAME"
+msgstr "AINM"
+
+#: lexsup.c:233
+msgid "Search for library LIBNAME"
+msgstr "Cuardach ar leabharlann AINM"
+
+#: lexsup.c:235
+msgid "DIRECTORY"
+msgstr "COMHADLANN"
+
+#: lexsup.c:235
+msgid "Add DIRECTORY to library search path"
+msgstr "Cuir COMHADLANN leis an gconair chuardaigh leabharlann"
+
+#: lexsup.c:238
+msgid "Override the default sysroot location"
+msgstr "Sáraigh an suíomh réamhshocraithe sysroot"
+
+#: lexsup.c:240
+msgid "EMULATION"
+msgstr "AITHRIS"
+
+#: lexsup.c:240
+msgid "Set emulation"
+msgstr "Socraigh aithris"
+
+#: lexsup.c:242
+msgid "Print map file on standard output"
+msgstr "Scríobh an comhad mapa ar an aschur caighdeánach"
+
+#: lexsup.c:244
+msgid "Do not page align data"
+msgstr "Ná hailínigh sonraí de réir leathanaigh"
+
+#: lexsup.c:246
+msgid "Do not page align data, do not make text readonly"
+msgstr "Ná hailínigh sonraí de réir leathanaigh, ná déan téacs inléite amháin"
+
+#: lexsup.c:249
+msgid "Page align data, make text readonly"
+msgstr "Ailínigh sonraí de réir leathanaigh, déan téacs inléite amháin"
+
+#: lexsup.c:252
+msgid "Set output file name"
+msgstr "Socraigh ainm an aschomhaid"
+
+#: lexsup.c:254
+msgid "Optimize output file"
+msgstr "Optamaigh an t-aschomhad"
+
+#: lexsup.c:256
+msgid "Ignored for SVR4 compatibility"
+msgstr "Rinneadh neamhshuim air, ar son comhoiriúnachta le SVR4"
+
+#: lexsup.c:260
+msgid "Generate relocatable output"
+msgstr "Gin aschur in-athshuite"
+
+#: lexsup.c:264
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Nasc siombailí amháin (más comhadlann é, ar comhbhrí le --rpath)"
+
+#: lexsup.c:267
+msgid "Strip all symbols"
+msgstr "Struipeáil na siombailí uile"
+
+#: lexsup.c:269
+msgid "Strip debugging symbols"
+msgstr "Struipeáil siombailí dífhabhtaithe"
+
+#: lexsup.c:271
+msgid "Strip symbols in discarded sections"
+msgstr "Struipeáil siombailí i rannáin chaite amach"
+
+#: lexsup.c:273
+msgid "Do not strip symbols in discarded sections"
+msgstr "Ná struipeáil siombailí i rannáin chaite amach"
+
+#: lexsup.c:275
+msgid "Trace file opens"
+msgstr "Lorg oscailtí comhad"
+
+#: lexsup.c:277
+msgid "Read linker script"
+msgstr "Léigh script nascóra"
+
+#: lexsup.c:279 lexsup.c:297 lexsup.c:363 lexsup.c:378 lexsup.c:468
+#: lexsup.c:493 lexsup.c:520
+msgid "SYMBOL"
+msgstr "SIOMBAIL"
+
+#: lexsup.c:279
+msgid "Start with undefined reference to SYMBOL"
+msgstr "Tosaigh le tagairt do SIOMBAIL gan sainmhíniú"
+
+#: lexsup.c:282
+msgid "[=SECTION]"
+msgstr "[=RANNÁN]"
+
+#: lexsup.c:283
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "Ná cumaisc rannáin ionchurtha [RANNÁN | dílleachta]"
+
+#: lexsup.c:285
+msgid "Build global constructor/destructor tables"
+msgstr "Tóg táblaí comhchoiteanna cruthaitheora/scriostóra"
+
+#: lexsup.c:287
+msgid "Print version information"
+msgstr "Taispeáin eolas faoin leagan"
+
+#: lexsup.c:289
+msgid "Print version and emulation information"
+msgstr "Taispeáin eolas faoin leagan agus faoi aithris"
+
+#: lexsup.c:291
+msgid "Discard all local symbols"
+msgstr "Caith gach siombail logánta i dtraipisí"
+
+#: lexsup.c:293
+msgid "Discard temporary local symbols (default)"
+msgstr "Caith siombailí sealadacha logánta i dtraipisí (réamhshocrú)"
+
+#: lexsup.c:295
+msgid "Don't discard any local symbols"
+msgstr "Ná caith aon siombail i dtraipisí"
+
+#: lexsup.c:297
+msgid "Trace mentions of SYMBOL"
+msgstr "Lorg trácht ar SIOMBAIL"
+
+#: lexsup.c:299 lexsup.c:435 lexsup.c:437
+msgid "PATH"
+msgstr "CONAIR"
+
+#: lexsup.c:299
+msgid "Default search path for Solaris compatibility"
+msgstr "Conair réamhshocraithe chuardaigh, ar son comhoiriúnachta le Solaris"
+
+#: lexsup.c:302
+msgid "Start a group"
+msgstr "Tosaigh grúpa"
+
+#: lexsup.c:304
+msgid "End a group"
+msgstr "Cuir deireadh le grúpa"
+
+#: lexsup.c:308
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "Glac le hinchomhaid nach féidir a n-ailtireacht a dhéanamh amach"
+
+#: lexsup.c:312
+msgid "Reject input files whose architecture is unknown"
+msgstr "Diúltaigh le hinchomhaid le hailtireacht anaithnid"
+
+#: lexsup.c:315
+msgid ""
+"Set DT_NEEDED tags for DT_NEEDED entries in\n"
+"\t\t\t\tfollowing dynamic libs"
+msgstr ""
+"Socraigh clibeanna DT_NEEDED d'iontrálacha DT_NEEDED sna\n"
+"\t\t\t\tleabharlanna dinimiciúla seo a leanas"
+
+#: lexsup.c:318
+msgid ""
+"Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+"\t\t\t\tin following dynamic libs"
+msgstr ""
+"Ná socraigh clibeanna DT_NEEDED d'iontrálacha DT_NEEDED sna\n"
+"\t\t\t\tleabharlanna dinimiciúla seo a leanas"
+
+#: lexsup.c:321
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr "Ná socraigh DT_NEEDED ach do na leabharlanna dinimiciúla seo a leanas, más gá"
+
+#: lexsup.c:324
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr "Socraigh DT_NEEDED do na leabharlanna dinimiciúla seo a leanas i gcónaí"
+
+#: lexsup.c:327
+msgid "Ignored for SunOS compatibility"
+msgstr "Rinneadh neamhshuim air, ar son comhoiriúnachta le SunOS"
+
+#: lexsup.c:329
+msgid "Link against shared libraries"
+msgstr "Nasc le comhleabharlanna"
+
+#: lexsup.c:335
+msgid "Do not link against shared libraries"
+msgstr "Ná nasc le comhleabharlanna"
+
+#: lexsup.c:343
+msgid "Bind global references locally"
+msgstr "Ceangail tagairtí comhchoiteanna go logánta"
+
+#: lexsup.c:345
+msgid "Check section addresses for overlaps (default)"
+msgstr "Lorg forluíonna i seoltaí rannáin (réamhshocrú)"
+
+#: lexsup.c:348
+msgid "Do not check section addresses for overlaps"
+msgstr "Ná lorg forluíonna i seoltaí rannáin"
+
+#: lexsup.c:351
+msgid "Output cross reference table"
+msgstr "Aschuir tábla crostagartha"
+
+#: lexsup.c:353
+msgid "SYMBOL=EXPRESSION"
+msgstr "SIOMBAIL=SLONN"
+
+#: lexsup.c:353
+msgid "Define a symbol"
+msgstr "Sainmhínigh siombail"
+
+#: lexsup.c:355
+msgid "[=STYLE]"
+msgstr "[=STÍL]"
+
+#: lexsup.c:355
+msgid "Demangle symbol names [using STYLE]"
+msgstr "Díchoscair ainmneacha siombaile [de réir STÍL]"
+
+#: lexsup.c:358
+msgid "Generate embedded relocs"
+msgstr "Gin athshuímh leabaithe"
+
+#: lexsup.c:360
+msgid "Treat warnings as errors"
+msgstr "Glac le rabhaidh mar earráidí"
+
+#: lexsup.c:363
+msgid "Call SYMBOL at unload-time"
+msgstr "Glaoigh SIOMBAIL ag am díluchtaithe"
+
+#: lexsup.c:365
+msgid "Force generation of file with .exe suffix"
+msgstr "Éiligh cruthú de chomhad le hiarmhír .exe"
+
+#: lexsup.c:367
+msgid "Remove unused sections (on some targets)"
+msgstr "Bain rannáin neamhúsáidte (ar spriocanna áirithe)"
+
+#: lexsup.c:370
+msgid "Don't remove unused sections (default)"
+msgstr "Ná bain rannáin neamhúsáidte (réamhshocrú)"
+
+#: lexsup.c:373
+msgid "Set default hash table size close to <NUMBER>"
+msgstr "Socraigh méid réamhshocraithe an hais-tábla i ngar do <UIMHIR>"
+
+#: lexsup.c:376
+msgid "Print option help"
+msgstr "Taispeáin cabhair le roghanna"
+
+#: lexsup.c:378
+msgid "Call SYMBOL at load-time"
+msgstr "Glaoigh SIOMBAIL ag am luchtaithe"
+
+#: lexsup.c:380
+msgid "Write a map file"
+msgstr "Scríobh comhad mapála"
+
+#: lexsup.c:382
+msgid "Do not define Common storage"
+msgstr "Ná socraigh stóráil choitianta"
+
+#: lexsup.c:384
+msgid "Do not demangle symbol names"
+msgstr "Ná díchoscair ainmneacha siombaile"
+
+#: lexsup.c:386
+msgid "Use less memory and more disk I/O"
+msgstr "Úsáid níos lú cuimhne agus níos mó I/A diosca"
+
+#: lexsup.c:388
+msgid "Do not allow unresolved references in object files"
+msgstr "Ná ceadaigh tagairtí gan réiteach i gcomhaid réada"
+
+#: lexsup.c:391
+msgid "Allow unresolved references in shared libaries"
+msgstr "Ceadaigh tagairtí gan réiteach i gcomhleabharlanna"
+
+#: lexsup.c:395
+msgid "Do not allow unresolved references in shared libs"
+msgstr "Ná ceadaigh tagairtí gan réiteach i gcomhleabharlanna"
+
+#: lexsup.c:399
+msgid "Allow multiple definitions"
+msgstr "Ceadaigh sainmhínithe iomadúla"
+
+#: lexsup.c:401
+msgid "Disallow undefined version"
+msgstr "Ná ceadaigh leagan gan sainmhíniú"
+
+#: lexsup.c:403
+msgid "Create default symbol version"
+msgstr "Cruthaigh leagan réamhshocraithe siombaile"
+
+#: lexsup.c:406
+msgid "Create default symbol version for imported symbols"
+msgstr "Cruthaigh leagan réamhshocraithe siombaile le haghaidh siombailí iompórtáilte"
+
+#: lexsup.c:409
+msgid "Don't warn about mismatched input files"
+msgstr "Ná tabhair rabhadh maidir le hinchomhaid neamh-chomhoiriúnacha"
+
+#: lexsup.c:411
+msgid "Turn off --whole-archive"
+msgstr "Ná húsáid --whole-archive"
+
+#: lexsup.c:413
+msgid "Create an output file even if errors occur"
+msgstr "Cruthaigh aschomhad fiú má tharlaíonn earráidí"
+
+#: lexsup.c:418
+msgid ""
+"Only use library directories specified on\n"
+"\t\t\t\tthe command line"
+msgstr ""
+"Ná húsáid ach na comhadlanna leabharlainne a shonraítear\n"
+"\t\t\t\tar líne na n-orduithe"
+
+#: lexsup.c:421
+msgid "Specify target of output file"
+msgstr "Sonraigh sprioc an aschomhaid"
+
+#: lexsup.c:424
+msgid "Ignored for Linux compatibility"
+msgstr "Rinneadh neamhshuim air, ar son comhoiriúnachta le Linux"
+
+#: lexsup.c:427
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr "Laghdaigh imúsáid chuimhne, ach b'fhéidir go mbeidh sé i bhfad níos moille"
+
+#: lexsup.c:430
+msgid "Relax branches on certain targets"
+msgstr "Bog brainsí ar spriocanna áirithe"
+
+#: lexsup.c:433
+msgid "Keep only symbols listed in FILE"
+msgstr "Ná coinnigh ach na siombailí atá i gCOMHAD"
+
+#: lexsup.c:435
+msgid "Set runtime shared library search path"
+msgstr "Socraigh conair chuardaigh do chomhleabharlanna am-rite"
+
+#: lexsup.c:437
+msgid "Set link time shared library search path"
+msgstr "Socraigh conair chuardaigh do chomhleabharlanna am-nasctha"
+
+#: lexsup.c:440
+msgid "Create a shared library"
+msgstr "Cruthaigh comhleabharlann"
+
+#: lexsup.c:444
+msgid "Create a position independent executable"
+msgstr "Cruthaigh clár inrite atá neamhspleách ar ionad"
+
+#: lexsup.c:448
+msgid "Sort common symbols by size"
+msgstr "Sórtáil siombailí coitianta de réir méide"
+
+#: lexsup.c:452
+msgid "name|alignment"
+msgstr "ainm|ailíniú"
+
+#: lexsup.c:453
+msgid "Sort sections by name or maximum alignment"
+msgstr "Sórtáil rannáin de réir ainm nó ailíniú uasta"
+
+#: lexsup.c:455
+msgid "COUNT"
+msgstr "LÍON"
+
+#: lexsup.c:455
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Cé mhéad clib ba chóir a chur in áirithe i rannán .dynamic"
+
+#: lexsup.c:458
+msgid "[=SIZE]"
+msgstr "[=MÉID]"
+
+#: lexsup.c:458
+msgid "Split output sections every SIZE octets"
+msgstr "Roinn rannáin aschurtha gach MÉID beart"
+
+#: lexsup.c:461
+msgid "[=COUNT]"
+msgstr "[=LÍON]"
+
+#: lexsup.c:461
+msgid "Split output sections every COUNT relocs"
+msgstr "Roinn rannáin aschurtha gach LÍON athshuíomh"
+
+#: lexsup.c:464
+msgid "Print memory usage statistics"
+msgstr "Priontáil staitisticí úsáide cuimhne"
+
+#: lexsup.c:466
+msgid "Display target specific options"
+msgstr "Taispeáin roghanna a bhaineann leis an sprioc seo"
+
+#: lexsup.c:468
+msgid "Do task level linking"
+msgstr "Déan nascadh tascleibhéil"
+
+#: lexsup.c:470
+msgid "Use same format as native linker"
+msgstr "Úsáid formáid chéanna leis an nascóir dúchasach"
+
+#: lexsup.c:472
+msgid "SECTION=ADDRESS"
+msgstr "RANNÁN=SEOLADH"
+
+#: lexsup.c:472
+msgid "Set address of named section"
+msgstr "Socraigh seoladh an rannáin ainmnithe"
+
+#: lexsup.c:475
+msgid "Set address of .bss section"
+msgstr "Socraigh seoladh an rannáin .bss"
+
+#: lexsup.c:477
+msgid "Set address of .data section"
+msgstr "Socraigh seoladh an rannáin .data"
+
+#: lexsup.c:479
+msgid "Set address of .text section"
+msgstr "Socraigh seoladh an rannáin .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 ""
+"Conas siombailí gan réiteach a láimhseáil. is <modh> ceann de:\n"
+"\t\t\t\tignore-all, report-all, ignore-in-object-files,\n"
+"\t\t\t\tignore-in-shared-libs"
+
+#: lexsup.c:486
+msgid "Output lots of information during link"
+msgstr "Taispeáin go leor faisnéise le linn nasctha"
+
+#: lexsup.c:490
+msgid "Read version information script"
+msgstr "Léigh script le heolas faoin leagan"
+
+#: lexsup.c:493
+msgid ""
+"Take export symbols list from .exports, using\n"
+"\t\t\t\tSYMBOL as the version."
+msgstr ""
+"Glac liosta de shiombailí easpórtáilte ó .exports, le\n"
+"\t\t\t\tSIOMBAIL mar leagan."
+
+#: lexsup.c:496
+msgid "Warn about duplicate common symbols"
+msgstr "Tabhair rabhadh má tá siombailí coitianta dúblacha ann"
+
+#: lexsup.c:498
+msgid "Warn if global constructors/destructors are seen"
+msgstr "Tabhair rabhadh má fheictear cruthaitheoirí/scriostóirí"
+
+#: lexsup.c:501
+msgid "Warn if the multiple GP values are used"
+msgstr "Tabhair rabhadh má tá luachanna iomadúla GP in úsáid"
+
+#: lexsup.c:503
+msgid "Warn only once per undefined symbol"
+msgstr "Ná tabhair ach rabhadh amháin do gach siombail neamhshainithe"
+
+#: lexsup.c:505
+msgid "Warn if start of section changes due to alignment"
+msgstr "Tabhair rabhadh má athraíonn tús an rannáin de bharr ailínithe"
+
+#: lexsup.c:508
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr "Tabhair rabhadh má tá DT_TEXTREL ag comhréad"
+
+#: lexsup.c:512
+msgid "Report unresolved symbols as warnings"
+msgstr "Tabhair rabhadh má tá siombail gan réiteach ann"
+
+#: lexsup.c:515
+msgid "Report unresolved symbols as errors"
+msgstr "Tabhair earráid má tá siombail gan réiteach ann"
+
+#: lexsup.c:517
+msgid "Include all objects from following archives"
+msgstr "Cuir gach réad san áireamh as na cartlanna seo a leanas"
+
+#: lexsup.c:520
+msgid "Use wrapper functions for SYMBOL"
+msgstr "Úsáid feidhmeanna rapair do SIOMBAIL"
+
+#: lexsup.c:667
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: rogha anaithnid '%s'\n"
+
+#: lexsup.c:669
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F: úsáid an rogha --help chun tuilleadh eolais a fháil\n"
+
+#: lexsup.c:687
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: rogha anaithnid -a: `%s'\n"
+
+#: lexsup.c:700
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: rogha anaithnid -assert: `%s'\n"
+
+#: lexsup.c:743
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: stíl anaithnid díchoscartha `%s'"
+
+#: lexsup.c:805
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: uimhir neamhbhailí `%s'\n"
+
+#: lexsup.c:897
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: drochrogha --unresolved-symbols: %s\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:968
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: drochrogha -rpath\n"
+
+#: lexsup.c:1080
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: ní thacaítear le -shared\n"
+
+#: lexsup.c:1089
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: ní thacaítear le -pie\n"
+
+#: lexsup.c:1099
+msgid "name"
+msgstr "ainm"
+
+#: lexsup.c:1101
+msgid "alignment"
+msgstr "ailíniú"
+
+#: lexsup.c:1104
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr "%P%F: rogha neamhbhailí sórtála rannán: %s\n"
+
+#: lexsup.c:1130
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F: rogha neamhbhailí tar éis \"--section-start\"\n"
+
+#: lexsup.c:1137
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F: argóint(í) ar iarraidh tar éis \"--section-start\"\n"
+
+#: lexsup.c:1311
+msgid "%P%F: may not nest groups (--help for usage)\n"
+msgstr "%P%F: ní cheadaítear grúpaí a bheith neadaithe (--help = cabhair)\n"
+
+#: lexsup.c:1318
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: deireadh an ghrúpa roimh a thús (--help = úsáid)\n"
+
+#: lexsup.c:1346
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr "%P%X: argóint uimhriúil de dhíth tar éis --hash-size\n"
+
+#: lexsup.c:1397 lexsup.c:1410
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: uimhir neamhbhailí heicsidheachúlach `%s'\n"
+
+#: lexsup.c:1445
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Úsáid: %s [roghanna] comhad...\n"
+
+#: lexsup.c:1447
+#, c-format
+msgid "Options:\n"
+msgstr "Roghanna:\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: spriocanna tacaithe:"
+
+#: lexsup.c:1538
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: aithrisí a dtacaítear leo: "
+
+#: lexsup.c:1543
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: roghanna a bhaineann le haithris:\n"
+
+#: lexsup.c:1547
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr "Seol tuairiscí ar fhabhtanna chuig %s\n"
+
+#: mri.c:291
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F: cineál anaithnid formáide %s\n"
+
+#: pe-dll.c:303
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%XAiltireacht PEI gan tacaíocht: %s\n"
+
+#: pe-dll.c:652
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%XEarráid, EXPORT dúblach le horduimhreacha: %s (%d vs %d)\n"
+
+#: pe-dll.c:659
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "Rabhadh, EXPORT dúblach: %s\n"
+
+#: pe-dll.c:725
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%XNí féidir %s a easpórtáil: siombail gan sainmhíniú\n"
+
+#: pe-dll.c:731
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%XNí féidir %s a easpórtáil: siombail den chineál mícheart (%d vs %d)\n"
+
+#: pe-dll.c:738
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%XNí féidir %s a easpórtáil: siombail gan aimsiú\n"
+
+#: pe-dll.c:850
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr "%XEarráid, úsáideadh orduimhir faoi dhó: %d (%s vs %s)\n"
+
+#: pe-dll.c:1172
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XEarráid: athshuíomh %d-giotán i dll\n"
+
+#: pe-dll.c:1300
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s: Ní féidir aschomhad %s a oscailt\n"
+
+#: pe-dll.c:1443
+#, c-format
+msgid "; no contents available\n"
+msgstr "; níl an t-ábhar ar fáil\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: ní féidir athróg '%T' a uathiompórtáil. Léigh an doiciméadú \"ld\" ar --enable-auto-import chun na mionsonraí a fháil.\n"
+
+#: pe-dll.c:2235
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%XNí féidir comhad .lib a oscailt: %s\n"
+
+#: pe-dll.c:2240
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Comhad leabharlainne á chruthú: %s\n"
diff --git a/ld/po/ld.pot b/ld/po/ld.pot
index 549ecf46adc5..155f20e1c182 100644
--- a/ld/po/ld.pot
+++ b/ld/po/ld.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-03-25 18:36+0100\n"
+"POT-Creation-Date: 2007-06-27 16:44+0930\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"
@@ -31,167 +31,167 @@ msgstr ""
msgid "Errors encountered processing file %s"
msgstr ""
-#: emultempl/armcoff.em:190 emultempl/pe.em:1460
+#: emultempl/armcoff.em:189 emultempl/pe.em:1528
msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
msgstr ""
-#: emultempl/armcoff.em:195 emultempl/pe.em:1465
+#: emultempl/armcoff.em:194 emultempl/pe.em:1533
msgid "%P: warning: connot find thumb start symbol %s\n"
msgstr ""
-#: emultempl/pe.em:304
+#: emultempl/pe.em:311
#, c-format
msgid ""
" --base_file <basefile> Generate a base file for relocatable "
"DLLs\n"
msgstr ""
-#: emultempl/pe.em:305
+#: emultempl/pe.em:312
#, c-format
msgid ""
" --dll Set image base to the default for DLLs\n"
msgstr ""
-#: emultempl/pe.em:306
+#: emultempl/pe.em:313
#, c-format
msgid " --file-alignment <size> Set file alignment\n"
msgstr ""
-#: emultempl/pe.em:307
+#: emultempl/pe.em:314
#, c-format
msgid " --heap <size> Set initial size of the heap\n"
msgstr ""
-#: emultempl/pe.em:308
+#: emultempl/pe.em:315
#, c-format
msgid ""
" --image-base <address> Set start address of the executable\n"
msgstr ""
-#: emultempl/pe.em:309
+#: emultempl/pe.em:316
#, c-format
msgid ""
" --major-image-version <number> Set version number of the executable\n"
msgstr ""
-#: emultempl/pe.em:310
+#: emultempl/pe.em:317
#, c-format
msgid " --major-os-version <number> Set minimum required OS version\n"
msgstr ""
-#: emultempl/pe.em:311
+#: emultempl/pe.em:318
#, c-format
msgid ""
" --major-subsystem-version <number> Set minimum required OS subsystem "
"version\n"
msgstr ""
-#: emultempl/pe.em:312
+#: emultempl/pe.em:319
#, c-format
msgid ""
" --minor-image-version <number> Set revision number of the executable\n"
msgstr ""
-#: emultempl/pe.em:313
+#: emultempl/pe.em:320
#, c-format
msgid " --minor-os-version <number> Set minimum required OS revision\n"
msgstr ""
-#: emultempl/pe.em:314
+#: emultempl/pe.em:321
#, c-format
msgid ""
" --minor-subsystem-version <number> Set minimum required OS subsystem "
"revision\n"
msgstr ""
-#: emultempl/pe.em:315
+#: emultempl/pe.em:322
#, c-format
msgid " --section-alignment <size> Set section alignment\n"
msgstr ""
-#: emultempl/pe.em:316
+#: emultempl/pe.em:323
#, c-format
msgid " --stack <size> Set size of the initial stack\n"
msgstr ""
-#: emultempl/pe.em:317
+#: emultempl/pe.em:324
#, c-format
msgid ""
" --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
msgstr ""
-#: emultempl/pe.em:318
+#: emultempl/pe.em:325
#, c-format
msgid ""
" --support-old-code Support interworking with old code\n"
msgstr ""
-#: emultempl/pe.em:319
+#: emultempl/pe.em:326
#, c-format
msgid ""
" --thumb-entry=<symbol> Set the entry point to be Thumb "
"<symbol>\n"
msgstr ""
-#: emultempl/pe.em:321
+#: emultempl/pe.em:328
#, c-format
msgid ""
" --add-stdcall-alias Export symbols with and without @nn\n"
msgstr ""
-#: emultempl/pe.em:322
+#: emultempl/pe.em:329
#, c-format
msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
msgstr ""
-#: emultempl/pe.em:323
+#: emultempl/pe.em:330
#, c-format
msgid ""
" --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
msgstr ""
-#: emultempl/pe.em:324
+#: emultempl/pe.em:331
#, c-format
msgid ""
" --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
msgstr ""
-#: emultempl/pe.em:325
+#: emultempl/pe.em:332
#, c-format
msgid ""
" --exclude-libs lib,lib,... Exclude libraries from automatic "
"export\n"
msgstr ""
-#: emultempl/pe.em:326
+#: emultempl/pe.em:333
#, c-format
msgid ""
" --export-all-symbols Automatically export all globals to "
"DLL\n"
msgstr ""
-#: emultempl/pe.em:327
+#: emultempl/pe.em:334
#, c-format
msgid " --kill-at Remove @nn from exported symbols\n"
msgstr ""
-#: emultempl/pe.em:328
+#: emultempl/pe.em:335
#, c-format
msgid " --out-implib <file> Generate import library\n"
msgstr ""
-#: emultempl/pe.em:329
+#: emultempl/pe.em:336
#, c-format
msgid ""
" --output-def <file> Generate a .DEF file for the built DLL\n"
msgstr ""
-#: emultempl/pe.em:330
+#: emultempl/pe.em:337
#, c-format
msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
msgstr ""
-#: emultempl/pe.em:331
+#: emultempl/pe.em:338
#, c-format
msgid ""
" --compat-implib Create backward compatible import "
@@ -199,7 +199,7 @@ msgid ""
" create __imp_<SYMBOL> as well.\n"
msgstr ""
-#: emultempl/pe.em:333
+#: emultempl/pe.em:340
#, c-format
msgid ""
" --enable-auto-image-base Automatically choose image base for "
@@ -207,14 +207,14 @@ msgid ""
" unless user specifies one\n"
msgstr ""
-#: emultempl/pe.em:335
+#: emultempl/pe.em:342
#, c-format
msgid ""
" --disable-auto-image-base Do not auto-choose image base. "
"(default)\n"
msgstr ""
-#: emultempl/pe.em:336
+#: emultempl/pe.em:343
#, c-format
msgid ""
" --dll-search-prefix=<string> When linking dynamically to a dll "
@@ -224,21 +224,21 @@ msgid ""
" in preference to lib<basename>.dll \n"
msgstr ""
-#: emultempl/pe.em:339
+#: emultempl/pe.em:346
#, c-format
msgid ""
" --enable-auto-import Do sophistcated linking of _sym to\n"
" __imp_sym for DATA references\n"
msgstr ""
-#: emultempl/pe.em:341
+#: emultempl/pe.em:348
#, c-format
msgid ""
" --disable-auto-import Do not auto-import DATA items from "
"DLLs\n"
msgstr ""
-#: emultempl/pe.em:342
+#: emultempl/pe.em:349
#, c-format
msgid ""
" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
@@ -247,7 +247,7 @@ msgid ""
" runtime.\n"
msgstr ""
-#: emultempl/pe.em:345
+#: emultempl/pe.em:352
#, c-format
msgid ""
" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations "
@@ -255,7 +255,7 @@ msgid ""
" auto-imported DATA.\n"
msgstr ""
-#: emultempl/pe.em:347
+#: emultempl/pe.em:354
#, c-format
msgid ""
" --enable-extra-pe-debug Enable verbose debug output when "
@@ -264,89 +264,93 @@ msgid ""
"import)\n"
msgstr ""
-#: emultempl/pe.em:350
+#: emultempl/pe.em:357
#, c-format
msgid ""
" --large-address-aware Executable supports virtual addresses\n"
" greater than 2 gigabytes\n"
msgstr ""
-#: emultempl/pe.em:417
+#: emultempl/pe.em:424
msgid "%P: warning: bad version number in -subsystem option\n"
msgstr ""
-#: emultempl/pe.em:448
+#: emultempl/pe.em:455
msgid "%P%F: invalid subsystem type %s\n"
msgstr ""
-#: emultempl/pe.em:487
+#: emultempl/pe.em:494
msgid "%P%F: invalid hex number for PE parameter '%s'\n"
msgstr ""
-#: emultempl/pe.em:504
+#: emultempl/pe.em:511
msgid "%P%F: strange hex info for PE parameter '%s'\n"
msgstr ""
-#: emultempl/pe.em:521
+#: emultempl/pe.em:528
#, c-format
msgid "%s: Can't open base file %s\n"
msgstr ""
-#: emultempl/pe.em:737
+#: emultempl/pe.em:744
msgid "%P: warning, file alignment > section alignment.\n"
msgstr ""
-#: emultempl/pe.em:824 emultempl/pe.em:851
+#: emultempl/pe.em:831 emultempl/pe.em:858
#, c-format
msgid "Warning: resolving %s by linking to %s\n"
msgstr ""
-#: emultempl/pe.em:829 emultempl/pe.em:856
+#: emultempl/pe.em:836 emultempl/pe.em:863
msgid "Use --enable-stdcall-fixup to disable these warnings\n"
msgstr ""
-#: emultempl/pe.em:830 emultempl/pe.em:857
+#: emultempl/pe.em:837 emultempl/pe.em:864
msgid "Use --disable-stdcall-fixup to disable these fixups\n"
msgstr ""
-#: emultempl/pe.em:876
+#: emultempl/pe.em:883
#, c-format
msgid "%C: Cannot get section contents - auto-import exception\n"
msgstr ""
-#: emultempl/pe.em:913
+#: emultempl/pe.em:920
#, 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"
+#: emultempl/pe.em:992
+msgid "%F%P: cannot perform PE operations on non PE output file '%B'.\n"
msgstr ""
-#: emultempl/pe.em:1261
+#: emultempl/pe.em:1334
#, c-format
msgid "Errors encountered processing file %s\n"
msgstr ""
-#: emultempl/pe.em:1284
+#: emultempl/pe.em:1357
#, 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
+#: emultempl/pe.em:1418 ldexp.c:530 ldlang.c:3082 ldlang.c:6087 ldlang.c:6118
#: ldmain.c:1167
msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
msgstr ""
-#: ldcref.c:154
+#: ldcref.c:166
msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
msgstr ""
-#: ldcref.c:160
+#: ldcref.c:172
msgid "%X%P: cref_hash_lookup failed: %E\n"
msgstr ""
-#: ldcref.c:226
+#: ldcref.c:182
+msgid "%X%P: cref alloc failed: %E\n"
+msgstr ""
+
+#: ldcref.c:362
#, c-format
msgid ""
"\n"
@@ -354,33 +358,33 @@ msgid ""
"\n"
msgstr ""
-#: ldcref.c:227
+#: ldcref.c:363
msgid "Symbol"
msgstr ""
-#: ldcref.c:235
+#: ldcref.c:371
#, c-format
msgid "File\n"
msgstr ""
-#: ldcref.c:239
+#: ldcref.c:375
#, c-format
msgid "No symbols\n"
msgstr ""
-#: ldcref.c:360 ldcref.c:482
+#: ldcref.c:496 ldcref.c:618
msgid "%B%F: could not read symbols; %E\n"
msgstr ""
-#: ldcref.c:364 ldcref.c:486 ldmain.c:1232 ldmain.c:1236
+#: ldcref.c:500 ldcref.c:622 ldmain.c:1232 ldmain.c:1236
msgid "%B%F: could not read symbols: %E\n"
msgstr ""
-#: ldcref.c:415
+#: ldcref.c:551
msgid "%P: symbol `%T' missing from main hash table\n"
msgstr ""
-#: ldcref.c:557 ldcref.c:564 ldmain.c:1279 ldmain.c:1286
+#: ldcref.c:693 ldcref.c:700 ldmain.c:1279 ldmain.c:1286
msgid "%B%F: could not read relocs: %E\n"
msgstr ""
@@ -388,7 +392,7 @@ msgstr ""
#. 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
+#: ldcref.c:727
msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
msgstr ""
@@ -415,85 +419,95 @@ msgid ""
"\n"
msgstr ""
-#: ldemul.c:236
+#: ldemul.c:235
#, c-format
msgid "%S SYSLIB ignored\n"
msgstr ""
-#: ldemul.c:242
+#: ldemul.c:241
#, c-format
msgid "%S HLL ignored\n"
msgstr ""
-#: ldemul.c:262
+#: ldemul.c:261
msgid "%P: unrecognised emulation mode: %s\n"
msgstr ""
-#: ldemul.c:263
+#: ldemul.c:262
msgid "Supported emulations: "
msgstr ""
-#: ldemul.c:305
+#: ldemul.c:304
#, c-format
msgid " no emulation specific options.\n"
msgstr ""
-#: ldexp.c:338
+#: ldexp.c:344
#, c-format
msgid "%F%S %% by zero\n"
msgstr ""
-#: ldexp.c:346
+#: ldexp.c:352
#, c-format
msgid "%F%S / by zero\n"
msgstr ""
-#: ldexp.c:536
+#: ldexp.c:544
#, c-format
msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
msgstr ""
-#: ldexp.c:547
+#: ldexp.c:555
#, c-format
msgid "%F%S: undefined symbol `%s' referenced in expression\n"
msgstr ""
-#: ldexp.c:608 ldexp.c:621
+#: ldexp.c:576 ldexp.c:593 ldexp.c:619
+#, c-format
+msgid "%F%S: undefined section `%s' referenced in expression\n"
+msgstr ""
+
+#: ldexp.c:645 ldexp.c:658
#, c-format
msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
msgstr ""
-#: ldexp.c:683
+#: ldexp.c:669
+#, c-format
+msgid "%F%S: unknown constant `%s' referenced in expression\n"
+msgstr ""
+
+#: ldexp.c:730
#, c-format
msgid "%F%S can not PROVIDE assignment to location counter\n"
msgstr ""
-#: ldexp.c:697
+#: ldexp.c:744
#, c-format
msgid "%F%S invalid assignment to location counter\n"
msgstr ""
-#: ldexp.c:700
+#: ldexp.c:747
#, c-format
msgid "%F%S assignment to location counter invalid outside of SECTION\n"
msgstr ""
-#: ldexp.c:709
+#: ldexp.c:756
msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
msgstr ""
-#: ldexp.c:748
+#: ldexp.c:795
msgid "%P%F:%s: hash creation failed\n"
msgstr ""
-#: ldexp.c:1000 ldexp.c:1025
+#: ldexp.c:1054 ldexp.c:1079
#, c-format
msgid "%F%S nonconstant expression for %s\n"
msgstr ""
-#: ldexp.c:1082
+#: ldexp.c:1138
#, c-format
-msgid "%F%S non constant expression for %s\n"
+msgid "%F%S: nonconstant expression for %s\n"
msgstr ""
#: ldfile.c:139
@@ -510,88 +524,96 @@ msgstr ""
msgid "%F%P: invalid BFD target `%s'\n"
msgstr ""
-#: ldfile.c:255 ldfile.c:282
+#: ldfile.c:256 ldfile.c:285
msgid "%P: skipping incompatible %s when searching for %s\n"
msgstr ""
-#: ldfile.c:267
+#: ldfile.c:269
msgid "%F%P: attempted static link of dynamic object `%s'\n"
msgstr ""
-#: ldfile.c:384
+#: ldfile.c:388
msgid "%F%P: %s (%s): No such file: %E\n"
msgstr ""
-#: ldfile.c:387
+#: ldfile.c:391
msgid "%F%P: %s: No such file: %E\n"
msgstr ""
-#: ldfile.c:417
+#: ldfile.c:421
msgid "%F%P: cannot find %s inside %s\n"
msgstr ""
-#: ldfile.c:420
+#: ldfile.c:424
msgid "%F%P: cannot find %s\n"
msgstr ""
-#: ldfile.c:437 ldfile.c:453
+#: ldfile.c:441 ldfile.c:457
#, c-format
msgid "cannot find script file %s\n"
msgstr ""
-#: ldfile.c:439 ldfile.c:455
+#: ldfile.c:443 ldfile.c:459
#, c-format
msgid "opened script file %s\n"
msgstr ""
-#: ldfile.c:499
+#: ldfile.c:503
msgid "%P%F: cannot open linker script file %s: %E\n"
msgstr ""
-#: ldfile.c:546
+#: ldfile.c:550
msgid "%P%F: cannot represent machine `%s'\n"
msgstr ""
-#: ldlang.c:940 ldlang.c:982 ldlang.c:2695
+#: ldlang.c:1069 ldlang.c:1111 ldlang.c:2831
msgid "%P%F: can not create hash table: %E\n"
msgstr ""
-#: ldlang.c:1025
+#: ldlang.c:1154
msgid "%P:%S: warning: redeclaration of memory region '%s'\n"
msgstr ""
-#: ldlang.c:1031
+#: ldlang.c:1160
msgid "%P:%S: warning: memory region %s not declared\n"
msgstr ""
-#: ldlang.c:1108 ldlang.c:1135
+#: ldlang.c:1240 ldlang.c:1270
msgid "%P%F: failed creating section `%s': %E\n"
msgstr ""
-#: ldlang.c:1601
+#: ldlang.c:1754
+#, c-format
+msgid ""
+"\n"
+"Discarded input sections\n"
+"\n"
+msgstr ""
+
+#: ldlang.c:1762
msgid ""
"\n"
"Memory Configuration\n"
"\n"
msgstr ""
-#: ldlang.c:1603
+#: ldlang.c:1764
msgid "Name"
msgstr ""
-#: ldlang.c:1603
+#: ldlang.c:1764
msgid "Origin"
msgstr ""
-#: ldlang.c:1603
+#: ldlang.c:1764
msgid "Length"
msgstr ""
-#: ldlang.c:1603
+#: ldlang.c:1764
msgid "Attributes"
msgstr ""
-#: ldlang.c:1643
+#: ldlang.c:1804
#, c-format
msgid ""
"\n"
@@ -599,237 +621,240 @@ msgid ""
"\n"
msgstr ""
-#: ldlang.c:1709
+#: ldlang.c:1871
msgid "%P%F: Illegal use of `%s' section\n"
msgstr ""
-#: ldlang.c:1716
+#: ldlang.c:1879
msgid "%P%F: output format %s cannot represent section called %s\n"
msgstr ""
-#: ldlang.c:2313
+#: ldlang.c:2429
msgid "%B: file not recognized: %E\n"
msgstr ""
-#: ldlang.c:2314
+#: ldlang.c:2430
msgid "%B: matching formats:"
msgstr ""
-#: ldlang.c:2321
+#: ldlang.c:2437
msgid "%F%B: file not recognized: %E\n"
msgstr ""
-#: ldlang.c:2385
+#: ldlang.c:2507
msgid "%F%B: member %B in archive is not an object\n"
msgstr ""
-#: ldlang.c:2396 ldlang.c:2410
+#: ldlang.c:2518 ldlang.c:2532
msgid "%F%B: could not read symbols: %E\n"
msgstr ""
-#: ldlang.c:2665
+#: ldlang.c:2801
msgid ""
"%P: warning: could not find any targets that match endianness requirement\n"
msgstr ""
-#: ldlang.c:2679
+#: ldlang.c:2815
msgid "%P%F: target %s not found\n"
msgstr ""
-#: ldlang.c:2681
+#: ldlang.c:2817
msgid "%P%F: cannot open output file %s: %E\n"
msgstr ""
-#: ldlang.c:2687
+#: ldlang.c:2823
msgid "%P%F:%s: can not make object file: %E\n"
msgstr ""
-#: ldlang.c:2691
+#: ldlang.c:2827
msgid "%P%F:%s: can not set architecture: %E\n"
msgstr ""
-#: ldlang.c:2839
+#: ldlang.c:2975
msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
msgstr ""
-#: ldlang.c:2857
+#: ldlang.c:2993
msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
msgstr ""
-#: ldlang.c:3288
+#: ldlang.c:3426
msgid " load address 0x%V"
msgstr ""
-#: ldlang.c:3528
+#: ldlang.c:3661
msgid "%W (size before relaxing)\n"
msgstr ""
-#: ldlang.c:3615
+#: ldlang.c:3747
#, c-format
msgid "Address of section %s set to "
msgstr ""
-#: ldlang.c:3768
+#: ldlang.c:3900
#, c-format
msgid "Fail with %d\n"
msgstr ""
-#: ldlang.c:4040
+#: ldlang.c:4172
msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
msgstr ""
-#: ldlang.c:4065
+#: ldlang.c:4197
msgid "%X%P: address 0x%v of %B section %s is not within region %s\n"
msgstr ""
-#: ldlang.c:4074
+#: ldlang.c:4206
msgid "%X%P: region %s is full (%B section %s)\n"
msgstr ""
-#: ldlang.c:4114
+#: ldlang.c:4247
#, c-format
msgid ""
"%F%S: non constant or forward reference address expression for section %s\n"
msgstr ""
-#: ldlang.c:4139
+#: ldlang.c:4272
msgid "%P%X: Internal error on COFF shared library section %s\n"
msgstr ""
-#: ldlang.c:4197
+#: ldlang.c:4331
msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
msgstr ""
-#: ldlang.c:4202
+#: ldlang.c:4336
msgid "%P: warning: no memory region specified for loadable section `%s'\n"
msgstr ""
-#: ldlang.c:4224
+#: ldlang.c:4358
msgid "%P: warning: changing start of section %s by %lu bytes\n"
msgstr ""
-#: ldlang.c:4388
+#: ldlang.c:4437
+msgid "%P: warning: dot moved backwards before `%s'\n"
+msgstr ""
+
+#: ldlang.c:4609
msgid "%P%F: can't relax section: %E\n"
msgstr ""
-#: ldlang.c:4636
+#: ldlang.c:4898
msgid "%F%P: invalid data statement\n"
msgstr ""
-#: ldlang.c:4669
+#: ldlang.c:4931
msgid "%F%P: invalid reloc statement\n"
msgstr ""
-#: ldlang.c:4802
+#: ldlang.c:5063
msgid "%P%F:%s: can't set start address\n"
msgstr ""
-#: ldlang.c:4815 ldlang.c:4834
+#: ldlang.c:5076 ldlang.c:5095
msgid "%P%F: can't set start address\n"
msgstr ""
-#: ldlang.c:4827
+#: ldlang.c:5088
msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
msgstr ""
-#: ldlang.c:4839
+#: ldlang.c:5100
msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
msgstr ""
-#: ldlang.c:4888
+#: ldlang.c:5149
msgid ""
"%P%F: Relocatable linking with relocations from format %s (%B) to format %s "
"(%B) is not supported\n"
msgstr ""
-#: ldlang.c:4898
+#: ldlang.c:5159
msgid ""
-"%P: warning: %s architecture of input file `%B' is incompatible with %s "
-"output\n"
+"%P%X: %s architecture of input file `%B' is incompatible with %s output\n"
msgstr ""
-#: ldlang.c:4920
+#: ldlang.c:5181
msgid "%P%X: failed to merge target specific data of file %B\n"
msgstr ""
-#: ldlang.c:5004
+#: ldlang.c:5265
msgid ""
"\n"
"Allocating common symbols\n"
msgstr ""
-#: ldlang.c:5005
+#: ldlang.c:5266
msgid ""
"Common symbol size file\n"
"\n"
msgstr ""
-#: ldlang.c:5131
+#: ldlang.c:5401
msgid "%P%F: invalid syntax in flags\n"
msgstr ""
-#: ldlang.c:5406
+#: ldlang.c:5714
msgid "%P%F: Failed to create hash table\n"
msgstr ""
-#: ldlang.c:5722
+#: ldlang.c:6009
msgid "%P%F: multiple STARTUP files\n"
msgstr ""
-#: ldlang.c:5770
+#: ldlang.c:6057
msgid "%X%P:%S: section has both a load address and a load region\n"
msgstr ""
-#: ldlang.c:6007
+#: ldlang.c:6314
msgid "%F%P: bfd_record_phdr failed: %E\n"
msgstr ""
-#: ldlang.c:6027
+#: ldlang.c:6334
msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
msgstr ""
-#: ldlang.c:6418
+#: ldlang.c:6725
msgid "%X%P: unknown language `%s' in version information\n"
msgstr ""
-#: ldlang.c:6560
+#: ldlang.c:6867
msgid ""
"%X%P: anonymous version tag cannot be combined with other version tags\n"
msgstr ""
-#: ldlang.c:6569
+#: ldlang.c:6876
msgid "%X%P: duplicate version tag `%s'\n"
msgstr ""
-#: ldlang.c:6589 ldlang.c:6598 ldlang.c:6615 ldlang.c:6625
+#: ldlang.c:6896 ldlang.c:6905 ldlang.c:6922 ldlang.c:6932
msgid "%X%P: duplicate expression `%s' in version information\n"
msgstr ""
-#: ldlang.c:6665
+#: ldlang.c:6972
msgid "%X%P: unable to find version dependency `%s'\n"
msgstr ""
-#: ldlang.c:6687
+#: ldlang.c:6994
msgid "%X%P: unable to read .exports section contents\n"
msgstr ""
-#: ldmain.c:232
+#: ldmain.c:234
msgid "%X%P: can't set BFD default target to `%s': %E\n"
msgstr ""
-#: ldmain.c:345
+#: ldmain.c:298
msgid "%P%F: --relax and -r may not be used together\n"
msgstr ""
-#: ldmain.c:347
+#: ldmain.c:300
msgid "%P%F: -r and -shared may not be used together\n"
msgstr ""
-#: ldmain.c:353
+#: ldmain.c:343
msgid "%P%F: -F may not be used without -shared\n"
msgstr ""
-#: ldmain.c:355
+#: ldmain.c:345
msgid "%P%F: -f may not be used without -shared\n"
msgstr ""
@@ -873,7 +898,7 @@ msgstr ""
msgid "%P: Error writing file `%s'\n"
msgstr ""
-#: ldmain.c:535 pe-dll.c:1494
+#: ldmain.c:535 pe-dll.c:1572
#, c-format
msgid "%P: Error closing file `%s'\n"
msgstr ""
@@ -1051,59 +1076,59 @@ msgstr ""
msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
msgstr ""
-#: ldmisc.c:147
+#: ldmisc.c:148
#, c-format
msgid "no symbol"
msgstr ""
-#: ldmisc.c:238
+#: ldmisc.c:245
#, c-format
msgid "built in linker script:%u"
msgstr ""
-#: ldmisc.c:294 ldmisc.c:298
+#: ldmisc.c:301 ldmisc.c:305
msgid "%B%F: could not read symbols\n"
msgstr ""
-#: ldmisc.c:340
-msgid "%B: In function `%T'"
+#: ldmisc.c:347
+msgid "%B: In function `%T':\n"
msgstr ""
-#: ldmisc.c:510
+#: ldmisc.c:472
msgid "%F%P: internal error %s %d\n"
msgstr ""
-#: ldmisc.c:556
+#: ldmisc.c:521
msgid "%P: internal error: aborting at %s line %d in %s\n"
msgstr ""
-#: ldmisc.c:559
+#: ldmisc.c:524
msgid "%P: internal error: aborting at %s line %d\n"
msgstr ""
-#: ldmisc.c:561
+#: ldmisc.c:526
msgid "%P%F: please report this bug\n"
msgstr ""
#. Output for noisy == 2 is intended to follow the GNU standards.
-#: ldver.c:38
+#: ldver.c:37
#, c-format
-msgid "GNU ld version %s\n"
+msgid "GNU ld %s\n"
msgstr ""
-#: ldver.c:42
+#: ldver.c:41
#, c-format
-msgid "Copyright 2005 Free Software Foundation, Inc.\n"
+msgid "Copyright 2007 Free Software Foundation, Inc.\n"
msgstr ""
-#: ldver.c:43
+#: ldver.c:42
#, c-format
msgid ""
"This program is free software; you may redistribute it under the terms of\n"
"the GNU General Public License. This program has absolutely no warranty.\n"
msgstr ""
-#: ldver.c:52
+#: ldver.c:51
#, c-format
msgid " Supported emulations:\n"
msgstr ""
@@ -1129,616 +1154,652 @@ msgstr ""
msgid "%F%P: final link failed: %E\n"
msgstr ""
-#: lexsup.c:196 lexsup.c:328
+#: lexsup.c:205 lexsup.c:341
msgid "KEYWORD"
msgstr ""
-#: lexsup.c:196
+#: lexsup.c:205
msgid "Shared library control for HP/UX compatibility"
msgstr ""
-#: lexsup.c:199
+#: lexsup.c:208
msgid "ARCH"
msgstr ""
-#: lexsup.c:199
+#: lexsup.c:208
msgid "Set architecture"
msgstr ""
-#: lexsup.c:201 lexsup.c:422
+#: lexsup.c:210 lexsup.c:447
msgid "TARGET"
msgstr ""
-#: lexsup.c:201
+#: lexsup.c:210
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
+#: lexsup.c:213 lexsup.c:262 lexsup.c:274 lexsup.c:287 lexsup.c:289
+#: lexsup.c:402 lexsup.c:459 lexsup.c:516 lexsup.c:528
msgid "FILE"
msgstr ""
-#: lexsup.c:204
+#: lexsup.c:213
msgid "Read MRI format linker script"
msgstr ""
-#: lexsup.c:206
+#: lexsup.c:215
msgid "Force common symbols to be defined"
msgstr ""
-#: lexsup.c:210 lexsup.c:476 lexsup.c:478 lexsup.c:480
+#: lexsup.c:219 lexsup.c:501 lexsup.c:503 lexsup.c:505
msgid "ADDRESS"
msgstr ""
-#: lexsup.c:210
+#: lexsup.c:219
msgid "Set start address"
msgstr ""
-#: lexsup.c:212
+#: lexsup.c:221
msgid "Export all dynamic symbols"
msgstr ""
-#: lexsup.c:214
+#: lexsup.c:223
msgid "Link big-endian objects"
msgstr ""
-#: lexsup.c:216
+#: lexsup.c:225
msgid "Link little-endian objects"
msgstr ""
-#: lexsup.c:218 lexsup.c:221
+#: lexsup.c:227 lexsup.c:230
msgid "SHLIB"
msgstr ""
-#: lexsup.c:218
+#: lexsup.c:227
msgid "Auxiliary filter for shared object symbol table"
msgstr ""
-#: lexsup.c:221
+#: lexsup.c:230
msgid "Filter for shared object symbol table"
msgstr ""
-#: lexsup.c:224
+#: lexsup.c:233
msgid "Ignored"
msgstr ""
-#: lexsup.c:226
+#: lexsup.c:235
msgid "SIZE"
msgstr ""
-#: lexsup.c:226
+#: lexsup.c:235
msgid "Small data size (if no size, same as --shared)"
msgstr ""
-#: lexsup.c:229
+#: lexsup.c:238
msgid "FILENAME"
msgstr ""
-#: lexsup.c:229
+#: lexsup.c:238
msgid "Set internal name of shared library"
msgstr ""
-#: lexsup.c:231
+#: lexsup.c:240
msgid "PROGRAM"
msgstr ""
-#: lexsup.c:231
+#: lexsup.c:240
msgid "Set PROGRAM as the dynamic linker to use"
msgstr ""
-#: lexsup.c:234
+#: lexsup.c:243
msgid "LIBNAME"
msgstr ""
-#: lexsup.c:234
+#: lexsup.c:243
msgid "Search for library LIBNAME"
msgstr ""
-#: lexsup.c:236
+#: lexsup.c:245
msgid "DIRECTORY"
msgstr ""
-#: lexsup.c:236
+#: lexsup.c:245
msgid "Add DIRECTORY to library search path"
msgstr ""
-#: lexsup.c:239
+#: lexsup.c:248
msgid "Override the default sysroot location"
msgstr ""
-#: lexsup.c:241
+#: lexsup.c:250
msgid "EMULATION"
msgstr ""
-#: lexsup.c:241
+#: lexsup.c:250
msgid "Set emulation"
msgstr ""
-#: lexsup.c:243
+#: lexsup.c:252
msgid "Print map file on standard output"
msgstr ""
-#: lexsup.c:245
+#: lexsup.c:254
msgid "Do not page align data"
msgstr ""
-#: lexsup.c:247
+#: lexsup.c:256
msgid "Do not page align data, do not make text readonly"
msgstr ""
-#: lexsup.c:250
+#: lexsup.c:259
msgid "Page align data, make text readonly"
msgstr ""
-#: lexsup.c:253
+#: lexsup.c:262
msgid "Set output file name"
msgstr ""
-#: lexsup.c:255
+#: lexsup.c:264
msgid "Optimize output file"
msgstr ""
-#: lexsup.c:257
+#: lexsup.c:266
msgid "Ignored for SVR4 compatibility"
msgstr ""
-#: lexsup.c:261
+#: lexsup.c:270
msgid "Generate relocatable output"
msgstr ""
-#: lexsup.c:265
+#: lexsup.c:274
msgid "Just link symbols (if directory, same as --rpath)"
msgstr ""
-#: lexsup.c:268
+#: lexsup.c:277
msgid "Strip all symbols"
msgstr ""
-#: lexsup.c:270
+#: lexsup.c:279
msgid "Strip debugging symbols"
msgstr ""
-#: lexsup.c:272
+#: lexsup.c:281
msgid "Strip symbols in discarded sections"
msgstr ""
-#: lexsup.c:274
+#: lexsup.c:283
msgid "Do not strip symbols in discarded sections"
msgstr ""
-#: lexsup.c:276
+#: lexsup.c:285
msgid "Trace file opens"
msgstr ""
-#: lexsup.c:278
+#: lexsup.c:287
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
+#: lexsup.c:289
+msgid "Read default linker script"
+msgstr ""
+
+#: lexsup.c:293 lexsup.c:311 lexsup.c:379 lexsup.c:400 lexsup.c:494
+#: lexsup.c:519 lexsup.c:554
msgid "SYMBOL"
msgstr ""
-#: lexsup.c:280
+#: lexsup.c:293
msgid "Start with undefined reference to SYMBOL"
msgstr ""
-#: lexsup.c:283
+#: lexsup.c:296
msgid "[=SECTION]"
msgstr ""
-#: lexsup.c:284
+#: lexsup.c:297
msgid "Don't merge input [SECTION | orphan] sections"
msgstr ""
-#: lexsup.c:286
+#: lexsup.c:299
msgid "Build global constructor/destructor tables"
msgstr ""
-#: lexsup.c:288
+#: lexsup.c:301
msgid "Print version information"
msgstr ""
-#: lexsup.c:290
+#: lexsup.c:303
msgid "Print version and emulation information"
msgstr ""
-#: lexsup.c:292
+#: lexsup.c:305
msgid "Discard all local symbols"
msgstr ""
-#: lexsup.c:294
+#: lexsup.c:307
msgid "Discard temporary local symbols (default)"
msgstr ""
-#: lexsup.c:296
+#: lexsup.c:309
msgid "Don't discard any local symbols"
msgstr ""
-#: lexsup.c:298
+#: lexsup.c:311
msgid "Trace mentions of SYMBOL"
msgstr ""
-#: lexsup.c:300 lexsup.c:436 lexsup.c:438
+#: lexsup.c:313 lexsup.c:461 lexsup.c:463
msgid "PATH"
msgstr ""
-#: lexsup.c:300
+#: lexsup.c:313
msgid "Default search path for Solaris compatibility"
msgstr ""
-#: lexsup.c:303
+#: lexsup.c:316
msgid "Start a group"
msgstr ""
-#: lexsup.c:305
+#: lexsup.c:318
msgid "End a group"
msgstr ""
-#: lexsup.c:309
+#: lexsup.c:322
msgid "Accept input files whose architecture cannot be determined"
msgstr ""
-#: lexsup.c:313
+#: lexsup.c:326
msgid "Reject input files whose architecture is unknown"
msgstr ""
-#: lexsup.c:316
+#: lexsup.c:329
msgid ""
"Set DT_NEEDED tags for DT_NEEDED entries in\n"
"\t\t\t\tfollowing dynamic libs"
msgstr ""
-#: lexsup.c:319
+#: lexsup.c:332
msgid ""
"Do not set DT_NEEDED tags for DT_NEEDED entries\n"
"\t\t\t\tin following dynamic libs"
msgstr ""
-#: lexsup.c:322
+#: lexsup.c:335
msgid "Only set DT_NEEDED for following dynamic libs if used"
msgstr ""
-#: lexsup.c:325
+#: lexsup.c:338
msgid "Always set DT_NEEDED for following dynamic libs"
msgstr ""
-#: lexsup.c:328
+#: lexsup.c:341
msgid "Ignored for SunOS compatibility"
msgstr ""
-#: lexsup.c:330
+#: lexsup.c:343
msgid "Link against shared libraries"
msgstr ""
-#: lexsup.c:336
+#: lexsup.c:349
msgid "Do not link against shared libraries"
msgstr ""
-#: lexsup.c:344
+#: lexsup.c:357
msgid "Bind global references locally"
msgstr ""
-#: lexsup.c:346
+#: lexsup.c:359
+msgid "Bind global function references locally"
+msgstr ""
+
+#: lexsup.c:361
msgid "Check section addresses for overlaps (default)"
msgstr ""
-#: lexsup.c:349
+#: lexsup.c:364
msgid "Do not check section addresses for overlaps"
msgstr ""
-#: lexsup.c:352
+#: lexsup.c:367
msgid "Output cross reference table"
msgstr ""
-#: lexsup.c:354
+#: lexsup.c:369
msgid "SYMBOL=EXPRESSION"
msgstr ""
-#: lexsup.c:354
+#: lexsup.c:369
msgid "Define a symbol"
msgstr ""
-#: lexsup.c:356
+#: lexsup.c:371
msgid "[=STYLE]"
msgstr ""
-#: lexsup.c:356
+#: lexsup.c:371
msgid "Demangle symbol names [using STYLE]"
msgstr ""
-#: lexsup.c:359
+#: lexsup.c:374
msgid "Generate embedded relocs"
msgstr ""
-#: lexsup.c:361
+#: lexsup.c:376
msgid "Treat warnings as errors"
msgstr ""
-#: lexsup.c:364
+#: lexsup.c:379
msgid "Call SYMBOL at unload-time"
msgstr ""
-#: lexsup.c:366
+#: lexsup.c:381
msgid "Force generation of file with .exe suffix"
msgstr ""
-#: lexsup.c:368
+#: lexsup.c:383
msgid "Remove unused sections (on some targets)"
msgstr ""
-#: lexsup.c:371
+#: lexsup.c:386
msgid "Don't remove unused sections (default)"
msgstr ""
-#: lexsup.c:374
+#: lexsup.c:389
+msgid "List removed unused sections on stderr"
+msgstr ""
+
+#: lexsup.c:392
+msgid "Do not list removed unused sections"
+msgstr ""
+
+#: lexsup.c:395
msgid "Set default hash table size close to <NUMBER>"
msgstr ""
-#: lexsup.c:377
+#: lexsup.c:398
msgid "Print option help"
msgstr ""
-#: lexsup.c:379
+#: lexsup.c:400
msgid "Call SYMBOL at load-time"
msgstr ""
-#: lexsup.c:381
+#: lexsup.c:402
msgid "Write a map file"
msgstr ""
-#: lexsup.c:383
+#: lexsup.c:404
msgid "Do not define Common storage"
msgstr ""
-#: lexsup.c:385
+#: lexsup.c:406
msgid "Do not demangle symbol names"
msgstr ""
-#: lexsup.c:387
+#: lexsup.c:408
msgid "Use less memory and more disk I/O"
msgstr ""
-#: lexsup.c:389
+#: lexsup.c:410
msgid "Do not allow unresolved references in object files"
msgstr ""
-#: lexsup.c:392
+#: lexsup.c:413
msgid "Allow unresolved references in shared libaries"
msgstr ""
-#: lexsup.c:396
+#: lexsup.c:417
msgid "Do not allow unresolved references in shared libs"
msgstr ""
-#: lexsup.c:400
+#: lexsup.c:421
msgid "Allow multiple definitions"
msgstr ""
-#: lexsup.c:402
+#: lexsup.c:423
msgid "Disallow undefined version"
msgstr ""
-#: lexsup.c:404
+#: lexsup.c:425
msgid "Create default symbol version"
msgstr ""
-#: lexsup.c:407
+#: lexsup.c:428
msgid "Create default symbol version for imported symbols"
msgstr ""
-#: lexsup.c:410
+#: lexsup.c:431
msgid "Don't warn about mismatched input files"
msgstr ""
-#: lexsup.c:412
+#: lexsup.c:434
+msgid "Don't warn on finding an incompatible library"
+msgstr ""
+
+#: lexsup.c:437
msgid "Turn off --whole-archive"
msgstr ""
-#: lexsup.c:414
+#: lexsup.c:439
msgid "Create an output file even if errors occur"
msgstr ""
-#: lexsup.c:419
+#: lexsup.c:444
msgid ""
"Only use library directories specified on\n"
"\t\t\t\tthe command line"
msgstr ""
-#: lexsup.c:422
+#: lexsup.c:447
msgid "Specify target of output file"
msgstr ""
-#: lexsup.c:425
+#: lexsup.c:450
msgid "Ignored for Linux compatibility"
msgstr ""
-#: lexsup.c:428
+#: lexsup.c:453
msgid "Reduce memory overheads, possibly taking much longer"
msgstr ""
-#: lexsup.c:431
+#: lexsup.c:456
msgid "Relax branches on certain targets"
msgstr ""
-#: lexsup.c:434
+#: lexsup.c:459
msgid "Keep only symbols listed in FILE"
msgstr ""
-#: lexsup.c:436
+#: lexsup.c:461
msgid "Set runtime shared library search path"
msgstr ""
-#: lexsup.c:438
+#: lexsup.c:463
msgid "Set link time shared library search path"
msgstr ""
-#: lexsup.c:441
+#: lexsup.c:466
msgid "Create a shared library"
msgstr ""
-#: lexsup.c:445
+#: lexsup.c:470
msgid "Create a position independent executable"
msgstr ""
-#: lexsup.c:449
+#: lexsup.c:474
msgid "Sort common symbols by size"
msgstr ""
-#: lexsup.c:453
+#: lexsup.c:478
msgid "name|alignment"
msgstr ""
-#: lexsup.c:454
+#: lexsup.c:479
msgid "Sort sections by name or maximum alignment"
msgstr ""
-#: lexsup.c:456
+#: lexsup.c:481
msgid "COUNT"
msgstr ""
-#: lexsup.c:456
+#: lexsup.c:481
msgid "How many tags to reserve in .dynamic section"
msgstr ""
-#: lexsup.c:459
+#: lexsup.c:484
msgid "[=SIZE]"
msgstr ""
-#: lexsup.c:459
+#: lexsup.c:484
msgid "Split output sections every SIZE octets"
msgstr ""
-#: lexsup.c:462
+#: lexsup.c:487
msgid "[=COUNT]"
msgstr ""
-#: lexsup.c:462
+#: lexsup.c:487
msgid "Split output sections every COUNT relocs"
msgstr ""
-#: lexsup.c:465
+#: lexsup.c:490
msgid "Print memory usage statistics"
msgstr ""
-#: lexsup.c:467
+#: lexsup.c:492
msgid "Display target specific options"
msgstr ""
-#: lexsup.c:469
+#: lexsup.c:494
msgid "Do task level linking"
msgstr ""
-#: lexsup.c:471
+#: lexsup.c:496
msgid "Use same format as native linker"
msgstr ""
-#: lexsup.c:473
+#: lexsup.c:498
msgid "SECTION=ADDRESS"
msgstr ""
-#: lexsup.c:473
+#: lexsup.c:498
msgid "Set address of named section"
msgstr ""
-#: lexsup.c:476
+#: lexsup.c:501
msgid "Set address of .bss section"
msgstr ""
-#: lexsup.c:478
+#: lexsup.c:503
msgid "Set address of .data section"
msgstr ""
-#: lexsup.c:480
+#: lexsup.c:505
msgid "Set address of .text section"
msgstr ""
-#: lexsup.c:483
+#: lexsup.c:508
msgid ""
"How to handle unresolved symbols. <method> is:\n"
"\t\t\t\tignore-all, report-all, ignore-in-object-files,\n"
"\t\t\t\tignore-in-shared-libs"
msgstr ""
-#: lexsup.c:487
+#: lexsup.c:512
msgid "Output lots of information during link"
msgstr ""
-#: lexsup.c:491
+#: lexsup.c:516
msgid "Read version information script"
msgstr ""
-#: lexsup.c:494
+#: lexsup.c:519
msgid ""
"Take export symbols list from .exports, using\n"
"\t\t\t\tSYMBOL as the version."
msgstr ""
-#: lexsup.c:497
+#: lexsup.c:522
+msgid "Add data symbols to dynamic list"
+msgstr ""
+
+#: lexsup.c:524
+msgid "Use C++ operator new/delete dynamic list"
+msgstr ""
+
+#: lexsup.c:526
+msgid "Use C++ typeinfo dynamic list"
+msgstr ""
+
+#: lexsup.c:528
+msgid "Read dynamic list"
+msgstr ""
+
+#: lexsup.c:530
msgid "Warn about duplicate common symbols"
msgstr ""
-#: lexsup.c:499
+#: lexsup.c:532
msgid "Warn if global constructors/destructors are seen"
msgstr ""
-#: lexsup.c:502
+#: lexsup.c:535
msgid "Warn if the multiple GP values are used"
msgstr ""
-#: lexsup.c:504
+#: lexsup.c:537
msgid "Warn only once per undefined symbol"
msgstr ""
-#: lexsup.c:506
+#: lexsup.c:539
msgid "Warn if start of section changes due to alignment"
msgstr ""
-#: lexsup.c:509
+#: lexsup.c:542
msgid "Warn if shared object has DT_TEXTREL"
msgstr ""
-#: lexsup.c:513
+#: lexsup.c:546
msgid "Report unresolved symbols as warnings"
msgstr ""
-#: lexsup.c:516
+#: lexsup.c:549
msgid "Report unresolved symbols as errors"
msgstr ""
-#: lexsup.c:518
+#: lexsup.c:551
msgid "Include all objects from following archives"
msgstr ""
-#: lexsup.c:521
+#: lexsup.c:554
msgid "Use wrapper functions for SYMBOL"
msgstr ""
-#: lexsup.c:668
+#: lexsup.c:701
msgid "%P: unrecognized option '%s'\n"
msgstr ""
-#: lexsup.c:670
+#: lexsup.c:705
msgid "%P%F: use the --help option for usage information\n"
msgstr ""
-#: lexsup.c:688
+#: lexsup.c:723
msgid "%P%F: unrecognized -a option `%s'\n"
msgstr ""
-#: lexsup.c:701
+#: lexsup.c:736
msgid "%P%F: unrecognized -assert option `%s'\n"
msgstr ""
-#: lexsup.c:744
+#: lexsup.c:779
msgid "%F%P: unknown demangling style `%s'"
msgstr ""
-#: lexsup.c:806
+#: lexsup.c:841
msgid "%P%F: invalid number `%s'\n"
msgstr ""
-#: lexsup.c:898
+#: lexsup.c:939
msgid "%P%F: bad --unresolved-symbols option: %s\n"
msgstr ""
@@ -1750,92 +1811,92 @@ msgstr ""
#. 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
+#: lexsup.c:1013
msgid "%P%F: bad -rpath option\n"
msgstr ""
-#: lexsup.c:1081
+#: lexsup.c:1124
msgid "%P%F: -shared not supported\n"
msgstr ""
-#: lexsup.c:1090
+#: lexsup.c:1133
msgid "%P%F: -pie not supported\n"
msgstr ""
-#: lexsup.c:1100
+#: lexsup.c:1143
msgid "name"
msgstr ""
-#: lexsup.c:1102
+#: lexsup.c:1145
msgid "alignment"
msgstr ""
-#: lexsup.c:1105
+#: lexsup.c:1148
msgid "%P%F: invalid section sorting option: %s\n"
msgstr ""
-#: lexsup.c:1131
+#: lexsup.c:1180
msgid "%P%F: invalid argument to option \"--section-start\"\n"
msgstr ""
-#: lexsup.c:1138
+#: lexsup.c:1187
msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
msgstr ""
-#: lexsup.c:1312
+#: lexsup.c:1398
msgid "%P%F: may not nest groups (--help for usage)\n"
msgstr ""
-#: lexsup.c:1319
+#: lexsup.c:1405
msgid "%P%F: group ended before it began (--help for usage)\n"
msgstr ""
-#: lexsup.c:1347
+#: lexsup.c:1433
msgid "%P%X: --hash-size needs a numeric argument\n"
msgstr ""
-#: lexsup.c:1398 lexsup.c:1411
+#: lexsup.c:1484 lexsup.c:1497
msgid "%P%F: invalid hex number `%s'\n"
msgstr ""
-#: lexsup.c:1447
+#: lexsup.c:1533
#, c-format
msgid "Usage: %s [options] file...\n"
msgstr ""
-#: lexsup.c:1449
+#: lexsup.c:1535
#, c-format
msgid "Options:\n"
msgstr ""
-#: lexsup.c:1527
+#: lexsup.c:1613
#, c-format
msgid " @FILE"
msgstr ""
-#: lexsup.c:1530
+#: lexsup.c:1616
#, 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
+#: lexsup.c:1621
#, c-format
msgid "%s: supported targets:"
msgstr ""
-#: lexsup.c:1543
+#: lexsup.c:1629
#, c-format
msgid "%s: supported emulations: "
msgstr ""
-#: lexsup.c:1548
+#: lexsup.c:1634
#, c-format
msgid "%s: emulation specific options:\n"
msgstr ""
-#: lexsup.c:1552
+#: lexsup.c:1639
#, c-format
msgid "Report bugs to %s\n"
msgstr ""
@@ -1844,73 +1905,73 @@ msgstr ""
msgid "%P%F: unknown format type %s\n"
msgstr ""
-#: pe-dll.c:303
+#: pe-dll.c:367
#, c-format
msgid "%XUnsupported PEI architecture: %s\n"
msgstr ""
-#: pe-dll.c:604
+#: pe-dll.c:673
#, c-format
msgid "%XCannot export %s: invalid export name\n"
msgstr ""
-#: pe-dll.c:657
+#: pe-dll.c:729
#, c-format
msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
msgstr ""
-#: pe-dll.c:664
+#: pe-dll.c:736
#, c-format
msgid "Warning, duplicate EXPORT: %s\n"
msgstr ""
-#: pe-dll.c:751
+#: pe-dll.c:823
#, c-format
msgid "%XCannot export %s: symbol not defined\n"
msgstr ""
-#: pe-dll.c:757
+#: pe-dll.c:829
#, c-format
msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
msgstr ""
-#: pe-dll.c:764
+#: pe-dll.c:836
#, c-format
msgid "%XCannot export %s: symbol not found\n"
msgstr ""
-#: pe-dll.c:877
+#: pe-dll.c:949
#, c-format
msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
msgstr ""
-#: pe-dll.c:1219
+#: pe-dll.c:1297
#, c-format
msgid "%XError: %d-bit reloc in dll\n"
msgstr ""
-#: pe-dll.c:1347
+#: pe-dll.c:1425
#, c-format
msgid "%s: Can't open output def file %s\n"
msgstr ""
-#: pe-dll.c:1490
+#: pe-dll.c:1568
#, c-format
msgid "; no contents available\n"
msgstr ""
-#: pe-dll.c:2252
+#: pe-dll.c:2364
msgid ""
"%C: variable '%T' can't be auto-imported. Please read the documentation for "
"ld's --enable-auto-import for details.\n"
msgstr ""
-#: pe-dll.c:2282
+#: pe-dll.c:2394
#, c-format
msgid "%XCan't open .lib file: %s\n"
msgstr ""
-#: pe-dll.c:2287
+#: pe-dll.c:2399
#, c-format
msgid "Creating library file: %s\n"
msgstr ""
diff --git a/ld/po/sv.gmo b/ld/po/sv.gmo
deleted file mode 100644
index f7038a8a951b..000000000000
--- a/ld/po/sv.gmo
+++ /dev/null
Binary files differ
diff --git a/ld/po/tr.gmo b/ld/po/tr.gmo
deleted file mode 100644
index 96d567be4aac..000000000000
--- a/ld/po/tr.gmo
+++ /dev/null
Binary files differ
diff --git a/ld/po/vi.gmo b/ld/po/vi.gmo
deleted file mode 100644
index da94aee42221..000000000000
--- a/ld/po/vi.gmo
+++ /dev/null
Binary files differ
diff --git a/ld/po/zh_CN.gmo b/ld/po/zh_CN.gmo
deleted file mode 100644
index 3f41d5787c2d..000000000000
--- a/ld/po/zh_CN.gmo
+++ /dev/null
Binary files differ
diff --git a/ld/po/zh_TW.po b/ld/po/zh_TW.po
new file mode 100644
index 000000000000..f60e11a52326
--- /dev/null
+++ b/ld/po/zh_TW.po
@@ -0,0 +1,1913 @@
+# Traditional Chinese translation for ld.
+# Copyright (C) 2005, 06 Free Software Foundation, Inc.
+# This file is distributed under the same license as the ld package.
+# Meng Jie <zuxyhere@eastday.com>, 2005.
+# Wei-Lun Chao <chaoweilun@pcmail.com.tw>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ld 2.16.93\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-03-25 18:36+0100\n"
+"PO-Revision-Date: 2006-06-20 15:22+0800\n"
+"Last-Translator: Wei-Lun Chao <chaoweilun@pcmail.com.tw>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: emultempl/armcoff.em:72
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code 支æ´èˆ‡èˆŠå¼ç¨‹å¼ç¢¼çš„交互作用\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry =<sym> 設定進入點為縮圖符號 <sym>\n"
+
+#: emultempl/armcoff.em:121
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "處ç†æª”案 %s 時é‡åˆ°éŒ¯èª¤"
+
+#: emultempl/armcoff.em:190 emultempl/pe.em:1460
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: 警告: '--thumb-entry %s' æœƒè“‹éŽ '-e %s'\n"
+
+#: emultempl/armcoff.em:195 emultempl/pe.em:1465
+msgid "%P: warning: connot find thumb start symbol %s\n"
+msgstr "%P: 警告: 無法找到縮圖開始符號 %s\n"
+
+#: emultempl/pe.em:304
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr " --base_file <基å€æª”案> 為å¯é‡å®šä½çš„ DLL 產生一個基å€æª”案\n"
+
+#: emultempl/pe.em:305
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr " --dll 設定 DLL çš„é è¨­æ˜ åƒåŸºåº•ä½å€\n"
+
+#: emultempl/pe.em:306
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <大å°> 設定檔案å°é½Šé‚Šç•Œ\n"
+
+#: emultempl/pe.em:307
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <大å°> 設定堆ç©çš„åˆå§‹å¤§å°\n"
+
+#: emultempl/pe.em:308
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr " --image-base <ä½å€> 設定å¯åŸ·è¡Œæª”案的起始ä½å€\n"
+
+#: emultempl/pe.em:309
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr " --major-image-version <號碼> 設定å¯åŸ·è¡Œæª”案的版本號碼\n"
+
+#: emultempl/pe.em:310
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr " --major-os-version <號碼> 設定å°ä½œæ¥­ç³»çµ±ç‰ˆæœ¬çš„最低è¦æ±‚\n"
+
+#: emultempl/pe.em:311
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr " --major-subsystem-version <號碼> 設定å°ä½œæ¥­ç³»çµ±å­ç³»çµ±ç‰ˆæœ¬çš„最低è¦æ±‚\n"
+
+#: emultempl/pe.em:312
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr " --minor-image-version <號碼> 設定å¯åŸ·è¡Œæª”案的修訂版本號\n"
+
+#: emultempl/pe.em:313
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr " --minor-os-version <號碼> 設定å°ä½œæ¥­ç³»çµ±ä¿®è¨‚版本的最低è¦æ±‚\n"
+
+#: emultempl/pe.em:314
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr " --minor-subsystem-version <號碼> 設定å°ä½œæ¥­ç³»çµ±å­ç³»çµ±ä¿®è¨‚版本的最低è¦æ±‚\n"
+
+#: emultempl/pe.em:315
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <大å°> 設定å€æ®µçš„å°é½Šé‚Šç•Œ\n"
+
+#: emultempl/pe.em:316
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <大å°> 設定åˆå§‹å †ç–Šçš„大å°\n"
+
+#: emultempl/pe.em:317
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsystem <å稱>[:<版本>] 設定需è¦çš„作業系統å­ç³»çµ±[& 版本號]\n"
+
+#: emultempl/pe.em:318
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code 支æ´èˆ‡èˆŠå¼ç¨‹å¼ç¢¼çš„交互作用\n"
+
+#: emultempl/pe.em:319
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr " --thumb-entry=<符號> 設定進入點到是縮圖<符號>\n"
+
+#: emultempl/pe.em:321
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias 匯出帶與ä¸å¸¶ @nn 的符號\n"
+
+#: emultempl/pe.em:322
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup ä¸å°‡ _sym éˆçµè‡³ _sym@nn\n"
+
+#: emultempl/pe.em:323
+#, c-format
+msgid " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr " --enable-stdcall-fixup å°‡ _sym éˆçµè‡³ _sym@nn 而ä¸çµ¦äºˆè­¦å‘Š\n"
+
+#: emultempl/pe.em:324
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols 符號,符號,… 將一些符號排除在自動匯出以外\n"
+
+#: emultempl/pe.em:325
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs 函å¼åº«,函å¼åº«,… 將一些函å¼åº«æŽ’除在自動匯出以外\n"
+
+#: emultempl/pe.em:326
+#, c-format
+msgid " --export-all-symbols Automatically export all globals to DLL\n"
+msgstr " --export-all-symbols 自動將所有全域變數匯出至 DLL\n"
+
+#: emultempl/pe.em:327
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at 從匯出符號中移去 @nn\n"
+
+#: emultempl/pe.em:328
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <檔案> 產生匯入函å¼åº«\n"
+
+#: emultempl/pe.em:329
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <檔案> 為建立的 DLL 產生一個 .DEF 檔案\n"
+
+#: emultempl/pe.em:330
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports å°é‡è¤‡åŒ¯å‡ºçµ¦äºˆè­¦å‘Šã€‚\n"
+
+#: emultempl/pe.em:331
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib 產生後å‘相容的匯入函å¼åº«ï¼›\n"
+" åŒæ™‚產生 __imp_<符號>。\n"
+
+#: emultempl/pe.em:333
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for DLLs\n"
+" unless user specifies one\n"
+msgstr " --enable-auto-image-base 除éžä½¿ç”¨è€…指定å¦å‰‡è‡ªå‹•é¸æ“‡ DLL 的映åƒåŸºåº•ä½å€\n"
+
+#: emultempl/pe.em:335
+#, c-format
+msgid " --disable-auto-image-base Do not auto-choose image base. (default)\n"
+msgstr " --disable-auto-image-base ä¸è‡ªå‹•é¸æ“‡æ˜ åƒåŸºåº•ä½å€ã€‚(é è¨­)\n"
+
+#: emultempl/pe.em:336
+#, c-format
+msgid ""
+" --dll-search-prefix=<string> When linking dynamically to a dll without\n"
+" an importlib, use <string><basename>.dll\n"
+" in preference to lib<basename>.dll \n"
+msgstr ""
+" --dll-search-prefix=<字串> å‹•æ…‹éˆçµè‡³ DLL 而缺少匯入函å¼åº«æ™‚,使用\n"
+" <字串><基本å稱>.dll 而ä¸æ˜¯ lib<基本å稱>.dll\n"
+
+#: emultempl/pe.em:339
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+" --enable-auto-import 為實作 DATA åƒç…§ï¼Œä½¿ç”¨è¤‡é›œçš„æ–¹å¼å°‡ _sym\n"
+" éˆçµè‡³ __imp_sym\n"
+
+#: emultempl/pe.em:341
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-import ä¸ç‚º DLL 自動匯入 DATA é …\n"
+
+#: emultempl/pe.em:342
+#, c-format
+msgid ""
+" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n"
+" adding pseudo-relocations resolved at\n"
+" runtime.\n"
+msgstr ""
+" --enable-runtime-pseudo-reloc 利用在執行階段加入已解æžçš„å‡æ€§é‡å®šå€\n"
+" 來åšç‚ºè‡ªå‹•åŒ¯å…¥é™åˆ¶çš„解決方法。\n"
+
+#: emultempl/pe.em:345
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for\n"
+" auto-imported DATA.\n"
+msgstr " --disable-runtime-pseudo-reloc ä¸åŠ å…¥ç”¨æ–¼è‡ªå‹•åŒ¯å…¥è³‡æ–™çš„執行階段å‡æ€§é‡å®šå€ã€‚\n"
+
+#: emultempl/pe.em:347
+#, c-format
+msgid ""
+" --enable-extra-pe-debug Enable verbose debug output when building\n"
+" or linking to DLLs (esp. auto-import)\n"
+msgstr ""
+" --enable-extra-pe-debug 當產生或éˆçµè‡³ DLL 時(尤其當自動匯入時)啟用\n"
+" 詳細的除錯輸出\n"
+
+#: emultempl/pe.em:350
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr " --large-address-aware å¯åŸ·è¡Œæª”案支æ´å¤§æ–¼ 2 GB 的虛擬記憶體ä½å€\n"
+
+#: emultempl/pe.em:417
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr "%P: 警告:-subsystem é¸é …中出ç¾ä¸ç•¶çš„版本號碼\n"
+
+#: emultempl/pe.em:448
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: 無效的å­ç³»çµ±åž‹æ…‹ %s\n"
+
+#: emultempl/pe.em:487
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr "%P%F: 無效的å六進ä½æ•¸å­—用於 PE åƒæ•¸ '%s'\n"
+
+#: emultempl/pe.em:504
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr "%P%F: 怪異的å六進ä½è³‡è¨Šç”¨æ–¼ PE åƒæ•¸ '%s'\n"
+
+#: emultempl/pe.em:521
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr "%s:無法開啟基å€æª”案 %s\n"
+
+#: emultempl/pe.em:737
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: 警告,檔案å°é½Š > å€æ®µå°é½Šã€‚\n"
+
+#: emultempl/pe.em:824 emultempl/pe.em:851
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "警告:藉由éˆçµåˆ° %2$s 以解決 %1$s\n"
+
+#: emultempl/pe.em:829 emultempl/pe.em:856
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "使用 --enable-stdcall-fixup 來åœç”¨é€™äº›è­¦å‘Š\n"
+
+#: emultempl/pe.em:830 emultempl/pe.em:857
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "使用 --disable-stdcall-fixup 來åœç”¨é€™äº›ä¿®æ­£\n"
+
+#: emultempl/pe.em:876
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: 無法å–å¾—å€æ®µå…§å®¹ - 自動匯入異常\n"
+
+#: emultempl/pe.em:913
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "資訊:藉由éˆçµåˆ° %2$s 以解決 %1$s (自動匯入)\n"
+
+#: emultempl/pe.em:986
+msgid "%F%P: PE operations on non PE file.\n"
+msgstr "%F%P: åœ¨éž PE 檔案上執行 PE 作業。\n"
+
+#: emultempl/pe.em:1261
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "處ç†æª”案 %s 時發生錯誤\n"
+
+#: emultempl/pe.em:1284
+#, c-format
+msgid "Errors encountered processing file %s for interworking"
+msgstr "處ç†æª”案 %s 交互作用時發生錯誤"
+
+#: emultempl/pe.em:1345 ldexp.c:522 ldlang.c:2946 ldlang.c:5800 ldlang.c:5831
+#: ldmain.c:1167
+msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_link_hash_lookup 失敗:%E\n"
+
+#: ldcref.c:154
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: cref 表格的 bfd_hash_table_init 失敗:%E\n"
+
+#: ldcref.c:160
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: cref_hash_lookup 失敗:%E\n"
+
+#: ldcref.c:226
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"交å‰åƒç…§è¡¨\n"
+"\n"
+
+#: ldcref.c:227
+msgid "Symbol"
+msgstr "符號"
+
+#: ldcref.c:235
+#, c-format
+msgid "File\n"
+msgstr "檔案\n"
+
+#: ldcref.c:239
+#, c-format
+msgid "No symbols\n"
+msgstr "無符號\n"
+
+#: ldcref.c:360 ldcref.c:482
+msgid "%B%F: could not read symbols; %E\n"
+msgstr "%B%F: 無法讀å–符號; %E\n"
+
+#: ldcref.c:364 ldcref.c:486 ldmain.c:1232 ldmain.c:1236
+msgid "%B%F: could not read symbols: %E\n"
+msgstr "%B%F: 無法讀å–符號: %E\n"
+
+#: ldcref.c:415
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: 符號「%Tã€å¾žä¸»è¦é›œæ¹Šè¡¨éºå¤±\n"
+
+#: ldcref.c:557 ldcref.c:564 ldmain.c:1279 ldmain.c:1286
+msgid "%B%F: could not read relocs: %E\n"
+msgstr "%B%F: 無法讀å–é‡å®šå€ï¼š%E\n"
+
+#. We found a reloc for the symbol. The symbol is defined
+#. in OUTSECNAME. This reloc is from a section which is
+#. mapped into a section from which references to OUTSECNAME
+#. are prohibited. We must report an error.
+#: ldcref.c:591
+msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
+msgstr "%X%C: 在 %3$s 中從 %1$s 到 `%2$T' ç¦æ­¢çš„交å‰åƒè€ƒ\n"
+
+#: ldctor.c:84
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: 在設定 %s 中所使用的ä¸åŒé‡å®šå€\n"
+
+#: ldctor.c:102
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: ä¸åŒçš„目的檔案格å¼æ’°å¯«è¨­å®š %s\n"
+
+#: ldctor.c:281 ldctor.c:295
+msgid "%P%X: %s does not support reloc %s for set %s\n"
+msgstr "%P%X: %s ä¸æ”¯æ´é‡å®š %s 用於設定 %s\n"
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%P%X: ä¸æ”¯æ´å¤§å° %d 用於設定 %s\n"
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"設定 符號\n"
+"\n"
+
+#: ldemul.c:236
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S SYSLIB 忽略\n"
+
+#: ldemul.c:242
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S HLL 忽略\n"
+
+#: ldemul.c:262
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: 無法辨èªçš„模擬模å¼ï¼š %s\n"
+
+#: ldemul.c:263
+msgid "Supported emulations: "
+msgstr "支æ´çš„模擬:"
+
+#: ldemul.c:305
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " 無特定é¸é …的模擬。\n"
+
+#: ldexp.c:338
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S å°é›¶å–模\n"
+
+#: ldexp.c:346
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S 被零除\n"
+
+#: ldexp.c:536
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S:在é‹ç®—å¼ä¸­åƒç…§åˆ°ç„¡æ³•è§£æžçš„符號「%sã€\n"
+
+#: ldexp.c:547
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S:在é‹ç®—å¼ä¸­åƒç…§äº†æœªå®šç¾©çš„符號「%sã€\n"
+
+#: ldexp.c:608 ldexp.c:621
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S:在é‹ç®—å¼ä¸­åƒç…§äº†æœªå®šç¾©çš„記憶體å€åŸŸã€Œ%sã€\n"
+
+#: ldexp.c:683
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "%F%S 無法æ供指派到ä½ç½®è¨ˆæ•¸å™¨\n"
+
+#: ldexp.c:697
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S 無效的指派ä½ç½®è¨ˆæ•¸å™¨\n"
+
+#: ldexp.c:700
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S 指派到無效的å€æ®µå¤–å´ä½ç½®è¨ˆæ•¸å™¨\n"
+
+#: ldexp.c:709
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr "%F%S 無法å‘後移動ä½ç½®è¨ˆæ•¸å™¨(從 %V 到 %V)\n"
+
+#: ldexp.c:748
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s:建立雜湊表失敗\n"
+
+#: ldexp.c:1000 ldexp.c:1025
+#, c-format
+msgid "%F%S nonconstant expression for %s\n"
+msgstr "%F%S éžå¸¸æ•¸é‹ç®—å¼ç”¨æ–¼ %s\n"
+
+#: ldexp.c:1082
+#, c-format
+msgid "%F%S non constant expression for %s\n"
+msgstr "%F%S éžå¸¸æ•¸é‹ç®—å¼ç”¨æ–¼ %s\n"
+
+#: ldfile.c:139
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "試圖開啟 %s 失敗\n"
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "試圖開啟 %s æˆåŠŸ\n"
+
+#: ldfile.c:147
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: 無效的 BFD 目標「%sã€\n"
+
+#: ldfile.c:255 ldfile.c:282
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: 當æœå°‹ç”¨æ–¼ %s 時跳éŽä¸ç›¸å®¹çš„ %s \n"
+
+#: ldfile.c:267
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr "%F%P: 試圖éœæ…‹éˆçµçš„動態物件「%sã€\n"
+
+#: ldfile.c:384
+msgid "%F%P: %s (%s): No such file: %E\n"
+msgstr "%F%P: %s(%s):無此檔案: %E\n"
+
+#: ldfile.c:387
+msgid "%F%P: %s: No such file: %E\n"
+msgstr "%F%P: %s: 無此檔案: %E\n"
+
+#: ldfile.c:417
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "%F%P: 無法在 %2$s 內部找到 %1$s\n"
+
+#: ldfile.c:420
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P: 無法找到 %s\n"
+
+#: ldfile.c:437 ldfile.c:453
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "無法找到命令稿檔案 %s\n"
+
+#: ldfile.c:439 ldfile.c:455
+#, c-format
+msgid "opened script file %s\n"
+msgstr "已開啟的命令稿檔案 %s\n"
+
+#: ldfile.c:499
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: 無法開啟éˆçµå™¨å‘½ä»¤ç¨¿æª”案 %s: %E\n"
+
+#: ldfile.c:546
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: 無法表述機器「%sã€\n"
+
+#: ldlang.c:940 ldlang.c:982 ldlang.c:2695
+msgid "%P%F: can not create hash table: %E\n"
+msgstr "%P%F: 無法建立雜湊表:%E\n"
+
+#: ldlang.c:1025
+msgid "%P:%S: warning: redeclaration of memory region '%s'\n"
+msgstr "%P:%S: 警告:記憶體å€åŸŸ '%s' çš„é‡æ–°å®£å‘Š\n"
+
+#: ldlang.c:1031
+msgid "%P:%S: warning: memory region %s not declared\n"
+msgstr "%P:%S: 警告:記憶體å€åŸŸ %s 未宣告\n"
+
+#: ldlang.c:1108 ldlang.c:1135
+msgid "%P%F: failed creating section `%s': %E\n"
+msgstr "%P%F: 產生å€æ®µã€Œ%sã€æ™‚失敗: %E\n"
+
+#: ldlang.c:1601
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"記憶體é…ç½®\n"
+"\n"
+
+#: ldlang.c:1603
+msgid "Name"
+msgstr "å稱"
+
+#: ldlang.c:1603
+msgid "Origin"
+msgstr "來æº"
+
+#: ldlang.c:1603
+msgid "Length"
+msgstr "長度"
+
+#: ldlang.c:1603
+msgid "Attributes"
+msgstr "屬性"
+
+#: ldlang.c:1643
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"éˆçµå™¨å‘½ä»¤ç¨¿å’Œè¨˜æ†¶é«”å°æ˜ \n"
+"\n"
+
+#: ldlang.c:1709
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F:「%sã€å€æ®µçš„éžæ³•ä½¿ç”¨\n"
+
+#: ldlang.c:1716
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: è¼¸å‡ºæ ¼å¼ %s 無法表述å為 %s çš„å€æ®µ\n"
+
+#: ldlang.c:2313
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: 檔案無法辨識:%E\n"
+
+#: ldlang.c:2314
+msgid "%B: matching formats:"
+msgstr "%B: 匹é…æ ¼å¼ï¼š"
+
+#: ldlang.c:2321
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: 檔案無法辨識:%E\n"
+
+#: ldlang.c:2385
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: æˆå“¡ %B 在歸檔中並éžç‰©ä»¶\n"
+
+#: ldlang.c:2396 ldlang.c:2410
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: 無法讀å–符號:%E\n"
+
+#: ldlang.c:2665
+msgid "%P: warning: could not find any targets that match endianness requirement\n"
+msgstr "%P: 警告:無法找到任何符åˆå°¾åºéœ€æ±‚的目標\n"
+
+#: ldlang.c:2679
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: 找ä¸åˆ°ç›®æ¨™ %s\n"
+
+#: ldlang.c:2681
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr "%P%F: 無法開啟輸出檔案 %s: %E\n"
+
+#: ldlang.c:2687
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr "%P%F:%s: 無法製作目的檔案:%E\n"
+
+#: ldlang.c:2691
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: 無法設定架構:%E\n"
+
+#: ldlang.c:2839
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_lookup 產生符號 %s 時失敗\n"
+
+#: ldlang.c:2857
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr "%P%F: bfd_hash_allocate 產生符號 %s 時失敗\n"
+
+#: ldlang.c:3288
+msgid " load address 0x%V"
+msgstr " 載入ä½å€ 0x%V"
+
+#: ldlang.c:3528
+msgid "%W (size before relaxing)\n"
+msgstr "%W (鬆開之å‰çš„大å°)\n"
+
+#: ldlang.c:3615
+#, c-format
+msgid "Address of section %s set to "
+msgstr "å€æ®µ %s çš„ä½å€è¨­å®šåˆ° "
+
+#: ldlang.c:3768
+#, c-format
+msgid "Fail with %d\n"
+msgstr "%d 時失敗\n"
+
+#: ldlang.c:4040
+msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
+msgstr "%X%P: å€æ®µ %s [%V-> %V] é‡ç–Šäº†å€æ®µ %s [%V-> %V]\n"
+
+#: ldlang.c:4065
+msgid "%X%P: address 0x%v of %B section %s is not within region %s\n"
+msgstr "%X%P: ä½å€ 0x% çš„ v%B å€æ®µ %s 並éžåœ¨å€åŸŸ %s 之內\n"
+
+#: ldlang.c:4074
+msgid "%X%P: region %s is full (%B section %s)\n"
+msgstr "%X%P: å€åŸŸ %s 已滿 (%Bå€æ®µ %s)\n"
+
+#: ldlang.c:4114
+#, c-format
+msgid "%F%S: non constant or forward reference address expression for section %s\n"
+msgstr "%F%S: 用於å€æ®µ %s çš„éžå¸¸æ•¸æˆ–是å‘å‰åƒè€ƒçš„ä½å€é‹ç®—å¼\n"
+
+#: ldlang.c:4139
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: æ–¼ COFF 共用程å¼åº«å€æ®µ %s 的內部錯誤\n"
+
+#: ldlang.c:4197
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: 錯誤:無指定用於å¯è¼‰å…¥å€æ®µã€Œ%sã€çš„記憶體å€åŸŸ\n"
+
+#: ldlang.c:4202
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: 警告:無指定用於å¯è¼‰å…¥å€æ®µã€Œ%sã€çš„記憶體å€åŸŸ\n"
+
+#: ldlang.c:4224
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr "%P: 警告:將å€æ®µçš„開始 %s 以 %lu ä½å…ƒçµ„變更\n"
+
+#: ldlang.c:4388
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: 無法鬆開å€æ®µï¼š%E\n"
+
+#: ldlang.c:4636
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: 無效的資料敘述\n"
+
+#: ldlang.c:4669
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: 無效的é‡å®šå€æ•˜è¿°\n"
+
+#: ldlang.c:4802
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: 無法設定起始ä½å€\n"
+
+#: ldlang.c:4815 ldlang.c:4834
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: 無法設定起始ä½å€\n"
+
+#: ldlang.c:4827
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: 警告:無法找到項目符號 %s; é è¨­ç‚º %V\n"
+
+#: ldlang.c:4839
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr "%P: 警告:無法找到項目符號 %s; 無法設定起始ä½å€\n"
+
+#: ldlang.c:4888
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: 並ä¸æ”¯æ´å¾žæ ¼å¼ %s (%B) åˆ°æ ¼å¼ %s (%B) çš„é‡å®šå€éˆçµ\n"
+
+#: ldlang.c:4898
+msgid "%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P: 警告:輸入檔案 `%2$B' 的架構 %1$s 與 %s 輸出ä¸ç›¸å®¹\n"
+
+#: ldlang.c:4920
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr "%P%X: åˆä½µç›®æ¨™æª”案 %B 的特定資料時失敗\n"
+
+#: ldlang.c:5004
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"é…置公共符號\n"
+
+#: ldlang.c:5005
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"公共符號 å¤§å° æª”æ¡ˆ\n"
+"\n"
+
+#: ldlang.c:5131
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: 在旗標中出ç¾ç„¡æ•ˆçš„語法\n"
+
+#: ldlang.c:5406
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: 建立雜湊表時失敗\n"
+
+#: ldlang.c:5722
+msgid "%P%F: multiple STARTUP files\n"
+msgstr "%P%F: 多é‡å•Ÿå‹•æª”案\n"
+
+#: ldlang.c:5770
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: å€æ®µåŒæ™‚有載入ä½å€å’Œè¼‰å…¥å€åŸŸ\n"
+
+#: ldlang.c:6007
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: bfd_record_phdr 失敗:%E\n"
+
+#: ldlang.c:6027
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: å€æ®µã€Œ%sã€è¢«æŒ‡æ´¾åˆ°ä¸å­˜åœ¨çš„ phdr「%sã€\n"
+
+#: ldlang.c:6418
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: 在版本資訊中出ç¾ä¸æ˜Žçš„語言「%sã€\n"
+
+#: ldlang.c:6560
+msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr "%X%P: 匿å版本標記無法與其他版本標記åˆä½µ\n"
+
+#: ldlang.c:6569
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P:é‡è¤‡çš„版本標記「%sã€\n"
+
+#: ldlang.c:6589 ldlang.c:6598 ldlang.c:6615 ldlang.c:6625
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr "%X%P: 在版本資訊中出ç¾é‡è¤‡çš„é‹ç®—å¼ã€Œ%sã€\n"
+
+#: ldlang.c:6665
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: 無法找到版本相ä¾æ€§ã€Œ%sã€\n"
+
+#: ldlang.c:6687
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr "%X%P: ç„¡æ³•è®€å– .exports å€æ®µå…§å®¹\n"
+
+#: ldmain.c:232
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: 無法設定 BFD é è¨­ç›®æ¨™åˆ°ã€Œ%sã€ï¼š%E\n"
+
+#: ldmain.c:345
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F: --relax å’Œ -r ä¸èƒ½ä¸€èµ·ä½¿ç”¨\n"
+
+#: ldmain.c:347
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: -r å’Œ -shared ä¸èƒ½ä¸€èµ·ä½¿ç”¨\n"
+
+#: ldmain.c:353
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F:-F 必須與 -shared 一起作用\n"
+
+#: ldmain.c:355
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F:-f 必須與 -shared 一起作用\n"
+
+#: ldmain.c:397
+msgid "using external linker script:"
+msgstr "使用外部éˆçµå™¨å‘½ä»¤ç¨¿ï¼š"
+
+#: ldmain.c:399
+msgid "using internal linker script:"
+msgstr "使用內部éˆçµå™¨å‘½ä»¤ç¨¿ï¼š"
+
+#: ldmain.c:433
+msgid "%P%F: no input files\n"
+msgstr "%P%F:沒有輸入檔案\n"
+
+#: ldmain.c:437
+msgid "%P: mode %s\n"
+msgstr "%P: æ¨¡å¼ %s\n"
+
+#: ldmain.c:453
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: 無法開啟å°æ‡‰æª”案 %s: %E\n"
+
+#: ldmain.c:485
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: 找到éˆçµéŒ¯èª¤ï¼Œåˆªé™¤å¯åŸ·è¡Œæª”案「%sã€\n"
+
+#: ldmain.c:494
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: 最後的關閉失敗: %E\n"
+
+#: ldmain.c:520
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr "%X%P: 無法開啟複製的來æºã€Œ%sã€\n"
+
+#: ldmain.c:523
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr "%X%P: 無法開啟複製的目的「%sã€\n"
+
+#: ldmain.c:530
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: 寫入檔案「%sã€æ™‚發生錯誤\n"
+
+#: ldmain.c:535 pe-dll.c:1494
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: 關閉檔案「%sã€æ™‚發生錯誤\n"
+
+#: ldmain.c:551
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: éˆçµç¸½æ™‚間: %ld.%06ld\n"
+
+#: ldmain.c:554
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: è³‡æ–™å¤§å° %ld\n"
+
+#: ldmain.c:637
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: 缺少 -m 的引數\n"
+
+#: ldmain.c:784 ldmain.c:803 ldmain.c:834
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: bfd_hash_table_init 失敗:%E\n"
+
+#: ldmain.c:788 ldmain.c:807
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup 失敗:%E\n"
+
+#: ldmain.c:821
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: 錯誤:é‡è£½ retain-symbols-file\n"
+
+#: ldmain.c:864
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup 用於æ’入時失敗:%E\n"
+
+#: ldmain.c:869
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P:「-retain-symbols-fileã€å¼·åˆ¶è¦†å¯«ã€Œ-sã€å’Œã€Œ-Sã€\n"
+
+#: ldmain.c:944
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"由於檔案(符號)而包å«äº†æ­¸æª”æˆå“¡\n"
+"\n"
+
+#: ldmain.c:1014
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C:「%Tã€çš„多é‡å®šç¾©\n"
+
+#: ldmain.c:1017
+msgid "%D: first defined here\n"
+msgstr "%D:第一次定義在此\n"
+
+#: ldmain.c:1021
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: åœç”¨é¬†é–‹ï¼šå¤šé‡å®šç¾©å°‡ç„¡æ³•ä½œç”¨\n"
+
+#: ldmain.c:1051
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: 警告:「%Tã€çš„定義覆寫公共定義\n"
+
+#: ldmain.c:1054
+msgid "%B: warning: common is here\n"
+msgstr "%B: 警告: 公共定義在此\n"
+
+#: ldmain.c:1061
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: 警告: 公共的「%Tã€ç”±å®šç¾©æ‰€è¦†å¯«\n"
+
+#: ldmain.c:1064
+msgid "%B: warning: defined here\n"
+msgstr "%B:警告:在此定義\n"
+
+#: ldmain.c:1071
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: 警告:公共的「%Tã€ç”±è¼ƒå¤§çš„å…±åŒé»žæ‰€è¦†å¯«\n"
+
+#: ldmain.c:1074
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: 警告: 較大的共åŒé»žåœ¨æ­¤\n"
+
+#: ldmain.c:1078
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: 警告:公共的「%Tã€ç”±è¼ƒå°çš„å…±åŒé»žæ‰€è¦†å¯«\n"
+
+#: ldmain.c:1081
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: 警告: 較å°çš„å…±åŒé»žåœ¨æ­¤\n"
+
+#: ldmain.c:1085
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: 警告:「%Tã€çš„多é‡å…±åŒé»ž\n"
+
+#: ldmain.c:1087
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: 警告:å‰ä¸€å€‹å…±åŒé»žåœ¨æ­¤\n"
+
+#: ldmain.c:1107 ldmain.c:1145
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: è­¦å‘Šï¼šä½¿ç”¨å…¨åŸŸå»ºæ§‹å­ %s\n"
+
+#: ldmain.c:1155
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: BFD 後端錯誤:ä¸æ”¯æ´ BFD_RELOC_CTOR\n"
+
+#. We found a reloc for the symbol we are looking for.
+#: ldmain.c:1209 ldmain.c:1211 ldmain.c:1213 ldmain.c:1251 ldmain.c:1299
+msgid "warning: "
+msgstr "警告:"
+
+#: ldmain.c:1334
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: bfd_hash_table_init 失敗:%E\n"
+
+#: ldmain.c:1341
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: bfd_hash_lookup 失敗:%E\n"
+
+#: ldmain.c:1362
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C: 未定義åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1365
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: 警告:未定義åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1371
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr "%X%D: 跟著更多未定義的åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1374
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr "%D: 警告:跟著更多未定義的åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1385
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B: 未定義的åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1388
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: 警告:未定義的åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1394
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr "%X%B: 跟著更多未定義的åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1397
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr "%B: 警告:跟著更多未定義的åƒè€ƒåˆ°ã€Œ%Tã€\n"
+
+#: ldmain.c:1436
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " 從輸出所çœç•¥çš„é¡å¤–é‡å®šå€æº¢ä½\n"
+
+#: ldmain.c:1449
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr " 截斷é‡å®šå€è‡³ç›¸ç¬¦ï¼š%s é‡å°æœªå®šç¾©çš„符號「%Tã€"
+
+#: ldmain.c:1454
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr " 截斷é‡å®šå€è‡³ç›¸ç¬¦ï¼š%s é‡å°åœ¨ %B 中的 %A å€æ®µä¸­çš„符號「%Tã€çš„定義"
+
+#: ldmain.c:1466
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " 截斷é‡å®šå€è‡³ç›¸ç¬¦ï¼š%s é‡å°ã€Œ%Tã€"
+
+#: ldmain.c:1483
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr "%X%C: å±éšªçš„é‡å®šå€ï¼š%s\n"
+
+#: ldmain.c:1498
+msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
+msgstr "%X%C: é‡å®šå€åƒè€ƒæœªè¢«è¼¸å‡ºçš„符號「%Tã€\n"
+
+#: ldmisc.c:147
+#, c-format
+msgid "no symbol"
+msgstr "無符號"
+
+#: ldmisc.c:238
+#, c-format
+msgid "built in linker script:%u"
+msgstr "內建éˆçµå‘½ä»¤ç¨¿ï¼š%u"
+
+#: ldmisc.c:294 ldmisc.c:298
+msgid "%B%F: could not read symbols\n"
+msgstr "%B%F:無法讀å–符號\n"
+
+#: ldmisc.c:340
+msgid "%B: In function `%T'"
+msgstr "%B:在函å¼ã€Œ%Tã€ä¸­"
+
+#: ldmisc.c:510
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P:內部錯誤 %s %d\n"
+
+#: ldmisc.c:556
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: 內部錯誤:放棄 %3$s 中 %1$s 的第 %2$d 列\n"
+
+#: ldmisc.c:559
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: 內部錯誤:放棄 %s 的第 %d 列\n"
+
+#: ldmisc.c:561
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F:請報告此錯誤\n"
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:38
+#, c-format
+msgid "GNU ld version %s\n"
+msgstr "GNU ld 版本 %s\n"
+
+#: ldver.c:42
+#, c-format
+msgid "Copyright 2005 Free Software Foundation, Inc.\n"
+msgstr "版權所有 2005 自由軟體基金會\n"
+
+#: ldver.c:43
+#, c-format
+msgid ""
+"This program is free software; you may redistribute it under the terms of\n"
+"the GNU General Public License. This program has absolutely no warranty.\n"
+msgstr ""
+"本程å¼æ˜¯è‡ªç”±è»Ÿé«”;您å¯ä»¥åœ¨éµå¾ª GNU 通用公共許å¯è­‰çš„å‰æ下å†æ•£ä½ˆã€‚\n"
+"本程å¼ä¸å«ä»»ä½•æ“”ä¿ã€‚\n"
+
+#: ldver.c:52
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " 支æ´çš„模擬:\n"
+
+#: ldwrite.c:55 ldwrite.c:191
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: bfd_new_link_order 時失敗\n"
+
+#: ldwrite.c:344
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr "%F%P: 無法在 %s 建立分割節段å稱\n"
+
+#: ldwrite.c:356
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: 仿製å€æ®µå¤±æ•—: %E\n"
+
+#: ldwrite.c:394
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x 其他æ±è¥¿\n"
+
+#: ldwrite.c:564
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: 最後的éˆçµå¤±æ•—: %E\n"
+
+#: lexsup.c:196 lexsup.c:328
+msgid "KEYWORD"
+msgstr "é—œéµå­—"
+
+#: lexsup.c:196
+msgid "Shared library control for HP/UX compatibility"
+msgstr "為了 HP/UX 相容性的共用程å¼åº«æŽ§åˆ¶"
+
+#: lexsup.c:199
+msgid "ARCH"
+msgstr "架構"
+
+#: lexsup.c:199
+msgid "Set architecture"
+msgstr "設定 CPU 架構"
+
+#: lexsup.c:201 lexsup.c:422
+msgid "TARGET"
+msgstr "目標"
+
+#: lexsup.c:201
+msgid "Specify target for following input files"
+msgstr "指定用於下述輸入檔案的目標"
+
+#: lexsup.c:204 lexsup.c:253 lexsup.c:265 lexsup.c:278 lexsup.c:381
+#: lexsup.c:434 lexsup.c:491
+msgid "FILE"
+msgstr "檔案"
+
+#: lexsup.c:204
+msgid "Read MRI format linker script"
+msgstr "è®€å– MRI æ ¼å¼çš„éˆçµå™¨å‘½ä»¤ç¨¿"
+
+#: lexsup.c:206
+msgid "Force common symbols to be defined"
+msgstr "強制公共符號必須定義"
+
+#: lexsup.c:210 lexsup.c:476 lexsup.c:478 lexsup.c:480
+msgid "ADDRESS"
+msgstr "ä½å€"
+
+#: lexsup.c:210
+msgid "Set start address"
+msgstr "設定起始ä½å€"
+
+#: lexsup.c:212
+msgid "Export all dynamic symbols"
+msgstr "匯出所有動態符號"
+
+#: lexsup.c:214
+msgid "Link big-endian objects"
+msgstr "éˆçµé«˜ä½ä½å…ƒçµ„在å‰çš„目的檔案"
+
+#: lexsup.c:216
+msgid "Link little-endian objects"
+msgstr "éˆçµä½Žä½ä½å…ƒçµ„在å‰çš„目的檔案"
+
+#: lexsup.c:218 lexsup.c:221
+msgid "SHLIB"
+msgstr "共享函å¼åº«"
+
+#: lexsup.c:218
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "指定為æŸå…±äº«ç‰©ä»¶ç¬¦è™Ÿè¡¨çš„輔助éŽæ¿¾å™¨"
+
+#: lexsup.c:221
+msgid "Filter for shared object symbol table"
+msgstr "指定為æŸå…±äº«ç‰©ä»¶ç¬¦è™Ÿè¡¨çš„éŽæ¿¾å™¨"
+
+#: lexsup.c:224
+msgid "Ignored"
+msgstr "忽略"
+
+#: lexsup.c:226
+msgid "SIZE"
+msgstr "大å°"
+
+#: lexsup.c:226
+msgid "Small data size (if no size, same as --shared)"
+msgstr "å°åž‹è³‡æ–™å¤§å°(如果未給予大å°ï¼Œèˆ‡ --shared 相åŒ)"
+
+#: lexsup.c:229
+msgid "FILENAME"
+msgstr "檔案å稱"
+
+#: lexsup.c:229
+msgid "Set internal name of shared library"
+msgstr "設定共享函å¼åº«çš„內部å稱"
+
+#: lexsup.c:231
+msgid "PROGRAM"
+msgstr "程å¼"
+
+#: lexsup.c:231
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "將「程å¼ã€è¨­ç‚ºè¦ä½¿ç”¨çš„å‹•æ…‹éˆçµå™¨"
+
+#: lexsup.c:234
+msgid "LIBNAME"
+msgstr "函å¼åº«å稱"
+
+#: lexsup.c:234
+msgid "Search for library LIBNAME"
+msgstr "æœå°‹å‡½å¼åº«ã€Œå‡½å¼åº«å稱ã€"
+
+#: lexsup.c:236
+msgid "DIRECTORY"
+msgstr "目錄"
+
+#: lexsup.c:236
+msgid "Add DIRECTORY to library search path"
+msgstr "將「目錄ã€åŠ å…¥åˆ°å‡½å¼åº«æœå°‹è·¯å¾‘中"
+
+#: lexsup.c:239
+msgid "Override the default sysroot location"
+msgstr "強制覆寫é è¨­çš„ sysroot ä½ç½®"
+
+#: lexsup.c:241
+msgid "EMULATION"
+msgstr "模擬"
+
+#: lexsup.c:241
+msgid "Set emulation"
+msgstr "設定模擬"
+
+#: lexsup.c:243
+msgid "Print map file on standard output"
+msgstr "在標準輸出上列å°å°æ‡‰åœ–檔案"
+
+#: lexsup.c:245
+msgid "Do not page align data"
+msgstr "ä¸å°‡è³‡æ–™å°é½Šè‡³é é‚Šç•Œ"
+
+#: lexsup.c:247
+msgid "Do not page align data, do not make text readonly"
+msgstr "ä¸å°‡è³‡æ–™å°é½Šè‡³é é‚Šç•Œï¼Œä¸å°‡æ–‡å­—設為唯讀"
+
+#: lexsup.c:250
+msgid "Page align data, make text readonly"
+msgstr "將資料å°é½Šè‡³é é‚Šç•Œï¼Œå°‡æ–‡å­—設為唯讀"
+
+#: lexsup.c:253
+msgid "Set output file name"
+msgstr "設定輸出檔案å稱"
+
+#: lexsup.c:255
+msgid "Optimize output file"
+msgstr "最佳化輸出檔案"
+
+#: lexsup.c:257
+msgid "Ignored for SVR4 compatibility"
+msgstr "為 SVR4 相容性所忽略"
+
+#: lexsup.c:261
+msgid "Generate relocatable output"
+msgstr "產生å¯é‡æ–°å®šä½çš„輸出"
+
+#: lexsup.c:265
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "僅éˆçµç¬¦è™Ÿ (如果是目錄,與 --rpath 相åŒ)"
+
+#: lexsup.c:268
+msgid "Strip all symbols"
+msgstr "剔除所有符號資訊"
+
+#: lexsup.c:270
+msgid "Strip debugging symbols"
+msgstr "剔除除錯符號資訊"
+
+#: lexsup.c:272
+msgid "Strip symbols in discarded sections"
+msgstr "剔除在丟棄å€æ®µä¸­çš„符號"
+
+#: lexsup.c:274
+msgid "Do not strip symbols in discarded sections"
+msgstr "ä¸å‰”除在丟棄å€æ®µä¸­çš„符號"
+
+#: lexsup.c:276
+msgid "Trace file opens"
+msgstr "追蹤檔案開啟"
+
+#: lexsup.c:278
+msgid "Read linker script"
+msgstr "讀å–éˆçµå™¨å‘½ä»¤ç¨¿"
+
+#: lexsup.c:280 lexsup.c:298 lexsup.c:364 lexsup.c:379 lexsup.c:469
+#: lexsup.c:494 lexsup.c:521
+msgid "SYMBOL"
+msgstr "符號"
+
+#: lexsup.c:280
+msgid "Start with undefined reference to SYMBOL"
+msgstr "以未定義的符號åƒè€ƒé–‹å§‹"
+
+#: lexsup.c:283
+msgid "[=SECTION]"
+msgstr "[=å€æ®µ]"
+
+#: lexsup.c:284
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "ä¸åˆä½µå稱為「å€æ®µã€çš„輸入å€æ®µæˆ–孤立å€æ®µ"
+
+#: lexsup.c:286
+msgid "Build global constructor/destructor tables"
+msgstr "組建全域建構å­/解構å¼è¡¨æ ¼"
+
+#: lexsup.c:288
+msgid "Print version information"
+msgstr "顯示版本資訊"
+
+#: lexsup.c:290
+msgid "Print version and emulation information"
+msgstr "顯示版本和模擬資訊"
+
+#: lexsup.c:292
+msgid "Discard all local symbols"
+msgstr "丟棄所有局部符號"
+
+#: lexsup.c:294
+msgid "Discard temporary local symbols (default)"
+msgstr "丟棄臨時局部符號(é è¨­)"
+
+#: lexsup.c:296
+msgid "Don't discard any local symbols"
+msgstr "ä¸ä¸Ÿæ£„任何局部符號"
+
+#: lexsup.c:298
+msgid "Trace mentions of SYMBOL"
+msgstr "符號的追蹤表記"
+
+#: lexsup.c:300 lexsup.c:436 lexsup.c:438
+msgid "PATH"
+msgstr "路徑"
+
+#: lexsup.c:300
+msgid "Default search path for Solaris compatibility"
+msgstr "為了 Solaris 相容性的é è¨­æœå°‹è·¯å¾‘"
+
+#: lexsup.c:303
+msgid "Start a group"
+msgstr "開始群組"
+
+#: lexsup.c:305
+msgid "End a group"
+msgstr "çµæŸç¾¤çµ„"
+
+#: lexsup.c:309
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "接å—無法決定其架構的輸入檔案"
+
+#: lexsup.c:313
+msgid "Reject input files whose architecture is unknown"
+msgstr "拒絕架構ä¸æ˜Žçš„輸入檔案"
+
+#: lexsup.c:316
+msgid ""
+"Set DT_NEEDED tags for DT_NEEDED entries in\n"
+"\t\t\t\tfollowing dynamic libs"
+msgstr ""
+"設定 DT_NEEDED 的標記用於 DT_NEEDED 所需的項目在\n"
+"\t\t\t\t下述的動態函å¼åº«ä¸­"
+
+#: lexsup.c:319
+msgid ""
+"Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+"\t\t\t\tin following dynamic libs"
+msgstr ""
+"ä¸è¨­å®š DT_NEEDED 的標記用於 DT_NEEDED 所需的項目\n"
+"\t\t\t\t在下述的動態函å¼åº«ä¸­"
+
+#: lexsup.c:322
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr "如果使用的話,åªæœ‰è¨­å®š DT_NEEDED 於下述的動態函å¼åº«"
+
+#: lexsup.c:325
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr "自動設定 DTNEEDED 用於下述的動態函å¼åº«"
+
+#: lexsup.c:328
+msgid "Ignored for SunOS compatibility"
+msgstr "為 SunOS 相容性所忽略"
+
+#: lexsup.c:330
+msgid "Link against shared libraries"
+msgstr "éˆçµåˆ°å…±äº«å‡½å¼åº«"
+
+#: lexsup.c:336
+msgid "Do not link against shared libraries"
+msgstr "ä¸éˆçµåˆ°å…±äº«å‡½å¼åº«"
+
+#: lexsup.c:344
+msgid "Bind global references locally"
+msgstr "局部地繫çµå…¨åŸŸåƒè€ƒ"
+
+#: lexsup.c:346
+msgid "Check section addresses for overlaps (default)"
+msgstr "檢查å€æ®µä½å€æ˜¯å¦é‡ç–Š(é è¨­)"
+
+#: lexsup.c:349
+msgid "Do not check section addresses for overlaps"
+msgstr "ä¸æª¢æŸ¥å€æ®µä½å€æ˜¯å¦é‡ç–Š"
+
+#: lexsup.c:352
+msgid "Output cross reference table"
+msgstr "輸出交å‰åƒç…§è¡¨"
+
+#: lexsup.c:354
+msgid "SYMBOL=EXPRESSION"
+msgstr "符號=é‹ç®—å¼"
+
+#: lexsup.c:354
+msgid "Define a symbol"
+msgstr "定義一個符號"
+
+#: lexsup.c:356
+msgid "[=STYLE]"
+msgstr "[=樣å¼]"
+
+#: lexsup.c:356
+msgid "Demangle symbol names [using STYLE]"
+msgstr "解讀符號å稱[使用「樣å¼ã€]"
+
+#: lexsup.c:359
+msgid "Generate embedded relocs"
+msgstr "產生嵌入å¼é‡å®šå€"
+
+#: lexsup.c:361
+msgid "Treat warnings as errors"
+msgstr "將警告當作錯誤"
+
+#: lexsup.c:364
+msgid "Call SYMBOL at unload-time"
+msgstr "在å¸è¼‰æ™‚間呼å«ç¬¦è™Ÿ"
+
+#: lexsup.c:366
+msgid "Force generation of file with .exe suffix"
+msgstr "強制為產生的檔案加入 .exe 字尾"
+
+#: lexsup.c:368
+msgid "Remove unused sections (on some targets)"
+msgstr "移除未使用的å€æ®µ(æ–¼æŸäº›ç›®æ¨™)"
+
+#: lexsup.c:371
+msgid "Don't remove unused sections (default)"
+msgstr "ä¸ç§»é™¤æœªä½¿ç”¨çš„å€æ®µ(é è¨­)"
+
+#: lexsup.c:374
+msgid "Set default hash table size close to <NUMBER>"
+msgstr "設定é è¨­é›œæ¹Šè¡¨å¤§å°æŽ¥è¿‘ <數字>"
+
+#: lexsup.c:377
+msgid "Print option help"
+msgstr "顯示é¸é …求助"
+
+#: lexsup.c:379
+msgid "Call SYMBOL at load-time"
+msgstr "在載入時間呼å«ç¬¦è™Ÿ"
+
+#: lexsup.c:381
+msgid "Write a map file"
+msgstr "寫入å°æ‡‰æª”案"
+
+#: lexsup.c:383
+msgid "Do not define Common storage"
+msgstr "ä¸å®šç¾©å…¬å…±å„²è—"
+
+#: lexsup.c:385
+msgid "Do not demangle symbol names"
+msgstr "ä¸è§£è®€ç¬¦è™Ÿå稱"
+
+#: lexsup.c:387
+msgid "Use less memory and more disk I/O"
+msgstr "使用較少的記憶體和更多ç£ç¢Ÿ I/O"
+
+#: lexsup.c:389
+msgid "Do not allow unresolved references in object files"
+msgstr "ä¸å…許在目的檔案中存在無法解æžçš„åƒè€ƒ"
+
+#: lexsup.c:392
+msgid "Allow unresolved references in shared libaries"
+msgstr "å…許在共享函å¼åº«ä¸­å­˜åœ¨ç„¡æ³•è§£æžçš„åƒè€ƒ"
+
+#: lexsup.c:396
+msgid "Do not allow unresolved references in shared libs"
+msgstr "ä¸å…許在共享函å¼åº«ä¸­å­˜åœ¨ç„¡æ³•è§£æžçš„åƒè€ƒ"
+
+#: lexsup.c:400
+msgid "Allow multiple definitions"
+msgstr "å…許多é‡å®šç¾©"
+
+#: lexsup.c:402
+msgid "Disallow undefined version"
+msgstr "ä¸å…許未定義的版本"
+
+#: lexsup.c:404
+msgid "Create default symbol version"
+msgstr "建立é è¨­ç¬¦è™Ÿç‰ˆæœ¬"
+
+#: lexsup.c:407
+msgid "Create default symbol version for imported symbols"
+msgstr "建立用於匯入符號的é è¨­ç¬¦è™Ÿç‰ˆæœ¬"
+
+#: lexsup.c:410
+msgid "Don't warn about mismatched input files"
+msgstr "ä¸ç‚ºä¸ç¬¦åˆçš„輸入檔案發出警告"
+
+#: lexsup.c:412
+msgid "Turn off --whole-archive"
+msgstr "關閉 --whole-archive"
+
+#: lexsup.c:414
+msgid "Create an output file even if errors occur"
+msgstr "å³ä½¿ç™¼ç”ŸéŒ¯èª¤ä¹Ÿè¦å»ºç«‹è¼¸å‡ºæª”案"
+
+#: lexsup.c:419
+msgid ""
+"Only use library directories specified on\n"
+"\t\t\t\tthe command line"
+msgstr ""
+"åªä½¿ç”¨å‘½ä»¤åˆ—中給予的\n"
+"\t\t\t\t函å¼åº«ç›®éŒ„"
+
+#: lexsup.c:422
+msgid "Specify target of output file"
+msgstr "指定輸出的目標檔案"
+
+#: lexsup.c:425
+msgid "Ignored for Linux compatibility"
+msgstr "為 Linux 相容性所忽略"
+
+#: lexsup.c:428
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr "é™ä½Žè¨˜æ†¶é«”é¡å¤–負擔,å¯èƒ½æœƒèŠ±è²»æ›´å¤šæ™‚é–“"
+
+#: lexsup.c:431
+msgid "Relax branches on certain targets"
+msgstr "放寬分支於æŸäº›ç›®æ¨™"
+
+#: lexsup.c:434
+msgid "Keep only symbols listed in FILE"
+msgstr "åªä¿ç•™åœ¨ã€Œæª”案ã€ä¸­åˆ—出的符號"
+
+#: lexsup.c:436
+msgid "Set runtime shared library search path"
+msgstr "設定執行時共享函å¼åº«çš„æœå°‹è·¯å¾‘"
+
+#: lexsup.c:438
+msgid "Set link time shared library search path"
+msgstr "設定éˆçµæ™‚共享函å¼åº«çš„æœå°‹è·¯å¾‘"
+
+#: lexsup.c:441
+msgid "Create a shared library"
+msgstr "建立共享函å¼åº«"
+
+#: lexsup.c:445
+msgid "Create a position independent executable"
+msgstr "建立ä½ç½®ç„¡é—œçš„å¯åŸ·è¡Œæª”案"
+
+#: lexsup.c:449
+msgid "Sort common symbols by size"
+msgstr "按大å°æŽ’åºå…¬ç”¨ç¬¦è™Ÿæ¸…å–®"
+
+#: lexsup.c:453
+msgid "name|alignment"
+msgstr "å稱|å°é½Š"
+
+#: lexsup.c:454
+msgid "Sort sections by name or maximum alignment"
+msgstr "ä¾å稱或最大值å°é½Šä¾†æŽ’åºå€æ®µ"
+
+#: lexsup.c:456
+msgid "COUNT"
+msgstr "計數"
+
+#: lexsup.c:456
+msgid "How many tags to reserve in .dynamic section"
+msgstr "有多少標記è¦ä¿ç•™åœ¨ .dynamic å€æ®µä¸­"
+
+#: lexsup.c:459
+msgid "[=SIZE]"
+msgstr "[=大å°]"
+
+#: lexsup.c:459
+msgid "Split output sections every SIZE octets"
+msgstr "ä¾æ¯[大å°]å…«ä½å…ƒçµ„來分割輸出å€æ®µ"
+
+#: lexsup.c:462
+msgid "[=COUNT]"
+msgstr "[=計數]"
+
+#: lexsup.c:462
+msgid "Split output sections every COUNT relocs"
+msgstr "ä¾æ¯[計數]é‡å®šå€ä¾†åˆ†å‰²è¼¸å‡ºå€æ®µ"
+
+#: lexsup.c:465
+msgid "Print memory usage statistics"
+msgstr "顯示記憶體使用統計"
+
+#: lexsup.c:467
+msgid "Display target specific options"
+msgstr "顯示目標特定的é¸é …"
+
+#: lexsup.c:469
+msgid "Do task level linking"
+msgstr "執行工作等級éˆçµ"
+
+#: lexsup.c:471
+msgid "Use same format as native linker"
+msgstr "使用與原生éˆçµå™¨ç›¸åŒçš„æ ¼å¼"
+
+#: lexsup.c:473
+msgid "SECTION=ADDRESS"
+msgstr "å€æ®µ=ä½å€"
+
+#: lexsup.c:473
+msgid "Set address of named section"
+msgstr "設定具åå€æ®µçš„ä½å€"
+
+#: lexsup.c:476
+msgid "Set address of .bss section"
+msgstr "設定 .bss å€æ®µçš„ä½å€"
+
+#: lexsup.c:478
+msgid "Set address of .data section"
+msgstr "設定 .data å€æ®µçš„ä½å€"
+
+#: lexsup.c:480
+msgid "Set address of .text section"
+msgstr "設定 .text å€æ®µçš„ä½å€"
+
+#: lexsup.c:483
+msgid ""
+"How to handle unresolved symbols. <method> is:\n"
+"\t\t\t\tignore-all, report-all, ignore-in-object-files,\n"
+"\t\t\t\tignore-in-shared-libs"
+msgstr ""
+"如何處ç†ä¸èƒ½è§£æžçš„符號。<方法> 是:\n"
+"\t\t\t\t全部忽略ã€å…¨éƒ¨å›žå ±ã€åœ¨ç›®çš„檔中忽略ã€\n"
+"\t\t\t\t在共享函å¼åº«ä¸­å¿½ç•¥"
+
+#: lexsup.c:487
+msgid "Output lots of information during link"
+msgstr "éˆçµéŽç¨‹ä¸­è¼¸å‡ºå¤§é‡ç›¸é—œè³‡è¨Š"
+
+#: lexsup.c:491
+msgid "Read version information script"
+msgstr "讀å–版本資訊命令稿"
+
+#: lexsup.c:494
+msgid ""
+"Take export symbols list from .exports, using\n"
+"\t\t\t\tSYMBOL as the version."
+msgstr ""
+"從 .exports 匯出符號表列,使用\n"
+"\t\t\t\t[符號]åšç‚ºç‰ˆæœ¬ã€‚"
+
+#: lexsup.c:497
+msgid "Warn about duplicate common symbols"
+msgstr "為é‡è¤‡çš„公共符號給予警告"
+
+#: lexsup.c:499
+msgid "Warn if global constructors/destructors are seen"
+msgstr "如果看得見全域建構å­/解構å¼å°±çµ¦äºˆè­¦å‘Š"
+
+#: lexsup.c:502
+msgid "Warn if the multiple GP values are used"
+msgstr "å¦‚æžœä½¿ç”¨äº†å¤šé‡ GP 值就給予警告"
+
+#: lexsup.c:504
+msgid "Warn only once per undefined symbol"
+msgstr "為æ¯ä¸€å€‹æœªå®šç¾©çš„符號åªè­¦å‘Šä¸€æ¬¡"
+
+#: lexsup.c:506
+msgid "Warn if start of section changes due to alignment"
+msgstr "如果å€æ®µçš„開始由於å°é½Šè€Œè®Šæ›´å°±çµ¦äºˆè­¦å‘Š"
+
+#: lexsup.c:509
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr "如果共用物件有 DT_TEXTREL 就給予警告"
+
+#: lexsup.c:513
+msgid "Report unresolved symbols as warnings"
+msgstr "將無法解æžçš„符號視作警告"
+
+#: lexsup.c:516
+msgid "Report unresolved symbols as errors"
+msgstr "將無法解æžçš„符號視作錯誤"
+
+#: lexsup.c:518
+msgid "Include all objects from following archives"
+msgstr "包å«ä¸‹è¿°æª”案中的所有物件"
+
+#: lexsup.c:521
+msgid "Use wrapper functions for SYMBOL"
+msgstr "使用包è£å‡½å¼åšç‚º[符號]"
+
+#: lexsup.c:668
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P:無法辨識的é¸é …「%sã€\n"
+
+#: lexsup.c:670
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F:使用 --help é¸é …以ç²å–使用資訊\n"
+
+#: lexsup.c:688
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F:無法辨識的 -a é¸é …「%sã€\n"
+
+#: lexsup.c:701
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F:無法辨識的 -assert é¸é …「%sã€\n"
+
+#: lexsup.c:744
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: ä¸æ˜Žçš„解讀樣å¼ã€Œ%sã€"
+
+#: lexsup.c:806
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: 無效的數字「%sã€\n"
+
+#: lexsup.c:898
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: ä¸ç•¶çš„ --unresolved-symbols é¸é …: %s\n"
+
+#. This can happen if the user put "-rpath,a" on the command
+#. line. (Or something similar. The comma is important).
+#. Getopt becomes confused and thinks that this is a -r option
+#. but it cannot parse the text after the -r so it refuses to
+#. increment the optind counter. Detect this case and issue
+#. an error message here. We cannot just make this a warning,
+#. increment optind, and continue because getopt is too confused
+#. and will seg-fault the next time around.
+#: lexsup.c:969
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: ä¸ç•¶çš„ -rpath é¸é …\n"
+
+#: lexsup.c:1081
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F:ä¸æ”¯æ´ -shared\n"
+
+#: lexsup.c:1090
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F:ä¸æ”¯æ´ -pie\n"
+
+#: lexsup.c:1100
+msgid "name"
+msgstr "å稱"
+
+#: lexsup.c:1102
+msgid "alignment"
+msgstr "å°é½Š"
+
+#: lexsup.c:1105
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr "%P%F: 無效的å€æ®µæŽ’åºé¸é …: %s\n"
+
+#: lexsup.c:1131
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F:給予é¸é …「--section-startã€çš„引數無效\n"
+
+#: lexsup.c:1138
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr "%P%F:é¸é …「--section-startã€ç¼ºå°‘引數\n"
+
+#: lexsup.c:1312
+msgid "%P%F: may not nest groups (--help for usage)\n"
+msgstr "%P%F: ä¸å¯å·¢ç‹€ç¾¤çµ„ (--help ç²å¾—用法)\n"
+
+#: lexsup.c:1319
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: 群組在它開始之å‰å°±çµæŸ (--help ç²å¾—用法)\n"
+
+#: lexsup.c:1347
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr "%P%X: --hash-size 需è¦æ•¸å€¼å¼•æ•¸\n"
+
+#: lexsup.c:1398 lexsup.c:1411
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: 無效的å六進ä½æ•¸å­—「%sã€\n"
+
+#: lexsup.c:1447
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "用法:%s [é¸é …] 檔案…\n"
+
+#: lexsup.c:1449
+#, c-format
+msgid "Options:\n"
+msgstr "é¸é …:\n"
+
+#: lexsup.c:1527
+#, c-format
+msgid " @FILE"
+msgstr " @檔案"
+
+#: lexsup.c:1530
+#, c-format
+msgid "Read options from FILE\n"
+msgstr "從[檔案]讀å–é¸é …\n"
+
+#. Note: Various tools (such as libtool) depend upon the
+#. format of the listings below - do not change them.
+#: lexsup.c:1535
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: 支æ´çš„目標:"
+
+#: lexsup.c:1543
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s:支æ´çš„模擬:"
+
+#: lexsup.c:1548
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s:模擬特定é¸é …:\n"
+
+#: lexsup.c:1552
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr "å‘ %s 報告程å¼éŒ¯èª¤\n"
+
+#: mri.c:291
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F:ä¸æ˜Žçš„æ ¼å¼é¡žåž‹ %s\n"
+
+#: pe-dll.c:303
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%X ä¸æ”¯æ´çš„ PEI 架構:%s\n"
+
+#: pe-dll.c:604
+#, c-format
+msgid "%XCannot export %s: invalid export name\n"
+msgstr "%X ä¸èƒ½åŒ¯å‡º %s:無效的匯出å稱\n"
+
+#: pe-dll.c:657
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%X 錯誤,é‡è£½[匯出]以åºæ•¸ï¼š %s(%d ç›¸å° %d)\n"
+
+#: pe-dll.c:664
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "警告,é‡è£½[匯出]: %s\n"
+
+#: pe-dll.c:751
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%X ä¸èƒ½åŒ¯å‡º %s:符號未定義\n"
+
+#: pe-dll.c:757
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%X 無法匯出 %s: 符號錯誤型態 (%d ç›¸å° %d)\n"
+
+#: pe-dll.c:764
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%X ä¸èƒ½åŒ¯å‡º %s:找ä¸åˆ°ç¬¦è™Ÿ\n"
+
+#: pe-dll.c:877
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr "%X 錯誤,åºæ•¸ä½¿ç”¨å…©æ¬¡ï¼š %d(%s ç›¸å° %s)\n"
+
+#: pe-dll.c:1219
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%X 錯誤:在 DLL 中 %d-ä½å…ƒé‡å®šå€\n"
+
+#: pe-dll.c:1347
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s:無法開啟輸出 def 檔案 %s\n"
+
+#: pe-dll.c:1490
+#, c-format
+msgid "; no contents available\n"
+msgstr ";沒有å¯ç”¨çš„內容\n"
+
+#: pe-dll.c:2252
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr "%C:變數「%Tã€ç„¡æ³•è‡ªå‹•åŒ¯å…¥ã€‚請讀å–與 ld çš„ --enable-auto-import 相關文件以ç²å–更詳細的資訊。\n"
+
+#: pe-dll.c:2282
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%X 無法開啟 .lib 檔案:%s\n"
+
+#: pe-dll.c:2287
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "正在建立函å¼åº«æª”案:%s\n"
diff --git a/ld/scripttempl/armbpabi.sc b/ld/scripttempl/armbpabi.sc
index c8d1bd4ba595..28bad1c4623b 100644
--- a/ld/scripttempl/armbpabi.sc
+++ b/ld/scripttempl/armbpabi.sc
@@ -77,14 +77,15 @@ CTOR=".ctors ${CONSTRUCTING-0} :
doesn't matter which directory crtbegin.o
is in. */
- KEEP (*crtbegin*.o(.ctors))
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
${CONSTRUCTING+${CTOR_END}}
@@ -92,8 +93,9 @@ CTOR=".ctors ${CONSTRUCTING-0} :
DTOR=".dtors ${CONSTRUCTING-0} :
{
${CONSTRUCTING+${DTOR_START}}
- KEEP (*crtbegin*.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
${CONSTRUCTING+${DTOR_END}}
diff --git a/ld/scripttempl/avr.sc b/ld/scripttempl/avr.sc
index d297b4a70298..7368caf3d012 100644
--- a/ld/scripttempl/avr.sc
+++ b/ld/scripttempl/avr.sc
@@ -71,12 +71,32 @@ SECTIONS
.rel.plt ${RELOCATING-0} : { *(.rel.plt) }
.rela.plt ${RELOCATING-0} : { *(.rela.plt) }
- /* Internal text space or external memory */
+ /* Internal text space or external memory. */
.text :
{
*(.vectors)
KEEP(*(.vectors))
+ /* For data that needs to reside in the lower 64k of progmem. */
+ *(.progmem.gcc*)
+ *(.progmem*)
+ ${RELOCATING+. = ALIGN(2);}
+
+ ${CONSTRUCTING+ __trampolines_start = . ; }
+ /* The jump trampolines for the 16-bit limited relocs will reside here. */
+ *(.trampolines)
+ *(.trampolines*)
+ ${CONSTRUCTING+ __trampolines_end = . ; }
+
+ /* For future tablejump instruction arrays for 3 byte pc devices.
+ We don't relax jump/call instructions within these sections. */
+ *(.jumptables)
+ *(.jumptables*)
+
+ /* For code that needs to reside in the lower 128k progmem. */
+ *(.lowtext)
+ *(.lowtext*)
+
${CONSTRUCTING+ __ctors_start = . ; }
${CONSTRUCTING+ *(.ctors) }
${CONSTRUCTING+ __ctors_end = . ; }
@@ -86,18 +106,8 @@ SECTIONS
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*)
-
+ /* From this point on, we don't bother about wether the insns are
+ below or above the 16 bits boundary. */
*(.init0) /* Start here after reset. */
KEEP (*(.init0))
*(.init1)
diff --git a/ld/scripttempl/crisaout.sc b/ld/scripttempl/crisaout.sc
index acdca7a91229..186fac765da8 100644
--- a/ld/scripttempl/crisaout.sc
+++ b/ld/scripttempl/crisaout.sc
@@ -48,15 +48,17 @@ SECTIONS
/* 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 (*crtbegin.o(.ctors))}
+ ${CONSTRUCTING+ KEEP (*crtbegin?.o(.ctors))}
+ ${CONSTRUCTING+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))}
${CONSTRUCTING+ KEEP (*(SORT(.ctors.*)))}
${CONSTRUCTING+ KEEP (*(.ctors))}
${CONSTRUCTING+ PROVIDE(___ctors_end = .);}
${CONSTRUCTING+ PROVIDE(___dtors = .);}
- ${CONSTRUCTING+ KEEP (*crtbegin*.o(.dtors))}
- ${CONSTRUCTING+ KEEP (*(EXCLUDE_FILE (*crtend*.o) .dtors))}
+ ${CONSTRUCTING+ KEEP (*crtbegin.o(.dtors))}
+ ${CONSTRUCTING+ KEEP (*crtbegin?.o(.dtors))}
+ ${CONSTRUCTING+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))}
${CONSTRUCTING+ KEEP (*(SORT(.dtors.*)))}
${CONSTRUCTING+ KEEP (*(.dtors))}
${CONSTRUCTING+ PROVIDE(___dtors_end = .);}
diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc
index ac0c7256e2ea..205d1624abc0 100644
--- a/ld/scripttempl/elf.sc
+++ b/ld/scripttempl/elf.sc
@@ -14,6 +14,8 @@
# (e.g., .PARISC.global)
# OTHER_RELRO_SECTIONS - other than .data.rel.ro ...
# (e.g. PPC32 .fixup, .got[12])
+# OTHER_BSS_SECTIONS - other than .bss .sbss ...
+# ATTRS_SECTIONS - at the end
# OTHER_SECTIONS - at the end
# EXECUTABLE_SYMBOLS - symbols that must be defined for an
# executable (e.g., _DYNAMIC_LINK)
@@ -52,6 +54,7 @@
# so that .got can be in the RELRO area. It should be set to
# the number of bytes in the beginning of .got.plt which can be
# in the RELRO area as well.
+# USER_LABEL_PREFIX - prefix to add to user-visible symbols.
#
# When adding sections, do note that the names of some sections are used
# when specifying the start address of the next.
@@ -94,6 +97,7 @@ test -z "${ETEXT_NAME}" && ETEXT_NAME=etext
test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT
+test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
DATA_SEGMENT_RELRO_END=""
DATA_SEGMENT_END=""
@@ -102,7 +106,9 @@ if test -n "${COMMONPAGESIZE}"; then
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 "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
+ INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
+fi
if test -z "$PLT"; then
PLT=".plt ${RELOCATING-0} : { *(.plt) }"
fi
@@ -173,13 +179,15 @@ test "${LARGE_SECTIONS}" = "yes" && REL_LARGE="
.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="
+test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS="
+ ${OTHER_BSS_SECTIONS}
.lbss ${RELOCATING-0} :
{
*(.dynlbss)
*(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*})
*(LARGE_COMMON)
- }
+ }"
+test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
.lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
{
*(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*})
@@ -202,14 +210,15 @@ CTOR=".ctors ${CONSTRUCTING-0} :
doesn't matter which directory crtbegin.o
is in. */
- KEEP (*crtbegin*.o(.ctors))
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
${CONSTRUCTING+${CTOR_END}}
@@ -217,8 +226,9 @@ CTOR=".ctors ${CONSTRUCTING-0} :
DTOR=".dtors ${CONSTRUCTING-0} :
{
${CONSTRUCTING+${DTOR_START}}
- KEEP (*crtbegin*.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
${CONSTRUCTING+${DTOR_END}}
@@ -256,10 +266,10 @@ SECTIONS
${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) }
+ .gnu.hash ${RELOCATING-0} : { *(.gnu.hash) }
.dynsym ${RELOCATING-0} : { *(.dynsym) }
.dynstr ${RELOCATING-0} : { *(.dynstr) }
.gnu.version ${RELOCATING-0} : { *(.gnu.version) }
@@ -378,23 +388,23 @@ cat <<EOF
.preinit_array ${RELOCATING-0} :
{
- ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_start = .);}}
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}}
KEEP (*(.preinit_array))
- ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_end = .);}}
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
}
.init_array ${RELOCATING-0} :
{
- ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_start = .);}}
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
- ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_end = .);}}
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
}
.fini_array ${RELOCATING-0} :
{
- ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
- ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
}
${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
@@ -416,7 +426,7 @@ cat <<EOF
{
${RELOCATING+${DATA_START_SYMBOLS}}
*(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
- KEEP (*(.gnu.linkonce.d.*personality*))
+ ${RELOCATING+KEEP (*(.gnu.linkonce.d.*personality*))}
${CONSTRUCTING+SORT(CONSTRUCTORS)}
}
.data1 ${RELOCATING-0} : { *(.data1) }
@@ -430,7 +440,7 @@ cat <<EOF
${SDATA_GOT+${OTHER_GOT_SECTIONS}}
${SDATA}
${OTHER_SDATA_SECTIONS}
- ${RELOCATING+${DATA_END_SYMBOLS-_edata = .; PROVIDE (edata = .);}}
+ ${RELOCATING+${DATA_END_SYMBOLS-${USER_LABEL_PREFIX}_edata = .; PROVIDE (${USER_LABEL_PREFIX}edata = .);}}
${RELOCATING+__bss_start = .;}
${RELOCATING+${OTHER_BSS_SYMBOLS}}
${SBSS}
@@ -447,12 +457,13 @@ cat <<EOF
pad the .data section. */
${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
}
+ ${OTHER_BSS_SECTIONS}
${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
${RELOCATING+. = ALIGN(${ALIGNMENT});}
${LARGE_SECTIONS}
${RELOCATING+. = ALIGN(${ALIGNMENT});}
${RELOCATING+${OTHER_END_SYMBOLS}}
- ${RELOCATING+${END_SYMBOLS-_end = .; PROVIDE (end = .);}}
+ ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
${RELOCATING+${DATA_SEGMENT_END}}
/* Stabs debugging sections. */
@@ -482,7 +493,7 @@ cat <<EOF
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
- .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*}) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
@@ -496,10 +507,15 @@ cat <<EOF
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
+ /* DWARF 3 */
+ .debug_pubtypes 0 : { *(.debug_pubtypes) }
+ .debug_ranges 0 : { *(.debug_ranges) }
+
${TINY_DATA_SECTION}
${TINY_BSS_SECTION}
${STACK_ADDR+${STACK}}
+ ${ATTRS_SECTIONS}
${OTHER_SECTIONS}
${RELOCATING+${OTHER_SYMBOLS}}
${RELOCATING+${STACKNOTE}}
diff --git a/ld/scripttempl/elf32cr16.sc b/ld/scripttempl/elf32cr16.sc
new file mode 100644
index 000000000000..2e62fa2f5c76
--- /dev/null
+++ b/ld/scripttempl/elf32cr16.sc
@@ -0,0 +1,175 @@
+# Linker Script for National Semiconductor's CR16-ELF32.
+
+# The next line should be uncommented if it is desired to link
+# without libstart.o and directly enter main.
+
+# ENTRY=_main
+
+test -z "$ENTRY" && ENTRY=_start
+cat <<EOF
+
+/* Example Linker Script for linking NS CR16 elf32 files. */
+
+/* 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/ld/scripttempl/elf32crx.sc b/ld/scripttempl/elf32crx.sc
index 63401fe7e2c1..430418744f91 100644
--- a/ld/scripttempl/elf32crx.sc
+++ b/ld/scripttempl/elf32crx.sc
@@ -90,14 +90,15 @@ SECTIONS
doesn't matter which directory crtbegin.o
is in. */
- KEEP (*crtbegin*.o(.ctors))
-
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend*.o) .ctors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
__CTOR_END = .;
@@ -106,8 +107,9 @@ SECTIONS
.dtor ALIGN(4) :
{
__DTOR_START = .;
- KEEP (*crtbegin*.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend*.o) .dtors))
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
__DTOR_END = .;
diff --git a/ld/scripttempl/elf32sh-symbian.sc b/ld/scripttempl/elf32sh-symbian.sc
index 1bcac18106a8..aab35d5232f5 100644
--- a/ld/scripttempl/elf32sh-symbian.sc
+++ b/ld/scripttempl/elf32sh-symbian.sc
@@ -8,6 +8,7 @@
# OTHER_TEXT_SECTIONS - these get put in .text when relocating
# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
# (e.g., .PARISC.global)
+# ATTRS_SECTIONS - at the end
# OTHER_SECTIONS - at the end
# EXECUTABLE_SYMBOLS - symbols that must be defined for an
# executable (e.g., _DYNAMIC_LINK)
@@ -71,6 +72,7 @@ test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
test "$LD_FLAG" = "N" && DATA_ADDR=.
test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
+test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
DATA_SEGMENT_END=""
if test -n "${COMMONPAGESIZE}"; then
@@ -96,14 +98,15 @@ CTOR=".ctors ALIGN(4) :
doesn't matter which directory crtbegin.o
is in. */
- KEEP (*crtbegin*.o(.ctors))
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
${CONSTRUCTING+${CTOR_END}}
@@ -111,8 +114,9 @@ CTOR=".ctors ALIGN(4) :
DTOR=".dtors ALIGN(4) :
{
${CONSTRUCTING+${DTOR_START}}
- KEEP (*crtbegin*.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
${CONSTRUCTING+${DTOR_END}}
@@ -373,6 +377,7 @@ cat <<EOF
.debug_varnames 0 : { *(.debug_varnames) }
${STACK_ADDR+${STACK}}
+ ${ATTRS_SECTIONS}
${OTHER_SECTIONS}
${RELOCATING+${OTHER_SYMBOLS}}
${RELOCATING+${STACKNOTE}}
diff --git a/ld/scripttempl/elf_chaos.sc b/ld/scripttempl/elf_chaos.sc
index 167b7124ef67..2725cf5081a1 100644
--- a/ld/scripttempl/elf_chaos.sc
+++ b/ld/scripttempl/elf_chaos.sc
@@ -10,6 +10,7 @@
# OTHER_TEXT_SECTIONS - these get put in .text when relocating
# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
# (e.g., .PARISC.global)
+# ATTRS_SECTIONS - at the end
# OTHER_SECTIONS - at the end
# EXECUTABLE_SYMBOLS - symbols that must be defined for an
# executable (e.g., _DYNAMIC_LINK)
@@ -68,6 +69,7 @@ test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
test -z "${ELFSIZE}" && ELFSIZE=32
test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
+test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
test "$LD_FLAG" = "N" && DATA_ADDR=.
INTERP=".interp ${RELOCATING-0} : { *(.interp) }"
PLT=".plt ${RELOCATING-0} : { *(.plt) }"
@@ -115,22 +117,24 @@ CTOR="
doesn't matter which directory crtbegin.o
is in. */
- KEEP (*crtbegin*.o(.ctors))
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
${CONSTRUCTING+${CTOR_END}}
"
DTOR="
${CONSTRUCTING+${DTOR_START}}
- KEEP (*crtbegin*.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
${CONSTRUCTING+${DTOR_END}}
@@ -347,6 +351,7 @@ cat <<EOF
.debug_varnames 0 : { *(.debug_varnames) }
${STACK_ADDR+${STACK}}
+ ${ATTRS_SECTIONS}
${OTHER_SECTIONS}
${RELOCATING+${OTHER_SYMBOLS}}
}
diff --git a/ld/scripttempl/elfd10v.sc b/ld/scripttempl/elfd10v.sc
index 6145fda45501..a4c907b44a8f 100644
--- a/ld/scripttempl/elfd10v.sc
+++ b/ld/scripttempl/elfd10v.sc
@@ -20,14 +20,15 @@ CTOR=".ctors ${CONSTRUCTING-0} :
doesn't matter which directory crtbegin.o
is in. */
- KEEP (*crtbegin*.o(.ctors))
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend*.o) .ctors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
${CONSTRUCTING+${CTOR_END}}
@@ -36,8 +37,9 @@ CTOR=".ctors ${CONSTRUCTING-0} :
DTOR=" .dtors ${CONSTRUCTING-0} :
{
${CONSTRUCTING+${DTOR_START}}
- KEEP (*crtbegin*.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend*.o) .dtors))
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
${CONSTRUCTING+${DTOR_END}}
diff --git a/ld/scripttempl/elfd30v.sc b/ld/scripttempl/elfd30v.sc
index 924414d509de..b5db0e6ca911 100644
--- a/ld/scripttempl/elfd30v.sc
+++ b/ld/scripttempl/elfd30v.sc
@@ -12,14 +12,15 @@ CTOR=".ctors ${CONSTRUCTING-0} :
doesn't matter which directory crtbegin.o
is in. */
- KEEP (*crtbegin*.o(.ctors))
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend*.o) .ctors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
${CONSTRUCTING+ __CTOR_END__ = .; }
@@ -28,8 +29,9 @@ CTOR=".ctors ${CONSTRUCTING-0} :
DTOR=" .dtors ${CONSTRUCTING-0} :
{
${CONSTRUCTING+ __DTOR_LIST__ = .; }
- KEEP (*crtbegin*.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend*.o) .dtors))
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
${CONSTRUCTING+ __DTOR_END__ = .; }
diff --git a/ld/scripttempl/elfi370.sc b/ld/scripttempl/elfi370.sc
index 6b390fe95cf6..06cb3bacf057 100644
--- a/ld/scripttempl/elfi370.sc
+++ b/ld/scripttempl/elfi370.sc
@@ -8,6 +8,7 @@
# (e.g., .PARISC.milli)
# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
# (e.g., .PARISC.global)
+# ATTRS_SECTIONS - at the end
# OTHER_SECTIONS - at the end
# EXECUTABLE_SYMBOLS - symbols that must be defined for an
# executable (e.g., _DYNAMIC_LINK)
@@ -24,6 +25,7 @@
test -z "$ENTRY" && ENTRY=_start
test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
test "$LD_FLAG" = "N" && DATA_ADDR=.
SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2) }"
SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2) }"
@@ -212,6 +214,7 @@ SECTIONS
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
+ ${ATTRS_SECTIONS}
${OTHER_SECTIONS}
}
EOF
diff --git a/ld/scripttempl/elfxtensa.sc b/ld/scripttempl/elfxtensa.sc
index 9c3aa1fe5e70..29282aa04c09 100644
--- a/ld/scripttempl/elfxtensa.sc
+++ b/ld/scripttempl/elfxtensa.sc
@@ -14,6 +14,8 @@
# (e.g., .PARISC.global)
# OTHER_RELRO_SECTIONS - other than .data.rel.ro ...
# (e.g. PPC32 .fixup, .got[12])
+# OTHER_BSS_SECTIONS - other than .bss .sbss ...
+# ATTRS_SECTIONS - at the end
# OTHER_SECTIONS - at the end
# EXECUTABLE_SYMBOLS - symbols that must be defined for an
# executable (e.g., _DYNAMIC_LINK)
@@ -52,6 +54,7 @@
# so that .got can be in the RELRO area. It should be set to
# the number of bytes in the beginning of .got.plt which can be
# in the RELRO area as well.
+# USER_LABEL_PREFIX - prefix to add to user-visible symbols.
#
# When adding sections, do note that the names of some sections are used
# when specifying the start address of the next.
@@ -77,6 +80,22 @@
# .debug_info .gnu.linkonce.wi.foo
# .tdata .gnu.linkonce.td.foo
# .tbss .gnu.linkonce.tb.foo
+# .lrodata .gnu.linkonce.lr.foo
+# .ldata .gnu.linkonce.l.foo
+# .lbss .gnu.linkonce.lb.foo
+#
+# plus exception-handling information for Tensilica's XCC compiler:
+# .xt_except_table .gnu.linkonce.e.foo
+# .xt_except_desc .gnu.linkonce.h.foo
+#
+# plus Xtensa-specific literal sections:
+# .literal .gnu.linkonce.literal.foo
+# .lit4 .gnu.linkonce.lit4.foo
+#
+# plus Xtensa-specific "property table" sections:
+# .xt.lit .gnu.linkonce.p.foo
+# .xt.insn .gnu.linkonce.x.foo (obsolete)
+# .xt.prop .gnu.linkonce.prop.foo
#
# Each of these can also have corresponding .rel.* and .rela.* sections.
@@ -91,6 +110,7 @@ test -z "${ETEXT_NAME}" && ETEXT_NAME=etext
test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT
+test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
DATA_SEGMENT_RELRO_END=""
DATA_SEGMENT_END=""
@@ -99,10 +119,13 @@ if test -n "${COMMONPAGESIZE}"; then
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 "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
+ INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
+fi
if test -z "$PLT"; then
PLT=".plt ${RELOCATING-0} : { *(.plt) }"
fi
+test -n "${DATA_PLT-${BSS_PLT-text}}" && TEXT_PLT=yes
if test -z "$GOT"; then
if test -z "$SEPARATE_GOTPLT"; then
GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }"
@@ -113,7 +136,7 @@ if test -z "$GOT"; then
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*) }"
+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) }"
INIT_LIT=".init.literal 0 : { *(.init.literal) }"
INIT=".init 0 : { *(.init) }"
@@ -122,10 +145,12 @@ FINI=".fini 0 : { *(.fini) }"
if test -z "${NO_SMALL_DATA}"; then
SBSS=".sbss ${RELOCATING-0} :
{
+ ${RELOCATING+${SBSS_START_SYMBOLS}}
${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)}
*(.dynsbss)
*(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*})
*(.scommon)
+ ${RELOCATING+${SBSS_END_SYMBOLS}}
}"
SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }"
SDATA="/* We want the small data sections together, so single-instruction offsets
@@ -137,7 +162,11 @@ if test -z "${NO_SMALL_DATA}"; then
${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)}
*(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*})
}"
- SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }"
+ 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.*}) }
@@ -160,6 +189,31 @@ if test -z "${SDATA_GOT}"; then
fi
fi
test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" "
+test "${LARGE_SECTIONS}" = "yes" && REL_LARGE="
+ .rel.ldata ${RELOCATING-0} : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) }
+ .rela.ldata ${RELOCATING-0} : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) }
+ .rel.lbss ${RELOCATING-0} : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) }
+ .rela.lbss ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) }
+ .rel.lrodata ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) }
+ .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }"
+test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS="
+ ${OTHER_BSS_SECTIONS}
+ .lbss ${RELOCATING-0} :
+ {
+ *(.dynlbss)
+ *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*})
+ *(LARGE_COMMON)
+ }"
+test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
+ .lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
+ {
+ *(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*})
+ }
+ .ldata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
+ {
+ *(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*})
+ ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
+ }"
CTOR=".ctors ${CONSTRUCTING-0} :
{
${CONSTRUCTING+${CTOR_START}}
@@ -173,14 +227,15 @@ CTOR=".ctors ${CONSTRUCTING-0} :
doesn't matter which directory crtbegin.o
is in. */
- KEEP (*crtbegin*.o(.ctors))
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
${CONSTRUCTING+${CTOR_END}}
@@ -188,8 +243,9 @@ CTOR=".ctors ${CONSTRUCTING-0} :
DTOR=".dtors ${CONSTRUCTING-0} :
{
${CONSTRUCTING+${DTOR_START}}
- KEEP (*crtbegin*.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
${CONSTRUCTING+${DTOR_END}}
@@ -211,8 +267,6 @@ 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
@@ -226,10 +280,10 @@ SECTIONS
${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) }
+ .gnu.hash ${RELOCATING-0} : { *(.gnu.hash) }
.dynsym ${RELOCATING-0} : { *(.dynsym) }
.dynstr ${RELOCATING-0} : { *(.dynstr) }
.gnu.version ${RELOCATING-0} : { *(.gnu.version) }
@@ -252,8 +306,8 @@ eval $COMBRELOCCAT <<EOF
.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.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.*}) }
@@ -273,6 +327,7 @@ eval $COMBRELOCCAT <<EOF
${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
@@ -298,7 +353,8 @@ cat <<EOF
${RELOCATING-$INIT_LIT}
${RELOCATING-$INIT}
- ${DATA_PLT-${BSS_PLT-${PLT}}}
+ ${TEXT_PLT+${PLT}}
+ ${TINY_READONLY_SECTION}
.text ${RELOCATING-0} :
{
*(.got.plt* .plt*)
@@ -309,7 +365,7 @@ cat <<EOF
${RELOCATING+${INIT_END}}
${RELOCATING+${TEXT_START_SYMBOLS}}
- *(.literal .text .stub${RELOCATING+ .text.* .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*})
+ *(.literal .text .stub${RELOCATING+ .literal.* .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)
@@ -334,7 +390,7 @@ cat <<EOF
${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.*) }
+ .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. */
@@ -344,7 +400,7 @@ cat <<EOF
/* 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.*) }
+ .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.*}) }
@@ -352,25 +408,24 @@ cat <<EOF
.preinit_array ${RELOCATING-0} :
{
- ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_start = .);}}
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}}
KEEP (*(.preinit_array))
- ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_end = .);}}
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
}
.init_array ${RELOCATING-0} :
{
- ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_start = .);}}
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
- ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_end = .);}}
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
}
.fini_array ${RELOCATING-0} :
{
- ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
- ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
}
-
${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
.jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
@@ -391,7 +446,7 @@ cat <<EOF
{
${RELOCATING+${DATA_START_SYMBOLS}}
*(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
- KEEP (*(.gnu.linkonce.d.*personality*))
+ ${RELOCATING+KEEP (*(.gnu.linkonce.d.*personality*))}
${CONSTRUCTING+SORT(CONSTRUCTORS)}
}
.data1 ${RELOCATING-0} : { *(.data1) }
@@ -405,7 +460,7 @@ cat <<EOF
${SDATA_GOT+${OTHER_GOT_SECTIONS}}
${SDATA}
${OTHER_SDATA_SECTIONS}
- ${RELOCATING+${DATA_END_SYMBOLS-_edata = .; PROVIDE (edata = .);}}
+ ${RELOCATING+${DATA_END_SYMBOLS-${USER_LABEL_PREFIX}_edata = .; PROVIDE (${USER_LABEL_PREFIX}edata = .);}}
${RELOCATING+__bss_start = .;}
${RELOCATING+${OTHER_BSS_SYMBOLS}}
${SBSS}
@@ -417,14 +472,18 @@ cat <<EOF
*(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});}
+ .bss section disappears because there are no input sections.
+ FIXME: Why do we need it? When there is no .bss section, we don't
+ pad the .data section. */
+ ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
}
+ ${OTHER_BSS_SECTIONS}
${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${LARGE_SECTIONS}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
${RELOCATING+${OTHER_END_SYMBOLS}}
- ${RELOCATING+_end = .;}
- ${RELOCATING+PROVIDE (end = .);}
+ ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
${RELOCATING+${DATA_SEGMENT_END}}
/* Stabs debugging sections. */
@@ -454,7 +513,7 @@ cat <<EOF
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
- .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
+ .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*}) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
@@ -468,7 +527,15 @@ cat <<EOF
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
+ /* DWARF 3 */
+ .debug_pubtypes 0 : { *(.debug_pubtypes) }
+ .debug_ranges 0 : { *(.debug_ranges) }
+
+ ${TINY_DATA_SECTION}
+ ${TINY_BSS_SECTION}
+
${STACK_ADDR+${STACK}}
+ ${ATTRS_SECTIONS}
${OTHER_SECTIONS}
${RELOCATING+${OTHER_SYMBOLS}}
${RELOCATING+${STACKNOTE}}
diff --git a/ld/scripttempl/iq2000.sc b/ld/scripttempl/iq2000.sc
index b0872643153d..b1e0cf4bfaca 100644
--- a/ld/scripttempl/iq2000.sc
+++ b/ld/scripttempl/iq2000.sc
@@ -83,14 +83,15 @@ CTOR=".ctors ${CONSTRUCTING-0} :
doesn't matter which directory crtbegin.o
is in. */
- KEEP (*crtbegin*.o(.ctors))
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
${CONSTRUCTING+${CTOR_END}}
@@ -99,8 +100,9 @@ CTOR=".ctors ${CONSTRUCTING-0} :
DTOR=" .dtors ${CONSTRUCTING-0} :
{
${CONSTRUCTING+${DTOR_START}}
- KEEP (*crtbegin*.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
${CONSTRUCTING+${DTOR_END}}
diff --git a/ld/scripttempl/mep.sc b/ld/scripttempl/mep.sc
new file mode 100644
index 000000000000..0d459c65b0a8
--- /dev/null
+++ b/ld/scripttempl/mep.sc
@@ -0,0 +1,446 @@
+#
+# Unusual variables checked by this code:
+# NOP - four byte opcode for no-op (defaults to 0)
+# NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not
+# empty.
+# SMALL_DATA_CTOR - .ctors contains small data.
+# SMALL_DATA_DTOR - .dtors contains small data.
+# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
+# INITIAL_READONLY_SECTIONS - at start of text segment
+# OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
+# (e.g., .PARISC.milli)
+# OTHER_TEXT_SECTIONS - these get put in .text when relocating
+# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
+# (e.g., .PARISC.global)
+# OTHER_RELRO_SECTIONS - other than .data.rel.ro ...
+# (e.g. PPC32 .fixup, .got[12])
+# OTHER_BSS_SECTIONS - other than .bss .sbss ...
+# OTHER_SECTIONS - at the end
+# EXECUTABLE_SYMBOLS - symbols that must be defined for an
+# executable (e.g., _DYNAMIC_LINK)
+# TEXT_START_ADDR - the first byte of the text segment, after any
+# headers.
+# TEXT_BASE_ADDRESS - the first byte of the text segment.
+# TEXT_START_SYMBOLS - symbols that appear at the start of the
+# .text section.
+# DATA_START_SYMBOLS - symbols that appear at the start of the
+# .data section.
+# OTHER_GOT_SYMBOLS - symbols defined just before .got.
+# OTHER_GOT_SECTIONS - sections just after .got.
+# OTHER_SDATA_SECTIONS - sections just after .sdata.
+# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+# .bss section besides __bss_start.
+# DATA_PLT - .plt should be in data segment, not text segment.
+# PLT_BEFORE_GOT - .plt just before .got when .plt is in data segement.
+# BSS_PLT - .plt should be in bss segment
+# TEXT_DYNAMIC - .dynamic in text segment, not data segment.
+# EMBEDDED - whether this is for an embedded system.
+# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set
+# start address of shared library.
+# INPUT_FILES - INPUT command of files to always include
+# WRITABLE_RODATA - if set, the .rodata section should be writable
+# INIT_START, INIT_END - statements just before and just after
+# combination of .init sections.
+# FINI_START, FINI_END - statements just before and just after
+# combination of .fini sections.
+# STACK_ADDR - start of a .stack section.
+# OTHER_END_SYMBOLS - symbols to place right at the end of the script.
+# SEPARATE_GOTPLT - if set, .got.plt should be separate output section,
+# so that .got can be in the RELRO area. It should be set to
+# the number of bytes in the beginning of .got.plt which can be
+# in the RELRO area as well.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+
+# Many sections come in three flavours. There is the 'real' section,
+# like ".data". Then there are the per-procedure or per-variable
+# sections, generated by -ffunction-sections and -fdata-sections in GCC,
+# and useful for --gc-sections, which for a variable "foo" might be
+# ".data.foo". Then there are the linkonce sections, for which the linker
+# eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
+# The exact correspondences are:
+#
+# Section Linkonce section
+# .text .gnu.linkonce.t.foo
+# .rodata .gnu.linkonce.r.foo
+# .data .gnu.linkonce.d.foo
+# .bss .gnu.linkonce.b.foo
+# .sdata .gnu.linkonce.s.foo
+# .sbss .gnu.linkonce.sb.foo
+# .sdata2 .gnu.linkonce.s2.foo
+# .sbss2 .gnu.linkonce.sb2.foo
+# .debug_info .gnu.linkonce.wi.foo
+# .tdata .gnu.linkonce.td.foo
+# .tbss .gnu.linkonce.tb.foo
+#
+# Each of these can also have corresponding .rel.* and .rela.* sections.
+
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test -z "${ELFSIZE}" && ELFSIZE=32
+test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
+test "$LD_FLAG" = "N" && DATA_ADDR=.
+test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
+test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
+test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT
+DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
+DATA_SEGMENT_RELRO_END=""
+DATA_SEGMENT_RELRO_GOTPLT_END=""
+DATA_SEGMENT_END=""
+if test -n "${COMMONPAGESIZE}"; then
+ DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})"
+ DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);"
+ if test -n "${SEPARATE_GOTPLT}"; then
+ DATA_SEGMENT_RELRO_GOTPLT_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT}, .);"
+ else
+ DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (0, .);"
+ fi
+fi
+INTERP=".interp ${RELOCATING-0} : { *(.interp) }"
+PLT=".plt ${RELOCATING-0} : { *(.plt) }"
+if test -z "$GOT"; then
+ if test -z "$SEPARATE_GOTPLT"; then
+ GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }"
+ else
+ GOT=".got ${RELOCATING-0} : { *(.got) }"
+ GOTPLT="${RELOCATING+${DATA_SEGMENT_RELRO_GOTPLT_END}}
+ .got.plt ${RELOCATING-0} : { *(.got.plt) }"
+ fi
+fi
+DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }"
+RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }"
+DATARELRO=".data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }"
+STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) }"
+if test -z "${NO_SMALL_DATA}"; then
+ SBSS=".sbss ${RELOCATING-0} :
+ {
+ ${RELOCATING+PROVIDE (__sbss_start = .);}
+ ${RELOCATING+PROVIDE (___sbss_start = .);}
+ ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)}
+ *(.dynsbss)
+ *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*})
+ *(.scommon)
+ ${RELOCATING+PROVIDE (__sbss_end = .);}
+ ${RELOCATING+PROVIDE (___sbss_end = .);}
+ }"
+ SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }"
+ SDATA="/* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata ${RELOCATING-0} :
+ {
+ ${RELOCATING+${SDATA_START_SYMBOLS}}
+ ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)}
+ *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*})
+ }"
+ SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }"
+ REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }
+ .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }"
+ REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }
+ .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }"
+ REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) }
+ .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }"
+ REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) }
+ .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }"
+else
+ NO_SMALL_DATA=" "
+fi
+test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" "
+CTOR=".ctors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${CTOR_START}}
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+
+ KEEP (*crtbegin*.o(.ctors))
+
+ /* We don't want to include the .ctor section from
+ from the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+
+ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+${CTOR_END}}
+ }"
+DTOR=".dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+${DTOR_START}}
+ KEEP (*crtbegin*.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ ${CONSTRUCTING+${DTOR_END}}
+ }"
+STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
+ {
+ ${RELOCATING+_stack = .;}
+ *(.stack)
+ }"
+
+# if this is for an embedded system, don't add SIZEOF_HEADERS.
+if [ -z "$EMBEDDED" ]; then
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS"
+else
+ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
+fi
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+ "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${OUTPUT_ARCH})
+ENTRY(${ENTRY})
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+/* Do we need any of these for elf?
+ __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+${INPUT_FILES}}
+${RELOCATING- /* For some reason, the Solaris linker makes bad executables
+ if gld -r is used and the intermediate file has sections starting
+ at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
+ bug. But for now assigning the zero vmas works. */}
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR}); . = ${TEXT_BASE_ADDRESS};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}}
+ ${CREATE_SHLIB-${INTERP}}
+ ${INITIAL_READONLY_SECTIONS}
+ ${TEXT_DYNAMIC+${DYNAMIC}}
+ .hash ${RELOCATING-0} : { *(.hash) }
+ .dynsym ${RELOCATING-0} : { *(.dynsym) }
+ .dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }
+
+EOF
+if [ "x$COMBRELOC" = x ]; then
+ COMBRELOCCAT=cat
+else
+ COMBRELOCCAT="cat > $COMBRELOC"
+fi
+eval $COMBRELOCCAT <<EOF
+ .rel.init ${RELOCATING-0} : { *(.rel.init) }
+ .rela.init ${RELOCATING-0} : { *(.rela.init) }
+ .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
+ .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
+ .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
+ .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
+ .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }
+ .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }
+ ${OTHER_READONLY_RELOC_SECTIONS}
+ .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+*}) }
+ .rela.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+*}) }
+ .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
+ .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
+ .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }
+ .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }
+ .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }
+ .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }
+ .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
+ .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
+ .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
+ .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
+ .rel.got ${RELOCATING-0} : { *(.rel.got) }
+ .rela.got ${RELOCATING-0} : { *(.rela.got) }
+ ${OTHER_GOT_RELOC_SECTIONS}
+ ${REL_SDATA}
+ ${REL_SBSS}
+ ${REL_SDATA2}
+ ${REL_SBSS2}
+ .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) }
+ .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) }
+EOF
+if [ -n "$COMBRELOC" ]; then
+cat <<EOF
+ .rel.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC
+cat <<EOF
+ }
+ .rela.dyn ${RELOCATING-0} :
+ {
+EOF
+sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC
+cat <<EOF
+ }
+EOF
+fi
+cat <<EOF
+ .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
+ .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+ ${OTHER_PLT_RELOC_SECTIONS}
+
+ .init ${RELOCATING-0} :
+ {
+ ${RELOCATING+${INIT_START}}
+ KEEP (*(.init))
+ ${RELOCATING+${INIT_END}}
+ } =${NOP-0}
+
+ ${DATA_PLT-${BSS_PLT-${PLT}}}
+ .text ${RELOCATING-0} :
+ {
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
+ 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 = .);}
+ ${RELOCATING+PROVIDE (_etext = .);}
+ ${RELOCATING+PROVIDE (etext = .);}
+ ${WRITABLE_RODATA-${RODATA}}
+ .rodata1 ${RELOCATING-0} : { *(.rodata1) }
+ ${CREATE_SHLIB-${SDATA2}}
+ ${CREATE_SHLIB-${SBSS2}}
+ ${OTHER_READONLY_SECTIONS}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
+ ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
+ ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
+
+ /* Exception handling */
+ .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+ .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
+
+ /* Thread Local Storage sections */
+ .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
+ .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
+
+ .preinit_array ${RELOCATING-0} : { KEEP (*(.preinit_array)) }
+ .init_array ${RELOCATING-0} : { KEEP (*(.init_array)) }
+ .fini_array ${RELOCATING-0} : { KEEP (*(.fini_array)) }
+
+ ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
+ ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
+ .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
+
+ ${RELOCATING+${DATARELRO}}
+ ${OTHER_RELRO_SECTIONS}
+ ${TEXT_DYNAMIC-${DYNAMIC}}
+ ${NO_SMALL_DATA+${RELRO_NOW+${GOT}}}
+ ${NO_SMALL_DATA+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}}}}
+ ${NO_SMALL_DATA+${RELRO_NOW-${SEPARATE_GOTPLT+${GOTPLT}}}}
+ ${RELOCATING+${DATA_SEGMENT_RELRO_END}}
+ ${NO_SMALL_DATA+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}}}}
+
+ ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}}
+
+ .data ${RELOCATING-0} :
+ {
+ ${RELOCATING+${DATA_START_SYMBOLS}}
+ *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
+ 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}}}
+ ${RELOCATING+${OTHER_GOT_SYMBOLS}}
+ ${NO_SMALL_DATA-${GOT}}
+ ${OTHER_GOT_SECTIONS}
+ ${SDATA}
+ ${OTHER_SDATA_SECTIONS}
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+PROVIDE (edata = .);}
+ ${RELOCATING+__bss_start = .;}
+ ${RELOCATING+${OTHER_BSS_SYMBOLS}}
+ ${SBSS}
+ ${BSS_PLT+${PLT}}
+ .bss ${RELOCATING-0} :
+ {
+ *(.dynbss)
+ *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ }
+ ${OTHER_BSS_SECTIONS}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${RELOCATING+_end = .;}
+ ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
+ ${RELOCATING+PROVIDE (end = .);}
+ ${RELOCATING+${DATA_SEGMENT_END}}
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .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_END_SYMBOLS}}
+ ${RELOCATING+${STACKNOTE}}
+}
+EOF
diff --git a/ld/scripttempl/mmo.sc b/ld/scripttempl/mmo.sc
index 643b349539e3..599db83199dd 100644
--- a/ld/scripttempl/mmo.sc
+++ b/ld/scripttempl/mmo.sc
@@ -29,8 +29,9 @@ SECTIONS
${RELOCATING+ PROVIDE (__ctors_start = .);}
${RELOCATING+ PROVIDE (_ctors = .);}
${RELOCATING+ PROVIDE (__ctors = .);}
- ${RELOCATING+ KEEP (*crtbegin*.o(.ctors))}
- ${RELOCATING+ KEEP (*(EXCLUDE_FILE (*crtend*.o) .ctors))}
+ ${RELOCATING+ KEEP (*crtbegin.o(.ctors))}
+ ${RELOCATING+ KEEP (*crtbegin?.o(.ctors))}
+ ${RELOCATING+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))}
${RELOCATING+ KEEP (*(SORT(.ctors.*)))}
${RELOCATING+ KEEP (*(.ctors))}
${RELOCATING+ PROVIDE (_ctors_end = .);}
@@ -40,8 +41,9 @@ SECTIONS
${RELOCATING+ PROVIDE (__dtors_start = .);}
${RELOCATING+ PROVIDE (_dtors = .);}
${RELOCATING+ PROVIDE (__dtors = .);}
- ${RELOCATING+ KEEP (*crtbegin*.o(.dtors))}
- ${RELOCATING+ KEEP (*(EXCLUDE_FILE (*crtend*.o) .dtors))}
+ ${RELOCATING+ KEEP (*crtbegin.o(.dtors))}
+ ${RELOCATING+ KEEP (*crtbegin?.o(.dtors))}
+ ${RELOCATING+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))}
${RELOCATING+ KEEP (*(SORT(.dtors.*)))}
${RELOCATING+ KEEP (*(.dtors))}
${RELOCATING+ PROVIDE (_dtors_end = .);}
diff --git a/ld/scripttempl/pep.sc b/ld/scripttempl/pep.sc
new file mode 100644
index 000000000000..edad5ee8ecc8
--- /dev/null
+++ b/ld/scripttempl/pep.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 pep.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/ld/scripttempl/xstormy16.sc b/ld/scripttempl/xstormy16.sc
index dd7c52cb9d4c..9008f5ce8e06 100644
--- a/ld/scripttempl/xstormy16.sc
+++ b/ld/scripttempl/xstormy16.sc
@@ -67,14 +67,15 @@ CTOR=".ctors ${CONSTRUCTING-0} :
doesn't matter which directory crtbegin.o
is in. */
- KEEP (*crtbegin*.o(.ctors))
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
${CONSTRUCTING+${CTOR_END}}
@@ -83,8 +84,9 @@ CTOR=".ctors ${CONSTRUCTING-0} :
DTOR=" .dtors ${CONSTRUCTING-0} :
{
${CONSTRUCTING+${DTOR_START}}
- KEEP (*crtbegin*.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors))
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
${CONSTRUCTING+${DTOR_END}}
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 521747d7622d..7cb33ce74839 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,380 +1,591 @@
-2006-07-12 Richard Sandiford <richard@codesourcery.com>
+2007-07-02 Nathan Sidwell <nathan@codesourcery.com>
- * ld-m68k/merge-ok-1c.d: New test.
- * ld-m68k/m68k.exp: Run it.
+ * ld-scripts/alignof.exp: Skip on non-elf
-2006-07-04 Daniel Jacobowitz <dan@codesourcery.com>
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
- Backport:
- 2006-05-19 Alan Modra <amodra@bigpond.net.au>
- * ld-scripts/empty-orphan.d: Update again.
+ * ld-powerpc/attr-gnu-4-0.s, ld-powerpc/attr-gnu-4-00.d,
+ ld-powerpc/attr-gnu-4-01.d, ld-powerpc/attr-gnu-4-02.d,
+ ld-powerpc/attr-gnu-4-1.s, ld-powerpc/attr-gnu-4-10.d,
+ ld-powerpc/attr-gnu-4-11.d, ld-powerpc/attr-gnu-4-12.d,
+ ld-powerpc/attr-gnu-4-13.d, ld-powerpc/attr-gnu-4-2.s,
+ ld-powerpc/attr-gnu-4-20.d, ld-powerpc/attr-gnu-4-21.d,
+ ld-powerpc/attr-gnu-4-22.d, ld-powerpc/attr-gnu-4-3.s,
+ ld-powerpc/attr-gnu-4-31.d: New.
+ * ld-powerpc/powerpc.exp: Run these new tests.
- * ld-scripts/empty-orphan.t: Discard .reginfo.
- * ld-scripts/empty-orphan.d: Update.
+2007-06-29 Joseph Myers <joseph@codesourcery.com>
-2006-06-12 Daniel Jacobowitz <dan@codesourcery.com>
+ * ld-mips-elf/attr-gnu-4-0.s, ld-mips-elf/attr-gnu-4-00.d,
+ ld-mips-elf/attr-gnu-4-01.d, ld-mips-elf/attr-gnu-4-02.d,
+ ld-mips-elf/attr-gnu-4-03.d, ld-mips-elf/attr-gnu-4-1.s,
+ ld-mips-elf/attr-gnu-4-10.d, ld-mips-elf/attr-gnu-4-11.d,
+ ld-mips-elf/attr-gnu-4-12.d, ld-mips-elf/attr-gnu-4-13.d,
+ ld-mips-elf/attr-gnu-4-14.d, ld-mips-elf/attr-gnu-4-2.s,
+ ld-mips-elf/attr-gnu-4-20.d, ld-mips-elf/attr-gnu-4-21.d,
+ ld-mips-elf/attr-gnu-4-22.d, ld-mips-elf/attr-gnu-4-23.d,
+ ld-mips-elf/attr-gnu-4-3.s, ld-mips-elf/attr-gnu-4-30.d,
+ ld-mips-elf/attr-gnu-4-31.d, ld-mips-elf/attr-gnu-4-32.d,
+ ld-mips-elf/attr-gnu-4-33.d, ld-mips-elf/attr-gnu-4-4.s,
+ ld-mips-elf/attr-gnu-4-41.d: New.
+ * ld-mips-elf/mips-elf.exp: Run these new tests.
- 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.
+2007-06-29 Paul Brook <paul@codesourcery.com>
-2006-06-11 Richard Sandiford <richard@codesourcery.com>
+ * ld-arm/arm-elf.exp (armelftests): Add callweak.
+ * ld-arm/callweak.d: New test.
+ * ld-arm/callweak.s: New test.
- * 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.
+2007-06-28 H.J. Lu <hongjiu.lu@intel.com>
-2006-06-01 Daniel Jacobowitz <dan@codesourcery.com>
+ PR ld/4701
+ * ld-elf/noload-2.d: New.
- 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.
+2007-06-29 H.J. Lu <hjl@gnu.org>
-2006-05-22 Nick Clifton <nickc@redhat.com>
+ * ld-scripts/assert.t: Discard .reginfo sections.
- * ld-elf/start.s (start): Add this symbol for SH targets.
- (main): Add this symbol for HPPA targets.
+2007-06-26 Joseph Myers <joseph@codesourcery.com>
-2006-05-17 Daniel Jacobowitz <dan@codesourcery.com>
+ * ld-arm/attr-merge.s, ld-arm/attr-merge.attr: New.
+ * ld-arm/arm-elf.exp (armelftests): Add new test.
- 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.
+2007-06-25 Richard Sandiford <richard@codesourcery.com>
-2006-05-17 Thiemo Seufer <ths@mips.com>
+ * ld-mips-elf/mips16-local-stubs-1.s,
+ * ld-mips-elf/mips16-local-stubs-1.d: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
- * ld-elfweak/size2.d, ld-elfweak/size2a.s, ld-elfweak/size2b.s:
- Add __start as entry symbol.
+2007-06-19 H.J. Lu <hongjiu.lu@intel.com>
-2006-05-16 Thiemo Seufer <ths@mips.com>
+ PR ld/4590
+ * ld-ia64/merge1.d: New.
+ * ld-ia64/merge1.s: Likewise.
+ * ld-ia64/merge2.d: Likewise.
+ * ld-ia64/merge2.s: Likewise.
+ * ld-ia64/merge3.d: Likewise.
+ * ld-ia64/merge3.s: Likewise.
+ * ld-ia64/merge4.d: Likewise.
+ * ld-ia64/merge4.s: Likewise.
+ * ld-ia64/merge5.d: Likewise.
+ * ld-ia64/merge5.s: Likewise.
- * ld-elf/orphan.ld: Add placement for MIPS .reginfo section.
+2007-06-18 Andreas Schwab <schwab@suse.de>
-2006-05-10 Thiemo Seufer <ths@debian.org>
+ * ld-scripts/cross3.t: Add .opd section.
- * ld-elf/sec64k.exp: Extend for MIPS ELF.
+2007-06-18 Nathan Sidwell <nathan@codesourcery.com>
-2006-05-10 Alan Modra <amodra@bigpond.net.au>
+ * ld-scripts/alignof.s: New.
+ * ld-scripts/alignof.t: New
+ * ld-scripts/alignof.exp: New.
- * ld-powerpc/tlsexetoc.r: Update for correction to tls optimization.
- * ld-powerpc/tlsexetoc.g: Likewise.
+2007-06-14 Alan Modra <alan@grove.modra.org>
-2006-05-02 Paul Brook <paul@codesourcery.com>
+ * ld-spu/ovl.d: Update.
+ * ld-spu/ovl2.d: Update.
- * ld-arm/arm-elf.exp: Add thumb-rel32.
- * ld-arm/thumb-rel32.d: New test.
- * ld-arm/thumb-rel32.s: New test.
+2007-05-24 Nathan Sidwell <nathan@codesourcery.com>
-2006-04-05 Richard Sandiford <richard@codesourcery.com>
+ * ld-scripts/assert.t: Add additional cases.
+ * ld-scripts/extern.t, ld-scripts/extern.s,
+ ld-scripts/extern.exp: New.
- * 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.
+2007-05-22 Paul Brook <paul@codesourcery.com>
-2006-04-05 Ben Elliston <bje@au.ibm.com>
+ * ld-arm/arm-pic-veneer.d: Update expected output.
+ * ld-arm/arm-call.d: Ditto.
- * lib/ld-lib.exp: Comment cleanups.
+2007-05-22 Paul Brook <paul@codesourcery.com>
-2006-03-27 Richard Sandiford <richard@codesourcery.com>
+ * ld-arm-mixed-lib.d: Update expected output.
+ * ld-arm/arm-app.d: Ditto.
+ * ld-arm/mixed-app.d: Ditto.
+ * ld-arm/arm-lib-plt32.d: Ditto.
+ * ld-arm/arm-app-abs32.d: Ditto.
+ * ld-arm/mixed-app-v5.d: Ditto.
+ * ld-arm/armthumb-lib.d: Ditto.
+ * ld-arm/arm-lib.d: Ditto.
- * 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.
+2007-05-21 Richard Sandiford <richard@codesourcery.com>
-2006-03-25 Richard Sandiford <richard@codesourcery.com>
+ * ld-arm/emit-relocs1.d, ld-arm/emit-relocs1.s,
+ * ld-arm/emit-relocs1-vxworks.d: New tests.
+ * ld-arm/arm-elf.exp: Run them.
+ * ld-arm/vxworks1.dd: Expect proper branch targets.
- * 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.
+2007-05-18 Joseph Myers <joseph@codesourcery.com>
-2006-03-22 Richard Sandiford <richard@codesourcery.com>
+ * ld-elf/group.ld: Discard .reginfo.
- * 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.
+2007-05-18 Paul Brook <paul@codesourcery.com>
-2006-03-17 Alexandre Oliva <aoliva@redhat.com>
+ * ld-arm/arm-call.d: Update expected output.
- * ld-powerpc/tls32.s: Verify that +32768 @plt addend is
- discarded.
+2007-05-17 Paul Brook <paul@codesourcery.com>
-2006-03-14 Richard Sandiford <richard@codesourcery.com>
+ * ld-elf/multibss1.s: Use %nobits instead of @nobits.
- * 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.
+2007-05-17 Nathan Sidwell <nathan@codesourcery.com>
-2006-03-07 Richard Sandiford <richard@codesourcery.com>
+ * ld-m68k/merge-error-1a.d: Mismatch is an error.
+ * ld-m68k/merge-error-1b.d: Likewise.
+ * ld-m68k/merge-error-1c.d: Likewise.
+ * ld-m68k/merge-error-1d.d: Likewise.
+ * ld-m68k/merge-error-1e.d: Likewise.
- * 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.
+2007-05-15 H.J. Lu <hongjiu.lu@intel.com>
-2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
+ PR ld/4504
+ * ld-elf/data1.c: New file.
+ * ld-elf/data1.h: Likewise.
+ * ld-elf/dynbss1.c: Likewise.
+ * ld-elf/pass.out: Likewise.
- * ld-m68k: New tests.
+ * ld-elf/shared.exp (build_tests): Add "Build libdata1.so".
+ (run_tests): Add "Run with libdata1.so".
-2006-03-03 Richard Sandiford <richard@codesourcery.com>
+2007-05-15 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.
+ * ld-arm/vxworks1.ld: Swap .bss and .data.
+ * ld-arm/vxworks1-lib.rd: Update accordingly.
+ * ld-arm/vxworks1-lib.td: New test.
+ * ld-arm/arm-elf.exp: Run it.
-2006-03-02 Richard Sandiford <richard@codesourcery.com>
+ * ld-i386/vxworks1.ld: Swap .bss and .data.
+ * ld-i386/vxworks1-lib.rd: Update accordingly.
+ * ld-i386/vxworks1-lib.td: New test.
+ * ld-i386/i386.exp: Run it.
- * ld-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.
+ * ld-mips-elf/vxworks1.ld: Swap .bss and .data.
+ * ld-mips-elf/vxworks1-lib.rd: Update accordingly.
+ * ld-mips-elf/vxworks1.rd: Likewise.
-2006-03-02 Richard Sandiford <richard@codesourcery.com>
+ * ld-powerpc/vxworks1.ld: Swap .bss and .data.
+ * ld-powerpc/vxworks1-lib.rd: Update accordingly.
+ * ld-powerpc/vxworks1-lib.td: New test.
+ * ld-powerpc/powerpc.exp: Run it.
- * ld-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.
+ * ld-sh/vxworks1.ld: Swap .bss and .data.
+ * ld-sh/vxworks1-lib.rd: Update accordingly.
+ * ld-sh/vxworks1-lib.td: New test.
+ * ld-sh/sh-vxworks.exp: Run it.
-2006-03-02 Richard Sandiford <richard@codesourcery.com>
+ * ld-sparc/vxworks1.ld: Swap .bss and .data.
+ * ld-sparc/vxworks1-lib.rd: Update accordingly.
+ * ld-sparc/vxworks1-lib.td: New test.
+ * ld-sparc/sparc.exp: Run it.
- * 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.
+2007-05-15 Richard Sandiford <richard@codesourcery.com>
-2006-03-02 Richard Sandiford <richard@codesourcery.com>
+ * ld-mips-elf/vxworks1-lib.rd: Expect the GOT relocation to be
+ against symbol 0.
- * 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.
+2007-05-15 Mark Shinwell <shinwell@codesourcery.com>
-2006-03-02 Richard Sandiford <richard@codesourcery.com>
+ * ld-arm/arm-elf.exp: Add jump19 testcase.
+ * ld-arm/jump19.d: New.
+ * ld-arm/jump19.s: New.
- * 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.
+2007-05-14 Richard Sandiford <richard@codesourcery.com>
-2006-02-28 Richard Sandiford <richard@codesourcery.com>
+ * ld-sh/vxworks1.dd: Remove hexadecimal prefixes from constant pool
+ contents. Consistently use "!" as the comment character.
+ Consistently use _PROCEDURE_LINKAGE_TABLE_ in the first PLT entry.
+ * ld-sh/vxworks1-le.dd: Likewise.
+ * ld-sh/vxworks1-lib.dd: Likewise.
+ * ld-sh/vxworks1-lib-le.dd: Likewise.
+ * ld-sh/vxworks3.dd: Likewise.
+ * ld-sh/vxworks3-le.dd: Likewise.
- * 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.
+2007-05-14 Andreas Schwab <schwab@suse.de>
-2006-02-28 Richard Sandiford <richard@codesourcery.com>
+ * ld-elf/dl2a.list: New file.
+ * ld-elf/shared.exp: Add test using --dynamic-list=dl2a.list.
- * ld-i386/emit-relocs.s, ld-i386/emit-relocs.d: New test.
- * ld-i386/i386.exp: Run it.
+2007-05-10 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-arm/vxworks1-lib.dd: Expect "push" instead of stmdb and
+ "pop" instead of ldmia. Don't require specific symbolic addresses
+ for in-text addresses. Expect data to be rendered as .words rather
+ than disassembled.
+ * ld-arm/vxworks1.dd: Likewise.
-2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
+2007-05-10 Richard Sandiford <richard@codesourcery.com>
- * ld-pie/weakundef-data.c: Fix the typo.
+ * ld-elf/multibss1.d, ld-elf/multibss1.s: New test.
-2006-02-22 H.J. Lu <hongjiu.lu@intel.com>
+2007-04-27 Nathan Sidwell <nathan@codesourcery.com>
- * ld-pie/pie.c: New file.
+ * ld-m68k/plt1-isac.d: New.
+ * ld-m68k/m68k.exp: Add it.
- * ld-pie/pie.exp: Check if compiler supports -pie.
+2007-04-26 H.J. Lu <hongjiu.lu@intel.com>
-2006-02-20 H.J. Lu <hongjiu.lu@intel.com>
+ PR binutils/4430
+ * ld-i386/tlsbin.dd: Updated.
+ * ld-i386/tlsbindesc.dd: Likewise
+ * ld-i386/tlsdesc.dd: Likewise
+ * ld-i386/tlsgdesc.dd: Likewise
+ * ld-i386/tlsnopic.dd: Likewise
+ * ld-i386/tlspic.dd: Likewise
+ * ld-x86-64/tlsbin.dd: Likewise
+ * ld-x86-64/tlsbindesc.dd: Likewise
+ * ld-x86-64/tlsdesc.dd: Likewise
+ * ld-x86-64/tlsgdesc.dd: Likewise
+ * ld-x86-64/tlspic.dd: Likewise
- PR ld/2218
- * ld-pie/pie.exp: Add the weak undefined data test.
+2007-04-24 Alan Modra <amodra@bigpond.net.au>
- * ld-pie/weakundef-data.c: New file.
+ * ld-linkonce/x.s: Use .gcc_except_table instead of .eh_frame
+ to test that entry for deleted function is zeroed. Add a
+ somewhat closer to normal .eh_frame to test that fde for
+ deleted function is removed.
+ * ld-linkonce/y.s: Likewise.
+ * ld-linkonce/zeroeh.ld: Place .gcc_except_table too.
+ * ld-linkonce/zeroehl32.d: Update.
-2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
- Anil Paranjape <anilp1@kpitcummins.com>
- Shilin Shakti <shilins@kpitcummins.com>
+2007-04-21 Richard Earnshaw <rearnsha@arm.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.
+ * ld-arm/arm-app-abs32.d: Convert to unified syntax.
+ * ld-arm/arm-app.d: Likewise.
+ * ld-arm/arm-lib-plt32.d: Likewise.
+ * ld-arm/arm-lib.d: Likewise.
+ * ld-arm/arm-static-app.d: Likewise.
+ * ld-arm/armthumb-lib.d: Likewise.
+ * ld-arm/mixed-app-v5.d: Likewise.
+ * ld-arm/mixed-app.d: Likewise.
+ * ld-arm/mixed-lib.d: Likewise.
-2006-02-07 Paul Brook <paul@codesourcery.com>
+2007-04-18 Alan Modra <amodra@bigpond.net.au>
- * ld-arm/arm-elf.exp: Add thumb-entry test.
- * ld-arm/thumb-entry.d: New test.
- * ld-arm/thumb-entry.s: New test.
+ * ld-spu/ovl.lnk: Use OVERLAY keyword.
-2006-02-04 Richard Sandiford <richard@codesourcery.com>
+2007-04-17 Paul Brook <paul@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-arm/preempt-app.s: New test.
+ * ld-arm/preempt-app.sym: New.
+ * ld-arm/arm-elf.exp: Add preempt-app.
+
+2007-04-12 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/vxworks1-lib.td: New test.
* ld-mips-elf/mips-elf.exp: Run it.
-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
+2007-04-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4304
+ * ld-i386/i386.exp: Run "warn1".
+
+ * ld-i386/warn1.d: New file.
+ * ld-i386/warn1.s: Likewise.
+
+2007-04-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/combreloc.d: Remove #target: i?86-*-*.
+ * ld-i386/reloc.d: Likewise.
+
+2007-04-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl2.d: Update.
+
+2007-04-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4090
+ * ld-elf/expr1.d: New file.
+ * ld-elf/expr1.s: Likewise.
+ * ld-elf/expr1.t: Likewise.
+
+2007-03-29 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-libs/lib-1.s, ld-libs/lib-2.s, ld-libs/lib-2.d,
+ * ld-libs/libs.exp: New files.
+
+2007-03-28 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-vxworks/rpath-1.s, ld-vxworks/rpath-1.d,
+ * ld-vxworks/vxworks.exp: New files.
+
+2007-03-27 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/note-1.s: Increase .foo size.
+
+2007-03-27 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/spu.exp (embed_test): New.
+ * ld-spu/ear.s: New.
+ * ld-spu/ear.d: New.
+ * ld-spu/embed.rd: New.
+ * ld-spu/ovl2.s: New.
+ * ld-spu/ovl2.d: New.
+
+2007-03-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/overlay.d: -u symbols we want to see in the output.
+
+2007-03-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl.s (f4_a2): Tail call.
+ * ld-spu/ovl.d: Add --emit-relocs to ld options, -r to objdump.
+ Update expected results.
+
+2007-03-23 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/ld-r-1.d: Update.
+ * ld-sh/shared-1.d: Likewise.
+
+2007-03-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/elf.exp: Add "--local-store 0:0" to LDFLAGS for spu.
+
+2007-03-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4210
+ * ld-pe/image_size.d: New file.
+ * ld-pe/image_size.s: Likewise.
+ * ld-pe/image_size.t: Likewise.
+
+ * ld-pe/pe.exp: Run image_size.
+
+2007-03-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4007
+ * ld-elf/note-1.d: New file.
+ * ld-elf/note-1.s: Likewise.
+ * ld-elf/note-1.t: Likewise.
+ * ld-i386/alloc.d: Likewise.
+ * ld-i386/alloc.s: Likewise.
+ * ld-i386/alloc.t: Likewise.
+
+ * ld-i386/i386.exp: Run "alloc".
+
+2007-03-20 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (ld-arm/arm-elf.exp): Add arm-pic-veneer.
+ * ld-arm/arm-pic-veneer.d: New test.
+ * ld-arm/arm-pic-veneer.s: New test.
+
+2007-03-08 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-elf/extract-symbol-1.ld (data): Explicitly set the start address
+ to 0.
+
+2007-03-07 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/extract-symbol-1sec.d: xfail hppa.
+ * ld-elf/extract-symbol-1sym.d: xfail hppa.
+
+2007-03-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR 3958
+ * ld-elf/linkonce1.d: New.
+ * ld-elf/linkonce1a.s: New.
+ * ld-elf/linkonce1b.s: New.
+ * ld-elf/linkonce2.d: New.
+ * ld-i386/pcrel16abs.d: New.
+ * ld-i386/pcrel16abs.s: New.
+ * ld-i386/i386.exp: Run it.
+
+2007-03-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/4144
+ * ld-elf/nobits-1.d: New file.
+ * ld-elf/nobits-1.s: Likewise.
+ * ld-elf/nobits-1.t: Likewise.
+
+2007-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-elf/binutils.exp: Revert last change.
+
+2007-03-01 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-elf/extract-symbol-1sym.d, ld-elf/extract-symbol-1sec.d,
+ * ld-elf/extract-symbol-1.s, ld-elf/extract-symbol-1.ld: New tests.
+ * ld-elf/binutils.exp: Run them.
+
+2007-02-28 Nick Clifton <nickc@redhat.com>
+
+ PR ld/3796
+ * ld-arm/arm-elf.exp (armelftests): Move "Thumb-2 BL" test into...
+ (armeabitests): ... here, a new array for EABI specific tests.
+ (armelftests): Add extra command line options for VFP11 fix tests
+ and thumb shared library test.
+
+2007-02-22 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armelftests): Add gc-unwind.h.
+ * ld-arm/gc-unwind.s: New file.
+ * ld-arm/gc-unwind.d: New file.
+
+2007-02-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3953
+ * ld-elf/beginwarn.c: New file.
+ * ld-elf/warn.out: Likewise.
+
+ * ld-elf/shared.exp (build_tests): Add "Build warn libbar.so".
+ (run_tests): Add "Run warn with versioned libfoo.so".
+
+ * lib/ld-lib.exp (default_ld_relocate): Make exec_output global
+ and remove target first.
+ (default_ld_link): Likewise.
+ (default_ld_simple_link): Likewise.
+ (run_ld_link_exec_tests): Take an optional linker warning and
+ check it.
+ (default_ld_link): Check pruned linker output.
+
+2007-02-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-scripts/default-script1.d: Expect extra symbols.
+ * ld-scripts/default-script2.d: Likewise.
+ * ld-scripts/default-script3.d: Likewise.
+ * ld-scripts/default-script4.d: Likewise.
+
+2007-02-13 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/relbrlt.d: Update.
+ * ld-powerpc/tlsexe.r: Update.
+ * ld-powerpc/tlsexetoc.r: Update.
+ * ld-powerpc/tlsso.r: Update.
+ * ld-powerpc/tlstocso.r: Update.
+
+2007-02-12 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/relbrlt.d: Update.
+
+2007-02-06 Nick Clifton <nickc@redhat.com>
+
+ PR ld/3805
+ * ld-elf/sec64k.exp: Expect the relocatable version of this test
+ to fail for the m32r because it creates both .rel and .rela
+ sections.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * ld-undefined/undefined.exp: XFAIL the undefined test
+ * ld-mep: New, with content.
+
+2007-02-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/pcrel16.d: Undo the last change.
+ * ld-x86-64/pcrel16.d: Likewise.
+
+2007-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/pcrel16.d: Updated.
+ * ld-x86-64/pcrel16.d: Likewise.
+
+2007-02-01 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/default-script.exp: Add "--local-store 0:0" to
+ LDFLAGS for spu.
+
+2007-01-29 Julian Brown <julian@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add VFP11 tests.
+ * ld-arm/vfp11-fix-none.s: New file.
+ * ld-arm/vfp11-fix-none.d: Expected disassembly of above.
+ * ld-arm/vfp11-fix-scalar.s: New file.
+ * ld-arm/vfp11-fix-scalar.d: Expected disassembly of above.
+ * ld-arm/vfp11-fix-vector.s: New file.
+ * ld-arm/vfp11-fix-vector.d: Expected disassembly of above.
+
+2007-01-23 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-elf/header.d: Reduce page size, restrict to linux & vxworks
+ * ld-elf/header.s: Adjust.
+ * ld-elf/header.t: Reduce initial offset.
+
+2007-01-23 Andreas Schwab <schwab@suse.de>
+
+ * lib/ld-lib.exp (run_dump_test): Don't prematurely remove
+ assembler output.
+
+2007-01-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/dl6.c: New file.
+ * ld-elf/dl6a.out: Likewise.
+ * ld-elf/dl6amain.c: Likewise.
+ * ld-elf/dl6b.out: Likewise.
+ * ld-elf/dl6bmain.c: Likewise.
+ * ld-elf/dl6cmain.c: Likewise.
+ * ld-elf/dl6dmain.c: Likewise.
+
+ * ld-elf/shared.exp: Add new tests for -Bsymbolic,
+ -Bsymbolic-functions, --dynamic-list-data and
+ --dynamic-list-cpp-new.
+
+2007-01-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/maxpage3.t: New file.
+ * ld-elf/maxpage3a.d: Likewise.
+ * ld-elf/maxpage3b.d: Likewise.
+ * ld-elf/maxpage3c.d: Likewise.
+
+2007-01-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-scripts/default-script.exp: New file.
+ * ld-scripts/default-script.s: Likewise.
+ * ld-scripts/default-script.t: Likewise.
+ * ld-scripts/default-script1.d: Likewise.
+ * ld-scripts/default-script2.d: Likewise.
+ * ld-scripts/default-script3.d: Likewise.
+ * ld-scripts/default-script4.d: Likewise.
+
+2007-01-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/1283
+ * lib/ld-lib.exp (run_dump_test): Remove output file first.
+
+2007-01-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/header.d: Adjust for .text section with 16byte
+ alignment.
+
+2007-01-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/dl1main.c (main): Fix a typo.
+
+2007-01-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3831
+ * ld-elf/del.cc: New.
+ * ld-elf/dl5.cc: Likewise.
+ * ld-elf/dl5.out: Likewise.
+ * ld-elf/new.cc: Likewise.
+
+ * ld-elf/shared.exp: Add tests for --dynamic-list-data and
+ --dynamic-list-cpp-new.
+
+2007-01-12 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-elf/header.d: Allow arbitrary lines between "Program Header"
+ and "Sections". Only run on *-*-linux*.
+
+2007-01-11 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-elf/header.d: New.
+ * ld-elf/header.t: New.
+ * ld-elf/header.s: New.
+
+2007-01-08 Kai Tietz <kai.tietz@onevision.com>
+
+ * ld-fastcall/fastcall.exp: Renamed target x86_64-*-mingw64 to
+ x86_64-*-mingw*.
+ * ld-pe/pe.exp: Ditto.
+ * ld-scripts/align.exp: Ditto.
+ * ld-scripts/defined.exp: Ditto.
+ * ld-scripts/provide.exp: Ditto.
+ * ld-scripts/weak.exp: Ditto.
+
+2007-01-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-scripts/expr.exp: New.
+ * ld-scripts/expr1.s: New.
+ * ld-scripts/expr1.d: New.
+ * ld-scripts/expr1.t: New.
+
+For older changes see ChangeLog-2006
Local Variables:
mode: change-log
diff --git a/ld/testsuite/ChangeLog-2006 b/ld/testsuite/ChangeLog-2006
new file mode 100644
index 000000000000..2ff0c39945a3
--- /dev/null
+++ b/ld/testsuite/ChangeLog-2006
@@ -0,0 +1,1285 @@
+2006-12-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/wrap.exp: New file.
+ * ld-elf/wrap1.c: Likewise.
+ * ld-elf/wrap1.out: Likewise.
+ * ld-elf/wrap1a.c: Likewise.
+ * ld-elf/wrap1b.c: Likewise.
+
+2006-12-18 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * ld-pe/direct.exp: New file.
+ * ld-pe/direct_client.c: Likewise.
+ * ld-pe/direct_dll.c: Likewise.
+
+2006-12-13 Dave Brolley <brolley@redhat.com>
+
+ * lib/ld-lib.exp (big_or_little_endian): Accept -meb and
+ -mel for big and little endian respectively.
+
+2006-12-12 Ina Pandit <inap@kpitcummins.com>
+
+ * ld-scripts/overlay-size-map.d: Update.
+
+2006-12-07 H.J. Lu <hjl@gnu.org>
+
+ PR ld/3666
+ * ld-elf/group3a.d: New file.
+ * ld-elf/group3a.s: Likewise.
+ * ld-elf/group3b.d: Likewise.
+ * ld-elf/group3b.s: Likewise.
+
+2006-12-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-alpha/tlspic.rd: Update for unused section removal.
+ * ld-frv/fdpic-shared-6.d: Likewise.
+ * ld-frv/tls-dynamic-1.d: Update for symbol changes.
+ * ld-frv/tls-dynamic-2.d: Likewise.
+ * ld-frv/tls-dynamic-3.d: Likewise.
+ * ld-frv/tls-initial-shared-2.d: Likewise.
+ * ld-frv/tls-pie-1.d: Likewise.
+ * ld-frv/tls-pie-3.d: Likewise.
+ * ld-frv/tls-relax-dynamic-1.d: Likewise.
+ * ld-frv/tls-relax-dynamic-2.d: Likewise.
+ * ld-frv/tls-relax-dynamic-3.d: Likewise.
+ * ld-frv/tls-relax-initial-shared-2.d: Likewise.
+ * ld-frv/tls-relax-pie-1.d: Likewise.
+ * ld-frv/tls-relax-pie-3.d: Likewise.
+ * ld-frv/tls-relax-shared-1.d: Likewise.
+ * ld-frv/tls-relax-shared-2.d: Likewise.
+ * ld-frv/tls-relax-shared-3.d: Likewise.
+ * ld-frv/tls-relax-static-3.d: Likewise.
+ * ld-frv/tls-shared-1.d: Likewise.
+ * ld-frv/tls-shared-2.d: Likewise.
+ * ld-frv/tls-shared-3.d: Likewise.
+ * ld-frv/tls-static-1.d: Likewise.
+ * ld-frv/tls-static-3.d: Likewise.
+
+2006-12-05 Jakub Jelinek <jakub@redhat.com>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elfvsb/sh1.c (overriddenvar, shlib_overriddencall2,
+ shared_data): If !SHARED, move to...
+ * ld-elfvsb/sh2.c: ... here.
+ * ld-elfvsb/elfvsb.exp: Add -DSHARED to compiler options when
+ building with $picflag.
+
+2006-12-04 Jan Beulich <jbeulich@novell.com>
+
+ * ld-elf/eh-frame-hdr.d: New.
+ * ld-elf/eh-frame-hdr.s: New.
+ * ld-ia64/tlsbin.dd, ld-ia64/tlsbin.sd: Don't depend on exact linkage
+ table layout.
+
+2006-11-23 Thiemo Seufer <ths@mips.com>
+
+ * ld-elf/warn2.d: Match regex also for the second segment.
+
+2006-11-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/mixed-app.d, ld-arm/tls-app.d, ld-arm/tls-lib.d: Update
+ for $d support.
+
+2006-11-21 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-elf/eh5.d: New test.
+ * ld-elf/eh5.s: New file.
+ * ld-elf/eh5a.s: New file.
+ * ld-elf/eh5b.s: New file.
+
+2006-11-13 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/arm-dyn.ld, ld-arm/arm-lib.ld: Remove .stack.
+ * ld-arm/armthumb-lib.d, ld-arm/mixed-app.d, ld-arm/mixed-lib.d:
+ Allow smaller section gap.
+ * ld-arm/armthumb-lib.sym, ld-arm/mixed-lib.sym: Reorder. Remove
+ _stack.
+ * ld-arm/mixed-app.sym: Remove _stack.
+ * ld-arm/tls-app.d: Update start address.
+
+2006-11-08 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/group.ld: Handle .rodata.brlt for powerpc64.
+
+2006-11-07 Vladimir Prus <vladimir@codesourcery.com>
+
+ * testsuite/ld-elf/symbol2w.s: Use "%" instead of "@" to avoid
+ breakage on ARM.
+
+2006-11-06 Vladimir Prus <vladimir@codesourcery.com>
+
+ * testsuite/ld-elf/symbol1ref.s: Use ".dc.a" instead
+ of ".long".
+
+2006-11-06 Vladimir Prus <vladimir@codesourcery.com>
+
+ * testsuite/ld-elf/warn2.d: New.
+ * testsuite/ld-elf/symbol2w.s: New.
+ * testsuite/ld-elf/symbol2ref.s: New.
+
+2006-11-05 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/ldsym1.d: Adjust for semi-recent ld changes.
+
+2006-11-02 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-discard/zero-rel.d, ld-discard/zero-rel.s: New files.
+
+2006-11-01 Thiemo Seufer <ths@mips.com>
+
+ * ld-mips-elf/mips16-intermix-1.s, ld-mips-elf/mips16-intermix-2.s,
+ ld-mips-elf/mips16-intermix.d: New testcase.
+ * ld-mips-elf/mips-elf.exp (mips16_intermix_test): Run new testcases.
+
+2006-10-29 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/sh64/abi32.xd, ld-sh/sh64/abi64.xd, ld-sh/sh64/cmpct1.xd,
+ * ld-sh/sh64/crange1.rd, ld-sh/sh64/crange2.rd,
+ * ld-sh/sh64/crange3-cmpct.rd, ld-sh/sh64/crange3-media.rd,
+ * ld-sh/sh64/crange3.rd, ld-sh/sh64/mix1.xd, ld-sh/sh64/mix2.xd,
+ * ld-sh/sh64/shdl32.xd, ld-sh/sh64/shdl64.xd: Update for removal
+ of empty sections.
+
+2006-10-25 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-spu/ovl.d: New file.
+ * ld-spu/ovl.lnk: New file.
+ * ld-spu/ovl.s: New file.
+ * ld-spu/spu.exp: New file.
+ * ld-elf/sec64k.exp: Tweak ld options for SPU.
+ * ld-scripts/empty-orphan.exp: Likewise.
+ * ld-scripts/phdrs.exp: Likewise.
+ * ld-scripts/phdrs2.exp: Likewise.
+
+2006-10-24 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/plt1.s: New.
+ * ld-powerpc/plt1.d: New.
+ * ld-powerpc/relbrlt.s: New.
+ * ld-powerpc/relbrlt.d: New.
+ * ld-powerpc/powerpc.exp: Run them.
+
+2006-10-21 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/sh64/abi32.xd, ld-sh/sh64/abi64.xd, ld-sh/sh64/cmpct1.xd,
+ * ld-sh/sh64/crange1.rd, ld-sh/sh64/crange2.rd,
+ * ld-sh/sh64/crange3-cmpct.rd, ld-sh/sh64/crange3-media.rd,
+ * ld-sh/sh64/crange3.rd, ld-sh/sh64/crangerel1.rd,
+ * ld-sh/sh64/crangerel2.rd, ld-sh/sh64/mix1.xd,
+ * ld-sh/sh64/mix2.xd, ld-sh/sh64/rel32.xd, ld-sh/sh64/rel64.xd,
+ * ld-sh/sh64/reldl32.rd, ld-sh/sh64/reldl64.rd,
+ * ld-sh/sh64/shdl32.xd, ld-sh/sh64/shdl64.xd: Update.
+
+2006-10-20 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/tlsbin-1.d: Update.
+ * ld-sh/tlspic-1.d: Likewise.
+ * ld-sh/tlstpoff-1.d: Likewise.
+
+2006-10-20 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/multi-got-1.d: Remove trailing R_MIPS_NONE entries.
+ * ld-mips-elf/tls-multi-got-1.got: Likewise.
+ * ld-mips-elf/tls-multi-got-1.r: Likewise.
+
+2006-10-20 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/multi-got-1.d: Do not expect a particular address
+ for DT_HASH.
+ * ld-mips-elf/rel32-o32.d: Bump addresses by 0x20 to account for
+ the extra program header.
+ * ld-mips-elf/rel32-n32.d: Likewise.
+ * ld-mips-elf/tlslib-o32.got: Likewise.
+ * ld-mips-elf/tlslib-o32-hidden.got: Likewise.
+ * ld-mips-elf/tlslib-o32-ver.got: Likewise.
+ * ld-mips-elf/tls-multi-got-1.got: Likewise.
+ * ld-mips-elf/tls-multi-got-1.r: Likewise.
+ * ld-mips-elf/rel64.d: Bump addresses by 0x30 to account for the
+ extra program header.
+ * ld-mips-elf/tlsdyn-o32.d: Reduce the GOT offset by 32 to account
+ for the extra program header, and thus the shorter gap between the
+ text and data segments.
+ * ld-mips-elf/tlsdyn-o32-1.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32-2.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32-3.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32.got: Bump GOT text addresses by 0x20
+ to account for the extra program header.
+ * ld-mips-elf/tlsdyn-o32-1.got: Likewise.
+ * ld-mips-elf/tlsdyn-o32-2.got: Likewise.
+ * ld-mips-elf/tlsdyn-o32-3.got: Likewise.
+
+2006-10-20 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/rel32-o32.d: Bump the section number of .text by 1
+ to account for the fact that .rel.dyn is now before .text in the
+ section table.
+ * ld-mips-elf/rel32-n32.d: Likewise.
+ * ld-mips-elf/rel64.d: Likewise.
+
+2006-10-19 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/tlslib-o32-hidden.got: Sort relocations against the
+ same symbol in order of increasing r_offset.
+ * ld-mips-elf/tls-multi-got-1.got: Likewise.
+ * ld-mips-elf/tls-hidden3.r: Likewise.
+ * ld-mips-elf/tls-hidden4.r: Likewise.
+
+2006-10-19 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/multi-got-1.d: Remove DT_DEBUG tag. Do not require
+ a specific file offset for .dynamic. Reduce DT_HASH by 8 to account
+ for removed tag.
+ * ld-mips-elf/tls-multi-got-1.r: Likewise. Also reduce DT_REL by 8.
+ Reduce PLTGOT and symbol values by 16 to account for the removed tag.
+ * ld-mips-elf/textrel-1.d: Remove DT_DEBUG tag.
+ * ld-mips-elf/rel32-n32.d: Reduce addresses by 16 to account for
+ removed DT_DEBUG tag.
+ * ld-mips-elf/rel64.d: Likewise.
+ * ld-mips-elf/tls-multi-got-1.got: Likewise.
+ * ld-mips-elf/tlslib-o32-hidden.got: Likewise.
+
+2006-10-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3290
+ * ld-elf/dummy.c: New file.
+ * ld-elf/dwarf.exp: Likewise.
+ * ld-elf/dwarf1.c: Likewise.
+ * ld-elf/dwarf1.h: Likewise.
+ * ld-elf/dwarf1.out: Likewise.
+ * ld-elf/dwarf1main.c: Likewise.
+
+2006-10-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/dl4.c: New file.
+ * ld-elf/dl4.list: Likewise.
+ * ld-elf/dl4a.out: Likewise.
+ * ld-elf/dl4b.out: Likewise.
+ * ld-elf/dl4main.c: Likewise.
+ * ld-elf/dl4xxx.c: Likewise.
+ * ld-elf/dl4xxx.list: Likewise.
+
+ * ld-elf/shared.exp (build_tests): Add libdl4a.so and
+ libdl4b.so.
+ (run_tests): Likewise.
+
+2006-10-18 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/reloc-1-n64.d: Match 16-character VMAs on LP64 hosts.
+
+2006-10-18 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/rel32-n32.d: Bump addresses by 0x20 to account for
+ the fact that .reginfo is now placed before .text. Change the
+ section number of .text accordingly.
+
+2006-10-18 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/elf-rel-got-n32.d: Adjust page gap from 0x100000
+ to 0x10000. Move .reginfo before .text and bump .text addresses
+ by 0x10 to make room. Move data segment down by 0x10 bytes to
+ account for new size of text segment.
+ * ld-mips-elf/elf-rel-xgot-n32.d: Likewise.
+ * ld-mips-elf/elf-rel-got-n64-linux.d: Adjust page gap from
+ 0x100000 to 0x10000.
+ * ld-mips-elf/elf-rel-xgot-n64-linux.d: Likewise.
+
+2006-10-17 Mark Shinwell <shinwell@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add thumb1-bl, thumb2-bl,
+ thumb2-bl-as-thumb1-bad and thumb2-bl-bad tests.
+ * ld-arm/thumb1-bl.d: New.
+ * ld-arm/thumb1-bl.s: New.
+ * ld-arm/thumb2-bl-as-thumb1-bad.d: New.
+ * ld-arm/thumb2-bl-as-thumb1-bad.s: New.
+ * ld-arm/thumb2-bl-bad.d: New.
+ * ld-arm/thumb2-bl-bad.s: New.
+ * ld-arm/thumb2-bl.d: New.
+ * ld-arm/thumb2-bl.s: New.
+
+2006-10-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-arm/mixed-app.sym, ld-cris/ldsym1.d, ld-cris/libdso-12.d,
+ * ld-cris/v32-ba-1.d, ld-elf/orphan.d, ld-elf/orphan2.d,
+ * ld-i386/tlsbin.rd, ld-i386/tlsbindesc.rd, ld-i386/tlsdesc.rd,
+ * ld-i386/tlsdesc.sd, ld-i386/tlsgdesc.rd, ld-i386/tlsnopic.rd,
+ * ld-i386/tlspic.rd, ld-ia64/tlspic.rd, ld-mips-elf/eh-frame1-n32.d,
+ * ld-mips-elf/eh-frame1-n64.d, ld-mips-elf/eh-frame2-n32.d,
+ * ld-mips-elf/eh-frame2-n64.d, ld-mips-elf/mips-elf.exp,
+ * ld-mips-elf/rel32-n32.d, ld-mips-elf/rel32-o32.d,
+ * ld-mips-elf/rel64.d, ld-mips-elf/tls-multi-got-1.got,
+ * ld-mips-elf/tls-multi-got-1.r, ld-mips-elf/tlsdyn-o32-1.d,
+ * ld-mips-elf/tlsdyn-o32-1.got, ld-mips-elf/tlsdyn-o32-2.d,
+ * ld-mips-elf/tlsdyn-o32-2.got, ld-mips-elf/tlsdyn-o32-3.d,
+ * ld-mips-elf/tlsdyn-o32-3.got, ld-mips-elf/tlsdyn-o32.d,
+ * ld-mips-elf/tlsdyn-o32.got, ld-mips-elf/tlslib-o32-hidden.got,
+ * ld-mips-elf/tlslib-o32-ver.got, ld-mips-elf/tlslib-o32.got,
+ * ld-mmix/bpo-10.d, ld-powerpc/tlsso.g, ld-powerpc/tlsso.r,
+ * ld-powerpc/tlsso32.d, ld-powerpc/tlsso32.g, ld-powerpc/tlsso32.r,
+ * ld-powerpc/tlstocso.g, ld-powerpc/tlstocso.r, ld-s390/tlspic.rd,
+ * ld-s390/tlspic_64.rd, ld-scripts/empty-address-1.d,
+ * ld-scripts/empty-address-3c.d, ld-scripts/empty-orphan.t,
+ * ld-sh/shared-1.d, ld-sh/tlspic-2.d, ld-sparc/tlssunbin32.rd,
+ * ld-sparc/tlssunbin64.rd, ld-sparc/tlssunpic32.rd,
+ * ld-sparc/tlssunpic64.rd, ld-x86-64/tlsdesc.pd, ld-x86-64/tlsdesc.rd,
+ * ld-x86-64/tlspic.rd: Update for section sym changes.
+
+2006-10-16 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/branch-misc-1.d: Set the start address to 0x20000000.
+ * ld-mips-elf/jalbal.d: Likewise 0x200000a0.
+ * ld-mips-elf/jaloverflow-2.d: Likewise 0x20000000.
+ * ld-mips-elf/reloc-3-n32.d: Likewise.
+ * ld-mips-elf/reloc-3.d: Likewise.
+ * ld-mips-elf/textrel-1.d: Don't require a specific file offset for
+ .dynamic.
+
+2006-10-03 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-elf/eh4.d: New test.
+ * ld-elf/eh4.s: New file.
+ * ld-elf/eh4a.s: New file.
+
+2006-10-02 Vladimir Prus <vladimir@codesourcery.com>
+
+ * ld-arm/use-thumb-lib.sym: Robustify, by ignoring symbols we're
+ not interested in and bucket number.
+
+2006-10-02 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * ld-fastcall/fastcall.exp: Add x86_64-pc-mingw64 as valid target.
+ * ld-pe/pe.exp: Likewise.
+ * lib/ld-lib.exp ( is_pecoff_format): Accept x86_64-pc-mingw64.
+
+2006-09-29 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * ld-sh/tlspic-2.d: Update.
+
+2006-09-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3223
+ PR ld/3267
+ * ld-scripts/empty-address-1.d: New file.
+ * ld-scripts/empty-address-1.s: Likewise.
+ * ld-scripts/empty-address-1.t: Likewise.
+ * ld-scripts/empty-address-2.s: Likewise.
+ * ld-scripts/empty-address-2a.d: Likewise.
+ * ld-scripts/empty-address-2a.t: Likewise.
+ * ld-scripts/empty-address-2b.d: Likewise.
+ * ld-scripts/empty-address-2b.t: Likewise.
+ * ld-scripts/empty-address-3.s: Likewise.
+ * ld-scripts/empty-address-3a.d: Likewise.
+ * ld-scripts/empty-address-3a.t: Likewise.
+ * ld-scripts/empty-address-3b.d: Likewise.
+ * ld-scripts/empty-address-3b.t: Likewise.
+ * ld-scripts/empty-address-3c.d: Likewise.
+ * ld-scripts/empty-address-3c.t: Likewise.
+ * ld-scripts/empty-address.exp: Likewise.
+
+2006-09-21 Andreas Schwab <schwab@suse.de>
+
+ * ld-m68k/plt1-68020.d: Fix patterns to match also for 64-bit
+ hosts.
+
+2006-09-20 Kai Tietz <Kai.Tietz@onevision.com>
+
+ * bootstrap/bootstrap.exp: Fix x86_64-mingw32 target test.
+ * ld-fastcall/fastcall.exp: Likewise.
+ * ld-scripts/align.exp: Likewise.
+ * ld-scripts/align2a.d: Likewise.
+ * ld-scripts/defined.exp: Likewise.
+ * ld-scripts/provide.exp: Likewise.
+ * ld-scripts/script.exp: Likewise.
+ * ld-scripts/weak.exp: Likewise.
+ * lib/ld-lib.exp: Detect target as pecoff file format.
+
+2006-09-18 Thiemo Seufer <ths@networkno.de>
+ Maciej W. Rozycki <macro@mips.com>
+
+ * ld-mips-elf/mips-elf.exp: Add test for R_MIPS16_GPREL relocations.
+ * ld-mips-elf/reloc-3-n32.d, ld-mips-elf/reloc-3.d: New files.
+
+2006-09-18 Thiemo Seufer <ths@networkno.de>
+
+ * ld-elfcomm/elfcomm.exp: Enable the alignment test for
+ mips*-*-*.
+
+2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * ld-elf/merge.d: Add special case for Score target.
+ * ld-elfcomm/elfcomm.exp: Likewise.
+ * ld-srec/srec.exp: Likewise.
+
+2006-09-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-scripts/overlay-size.t: Discard .reginfo sections.
+
+2006-09-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/hash.d: Don't run for mips targets.
+
+2006-09-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/loadaddr.s: Pad sections to 16 bytes.
+ * ld-elf/loadaddr1.d: Updated.
+ * ld-elf/loadaddr2.d: Likewise.
+ * ld-elf/loadaddr3a.d: Likewise.
+ * ld-elf/loadaddr3b.d: Likewise.
+
+2006-09-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3197
+ * ld-elf/hash.d: New test.
+
+2006-09-04 Vladimir Prus <vladimir@codesourcery.com>
+
+ * ld-arm/use-thumb-lib.sym: Use regexps instead of
+ absolute addresses, for robustness.
+
+2006-09-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/dl1.c: New file.
+ * ld-elf/dl1.list: Likewise.
+ * ld-elf/dl1.out: Likewise.
+ * ld-elf/dl1main.c: Likewise.
+ * ld-elf/dl2.c: Likewise.
+ * ld-elf/dl2.list: Likewise.
+ * ld-elf/dl2a.out: Likewise.
+ * ld-elf/dl2b.out: Likewise.
+ * ld-elf/dl2main.c: Likewise.
+ * ld-elf/dl2xxx.c: Likewise.
+ * ld-elf/dl2xxx.list: Likewise.
+ * ld-elf/dl3.cc: Likewise.
+ * ld-elf/dl3.list: Likewise.
+ * ld-elf/dl3a.out: Likewise.
+ * ld-elf/dl3b.out: Likewise.
+ * ld-elf/dl3header.h: Likewise.
+ * ld-elf/dl3main.cc: Likewise.
+
+ * ld-elf/shared.exp: Updated.
+
+ * lib/ld-lib.exp (run_ld_link_exec_tests): Take an optional
+ argument for source language. Use CC/CXX for link, depending
+ on source language.
+ (run_cc_link_tests): Likewise.
+
+2006-08-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/loadaddr3a.d: Adjust target test.
+ * ld-elf/loadaddr3b.d: Likewise.
+
+2006-08-29 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-elf/loadaddr3.t: New.
+ * ld-elf/loadaddr3a.d: New.
+ * ld-elf/loadaddr3b.d: New.
+
+2006-08-23 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/plt1.s: New.
+ * ld-powerpc/plt1.d: New.
+ * ld-powerpc/powerpc.exp: Run it.
+
+2006-08-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3052
+ * ld-elf/loadaddr1.t: Add "AT (ADDR(.data))".
+ * ld-elf/loadaddr2.t: Likewise.
+
+2006-08-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3103
+ * ld-elf/overlay.d: New file.
+ * ld-elf/overlay.s: Likewise.
+ * ld-elf/overlay.t: Likewise.
+
+2006-08-18 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armelftests): Add armthumb-lib.so. Add
+ -use-blx to mixed-lib.so
+ * ld-arm/armthumb-lib.d: New file.
+ * ld-arm/armthumb-lib.sym: New file.
+
+2006-08-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3052
+ * ld-elf/loadaddr.s: New file.
+ * ld-elf/loadaddr1.d: Likewise.
+ * ld-elf/loadaddr1.t: Likewise.
+ * ld-elf/loadaddr2.d: Likewise.
+ * ld-elf/loadaddr2.t: Likewise.
+
+2006-08-17 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe.d: Update for lazy link stub change.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexetoc.d: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.d: Likewise.
+ * ld-powerpc/tlstocso.d: Likewise.
+
+2006-08-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3015
+ * ld-elf/binutils.exp: Add tests for "-z relro".
+
+2006-08-16 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/overlay-size-map.d: Update.
+
+2006-08-11 Thiemo Seufer <ths@mips.com>
+
+ * ld-elfcomm/elfcomm.exp (dump_common1): Extend regexp to match also
+ MIPS small commons.
+
+2006-08-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/3009
+ * ld-scripts/sort.t: New file.
+ * ld-scripts/sort_b_a-1.d: Likewise.
+ * ld-scripts/sort_b_a-1.s: Likewise.
+ * ld-scripts/sort_b_n-1.d: Likewise.
+ * ld-scripts/sort_b_n-1.s: Likewise.
+
+2006-08-05 Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * ld-pe/pe.exp: Enable tests on arm-wince-pe.
+ * ld-pe/secrel.d: Adjust test to work on arm-wince-pe too.
+
+2006-08-04 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-sh/rd-sh.exp: Treat vxworks1-static.d specially.
+ * ld-sh/sh-vxworks.exp: New file.
+ * ld-sh/sh.exp: Extend sh-linux SIZEOF_HEADERS handling to
+ sh-*-vxworks.
+ * ld-sh/vxworks1-le.dd, ld-sh/vxworks1-lib-le.dd,
+ * ld-sh/vxworks1-lib.dd, ld-sh/vxworks1-lib.nd,
+ * ld-sh/vxworks1-lib.rd, ld-sh/vxworks1-lib.s,
+ * ld-sh/vxworks1-static.d, ld-sh/vxworks1.dd,
+ * ld-sh/vxworks1.ld, ld-sh/vxworks1.rd, ld-sh/vxworks1.s,
+ * ld-sh/vxworks2-static.sd, ld-sh/vxworks2.s,
+ * ld-sh/vxworks2.sd, ld-sh/vxworks3-le.dd,
+ * ld-sh/vxworks3-lib-le.dd, ld-sh/vxworks3-lib.dd,
+ * ld-sh/vxworks3-lib.s, ld-sh/vxworks3.dd, ld-sh/vxworks3.s,
+ * ld-sh/vxworks4.d, ld-sh/vxworks4a.s, ld-sh/vxworks4b.s,
+ * ld-sh/reloc1.s, ld-sh/reloc1.d: New tests.
+
+2006-08-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/noload-1.d: New.
+ * ld-elf/noload-1.s: Likewise.
+ * ld-elf/noload-1.t: Likewise.
+
+2006-07-29 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/hash1.s, ld-mips-elf/hash1a.d,
+ * ld-mips-elf/hash1b.d, ld-mips-elf/hash1c.d: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2006-07-25 Thiemo Seufer <ths@mips.com>
+
+ * ld-mips-elf/mips16-call-global-2.s,
+ ld-mips-elf/mips16-call-global-3.s, ld-mips-elf/mips16-call-global.d:
+ Improve test robustness.
+
+2006-07-21 Nick Clifton <nickc@redhat.com>
+
+ * ld-sh/arch/arch.exp (test_arch): Set the endian flag to suit the
+ multilib being tested.
+
+2006-07-20 Thiemo Seufer <ths@mips.com>
+
+ * ld-mips-elf/mips16-call-global-1.s,
+ ld-mips-elf/mips16-call-global-2.s,
+ ld-mips-elf/mips16-call-global-3.s, ld-mips-elf/mips16-call-global.d:
+ Test linking of external mips16 jumps.
+ * ld-mips-elf/mips-elf.exp: Run new test.
+
+2006-07-19 Thiemo Seufer <ths@mips.com>
+
+ * ld-selective/selective.exp: Fix selective testcases for MIPS.
+
+2006-07-13 Thiemo Seufer <ths@mips.com>
+
+ * ld-mips-elf/tlslib-o32-ver.got, ld-mips-elf/tlslib-o32.got:
+ Update TLS testcases.
+
+2006-07-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2884
+ * ld-elf/begin.c: New file.
+ * ld-elf/end.c: Likewise.
+ * ld-elf/endhidden.c: Likewise.
+ * ld-elf/endprotected.c: Likewise.
+ * ld-elf/foo.c: Likewise.
+ * ld-elf/foo.map: Likewise.
+ * ld-elf/hidden.out: Likewise.
+ * ld-elf/main.c: Likewise.
+ * ld-elf/normal.out: Likewise.
+ * ld-elf/shared.exp: Likewise.
+
+ * lib/ld-lib.exp (run_cc_link_tests): New.
+
+2006-07-12 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-m68k/merge-ok-1c.d: New test.
+ * ld-m68k/m68k.exp: Run it.
+
+2006-07-11 Hans-Peter Nilsson <hp@axis.com>
+
+ * ld-cris/libdso-2.d: Adjust for recent hash-related changes.
+
+2006-07-10 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-powerpc/tlsso32.r: Adjust.
+ * ld-powerpc/tlsso32.d: Adjust.
+ * ld-powerpc/tlsso32.g: Adjust.
+ * ld-powerpc/tlsso.r: Adjust.
+ * ld-powerpc/tlsso.g: Adjust.
+ * ld-powerpc/tlstocso.g: Adjust.
+
+2006-07-05 Thiemo Seufer <ths@mips.com>
+
+ * ld-mips-elf/multi-got-1.d, ld-mips-elf/tls-multi-got-1.got,
+ ld-mips-elf/tls-multi-got-1.r: Update multigot testcases.
+
+2006-06-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/tlsbindesc.dd: Updated to expect xchg %ax,%ax instead
+ of 2 nops.
+ * ld-i386/tlsdesc.dd: Likewise.
+ * ld-i386/tlsgdesc.dd: Likewise.
+ * ld-x86-64/tlsbindesc.dd: Likewise.
+ * ld-x86-64/tlsdesc.dd: Likewise.
+ * ld-x86-64/tlsdesc.pd: Likewise.
+ * ld-x86-64/tlsgdesc.dd: Likewise.
+
+2006-06-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR ld/2513
+ * ld-i386/tlsbin.dd: Fix expected output.
+
+2006-06-21 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/tls_common.exp: Match 32-bit output.
+
+2006-06-20 Jakub Jelinek <jakub@redhat.com>
+
+ * ld-elf/tls_common.exp: New test.
+ * ld-elf/tls_common.s: New file.
+
+2006-06-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/eh1.d: Update for fewer program headers.
+ * ld-elf/eh2.d: Likewise.
+ * ld-elf/eh3.d: Likewise.
+
+2006-06-19 Vladimir Prus <vladimir@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: New test.
+ * ld-arm/use-thumb-lib.s: New file.
+ * ld-arm/use-thumb-lib.sym: New file.
+
+2006-06-15 Mark Shinwell <shinwell@codesourcery.com>
+
+ * ld-arm/group-relocs-alu-bad.d: New test.
+ * ld-arm/group-relocs-alu-bad.s: New test.
+ * ld-arm/group-relocs.d: New test.
+ * ld-arm/group-relocs-ldc-bad.d: New test.
+ * ld-arm/group-relocs-ldc-bad.s: New test.
+ * ld-arm/group-relocs-ldr-bad.d: New test.
+ * ld-arm/group-relocs-ldr-bad.s: New test.
+ * ld-arm/group-relocs-ldrs-bad.d: New test.
+ * ld-arm/group-relocs-ldrs-bad.s: New test.
+ * ld-arm/group-relocs.s: New test.
+ * ld-arm/arm-elf.exp: Wire in new tests.
+
+2006-06-14 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-m68k/plt1.s, ld-m68k/plt1-empty.s, ld-m68k/plt1.ld: New files.
+ * ld-m68k/plt1-68020.d, ld-m68k/plt1-cpu32.d: Likewise.
+ * ld-m68k/plt1-isab.d: Likewise.
+ * ld-m68k/m68k.exp: Run new PLT tests.
+
+2006-06-12 Thiemo Seufer <ths@mips.com>
+
+ * ld-mips-elf/multi-got-no-shared.d: Adjust for recent change of
+ ELF_MAXPAGESIZE.
+
+2006-06-11 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/stub-dynsym-1.s,
+ * ld-mips-elf/stub-dynsym-1.ld,
+ * ld-mips-elf/stub-dynsym-1-7fff.d,
+ * ld-mips-elf/stub-dynsym-1-8000.d,
+ * ld-mips-elf/stub-dynsym-1-fff0.d,
+ * ld-mips-elf/stub-dynsym-1-10000.d,
+ * ld-mips-elf/stub-dynsym-1-2fe80.d: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2006-06-06 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elfvers/vers.exp (objdump_versionstuff): Allow versions in
+ any order.
+ * ld-elfvers/vers1.ver: Update.
+ * ld-elfvers/vers2.ver: Update.
+ * ld-elfvers/vers4a.ver: Update.
+ * ld-elfvers/vers7a.ver: Update.
+ * ld-elfvers/vers8.ver: Update.
+ * ld-elfvers/vers9.ver: Update.
+ * ld-elfvers/vers15.ver: Update.
+ * ld-elfvers/vers16a.ver: Update.
+ * ld-elfvers/vers17.ver: Update.
+ * ld-elfvers/vers18.ver: Update.
+ * ld-elfvers/vers20.ver: Update.
+ * ld-elfvers/vers20a.ver: Update.
+ * ld-elfvers/vers21.ver: Update.
+ * ld-elfvers/vers22a.ver: Update.
+ * ld-elfvers/vers22b.ver: Update.
+ * ld-elfvers/vers23a.ver: Update.
+ * ld-elfvers/vers23b.ver: Update.
+ * ld-elfvers/vers23c.ver: Update.
+ * ld-elfvers/vers25a.ver: Update.
+ * ld-elfvers/vers26a.ver: Update.
+ * ld-elfvers/vers27a.ver: Update.
+ * ld-elfvers/vers27d.ver: Update.
+ * ld-elfvers/vers28b.ver: Update.
+ * ld-elfvers/vers29.ver: Update.
+ * ld-elfvers/vers30.ver: Update.
+ * ld-elfvers/vers31.ver: Update.
+
+2006-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-elf/sec64k.exp: Add "main" symbol. Use dc.a for addresses.
+ Cater for different address sizes. Match end of line when
+ comparing symbols.
+ * ld-elf/start.s: Use dc.a for addresses.
+
+2006-06-02 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexe.r: Update for removal of some section syms.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+ * ld-s390/tlsbin_64.rd: Likewise.
+ * ld-s390/tlspic_64.rd: Likewise.
+
+2006-06-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2723
+ * ld-alpha/tlsbin.rd: Update for removal of some section syms.
+ * ld-alpha/tlsbinr.rd: Likewise.
+ * ld-alpha/tlspic.rd: Likewise.
+ * ld-cris/hiddef1.d: Likewise.
+ * ld-cris/libdso-2.d: Likewise.
+ * ld-elf/sec64k.exp: Likewise.
+ * ld-i386/tlsbin.rd: Likewise.
+ * ld-i386/tlsbindesc.rd: Likewise.
+ * ld-i386/tlsdesc.rd: Likewise.
+ * ld-i386/tlsgdesc.rd: Likewise.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlspic.rd: Likewise.
+ * ld-ia64/tlsbin.rd: Likewise.
+ * ld-ia64/tlspic.rd: Likewise.
+ * ld-mmix/bpo-1.d: Likewise.
+ * ld-mmix/bpo-10.d: Likewise.
+ * ld-mmix/bpo-11.d: Likewise.
+ * ld-mmix/bpo-14.d: Likewise.
+ * ld-mmix/bpo-16.d: Likewise.
+ * ld-mmix/bpo-17.d: Likewise.
+ * ld-mmix/bpo-18.d: Likewise.
+ * ld-mmix/bpo-19.d: Likewise.
+ * ld-mmix/bpo-2.d: Likewise.
+ * ld-mmix/bpo-22.d: Likewise.
+ * ld-mmix/bpo-3.d: Likewise.
+ * ld-mmix/bpo-4.d: Likewise.
+ * ld-mmix/bpo-5.d: Likewise.
+ * ld-mmix/bpo-6.d: Likewise.
+ * ld-mmix/bpo-9.d: Likewise.
+ * ld-mmix/bspec1.d: Likewise.
+ * ld-mmix/bspec2.d: Likewise.
+ * ld-mmix/greg-1.d: Likewise.
+ * ld-mmix/greg-19.d: Likewise.
+ * ld-mmix/greg-2.d: Likewise.
+ * ld-mmix/greg-3.d: Likewise.
+ * ld-mmix/greg-4.d: Likewise.
+ * ld-mmix/greg-5.d: Likewise.
+ * ld-mmix/greg-5s.d: Likewise.
+ * ld-mmix/greg-6.d: Likewise.
+ * ld-mmix/greg-7.d: Likewise.
+ * ld-mmix/loc1.d: Likewise.
+ * ld-mmix/loc2.d: Likewise.
+ * ld-mmix/loc3.d: Likewise.
+ * ld-mmix/loc4.d: Likewise.
+ * ld-mmix/loc6.d: Likewise.
+ * ld-mmix/local1.d: Likewise.
+ * ld-mmix/local3.d: Likewise.
+ * ld-mmix/local5.d: Likewise.
+ * ld-mmix/local7.d: Likewise.
+ * ld-mmix/locdo-1.d: Likewise.
+ * ld-mmix/loct-1.d: Likewise.
+ * ld-mmix/locto-1.d: Likewise.
+ * ld-mmix/start-1.d: Likewise.
+ * ld-mmix/undef-3.d: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-s390/tlsbin.rd: Likewise.
+ * ld-s390/tlspic.rd: Likewise.
+ * ld-sparc/tlssunbin32.rd: Likewise.
+ * ld-sparc/tlssunbin64.rd: Likewise.
+ * ld-sparc/tlssunnopic32.rd: Likewise.
+ * ld-sparc/tlssunnopic64.rd: Likewise.
+ * ld-sparc/tlssunpic32.rd: Likewise.
+ * ld-sparc/tlssunpic64.rd: Likewise.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlsbindesc.rd: Likewise.
+ * ld-x86-64/tlsdesc.rd: Likewise.
+ * ld-x86-64/tlsgdesc.rd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+
+2006-05-31 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/binutils.exp: Make it Linux only.
+ (strip_test): Renamed to binutils_test. Check for unsupported
+ options.
+ Add more tests.
+
+ * ld-elf/commonpage1.d: Make it Linux only.
+ * ld-elf/maxpage1.d: Likewise.
+
+ * ld-elf/maxpage1.s: Add main, start and __start.
+
+ * ld-elf/maxpage2.d: New file.
+ * ld-elf/tbss1.s: Likewise.
+ * ld-elf/tbss2.s: Likewise.
+ * ld-elf/tdata1.s: Likewise.
+ * ld-elf/tdata2.s: Likewise.
+
+2006-05-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/binutils.exp: New file.
+ * ld-elf/commonpage1.d: Likewise.
+ * ld-elf/maxpage1.d: Likewise.
+ * ld-elf/maxpage1.s: Likewise.
+
+2006-05-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-x86-64/tlsbin.dd: Updated for 2MB maximum page size.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlsbin.sd: Likewise.
+ * ld-x86-64/tlsbin.td: Likewise.
+ * ld-x86-64/tlsbindesc.dd: Likewise.
+ * ld-x86-64/tlsbindesc.rd: Likewise.
+ * ld-x86-64/tlsbindesc.sd: Likewise.
+ * ld-x86-64/tlsbindesc.td: Likewise.
+ * ld-x86-64/tlsdesc.dd: Likewise.
+ * ld-x86-64/tlsdesc.pd: Likewise.
+ * ld-x86-64/tlsdesc.rd: Likewise.
+ * ld-x86-64/tlsdesc.sd: Likewise.
+ * ld-x86-64/tlsdesc.td: Likewise.
+ * ld-x86-64/tlsgdesc.dd: Likewise.
+ * ld-x86-64/tlspic.dd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+ * ld-x86-64/tlspic.sd: Likewise.
+ * ld-x86-64/tlspic.td: Likewise.
+
+2006-05-24 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-app-abs32.d: Update expected output.
+ * ld-arm/arm-app.d: Ditto.
+ * ld-arm/arm-lib-plt32.d: Ditto.
+ * ld-arm/arm-lib.d: Ditto.
+ * ld-arm/mixed-app-v5.d: Ditto.
+ * ld-arm/mixed-app.d: Ditto.
+ * ld-arm/mixed-lib.d: Ditto.
+
+2006-05-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2655
+ PR ld/2657
+ * ld-elf/eh1.d: New file.
+ * ld-elf/eh1.s: Likewise.
+ * ld-elf/eh1a.s: Likewise.
+ * ld-elf/eh2.d: Likewise.
+ * ld-elf/eh2a.s: Likewise.
+ * ld-elf/eh3.d: Likewise.
+ * ld-elf/eh3.s: Likewise.
+ * ld-elf/eh3a.s: Likewise.
+
+2006-05-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-mips-elf/textrel-1.d: Relax some patterns.
+
+2006-05-22 Nick Clifton <nickc@redhat.com>
+
+ * ld-elf/start.s (start): Add this symbol for SH targets.
+ (main): Add this symbol for HPPA targets.
+
+2006-05-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-scripts/empty-orphan.d: Update again.
+
+ * ld-scripts/empty-orphan.t: Discard .reginfo.
+ * ld-scripts/empty-orphan.d: Update.
+
+2006-05-17 Thiemo Seufer <ths@mips.com>
+
+ * ld-elfweak/size2.d, ld-elfweak/size2a.s, ld-elfweak/size2b.s:
+ Add __start as entry symbol.
+
+2006-05-16 Thiemo Seufer <ths@mips.com>
+
+ * ld-elf/orphan.ld: Add placement for MIPS .reginfo section.
+
+2006-05-15 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-be8.d: New test.
+ * ld-arm/arm-be8.s: New test.
+ * ld-arm/arm-elf.exp: Add arm-be8.
+
+2006-05-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elf/stab.d: Skip ia64-*-*.
+
+2006-05-11 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add arm-movwt.
+ * ld-arm/arm-movwt.d: New test.
+ * ld-arm/arm-movwt.s: New test.
+ * ld-arm/arm.ld: Add .far.
+
+2006-05-11 Mike Bland <mbland@google.com>
+
+ * ld-elf/stab.d: New.
+
+2006-05-10 Thiemo Seufer <ths@debian.org>
+
+ * ld-elf/sec64k.exp: Extend for MIPS ELF.
+
+2006-05-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexetoc.r: Update for correction to tls optimization.
+ * ld-powerpc/tlsexetoc.g: Likewise.
+
+2006-05-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-cdtest/cdtest-foo.cc (Foo::Foo): Add const to char *.
+ * ld-cdtest/cdtest-foo.h (Foo::Foo): Likewise.
+ * ld-srec/sr3.cc (Foo::Foo): Likewise.
+
+2006-05-02 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add thumb-rel32.
+ * ld-arm/thumb-rel32.d: New test.
+ * ld-arm/thumb-rel32.s: New test.
+
+2006-04-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-elfvers/vers.exp: Xfail vers7a, vers7, vers23a, vers23b,
+ vers23c, vers23d, vers23, vers25a, vers25b1, vers25b2, vers27a,
+ vers27b, vers27c1, vers27c2, vers27d4 and vers27d5 if PIC is
+ required.
+
+2006-04-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-alpha/tlsbin.rd: Updated for readelf change.
+ * ld-alpha/tlsbinr.rd: Likewise.
+ * ld-alpha/tlspic.rd: Likewise.
+
+2006-04-05 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-sparc/vxworks1.dd, ld-sparc/vxworks1.ld, ld-sparc/vxworks1-lib.dd,
+ * ld-sparc/vxworks1-lib.nd, ld-sparc/vxworks1-lib.rd,
+ * ld-sparc/vxworks1-lib.s, ld-sparc/vxworks1.rd, ld-sparc/vxworks1.s,
+ * ld-sparc/vxworks1-static.d, ld-sparc/vxworks2.s,
+ * ld-sparc/vxworks2.sd, ld-sparc/vxworks2-static.sd: New tests.
+ * ld-sparc/sparc.exp: Run them.
+
+2006-04-05 Ben Elliston <bje@au.ibm.com>
+
+ * lib/ld-lib.exp: Comment cleanups.
+
+2006-03-27 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/tls-hidden3a.s, ld-mips-elf/tls-hidden3b.s,
+ * ld-mips-elf/tls-hidden3.d, ld-mips-elf/tls-hidden3.got,
+ * ld-mips-elf/tls-hidden3.ld, ld-mips-elf/tls-hidden3.r,
+ * ld-mips-elf/tls-hidden4a.s, ld-mips-elf/tls-hidden4b.s,
+ * ld-mips-elf/tls-hidden4.got, ld-mips-elf/tls-hidden4.r: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2006-03-25 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-m68k/merge-error-1a.s, ld-m68k/merge-error-1b.s,
+ * ld-m68k/merge-error-1a.d, ld-m68k/merge-error-1b.d,
+ * ld-m68k/merge-error-1c.d, ld-m68k/merge-error-1d.d,
+ * ld-m68k/merge-error-1e.d, ld-m68k/merge-ok-1a.d,
+ * ld-m68k/merge-ok-1b.d: New tests.
+ * ld-m68k/m68k.exp: Run them.
+
+2006-03-22 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips/vxworks1.dd, ld-mips/vxworks1.ld, ld-mips/vxworks1-lib.dd,
+ * ld-mips/vxworks1-lib.nd, ld-mips/vxworks1-lib.rd,
+ * ld-mips/vxworks1-lib.s, ld-mips/vxworks1.rd, ld-mips/vxworks1.s,
+ * ld-mips/vxworks1-static.d, ld-mips/vxworks2.s, ld-mips/vxworks2.sd,
+ * ld-mips/vxworks2-static.sd: New tests.
+ * ld-mips/mips-elf.exp: Run them.
+
+2006-03-17 Alexandre Oliva <aoliva@redhat.com>
+
+ * ld-powerpc/tls32.s: Verify that +32768 @plt addend is
+ discarded.
+
+2006-03-14 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips/emit-relocs-1a.s, ld-mips/emit-relocs-1b.s,
+ * ld-mips/emit-relocs-1.ld, ld-mips/emit-relocs-1.d: New test.
+ * ld-mips/mips-elf.exp: Run it.
+
+2006-03-07 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-arm/vxworks1.dd, ld-arm/vxworks1.ld, ld-arm/vxworks1-lib.dd,
+ * ld-arm/vxworks1-lib.nd, ld-arm/vxworks1-lib.rd,
+ * ld-arm/vxworks1-lib.s, ld-arm/vxworks1.rd, ld-arm/vxworks1.s,
+ * ld-arm/vxworks1-static.d, ld-arm/vxworks2.s, ld-arm/vxworks2.sd,
+ * ld-arm/vxworks2-static.sd: New tests.
+ * ld-arm/arm-elf.exp: Run them.
+
+2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * ld-m68k: New tests.
+
+2006-03-03 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-i386/vxworks1-static.d, ld-i386/vxworks2.s,
+ * ld-i386/vxworks2.sd, ld-i386/vxworks2-static.sd: New tests.
+ * ld-i386/i386.exp: Run them.
+ * ld-powerpc/vxworks1-static.d, ld-powerpc/vxworks2.s,
+ * ld-powerpc/vxworks2.sd, ld-powerpc/vxworks2-static.sd: New tests.
+ * ld-powerpc/powerpc.exp: Run them.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-powerpc/vxworks1.ld: Use a page alignment of 0x10000.
+ * ld-powerpc/vxworks1.dd: Update accordingly.
+ * ld-powerpc/vxworks1-lib.nd: Likewise.
+ * ld-powerpc/vxworks1-lib.rd: Likewise.
+ * ld-powerpc/vxworks1.rd: Likewise.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-i386/vxworks1.ld (.data): New section.
+ * ld-i386/vxworks1-lib.s: Add a pointer to a local symbol.
+ * ld-i386/vxworks1-lib.rd: Test for the associated reloc.
+ * ld-powerpc/vxworks1.ld (.data): New section.
+ * ld-powerpc/vxworks1-lib.s: Add a pointer to a local symbol.
+ * ld-powerpc/vxworks1-lib.rd: Test for the associated reloc.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-i386/ld-i386/vxworks1-lib.nd: New test.
+ * ld-i386/i386.exp: Run it.
+ * ld-powerpc/ld-powerpc/vxworks1-lib.nd: New test.
+ * ld-powerpc/powerc.exp: Run it.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-i386/vxworks1.ld: Use bigger alignments. Make sure .bss isn't
+ placed as an orphan.
+ * ld-i386/vxworks1-lib.dd, ld-i386/vxworks1.dd,
+ * ld-i386/vxworks1.rd: Update accordingly.
+ * ld-i386/vxworks1-lib.rd: Likewise. Remove symbol indexes.
+
+2006-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-powerpc/vxworks1-lib.s, ld-powerpc/vxworks1-lib.dd,
+ * ld-powerpc/vxworks1-lib.rd, ld-powerpc/vxworks1.s,
+ * ld-powerpc/vxworks1.dd, ld-powerpc/vxworks1.rd,
+ * ld-powerpc/vxworks1.ld, ld-powerpc/vxworks1.sd: New test.
+ * ld-powerpc/powerpc.exp: Run it.
+
+2006-02-28 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-i386/vxworks1-lib.s, ld-i386/vxworks1-lib.dd,
+ * ld-i386/vxworks1-lib.rd, ld-i386/vxworks1.s, ld-i386/vxworks1.dd,
+ * ld-i386/vxworks1.rd, ld-i386/vxworks1.ld: New test.
+ * ld-i386/i386.exp: Run it.
+
+2006-02-28 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-i386/emit-relocs.s, ld-i386/emit-relocs.d: New test.
+ * ld-i386/i386.exp: Run it.
+
+2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-pie/weakundef-data.c: Fix the typo.
+
+2006-02-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-pie/pie.c: New file.
+
+ * ld-pie/pie.exp: Check if compiler supports -pie.
+
+2006-02-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2218
+ * ld-pie/pie.exp: Add the weak undefined data test.
+
+ * ld-pie/weakundef-data.c: New file.
+
+2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
+ Anil Paranjape <anilp1@kpitcummins.com>
+ Shilin Shakti <shilins@kpitcummins.com>
+
+ * ld-xc16x: New directory.
+ * ld-xc16x/absrel.d: New file.
+ * ld-xc16x/absrel.s: New file.
+ * ld-xc16x/offset.d: New file.
+ * ld-xc16x/offset.s: New file.
+ * ld-xc16x/pcreloc.d: New file.
+ * ld-xc16x/pcreloc.s: New file.
+ * ld-xc16x/xc16x.exp: New file.
+
+2006-02-07 Paul Brook <paul@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: Add thumb-entry test.
+ * ld-arm/thumb-entry.d: New test.
+ * ld-arm/thumb-entry.s: New test.
+
+2006-02-04 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/tls-hidden2a.s, ld-mips-elf/tls-hidden2b.s,
+ * ld/testsuite/ld-mips-elf/tls-hidden2.d,
+ * ld/testsuite/ld-mips-elf/tls-hidden2-got.d: New test.
+ * ld-mips-elf/mips-elf.exp: Run it.
+
+2006-02-04 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-mips-elf/rel32-n32.d: Adjust for changes in linker behaviour.
+ * ld-mips-elf/rel32-o32.d: Likewise.
+ * ld-mips-elf/rel64.d: Likewise.
+ * ld-mips-elf/tls-multi-got-1.got: Likewise.
+ * ld-mips-elf/tls-multi-got-1.r: Likewise.
+ * ld-mips-elf/tlsdyn-o32-1.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32-1.got: Likewise.
+ * ld-mips-elf/tlsdyn-o32-2.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32-2.got: Likewise.
+ * ld-mips-elf/tlsdyn-o32-3.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32-3.got: Likewise.
+ * ld-mips-elf/tlsdyn-o32.d: Likewise.
+ * ld-mips-elf/tlsdyn-o32.got: Likewise.
+ * ld-mips-elf/tlslib-o32-hidden.got: Likewise.
+ * ld-mips-elf/tlslib-o32-ver.got: Likewise.
+ * ld-mips-elf/tlslib-o32.got: Likewise.
+
+2006-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/tlsbin.rd: Undo the last change.
+ * ld-i386/tlsbindesc.rd: Likewise.
+ * ld-i386/tlsdesc.rd: Likewise.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlspic.rd: Likewise.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+ * ld-s390/tlsbin.rd: Likewise.
+ * ld-s390/tlsbin_64.rd: Likewise.
+ * ld-s390/tlspic.rd: Likewise.
+ * ld-s390/tlspic_64.rd: Likewise.
+ * ld-sh/tlsbin-2.d: Likewise.
+ * ld-sh/tlspic-2.d: Likewise.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlsbindesc.rd: Likewise.
+ * ld-x86-64/tlsdesc.rd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+
+2006-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/tlsbin.rd: Update for changed segment map.
+ * ld-i386/tlsbindesc.rd: Likewise.
+ * ld-i386/tlsdesc.rd: Likewise.
+ * ld-i386/tlsnopic.rd: Likewise.
+ * ld-i386/tlspic.rd: Likewise.
+ * ld-powerpc/tlsexe.r: Likewise.
+ * ld-powerpc/tlsexe32.r: Likewise.
+ * ld-powerpc/tlsexetoc.r: Likewise.
+ * ld-powerpc/tlsso.r: Likewise.
+ * ld-powerpc/tlsso32.r: Likewise.
+ * ld-powerpc/tlstocso.r: Likewise.
+ * ld-s390/tlsbin.rd: Likewise.
+ * ld-s390/tlsbin_64.rd: Likewise.
+ * ld-s390/tlspic.rd: Likewise.
+ * ld-s390/tlspic_64.rd: Likewise.
+ * ld-sh/tlsbin-2.d: Likewise.
+ * ld-sh/tlspic-2.d: Likewise.
+ * ld-x86-64/tlsbin.rd: Likewise.
+ * ld-x86-64/tlsbindesc.rd: Likewise.
+ * ld-x86-64/tlsdesc.rd: Likewise.
+ * ld-x86-64/tlspic.rd: Likewise.
+
+2006-01-31 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * ld-sparc/sparc.exp: Do not run 64-bit tests on Solaris 2.5.1
+ and Solaris 2.6.
+
+2006-01-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2218
+ * ld-pie/pie.exp: New file.
+ * ld-pie/weakundef.c: Likewise.
+ * ld-pie/weakundef.out: Likewise.
+
+ * lib/ld-lib.exp (run_ld_link_exec_tests): Fix nesting. Support
+ building PIE and shared library.
+
+2006-01-18 Alexandre Oliva <aoliva@redhat.com>
+
+ Introduce TLS descriptors for i386 and x86_64.
+ * ld-i386/i386.exp: Run on x86_64-*-linux* and amd64-*-linux*.
+ Add new tests.
+ * ld-i386/pcrel16.d: Add -melf_i386.
+ * ld-i386/pcrel8.d: Likewise.
+ * ld-i386/tlsbindesc.dd: New.
+ * ld-i386/tlsbindesc.rd: New.
+ * ld-i386/tlsbindesc.s: New.
+ * ld-i386/tlsbindesc.sd: New.
+ * ld-i386/tlsbindesc.td: New.
+ * ld-i386/tlsdesc.dd: New.
+ * ld-i386/tlsdesc.rd: New.
+ * ld-i386/tlsdesc.s: New.
+ * ld-i386/tlsdesc.sd: New.
+ * ld-i386/tlsdesc.td: New.
+ * ld-i386/tlsgdesc.dd: New.
+ * ld-i386/tlsgdesc.rd: New.
+ * ld-i386/tlsgdesc.s: New.
+ * ld-x86-64/x86-64.exp: Run new tests.
+ * ld-x86-64/tlsbindesc.dd: New.
+ * ld-x86-64/tlsbindesc.rd: New.
+ * ld-x86-64/tlsbindesc.s: New.
+ * ld-x86-64/tlsbindesc.sd: New.
+ * ld-x86-64/tlsbindesc.td: New.
+ * ld-x86-64/tlsdesc.dd: New.
+ * ld-x86-64/tlsdesc.pd: New.
+ * ld-x86-64/tlsdesc.rd: New.
+ * ld-x86-64/tlsdesc.s: New.
+ * ld-x86-64/tlsdesc.sd: New.
+ * ld-x86-64/tlsdesc.td: New.
+ * ld-x86-64/tlsgdesc.dd: New.
+ * ld-x86-64/tlsgdesc.rd: New.
+ * ld-x86-64/tlsgdesc.s: New.
+
+2006-01-03 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * ld-mmix/sec-1.d: Adjust for section order changes.
+
+For older changes see ChangeLog-2005
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/ld/testsuite/ld-alpha/tlsbin.rd b/ld/testsuite/ld-alpha/tlsbin.rd
index 8a5a78ab397e..e92e55f38778 100644
--- a/ld/testsuite/ld-alpha/tlsbin.rd
+++ b/ld/testsuite/ld-alpha/tlsbin.rd
@@ -80,9 +80,6 @@ Symbol table '.symtab' contains [0-9]+ entries:
[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
@@ -121,7 +118,7 @@ Symbol table '.symtab' contains [0-9]+ entries:
[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]+ +136 FUNC +GLOBAL DEFAULT +\[<other>: 88\] +7 fn2
[0-9 ]+: [0-9a-f]+ +0 TLS +GLOBAL DEFAULT +9 sg2
[0-9 ]+: [0-9a-f]+ +0 TLS +GLOBAL DEFAULT +UND sG1
[0-9 ]+: [0-9a-f]+ +0 TLS +GLOBAL HIDDEN +9 sh1
diff --git a/ld/testsuite/ld-alpha/tlsbinr.rd b/ld/testsuite/ld-alpha/tlsbinr.rd
index 8497075ac895..4938a142d90f 100644
--- a/ld/testsuite/ld-alpha/tlsbinr.rd
+++ b/ld/testsuite/ld-alpha/tlsbinr.rd
@@ -75,9 +75,6 @@ Symbol table '.symtab' contains [0-9]+ entries:
[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
@@ -116,7 +113,7 @@ Symbol table '.symtab' contains [0-9]+ entries:
[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]+ +136 FUNC +GLOBAL DEFAULT +\[<other>: 88\] +7 fn2
[0-9 ]+: [0-9a-f]+ +0 TLS +GLOBAL DEFAULT +9 sg2
[0-9 ]+: [0-9a-f]+ +0 TLS +GLOBAL DEFAULT +UND sG1
[0-9 ]+: [0-9a-f]+ +0 TLS +GLOBAL HIDDEN +9 sh1
diff --git a/ld/testsuite/ld-alpha/tlspic.rd b/ld/testsuite/ld-alpha/tlspic.rd
index 04b2e0fe951e..bed345bc71e7 100644
--- a/ld/testsuite/ld-alpha/tlspic.rd
+++ b/ld/testsuite/ld-alpha/tlspic.rd
@@ -57,17 +57,13 @@ Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
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]+ 172 FUNC GLOBAL DEFAULT \[<other>: 88\] 6 fn1
.* [0-9a-f]+ 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
.* [0-9a-f]+ 0 TLS GLOBAL DEFAULT 8 sg2
.* [0-9a-f]+ 0 TLS GLOBAL DEFAULT 8 sg6
@@ -90,9 +86,6 @@ Symbol table '.symtab' contains [0-9]+ entries:
.* [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
@@ -126,7 +119,7 @@ Symbol table '.symtab' contains [0-9]+ entries:
.* [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]+ +172 FUNC +GLOBAL DEFAULT +\[<other>: 88\] +6 fn1
.* [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS __bss_start
.* [0-9a-f]+ +0 TLS +GLOBAL DEFAULT +8 sg2
.* [0-9a-f]+ +0 TLS +GLOBAL DEFAULT +8 sg6
diff --git a/ld/testsuite/ld-arm/arm-app-abs32.d b/ld/testsuite/ld-arm/arm-app-abs32.d
index 9a4da22b33f7..ce684d44e506 100644
--- a/ld/testsuite/ld-arm/arm-app-abs32.d
+++ b/ld/testsuite/ld-arm/arm-app-abs32.d
@@ -7,7 +7,7 @@ start address .*
Disassembly of section .plt:
.* <.plt>:
- .*: e52de004 str lr, \[sp, #-4\]!
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
.*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x10>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
@@ -19,9 +19,9 @@ 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}
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: e59f0004 ldr r0, \[pc, #4\] ; .* <_start\+0x14>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.*: .* .*
diff --git a/ld/testsuite/ld-arm/arm-app.d b/ld/testsuite/ld-arm/arm-app.d
index 207961ea0fa3..3ed76f06e9bf 100644
--- a/ld/testsuite/ld-arm/arm-app.d
+++ b/ld/testsuite/ld-arm/arm-app.d
@@ -7,7 +7,7 @@ start address 0x.*
Disassembly of section .plt:
.* <.plt>:
- .*: e52de004 str lr, \[sp, #-4\]!
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
.*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x10>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
@@ -19,16 +19,16 @@ Disassembly of section .text:
.* <_start>:
.*: e1a0c00d mov ip, sp
- .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: e92dd800 push {fp, ip, lr, pc}
.*: eb000001 bl .* <app_func>
- .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.* <app_func>:
.*: e1a0c00d mov ip, sp
- .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: e92dd800 push {fp, ip, lr, pc}
.*: ebfffff4 bl .* <_start-0xc>
- .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.* <app_func2>:
diff --git a/ld/testsuite/ld-arm/arm-be8.d b/ld/testsuite/ld-arm/arm-be8.d
new file mode 100644
index 000000000000..43ce9b016e1c
--- /dev/null
+++ b/ld/testsuite/ld-arm/arm-be8.d
@@ -0,0 +1,8 @@
+
+.*: file format.*
+
+Contents of section .text:
+ 8000 0000a0e3 1eff2fe1 c0467047 fff7fcff .*
+ 8010 12345678 .*
+# Ignore .ARM.attributes section
+#...
diff --git a/ld/testsuite/ld-arm/arm-be8.s b/ld/testsuite/ld-arm/arm-be8.s
new file mode 100644
index 000000000000..871b6911535b
--- /dev/null
+++ b/ld/testsuite/ld-arm/arm-be8.s
@@ -0,0 +1,14 @@
+.arch armv6
+.text
+arm:
+mov r0, #0
+$m:
+bx lr
+.thumb
+.thumb_func
+thumb:
+nop
+bx lr
+bl thumb
+data:
+.word 0x12345678
diff --git a/ld/testsuite/ld-arm/arm-call.d b/ld/testsuite/ld-arm/arm-call.d
index fd4cd1358cc8..34c31d9a396a 100644
--- a/ld/testsuite/ld-arm/arm-call.d
+++ b/ld/testsuite/ld-arm/arm-call.d
@@ -11,9 +11,9 @@ Disassembly of section .text:
8010: fa00000a blx 8040 <t1>
8014: fb000009 blx 8042 <t2>
8018: ea00000f b 805c <__t1_from_arm>
- 801c: ea000011 b 8068 <__t2_from_arm>
+ 801c: ea000010 b 8064 <__t2_from_arm>
8020: 1b00000d blne 805c <__t1_from_arm>
- 8024: 1b00000f blne 8068 <__t2_from_arm>
+ 8024: 1b00000e blne 8064 <__t2_from_arm>
8028: 1b000003 blne 803c <arm>
802c: eb000002 bl 803c <arm>
8030: faffffff blx 8034 <thumblocal>
@@ -48,11 +48,9 @@ Disassembly of section .text:
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
+ 805c: e51ff004 ldr pc, \[pc, #-4\] ; 8060 <__t1_from_arm\+0x4>
+ 8060: 00008041 .word 0x00008041
+
+00008064 <__t2_from_arm>:
+ 8064: e51ff004 ldr pc, \[pc, #-4\] ; 8068 <__t2_from_arm\+0x4>
+ 8068: 00008043 .word 0x00008043
diff --git a/ld/testsuite/ld-arm/arm-dyn.ld b/ld/testsuite/ld-arm/arm-dyn.ld
index 96bc10c0c4c5..4f2e0de39e0c 100644
--- a/ld/testsuite/ld-arm/arm-dyn.ld
+++ b/ld/testsuite/ld-arm/arm-dyn.ld
@@ -187,11 +187,6 @@ SECTIONS
.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/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp
index 1a9fc00aeb8c..a83c1eedf0b4 100644
--- a/ld/testsuite/ld-arm/arm-elf.exp
+++ b/ld/testsuite/ld-arm/arm-elf.exp
@@ -21,7 +21,7 @@ if {[istarget "arm-*-vxworks"]} {
{"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
"" {vxworks1-lib.s}
{{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
- {readelf --symbols vxworks1-lib.nd}}
+ {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
"libvxworks1.so"}
{"VxWorks executable test 1 (dynamic)" \
"tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
@@ -41,6 +41,7 @@ if {[istarget "arm-*-vxworks"]} {
}
run_ld_link_tests $armvxworkstests
run_dump_test "vxworks1-static"
+ run_dump_test "emit-relocs1-vxworks"
}
# Exclude non-ARM-ELF targets.
@@ -59,6 +60,12 @@ if { ![is_elf_format] || ![istarget "arm*-*-*"] } {
# readelf: Apply readelf options on result. Compare with regex (last arg).
set armelftests {
+ {"Group relocations" "-Ttext 0x8000 --section-start zero=0x0 --section-start alpha=0xeef0 --section-start beta=0xffeef0" "" {group-relocs.s}
+ {{objdump -Dr group-relocs.d}}
+ "group-relocs"}
+ {"Thumb-1 BL" "-Ttext 0x1000 --section-start .foo=0x401000" "" {thumb1-bl.s}
+ {{objdump -dr thumb1-bl.d}}
+ "thumb1-bl"}
{"Simple non-PIC shared library" "-shared" "" {arm-lib.s}
{{objdump -fdw arm-lib.d} {objdump -Rw arm-lib.r}}
"arm-lib.so"}
@@ -74,7 +81,11 @@ set armelftests {
{"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" ""
+ {"Thumb shared library with ARM entry points" "-shared -T arm-lib.ld" "-mthumb-interwork"
+ {mixed-lib.s}
+ {{objdump -fdw armthumb-lib.d} {readelf -Ds armthumb-lib.sym}}
+ "armthumb-lib.so"}
+ {"Mixed ARM/Thumb shared library" "-shared -T arm-lib.ld -use-blx" ""
{mixed-lib.s}
{{objdump -fdw mixed-lib.d} {objdump -Rw mixed-lib.r}
{readelf -Ds mixed-lib.sym}}
@@ -122,6 +133,67 @@ set armelftests {
{"thumb-rel32" "-static -T arm.ld" "" {thumb-rel32.s}
{{objdump -s thumb-rel32.d}}
"thumb-rel32"}
+ {"MOVW/MOVT" "-static -T arm.ld" "" {arm-movwt.s}
+ {{objdump -dw arm-movwt.d}}
+ "arm-movwt"}
+ {"BE8 Mapping Symbols" "-static -T arm.ld -EB --be8" "-EB" {arm-be8.s}
+ {{objdump -s arm-be8.d}}
+ "arm-be8"}
+ {"Using Thumb lib by another lib" "-shared tmpdir/mixed-lib.so" "" {use-thumb-lib.s}
+ {{readelf -Ds use-thumb-lib.sym}}
+ "use-thumb-lib.so"}
+ {"VFP11 denorm erratum fix, scalar operation"
+ "-EL --vfp11-denorm-fix=scalar -Ttext=0x8000" "-EL -mfpu=vfpxd" {vfp11-fix-scalar.s}
+ {{objdump -dr vfp11-fix-scalar.d}}
+ "vfp11-fix-scalar"}
+ {"VFP11 denorm erratum fix, vector operation"
+ "-EB --vfp11-denorm-fix=vector -Ttext=0x8000" "-EB -mfpu=vfpxd" {vfp11-fix-vector.s}
+ {{objdump -dr vfp11-fix-vector.d}}
+ "vfp11-fix-vector"}
+ {"VFP11 denorm erratum fix, embedded code-like data"
+ "-EL --vfp11-denorm-fix=scalar -Ttext=0x8000" "-EL -mfpu=vfpxd" {vfp11-fix-none.s}
+ {{objdump -dr vfp11-fix-none.d}}
+ "vfp11-fix-none"}
+ {"Unwinding and -gc-sections" "-gc-sections" "" {gc-unwind.s}
+ {{objdump -sj.data gc-unwind.d}}
+ "gc-unwind"}
+ {"arm-pic-veneer" "-static -T arm.ld --pic-veneer" "" {arm-pic-veneer.s}
+ {{objdump -d arm-pic-veneer.d}}
+ "arm-pic-veneer"}
+ {"Preempt Thumb symbol" "tmpdir/mixed-lib.so -T arm-dyn.ld --use-blx" ""
+ {preempt-app.s}
+ {{readelf -Ds preempt-app.sym}}
+ "preempt-app"}
+ {"jump19" "-static -T arm.ld" "" {jump19.s}
+ {{objdump -dr jump19.d}}
+ "jump19"}
+ {"EABI attribute merging" "-r" "" {attr-merge.s attr-merge.s}
+ {{readelf -A attr-merge.attr}}
+ "attr-merge"}
+ {"callweak" "-static -T arm.ld" "" {callweak.s}
+ {{objdump -dr callweak.d}}
+ "callweak"}
}
run_ld_link_tests $armelftests
+run_dump_test "group-relocs-alu-bad"
+run_dump_test "group-relocs-ldr-bad"
+run_dump_test "group-relocs-ldrs-bad"
+run_dump_test "group-relocs-ldc-bad"
+run_dump_test "thumb2-bl-as-thumb1-bad"
+run_dump_test "thumb2-bl-bad"
+run_dump_test "emit-relocs1"
+
+# Exclude non-ARM-EABI targets.
+
+if { ![istarget "arm*-*-*eabi"] } {
+ return
+}
+
+set armeabitests {
+ {"Thumb-2 BL" "-Ttext 0x1000 --section-start .foo=0x1001000" "" {thumb2-bl.s}
+ {{objdump -dr thumb2-bl.d}}
+ "thumb2-bl"}
+}
+
+run_ld_link_tests $armeabitests
diff --git a/ld/testsuite/ld-arm/arm-lib-plt32.d b/ld/testsuite/ld-arm/arm-lib-plt32.d
index 58206f43796c..d1b7944f643c 100644
--- a/ld/testsuite/ld-arm/arm-lib-plt32.d
+++ b/ld/testsuite/ld-arm/arm-lib-plt32.d
@@ -7,7 +7,7 @@ start address 0x.*
Disassembly of section .plt:
.* <.plt>:
- .*: e52de004 str lr, \[sp, #-4\]!
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
.*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x10>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
@@ -19,9 +19,9 @@ Disassembly of section .text:
.* <lib_func1>:
.*: e1a0c00d mov ip, sp
- .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: e92dd800 push {fp, ip, lr, pc}
.*: ebfffff9 bl .* <lib_func1-0xc>
- .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.* <lib_func2>:
diff --git a/ld/testsuite/ld-arm/arm-lib.d b/ld/testsuite/ld-arm/arm-lib.d
index e3257c955149..9d25bbbfa78f 100644
--- a/ld/testsuite/ld-arm/arm-lib.d
+++ b/ld/testsuite/ld-arm/arm-lib.d
@@ -7,7 +7,7 @@ start address 0x.*
Disassembly of section .plt:
.* <.plt>:
- .*: e52de004 str lr, \[sp, #-4\]!
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
.*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x10>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
@@ -19,9 +19,9 @@ Disassembly of section .text:
.* <lib_func1>:
.*: e1a0c00d mov ip, sp
- .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: e92dd800 push {fp, ip, lr, pc}
.*: ebfffff9 bl .* <lib_func1-0xc>
- .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.* <lib_func2>:
diff --git a/ld/testsuite/ld-arm/arm-lib.ld b/ld/testsuite/ld-arm/arm-lib.ld
index 0415d20d8a67..2d2850e3da10 100644
--- a/ld/testsuite/ld-arm/arm-lib.ld
+++ b/ld/testsuite/ld-arm/arm-lib.ld
@@ -180,11 +180,6 @@ SECTIONS
.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/ld/testsuite/ld-arm/arm-movwt.d b/ld/testsuite/ld-arm/arm-movwt.d
new file mode 100644
index 000000000000..bf551648d6d8
--- /dev/null
+++ b/ld/testsuite/ld-arm/arm-movwt.d
@@ -0,0 +1,39 @@
+
+.*: file format.*
+
+Disassembly of section .text:
+
+00008000 <[^>]*>:
+ 8000: e3000000 movw r0, #0 ; 0x0
+ 8004: e3411234 movt r1, #4660 ; 0x1234
+ 8008: e3082000 movw r2, #32768 ; 0x8000
+ 800c: e3413233 movt r3, #4659 ; 0x1233
+ 8010: e3004011 movw r4, #17 ; 0x11
+ 8014: e3415234 movt r5, #4660 ; 0x1234
+ 8018: e3086011 movw r6, #32785 ; 0x8011
+ 801c: e3417233 movt r7, #4659 ; 0x1233
+
+00008020 <[^>]*>:
+ 8020: f240 0700 movw r7, #0 ; 0x0
+ 8024: f2c1 2634 movt r6, #4660 ; 0x1234
+ 8028: f248 0500 movw r5, #32768 ; 0x8000
+ 802c: f2c1 2433 movt r4, #4659 ; 0x1233
+ 8030: f240 0311 movw r3, #17 ; 0x11
+ 8034: f2c1 2234 movt r2, #4660 ; 0x1234
+ 8038: f248 0111 movw r1, #32785 ; 0x8011
+ 803c: f2c1 2033 movt r0, #4659 ; 0x1233
+
+Disassembly of section .far:
+
+12340000 <[^>]*>:
+12340000: e3080000 movw r0, #32768 ; 0x8000
+12340004: e34e0dcc movt r0, #60876 ; 0xedcc
+12340008: e3080021 movw r0, #32801 ; 0x8021
+1234000c: e34e0dcc movt r0, #60876 ; 0xedcc
+
+12340010 <[^>]*>:
+12340010: f248 0000 movw r0, #32768 ; 0x8000
+12340014: f6ce 50cc movt r0, #60876 ; 0xedcc
+12340018: f248 0021 movw r0, #32801 ; 0x8021
+1234001c: f6ce 50cc movt r0, #60876 ; 0xedcc
+
diff --git a/ld/testsuite/ld-arm/arm-movwt.s b/ld/testsuite/ld-arm/arm-movwt.s
new file mode 100644
index 000000000000..ba8b1c5c2f34
--- /dev/null
+++ b/ld/testsuite/ld-arm/arm-movwt.s
@@ -0,0 +1,44 @@
+ .text
+ .arch armv6t2
+ .syntax unified
+ .global _start
+ .type _start, %function
+_start:
+base1:
+arm1:
+ movw r0, #:lower16:arm2
+ movt r1, #:upper16:arm2
+ movw r2, #:lower16:(arm2 - arm1)
+ movt r3, #:upper16:(arm2 - arm1)
+ movw r4, #:lower16:thumb2
+ movt r5, #:upper16:thumb2
+ movw r6, #:lower16:(thumb2 - arm1)
+ movt r7, #:upper16:(thumb2 - arm1)
+ .thumb
+ .type thumb1, %function
+ .thumb_func
+thumb1:
+ movw r7, #:lower16:arm2
+ movt r6, #:upper16:arm2
+ movw r5, #:lower16:(arm2 - arm1)
+ movt r4, #:upper16:(arm2 - arm1)
+ movw r3, #:lower16:thumb2
+ movt r2, #:upper16:thumb2
+ movw r1, #:lower16:(thumb2 - arm1)
+ movt r0, #:upper16:(thumb2 - arm1)
+
+ .section .far, "ax", %progbits
+ .arm
+arm2:
+ movw r0, #:lower16:(arm1 - arm2)
+ movt r0, #:upper16:(arm1 - arm2)
+ movw r0, #:lower16:(thumb1 - arm2)
+ movt r0, #:upper16:(thumb1 - arm2)
+ .thumb
+ .type thumb2, %function
+ .thumb_func
+thumb2:
+ movw r0, #:lower16:(arm1 - arm2)
+ movt r0, #:upper16:(arm1 - arm2)
+ movw r0, #:lower16:(thumb1 - arm2)
+ movt r0, #:upper16:(thumb1 - arm2)
diff --git a/ld/testsuite/ld-arm/arm-pic-veneer.d b/ld/testsuite/ld-arm/arm-pic-veneer.d
new file mode 100644
index 000000000000..97eeb52f153d
--- /dev/null
+++ b/ld/testsuite/ld-arm/arm-pic-veneer.d
@@ -0,0 +1,17 @@
+
+.*: file format.*
+
+Disassembly of section .text:
+
+00008000 <_start>:
+ 8000: ea000000 b 8008 <__foo_from_arm>
+
+00008004 <foo>:
+ 8004: 46c0 nop \(mov r8, r8\)
+ 8006: 4770 bx lr
+
+00008008 <__foo_from_arm>:
+ 8008: e59fc004 ldr ip, \[pc, #4\] ; 8014 <__foo_from_arm\+0xc>
+ 800c: e08cc00f add ip, ip, pc
+ 8010: e12fff1c bx ip
+ 8014: fffffff1 .word 0xfffffff1
diff --git a/ld/testsuite/ld-arm/arm-pic-veneer.s b/ld/testsuite/ld-arm/arm-pic-veneer.s
new file mode 100644
index 000000000000..9e09ed633377
--- /dev/null
+++ b/ld/testsuite/ld-arm/arm-pic-veneer.s
@@ -0,0 +1,14 @@
+.text
+.arm
+.global _start
+.type _start, %function
+_start:
+b foo
+
+.thumb
+.global foo
+.type foo, %function
+foo:
+nop
+bx lr
+
diff --git a/ld/testsuite/ld-arm/arm-static-app.d b/ld/testsuite/ld-arm/arm-static-app.d
index 9a3309d6136b..f18f3c6ceafa 100644
--- a/ld/testsuite/ld-arm/arm-static-app.d
+++ b/ld/testsuite/ld-arm/arm-static-app.d
@@ -8,16 +8,16 @@ Disassembly of section .text:
.* <_start>:
.*: e1a0c00d mov ip, sp
- .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: e92dd800 push {fp, ip, lr, pc}
.*: eb000001 bl .* <app_func>
- .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.* <app_func>:
.*: e1a0c00d mov ip, sp
- .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: e92dd800 push {fp, ip, lr, pc}
.*: eb000001 bl .* <app_func2>
- .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.* <app_func2>:
diff --git a/ld/testsuite/ld-arm/arm.ld b/ld/testsuite/ld-arm/arm.ld
index 4ef7d824ec22..c9e01e65a822 100644
--- a/ld/testsuite/ld-arm/arm.ld
+++ b/ld/testsuite/ld-arm/arm.ld
@@ -14,5 +14,7 @@ SECTIONS
} =0
. = 0x9000;
.got : { *(.got) *(.got.plt)}
+ . = 0x12340000;
+ .far : { *(.far) }
.ARM.attribues 0 : { *(.ARM.atttributes) }
}
diff --git a/ld/testsuite/ld-arm/armthumb-lib.d b/ld/testsuite/ld-arm/armthumb-lib.d
new file mode 100644
index 000000000000..bd45c87fce0c
--- /dev/null
+++ b/ld/testsuite/ld-arm/armthumb-lib.d
@@ -0,0 +1,44 @@
+
+tmpdir/armthumb-lib.so: file format elf32-(little|big)arm
+architecture: arm, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x.*
+
+Disassembly of section .plt:
+
+.* <.plt>:
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x1c>
+ .*: 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 push {fp, ip, lr, pc}
+ .*: ebfffff. bl .* <lib_func1-0x..?>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ .*: e1a00000 nop \(mov r0,r0\)
+ .*: e1a00000 nop \(mov r0,r0\)
+ .*: e1a00000 nop \(mov r0,r0\)
+
+.* <__real_lib_func2>:
+ .*: 4770 bx lr
+ .*: 46c0 nop \(mov r8, r8\)
+ .*: 46c0 nop \(mov r8, r8\)
+ .*: 46c0 nop \(mov r8, r8\)
+ .*: 46c0 nop \(mov r8, r8\)
+ .*: 46c0 nop \(mov r8, r8\)
+ .*: 46c0 nop \(mov r8, r8\)
+ .*: 46c0 nop \(mov r8, r8\)
+
+.* <lib_func2>:
+ .*: e59fc004 ldr ip, \[pc, #4\] ; .* <lib_func2\+0xc>
+ .*: e08cc00f add ip, ip, pc
+ .*: e12fff1c bx ip
+ .*: ffffffe5 .*
diff --git a/ld/testsuite/ld-arm/armthumb-lib.sym b/ld/testsuite/ld-arm/armthumb-lib.sym
new file mode 100644
index 000000000000..d482ccd4ba2a
--- /dev/null
+++ b/ld/testsuite/ld-arm/armthumb-lib.sym
@@ -0,0 +1,17 @@
+
+Symbol table for image:
+ Num Buc: Value Size Type Bind Vis Ndx Name
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _edata
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __bss_start__
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _end
+ .. ..: ........ 4 OBJECT GLOBAL DEFAULT 9 data_obj
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __bss_end__
+ .. ..: .......0 20 FUNC GLOBAL DEFAULT 6 lib_func1
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __exidx_start
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT 9 __data_start
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __end__
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+ .. ..: 00000000 0 NOTYPE GLOBAL DEFAULT UND app_func2
+ .. ..: .......0 2 FUNC GLOBAL DEFAULT 6 lib_func2
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _bss_end__
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __exidx_end
diff --git a/ld/testsuite/ld-arm/attr-merge.attr b/ld/testsuite/ld-arm/attr-merge.attr
new file mode 100644
index 000000000000..341e6d1e412c
--- /dev/null
+++ b/ld/testsuite/ld-arm/attr-merge.attr
@@ -0,0 +1,12 @@
+Attribute Section: aeabi
+File Attributes
+ Tag_CPU_name: "ARM7TDMI"
+ Tag_CPU_arch: v4T
+ Tag_ABI_PCS_wchar_t: 4
+ Tag_ABI_FP_denormal: Needed
+ Tag_ABI_FP_exceptions: Needed
+ Tag_ABI_FP_number_model: IEEE 754
+ Tag_ABI_align8_needed: Yes
+ Tag_ABI_align8_preserved: Yes, except leaf SP
+ Tag_ABI_enum_size: small
+ Tag_ABI_optimization_goals: Aggressive Debug
diff --git a/ld/testsuite/ld-arm/attr-merge.s b/ld/testsuite/ld-arm/attr-merge.s
new file mode 100644
index 000000000000..b56f6e32d6e3
--- /dev/null
+++ b/ld/testsuite/ld-arm/attr-merge.s
@@ -0,0 +1,11 @@
+ .cpu arm7tdmi
+ .fpu softvfp
+ .eabi_attribute 20, 1
+ .eabi_attribute 21, 1
+ .eabi_attribute 23, 3
+ .eabi_attribute 24, 1
+ .eabi_attribute 25, 1
+ .eabi_attribute 26, 1
+ .eabi_attribute 30, 6
+ .eabi_attribute 18, 4
+ .file "attr-merge.s"
diff --git a/ld/testsuite/ld-arm/emit-relocs1-vxworks.d b/ld/testsuite/ld-arm/emit-relocs1-vxworks.d
new file mode 100644
index 000000000000..6d84a4c349b8
--- /dev/null
+++ b/ld/testsuite/ld-arm/emit-relocs1-vxworks.d
@@ -0,0 +1,12 @@
+#source: emit-relocs1.s
+#ld: -Ttext 0x10000 --defsym target=0xc000 -e0 --emit-relocs
+#objdump: -dr
+#...
+ +10000: e1a00000 nop .*
+ +10004: e1a00000 nop .*
+ +10008: e1a00000 nop .*
+ +1000c: e1a00000 nop .*
+ +10010: eaffeffa b c000 <target>
+ +10010: R_ARM_PC24 target\+0xf+8
+ +10014: eaffeffd b c010 <target\+0x10>
+ +10014: R_ARM_PC24 target\+0x8
diff --git a/ld/testsuite/ld-arm/emit-relocs1.d b/ld/testsuite/ld-arm/emit-relocs1.d
new file mode 100644
index 000000000000..191cb52c8670
--- /dev/null
+++ b/ld/testsuite/ld-arm/emit-relocs1.d
@@ -0,0 +1,12 @@
+#source: emit-relocs1.s
+#ld: -Ttext 0x10000 --defsym target=0xc000 -e0 --emit-relocs
+#objdump: -dr
+#...
+ +10000: e1a00000 nop .*
+ +10004: e1a00000 nop .*
+ +10008: e1a00000 nop .*
+ +1000c: e1a00000 nop .*
+ +10010: eaffeffa b c000 <target>
+ +10010: R_ARM_(JUMP|PC)24 target
+ +10014: eaffeffd b c010 <target\+0x10>
+ +10014: R_ARM_(JUMP|PC)24 target
diff --git a/ld/testsuite/ld-arm/emit-relocs1.s b/ld/testsuite/ld-arm/emit-relocs1.s
new file mode 100644
index 000000000000..8971d4dbfabd
--- /dev/null
+++ b/ld/testsuite/ld-arm/emit-relocs1.s
@@ -0,0 +1,6 @@
+ nop
+ nop
+ nop
+ nop
+ b target
+ b target+16
diff --git a/ld/testsuite/ld-arm/gc-unwind.d b/ld/testsuite/ld-arm/gc-unwind.d
new file mode 100644
index 000000000000..fbb79115b8f6
--- /dev/null
+++ b/ld/testsuite/ld-arm/gc-unwind.d
@@ -0,0 +1,5 @@
+
+.*: file format.*
+
+Contents of section .data:
+ [^ ]* 22222222 .*
diff --git a/ld/testsuite/ld-arm/gc-unwind.s b/ld/testsuite/ld-arm/gc-unwind.s
new file mode 100644
index 000000000000..c5326c28651a
--- /dev/null
+++ b/ld/testsuite/ld-arm/gc-unwind.s
@@ -0,0 +1,38 @@
+@ Test -gc-sections and unwinding tables. .data.eh should be pulled in
+@ via the EH tables, .data.foo should not.
+.text
+.global _start
+.fnstart
+_start:
+bx lr
+.personality my_pr
+.handlerdata
+.word 0
+.fnend
+
+.section .data.foo
+my_foo:
+.word 0x11111111
+
+.section .text.foo
+.fnstart
+foo:
+bx lr
+.personality my_pr
+.handlerdata
+.word my_foo
+.fnend
+
+.section .data.eh
+my_eh:
+.word 0x22222222
+
+.section .text.eh
+.fnstart
+my_pr:
+bx lr
+.personality my_pr
+.handlerdata
+.word my_eh
+.fnend
+
diff --git a/ld/testsuite/ld-arm/group-relocs-alu-bad.d b/ld/testsuite/ld-arm/group-relocs-alu-bad.d
new file mode 100644
index 000000000000..0346db1a9732
--- /dev/null
+++ b/ld/testsuite/ld-arm/group-relocs-alu-bad.d
@@ -0,0 +1,4 @@
+#name: ALU group relocations failure test
+#source: group-relocs-alu-bad.s
+#ld: -Ttext 0x8000 --section-start foo=0x9010
+#error: Overflow whilst splitting 0x1010 for group relocation
diff --git a/ld/testsuite/ld-arm/group-relocs-alu-bad.s b/ld/testsuite/ld-arm/group-relocs-alu-bad.s
new file mode 100644
index 000000000000..e644669c3b9f
--- /dev/null
+++ b/ld/testsuite/ld-arm/group-relocs-alu-bad.s
@@ -0,0 +1,20 @@
+@ Test intended to fail for ALU group relocations.
+@
+@ Beware when editing this file: it is carefully crafted so that
+@ a specific PC-relative offset arises.
+
+@ We will place .text at 0x8000.
+
+ .text
+ .globl _start
+
+_start:
+ add r0, r0, #:pc_g0:(bar)
+
+@ We will place the section foo at 0x9004.
+
+ .section foo
+
+bar:
+ mov r0, #0
+
diff --git a/ld/testsuite/ld-arm/group-relocs-ldc-bad.d b/ld/testsuite/ld-arm/group-relocs-ldc-bad.d
new file mode 100644
index 000000000000..d4bfb2dfbddb
--- /dev/null
+++ b/ld/testsuite/ld-arm/group-relocs-ldc-bad.d
@@ -0,0 +1,4 @@
+#name: LDC group relocations failure test
+#source: group-relocs-ldc-bad.s
+#ld: -Ttext 0x8000 --section-start foo=0x118400
+#error: Overflow whilst splitting 0x110400 for group relocation
diff --git a/ld/testsuite/ld-arm/group-relocs-ldc-bad.s b/ld/testsuite/ld-arm/group-relocs-ldc-bad.s
new file mode 100644
index 000000000000..611255b063da
--- /dev/null
+++ b/ld/testsuite/ld-arm/group-relocs-ldc-bad.s
@@ -0,0 +1,19 @@
+@ Test intended to fail for LDC group relocations.
+
+@ We will place .text at 0x8000.
+
+ .text
+ .globl _start
+
+_start:
+ add r0, r0, #:pc_g0_nc:(bar)
+ ldc 0, c0, [r0, #:pc_g1:(bar + 4)]
+
+@ We will place the section foo at 0x118400.
+@ (The relocations above would be OK if it were at 0x118200, for example.)
+
+ .section foo
+
+bar:
+ mov r0, #0
+
diff --git a/ld/testsuite/ld-arm/group-relocs-ldr-bad.d b/ld/testsuite/ld-arm/group-relocs-ldr-bad.d
new file mode 100644
index 000000000000..04586af34f5e
--- /dev/null
+++ b/ld/testsuite/ld-arm/group-relocs-ldr-bad.d
@@ -0,0 +1,4 @@
+#name: LDR group relocations failure test
+#source: group-relocs-ldr-bad.s
+#ld: -Ttext 0x8000 --section-start foo=0x8001000
+#error: .*Overflow whilst splitting 0x8001000 for group relocation.*
diff --git a/ld/testsuite/ld-arm/group-relocs-ldr-bad.s b/ld/testsuite/ld-arm/group-relocs-ldr-bad.s
new file mode 100644
index 000000000000..6ab4f3c97469
--- /dev/null
+++ b/ld/testsuite/ld-arm/group-relocs-ldr-bad.s
@@ -0,0 +1,18 @@
+@ Test intended to fail for LDR group relocations.
+
+@ We will place .text at 0x8000.
+
+ .text
+ .globl _start
+
+_start:
+ add r0, r0, #:sb_g0_nc:(bar)
+ ldr r1, [r0, #:sb_g1:(bar)]
+
+@ We will place the section foo at 0x8001000.
+
+ .section foo
+
+bar:
+ mov r0, #0
+
diff --git a/ld/testsuite/ld-arm/group-relocs-ldrs-bad.d b/ld/testsuite/ld-arm/group-relocs-ldrs-bad.d
new file mode 100644
index 000000000000..0520184b3363
--- /dev/null
+++ b/ld/testsuite/ld-arm/group-relocs-ldrs-bad.d
@@ -0,0 +1,4 @@
+#name: LDRS group relocations failure test
+#source: group-relocs-ldrs-bad.s
+#ld: -Ttext 0x8000 --section-start foo=0x8000100
+#error: Overflow whilst splitting 0x8000100 for group relocation
diff --git a/ld/testsuite/ld-arm/group-relocs-ldrs-bad.s b/ld/testsuite/ld-arm/group-relocs-ldrs-bad.s
new file mode 100644
index 000000000000..4480d4aa5f02
--- /dev/null
+++ b/ld/testsuite/ld-arm/group-relocs-ldrs-bad.s
@@ -0,0 +1,17 @@
+@ Test intended to fail for LDRS group relocations.
+
+@ We will place .text at 0x8000.
+
+ .text
+ .globl _start
+
+_start:
+ add r0, r0, #:sb_g0_nc:(bar)
+ ldrd r2, [r0, #:sb_g1:(bar)]
+
+@ We will place the section foo at 0x8000100.
+
+ .section foo
+
+bar:
+ mov r0, #0
diff --git a/ld/testsuite/ld-arm/group-relocs.d b/ld/testsuite/ld-arm/group-relocs.d
new file mode 100644
index 000000000000..d1fdc7d1b773
--- /dev/null
+++ b/ld/testsuite/ld-arm/group-relocs.d
@@ -0,0 +1,69 @@
+
+tmpdir/group-relocs: file format elf32-(little|big)arm
+
+Disassembly of section .text:
+
+00008000 <_start>:
+ 8000: e28f00bc add r0, pc, #188 ; 0xbc
+ 8004: e28f0c6e add r0, pc, #28160 ; 0x6e00
+ 8008: e28000ec add r0, r0, #236 ; 0xec
+ 800c: e28f08ff add r0, pc, #16711680 ; 0xff0000
+ 8010: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 8014: e28000e4 add r0, r0, #228 ; 0xe4
+ 8018: e2800000 add r0, r0, #0 ; 0x0
+ 801c: e28f0cee add r0, pc, #60928 ; 0xee00
+ 8020: e28000f0 add r0, r0, #240 ; 0xf0
+ 8024: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 8028: e2800cee add r0, r0, #60928 ; 0xee00
+ 802c: e28000f0 add r0, r0, #240 ; 0xf0
+ 8030: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 8034: e59010c0 ldr r1, \[r0, #192\]
+ 8038: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 803c: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 8040: e59010b8 ldr r1, \[r0, #184\]
+ 8044: e5901000 ldr r1, \[r0\]
+ 8048: e2800cee add r0, r0, #60928 ; 0xee00
+ 804c: e59010f0 ldr r1, \[r0, #240\]
+ 8050: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 8054: e2800cee add r0, r0, #60928 ; 0xee00
+ 8058: e59010f0 ldr r1, \[r0, #240\]
+ 805c: e1c026d0 ldrd r2, \[r0, #96\]
+ 8060: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 8064: e1c029d0 ldrd r2, \[r0, #144\]
+ 8068: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 806c: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 8070: e1c028d8 ldrd r2, \[r0, #136\]
+ 8074: e1c020d0 ldrd r2, \[r0\]
+ 8078: e2800cee add r0, r0, #60928 ; 0xee00
+ 807c: e1c02fd0 ldrd r2, \[r0, #240\]
+ 8080: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 8084: e2800cee add r0, r0, #60928 ; 0xee00
+ 8088: e1c02fd0 ldrd r2, \[r0, #240\]
+ 808c: ed90000c ldc 0, cr0, \[r0, #48\]
+ 8090: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 8094: ed900018 ldc 0, cr0, \[r0, #96\]
+ 8098: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 809c: e2800c6e add r0, r0, #28160 ; 0x6e00
+ 80a0: ed900016 ldc 0, cr0, \[r0, #88\]
+ 80a4: ed900000 ldc 0, cr0, \[r0\]
+ 80a8: e2800cee add r0, r0, #60928 ; 0xee00
+ 80ac: ed90003c ldc 0, cr0, \[r0, #240\]
+ 80b0: e28008ff add r0, r0, #16711680 ; 0xff0000
+ 80b4: e2800cee add r0, r0, #60928 ; 0xee00
+ 80b8: ed90003c ldc 0, cr0, \[r0, #240\]
+
+000080bc <one_group_needed_alu_pc>:
+ 80bc: e3a00000 mov r0, #0 ; 0x0
+Disassembly of section zero:
+
+00000000 <one_group_needed_alu_sb>:
+ 0: e3a00000 mov r0, #0 ; 0x0
+Disassembly of section alpha:
+
+0000eef0 <two_groups_needed_alu_pc>:
+ eef0: e3a00000 mov r0, #0 ; 0x0
+Disassembly of section beta:
+
+00ffeef0 <three_groups_needed_alu_pc>:
+ ffeef0: e3a00000 mov r0, #0 ; 0x0
+#...
diff --git a/ld/testsuite/ld-arm/group-relocs.s b/ld/testsuite/ld-arm/group-relocs.s
new file mode 100644
index 000000000000..da1a15072681
--- /dev/null
+++ b/ld/testsuite/ld-arm/group-relocs.s
@@ -0,0 +1,156 @@
+@ Tests for group relocations.
+@
+@ Beware when editing this file: it is carefully crafted so that
+@ specific PC- and SB-relative offsets arise.
+@
+@ Note that the gas tests have already checked that group relocations are
+@ handled in the same way for local and external symbols.
+
+@ We will place .text at 0x8000.
+
+ .text
+ .globl _start
+
+_start:
+ @ ALU, PC-relative
+
+ @ Instructions start at .text + 0x0
+ add r0, r15, #:pc_g0:(one_group_needed_alu_pc)
+
+ @ Instructions start at .text + 0x4
+ add r0, r15, #:pc_g0_nc:(two_groups_needed_alu_pc)
+ add r0, r0, #:pc_g1:(two_groups_needed_alu_pc + 4)
+
+ @ Instructions start at .text + 0xc
+ add r0, r15, #:pc_g0_nc:(three_groups_needed_alu_pc)
+ add r0, r0, #:pc_g1_nc:(three_groups_needed_alu_pc + 4)
+ add r0, r0, #:pc_g2:(three_groups_needed_alu_pc + 8)
+
+ @ ALU, SB-relative
+
+ add r0, r0, #:sb_g0:(one_group_needed_alu_sb)
+
+ add r0, r15, #:sb_g0_nc:(two_groups_needed_alu_sb)
+ add r0, r0, #:sb_g1:(two_groups_needed_alu_sb)
+
+ add r0, r0, #:sb_g0_nc:(three_groups_needed_alu_sb)
+ add r0, r0, #:sb_g1_nc:(three_groups_needed_alu_sb)
+ add r0, r0, #:sb_g2:(three_groups_needed_alu_sb)
+
+ @ LDR, PC-relative
+
+ @ Instructions start at .text + 0x30
+ add r0, r0, #:pc_g0_nc:(two_groups_needed_ldr_pc)
+ ldr r1, [r0, #:pc_g1:(two_groups_needed_ldr_pc + 4)]
+
+ @ Instructions start at .text + 0x38
+ add r0, r0, #:pc_g0_nc:(three_groups_needed_ldr_pc)
+ add r0, r0, #:pc_g1_nc:(three_groups_needed_ldr_pc + 4)
+ ldr r1, [r0, #:pc_g2:(three_groups_needed_ldr_pc + 8)]
+
+ @ LDR, SB-relative
+
+ ldr r1, [r0, #:sb_g0:(one_group_needed_ldr_sb)]
+
+ add r0, r0, #:sb_g0_nc:(two_groups_needed_ldr_sb)
+ ldr r1, [r0, #:sb_g1:(two_groups_needed_ldr_sb)]
+
+ add r0, r0, #:sb_g0_nc:(three_groups_needed_ldr_sb)
+ add r0, r0, #:sb_g1_nc:(three_groups_needed_ldr_sb)
+ ldr r1, [r0, #:sb_g2:(three_groups_needed_ldr_sb)]
+
+ @ LDRS, PC-relative
+
+ @ Instructions start at .text + 0x5c
+ ldrd r2, [r0, #:pc_g0:(one_group_needed_ldrs_pc)]
+
+ @ Instructions start at .text + 0x60
+ add r0, r0, #:pc_g0_nc:(two_groups_needed_ldrs_pc)
+ ldrd r2, [r0, #:pc_g1:(two_groups_needed_ldrs_pc + 4)]
+
+ @ Instructions start at .text + 0x68
+ add r0, r0, #:pc_g0_nc:(three_groups_needed_ldrs_pc)
+ add r0, r0, #:pc_g1_nc:(three_groups_needed_ldrs_pc + 4)
+ ldrd r2, [r0, #:pc_g2:(three_groups_needed_ldrs_pc + 8)]
+
+ @ LDRS, SB-relative
+
+ ldrd r2, [r0, #:sb_g0:(one_group_needed_ldrs_sb)]
+
+ add r0, r0, #:sb_g0_nc:(two_groups_needed_ldrs_sb)
+ ldrd r2, [r0, #:sb_g1:(two_groups_needed_ldrs_sb)]
+
+ add r0, r0, #:sb_g0_nc:(three_groups_needed_ldrs_sb)
+ add r0, r0, #:sb_g1_nc:(three_groups_needed_ldrs_sb)
+ ldrd r2, [r0, #:sb_g2:(three_groups_needed_ldrs_sb)]
+
+ @ LDC, PC-relative
+
+ @ Instructions start at .text + 0x8c
+ ldc 0, c0, [r0, #:pc_g0:(one_group_needed_ldc_pc)]
+
+ @ Instructions start at .text + 0x90
+ add r0, r0, #:pc_g0_nc:(two_groups_needed_ldc_pc)
+ ldc 0, c0, [r0, #:pc_g1:(two_groups_needed_ldc_pc + 4)]
+
+ @ Instructions start at .text + 0x98
+ add r0, r0, #:pc_g0_nc:(three_groups_needed_ldc_pc)
+ add r0, r0, #:pc_g1_nc:(three_groups_needed_ldc_pc + 4)
+ ldc 0, c0, [r0, #:pc_g2:(three_groups_needed_ldc_pc + 8)]
+
+ @ LDC, SB-relative
+
+ ldc 0, c0, [r0, #:sb_g0:(one_group_needed_ldc_sb)]
+
+ add r0, r0, #:sb_g0_nc:(two_groups_needed_ldc_sb)
+ ldc 0, c0, [r0, #:sb_g1:(two_groups_needed_ldc_sb)]
+
+ add r0, r0, #:sb_g0_nc:(three_groups_needed_ldc_sb)
+ add r0, r0, #:sb_g1_nc:(three_groups_needed_ldc_sb)
+ ldc 0, c0, [r0, #:sb_g2:(three_groups_needed_ldc_sb)]
+
+@ This point in the file is .text + 0xbc.
+
+one_group_needed_alu_pc:
+one_group_needed_ldrs_pc:
+one_group_needed_ldc_pc:
+ mov r0, #0
+
+@ We will place the section zero at 0x0.
+
+ .section zero
+
+one_group_needed_alu_sb:
+one_group_needed_ldr_sb:
+one_group_needed_ldrs_sb:
+one_group_needed_ldc_sb:
+ mov r0, #0
+
+@ We will place the section alpha at 0xeef0.
+
+ .section alpha
+
+two_groups_needed_alu_sb:
+two_groups_needed_ldr_sb:
+two_groups_needed_ldrs_sb:
+two_groups_needed_ldc_sb:
+two_groups_needed_alu_pc:
+two_groups_needed_ldr_pc:
+two_groups_needed_ldrs_pc:
+two_groups_needed_ldc_pc:
+ mov r0, #0
+
+@ We will place the section beta at 0xffeef0.
+
+ .section beta
+
+three_groups_needed_alu_sb:
+three_groups_needed_ldr_sb:
+three_groups_needed_ldrs_sb:
+three_groups_needed_ldc_sb:
+three_groups_needed_alu_pc:
+three_groups_needed_ldr_pc:
+three_groups_needed_ldrs_pc:
+three_groups_needed_ldc_pc:
+ mov r0, #0
+
diff --git a/ld/testsuite/ld-arm/jump19.d b/ld/testsuite/ld-arm/jump19.d
new file mode 100644
index 000000000000..303477f622b1
--- /dev/null
+++ b/ld/testsuite/ld-arm/jump19.d
@@ -0,0 +1,12 @@
+
+.*jump19: file format elf32-(big|little)arm
+
+Disassembly of section .text:
+
+00008000 <_start>:
+ 8000: 4280 cmp r0, r0
+ 8002: f010 8000 beq.w 18006 <bar>
+ ...
+
+00018006 <bar>:
+ 18006: 4770 bx lr
diff --git a/ld/testsuite/ld-arm/jump19.s b/ld/testsuite/ld-arm/jump19.s
new file mode 100644
index 000000000000..1e3ddf06670a
--- /dev/null
+++ b/ld/testsuite/ld-arm/jump19.s
@@ -0,0 +1,12 @@
+@ Test the Thumb-2 JUMP19 relocation.
+
+ .syntax unified
+ .thumb
+ .global _start
+_start:
+ cmp r0, r0
+ beq.w bar
+ .space 65536
+ .weak bar
+bar:
+ bx lr
diff --git a/ld/testsuite/ld-arm/mixed-app-v5.d b/ld/testsuite/ld-arm/mixed-app-v5.d
index 9e8d4dd194bf..88317d2d75ea 100644
--- a/ld/testsuite/ld-arm/mixed-app-v5.d
+++ b/ld/testsuite/ld-arm/mixed-app-v5.d
@@ -7,8 +7,8 @@ start address 0x.*
Disassembly of section .plt:
.* <.plt>:
- .*: e52de004 str lr, \[sp, #-4\]!
- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x20>
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x1c>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
.*: .*
@@ -22,9 +22,9 @@ Disassembly of section .text:
.* <_start>:
.*: e1a0c00d mov ip, sp
- .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: e92dd800 push {fp, ip, lr, pc}
.*: eb000004 bl .* <app_func>
- .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.*: e1a00000 nop \(mov r0,r0\)
.*: e1a00000 nop \(mov r0,r0\)
@@ -32,9 +32,9 @@ Disassembly of section .text:
.* <app_func>:
.*: e1a0c00d mov ip, sp
- .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: e92dd800 push {fp, ip, lr, pc}
.*: ebfffff. bl .*
- .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.*: e1a00000 nop \(mov r0,r0\)
.*: e1a00000 nop \(mov r0,r0\)
diff --git a/ld/testsuite/ld-arm/mixed-app.d b/ld/testsuite/ld-arm/mixed-app.d
index 381222727e69..a3679ddf616f 100644
--- a/ld/testsuite/ld-arm/mixed-app.d
+++ b/ld/testsuite/ld-arm/mixed-app.d
@@ -7,12 +7,13 @@ start address 0x.*
Disassembly of section .plt:
.* <.plt>:
- .*: e52de004 str lr, \[sp, #-4\]!
- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x20>
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x2c>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
.*: .*
- .*: (46c04778 undefined|477846c0 ldrmib r4, \[r8, -r0, asr #13\]!)
+ .*: 4778 bx pc
+ .*: 46c0 nop \(mov r8, r8\)
.*: e28fc6.* add ip, pc, #.* ; 0x.*
.*: e28cca.* add ip, ip, #.* ; 0x.*
.*: e5bcf.* ldr pc, \[ip, #.*\]!
@@ -23,9 +24,9 @@ Disassembly of section .text:
.* <_start>:
.*: e1a0c00d mov ip, sp
- .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: e92dd800 push {fp, ip, lr, pc}
.*: eb000004 bl .* <app_func>
- .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.*: e1a00000 nop \(mov r0,r0\)
.*: e1a00000 nop \(mov r0,r0\)
@@ -33,9 +34,9 @@ Disassembly of section .text:
.* <app_func>:
.*: e1a0c00d mov ip, sp
- .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
- .*: ebfffff. bl .*
- .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: ebffff.. bl .*
+ .*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.*: e1a00000 nop \(mov r0,r0\)
.*: e1a00000 nop \(mov r0,r0\)
diff --git a/ld/testsuite/ld-arm/mixed-app.sym b/ld/testsuite/ld-arm/mixed-app.sym
index 49c5edf1c5b1..c63a34382693 100644
--- a/ld/testsuite/ld-arm/mixed-app.sym
+++ b/ld/testsuite/ld-arm/mixed-app.sym
@@ -9,7 +9,6 @@ Symbol table for image:
.. ..: 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
diff --git a/ld/testsuite/ld-arm/mixed-lib.d b/ld/testsuite/ld-arm/mixed-lib.d
index b261c67fae28..d815e51b9a0d 100644
--- a/ld/testsuite/ld-arm/mixed-lib.d
+++ b/ld/testsuite/ld-arm/mixed-lib.d
@@ -7,8 +7,8 @@ start address 0x.*
Disassembly of section .plt:
.* <.plt>:
- .*: e52de004 str lr, \[sp, #-4\]!
- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x1.>
+ .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x1c>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
.*: .*
@@ -19,9 +19,9 @@ 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}
+ .*: e92dd800 push {fp, ip, lr, pc}
+ .*: ebfffff. bl .* <lib_func1-0x..?>
+ .*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.*: e1a00000 nop \(mov r0,r0\)
.*: e1a00000 nop \(mov r0,r0\)
diff --git a/ld/testsuite/ld-arm/mixed-lib.sym b/ld/testsuite/ld-arm/mixed-lib.sym
index 4ccccdb35aff..677d2ed6514f 100644
--- a/ld/testsuite/ld-arm/mixed-lib.sym
+++ b/ld/testsuite/ld-arm/mixed-lib.sym
@@ -2,17 +2,16 @@
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
+ .. ..: ........ 4 OBJECT GLOBAL DEFAULT 9 data_obj
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __bss_end__
+ .. ..: .......0 20 FUNC GLOBAL DEFAULT 6 lib_func1
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __exidx_start
.. ..: ........ 0 NOTYPE GLOBAL DEFAULT 9 __data_start
.. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __end__
- .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __exidx_start
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+ .. ..: 00000000 0 NOTYPE GLOBAL DEFAULT UND app_func2
+ .. ..: .......1 2 FUNC GLOBAL DEFAULT 6 lib_func2
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _bss_end__
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __exidx_end
diff --git a/ld/testsuite/ld-arm/preempt-app.s b/ld/testsuite/ld-arm/preempt-app.s
new file mode 100644
index 000000000000..f1eccc2b0bb5
--- /dev/null
+++ b/ld/testsuite/ld-arm/preempt-app.s
@@ -0,0 +1,27 @@
+ @ Preempt an ARM shared library function with a Thumb function
+ @ in the application.
+ .text
+ .p2align 4
+ .globl _start
+_start:
+ mov ip, sp
+ stmdb sp!, {r11, ip, lr, pc}
+ bl lib_func1
+ ldmia sp, {r11, sp, lr}
+ bx lr
+
+ .p2align 4
+ .globl app_func2
+ .type app_func2,%function
+app_func2:
+ bx lr
+
+ .p2align 4
+ .globl lib_func1
+ .type lib_func1,%function
+ .thumb_func
+lib_func1:
+ bx lr
+
+ .data
+ .long data_obj
diff --git a/ld/testsuite/ld-arm/preempt-app.sym b/ld/testsuite/ld-arm/preempt-app.sym
new file mode 100644
index 000000000000..d8ebf3b4d8a9
--- /dev/null
+++ b/ld/testsuite/ld-arm/preempt-app.sym
@@ -0,0 +1,16 @@
+
+Symbol table for image:
+ Num Buc: Value Size Type Bind Vis Ndx Name
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _edata
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __bss_start__
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _end
+ .. ..: ........ 4 OBJECT GLOBAL DEFAULT 10 data_obj
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __bss_end__
+ .. ..: .......1 20 FUNC GLOBAL DEFAULT 6 lib_func1
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __exidx_start
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT 9 __data_start
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __end__
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+ .. ..: .......0 0 FUNC GLOBAL DEFAULT 6 app_func2
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _bss_end__
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __exidx_end
diff --git a/ld/testsuite/ld-arm/thumb1-bl.d b/ld/testsuite/ld-arm/thumb1-bl.d
new file mode 100644
index 000000000000..09d70959b68e
--- /dev/null
+++ b/ld/testsuite/ld-arm/thumb1-bl.d
@@ -0,0 +1,11 @@
+
+.*thumb1-bl: file format elf32-.*arm
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f3ff fffe bl 401000 <bar>
+Disassembly of section .foo:
+
+00401000 <bar>:
+ 401000: 4770 bx lr
diff --git a/ld/testsuite/ld-arm/thumb1-bl.s b/ld/testsuite/ld-arm/thumb1-bl.s
new file mode 100644
index 000000000000..cdecaa484b6e
--- /dev/null
+++ b/ld/testsuite/ld-arm/thumb1-bl.s
@@ -0,0 +1,22 @@
+@ Test to ensure that a Thumb-1 BL works.
+
+ .arch armv5t
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+ .thumb_func
+
+_start:
+ bl bar
+
+@ We will place the section .foo at 0x401000.
+
+ .section .foo, "xa"
+ .thumb_func
+
+bar:
+ bx lr
+
diff --git a/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.d b/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.d
new file mode 100644
index 000000000000..749b58f56672
--- /dev/null
+++ b/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.d
@@ -0,0 +1,4 @@
+#name: Thumb-2-as-Thumb-1 BL failure test
+#source: thumb2-bl-as-thumb1-bad.s
+#ld: -Ttext 0x1000 --section-start .foo=0x401004
+#error: .*\(.text\+0x0\): relocation truncated to fit: R_ARM_THM_CALL against `bar'
diff --git a/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.s b/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.s
new file mode 100644
index 000000000000..dae5d43972e2
--- /dev/null
+++ b/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.s
@@ -0,0 +1,22 @@
+@ Test to ensure that a Thumb-1 BL with a Thumb-2-only offset fails.
+
+ .arch armv5t
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+ .thumb_func
+
+_start:
+ bl bar
+
+@ We will place the section .foo at 0x401004.
+
+ .section .foo, "xa"
+ .thumb_func
+
+bar:
+ bx lr
+
diff --git a/ld/testsuite/ld-arm/thumb2-bl-bad.d b/ld/testsuite/ld-arm/thumb2-bl-bad.d
new file mode 100644
index 000000000000..0fc6e043e1fe
--- /dev/null
+++ b/ld/testsuite/ld-arm/thumb2-bl-bad.d
@@ -0,0 +1,4 @@
+#name: Thumb-2 BL failure test
+#source: thumb2-bl-bad.s
+#ld: -Ttext 0x1000 --section-start .foo=0x1001004
+#error: .*\(.text\+0x0\): relocation truncated to fit: R_ARM_THM_CALL against `bar'
diff --git a/ld/testsuite/ld-arm/thumb2-bl-bad.s b/ld/testsuite/ld-arm/thumb2-bl-bad.s
new file mode 100644
index 000000000000..63e3fe7e7271
--- /dev/null
+++ b/ld/testsuite/ld-arm/thumb2-bl-bad.s
@@ -0,0 +1,22 @@
+@ Test to ensure that a Thumb-2 BL with an oversize offset fails.
+
+ .arch armv7
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+ .thumb_func
+
+_start:
+ bl bar
+
+@ We will place the section .foo at 0x1001004.
+
+ .section .foo, "xa"
+ .thumb_func
+
+bar:
+ bx lr
+
diff --git a/ld/testsuite/ld-arm/thumb2-bl.d b/ld/testsuite/ld-arm/thumb2-bl.d
new file mode 100644
index 000000000000..bdfb9b79b7e6
--- /dev/null
+++ b/ld/testsuite/ld-arm/thumb2-bl.d
@@ -0,0 +1,11 @@
+
+.*thumb2-bl: file format elf32-.*arm
+
+Disassembly of section .text:
+
+00001000 <_start>:
+ 1000: f3ff d7fe bl 1001000 <bar>
+Disassembly of section .foo:
+
+01001000 <bar>:
+ 1001000: 4770 bx lr
diff --git a/ld/testsuite/ld-arm/thumb2-bl.s b/ld/testsuite/ld-arm/thumb2-bl.s
new file mode 100644
index 000000000000..ddb1cd33fcb6
--- /dev/null
+++ b/ld/testsuite/ld-arm/thumb2-bl.s
@@ -0,0 +1,23 @@
+@ Test to ensure that a Thumb-2 BL works with an offset that is
+@ not permissable for Thumb-1.
+
+ .arch armv7
+ .global _start
+ .syntax unified
+
+@ We will place the section .text at 0x1000.
+
+ .text
+ .thumb_func
+
+_start:
+ bl bar
+
+@ We will place the section .foo at 0x1001000.
+
+ .section .foo, "xa"
+ .thumb_func
+
+bar:
+ bx lr
+
diff --git a/ld/testsuite/ld-arm/tls-app.d b/ld/testsuite/ld-arm/tls-app.d
index 67e5de4dca5e..fd3d6380087b 100644
--- a/ld/testsuite/ld-arm/tls-app.d
+++ b/ld/testsuite/ld-arm/tls-app.d
@@ -2,17 +2,17 @@
.*: file format elf32-.*arm
architecture: arm, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
-start address 0x00008220
+start address 0x00008204
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
+00008204 <foo>:
+ 8204: e1a00000 nop \(mov r0,r0\)
+ 8208: e1a00000 nop \(mov r0,r0\)
+ 820c: e1a0f00e mov pc, lr
+ 8210: 000080bc .word 0x000080bc
+ 8214: 000080b4 .word 0x000080b4
+ 8218: 000080ac .word 0x000080ac
+ 821c: 00000004 .word 0x00000004
+ 8220: 000080c4 .word 0x000080c4
+ 8224: 00000014 .word 0x00000014
diff --git a/ld/testsuite/ld-arm/tls-lib.d b/ld/testsuite/ld-arm/tls-lib.d
index 76dcfd0c9468..774ac91203f7 100644
--- a/ld/testsuite/ld-arm/tls-lib.d
+++ b/ld/testsuite/ld-arm/tls-lib.d
@@ -10,6 +10,6 @@ Disassembly of section .text:
.*: 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
+ .*: 00008098 .word 0x00008098
+ .*: 0000808c .word 0x0000808c
+ .*: 00000004 .word 0x00000004
diff --git a/ld/testsuite/ld-arm/use-thumb-lib.s b/ld/testsuite/ld-arm/use-thumb-lib.s
new file mode 100644
index 000000000000..07a7f57b7708
--- /dev/null
+++ b/ld/testsuite/ld-arm/use-thumb-lib.s
@@ -0,0 +1,25 @@
+ .cpu arm10tdmi
+ .fpu softvfp
+ .eabi_attribute 18, 4
+ .eabi_attribute 20, 1
+ .eabi_attribute 21, 1
+ .eabi_attribute 23, 3
+ .eabi_attribute 24, 1
+ .eabi_attribute 25, 1
+ .eabi_attribute 26, 2
+ .eabi_attribute 30, 6
+ .file "use_thumb_lib.c"
+ .text
+ .align 2
+ .global foo
+ .type foo, %function
+foo:
+ @ args = 0, pretend = 0, frame = 0
+ @ frame_needed = 1, uses_anonymous_args = 0
+ mov ip, sp
+ stmfd sp!, {fp, ip, lr, pc}
+ sub fp, ip, #4
+ bl lib_func2
+ ldmfd sp, {fp, sp, pc}
+ .size foo, .-foo
+ .ident "GCC: (GNU) 4.1.0 (CodeSourcery ARM 2006q1-7)"
diff --git a/ld/testsuite/ld-arm/use-thumb-lib.sym b/ld/testsuite/ld-arm/use-thumb-lib.sym
new file mode 100644
index 000000000000..6f845a17e929
--- /dev/null
+++ b/ld/testsuite/ld-arm/use-thumb-lib.sym
@@ -0,0 +1,4 @@
+#...
+ .. ..: 00000000 2 FUNC GLOBAL DEFAULT UND lib_func2
+#pass
+
diff --git a/ld/testsuite/ld-arm/vfp11-fix-none.d b/ld/testsuite/ld-arm/vfp11-fix-none.d
new file mode 100644
index 000000000000..64a67ae207da
--- /dev/null
+++ b/ld/testsuite/ld-arm/vfp11-fix-none.d
@@ -0,0 +1,9 @@
+
+.*: .*file format elf32-(big|little)arm
+
+Disassembly of section \.text:
+
+00008000 <_start>:
+ 8000: ee474a20 \.word 0xee474a20
+ 8004: ed927a00 \.word 0xed927a00
+ 8008: e12fff1e bx lr
diff --git a/ld/testsuite/ld-arm/vfp11-fix-none.s b/ld/testsuite/ld-arm/vfp11-fix-none.s
new file mode 100644
index 000000000000..a016c49411bf
--- /dev/null
+++ b/ld/testsuite/ld-arm/vfp11-fix-none.s
@@ -0,0 +1,7 @@
+ .arm
+ .text
+ .globl _start
+_start:
+ .word 0xee474a20
+ .word 0xed927a00
+ bx lr
diff --git a/ld/testsuite/ld-arm/vfp11-fix-scalar.d b/ld/testsuite/ld-arm/vfp11-fix-scalar.d
new file mode 100644
index 000000000000..b7fe136fe076
--- /dev/null
+++ b/ld/testsuite/ld-arm/vfp11-fix-scalar.d
@@ -0,0 +1,15 @@
+
+.*: .*file format elf32-(big|little)arm
+
+Disassembly of section \.text:
+
+00008000 <_start>:
+ 8000: 0a000001 beq 800c <__vfp11_veneer_0>
+
+00008004 <__vfp11_veneer_0_r>:
+ 8004: ed927a00 flds s14, \[r2\]
+ 8008: e12fff1e bx lr
+
+0000800c <__vfp11_veneer_0>:
+ 800c: 0e474a20 fmacseq s9, s14, s1
+ 8010: eafffffb b 8004 <__vfp11_veneer_0_r>
diff --git a/ld/testsuite/ld-arm/vfp11-fix-scalar.s b/ld/testsuite/ld-arm/vfp11-fix-scalar.s
new file mode 100644
index 000000000000..4ffb891df896
--- /dev/null
+++ b/ld/testsuite/ld-arm/vfp11-fix-scalar.s
@@ -0,0 +1,7 @@
+ .arm
+ .text
+ .globl _start
+_start:
+ fmacseq s9, s14, s1
+ flds s14, [r2]
+ bx lr
diff --git a/ld/testsuite/ld-arm/vfp11-fix-vector.d b/ld/testsuite/ld-arm/vfp11-fix-vector.d
new file mode 100644
index 000000000000..3474b8ce30aa
--- /dev/null
+++ b/ld/testsuite/ld-arm/vfp11-fix-vector.d
@@ -0,0 +1,16 @@
+
+.*: .*file format elf32-(big|little)arm
+
+Disassembly of section \.text:
+
+00008000 <_start>:
+ 8000: 0a000002 beq 8010 <__vfp11_veneer_0>
+
+00008004 <__vfp11_veneer_0_r>:
+ 8004: e1a02003 mov r2, r3
+ 8008: ed927a00 flds s14, \[r2\]
+ 800c: e12fff1e bx lr
+
+00008010 <__vfp11_veneer_0>:
+ 8010: 0e474a20 fmacseq s9, s14, s1
+ 8014: eafffffa b 8004 <__vfp11_veneer_0_r>
diff --git a/ld/testsuite/ld-arm/vfp11-fix-vector.s b/ld/testsuite/ld-arm/vfp11-fix-vector.s
new file mode 100644
index 000000000000..05b6100bf195
--- /dev/null
+++ b/ld/testsuite/ld-arm/vfp11-fix-vector.s
@@ -0,0 +1,8 @@
+ .arm
+ .text
+ .globl _start
+_start:
+ fmacseq s9, s14, s1
+ mov r2,r3
+ flds s14, [r2]
+ bx lr
diff --git a/ld/testsuite/ld-arm/vxworks1-lib.dd b/ld/testsuite/ld-arm/vxworks1-lib.dd
index e13254d908ee..77bdf728c0e6 100644
--- a/ld/testsuite/ld-arm/vxworks1-lib.dd
+++ b/ld/testsuite/ld-arm/vxworks1-lib.dd
@@ -4,35 +4,35 @@
Disassembly of section \.plt:
00080800 <_PROCEDURE_LINKAGE_TABLE_>:
- 80800: e59fc000 ldr ip, \[pc, #0\] ; 80808 <_PROCEDURE_LINKAGE_TABLE_\+0x8>
+ 80800: e59fc000 ldr ip, \[pc, #0\] ; 80808 <.*>
80804: e79cf009 ldr pc, \[ip, r9\]
- 80808: 0000000c andeq r0, r0, ip
- 8080c: e59fc000 ldr ip, \[pc, #0\] ; 80814 <_PROCEDURE_LINKAGE_TABLE_\+0x14>
+ 80808: 0000000c .word 0x0000000c
+ 8080c: e59fc000 ldr ip, \[pc, #0\] ; 80814 <.*>
80810: e599f008 ldr pc, \[r9, #8\]
- 80814: 00000000 andeq r0, r0, r0
- 80818: e59fc000 ldr ip, \[pc, #0\] ; 80820 <_PROCEDURE_LINKAGE_TABLE_\+0x20>
+ 80814: 00000000 .word 0x00000000
+ 80818: e59fc000 ldr ip, \[pc, #0\] ; 80820 <.*>
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>
+ 80820: 00000010 .word 0x00000010
+ 80824: e59fc000 ldr ip, \[pc, #0\] ; 8082c <.*>
80828: e599f008 ldr pc, \[r9, #8\]
- 8082c: 0000000c andeq r0, r0, ip
+ 8082c: 0000000c .word 0x0000000c
Disassembly of section \.text:
00080c00 <foo>:
- 80c00: e92dc200 stmdb sp!, {r9, lr, pc}
- 80c04: e59f9024 ldr r9, \[pc, #36\] ; 80c30 <\.text\+0x30>
+ 80c00: e92dc200 push {r9, lr, pc}
+ 80c04: e59f9024 ldr r9, \[pc, #36\] ; 80c30 <.*>
80c08: e5999000 ldr r9, \[r9\]
80c0c: e5999000 ldr r9, \[r9\]
- 80c10: e59f001c ldr r0, \[pc, #28\] ; 80c34 <\.text\+0x34>
+ 80c10: e59f001c ldr r0, \[pc, #28\] ; 80c34 <.*>
80c14: e7991000 ldr r1, \[r9, r0\]
80c18: e2811001 add r1, r1, #1 ; 0x1
80c1c: e7891000 str r1, \[r9, r0\]
80c20: eb000004 bl 80c38 <slocal>
- 80c24: ebfffefb bl 80818 <_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
+ 80c24: ebfffefb bl 80818 <.*>
+ 80c28: ebfffef4 bl 80800 <.*>
+ 80c2c: e8bd8200 pop {r9, pc}
+ 80c30: 00000000 .word 0x00000000
+ 80c34: 00000014 .word 0x00000014
00080c38 <slocal>:
80c38: e1a0f00e mov pc, lr
diff --git a/ld/testsuite/ld-arm/vxworks1-lib.rd b/ld/testsuite/ld-arm/vxworks1-lib.rd
index c4c46f69098f..226bd0955439 100644
--- a/ld/testsuite/ld-arm/vxworks1-lib.rd
+++ b/ld/testsuite/ld-arm/vxworks1-lib.rd
@@ -6,7 +6,7 @@ Relocation section '\.rela\.plt' at offset .* contains 2 entries:
Relocation section '\.rela\.dyn' at offset .* contains 4 entries:
Offset Info Type Sym\.Value Sym\. Name \+ Addend
-00081c00 00000017 R_ARM_RELATIVE * 00080c38
+00081800 00000017 R_ARM_RELATIVE * 00080c38
00080c0c .*06 R_ARM_ABS12 00000000 __GOTT_INDEX__ \+ 0
00080c30 .*02 R_ARM_ABS32 00000000 __GOTT_BASE__ \+ 0
-00081414 .*15 R_ARM_GLOB_DAT 00081800 x \+ 0
+00081414 .*15 R_ARM_GLOB_DAT 00081c00 x \+ 0
diff --git a/ld/testsuite/ld-arm/vxworks1-lib.td b/ld/testsuite/ld-arm/vxworks1-lib.td
new file mode 100644
index 000000000000..9f223e38da16
--- /dev/null
+++ b/ld/testsuite/ld-arm/vxworks1-lib.td
@@ -0,0 +1,3 @@
+#...
+ 0x0+16 \(TEXTREL\) +0x0
+#pass
diff --git a/ld/testsuite/ld-arm/vxworks1.dd b/ld/testsuite/ld-arm/vxworks1.dd
index 529e3a564079..044312295ab3 100644
--- a/ld/testsuite/ld-arm/vxworks1.dd
+++ b/ld/testsuite/ld-arm/vxworks1.dd
@@ -5,32 +5,32 @@ 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>
+ 80804: e59fc000 ldr ip, \[pc, #0\] ; 8080c <.*>
80808: e59cf008 ldr pc, \[ip, #8\]
- 8080c: 00081400 andeq r1, r8, r0, lsl #8
+ 8080c: 00081400 .word 0x00081400
8080c: R_ARM_ABS32 _GLOBAL_OFFSET_TABLE_
- 80810: e59fc000 ldr ip, \[pc, #0\] ; 80818 <_PROCEDURE_LINKAGE_TABLE_\+0x18>
+ 80810: e59fc000 ldr ip, \[pc, #0\] ; 80818 <.*>
80814: e59cf000 ldr pc, \[ip\]
- 80818: 0008140c andeq r1, r8, ip, lsl #8
+ 80818: 0008140c .word 0x0008140c
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>
+ 8081c: e59fc000 ldr ip, \[pc, #0\] ; 80824 <.*>
+ 80820: eafffff6 b 80800 <.*>
+ 80824: 00000000 .word 0x00000000
+ 80828: e59fc000 ldr ip, \[pc, #0\] ; 80830 <.*>
8082c: e59cf000 ldr pc, \[ip\]
- 80830: 00081410 andeq r1, r8, r0, lsl r4
+ 80830: 00081410 .word 0x00081410
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
+ 80834: e59fc000 ldr ip, \[pc, #0\] ; 8083c <.*>
+ 80838: eafffff0 b 80800 <.*>
+ 8083c: 0000000c .word 0x0000000c
Disassembly of section \.text:
00080c00 <_start>:
- 80c00: ebffff08 bl 80428 <_PROCEDURE_LINKAGE_TABLE_-0x3d8>
+ 80c00: ebffff08 bl 80828 <.*>
80c00: R_ARM_PC24 \.plt\+0x20
- 80c04: eb000000 bl 80c14 <sexternal\+0x8>
+ 80c04: eb000000 bl 80c0c <sexternal>
80c04: R_ARM_PC24 sexternal\+0xfffffff8
- 80c08: eaffff00 b 80408 <_PROCEDURE_LINKAGE_TABLE_-0x3f8>
+ 80c08: eaffff00 b 80810 <.*>
80c08: R_ARM_PC24 \.plt\+0x8
00080c0c <sexternal>:
diff --git a/ld/testsuite/ld-arm/vxworks1.ld b/ld/testsuite/ld-arm/vxworks1.ld
index ec5039d47ed3..65bf65d4e2ed 100644
--- a/ld/testsuite/ld-arm/vxworks1.ld
+++ b/ld/testsuite/ld-arm/vxworks1.ld
@@ -23,8 +23,8 @@ SECTIONS
.got : { *(.got.plt) *(.got) }
. = ALIGN (0x400);
- .bss : { *(.bss) *(.dynbss) }
+ .data : { *(.data) }
. = ALIGN (0x400);
- .data : { *(.data) }
+ .bss : { *(.bss) *(.dynbss) }
}
diff --git a/ld/testsuite/ld-bootstrap/bootstrap.exp b/ld/testsuite/ld-bootstrap/bootstrap.exp
index 58cb9696513e..d5ed9051150c 100644
--- a/ld/testsuite/ld-bootstrap/bootstrap.exp
+++ b/ld/testsuite/ld-bootstrap/bootstrap.exp
@@ -1,5 +1,5 @@
# Expect script for LD Bootstrap Tests
-# Copyright 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2004
+# Copyright 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2004, 2006
# Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
@@ -140,7 +140,7 @@ foreach flags {"" "strip" "--static" "--traditional-format"
|| [istarget "*-*-wince"]
|| [istarget "*-*-cygwin*"]
|| [istarget "*-*-winnt*"]
- || [istarget "*-*-mingw32*"]
+ || [istarget "*-*-mingw*"]
|| [istarget "*-*-interix*"]
|| [istarget "*-*-beospe*"]
|| [istarget "*-*-netbsdpe*"]} {
diff --git a/ld/testsuite/ld-cris/hiddef1.d b/ld/testsuite/ld-cris/hiddef1.d
index de004303ef0d..b3bd87dfab2e 100644
--- a/ld/testsuite/ld-cris/hiddef1.d
+++ b/ld/testsuite/ld-cris/hiddef1.d
@@ -24,5 +24,5 @@ Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
#...
Symbol table '\.dynsym' contains 6 entries:
#...
-Symbol table '\.symtab' contains 19 entries:
+Symbol table '\.symtab' contains 16 entries:
#pass
diff --git a/ld/testsuite/ld-cris/ldsym1.d b/ld/testsuite/ld-cris/ldsym1.d
index 1a2a61a994bd..e8dcd325e0e0 100644
--- a/ld/testsuite/ld-cris/ldsym1.d
+++ b/ld/testsuite/ld-cris/ldsym1.d
@@ -13,7 +13,7 @@
Disassembly of section \.text:
-0+ <__start>:
+0+ <(___init__start|__start|__Stext)>:
0: 0f05 nop
0+2 <expfn>:
diff --git a/ld/testsuite/ld-cris/libdso-12.d b/ld/testsuite/ld-cris/libdso-12.d
index 2cb80389c019..c8a4f62d6086 100644
--- a/ld/testsuite/ld-cris/libdso-12.d
+++ b/ld/testsuite/ld-cris/libdso-12.d
@@ -12,40 +12,40 @@
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+23e g DF \.text 0+12 dsofn4
+0+234 g DF \.text 0+2 expfn
+0+22fc g DO \.data 0+4 expobj
#...
-0+24a g DF \.text 0+8 dsofn3
+0+236 g DF \.text 0+8 dsofn3
#...
0+ D \*UND\* 0+ dsofn
#...
Contents of section \.rela\.got:
- 01d4 0c230000 0a050000 00000000 .*
+ 01c0 f8220000 0a040000 00000000 .*
Contents of section \.rela\.plt:
- 01e0 04230000 0b030000 00000000 08230000 .*
- 01f0 0b0b0000 00000000 .*
+ 01cc f0220000 0b020000 00000000 f4220000 .*
+ 01dc 0b0a0000 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 .*
+ 01e4 84e20401 7e7a3f7a 04f26ffa bf09b005 .*
+ 01f4 00000000 00000000 00006f0d 0c000000 .*
+ 0204 6ffabf09 b0053f7e 00000000 bf0ed4ff .*
+ 0214 ffffb005 6f0d1000 00006ffa bf09b005 .*
+ 0224 3f7e0c00 0000bf0e baffffff b005 .*
Contents of section \.text:
- 0246 b005b005 bfbee2ff ffffb005 7f0da620 .*
- 0256 00005f0d 1400bfbe b6ffffff b0050000 .*
+ 0232 b005b005 bfbee2ff ffffb005 7f0da620 .*
+ 0242 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 .*
+ 2254 04000000 94000000 05000000 84010000 .*
+ 2264 06000000 d4000000 0a000000 3a000000 .*
+ 2274 0b000000 10000000 03000000 e4220000 .*
+ 2284 02000000 18000000 14000000 07000000 .*
+ 2294 17000000 cc010000 07000000 c0010000 .*
+ 22a4 08000000 0c000000 09000000 0c000000 .*
+ 22b4 00000000 00000000 00000000 00000000 .*
+ 22c4 00000000 00000000 00000000 00000000 .*
+ 22d4 00000000 00000000 00000000 00000000 .*
Contents of section \.got:
- 22f8 68220000 00000000 00000000 1e020000 .*
- 2308 38020000 00000000 .*
+ 22e4 54220000 00000000 00000000 0a020000 .*
+ 22f4 24020000 00000000 .*
Contents of section \.data:
- 2310 00000000 .*
+ 22fc 00000000 .*
diff --git a/ld/testsuite/ld-cris/libdso-2.d b/ld/testsuite/ld-cris/libdso-2.d
index f67c7b071a59..1417745903ea 100644
--- a/ld/testsuite/ld-cris/libdso-2.d
+++ b/ld/testsuite/ld-cris/libdso-2.d
@@ -27,16 +27,16 @@ There are 13 section headers.*
#...
Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
#...
-00002200 0000000c R_CRIS_RELATIVE 00000158
+00002[12][0-9a-f][048c] 0000000c R_CRIS_RELATIVE 00000150
#...
Symbol table '\.dynsym' contains 4 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0+ 0 NOTYPE LOCAL DEFAULT UND
1: [0-9a-f]+ 0 SECTION LOCAL DEFAULT 7
2: 0+ 0 OBJECT GLOBAL DEFAULT ABS TST1
- 3: 0+15c 0 FUNC GLOBAL DEFAULT 7 export_1@@TST1
+ 3: 0+154 0 FUNC GLOBAL DEFAULT 7 export_1@@TST1
-Symbol table '\.symtab' contains 21 entries:
+Symbol table '\.symtab' contains 18 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0+ 0 NOTYPE LOCAL DEFAULT UND
1: [0-9a-f]+ 0 SECTION LOCAL DEFAULT 1
@@ -48,14 +48,11 @@ Symbol table '\.symtab' contains 21 entries:
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
+ 10: 0+2..[046c] 0 OBJECT LOCAL HIDDEN ABS _DYNAMIC
+ 11: 0+2..[046c] 0 NOTYPE LOCAL DEFAULT ABS __bss_start
+ 12: 0+2..[046c] 0 NOTYPE LOCAL DEFAULT ABS _edata
+ 13: 0+2..[046c] 0 OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
+ 14: 0+2..[046c] 0 NOTYPE LOCAL DEFAULT ABS _end
+ 15: 0+150 0 FUNC LOCAL DEFAULT 7 dsofn
+ 16: 0+ 0 OBJECT GLOBAL DEFAULT ABS TST1
+ 17: 0+154 0 FUNC GLOBAL DEFAULT 7 export_1
diff --git a/ld/testsuite/ld-cris/v32-ba-1.d b/ld/testsuite/ld-cris/v32-ba-1.d
index 24d07512f7fa..b4ce78d00764 100644
--- a/ld/testsuite/ld-cris/v32-ba-1.d
+++ b/ld/testsuite/ld-cris/v32-ba-1.d
@@ -10,7 +10,7 @@
Disassembly of section \.text:
-0+ <a>:
+0+ <(a|__Stext)>:
0: bf0e 0800 0000 ba 8 <b>
6: 5e82 moveq 30,r8
diff --git a/ld/testsuite/ld-discard/zero-rel.d b/ld/testsuite/ld-discard/zero-rel.d
new file mode 100644
index 000000000000..1f73775b5e31
--- /dev/null
+++ b/ld/testsuite/ld-discard/zero-rel.d
@@ -0,0 +1,8 @@
+#source: zero-rel.s
+#ld: -T discard.ld
+#objdump: -s -j .debug_info
+
+.*: file format .*elf.*
+
+Contents of section .debug_info:
+ 0000 0+( 0+)? +(\.+) .*
diff --git a/ld/testsuite/ld-discard/zero-rel.s b/ld/testsuite/ld-discard/zero-rel.s
new file mode 100644
index 000000000000..f3f0b3cf39ff
--- /dev/null
+++ b/ld/testsuite/ld-discard/zero-rel.s
@@ -0,0 +1,11 @@
+ .text
+ .globl _start
+_start:
+
+ .section .debug_info
+ .long .Ltext
+ .long .Ltext + 2
+
+ .section .text.exit,"ax"
+.Ltext:
+ .long 0
diff --git a/ld/testsuite/ld-elf/begin.c b/ld/testsuite/ld-elf/begin.c
new file mode 100644
index 000000000000..ccc47d4f8708
--- /dev/null
+++ b/ld/testsuite/ld-elf/begin.c
@@ -0,0 +1,5 @@
+extern void foo (void);
+
+static void (*const init_array []) (void)
+ __attribute__ ((used, section (".init_array"), aligned (sizeof (void *))))
+ = { foo };
diff --git a/ld/testsuite/ld-elf/beginwarn.c b/ld/testsuite/ld-elf/beginwarn.c
new file mode 100644
index 000000000000..ebe28191b56f
--- /dev/null
+++ b/ld/testsuite/ld-elf/beginwarn.c
@@ -0,0 +1,9 @@
+static const char _evoke_link_warning_foo []
+ __attribute__ ((used, section (".gnu.warning.foo")))
+ = "function foo is deprecated";
+
+extern void foo (void);
+
+static void (*const init_array []) (void)
+ __attribute__ ((used, section (".init_array"), aligned (sizeof (void *))))
+ = { foo };
diff --git a/ld/testsuite/ld-elf/binutils.exp b/ld/testsuite/ld-elf/binutils.exp
new file mode 100644
index 000000000000..7ced42ca125b
--- /dev/null
+++ b/ld/testsuite/ld-elf/binutils.exp
@@ -0,0 +1,124 @@
+# Expect script for binutils 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.
+#
+# Written by H.J. Lu (hongjiu.lu@intel.com)
+#
+
+# Make sure that binutils can correctly handle ld output in ELF.
+
+# Run on Linux only.
+if { ![istarget *-*-linux*] } {
+ return
+}
+
+if { [istarget *-*-linux*aout*]
+ || [istarget *-*-linux*oldld*] } {
+ return
+}
+
+proc binutils_test { prog_name ld_options test } {
+ global as
+ global ld
+ global READELF
+ global objcopy
+ global strip
+ global srcdir
+ global subdir
+ global link_output
+
+ eval set prog \$$prog_name
+ set test_name "$prog_name $ld_options ($test)"
+
+ if { ![ld_assemble $as $srcdir/$subdir/$test.s tmpdir/$test.o ] } {
+ unresolved "$test_name"
+ return
+ }
+
+ if { ![ld_simple_link $ld tmpdir/$test "$ld_options tmpdir/$test.o"] } {
+ if { [string match "*not supported*" $link_output]
+ || [string match "*unrecognized option*" $link_output] } {
+ unsupported "$ld_options is not supported by this target"
+ } else {
+ unresolved "$test_name"
+ }
+ return
+ }
+
+ send_log "$READELF -l --wide tmpdir/$test > tmpdir/$test.exp\n"
+ catch "exec $READELF -l --wide tmpdir/$test > tmpdir/$test.exp" got
+ if ![string match "" $got] then {
+ send_log "$got\n"
+ unresolved "$test_name"
+ return
+ }
+
+ send_log "$prog tmpdir/$test\n"
+ catch "exec $prog tmpdir/$test" got
+ if ![string match "" $got] then {
+ send_log "$got\n"
+ fail "$test_name"
+ return
+ }
+
+ send_log "$READELF -l --wide tmpdir/$test > tmpdir/$test.out\n"
+ catch "exec $READELF -l --wide tmpdir/$test > tmpdir/$test.out" got
+ if ![string match "" $got] then {
+ send_log "$got\n"
+ unresolved "$test_name"
+ return
+ }
+
+ if { [catch {exec cmp tmpdir/$test.exp tmpdir/$test.out}] } then {
+ send_log "tmpdir/$test.exp tmpdir/$test.out differ.\n"
+ fail "$test_name"
+ return
+ }
+
+ pass "$test_name"
+}
+
+binutils_test strip "-z max-page-size=0x200000" maxpage1
+binutils_test strip "-z max-page-size=0x200000 -z common-page-size=0x100000" maxpage1
+binutils_test strip "-z max-page-size=0x100000" maxpage1
+binutils_test strip "-z max-page-size=0x100000 -z common-page-size=0x1000" maxpage1
+
+binutils_test strip "" maxpage1
+binutils_test strip "-shared" maxpage1
+binutils_test objcopy "" maxpage1
+binutils_test objcopy "-shared" maxpage1
+
+binutils_test strip "-z relro" maxpage1
+binutils_test strip "-z relro -shared" maxpage1
+binutils_test objcopy "-z relro" maxpage1
+binutils_test objcopy "-z relro -shared" maxpage1
+
+binutils_test objcopy "" tbss1
+binutils_test objcopy "-shared" tbss1
+binutils_test objcopy "-z max-page-size=0x100000" tbss1
+binutils_test objcopy "-z max-page-size=0x100000 -z common-page-size=0x1000" tbss1
+binutils_test objcopy "" tdata1
+binutils_test objcopy "-shared" tdata1
+binutils_test objcopy "-z max-page-size=0x100000" tdata1
+binutils_test objcopy "-z max-page-size=0x100000 -z common-page-size=0x1000" tdata1
+binutils_test objcopy "" tbss2
+binutils_test objcopy "-shared" tbss2
+binutils_test objcopy "-z max-page-size=0x100000" tbss2
+binutils_test objcopy "-z max-page-size=0x100000 -z common-page-size=0x1000" tbss2
+binutils_test objcopy "-z max-page-size=0x100000" tdata2
+binutils_test objcopy "" tdata2
+binutils_test objcopy "-shared" tdata2
+binutils_test objcopy "-z max-page-size=0x100000 -z common-page-size=0x1000" tdata2
diff --git a/ld/testsuite/ld-elf/commonpage1.d b/ld/testsuite/ld-elf/commonpage1.d
new file mode 100644
index 000000000000..76dc0565b342
--- /dev/null
+++ b/ld/testsuite/ld-elf/commonpage1.d
@@ -0,0 +1,9 @@
+#source: maxpage1.s
+#ld: -z max-page-size=0x200000 -z common-page-size=0x100000
+#readelf: -l --wide
+#target: *-*-linux*
+
+#...
+ LOAD+.*0x200000
+ LOAD+.*0x200000
+#pass
diff --git a/ld/testsuite/ld-elf/data1.c b/ld/testsuite/ld-elf/data1.c
new file mode 100644
index 000000000000..c205f822bccd
--- /dev/null
+++ b/ld/testsuite/ld-elf/data1.c
@@ -0,0 +1,6 @@
+#include "data1.h"
+
+char a1[1] __attribute__ ((aligned (ALIGNMENT1))) = { 10 };
+char a2[2] __attribute__ ((aligned (ALIGNMENT2)));
+char a3[3] __attribute__ ((aligned (ALIGNMENT3)));
+char a4[4] __attribute__ ((aligned (ALIGNMENT4)));
diff --git a/ld/testsuite/ld-elf/data1.h b/ld/testsuite/ld-elf/data1.h
new file mode 100644
index 000000000000..529ee4b24205
--- /dev/null
+++ b/ld/testsuite/ld-elf/data1.h
@@ -0,0 +1,9 @@
+#define ALIGNMENT1 0x800
+#define ALIGNMENT2 0x400
+#define ALIGNMENT3 0x200
+#define ALIGNMENT4 0x100
+
+extern char a1[1];
+extern char a2[2];
+extern char a3[3];
+extern char a4[4];
diff --git a/ld/testsuite/ld-elf/del.cc b/ld/testsuite/ld-elf/del.cc
new file mode 100644
index 000000000000..4e2cc60d74a9
--- /dev/null
+++ b/ld/testsuite/ld-elf/del.cc
@@ -0,0 +1,29 @@
+#include <new>
+
+extern "C" void free (void *);
+
+void
+operator delete (void *ptr, const std::nothrow_t&) throw ()
+{
+ if (ptr)
+ free (ptr);
+}
+
+void
+operator delete (void *ptr) throw ()
+{
+ if (ptr)
+ free (ptr);
+}
+
+void
+operator delete[] (void *ptr) throw ()
+{
+ ::operator delete (ptr);
+}
+
+void
+operator delete[] (void *ptr, const std::nothrow_t&) throw ()
+{
+ ::operator delete (ptr);
+}
diff --git a/ld/testsuite/ld-elf/dl1.c b/ld/testsuite/ld-elf/dl1.c
new file mode 100644
index 000000000000..09426f32fb7b
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl1.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+
+extern int bar;
+
+void
+foo (void)
+{
+ if (bar == -20)
+ printf ("OK\n");
+}
diff --git a/ld/testsuite/ld-elf/dl1.list b/ld/testsuite/ld-elf/dl1.list
new file mode 100644
index 000000000000..9ffada041895
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl1.list
@@ -0,0 +1,6 @@
+{
+ extern "C"
+ {
+ bar;
+ };
+};
diff --git a/ld/testsuite/ld-elf/dl1.out b/ld/testsuite/ld-elf/dl1.out
new file mode 100644
index 000000000000..d86bac9de59a
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl1.out
@@ -0,0 +1 @@
+OK
diff --git a/ld/testsuite/ld-elf/dl1main.c b/ld/testsuite/ld-elf/dl1main.c
new file mode 100644
index 000000000000..f224e12394dd
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl1main.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <dlfcn.h>
+
+int bar = -20;
+
+int
+main (void)
+{
+ int ret = 0;
+ void *handle;
+ void (*fcn) (void);
+
+ handle = dlopen("./tmpdir/libdl1.so", RTLD_GLOBAL|RTLD_LAZY);
+ if (!handle)
+ {
+ printf("dlopen ./tmpdir/libdl1.so: %s\n", dlerror ());
+ return 1;
+ }
+
+ fcn = (void (*)(void)) dlsym(handle, "foo");
+ if (!fcn)
+ {
+ printf("dlsym foo: %s\n", dlerror ());
+ ret += 1;
+ }
+ else
+ {
+ (*fcn) ();
+ }
+
+ dlclose (handle);
+ return ret;
+}
diff --git a/ld/testsuite/ld-elf/dl2.c b/ld/testsuite/ld-elf/dl2.c
new file mode 100644
index 000000000000..b5cd9275dab4
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl2.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+
+int foo;
+
+extern void xxx (void);
+
+void
+bar (int x)
+{
+ if (foo == 1)
+ printf ("OK1\n");
+ else if (foo == 0)
+ printf ("OK2\n");
+ foo = -1;
+ xxx ();
+}
diff --git a/ld/testsuite/ld-elf/dl2.list b/ld/testsuite/ld-elf/dl2.list
new file mode 100644
index 000000000000..e985dcfca24c
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl2.list
@@ -0,0 +1,3 @@
+{
+ foo;
+};
diff --git a/ld/testsuite/ld-elf/dl2a.list b/ld/testsuite/ld-elf/dl2a.list
new file mode 100644
index 000000000000..989646e63f1a
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl2a.list
@@ -0,0 +1,3 @@
+{
+ "foo";
+};
diff --git a/ld/testsuite/ld-elf/dl2a.out b/ld/testsuite/ld-elf/dl2a.out
new file mode 100644
index 000000000000..f3d5b9ffcc0e
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl2a.out
@@ -0,0 +1,3 @@
+OK1
+DSO
+OK1
diff --git a/ld/testsuite/ld-elf/dl2b.out b/ld/testsuite/ld-elf/dl2b.out
new file mode 100644
index 000000000000..f30cead5244b
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl2b.out
@@ -0,0 +1,3 @@
+OK1
+MAIN
+OK1
diff --git a/ld/testsuite/ld-elf/dl2main.c b/ld/testsuite/ld-elf/dl2main.c
new file mode 100644
index 000000000000..ddf677fd3bcf
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl2main.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+
+extern int foo;
+extern void bar (void);
+
+void
+xxx (void)
+{
+ printf ("MAIN\n");
+}
+
+int
+main (void)
+{
+ foo = 1;
+ bar ();
+ if (foo == -1)
+ printf ("OK1\n");
+ else if (foo == 1)
+ printf ("OK2\n");
+ return 0;
+}
diff --git a/ld/testsuite/ld-elf/dl2xxx.c b/ld/testsuite/ld-elf/dl2xxx.c
new file mode 100644
index 000000000000..cf3a1d0c66c8
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl2xxx.c
@@ -0,0 +1,7 @@
+#include <stdio.h>
+
+void
+xxx (void)
+{
+ printf ("DSO\n");
+}
diff --git a/ld/testsuite/ld-elf/dl2xxx.list b/ld/testsuite/ld-elf/dl2xxx.list
new file mode 100644
index 000000000000..9388cda7f52e
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl2xxx.list
@@ -0,0 +1,3 @@
+{
+ xxx;
+};
diff --git a/ld/testsuite/ld-elf/dl3.cc b/ld/testsuite/ld-elf/dl3.cc
new file mode 100644
index 000000000000..558e49f74c2c
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl3.cc
@@ -0,0 +1,7 @@
+#include "dl3header.h"
+
+void
+f (void)
+{
+ throw (A (42));
+}
diff --git a/ld/testsuite/ld-elf/dl3.list b/ld/testsuite/ld-elf/dl3.list
new file mode 100644
index 000000000000..0b347ea2dabd
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl3.list
@@ -0,0 +1,6 @@
+{
+ extern "C++"
+ {
+ typeinfo*;
+ };
+};
diff --git a/ld/testsuite/ld-elf/dl3a.out b/ld/testsuite/ld-elf/dl3a.out
new file mode 100644
index 000000000000..d86bac9de59a
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl3a.out
@@ -0,0 +1 @@
+OK
diff --git a/ld/testsuite/ld-elf/dl3b.out b/ld/testsuite/ld-elf/dl3b.out
new file mode 100644
index 000000000000..8a1504410770
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl3b.out
@@ -0,0 +1 @@
+BAD2
diff --git a/ld/testsuite/ld-elf/dl3header.h b/ld/testsuite/ld-elf/dl3header.h
new file mode 100644
index 000000000000..66f7d4621f24
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl3header.h
@@ -0,0 +1,5 @@
+struct A
+{
+ int i;
+ A (int i): i(i) {}
+};
diff --git a/ld/testsuite/ld-elf/dl3main.cc b/ld/testsuite/ld-elf/dl3main.cc
new file mode 100644
index 000000000000..977f9bb02774
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl3main.cc
@@ -0,0 +1,25 @@
+#include <stdio.h>
+#include "dl3header.h"
+
+extern void f (void);
+
+int
+main (void)
+{
+ try
+ {
+ f();
+ }
+ catch (A a)
+ {
+ if (a.i == 42)
+ printf ("OK\n");
+ else
+ printf ("BAD1\n");
+ }
+ catch (...)
+ {
+ printf ("BAD2\n");
+ }
+ return 0;
+}
diff --git a/ld/testsuite/ld-elf/dl4.c b/ld/testsuite/ld-elf/dl4.c
new file mode 100644
index 000000000000..bf6f070cb759
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl4.c
@@ -0,0 +1,24 @@
+#include <stdio.h>
+
+int foo1;
+int foo2;
+
+extern void xxx1 (void);
+extern void xxx2 (void);
+
+void
+bar (int x)
+{
+ if (foo1 == 1)
+ printf ("bar OK1\n");
+ else if (foo1 == 0)
+ printf ("bar OK2\n");
+ if (foo2 == 1)
+ printf ("bar OK3\n");
+ else if (foo2 == 0)
+ printf ("bar OK4\n");
+ foo1 = -1;
+ foo2 = -1;
+ xxx1 ();
+ xxx2 ();
+}
diff --git a/ld/testsuite/ld-elf/dl4.list b/ld/testsuite/ld-elf/dl4.list
new file mode 100644
index 000000000000..e932e2352e32
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl4.list
@@ -0,0 +1,4 @@
+{
+ foo1;
+ foo2;
+};
diff --git a/ld/testsuite/ld-elf/dl4a.out b/ld/testsuite/ld-elf/dl4a.out
new file mode 100644
index 000000000000..871c5be830ac
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl4a.out
@@ -0,0 +1,6 @@
+bar OK1
+bar OK3
+DSO1
+DSO2
+OK1
+OK3
diff --git a/ld/testsuite/ld-elf/dl4b.out b/ld/testsuite/ld-elf/dl4b.out
new file mode 100644
index 000000000000..b838f5b4b7f2
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl4b.out
@@ -0,0 +1,6 @@
+bar OK1
+bar OK3
+MAIN1
+MAIN2
+OK1
+OK3
diff --git a/ld/testsuite/ld-elf/dl4main.c b/ld/testsuite/ld-elf/dl4main.c
new file mode 100644
index 000000000000..173450da1a89
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl4main.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+
+extern int foo1;
+extern int foo2;
+extern void bar (void);
+
+void
+xxx1 (void)
+{
+ printf ("MAIN1\n");
+}
+
+void
+xxx2 (void)
+{
+ printf ("MAIN2\n");
+}
+
+int
+main (void)
+{
+ foo1 = 1;
+ foo2 = 1;
+ bar ();
+ if (foo1 == -1)
+ printf ("OK1\n");
+ else if (foo1 == 1)
+ printf ("OK2\n");
+ if (foo2 == -1)
+ printf ("OK3\n");
+ else if (foo2 == 1)
+ printf ("OK4\n");
+ return 0;
+}
diff --git a/ld/testsuite/ld-elf/dl4xxx.c b/ld/testsuite/ld-elf/dl4xxx.c
new file mode 100644
index 000000000000..8180eb141292
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl4xxx.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+
+void
+xxx1 (void)
+{
+ printf ("DSO1\n");
+}
+
+void
+xxx2 (void)
+{
+ printf ("DSO2\n");
+}
diff --git a/ld/testsuite/ld-elf/dl4xxx.list b/ld/testsuite/ld-elf/dl4xxx.list
new file mode 100644
index 000000000000..f39ce14d01af
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl4xxx.list
@@ -0,0 +1,4 @@
+{
+ xxx1;
+ xxx2;
+};
diff --git a/ld/testsuite/ld-elf/dl5.cc b/ld/testsuite/ld-elf/dl5.cc
new file mode 100644
index 000000000000..cc404553f93b
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl5.cc
@@ -0,0 +1,61 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <new>
+
+int pass = 0;
+
+void *
+operator new (size_t sz, const std::nothrow_t&) throw ()
+{
+ void *p;
+ pass++;
+ p = malloc(sz);
+ return p;
+}
+
+void *
+operator new (size_t sz) throw (std::bad_alloc)
+{
+ void *p;
+ pass++;
+ p = malloc(sz);
+ return p;
+}
+
+void
+operator delete (void *ptr) throw ()
+{
+ pass++;
+ if (ptr)
+ free (ptr);
+}
+
+class A
+{
+public:
+ A() {}
+ ~A() { }
+ int a;
+ int b;
+};
+
+
+int
+main (void)
+{
+ A *bb = new A[10];
+ delete [] bb;
+ bb = new (std::nothrow) A [10];
+ delete [] bb;
+
+ if (pass == 4)
+ {
+ printf ("PASS\n");
+ return 0;
+ }
+ else
+ {
+ printf ("FAIL\n");
+ return 1;
+ }
+}
diff --git a/ld/testsuite/ld-elf/dl5.out b/ld/testsuite/ld-elf/dl5.out
new file mode 100644
index 000000000000..7ef22e9a431a
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl5.out
@@ -0,0 +1 @@
+PASS
diff --git a/ld/testsuite/ld-elf/dl6.c b/ld/testsuite/ld-elf/dl6.c
new file mode 100644
index 000000000000..f655ca6ef335
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl6.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+
+int bar = 10;
+
+void
+foo (void)
+{
+ if (bar == 10)
+ printf ("bar is in DSO.\n");
+ else if (bar == -20)
+ printf ("bar is in main.\n");
+ else
+ printf ("FAIL\n");
+}
diff --git a/ld/testsuite/ld-elf/dl6a.out b/ld/testsuite/ld-elf/dl6a.out
new file mode 100644
index 000000000000..186e8488e29c
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl6a.out
@@ -0,0 +1 @@
+bar is in main.
diff --git a/ld/testsuite/ld-elf/dl6amain.c b/ld/testsuite/ld-elf/dl6amain.c
new file mode 100644
index 000000000000..9824224661a7
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl6amain.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <dlfcn.h>
+
+int bar = -20;
+
+int
+main (void)
+{
+ int ret = 0;
+ void *handle;
+ void (*fcn) (void);
+
+ handle = dlopen("./tmpdir/libdl6a.so", RTLD_GLOBAL|RTLD_LAZY);
+ if (!handle)
+ {
+ printf("dlopen ./tmpdir/libdl6a.so: %s\n", dlerror ());
+ return 1;
+ }
+
+ fcn = (void (*)(void)) dlsym(handle, "foo");
+ if (!fcn)
+ {
+ printf("dlsym foo: %s\n", dlerror ());
+ ret += 1;
+ }
+ else
+ {
+ (*fcn) ();
+ }
+
+ dlclose (handle);
+ return ret;
+}
diff --git a/ld/testsuite/ld-elf/dl6b.out b/ld/testsuite/ld-elf/dl6b.out
new file mode 100644
index 000000000000..8cc87f50d137
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl6b.out
@@ -0,0 +1 @@
+bar is in DSO.
diff --git a/ld/testsuite/ld-elf/dl6bmain.c b/ld/testsuite/ld-elf/dl6bmain.c
new file mode 100644
index 000000000000..df9dbcc3fee8
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl6bmain.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <dlfcn.h>
+
+int bar = -20;
+
+int
+main (void)
+{
+ int ret = 0;
+ void *handle;
+ void (*fcn) (void);
+
+ handle = dlopen("./tmpdir/libdl6b.so", RTLD_GLOBAL|RTLD_LAZY);
+ if (!handle)
+ {
+ printf("dlopen ./tmpdir/libdl6b.so: %s\n", dlerror ());
+ return 1;
+ }
+
+ fcn = (void (*)(void)) dlsym(handle, "foo");
+ if (!fcn)
+ {
+ printf("dlsym foo: %s\n", dlerror ());
+ ret += 1;
+ }
+ else
+ {
+ (*fcn) ();
+ }
+
+ dlclose (handle);
+ return ret;
+}
diff --git a/ld/testsuite/ld-elf/dl6cmain.c b/ld/testsuite/ld-elf/dl6cmain.c
new file mode 100644
index 000000000000..f6c285cdf621
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl6cmain.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <dlfcn.h>
+
+int bar = -20;
+
+int
+main (void)
+{
+ int ret = 0;
+ void *handle;
+ void (*fcn) (void);
+
+ handle = dlopen("./tmpdir/libdl6c.so", RTLD_GLOBAL|RTLD_LAZY);
+ if (!handle)
+ {
+ printf("dlopen ./tmpdir/libdl6c.so: %s\n", dlerror ());
+ return 1;
+ }
+
+ fcn = (void (*)(void)) dlsym(handle, "foo");
+ if (!fcn)
+ {
+ printf("dlsym foo: %s\n", dlerror ());
+ ret += 1;
+ }
+ else
+ {
+ (*fcn) ();
+ }
+
+ dlclose (handle);
+ return ret;
+}
diff --git a/ld/testsuite/ld-elf/dl6dmain.c b/ld/testsuite/ld-elf/dl6dmain.c
new file mode 100644
index 000000000000..2e57eb751e9d
--- /dev/null
+++ b/ld/testsuite/ld-elf/dl6dmain.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <dlfcn.h>
+
+int bar = -20;
+
+int
+main (void)
+{
+ int ret = 0;
+ void *handle;
+ void (*fcn) (void);
+
+ handle = dlopen("./tmpdir/libdl6d.so", RTLD_GLOBAL|RTLD_LAZY);
+ if (!handle)
+ {
+ printf("dlopen ./tmpdir/libdl6d.so: %s\n", dlerror ());
+ return 1;
+ }
+
+ fcn = (void (*)(void)) dlsym(handle, "foo");
+ if (!fcn)
+ {
+ printf("dlsym foo: %s\n", dlerror ());
+ ret += 1;
+ }
+ else
+ {
+ (*fcn) ();
+ }
+
+ dlclose (handle);
+ return ret;
+}
diff --git a/ld/testsuite/ld-elf/dummy.c b/ld/testsuite/ld-elf/dummy.c
new file mode 100644
index 000000000000..5c0328739c60
--- /dev/null
+++ b/ld/testsuite/ld-elf/dummy.c
@@ -0,0 +1 @@
+/* An empty file. */
diff --git a/ld/testsuite/ld-elf/dwarf.exp b/ld/testsuite/ld-elf/dwarf.exp
new file mode 100644
index 000000000000..b10e3d256c79
--- /dev/null
+++ b/ld/testsuite/ld-elf/dwarf.exp
@@ -0,0 +1,111 @@
+# Expect script for various DWARF 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.
+#
+
+#
+# Written by H.J. Lu (hongjiu.lu@intel.com)
+#
+
+# Exclude non-ELF targets.
+
+if ![is_elf_format] {
+ return
+}
+
+# The following tests require running the executable generated by ld.
+if ![isnative] {
+ return
+}
+
+# Check if compiler works
+if { [which $CC] == 0 } {
+ return
+}
+
+# Skip if -feliminate-dwarf2-dups isn't supported.
+if ![ld_compile "$CC -g -feliminate-dwarf2-dups" $srcdir/$subdir/dummy.c tmpdir/dummy.o] {
+ return
+}
+
+set build_tests {
+ {"Build libdwarf1.so"
+ "-s -shared" "-fPIC -g -feliminate-dwarf2-dups"
+ {dwarf1.c} {} "libdwarf1.so"}
+}
+
+set run_tests {
+ {"Run with libdwarf1.so first"
+ "tmpdir/libdwarf1.so" ""
+ {dwarf1main.c} "dwarf1a" "dwarf1.out"
+ "-g -feliminate-dwarf2-dups"}
+ {"Run with libdwarf1.so last"
+ "tmpdir/dwarf1main.o tmpdir/libdwarf1.so" ""
+ {dummy.c} "dwarf1b" "dwarf1.out"
+ "-g -feliminate-dwarf2-dups"}
+}
+
+run_cc_link_tests $build_tests
+run_ld_link_exec_tests [] $run_tests
+
+proc strip_test {} {
+ global ld
+ global strip
+ global NM
+
+ set test "libdwarf1c.so"
+ set test_name "Strip -s $test"
+ set prog $strip
+
+ if ![ld_simple_link $ld tmpdir/$test "-shared tmpdir/dwarf1.o"] {
+ unresolved "$test_name"
+ return
+ }
+
+ send_log "$NM -D tmpdir/$test > tmpdir/$test.exp\n"
+ catch "exec $NM -D tmpdir/$test > tmpdir/$test.exp" got
+ if ![string match "" $got] then {
+ send_log "$got\n"
+ unresolved "$test_name"
+ return
+ }
+
+ send_log "$prog -s tmpdir/$test\n"
+ catch "exec $prog -s tmpdir/$test" got
+ if ![string match "" $got] then {
+ send_log "$got\n"
+ fail "$test_name"
+ return
+ }
+
+ send_log "$NM -D tmpdir/$test > tmpdir/$test.out\n"
+ catch "exec $NM -D tmpdir/$test > tmpdir/$test.out" got
+ if ![string match "" $got] then {
+ send_log "$got\n"
+ unresolved "$test_name"
+ return
+ }
+
+ if { [catch {exec cmp tmpdir/$test.exp tmpdir/$test.out}] } then {
+ send_log "tmpdir/$test.exp tmpdir/$test.out differ.\n"
+ fail "$test_name"
+ return
+ }
+
+ pass "$test_name"
+}
+
+strip_test
diff --git a/ld/testsuite/ld-elf/dwarf1.c b/ld/testsuite/ld-elf/dwarf1.c
new file mode 100644
index 000000000000..2895d4c8a770
--- /dev/null
+++ b/ld/testsuite/ld-elf/dwarf1.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include "dwarf1.h"
+
+struct foo_s foo;
+
+void
+doprintf (void)
+{
+ printf ("OK\n");
+}
diff --git a/ld/testsuite/ld-elf/dwarf1.h b/ld/testsuite/ld-elf/dwarf1.h
new file mode 100644
index 000000000000..3cd7918c070a
--- /dev/null
+++ b/ld/testsuite/ld-elf/dwarf1.h
@@ -0,0 +1,6 @@
+struct foo_s
+{
+ int foo;
+};
+
+extern void doprintf (void);
diff --git a/ld/testsuite/ld-elf/dwarf1.out b/ld/testsuite/ld-elf/dwarf1.out
new file mode 100644
index 000000000000..d86bac9de59a
--- /dev/null
+++ b/ld/testsuite/ld-elf/dwarf1.out
@@ -0,0 +1 @@
+OK
diff --git a/ld/testsuite/ld-elf/dwarf1main.c b/ld/testsuite/ld-elf/dwarf1main.c
new file mode 100644
index 000000000000..90451981d380
--- /dev/null
+++ b/ld/testsuite/ld-elf/dwarf1main.c
@@ -0,0 +1,10 @@
+#include "dwarf1.h"
+
+struct foo_s foo;
+
+int
+main (void)
+{
+ doprintf ();
+ return 0;
+}
diff --git a/ld/testsuite/ld-elf/dynbss1.c b/ld/testsuite/ld-elf/dynbss1.c
new file mode 100644
index 000000000000..eb5f0673998e
--- /dev/null
+++ b/ld/testsuite/ld-elf/dynbss1.c
@@ -0,0 +1,20 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "data1.h"
+
+int
+main (void)
+{
+ if ((((long) (&a1)) & (ALIGNMENT1 - 1)))
+ abort ();
+ if ((((long) (&a2)) & (ALIGNMENT2 - 1)))
+ abort ();
+ if ((((long) (&a2)) & (ALIGNMENT3 - 1)))
+ abort ();
+ if ((((long) (&a3)) & (ALIGNMENT4 - 1)))
+ abort ();
+
+ printf ("PASS\n");
+
+ return(0) ;
+}
diff --git a/ld/testsuite/ld-elf/eh-frame-hdr.d b/ld/testsuite/ld-elf/eh-frame-hdr.d
new file mode 100644
index 000000000000..b465e5de2d57
--- /dev/null
+++ b/ld/testsuite/ld-elf/eh-frame-hdr.d
@@ -0,0 +1,17 @@
+#source: eh-frame-hdr.s
+#ld: -e _start --eh-frame-hdr
+#objdump: -hw
+#target: alpha*-*-*
+#target: arm*-*-*
+#target: i?86-*-*
+#target: m68k-*-*
+#target: mips*-*-*
+#target: powerpc*-*-*
+#target: s390*-*-*
+#target: sh*-*-*
+#xfail: sh*l*-*-*
+#target: sparc*-*-*
+#target: x86_64-*-*
+#...
+ [0-9] .eh_frame_hdr 0*[12][048c] .*
+#pass
diff --git a/ld/testsuite/ld-elf/eh-frame-hdr.s b/ld/testsuite/ld-elf/eh-frame-hdr.s
new file mode 100644
index 000000000000..e5d33189eb38
--- /dev/null
+++ b/ld/testsuite/ld-elf/eh-frame-hdr.s
@@ -0,0 +1,6 @@
+ .text
+ .global _start
+_start:
+ .cfi_startproc
+ .skip 16
+ .cfi_endproc
diff --git a/ld/testsuite/ld-elf/eh1.d b/ld/testsuite/ld-elf/eh1.d
index 897955b2b6f7..d7a5b15d3251 100644
--- a/ld/testsuite/ld-elf/eh1.d
+++ b/ld/testsuite/ld-elf/eh1.d
@@ -22,11 +22,11 @@ The section .eh_frame contains:
DW_CFA_nop
DW_CFA_nop
-00000018 0000001c 0000001c FDE cie=00000000 pc=004000b0..004000b0
- DW_CFA_advance_loc: 0 to 004000b0
+00000018 0000001c 0000001c FDE cie=00000000 pc=00400078..00400078
+ DW_CFA_advance_loc: 0 to 00400078
DW_CFA_def_cfa_offset: 16
DW_CFA_offset: r6 at cfa-16
- DW_CFA_advance_loc: 0 to 004000b0
+ DW_CFA_advance_loc: 0 to 00400078
DW_CFA_def_cfa_reg: r6
00000038 ZERO terminator
diff --git a/ld/testsuite/ld-elf/eh2.d b/ld/testsuite/ld-elf/eh2.d
index 6f4f2c58ed59..c1ef3994fb82 100644
--- a/ld/testsuite/ld-elf/eh2.d
+++ b/ld/testsuite/ld-elf/eh2.d
@@ -22,11 +22,11 @@ The section .eh_frame contains:
DW_CFA_nop
DW_CFA_nop
-00000018 0000001c 0000001c FDE cie=00000000 pc=004000b0..004000b0
- DW_CFA_advance_loc: 0 to 004000b0
+00000018 0000001c 0000001c FDE cie=00000000 pc=00400078..00400078
+ DW_CFA_advance_loc: 0 to 00400078
DW_CFA_def_cfa_offset: 16
DW_CFA_offset: r6 at cfa-16
- DW_CFA_advance_loc: 0 to 004000b0
+ DW_CFA_advance_loc: 0 to 00400078
DW_CFA_def_cfa_reg: r6
00000038 ZERO terminator
diff --git a/ld/testsuite/ld-elf/eh3.d b/ld/testsuite/ld-elf/eh3.d
index 492c87784b92..f1d2a523759f 100644
--- a/ld/testsuite/ld-elf/eh3.d
+++ b/ld/testsuite/ld-elf/eh3.d
@@ -22,11 +22,11 @@ The section .eh_frame contains:
DW_CFA_nop
DW_CFA_nop
-00000018 0000001c 0000001c FDE cie=00000000 pc=004000b0..004000b0
- DW_CFA_advance_loc: 0 to 004000b0
+00000018 0000001c 0000001c FDE cie=00000000 pc=00400078..00400078
+ DW_CFA_advance_loc: 0 to 00400078
DW_CFA_def_cfa_offset: 16
DW_CFA_offset: r6 at cfa-16
- DW_CFA_advance_loc: 0 to 004000b0
+ DW_CFA_advance_loc: 0 to 00400078
DW_CFA_def_cfa_reg: r6
00000038 ZERO terminator
diff --git a/ld/testsuite/ld-elf/eh4.d b/ld/testsuite/ld-elf/eh4.d
new file mode 100644
index 000000000000..5fdd722bd387
--- /dev/null
+++ b/ld/testsuite/ld-elf/eh4.d
@@ -0,0 +1,32 @@
+#source: eh4.s
+#source: eh4a.s
+#ld: -shared
+#readelf: -wf
+#target: x86_64-*-*
+
+The section .eh_frame contains:
+
+00000000 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: -8
+ Return address column: 16
+ Augmentation data: 1b
+
+ DW_CFA_def_cfa: r7 ofs 8
+ DW_CFA_offset: r16 at cfa-8
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000018 00000014 0000001c FDE cie=00000000 pc=00000400..00000413
+ DW_CFA_set_loc: 00000404
+ DW_CFA_def_cfa_offset: 80
+
+00000030 00000014 00000034 FDE cie=00000000 pc=00000413..00000426
+ DW_CFA_set_loc: 00000417
+ DW_CFA_def_cfa_offset: 80
+
+00000048 ZERO terminator
+#pass
+
diff --git a/ld/testsuite/ld-elf/eh4.s b/ld/testsuite/ld-elf/eh4.s
new file mode 100644
index 000000000000..2714ad64dc84
--- /dev/null
+++ b/ld/testsuite/ld-elf/eh4.s
@@ -0,0 +1,92 @@
+ .text
+ .align 512
+ .globl foo
+ .type foo, @function
+foo:
+.LFB1:
+ subq $72, %rsp
+.LCFI1:
+ xorl %eax, %eax
+ movq %rsp, %rdi
+ call bar@PLT
+ addq $72, %rsp
+ ret
+.LFE1:
+ .size foo, .-foo
+ .globl bar
+ .type bar, @function
+bar:
+.LFB2:
+ subq $72, %rsp
+.LCFI2:
+ xorl %eax, %eax
+ movq %rsp, %rdi
+ call bar@PLT
+ addq $72, %rsp
+ ret
+.LFE2:
+ .size bar, .-bar
+ .section .eh_frame,"a",@progbits
+.Lframe1:
+ .long .LECIE1-.LSCIE1 # Length of Common Information Entry
+.LSCIE1:
+ .long 0x0 # CIE Identifier Tag
+ .byte 0x1 # CIE Version
+ .ascii "zR\0" # CIE Augmentation
+ .uleb128 0x1 # CIE Code Alignment Factor
+ .sleb128 -8 # CIE Data Alignment Factor
+ .byte 0x10 # CIE RA Column
+ .uleb128 0x1 # Augmentation size
+ .byte 0x1b # FDE Encoding (pcrel sdata4)
+ .byte 0xc # DW_CFA_def_cfa
+ .uleb128 0x7
+ .uleb128 0x8
+ .byte 0x90 # DW_CFA_offset, column 0x10
+ .uleb128 0x1
+ .align 8
+.LECIE1:
+.LSFDE1:
+ .long .LEFDE1-.LASFDE1 # FDE Length
+.LASFDE1:
+ .long .LASFDE1-.Lframe1 # FDE CIE offset
+ .long .LFB1-. # FDE initial location
+ .long .LFE1-.LFB1 # FDE address range
+ .uleb128 0x0 # Augmentation size
+ .byte 0x1 # DW_CFA_set_loc
+ .long .LCFI1-.
+ .byte 0xe # DW_CFA_def_cfa_offset
+ .uleb128 0x50
+ .align 8
+.LEFDE1:
+.Lframe2:
+ .long .LECIE2-.LSCIE2 # Length of Common Information Entry
+.LSCIE2:
+ .long 0x0 # CIE Identifier Tag
+ .byte 0x1 # CIE Version
+ .ascii "zR\0" # CIE Augmentation
+ .uleb128 0x1 # CIE Code Alignment Factor
+ .sleb128 -8 # CIE Data Alignment Factor
+ .byte 0x10 # CIE RA Column
+ .uleb128 0x1 # Augmentation size
+ .byte 0x1b # FDE Encoding (pcrel sdata4)
+ .byte 0xc # DW_CFA_def_cfa
+ .uleb128 0x7
+ .uleb128 0x8
+ .byte 0x90 # DW_CFA_offset, column 0x10
+ .uleb128 0x1
+ .align 8
+.LECIE2:
+.LSFDE2:
+ .long .LEFDE2-.LASFDE2 # FDE Length
+.LASFDE2:
+ .long .LASFDE2-.Lframe2 # FDE CIE offset
+ .long .LFB2-. # FDE initial location
+ .long .LFE2-.LFB2 # FDE address range
+ .uleb128 0x0 # Augmentation size
+ .byte 0x1 # DW_CFA_set_loc
+ .long .LCFI2-.
+ .byte 0xe # DW_CFA_def_cfa_offset
+ .uleb128 0x50
+ .align 8
+.LEFDE2:
+ .section .note.GNU-stack,"",@progbits
diff --git a/ld/testsuite/ld-elf/eh4a.s b/ld/testsuite/ld-elf/eh4a.s
new file mode 100644
index 000000000000..c245871ed10d
--- /dev/null
+++ b/ld/testsuite/ld-elf/eh4a.s
@@ -0,0 +1,3 @@
+ .section .eh_frame,"a",%progbits
+ .align 8
+ .zero 8
diff --git a/ld/testsuite/ld-elf/eh5.d b/ld/testsuite/ld-elf/eh5.d
new file mode 100644
index 000000000000..c12562aa3b32
--- /dev/null
+++ b/ld/testsuite/ld-elf/eh5.d
@@ -0,0 +1,161 @@
+#source: eh5.s
+#source: eh5a.s
+#source: eh5b.s
+#ld:
+#readelf: -wf
+#target: x86_64-*-* i?86-*-*
+
+The section .eh_frame contains:
+
+00000000 0000001[04] 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 1b
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+#...
+0000001[48] 00000014 0000001[8c] FDE cie=00000000 pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0 ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000(2c|30) 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zPR"
+ Code alignment factor: 1
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 03 .. .. .. .. 1b
+
+ DW_CFA_nop
+
+0000004[48] 00000014 0000001c FDE cie=000000(2c|30) pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0 ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000(5c|60) 00000014 0000006[04] FDE cie=00000000 pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0 ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+0000007[48] 0000001[8c] 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: 1
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 03 .. .. .. .. 0c 1b
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+#...
+0000009[08] 0000001c 0000002[04] FDE cie=0000007[48] pc=.*
+ Augmentation data: (ef be ad de 00 00 00 00|00 00 00 00 de ad be ef)
+
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0 ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000000b[08] 0000001[04] 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 1b
+
+ DW_CFA_def_cfa: r0 ofs 16
+#...
+000000(c4|d0) 0000001[04] 0000001[8c] FDE cie=000000b[08] pc=.*
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+#...
+000000[de]8 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zPR"
+ Code alignment factor: 1
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 03 .. .. .. .. 1b
+
+ DW_CFA_nop
+
+00000(0f|10)0 00000014 0000001c FDE cie=000000[de]8 pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0 ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001[01]8 0000001[04] 000000(5c|64) FDE cie=000000b[08] pc=.*
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+#...
+000001(1c|30) 0000001[8c] 00000000 CIE
+ Version: 1
+ Augmentation: "zPLR"
+ Code alignment factor: 1
+ Data alignment factor: .*
+ Return address column: .*
+ Augmentation data: 03 .. .. .. .. 0c 1b
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+#...
+000001(38|50) 0000001c 0000002[04] FDE cie=000001(1c|30) pc=.*
+ Augmentation data: (ef be ad de 00 00 00 00|00 00 00 00 de ad be ef)
+
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0 ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001(58|70) 00000014 000001(5c|74) FDE cie=00000000 pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0 ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001(70|88) 00000014 000001(48|5c) FDE cie=000000(2c|30) pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0 ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001(88|a0) 00000014 000001(8c|a4) FDE cie=00000000 pc=.*
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0 ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001(a0|b8) 0000001c 000001(30|44) FDE cie=0000007[48] pc=.*
+ Augmentation data: (ef be ad de 00 00 00 00|00 00 00 00 de ad be ef)
+
+ DW_CFA_advance_loc: 4 to .*
+ DW_CFA_def_cfa: r0 ofs 16
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
diff --git a/ld/testsuite/ld-elf/eh5.s b/ld/testsuite/ld-elf/eh5.s
new file mode 100644
index 000000000000..6af48c2c1adc
--- /dev/null
+++ b/ld/testsuite/ld-elf/eh5.s
@@ -0,0 +1,29 @@
+ .text
+ .cfi_startproc simple
+ .long 0
+ .cfi_def_cfa 0, 16
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v0
+ .long 0
+ .cfi_def_cfa 0, 16
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .long 0
+ .cfi_def_cfa 0, 16
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v0
+ .cfi_lsda 12, 0xdeadbeef
+ .long 0
+ .cfi_def_cfa 0, 16
+ .cfi_endproc
+
+ .globl my_personality_v0
+my_personality_v0:
+ .long 0
diff --git a/ld/testsuite/ld-elf/eh5a.s b/ld/testsuite/ld-elf/eh5a.s
new file mode 100644
index 000000000000..a74b2cc84327
--- /dev/null
+++ b/ld/testsuite/ld-elf/eh5a.s
@@ -0,0 +1,27 @@
+ .text
+ .cfi_startproc simple
+ .cfi_def_cfa 0, 16
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v1
+ .long 0
+ .cfi_def_cfa 0, 16
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_def_cfa 0, 16
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v1
+ .cfi_lsda 12, 0xdeadbeef
+ .long 0
+ .cfi_def_cfa 0, 16
+ .cfi_endproc
+
+ .globl my_personality_v1
+my_personality_v1:
+ .long 0
diff --git a/ld/testsuite/ld-elf/eh5b.s b/ld/testsuite/ld-elf/eh5b.s
new file mode 100644
index 000000000000..3e5e0108f95d
--- /dev/null
+++ b/ld/testsuite/ld-elf/eh5b.s
@@ -0,0 +1,29 @@
+ .text
+ .cfi_startproc simple
+ .long 0
+ .cfi_def_cfa 0, 16
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v0
+ .long 0
+ .cfi_def_cfa 0, 16
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .long 0
+ .cfi_def_cfa 0, 16
+ .long 0
+ .cfi_endproc
+
+ .cfi_startproc simple
+ .cfi_personality 3, my_personality_v0
+ .cfi_lsda 12, 0xdeadbeef
+ .long 0
+ .cfi_def_cfa 0, 16
+ .cfi_endproc
+
+ .globl _start
+_start:
+ .long 0
diff --git a/ld/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp
index 43c42822bc08..66b5babfb208 100644
--- a/ld/testsuite/ld-elf/elf.exp
+++ b/ld/testsuite/ld-elf/elf.exp
@@ -1,5 +1,5 @@
# Expect script for various ELF tests.
-# Copyright 2002, 2003 Free Software Foundation, Inc.
+# Copyright 2002, 2003, 2005, 2007 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
@@ -22,6 +22,10 @@ if ![is_elf_format] {
return
}
+if { [istarget spu*-*-*] } {
+ set LDFLAGS "$LDFLAGS --local-store 0:0"
+}
+
set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
foreach t $test_list {
# We need to strip the ".d", but can leave the dirname.
diff --git a/ld/testsuite/ld-elf/end.c b/ld/testsuite/ld-elf/end.c
new file mode 100644
index 000000000000..f7b681adbbd6
--- /dev/null
+++ b/ld/testsuite/ld-elf/end.c
@@ -0,0 +1,7 @@
+#include <stdio.h>
+
+void
+foo ()
+{
+ printf ("TEST1\n");
+}
diff --git a/ld/testsuite/ld-elf/endhidden.c b/ld/testsuite/ld-elf/endhidden.c
new file mode 100644
index 000000000000..2cab97af1843
--- /dev/null
+++ b/ld/testsuite/ld-elf/endhidden.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+__attribute__ ((visibility ("hidden")))
+void
+foo ()
+{
+ printf ("TEST1\n");
+}
diff --git a/ld/testsuite/ld-elf/endprotected.c b/ld/testsuite/ld-elf/endprotected.c
new file mode 100644
index 000000000000..b6b39ea92ad9
--- /dev/null
+++ b/ld/testsuite/ld-elf/endprotected.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+__attribute__ ((visibility ("protected")))
+void
+foo ()
+{
+ printf ("TEST1\n");
+}
diff --git a/ld/testsuite/ld-elf/expr1.d b/ld/testsuite/ld-elf/expr1.d
new file mode 100644
index 000000000000..7bf5d227e5da
--- /dev/null
+++ b/ld/testsuite/ld-elf/expr1.d
@@ -0,0 +1,2 @@
+# ld: -T expr1.t
+# error: expr1.t:3: nonconstant expression for load base
diff --git a/ld/testsuite/ld-elf/expr1.s b/ld/testsuite/ld-elf/expr1.s
new file mode 100644
index 000000000000..998bbc086fa4
--- /dev/null
+++ b/ld/testsuite/ld-elf/expr1.s
@@ -0,0 +1,4 @@
+ .section .bar,"ax","progbits"
+ .byte 0
+ .section .foo,"aw","progbits"
+ .byte 0
diff --git a/ld/testsuite/ld-elf/expr1.t b/ld/testsuite/ld-elf/expr1.t
new file mode 100644
index 000000000000..9670e255bbdd
--- /dev/null
+++ b/ld/testsuite/ld-elf/expr1.t
@@ -0,0 +1,6 @@
+SECTIONS
+{
+ .bar : AT ((ADDR(.foo) + 4095) & ~(4095)) { *(.bar) }
+ .foo : { *(.foo) }
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-elf/extract-symbol-1.ld b/ld/testsuite/ld-elf/extract-symbol-1.ld
new file mode 100644
index 000000000000..53e95c6d09d5
--- /dev/null
+++ b/ld/testsuite/ld-elf/extract-symbol-1.ld
@@ -0,0 +1,18 @@
+ENTRY(_entry)
+PHDRS
+{
+ data PT_LOAD AT (0);
+}
+SECTIONS
+{
+ . = 0x10000;
+ .foo : { *(.foo) } :data
+
+ . = 0x20000;
+ .bar : { *(.bar) } :data
+
+ /DISCARD/ : { *(*) }
+
+ _entry = 0x30000;
+ linker_symbol = 0x40000;
+}
diff --git a/ld/testsuite/ld-elf/extract-symbol-1.s b/ld/testsuite/ld-elf/extract-symbol-1.s
new file mode 100644
index 000000000000..0971500413f9
--- /dev/null
+++ b/ld/testsuite/ld-elf/extract-symbol-1.s
@@ -0,0 +1,15 @@
+ .globl B
+ .globl C
+
+ .section .foo,"awx",%progbits
+ .4byte 1,2,3,4
+B:
+ .4byte 5,6,7
+
+ .section .bar,"ax",%nobits
+ .space 0x123
+C:
+ .space 0x302
+
+ .globl D
+ .equ D,0x12345678
diff --git a/ld/testsuite/ld-elf/extract-symbol-1sec.d b/ld/testsuite/ld-elf/extract-symbol-1sec.d
new file mode 100644
index 000000000000..6891abcec262
--- /dev/null
+++ b/ld/testsuite/ld-elf/extract-symbol-1sec.d
@@ -0,0 +1,13 @@
+#name: --extract-symbol test 1 (sections)
+#source: extract-symbol-1.s
+#ld: -Textract-symbol-1.ld
+#objcopy_linked_file: --extract-symbol
+#objdump: --headers
+#xfail: "hppa*-*-*"
+#...
+Sections:
+ *Idx +Name +Size +VMA +LMA .*
+ *0 +\.foo +0+ +0+ +0+ .*
+ *CONTENTS, ALLOC, LOAD, CODE
+ *1 +\.bar +0+ +0+ +0+ .*
+ *ALLOC, READONLY, CODE
diff --git a/ld/testsuite/ld-elf/extract-symbol-1sym.d b/ld/testsuite/ld-elf/extract-symbol-1sym.d
new file mode 100644
index 000000000000..f37293297329
--- /dev/null
+++ b/ld/testsuite/ld-elf/extract-symbol-1sym.d
@@ -0,0 +1,11 @@
+#name: --extract-symbol test 1 (symbols)
+#source: extract-symbol-1.s
+#ld: -Textract-symbol-1.ld
+#objcopy_linked_file: --extract-symbol
+#nm: -n
+#xfail: "hppa*-*-*"
+0*00010010 T B
+0*00020123 T C
+0*00030000 A _entry
+0*00040000 A linker_symbol
+0*12345678 A D
diff --git a/ld/testsuite/ld-elf/foo.c b/ld/testsuite/ld-elf/foo.c
new file mode 100644
index 000000000000..c84baee2e26a
--- /dev/null
+++ b/ld/testsuite/ld-elf/foo.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+void
+foo (void)
+{
+ printf ("TEST2\n");
+}
+
+static void (*const init_array []) (void)
+ __attribute__ ((used, section (".init_array"), aligned (sizeof (void *))))
+ = { foo };
diff --git a/ld/testsuite/ld-elf/foo.map b/ld/testsuite/ld-elf/foo.map
new file mode 100644
index 000000000000..6b993de75248
--- /dev/null
+++ b/ld/testsuite/ld-elf/foo.map
@@ -0,0 +1,4 @@
+FOO {
+ global: foo;
+ local: *;
+};
diff --git a/ld/testsuite/ld-elf/group.ld b/ld/testsuite/ld-elf/group.ld
index d6b27d04946e..58d78dab942a 100644
--- a/ld/testsuite/ld-elf/group.ld
+++ b/ld/testsuite/ld-elf/group.ld
@@ -1,5 +1,6 @@
SECTIONS
{
. = 0x1000;
- .text : { *(.text) }
+ .text : { *(.text) *(.rodata.brlt) }
+ /DISCARD/ : { *(.reginfo) }
}
diff --git a/ld/testsuite/ld-elf/group3a.d b/ld/testsuite/ld-elf/group3a.d
new file mode 100644
index 000000000000..83c516134d32
--- /dev/null
+++ b/ld/testsuite/ld-elf/group3a.d
@@ -0,0 +1,8 @@
+#source: group3a.s
+#source: group3b.s
+#ld: -T group.ld
+#readelf: -s
+Symbol table '.symtab' contains .* entries:
+#...
+ .*: 0[0]*1000 0 OBJECT GLOBAL HIDDEN . foo
+#...
diff --git a/ld/testsuite/ld-elf/group3a.s b/ld/testsuite/ld-elf/group3a.s
new file mode 100644
index 000000000000..5e6a68648cb4
--- /dev/null
+++ b/ld/testsuite/ld-elf/group3a.s
@@ -0,0 +1,5 @@
+ .section .data,"awG",%progbits,foo_group,comdat
+ .globl foo
+ .type foo,%object
+foo:
+ .word 0
diff --git a/ld/testsuite/ld-elf/group3b.d b/ld/testsuite/ld-elf/group3b.d
new file mode 100644
index 000000000000..82c18e4b4d90
--- /dev/null
+++ b/ld/testsuite/ld-elf/group3b.d
@@ -0,0 +1,8 @@
+#source: group3b.s
+#source: group3a.s
+#ld: -T group.ld
+#readelf: -s
+Symbol table '.symtab' contains .* entries:
+#...
+ .*: 0[0]*1000 0 OBJECT GLOBAL HIDDEN . foo
+#...
diff --git a/ld/testsuite/ld-elf/group3b.s b/ld/testsuite/ld-elf/group3b.s
new file mode 100644
index 000000000000..6c101bc52622
--- /dev/null
+++ b/ld/testsuite/ld-elf/group3b.s
@@ -0,0 +1,6 @@
+ .section .data,"awG",%progbits,foo_group,comdat
+ .hidden foo
+ .globl foo
+ .type foo,%object
+foo:
+ .word 0
diff --git a/ld/testsuite/ld-elf/hash.d b/ld/testsuite/ld-elf/hash.d
new file mode 100644
index 000000000000..9c5a8f92096b
--- /dev/null
+++ b/ld/testsuite/ld-elf/hash.d
@@ -0,0 +1,9 @@
+#source: start.s
+#readelf: -d
+#ld: -shared --hash-style=gnu
+#target: *-*-linux*
+#notarget: mips*-*-*
+
+#...
+[ ]*0x[0-9a-z]+[ ]+\(GNU_HASH\)[ ]+0x[0-9a-z]+
+#...
diff --git a/ld/testsuite/ld-elf/header.d b/ld/testsuite/ld-elf/header.d
new file mode 100644
index 000000000000..d4388323ddda
--- /dev/null
+++ b/ld/testsuite/ld-elf/header.d
@@ -0,0 +1,5 @@
+# target: *-*-linux* *-*-vxworks
+# ld: -T header.t -z max-page-size=0x100
+# objdump: -hpw
+
+#...
diff --git a/ld/testsuite/ld-elf/header.s b/ld/testsuite/ld-elf/header.s
new file mode 100644
index 000000000000..38f22280e8e0
--- /dev/null
+++ b/ld/testsuite/ld-elf/header.s
@@ -0,0 +1,8 @@
+ .text
+ .globl main
+main:
+ .rept 0x40 - 0x15
+ .long 0xfedcba98
+ .endr
+ .data
+ .long 0x76543210
diff --git a/ld/testsuite/ld-elf/header.t b/ld/testsuite/ld-elf/header.t
new file mode 100644
index 000000000000..c378fbe07e01
--- /dev/null
+++ b/ld/testsuite/ld-elf/header.t
@@ -0,0 +1,8 @@
+ENTRY(main)
+
+SECTIONS
+{
+ . = 0x100 + SIZEOF_HEADERS;
+ .text : { *(.text) }
+ .data : { *(.data) }
+}
diff --git a/ld/testsuite/ld-elf/hidden.out b/ld/testsuite/ld-elf/hidden.out
new file mode 100644
index 000000000000..7ad7cbe39750
--- /dev/null
+++ b/ld/testsuite/ld-elf/hidden.out
@@ -0,0 +1,3 @@
+TEST2
+TEST1
+MAIN
diff --git a/ld/testsuite/ld-elf/linkonce1.d b/ld/testsuite/ld-elf/linkonce1.d
new file mode 100644
index 000000000000..35e1787f1816
--- /dev/null
+++ b/ld/testsuite/ld-elf/linkonce1.d
@@ -0,0 +1,12 @@
+#source: linkonce1a.s
+#source: linkonce1b.s
+#ld: -r
+#objdump: -r
+
+.*: file format .*
+
+RELOCATION RECORDS FOR \[.debug_frame\]:
+OFFSET[ ]+TYPE[ ]+VALUE[ ]*
+.*(NONE|unused).*\*ABS\*
+
+#pass
diff --git a/ld/testsuite/ld-elf/linkonce1a.s b/ld/testsuite/ld-elf/linkonce1a.s
new file mode 100644
index 000000000000..5c2d8c25a3ab
--- /dev/null
+++ b/ld/testsuite/ld-elf/linkonce1a.s
@@ -0,0 +1,3 @@
+ .section .gnu.linkonce.d.dummy,"aw"
+bar:
+ .long 0
diff --git a/ld/testsuite/ld-elf/linkonce1b.s b/ld/testsuite/ld-elf/linkonce1b.s
new file mode 100644
index 000000000000..fd45cec54080
--- /dev/null
+++ b/ld/testsuite/ld-elf/linkonce1b.s
@@ -0,0 +1,17 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .long 0
+
+ .section .gnu.linkonce.d.dummy,"aw"
+ .long 0
+foo:
+ .long 0
+ .section .debug_frame,"",%progbits
+ .long foo
diff --git a/ld/testsuite/ld-elf/linkonce2.d b/ld/testsuite/ld-elf/linkonce2.d
new file mode 100644
index 000000000000..33eb14fff0f3
--- /dev/null
+++ b/ld/testsuite/ld-elf/linkonce2.d
@@ -0,0 +1,12 @@
+#source: linkonce1a.s
+#source: linkonce1b.s
+#ld: -emit-relocs
+#objdump: -r
+
+.*: file format .*
+
+RELOCATION RECORDS FOR \[.debug_frame\]:
+OFFSET[ ]+TYPE[ ]+VALUE[ ]*
+.*(NONE|unused).*\*ABS\*
+
+#pass
diff --git a/ld/testsuite/ld-elf/loadaddr.s b/ld/testsuite/ld-elf/loadaddr.s
new file mode 100644
index 000000000000..0a1416924281
--- /dev/null
+++ b/ld/testsuite/ld-elf/loadaddr.s
@@ -0,0 +1,20 @@
+ .text
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+main:
+start:
+_start:
+__start:
+ .byte 0,0,0,0,0,0,0,0
+ .byte 0,0,0,0,0,0,0,0
+ .section .bar,"ax","progbits"
+ .byte 0,0,0,0,0,0,0,0
+ .byte 0,0,0,0,0,0,0,0
+ .section .foo,"aw","progbits"
+ .byte 0,0,0,0,0,0,0,0
+ .byte 0,0,0,0,0,0,0,0
+ .data
+ .byte 0,0,0,0,0,0,0,0
+ .byte 0,0,0,0,0,0,0,0
diff --git a/ld/testsuite/ld-elf/loadaddr1.d b/ld/testsuite/ld-elf/loadaddr1.d
new file mode 100644
index 000000000000..31ac0ac0f287
--- /dev/null
+++ b/ld/testsuite/ld-elf/loadaddr1.d
@@ -0,0 +1,10 @@
+#source: loadaddr.s
+#ld: -T loadaddr1.t -z max-page-size=0x200000
+#readelf: -l --wide
+#target: *-*-linux*
+
+#...
+ LOAD +0x000000 0xf*80000000 0xf*80000000 0x100050 0x100050 RWE 0x200000
+ LOAD +0x200000 0xf*ff600000 0xf*80101000 0x0*10 0x0*10 R E 0x200000
+ LOAD +0x302000 0xf*80102000 0xf*80102000 0x0*10 0x0*10 RW 0x200000
+#pass
diff --git a/ld/testsuite/ld-elf/loadaddr1.t b/ld/testsuite/ld-elf/loadaddr1.t
new file mode 100644
index 000000000000..f28c7cbbcd63
--- /dev/null
+++ b/ld/testsuite/ld-elf/loadaddr1.t
@@ -0,0 +1,13 @@
+SECTIONS
+{
+ . = -0x7ff00000;
+ .text : {*(.text .text.*)}
+ . = ALIGN(64);
+ .foo : { *(.foo) }
+ .bar -0xa00000 : AT ((LOADADDR(.foo) + SIZEOF(.foo) + 4095) & ~(4095))
+ { *(.bar) }
+ . = LOADADDR(.bar) + 4096;
+ . = ALIGN(8192);
+ .data : AT (ADDR(.data)) { *(.data) }
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-elf/loadaddr2.d b/ld/testsuite/ld-elf/loadaddr2.d
new file mode 100644
index 000000000000..2198b6ceb692
--- /dev/null
+++ b/ld/testsuite/ld-elf/loadaddr2.d
@@ -0,0 +1,10 @@
+#source: loadaddr.s
+#ld: -T loadaddr2.t -z max-page-size=0x200000
+#readelf: -l --wide
+#target: *-*-linux*
+
+#...
+ LOAD +0x000000 0xf*80000000 0xf*80000000 0x100050 0x100050 RWE 0x200000
+ LOAD +0x110000 0xf*80110000 0xf*80101000 0x0*10 0x0*10 R E 0x200000
+ LOAD +0x302000 0xf*80302000 0xf*80302000 0x0*10 0x0*10 RW 0x200000
+#pass
diff --git a/ld/testsuite/ld-elf/loadaddr2.t b/ld/testsuite/ld-elf/loadaddr2.t
new file mode 100644
index 000000000000..fd897e79d60d
--- /dev/null
+++ b/ld/testsuite/ld-elf/loadaddr2.t
@@ -0,0 +1,13 @@
+SECTIONS
+{
+ . = -0x7ff00000;
+ .text : {*(.text .text.*)}
+ . = ALIGN(64);
+ .foo : { *(.foo) }
+ .bar -0x7fef0000 : AT ((LOADADDR(.foo) + SIZEOF(.foo) + 4095) & ~(4095))
+ { *(.bar) }
+ . = LOADADDR(.bar) + 0x200000;
+ . = ALIGN(8192);
+ .data : AT (ADDR(.data)) { *(.data) }
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-elf/loadaddr3.t b/ld/testsuite/ld-elf/loadaddr3.t
new file mode 100644
index 000000000000..789f61eda1e4
--- /dev/null
+++ b/ld/testsuite/ld-elf/loadaddr3.t
@@ -0,0 +1,16 @@
+
+MEMORY
+{
+ rom (rx) : ORIGIN = 0x100, LENGTH = 0x100
+ ram (rwx) : ORIGIN = 0x200, LENGTH = 0x100
+
+}
+
+SECTIONS
+{
+ .text : {*(.text .text.*)} >rom
+ .data : {data_load = LOADADDR (.data);
+ data_start = ADDR (.data);
+ *(.data .data.*)} >ram AT>rom
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-elf/loadaddr3a.d b/ld/testsuite/ld-elf/loadaddr3a.d
new file mode 100644
index 000000000000..b2ace667a929
--- /dev/null
+++ b/ld/testsuite/ld-elf/loadaddr3a.d
@@ -0,0 +1,9 @@
+#source: loadaddr.s
+#ld: -T loadaddr3.t -z max-page-size=0x200000
+#readelf: -l --wide
+#target: *-*-linux*
+
+#...
+ LOAD +0x000000 0x0*00000000 0x0*00000000 0x0*0110 0x0*0110 R E 0x.*
+ LOAD +0x000200 0x0*00000200 0x0*00000110 0x0*0010 0x0*0010 RW 0x.*
+#pass
diff --git a/ld/testsuite/ld-elf/loadaddr3b.d b/ld/testsuite/ld-elf/loadaddr3b.d
new file mode 100644
index 000000000000..af7e6e4e07ea
--- /dev/null
+++ b/ld/testsuite/ld-elf/loadaddr3b.d
@@ -0,0 +1,13 @@
+#source: loadaddr.s
+#ld: -T loadaddr3.t -z max-page-size=0x200000
+#objdump: -t
+#target: *-*-linux*
+
+#...
+0+0000100 l d .text 0+0000000 .text
+0+0000200 l d .data 0+0000000 .data
+#...
+0+0000110 g \*ABS\* 0+0000000 data_load
+#...
+0+0000200 g .data 0+0000000 data_start
+#pass
diff --git a/ld/testsuite/ld-elf/main.c b/ld/testsuite/ld-elf/main.c
new file mode 100644
index 000000000000..24f9dcc86515
--- /dev/null
+++ b/ld/testsuite/ld-elf/main.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+int
+main (void)
+{
+ printf ("MAIN\n");
+ return 0;
+}
diff --git a/ld/testsuite/ld-elf/maxpage1.d b/ld/testsuite/ld-elf/maxpage1.d
new file mode 100644
index 000000000000..57acda090a95
--- /dev/null
+++ b/ld/testsuite/ld-elf/maxpage1.d
@@ -0,0 +1,9 @@
+#source: maxpage1.s
+#ld: -z max-page-size=0x200000
+#readelf: -l --wide
+#target: *-*-linux*
+
+#...
+ LOAD+.*0x200000
+ LOAD+.*0x200000
+#pass
diff --git a/ld/testsuite/ld-elf/maxpage1.s b/ld/testsuite/ld-elf/maxpage1.s
new file mode 100644
index 000000000000..1a7735a8f2f5
--- /dev/null
+++ b/ld/testsuite/ld-elf/maxpage1.s
@@ -0,0 +1,13 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .long 0
+
+ .data
+ .long 0
diff --git a/ld/testsuite/ld-elf/maxpage2.d b/ld/testsuite/ld-elf/maxpage2.d
new file mode 100644
index 000000000000..7fe937988460
--- /dev/null
+++ b/ld/testsuite/ld-elf/maxpage2.d
@@ -0,0 +1,9 @@
+#source: maxpage1.s
+#ld: -z max-page-size=0x100000
+#readelf: -l --wide
+#target: *-*-linux*
+
+#...
+ LOAD+.*0x100000
+ LOAD+.*0x100000
+#pass
diff --git a/ld/testsuite/ld-elf/maxpage3.t b/ld/testsuite/ld-elf/maxpage3.t
new file mode 100644
index 000000000000..556dcd533c8a
--- /dev/null
+++ b/ld/testsuite/ld-elf/maxpage3.t
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ .text : {*(.text)}
+ . = ALIGN(CONSTANT (MAXPAGESIZE));
+ .data : {*(.data)}
+ /DISCARD/ : {*(*)}
+}
diff --git a/ld/testsuite/ld-elf/maxpage3a.d b/ld/testsuite/ld-elf/maxpage3a.d
new file mode 100644
index 000000000000..0e46b6bb3e8c
--- /dev/null
+++ b/ld/testsuite/ld-elf/maxpage3a.d
@@ -0,0 +1,11 @@
+#source: maxpage1.s
+#ld: -z max-page-size=0x10000000 -T maxpage3.t
+#readelf: -lS --wide
+#target: *-*-linux*
+
+#...
+ \[[ 0-9]+\] \.data[ \t]+PROGBITS[ \t]+0*10000000[ \t]+[ \t0-9a-f]+WA?.*
+#...
+ LOAD+.*0x10000000
+ LOAD+.*0x10000000
+#pass
diff --git a/ld/testsuite/ld-elf/maxpage3b.d b/ld/testsuite/ld-elf/maxpage3b.d
new file mode 100644
index 000000000000..4bee0ec447c6
--- /dev/null
+++ b/ld/testsuite/ld-elf/maxpage3b.d
@@ -0,0 +1,10 @@
+#source: maxpage1.s
+#ld: -T maxpage3.t -z max-page-size=0x10000000
+#readelf: -lS --wide
+#target: x86_64-*-linux*
+
+#...
+ \[[ 0-9]+\] \.data[ \t]+PROGBITS[ \t]+0*200000[ \t]+[ \t0-9a-f]+WA?.*
+#...
+ LOAD+.*0x10000000
+#pass
diff --git a/ld/testsuite/ld-elf/maxpage3c.d b/ld/testsuite/ld-elf/maxpage3c.d
new file mode 100644
index 000000000000..cdc3eaffe541
--- /dev/null
+++ b/ld/testsuite/ld-elf/maxpage3c.d
@@ -0,0 +1,12 @@
+#source: maxpage1.s
+#as: --32
+#ld: -m elf_i386 -z max-page-size=0x10000000 -T maxpage3.t
+#readelf: -lS --wide
+#target: x86_64-*-linux*
+
+#...
+ \[[ 0-9]+\] \.data[ \t]+PROGBITS[ \t]+0*10000000[ \t]+[ \t0-9a-f]+WA?.*
+#...
+ LOAD+.*0x10000000
+ LOAD+.*0x10000000
+#pass
diff --git a/ld/testsuite/ld-elf/merge.d b/ld/testsuite/ld-elf/merge.d
index 12b8458630c3..bc5a7b2b4bc6 100644
--- a/ld/testsuite/ld-elf/merge.d
+++ b/ld/testsuite/ld-elf/merge.d
@@ -2,7 +2,7 @@
#ld: -T merge.ld
#objdump: -s
#xfail: "arc-*-*" "avr-*-*" "bfin-*-*" "cris*-*-*" "crx-*-*" "d10v-*-*" "d30v-*-*"
-#xfail: "dlx-*-*" "fr30-*-*" "frv-*-*" "hppa*-*-*" "h8300-*-*"
+#xfail: "dlx-*-*" "fr30-*-*" "frv-*-*" "hppa*-*-*" "h8300-*-*" "score-*-*"
#xfail: "i370-*-*" "i860-*-*" "i960-*-*" "ip2k-*-*" "iq2000-*-*"
#xfail: "mcore-*-*" "mn102*-*-*" "mips*-*-*" "ms1-*-*" "msp430-*-*"
#xfail: "or32-*-*" "pj-*-*" "sparc*-*-*" "vax-*-*" "xstormy16-*-*" "xtensa-*-*"
diff --git a/ld/testsuite/ld-elf/multibss1.d b/ld/testsuite/ld-elf/multibss1.d
new file mode 100644
index 000000000000..8074fe3347f1
--- /dev/null
+++ b/ld/testsuite/ld-elf/multibss1.d
@@ -0,0 +1,9 @@
+#source: multibss1.s
+#ld: -e 0
+#readelf: -l --wide
+#target: *-*-linux*
+
+#...
+ +LOAD +0x[^ ]+ +0x[^ ]+ +0x[^ ]+ +0x[^ ]+ +0x500000 .*
+# p_offset p_vaddr p_paddr p_filesz
+#pass
diff --git a/ld/testsuite/ld-elf/multibss1.s b/ld/testsuite/ld-elf/multibss1.s
new file mode 100644
index 000000000000..94b84f994621
--- /dev/null
+++ b/ld/testsuite/ld-elf/multibss1.s
@@ -0,0 +1,11 @@
+ .macro makebss
+ .section .bss_\@,"aw",%nobits
+ .space 0x10000
+ .endm
+
+ .rept 80
+ makebss
+ .endr
+
+ .text
+ .space 0x10
diff --git a/ld/testsuite/ld-elf/new.cc b/ld/testsuite/ld-elf/new.cc
new file mode 100644
index 000000000000..b4c888247e09
--- /dev/null
+++ b/ld/testsuite/ld-elf/new.cc
@@ -0,0 +1,48 @@
+#include <new>
+#include <exception_defines.h>
+
+using std::bad_alloc;
+
+extern "C" void *malloc (std::size_t);
+extern "C" void abort (void);
+
+void *
+operator new (std::size_t sz, const std::nothrow_t&) throw()
+{
+ void *p;
+
+ /* malloc (0) is unpredictable; avoid it. */
+ if (sz == 0)
+ sz = 1;
+ p = (void *) malloc (sz);
+ return p;
+}
+
+void *
+operator new (std::size_t sz) throw (std::bad_alloc)
+{
+ void *p;
+
+ /* malloc (0) is unpredictable; avoid it. */
+ if (sz == 0)
+ sz = 1;
+ p = (void *) malloc (sz);
+ while (p == 0)
+ {
+ ::abort();
+ }
+
+ return p;
+}
+
+void*
+operator new[] (std::size_t sz) throw (std::bad_alloc)
+{
+ return ::operator new(sz);
+}
+
+void *
+operator new[] (std::size_t sz, const std::nothrow_t& nothrow) throw()
+{
+ return ::operator new(sz, nothrow);
+}
diff --git a/ld/testsuite/ld-elf/nobits-1.d b/ld/testsuite/ld-elf/nobits-1.d
new file mode 100644
index 000000000000..9b90b6f76afb
--- /dev/null
+++ b/ld/testsuite/ld-elf/nobits-1.d
@@ -0,0 +1,7 @@
+#ld: -Tnobits-1.t
+#readelf: -l --wide
+
+#...
+ Section to Segment mapping:
+ Segment Sections...
+ 00 .foo .bar
diff --git a/ld/testsuite/ld-elf/nobits-1.s b/ld/testsuite/ld-elf/nobits-1.s
new file mode 100644
index 000000000000..8fb1365c7100
--- /dev/null
+++ b/ld/testsuite/ld-elf/nobits-1.s
@@ -0,0 +1,6 @@
+ .globl _entry
+ .section .foo,"awx",%progbits
+_entry:
+ .byte 0
+ .section .bar,"ax",%nobits
+ .byte 0
diff --git a/ld/testsuite/ld-elf/nobits-1.t b/ld/testsuite/ld-elf/nobits-1.t
new file mode 100644
index 000000000000..200433058b39
--- /dev/null
+++ b/ld/testsuite/ld-elf/nobits-1.t
@@ -0,0 +1,13 @@
+ENTRY(_entry)
+PHDRS
+{
+ data PT_LOAD;
+}
+SECTIONS
+{
+ . = 0x1000000;
+ .foo : { *(.foo) } :data
+ . = 0x2000000;
+ .bar : { *(.bar) } :data
+ /DISCARD/ : { *(*) }
+}
diff --git a/ld/testsuite/ld-elf/noload-1.d b/ld/testsuite/ld-elf/noload-1.d
new file mode 100644
index 000000000000..7cae479a0710
--- /dev/null
+++ b/ld/testsuite/ld-elf/noload-1.d
@@ -0,0 +1,7 @@
+#source: noload-1.s
+#ld: -T noload-1.t
+#readelf: -S --wide
+
+#...
+ \[[ 0-9]+\] TEST[ \t]+NOBITS[ \t0-9a-f]+WA.*
+#pass
diff --git a/ld/testsuite/ld-elf/noload-1.s b/ld/testsuite/ld-elf/noload-1.s
new file mode 100644
index 000000000000..ad0479e0e47e
--- /dev/null
+++ b/ld/testsuite/ld-elf/noload-1.s
@@ -0,0 +1,2 @@
+ .section TEST,"aw",%progbits
+ .byte 0
diff --git a/ld/testsuite/ld-elf/noload-1.t b/ld/testsuite/ld-elf/noload-1.t
new file mode 100644
index 000000000000..1efd06c2e11c
--- /dev/null
+++ b/ld/testsuite/ld-elf/noload-1.t
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ TEST (NOLOAD) :
+ {
+ *(TEST)
+ }
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-elf/noload-2.d b/ld/testsuite/ld-elf/noload-2.d
new file mode 100644
index 000000000000..633bf4563830
--- /dev/null
+++ b/ld/testsuite/ld-elf/noload-2.d
@@ -0,0 +1,8 @@
+#source: noload-1.s
+#ld: -T noload-1.t -z max-page-size=0x200000
+#readelf: -Sl --wide
+#target: *-*-linux*
+
+#...
+ +LOAD +0x200000 +0x0+ +0x0+ +0x0+ +0x0+1 +RW +0x200000
+#pass
diff --git a/ld/testsuite/ld-elf/normal.out b/ld/testsuite/ld-elf/normal.out
new file mode 100644
index 000000000000..3b721f066560
--- /dev/null
+++ b/ld/testsuite/ld-elf/normal.out
@@ -0,0 +1,3 @@
+TEST1
+TEST1
+MAIN
diff --git a/ld/testsuite/ld-elf/note-1.d b/ld/testsuite/ld-elf/note-1.d
new file mode 100644
index 000000000000..a5fc40f2e697
--- /dev/null
+++ b/ld/testsuite/ld-elf/note-1.d
@@ -0,0 +1,8 @@
+#ld: -Tnote-1.t
+#readelf: -l --wide
+
+#...
+ Section to Segment mapping:
+ Segment Sections...
+ 00 .foo
+ 01 .note
diff --git a/ld/testsuite/ld-elf/note-1.s b/ld/testsuite/ld-elf/note-1.s
new file mode 100644
index 000000000000..844188bb5c59
--- /dev/null
+++ b/ld/testsuite/ld-elf/note-1.s
@@ -0,0 +1,6 @@
+ .globl _entry
+ .section .foo,"awx",%progbits
+_entry:
+ .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ .section .note,"",%note
+ .byte 0
diff --git a/ld/testsuite/ld-elf/note-1.t b/ld/testsuite/ld-elf/note-1.t
new file mode 100644
index 000000000000..031fe820ead6
--- /dev/null
+++ b/ld/testsuite/ld-elf/note-1.t
@@ -0,0 +1,14 @@
+ENTRY(_entry)
+PHDRS
+{
+ data PT_LOAD;
+ note PT_NOTE;
+}
+SECTIONS
+{
+ . = 0x1000000;
+ .foo : { *(.foo) } :data
+ . = 0x2000000;
+ .note : { *(.note) } :note
+ /DISCARD/ : { *(*) }
+}
diff --git a/ld/testsuite/ld-elf/orphan.d b/ld/testsuite/ld-elf/orphan.d
index 04d935c11e5c..54d10df4cdaa 100644
--- a/ld/testsuite/ld-elf/orphan.d
+++ b/ld/testsuite/ld-elf/orphan.d
@@ -4,6 +4,7 @@
#...
\[[ 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.*
#...
diff --git a/ld/testsuite/ld-elf/orphan2.d b/ld/testsuite/ld-elf/orphan2.d
index 867a4a9261c8..a82e72177534 100644
--- a/ld/testsuite/ld-elf/orphan2.d
+++ b/ld/testsuite/ld-elf/orphan2.d
@@ -4,5 +4,6 @@
#...
\[[ 0-9]+\] \.text[ \t]+PROGBITS[ \t0-9a-f]+AX?.*
+#...
\[[ 0-9]+\] \.modinfo[ \t]+PROGBITS[ \t0-9a-f]+A.*
#pass
diff --git a/ld/testsuite/ld-elf/overlay.d b/ld/testsuite/ld-elf/overlay.d
new file mode 100644
index 000000000000..00d25d5e2046
--- /dev/null
+++ b/ld/testsuite/ld-elf/overlay.d
@@ -0,0 +1,12 @@
+# ld: -T overlay.t -u __load_start_text1 -u __load_start_text2 -u __load_stop_text1 -u __load_stop_text2
+#readelf: -s
+
+#...
+[ ]+[0-9]+:[ ]+0*4000[ ]+0[ ]+NOTYPE[ ]+GLOBAL[ ]+DEFAULT[ ]+ABS __load_start_text1
+#...
+[ ]+[0-9]+:[ ]+0*4010[ ]+0[ ]+NOTYPE[ ]+GLOBAL[ ]+DEFAULT[ ]+ABS __load_start_text2
+#...
+[ ]+[0-9]+:[ ]+0*4030[ ]+0[ ]+NOTYPE[ ]+GLOBAL[ ]+DEFAULT[ ]+ABS __load_stop_text2
+#...
+[ ]+[0-9]+:[ ]+0*4010[ ]+0[ ]+NOTYPE[ ]+GLOBAL[ ]+DEFAULT[ ]+ABS __load_stop_text1
+#pass
diff --git a/ld/testsuite/ld-elf/overlay.s b/ld/testsuite/ld-elf/overlay.s
new file mode 100644
index 000000000000..f153044e31b6
--- /dev/null
+++ b/ld/testsuite/ld-elf/overlay.s
@@ -0,0 +1,6 @@
+ .section .text1,"ax",%progbits
+ .space 0x10
+ .section .text2,"ax",%progbits
+ .space 0x20
+ .text
+ .space 0x30
diff --git a/ld/testsuite/ld-elf/overlay.t b/ld/testsuite/ld-elf/overlay.t
new file mode 100644
index 000000000000..bdb33c815cac
--- /dev/null
+++ b/ld/testsuite/ld-elf/overlay.t
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text : { *(.text) }
+ OVERLAY 0x1000 : AT (0x4000)
+ {
+ .text1 {*(.text1)}
+ .text2 {*(.text2)}
+ }
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-elf/pass.out b/ld/testsuite/ld-elf/pass.out
new file mode 100644
index 000000000000..7ef22e9a431a
--- /dev/null
+++ b/ld/testsuite/ld-elf/pass.out
@@ -0,0 +1 @@
+PASS
diff --git a/ld/testsuite/ld-elf/sec64k.exp b/ld/testsuite/ld-elf/sec64k.exp
index bd66c1c5701d..cbf6e4667a12 100644
--- a/ld/testsuite/ld-elf/sec64k.exp
+++ b/ld/testsuite/ld-elf/sec64k.exp
@@ -1,5 +1,5 @@
# Expect script for tests for >64k sections
-# Copyright 2002, 2003 Free Software Foundation, Inc.
+# Copyright 2002, 2003, 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
@@ -50,12 +50,16 @@ for { set i 0 } { $i < $max_sec / $secs_per_file } { incr i } {
}
if { $i == 0 } {
+ puts $ofd " .global start"
+ puts $ofd "start:"
puts $ofd " .global _start"
- puts $ofd " .global __start"
puts $ofd "_start:"
+ puts $ofd " .global __start"
puts $ofd "__start:"
+ puts $ofd " .global main"
+ puts $ofd "main:"
puts $ofd " .global foo_0"
- puts $ofd "foo_0: .long 0"
+ puts $ofd "foo_0: .dc.a 0"
}
# Make sure the used section is not covered by common linker scripts.
@@ -65,9 +69,9 @@ for { set i 0 } { $i < $max_sec / $secs_per_file } { incr i } {
puts $ofd " .section .foo.\\secn,\"ax\""
puts $ofd " .global foo_\\secn"
puts $ofd "foo_\\secn:"
- puts $ofd " .long foo_\\secp"
+ puts $ofd " .dc.a foo_\\secp"
puts $ofd "bar_\\secn:"
- puts $ofd " .long bar_\\secn"
+ puts $ofd " .dc.a bar_\\secn"
puts $ofd " .endm"
puts $ofd " secn = [expr $i * $secs_per_file]"
puts $ofd " .rept $secs_per_file"
@@ -87,35 +91,41 @@ if [catch { set ofd [open "tmpdir/$test1.d" w] } x] {
# 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"
+
+# The m32r target generates both REL and RELA relocs (for historical
+# reasons) so the expected number of sections will be much more than
+# 68000, which throws this particular test right off.
+if {![istarget "m32r-*-*"]} then {
+ foreach sfile [lrange $sfiles 0 [expr [llength $sfiles] / 2]] {
+ puts $ofd "#source: $sfile"
+ }
+ puts $ofd "#ld: -r"
+ puts $ofd "#readelf: -W -Ss"
+ puts $ofd "There are 680.. section headers.*:"
+ puts $ofd "#..."
+ puts $ofd " \\\[ 0\\\] .* 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 " 340..: 0+\[ \]+0\[ \]+SECTION\[ \]+LOCAL\[ \]+DEFAULT\[ \]+68... "
+ puts $ofd "#..."
+ puts $ofd " 340..: 0+(2|4|8)\[ \]+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"
}
-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"
@@ -123,7 +133,11 @@ if [catch { set ofd [open "tmpdir/$test2.d" w] } x] {
return
}
foreach sfile $sfiles { puts $ofd "#source: $sfile" }
-puts $ofd "#ld:"
+if { [istarget spu*-*-*] } {
+ puts $ofd "#ld: --local-store 0:0"
+} else {
+ puts $ofd "#ld:"
+}
puts $ofd "#readelf: -W -Ss"
puts $ofd "There are 660.. section headers.*:"
puts $ofd "#..."
@@ -132,18 +146,18 @@ 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 " 660..: \[0-9a-f\]+\[ \]+0\[ \]+SECTION\[ \]+LOCAL\[ \]+DEFAULT\[ \]+662.. "
puts $ofd "#..."
-puts $ofd " 660..: \[0-9a-f\]+\[ \]+0\[ \]+NOTYPE\[ \]+LOCAL\[ \]+DEFAULT\[ \]+\[0-9\] bar_1"
+puts $ofd " 660..: \[0-9a-f\]+\[ \]+0\[ \]+NOTYPE\[ \]+LOCAL\[ \]+DEFAULT\[ \]+\[0-9\] bar_1$"
puts $ofd "#..."
-puts $ofd ".* bar_66000"
+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 ".* (\[0-9\] foo_1|66... foo_66000)$"
puts $ofd "#..."
-puts $ofd ".* (\[0-9\] foo_1|66... foo_66000)"
+puts $ofd ".* (\[0-9\] foo_1|66... foo_66000)$"
puts $ofd "#pass"
close $ofd
run_dump_test "tmpdir/$test2"
diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp
new file mode 100644
index 000000000000..c8e0a18c4f5c
--- /dev/null
+++ b/ld/testsuite/ld-elf/shared.exp
@@ -0,0 +1,283 @@
+# Expect script for various ELF 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.
+#
+
+# Exclude non-ELF targets.
+
+if ![is_elf_format] {
+ return
+}
+
+# The following tests require running the executable generated by ld.
+if ![isnative] {
+ return
+}
+
+# Check if compiler works
+if { [which $CC] == 0 } {
+ return
+}
+
+set build_tests {
+ {"Build libfoo.so"
+ "-shared" "-fPIC"
+ {foo.c} {} "libfoo.so"}
+ {"Build versioned libfoo.so"
+ "-shared -Wl,--version-script=foo.map" "-fPIC"
+ {foo.c} {} "libfoov.so"}
+ {"Build libbar.so"
+ "-shared" "-fPIC"
+ {begin.c end.c} {} "libbar.so"}
+ {"Build warn libbar.so"
+ "-shared" "-fPIC"
+ {beginwarn.c end.c} {} "libbarw.so"}
+ {"Build hidden libbar.so"
+ "-shared" "-fPIC"
+ {begin.c endhidden.c} {} "libbarh.so"}
+ {"Build protected libbar.so"
+ "-shared" "-fPIC"
+ {begin.c endprotected.c} {} "libbarp.so"}
+ {"Build libbar.so with libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC"
+ {end.c} {} "libbarfoo.so"}
+ {"Build libar.so with versioned libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC"
+ {end.c} {} "libbarfoov.so"}
+ {"Build hidden libbar.so with libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC"
+ {endhidden.c} {} "libbarhfoo.so"}
+ {"Build hidden libar.so with versioned libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC"
+ {endhidden.c} {} "libbarhfoov.so"}
+ {"Build protected libbar.so with libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC"
+ {endprotected.c} {} "libbarpfoo.so"}
+ {"Build protected libbar.so with versioned libfoo.so"
+ "-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC"
+ {endprotected.c} {} "libbarpfoov.so"}
+ {"Build libdl1.so"
+ "-shared" "-fPIC"
+ {dl1.c} {} "libdl1.so"}
+ {"Build libdl2a.so with --dynamic-list=dl2.list"
+ "-shared -Wl,--dynamic-list=dl2.list" "-fPIC"
+ {dl2.c dl2xxx.c} {} "libdl2a.so"}
+ {"Build libdl2a.so with --dynamic-list=dl2a.list"
+ "-shared -Wl,--dynamic-list=dl2a.list" "-fPIC"
+ {dl2.c dl2xxx.c} {} "libdl2a.so"}
+ {"Build libdl2a.so with --dynamic-list-data"
+ "-shared -Wl,--dynamic-list-data" "-fPIC"
+ {dl2.c dl2xxx.c} {} "libdl2a.so"}
+ {"Build libdl2b.so with --dynamic-list=dl2.list and dl2xxx.list"
+ "-shared -Wl,--dynamic-list=dl2.list,--dynamic-list=dl2xxx.list" "-fPIC"
+ {dl2.c dl2xxx.c} {} "libdl2b.so"}
+ {"Build libdl2c.so with --dynamic-list-data and dl2xxx.list"
+ "-shared -Wl,--dynamic-list-data,--dynamic-list=dl2xxx.list" "-fPIC"
+ {dl2.c dl2xxx.c} {} "libdl2c.so"}
+ {"Build libdl4a.so with --dynamic-list=dl4.list"
+ "-shared -Wl,--dynamic-list=dl4.list" "-fPIC"
+ {dl4.c dl4xxx.c} {} "libdl4a.so"}
+ {"Build libdl4b.so with --dynamic-list-data"
+ "-shared -Wl,--dynamic-list-data" "-fPIC"
+ {dl4.c dl4xxx.c} {} "libdl4b.so"}
+ {"Build libdl4c.so with --dynamic-list=dl4.list and dl4xxx.list"
+ "-shared -Wl,--dynamic-list=dl4.list,--dynamic-list=dl4xxx.list" "-fPIC"
+ {dl4.c dl4xxx.c} {} "libdl4c.so"}
+ {"Build libdl4d.so with --dynamic-list-data and dl4xxx.list"
+ "-shared -Wl,--dynamic-list-data,--dynamic-list=dl4xxx.list" "-fPIC"
+ {dl4.c dl4xxx.c} {} "libdl4d.so"}
+ {"Build libdl4e.so with -Bsymbolic-functions --dynamic-list-cpp-new"
+ "-shared -Wl,-Bsymbolic-functions,--dynamic-list-cpp-new" "-fPIC"
+ {dl4.c dl4xxx.c} {} "libdl4e.so"}
+ {"Build libdl4f.so with --dynamic-list-cpp-new -Bsymbolic-functions"
+ "-shared -Wl,--dynamic-list-cpp-new,-Bsymbolic-functions" "-fPIC"
+ {dl4.c dl4xxx.c} {} "libdl4f.so"}
+ {"Build libdl6a.so"
+ "-shared" "-fPIC"
+ {dl6.c} {} "libdl6a.so"}
+ {"Build libdl6b.so with -Bsymbolic --dynamic-list-data"
+ "-shared -Wl,-Bsymbolic,--dynamic-list-data" "-fPIC"
+ {dl6.c} {} "libdl6b.so"}
+ {"Build libdl6c.so with -Bsymbolic"
+ "-shared -Wl,-Bsymbolic" "-fPIC"
+ {dl6.c} {} "libdl6c.so"}
+ {"Build libdl6d.so with --dynamic-list-data -Bsymbolic"
+ "-shared -Wl,--dynamic-list-data,-Bsymbolic" "-fPIC"
+ {dl6.c} {} "libdl6d.so"}
+ {"Build libdata1.so"
+ "-shared" "-fPIC"
+ {data1.c} {} "libdata1.so"}
+}
+
+set run_tests {
+ {"Run normal with libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" ""
+ {main.c} "normal" "normal.out"}
+ {"Run protected with libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoo.so tmpdir/endprotected.o" ""
+ {main.c} "protected" "normal.out"}
+ {"Run hidden with libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoo.so tmpdir/endhidden.o" ""
+ {main.c} "hidden" "hidden.out"}
+ {"Run normal with versioned libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoov.so tmpdir/end.o" ""
+ {main.c} "normalv" "normal.out"}
+ {"Run warn with versioned libfoo.so"
+ "tmpdir/beginwarn.o tmpdir/libfoov.so" ""
+ {main.c} "warn" "warn.out"
+ "" "" "^.*\\\): warning: function foo is deprecated$"}
+ {"Run protected with versioned libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoov.so tmpdir/endprotected.o" ""
+ {main.c} "protected" "normal.out"}
+ {"Run hidden with versioned libfoo.so"
+ "tmpdir/begin.o tmpdir/libfoov.so tmpdir/endhidden.o" ""
+ {main.c} "hiddenv" "hidden.out"}
+ {"Run normal libbar.so with libfoo.so"
+ "tmpdir/libbarfoo.so tmpdir/libfoo.so" ""
+ {main.c} "normal" "normal.out"}
+ {"Run protected libbar.so with libfoo.so"
+ "tmpdir/libbarpfoo.so tmpdir/libfoo.so" ""
+ {main.c} "protected" "normal.out"}
+ {"Run hidden libbar.so with libfoo.so"
+ "tmpdir/libbarhfoo.so tmpdir/libfoo.so" ""
+ {main.c} "hidden" "hidden.out"}
+ {"Run normal libbar.so with versioned libfoo.so"
+ "tmpdir/libbarfoov.so tmpdir/libfoov.so" ""
+ {main.c} "normal" "normal.out"}
+ {"Run protected libbar.so with versioned libfoo.so"
+ "tmpdir/libbarpfoov.so tmpdir/libfoov.so" ""
+ {main.c} "protected" "normal.out"}
+ {"Run hidden libbar.so with versioned libfoo.so"
+ "tmpdir/libbarhfoov.so tmpdir/libfoov.so" ""
+ {main.c} "hidden" "hidden.out"}
+ {"Run dl1a with --dynamic-list=dl1.list and dlopen on libdl1.so"
+ "--dynamic-list=dl1.list -ldl" ""
+ {dl1main.c} "dl1a" "dl1.out"}
+ {"Run dl1b with --dynamic-list-data and dlopen on libdl1.so"
+ "--dynamic-list-data -ldl" ""
+ {dl1main.c} "dl1b" "dl1.out"}
+ {"Run with libdl2a.so"
+ "tmpdir/libdl2a.so" ""
+ {dl2main.c} "dl2a" "dl2a.out"}
+ {"Run with libdl2b.so"
+ "tmpdir/libdl2b.so" ""
+ {dl2main.c} "dl2b" "dl2b.out"}
+ {"Run with libdl2c.so"
+ "tmpdir/libdl2c.so" ""
+ {dl2main.c} "dl2c" "dl2b.out"}
+ {"Run with libdl4a.so"
+ "tmpdir/libdl4a.so" ""
+ {dl4main.c} "dl4a" "dl4a.out"}
+ {"Run with libdl4b.so"
+ "tmpdir/libdl4b.so" ""
+ {dl4main.c} "dl4b" "dl4a.out"}
+ {"Run with libdl4c.so"
+ "tmpdir/libdl4c.so" ""
+ {dl4main.c} "dl4c" "dl4b.out"}
+ {"Run with libdl4d.so"
+ "tmpdir/libdl4d.so" ""
+ {dl4main.c} "dl4d" "dl4b.out"}
+ {"Run with libdl4e.so"
+ "tmpdir/libdl4e.so" ""
+ {dl4main.c} "dl4e" "dl4a.out"}
+ {"Run with libdl4f.so"
+ "tmpdir/libdl4f.so" ""
+ {dl4main.c} "dl4f" "dl4a.out"}
+ {"Run dl6a1 with --dynamic-list-data and dlopen on libdl6a.so"
+ "--dynamic-list-data -ldl" ""
+ {dl6amain.c} "dl6a1" "dl6a.out"}
+ {"Run dl6a2 with -Bsymbolic-functions and dlopen on libdl6a.so"
+ "-Bsymbolic-functions -ldl" ""
+ {dl6amain.c} "dl6a2" "dl6b.out"}
+ {"Run dl6a3 with -Bsymbolic and dlopen on libdl6a.so"
+ "-Bsymbolic -ldl" ""
+ {dl6amain.c} "dl6a3" "dl6b.out"}
+ {"Run dl6a4 with -Bsymbolic --dynamic-list-data and dlopen on libdl6a.so"
+ "-Bsymbolic --dynamic-list-data -ldl" ""
+ {dl6amain.c} "dl6a4" "dl6a.out"}
+ {"Run dl6a5 with -Bsymbolic-functions --dynamic-list-cpp-new and dlopen on libdl6a.so"
+ "-Bsymbolic-functions --dynamic-list-cpp-new -ldl" ""
+ {dl6amain.c} "dl6a5" "dl6b.out"}
+ {"Run dl6a6 with --dynamic-list-cpp-new -Bsymbolic-functions and dlopen on libdl6a.so"
+ "--dynamic-list-cpp-new -Bsymbolic-functions -ldl" ""
+ {dl6amain.c} "dl6a6" "dl6b.out"}
+ {"Run dl6a7 with --dynamic-list-data -Bsymbolic and dlopen on libdl6a.so"
+ "--dynamic-list-data -Bsymbolic -ldl" ""
+ {dl6amain.c} "dl6a7" "dl6a.out"}
+ {"Run dl6b1 with --dynamic-list-data and dlopen on libdl6b.so"
+ "--dynamic-list-data -ldl" ""
+ {dl6bmain.c} "dl6b1" "dl6a.out"}
+ {"Run dl6b2 with dlopen on libdl6b.so"
+ "-ldl" ""
+ {dl6bmain.c} "dl6b2" "dl6b.out"}
+ {"Run dl6c1 with --dynamic-list-data and dlopen on libdl6c.so"
+ "--dynamic-list-data -ldl" ""
+ {dl6cmain.c} "dl6c1" "dl6b.out"}
+ {"Run dl6d1 with --dynamic-list-data and dlopen on libdl6d.so"
+ "--dynamic-list-data -ldl" ""
+ {dl6dmain.c} "dl6d1" "dl6b.out"}
+ {"Run with libdata1.so"
+ "tmpdir/libdata1.so" ""
+ {dynbss1.c} "dynbss1" "pass.out"}
+}
+
+run_cc_link_tests $build_tests
+# NetBSD ELF systems do not currently support the .*_array sections.
+run_ld_link_exec_tests [list "*-*-netbsdelf*"] $run_tests
+
+# Check if compiler works
+if { [which $CXX] == 0 } {
+ return
+}
+
+set build_cxx_tests {
+ {"Build libdl3a.so with --dynamic-list=dl3.list"
+ "-shared -Wl,--dynamic-list=dl3.list" "-fPIC"
+ {dl3.cc} {} "libdl3a.so" "c++"}
+ {"Build libdl3b.so with -Bsymbolic"
+ "-shared -Wl,-Bsymbolic" "-fPIC"
+ {dl3.cc} {} "libdl3b.so" "c++"}
+ {"Build libdl3a.so with --dynamic-list-cpp-typeinfo"
+ "-shared -Wl,--dynamic-list-cpp-typeinfo" "-fPIC"
+ {dl3.cc} {} "libdl3c.so" "c++"}
+ {"Build libdnew1a.so with --Bsymbolic-functions --dynamic-list-cpp-new"
+ "-shared -Wl,-Bsymbolic-functions,--dynamic-list-cpp-new" "-fPIC"
+ {del.cc new.cc} {} "libnew1a.so" "c++"}
+ {"Build libdnew1b.so with --dynamic-list-data --dynamic-list-cpp-new"
+ "-shared -Wl,--dynamic-list-data,--dynamic-list-cpp-new" "-fPIC"
+ {del.cc new.cc} {} "libnew1b.so" "c++"}
+}
+
+set run_cxx_tests {
+ {"Run with libdl3a.so"
+ "tmpdir/libdl3a.so" ""
+ {dl3main.cc} "dl3a" "dl3a.out" "" "c++"}
+ {"Run with libdl3b.so"
+ "tmpdir/libdl3b.so" ""
+ {dl3main.cc} "dl3b" "dl3b.out" "" "c++"}
+ {"Run with libdl3c.so"
+ "tmpdir/libdl3c.so" ""
+ {dl3main.cc} "dl3c" "dl3a.out" "" "c++"}
+ {"Run with libnew1a.so"
+ "tmpdir/libnew1a.so" ""
+ {dl5.cc} "dl5a" "dl5.out" "" "c++"}
+ {"Run with libnew1b.so"
+ "tmpdir/libnew1b.so" ""
+ {dl5.cc} "dl5b" "dl5.out" "" "c++"}
+}
+
+run_cc_link_tests $build_cxx_tests
+run_ld_link_exec_tests [] $run_cxx_tests
diff --git a/ld/testsuite/ld-elf/stab.d b/ld/testsuite/ld-elf/stab.d
new file mode 100644
index 000000000000..667623817d48
--- /dev/null
+++ b/ld/testsuite/ld-elf/stab.d
@@ -0,0 +1,11 @@
+#source: start.s
+#as: -gstabs
+#readelf: -S --wide
+#ld:
+#notarget: ia64-*-*
+
+#...
+ \[[0-9 ][0-9]\] \.stab +PROGBITS +0+ [0-9a-f]+ [0-9a-f]+ [0-9a-f]+ +[1-9]+ +0.*
+#...
+ \[[0-9 ][0-9]\] \.stabstr +STRTAB +0+ [0-9a-f]+ [0-9a-f]+ 00 +0 +0.*
+#...
diff --git a/ld/testsuite/ld-elf/start.s b/ld/testsuite/ld-elf/start.s
index 9cbf231a3abd..d8655bef05cc 100644
--- a/ld/testsuite/ld-elf/start.s
+++ b/ld/testsuite/ld-elf/start.s
@@ -1,10 +1,10 @@
.text
+ .global start /* Used by SH targets. */
+start:
.global _start
_start:
.global __start
__start:
- .global start /* Used by SH targets. */
-start:
.global main /* Used by HPPA targets. */
main:
- .long 0
+ .dc.a 0
diff --git a/ld/testsuite/ld-elf/symbol1ref.s b/ld/testsuite/ld-elf/symbol1ref.s
index 582e6ba12b79..15725cb1da9f 100644
--- a/ld/testsuite/ld-elf/symbol1ref.s
+++ b/ld/testsuite/ld-elf/symbol1ref.s
@@ -1,3 +1,3 @@
.text
- .long symbol1
+ .dc.a symbol1
diff --git a/ld/testsuite/ld-elf/symbol2ref.s b/ld/testsuite/ld-elf/symbol2ref.s
new file mode 100644
index 000000000000..d2710f9c9a80
--- /dev/null
+++ b/ld/testsuite/ld-elf/symbol2ref.s
@@ -0,0 +1,3 @@
+ .text
+ .dc.a Foo
+
diff --git a/ld/testsuite/ld-elf/symbol2w.s b/ld/testsuite/ld-elf/symbol2w.s
new file mode 100644
index 000000000000..794a753c616e
--- /dev/null
+++ b/ld/testsuite/ld-elf/symbol2w.s
@@ -0,0 +1,6 @@
+ .section .gnu.warning,"a",%progbits
+ .global Foo
+ .type Foo, %object
+ .size Foo, 20
+Foo:
+ .string "function 'Foo' used"
diff --git a/ld/testsuite/ld-elf/tbss1.s b/ld/testsuite/ld-elf/tbss1.s
new file mode 100644
index 000000000000..4f1631f2dc67
--- /dev/null
+++ b/ld/testsuite/ld-elf/tbss1.s
@@ -0,0 +1,24 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .byte 0
+ .globl bss
+ .section .bss,"aw",%nobits
+ .p2align 12
+ .type bss,%object
+ .size bss,4096
+bss:
+ .zero 4096
+ .globl tbss
+ .section .tbss,"awT",%nobits
+ .p2align 12
+ .type tbss,%object
+ .size tbss,4096
+tbss:
+ .zero 4096
diff --git a/ld/testsuite/ld-elf/tbss2.s b/ld/testsuite/ld-elf/tbss2.s
new file mode 100644
index 000000000000..b9809258e26c
--- /dev/null
+++ b/ld/testsuite/ld-elf/tbss2.s
@@ -0,0 +1,16 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .byte 0
+ .globl tbss
+ .section .tbss,"awT",%nobits
+ .type tbss,%object
+ .size tbss,1
+tbss:
+ .zero 1
diff --git a/ld/testsuite/ld-elf/tdata1.s b/ld/testsuite/ld-elf/tdata1.s
new file mode 100644
index 000000000000..6ea57b661f16
--- /dev/null
+++ b/ld/testsuite/ld-elf/tdata1.s
@@ -0,0 +1,24 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .byte 0
+ .globl data
+ .section .data,"aw",%progbits
+ .p2align 4
+ .type data,%object
+ .size data,4096
+data:
+ .zero 4096
+ .globl tdata
+ .section .tdata,"awT",%progbits
+ .p2align 4
+ .type tdata,%object
+ .size tdata,4096
+tdata:
+ .zero 4096
diff --git a/ld/testsuite/ld-elf/tdata2.s b/ld/testsuite/ld-elf/tdata2.s
new file mode 100644
index 000000000000..1da459f96192
--- /dev/null
+++ b/ld/testsuite/ld-elf/tdata2.s
@@ -0,0 +1,16 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .byte 0
+ .globl tdata
+ .section .tdata,"awT",%progbits
+ .type tdata,%object
+ .size tdata,1
+tdata:
+ .byte 0
diff --git a/ld/testsuite/ld-elf/tls_common.exp b/ld/testsuite/ld-elf/tls_common.exp
new file mode 100644
index 000000000000..512689f167be
--- /dev/null
+++ b/ld/testsuite/ld-elf/tls_common.exp
@@ -0,0 +1,70 @@
+# Expect script for .tls_common 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.
+#
+# Written by Jakub Jelinek (jakub@redhat.com)
+#
+
+# Make sure that binutils can correctly handle ld output in ELF.
+
+# Run on Linux only.
+if { ![istarget *-*-linux*] } {
+ return
+}
+
+if { [istarget *-*-linux*aout*]
+ || [istarget *-*-linux*oldld*] } {
+ return
+}
+
+global as
+global ld
+global READELF
+global srcdir
+global subdir
+global link_output
+
+if { ![ld_assemble $as $srcdir/$subdir/tls_common.s tmpdir/tls_common.o ] } {
+ unresolved "tls_common"
+ return
+}
+
+if { ![ld_simple_link $ld tmpdir/tls_common1.o "-r tmpdir/tls_common.o"] } {
+ fail "tls_common"
+ return
+}
+
+if { ![ld_simple_link $ld tmpdir/tls_common "tmpdir/tls_common1.o"] } {
+ if { [string match "*not supported*" $link_output]
+ || [string match "*unrecognized option*" $link_output] } {
+ unsupported "$ld_options is not supported by this target"
+ } elseif { [string match "*Warning*alignment*of common symbol*" $link_output] } {
+ fail "tls_common"
+ } else {
+ unresolved "tls_common"
+ }
+ return
+}
+
+send_log "$READELF -l --wide tmpdir/tls_common\n"
+catch "exec $READELF -l --wide tmpdir/tls_common" readelf_output
+if ![regexp ".*TLS.*0x0+ 0x0+4 R .*" $readelf_output] then {
+ send_log "$readelf_output\n"
+ fail "tls_common"
+ return
+}
+
+pass "tls_common"
diff --git a/ld/testsuite/ld-elf/tls_common.s b/ld/testsuite/ld-elf/tls_common.s
new file mode 100644
index 000000000000..502d8f3103a7
--- /dev/null
+++ b/ld/testsuite/ld-elf/tls_common.s
@@ -0,0 +1,11 @@
+ .globl main
+ .globl start
+ .globl _start
+ .globl __start
+ .text
+main:
+start:
+_start:
+__start:
+ .byte 0
+ .tls_common foo,4,4
diff --git a/ld/testsuite/ld-elf/warn.out b/ld/testsuite/ld-elf/warn.out
new file mode 100644
index 000000000000..ba836ce87915
--- /dev/null
+++ b/ld/testsuite/ld-elf/warn.out
@@ -0,0 +1,3 @@
+TEST2
+TEST2
+MAIN
diff --git a/ld/testsuite/ld-elf/warn2.d b/ld/testsuite/ld-elf/warn2.d
new file mode 100644
index 000000000000..97d4f590d3f8
--- /dev/null
+++ b/ld/testsuite/ld-elf/warn2.d
@@ -0,0 +1,15 @@
+#source: start.s
+#source: symbol2ref.s
+#source: symbol2w.s
+#ld: -T group.ld
+#warning: ^[^\\n]*\.[obj]+: warning: function 'Foo' used$
+#readelf: -s
+#notarget: "sparc64-*-solaris2*" "sparcv9-*-solaris2*"
+#xfail: "arc-*-*" "d30v-*-*" "dlx-*-*" "i960-*-*" "or32-*-*" "pj-*-*"
+
+# Check that warnings are generated for the symbols in .gnu.warning
+# construct and that the symbol still appears as expected.
+
+#...
+[ ]+[0-9]+:[ ]+[0-9a-f]+[ ]+20[ ]+OBJECT[ ]+GLOBAL DEFAULT[ ]+[1-2] Foo
+#pass
diff --git a/ld/testsuite/ld-elf/wrap.exp b/ld/testsuite/ld-elf/wrap.exp
new file mode 100644
index 000000000000..5fd57ea7d621
--- /dev/null
+++ b/ld/testsuite/ld-elf/wrap.exp
@@ -0,0 +1,54 @@
+# Expect script for wrap ELF 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.
+#
+
+# Exclude non-ELF targets.
+
+if ![is_elf_format] {
+ return
+}
+
+# The following tests require running the executable generated by ld.
+if ![isnative] {
+ return
+}
+
+# Check if compiler works
+if { [which $CC] == 0 } {
+ return
+}
+
+set build_tests {
+ {"Build libwrap1a.so"
+ "-shared" "-fPIC"
+ {wrap1a.c} {} "libwrap1a.so"}
+ {"Build libwrap1b.so"
+ "-shared tmpdir/libwrap1a.so" "-fPIC"
+ {wrap1b.c} {} "libwrap1b.so"}
+}
+
+set run_tests {
+ {"Run with libwrap1a.so and libwrap1b.so"
+ "--wrap par tmpdir/libwrap1a.so tmpdir/libwrap1b.so" ""
+ {wrap1.c} "wrap1" "wrap1.out"}
+ {"Run with libwrap1b.so and libwrap1a.so"
+ "--wrap par tmpdir/libwrap1b.so tmpdir/libwrap1a.so" ""
+ {wrap1.c} "wrap1" "wrap1.out"}
+}
+
+run_cc_link_tests $build_tests
+run_ld_link_exec_tests [] $run_tests
diff --git a/ld/testsuite/ld-elf/wrap1.c b/ld/testsuite/ld-elf/wrap1.c
new file mode 100644
index 000000000000..1ff250e2dba9
--- /dev/null
+++ b/ld/testsuite/ld-elf/wrap1.c
@@ -0,0 +1,8 @@
+extern void par (void);
+
+int
+main (void)
+{
+ par ();
+ return 0;
+}
diff --git a/ld/testsuite/ld-elf/wrap1.out b/ld/testsuite/ld-elf/wrap1.out
new file mode 100644
index 000000000000..7c1938f43b61
--- /dev/null
+++ b/ld/testsuite/ld-elf/wrap1.out
@@ -0,0 +1,3 @@
+__wrap_par
+__real_par
+par
diff --git a/ld/testsuite/ld-elf/wrap1a.c b/ld/testsuite/ld-elf/wrap1a.c
new file mode 100644
index 000000000000..75c94e00a448
--- /dev/null
+++ b/ld/testsuite/ld-elf/wrap1a.c
@@ -0,0 +1,6 @@
+#include <stdio.h>
+
+void par (void)
+{
+ printf ("par\n");
+}
diff --git a/ld/testsuite/ld-elf/wrap1b.c b/ld/testsuite/ld-elf/wrap1b.c
new file mode 100644
index 000000000000..abd39aa97158
--- /dev/null
+++ b/ld/testsuite/ld-elf/wrap1b.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+
+extern void par (void);
+
+void __real_par (void)
+{
+ printf ("__real_par \n");
+ par ();
+}
+
+void
+__wrap_par (void)
+{
+ printf ("__wrap_par \n");
+ __real_par ();
+}
diff --git a/ld/testsuite/ld-elfcomm/elfcomm.exp b/ld/testsuite/ld-elfcomm/elfcomm.exp
index 5b3db4986b7d..84a68edbae74 100644
--- a/ld/testsuite/ld-elfcomm/elfcomm.exp
+++ b/ld/testsuite/ld-elfcomm/elfcomm.exp
@@ -1,5 +1,5 @@
# Expect script for common symbol tests
-# Copyright 2003, 2005 Free Software Foundation, Inc.
+# Copyright 2003, 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
@@ -38,6 +38,13 @@ if { [which $CC] == 0 } {
untested $test1c2
return
}
+if { [istarget score-*-*] } {
+ untested $test1w1
+ untested $test1w2
+ untested $test1c1
+ untested $test1c2
+ return
+}
proc dump_common1 { testname } {
global exec_output
@@ -45,7 +52,7 @@ proc dump_common1 { testname } {
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]
+ if { ![regexp "(\[ \]*)(\[0-9\]+):(\[ \]*)(\[0\]*)80(\[ \]+)4(\[ \]+)OBJECT(\[ \]+)GLOBAL(\[ \]+)DEFAULT(\[ \]+)(PRC\\\[0xff03\\\]|COM|SCOM)(\[ \]+)_?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
@@ -70,17 +77,22 @@ if { [ld_simple_link $ld tmpdir/common1.o "-r tmpdir/common1a.o tmpdir/common1b.
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
+# This test fails on MIPS because the backend sets type_change_ok.
+# The size change warning is suppressed.
+if {[istarget mips*-*-*]} {
+ if { ![regexp "Warning: alignment (\[0-9\]+) of symbol \`_?foo1\' in tmpdir/common1b.o is smaller than 64 in tmpdir/common1a.o" $link_output] } {
+ fail $test1w1
} else {
- fail $test1w1
+ pass $test1w1
}
} else {
pass $test1w1
+ if { ![regexp "Warning: alignment (\[0-9\]+) of symbol \`_?foo1\' in tmpdir/common1b.o is smaller than 64 in tmpdir/common1a.o" $link_output]
+ || ![regexp "Warning: size of symbol \`_?foo1\' changed from 2 in tmpdir/common1a.o to 21 in tmpdir/common1b.o" $link_output] } {
+ fail $test1w1
+ } else {
+ pass $test1w1
+ }
}
if { [dump_common1 $test1c1] } {
diff --git a/ld/testsuite/ld-elfvers/vers.exp b/ld/testsuite/ld-elfvers/vers.exp
index 6bb77a7c2674..d8ba1b881985 100644
--- a/ld/testsuite/ld-elfvers/vers.exp
+++ b/ld/testsuite/ld-elfvers/vers.exp
@@ -460,44 +460,33 @@ proc objdump_versionstuff { objdump object expectfile } {
# 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.
+ # every line in EXPECTFILE appear in the output in any 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 {
+ set f1 [open $tmpdir/objdump.out r]
+ while { [gets $f1 l1] != -1 } {
+ if { [string match $l2 $l1] } then {
+ break
+ }
+ }
+ close $f1
+
+ if { ![string match $l2 $l1] } then {
+ verbose -log "Did not find \"$l2\""
+ set f1 [open $tmpdir/objdump.out r]
+ while { [gets $f1 l1] != -1 } {
+ verbose -log $l1
+ }
close $f1
close $f2
- return 1
+ return 0
}
}
}
-
- # 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
+ return 1
} else {
verbose -log "$exec_output"
return 0
diff --git a/ld/testsuite/ld-elfvers/vers1.ver b/ld/testsuite/ld-elfvers/vers1.ver
index ace685da1794..a42b970d4966 100644
--- a/ld/testsuite/ld-elfvers/vers1.ver
+++ b/ld/testsuite/ld-elfvers/vers1.ver
@@ -1,8 +1,8 @@
Version definitions:
-1 0x01 0x0c96425f vers1.so
-2 0x00 0x0a7927b1 VERS_1.1
-3 0x00 0x0a7927b2 VERS_1.2
+[1-4] 0x01 0x0c96425f vers1.so
+[1-4] 0x00 0x0a7927b1 VERS_1.1
+[1-4] 0x00 0x0a7927b2 VERS_1.2
VERS_1.1
-4 0x00 0x0a7922b0 VERS_2.0
+[1-4] 0x00 0x0a7922b0 VERS_2.0
VERS_1.2
diff --git a/ld/testsuite/ld-elfvers/vers15.ver b/ld/testsuite/ld-elfvers/vers15.ver
index f60021e068ec..3f960fd07e96 100644
--- a/ld/testsuite/ld-elfvers/vers15.ver
+++ b/ld/testsuite/ld-elfvers/vers15.ver
@@ -1,5 +1,5 @@
Version definitions:
-1 0x01 0x07cc9645 vers15
-2 0x00 0x0a7927b2 VERS_1.2
-3 0x00 0x0a7927b1 VERS_1.1
+[1-3] 0x01 0x07cc9645 vers15
+[1-3] 0x00 0x0a7927b1 VERS_1.1
+[1-3] 0x00 0x0a7927b2 VERS_1.2
diff --git a/ld/testsuite/ld-elfvers/vers16a.ver b/ld/testsuite/ld-elfvers/vers16a.ver
index 5b6063b1000f..7b5006784784 100644
--- a/ld/testsuite/ld-elfvers/vers16a.ver
+++ b/ld/testsuite/ld-elfvers/vers16a.ver
@@ -1,3 +1,3 @@
Version definitions:
-1 0x01 0x064c090f vers16a.so
-2 0x00 0x0a7927b1 VERS_1.1
+[1-2] 0x01 0x064c090f vers16a.so
+[1-2] 0x00 0x0a7927b1 VERS_1.1
diff --git a/ld/testsuite/ld-elfvers/vers17.ver b/ld/testsuite/ld-elfvers/vers17.ver
index 0dad2a6dcca2..b234c9b486d2 100644
--- a/ld/testsuite/ld-elfvers/vers17.ver
+++ b/ld/testsuite/ld-elfvers/vers17.ver
@@ -1,3 +1,3 @@
Version definitions:
-1 0x01 0x0964f95f vers17.so
-2 0x00 0x0a7922b0 VERS_2.0
+[1-2] 0x01 0x0964f95f vers17.so
+[1-2] 0x00 0x0a7922b0 VERS_2.0
diff --git a/ld/testsuite/ld-elfvers/vers18.ver b/ld/testsuite/ld-elfvers/vers18.ver
index c6b14e8f9ab3..c6023de06474 100644
--- a/ld/testsuite/ld-elfvers/vers18.ver
+++ b/ld/testsuite/ld-elfvers/vers18.ver
@@ -1,7 +1,7 @@
Version definitions:
-1 0x01 0x0964e95f vers18.so
-2 0x00 0x0a7927b1 VERS_1.1
-3 0x00 0x0a7927b2 VERS_1.2
+[1-4] 0x01 0x0964e95f vers18.so
+[1-4] 0x00 0x0a7927b1 VERS_1.1
+[1-4] 0x00 0x0a7927b2 VERS_1.2
VERS_1.1
-4 0x00 0x0a7922b0 VERS_2.0
+[1-4] 0x00 0x0a7922b0 VERS_2.0
VERS_1.2
diff --git a/ld/testsuite/ld-elfvers/vers2.ver b/ld/testsuite/ld-elfvers/vers2.ver
index 4ca81eb3a63a..ea992fff1cf6 100644
--- a/ld/testsuite/ld-elfvers/vers2.ver
+++ b/ld/testsuite/ld-elfvers/vers2.ver
@@ -1,6 +1,6 @@
Version definitions:
-1 0x01 0x0c96525f vers2.so
-2 0x00 0x08785b51 VERS_XXX_1.1
+[1-2] 0x01 0x0c96525f vers2.so
+[1-2] 0x00 0x08785b51 VERS_XXX_1.1
Version References:
required from tmpdir/vers1.so:
diff --git a/ld/testsuite/ld-elfvers/vers20.ver b/ld/testsuite/ld-elfvers/vers20.ver
index afeb137472ba..133914770f15 100644
--- a/ld/testsuite/ld-elfvers/vers20.ver
+++ b/ld/testsuite/ld-elfvers/vers20.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x0965695f vers20.so
-2 0x00 0x0a7927b1 VERS_1.1
+[1-2] 0x01 0x0965695f vers20.so
+[1-2] 0x00 0x0a7927b1 VERS_1.1
diff --git a/ld/testsuite/ld-elfvers/vers20a.ver b/ld/testsuite/ld-elfvers/vers20a.ver
index 2592f02394de..c7e11fbdd677 100644
--- a/ld/testsuite/ld-elfvers/vers20a.ver
+++ b/ld/testsuite/ld-elfvers/vers20a.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x0652090f vers20a.so
-2 0x00 0x0a7927b1 VERS_1.1
+[1-2] 0x01 0x0652090f vers20a.so
+[1-2] 0x00 0x0a7927b1 VERS_1.1
diff --git a/ld/testsuite/ld-elfvers/vers21.ver b/ld/testsuite/ld-elfvers/vers21.ver
index 3ba24d801729..76e4a521cfd0 100644
--- a/ld/testsuite/ld-elfvers/vers21.ver
+++ b/ld/testsuite/ld-elfvers/vers21.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x0965595f vers21.so
-2 0x00 0x05aa7610 VERS.0
+[1-2] 0x01 0x0965595f vers21.so
+[1-2] 0x00 0x05aa7610 VERS.0
diff --git a/ld/testsuite/ld-elfvers/vers22a.ver b/ld/testsuite/ld-elfvers/vers22a.ver
index bb4d3bf0c978..b7e1f62d4d42 100644
--- a/ld/testsuite/ld-elfvers/vers22a.ver
+++ b/ld/testsuite/ld-elfvers/vers22a.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x0660090f vers22a.so
-2 0x00 0x05aa7610 VERS.0
+[1-2] 0x01 0x0660090f vers22a.so
+[1-2] 0x00 0x05aa7610 VERS.0
diff --git a/ld/testsuite/ld-elfvers/vers22b.ver b/ld/testsuite/ld-elfvers/vers22b.ver
index b1c834b4f80a..b20f6366c33d 100644
--- a/ld/testsuite/ld-elfvers/vers22b.ver
+++ b/ld/testsuite/ld-elfvers/vers22b.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x065f990f vers22b.so
-2 0x00 0x05aa7610 VERS.0
+[1-2] 0x01 0x065f990f vers22b.so
+[1-2] 0x00 0x05aa7610 VERS.0
diff --git a/ld/testsuite/ld-elfvers/vers23a.ver b/ld/testsuite/ld-elfvers/vers23a.ver
index 9132d2db2e52..3f3e3c0adb3d 100644
--- a/ld/testsuite/ld-elfvers/vers23a.ver
+++ b/ld/testsuite/ld-elfvers/vers23a.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x065f090f vers23a.so
-2 0x00 0x05aa7610 VERS.0
+[1-2] 0x01 0x065f090f vers23a.so
+[1-2] 0x00 0x05aa7610 VERS.0
diff --git a/ld/testsuite/ld-elfvers/vers23b.ver b/ld/testsuite/ld-elfvers/vers23b.ver
index 629d2bc1cf87..4e3edb3c69f7 100644
--- a/ld/testsuite/ld-elfvers/vers23b.ver
+++ b/ld/testsuite/ld-elfvers/vers23b.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x065e990f vers23b.so
-2 0x00 0x05aa7610 VERS.0
+[1-2] 0x01 0x065e990f vers23b.so
+[1-2] 0x00 0x05aa7610 VERS.0
diff --git a/ld/testsuite/ld-elfvers/vers23c.ver b/ld/testsuite/ld-elfvers/vers23c.ver
index 73d771659c15..1fc69e8e4f2d 100644
--- a/ld/testsuite/ld-elfvers/vers23c.ver
+++ b/ld/testsuite/ld-elfvers/vers23c.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x065ea90f vers23c.so
-2 0x00 0x05aa7610 VERS.0
+[1-2] 0x01 0x065ea90f vers23c.so
+[1-2] 0x00 0x05aa7610 VERS.0
diff --git a/ld/testsuite/ld-elfvers/vers25a.ver b/ld/testsuite/ld-elfvers/vers25a.ver
index 81a71603f817..df3aad019609 100644
--- a/ld/testsuite/ld-elfvers/vers25a.ver
+++ b/ld/testsuite/ld-elfvers/vers25a.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x065d090f vers25a.so
-2 0x00 0x05aa7610 VERS.0
+[1-2] 0x01 0x065d090f vers25a.so
+[1-2] 0x00 0x05aa7610 VERS.0
diff --git a/ld/testsuite/ld-elfvers/vers26a.ver b/ld/testsuite/ld-elfvers/vers26a.ver
index 3e67ef1a337c..54626580099b 100644
--- a/ld/testsuite/ld-elfvers/vers26a.ver
+++ b/ld/testsuite/ld-elfvers/vers26a.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x065c090f vers26a.so
-2 0x00 0x05aa7610 VERS.0
+[1-2] 0x01 0x065c090f vers26a.so
+[1-2] 0x00 0x05aa7610 VERS.0
diff --git a/ld/testsuite/ld-elfvers/vers27a.ver b/ld/testsuite/ld-elfvers/vers27a.ver
index 06d85e644ef5..634f1f0a134e 100644
--- a/ld/testsuite/ld-elfvers/vers27a.ver
+++ b/ld/testsuite/ld-elfvers/vers27a.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x065b090f vers27a.so
-2 0x00 0x05aa7610 VERS.0
+[1-2] 0x01 0x065b090f vers27a.so
+[1-2] 0x00 0x05aa7610 VERS.0
diff --git a/ld/testsuite/ld-elfvers/vers27d.ver b/ld/testsuite/ld-elfvers/vers27d.ver
index 672c7ad20055..8343f3ae9fce 100644
--- a/ld/testsuite/ld-elfvers/vers27d.ver
+++ b/ld/testsuite/ld-elfvers/vers27d.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x05ac0cff vers27d1.so
-2 0x00 0x05aa7610 VERS.0
+[1-2] 0x01 0x05ac0cff vers27d1.so
+[1-2] 0x00 0x05aa7610 VERS.0
diff --git a/ld/testsuite/ld-elfvers/vers28b.ver b/ld/testsuite/ld-elfvers/vers28b.ver
index ab99615100ae..b826c539b4bd 100644
--- a/ld/testsuite/ld-elfvers/vers28b.ver
+++ b/ld/testsuite/ld-elfvers/vers28b.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x0659990f vers28b.so
-2 0x00 0x05aa7610 VERS.0
+[1-2] 0x01 0x0659990f vers28b.so
+[1-2] 0x00 0x05aa7610 VERS.0
diff --git a/ld/testsuite/ld-elfvers/vers29.ver b/ld/testsuite/ld-elfvers/vers29.ver
index 85c05a852841..5e73fab0b480 100644
--- a/ld/testsuite/ld-elfvers/vers29.ver
+++ b/ld/testsuite/ld-elfvers/vers29.ver
@@ -1,3 +1,3 @@
Version definitions:
-1 0x01 0x0965d95f vers29.so
-2 0x00 0x0965d95f vers29.so
+[1-2] 0x01 0x0965d95f vers29.so
+[1-2] 0x00 0x0965d95f vers29.so
diff --git a/ld/testsuite/ld-elfvers/vers30.ver b/ld/testsuite/ld-elfvers/vers30.ver
index dfcf0dac7006..e0968b964454 100644
--- a/ld/testsuite/ld-elfvers/vers30.ver
+++ b/ld/testsuite/ld-elfvers/vers30.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x0966695f vers30.so
-2 0x00 0x079239b0 VERS_30.0
+[1-2] 0x01 0x0966695f vers30.so
+[1-2] 0x00 0x079239b0 VERS_30.0
diff --git a/ld/testsuite/ld-elfvers/vers31.ver b/ld/testsuite/ld-elfvers/vers31.ver
index b79a5ab9d499..c1a0ed495fe3 100644
--- a/ld/testsuite/ld-elfvers/vers31.ver
+++ b/ld/testsuite/ld-elfvers/vers31.ver
@@ -1,3 +1,3 @@
Version definitions:
-1 0x01 0x0966595f vers31.so
-2 0x00 0x07923ab0 VERS_31.0
+[1-2] 0x01 0x0966595f vers31.so
+[1-2] 0x00 0x07923ab0 VERS_31.0
diff --git a/ld/testsuite/ld-elfvers/vers4a.ver b/ld/testsuite/ld-elfvers/vers4a.ver
index 41ee241e2c4f..1f02b9dc2ae1 100644
--- a/ld/testsuite/ld-elfvers/vers4a.ver
+++ b/ld/testsuite/ld-elfvers/vers4a.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x07cc96a1 vers4a
-2 0x00 0x0a7922b0 VERS_2.0
+[1-2] 0x01 0x07cc96a1 vers4a
+[1-2] 0x00 0x0a7922b0 VERS_2.0
diff --git a/ld/testsuite/ld-elfvers/vers7a.ver b/ld/testsuite/ld-elfvers/vers7a.ver
index 7b3bf0a973db..eeac5c5f3af2 100644
--- a/ld/testsuite/ld-elfvers/vers7a.ver
+++ b/ld/testsuite/ld-elfvers/vers7a.ver
@@ -1,4 +1,4 @@
Version definitions:
-1 0x01 0x096d595f vers7a.so
-2 0x00 0x05aa7921 VERS_1
+[1-2] 0x01 0x096d595f vers7a.so
+[1-2] 0x00 0x05aa7921 VERS_1
diff --git a/ld/testsuite/ld-elfvers/vers8.ver b/ld/testsuite/ld-elfvers/vers8.ver
index a4b5296ffde2..47996c9baec1 100644
--- a/ld/testsuite/ld-elfvers/vers8.ver
+++ b/ld/testsuite/ld-elfvers/vers8.ver
@@ -1,8 +1,8 @@
Version definitions:
-1 0x01 0x0c96b25f vers8.so
-2 0x00 0x0a7927b1 VERS_1.1
-3 0x00 0x0a7927b2 VERS_1.2
+[1-4] 0x01 0x0c96b25f vers8.so
+[1-4] 0x00 0x0a7927b1 VERS_1.1
+[1-4] 0x00 0x0a7927b2 VERS_1.2
VERS_1.1
-4 0x00 0x0a7922b0 VERS_2.0
+[1-4] 0x00 0x0a7922b0 VERS_2.0
VERS_1.2
diff --git a/ld/testsuite/ld-elfvers/vers9.ver b/ld/testsuite/ld-elfvers/vers9.ver
index cc7369124c8b..fce267c34d0d 100644
--- a/ld/testsuite/ld-elfvers/vers9.ver
+++ b/ld/testsuite/ld-elfvers/vers9.ver
@@ -1,5 +1,5 @@
Version definitions:
-1 0x01 0x007cc969 vers9
-2 0x00 0x0a7927b1 VERS_1.1
-3 0x00 0x0a7927b2 VERS_1.2
+[1-3] 0x01 0x007cc969 vers9
+[1-3] 0x00 0x0a7927b1 VERS_1.1
+[1-3] 0x00 0x0a7927b2 VERS_1.2
diff --git a/ld/testsuite/ld-elfvsb/elfvsb.exp b/ld/testsuite/ld-elfvsb/elfvsb.exp
index 41834f158bda..7976b9c5a1d5 100644
--- a/ld/testsuite/ld-elfvsb/elfvsb.exp
+++ b/ld/testsuite/ld-elfvsb/elfvsb.exp
@@ -315,8 +315,8 @@ proc visibility_run {visibility} {
# 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] } {
+ if { ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG -DSHARED $picflag" $srcdir/$subdir/sh1.c $tmpdir/sh1p.o]
+ || ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG -DSHARED $picflag" $srcdir/$subdir/sh2.c $tmpdir/sh2p.o] } {
unresolved "visibility ($visibility)"
} else {
if { [ string match $visibility "protected" ]
@@ -337,7 +337,7 @@ proc visibility_run {visibility} {
}
# 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] {
+ if ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG -DSHARED $picflag" $srcdir/$subdir/main.c $tmpdir/mainp.o] {
unresolved "visibility ($visibility) (PIC main, non PIC so)"
unresolved "visibility ($visibility) (PIC main)"
} else {
@@ -446,7 +446,7 @@ if { ![ld_compile "$CC -g $CFLAGS" $srcdir/$subdir/common.c tmpdir/common.o] } {
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] } {
+ if { ![ld_compile "$CC -g $CFLAGS -DSHARED $picflag" $srcdir/$subdir/sh3.c tmpdir/sh3.o] } {
unresolved "weak hidden symbol"
} else {
if ![ld_simple_link $ld tmpdir/sh3.so "-shared tmpdir/sh3.o"] {
diff --git a/ld/testsuite/ld-elfvsb/sh1.c b/ld/testsuite/ld-elfvsb/sh1.c
index 8d9fcdbdcb33..b2754249af70 100644
--- a/ld/testsuite/ld-elfvsb/sh1.c
+++ b/ld/testsuite/ld-elfvsb/sh1.c
@@ -13,7 +13,15 @@ extern int mainvar;
/* This variable is defined in the shared library, and overridden by
the main program. */
#ifndef XCOFF_TEST
+#ifdef SHARED
+/* SHARED is defined if we are compiling with -fpic/-fPIC. */
int overriddenvar = -1;
+#else
+/* Without -fpic, newer versions of gcc assume that we are not
+ compiling for a shared library, and thus that overriddenvar is
+ local. */
+extern int overriddenvar;
+#endif
#endif
/* This variable is defined in the shared library. */
@@ -76,12 +84,14 @@ shlib_shlibcall2 ()
return shlib_overriddencall2 ();
}
+#ifdef SHARED
int
shlib_overriddencall2 ()
{
return 7;
}
#endif
+#endif
/* This function calls a function defined by the main program. */
@@ -385,7 +395,11 @@ shlib_visibility_checkweak ()
#endif
#ifdef PROTECTED_TEST
+#ifdef SHARED
int shared_data = 100;
+#else
+extern int shared_data;
+#endif
int *
shared_data_p ()
diff --git a/ld/testsuite/ld-elfvsb/sh2.c b/ld/testsuite/ld-elfvsb/sh2.c
index ef6b2f16f61a..e9a9687bcce5 100644
--- a/ld/testsuite/ld-elfvsb/sh2.c
+++ b/ld/testsuite/ld-elfvsb/sh2.c
@@ -44,3 +44,18 @@ visibility_func_weak ()
return 2;
}
#endif
+
+#ifndef SHARED
+# ifndef XCOFF_TEST
+int overriddenvar = -1;
+
+int
+shlib_overriddencall2 ()
+{
+ return 7;
+}
+# endif
+# ifdef PROTECTED_TEST
+int shared_data = 100;
+# endif
+#endif
diff --git a/ld/testsuite/ld-fastcall/fastcall.exp b/ld/testsuite/ld-fastcall/fastcall.exp
index 5f2e87e5914a..66ad72e93f5d 100644
--- a/ld/testsuite/ld-fastcall/fastcall.exp
+++ b/ld/testsuite/ld-fastcall/fastcall.exp
@@ -1,5 +1,5 @@
# Test that the linker can handle fastcall symbols correctly.
-# Copyright 2002 Free Software Foundation, Inc.
+# Copyright 2002, 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
@@ -17,13 +17,14 @@
set testname "ld (fastcall symbols)"
-if {![istarget "i*86-*-*"]} {
+if {![istarget "i*86-*-*"] && ![istarget "x86_64-*-mingw*"] } {
return
}
if { !([istarget "i*86-*-*pe*"] && ![istarget "i*86-*-opensd*"]) \
&& ![istarget "i*86-*-cygwin*"] \
- && ![istarget "i*86-*-mingw32*"] } {
+ && ![istarget "x86_64-*-mingw*"] \
+ && ![istarget "i*86-*-mingw*"] } {
return
}
diff --git a/ld/testsuite/ld-frv/fdpic-shared-6.d b/ld/testsuite/ld-frv/fdpic-shared-6.d
index aefa4d292cd7..06a335f9d990 100644
--- a/ld/testsuite/ld-frv/fdpic-shared-6.d
+++ b/ld/testsuite/ld-frv/fdpic-shared-6.d
@@ -49,18 +49,18 @@ Disassembly of section \.dat[0-9a-f ]+:
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 ]+: 00 00 03 60 .*
[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 ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 03 58 .*
[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF8
-[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
-[0-9a-f ]+: 00 00 03 88 sdiv\.p gr0,gr8,gr0
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 03 50 .*
[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF0
-[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
-[0-9a-f ]+: 00 00 03 80 sdiv\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 00 .*
+[0-9a-f ]+: 00 00 03 48 .*
[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF7
-[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 00 00 .*
[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
\.\.\.
diff --git a/ld/testsuite/ld-frv/tls-dynamic-1.d b/ld/testsuite/ld-frv/tls-dynamic-1.d
index a3790c991103..b95505e8b196 100644
--- a/ld/testsuite/ld-frv/tls-dynamic-1.d
+++ b/ld/testsuite/ld-frv/tls-dynamic-1.d
@@ -62,7 +62,7 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: ff ff f8 20 cop2 -32,cpr63,cpr32,cpr63
[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
diff --git a/ld/testsuite/ld-frv/tls-dynamic-2.d b/ld/testsuite/ld-frv/tls-dynamic-2.d
index 647073198e47..07bf332f59ae 100644
--- a/ld/testsuite/ld-frv/tls-dynamic-2.d
+++ b/ld/testsuite/ld-frv/tls-dynamic-2.d
@@ -155,7 +155,7 @@ Disassembly of section \.text:
[0-9a-f ]+: 80 88 00 00 nop
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x60>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_-0x60)>:
[0-9a-f ]+: 00 01 02 c0 .*
[0-9a-f ]+: 00 00 08 21 .*
[0-9a-f ]+: 00 01 02 c0 .*
diff --git a/ld/testsuite/ld-frv/tls-dynamic-3.d b/ld/testsuite/ld-frv/tls-dynamic-3.d
index 35be3a929b90..c9750d27ed16 100644
--- a/ld/testsuite/ld-frv/tls-dynamic-3.d
+++ b/ld/testsuite/ld-frv/tls-dynamic-3.d
@@ -22,6 +22,6 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/ld/testsuite/ld-frv/tls-initial-shared-2.d b/ld/testsuite/ld-frv/tls-initial-shared-2.d
index e221bec94516..e4ea6a181833 100644
--- a/ld/testsuite/ld-frv/tls-initial-shared-2.d
+++ b/ld/testsuite/ld-frv/tls-initial-shared-2.d
@@ -149,7 +149,7 @@ Disassembly of section \.text:
[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 ]+<(__data_start|_GLOBAL_OFFSET_TABLE_-0x20)>:
[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
[0-9a-f ]+: 00 00 10 11 add\.p sp,gr17,gr0
diff --git a/ld/testsuite/ld-frv/tls-pie-1.d b/ld/testsuite/ld-frv/tls-pie-1.d
index 11654fcdceda..0ced90a5b392 100644
--- a/ld/testsuite/ld-frv/tls-pie-1.d
+++ b/ld/testsuite/ld-frv/tls-pie-1.d
@@ -62,7 +62,7 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: ff ff f8 20 cop2 -32,cpr63,cpr32,cpr63
[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
diff --git a/ld/testsuite/ld-frv/tls-pie-3.d b/ld/testsuite/ld-frv/tls-pie-3.d
index 4783ce023775..4dc3469eb11c 100644
--- a/ld/testsuite/ld-frv/tls-pie-3.d
+++ b/ld/testsuite/ld-frv/tls-pie-3.d
@@ -22,6 +22,6 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/ld/testsuite/ld-frv/tls-relax-dynamic-1.d b/ld/testsuite/ld-frv/tls-relax-dynamic-1.d
index 7075a288a5c5..3d7ec36596c0 100644
--- a/ld/testsuite/ld-frv/tls-relax-dynamic-1.d
+++ b/ld/testsuite/ld-frv/tls-relax-dynamic-1.d
@@ -62,6 +62,6 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: R_FRV_TLSOFF x
diff --git a/ld/testsuite/ld-frv/tls-relax-dynamic-2.d b/ld/testsuite/ld-frv/tls-relax-dynamic-2.d
index 84f322cd3660..59577d31ee53 100644
--- a/ld/testsuite/ld-frv/tls-relax-dynamic-2.d
+++ b/ld/testsuite/ld-frv/tls-relax-dynamic-2.d
@@ -124,7 +124,7 @@ Disassembly of section \.text:
[0-9a-f ]+: 80 88 00 00 nop
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: 00 00 00 03 add\.p gr0,gr3,gr0
[0-9a-f ]+: R_FRV_TLSOFF x
diff --git a/ld/testsuite/ld-frv/tls-relax-dynamic-3.d b/ld/testsuite/ld-frv/tls-relax-dynamic-3.d
index 6aa4fc7ea6db..43cbdc72b0af 100644
--- a/ld/testsuite/ld-frv/tls-relax-dynamic-3.d
+++ b/ld/testsuite/ld-frv/tls-relax-dynamic-3.d
@@ -22,6 +22,6 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/ld/testsuite/ld-frv/tls-relax-initial-shared-2.d b/ld/testsuite/ld-frv/tls-relax-initial-shared-2.d
index 64ae61f0ddf9..824cf659543e 100644
--- a/ld/testsuite/ld-frv/tls-relax-initial-shared-2.d
+++ b/ld/testsuite/ld-frv/tls-relax-initial-shared-2.d
@@ -138,7 +138,7 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: 00 00 10 11 add\.p sp,gr17,gr0
[0-9a-f ]+: R_FRV_TLSOFF \.tbss
diff --git a/ld/testsuite/ld-frv/tls-relax-pie-1.d b/ld/testsuite/ld-frv/tls-relax-pie-1.d
index cc114430dab0..579047ee61f2 100644
--- a/ld/testsuite/ld-frv/tls-relax-pie-1.d
+++ b/ld/testsuite/ld-frv/tls-relax-pie-1.d
@@ -62,6 +62,6 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: R_FRV_TLSOFF x
diff --git a/ld/testsuite/ld-frv/tls-relax-pie-3.d b/ld/testsuite/ld-frv/tls-relax-pie-3.d
index 4bc52917e12d..da26ca0c1929 100644
--- a/ld/testsuite/ld-frv/tls-relax-pie-3.d
+++ b/ld/testsuite/ld-frv/tls-relax-pie-3.d
@@ -22,6 +22,6 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/ld/testsuite/ld-frv/tls-relax-shared-1.d b/ld/testsuite/ld-frv/tls-relax-shared-1.d
index 35d5c6775f5e..ba3b5322101f 100644
--- a/ld/testsuite/ld-frv/tls-relax-shared-1.d
+++ b/ld/testsuite/ld-frv/tls-relax-shared-1.d
@@ -62,7 +62,7 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0
[0-9a-f ]+: R_FRV_TLSOFF \.tbss
diff --git a/ld/testsuite/ld-frv/tls-relax-shared-2.d b/ld/testsuite/ld-frv/tls-relax-shared-2.d
index e7ac840ff9fc..c07bb35abb3c 100644
--- a/ld/testsuite/ld-frv/tls-relax-shared-2.d
+++ b/ld/testsuite/ld-frv/tls-relax-shared-2.d
@@ -151,7 +151,7 @@ Disassembly of section \.text:
[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x60>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_-0x60)>:
[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
[0-9a-f ]+: 00 00 17 f3 \*unknown\*
diff --git a/ld/testsuite/ld-frv/tls-relax-shared-3.d b/ld/testsuite/ld-frv/tls-relax-shared-3.d
index 48909d51fbe5..b766a005f7a1 100644
--- a/ld/testsuite/ld-frv/tls-relax-shared-3.d
+++ b/ld/testsuite/ld-frv/tls-relax-shared-3.d
@@ -22,6 +22,6 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/ld/testsuite/ld-frv/tls-relax-static-3.d b/ld/testsuite/ld-frv/tls-relax-static-3.d
index f4ce45f91d3c..ed3c07a00f99 100644
--- a/ld/testsuite/ld-frv/tls-relax-static-3.d
+++ b/ld/testsuite/ld-frv/tls-relax-static-3.d
@@ -22,5 +22,5 @@ Disassembly of section \.text:
100c0: 92 fc 00 00 setlos lo\(0x0\),gr9
Disassembly of section \.got:
-000140c8 <_GLOBAL_OFFSET_TABLE_>:
+000140c8 <(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
diff --git a/ld/testsuite/ld-frv/tls-shared-1.d b/ld/testsuite/ld-frv/tls-shared-1.d
index 03fe411c92b4..2a29ba571bc4 100644
--- a/ld/testsuite/ld-frv/tls-shared-1.d
+++ b/ld/testsuite/ld-frv/tls-shared-1.d
@@ -62,7 +62,7 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 c8 f0 18 ldi @\(gr15,24\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0
[0-9a-f ]+: R_FRV_TLSOFF \.tbss
diff --git a/ld/testsuite/ld-frv/tls-shared-2.d b/ld/testsuite/ld-frv/tls-shared-2.d
index b622ad485326..bd92cdb951f8 100644
--- a/ld/testsuite/ld-frv/tls-shared-2.d
+++ b/ld/testsuite/ld-frv/tls-shared-2.d
@@ -151,7 +151,7 @@ Disassembly of section \.text:
[0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\)
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x60>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_-0x60)>:
[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
[0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss
[0-9a-f ]+: 00 00 17 f3 \*unknown\*
diff --git a/ld/testsuite/ld-frv/tls-shared-3.d b/ld/testsuite/ld-frv/tls-shared-3.d
index dc2d69344b91..c4eed38035b7 100644
--- a/ld/testsuite/ld-frv/tls-shared-3.d
+++ b/ld/testsuite/ld-frv/tls-shared-3.d
@@ -22,6 +22,6 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 c8 f0 0c ldi @\(gr15,12\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/ld/testsuite/ld-frv/tls-static-1.d b/ld/testsuite/ld-frv/tls-static-1.d
index 0eeb21d6d48c..d33d8cf99f7a 100644
--- a/ld/testsuite/ld-frv/tls-static-1.d
+++ b/ld/testsuite/ld-frv/tls-static-1.d
@@ -62,7 +62,7 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
[0-9a-f ]+: ff ff f8 30 cop2 -32,cpr63,cpr48,cpr63
[0-9a-f ]+: ff ff f8 10 cop2 -32,cpr63,cpr16,cpr63
diff --git a/ld/testsuite/ld-frv/tls-static-3.d b/ld/testsuite/ld-frv/tls-static-3.d
index 7a6bea980aa9..e761cc8f856d 100644
--- a/ld/testsuite/ld-frv/tls-static-3.d
+++ b/ld/testsuite/ld-frv/tls-static-3.d
@@ -22,5 +22,5 @@ Disassembly of section \.text:
[0-9a-f ]+: 92 fc 00 00 setlos lo\(0x0\),gr9
Disassembly of section \.got:
-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>:
+[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_)>:
\.\.\.
diff --git a/ld/testsuite/ld-i386/alloc.d b/ld/testsuite/ld-i386/alloc.d
new file mode 100644
index 000000000000..c2b22f2e0046
--- /dev/null
+++ b/ld/testsuite/ld-i386/alloc.d
@@ -0,0 +1,4 @@
+#name: Invalid allocated section
+#as: --32
+#ld: -melf_i386 -T alloc.t
+#error: .*section `.foo' can't be allocated in segment 0.*
diff --git a/ld/testsuite/ld-i386/alloc.s b/ld/testsuite/ld-i386/alloc.s
new file mode 100644
index 000000000000..8c4f8fa1961c
--- /dev/null
+++ b/ld/testsuite/ld-i386/alloc.s
@@ -0,0 +1,6 @@
+ .section .bar,"ax","progbits"
+ .byte 0
+ .section .foo,"aw","progbits"
+ .byte 0
+ .bss
+ .long 0
diff --git a/ld/testsuite/ld-i386/alloc.t b/ld/testsuite/ld-i386/alloc.t
new file mode 100644
index 000000000000..ea7f48c5b004
--- /dev/null
+++ b/ld/testsuite/ld-i386/alloc.t
@@ -0,0 +1,13 @@
+OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
+OUTPUT_ARCH(i386)
+PHDRS {
+ text PT_LOAD FLAGS(5); /* R_E */
+}
+SECTIONS
+{
+ . = 0xC0000000 + ((0x100000 + (0x100000 - 1)) & ~(0x100000 - 1));
+ .bar : AT(ADDR(.bar) - 0xC0000000) { *(.bar) } :text
+ .bss : AT(ADDR(.bss) - 0xC0000000) { *(.bss) }
+ .foo 0 : AT(ADDR(.bss) + SIZEOF(.bss) - 0xC0000000) { *(.foo) } :text
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-i386/combreloc.d b/ld/testsuite/ld-i386/combreloc.d
index a6f482d9c2f7..bbe91341b5ab 100644
--- a/ld/testsuite/ld-i386/combreloc.d
+++ b/ld/testsuite/ld-i386/combreloc.d
@@ -4,7 +4,6 @@
#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
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index ad8a6106761e..989d392f185d 100644
--- a/ld/testsuite/ld-i386/i386.exp
+++ b/ld/testsuite/ld-i386/i386.exp
@@ -24,7 +24,7 @@ if {[istarget "i?86-*-vxworks"]} {
{"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
"" {vxworks1-lib.s}
{{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
- {readelf --symbols vxworks1-lib.nd}}
+ {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
"libvxworks1.so"}
{"VxWorks executable test 1 (dynamic)" \
"tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
@@ -113,3 +113,6 @@ run_ld_link_tests $i386tests
run_dump_test "abs"
run_dump_test "pcrel8"
run_dump_test "pcrel16"
+run_dump_test "pcrel16abs"
+run_dump_test "alloc"
+run_dump_test "warn1"
diff --git a/ld/testsuite/ld-i386/pcrel16abs.d b/ld/testsuite/ld-i386/pcrel16abs.d
new file mode 100644
index 000000000000..f4bfca561a1c
--- /dev/null
+++ b/ld/testsuite/ld-i386/pcrel16abs.d
@@ -0,0 +1,12 @@
+#name: PCREL16 absolute reloc
+#as: --32
+#ld: -melf_i386 -Ttext 0xfffffff0
+#objdump: -drj.text -m i8086
+
+.*: +file format elf32-i386
+
+Disassembly of section .text:
+
+f+0 <_start>:
+f+0: e9 0d e0[ ]+jmp[ ]+ffffe000 <SEGMENT_SIZE\+0xfffee000>
+#pass
diff --git a/ld/testsuite/ld-i386/pcrel16abs.s b/ld/testsuite/ld-i386/pcrel16abs.s
new file mode 100644
index 000000000000..4bf68a7ddc13
--- /dev/null
+++ b/ld/testsuite/ld-i386/pcrel16abs.s
@@ -0,0 +1,6 @@
+SEGMENT_SIZE = 0x10000
+RVECTOR = 0x00010
+.code16
+ .globl _start
+_start:
+ jmp SEGMENT_SIZE-(0x1f00 +0xf0 +RVECTOR)
diff --git a/ld/testsuite/ld-i386/reloc.d b/ld/testsuite/ld-i386/reloc.d
index 9e8faa419cae..e559e53f4ed1 100644
--- a/ld/testsuite/ld-i386/reloc.d
+++ b/ld/testsuite/ld-i386/reloc.d
@@ -4,7 +4,6 @@
#as: --32
#ld: -shared -melf_i386 -z nocombreloc
#objdump: -hw
-#target: i?86-*-*
.*: +file format elf32-i386
#...
diff --git a/ld/testsuite/ld-i386/tlsbin.dd b/ld/testsuite/ld-i386/tlsbin.dd
index 08a1f3143f58..0e3ef4d9484b 100644
--- a/ld/testsuite/ld-i386/tlsbin.dd
+++ b/ld/testsuite/ld-i386/tlsbin.dd
@@ -32,7 +32,7 @@ Disassembly of section .text:
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
+ 804901b: 2b 83 f8 ff ff ff[ ]+sub -0x8\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sG1
8049021: 90[ ]+nop *
8049022: 90[ ]+nop *
@@ -41,7 +41,7 @@ Disassembly of section .text:
# 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
+ 804902b: 2b 83 e8 ff ff ff[ ]+sub -0x18\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sG2
8049031: 90[ ]+nop *
8049032: 90[ ]+nop *
@@ -50,7 +50,7 @@ Disassembly of section .text:
# 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
+ 804903b: 03 83 dc ff ff ff[ ]+add -0x24\(%ebx\),%eax
# ->R_386_TLS_TPOFF sG3
8049041: 90[ ]+nop *
8049042: 90[ ]+nop *
@@ -59,7 +59,7 @@ Disassembly of section .text:
# 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
+ 804904b: 2b 83 ec ff ff ff[ ]+sub -0x14\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sG4
8049051: 90[ ]+nop *
8049052: 90[ ]+nop *
@@ -95,11 +95,11 @@ Disassembly of section .text:
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
+ 8049092: 8d 90 20 f0 ff ff[ ]+lea -0xfe0\(%eax\),%edx
# sl1
8049098: 90[ ]+nop *
8049099: 90[ ]+nop *
- 804909a: 8d 88 24 f0 ff ff[ ]+lea 0xfffff024\(%eax\),%ecx
+ 804909a: 8d 88 24 f0 ff ff[ ]+lea -0xfdc\(%eax\),%ecx
# sl2
80490a0: 90[ ]+nop *
80490a1: 90[ ]+nop *
@@ -111,11 +111,11 @@ Disassembly of section .text:
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
+ 80490b1: 8d 90 40 f0 ff ff[ ]+lea -0xfc0\(%eax\),%edx
# sh1
80490b7: 90[ ]+nop *
80490b8: 90[ ]+nop *
- 80490b9: 8d 88 44 f0 ff ff[ ]+lea 0xfffff044\(%eax\),%ecx
+ 80490b9: 8d 88 44 f0 ff ff[ ]+lea -0xfbc\(%eax\),%ecx
# sh2
80490bf: 90[ ]+nop *
80490c0: 90[ ]+nop *
@@ -125,7 +125,7 @@ Disassembly of section .text:
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
+ 80490cc: 2b 8b e8 ff ff ff[ ]+sub -0x18\(%ebx\),%ecx
# ->R_386_TLS_TPOFF32 sG2
80490d2: 90[ ]+nop *
80490d3: 90[ ]+nop *
@@ -135,7 +135,7 @@ Disassembly of section .text:
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
+ 80490de: 2b 83 ec ff ff ff[ ]+sub -0x14\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sG4
80490e4: 90[ ]+nop *
80490e5: 90[ ]+nop *
@@ -145,7 +145,7 @@ Disassembly of section .text:
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
+ 80490f1: 03 8b dc ff ff ff[ ]+add -0x24\(%ebx\),%ecx
# ->R_386_TLS_TPOFF sG3
80490f7: 90[ ]+nop *
80490f8: 90[ ]+nop *
@@ -155,7 +155,7 @@ Disassembly of section .text:
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
+ 8049103: 03 83 f0 ff ff ff[ ]+add -0x10\(%ebx\),%eax
# ->R_386_TLS_TPOFF sG4
8049109: 90[ ]+nop *
804910a: 90[ ]+nop *
@@ -193,7 +193,7 @@ Disassembly of section .text:
8049145: 90[ ]+nop *
# Direct access through %gs
# @gotntpoff IE against global var
- 8049146: 8b 8b e0 ff ff ff[ ]+mov 0xffffffe0\(%ebx\),%ecx
+ 8049146: 8b 8b e0 ff ff ff[ ]+mov -0x20\(%ebx\),%ecx
# ->R_386_TLS_TPOFF sG5
804914c: 90[ ]+nop *
804914d: 90[ ]+nop *
@@ -222,7 +222,7 @@ Disassembly of section .text:
8049170: 90[ ]+nop *
8049171: 90[ ]+nop *
8049172: 90[ ]+nop *
- 8049173: 8b 5d fc[ ]+mov 0xfffffffc\(%ebp\),%ebx
+ 8049173: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
8049176: c9[ ]+leave *
8049177: c3[ ]+ret *
@@ -240,7 +240,7 @@ Disassembly of section .text:
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
+ 8049194: 2b 91 f4 ff ff ff[ ]+sub -0xc\(%ecx\),%edx
# ->R_386_TLS_TPOFF32 sG6
804919a: 90[ ]+nop *
804919b: 90[ ]+nop *
@@ -401,7 +401,7 @@ Disassembly of section .text:
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
+ 80492a4: 8d 90 04 f0 ff ff[ ]+lea -0xffc\(%eax\),%edx
# sg2
80492aa: 90[ ]+nop *
80492ab: 90[ ]+nop *
@@ -451,6 +451,6 @@ Disassembly of section .text:
80492f4: 90[ ]+nop *
80492f5: 90[ ]+nop *
80492f6: 90[ ]+nop *
- 80492f7: 8b 5d fc[ ]+mov 0xfffffffc\(%ebp\),%ebx
+ 80492f7: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
80492fa: c9[ ]+leave *
80492fb: c3[ ]+ret *
diff --git a/ld/testsuite/ld-i386/tlsbin.rd b/ld/testsuite/ld-i386/tlsbin.rd
index b48562608404..54abd8bdbf6f 100644
--- a/ld/testsuite/ld-i386/tlsbin.rd
+++ b/ld/testsuite/ld-i386/tlsbin.rd
@@ -70,7 +70,7 @@ 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:
+Symbol table '.dynsym' contains [0-9]+ entries:
+Num: +Value Size Type +Bind +Vis +Ndx Name
+[0-9]+: 0+ +0 NOTYPE LOCAL DEFAULT UND *
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG3
@@ -86,7 +86,7 @@ Symbol table '.dynsym' contains 13 entries:
+[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:
+Symbol table '.symtab' contains 70 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 *
@@ -102,9 +102,6 @@ Symbol table '.symtab' contains 73 entries:
+[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
diff --git a/ld/testsuite/ld-i386/tlsbindesc.dd b/ld/testsuite/ld-i386/tlsbindesc.dd
index 071a5b320427..00e164f3e297 100644
--- a/ld/testsuite/ld-i386/tlsbindesc.dd
+++ b/ld/testsuite/ld-i386/tlsbindesc.dd
@@ -31,7 +31,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 f8 ff ff ff[ ]+mov -0x8\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sG1
[0-9a-f]+: f7 d8[ ]+neg %eax
[0-9a-f]+: 90[ ]+nop *
@@ -40,7 +40,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 e8 ff ff ff[ ]+mov -0x18\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sG2
[0-9a-f]+: f7 d8[ ]+neg %eax
[0-9a-f]+: 90[ ]+nop *
@@ -49,20 +49,18 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 dc ff ff ff[ ]+mov -0x24\(%ebx\),%eax
# ->R_386_TLS_TPOFF sG3
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD -> IE because variable is not defined in executable where
# the variable is referenced through @gottpoff and @gotntpoff too
- [0-9a-f]+: 8b 83 f0 ff ff ff[ ]+mov 0xfffffff0\(%ebx\),%eax
+ [0-9a-f]+: 8b 83 f0 ff ff ff[ ]+mov -0x10\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sG4
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -70,8 +68,7 @@ Disassembly of section .text:
# 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]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -79,8 +76,7 @@ Disassembly of section .text:
# 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]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -88,23 +84,21 @@ Disassembly of section .text:
# 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]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# LD -> LE
[0-9a-f]+: 8d 05 00 f0 ff ff[ ]+lea 0xfffff000,%eax
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 8d 90 20 f0 ff ff[ ]+lea 0xfffff020\(%eax\),%edx
+ [0-9a-f]+: 8d 90 20 f0 ff ff[ ]+lea -0xfe0\(%eax\),%edx
# sl1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 8d 88 24 f0 ff ff[ ]+lea 0xfffff024\(%eax\),%ecx
+ [0-9a-f]+: 8d 88 24 f0 ff ff[ ]+lea -0xfdc\(%eax\),%ecx
# sl2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -112,15 +106,14 @@ Disassembly of section .text:
[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]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 8d 90 40 f0 ff ff[ ]+lea 0xfffff040\(%eax\),%edx
+ [0-9a-f]+: 8d 90 40 f0 ff ff[ ]+lea -0xfc0\(%eax\),%edx
# sh1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 8d 88 44 f0 ff ff[ ]+lea 0xfffff044\(%eax\),%ecx
+ [0-9a-f]+: 8d 88 44 f0 ff ff[ ]+lea -0xfbc\(%eax\),%ecx
# sh2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -130,7 +123,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 8b e8 ff ff ff[ ]+sub -0x18\(%ebx\),%ecx
# ->R_386_TLS_TPOFF32 sG2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -140,7 +133,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 ec ff ff ff[ ]+sub -0x14\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sG4
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -150,7 +143,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 8b dc ff ff ff[ ]+add -0x24\(%ebx\),%ecx
# ->R_386_TLS_TPOFF sG3
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -160,7 +153,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 f0 ff ff ff[ ]+add -0x10\(%ebx\),%eax
# ->R_386_TLS_TPOFF sG4
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -198,7 +191,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 8b e0 ff ff ff[ ]+mov -0x20\(%ebx\),%ecx
# ->R_386_TLS_TPOFF sG5
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -227,7 +220,7 @@ Disassembly of section .text:
[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]+: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
[0-9a-f]+: c9[ ]+leave *
[0-9a-f]+: c3[ ]+ret *
[0-9a-f]+: 90[ ]+nop *
@@ -247,7 +240,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 91 f4 ff ff ff[ ]+sub -0xc\(%ecx\),%edx
# ->R_386_TLS_TPOFF32 sG6
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -408,7 +401,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8d 90 04 f0 ff ff[ ]+lea -0xffc\(%eax\),%edx
# sg2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -458,6 +451,6 @@ Disassembly of section .text:
[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]+: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
[0-9a-f]+: c9[ ]+leave *
[0-9a-f]+: c3[ ]+ret *
diff --git a/ld/testsuite/ld-i386/tlsbindesc.rd b/ld/testsuite/ld-i386/tlsbindesc.rd
index 27d0670c9934..65b47a2181b1 100644
--- a/ld/testsuite/ld-i386/tlsbindesc.rd
+++ b/ld/testsuite/ld-i386/tlsbindesc.rd
@@ -64,7 +64,7 @@ Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 9 entries:
0+804a0fc 00000825 R_386_TLS_TPOFF32 0+ +sG1
0+804a100 00000b0e R_386_TLS_TPOFF +0+ +sG8
-Symbol table '.dynsym' contains 12 entries:
+Symbol table '.dynsym' contains [0-9]+ entries:
+Num: +Value Size Type +Bind +Vis +Ndx Name
+[0-9]+: 0+ +0 NOTYPE LOCAL DEFAULT UND *
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG3
@@ -79,7 +79,7 @@ Symbol table '.dynsym' contains 12 entries:
+[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:
+Symbol table '.symtab' contains 68 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 *
@@ -93,9 +93,6 @@ Symbol table '.symtab' contains 71 entries:
+[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
diff --git a/ld/testsuite/ld-i386/tlsdesc.dd b/ld/testsuite/ld-i386/tlsdesc.dd
index 666f790cc235..bca00901b97e 100644
--- a/ld/testsuite/ld-i386/tlsdesc.dd
+++ b/ld/testsuite/ld-i386/tlsdesc.dd
@@ -30,7 +30,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 f8 ff ff ff[ ]+mov -0x8\(%ebx\),%eax
# ->R_386_TLS_TPOFF sg2
[0-9a-f]+: f7 d8[ ]+neg %eax
[0-9a-f]+: 90[ ]+nop *
@@ -38,19 +38,17 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 c4 ff ff ff[ ]+mov -0x3c\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sg3
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD -> IE because variable is referenced through @gottpoff and
- [0-9a-f]+: 8b 83 d4 ff ff ff[ ]+mov 0xffffffd4\(%ebx\),%eax
+ [0-9a-f]+: 8b 83 d4 ff ff ff[ ]+mov -0x2c\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sg4
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -64,7 +62,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 b0 ff ff ff[ ]+mov -0x50\(%ebx\),%eax
# ->R_386_TLS_TPOFF sl2
[0-9a-f]+: f7 d8[ ]+neg %eax
[0-9a-f]+: 90[ ]+nop *
@@ -72,19 +70,17 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 b4 ff ff ff[ ]+mov -0x4c\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sl3
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD -> IE against local variable referenced through @gottpoff and
- [0-9a-f]+: 8b 83 bc ff ff ff[ ]+mov 0xffffffbc\(%ebx\),%eax
+ [0-9a-f]+: 8b 83 bc ff ff ff[ ]+mov -0x44\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sl4
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -98,7 +94,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 fc ff ff ff[ ]+mov -0x4\(%ebx\),%eax
# ->R_386_TLS_TPOFF sh2
[0-9a-f]+: f7 d8[ ]+neg %eax
[0-9a-f]+: 90[ ]+nop *
@@ -106,19 +102,17 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 c8 ff ff ff[ ]+mov -0x38\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sh3
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD -> IE against hidden and local variable referenced through @gottpoff and @gotntpoff too
- [0-9a-f]+: 8b 83 e8 ff ff ff[ ]+mov 0xffffffe8\(%ebx\),%eax
+ [0-9a-f]+: 8b 83 e8 ff ff ff[ ]+mov -0x18\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sh4
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -132,7 +126,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 cc ff ff ff[ ]+mov -0x34\(%ebx\),%eax
# ->R_386_TLS_TPOFF sH2
[0-9a-f]+: f7 d8[ ]+neg %eax
[0-9a-f]+: 90[ ]+nop *
@@ -140,19 +134,17 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 ec ff ff ff[ ]+mov -0x14\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sH3
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD -> IE against hidden but not local variable referenced through
- [0-9a-f]+: 8b 83 e0 ff ff ff[ ]+mov 0xffffffe0\(%ebx\),%eax
+ [0-9a-f]+: 8b 83 e0 ff ff ff[ ]+mov -0x20\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sH4
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -197,7 +189,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 8b f8 ff ff ff[ ]+sub -0x8\(%ebx\),%ecx
# ->R_386_TLS_TPOFF32 sg2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -207,7 +199,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 d0 ff ff ff[ ]+sub -0x30\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sg4
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -217,7 +209,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 8b c4 ff ff ff[ ]+add -0x3c\(%ebx\),%ecx
# ->R_386_TLS_TPOFF sg3
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -227,7 +219,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 d4 ff ff ff[ ]+add -0x2c\(%ebx\),%eax
# ->R_386_TLS_TPOFF sg4
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -237,7 +229,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 8b b0 ff ff ff[ ]+sub -0x50\(%ebx\),%ecx
# ->R_386_TLS_TPOFF32 [0xdcffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -247,7 +239,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 b8 ff ff ff[ ]+sub -0x48\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 [0xd4ffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -257,7 +249,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 8b b4 ff ff ff[ ]+add -0x4c\(%ebx\),%ecx
# ->R_386_TLS_TPOFF [0x28000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -267,7 +259,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 bc ff ff ff[ ]+add -0x44\(%ebx\),%eax
# ->R_386_TLS_TPOFF [0x2c000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -277,7 +269,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 8b fc ff ff ff[ ]+sub -0x4\(%ebx\),%ecx
# ->R_386_TLS_TPOFF32 [0xbcffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -287,7 +279,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 e4 ff ff ff[ ]+sub -0x1c\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 [0xb4ffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -297,7 +289,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 8b c8 ff ff ff[ ]+add -0x38\(%ebx\),%ecx
# ->R_386_TLS_TPOFF [0x48000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -307,7 +299,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 e8 ff ff ff[ ]+add -0x18\(%ebx\),%eax
# ->R_386_TLS_TPOFF [0x4c000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -317,7 +309,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 8b cc ff ff ff[ ]+sub -0x34\(%ebx\),%ecx
# ->R_386_TLS_TPOFF32 [0x9cffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -327,7 +319,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 dc ff ff ff[ ]+sub -0x24\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 [0x94ffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -337,7 +329,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 8b ec ff ff ff[ ]+add -0x14\(%ebx\),%ecx
# ->R_386_TLS_TPOFF [0x68000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -347,7 +339,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 e0 ff ff ff[ ]+add -0x20\(%ebx\),%eax
# ->R_386_TLS_TPOFF [0x6c000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -355,7 +347,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 8b d8 ff ff ff[ ]+mov -0x28\(%ebx\),%ecx
# ->R_386_TLS_TPOFF sg5
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -365,7 +357,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 c0 ff ff ff[ ]+mov -0x40\(%ebx\),%eax
# ->R_386_TLS_TPOFF [0x30000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -375,7 +367,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 93 f0 ff ff ff[ ]+mov -0x10\(%ebx\),%edx
# ->R_386_TLS_TPOFF [0x50000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -385,7 +377,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 8b f4 ff ff ff[ ]+mov -0xc\(%ebx\),%ecx
# ->R_386_TLS_TPOFF [0x70000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -394,6 +386,6 @@ Disassembly of section .text:
[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]+: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
[0-9a-f]+: c9[ ]+leave *
[0-9a-f]+: c3[ ]+ret *
diff --git a/ld/testsuite/ld-i386/tlsdesc.rd b/ld/testsuite/ld-i386/tlsdesc.rd
index 12fd5d4236bd..aca162cdebaf 100644
--- a/ld/testsuite/ld-i386/tlsdesc.rd
+++ b/ld/testsuite/ld-i386/tlsdesc.rd
@@ -49,41 +49,38 @@ Program Headers:
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
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF *
+[0-9a-f ]+R_386_TLS_TPOFF32
+[0-9a-f ]+R_386_TLS_TPOFF 0+8 sg3
+[0-9a-f ]+R_386_TLS_TPOFF32 0+c sg4
+[0-9a-f ]+R_386_TLS_TPOFF 0+c sg4
+[0-9a-f ]+R_386_TLS_TPOFF 0+10 sg5
+[0-9a-f ]+R_386_TLS_TPOFF32 0+4 sg2
Relocation section '.rel.plt' at offset 0x[0-9a-f]+ contains 5 entries:
Offset Info Type Sym.Value Sym. Name
-[0-9a-f]+ +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 *
+[0-9a-f ]+R_386_TLS_DESC * 0+ sg1
+[0-9a-f ]+R_386_TLS_DESC *
+[0-9a-f ]+R_386_TLS_DESC *
+[0-9a-f ]+R_386_TLS_DESC *
+[0-9a-f ]+R_386_TLS_DESC *
-Symbol table '.dynsym' contains 16 entries:
+Symbol table '.dynsym' contains [0-9]+ entries:
+Num: + Value Size Type + Bind +Vis +Ndx Name
+[0-9]+: 0+ +0 NOTYPE LOCAL DEFAULT UND *
- +[0-9]+: [0-9a-f]+ +0 SECTION LOCAL DEFAULT +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
@@ -97,7 +94,7 @@ Symbol table '.dynsym' contains 16 entries:
+[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:
+Symbol table '.symtab' contains 51 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 *
@@ -111,9 +108,6 @@ Symbol table '.symtab' contains 54 entries:
+[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
diff --git a/ld/testsuite/ld-i386/tlsdesc.sd b/ld/testsuite/ld-i386/tlsdesc.sd
index 2af8c2d3df17..656c40971461 100644
--- a/ld/testsuite/ld-i386/tlsdesc.sd
+++ b/ld/testsuite/ld-i386/tlsdesc.sd
@@ -14,7 +14,7 @@ Contents of section \.got:
[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]+ b0150000 00000000 00000000 00000000 .*
[0-9a-f]+ 20000000 00000000 60000000 00000000 .*
[0-9a-f]+ 00000000 00000000 00000000 00000000 .*
[0-9a-f]+ 40000000 +.*
diff --git a/ld/testsuite/ld-i386/tlsgdesc.dd b/ld/testsuite/ld-i386/tlsgdesc.dd
index ca4092ea8438..25659de28339 100644
--- a/ld/testsuite/ld-i386/tlsgdesc.dd
+++ b/ld/testsuite/ld-i386/tlsgdesc.dd
@@ -24,7 +24,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 8b e0 ff ff ff[ ]+sub -0x20\(%ebx\),%ecx
# ->R_386_TLS_TPOFF32 sG3
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -34,14 +34,14 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 8b f0 ff ff ff[ ]+add -0x10\(%ebx\),%ecx
# ->R_386_TLS_TPOFF sG4
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD
- [0-9a-f]+: 8d 04 1d f8 ff ff ff[ ]+lea 0xfffffff8\(,%ebx,1\),%eax
+ [0-9a-f]+: 8d 04 1d f8 ff ff ff[ ]+lea -0x8\(,%ebx,1\),%eax
# ->R_386_TLS_DTPMOD32 sG1
[0-9a-f]+: e8 a9 ff ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
# ->R_386_JUMP_SLOT ___tls_get_addr
@@ -63,7 +63,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8d 04 1d e8 ff ff ff[ ]+lea -0x18\(,%ebx,1\),%eax
# ->R_386_TLS_DTPMOD32 sG2
[0-9a-f]+: e8 81 ff ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
# ->R_386_JUMP_SLOT ___tls_get_addr
@@ -73,13 +73,13 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 e0 ff ff ff[ ]+sub -0x20\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sG3
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 8b 83 e0 ff ff ff[ ]+mov 0xffffffe0\(%ebx\),%eax
+ [0-9a-f]+: 8b 83 e0 ff ff ff[ ]+mov -0x20\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sG3
[0-9a-f]+: f7 d8[ ]+neg %eax
[0-9a-f]+: 90[ ]+nop *
@@ -87,16 +87,15 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 f0 ff ff ff[ ]+mov -0x10\(%ebx\),%eax
# ->R_386_TLS_TPOFF sG4
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
- [0-9a-f]+: 03 83 f0 ff ff ff[ ]+add 0xfffffff0\(%ebx\),%eax
+ [0-9a-f]+: 03 83 f0 ff ff ff[ ]+add -0x10\(%ebx\),%eax
# ->R_386_TLS_TPOFF sG4
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -104,22 +103,21 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 e4 ff ff ff[ ]+add -0x1c\(%ebx\),%eax
# ->R_386_TLS_TPOFF sG5
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 8b 83 e4 ff ff ff[ ]+mov 0xffffffe4\(%ebx\),%eax
+ [0-9a-f]+: 8b 83 e4 ff ff ff[ ]+mov -0x1c\(%ebx\),%eax
# ->R_386_TLS_TPOFF sG5
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD -> IE because variable is referenced through @gottpoff too
- [0-9a-f]+: 8b 83 f4 ff ff ff[ ]+mov 0xfffffff4\(%ebx\),%eax
+ [0-9a-f]+: 8b 83 f4 ff ff ff[ ]+mov -0xc\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sG6
[0-9a-f]+: f7 d8[ ]+neg %eax
[0-9a-f]+: 90[ ]+nop *
@@ -127,7 +125,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 f4 ff ff ff[ ]+sub -0xc\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sG6
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -137,7 +135,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 8b e4 ff ff ff[ ]+add -0x1c\(%ebx\),%ecx
# ->R_386_TLS_TPOFF sG5
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -147,12 +145,12 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 8b f4 ff ff ff[ ]+sub -0xc\(%ebx\),%ecx
# ->R_386_TLS_TPOFF32 sG6
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 8b 5d fc[ ]+mov 0xfffffffc\(%ebp\),%ebx
+ [0-9a-f]+: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
[0-9a-f]+: c9[ ]+leave *
[0-9a-f]+: c3[ ]+ret *
diff --git a/ld/testsuite/ld-i386/tlsgdesc.rd b/ld/testsuite/ld-i386/tlsgdesc.rd
index 9253d22cef1d..0c5c42514ef7 100644
--- a/ld/testsuite/ld-i386/tlsgdesc.rd
+++ b/ld/testsuite/ld-i386/tlsgdesc.rd
@@ -45,25 +45,24 @@ Program Headers:
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
+[0-9a-f ]+R_386_TLS_TPOFF32 0+ sG3
+[0-9a-f ]+R_386_TLS_TPOFF 0+ sG5
+[0-9a-f ]+R_386_TLS_DTPMOD3 0+ sG2
+[0-9a-f ]+R_386_TLS_DTPOFF3 0+ sG2
+[0-9a-f ]+R_386_TLS_TPOFF 0+ sG4
+[0-9a-f ]+R_386_TLS_TPOFF32 0+ sG6
+[0-9a-f ]+R_386_TLS_DTPMOD3 0+ sG1
+[0-9a-f ]+R_386_TLS_DTPOFF3 0+ sG1
Relocation section '.rel.plt' at offset 0x[0-9a-f]+ contains 3 entries:
Offset Info Type Sym.Value Sym. Name
-[0-9a-f]+ 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
+[0-9a-f ]+R_386_JUMP_SLOT 0+ ___tls_get_addr
+[0-9a-f ]+R_386_TLS_DESC 0+ sG1
+[0-9a-f ]+R_386_TLS_DESC 0+ sG2
-Symbol table '.dynsym' contains 13 entries:
+Symbol table '.dynsym' contains [0-9]+ entries:
+Num: + Value Size Type + Bind +Vis +Ndx Name
+[0-9]+: 0+ +0 NOTYPE LOCAL DEFAULT UND *
- +[0-9]+: [0-9a-f]+ +0 SECTION LOCAL DEFAULT +7 *
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG3
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG5
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG2
@@ -76,7 +75,7 @@ Symbol table '.dynsym' contains 13 entries:
+[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:
+Symbol table '.symtab' contains 24 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 *
@@ -89,9 +88,6 @@ Symbol table '.symtab' contains 27 entries:
+[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
diff --git a/ld/testsuite/ld-i386/tlsnopic.dd b/ld/testsuite/ld-i386/tlsnopic.dd
index ddac1e231e31..a0a8853f2cef 100644
--- a/ld/testsuite/ld-i386/tlsnopic.dd
+++ b/ld/testsuite/ld-i386/tlsnopic.dd
@@ -153,7 +153,7 @@ Disassembly of section .text:
10e9: 90[ ]+nop *
10ea: 90[ ]+nop *
10eb: 90[ ]+nop *
- 10ec: 8b 5d fc[ ]+mov 0xfffffffc\(%ebp\),%ebx
+ 10ec: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
10ef: c9[ ]+leave *
10f0: c3[ ]+ret *
10f1: 90[ ]+nop *
diff --git a/ld/testsuite/ld-i386/tlsnopic.rd b/ld/testsuite/ld-i386/tlsnopic.rd
index d8dcc66357fb..6ba628b4dac4 100644
--- a/ld/testsuite/ld-i386/tlsnopic.rd
+++ b/ld/testsuite/ld-i386/tlsnopic.rd
@@ -69,11 +69,9 @@ Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 20 entries:
[0-9a-f ]+R_386_TLS_TPOFF 0+ sg2
-Symbol table '.dynsym' contains 12 entries:
+Symbol table '.dynsym' contains [0-9]+ entries:
+Num: +Value Size Type +Bind +Vis +Ndx Name
+[0-9]+: 0+ +0 NOTYPE LOCAL DEFAULT UND *
- +[0-9]+: [0-9a-f]+ +0 SECTION LOCAL DEFAULT +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
@@ -84,7 +82,7 @@ Symbol table '.dynsym' contains 12 entries:
+[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:
+Symbol table '.symtab' contains 30 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 *
@@ -96,9 +94,6 @@ Symbol table '.symtab' contains 33 entries:
+[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
diff --git a/ld/testsuite/ld-i386/tlspic.dd b/ld/testsuite/ld-i386/tlspic.dd
index 98fcf0114772..dd436d2f8d4a 100644
--- a/ld/testsuite/ld-i386/tlspic.dd
+++ b/ld/testsuite/ld-i386/tlspic.dd
@@ -22,7 +22,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8d 04 1d d4 ff ff ff[ ]+lea -0x2c\(,%ebx,1\),%eax
# ->R_386_TLS_DTPMOD32 sg1
[0-9a-f]+: e8 cf ff ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
# ->R_386_JUMP_SLOT ___tls_get_addr
@@ -32,7 +32,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 f0 ff ff ff[ ]+sub -0x10\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sg2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -40,7 +40,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 b4 ff ff ff[ ]+add -0x4c\(%ebx\),%eax
# ->R_386_TLS_TPOFF sg3
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -48,14 +48,14 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 c0 ff ff ff[ ]+sub -0x40\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sg4
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD against local variable
- [0-9a-f]+: 8d 04 1d 88 ff ff ff[ ]+lea 0xffffff88\(,%ebx,1\),%eax
+ [0-9a-f]+: 8d 04 1d 88 ff ff ff[ ]+lea -0x78\(,%ebx,1\),%eax
# ->R_386_TLS_DTPMOD32 [0x00000000 0x20000000]
[0-9a-f]+: e8 8f ff ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
# ->R_386_JUMP_SLOT ___tls_get_addr
@@ -65,7 +65,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 90 ff ff ff[ ]+sub -0x70\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 [0xdcffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -73,7 +73,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 94 ff ff ff[ ]+add -0x6c\(%ebx\),%eax
# ->R_386_TLS_TPOFF [0x28000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -81,14 +81,14 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 98 ff ff ff[ ]+sub -0x68\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 [0xd4ffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD against hidden and local variable
- [0-9a-f]+: 8d 04 1d f4 ff ff ff[ ]+lea 0xfffffff4\(,%ebx,1\),%eax
+ [0-9a-f]+: 8d 04 1d f4 ff ff ff[ ]+lea -0xc\(,%ebx,1\),%eax
# ->R_386_TLS_DTPMOD32 [0x00000000 0x40000000]
[0-9a-f]+: e8 4f ff ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
# ->R_386_JUMP_SLOT ___tls_get_addr
@@ -98,7 +98,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 fc ff ff ff[ ]+sub -0x4\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 [0xbcffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -106,7 +106,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 b8 ff ff ff[ ]+add -0x48\(%ebx\),%eax
# ->R_386_TLS_TPOFF [0x48000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -114,14 +114,14 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 dc ff ff ff[ ]+sub -0x24\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 [0xb4ffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD against hidden but not local variable
- [0-9a-f]+: 8d 04 1d ac ff ff ff[ ]+lea 0xffffffac\(,%ebx,1\),%eax
+ [0-9a-f]+: 8d 04 1d ac ff ff ff[ ]+lea -0x54\(,%ebx,1\),%eax
# ->R_386_TLS_DTPMOD32 [0x00000000 0x60000000]
[0-9a-f]+: e8 0f ff ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
# ->R_386_JUMP_SLOT ___tls_get_addr
@@ -131,7 +131,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 bc ff ff ff[ ]+sub -0x44\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 [0x9cffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -139,7 +139,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 e4 ff ff ff[ ]+add -0x1c\(%ebx\),%eax
# ->R_386_TLS_TPOFF [0x68000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -147,14 +147,14 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 cc ff ff ff[ ]+sub -0x34\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 [0x94ffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# LD
- [0-9a-f]+: 8d 83 a4 ff ff ff[ ]+lea 0xffffffa4\(%ebx\),%eax
+ [0-9a-f]+: 8d 83 a4 ff ff ff[ ]+lea -0x5c\(%ebx\),%eax
# ->R_386_TLS_DTPMOD32 [0x00000000 0x00000000]
[0-9a-f]+: e8 d0 fe ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
# ->R_386_JUMP_SLOT ___tls_get_addr
@@ -171,7 +171,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8d 83 a4 ff ff ff[ ]+lea -0x5c\(%ebx\),%eax
# ->R_386_TLS_DTPMOD32 [0x00000000 0x00000000]
[0-9a-f]+: e8 b1 fe ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
# ->R_386_JUMP_SLOT ___tls_get_addr
@@ -188,7 +188,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8d 83 a4 ff ff ff[ ]+lea -0x5c\(%ebx\),%eax
# ->R_386_TLS_DTPMOD32 [0x00000000 0x00000000]
[0-9a-f]+: e8 92 fe ff ff[ ]+call [0-9a-f]+ <___tls_get_addr@plt>
# ->R_386_JUMP_SLOT ___tls_get_addr
@@ -206,7 +206,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 8b f0 ff ff ff[ ]+sub -0x10\(%ebx\),%ecx
# ->R_386_TLS_TPOFF32 sg2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -216,7 +216,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 c0 ff ff ff[ ]+sub -0x40\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sg4
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -226,7 +226,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 8b b4 ff ff ff[ ]+add -0x4c\(%ebx\),%ecx
# ->R_386_TLS_TPOFF sg3
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -236,7 +236,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 c4 ff ff ff[ ]+add -0x3c\(%ebx\),%eax
# ->R_386_TLS_TPOFF sg4
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -246,7 +246,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 8b 90 ff ff ff[ ]+sub -0x70\(%ebx\),%ecx
# ->R_386_TLS_TPOFF32 [0xdcffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -256,7 +256,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 98 ff ff ff[ ]+sub -0x68\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 [0xd4ffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -266,7 +266,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 8b 94 ff ff ff[ ]+add -0x6c\(%ebx\),%ecx
# ->R_386_TLS_TPOFF [0x28000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -276,7 +276,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 9c ff ff ff[ ]+add -0x64\(%ebx\),%eax
# ->R_386_TLS_TPOFF [0x2c000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -286,7 +286,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 8b fc ff ff ff[ ]+sub -0x4\(%ebx\),%ecx
# ->R_386_TLS_TPOFF32 [0xbcffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -296,7 +296,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 dc ff ff ff[ ]+sub -0x24\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 [0xb4ffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -306,7 +306,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 8b b8 ff ff ff[ ]+add -0x48\(%ebx\),%ecx
# ->R_386_TLS_TPOFF [0x48000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -316,7 +316,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 e0 ff ff ff[ ]+add -0x20\(%ebx\),%eax
# ->R_386_TLS_TPOFF [0x4c000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -326,7 +326,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 8b bc ff ff ff[ ]+sub -0x44\(%ebx\),%ecx
# ->R_386_TLS_TPOFF32 [0x9cffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -336,7 +336,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 2b 83 cc ff ff ff[ ]+sub -0x34\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 [0x94ffffff]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -346,7 +346,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 8b e4 ff ff ff[ ]+add -0x1c\(%ebx\),%ecx
# ->R_386_TLS_TPOFF [0x68000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -356,7 +356,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 03 83 d0 ff ff ff[ ]+add -0x30\(%ebx\),%eax
# ->R_386_TLS_TPOFF [0x6c000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -364,7 +364,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 8b c8 ff ff ff[ ]+mov -0x38\(%ebx\),%ecx
# ->R_386_TLS_TPOFF sg5
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -374,7 +374,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 83 a0 ff ff ff[ ]+mov -0x60\(%ebx\),%eax
# ->R_386_TLS_TPOFF [0x30000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -384,7 +384,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 93 e8 ff ff ff[ ]+mov -0x18\(%ebx\),%edx
# ->R_386_TLS_TPOFF [0x50000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -394,7 +394,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 8b 8b ec ff ff ff[ ]+mov -0x14\(%ebx\),%ecx
# ->R_386_TLS_TPOFF [0x70000000]
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -403,7 +403,7 @@ Disassembly of section .text:
[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]+: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
[0-9a-f]+: c9[ ]+leave *
[0-9a-f]+: c3[ ]+ret *
[0-9a-f]+: 90[ ]+nop *
diff --git a/ld/testsuite/ld-i386/tlspic.rd b/ld/testsuite/ld-i386/tlspic.rd
index 890a4938efe0..c902cf37dd2c 100644
--- a/ld/testsuite/ld-i386/tlspic.rd
+++ b/ld/testsuite/ld-i386/tlspic.rd
@@ -81,12 +81,9 @@ 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:
+Symbol table '.dynsym' contains [0-9]+ entries:
+Num: +Value Size Type +Bind +Vis +Ndx Name
+[0-9]+: 0+ +0 NOTYPE LOCAL DEFAULT UND *
- +[0-9]+: [0-9a-f]+ +0 SECTION LOCAL DEFAULT +7 *
- +[0-9]+: [0-9a-f]+ +0 SECTION LOCAL DEFAULT +8 *
- +[0-9]+: [0-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
@@ -101,7 +98,7 @@ Symbol table '.dynsym' contains 17 entries:
+[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:
+Symbol table '.symtab' contains 52 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 *
@@ -116,9 +113,6 @@ Symbol table '.symtab' contains 55 entries:
+[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
diff --git a/ld/testsuite/ld-i386/vxworks1-lib.rd b/ld/testsuite/ld-i386/vxworks1-lib.rd
index ab567b6e72e5..61ff293874c4 100644
--- a/ld/testsuite/ld-i386/vxworks1-lib.rd
+++ b/ld/testsuite/ld-i386/vxworks1-lib.rd
@@ -6,7 +6,7 @@ Relocation section '\.rel\.plt' at offset .* contains 2 entries:
Relocation section '\.rel\.dyn' at offset .* contains 4 entries:
Offset Info Type Sym\.Value Sym\. Name
-00081c00 00000008 R_386_RELATIVE *
+00081800 00000008 R_386_RELATIVE *
00080c03 .*01 R_386_32 00000000 __GOTT_BASE__
00080c09 .*01 R_386_32 00000000 __GOTT_INDEX__
-00081414 .*06 R_386_GLOB_DAT 00081800 x
+00081414 .*06 R_386_GLOB_DAT 00081c00 x
diff --git a/ld/testsuite/ld-i386/vxworks1-lib.td b/ld/testsuite/ld-i386/vxworks1-lib.td
new file mode 100644
index 000000000000..9f223e38da16
--- /dev/null
+++ b/ld/testsuite/ld-i386/vxworks1-lib.td
@@ -0,0 +1,3 @@
+#...
+ 0x0+16 \(TEXTREL\) +0x0
+#pass
diff --git a/ld/testsuite/ld-i386/vxworks1.ld b/ld/testsuite/ld-i386/vxworks1.ld
index ff25b39a540a..ed76f185c2e5 100644
--- a/ld/testsuite/ld-i386/vxworks1.ld
+++ b/ld/testsuite/ld-i386/vxworks1.ld
@@ -23,8 +23,8 @@ SECTIONS
.got : { *(.got.plt) *(.got) }
. = ALIGN (0x400);
- .bss : { *(.bss) *(.dynbss) }
+ .data : { *(.data) }
. = ALIGN (0x400);
- .data : { *(.data) }
+ .bss : { *(.bss) *(.dynbss) }
}
diff --git a/ld/testsuite/ld-i386/warn1.d b/ld/testsuite/ld-i386/warn1.d
new file mode 100644
index 000000000000..dd541f25df91
--- /dev/null
+++ b/ld/testsuite/ld-i386/warn1.d
@@ -0,0 +1,4 @@
+#name: --warn-shared-textrel --fatal-warnings
+#as: --32
+#ld: -shared -melf_i386 --warn-shared-textrel --fatal-warnings
+#error: .*warning: creating a DT_TEXTREL in a shared object.
diff --git a/ld/testsuite/ld-i386/warn1.s b/ld/testsuite/ld-i386/warn1.s
new file mode 100644
index 000000000000..ca3481a48fb4
--- /dev/null
+++ b/ld/testsuite/ld-i386/warn1.s
@@ -0,0 +1,5 @@
+ .text
+ .globl foo
+ .type foo, @function
+foo:
+ movl bar, %eax
diff --git a/ld/testsuite/ld-ia64/merge1.d b/ld/testsuite/ld-ia64/merge1.d
new file mode 100644
index 000000000000..39882b8674fa
--- /dev/null
+++ b/ld/testsuite/ld-ia64/merge1.d
@@ -0,0 +1,10 @@
+#source: merge1.s
+#as: -x
+#ld: -shared
+#objdump: -d
+
+#...
+0+1e0 <.text>:
+[ ]*[a-f0-9]+: 0b 60 80 02 00 24 \[MMI\] addl r12=32,r1;;
+[ ]*[a-f0-9]+: c0 c0 04 00 48 00 addl r12=24,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
diff --git a/ld/testsuite/ld-ia64/merge1.s b/ld/testsuite/ld-ia64/merge1.s
new file mode 100644
index 000000000000..8998db43c7da
--- /dev/null
+++ b/ld/testsuite/ld-ia64/merge1.s
@@ -0,0 +1,12 @@
+ .section .rodata.str1.8,"aMS", 1
+.LC1: .string "foo"
+.LC2: .string "foo"
+ .section .data.rel.local,"aw"
+ .quad .LC2
+ .section .rodata,"a"
+.LC3: .string "bar"
+ .balign 8
+ .space 0x400000
+ .text
+ addl r12=@ltoffx(.LC1),r1 ;;
+ addl r12=@ltoffx(.LC3),r1 ;;
diff --git a/ld/testsuite/ld-ia64/merge2.d b/ld/testsuite/ld-ia64/merge2.d
new file mode 100644
index 000000000000..dde3d097d1ff
--- /dev/null
+++ b/ld/testsuite/ld-ia64/merge2.d
@@ -0,0 +1,10 @@
+#source: merge2.s
+#as: -x
+#ld: -shared
+#objdump: -d
+
+#...
+0+1e0 <.text>:
+[ ]*[a-f0-9]+: 0b 60 80 02 00 24 \[MMI\] addl r12=32,r1;;
+[ ]*[a-f0-9]+: c0 c0 04 00 48 00 addl r12=24,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
diff --git a/ld/testsuite/ld-ia64/merge2.s b/ld/testsuite/ld-ia64/merge2.s
new file mode 100644
index 000000000000..6c85ac2ee3eb
--- /dev/null
+++ b/ld/testsuite/ld-ia64/merge2.s
@@ -0,0 +1,12 @@
+ .section .rodata.str1.8,"aMS", 1
+.LC2: .string "foo"
+.LC1: .string "foo"
+ .section .data.rel.local,"aw"
+ .quad .LC2
+ .section .rodata,"a"
+.LC3: .string "bar"
+ .balign 8
+ .space 0x400000
+ .text
+ addl r12=@ltoffx(.LC1),r1 ;;
+ addl r12=@ltoffx(.LC3),r1 ;;
diff --git a/ld/testsuite/ld-ia64/merge3.d b/ld/testsuite/ld-ia64/merge3.d
new file mode 100644
index 000000000000..d0163f324585
--- /dev/null
+++ b/ld/testsuite/ld-ia64/merge3.d
@@ -0,0 +1,13 @@
+#source: merge3.s
+#as: -x
+#ld: -shared
+#objdump: -d
+
+#...
+0+210 <.text>:
+[ ]*[a-f0-9]+: 0b 60 80 02 00 24 \[MMI\] addl r12=32,r1;;
+[ ]*[a-f0-9]+: c0 40 05 00 48 00 addl r12=40,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
+[ ]*[a-f0-9]+: 01 60 60 02 00 24 \[MII\] addl r12=24,r1
+[ ]*[a-f0-9]+: 00 00 00 02 00 00 nop.i 0x0
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
diff --git a/ld/testsuite/ld-ia64/merge3.s b/ld/testsuite/ld-ia64/merge3.s
new file mode 100644
index 000000000000..2442701fc8b0
--- /dev/null
+++ b/ld/testsuite/ld-ia64/merge3.s
@@ -0,0 +1,16 @@
+ .section .rodata.str1.8,"aMS", 1
+.LC1: .string "foo"
+.LC2: .string "foo"
+.LC3: .string "bar"
+.LC4: .string "bar"
+ .section .data.rel.local,"aw"
+ .quad .LC2
+ .quad .LC3
+ .section .rodata,"a"
+.LC5: .string "mumble"
+ .balign 8
+ .space 0x400000
+ .text
+ addl r12=@ltoffx(.LC1),r1 ;;
+ addl r12=@ltoffx(.LC4),r1 ;;
+ addl r12=@ltoffx(.LC5),r1 ;;
diff --git a/ld/testsuite/ld-ia64/merge4.d b/ld/testsuite/ld-ia64/merge4.d
new file mode 100644
index 000000000000..0ed5621007d9
--- /dev/null
+++ b/ld/testsuite/ld-ia64/merge4.d
@@ -0,0 +1,13 @@
+#source: merge4.s
+#as: -x
+#ld: -shared
+#objdump: -d
+
+#...
+0+240 <.text>:
+[ ]*[a-f0-9]+: 0b 60 80 02 00 24 \[MMI\] addl r12=32,r1;;
+[ ]*[a-f0-9]+: c0 40 05 00 48 00 addl r12=40,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
+[ ]*[a-f0-9]+: 0b 60 c0 02 00 24 \[MMI\] addl r12=48,r1;;
+[ ]*[a-f0-9]+: c0 c0 04 00 48 00 addl r12=24,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
diff --git a/ld/testsuite/ld-ia64/merge4.s b/ld/testsuite/ld-ia64/merge4.s
new file mode 100644
index 000000000000..c23b4d0ea165
--- /dev/null
+++ b/ld/testsuite/ld-ia64/merge4.s
@@ -0,0 +1,21 @@
+ .section .rodata.str1.8,"aMS", 1
+.LC1: .string "foo"
+.LC2: .string "foo"
+.LC3: .string "bar"
+.LC4: .string "bar"
+.LC5: .string "baz"
+.LC6: .string "baz"
+ .section .data.rel.local,"aw"
+ .quad .LC2
+ .quad .LC4
+ .quad .LC5
+ .section .rodata,"a"
+.LC7: .string "mumble"
+ .balign 8
+ .space 0x400000
+ .text
+ addl r12=@ltoffx(.LC1),r1 ;;
+ addl r12=@ltoffx(.LC3),r1 ;;
+ addl r12=@ltoffx(.LC6),r1 ;;
+ addl r12=@ltoffx(.LC7),r1 ;;
+
diff --git a/ld/testsuite/ld-ia64/merge5.d b/ld/testsuite/ld-ia64/merge5.d
new file mode 100644
index 000000000000..3adfa55ca137
--- /dev/null
+++ b/ld/testsuite/ld-ia64/merge5.d
@@ -0,0 +1,16 @@
+#source: merge5.s
+#as: -x
+#ld: -shared
+#objdump: -d
+
+#...
+0+270 <.text>:
+[ ]*[a-f0-9]+: 0b 60 80 02 00 24 \[MMI\] addl r12=32,r1;;
+[ ]*[a-f0-9]+: c0 40 05 00 48 00 addl r12=40,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
+[ ]*[a-f0-9]+: 0b 60 a0 02 00 24 \[MMI\] addl r12=40,r1;;
+[ ]*[a-f0-9]+: c0 c0 05 00 48 00 addl r12=56,r1
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
+[ ]*[a-f0-9]+: 01 60 60 02 00 24 \[MII\] addl r12=24,r1
+[ ]*[a-f0-9]+: 00 00 00 02 00 00 nop.i 0x0
+[ ]*[a-f0-9]+: 00 00 04 00 nop.i 0x0;;
diff --git a/ld/testsuite/ld-ia64/merge5.s b/ld/testsuite/ld-ia64/merge5.s
new file mode 100644
index 000000000000..81428c41cc59
--- /dev/null
+++ b/ld/testsuite/ld-ia64/merge5.s
@@ -0,0 +1,24 @@
+ .section .rodata.str1.8,"aMS", 1
+.LC1: .string "foo"
+.LC2: .string "foo"
+.LC3: .string "bar"
+.LC4: .string "bar"
+.LC5: .string "bar"
+.LC6: .string "bar"
+.LC7: .string "baz"
+.LC8: .string "baz"
+ .section .data.rel.local,"aw"
+ .quad .LC2
+ .quad .LC4
+ .quad .LC6
+ .quad .LC7
+ .section .rodata,"a"
+.LC9: .string "mumble"
+ .balign 8
+ .space 0x400000
+ .text
+ addl r12=@ltoffx(.LC1),r1 ;;
+ addl r12=@ltoffx(.LC3),r1 ;;
+ addl r12=@ltoffx(.LC5),r1 ;;
+ addl r12=@ltoffx(.LC8),r1 ;;
+ addl r12=@ltoffx(.LC9),r1 ;;
diff --git a/ld/testsuite/ld-ia64/tlsbin.dd b/ld/testsuite/ld-ia64/tlsbin.dd
index d58157962b81..1c5bc2fe33fc 100644
--- a/ld/testsuite/ld-ia64/tlsbin.dd
+++ b/ld/testsuite/ld-ia64/tlsbin.dd
@@ -13,25 +13,25 @@ Disassembly of section .text:
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+1010: 0d 70 .0 0. 00 24[ ]+\[MFI\][ ]+addl r14=(24|32|40|48|56|64),r1
40+1016: 00 00 00 02 00 e0[ ]+nop.f 0x0
-40+101c: 81 0a 00 90[ ]+addl r15=40,r1;;
+40+101c: .1 0. 00 90[ ]+addl r15=(24|32|40|48|56|64),r1;;
40+1020: 19 18 01 1c 18 10[ ]+\[MMB\][ ]+ld8 r35=\[r14\]
40+1026: 40 02 3c 30 20 00[ ]+ld8 r36=\[r15\]
40+102c: [0-9a-f ]+br.call.sptk.many b0=[0-9a-f]+ <.*>;;
-40+1030: 0d 70 c0 02 00 24[ ]+\[MFI\][ ]+addl r14=48,r1
+40+1030: 0d 70 .0 0. 00 24[ ]+\[MFI\][ ]+addl r14=(24|32|40|48|56|64),r1
40+1036: 00 00 00 02 00 e0[ ]+nop.f 0x0
-40+103c: 01 0c 00 90[ ]+addl r15=64,r1;;
+40+103c: .1 0. 00 90[ ]+addl r15=(24|32|40|48|56|64),r1;;
40+1040: 19 18 01 1c 18 10[ ]+\[MMB\][ ]+ld8 r35=\[r14\]
40+1046: 40 02 3c 30 20 00[ ]+ld8 r36=\[r15\]
40+104c: [0-9a-f ]+br.call.sptk.many b0=[0-9a-f]+ <.*>;;
-40+1050: 0d 70 c0 02 00 24[ ]+\[MFI\][ ]+addl r14=48,r1
+40+1050: 0d 70 .0 0. 00 24[ ]+\[MFI\][ ]+addl r14=(24|32|40|48|56|64),r1
40+1056: 00 00 00 02 00 80[ ]+nop.f 0x0
40+105c: 14 02 00 90[ ]+mov r36=33;;
40+1060: 1d 18 01 1c 18 10[ ]+\[MFB\][ ]+ld8 r35=\[r14\]
40+1066: 00 00 00 02 00 00[ ]+nop.f 0x0
40+106c: [0-9a-f ]+br.call.sptk.many b0=[0-9a-f]+ <.*>;;
-40+1070: 0d 70 c0 02 00 24[ ]+\[MFI\][ ]+addl r14=48,r1
+40+1070: 0d 70 .0 0. 00 24[ ]+\[MFI\][ ]+addl r14=(24|32|40|48|56|64),r1
40+1076: 00 00 00 02 00 80[ ]+nop.f 0x0
40+107c: 04 00 00 84[ ]+mov r36=r0;;
40+1080: 1d 18 01 1c 18 10[ ]+\[MFB\][ ]+ld8 r35=\[r14\]
@@ -51,11 +51,11 @@ Disassembly of section .text:
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+10d0: 0b 70 .0 0. 00 24[ ]+\[MMI\][ ]+addl r14=(24|32|40|48|56|64),r1;;
40+10d6: e0 00 38 30 20 00[ ]+ld8 r14=\[r14\]
40+10dc: 00 00 04 00[ ]+nop.i 0x0;;
40+10e0: 0b 70 38 1a 00 20[ ]+\[MMI\][ ]+add r14=r14,r13;;
-40+10e6: e0 c0 05 00 48 00[ ]+addl r14=56,r1
+40+10e6: e0 .0 0. 00 48 00[ ]+addl r14=(24|32|40|48|56|64),r1
40+10ec: 00 00 04 00[ ]+nop.i 0x0;;
40+10f0: 0b 70 00 1c 18 10[ ]+\[MMI\][ ]+ld8 r14=\[r14\];;
40+10f6: e0 70 34 00 40 00[ ]+add r14=r14,r13
diff --git a/ld/testsuite/ld-ia64/tlsbin.rd b/ld/testsuite/ld-ia64/tlsbin.rd
index 1fff20301be9..483433838975 100644
--- a/ld/testsuite/ld-ia64/tlsbin.rd
+++ b/ld/testsuite/ld-ia64/tlsbin.rd
@@ -66,7 +66,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE +GLOBAL DEFAULT +ABS _edata
.* NOTYPE +GLOBAL DEFAULT +ABS _end
-Symbol table '.symtab' contains 69 entries:
+Symbol table '.symtab' contains 66 entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND *
.* SECTION LOCAL +DEFAULT +1 *
@@ -84,9 +84,6 @@ Symbol table '.symtab' contains 69 entries:
.* 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
diff --git a/ld/testsuite/ld-ia64/tlsbin.sd b/ld/testsuite/ld-ia64/tlsbin.sd
index 5d8ab6590455..411eedb6a372 100644
--- a/ld/testsuite/ld-ia64/tlsbin.sd
+++ b/ld/testsuite/ld-ia64/tlsbin.sd
@@ -11,5 +11,5 @@ 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+ .*
+ (60+)?1348 (00|01|24|90)000000 0+ (00|01|24|90)000000 0+ .*
+ (60+)?1358 (00|01|24|90)000000 0+ .*
diff --git a/ld/testsuite/ld-ia64/tlspic.rd b/ld/testsuite/ld-ia64/tlspic.rd
index c1efeb546974..b3123a8ebe00 100644
--- a/ld/testsuite/ld-ia64/tlspic.rd
+++ b/ld/testsuite/ld-ia64/tlspic.rd
@@ -59,11 +59,6 @@ Relocation section '.rela.IA_64.pltoff' at offset 0x[0-9a-f]+ contains 1 entries
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
@@ -78,7 +73,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE +GLOBAL DEFAULT +ABS _edata
.* NOTYPE +GLOBAL DEFAULT +ABS _end
-Symbol table '.symtab' contains 57 entries:
+Symbol table '.symtab' contains 54 entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND *
.* SECTION LOCAL +DEFAULT +1 *
@@ -95,9 +90,6 @@ Symbol table '.symtab' contains 57 entries:
.* 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
diff --git a/ld/testsuite/ld-libs/lib-1.s b/ld/testsuite/ld-libs/lib-1.s
new file mode 100644
index 000000000000..7cc5e1d68c24
--- /dev/null
+++ b/ld/testsuite/ld-libs/lib-1.s
@@ -0,0 +1,2 @@
+ .globl foo
+ .set foo,0x2000
diff --git a/ld/testsuite/ld-libs/lib-2.d b/ld/testsuite/ld-libs/lib-2.d
new file mode 100644
index 000000000000..b055417d5ea2
--- /dev/null
+++ b/ld/testsuite/ld-libs/lib-2.d
@@ -0,0 +1,4 @@
+#...
+0+1000 A bar
+0+2000 A foo
+#pass
diff --git a/ld/testsuite/ld-libs/lib-2.s b/ld/testsuite/ld-libs/lib-2.s
new file mode 100644
index 000000000000..af749d38e031
--- /dev/null
+++ b/ld/testsuite/ld-libs/lib-2.s
@@ -0,0 +1,2 @@
+ .globl bar
+ .set bar,0x1000
diff --git a/ld/testsuite/ld-libs/libs.exp b/ld/testsuite/ld-libs/libs.exp
new file mode 100644
index 000000000000..8609d6529589
--- /dev/null
+++ b/ld/testsuite/ld-libs/libs.exp
@@ -0,0 +1,9 @@
+file mkdir tmpdir/libtmp
+
+# Check that -l: works. The first "test" just creates an object file
+# for the second one.
+run_ld_link_tests {
+ {"-l: test (preparation)" "-r" "" {lib-1.s} {} "libtmp/anobject"}
+ {"-l: test" "-r -Ltmpdir/libtmp -l:anobject" "" {lib-2.s}
+ {{nm -C lib-2.d}} "lib-2"}
+}
diff --git a/ld/testsuite/ld-linkonce/x.s b/ld/testsuite/ld-linkonce/x.s
index 6807cfcdecee..d07f73eefe50 100644
--- a/ld/testsuite/ld-linkonce/x.s
+++ b/ld/testsuite/ld-linkonce/x.s
@@ -1,8 +1,7 @@
;# 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.
+;# main file instantiates fn.
.text
.global _start
@@ -20,7 +19,29 @@ fn:
.Lb:
.size fn,.Lb-.La
- .section .eh_frame,"aw",@progbits
+ .section .gcc_except_table,"aw",@progbits
.long 2
.long .La
.long .Lb-.La
+
+ .section .eh_frame,"aw",@progbits
+.Lframe1:
+ .long .LECIE1-.LSCIE1
+.LSCIE1:
+ .long 0x0
+ .byte 0x1
+ .byte 0
+ .uleb128 0x1
+ .sleb128 -4
+ .byte 0
+ .p2align 2
+.LECIE1:
+
+.LSFDE1:
+ .long .LEFDE1-.LASFDE1
+.LASFDE1:
+ .long .LASFDE1-.Lframe1
+ .long .La
+ .long .Lb-.La
+ .p2align 2
+.LEFDE1:
diff --git a/ld/testsuite/ld-linkonce/y.s b/ld/testsuite/ld-linkonce/y.s
index b8ae3d296438..c1eb51139988 100644
--- a/ld/testsuite/ld-linkonce/y.s
+++ b/ld/testsuite/ld-linkonce/y.s
@@ -2,7 +2,7 @@
;# 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++
+;# .gcc_except_table to the linkonce-excluded fn2 must be zero, or g++
;# EH will not work.
.section .gnu.linkonce.t.fn2,"ax",@progbits
@@ -23,7 +23,7 @@ fn:
.Lf:
.size fn,.Lf-.Le
- .section .eh_frame,"aw",@progbits
+ .section .gcc_except_table,"aw",@progbits
.long 7
.long .Lc
.long .Ld-.Lc
@@ -31,3 +31,34 @@ fn:
.long 0x6066
.long .Le
.long .Lf-.Le
+
+ .section .eh_frame,"aw",@progbits
+.Lframe1:
+ .long .LECIE1-.LSCIE1
+.LSCIE1:
+ .long 0x0
+ .byte 0x1
+ .byte 0
+ .uleb128 0x1
+ .sleb128 -4
+ .byte 0
+ .p2align 2
+.LECIE1:
+
+.LSFDE1:
+ .long .LEFDE1-.LASFDE1
+.LASFDE1:
+ .long .LASFDE1-.Lframe1
+ .long .Lc
+ .long .Ld-.Lc
+ .p2align 2
+.LEFDE1:
+
+.LSFDE2:
+ .long .LEFDE2-.LASFDE2
+.LASFDE2:
+ .long .LASFDE2-.Lframe1
+ .long .Le
+ .long .Lf-.Le
+ .p2align 2
+.LEFDE2:
diff --git a/ld/testsuite/ld-linkonce/zeroeh.ld b/ld/testsuite/ld-linkonce/zeroeh.ld
index 6550c17db9c2..b22eaa12c9c7 100644
--- a/ld/testsuite/ld-linkonce/zeroeh.ld
+++ b/ld/testsuite/ld-linkonce/zeroeh.ld
@@ -1,4 +1,5 @@
SECTIONS {
.text 0xa00 : { *(.text); *(.gnu.linkonce.t.*) }
- .eh_frame 0x2000 : { *(.eh_frame) }
+ .gcc_except_table 0x2000 : { *(.gcc_except_table) }
+ .eh_frame 0x4000 : { *(.eh_frame) }
}
diff --git a/ld/testsuite/ld-linkonce/zeroehl32.d b/ld/testsuite/ld-linkonce/zeroehl32.d
index b84ebed37055..5b51836588c0 100644
--- a/ld/testsuite/ld-linkonce/zeroehl32.d
+++ b/ld/testsuite/ld-linkonce/zeroehl32.d
@@ -11,8 +11,11 @@
Contents of section \.text:
0a00 080a0000 100a0000 01000000 02000000 .*
0a10 03000000 .*
-Contents of section \.eh_frame:
+Contents of section \.gcc_except_table:
2000 02000000 080a0000 08000000 07000000 .*
2010 100a0000 04000000 66600000 00000000 .*
2020 04000000 .*
-#pass
+Contents of section \.eh_frame:
+ 4000 0c000000 00000000 0100017c 00000000 .*
+ 4010 0c000000 14000000 080a0000 08000000 .*
+ 4020 0c000000 24000000 100a0000 04000000 .*
diff --git a/ld/testsuite/ld-m68k/m68k.exp b/ld/testsuite/ld-m68k/m68k.exp
index 346aa06408dc..bf89a607c123 100644
--- a/ld/testsuite/ld-m68k/m68k.exp
+++ b/ld/testsuite/ld-m68k/m68k.exp
@@ -54,3 +54,12 @@ run_dump_test "merge-error-1e"
run_dump_test "merge-ok-1a"
run_dump_test "merge-ok-1b"
run_dump_test "merge-ok-1c"
+
+foreach { id sources } { a { plt1.s } b { plt1-empty.s plt1.s } } {
+ foreach arch { 68020 cpu32 isab isac } {
+ run_ld_link_tests [list \
+ [list "PLT 1$id ($arch)" "-shared -T plt1.ld" "-m$arch" \
+ $sources [list [list objdump -dr plt1-$arch.d]] \
+ plt1-${id}-${arch}.so]]
+ }
+}
diff --git a/ld/testsuite/ld-m68k/merge-error-1a.d b/ld/testsuite/ld-m68k/merge-error-1a.d
index ab3ef6e8306f..3629f39e55c7 100644
--- a/ld/testsuite/ld-m68k/merge-error-1a.d
+++ b/ld/testsuite/ld-m68k/merge-error-1a.d
@@ -1,4 +1,4 @@
#source: merge-error-1a.s -mcpu=cpu32
#source: merge-error-1b.s -mcpu=68000
#ld: -r
-#warning: .*
+#error: ^[^\n]* m68k:68000 [^\n]* incompatible with m68k:cpu32 [^\n]*$
diff --git a/ld/testsuite/ld-m68k/merge-error-1b.d b/ld/testsuite/ld-m68k/merge-error-1b.d
index 291d42ff042e..bedd3d6480d9 100644
--- a/ld/testsuite/ld-m68k/merge-error-1b.d
+++ b/ld/testsuite/ld-m68k/merge-error-1b.d
@@ -1,4 +1,4 @@
#source: merge-error-1a.s -mcpu=cpu32
#source: merge-error-1b.s -mcpu=5207
#ld: -r
-#warning: .*
+#error: ^[^\n]* m68k:isa-aplus:emac [^\n]* incompatible with m68k:cpu32 [^\n]*$
diff --git a/ld/testsuite/ld-m68k/merge-error-1c.d b/ld/testsuite/ld-m68k/merge-error-1c.d
index e74528097c3b..9538e7722c65 100644
--- a/ld/testsuite/ld-m68k/merge-error-1c.d
+++ b/ld/testsuite/ld-m68k/merge-error-1c.d
@@ -1,4 +1,4 @@
#source: merge-error-1a.s -march=isaaplus
#source: merge-error-1b.s -march=isab
#ld: -r
-#warning: .*
+#error: ^[^\n]* m68k:isa-b [^\n]* incompatible with m68k:isa-aplus [^\n]*$
diff --git a/ld/testsuite/ld-m68k/merge-error-1d.d b/ld/testsuite/ld-m68k/merge-error-1d.d
index 310bf4326bd0..4d86771a4754 100644
--- a/ld/testsuite/ld-m68k/merge-error-1d.d
+++ b/ld/testsuite/ld-m68k/merge-error-1d.d
@@ -1,4 +1,4 @@
#source: merge-error-1a.s -march=isaa -mmac
#source: merge-error-1b.s -march=isaa -memac
#ld: -r
-#warning: .*
+#error: ^[^\n]* m68k:isa-a:emac [^\n]* incompatible with m68k:isa-a:mac [^\n]*$
diff --git a/ld/testsuite/ld-m68k/merge-error-1e.d b/ld/testsuite/ld-m68k/merge-error-1e.d
index 87a2bf93f3cc..969f84440fbf 100644
--- a/ld/testsuite/ld-m68k/merge-error-1e.d
+++ b/ld/testsuite/ld-m68k/merge-error-1e.d
@@ -1,4 +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: .*
+#error: ^[^\n]* m68k:isa-a:emac [^\n]* is incompatible with m68k:isa-a:mac [^\n]*$
diff --git a/ld/testsuite/ld-m68k/plt1-68020.d b/ld/testsuite/ld-m68k/plt1-68020.d
new file mode 100644
index 000000000000..54463b9168ff
--- /dev/null
+++ b/ld/testsuite/ld-m68k/plt1-68020.d
@@ -0,0 +1,35 @@
+
+.*: file format elf32-m68k
+
+Disassembly of section \.plt:
+
+00020800 <f.@plt-0x14>:
+ 20800: 2f3b 0170 0000 movel %pc@\(30404 <_GLOBAL_OFFSET_TABLE_\+0x4>\),%sp@-
+ 20806: fc02
+ 20808: 4efb 0171 0000 jmp %pc@\(30408 <_GLOBAL_OFFSET_TABLE_\+0x8>\)@\(0*\)
+ 2080e: fbfe
+ 20810: 0000 0000 orib #0,%d0
+
+00020814 <f.@plt>:
+ 20814: 4efb 0171 0000 jmp %pc@\(3040c <_GLOBAL_OFFSET_TABLE_\+0xc>\)@\(0*\)
+ 2081a: fbf6
+ 2081c: 2f3c 0000 0000 movel #0,%sp@-
+ 20822: 60ff ffff ffdc bral 20800 <f.@plt-0x14>
+
+00020828 <f.@plt>:
+ 20828: 4efb 0171 0000 jmp %pc@\(30410 <_GLOBAL_OFFSET_TABLE_\+0x10>\)@\(0*\)
+ 2082e: fbe6
+ 20830: 2f3c 0000 000c movel #12,%sp@-
+ 20836: 60ff ffff ffc8 bral 20800 <f.@plt-0x14>
+
+0002083c <f.@plt>:
+ 2083c: 4efb 0171 0000 jmp %pc@\(30414 <_GLOBAL_OFFSET_TABLE_\+0x14>\)@\(0*\)
+ 20842: fbd6
+ 20844: 2f3c 0000 0018 movel #24,%sp@-
+ 2084a: 60ff ffff ffb4 bral 20800 <f.@plt-0x14>
+Disassembly of section \.text:
+
+00020c00 <.*>:
+ 20c00: 61ff ffff fc.. bsrl 208.. <f1@plt>
+ 20c06: 61ff ffff fc.. bsrl 208.. <f2@plt>
+ 20c0c: 61ff ffff fc.. bsrl 208.. <f3@plt>
diff --git a/ld/testsuite/ld-m68k/plt1-cpu32.d b/ld/testsuite/ld-m68k/plt1-cpu32.d
new file mode 100644
index 000000000000..a4977406e6a2
--- /dev/null
+++ b/ld/testsuite/ld-m68k/plt1-cpu32.d
@@ -0,0 +1,43 @@
+
+.*: file format elf32-m68k
+
+Disassembly of section \.plt:
+
+00020800 <f.@plt-0x18>:
+ 20800: 2f3b 0170 0000 movel %pc@\(30404 <_GLOBAL_OFFSET_TABLE_\+0x4>\),%sp@-
+ 20806: fc02
+ 20808: 227b 0170 0000 moveal %pc@\(30408 <_GLOBAL_OFFSET_TABLE_\+0x8>\),%a1
+ 2080e: fbfe
+ 20810: 4ed1 jmp %a1@
+ 20812: 0000 0000 orib #0,%d0
+ \.\.\.
+
+00020818 <f.@plt>:
+ 20818: 227b 0170 0000 moveal %pc@\(3040c <_GLOBAL_OFFSET_TABLE_\+0xc>\),%a1
+ 2081e: fbf2
+ 20820: 4ed1 jmp %a1@
+ 20822: 2f3c 0000 0000 movel #0,%sp@-
+ 20828: 60ff ffff ffd6 bral 20800 <f.@plt-0x18>
+ \.\.\.
+
+00020830 <f.@plt>:
+ 20830: 227b 0170 0000 moveal %pc@\(30410 <_GLOBAL_OFFSET_TABLE_\+0x10>\),%a1
+ 20836: fbde
+ 20838: 4ed1 jmp %a1@
+ 2083a: 2f3c 0000 000c movel #12,%sp@-
+ 20840: 60ff ffff ffbe bral 20800 <f.@plt-0x18>
+ \.\.\.
+
+00020848 <f.@plt>:
+ 20848: 227b 0170 0000 moveal %pc@\(30414 <_GLOBAL_OFFSET_TABLE_\+0x14>\),%a1
+ 2084e: fbca
+ 20850: 4ed1 jmp %a1@
+ 20852: 2f3c 0000 0018 movel #24,%sp@-
+ 20858: 60ff ffff ffa6 bral 20800 <f.@plt-0x18>
+ \.\.\.
+Disassembly of section \.text:
+
+00020c00 <.*>:
+ 20c00: 61ff ffff fc.. bsrl 208.. <f1@plt>
+ 20c06: 61ff ffff fc.. bsrl 208.. <f2@plt>
+ 20c0c: 61ff ffff fc.. bsrl 208.. <f3@plt>
diff --git a/ld/testsuite/ld-m68k/plt1-empty.s b/ld/testsuite/ld-m68k/plt1-empty.s
new file mode 100644
index 000000000000..a59477db39cd
--- /dev/null
+++ b/ld/testsuite/ld-m68k/plt1-empty.s
@@ -0,0 +1,3 @@
+ .text
+ .globl foo
+foo:
diff --git a/ld/testsuite/ld-m68k/plt1-isab.d b/ld/testsuite/ld-m68k/plt1-isab.d
new file mode 100644
index 000000000000..a9aeacbe475c
--- /dev/null
+++ b/ld/testsuite/ld-m68k/plt1-isab.d
@@ -0,0 +1,44 @@
+
+.*: file format elf32-m68k
+
+Disassembly of section \.plt:
+
+00020800 <f.@plt-0x18>:
+# _GLOBAL_OFFSET_TABLE_ + 4 == 0x30404 == 0x20802 + 0xfc02
+ 20800: 203c 0000 fc02 movel #64514,%d0
+ 20806: 2f3b 08fa movel %pc@\(20802 <f.@plt-0x16>,%d0:l\),%sp@-
+# _GLOBAL_OFFSET_TABLE_ + 8 == 0x30408 == 0x2080c + 0xfbfc
+ 2080a: 203c 0000 fbfc movel #64508,%d0
+ 20810: 207b 08fa moveal %pc@\(2080c <f.@plt-0xc>,%d0:l\),%a0
+ 20814: 4ed0 jmp %a0@
+ 20816: 4e71 nop
+
+00020818 <f.@plt>:
+# _GLOBAL_OFFSET_TABLE_ + 12 == 0x3040c == 0x2081a + 0xfbf2
+ 20818: 203c 0000 fbf2 movel #64498,%d0
+ 2081e: 207b 08fa moveal %pc@\(2081a <f.@plt\+0x2>,%d0:l\),%a0
+ 20822: 4ed0 jmp %a0@
+ 20824: 2f3c 0000 0000 movel #0,%sp@-
+ 2082a: 60ff ffff ffd4 bral 20800 <f.@plt-0x18>
+
+00020830 <f.@plt>:
+# _GLOBAL_OFFSET_TABLE_ + 16 == 0x30410 == 0x20832 + 0xfbde
+ 20830: 203c 0000 fbde movel #64478,%d0
+ 20836: 207b 08fa moveal %pc@\(20832 <f.@plt\+0x2>,%d0:l\),%a0
+ 2083a: 4ed0 jmp %a0@
+ 2083c: 2f3c 0000 000c movel #12,%sp@-
+ 20842: 60ff ffff ffbc bral 20800 <f.@plt-0x18>
+
+00020848 <f.@plt>:
+# _GLOBAL_OFFSET_TABLE_ + 20 == 0x30414 == 0x2084a + 0xfbca
+ 20848: 203c 0000 fbca movel #64458,%d0
+ 2084e: 207b 08fa moveal %pc@\(2084a <f.@plt\+0x2>,%d0:l\),%a0
+ 20852: 4ed0 jmp %a0@
+ 20854: 2f3c 0000 0018 movel #24,%sp@-
+ 2085a: 60ff ffff ffa4 bral 20800 <f.@plt-0x18>
+Disassembly of section \.text:
+
+00020c00 <.*>:
+ 20c00: 61ff ffff fc.. bsrl 208.. <f1@plt>
+ 20c06: 61ff ffff fc.. bsrl 208.. <f2@plt>
+ 20c0c: 61ff ffff fc.. bsrl 208.. <f3@plt>
diff --git a/ld/testsuite/ld-m68k/plt1-isac.d b/ld/testsuite/ld-m68k/plt1-isac.d
new file mode 100644
index 000000000000..ae299ce92b3d
--- /dev/null
+++ b/ld/testsuite/ld-m68k/plt1-isac.d
@@ -0,0 +1,44 @@
+
+.*: file format elf32-m68k
+
+Disassembly of section \.plt:
+
+00020800 <f.@plt-0x18>:
+# _GLOBAL_OFFSET_TABLE_ + 4 == 0x30404 == 0x20802 + 0xfc02
+ 20800: 203c 0000 fc02 movel #64514,%d0
+ 20806: 2ebb 08fa movel %pc@\(20802 <f.@plt-0x16>,%d0:l\),%sp@
+# _GLOBAL_OFFSET_TABLE_ + 8 == 0x30408 == 0x2080c + 0xfbfc
+ 2080a: 203c 0000 fbfc movel #64508,%d0
+ 20810: 207b 08fa moveal %pc@\(2080c <f.@plt-0xc>,%d0:l\),%a0
+ 20814: 4ed0 jmp %a0@
+ 20816: 4e71 nop
+
+00020818 <f.@plt>:
+# _GLOBAL_OFFSET_TABLE_ + 12 == 0x3040c == 0x2081a + 0xfbf2
+ 20818: 203c 0000 fbf2 movel #64498,%d0
+ 2081e: 207b 08fa moveal %pc@\(2081a <f.@plt\+0x2>,%d0:l\),%a0
+ 20822: 4ed0 jmp %a0@
+ 20824: 2f3c 0000 0000 movel #0,%sp@-
+ 2082a: 61ff ffff ffd4 bsrl 20800 <f.@plt-0x18>
+
+00020830 <f.@plt>:
+# _GLOBAL_OFFSET_TABLE_ + 16 == 0x30410 == 0x20832 + 0xfbde
+ 20830: 203c 0000 fbde movel #64478,%d0
+ 20836: 207b 08fa moveal %pc@\(20832 <f.@plt\+0x2>,%d0:l\),%a0
+ 2083a: 4ed0 jmp %a0@
+ 2083c: 2f3c 0000 000c movel #12,%sp@-
+ 20842: 61ff ffff ffbc bsrl 20800 <f.@plt-0x18>
+
+00020848 <f.@plt>:
+# _GLOBAL_OFFSET_TABLE_ + 20 == 0x30414 == 0x2084a + 0xfbca
+ 20848: 203c 0000 fbca movel #64458,%d0
+ 2084e: 207b 08fa moveal %pc@\(2084a <f.@plt\+0x2>,%d0:l\),%a0
+ 20852: 4ed0 jmp %a0@
+ 20854: 2f3c 0000 0018 movel #24,%sp@-
+ 2085a: 61ff ffff ffa4 bsrl 20800 <f.@plt-0x18>
+Disassembly of section \.text:
+
+00020c00 <.*>:
+ 20c00: 61ff ffff fc.. bsrl 208.. <f1@plt>
+ 20c06: 61ff ffff fc.. bsrl 208.. <f2@plt>
+ 20c0c: 61ff ffff fc.. bsrl 208.. <f3@plt>
diff --git a/ld/testsuite/ld-m68k/plt1.ld b/ld/testsuite/ld-m68k/plt1.ld
new file mode 100644
index 000000000000..718e2adfb429
--- /dev/null
+++ b/ld/testsuite/ld-m68k/plt1.ld
@@ -0,0 +1,23 @@
+SECTIONS
+{
+ . = 0x20000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x400);
+ .rela.plt : { *(.rela.plt) }
+
+ . = ALIGN (0x400);
+ .plt : { *(.plt) }
+
+ . = ALIGN (0x400);
+ .text : { *(.text) }
+
+ . = ALIGN (0x10000);
+ .dynamic : { *(.dynamic) }
+
+ . = ALIGN (0x400);
+ .got : { *(.got.plt) *(.got) }
+}
diff --git a/ld/testsuite/ld-m68k/plt1.s b/ld/testsuite/ld-m68k/plt1.s
new file mode 100644
index 000000000000..855fb192add7
--- /dev/null
+++ b/ld/testsuite/ld-m68k/plt1.s
@@ -0,0 +1,3 @@
+ bsr.l f1@PLTPC
+ bsr.l f2@PLTPC
+ bsr.l f3@PLTPC
diff --git a/ld/testsuite/ld-mep/mep.exp b/ld/testsuite/ld-mep/mep.exp
new file mode 100644
index 000000000000..812e407e2cab
--- /dev/null
+++ b/ld/testsuite/ld-mep/mep.exp
@@ -0,0 +1,35 @@
+# Expect script for ld-mep 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 DJ Delorie (dj@redhat.com)
+#
+
+# Test MeP linking for special cases.
+
+if ![istarget mep*-*-*] {
+ return
+}
+
+set testbsrweak "MeP bsr to undefined weak function"
+
+if ![ld_assemble $as "$srcdir/$subdir/mep1.s" tmpdir/mep1.o] {
+ unresolved $testbsrweak
+} else { if ![ld_simple_link $ld tmpdir/mep1 "-T$srcdir/$subdir/mep1.ld tmpdir/mep1.o"] {
+ fail $testbsrweak
+} else {
+ pass $testbsrweak
+} }
diff --git a/ld/testsuite/ld-mep/mep1.ld b/ld/testsuite/ld-mep/mep1.ld
new file mode 100644
index 000000000000..d0a41043b627
--- /dev/null
+++ b/ld/testsuite/ld-mep/mep1.ld
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ /* This is beyond the normal range of a PCREL24 (bsr) relocation. */
+ . = 0x100000;
+ .text1 : { *(.text1) }
+ . = 0x900000;
+ .text2 : { *(.text2) }
+}
diff --git a/ld/testsuite/ld-mep/mep1.s b/ld/testsuite/ld-mep/mep1.s
new file mode 100644
index 000000000000..ab5414f655e7
--- /dev/null
+++ b/ld/testsuite/ld-mep/mep1.s
@@ -0,0 +1,13 @@
+ .weak bar
+
+ # This will be in low memory.
+ .section .text1,"ax"
+ bsr bar
+ jmp bar
+
+ # This will be in high memory.
+ .section .text2,"ax"
+ # This needs special handling
+ bsr bar
+ # This shouldn't
+ jmp bar
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-0.s b/ld/testsuite/ld-mips-elf/attr-gnu-4-0.s
new file mode 100644
index 000000000000..a1437461d047
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-0.s
@@ -0,0 +1 @@
+.gnu_attribute 4,0
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-00.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-00.d
new file mode 100644
index 000000000000..cd9535626dcc
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-00.d
@@ -0,0 +1,7 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-0.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-01.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-01.d
new file mode 100644
index 000000000000..3e68405e1274
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-01.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-1.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(-mdouble-float\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-02.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-02.d
new file mode 100644
index 000000000000..0641a85a776d
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-02.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-2.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(-msingle-float\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-03.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-03.d
new file mode 100644
index 000000000000..64f03f564fc0
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-03.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-3.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Soft float
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-1.s b/ld/testsuite/ld-mips-elf/attr-gnu-4-1.s
new file mode 100644
index 000000000000..e985a56f6b1a
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-1.s
@@ -0,0 +1 @@
+.gnu_attribute 4,1
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-10.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-10.d
new file mode 100644
index 000000000000..d57dd968a08c
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-10.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-0.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(-mdouble-float\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-11.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-11.d
new file mode 100644
index 000000000000..d694508bfab9
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-11.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-1.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(-mdouble-float\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-12.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-12.d
new file mode 100644
index 000000000000..3ee602577f5d
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-12.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-2.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses -msingle-float, .* uses -mdouble-float
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-13.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-13.d
new file mode 100644
index 000000000000..a48c119cbd23
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-13.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-3.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d
new file mode 100644
index 000000000000..7b15327d9921
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-4.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses unknown floating point ABI 4
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-2.s b/ld/testsuite/ld-mips-elf/attr-gnu-4-2.s
new file mode 100644
index 000000000000..54ebf4ed8ddb
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-2.s
@@ -0,0 +1 @@
+.gnu_attribute 4,2
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-20.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-20.d
new file mode 100644
index 000000000000..7ea84ab69f19
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-20.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-0.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(-msingle-float\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-21.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-21.d
new file mode 100644
index 000000000000..3f8486778bfb
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-21.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-1.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses -msingle-float, .* uses -mdouble-float
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-22.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-22.d
new file mode 100644
index 000000000000..603e5c19f97a
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-22.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-2.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Hard float \(-msingle-float\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-23.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-23.d
new file mode 100644
index 000000000000..c0c14fd9e98c
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-23.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-3.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-3.s b/ld/testsuite/ld-mips-elf/attr-gnu-4-3.s
new file mode 100644
index 000000000000..32e5f5d1af4a
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-3.s
@@ -0,0 +1 @@
+.gnu_attribute 4,3
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-30.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-30.d
new file mode 100644
index 000000000000..d123328b7bd4
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-30.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-0.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Soft float
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-31.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-31.d
new file mode 100644
index 000000000000..6a629e719015
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-31.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-1.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-32.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-32.d
new file mode 100644
index 000000000000..824d46757e8f
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-32.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-2.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-33.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-33.d
new file mode 100644
index 000000000000..28d9d31d8824
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-33.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-3.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_MIPS_ABI_FP: Soft float
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-4.s b/ld/testsuite/ld-mips-elf/attr-gnu-4-4.s
new file mode 100644
index 000000000000..3ff129ae7a40
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-4.s
@@ -0,0 +1 @@
+.gnu_attribute 4,4
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d
new file mode 100644
index 000000000000..5fffe75d566f
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-4.s
+#source: attr-gnu-4-1.s
+#as: -EB -32
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses unknown floating point ABI 4
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/branch-misc-1.d b/ld/testsuite/ld-mips-elf/branch-misc-1.d
index 36bceb796035..0cd370126af2 100644
--- a/ld/testsuite/ld-mips-elf/branch-misc-1.d
+++ b/ld/testsuite/ld-mips-elf/branch-misc-1.d
@@ -1,7 +1,7 @@
#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
+#ld: -Ttext 0x20000000 -e 0x20000000 -N
.*: file format elf.*mips.*
@@ -11,18 +11,18 @@ 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
+0*2000003c <[^>]*> 0411fff0 bal 0*20000000 <[^>]*>
+0*20000040 <[^>]*> 00000000 nop
+0*20000044 <[^>]*> 0411fff3 bal 0*20000014 <[^>]*>
+0*20000048 <[^>]*> 00000000 nop
+0*2000004c <[^>]*> 0411fff6 bal 0*20000028 <[^>]*>
+0*20000050 <[^>]*> 00000000 nop
+0*20000054 <[^>]*> 0411000a bal 0*20000080 <[^>]*>
+0*20000058 <[^>]*> 00000000 nop
+0*2000005c <[^>]*> 0411000d bal 0*20000094 <[^>]*>
+0*20000060 <[^>]*> 00000000 nop
+0*20000064 <[^>]*> 04110010 bal 0*200000a8 <[^>]*>
+0*20000068 <[^>]*> 00000000 nop
\.\.\.
\.\.\.
\.\.\.
diff --git a/ld/testsuite/ld-mips-elf/eh-frame1-n32.d b/ld/testsuite/ld-mips-elf/eh-frame1-n32.d
index 4e3321951c0f..cda12b6a3110 100644
--- a/ld/testsuite/ld-mips-elf/eh-frame1-n32.d
+++ b/ld/testsuite/ld-mips-elf/eh-frame1-n32.d
@@ -7,19 +7,19 @@
Relocation section '\.rel\.dyn' .*:
*Offset .*
-00000000 00000000 R_MIPS_NONE *
+00000000 [0-9a-f]+ R_MIPS_NONE *
# Initial PCs for the FDEs attached to CIE 0xbc
-000300dc 00000003 R_MIPS_REL32 *
-000300f0 00000003 R_MIPS_REL32 *
+000300dc [0-9a-f]+ R_MIPS_REL32 *
+000300f0 [0-9a-f]+ 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
+00030240 [0-9a-f]+ R_MIPS_REL32 *
+00030254 [0-9a-f]+ R_MIPS_REL32 *
+0003008b [0-9a-f]+ R_MIPS_REL32 00000000 foo
+000300d0 [0-9a-f]+ R_MIPS_REL32 00000000 foo
+0003010e [0-9a-f]+ R_MIPS_REL32 00000000 foo
+000301ef [0-9a-f]+ R_MIPS_REL32 00000000 foo
+00030234 [0-9a-f]+ R_MIPS_REL32 00000000 foo
+00030272 [0-9a-f]+ R_MIPS_REL32 00000000 foo
#...
The section \.eh_frame contains:
diff --git a/ld/testsuite/ld-mips-elf/eh-frame1-n64.d b/ld/testsuite/ld-mips-elf/eh-frame1-n64.d
index 2b175e051f45..ccb77e1d67b7 100644
--- a/ld/testsuite/ld-mips-elf/eh-frame1-n64.d
+++ b/ld/testsuite/ld-mips-elf/eh-frame1-n64.d
@@ -7,39 +7,39 @@
Relocation section '\.rel\.dyn' .*:
*Offset .*
-000000000000 000000000000 R_MIPS_NONE *
+000000000000 [0-9a-f]+ R_MIPS_NONE *
*Type2: R_MIPS_NONE *
*Type3: R_MIPS_NONE *
# Initial PCs for the FDEs attached to CIE 0x120
-000000030148 000000001203 R_MIPS_REL32 *
+000000030148 [0-9a-f]+ R_MIPS_REL32 *
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-000000030168 000000001203 R_MIPS_REL32 *
+000000030168 [0-9a-f]+ R_MIPS_REL32 *
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
# Likewise CIE 0x340
-000000030368 000000001203 R_MIPS_REL32 *
+000000030368 [0-9a-f]+ R_MIPS_REL32 *
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-000000030388 000000001203 R_MIPS_REL32 *
+000000030388 [0-9a-f]+ R_MIPS_REL32 *
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-0000000300cb 000500001203 R_MIPS_REL32 0000000000000000 foo
+0000000300cb [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-000000030138 000500001203 R_MIPS_REL32 0000000000000000 foo
+000000030138 [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-000000030192 000500001203 R_MIPS_REL32 0000000000000000 foo
+000000030192 [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-0000000302eb 000500001203 R_MIPS_REL32 0000000000000000 foo
+0000000302eb [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-000000030358 000500001203 R_MIPS_REL32 0000000000000000 foo
+000000030358 [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-0000000303b2 000500001203 R_MIPS_REL32 0000000000000000 foo
+0000000303b2 [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
#...
diff --git a/ld/testsuite/ld-mips-elf/eh-frame2-n32.d b/ld/testsuite/ld-mips-elf/eh-frame2-n32.d
index 134565862327..160b7a8fe725 100644
--- a/ld/testsuite/ld-mips-elf/eh-frame2-n32.d
+++ b/ld/testsuite/ld-mips-elf/eh-frame2-n32.d
@@ -7,19 +7,19 @@
Relocation section '\.rel\.dyn' .*:
*Offset .*
-00000000 00000000 R_MIPS_NONE *
+00000000 [0-9a-f]+ R_MIPS_NONE *
# Initial PCs for the FDEs attached to CIE 0xb8
-000300d8 00000003 R_MIPS_REL32 *
-000300ec 00000003 R_MIPS_REL32 *
+000300d8 [0-9a-f]+ R_MIPS_REL32 *
+000300ec [0-9a-f]+ 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
+00030238 [0-9a-f]+ R_MIPS_REL32 *
+0003024c [0-9a-f]+ R_MIPS_REL32 *
+0003008b [0-9a-f]+ R_MIPS_REL32 00000000 foo
+000300cc [0-9a-f]+ R_MIPS_REL32 00000000 foo
+0003010a [0-9a-f]+ R_MIPS_REL32 00000000 foo
+000301eb [0-9a-f]+ R_MIPS_REL32 00000000 foo
+0003022c [0-9a-f]+ R_MIPS_REL32 00000000 foo
+0003026a [0-9a-f]+ R_MIPS_REL32 00000000 foo
#...
The section \.eh_frame contains:
diff --git a/ld/testsuite/ld-mips-elf/eh-frame2-n64.d b/ld/testsuite/ld-mips-elf/eh-frame2-n64.d
index b817bbc67ef5..9bc490eb9df9 100644
--- a/ld/testsuite/ld-mips-elf/eh-frame2-n64.d
+++ b/ld/testsuite/ld-mips-elf/eh-frame2-n64.d
@@ -7,39 +7,39 @@
Relocation section '\.rel\.dyn' .*:
*Offset .*
-000000000000 000000000000 R_MIPS_NONE *
+000000000000 [0-9a-f]+ R_MIPS_NONE *
*Type2: R_MIPS_NONE *
*Type3: R_MIPS_NONE *
# Initial PCs for the FDEs attached to CIE 0x118
-000000030140 000000001203 R_MIPS_REL32 *
+000000030140 [0-9a-f]+ R_MIPS_REL32 *
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-000000030160 000000001203 R_MIPS_REL32 *
+000000030160 [0-9a-f]+ R_MIPS_REL32 *
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
# Likewise CIE 0x330
-000000030358 000000001203 R_MIPS_REL32 *
+000000030358 [0-9a-f]+ R_MIPS_REL32 *
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-000000030378 000000001203 R_MIPS_REL32 *
+000000030378 [0-9a-f]+ R_MIPS_REL32 *
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-0000000300cb 000500001203 R_MIPS_REL32 0000000000000000 foo
+0000000300cb [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-000000030130 000500001203 R_MIPS_REL32 0000000000000000 foo
+000000030130 [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-00000003018a 000500001203 R_MIPS_REL32 0000000000000000 foo
+00000003018a [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-0000000302e3 000500001203 R_MIPS_REL32 0000000000000000 foo
+0000000302e3 [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-000000030348 000500001203 R_MIPS_REL32 0000000000000000 foo
+000000030348 [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
-0000000303a2 000500001203 R_MIPS_REL32 0000000000000000 foo
+0000000303a2 [0-9a-f]+ R_MIPS_REL32 0000000000000000 foo
*Type2: R_MIPS_64 *
*Type3: R_MIPS_NONE *
#...
diff --git a/ld/testsuite/ld-mips-elf/elf-rel-got-n32.d b/ld/testsuite/ld-mips-elf/elf-rel-got-n32.d
index 5b3df078626a..d1619d5688f0 100644
--- a/ld/testsuite/ld-mips-elf/elf-rel-got-n32.d
+++ b/ld/testsuite/ld-mips-elf/elf-rel-got-n32.d
@@ -6,309 +6,310 @@
.*: +file format elf32-n.*mips.*
+Disassembly of section \.reginfo:
+
+10000098 <\.reginfo>:
+10000098: 92020022 .*
+ \.\.\.
+100000ac: 100185a0 .*
+
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
+100000b0 <fn>:
+100000b0: 8f858064 lw a1,-32668\(gp\)
+100000b4: 8f858064 lw a1,-32668\(gp\)
+100000b8: 24a5000c addiu a1,a1,12
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\)
+100000c0: 3c010001 lui at,0x1
+100000c4: 3421e240 ori at,at,0xe240
+100000c8: 00a12821 addu a1,a1,at
+100000cc: 8f858064 lw a1,-32668\(gp\)
+100000d0: 00b12821 addu a1,a1,s1
+100000d4: 8f858064 lw a1,-32668\(gp\)
+100000d8: 24a5000c addiu a1,a1,12
+100000dc: 00b12821 addu a1,a1,s1
+100000e0: 8f858064 lw a1,-32668\(gp\)
+100000e4: 3c010001 lui at,0x1
+100000e8: 3421e240 ori at,at,0xe240
+100000ec: 00a12821 addu a1,a1,at
+100000f0: 00b12821 addu a1,a1,s1
100000f4: 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
+100000f8: 8ca504fc lw a1,1276\(a1\)
+100000fc: 8f858018 lw a1,-32744\(gp\)
+10000100: 8ca50508 lw a1,1288\(a1\)
+10000104: 8f858018 lw a1,-32744\(gp\)
+10000108: 00b12821 addu a1,a1,s1
+1000010c: 8ca504fc lw a1,1276\(a1\)
+10000110: 8f858018 lw a1,-32744\(gp\)
+10000114: 00b12821 addu a1,a1,s1
+10000118: 8ca50508 lw a1,1288\(a1\)
+1000011c: 8f818018 lw at,-32744\(gp\)
+10000120: 00250821 addu at,at,a1
+10000124: 8c25051e lw a1,1310\(at\)
+10000128: 8f818018 lw at,-32744\(gp\)
+1000012c: 00250821 addu at,at,a1
+10000130: ac250534 sw a1,1332\(at\)
+10000134: 8f818064 lw at,-32668\(gp\)
10000138: 88250000 lwl a1,0\(at\)
1000013c: 98250003 lwr a1,3\(at\)
10000140: 8f818064 lw at,-32668\(gp\)
-10000144: 00310821 addu at,at,s1
+10000144: 2421000c addiu at,at,12
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
+10000154: 00310821 addu at,at,s1
+10000158: 88250000 lwl a1,0\(at\)
+1000015c: 98250003 lwr a1,3\(at\)
+10000160: 8f818064 lw at,-32668\(gp\)
+10000164: 2421000c addiu at,at,12
+10000168: 00310821 addu at,at,s1
+1000016c: 88250000 lwl a1,0\(at\)
+10000170: 98250003 lwr a1,3\(at\)
+10000174: 8f818064 lw at,-32668\(gp\)
+10000178: 24210022 addiu at,at,34
+1000017c: 00250821 addu at,at,a1
+10000180: 88250000 lwl a1,0\(at\)
+10000184: 98250003 lwr a1,3\(at\)
+10000188: 8f818064 lw at,-32668\(gp\)
+1000018c: 24210038 addiu at,at,56
+10000190: 00250821 addu at,at,a1
+10000194: a8250000 swl a1,0\(at\)
+10000198: b8250003 swr a1,3\(at\)
+1000019c: 8f85801c lw a1,-32740\(gp\)
100001a0: 8f858020 lw a1,-32736\(gp\)
-100001a4: 00b12821 addu a1,a1,s1
-100001a8: 8f858024 lw a1,-32732\(gp\)
+100001a4: 8f858024 lw a1,-32732\(gp\)
+100001a8: 8f85801c lw a1,-32740\(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\)
+100001b0: 8f858020 lw a1,-32736\(gp\)
+100001b4: 00b12821 addu a1,a1,s1
+100001b8: 8f858024 lw a1,-32732\(gp\)
+100001bc: 00b12821 addu a1,a1,s1
100001c0: 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
+100001c4: 8ca504fc lw a1,1276\(a1\)
+100001c8: 8f858018 lw a1,-32744\(gp\)
+100001cc: 8ca50508 lw a1,1288\(a1\)
+100001d0: 8f858018 lw a1,-32744\(gp\)
+100001d4: 00b12821 addu a1,a1,s1
+100001d8: 8ca504fc lw a1,1276\(a1\)
+100001dc: 8f858018 lw a1,-32744\(gp\)
+100001e0: 00b12821 addu a1,a1,s1
+100001e4: 8ca50508 lw a1,1288\(a1\)
+100001e8: 8f818018 lw at,-32744\(gp\)
+100001ec: 00250821 addu at,at,a1
+100001f0: 8c25051e lw a1,1310\(at\)
+100001f4: 8f818018 lw at,-32744\(gp\)
+100001f8: 00250821 addu at,at,a1
+100001fc: ac250534 sw a1,1332\(at\)
+10000200: 8f81801c lw at,-32740\(gp\)
+10000204: 88250000 lwl a1,0\(at\)
+10000208: 98250003 lwr a1,3\(at\)
+1000020c: 8f818020 lw at,-32736\(gp\)
10000210: 88250000 lwl a1,0\(at\)
10000214: 98250003 lwr a1,3\(at\)
-10000218: 8f818020 lw at,-32736\(gp\)
+10000218: 8f81801c lw at,-32740\(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
+10000228: 8f818020 lw at,-32736\(gp\)
+1000022c: 00310821 addu at,at,s1
10000230: 88250000 lwl a1,0\(at\)
10000234: 98250003 lwr a1,3\(at\)
-10000238: 8f81802c lw at,-32724\(gp\)
+10000238: 8f818028 lw at,-32728\(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
+10000240: 88250000 lwl a1,0\(at\)
+10000244: 98250003 lwr a1,3\(at\)
+10000248: 8f81802c lw at,-32724\(gp\)
+1000024c: 00250821 addu at,at,a1
+10000250: a8250000 swl a1,0\(at\)
+10000254: b8250003 swr a1,3\(at\)
+10000258: 8f85805c lw a1,-32676\(gp\)
+1000025c: 8f858030 lw a1,-32720\(gp\)
+10000260: 8f99805c lw t9,-32676\(gp\)
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
+10000268: 8f99805c lw t9,-32676\(gp\)
+1000026c: 0320f809 jalr t9
+10000270: 00000000 nop
+10000274: 8f998030 lw t9,-32720\(gp\)
+10000278: 0320f809 jalr t9
+1000027c: 00000000 nop
+10000280: 8f858068 lw a1,-32664\(gp\)
+10000284: 8f858068 lw a1,-32664\(gp\)
+10000288: 24a5000c addiu a1,a1,12
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\)
+10000290: 3c010001 lui at,0x1
+10000294: 3421e240 ori at,at,0xe240
+10000298: 00a12821 addu a1,a1,at
+1000029c: 8f858068 lw a1,-32664\(gp\)
+100002a0: 00b12821 addu a1,a1,s1
+100002a4: 8f858068 lw a1,-32664\(gp\)
+100002a8: 24a5000c addiu a1,a1,12
+100002ac: 00b12821 addu a1,a1,s1
+100002b0: 8f858068 lw a1,-32664\(gp\)
+100002b4: 3c010001 lui at,0x1
+100002b8: 3421e240 ori at,at,0xe240
+100002bc: 00a12821 addu a1,a1,at
+100002c0: 00b12821 addu a1,a1,s1
100002c4: 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
+100002c8: 8ca50574 lw a1,1396\(a1\)
+100002cc: 8f858018 lw a1,-32744\(gp\)
+100002d0: 8ca50580 lw a1,1408\(a1\)
+100002d4: 8f858018 lw a1,-32744\(gp\)
+100002d8: 00b12821 addu a1,a1,s1
+100002dc: 8ca50574 lw a1,1396\(a1\)
+100002e0: 8f858018 lw a1,-32744\(gp\)
+100002e4: 00b12821 addu a1,a1,s1
+100002e8: 8ca50580 lw a1,1408\(a1\)
+100002ec: 8f818018 lw at,-32744\(gp\)
+100002f0: 00250821 addu at,at,a1
+100002f4: 8c250596 lw a1,1430\(at\)
+100002f8: 8f818018 lw at,-32744\(gp\)
+100002fc: 00250821 addu at,at,a1
+10000300: ac2505ac sw a1,1452\(at\)
+10000304: 8f818068 lw at,-32664\(gp\)
10000308: 88250000 lwl a1,0\(at\)
1000030c: 98250003 lwr a1,3\(at\)
10000310: 8f818068 lw at,-32664\(gp\)
-10000314: 00310821 addu at,at,s1
+10000314: 2421000c addiu at,at,12
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
+10000324: 00310821 addu at,at,s1
+10000328: 88250000 lwl a1,0\(at\)
+1000032c: 98250003 lwr a1,3\(at\)
+10000330: 8f818068 lw at,-32664\(gp\)
+10000334: 2421000c addiu at,at,12
+10000338: 00310821 addu at,at,s1
+1000033c: 88250000 lwl a1,0\(at\)
+10000340: 98250003 lwr a1,3\(at\)
+10000344: 8f818068 lw at,-32664\(gp\)
+10000348: 24210022 addiu at,at,34
+1000034c: 00250821 addu at,at,a1
+10000350: 88250000 lwl a1,0\(at\)
+10000354: 98250003 lwr a1,3\(at\)
+10000358: 8f818068 lw at,-32664\(gp\)
+1000035c: 24210038 addiu at,at,56
+10000360: 00250821 addu at,at,a1
+10000364: a8250000 swl a1,0\(at\)
+10000368: b8250003 swr a1,3\(at\)
+1000036c: 8f858034 lw a1,-32716\(gp\)
10000370: 8f858038 lw a1,-32712\(gp\)
-10000374: 00b12821 addu a1,a1,s1
-10000378: 8f85803c lw a1,-32708\(gp\)
+10000374: 8f85803c lw a1,-32708\(gp\)
+10000378: 8f858034 lw a1,-32716\(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\)
+10000380: 8f858038 lw a1,-32712\(gp\)
+10000384: 00b12821 addu a1,a1,s1
+10000388: 8f85803c lw a1,-32708\(gp\)
+1000038c: 00b12821 addu a1,a1,s1
10000390: 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
+10000394: 8ca50574 lw a1,1396\(a1\)
+10000398: 8f858018 lw a1,-32744\(gp\)
+1000039c: 8ca50580 lw a1,1408\(a1\)
+100003a0: 8f858018 lw a1,-32744\(gp\)
+100003a4: 00b12821 addu a1,a1,s1
+100003a8: 8ca50574 lw a1,1396\(a1\)
+100003ac: 8f858018 lw a1,-32744\(gp\)
+100003b0: 00b12821 addu a1,a1,s1
+100003b4: 8ca50580 lw a1,1408\(a1\)
+100003b8: 8f818018 lw at,-32744\(gp\)
+100003bc: 00250821 addu at,at,a1
+100003c0: 8c250596 lw a1,1430\(at\)
+100003c4: 8f818018 lw at,-32744\(gp\)
+100003c8: 00250821 addu at,at,a1
+100003cc: ac2505ac sw a1,1452\(at\)
+100003d0: 8f818034 lw at,-32716\(gp\)
+100003d4: 88250000 lwl a1,0\(at\)
+100003d8: 98250003 lwr a1,3\(at\)
+100003dc: 8f818038 lw at,-32712\(gp\)
100003e0: 88250000 lwl a1,0\(at\)
100003e4: 98250003 lwr a1,3\(at\)
-100003e8: 8f818038 lw at,-32712\(gp\)
+100003e8: 8f818034 lw at,-32716\(gp\)
100003ec: 00310821 addu at,at,s1
100003f0: 88250000 lwl a1,0\(at\)
100003f4: 98250003 lwr a1,3\(at\)
-100003f8: 8f818040 lw at,-32704\(gp\)
-100003fc: 00250821 addu at,at,a1
+100003f8: 8f818038 lw at,-32712\(gp\)
+100003fc: 00310821 addu at,at,s1
10000400: 88250000 lwl a1,0\(at\)
10000404: 98250003 lwr a1,3\(at\)
-10000408: 8f818044 lw at,-32700\(gp\)
+10000408: 8f818040 lw at,-32704\(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
+10000410: 88250000 lwl a1,0\(at\)
+10000414: 98250003 lwr a1,3\(at\)
+10000418: 8f818044 lw at,-32700\(gp\)
+1000041c: 00250821 addu at,at,a1
+10000420: a8250000 swl a1,0\(at\)
+10000424: b8250003 swr a1,3\(at\)
+10000428: 8f858060 lw a1,-32672\(gp\)
+1000042c: 8f858048 lw a1,-32696\(gp\)
+10000430: 8f998060 lw t9,-32672\(gp\)
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\)
+10000438: 8f998060 lw t9,-32672\(gp\)
+1000043c: 0320f809 jalr t9
+10000440: 00000000 nop
+10000444: 8f998048 lw t9,-32696\(gp\)
+10000448: 0320f809 jalr t9
+1000044c: 00000000 nop
+10000450: 1000ff17 b 100000b0 <fn>
+10000454: 8f858064 lw a1,-32668\(gp\)
+10000458: 8f858018 lw a1,-32744\(gp\)
+1000045c: 10000015 b 100004b4 <fn2>
+10000460: 8ca50574 lw a1,1396\(a1\)
+10000464: 1000ff12 b 100000b0 <fn>
+10000468: 8f85801c lw a1,-32740\(gp\)
+1000046c: 8f858038 lw a1,-32712\(gp\)
+10000470: 10000010 b 100004b4 <fn2>
+10000474: 00000000 nop
+10000478: 8f858024 lw a1,-32732\(gp\)
+1000047c: 1000ff0c b 100000b0 <fn>
+10000480: 00000000 nop
+10000484: 8f858018 lw a1,-32744\(gp\)
+10000488: 1000000a b 100004b4 <fn2>
+1000048c: 8ca50574 lw a1,1396\(a1\)
+10000490: 8f858018 lw a1,-32744\(gp\)
+10000494: 1000ff06 b 100000b0 <fn>
+10000498: 8ca50508 lw a1,1288\(a1\)
+1000049c: 8f818018 lw at,-32744\(gp\)
+100004a0: 00250821 addu at,at,a1
+100004a4: 10000003 b 100004b4 <fn2>
+100004a8: 8c250596 lw a1,1430\(at\)
\.\.\.
-100004a4 <fn2>:
- \.\.\.
-Disassembly of section \.reginfo:
-
-100004b0 <\.reginfo>:
-100004b0: 92020022 .*
+100004b4 <fn2>:
\.\.\.
-100004c4: 101085b0 .*
Disassembly of section \.data:
-101004d0 <_fdata>:
+100104c0 <_fdata>:
\.\.\.
-1010050c <dg1>:
+100104fc <dg1>:
\.\.\.
-10100548 <sp2>:
+10010538 <sp2>:
\.\.\.
-10100584 <dg2>:
+10010574 <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 .*
+100105b0 <_GLOBAL_OFFSET_TABLE_>:
+100105b0: 00000000 .*
+100105b4: 80000000 .*
+100105b8: 10010000 .*
+100105bc: 100104fc .*
+100105c0: 10010508 .*
+100105c4: 1002e73c .*
+100105c8: 1001051e .*
+100105cc: 10010534 .*
+100105d0: 100000b0 .*
+100105d4: 10010574 .*
+100105d8: 10010580 .*
+100105dc: 1002e7b4 .*
+100105e0: 10010596 .*
+100105e4: 100105ac .*
+100105e8: 100004b4 .*
+100105ec: 00000000 .*
\.\.\.
-1010060c: 100000a0 .*
-10100610: 100004a4 .*
-10100614: 1010050c .*
-10100618: 10100584 .*
+100105fc: 100000b0 .*
+10010600: 100004b4 .*
+10010604: 100104fc .*
+10010608: 10010574 .*
#pass
diff --git a/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d b/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d
index f885d9dc6d42..94c3097435d6 100644
--- a/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d
+++ b/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d
@@ -14,7 +14,7 @@ Disassembly of section \.MIPS\.options:
1200000b8: 92020022 .*
\.\.\.
1200000d0: 00000001 .*
- 1200000d4: 201085d0 .*
+ 1200000d4: 200185d0 .*
Disassembly of section \.text:
00000001200000e0 <fn>:
@@ -279,55 +279,55 @@ Disassembly of section \.text:
\.\.\.
Disassembly of section \.data:
-00000001201004f0 <_fdata>:
+00000001200104f0 <_fdata>:
\.\.\.
-000000012010052c <dg1>:
+000000012001052c <dg1>:
\.\.\.
-0000000120100568 <sp2>:
+0000000120010568 <sp2>:
\.\.\.
-00000001201005a4 <dg2>:
+00000001200105a4 <dg2>:
\.\.\.
Disassembly of section \.got:
-00000001201005e0 <_GLOBAL_OFFSET_TABLE_>:
+00000001200105e0 <_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 .*
+ 1200105ec: 80000000 .*
+ 1200105f0: 00000001 .*
+ 1200105f4: 20010000 .*
+ 1200105f8: 00000001 .*
+ 1200105fc: 2001052c .*
+ 120010600: 00000001 .*
+ 120010604: 20010538 .*
+ 120010608: 00000001 .*
+ 12001060c: 2002e76c .*
+ 120010610: 00000001 .*
+ 120010614: 2001054e .*
+ 120010618: 00000001 .*
+ 12001061c: 20010564 .*
+ 120010620: 00000001 .*
+ 120010624: 200000e0 .*
+ 120010628: 00000001 .*
+ 12001062c: 200105a4 .*
+ 120010630: 00000001 .*
+ 120010634: 200105b0 .*
+ 120010638: 00000001 .*
+ 12001063c: 2002e7e4 .*
+ 120010640: 00000001 .*
+ 120010644: 200105c6 .*
+ 120010648: 00000001 .*
+ 12001064c: 200105dc .*
+ 120010650: 00000001 .*
+ 120010654: 200004e4 .*
\.\.\.
- 120100678: 00000001 .*
- 12010067c: 200000e0 .*
- 120100680: 00000001 .*
- 120100684: 200004e4 .*
- 120100688: 00000001 .*
- 12010068c: 2010052c .*
- 120100690: 00000001 .*
- 120100694: 201005a4 .*
+ 120010678: 00000001 .*
+ 12001067c: 200000e0 .*
+ 120010680: 00000001 .*
+ 120010684: 200004e4 .*
+ 120010688: 00000001 .*
+ 12001068c: 2001052c .*
+ 120010690: 00000001 .*
+ 120010694: 200105a4 .*
#pass
diff --git a/ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d b/ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d
index 0f992f592551..097ec33ea88a 100644
--- a/ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d
+++ b/ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d
@@ -6,423 +6,424 @@
.*: +file format elf32-n.*mips.*
+Disassembly of section \.reginfo:
+
+10000098 <\.reginfo>:
+10000098: 92020022 .*
+ \.\.\.
+100000ac: 10018790 .*
+
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
+100000b0 <fn>:
+100000b0: 3c050000 lui a1,0x0
+100000b4: 00bc2821 addu a1,a1,gp
+100000b8: 8ca58034 lw a1,-32716\(a1\)
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
+100000c8: 24a5000c addiu a1,a1,12
+100000cc: 3c050000 lui a1,0x0
+100000d0: 00bc2821 addu a1,a1,gp
+100000d4: 8ca58034 lw a1,-32716\(a1\)
+100000d8: 3c010001 lui at,0x1
+100000dc: 3421e240 ori at,at,0xe240
+100000e0: 00a12821 addu a1,a1,at
100000e4: 3c050000 lui a1,0x0
100000e8: 00bc2821 addu a1,a1,gp
100000ec: 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\)
+100000f0: 00b12821 addu a1,a1,s1
+100000f4: 3c050000 lui a1,0x0
+100000f8: 00bc2821 addu a1,a1,gp
+100000fc: 8ca58034 lw a1,-32716\(a1\)
+10000100: 24a5000c addiu a1,a1,12
+10000104: 00b12821 addu a1,a1,s1
+10000108: 3c050000 lui a1,0x0
+1000010c: 00bc2821 addu a1,a1,gp
+10000110: 8ca58034 lw a1,-32716\(a1\)
+10000114: 3c010001 lui at,0x1
+10000118: 3421e240 ori at,at,0xe240
+1000011c: 00a12821 addu a1,a1,at
+10000120: 00b12821 addu a1,a1,s1
10000124: 3c050000 lui a1,0x0
10000128: 00bc2821 addu a1,a1,gp
1000012c: 8ca58034 lw a1,-32716\(a1\)
-10000130: 8ca5000c lw a1,12\(a1\)
+10000130: 8ca50000 lw a1,0\(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
+10000140: 8ca5000c lw a1,12\(a1\)
+10000144: 3c050000 lui a1,0x0
+10000148: 00bc2821 addu a1,a1,gp
+1000014c: 8ca58034 lw a1,-32716\(a1\)
+10000150: 00b12821 addu a1,a1,s1
+10000154: 8ca50000 lw a1,0\(a1\)
+10000158: 3c050000 lui a1,0x0
+1000015c: 00bc2821 addu a1,a1,gp
+10000160: 8ca58034 lw a1,-32716\(a1\)
+10000164: 00b12821 addu a1,a1,s1
+10000168: 8ca5000c lw a1,12\(a1\)
+1000016c: 3c010000 lui at,0x0
+10000170: 003c0821 addu at,at,gp
+10000174: 8c218034 lw at,-32716\(at\)
+10000178: 00250821 addu at,at,a1
+1000017c: 8c250022 lw a1,34\(at\)
+10000180: 3c010000 lui at,0x0
+10000184: 003c0821 addu at,at,gp
+10000188: 8c218034 lw at,-32716\(at\)
+1000018c: 00250821 addu at,at,a1
+10000190: ac250038 sw a1,56\(at\)
+10000194: 3c010000 lui at,0x0
+10000198: 003c0821 addu at,at,gp
+1000019c: 8c218034 lw at,-32716\(at\)
+100001a0: 88250000 lwl a1,0\(at\)
+100001a4: 98250003 lwr a1,3\(at\)
+100001a8: 3c010000 lui at,0x0
+100001ac: 003c0821 addu at,at,gp
+100001b0: 8c218034 lw at,-32716\(at\)
+100001b4: 2421000c addiu at,at,12
+100001b8: 88250000 lwl a1,0\(at\)
+100001bc: 98250003 lwr a1,3\(at\)
+100001c0: 3c010000 lui at,0x0
+100001c4: 003c0821 addu at,at,gp
+100001c8: 8c218034 lw at,-32716\(at\)
+100001cc: 00310821 addu at,at,s1
+100001d0: 88250000 lwl a1,0\(at\)
+100001d4: 98250003 lwr a1,3\(at\)
+100001d8: 3c010000 lui at,0x0
+100001dc: 003c0821 addu at,at,gp
+100001e0: 8c218034 lw at,-32716\(at\)
+100001e4: 2421000c addiu at,at,12
+100001e8: 00310821 addu at,at,s1
+100001ec: 88250000 lwl a1,0\(at\)
+100001f0: 98250003 lwr a1,3\(at\)
+100001f4: 3c010000 lui at,0x0
+100001f8: 003c0821 addu at,at,gp
+100001fc: 8c218034 lw at,-32716\(at\)
+10000200: 24210022 addiu at,at,34
+10000204: 00250821 addu at,at,a1
+10000208: 88250000 lwl a1,0\(at\)
+1000020c: 98250003 lwr a1,3\(at\)
+10000210: 3c010000 lui at,0x0
+10000214: 003c0821 addu at,at,gp
+10000218: 8c218034 lw at,-32716\(at\)
+1000021c: 24210038 addiu at,at,56
+10000220: 00250821 addu at,at,a1
+10000224: a8250000 swl a1,0\(at\)
+10000228: b8250003 swr a1,3\(at\)
+1000022c: 8f858018 lw a1,-32744\(gp\)
+10000230: 24a506ec addiu a1,a1,1772
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\)
+10000238: 24a506f8 addiu a1,a1,1784
+1000023c: 8f85801c lw a1,-32740\(gp\)
+10000240: 24a5e92c addiu a1,a1,-5844
+10000244: 8f858018 lw a1,-32744\(gp\)
+10000248: 24a506ec addiu a1,a1,1772
+1000024c: 00b12821 addu a1,a1,s1
+10000250: 8f858018 lw a1,-32744\(gp\)
+10000254: 24a506f8 addiu a1,a1,1784
+10000258: 00b12821 addu a1,a1,s1
+1000025c: 8f85801c lw a1,-32740\(gp\)
+10000260: 24a5e92c addiu a1,a1,-5844
+10000264: 00b12821 addu a1,a1,s1
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\)
+1000026c: 8ca506ec lw a1,1772\(a1\)
+10000270: 8f858018 lw a1,-32744\(gp\)
+10000274: 8ca506f8 lw a1,1784\(a1\)
+10000278: 8f858018 lw a1,-32744\(gp\)
+1000027c: 00b12821 addu a1,a1,s1
+10000280: 8ca506ec lw a1,1772\(a1\)
+10000284: 8f858018 lw a1,-32744\(gp\)
+10000288: 00b12821 addu a1,a1,s1
+1000028c: 8ca506f8 lw a1,1784\(a1\)
+10000290: 8f818018 lw at,-32744\(gp\)
+10000294: 00250821 addu at,at,a1
+10000298: 8c25070e lw a1,1806\(at\)
+1000029c: 8f818018 lw at,-32744\(gp\)
+100002a0: 00250821 addu at,at,a1
+100002a4: ac250724 sw a1,1828\(at\)
100002a8: 8f818018 lw at,-32744\(gp\)
-100002ac: 24210708 addiu at,at,1800
+100002ac: 242106ec addiu at,at,1772
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
+100002bc: 242106f8 addiu at,at,1784
+100002c0: 88250000 lwl a1,0\(at\)
+100002c4: 98250003 lwr a1,3\(at\)
+100002c8: 8f818018 lw at,-32744\(gp\)
+100002cc: 242106ec addiu at,at,1772
+100002d0: 00310821 addu at,at,s1
+100002d4: 88250000 lwl a1,0\(at\)
+100002d8: 98250003 lwr a1,3\(at\)
+100002dc: 8f818018 lw at,-32744\(gp\)
+100002e0: 242106f8 addiu at,at,1784
+100002e4: 00310821 addu at,at,s1
+100002e8: 88250000 lwl a1,0\(at\)
+100002ec: 98250003 lwr a1,3\(at\)
+100002f0: 8f818018 lw at,-32744\(gp\)
+100002f4: 2421070e addiu at,at,1806
+100002f8: 00250821 addu at,at,a1
+100002fc: 88250000 lwl a1,0\(at\)
+10000300: 98250003 lwr a1,3\(at\)
+10000304: 8f818018 lw at,-32744\(gp\)
+10000308: 24210724 addiu at,at,1828
+1000030c: 00250821 addu at,at,a1
+10000310: a8250000 swl a1,0\(at\)
+10000314: b8250003 swr a1,3\(at\)
+10000318: 3c050000 lui a1,0x0
+1000031c: 00bc2821 addu a1,a1,gp
+10000320: 8ca5802c lw a1,-32724\(a1\)
+10000324: 8f858020 lw a1,-32736\(gp\)
+10000328: 24a500b0 addiu a1,a1,176
+1000032c: 3c190000 lui t9,0x0
+10000330: 033cc821 addu t9,t9,gp
+10000334: 8f39802c lw t9,-32724\(t9\)
+10000338: 8f998020 lw t9,-32736\(gp\)
+1000033c: 273900b0 addiu t9,t9,176
+10000340: 3c190000 lui t9,0x0
+10000344: 033cc821 addu t9,t9,gp
+10000348: 8f39802c lw t9,-32724\(t9\)
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
+10000354: 8f998020 lw t9,-32736\(gp\)
+10000358: 273900b0 addiu t9,t9,176
+1000035c: 0320f809 jalr t9
+10000360: 00000000 nop
+10000364: 3c050000 lui a1,0x0
+10000368: 00bc2821 addu a1,a1,gp
+1000036c: 8ca58038 lw a1,-32712\(a1\)
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
+1000037c: 24a5000c addiu a1,a1,12
+10000380: 3c050000 lui a1,0x0
+10000384: 00bc2821 addu a1,a1,gp
+10000388: 8ca58038 lw a1,-32712\(a1\)
+1000038c: 3c010001 lui at,0x1
+10000390: 3421e240 ori at,at,0xe240
+10000394: 00a12821 addu a1,a1,at
10000398: 3c050000 lui a1,0x0
1000039c: 00bc2821 addu a1,a1,gp
100003a0: 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\)
+100003a4: 00b12821 addu a1,a1,s1
+100003a8: 3c050000 lui a1,0x0
+100003ac: 00bc2821 addu a1,a1,gp
+100003b0: 8ca58038 lw a1,-32712\(a1\)
+100003b4: 24a5000c addiu a1,a1,12
+100003b8: 00b12821 addu a1,a1,s1
+100003bc: 3c050000 lui a1,0x0
+100003c0: 00bc2821 addu a1,a1,gp
+100003c4: 8ca58038 lw a1,-32712\(a1\)
+100003c8: 3c010001 lui at,0x1
+100003cc: 3421e240 ori at,at,0xe240
+100003d0: 00a12821 addu a1,a1,at
+100003d4: 00b12821 addu a1,a1,s1
100003d8: 3c050000 lui a1,0x0
100003dc: 00bc2821 addu a1,a1,gp
100003e0: 8ca58038 lw a1,-32712\(a1\)
-100003e4: 8ca5000c lw a1,12\(a1\)
+100003e4: 8ca50000 lw a1,0\(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
+100003f4: 8ca5000c lw a1,12\(a1\)
+100003f8: 3c050000 lui a1,0x0
+100003fc: 00bc2821 addu a1,a1,gp
+10000400: 8ca58038 lw a1,-32712\(a1\)
+10000404: 00b12821 addu a1,a1,s1
+10000408: 8ca50000 lw a1,0\(a1\)
+1000040c: 3c050000 lui a1,0x0
+10000410: 00bc2821 addu a1,a1,gp
+10000414: 8ca58038 lw a1,-32712\(a1\)
+10000418: 00b12821 addu a1,a1,s1
+1000041c: 8ca5000c lw a1,12\(a1\)
+10000420: 3c010000 lui at,0x0
+10000424: 003c0821 addu at,at,gp
+10000428: 8c218038 lw at,-32712\(at\)
+1000042c: 00250821 addu at,at,a1
+10000430: 8c250022 lw a1,34\(at\)
+10000434: 3c010000 lui at,0x0
+10000438: 003c0821 addu at,at,gp
+1000043c: 8c218038 lw at,-32712\(at\)
+10000440: 00250821 addu at,at,a1
+10000444: ac250038 sw a1,56\(at\)
+10000448: 3c010000 lui at,0x0
+1000044c: 003c0821 addu at,at,gp
+10000450: 8c218038 lw at,-32712\(at\)
+10000454: 88250000 lwl a1,0\(at\)
+10000458: 98250003 lwr a1,3\(at\)
+1000045c: 3c010000 lui at,0x0
+10000460: 003c0821 addu at,at,gp
+10000464: 8c218038 lw at,-32712\(at\)
+10000468: 2421000c addiu at,at,12
+1000046c: 88250000 lwl a1,0\(at\)
+10000470: 98250003 lwr a1,3\(at\)
+10000474: 3c010000 lui at,0x0
+10000478: 003c0821 addu at,at,gp
+1000047c: 8c218038 lw at,-32712\(at\)
+10000480: 00310821 addu at,at,s1
+10000484: 88250000 lwl a1,0\(at\)
+10000488: 98250003 lwr a1,3\(at\)
+1000048c: 3c010000 lui at,0x0
+10000490: 003c0821 addu at,at,gp
+10000494: 8c218038 lw at,-32712\(at\)
+10000498: 2421000c addiu at,at,12
+1000049c: 00310821 addu at,at,s1
+100004a0: 88250000 lwl a1,0\(at\)
+100004a4: 98250003 lwr a1,3\(at\)
+100004a8: 3c010000 lui at,0x0
+100004ac: 003c0821 addu at,at,gp
+100004b0: 8c218038 lw at,-32712\(at\)
+100004b4: 24210022 addiu at,at,34
+100004b8: 00250821 addu at,at,a1
+100004bc: 88250000 lwl a1,0\(at\)
+100004c0: 98250003 lwr a1,3\(at\)
+100004c4: 3c010000 lui at,0x0
+100004c8: 003c0821 addu at,at,gp
+100004cc: 8c218038 lw at,-32712\(at\)
+100004d0: 24210038 addiu at,at,56
+100004d4: 00250821 addu at,at,a1
+100004d8: a8250000 swl a1,0\(at\)
+100004dc: b8250003 swr a1,3\(at\)
+100004e0: 8f858018 lw a1,-32744\(gp\)
+100004e4: 24a50764 addiu a1,a1,1892
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\)
+100004ec: 24a50770 addiu a1,a1,1904
+100004f0: 8f85801c lw a1,-32740\(gp\)
+100004f4: 24a5e9a4 addiu a1,a1,-5724
+100004f8: 8f858018 lw a1,-32744\(gp\)
+100004fc: 24a50764 addiu a1,a1,1892
+10000500: 00b12821 addu a1,a1,s1
+10000504: 8f858018 lw a1,-32744\(gp\)
+10000508: 24a50770 addiu a1,a1,1904
+1000050c: 00b12821 addu a1,a1,s1
+10000510: 8f85801c lw a1,-32740\(gp\)
+10000514: 24a5e9a4 addiu a1,a1,-5724
+10000518: 00b12821 addu a1,a1,s1
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\)
+10000520: 8ca50764 lw a1,1892\(a1\)
+10000524: 8f858018 lw a1,-32744\(gp\)
+10000528: 8ca50770 lw a1,1904\(a1\)
+1000052c: 8f858018 lw a1,-32744\(gp\)
+10000530: 00b12821 addu a1,a1,s1
+10000534: 8ca50764 lw a1,1892\(a1\)
+10000538: 8f858018 lw a1,-32744\(gp\)
+1000053c: 00b12821 addu a1,a1,s1
+10000540: 8ca50770 lw a1,1904\(a1\)
+10000544: 8f818018 lw at,-32744\(gp\)
+10000548: 00250821 addu at,at,a1
+1000054c: 8c250786 lw a1,1926\(at\)
+10000550: 8f818018 lw at,-32744\(gp\)
+10000554: 00250821 addu at,at,a1
+10000558: ac25079c sw a1,1948\(at\)
1000055c: 8f818018 lw at,-32744\(gp\)
-10000560: 24210780 addiu at,at,1920
+10000560: 24210764 addiu at,at,1892
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
+10000570: 24210770 addiu at,at,1904
+10000574: 88250000 lwl a1,0\(at\)
+10000578: 98250003 lwr a1,3\(at\)
+1000057c: 8f818018 lw at,-32744\(gp\)
+10000580: 24210764 addiu at,at,1892
+10000584: 00310821 addu at,at,s1
+10000588: 88250000 lwl a1,0\(at\)
+1000058c: 98250003 lwr a1,3\(at\)
+10000590: 8f818018 lw at,-32744\(gp\)
+10000594: 24210770 addiu at,at,1904
+10000598: 00310821 addu at,at,s1
+1000059c: 88250000 lwl a1,0\(at\)
+100005a0: 98250003 lwr a1,3\(at\)
+100005a4: 8f818018 lw at,-32744\(gp\)
+100005a8: 24210786 addiu at,at,1926
+100005ac: 00250821 addu at,at,a1
+100005b0: 88250000 lwl a1,0\(at\)
+100005b4: 98250003 lwr a1,3\(at\)
+100005b8: 8f818018 lw at,-32744\(gp\)
+100005bc: 2421079c addiu at,at,1948
+100005c0: 00250821 addu at,at,a1
+100005c4: a8250000 swl a1,0\(at\)
+100005c8: b8250003 swr a1,3\(at\)
+100005cc: 3c050000 lui a1,0x0
+100005d0: 00bc2821 addu a1,a1,gp
+100005d4: 8ca58030 lw a1,-32720\(a1\)
+100005d8: 8f858020 lw a1,-32736\(gp\)
+100005dc: 24a506b0 addiu a1,a1,1712
+100005e0: 3c190000 lui t9,0x0
+100005e4: 033cc821 addu t9,t9,gp
+100005e8: 8f398030 lw t9,-32720\(t9\)
+100005ec: 8f998020 lw t9,-32736\(gp\)
+100005f0: 273906b0 addiu t9,t9,1712
+100005f4: 3c190000 lui t9,0x0
+100005f8: 033cc821 addu t9,t9,gp
+100005fc: 8f398030 lw t9,-32720\(t9\)
10000600: 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>
+10000608: 8f998020 lw t9,-32736\(gp\)
+1000060c: 273906b0 addiu t9,t9,1712
+10000610: 0320f809 jalr t9
+10000614: 00000000 nop
+10000618: 3c050000 lui a1,0x0
+1000061c: 00bc2821 addu a1,a1,gp
+10000620: 8ca58034 lw a1,-32716\(a1\)
+10000624: 1000fea2 b 100000b0 <fn>
+10000628: 00000000 nop
+1000062c: 3c050000 lui a1,0x0
+10000630: 00bc2821 addu a1,a1,gp
+10000634: 8ca58038 lw a1,-32712\(a1\)
+10000638: 8ca50000 lw a1,0\(a1\)
+1000063c: 1000001c b 100006b0 <fn2>
10000640: 00000000 nop
10000644: 8f858018 lw a1,-32744\(gp\)
-10000648: 24a50780 addiu a1,a1,1920
-1000064c: 10000014 b 100006a0 <fn2>
+10000648: 24a506ec addiu a1,a1,1772
+1000064c: 1000fe98 b 100000b0 <fn>
10000650: 00000000 nop
-10000654: 8f85801c lw a1,-32740\(gp\)
-10000658: 24a5e93c addiu a1,a1,-5828
-1000065c: 1000fe90 b 100000a0 <fn>
+10000654: 8f858018 lw a1,-32744\(gp\)
+10000658: 24a50770 addiu a1,a1,1904
+1000065c: 10000014 b 100006b0 <fn2>
10000660: 00000000 nop
-10000664: 8f858018 lw a1,-32744\(gp\)
-10000668: 8ca50774 lw a1,1908\(a1\)
-1000066c: 1000000c b 100006a0 <fn2>
+10000664: 8f85801c lw a1,-32740\(gp\)
+10000668: 24a5e92c addiu a1,a1,-5844
+1000066c: 1000fe90 b 100000b0 <fn>
10000670: 00000000 nop
10000674: 8f858018 lw a1,-32744\(gp\)
-10000678: 8ca50708 lw a1,1800\(a1\)
-1000067c: 1000fe88 b 100000a0 <fn>
+10000678: 8ca50764 lw a1,1892\(a1\)
+1000067c: 1000000c b 100006b0 <fn2>
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 .*
+10000684: 8f858018 lw a1,-32744\(gp\)
+10000688: 8ca506f8 lw a1,1784\(a1\)
+1000068c: 1000fe88 b 100000b0 <fn>
+10000690: 00000000 nop
+10000694: 8f818018 lw at,-32744\(gp\)
+10000698: 00250821 addu at,at,a1
+1000069c: 8c250786 lw a1,1926\(at\)
+100006a0: 10000003 b 100006b0 <fn2>
+100006a4: 00000000 nop
\.\.\.
-100006b4: 101087a0 .*
Disassembly of section \.data:
-101006c0 <_fdata>:
+100106b0 <_fdata>:
\.\.\.
-101006fc <dg1>:
+100106ec <dg1>:
\.\.\.
-10100738 <sp2>:
+10010728 <sp2>:
\.\.\.
-10100774 <dg2>:
+10010764 <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 .*
+100107a0 <_GLOBAL_OFFSET_TABLE_>:
+100107a0: 00000000 .*
+100107a4: 80000000 .*
+100107a8: 10010000 .*
+100107ac: 10030000 .*
+100107b0: 10000000 .*
+100107b4: 00000000 .*
+100107b8: 00000000 .*
+100107bc: 100000b0 .*
+100107c0: 100006b0 .*
+100107c4: 100106ec .*
+100107c8: 10010764 .*
#pass
diff --git a/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d b/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d
index 60a89a836fc6..8baa1952284b 100644
--- a/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d
+++ b/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d
@@ -14,7 +14,7 @@ Disassembly of section \.MIPS\.options:
1200000b8: 92020022 .*
\.\.\.
1200000d0: 00000001 .*
- 1200000d4: 201087c0 .*
+ 1200000d4: 200187c0 .*
Disassembly of section \.text:
00000001200000e0 <fn>:
@@ -403,35 +403,35 @@ Disassembly of section \.text:
\.\.\.
Disassembly of section \.data:
-00000001201006e0 <_fdata>:
+00000001200106e0 <_fdata>:
\.\.\.
-000000012010071c <dg1>:
+000000012001071c <dg1>:
\.\.\.
-0000000120100758 <sp2>:
+0000000120010758 <sp2>:
\.\.\.
-0000000120100794 <dg2>:
+0000000120010794 <dg2>:
\.\.\.
Disassembly of section \.got:
-00000001201007d0 <_GLOBAL_OFFSET_TABLE_>:
+00000001200107d0 <_GLOBAL_OFFSET_TABLE_>:
\.\.\.
- 1201007dc: 80000000 .*
- 1201007e0: 00000001 .*
- 1201007e4: 20100000 .*
- 1201007e8: 00000001 .*
- 1201007ec: 20120000 .*
- 1201007f0: 00000001 .*
- 1201007f4: 20000000 .*
+ 1200107dc: 80000000 .*
+ 1200107e0: 00000001 .*
+ 1200107e4: 20010000 .*
+ 1200107e8: 00000001 .*
+ 1200107ec: 20030000 .*
+ 1200107f0: 00000001 .*
+ 1200107f4: 20000000 .*
\.\.\.
- 120100808: 00000001 .*
- 12010080c: 200000e0 .*
- 120100810: 00000001 .*
- 120100814: 200006e0 .*
- 120100818: 00000001 .*
- 12010081c: 2010071c .*
- 120100820: 00000001 .*
- 120100824: 20100794 .*
+ 120010808: 00000001 .*
+ 12001080c: 200000e0 .*
+ 120010810: 00000001 .*
+ 120010814: 200006e0 .*
+ 120010818: 00000001 .*
+ 12001081c: 2001071c .*
+ 120010820: 00000001 .*
+ 120010824: 20010794 .*
#pass
diff --git a/ld/testsuite/ld-mips-elf/hash1.s b/ld/testsuite/ld-mips-elf/hash1.s
new file mode 100644
index 000000000000..4e7fe2f0a494
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/hash1.s
@@ -0,0 +1 @@
+ nop
diff --git a/ld/testsuite/ld-mips-elf/hash1a.d b/ld/testsuite/ld-mips-elf/hash1a.d
new file mode 100644
index 000000000000..f3adaa8d5e7b
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/hash1a.d
@@ -0,0 +1,4 @@
+#source: hash1.s
+#ld: -shared --hash-style=sysv
+#objdump: -dr
+#pass
diff --git a/ld/testsuite/ld-mips-elf/hash1b.d b/ld/testsuite/ld-mips-elf/hash1b.d
new file mode 100644
index 000000000000..5af9037cfc37
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/hash1b.d
@@ -0,0 +1,3 @@
+#source: hash1.s
+#ld: -shared --hash-style=both
+#error: .gnu.hash is incompatible with the MIPS ABI
diff --git a/ld/testsuite/ld-mips-elf/hash1c.d b/ld/testsuite/ld-mips-elf/hash1c.d
new file mode 100644
index 000000000000..09bff3cad962
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/hash1c.d
@@ -0,0 +1,3 @@
+#source: hash1.s
+#ld: -shared --hash-style=gnu
+#error: .gnu.hash is incompatible with the MIPS ABI
diff --git a/ld/testsuite/ld-mips-elf/jalbal.d b/ld/testsuite/ld-mips-elf/jalbal.d
index bc9a5129ffe0..49cda75c76bb 100644
--- a/ld/testsuite/ld-mips-elf/jalbal.d
+++ b/ld/testsuite/ld-mips-elf/jalbal.d
@@ -1,7 +1,7 @@
#name: jal to bal
#source: jalbal.s
#as: -EB -n32 -march=rm9000
-#ld: -EB -e s1 -Ttext 0x100000a0
+#ld: -EB -e s1 -Ttext 0x200000a0
#objdump: -d
.*file format elf.*mips.*
@@ -9,16 +9,16 @@
Disassembly of section \.text:
.* <s1>:
-.* 0c00802a jal .*100200a8 <s3>
+.* 0c00802a jal .*200200a8 <s3>
.* 00000000 nop
-.* 04117fff bal .*100200a8 <s3>
+.* 04117fff bal .*200200a8 <s3>
.* <s2>:
.* \.\.\.
.* <s3>:
-.* 04118000 bal .*100000ac <s2>
+.* 04118000 bal .*200000ac <s2>
.* 00000000 nop
-.* 0c00002b jal .*100000ac <s2>
+.* 0c00002b jal .*200000ac <s2>
.* 00000000 nop
.* \.\.\.
diff --git a/ld/testsuite/ld-mips-elf/jaloverflow-2.d b/ld/testsuite/ld-mips-elf/jaloverflow-2.d
index b28b4edb2f44..b40f4281777c 100644
--- a/ld/testsuite/ld-mips-elf/jaloverflow-2.d
+++ b/ld/testsuite/ld-mips-elf/jaloverflow-2.d
@@ -1,8 +1,8 @@
#name: JAL overflow 2
#source: jaloverflow-2.s
#as:
-#ld: -Ttext=0x10000000 -e start
+#ld: -Ttext=0x20000000 -e start
#objdump: -dr
#...
-0*10000000: 0c000000.*
+0*20000000: 0c000000.*
#pass
diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp
index b5ddaefd58f5..6e3e1a34418b 100644
--- a/ld/testsuite/ld-mips-elf/mips-elf.exp
+++ b/ld/testsuite/ld-mips-elf/mips-elf.exp
@@ -21,7 +21,7 @@ if {[istarget "mips*-*-vxworks"]} {
{"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
"-mips2" {vxworks1-lib.s}
{{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
- {readelf --symbols vxworks1-lib.nd}}
+ {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
"libvxworks1.so"}
{"VxWorks executable test 1 (dynamic)" \
"tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
@@ -107,6 +107,10 @@ if $has_newabi {
}
run_dump_test "reloc-2"
run_dump_test "reloc-merge-lo16"
+run_dump_test "reloc-3"
+if {$has_newabi} {
+ run_dump_test "reloc-3-n32"
+}
if {$has_newabi && $linux_gnu} {
run_dump_test "eh-frame1-n32"
run_dump_test "eh-frame1-n64"
@@ -137,16 +141,19 @@ if $has_newabi {
run_dump_test "emit-relocs-1"
}
+run_dump_test "hash1a"
+run_dump_test "hash1b"
+run_dump_test "hash1c"
+
if {[istarget mips*-*-linux*]} {
# The number of symbols that are always included in the symbol table
- # for these tests. The 5 are:
+ # for these tests. The 4 are:
#
# the null symbol entry
# the .MIPS.stubs section symbol
- # the .text section symbol
# _gp
# _GLOBAL_OFFSET_TABLE_
- set base_syms 5
+ set base_syms 4
foreach dynsym { 7fff 8000 fff0 10000 2fe80 } {
run_ld_link_tests \
[list [list \
@@ -243,3 +250,43 @@ if {[istarget mips*-*-linux*]} {
run_ld_link_tests $mips_tls_tests
}
+set mips16_call_global_test {
+ {"Global calls from mips16"
+ ""
+ "-mips32r2" {mips16-call-global-1.s mips16-call-global-2.s mips16-call-global-3.s}
+ {{objdump -dr mips16-call-global.d}}
+ "mips16-call-global"}
+}
+
+run_ld_link_tests $mips16_call_global_test
+
+set mips16_intermix_test {
+ {"Intermixing mips32 and mips16 functions"
+ ""
+ "-mips32r2" {mips16-intermix-1.s mips16-intermix-2.s}
+ {{objdump -t mips16-intermix.d}}
+ "mips16-intermix"}
+}
+
+run_ld_link_tests $mips16_intermix_test
+
+run_dump_test "mips16-local-stubs-1"
+
+run_dump_test "attr-gnu-4-00"
+run_dump_test "attr-gnu-4-01"
+run_dump_test "attr-gnu-4-02"
+run_dump_test "attr-gnu-4-03"
+run_dump_test "attr-gnu-4-10"
+run_dump_test "attr-gnu-4-11"
+run_dump_test "attr-gnu-4-12"
+run_dump_test "attr-gnu-4-13"
+run_dump_test "attr-gnu-4-14"
+run_dump_test "attr-gnu-4-20"
+run_dump_test "attr-gnu-4-21"
+run_dump_test "attr-gnu-4-22"
+run_dump_test "attr-gnu-4-23"
+run_dump_test "attr-gnu-4-30"
+run_dump_test "attr-gnu-4-31"
+run_dump_test "attr-gnu-4-32"
+run_dump_test "attr-gnu-4-33"
+run_dump_test "attr-gnu-4-41"
diff --git a/ld/testsuite/ld-mips-elf/mips16-call-global-1.s b/ld/testsuite/ld-mips-elf/mips16-call-global-1.s
new file mode 100644
index 000000000000..1e60bcc14ccc
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-call-global-1.s
@@ -0,0 +1,12 @@
+ .set mips16
+
+ .globl __start
+ .ent __start
+__start:
+ .frame $sp,24,$31
+ save 24,$31
+ jal x+8
+ jal y+8
+ restore 24,$31
+ j $31
+ .end __start
diff --git a/ld/testsuite/ld-mips-elf/mips16-call-global-2.s b/ld/testsuite/ld-mips-elf/mips16-call-global-2.s
new file mode 100644
index 000000000000..2843fcd6ecd4
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-call-global-2.s
@@ -0,0 +1,8 @@
+ .set mips16
+
+ .globl x
+ .ent x
+ .type x,@function
+x:
+ jr $31
+ .end x
diff --git a/ld/testsuite/ld-mips-elf/mips16-call-global-3.s b/ld/testsuite/ld-mips-elf/mips16-call-global-3.s
new file mode 100644
index 000000000000..5113c5d44a94
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-call-global-3.s
@@ -0,0 +1,16 @@
+ .set nomips16
+
+ .globl y
+ .ent y
+ .type y,@function
+y:
+ jr $31
+ .end y
+
+ .ent z
+ .type z,@function
+z:
+ jr $31
+ .end z
+
+ .space 8
diff --git a/ld/testsuite/ld-mips-elf/mips16-call-global.d b/ld/testsuite/ld-mips-elf/mips16-call-global.d
new file mode 100644
index 000000000000..051ebcdae8b2
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-call-global.d
@@ -0,0 +1,39 @@
+
+.*: file format elf.*mips
+
+Disassembly of section .text:
+
+.*0090 <__start>:
+.*0090: 64c3 save 24,ra
+.*0092: 1a00 002e jal .*00b8 <x\+0x8>
+.*0096: 6500 nop
+.*0098: 1e00 0032 jalx .*00c8 <z>
+.*009c: 6500 nop
+.*009e: 6443 restore 24,ra
+.*00a0: e8a0 jrc ra
+.*00a2: 6500 nop
+.*00a4: 6500 nop
+.*00a6: 6500 nop
+.*00a8: 6500 nop
+.*00aa: 6500 nop
+.*00ac: 6500 nop
+.*00ae: 6500 nop
+
+.*00b0 <x>:
+.*00b0: e8a0 jrc ra
+.*00b2: 6500 nop
+.*00b4: 6500 nop
+.*00b6: 6500 nop
+.*00b8: 6500 nop
+.*00ba: 6500 nop
+.*00bc: 6500 nop
+.*00be: 6500 nop
+
+.*00c0 <y>:
+.*00c0: 03e00008 jr ra
+.*00c4: 00000000 nop
+
+.*00c8 <z>:
+.*00c8: 03e00008 jr ra
+.*00cc: 00000000 nop
+ \.\.\.
diff --git a/ld/testsuite/ld-mips-elf/mips16-intermix-1.s b/ld/testsuite/ld-mips-elf/mips16-intermix-1.s
new file mode 100644
index 000000000000..c596619c9493
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-intermix-1.s
@@ -0,0 +1,104 @@
+ .text
+ .align 2
+ .globl __start
+ .set nomips16
+ .ent __start
+__start:
+ .frame $sp,56,$31 # vars= 0, regs= 3/2, args= 24, gp= 0
+ .mask 0x80030000,-24
+ .fmask 0x00f00000,-8
+ .set noreorder
+ .set nomacro
+
+ addiu $sp,$sp,-56
+ sw $31,32($sp)
+ sw $17,28($sp)
+ sw $16,24($sp)
+ sdc1 $f22,48($sp)
+ sdc1 $f20,40($sp)
+ jal m32_l
+ move $4,$17
+
+ move $4,$17
+ jal m16_l
+ move $16,$2
+
+ addu $16,$16,$2
+ jal m32_d
+ mov.d $f12,$f22
+
+ addu $16,$16,$2
+ jal m16_d
+ mov.d $f12,$f22
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m32_ld
+ addu $16,$16,$2
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m16_ld
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m32_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m16_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ sdc1 $f22,16($sp)
+ mov.d $f12,$f22
+ jal m32_dlld
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ mov.d $f12,$f22
+ sdc1 $f22,16($sp)
+ jal m16_dlld
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m32_d_l
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m16_d_l
+ mov.d $f20,$f0
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal f32
+ add.d $f20,$f20,$f0
+
+ move $4,$17
+ add.d $f20,$f20,$f0
+ mfc1 $7,$f22
+ jal f16
+ mfc1 $6,$f23
+
+ add.d $f20,$f20,$f0
+ lw $31,32($sp)
+ trunc.w.d $f0,$f20
+ lw $17,28($sp)
+ mfc1 $3,$f0
+ addu $2,$3,$16
+ lw $16,24($sp)
+ ldc1 $f22,48($sp)
+ ldc1 $f20,40($sp)
+ j $31
+ addiu $sp,$sp,56
+
+ .set macro
+ .set reorder
+ .end __start
diff --git a/ld/testsuite/ld-mips-elf/mips16-intermix-2.s b/ld/testsuite/ld-mips-elf/mips16-intermix-2.s
new file mode 100644
index 000000000000..472f0c932667
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-intermix-2.s
@@ -0,0 +1,2631 @@
+ .text
+ .align 2
+ .globl m32_l
+ .set nomips16
+ .ent m32_l
+m32_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_l
+
+ .align 2
+ .globl m16_l
+ .set mips16
+ .ent m16_l
+m16_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static_l
+m32_static_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_static_l
+
+ .align 2
+ .set mips16
+ .ent m16_static_l
+m16_static_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_static_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_l
+m32_static1_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_static1_l
+
+ .align 2
+ .set mips16
+ .ent m16_static1_l
+m16_static1_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_static1_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_l
+m32_static32_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_static32_l
+
+ .align 2
+ .set mips16
+ .ent m16_static32_l
+m16_static32_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_static32_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_l
+m32_static16_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ move $2,$4
+
+ .set macro
+ .set reorder
+ .end m32_static16_l
+
+ .align 2
+ .set mips16
+ .ent m16_static16_l
+m16_static16_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+ j $31
+ move $2,$4
+ .set macro
+ .set reorder
+
+ .end m16_static16_l
+
+ .align 2
+ .globl m32_d
+ .set nomips16
+ .ent m32_d
+m32_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_d
+
+ .align 2
+ .globl m16_d
+ .set mips16
+ .ent m16_d
+m16_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_d
+ # Stub function for m16_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_d
+__fn_stub_m16_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static_d
+m32_static_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static_d
+
+ .align 2
+ .set mips16
+ .ent m16_static_d
+m16_static_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_static_d
+ # Stub function for m16_static_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static_d
+__fn_stub_m16_static_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_d
+m32_static1_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static1_d
+
+ .align 2
+ .set mips16
+ .ent m16_static1_d
+m16_static1_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_static1_d
+ # Stub function for m16_static1_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static1_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static1_d
+__fn_stub_m16_static1_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static1_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static1_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_d
+m32_static32_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static32_d
+
+ .align 2
+ .set mips16
+ .ent m16_static32_d
+m16_static32_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_static32_d
+ # Stub function for m16_static32_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static32_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static32_d
+__fn_stub_m16_static32_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static32_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static32_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_d
+m32_static16_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f12,$f12
+ j $31
+ mfc1 $2,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static16_d
+
+ .align 2
+ .set mips16
+ .ent m16_static16_d
+m16_static16_d:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_fixdfsi
+ restore 24,$31
+ j $31
+ .end m16_static16_d
+ # Stub function for m16_static16_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static16_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static16_d
+__fn_stub_m16_static16_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static16_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static16_d
+ .previous
+
+ .align 2
+ .globl m32_ld
+ .set nomips16
+ .ent m32_ld
+m32_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_ld
+
+ .align 2
+ .globl m16_ld
+ .set mips16
+ .ent m16_ld
+m16_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_ld
+
+ .align 2
+ .set nomips16
+ .ent m32_static_ld
+m32_static_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_static_ld
+
+ .align 2
+ .set mips16
+ .ent m16_static_ld
+m16_static_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static_ld
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_ld
+m32_static1_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_static1_ld
+
+ .align 2
+ .set mips16
+ .ent m16_static1_ld
+m16_static1_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static1_ld
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_ld
+m32_static32_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_static32_ld
+
+ .align 2
+ .set mips16
+ .ent m16_static32_ld
+m16_static32_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static32_ld
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_ld
+m32_static16_ld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $7,$f2
+ mtc1 $6,$f3
+ trunc.w.d $f0,$f2
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$4
+
+ .set macro
+ .set reorder
+ .end m32_static16_ld
+
+ .align 2
+ .set mips16
+ .ent m16_static16_ld
+m16_static16_ld:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ move $16,$4
+ move $5,$7
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $4,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static16_ld
+
+ .align 2
+ .globl m32_dl
+ .set nomips16
+ .ent m32_dl
+m32_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_dl
+
+ .align 2
+ .globl m16_dl
+ .set mips16
+ .ent m16_dl
+m16_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_dl
+ # Stub function for m16_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_dl
+__fn_stub_m16_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_dl
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static_dl
+m32_static_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_static_dl
+
+ .align 2
+ .set mips16
+ .ent m16_static_dl
+m16_static_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static_dl
+ # Stub function for m16_static_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_static_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static_dl
+__fn_stub_m16_static_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static_dl
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_dl
+m32_static1_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_static1_dl
+
+ .align 2
+ .set mips16
+ .ent m16_static1_dl
+m16_static1_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static1_dl
+ # Stub function for m16_static1_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_static1_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static1_dl
+__fn_stub_m16_static1_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static1_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static1_dl
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_dl
+m32_static32_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_static32_dl
+
+ .align 2
+ .set mips16
+ .ent m16_static32_dl
+m16_static32_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static32_dl
+ # Stub function for m16_static32_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_static32_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static32_dl
+__fn_stub_m16_static32_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static32_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static32_dl
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_dl
+m32_static16_dl:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f0,$f12
+ mfc1 $24,$f0
+ j $31
+ addu $2,$24,$6
+
+ .set macro
+ .set reorder
+ .end m32_static16_dl
+
+ .align 2
+ .set mips16
+ .ent m16_static16_dl
+m16_static16_dl:
+ .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
+ .mask 0x80010000,-4
+ .fmask 0x00000000,0
+ save 24,$16,$31
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $16,$6
+ .set macro
+ .set reorder
+
+ addu $2,$16
+ restore 24,$16,$31
+ j $31
+ .end m16_static16_dl
+ # Stub function for m16_static16_dl (double)
+ .set nomips16
+ .section .mips16.fn.m16_static16_dl,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static16_dl
+__fn_stub_m16_static16_dl:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static16_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static16_dl
+ .previous
+
+ .align 2
+ .globl m32_dlld
+ .set nomips16
+ .ent m32_dlld
+m32_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_dlld
+
+ .align 2
+ .globl m16_dlld
+ .set mips16
+ .ent m16_dlld
+m16_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_dlld
+ # Stub function for m16_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_dlld
+__fn_stub_m16_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_dlld
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static_dlld
+m32_static_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_static_dlld
+
+ .align 2
+ .set mips16
+ .ent m16_static_dlld
+m16_static_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_static_dlld
+ # Stub function for m16_static_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_static_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static_dlld
+__fn_stub_m16_static_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static_dlld
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_dlld
+m32_static1_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_static1_dlld
+
+ .align 2
+ .set mips16
+ .ent m16_static1_dlld
+m16_static1_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_static1_dlld
+ # Stub function for m16_static1_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_static1_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static1_dlld
+__fn_stub_m16_static1_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static1_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static1_dlld
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_dlld
+m32_static32_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_static32_dlld
+
+ .align 2
+ .set mips16
+ .ent m16_static32_dlld
+m16_static32_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_static32_dlld
+ # Stub function for m16_static32_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_static32_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static32_dlld
+__fn_stub_m16_static32_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static32_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static32_dlld
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_dlld
+m32_static16_dlld:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ trunc.w.d $f1,$f12
+ mfc1 $4,$f1
+ addu $3,$4,$6
+ addu $2,$3,$7
+ ldc1 $f0,16($sp)
+ trunc.w.d $f2,$f0
+ mfc1 $24,$f2
+ j $31
+ addu $2,$2,$24
+
+ .set macro
+ .set reorder
+ .end m32_static16_dlld
+
+ .align 2
+ .set mips16
+ .ent m16_static16_dlld
+m16_static16_dlld:
+ .frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
+ .mask 0x80030000,-4
+ .fmask 0x00000000,0
+ save 32,$16,$17,$31
+ move $16,$6
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ move $17,$7
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ addu $16,$2,$16
+ .set noreorder
+ .set nomacro
+ #jal __mips16_fixdfsi
+ addu $16,$17
+ .set macro
+ .set reorder
+
+ addu $2,$16,$2
+ restore 32,$16,$17,$31
+ j $31
+ .end m16_static16_dlld
+ # Stub function for m16_static16_dlld (double)
+ .set nomips16
+ .section .mips16.fn.m16_static16_dlld,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static16_dlld
+__fn_stub_m16_static16_dlld:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static16_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static16_dlld
+ .previous
+
+ .align 2
+ .globl m32_d_l
+ .set nomips16
+ .ent m32_d_l
+m32_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_d_l
+
+ .align 2
+ .globl m16_d_l
+ .set mips16
+ .ent m16_d_l
+m16_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_floatsidf
+ #jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_d_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static_d_l
+m32_static_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_static_d_l
+
+ .align 2
+ .set mips16
+ .ent m16_static_d_l
+m16_static_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_floatsidf
+ #jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_static_d_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_d_l
+m32_static1_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_static1_d_l
+
+ .align 2
+ .set mips16
+ .ent m16_static1_d_l
+m16_static1_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_floatsidf
+ #jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_static1_d_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_d_l
+m32_static32_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_static32_d_l
+
+ .align 2
+ .set mips16
+ .ent m16_static32_d_l
+m16_static32_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_floatsidf
+ #jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_static32_d_l
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_d_l
+m32_static16_d_l:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ mtc1 $4,$f2
+ j $31
+ cvt.d.w $f0,$f2
+
+ .set macro
+ .set reorder
+ .end m32_static16_d_l
+
+ .align 2
+ .set mips16
+ .ent m16_static16_d_l
+m16_static16_d_l:
+ .frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 24,$31
+ #jal __mips16_floatsidf
+ #jal __mips16_ret_df
+ restore 24,$31
+ j $31
+ .end m16_static16_d_l
+
+ .align 2
+ .globl m32_d_d
+ .set nomips16
+ .ent m32_d_d
+m32_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_d_d
+
+ .align 2
+ .globl m16_d_d
+ .set mips16
+ .ent m16_d_d
+m16_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ #jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_d_d
+ # Stub function for m16_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_d_d
+__fn_stub_m16_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_d_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static_d_d
+m32_static_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static_d_d
+
+ .align 2
+ .set mips16
+ .ent m16_static_d_d
+m16_static_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ #jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_static_d_d
+ # Stub function for m16_static_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static_d_d
+__fn_stub_m16_static_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static_d_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static1_d_d
+m32_static1_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static1_d_d
+
+ .align 2
+ .set mips16
+ .ent m16_static1_d_d
+m16_static1_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ #jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_static1_d_d
+ # Stub function for m16_static1_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static1_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static1_d_d
+__fn_stub_m16_static1_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static1_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static1_d_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static32_d_d
+m32_static32_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static32_d_d
+
+ .align 2
+ .set mips16
+ .ent m16_static32_d_d
+m16_static32_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ #jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_static32_d_d
+ # Stub function for m16_static32_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static32_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static32_d_d
+__fn_stub_m16_static32_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static32_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static32_d_d
+ .previous
+
+ .align 2
+ .set nomips16
+ .ent m32_static16_d_d
+m32_static16_d_d:
+ .frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
+ .mask 0x00000000,0
+ .fmask 0x00000000,0
+ .set noreorder
+ .set nomacro
+
+ j $31
+ mov.d $f0,$f12
+
+ .set macro
+ .set reorder
+ .end m32_static16_d_d
+
+ .align 2
+ .set mips16
+ .ent m16_static16_d_d
+m16_static16_d_d:
+ .frame $sp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
+ .mask 0x80000000,-4
+ .fmask 0x00000000,0
+ save 8,$31
+ move $3,$5
+ .set noreorder
+ .set nomacro
+ #jal __mips16_ret_df
+ move $2,$4
+ .set macro
+ .set reorder
+
+ restore 8,$31
+ j $31
+ .end m16_static16_d_d
+ # Stub function for m16_static16_d_d (double)
+ .set nomips16
+ .section .mips16.fn.m16_static16_d_d,"ax",@progbits
+ .align 2
+ .ent __fn_stub_m16_static16_d_d
+__fn_stub_m16_static16_d_d:
+ .set noreorder
+ mfc1 $4,$f13
+ mfc1 $5,$f12
+ .set noat
+ la $1,m16_static16_d_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __fn_stub_m16_static16_d_d
+ .previous
+
+ .align 2
+ .globl f32
+ .set nomips16
+ .ent f32
+f32:
+ .frame $sp,64,$31 # vars= 0, regs= 3/3, args= 24, gp= 0
+ .mask 0x80030000,-32
+ .fmask 0x03f00000,-8
+ .set noreorder
+ .set nomacro
+
+ addiu $sp,$sp,-64
+ sw $17,28($sp)
+ move $17,$4
+ sw $31,32($sp)
+ sdc1 $f24,56($sp)
+ sw $16,24($sp)
+ sdc1 $f22,48($sp)
+ sdc1 $f20,40($sp)
+ mtc1 $7,$f22
+ jal m32_static1_l
+ mtc1 $6,$f23
+
+ move $4,$17
+ jal m16_static1_l
+ move $16,$2
+
+ addu $16,$16,$2
+ jal m32_static1_d
+ mov.d $f12,$f22
+
+ addu $16,$16,$2
+ jal m16_static1_d
+ mov.d $f12,$f22
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m32_static1_ld
+ addu $16,$16,$2
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m16_static1_ld
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m32_static1_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m16_static1_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ sdc1 $f22,16($sp)
+ mov.d $f12,$f22
+ jal m32_static1_dlld
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ mov.d $f12,$f22
+ sdc1 $f22,16($sp)
+ jal m16_static1_dlld
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m32_static1_d_l
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m16_static1_d_l
+ mov.d $f20,$f0
+
+ add.d $f20,$f20,$f0
+ jal m32_static1_d_d
+ mov.d $f12,$f22
+
+ add.d $f20,$f20,$f0
+ jal m16_static1_d_d
+ mov.d $f12,$f22
+
+ move $4,$17
+ jal m32_static32_l
+ add.d $f20,$f20,$f0
+
+ move $4,$17
+ jal m16_static32_l
+ addu $16,$16,$2
+
+ addu $16,$16,$2
+ jal m32_static32_d
+ mov.d $f12,$f22
+
+ addu $16,$16,$2
+ jal m16_static32_d
+ mov.d $f12,$f22
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m32_static32_ld
+ addu $16,$16,$2
+
+ move $4,$17
+ mfc1 $7,$f22
+ mfc1 $6,$f23
+ jal m16_static32_ld
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m32_static32_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ mov.d $f12,$f22
+ jal m16_static32_dl
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ sdc1 $f22,16($sp)
+ mov.d $f12,$f22
+ jal m32_static32_dlld
+ addu $16,$16,$2
+
+ move $6,$17
+ move $7,$17
+ mov.d $f12,$f22
+ sdc1 $f22,16($sp)
+ jal m16_static32_dlld
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m32_static32_d_l
+ addu $16,$16,$2
+
+ move $4,$17
+ jal m16_static32_d_l
+ add.d $f20,$f20,$f0
+
+ add.d $f20,$f20,$f0
+ jal m32_static32_d_d
+ mov.d $f12,$f22
+
+ mtc1 $16,$f24
+ add.d $f20,$f20,$f0
+ jal m16_static32_d_d
+ mov.d $f12,$f22
+
+ lw $31,32($sp)
+ lw $17,28($sp)
+ lw $16,24($sp)
+ add.d $f20,$f20,$f0
+ ldc1 $f22,48($sp)
+ cvt.d.w $f0,$f24
+ ldc1 $f24,56($sp)
+ add.d $f0,$f0,$f20
+ ldc1 $f20,40($sp)
+ j $31
+ addiu $sp,$sp,64
+
+ .set macro
+ .set reorder
+ .end f32
+
+ # Stub function to call m32_static1_d (double)
+ .set nomips16
+ .section .mips16.call.m32_static1_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static1_d
+__call_stub_m32_static1_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static1_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static1_d
+ .previous
+
+ # Stub function to call m16_static1_d (double)
+ .set nomips16
+ .section .mips16.call.m16_static1_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static1_d
+__call_stub_m16_static1_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static1_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static1_d
+ .previous
+
+ # Stub function to call m32_static1_dl (double)
+ .set nomips16
+ .section .mips16.call.m32_static1_dl,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static1_dl
+__call_stub_m32_static1_dl:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static1_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static1_dl
+ .previous
+
+ # Stub function to call m16_static1_dl (double)
+ .set nomips16
+ .section .mips16.call.m16_static1_dl,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static1_dl
+__call_stub_m16_static1_dl:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static1_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static1_dl
+ .previous
+
+ # Stub function to call m32_static1_dlld (double)
+ .set nomips16
+ .section .mips16.call.m32_static1_dlld,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static1_dlld
+__call_stub_m32_static1_dlld:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static1_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static1_dlld
+ .previous
+
+ # Stub function to call m16_static1_dlld (double)
+ .set nomips16
+ .section .mips16.call.m16_static1_dlld,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static1_dlld
+__call_stub_m16_static1_dlld:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static1_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static1_dlld
+ .previous
+
+ # Stub function to call double m32_static1_d_l ()
+ .set nomips16
+ .section .mips16.call.fp.m32_static1_d_l,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m32_static1_d_l
+__call_stub_fp_m32_static1_d_l:
+ .set noreorder
+ move $18,$31
+ jal m32_static1_d_l
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m32_static1_d_l
+ .previous
+
+ # Stub function to call double m16_static1_d_l ()
+ .set nomips16
+ .section .mips16.call.fp.m16_static1_d_l,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m16_static1_d_l
+__call_stub_fp_m16_static1_d_l:
+ .set noreorder
+ move $18,$31
+ jal m16_static1_d_l
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m16_static1_d_l
+ .previous
+
+ # Stub function to call double m32_static1_d_d (double)
+ .set nomips16
+ .section .mips16.call.fp.m32_static1_d_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m32_static1_d_d
+__call_stub_fp_m32_static1_d_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ move $18,$31
+ jal m32_static1_d_d
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m32_static1_d_d
+ .previous
+
+ # Stub function to call double m16_static1_d_d (double)
+ .set nomips16
+ .section .mips16.call.fp.m16_static1_d_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m16_static1_d_d
+__call_stub_fp_m16_static1_d_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ move $18,$31
+ jal m16_static1_d_d
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m16_static1_d_d
+ .previous
+
+ # Stub function to call m32_static16_d (double)
+ .set nomips16
+ .section .mips16.call.m32_static16_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static16_d
+__call_stub_m32_static16_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static16_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static16_d
+ .previous
+
+ # Stub function to call m16_static16_d (double)
+ .set nomips16
+ .section .mips16.call.m16_static16_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static16_d
+__call_stub_m16_static16_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static16_d
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static16_d
+ .previous
+
+ # Stub function to call m32_static16_dl (double)
+ .set nomips16
+ .section .mips16.call.m32_static16_dl,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static16_dl
+__call_stub_m32_static16_dl:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static16_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static16_dl
+ .previous
+
+ # Stub function to call m16_static16_dl (double)
+ .set nomips16
+ .section .mips16.call.m16_static16_dl,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static16_dl
+__call_stub_m16_static16_dl:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static16_dl
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static16_dl
+ .previous
+
+ # Stub function to call m32_static16_dlld (double)
+ .set nomips16
+ .section .mips16.call.m32_static16_dlld,"ax",@progbits
+ .align 2
+ .ent __call_stub_m32_static16_dlld
+__call_stub_m32_static16_dlld:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m32_static16_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m32_static16_dlld
+ .previous
+
+ # Stub function to call m16_static16_dlld (double)
+ .set nomips16
+ .section .mips16.call.m16_static16_dlld,"ax",@progbits
+ .align 2
+ .ent __call_stub_m16_static16_dlld
+__call_stub_m16_static16_dlld:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ .set noat
+ la $1,m16_static16_dlld
+ jr $1
+ .set at
+ nop
+ .set reorder
+ .end __call_stub_m16_static16_dlld
+ .previous
+
+ # Stub function to call double m32_static16_d_l ()
+ .set nomips16
+ .section .mips16.call.fp.m32_static16_d_l,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m32_static16_d_l
+__call_stub_fp_m32_static16_d_l:
+ .set noreorder
+ move $18,$31
+ jal m32_static16_d_l
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m32_static16_d_l
+ .previous
+
+ # Stub function to call double m16_static16_d_l ()
+ .set nomips16
+ .section .mips16.call.fp.m16_static16_d_l,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m16_static16_d_l
+__call_stub_fp_m16_static16_d_l:
+ .set noreorder
+ move $18,$31
+ jal m16_static16_d_l
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m16_static16_d_l
+ .previous
+
+ # Stub function to call double m32_static16_d_d (double)
+ .set nomips16
+ .section .mips16.call.fp.m32_static16_d_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m32_static16_d_d
+__call_stub_fp_m32_static16_d_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ move $18,$31
+ jal m32_static16_d_d
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m32_static16_d_d
+ .previous
+
+ # Stub function to call double m16_static16_d_d (double)
+ .set nomips16
+ .section .mips16.call.fp.m16_static16_d_d,"ax",@progbits
+ .align 2
+ .ent __call_stub_fp_m16_static16_d_d
+__call_stub_fp_m16_static16_d_d:
+ .set noreorder
+ mtc1 $4,$f13
+ mtc1 $5,$f12
+ move $18,$31
+ jal m16_static16_d_d
+ nop
+ mfc1 $2,$f1
+ mfc1 $3,$f0
+ j $18
+ nop
+ .set reorder
+ .end __call_stub_fp_m16_static16_d_d
+ .previous
+
+ .align 2
+ .globl f16
+ .set mips16
+ .ent f16
+f16:
+ .frame $sp,104,$31 # vars= 64, regs= 4/0, args= 24, gp= 0
+ .mask 0x80070000,-4
+ .fmask 0x00000000,0
+ save 104,$16,$17,$18,$31
+ move $17,$4
+ sw $7,116($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static1_l
+ sw $6,112($sp)
+ .set macro
+ .set reorder
+
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static1_l
+ move $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static1_d
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static1_d
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $7,116($sp)
+ lw $6,112($sp)
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static1_ld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $7,116($sp)
+ lw $6,112($sp)
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static1_ld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static1_dl
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static1_dl
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $3,116($sp)
+ lw $6,112($sp)
+ sw $3,20($sp)
+ move $5,$3
+ sw $6,16($sp)
+ move $4,$6
+ move $7,$17
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static1_dlld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ addu $16,$2
+ lw $7,112($sp)
+ lw $2,116($sp)
+ move $6,$17
+ move $5,$2
+ sw $7,16($sp)
+ move $4,$7
+ sw $2,20($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static1_dlld
+ move $7,$17
+ .set macro
+ .set reorder
+
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static1_d_l
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ move $4,$17
+ sw $3,28($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static1_d_l
+ sw $2,24($sp)
+ .set macro
+ .set reorder
+
+ lw $5,28($sp)
+ lw $4,24($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ sw $3,36($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static1_d_d
+ sw $2,32($sp)
+ .set macro
+ .set reorder
+
+ lw $5,36($sp)
+ lw $4,32($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ sw $3,44($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static1_d_d
+ sw $2,40($sp)
+ .set macro
+ .set reorder
+
+ lw $5,44($sp)
+ lw $4,40($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ move $4,$17
+ sw $3,52($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static16_l
+ sw $2,48($sp)
+ .set macro
+ .set reorder
+
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static16_l
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static16_d
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static16_d
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $7,116($sp)
+ lw $6,112($sp)
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static16_ld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $7,116($sp)
+ lw $6,112($sp)
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static16_ld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static16_dl
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m16_static16_dl
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $4,116($sp)
+ lw $6,112($sp)
+ sw $4,20($sp)
+ sw $6,16($sp)
+ move $5,$4
+ move $7,$17
+ move $4,$6
+ move $6,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static16_dlld
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ addu $16,$2
+ lw $3,116($sp)
+ lw $2,112($sp)
+ move $6,$17
+ move $7,$17
+ sw $3,20($sp)
+ move $5,$3
+ sw $2,16($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static16_dlld
+ move $4,$2
+ .set macro
+ .set reorder
+
+ move $4,$17
+ .set noreorder
+ .set nomacro
+ jal m32_static16_d_l
+ addu $16,$2
+ .set macro
+ .set reorder
+
+ lw $5,52($sp)
+ lw $4,48($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ move $4,$17
+ sw $3,60($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static16_d_l
+ sw $2,56($sp)
+ .set macro
+ .set reorder
+
+ lw $5,60($sp)
+ lw $4,56($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ sw $3,68($sp)
+ .set noreorder
+ .set nomacro
+ jal m32_static16_d_d
+ sw $2,64($sp)
+ .set macro
+ .set reorder
+
+ lw $5,68($sp)
+ lw $4,64($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ lw $5,116($sp)
+ lw $4,112($sp)
+ sw $3,76($sp)
+ .set noreorder
+ .set nomacro
+ jal m16_static16_d_d
+ sw $2,72($sp)
+ .set macro
+ .set reorder
+
+ lw $5,76($sp)
+ lw $4,72($sp)
+ move $7,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $6,$2
+ .set macro
+ .set reorder
+
+ move $4,$16
+ sw $3,84($sp)
+ .set noreorder
+ .set nomacro
+ #jal __mips16_floatsidf
+ sw $2,80($sp)
+ .set macro
+ .set reorder
+
+ lw $7,84($sp)
+ lw $6,80($sp)
+ move $5,$3
+ .set noreorder
+ .set nomacro
+ #jal __mips16_adddf3
+ move $4,$2
+ .set macro
+ .set reorder
+
+ #jal __mips16_ret_df
+ restore 104,$16,$17,$18,$31
+ j $31
+ .end f16
diff --git a/ld/testsuite/ld-mips-elf/mips16-intermix.d b/ld/testsuite/ld-mips-elf/mips16-intermix.d
new file mode 100644
index 000000000000..5c6ee689ab87
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-intermix.d
@@ -0,0 +1,132 @@
+
+.*: +file format elf.*mips
+
+SYMBOL TABLE:
+#...
+.* l F .text 0+[0-9a-f]+ m32_static_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_l
+.* l F .text 0+[0-9a-f]+ m32_static1_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_l
+.* l F .text 0+[0-9a-f]+ m32_static32_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_l
+.* l F .text 0+[0-9a-f]+ m32_static16_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_l
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_d
+.* l F .text 0+[0-9a-f]+ m32_static_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_d
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static_d
+.* l F .text 0+[0-9a-f]+ m32_static1_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_d
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static1_d
+.* l F .text 0+[0-9a-f]+ m32_static32_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_d
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static32_d
+.* l F .text 0+[0-9a-f]+ m32_static16_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_d
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static16_d
+.* l F .text 0+[0-9a-f]+ m32_static_ld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_ld
+.* l F .text 0+[0-9a-f]+ m32_static1_ld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_ld
+.* l F .text 0+[0-9a-f]+ m32_static32_ld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_ld
+.* l F .text 0+[0-9a-f]+ m32_static16_ld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_ld
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_dl
+.* l F .text 0+[0-9a-f]+ m32_static_dl
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_dl
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static_dl
+.* l F .text 0+[0-9a-f]+ m32_static1_dl
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_dl
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static1_dl
+.* l F .text 0+[0-9a-f]+ m32_static32_dl
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_dl
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static32_dl
+.* l F .text 0+[0-9a-f]+ m32_static16_dl
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_dl
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static16_dl
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_dlld
+.* l F .text 0+[0-9a-f]+ m32_static_dlld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_dlld
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static_dlld
+.* l F .text 0+[0-9a-f]+ m32_static1_dlld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_dlld
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static1_dlld
+.* l F .text 0+[0-9a-f]+ m32_static32_dlld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_dlld
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static32_dlld
+.* l F .text 0+[0-9a-f]+ m32_static16_dlld
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_dlld
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static16_dlld
+.* l F .text 0+[0-9a-f]+ m32_static_d_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_d_l
+.* l F .text 0+[0-9a-f]+ m32_static1_d_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_d_l
+.* l F .text 0+[0-9a-f]+ m32_static32_d_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_d_l
+.* l F .text 0+[0-9a-f]+ m32_static16_d_l
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_d_l
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_d_d
+.* l F .text 0+[0-9a-f]+ m32_static_d_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static_d_d
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static_d_d
+.* l F .text 0+[0-9a-f]+ m32_static1_d_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static1_d_d
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static1_d_d
+.* l F .text 0+[0-9a-f]+ m32_static32_d_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static32_d_d
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static32_d_d
+.* l F .text 0+[0-9a-f]+ m32_static16_d_d
+.* l F .text 0+[0-9a-f]+ 0xf0 m16_static16_d_d
+.* l F .text 0+[0-9a-f]+ __fn_stub_m16_static16_d_d
+#...
+.* l F .text 0+[0-9a-f]+ __call_stub_m32_static1_d
+.* l F .text 0+[0-9a-f]+ __call_stub_m16_static1_d
+.* l F .text 0+[0-9a-f]+ __call_stub_m32_static1_dl
+.* l F .text 0+[0-9a-f]+ __call_stub_m16_static1_dl
+.* l F .text 0+[0-9a-f]+ __call_stub_m32_static1_dlld
+.* l F .text 0+[0-9a-f]+ __call_stub_m16_static1_dlld
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m32_static1_d_l
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m16_static1_d_l
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m32_static1_d_d
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m16_static1_d_d
+.* l F .text 0+[0-9a-f]+ __call_stub_m32_static16_d
+.* l F .text 0+[0-9a-f]+ __call_stub_m16_static16_d
+.* l F .text 0+[0-9a-f]+ __call_stub_m32_static16_dl
+.* l F .text 0+[0-9a-f]+ __call_stub_m16_static16_dl
+.* l F .text 0+[0-9a-f]+ __call_stub_m32_static16_dlld
+.* l F .text 0+[0-9a-f]+ __call_stub_m16_static16_dlld
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m32_static16_d_l
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m16_static16_d_l
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m32_static16_d_d
+.* l F .text 0+[0-9a-f]+ __call_stub_fp_m16_static16_d_d
+#...
+.* g F .text 0+[0-9a-f]+ m32_ld
+#...
+.* g F .text 0+[0-9a-f]+ m32_d_l
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_d_d
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_d
+#...
+.* g F .text 0+[0-9a-f]+ 0xf0 f16
+#...
+.* g F .text 0+[0-9a-f]+ m32_d
+#...
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_dl
+#...
+.* g F .text 0+[0-9a-f]+ f32
+#...
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_l
+#...
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_ld
+#...
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_dlld
+.* g F .text 0+[0-9a-f]+ m32_d_d
+#...
+.* g F .text 0+[0-9a-f]+ m32_dl
+#...
+.* g F .text 0+[0-9a-f]+ m32_dlld
+#...
+.* g F .text 0+[0-9a-f]+ 0xf0 m16_d_l
+#...
+.* g F .text 0+[0-9a-f]+ m32_l
+#pass
diff --git a/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.d b/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.d
new file mode 100644
index 000000000000..9990493c1b98
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.d
@@ -0,0 +1,114 @@
+#name: MIPS16 interlinking for local functions 1
+#source: mips16-local-stubs-1.s
+#as: -mips4
+#ld: -Ttext 0x20000000 -e caller1
+#objdump: -dr
+#...
+Disassembly of section \.text:
+
+20000000 <f1>:
+20000000: 03e00008 jr ra
+20000004: 00000000 nop
+
+20000008 <g1>:
+20000008: 03e00008 jr ra
+2000000c: 00000000 nop
+
+20000010 <h1>:
+20000010: e820 jr ra
+20000012: 6500 nop
+
+20000014 <f2>:
+20000014: 03e00008 jr ra
+20000018: 00000000 nop
+
+2000001c <g2>:
+2000001c: 03e00008 jr ra
+20000020: 00000000 nop
+
+20000024 <h2>:
+20000024: e820 jr ra
+20000026: 6500 nop
+
+20000028 <f3>:
+20000028: 03e00008 jr ra
+2000002c: 00000000 nop
+
+20000030 <g3>:
+20000030: 03e00008 jr ra
+20000034: 00000000 nop
+
+20000038 <h3>:
+20000038: e820 jr ra
+2000003a: 6500 nop
+
+2000003c <caller1>:
+2000003c: 0c000000 jal 20000000 <f1>
+20000040: 00000000 nop
+20000044: 0c000005 jal 20000014 <f2>
+20000048: 00000000 nop
+2000004c: 0c000002 jal 20000008 <g1>
+20000050: 00000000 nop
+20000054: 0c000007 jal 2000001c <g2>
+20000058: 00000000 nop
+2000005c: 0c000024 jal 20000090 <stub_for_h1>
+20000060: 00000000 nop
+20000064: 0c000028 jal 200000a0 <stub_for_h2>
+20000068: 00000000 nop
+
+2000006c <caller2>:
+2000006c: 1c00 0030 jalx 200000c0 <stub_for_f1>
+20000070: 6500 nop
+20000072: 1c00 0038 jalx 200000e0 <stub_for_f2>
+20000076: 6500 nop
+20000078: 1c00 0034 jalx 200000d0 <stub_for_g1>
+2000007c: 6500 nop
+2000007e: 1c00 003c jalx 200000f0 <stub_for_g2>
+20000082: 6500 nop
+20000084: 1800 0004 jal 20000010 <h1>
+20000088: 6500 nop
+2000008a: 1800 0009 jal 20000024 <h2>
+2000008e: 6500 nop
+
+20000090 <stub_for_h1>:
+20000090: 3c012000 lui at,0x2000
+20000094: 24210011 addiu at,at,17
+20000098: 00200008 jr at
+2000009c: 00000000 nop
+
+200000a0 <stub_for_h2>:
+200000a0: 3c012000 lui at,0x2000
+200000a4: 24210025 addiu at,at,37
+200000a8: 00200008 jr at
+200000ac: 00000000 nop
+
+# This isn't actually called, but is referenced from the .pdr section.
+200000b0 <stub_for_h3>:
+200000b0: 3c012000 lui at,0x2000
+200000b4: 24210039 addiu at,at,57
+200000b8: 00200008 jr at
+200000bc: 00000000 nop
+
+200000c0 <stub_for_f1>:
+200000c0: 3c012000 lui at,0x2000
+200000c4: 24210000 addiu at,at,0
+200000c8: 00200008 jr at
+200000cc: 00000000 nop
+
+200000d0 <stub_for_g1>:
+200000d0: 3c012000 lui at,0x2000
+200000d4: 24210008 addiu at,at,8
+200000d8: 00200008 jr at
+200000dc: 00000000 nop
+
+200000e0 <stub_for_f2>:
+200000e0: 3c012000 lui at,0x2000
+200000e4: 24210014 addiu at,at,20
+200000e8: 00200008 jr at
+200000ec: 00000000 nop
+
+200000f0 <stub_for_g2>:
+200000f0: 3c012000 lui at,0x2000
+200000f4: 2421001c addiu at,at,28
+200000f8: 00200008 jr at
+200000fc: 00000000 nop
diff --git a/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.s b/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.s
new file mode 100644
index 000000000000..990440258427
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-local-stubs-1.s
@@ -0,0 +1,49 @@
+ .macro makestub,type,func,section
+ .text
+ .set \type
+ .type \func,@function
+ .ent \func
+\func:
+ jr $31
+ .end \func
+
+ .section \section,"ax",@progbits
+ .set nomips16
+ .type stub_for_\func,@function
+ .ent stub_for_\func
+stub_for_\func:
+ .set noat
+ la $1,\func
+ jr $1
+ .set at
+ .end stub_for_\func
+ .endm
+
+ .macro makestubs,id
+ makestub nomips16,f\id,.mips16.call.F\id
+ makestub nomips16,g\id,.mips16.call.fp.G\id
+ makestub mips16,h\id,.mips16.fn.H\id
+ .endm
+
+ .macro makecaller,type,func
+ .text
+ .set \type
+ .globl \func
+ .type \func,@function
+ .ent \func
+\func:
+ jal f1
+ jal f2
+ jal g1
+ jal g2
+ jal h1
+ jal h2
+ .end \func
+ .endm
+
+ makestubs 1
+ makestubs 2
+ makestubs 3
+
+ makecaller nomips16,caller1
+ makecaller mips16,caller2
diff --git a/ld/testsuite/ld-mips-elf/multi-got-1.d b/ld/testsuite/ld-mips-elf/multi-got-1.d
index d04f9c47d398..db76eea67369 100644
--- a/ld/testsuite/ld-mips-elf/multi-got-1.d
+++ b/ld/testsuite/ld-mips-elf/multi-got-1.d
@@ -5,14 +5,13 @@
#ld: -melf32btsmip -shared
#readelf: -d -r
-Dynamic section at offset 0xcc contains 18 entries:
+Dynamic section at offset .* contains 17 entries:
Tag Type Name/Value
- 0x00000004 \(HASH\) 0x184
+ 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\) 65544 \(bytes\)
@@ -26,8208 +25,8198 @@ Dynamic section at offset 0xcc contains 18 entries:
0x70000013 \(MIPS_GOTSYM\) 0x[0-9a-f]+
0x00000000 \(NULL\) 0x0
-Relocation section '\.rel\.dyn' at offset 0x[0-9a-f]+ contains 8203 entries:
+Relocation section '\.rel\.dyn' at offset 0x[0-9a-f]+ contains 8193 entries:
Offset Info Type Sym.Value Sym. Name
00000000 00000000 R_MIPS_NONE
-^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_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
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_[0-9]+
diff --git a/ld/testsuite/ld-mips-elf/multi-got-no-shared.d b/ld/testsuite/ld-mips-elf/multi-got-no-shared.d
index 927b3040be91..bffc48539fd5 100644
--- a/ld/testsuite/ld-mips-elf/multi-got-no-shared.d
+++ b/ld/testsuite/ld-mips-elf/multi-got-no-shared.d
@@ -8,11 +8,11 @@
.*: +file format.*
Disassembly of section \.text:
-004000b0 <[^>]*> 3c1c0046 lui gp,0x46
+004000b0 <[^>]*> 3c1c0043 lui gp,0x43
004000b4 <[^>]*> 279c9ff0 addiu gp,gp,-24592
004000b8 <[^>]*> afbc0008 sw gp,8\(sp\)
#...
-00408d60 <[^>]*> 3c1c0047 lui gp,0x47
+00408d60 <[^>]*> 3c1c0044 lui gp,0x44
00408d64 <[^>]*> 279cb960 addiu gp,gp,-18080
00408d68 <[^>]*> afbc0008 sw gp,8\(sp\)
#pass
diff --git a/ld/testsuite/ld-mips-elf/rel32-n32.d b/ld/testsuite/ld-mips-elf/rel32-n32.d
index c071c0170c36..aae33b3575e1 100644
--- a/ld/testsuite/ld-mips-elf/rel32-n32.d
+++ b/ld/testsuite/ld-mips-elf/rel32-n32.d
@@ -1,15 +1,15 @@
#name: MIPS rel32 n32
#source: rel32.s
#as: -KPIC -EB -n32
-#readelf: -x 5 -r
+#readelf: -x .text -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
+[0-9a-f ]+R_MIPS_NONE
+[0-9a-f ]+R_MIPS_REL32
Hex dump of section '.text':
- 0x000002c0 00000000 00000000 00000000 00000000 ................
- 0x000002d0 000002d0 00000000 00000000 00000000 ................
0x000002e0 00000000 00000000 00000000 00000000 ................
+ 0x000002f0 000002f0 00000000 00000000 00000000 ................
+ 0x00000300 00000000 00000000 00000000 00000000 ................
diff --git a/ld/testsuite/ld-mips-elf/rel32-o32.d b/ld/testsuite/ld-mips-elf/rel32-o32.d
index d98bf211598c..742cdaadb4ea 100644
--- a/ld/testsuite/ld-mips-elf/rel32-o32.d
+++ b/ld/testsuite/ld-mips-elf/rel32-o32.d
@@ -1,13 +1,13 @@
#name: MIPS rel32 o32
#source: rel32.s
#as: -KPIC -EB -32
-#readelf: -x 6 -r
+#readelf: -x .text -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
+[0-9a-f ]+R_MIPS_NONE
+[0-9a-f ]+R_MIPS_REL32
Hex dump of section '.text':
0x000002e0 00000000 00000000 00000000 00000000 ................
diff --git a/ld/testsuite/ld-mips-elf/rel64.d b/ld/testsuite/ld-mips-elf/rel64.d
index 61fbf879a5a6..4279e2820445 100644
--- a/ld/testsuite/ld-mips-elf/rel64.d
+++ b/ld/testsuite/ld-mips-elf/rel64.d
@@ -1,19 +1,19 @@
#name: MIPS rel64 n64
#source: rel64.s
#as: -KPIC -EB -64
-#readelf: -x 6 -r
+#readelf: -x .text -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
+[0-9a-f ]+R_MIPS_NONE
+ +Type2: R_MIPS_NONE
+ +Type3: R_MIPS_NONE
+[0-9a-f ]+R_MIPS_REL32
+ +Type2: R_MIPS_64
+ +Type3: R_MIPS_NONE
Hex dump of section '.text':
- 0x00000440 00000000 00000000 00000000 00000000 ................
- 0x00000450 00000000 00000450 00000000 00000000 ................
- 0x00000460 00000000 00000000 00000000 00000000 ................
+ 0x00000450 00000000 00000000 00000000 00000000 ................
+ 0x00000460 00000000 00000460 00000000 00000000 ................
+ 0x00000470 00000000 00000000 00000000 00000000 ................
diff --git a/ld/testsuite/ld-mips-elf/reloc-1-n64.d b/ld/testsuite/ld-mips-elf/reloc-1-n64.d
index 2db8fca67167..42d74ea6be20 100644
--- a/ld/testsuite/ld-mips-elf/reloc-1-n64.d
+++ b/ld/testsuite/ld-mips-elf/reloc-1-n64.d
@@ -8,16 +8,16 @@ Relocation section '\.rela\.text' .*
#
# Relocations against tstarta
#
-.* R_MIPS_HI16 .* \.text \+ ffff7ff0
+.* R_MIPS_HI16 .* \.text \+ f+7ff0
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_LO16 .* \.text \+ ffff7ff0
+.* R_MIPS_LO16 .* \.text \+ f+7ff0
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_HI16 .* \.text \+ ffff8000
+.* R_MIPS_HI16 .* \.text \+ f+8000
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_LO16 .* \.text \+ ffff8000
+.* R_MIPS_LO16 .* \.text \+ f+8000
.* R_MIPS_NONE *
.* R_MIPS_NONE *
.* R_MIPS_HI16 .* \.text \+ 0
@@ -41,16 +41,16 @@ Relocation section '\.rela\.text' .*
#
# Relocations against t32a
#
-.* R_MIPS_HI16 .* \.text \+ ffff8010
+.* R_MIPS_HI16 .* \.text \+ f+8010
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_LO16 .* \.text \+ ffff8010
+.* R_MIPS_LO16 .* \.text \+ f+8010
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_HI16 .* \.text \+ ffff8020
+.* R_MIPS_HI16 .* \.text \+ f+8020
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_LO16 .* \.text \+ ffff8020
+.* R_MIPS_LO16 .* \.text \+ f+8020
.* R_MIPS_NONE *
.* R_MIPS_NONE *
.* R_MIPS_HI16 .* \.text \+ 20
@@ -74,16 +74,16 @@ Relocation section '\.rela\.text' .*
#
# Relocations against _start
#
-.* R_MIPS_HI16 .* _start \+ ffff7ff0
+.* R_MIPS_HI16 .* _start \+ f+7ff0
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_LO16 .* _start \+ ffff7ff0
+.* R_MIPS_LO16 .* _start \+ f+7ff0
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_HI16 .* _start \+ ffff8000
+.* R_MIPS_HI16 .* _start \+ f+8000
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_LO16 .* _start \+ ffff8000
+.* R_MIPS_LO16 .* _start \+ f+8000
.* R_MIPS_NONE *
.* R_MIPS_NONE *
.* R_MIPS_HI16 .* _start \+ 0
@@ -107,16 +107,16 @@ Relocation section '\.rela\.text' .*
#
# Relocations against tstarta
#
-.* R_MIPS_GOT16 .* \.text \+ ffff7ff0
+.* R_MIPS_GOT16 .* \.text \+ f+7ff0
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_LO16 .* \.text \+ ffff7ff0
+.* R_MIPS_LO16 .* \.text \+ f+7ff0
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_GOT16 .* \.text \+ ffff8000
+.* R_MIPS_GOT16 .* \.text \+ f+8000
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_LO16 .* \.text \+ ffff8000
+.* R_MIPS_LO16 .* \.text \+ f+8000
.* R_MIPS_NONE *
.* R_MIPS_NONE *
.* R_MIPS_GOT16 .* \.text \+ 0
@@ -140,16 +140,16 @@ Relocation section '\.rela\.text' .*
#
# Relocations against t32a
#
-.* R_MIPS_GOT16 .* \.text \+ ffff8010
+.* R_MIPS_GOT16 .* \.text \+ f+8010
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_LO16 .* \.text \+ ffff8010
+.* R_MIPS_LO16 .* \.text \+ f+8010
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_GOT16 .* \.text \+ ffff8020
+.* R_MIPS_GOT16 .* \.text \+ f+8020
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_LO16 .* \.text \+ ffff8020
+.* R_MIPS_LO16 .* \.text \+ f+8020
.* R_MIPS_NONE *
.* R_MIPS_NONE *
.* R_MIPS_GOT16 .* \.text \+ 20
@@ -173,7 +173,7 @@ Relocation section '\.rela\.text' .*
#
# Relocations against sdg
#
-.* R_MIPS_GPREL16 .* sdg \+ fffffffc
+.* R_MIPS_GPREL16 .* sdg \+ f+fffc
.* R_MIPS_NONE *
.* R_MIPS_NONE *
.* R_MIPS_GPREL16 .* sdg \+ 0
@@ -186,19 +186,19 @@ Relocation section '\.rela\.text' .*
# 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 \+ f+801c
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_GPREL16 .* \.sdata \+ ffff8020
+.* R_MIPS_GPREL16 .* \.sdata \+ f+8020
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_GPREL16 .* \.sdata \+ ffff8024
+.* R_MIPS_GPREL16 .* \.sdata \+ f+8024
.* R_MIPS_NONE *
.* R_MIPS_NONE *
#
# Relocations against tstarta
#
-.* R_MIPS_26 .* \.text \+ fffffffc
+.* R_MIPS_26 .* \.text \+ f+fffc
.* R_MIPS_NONE *
.* R_MIPS_NONE *
.* R_MIPS_26 .* \.text \+ 0
@@ -222,7 +222,7 @@ Relocation section '\.rela\.text' .*
#
# Relocations against _start
#
-.* R_MIPS_26 .* _start \+ fffffffc
+.* R_MIPS_26 .* _start \+ f+fffc
.* R_MIPS_NONE *
.* R_MIPS_NONE *
.* R_MIPS_26 .* _start \+ 0
@@ -300,16 +300,16 @@ Relocation section '\.rela\.text' .*
#
# Relocations against _start
#
-.* R_MIPS_HI16 .* _start \+ ffff7ff0
+.* R_MIPS_HI16 .* _start \+ f+7ff0
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_LO16 .* _start \+ ffff7ff0
+.* R_MIPS_LO16 .* _start \+ f+7ff0
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_HI16 .* _start \+ ffff8000
+.* R_MIPS_HI16 .* _start \+ f+8000
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_LO16 .* _start \+ ffff8000
+.* R_MIPS_LO16 .* _start \+ f+8000
.* R_MIPS_NONE *
.* R_MIPS_NONE *
.* R_MIPS_HI16 .* _start \+ 0
@@ -399,7 +399,7 @@ Relocation section '\.rela\.text' .*
#
# Relocations against sdg
#
-.* R_MIPS_GPREL16 .* sdg \+ fffffffc
+.* R_MIPS_GPREL16 .* sdg \+ f+fffc
.* R_MIPS_NONE *
.* R_MIPS_NONE *
.* R_MIPS_GPREL16 .* sdg \+ 0
@@ -411,13 +411,13 @@ Relocation section '\.rela\.text' .*
#
# Relocations against sdlb
#
-.* R_MIPS_GPREL16 .* \.sdata \+ ffff803c
+.* R_MIPS_GPREL16 .* \.sdata \+ f+803c
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_GPREL16 .* \.sdata \+ ffff8040
+.* R_MIPS_GPREL16 .* \.sdata \+ f+8040
.* R_MIPS_NONE *
.* R_MIPS_NONE *
-.* R_MIPS_GPREL16 .* \.sdata \+ ffff8044
+.* R_MIPS_GPREL16 .* \.sdata \+ f+8044
.* R_MIPS_NONE *
.* R_MIPS_NONE *
#
@@ -447,7 +447,7 @@ Relocation section '\.rela\.text' .*
#
# Relocations against _start
#
-.* R_MIPS_26 .* _start \+ fffffffc
+.* R_MIPS_26 .* _start \+ f+fffc
.* R_MIPS_NONE *
.* R_MIPS_NONE *
.* R_MIPS_26 .* _start \+ 0
diff --git a/ld/testsuite/ld-mips-elf/reloc-3-n32.d b/ld/testsuite/ld-mips-elf/reloc-3-n32.d
new file mode 100644
index 000000000000..e90180bbd5cd
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/reloc-3-n32.d
@@ -0,0 +1,18 @@
+#name: R_MIPS16_GPREL reloc n32
+#source: ../../../gas/testsuite/gas/mips/elf-rel6.s
+#as: -march=mips64 -mabi=n32 -EB
+#objdump: --prefix-addresses -tdr --show-raw-insn
+#ld: -Ttext 0x20000000 -e 0x20000000 -N -melf32btsmipn32
+
+
+.*: file format elf.*mips.*
+
+#...
+
+Disassembly of section \.text:
+0*20000000 <[^>]*> f010 8352 lb v0,-32750\(v1\)
+0*20000004 <[^>]*> f010 8353 lb v0,-32749\(v1\)
+0*20000008 <[^>]*> f252 8346 lb v0,-28090\(v1\)
+0*2000000c <[^>]*> 6500 nop
+0*2000000e <[^>]*> 6500 nop
+#pass
diff --git a/ld/testsuite/ld-mips-elf/reloc-3.d b/ld/testsuite/ld-mips-elf/reloc-3.d
new file mode 100644
index 000000000000..1ec51c5f8f32
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/reloc-3.d
@@ -0,0 +1,16 @@
+#name: R_MIPS16_GPREL reloc
+#source: ../../../gas/testsuite/gas/mips/elf-rel6.s
+#objdump: --prefix-addresses -tdr --show-raw-insn
+#ld: -Ttext 0x20000000 -e 0x20000000 -N
+
+.*: file format elf.*mips.*
+
+#...
+
+Disassembly of section \.text:
+0*20000000 <[^>]*> f010 8352 lb v0,-32750\(v1\)
+0*20000004 <[^>]*> f010 8353 lb v0,-32749\(v1\)
+0*20000008 <[^>]*> f252 8346 lb v0,-28090\(v1\)
+0*2000000c <[^>]*> 6500 nop
+0*2000000e <[^>]*> 6500 nop
+#pass
diff --git a/ld/testsuite/ld-mips-elf/textrel-1.d b/ld/testsuite/ld-mips-elf/textrel-1.d
index 7172bb7ea40f..16bd727f2814 100644
--- a/ld/testsuite/ld-mips-elf/textrel-1.d
+++ b/ld/testsuite/ld-mips-elf/textrel-1.d
@@ -4,14 +4,13 @@
#ld: -shared -melf32btsmipn32
#readelf: -d
-Dynamic section at offset 0xb4 contains 18 entries:
+Dynamic section at offset .* contains 17 entries:
Tag Type Name/Value
0x00000004 \(HASH\) 0x[0-9a-f]*
0x00000005 \(STRTAB\) 0x[0-9a-f]*
0x00000006 \(SYMTAB\) 0x[0-9a-f]*
0x0000000a \(STRSZ\) [0-9]* \(bytes\)
0x0000000b \(SYMENT\) 16 \(bytes\)
- 0x00000015 \(DEBUG\) 0x0
0x00000003 \(PLTGOT\) 0x[0-9a-f]*
0x00000011 \(REL\) 0x[0-9a-f]*
0x00000012 \(RELSZ\) 8 \(bytes\)
diff --git a/ld/testsuite/ld-mips-elf/tls-hidden3.r b/ld/testsuite/ld-mips-elf/tls-hidden3.r
index 500e7b170728..c0a23a5a5f30 100644
--- a/ld/testsuite/ld-mips-elf/tls-hidden3.r
+++ b/ld/testsuite/ld-mips-elf/tls-hidden3.r
@@ -7,7 +7,7 @@ Relocation section '\.rel\.dyn' at offset .* contains 6 entries:
# 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
+0009002c 0000002f R_MIPS_TLS_TPREL3
00090030 .*03 R_MIPS_REL32 00000000 undef
diff --git a/ld/testsuite/ld-mips-elf/tls-hidden4.r b/ld/testsuite/ld-mips-elf/tls-hidden4.r
index f6809b5280c0..f4d36b09fa3c 100644
--- a/ld/testsuite/ld-mips-elf/tls-hidden4.r
+++ b/ld/testsuite/ld-mips-elf/tls-hidden4.r
@@ -7,13 +7,13 @@ Relocation section '\.rel\.dyn' at offset .* contains .* entries:
# 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
+001c4088 0000002f R_MIPS_TLS_TPREL3
+001c408c 0000002f R_MIPS_TLS_TPREL3
+001d00cc 0000002f R_MIPS_TLS_TPREL3
+001d00d0 0000002f R_MIPS_TLS_TPREL3
+001d00d4 0000002f R_MIPS_TLS_TPREL3
+001d00d8 0000002f R_MIPS_TLS_TPREL3
.* R_MIPS_REL32 .*
#pass
diff --git a/ld/testsuite/ld-mips-elf/tls-multi-got-1.got b/ld/testsuite/ld-mips-elf/tls-multi-got-1.got
index fb8cc6659764..649baae8d4d4 100644
--- a/ld/testsuite/ld-mips-elf/tls-multi-got-1.got
+++ b/ld/testsuite/ld-mips-elf/tls-multi-got-1.got
@@ -4,55 +4,33 @@
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
+001495d0 R_MIPS_TLS_DTPMOD32 \*ABS\*
0013f954 R_MIPS_TLS_DTPMOD32 tlsvar_gd
0013f958 R_MIPS_TLS_DTPREL32 tlsvar_gd
-001495d8 R_MIPS_TLS_TPREL32 tlsvar_ie
+001495dc R_MIPS_TLS_DTPMOD32 tlsvar_gd
+001495e0 R_MIPS_TLS_DTPREL32 tlsvar_gd
0013f950 R_MIPS_TLS_TPREL32 tlsvar_ie
-00135fcc R_MIPS_REL32 sym_2_8355
+001495d8 R_MIPS_TLS_TPREL32 tlsvar_ie
+00143f7c R_MIPS_REL32 sym_1_9526
#...
-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\*
+00139bd0 R_MIPS_REL32 sym_2_8654
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.
+ 122420 00000000 80000000 00000000 00000000 .*
+ 122430 00000000 00000000 00000000 00000000 .*
+ 122440 00000000 00000000 00000000 00000000 .*
+ 122450 00000000 000d8048 000d66a4 000d2054 .*
#...
- 13f930 00000000 00000000 00000000 00000000 ................
- 13f940 00000000 00000000 00000000 00000000 ................
- 13f950 00000000 00000000 00000000 00000000 ................
- 13f960 80000000 00000000 00000000 00000000 ................
+ 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 ....
+ 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/ld/testsuite/ld-mips-elf/tls-multi-got-1.r b/ld/testsuite/ld-mips-elf/tls-multi-got-1.r
index 6b6be78bee76..db441147eccf 100644
--- a/ld/testsuite/ld-mips-elf/tls-multi-got-1.r
+++ b/ld/testsuite/ld-mips-elf/tls-multi-got-1.r
@@ -1,61 +1,38 @@
-Dynamic section at offset 0xec contains 19 entries:
+Dynamic section at offset .* contains 18 entries:
Tag Type Name/Value
- 0x00000004 \(HASH\) 0x1ac
- 0x00000005 \(STRTAB\) 0x71db8
- 0x00000006 \(SYMTAB\) 0x23ad8
+ 0x00000004 \(HASH\) 0x1c4
+ 0x00000005 \(STRTAB\).*
+ 0x00000006 \(SYMTAB\).*
0x0000000a \(STRSZ\) 220091 \(bytes\)
0x0000000b \(SYMENT\) 16 \(bytes\)
- 0x00000015 \(DEBUG\) 0x0
0x00000003 \(PLTGOT\) 0x122420
- 0x00000011 \(REL\) 0xa7974
+ 0x00000011 \(REL\) 0xa7978
0x00000012 \(RELSZ\) 160072 \(bytes\)
0x00000013 \(RELENT\) 8 \(bytes\)
0x70000001 \(MIPS_RLD_VERSION\) 1
0x70000005 \(MIPS_FLAGS\) NOTPOT
0x70000006 \(MIPS_BASE_ADDRESS\) 0
0x7000000a \(MIPS_LOCAL_GOTNO\) 13
- 0x70000011 \(MIPS_SYMTABNO\) 20014
+ 0x70000011 \(MIPS_SYMTABNO\) 20013
0x70000012 \(MIPS_UNREFEXTNO\) 11
- 0x70000013 \(MIPS_GOTSYM\) 0xe
+ 0x70000013 \(MIPS_GOTSYM\) 0xd
0x0000001e \(FLAGS\) STATIC_TLS
0x00000000 \(NULL\) 0x0
-Relocation section '\.rel\.dyn' at offset 0x[0-9a-f]+ contains 20031 entries:
+Relocation section '\.rel\.dyn' at offset 0x[0-9a-f]+ contains 20009 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
+[0-9a-f ]+R_MIPS_NONE
+[0-9a-f ]+R_MIPS_TLS_DTPMOD
+[0-9a-f ]+R_MIPS_TLS_DTPMOD
+[0-9a-f ]+R_MIPS_TLS_DTPMOD 00000000 tlsvar_gd
+[0-9a-f ]+R_MIPS_TLS_DTPREL 00000000 tlsvar_gd
+[0-9a-f ]+R_MIPS_TLS_DTPMOD 00000000 tlsvar_gd
+[0-9a-f ]+R_MIPS_TLS_DTPREL 00000000 tlsvar_gd
+[0-9a-f ]+R_MIPS_TLS_TPREL3 00000004 tlsvar_ie
+[0-9a-f ]+R_MIPS_TLS_TPREL3 00000004 tlsvar_ie
+[0-9a-f ]+R_MIPS_REL32 000d8048 sym_1_9526
+[0-9a-f ]+R_MIPS_REL32 000d66a4 sym_1_7885
#...
-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
+[0-9a-f ]+R_MIPS_REL32 000cf2b4 sym_1_0465
+[0-9a-f ]+R_MIPS_REL32 000e0ef8 sym_2_8654
diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d b/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d
index 80da24763f4a..3637049c5e32 100644
--- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d
+++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d
@@ -5,7 +5,7 @@ Disassembly of section .text:
.* <__start>:
.*: 3c1c0fc0 lui gp,0xfc0
- .*: 279c7b70 addiu gp,gp,31600
+ .*: 279c7b80 addiu gp,gp,31616
.*: 0399e021 addu gp,gp,t9
.*: 27bdfff0 addiu sp,sp,-16
.*: afbe0008 sw s8,8\(sp\)
@@ -55,7 +55,7 @@ Disassembly of section .text:
.* <other>:
.*: 3c1c0fc0 lui gp,0xfc0
- .*: 279c7ab0 addiu gp,gp,31408
+ .*: 279c7ac0 addiu gp,gp,31424
.*: 0399e021 addu gp,gp,t9
.*: 27bdfff0 addiu sp,sp,-16
.*: afbe0008 sw s8,8\(sp\)
diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got b/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got
index 8f5084fb51e4..9b2e722a4d72 100644
--- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got
+++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got
@@ -4,16 +4,16 @@
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
+10000054 R_MIPS_TLS_DTPMOD32 tlsbin_gd
+10000058 R_MIPS_TLS_DTPREL32 tlsbin_gd
+10000048 R_MIPS_TLS_DTPMOD32 tlsvar_gd
+1000004c R_MIPS_TLS_DTPREL32 tlsvar_gd
+10000050 R_MIPS_TLS_TPREL32 tlsvar_ie
+1000005c 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 ................
+ 10000020 00000000 80000000 00000000 00000000 ................
+ 10000030 00000000 00000000 00000000 0040053c .............@..
+ 10000040 00000001 00000000 00000000 00000000 ................
+ 10000050 00000000 00000000 00000000 00000000 ................
diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d
index 00965208dc0c..0c466b695ba3 100644
--- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d
+++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d
@@ -5,7 +5,7 @@ Disassembly of section .text:
.* <__start>:
.*: 3c1c0fc0 lui gp,0xfc0
- .*: 279c7b70 addiu gp,gp,31600
+ .*: 279c7b80 addiu gp,gp,31616
.*: 0399e021 addu gp,gp,t9
.*: 27bdfff0 addiu sp,sp,-16
.*: afbe0008 sw s8,8\(sp\)
@@ -55,7 +55,7 @@ Disassembly of section .text:
.* <other>:
.*: 3c1c0fc0 lui gp,0xfc0
- .*: 279c7ab0 addiu gp,gp,31408
+ .*: 279c7ac0 addiu gp,gp,31424
.*: 0399e021 addu gp,gp,t9
.*: 27bdfff0 addiu sp,sp,-16
.*: afbe0008 sw s8,8\(sp\)
diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got
index 9f8b3ba1cf2d..ba617bbe3678 100644
--- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got
+++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got
@@ -4,17 +4,17 @@
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
+10000058 R_MIPS_TLS_DTPMOD32 tlsbin_gd
+1000005c R_MIPS_TLS_DTPREL32 tlsbin_gd
+1000004c R_MIPS_TLS_DTPMOD32 tlsvar_gd
+10000050 R_MIPS_TLS_DTPREL32 tlsvar_gd
+10000054 R_MIPS_TLS_TPREL32 tlsvar_ie
+10000060 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 ................
+ 10000020 00000000 80000000 00000000 00000000 .*
+ 10000030 00000000 00000000 00000000 00000000 .*
+ 10000040 0040053c 00000001 00000000 00000000 .*
+ 10000050 00000000 00000000 00000000 00000000 .*
+ 10000060 00000000 00000000 00000000 00000000 .*
diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d
index ae671e8d2776..31f1666f5da8 100644
--- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d
+++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d
@@ -5,7 +5,7 @@ Disassembly of section .text:
.* <other>:
.*: 3c1c0fc0 lui gp,0xfc0
- .*: 279c7b70 addiu gp,gp,31600
+ .*: 279c7b80 addiu gp,gp,31616
.*: 0399e021 addu gp,gp,t9
.*: 27bdfff0 addiu sp,sp,-16
.*: afbe0008 sw s8,8\(sp\)
@@ -51,7 +51,7 @@ Disassembly of section .text:
.* <__start>:
.*: 3c1c0fc0 lui gp,0xfc0
- .*: 279c7ac0 addiu gp,gp,31424
+ .*: 279c7ad0 addiu gp,gp,31440
.*: 0399e021 addu gp,gp,t9
.*: 27bdfff0 addiu sp,sp,-16
.*: afbe0008 sw s8,8\(sp\)
diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got
index 734295236165..addfc0fb1e0f 100644
--- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got
+++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got
@@ -4,17 +4,17 @@
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
+10000058 R_MIPS_TLS_DTPMOD32 tlsbin_gd
+1000005c R_MIPS_TLS_DTPREL32 tlsbin_gd
+1000004c R_MIPS_TLS_DTPMOD32 tlsvar_gd
+10000050 R_MIPS_TLS_DTPREL32 tlsvar_gd
+10000054 R_MIPS_TLS_TPREL32 tlsvar_ie
+10000060 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 ................
+ 10000020 00000000 80000000 00000000 00000000 ................
+ 10000030 00000000 00000000 00000000 00000000 ................
+ 10000040 004005ec 00000001 00000000 00000000 .@..............
10000050 00000000 00000000 00000000 00000000 ................
+ 10000060 00000000 00000000 00000000 00000000 ................
diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32.d b/ld/testsuite/ld-mips-elf/tlsdyn-o32.d
index 5fb13a09d5c4..31e9e02af75d 100644
--- a/ld/testsuite/ld-mips-elf/tlsdyn-o32.d
+++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32.d
@@ -5,7 +5,7 @@ Disassembly of section .text:
.* <__start>:
.*: 3c1c0fc0 lui gp,0xfc0
- .*: 279c7bb0 addiu gp,gp,31664
+ .*: 279c7ba0 addiu gp,gp,31648
.*: 0399e021 addu gp,gp,t9
.*: 27bdfff0 addiu sp,sp,-16
.*: afbe0008 sw s8,8\(sp\)
diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32.got b/ld/testsuite/ld-mips-elf/tlsdyn-o32.got
index 206fd241985d..100633267a47 100644
--- a/ld/testsuite/ld-mips-elf/tlsdyn-o32.got
+++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32.got
@@ -4,16 +4,16 @@ 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
+10000048 R_MIPS_TLS_DTPMOD32 tlsbin_gd
+1000004c R_MIPS_TLS_DTPREL32 tlsbin_gd
+10000058 R_MIPS_TLS_DTPMOD32 tlsvar_gd
+1000005c R_MIPS_TLS_DTPREL32 tlsvar_gd
+10000054 R_MIPS_TLS_TPREL32 tlsbin_ie
+10000050 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 ................
+ 10000020 00000000 80000000 00000000 00000000 ................
+ 10000030 00000000 00000000 00000000 0040051c ................
+ 10000040 00000001 00000000 00000000 00000000 ................
+ 10000050 00000000 00000000 00000000 00000000 ................
diff --git a/ld/testsuite/ld-mips-elf/tlslib-o32-hidden.got b/ld/testsuite/ld-mips-elf/tlslib-o32-hidden.got
index a897ec462edd..1507f2c1a887 100644
--- a/ld/testsuite/ld-mips-elf/tlslib-o32-hidden.got
+++ b/ld/testsuite/ld-mips-elf/tlslib-o32-hidden.got
@@ -4,13 +4,13 @@
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\*
+000403d0 R_MIPS_TLS_TPREL32 \*ABS\*
+000403d4 R_MIPS_TLS_DTPMOD32 \*ABS\*
+000403dc R_MIPS_TLS_DTPMOD32 \*ABS\*
Contents of section .got:
- 403d0 00000000 80000000 00000000 00000000 ................
- 403e0 00000000 00000000 00000000 000003a0 ................
- 403f0 00000008 00000000 00000000 00000000 ................
- 40400 ffff8004 ....
+ 403b0 00000000 80000000 00000000 00000000 ................
+ 403c0 00000000 00000000 00000000 00000380 ................
+ 403d0 00000008 00000000 00000000 00000000 ................
+ 403e0 ffff8004 ....
diff --git a/ld/testsuite/ld-mips-elf/tlslib-o32-ver.got b/ld/testsuite/ld-mips-elf/tlslib-o32-ver.got
index 94de65320daa..c0bf509f4469 100644
--- a/ld/testsuite/ld-mips-elf/tlslib-o32-ver.got
+++ b/ld/testsuite/ld-mips-elf/tlslib-o32-ver.got
@@ -4,14 +4,14 @@
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
+00040534 R_MIPS_TLS_DTPMOD32 \*ABS\*
+0004053c R_MIPS_TLS_DTPMOD32 tlsvar_gd
+00040540 R_MIPS_TLS_DTPREL32 tlsvar_gd
+00040530 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 ....
+ 40510 00000000 80000000 00000000 00000000 ................
+ 40520 00000000 00000000 00000000 000004e0 ................
+ 40530 00000000 00000000 00000000 00000000 ................
+ 40540 00000000 ....
diff --git a/ld/testsuite/ld-mips-elf/tlslib-o32.got b/ld/testsuite/ld-mips-elf/tlslib-o32.got
index 1831eb26e340..7307081e3cce 100644
--- a/ld/testsuite/ld-mips-elf/tlslib-o32.got
+++ b/ld/testsuite/ld-mips-elf/tlslib-o32.got
@@ -4,14 +4,14 @@ 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
+00040494 R_MIPS_TLS_DTPMOD32 \*ABS\*
+0004049c R_MIPS_TLS_DTPMOD32 tlsvar_gd
+000404a0 R_MIPS_TLS_DTPREL32 tlsvar_gd
+00040490 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 ....
+ 40470 00000000 80000000 00000000 00000000 ................
+ 40480 00000000 00000000 00000000 00000440 ................
+ 40490 00000000 00000000 00000000 00000000 ................
+ 404a0 00000000 ....
diff --git a/ld/testsuite/ld-mips-elf/vxworks1-lib.rd b/ld/testsuite/ld-mips-elf/vxworks1-lib.rd
index 9a8b35e78028..56bc9a8f04a8 100644
--- a/ld/testsuite/ld-mips-elf/vxworks1-lib.rd
+++ b/ld/testsuite/ld-mips-elf/vxworks1-lib.rd
@@ -4,12 +4,12 @@ Relocation section '\.rela\.dyn' at offset .* contains .* entries:
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
+0008141c 00000002 R_MIPS_32 00080c5c
+00081800 00000002 R_MIPS_32 00080c5c
+00081804 00000002 R_MIPS_32 00081800
+00081808 .*02 R_MIPS_32 00081808 dglobal \+ 0
+0008180c .*02 R_MIPS_32 00000000 dexternal \+ 0
+00081424 .*02 R_MIPS_32 00081c00 x \+ 0
00000000 00000000 R_MIPS_NONE 00000000
#...
Relocation section '\.rela\.plt' at offset .* contains 2 entries:
diff --git a/ld/testsuite/ld-mips-elf/vxworks1-lib.td b/ld/testsuite/ld-mips-elf/vxworks1-lib.td
new file mode 100644
index 000000000000..9f223e38da16
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/vxworks1-lib.td
@@ -0,0 +1,3 @@
+#...
+ 0x0+16 \(TEXTREL\) +0x0
+#pass
diff --git a/ld/testsuite/ld-mips-elf/vxworks1.ld b/ld/testsuite/ld-mips-elf/vxworks1.ld
index 74e2c2612a95..8fe3c48e080c 100644
--- a/ld/testsuite/ld-mips-elf/vxworks1.ld
+++ b/ld/testsuite/ld-mips-elf/vxworks1.ld
@@ -23,10 +23,10 @@ SECTIONS
.got : { *(.got.plt) *(.got) }
. = ALIGN (0x400);
- .bss : { *(.bss) *(.dynbss) }
+ .data : { *(.data) }
. = ALIGN (0x400);
- .data : { *(.data) }
+ .bss : { *(.bss) *(.dynbss) }
/DISCARD/ : { *(.reginfo) }
}
diff --git a/ld/testsuite/ld-mips-elf/vxworks1.rd b/ld/testsuite/ld-mips-elf/vxworks1.rd
index f4793a22e0d5..f4455f58b93c 100644
--- a/ld/testsuite/ld-mips-elf/vxworks1.rd
+++ b/ld/testsuite/ld-mips-elf/vxworks1.rd
@@ -1,7 +1,7 @@
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
+00081c00 .*7e R_MIPS_COPY 00081c00 dglobal \+ 0
Relocation section '\.rela\.plt' at offset .* contains 2 entries:
Offset Info Type Sym\.Value Sym\. Name \+ Addend
@@ -16,9 +16,9 @@ Relocation section '\.rela\.text' at offset .* contains 3 entries:
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
+00081800 .*02 R_MIPS_32 00081800 .data \+ 0
+00081804 .*02 R_MIPS_32 00081c00 .bss \+ 0
+00081808 .*02 R_MIPS_32 00081804 dexternal \+ 0
Relocation section '\.rela\.plt\.unloaded' at offset .* contains 8 entries:
Offset Info Type Sym\.Value Sym\. Name \+ Addend
diff --git a/ld/testsuite/ld-mmix/bpo-1.d b/ld/testsuite/ld-mmix/bpo-1.d
index 5b07e5f4253d..97bc33d96913 100644
--- a/ld/testsuite/ld-mmix/bpo-1.d
+++ b/ld/testsuite/ld-mmix/bpo-1.d
@@ -11,9 +11,6 @@
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
#...
diff --git a/ld/testsuite/ld-mmix/bpo-10.d b/ld/testsuite/ld-mmix/bpo-10.d
index dfd9858176c0..713d7ad2949f 100644
--- a/ld/testsuite/ld-mmix/bpo-10.d
+++ b/ld/testsuite/ld-mmix/bpo-10.d
@@ -12,14 +12,11 @@
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\.
+0+4 g \.init 0+ _start\.
Contents of section \.init:
0000 e37704a6 .*
diff --git a/ld/testsuite/ld-mmix/bpo-11.d b/ld/testsuite/ld-mmix/bpo-11.d
index 1adeb1d74c58..5925cff51ee7 100644
--- a/ld/testsuite/ld-mmix/bpo-11.d
+++ b/ld/testsuite/ld-mmix/bpo-11.d
@@ -14,9 +14,6 @@ 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
diff --git a/ld/testsuite/ld-mmix/bpo-14.d b/ld/testsuite/ld-mmix/bpo-14.d
index e57412c31a45..e19e4a8528d9 100644
--- a/ld/testsuite/ld-mmix/bpo-14.d
+++ b/ld/testsuite/ld-mmix/bpo-14.d
@@ -12,9 +12,6 @@
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
#...
diff --git a/ld/testsuite/ld-mmix/bpo-16.d b/ld/testsuite/ld-mmix/bpo-16.d
index a4022e1679b1..d7e372c75f2c 100644
--- a/ld/testsuite/ld-mmix/bpo-16.d
+++ b/ld/testsuite/ld-mmix/bpo-16.d
@@ -13,9 +13,6 @@
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
#...
diff --git a/ld/testsuite/ld-mmix/bpo-17.d b/ld/testsuite/ld-mmix/bpo-17.d
index 6c8fe34fc94b..f70b852339d8 100644
--- a/ld/testsuite/ld-mmix/bpo-17.d
+++ b/ld/testsuite/ld-mmix/bpo-17.d
@@ -12,9 +12,6 @@
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
#...
diff --git a/ld/testsuite/ld-mmix/bpo-18.d b/ld/testsuite/ld-mmix/bpo-18.d
index 96fda3b621bb..3d1d2f11a941 100644
--- a/ld/testsuite/ld-mmix/bpo-18.d
+++ b/ld/testsuite/ld-mmix/bpo-18.d
@@ -13,9 +13,6 @@ 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
diff --git a/ld/testsuite/ld-mmix/bpo-19.d b/ld/testsuite/ld-mmix/bpo-19.d
index 870dba2369f5..d8ee554012bd 100644
--- a/ld/testsuite/ld-mmix/bpo-19.d
+++ b/ld/testsuite/ld-mmix/bpo-19.d
@@ -12,9 +12,6 @@
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
#...
diff --git a/ld/testsuite/ld-mmix/bpo-2.d b/ld/testsuite/ld-mmix/bpo-2.d
index 4781175e852b..7206cab26754 100644
--- a/ld/testsuite/ld-mmix/bpo-2.d
+++ b/ld/testsuite/ld-mmix/bpo-2.d
@@ -12,9 +12,6 @@
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
diff --git a/ld/testsuite/ld-mmix/bpo-22.d b/ld/testsuite/ld-mmix/bpo-22.d
index 15aea8535899..c6a13145583c 100644
--- a/ld/testsuite/ld-mmix/bpo-22.d
+++ b/ld/testsuite/ld-mmix/bpo-22.d
@@ -12,9 +12,6 @@
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
diff --git a/ld/testsuite/ld-mmix/bpo-3.d b/ld/testsuite/ld-mmix/bpo-3.d
index 00fb7a9b23a3..e1435ef35ebb 100644
--- a/ld/testsuite/ld-mmix/bpo-3.d
+++ b/ld/testsuite/ld-mmix/bpo-3.d
@@ -12,9 +12,6 @@
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
#...
diff --git a/ld/testsuite/ld-mmix/bpo-4.d b/ld/testsuite/ld-mmix/bpo-4.d
index 1e7c9036aa33..372e7e6acbef 100644
--- a/ld/testsuite/ld-mmix/bpo-4.d
+++ b/ld/testsuite/ld-mmix/bpo-4.d
@@ -13,9 +13,6 @@
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
diff --git a/ld/testsuite/ld-mmix/bpo-5.d b/ld/testsuite/ld-mmix/bpo-5.d
index 046002815616..a1a192d61697 100644
--- a/ld/testsuite/ld-mmix/bpo-5.d
+++ b/ld/testsuite/ld-mmix/bpo-5.d
@@ -13,9 +13,6 @@
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
#...
diff --git a/ld/testsuite/ld-mmix/bpo-6.d b/ld/testsuite/ld-mmix/bpo-6.d
index 39c3a912a41f..a5978c935024 100644
--- a/ld/testsuite/ld-mmix/bpo-6.d
+++ b/ld/testsuite/ld-mmix/bpo-6.d
@@ -11,9 +11,6 @@
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
#...
diff --git a/ld/testsuite/ld-mmix/bpo-9.d b/ld/testsuite/ld-mmix/bpo-9.d
index f230b195aea5..16d001769646 100644
--- a/ld/testsuite/ld-mmix/bpo-9.d
+++ b/ld/testsuite/ld-mmix/bpo-9.d
@@ -13,9 +13,6 @@ 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
diff --git a/ld/testsuite/ld-mmix/bspec1.d b/ld/testsuite/ld-mmix/bspec1.d
index ce83480f286b..79d53d42f098 100644
--- a/ld/testsuite/ld-mmix/bspec1.d
+++ b/ld/testsuite/ld-mmix/bspec1.d
@@ -17,8 +17,8 @@ Section Headers:
\[ 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+d8 0+18 5 3 8
+ \[ 5\] \.strtab STRTAB 0+ 0+310
0+2d 0+ 0 0 1
Key to Flags:
W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
@@ -27,16 +27,13 @@ Key to Flags:
There are no relocations in this file\.
-Symbol table '\.symtab' contains 12 entries:
+Symbol table '\.symtab' contains 9 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0+ 0 NOTYPE LOCAL DEFAULT UND
1: 0+ 0 SECTION LOCAL DEFAULT 1
2: 0+ 0 SECTION LOCAL DEFAULT 2
- 3: 0+ 0 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
+ 3: 0+ 0 FUNC GLOBAL DEFAULT 1 Main
+ 4: 0+ 0 NOTYPE GLOBAL DEFAULT 1 _start
#...
Hex dump of section '\.text':
diff --git a/ld/testsuite/ld-mmix/bspec2.d b/ld/testsuite/ld-mmix/bspec2.d
index b5e683b91108..98296e729e7c 100644
--- a/ld/testsuite/ld-mmix/bspec2.d
+++ b/ld/testsuite/ld-mmix/bspec2.d
@@ -22,8 +22,8 @@ Section Headers:
\[ 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+108 0+18 6 4 8
+ \[ 6\] \.strtab STRTAB 0+ 0+398
0+32 0+ 0 0 1
Key to Flags:
W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
@@ -32,18 +32,15 @@ Key to Flags:
There are no relocations in this file\.
-Symbol table '\.symtab' contains 14 entries:
+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 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
+ 4: 0+ 0 FUNC GLOBAL DEFAULT 1 Main
+ 5: 0+fc 0 NOTYPE GLOBAL DEFAULT ABS ext1
+ 6: 0+ 0 NOTYPE GLOBAL DEFAULT 1 _start
#...
Hex dump of section '\.text':
diff --git a/ld/testsuite/ld-mmix/greg-1.d b/ld/testsuite/ld-mmix/greg-1.d
index b5a42ca663be..d64ce0a684e0 100644
--- a/ld/testsuite/ld-mmix/greg-1.d
+++ b/ld/testsuite/ld-mmix/greg-1.d
@@ -12,9 +12,6 @@
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
#...
diff --git a/ld/testsuite/ld-mmix/greg-19.d b/ld/testsuite/ld-mmix/greg-19.d
index b4a90251c51d..44681617370b 100644
--- a/ld/testsuite/ld-mmix/greg-19.d
+++ b/ld/testsuite/ld-mmix/greg-19.d
@@ -9,9 +9,6 @@
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
diff --git a/ld/testsuite/ld-mmix/greg-2.d b/ld/testsuite/ld-mmix/greg-2.d
index baf364743bbf..ab8fbb2a8f3c 100644
--- a/ld/testsuite/ld-mmix/greg-2.d
+++ b/ld/testsuite/ld-mmix/greg-2.d
@@ -16,9 +16,6 @@
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
diff --git a/ld/testsuite/ld-mmix/greg-3.d b/ld/testsuite/ld-mmix/greg-3.d
index 0e55087f1814..25189c22daf4 100644
--- a/ld/testsuite/ld-mmix/greg-3.d
+++ b/ld/testsuite/ld-mmix/greg-3.d
@@ -16,9 +16,6 @@
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
#...
diff --git a/ld/testsuite/ld-mmix/greg-4.d b/ld/testsuite/ld-mmix/greg-4.d
index 67715ed134c4..8b882c1f6a6b 100644
--- a/ld/testsuite/ld-mmix/greg-4.d
+++ b/ld/testsuite/ld-mmix/greg-4.d
@@ -13,9 +13,6 @@
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
#...
diff --git a/ld/testsuite/ld-mmix/greg-5.d b/ld/testsuite/ld-mmix/greg-5.d
index 81f4fa5b6d53..67e50d295d9a 100644
--- a/ld/testsuite/ld-mmix/greg-5.d
+++ b/ld/testsuite/ld-mmix/greg-5.d
@@ -13,9 +13,6 @@
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
#...
diff --git a/ld/testsuite/ld-mmix/greg-5s.d b/ld/testsuite/ld-mmix/greg-5s.d
index 30d3b04de0bd..84f59517bbcc 100644
--- a/ld/testsuite/ld-mmix/greg-5s.d
+++ b/ld/testsuite/ld-mmix/greg-5s.d
@@ -12,9 +12,6 @@
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
#...
diff --git a/ld/testsuite/ld-mmix/greg-6.d b/ld/testsuite/ld-mmix/greg-6.d
index 2cf163e61813..e4df905a1dbb 100644
--- a/ld/testsuite/ld-mmix/greg-6.d
+++ b/ld/testsuite/ld-mmix/greg-6.d
@@ -41,9 +41,6 @@
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
diff --git a/ld/testsuite/ld-mmix/greg-7.d b/ld/testsuite/ld-mmix/greg-7.d
index 13d0aa23e91c..a5d1692e9515 100644
--- a/ld/testsuite/ld-mmix/greg-7.d
+++ b/ld/testsuite/ld-mmix/greg-7.d
@@ -41,9 +41,6 @@
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
diff --git a/ld/testsuite/ld-mmix/loc1.d b/ld/testsuite/ld-mmix/loc1.d
index 7ecf491531e3..cac26892d711 100644
--- a/ld/testsuite/ld-mmix/loc1.d
+++ b/ld/testsuite/ld-mmix/loc1.d
@@ -8,9 +8,6 @@
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
diff --git a/ld/testsuite/ld-mmix/loc2.d b/ld/testsuite/ld-mmix/loc2.d
index c4e8cc9a15a2..7d44c2241a85 100644
--- a/ld/testsuite/ld-mmix/loc2.d
+++ b/ld/testsuite/ld-mmix/loc2.d
@@ -9,9 +9,6 @@
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
diff --git a/ld/testsuite/ld-mmix/loc3.d b/ld/testsuite/ld-mmix/loc3.d
index 7969d0010911..ff0fe8ada2ae 100644
--- a/ld/testsuite/ld-mmix/loc3.d
+++ b/ld/testsuite/ld-mmix/loc3.d
@@ -9,9 +9,6 @@
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
diff --git a/ld/testsuite/ld-mmix/loc4.d b/ld/testsuite/ld-mmix/loc4.d
index 15333de542a5..34428a984587 100644
--- a/ld/testsuite/ld-mmix/loc4.d
+++ b/ld/testsuite/ld-mmix/loc4.d
@@ -11,9 +11,6 @@
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
diff --git a/ld/testsuite/ld-mmix/loc6.d b/ld/testsuite/ld-mmix/loc6.d
index 030ba6c2d515..425edaee0760 100644
--- a/ld/testsuite/ld-mmix/loc6.d
+++ b/ld/testsuite/ld-mmix/loc6.d
@@ -10,9 +10,6 @@
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
diff --git a/ld/testsuite/ld-mmix/local1.d b/ld/testsuite/ld-mmix/local1.d
index 3e8ecaa1564a..fc08da774fd0 100644
--- a/ld/testsuite/ld-mmix/local1.d
+++ b/ld/testsuite/ld-mmix/local1.d
@@ -24,26 +24,23 @@ Section Headers:
\[ 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+108 0+18 5 5 8
+ \[ 5\] \.strtab STRTAB 0+ 0+350
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:
+Symbol table '\.symtab' contains 11 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0+ 0 NOTYPE LOCAL DEFAULT UND
1: 0+ 0 SECTION LOCAL DEFAULT 1
2: 0+7e8 0 SECTION LOCAL DEFAULT 2
- 3: 0+ 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
+ 3: 0+fd 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 4: 0+fe 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 5: 0+fc 0 NOTYPE GLOBAL DEFAULT PRC\[0xff00\] ext1
+ 6: 0+4 0 NOTYPE GLOBAL DEFAULT 1 _start
#...
Hex dump of section '\.text':
diff --git a/ld/testsuite/ld-mmix/local3.d b/ld/testsuite/ld-mmix/local3.d
index db545913cc48..62db6c342413 100644
--- a/ld/testsuite/ld-mmix/local3.d
+++ b/ld/testsuite/ld-mmix/local3.d
@@ -22,26 +22,23 @@ Section Headers:
\[ 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+108 0+18 5 5 8
+ \[ 5\] \.strtab STRTAB 0+ 0+350
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:
+Symbol table '\.symtab' contains 11 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0+ 0 NOTYPE LOCAL DEFAULT UND
1: 0+ 0 SECTION LOCAL DEFAULT 1
2: 0+7e8 0 SECTION LOCAL DEFAULT 2
- 3: 0+ 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
+ 3: 0+fd 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 4: 0+fe 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 5: 0+fc 0 NOTYPE GLOBAL DEFAULT ABS ext1
+ 6: 0+4 0 NOTYPE GLOBAL DEFAULT 1 _start
#...
Hex dump of section '\.text':
diff --git a/ld/testsuite/ld-mmix/local5.d b/ld/testsuite/ld-mmix/local5.d
index 37dc0f569f69..955c3fada771 100644
--- a/ld/testsuite/ld-mmix/local5.d
+++ b/ld/testsuite/ld-mmix/local5.d
@@ -23,26 +23,23 @@ Section Headers:
\[ 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+108 0+18 5 5 8
+ \[ 5\] \.strtab STRTAB 0+ 0+350
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:
+Symbol table '\.symtab' contains 11 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0+ 0 NOTYPE LOCAL DEFAULT UND
1: 0+ 0 SECTION LOCAL DEFAULT 1
2: 0+7e8 0 SECTION LOCAL DEFAULT 2
- 3: 0+ 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
+ 3: 0+fd 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 4: 0+fe 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 5: 0+fc 0 NOTYPE GLOBAL DEFAULT PRC\[0xff00\] ext1
+ 6: 0+8 0 NOTYPE GLOBAL DEFAULT 1 _start
#...
Hex dump of section '\.text':
diff --git a/ld/testsuite/ld-mmix/local7.d b/ld/testsuite/ld-mmix/local7.d
index 2407fcdfb196..0109d1380033 100644
--- a/ld/testsuite/ld-mmix/local7.d
+++ b/ld/testsuite/ld-mmix/local7.d
@@ -24,26 +24,23 @@ Section Headers:
\[ 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+108 0+18 5 5 8
+ \[ 5\] \.strtab STRTAB 0+ 0+350
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:
+Symbol table '\.symtab' contains 11 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0+ 0 NOTYPE LOCAL DEFAULT UND
1: 0+ 0 SECTION LOCAL DEFAULT 1
2: 0+7e8 0 SECTION LOCAL DEFAULT 2
- 3: 0+ 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
+ 3: 0+fd 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 4: 0+fe 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 5: 0+fc 0 NOTYPE GLOBAL DEFAULT ABS ext1
+ 6: 0+8 0 NOTYPE GLOBAL DEFAULT 1 _start
#...
Hex dump of section '\.text':
diff --git a/ld/testsuite/ld-mmix/locdo-1.d b/ld/testsuite/ld-mmix/locdo-1.d
index 2e8409fddd44..4a1673506754 100644
--- a/ld/testsuite/ld-mmix/locdo-1.d
+++ b/ld/testsuite/ld-mmix/locdo-1.d
@@ -8,9 +8,6 @@
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
diff --git a/ld/testsuite/ld-mmix/loct-1.d b/ld/testsuite/ld-mmix/loct-1.d
index 96b6a1451a74..24f4112de663 100644
--- a/ld/testsuite/ld-mmix/loct-1.d
+++ b/ld/testsuite/ld-mmix/loct-1.d
@@ -7,9 +7,6 @@
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
diff --git a/ld/testsuite/ld-mmix/locto-1.d b/ld/testsuite/ld-mmix/locto-1.d
index 08e665273b32..5c5c391edacb 100644
--- a/ld/testsuite/ld-mmix/locto-1.d
+++ b/ld/testsuite/ld-mmix/locto-1.d
@@ -7,9 +7,6 @@
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
diff --git a/ld/testsuite/ld-mmix/start-1.d b/ld/testsuite/ld-mmix/start-1.d
index 13fdbdc48ca8..37c23d6ed4fe 100644
--- a/ld/testsuite/ld-mmix/start-1.d
+++ b/ld/testsuite/ld-mmix/start-1.d
@@ -6,9 +6,6 @@
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
diff --git a/ld/testsuite/ld-mmix/undef-3.d b/ld/testsuite/ld-mmix/undef-3.d
index a17b96877423..5b3ce98ea7d8 100644
--- a/ld/testsuite/ld-mmix/undef-3.d
+++ b/ld/testsuite/ld-mmix/undef-3.d
@@ -14,24 +14,21 @@ Section Headers:
\[ 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+c0 0+18 4 2 8
+ \[ 4\] \.strtab STRTAB 0+ 0+2a0
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:
+Symbol table '\.symtab' contains 8 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0+ 0 NOTYPE LOCAL DEFAULT UND
1: 0+ 0 SECTION LOCAL DEFAULT 1
- 2: 0+ 0 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\.
+ 2: 0+ 0 NOTYPE GLOBAL DEFAULT UND undefd
+ 3: 0+ 0 NOTYPE GLOBAL DEFAULT 1 _start
+ 4: 2000000000000000 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+ 5: 2000000000000000 0 NOTYPE GLOBAL DEFAULT ABS _edata
+ 6: 2000000000000000 0 NOTYPE GLOBAL DEFAULT ABS _end
+ 7: 0+ 0 NOTYPE GLOBAL DEFAULT 1 _start\.
diff --git a/ld/testsuite/ld-pe/direct.exp b/ld/testsuite/ld-pe/direct.exp
new file mode 100644
index 000000000000..bfe8f1e793c2
--- /dev/null
+++ b/ld/testsuite/ld-pe/direct.exp
@@ -0,0 +1,143 @@
+# Expect script for direct linking from dll 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.
+#
+# Written by Pedro Alves <pedro_alves@portugalmail.pt>
+#
+
+# Note:
+#
+# This test checks the "direct linking to a dll" functionality.
+#
+# The test has 7 stages:
+#
+# 1. compile and link a test dll with ".dll" extension.
+#
+# 2. compile and link a test dll with ".sl" (i.e. != ".dll") extension.
+#
+# 3. compile and link a client application linking directly to the ".dll" dll built in 1.
+# This should produce no errors.
+#
+# 4. compile and link a client application linking directly to the ".sl" dll built in 2.
+# This should produce no errors.
+#
+# 5. compile and link a client application linking directly to a symlink into
+# the ".dll" dll built in 1.
+# This should produce no errors.
+#
+# 6. compile and link a client application linking directly to a symlink into
+# the ".sl" dll built in 1.
+# This should produce no errors.
+#
+# 7. run the produced executables
+
+# This test can only be run on PE/COFF platforms.
+if { ![istarget *-*-cygwin*]
+ && ![istarget *-*-mingw*]
+ && ![istarget *-*-pe] } {
+ return
+}
+
+# No compiler, no test.
+if { [which $CC] == 0 } {
+ untested "Direct linking to dll test"
+ return
+}
+
+set tmpdir tmpdir
+
+proc test_direct_link_dll {} {
+ global CC
+ global CFLAGS
+ global srcdir
+ global subdir
+ global tmpdir
+
+ # Compile the dll.
+ if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/direct_dll.c $tmpdir/direct_dll.o ] {
+ fail "compiling shared lib"
+ } elseif ![ld_simple_link "$CC -shared" $tmpdir/direct_dll.dll "$tmpdir/direct_dll.o" ] {
+ fail "linking shared lib (.dll)"
+ } elseif ![ld_simple_link "$CC -shared" $tmpdir/direct_dll.sl "$tmpdir/direct_dll.o" ] {
+ fail "linking shared lib (.sl)"
+ } else {
+ # Compile and link the client program.
+ if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/direct_client.c $tmpdir/direct_client.o ] {
+ fail "compiling client"
+ } else {
+ # Check linking directly to direct_dll.dll.
+ set msg "linking client (.dll)"
+ if [ld_simple_link $CC $tmpdir/direct_client_dll.exe "$tmpdir/direct_client.o $tmpdir/direct_dll.dll" ] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+
+ # Check linking directly to direct_dll.sl.
+ set msg "linking client (.sl)"
+ if [ld_simple_link $CC $tmpdir/direct_client_sl.exe "$tmpdir/direct_client.o $tmpdir/direct_dll.sl" ] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+
+ # Check dll direct linking through symlink to .dll.
+ # Create symbolic link.
+ catch "exec ln -fs direct_dll.dll $tmpdir/libdirect_dll.dll.a" ln_catch
+ set msg "linking client (symlink -> .dll)"
+ if [ld_simple_link $CC $tmpdir/direct_client_symlink_dll.exe "$tmpdir/direct_client.o $tmpdir/libdirect_dll.dll.a" ] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+
+ # Check dll direct linking through symlink to .sl.
+ # Create symbolic link.
+ catch "exec ln -fs direct_dll.sl $tmpdir/libdirect_sl.dll.a" ln_catch
+ set msg "linking client (symlink -> .sl)"
+ if [ld_simple_link $CC $tmpdir/direct_client_symlink_sl.exe "$tmpdir/direct_client.o $tmpdir/libdirect_sl.dll.a" ] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+ }
+ }
+}
+
+proc directdll_execute {exe msg} {
+ set expected ""
+ catch "exec $exe" prog_output
+ if [string match $expected $prog_output] then {
+ pass $msg
+ } else {
+ verbose $prog_output
+ fail $msg
+ }
+}
+
+test_direct_link_dll
+
+# This is as far as we can go with a cross-compiler
+if ![isnative] then {
+ verbose "Not running natively, so cannot execute binaries"
+ return
+}
+
+directdll_execute "$tmpdir/direct_client_dll.exe" "running direct linked dll (.dll)"
+directdll_execute "$tmpdir/direct_client_sl.exe" "running direct linked dll (.sl)"
+directdll_execute "$tmpdir/direct_client_symlink_sl.exe" "running direct linked dll (symlink -> .sl)"
+directdll_execute "$tmpdir/direct_client_symlink_dll.exe" "running direct linked dll (symlink -> .dll)"
diff --git a/ld/testsuite/ld-pe/direct_client.c b/ld/testsuite/ld-pe/direct_client.c
new file mode 100644
index 000000000000..6264a786e3c0
--- /dev/null
+++ b/ld/testsuite/ld-pe/direct_client.c
@@ -0,0 +1,8 @@
+__declspec(dllimport) int dll_func (void);
+
+int
+main()
+{
+ dll_func ();
+ return 0;
+}
diff --git a/ld/testsuite/ld-pe/direct_dll.c b/ld/testsuite/ld-pe/direct_dll.c
new file mode 100644
index 000000000000..9863d1a2294a
--- /dev/null
+++ b/ld/testsuite/ld-pe/direct_dll.c
@@ -0,0 +1,5 @@
+__declspec(dllexport) int
+dll_func (void)
+{
+ return 10;
+}
diff --git a/ld/testsuite/ld-pe/image_size.d b/ld/testsuite/ld-pe/image_size.d
new file mode 100644
index 000000000000..6d41fccb3ff8
--- /dev/null
+++ b/ld/testsuite/ld-pe/image_size.d
@@ -0,0 +1,9 @@
+#name: PE-COFF SizeOfImage
+#ld: -T image_size.t
+#objdump: -p
+#target: i*86-*-mingw32
+
+.*: file format .*
+#...
+SizeOfImage 00004000
+#...
diff --git a/ld/testsuite/ld-pe/image_size.s b/ld/testsuite/ld-pe/image_size.s
new file mode 100644
index 000000000000..3b56d7f1aa98
--- /dev/null
+++ b/ld/testsuite/ld-pe/image_size.s
@@ -0,0 +1,8 @@
+ .text
+ .global _start
+_start:
+ .byte 1
+ .global data
+ .data
+data:
+ .byte 2
diff --git a/ld/testsuite/ld-pe/image_size.t b/ld/testsuite/ld-pe/image_size.t
new file mode 100644
index 000000000000..f646eca59218
--- /dev/null
+++ b/ld/testsuite/ld-pe/image_size.t
@@ -0,0 +1,15 @@
+SECTIONS
+{
+ . = SIZEOF_HEADERS;
+ . = ALIGN(__section_alignment__);
+ .text __image_base__ + ( __section_alignment__ < 0x1000 ? . : __section_alignment__ ) :
+ {
+ *(.text)
+ }
+ . = . + 0x1000;
+ .data BLOCK(__section_alignment__) :
+ {
+ *(.data)
+ }
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-pe/pe.exp b/ld/testsuite/ld-pe/pe.exp
index ac38a70603b2..7568f10a4133 100644
--- a/ld/testsuite/ld-pe/pe.exp
+++ b/ld/testsuite/ld-pe/pe.exp
@@ -1,5 +1,5 @@
# Expect script for export table in executables tests
-# Copyright 2004
+# Copyright 2004, 2006
# Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
@@ -17,9 +17,12 @@
# 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*] } {
+# This test can only be run on PE/COFF platforms that support .secrel32.
+if { ![istarget i*86-*-cygwin*]
+ && ![istarget i*86-*-pe]
+ && ![istarget i*86-*-mingw*]
+ && ![istarget x86_64-*-mingw*]
+ && ![istarget arm-wince-pe] } {
return
}
@@ -29,3 +32,5 @@ set pe_tests {
}
run_ld_link_tests $pe_tests
+
+run_dump_test "image_size"
diff --git a/ld/testsuite/ld-pe/secrel.d b/ld/testsuite/ld-pe/secrel.d
index 93e083f54af7..b924f5435a75 100644
--- a/ld/testsuite/ld-pe/secrel.d
+++ b/ld/testsuite/ld-pe/secrel.d
@@ -1,27 +1,27 @@
-tmpdir/secrel\.x: file format pei-i386
+tmpdir/secrel\.x: +file format pei-.*
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 ........ ........ ........ ........ ................
+ .*1000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*1010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*1020 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*1030 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*1040 ........ ........ ........ ........ ................
Contents of section \.data:
- 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 ...\?....<<<<<<<<
+ .*2000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*2010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*2020 3e3e3e3e 04000000 110d0000 00111600 >>>>............
+ .*2030 0000111f 00000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ .*2040 3e3e3e3e 04000000 110d0000 00111600 >>>>............
+ .*2050 0000111f 00000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ .*2060 3e3e3e3e 04000000 110d0000 00111600 >>>>............
+ .*2070 0000111f 00000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ .*2080 3e3e3e3e 24000000 112d0000 00113600 >>>>\$....-....6.
+ .*2090 0000113f 00000011 3c3c3c3c 3c3c3c3c ...\?....<<<<<<<<
Contents of section \.rdata:
- 403000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
- 403010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
- 403020 3e3e3e3e 00000000 00000000 00000000 >>>>............
+ .*3000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ .*3010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ .*3020 3e3e3e3e 00000000 00000000 00000000 >>>>............
Contents of section \.idata:
- 404000 00000000 00000000 00000000 00000000 ................
- 404010 00000000 ....
+ .*4000 00000000 00000000 00000000 00000000 ................
+ .*4010 00000000 ....
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-0.s b/ld/testsuite/ld-powerpc/attr-gnu-4-0.s
new file mode 100644
index 000000000000..a1437461d047
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-0.s
@@ -0,0 +1 @@
+.gnu_attribute 4,0
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-00.d b/ld/testsuite/ld-powerpc/attr-gnu-4-00.d
new file mode 100644
index 000000000000..a4751a137666
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-00.d
@@ -0,0 +1,7 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-0.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-01.d b/ld/testsuite/ld-powerpc/attr-gnu-4-01.d
new file mode 100644
index 000000000000..212e0c46f0cb
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-01.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Hard float
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-02.d b/ld/testsuite/ld-powerpc/attr-gnu-4-02.d
new file mode 100644
index 000000000000..9bd42b59ba69
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-02.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-2.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Soft float
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-1.s b/ld/testsuite/ld-powerpc/attr-gnu-4-1.s
new file mode 100644
index 000000000000..e985a56f6b1a
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-1.s
@@ -0,0 +1 @@
+.gnu_attribute 4,1
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-10.d b/ld/testsuite/ld-powerpc/attr-gnu-4-10.d
new file mode 100644
index 000000000000..93297c20f1f4
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-10.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-0.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Hard float
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-11.d b/ld/testsuite/ld-powerpc/attr-gnu-4-11.d
new file mode 100644
index 000000000000..fb2b76e95713
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-11.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Hard float
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-12.d b/ld/testsuite/ld-powerpc/attr-gnu-4-12.d
new file mode 100644
index 000000000000..b7ffba0ff155
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-12.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-2.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: powerpc*-*-*
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-13.d b/ld/testsuite/ld-powerpc/attr-gnu-4-13.d
new file mode 100644
index 000000000000..be1290e6570f
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-13.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-3.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses unknown floating point ABI 3
+#target: powerpc*-*-*
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-2.s b/ld/testsuite/ld-powerpc/attr-gnu-4-2.s
new file mode 100644
index 000000000000..54ebf4ed8ddb
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-2.s
@@ -0,0 +1 @@
+.gnu_attribute 4,2
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-20.d b/ld/testsuite/ld-powerpc/attr-gnu-4-20.d
new file mode 100644
index 000000000000..3d838938020f
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-20.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-0.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Soft float
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-21.d b/ld/testsuite/ld-powerpc/attr-gnu-4-21.d
new file mode 100644
index 000000000000..b38f24837bef
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-21.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses hard float, .* uses soft float
+#target: powerpc*-*-*
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-22.d b/ld/testsuite/ld-powerpc/attr-gnu-4-22.d
new file mode 100644
index 000000000000..f6bd198efdf6
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-22.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-2.s
+#as: -a32
+#ld: -r -melf32ppc
+#readelf: -A
+#target: powerpc*-*-*
+
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Soft float
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-3.s b/ld/testsuite/ld-powerpc/attr-gnu-4-3.s
new file mode 100644
index 000000000000..32e5f5d1af4a
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-3.s
@@ -0,0 +1 @@
+.gnu_attribute 4,3
diff --git a/ld/testsuite/ld-powerpc/attr-gnu-4-31.d b/ld/testsuite/ld-powerpc/attr-gnu-4-31.d
new file mode 100644
index 000000000000..9cf8f4f5930f
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/attr-gnu-4-31.d
@@ -0,0 +1,6 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-1.s
+#as: -a32
+#ld: -r -melf32ppc
+#warning: Warning: .* uses unknown floating point ABI 3
+#target: powerpc*-*-*
diff --git a/ld/testsuite/ld-powerpc/plt1.d b/ld/testsuite/ld-powerpc/plt1.d
new file mode 100644
index 000000000000..d8d9d8d53ec7
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/plt1.d
@@ -0,0 +1,20 @@
+#source: plt1.s
+#as: -a32
+#objdump: -dr
+#target: powerpc*-*-*
+
+.*: file format elf32-powerpc
+
+Disassembly of section .text:
+
+0+ <_start>:
+ 0: 42 9f 00 05 bcl- 20,4\*cr7\+so,4 .*
+ 4: 7f c8 02 a6 mflr r30
+ 8: 3f de 00 00 addis r30,r30,0
+ a: R_PPC_REL16_HA _GLOBAL_OFFSET_TABLE_\+0x6
+ c: 3b de 00 0a addi r30,r30,10
+ e: R_PPC_REL16_LO _GLOBAL_OFFSET_TABLE_\+0xa
+ 10: 48 00 00 01 bl 10 .*
+ 10: R_PPC_PLTREL24 _exit
+ 14: 48 00 00 00 b 14 .*
+ 14: R_PPC_REL24 _start
diff --git a/ld/testsuite/ld-powerpc/plt1.s b/ld/testsuite/ld-powerpc/plt1.s
new file mode 100644
index 000000000000..c00c264d1d4a
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/plt1.s
@@ -0,0 +1,9 @@
+ .text
+ .global _start
+_start:
+ bcl 20,31,1f
+1: mflr 30
+ addis 30,30,(_GLOBAL_OFFSET_TABLE_-1b)@ha
+ addi 30,30,(_GLOBAL_OFFSET_TABLE_-1b)@l
+ bl _exit@plt
+ b _start
diff --git a/ld/testsuite/ld-powerpc/powerpc.exp b/ld/testsuite/ld-powerpc/powerpc.exp
index 681bb6e07b9e..ad224b09a943 100644
--- a/ld/testsuite/ld-powerpc/powerpc.exp
+++ b/ld/testsuite/ld-powerpc/powerpc.exp
@@ -1,5 +1,5 @@
# Expect script for ld-powerpc tests
-# Copyright 2002, 2003, 2005 Free Software Foundation
+# Copyright 2002, 2003, 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
@@ -29,7 +29,7 @@ if {[istarget "*-*-vxworks"]} {
{"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
"-mregnames" {vxworks1-lib.s}
{{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
- {readelf --symbols vxworks1-lib.nd}}
+ {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
"libvxworks1.so"}
{"VxWorks executable test 1 (dynamic)" \
"tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
@@ -143,4 +143,19 @@ run_ld_link_tests $ppcelftests
if [ supports_ppc64 ] then {
run_ld_link_tests $ppc64elftests
+ run_dump_test "relbrlt"
}
+
+run_dump_test "plt1"
+
+run_dump_test "attr-gnu-4-00"
+run_dump_test "attr-gnu-4-01"
+run_dump_test "attr-gnu-4-02"
+run_dump_test "attr-gnu-4-10"
+run_dump_test "attr-gnu-4-11"
+run_dump_test "attr-gnu-4-12"
+run_dump_test "attr-gnu-4-13"
+run_dump_test "attr-gnu-4-20"
+run_dump_test "attr-gnu-4-21"
+run_dump_test "attr-gnu-4-22"
+run_dump_test "attr-gnu-4-31"
diff --git a/ld/testsuite/ld-powerpc/relbrlt.d b/ld/testsuite/ld-powerpc/relbrlt.d
new file mode 100644
index 000000000000..1bba8aaa9fae
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/relbrlt.d
@@ -0,0 +1,50 @@
+#source: relbrlt.s
+#as: -a64
+#ld: -melf64ppc --emit-relocs
+#objdump: -dr
+
+.*: file format elf64-powerpc
+
+Disassembly of section \.text:
+
+0*100000b0 <_start>:
+[0-9a-f ]*: 49 bf 00 31 bl .*
+[0-9a-f ]*: R_PPC64_REL24 \.text\+0x37e0044
+[0-9a-f ]*: 60 00 00 00 nop
+[0-9a-f ]*: 49 bf 00 19 bl .*
+[0-9a-f ]*: R_PPC64_REL24 \.text\+0x3bf0020
+[0-9a-f ]*: 60 00 00 00 nop
+[0-9a-f ]*: 49 bf 00 25 bl .*
+[0-9a-f ]*: R_PPC64_REL24 \.text\+0x57e0024
+[0-9a-f ]*: 60 00 00 00 nop
+[0-9a-f ]*: 00 00 00 00 \.long 0x0
+[0-9a-f ]*: 4b ff ff e4 b .* <_start>
+ \.\.\.
+
+[0-9a-f ]*<.*plt_branch.*>:
+[0-9a-f ]*: 3d 82 00 00 addis r12,r2,0
+[0-9a-f ]*: e9 6c 80 00 ld r11,-32768\(r12\)
+[0-9a-f ]*: 7d 69 03 a6 mtctr r11
+[0-9a-f ]*: 4e 80 04 20 bctr
+
+[0-9a-f ]*<.*long_branch.*>:
+[0-9a-f ]*: 49 bf 00 14 b .* <far>
+[0-9a-f ]*: R_PPC64_REL24 \*ABS\*\+0x137e00f4
+
+[0-9a-f ]*<.*plt_branch.*>:
+[0-9a-f ]*: 3d 82 00 00 addis r12,r2,0
+[0-9a-f ]*: e9 6c 80 08 ld r11,-32760\(r12\)
+[0-9a-f ]*: 7d 69 03 a6 mtctr r11
+[0-9a-f ]*: 4e 80 04 20 bctr
+ \.\.\.
+
+0*137e00f4 <far>:
+[0-9a-f ]*: 4e 80 00 20 blr
+ \.\.\.
+
+[0-9a-f ]*<far2far>:
+[0-9a-f ]*: 4e 80 00 20 blr
+ \.\.\.
+
+[0-9a-f ]*<huge>:
+[0-9a-f ]*: 4e 80 00 20 blr
diff --git a/ld/testsuite/ld-powerpc/relbrlt.s b/ld/testsuite/ld-powerpc/relbrlt.s
new file mode 100644
index 000000000000..eed2f3350d44
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/relbrlt.s
@@ -0,0 +1,34 @@
+ .text
+ .global _start
+_start:
+1:
+ bl far
+ nop
+ bl far2far
+ nop
+ bl huge
+ nop
+ .long 0
+ b 1b
+ .space 0x1bf0000
+
+ .section .text.pad1,"ax"
+ .space 0x1bf0000
+
+ .section .text.far,"ax"
+far:
+ blr
+
+ .section .text.pad2,"ax"
+ .space 0x40ffd8
+
+ .section .text.far2far,"ax"
+far2far:
+ blr
+
+ .section .text.pad3,"ax"
+ .space 0x1bf0000
+
+ .section .text.huge,"ax"
+huge:
+ blr
diff --git a/ld/testsuite/ld-powerpc/tlsexe.d b/ld/testsuite/ld-powerpc/tlsexe.d
index 546daf3defd8..26599ac59e55 100644
--- a/ld/testsuite/ld-powerpc/tlsexe.d
+++ b/ld/testsuite/ld-powerpc/tlsexe.d
@@ -56,21 +56,22 @@ Disassembly of section \.text:
.* 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
+.* 60 00 00 00 nop
+.* 00 00 00 00 .*
+.* 00 01 01 f0 .*
+.* 7d 88 02 a6 mflr r12
+.* 42 9f 00 05 bcl- 20,4\*cr7\+so,.*
+.* 7d 68 02 a6 mflr r11
+.* e8 4b ff f0 ld r2,-16\(r11\)
+.* 7d 88 03 a6 mtlr r12
+.* 7d 82 5a 14 add r12,r2,r11
+.* e9 6c 00 00 ld r11,0\(r12\)
.* e8 4c 00 08 ld r2,8\(r12\)
.* 7d 69 03 a6 mtctr r11
.* e9 6c 00 10 ld r11,16\(r12\)
.* 4e 80 04 20 bctr
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
.* 38 00 00 00 li r0,0
-.* 4b ff ff bc b .*
+.* 4b ff ff c4 b .*
diff --git a/ld/testsuite/ld-powerpc/tlsexe.r b/ld/testsuite/ld-powerpc/tlsexe.r
index 2e4fab64e63a..4992ab2fd275 100644
--- a/ld/testsuite/ld-powerpc/tlsexe.r
+++ b/ld/testsuite/ld-powerpc/tlsexe.r
@@ -16,11 +16,11 @@ Section Headers:
+\[ 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
+ +\[ 7\] \.text +PROGBITS .* 0+100 0+ +AX +0 +0 +8
+ +\[ 8\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[ 9\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[10\] \.dynamic +DYNAMIC .* 0+150 10 +WA +4 +0 +8
+ +\[11\] \.branch_lt + PROGBITS .* 0+ 0+ +WA +0 +0 +8
+\[12\] \.got +PROGBITS .* 0+30 08 +WA +0 +0 +8
+\[13\] \.plt +.*
+\[14\] \.shstrtab +.*
@@ -67,12 +67,12 @@ Symbol table '\.dynsym' contains [0-9]+ entries:
.* TLS +GLOBAL DEFAULT +UND gd
.* FUNC +GLOBAL DEFAULT +UND __tls_get_addr
.* TLS +GLOBAL DEFAULT +UND ld
-.* TLS +GLOBAL DEFAULT +10 ld2
+.* TLS +GLOBAL DEFAULT +9 ld2
.* NOTYPE +GLOBAL DEFAULT +ABS __bss_start
.* NOTYPE +GLOBAL DEFAULT +ABS _edata
.* NOTYPE +GLOBAL DEFAULT +ABS _end
-Symbol table '\.symtab' contains 40 entries:
+Symbol table '\.symtab' contains .* entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* 0+ +0 NOTYPE +LOCAL +DEFAULT +UND
.* SECTION LOCAL +DEFAULT +1
@@ -88,29 +88,26 @@ Symbol table '\.symtab' contains 40 entries:
.* 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
+.* 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
.* FUNC +LOCAL +DEFAULT +UND \.__tls_get_addr
.* GLOBAL DEFAULT +UND gd
-.* GLOBAL DEFAULT +10 le0
+.* GLOBAL DEFAULT +9 le0
.* GLOBAL DEFAULT +UND __tls_get_addr
-.* GLOBAL DEFAULT +10 ld0
-.* GLOBAL DEFAULT +10 le1
+.* GLOBAL DEFAULT +9 ld0
+.* GLOBAL DEFAULT +9 le1
.* GLOBAL DEFAULT +UND ld
.* NOTYPE +GLOBAL DEFAULT +7 _start
-.* TLS +GLOBAL DEFAULT +10 ld2
-.* TLS +GLOBAL DEFAULT +10 ld1
+.* 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 +10 gd0
-.* TLS +GLOBAL DEFAULT +10 ie0
+.* TLS +GLOBAL DEFAULT +9 gd0
+.* TLS +GLOBAL DEFAULT +9 ie0
diff --git a/ld/testsuite/ld-powerpc/tlsexe32.r b/ld/testsuite/ld-powerpc/tlsexe32.r
index aff95b7246c6..ed388ef46d8b 100644
--- a/ld/testsuite/ld-powerpc/tlsexe32.r
+++ b/ld/testsuite/ld-powerpc/tlsexe32.r
@@ -70,7 +70,7 @@ Symbol table '\.dynsym' contains [0-9]+ entries:
.* NOTYPE +GLOBAL DEFAULT +ABS _edata
.* NOTYPE +GLOBAL DEFAULT +ABS _end
-Symbol table '\.symtab' contains 40 entries:
+Symbol table '\.symtab' contains 37 entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND
.* SECTION LOCAL +DEFAULT +1
@@ -85,9 +85,6 @@ Symbol table '\.symtab' contains 40 entries:
.* 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
diff --git a/ld/testsuite/ld-powerpc/tlsexetoc.d b/ld/testsuite/ld-powerpc/tlsexetoc.d
index 7ec07d2389e7..c1cb190b1cb8 100644
--- a/ld/testsuite/ld-powerpc/tlsexetoc.d
+++ b/ld/testsuite/ld-powerpc/tlsexetoc.d
@@ -40,21 +40,22 @@ Disassembly of section \.text:
.* 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
+.* 60 00 00 00 nop
+.* 00 00 00 00 .*
+.* 00 01 02 18 .*
+.* 7d 88 02 a6 mflr r12
+.* 42 9f 00 05 bcl- 20,4\*cr7\+so,.*
+.* 7d 68 02 a6 mflr r11
+.* e8 4b ff f0 ld r2,-16\(r11\)
+.* 7d 88 03 a6 mtlr r12
+.* 7d 82 5a 14 add r12,r2,r11
+.* e9 6c 00 00 ld r11,0\(r12\)
.* e8 4c 00 08 ld r2,8\(r12\)
.* 7d 69 03 a6 mtctr r11
.* e9 6c 00 10 ld r11,16\(r12\)
.* 4e 80 04 20 bctr
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
.* 38 00 00 00 li r0,0
-.* 4b ff ff bc b .*
+.* 4b ff ff c4 b .*
diff --git a/ld/testsuite/ld-powerpc/tlsexetoc.r b/ld/testsuite/ld-powerpc/tlsexetoc.r
index 98eda7e5a6b2..d92edd4a25e4 100644
--- a/ld/testsuite/ld-powerpc/tlsexetoc.r
+++ b/ld/testsuite/ld-powerpc/tlsexetoc.r
@@ -16,11 +16,11 @@ Section Headers:
+\[ 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
+ +\[ 7\] \.text +PROGBITS .* 0+c0 0+ +AX +0 +0 +8
+ +\[ 8\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[ 9\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[10\] \.dynamic +DYNAMIC .* 0+150 10 +WA +4 +0 +8
+ +\[11\] \.branch_lt +PROGBITS .* 0+ 0+ +WA +0 +0 +8
+\[12\] \.got +PROGBITS .* 0+58 08 +WA +0 +0 +8
+\[13\] \.plt +.*
+\[14\] \.shstrtab +.*
@@ -71,7 +71,7 @@ Symbol table '\.dynsym' contains [0-9]+ entries:
.* NOTYPE +GLOBAL DEFAULT +ABS _edata
.* NOTYPE +GLOBAL DEFAULT +ABS _end
-Symbol table '\.symtab' contains 41 entries:
+Symbol table '\.symtab' contains .* entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND
.* SECTION LOCAL +DEFAULT +1
@@ -87,30 +87,27 @@ Symbol table '\.symtab' contains 41 entries:
.* 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
+.* TLS +LOCAL +DEFAULT +8 gd4
+.* TLS +LOCAL +DEFAULT +8 ld4
+.* TLS +LOCAL +DEFAULT +8 ld5
+.* TLS +LOCAL +DEFAULT +8 ld6
+.* TLS +LOCAL +DEFAULT +8 ie4
+.* TLS +LOCAL +DEFAULT +8 le4
+.* TLS +LOCAL +DEFAULT +8 le5
.* NOTYPE +LOCAL +DEFAULT +12 \.Lie0
-.* OBJECT +LOCAL +HIDDEN +11 _DYNAMIC
+.* OBJECT +LOCAL +HIDDEN +10 _DYNAMIC
.* FUNC +LOCAL +DEFAULT +UND \.__tls_get_addr
.* TLS +GLOBAL DEFAULT +UND gd
-.* TLS +GLOBAL DEFAULT +10 le0
+.* TLS +GLOBAL DEFAULT +9 le0
.* FUNC +GLOBAL DEFAULT +UND __tls_get_addr
-.* TLS +GLOBAL DEFAULT +10 ld0
-.* TLS +GLOBAL DEFAULT +10 le1
+.* TLS +GLOBAL DEFAULT +9 ld0
+.* TLS +GLOBAL DEFAULT +9 le1
.* TLS +GLOBAL DEFAULT +UND ld
.* NOTYPE +GLOBAL DEFAULT +7 _start
-.* TLS +GLOBAL DEFAULT +10 ld2
-.* TLS +GLOBAL DEFAULT +10 ld1
+.* 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 +10 gd0
-.* TLS +GLOBAL DEFAULT +10 ie0
+.* TLS +GLOBAL DEFAULT +9 gd0
+.* TLS +GLOBAL DEFAULT +9 ie0
diff --git a/ld/testsuite/ld-powerpc/tlsso.d b/ld/testsuite/ld-powerpc/tlsso.d
index dc4ae18256b3..0dbc84909cde 100644
--- a/ld/testsuite/ld-powerpc/tlsso.d
+++ b/ld/testsuite/ld-powerpc/tlsso.d
@@ -56,21 +56,22 @@ Disassembly of section \.text:
.* 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
+.* 60 00 00 00 nop
+.* 00 00 00 00 .*
+.* 00 01 02 20 .*
+.* 7d 88 02 a6 mflr r12
+.* 42 9f 00 05 bcl- 20,4\*cr7\+so,.*
+.* 7d 68 02 a6 mflr r11
+.* e8 4b ff f0 ld r2,-16\(r11\)
+.* 7d 88 03 a6 mtlr r12
+.* 7d 82 5a 14 add r12,r2,r11
+.* e9 6c 00 00 ld r11,0\(r12\)
.* e8 4c 00 08 ld r2,8\(r12\)
.* 7d 69 03 a6 mtctr r11
.* e9 6c 00 10 ld r11,16\(r12\)
.* 4e 80 04 20 bctr
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
.* 38 00 00 00 li r0,0
-.* 4b ff ff bc b .*
+.* 4b ff ff c4 b .*
diff --git a/ld/testsuite/ld-powerpc/tlsso.g b/ld/testsuite/ld-powerpc/tlsso.g
index caef9dd503eb..82ccc8dc9d5f 100644
--- a/ld/testsuite/ld-powerpc/tlsso.g
+++ b/ld/testsuite/ld-powerpc/tlsso.g
@@ -7,7 +7,7 @@
.*: +file format elf64-powerpc
Contents of section \.got:
-.* 00000000 000187f0 00000000 00000000 .*
+.* 00000000 00018780 00000000 00000000 .*
.* 00000000 00000000 00000000 00000000 .*
.* 00000000 00000000 00000000 00000000 .*
.* 00000000 00000000 00000000 00000000 .*
diff --git a/ld/testsuite/ld-powerpc/tlsso.r b/ld/testsuite/ld-powerpc/tlsso.r
index 8501c6fe9c4b..69fff679ac61 100644
--- a/ld/testsuite/ld-powerpc/tlsso.r
+++ b/ld/testsuite/ld-powerpc/tlsso.r
@@ -17,8 +17,8 @@ Section Headers:
+\[ 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 .*
+ +\[ 9\] \.dynamic .*
+ +\[10\] \.branch_lt .*
+\[11\] \.got .*
+\[12\] \.plt .*
+\[13\] \.shstrtab .*
@@ -49,9 +49,9 @@ Relocation section '\.rela\.dyn' at offset .* contains 16 entries:
[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_TPREL16_DS +0+105f8 \.tdata \+ 28
+[0-9a-f ]+R_PPC64_TPREL16_HA +0+105f8 \.tdata \+ 30
+[0-9a-f ]+R_PPC64_TPREL16_LO +0+105f8 \.tdata \+ 30
[0-9a-f ]+R_PPC64_DTPMOD64 +0+
[0-9a-f ]+R_PPC64_DTPMOD64 +0+
[0-9a-f ]+R_PPC64_DTPREL64 +0+
@@ -72,8 +72,6 @@ Symbol table '\.dynsym' contains .* entries:
.* 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
@@ -89,7 +87,7 @@ Symbol table '\.dynsym' contains .* entries:
.* TLS +GLOBAL DEFAULT +8 gd0
.* TLS +GLOBAL DEFAULT +8 ie0
-Symbol table '\.symtab' contains 39 entries:
+Symbol table '\.symtab' contains .* entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND
.* SECTION LOCAL +DEFAULT +1
@@ -104,9 +102,6 @@ Symbol table '\.symtab' contains 39 entries:
.* 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
diff --git a/ld/testsuite/ld-powerpc/tlsso32.d b/ld/testsuite/ld-powerpc/tlsso32.d
index 45432db33e34..731c568b5fda 100644
--- a/ld/testsuite/ld-powerpc/tlsso32.d
+++ b/ld/testsuite/ld-powerpc/tlsso32.d
@@ -42,5 +42,5 @@ Disassembly of section \.got:
.* <\.got>:
\.\.\.
.*: 4e 80 00 21 blrl
-.*: 00 01 04 38 .*
+.*: 00 01 03 ec .*
\.\.\.
diff --git a/ld/testsuite/ld-powerpc/tlsso32.g b/ld/testsuite/ld-powerpc/tlsso32.g
index 7014419a6910..028e869598a3 100644
--- a/ld/testsuite/ld-powerpc/tlsso32.g
+++ b/ld/testsuite/ld-powerpc/tlsso32.g
@@ -9,5 +9,5 @@
Contents of section \.got:
.* 00000000 00000000 00000000 00000000 .*
.* 00000000 00000000 00000000 00000000 .*
-.* 00000000 4e800021 00010438 00000000 .*
+.* 00000000 4e800021 000103ec 00000000 .*
.* 00000000 .*
diff --git a/ld/testsuite/ld-powerpc/tlsso32.r b/ld/testsuite/ld-powerpc/tlsso32.r
index c0c120c635be..545c462e4d21 100644
--- a/ld/testsuite/ld-powerpc/tlsso32.r
+++ b/ld/testsuite/ld-powerpc/tlsso32.r
@@ -52,9 +52,9 @@ Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 18 entries:
[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_TPREL16 +0+103d0 +\.tdata \+ 103e4
+[0-9a-f ]+R_PPC_TPREL16_HA +0+103d0 +\.tdata \+ 103e8
+[0-9a-f ]+R_PPC_TPREL16_LO +0+103d0 +\.tdata \+ 103e8
[0-9a-f ]+R_PPC_DTPMOD32 +0+
[0-9a-f ]+R_PPC_DTPREL32 +0+
[0-9a-f ]+R_PPC_DTPMOD32 +0+
@@ -73,7 +73,6 @@ Symbol table '\.dynsym' contains [0-9]+ entries:
.* 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
@@ -90,7 +89,7 @@ Symbol table '\.dynsym' contains [0-9]+ entries:
.* TLS +GLOBAL DEFAULT +8 gd0
.* TLS +GLOBAL DEFAULT +8 ie0
-Symbol table '\.symtab' contains 39 entries:
+Symbol table '\.symtab' contains 36 entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND
.* SECTION LOCAL +DEFAULT +1
@@ -104,9 +103,6 @@ Symbol table '\.symtab' contains 39 entries:
.* 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
diff --git a/ld/testsuite/ld-powerpc/tlstocso.d b/ld/testsuite/ld-powerpc/tlstocso.d
index 0534b3bccc5f..073e85da50d2 100644
--- a/ld/testsuite/ld-powerpc/tlstocso.d
+++ b/ld/testsuite/ld-powerpc/tlstocso.d
@@ -40,21 +40,22 @@ Disassembly of section \.text:
.* 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
+.* 60 00 00 00 nop
+.* 00 00 00 00 .*
+.* 00 01 02 18 .*
+.* 7d 88 02 a6 mflr r12
+.* 42 9f 00 05 bcl- 20,4\*cr7\+so,.*
+.* 7d 68 02 a6 mflr r11
+.* e8 4b ff f0 ld r2,-16\(r11\)
+.* 7d 88 03 a6 mtlr r12
+.* 7d 82 5a 14 add r12,r2,r11
+.* e9 6c 00 00 ld r11,0\(r12\)
.* e8 4c 00 08 ld r2,8\(r12\)
.* 7d 69 03 a6 mtctr r11
.* e9 6c 00 10 ld r11,16\(r12\)
.* 4e 80 04 20 bctr
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
+.* 60 00 00 00 nop
.* 38 00 00 00 li r0,0
-.* 4b ff ff bc b .*
+.* 4b ff ff c4 b .*
diff --git a/ld/testsuite/ld-powerpc/tlstocso.g b/ld/testsuite/ld-powerpc/tlstocso.g
index b5d7d647cc2b..dbe78976cc56 100644
--- a/ld/testsuite/ld-powerpc/tlstocso.g
+++ b/ld/testsuite/ld-powerpc/tlstocso.g
@@ -7,7 +7,7 @@
.*: +file format elf64-powerpc
Contents of section \.got:
-.* 00000000 00018738 00000000 00000000 .*
+.* 00000000 000186c8 00000000 00000000 .*
.* 00000000 00000000 00000000 00000000 .*
.* 00000000 00000000 00000000 00000000 .*
.* 00000000 00000000 00000000 00000000 .*
diff --git a/ld/testsuite/ld-powerpc/tlstocso.r b/ld/testsuite/ld-powerpc/tlstocso.r
index d63136fa4253..ca59f4ea4bb2 100644
--- a/ld/testsuite/ld-powerpc/tlstocso.r
+++ b/ld/testsuite/ld-powerpc/tlstocso.r
@@ -17,8 +17,8 @@ Section Headers:
+\[ 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 .*
+ +\[ 9\] \.dynamic .*
+ +\[10\] \.branch_lt .*
+\[11\] \.got .*
+\[12\] \.plt .*
+\[13\] \.shstrtab .*
@@ -67,8 +67,6 @@ Symbol table '\.dynsym' contains [0-9]+ entries:
.* 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
@@ -84,7 +82,7 @@ Symbol table '\.dynsym' contains [0-9]+ entries:
.* TLS +GLOBAL DEFAULT +8 gd0
.* TLS +GLOBAL DEFAULT +8 ie0
-Symbol table '\.symtab' contains 40 entries:
+Symbol table '\.symtab' contains .* entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND
.* SECTION LOCAL +DEFAULT +1
@@ -99,9 +97,6 @@ Symbol table '\.symtab' contains 40 entries:
.* 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
diff --git a/ld/testsuite/ld-powerpc/vxworks1-lib.rd b/ld/testsuite/ld-powerpc/vxworks1-lib.rd
index d60e70f70d5a..40a5d55e64a1 100644
--- a/ld/testsuite/ld-powerpc/vxworks1-lib.rd
+++ b/ld/testsuite/ld-powerpc/vxworks1-lib.rd
@@ -6,8 +6,8 @@ Relocation section '\.rela\.plt' at offset .* contains 2 entries:
Relocation section '\.rela\.dyn' at offset .* contains 5 entries:
Offset Info Type Sym\.Value Sym\. Name \+ Addend
-00090c00 00000016 R_PPC_RELATIVE * 00080c44
+00090800 00000016 R_PPC_RELATIVE * 00080c44
00080c0e .*06 R_PPC_ADDR16_HA 00000000 __GOTT_BASE__ \+ 0
00080c12 .*04 R_PPC_ADDR16_LO 00000000 __GOTT_BASE__ \+ 0
00080c16 .*03 R_PPC_ADDR16 00000000 __GOTT_INDEX__ \+ 0
-00090414 .*14 R_PPC_GLOB_DAT 00090800 x \+ 0
+00090414 .*14 R_PPC_GLOB_DAT 00090c00 x \+ 0
diff --git a/ld/testsuite/ld-powerpc/vxworks1-lib.td b/ld/testsuite/ld-powerpc/vxworks1-lib.td
new file mode 100644
index 000000000000..9f223e38da16
--- /dev/null
+++ b/ld/testsuite/ld-powerpc/vxworks1-lib.td
@@ -0,0 +1,3 @@
+#...
+ 0x0+16 \(TEXTREL\) +0x0
+#pass
diff --git a/ld/testsuite/ld-powerpc/vxworks1.ld b/ld/testsuite/ld-powerpc/vxworks1.ld
index 979d77335488..ce750b00fad8 100644
--- a/ld/testsuite/ld-powerpc/vxworks1.ld
+++ b/ld/testsuite/ld-powerpc/vxworks1.ld
@@ -23,8 +23,8 @@ SECTIONS
.got : { *(.got.plt) *(.got) }
. = ALIGN (0x400);
- .bss : { *(.bss) }
+ .data : { *(.data) }
. = ALIGN (0x400);
- .data : { *(.data) }
+ .bss : { *(.bss) }
}
diff --git a/ld/testsuite/ld-s390/tlsbin.rd b/ld/testsuite/ld-s390/tlsbin.rd
index 1fa3469c7634..ce98d4fd7f2c 100644
--- a/ld/testsuite/ld-s390/tlsbin.rd
+++ b/ld/testsuite/ld-s390/tlsbin.rd
@@ -76,7 +76,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE GLOBAL DEFAULT ABS _edata
.* NOTYPE GLOBAL DEFAULT ABS _end
-Symbol table '.symtab' contains 68 entries:
+Symbol table '.symtab' contains 65 entries:
+Num: +Value Size Type +Bind +Vis +Ndx Name
.* NOTYPE LOCAL DEFAULT UND
.* SECTION LOCAL DEFAULT +1
@@ -91,9 +91,6 @@ Symbol table '.symtab' contains 68 entries:
.* 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
diff --git a/ld/testsuite/ld-s390/tlsbin_64.rd b/ld/testsuite/ld-s390/tlsbin_64.rd
index 34e96495e4a5..efcb25a5e10d 100644
--- a/ld/testsuite/ld-s390/tlsbin_64.rd
+++ b/ld/testsuite/ld-s390/tlsbin_64.rd
@@ -76,7 +76,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE +GLOBAL DEFAULT +ABS _edata
.* NOTYPE +GLOBAL DEFAULT +ABS _end
-Symbol table '.symtab' contains 68 entries:
+Symbol table '.symtab' contains .* entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND
.* SECTION LOCAL +DEFAULT +1
@@ -91,9 +91,6 @@ Symbol table '.symtab' contains 68 entries:
.* 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
diff --git a/ld/testsuite/ld-s390/tlspic.rd b/ld/testsuite/ld-s390/tlspic.rd
index c8ddd911acee..2e7ebde0adb6 100644
--- a/ld/testsuite/ld-s390/tlspic.rd
+++ b/ld/testsuite/ld-s390/tlspic.rd
@@ -73,7 +73,6 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* 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
@@ -88,7 +87,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE GLOBAL DEFAULT ABS _edata
.* NOTYPE GLOBAL DEFAULT ABS _end
-Symbol table '.symtab' contains 54 entries:
+Symbol table '.symtab' contains 51 entries:
+Num: +Value Size Type +Bind +Vis +Ndx Name
.* NOTYPE LOCAL DEFAULT UND
.* SECTION LOCAL DEFAULT +1
@@ -102,9 +101,6 @@ Symbol table '.symtab' contains 54 entries:
.* 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
diff --git a/ld/testsuite/ld-s390/tlspic_64.rd b/ld/testsuite/ld-s390/tlspic_64.rd
index ec6b5a3288f7..3fef92805565 100644
--- a/ld/testsuite/ld-s390/tlspic_64.rd
+++ b/ld/testsuite/ld-s390/tlspic_64.rd
@@ -73,7 +73,6 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* 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
@@ -88,7 +87,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE GLOBAL DEFAULT ABS _edata
.* NOTYPE GLOBAL DEFAULT ABS _end
-Symbol table '.symtab' contains 54 entries:
+Symbol table '.symtab' contains .* entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE LOCAL DEFAULT UND
.* SECTION LOCAL DEFAULT +1
@@ -102,9 +101,6 @@ Symbol table '.symtab' contains 54 entries:
.* 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
diff --git a/ld/testsuite/ld-scripts/align.exp b/ld/testsuite/ld-scripts/align.exp
index 43369d0b21ee..8c97d3bcc805 100644
--- a/ld/testsuite/ld-scripts/align.exp
+++ b/ld/testsuite/ld-scripts/align.exp
@@ -1,6 +1,6 @@
# Test ALIGN in a linker script.
# By Nathan Sidwell, CodeSourcery LLC
-# Copyright 2004, 2005
+# Copyright 2004, 2005, 2006
# Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
@@ -29,13 +29,20 @@ if ![ld_assemble $as $srcdir/$subdir/align.s tmpdir/align.o] {
return
}
-# Doesn't work on PECOFF, appears to be a genuine bug
-if [is_pecoff_format] {
+# Doesn't work on PECOFF, appears to be a genuine bug.
+# mingw on x86_64 targets need to set the image base to 0 to avoid auto image-basing.
+global LDFLAGS
+set saved_LDFLAGS "$LDFLAGS"
+if [istarget "x86_64-*-mingw*"] then {
+ set LDFLAGS "$LDFLAGS --image-base 0"
+} else {
+ 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"] {
+if ![ld_simple_link $ld tmpdir/align "$LDFLAGS -T $srcdir/$subdir/align.t tmpdir/align.o"] {
fail $testname
} else {
pass $testname
@@ -50,3 +57,4 @@ if ![is_aout_format] {
run_dump_test align2b
}
run_dump_test align2c
+set LDFLAGS "$saved_LDFLAGS"
diff --git a/ld/testsuite/ld-scripts/align2a.d b/ld/testsuite/ld-scripts/align2a.d
index d45cf0e631ba..96237dd72f75 100644
--- a/ld/testsuite/ld-scripts/align2a.d
+++ b/ld/testsuite/ld-scripts/align2a.d
@@ -5,8 +5,8 @@
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
+[ ]+0 +\.text +[^ ]* +0+ +0+ .*
+[ ]+CONTENTS, +ALLOC, +LOAD,.* CODE
+[ ]+1 +\.data +[^ ]* +0+10 +0+10 .*
+[ ]+CONTENTS, +ALLOC, +LOAD, +DATA
#pass
diff --git a/ld/testsuite/ld-scripts/alignof.exp b/ld/testsuite/ld-scripts/alignof.exp
new file mode 100644
index 000000000000..0955e7c3f9b0
--- /dev/null
+++ b/ld/testsuite/ld-scripts/alignof.exp
@@ -0,0 +1,63 @@
+# Test ALIGNOF in a linker script.
+# By Nathan Sidwell <nathan@codesourcery.com>
+#
+# 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.
+
+# Only ELF targets record section alignment.
+
+if ![is_elf_format] {
+ return
+}
+
+set testname "ALIGNOF"
+
+if ![ld_assemble $as $srcdir/$subdir/alignof.s tmpdir/alignof.o] {
+ unresolved $testname
+ return
+}
+
+if ![ld_simple_link $ld tmpdir/alignof "-T $srcdir/$subdir/alignof.t tmpdir/alignof.o"] {
+ fail $testname
+ return
+}
+
+if ![ld_nm $nm "" tmpdir/alignof] {
+ unresolved $testname
+ return
+}
+
+if {![info exists nm_output(alignof_text)] \
+ || ![info exists nm_output(alignof_data)]} {
+ send_log "bad output from nm\n"
+ verbose "bad output from nm"
+ fail $testname
+ return
+}
+
+if {$nm_output(alignof_text) != 64} {
+ send_log "alignof_text != 64\n"
+ verbose "alignof_text != 64"
+ fail $testname
+ return
+}
+
+if {$nm_output(alignof_data) != 16} {
+ send_log "alignof_data != 16\n"
+ verbose "alignof_data != 16"
+ fail $testname
+ return
+}
+
+pass $testname
diff --git a/ld/testsuite/ld-scripts/alignof.s b/ld/testsuite/ld-scripts/alignof.s
new file mode 100644
index 000000000000..d440d2ee699a
--- /dev/null
+++ b/ld/testsuite/ld-scripts/alignof.s
@@ -0,0 +1,9 @@
+
+ .text
+ .p2align 6
+ .long 0
+
+ .data
+ .p2align 4
+ .long 0
+
diff --git a/ld/testsuite/ld-scripts/alignof.t b/ld/testsuite/ld-scripts/alignof.t
new file mode 100644
index 000000000000..12411121f167
--- /dev/null
+++ b/ld/testsuite/ld-scripts/alignof.t
@@ -0,0 +1,15 @@
+SECTIONS {
+ .text :
+ {
+ tmpdir/alignof.o (.text)
+ }
+ .data :
+ {
+ tmpdir/alignof.o (.data)
+ LONG (ALIGNOF(.text))
+ LONG (ALIGNOF(.data))
+ }
+}
+
+alignof_text = ALIGNOF(.text);
+alignof_data = ALIGNOF(.data);
diff --git a/ld/testsuite/ld-scripts/assert.t b/ld/testsuite/ld-scripts/assert.t
index 62aee34ed348..809ff4c3ff4f 100644
--- a/ld/testsuite/ld-scripts/assert.t
+++ b/ld/testsuite/ld-scripts/assert.t
@@ -1,5 +1,10 @@
SECTIONS
{
- .empty : {}
+ .empty : {
+ here = !.;
+ ASSERT (!., "dot is not zero");
+ ASSERT (here, "here is zero");
+ }
ASSERT (!SIZEOF(.empty), "Empty is not empty")
+ /DISCARD/ : { *(.reginfo) }
}
diff --git a/ld/testsuite/ld-scripts/cross3.t b/ld/testsuite/ld-scripts/cross3.t
index 5411b9b68048..5e32bb2fca69 100644
--- a/ld/testsuite/ld-scripts/cross3.t
+++ b/ld/testsuite/ld-scripts/cross3.t
@@ -4,7 +4,7 @@ SECTIONS
{
.text : { *(.text) }
.nocrossrefs : { *(.nocrossrefs) }
- .data : { *(.data) }
+ .data : { *(.data) *(.opd) }
.bss : { *(.bss) *(COMMON) }
/DISCARD/ : { *(*) }
}
diff --git a/ld/testsuite/ld-scripts/default-script.exp b/ld/testsuite/ld-scripts/default-script.exp
new file mode 100644
index 000000000000..e496e9c0c749
--- /dev/null
+++ b/ld/testsuite/ld-scripts/default-script.exp
@@ -0,0 +1,29 @@
+# Test --default-script/-dT
+# Copyright 2007
+# 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 spu*-*-*] } {
+ set LDFLAGS "$LDFLAGS --local-store 0:0"
+}
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/default-script*.d]]
+foreach t $test_list {
+ # We need to strip the ".d", but can leave the dirname.
+ verbose [file rootname $t]
+ run_dump_test [file rootname $t]
+}
+
diff --git a/ld/testsuite/ld-scripts/default-script.s b/ld/testsuite/ld-scripts/default-script.s
new file mode 100644
index 000000000000..494fb622af41
--- /dev/null
+++ b/ld/testsuite/ld-scripts/default-script.s
@@ -0,0 +1,3 @@
+ .text
+text:
+ .long 0
diff --git a/ld/testsuite/ld-scripts/default-script.t b/ld/testsuite/ld-scripts/default-script.t
new file mode 100644
index 000000000000..fc70187cd404
--- /dev/null
+++ b/ld/testsuite/ld-scripts/default-script.t
@@ -0,0 +1,7 @@
+_START = DEFINED(_START) ? _START : 0x9000000;
+SECTIONS
+{
+ . = _START;
+ .text : {*(.text)}
+ /DISCARD/ : {*(*)}
+}
diff --git a/ld/testsuite/ld-scripts/default-script1.d b/ld/testsuite/ld-scripts/default-script1.d
new file mode 100644
index 000000000000..1a709baaf192
--- /dev/null
+++ b/ld/testsuite/ld-scripts/default-script1.d
@@ -0,0 +1,9 @@
+# source: default-script.s
+# ld: -defsym _START=0x8000000 -T default-script.t
+# nm: -n
+
+#...
+0*8000000 . _START
+#...
+0*8000000 t text
+#pass
diff --git a/ld/testsuite/ld-scripts/default-script2.d b/ld/testsuite/ld-scripts/default-script2.d
new file mode 100644
index 000000000000..c29d733da92e
--- /dev/null
+++ b/ld/testsuite/ld-scripts/default-script2.d
@@ -0,0 +1,9 @@
+# source: default-script.s
+# ld: -T default-script.t -defsym _START=0x8000000
+# nm: -n
+
+#...
+0*8000000 . _START
+#...
+0*9000000 t text
+#pass
diff --git a/ld/testsuite/ld-scripts/default-script3.d b/ld/testsuite/ld-scripts/default-script3.d
new file mode 100644
index 000000000000..b41dcbf0a3b9
--- /dev/null
+++ b/ld/testsuite/ld-scripts/default-script3.d
@@ -0,0 +1,9 @@
+# source: default-script.s
+# ld: -defsym _START=0x8000000 -dT default-script.t
+# nm: -n
+
+#...
+0*8000000 . _START
+#...
+0*8000000 t text
+#pass
diff --git a/ld/testsuite/ld-scripts/default-script4.d b/ld/testsuite/ld-scripts/default-script4.d
new file mode 100644
index 000000000000..ec097d633bca
--- /dev/null
+++ b/ld/testsuite/ld-scripts/default-script4.d
@@ -0,0 +1,9 @@
+# source: default-script.s
+# ld: --default-script default-script.t -defsym _START=0x8000000
+# nm: -n
+
+#...
+0*8000000 . _START
+#...
+0*8000000 t text
+#pass
diff --git a/ld/testsuite/ld-scripts/defined.exp b/ld/testsuite/ld-scripts/defined.exp
index dff238b1f892..13e8d5a67a1f 100644
--- a/ld/testsuite/ld-scripts/defined.exp
+++ b/ld/testsuite/ld-scripts/defined.exp
@@ -1,6 +1,6 @@
# Test DEFINED in a linker script.
# By Ian Lance Taylor, Cygnus Support.
-# Copyright 2001, 2003
+# Copyright 2001, 2003. 2006
# Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
@@ -25,7 +25,13 @@ if ![ld_assemble $as $srcdir/$subdir/defined.s tmpdir/def.o] {
return
}
-if ![ld_simple_link $ld tmpdir/def "-T $srcdir/$subdir/defined.t tmpdir/def.o"] {
+global LDFLAGS
+set saved_LDFLAGS "$LDFLAGS"
+if [istarget "x86_64-*-mingw*"] then {
+ set LDFLAGS "$LDFLAGS --image-base 0"
+}
+
+if ![ld_simple_link $ld tmpdir/def "$LDFLAGS -T $srcdir/$subdir/defined.t tmpdir/def.o"] {
fail $testname
} else {
if ![ld_nm $nm "" tmpdir/def] {
@@ -57,3 +63,4 @@ if ![ld_simple_link $ld tmpdir/def "-T $srcdir/$subdir/defined.t tmpdir/def.o"]
set prms_id 0
run_dump_test "defined2"
run_dump_test "defined3"
+set LDFLAGS "$saved_LDFLAGS"
diff --git a/ld/testsuite/ld-scripts/empty-address-1.d b/ld/testsuite/ld-scripts/empty-address-1.d
new file mode 100644
index 000000000000..99fac1e58b59
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-1.d
@@ -0,0 +1,8 @@
+#ld: -T empty-address-1.t
+#nm: -n
+#...
+0+0 T _start
+#...
+0+2000000 A __data_end
+0+2000000 [ADT] __data_start
+#pass
diff --git a/ld/testsuite/ld-scripts/empty-address-1.s b/ld/testsuite/ld-scripts/empty-address-1.s
new file mode 100644
index 000000000000..c5cc1a596c8a
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-1.s
@@ -0,0 +1,5 @@
+ .text
+ .global _start
+_start:
+ .long __data_start
+ .long __data_end
diff --git a/ld/testsuite/ld-scripts/empty-address-1.t b/ld/testsuite/ld-scripts/empty-address-1.t
new file mode 100644
index 000000000000..57a8bed27711
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-1.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x0000000: { *(.text) }
+ .data 0x2000000:
+ {
+ __data_start = . ;
+ *(.data)
+ }
+ __data_end = .;
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-scripts/empty-address-2.s b/ld/testsuite/ld-scripts/empty-address-2.s
new file mode 100644
index 000000000000..79f58eacc343
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-2.s
@@ -0,0 +1,5 @@
+ .text
+ .global _start
+_start:
+ .long __data_end
+ .p2align 4
diff --git a/ld/testsuite/ld-scripts/empty-address-2a.d b/ld/testsuite/ld-scripts/empty-address-2a.d
new file mode 100644
index 000000000000..d831d5ffd1ab
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-2a.d
@@ -0,0 +1,8 @@
+#source: empty-address-2.s
+#ld: -Ttext 0x0000000 -Tdata 0x2000000 -T empty-address-2a.t
+#nm: -n
+#...
+0+0 T _start
+#...
+0+10 A __data_end
+#pass
diff --git a/ld/testsuite/ld-scripts/empty-address-2a.t b/ld/testsuite/ld-scripts/empty-address-2a.t
new file mode 100644
index 000000000000..6a40ad8b7c43
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-2a.t
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ .text : { *(.text) }
+ .data : { *(.data) }
+ __data_end = .;
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-scripts/empty-address-2b.d b/ld/testsuite/ld-scripts/empty-address-2b.d
new file mode 100644
index 000000000000..514fd68e2609
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-2b.d
@@ -0,0 +1,8 @@
+#source: empty-address-2.s
+#ld: -Ttext 0x0000000 -Tdata 0x2000000 -T empty-address-2b.t
+#nm: -n
+#...
+0+0 T _start
+#...
+0+10 A __data_end
+#pass
diff --git a/ld/testsuite/ld-scripts/empty-address-2b.t b/ld/testsuite/ld-scripts/empty-address-2b.t
new file mode 100644
index 000000000000..dcf264f4a28f
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-2b.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x0000000: { *(.text) }
+ .data :
+ {
+ PROVIDE (__data_start = .);
+ *(.data)
+ }
+ __data_end = .;
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-scripts/empty-address-3.s b/ld/testsuite/ld-scripts/empty-address-3.s
new file mode 100644
index 000000000000..6b07dd434d52
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-3.s
@@ -0,0 +1,5 @@
+ .text
+ .global _start
+_start:
+ .byte 0,0,0,0,0,0,0,0
+ .byte 0,0,0,0,0,0,0,0
diff --git a/ld/testsuite/ld-scripts/empty-address-3a.d b/ld/testsuite/ld-scripts/empty-address-3a.d
new file mode 100644
index 000000000000..bb12c801906b
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-3a.d
@@ -0,0 +1,8 @@
+#source: empty-address-3.s
+#ld: -T empty-address-3a.t
+#nm: -n
+#...
+0+0 T _start
+#...
+0+10 A __data_end
+#pass
diff --git a/ld/testsuite/ld-scripts/empty-address-3a.t b/ld/testsuite/ld-scripts/empty-address-3a.t
new file mode 100644
index 000000000000..2807e71f561f
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-3a.t
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text 0x00000000: { *(.text) }
+ .data ALIGN(0x1000) + (. & (0x1000 - 1)):
+ {
+ *(.data)
+ }
+ __data_end = .;
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-scripts/empty-address-3b.d b/ld/testsuite/ld-scripts/empty-address-3b.d
new file mode 100644
index 000000000000..b3e2a4b5ec3a
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-3b.d
@@ -0,0 +1,8 @@
+#source: empty-address-3.s
+#ld: -T empty-address-3b.t
+#nm: -n
+#...
+0+0 T _start
+#...
+0+10 A __data_end
+#pass
diff --git a/ld/testsuite/ld-scripts/empty-address-3b.t b/ld/testsuite/ld-scripts/empty-address-3b.t
new file mode 100644
index 000000000000..4f213af519ea
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-3b.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x00000000: { *(.text) }
+ .data ALIGN(0x1000) + (. & (0x1000 - 1)):
+ {
+ PROVIDE (__data_start = .);
+ *(.data)
+ }
+ __data_end = .;
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-scripts/empty-address-3c.d b/ld/testsuite/ld-scripts/empty-address-3c.d
new file mode 100644
index 000000000000..6001885bc712
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-3c.d
@@ -0,0 +1,10 @@
+#source: empty-address-3.s
+#ld: -T empty-address-3c.t
+#nm: -n
+#...
+0+0 T _start
+#...
+0+1010 A __data_end
+#...
+0+1010 [ADT] __data_start
+#pass
diff --git a/ld/testsuite/ld-scripts/empty-address-3c.t b/ld/testsuite/ld-scripts/empty-address-3c.t
new file mode 100644
index 000000000000..6de519881fed
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address-3c.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x00000000: { *(.text) }
+ .data ALIGN(0x1000) + (. & (0x1000 - 1)):
+ {
+ __data_start = .;
+ *(.data)
+ }
+ __data_end = .;
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-scripts/empty-address.exp b/ld/testsuite/ld-scripts/empty-address.exp
new file mode 100644
index 000000000000..556aabae42f2
--- /dev/null
+++ b/ld/testsuite/ld-scripts/empty-address.exp
@@ -0,0 +1,25 @@
+# Make sure that "dot" is updated for empty sections if their addresses
+# are set.
+# 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.
+
+run_dump_test empty-address-1
+run_dump_test empty-address-2a
+run_dump_test empty-address-2b
+run_dump_test empty-address-3a
+run_dump_test empty-address-3b
+run_dump_test empty-address-3c
diff --git a/ld/testsuite/ld-scripts/empty-orphan.exp b/ld/testsuite/ld-scripts/empty-orphan.exp
index fa845e03fa45..847e8f4bca6a 100644
--- a/ld/testsuite/ld-scripts/empty-orphan.exp
+++ b/ld/testsuite/ld-scripts/empty-orphan.exp
@@ -1,6 +1,6 @@
# Make sure orphan sections do not lead to huge output files.
# By David Heine, Tensilica, Inc.
-# Copyright 2005
+# Copyright 2005, 2006
# Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
@@ -22,6 +22,10 @@ if ![is_elf_format] {
return
}
+if { [istarget spu*-*-*] } {
+ set LDFLAGS "--local-store 0:0"
+}
+
set testname "empty-orphan"
run_dump_test empty-orphan
diff --git a/ld/testsuite/ld-scripts/empty-orphan.t b/ld/testsuite/ld-scripts/empty-orphan.t
index 0f717a3f3312..b57e164aa7c7 100644
--- a/ld/testsuite/ld-scripts/empty-orphan.t
+++ b/ld/testsuite/ld-scripts/empty-orphan.t
@@ -17,6 +17,6 @@ SECTIONS
.text : { *(.text) } > text_mem : text_phdr
.data : { *(.data) } > data_mem : data_phdr
.bss : { *(.bss) } > data_mem : data_phdr
- /DISCARD/ : { *(.reginfo) }
+ /DISCARD/ : { *(.reginfo) *(.glue*) }
/* .orphan_data is an orphan */
}
diff --git a/ld/testsuite/ld-scripts/expr.exp b/ld/testsuite/ld-scripts/expr.exp
new file mode 100644
index 000000000000..43ca1c6c89aa
--- /dev/null
+++ b/ld/testsuite/ld-scripts/expr.exp
@@ -0,0 +1,20 @@
+# Test ALIGN in a linker script.
+# By Nathan Sidwell, CodeSourcery LLC
+# 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.
+
+run_dump_test expr1
diff --git a/ld/testsuite/ld-scripts/expr1.d b/ld/testsuite/ld-scripts/expr1.d
new file mode 100644
index 000000000000..d96dfc1e1c1a
--- /dev/null
+++ b/ld/testsuite/ld-scripts/expr1.d
@@ -0,0 +1,2 @@
+# ld: -T expr1.t
+# error: undefined section .* in expression
diff --git a/ld/testsuite/ld-scripts/expr1.s b/ld/testsuite/ld-scripts/expr1.s
new file mode 100644
index 000000000000..ec0ce903bb10
--- /dev/null
+++ b/ld/testsuite/ld-scripts/expr1.s
@@ -0,0 +1,2 @@
+ .word 0
+
diff --git a/ld/testsuite/ld-scripts/expr1.t b/ld/testsuite/ld-scripts/expr1.t
new file mode 100644
index 000000000000..e0810ba07ed4
--- /dev/null
+++ b/ld/testsuite/ld-scripts/expr1.t
@@ -0,0 +1,12 @@
+ENTRY(RAM)
+
+MEMORY
+{
+ ram (rwx) : ORIGIN = 0, LENGTH = 0x1000000
+}
+
+SECTIONS
+{
+.text : { } >ram
+}
+RAM = ADDR(ram);
diff --git a/ld/testsuite/ld-scripts/extern.exp b/ld/testsuite/ld-scripts/extern.exp
new file mode 100644
index 000000000000..a613a757eee3
--- /dev/null
+++ b/ld/testsuite/ld-scripts/extern.exp
@@ -0,0 +1,68 @@
+# Test EXTERN in a linker script.
+# By Nathan Sidwell, CodeSourcery LLC
+# Copyright 2007
+# 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 "EXTERN"
+
+if ![ld_assemble $as $srcdir/$subdir/extern.s tmpdir/extern.o] {
+ unresolved $testname
+ return
+}
+
+if ![ld_simple_link $ld tmpdir/extern "-T $srcdir/$subdir/extern.t tmpdir/extern.o"] {
+ fail $testname
+}
+
+if ![ld_nm $nm "" tmpdir/extern] {
+ unresolved $testname
+ return
+}
+
+if {![info exists nm_output(sym1)] || $nm_output(sym1) != 1} {
+ send_log "sym1 wrong\n"
+ verbose "sym1 wrong"
+ fail $testname
+ return
+}
+
+if {![info exists nm_output(sym2)] || $nm_output(sym2) != 2} {
+ send_log "sym1 wrong\n"
+ verbose "sym1 wrong"
+ fail $testname
+ return
+}
+if {![info exists nm_output(sym3)] || $nm_output(sym3) != 3} {
+ send_log "sym1 wrong\n"
+ verbose "sym1 wrong"
+ fail $testname
+ return
+}
+if {![info exists nm_output(sym4)] || $nm_output(sym4) != 4} {
+ send_log "sym1 wrong\n"
+ verbose "sym1 wrong"
+ fail $testname
+ return
+}
+if {![info exists nm_output(sym5)] || $nm_output(sym5) != 5} {
+ send_log "sym1 wrong\n"
+ verbose "sym1 wrong"
+ fail $testname
+ return
+}
+
+pass $testname
diff --git a/ld/testsuite/ld-scripts/extern.s b/ld/testsuite/ld-scripts/extern.s
new file mode 100644
index 000000000000..09cc1e1f7cd8
--- /dev/null
+++ b/ld/testsuite/ld-scripts/extern.s
@@ -0,0 +1 @@
+ .text
diff --git a/ld/testsuite/ld-scripts/extern.t b/ld/testsuite/ld-scripts/extern.t
new file mode 100644
index 000000000000..b2a012a322c1
--- /dev/null
+++ b/ld/testsuite/ld-scripts/extern.t
@@ -0,0 +1,14 @@
+
+EXTERN(sym1)
+EXTERN(sym2, sym3)
+EXTERN(sym4 sym5)
+
+PROVIDE(sym1 = 1);
+PROVIDE(sym2 = 2);
+PROVIDE(sym3 = 3);
+PROVIDE(sym4 = 4);
+PROVIDE(sym5 = 5);
+
+SECTIONS
+{
+}
diff --git a/ld/testsuite/ld-scripts/overlay-size.t b/ld/testsuite/ld-scripts/overlay-size.t
index f7ffbbbd7422..53f857d6966b 100644
--- a/ld/testsuite/ld-scripts/overlay-size.t
+++ b/ld/testsuite/ld-scripts/overlay-size.t
@@ -54,4 +54,5 @@ SECTIONS
} > DATAMEM AT > LOADMEM
. = 0x8000;
+ /DISCARD/ : { *(.reginfo) }
}
diff --git a/ld/testsuite/ld-scripts/phdrs.exp b/ld/testsuite/ld-scripts/phdrs.exp
index 67af6ad9b6aa..7dca55505a07 100644
--- a/ld/testsuite/ld-scripts/phdrs.exp
+++ b/ld/testsuite/ld-scripts/phdrs.exp
@@ -1,6 +1,6 @@
# Test PHDRS in a linker script.
# By Ian Lance Taylor, Cygnus Support.
-# Copyright 1999, 2000, 2001, 2002, 2003
+# Copyright 1999, 2000, 2001, 2002, 2003, 2006
# Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
@@ -26,6 +26,11 @@ if ![is_elf_format] {
set testname "PHDRS"
+set ldopt ""
+if { [istarget spu*-*-*] } {
+ set ldopt "--local-store 0:0"
+}
+
if ![ld_assemble $as $srcdir/$subdir/phdrs.s tmpdir/phdrs.o] {
unresolved $testname
return
@@ -40,7 +45,8 @@ if [is_elf64 tmpdir/phdrs.o] {
".*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"] {
+set ldopt "$ldopt -T $srcdir/$subdir/phdrs.t tmpdir/phdrs.o"
+if ![ld_simple_link $ld tmpdir/phdrs $ldopt] {
fail $testname
} else {
if {[which $objdump] == 0} {
diff --git a/ld/testsuite/ld-scripts/phdrs2.exp b/ld/testsuite/ld-scripts/phdrs2.exp
index 5fbc2fa45369..8c41ffe31799 100644
--- a/ld/testsuite/ld-scripts/phdrs2.exp
+++ b/ld/testsuite/ld-scripts/phdrs2.exp
@@ -36,6 +36,11 @@ if { [istarget *-*-linux*aout*] \
set testname "PHDRS2"
+set ldopt ""
+if { [istarget spu*-*-*] } {
+ set ldopt "--local-store 0:0"
+}
+
if ![ld_assemble $as $srcdir/$subdir/phdrs2.s tmpdir/phdrs2.o] {
unresolved $testname
return
@@ -44,7 +49,8 @@ if ![ld_assemble $as $srcdir/$subdir/phdrs2.s tmpdir/phdrs2.o] {
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"] {
+set ldopt "$ldopt -T $srcdir/$subdir/phdrs2.t tmpdir/phdrs2.o"
+if ![ld_simple_link $ld tmpdir/phdrs2 $ldopt] {
fail $testname
} else {
if {[which $objdump] == 0} {
diff --git a/ld/testsuite/ld-scripts/provide.exp b/ld/testsuite/ld-scripts/provide.exp
index 7e2c0e7e01d6..46915978acd9 100644
--- a/ld/testsuite/ld-scripts/provide.exp
+++ b/ld/testsuite/ld-scripts/provide.exp
@@ -1,6 +1,6 @@
# Test PROVIDE in a linker script.
# By Nathan Sidwell, CodeSourcery LLC
-# Copyright 2004
+# Copyright 2004, 2006
# Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
@@ -29,7 +29,15 @@ if {[istarget "rs6000-*-aix*"] || [is_aout_format]} {
return
}
+global LDFLAGS
+set saved_LDFLAGS "$LDFLAGS"
+if [istarget "x86_64-*-mingw*"] then {
+ set LDFLAGS "$LDFLAGS --image-base 0"
+}
+
run_dump_test provide-1
run_dump_test provide-2
setup_xfail *-*-*
run_dump_test provide-3
+
+set LDFLAGS "$saved_LDFLAGS"
diff --git a/ld/testsuite/ld-scripts/script.exp b/ld/testsuite/ld-scripts/script.exp
index bf7b1b1dc916..6bb8c9cee27a 100644
--- a/ld/testsuite/ld-scripts/script.exp
+++ b/ld/testsuite/ld-scripts/script.exp
@@ -1,6 +1,6 @@
# Test basic linker script functionality
# By Ian Lance Taylor, Cygnus Support
-# Copyright 1999, 2000, 2001, 2002, 2004
+# Copyright 1999, 2000, 2001, 2002, 2004, 2006
# Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
@@ -95,7 +95,7 @@ proc check_script { } {
set flags ""
if {[istarget "*-*-pe*"] \
|| [istarget "*-*-cygwin*"] \
- || [istarget "*-*-mingw32*"] \
+ || [istarget "*-*-mingw*"] \
|| [istarget "*-*-winnt*"] \
|| [istarget "*-*-nt"] \
|| [istarget "*-*-interix*"] } then {
@@ -123,5 +123,3 @@ if ![ld_simple_link $ld tmpdir/script "$flags -T $srcdir/$subdir/memory.t tmpdir
} else {
check_script
}
-
-
diff --git a/ld/testsuite/ld-scripts/sort.t b/ld/testsuite/ld-scripts/sort.t
new file mode 100644
index 000000000000..c53481f2f3de
--- /dev/null
+++ b/ld/testsuite/ld-scripts/sort.t
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .text : {*(.text .text.*)}
+ /DISCARD/ : { *(.*) }
+}
diff --git a/ld/testsuite/ld-scripts/sort_b_a-1.d b/ld/testsuite/ld-scripts/sort_b_a-1.d
new file mode 100644
index 000000000000..eaa917de570a
--- /dev/null
+++ b/ld/testsuite/ld-scripts/sort_b_a-1.d
@@ -0,0 +1,9 @@
+#source: sort_b_a-1.s
+#ld: -T sort.t --sort-section alignment
+#name: --sort-section alignment
+#nm: -n
+
+0[0-9a-f]* t text3
+0[0-9a-f]* t text1
+0[0-9a-f]* t text
+0[0-9a-f]* t text2
diff --git a/ld/testsuite/ld-scripts/sort_b_a-1.s b/ld/testsuite/ld-scripts/sort_b_a-1.s
new file mode 100644
index 000000000000..87d3613f885e
--- /dev/null
+++ b/ld/testsuite/ld-scripts/sort_b_a-1.s
@@ -0,0 +1,16 @@
+ .section .text.2
+ .p2align 3
+text2:
+ .long 0
+ .section .text.3
+ .p2align 6
+text3:
+ .long 0
+ .section .text.1
+ .p2align 5
+text1:
+ .long 0
+ .text
+text:
+ .p2align 4
+ .long 0
diff --git a/ld/testsuite/ld-scripts/sort_b_n-1.d b/ld/testsuite/ld-scripts/sort_b_n-1.d
new file mode 100644
index 000000000000..42bdcf91aa29
--- /dev/null
+++ b/ld/testsuite/ld-scripts/sort_b_n-1.d
@@ -0,0 +1,9 @@
+#source: sort_b_n-1.s
+#ld: -T sort.t --sort-section name
+#name: --sort-section name
+#nm: -n
+
+0[0-9a-f]* t text
+0[0-9a-f]* t text1
+0[0-9a-f]* t text2
+0[0-9a-f]* t text3
diff --git a/ld/testsuite/ld-scripts/sort_b_n-1.s b/ld/testsuite/ld-scripts/sort_b_n-1.s
new file mode 100644
index 000000000000..5a49170d46b9
--- /dev/null
+++ b/ld/testsuite/ld-scripts/sort_b_n-1.s
@@ -0,0 +1,12 @@
+ .section .text.2
+text2:
+ .long 0
+ .section .text.3
+text3:
+ .long 0
+ .section .text.1
+text1:
+ .long 0
+ .text
+text:
+ .long 0
diff --git a/ld/testsuite/ld-scripts/weak.exp b/ld/testsuite/ld-scripts/weak.exp
index 925c812c7e01..c70bbf2627c2 100644
--- a/ld/testsuite/ld-scripts/weak.exp
+++ b/ld/testsuite/ld-scripts/weak.exp
@@ -1,6 +1,6 @@
# Test weak symbols.
# By Ian Lance Taylor, Cygnus Solutions.
-# Copyright 1999, 2000, 2002, 2004
+# Copyright 1999, 2000, 2002, 2004, 2006
# Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
@@ -29,6 +29,7 @@ if {! [is_elf_format] && ! [is_pecoff_format]} {
# Weak symbols are broken for non-i386 PE targets.
if {! [istarget i?86-*-*]} {
setup_xfail *-*-pe*
+ setup_xfail x86_64-*-mingw*
}
# hppa64 and or32 are incredibly broken
@@ -41,6 +42,12 @@ if {! [ld_assemble $as $srcdir/$subdir/weak1.s tmpdir/weak1.o]
return
}
+global LDFLAGS
+set saved_LDFLAGS "$LDFLAGS"
+if [istarget "x86_64-*-mingw*"] then {
+ set LDFLAGS "$LDFLAGS --image-base 0"
+}
+
set weak_regexp_big \
".*Contents of section .text:.*1000 00001008 0000200c 12121212 34343434.*Contents of section .data:.*2000 00001008 0000200c 56565656 78787878.*"
@@ -52,6 +59,7 @@ if {! [ld_simple_link $ld tmpdir/weak "$flags -T $srcdir/$subdir/weak.t tmpdir/w
} else {
if {[which $objdump] == 0} then {
unresolved $testname
+ set LDFLAGS "$saved_LDFLAGS"
return
}
@@ -67,3 +75,5 @@ if {! [ld_simple_link $ld tmpdir/weak "$flags -T $srcdir/$subdir/weak.t tmpdir/w
fail $testname
}
}
+
+set LDFLAGS "$saved_LDFLAGS"
diff --git a/ld/testsuite/ld-selective/selective.exp b/ld/testsuite/ld-selective/selective.exp
index fcc2f39b0692..175aac272122 100644
--- a/ld/testsuite/ld-selective/selective.exp
+++ b/ld/testsuite/ld-selective/selective.exp
@@ -41,8 +41,8 @@ if {[istarget "alpha*-*-*"] || [istarget "ia64-*-*"]} {
# 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*-*}}
+ {selective2 C 2.c {} {} {foo} {}}
+ {selective3 C 2.c {-u foo} {foo} {{foo 0}} {}}
{selective4 C++ 3.cc {} {start a A::foo() B::foo()} {A::bar()} {mips*-*}}
{selective5 C++ 4.cc {} {start a A::bar()} {A::foo() B::foo()} {mips*-*}}
{selective6 C++ 5.cc {} {start a A::bar()}
@@ -53,6 +53,13 @@ set cflags "-w -O -ffunction-sections -fdata-sections"
set cxxflags "-fvtable-gc -fno-exceptions -fno-rtti"
set ldflags "--gc-sections -Bstatic"
+if [istarget mips*-*] {
+ # MIPS16 doesn't support PIC code.
+ set cflags "-mno-abicalls $cflags"
+ # MIPS ELF uses __start by default, we override it.
+ set ldflags "-e _start $ldflags"
+}
+
if [istarget sh64*-*-elf] {
# This is what gcc passes to ld by default, plus switch to the
# "usual" ELF _start (shelf32 normally uses just `start' for COFF
diff --git a/ld/testsuite/ld-sh/arch/arch.exp b/ld/testsuite/ld-sh/arch/arch.exp
index 7195f56866a9..d938d988af9c 100644
--- a/ld/testsuite/ld-sh/arch/arch.exp
+++ b/ld/testsuite/ld-sh/arch/arch.exp
@@ -76,9 +76,11 @@ proc test_arch { file1 file2 arch resultfile } {
set name2 [file tail $file2]
set rootname2 [file rootname $name2]
+ set flags [big_or_little_endian]
+
# This must use -r to prevent LD trying to relocate the (unrealistic) file
- send_log "$LD -r -o ${rootname1}_${rootname2}.o $file1 $file2\n"
- catch "exec $LD -r -o ${rootname1}_${rootname2}.o $file1 $file2" ld_output
+ send_log "$LD $flags -r -o ${rootname1}_${rootname2}.o $file1 $file2\n"
+ catch "exec $LD $flags -r -o ${rootname1}_${rootname2}.o $file1 $file2" ld_output
send_log $ld_output
if {[string equal $ld_output ""] == 1} then {
diff --git a/ld/testsuite/ld-sh/ld-r-1.d b/ld/testsuite/ld-sh/ld-r-1.d
index 7bcd479c2f55..1c629b3dbfd6 100644
--- a/ld/testsuite/ld-sh/ld-r-1.d
+++ b/ld/testsuite/ld-sh/ld-r-1.d
@@ -17,7 +17,8 @@ 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 .*
+.*
+ 0x00000000 09000900 09000900 0c000000 .*
Hex dump of section '\.rela\.text':
- 0x00000000 00000000 00000101 00000008 .*
+ 0x00000000 08000000 01010000 00000000 .*
diff --git a/ld/testsuite/ld-sh/rd-sh.exp b/ld/testsuite/ld-sh/rd-sh.exp
index 926251baab32..993247c51f7d 100644
--- a/ld/testsuite/ld-sh/rd-sh.exp
+++ b/ld/testsuite/ld-sh/rd-sh.exp
@@ -48,7 +48,11 @@ 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]
+ # vxworks-static.d relies on files created by sh-vxworks.exp.
+ # We run it there instead of here.
+ if { [file tail $shtest] != "vxworks1-static.d" } {
+ run_dump_test [file rootname $shtest]
+ }
if [string match $srcdir/$subdir/*-dso.d $shtest] {
# Copy the output of the DSO-createing test to .so file.
# Notice that a DSO-creating test must preceed the tests
diff --git a/ld/testsuite/ld-sh/reloc1.d b/ld/testsuite/ld-sh/reloc1.d
new file mode 100644
index 000000000000..b56cd7db8cdf
--- /dev/null
+++ b/ld/testsuite/ld-sh/reloc1.d
@@ -0,0 +1,10 @@
+#source: reloc1.s
+#as: -big
+#ld: -shared -EB --defsym foo=0x9000
+#objdump: -sj.data
+#target: sh*-*-elf sh-*-vxworks
+
+.*: file format elf32-sh.*
+
+Contents of section \.data:
+ .* 9123 .*
diff --git a/ld/testsuite/ld-sh/reloc1.s b/ld/testsuite/ld-sh/reloc1.s
new file mode 100644
index 000000000000..e57903491f99
--- /dev/null
+++ b/ld/testsuite/ld-sh/reloc1.s
@@ -0,0 +1,2 @@
+ .data
+ .word foo + 0x123
diff --git a/ld/testsuite/ld-sh/sh-vxworks.exp b/ld/testsuite/ld-sh/sh-vxworks.exp
new file mode 100644
index 000000000000..42c75e88c5fd
--- /dev/null
+++ b/ld/testsuite/ld-sh/sh-vxworks.exp
@@ -0,0 +1,42 @@
+if { ![istarget "sh-*-vxworks"] } {
+ return
+}
+
+set endians { "--big" "-EB" "" "--little" "-EL" "-le" }
+
+foreach { gas_option ld_option suffix } $endians {
+ set vxworkstests {
+ {"VxWorks shared library test 1" "-shared -Tvxworks1.ld $ld_option"
+ "$gas_option" {vxworks1-lib.s}
+ {{readelf --relocs vxworks1-lib.rd}
+ {objdump -dr vxworks1-lib$suffix.dd}
+ {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
+ "libvxworks1.so"}
+ {"VxWorks executable test 1 (dynamic)" \
+ "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic $ld_option"
+ "$gas_option" {vxworks1.s}
+ {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1$suffix.dd}}
+ "vxworks1"}
+ {"VxWorks executable test 2 (dynamic)" \
+ "-Tvxworks1.ld -q --force-dynamic $ld_option"
+ "$gas_option" {vxworks2.s}
+ {{readelf --segments vxworks2.sd}}
+ "vxworks2"}
+ {"VxWorks executable test 2 (static)"
+ "-Tvxworks1.ld $ld_option"
+ "$gas_option" {vxworks2.s}
+ {{readelf --segments vxworks2-static.sd}}
+ "vxworks2"}
+ {"VxWorks shared library test 3" "-shared -Tvxworks1.ld $ld_option"
+ "$gas_option" {vxworks3-lib.s}
+ {{objdump -dr vxworks3-lib$suffix.dd}}
+ "libvxworks3.so"}
+ {"VxWorks executable test 3 (dynamic)" \
+ "tmpdir/libvxworks3.so -Tvxworks1.ld -q --force-dynamic $ld_option"
+ "$gas_option" {vxworks3.s}
+ {{objdump -d vxworks3$suffix.dd}}
+ "vxworks3"}
+ }
+ run_ld_link_tests [subst $vxworkstests]
+}
+run_dump_test "vxworks1-static"
diff --git a/ld/testsuite/ld-sh/sh.exp b/ld/testsuite/ld-sh/sh.exp
index 5d3d5d4de77b..5fb6762d05d6 100644
--- a/ld/testsuite/ld-sh/sh.exp
+++ b/ld/testsuite/ld-sh/sh.exp
@@ -62,8 +62,10 @@ if ![ld_assemble $as "-relax $srcdir/$subdir/sh1.s" tmpdir/sh1.o] {
set testsrec "SH relaxing to S-records"
-if [istarget sh*-linux-*] {
- # This target needs the explicit entry address.
+if { [istarget sh*-linux-*] || [istarget sh-*-vxworks] } {
+ # On these "non-embedded" targets, the default ELF and srec start
+ # addresses will be SIZEOF_HEADERS bytes apart. Ensure consistency
+ # by feeding the ELF start address to the srec link line.
catch "exec $objdump -x tmpdir/sh1 | grep start\\ address | sed s/start\\ address//" entry_addr
set srec_relax_arg "-Ttext $entry_addr -relax --oformat srec tmpdir/sh1.o"
} else {
diff --git a/ld/testsuite/ld-sh/sh64/abi32.xd b/ld/testsuite/ld-sh/sh64/abi32.xd
index 03f1b01cca03..94b1014b8d9d 100644
--- a/ld/testsuite/ld-sh/sh64/abi32.xd
+++ b/ld/testsuite/ld-sh/sh64/abi32.xd
@@ -25,24 +25,21 @@ 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+10e8 g .* 0+ ___dtors
0+105c g \.text 0+ 0x04 xyzzy
0+1100 g \*ABS\* 0+ __bss_start
-0+10e8 g \*ABS\* 0+ ___ctors_end
+0+10e8 g .* 0+ ___ctors_end
0+10f0 g \.data 0+ baz2
-0+10e8 g \*ABS\* 0+ ___ctors
+0+10e8 g .* 0+ ___ctors
0+1000 g \.text 0+ 0x04 foo
0+1100 g \*ABS\* 0+ _edata
0+1100 g \*ABS\* 0+ _end
0+1010 g \.text 0+ 0x04 start
0+100c g \.text 0+ 0x04 bar
0+80000 g \.stack 0+ _stack
-0+10e8 g \*ABS\* 0+ ___dtors_end
+0+10e8 g .* 0+ ___dtors_end
diff --git a/ld/testsuite/ld-sh/sh64/abi64.xd b/ld/testsuite/ld-sh/sh64/abi64.xd
index fdfafb09a223..9af5b4719a41 100644
--- a/ld/testsuite/ld-sh/sh64/abi64.xd
+++ b/ld/testsuite/ld-sh/sh64/abi64.xd
@@ -24,24 +24,21 @@ 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
+0000000000001130 g .* 0000000000000000 ___dtors
00000000000010a4 g \.text 0000000000000000 0x04 xyzzy
0000000000001148 g \*ABS\* 0000000000000000 __bss_start
-0000000000001130 g \*ABS\* 0000000000000000 ___ctors_end
+0000000000001130 g .* 0000000000000000 ___ctors_end
0000000000001138 g \.data 0000000000000000 baz2
-0000000000001130 g \*ABS\* 0000000000000000 ___ctors
+0000000000001130 g .* 0000000000000000 ___ctors
0000000000001000 g \.text 0000000000000000 0x04 foo
0000000000001148 g \*ABS\* 0000000000000000 _edata
0000000000001148 g \*ABS\* 0000000000000000 _end
0000000000001018 g \.text 0000000000000000 0x04 start
0000000000001014 g \.text 0000000000000000 0x04 bar
0000000000080000 g \.stack 0000000000000000 _stack
-0000000000001130 g \*ABS\* 0000000000000000 ___dtors_end
+0000000000001130 g .* 0000000000000000 ___dtors_end
diff --git a/ld/testsuite/ld-sh/sh64/cmpct1.xd b/ld/testsuite/ld-sh/sh64/cmpct1.xd
index e1beb14f7439..41f898ed74c5 100644
--- a/ld/testsuite/ld-sh/sh64/cmpct1.xd
+++ b/ld/testsuite/ld-sh/sh64/cmpct1.xd
@@ -23,17 +23,14 @@ 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 .* 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 .* 0+ ___ctors_end
+0+1098 g .* 0+ ___ctors
0+1098 g \*ABS\* 0+ _edata
0+1098 g \*ABS\* 0+ _end
0+1000 g \.text 0+ start
0+80000 g \.stack 0+ _stack
-0+1098 g \*ABS\* 0+ ___dtors_end
+0+1098 g .* 0+ ___dtors_end
diff --git a/ld/testsuite/ld-sh/sh64/crange1.rd b/ld/testsuite/ld-sh/sh64/crange1.rd
index 52b7bd195c16..aa080dce50b2 100644
--- a/ld/testsuite/ld-sh/sh64/crange1.rd
+++ b/ld/testsuite/ld-sh/sh64/crange1.rd
@@ -24,20 +24,17 @@ Symbol table '\.symtab' contains [0-9]+ entries:
.*: 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
+.*: 00001004 0 NOTYPE LOCAL DEFAULT \[<other>: 4\] 2 start2
+.*: 000010a0 0 NOTYPE GLOBAL DEFAULT .* ___dtors
.*: 000010a0 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
-.*: 000010a0 0 NOTYPE GLOBAL DEFAULT ABS ___ctors_end
+.*: 000010a0 0 NOTYPE GLOBAL DEFAULT .* ___ctors_end
.*: 00001004 0 NOTYPE GLOBAL DEFAULT 2 diversion2
-.*: 000010a0 0 NOTYPE GLOBAL DEFAULT ABS ___ctors
+.*: 000010a0 0 NOTYPE GLOBAL DEFAULT .* ___ctors
.*: 000010a0 0 NOTYPE GLOBAL DEFAULT ABS _edata
.*: 000010a0 0 NOTYPE GLOBAL DEFAULT ABS _end
-.*: 00001000 0 NOTYPE GLOBAL DEFAULT 1 start
+.*: 00001000 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 start
.*: 00080000 0 NOTYPE GLOBAL DEFAULT 3 _stack
-.*: 000010a0 0 NOTYPE GLOBAL DEFAULT ABS ___dtors_end
+.*: 000010a0 0 NOTYPE GLOBAL DEFAULT .* ___dtors_end
Hex dump of section '\.init':
0x00001000 6ff0fff0 .*
diff --git a/ld/testsuite/ld-sh/sh64/crange2.rd b/ld/testsuite/ld-sh/sh64/crange2.rd
index dac8f9b1f56d..96902766ef28 100644
--- a/ld/testsuite/ld-sh/sh64/crange2.rd
+++ b/ld/testsuite/ld-sh/sh64/crange2.rd
@@ -24,24 +24,21 @@ Symbol table '\.symtab' contains [0-9]+ entries:
.*: 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
+.*: 00001004 0 NOTYPE LOCAL DEFAULT \[<other>: 4\] 2 start2
+.*: 0000101c 0 NOTYPE LOCAL DEFAULT \[<other>: 4\] 2 sec1
+.*: 0000102c 0 NOTYPE LOCAL DEFAULT \[<other>: 4\] 2 sec2
.*: 00001040 0 NOTYPE LOCAL DEFAULT 2 sec3
.*: 00001048 0 NOTYPE LOCAL DEFAULT 2 sec4
-.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS ___dtors
+.*: 000010e0 0 NOTYPE GLOBAL DEFAULT .* ___dtors
.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
-.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS ___ctors_end
+.*: 000010e0 0 NOTYPE GLOBAL DEFAULT .* ___ctors_end
.*: 00001004 0 NOTYPE GLOBAL DEFAULT 2 diversion2
-.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS ___ctors
+.*: 000010e0 0 NOTYPE GLOBAL DEFAULT .* ___ctors
.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS _edata
.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS _end
-.*: 00001000 0 NOTYPE GLOBAL DEFAULT 1 start
+.*: 00001000 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 start
.*: 00080000 0 NOTYPE GLOBAL DEFAULT 3 _stack
-.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS ___dtors_end
+.*: 000010e0 0 NOTYPE GLOBAL DEFAULT .* ___dtors_end
Hex dump of section '\.text':
0x00001004 6ff0fff0 6ff0fff0 6ff0fff0 0000002a .*
diff --git a/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd b/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd
index 674a91333254..4d9197bdb1ab 100644
--- a/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd
+++ b/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd
@@ -41,23 +41,20 @@ Symbol table '\.symtab' contains [0-9]+ entries:
.*: 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
+.*: 000010a4 0 NOTYPE LOCAL DEFAULT \[<other>: 4\] 2 start2
.*: 000010bc 0 NOTYPE LOCAL DEFAULT 2 sec3
-.*: 000010c4 0 NOTYPE GLOBAL DEFAULT 2 diversion
-.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___dtors
+.*: 000010c4 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 2 diversion
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT .* ___dtors
.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
-.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___ctors_end
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT .* ___ctors_end
.*: 000010a4 0 NOTYPE GLOBAL DEFAULT 2 diversion2
-.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___ctors
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT .* ___ctors
.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS _edata
.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS _end
-.*: 00001000 0 NOTYPE GLOBAL DEFAULT 1 start
+.*: 00001000 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 start
.*: 00080000 0 NOTYPE GLOBAL DEFAULT 3 _stack
-.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___dtors_end
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT .* ___dtors_end
Hex dump of section '\.text':
0x00001004 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
diff --git a/ld/testsuite/ld-sh/sh64/crange3-media.rd b/ld/testsuite/ld-sh/sh64/crange3-media.rd
index c5f2be446709..f1ba8e057b12 100644
--- a/ld/testsuite/ld-sh/sh64/crange3-media.rd
+++ b/ld/testsuite/ld-sh/sh64/crange3-media.rd
@@ -41,23 +41,20 @@ Symbol table '\.symtab' contains [0-9]+ entries:
.*: 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
+.*: 000010a4 0 NOTYPE LOCAL DEFAULT \[<other>: 4\] 2 start2
.*: 000010bc 0 NOTYPE LOCAL DEFAULT 2 sec3
-.*: 000010c4 0 NOTYPE GLOBAL DEFAULT 2 diversion
-.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___dtors
+.*: 000010c4 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 2 diversion
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT .* ___dtors
.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
-.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___ctors_end
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT .* ___ctors_end
.*: 000010a4 0 NOTYPE GLOBAL DEFAULT 2 diversion2
-.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___ctors
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT .* ___ctors
.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS _edata
.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS _end
-.*: 00001000 0 NOTYPE GLOBAL DEFAULT 1 start
+.*: 00001000 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 start
.*: 00080000 0 NOTYPE GLOBAL DEFAULT 3 _stack
-.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___dtors_end
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT .* ___dtors_end
Hex dump of section '\.text':
0x00001004 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
diff --git a/ld/testsuite/ld-sh/sh64/crange3.rd b/ld/testsuite/ld-sh/sh64/crange3.rd
index 034125429ce4..7426dabe9a53 100644
--- a/ld/testsuite/ld-sh/sh64/crange3.rd
+++ b/ld/testsuite/ld-sh/sh64/crange3.rd
@@ -22,23 +22,20 @@ Symbol table '\.symtab' contains [0-9]+ entries:
.*: 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
+.*: 000010a4 0 NOTYPE LOCAL DEFAULT \[<other>: 4\] 2 start2
.*: 000010bc 0 NOTYPE LOCAL DEFAULT 2 sec3
-.*: 000010c4 0 NOTYPE GLOBAL DEFAULT 2 diversion
-.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___dtors
+.*: 000010c4 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 2 diversion
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT .* ___dtors
.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
-.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___ctors_end
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT .* ___ctors_end
.*: 000010a4 0 NOTYPE GLOBAL DEFAULT 2 diversion2
-.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___ctors
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT .* ___ctors
.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS _edata
.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS _end
-.*: 00001000 0 NOTYPE GLOBAL DEFAULT 1 start
+.*: 00001000 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 start
.*: 00080000 0 NOTYPE GLOBAL DEFAULT 3 _stack
-.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___dtors_end
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT .* ___dtors_end
Hex dump of section '\.text':
0x00001004 6ff0fff0 6ff0fff0 6ff0fff0 6ff0fff0 .*
diff --git a/ld/testsuite/ld-sh/sh64/crangerel1.rd b/ld/testsuite/ld-sh/sh64/crangerel1.rd
index e9d096e2d9ef..005918e4f645 100644
--- a/ld/testsuite/ld-sh/sh64/crangerel1.rd
+++ b/ld/testsuite/ld-sh/sh64/crangerel1.rd
@@ -11,8 +11,8 @@ Section Headers:
\[ 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
+ \[ 9\] \.symtab SYMTAB 00000000 000298 000090 10 10 8 4
+ \[10\] \.strtab STRTAB 00000000 000328 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\)
@@ -24,7 +24,7 @@ Relocation section '\.rela\.cranges' at offset 0x[0-9a-f]+ contains 3 entries:
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:
+Symbol table '\.symtab' contains 9 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 SECTION LOCAL DEFAULT 1
@@ -33,12 +33,8 @@ Symbol table '\.symtab' contains 13 entries:
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
+ 7: 00000000 0 NOTYPE LOCAL DEFAULT \[<other>: 4\] 2 start2
+ 8: 00000000 0 NOTYPE GLOBAL DEFAULT 2 diversion2
Hex dump of section '\.text\.mixed':
0x00000000 6ff0fff0 6ff0fff0 6ff0fff0 0000002a .*
diff --git a/ld/testsuite/ld-sh/sh64/crangerel2.rd b/ld/testsuite/ld-sh/sh64/crangerel2.rd
index a5f1827dab08..f9c55d5494d4 100644
--- a/ld/testsuite/ld-sh/sh64/crangerel2.rd
+++ b/ld/testsuite/ld-sh/sh64/crangerel2.rd
@@ -11,8 +11,8 @@ Section Headers:
\[ 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
+ \[ 9\] \.symtab SYMTAB 00000000 000334 0000d0 10 10 12 4
+ \[10\] \.strtab STRTAB 00000000 000404 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\)
@@ -28,7 +28,7 @@ Relocation section '\.rela\.cranges' at offset 0x[0-9a-f]+ contains 7 entries:
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:
+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
@@ -37,16 +37,12 @@ Symbol table '\.symtab' contains 17 entries:
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
+ 7: 00000000 0 NOTYPE LOCAL DEFAULT \[<other>: 4\] 2 start2
+ 8: 00000018 0 NOTYPE LOCAL DEFAULT \[<other>: 4\] 2 sec1
+ 9: 00000028 0 NOTYPE LOCAL DEFAULT \[<other>: 4\] 2 sec2
+ 10: 0000003c 0 NOTYPE LOCAL DEFAULT 2 sec3
+ 11: 00000044 0 NOTYPE LOCAL DEFAULT 2 sec4
+ 12: 00000000 0 NOTYPE GLOBAL DEFAULT 2 diversion2
Hex dump of section '\.text\.mixed':
0x00000000 6ff0fff0 6ff0fff0 6ff0fff0 0000002a .*
diff --git a/ld/testsuite/ld-sh/sh64/mix1.xd b/ld/testsuite/ld-sh/sh64/mix1.xd
index ae82c45c6535..de72ce0ef96b 100644
--- a/ld/testsuite/ld-sh/sh64/mix1.xd
+++ b/ld/testsuite/ld-sh/sh64/mix1.xd
@@ -27,19 +27,16 @@ SYMBOL TABLE:
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+10c8 g .* 0+ ___dtors
0+10d8 g \*ABS\* 0+ __bss_start
-0+10c8 g \*ABS\* 0+ ___ctors_end
-0+10c8 g \*ABS\* 0+ ___ctors
+0+10c8 g .* 0+ ___ctors_end
+0+10c8 g .* 0+ ___ctors
0+10d8 g \*ABS\* 0+ _edata
0+10d8 g \*ABS\* 0+ _end
0+1000 g \.text 0+ start
0+80000 g \.stack 0+ _stack
-0+10c8 g \*ABS\* 0+ ___dtors_end
+0+10c8 g .* 0+ ___dtors_end
diff --git a/ld/testsuite/ld-sh/sh64/mix2.xd b/ld/testsuite/ld-sh/sh64/mix2.xd
index a7df4efc39ce..5c72763c07d8 100644
--- a/ld/testsuite/ld-sh/sh64/mix2.xd
+++ b/ld/testsuite/ld-sh/sh64/mix2.xd
@@ -31,9 +31,6 @@ SYMBOL TABLE:
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
@@ -42,14 +39,14 @@ SYMBOL TABLE:
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+10c8 g .* 0+ ___dtors
0+10cc g \.data 0+ medialabel4
0+10d8 g \*ABS\* 0+ __bss_start
-0+10c8 g \*ABS\* 0+ ___ctors_end
+0+10c8 g .* 0+ ___ctors_end
0+10d4 g \.data 0+ compactlabel5
-0+10c8 g \*ABS\* 0+ ___ctors
+0+10c8 g .* 0+ ___ctors
0+10d8 g \*ABS\* 0+ _edata
0+10d8 g \*ABS\* 0+ _end
0+1000 g \.text 0+ 0x04 start
0+80000 g \.stack 0+ _stack
-0+10c8 g \*ABS\* 0+ ___dtors_end
+0+10c8 g .* 0+ ___dtors_end
diff --git a/ld/testsuite/ld-sh/sh64/rel32.xd b/ld/testsuite/ld-sh/sh64/rel32.xd
index d49b21f6a123..65c00ac83e45 100644
--- a/ld/testsuite/ld-sh/sh64/rel32.xd
+++ b/ld/testsuite/ld-sh/sh64/rel32.xd
@@ -17,14 +17,9 @@ Idx Name Size VMA LMA File off Algn
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
diff --git a/ld/testsuite/ld-sh/sh64/rel64.xd b/ld/testsuite/ld-sh/sh64/rel64.xd
index 86791c949827..986e0138304b 100644
--- a/ld/testsuite/ld-sh/sh64/rel64.xd
+++ b/ld/testsuite/ld-sh/sh64/rel64.xd
@@ -17,14 +17,9 @@ Idx Name Size VMA LMA File off Algn
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
diff --git a/ld/testsuite/ld-sh/sh64/reldl32.rd b/ld/testsuite/ld-sh/sh64/reldl32.rd
index 59c657e3d9a6..d242c5c6a027 100644
--- a/ld/testsuite/ld-sh/sh64/reldl32.rd
+++ b/ld/testsuite/ld-sh/sh64/reldl32.rd
@@ -1,311 +1,306 @@
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
+00000008 0+5bf6 R_SH_IMM_LOW16 +00000004 +file1text1 +\+ 0
+0000000c 0+2df6 R_SH_IMM_LOW16 +0000000c +file1data2 +\+ 0
+00000010 0+30f6 R_SH_IMM_LOW16 +00000070 +file2text3 +\+ 0
+00000014 0+0ff6 R_SH_IMM_LOW16 +0000012c +file2data4 +\+ 0
+00000018 0+4cf6 R_SH_IMM_LOW16 +00000000 +unresolved1 +\+ 0
+0000001c 0+51f6 R_SH_IMM_LOW16 +00000000 +unresolved6 +\+ 0
+00000020 0+5df6 R_SH_IMM_LOW16 +00000000 +file1text1 +\+ 0
+00000024 0+5df6 R_SH_IMM_LOW16 +00000000 +file1text1 +\+ 18
+00000028 0+21f6 R_SH_IMM_LOW16 +00000000 +file1text5 +\+ 8
+0000002c 0+2df6 R_SH_IMM_LOW16 +0000000c +file1data2 +\+ 30
+00000030 0+2df6 R_SH_IMM_LOW16 +0000000c +file1data2 +\+ 0
+0000003c 0+42f6 R_SH_IMM_LOW16 +00000000 +unresolved7 +\+ 0
+00000040 0+27f6 R_SH_IMM_LOW16 +00000000 +unresolved1 +\+ 0
+00000034 0+35f8 R_SH_IMM_MEDLOW16 +00000000 +file2data4 +\+ 10
+00000038 0+35f6 R_SH_IMM_LOW16 +00000000 +file2data4 +\+ 10
+00000068 0+08f6 R_SH_IMM_LOW16 +00000064 +file2text1 +\+ 0
+0000006c 0+24f6 R_SH_IMM_LOW16 +00000124 +file2data2 +\+ 0
+00000070 0+23f6 R_SH_IMM_LOW16 +00000010 +file1text3 +\+ 0
+00000074 0+81f6 R_SH_IMM_LOW16 +00000014 +file1data4 +\+ 0
+00000078 0+4cf6 R_SH_IMM_LOW16 +00000000 +unresolved1 +\+ 0
+0000007c 0+64f6 R_SH_IMM_LOW16 +00000000 +unresolved3 +\+ 0
+00000080 0+85f6 R_SH_IMM_LOW16 +00000000 +unresolved8 +\+ 0
+00000084 0+32f6 R_SH_IMM_LOW16 +00000000 +unresolved9 +\+ 0
+00000088 0+5df6 R_SH_IMM_LOW16 +00000000 +file1text1 +\+ 0
+0000008c 0+4bf6 R_SH_IMM_LOW16 +00000000 +file1data2 +\+ 0
+00000090 0+28f6 R_SH_IMM_LOW16 +00000000 +file1data3 +\+ 0
Relocation section '\.rela\.data' at offset 0x[0-9a-f]+ contains 134 entries:
.*
-00000008 0+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
+00000008 0+0b01 R_SH_DIR32 +00000004 +file1data1 +\+ 0
+0000000c 0+0701 R_SH_DIR32 +0000000c +file1text2 +\+ 0
+00000010 0+7801 R_SH_DIR32 +00000128 +file2data3 +\+ 0
+00000014 0+6701 R_SH_DIR32 +00000074 +file2text4 +\+ 0
+00000018 0+7401 R_SH_DIR32 +00000000 +unresolved2 +\+ 0
+0000001c 0+0501 R_SH_DIR32 +00000000 +unresolved5 +\+ 0
+00000020 0+6c01 R_SH_DIR32 +00000000 +unresolved6 +\+ 0
+00000024 0+0601 R_SH_DIR32 +00000000 +unresolved9 +\+ 0
+00000028 0+7a01 R_SH_DIR32 +00000000 +a1 +\+ 0
+0000002c 0+7001 R_SH_DIR32 +00000000 +a23 +\+ 0
+00000030 0+5401 R_SH_DIR32 +0000003c +b123 +\+ 0
+00000034 0+6a01 R_SH_DIR32 +0000009c +c3 +\+ 0
+00000038 0+3c01 R_SH_DIR32 +000000a8 +c13 +\+ 0
+0000003c 0+2601 R_SH_DIR32 +00000000 +a2 +\+ 0
+00000040 0+4e01 R_SH_DIR32 +00000000 +a3 +\+ 0
+00000044 0+2501 R_SH_DIR32 +00000000 +a4 +\+ 0
+00000048 0+6901 R_SH_DIR32 +00000000 +a12 +\+ 0
+0000004c 0+1501 R_SH_DIR32 +00000000 +a13 +\+ 0
+00000050 0+7601 R_SH_DIR32 +00000000 +a23 +\+ 0
+00000054 0+6201 R_SH_DIR32 +00000000 +a123 +\+ 0
+00000058 0+3d01 R_SH_DIR32 +00000000 +b1 +\+ 0
+0000005c 0+7101 R_SH_DIR32 +00000000 +b2 +\+ 0
+00000060 0+2f01 R_SH_DIR32 +00000000 +a3 +\+ 0
+00000064 0+7f01 R_SH_DIR32 +00000000 +a13 +\+ 0
+00000068 0+2e01 R_SH_DIR32 +00000000 +b3 +\+ 0
+0000006c 0+6801 R_SH_DIR32 +00000000 +b4 +\+ 0
+00000070 0+5201 R_SH_DIR32 +00000000 +b12 +\+ 0
+00000074 0+2901 R_SH_DIR32 +00000000 +b13 +\+ 0
+00000078 0+3e01 R_SH_DIR32 +00000000 +a123 +\+ 0
+0000007c 0+6501 R_SH_DIR32 +00000024 +b3 +\+ 0
+00000080 0+3b01 R_SH_DIR32 +00000030 +b13 +\+ 0
+00000084 0+6f01 R_SH_DIR32 +00000034 +b23 +\+ 0
+00000088 0+7d01 R_SH_DIR32 +00000000 +b23 +\+ 0
+0000008c 0+0c01 R_SH_DIR32 +00000000 +b123 +\+ 0
+00000090 0+8301 R_SH_DIR32 +00000000 +c1 +\+ 0
+00000094 0+2c01 R_SH_DIR32 +00000000 +c2 +\+ 0
+00000098 0+6301 R_SH_DIR32 +00000000 +c3 +\+ 0
+0000009c 0+3901 R_SH_DIR32 +000000ac +c23 +\+ 0
+000000a0 0+7e01 R_SH_DIR32 +000000b0 +c123 +\+ 0
+000000a4 0+0e01 R_SH_DIR32 +00000000 +c4 +\+ 0
+000000a8 0+2001 R_SH_DIR32 +00000000 +c12 +\+ 0
+000000ac 0+3101 R_SH_DIR32 +00000000 +c13 +\+ 0
+000000b0 0+3601 R_SH_DIR32 +00000000 +c23 +\+ 0
+000000b4 0+3a01 R_SH_DIR32 +00000000 +c123 +\+ 0
+000000b8 0+4801 R_SH_DIR32 +00000000 +oa1 +\+ 0
+000000bc 0+1401 R_SH_DIR32 +00000000 +ob1 +\+ 0
+000000c0 0+4401 R_SH_DIR32 +000000d0 +ob123 +\+ 0
+000000c4 0+5901 R_SH_DIR32 +00000000 +oc1 +\+ 0
+000000c8 0+7901 R_SH_DIR32 +00000000 +oa2 +\+ 0
+000000cc 0+6101 R_SH_DIR32 +000000b8 +ob2 +\+ 0
+000000d0 0+7201 R_SH_DIR32 +00000044 +oc2 +\+ 0
+000000d4 0+4901 R_SH_DIR32 +00000000 +oa12 +\+ 0
+000000d8 0+1b01 R_SH_DIR32 +00000000 +oa12 +\+ 0
+000000dc 0+6001 R_SH_DIR32 +00000000 +ob12 +\+ 0
+000000e0 0+4a01 R_SH_DIR32 +000000c4 +ob12 +\+ 0
+000000e4 0+5a01 R_SH_DIR32 +00000000 +oc12 +\+ 0
+000000e8 0+1201 R_SH_DIR32 +00000050 +oc12 +\+ 0
+000000ec 0+3f01 R_SH_DIR32 +00000000 +oa23 +\+ 0
+000000f0 0+4501 R_SH_DIR32 +00000000 +oa13 +\+ 0
+000000f4 0+0a01 R_SH_DIR32 +0000005c +oc123 +\+ 0
+000000f8 0+5501 R_SH_DIR32 +00000000 +ob13 +\+ 0
+000000fc 0+5c01 R_SH_DIR32 +00000000 +oc13 +\+ 0
+00000100 0+8201 R_SH_DIR32 +000000cc +ob23 +\+ 0
+00000104 0+2b01 R_SH_DIR32 +00000058 +oc23 +\+ 0
+00000108 0+5701 R_SH_DIR32 +00000000 +oa123 +\+ 0
+0000010c 0+5001 R_SH_DIR32 +00000000 +oa123 +\+ 0
+00000110 0+6601 R_SH_DIR32 +00000000 +ob123 +\+ 0
+00000114 0+3301 R_SH_DIR32 +00000000 +oc123 +\+ 0
+00000120 0+7c01 R_SH_DIR32 +0000011c +file2data1 +\+ 0
+00000124 0+5e01 R_SH_DIR32 +0000006c +file2text2 +\+ 0
+00000128 0+8001 R_SH_DIR32 +00000010 +file1data3 +\+ 0
+0000012c 0+7701 R_SH_DIR32 +00000014 +file1text4 +\+ 0
+00000130 0+7401 R_SH_DIR32 +00000000 +unresolved2 +\+ 0
+00000134 0+7b01 R_SH_DIR32 +00000000 +unresolved4 +\+ 0
+00000138 0+4801 R_SH_DIR32 +00000000 +oa1 +\+ 0
+0000013c 0+1701 R_SH_DIR32 +00000000 +oa2 +\+ 0
+00000140 0+6d01 R_SH_DIR32 +00000000 +oa3 +\+ 0
+00000144 0+1c01 R_SH_DIR32 +00000000 +oa13 +\+ 0
+00000148 0+1901 R_SH_DIR32 +00000054 +oc13 +\+ 0
+0000014c 0+1001 R_SH_DIR32 +00000000 +oa4 +\+ 0
+00000150 0+1b01 R_SH_DIR32 +00000000 +oa12 +\+ 0
+00000154 0+4501 R_SH_DIR32 +00000000 +oa13 +\+ 0
+00000158 0+3801 R_SH_DIR32 +00000000 +oa23 +\+ 0
+0000015c 0+3f01 R_SH_DIR32 +00000000 +oa23 +\+ 0
+00000160 0+5701 R_SH_DIR32 +00000000 +oa123 +\+ 0
+00000164 0+1601 R_SH_DIR32 +00000048 +oc3 +\+ 0
+00000168 0+5001 R_SH_DIR32 +00000000 +oa123 +\+ 0
+0000016c 0+1401 R_SH_DIR32 +00000000 +ob1 +\+ 0
+00000170 0+2201 R_SH_DIR32 +00000000 +ob2 +\+ 0
+00000174 0+5f01 R_SH_DIR32 +00000000 +ob3 +\+ 0
+00000178 0+1301 R_SH_DIR32 +00000000 +ob4 +\+ 0
+0000017c 0+8401 R_SH_DIR32 +00000000 +oa3 +\+ 0
+00000180 0+2b01 R_SH_DIR32 +00000058 +oc23 +\+ 0
+00000184 0+0a01 R_SH_DIR32 +0000005c +oc123 +\+ 0
+00000188 0+6001 R_SH_DIR32 +00000000 +ob12 +\+ 0
+0000018c 0+5501 R_SH_DIR32 +00000000 +ob13 +\+ 0
+00000190 0+4d01 R_SH_DIR32 +000000c8 +ob13 +\+ 0
+00000194 0+8201 R_SH_DIR32 +000000cc +ob23 +\+ 0
+00000198 0+5801 R_SH_DIR32 +00000000 +ob23 +\+ 0
+0000019c 0+6601 R_SH_DIR32 +00000000 +ob123 +\+ 0
+000001a0 0+5901 R_SH_DIR32 +00000000 +oc1 +\+ 0
+000001a4 0+1101 R_SH_DIR32 +000000bc +ob3 +\+ 0
+000001a8 0+4401 R_SH_DIR32 +000000d0 +ob123 +\+ 0
+000001ac 0+0901 R_SH_DIR32 +00000000 +oc2 +\+ 0
+000001b0 0+3701 R_SH_DIR32 +00000000 +oc3 +\+ 0
+000001b4 0+5301 R_SH_DIR32 +00000000 +oc4 +\+ 0
+000001b8 0+5a01 R_SH_DIR32 +00000000 +oc12 +\+ 0
+000001bc 0+5c01 R_SH_DIR32 +00000000 +oc13 +\+ 0
+000001c0 0+2a01 R_SH_DIR32 +00000000 +oc23 +\+ 0
+000001c4 0+3301 R_SH_DIR32 +00000000 +oc123 +\+ 0
+000001c8 0+7a01 R_SH_DIR32 +00000000 +a1 +\+ 0
+000001cc 0+1a01 R_SH_DIR32 +00000098 +c2 +\+ 0
+000001d0 0+6f01 R_SH_DIR32 +00000034 +b23 +\+ 0
+000001d4 0+3d01 R_SH_DIR32 +00000000 +b1 +\+ 0
+000001d8 0+8301 R_SH_DIR32 +00000000 +c1 +\+ 0
+000001dc 0+6901 R_SH_DIR32 +00000000 +a12 +\+ 0
+000001e0 0+5601 R_SH_DIR32 +00000000 +a2 +\+ 0
+000001e4 0+0d01 R_SH_DIR32 +00000020 +b2 +\+ 0
+000001e8 0+5201 R_SH_DIR32 +00000000 +b12 +\+ 0
+000001ec 0+2001 R_SH_DIR32 +00000000 +c12 +\+ 0
+000001f0 0+5401 R_SH_DIR32 +0000003c +b123 +\+ 0
+000001f4 0+7e01 R_SH_DIR32 +000000b0 +c123 +\+ 0
+000001f8 0+1501 R_SH_DIR32 +00000000 +a13 +\+ 0
+000001fc 0+2901 R_SH_DIR32 +00000000 +b13 +\+ 0
+00000200 0+3901 R_SH_DIR32 +000000ac +c23 +\+ 0
+00000204 0+3e01 R_SH_DIR32 +00000000 +a123 +\+ 0
+00000208 0+3101 R_SH_DIR32 +00000000 +c13 +\+ 0
+0000020c 0+6201 R_SH_DIR32 +00000000 +a123 +\+ 0
+00000210 0+6e01 R_SH_DIR32 +000000a4 +c12 +\+ 0
+00000214 0+7001 R_SH_DIR32 +00000000 +a23 +\+ 0
+00000218 0+0c01 R_SH_DIR32 +00000000 +b123 +\+ 0
+0000021c 0+4001 R_SH_DIR32 +00000000 +a12 +\+ 0
+00000220 0+7301 R_SH_DIR32 +0000002c +b12 +\+ 0
+00000224 0+3a01 R_SH_DIR32 +00000000 +c123 +\+ 0
-Symbol table '\.symtab' contains 139 entries:
+Symbol table '\.symtab' contains 134 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 SECTION LOCAL DEFAULT 1
- 2: 00000000 0 SECTION LOCAL DEFAULT 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
+ 2: 00000000 0 SECTION LOCAL DEFAULT 3
+ 3: 00000000 0 SECTION LOCAL DEFAULT 5
+ 4: 00000000 0 SECTION LOCAL DEFAULT 6
+ 5: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved5
+ 6: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved9
+ 7: 0000000c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file1text2
+ 8: 00000064 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file2text1
+ 9: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc2
+ 10: 0000005c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc123
+ 11: 00000004 0 NOTYPE GLOBAL DEFAULT 3 file1data1
+ 12: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b123
+ 13: 00000020 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b2
+ 14: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c4
+ 15: 0000012c 0 NOTYPE GLOBAL DEFAULT 3 file2data4
+ 16: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa4
+ 17: 000000bc 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob3
+ 18: 00000050 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc12
+ 19: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob4
+ 20: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob1
+ 21: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a13
+ 22: 00000048 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc3
+ 23: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa2
+ 24: 000000a0 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c4
+ 25: 00000054 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc13
+ 26: 00000098 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c2
+ 27: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa12
+ 28: 00000000 0 NOTYPE GLOBAL DEFAULT UND oa13
+ 29: 000000c0 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob4
+ 30: 0000001c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b1
+ 31: 00000018 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file1text5
+ 32: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c12
+ 33: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file1text5
+ 34: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob2
+ 35: 00000010 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file1text3
+ 36: 00000124 0 NOTYPE GLOBAL DEFAULT 3 file2data2
+ 37: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a4
+ 38: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a2
+ 39: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved1
+ 40: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file1data3
+ 41: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b13
+ 42: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc23
+ 43: 00000058 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc23
+ 44: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c2
+ 45: 0000000c 0 NOTYPE GLOBAL DEFAULT 3 file1data2
+ 46: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b3
+ 47: 00000000 0 NOTYPE GLOBAL DEFAULT UND a3
+ 48: 00000070 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file2text3
+ 49: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c13
+ 50: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved9
+ 51: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc123
+ 52: 00000028 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b4
+ 53: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file2data4
+ 54: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c23
+ 55: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc3
+ 56: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa23
+ 57: 000000ac 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c23
+ 58: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c123
+ 59: 00000030 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b13
+ 60: 000000a8 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c13
+ 61: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b1
+ 62: 00000000 0 NOTYPE GLOBAL DEFAULT UND a123
+ 63: 00000000 0 NOTYPE GLOBAL DEFAULT UND oa23
+ 64: 00000000 0 NOTYPE GLOBAL DEFAULT UND a12
+ 65: 000000b4 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob1
+ 66: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved7
+ 67: 00000060 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 start2
+ 68: 000000d0 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob123
+ 69: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa13
+ 70: 00000094 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c1
+ 71: 0000004c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc4
+ 72: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa1
+ 73: 00000000 0 NOTYPE GLOBAL DEFAULT UND oa12
+ 74: 000000c4 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob12
+ 75: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file1data2
+ 76: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved1
+ 77: 000000c8 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob13
+ 78: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a3
+ 79: 00000018 0 NOTYPE GLOBAL DEFAULT 3 file1data5
+ 80: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa123
+ 81: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved6
+ 82: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b12
+ 83: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc4
+ 84: 0000003c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b123
+ 85: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob13
+ 86: 00000000 0 NOTYPE GLOBAL DEFAULT UND a2
+ 87: 00000000 0 NOTYPE GLOBAL DEFAULT UND oa123
+ 88: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob23
+ 89: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc1
+ 90: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc12
+ 91: 00000004 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file1text1
+ 92: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc13
+ 93: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file1text1
+ 94: 0000006c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file2text2
+ 95: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob3
+ 96: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob12
+ 97: 000000b8 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob2
+ 98: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a123
+ 99: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c3
+ 100: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved3
+ 101: 00000024 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b3
+ 102: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob123
+ 103: 00000074 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file2text4
+ 104: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b4
+ 105: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a12
+ 106: 0000009c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c3
+ 107: 00000040 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc1
+ 108: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved6
+ 109: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa3
+ 110: 000000a4 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c12
+ 111: 00000034 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b23
+ 112: 00000000 0 NOTYPE GLOBAL DEFAULT UND a23
+ 113: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b2
+ 114: 00000044 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc2
+ 115: 0000002c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b12
+ 116: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved2
+ 117: 00000000 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 start
+ 118: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a23
+ 119: 00000014 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file1text4
+ 120: 00000128 0 NOTYPE GLOBAL DEFAULT 3 file2data3
+ 121: 00000000 0 NOTYPE GLOBAL DEFAULT UND oa2
+ 122: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a1
+ 123: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved4
+ 124: 0000011c 0 NOTYPE GLOBAL DEFAULT 3 file2data1
+ 125: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b23
+ 126: 000000b0 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c123
+ 127: 00000000 0 NOTYPE GLOBAL DEFAULT UND a13
+ 128: 00000010 0 NOTYPE GLOBAL DEFAULT 3 file1data3
+ 129: 00000014 0 NOTYPE GLOBAL DEFAULT 3 file1data4
+ 130: 000000cc 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob23
+ 131: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c1
+ 132: 00000000 0 NOTYPE GLOBAL DEFAULT UND oa3
+ 133: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved8
Hex dump of section '\.text':
0x00000000 6ff0fff0 6ff0fff0 cc0000a0 cc000140 .*
diff --git a/ld/testsuite/ld-sh/sh64/reldl64.rd b/ld/testsuite/ld-sh/sh64/reldl64.rd
index fe002a2bb717..41aa91e41545 100644
--- a/ld/testsuite/ld-sh/sh64/reldl64.rd
+++ b/ld/testsuite/ld-sh/sh64/reldl64.rd
@@ -1,313 +1,308 @@
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
+0+8 0+5b000000f6 R_SH_IMM_LOW16[ ]+0+4 +file1text1[ ]+\+ 0
+0+c 0+2d000000f6 R_SH_IMM_LOW16[ ]+0+c +file1data2[ ]+\+ 0
+0+10 0+30000000f6 R_SH_IMM_LOW16[ ]+0+78 +file2text3[ ]+\+ 0
+0+14 0+0f000000f6 R_SH_IMM_LOW16[ ]+0+12c +file2data4[ ]+\+ 0
+0+18 0+4c000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved1[ ]+\+ 0
+0+1c 0+51000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved6[ ]+\+ 0
+0+20 0+5d000000f6 R_SH_IMM_LOW16[ ]+0+ +file1text1[ ]+\+ 0
+0+24 0+5d000000f6 R_SH_IMM_LOW16[ ]+0+ +file1text1[ ]+\+ 18
+0+28 0+21000000f6 R_SH_IMM_LOW16[ ]+0+ +file1text5[ ]+\+ 8
+0+2c 0+2d000000f6 R_SH_IMM_LOW16[ ]+0+c +file1data2[ ]+\+ 30
+0+30 0+2d000000f6 R_SH_IMM_LOW16[ ]+0+c +file1data2[ ]+\+ 0
+0+44 0+42000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved7[ ]+\+ 0
+0+48 0+27000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved1[ ]+\+ 0
+0+34 0+35000000fc R_SH_IMM_HI16[ ]+0+ +file2data4[ ]+\+ 10
+0+38 0+35000000fa R_SH_IMM_MEDHI16[ ]+0+ +file2data4[ ]+\+ 10
+0+3c 0+35000000f8 R_SH_IMM_MEDLOW16[ ]+0+ +file2data4[ ]+\+ 10
+0+40 0+35000000f6 R_SH_IMM_LOW16[ ]+0+ +file2data4[ ]+\+ 10
+0+70 0+08000000f6 R_SH_IMM_LOW16[ ]+0+6c +file2text1[ ]+\+ 0
+0+74 0+24000000f6 R_SH_IMM_LOW16[ ]+0+124 +file2data2[ ]+\+ 0
+0+78 0+23000000f6 R_SH_IMM_LOW16[ ]+0+10 +file1text3[ ]+\+ 0
+0+7c 0+81000000f6 R_SH_IMM_LOW16[ ]+0+14 +file1data4[ ]+\+ 0
+0+80 0+4c000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved1[ ]+\+ 0
+0+84 0+64000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved3[ ]+\+ 0
+0+88 0+85000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved8[ ]+\+ 0
+0+8c 0+32000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved9[ ]+\+ 0
+0+90 0+5d000000f6 R_SH_IMM_LOW16[ ]+0+ +file1text1[ ]+\+ 0
+0+94 0+4b000000f6 R_SH_IMM_LOW16[ ]+0+ +file1data2[ ]+\+ 0
+0+98 0+28000000f6 R_SH_IMM_LOW16[ ]+0+ +file1data3[ ]+\+ 0
Relocation section '\.rela\.data' at offset 0x[0-9a-f]+ contains 134 entries:
.*
-0+8 0+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
+0+8 0+0b00000001 R_SH_DIR32[ ]+0+4 +file1data1[ ]+\+ 0
+0+c 0+700000001 R_SH_DIR32[ ]+0+c +file1text2[ ]+\+ 0
+0+10 0+7800000001 R_SH_DIR32[ ]+0+128 +file2data3[ ]+\+ 0
+0+14 0+6700000001 R_SH_DIR32[ ]+0+7c +file2text4[ ]+\+ 0
+0+18 0+7400000001 R_SH_DIR32[ ]+0+ +unresolved2[ ]+\+ 0
+0+1c 0+0500000001 R_SH_DIR32[ ]+0+ +unresolved5[ ]+\+ 0
+0+20 0+6c00000001 R_SH_DIR32[ ]+0+ +unresolved6[ ]+\+ 0
+0+24 0+0600000001 R_SH_DIR32[ ]+0+ +unresolved9[ ]+\+ 0
+0+28 0+7a00000001 R_SH_DIR32[ ]+0+ +a1[ ]+\+ 0
+0+2c 0+7000000001 R_SH_DIR32[ ]+0+ +a23[ ]+\+ 0
+0+30 0+5400000001 R_SH_DIR32[ ]+0+44 +b123[ ]+\+ 0
+0+34 0+6a00000001 R_SH_DIR32[ ]+0+a4 +c3[ ]+\+ 0
+0+38 0+3c00000001 R_SH_DIR32[ ]+0+b0 +c13[ ]+\+ 0
+0+3c 0+2600000001 R_SH_DIR32[ ]+0+ +a2[ ]+\+ 0
+0+40 0+4e00000001 R_SH_DIR32[ ]+0+ +a3[ ]+\+ 0
+0+44 0+2500000001 R_SH_DIR32[ ]+0+ +a4[ ]+\+ 0
+0+48 0+6900000001 R_SH_DIR32[ ]+0+ +a12[ ]+\+ 0
+0+4c 0+1500000001 R_SH_DIR32[ ]+0+ +a13[ ]+\+ 0
+0+50 0+7600000001 R_SH_DIR32[ ]+0+ +a23[ ]+\+ 0
+0+54 0+6200000001 R_SH_DIR32[ ]+0+ +a123[ ]+\+ 0
+0+58 0+3d00000001 R_SH_DIR32[ ]+0+ +b1[ ]+\+ 0
+0+5c 0+7100000001 R_SH_DIR32[ ]+0+ +b2[ ]+\+ 0
+0+60 0+2f00000001 R_SH_DIR32[ ]+0+ +a3[ ]+\+ 0
+0+64 0+7f00000001 R_SH_DIR32[ ]+0+ +a13[ ]+\+ 0
+0+68 0+2e00000001 R_SH_DIR32[ ]+0+ +b3[ ]+\+ 0
+0+6c 0+6800000001 R_SH_DIR32[ ]+0+ +b4[ ]+\+ 0
+0+70 0+5200000001 R_SH_DIR32[ ]+0+ +b12[ ]+\+ 0
+0+74 0+2900000001 R_SH_DIR32[ ]+0+ +b13[ ]+\+ 0
+0+78 0+3e00000001 R_SH_DIR32[ ]+0+ +a123[ ]+\+ 0
+0+7c 0+6500000001 R_SH_DIR32[ ]+0+24 +b3[ ]+\+ 0
+0+80 0+3b00000001 R_SH_DIR32[ ]+0+30 +b13[ ]+\+ 0
+0+84 0+6f00000001 R_SH_DIR32[ ]+0+34 +b23[ ]+\+ 0
+0+88 0+7d00000001 R_SH_DIR32[ ]+0+ +b23[ ]+\+ 0
+0+8c 0+0c00000001 R_SH_DIR32[ ]+0+ +b123[ ]+\+ 0
+0+90 0+8300000001 R_SH_DIR32[ ]+0+ +c1[ ]+\+ 0
+0+94 0+2c00000001 R_SH_DIR32[ ]+0+ +c2[ ]+\+ 0
+0+98 0+6300000001 R_SH_DIR32[ ]+0+ +c3[ ]+\+ 0
+0+9c 0+3900000001 R_SH_DIR32[ ]+0+b4 +c23[ ]+\+ 0
+0+a0 0+7e00000001 R_SH_DIR32[ ]+0+b8 +c123[ ]+\+ 0
+0+a4 0+0e00000001 R_SH_DIR32[ ]+0+ +c4[ ]+\+ 0
+0+a8 0+2000000001 R_SH_DIR32[ ]+0+ +c12[ ]+\+ 0
+0+ac 0+3100000001 R_SH_DIR32[ ]+0+ +c13[ ]+\+ 0
+0+b0 0+3600000001 R_SH_DIR32[ ]+0+ +c23[ ]+\+ 0
+0+b4 0+3a00000001 R_SH_DIR32[ ]+0+ +c123[ ]+\+ 0
+0+b8 0+4800000001 R_SH_DIR32[ ]+0+ +oa1[ ]+\+ 0
+0+bc 0+1400000001 R_SH_DIR32[ ]+0+ +ob1[ ]+\+ 0
+0+c0 0+4400000001 R_SH_DIR32[ ]+0+d8 +ob123[ ]+\+ 0
+0+c4 0+5900000001 R_SH_DIR32[ ]+0+ +oc1[ ]+\+ 0
+0+c8 0+7900000001 R_SH_DIR32[ ]+0+ +oa2[ ]+\+ 0
+0+cc 0+6100000001 R_SH_DIR32[ ]+0+c0 +ob2[ ]+\+ 0
+0+d0 0+7200000001 R_SH_DIR32[ ]+0+4c +oc2[ ]+\+ 0
+0+d4 0+4900000001 R_SH_DIR32[ ]+0+ +oa12[ ]+\+ 0
+0+d8 0+1b00000001 R_SH_DIR32[ ]+0+ +oa12[ ]+\+ 0
+0+dc 0+6000000001 R_SH_DIR32[ ]+0+ +ob12[ ]+\+ 0
+0+e0 0+4a00000001 R_SH_DIR32[ ]+0+cc +ob12[ ]+\+ 0
+0+e4 0+5a00000001 R_SH_DIR32[ ]+0+ +oc12[ ]+\+ 0
+0+e8 0+1200000001 R_SH_DIR32[ ]+0+58 +oc12[ ]+\+ 0
+0+ec 0+3f00000001 R_SH_DIR32[ ]+0+ +oa23[ ]+\+ 0
+0+f0 0+4500000001 R_SH_DIR32[ ]+0+ +oa13[ ]+\+ 0
+0+f4 0+0a00000001 R_SH_DIR32[ ]+0+64 +oc123[ ]+\+ 0
+0+f8 0+5500000001 R_SH_DIR32[ ]+0+ +ob13[ ]+\+ 0
+0+fc 0+5c00000001 R_SH_DIR32[ ]+0+ +oc13[ ]+\+ 0
+0+100 0+8200000001 R_SH_DIR32[ ]+0+d4 +ob23[ ]+\+ 0
+0+104 0+2b00000001 R_SH_DIR32[ ]+0+60 +oc23[ ]+\+ 0
+0+108 0+5700000001 R_SH_DIR32[ ]+0+ +oa123[ ]+\+ 0
+0+10c 0+5000000001 R_SH_DIR32[ ]+0+ +oa123[ ]+\+ 0
+0+110 0+6600000001 R_SH_DIR32[ ]+0+ +ob123[ ]+\+ 0
+0+114 0+3300000001 R_SH_DIR32[ ]+0+ +oc123[ ]+\+ 0
+0+120 0+7c00000001 R_SH_DIR32[ ]+0+11c +file2data1[ ]+\+ 0
+0+124 0+5e00000001 R_SH_DIR32[ ]+0+74 +file2text2[ ]+\+ 0
+0+128 0+8000000001 R_SH_DIR32[ ]+0+10 +file1data3[ ]+\+ 0
+0+12c 0+7700000001 R_SH_DIR32[ ]+0+14 +file1text4[ ]+\+ 0
+0+130 0+7400000001 R_SH_DIR32[ ]+0+ +unresolved2[ ]+\+ 0
+0+134 0+7b00000001 R_SH_DIR32[ ]+0+ +unresolved4[ ]+\+ 0
+0+138 0+4800000001 R_SH_DIR32[ ]+0+ +oa1[ ]+\+ 0
+0+13c 0+1700000001 R_SH_DIR32[ ]+0+ +oa2[ ]+\+ 0
+0+140 0+6d00000001 R_SH_DIR32[ ]+0+ +oa3[ ]+\+ 0
+0+144 0+1c00000001 R_SH_DIR32[ ]+0+ +oa13[ ]+\+ 0
+0+148 0+1900000001 R_SH_DIR32[ ]+0+5c +oc13[ ]+\+ 0
+0+14c 0+1000000001 R_SH_DIR32[ ]+0+ +oa4[ ]+\+ 0
+0+150 0+1b00000001 R_SH_DIR32[ ]+0+ +oa12[ ]+\+ 0
+0+154 0+4500000001 R_SH_DIR32[ ]+0+ +oa13[ ]+\+ 0
+0+158 0+3800000001 R_SH_DIR32[ ]+0+ +oa23[ ]+\+ 0
+0+15c 0+3f00000001 R_SH_DIR32[ ]+0+ +oa23[ ]+\+ 0
+0+160 0+5700000001 R_SH_DIR32[ ]+0+ +oa123[ ]+\+ 0
+0+164 0+1600000001 R_SH_DIR32[ ]+0+50 +oc3[ ]+\+ 0
+0+168 0+5000000001 R_SH_DIR32[ ]+0+ +oa123[ ]+\+ 0
+0+16c 0+1400000001 R_SH_DIR32[ ]+0+ +ob1[ ]+\+ 0
+0+170 0+2200000001 R_SH_DIR32[ ]+0+ +ob2[ ]+\+ 0
+0+174 0+5f00000001 R_SH_DIR32[ ]+0+ +ob3[ ]+\+ 0
+0+178 0+1300000001 R_SH_DIR32[ ]+0+ +ob4[ ]+\+ 0
+0+17c 0+8400000001 R_SH_DIR32[ ]+0+ +oa3[ ]+\+ 0
+0+180 0+2b00000001 R_SH_DIR32[ ]+0+60 +oc23[ ]+\+ 0
+0+184 0+0a00000001 R_SH_DIR32[ ]+0+64 +oc123[ ]+\+ 0
+0+188 0+6000000001 R_SH_DIR32[ ]+0+ +ob12[ ]+\+ 0
+0+18c 0+5500000001 R_SH_DIR32[ ]+0+ +ob13[ ]+\+ 0
+0+190 0+4d00000001 R_SH_DIR32[ ]+0+d0 +ob13[ ]+\+ 0
+0+194 0+8200000001 R_SH_DIR32[ ]+0+d4 +ob23[ ]+\+ 0
+0+198 0+5800000001 R_SH_DIR32[ ]+0+ +ob23[ ]+\+ 0
+0+19c 0+6600000001 R_SH_DIR32[ ]+0+ +ob123[ ]+\+ 0
+0+1a0 0+5900000001 R_SH_DIR32[ ]+0+ +oc1[ ]+\+ 0
+0+1a4 0+1100000001 R_SH_DIR32[ ]+0+c4 +ob3[ ]+\+ 0
+0+1a8 0+4400000001 R_SH_DIR32[ ]+0+d8 +ob123[ ]+\+ 0
+0+1ac 0+0900000001 R_SH_DIR32[ ]+0+ +oc2[ ]+\+ 0
+0+1b0 0+3700000001 R_SH_DIR32[ ]+0+ +oc3[ ]+\+ 0
+0+1b4 0+5300000001 R_SH_DIR32[ ]+0+ +oc4[ ]+\+ 0
+0+1b8 0+5a00000001 R_SH_DIR32[ ]+0+ +oc12[ ]+\+ 0
+0+1bc 0+5c00000001 R_SH_DIR32[ ]+0+ +oc13[ ]+\+ 0
+0+1c0 0+2a00000001 R_SH_DIR32[ ]+0+ +oc23[ ]+\+ 0
+0+1c4 0+3300000001 R_SH_DIR32[ ]+0+ +oc123[ ]+\+ 0
+0+1c8 0+7a00000001 R_SH_DIR32[ ]+0+ +a1[ ]+\+ 0
+0+1cc 0+1a00000001 R_SH_DIR32[ ]+0+a0 +c2[ ]+\+ 0
+0+1d0 0+6f00000001 R_SH_DIR32[ ]+0+34 +b23[ ]+\+ 0
+0+1d4 0+3d00000001 R_SH_DIR32[ ]+0+ +b1[ ]+\+ 0
+0+1d8 0+8300000001 R_SH_DIR32[ ]+0+ +c1[ ]+\+ 0
+0+1dc 0+6900000001 R_SH_DIR32[ ]+0+ +a12[ ]+\+ 0
+0+1e0 0+5600000001 R_SH_DIR32[ ]+0+ +a2[ ]+\+ 0
+0+1e4 0+0d00000001 R_SH_DIR32[ ]+0+20 +b2[ ]+\+ 0
+0+1e8 0+5200000001 R_SH_DIR32[ ]+0+ +b12[ ]+\+ 0
+0+1ec 0+2000000001 R_SH_DIR32[ ]+0+ +c12[ ]+\+ 0
+0+1f0 0+5400000001 R_SH_DIR32[ ]+0+44 +b123[ ]+\+ 0
+0+1f4 0+7e00000001 R_SH_DIR32[ ]+0+b8 +c123[ ]+\+ 0
+0+1f8 0+1500000001 R_SH_DIR32[ ]+0+ +a13[ ]+\+ 0
+0+1fc 0+2900000001 R_SH_DIR32[ ]+0+ +b13[ ]+\+ 0
+0+200 0+3900000001 R_SH_DIR32[ ]+0+b4 +c23[ ]+\+ 0
+0+204 0+3e00000001 R_SH_DIR32[ ]+0+ +a123[ ]+\+ 0
+0+208 0+3100000001 R_SH_DIR32[ ]+0+ +c13[ ]+\+ 0
+0+20c 0+6200000001 R_SH_DIR32[ ]+0+ +a123[ ]+\+ 0
+0+210 0+6e00000001 R_SH_DIR32[ ]+0+ac +c12[ ]+\+ 0
+0+214 0+7000000001 R_SH_DIR32[ ]+0+ +a23[ ]+\+ 0
+0+218 0+0c00000001 R_SH_DIR32[ ]+0+ +b123[ ]+\+ 0
+0+21c 0+4000000001 R_SH_DIR32[ ]+0+ +a12[ ]+\+ 0
+0+220 0+7300000001 R_SH_DIR32[ ]+0+2c +b12[ ]+\+ 0
+0+224 0+3a00000001 R_SH_DIR32[ ]+0+ +c123[ ]+\+ 0
-Symbol table '\.symtab' contains 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
+Symbol table '\.symtab' contains 134 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 0000000000000000 0 SECTION LOCAL DEFAULT 1
+ 2: 0000000000000000 0 SECTION LOCAL DEFAULT 3
+ 3: 0000000000000000 0 SECTION LOCAL DEFAULT 5
+ 4: 0000000000000000 0 SECTION LOCAL DEFAULT 6
+ 5: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND unresolved5
+ 6: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND unresolved9
+ 7: 000000000000000c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file1text2
+ 8: 000000000000006c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file2text1
+ 9: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc2
+ 10: 0000000000000064 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc123
+ 11: 0000000000000004 0 NOTYPE GLOBAL DEFAULT 3 file1data1
+ 12: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b123
+ 13: 0000000000000020 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b2
+ 14: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c4
+ 15: 000000000000012c 0 NOTYPE GLOBAL DEFAULT 3 file2data4
+ 16: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa4
+ 17: 00000000000000c4 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob3
+ 18: 0000000000000058 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc12
+ 19: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob4
+ 20: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob1
+ 21: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a13
+ 22: 0000000000000050 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc3
+ 23: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa2
+ 24: 00000000000000a8 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c4
+ 25: 000000000000005c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc13
+ 26: 00000000000000a0 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c2
+ 27: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa12
+ 28: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND oa13
+ 29: 00000000000000c8 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob4
+ 30: 000000000000001c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b1
+ 31: 0000000000000018 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file1text5
+ 32: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c12
+ 33: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file1text5
+ 34: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob2
+ 35: 0000000000000010 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file1text3
+ 36: 0000000000000124 0 NOTYPE GLOBAL DEFAULT 3 file2data2
+ 37: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a4
+ 38: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a2
+ 39: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved1
+ 40: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file1data3
+ 41: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b13
+ 42: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc23
+ 43: 0000000000000060 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc23
+ 44: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c2
+ 45: 000000000000000c 0 NOTYPE GLOBAL DEFAULT 3 file1data2
+ 46: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b3
+ 47: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND a3
+ 48: 0000000000000078 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file2text3
+ 49: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c13
+ 50: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved9
+ 51: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc123
+ 52: 0000000000000028 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b4
+ 53: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file2data4
+ 54: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c23
+ 55: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc3
+ 56: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa23
+ 57: 00000000000000b4 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c23
+ 58: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c123
+ 59: 0000000000000030 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b13
+ 60: 00000000000000b0 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c13
+ 61: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b1
+ 62: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND a123
+ 63: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND oa23
+ 64: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND a12
+ 65: 00000000000000bc 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob1
+ 66: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved7
+ 67: 0000000000000068 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 start2
+ 68: 00000000000000d8 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob123
+ 69: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa13
+ 70: 000000000000009c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c1
+ 71: 0000000000000054 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc4
+ 72: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa1
+ 73: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND oa12
+ 74: 00000000000000cc 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob12
+ 75: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file1data2
+ 76: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND unresolved1
+ 77: 00000000000000d0 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob13
+ 78: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a3
+ 79: 0000000000000018 0 NOTYPE GLOBAL DEFAULT 3 file1data5
+ 80: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa123
+ 81: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND unresolved6
+ 82: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b12
+ 83: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc4
+ 84: 0000000000000044 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b123
+ 85: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob13
+ 86: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND a2
+ 87: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND oa123
+ 88: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob23
+ 89: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc1
+ 90: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc12
+ 91: 0000000000000004 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file1text1
+ 92: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc13
+ 93: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file1text1
+ 94: 0000000000000074 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file2text2
+ 95: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob3
+ 96: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob12
+ 97: 00000000000000c0 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 ob2
+ 98: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a123
+ 99: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c3
+ 100: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND unresolved3
+ 101: 0000000000000024 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b3
+ 102: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob123
+ 103: 000000000000007c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file2text4
+ 104: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b4
+ 105: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a12
+ 106: 00000000000000a4 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c3
+ 107: 0000000000000048 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc1
+ 108: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved6
+ 109: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa3
+ 110: 00000000000000ac 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c12
+ 111: 0000000000000034 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b23
+ 112: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND a23
+ 113: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b2
+ 114: 000000000000004c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 oc2
+ 115: 000000000000002c 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 b12
+ 116: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND unresolved2
+ 117: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 start
+ 118: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a23
+ 119: 0000000000000014 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 file1text4
+ 120: 0000000000000128 0 NOTYPE GLOBAL DEFAULT 3 file2data3
+ 121: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND oa2
+ 122: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a1
+ 123: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND unresolved4
+ 124: 000000000000011c 0 NOTYPE GLOBAL DEFAULT 3 file2data1
+ 125: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b23
+ 126: 00000000000000b8 0 NOTYPE GLOBAL DEFAULT \[<other>: 4\] 1 c123
+ 127: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND a13
+ 128: 0000000000000010 0 NOTYPE GLOBAL DEFAULT 3 file1data3
+ 129: 0000000000000014 0 NOTYPE GLOBAL DEFAULT 3 file1data4
+ 130: 00000000000000d4 0 NOTYPE GLOBAL DEFAULT \[<other>: 4] 1 ob23
+ 131: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c1
+ 132: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND oa3
+ 133: 0000000000000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved8
Hex dump of section '\.text':
0x00000000 6ff0fff0 6ff0fff0 cc0000a0 cc000140 .*
diff --git a/ld/testsuite/ld-sh/sh64/shdl32.xd b/ld/testsuite/ld-sh/sh64/shdl32.xd
index c0b1f3479caa..56773e3cfb5f 100644
--- a/ld/testsuite/ld-sh/sh64/shdl32.xd
+++ b/ld/testsuite/ld-sh/sh64/shdl32.xd
@@ -27,9 +27,6 @@ SYMBOL TABLE:
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
@@ -76,7 +73,7 @@ SYMBOL TABLE:
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+13c8 g .* 0+ ___dtors
0+141c g \.data 0+ dfoo_mixboth2
0+119c g \.text 0+ 0x04 bazboth
0+13f0 g \.data 0+ dfoo_other
@@ -92,13 +89,13 @@ SYMBOL TABLE:
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+13c8 g .* 0+ ___ctors_end
0+1064 g \.text 0+ 0x04 foo_mixwithout
0+116c g \.text 0+ 0x04 bar_other
0+13d0 g \.data 0+ dfooboth
0+1034 g \.text 0+ 0x04 foo_otherboth2
0+1400 g \.data 0+ dfoo_mix
-0+13c8 g \*ABS\* 0+ ___ctors
+0+13c8 g .* 0+ ___ctors
0+14d4 g \.data 0+ dbar_mix
0+100c g \.text 0+ 0x04 fooboth
0+1170 g \.text 0+ 0x04 bar_otherboth
@@ -121,6 +118,6 @@ SYMBOL TABLE:
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+13c8 g .* 0+ ___dtors_end
0+151c g \.data 0+ dbaz_otherboth2
0+1500 g \.data 0+ dbazboth2
diff --git a/ld/testsuite/ld-sh/sh64/shdl64.xd b/ld/testsuite/ld-sh/sh64/shdl64.xd
index 8a7b2364fcc6..142ca968cd04 100644
--- a/ld/testsuite/ld-sh/sh64/shdl64.xd
+++ b/ld/testsuite/ld-sh/sh64/shdl64.xd
@@ -27,9 +27,6 @@ SYMBOL TABLE:
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
@@ -76,7 +73,7 @@ SYMBOL TABLE:
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+13c8 g .* 0+ ___dtors
0+141c g \.data 0+ dfoo_mixboth2
0+119c g \.text 0+ 0x04 bazboth
0+13f0 g \.data 0+ dfoo_other
@@ -92,13 +89,13 @@ SYMBOL TABLE:
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+13c8 g .* 0+ ___ctors_end
0+1064 g \.text 0+ 0x04 foo_mixwithout
0+116c g \.text 0+ 0x04 bar_other
0+13d0 g \.data 0+ dfooboth
0+1034 g \.text 0+ 0x04 foo_otherboth2
0+1400 g \.data 0+ dfoo_mix
-0+13c8 g \*ABS\* 0+ ___ctors
+0+13c8 g .* 0+ ___ctors
0+14d4 g \.data 0+ dbar_mix
0+100c g \.text 0+ 0x04 fooboth
0+1170 g \.text 0+ 0x04 bar_otherboth
@@ -121,6 +118,6 @@ SYMBOL TABLE:
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+13c8 g .* 0+ ___dtors_end
0+151c g \.data 0+ dbaz_otherboth2
0+1500 g \.data 0+ dbazboth2
diff --git a/ld/testsuite/ld-sh/shared-1.d b/ld/testsuite/ld-sh/shared-1.d
index fbc4d6e0539d..940195ddc140 100644
--- a/ld/testsuite/ld-sh/shared-1.d
+++ b/ld/testsuite/ld-sh/shared-1.d
@@ -13,10 +13,11 @@
Relocation section '\.rela\.text' at offset 0x[0-9a-f]+ contains 1 entries:
.*
-000001b0 000000a5 R_SH_RELATIVE +000001b4
+0000019c +[0-9a-f]+ R_SH_RELATIVE +000001a0
Hex dump of section '\.rela\.text':
- 0x0000019c 000001b4 000000a5 000001b0 .*
+ 0x00000188 9c010000 a5000000 a0010000 .*
Hex dump of section '\.text':
- 0x000001a8 000001b4 00090009 00090009 .*
+.*
+ 0x00000194 09000900 09000900 a0010000 .*
diff --git a/ld/testsuite/ld-sh/tlsbin-1.d b/ld/testsuite/ld-sh/tlsbin-1.d
index e3f48341b705..9f5a086385eb 100644
--- a/ld/testsuite/ld-sh/tlsbin-1.d
+++ b/ld/testsuite/ld-sh/tlsbin-1.d
@@ -14,14 +14,14 @@ Disassembly of section \.text:
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]+
+ 401008: 5e dc mov\.l 401184 <fn2\+0x184>,r12 ! [0-9a-f]+
40100a: 0c 3c add r0,r12
40100c: f3 6e mov r15,r14
40100e: 09 00 nop
401010: 09 00 nop
401012: 09 00 nop
401014: 09 00 nop
- 401016: 04 d0 mov\.l 401028 <fn2\+0x28>,r0 ! 0x1c .*
+ 401016: 04 d0 mov\.l 401028 <fn2\+0x28>,r0 ! 1c .*
401018: 12 04 stc gbr,r4
40101a: ce 00 mov\.l @\(r0,r12\),r0
40101c: 4c 30 add r4,r0
@@ -38,7 +38,7 @@ Disassembly of section \.text:
401032: 09 00 nop
401034: 09 00 nop
401036: 09 00 nop
- 401038: 03 d0 mov\.l 401048 <fn2\+0x48>,r0 ! 0x14 .*
+ 401038: 03 d0 mov\.l 401048 <fn2\+0x48>,r0 ! 14 .*
40103a: 12 04 stc gbr,r4
40103c: ce 00 mov\.l @\(r0,r12\),r0
40103e: 4c 30 add r4,r0
@@ -54,7 +54,7 @@ Disassembly of section \.text:
401052: 09 00 nop
401054: 09 00 nop
401056: 09 00 nop
- 401058: 03 d4 mov\.l 401068 <fn2\+0x68>,r4 ! 0x8 .*
+ 401058: 03 d4 mov\.l 401068 <fn2\+0x68>,r4 ! 8 .*
40105a: 12 00 stc gbr,r0
40105c: 4c 30 add r4,r0
40105e: 09 00 nop
@@ -70,7 +70,7 @@ Disassembly of section \.text:
401072: 09 00 nop
401074: 09 00 nop
401076: 09 00 nop
- 401078: 03 d4 mov\.l 401088 <fn2\+0x88>,r4 ! 0x10 .*
+ 401078: 03 d4 mov\.l 401088 <fn2\+0x88>,r4 ! 10 .*
40107a: 12 00 stc gbr,r0
40107c: 4c 30 add r4,r0
40107e: 09 00 nop
@@ -86,7 +86,7 @@ Disassembly of section \.text:
401092: 09 00 nop
401094: 09 00 nop
401096: 09 00 nop
- 401098: 03 d4 mov\.l 4010a8 <fn2\+0xa8>,r4 ! 0x18 .*
+ 401098: 03 d4 mov\.l 4010a8 <fn2\+0xa8>,r4 ! 18 .*
40109a: 12 00 stc gbr,r0
40109c: 4c 30 add r4,r0
40109e: 09 00 nop
@@ -116,11 +116,11 @@ Disassembly of section \.text:
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 .*
+ 4010d4: 2c d1 mov\.l 401188 <fn2\+0x188>,r1 ! 10 .*
4010d6: 0c 31 add r0,r1
4010d8: 09 00 nop
4010da: 09 00 nop
- 4010dc: 2b d2 mov\.l 40118c <fn2\+0x18c>,r2 ! 0x14 .*
+ 4010dc: 2b d2 mov\.l 40118c <fn2\+0x18c>,r2 ! 14 .*
4010de: 0c 32 add r0,r2
4010e0: 09 00 nop
4010e2: 09 00 nop
@@ -140,17 +140,17 @@ Disassembly of section \.text:
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 .*
+ 401104: 22 d1 mov\.l 401190 <fn2\+0x190>,r1 ! 18 .*
401106: 0c 31 add r0,r1
401108: 09 00 nop
40110a: 09 00 nop
- 40110c: 21 d2 mov\.l 401194 <fn2\+0x194>,r2 ! 0x1c .*
+ 40110c: 21 d2 mov\.l 401194 <fn2\+0x194>,r2 ! 1c .*
40110e: 0c 32 add r0,r2
401110: 09 00 nop
401112: 09 00 nop
401114: 09 00 nop
401116: 09 00 nop
- 401118: 02 d0 mov\.l 401124 <fn2\+0x124>,r0 ! 0x14 .*
+ 401118: 02 d0 mov\.l 401124 <fn2\+0x124>,r0 ! 14 .*
40111a: 12 01 stc gbr,r1
40111c: ce 00 mov\.l @\(r0,r12\),r0
40111e: 03 a0 bra 401128 <fn2\+0x128>
@@ -162,7 +162,7 @@ Disassembly of section \.text:
40112a: 09 00 nop
40112c: 09 00 nop
40112e: 09 00 nop
- 401130: 02 d0 mov\.l 40113c <fn2\+0x13c>,r0 ! 0x18 .*
+ 401130: 02 d0 mov\.l 40113c <fn2\+0x13c>,r0 ! 18 .*
401132: 12 01 stc gbr,r1
401134: ce 00 mov\.l @\(r0,r12\),r0
401136: 03 a0 bra 401140 <fn2\+0x140>
@@ -174,7 +174,7 @@ Disassembly of section \.text:
401142: 09 00 nop
401144: 09 00 nop
401146: 09 00 nop
- 401148: 02 d0 mov\.l 401154 <fn2\+0x154>,r0 ! 0x8 .*
+ 401148: 02 d0 mov\.l 401154 <fn2\+0x154>,r0 ! 8 .*
40114a: 12 01 stc gbr,r1
40114c: 09 00 nop
40114e: 03 a0 bra 401158 <fn2\+0x158>
@@ -186,7 +186,7 @@ Disassembly of section \.text:
40115a: 09 00 nop
40115c: 09 00 nop
40115e: 09 00 nop
- 401160: 02 d0 mov\.l 40116c <fn2\+0x16c>,r0 ! 0x18 .*
+ 401160: 02 d0 mov\.l 40116c <fn2\+0x16c>,r0 ! 18 .*
401162: 12 01 stc gbr,r1
401164: 09 00 nop
401166: 03 a0 bra 401170 <fn2\+0x170>
@@ -220,13 +220,13 @@ Disassembly of section \.text:
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]+
+ 402008: 26 dc mov\.l 4020a4 <_start\+0xa4>,r12 ! [0-9a-f]+
40200a: 0c 3c add r0,r12
40200c: 09 00 nop
40200e: 09 00 nop
402010: 09 00 nop
402012: 09 00 nop
- 402014: 02 d0 mov\.l 402020 <_start\+0x20>,r0 ! 0x10 .*
+ 402014: 02 d0 mov\.l 402020 <_start\+0x20>,r0 ! 10 .*
402016: 12 01 stc gbr,r1
402018: ce 00 mov\.l @\(r0,r12\),r0
40201a: 03 a0 bra 402024 <_start\+0x24>
@@ -238,7 +238,7 @@ Disassembly of section \.text:
402026: 09 00 nop
402028: 09 00 nop
40202a: 09 00 nop
- 40202c: 02 d0 mov\.l 402038 <_start\+0x38>,r0 ! 0x20 .*
+ 40202c: 02 d0 mov\.l 402038 <_start\+0x38>,r0 ! 20 .*
40202e: 12 01 stc gbr,r1
402030: 09 00 nop
402032: 03 a0 bra 40203c <_start\+0x3c>
@@ -250,7 +250,7 @@ Disassembly of section \.text:
40203e: 09 00 nop
402040: 09 00 nop
402042: 09 00 nop
- 402044: 02 d0 mov\.l 402050 <_start\+0x50>,r0 ! 0x2c
+ 402044: 02 d0 mov\.l 402050 <_start\+0x50>,r0 ! 2c
402046: 12 01 stc gbr,r1
402048: 09 00 nop
40204a: 03 a0 bra 402054 <_start\+0x54>
@@ -262,7 +262,7 @@ Disassembly of section \.text:
402056: 09 00 nop
402058: 09 00 nop
40205a: 09 00 nop
- 40205c: 02 d0 mov\.l 402068 <_start\+0x68>,r0 ! 0x1c .*
+ 40205c: 02 d0 mov\.l 402068 <_start\+0x68>,r0 ! 1c .*
40205e: 12 01 stc gbr,r1
402060: 09 00 nop
402062: 03 a0 bra 40206c <_start\+0x6c>
@@ -275,21 +275,21 @@ Disassembly of section \.text:
402070: 09 00 nop
402072: 09 00 nop
402074: 12 01 stc gbr,r1
- 402076: 0c d0 mov\.l 4020a8 <_start\+0xa8>,r0 ! 0x8 .*
+ 402076: 0c d0 mov\.l 4020a8 <_start\+0xa8>,r0 ! 8 .*
402078: 1c 30 add r1,r0
40207a: 09 00 nop
40207c: 09 00 nop
40207e: 09 00 nop
402080: 09 00 nop
402082: 12 01 stc gbr,r1
- 402084: 09 d0 mov\.l 4020ac <_start\+0xac>,r0 ! 0x28
+ 402084: 09 d0 mov\.l 4020ac <_start\+0xac>,r0 ! 28
402086: 1c 30 add r1,r0
402088: 09 00 nop
40208a: 09 00 nop
40208c: 09 00 nop
40208e: 09 00 nop
402090: 12 01 stc gbr,r1
- 402092: 07 d0 mov\.l 4020b0 <_start\+0xb0>,r0 ! 0x18 .*
+ 402092: 07 d0 mov\.l 4020b0 <_start\+0xb0>,r0 ! 18 .*
402094: 1c 30 add r1,r0
402096: 09 00 nop
402098: 09 00 nop
diff --git a/ld/testsuite/ld-sh/tlspic-1.d b/ld/testsuite/ld-sh/tlspic-1.d
index 5310cd0fe30b..6638eda59556 100644
--- a/ld/testsuite/ld-sh/tlspic-1.d
+++ b/ld/testsuite/ld-sh/tlspic-1.d
@@ -14,16 +14,16 @@ Disassembly of section \.text:
[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]+: 82 dc mov\.l [0-9a-f]+ <fn1\+0x214>,r12 ! [0-9a-f]+
[0-9a-f]+: 0c 3c add r0,r12
[0-9a-f]+: f3 6e mov r15,r14
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 09 00 nop
- [0-9a-f]+: 04 d4 mov\.l [0-9a-f]+ <fn1\+0x28>,r4 ! 0x30
+ [0-9a-f]+: 04 d4 mov\.l [0-9a-f]+ <fn1\+0x28>,r4 ! 30
[0-9a-f]+: 04 c7 mova [0-9a-f]+ <fn1\+0x2c>,r0
- [0-9a-f]+: 04 d1 mov\.l [0-9a-f]+ <fn1\+0x2c>,r1 ! 0x[0-9a-f]+
+ [0-9a-f]+: 04 d1 mov\.l [0-9a-f]+ <fn1\+0x2c>,r1 ! [0-9a-f]+
[0-9a-f]+: 0c 31 add r0,r1
[0-9a-f]+: 0b 41 jsr @r1
[0-9a-f]+: cc 34 add r12,r4
@@ -38,7 +38,7 @@ Disassembly of section \.text:
[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]+: 03 d0 mov\.l [0-9a-f]+ <fn1\+0x48>,r0 ! 38
[0-9a-f]+: 12 04 stc gbr,r4
[0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
[0-9a-f]+: 4c 30 add r4,r0
@@ -54,9 +54,9 @@ Disassembly of section \.text:
[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]+: 03 d4 mov\.l [0-9a-f]+ <fn1\+0x68>,r4 ! 10 .*
[0-9a-f]+: 04 c7 mova [0-9a-f]+ <fn1\+0x6c>,r0
- [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0x6c>,r1 ! 0x[0-9a-f]+
+ [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0x6c>,r1 ! [0-9a-f]+
[0-9a-f]+: 0c 31 add r0,r1
[0-9a-f]+: 0b 41 jsr @r1
[0-9a-f]+: cc 34 add r12,r4
@@ -70,7 +70,7 @@ Disassembly of section \.text:
[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]+: 03 d0 mov\.l [0-9a-f]+ <fn1\+0x88>,r0 ! 18 .*
[0-9a-f]+: 12 04 stc gbr,r4
[0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
[0-9a-f]+: 4c 30 add r4,r0
@@ -86,9 +86,9 @@ Disassembly of section \.text:
[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]+: 03 d4 mov\.l [0-9a-f]+ <fn1\+0xa8>,r4 ! 3c
[0-9a-f]+: 04 c7 mova [0-9a-f]+ <fn1\+0xac>,r0
- [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0xac>,r1 ! 0x[0-9a-f]+
+ [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0xac>,r1 ! [0-9a-f]+
[0-9a-f]+: 0c 31 add r0,r1
[0-9a-f]+: 0b 41 jsr @r1
[0-9a-f]+: cc 34 add r12,r4
@@ -102,7 +102,7 @@ Disassembly of section \.text:
[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]+: 03 d0 mov\.l [0-9a-f]+ <fn1\+0xc8>,r0 ! 44
[0-9a-f]+: 12 04 stc gbr,r4
[0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
[0-9a-f]+: 4c 30 add r4,r0
@@ -118,9 +118,9 @@ Disassembly of section \.text:
[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]+: 03 d4 mov\.l [0-9a-f]+ <fn1\+0xe8>,r4 ! 24
[0-9a-f]+: 04 c7 mova [0-9a-f]+ <fn1\+0xec>,r0
- [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0xec>,r1 ! 0x[0-9a-f]+
+ [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0xec>,r1 ! [0-9a-f]+
[0-9a-f]+: 0c 31 add r0,r1
[0-9a-f]+: 0b 41 jsr @r1
[0-9a-f]+: cc 34 add r12,r4
@@ -134,7 +134,7 @@ Disassembly of section \.text:
[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]+: 03 d0 mov\.l [0-9a-f]+ <fn1\+0x108>,r0 ! 2c
[0-9a-f]+: 12 04 stc gbr,r4
[0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
[0-9a-f]+: 4c 30 add r4,r0
@@ -150,9 +150,9 @@ Disassembly of section \.text:
[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]+: 03 d4 mov\.l [0-9a-f]+ <fn1\+0x128>,r4 ! 1c .*
[0-9a-f]+: 04 c7 mova [0-9a-f]+ <fn1\+0x12c>,r0
- [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0x12c>,r1 ! 0x[0-9a-f]+
+ [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0x12c>,r1 ! [0-9a-f]+
[0-9a-f]+: 0c 31 add r0,r1
[0-9a-f]+: 0b 41 jsr @r1
[0-9a-f]+: cc 34 add r12,r4
@@ -164,11 +164,11 @@ Disassembly of section \.text:
[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]+: 38 d1 mov\.l [0-9a-f]+ <fn1\+0x218>,r1 ! 8 .*
[0-9a-f]+: 0c 31 add r0,r1
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 09 00 nop
- [0-9a-f]+: 37 d2 mov\.l [0-9a-f]+ <fn1\+0x21c>,r2 ! 0xc .*
+ [0-9a-f]+: 37 d2 mov\.l [0-9a-f]+ <fn1\+0x21c>,r2 ! c .*
[0-9a-f]+: 0c 32 add r0,r2
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 09 00 nop
@@ -188,19 +188,19 @@ Disassembly of section \.text:
[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]+: 2e d1 mov\.l [0-9a-f]+ <fn1\+0x220>,r1 ! 10 .*
[0-9a-f]+: 0c 31 add r0,r1
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 09 00 nop
- [0-9a-f]+: 2d d2 mov\.l [0-9a-f]+ <fn1\+0x224>,r2 ! 0x14 .*
+ [0-9a-f]+: 2d d2 mov\.l [0-9a-f]+ <fn1\+0x224>,r2 ! 14 .*
[0-9a-f]+: 0c 32 add r0,r2
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 09 00 nop
- [0-9a-f]+: 03 d4 mov\.l [0-9a-f]+ <fn1\+0x188>,r4 ! 0x1c .*
+ [0-9a-f]+: 03 d4 mov\.l [0-9a-f]+ <fn1\+0x188>,r4 ! 1c .*
[0-9a-f]+: 04 c7 mova [0-9a-f]+ <fn1\+0x18c>,r0
- [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0x18c>,r1 ! 0x[0-9a-f]+
+ [0-9a-f]+: 03 d1 mov\.l [0-9a-f]+ <fn1\+0x18c>,r1 ! [0-9a-f]+
[0-9a-f]+: 0c 31 add r0,r1
[0-9a-f]+: 0b 41 jsr @r1
[0-9a-f]+: cc 34 add r12,r4
@@ -212,17 +212,17 @@ Disassembly of section \.text:
[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]+: 24 d1 mov\.l [0-9a-f]+ <fn1\+0x228>,r1 ! 18 .*
[0-9a-f]+: 0c 31 add r0,r1
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 09 00 nop
- [0-9a-f]+: 23 d2 mov\.l [0-9a-f]+ <fn1\+0x22c>,r2 ! 0x1c .*
+ [0-9a-f]+: 23 d2 mov\.l [0-9a-f]+ <fn1\+0x22c>,r2 ! 1c .*
[0-9a-f]+: 0c 32 add r0,r2
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 09 00 nop
- [0-9a-f]+: 02 d0 mov\.l [0-9a-f]+ <fn1\+0x1b4>,r0 ! 0x38
+ [0-9a-f]+: 02 d0 mov\.l [0-9a-f]+ <fn1\+0x1b4>,r0 ! 38
[0-9a-f]+: 12 01 stc gbr,r1
[0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
[0-9a-f]+: 03 a0 bra [0-9a-f]+ <fn1\+0x1b8>
@@ -234,7 +234,7 @@ Disassembly of section \.text:
[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]+: 02 d0 mov\.l [0-9a-f]+ <fn1\+0x1cc>,r0 ! 18 .*
[0-9a-f]+: 12 01 stc gbr,r1
[0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
[0-9a-f]+: 03 a0 bra [0-9a-f]+ <fn1\+0x1d0>
@@ -246,7 +246,7 @@ Disassembly of section \.text:
[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]+: 02 d0 mov\.l [0-9a-f]+ <fn1\+0x1e4>,r0 ! 44
[0-9a-f]+: 12 01 stc gbr,r1
[0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
[0-9a-f]+: 03 a0 bra [0-9a-f]+ <fn1\+0x1e8>
@@ -258,7 +258,7 @@ Disassembly of section \.text:
[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]+: 02 d0 mov\.l [0-9a-f]+ <fn1\+0x1fc>,r0 ! 2c
[0-9a-f]+: 12 01 stc gbr,r1
[0-9a-f]+: ce 00 mov\.l @\(r0,r12\),r0
[0-9a-f]+: 03 a0 bra [0-9a-f]+ <fn1\+0x200>
diff --git a/ld/testsuite/ld-sh/tlspic-2.d b/ld/testsuite/ld-sh/tlspic-2.d
index 70d65dac41ef..942fb2de808d 100644
--- a/ld/testsuite/ld-sh/tlspic-2.d
+++ b/ld/testsuite/ld-sh/tlspic-2.d
@@ -68,9 +68,6 @@ Relocation section '\.rela\.plt' at offset 0x[0-9a-f]+ contains 1 entries:
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
#...
diff --git a/ld/testsuite/ld-sh/tlstpoff-1.d b/ld/testsuite/ld-sh/tlstpoff-1.d
index 25de25be92dc..a678596b8e20 100644
--- a/ld/testsuite/ld-sh/tlstpoff-1.d
+++ b/ld/testsuite/ld-sh/tlstpoff-1.d
@@ -12,9 +12,9 @@ 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]+: 06 dc mov.l [0-9a-f]+ <foo\+0x20>,r12 ! [0-9a-f]+
[0-9a-f]+: 0c 3c add r0,r12
- [0-9a-f]+: 02 d0 mov.l [0-9a-f]+ <foo\+0x14>,r0 ! 0xc
+ [0-9a-f]+: 02 d0 mov.l [0-9a-f]+ <foo\+0x14>,r0 ! c
[0-9a-f]+: 12 01 stc gbr,r1
[0-9a-f]+: 09 00 nop
[0-9a-f]+: 03 a0 bra [0-9a-f]+ <foo\+0x18>
diff --git a/ld/testsuite/ld-sh/vxworks1-le.dd b/ld/testsuite/ld-sh/vxworks1-le.dd
new file mode 100644
index 000000000000..03c817c190f7
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks1-le.dd
@@ -0,0 +1,73 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: 01 d1 mov\.l 80808 <_PROCEDURE_LINKAGE_TABLE_\+0x8>,r1 ! 81408
+ 80802: 12 61 mov\.l @r1,r1
+ 80804: 2b 41 jmp @r1
+ 80806: 09 00 nop
+ 80808: 08 14 .*
+ 80808: R_SH_DIR32 _GLOBAL_OFFSET_TABLE_\+0x8
+ 8080a: 08 00 .*
+
+0008080c <_sglobal@plt>:
+ 8080c: 01 d0 mov\.l 80814 <_sglobal@plt\+0x8>,r0 ! 8140c
+ 8080e: 02 60 mov\.l @r0,r0
+ 80810: 2b 40 jmp @r0
+ 80812: 09 00 nop
+ 80814: 0c 14 .*
+ 80814: R_SH_DIR32 _GLOBAL_OFFSET_TABLE_\+0xc
+ 80816: 08 00 .*
+ 80818: 01 d0 mov\.l 80820 <_sglobal@plt\+0x14>,r0 ! 0
+ 8081a: f1 af bra 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 8081c: 09 00 nop
+ 8081e: 09 00 nop
+ 80820: 00 00 .*
+ \.\.\.
+
+00080824 <_foo@plt>:
+ 80824: 01 d0 mov\.l 8082c <_foo@plt\+0x8>,r0 ! 81410
+ 80826: 02 60 mov\.l @r0,r0
+ 80828: 2b 40 jmp @r0
+ 8082a: 09 00 nop
+ 8082c: 10 14 .*
+ 8082c: R_SH_DIR32 _GLOBAL_OFFSET_TABLE_\+0x10
+ 8082e: 08 00 .*
+ 80830: 01 d0 mov\.l 80838 <_foo@plt\+0x14>,r0 ! c
+ 80832: e5 af bra 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80834: 09 00 nop
+ 80836: 09 00 nop
+ 80838: 0c 00 .*
+ \.\.\.
+Disassembly of section \.text:
+
+00080c00 <__start>:
+ 80c00: 22 4f sts\.l pr,@-r15
+ 80c02: 06 d0 mov\.l 80c1c <__start\+0x1c>,r0 ! 80824 <_foo@plt>
+ 80c04: 0b 40 jsr @r0
+ 80c06: 09 00 nop
+ 80c08: 05 d0 mov\.l 80c20 <__start\+0x20>,r0 ! 8080c <_sglobal@plt>
+ 80c0a: 0b 40 jsr @r0
+ 80c0c: 09 00 nop
+ 80c0e: 05 d0 mov\.l 80c24 <__start\+0x24>,r0 ! 80c28 <_sexternal>
+ 80c10: 0b 40 jsr @r0
+ 80c12: 09 00 nop
+ 80c14: 26 4f lds\.l @r15\+,pr
+ 80c16: 0b 00 rts
+ 80c18: 09 00 nop
+ 80c1a: 09 00 nop
+ 80c1c: 24 08 .*
+ 80c1c: R_SH_DIR32 \.plt\+0x24
+ 80c1e: 08 00 .*
+ 80c20: 0c 08 .*
+ 80c20: R_SH_DIR32 \.plt\+0xc
+ 80c22: 08 00 .*
+ 80c24: 28 0c .*
+ 80c24: R_SH_DIR32 _sexternal
+ 80c26: 08 00 .*
+
+00080c28 <_sexternal>:
+ 80c28: 0b 00 rts
+ 80c2a: 09 00 nop
diff --git a/ld/testsuite/ld-sh/vxworks1-lib-le.dd b/ld/testsuite/ld-sh/vxworks1-lib-le.dd
new file mode 100644
index 000000000000..6511c164cf90
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks1-lib-le.dd
@@ -0,0 +1,76 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: 01 d0 mov\.l 80808 <_PROCEDURE_LINKAGE_TABLE_\+0x8>,r0 ! c
+ 80802: ce 00 mov\.l @\(r0,r12\),r0
+ 80804: 2b 40 jmp @r0
+ 80806: 09 00 nop
+ 80808: 0c 00 .*
+ 8080a: 00 00 .*
+ 8080c: 01 d0 mov\.l 80814 <_PROCEDURE_LINKAGE_TABLE_\+0x14>,r0 ! 0
+ 8080e: c2 51 mov\.l @\(8,r12\),r1
+ 80810: 2b 41 jmp @r1
+ 80812: 09 00 nop
+ 80814: 00 00 .*
+ \.\.\.
+
+00080818 <_sexternal@plt>:
+ 80818: 01 d0 mov\.l 80820 <_sexternal@plt\+0x8>,r0 ! 10
+ 8081a: ce 00 mov\.l @\(r0,r12\),r0
+ 8081c: 2b 40 jmp @r0
+ 8081e: 09 00 nop
+ 80820: 10 00 .*
+ 80822: 00 00 .*
+ 80824: 01 d0 mov\.l 8082c <_sexternal@plt\+0x14>,r0 ! c
+ 80826: c2 51 mov\.l @\(8,r12\),r1
+ 80828: 2b 41 jmp @r1
+ 8082a: 09 00 nop
+ 8082c: 0c 00 .*
+ \.\.\.
+Disassembly of section \.text:
+
+00080c00 <_foo>:
+ 80c00: c6 2f mov\.l r12,@-r15
+ 80c02: 22 4f sts\.l pr,@-r15
+ 80c04: 0a dc mov\.l 80c30 <_foo\+0x30>,r12 ! 0
+ 80c06: c2 6c mov\.l @r12,r12
+ 80c08: 0a d0 mov\.l 80c34 <_foo\+0x34>,r0 ! 0
+ 80c0a: ce 0c mov\.l @\(r0,r12\),r12
+ 80c0c: 0a d0 mov\.l 80c38 <_foo\+0x38>,r0 ! 14
+ 80c0e: ce 01 mov\.l @\(r0,r12\),r1
+ 80c10: 12 62 mov\.l @r1,r2
+ 80c12: 01 72 add #1,r2
+ 80c14: 22 21 mov\.l r2,@r1
+ 80c16: 09 d0 mov\.l 80c3c <_foo\+0x3c>,r0 ! 2c
+ 80c18: 03 00 bsrf r0
+ 80c1a: 09 00 nop
+ 80c1c: 08 d0 mov\.l 80c40 <_foo\+0x40>,r0 ! fffffbde
+ 80c1e: 03 00 bsrf r0
+ 80c20: 09 00 nop
+ 80c22: 08 d0 mov\.l 80c44 <_foo\+0x44>,r0 ! fffffbf0
+ 80c24: 03 00 bsrf r0
+ 80c26: 09 00 nop
+ 80c28: 26 4f lds\.l @r15\+,pr
+ 80c2a: 0b 00 rts
+ 80c2c: f6 6c mov\.l @r15\+,r12
+ 80c2e: 09 00 nop
+ ...
+ 80c38: 14 00 .*
+ 80c3a: 00 00 .*
+ 80c3c: 2c 00 .*
+ 80c3e: 00 00 .*
+ 80c40: de fb .*
+ 80c42: ff ff .*
+ 80c44: f0 fb .*
+ 80c46: ff ff .*
+
+00080c48 <_slocal>:
+ 80c48: 0b 00 rts
+ 80c4a: 09 00 nop
+
+00080c4c <_sglobal>:
+ 80c4c: 0b 00 rts
+ 80c4e: 09 00 nop
diff --git a/ld/testsuite/ld-sh/vxworks1-lib.dd b/ld/testsuite/ld-sh/vxworks1-lib.dd
new file mode 100644
index 000000000000..e20f33477173
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks1-lib.dd
@@ -0,0 +1,76 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: d0 01 mov\.l 80808 <_PROCEDURE_LINKAGE_TABLE_\+0x8>,r0 ! c
+ 80802: 00 ce mov\.l @\(r0,r12\),r0
+ 80804: 40 2b jmp @r0
+ 80806: 00 09 nop
+ 80808: 00 00 .*
+ 8080a: 00 0c .*
+ 8080c: d0 01 mov\.l 80814 <_PROCEDURE_LINKAGE_TABLE_\+0x14>,r0 ! 0
+ 8080e: 51 c2 mov\.l @\(8,r12\),r1
+ 80810: 41 2b jmp @r1
+ 80812: 00 09 nop
+ 80814: 00 00 .*
+ \.\.\.
+
+00080818 <_sexternal@plt>:
+ 80818: d0 01 mov\.l 80820 <_sexternal@plt\+0x8>,r0 ! 10
+ 8081a: 00 ce mov\.l @\(r0,r12\),r0
+ 8081c: 40 2b jmp @r0
+ 8081e: 00 09 nop
+ 80820: 00 00 .*
+ 80822: 00 10 .*
+ 80824: d0 01 mov\.l 8082c <_sexternal@plt\+0x14>,r0 ! c
+ 80826: 51 c2 mov\.l @\(8,r12\),r1
+ 80828: 41 2b jmp @r1
+ 8082a: 00 09 nop
+ 8082c: 00 00 .*
+ 8082e: 00 0c .*
+Disassembly of section \.text:
+
+00080c00 <_foo>:
+ 80c00: 2f c6 mov\.l r12,@-r15
+ 80c02: 4f 22 sts\.l pr,@-r15
+ 80c04: dc 0a mov\.l 80c30 <_foo\+0x30>,r12 ! 0
+ 80c06: 6c c2 mov\.l @r12,r12
+ 80c08: d0 0a mov\.l 80c34 <_foo\+0x34>,r0 ! 0
+ 80c0a: 0c ce mov\.l @\(r0,r12\),r12
+ 80c0c: d0 0a mov\.l 80c38 <_foo\+0x38>,r0 ! 14
+ 80c0e: 01 ce mov\.l @\(r0,r12\),r1
+ 80c10: 62 12 mov\.l @r1,r2
+ 80c12: 72 01 add #1,r2
+ 80c14: 21 22 mov\.l r2,@r1
+ 80c16: d0 09 mov\.l 80c3c <_foo\+0x3c>,r0 ! 2c
+ 80c18: 00 03 bsrf r0
+ 80c1a: 00 09 nop
+ 80c1c: d0 08 mov\.l 80c40 <_foo\+0x40>,r0 ! fffffbde
+ 80c1e: 00 03 bsrf r0
+ 80c20: 00 09 nop
+ 80c22: d0 08 mov\.l 80c44 <_foo\+0x44>,r0 ! fffffbf0
+ 80c24: 00 03 bsrf r0
+ 80c26: 00 09 nop
+ 80c28: 4f 26 lds\.l @r15\+,pr
+ 80c2a: 00 0b rts
+ 80c2c: 6c f6 mov\.l @r15\+,r12
+ 80c2e: 00 09 nop
+ ...
+ 80c38: 00 00 .*
+ 80c3a: 00 14 .*
+ 80c3c: 00 00 .*
+ 80c3e: 00 2c .*
+ 80c40: ff ff .*
+ 80c42: fb de .*
+ 80c44: ff ff .*
+ 80c46: fb f0 .*
+
+00080c48 <_slocal>:
+ 80c48: 00 0b rts
+ 80c4a: 00 09 nop
+
+00080c4c <_sglobal>:
+ 80c4c: 00 0b rts
+ 80c4e: 00 09 nop
diff --git a/ld/testsuite/ld-sh/vxworks1-lib.nd b/ld/testsuite/ld-sh/vxworks1-lib.nd
new file mode 100644
index 000000000000..edf3db399405
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks1-lib.nd
@@ -0,0 +1,9 @@
+#...
+Symbol table '\.dynsym' .*:
+#...
+.*: 00081400 * 0 * OBJECT * GLOBAL * DEFAULT * [0-9]+ _GLOBAL_OFFSET_TABLE_
+#...
+Symbol table '\.symtab' .*:
+#...
+.*: 00081400 * 0 * OBJECT * GLOBAL * DEFAULT * [0-9]+ _GLOBAL_OFFSET_TABLE_
+#pass
diff --git a/ld/testsuite/ld-sh/vxworks1-lib.rd b/ld/testsuite/ld-sh/vxworks1-lib.rd
new file mode 100644
index 000000000000..d9c56a0112f9
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks1-lib.rd
@@ -0,0 +1,12 @@
+
+Relocation section '\.rela\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+0008140c .*a4 R_SH_JMP_SLOT 00080c4c _sglobal \+ 0
+00081410 .*a4 R_SH_JMP_SLOT 00000000 _sexternal \+ 0
+
+Relocation section '\.rela\.dyn' at offset .* contains 4 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00081800 000000a5 R_SH_RELATIVE * 00080c48
+00080c30 .*01 R_SH_DIR32 00000000 ___GOTT_BASE__ \+ 0
+00080c34 .*01 R_SH_DIR32 00000000 ___GOTT_INDEX__ \+ 0
+00081414 .*a3 R_SH_GLOB_DAT 00081c00 x \+ 0
diff --git a/ld/testsuite/ld-sh/vxworks1-lib.s b/ld/testsuite/ld-sh/vxworks1-lib.s
new file mode 100644
index 000000000000..ff215645d6bc
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks1-lib.s
@@ -0,0 +1,61 @@
+ .text
+ .globl _foo
+ .type _foo, %function
+_foo:
+ mov.l r12,@-r15
+ sts.l pr,@-r15
+ mov.l 1f,r12
+ mov.l @r12,r12
+ mov.l 2f,r0
+ mov.l @(r0,r12),r12
+
+ mov.l 3f,r0
+ mov.l @(r0,r12),r1
+ mov.l @r1,r2
+ add #1,r2
+ mov.l r2,@r1
+
+ mov.l 4f,r0
+ bsrf r0
+ nop
+.Lb4:
+
+ mov.l 5f,r0
+ bsrf r0
+ nop
+.Lb5:
+
+ mov.l 6f,r0
+ bsrf r0
+ nop
+.Lb6:
+
+ lds.l @r15+,pr
+ rts
+ mov.l @r15+,r12
+ .align 2
+1: .long ___GOTT_BASE__
+2: .long ___GOTT_INDEX__
+3: .long x@GOT
+4: .long _slocal - .Lb4
+5: .long _sglobal@PLT - (.Lb5 - .)
+6: .long _sexternal@PLT - (.Lb6 - .)
+ .size _foo, .-_foo
+
+ .type _slocal, %function
+_slocal:
+ rts
+ nop
+ .size _slocal, .-_slocal
+
+ .globl _sglobal
+ .type _sglobal, %function
+_sglobal:
+ rts
+ nop
+ .size _sglobal, .-_sglobal
+
+ .data
+ .4byte _slocal
+
+ .comm x,4,4
diff --git a/ld/testsuite/ld-sh/vxworks1-lib.td b/ld/testsuite/ld-sh/vxworks1-lib.td
new file mode 100644
index 000000000000..9f223e38da16
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks1-lib.td
@@ -0,0 +1,3 @@
+#...
+ 0x0+16 \(TEXTREL\) +0x0
+#pass
diff --git a/ld/testsuite/ld-sh/vxworks1-static.d b/ld/testsuite/ld-sh/vxworks1-static.d
new file mode 100644
index 000000000000..dffc45b2ea15
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks1-static.d
@@ -0,0 +1,4 @@
+#name: VxWorks executable test 1 (static)
+#source: vxworks1.s
+#ld: tmpdir/libvxworks1.so -Tvxworks1.ld -EL
+#error: Dynamic sections created in non-dynamic link
diff --git a/ld/testsuite/ld-sh/vxworks1.dd b/ld/testsuite/ld-sh/vxworks1.dd
new file mode 100644
index 000000000000..4bb3b47bd634
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks1.dd
@@ -0,0 +1,73 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080800 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80800: d1 01 mov\.l 80808 <_PROCEDURE_LINKAGE_TABLE_\+0x8>,r1 ! 81408
+ 80802: 61 12 mov\.l @r1,r1
+ 80804: 41 2b jmp @r1
+ 80806: 00 09 nop
+ 80808: 00 08 .*
+ 80808: R_SH_DIR32 _GLOBAL_OFFSET_TABLE_\+0x8
+ 8080a: 14 08 .*
+
+0008080c <_sglobal@plt>:
+ 8080c: d0 01 mov\.l 80814 <_sglobal@plt\+0x8>,r0 ! 8140c
+ 8080e: 60 02 mov\.l @r0,r0
+ 80810: 40 2b jmp @r0
+ 80812: 00 09 nop
+ 80814: 00 08 .*
+ 80814: R_SH_DIR32 _GLOBAL_OFFSET_TABLE_\+0xc
+ 80816: 14 0c .*
+ 80818: d0 01 mov\.l 80820 <_sglobal@plt\+0x14>,r0 ! 0
+ 8081a: af f1 bra 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 8081c: 00 09 nop
+ 8081e: 00 09 nop
+ 80820: 00 00 .*
+ \.\.\.
+
+00080824 <_foo@plt>:
+ 80824: d0 01 mov\.l 8082c <_foo@plt\+0x8>,r0 ! 81410
+ 80826: 60 02 mov\.l @r0,r0
+ 80828: 40 2b jmp @r0
+ 8082a: 00 09 nop
+ 8082c: 00 08 .*
+ 8082c: R_SH_DIR32 _GLOBAL_OFFSET_TABLE_\+0x10
+ 8082e: 14 10 .*
+ 80830: d0 01 mov\.l 80838 <_foo@plt\+0x14>,r0 ! c
+ 80832: af e5 bra 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80834: 00 09 nop
+ 80836: 00 09 nop
+ 80838: 00 00 .*
+ 8083a: 00 0c .*
+Disassembly of section \.text:
+
+00080c00 <__start>:
+ 80c00: 4f 22 sts\.l pr,@-r15
+ 80c02: d0 06 mov\.l 80c1c <__start\+0x1c>,r0 ! 80824 <_foo@plt>
+ 80c04: 40 0b jsr @r0
+ 80c06: 00 09 nop
+ 80c08: d0 05 mov\.l 80c20 <__start\+0x20>,r0 ! 8080c <_sglobal@plt>
+ 80c0a: 40 0b jsr @r0
+ 80c0c: 00 09 nop
+ 80c0e: d0 05 mov\.l 80c24 <__start\+0x24>,r0 ! 80c28 <_sexternal>
+ 80c10: 40 0b jsr @r0
+ 80c12: 00 09 nop
+ 80c14: 4f 26 lds\.l @r15\+,pr
+ 80c16: 00 0b rts
+ 80c18: 00 09 nop
+ 80c1a: 00 09 nop
+ 80c1c: 00 08 .*
+ 80c1c: R_SH_DIR32 \.plt\+0x24
+ 80c1e: 08 24 .*
+ 80c20: 00 08 .*
+ 80c20: R_SH_DIR32 \.plt\+0xc
+ 80c22: 08 0c .*
+ 80c24: 00 08 .*
+ 80c24: R_SH_DIR32 _sexternal
+ 80c26: 0c 28 .*
+
+00080c28 <_sexternal>:
+ 80c28: 00 0b rts
+ 80c2a: 00 09 nop
diff --git a/ld/testsuite/ld-sh/vxworks1.ld b/ld/testsuite/ld-sh/vxworks1.ld
new file mode 100644
index 000000000000..65bf65d4e2ed
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks1.ld
@@ -0,0 +1,30 @@
+SECTIONS
+{
+ . = 0x80000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x400);
+ .rela.dyn : { *(.rela.dyn) }
+ .rela.plt : { *(.rela.plt) }
+
+ . = ALIGN (0x400);
+ .plt : { *(.plt) }
+
+ . = ALIGN (0x400);
+ .text : { *(.text) }
+
+ . = ALIGN (0x1000);
+ .dynamic : { *(.dynamic) }
+
+ . = ALIGN (0x400);
+ .got : { *(.got.plt) *(.got) }
+
+ . = ALIGN (0x400);
+ .data : { *(.data) }
+
+ . = ALIGN (0x400);
+ .bss : { *(.bss) *(.dynbss) }
+}
diff --git a/ld/testsuite/ld-sh/vxworks1.rd b/ld/testsuite/ld-sh/vxworks1.rd
new file mode 100644
index 000000000000..ee50c74f689a
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks1.rd
@@ -0,0 +1,19 @@
+
+Relocation section '\.rela\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+0008140c .*a4 R_SH_JMP_SLOT 0008080c _sglobal \+ 0
+00081410 .*a4 R_SH_JMP_SLOT 00080824 _foo \+ 0
+
+Relocation section '\.rela\.text' at offset .* contains 3 entries:
+ Offset Info Type Sym.Value Sym. Name \+ Addend
+00080c1c .*01 R_SH_DIR32 00080800 \.plt \+ 24
+00080c20 .*01 R_SH_DIR32 00080800 \.plt \+ c
+00080c24 .*01 R_SH_DIR32 00080c28 _sexternal \+ 0
+
+Relocation section '\.rela\.plt\.unloaded' at offset .* contains 5 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00080808 .*01 R_SH_DIR32 00081400 _GLOBAL_OFFSET_TABLE_ \+ 8
+00080814 .*01 R_SH_DIR32 00081400 _GLOBAL_OFFSET_TABLE_ \+ c
+0008140c .*01 R_SH_DIR32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 0
+0008082c .*01 R_SH_DIR32 00081400 _GLOBAL_OFFSET_TABLE_ \+ 10
+00081410 .*01 R_SH_DIR32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 0
diff --git a/ld/testsuite/ld-sh/vxworks1.s b/ld/testsuite/ld-sh/vxworks1.s
new file mode 100644
index 000000000000..3ae237348d6d
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks1.s
@@ -0,0 +1,32 @@
+ .text
+ .globl __start
+ .type __start, %function
+__start:
+ sts.l pr,@-r15
+ mov.l 1f,r0
+ jsr @r0
+ nop
+
+ mov.l 2f,r0
+ jsr @r0
+ nop
+
+ mov.l 3f,r0
+ jsr @r0
+ nop
+
+ lds.l @r15+,pr
+ rts
+ nop
+ .align 2
+1: .long _foo
+2: .long _sglobal
+3: .long _sexternal
+ .size __start, .-__start
+
+ .globl _sexternal
+ .type _sexternal, %function
+_sexternal:
+ rts
+ nop
+ .size _sexternal, .-_sexternal
diff --git a/ld/testsuite/ld-sh/vxworks2-static.sd b/ld/testsuite/ld-sh/vxworks2-static.sd
new file mode 100644
index 000000000000..912755bc472d
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks2-static.sd
@@ -0,0 +1,9 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80000
+#...
+Program Headers:
+ Type .*
+ LOAD .* 0x00080000 0x00080000 .* R E 0x1000
+
+#...
diff --git a/ld/testsuite/ld-sh/vxworks2.s b/ld/testsuite/ld-sh/vxworks2.s
new file mode 100644
index 000000000000..f680a58a3add
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks2.s
@@ -0,0 +1,6 @@
+ .globl __start
+ .type __start, %function
+__start:
+ rts
+ nop
+ .end __start
diff --git a/ld/testsuite/ld-sh/vxworks2.sd b/ld/testsuite/ld-sh/vxworks2.sd
new file mode 100644
index 000000000000..5ff87d3bef81
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks2.sd
@@ -0,0 +1,13 @@
+#...
+Elf file type is EXEC \(Executable file\)
+Entry point 0x80400
+#...
+Program Headers:
+ Type .*
+ PHDR .*
+#...
+ LOAD .* 0x00080000 0x00080000 .* R E 0x1000
+ LOAD .* 0x00081000 0x00081000 .* RW 0x1000
+ DYNAMIC .*
+
+#...
diff --git a/ld/testsuite/ld-sh/vxworks3-le.dd b/ld/testsuite/ld-sh/vxworks3-le.dd
new file mode 100644
index 000000000000..6a0fc2dc1db7
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks3-le.dd
@@ -0,0 +1,34 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+#...
+.*: 01 d0 mov\.l .*,r0 ! 0
+.*: f1 af bra .* <_PROCEDURE_LINKAGE_TABLE_>
+.*: 09 00 nop
+#...
+.*: 01 d0 mov\.l .*,r0 ! 7ec
+.*: 05 a8 bra .* <_PROCEDURE_LINKAGE_TABLE_>
+.*: 09 00 nop
+#...
+.*: 01 d0 mov\.l .*,r0 ! 7f8
+.*: f2 af bra .*
+.*: 09 00 nop
+#...
+.*: 01 d0 mov\.l .*,r0 ! fe4
+.*: 06 a8 bra .*
+.*: 09 00 nop
+#...
+.*: 01 d0 mov\.l .*,r0 ! ff0
+.*: f2 af bra .*
+.*: 09 00 nop
+#...
+.*: 01 d0 mov\.l .*,r0 ! 17dc
+.*: 06 a8 bra .*
+.*: 09 00 nop
+#...
+.*: 01 d0 mov\.l .*,r0 ! 17e8
+.*: f2 af bra .*
+.*: 09 00 nop
+#pass
diff --git a/ld/testsuite/ld-sh/vxworks3-lib-le.dd b/ld/testsuite/ld-sh/vxworks3-lib-le.dd
new file mode 100644
index 000000000000..011d20cd80c5
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks3-lib-le.dd
@@ -0,0 +1,12 @@
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+.* <foo0>:
+.*: 0b 00 rts
+.*: 09 00 nop
+#...
+.* <foo510>:
+.*: 0b 00 rts
+.*: 09 00 nop
diff --git a/ld/testsuite/ld-sh/vxworks3-lib.dd b/ld/testsuite/ld-sh/vxworks3-lib.dd
new file mode 100644
index 000000000000..555be000be74
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks3-lib.dd
@@ -0,0 +1,12 @@
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+.* <foo0>:
+.*: 00 0b rts
+.*: 00 09 nop
+#...
+.* <foo510>:
+.*: 00 0b rts
+.*: 00 09 nop
diff --git a/ld/testsuite/ld-sh/vxworks3-lib.s b/ld/testsuite/ld-sh/vxworks3-lib.s
new file mode 100644
index 000000000000..6e1033165349
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks3-lib.s
@@ -0,0 +1,12 @@
+ .macro entry
+ .globl foo\@
+ .size foo\@,4
+ .type foo\@,@function
+foo\@:
+ rts
+ nop
+ .endm
+
+ .rept 511
+ entry
+ .endr
diff --git a/ld/testsuite/ld-sh/vxworks3.dd b/ld/testsuite/ld-sh/vxworks3.dd
new file mode 100644
index 000000000000..f0593b683d10
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks3.dd
@@ -0,0 +1,34 @@
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+#...
+.*: d0 01 mov\.l .*,r0 ! 0
+.*: af f1 bra .* <_PROCEDURE_LINKAGE_TABLE_>
+.*: 00 09 nop
+#...
+.*: d0 01 mov\.l .*,r0 ! 7ec
+.*: a8 05 bra .* <_PROCEDURE_LINKAGE_TABLE_>
+.*: 00 09 nop
+#...
+.*: d0 01 mov\.l .*,r0 ! 7f8
+.*: af f2 bra .*
+.*: 00 09 nop
+#...
+.*: d0 01 mov\.l .*,r0 ! fe4
+.*: a8 06 bra .*
+.*: 00 09 nop
+#...
+.*: d0 01 mov\.l .*,r0 ! ff0
+.*: af f2 bra .*
+.*: 00 09 nop
+#...
+.*: d0 01 mov\.l .*,r0 ! 17dc
+.*: a8 06 bra .*
+.*: 00 09 nop
+#...
+.*: d0 01 mov\.l .*,r0 ! 17e8
+.*: af f2 bra .*
+.*: 00 09 nop
+#pass
diff --git a/ld/testsuite/ld-sh/vxworks3.s b/ld/testsuite/ld-sh/vxworks3.s
new file mode 100644
index 000000000000..86d631099d7e
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks3.s
@@ -0,0 +1,7 @@
+ .macro entry
+ .long foo\@
+ .endm
+
+ .rept 511
+ entry
+ .endr
diff --git a/ld/testsuite/ld-sh/vxworks4.d b/ld/testsuite/ld-sh/vxworks4.d
new file mode 100644
index 000000000000..c5721dd16f64
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks4.d
@@ -0,0 +1,11 @@
+#source: vxworks4a.s
+#source: vxworks4b.s
+#ld: -shared -Tvxworks1.ld
+#target: sh-*-vxworks
+#readelf: --relocs
+
+Relocation section '\.rela\.dyn' at offset .* contains 3 entries:
+ Offset Info Type Sym\.Value Sym\. Name \+ Addend
+00081810 000000a5 R_SH_RELATIVE 0008181c
+00081814 .*01 R_SH_DIR32 00000000 global \+ 1234
+00081818 .*02 R_SH_REL32 00000000 global \+ 1234
diff --git a/ld/testsuite/ld-sh/vxworks4a.s b/ld/testsuite/ld-sh/vxworks4a.s
new file mode 100644
index 000000000000..27855673097a
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks4a.s
@@ -0,0 +1,2 @@
+ .data
+ .fill 0x10
diff --git a/ld/testsuite/ld-sh/vxworks4b.s b/ld/testsuite/ld-sh/vxworks4b.s
new file mode 100644
index 000000000000..6c0228ad2618
--- /dev/null
+++ b/ld/testsuite/ld-sh/vxworks4b.s
@@ -0,0 +1,4 @@
+ .data
+ .long . + 0xc
+ .long global + 0x1234
+ .long global + 0x1234 - .
diff --git a/ld/testsuite/ld-sparc/sparc.exp b/ld/testsuite/ld-sparc/sparc.exp
index 6e7e95cc563e..aaf37a7bf0dd 100644
--- a/ld/testsuite/ld-sparc/sparc.exp
+++ b/ld/testsuite/ld-sparc/sparc.exp
@@ -24,7 +24,7 @@ if {[istarget "sparc-*-vxworks"]} {
{"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
"-KPIC" {vxworks1-lib.s}
{{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
- {readelf --symbols vxworks1-lib.nd}}
+ {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
"libvxworks1.so"}
{"VxWorks executable test 1 (dynamic)" \
"tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
diff --git a/ld/testsuite/ld-sparc/tlssunbin32.rd b/ld/testsuite/ld-sparc/tlssunbin32.rd
index 4869131c9d24..cf502c04b440 100644
--- a/ld/testsuite/ld-sparc/tlssunbin32.rd
+++ b/ld/testsuite/ld-sparc/tlssunbin32.rd
@@ -58,7 +58,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE +GLOBAL DEFAULT +ABS _edata
.* NOTYPE +GLOBAL DEFAULT +ABS _end
-Symbol table '.symtab' contains 67 entries:
+Symbol table '.symtab' contains 64 entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND *
.* SECTION LOCAL +DEFAULT +1 *
@@ -71,9 +71,6 @@ Symbol table '.symtab' contains 67 entries:
.* 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
@@ -91,7 +88,7 @@ Symbol table '.symtab' contains 67 entries:
.* 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 _PROCEDURE_LINKAGE_TABLE_
.* OBJECT +LOCAL +HIDDEN +10 _GLOBAL_OFFSET_TABLE_
.* TLS +GLOBAL DEFAULT +7 sg8
.* TLS +GLOBAL DEFAULT +8 bg8
diff --git a/ld/testsuite/ld-sparc/tlssunbin64.rd b/ld/testsuite/ld-sparc/tlssunbin64.rd
index 4ce130b7250c..6a42c90cd2f2 100644
--- a/ld/testsuite/ld-sparc/tlssunbin64.rd
+++ b/ld/testsuite/ld-sparc/tlssunbin64.rd
@@ -58,7 +58,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE +GLOBAL DEFAULT +ABS _edata
.* NOTYPE +GLOBAL DEFAULT +ABS _end
-Symbol table '.symtab' contains 67 entries:
+Symbol table '.symtab' contains 64 entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND *
.* SECTION LOCAL +DEFAULT +1 *
@@ -71,9 +71,6 @@ Symbol table '.symtab' contains 67 entries:
.* 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
@@ -91,7 +88,7 @@ Symbol table '.symtab' contains 67 entries:
.* 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 _PROCEDURE_LINKAGE_TABLE_
.* OBJECT +LOCAL +HIDDEN +10 _GLOBAL_OFFSET_TABLE_
.* TLS +GLOBAL DEFAULT +7 sg8
.* TLS +GLOBAL DEFAULT +8 bg8
diff --git a/ld/testsuite/ld-sparc/tlssunnopic32.rd b/ld/testsuite/ld-sparc/tlssunnopic32.rd
index 19fbf559ea24..95727ccb0128 100644
--- a/ld/testsuite/ld-sparc/tlssunnopic32.rd
+++ b/ld/testsuite/ld-sparc/tlssunnopic32.rd
@@ -62,7 +62,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE +GLOBAL DEFAULT +ABS _edata
.* NOTYPE +GLOBAL DEFAULT +ABS _end
-Symbol table '.symtab' contains 30 entries:
+Symbol table '.symtab' contains 27 entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND *
.* SECTION LOCAL +DEFAULT +1 *
@@ -73,9 +73,6 @@ Symbol table '.symtab' contains 30 entries:
.* 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
diff --git a/ld/testsuite/ld-sparc/tlssunnopic64.rd b/ld/testsuite/ld-sparc/tlssunnopic64.rd
index ce375efe1356..a113bdcc6e06 100644
--- a/ld/testsuite/ld-sparc/tlssunnopic64.rd
+++ b/ld/testsuite/ld-sparc/tlssunnopic64.rd
@@ -64,7 +64,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE +GLOBAL DEFAULT +ABS _edata
.* NOTYPE +GLOBAL DEFAULT +ABS _end
-Symbol table '.symtab' contains 30 entries:
+Symbol table '.symtab' contains 27 entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND *
.* SECTION LOCAL +DEFAULT +1 *
@@ -75,9 +75,6 @@ Symbol table '.symtab' contains 30 entries:
.* 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
diff --git a/ld/testsuite/ld-sparc/tlssunpic32.rd b/ld/testsuite/ld-sparc/tlssunpic32.rd
index 818d859e7384..0f99170367cc 100644
--- a/ld/testsuite/ld-sparc/tlssunpic32.rd
+++ b/ld/testsuite/ld-sparc/tlssunpic32.rd
@@ -64,7 +64,6 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* 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
@@ -80,7 +79,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE +GLOBAL DEFAULT +ABS _edata
.* NOTYPE +GLOBAL DEFAULT +ABS _end
-Symbol table '.symtab' contains 55 entries:
+Symbol table '.symtab' contains 52 entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND *
.* SECTION LOCAL +DEFAULT +1 *
@@ -94,9 +93,6 @@ Symbol table '.symtab' contains 55 entries:
.* 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
diff --git a/ld/testsuite/ld-sparc/tlssunpic64.rd b/ld/testsuite/ld-sparc/tlssunpic64.rd
index 0033426c4f22..0a94292be8d2 100644
--- a/ld/testsuite/ld-sparc/tlssunpic64.rd
+++ b/ld/testsuite/ld-sparc/tlssunpic64.rd
@@ -64,7 +64,6 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* 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
@@ -80,7 +79,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE +GLOBAL DEFAULT +ABS _edata
.* NOTYPE +GLOBAL DEFAULT +ABS _end
-Symbol table '.symtab' contains 55 entries:
+Symbol table '.symtab' contains 52 entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE +LOCAL +DEFAULT +UND *
.* SECTION LOCAL +DEFAULT +1 *
@@ -94,9 +93,6 @@ Symbol table '.symtab' contains 55 entries:
.* 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
diff --git a/ld/testsuite/ld-sparc/vxworks1-lib.rd b/ld/testsuite/ld-sparc/vxworks1-lib.rd
index 1390e78ab365..3604528639d1 100644
--- a/ld/testsuite/ld-sparc/vxworks1-lib.rd
+++ b/ld/testsuite/ld-sparc/vxworks1-lib.rd
@@ -5,8 +5,8 @@ Relocation section '\.rela\.plt' at offset .* contains 1 entries:
Relocation section '\.rela\.dyn' at offset .* contains 5 entries:
Offset Info Type Sym\.Value Sym\. Name \+ Addend
-00090c00 00000016 R_SPARC_RELATIVE 00080c44
+00090800 00000016 R_SPARC_RELATIVE 00080c44
00080c04 .*09 R_SPARC_HI22 00000000 __GOTT_BASE__ \+ 0
00080c08 .*0c R_SPARC_LO10 00000000 __GOTT_BASE__ \+ 0
00080c0c .*0c R_SPARC_LO10 00000000 __GOTT_INDEX__ \+ 0
-00090410 .*14 R_SPARC_GLOB_DAT 00090800 x \+ 0
+00090410 .*14 R_SPARC_GLOB_DAT 00090c00 x \+ 0
diff --git a/ld/testsuite/ld-sparc/vxworks1-lib.td b/ld/testsuite/ld-sparc/vxworks1-lib.td
new file mode 100644
index 000000000000..9f223e38da16
--- /dev/null
+++ b/ld/testsuite/ld-sparc/vxworks1-lib.td
@@ -0,0 +1,3 @@
+#...
+ 0x0+16 \(TEXTREL\) +0x0
+#pass
diff --git a/ld/testsuite/ld-sparc/vxworks1.ld b/ld/testsuite/ld-sparc/vxworks1.ld
index 979d77335488..ce750b00fad8 100644
--- a/ld/testsuite/ld-sparc/vxworks1.ld
+++ b/ld/testsuite/ld-sparc/vxworks1.ld
@@ -23,8 +23,8 @@ SECTIONS
.got : { *(.got.plt) *(.got) }
. = ALIGN (0x400);
- .bss : { *(.bss) }
+ .data : { *(.data) }
. = ALIGN (0x400);
- .data : { *(.data) }
+ .bss : { *(.bss) }
}
diff --git a/ld/testsuite/ld-spu/ear.d b/ld/testsuite/ld-spu/ear.d
new file mode 100644
index 000000000000..df5546fb60fb
--- /dev/null
+++ b/ld/testsuite/ld-spu/ear.d
@@ -0,0 +1,30 @@
+#as:
+#objdump: -Dr
+#name: ear
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+0+00 <_start>:
+ 0: 32 00 00 00 br 0
+ 0: SPU_REL16 _start
+
+Disassembly of section \.data:
+
+0+00 <_EAR_main>:
+ \.\.\.
+
+0+20 <_EAR_foo>:
+ \.\.\.
+Disassembly of section \.toe:
+
+0+00 <_EAR_>:
+ \.\.\.
+
+0+10 <_EAR_bar>:
+ \.\.\.
+Disassembly of section \.data\.blah:
+
+0+00 <_EAR_blah>:
+ \.\.\.
diff --git a/ld/testsuite/ld-spu/ear.s b/ld/testsuite/ld-spu/ear.s
new file mode 100644
index 000000000000..ba0be05c6505
--- /dev/null
+++ b/ld/testsuite/ld-spu/ear.s
@@ -0,0 +1,25 @@
+ .text
+ .global _start
+_start:
+ br _start
+
+#test old-style toe _EAR_ syms
+ .section .toe,"a",@nobits
+_EAR_:
+ .space 16
+_EAR_bar:
+ .space 16
+
+#test new-style _EAR_ syms
+ .data
+_EAR_main:
+ .space 16
+
+#new ones don't need to be 16 bytes apart
+ .space 16
+_EAR_foo:
+ .space 16
+
+ .section .data.blah,"aw",@progbits
+_EAR_blah:
+ .space 16
diff --git a/ld/testsuite/ld-spu/embed.rd b/ld/testsuite/ld-spu/embed.rd
new file mode 100644
index 000000000000..0ac34da8ce06
--- /dev/null
+++ b/ld/testsuite/ld-spu/embed.rd
@@ -0,0 +1,16 @@
+
+Relocation section '\.rela\.rodata\.speelf' at .* contains 3 entries:
+ Offset Info Type Sym\. Value Symbol's Name \+ Addend
+00000184 00000601 R_PPC_ADDR32 00000000 main \+ 0
+000001a4 00000901 R_PPC_ADDR32 00000000 foo \+ 0
+000001b4 00000701 R_PPC_ADDR32 00000000 blah \+ 0
+
+Relocation section '\.rela\.data' at .* contains 2 entries:
+ Offset Info Type Sym\. Value Symbol's Name \+ Addend
+00000004 00000201 R_PPC_ADDR32 00000000 \.rodata\.speelf \+ 0
+00000008 00000401 R_PPC_ADDR32 00000000 \.data\.spetoe \+ 0
+
+Relocation section '\.rela\.data\.spetoe' at .* contains 2 entries:
+ Offset Info Type Sym\. Value Symbol's Name \+ Addend
+00000004 00000201 R_PPC_ADDR32 00000000 \.rodata\.speelf \+ 0
+00000014 00000a01 R_PPC_ADDR32 00000000 bar \+ 0
diff --git a/ld/testsuite/ld-spu/ovl.d b/ld/testsuite/ld-spu/ovl.d
new file mode 100644
index 000000000000..5f126fcc0c72
--- /dev/null
+++ b/ld/testsuite/ld-spu/ovl.d
@@ -0,0 +1,136 @@
+#source: ovl.s
+#ld: -N -T ovl.lnk --emit-relocs
+#objdump: -D -r
+
+.*elf32-spu
+
+Disassembly of section \.text:
+
+00000100 <_start>:
+ 100: 1c f8 00 81 ai \$1,\$1,-32
+ 104: 48 20 00 00 xor \$0,\$0,\$0
+ 108: 24 00 00 80 stqd \$0,0\(\$1\)
+ 10c: 24 00 40 80 stqd \$0,16\(\$1\)
+ 110: 33 00 04 00 brsl \$0,130 <00000000\.ovl_call\.f1_a1> # 130
+ 110: SPU_REL16 f1_a1
+ 114: 33 00 04 80 brsl \$0,138 <00000000\.ovl_call\.f2_a1> # 138
+ 114: SPU_REL16 f2_a1
+ 118: 33 00 07 00 brsl \$0,150 <00000000\.ovl_call\.f1_a2> # 150
+ 118: SPU_REL16 f1_a2
+ 11c: 42 00 ac 09 ila \$9,344 # 158
+ 11c: SPU_ADDR18 f2_a2
+ 120: 35 20 04 80 bisl \$0,\$9
+ 124: 1c 08 00 81 ai \$1,\$1,32 # 20
+ 128: 32 7f fb 00 br 100 <_start> # 100
+ 128: SPU_REL16 _start
+
+0000012c <f0>:
+ 12c: 35 00 00 00 bi \$0
+00000130 <00000000\.ovl_call\.f1_a1>:
+ 130: 42 02 00 4f ila \$79,1024 # 400
+ 134: 32 00 02 80 br 148 .*
+00000138 <00000000\.ovl_call\.f2_a1>:
+ 138: 42 02 02 4f ila \$79,1028 # 404
+ 13c: 32 00 01 80 br 148 .*
+00000140 <00000000\.ovl_call\.f4_a1>:
+ 140: 42 02 08 4f ila \$79,1040 # 410
+ 144: 40 20 00 00 nop \$0
+ 148: 42 00 00 ce ila \$78,1
+ 14c: 32 00 0a 80 br 1a0 <__ovly_load> # 1a0
+00000150 <00000000\.ovl_call\.f1_a2>:
+ 150: 42 02 00 4f ila \$79,1024 # 400
+ 154: 32 00 02 80 br 168 .*
+00000158 <00000000\.ovl_call\.f2_a2>:
+ 158: 42 02 12 4f ila \$79,1060 # 424
+ 15c: 32 00 01 80 br 168 .*
+00000160 <00000000\.ovl_call\.14:8>:
+ 160: 42 02 1a 4f ila \$79,1076 # 434
+ 164: 40 20 00 00 nop \$0
+ 168: 42 00 01 4e ila \$78,2
+ 16c: 32 00 06 80 br 1a0 <__ovly_load> # 1a0
+#...
+[0-9a-f]+ <__ovly_return>:
+[0-9a-f ]+: 3f e1 00 4e shlqbyi \$78,\$0,4
+[0-9a-f ]+: 3f e2 00 4f shlqbyi \$79,\$0,8
+[0-9a-f ]+: 25 00 27 ce biz \$78,\$79
+
+[0-9a-f]+ <__ovly_load>:
+#...
+[0-9a-f]+ <_ovly_debug_event>:
+#...
+Disassembly of section \.ov_a1:
+
+00000400 <f1_a1>:
+ 400: 32 00 01 80 br 40c <f3_a1> # 40c
+ 400: SPU_REL16 f3_a1
+
+00000404 <f2_a1>:
+ 404: 42 00 a0 03 ila \$3,320 # 140
+ 404: SPU_ADDR18 f4_a1
+ 408: 35 00 00 00 bi \$0
+
+0000040c <f3_a1>:
+ 40c: 35 00 00 00 bi \$0
+
+00000410 <f4_a1>:
+ 410: 35 00 00 00 bi \$0
+ \.\.\.
+Disassembly of section \.ov_a2:
+
+00000400 <f1_a2>:
+ 400: 24 00 40 80 stqd \$0,16\(\$1\)
+ 404: 24 ff 80 81 stqd \$1,-32\(\$1\)
+ 408: 1c f8 00 81 ai \$1,\$1,-32
+ 40c: 33 7f a4 00 brsl \$0,12c <f0> # 12c
+ 40c: SPU_REL16 f0
+ 410: 33 7f a4 00 brsl \$0,130 <00000000\.ovl_call\.f1_a1> # 130
+ 410: SPU_REL16 f1_a1
+ 414: 33 00 03 80 brsl \$0,430 <f3_a2> # 430
+ 414: SPU_REL16 f3_a2
+ 418: 34 00 c0 80 lqd \$0,48\(\$1\) # 30
+ 41c: 1c 08 00 81 ai \$1,\$1,32 # 20
+ 420: 35 00 00 00 bi \$0
+
+00000424 <f2_a2>:
+ 424: 41 00 00 03 ilhu \$3,0
+ 424: SPU_ADDR16_HI f4_a2
+ 428: 60 80 b0 03 iohl \$3,352 # 160
+ 428: SPU_ADDR16_LO f4_a2
+ 42c: 35 00 00 00 bi \$0
+
+00000430 <f3_a2>:
+ 430: 35 00 00 00 bi \$0
+
+00000434 <f4_a2>:
+ 434: 32 7f ff 80 br 430 <f3_a2> # 430
+ 434: SPU_REL16 f3_a2
+ \.\.\.
+Disassembly of section .data:
+
+00000440 <_ovly_table>:
+ 440: 00 00 04 00 .*
+ 444: 00 00 00 20 .*
+ 448: 00 00 02 f0 .*
+ 44c: 00 00 00 01 .*
+ 450: 00 00 04 00 .*
+ 454: 00 00 00 40 .*
+ 458: 00 00 03 10 .*
+ 45c: 00 00 00 01 .*
+
+00000460 <_ovly_buf_table>:
+ 460: 00 00 00 00 .*
+Disassembly of section \.toe:
+
+00000470 <_EAR_>:
+ \.\.\.
+Disassembly of section \.note\.spu_name:
+
+.* <\.note\.spu_name>:
+.*: 00 00 00 08 .*
+.*: 00 00 00 0c .*
+.*: 00 00 00 01 .*
+.*: 53 50 55 4e .*
+.*: 41 4d 45 00 .*
+.*: 74 6d 70 64 .*
+.*: 69 72 2f 64 .*
+.*: 75 6d 70 00 .*
diff --git a/ld/testsuite/ld-spu/ovl.lnk b/ld/testsuite/ld-spu/ovl.lnk
new file mode 100644
index 000000000000..408ed1ebd67c
--- /dev/null
+++ b/ld/testsuite/ld-spu/ovl.lnk
@@ -0,0 +1,14 @@
+SECTIONS
+{
+ . = SIZEOF_HEADERS;
+ .text : { *(.text) *(.stub) }
+
+ OVERLAY 0x400 :
+ {
+ .ov_a1 { *(.ov_a1) }
+ .ov_a2 { *(.ov_a2) }
+ }
+
+ .data : { *(.data) *(.ovtab) }
+ .bss : { *(.bss) }
+}
diff --git a/ld/testsuite/ld-spu/ovl.s b/ld/testsuite/ld-spu/ovl.s
new file mode 100644
index 000000000000..2ca380a65fef
--- /dev/null
+++ b/ld/testsuite/ld-spu/ovl.s
@@ -0,0 +1,82 @@
+ .text
+ .p2align 2
+ .globl _start
+_start:
+ ai sp,sp,-32
+ xor lr,lr,lr
+ stqd lr,0(sp)
+ stqd lr,16(sp)
+ brsl lr,f1_a1
+ brsl lr,f2_a1
+ brsl lr,f1_a2
+ ila 9,f2_a2
+ bisl lr,9
+ ai sp,sp,32
+ br _start
+
+ .type f0,@function
+f0:
+ bi lr
+ .size f0,.-f0
+
+ .section .ov_a1,"ax",@progbits
+ .p2align 2
+ .global f1_a1
+ .type f1_a1,@function
+f1_a1:
+ br f3_a1
+ .size f1_a1,.-f1_a1
+
+ .global f2_a1
+ .type f2_a1,@function
+f2_a1:
+ ila 3,f4_a1
+ bi lr
+ .size f2_a1,.-f2_a1
+
+ .global f3_a1
+ .type f3_a1,@function
+f3_a1:
+ bi lr
+ .size f3_a1,.-f3_a1
+
+ .global f4_a1
+ .type f4_a1,@function
+f4_a1:
+ bi lr
+ .size f4_a1,.-f4_a1
+
+
+ .section .ov_a2,"ax",@progbits
+ .p2align 2
+ .global f1_a2
+ .type f1_a2,@function
+f1_a2:
+ stqd lr,16(sp)
+ stqd sp,-32(sp)
+ ai sp,sp,-32
+ brsl lr,f0
+ brsl lr,f1_a1
+ brsl lr,f3_a2
+ lqd lr,48(sp)
+ ai sp,sp,32
+ bi lr
+ .size f1_a2,.-f1_a2
+
+ .global f2_a2
+ .type f2_a2,@function
+f2_a2:
+ ilhu 3,f4_a2@h
+ iohl 3,f4_a2@l
+ bi lr
+ .size f2_a2,.-f2_a2
+
+ .type f3_a2,@function
+f3_a2:
+ bi lr
+ .size f3_a2,.-f3_a2
+
+ .type f4_a2,@function
+f4_a2:
+ br f3_a2
+ .size f4_a2,.-f4_a2
diff --git a/ld/testsuite/ld-spu/ovl2.d b/ld/testsuite/ld-spu/ovl2.d
new file mode 100644
index 000000000000..52b362d9c2ad
--- /dev/null
+++ b/ld/testsuite/ld-spu/ovl2.d
@@ -0,0 +1,81 @@
+#source: ovl2.s
+#ld: -N -T ovl.lnk --emit-relocs
+#objdump: -D -r
+
+.*elf32-spu
+
+Disassembly of section \.text:
+
+00000100 <_start>:
+ 100: 33 00 06 00 brsl \$0,130 <00000000\.ovl_call\.f1_a1> # 130
+ 100: SPU_REL16 f1_a1
+ 104: 33 00 03 80 brsl \$0,120 <00000000\.ovl_call\.10:4> # 120
+ 104: SPU_REL16 setjmp
+ 108: 32 7f ff 00 br 100 <_start> # 100
+ 108: SPU_REL16 _start
+
+0000010c <setjmp>:
+ 10c: 35 00 00 00 bi \$0
+
+00000110 <longjmp>:
+ 110: 35 00 00 00 bi \$0
+ ...
+
+00000120 <00000000\.ovl_call.10:4>:
+ 120: 42 00 86 4f ila \$79,268 # 10c
+ 124: 40 20 00 00 nop \$0
+ 128: 42 00 00 4e ila \$78,0
+ 12c: 32 00 0a 80 br 180 <__ovly_load> # 180
+
+00000130 <00000000\.ovl_call.f1_a1>:
+ 130: 42 02 00 4f ila \$79,1024 # 400
+ 134: 40 20 00 00 nop \$0
+ 138: 42 00 00 ce ila \$78,1
+ 13c: 32 00 08 80 br 180 <__ovly_load> # 180
+
+00000140 <_SPUEAR_f1_a2>:
+ 140: 42 02 00 4f ila \$79,1024 # 400
+ 144: 40 20 00 00 nop \$0
+ 148: 42 00 01 4e ila \$78,2
+ 14c: 32 00 06 80 br 180 <__ovly_load> # 180
+#...
+Disassembly of section \.ov_a1:
+
+00000400 <f1_a1>:
+ 400: 35 00 00 00 bi \$0
+ \.\.\.
+Disassembly of section \.ov_a2:
+
+00000400 <f1_a2>:
+ 400: 32 7f a2 00 br 110 <longjmp> # 110
+ 400: SPU_REL16 longjmp
+ \.\.\.
+Disassembly of section \.data:
+
+00000410 <_ovly_table>:
+ 410: 00 00 04 00 .*
+ 414: 00 00 00 10 .*
+ 418: 00 00 02 d0 .*
+ 41c: 00 00 00 01 .*
+ 420: 00 00 04 00 .*
+ 424: 00 00 00 10 .*
+ 428: 00 00 02 e0 .*
+ 42c: 00 00 00 01 .*
+
+00000430 <_ovly_buf_table>:
+ 430: 00 00 00 00 .*
+Disassembly of section \.toe:
+
+00000440 <_EAR_>:
+ \.\.\.
+Disassembly of section \.note\.spu_name:
+
+.* <\.note\.spu_name>:
+.*: 00 00 00 08 .*
+.*: 00 00 00 0c .*
+.*: 00 00 00 01 .*
+.*: 53 50 55 4e .*
+.*: 41 4d 45 00 .*
+.*: 74 6d 70 64 .*
+.*: 69 72 2f 64 .*
+.*: 75 6d 70 00 .*
diff --git a/ld/testsuite/ld-spu/ovl2.s b/ld/testsuite/ld-spu/ovl2.s
new file mode 100644
index 000000000000..a3443f51ee96
--- /dev/null
+++ b/ld/testsuite/ld-spu/ovl2.s
@@ -0,0 +1,35 @@
+ .text
+ .p2align 2
+ .global _start
+_start:
+ brsl lr,f1_a1
+ brsl lr,setjmp
+ br _start
+
+ .type setjmp,@function
+setjmp:
+ bi lr
+ .size setjmp,.-setjmp
+
+ .type longjmp,@function
+longjmp:
+ bi lr
+ .size longjmp,.-longjmp
+
+ .section .ov_a1,"ax",@progbits
+ .p2align 2
+ .global f1_a1
+ .type f1_a1,@function
+f1_a1:
+ bi lr
+ .size f1_a1,.-f1_a1
+
+ .section .ov_a2,"ax",@progbits
+ .p2align 2
+ .type f1_a2,@function
+f1_a2:
+ br longjmp
+ .size f1_a2,.-f1_a2
+
+_SPUEAR_f1_a2 = f1_a2
+ .global _SPUEAR_f1_a2
diff --git a/ld/testsuite/ld-spu/spu.exp b/ld/testsuite/ld-spu/spu.exp
new file mode 100644
index 000000000000..cb6f0dd63986
--- /dev/null
+++ b/ld/testsuite/ld-spu/spu.exp
@@ -0,0 +1,91 @@
+# Expect script for ld-spu tests
+# Copyright (C) 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,
+# 51 Franklin Street - Fifth Floor, Boston, MA 02111-1307, USA.
+#
+
+if { ![istarget "spu-*-*"] } {
+ return
+}
+
+proc embed_test { } {
+ global subdir srcdir
+ global AS ASFLAGS LD LDFLAGS READELF READELFFLAGS
+
+ set cmd "$AS $ASFLAGS -o tmpdir/ear.o $srcdir/$subdir/ear.s"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+ if { $cmdret != 0 || $comp_output != ""} then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ fail "ear assembly"
+ return
+ }
+
+ set cmd "$LD $LDFLAGS -o tmpdir/ear tmpdir/ear.o"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+ if { $cmdret != 0 || $comp_output != ""} then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ fail "ear link"
+ return
+ }
+
+ set cmd "sh $srcdir/../../binutils/embedspu.sh -m32 ear tmpdir/ear tmpdir/embed.o"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+ if { $cmdret != 0 || $comp_output != ""} then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ if { [regexp "unknown pseudo-op: `.reloc'" $comp_output] } {
+ untested "ear embedspu"
+ return
+ }
+ fail "ear embedspu"
+ return
+ }
+
+ set cmd "$READELF $READELFFLAGS -r --wide tmpdir/embed.o > tmpdir/embed.out"
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+ if { $cmdret != 0 || $comp_output != ""} then {
+ send_log "$comp_output\n"
+ verbose "$comp_output" 3
+ fail "ear embed readelf"
+ return
+ }
+
+ if { [regexp_diff "tmpdir/embed.out" $srcdir/$subdir/embed.rd] } then {
+ fail "ear embed output"
+ return
+ }
+
+ pass "ear embed"
+}
+
+set rd_test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach sputest $rd_test_list {
+ verbose [file rootname $sputest]
+ run_dump_test [file rootname $sputest]
+}
+
+if { [isbuild "powerpc*-*-linux*"] } {
+ embed_test
+}
diff --git a/ld/testsuite/ld-srec/srec.exp b/ld/testsuite/ld-srec/srec.exp
index 74e76e6a97c7..d98b926d09bd 100644
--- a/ld/testsuite/ld-srec/srec.exp
+++ b/ld/testsuite/ld-srec/srec.exp
@@ -1,6 +1,6 @@
# Test linking directly to S-records.
# By Ian Lance Taylor, Cygnus Support.
-# Copyright 1999, 2000, 2001, 2002, 2003
+# Copyright 1999, 2000, 2001, 2002, 2003, 2006
# Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
@@ -391,6 +391,7 @@ setup_xfail "ia64-*-*"
# emulation tries to write pe-specific information to the PE headers
# in the output bfd, but it's not a PE bfd (it's an srec bfd)
setup_xfail "*-*-cygwin*" "*-*-mingw*" "*-*-pe*" "*-*-winnt*"
+setup_xfail "score-*-*"
run_srec_test $test1 "tmpdir/sr1.o tmpdir/sr2.o"
@@ -422,5 +423,6 @@ setup_xfail "alpha*-*-netbsd*"
setup_xfail "hppa*-*-*"
setup_xfail "ia64-*-*"
setup_xfail "*-*-cygwin*" "*-*-mingw*" "*-*-pe*" "*-*-winnt*"
+setup_xfail "score-*-*"
run_srec_test $test2 "tmpdir/sr3.o"
diff --git a/ld/testsuite/ld-undefined/undefined.exp b/ld/testsuite/ld-undefined/undefined.exp
index 07fca0571f87..4fe2696734a8 100644
--- a/ld/testsuite/ld-undefined/undefined.exp
+++ b/ld/testsuite/ld-undefined/undefined.exp
@@ -119,6 +119,7 @@ set ml "undefined.c:9: undefined reference to `*this_function_is_not_defined'"
# hence the xfails below.
setup_xfail mcore-*-elf
+setup_xfail mep-*-*
setup_xfail mips-sgi-irix6*
setup_xfail "sh64-*-*"
diff --git a/ld/testsuite/ld-vxworks/rpath-1.d b/ld/testsuite/ld-vxworks/rpath-1.d
new file mode 100644
index 000000000000..df67a03ac420
--- /dev/null
+++ b/ld/testsuite/ld-vxworks/rpath-1.d
@@ -0,0 +1,6 @@
+# source: rpath-1.s
+# ld: --entry foo --rpath /dir1 --rpath /dir2 --rpath net:/dir4 --rpath /dir2 --rpath /dir1 --rpath /dir3 --force-dynamic -q
+# readelf: -d
+#...
+ 0x0+f \(RPATH\).*Library rpath: \[/dir1;/dir2;net:/dir4;/dir3\]
+#pass
diff --git a/ld/testsuite/ld-vxworks/rpath-1.s b/ld/testsuite/ld-vxworks/rpath-1.s
new file mode 100644
index 000000000000..6218588e1d77
--- /dev/null
+++ b/ld/testsuite/ld-vxworks/rpath-1.s
@@ -0,0 +1,2 @@
+ .global foo
+foo:
diff --git a/ld/testsuite/ld-vxworks/vxworks.exp b/ld/testsuite/ld-vxworks/vxworks.exp
new file mode 100644
index 000000000000..e33e7613e17c
--- /dev/null
+++ b/ld/testsuite/ld-vxworks/vxworks.exp
@@ -0,0 +1,24 @@
+# Expect script for VxWorks tests
+# Copyright 2007 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 *-*-vxworks*] } {
+ foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.d]] {
+ if { [runtest_file_p $runtests $test] } {
+ run_dump_test [file rootname $test]
+ }
+ }
+}
diff --git a/ld/testsuite/ld-x86-64/tlsbin.dd b/ld/testsuite/ld-x86-64/tlsbin.dd
index 58bb55387002..1ea00d0da16a 100644
--- a/ld/testsuite/ld-x86-64/tlsbin.dd
+++ b/ld/testsuite/ld-x86-64/tlsbin.dd
@@ -24,7 +24,7 @@ Disassembly of section .text:
# 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 <.*>
+ 40100d: 48 03 05 d4 03 20 00[ ]+add 0x2003d4\(%rip\),%rax +# 6013e8 <.*>
# -> R_X86_64_TPOFF64 sG1
401014: 90[ ]+nop *
401015: 90[ ]+nop *
@@ -34,7 +34,7 @@ Disassembly of section .text:
# 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 <.*>
+ 401021: 48 03 05 b0 03 20 00[ ]+add 0x2003b0\(%rip\),%rax +# 6013d8 <.*>
# -> R_X86_64_TPOFF64 sG2
401028: 90[ ]+nop *
401029: 90[ ]+nop *
@@ -43,7 +43,7 @@ Disassembly of section .text:
# 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
+ 401035: 48 8d 80 60 ff ff ff[ ]+lea -0xa0\(%rax\),%rax
# sg1
40103c: 90[ ]+nop *
40103d: 90[ ]+nop *
@@ -52,7 +52,7 @@ Disassembly of section .text:
# 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
+ 401049: 48 8d 80 80 ff ff ff[ ]+lea -0x80\(%rax\),%rax
# sl1
401050: 90[ ]+nop *
401051: 90[ ]+nop *
@@ -61,7 +61,7 @@ Disassembly of section .text:
# 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
+ 40105d: 48 8d 80 a0 ff ff ff[ ]+lea -0x60\(%rax\),%rax
# sh1
401064: 90[ ]+nop *
401065: 90[ ]+nop *
@@ -72,11 +72,11 @@ Disassembly of section .text:
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
+ 401076: 48 8d 90 81 ff ff ff[ ]+lea -0x7f\(%rax\),%rdx
# sl1+1
40107d: 90[ ]+nop *
40107e: 90[ ]+nop *
- 40107f: 4c 8d 88 86 ff ff ff[ ]+lea 0xf+86\(%rax\),%r9
+ 40107f: 4c 8d 88 86 ff ff ff[ ]+lea -0x7a\(%rax\),%r9
# sl2+2
401086: 90[ ]+nop *
401087: 90[ ]+nop *
@@ -87,11 +87,11 @@ Disassembly of section .text:
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
+ 401098: 48 8d 90 a0 ff ff ff[ ]+lea -0x60\(%rax\),%rdx
# sh1
40109f: 90[ ]+nop *
4010a0: 90[ ]+nop *
- 4010a1: 48 8d 88 a7 ff ff ff[ ]+lea 0xf+a7\(%rax\),%rcx
+ 4010a1: 48 8d 88 a7 ff ff ff[ ]+lea -0x59\(%rax\),%rcx
# sh2+3
4010a8: 90[ ]+nop *
4010a9: 90[ ]+nop *
@@ -102,7 +102,7 @@ Disassembly of section .text:
4010b3: 00 00 *
4010b5: 90[ ]+nop *
4010b6: 90[ ]+nop *
- 4010b7: 4c 03 0d 1a 03 10 00[ ]+add 1049370\(%rip\),%r9 +# 5013d8 <.*>
+ 4010b7: 4c 03 0d 1a 03 20 00[ ]+add 0x20031a\(%rip\),%r9 +# 6013d8 <.*>
# -> R_X86_64_TPOFF64 sG2
4010be: 90[ ]+nop *
4010bf: 90[ ]+nop *
@@ -113,7 +113,7 @@ Disassembly of section .text:
4010c9: 00 00 *
4010cb: 90[ ]+nop *
4010cc: 90[ ]+nop *
- 4010cd: 4d 8d 92 60 ff ff ff[ ]+lea 0xf+60\(%r10\),%r10
+ 4010cd: 4d 8d 92 60 ff ff ff[ ]+lea -0xa0\(%r10\),%r10
# sg1
4010d4: 90[ ]+nop *
4010d5: 90[ ]+nop *
@@ -124,7 +124,7 @@ Disassembly of section .text:
4010df: 00 00 *
4010e1: 90[ ]+nop *
4010e2: 90[ ]+nop *
- 4010e3: 48 8d 80 80 ff ff ff[ ]+lea 0xf+80\(%rax\),%rax
+ 4010e3: 48 8d 80 80 ff ff ff[ ]+lea -0x80\(%rax\),%rax
# sl1
4010ea: 90[ ]+nop *
4010eb: 90[ ]+nop *
@@ -135,7 +135,7 @@ Disassembly of section .text:
4010f5: 00 00 *
4010f7: 90[ ]+nop *
4010f8: 90[ ]+nop *
- 4010f9: 48 8d 89 a0 ff ff ff[ ]+lea 0xf+a0\(%rcx\),%rcx
+ 4010f9: 48 8d 89 a0 ff ff ff[ ]+lea -0x60\(%rcx\),%rcx
# sh1
401100: 90[ ]+nop *
401101: 90[ ]+nop *
@@ -143,7 +143,7 @@ Disassembly of section .text:
401103: 90[ ]+nop *
# Direct access through %fs
# IE against global var
- 401104: 48 8b 0d c5 02 10 00[ ]+mov 1049285\(%rip\),%rcx +# 5013d0 <.*>
+ 401104: 48 8b 0d c5 02 20 00[ ]+mov 0x2002c5\(%rip\),%rcx +# 6013d0 <.*>
# -> R_X86_64_TPOFF64 sG5
40110b: 90[ ]+nop *
40110c: 90[ ]+nop *
@@ -186,7 +186,7 @@ Disassembly of section .text:
401147: 00 00 *
401149: 90[ ]+nop *
40114a: 90[ ]+nop *
- 40114b: 4c 03 1d 8e 02 10 00[ ]+add 1049230\(%rip\),%r11 +# 5013e0 <.*>
+ 40114b: 4c 03 1d 8e 02 20 00[ ]+add 0x20028e\(%rip\),%r11 +# 6013e0 <.*>
# -> R_X86_64_TPOFF64 sG6
401152: 90[ ]+nop *
401153: 90[ ]+nop *
@@ -197,7 +197,7 @@ Disassembly of section .text:
40115d: 00 00 *
40115f: 90[ ]+nop *
401160: 90[ ]+nop *
- 401161: 48 8d 92 d4 ff ff ff[ ]+lea 0xf+d4\(%rdx\),%rdx
+ 401161: 48 8d 92 d4 ff ff ff[ ]+lea -0x2c\(%rdx\),%rdx
# bg6
401168: 90[ ]+nop *
401169: 90[ ]+nop *
@@ -229,7 +229,7 @@ Disassembly of section .text:
40119a: 00 00 *
40119c: 90[ ]+nop *
40119d: 90[ ]+nop *
- 40119e: 48 8d 92 b4 ff ff ff[ ]+lea 0xf+b4\(%rdx\),%rdx
+ 40119e: 48 8d 92 b4 ff ff ff[ ]+lea -0x4c\(%rdx\),%rdx
# sh6
4011a5: 90[ ]+nop *
4011a6: 90[ ]+nop *
@@ -250,7 +250,7 @@ Disassembly of section .text:
4011c1: 00 00 *
4011c3: 90[ ]+nop *
4011c4: 90[ ]+nop *
- 4011c5: 48 8d 90 64 ff ff ff[ ]+lea 0xf+64\(%rax\),%rdx
+ 4011c5: 48 8d 90 64 ff ff ff[ ]+lea -0x9c\(%rax\),%rdx
# sg2
4011cc: 90[ ]+nop *
4011cd: 90[ ]+nop *
diff --git a/ld/testsuite/ld-x86-64/tlsbin.rd b/ld/testsuite/ld-x86-64/tlsbin.rd
index dc3ef22b389b..915208a28a0c 100644
--- a/ld/testsuite/ld-x86-64/tlsbin.rd
+++ b/ld/testsuite/ld-x86-64/tlsbin.rd
@@ -18,11 +18,11 @@ Section Headers:
\[ 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
+ \[ 9\] .tdata +PROGBITS +0+60122a 0+122a 0+60 00 WAT +0 +0 +1
+ \[10\] .tbss +NOBITS +0+60128a 0+128a 0+40 00 WAT +0 +0 +1
+ \[11\] .dynamic +DYNAMIC +0+601290 0+1290 0+140 10 +WA +4 +0 +8
+ \[12\] .got +PROGBITS +0+6013d0 0+13d0 0+20 08 +WA +0 +0 +8
+ \[13\] .got.plt +PROGBITS +0+6013f0 0+13f0 0+20 08 +WA +0 +0 +8
\[14\] .shstrtab +.*
\[15\] .symtab +.*
\[16\] .strtab +.*
@@ -40,10 +40,10 @@ Program Headers:
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
+ LOAD +0x0+ 0x0+400000 0x0+400000 0x0+122a 0x0+122a R E 0x200000
+ LOAD +0x0+122a 0x0+60122a 0x0+60122a 0x0+1e6 0x0+1e6 RW 0x200000
+ DYNAMIC +0x0+1290 0x0+601290 0x0+601290 0x0+140 0x0+140 RW 0x8
+ TLS +0x0+122a 0x0+60122a 0x0+60122a 0x0+60 0x0+a0 R +0x1
Section to Segment mapping:
Segment Sections...
@@ -77,7 +77,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE GLOBAL DEFAULT ABS _edata
.* NOTYPE GLOBAL DEFAULT ABS _end
-Symbol table '.symtab' contains 69 entries:
+Symbol table '.symtab' contains 66 entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE LOCAL DEFAULT UND *
.* SECTION LOCAL DEFAULT +1 *
@@ -93,9 +93,6 @@ Symbol table '.symtab' contains 69 entries:
.* 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
diff --git a/ld/testsuite/ld-x86-64/tlsbin.sd b/ld/testsuite/ld-x86-64/tlsbin.sd
index 8095b5967088..7fbc5654d1f7 100644
--- a/ld/testsuite/ld-x86-64/tlsbin.sd
+++ b/ld/testsuite/ld-x86-64/tlsbin.sd
@@ -8,5 +8,5 @@
.*: +file format elf64-x86-64
Contents of section .got:
- 5013d0 00000000 00000000 00000000 00000000 .*
- 5013e0 00000000 00000000 00000000 00000000 .*
+ 6013d0 00000000 00000000 00000000 00000000 .*
+ 6013e0 00000000 00000000 00000000 00000000 .*
diff --git a/ld/testsuite/ld-x86-64/tlsbin.td b/ld/testsuite/ld-x86-64/tlsbin.td
index e0d75981f3fc..b3851dece6e6 100644
--- a/ld/testsuite/ld-x86-64/tlsbin.td
+++ b/ld/testsuite/ld-x86-64/tlsbin.td
@@ -8,9 +8,9 @@
.*: +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 .*
+ 60122a 11000000 12000000 13000000 14000000 .*
+ 60123a 15000000 16000000 17000000 18000000 .*
+ 60124a 41000000 42000000 43000000 44000000 .*
+ 60125a 45000000 46000000 47000000 48000000 .*
+ 60126a 01010000 02010000 03010000 04010000 .*
+ 60127a 05010000 06010000 07010000 08010000 .*
diff --git a/ld/testsuite/ld-x86-64/tlsbindesc.dd b/ld/testsuite/ld-x86-64/tlsbindesc.dd
index c41efecf2939..4cfba5e2466b 100644
--- a/ld/testsuite/ld-x86-64/tlsbindesc.dd
+++ b/ld/testsuite/ld-x86-64/tlsbindesc.dd
@@ -22,20 +22,18 @@ Disassembly of section .text:
[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 <.*>
+ [0-9a-f]+: 48 8b 05 65 03 20 00[ ]+mov 0x200365\(%rip\),%rax +# 601370 <.*>
# -> R_X86_64_TPOFF64 sG1
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD -> IE because variable is not defined in executable where
# the variable is referenced through IE too
- [0-9a-f]+: 48 8b 05 48 03 10 00[ ]+mov 1049416\(%rip\),%rax +# 501360 <.*>
+ [0-9a-f]+: 48 8b 05 48 03 20 00[ ]+mov 0x200348\(%rip\),%rax +# 601360 <.*>
# -> R_X86_64_TPOFF64 sG2
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -43,8 +41,7 @@ Disassembly of section .text:
# 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]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -52,8 +49,7 @@ Disassembly of section .text:
# 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]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -61,34 +57,32 @@ Disassembly of section .text:
# 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]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# LD -> LE
[0-9a-f]+: 48 c7 c0 60 ff ff ff[ ]+mov \$0xf+60,%rax
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 48 8d 90 81 ff ff ff[ ]+lea 0xf+81\(%rax\),%rdx
+ [0-9a-f]+: 48 8d 90 81 ff ff ff[ ]+lea -0x7f\(%rax\),%rdx
# sl1+1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 4c 8d 88 86 ff ff ff[ ]+lea 0xf+86\(%rax\),%r9
+ [0-9a-f]+: 4c 8d 88 86 ff ff ff[ ]+lea -0x7a\(%rax\),%r9
# sl2+2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# LD -> LE against hidden variables
- [0-9a-f]+: 48 8d 90 a0 ff ff ff[ ]+lea 0xf+a0\(%rax\),%rdx
+ [0-9a-f]+: 48 8d 90 a0 ff ff ff[ ]+lea -0x60\(%rax\),%rdx
# sh1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 48 8d 88 a7 ff ff ff[ ]+lea 0xf+a7\(%rax\),%rcx
+ [0-9a-f]+: 48 8d 88 a7 ff ff ff[ ]+lea -0x59\(%rax\),%rcx
# sh2+3
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -99,7 +93,7 @@ Disassembly of section .text:
[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 <.*>
+ [0-9a-f]+: 4c 03 0d d6 02 20 00[ ]+add 0x2002d6\(%rip\),%r9 +# 601360 <.*>
# -> R_X86_64_TPOFF64 sG2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -110,7 +104,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 4d 8d 92 60 ff ff ff[ ]+lea -0xa0\(%r10\),%r10
# sg1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -121,7 +115,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 48 8d 80 80 ff ff ff[ ]+lea -0x80\(%rax\),%rax
# sl1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -132,7 +126,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 48 8d 89 a0 ff ff ff[ ]+lea -0x60\(%rcx\),%rcx
# sh1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -140,7 +134,7 @@ Disassembly of section .text:
[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 <.*>
+ [0-9a-f]+: 48 8b 0d 81 02 20 00[ ]+mov 0x200281\(%rip\),%rcx +# 601358 <.*>
# -> R_X86_64_TPOFF64 sG5
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -183,7 +177,7 @@ Disassembly of section .text:
[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 <.*>
+ [0-9a-f]+: 4c 03 1d 4a 02 20 00[ ]+add 0x20024a\(%rip\),%r11 +# 601368 <.*>
# -> R_X86_64_TPOFF64 sG6
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -194,7 +188,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 48 8d 92 d4 ff ff ff[ ]+lea -0x2c\(%rdx\),%rdx
# bg6
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -226,7 +220,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 48 8d 92 b4 ff ff ff[ ]+lea -0x4c\(%rdx\),%rdx
# sh6
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
@@ -247,7 +241,7 @@ Disassembly of section .text:
[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
+ [0-9a-f]+: 48 8d 90 64 ff ff ff[ ]+lea -0x9c\(%rax\),%rdx
# sg2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
diff --git a/ld/testsuite/ld-x86-64/tlsbindesc.rd b/ld/testsuite/ld-x86-64/tlsbindesc.rd
index 787002d18995..ae2e80f6f027 100644
--- a/ld/testsuite/ld-x86-64/tlsbindesc.rd
+++ b/ld/testsuite/ld-x86-64/tlsbindesc.rd
@@ -16,11 +16,11 @@ Section Headers:
\[ 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
+ \[ 7\] .tdata +PROGBITS +0+6011f6 0+11f6 0+60 00 WAT +0 +0 +1
+ \[ 8\] .tbss +NOBITS +0+601256 0+1256 0+40 00 WAT +0 +0 +1
+ \[ 9\] .dynamic +DYNAMIC +0+601258 0+1258 0+100 10 +WA +4 +0 +8
+ \[10\] .got +PROGBITS +0+601358 0+1358 0+20 08 +WA +0 +0 +8
+ \[11\] .got.plt +PROGBITS +0+601378 0+1378 0+18 08 +WA +0 +0 +8
\[12\] .shstrtab +.*
\[13\] .symtab +.*
\[14\] .strtab +.*
@@ -38,10 +38,10 @@ Program Headers:
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
+ LOAD +0x0+ 0x0+400000 0x0+400000 0x0+11f6 0x0+11f6 R E 0x200000
+ LOAD +0x0+11f6 0x0+6011f6 0x0+6011f6 0x0+19a 0x0+19a RW 0x200000
+ DYNAMIC +0x0+1258 0x0+601258 0x0+601258 0x0+100 0x0+100 RW 0x8
+ TLS +0x0+11f6 0x0+6011f6 0x0+6011f6 0x0+60 0x0+a0 R +0x1
Section to Segment mapping:
Segment Sections...
@@ -54,10 +54,10 @@ Program Headers:
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
+0+601358 0+100000012 R_X86_64_TPOFF64 +0+ sG5 \+ 0
+0+601360 0+200000012 R_X86_64_TPOFF64 +0+ sG2 \+ 0
+0+601368 0+400000012 R_X86_64_TPOFF64 +0+ sG6 \+ 0
+0+601370 0+500000012 R_X86_64_TPOFF64 +0+ sG1 \+ 0
Symbol table '.dynsym' contains 8 entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
@@ -70,7 +70,7 @@ Symbol table '.dynsym' contains 8 entries:
+[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:
+Symbol table '.symtab' contains 64 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 *
@@ -84,9 +84,6 @@ Symbol table '.symtab' contains 67 entries:
+[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
@@ -104,8 +101,8 @@ Symbol table '.symtab' contains 67 entries:
+[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+601258 +0 OBJECT LOCAL HIDDEN 9 _DYNAMIC
+ +[0-9]+: 0+601378 +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
diff --git a/ld/testsuite/ld-x86-64/tlsbindesc.sd b/ld/testsuite/ld-x86-64/tlsbindesc.sd
index fd0519fb9299..f622bc473004 100644
--- a/ld/testsuite/ld-x86-64/tlsbindesc.sd
+++ b/ld/testsuite/ld-x86-64/tlsbindesc.sd
@@ -8,5 +8,5 @@
.*: +file format elf64-x86-64
Contents of section .got:
- 501358 00000000 00000000 00000000 00000000 .*
- 501368 00000000 00000000 00000000 00000000 .*
+ 601358 00000000 00000000 00000000 00000000 .*
+ 601368 00000000 00000000 00000000 00000000 .*
diff --git a/ld/testsuite/ld-x86-64/tlsbindesc.td b/ld/testsuite/ld-x86-64/tlsbindesc.td
index 226e52e62802..b2a3ebec1ada 100644
--- a/ld/testsuite/ld-x86-64/tlsbindesc.td
+++ b/ld/testsuite/ld-x86-64/tlsbindesc.td
@@ -8,9 +8,9 @@
.*: +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 .*
+ 6011f6 11000000 12000000 13000000 14000000 .*
+ 601206 15000000 16000000 17000000 18000000 .*
+ 601216 41000000 42000000 43000000 44000000 .*
+ 601226 45000000 46000000 47000000 48000000 .*
+ 601236 01010000 02010000 03010000 04010000 .*
+ 601246 05010000 06010000 07010000 08010000 .*
diff --git a/ld/testsuite/ld-x86-64/tlsdesc.dd b/ld/testsuite/ld-x86-64/tlsdesc.dd
index 656e2411c66e..9b0ae6109157 100644
--- a/ld/testsuite/ld-x86-64/tlsdesc.dd
+++ b/ld/testsuite/ld-x86-64/tlsdesc.dd
@@ -17,7 +17,7 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 8d 05 89 03 20 00[ ]+lea 0x200389\(%rip\),%rax +# 201398 <.*>
# -> R_X86_64_TLSDESC sg1
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
@@ -25,16 +25,15 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 8b 05 1c 03 20 00[ ]+mov 0x20031c\(%rip\),%rax +# 201338 <.*>
# -> R_X86_64_TPOFF64 sg2
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD against local variable
- +[0-9a-f]+: 48 8d 05 3f 03 10 00[ ]+lea 1049407\(%rip\),%rax +# 101368 <.*>
+ +[0-9a-f]+: 48 8d 05 3f 03 20 00[ ]+lea 0x20033f\(%rip\),%rax +# 201368 <.*>
# -> R_X86_64_TLSDESC [0 0x2000000000000000]
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
@@ -42,16 +41,15 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 8b 05 d2 02 20 00[ ]+mov 0x2002d2\(%rip\),%rax +# 201308 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x24
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD against hidden and local variable
- +[0-9a-f]+: 48 8d 05 65 03 10 00[ ]+lea 1049445\(%rip\),%rax +# 1013a8 <.*>
+ +[0-9a-f]+: 48 8d 05 65 03 20 00[ ]+lea 0x200365\(%rip\),%rax +# 2013a8 <.*>
# -> R_X86_64_TLSDESC [0 0x4000000000000000]
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
@@ -59,16 +57,15 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 8b 05 f0 02 20 00[ ]+mov 0x2002f0\(%rip\),%rax +# 201340 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x44
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD against hidden but not local variable
- +[0-9a-f]+: 48 8d 05 1b 03 10 00[ ]+lea 1049371\(%rip\),%rax +# 101378 <.*>
+ +[0-9a-f]+: 48 8d 05 1b 03 20 00[ ]+lea 0x20031b\(%rip\),%rax +# 201378 <.*>
# -> R_X86_64_TLSDESC [0 0x6000000000000000]
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
@@ -76,16 +73,15 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 8b 05 ae 02 20 00[ ]+mov 0x2002ae\(%rip\),%rax +# 201318 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x64
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# LD
- +[0-9a-f]+: 48 8d 05 11 03 10 00[ ]+lea 1049361\(%rip\),%rax +# 101388 <.*>
+ +[0-9a-f]+: 48 8d 05 11 03 20 00[ ]+lea 0x200311\(%rip\),%rax +# 201388 <.*>
# -> R_X86_64_TLSDESC [0 0x000000000000000]
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
@@ -119,7 +115,7 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 03 0d 71 02 20 00[ ]+add 0x200271\(%rip\),%rcx +# 201338 <.*>
# -> R_X86_64_TPOFF64 sg2
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
@@ -130,7 +126,7 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 4c 03 35 2b 02 20 00[ ]+add 0x20022b\(%rip\),%r14 +# 201308 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x24
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
@@ -141,7 +137,7 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 03 0d 4d 02 20 00[ ]+add 0x20024d\(%rip\),%rcx +# 201340 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x44
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
@@ -152,7 +148,7 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 03 0d 0f 02 20 00[ ]+add 0x20020f\(%rip\),%rcx +# 201318 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x64
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
@@ -160,7 +156,7 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 8b 0d 0c 02 20 00[ ]+mov 0x20020c\(%rip\),%rcx +# 201320 <.*>
# -> R_X86_64_TPOFF64 sg5
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
@@ -170,7 +166,7 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 4c 8b 15 eb 01 20 00[ ]+mov 0x2001eb\(%rip\),%r10 +# 201310 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x30
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
@@ -180,7 +176,7 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 8b 15 f2 01 20 00[ ]+mov 0x2001f2\(%rip\),%rdx +# 201328 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x50
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
@@ -190,7 +186,7 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 8b 0d e9 01 20 00[ ]+mov 0x2001e9\(%rip\),%rcx +# 201330 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x70
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
diff --git a/ld/testsuite/ld-x86-64/tlsdesc.pd b/ld/testsuite/ld-x86-64/tlsdesc.pd
index aea1bab46ba8..bf3bc2f7be8b 100644
--- a/ld/testsuite/ld-x86-64/tlsdesc.pd
+++ b/ld/testsuite/ld-x86-64/tlsdesc.pd
@@ -9,18 +9,12 @@
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 *
+[0-9a-f]+ <.*@plt-0x10>:
+ [0-9a-f]+: ff 35 .. .. 20 00 pushq .*\(%rip\) # 201358 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ [0-9a-f]+: ff 25 .. .. 20 00 jmpq \*.*\(%rip\) # 201360 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ [0-9a-f]+: 0f 1f 40 00 nopl 0x0\(%rax\)
+[0-9a-f]+ <.*@plt>:
+ [0-9a-f]+: ff 35 .. .. 20 00 pushq .*\(%rip\) # 201358 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ [0-9a-f]+: ff 25 .. .. 20 00 jmpq \*.*\(%rip\) # 201348 <_DYNAMIC\+0x190>
+ [0-9a-f]+: 0f 1f 40 00 nopl 0x0\(%rax\)
diff --git a/ld/testsuite/ld-x86-64/tlsdesc.rd b/ld/testsuite/ld-x86-64/tlsdesc.rd
index e7e21ed1d75d..20aa075d0b90 100644
--- a/ld/testsuite/ld-x86-64/tlsdesc.rd
+++ b/ld/testsuite/ld-x86-64/tlsdesc.rd
@@ -15,13 +15,13 @@ Section Headers:
\[ 3\] .dynstr +.*
\[ 4\] .rela.dyn +.*
\[ 5\] .rela.plt +.*
- \[ 6\] .plt +PROGBITS +0+470 0+470 0+20 10 +AX +0 +0 +4
+ \[ 6\] .plt +PROGBITS +0+450 0+450 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
+ \[ 8\] .tdata +PROGBITS +0+201154 0+1154 0+60 00 WAT +0 +0 +1
+ \[ 9\] .tbss +NOBITS +0+2011b4 0+11b4 0+20 00 WAT +0 +0 +1
+ \[10\] .dynamic +DYNAMIC +0+2011b8 0+11b8 0+150 10 +WA +3 +0 +8
+ \[11\] .got +PROGBITS +0+201308 0+1308 0+48 08 +WA +0 +0 +8
+ \[12\] .got.plt +PROGBITS +0+201350 0+1350 0+68 08 +WA +0 +0 +8
\[13\] .shstrtab +.*
\[14\] .symtab +.*
\[15\] .strtab +.*
@@ -36,10 +36,10 @@ 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
+ LOAD +0x0+ 0x0+ 0x0+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x200000
+ LOAD +0x0+1154 0x0+201154 0x0+201154 0x0+264 0x0+264 RW +0x200000
+ DYNAMIC +0x0+11b8 0x0+2011b8 0x0+2011b8 0x0+150 0x0+150 RW +0x8
+ TLS +0x0+1154 0x0+201154 0x0+201154 0x0+60 0x0+80 R +0x1
Section to Segment mapping:
Segment Sections...
@@ -59,8 +59,8 @@ Dynamic section at offset 0x[0-9a-f]+ contains 16 entries:
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]+ +\(TLSDESC_PLT\) +0x460
+ 0x[0-9a-f]+ +\(TLSDESC_GOT\) +0x201348
0x[0-9a-f]+ +\(RELA\).*
0x[0-9a-f]+ +\(RELASZ\).*
0x[0-9a-f]+ +\(RELAENT\).*
@@ -69,29 +69,28 @@ Dynamic section at offset 0x[0-9a-f]+ contains 16 entries:
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
+0+201308 [0-9a-f]+ R_X86_64_TPOFF64 +0+24
+0+201310 [0-9a-f]+ R_X86_64_TPOFF64 +0+30
+0+201318 [0-9a-f]+ R_X86_64_TPOFF64 +0+64
+0+201328 [0-9a-f]+ R_X86_64_TPOFF64 +0+50
+0+201330 [0-9a-f]+ R_X86_64_TPOFF64 +0+70
+0+201340 [0-9a-f]+ R_X86_64_TPOFF64 +0+44
+0+201320 [0-9a-f]+ R_X86_64_TPOFF64 +0+10 sg5 \+ 0
+0+201338 [0-9a-f]+ R_X86_64_TPOFF64 +0+4 sg2 \+ 0
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 5 entries:
+Offset +Info +Type +Symbol's Value Symbol's Name \+ Addend
-0+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+
+0+201398 [0-9a-f]+ R_X86_64_TLSDESC +0+ sg1 \+ 0
+0+201368 [0-9a-f]+ R_X86_64_TLSDESC +0+20
+0+2013a8 [0-9a-f]+ R_X86_64_TLSDESC +0+40
+0+201378 [0-9a-f]+ R_X86_64_TLSDESC +0+60
+0+201388 [0-9a-f]+ R_X86_64_TLSDESC +0+
-Symbol table '.dynsym' contains 16 entries:
+Symbol table '.dynsym' contains [0-9]+ entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
+[0-9]+: 0+ +0 NOTYPE LOCAL DEFAULT UND *
+[0-9]+: [0-9a-f]+ +0 SECTION LOCAL DEFAULT +7 *
+[0-9]+: [0-9a-f]+ +0 SECTION LOCAL DEFAULT +8 *
- +[0-9]+: [0-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
@@ -105,7 +104,7 @@ Symbol table '.dynsym' contains 16 entries:
+[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:
+Symbol table '.symtab' contains 52 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 *
@@ -120,9 +119,6 @@ Symbol table '.symtab' contains 55 entries:
+[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
@@ -133,7 +129,7 @@ Symbol table '.symtab' contains 55 entries:
+[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+2011b8 +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
@@ -147,7 +143,7 @@ Symbol table '.symtab' contains 55 entries:
+[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+201350 +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
diff --git a/ld/testsuite/ld-x86-64/tlsdesc.sd b/ld/testsuite/ld-x86-64/tlsdesc.sd
index 8eb5d9cd5728..7eb474a9d792 100644
--- a/ld/testsuite/ld-x86-64/tlsdesc.sd
+++ b/ld/testsuite/ld-x86-64/tlsdesc.sd
@@ -8,16 +8,16 @@
.*: +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 .*
+ 201308 00000000 00000000 00000000 00000000 .*
+ 201318 00000000 00000000 00000000 00000000 .*
+ 201328 00000000 00000000 00000000 00000000 .*
+ 201338 00000000 00000000 00000000 00000000 .*
+ 201348 00000000 00000000 .*
Contents of section \.got\.plt:
- 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 .*
+ 201350 b8112000 00000000 00000000 00000000 .*
+ 201360 00000000 00000000 00000000 00000000 .*
+ 201370 00000000 00000000 00000000 00000000 .*
+ 201380 00000000 00000000 00000000 00000000 .*
+ 201390 00000000 00000000 00000000 00000000 .*
+ 2013a0 00000000 00000000 00000000 00000000 .*
+ 2013b0 00000000 00000000 .*
diff --git a/ld/testsuite/ld-x86-64/tlsdesc.td b/ld/testsuite/ld-x86-64/tlsdesc.td
index dd79816c4aa2..6b8098c80f55 100644
--- a/ld/testsuite/ld-x86-64/tlsdesc.td
+++ b/ld/testsuite/ld-x86-64/tlsdesc.td
@@ -8,9 +8,9 @@
.*: +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 .*
+ 201154 11000000 12000000 13000000 14000000 .*
+ 201164 15000000 16000000 17000000 18000000 .*
+ 201174 41000000 42000000 43000000 44000000 .*
+ 201184 45000000 46000000 47000000 48000000 .*
+ 201194 01010000 02010000 03010000 04010000 .*
+ 2011a4 05010000 06010000 07010000 08010000 .*
diff --git a/ld/testsuite/ld-x86-64/tlsgdesc.dd b/ld/testsuite/ld-x86-64/tlsgdesc.dd
index b0e7c0584404..fab88e7bdfcb 100644
--- a/ld/testsuite/ld-x86-64/tlsgdesc.dd
+++ b/ld/testsuite/ld-x86-64/tlsgdesc.dd
@@ -20,7 +20,7 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 03 0d 5e 02 20 00[ ]+add 0x20025e\(%rip\),%rcx +# 200660 <.*>
# -> R_X86_64_TPOFF64 sG3
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
@@ -31,14 +31,14 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 03 0d 68 02 20 00[ ]+add 0x200268\(%rip\),%rcx +# 200680 <.*>
# -> R_X86_64_TPOFF64 sG4
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD, gd first
- +[0-9a-f]+: 66 48 8d 3d 6c 02 10[ ]+lea 1049196\(%rip\),%rdi +# 100690 <.*>
+ +[0-9a-f]+: 66 48 8d 3d 6c 02 20[ ]+lea 0x20026c\(%rip\),%rdi +# 200690 <.*>
+[0-9a-f]+: 00 *
# -> R_X86_64_DTPMOD64 sG1
+[0-9a-f]+: 66 66 48 e8 9c ff ff[ ]+callq [0-9a-f]+ <.*>
@@ -48,7 +48,7 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 8d 05 a1 02 20 00[ ]+lea 0x2002a1\(%rip\),%rax +# 2006d8 <.*>
# -> R_X86_64_TLSDESC sG1
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
@@ -56,14 +56,14 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 8d 05 84 02 20 00[ ]+lea 0x200284\(%rip\),%rax +# 2006c8 <.*>
# -> R_X86_64_TLSDESC sG2
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 66 48 8d 3d 1e 02 10[ ]+lea 1049118\(%rip\),%rdi +# 100670 <.*>
+ +[0-9a-f]+: 66 48 8d 3d 1e 02 20[ ]+lea 0x20021e\(%rip\),%rdi +# 200670 <.*>
+[0-9a-f]+: 00 *
# -> R_X86_64_DTPMOD64 sG2
+[0-9a-f]+: 66 66 48 e8 6e ff ff[ ]+callq [0-9a-f]+ <.*>
@@ -76,32 +76,30 @@ Disassembly of section .text:
# 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 <.*>
+ +[0-9a-f]+: 48 03 05 f2 01 20 00[ ]+add 0x2001f2\(%rip\),%rax +# 200660 <.*>
# -> R_X86_64_TPOFF64 sG3
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 48 8b 05 e7 01 10 00[ ]+mov 1049063\(%rip\),%rax +# 100660 <.*>
+ +[0-9a-f]+: 48 8b 05 e7 01 20 00[ ]+mov 0x2001e7\(%rip\),%rax +# 200660 <.*>
# -> R_X86_64_TPOFF64 sG3
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD -> IE, desc first, after IE use
- +[0-9a-f]+: 48 8b 05 fa 01 10 00[ ]+mov 1049082\(%rip\),%rax +# 100680 <.*>
+ +[0-9a-f]+: 48 8b 05 fa 01 20 00[ ]+mov 0x2001fa\(%rip\),%rax +# 200680 <.*>
# -> R_X86_64_TPOFF64 sG4
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+[0-9a-f]+: 00 00 *
- +[0-9a-f]+: 48 03 05 e4 01 10 00[ ]+add 1049060\(%rip\),%rax +# 100680 <.*>
+ +[0-9a-f]+: 48 03 05 e4 01 20 00[ ]+add 0x2001e4\(%rip\),%rax +# 200680 <.*>
# -> R_X86_64_TPOFF64 sG4
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
@@ -110,32 +108,30 @@ Disassembly of section .text:
# 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 <.*>
+ +[0-9a-f]+: 48 03 05 b8 01 20 00[ ]+add 0x2001b8\(%rip\),%rax +# 200668 <.*>
# -> R_X86_64_TPOFF64 sG5
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 48 8b 05 ad 01 10 00[ ]+mov 1049005\(%rip\),%rax +# 100668 <.*>
+ +[0-9a-f]+: 48 8b 05 ad 01 20 00[ ]+mov 0x2001ad\(%rip\),%rax +# 200668 <.*>
# -> R_X86_64_TPOFF64 sG5
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD -> IE, desc first, before IE use
- +[0-9a-f]+: 48 8b 05 c0 01 10 00[ ]+mov 1049024\(%rip\),%rax +# 100688 <.*>
+ +[0-9a-f]+: 48 8b 05 c0 01 20 00[ ]+mov 0x2001c0\(%rip\),%rax +# 200688 <.*>
# -> R_X86_64_TPOFF64 sG6
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+[0-9a-f]+: 00 00 *
- +[0-9a-f]+: 48 03 05 aa 01 10 00[ ]+add 1049002\(%rip\),%rax +# 100688 <.*>
+ +[0-9a-f]+: 48 03 05 aa 01 20 00[ ]+add 0x2001aa\(%rip\),%rax +# 200688 <.*>
# -> R_X86_64_TPOFF64 sG6
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
@@ -146,7 +142,7 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 03 0d 74 01 20 00[ ]+add 0x200174\(%rip\),%rcx +# 200668 <.*>
# -> R_X86_64_TPOFF64 sG5
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
@@ -157,7 +153,7 @@ Disassembly of section .text:
+[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 <.*>
+ +[0-9a-f]+: 48 03 0d 7e 01 20 00[ ]+add 0x20017e\(%rip\),%rcx +# 200688 <.*>
# -> R_X86_64_TPOFF64 sG6
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
diff --git a/ld/testsuite/ld-x86-64/tlsgdesc.rd b/ld/testsuite/ld-x86-64/tlsgdesc.rd
index 2f7621b001d6..c965c956d5b4 100644
--- a/ld/testsuite/ld-x86-64/tlsgdesc.rd
+++ b/ld/testsuite/ld-x86-64/tlsgdesc.rd
@@ -76,7 +76,7 @@ Symbol table '.dynsym' contains 13 entries:
+[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:
+Symbol table '.symtab' contains 24 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 *
@@ -89,9 +89,6 @@ Symbol table '.symtab' contains 27 entries:
+[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
diff --git a/ld/testsuite/ld-x86-64/tlspic.dd b/ld/testsuite/ld-x86-64/tlspic.dd
index 28d8418edaf3..230d188bad5f 100644
--- a/ld/testsuite/ld-x86-64/tlspic.dd
+++ b/ld/testsuite/ld-x86-64/tlspic.dd
@@ -17,7 +17,7 @@ Disassembly of section .text:
+1006: 90[ ]+nop *
+1007: 90[ ]+nop *
# GD
- +1008: 66 48 8d 3d 80 03 10[ ]+lea 1049472\(%rip\),%rdi +# 101390 <.*>
+ +1008: 66 48 8d 3d 80 03 20[ ]+lea 0x200380\(%rip\),%rdi +# 201390 <.*>
+100f: 00 *
# -> R_X86_64_DTPMOD64 sg1
+1010: 66 66 48 e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
@@ -30,14 +30,14 @@ Disassembly of section .text:
# 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 <.*>
+ +1025: 48 03 05 84 03 20 00[ ]+add 0x200384\(%rip\),%rax +# 2013b0 <.*>
# -> R_X86_64_TPOFF64 sg2
+102c: 90[ ]+nop *
+102d: 90[ ]+nop *
+102e: 90[ ]+nop *
+102f: 90[ ]+nop *
# GD against local variable
- +1030: 66 48 8d 3d 08 03 10[ ]+lea 1049352\(%rip\),%rdi +# 101340 <.*>
+ +1030: 66 48 8d 3d 08 03 20[ ]+lea 0x200308\(%rip\),%rdi +# 201340 <.*>
+1037: 00 *
# -> R_X86_64_DTPMOD64 [0 0x2000000000000000]
+1038: 66 66 48 e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
@@ -50,14 +50,14 @@ Disassembly of section .text:
# 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 <.*>
+ +104d: 48 03 05 fc 02 20 00[ ]+add 0x2002fc\(%rip\),%rax +# 201350 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x24
+1054: 90[ ]+nop *
+1055: 90[ ]+nop *
+1056: 90[ ]+nop *
+1057: 90[ ]+nop *
# GD against hidden and local variable
- +1058: 66 48 8d 3d 58 03 10[ ]+lea 1049432\(%rip\),%rdi +# 1013b8 <.*>
+ +1058: 66 48 8d 3d 58 03 20[ ]+lea 0x200358\(%rip\),%rdi +# 2013b8 <.*>
+105f: 00 *
# -> R_X86_64_DTPMOD64 [0 0x4000000000000000]
+1060: 66 66 48 e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
@@ -70,14 +70,14 @@ Disassembly of section .text:
# 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 <.*>
+ +1075: 48 03 05 4c 03 20 00[ ]+add 0x20034c\(%rip\),%rax +# 2013c8 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x44
+107c: 90[ ]+nop *
+107d: 90[ ]+nop *
+107e: 90[ ]+nop *
+107f: 90[ ]+nop *
# GD against hidden but not local variable
- +1080: 66 48 8d 3d e8 02 10[ ]+lea 1049320\(%rip\),%rdi +# 101370 <.*>
+ +1080: 66 48 8d 3d e8 02 20[ ]+lea 0x2002e8\(%rip\),%rdi +# 201370 <.*>
+1087: 00 *
# -> R_X86_64_DTPMOD64 [0 0x6000000000000000]
+1088: 66 66 48 e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
@@ -90,14 +90,14 @@ Disassembly of section .text:
# 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 <.*>
+ +109d: 48 03 05 dc 02 20 00[ ]+add 0x2002dc\(%rip\),%rax +# 201380 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x64
+10a4: 90[ ]+nop *
+10a5: 90[ ]+nop *
+10a6: 90[ ]+nop *
+10a7: 90[ ]+nop *
# LD
- +10a8: 48 8d 3d b1 02 10 00[ ]+lea 1049265\(%rip\),%rdi +# 101360 <.*>
+ +10a8: 48 8d 3d b1 02 20 00[ ]+lea 0x2002b1\(%rip\),%rdi +# 201360 <.*>
# -> R_X86_64_DTPMOD64 [0 0x000000000000000]
+10af: e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
# -> R_X86_64_JUMP_SLOT __tls_get_addr
@@ -112,7 +112,7 @@ Disassembly of section .text:
+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 <.*>
+ +10ca: 48 8d 3d 8f 02 20 00[ ]+lea 0x20028f\(%rip\),%rdi +# 201360 <.*>
# -> R_X86_64_DTPMOD64 [0 0x000000000000000]
+10d1: e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
# -> R_X86_64_JUMP_SLOT __tls_get_addr
@@ -127,7 +127,7 @@ Disassembly of section .text:
+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 <.*>
+ +10ec: 48 8d 3d 6d 02 20 00[ ]+lea 0x20026d\(%rip\),%rdi +# 201360 <.*>
# -> R_X86_64_DTPMOD64 [0 0x000000000000000]
+10f3: e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
# -> R_X86_64_JUMP_SLOT __tls_get_addr
@@ -144,7 +144,7 @@ Disassembly of section .text:
+1113: 00 00 *
+1115: 90[ ]+nop *
+1116: 90[ ]+nop *
- +1117: 48 03 0d 92 02 10 00[ ]+add 1049234\(%rip\),%rcx +# 1013b0 <.*>
+ +1117: 48 03 0d 92 02 20 00[ ]+add 0x200292\(%rip\),%rcx +# 2013b0 <.*>
# -> R_X86_64_TPOFF64 sg2
+111e: 90[ ]+nop *
+111f: 90[ ]+nop *
@@ -155,7 +155,7 @@ Disassembly of section .text:
+1129: 00 00 *
+112b: 90[ ]+nop *
+112c: 90[ ]+nop *
- +112d: 4c 03 35 1c 02 10 00[ ]+add 1049116\(%rip\),%r14 +# 101350 <.*>
+ +112d: 4c 03 35 1c 02 20 00[ ]+add 0x20021c\(%rip\),%r14 +# 201350 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x24
+1134: 90[ ]+nop *
+1135: 90[ ]+nop *
@@ -166,7 +166,7 @@ Disassembly of section .text:
+113f: 00 00 *
+1141: 90[ ]+nop *
+1142: 90[ ]+nop *
- +1143: 48 03 0d 7e 02 10 00[ ]+add 1049214\(%rip\),%rcx +# 1013c8 <.*>
+ +1143: 48 03 0d 7e 02 20 00[ ]+add 0x20027e\(%rip\),%rcx +# 2013c8 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x44
+114a: 90[ ]+nop *
+114b: 90[ ]+nop *
@@ -177,7 +177,7 @@ Disassembly of section .text:
+1155: 00 00 *
+1157: 90[ ]+nop *
+1158: 90[ ]+nop *
- +1159: 48 03 0d 20 02 10 00[ ]+add 1049120\(%rip\),%rcx +# 101380 <.*>
+ +1159: 48 03 0d 20 02 20 00[ ]+add 0x200220\(%rip\),%rcx +# 201380 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x64
+1160: 90[ ]+nop *
+1161: 90[ ]+nop *
@@ -185,7 +185,7 @@ Disassembly of section .text:
+1163: 90[ ]+nop *
# Direct access through %fs
# IE against global var
- +1164: 48 8b 0d 1d 02 10 00[ ]+mov 1049117\(%rip\),%rcx +# 101388 <.*>
+ +1164: 48 8b 0d 1d 02 20 00[ ]+mov 0x20021d\(%rip\),%rcx +# 201388 <.*>
# -> R_X86_64_TPOFF64 sg5
+116b: 90[ ]+nop *
+116c: 90[ ]+nop *
@@ -195,7 +195,7 @@ Disassembly of section .text:
+1173: 90[ ]+nop *
+1174: 90[ ]+nop *
# IE against local var
- +1175: 4c 8b 15 dc 01 10 00[ ]+mov 1049052\(%rip\),%r10 +# 101358 <.*>
+ +1175: 4c 8b 15 dc 01 20 00[ ]+mov 0x2001dc\(%rip\),%r10 +# 201358 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x30
+117c: 90[ ]+nop *
+117d: 90[ ]+nop *
@@ -205,7 +205,7 @@ Disassembly of section .text:
+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 <.*>
+ +1186: 48 8b 15 13 02 20 00[ ]+mov 0x200213\(%rip\),%rdx +# 2013a0 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x50
+118d: 90[ ]+nop *
+118e: 90[ ]+nop *
@@ -215,7 +215,7 @@ Disassembly of section .text:
+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 <.*>
+ +1197: 48 8b 0d 0a 02 20 00[ ]+mov 0x20020a\(%rip\),%rcx +# 2013a8 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x70
+119e: 90[ ]+nop *
+119f: 90[ ]+nop *
diff --git a/ld/testsuite/ld-x86-64/tlspic.rd b/ld/testsuite/ld-x86-64/tlspic.rd
index 286fbf2cd868..492cf6f85f9c 100644
--- a/ld/testsuite/ld-x86-64/tlspic.rd
+++ b/ld/testsuite/ld-x86-64/tlspic.rd
@@ -17,11 +17,11 @@ Section Headers:
\[ 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
+ \[ 8\] .tdata +PROGBITS +0+2011ac 0+11ac 0+60 00 WAT +0 +0 +1
+ \[ 9\] .tbss +NOBITS +0+20120c 0+120c 0+20 00 WAT +0 +0 +1
+ \[10\] .dynamic +DYNAMIC +0+201210 0+1210 0+130 10 +WA +3 +0 +8
+ \[11\] .got +PROGBITS +0+201340 0+1340 0+90 08 +WA +0 +0 +8
+ \[12\] .got.plt +PROGBITS +0+2013d0 0+13d0 0+20 08 +WA +0 +0 +8
\[13\] .shstrtab +.*
\[14\] .symtab +.*
\[15\] .strtab +.*
@@ -36,10 +36,10 @@ 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
+ LOAD +0x0+ 0x0+ 0x0+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x200000
+ LOAD +0x0+11ac 0x0+2011ac 0x0+2011ac 0x0+244 0x0+244 RW +0x200000
+ DYNAMIC +0x0+1210 0x0+201210 0x0+201210 0x0+130 0x0+130 RW +0x8
+ TLS +0x0+11ac 0x0+2011ac 0x0+2011ac 0x0+60 0x0+80 R +0x1
Section to Segment mapping:
Segment Sections...
@@ -74,7 +74,6 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* 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
@@ -89,7 +88,7 @@ Symbol table '.dynsym' contains [0-9]+ entries:
.* NOTYPE GLOBAL DEFAULT ABS _edata
.* NOTYPE GLOBAL DEFAULT ABS _end
-Symbol table '.symtab' contains 55 entries:
+Symbol table '.symtab' contains 52 entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
.* NOTYPE LOCAL DEFAULT UND *
.* SECTION LOCAL DEFAULT +1 *
@@ -104,9 +103,6 @@ Symbol table '.symtab' contains 55 entries:
.* 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
diff --git a/ld/testsuite/ld-x86-64/tlspic.sd b/ld/testsuite/ld-x86-64/tlspic.sd
index 831f0e5f82a6..666c7749c309 100644
--- a/ld/testsuite/ld-x86-64/tlspic.sd
+++ b/ld/testsuite/ld-x86-64/tlspic.sd
@@ -8,12 +8,12 @@
.*: +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 .*
+ 201340 00000000 00000000 20000000 00000000 .*
+ 201350 00000000 00000000 00000000 00000000 .*
+ 201360 00000000 00000000 00000000 00000000 .*
+ 201370 00000000 00000000 60000000 00000000 .*
+ 201380 00000000 00000000 00000000 00000000 .*
+ 201390 00000000 00000000 00000000 00000000 .*
+ 2013a0 00000000 00000000 00000000 00000000 .*
+ 2013b0 00000000 00000000 00000000 00000000 .*
+ 2013c0 40000000 00000000 00000000 00000000 .*
diff --git a/ld/testsuite/ld-x86-64/tlspic.td b/ld/testsuite/ld-x86-64/tlspic.td
index d3df20c93450..67eb4f2a2742 100644
--- a/ld/testsuite/ld-x86-64/tlspic.td
+++ b/ld/testsuite/ld-x86-64/tlspic.td
@@ -8,9 +8,9 @@
.*: +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 .*
+ 2011ac 11000000 12000000 13000000 14000000 .*
+ 2011bc 15000000 16000000 17000000 18000000 .*
+ 2011cc 41000000 42000000 43000000 44000000 .*
+ 2011dc 45000000 46000000 47000000 48000000 .*
+ 2011ec 01010000 02010000 03010000 04010000 .*
+ 2011fc 05010000 06010000 07010000 08010000 .*
diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
index a0e734eb6c07..acfe0df838f0 100644
--- a/ld/testsuite/lib/ld-lib.exp
+++ b/ld/testsuite/lib/ld-lib.exp
@@ -1,6 +1,6 @@
# Support routines for LD testsuite.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-# 2004, 2005, 2006 Free Software Foundation, Inc.
+# 2004, 2005, 2006, 2007 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
@@ -39,12 +39,15 @@ proc default_ld_version { ld } {
proc default_ld_relocate { ld target objects } {
global HOSTING_EMU
global host_triplet
+ global exec_output
if { [which $ld] == 0 } then {
perror "$ld does not exist"
return 0
}
+ catch "exec rm -f $target" exec_output
+
verbose -log "$ld $HOSTING_EMU -o $target -r $objects"
catch "exec $ld $HOSTING_EMU -o $target -r $objects" exec_output
@@ -90,11 +93,11 @@ proc big_or_little_endian {} {
foreach x $tmp_flags {
case $x in {
- {*big*endian eb EB -eb -EB -mb} {
+ {*big*endian eb EB -eb -EB -mb -meb} {
set flags " -EB"
return $flags
}
- {*little*endian el EL -el -EL -ml} {
+ {*little*endian el EL -el -EL -ml -mel} {
set flags " -EL"
return $flags
}
@@ -115,6 +118,7 @@ proc default_ld_link { ld target objects } {
global LIBS
global host_triplet
global link_output
+ global exec_output
set objs "$HOSTING_CRT0 $objects"
set libs "$LIBS $HOSTING_LIBS"
@@ -129,14 +133,17 @@ proc default_ld_link { ld target objects } {
} else {
set flags ""
}
+
+ catch "exec rm -f $target" exec_output
+
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 {
+ if [string match "" $exec_output] then {
return 1
} else {
- verbose -log "$link_output"
+ verbose -log "$exec_output"
return 0
}
}
@@ -147,6 +154,7 @@ proc default_ld_simple_link { ld target objects } {
global host_triplet
global link_output
global gcc_ld_flag
+ global exec_output
if { [which $ld] == 0 } then {
perror "$ld does not exist"
@@ -172,6 +180,8 @@ proc default_ld_simple_link { ld target objects } {
set flags "$gcc_ld_flag $flags"
}
+ catch "exec rm -f $target" exec_output
+
verbose -log "$ld $flags -o $target $objects"
catch "exec $ld $flags -o $target $objects" link_output
@@ -434,7 +444,7 @@ proc is_aout_format {} {
# True if the object format is known to be PE COFF.
#
proc is_pecoff_format {} {
- if { ![istarget *-*-mingw32*] \
+ if { ![istarget *-*-mingw*] \
&& ![istarget *-*-cygwin*] \
&& ![istarget *-*-pe*] } {
return 0
@@ -783,6 +793,7 @@ proc run_dump_test { name } {
set sourcefile [lindex $sourcefiles $i]
set objfile "tmpdir/dump$i.o"
+ catch "exec rm -f $objfile" exec_output
lappend objfiles $objfile
set cmd "$AS $ASFLAGS $opts(as) $asflags($sourcefile) -o $objfile $sourcefile"
@@ -814,6 +825,7 @@ proc run_dump_test { name } {
# Perhaps link the file(s).
if { $run_ld } {
set objfile "tmpdir/dump"
+ catch "exec rm -f $objfile" exec_output
# Add -L$srcdir/$subdir so that the linker command can use
# linker scripts in the source directory.
@@ -840,6 +852,7 @@ proc run_dump_test { name } {
if { $cmdret == 0 && $run_objcopy } {
set infile $objfile
set objfile "tmpdir/dump1"
+ catch "exec rm -f $objfile" exec_output
# Note that we don't use OBJCOPYFLAGS here; any flags must be
# explicitly specified.
@@ -1246,14 +1259,16 @@ if ![string length [info proc prune_warnings]] {
# 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:
+# and 3 optional items:
# 0:name
# 1:ld options
# 2:assembler options
-# 3:filenames of assembler files
+# 3:filenames of source files
# 4:name of output file
# 5:expected output
# 6:compiler flags (optional)
+# 7:language (optional)
+# 8:linker warning (optional)
proc run_ld_link_exec_tests { targets_to_xfail ldtests } {
global ld
@@ -1262,8 +1277,10 @@ proc run_ld_link_exec_tests { targets_to_xfail ldtests } {
global subdir
global env
global CC
+ global CXX
global CFLAGS
global errcnt
+ global exec_output
foreach testitem $ldtests {
foreach target $targets_to_xfail {
@@ -1276,6 +1293,8 @@ proc run_ld_link_exec_tests { targets_to_xfail ldtests } {
set binfile tmpdir/[lindex $testitem 4]
set expfile [lindex $testitem 5]
set cflags [lindex $testitem 6]
+ set lang [lindex $testitem 7]
+ set warning [lindex $testitem 8]
set objfiles {}
set failed 0
@@ -1297,7 +1316,13 @@ proc run_ld_link_exec_tests { targets_to_xfail ldtests } {
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 ] \
+ if { [ string match "c" $lang ] } {
+ set link_proc ld_simple_link
+ set link_cmd $CC
+ } elseif { [ string match "c++" $lang ] } {
+ set link_proc ld_simple_link
+ set link_cmd $CXX
+ } elseif { [ string match "-shared" $ld_options ] \
|| [ string match "-pie" $ld_options ] } {
set link_proc ld_simple_link
set link_cmd $CC
@@ -1310,6 +1335,19 @@ proc run_ld_link_exec_tests { targets_to_xfail ldtests } {
set failed 1
} else {
set failed 0
+ }
+
+ # Check if exec_output is expected.
+ if { $warning != "" } then {
+ verbose -log "returned with: <$exec_output>, expected: <$warning>"
+ if { [regexp $warning $exec_output] } then {
+ set failed 0
+ } else {
+ set failed 1
+ }
+ }
+
+ if { $failed == 0 } {
send_log "Running: $binfile > $binfile.out\n"
verbose "Running: $binfile > $binfile.out"
catch "exec $binfile > $binfile.out" exec_output
@@ -1341,3 +1379,136 @@ proc run_ld_link_exec_tests { targets_to_xfail ldtests } {
}
}
}
+
+# List contains test-items with 3 items followed by 2 lists, one item and
+# one optional item:
+# 0:name
+# 1:link options
+# 2:compile options
+# 3:filenames of source files
+# 4:action and options.
+# 5:name of output file
+# 6:language (optional)
+#
+# Actions:
+# objdump: Apply objdump options on result. Compare with regex (last arg).
+# nm: Apply nm options on result. Compare with regex (last arg).
+# readelf: Apply readelf options on result. Compare with regex (last arg).
+#
+proc run_cc_link_tests { ldtests } {
+ global nm
+ global objdump
+ global READELF
+ global srcdir
+ global subdir
+ global env
+ global CC
+ global CXX
+ global CFLAGS
+
+ foreach testitem $ldtests {
+ set testname [lindex $testitem 0]
+ set ldflags [lindex $testitem 1]
+ set cflags [lindex $testitem 2]
+ set src_files [lindex $testitem 3]
+ set actions [lindex $testitem 4]
+ set binfile tmpdir/[lindex $testitem 5]
+ set lang [lindex $testitem 6]
+ set objfiles {}
+ set is_unresolved 0
+ set failed 0
+
+ # Compile each file in the test.
+ foreach src_file $src_files {
+ set objfile "tmpdir/[file rootname $src_file].o"
+ lappend objfiles $objfile
+
+ # We ignore warnings since some compilers may generate
+ # incorrect section attributes and the assembler will warn
+ # them.
+ ld_compile "$CC -c $CFLAGS $cflags" $srcdir/$subdir/$src_file $objfile
+ }
+
+ # Clear error and warning counts.
+ reset_vars
+
+ if { [ string match "c++" $lang ] } {
+ set cc_cmd $CXX
+ } else {
+ set cc_cmd $CC
+ }
+
+ if ![ld_simple_link $cc_cmd $binfile "-L$srcdir/$subdir $ldflags $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
+ }
+ }
+}
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index fb328da633cc..f70005817797 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,18 +1,312 @@
+2007-06-14 Paolo Bonzini <bonzini@gnu.org>
+
+ * configure.ac: Use ACX_PROG_CC_ALMOST_PEDANTIC too.
+ * configure: Regenerate.
+
+2007-06-14 Paolo Bonzini <bonzini@gnu.org>
+
+ * aclocal.m4: Include config/warnings.m4.
+ * configure.ac: Use ACX_PROG_CC_WARNING_OPTS.
+ * configure: Regenerate.
+
+2007-06-07 Geoffrey Keating <geoffk@apple.com>
+
+ * configure.ac: Non-default multilibs can be cross compilations.
+ * configure: Regenerate
+
+2007-05-07 Nathan Froyd <froydnj@codesourcery.com>
+
+ * argv.c (writeargv): New function.
+
+2007-05-05 Geoffrey Keating <geoffk@apple.com>
+
+ * cp-demangle.c (d_name): Detect local-source-name.
+ (d_prefix): Likewise.
+ (d_unqualified_name): Implement local-source-name.
+
+2007-05-03 Joel Brobecker <brobecker@adacore.com>
+
+ * filename_cmp.c: Replace include of ctype.h by include of
+ safe-ctype.h.
+ (filename_cmp): Use TOLOWER instead of tolower for conversions
+ that are locale-independent.
+ * Makefile.in (filename_cmp.o): Add dependency on safe-ctype.h.
+
+2007-04-11 Thomas Neumann tneumann@users.sourceforge.net
+
+ * argv.c: Use ANSI C declarations.
+ * make-relative-prefix.c: Likewise.
+
+2007-04-06 Joel Brobecker <brobecker@adacore.com>
+
+ * filename_cmp.c (filename_cmp): Improve documentation.
+
+2007-04-02 Andreas Schwab <schwab@suse.de>
+
+ * filename_cmp.c: Include "config.h".
+
+2007-03-29 Joel Brobecker <brobecker@adacore.com>
+
+ * filename_cmp.c: New file.
+ * Makefile.in (CFILES): Add filename_cmp.c.
+ (REQUIRED_OFILES): Add filename_cmp.o
+ (filename_cmp.o): New rule.
+ * functions.texi: Regenerate.
+
+2007-03-15 Geoffrey Keating <geoffk@apple.com>
+
+ * cp-demangle.c (d_encoding): Exit early on error.
+ (d_pointer_to_member_type): Exit early if cplus_demangle_type
+ returns NULL.
+ (cplus_demangle_type): Likewise.
+ * testsuite/demangle-expected: New testcase.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in: Add install-pdf target as copied from
+ automake v1.10 rules.
+ * testsuite/Makefile.in: Add dummy install-pdf target.
+
+2007-03-01 Peter Breitenlohner <peb@mppmu.mpg.de>
+ Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR other/16513
+ * Makefile.in: Install library under $(MULTIOSDIR), not $(MULTISUBDIR).
+ Install headers in multilib independent location.
+
+2007-02-26 DJ Delorie <dj@redhat.com>
+
+ * configure.ac: add djgpp-specific results, so we don't have to
+ link during a cross compilation.
+ * configure: Regenerated.
+
+2007-01-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * hex.c: Fix typo.
+ * choose-temp.c: Likewise.
+ * functions.texi: Regenerate.
+
+2007-01-31 Vladimir Prus <vladimir@codesourcery.com>
+
+ * pex-common.h (struct pex_obj): New fields
+ stderr_pipe and read_err.
+ * pex-common.c (pex_init_common): Initialize
+ stderr_pipe.
+ (pex_run_in_environment): Add error checking
+ for PEX_STDERR_TO_PIPE. Create a pipe
+ for stderr if necessary.
+ (pex_read_err): New.
+ (pex_free): Close read_err.
+ * pexecute.txh: Document changes.
+ * functions.texi: Regenerated.
+
+2007-01-31 Ben Elliston <bje@au.ibm.com>
+
+ * strsignal.c (psignal): Change type of signo to int.
+ * functions.texi: Regenerate.
+
+2007-01-29 Simon Baldwin <simonb@google.com>
+
+ * cp-demangle.h (cplus_demangle_operators): External definition
+ suppressed if not building for libstdc++.
+ * cp-demangle.c (__gcclibcxx_demangle_callback): Augmented interface
+ to demangling, provides a malloc-less version of __cxa_demangle.
+ (cplus_demangle_print_callback): Public callback version of
+ cplus_demangle_print.
+ (struct d_growable_string): New growable string structure.
+ (d_growable_string_init): New function, provides support for
+ growable strings separate from print info.
+ (d_growable_string_resize): Likewise.
+ (d_growable_string_append_buffer): Likewise.
+ (d_growable_string_callback_adapter):): Likewise.
+ (d_print_init): New print info initialization function.
+ (d_print_error): Macro replace by inline function.
+ (d_print_saw_error): Likewise.
+ (d_append_char): Likewise.
+ (d_append_buffer): Likewise.
+ (d_append_string): New inline function, replaces the
+ d_append_string_constant macro.
+ (d_flush_buffer): New function, flushes buffer to callback.
+ (d_demangle_callback, is_ctor_or_dtor): Malloc-based fallback
+ for unsupported dynamic arrays replaced by alloca().
+ (d_demangle): Return string length estimating removed.
+ (d_dump): Moved error case handling from call site into function.
+ (d_print_resize): Function removed.
+ (d_print_append_char): Likewise.
+ (d_print_append_buffer): Likewise.
+ (d_print_error): Likewise.
+ (d_print_comp): Added special case handling for Java arrays.
+ (java_demangle_v3): Removed string post-processing for Java arrays,
+ now replaced by special case handling in d_print_comp.
+ (cplus_demangle_v3_callback): Augmented interface to demangling,
+ provides a malloc-less version of cplus_demangle_v3.
+ (java_demangle_v3_callback): Augmented interface to demangling,
+ provides a malloc-less version of java_demangle_v3.
+
+2007-01-12 Ben Elliston <bje@au.ibm.com>
+
+ * pex-unix.c (writeerr): Cast write result to void.
+
+ * choose-temp.c (choose_temp_base): Check the result of the call
+ to mktemp rather than testing the length of the modified string.
+
+2006-12-20 Geoffrey Keating <geoffk@apple.com>
+
+ * cp-demangle.h: Add comment explaining what to do to avoid
+ overrunning string.
+ (d_check_char): New.
+ (d_next_char): Don't advance past trailing '\0'.
+ * cp-demangle.c (cplus_demangle_mangled_name): Use d_check_char.
+ (d_nested_name): Likewise.
+ (d_special_name): Likewise.
+ (d_call_offset): Likewise.
+ (d_function_type): Likewise.
+ (d_array_type): Likewise.
+ (d_pointer_to_member_type): Likewise.
+ (d_template_param): Likewise.
+ (d_template_args): Likewise.
+ (d_template_arg): Likewise.
+ (d_expr_primary): Likewise.
+ (d_local_name): Likewise.
+ (d_substitution): Likewise.
+ (d_ctor_dtor_name): Use d_advance rather than d_next_char.
+ * testsuite/test-demangle.c: Include sys/mman.h.
+ (MAP_ANONYMOUS): Define.
+ (protect_end): New.
+ (main): Use protect_end.
+ * testsuite/demangle-expected: Add testcases for overrunning
+ the end of the string.
+
+2006-11-30 Andrew Stubbs <andrew.stubbs@st.com>
+ J"orn Rennecke <joern.rennecke@st.com>
+
+ PR driver/29931
+ * make-relative-prefix.c (make_relative_prefix_1): New function,
+ broken out of make_relative_prefix. Make link resolution dependent
+ on new parameter.
+ (make_relative_prefix): Use make_relative_prefix_1.
+ (make_relative_prefix_ignore_links): New function.
+
+2006-11-08 Vladimir Prus <vladimir@codesourcery.com>
+
+ * pex-win32.c (no_suffixes): Remove.
+ (std_suffixes): Add "" as first element.
+ (find_executable): Remove detection of already-present
+ extension. Try all suffixes in std_suffixes.
+
+2006-11-07 Julian Brown <julian@codesourcery.com>
+
+ * floatformat.c (get_field): Fix segfault with little-endian word
+ order on 64-bit hosts.
+ (put_field): Likewise.
+ (min): Move definition.
+
+2006-10-26 Danny Smith <dannysmith@users.sourceforge.net>
+
+ pex-win32.c (argv_to_cmdline): Replace xmalloc with XNEWVEC.
+ (find_executable): Likewise.
+ (win32_spawn): Cast alloca return to (char**).
+ Replace malloc with XNEWVEC.
+ bcopy.c (bcopy): Add explict casts in assignments.
+
+2006-10-25 Ben Elliston <bje@au.ibm.com>
+
+ * pexecute.txh: Wrap pexecute's "flag" argument with @var {..}.
+
+2006-10-10 Brooks Moses <bmoses@stanford.edu>
+
+ * Makefile.in: Added "pdf", "libiberty.pdf" target support.
+ * testsuite/Makefile.in: Added empty "pdf" target.
+
+2006-09-22 Ian Lance Taylor <ian@airs.com>
+
+ PR other/29176
+ * cp-demangle.c (d_substitution): Check for overflow when
+ computing substitution index.
+
+2006-08-30 Corinna Vinschen <corinna@vinschen.de>
+
+ * configure.ac: Add case for Mingw as host.
+ * configure: Regenerate.
+
+2006-08-27 Ian Lance Taylor <ian@airs.com>
+
+ PR driver/27622
+ * pex-common.h (struct pex_funcs): Add toclose parameter to
+ exec_child field.
+ * pex-common.c (pex_run_in_environment): Pass toclose to
+ exec_child.
+ * pex-djgpp.c (pex_djgpp_exec_child): Add toclose parameter.
+ * pex-unix.c (pex_unix_exec_child): Likewise.
+ * pex-msdos.c (pex_msdos_exec_child): Likewise.
+ * pex-win32.c (pex_win32_exec_child): Likewise.
+
+ PR other/28797
+ * cp-demangle.c (d_pointer_to_member_type): Do add a substitution
+ for a qualified member which is not a function.
+ * testsuite/demangle-expected: Add test case.
+
+2006-07-27 Jan Hubicka <jh@suse.cz>
+
+ PR rtl-optimization/28071
+ * hashtab.c (htab_empty): Clear out n_deleted/n_elements;
+ downsize the hashtable.
+
+2006-07-04 Peter O'Gorman <peter@pogma.com>
+
+ * Makefile.in: chmod 644 before ranlib during install.
+
+2006-06-02 Mark Shinwell <shinwell@codesourcery.com>
+
+ * pex-unix.c (pex_unix_exec_child): Insert cast when assigning
+ to environ.
+
+2006-06-01 Mark Shinwell <shinwell@codesourcery.com>
+
+ * pex-common.c: New function pex_run_in_environment.
+ * pex-common.h: Add environment parameter to exec_child.
+ * pex-msdos.c: Add environment parameter to pex_msdos_exec_child.
+ * pex-djgpp.c: Add environment parameter to pex_djgpp_exec_child.
+ (pex_djgpp_exec_child): Pass environment to child process.
+ * pex-unix.c: Add environment parameter to pex_unix_exec_child.
+ (pex_unix_exec_child): Pass environment to child process.
+ * pex-win32.c: Add environment parameter to pex_win32_exec_child.
+ New function env_compare for comparing VAR=VALUE pairs.
+ (win32_spawn): Assemble environment block and pass to CreateProcess.
+ (spawn_script): Pass environment through to win32_spawn.
+ (pex_win32_exec_child): Pass environment through to spawn_script and
+ win32_spawn.
+ * functions.texi: Regenerate.
+ * pexecute.txh: Document pex_run_in_environment.
+
+2006-05-28 Mark Shinwell <shinwell@codesourcery.com>
+
+ * mkstemps.c: Open temporary files in binary mode.
+
+2006-05-12 Anton Blanchard <anton@samba.org>
+
+ * cplus-dem.c (demangle_fund_type): Ensure buf is large enough to
+ hold "int%u_t".
+
+2006-04-24 Julian Brown <julian@codesourcery.com>
+
+ * floatformat.c (floatformat_to_double): Fix (biased) exponent=0 case.
+
2006-03-29 Jim Blandy <jimb@codesourcery.com>
- * pex-common.c (pex_input_file, pex_input_pipe): New functions.
+ * pex-common.c (pex_input_file, pex_input_pipe): New functions.
(pex_init_common): Initialize obj->input_file.
(pex_run): Close any file opened by pex_input_file.
- * pexecute.txh (pex_input_file, pex_input_pipe): New docs.
- * pex-common.h (struct pex_obj): New field input_file.
+ * pexecute.txh (pex_input_file, pex_input_pipe): New docs.
+ * pex-common.h (struct pex_obj): New field input_file.
(struct pex_funcs): New function ptr fdopenw.
- * pex-unix.c (pex_unix_fdopenw): New function.
- (funcs): List it as our fdopenw function.
- * pex-win32.c (pex_win32_fdopenw): New function.
- (funcs): List it as our fdopenw function.
- * pex-djgpp.c (funcs): Leave fdopenw null.
- * pex-msdos (funcs): Same.
- * functions.texi: Regenerated.
+ * pex-unix.c (pex_unix_fdopenw): New function.
+ (funcs): List it as our fdopenw function.
+ * pex-win32.c (pex_win32_fdopenw): New function.
+ (funcs): List it as our fdopenw function.
+ * pex-djgpp.c (funcs): Leave fdopenw null.
+ * pex-msdos (funcs): Same.
+ * functions.texi: Regenerated.
2006-04-10 Jim Blandy <jimb@codesourcery.com>
@@ -6735,7 +7029,7 @@ Wed Aug 19 14:40:34 1992 Ian Lance Taylor (ian@cygnus.com)
Mon Aug 10 17:33:40 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
- * Makefile.in: clean up definition of CFILES, more comments
+ * Makefile.in: clean up definition of CFILES, more comments
Sat Aug 8 23:10:59 1992 Fred Fish (fnf@cygnus.com)
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
index 95a82784b0b7..735f1e632d95 100644
--- a/libiberty/Makefile.in
+++ b/libiberty/Makefile.in
@@ -1,6 +1,6 @@
#
# Makefile
-# Copyright (C) 1990, 91-99, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Copyright (C) 1990, 91-99, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
# Free Software Foundation
#
# This file is part of the libiberty library.
@@ -131,8 +131,8 @@ CFILES = alloca.c argv.c asprintf.c atexit.c \
calloc.c choose-temp.c clock.c concat.c cp-demangle.c \
cp-demint.c cplus-dem.c \
dyn-string.c \
- fdmatch.c ffs.c fibheap.c floatformat.c fnmatch.c \
- fopen_unlocked.c \
+ fdmatch.c ffs.c fibheap.c filename_cmp.c floatformat.c \
+ fnmatch.c fopen_unlocked.c \
getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c \
gettimeofday.c \
hashtab.c hex.c \
@@ -165,8 +165,8 @@ REQUIRED_OFILES = ./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o \
./alloca.o ./argv.o \
./choose-temp.o ./concat.o ./cp-demint.o \
./dyn-string.o \
- ./fdmatch.o ./fibheap.o ./floatformat.o ./fnmatch.o \
- ./fopen_unlocked.o \
+ ./fdmatch.o ./fibheap.o ./filename_cmp.o ./floatformat.o \
+ ./fnmatch.o ./fopen_unlocked.o \
./getopt.o ./getopt1.o ./getpwd.o ./getruntime.o \
./hashtab.o ./hex.o \
./lbasename.o ./lrealpath.o \
@@ -246,6 +246,24 @@ install-info: install-info-subdir
clean-info: clean-info-subdir
dvi: libiberty.dvi dvi-subdir
+LIBIBERTY_PDFFILES = libiberty.pdf
+
+pdf: $(LIBIBERTY_PDFFILES) pdf-subdir
+
+.PHONY: install-pdf
+
+pdf__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+
+install-pdf: $(LIBIBERTY_PDFFILES)
+ @$(NORMAL_INSTALL)
+ test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)"
+ @list='$(LIBIBERTY_PDFFILES)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(pdf__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
# html, install-html targets
HTMLS = libiberty.html
@@ -319,6 +337,9 @@ libiberty.info : $(srcdir)/libiberty.texi $(TEXISRC)
libiberty.dvi : $(srcdir)/libiberty.texi $(TEXISRC)
texi2dvi $(srcdir)/libiberty.texi
+libiberty.pdf : $(srcdir)/libiberty.texi $(TEXISRC)
+ texi2pdf $(srcdir)/libiberty.texi
+
libiberty.html : $(srcdir)/libiberty.texi $(TEXISRC)
$(MAKEINFO) --no-split --html -I$(srcdir) -o $@ $<
@@ -332,15 +353,20 @@ libiberty.html : $(srcdir)/libiberty.texi $(TEXISRC)
INSTALL_DEST = @INSTALL_DEST@
install: install_to_$(INSTALL_DEST) install-subdir
+# This is tricky. Even though CC in the Makefile contains
+# multilib-specific flags, it's overridden by FLAGS_TO_PASS from the
+# default multilib, so we have to take LIBCFLAGS into account as well,
+# since it will be passed the multilib flags.
+MULTIOSDIR = `$(CC) $(LIBCFLAGS) -print-multi-os-directory`
install_to_libdir: all
- ${mkinstalldirs} $(DESTDIR)$(libdir)$(MULTISUBDIR)
- $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)n
- ( cd $(DESTDIR)$(libdir)$(MULTISUBDIR) ; $(RANLIB) $(TARGETLIB)n )
- mv -f $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)
+ ${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR)
+ $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n
+ ( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n )
+ mv -f $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)
if test -n "${target_header_dir}"; then \
case "${target_header_dir}" in \
/*) thd=${target_header_dir};; \
- *) thd=${includedir}${MULTISUBDIR}/${target_header_dir};; \
+ *) thd=${includedir}/${target_header_dir};; \
esac; \
${mkinstalldirs} $(DESTDIR)$${thd}; \
for h in ${INSTALLED_HEADERS}; do \
@@ -349,15 +375,10 @@ install_to_libdir: all
fi
@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
-# This is tricky. Even though CC in the Makefile contains
-# multilib-specific flags, it's overridden by FLAGS_TO_PASS from the
-# default multilib, so we have to take LIBCFLAGS into account as well,
-# since it will be passed the multilib flags.
-MULTIOSDIR = `$(CC) $(LIBCFLAGS) -print-multi-os-directory`
install_to_tooldir: all
${mkinstalldirs} $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)
$(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n
- ( cd $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) ; $(RANLIB) $(TARGETLIB)n )
+ ( cd $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n; $(RANLIB) $(TARGETLIB)n )
mv -f $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)
@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
@@ -434,7 +455,7 @@ mostlyclean: mostlyclean-subdir
clean: clean-subdir
$(MAKE) SUBDIRS="" mostlyclean
-rm -f *.a required-list tmpmulti.out
- -rm -f libiberty.dvi libiberty.info* libiberty.html
+ -rm -f libiberty.dvi libiberty.pdf libiberty.info* libiberty.html
@$(MULTICLEAN) multi-clean DO=clean
distclean: distclean-subdir
$(MAKE) SUBDIRS="" clean
@@ -463,7 +484,7 @@ config.status: $(srcdir)/configure
# if needed. This prevents problems with parallel builds, in case
# subdirectories need to run config.status also.
all-subdir check-subdir installcheck-subdir info-subdir \
-install-info-subdir clean-info-subdir dvi-subdir install-subdir \
+install-info-subdir clean-info-subdir dvi-subdir pdf-subdir install-subdir \
etags-subdir mostlyclean-subdir clean-subdir distclean-subdir \
maintainer-clean-subdir: config.h
@subdirs='$(SUBDIRS)'; \
@@ -630,6 +651,13 @@ $(CONFIGURED_OFILES): stamp-picdir
else true; fi
$(COMPILE.c) $(srcdir)/fibheap.c $(OUTPUT_OPTION)
+./filename_cmp.o: $(srcdir)/filename_cmp.c $(INCDIR)/filenames.h \
+ $(INCDIR)/safe-ctype.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/filename_cmp.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/filename_cmp.c $(OUTPUT_OPTION)
+
./floatformat.o: $(srcdir)/floatformat.c config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/floatformat.h $(INCDIR)/libiberty.h
if [ x"$(PICFLAG)" != x ]; then \
diff --git a/libiberty/aclocal.m4 b/libiberty/aclocal.m4
index 0b49d0321228..643939e9d78e 100644
--- a/libiberty/aclocal.m4
+++ b/libiberty/aclocal.m4
@@ -1,5 +1,6 @@
sinclude(../config/acx.m4)
sinclude(../config/no-executables.m4)
+sinclude(../config/warnings.m4)
dnl See whether strncmp reads past the end of its string parameters.
dnl On some versions of SunOS4 at least, strncmp reads a word at a time
diff --git a/libiberty/argv.c b/libiberty/argv.c
index 11ca549a8ea9..a04f50d7f491 100644
--- a/libiberty/argv.c
+++ b/libiberty/argv.c
@@ -290,6 +290,62 @@ char **buildargv (const char *input)
/*
+@deftypefn Extension int writeargv (const char **@var{argv}, FILE *@{file})
+
+Write each member of ARGV, handling all necessary quoting, to the file
+named by FILE, separated by whitespace. Return 0 on success, non-zero
+if an error occurred while writing to FILE.
+
+@end deftypefn
+
+*/
+
+int
+writeargv (char **argv, FILE *f)
+{
+ int status = 0;
+
+ if (f == NULL)
+ return 1;
+
+ while (*argv != NULL)
+ {
+ int ret;
+ const char *arg = *argv;
+
+ while (*arg != EOS)
+ {
+ char c = *arg;
+
+ if (ISSPACE(c) || c == '\\' || c == '\'' || c == '"')
+ if (EOF == fputc ('\\', f))
+ {
+ status = 1;
+ goto done;
+ }
+
+ if (EOF == fputc (c, f))
+ {
+ status = 1;
+ goto done;
+ }
+ arg++;
+ }
+
+ if (EOF == fputc ('\n', f))
+ {
+ status = 1;
+ goto done;
+ }
+ argv++;
+ }
+
+ done:
+ return status;
+}
+
+/*
+
@deftypefn Extension void expandargv (int *@var{argcp}, char ***@var{argvp})
The @var{argcp} and @code{argvp} arguments are pointers to the usual
@@ -312,9 +368,7 @@ operating system to free the memory when the program exits.
*/
void
-expandargv (argcp, argvp)
- int *argcp;
- char ***argvp;
+expandargv (int *argcp, char ***argvp)
{
/* The argument we are currently processing. */
int i = 0;
diff --git a/libiberty/bcopy.c b/libiberty/bcopy.c
index 1e2eca9c6417..f9b7a8acd5c7 100644
--- a/libiberty/bcopy.c
+++ b/libiberty/bcopy.c
@@ -16,8 +16,8 @@ bcopy (const void *src, void *dest, size_t len)
{
if (dest < src)
{
- const char *firsts = src;
- char *firstd = dest;
+ const char *firsts = (const char *) src;
+ char *firstd = (char *) dest;
while (len--)
*firstd++ = *firsts++;
}
diff --git a/libiberty/choose-temp.c b/libiberty/choose-temp.c
index 0cba9905d5bb..b1c2e5b66ba5 100644
--- a/libiberty/choose-temp.c
+++ b/libiberty/choose-temp.c
@@ -46,7 +46,7 @@ find one. The current directory is chosen if all else fails so the
program is exited if a temporary directory can't be found (@code{mktemp}
fails). The buffer for the result is obtained with @code{xmalloc}.
-This function is provided for backwards compatability only. Its use is
+This function is provided for backwards compatibility only. Its use is
not recommended.
@end deftypefn
@@ -65,8 +65,7 @@ choose_temp_base (void)
strcpy (temp_filename, base);
strcpy (temp_filename + len, TEMP_FILE);
- mktemp (temp_filename);
- if (strlen (temp_filename) == 0)
+ if (mktemp (temp_filename) == 0)
abort ();
return temp_filename;
}
diff --git a/libiberty/configure b/libiberty/configure
index ed7423a006e7..0312cc418d29 100755
--- a/libiberty/configure
+++ b/libiberty/configure
@@ -847,6 +847,7 @@ Optional Features:
--enable-maintainer-mode
enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
+ --enable-multilib build many library versions (default)
--enable-install-libiberty Install headers for end users
Optional Packages:
@@ -1727,6 +1728,29 @@ else
fi
+# Add --enable-multilib to configure.
+# Default to --enable-multilib
+# Check whether --enable-multilib or --disable-multilib was given.
+if test "${enable_multilib+set}" = set; then
+ enableval="$enable_multilib"
+ case "$enableval" in
+ yes) multilib=yes ;;
+ no) multilib=no ;;
+ *) { { echo "$as_me:$LINENO: error: bad value $enableval for multilib option" >&5
+echo "$as_me: error: bad value $enableval for multilib option" >&2;}
+ { (exit 1); exit 1; }; } ;;
+ esac
+else
+ multilib=yes
+fi;
+
+# Even if the default multilib is not a cross compilation,
+# it may be that some of the other multilibs are.
+if test $cross_compiling = no && test $multilib = yes \
+ && test "x${with_multisubdir}" != x ; then
+ cross_compiling=maybe
+fi
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -2929,22 +2953,33 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
ac_c_preproc_warn_flag=yes
-# Warn C++ incompatibilities if supported.
-echo "$as_me:$LINENO: checking whether ${CC} accepts -Wc++-compat" >&5
-echo $ECHO_N "checking whether ${CC} accepts -Wc++-compat... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_w_cxx_compat+set}" = set; then
+ac_libiberty_warn_cflags=
+save_CFLAGS="$CFLAGS"
+for option in -W -Wall -Wwrite-strings -Wc++-compat \
+ -Wstrict-prototypes; do
+ as_acx_Woption=`echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh`
+
+ echo "$as_me:$LINENO: checking whether $CC supports $option" >&5
+echo $ECHO_N "checking whether $CC supports $option... $ECHO_C" >&6
+if eval "test \"\${$as_acx_Woption+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- save_CFLAGS="$CFLAGS"
- CFLAGS="-Wc++-compat"
- cat >conftest.$ac_ext <<_ACEOF
+ CFLAGS="$option"
+ 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
@@ -2968,29 +3003,91 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_prog_cc_w_cxx_compat=yes
+ eval "$as_acx_Woption=yes"
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_prog_cc_w_cxx_compat=no
+eval "$as_acx_Woption=no"
fi
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- CFLAGS="$save_CFLAGS"
fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_w_cxx_compat" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_w_cxx_compat" >&6
+echo "$as_me:$LINENO: result: `eval echo '${'$as_acx_Woption'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_acx_Woption'}'`" >&6
+ if test `eval echo '${'$as_acx_Woption'}'` = yes; then
+ ac_libiberty_warn_cflags="$ac_libiberty_warn_cflags${ac_libiberty_warn_cflags:+ }$option"
+fi
+
+ done
+CFLAGS="$save_CFLAGS"
+
+if test "$GCC" = yes; then
+ echo "$as_me:$LINENO: checking whether $CC supports -pedantic " >&5
+echo $ECHO_N "checking whether $CC supports -pedantic ... $ECHO_C" >&6
+if test "${acx_cv_prog_cc_pedantic_+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ save_CFLAGS="$CFLAGS"
+CFLAGS="-pedantic "
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+int
+main ()
+{
-if test x$GCC = xyes; then
- ac_libiberty_warn_cflags='-W -Wall -pedantic -Wwrite-strings -Wstrict-prototypes'
+ ;
+ 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
+ acx_cv_prog_cc_pedantic_=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+acx_cv_prog_cc_pedantic_=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS="$save_CFLAGS"
fi
-if test $ac_cv_prog_cc_w_cxx_compat = yes ; then
- ac_libiberty_warn_cflags="${ac_libiberty_warn_cflags} -Wc++-compat"
+echo "$as_me:$LINENO: result: $acx_cv_prog_cc_pedantic_" >&5
+echo "${ECHO_T}$acx_cv_prog_cc_pedantic_" >&6
+if test $acx_cv_prog_cc_pedantic_ = yes; then
+ ac_libiberty_warn_cflags="$ac_libiberty_warn_cflags${ac_libiberty_warn_cflags:+ }-pedantic "
fi
+fi
+
+
+
if test "x$CC" != xcc; then
echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6
@@ -5679,6 +5776,208 @@ _ACEOF
fi
+ # If we are being configured for Mingw, we know which functions
+ # Mingw provides and which ones we will be expected to provide.
+
+ case "${host}" in
+ *-*-mingw*)
+ case $LIBOBJS in
+ "asprintf.$ac_objext" | \
+ *" asprintf.$ac_objext" | \
+ "asprintf.$ac_objext "* | \
+ *" asprintf.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS asprintf.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "basename.$ac_objext" | \
+ *" basename.$ac_objext" | \
+ "basename.$ac_objext "* | \
+ *" basename.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS basename.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "bcmp.$ac_objext" | \
+ *" bcmp.$ac_objext" | \
+ "bcmp.$ac_objext "* | \
+ *" bcmp.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS bcmp.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "bcopy.$ac_objext" | \
+ *" bcopy.$ac_objext" | \
+ "bcopy.$ac_objext "* | \
+ *" bcopy.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS bcopy.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "bzero.$ac_objext" | \
+ *" bzero.$ac_objext" | \
+ "bzero.$ac_objext "* | \
+ *" bzero.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS bzero.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "clock.$ac_objext" | \
+ *" clock.$ac_objext" | \
+ "clock.$ac_objext "* | \
+ *" clock.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS clock.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "ffs.$ac_objext" | \
+ *" ffs.$ac_objext" | \
+ "ffs.$ac_objext "* | \
+ *" ffs.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS ffs.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "getpagesize.$ac_objext" | \
+ *" getpagesize.$ac_objext" | \
+ "getpagesize.$ac_objext "* | \
+ *" getpagesize.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS getpagesize.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "index.$ac_objext" | \
+ *" index.$ac_objext" | \
+ "index.$ac_objext "* | \
+ *" index.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS index.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "insque.$ac_objext" | \
+ *" insque.$ac_objext" | \
+ "insque.$ac_objext "* | \
+ *" insque.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS insque.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "mempcpy.$ac_objext" | \
+ *" mempcpy.$ac_objext" | \
+ "mempcpy.$ac_objext "* | \
+ *" mempcpy.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS mempcpy.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "mkstemps.$ac_objext" | \
+ *" mkstemps.$ac_objext" | \
+ "mkstemps.$ac_objext "* | \
+ *" mkstemps.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS mkstemps.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "random.$ac_objext" | \
+ *" random.$ac_objext" | \
+ "random.$ac_objext "* | \
+ *" random.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS random.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "rindex.$ac_objext" | \
+ *" rindex.$ac_objext" | \
+ "rindex.$ac_objext "* | \
+ *" rindex.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS rindex.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "sigsetmask.$ac_objext" | \
+ *" sigsetmask.$ac_objext" | \
+ "sigsetmask.$ac_objext "* | \
+ *" sigsetmask.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS sigsetmask.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "stpcpy.$ac_objext" | \
+ *" stpcpy.$ac_objext" | \
+ "stpcpy.$ac_objext "* | \
+ *" stpcpy.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS stpcpy.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "stpncpy.$ac_objext" | \
+ *" stpncpy.$ac_objext" | \
+ "stpncpy.$ac_objext "* | \
+ *" stpncpy.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS stpncpy.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "strndup.$ac_objext" | \
+ *" strndup.$ac_objext" | \
+ "strndup.$ac_objext "* | \
+ *" strndup.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strndup.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "strverscmp.$ac_objext" | \
+ *" strverscmp.$ac_objext" | \
+ "strverscmp.$ac_objext "* | \
+ *" strverscmp.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strverscmp.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "vasprintf.$ac_objext" | \
+ *" vasprintf.$ac_objext" | \
+ "vasprintf.$ac_objext "* | \
+ *" vasprintf.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "waitpid.$ac_objext" | \
+ *" waitpid.$ac_objext" | \
+ "waitpid.$ac_objext "* | \
+ *" waitpid.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS waitpid.$ac_objext" ;;
+esac
+
+
+ for f in $funcs; do
+ case "$f" in
+ asprintf | basename | bcmp | bcopy | bzero | clock | ffs | getpagesize | index | insque | mempcpy | mkstemps | random | rindex | sigsetmask | stpcpy | stpncpy | strdup | strndup | strverscmp | vasprintf | waitpid)
+ ;;
+ *)
+ n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >>confdefs.h <<_ACEOF
+#define $n 1
+_ACEOF
+
+ ;;
+ esac
+ done
+
+ # Mingw doesnt provide any of the variables in $vars, so we
+ # dont have to check them here.
+
+ # Of the functions in $checkfuncs, Mingw only has strerror.
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRERROR 1
+_ACEOF
+
+
+ setobjs=yes
+ ;;
+
+ esac
+
# We may wish to install the target headers somewhere.
# Check whether --enable-install-libiberty or --disable-install-libiberty was given.
if test "${enable_install_libiberty+set}" = set; then
@@ -5840,6 +6139,26 @@ _ACEOF
setobjs=yes
;;
+ *-*-msdosdjgpp)
+ for f in atexit basename bcmp bcopy bsearch bzero calloc clock ffs \
+ getcwd getpagesize getrusage gettimeofday gettimeofday \
+ index insque memchr memcmp memcpy memmove memset psignal \
+ putenv random rename rindex sbrk setenv stpcpy strcasecmp \
+ strchr strdup strerror strncasecmp strrchr strstr strtod \
+ strtol strtoul sysconf times tmpnam vfprintf vprintf \
+ vsprintf waitpid
+ do
+ n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >>confdefs.h <<_ACEOF
+#define $n 1
+_ACEOF
+
+ done
+
+
+ setobjs=yes
+ ;;
+
esac
fi
diff --git a/libiberty/configure.ac b/libiberty/configure.ac
index 76cf3d5333f6..371864e1e7a2 100644
--- a/libiberty/configure.ac
+++ b/libiberty/configure.ac
@@ -109,30 +109,32 @@ dnl to call AC_CHECK_PROG.
AC_CHECK_TOOL(AR, ar)
AC_CHECK_TOOL(RANLIB, ranlib, :)
+dnl When switching to automake, replace the following with AM_ENABLE_MULTILIB.
+# Add --enable-multilib to configure.
+# Default to --enable-multilib
+AC_ARG_ENABLE(multilib,
+[ --enable-multilib build many library versions (default)],
+[case "$enableval" in
+ yes) multilib=yes ;;
+ no) multilib=no ;;
+ *) AC_MSG_ERROR([bad value $enableval for multilib option]) ;;
+ esac],
+ [multilib=yes])
+
+# Even if the default multilib is not a cross compilation,
+# it may be that some of the other multilibs are.
+if test $cross_compiling = no && test $multilib = yes \
+ && test "x${with_multisubdir}" != x ; then
+ cross_compiling=maybe
+fi
+
GCC_NO_EXECUTABLES
AC_PROG_CC
AC_PROG_CPP_WERROR
-# Warn C++ incompatibilities if supported.
-AC_CACHE_CHECK(
- [whether ${CC} accepts -Wc++-compat],
- [ac_cv_prog_cc_w_cxx_compat],
- [save_CFLAGS="$CFLAGS"
- CFLAGS="-Wc++-compat"
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([[]])],
- [ac_cv_prog_cc_w_cxx_compat=yes],
- [ac_cv_prog_cc_w_cxx_compat=no])
- CFLAGS="$save_CFLAGS"
- ])
-
-
-if test x$GCC = xyes; then
- ac_libiberty_warn_cflags='-W -Wall -pedantic -Wwrite-strings -Wstrict-prototypes'
-fi
-if test $ac_cv_prog_cc_w_cxx_compat = yes ; then
- ac_libiberty_warn_cflags="${ac_libiberty_warn_cflags} -Wc++-compat"
-fi
-AC_SUBST(ac_libiberty_warn_cflags)
+ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wwrite-strings -Wc++-compat \
+ -Wstrict-prototypes], [ac_libiberty_warn_cflags])
+ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([], [ac_libiberty_warn_cflags])
AC_PROG_CC_C_O
# autoconf is lame and doesn't give us any substitution variable for this.
@@ -419,6 +421,55 @@ if test -n "${with_target_subdir}"; then
fi
+ # If we are being configured for Mingw, we know which functions
+ # Mingw provides and which ones we will be expected to provide.
+
+ case "${host}" in
+ *-*-mingw*)
+ AC_LIBOBJ([asprintf])
+ AC_LIBOBJ([basename])
+ AC_LIBOBJ([bcmp])
+ AC_LIBOBJ([bcopy])
+ AC_LIBOBJ([bzero])
+ AC_LIBOBJ([clock])
+ AC_LIBOBJ([ffs])
+ AC_LIBOBJ([getpagesize])
+ AC_LIBOBJ([index])
+ AC_LIBOBJ([insque])
+ AC_LIBOBJ([mempcpy])
+ AC_LIBOBJ([mkstemps])
+ AC_LIBOBJ([random])
+ AC_LIBOBJ([rindex])
+ AC_LIBOBJ([sigsetmask])
+ AC_LIBOBJ([stpcpy])
+ AC_LIBOBJ([stpncpy])
+ AC_LIBOBJ([strndup])
+ AC_LIBOBJ([strverscmp])
+ AC_LIBOBJ([vasprintf])
+ AC_LIBOBJ([waitpid])
+
+ for f in $funcs; do
+ case "$f" in
+ asprintf | basename | bcmp | bcopy | bzero | clock | ffs | getpagesize | index | insque | mempcpy | mkstemps | random | rindex | sigsetmask | stpcpy | stpncpy | strdup | strndup | strverscmp | vasprintf | waitpid)
+ ;;
+ *)
+ n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ AC_DEFINE_UNQUOTED($n)
+ ;;
+ esac
+ done
+
+ # Mingw doesnt provide any of the variables in $vars, so we
+ # dont have to check them here.
+
+ # Of the functions in $checkfuncs, Mingw only has strerror.
+ AC_DEFINE(HAVE_STRERROR)
+
+ setobjs=yes
+ ;;
+
+ esac
+
# We may wish to install the target headers somewhere.
AC_ARG_ENABLE(install-libiberty,
[ --enable-install-libiberty Install headers for end users],
@@ -496,6 +547,23 @@ if test -z "${setobjs}"; then
setobjs=yes
;;
+ *-*-msdosdjgpp)
+ for f in atexit basename bcmp bcopy bsearch bzero calloc clock ffs \
+ getcwd getpagesize getrusage gettimeofday gettimeofday \
+ index insque memchr memcmp memcpy memmove memset psignal \
+ putenv random rename rindex sbrk setenv stpcpy strcasecmp \
+ strchr strdup strerror strncasecmp strrchr strstr strtod \
+ strtol strtoul sysconf times tmpnam vfprintf vprintf \
+ vsprintf waitpid
+ do
+ n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ AC_DEFINE_UNQUOTED($n)
+ done
+
+
+ setobjs=yes
+ ;;
+
esac
fi
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index 109d533b524e..992b3580bf7c 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -1,5 +1,5 @@
/* Demangler for g++ V3 ABI.
- Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@wasabisystems.com>.
This file is part of the libiberty library, which is part of GCC.
@@ -42,6 +42,10 @@
This file will normally define the following functions, q.v.:
char *cplus_demangle_v3(const char *mangled, int options)
char *java_demangle_v3(const char *mangled)
+ int cplus_demangle_v3_callback(const char *mangled, int options,
+ demangle_callbackref callback)
+ int java_demangle_v3_callback(const char *mangled,
+ demangle_callbackref callback)
enum gnu_v3_ctor_kinds is_gnu_v3_mangled_ctor (const char *name)
enum gnu_v3_dtor_kinds is_gnu_v3_mangled_dtor (const char *name)
@@ -50,12 +54,14 @@
defined in demangle.h:
enum demangle_component_type
struct demangle_component
+ demangle_callbackref
and these functions defined in this file:
cplus_demangle_fill_name
cplus_demangle_fill_extended_operator
cplus_demangle_fill_ctor
cplus_demangle_fill_dtor
cplus_demangle_print
+ cplus_demangle_print_callback
and other functions defined in the file cp-demint.c.
This file also defines some other functions and variables which are
@@ -64,14 +70,20 @@
Preprocessor macros you can define while compiling this file:
IN_LIBGCC2
- If defined, this file defines the following function, q.v.:
+ If defined, this file defines the following functions, q.v.:
char *__cxa_demangle (const char *mangled, char *buf, size_t *len,
int *status)
- instead of cplus_demangle_v3() and java_demangle_v3().
+ int __gcclibcxx_demangle_callback (const char *,
+ void (*)
+ (const char *, size_t, void *),
+ void *)
+ instead of cplus_demangle_v3[_callback]() and
+ java_demangle_v3[_callback]().
IN_GLIBCPP_V3
- If defined, this file defines only __cxa_demangle(), and no other
- publically visible functions or variables.
+ If defined, this file defines only __cxa_demangle() and
+ __gcclibcxx_demangle_callback(), and no other publically visible
+ functions or variables.
STANDALONE_DEMANGLER
If defined, this file defines a main() function which demangles
@@ -82,6 +94,10 @@
stdout about the mangled string. This is not generally useful.
*/
+#if defined (_AIX) && !defined (__GNUC__)
+ #pragma alloca
+#endif
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -95,6 +111,18 @@
#include <string.h>
#endif
+#ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+#else
+# ifndef alloca
+# ifdef __GNUC__
+# define alloca __builtin_alloca
+# else
+extern char *alloca ();
+# endif /* __GNUC__ */
+# endif /* alloca */
+#endif /* HAVE_ALLOCA_H */
+
#include "ansidecl.h"
#include "libiberty.h"
#include "demangle.h"
@@ -135,6 +163,10 @@ static struct demangle_component *d_type (struct d_info *);
#define cplus_demangle_print d_print
static char *d_print (int, const struct demangle_component *, int, size_t *);
+#define cplus_demangle_print_callback d_print_callback
+static int d_print_callback (int, const struct demangle_component *,
+ demangle_callbackref, void *);
+
#define cplus_demangle_init_info d_init_info
static void d_init_info (const char *, int, size_t, struct d_info *);
@@ -162,8 +194,8 @@ static void d_init_info (const char *, int, size_t, struct d_info *);
V3 demangler code.
As of this writing this file has the following undefined references
- when compiled with -DIN_GLIBCPP_V3: malloc, realloc, free, memcpy,
- strcpy, strcat, strlen. */
+ when compiled with -DIN_GLIBCPP_V3: realloc, free, memcpy, strcpy,
+ strcat, strlen. */
#define IS_DIGIT(c) ((c) >= '0' && (c) <= '9')
#define IS_UPPER(c) ((c) >= 'A' && (c) <= 'Z')
@@ -228,58 +260,46 @@ struct d_print_mod
struct d_print_template *templates;
};
-/* We use this structure to hold information during printing. */
+/* We use these structures to hold information during printing. */
-struct d_print_info
+struct d_growable_string
{
- /* The options passed to the demangler. */
- int options;
/* Buffer holding the result. */
char *buf;
/* Current length of data in buffer. */
size_t len;
/* Allocated size of buffer. */
size_t alc;
+ /* Set to 1 if we had a memory allocation failure. */
+ int allocation_failure;
+};
+
+enum { D_PRINT_BUFFER_LENGTH = 256 };
+struct d_print_info
+{
+ /* The options passed to the demangler. */
+ int options;
+ /* Fixed-length allocated buffer for demangled data, flushed to the
+ callback with a NUL termination once full. */
+ char buf[D_PRINT_BUFFER_LENGTH];
+ /* Current length of data in buffer. */
+ size_t len;
+ /* The last character printed, saved individually so that it survives
+ any buffer flush. */
+ char last_char;
+ /* Callback function to handle demangled buffer flush. */
+ demangle_callbackref callback;
+ /* Opaque callback argument. */
+ void *opaque;
/* The current list of templates, if any. */
struct d_print_template *templates;
/* The current list of modifiers (e.g., pointer, reference, etc.),
if any. */
struct d_print_mod *modifiers;
- /* Set to 1 if we had a memory allocation failure. */
- int allocation_failure;
+ /* Set to 1 if we saw a demangling error. */
+ int demangle_failure;
};
-#define d_print_saw_error(dpi) ((dpi)->buf == NULL)
-
-#define d_append_char(dpi, c) \
- do \
- { \
- if ((dpi)->buf != NULL && (dpi)->len < (dpi)->alc) \
- (dpi)->buf[(dpi)->len++] = (c); \
- else \
- d_print_append_char ((dpi), (c)); \
- } \
- while (0)
-
-#define d_append_buffer(dpi, s, l) \
- do \
- { \
- if ((dpi)->buf != NULL && (dpi)->len + (l) <= (dpi)->alc) \
- { \
- memcpy ((dpi)->buf + (dpi)->len, (s), (l)); \
- (dpi)->len += l; \
- } \
- else \
- d_print_append_buffer ((dpi), (s), (l)); \
- } \
- while (0)
-
-#define d_append_string_constant(dpi, s) \
- d_append_buffer (dpi, (s), sizeof (s) - 1)
-
-#define d_last_char(dpi) \
- ((dpi)->buf == NULL || (dpi)->len == 0 ? '\0' : (dpi)->buf[(dpi)->len - 1])
-
#ifdef CP_DEMANGLE_DEBUG
static void d_dump (struct demangle_component *, int);
#endif
@@ -389,14 +409,34 @@ d_add_substitution (struct d_info *, struct demangle_component *);
static struct demangle_component *d_substitution (struct d_info *, int);
-static void d_print_resize (struct d_print_info *, size_t);
+static void d_growable_string_init (struct d_growable_string *, size_t);
-static void d_print_append_char (struct d_print_info *, int);
+static inline void
+d_growable_string_resize (struct d_growable_string *, size_t);
+
+static inline void
+d_growable_string_append_buffer (struct d_growable_string *,
+ const char *, size_t);
+static void
+d_growable_string_callback_adapter (const char *, size_t, void *);
static void
-d_print_append_buffer (struct d_print_info *, const char *, size_t);
+d_print_init (struct d_print_info *, int, demangle_callbackref, void *);
-static void d_print_error (struct d_print_info *);
+static inline void d_print_error (struct d_print_info *);
+
+static inline int d_print_saw_error (struct d_print_info *);
+
+static inline void d_print_flush (struct d_print_info *);
+
+static inline void d_append_char (struct d_print_info *, char);
+
+static inline void d_append_buffer (struct d_print_info *,
+ const char *, size_t);
+
+static inline void d_append_string (struct d_print_info *, const char *);
+
+static inline char d_last_char (struct d_print_info *);
static void
d_print_comp (struct d_print_info *, const struct demangle_component *);
@@ -426,6 +466,8 @@ d_print_expr_op (struct d_print_info *, const struct demangle_component *);
static void
d_print_cast (struct d_print_info *, const struct demangle_component *);
+static int d_demangle_callback (const char *, int,
+ demangle_callbackref, void *);
static char *d_demangle (const char *, int, size_t *);
#ifdef CP_DEMANGLE_DEBUG
@@ -436,7 +478,11 @@ d_dump (struct demangle_component *dc, int indent)
int i;
if (dc == NULL)
- return;
+ {
+ if (indent == 0)
+ printf ("failed demangling\n");
+ return;
+ }
for (i = 0; i < indent; ++i)
putchar (' ');
@@ -913,9 +959,9 @@ CP_STATIC_IF_GLIBCPP_V3
struct demangle_component *
cplus_demangle_mangled_name (struct d_info *di, int top_level)
{
- if (d_next_char (di) != '_')
+ if (! d_check_char (di, '_'))
return NULL;
- if (d_next_char (di) != 'Z')
+ if (! d_check_char (di, 'Z'))
return NULL;
return d_encoding (di, top_level);
}
@@ -1021,7 +1067,7 @@ d_encoding (struct d_info *di, int top_level)
}
peek = d_peek_char (di);
- if (peek == '\0' || peek == 'E')
+ if (dc == NULL || peek == '\0' || peek == 'E')
return dc;
return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc,
d_bare_function_type (di, has_return_type (dc)));
@@ -1054,6 +1100,9 @@ d_name (struct d_info *di)
case 'Z':
return d_local_name (di);
+ case 'L':
+ return d_unqualified_name (di);
+
case 'S':
{
int subst;
@@ -1123,7 +1172,7 @@ d_nested_name (struct d_info *di)
struct demangle_component *ret;
struct demangle_component **pret;
- if (d_next_char (di) != 'N')
+ if (! d_check_char (di, 'N'))
return NULL;
pret = d_cv_qualifiers (di, &ret, 1);
@@ -1134,7 +1183,7 @@ d_nested_name (struct d_info *di)
if (*pret == NULL)
return NULL;
- if (d_next_char (di) != 'E')
+ if (! d_check_char (di, 'E'))
return NULL;
return ret;
@@ -1174,7 +1223,8 @@ d_prefix (struct d_info *di)
if (IS_DIGIT (peek)
|| IS_LOWER (peek)
|| peek == 'C'
- || peek == 'D')
+ || peek == 'D'
+ || peek == 'L')
dc = d_unqualified_name (di);
else if (peek == 'S')
dc = d_substitution (di, 1);
@@ -1208,6 +1258,9 @@ d_prefix (struct d_info *di)
/* <unqualified-name> ::= <operator-name>
::= <ctor-dtor-name>
::= <source-name>
+ ::= <local-source-name>
+
+ <local-source-name> ::= L <source-name> <discriminator>
*/
static struct demangle_component *
@@ -1229,6 +1282,19 @@ d_unqualified_name (struct d_info *di)
}
else if (peek == 'C' || peek == 'D')
return d_ctor_dtor_name (di);
+ else if (peek == 'L')
+ {
+ struct demangle_component * ret;
+
+ d_advance (di, 1);
+
+ ret = d_source_name (di);
+ if (ret == NULL)
+ return NULL;
+ if (! d_discriminator (di))
+ return NULL;
+ return ret;
+ }
else
return NULL;
}
@@ -1449,11 +1515,8 @@ d_operator_name (struct d_info *di)
static struct demangle_component *
d_special_name (struct d_info *di)
{
- char c;
-
di->expansion += 20;
- c = d_next_char (di);
- if (c == 'T')
+ if (d_check_char (di, 'T'))
{
switch (d_next_char (di))
{
@@ -1502,7 +1565,7 @@ d_special_name (struct d_info *di)
offset = d_number (di);
if (offset < 0)
return NULL;
- if (d_next_char (di) != '_')
+ if (! d_check_char (di, '_'))
return NULL;
base_type = cplus_demangle_type (di);
/* We don't display the offset. FIXME: We should display
@@ -1523,7 +1586,7 @@ d_special_name (struct d_info *di)
return NULL;
}
}
- else if (c == 'G')
+ else if (d_check_char (di, 'G'))
{
switch (d_next_char (di))
{
@@ -1570,14 +1633,14 @@ d_call_offset (struct d_info *di, int c)
else if (c == 'v')
{
d_number (di);
- if (d_next_char (di) != '_')
+ if (! d_check_char (di, '_'))
return 0;
d_number (di);
}
else
return 0;
- if (d_next_char (di) != '_')
+ if (! d_check_char (di, '_'))
return 0;
return 1;
@@ -1601,13 +1664,13 @@ d_ctor_dtor_name (struct d_info *di)
else if (di->last_name->type == DEMANGLE_COMPONENT_SUB_STD)
di->expansion += di->last_name->u.s_string.len;
}
- switch (d_next_char (di))
+ switch (d_peek_char (di))
{
case 'C':
{
enum gnu_v3_ctor_kinds kind;
- switch (d_next_char (di))
+ switch (d_peek_next_char (di))
{
case '1':
kind = gnu_v3_complete_object_ctor;
@@ -1621,6 +1684,7 @@ d_ctor_dtor_name (struct d_info *di)
default:
return NULL;
}
+ d_advance (di, 2);
return d_make_ctor (di, kind, di->last_name);
}
@@ -1628,7 +1692,7 @@ d_ctor_dtor_name (struct d_info *di)
{
enum gnu_v3_dtor_kinds kind;
- switch (d_next_char (di))
+ switch (d_peek_next_char (di))
{
case '0':
kind = gnu_v3_deleting_dtor;
@@ -1642,6 +1706,7 @@ d_ctor_dtor_name (struct d_info *di)
default:
return NULL;
}
+ d_advance (di, 2);
return d_make_dtor (di, kind, di->last_name);
}
@@ -1735,7 +1800,7 @@ cplus_demangle_type (struct d_info *di)
if (pret == NULL)
return NULL;
*pret = cplus_demangle_type (di);
- if (! d_add_substitution (di, ret))
+ if (! *pret || ! d_add_substitution (di, ret))
return NULL;
return ret;
}
@@ -1925,7 +1990,7 @@ d_function_type (struct d_info *di)
{
struct demangle_component *ret;
- if (d_next_char (di) != 'F')
+ if (! d_check_char (di, 'F'))
return NULL;
if (d_peek_char (di) == 'Y')
{
@@ -1934,7 +1999,7 @@ d_function_type (struct d_info *di)
d_advance (di, 1);
}
ret = d_bare_function_type (di, 1);
- if (d_next_char (di) != 'E')
+ if (! d_check_char (di, 'E'))
return NULL;
return ret;
}
@@ -2021,7 +2086,7 @@ d_array_type (struct d_info *di)
char peek;
struct demangle_component *dim;
- if (d_next_char (di) != 'A')
+ if (! d_check_char (di, 'A'))
return NULL;
peek = d_peek_char (di);
@@ -2049,7 +2114,7 @@ d_array_type (struct d_info *di)
return NULL;
}
- if (d_next_char (di) != '_')
+ if (! d_check_char (di, '_'))
return NULL;
return d_make_comp (di, DEMANGLE_COMPONENT_ARRAY_TYPE, dim,
@@ -2065,7 +2130,7 @@ d_pointer_to_member_type (struct d_info *di)
struct demangle_component *mem;
struct demangle_component **pmem;
- if (d_next_char (di) != 'M')
+ if (! d_check_char (di, 'M'))
return NULL;
cl = cplus_demangle_type (di);
@@ -2081,12 +2146,23 @@ d_pointer_to_member_type (struct d_info *di)
g++ does not work that way. g++ treats only the CV-qualified
member function as a substitution source. FIXME. So to work
with g++, we need to pull off the CV-qualifiers here, in order to
- avoid calling add_substitution() in cplus_demangle_type(). */
+ avoid calling add_substitution() in cplus_demangle_type(). But
+ for a CV-qualified member which is not a function, g++ does
+ follow the ABI, so we need to handle that case here by calling
+ d_add_substitution ourselves. */
pmem = d_cv_qualifiers (di, &mem, 1);
if (pmem == NULL)
return NULL;
*pmem = cplus_demangle_type (di);
+ if (*pmem == NULL)
+ return NULL;
+
+ if (pmem != &mem && (*pmem)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
+ {
+ if (! d_add_substitution (di, mem))
+ return NULL;
+ }
return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem);
}
@@ -2100,7 +2176,7 @@ d_template_param (struct d_info *di)
{
long param;
- if (d_next_char (di) != 'T')
+ if (! d_check_char (di, 'T'))
return NULL;
if (d_peek_char (di) == '_')
@@ -2113,7 +2189,7 @@ d_template_param (struct d_info *di)
param += 1;
}
- if (d_next_char (di) != '_')
+ if (! d_check_char (di, '_'))
return NULL;
++di->did_subs;
@@ -2135,7 +2211,7 @@ d_template_args (struct d_info *di)
constructor or destructor. */
hold_last_name = di->last_name;
- if (d_next_char (di) != 'I')
+ if (! d_check_char (di, 'I'))
return NULL;
al = NULL;
@@ -2180,7 +2256,7 @@ d_template_arg (struct d_info *di)
case 'X':
d_advance (di, 1);
ret = d_expression (di);
- if (d_next_char (di) != 'E')
+ if (! d_check_char (di, 'E'))
return NULL;
return ret;
@@ -2307,7 +2383,7 @@ d_expr_primary (struct d_info *di)
{
struct demangle_component *ret;
- if (d_next_char (di) != 'L')
+ if (! d_check_char (di, 'L'))
return NULL;
if (d_peek_char (di) == '_')
ret = cplus_demangle_mangled_name (di, 0);
@@ -2353,7 +2429,7 @@ d_expr_primary (struct d_info *di)
}
ret = d_make_comp (di, t, type, d_make_name (di, s, d_str (di) - s));
}
- if (d_next_char (di) != 'E')
+ if (! d_check_char (di, 'E'))
return NULL;
return ret;
}
@@ -2367,12 +2443,12 @@ d_local_name (struct d_info *di)
{
struct demangle_component *function;
- if (d_next_char (di) != 'Z')
+ if (! d_check_char (di, 'Z'))
return NULL;
function = d_encoding (di, 0);
- if (d_next_char (di) != 'E')
+ if (! d_check_char (di, 'E'))
return NULL;
if (d_peek_char (di) == 's')
@@ -2477,7 +2553,7 @@ d_substitution (struct d_info *di, int prefix)
{
char c;
- if (d_next_char (di) != 'S')
+ if (! d_check_char (di, 'S'))
return NULL;
c = d_next_char (di);
@@ -2496,6 +2572,8 @@ d_substitution (struct d_info *di, int prefix)
id = id * 36 + c - 'A' + 10;
else
return NULL;
+ if (id < 0)
+ return NULL;
c = d_next_char (di);
}
while (c != '_');
@@ -2557,80 +2635,181 @@ d_substitution (struct d_info *di, int prefix)
}
}
-/* Resize the print buffer. */
+/* Initialize a growable string. */
static void
-d_print_resize (struct d_print_info *dpi, size_t add)
+d_growable_string_init (struct d_growable_string *dgs, size_t estimate)
{
- size_t need;
+ dgs->buf = NULL;
+ dgs->len = 0;
+ dgs->alc = 0;
+ dgs->allocation_failure = 0;
- if (dpi->buf == NULL)
+ if (estimate > 0)
+ d_growable_string_resize (dgs, estimate);
+}
+
+/* Grow a growable string to a given size. */
+
+static inline void
+d_growable_string_resize (struct d_growable_string *dgs, size_t need)
+{
+ size_t newalc;
+ char *newbuf;
+
+ if (dgs->allocation_failure)
return;
- need = dpi->len + add;
- while (need > dpi->alc)
- {
- size_t newalc;
- char *newbuf;
- newalc = dpi->alc * 2;
- newbuf = (char *) realloc (dpi->buf, newalc);
- if (newbuf == NULL)
- {
- free (dpi->buf);
- dpi->buf = NULL;
- dpi->allocation_failure = 1;
- return;
- }
- dpi->buf = newbuf;
- dpi->alc = newalc;
+ /* Start allocation at two bytes to avoid any possibility of confusion
+ with the special value of 1 used as a return in *palc to indicate
+ allocation failures. */
+ newalc = dgs->alc > 0 ? dgs->alc : 2;
+ while (newalc < need)
+ newalc <<= 1;
+
+ newbuf = (char *) realloc (dgs->buf, newalc);
+ if (newbuf == NULL)
+ {
+ free (dgs->buf);
+ dgs->buf = NULL;
+ dgs->len = 0;
+ dgs->alc = 0;
+ dgs->allocation_failure = 1;
+ return;
}
+ dgs->buf = newbuf;
+ dgs->alc = newalc;
}
-/* Append a character to the print buffer. */
+/* Append a buffer to a growable string. */
-static void
-d_print_append_char (struct d_print_info *dpi, int c)
+static inline void
+d_growable_string_append_buffer (struct d_growable_string *dgs,
+ const char *s, size_t l)
{
- if (dpi->buf != NULL)
- {
- if (dpi->len >= dpi->alc)
- {
- d_print_resize (dpi, 1);
- if (dpi->buf == NULL)
- return;
- }
+ size_t need;
- dpi->buf[dpi->len] = c;
- ++dpi->len;
- }
+ need = dgs->len + l + 1;
+ if (need > dgs->alc)
+ d_growable_string_resize (dgs, need);
+
+ if (dgs->allocation_failure)
+ return;
+
+ memcpy (dgs->buf + dgs->len, s, l);
+ dgs->buf[dgs->len + l] = '\0';
+ dgs->len += l;
}
-/* Append a buffer to the print buffer. */
+/* Bridge growable strings to the callback mechanism. */
static void
-d_print_append_buffer (struct d_print_info *dpi, const char *s, size_t l)
+d_growable_string_callback_adapter (const char *s, size_t l, void *opaque)
{
- if (dpi->buf != NULL)
- {
- if (dpi->len + l > dpi->alc)
- {
- d_print_resize (dpi, l);
- if (dpi->buf == NULL)
- return;
- }
+ struct d_growable_string *dgs = (struct d_growable_string*) opaque;
- memcpy (dpi->buf + dpi->len, s, l);
- dpi->len += l;
- }
+ d_growable_string_append_buffer (dgs, s, l);
}
-/* Indicate that an error occurred during printing. */
+/* Initialize a print information structure. */
static void
+d_print_init (struct d_print_info *dpi, int options,
+ demangle_callbackref callback, void *opaque)
+{
+ dpi->options = options;
+ dpi->len = 0;
+ dpi->last_char = '\0';
+ dpi->templates = NULL;
+ dpi->modifiers = NULL;
+
+ dpi->callback = callback;
+ dpi->opaque = opaque;
+
+ dpi->demangle_failure = 0;
+}
+
+/* Indicate that an error occurred during printing, and test for error. */
+
+static inline void
d_print_error (struct d_print_info *dpi)
{
- free (dpi->buf);
- dpi->buf = NULL;
+ dpi->demangle_failure = 1;
+}
+
+static inline int
+d_print_saw_error (struct d_print_info *dpi)
+{
+ return dpi->demangle_failure != 0;
+}
+
+/* Flush buffered characters to the callback. */
+
+static inline void
+d_print_flush (struct d_print_info *dpi)
+{
+ dpi->buf[dpi->len] = '\0';
+ dpi->callback (dpi->buf, dpi->len, dpi->opaque);
+ dpi->len = 0;
+}
+
+/* Append characters and buffers for printing. */
+
+static inline void
+d_append_char (struct d_print_info *dpi, char c)
+{
+ if (dpi->len == sizeof (dpi->buf) - 1)
+ d_print_flush (dpi);
+
+ dpi->buf[dpi->len++] = c;
+ dpi->last_char = c;
+}
+
+static inline void
+d_append_buffer (struct d_print_info *dpi, const char *s, size_t l)
+{
+ size_t i;
+
+ for (i = 0; i < l; i++)
+ d_append_char (dpi, s[i]);
+}
+
+static inline void
+d_append_string (struct d_print_info *dpi, const char *s)
+{
+ d_append_buffer (dpi, s, strlen (s));
+}
+
+static inline char
+d_last_char (struct d_print_info *dpi)
+{
+ return dpi->last_char;
+}
+
+/* Turn components into a human readable string. OPTIONS is the
+ options bits passed to the demangler. DC is the tree to print.
+ CALLBACK is a function to call to flush demangled string segments
+ as they fill the intermediate buffer, and OPAQUE is a generalized
+ callback argument. On success, this returns 1. On failure,
+ it returns 0, indicating a bad parse. It does not use heap
+ memory to build an output string, so cannot encounter memory
+ allocation failure. */
+
+CP_STATIC_IF_GLIBCPP_V3
+int
+cplus_demangle_print_callback (int options,
+ const struct demangle_component *dc,
+ demangle_callbackref callback, void *opaque)
+{
+ struct d_print_info dpi;
+
+ d_print_init (&dpi, options, callback, opaque);
+
+ d_print_comp (&dpi, dc);
+
+ d_print_flush (&dpi);
+
+ return ! d_print_saw_error (&dpi);
}
/* Turn components into a human readable string. OPTIONS is the
@@ -2646,34 +2825,21 @@ char *
cplus_demangle_print (int options, const struct demangle_component *dc,
int estimate, size_t *palc)
{
- struct d_print_info dpi;
+ struct d_growable_string dgs;
- dpi.options = options;
+ d_growable_string_init (&dgs, estimate);
- dpi.alc = estimate + 1;
- dpi.buf = (char *) malloc (dpi.alc);
- if (dpi.buf == NULL)
+ if (! cplus_demangle_print_callback (options, dc,
+ d_growable_string_callback_adapter,
+ &dgs))
{
- *palc = 1;
+ free (dgs.buf);
+ *palc = 0;
return NULL;
}
- dpi.len = 0;
- dpi.templates = NULL;
- dpi.modifiers = NULL;
-
- dpi.allocation_failure = 0;
-
- d_print_comp (&dpi, dc);
-
- d_append_char (&dpi, '\0');
-
- if (dpi.buf != NULL)
- *palc = dpi.alc;
- else
- *palc = dpi.allocation_failure;
-
- return dpi.buf;
+ *palc = dgs.allocation_failure ? 1 : dgs.alc;
+ return dgs.buf;
}
/* Subroutine to handle components. */
@@ -2703,7 +2869,7 @@ d_print_comp (struct d_print_info *dpi,
case DEMANGLE_COMPONENT_LOCAL_NAME:
d_print_comp (dpi, d_left (dc));
if ((dpi->options & DMGL_JAVA) == 0)
- d_append_string_constant (dpi, "::");
+ d_append_string (dpi, "::");
else
d_append_char (dpi, '.');
d_print_comp (dpi, d_right (dc));
@@ -2812,6 +2978,7 @@ d_print_comp (struct d_print_info *dpi,
case DEMANGLE_COMPONENT_TEMPLATE:
{
struct d_print_mod *hold_dpm;
+ struct demangle_component *dcl;
/* Don't push modifiers into a template definition. Doing so
could give the wrong definition for a template argument.
@@ -2820,16 +2987,32 @@ d_print_comp (struct d_print_info *dpi,
hold_dpm = dpi->modifiers;
dpi->modifiers = NULL;
- d_print_comp (dpi, d_left (dc));
- if (d_last_char (dpi) == '<')
- d_append_char (dpi, ' ');
- d_append_char (dpi, '<');
- d_print_comp (dpi, d_right (dc));
- /* Avoid generating two consecutive '>' characters, to avoid
- the C++ syntactic ambiguity. */
- if (d_last_char (dpi) == '>')
- d_append_char (dpi, ' ');
- d_append_char (dpi, '>');
+ dcl = d_left (dc);
+
+ if ((dpi->options & DMGL_JAVA) != 0
+ && dcl->type == DEMANGLE_COMPONENT_NAME
+ && dcl->u.s_name.len == 6
+ && strncmp (dcl->u.s_name.s, "JArray", 6) == 0)
+ {
+ /* Special-case Java arrays, so that JArray<TYPE> appears
+ instead as TYPE[]. */
+
+ d_print_comp (dpi, d_right (dc));
+ d_append_string (dpi, "[]");
+ }
+ else
+ {
+ d_print_comp (dpi, dcl);
+ if (d_last_char (dpi) == '<')
+ d_append_char (dpi, ' ');
+ d_append_char (dpi, '<');
+ d_print_comp (dpi, d_right (dc));
+ /* Avoid generating two consecutive '>' characters, to avoid
+ the C++ syntactic ambiguity. */
+ if (d_last_char (dpi) == '>')
+ d_append_char (dpi, ' ');
+ d_append_char (dpi, '>');
+ }
dpi->modifiers = hold_dpm;
@@ -2892,69 +3075,69 @@ d_print_comp (struct d_print_info *dpi,
return;
case DEMANGLE_COMPONENT_VTABLE:
- d_append_string_constant (dpi, "vtable for ");
+ d_append_string (dpi, "vtable for ");
d_print_comp (dpi, d_left (dc));
return;
case DEMANGLE_COMPONENT_VTT:
- d_append_string_constant (dpi, "VTT for ");
+ d_append_string (dpi, "VTT for ");
d_print_comp (dpi, d_left (dc));
return;
case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
- d_append_string_constant (dpi, "construction vtable for ");
+ d_append_string (dpi, "construction vtable for ");
d_print_comp (dpi, d_left (dc));
- d_append_string_constant (dpi, "-in-");
+ d_append_string (dpi, "-in-");
d_print_comp (dpi, d_right (dc));
return;
case DEMANGLE_COMPONENT_TYPEINFO:
- d_append_string_constant (dpi, "typeinfo for ");
+ d_append_string (dpi, "typeinfo for ");
d_print_comp (dpi, d_left (dc));
return;
case DEMANGLE_COMPONENT_TYPEINFO_NAME:
- d_append_string_constant (dpi, "typeinfo name for ");
+ d_append_string (dpi, "typeinfo name for ");
d_print_comp (dpi, d_left (dc));
return;
case DEMANGLE_COMPONENT_TYPEINFO_FN:
- d_append_string_constant (dpi, "typeinfo fn for ");
+ d_append_string (dpi, "typeinfo fn for ");
d_print_comp (dpi, d_left (dc));
return;
case DEMANGLE_COMPONENT_THUNK:
- d_append_string_constant (dpi, "non-virtual thunk to ");
+ d_append_string (dpi, "non-virtual thunk to ");
d_print_comp (dpi, d_left (dc));
return;
case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
- d_append_string_constant (dpi, "virtual thunk to ");
+ d_append_string (dpi, "virtual thunk to ");
d_print_comp (dpi, d_left (dc));
return;
case DEMANGLE_COMPONENT_COVARIANT_THUNK:
- d_append_string_constant (dpi, "covariant return thunk to ");
+ d_append_string (dpi, "covariant return thunk to ");
d_print_comp (dpi, d_left (dc));
return;
case DEMANGLE_COMPONENT_JAVA_CLASS:
- d_append_string_constant (dpi, "java Class for ");
+ d_append_string (dpi, "java Class for ");
d_print_comp (dpi, d_left (dc));
return;
case DEMANGLE_COMPONENT_GUARD:
- d_append_string_constant (dpi, "guard variable for ");
+ d_append_string (dpi, "guard variable for ");
d_print_comp (dpi, d_left (dc));
return;
case DEMANGLE_COMPONENT_REFTEMP:
- d_append_string_constant (dpi, "reference temporary for ");
+ d_append_string (dpi, "reference temporary for ");
d_print_comp (dpi, d_left (dc));
return;
case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
- d_append_string_constant (dpi, "hidden alias for ");
+ d_append_string (dpi, "hidden alias for ");
d_print_comp (dpi, d_left (dc));
return;
@@ -3153,7 +3336,7 @@ d_print_comp (struct d_print_info *dpi,
{
d_append_char (dpi, ' ');
d_print_comp (dpi, d_left (dc));
- d_append_string_constant (dpi, "::*");
+ d_append_string (dpi, "::*");
}
dpi->modifiers = dpm.next;
@@ -3166,7 +3349,7 @@ d_print_comp (struct d_print_info *dpi,
d_print_comp (dpi, d_left (dc));
if (d_right (dc) != NULL)
{
- d_append_string_constant (dpi, ", ");
+ d_append_string (dpi, ", ");
d_print_comp (dpi, d_right (dc));
}
return;
@@ -3175,7 +3358,7 @@ d_print_comp (struct d_print_info *dpi,
{
char c;
- d_append_string_constant (dpi, "operator");
+ d_append_string (dpi, "operator");
c = dc->u.s_operator.op->name[0];
if (IS_LOWER (c))
d_append_char (dpi, ' ');
@@ -3185,12 +3368,12 @@ d_print_comp (struct d_print_info *dpi,
}
case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
- d_append_string_constant (dpi, "operator ");
+ d_append_string (dpi, "operator ");
d_print_comp (dpi, dc->u.s_extended_operator.name);
return;
case DEMANGLE_COMPONENT_CAST:
- d_append_string_constant (dpi, "operator ");
+ d_append_string (dpi, "operator ");
d_print_cast (dpi, dc);
return;
@@ -3225,9 +3408,9 @@ d_print_comp (struct d_print_info *dpi,
d_append_char (dpi, '(');
d_print_comp (dpi, d_left (d_right (dc)));
- d_append_string_constant (dpi, ") ");
+ d_append_string (dpi, ") ");
d_print_expr_op (dpi, d_left (dc));
- d_append_string_constant (dpi, " (");
+ d_append_string (dpi, " (");
d_print_comp (dpi, d_right (d_right (dc)));
d_append_char (dpi, ')');
@@ -3252,11 +3435,11 @@ d_print_comp (struct d_print_info *dpi,
}
d_append_char (dpi, '(');
d_print_comp (dpi, d_left (d_right (dc)));
- d_append_string_constant (dpi, ") ");
+ d_append_string (dpi, ") ");
d_print_expr_op (dpi, d_left (dc));
- d_append_string_constant (dpi, " (");
+ d_append_string (dpi, " (");
d_print_comp (dpi, d_left (d_right (d_right (dc))));
- d_append_string_constant (dpi, ") : (");
+ d_append_string (dpi, ") : (");
d_print_comp (dpi, d_right (d_right (d_right (dc))));
d_append_char (dpi, ')');
return;
@@ -3301,13 +3484,13 @@ d_print_comp (struct d_print_info *dpi,
d_append_char (dpi, 'l');
break;
case D_PRINT_UNSIGNED_LONG:
- d_append_string_constant (dpi, "ul");
+ d_append_string (dpi, "ul");
break;
case D_PRINT_LONG_LONG:
- d_append_string_constant (dpi, "ll");
+ d_append_string (dpi, "ll");
break;
case D_PRINT_UNSIGNED_LONG_LONG:
- d_append_string_constant (dpi, "ull");
+ d_append_string (dpi, "ull");
break;
}
return;
@@ -3322,10 +3505,10 @@ d_print_comp (struct d_print_info *dpi,
switch (d_right (dc)->u.s_name.s[0])
{
case '0':
- d_append_string_constant (dpi, "false");
+ d_append_string (dpi, "false");
return;
case '1':
- d_append_string_constant (dpi, "true");
+ d_append_string (dpi, "true");
return;
default:
break;
@@ -3464,7 +3647,7 @@ d_print_mod_list (struct d_print_info *dpi,
dpi->modifiers = hold_modifiers;
if ((dpi->options & DMGL_JAVA) == 0)
- d_append_string_constant (dpi, "::");
+ d_append_string (dpi, "::");
else
d_append_char (dpi, '.');
@@ -3497,15 +3680,15 @@ d_print_mod (struct d_print_info *dpi,
{
case DEMANGLE_COMPONENT_RESTRICT:
case DEMANGLE_COMPONENT_RESTRICT_THIS:
- d_append_string_constant (dpi, " restrict");
+ d_append_string (dpi, " restrict");
return;
case DEMANGLE_COMPONENT_VOLATILE:
case DEMANGLE_COMPONENT_VOLATILE_THIS:
- d_append_string_constant (dpi, " volatile");
+ d_append_string (dpi, " volatile");
return;
case DEMANGLE_COMPONENT_CONST:
case DEMANGLE_COMPONENT_CONST_THIS:
- d_append_string_constant (dpi, " const");
+ d_append_string (dpi, " const");
return;
case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
d_append_char (dpi, ' ');
@@ -3520,16 +3703,16 @@ d_print_mod (struct d_print_info *dpi,
d_append_char (dpi, '&');
return;
case DEMANGLE_COMPONENT_COMPLEX:
- d_append_string_constant (dpi, "complex ");
+ d_append_string (dpi, "complex ");
return;
case DEMANGLE_COMPONENT_IMAGINARY:
- d_append_string_constant (dpi, "imaginary ");
+ d_append_string (dpi, "imaginary ");
return;
case DEMANGLE_COMPONENT_PTRMEM_TYPE:
if (d_last_char (dpi) != '(')
d_append_char (dpi, ' ');
d_print_comp (dpi, d_left (mod));
- d_append_string_constant (dpi, "::*");
+ d_append_string (dpi, "::*");
return;
case DEMANGLE_COMPONENT_TYPED_NAME:
d_print_comp (dpi, d_left (mod));
@@ -3662,7 +3845,7 @@ d_print_array_type (struct d_print_info *dpi,
}
if (need_paren)
- d_append_string_constant (dpi, " (");
+ d_append_string (dpi, " (");
d_print_mod_list (dpi, mods, 0);
@@ -3768,26 +3951,19 @@ cplus_demangle_init_info (const char *mangled, int options, size_t len,
di->expansion = 0;
}
-/* Entry point for the demangler. If MANGLED is a g++ v3 ABI mangled
- name, return a buffer allocated with malloc holding the demangled
- name. OPTIONS is the usual libiberty demangler options. On
- success, this sets *PALC to the allocated size of the returned
- buffer. On failure, this sets *PALC to 0 for a bad name, or 1 for
- a memory allocation failure. On failure, this returns NULL. */
+/* Internal implementation for the demangler. If MANGLED is a g++ v3 ABI
+ mangled name, return strings in repeated callback giving the demangled
+ name. OPTIONS is the usual libiberty demangler options. On success,
+ this returns 1. On failure, returns 0. */
-static char *
-d_demangle (const char* mangled, int options, size_t *palc)
+static int
+d_demangle_callback (const char *mangled, int options,
+ demangle_callbackref callback, void *opaque)
{
- size_t len;
int type;
struct d_info di;
struct demangle_component *dc;
- int estimate;
- char *ret;
-
- *palc = 0;
-
- len = strlen (mangled);
+ int status;
if (mangled[0] == '_' && mangled[1] == 'Z')
type = 0;
@@ -3796,57 +3972,41 @@ d_demangle (const char* mangled, int options, size_t *palc)
&& (mangled[9] == 'D' || mangled[9] == 'I')
&& mangled[10] == '_')
{
- char *r;
+ const char *intro;
- r = (char *) malloc (40 + len - 11);
- if (r == NULL)
- *palc = 1;
- else
- {
- if (mangled[9] == 'I')
- strcpy (r, "global constructors keyed to ");
- else
- strcpy (r, "global destructors keyed to ");
- strcat (r, mangled + 11);
- }
- return r;
+ intro = (mangled[9] == 'I')
+ ? "global constructors keyed to "
+ : "global destructors keyed to ";
+
+ callback (intro, strlen (intro), opaque);
+ callback (mangled + 11, strlen (mangled + 11), opaque);
+ return 1;
}
else
{
if ((options & DMGL_TYPES) == 0)
- return NULL;
+ return 0;
type = 1;
}
- cplus_demangle_init_info (mangled, options, len, &di);
+ cplus_demangle_init_info (mangled, options, strlen (mangled), &di);
{
#ifdef CP_DYNAMIC_ARRAYS
__extension__ struct demangle_component comps[di.num_comps];
__extension__ struct demangle_component *subs[di.num_subs];
- di.comps = &comps[0];
- di.subs = &subs[0];
+ di.comps = comps;
+ di.subs = subs;
#else
- di.comps = ((struct demangle_component *)
- malloc (di.num_comps * sizeof (struct demangle_component)));
- di.subs = ((struct demangle_component **)
- malloc (di.num_subs * sizeof (struct demangle_component *)));
- if (di.comps == NULL || di.subs == NULL)
- {
- if (di.comps != NULL)
- free (di.comps);
- if (di.subs != NULL)
- free (di.subs);
- *palc = 1;
- return NULL;
- }
+ di.comps = alloca (di.num_comps * sizeof (*di.comps));
+ di.subs = alloca (di.num_subs * sizeof (*di.subs));
#endif
- if (! type)
- dc = cplus_demangle_mangled_name (&di, 1);
- else
+ if (type)
dc = cplus_demangle_type (&di);
+ else
+ dc = cplus_demangle_mangled_name (&di, 1);
/* If DMGL_PARAMS is set, then if we didn't consume the entire
mangled string, then we didn't successfully demangle it. If
@@ -3856,46 +4016,43 @@ d_demangle (const char* mangled, int options, size_t *palc)
dc = NULL;
#ifdef CP_DEMANGLE_DEBUG
- if (dc == NULL)
- printf ("failed demangling\n");
- else
- d_dump (dc, 0);
+ d_dump (dc, 0);
#endif
- /* We try to guess the length of the demangled string, to minimize
- calls to realloc during demangling. */
- estimate = len + di.expansion + 10 * di.did_subs;
- estimate += estimate / 8;
+ status = (dc != NULL)
+ ? cplus_demangle_print_callback (options, dc, callback, opaque)
+ : 0;
+ }
- ret = NULL;
- if (dc != NULL)
- ret = cplus_demangle_print (options, dc, estimate, palc);
+ return status;
+}
-#ifndef CP_DYNAMIC_ARRAYS
- free (di.comps);
- free (di.subs);
-#endif
+/* Entry point for the demangler. If MANGLED is a g++ v3 ABI mangled
+ name, return a buffer allocated with malloc holding the demangled
+ name. OPTIONS is the usual libiberty demangler options. On
+ success, this sets *PALC to the allocated size of the returned
+ buffer. On failure, this sets *PALC to 0 for a bad name, or 1 for
+ a memory allocation failure, and returns NULL. */
-#ifdef CP_DEMANGLE_DEBUG
- if (ret != NULL)
- {
- int rlen;
-
- rlen = strlen (ret);
- if (rlen > 2 * estimate)
- printf ("*** Length %d much greater than estimate %d\n",
- rlen, estimate);
- else if (rlen > estimate)
- printf ("*** Length %d greater than estimate %d\n",
- rlen, estimate);
- else if (rlen < estimate / 2)
- printf ("*** Length %d much less than estimate %d\n",
- rlen, estimate);
- }
-#endif
- }
+static char *
+d_demangle (const char *mangled, int options, size_t *palc)
+{
+ struct d_growable_string dgs;
+ int status;
- return ret;
+ d_growable_string_init (&dgs, 0);
+
+ status = d_demangle_callback (mangled, options,
+ d_growable_string_callback_adapter, &dgs);
+ if (status == 0)
+ {
+ free (dgs.buf);
+ *palc = 0;
+ return NULL;
+ }
+
+ *palc = dgs.allocation_failure ? 1 : 0;
+ return dgs.buf;
}
#if defined(IN_LIBGCC2) || defined(IN_GLIBCPP_V3)
@@ -3912,7 +4069,7 @@ extern char *__cxa_demangle (const char *, char *, size_t *, int *);
OUTPUT_BUFFER may instead be NULL; in that case, the demangled name
is placed in a region of memory allocated with malloc.
- If LENGTH is non-NULL, the length of the buffer conaining the
+ If LENGTH is non-NULL, the length of the buffer containing the
demangled name, is placed in *LENGTH.
The return value is a pointer to the start of the NUL-terminated
@@ -3989,6 +4146,48 @@ __cxa_demangle (const char *mangled_name, char *output_buffer,
return demangled;
}
+extern int __gcclibcxx_demangle_callback (const char *,
+ void (*)
+ (const char *, size_t, void *),
+ void *);
+
+/* Alternative, allocationless entry point in the C++ runtime library
+ for performing demangling. MANGLED_NAME is a NUL-terminated character
+ string containing the name to be demangled.
+
+ CALLBACK is a callback function, called with demangled string
+ segments as demangling progresses; it is called at least once,
+ but may be called more than once. OPAQUE is a generalized pointer
+ used as a callback argument.
+
+ The return code is one of the following values, equivalent to
+ the STATUS values of __cxa_demangle() (excluding -1, since this
+ function performs no memory allocations):
+ 0: The demangling operation succeeded.
+ -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
+ -3: One of the arguments is invalid.
+
+ The demangling is performed using the C++ ABI mangling rules, with
+ GNU extensions. */
+
+int
+__gcclibcxx_demangle_callback (const char *mangled_name,
+ void (*callback) (const char *, size_t, void *),
+ void *opaque)
+{
+ int status;
+
+ if (mangled_name == NULL || callback == NULL)
+ return -3;
+
+ status = d_demangle_callback (mangled_name, DMGL_PARAMS | DMGL_TYPES,
+ callback, opaque);
+ if (status == 0)
+ return -2;
+
+ return 0;
+}
+
#else /* ! (IN_LIBGCC2 || IN_GLIBCPP_V3) */
/* Entry point for libiberty demangler. If MANGLED is a g++ v3 ABI
@@ -3996,61 +4195,41 @@ __cxa_demangle (const char *mangled_name, char *output_buffer,
demangled name. Otherwise, return NULL. */
char *
-cplus_demangle_v3 (const char* mangled, int options)
+cplus_demangle_v3 (const char *mangled, int options)
{
size_t alc;
return d_demangle (mangled, options, &alc);
}
+int
+cplus_demangle_v3_callback (const char *mangled, int options,
+ demangle_callbackref callback, void *opaque)
+{
+ return d_demangle_callback (mangled, options, callback, opaque);
+}
+
/* Demangle a Java symbol. Java uses a subset of the V3 ABI C++ mangling
conventions, but the output formatting is a little different.
- This instructs the C++ demangler not to emit pointer characters ("*"), and
- to use Java's namespace separator symbol ("." instead of "::"). It then
- does an additional pass over the demangled output to replace instances
- of JArray<TYPE> with TYPE[]. */
+ This instructs the C++ demangler not to emit pointer characters ("*"), to
+ use Java's namespace separator symbol ("." instead of "::"), and to output
+ JArray<TYPE> as TYPE[]. */
char *
-java_demangle_v3 (const char* mangled)
+java_demangle_v3 (const char *mangled)
{
size_t alc;
- char *demangled;
- int nesting;
- char *from;
- char *to;
- demangled = d_demangle (mangled, DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX,
- &alc);
-
- if (demangled == NULL)
- return NULL;
-
- nesting = 0;
- from = demangled;
- to = from;
- while (*from != '\0')
- {
- if (strncmp (from, "JArray<", 7) == 0)
- {
- from += 7;
- ++nesting;
- }
- else if (nesting > 0 && *from == '>')
- {
- while (to > demangled && to[-1] == ' ')
- --to;
- *to++ = '[';
- *to++ = ']';
- --nesting;
- ++from;
- }
- else
- *to++ = *from++;
- }
-
- *to = '\0';
+ return d_demangle (mangled, DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX, &alc);
+}
- return demangled;
+int
+java_demangle_v3_callback (const char *mangled,
+ demangle_callbackref callback, void *opaque)
+{
+ return d_demangle_callback (mangled,
+ DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX,
+ callback, opaque);
}
#endif /* IN_LIBGCC2 || IN_GLIBCPP_V3 */
@@ -4080,21 +4259,11 @@ is_ctor_or_dtor (const char *mangled,
__extension__ struct demangle_component comps[di.num_comps];
__extension__ struct demangle_component *subs[di.num_subs];
- di.comps = &comps[0];
- di.subs = &subs[0];
+ di.comps = comps;
+ di.subs = subs;
#else
- di.comps = ((struct demangle_component *)
- malloc (di.num_comps * sizeof (struct demangle_component)));
- di.subs = ((struct demangle_component **)
- malloc (di.num_subs * sizeof (struct demangle_component *)));
- if (di.comps == NULL || di.subs == NULL)
- {
- if (di.comps != NULL)
- free (di.comps);
- if (di.subs != NULL)
- free (di.subs);
- return 0;
- }
+ di.comps = alloca (di.num_comps * sizeof (*di.comps));
+ di.subs = alloca (di.num_subs * sizeof (*di.subs));
#endif
dc = cplus_demangle_mangled_name (&di, 1);
@@ -4133,11 +4302,6 @@ is_ctor_or_dtor (const char *mangled,
break;
}
}
-
-#ifndef CP_DYNAMIC_ARRAYS
- free (di.subs);
- free (di.comps);
-#endif
}
return ret;
diff --git a/libiberty/cp-demangle.h b/libiberty/cp-demangle.h
index 2517a57e69b7..8622f29ca89e 100644
--- a/libiberty/cp-demangle.h
+++ b/libiberty/cp-demangle.h
@@ -1,5 +1,5 @@
/* Internal demangler interface for g++ V3 ABI.
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@wasabisystems.com>.
This file is part of the libiberty library, which is part of GCC.
@@ -123,10 +123,16 @@ struct d_info
int expansion;
};
+/* To avoid running past the ending '\0', don't:
+ - call d_peek_next_char if d_peek_char returned '\0'
+ - call d_advance with an 'i' that is too large
+ - call d_check_char(di, '\0')
+ Everything else is safe. */
#define d_peek_char(di) (*((di)->n))
#define d_peek_next_char(di) ((di)->n[1])
#define d_advance(di, i) ((di)->n += (i))
-#define d_next_char(di) (*((di)->n++))
+#define d_check_char(di, c) (d_peek_char(di) == c ? ((di)->n++, 1) : 0)
+#define d_next_char(di) (d_peek_char(di) == '\0' ? '\0' : *((di)->n++))
#define d_str(di) ((di)->n)
/* Functions and arrays in cp-demangle.c which are referenced by
@@ -137,8 +143,9 @@ struct d_info
#define CP_STATIC_IF_GLIBCPP_V3 extern
#endif
-CP_STATIC_IF_GLIBCPP_V3
-const struct demangle_operator_info cplus_demangle_operators[];
+#ifndef IN_GLIBCPP_V3
+extern const struct demangle_operator_info cplus_demangle_operators[];
+#endif
#define D_BUILTIN_TYPE_COUNT (26)
diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c
index 8b60434a8882..1f8b1fc31e4b 100644
--- a/libiberty/cplus-dem.c
+++ b/libiberty/cplus-dem.c
@@ -3693,7 +3693,7 @@ demangle_fund_type (struct work_stuff *work,
{
int done = 0;
int success = 1;
- char buf[10];
+ char buf[INTBUF_SIZE + 5 /* 'int%u_t' */];
unsigned int dec = 0;
type_kind_t tk = tk_integral;
diff --git a/libiberty/filename_cmp.c b/libiberty/filename_cmp.c
new file mode 100644
index 000000000000..0a4d0d850917
--- /dev/null
+++ b/libiberty/filename_cmp.c
@@ -0,0 +1,78 @@
+/* File name comparison routine.
+
+ Copyright (C) 2007 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. */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "filenames.h"
+#include "safe-ctype.h"
+
+/*
+
+@deftypefn Extension int filename_cmp (const char *@var{s1}, const char *@var{s2})
+
+Return zero if the two file names @var{s1} and @var{s2} are equivalent.
+If not equivalent, the returned value is similar to what @code{strcmp}
+would return. In other words, it returns a negative value if @var{s1}
+is less than @var{s2}, or a positive value if @var{s2} is greater than
+@var{s2}.
+
+This function does not normalize file names. As a result, this function
+will treat filenames that are spelled differently as different even in
+the case when the two filenames point to the same underlying file.
+However, it does handle the fact that on DOS-like file systems, forward
+and backward slashes are equal.
+
+@end deftypefn
+
+*/
+
+int
+filename_cmp (const char *s1, const char *s2)
+{
+#ifndef HAVE_DOS_BASED_FILE_SYSTEM
+ return strcmp(s1, s2);
+#else
+ for (;;)
+ {
+ int c1 = TOLOWER (*s1);
+ int c2 = TOLOWER (*s2);
+
+ /* On DOS-based file systems, the '/' and the '\' are equivalent. */
+ if (c1 == '/')
+ c1 = '\\';
+ if (c2 == '/')
+ c2 = '\\';
+
+ if (c1 != c2)
+ return (c1 - c2);
+
+ if (c1 == '\0')
+ return 0;
+
+ s1++;
+ s2++;
+ }
+#endif
+}
+
diff --git a/libiberty/floatformat.c b/libiberty/floatformat.c
index bd31efac7c17..c5abbb1f9ed1 100644
--- a/libiberty/floatformat.c
+++ b/libiberty/floatformat.c
@@ -249,53 +249,51 @@ const struct floatformat floatformat_ia64_quad_little =
floatformat_always_valid
};
+
+#ifndef min
+#define min(a, b) ((a) < (b) ? (a) : (b))
+#endif
+
/* Extract a field which starts at START and is LEN bits long. DATA and
TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */
static unsigned long
get_field (const unsigned char *data, enum floatformat_byteorders order,
unsigned int total_len, unsigned int start, unsigned int len)
{
- unsigned long result;
+ unsigned long result = 0;
unsigned int cur_byte;
- int cur_bitshift;
+ int lo_bit, hi_bit, cur_bitshift = 0;
+ int nextbyte = (order == floatformat_little) ? 1 : -1;
+
+ /* Start is in big-endian bit order! Fix that first. */
+ start = total_len - (start + len);
/* Start at the least significant part of the field. */
- cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
if (order == floatformat_little)
- cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
- cur_bitshift =
- ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
- result = *(data + cur_byte) >> (-cur_bitshift);
- cur_bitshift += FLOATFORMAT_CHAR_BIT;
- if (order == floatformat_little)
- ++cur_byte;
+ cur_byte = start / FLOATFORMAT_CHAR_BIT;
else
- --cur_byte;
+ cur_byte = (total_len - start - 1) / FLOATFORMAT_CHAR_BIT;
- /* Move towards the most significant part of the field. */
- while ((unsigned int) cur_bitshift < len)
+ lo_bit = start % FLOATFORMAT_CHAR_BIT;
+ hi_bit = min (lo_bit + len, FLOATFORMAT_CHAR_BIT);
+
+ do
{
- if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
- /* This is the last byte; zero out the bits which are not part of
- this field. */
- result |=
- (*(data + cur_byte) & ((1 << (len - cur_bitshift)) - 1))
- << cur_bitshift;
- else
- result |= *(data + cur_byte) << cur_bitshift;
- cur_bitshift += FLOATFORMAT_CHAR_BIT;
- if (order == floatformat_little)
- ++cur_byte;
- else
- --cur_byte;
+ unsigned int shifted = *(data + cur_byte) >> lo_bit;
+ unsigned int bits = hi_bit - lo_bit;
+ unsigned int mask = (1 << bits) - 1;
+ result |= (shifted & mask) << cur_bitshift;
+ len -= bits;
+ cur_bitshift += bits;
+ cur_byte += nextbyte;
+ lo_bit = 0;
+ hi_bit = min (len, FLOATFORMAT_CHAR_BIT);
}
+ while (len != 0);
+
return result;
}
-#ifndef min
-#define min(a, b) ((a) < (b) ? (a) : (b))
-#endif
-
/* Convert from FMT to a double.
FROM is the address of the extended float.
Store the double in *TO. */
@@ -394,7 +392,7 @@ floatformat_to_double (const struct floatformat *fmt,
/* Handle denormalized numbers. FIXME: What should we do for
non-IEEE formats? */
- if (exponent == 0 && mant != 0)
+ if (special_exponent && exponent == 0 && mant != 0)
dto += ldexp ((double)mant,
(- fmt->exp_bias
- mant_bits
@@ -428,43 +426,34 @@ put_field (unsigned char *data, enum floatformat_byteorders order,
unsigned long stuff_to_put)
{
unsigned int cur_byte;
- int cur_bitshift;
+ int lo_bit, hi_bit;
+ int nextbyte = (order == floatformat_little) ? 1 : -1;
+
+ /* Start is in big-endian bit order! Fix that first. */
+ start = total_len - (start + len);
/* Start at the least significant part of the field. */
- cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
- if (order == floatformat_little)
- cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
- cur_bitshift =
- ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
- *(data + cur_byte) &=
- ~(((1 << ((start + len) % FLOATFORMAT_CHAR_BIT)) - 1) << (-cur_bitshift));
- *(data + cur_byte) |=
- (stuff_to_put & ((1 << FLOATFORMAT_CHAR_BIT) - 1)) << (-cur_bitshift);
- cur_bitshift += FLOATFORMAT_CHAR_BIT;
if (order == floatformat_little)
- ++cur_byte;
+ cur_byte = start / FLOATFORMAT_CHAR_BIT;
else
- --cur_byte;
+ cur_byte = (total_len - start - 1) / FLOATFORMAT_CHAR_BIT;
- /* Move towards the most significant part of the field. */
- while ((unsigned int) cur_bitshift < len)
+ lo_bit = start % FLOATFORMAT_CHAR_BIT;
+ hi_bit = min (lo_bit + len, FLOATFORMAT_CHAR_BIT);
+
+ do
{
- if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
- {
- /* This is the last byte. */
- *(data + cur_byte) &=
- ~((1 << (len - cur_bitshift)) - 1);
- *(data + cur_byte) |= (stuff_to_put >> cur_bitshift);
- }
- else
- *(data + cur_byte) = ((stuff_to_put >> cur_bitshift)
- & ((1 << FLOATFORMAT_CHAR_BIT) - 1));
- cur_bitshift += FLOATFORMAT_CHAR_BIT;
- if (order == floatformat_little)
- ++cur_byte;
- else
- --cur_byte;
+ unsigned char *byte_ptr = data + cur_byte;
+ unsigned int bits = hi_bit - lo_bit;
+ unsigned int mask = ((1 << bits) - 1) << lo_bit;
+ *byte_ptr = (*byte_ptr & ~mask) | ((stuff_to_put << lo_bit) & mask);
+ stuff_to_put >>= bits;
+ len -= bits;
+ cur_byte += nextbyte;
+ lo_bit = 0;
+ hi_bit = min (len, FLOATFORMAT_CHAR_BIT);
}
+ while (len != 0);
}
/* The converse: convert the double *FROM to an extended float
diff --git a/libiberty/functions.texi b/libiberty/functions.texi
index fa92d702d79e..fd3e8e74ea7b 100644
--- a/libiberty/functions.texi
+++ b/libiberty/functions.texi
@@ -153,7 +153,7 @@ find one. The current directory is chosen if all else fails so the
program is exited if a temporary directory can't be found (@code{mktemp}
fails). The buffer for the result is obtained with @code{xmalloc}.
-This function is provided for backwards compatability only. Its use is
+This function is provided for backwards compatibility only. Its use is
not recommended.
@end deftypefn
@@ -268,6 +268,22 @@ value 1). If @var{valu} is zero, zero is returned.
@end deftypefn
+@c filename_cmp.c:28
+@deftypefn Extension int filename_cmp (const char *@var{s1}, const char *@var{s2})
+
+Return zero if the two paths @var{s1} and @var{s2} are equivalent.
+If not equivalent, the returned value is similar to what strcmp would
+return. In other words, it returns a negative value if @var{s1} is less
+than @var{s2}, or a positive value if @var{s2} is greater than @var{s2}.
+
+This function does not normalize path names. As a result, this function
+will treat filenames that are spelled differently as different even in
+the case when the two filenames point to the same underlying file.
+However, it does handle the fact that on DOS-like file systems, forward
+and backward slashes are equal.
+
+@end deftypefn
+
@c fnmatch.txh:1
@deftypefn Replacement int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags})
@@ -420,7 +436,7 @@ or zero if it is not. Note that the value you pass will be cast to
@deftypefn Extension {unsigned int} hex_value (int @var{c})
Returns the numeric equivalent of the given character when interpreted
-as a hexidecimal digit. The result is undefined if you pass an
+as a hexadecimal digit. The result is undefined if you pass an
invalid hex digit. Note that the value you pass will be cast to
@code{unsigned char} within the macro.
@@ -650,7 +666,7 @@ Sets the first @var{count} bytes of @var{s} to the constant byte
@end deftypefn
-@c mkstemps.c:54
+@c mkstemps.c:58
@deftypefn Replacement int mkstemps (char *@var{pattern}, int @var{suffix_len})
Generate a unique temporary file name from @var{pattern}.
@@ -668,14 +684,14 @@ reading and writing.
@end deftypefn
-@c pexecute.txh:231
+@c pexecute.txh:266
@deftypefn Extension void pex_free (struct pex_obj @var{obj})
Clean up and free all data associated with @var{obj}.
@end deftypefn
-@c pexecute.txh:206
+@c pexecute.txh:241
@deftypefn Extension int pex_get_status (struct pex_obj *@var{obj}, int @var{count}, int *@var{vector})
Returns the exit status of all programs run using @var{obj}.
@@ -685,7 +701,7 @@ to @code{pex_run}. Returns 0 on error, 1 on success.
@end deftypefn
-@c pexecute.txh:215
+@c pexecute.txh:250
@deftypefn Extension int pex_get_times (struct pex_obj *@var{obj}, int @var{count}, struct pex_time *@var{vector})
Returns the process execution times of all programs run using
@@ -734,7 +750,7 @@ temporary files; it may be @code{NULL} to use a randomly chosen name.
@end deftypefn
-@c pexecute.txh:133
+@c pexecute.txh:155
@deftypefn Extension {FILE *} pex_input_file (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{in_name})
Return a stream for a temporary file to pass to the first program in
@@ -752,7 +768,7 @@ binary mode; otherwise, open it in the default mode. Including
@code{PEX_BINARY_OUTPUT} in @var{flags} has no effect on Unix.
@end deftypefn
-@c pexecute.txh:150
+@c pexecute.txh:172
@deftypefn Extension {FILE *} pex_input_pipe (struct pex_obj *@var{obj}, int @var{binary})
Return a stream @var{fp} for a pipe connected to the standard input of
@@ -797,7 +813,7 @@ the output pipe is you, but you are blocked on the input pipe.
@end deftypefn
-@c pexecute.txh:237
+@c pexecute.txh:272
@deftypefn Extension {const char *} pex_one (int @var{flags}, const char *@var{executable}, char * const *@var{argv}, const char *@var{pname}, const char *@var{outname}, const char *@var{errname}, int *@var{status}, int *@var{err})
An interface to permit the easy execution of a
@@ -810,7 +826,20 @@ be set to the exit status of the program.
@end deftypefn
-@c pexecute.txh:194
+@c pexecute.txh:228
+@deftypefn Extension {FILE *} pex_read_err (struct pex_obj *@var{obj}, int @var{binary})
+
+Returns a @code{FILE} pointer which may be used to read the standard
+error of the last program in the pipeline. When this is used,
+@code{PEX_LAST} should not be used in a call to @code{pex_run}. After
+this is called, @code{pex_run} may no longer be called with the same
+@var{obj}. @var{binary} should be non-zero if the file should be
+opened in binary mode. Don't call @code{fclose} on the returned file;
+it will be closed by @code{pex_free}.
+
+@end deftypefn
+
+@c pexecute.txh:216
@deftypefn Extension {FILE *} pex_read_output (struct pex_obj *@var{obj}, int @var{binary})
Returns a @code{FILE} pointer which may be used to read the standard
@@ -861,14 +890,23 @@ Send the program's standard error to standard output, if possible.
@vindex PEX_BINARY_INPUT
@vindex PEX_BINARY_OUTPUT
+@vindex PEX_BINARY_ERROR
@item PEX_BINARY_INPUT
@itemx PEX_BINARY_OUTPUT
-The standard input (output) of the program should be read (written) in
+@itemx PEX_BINARY_ERROR
+The standard input (output or error) of the program should be read (written) in
binary mode rather than text mode. These flags are ignored on systems
which do not distinguish binary mode and text mode, such as Unix. For
proper behavior these flags should match appropriately---a call to
@code{pex_run} using @code{PEX_BINARY_OUTPUT} should be followed by a
call using @code{PEX_BINARY_INPUT}.
+
+@vindex PEX_STDERR_TO_PIPE
+@item PEX_STDERR_TO_PIPE
+Send the program's standard error to a pipe, if possible. This flag
+cannot be specified together with @code{PEX_STDERR_TO_STDOUT}. This
+flag can be specified only on the last program in pipeline.
+
@end table
@var{executable} is the program to execute. @var{argv} is the set of
@@ -924,8 +962,22 @@ value, or to 0 if there is no relevant @code{errno}.
@end deftypefn
-@c pexecute.txh:249
-@deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int flags)
+@c pexecute.txh:142
+@deftypefn Extension {const char *} pex_run_in_environment (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, char * const *@var{env}, int @var{env_size}, const char *@var{outname}, const char *@var{errname}, int *@var{err})
+
+Execute one program in a pipeline, permitting the environment for the
+program to be specified. Behaviour and parameters not listed below are
+as for @code{pex_run}.
+
+@var{env} is the environment for the child process, specified as an array of
+character pointers. Each element of the array should point to a string of the
+form @code{VAR=VALUE}, with the exception of the last element that must be
+@code{NULL}.
+
+@end deftypefn
+
+@c pexecute.txh:284
+@deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int @var{flags})
This is the old interface to execute one or more programs. It is
still supported for compatibility purposes, but is no longer
@@ -934,7 +986,7 @@ documented.
@end deftypefn
@c strsignal.c:539
-@deftypefn Supplemental void psignal (unsigned @var{signo}, char *@var{message})
+@deftypefn Supplemental void psignal (int @var{signo}, char *@var{message})
Print @var{message} to the standard error, followed by a colon,
followed by the description of the signal specified by @var{signo},
@@ -952,7 +1004,7 @@ name is unset/removed.
@end deftypefn
-@c pexecute.txh:257
+@c pexecute.txh:292
@deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags})
Another part of the old execution interface.
diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c
index a5671a0a7680..bf34a6d297ed 100644
--- a/libiberty/hashtab.c
+++ b/libiberty/hashtab.c
@@ -421,7 +421,28 @@ htab_empty (htab_t htab)
if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY)
(*htab->del_f) (entries[i]);
- memset (entries, 0, size * sizeof (PTR));
+ /* Instead of clearing megabyte, downsize the table. */
+ if (size > 1024*1024 / sizeof (PTR))
+ {
+ int nindex = higher_prime_index (1024 / sizeof (PTR));
+ int nsize = prime_tab[nindex].prime;
+
+ if (htab->free_f != NULL)
+ (*htab->free_f) (htab->entries);
+ else if (htab->free_with_arg_f != NULL)
+ (*htab->free_with_arg_f) (htab->alloc_arg, htab->entries);
+ if (htab->alloc_with_arg_f != NULL)
+ htab->entries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
+ sizeof (PTR *));
+ else
+ htab->entries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *));
+ htab->size = nsize;
+ htab->size_prime_index = nindex;
+ }
+ else
+ memset (entries, 0, size * sizeof (PTR));
+ htab->n_deleted = 0;
+ htab->n_elements = 0;
}
/* Similar to htab_find_slot, but without several unwanted side effects:
diff --git a/libiberty/hex.c b/libiberty/hex.c
index 86ba0b5b872f..5eeafdbd1586 100644
--- a/libiberty/hex.c
+++ b/libiberty/hex.c
@@ -50,7 +50,7 @@ or zero if it is not. Note that the value you pass will be cast to
@deftypefn Extension {unsigned int} hex_value (int @var{c})
Returns the numeric equivalent of the given character when interpreted
-as a hexidecimal digit. The result is undefined if you pass an
+as a hexadecimal digit. The result is undefined if you pass an
invalid hex digit. Note that the value you pass will be cast to
@code{unsigned char} within the macro.
diff --git a/libiberty/make-relative-prefix.c b/libiberty/make-relative-prefix.c
index 66ddcaa471bf..037809e34edf 100644
--- a/libiberty/make-relative-prefix.c
+++ b/libiberty/make-relative-prefix.c
@@ -1,6 +1,6 @@
/* Relative (relocatable) prefix support.
Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002, 2006 Free Software Foundation, Inc.
This file is part of libiberty.
@@ -217,9 +217,9 @@ free_split_directories (char **dirs)
If no relative prefix can be found, return NULL. */
-char *
-make_relative_prefix (const char *progname,
- const char *bin_prefix, const char *prefix)
+static char *
+make_relative_prefix_1 (const char *progname, const char *bin_prefix,
+ const char *prefix, const int resolve_links)
{
char **prog_dirs, **bin_dirs, **prefix_dirs;
int prog_num, bin_num, prefix_num;
@@ -289,9 +289,14 @@ make_relative_prefix (const char *progname,
}
}
- full_progname = lrealpath (progname);
- if (full_progname == NULL)
- return NULL;
+ if ( resolve_links )
+ {
+ full_progname = lrealpath (progname);
+ if (full_progname == NULL)
+ return NULL;
+ }
+ else
+ full_progname = strdup(progname);
prog_dirs = split_directories (full_progname, &prog_num);
bin_dirs = split_directories (bin_prefix, &bin_num);
@@ -387,3 +392,30 @@ make_relative_prefix (const char *progname,
return ret;
}
+
+
+/* Do the full job, including symlink resolution.
+ This path will find files installed in the same place as the
+ program even when a soft link has been made to the program
+ from somwhere else. */
+
+char *
+make_relative_prefix (const char *progname, const char *bin_prefix,
+ const char *prefix)
+{
+ return make_relative_prefix_1 (progname, bin_prefix, prefix, 1);
+}
+
+/* Make the relative pathname without attempting to resolve any links.
+ '..' etc may also be left in the pathname.
+ This will find the files the user meant the program to find if the
+ installation is patched together with soft links. */
+
+char *
+make_relative_prefix_ignore_links (const char *progname,
+ const char *bin_prefix,
+ const char *prefix)
+{
+ return make_relative_prefix_1 (progname, bin_prefix, prefix, 0);
+}
+
diff --git a/libiberty/mkstemps.c b/libiberty/mkstemps.c
index 89b37d9f4805..6c2e472528ba 100644
--- a/libiberty/mkstemps.c
+++ b/libiberty/mkstemps.c
@@ -49,6 +49,10 @@ typedef unsigned long gcc_uint64_t;
#define TMP_MAX 16384
#endif
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
/*
@deftypefn Replacement int mkstemps (char *@var{pattern}, int @var{suffix_len})
@@ -119,7 +123,7 @@ mkstemps (char *pattern, int suffix_len)
v /= 62;
XXXXXX[5] = letters[v % 62];
- fd = open (pattern, O_RDWR|O_CREAT|O_EXCL, 0600);
+ fd = open (pattern, O_BINARY|O_RDWR|O_CREAT|O_EXCL, 0600);
if (fd >= 0)
/* The file does not exist. */
return fd;
diff --git a/libiberty/pex-common.c b/libiberty/pex-common.c
index ebe8c437590e..7f355365edaf 100644
--- a/libiberty/pex-common.c
+++ b/libiberty/pex-common.c
@@ -62,6 +62,7 @@ pex_init_common (int flags, const char *pname, const char *tempbase,
obj->next_input = STDIN_FILE_NO;
obj->next_input_name = NULL;
obj->next_input_name_allocated = 0;
+ obj->stderr_pipe = -1;
obj->count = 0;
obj->children = NULL;
obj->status = NULL;
@@ -69,6 +70,7 @@ pex_init_common (int flags, const char *pname, const char *tempbase,
obj->number_waited = 0;
obj->input_file = NULL;
obj->read_output = NULL;
+ obj->read_err = NULL;
obj->remove_count = 0;
obj->remove = NULL;
obj->funcs = funcs;
@@ -142,18 +144,22 @@ temp_file (struct pex_obj *obj, int flags, char *name)
return name;
}
-/* Run a program. */
+
+/* As for pex_run (), but permits the environment for the child process
+ to be specified. */
const char *
-pex_run (struct pex_obj *obj, int flags, const char *executable,
- char * const * argv, const char *orig_outname, const char *errname,
- int *err)
+pex_run_in_environment (struct pex_obj *obj, int flags, const char *executable,
+ char * const * argv, char * const * env,
+ const char *orig_outname, const char *errname,
+ int *err)
{
const char *errmsg;
int in, out, errdes;
char *outname;
int outname_allocated;
int p[2];
+ int toclose;
long pid;
in = -1;
@@ -278,14 +284,43 @@ pex_run (struct pex_obj *obj, int flags, const char *executable,
/* Set ERRDES. */
+ if (errname != NULL && (flags & PEX_STDERR_TO_PIPE) != 0)
+ {
+ *err = 0;
+ errmsg = "both ERRNAME and PEX_STDERR_TO_PIPE specified.";
+ goto error_exit;
+ }
+
+ if (obj->stderr_pipe != -1)
+ {
+ *err = 0;
+ errmsg = "PEX_STDERR_TO_PIPE used in the middle of pipeline";
+ goto error_exit;
+ }
+
if (errname == NULL)
- errdes = STDERR_FILE_NO;
+ {
+ if (flags & PEX_STDERR_TO_PIPE)
+ {
+ if (obj->funcs->pipe (obj, p, (flags & PEX_BINARY_ERROR) != 0) < 0)
+ {
+ *err = errno;
+ errmsg = "pipe";
+ goto error_exit;
+ }
+
+ errdes = p[WRITE_PORT];
+ obj->stderr_pipe = p[READ_PORT];
+ }
+ else
+ {
+ errdes = STDERR_FILE_NO;
+ }
+ }
else
{
- /* We assume that stderr is in text mode--it certainly shouldn't
- be controlled by PEX_BINARY_OUTPUT. If necessary, we can add
- a PEX_BINARY_STDERR flag. */
- errdes = obj->funcs->open_write (obj, errname, 0);
+ errdes = obj->funcs->open_write (obj, errname,
+ (flags & PEX_BINARY_ERROR) != 0);
if (errdes < 0)
{
*err = errno;
@@ -294,10 +329,18 @@ pex_run (struct pex_obj *obj, int flags, const char *executable,
}
}
+ /* If we are using pipes, the child process has to close the next
+ input pipe. */
+
+ if ((obj->flags & PEX_USE_PIPES) == 0)
+ toclose = -1;
+ else
+ toclose = obj->next_input;
+
/* Run the program. */
- pid = obj->funcs->exec_child (obj, flags, executable, argv, in, out, errdes,
- &errmsg, err);
+ pid = obj->funcs->exec_child (obj, flags, executable, argv, env,
+ in, out, errdes, toclose, &errmsg, err);
if (pid < 0)
goto error_exit;
@@ -319,6 +362,17 @@ pex_run (struct pex_obj *obj, int flags, const char *executable,
return errmsg;
}
+/* Run a program. */
+
+const char *
+pex_run (struct pex_obj *obj, int flags, const char *executable,
+ char * const * argv, const char *orig_outname, const char *errname,
+ int *err)
+{
+ return pex_run_in_environment (obj, flags, executable, argv, NULL,
+ orig_outname, errname, err);
+}
+
/* Return a FILE pointer for a temporary file to fill with input for
the pipeline. */
FILE *
@@ -442,6 +496,18 @@ pex_read_output (struct pex_obj *obj, int binary)
return obj->read_output;
}
+FILE *
+pex_read_err (struct pex_obj *obj, int binary)
+{
+ int o;
+
+ o = obj->stderr_pipe;
+ if (o < 0 || o == STDIN_FILE_NO)
+ return NULL;
+ obj->read_err = obj->funcs->fdopenr (obj, o, binary);
+ return obj->read_err;
+}
+
/* Get the exit status and, if requested, the resource time for all
the child processes. Return 0 on failure, 1 on success. */
@@ -555,6 +621,8 @@ pex_free (struct pex_obj *obj)
free (obj->time);
if (obj->read_output != NULL)
fclose (obj->read_output);
+ if (obj->read_err != NULL)
+ fclose (obj->read_err);
if (obj->remove_count > 0)
{
diff --git a/libiberty/pex-common.h b/libiberty/pex-common.h
index 8ded138148c7..8edc13b7650f 100644
--- a/libiberty/pex-common.h
+++ b/libiberty/pex-common.h
@@ -59,6 +59,8 @@ struct pex_obj
char *next_input_name;
/* Whether next_input_name was allocated using malloc. */
int next_input_name_allocated;
+ /* If not -1, stderr pipe from the last process. */
+ int stderr_pipe;
/* Number of child processes. */
int count;
/* PIDs of child processes; array allocated using malloc. */
@@ -73,6 +75,8 @@ struct pex_obj
FILE *input_file;
/* FILE created by pex_read_output. */
FILE *read_output;
+ /* FILE created by pex_read_err. */
+ FILE *read_err;
/* Number of temporary files to remove. */
int remove_count;
/* List of temporary files to remove; array allocated using malloc
@@ -96,16 +100,20 @@ struct pex_funcs
int (*open_write) (struct pex_obj *, const char */* name */,
int /* binary */);
/* Execute a child process. FLAGS, EXECUTABLE, ARGV, ERR are from
- pex_run. IN, OUT, ERRDES are each a descriptor, from open_read,
- open_write, or pipe, or they are one of STDIN_FILE_NO,
- STDOUT_FILE_NO or STDERR_FILE_NO; if not STD*_FILE_NO, they
- should be closed. The function should handle the
+ pex_run. IN, OUT, ERRDES, TOCLOSE are all descriptors, from
+ open_read, open_write, or pipe, or they are one of STDIN_FILE_NO,
+ STDOUT_FILE_NO or STDERR_FILE_NO; if IN, OUT, and ERRDES are not
+ STD*_FILE_NO, they should be closed. If the descriptor TOCLOSE
+ is not -1, and the system supports pipes, TOCLOSE should be
+ closed in the child process. The function should handle the
PEX_STDERR_TO_STDOUT flag. Return >= 0 on success, or -1 on
error and set *ERRMSG and *ERR. */
long (*exec_child) (struct pex_obj *, int /* flags */,
const char */* executable */, char * const * /* argv */,
+ char * const * /* env */,
int /* in */, int /* out */, int /* errdes */,
- const char **/* errmsg */, int */* err */);
+ int /* toclose */, const char **/* errmsg */,
+ int */* err */);
/* Close a descriptor. Return 0 on success, -1 on error. */
int (*close) (struct pex_obj *, int);
/* Wait for a child to complete, returning exit status in *STATUS
diff --git a/libiberty/pex-djgpp.c b/libiberty/pex-djgpp.c
index 17fbf2cc7e44..ac5a4f97ba76 100644
--- a/libiberty/pex-djgpp.c
+++ b/libiberty/pex-djgpp.c
@@ -45,7 +45,8 @@ extern int errno;
static int pex_djgpp_open_read (struct pex_obj *, const char *, int);
static int pex_djgpp_open_write (struct pex_obj *, const char *, int);
static long pex_djgpp_exec_child (struct pex_obj *, int, const char *,
- char * const *, int, int, int,
+ char * const *, char * const *,
+ int, int, int, int,
const char **, int *);
static int pex_djgpp_close (struct pex_obj *, int);
static int pex_djgpp_wait (struct pex_obj *, long, int *, struct pex_time *,
@@ -111,8 +112,10 @@ pex_djgpp_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd)
static long
pex_djgpp_exec_child (struct pex_obj *obj, int flags, const char *executable,
- char * const * argv, int in, int out, int errdes,
- const char **errmsg, int *err)
+ char * const * argv, char * const * env,
+ int in, int out, int errdes,
+ int toclose ATTRIBUTE_UNUSED, const char **errmsg,
+ int *err)
{
int org_in, org_out, org_errdes;
int status;
@@ -196,8 +199,12 @@ pex_djgpp_exec_child (struct pex_obj *obj, int flags, const char *executable,
}
}
- status = (((flags & PEX_SEARCH) != 0 ? spawnvp : spawnv)
- (P_WAIT, executable, (char * const *) argv));
+ if (env)
+ status = (((flags & PEX_SEARCH) != 0 ? spawnvpe : spawnve)
+ (P_WAIT, executable, argv, env));
+ else
+ status = (((flags & PEX_SEARCH) != 0 ? spawnvp : spawnv)
+ (P_WAIT, executable, argv));
if (status == -1)
{
diff --git a/libiberty/pex-msdos.c b/libiberty/pex-msdos.c
index db22337aa2af..b5acd86b0f5f 100644
--- a/libiberty/pex-msdos.c
+++ b/libiberty/pex-msdos.c
@@ -55,8 +55,9 @@ static int pex_msdos_open (struct pex_obj *, const char *, int);
static int pex_msdos_open (struct pex_obj *, const char *, int);
static int pex_msdos_fdindex (struct pex_msdos *, int);
static long pex_msdos_exec_child (struct pex_obj *, int, const char *,
- char * const *, int, int, int,
- const char **, int *);
+ char * const *, char * const *,
+ int, int, int, int,
+ int, const char **, int *);
static int pex_msdos_close (struct pex_obj *, int);
static int pex_msdos_wait (struct pex_obj *, long, int *, struct pex_time *,
int, const char **, int *);
@@ -153,7 +154,8 @@ pex_msdos_close (struct pex_obj *obj, int fd)
static long
pex_msdos_exec_child (struct pex_obj *obj, int flags, const char *executable,
- char * const * argv, int in, int out,
+ char * const * argv, char * const * env, int in, int out,
+ int toclose ATTRIBUTE_UNUSED,
int errdes ATTRIBUTE_UNUSED, const char **errmsg,
int *err)
{
diff --git a/libiberty/pex-unix.c b/libiberty/pex-unix.c
index c92a42979712..a7760415e012 100644
--- a/libiberty/pex-unix.c
+++ b/libiberty/pex-unix.c
@@ -270,7 +270,8 @@ static void pex_child_error (struct pex_obj *, const char *, const char *, int)
static int pex_unix_open_read (struct pex_obj *, const char *, int);
static int pex_unix_open_write (struct pex_obj *, const char *, int);
static long pex_unix_exec_child (struct pex_obj *, int, const char *,
- char * const *, int, int, int,
+ char * const *, char * const *,
+ int, int, int, int,
const char **, int *);
static int pex_unix_close (struct pex_obj *, int);
static int pex_unix_wait (struct pex_obj *, long, int *, struct pex_time *,
@@ -338,7 +339,7 @@ static void
pex_child_error (struct pex_obj *obj, const char *executable,
const char *errmsg, int err)
{
-#define writeerr(s) write (STDERR_FILE_NO, s, strlen (s))
+#define writeerr(s) (void) write (STDERR_FILE_NO, s, strlen (s))
writeerr (obj->pname);
writeerr (": error trying to exec '");
writeerr (executable);
@@ -352,12 +353,16 @@ pex_child_error (struct pex_obj *obj, const char *executable,
/* Execute a child. */
+extern char **environ;
+
static long
pex_unix_exec_child (struct pex_obj *obj, int flags, const char *executable,
- char * const * argv, int in, int out, int errdes,
- const char **errmsg, int *err)
+ char * const * argv, char * const * env,
+ int in, int out, int errdes,
+ int toclose, const char **errmsg, int *err)
{
pid_t pid;
+
/* We declare these to be volatile to avoid warnings from gcc about
them being clobbered by vfork. */
volatile int sleep_interval;
@@ -404,11 +409,20 @@ pex_unix_exec_child (struct pex_obj *obj, int flags, const char *executable,
if (close (errdes) < 0)
pex_child_error (obj, executable, "close", errno);
}
+ if (toclose >= 0)
+ {
+ if (close (toclose) < 0)
+ pex_child_error (obj, executable, "close", errno);
+ }
if ((flags & PEX_STDERR_TO_STDOUT) != 0)
{
if (dup2 (STDOUT_FILE_NO, STDERR_FILE_NO) < 0)
pex_child_error (obj, executable, "dup2", errno);
}
+
+ if (env)
+ environ = (char**) env;
+
if ((flags & PEX_SEARCH) != 0)
{
execvp (executable, argv);
diff --git a/libiberty/pex-win32.c b/libiberty/pex-win32.c
index 046f393c6d9f..ef9eb025caf6 100644
--- a/libiberty/pex-win32.c
+++ b/libiberty/pex-win32.c
@@ -1,6 +1,6 @@
/* Utilities to execute a program in a subprocess (possibly linked by pipes
with other subprocesses), and wait for it. Generic Win32 specialization.
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This file is part of the libiberty library.
@@ -36,12 +36,14 @@ Boston, MA 02110-1301, USA. */
#include <sys/wait.h>
#endif
+#include <assert.h>
#include <process.h>
#include <io.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/stat.h>
#include <errno.h>
+#include <ctype.h>
/* mingw32 headers may not define the following. */
@@ -59,6 +61,8 @@ Boston, MA 02110-1301, USA. */
#define MINGW_NAME "Minimalist GNU for Windows"
#define MINGW_NAME_LEN (sizeof(MINGW_NAME) - 1)
+extern char *stpcpy (char *dst, const char *src);
+
/* Ensure that the executable pathname uses Win32 backslashes. This
is not necessary on NT, but on W9x, forward slashes causes
failure of spawn* and exec* functions (and probably any function
@@ -76,7 +80,8 @@ backslashify (char *s)
static int pex_win32_open_read (struct pex_obj *, const char *, int);
static int pex_win32_open_write (struct pex_obj *, const char *, int);
static long pex_win32_exec_child (struct pex_obj *, int, const char *,
- char * const *, int, int, int,
+ char * const *, char * const *,
+ int, int, int, int,
const char **, int *);
static int pex_win32_close (struct pex_obj *, int);
static int pex_win32_wait (struct pex_obj *, long, int *,
@@ -353,7 +358,7 @@ argv_to_cmdline (char *const *argv)
cmdline_len += j;
cmdline_len += 3; /* for leading and trailing quotes and space */
}
- cmdline = xmalloc (cmdline_len);
+ cmdline = XNEWVEC (char, cmdline_len);
p = cmdline;
for (i = 0; argv[i]; i++)
{
@@ -377,16 +382,18 @@ argv_to_cmdline (char *const *argv)
return cmdline;
}
+/* We'll try the passed filename with all the known standard
+ extensions, and then without extension. We try no extension
+ last so that we don't try to run some random extension-less
+ file that might be hanging around. We try both extension
+ and no extension so that we don't need any fancy logic
+ to determine if a file has extension. */
static const char *const
std_suffixes[] = {
".com",
".exe",
".bat",
".cmd",
- 0
-};
-static const char *const
-no_suffixes[] = {
"",
0
};
@@ -404,7 +411,6 @@ find_executable (const char *program, BOOL search)
const char *const *ext;
const char *p, *q;
size_t proglen = strlen (program);
- int has_extension = !!strchr (program, '.');
int has_slash = (strchr (program, '/') || strchr (program, '\\'));
HANDLE h;
@@ -427,8 +433,8 @@ find_executable (const char *program, BOOL search)
if (*q == ';')
q++;
}
- fe_len = fe_len + 1 + proglen + (has_extension ? 1 : 5);
- full_executable = xmalloc (fe_len);
+ fe_len = fe_len + 1 + proglen + 5 /* space for extension */;
+ full_executable = XNEWVEC (char, fe_len);
p = path;
do
@@ -453,7 +459,7 @@ find_executable (const char *program, BOOL search)
/* At this point, e points to the terminating NUL character for
full_executable. */
- for (ext = has_extension ? no_suffixes : std_suffixes; *ext; ext++)
+ for (ext = std_suffixes; *ext; ext++)
{
/* Remove any current extension. */
*e = '\0';
@@ -478,22 +484,96 @@ find_executable (const char *program, BOOL search)
return full_executable;
}
-/* Low-level process creation function. */
+/* Low-level process creation function and helper. */
+
+static int
+env_compare (const void *a_ptr, const void *b_ptr)
+{
+ const char *a;
+ const char *b;
+ unsigned char c1;
+ unsigned char c2;
+
+ a = *(const char **) a_ptr;
+ b = *(const char **) b_ptr;
+
+ /* a and b will be of the form: VAR=VALUE
+ We compare only the variable name part here using a case-insensitive
+ comparison algorithm. It might appear that in fact strcasecmp () can
+ take the place of this whole function, and indeed it could, save for
+ the fact that it would fail in cases such as comparing A1=foo and
+ A=bar (because 1 is less than = in the ASCII character set).
+ (Environment variables containing no numbers would work in such a
+ scenario.) */
+
+ do
+ {
+ c1 = (unsigned char) tolower (*a++);
+ c2 = (unsigned char) tolower (*b++);
+
+ if (c1 == '=')
+ c1 = '\0';
+
+ if (c2 == '=')
+ c2 = '\0';
+ }
+ while (c1 == c2 && c1 != '\0');
+
+ return c1 - c2;
+}
static long
win32_spawn (const char *executable,
BOOL search,
char *const *argv,
+ char *const *env, /* array of strings of the form: VAR=VALUE */
DWORD dwCreationFlags,
LPSTARTUPINFO si,
LPPROCESS_INFORMATION pi)
{
char *full_executable;
char *cmdline;
+ char **env_copy;
+ char *env_block = NULL;
full_executable = NULL;
cmdline = NULL;
+ if (env)
+ {
+ int env_size;
+
+ /* Count the number of environment bindings supplied. */
+ for (env_size = 0; env[env_size]; env_size++)
+ continue;
+
+ /* Assemble an environment block, if required. This consists of
+ VAR=VALUE strings juxtaposed (with one null character between each
+ pair) and an additional null at the end. */
+ if (env_size > 0)
+ {
+ int var;
+ int total_size = 1; /* 1 is for the final null. */
+ char *bufptr;
+
+ /* Windows needs the members of the block to be sorted by variable
+ name. */
+ env_copy = (char **) alloca (sizeof (char *) * env_size);
+ memcpy (env_copy, env, sizeof (char *) * env_size);
+ qsort (env_copy, env_size, sizeof (char *), env_compare);
+
+ for (var = 0; var < env_size; var++)
+ total_size += strlen (env[var]) + 1;
+
+ env_block = XNEWVEC (char, total_size);
+ bufptr = env_block;
+ for (var = 0; var < env_size; var++)
+ bufptr = stpcpy (bufptr, env_copy[var]) + 1;
+
+ *bufptr = '\0';
+ }
+ }
+
full_executable = find_executable (executable, search);
if (!full_executable)
goto error;
@@ -507,31 +587,41 @@ win32_spawn (const char *executable,
/*lpThreadAttributes=*/NULL,
/*bInheritHandles=*/TRUE,
dwCreationFlags,
- /*lpEnvironment=*/NULL,
+ (LPVOID) env_block,
/*lpCurrentDirectory=*/NULL,
si,
pi))
{
+ if (env_block)
+ free (env_block);
+
free (full_executable);
+
return -1;
}
/* Clean up. */
CloseHandle (pi->hThread);
free (full_executable);
+ if (env_block)
+ free (env_block);
return (long) pi->hProcess;
error:
+ if (env_block)
+ free (env_block);
if (cmdline)
free (cmdline);
if (full_executable)
free (full_executable);
+
return -1;
}
static long
spawn_script (const char *executable, char *const *argv,
+ char* const *env,
DWORD dwCreationFlags,
LPSTARTUPINFO si,
LPPROCESS_INFORMATION pi)
@@ -566,20 +656,20 @@ spawn_script (const char *executable, char *const *argv,
executable = strrchr (executable1, '\\') + 1;
if (!executable)
executable = executable1;
- pid = win32_spawn (executable, TRUE, argv,
+ pid = win32_spawn (executable, TRUE, argv, env,
dwCreationFlags, si, pi);
#else
if (strchr (executable1, '\\') == NULL)
- pid = win32_spawn (executable1, TRUE, argv,
+ pid = win32_spawn (executable1, TRUE, argv, env,
dwCreationFlags, si, pi);
else if (executable1[0] != '\\')
- pid = win32_spawn (executable1, FALSE, argv,
+ pid = win32_spawn (executable1, FALSE, argv, env,
dwCreationFlags, si, pi);
else
{
const char *newex = mingw_rootify (executable1);
*avhere = newex;
- pid = win32_spawn (newex, FALSE, argv,
+ pid = win32_spawn (newex, FALSE, argv, env,
dwCreationFlags, si, pi);
if (executable1 != newex)
free ((char *) newex);
@@ -589,7 +679,7 @@ spawn_script (const char *executable, char *const *argv,
if (newex != executable1)
{
*avhere = newex;
- pid = win32_spawn (newex, FALSE, argv,
+ pid = win32_spawn (newex, FALSE, argv, env,
dwCreationFlags, si, pi);
free ((char *) newex);
}
@@ -609,7 +699,10 @@ spawn_script (const char *executable, char *const *argv,
static long
pex_win32_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED, int flags,
const char *executable, char * const * argv,
- int in, int out, int errdes, const char **errmsg,
+ char* const* env,
+ int in, int out, int errdes,
+ int toclose ATTRIBUTE_UNUSED,
+ const char **errmsg,
int *err)
{
long pid;
@@ -686,9 +779,10 @@ pex_win32_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED, int flags,
/* Create the child process. */
pid = win32_spawn (executable, (flags & PEX_SEARCH) != 0,
- argv, dwCreationFlags, &si, &pi);
+ argv, env, dwCreationFlags, &si, &pi);
if (pid == -1)
- pid = spawn_script (executable, argv, dwCreationFlags, &si, &pi);
+ pid = spawn_script (executable, argv, env, dwCreationFlags,
+ &si, &pi);
if (pid == -1)
{
*err = ENOENT;
@@ -789,7 +883,7 @@ main (int argc ATTRIBUTE_UNUSED, char **argv)
char const *errmsg;
int err;
argv++;
- printf ("%ld\n", pex_win32_exec_child (NULL, PEX_SEARCH, argv[0], argv, 0, 1, 2, &errmsg, &err));
+ printf ("%ld\n", pex_win32_exec_child (NULL, PEX_SEARCH, argv[0], argv, NULL, 0, 0, 1, 2, &errmsg, &err));
exit (0);
}
#endif
diff --git a/libiberty/pexecute.txh b/libiberty/pexecute.txh
index 7d45576eecea..b87c0e53a6d3 100644
--- a/libiberty/pexecute.txh
+++ b/libiberty/pexecute.txh
@@ -67,14 +67,23 @@ Send the program's standard error to standard output, if possible.
@vindex PEX_BINARY_INPUT
@vindex PEX_BINARY_OUTPUT
+@vindex PEX_BINARY_ERROR
@item PEX_BINARY_INPUT
@itemx PEX_BINARY_OUTPUT
-The standard input (output) of the program should be read (written) in
+@itemx PEX_BINARY_ERROR
+The standard input (output or error) of the program should be read (written) in
binary mode rather than text mode. These flags are ignored on systems
which do not distinguish binary mode and text mode, such as Unix. For
proper behavior these flags should match appropriately---a call to
@code{pex_run} using @code{PEX_BINARY_OUTPUT} should be followed by a
call using @code{PEX_BINARY_INPUT}.
+
+@vindex PEX_STDERR_TO_PIPE
+@item PEX_STDERR_TO_PIPE
+Send the program's standard error to a pipe, if possible. This flag
+cannot be specified together with @code{PEX_STDERR_TO_STDOUT}. This
+flag can be specified only on the last program in pipeline.
+
@end table
@var{executable} is the program to execute. @var{argv} is the set of
@@ -130,6 +139,19 @@ value, or to 0 if there is no relevant @code{errno}.
@end deftypefn
+@deftypefn Extension {const char *} pex_run_in_environment (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, char * const *@var{env}, int @var{env_size}, const char *@var{outname}, const char *@var{errname}, int *@var{err})
+
+Execute one program in a pipeline, permitting the environment for the
+program to be specified. Behaviour and parameters not listed below are
+as for @code{pex_run}.
+
+@var{env} is the environment for the child process, specified as an array of
+character pointers. Each element of the array should point to a string of the
+form @code{VAR=VALUE}, with the exception of the last element that must be
+@code{NULL}.
+
+@end deftypefn
+
@deftypefn Extension {FILE *} pex_input_file (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{in_name})
Return a stream for a temporary file to pass to the first program in
@@ -203,6 +225,19 @@ it will be closed by @code{pex_free}.
@end deftypefn
+@deftypefn Extension {FILE *} pex_read_err (struct pex_obj *@var{obj}, int @var{binary})
+
+Returns a @code{FILE} pointer which may be used to read the standard
+error of the last program in the pipeline. When this is used,
+@code{PEX_LAST} should not be used in a call to @code{pex_run}. After
+this is called, @code{pex_run} may no longer be called with the same
+@var{obj}. @var{binary} should be non-zero if the file should be
+opened in binary mode. Don't call @code{fclose} on the returned file;
+it will be closed by @code{pex_free}.
+
+@end deftypefn
+
+
@deftypefn Extension int pex_get_status (struct pex_obj *@var{obj}, int @var{count}, int *@var{vector})
Returns the exit status of all programs run using @var{obj}.
@@ -246,7 +281,7 @@ be set to the exit status of the program.
@end deftypefn
-@deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int flags)
+@deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int @var{flags})
This is the old interface to execute one or more programs. It is
still supported for compatibility purposes, but is no longer
diff --git a/libiberty/strsignal.c b/libiberty/strsignal.c
index c3a16ab9bdca..4ca9e21d1133 100644
--- a/libiberty/strsignal.c
+++ b/libiberty/strsignal.c
@@ -9,7 +9,7 @@
/* We need to declare sys_siglist, because even if the system provides
it we can't assume that it is declared in <signal.h> (for example,
SunOS provides sys_siglist, but it does not declare it in any
- header file). fHowever, we can't declare sys_siglist portably,
+ header file). However, we can't declare sys_siglist portably,
because on some systems it is declared with const and on some
systems it is declared without const. If we were using autoconf,
we could work out the right declaration. Until, then we just
@@ -536,7 +536,7 @@ strtosigno (const char *name)
/*
-@deftypefn Supplemental void psignal (unsigned @var{signo}, char *@var{message})
+@deftypefn Supplemental void psignal (int @var{signo}, char *@var{message})
Print @var{message} to the standard error, followed by a colon,
followed by the description of the signal specified by @var{signo},
@@ -549,7 +549,7 @@ followed by a newline.
#ifndef HAVE_PSIGNAL
void
-psignal (unsigned signo, char *message)
+psignal (int signo, char *message)
{
if (signal_names == NULL)
{
diff --git a/libiberty/testsuite/Makefile.in b/libiberty/testsuite/Makefile.in
index 534626e952d4..56800a7a7ce0 100644
--- a/libiberty/testsuite/Makefile.in
+++ b/libiberty/testsuite/Makefile.in
@@ -73,7 +73,8 @@ test-expandargv: $(srcdir)/test-expandargv.c ../libiberty.a
$(srcdir)/test-expandargv.c ../libiberty.a
# Standard (either GNU or Cygnus) rules we don't use.
-html install-html info install-info clean-info dvi install etags tags installcheck:
+html install-html info install-info clean-info dvi pdf install-pdf \
+install etags tags installcheck:
# The standard clean rules.
mostlyclean:
diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected
index fa2a2fed2458..f1afc45c8c9b 100644
--- a/libiberty/testsuite/demangle-expected
+++ b/libiberty/testsuite/demangle-expected
@@ -3805,3 +3805,56 @@ java::lang::Math::acos(double)double
_Z4makeI7FactoryiET_IT0_Ev
make<Factory, int>()Factory<int>
make<Factory, int>
+#
+# From PR 28797
+--format=auto --no-params
+_Z1fM1AKiPKS1_
+f(int const A::*, int const A::* const*)
+f
+# This used to cause a core dump in the demangler -- PR 29176
+--format=auto --no-params
+SASDASDFASDF_sdfsdf
+SASDASDFASDF_sdfsdf
+SASDASDFASDF_sdfsdf
+# These are all cases of invalid manglings where the demangler would read
+# past the end of the string.
+# d_name wasn't honouring a NULL from d_substitution
+--format=gnu-v3
+_ZSA
+_ZSA
+# d_expr_primary wasn't honouring NULL from cplus_demangle_mangled_name
+--format=gnu-v3
+_ZN1fIL_
+_ZN1fIL_
+# d_operator_name was taking two characters in a row
+--format=gnu-v3
+_Za
+_Za
+# d_prefix wasn't honouring NULL from d_substitution
+--format=gnu-v3
+_ZNSA
+_ZNSA
+# d_prefix wasn't honouring NULL from d_template_param
+--format=gnu-v3
+_ZNT
+_ZNT
+# Dereferencing NULL in d_pointer_to_member_type
+--format=gnu-v3
+_Z1aMark
+_Z1aMark
+# <local-source-name> test 1
+--format=gnu-v3
+_ZL3foo_2
+foo
+# <local-source-name> test 2
+--format=gnu-v3
+_ZZL3foo_2vE4var1
+foo()::var1
+# <local-source-name> test 3
+--format=gnu-v3
+_ZZL3foo_2vE4var1_0
+foo()::var1
+# <local-source-name> test 4
+--format=gnu-v3
+_ZZN7myspaceL3foo_1EvEN11localstruct1fEZNS_3fooEvE16otherlocalstruct
+myspace::foo()::localstruct::f(myspace::foo()::otherlocalstruct)
diff --git a/libiberty/testsuite/test-demangle.c b/libiberty/testsuite/test-demangle.c
index 93793996fe0d..12b07dd6476c 100644
--- a/libiberty/testsuite/test-demangle.c
+++ b/libiberty/testsuite/test-demangle.c
@@ -86,6 +86,50 @@ getline(buf)
buf->alloced = alloc;
}
+/* If we have mmap() and mprotect(), copy the string S just before a
+ protected page, so that if the demangler runs over the end of the
+ string we'll get a fault, and return the address of the new string.
+ If no mmap, or it fails, or it looks too hard, just return S. */
+
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+#if defined(MAP_ANON) && ! defined (MAP_ANONYMOUS)
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+static const char *
+protect_end (const char * s)
+{
+#if defined(HAVE_MMAP) && defined (MAP_ANONYMOUS)
+ size_t pagesize = getpagesize();
+ static char * buf;
+ size_t s_len = strlen (s);
+ char * result;
+
+ /* Don't try if S is too long. */
+ if (s_len >= pagesize)
+ return s;
+
+ /* Allocate one page of allocated space followed by an unmapped
+ page. */
+ if (buf == NULL)
+ {
+ buf = mmap (NULL, pagesize * 2, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ if (! buf)
+ return s;
+ munmap (buf + pagesize, pagesize);
+ }
+
+ result = buf + (pagesize - s_len - 1);
+ memcpy (result, s, s_len + 1);
+ return result;
+#else
+ return s;
+#endif
+}
+
static void
fail (lineno, opts, in, out, exp)
int lineno;
@@ -150,6 +194,8 @@ main(argc, argv)
for (;;)
{
+ const char *inp;
+
getline (&format);
if (feof (stdin))
break;
@@ -157,6 +203,8 @@ main(argc, argv)
getline (&input);
getline (&expect);
+ inp = protect_end (input.data);
+
tests++;
no_params = 0;
@@ -237,14 +285,14 @@ main(argc, argv)
{
enum gnu_v3_ctor_kinds kc;
- kc = is_gnu_v3_mangled_ctor (input.data);
+ kc = is_gnu_v3_mangled_ctor (inp);
sprintf (buf, "%d", (int) kc);
}
else
{
enum gnu_v3_dtor_kinds kd;
- kd = is_gnu_v3_mangled_dtor (input.data);
+ kd = is_gnu_v3_mangled_dtor (inp);
sprintf (buf, "%d", (int) kd);
}
@@ -259,7 +307,7 @@ main(argc, argv)
cplus_demangle_set_style (style);
- result = cplus_demangle (input.data,
+ result = cplus_demangle (inp,
DMGL_PARAMS|DMGL_ANSI|DMGL_TYPES
|(ret_postfix ? DMGL_RET_POSTFIX : 0));
@@ -275,7 +323,7 @@ main(argc, argv)
if (no_params)
{
getline (&expect);
- result = cplus_demangle (input.data, DMGL_ANSI|DMGL_TYPES);
+ result = cplus_demangle (inp, DMGL_ANSI|DMGL_TYPES);
if (result
? strcmp (result, expect.data)
diff --git a/libtool.m4 b/libtool.m4
index cbd74d57161e..df40fe83e144 100644
--- a/libtool.m4
+++ b/libtool.m4
@@ -1,233 +1,1181 @@
-## libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
-## Copyright 1996, 1997, 1998, 1999, 2000, 2001
-## Free Software Foundation, Inc.
-## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-##
-## 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.
-##
-## As a special exception to the GNU General Public License, if you
-## distribute this file as part of a program that contains a
-## configuration script generated by Autoconf, you may include it under
-## the same distribution terms that you use for the rest of that program.
-
-# serial 46 AC_PROG_LIBTOOL
-AC_DEFUN([AC_PROG_LIBTOOL],
-[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
-dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
-dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
- AC_PROVIDE_IFELSE([AC_PROG_CXX],
- [AC_LIBTOOL_CXX],
- [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
-])])
-
-dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
-dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
-dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
- AC_PROVIDE_IFELSE([AC_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [ifdef([AC_PROG_GCJ],
- [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ
-])])
- ifdef([A][M_PROG_GCJ],
- [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ
-])])
- ifdef([LT_AC_PROG_GCJ],
- [define([LT_AC_PROG_GCJ], defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ
-])])])])])])
-
-AC_DEFUN([_AC_PROG_LIBTOOL],
-[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
-
-# Save cache, so that ltconfig can load it
-AC_CACHE_SAVE
-
-# 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 \
-|| AC_MSG_ERROR([libtool configure failed])
-
-# Reload cache, that may have been modified by ltconfig
-AC_CACHE_LOAD
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# 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.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# 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, a copy can be downloaded from
+# http://www.gnu.org/copyleft/gpl.html, or by writing to the Free
+# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+])
+
+# serial 53 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+ [m4_default([$3],
+ [m4_fatal([Libtool version $1 or higher is required],
+ 63)])],
+ [$2])])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+m4_require([_LT_SET_OPTIONS], [_LT_SET_OPTIONS([$1])])dnl
# 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"
+LIBTOOL_DEPS="$ltmain"
# Always use our own libtool.
LIBTOOL='$(SHELL) $(top_builddir)/libtool'
AC_SUBST(LIBTOOL)dnl
-# Redirect the config.log output again, so that the ltconfig log is not
-# clobbered by the next message.
-exec 5>>./config.log
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# _LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
])
-AC_DEFUN([AC_LIBTOOL_SETUP],
-[AC_PREREQ(2.13)dnl
-AC_REQUIRE([AC_ENABLE_SHARED])dnl
-AC_REQUIRE([AC_ENABLE_STATIC])dnl
-AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_LD])dnl
-AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
-AC_REQUIRE([AC_PROG_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
AC_REQUIRE([AC_PROG_LN_S])dnl
-AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
-# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
AC_REQUIRE([AC_OBJEXT])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
AC_REQUIRE([AC_EXEEXT])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-AC_LIBTOOL_SYS_MAX_CMD_LEN
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
case $deplibs_check_method in
file_magic*)
if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- AC_PATH_MAGIC
+ _LT_PATH_MAGIC
fi
;;
esac
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-AC_CHECK_TOOL(STRIP, strip, :)
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
-# 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"
-ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN],
-[libtool_flags="$libtool_flags --enable-dlopen"])
-ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
-[libtool_flags="$libtool_flags --enable-win32-dll"])
-AC_ARG_ENABLE(libtool-lock,
- [ --disable-libtool-lock avoid locking (might break parallel builds)])
-test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
-test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
-
-AC_ARG_WITH(pic,
- [ --with-pic try to use only PIC/non-PIC objects [default=use both]],
- pic_mode="$withval", pic_mode=default)
-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 __oline__ "configure"' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); 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"
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME. Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [[, ]],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+ [m4_ifval([$1], [$1], [$2])])
+ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+ m4_ifval([$4],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+ lt_dict_add_subkey([lt_decl_dict], [$2],
+ [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+ [0], [m4_fatal([$0: too few arguments: $#])],
+ [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+ [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_quote(m4_if([$2], [],
+ m4_quote(lt_decl_tag_varnames),
+ m4_quote(m4_shift($@)))),
+ m4_split(m4_normalize(m4_quote(_LT_TAGS))))])
+m4_define([_lt_decl_varnames_tagged], [lt_combine([$1], [$2], [_], $3)])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_if([$2], [],
+ m4_quote(lt_decl_varnames),
+ m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'. VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly. In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+# <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+# # Some comment about what VAR is for.
+# visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+ [description])))[]dnl
+m4_pushdef([_libtool_name],
+ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+ [0], [_libtool_name=[$]$1],
+ [1], [_libtool_name=$lt_[]$1],
+ [2], [_libtool_name=$lt_[]$1],
+ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'. Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+ dnl If the libtool generation code has been placed in $CONFIG_LT,
+ dnl instead of duplicating it all over again into config.status,
+ dnl then we will have config.status run $CONFIG_LT later, so it
+ dnl needs to know what name is stored there:
+ [AC_CONFIG_COMMANDS([libtool],
+ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+ dnl If the libtool generation code is destined for config.status,
+ dnl expand the accumulated commands and init code now:
+ [AC_CONFIG_COMMANDS([libtool],
+ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
;;
- *64-bit*)
- LD="${LD-ld} -melf64bmip"
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
;;
esac
- else
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
;;
esac
- fi
- fi
- rm -rf conftest*
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+ lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+ ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+ echo
+ AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+ -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
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2007 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+ case $[1] in
+ --version | --v* | -V )
+ echo "$lt_cl_version"; exit 0 ;;
+ --help | --h* | -h )
+ echo "$lt_cl_help"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --quiet | --q* | --silent | --s* | -q )
+ lt_cl_silent=: ;;
+
+ -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try `$[0] --help' for more information.]) ;;
+
+ *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try `$[0] --help for more information.]) ;;
+ esac
+ shift
+done
+
+if $lt_cl_silent; then
+ exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure. Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+ lt_cl_success=:
+ test "$silent" = yes &&
+ lt_config_lt_args="$lt_config_lt_args --quiet"
+ exec AS_MESSAGE_LOG_FD>/dev/null
+ $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+ exec AS_MESSAGE_LOG_FD>>config.log
+ $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars. Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+ m4_if(_LT_TAG, [C], [
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+ _LT_PROG_LTMAIN
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ _LT_PROG_XSI_SHELLFNS
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+# autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+ [C], [_LT_LANG(C)],
+ [C++], [_LT_LANG(CXX)],
+ [Java], [_LT_LANG(GCJ)],
+ [Fortran 77], [_LT_LANG(F77)],
+ [Fortran], [_LT_LANG(FC)],
+ [Windows Resource], [_LT_LANG(RC)],
+ [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+ [_LT_LANG($1)],
+ [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+ [LT_SUPPORTED_TAG([$1])dnl
+ m4_append([_LT_TAGS], [$1 ])dnl
+ m4_define([_LT_LANG_]$1[_enabled], [])dnl
+ _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [LT_LANG(CXX)],
+ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [LT_LANG(F77)],
+ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+ [LT_LANG(FC)],
+ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [m4_ifdef([AC_PROG_GCJ],
+ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([A][M_PROG_GCJ],
+ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([LT_PROG_GCJ],
+ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+ [LT_LANG(RC)],
+ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_LINKER_BOILERPLATE
+
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+ [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X[$]1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<_LT_EOF
+[$]*
+_LT_EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+if test -z "$lt_ECHO"; then
+ if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+ then
+ break
+ fi
+ done
+ fi
+
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+ else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$ECHO" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ ECHO='print -r'
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+ else
+ # Try using printf.
+ ECHO='printf %s\n'
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "[$]0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ ECHO=echo
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+ lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+ [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_REQUIRE([AC_OBJEXT])dnl
+AC_ARG_ENABLE([libtool-lock],
+ [AS_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
ia64-*-hpux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
- case "`/usr/bin/file conftest.o`" in
- *ELF-32*)
- HPUX_IA64_MODE="32"
- ;;
- *ELF-64*)
- HPUX_IA64_MODE="64"
- ;;
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
esac
fi
rm -rf conftest*
;;
-
-x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+*-*-irix6*)
# Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
+ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); 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"
- ;;
+ 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
- ;;
- *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"
- ;;
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
esac
- ;;
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
esac
fi
rm -rf conftest*
@@ -238,54 +1186,177 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -belf"
AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
- [AC_LANG_SAVE
- AC_LANG_C
- AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
- AC_LANG_RESTORE])
+ [AC_LANG_PUSH(C)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
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
;;
-
-ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
-[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
- AC_CHECK_TOOL(DLLTOOL, dlltool, false)
- AC_CHECK_TOOL(AS, as, false)
- AC_CHECK_TOOL(OBJDUMP, objdump, false)
-
- # recent cygwin and mingw systems supply a stub DllMain which the user
- # can override, but on older systems we have to supply one
- AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain,
- [AC_TRY_LINK([],
- [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*);
- DllMain (0, 0, 0);],
- [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])])
-
- case $host/$CC in
- *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*)
- # old mingw systems require "-dll" to link a DLL, while more recent ones
- # require "-mdll"
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -mdll"
- AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch,
- [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])])
- CFLAGS="$SAVE_CFLAGS" ;;
- *-*-cygwin* | *-*-pw32*)
- # cygwin systems need to pass --dll to the linker, and not link
- # crt.o which will require a WinMain@16 definition.
- lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;;
- esac
- ;;
- ])
+sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *) LD="${LD-ld} -64" ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+ [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+ [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[AC_REQUIRE([AC_OBJEXT])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $RM conftest*
])
+if test x"[$]$2" = xyes; then
+ m4_if([$5], , :, [$5])
+else
+ m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
-# AC_LIBTOOL_SYS_MAX_CMD_LEN
-# --------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
-[# find the maximum length of command line arguments
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $RM conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$4], , :, [$4])
+else
+ m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
AC_MSG_CHECKING([the maximum length of command line arguments])
AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
i=0
@@ -300,6 +1371,13 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
lt_cv_sys_max_cmd_len=12288; # 12K is about right
;;
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
cygwin* | mingw*)
# On Win9x/ME, this test blows up -- it succeeds, but takes
# about 5 minutes as the teststring grows exponentially.
@@ -324,171 +1402,1220 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
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
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
fi
# And add a safety zone
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`getconf ARG_MAX 2> /dev/null`
+ if test -n $lt_cv_sys_max_cmd_len; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
esac
])
-if test -n "$lt_cv_sys_max_cmd_len" ; then
+if test -n $lt_cv_sys_max_cmd_len ; then
AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
else
AC_MSG_RESULT(none)
fi
-])# AC_LIBTOOL_SYS_MAX_CMD_LEN
-
-
-# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
-AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
-
-# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
-AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
-
-# AC_ENABLE_SHARED - implement the --enable-shared flag
-# Usage: AC_ENABLE_SHARED[(DEFAULT)]
-# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
-# `yes'.
-AC_DEFUN([AC_ENABLE_SHARED],
-[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE(shared,
-changequote(<<, >>)dnl
-<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
-changequote([, ])dnl
-[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
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+ [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}]
+_LT_EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
fi
- done
- IFS="$ac_save_ifs"
- ;;
-esac],
-enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+ [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+ [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+ [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[AC_REQUIRE([AC_OBJEXT])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+ [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
-# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
-AC_DEFUN([AC_DISABLE_SHARED], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_SHARED(no)])
-
-# AC_ENABLE_STATIC - implement the --enable-static flag
-# Usage: AC_ENABLE_STATIC[(DEFAULT)]
-# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
-# `yes'.
-AC_DEFUN([AC_ENABLE_STATIC],
-[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE(static,
-changequote(<<, >>)dnl
-<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
-changequote([, ])dnl
-[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
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+ [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+ [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+ test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+ test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+ test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+ [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_case([$1],
+ [C], [withGCC=$GCC],
+ [CXX], [withGCC=$GXX],
+ [F77], [withGCC=$G77],
+ [FC], [withGCC=$ac_cv_fc_compiler_gnu],
+ [GCJ], [withGCC=$GCC],
+ [], [withGCC=$GCC
+if test "$withGCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
fi
done
- IFS="$ac_save_ifs"
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi],
+[withGCC=$GCC])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
;;
-esac],
-enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
-])
-# AC_DISABLE_STATIC - set the default static flag to --disable-static
-AC_DEFUN([AC_DISABLE_STATIC],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_STATIC(no)])
-
-
-# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
-# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
-# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
-# `yes'.
-AC_DEFUN([AC_ENABLE_FAST_INSTALL],
-[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE(fast-install,
-changequote(<<, >>)dnl
-<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
-changequote([, ])dnl
-[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
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
fi
- done
- IFS="$ac_save_ifs"
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ if test "$host_cpu" = m68k; then
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ else
+ dynamic_linker=no
+ fi
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $withGCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[123]]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
;;
-esac],
-enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
-])
-# AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
-AC_DEFUN([AC_DISABLE_FAST_INSTALL],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_FAST_INSTALL(no)])
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
-# AC_LIBTOOL_PICMODE - implement the --with-pic flag
-# Usage: AC_LIBTOOL_PICMODE[(MODE)]
-# Where MODE is either `yes' or `no'. If omitted, it defaults to
-# `both'.
-AC_DEFUN([AC_LIBTOOL_PICMODE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-pic_mode=ifelse($#,1,$1,default)])
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+interix[[3-9]]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
-# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
-AC_DEFUN([AC_PATH_TOOL_PREFIX],
-[AC_MSG_CHECKING([for $1])
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir"],
+ [shlibpath_overrides_runpath=yes])])
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+ [Variables whose values should be saved in libtool wrapper scripts and
+ restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+ [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+ [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+ [[List of archive names. First name is the real one, the rest are links.
+ The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+ [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+ [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+ [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+ [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+ [[As "finish_cmds", except a single script fragment to be evaled but
+ not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+ [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+ [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+ [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
[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=":"
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
dnl $ac_dummy forces splitting on constant user-supplied paths.
dnl POSIX.2 word splitting is done only on the output of word expansions,
dnl not every word. This closes a longstanding sh security hole.
- ac_dummy="ifelse([$2], , $PATH, [$2])"
+ ac_dummy="m4_if([$2], , $PATH, [$2])"
for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$1; then
lt_cv_path_MAGIC_CMD="$ac_dir/$1"
if test -n "$file_magic_test_file"; then
case $deplibs_check_method in
"file_magic "*)
- file_magic_regex="`expr \"$deplibs_check_method\" : \"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
+ $EGREP "$file_magic_regex" > /dev/null; then
:
else
- cat <<EOF 1>&2
+ cat <<_LT_EOF 1>&2
*** Warning: the command libtool uses to detect shared libraries,
*** $file_magic_cmd, produces output that libtool cannot recognize.
@@ -499,15 +2626,15 @@ dnl not every word. This closes a longstanding sh security hole.
*** may want to report the problem to your system manager and/or to
*** bug-libtool@gnu.org
-EOF
+_LT_EOF
fi ;;
esac
fi
break
fi
done
- IFS="$ac_save_ifs"
- MAGIC_CMD="$ac_save_MAGIC_CMD"
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
;;
esac])
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
@@ -516,35 +2643,51 @@ if test -n "$MAGIC_CMD"; then
else
AC_MSG_RESULT(no)
fi
-])
+_LT_DECL([], [MAGIC_CMD], [0],
+ [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
-# AC_PATH_MAGIC - find a file program which can recognise a shared library
-AC_DEFUN([AC_PATH_MAGIC],
-[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl
-AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH)
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
if test -z "$lt_cv_path_MAGIC_CMD"; then
if test -n "$ac_tool_prefix"; then
- AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH)
+ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
else
MAGIC_CMD=:
fi
fi
-])
+])# _LT_PATH_MAGIC
-# AC_PROG_LD - find the path to the GNU or non-GNU linker
-AC_DEFUN([AC_PROG_LD],
-[AC_ARG_WITH(gnu-ld,
-[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])dnl
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by GCC])
+ AC_MSG_CHECKING([for ld used by $CC])
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -554,12 +2697,12 @@ if test "$GCC" = yes; then
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%/%"`
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
done
test -z "$LD" && LD="$ac_prog"
;;
@@ -579,22 +2722,26 @@ else
fi
AC_CACHE_VAL(lt_cv_path_LD,
[if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
lt_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
+ # but apparently some variants of GNU ld 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
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
test "$with_gnu_ld" != no && break
- else
+ ;;
+ *)
test "$with_gnu_ld" != yes && break
- fi
+ ;;
+ esac
fi
done
- IFS="$ac_save_ifs"
+ IFS="$lt_save_ifs"
else
lt_cv_path_LD="$LD" # Let the user override the test with a path.
fi])
@@ -605,33 +2752,72 @@ else
AC_MSG_RESULT(no)
fi
test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_PROG_LD_GNU
-])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
-AC_DEFUN([AC_PROG_LD_GNU],
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# 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
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
lt_cv_prog_gnu_ld=yes
-else
+ ;;
+*)
lt_cv_prog_gnu_ld=no
-fi])
+ ;;
+esac])
with_gnu_ld=$lt_cv_prog_gnu_ld
-])
+])# _LT_PATH_LD_GNU
-# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
# -- PORTME Some linkers may need a different reload flag.
-AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
-[AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag,
-[lt_cv_ld_reload_flag='-r'])
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
reload_flag=$lt_cv_ld_reload_flag
-test -n "$reload_flag" && reload_flag=" $reload_flag"
-])
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
-# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
# -- PORTME fill in with the dynamic library characteristics
-AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
-[AC_CACHE_CHECK([how to recognise dependant libraries],
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
lt_cv_deplibs_check_method,
[lt_cv_file_magic_cmd='$MAGIC_CMD'
lt_cv_file_magic_test_file=
@@ -642,13 +2828,13 @@ lt_cv_deplibs_check_method='unknown'
# `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.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
# If you have `file' or equivalent on your system and you're not sure
# whether `pass_all' will *always* work, you probably want this one.
case $host_os in
-aix*)
+aix4* | aix5*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -656,39 +2842,42 @@ 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)']
+bsdi[[45]]*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
lt_cv_file_magic_cmd='/usr/bin/file -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
-cygwin* | mingw* |pw32*)
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
;;
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
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method=['file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library']
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
@@ -702,291 +2891,4266 @@ gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-hpux10.20*|hpux11*)
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
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_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
;;
- 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"
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
;;
*)
- 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"]
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
;;
esac
- lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ ;;
+
+interix[[3-9]]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
lt_cv_deplibs_check_method=pass_all
;;
# This must be Linux ELF.
-linux-gnu*)
+linux* | k*bsd*-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]+$']
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
else
- [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$']
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
fi
;;
-newsos6)
- [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)']
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
osf3* | osf4* | osf5*)
- # 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*)
+rdos*)
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*)]
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
lt_cv_deplibs_check_method=pass_all
;;
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+sysv4 | sysv4.3*)
case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
ncr)
lt_cv_deplibs_check_method=pass_all
;;
- 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*`
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
;;
esac
;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
])
file_magic_cmd=$lt_cv_file_magic_cmd
deplibs_check_method=$lt_cv_deplibs_check_method
-])
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+_LT_DECL([], [deplibs_check_method], [1],
+ [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+ [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
-# AC_PROG_NM - find the path to a BSD-compatible name lister
-AC_DEFUN([AC_PROG_NM],
-[AC_MSG_CHECKING([for BSD-compatible nm])
-AC_CACHE_VAL(lt_cv_path_NM,
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
[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
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
fi
- fi
+ done
+ IFS="$lt_save_ifs"
done
- IFS="$ac_save_ifs"
- test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+ : ${lt_cv_path_NM=no}
fi])
-NM="$lt_cv_path_NM"
-AC_MSG_RESULT([$NM])
-])
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+ AC_SUBST([DUMPBIN])
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+ [lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+ cat conftest.out >&AS_MESSAGE_LOG_FD
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
-# AC_CHECK_LIBM - check for math library
-AC_DEFUN([AC_CHECK_LIBM],
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
LIBM=
case $host in
*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
- # These system don't have libm
- # on darwin the libm is a symbolic link to libSystem.dylib
+ # These system don't have libm, or don't need it
;;
*-ncr-sysv4.3*)
AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
- AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
;;
*)
- AC_CHECK_LIB(m, main, LIBM="-lm")
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
+ ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+ [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
;;
esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK ['"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx]"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
-# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
-# the libltdl convenience library and INCLTDL to the include flags for
-# the libltdl header and adds --enable-ltdl-convenience to the
-# configure arguments. Note that LIBLTDL and INCLTDL are not
-# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not
-# provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed
-# with '${top_builddir}/' and INCLTDL will be prefixed with
-# '${top_srcdir}/' (note the single quotes!). If your package is not
-# flat and you're not using automake, define top_builddir and
-# top_srcdir appropriately in the Makefiles.
-AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- case $enable_ltdl_convenience in
- no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
- "") enable_ltdl_convenience=yes
- ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
- esac
- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
- INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+ [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+ [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+ [lt_cv_sys_global_symbol_to_c_name_address], [1],
+ [Transform the output of nm in a C name address pair])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ fi
+ ;;
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix4* | aix5*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC*)
+ # Portland Group C++ compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ fi
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ rdos*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
])
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+ [How to pass a linker flag through the compiler])
-# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
-# the libltdl installable library and INCLTDL to the include flags for
-# the libltdl header and adds --enable-ltdl-install to the configure
-# arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
-# AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed
-# libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will
-# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
-# with '${top_srcdir}/' (note the single quotes!). If your package is
-# not flat and you're not using automake, define top_builddir and
-# top_srcdir appropriately in the Makefiles.
-# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
-AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- AC_CHECK_LIB(ltdl, main,
- [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
- [if test x"$enable_ltdl_install" = xno; then
- AC_MSG_WARN([libltdl not installed, but installation disabled])
- else
- enable_ltdl_install=yes
- fi
- ])
- if test x"$enable_ltdl_install" = x"yes"; then
- ac_configure_args="$ac_configure_args --enable-ltdl-install"
- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
- INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+ [_LT_TAGVAR(lt_prog_compiler_pic_works, $1)],
+ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ [Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_TAGVAR(lt_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+ [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix4* | aix5*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw*)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+], [
+ runpath_var=
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_cmds, $1)=
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(compiler_needs_object, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ *)
+ tmp_sharedflag='-shared' ;;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+ runpath_var=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
else
- ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
- LIBLTDL="-lltdl"
- INCLTDL=
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ # see comment about different semantics on the GNU ld section
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ bsdi[[45]]*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[[012]])
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ if test "$GCC" = yes ; then
+ AC_CACHE_VAL([lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi-module to the
+ # link flags.
+ echo "int foo(void){return 1;}" > conftest.c
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib ${wl}-single_module conftest.c
+ if test -f libconftest.dylib; then
+ lt_cv_apple_cc_single_mod=yes
+ rm libconftest.dylib
+ fi
+ rm conftest.$ac_ext
+ fi])
+ output_verbose_link_cmd=echo
+ if test "X$lt_cv_apple_cc_single_mod" = Xyes ; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $single_module -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ _LT_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ _LT_TAGVAR(module_expsym_cmds, $1)='sed -e "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd=echo
+ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`$ECHO $rpath/$soname` $verstring'
+ _LT_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_TAGVAR(module_expsym_cmds, $1)='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ freebsd1*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ AC_LINK_IFELSE(int foo(void) {},
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+ )
+ LDFLAGS="$save_LDFLAGS"
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
fi
])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+ [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-# If this macro is not defined by Autoconf, define it here.
-ifdef([AC_PROVIDE_IFELSE],
- [],
- [define([AC_PROVIDE_IFELSE],
- [ifdef([AC_PROVIDE_$1],
- [$2], [$3])])])
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-# AC_LIBTOOL_CXX - enable support for C++ libraries
-AC_DEFUN([AC_LIBTOOL_CXX], [AC_REQUIRE([_AC_LIBTOOL_CXX])])
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+ then
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+ [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+ [enable_shared_with_static_runtimes], [0],
+ [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+ [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+ [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+ [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+ [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+ [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+ [Commands used to build a loadable module if different from building
+ a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+ [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+ [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+ [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+ [Flag to hardcode $libdir into a binary during linking.
+ This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+ [[If ld is used when linking, flag to hardcode $libdir into a binary
+ during linking. This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+ [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary and the resulting library dependency is
+ "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+ library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+ [Set to "yes" if building a shared library automatically hardcodes DIR
+ into the library and all subsequent libraries and executables linked
+ against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+ [Set to yes if linker adds runtime paths of dependent libraries
+ to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+ [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+ [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+ [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+ [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+ [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+ [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+ [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+ [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
-AC_DEFUN([_AC_LIBTOOL_CXX],
-[AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([AC_PROG_CXXCPP])
-LIBTOOL_DEPS=$LIBTOOL_DEPS" $ac_aux_dir/ltcf-cxx.sh"
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
lt_save_CC="$CC"
-lt_save_CFLAGS="$CFLAGS"
-dnl Make sure LTCC is set to the C compiler, i.e. set LTCC before CC
-dnl is set to the C++ compiler.
-AR="$AR" LTCC="$CC" CC="$CXX" CXX="$CXX" CFLAGS="$CXXFLAGS" 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 -o libtool $libtool_flags \
---build="$build" --add-tag=CXX $ac_aux_dir/ltcf-cxx.sh $host \
-|| AC_MSG_ERROR([libtool tag configuration failed])
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+ LT_SYS_DLOPEN_SELF
+ _LT_CMD_STRIPLIB
+
+ # Report which library types will actually be built
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_CONFIG($1)
+fi
+AC_LANG_POP
CC="$lt_save_CC"
-CFLAGS="$lt_save_CFLAGS"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ AC_PROG_CXXCPP
+else
+ _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+ else
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+ fi
+
+ if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ LT_PATH_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared
+ # libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[[012]])
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GXX" = yes ; then
+ AC_CACHE_VAL([lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi-module to the
+ # link flags.
+ echo "int foo(void){return 1;}" > conftest.c
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib ${wl}-single_module conftest.c
+ if test -f libconftest.dylib; then
+ lt_cv_apple_cc_single_mod=yes
+ rm libconftest.dylib
+ fi
+ rm conftest.$ac_ext
+ fi])
+ output_verbose_link_cmd=echo
+ if test "X$lt_cv_apple_cc_single_mod" = Xyes ; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ _LT_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ _LT_TAGVAR(module_expsym_cmds, $1)='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd=echo
+ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`$ECHO "$rpath/$soname"` $verstring'
+ _LT_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag,
+ # it doesn't exist in older darwin lds
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_TAGVAR(module_expsym_cmds, $1)='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ freebsd[[12]]*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ freebsd-elf*)
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ gnu*)
+ ;;
+
+ hpux9*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+ fi
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [[1-5]]*)
+ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+ $RANLIB $oldlib'
+ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ *) # Version 6 will use weak symbols
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='echo'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ openbsd*)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=echo
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+ $RM $lib.exp'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ case $host in
+ osf3*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='echo'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+ fi
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+ test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+ _LT_TAGVAR(GCC, $1)="$GXX"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
-# Redirect the config.log output again, so that the ltconfig log is not
-# clobbered by the next message.
-exec 5>>./config.log
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+_LT_EOF
])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ # The `*' in the case matches for architectures that use `case' in
+ # $output_verbose_cmd can trigger glob expansion during the loop
+ # eval without this substitution.
+ output_verbose_link_cmd=`$ECHO "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
+
+ for p in `eval $output_verbose_link_cmd`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" ||
+ test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+ _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+ _LT_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+ _LT_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_TAGVAR(predep_objects,$1)=
+ _LT_TAGVAR(postdep_objects,$1)=
+ _LT_TAGVAR(postdeps,$1)=
+ ;;
+
+linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ # Adding this requires a known-good setup of shared libraries for
+ # Sun compiler versions before 5.6, else PIC objects from an old
+ # archive will be linked into the output, leading to subtle bugs.
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+_LT_TAGDECL([], [predep_objects], [1],
+ [Dependencies to place before and after the objects being linked to
+ create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+ [The library search path used internally by the compiler when linking
+ a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+ _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ CC=${F77-"f77"}
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$G77"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+ _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ CC=${FC-"f95"}
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
-# AC_LIBTOOL_GCJ - enable support for GCJ libraries
-AC_DEFUN([AC_LIBTOOL_GCJ],[AC_REQUIRE([_AC_LIBTOOL_GCJ])])
-
-AC_DEFUN([_AC_LIBTOOL_GCJ],
-[AC_REQUIRE([AC_PROG_LIBTOOL])
-AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
- [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
- [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
- [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
- [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
- [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
-LIBTOOL_DEPS=$LIBTOOL_DEPS" $ac_aux_dir/ltcf-gcj.sh"
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
lt_save_CC="$CC"
-lt_save_CFLAGS="$CFLAGS"
-dnl Make sure LTCC is set to the C compiler, i.e. set LTCC before CC
-dnl is set to the C++ compiler.
-AR="$AR" LTCC="$CC" CC="$GCJ" CFLAGS="$GCJFLAGS" 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 -o libtool $libtool_flags \
---build="$build" --add-tag=GCJ $ac_aux_dir/ltcf-gcj.sh $host \
-|| AC_MSG_ERROR([libtool tag configuration failed])
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
CC="$lt_save_CC"
-CFLAGS="$lt_save_CFLAGS"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+ :
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+ [AC_CHECK_TOOL(GCJ, gcj,)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
-# Redirect the config.log output again, so that the ltconfig log is not
-# clobbered by the next message.
-exec 5>>./config.log
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+ [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
-dnl old names
-AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
-AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
-AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
-
-dnl This is just to silence aclocal about the macro not being used
-ifelse([AC_DISABLE_FAST_INSTALL])dnl
-
-AC_DEFUN([LT_AC_PROG_GCJ],
-[AC_CHECK_TOOL(GCJ, gcj, no)
- test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
- AC_SUBST(GCJFLAGS)
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$[1]+=\$[2]"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$[1]=\$$[1]\$[2]"
+}
+_LT_EOF
+ ;;
+ esac
])
diff --git a/ltcf-c.sh b/ltcf-c.sh
deleted file mode 100644
index 7a91c40a5c6e..000000000000
--- a/ltcf-c.sh
+++ /dev/null
@@ -1,828 +0,0 @@
-#### This script is meant to be sourced by ltconfig.
-
-# ltcf-c.sh - Create a C compiler specific configuration
-#
-# Copyright (C) 1996-2000, 2001 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# 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.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='main(){return(0);}'
-
-## Linker Characteristics
-case $host_os in
-cygwin* | mingw*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$with_gcc" != yes; then
- with_gnu_ld=no
- fi
- ;;
-
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix3* | aix4* | aix5*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- fi
- ;;
-
- amigaos*)
- archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
-
- # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can use
- # them.
- ld_shlibs=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- cygwin* | mingw*)
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- allow_undefined_flag=unsupported
- always_export_symbols=yes
-
- extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
- sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //; p; }" -e d < $0 > $output_objdir/impgen.c~
- test -f $output_objdir/impgen.exe || (cd $output_objdir && \
- if test "x$BUILD_CC" != "x" ; then $BUILD_CC -o impgen impgen.c ; \
- else $CC -o impgen impgen.c ; fi)~
- $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
-
- old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
-
- # cygwin and mingw dlls have different entry points and sets of symbols
- # to exclude.
- # FIXME: what about values for MSVC?
- dll_entry=__cygwin_dll_entry@12
- dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
- case $host_os in
- mingw*)
- # mingw values
- dll_entry=_DllMainCRTStartup@12
- dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
- ;;
- esac
-
- # mingw and cygwin differ, and it's simplest to just exclude the union
- # of the two symbol sets.
- dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
-
- # recent cygwin and mingw systems supply a stub DllMain which the user
- # can override, but on older systems we have to supply one (in ltdll.c)
- if test "x$lt_cv_need_dllmain" = "xyes"; then
- ltdll_obj='$output_objdir/$soname-ltdll.'"$objext "
- ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $output_objdir/$soname-ltdll.c~
- test -f $output_objdir/$soname-ltdll.$objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
- else
- ltdll_obj=
- ltdll_cmds=
- fi
-
- # Extract the symbol export list from an `--export-all' def file,
- # then regenerate the def file from the symbol export list, so that
- # the compiled dll only exports the symbol export list.
- # Be careful not to strip the DATA tag left be newer dlltools.
- export_symbols_cmds="$ltdll_cmds"'
- $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
- sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
-
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is.
- # If DATA tags from a recent dlltool are present, honour them!
- archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname-def;
- else
- echo EXPORTS > $output_objdir/$soname-def;
- _lt_hint=1;
- cat $export_symbols | while read symbol; do
- set dummy \$symbol;
- case \[$]# in
- 2) echo " \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
- *) echo " \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;;
- esac;
- _lt_hint=`expr 1 + \$_lt_hint`;
- done;
- fi~
- '"$ltdll_cmds"'
- $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
- $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
- $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
- $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
- $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
- ;;
-
- darwin* | rhapsody*)
- allow_undefined_flag='-undefined suppress'
- archive_cmds='$CC `test .$module = .yes && echo -bundle || echo -dynamiclib` $allow_undefined_flag -o $lib $libobjs $deplibs $linkopts -install_name $rpath/$soname `test -n "$verstring" -a x$verstring != x0.0 && echo $verstring`'
- # We need to add '_' to the symbols in $export_symbols first
- #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- whole_archive_flag_spec='-all_load $convenience'
- ;;
-
- netbsd* | knetbsd*-gnu)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris* | sysv5*)
- if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- tpf*)
- ld_shlibs=yes
- ;;
-
- *)
- if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
-
- if test "$ld_shlibs" = yes; then
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec='${wl}--export-dynamic'
- case $host_os in
- cygwin* | mingw*)
- # dlltool doesn't understand --whole-archive et. al.
- whole_archive_flag_spec=
- ;;
- *)
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec=
- fi
- ;;
- esac
- fi
-else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L=yes
- if test "$with_gcc" = yes && test -z "$link_static_flag"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct=unsupported
- fi
- ;;
-
- aix4* | aix5*)
- hardcode_direct=yes
- hardcode_libdir_separator=':'
- link_all_deplibs=yes
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
- if test "$with_gcc" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- hardcode_direct=yes
- else
- # We have old collect2
- hardcode_direct=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L=yes
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_libdir_separator=
- fi
- esac
- shared_flag='-shared'
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
-
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- if test $with_gnu_ld = no; then
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- fi
- else
- # Test if we are trying to use run time linking, or normal AIX style linking.
- # If -brtl is somewhere in LDFLAGS, we need to do run time linking.
- aix_use_runtimelinking=no
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl" ); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
- # -bexpall does not export symbols beginning with underscore (_)
- always_export_symbols=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other run time loading flags (-brtl), -berok will
- # link without error, but may produce a broken library.
- allow_undefined_flag=' ${wl}-berok'
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
- else
- if test "$host_cpu" = ia64; then
- if test $with_gnu_ld = no; then
- hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
- allow_undefined_flag="-z nodefs"
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
- fi
- else
- allow_undefined_flag=' ${wl}-berok'
- # -bexpall does not export symbols beginning with underscore (_)
- always_export_symbols=yes
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec=' '
- build_libtool_need_lc=yes
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
- # This is similar to how AIX traditionally builds it's shared libraries.
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- # see comment about different semantics on the GNU ld section
- ld_shlibs=no
- ;;
-
- cygwin* | mingw*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_from_new_cmds='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
- fix_srcfile_path='`cygpath -w "$srcfile"`'
- ;;
-
- freebsd1*)
- ld_shlibs=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | kfreebsd*-gnu)
- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- hpux9* | hpux10* | hpux11*)
- case "$host_cpu" in
- ia64*)
- hardcode_direct=no
- hardcode_shlibpath_var=no
- archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir' ;;
- *)
- if test $with_gcc = yes; then
- case "$host_os" in
- hpux9*) archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
- *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;;
- esac
- else
- case $host_os in
- hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
- *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
- esac
- fi
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_minus_L=yes # Not in the search PATH, but as the default
- # location of the library.
- ;;
- esac
- export_dynamic_flag_spec='${wl}-E'
- hardcode_direct=yes
- ;;
-
- irix5* | irix6*)
- if test "$with_gcc" = yes; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
- else
- archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- link_all_deplibs=yes
- ;;
-
- netbsd* | knetbsd*-gnu)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- newsos6)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- hardcode_direct=yes
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_shlibpath_var=no
- ;;
-
- openbsd*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$with_gcc" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$with_gcc" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
- archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
-
- # cc supports -rpath directly
- hardcode_libdir_flag_spec='-rpath $libdir'
- fi
- hardcode_libdir_separator=:
- ;;
-
- sco3.2v5*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ;;
-
- solaris*)
- no_undefined_flag=' -z defs'
- if test "$with_gcc" = yes; then
- archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
- else
- archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- fi
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_shlibpath_var=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *) # Supported since Solaris 2.6 (maybe 2.5.1?)
- whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
- esac
- link_all_deplibs=yes
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- sysv4)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- hardcode_direct=no #Motorola manual says yes, but my tests say they lie
- ;;
-
- sysv4.3*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- export_dynamic_flag_spec='-Bexport'
- ;;
-
- sysv5*)
- no_undefined_flag=' -z text'
- # $CC -shared without GNU ld will not create a library from C++
- # object files and a static libstdc++, better avoid it by now
- archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- hardcode_libdir_flag_spec=
- hardcode_shlibpath_var=no
- runpath_var='LD_RUN_PATH'
- ;;
-
- uts4*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- dgux*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs=yes
- fi
- ;;
-
- sysv4.2uw2*)
- archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=no
- hardcode_shlibpath_var=no
- hardcode_runpath_var=yes
- runpath_var=LD_RUN_PATH
- ;;
-
- sysv5uw7* | unixware7*)
- no_undefined_flag='${wl}-z ${wl}text'
- if test "$GCC" = yes; then
- archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- ;;
-
- *)
- ld_shlibs=no
- ;;
- esac
-fi
-
-## Compiler Characteristics: PIC flags, static flags, etc
-if test "X${ac_cv_prog_cc_pic+set}" = Xset; then
- :
-else
- ac_cv_prog_cc_pic=
- ac_cv_prog_cc_shlib=
- ac_cv_prog_cc_wl=
- ac_cv_prog_cc_static=
- ac_cv_prog_cc_no_builtin=
- ac_cv_prog_cc_can_build_shared=$can_build_shared
-
- if test "$with_gcc" = yes; then
- ac_cv_prog_cc_wl='-Wl,'
- ac_cv_prog_cc_static='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_cv_prog_cc_static='-Bstatic'
- else
- lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- ac_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
- ;;
- beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
- cygwin* | mingw* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- ac_cv_prog_cc_pic='-DDLL_EXPORT'
- ;;
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_cv_prog_cc_pic='-fno-common'
- ;;
- *djgpp*)
- # DJGPP does not support shared libraries at all
- ac_cv_prog_cc_pic=
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- ac_cv_prog_cc_pic=-Kconform_pic
- fi
- ;;
- *)
- ac_cv_prog_cc_pic='-fPIC'
- ;;
- esac
- else
- # PORTME Check for PIC flags for the system compiler.
- case $host_os in
- aix*)
- # All AIX code is PIC.
- ac_cv_prog_cc_static="$ac_cv_prog_cc_static ${ac_cv_prog_cc_wl}-lC"
- ;;
-
- hpux9* | hpux10* | hpux11*)
- # Is there a better ac_cv_prog_cc_static that works with the bundled CC?
- ac_cv_prog_cc_wl='-Wl,'
- ac_cv_prog_cc_static="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
- ac_cv_prog_cc_pic='+Z'
- ;;
-
- irix5* | irix6*)
- ac_cv_prog_cc_wl='-Wl,'
- ac_cv_prog_cc_static='-non_shared'
- # PIC (with -KPIC) is the default.
- ;;
-
- cygwin* | mingw* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- ac_cv_prog_cc_pic='-DDLL_EXPORT'
- ;;
-
- newsos6)
- ac_cv_prog_cc_pic='-KPIC'
- ac_cv_prog_cc_static='-Bstatic'
- ;;
-
- osf3* | osf4* | osf5*)
- # All OSF/1 code is PIC.
- ac_cv_prog_cc_wl='-Wl,'
- ac_cv_prog_cc_static='-non_shared'
- ;;
-
- sco3.2v5*)
- ac_cv_prog_cc_pic='-Kpic'
- ac_cv_prog_cc_static='-dn'
- ac_cv_prog_cc_shlib='-belf'
- ;;
-
- solaris*)
- ac_cv_prog_cc_pic='-KPIC'
- ac_cv_prog_cc_static='-Bstatic'
- ac_cv_prog_cc_wl='-Wl,'
- ;;
-
- sunos4*)
- ac_cv_prog_cc_pic='-PIC'
- ac_cv_prog_cc_static='-Bstatic'
- ac_cv_prog_cc_wl='-Qoption ld '
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- ac_cv_prog_cc_pic='-KPIC'
- ac_cv_prog_cc_static='-Bstatic'
- ac_cv_prog_cc_wl='-Wl,'
- ;;
-
- uts4*)
- ac_cv_prog_cc_pic='-pic'
- ac_cv_prog_cc_static='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- ac_cv_prog_cc_pic='-Kconform_pic'
- ac_cv_prog_cc_static='-Bstatic'
- fi
- ;;
-
- *)
- ac_cv_prog_cc_can_build_shared=no
- ;;
- esac
- fi
- case "$host_os" in
- # Platforms which do not suport PIC and -DPIC is meaningless
- # on them:
- *djgpp*)
- ac_cv_prog_cc_pic=
- ;;
- *)
- ac_cv_prog_cc_pic="$ac_cv_prog_cc_pic -DPIC"
- ;;
- esac
-fi
-
-need_lc=yes
-if test "$enable_shared" = yes && test "$with_gcc" = yes; then
- case $archive_cmds in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- echo $ac_n "checking whether -lc should be explicitly linked in... $ac_c" 1>&6
- if eval "test \"`echo '$''{'ac_cv_archive_cmds_needs_lc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- need_lc=$ac_cv_archive_cmds_needs_lc
- else
- $rm conftest*
- echo "static int dummy;" > conftest.$ac_ext
- if { (eval echo ltcf-c.sh:need_lc: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then
- # Append any warnings to the config.log.
- cat conftest.err 1>&5
- soname=conftest
- lib=conftest
- libobjs=conftest.$objext
- deplibs=
- wl=$ac_cv_prog_cc_wl
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- save_allow_undefined_flag=$allow_undefined_flag
- allow_undefined_flag=
- if { (eval echo ltcf-c.sh:need_lc: \"$archive_cmds\") 1>&5; (eval $archive_cmds) 2>&1 | grep " -lc " 1>&5 ; }; then
- need_lc=no
- fi
- allow_undefined_flag=$save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- fi
- $rm conftest*
- echo "$ac_t$need_lc" 1>&6
- ;;
- esac
-fi
-ac_cv_archive_cmds_needs_lc=$need_lc
diff --git a/ltcf-cxx.sh b/ltcf-cxx.sh
deleted file mode 100644
index fa8dbd08d633..000000000000
--- a/ltcf-cxx.sh
+++ /dev/null
@@ -1,1024 +0,0 @@
-#### This script is meant to be sourced by ltconfig.
-
-# ltcf-cxx.sh - Create a C++ compiler specific configuration
-#
-# Copyright (C) 1996-1999, 2000, 2001, 2003 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# Original C++ support by:Gary V. Vaughan <gvv@techie.com>
-# Alexandre Oliva <oliva@lsd.ic.unicamp.br>
-# Ossama Othman <ossama@debian.org>
-# Thomas Thanner <tanner@gmx.de>
-#
-# 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.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Source file extension for C++ test sources.
-ac_ext=cc
-
-# Object file extension for compiled C++ test sources.
-objext=o
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(int, char *[]) { return (0); }'
-
-# C++ compiler
-CXX=${CXX-c++}
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-CC=${CC-"$CXX"}
-CFLAGS=${CFLAGS-"$CXXFLAGS"}
-
-# Allow CC to be a program name with arguments.
-set dummy $CC
-compiler=$2
-cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
-
-# Check if we are using GNU gcc (taken/adapted from configure script)
-# We need to check here since "--with-gcc" is set at configure time,
-# not ltconfig time!
-cat > conftest.$ac_ext <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
-if { ac_try='${CC-c++} -E conftest.$ac_ext'; { (eval echo \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- with_gcc=yes
-
- # Set up default GNU C++ configuration
-
- # Check if GNU C++ uses GNU ld as the underlying linker, since the
- # archiving commands below assume that GNU ld is being used. The
- # assumption here is that the linker is going to be the same as that
- # used by the C compiler. For the purposes of GCC, this is ok, but
- # if someone uses g++ along with a non-GNU C compiler that doesn't
- # use GNU ld, we may lose. This is ok for the toolchain tree, since
- # the only users of ltcf-cxx.sh are libstdc++-v3 and libjava,
- # anyway, and those use both gcc and g++, so the settings are bound
- # to be the same.
-
- if test "$with_gnu_ld" = yes; then
- archive_cmds='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
- hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec='${wl}--export-dynamic'
-
- # If archive_cmds runs LD, not CC, wlarc should be empty
- # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
- # investigate it a little bit more. (MM)
- wlarc='${wl}'
-
- # ancient GNU ld didn't support --whole-archive et. al.
- if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
- egrep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec=
- fi
- else
- wlarc=
-
- # A generic and very simple default shared library creation
- # command for GNU C++ for the case where it uses the native
- # linker, instead of GNU ld. If possible, this setting should
- # overridden to take advantage of the native linker features on
- # the platform it is being used on.
- archive_cmds='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- fi
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | egrep "\-L"'
-
-else
- with_gcc=no
- wlarc=
-fi
-
-# PORTME: fill in a description of your system's C++ link characteristics
-case $host_os in
- aix3*)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- aix4* | aix5*)
- archive_cmds=''
- hardcode_direct=yes
- hardcode_libdir_separator=':'
- link_all_deplibs=yes
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
- if test "$with_gcc" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- hardcode_direct=yes
- else
- # We have old collect2
- hardcode_direct=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L=yes
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_libdir_separator=
- fi
- esac
- shared_flag='-shared'
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
-
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- if test $with_gnu_ld = no; then
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- fi
- else
- # Test if we are trying to use run time linking, or normal AIX style linking.
- # If -brtl is somewhere in LDFLAGS, we need to do run time linking.
- aix_use_runtimelinking=no
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl" ); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- always_export_symbols=yes
- if test "$aix_use_runtimelinking" = yes; then
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
- allow_undefined_flag=' -Wl,-G'
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}-brtl \${wl}$exp_sym_flag:\$export_symbols"
- else
- if test "$host_cpu" = ia64; then
- if test $with_gnu_ld = no; then
- hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
- allow_undefined_flag="-z nodefs"
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
- fi
- else
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
- # Warning - without using the other run time loading flags, -berok will
- # link without error, but may produce a broken library.
- no_undefined_flag=' ${wl}-bnoerok'
- allow_undefined_flag=' ${wl}-berok'
- # -bexpall does not export symbols beginning with underscore (_)
- always_export_symbols=yes
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec=' '
- build_libtool_need_lc=yes
- # This is similar to how AIX traditionally builds it's shared libraries.
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
- chorus*)
- case $cc_basename in
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- esac
- ;;
- dgux*)
- case $cc_basename in
- ec++)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- ghcx)
- # Green Hills C++ Compiler
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- esac
- ;;
- freebsd[12]*)
- # C++ shared libraries reported to be fairly broken before switch to ELF
- ld_shlibs=no
- ;;
- freebsd* | kfreebsd*-gnu)
- # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
- # conventions
- ld_shlibs=yes
- ;;
- gnu*)
- ;;
- hpux*)
- if test $with_gnu_ld = no; then
- case "$host_cpu" in
- ia64*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no ;;
- *)
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' ;;
- esac
- hardcode_direct=yes
- hardcode_libdir_separator=:
- export_dynamic_flag_spec='${wl}-E'
- fi
- hardcode_minus_L=yes # Not in the search PATH, but as the default
- # location of the library.
-
- case $cc_basename in
- CC)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- aCC)
- case $host_os in
- hpux9*) archive_cmds='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
- *) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;;
- esac
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test $with_gcc = yes; then
- if test $with_gnu_ld = no; then
- case "$host_os" in
- hpux9*) archive_cmds='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
- *)
- case "$host_cpu" in
- ia64*)
- archive_cmds='$LD -b +h $soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' ;;
- *)
- archive_cmds='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;;
- esac
- ;;
- esac
- fi
- else
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- fi
- ;;
- esac
- ;;
- irix5* | irix6*)
- case $cc_basename in
- CC)
- # SGI C++
- archive_cmds='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-
- # Archives containing C++ object files must be created using
- # "CC -ar", where "CC" is the IRIX C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- old_archive_cmds='$CC -ar -WR,-u -o $oldlib $oldobjs'
- ;;
- *)
- if test "$with_gcc" = yes; then
- if test "$with_gnu_ld" = no; then
- archive_cmds='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
- else
- archive_cmds='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -o $lib'
- fi
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- link_all_deplibs=yes
- ;;
- esac
- ;;
- linux*)
- case $cc_basename in
- KCC)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- archive_cmds='templib=`echo $lib | sed -e "s/\.so\..*/\.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
- archive_expsym_cmds='templib=`echo $lib | sed -e "s/\.so\..*/\.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest.so 2>&1 | egrep "ld"`; rm -f libconftest.so; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
- hardcode_libdir_flag_spec='${wl}--rpath,$libdir'
- export_dynamic_flag_spec='${wl}--export-dynamic'
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- old_archive_cmds='$CC -Bstatic -o $oldlib $oldobjs'
- ;;
- cxx)
- # Compaq C++
- archive_cmds='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec='-rpath $libdir'
- hardcode_libdir_separator=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | sed "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- esac
- ;;
- lynxos*)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- m88k*)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- mvs*)
- case $cc_basename in
- cxx)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- esac
- ;;
- netbsd* | knetbsd*-gnu)
- # NetBSD uses g++ - do we need to do anything?
- ;;
- osf3*)
- case $cc_basename in
- KCC)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- archive_cmds='templib=`echo $lib | sed -e "s/\.so\..*/\.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- hardcode_libdir_separator=:
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- old_archive_cmds='$CC -Bstatic -o $oldlib $oldobjs'
-
- ;;
- RCC)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- cxx)
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | sed "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$with_gcc" = yes && test "$with_gnu_ld" = no; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | egrep "\-L"'
- else
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- fi
- ;;
- esac
- ;;
- osf4* | osf5*)
- case $cc_basename in
- KCC)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- archive_cmds='templib=`echo $lib | sed -e "s/\.so\..*/\.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- hardcode_libdir_separator=:
-
- # Archives containing C++ object files must be created using
- # the KAI C++ compiler.
- old_archive_cmds='$CC -o $oldlib $oldobjs'
- ;;
- RCC)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- cxx)
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
- archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done~
- echo "-hidden">> $lib.exp~
- $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~
- $rm $lib.exp'
-
- hardcode_libdir_flag_spec='-rpath $libdir'
- hardcode_libdir_separator=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | sed "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$with_gcc" = yes && test "$with_gnu_ld" = no; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | egrep "\-L"'
- else
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- fi
- ;;
- esac
- ;;
- psos*)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- sco*)
- case $cc_basename in
- CC)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- esac
- ;;
- sunos4*)
- case $cc_basename in
- CC)
- # Sun C++ 4.x
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- lcc)
- # Lucid
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- esac
- ;;
- solaris*)
- case $cc_basename in
- CC)
- # Sun C++ 4.2, 5.x and Centerline C++
- no_undefined_flag=' -zdefs'
- archive_cmds='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_shlibpath_var=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The C++ compiler is used as linker so we must use $wl
- # flag to pass the commands to the underlying system
- # linker.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- ;;
- esac
- link_all_deplibs=yes
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | egrep "\-R|\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- old_archive_cmds='$CC -xar -o $oldlib $oldobjs'
- ;;
- gcx)
- # Green Hills C++ Compiler
- archive_cmds='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
- # The C++ compiler must be used to create the archive.
- old_archive_cmds='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
- ;;
- *)
- # GNU C++ compiler with Solaris linker
- if test "$with_gcc" = yes && test "$with_gnu_ld" = no; then
- no_undefined_flag=' ${wl}-z ${wl}defs'
- if $CC --version | egrep -v '^2\.7' > /dev/null; then
- archive_cmds='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | egrep \"\-L\""
- else
- # g++ 2.7 appears to require `-G' NOT `-shared' on this
- # platform.
- archive_cmds='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | egrep \"\-L\""
- fi
-
- hardcode_libdir_flag_spec='${wl}-R $wl$libdir'
- fi
- ;;
- esac
- ;;
- tandem*)
- case $cc_basename in
- NCC)
- # NonStop-UX NCC 3.20
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- esac
- ;;
- tpf*)
- ld_shlibs=yes
- ;;
- unixware*)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- vxworks*)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- ld_shlibs=no
- ;;
-esac
-
-
-## Compiler Characteristics: PIC flags, static flags, etc
-
-# We don't use cached values here since only the C compiler
-# characteristics should be cached.
-ac_cv_prog_cc_pic=
-ac_cv_prog_cc_shlib=
-ac_cv_prog_cc_wl=
-ac_cv_prog_cc_static=
-ac_cv_prog_cc_no_builtin=
-ac_cv_prog_cc_can_build_shared=$can_build_shared
-
-ac_cv_prog_cc_pic_works=
-ac_cv_prog_cc_static_works=
-
-if test "$with_gcc" = yes; then
- ac_cv_prog_cc_wl='-Wl,'
- ac_cv_prog_cc_static='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_cv_prog_cc_static='-Bstatic'
- else
- lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- ac_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
- ;;
- beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
- cygwin* | mingw* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- ac_cv_prog_cc_pic='-DDLL_EXPORT'
- ;;
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_cv_prog_cc_pic='-fno-common'
- ;;
- *djgpp*)
- # DJGPP does not support shared libraries at all
- ac_cv_prog_cc_pic=
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- ac_cv_prog_cc_pic=-Kconform_pic
- fi
- ;;
- *)
- ac_cv_prog_cc_pic='-fPIC'
- ;;
- esac
-else
- case $host_os in
- aix4* | aix5*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_cv_prog_cc_static='-Bstatic'
- else
- lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- chorus*)
- case $cc_basename in
- cxch68)
- # Green Hills C++ Compiler
- # ac_cv_prog_cc_static="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
- ;;
- esac
- ;;
- dgux*)
- case $cc_basename in
- ec++)
- ac_cv_prog_cc_pic='-KPIC'
- ;;
- ghcx)
- # Green Hills C++ Compiler
- ac_cv_prog_cc_pic='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- freebsd* | kfreebsd*-gnu)
- # FreeBSD uses GNU C++
- ;;
- gnu*)
- ;;
- hpux9* | hpux10* | hpux11*)
- case $cc_basename in
- CC)
- ac_cv_prog_cc_wl='-Wl,'
- ac_cv_prog_cc_static="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
- ac_cv_prog_cc_pic='+Z'
- ;;
- aCC)
- ac_cv_prog_cc_wl='-Wl,'
- ac_cv_prog_cc_static="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
- ac_cv_prog_cc_pic='+Z'
- ;;
- *)
- ;;
- esac
- ;;
- irix5* | irix6*)
- case $cc_basename in
- CC)
- ac_cv_prog_cc_wl='-Wl,'
- ac_cv_prog_cc_static='-non_shared'
- ac_cv_prog_cc_pic='-KPIC'
- ;;
- *)
- ;;
- esac
- ;;
- linux*)
- case $cc_basename in
- KCC)
- # KAI C++ Compiler
- ac_cv_prog_cc_wl='--backend -Wl,'
- ac_cv_prog_cc_pic='-fPIC'
- ;;
- cxx)
- # Compaq C++
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- ac_cv_prog_cc_pic=
- ac_cv_prog_cc_static='-non_shared'
- ;;
- *)
- ;;
- esac
- ;;
- lynxos*)
- ;;
- m88k*)
- ;;
- mvs*)
- case $cc_basename in
- cxx)
- ac_cv_prog_cc_pic='-W c,exportall'
- ;;
- *)
- ;;
- esac
- ;;
- netbsd*)
- ;;
- osf3* | osf4* | osf5*)
- case $cc_basename in
- KCC)
- ac_cv_prog_cc_wl='--backend -Wl,'
- ;;
- RCC)
- # Rational C++ 2.4.1
- ac_cv_prog_cc_pic='-pic'
- ;;
- cxx)
- # Digital/Compaq C++
- ac_cv_prog_cc_wl='-Wl,'
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- ac_cv_prog_cc_pic=
- ac_cv_prog_cc_static='-non_shared'
- ;;
- *)
- ;;
- esac
- ;;
- psos*)
- ;;
- sco*)
- case $cc_basename in
- CC)
- ac_cv_prog_cc_pic='-fPIC'
- ;;
- *)
- ;;
- esac
- ;;
- solaris*)
- case $cc_basename in
- CC)
- # Sun C++ 4.2, 5.x and Centerline C++
- ac_cv_prog_cc_pic='-KPIC'
- ac_cv_prog_cc_static='-Bstatic'
- ac_cv_prog_cc_wl='-Qoption ld '
- ;;
- gcx)
- # Green Hills C++ Compiler
- ac_cv_prog_cc_pic='-PIC'
- ;;
- *)
- ;;
- esac
- ;;
- sunos4*)
- case $cc_basename in
- CC)
- # Sun C++ 4.x
- ac_cv_prog_cc_pic='-pic'
- ac_cv_prog_cc_static='-Bstatic'
- ;;
- lcc)
- # Lucid
- ac_cv_prog_cc_pic='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- tandem*)
- case $cc_basename in
- NCC)
- # NonStop-UX NCC 3.20
- ac_cv_prog_cc_pic='-KPIC'
- ;;
- *)
- ;;
- esac
- ;;
- unixware*)
- ;;
- vxworks*)
- ;;
- *)
- ac_cv_prog_cc_can_build_shared=no
- ;;
- esac
-fi
-
-case "$host_os" in
- # Platforms which do not suport PIC and -DPIC is meaningless
- # on them:
- *djgpp*)
- ac_cv_prog_cc_pic=
- ;;
- *)
- ac_cv_prog_cc_pic="$ac_cv_prog_cc_pic -DPIC"
- ;;
-esac
-
-
-# Figure out "hidden" C++ library dependencies from verbose
-# compiler output whening linking a shared library.
-cat > conftest.$ac_ext <<EOF
-class Foo
-{
-public:
- Foo (void) { a = 0; }
-private:
- int a;
-};
-EOF
-
-
-if (eval $ac_compile) 2>&5; then
- # Parse the compiler output and extract the necessary
- # objects, libraries and library flags.
-
- # Sentinel used to keep track of whether or not we are before
- # the conftest object file.
- pre_test_object_deps_done=no
-
- for p in `eval $output_verbose_link_cmd`; do
-
- case $p in
-
- -L* | -R* | -l*)
- # Some compilers place space between "-{L,R}" and the path.
- # Remove the space.
- if test $p = "-L" \
- || test $p = "-R"; then
- prev=$p
- continue
- else
- prev=
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- case $p in
- -L* | -R*)
- # Internal compiler library paths should come after those
- # provided the user. The postdeps already come after the
- # user supplied libs so there is no need to process them.
- if test -z "$compiler_lib_search_path"; then
- compiler_lib_search_path="${prev}${p}"
- else
- compiler_lib_search_path="${compiler_lib_search_path} ${prev}${p}"
- fi
- ;;
- # The "-l" case would never come before the object being
- # linked, so don't bother handling this case.
- esac
- else
- if test -z "$postdeps"; then
- postdeps="${prev}${p}"
- else
- postdeps="${postdeps} ${prev}${p}"
- fi
- fi
- ;;
-
- *.$objext)
- # This assumes that the test object file only shows up
- # once in the compiler output.
- if test "$p" = "conftest.$objext"; then
- pre_test_object_deps_done=yes
- continue
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- if test -z "$predep_objects"; then
- predep_objects="$p"
- else
- predep_objects="$predep_objects $p"
- fi
- else
- if test -z "$postdep_objects"; then
- postdep_objects="$p"
- else
- postdep_objects="$postdep_objects $p"
- fi
- fi
- ;;
-
- *) ;; # Ignore the rest.
-
- esac
- done
-
- # Clean up.
- rm -f a.out
-else
- echo "ltcf-cxx.sh: error: problem compiling test program"
-fi
-
-$rm -f confest.$objext
-
-case " $postdeps " in
-*" -lc "*) need_lc=no ;;
-*) need_lc=yes ;;
-esac
diff --git a/ltcf-gcj.sh b/ltcf-gcj.sh
deleted file mode 100644
index 51faf04598b8..000000000000
--- a/ltcf-gcj.sh
+++ /dev/null
@@ -1,651 +0,0 @@
-#### This script is meant to be sourced by ltconfig.
-
-# ltcf-gcj.sh - Create a GCJ compiler specific configuration
-#
-# Copyright (C) 1996-1999, 2000, 2001, 2003 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# Original GCJ support by:
-# Alexandre Oliva <oliva@lsd.ic.unicamp.br>
-#
-# 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.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }'
-
-## Linker Characteristics
-case $host_os in
-cygwin* | mingw*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$with_gcc" != yes; then
- with_gnu_ld=no
- fi
- ;;
-
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix3* | aix4* | aix5*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- fi
- ;;
-
- amigaos*)
- archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
-
- # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can use
- # them.
- ld_shlibs=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- cygwin* | mingw*)
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- allow_undefined_flag=unsupported
- always_export_symbols=yes
-
- extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
- sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //; p; }" -e d < $0 > $output_objdir/impgen.c~
- test -f $output_objdir/impgen.exe || (cd $output_objdir && \
- if test "x$BUILD_CC" != "x" ; then $BUILD_CC -o impgen impgen.c ; \
- else $CC -o impgen impgen.c ; fi)~
- $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
-
- old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
-
- # cygwin and mingw dlls have different entry points and sets of symbols
- # to exclude.
- # FIXME: what about values for MSVC?
- dll_entry=__cygwin_dll_entry@12
- dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
- case $host_os in
- mingw*)
- # mingw values
- dll_entry=_DllMainCRTStartup@12
- dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
- ;;
- esac
-
- # mingw and cygwin differ, and it's simplest to just exclude the union
- # of the two symbol sets.
- dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
-
- # recent cygwin and mingw systems supply a stub DllMain which the user
- # can override, but on older systems we have to supply one (in ltdll.c)
- if test "x$lt_cv_need_dllmain" = "xyes"; then
- ltdll_obj='$output_objdir/$soname-ltdll.'"$objext "
- ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $output_objdir/$soname-ltdll.c~
- test -f $output_objdir/$soname-ltdll.$objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
- else
- ltdll_obj=
- ltdll_cmds=
- fi
-
- # Extract the symbol export list from an `--export-all' def file,
- # then regenerate the def file from the symbol export list, so that
- # the compiled dll only exports the symbol export list.
- # Be careful not to strip the DATA tag left be newer dlltools.
- export_symbols_cmds="$ltdll_cmds"'
- $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
- sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
-
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is.
- # If DATA tags from a recent dlltool are present, honour them!
- archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname-def;
- else
- echo EXPORTS > $output_objdir/$soname-def;
- _lt_hint=1;
- cat $export_symbols | while read symbol; do
- set dummy \$symbol;
- case \[$]# in
- 2) echo " \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
- *) echo " \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;;
- esac;
- _lt_hint=`expr 1 + \$_lt_hint`;
- done;
- fi~
- '"$ltdll_cmds"'
- $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
- $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
- $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
- $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
- $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
- ;;
-
- netbsd* | knetbsd*-gnu)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris* | sysv5*)
- if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- *)
- if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
-
- if test "$ld_shlibs" = yes; then
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec='${wl}--export-dynamic'
- case $host_os in
- cygwin* | mingw*)
- # dlltool doesn't understand --whole-archive et. al.
- whole_archive_flag_spec=
- ;;
- *)
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec=
- fi
- ;;
- esac
- fi
-else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L=yes
- if test "$with_gcc" = yes && test -z "$link_static_flag"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct=unsupported
- fi
- ;;
-
- aix4* | aix5*)
- hardcode_direct=yes
- hardcode_libdir_separator=':'
- link_all_deplibs=yes
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
- if test "$with_gcc" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- hardcode_direct=yes
- else
- # We have old collect2
- hardcode_direct=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L=yes
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_libdir_separator=
- fi
- esac
- shared_flag='-shared'
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
-
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- if test $with_gnu_ld = no; then
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- fi
- else
- # Test if we are trying to use run time linking, or normal AIX style linking.
- # If -brtl is somewhere in LDFLAGS, we need to do run time linking.
- aix_use_runtimelinking=no
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl" ); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
- # -bexpall does not export symbols beginning with underscore (_)
- always_export_symbols=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other run time loading flags (-brtl), -berok will
- # link without error, but may produce a broken library.
- allow_undefined_flag=' ${wl}-berok'
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
- else
- if test "$host_cpu" = ia64; then
- if test $with_gnu_ld = no; then
- hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
- allow_undefined_flag="-z nodefs"
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
- fi
- else
- allow_undefined_flag=' ${wl}-berok'
- # -bexpall does not export symbols beginning with underscore (_)
- always_export_symbols=yes
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec=' '
- build_libtool_need_lc=yes
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
- # This is similar to how AIX traditionally builds it's shared libraries.
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- # see comment about different semantics on the GNU ld section
- ld_shlibs=no
- ;;
-
- cygwin* | mingw*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_from_new_cmds='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
- fix_srcfile_path='`cygpath -w "$srcfile"`'
- ;;
-
- freebsd1*)
- ld_shlibs=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | kfreebsd*-gnu)
- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- hpux9* | hpux10* | hpux11*)
- case $host_os in
- hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
- *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
- esac
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
- hardcode_minus_L=yes # Not in the search PATH, but as the default
- # location of the library.
- export_dynamic_flag_spec='${wl}-E'
- ;;
-
- irix5* | irix6*)
- if test "$with_gcc" = yes; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
- else
- archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- link_all_deplibs=yes
- ;;
-
- netbsd* | knetbsd*-gnu)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- archive_cmds='$LD -shared -nodefaultlibs -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- hardcode_libdir_flag_spec='${wl}-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- openbsd*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$with_gcc" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$with_gcc" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
-
- sco3.2v5*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ;;
-
- solaris*)
- no_undefined_flag=' ${wl}-z ${wl}defs'
- archive_cmds='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmds="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | egrep \"\-L\""
-
- hardcode_libdir_flag_spec='${wl}-R $wl$libdir'
- hardcode_shlibpath_var=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *) # Supported since Solaris 2.6 (maybe 2.5.1?)
- whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;;
- esac
- link_all_deplibs=yes
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- sysv4)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- hardcode_direct=no #Motorola manual says yes, but my tests say they lie
- ;;
-
- sysv4.3*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- export_dynamic_flag_spec='-Bexport'
- ;;
-
- sysv5*)
- no_undefined_flag=' -z text'
- # $CC -shared without GNU ld will not create a library from C++
- # object files and a static libstdc++, better avoid it by now
- archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- hardcode_libdir_flag_spec=
- hardcode_shlibpath_var=no
- runpath_var='LD_RUN_PATH'
- ;;
-
- uts4*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- dgux*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs=yes
- fi
- ;;
-
- sysv4.2uw2*)
- archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=no
- hardcode_shlibpath_var=no
- hardcode_runpath_var=yes
- runpath_var=LD_RUN_PATH
- ;;
-
- sysv5uw7* | unixware7*)
- no_undefined_flag='${wl}-z ${wl}text'
- if test "$GCC" = yes; then
- archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- ;;
-
- *)
- ld_shlibs=no
- ;;
- esac
-fi
-
-## Compiler Characteristics: PIC flags, static flags, etc
-
-# We don't use cached values here since only the C compiler
-# characteristics should be cached.
- ac_cv_prog_cc_pic=
- ac_cv_prog_cc_shlib=
- ac_cv_prog_cc_wl=
- ac_cv_prog_cc_static=
- ac_cv_prog_cc_no_builtin=
- ac_cv_prog_cc_can_build_shared=$can_build_shared
-
- ac_cv_prog_cc_wl='-Wl,'
- ac_cv_prog_cc_static='-static'
-
- case $host_os in
- beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
- aix*)
- # Below there is a dirty hack to force normal static linking with -ldl
- # The problem is because libdl dynamically linked with both libc and
- # libC (AIX C++ library), which obviously doesn't included in libraries
- # list by gcc. This cause undefined symbols with -static flags.
- # This hack allows C programs to be linked with "-static -ldl", but
- # we not sure about C++ programs.
- ac_cv_prog_cc_static="$ac_cv_prog_cc_static ${ac_cv_prog_cc_wl}-lC"
- ;;
- *djgpp*)
- # DJGPP does not suppot shared libraries at all
- ac_cv_prog_cc_pic=
- ;;
- cygwin* | mingw* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- ac_cv_prog_cc_pic='-DDLL_EXPORT'
- ;;
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- ac_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- ac_cv_prog_cc_pic=-Kconform_pic
- fi
- ;;
- *)
- ac_cv_prog_cc_pic='-fPIC'
- ;;
- esac
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-need_lc=no
-
-# All existing releases of GCJ support `-c -o'.
-lt_cv_compiler_c_o=yes
diff --git a/ltconfig b/ltconfig
deleted file mode 100755
index 15f986c76d13..000000000000
--- a/ltconfig
+++ /dev/null
@@ -1,2856 +0,0 @@
-#! /bin/sh
-
-# ltconfig - Create a system-specific libtool.
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# 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.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# A lot of this script is taken from autoconf-2.10.
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-echo=echo
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell.
- exec "$SHELL" "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-$*
-EOF
- exit 0
-fi
-
-# Find the correct PATH separator. Usually this is `:', but
-# DJGPP uses `;' like DOS.
-if test "X${PATH_SEPARATOR+set}" != Xset; then
- UNAME=${UNAME-`uname 2>/dev/null`}
- case X$UNAME in
- *-DOS) PATH_SEPARATOR=';' ;;
- *) PATH_SEPARATOR=':' ;;
- esac
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-if test "X${echo_test_string+set}" != Xset; then
- # find a string as large as possible, as long as the shell can cope with it
- for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if (echo_test_string="`eval $cmd`") 2>/dev/null &&
- echo_test_string="`eval $cmd`" &&
- (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then
- break
- fi
- done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- :
-else
- # The Solaris, AIX, and Digital Unix default echo programs unquote
- # backslashes. This makes it impossible to quote backslashes using
- # echo "$something" | sed 's/\\/\\\\/g'
- #
- # So, first we look for a working echo in the user's PATH.
-
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
- for dir in $PATH /usr/ucb; do
- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$dir/echo"
- break
- fi
- done
- IFS="$save_ifs"
-
- if test "X$echo" = Xecho; then
- # We didn't find a better echo, so look for alternatives.
- if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # This shell has a builtin print -r that does the trick.
- echo='print -r'
- elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
- test "X$CONFIG_SHELL" != X/bin/ksh; then
- # If we have ksh, try running ltconfig again with it.
- ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}"
- export ORIGINAL_CONFIG_SHELL
- CONFIG_SHELL=/bin/ksh
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"}
- else
- # Try using printf.
- echo='printf %s\n'
- if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # Cool, printf works
- :
- elif echo_testing_string=`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL"
- export CONFIG_SHELL
- SHELL="$CONFIG_SHELL"
- export SHELL
- echo="$CONFIG_SHELL $0 --fallback-echo"
- elif echo_testing_string=`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$CONFIG_SHELL $0 --fallback-echo"
- else
- # maybe with a smaller string...
- prev=:
-
- for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
- if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then
- break
- fi
- prev="$cmd"
- done
-
- if test "$prev" != 'sed 50q "$0"'; then
- echo_test_string=`eval $prev`
-
- export echo_test_string
- exec "${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}}" "$0" ${1+"$@"}
- else
- # Oops. We lost completely, so just stick with echo.
- echo=echo
- fi
- fi
- fi
- fi
-fi
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e s/^X//'
-sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# The name of this program.
-progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'`
-
-# Constants:
-PROGRAM=ltconfig
-PACKAGE=libtool
-VERSION=1.4a-GCC3.0
-TIMESTAMP=" (1.641.2.256 2001/05/28 20:09:07 with GCC-local changes)"
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-rm="rm -f"
-
-help="Try \`$progname --help' for more information."
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-enable_shared=yes
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-enable_static=yes
-enable_fast_install=yes
-enable_dlopen=unknown
-enable_win32_dll=no
-pic_mode=default
-ltmain=
-silent=
-srcdir=
-ac_config_guess=
-ac_config_sub=
-host=
-build=NONE
-nonopt=NONE
-ofile="$default_ofile"
-verify_host=yes
-tagname=
-with_gcc=no
-with_gnu_ld=no
-need_locks=yes
-ac_ext=c
-libext=a
-cache_file=
-max_cmd_len=
-
-## Dependencies to place before and after the object being linked:
-predep_objects=
-postdep_objects=
-predeps=
-postdeps=
-compiler_lib_search_path=
-
-## Link characteristics:
-allow_undefined_flag=
-no_undefined_flag=
-need_lib_prefix=unknown
-need_version=unknown
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-archive_cmds=
-archive_expsym_cmds=
-old_archive_from_new_cmds=
-old_archive_from_expsyms_cmds=
-striplib=
-old_striplib=
-export_dynamic_flag_spec=
-whole_archive_flag_spec=
-thread_safe_flag_spec=
-hardcode_into_libs=no
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-hardcode_shlibpath_var=unsupported
-runpath_var=
-link_all_deplibs=unknown
-always_export_symbols=no
-export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
-# include_expsyms should be a list of space-separated symbols to be *always*
-# included in the symbol list
-include_expsyms=
-# exclude_expsyms can be an egrep regular expression of symbols to exclude
-# it will be wrapped by ` (' and `)$', so one must not match beginning or
-# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-# as well as any symbol that contains `d'.
-exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
-# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-# platforms (ab)use it in PIC code, but their linkers get confused if
-# the symbol is explicitly referenced. Since portable code cannot
-# rely on this symbol name, it's probably fine to never include it in
-# preloaded symbol tables.
-extract_expsyms_cmds=
-
-## Tools:
-old_AR="$AR"
-old_AR_FLAGS="$AR_FLAGS"
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-old_CPPFLAGS="$CPPFLAGS"
-old_LDFLAGS="$LDFLAGS"
-old_LIBS="$LIBS"
-old_MAGIC_CMD="$MAGIC_CMD"
-old_LD="$LD"
-old_LN_S="$LN_S"
-old_LTCC="$LTCC"
-old_NM="$NM"
-old_RANLIB="$RANLIB"
-old_STRIP="$STRIP"
-old_AS="$AS"
-old_DLLTOOL="$DLLTOOL"
-old_OBJDUMP="$OBJDUMP"
-old_OBJEXT="$OBJEXT"
-old_EXEEXT="$EXEEXT"
-old_reload_flag="$reload_flag"
-old_deplibs_check_method="$deplibs_check_method"
-old_file_magic_cmd="$file_magic_cmd"
-
-# Parse the command line options.
-args=
-prev=
-for option
-do
- case $option in
- -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- eval "$prev=\$option"
- prev=
- continue
- fi
-
- case $option in
- --help) cat <<EOM
-Usage: $progname [OPTION]... LTMAIN [HOST]
-
-Generate a system-specific libtool script.
-
- --build configure for building on BUILD [BUILD=HOST]
- --debug enable verbose shell tracing
- --disable-shared do not build shared libraries
- --disable-static do not build static libraries
- --disable-fast-install do not optimize for fast installation
- --enable-dlopen enable dlopen support
- --enable-win32-dll enable building dlls on win32 hosts
- --help display this help and exit
- --no-verify do not verify that HOST is a valid host type
--o, --output=FILE specify the output file [default=$default_ofile]
- --quiet same as \`--silent'
- --silent do not print informational messages
- --srcdir=DIR find \`config.guess' in DIR
- --version output version information and exit
- --add-tag=TAG append an alternate configuration
- --with-gcc assume that the GNU C compiler will be used
- --with-gnu-ld assume that the C compiler uses the GNU linker
- --prefer-pic try to use only PIC objects
- --prefer-non-pic try to use only non-PIC objects
- --disable-lock disable file locking
- --cache-file=FILE configure cache file
-
-LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program
-that provides basic libtool functionality.
-
-HOST is the canonical host system name [default=guessed].
-EOM
- exit 0
- ;;
-
- --build) prev=build ;;
- --build=*) build="$optarg" ;;
-
- --debug)
- echo "$progname: enabling shell trace mode"
- set -x
- ;;
-
- --disable-shared) enable_shared=no ;;
-
- --disable-static) enable_static=no ;;
-
- --disable-fast-install) enable_fast_install=no ;;
-
- --enable-dlopen) enable_dlopen=yes ;;
-
- --enable-win32-dll) enable_win32_dll=yes ;;
-
- --quiet | --silent) silent=yes ;;
-
- --srcdir) prev=srcdir ;;
- --srcdir=*) srcdir="$optarg" ;;
-
- --no-verify) verify_host=no ;;
-
- --output | -o) prev=ofile ;;
- --output=*) ofile="$optarg" ;;
-
- --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;;
-
- --add-tag) prev=tagname ;;
- --add-tag=*) tagname="$optarg" ;;
-
- --with-gcc) with_gcc=yes ;;
- --with-gnu-ld) with_gnu_ld=yes ;;
-
- --prefer-pic) pic_mode=yes ;;
- --prefer-non-pic) pic_mode=no ;;
-
- --disable-lock) need_locks=no ;;
-
- --cache-file=*) cache_file="$optarg" ;;
-
- -*)
- echo "$progname: unrecognized option \`$option'" 1>&2
- echo "$help" 1>&2
- exit 1
- ;;
-
- *)
- if test -z "$ltmain"; then
- ltmain="$option"
- elif test -z "$host"; then
-# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1
-# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then
-# echo "$progname: warning \`$option' is not a valid host type" 1>&2
-# fi
- host="$option"
- else
- echo "$progname: too many arguments" 1>&2
- echo "$help" 1>&2
- exit 1
- fi ;;
- esac
-done
-
-if test -z "$ltmain"; then
- echo "$progname: you must specify a LTMAIN file" 1>&2
- echo "$help" 1>&2
- exit 1
-fi
-
-if test ! -f "$ltmain"; then
- echo "$progname: \`$ltmain' does not exist" 1>&2
- echo "$help" 1>&2
- exit 1
-fi
-
-if test -n "$tagname"; then
- # Check whether tagname contains only valid characters
- case `$echo "X$tagname" | $Xsed -e 's/[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]//g'` in
- "") ;;
- *)
- echo "$progname: invalid tag name: $tagname" 1>&2
- exit 1
- ;;
- esac
-
- if grep "^### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$ofile" > /dev/null; then
- echo "$progname: tag name $tagname already exists" 1>&2
- exit 1
- fi
-
- if test ! -f "$ofile"; then
- echo "$progname: warning: output file \`$ofile' does not exist" 1>&2
- fi
-
- if test -z "$LTCC"; then
- eval "`$SHELL $ofile --config | grep '^LTCC='`"
- if test -z "$LTCC"; then
- echo "$progname: warning: output file \`$ofile' does not look like a libtool script" 1>&2
- else
- echo "$progname: warning: using \`LTCC=$LTCC', extracted from \`$ofile'" 1>&2
- fi
- fi
-fi
-
-# Quote any args containing shell metacharacters.
-ltconfig_args=
-for arg
-do
- case $arg in
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ltconfig_args="$ltconfig_args '$arg'" ;;
- *) ltconfig_args="$ltconfig_args $arg" ;;
- esac
-done
-
-# A relevant subset of AC_INIT.
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 5 compiler messages saved in config.log
-# 6 checking for... messages and results
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>>./config.log
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi
-if test "X${LANG+set}" = Xset; then LANG=C; export LANG; fi
-
-if test -n "$cache_file" && test -r "$cache_file" && test -f "$cache_file"; then
- echo "loading cache $cache_file within ltconfig"
- . $cache_file
-fi
-
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
-
-if test -z "$srcdir"; then
- # Assume the source directory is the same one as the path to LTMAIN.
- srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'`
- test "$srcdir" = "$ltmain" && srcdir=.
-fi
-
-trap "$rm conftest*; exit 1" 1 2 15
-if test "$verify_host" = yes; then
- # Check for config.guess and config.sub.
- ac_aux_dir=
- for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
- if test -f $ac_dir/config.guess; then
- ac_aux_dir=$ac_dir
- break
- fi
- done
- if test -z "$ac_aux_dir"; then
- echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2
- echo "$help" 1>&2
- exit 1
- fi
- ac_config_guess=$ac_aux_dir/config.guess
- ac_config_sub=$ac_aux_dir/config.sub
-
- # Make sure we can run config.sub.
- if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then :
- else
- echo "$progname: cannot run $ac_config_sub" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
-
- echo $ac_n "checking host system type""... $ac_c" 1>&6
-
- host_alias=$host
- case $host_alias in
- "")
- # Force config.guess to use the C compiler.
- # CC_FOR_BUILD overrides the CC variable in config.guess but I had
- # problems with it so do it this way for now.
- CC="$LTCC"
-
- if host_alias=`$SHELL $ac_config_guess`; then :
- else
- echo "$progname: cannot guess host type; you must specify one" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
-
- # Restore the C compiler.
- CC="$old_CC"
- ;;
- esac
- host=`$SHELL $ac_config_sub $host_alias`
- echo "$ac_t$host" 1>&6
-
- # Make sure the host verified.
- test -z "$host" && exit 1
-
- # Check for the build system type
- echo $ac_n "checking build system type... $ac_c" 1>&6
-
- build_alias=$build
- case $build_alias in
- NONE)
- case $nonopt in
- NONE) build_alias=$host_alias ;;
- *) build_alias=$nonopt ;;
- esac ;;
- esac
-
- build=`$SHELL $ac_config_sub $build_alias`
- build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
- build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
- build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
- echo "$ac_t""$build" 1>&6
-
-elif test -z "$host"; then
- echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
- echo "$help" 1>&2
- exit 1
-else
- host_alias=$host
- build_alias=$host_alias
- build=$host
-fi
-
-if test x"$host" != x"$build"; then
- ac_tool_prefix=${host_alias}-
-else
- ac_tool_prefix=
-fi
-
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
-case $host_os in
-linux-gnu*) ;;
-linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
-esac
-
-case $host_os in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
- old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
-fi
-
-# Source the script associated with the $tagname tag configuration.
-if test -n "$tagname"; then
- . $ltmain
-else
- # FIXME: We should use a variable here
- # Configure for a C compiler
- . $srcdir/ltcf-c.sh
-fi
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$NM" && NM=nm
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$objext" && objext=o
-
-echo $ac_n "checking for objdir... $ac_c" 1>&6
-rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-echo "$ac_t$objdir" 1>&6
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-set dummy $CC
-compiler="$2"
-
-# We assume here that the value for ac_cv_prog_cc_pic will not be cached
-# in isolation, and that seeing it set (from the cache) indicates that
-# the associated values are set (in the cache) correctly too.
-echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
-echo "$progname:678:checking for $compiler option to produce PIC" 1>&5
-
-if test -z "$ac_cv_prog_cc_pic"; then
- echo "$ac_t"none 1>&6
-else
- echo "$ac_t""$ac_cv_prog_cc_pic" 1>&6
-
- # Check to make sure the pic_flag actually works.
- echo $ac_n "checking if $compiler PIC flag $ac_cv_prog_cc_pic works... $ac_c" 1>&6
- echo "$progname:687:checking that $compiler PIC flag $ac_cv_prog_cc_pic works." 1>&5
- if test "X${ac_cv_prog_cc_pic_works+set}" = Xset && \
- test "X${ac_cv_prog_cc_pic_works}" != X; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- ac_cv_prog_cc_pic_works=yes
- $rm conftest*
- echo $lt_simple_compile_test_code > conftest.$ac_ext
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $ac_cv_prog_cc_pic -DPIC"
- if { (eval echo $progname:697: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
- # Append any warnings to the config.log.
- cat conftest.err 1>&5
-
- case $host_os in
- hpux9* | hpux10* | hpux11*)
- # On HP-UX, both CC and GCC only warn that PIC is supported... then
- # they create non-PIC objects. So, if there were any warnings, we
- # assume that PIC is not supported.
- if test -s conftest.err; then
- ac_cv_prog_cc_pic_works=no
- ac_cv_prog_cc_can_build_shared=no
- ac_cv_prog_cc_pic=
- else
- ac_cv_prog_cc_pic_works=yes
- ac_cv_prog_cc_pic=" $ac_cv_prog_cc_pic"
- fi
- ;;
- *)
- ac_cv_prog_cc_pic_works=yes
- ac_cv_prog_cc_pic=" $ac_cv_prog_cc_pic"
- ;;
- esac
- else
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- ac_cv_prog_cc_pic_works=no
- ac_cv_prog_cc_can_build_shared=no
- ac_cv_prog_cc_pic=
- fi
- CFLAGS="$save_CFLAGS"
- $rm conftest*
- fi
- # Belt *and* braces to stop my trousers falling down:
- if test "X$ac_cv_prog_cc_pic_works" = Xno; then
- ac_cv_prog_cc_pic=
- ac_cv_prog_cc_can_build_shared=no
- fi
- echo "$ac_t""$ac_cv_prog_cc_pic_works" 1>&6
-fi
-
-# Check for any special shared library compilation flags.
-if test -n "$ac_cv_prog_cc_shlib"; then
- echo "$progname: warning: \`$CC' requires \`$ac_cv_prog_cc_shlib' to build shared libraries" 1>&2
- if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$ac_cv_prog_cc_shlib[ ]" >/dev/null; then :
- else
- echo "$progname: add \`$ac_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" 1>&2
- ac_cv_prog_cc_can_build_shared=no
- fi
-fi
-
-echo $ac_n "checking if $compiler static flag $ac_cv_prog_cc_static works... $ac_c" 1>&6
-echo "$progname:749: checking if $compiler static flag $ac_cv_prog_cc_static works" >&5
-if test "X${ac_cv_prog_cc_static_works+set}" = Xset && \
- test "X${ac_cv_prog_cc_static_works}" != X; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- $rm conftest*
- echo $lt_simple_link_test_code > conftest.$ac_ext
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $ac_cv_prog_cc_static"
- if { (eval echo $progname:758: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- ac_cv_prog_cc_static_works=yes
- else
- ac_cv_prog_cc_static_works=no
- ac_cv_prog_cc_static=
- fi
- LDFLAGS="$save_LDFLAGS"
- $rm conftest*
-fi
-# Belt *and* braces to stop my trousers falling down:
-if test "X$ac_cv_prog_cc_static_works" = Xno; then
- ac_cv_prog_cc_static=
-fi
-echo "$ac_t""$ac_cv_prog_cc_static_works" 1>&6
-pic_flag="$ac_cv_prog_cc_pic"
-special_shlib_compile_flags="$ac_cv_prog_cc_shlib"
-wl="$ac_cv_prog_cc_wl"
-link_static_flag="$ac_cv_prog_cc_static"
-no_builtin_flag="$ac_cv_prog_cc_no_builtin"
-can_build_shared="$ac_cv_prog_cc_can_build_shared"
-
-# find the maximum length of command line arguments
-echo "$progname:780: finding the maximum length of command line arguments" 1>&5
-echo $ac_n "finding the maximum length of command line arguments... $ac_c" 1>&6
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- i=0
- testring="ABCD"
- # If test is not a shell built-in, we'll probably end up computing a
- # maximum length that is only half of the actual maximum length, but
- # we can't tell.
- while test "X"`$CONFIG_SHELL $0 --fallback-echo "X$testring" 2>/dev/null` \
- = "XX$testring" &&
- new_result=`expr "X$testring" : ".*" 2>&1` &&
- lt_cv_sys_max_cmd_len=$new_result &&
- test $i != 17 # 1/2 MB should be enough
- do
- i=`expr $i + 1`
- testring=$testring$testring
- done
- testring=
- # add a significant safety factor because C++ compilers can tack on massive amounts
- # of additional arguments before passing them to the linker. 1/4 should be good.
- len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len - $len`
-fi
-echo "$progname:@lineno@: result: $lt_cv_sys_max_cmd_len" 1>&5
-echo "${ac_t}$lt_cv_sys_max_cmd_len" 1>&6
-
-if test -n $lt_cv_sys_max_cmd_len ; then
- max_cmd_len=$lt_cv_sys_max_cmd_len
-else
- max_cmd_len=none
-fi
-
-# Check to see if options -o and -c are simultaneously supported by compiler
-echo $ac_n "checking if $compiler supports -c -o file.$objext... $ac_c" 1>&6
-if test "${lt_cv_compiler_c_o+set}" = set; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- $rm conftest*
- echo $lt_simple_compile_test_code > conftest.$ac_ext
- mkdir out
- # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
- # that will create temporary files in the current directory regardless of
- # the output directory. Thus, making CWD read-only will cause this test
- # to fail, enabling locking or at least warning the user not to do parallel
- # builds.
- chmod -w .
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -o out/conftest2.$objext"
- echo "$progname:833: checking if $compiler supports -c -o file.$objext" >&5
- if { (eval echo $progname:834: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$objext; then
-
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s out/conftest.err; then
- lt_cv_compiler_c_o=no
- else
- lt_cv_compiler_c_o=yes
- fi
- else
- # Append any errors to the config.log.
- cat out/conftest.err 1>&5
- lt_cv_compiler_c_o=no
- fi
- CFLAGS="$save_CFLAGS"
- chmod u+w .
- $rm conftest* out/*
- rmdir out
- cd ..
- rmdir conftest
- $rm -r conftest 2>/dev/null
-fi
-compiler_c_o=$lt_cv_compiler_c_o
-echo "${ac_t}$compiler_c_o" 1>&6
-
-# Check to see if we can do hard links to lock some files if needed
-hard_links="nottested"
-if test "$compiler_c_o" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- echo "$ac_t$hard_links" 1>&6
- $rm conftest*
- if test "$hard_links" = no; then
- echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-if test "$with_gcc" = yes; then
- # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
- echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6
- $rm conftest*
- echo $lt_simple_compile_test_code > conftest.$ac_ext
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
- echo "$progname:887: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
- if { (eval echo $progname:888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
-
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- echo "$ac_t"no 1>&6
- compiler_rtti_exceptions=no
- else
- echo "$ac_t"yes 1>&6
- compiler_rtti_exceptions=yes
- fi
- else
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- compiler_rtti_exceptions=no
- echo "$ac_t"no 1>&6
- fi
- CFLAGS="$save_CFLAGS"
- $rm conftest*
-
- if test "$compiler_rtti_exceptions" = "yes"; then
- no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
- else
- no_builtin_flag=' -fno-builtin'
- fi
-
-fi
-
-# See if the linker supports building shared libraries.
-echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6
-
-echo "$ac_t$ld_shlibs" 1>&6
-test "$ld_shlibs" = no && can_build_shared=no
-
-# Check hardcoding attributes.
-echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" || \
- test -n "$runpath_var"; then
-
- # We can hardcode non-existant directories.
- if test "$hardcode_direct" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$hardcode_shlibpath_var" != no &&
- test "$hardcode_minus_L" != no; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action=unsupported
-fi
-echo "$ac_t$hardcode_action" 1>&6
-
-echo $ac_n "checking whether stripping libraries is possible... $ac_c" 1>&6
-if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- echo "${ac_t}yes" 1>&6
-else
- echo "${ac_t}no" 1>&6
-fi
-
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-# PORTME Fill in your ld.so characteristics
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-
-echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}.so$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}.so$major'
- ;;
-
-aix4* | aix5*)
- version_type=linux
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- # We preserve .a as extension for shared libraries though AIX4.2
- # and later linker supports .so
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so instead of
- # lib<name>.a to let people know that these are not typical AIX shared libraries.
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- else
- # We preserve .a as extension for shared libraries though AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}.so$major'
- fi
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | egrep '(GNU)' > /dev/null; then
- export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
- fi
- shlibpath_var=LIBPATH
- deplibs_check_method=pass_all
- case $host_os in
- aix4 | aix4.[01] | aix4.[01].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- can_build_shared=no
- fi
- ;;
- esac
- fi
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}.so'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- lt_cv_dlopen="load_add_on"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
-bsdi4*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- export_dynamic_flag_spec=-rdynamic
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- need_version=no
- need_lib_prefix=no
- case $with_gcc,$host_os in
- yes,cygwin*)
- library_names_spec='$libname.dll.a'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll'
- postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i; echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog .libs/$dlname \$dldir/$dlname'
- postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll; $rm \$dlpath'
- ;;
- yes,mingw*)
- library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
- ;;
- yes,pw32*)
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
-;;
- *)
- library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- lt_cv_dlopen="LoadLibrary"
- lt_cv_dlopen_libs=
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${versuffix}.`test .$module = .yes && echo so || echo dylib` ${libname}${release}${major}.$`test .$module = .yes && echo so || echo dylib` ${libname}.`test .$module = .yes && echo so || echo dylib`'
- soname_spec='${libname}${release}${major}.`test .$module = .yes && echo so || echo dylib`'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- ;;
-
-freebsd*-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
- soname_spec='${libname}${release}.so${major}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='GNU/FreeBSD ld.so'
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-freebsd*)
- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
- need_version=no
- need_lc=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- *)
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-kfreebsd*-gnu | knetbsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case "$host_cpu" in
- ia64*)
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
- soname_spec='${libname}${release}.sl$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-irix5* | irix6*)
- if test "$with_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi
- version_type=irix
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}.so$major'
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
- case $host_os in
- irix5*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-netbsd*)
- need_lib_prefix=no
- need_version=no
- version_type=sunos
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
- soname_spec='${libname}${release}.so$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-openbsd*)
- version_type=sunos
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- need_version=no
- fi
- library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-os2*)
- libname_spec='$name'
- need_lib_prefix=no
- library_names_spec='$libname.dll $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_version=no
- soname_spec='${libname}${release}.so'
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-sco3.2v5*)
- version_type=osf
- soname_spec='${libname}${release}.so$major'
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- version_type=linux
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-tpf*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
- soname_spec='$libname.so.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-echo "$ac_t$dynamic_linker" 1>&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Transform the above into a raw symbol and a C symbol.
-symxfrm='\1 \2\3 \3'
-
-# Transform an extracted symbol line into a proper C declaration
-global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
-
-# Define system-specific variables.
-case $host_os in
-aix*)
- symcode='[BCDT]'
- ;;
-cygwin* | mingw* | pw32*)
- symcode='[ABCDGISTW]'
- ;;
-hpux*) # Its linker distinguishes data from code symbols
- global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- ;;
-irix*)
- symcode='[BCDEGRST]'
- ;;
-solaris* | sysv5*)
- symcode='[BDT]'
- ;;
-sysv4)
- symcode='[DFNSTU]'
- ;;
-esac
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $host_os in
-mingw*)
- opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
- ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
- symcode='[ABCDGISTW]'
-fi
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Write the raw and C identifiers.
- global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
- $rm conftest*
- cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
- echo "$progname:1431: checking if global_symbol_pipe works" >&5
- if { (eval echo $progname:1432: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if { echo "$progname:1435: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
-
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
-
- # Make sure that we snagged all the symbols we need.
- if egrep ' nm_test_var$' "$nlist" >/dev/null; then
- if egrep ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
- # Now generate the symbol file.
- eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
-
- cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{
-EOF
- sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" >> conftest.$ac_ext
- cat <<\EOF >> conftest.$ac_ext
- {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
- # Now try linking the two files.
- mv conftest.$objext conftstm.$objext
- save_LIBS="$LIBS"
- save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$objext"
- CFLAGS="$CFLAGS$no_builtin_flag"
- if { (eval echo $progname:1487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- pipe_works=yes
- else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- fi
- LIBS="$save_LIBS"
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&5
- fi
- else
- echo "cannot run $global_symbol_pipe" >&5
- fi
- else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- fi
- $rm conftest* conftst*
-
- # Do not use the global_symbol_pipe unless it works.
- if test "$pipe_works" = yes; then
- break
- else
- global_symbol_pipe=
- fi
-done
-if test "$pipe_works" = yes; then
- echo "${ac_t}ok" 1>&6
-else
- echo "${ac_t}failed" 1>&6
-fi
-
-if test -z "$global_symbol_pipe"; then
- global_symbol_to_cdecl=
-fi
-
-# Report the final consequences.
-echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6
-
-# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in
-# configure.in, otherwise build static only libraries.
-case $host_os in
-cygwin* | mingw* | pw32* | os2*)
- if test x$can_build_shared = xyes; then
- test x$enable_win32_dll = xno && can_build_shared=no
- echo "checking if package supports dlls... $can_build_shared" 1>&6
- fi
-;;
-esac
-
-echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case $host_os in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
-aix4*)
- test "$enable_shared" = yes && enable_static=no
- ;;
-esac
-
-echo "$ac_t$enable_shared" 1>&6
-
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-
-echo "checking whether to build static libraries... $enable_static" 1>&6
-
-if test "$hardcode_action" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$with_gcc" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-# Check whether we must set pic_mode to default
-test -z "$pic_flag" && pic_mode=default
-
-if test "x$enable_dlopen" != xyes; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
-if test "X${lt_cv_dlopen+set}" != Xset; then
- lt_cv_dlopen=no lt_cv_dlopen_libs=
-echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "$progname:1591: checking for dlopen in -ldl" >&5
-if test "X${ac_cv_lib_dl_dlopen+set}" = Xset; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-ldl $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1598 "ltconfig"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen();
-
-int main() {
-dlopen()
-; return 0; }
-EOF
-if { (eval echo $progname:1611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- ac_cv_lib_dl_dlopen=yes
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if test "X$ac_cv_lib_dl_dlopen" = Xyes; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "$progname:1630: checking for dlopen" >&5
-if test "X${ac_cv_func_dlopen+set}" = Xset; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1635 "ltconfig"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char dlopen(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen();
-
-int main() {
-
-/* 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_dlopen) || defined (__stub___dlopen)
-choke me
-#else
-dlopen();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo $progname:1660: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- ac_cv_func_dlopen=yes
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_func_dlopen=no
-fi
-rm -f conftest*
-fi
-if test "X$ac_cv_func_dlopen" = Xyes; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="dlopen"
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for dlopen in -lsvld""... $ac_c" 1>&6
-echo "$progname:1677: checking for dlopen in -lsvld" >&5
-if test "X${ac_cv_lib_svld_dlopen+set}" = Xset; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lsvld $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1684 "ltconfig"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen();
-
-int main() {
-dlopen()
-; return 0; }
-EOF
-if { (eval echo $progname:1697: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- ac_cv_lib_svld_dlopen=yes
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_lib_svld_dlopen=no
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if test "X$ac_cv_lib_svld_dlopen" = Xyes; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
-echo "$progname:1716: checking for dld_link in -ldld" >&5
-if test "X${ac_cv_lib_dld_dld_link+set}" = Xset; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-ldld $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1723 "ltconfig"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dld_link();
-
-int main() {
-dld_link()
-; return 0; }
-EOF
-if { (eval echo $progname:1736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- ac_cv_lib_dld_dld_link=yes
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_lib_dld_dld_link=no
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if test "X$ac_cv_lib_dld_dld_link" = Xyes; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-echo "$progname:1755: checking for shl_load" >&5
-if test "X${ac_cv_func_shl_load+set}" = Xset; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1760 "ltconfig"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char shl_load(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load();
-
-int main() {
-
-/* 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_shl_load) || defined (__stub___shl_load)
-choke me
-#else
-shl_load();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo $progname:1785: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- ac_cv_func_shl_load=yes
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_func_shl_load=no
-fi
-rm -f conftest*
-fi
-
-if test "X$ac_cv_func_shl_load" = Xyes; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="shl_load"
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "$progname:1803: checking for shl_load in -ldld" >&5
-if test "X${ac_cv_lib_dld_shl_load+set}" = Xset; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-ldld $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1810 "ltconfig"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load();
-
-int main() {
-shl_load()
-; return 0; }
-EOF
-if { (eval echo $progname:1824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- ac_cv_lib_dld_shl_load=yes
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_lib_dld_shl_load=no
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if test "X$ac_cv_lib_dld_shl_load" = Xyes; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
-else
- echo "$ac_t""no" 1>&6
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-fi
-
-fi
-
- if test "x$lt_cv_dlopen" != xno; then
- enable_dlopen=yes
- else
- enable_dlopen=no
- fi
-
- case $lt_cv_dlopen in
- dlopen)
-for ac_hdr in dlfcn.h; do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "$progname:1871: checking for $ac_hdr" >&5
-if eval "test \"`echo 'X$''{'ac_cv_header_$ac_safe'+set}'`\" = Xset"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1876 "ltconfig"
-#include <$ac_hdr>
-int fnord = 0;
-int main () { return(0); }
-EOF
-ac_try="$ac_compile >/dev/null 2>conftest.out"
-{ (eval echo $progname:1882: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
- if test "x$ac_cv_header_dlfcn_h" = xyes; then
- CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
- fi
- eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:1910: checking whether a program can dlopen itself" >&5
-if test "X${lt_cv_dlopen_self+set}" = Xset; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test "$cross_compiling" = yes; then
- lt_cv_dlopen_self=cross
- else
- cat > conftest.$ac_ext <<EOF
-#line 1918 "ltconfig"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LTDL_GLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LTDL_GLOBAL DL_GLOBAL
-# else
-# define LTDL_GLOBAL 0
-# endif
-#endif
-
-/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LTDL_LAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LTDL_LAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LTDL_LAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LTDL_LAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LTDL_LAZY_OR_NOW DL_NOW
-# else
-# define LTDL_LAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-void fnord() { int i=42; }
-int main() {
- void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
- if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
- if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); }
-
-EOF
-if { (eval echo $progname:1965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
- lt_cv_dlopen_self=yes
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- lt_cv_dlopen_self=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$lt_cv_dlopen_self" 1>&6
-
- if test "$lt_cv_dlopen_self" = yes; then
- LDFLAGS="$LDFLAGS $link_static_flag"
- echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:1984: checking whether a statically linked program can dlopen itself" >&5
-if test "X${lt_cv_dlopen_self_static+set}" = Xset; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test "$cross_compiling" = yes; then
- lt_cv_dlopen_self_static=cross
- else
- cat > conftest.$ac_ext <<EOF
-#line 1992 "ltconfig"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LTDL_GLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LTDL_GLOBAL DL_GLOBAL
-# else
-# define LTDL_GLOBAL 0
-# endif
-#endif
-
-/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LTDL_LAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LTDL_LAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LTDL_LAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LTDL_LAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LTDL_LAZY_OR_NOW DL_NOW
-# else
-# define LTDL_LAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-void fnord() { int i=42; }
-int main() {
- void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
- if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
- if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); }
-
-EOF
-if { (eval echo $progname:2039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
- lt_cv_dlopen_self_static=yes
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- lt_cv_dlopen_self_static=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6
-fi
- ;;
- esac
-
- case $lt_cv_dlopen_self in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case $lt_cv_dlopen_self_static in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-
-# Copy echo and quote the copy, instead of the original, because it is
-# used later.
-ltecho="$echo"
-if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then
- ltecho="$CONFIG_SHELL \$0 --fallback-echo"
-fi
-LTSHELL="$SHELL"
-
-LTCONFIG_VERSION="$VERSION"
-
-# Only quote variables if we're using ltmain.sh.
-case $ltmain in
-*.sh)
- # Now quote all the things that may contain metacharacters.
- for var in ltecho old_AR old_AR_FLAGS old_CC old_LTCC old_CFLAGS old_CPPFLAGS \
- old_MAGIC_CMD old_LD old_LDFLAGS old_LIBS \
- old_LN_S old_NM old_RANLIB old_STRIP \
- old_AS old_DLLTOOL old_OBJDUMP \
- old_OBJEXT old_EXEEXT old_reload_flag \
- old_deplibs_check_method old_file_magic_cmd \
- AR AR_FLAGS CC LTCC LD LN_S NM LTSHELL LTCONFIG_VERSION \
- reload_flag reload_cmds wl \
- pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
- thread_safe_flag_spec whole_archive_flag_spec libname_spec \
- library_names_spec soname_spec \
- RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
- old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
- postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
- predep_objects postdep_objects predeps postdeps compiler_lib_search_path \
- old_striplib striplib file_magic_cmd export_symbols_cmds \
- deplibs_check_method allow_undefined_flag no_undefined_flag \
- finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
- hardcode_libdir_flag_spec hardcode_libdir_separator \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- compiler_c_o need_locks exclude_expsyms include_expsyms; do
-
- case $var in
- reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
- extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ### testsuite: skip nested quoting test
- ;;
- *)
- eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ### testsuite: skip nested quoting test
- ;;
- esac
- done
-
- case $ltecho in
- *'\$0 --fallback-echo"')
- ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
- ;;
- esac
-
- if test -z "$tagname"; then
- trap "$rm \"$ofile\"; exit 1" 1 2 15
- echo "creating $ofile"
- $rm "$ofile"
- cat <<EOF > "$ofile"
-#! $SHELL
-
-# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh.
-#
-# Copyright (C) 1996-2000 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# 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.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="sed -e s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-# The names of the tagged configurations supported by this script.
-available_tags=
-
-### BEGIN LIBTOOL CONFIG
-EOF
- else
- echo "appending configuration tag \"$tagname\" to $ofile"
- echo "### BEGIN LIBTOOL TAG CONFIG: $tagname" >> "$ofile"
- fi
- cfgfile="$ofile"
- ;;
-
-*)
- # Double-quote the variables that need it (for aesthetics).
- for var in old_AR old_AR_FLAGS old_CC old_LTCC old_CFLAGS old_CPPFLAGS \
- old_MAGIC_CMD old_LD old_LDFLAGS old_LIBS \
- old_LN_S old_NM old_RANLIB old_STRIP \
- old_AS old_DLLTOOL old_OBJDUMP \
- old_OBJEXT old_EXEEXT old_reload_flag \
- old_deplibs_check_method old_file_magic_cmd; do
- eval "$var=\\\"\$var\\\""
- done
-
- # Just create a config file.
- cfgfile="$ofile.cfg"
- if test -z "$tagname"; then
- trap "$rm \"$cfgfile\"; exit 1" 1 2 15
- echo "creating $cfgfile"
- $rm "$cfgfile"
- cat <<EOF > "$cfgfile"
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-
-### BEGIN LIBTOOL CONFIG
-EOF
- else
- echo "appending to $cfgfile"
- echo "### BEGIN LIBTOOL TAG CONFIG: $tagname" >> "$ofile"
- fi
- ;;
-esac
-
-cat <<EOF >> "$cfgfile"
-# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# AR=$old_AR AR_FLAGS=$old_AR_FLAGS LTCC=$old_LTCC CC=$old_CC \\
-# CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\
-# MAGIC_CMD=$old_MAGIC_CMD LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\
-# LN_S=$old_LN_S NM=$old_NM RANLIB=$old_RANLIB STRIP=$old_STRIP \\
-# AS=$old_AS DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP \\
-# objext=$old_OBJEXT exeext=$old_EXEEXT reload_flag=$old_reload_flag \\
-# deplibs_check_method=$old_deplibs_check_method \\
-# file_magic_cmd=$old_file_magic_cmd \\
-# $0$ltconfig_args
-#
-# Compiler and other test output produced by $progname, useful for
-# debugging $progname, is in ./config.log if it exists.
-
-# The version of $progname that generated this script.
-LTCONFIG_VERSION=$LTCONFIG_VERSION
-
-# Shell to use when invoking shell scripts.
-SHELL=$LTSHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$need_lc
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-
-# An echo program that does not interpret backslashes.
-echo=$ltecho
-
-# The archiver.
-AR=$AR
-AR_FLAGS=$AR_FLAGS
-
-# A C compiler.
-LTCC=$LTCC
-
-# A language-specific compiler.
-CC=$CC
-
-# Is the compiler the GNU C compiler?
-with_gcc=$with_gcc
-
-# The linker used to build libraries.
-LD=$LD
-
-# Whether we need hard or soft links.
-LN_S=$LN_S
-
-# A BSD-compatible nm program.
-NM=$NM
-
-# A symbol stripping program
-STRIP=$STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$reload_flag
-reload_cmds=$reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$wl
-
-# Object file suffix (normally "o").
-objext="$objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$pic_flag
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$compiler_c_o
-
-# Must we lock files when doing compilation ?
-need_locks=$need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$link_static_flag
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$no_builtin_flag
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$whole_archive_flag_spec
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$thread_safe_flag_spec
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$RANLIB
-old_archive_cmds=$old_archive_cmds
-old_postinstall_cmds=$old_postinstall_cmds
-old_postuninstall_cmds=$old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$old_archive_from_new_cmds
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$old_archive_from_expsyms_cmds
-
-# Commands used to build and install a shared archive.
-archive_cmds=$archive_cmds
-archive_expsym_cmds=$archive_expsym_cmds
-postinstall_cmds=$postinstall_cmds
-postuninstall_cmds=$postuninstall_cmds
-
-# Commands to strip libraries.
-old_striplib=$old_striplib
-striplib=$striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$predep_objects
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$postdep_objects
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$predeps
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$postdeps
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$compiler_lib_search_path
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$allow_undefined_flag
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$no_undefined_flag
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$global_symbol_to_cdecl
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$hardcode_libdir_separator
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$export_symbols_cmds
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$include_expsyms
-
-EOF
-
-if test -z "$tagname"; then
- echo '### END LIBTOOL CONFIG' >> "$ofile"
-else
- echo "### END LIBTOOL TAG CONFIG: $tagname" >> "$ofile"
-fi
-
-case $ltmain in
-*.sh)
- echo >> "$ofile"
- if test -z "$tagname"; then
- case $host_os in
- aix3*)
- cat <<\EOF >> "$ofile"
-
-# AIX sometimes has problems with the GCC collect2 program. For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
-fi
-EOF
- ;;
- esac
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- cat <<'EOF' >> "$ofile"
- # This is a source program that is used to create dlls on Windows
- # Don't remove nor modify the starting and closing comments
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# # ifdef __CYGWIN32__
-# # define __CYGWIN__ __CYGWIN32__
-# # endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-# __hDllInstance_base = hInst;
-# return TRUE;
-# }
-# /* ltdll.c ends here */
- # This is a source program that is used to create import libraries
- # on Windows for dlls which lack them. Don't remove nor modify the
- # starting and closing comments
-# /* impgen.c starts here */
-# /* Copyright (C) 1999-2000 Free Software Foundation, Inc.
-#
-# This file is part of GNU libtool.
-#
-# 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> /* for printf() */
-# #include <unistd.h> /* for open(), lseek(), read() */
-# #include <fcntl.h> /* for O_RDONLY, O_BINARY */
-# #include <string.h> /* for strdup() */
-#
-# /* O_BINARY isn't required (or even defined sometimes) under Unix */
-# #ifndef O_BINARY
-# #define O_BINARY 0
-# #endif
-#
-# static unsigned int
-# pe_get16 (fd, offset)
-# int fd;
-# int offset;
-# {
-# unsigned char b[2];
-# lseek (fd, offset, SEEK_SET);
-# read (fd, b, 2);
-# return b[0] + (b[1]<<8);
-# }
-#
-# static unsigned int
-# pe_get32 (fd, offset)
-# int fd;
-# int offset;
-# {
-# unsigned char b[4];
-# lseek (fd, offset, SEEK_SET);
-# read (fd, b, 4);
-# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-# }
-#
-# static unsigned int
-# pe_as32 (ptr)
-# void *ptr;
-# {
-# unsigned char *b = ptr;
-# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-# }
-#
-# int
-# main (argc, argv)
-# int argc;
-# char *argv[];
-# {
-# int dll;
-# unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
-# unsigned long export_rva, export_size, nsections, secptr, expptr;
-# unsigned long name_rvas, nexp;
-# unsigned char *expdata, *erva;
-# char *filename, *dll_name;
-#
-# filename = argv[1];
-#
-# dll = open(filename, O_RDONLY|O_BINARY);
-# if (dll < 1)
-# return 1;
-#
-# dll_name = filename;
-#
-# for (i=0; filename[i]; i++)
-# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':')
-# dll_name = filename + i +1;
-#
-# 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 1;
-#
-# 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;
-# 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);
-# lseek(dll, secptr1, SEEK_SET);
-# read(dll, sname, 8);
-# 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;
-# }
-# }
-#
-# expdata = (unsigned char*)malloc(export_size);
-# lseek (dll, expptr, SEEK_SET);
-# read (dll, expdata, export_size);
-# erva = expdata - export_rva;
-#
-# nexp = pe_as32 (expdata+24);
-# name_rvas = pe_as32 (expdata+32);
-#
-# printf ("EXPORTS\n");
-# for (i = 0; i<nexp; i++)
-# {
-# unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
-# printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
-# }
-#
-# return 0;
-# }
-# /* impgen.c ends here */
-
-EOF
- ;;
- esac
-
-
- # Append the ltmain.sh script.
- sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
- # We use sed instead of cat because bash on DJGPP gets confused if
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
-
- chmod +x "$ofile"
- fi
- ;;
-
-*)
- # Compile the libtool program.
- echo "FIXME: would compile $ltmain"
- ;;
-esac
-
-# Update the list of available tags.
-if test -n "$tagname"; then
-
- # Extract list of available tagged configurations in $ofile.
- # Note that this assumes the entire list is on one line.
- available_tags=`grep "^available_tags=" $ofile | sed -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-
- # Append the new tag name to the list of available tags.
- available_tags="$available_tags $tagname"
-
- # Now substitute the updated of available tags.
- if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' ${ofile} > ${ofile}.new"; then
- mv ${ofile}.new ${ofile}
- chmod +x "$ofile"
- else
- rm -f ${ofile}.new
- echo "$progname: unable to update list of available tagged configurations."
- exit 1
- fi
-fi
-
-# Don't cache tagged configuration!
-test -n "$cache_file" && test -z "$tagname" || exit 0
-
-# AC_CACHE_SAVE
-trap '' 1 2 15
-cat > confcache <<\EOF
-# 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. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# 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 \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
- if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
-
-exit 0
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/ltgcc.m4 b/ltgcc.m4
new file mode 100644
index 000000000000..fb7b6eeb98dd
--- /dev/null
+++ b/ltgcc.m4
@@ -0,0 +1,60 @@
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'. Locally modified to
+# run its tests on C programs, because we cannot link Java programs until
+# we have finished building libjava.
+AC_DEFUN([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=c
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+_LT_TAGVAR(compiler, $1)=${GCJ-gcj}
+AC_LANG_RESTORE
+])# _LT_LANG_GCJ_CONFIG
diff --git a/ltmain.sh b/ltmain.sh
index d5173bc46324..8ee3afc0ed06 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,10 +1,12 @@
-# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun ltconfig.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
+# Generated from ltmain.m4sh; do not edit by hand
+
+# ltmain.sh (GNU libtool 1.2435 2007/03/18 18:44:42) 2.1a
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
# 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
@@ -24,19 +26,483 @@
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
-# Check that we have a working $echo.
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+# --config show all configuration variables
+# --debug enable verbose shell tracing
+# -n, --dry-run display commands without modifying any files
+# --features display basic configuration information and exit
+# --mode=MODE use operation mode MODE
+# --preserve-dup-deps don't remove duplicate dependency libraries
+# --quiet, --silent don't print informational messages
+# --tag=TAG use configuration variables from tag TAG
+# -v, --verbose print informational messages (default)
+# --version print version information
+# -h, --help print short or long help message
+#
+# MODE must be one of the following:
+#
+# clean remove files from the build directory
+# compile compile a source file into a libtool object
+# execute automatically set library path, then run a program
+# finish complete the installation of libtool libraries
+# install install libraries or executables
+# link create a library or an executable
+# uninstall remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+# host-triplet: $host
+# shell: $SHELL
+# compiler: $LTCC
+# compiler flags: $LTCFLAGS
+# linker: $LD (gnu? $with_gnu_ld)
+# $progname: (GNU libtool 1.2435 2007/03/18 18:44:42) 2.1a
+# automake: $automake_version
+# autoconf: $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=2.1a
+TIMESTAMP=" 1.2435 2007/03/18 18:44:42"
+package_revision=1.2435
+
+# 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+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# NLS nuisances: We save the old values to restore during execute mode.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+ eval "if test \"\${$lt_var+set}\" = set; then
+ save_$lt_var=\$$lt_var
+ $lt_var=C
+ export $lt_var
+ fi"
+done
+
+$lt_unset CDPATH
+
+
+
+
+
+: ${CP="cp -f"}
+: ${ECHO="echo"}
+: ${EGREP="/bin/grep -E"}
+: ${FGREP="/bin/grep -F"}
+: ${GREP="/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/bin/sed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS=" $lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+# In the unlikely event $progname began with a '-', it would play havoc with
+# func_echo (imagine progname=-n), so we prepend ./ in that case:
+progname=`$ECHO "X$progpath" | $Xsed -e "$basename" -e 's,^-,./-,'`
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+ [\\/]*|[A-Za-z]:\\*) ;;
+ *[\\/]*)
+ progdir=`$ECHO "X$progpath" | $Xsed -e "$dirname"`
+ progdir=`cd "$progdir" && pwd`
+ progpath="$progdir/$progname"
+ ;;
+ *)
+ save_IFS="$IFS"
+ IFS=:
+ for progdir in $PATH; do
+ IFS="$save_IFS"
+ test -x "$progdir/$progname" && break
+ done
+ IFS="$save_IFS"
+ test -n "$progdir" || progdir=`pwd`
+ progpath="$progdir/$progname"
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same. If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'. `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+ s/$bs4/&\\
+/g
+ s/^$bs2$dollar/$bs&/
+ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+ s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+ $ECHO "$progname${mode+: }$mode: "${1+"$@"}
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+ $opt_verbose && func_echo ${1+"$@"}
+
+ # A bug in bash halts the script if the last line of a function
+ # fails when set -e is in force, so we need another command to
+ # work around that:
+ :
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+ $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+ $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+ func_error ${1+"$@"}
+ exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+ func_error ${1+"$@"}
+ func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information." ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+ $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+ my_directory_path="$1"
+ my_dir_list=
+
+ if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+ # Protect directory names starting with `-'
+ case $my_directory_path in
+ -*) my_directory_path="./$my_directory_path" ;;
+ esac
+
+ # While some portion of DIR does not yet exist...
+ while test ! -d "$my_directory_path"; do
+ # ...make a list in topmost first order. Use a colon delimited
+ # list incase some portion of path contains whitespace.
+ my_dir_list="$my_directory_path:$my_dir_list"
+
+ # If the last portion added has no slash in it, the list is done
+ case $my_directory_path in */*) ;; *) break ;; esac
+
+ # ...otherwise throw away the child directory and loop
+ my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+ done
+ my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+
+ save_mkdir_p_IFS="$IFS"; IFS=':'
+ for my_dir in $my_dir_list; do
+ IFS="$save_mkdir_p_IFS"
+ # mkdir can fail with a `File exist' error if two processes
+ # try to create one of the directories concurrently. Don't
+ # stop in that case!
+ $MKDIR "$my_dir" 2>/dev/null || :
+ done
+ IFS="$save_mkdir_p_IFS"
+
+ # Bail out if we (or some other process) failed to create a directory.
+ test -d "$my_directory_path" || \
+ func_fatal_error "Failed to create \`$1'"
+ fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible. If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+ my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+ if test "$opt_dry_run" = ":"; then
+ # Return a directory name, but don't create it in dry-run mode
+ my_tmpdir="${my_template}-$$"
+ else
+
+ # If mktemp works, use that first and foremost
+ my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+ if test ! -d "$my_tmpdir"; then
+ # Failing that, at least try and use $RANDOM to avoid a race
+ my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+ save_mktempdir_umask=`umask`
+ umask 0077
+ $MKDIR "$my_tmpdir"
+ umask $save_mktempdir_umask
+ fi
+
+ # If we're not in dry-run mode, bomb out on failure
+ test -d "$my_tmpdir" || \
+ func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+ fi
+
+ $ECHO "X$my_tmpdir" | $Xsed
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+ case $1 in
+ *[\\\`\"\$]*)
+ func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+ *)
+ func_quote_for_eval_unquoted_result="$1" ;;
+ esac
+
+ case $func_quote_for_eval_unquoted_result in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and and variable
+ # expansion for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+ ;;
+ *)
+ func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+ esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+ case $1 in
+ *[\\\`\"]*)
+ my_arg=`$ECHO "X$1" | $Xsed \
+ -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+ *)
+ my_arg="$1" ;;
+ esac
+
+ case $my_arg in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting and command substitution for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ my_arg="\"$my_arg\""
+ ;;
+ esac
+
+ func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+ my_cmd="$1"
+ my_fail_exp="${2-:}"
+
+ ${opt_silent-false} || {
+ func_quote_for_expand "$my_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ if ${opt_dry_run-false}; then :; else
+ eval "$my_cmd"
+ my_status=$?
+ if test "$my_status" -eq 0; then :; else
+ eval "(exit $my_status); $my_fail_exp"
+ fi
+ fi
+}
+
+
+
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+ $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+ s/^# //
+ s/^# *$//
+ s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+ p
+ }' < "$progpath"
+ exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+ $SED -n '/^# Usage:/,/# -h/ {
+ s/^# //
+ s/^# *$//
+ s/\$progname/'$progname'/
+ p
+ }' < "$progpath"
+ $ECHO
+ $ECHO "run \`$progname --help | more' for full usage"
+ exit $?
+}
+
+# func_help
+# Echo long help message to standard output and exit.
+func_help ()
+{
+ $SED -n '/^# Usage:/,/# Report bugs to/ {
+ s/^# //
+ s/^# *$//
+ s*\$progname*'$progname'*
+ s*\$host*'"$host"'*
+ s*\$SHELL*'"$SHELL"'*
+ s*\$LTCC*'"$LTCC"'*
+ s*\$LTCFLAGS*'"$LTCFLAGS"'*
+ s*\$LD*'"$LD"'*
+ s/\$with_gnu_ld/'"$with_gnu_ld"'/
+ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+ p
+ }' < "$progpath"
+ exit $?
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+ func_error "missing argument for $1"
+ exit_cmd=exit
+}
+
+exit_cmd=:
+
+
+
+
+
+# Check that we have a working $ECHO.
if test "X$1" = X--no-reexec; then
# Discard the --no-reexec flag, and continue.
shift
elif test "X$1" = X--fallback-echo; then
# Avoid inline document here, it may be left over
:
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
- # Yippee, $echo works!
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+ # Yippee, $ECHO works!
:
else
- # Restart under the correct shell, and then maybe $echo will work.
- exec $SHELL "$0" --no-reexec ${1+"$@"}
+ # Restart under the correct shell, and then maybe $ECHO will work.
+ exec $SHELL "$progpath" --no-reexec ${1+"$@"}
fi
if test "X$1" = X--fallback-echo; then
@@ -45,426 +511,1190 @@ if test "X$1" = X--fallback-echo; then
cat <<EOF
$*
EOF
- exit 0
+ exit $EXIT_SUCCESS
fi
-# The name of this program.
-progname=`$echo "$0" | sed 's%^.*/%%'`
-modename="$progname"
-
-# Constants.
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION=1.4a-GCC3.0
-TIMESTAMP=" (1.641.2.256 2001/05/28 20:09:07 with GCC-local changes)"
-
-default_mode=
-help="Try \`$progname --help' for more information."
magic="%%%MAGIC variable%%%"
-mkdir="mkdir"
-mv="mv -f"
-rm="rm -f"
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-SP2NL='tr \040 \012'
-NL2SP='tr \015\012 \040\040'
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-# We save the old values to restore during execute mode.
-if test "${LC_ALL+set}" = set; then
- save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
-fi
-if test "${LANG+set}" = set; then
- save_LANG="$LANG"; LANG=C; export LANG
-fi
-if test "$LTCONFIG_VERSION" != "$VERSION"; then
- echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
-fi
-
-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
- echo "$modename: not configured to build any kind of library" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
-fi
# Global variables.
-mode=$default_mode
+# $mode is unset
nonopt=
-prev=
-prevopt=
-run=
-show="$echo"
-show_help=
execute_dlfiles=
+preserve_args=
lo2o="s/\\.lo\$/.${objext}/"
o2lo="s/\\.${objext}\$/.lo/"
-taglist=
-
-# Parse our command line options once, thoroughly.
-while test $# -gt 0
-do
- arg="$1"
- shift
+extracted_archives=
+extracted_serial=0
- case $arg in
- -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
+opt_dry_run=false
+opt_duplicate_deps=false
+opt_silent=false
+opt_debug=:
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case $prev in
- execute_dlfiles)
- execute_dlfiles="$execute_dlfiles $arg"
- ;;
- tag)
- tagname="$arg"
-
- # Check whether tagname contains only valid characters
- case $tagname in
- *[!-_A-Za-z0-9,/]*)
- echo "$progname: invalid tag name: $tagname" 1>&2
- exit 1
- ;;
- esac
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
- case $tagname in
- CC)
- # Don't test for the "default" C tag, as we know, it's there, but
- # not specially marked.
- taglist="$taglist $tagname"
- ;;
- *)
- if grep "^### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then
- taglist="$taglist $tagname"
- # Evaluate the configuration.
- eval "`sed -n -e '/^### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`"
- else
- echo "$progname: ignoring unknown tag $tagname" 1>&2
- fi
- ;;
- esac
- ;;
- *)
- eval "$prev=\$arg"
- ;;
- esac
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+ func_error ${1+"$@"}
+ func_error "See the $PACKAGE documentation for more information."
+ func_fatal_error "Fatal configuration error."
+}
- prev=
- prevopt=
- continue
- fi
- # Have we seen a non-optional argument yet?
- case $arg in
- --help)
- show_help=yes
- ;;
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+ re_begincf='^# ### BEGIN LIBTOOL'
+ re_endcf='^# ### END LIBTOOL'
- --version)
- echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
- exit 0
- ;;
+ # Default configuration.
+ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
- --config)
- sed -n -e '/^### BEGIN LIBTOOL CONFIG/,/^### END LIBTOOL CONFIG/p' < "$0"
# Now print the configurations for the tags.
for tagname in $taglist; do
- sed -n -e "/^### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0"
+ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
done
- exit 0
- ;;
- --debug)
- echo "$progname: enabling shell trace mode"
- set -x
- ;;
-
- --dry-run | -n)
- run=:
- ;;
+ exit $?
+}
- --features)
- echo "host: $host"
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+ $ECHO "host: $host"
if test "$build_libtool_libs" = yes; then
- echo "enable shared libraries"
+ $ECHO "enable shared libraries"
else
- echo "disable shared libraries"
+ $ECHO "disable shared libraries"
fi
if test "$build_old_libs" = yes; then
- echo "enable static libraries"
+ $ECHO "enable static libraries"
else
- echo "disable static libraries"
+ $ECHO "disable static libraries"
fi
- exit 0
- ;;
- --finish) mode="finish" ;;
+ exit $?
+}
- --mode) prevopt="--mode" prev=mode ;;
- --mode=*) mode="$optarg" ;;
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+ # Global variable:
+ tagname="$1"
+
+ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+ sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+ # Validate tagname.
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ func_fatal_error "invalid tag name: $tagname"
+ ;;
+ esac
- --quiet | --silent)
- show=:
- ;;
+ # Don't test for the "default" C tag, as we know it's
+ # there but not specially marked.
+ case $tagname in
+ CC) ;;
+ *)
+ if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+ taglist="$taglist $tagname"
- --tag) prevopt="--tag" prev=tag ;;
- --tag=*)
- set tag "$optarg" ${1+"$@"}
- shift
- prev=tag
- ;;
+ # Evaluate the configuration. Be careful to quote the path
+ # and the sed script, to avoid splitting on whitespace, but
+ # also don't use non-portable quotes within backquotes within
+ # quotes we have to do it in 2 steps:
+ extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+ eval "$extractedcf"
+ else
+ func_error "ignoring unknown tag $tagname"
+ fi
+ ;;
+ esac
+}
- -dlopen)
- prevopt="-dlopen"
- prev=execute_dlfiles
- ;;
- -*)
- $echo "$modename: unrecognized option \`$arg'" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
+func_mode_help ()
+{
+ # We need to display help for each of the modes.
+ case $mode in
+ "")
+ # Generic help is extracted from the usage comments
+ # at the start of this file.
+ func_help
+ ;;
- *)
- nonopt="$arg"
- break
+ clean)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ compile)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -no-suppress do not suppress compiler output for multiple passes
+ -prefer-pic try to building PIC objects only
+ -prefer-non-pic try to building non-PIC objects only
+ -shared do not build a \`.o' file suitable for static linking
+ -static only build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+ ;;
+
+ execute)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+ finish)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the \`--dry-run' option if you just want to see what would be executed."
+ ;;
+
+ install)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+ -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+ link)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE Use a list of object files found in FILE to specify objects
+ -precious-files-regex REGEX
+ don't remove output files matching REGEX
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -shared only do dynamic linking of libtool libraries
+ -shrext SUFFIX override the standard shared library file extension
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+ -weak LIBNAME declare that the target provides the LIBNAME interface
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename. Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+ uninstall)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ *)
+ func_fatal_help "invalid operation mode \`$mode'"
+ ;;
+ esac
+
+ $ECHO
+ $ECHO "Try \`$progname --help' for more information about other modes."
+
+ exit $?
+}
+
+# Generated shell functions inserted here.
+
+
+# Parse options once, thoroughly. This comes as soon as possible in
+# the script to make things like `libtool --version' happen quickly.
+{
+
+ # Shorthand for --mode=foo, only valid as the first argument
+ case $1 in
+ clean|clea|cle|cl)
+ shift; set dummy --mode clean ${1+"$@"}; shift
+ ;;
+ compile|compil|compi|comp|com|co|c)
+ shift; set dummy --mode compile ${1+"$@"}; shift
+ ;;
+ execute|execut|execu|exec|exe|ex|e)
+ shift; set dummy --mode execute ${1+"$@"}; shift
+ ;;
+ finish|finis|fini|fin|fi|f)
+ shift; set dummy --mode finish ${1+"$@"}; shift
+ ;;
+ install|instal|insta|inst|ins|in|i)
+ shift; set dummy --mode install ${1+"$@"}; shift
+ ;;
+ link|lin|li|l)
+ shift; set dummy --mode link ${1+"$@"}; shift
+ ;;
+ uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+ shift; set dummy --mode uninstall ${1+"$@"}; shift
;;
esac
-done
-if test -n "$prevopt"; then
- $echo "$modename: option \`$prevopt' requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
-fi
+ # Parse non-mode specific arguments:
+ while test "$#" -gt 0; do
+ opt="$1"
+ shift
-# If this variable is set in any of the actions, the command in it
-# will be execed at the end. This prevents here-documents from being
-# left over by shells.
-exec_cmd=
+ case $opt in
+ --config) func_config ;;
+
+ --debug) preserve_args="$preserve_args $opt"
+ func_echo "enabling shell trace mode"
+ opt_debug='set -x'
+ $opt_debug
+ ;;
+
+ -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ execute_dlfiles="$execute_dlfiles $1"
+ shift
+ ;;
+
+ --dry-run | -n) opt_dry_run=: ;;
+ --features) func_features ;;
+ --finish) mode="finish" ;;
+
+ --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ case $1 in
+ # Valid mode arguments:
+ clean) ;;
+ compile) ;;
+ execute) ;;
+ finish) ;;
+ install) ;;
+ link) ;;
+ relink) ;;
+ uninstall) ;;
+
+ # Catch anything else as an error
+ *) func_error "invalid argument for $opt"
+ exit_cmd=exit
+ break
+ ;;
+ esac
+
+ mode="$1"
+ shift
+ ;;
+
+ --preserve-dup-deps)
+ opt_duplicate_deps=: ;;
+
+ --quiet|--silent) preserve_args="$preserve_args $opt"
+ opt_silent=:
+ ;;
+
+ --verbose| -v) preserve_args="$preserve_args $opt"
+ opt_silent=false
+ ;;
+
+ --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ preserve_args="$preserve_args $opt $1"
+ func_enable_tag "$1" # tagname is set here
+ shift
+ ;;
+
+ # Separate optargs to long options:
+ -dlopen=*|--mode=*|--tag=*)
+ func_opt_split "$opt"
+ set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+ shift
+ ;;
+
+ -\?|-h) func_usage ;;
+ --help) opt_help=: ;;
+ --version) func_version ;;
+
+ -*) func_fatal_help "unrecognized option \`$opt'" ;;
+
+ *) nonopt="$opt"
+ break
+ ;;
+ esac
+ done
-if test -z "$show_help"; then
+ # Now that we've collected a possible --mode arg, show help if necessary
+ $opt_help && func_mode_help
- # Infer the operation mode.
- if test -z "$mode"; then
- case $nonopt in
- *cc | *++ | gcc* | *-gcc*)
- mode=link
- for arg
- do
- case $arg in
- -c)
- mode=compile
- break
- ;;
- esac
- done
- ;;
- *db | *dbx | *strace | *truss)
- mode=execute
- ;;
- *install*|cp|mv)
- mode=install
- ;;
- *rm)
- mode=uninstall
+ case $host in
+ *cygwin* | *mingw* | *pw32*)
+ # don't eliminate duplications in $postdeps and $predeps
+ opt_duplicate_compiler_generated_deps=:
;;
*)
- # If we have no mode, but dlfiles were specified, then do execute mode.
- test -n "$execute_dlfiles" && mode=execute
+ opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+ ;;
+ esac
- # Just use the default operation mode.
- if test -z "$mode"; then
- if test -n "$nonopt"; then
- $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
- else
- $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
- fi
+ # Having warned about all mis-specified options, bail out if
+ # anything was wrong.
+ $exit_cmd $EXIT_FAILURE
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+ if test "$package_revision" != "$macro_revision"; then
+ if test "$VERSION" != "$macro_version"; then
+ if test -z "$macro_version"; then
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
fi
- ;;
- esac
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+ fi
+
+ exit $EXIT_MISMATCH
+ fi
+}
+
+
+## ----------- ##
+## Main. ##
+## ----------- ##
+
+{
+ # Sanity checks first:
+ func_check_version_match
+
+ if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+ func_fatal_configuration "not configured to build any kind of library"
fi
+ test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+
+
+ # Darwin sucks
+ eval std_shrext=\"$shrext_cmds\"
+
+
# Only execute mode is allowed to have -dlopen flags.
if test -n "$execute_dlfiles" && test "$mode" != execute; then
- $echo "$modename: unrecognized option \`-dlopen'" 1>&2
- $echo "$help" 1>&2
- exit 1
+ func_error "unrecognized option \`-dlopen'"
+ $ECHO "$help" 1>&2
+ exit $EXIT_FAILURE
fi
# Change the help message to a mode-specific one.
generic_help="$help"
- help="Try \`$modename --help --mode=$mode' for more information."
+ help="Try \`$progname --help --mode=$mode' for more information."
+}
- # These modes are in order of execution frequency so that they run quickly.
- case $mode in
- # libtool compile mode
- compile)
- modename="$modename: compile"
- # Get the compilation command and the source file.
- base_compile=
- prev=
- lastarg=
- srcfile="$nonopt"
- suppress_output=
- user_target=no
- for arg
- do
- case $prev in
- "") ;;
- xcompiler)
- # Aesthetically quote the previous argument.
- prev=
- lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+ $SED -e 4q "$1" 2>/dev/null \
+ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
- case $arg in
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs. To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway. Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+ lalib_p=no
+ if test -r "$1" && exec 5<&1 <"$1"; then
+ for lalib_p_l in 1 2 3 4
+ do
+ read lalib_p_line
+ case "$lalib_p_line" in
+ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+ esac
+ done
+ exec 1<&5 5<&-
+ fi
+ test "$lalib_p" = yes
+}
- # Add the previous argument to base_compile.
- if test -z "$base_compile"; then
- base_compile="$lastarg"
- else
- base_compile="$base_compile $lastarg"
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+ func_lalib_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+ $opt_debug
+ save_ifs=$IFS; IFS='~'
+ for cmd in $1; do
+ IFS=$save_ifs
+ eval cmd=\"$cmd\"
+ func_show_eval "$cmd" "${2-:}"
+ done
+ IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)! Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+ $opt_debug
+ case $1 in
+ */* | *\\*) . "$1" ;;
+ *) . "./$1" ;;
+ esac
+}
+
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+ $opt_debug
+ win32_libid_type="unknown"
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+ $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+ win32_nmres=`eval $NM -f posix -A $1 |
+ $SED -n -e '
+ 1,100{
+ / I /{
+ s,.*,import,
+ p
+ q
+ }
+ }'`
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+ esac
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $ECHO "$win32_libid_type"
+}
+
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+ $opt_debug
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+ func_quote_for_eval "$arg"
+ CC_quoted="$CC_quoted $func_quote_for_eval_result"
+ done
+ case $@ in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+ CC_quoted=
+ for arg in $CC; do
+ # Double-quote args containing other shell metacharacters.
+ func_quote_for_eval "$arg"
+ CC_quoted="$CC_quoted $func_quote_for_eval_result"
+ done
+ case "$@ " in
+ " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ func_echo "unable to infer tagged configuration"
+ func_fatal_error "specify a tag with \`--tag'"
+# else
+# func_verbose "using $tagname tagged configuration"
fi
- continue
;;
esac
+ fi
+}
- # Accept any command-line options.
- case $arg in
- -o)
- if test "$user_target" != "no"; then
- $echo "$modename: you cannot specify \`-o' more than once" 1>&2
- exit 1
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+ $opt_debug
+ my_outputname="$1"
+ my_originator="$2"
+ my_pic_p="${3-no}"
+ my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+ my_dlsyms=
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ my_dlsyms="${my_outputname}S.c"
+ else
+ func_error "not configured to extract global symbols from dlpreopened files"
+ fi
+ fi
+
+ if test -n "$my_dlsyms"; then
+ case $my_dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist="$output_objdir/${my_outputname}.nm"
+
+ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+ # Parse the name list into a source file.
+ func_echo "creating $output_objdir/$my_dlsyms"
+
+ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test "$dlself" = yes; then
+ func_echo "generating symbol list for \`$output'"
+
+ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ for progfile in $progfiles; do
+ func_echo "extracting global C symbols from \`$progfile'"
+ $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $opt_dry_run || {
+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $opt_dry_run || {
+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols="$output_objdir/$outputname.exp"
+ $opt_dry_run || {
+ $RM $export_symbols
+ eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ case $host in
+ *cygwin* | *mingw* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ else
+ $opt_dry_run || {
+ eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ case $host in
+ *cygwin | *mingw* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ fi
fi
- user_target=next
- ;;
- -static)
- build_old_libs=yes
- continue
- ;;
+ for dlprefile in $dlprefiles; do
+ func_echo "extracting global C symbols from \`$dlprefile'"
+ func_basename "$dlprefile"
+ name="$func_basename_result"
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ done
- -prefer-pic)
- pic_mode=yes
- continue
- ;;
+ $opt_dry_run || {
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
- -prefer-non-pic)
- pic_mode=no
- continue
- ;;
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $MV "$nlist"T "$nlist"
+ fi
- -Xcompiler)
- prev=xcompiler
- continue
- ;;
+ # Try sorting and uniquifying the output.
+ if $GREP -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ $GREP -v "^: " < "$nlist" > "$nlist"S
+ fi
- -Wc,*)
- args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
- lastarg=
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=','
- for arg in $args; do
- IFS="$save_ifs"
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+ else
+ $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ fi
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols. */
+typedef struct {
+ const char *name;
+ void *address;
+} lt_dlsymlist;
+"
+ case $host in
+ *cygwin* | *mingw* )
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+/* DATA imports from DLLs on WIN32 con't be const, because
+ runtime relocations are performed -- see ld's documentation
+ on pseudo-relocs. */"
+ lt_dlsym_const= ;;
+ *osf5*)
+ echo >> "$output_objdir/$my_dlsyms" "\
+/* This system does not cope well with relocations in const data */"
+ lt_dlsym_const= ;;
+ *)
+ lt_dlsym_const=const ;;
+ esac
+
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+extern $lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+$lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+ { \"$my_originator\", (void *) 0 },"
+
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ } # !$opt_dry_run
+
+ pic_flag_for_symtable=
+ case "$compile_command " in
+ *" -static "*) ;;
+ *)
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+ *-*-hpux*)
+ pic_flag_for_symtable=" $pic_flag" ;;
+ *)
+ if test "X$my_pic_p" != Xno; then
+ pic_flag_for_symtable=" $pic_flag"
+ fi
;;
esac
- lastarg="$lastarg $arg"
+ ;;
+ esac
+ symtab_cflags=
+ for arg in $LTCFLAGS; do
+ case $arg in
+ -pie | -fpie | -fPIE) ;;
+ *) symtab_cflags="$symtab_cflags $arg" ;;
+ esac
done
- IFS="$save_ifs"
- lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
- # Add the arguments to base_compile.
- if test -z "$base_compile"; then
- base_compile="$lastarg"
- else
- base_compile="$base_compile $lastarg"
- fi
- continue
+ # Now compile the dynamic symbol file.
+ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+ # Clean up the generated files.
+ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+ # Transform the symbol file into the correct name.
+ symfileobj="$output_objdir/${my_outputname}S.$objext"
+ case $host in
+ *cygwin* | *mingw* )
+ if test -f "$output_objdir/$my_outputname.def"; then
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ else
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ fi
+ ;;
+ *)
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ ;;
+ esac
;;
+ *)
+ func_fatal_error "unknown suffix for \`$my_dlsyms'"
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+ fi
+}
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ $opt_debug
+ f_ex_an_ar_dir="$1"; shift
+ f_ex_an_ar_oldlib="$1"
+ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" 'exit $?'
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+ fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+ $opt_debug
+ my_gentop="$1"; shift
+ my_oldlibs=${1+"$@"}
+ my_oldobjs=""
+ my_xlib=""
+ my_xabs=""
+ my_xdir=""
+
+ for my_xlib in $my_oldlibs; do
+ # Extract the objects.
+ case $my_xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+ *) my_xabs=`pwd`"/$my_xlib" ;;
esac
+ func_basename "$my_xlib"
+ my_xlib="$func_basename_result"
+ my_xlib_u=$my_xlib
+ while :; do
+ case " $extracted_archives " in
+ *" $my_xlib_u "*)
+ extracted_serial=`expr $extracted_serial + 1`
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
+ *) break ;;
+ esac
+ done
+ extracted_archives="$extracted_archives $my_xlib_u"
+ my_xdir="$my_gentop/$my_xlib_u"
- case $user_target in
- next)
- # The next one is the -o target name
- user_target=yes
- continue
+ func_mkdir_p "$my_xdir"
+
+ case $host in
+ *-darwin*)
+ func_echo "Extracting $my_xabs"
+ # Do not bother doing anything if just a dry run
+ $opt_dry_run || {
+ darwin_orig_dir=`pwd`
+ cd $my_xdir || exit $?
+ darwin_archive=$my_xabs
+ darwin_curdir=`pwd`
+ darwin_base_archive=`basename $darwin_archive`
+ darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+ if test -n "$darwin_arches"; then
+ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+ darwin_arch=
+ func_echo "$darwin_base_archive has multiple architectures $darwin_arches"
+ for darwin_arch in $darwin_arches ; do
+ func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+ cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+ cd "$darwin_curdir"
+ $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+ done # $darwin_arches
+ ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP`
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+ darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+ lipo -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ $RM -rf unfat-$$
+ cd "$darwin_orig_dir"
+ else
+ cd $darwin_orig_dir
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ fi # $darwin_arches
+ } # !$opt_dry_run
+ ;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
;;
- yes)
- # We got the output file
- user_target=set
+ esac
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+ done
+
+ func_extract_archives_result="$my_oldobjs"
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+ write_libobj=${1}
+ if test "$build_libtool_libs" = yes; then
+ write_lobj=\'${2}\'
+ else
+ write_lobj=none
+ fi
+
+ if test "$build_old_libs" = yes; then
+ write_oldobj=\'${3}\'
+ else
+ write_oldobj=none
+ fi
+
+ $opt_dry_run || {
+ cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+ mv -f "${write_libobj}T" "${write_libobj}"
+ }
+}
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+ $opt_debug
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
+ suppress_opt=yes
+ suppress_output=
+ arg_mode=normal
+ libobj=
+ later=
+ pie_flag=
+
+ for arg
+ do
+ case $arg_mode in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg="$arg"
+ arg_mode=normal
+ ;;
+
+ target )
libobj="$arg"
+ arg_mode=normal
continue
;;
- esac
- # Accept the current argument as the source file.
- lastarg="$srcfile"
- srcfile="$arg"
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ test -n "$libobj" && \
+ func_fatal_error "you cannot specify \`-o' more than once"
+ arg_mode=target
+ continue
+ ;;
- # Aesthetically quote the previous argument.
+ -pie | -fpie | -fPIE)
+ pie_flag="$pie_flag $arg"
+ continue
+ ;;
- # Backslashify any backslashes, double quotes, and dollar signs.
- # These are the only characters that are still specially
- # interpreted inside of double-quoted scrings.
- lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
+ -shared | -static | -prefer-pic | -prefer-non-pic)
+ later="$later $arg"
+ continue
+ ;;
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- case $lastarg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- lastarg="\"$lastarg\""
+ -no-suppress)
+ suppress_opt=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ lastarg=
+ save_ifs="$IFS"; IFS=','
+ for arg in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$arg"
+ lastarg="$lastarg $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$lastarg"
+ lastarg=$func_stripname_result
+
+ # Add the arguments to base_compile.
+ base_compile="$base_compile $lastarg"
+ continue
+ ;;
+
+ *)
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg="$srcfile"
+ srcfile="$arg"
+ ;;
+ esac # case $arg
;;
- esac
+ esac # case $arg_mode
- # Add the previous argument to base_compile.
- if test -z "$base_compile"; then
- base_compile="$lastarg"
- else
- base_compile="$base_compile $lastarg"
- fi
- done
+ # Aesthetically quote the previous argument.
+ func_quote_for_eval "$lastarg"
+ base_compile="$base_compile $func_quote_for_eval_result"
+ done # for arg
- case $user_target in
- set)
+ case $arg_mode in
+ arg)
+ func_fatal_error "you must specify an argument for -Xcompile"
;;
- no)
- # Get the name of the library object.
- libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+ target)
+ func_fatal_error "you must specify a target with \`-o'"
;;
*)
- $echo "$modename: you must specify a target with \`-o'" 1>&2
- exit 1
+ # Get the name of the library object.
+ test -z "$libobj" && {
+ func_basename "$srcfile"
+ libobj="$func_basename_result"
+ }
;;
esac
# Recognize several different file suffixes.
# If the user specifies -o file.o, it is replaced with file.lo
- xform='[cCFSfmso]'
+ xform='[cCFSifmso]'
case $libobj in
*.ada) xform=ada ;;
*.adb) xform=adb ;;
@@ -472,82 +1702,66 @@ if test -z "$show_help"; then
*.asm) xform=asm ;;
*.c++) xform=c++ ;;
*.cc) xform=cc ;;
+ *.ii) xform=ii ;;
*.class) xform=class ;;
*.cpp) xform=cpp ;;
*.cxx) xform=cxx ;;
- *.f90) xform=f90 ;;
+ *.[fF][09]?) xform='[fF][09].' ;;
*.for) xform=for ;;
*.java) xform=java ;;
+ *.obj) xform=obj ;;
esac
- libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+ libobj=`$ECHO "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
case $libobj in
- *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
+ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
*)
- $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
- exit 1
+ func_fatal_error "cannot determine name of library object from \`$libobj'"
;;
esac
- # Infer tagged configuration to use if any are available and
- # if one wasn't chosen via the "--tag" command line option.
- # Only attempt this if the compiler in the base compile
- # command doesn't match the default compiler.
- if test -n "$available_tags" && test -z "$tagname"; then
- case $base_compile in
- "$CC "*) ;;
- # Blanks in the command may have been stripped by the calling shell,
- # but not from the CC environment variable when ltconfig was run.
- "`$echo $CC` "*) ;;
- *)
- for z in $available_tags; do
- if grep "^### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
- # Evaluate the configuration.
- eval "`sed -n -e '/^### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
- case $base_compile in
- "$CC "*)
- # The compiler in the base compile command matches
- # the one in the tagged configuration.
- # Assume this is the tagged configuration we want.
- tagname=$z
- break
- ;;
- "`$echo $CC` "*)
- tagname=$z
- break
- ;;
- esac
- fi
- done
- # If $tagname still isn't set, then no tagged configuration
- # was found and let the user know that the "--tag" command
- # line option must be used.
- if test -z "$tagname"; then
- echo "$modename: unable to infer tagged configuration"
- echo "$modename: specify a tag with \`--tag'" 1>&2
- exit 1
-# else
-# echo "$modename: using $tagname tagged configuration"
- fi
+ func_infer_tag $base_compile
+
+ for arg in $later; do
+ case $arg in
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ continue
+ ;;
+
+ -static)
+ build_libtool_libs=no
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
;;
esac
- fi
+ done
- objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$obj"; then
- xdir=
- else
- xdir=$xdir/
- fi
+ func_quote_for_eval "$libobj"
+ test "X$libobj" != "X$func_quote_for_eval_result" \
+ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
+ && func_warning "libobj name \`$libobj' may not contain shell special characters."
+ func_basename "$obj"
+ objname="$func_basename_result"
+ func_dirname "$obj" "/" ""
+ xdir="$func_dirname_result"
lobj=${xdir}$objdir/$objname
- if test -z "$base_compile"; then
- $echo "$modename: you must specify a compilation command" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
+ test -z "$base_compile" && \
+ func_fatal_help "you must specify a compilation command"
# Delete any leftover library objects.
if test "$build_old_libs" = yes; then
@@ -556,8 +1770,8 @@ if test -z "$show_help"; then
removelist="$lobj $libobj ${libobj}T"
fi
- $run $rm $removelist
- trap "$run $rm $removelist; exit 1" 1 2 15
+ $opt_dry_run || $RM $removelist
+ trap "$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE" 1 2 15
# On Cygwin there's no "real" PIC flag so we must build both object types
case $host_os in
@@ -565,7 +1779,7 @@ if test -z "$show_help"; then
pic_mode=default
;;
esac
- if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
+ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
# non-PIC code in shared libraries is not supported
pic_mode=default
fi
@@ -573,10 +1787,10 @@ if test -z "$show_help"; then
# Calculate the filename of the output object if compiler does
# not support -o with -c
if test "$compiler_c_o" = no; then
- output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+ output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
lockfile="$output_obj.lock"
removelist="$removelist $output_obj $lockfile"
- trap "$run $rm $removelist; exit 1" 1 2 15
+ trap "$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE" 1 2 15
else
output_obj=
need_locks=no
@@ -586,13 +1800,13 @@ if test -z "$show_help"; then
# Lock this critical section if it is needed
# We use this script file to make the link, it avoids creating a new file
if test "$need_locks" = yes; then
- until $run ln "$0" "$lockfile" 2>/dev/null; do
- $show "Waiting for $lockfile to be removed"
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
sleep 2
done
elif test "$need_locks" = warn; then
if test -f "$lockfile"; then
- echo "\
+ $ECHO "\
*** ERROR, $lockfile exists and contains:
`cat $lockfile 2>/dev/null`
@@ -603,29 +1817,19 @@ repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."
- $run $rm $removelist
- exit 1
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
fi
- echo $srcfile > "$lockfile"
+ $ECHO "$srcfile" > "$lockfile"
fi
if test -n "$fix_srcfile_path"; then
eval srcfile=\"$fix_srcfile_path\"
fi
+ func_quote_for_eval "$srcfile"
+ qsrcfile=$func_quote_for_eval_result
- $run $rm "$libobj" "${libobj}T"
-
- # Create a libtool object file (analogous to a ".la" file),
- # but don't create it if we're doing a dry run.
- test -z "$run" && cat > ${libobj}T <<EOF
-# $libobj - a libtool object file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-EOF
+ $opt_dry_run || $RM "$libobj" "${libobj}T"
# Only build a PIC object if we are building libtool libraries.
if test "$build_libtool_libs" = yes; then
@@ -633,38 +1837,27 @@ EOF
fbsd_hideous_sh_bug=$base_compile
if test "$pic_mode" != no; then
- command="$base_compile $srcfile $pic_flag"
+ command="$base_compile $qsrcfile $pic_flag"
else
# Don't build PIC code
- command="$base_compile $srcfile"
+ command="$base_compile $qsrcfile"
fi
- if test ! -d ${xdir}$objdir; then
- $show "$mkdir ${xdir}$objdir"
- $run $mkdir ${xdir}$objdir
- status=$?
- if test $status -ne 0 && test ! -d ${xdir}$objdir; then
- exit $status
- fi
- fi
+ func_mkdir_p "$xdir$objdir"
if test -z "$output_obj"; then
- # Place PIC objects in $objdir
- command="$command -o $lobj"
+ # Place PIC objects in $objdir
+ command="$command -o $lobj"
fi
- $run $rm "$lobj" "$output_obj"
+ $opt_dry_run || $RM "$lobj" "$output_obj"
- $show "$command"
- if $run eval "$command"; then :
- else
- test -n "$output_obj" && $run $rm $removelist
- exit 1
- fi
+ func_show_eval "$command" \
+ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
if test "$need_locks" = warn &&
- test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- echo "\
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`
@@ -678,45 +1871,29 @@ repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."
- $run $rm $removelist
- exit 1
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
fi
# Just move the object if needed, then go on to compile the next one
- if test -n "$output_obj" && test "x$output_obj" != "x$lobj"; then
- $show "$mv $output_obj $lobj"
- if $run $mv $output_obj $lobj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ func_show_eval '$MV "$output_obj" "$lobj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
fi
- # Append the name of the PIC object to the libtool object file.
- test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object='$objdir/$objname'
-
-EOF
-
# Allow error messages only from the first compilation.
- suppress_output=' >/dev/null 2>&1'
- else
- # No PIC object so indicate it doesn't exist in the libtool
- # object file.
- test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object=none
-
-EOF
+ if test "$suppress_opt" = yes; then
+ suppress_output=' >/dev/null 2>&1'
+ fi
fi
# Only build a position-dependent object if we build old libraries.
if test "$build_old_libs" = yes; then
if test "$pic_mode" != yes; then
# Don't build PIC code
- command="$base_compile $srcfile"
+ command="$base_compile $qsrcfile$pie_flag"
else
- command="$base_compile $srcfile $pic_flag"
+ command="$base_compile $qsrcfile $pic_flag"
fi
if test "$compiler_c_o" = yes; then
command="$command -o $obj"
@@ -724,17 +1901,13 @@ EOF
# Suppress compiler output if we already did a PIC compilation.
command="$command$suppress_output"
- $run $rm "$obj" "$output_obj"
- $show "$command"
- if $run eval "$command"; then :
- else
- $run $rm $removelist
- exit 1
- fi
+ $opt_dry_run || $RM "$obj" "$output_obj"
+ func_show_eval "$command" \
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
if test "$need_locks" = warn &&
- test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- echo "\
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`
@@ -748,57 +1921,684 @@ repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."
- $run $rm $removelist
- exit 1
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
fi
# Just move the object if needed
- if test -n "$output_obj" && test "x$output_obj" != "x$obj"; then
- $show "$mv $output_obj $obj"
- if $run $mv $output_obj $obj; then :
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ func_show_eval '$MV "$output_obj" "$obj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+ fi
+
+ $opt_dry_run || {
+ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+ # Unlock the critical section if it was locked
+ if test "$need_locks" != no; then
+ $RM "$lockfile"
+ fi
+ }
+
+ exit $EXIT_SUCCESS
+}
+
+test "$mode" = compile && func_mode_compile ${1+"$@"}
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+ $opt_debug
+ # The first argument is the command name.
+ cmd="$nonopt"
+ test -z "$cmd" && \
+ func_fatal_help "you must specify a COMMAND"
+
+ # Handle -dlopen flags immediately.
+ for file in $execute_dlfiles; do
+ test -f "$file" \
+ || func_fatal_help "\`$file' is not a file"
+
+ dir=
+ case $file in
+ *.la)
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+ func_source "$file"
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && \
+ func_warning "\`$file' was not linked with \`-export-dynamic'"
+ continue
+ fi
+
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+
+ if test -f "$dir/$objdir/$dlname"; then
+ dir="$dir/$objdir"
else
- error=$?
- $run $rm $removelist
- exit $error
+ if test ! -f "$dir/$dlname"; then
+ func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+ fi
fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ ;;
+
+ *)
+ func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir="$absdir"
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
fi
+ done
- # Append the name of the non-PIC object the libtool object file.
- # Only append if the libtool object file exists.
- test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object='$objname'
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic="$magic"
-EOF
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -*) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if func_ltwrapper_p "$file"; then
+ func_source "$file"
+
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ func_quote_for_eval "$file"
+ args="$args $func_quote_for_eval_result"
+ done
+
+ if test "X$opt_dry_run" = Xfalse; then
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+ eval "if test \"\${save_$lt_var+set}\" = set; then
+ $lt_var=\$save_$lt_var; export $lt_var
+ else
+ $lt_unset $lt_var
+ fi"
+ done
+
+ # Now prepare to actually exec the command.
+ exec_cmd="\$cmd$args"
else
- # Append the name of the non-PIC object the libtool object file.
- # Only append if the libtool object file exists.
- test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object=none
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+ $ECHO "export $shlibpath_var"
+ fi
+ $ECHO "$cmd$args"
+ exit $EXIT_SUCCESS
+ fi
+}
-EOF
+test "$mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+ $opt_debug
+ libdirs="$nonopt"
+ admincmds=
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for dir
+ do
+ libdirs="$libdirs $dir"
+ done
+
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+ $cmds"
+ fi
+ done
fi
- $run $mv "${libobj}T" "${libobj}"
+ # Exit here if they wanted silent mode.
+ $opt_silent && exit $EXIT_SUCCESS
- # Unlock the critical section if it was locked
- if test "$need_locks" != no; then
- $run $rm "$lockfile"
+ $ECHO "X----------------------------------------------------------------------" | $Xsed
+ $ECHO "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $ECHO " $libdir"
+ done
+ $ECHO
+ $ECHO "If you ever happen to want to link against installed libraries"
+ $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
+ $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
+ $ECHO "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable"
+ $ECHO " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ $ECHO " - add LIBDIR to the \`$runpath_var' environment variable"
+ $ECHO " during linking"
fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
- exit 0
- ;;
+ $ECHO " - use the \`$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $ECHO " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+ fi
+ $ECHO
- # libtool link mode
- link | relink)
- modename="$modename: link"
+ $ECHO "See any operating system documentation about shared libraries for"
+ case $host in
+ solaris2.[6789]|solaris2.1[0-9])
+ $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+ $ECHO "pages."
+ ;;
+ *)
+ $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
+ ;;
+ esac
+ $ECHO "X----------------------------------------------------------------------" | $Xsed
+ exit $EXIT_SUCCESS
+}
+
+test "$mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+ $opt_debug
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+ # Allow the use of GNU shtool's install command.
+ $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+ # Aesthetically quote it.
+ func_quote_for_eval "$nonopt"
+ install_prog="$func_quote_for_eval_result "
+ arg=$1
+ shift
+ else
+ install_prog=
+ arg=$nonopt
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ func_quote_for_eval "$arg"
+ install_prog="$install_prog$func_quote_for_eval_result"
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=no
+ stripme=
+ for arg
+ do
+ if test -n "$dest"; then
+ files="$files $dest"
+ dest=$arg
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=yes ;;
+ -f)
+ case " $install_prog " in
+ *[\\\ /]cp\ *) ;;
+ *) prev=$arg ;;
+ esac
+ ;;
+ -g | -m | -o)
+ prev=$arg
+ ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*)
+ ;;
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ prev=
+ else
+ dest=$arg
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ func_quote_for_eval "$arg"
+ install_prog="$install_prog $func_quote_for_eval_result"
+ done
+
+ test -z "$install_prog" && \
+ func_fatal_help "you must specify an install program"
+
+ test -n "$prev" && \
+ func_fatal_help "the \`$prev' option requires an argument"
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ func_fatal_help "no file or destination specified"
+ else
+ func_fatal_help "you must specify a destination"
+ fi
+ fi
+
+ # Strip any trailing slash from the destination.
+ func_stripname '' '/' "$dest"
+ dest=$func_stripname_result
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=yes
+ if test "$isdir" = yes; then
+ destdir="$dest"
+ destname=
+ else
+ func_dirname "$dest" "" "."
+ destdir="$func_dirname_result"
+ func_basename "$dest"
+ destname="$func_basename_result"
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files; shift
+ test "$#" -gt 1 && \
+ func_fatal_help "\`$dest' is not a directory"
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ func_fatal_help "\`$destdir' must be an absolute directory name"
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ staticlibs="$staticlibs $file"
+ ;;
+
+ *.la)
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$file' is not a valid libtool archive"
+
+ library_names=
+ old_library=
+ relink_command=
+ func_source "$file"
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) current_libdirs="$current_libdirs $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) future_libdirs="$future_libdirs $libdir" ;;
+ esac
+ fi
+
+ func_dirname "$file" "/" ""
+ dir="$func_dirname_result"
+ dir="$dir$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ test "$inst_prefix_dir" = "$destdir" && \
+ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+ fi
+
+ func_warning "relinking \`$file'"
+ func_show_eval "$relink_command" \
+ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names; shift
+ if test -n "$1"; then
+ realname="$1"
+ shift
+
+ srcname="$realname"
+ test -n "$relink_command" && srcname="$realname"T
+
+ # Install the shared library and build the symlinks.
+ func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+ 'exit $?'
+ tstripme="$stripme"
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ case $realname in
+ *.dll.a)
+ tstripme=""
+ ;;
+ esac
+ ;;
+ esac
+ if test -n "$tstripme" && test -n "$striplib"; then
+ func_show_eval "$striplib $destdir/$realname" 'exit $?'
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ # Try `ln -sf' first, because the `ln' binary might depend on
+ # the symlink we replace! Solaris /bin/ln does not understand -f,
+ # so we also need to try rm && ln -s.
+ for linkname
+ do
+ test "$linkname" != "$realname" \
+ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib="$destdir/$realname"
+ func_execute_cmds "$postinstall_cmds" 'exit $?'
+ fi
+
+ # Install the pseudo-library for information purposes.
+ func_basename "$file"
+ name="$func_basename_result"
+ instname="$dir/$name"i
+ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ func_basename "$file"
+ destfile="$func_basename_result"
+ destfile="$destdir/$destfile"
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ func_lo2o "$destfile"
+ staticdest=$func_lo2o_result
+ ;;
+ *.$objext)
+ staticdest="$destfile"
+ destfile=
+ ;;
+ *)
+ func_fatal_help "cannot copy a libtool object to \`$destfile'"
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ test -n "$destfile" && \
+ func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+ # Install the old object if enabled.
+ if test "$build_old_libs" = yes; then
+ # Deduce the name of the old-style object file.
+ func_lo2o "$file"
+ staticobj=$func_lo2o_result
+ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ func_basename "$file"
+ destfile="$func_basename_result"
+ destfile="$destdir/$destfile"
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=""
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ stripped_ext=".exe"
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin*|*mingw*)
+ func_stripname '' '.exe' "$file"
+ wrapper=$func_stripname_result
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if func_ltwrapper_p "$wrapper"; then
+ notinst_deplibs=
+ relink_command=
+
+ func_source "$wrapper"
+
+ # Check the variables that should have been set.
+ test -z "$generated_by_libtool_version" && \
+ func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+ finalize=yes
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ func_source "$lib"
+ fi
+ libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ func_warning "\`$lib' has not been installed in \`$libdir'"
+ finalize=no
+ fi
+ done
+
+ relink_command=
+ func_source "$wrapper"
+
+ outputname=
+ if test "$fast_install" = no && test -n "$relink_command"; then
+ $opt_dry_run || {
+ if test "$finalize" = yes; then
+ tmpdir=`func_mktempdir`
+ func_basename "$file$stripped_ext"
+ file="$func_basename_result"
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $opt_silent || {
+ func_quote_for_expand "$relink_command"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ if eval "$relink_command"; then :
+ else
+ func_error "error: relink \`$file' with the above command before installing it"
+ $opt_dry_run || ${RM}r "$tmpdir"
+ continue
+ fi
+ file="$outputname"
+ else
+ func_warning "cannot relink \`$file'"
+ fi
+ }
+ else
+ # Install the binary that we compiled earlier.
+ file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyway
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ func_stripname '' '.exe' "$destfile"
+ destfile=$func_stripname_result
+ ;;
+ esac
+ ;;
+ esac
+ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+ $opt_dry_run || if test -n "$outputname"; then
+ ${RM}r "$tmpdir"
+ fi
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ func_basename "$file"
+ name="$func_basename_result"
+
+ # Set up the ranlib parameters.
+ oldlib="$destdir/$name"
+
+ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ func_show_eval "$old_striplib $oldlib" 'exit $?'
+ fi
+
+ # Do each command in the postinstall commands.
+ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+ done
+
+ test -n "$future_libdirs" && \
+ func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test "$mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_mode_link arg...
+func_mode_link ()
+{
+ $opt_debug
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
# It is impossible to link a dll without this setting, and
# we shouldn't force the makefile maintainer to figure out
# which system we are compiling for in order to pass an extra
- # flag for every libtool invokation.
+ # flag for every libtool invocation.
# allow_undefined=no
# FIXME: Unfortunately, there are problems with the above when trying
@@ -812,10 +2612,10 @@ EOF
allow_undefined=yes
;;
esac
- libtool_args="$nonopt"
- base_compile="$nonopt"
- compile_command="$nonopt"
- finalize_command="$nonopt"
+ libtool_args=$nonopt
+ base_compile="$nonopt $@"
+ compile_command=$nonopt
+ finalize_command=$nonopt
compile_rpath=
finalize_rpath=
@@ -829,6 +2629,8 @@ EOF
linker_flags=
dllsearchpath=
lib_search_path=`pwd`
+ inst_prefix_dir=
+ new_inherited_linker_flags=
avoid_version=no
dlfiles=
@@ -844,6 +2646,7 @@ EOF
no_install=no
objs=
non_pic_objects=
+ precious_files_regex=
prefer_static_libs=no
preload=no
prev=
@@ -855,27 +2658,50 @@ EOF
temp_rpath=
thread_safe=no
vinfo=
+ vinfo_number=no
+ weak_libs=
+ single_module="${wl}-single_module"
+ func_infer_tag $base_compile
# We need to know -static, to get the right output filenames.
for arg
do
case $arg in
- -all-static | -static)
- if test "X$arg" = "X-all-static"; then
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ break
+ ;;
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
- $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+ func_warning "complete static linking is impossible in this configuration"
fi
if test -n "$link_static_flag"; then
dlopen_self=$dlopen_self_static
+ # See comment for -static flag below, for more details.
+ func_append compile_command " $link_static_flag"
+ func_append finalize_command " $link_static_flag"
fi
- else
+ prefer_static_libs=yes
+ ;;
+ -static)
if test -z "$pic_flag" && test -n "$link_static_flag"; then
dlopen_self=$dlopen_self_static
fi
- fi
+ prefer_static_libs=built
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
build_libtool_libs=no
build_old_libs=yes
- prefer_static_libs=yes
break
;;
esac
@@ -885,24 +2711,19 @@ EOF
test -n "$old_archive_from_new_cmds" && build_old_libs=yes
# Go through the arguments, transforming them on the way.
- while test $# -gt 0; do
+ while test "$#" -gt 0; do
arg="$1"
- base_compile="$base_compile $arg"
shift
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
- ;;
- *) qarg=$arg ;;
- esac
- libtool_args="$libtool_args $qarg"
+ func_quote_for_eval "$arg"
+ qarg=$func_quote_for_eval_unquoted_result
+ func_append libtool_args " $func_quote_for_eval_result"
# If the previous option needs an argument, assign it.
if test -n "$prev"; then
case $prev in
output)
- compile_command="$compile_command @OUTPUT@"
- finalize_command="$finalize_command @OUTPUT@"
+ func_append compile_command " @OUTPUT@"
+ func_append finalize_command " @OUTPUT@"
;;
esac
@@ -910,8 +2731,8 @@ EOF
dlfiles|dlprefiles)
if test "$preload" = no; then
# Add the symbol object into the linking commands.
- compile_command="$compile_command @SYMFILE@"
- finalize_command="$finalize_command @SYMFILE@"
+ func_append compile_command " @SYMFILE@"
+ func_append finalize_command " @SYMFILE@"
preload=yes
fi
case $arg in
@@ -949,10 +2770,8 @@ EOF
;;
expsyms)
export_symbols="$arg"
- if test ! -f "$arg"; then
- $echo "$modename: symbol file \`$arg' does not exist"
- exit 1
- fi
+ test -f "$arg" \
+ || func_fatal_error "symbol file \`$arg' does not exist"
prev=
continue
;;
@@ -961,115 +2780,127 @@ EOF
prev=
continue
;;
- release)
- release="-$arg"
+ framework)
+ case $host in
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+ *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+ esac
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir="$arg"
prev=
continue
;;
objectlist)
if test -f "$arg"; then
- save_arg=$arg
+ save_arg=$arg
moreargs=
- for fil in `cat $save_arg`
+ for fil in `cat "$save_arg"`
do
# moreargs="$moreargs $fil"
- arg=$fil
- # A libtool-controlled object.
+ arg=$fil
+ # A libtool-controlled object.
# Check to see that this really is a libtool object.
- if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- pic_object=
- non_pic_object=
-
- # Read the .lo file
- # If there is no directory component, then add one.
- case $arg in
- */* | *\\*) . $arg ;;
- *) . ./$arg ;;
- esac
-
- if test -z "$pic_object" || \
- test -z "$non_pic_object" ||
- test "$pic_object" = none && \
- test "$non_pic_object" = none; then
- $echo "$modename: cannot find name of object for \`$arg'" 1>&2
- exit 1
- fi
-
- # Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none &&
+ test "$non_pic_object" = none; then
+ func_fatal_error "cannot find name of object for \`$arg'"
+ fi
- if test "$pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- pic_object="$xdir$pic_object"
-
- if test "$prev" = dlfiles; then
- if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $pic_object"
- prev=
- continue
- else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
- fi
- fi
-
- # CHECK ME: I think I busted this. -Ossama
- if test "$prev" = dlprefiles; then
- # Preload the old-style object.
- dlprefiles="$dlprefiles $pic_object"
- prev=
- fi
-
- # A PIC object.
- libobjs="$libobjs $pic_object"
- arg="$pic_object"
- fi
-
- # Non-PIC object.
- if test "$non_pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- non_pic_object="$xdir$non_pic_object"
-
- # A standard non-PIC object
- non_pic_objects="$non_pic_objects $non_pic_object"
- if test -z "$pic_object" || test "$pic_object" = none ; then
- arg="$non_pic_object"
- fi
- fi
- else
- # Only an error if not doing a dry-run.
- if test -z "$run"; then
- $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
- exit 1
- else
- # Dry-run case.
-
- # Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
-
- pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
- non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
- libobjs="$libobjs $pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
- fi
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object="$pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool object"
+ fi
fi
done
else
- $echo "$modename: link input file \`$save_arg' does not exist"
- exit 1
+ func_fatal_error "link input file \`$arg' does not exist"
fi
- arg=$save_arg
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ precious_regex)
+ precious_files_regex="$arg"
+ prev=
+ continue
+ ;;
+ release)
+ release="-$arg"
prev=
continue
;;
@@ -1078,8 +2909,7 @@ EOF
case $arg in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit 1
+ func_fatal_error "only absolute run-paths are allowed"
;;
esac
if test "$prev" = rpath; then
@@ -1096,19 +2926,37 @@ EOF
prev=
continue
;;
+ shrext)
+ shrext_cmds="$arg"
+ prev=
+ continue
+ ;;
+ weak)
+ weak_libs="$weak_libs $arg"
+ prev=
+ continue
+ ;;
+ xcclinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
xcompiler)
compiler_flags="$compiler_flags $qarg"
prev=
- compile_command="$compile_command $qarg"
- finalize_command="$finalize_command $qarg"
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
continue
;;
xlinker)
linker_flags="$linker_flags $qarg"
compiler_flags="$compiler_flags $wl$qarg"
prev=
- compile_command="$compile_command $wl$qarg"
- finalize_command="$finalize_command $wl$qarg"
+ func_append compile_command " $wl$qarg"
+ func_append finalize_command " $wl$qarg"
continue
;;
*)
@@ -1117,23 +2965,19 @@ EOF
continue
;;
esac
- fi # test -n $prev
+ fi # test -n "$prev"
prevarg="$arg"
case $arg in
-all-static)
- if test -n "$link_static_flag"; then
- compile_command="$compile_command $link_static_flag"
- finalize_command="$finalize_command $link_static_flag"
- fi
+ # The effects of -all-static are defined in a previous loop.
continue
;;
-allow-undefined)
# FIXME: remove this flag sometime in the future.
- $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
- continue
+ func_fatal_error "\`-allow-undefined' must not be used because it is the default"
;;
-avoid-version)
@@ -1158,8 +3002,7 @@ EOF
-export-symbols | -export-symbols-regex)
if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: more than one -exported-symbols argument is not allowed"
- exit 1
+ func_fatal_error "more than one -exported-symbols argument is not allowed"
fi
if test "X$arg" = "X-export-symbols"; then
prev=expsyms
@@ -1169,29 +3012,38 @@ EOF
continue
;;
+ -framework)
+ prev=framework
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
# The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
# so, if we see these flags be careful not to treat them like -L
-L[A-Z][A-Z]*:*)
case $with_gcc/$host in
- no/*-*-irix*)
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
+ no/*-*-irix* | /*-*-irix*)
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
;;
esac
continue
;;
-L*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
+ func_stripname '-L' '' "$arg"
+ dir=$func_stripname_result
# We need an absolute path.
case $dir in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
- exit 1
- fi
+ test -z "$absdir" && \
+ func_fatal_error "cannot determine absolute directory name of \`$dir'"
dir="$absdir"
;;
esac
@@ -1204,10 +3056,15 @@ EOF
esac
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
case :$dllsearchpath: in
*":$dir:"*) ;;
*) dllsearchpath="$dllsearchpath:$dir";;
esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
+ esac
;;
esac
continue
@@ -1216,15 +3073,39 @@ EOF
-l*)
if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
case $host in
- *-*-cygwin* | *-*-pw32* | *-*-beos*)
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
# These systems don't actually have a C or math library (as such)
continue
;;
- *-*-mingw* | *-*-os2*)
+ *-*-os2*)
# These systems don't actually have a C library (as such)
test "X$arg" = "X-lc" && continue
;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ deplibs="$deplibs System.ltframework"
+ continue
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ test "X$arg" = "X-lc" && continue
+ ;;
esac
+ elif test "X$arg" = "X-lc_r"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
fi
deplibs="$deplibs $arg"
continue
@@ -1235,6 +3116,33 @@ EOF
continue
;;
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ # Darwin uses the -arch flag to determine output architecture.
+ -model|-arch|-isysroot)
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ prev=xcompiler
+ continue
+ ;;
+
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+ esac
+ continue
+ ;;
+
+ -multi_module)
+ single_module="${wl}-multi_module"
+ continue
+ ;;
+
-no-fast-install)
fast_install=no
continue
@@ -1245,8 +3153,8 @@ EOF
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
# The PATH hackery in wrapper scripts is required on Windows
# in order for the loader to find any dlls it needs.
- $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
- $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+ func_warning "\`-no-install' is ignored for $host"
+ func_warning "assuming \`-no-fast-install' instead"
fast_install=no
;;
*) no_install=yes ;;
@@ -1266,6 +3174,11 @@ EOF
-o) prev=output ;;
+ -precious-files-regex)
+ prev=precious_regex
+ continue
+ ;;
+
-release)
prev=release
continue
@@ -1282,13 +3195,13 @@ EOF
;;
-R*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
+ func_stripname '-R' '' "$arg"
+ dir=$func_stripname_result
# We need an absolute path.
case $dir in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit 1
+ func_fatal_error "only absolute run-paths are allowed"
;;
esac
case "$xrpath " in
@@ -1298,7 +3211,17 @@ EOF
continue
;;
- -static)
+ -shared)
+ # The effects of -shared are defined in a previous loop.
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -static | -static-libtool-libs)
# The effects of -static are defined in a previous loop.
# We used to do the same as -all-static on platforms that
# didn't have a PIC flag, but the assumption that the effects
@@ -1317,41 +3240,48 @@ EOF
continue
;;
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -weak)
+ prev=weak
+ continue
+ ;;
+
-Wc,*)
- args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
arg=
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=','
+ save_ifs="$IFS"; IFS=','
for flag in $args; do
IFS="$save_ifs"
- case $flag in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- flag="\"$flag\""
- ;;
- esac
- arg="$arg $wl$flag"
- compiler_flags="$compiler_flags $flag"
+ func_quote_for_eval "$flag"
+ arg="$arg $wl$func_quote_for_eval_result"
+ compiler_flags="$compiler_flags $func_quote_for_eval_result"
done
IFS="$save_ifs"
- arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
;;
-Wl,*)
- args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
+ func_stripname '-Wl,' '' "$arg"
+ args=$func_stripname_result
arg=
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=','
+ save_ifs="$IFS"; IFS=','
for flag in $args; do
IFS="$save_ifs"
- case $flag in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- flag="\"$flag\""
- ;;
- esac
- arg="$arg $wl$flag"
- compiler_flags="$compiler_flags $wl$flag"
- linker_flags="$linker_flags $flag"
+ func_quote_for_eval "$flag"
+ arg="$arg $wl$func_quote_for_eval_result"
+ compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+ linker_flags="$linker_flags $func_quote_for_eval_result"
done
IFS="$save_ifs"
- arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
;;
-Xcompiler)
@@ -1364,16 +3294,35 @@ EOF
continue
;;
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+ # -r[0-9][0-9]* specifies the processor on the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+ # +DA*, +DD* enable 64-bit mode on the HP compiler
+ # -q* pass through compiler args for the IBM compiler
+ # -m*, -t[45]*, -txscale* pass through architecture-specific
+ # compiler args for GCC
+ # -F/path gives path to uninstalled frameworks, gcc on darwin
+ # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+ # @file GCC response files
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ compiler_flags="$compiler_flags $arg"
+ continue
+ ;;
+
# Some other compiler flag.
-* | +*)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
;;
*.$objext)
@@ -1385,92 +3334,82 @@ EOF
# A libtool-controlled object.
# Check to see that this really is a libtool object.
- if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- pic_object=
- non_pic_object=
-
- # Read the .lo file
- # If there is no directory component, then add one.
- case $arg in
- */* | *\\*) . $arg ;;
- *) . ./$arg ;;
- esac
-
- if test -z "$pic_object" || \
- test -z "$non_pic_object" ||
- test "$pic_object" = none && \
- test "$non_pic_object" = none; then
- $echo "$modename: cannot find name of object for \`$arg'" 1>&2
- exit 1
- fi
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none &&
+ test "$non_pic_object" = none; then
+ func_fatal_error "cannot find name of object for \`$arg'"
+ fi
# Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
- if test "$pic_object" != none; then
- # Prepend the subdirectory the object is found in.
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
pic_object="$xdir$pic_object"
if test "$prev" = dlfiles; then
if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $pic_object"
- prev=
- continue
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
fi
fi
# CHECK ME: I think I busted this. -Ossama
- if test "$prev" = dlprefiles; then
+ if test "$prev" = dlprefiles; then
# Preload the old-style object.
dlprefiles="$dlprefiles $pic_object"
prev=
- fi
+ fi
- # A PIC object.
- libobjs="$libobjs $pic_object"
+ # A PIC object.
+ func_append libobjs " $pic_object"
arg="$pic_object"
- fi
+ fi
- # Non-PIC object.
- if test "$non_pic_object" != none; then
- # Prepend the subdirectory the object is found in.
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
non_pic_object="$xdir$non_pic_object"
- # A standard non-PIC object
- non_pic_objects="$non_pic_objects $non_pic_object"
- if test -z "$pic_object" || test "$pic_object" = none ; then
- arg="$non_pic_object"
- fi
- fi
- else
- # Only an error if not doing a dry-run.
- if test -z "$run"; then
- $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
- exit 1
- else
- # Dry-run case.
-
- # Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
fi
-
- pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
- non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
- libobjs="$libobjs $pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
- fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object="$pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool object"
+ fi
fi
;;
@@ -1502,113 +3441,51 @@ EOF
*)
# Unknown arguments in both finalize_command and compile_command need
# to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
;;
esac # arg
# Now actually substitute the argument into the commands.
if test -n "$arg"; then
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
fi
done # argument parsing loop
- if test -n "$prev"; then
- $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Infer tagged configuration to use if any are available and
- # if one wasn't chosen via the "--tag" command line option.
- # Only attempt this if the compiler in the base link
- # command doesn't match the default compiler.
- if test -n "$available_tags" && test -z "$tagname"; then
- case $base_compile in
- "$CC "*) ;;
- # Blanks in the command may have been stripped by the calling shell,
- # but not from the CC environment variable when ltconfig was run.
- "`$echo $CC` "*) ;;
- *)
- for z in $available_tags; do
- if grep "^### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
- # Evaluate the configuration.
- eval "`sed -n -e '/^### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
- case $base_compile in
- "$CC "*)
- # The compiler in $compile_command matches
- # the one in the tagged configuration.
- # Assume this is the tagged configuration we want.
- tagname=$z
- break
- ;;
- "`$echo $CC` "*)
- tagname=$z
- break
- ;;
- esac
- fi
- done
- # If $tagname still isn't set, then no tagged configuration
- # was found and let the user know that the "--tag" command
- # line option must be used.
- if test -z "$tagname"; then
- echo "$modename: unable to infer tagged configuration"
- echo "$modename: specify a tag with \`--tag'" 1>&2
- exit 1
-# else
-# echo "$modename: using $tagname tagged configuration"
- fi
- ;;
- esac
- fi
+ test -n "$prev" && \
+ func_fatal_help "the \`$prevarg' option requires an argument"
if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
eval arg=\"$export_dynamic_flag_spec\"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
fi
+ oldlibs=
# calculate the name of the file, without its directory
- outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+ func_basename "$output"
+ outputname="$func_basename_result"
libobjs_save="$libobjs"
if test -n "$shlibpath_var"; then
# get the directories listed in $shlibpath_var
- eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+ eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
else
shlib_search_path=
fi
eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
- output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$output_objdir" = "X$output"; then
- output_objdir="$objdir"
- else
- output_objdir="$output_objdir/$objdir"
- fi
+ func_dirname "$output" "/" ""
+ output_objdir="$func_dirname_result$objdir"
# Create the object directory.
- if test ! -d $output_objdir; then
- $show "$mkdir $output_objdir"
- $run $mkdir $output_objdir
- status=$?
- if test $status -ne 0 && test ! -d $output_objdir; then
- exit $status
- fi
- fi
+ func_mkdir_p "$output_objdir"
# Determine the type of output
case $output in
"")
- $echo "$modename: you must specify an output file" 1>&2
- $echo "$help" 1>&2
- exit 1
+ func_fatal_help "you must specify an output file"
;;
*.$libext) linkmode=oldlib ;;
*.lo | *.$objext) linkmode=obj ;;
@@ -1617,29 +3494,34 @@ EOF
esac
specialdeplibs=
+
libs=
# Find all interdependent deplibs by searching for libraries
# that are linked more than once (e.g. -la -lb -la)
for deplib in $deplibs; do
- case "$libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
+ if $opt_duplicate_deps ; then
+ case "$libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
libs="$libs $deplib"
done
- if test $linkmode = lib; then
+ if test "$linkmode" = lib; then
libs="$predeps $libs $compiler_lib_search_path $postdeps"
# Compute libraries that are listed more than once in $predeps
# $postdeps and mark them as special (i.e., whose duplicates are
# not to be eliminated).
pre_post_deps=
- for pre_post_dep in $predeps $postdeps; do
- case "$pre_post_deps " in
- *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
- esac
- pre_post_deps="$pre_post_deps $pre_post_dep"
- done
+ if $opt_duplicate_compiler_generated_deps; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+ esac
+ pre_post_deps="$pre_post_deps $pre_post_dep"
+ done
+ fi
pre_post_deps=
fi
@@ -1649,15 +3531,15 @@ EOF
need_relink=no # whether we're linking any uninstalled libtool libraries
notinst_deplibs= # not-installed libtool libraries
notinst_path= # paths that contain not-installed libtool libraries
+
case $linkmode in
lib)
- passes="conv link"
+ passes="conv dlpreopen link"
for file in $dlfiles $dlprefiles; do
case $file in
*.la) ;;
*)
- $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
- exit 1
+ func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
;;
esac
done
@@ -1673,40 +3555,98 @@ EOF
*) passes="conv"
;;
esac
+
for pass in $passes; do
- if test $linkmode = prog; then
- # Determine which files to process
+ # The preopen pass in lib mode reverses $deplibs; put it back here
+ # so that -L comes before libs that need it for instance...
+ if test "$linkmode,$pass" = "lib,link"; then
+ ## FIXME: Find the place where the list is rebuilt in the wrong
+ ## order, and fix it there properly
+ tmp_deplibs=
+ for deplib in $deplibs; do
+ tmp_deplibs="$deplib $tmp_deplibs"
+ done
+ deplibs="$tmp_deplibs"
+ fi
+
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan"; then
+ libs="$deplibs"
+ deplibs=
+ fi
+ if test "$linkmode" = prog; then
case $pass in
- dlopen)
- libs="$dlfiles"
- save_deplibs="$deplibs" # Collect dlpreopened libraries
- deplibs=
- ;;
+ dlopen) libs="$dlfiles" ;;
dlpreopen) libs="$dlprefiles" ;;
link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
esac
fi
+ if test "$linkmode,$pass" = "lib,dlpreopen"; then
+ # Collect and forward deplibs of preopened libtool libs
+ for lib in $dlprefiles; do
+ # Ignore non-libtool-libs
+ dependency_libs=
+ case $lib in
+ *.la) func_source "$lib" ;;
+ esac
+
+ # Collect preopened libtool deplibs, except any this library
+ # has declared as weak libs
+ for deplib in $dependency_libs; do
+ deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+ case " $weak_libs " in
+ *" $deplib_base "*) ;;
+ *) deplibs="$deplibs $deplib" ;;
+ esac
+ done
+ done
+ libs="$dlprefiles"
+ fi
+ if test "$pass" = dlopen; then
+ # Collect dlpreopened libraries
+ save_deplibs="$deplibs"
+ deplibs=
+ fi
+
for deplib in $libs; do
lib=
found=no
case $deplib in
- -l*)
- if test $linkmode = oldlib && test $linkmode = obj; then
- $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
- continue
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags $deplib"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+ esac
+ fi
fi
- if test $pass = conv; then
- deplibs="$deplib $deplibs"
+ continue
+ ;;
+ -l*)
+ if test "$linkmode" != lib && test "$linkmode" != prog; then
+ func_warning "\`-l' is ignored for archives/objects"
continue
fi
- name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+ func_stripname '-l' '' "$deplib"
+ name=$func_stripname_result
for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
- # Search the libtool library
- lib="$searchdir/lib${name}.la"
- if test -f "$lib"; then
- found=yes
- break
- fi
+ for search_ext in .la $std_shrext .so .a; do
+ # Search the libtool library
+ lib="$searchdir/lib${name}${search_ext}"
+ if test -f "$lib"; then
+ if test "$search_ext" = ".la"; then
+ found=yes
+ else
+ found=no
+ fi
+ break 2
+ fi
+ done
done
if test "$found" != yes; then
# deplib doesn't seem to be a libtool library
@@ -1715,41 +3655,91 @@ EOF
finalize_deplibs="$deplib $finalize_deplibs"
else
deplibs="$deplib $deplibs"
- test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
fi
continue
+ else # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if func_lalib_p "$lib"; then
+ library_names=
+ old_library=
+ func_source "$lib"
+ for l in $old_library $library_names; do
+ ll="$l"
+ done
+ if test "X$ll" = "X$old_library" ; then # only static version available
+ found=no
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
+ lib=$ladir/$old_library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
fi
;; # -l
+ *.ltframework)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
-L*)
case $linkmode in
lib)
deplibs="$deplib $deplibs"
- test $pass = conv && continue
+ test "$pass" = conv && continue
newdependency_libs="$deplib $newdependency_libs"
- newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
;;
prog)
- if test $pass = conv; then
+ if test "$pass" = conv; then
deplibs="$deplib $deplibs"
continue
fi
- if test $pass = scan; then
+ if test "$pass" = scan; then
deplibs="$deplib $deplibs"
- newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
else
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
fi
+ func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
;;
*)
- $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2
+ func_warning "\`-L' is ignored for archives/objects"
;;
esac # linkmode
continue
;; # -L
-R*)
- if test $pass = link; then
- dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+ if test "$pass" = link; then
+ func_stripname '-R' '' "$deplib"
+ dir=$func_stripname_result
# Make sure the xrpath contains only unique directories.
case "$xrpath " in
*" $dir "*) ;;
@@ -1761,28 +3751,51 @@ EOF
;;
*.la) lib="$deplib" ;;
*.$libext)
- if test $pass = conv; then
+ if test "$pass" = conv; then
deplibs="$deplib $deplibs"
continue
fi
case $linkmode in
lib)
- if test "$deplibs_check_method" != pass_all; then
- echo
- echo "*** Warning: This library needs some functionality provided by $deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
- else
- echo
- echo "*** Warning: Linking the shared library $output against the"
- echo "*** static library $deplib is not portable!"
- deplibs="$deplib $deplibs"
- fi
+ # Linking convenience modules into shared libraries is allowed,
+ # but linking other static libraries is non-portable.
+ case " $dlpreconveniencelibs " in
+ *" $deplib "*) ;;
+ *)
+ valid_a_lib=no
+ case $deplibs_check_method in
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ valid_a_lib=yes
+ fi
+ ;;
+ pass_all)
+ valid_a_lib=yes
+ ;;
+ esac
+ if test "$valid_a_lib" != yes; then
+ $ECHO
+ $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because the file extensions .$libext of this argument makes me believe"
+ $ECHO "*** that it is just a static archive that I should not use here."
+ else
+ $ECHO
+ $ECHO "*** Warning: Linking the shared library $output against the"
+ $ECHO "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ fi
+ ;;
+ esac
continue
;;
prog)
- if test $pass != link; then
+ if test "$pass" != link; then
deplibs="$deplib $deplibs"
else
compile_deplibs="$deplib $compile_deplibs"
@@ -1793,14 +3806,18 @@ EOF
esac # linkmode
;; # *.$libext
*.lo | *.$objext)
- if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
- # If there is no dlopen support or we're linking statically,
- # we need to preload.
- newdlprefiles="$newdlprefiles $deplib"
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- newdlfiles="$newdlfiles $deplib"
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ elif test "$linkmode" = prog; then
+ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ newdlprefiles="$newdlprefiles $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ newdlfiles="$newdlfiles $deplib"
+ fi
fi
continue
;;
@@ -1809,21 +3826,18 @@ EOF
continue
;;
esac # case $deplib
- if test $found = yes || test -f "$lib"; then :
+
+ if test "$found" = yes || test -f "$lib"; then :
else
- $echo "$modename: cannot find the library \`$lib'" 1>&2
- exit 1
+ func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
fi
# Check to see that this really is a libtool archive.
- if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit 1
- fi
+ func_lalib_unsafe_p "$lib" \
+ || func_fatal_error "\`$lib' is not a valid libtool archive"
- ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$ladir" = "X$lib" && ladir="."
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
dlname=
dlopen=
@@ -1831,70 +3845,90 @@ EOF
libdir=
library_names=
old_library=
+ inherited_linker_flags=
# If the library was installed with an old release of libtool,
- # it will not redefine variable installed.
+ # it will not redefine variables installed, or shouldnotlink
installed=yes
+ shouldnotlink=no
+ avoidtemprpath=
- # Read the .la file
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
+ # Read the .la file
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+ *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+ esac
+ done
+ fi
+ dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags $inherited_linker_flags"
+ fi
if test "$linkmode,$pass" = "lib,link" ||
test "$linkmode,$pass" = "prog,scan" ||
- { test $linkmode = oldlib && test $linkmode = obj; }; then
- # Add dl[pre]opened files of deplib
+ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
fi
- if test $pass = conv; then
+ if test "$pass" = conv; then
# Only check for convenience libraries
deplibs="$lib $deplibs"
if test -z "$libdir"; then
if test -z "$old_library"; then
- $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
- exit 1
+ func_fatal_error "cannot find name of link library for \`$lib'"
fi
# It is a libtool convenience library, so add in its objects.
convenience="$convenience $ladir/$objdir/$old_library"
old_convenience="$old_convenience $ladir/$objdir/$old_library"
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ func_fatal_error "\`$lib' is not a convenience library"
+ fi
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_duplicate_deps ; then
case "$tmp_libs " in
*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
esac
- tmp_libs="$tmp_libs $deplib"
- done
- elif test $linkmode != prog && test $linkmode != lib; then
- $echo "$modename: \`$lib' is not a convenience library" 1>&2
- exit 1
- fi
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
continue
fi # $pass = conv
+
# Get the name of the library we link against.
linklib=
for l in $old_library $library_names; do
linklib="$l"
done
if test -z "$linklib"; then
- $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
- exit 1
+ func_fatal_error "cannot find name of link library for \`$lib'"
fi
# This library was specified with -dlopen.
- if test $pass = dlopen; then
+ if test "$pass" = dlopen; then
if test -z "$libdir"; then
- $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
- exit 1
+ func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
fi
- if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ if test -z "$dlname" ||
+ test "$dlopen_support" != yes ||
+ test "$build_libtool_libs" = no; then
# If there is no dlname, no dlopen support or we're linking
- # statically, we need to preload.
- dlprefiles="$dlprefiles $lib"
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ dlprefiles="$dlprefiles $lib $dependency_libs"
else
newdlfiles="$newdlfiles $lib"
fi
@@ -1907,18 +3941,19 @@ EOF
*)
abs_ladir=`cd "$ladir" && pwd`
if test -z "$abs_ladir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
- $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+ func_warning "cannot determine absolute directory name of \`$ladir'"
+ func_warning "passing it literally to the linker, although it might fail"
abs_ladir="$ladir"
fi
;;
esac
- laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ func_basename "$lib"
+ laname="$func_basename_result"
# Find the relevant object directory and library name.
if test "X$installed" = Xyes; then
if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
- $echo "$modename: warning: library \`$lib' was moved." 1>&2
+ func_warning "library \`$lib' was moved."
dir="$ladir"
absdir="$abs_ladir"
libdir="$abs_ladir"
@@ -1926,24 +3961,36 @@ EOF
dir="$libdir"
absdir="$libdir"
fi
+ test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
else
- dir="$ladir/$objdir"
- absdir="$abs_ladir/$objdir"
- # Remove this search path later
- notinst_path="$notinst_path $abs_ladir"
+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ dir="$ladir"
+ absdir="$abs_ladir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ else
+ dir="$ladir/$objdir"
+ absdir="$abs_ladir/$objdir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ fi
fi # $installed = yes
- name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+ func_stripname 'lib' '.la' "$laname"
+ name=$func_stripname_result
# This library was specified with -dlpreopen.
- if test $pass = dlpreopen; then
- if test -z "$libdir"; then
- $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
- exit 1
+ if test "$pass" = dlpreopen; then
+ if test -z "$libdir" && test "$linkmode" = prog; then
+ func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
fi
# Prefer using a static library (so that no silly _DYNAMIC symbols
# are required to link).
if test -n "$old_library"; then
newdlprefiles="$newdlprefiles $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
# Otherwise, use the dlname, so that lt_dlopen finds it.
elif test -n "$dlname"; then
newdlprefiles="$newdlprefiles $dir/$dlname"
@@ -1954,18 +4001,19 @@ EOF
if test -z "$libdir"; then
# Link the convenience library
- if test $linkmode = lib; then
+ if test "$linkmode" = lib; then
deplibs="$dir/$old_library $deplibs"
elif test "$linkmode,$pass" = "prog,link"; then
compile_deplibs="$dir/$old_library $compile_deplibs"
finalize_deplibs="$dir/$old_library $finalize_deplibs"
else
- deplibs="$lib $deplibs"
+ deplibs="$lib $deplibs" # used for prog,scan pass
fi
continue
fi
- if test $linkmode = prog && test $pass != link; then
+
+ if test "$linkmode" = prog && test "$pass" != link; then
newlib_search_path="$newlib_search_path $ladir"
deplibs="$lib $deplibs"
@@ -1978,31 +4026,42 @@ EOF
tmp_libs=
for deplib in $dependency_libs; do
case $deplib in
- -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+ -L*) func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
+ ;;
esac
# Need to link against all dependency_libs?
- if test $linkalldeplibs = yes; then
+ if test "$linkalldeplibs" = yes; then
deplibs="$deplib $deplibs"
else
# Need to hardcode shared library paths
# or/and link against static libraries
newdependency_libs="$deplib $newdependency_libs"
fi
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
+ if $opt_duplicate_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
tmp_libs="$tmp_libs $deplib"
done # for deplib
continue
fi # $linkmode = prog...
- link_static=no # Whether the deplib will be linked statically
- if test -n "$library_names" &&
- { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
- # Link against this shared library
+ if test "$linkmode,$pass" = "prog,link"; then
+ if test -n "$library_names" &&
+ { { test "$prefer_static_libs" = no ||
+ test "$prefer_static_libs,$installed" = "built,yes"; } ||
+ test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+ # Make sure the rpath contains only unique directories.
+ case "$temp_rpath:" in
+ *"$absdir:"*) ;;
+ *) temp_rpath="$temp_rpath$absdir:" ;;
+ esac
+ fi
- if test "$linkmode,$pass" = "prog,link" ||
- { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
# Hardcode the library path.
# Skip directories that are in the system default run-time
# search path.
@@ -2024,17 +4083,6 @@ EOF
esac
;;
esac
- if test $linkmode = prog; then
- # We need to hardcode the library path
- if test -n "$shlibpath_var"; then
- # Make sure the rpath contains only unique directories.
- case "$temp_rpath " in
- *" $dir "*) ;;
- *" $absdir "*) ;;
- *) temp_rpath="$temp_rpath $dir" ;;
- esac
- fi
- fi
fi # $linkmode,$pass = prog,link...
if test "$alldeplibs" = yes &&
@@ -2044,25 +4092,87 @@ EOF
# We only need to search for static libraries
continue
fi
+ fi
- if test "$installed" = no; then
- notinst_deplibs="$notinst_deplibs $lib"
- need_relink=yes
+ link_static=no # Whether the deplib will be linked statically
+ use_static_libs=$prefer_static_libs
+ if test "$use_static_libs" = built && test "$installed" = yes; then
+ use_static_libs=no
+ fi
+ if test -n "$library_names" &&
+ { test "$use_static_libs" = no || test -z "$old_library"; }; then
+ case $host in
+ *cygwin* | *mingw*)
+ # No point in relinking DLLs because paths are not encoded
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=no
+ ;;
+ *)
+ if test "$installed" = no; then
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=yes
+ fi
+ ;;
+ esac
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some
+ # systems (darwin). Don't bleat about dlopened modules though!
+ dlopenmodule=""
+ for dlpremoduletest in $dlprefiles; do
+ if test "X$dlpremoduletest" = "X$lib"; then
+ dlopenmodule="$dlpremoduletest"
+ break
+ fi
+ done
+ if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+ $ECHO
+ if test "$linkmode" = prog; then
+ $ECHO "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $ECHO "*** $linklib is not portable!"
+ fi
+ if test "$linkmode" = lib &&
+ test "$hardcode_into_libs" = yes; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
fi
if test -n "$old_archive_from_expsyms_cmds"; then
# figure out the soname
set dummy $library_names
- realname="$2"
- shift; shift
- libname=`eval \\$echo \"$libname_spec\"`
+ shift
+ realname="$1"
+ shift
+ libname=`eval "\\$ECHO \"$libname_spec\""`
# use dlname if we got it. it's perfectly good, no?
if test -n "$dlname"; then
soname="$dlname"
elif test -n "$soname_spec"; then
# bleh windows
case $host in
- *cygwin*)
+ *cygwin* | mingw*)
major=`expr $current - $age`
versuffix="-$major"
;;
@@ -2074,41 +4184,29 @@ EOF
# Make a new name for the extract_expsyms_cmds to use
soroot="$soname"
- soname=`echo $soroot | sed -e 's/^.*\///'`
- newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a"
+ func_basename "$soroot"
+ soname="$func_basename_result"
+ func_stripname 'lib' '.dll' "$soname"
+ newlib=libimp-$func_stripname_result.a
# If the library has no export list, then create one now
if test -f "$output_objdir/$soname-def"; then :
else
- $show "extracting exported symbol list from \`$soname'"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- eval cmds=\"$extract_expsyms_cmds\"
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
+ func_echo "extracting exported symbol list from \`$soname'"
+ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
fi
# Create $newlib
if test -f "$output_objdir/$newlib"; then :; else
- $show "generating import library for \`$soname'"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- eval cmds=\"$old_archive_from_expsyms_cmds\"
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
+ func_echo "generating import library for \`$soname'"
+ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
fi
# make sure the library variables are pointing to the new library
dir=$output_objdir
linklib=$newlib
- fi # test -n $old_archive_from_expsyms_cmds
+ fi # test -n "$old_archive_from_expsyms_cmds"
- if test $linkmode = prog || test "$mode" != relink; then
+ if test "$linkmode" = prog || test "$mode" != relink; then
add_shlibpath=
add_dir=
add=
@@ -2117,6 +4215,30 @@ EOF
immediate | unsupported)
if test "$hardcode_direct" = no; then
add="$dir/$linklib"
+ case $host in
+ *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+ *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+ *-*-unixware7*) add_dir="-L$dir" ;;
+ *-*-darwin* )
+ # if the lib is a (non-dlopened) module then we can not
+ # link against it, someone is ignoring the earlier warnings
+ if /usr/bin/file -L $add 2> /dev/null |
+ $GREP ": [^:]* bundle" >/dev/null ; then
+ if test "X$dlopenmodule" != "X$lib"; then
+ $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+ if test -z "$old_library" ; then
+ $ECHO
+ $ECHO "*** And there doesn't seem to be a static archive available"
+ $ECHO "*** The link will probably fail, sorry"
+ else
+ add="$dir/$old_library"
+ fi
+ elif test -n "$old_library"; then
+ add="$dir/$old_library"
+ fi
+ fi
+ esac
elif test "$hardcode_minus_L" = no; then
case $host in
*-*-sunos*) add_shlibpath="$dir" ;;
@@ -2131,10 +4253,19 @@ EOF
fi
;;
relink)
- if test "$hardcode_direct" = yes; then
+ if test "$hardcode_direct" = yes &&
+ test "$hardcode_direct_absolute" = no; then
add="$dir/$linklib"
elif test "$hardcode_minus_L" = yes; then
add_dir="-L$dir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
add="-l$name"
elif test "$hardcode_shlibpath_var" = yes; then
add_shlibpath="$dir"
@@ -2147,8 +4278,7 @@ EOF
esac
if test "$lib_linked" != yes; then
- $echo "$modename: configuration error: unsupported hardcode properties"
- exit 1
+ func_fatal_configuration "unsupported hardcode properties"
fi
if test -n "$add_shlibpath"; then
@@ -2157,14 +4287,14 @@ EOF
*) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
esac
fi
- if test $linkmode = prog; then
+ if test "$linkmode" = prog; then
test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
test -n "$add" && compile_deplibs="$add $compile_deplibs"
else
test -n "$add_dir" && deplibs="$add_dir $deplibs"
test -n "$add" && deplibs="$add $deplibs"
- if test "$hardcode_direct" != yes && \
- test "$hardcode_minus_L" != yes && \
+ if test "$hardcode_direct" != yes &&
+ test "$hardcode_minus_L" != yes &&
test "$hardcode_shlibpath_var" = yes; then
case :$finalize_shlibpath: in
*":$libdir:"*) ;;
@@ -2174,12 +4304,13 @@ EOF
fi
fi
- if test $linkmode = prog || test "$mode" = relink; then
+ if test "$linkmode" = prog || test "$mode" = relink; then
add_shlibpath=
add_dir=
add=
# Finalize command for both is simple: just hardcode it.
- if test "$hardcode_direct" = yes; then
+ if test "$hardcode_direct" = yes &&
+ test "$hardcode_direct_absolute" = no; then
add="$libdir/$linklib"
elif test "$hardcode_minus_L" = yes; then
add_dir="-L$libdir"
@@ -2190,13 +4321,28 @@ EOF
*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
esac
add="-l$name"
+ elif test "$hardcode_automatic" = yes; then
+ if test -n "$inst_prefix_dir" &&
+ test -f "$inst_prefix_dir$libdir/$linklib" ; then
+ add="$inst_prefix_dir$libdir/$linklib"
+ else
+ add="$libdir/$linklib"
+ fi
else
# We cannot seem to hardcode it, guess we'll fake it.
add_dir="-L$libdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
add="-l$name"
fi
- if test $linkmode = prog; then
+ if test "$linkmode" = prog; then
test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
else
@@ -2204,16 +4350,7 @@ EOF
test -n "$add" && deplibs="$add $deplibs"
fi
fi
- elif test $linkmode = prog; then
- if test "$alldeplibs" = yes &&
- { test "$deplibs_check_method" = pass_all ||
- { test "$build_libtool_libs" = yes &&
- test -n "$library_names"; }; }; then
- # We only need to search for static libraries
- continue
- fi
-
- # Try to link the static library
+ elif test "$linkmode" = prog; then
# Here we assume that one of hardcode_direct or hardcode_minus_L
# is not unsupported. This is valid on all known static and
# shared platforms.
@@ -2233,45 +4370,46 @@ EOF
# Just print a warning and add the library to dependency_libs so
# that the program can be linked against the static library.
- echo
- echo "*** Warning: This library needs some functionality provided by $lib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
+ $ECHO
+ $ECHO "*** Warning: This system can not link to static lib archive $lib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have."
if test "$module" = yes; then
- echo "*** Therefore, libtool will create a static module, that should work "
- echo "*** as long as the dlopening application is linked with the -dlopen flag."
+ $ECHO "*** But as you try to build a module library, libtool will still create "
+ $ECHO "*** a static module, that should work as long as the dlopening application"
+ $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
if test -z "$global_symbol_pipe"; then
- echo
- echo "*** However, this would only work if libtool was able to extract symbol"
- echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- echo "*** not find such a program. So, this module is probably useless."
- echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ $ECHO
+ $ECHO "*** However, this would only work if libtool was able to extract symbol"
+ $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $ECHO "*** not find such a program. So, this module is probably useless."
+ $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
fi
if test "$build_old_libs" = no; then
- build_libtool_libs=module
- build_old_libs=yes
+ build_libtool_libs=module
+ build_old_libs=yes
else
- build_libtool_libs=no
+ build_libtool_libs=no
fi
fi
else
- convenience="$convenience $dir/$old_library"
- old_convenience="$old_convenience $dir/$old_library"
deplibs="$dir/$old_library $deplibs"
link_static=yes
fi
fi # link shared/static library?
- if test $linkmode = lib; then
+ if test "$linkmode" = lib; then
if test -n "$dependency_libs" &&
- { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
- test $link_static = yes; }; then
+ { test "$hardcode_into_libs" != yes ||
+ test "$build_old_libs" = yes ||
+ test "$link_static" = yes; }; then
# Extract -R from dependency_libs
temp_deplibs=
for libdir in $dependency_libs; do
case $libdir in
- -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+ -R*) func_stripname '-R' '' "$libdir"
+ temp_xrpath=$func_stripname_result
case " $xrpath " in
*" $temp_xrpath "*) ;;
*) xrpath="$xrpath $temp_xrpath";;
@@ -2289,46 +4427,70 @@ EOF
tmp_libs=
for deplib in $dependency_libs; do
newdependency_libs="$deplib $newdependency_libs"
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
+ if $opt_duplicate_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
tmp_libs="$tmp_libs $deplib"
done
- if test $link_all_deplibs != no; then
+ if test "$link_all_deplibs" != no; then
# Add the search paths of all dependency libraries
for deplib in $dependency_libs; do
case $deplib in
-L*) path="$deplib" ;;
*.la)
- dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$deplib" && dir="."
+ func_dirname "$deplib" "" "."
+ dir="$func_dirname_result"
# We need an absolute path.
case $dir in
[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
*)
absdir=`cd "$dir" && pwd`
if test -z "$absdir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+ func_warning "cannot determine absolute directory name of \`$dir'"
absdir="$dir"
fi
;;
esac
- if grep "^installed=no" $deplib > /dev/null; then
+ if $GREP "^installed=no" $deplib > /dev/null; then
+ case $host in
+ *-*-darwin*)
+ depdepl=
+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names" ; then
+ for tmp in $deplibrary_names ; do
+ depdepl=$tmp
+ done
+ if test -f "$absdir/$objdir/$depdepl" ; then
+ depdepl="$absdir/$objdir/$depdepl"
+ darwin_install_name=`otool -L $depdepl | $SED -n -e '3q;2,2p' | $SED -e 's/(.*//'`
+ darwin_install_name=`$ECHO $darwin_install_name`
+ if test -z "$darwin_install_name"; then
+ darwin_install_name=`otool64 -L $depdepl | $SED -n -e '3q;2,2p' | $SED -e 's/(.*//'`
+ darwin_install_name=`$ECHO $darwin_install_name`
+ fi
+ compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+ linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+ path=
+ fi
+ fi
+ ;;
+ *)
path="-L$absdir/$objdir"
+ ;;
+ esac
else
- eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- if test -z "$libdir"; then
- $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
- exit 1
- fi
- if test "$absdir" != "$libdir"; then
- $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
- fi
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ test "$absdir" != "$libdir" && \
+ func_warning "\`$deplib' seems to be moved"
+
path="-L$absdir"
fi
;;
- *) continue ;;
esac
case " $deplibs " in
*" $path "*) ;;
@@ -2338,15 +4500,15 @@ EOF
fi # link_all_deplibs != no
fi # linkmode = lib
done # for deplib in $libs
- if test $pass = dlpreopen; then
+ dependency_libs="$newdependency_libs"
+ if test "$pass" = dlpreopen; then
# Link the dlpreopened libraries before other libraries
for deplib in $save_deplibs; do
deplibs="$deplib $deplibs"
done
fi
- if test $pass != dlopen; then
- test $pass != scan && dependency_libs="$newdependency_libs"
- if test $pass != conv; then
+ if test "$pass" != dlopen; then
+ if test "$pass" != conv; then
# Make sure lib_search_path contains only unique directories.
lib_search_path=
for dir in $newlib_search_path; do
@@ -2368,9 +4530,30 @@ EOF
eval tmp_libs=\"\$$var\"
new_libs=
for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
case $deplib in
-L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
*)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
case " $specialdeplibs " in
*" $deplib "*) new_libs="$deplib $new_libs" ;;
*)
@@ -2398,42 +4581,52 @@ EOF
eval $var=\"$tmp_libs\"
done # for var
fi
- if test "$pass" = "conv" &&
- { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then
- libs="$deplibs" # reset libs
- deplibs=
- fi
+ # Last step: remove runtime libs from dependency_libs
+ # (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs ; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=""
+ ;;
+ esac
+ if test -n "$i" ; then
+ tmp_libs="$tmp_libs $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
done # for pass
- if test $linkmode = prog; then
+ if test "$linkmode" = prog; then
dlfiles="$newdlfiles"
+ fi
+ if test "$linkmode" = prog || test "$linkmode" = lib; then
dlprefiles="$newdlprefiles"
fi
case $linkmode in
oldlib)
if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
+ func_warning "\`-dlopen' is ignored for archives"
fi
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
- fi
+ test -n "$deplibs" && \
+ func_warning "\`-l' and \`-L' are ignored for archives"
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
- fi
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
- fi
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for archives"
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
- fi
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for archives"
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
- fi
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for archives"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for archives"
+
+ test -n "$export_symbols$export_symbols_regex" && \
+ func_warning "\`-export-symbols' is ignored for archives"
# Now set the variables for building old libraries.
build_libtool_libs=no
@@ -2445,115 +4638,146 @@ EOF
# Make sure we only generate libraries of the form `libNAME.la'.
case $outputname in
lib*)
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+ func_stripname 'lib' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
eval libname=\"$libname_spec\"
;;
*)
- if test "$module" = no; then
- $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
+ test "$module" = no && \
+ func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
if test "$need_lib_prefix" != no; then
# Add the "lib" prefix for modules if required
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ func_stripname '' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
eval libname=\"$libname_spec\"
else
- libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ func_stripname '' '.la' "$outputname"
+ libname=$func_stripname_result
fi
;;
esac
if test -n "$objs"; then
if test "$deplibs_check_method" != pass_all; then
- $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
- exit 1
+ func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
else
- echo
- echo "*** Warning: Linking the shared library $output against the non-libtool"
- echo "*** objects $objs is not portable!"
+ $ECHO
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ $ECHO "*** objects $objs is not portable!"
libobjs="$libobjs $objs"
fi
fi
- if test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
- fi
+ test "$dlself" != no && \
+ func_warning "\`-dlopen self' is ignored for libtool libraries"
set dummy $rpath
- if test $# -gt 2; then
- $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
- fi
- install_libdir="$2"
+ shift
+ test "$#" -gt 1 && \
+ func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+ install_libdir="$1"
oldlibs=
if test -z "$rpath"; then
if test "$build_libtool_libs" = yes; then
# Building a libtool convenience library.
# Some compilers have problems with a `.al' extension so
- # convenience libraries should have the same extension an
- # archive normally would.
+ # convenience libraries should have the same extension an
+ # archive normally would.
oldlibs="$output_objdir/$libname.$libext $oldlibs"
build_libtool_libs=convenience
build_old_libs=yes
fi
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
- fi
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
- fi
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for convenience libraries"
else
# Parse the version information argument.
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=':'
+ save_ifs="$IFS"; IFS=':'
set dummy $vinfo 0 0 0
+ shift
IFS="$save_ifs"
- if test -n "$8"; then
- $echo "$modename: too many parameters to \`-version-info'" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- current="$2"
- revision="$3"
- age="$4"
+ test -n "$7" && \
+ func_fatal_help "too many parameters to \`-version-info'"
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major="$1"
+ number_minor="$2"
+ number_revision="$3"
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # which has an extra 1 added just for fun
+ #
+ case $version_type in
+ darwin|linux|osf|windows|none)
+ current=`expr $number_major + $number_minor`
+ age="$number_minor"
+ revision="$number_revision"
+ ;;
+ freebsd-aout|freebsd-elf|sunos)
+ current="$number_major"
+ revision="$number_minor"
+ age="0"
+ ;;
+ irix|nonstopux)
+ current=`expr $number_major + $number_minor - 1`
+ age="$number_minor"
+ revision="$number_minor"
+ ;;
+ esac
+ ;;
+ no)
+ current="$1"
+ revision="$2"
+ age="$3"
+ ;;
+ esac
# Check that each of the things are valid numbers.
case $current in
- 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
*)
- $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
+ func_error "CURRENT \`$current' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
;;
esac
case $revision in
- 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
*)
- $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
+ func_error "REVISION \`$revision' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
;;
esac
case $age in
- 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
*)
- $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
+ func_error "AGE \`$age' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
;;
esac
- if test $age -gt $current; then
- $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
+ if test "$age" -gt "$current"; then
+ func_error "AGE \`$age' is greater than the current interface number \`$current'"
+ func_fatal_error "\`$vinfo' is not valid version information"
fi
# Calculate the version variables.
@@ -2580,19 +4804,24 @@ EOF
freebsd-elf)
major=".$current"
- versuffix=".$current";
+ versuffix=".$current"
;;
- irix)
+ irix | nonstopux)
major=`expr $current - $age + 1`
- verstring="sgi$major.$revision"
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring="$verstring_prefix$major.$revision"
# Add in all the interfaces that we are compatible with.
loop=$revision
- while test $loop != 0; do
+ while test "$loop" -ne 0; do
iface=`expr $revision - $loop`
loop=`expr $loop - 1`
- verstring="sgi$major.$iface:$verstring"
+ verstring="$verstring_prefix$major.$iface:$verstring"
done
# Before this point, $major must not contain `.'.
@@ -2606,13 +4835,13 @@ EOF
;;
osf)
- major=`expr $current - $age`
+ major=.`expr $current - $age`
versuffix=".$current.$age.$revision"
verstring="$current.$age.$revision"
# Add in all the interfaces that we are compatible with.
loop=$age
- while test $loop != 0; do
+ while test "$loop" -ne 0; do
iface=`expr $current - $loop`
loop=`expr $loop - 1`
verstring="$verstring:${iface}.0"
@@ -2622,6 +4851,11 @@ EOF
verstring="$verstring:${current}.0"
;;
+ qnx)
+ major=".$current"
+ versuffix=".$current"
+ ;;
+
sunos)
major=".$current"
versuffix=".$current.$revision"
@@ -2635,16 +4869,23 @@ EOF
;;
*)
- $echo "$modename: unknown library version type \`$version_type'" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
+ func_fatal_configuration "unknown library version type \`$version_type'"
;;
esac
# Clear the version info if we defaulted, and they specified a release.
if test -z "$vinfo" && test -n "$release"; then
major=
- verstring="0.0"
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring="0.0"
+ ;;
+ esac
if test "$need_version" = no; then
versuffix=
else
@@ -2662,7 +4903,7 @@ EOF
# Check to see if the archive will have undefined symbols.
if test "$allow_undefined" = yes; then
if test "$allow_undefined_flag" = unsupported; then
- $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
+ func_warning "undefined symbols not allowed in $host shared libraries"
build_libtool_libs=no
build_old_libs=yes
fi
@@ -2670,27 +4911,36 @@ EOF
# Don't allow undefined symbols.
allow_undefined_flag="$no_undefined_flag"
fi
+
fi
+ func_generate_dlsyms "$libname" "$libname" "yes"
+ libobjs="$libobjs $symfileobj"
+ test "X$libobjs" = "X " && libobjs=
+
if test "$mode" != relink; then
# Remove our outputs, but don't remove object files since they
- # may have been created when compiling PIC objects.
- removelist=
- tempremovelist=`echo "$output_objdir/*"`
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$ECHO "$output_objdir/*"`
for p in $tempremovelist; do
- case $p in
- *.$objext)
- ;;
- $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
- removelist="$removelist $p"
- ;;
- *) ;;
- esac
- done
- if test -n "$removelist"; then
- $show "${rm}r $removelist"
- $run ${rm}r $removelist
- fi
+ case $p in
+ *.$objext)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+ if test "X$precious_files_regex" != "X"; then
+ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ then
+ continue
+ fi
+ fi
+ removelist="$removelist $p"
+ ;;
+ *) ;;
+ esac
+ done
+ test -n "$removelist" && \
+ func_show_eval "${RM}r \$removelist"
fi
# Now set the variables for building old libraries.
@@ -2698,15 +4948,15 @@ EOF
oldlibs="$oldlibs $output_objdir/$libname.$libext"
# Transform .lo files to .o files.
- oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+ oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
fi
# Eliminate all temporary directories.
- for path in $notinst_path; do
- lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'`
- deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'`
- dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'`
- done
+ #for path in $notinst_path; do
+ # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
+ # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
+ # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+ #done
if test -n "$xrpath"; then
# If the user specified any rpath flags, then add them.
@@ -2718,7 +4968,7 @@ EOF
*) finalize_rpath="$finalize_rpath $libdir" ;;
esac
done
- if test $hardcode_into_libs != yes || test $build_old_libs = yes; then
+ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
dependency_libs="$temp_xrpath $dependency_libs"
fi
fi
@@ -2751,14 +5001,23 @@ EOF
;;
*-*-rhapsody* | *-*-darwin1.[012])
# Rhapsody C library is in the System framework
- deplibs="$deplibs -framework System"
+ deplibs="$deplibs System.ltframework"
;;
*-*-netbsd*)
# Don't link with libc until the a.out ld.so is fixed.
;;
- *)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ ;;
+ *)
# Add libc to deplibs on all other systems if necessary.
- if test $build_libtool_need_lc = "yes"; then
+ if test "$build_libtool_need_lc" = "yes"; then
deplibs="$deplibs -lc"
fi
;;
@@ -2785,7 +5044,7 @@ EOF
# This might be a little naive. We might want to check
# whether the library exists or not. But this is on
# osf3 & osf4 and I'm not really sure... Just
- # implementing what was already the behaviour.
+ # implementing what was already the behavior.
newdeplibs=$deplibs
;;
test_compile)
@@ -2793,69 +5052,90 @@ EOF
# limits. Maybe even breaks it. We compile a program, linking it
# against the deplibs as a proxy for the library. Then we can check
# whether they linked in statically or dynamically with ldd.
- $rm conftest.c
+ $opt_dry_run || $RM conftest.c
cat > conftest.c <<EOF
int main() { return 0; }
EOF
- $rm conftest
- $LTCC -o conftest conftest.c $deplibs
- if test $? -eq 0 ; then
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
ldd_output=`ldd conftest`
for i in $deplibs; do
- name="`expr $i : '-l\(.*\)'`"
+ name=`expr $i : '-l\(.*\)'`
# If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $i."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
+ if test "$name" != "" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which I believe you do not have"
+ $ECHO "*** because a test_compile did reveal that the linker did not use it for"
+ $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
fi
else
newdeplibs="$newdeplibs $i"
fi
done
else
- # Error occured in the first compile. Let's try to salvage the situation:
- # Compile a seperate program for each library.
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
for i in $deplibs; do
- name="`expr $i : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
- $rm conftest
- $LTCC -o conftest conftest.c $i
- # Did it work?
- if test $? -eq 0 ; then
+ name=`expr $i : '-l\(.*\)'`
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" != "0"; then
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
ldd_output=`ldd conftest`
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $i."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because a test_compile did reveal that the linker did not use this one"
+ $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
fi
else
droppeddeps=yes
- echo
- echo "*** Warning! Library $i is needed by this library but I was not able to"
- echo "*** make it link in! You will probably need to install it or some"
- echo "*** library that it depends on before this library will be fully"
- echo "*** functional. Installing it before continuing would be even better."
+ $ECHO
+ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
+ $ECHO "*** make it link in! You will probably need to install it or some"
+ $ECHO "*** library that it depends on before this library will be fully"
+ $ECHO "*** functional. Installing it before continuing would be even better."
fi
else
newdeplibs="$newdeplibs $i"
@@ -2864,19 +5144,28 @@ EOF
fi
;;
file_magic*)
- set dummy $deplibs_check_method
- file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ set dummy $deplibs_check_method; shift
+ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
for a_deplib in $deplibs; do
- name="`expr $a_deplib : '-l\(.*\)'`"
+ name=`expr $a_deplib : '-l\(.*\)'`
# If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
- libname=`eval \\$echo \"$libname_spec\"`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
+ if test "$name" != "" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
# Follow soft links.
- if ls -lLd "$potent_lib" 2>/dev/null \
- | grep " -> " >/dev/null; then
+ if ls -lLd "$potent_lib" 2>/dev/null |
+ $GREP " -> " >/dev/null; then
continue
fi
# The statement above tries to avoid entering an
@@ -2886,28 +5175,36 @@ EOF
# but so what?
potlib="$potent_lib"
while test -h "$potlib" 2>/dev/null; do
- potliblink=`ls -ld $potlib | sed 's/.* -> //'`
+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
case $potliblink in
[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
- *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+ *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
esac
done
- if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
- | sed 10q \
- | egrep "$file_magic_regex" > /dev/null; then
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ $SED -e 10q |
+ $EGREP "$file_magic_regex" > /dev/null; then
newdeplibs="$newdeplibs $a_deplib"
a_deplib=""
break 2
fi
- done
- done
+ done
+ done
+ fi
if test -n "$a_deplib" ; then
droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $a_deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
+ $ECHO
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a file magic. Last file checked: $potlib"
+ fi
fi
else
# Add a -L argument.
@@ -2916,32 +5213,49 @@ EOF
done # Gone through all deplibs.
;;
match_pattern*)
- set dummy $deplibs_check_method
- match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
for a_deplib in $deplibs; do
- name="`expr $a_deplib : '-l\(.*\)'`"
+ name=`expr $a_deplib : '-l\(.*\)'`
# If $name is empty we are operating on a -L argument.
if test -n "$name" && test "$name" != "0"; then
- libname=`eval \\$echo \"$libname_spec\"`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- if eval echo \"$potent_lib\" 2>/dev/null \
- | sed 10q \
- | egrep "$match_pattern_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- break 2
- fi
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib="$potent_lib" # see symlink-check above in file_magic test
+ if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+ $EGREP "$match_pattern_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
done
- done
+ fi
if test -n "$a_deplib" ; then
droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $a_deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
+ $ECHO
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a regex pattern. Last file checked: $potlib"
+ fi
fi
else
# Add a -L argument.
@@ -2951,16 +5265,23 @@ EOF
;;
none | unknown | *)
newdeplibs=""
- if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
- -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' |
- grep . >/dev/null; then
- echo
+ tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
+ -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ for i in $predeps $postdeps ; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+ done
+ fi
+ if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' |
+ $GREP . >/dev/null; then
+ $ECHO
if test "X$deplibs_check_method" = "Xnone"; then
- echo "*** Warning: inter-library dependencies are not supported in this platform."
+ $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
else
- echo "*** Warning: inter-library dependencies are not known to be supported."
+ $ECHO "*** Warning: inter-library dependencies are not known to be supported."
fi
- echo "*** All declared inter-library dependencies are being dropped."
+ $ECHO "*** All declared inter-library dependencies are being dropped."
droppeddeps=yes
fi
;;
@@ -2973,24 +5294,24 @@ EOF
case $host in
*-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library is the System framework
- newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ # On Rhapsody replace the C library with the System framework
+ newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
;;
esac
if test "$droppeddeps" = yes; then
if test "$module" = yes; then
- echo
- echo "*** Warning: libtool could not satisfy all declared inter-library"
- echo "*** dependencies of module $libname. Therefore, libtool will create"
- echo "*** a static module, that should work as long as the dlopening"
- echo "*** application is linked with the -dlopen flag."
+ $ECHO
+ $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+ $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
+ $ECHO "*** a static module, that should work as long as the dlopening"
+ $ECHO "*** application is linked with the -dlopen flag."
if test -z "$global_symbol_pipe"; then
- echo
- echo "*** However, this would only work if libtool was able to extract symbol"
- echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- echo "*** not find such a program. So, this module is probably useless."
- echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ $ECHO
+ $ECHO "*** However, this would only work if libtool was able to extract symbol"
+ $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $ECHO "*** not find such a program. So, this module is probably useless."
+ $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
fi
if test "$build_old_libs" = no; then
oldlibs="$output_objdir/$libname.$libext"
@@ -3000,16 +5321,16 @@ EOF
build_libtool_libs=no
fi
else
- echo "*** The inter-library dependencies that have been dropped here will be"
- echo "*** automatically added whenever a program is linked with this library"
- echo "*** or is declared to -dlopen it."
-
- if test $allow_undefined = no; then
- echo
- echo "*** Since this library must not contain undefined symbols,"
- echo "*** because either the platform does not support them or"
- echo "*** it was explicitly requested with -no-undefined,"
- echo "*** libtool will only create a static version of it."
+ $ECHO "*** The inter-library dependencies that have been dropped here will be"
+ $ECHO "*** automatically added whenever a program is linked with this library"
+ $ECHO "*** or is declared to -dlopen it."
+
+ if test "$allow_undefined" = no; then
+ $ECHO
+ $ECHO "*** Since this library must not contain undefined symbols,"
+ $ECHO "*** because either the platform does not support them or"
+ $ECHO "*** it was explicitly requested with -no-undefined,"
+ $ECHO "*** libtool will only create a static version of it."
if test "$build_old_libs" = no; then
oldlibs="$output_objdir/$libname.$libext"
build_libtool_libs=module
@@ -3023,6 +5344,41 @@ EOF
# Done checking deplibs!
deplibs=$newdeplibs
fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ case $host in
+ *-*-darwin*)
+ newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $deplibs " in
+ *" -L$path/$objdir "*)
+ new_libs="$new_libs -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ done
+ deplibs="$new_libs"
# All the library-specific variables (install_libdir is set above).
library_names=
@@ -3031,7 +5387,7 @@ EOF
# Test again, we may have decided not to build it any more
if test "$build_libtool_libs" = yes; then
- if test $hardcode_into_libs = yes; then
+ if test "$hardcode_into_libs" = yes; then
# Hardcode the library paths
hardcode_libdirs=
dep_rpath=
@@ -3067,7 +5423,11 @@ EOF
if test -n "$hardcode_libdir_separator" &&
test -n "$hardcode_libdirs"; then
libdir="$hardcode_libdirs"
- eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+ else
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
fi
if test -n "$runpath_var" && test -n "$perm_rpath"; then
# We should set the runpath_var.
@@ -3087,109 +5447,142 @@ EOF
fi
# Get the real and link names of the library.
+ eval shared_ext=\"$shrext_cmds\"
eval library_names=\"$library_names_spec\"
set dummy $library_names
- realname="$2"
- shift; shift
+ shift
+ realname="$1"
+ shift
if test -n "$soname_spec"; then
eval soname=\"$soname_spec\"
else
soname="$realname"
fi
- test -z "$dlname" && dlname=$soname
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
lib="$output_objdir/$realname"
+ linknames=
for link
do
linknames="$linknames $link"
done
-# # Ensure that we have .o objects for linkers which dislike .lo
-# # (e.g. aix) in case we are running --disable-static
-# for obj in $libobjs; do
-# xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
-# if test "X$xdir" = "X$obj"; then
-# xdir="."
-# else
-# xdir="$xdir"
-# fi
-# baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
-# oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
-# if test ! -f $xdir/$oldobj && test "$baseobj" != "$oldobj"; then
-# $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
-# $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
-# fi
-# done
-
# Use standard objects if they are pic
- test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ test "X$libobjs" = "X " && libobjs=
+
+ delfiles=
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ export_symbols="$output_objdir/$libname.uexp"
+ delfiles="$delfiles $export_symbols"
+ fi
+
+ orig_export_symbols=
+ case $host_os in
+ cygwin* | mingw*)
+ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ # exporting using user supplied symfile
+ if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+ # and it's NOT already a .def file. Must figure out
+ # which of the given symbols are data symbols and tag
+ # them as such. So, trigger use of export_symbols_cmds.
+ # export_symbols gets reassigned inside the "prepare
+ # the list of exported symbols" if statement, so the
+ # include_expsyms logic still works.
+ orig_export_symbols="$export_symbols"
+ export_symbols=
+ always_export_symbols=yes
+ fi
+ fi
+ ;;
+ esac
# Prepare the list of exported symbols
if test -z "$export_symbols"; then
if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
- $show "generating symbol list for \`$libname.la'"
+ func_echo "generating symbol list for \`$libname.la'"
export_symbols="$output_objdir/$libname.exp"
- $run $rm $export_symbols
- eval cmds=\"$export_symbols_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ $opt_dry_run || $RM $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
+ eval cmd=\"$cmd\"
+ if len=`expr "X$cmd" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ func_show_eval "$cmd" 'exit $?'
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ func_echo "using reloadable object file for export list..."
+ skipped_export=:
+ # Break out early, otherwise skipped_export may be
+ # set to false by a later but shorter cmd.
+ break
+ fi
done
IFS="$save_ifs"
- if test -n "$export_symbols_regex"; then
- $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
- $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
- $show "$mv \"${export_symbols}T\" \"$export_symbols\""
- $run eval '$mv "${export_symbols}T" "$export_symbols"'
+ if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
fi
fi
fi
if test -n "$export_symbols" && test -n "$include_expsyms"; then
- $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_echo "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
fi
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ tmp_deplibs="$tmp_deplibs $test_deplib"
+ ;;
+ esac
+ done
+ deplibs="$tmp_deplibs"
+
if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec" &&
+ test "$compiler_needs_object" = yes &&
+ test -z "$libobjs"; then
+ # extract the archives, so we have objects to list.
+ # TODO: could optimize this to just extract one archive.
+ whole_archive_flag_spec=
+ fi
if test -n "$whole_archive_flag_spec"; then
save_libobjs=$libobjs
eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
else
gentop="$output_objdir/${outputname}x"
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "$mkdir $gentop"
- $run $mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
generated="$generated $gentop"
- for xlib in $convenience; do
- # Extract the objects.
- case $xlib in
- [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- *) xabs=`pwd`"/$xlib" ;;
- esac
- xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- xdir="$gentop/$xlib"
-
- $show "${rm}r $xdir"
- $run ${rm}r "$xdir"
- $show "$mkdir $xdir"
- $run $mkdir "$xdir"
- status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
- exit $status
- fi
- $show "(cd $xdir && $AR x $xabs)"
- $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
- libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
- done
+ func_extract_archives $gentop $convenience
+ libobjs="$libobjs $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
fi
fi
@@ -3200,21 +5593,36 @@ EOF
# Make a backup of the uninstalled library when relinking
if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
fi
# Do each of the archive commands.
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- eval cmds=\"$archive_expsym_cmds\"
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval test_cmds=\"$module_expsym_cmds\"
+ cmds=$module_expsym_cmds
+ else
+ eval test_cmds=\"$module_cmds\"
+ cmds=$module_cmds
+ fi
else
- eval cmds=\"$archive_cmds\"
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
+ fi
fi
- if len=`expr "X$cmds" : ".*"` &&
- test $len -le $max_cmd_len; then
- :
- else
- # The command line is too long to link in one step, link piecewise.
- $echo "creating reloadable object files..."
+
+ if test "X$skipped_export" != "X:" &&
+ len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise
+ # or, if using GNU ld and skipped_export is not :, use a linker
+ # script.
# Save the value of $output and $libobjs because we want to
# use them later. If we have whole_archive_flag_spec, we
@@ -3227,109 +5635,238 @@ EOF
if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
save_libobjs=$libobjs
fi
- save_output=$output
+ save_output=$output
+ output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
# Clear the reloadable object creation command queue and
# initialize k to one.
- test_cmds=
- concat_cmds=
- objlist=
- delfiles=
- last_robj=
- k=1
- output=$output_objdir/$save_output-${k}.$objext
- # Loop over the list of objects to be linked.
- for obj in $save_libobjs
- do
- eval test_cmds=\"$reload_cmds $objlist $last_robj\"
- if test "X$objlist" = X ||
- { len=`expr "X$test_cmds" : ".*"` &&
- test $len -le $max_cmd_len; }; then
- objlist="$objlist $obj"
- else
- # The command $test_cmds is almost too long, add a
- # command to the queue.
- if test $k -eq 1 ; then
- # The first file doesn't have a previous command to add.
- eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
- else
- # All subsequent reloadable object files will link in
- # the last one created.
- eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
- fi
- last_robj=$output_objdir/$save_output-${k}.$objext
- k=`expr $k + 1`
- output=$output_objdir/$save_output-${k}.$objext
- objlist=$obj
- len=1
- fi
- done
- # Handle the remaining objects by creating one last
- # reloadable object file. All subsequent reloadable object
- # files will link in the last one created.
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
-
- # Set up a command to remove the reloadale object files
- # after they are used.
- i=0
- while test $i -lt $k
- do
- i=`expr $i + 1`
- delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
- done
-
- $echo "creating a temporary reloadable object file: $output"
-
- # Loop through the commands generated above and execute them.
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $concat_cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- libobjs=$output
+ test_cmds=
+ concat_cmds=
+ objlist=
+ last_robj=
+ k=1
+
+ if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+ output=${output_objdir}/${output_la}.lnkscript
+ func_echo "creating GNU ld script: $output"
+ $ECHO 'INPUT (' > $output
+ for obj in $save_libobjs
+ do
+ $ECHO "$obj" >> $output
+ done
+ $ECHO ')' >> $output
+ delfiles="$delfiles $output"
+ elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+ output=${output_objdir}/${output_la}.lnk
+ func_echo "creating linker input file list: $output"
+ : > $output
+ set x $save_libobjs
+ shift
+ firstobj=
+ if test "$compiler_needs_object" = yes; then
+ firstobj="$1 "
+ shift
+ fi
+ for obj
+ do
+ $ECHO "$obj" >> $output
+ done
+ delfiles="$delfiles $output"
+ output=$firstobj\"$file_list_spec$output\"
+ else
+ if test -n "$save_libobjs"; then
+ func_echo "creating reloadable object files..."
+ output=$output_objdir/$output_la-${k}.$objext
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+ if test "X$objlist" = X ||
+ { len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+ test "$len" -le "$max_cmd_len"; }; then
+ objlist="$objlist $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test "$k" -eq 1 ; then
+ # The first file doesn't have a previous command to add.
+ eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-${k}.$objext
+ k=`expr $k + 1`
+ output=$output_objdir/$output_la-${k}.$objext
+ objlist=$obj
+ len=1
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+
+ # Set up a command to remove the reloadable object files
+ # after they are used.
+ i=0
+ while test "$i" -lt "$k"
+ do
+ i=`expr $i + 1`
+ delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
+ done
+ else
+ output=
+ fi
+
+ if ${skipped_export-false}; then
+ func_echo "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $opt_dry_run || $RM $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+ fi
+
+ test -n "$save_libobjs" &&
+ func_echo "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS="$save_ifs"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS="$save_ifs"
+
+ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+
+ if ${skipped_export-false}; then
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_echo "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+ fi
+
+ libobjs=$output
# Restore the value of output.
- output=$save_output
+ output=$save_output
if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
fi
# Expand the library linking commands again to reset the
# value of $libobjs for piecewise linking.
# Do each of the archive commands.
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- eval cmds=\"$archive_expsym_cmds\"
- else
- eval cmds=\"$archive_cmds\"
- fi
-
- # Append the command to remove the reloadable object files
- # to the just-reset $cmds.
- eval cmds=\"\$cmds~$rm $delfiles\"
- fi
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ cmds=$module_expsym_cmds
+ else
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ cmds=$archive_expsym_cmds
+ else
+ cmds=$archive_cmds
+ fi
+ fi
+ fi
+
+ if test -n "$delfiles"; then
+ # Append the command to remove temporary files to $cmds.
+ eval cmds=\"\$cmds~\$RM $delfiles\"
+ fi
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ libobjs="$libobjs $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS="$save_ifs"
# Restore the uninstalled library and exit
if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
- exit 0
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+ if test -n "$convenience"; then
+ if test -z "$whole_archive_flag_spec"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+ fi
+
+ exit $EXIT_SUCCESS
fi
# Create links to the real library.
for linkname in $linknames; do
if test "$realname" != "$linkname"; then
- $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
- $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
+ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
fi
done
@@ -3342,38 +5879,33 @@ EOF
;;
obj)
- if test -n "$deplibs"; then
- $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
- fi
-
if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
+ func_warning "\`-dlopen' is ignored for objects"
fi
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
- fi
+ test -n "$deplibs" && \
+ func_warning "\`-l' and \`-L' are ignored for objects"
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
- fi
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for objects"
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
- fi
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for objects"
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
- fi
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for objects"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for objects"
case $output in
*.lo)
- if test -n "$objs$old_deplibs"; then
- $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
- exit 1
- fi
- libobj="$output"
- obj=`$echo "X$output" | $Xsed -e "$lo2o"`
+ test -n "$objs$old_deplibs" && \
+ func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+ libobj=$output
+ func_lo2o "$libobj"
+ obj=$func_lo2o_result
;;
*)
libobj=
@@ -3382,7 +5914,7 @@ EOF
esac
# Delete the old objects.
- $run $rm $obj $libobj
+ $opt_dry_run || $RM $obj $libobj
# Objects from convenience libraries. This assumes
# single-version convenience libraries. Whenever we create
@@ -3391,148 +5923,136 @@ EOF
reload_conv_objs=
gentop=
# reload_cmds runs $LD directly, so let us get rid of
- # -Wl from whole_archive_flag_spec
+ # -Wl from whole_archive_flag_spec and hope we can get by with
+ # turning comma into space..
wl=
if test -n "$convenience"; then
if test -n "$whole_archive_flag_spec"; then
- eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+ reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
else
gentop="$output_objdir/${obj}x"
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "$mkdir $gentop"
- $run $mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
generated="$generated $gentop"
- for xlib in $convenience; do
- # Extract the objects.
- case $xlib in
- [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- *) xabs=`pwd`"/$xlib" ;;
- esac
- xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- xdir="$gentop/$xlib"
-
- $show "${rm}r $xdir"
- $run ${rm}r "$xdir"
- $show "$mkdir $xdir"
- $run $mkdir "$xdir"
- status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
- exit $status
- fi
- $show "(cd $xdir && $AR x $xabs)"
- $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
- reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
- done
+ func_extract_archives $gentop $convenience
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
fi
fi
# Create the old-style object.
- reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+ reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
output="$obj"
- eval cmds=\"$reload_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
+ func_execute_cmds "$reload_cmds" 'exit $?'
# Exit if we aren't doing a library object file.
if test -z "$libobj"; then
if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
+ func_show_eval '${RM}r "$gentop"'
fi
- exit 0
+ exit $EXIT_SUCCESS
fi
if test "$build_libtool_libs" != yes; then
if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
+ func_show_eval '${RM}r "$gentop"'
fi
# Create an invalid libtool object if no PIC, so that we don't
# accidentally link it into a program.
# $show "echo timestamp > $libobj"
- # $run eval "echo timestamp > $libobj" || exit $?
- exit 0
+ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+ exit $EXIT_SUCCESS
fi
if test -n "$pic_flag" || test "$pic_mode" != default; then
# Only do commands if we really have different PIC objects.
reload_objs="$libobjs $reload_conv_objs"
output="$libobj"
- eval cmds=\"$reload_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-# else
-# # Just create a symlink.
-# $show $rm $libobj
-# $run $rm $libobj
-# xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
-# if test "X$xdir" = "X$libobj"; then
-# xdir="."
-# else
-# xdir="$xdir"
-# fi
-# baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
-# oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
-# $show "(cd $xdir && $LN_S $oldobj $baseobj)"
-# $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
+ func_execute_cmds "$reload_cmds" 'exit $?'
fi
if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
+ func_show_eval '${RM}r "$gentop"'
fi
- exit 0
+ exit $EXIT_SUCCESS
;;
prog)
case $host in
- *cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;;
+ *cygwin*) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result.exe;;
esac
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
- fi
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for programs"
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
- fi
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for programs"
- if test "$preload" = yes; then
- if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
- test "$dlopen_self_static" = unknown; then
- $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
- fi
- fi
+ test "$preload" = yes \
+ && test "$dlopen_support" = unknown \
+ && test "$dlopen_self" = unknown \
+ && test "$dlopen_self_static" = unknown && \
+ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
case $host in
*-*-rhapsody* | *-*-darwin1.[012])
# On Rhapsody replace the C library is the System framework
- compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
- finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ case $host in
+ *-*-darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ # But is supposedly fixed on 10.4 or later (yay!).
+ if test "$tagname" = CXX ; then
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[0123])
+ compile_command="$compile_command ${wl}-bind_at_load"
+ finalize_command="$finalize_command ${wl}-bind_at_load"
+ ;;
+ esac
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
;;
esac
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $compile_deplibs " in
+ *" -L$path/$objdir "*)
+ new_libs="$new_libs -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $compile_deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ done
+ compile_deplibs="$new_libs"
+
+
compile_command="$compile_command $compile_deplibs"
finalize_command="$finalize_command $finalize_deplibs"
@@ -3550,7 +6070,7 @@ EOF
# Now hardcode the library paths
rpath=
hardcode_libdirs=
- for libdir in $compile_rpath; do
+ for libdir in $compile_rpath $finalize_rpath; do
if test -n "$hardcode_libdir_flag_spec"; then
if test -n "$hardcode_libdir_separator"; then
if test -z "$hardcode_libdirs"; then
@@ -3577,10 +6097,15 @@ EOF
fi
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
case :$dllsearchpath: in
*":$libdir:"*) ;;
*) dllsearchpath="$dllsearchpath:$libdir";;
esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
+ esac
;;
esac
done
@@ -3628,227 +6153,47 @@ EOF
fi
finalize_rpath="$rpath"
- dlsyms=
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- if test -n "$NM" && test -n "$global_symbol_pipe"; then
- dlsyms="${outputname}S.c"
- else
- $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
- fi
+ if test -n "$libobjs" && test "$build_old_libs" = yes; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
fi
- if test -n "$dlsyms"; then
- case $dlsyms in
- "") ;;
- *.c)
- # Discover the nlist of each of the dlfiles.
- nlist="$output_objdir/${outputname}.nm"
-
- $show "$rm $nlist ${nlist}S ${nlist}T"
- $run $rm "$nlist" "${nlist}S" "${nlist}T"
-
- # Parse the name list into a source file.
- $show "creating $output_objdir/$dlsyms"
-
- test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
-/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
-/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-/* Prevent the only kind of declaration conflicts we can make. */
-#define lt_preloaded_symbols some_other_symbol
-
-/* External symbol declarations for the compiler. */\
-"
-
- if test "$dlself" = yes; then
- $show "generating symbol list for \`$output'"
-
- test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
-
- # Add our own program objects to the symbol list.
- progfiles="$objs$old_deplibs"
- for arg in $progfiles; do
- $show "extracting global C symbols from \`$arg'"
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -n "$exclude_expsyms"; then
- $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- if test -n "$export_symbols_regex"; then
- $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- export_symbols="$output_objdir/$output.exp"
- $run $rm $export_symbols
- $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- else
- $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
- $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
- $run eval 'mv "$nlist"T "$nlist"'
- fi
- fi
-
- for arg in $dlprefiles; do
- $show "extracting global C symbols from \`$arg'"
- name=`echo "$arg" | sed -e 's%^.*/%%'`
- $run eval 'echo ": $name " >> "$nlist"'
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -z "$run"; then
- # Make sure we have at least an empty file.
- test -f "$nlist" || : > "$nlist"
-
- if test -n "$exclude_expsyms"; then
- egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
- $mv "$nlist"T "$nlist"
- fi
-
- # Try sorting and uniquifying the output.
- if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
- :
- else
- grep -v "^: " < "$nlist" > "$nlist"S
- fi
-
- if test -f "$nlist"S; then
- eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
- else
- echo '/* NONE */' >> "$output_objdir/$dlsyms"
- fi
-
- $echo >> "$output_objdir/$dlsyms" "\
-
-#undef lt_preloaded_symbols
+ func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{\
-"
-
- sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \
- -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \
- < "$nlist" >> "$output_objdir/$dlsyms"
-
- $echo >> "$output_objdir/$dlsyms" "\
- {0, (lt_ptr_t) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
- return lt_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
- fi
-
- pic_flag_for_symtable=
- case $host in
- # compiling the symbol table file with pic_flag works around
- # a FreeBSD bug that causes programs to crash when -lm is
- # linked before any other PIC object. But we must not use
- # pic_flag when linking with -static. The problem exists in
- # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
- *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
- esac;;
- *-*-hpux*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag";;
- esac
- esac
-
- # Now compile the dynamic symbol file.
- $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
- $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
-
- # Clean up the generated files.
- $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
- $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
-
- # Transform the symbol file into the correct name.
- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- ;;
- *)
- $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
- exit 1
- ;;
- esac
- else
- # We keep going just in case the user didn't refer to
- # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
- # really was required.
-
- # Nullify the symbol file.
- compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+ # template prelinking step
+ if test -n "$prelink_cmds"; then
+ func_execute_cmds "$prelink_cmds" 'exit $?'
fi
- if test $need_relink = no || test "$build_libtool_libs" != yes; then
+ wrappers_required=yes
+ case $host in
+ *cygwin* | *mingw* )
+ if test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ *)
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ esac
+ if test "$wrappers_required" = no; then
# Replace the output file specification.
- compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
link_command="$compile_command$compile_rpath"
# We have no uninstalled library dependencies, so finalize right now.
- $show "$link_command"
- $run eval "$link_command"
- status=$?
+ exit_status=0
+ func_show_eval "$link_command" 'exit_status=$?'
# Delete the generated files.
- if test -n "$dlsyms"; then
- $show "$rm $output_objdir/${outputname}S.${objext}"
- $run $rm "$output_objdir/${outputname}S.${objext}"
+ if test -f "$output_objdir/${outputname}S.${objext}"; then
+ func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
fi
- exit $status
- fi
-
- if test -n "$shlibpath_var"; then
- # We should set the shlibpath_var
- rpath=
- for dir in $temp_rpath; do
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*)
- # Absolute path.
- rpath="$rpath$dir:"
- ;;
- *)
- # Relative path: add a thisdir entry.
- rpath="$rpath\$thisdir/$dir:"
- ;;
- esac
- done
- temp_rpath="$rpath"
+ exit $exit_status
fi
if test -n "$compile_shlibpath$finalize_shlibpath"; then
@@ -3883,13 +6228,12 @@ static const void *lt_preloaded_setup() {
# We don't need to create a wrapper script.
link_command="$compile_var$compile_command$compile_rpath"
# Replace the output file specification.
- link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
# Delete the old output file.
- $run $rm $output
+ $opt_dry_run || $RM $output
# Link the executable and exit
- $show "$link_command"
- $run eval "$link_command" || exit $?
- exit 0
+ func_show_eval "$link_command" 'exit $?'
+ exit $EXIT_SUCCESS
fi
if test "$hardcode_action" = relink; then
@@ -3897,13 +6241,13 @@ static const void *lt_preloaded_setup() {
link_command="$compile_var$compile_command$compile_rpath"
relink_command="$finalize_var$finalize_command$finalize_rpath"
- $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
- $echo "$modename: \`$output' will be relinked during installation" 1>&2
+ func_warning "this platform does not like uninstalled shared libraries"
+ func_warning "\`$output' will be relinked during installation"
else
if test "$fast_install" != no; then
link_command="$finalize_var$compile_command$finalize_rpath"
if test "$fast_install" = yes; then
- relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+ relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
else
# fast_install is set to needless
relink_command=
@@ -3915,65 +6259,427 @@ static const void *lt_preloaded_setup() {
fi
# Replace the output file specification.
- link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+ link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
# Delete the old output files.
- $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
+ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
- $show "$link_command"
- $run eval "$link_command" || exit $?
+ func_show_eval "$link_command" 'exit $?'
# Now create the wrapper script.
- $show "creating $output"
+ func_echo "creating $output"
# Quote the relink command for shipping.
if test -n "$relink_command"; then
# Preserve any variables that may affect compiler behavior
for var in $variables_saved_for_relink; do
if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
elif eval var_value=\$$var; test -z "$var_value"; then
relink_command="$var=; export $var; $relink_command"
else
- var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
- relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
fi
done
- relink_command="cd `pwd`; $relink_command"
- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ relink_command="(cd `pwd`; $relink_command)"
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
fi
- # Quote $echo for shipping.
- if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
- case $0 in
- [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
- *) qecho="$SHELL `pwd`/$0 --fallback-echo";;
+ # Quote $ECHO for shipping.
+ if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
+ case $progpath in
+ [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+ *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
esac
- qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
+ qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
else
- qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
+ qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
fi
- # Only actually do things if our run command is non-null.
- if test -z "$run"; then
+ # Only actually do things if not in dry run mode.
+ $opt_dry_run || {
# win32 will think the script is a binary if it has
# a .exe suffix, so we strip it off here.
case $output in
- *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
+ *.exe) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result ;;
esac
# test for cygwin because mv fails w/o .exe extensions
case $host in
- *cygwin*) exeext=.exe ;;
+ *cygwin*)
+ exeext=.exe
+ func_stripname '' '.exe' "$outputname"
+ outputname=$func_stripname_result ;;
*) exeext= ;;
esac
- $rm $output
- trap "$rm $output; exit 1" 1 2 15
+ case $host in
+ *cygwin* | *mingw* )
+ output_name=`basename $output`
+ output_path=`dirname $output`
+ cwrappersource="$output_path/$objdir/lt-$output_name.c"
+ cwrapper="$output_path/$output_name.exe"
+ $RM $cwrappersource $cwrapper
+ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+ cat > $cwrappersource <<EOF
- $echo > $output "\
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+
+ Currently, it simply execs the wrapper *script* "/bin/sh $output",
+ but could eventually absorb all of the scripts functionality and
+ exec $objdir/$outputname directly.
+*/
+EOF
+ cat >> $cwrappersource<<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+ defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# ifndef DIR_SEPARATOR_2
+# define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+# define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+/* -DDEBUG is fairly common in CFLAGS. */
+#undef DEBUG
+#if defined DEBUGWRAPPER
+# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__)
+#else
+# define DEBUG(format, ...)
+#endif
+
+const char *program_name = NULL;
+
+void * xmalloc (size_t num);
+char * xstrdup (const char *string);
+const char * base_name (const char *name);
+char * find_executable(const char *wrapper);
+int check_executable(const char *path);
+char * strendzap(char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ DEBUG("(main) argv[0] : %s\n",argv[0]);
+ DEBUG("(main) program_name : %s\n",program_name);
+ newargz = XMALLOC(char *, argc+2);
+EOF
+
+ cat >> $cwrappersource <<EOF
+ newargz[0] = (char *) xstrdup("$SHELL");
+EOF
+
+ cat >> $cwrappersource <<"EOF"
+ newargz[1] = find_executable(argv[0]);
+ if (newargz[1] == NULL)
+ lt_fatal("Couldn't find %s", argv[0]);
+ DEBUG("(main) found exe at : %s\n",newargz[1]);
+ /* we know the script has the same name, without the .exe */
+ /* so make sure newargz[1] doesn't end in .exe */
+ strendzap(newargz[1],".exe");
+ for (i = 1; i < argc; i++)
+ newargz[i+1] = xstrdup(argv[i]);
+ newargz[argc+1] = NULL;
+
+ for (i=0; i<argc+1; i++)
+ {
+ DEBUG("(main) newargz[%d] : %s\n",i,newargz[i]);
+ ;
+ }
+
+EOF
+
+ case $host_os in
+ mingw*)
+ cat >> $cwrappersource <<EOF
+ execv("$SHELL",(char const **)newargz);
+EOF
+ ;;
+ *)
+ cat >> $cwrappersource <<EOF
+ execv("$SHELL",newargz);
+EOF
+ ;;
+ esac
+
+ cat >> $cwrappersource <<"EOF"
+ return 127;
+}
+
+void *
+xmalloc (size_t num)
+{
+ void * p = (void *) malloc (num);
+ if (!p)
+ lt_fatal ("Memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
+;
+}
+
+const char *
+base_name (const char *name)
+{
+ const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha ((unsigned char)name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return base;
+}
+
+int
+check_executable(const char * path)
+{
+ struct stat st;
+
+ DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!");
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 0) &&
+ (
+ /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */
+#if defined (S_IXOTH)
+ ((st.st_mode & S_IXOTH) == S_IXOTH) ||
+#endif
+#if defined (S_IXGRP)
+ ((st.st_mode & S_IXGRP) == S_IXGRP) ||
+#endif
+ ((st.st_mode & S_IXUSR) == S_IXUSR))
+ )
+ return 1;
+ else
+ return 0;
+}
+
+/* Searches for the full path of the wrapper. Returns
+ newly allocated full path name if found, NULL otherwise */
+char *
+find_executable (const char* wrapper)
+{
+ int has_slash = 0;
+ const char* p;
+ const char* p_next;
+ /* static buffer for getcwd */
+ char tmp[LT_PATHMAX + 1];
+ int tmp_len;
+ char* concat_name;
+
+ DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!");
+
+ if ((wrapper == NULL) || (*wrapper == '\0'))
+ return NULL;
+
+ /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':')
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable(concat_name))
+ return concat_name;
+ XFREE(concat_name);
+ }
+ else
+ {
+#endif
+ if (IS_DIR_SEPARATOR (wrapper[0]))
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable(concat_name))
+ return concat_name;
+ XFREE(concat_name);
+ }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ }
+#endif
+
+ for (p = wrapper; *p; p++)
+ if (*p == '/')
+ {
+ has_slash = 1;
+ break;
+ }
+ if (!has_slash)
+ {
+ /* no slashes; search PATH */
+ const char* path = getenv ("PATH");
+ if (path != NULL)
+ {
+ for (p = path; *p; p = p_next)
+ {
+ const char* q;
+ size_t p_len;
+ for (q = p; *q; q++)
+ if (IS_PATH_SEPARATOR(*q))
+ break;
+ p_len = q - p;
+ p_next = (*q == '\0' ? q : q + 1);
+ if (p_len == 0)
+ {
+ /* empty path: current directory */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ tmp_len = strlen(tmp);
+ concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+ }
+ else
+ {
+ concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1);
+ memcpy (concat_name, p, p_len);
+ concat_name[p_len] = '/';
+ strcpy (concat_name + p_len + 1, wrapper);
+ }
+ if (check_executable(concat_name))
+ return concat_name;
+ XFREE(concat_name);
+ }
+ }
+ /* not found in PATH; assume curdir */
+ }
+ /* Relative path | not found in path: prepend cwd */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ tmp_len = strlen(tmp);
+ concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+
+ if (check_executable(concat_name))
+ return concat_name;
+ XFREE(concat_name);
+ return NULL;
+}
+
+char *
+strendzap(char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert(str != NULL);
+ assert(pat != NULL);
+
+ len = strlen(str);
+ patlen = strlen(pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (strcmp(str, pat) == 0)
+ *str = '\0';
+ }
+ return str;
+}
+
+static void
+lt_error_core (int exit_status, const char * mode,
+ const char * message, va_list ap)
+{
+ fprintf (stderr, "%s: %s: ", program_name, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+ va_end (ap);
+}
+EOF
+ # we should really use a build-platform specific compiler
+ # here, but OTOH, the wrappers (shell script and this C one)
+ # are only useful if you want to execute the "real" binary.
+ # Since the "real" binary is built for $host, then this
+ # wrapper might as well be built for $host, too.
+ $opt_dry_run || $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource
+ ;;
+ esac
+ $RM $output
+ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+ $ECHO > $output "\
#! $SHELL
# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
#
# The $output program cannot be directly executed until all the libtool
# libraries that it depends on are installed.
@@ -3983,47 +6689,62 @@ static const void *lt_preloaded_setup() {
# Sed substitution that helps us do robust quoting. It backslashifies
# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
+Xsed='${SED} -e 1s/^X//'
sed_quote_subst='$sed_quote_subst'
+# 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+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
-if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
relink_command=\"$relink_command\"
# This environment variable determines our operation mode.
if test \"\$libtool_install_magic\" = \"$magic\"; then
- # install mode needs the following variable:
+ # install mode needs the following variables:
+ generated_by_libtool_version='$macro_version'
notinst_deplibs='$notinst_deplibs'
else
- # When we are sourced in execute mode, \$file and \$echo are already set.
+ # When we are sourced in execute mode, \$file and \$ECHO are already set.
if test \"\$libtool_execute_magic\" != \"$magic\"; then
- echo=\"$qecho\"
+ ECHO=\"$qecho\"
file=\"\$0\"
# Make sure echo works.
if test \"X\$1\" = X--no-reexec; then
# Discard the --no-reexec flag, and continue.
shift
- elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
- # Yippee, \$echo works!
+ elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
+ # Yippee, \$ECHO works!
:
else
- # Restart under the correct shell, and then maybe \$echo will work.
+ # Restart under the correct shell, and then maybe \$ECHO will work.
exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
fi
fi\
"
- $echo >> $output "\
+ $ECHO >> $output "\
# Find the directory that this script lives in.
- thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+ thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
test \"x\$thisdir\" = \"x\$file\" && thisdir=.
# Follow symbolic links until we get to the real thisdir.
- file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
+ file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
while test -n \"\$file\"; do
- destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+ destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
# If there was a directory component, then change thisdir.
if test \"x\$destdir\" != \"x\$file\"; then
@@ -4033,8 +6754,8 @@ else
esac
fi
- file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
- file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
+ file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
done
# Try to get the absolute directory name.
@@ -4043,59 +6764,59 @@ else
"
if test "$fast_install" = yes; then
- echo >> $output "\
+ $ECHO >> $output "\
program=lt-'$outputname'$exeext
progdir=\"\$thisdir/$objdir\"
- if test ! -f \"\$progdir/\$program\" || \\
- { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
+ if test ! -f \"\$progdir/\$program\" ||
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
test \"X\$file\" != \"X\$progdir/\$program\"; }; then
file=\"\$\$-\$program\"
if test ! -d \"\$progdir\"; then
- $mkdir \"\$progdir\"
+ $MKDIR \"\$progdir\"
else
- $rm \"\$progdir/\$file\"
+ $RM \"\$progdir/\$file\"
fi"
- echo >> $output "\
+ $ECHO >> $output "\
# relink executable if necessary
if test -n \"\$relink_command\"; then
if relink_command_output=\`eval \$relink_command 2>&1\`; then :
else
- $echo \"\$relink_command_output\" >&2
- $rm \"\$progdir/\$file\"
+ $ECHO \"\$relink_command_output\" >&2
+ $RM \"\$progdir/\$file\"
exit 1
fi
fi
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
- { $rm \"\$progdir/\$program\";
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
- $rm \"\$progdir/\$file\"
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $RM \"\$progdir/\$program\";
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $RM \"\$progdir/\$file\"
fi"
else
- echo >> $output "\
+ $ECHO >> $output "\
program='$outputname'
progdir=\"\$thisdir/$objdir\"
"
fi
- echo >> $output "\
+ $ECHO >> $output "\
if test -f \"\$progdir/\$program\"; then"
# Export our shlibpath_var if we have one.
if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- $echo >> $output "\
+ $ECHO >> $output "\
# Add our own library path to $shlibpath_var
$shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
# Some systems cannot cope with colon-terminated $shlibpath_var
# The second colon is a workaround for a bug in BeOS R4 sed
- $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+ $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
export $shlibpath_var
"
@@ -4103,58 +6824,46 @@ else
# fixup the dll searchpath if we need to.
if test -n "$dllsearchpath"; then
- $echo >> $output "\
+ $ECHO >> $output "\
# Add the dll search path components to the executable PATH
PATH=$dllsearchpath:\$PATH
"
fi
- $echo >> $output "\
+ $ECHO >> $output "\
if test \"\$libtool_execute_magic\" != \"$magic\"; then
# Run the actual program with our arguments.
"
case $host in
- # win32 systems need to use the prog path for dll
- # lookup to work
- *-*-cygwin* | *-*-pw32*)
- $echo >> $output "\
- exec \$progdir/\$program \${1+\"\$@\"}
-"
- ;;
-
# Backslashes separate directories on plain windows
*-*-mingw | *-*-os2*)
- $echo >> $output "\
- exec \$progdir\\\\\$program \${1+\"\$@\"}
+ $ECHO >> $output "\
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
"
;;
*)
- $echo >> $output "\
- # Export the path to the program.
- PATH=\"\$progdir:\$PATH\"
- export PATH
-
- exec \$program \${1+\"\$@\"}
+ $ECHO >> $output "\
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
"
;;
esac
- $echo >> $output "\
- \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+ $ECHO >> $output "\
+ \$ECHO \"\$0: cannot exec \$program \$*\"
exit 1
fi
else
# The program doesn't exist.
- \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
- \$echo \"This script is just a wrapper for \$program.\" 1>&2
- echo \"See the $PACKAGE documentation for more information.\" 1>&2
+ \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+ \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+ $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
exit 1
fi
fi\
"
chmod +x $output
- fi
- exit 0
+ }
+ exit $EXIT_SUCCESS
;;
esac
@@ -4162,7 +6871,7 @@ fi\
for oldlib in $oldlibs; do
if test "$build_libtool_libs" = convenience; then
- oldobjs="$libobjs_save"
+ oldobjs="$libobjs_save $symfileobj"
addlibs="$convenience"
build_libtool_libs=no
else
@@ -4170,69 +6879,35 @@ fi\
oldobjs="$libobjs_save"
build_libtool_libs=no
else
- oldobjs="$objs$old_deplibs $non_pic_objects"
+ oldobjs="$old_deplibs $non_pic_objects"
+ if test "$preload" = yes && test -f "$symfileobj"; then
+ oldobjs="$oldobjs $symfileobj"
+ fi
fi
addlibs="$old_convenience"
fi
if test -n "$addlibs"; then
gentop="$output_objdir/${outputname}x"
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "$mkdir $gentop"
- $run $mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
generated="$generated $gentop"
- # Add in members from convenience archives.
- for xlib in $addlibs; do
- # Extract the objects.
- case $xlib in
- [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- *) xabs=`pwd`"/$xlib" ;;
- esac
- xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- xdir="$gentop/$xlib"
-
- $show "${rm}r $xdir"
- $run ${rm}r "$xdir"
- $show "$mkdir $xdir"
- $run $mkdir "$xdir"
- status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
- exit $status
- fi
- $show "(cd $xdir && $AR x $xabs)"
- $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
- oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print | $NL2SP`
- done
+ func_extract_archives $gentop $addlibs
+ oldobjs="$oldobjs $func_extract_archives_result"
fi
# Do each command in the archive commands.
if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
- eval cmds=\"$old_archive_from_new_cmds\"
+ cmds=$old_archive_from_new_cmds
else
-# # Ensure that we have .o objects in place in case we decided
-# # not to build a shared library, and have fallen back to building
-# # static libs even though --disable-static was passed!
-# for oldobj in $oldobjs; do
-# if test ! -f $oldobj; then
-# xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
-# if test "X$xdir" = "X$oldobj"; then
-# xdir="."
-# else
-# xdir="$xdir"
-# fi
-# baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
-# obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
-# $show "(cd $xdir && ${LN_S} $obj $baseobj)"
-# $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
-# fi
-# done
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ oldobjs="$oldobjs $func_extract_archives_result"
+ fi
# POSIX demands no paths to be encoded in archives. We have
# to avoid creating archives with duplicate basenames if we
@@ -4240,134 +6915,123 @@ fi\
# static archive out of a convenience library, or when linking
# the entirety of a libtool archive into another (currently
# not supported by libtool).
- if (for obj in $oldobjs
+ if (for obj in $oldobjs
do
- $echo "X$obj" | $Xsed -e 's%^.*/%%'
+ func_basename "$obj"
+ $ECHO "$func_basename_result"
done | sort | sort -uc >/dev/null 2>&1); then
:
else
- $echo "copying selected object files to avoid basename conflicts..."
-
- if test -z "$gentop"; then
- gentop="$output_objdir/${outputname}x"
-
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "$mkdir $gentop"
- $run $mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
- generated="$generated $gentop"
- fi
-
+ $ECHO "copying selected object files to avoid basename conflicts..."
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+ func_mkdir_p "$gentop"
save_oldobjs=$oldobjs
oldobjs=
counter=1
for obj in $save_oldobjs
do
- objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+ func_basename "$obj"
+ objbase="$func_basename_result"
case " $oldobjs " in
" ") oldobjs=$obj ;;
*[\ /]"$objbase "*)
while :; do
# Make sure we don't pick an alternate name that also
# overlaps.
- newobj=lt$counter-$objbase
- counter=`expr $counter + 1`
+ newobj=lt$counter-$objbase
+ counter=`expr $counter + 1`
case " $oldobjs " in
*[\ /]"$newobj "*) ;;
*) if test ! -f "$gentop/$newobj"; then break; fi ;;
esac
done
- $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
- $run ln "$obj" "$gentop/$newobj" ||
- $run cp "$obj" "$gentop/$newobj"
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
oldobjs="$oldobjs $gentop/$newobj"
;;
*) oldobjs="$oldobjs $obj" ;;
esac
done
fi
+ eval cmds=\"$old_archive_cmds\"
- eval cmds=\"$old_archive_cmds\"
-
- if len=`expr "X$cmds" : ".*"` &&
- test $len -le $max_cmd_len; then
- :
- else
- # the command line is too long to link in one step, link in parts
- $echo "using piecewise archive linking..."
+ if len=`expr "X$cmds" : ".*" 2>/dev/null` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
+ else
+ # the command line is too long to link in one step, link in parts
+ func_echo "using piecewise archive linking..."
save_RANLIB=$RANLIB
RANLIB=:
- objlist=
- concat_cmds=
- save_oldobjs=$oldobjs
-
- for obj in $save_oldobjs
- do
- oldobjs="$objlist $obj"
- objlist="$objlist $obj"
- eval test_cmds=\"$old_archive_cmds\"
- if len=`expr "X$test_cmds" : ".*"` &&
- test $len -le $max_cmd_len; then
- :
- else
- # the above command should be used before it gets too long
- oldobjs=$objlist
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ for obj in $save_oldobjs
+ do
+ oldobjs="$objlist $obj"
+ objlist="$objlist $obj"
+ eval test_cmds=\"$old_archive_cmds\"
+ if len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+ test "$len" -le "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj" ; then
+ RANLIB=$save_RANLIB
+ fi
test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
- objlist=
- fi
- done
+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+ objlist=
+ fi
+ done
RANLIB=$save_RANLIB
- oldobjs=$objlist
- eval cmds=\"\$concat_cmds~$old_archive_cmds\"
- fi
+ oldobjs=$objlist
+ if test "X$oldobjs" = "X" ; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+ fi
+ fi
fi
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
+ func_execute_cmds "$cmds" 'exit $?'
done
- if test -n "$generated"; then
- $show "${rm}r$generated"
- $run ${rm}r$generated
- fi
+ test -n "$generated" && \
+ func_show_eval "${RM}r$generated"
# Now create the libtool archive.
case $output in
*.la)
old_library=
test "$build_old_libs" = yes && old_library="$libname.$libext"
- $show "creating $output"
+ func_echo "creating $output"
# Preserve any variables that may affect compiler behavior
for var in $variables_saved_for_relink; do
if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
elif eval var_value=\$$var; test -z "$var_value"; then
relink_command="$var=; export $var; $relink_command"
else
- var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
- relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
fi
done
# Quote the link command for shipping.
- tagopts=
- for tag in $taglist; do
- tagopts="$tagopts --tag $tag"
- done
- relink_command="(cd `pwd`; $SHELL $0$tagopts --mode=relink $libtool_args)"
- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ if test "$hardcode_automatic" = yes ; then
+ relink_command=
+ fi
# Only create the output if not a dry run.
- if test -z "$run"; then
+ $opt_dry_run || {
for installed in no yes; do
if test "$installed" = yes; then
if test -z "$install_libdir"; then
@@ -4379,12 +7043,11 @@ fi\
for deplib in $dependency_libs; do
case $deplib in
*.la)
- name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- if test -z "$libdir"; then
- $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
- exit 1
- fi
+ func_basename "$deplib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
newdependency_libs="$newdependency_libs $libdir/$name"
;;
*) newdependency_libs="$newdependency_libs $deplib" ;;
@@ -4392,37 +7055,68 @@ fi\
done
dependency_libs="$newdependency_libs"
newdlfiles=
+
for lib in $dlfiles; do
- name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- if test -z "$libdir"; then
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit 1
- fi
- newdlfiles="$newdlfiles $libdir/$name"
+ case $lib in
+ *.la)
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ newdlfiles="$newdlfiles $libdir/$name"
+ ;;
+ *) newdlfiles="$newdlfiles $lib" ;;
+ esac
done
dlfiles="$newdlfiles"
newdlprefiles=
for lib in $dlprefiles; do
- name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- if test -z "$libdir"; then
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit 1
- fi
- newdlprefiles="$newdlprefiles $libdir/$name"
+ case $lib in
+ *.la)
+ # Only pass preopened files to the pseudo-archive (for
+ # eventual linking with the app. that links it) if we
+ # didn't already link the preopened objects directly into
+ # the library:
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ newdlprefiles="$newdlprefiles $libdir/$name"
+ ;;
+ esac
+ done
+ dlprefiles="$newdlprefiles"
+ else
+ newdlfiles=
+ for lib in $dlfiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ newdlfiles="$newdlfiles $abs"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ newdlprefiles="$newdlprefiles $abs"
done
dlprefiles="$newdlprefiles"
fi
- $rm $output
+ $RM $output
# place dlname in correct position for cygwin
tdlname=$dlname
case $host,$output,$installed,$module,$dlname in
- *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
esac
- $echo > $output "\
+ $ECHO > $output "\
# $outputname - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
@@ -4436,9 +7130,15 @@ library_names='$library_names'
# The name of the static archive.
old_library='$old_library'
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
# Libraries that this one depends upon.
dependency_libs='$dependency_libs'
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
# Version information for $libname.
current=$current
age=$age
@@ -4447,692 +7147,39 @@ revision=$revision
# Is this an already installed library?
installed=$installed
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
# Files to dlopen/dlpreopen
dlopen='$dlfiles'
dlpreopen='$dlprefiles'
# Directory that this library needs to be installed in:
libdir='$install_libdir'"
- if test "$installed" = no && test $need_relink = yes; then
- $echo >> $output "\
+ if test "$installed" = no && test "$need_relink" = yes; then
+ $ECHO >> $output "\
relink_command=\"$relink_command\""
fi
done
- fi
+ }
# Do a symbolic link so that the libtool archive can be found in
# LD_LIBRARY_PATH before the program is installed.
- $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
- $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
- ;;
- esac
- exit 0
- ;;
-
- # libtool install mode
- install)
- modename="$modename: install"
-
- # There may be an optional sh(1) argument at the beginning of
- # install_prog (especially on Windows NT).
- if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
- # Allow the use of GNU shtool's install command.
- $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
- # Aesthetically quote it.
- arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- install_prog="$arg "
- arg="$1"
- shift
- else
- install_prog=
- arg="$nonopt"
- fi
-
- # The real first argument should be the name of the installation program.
- # Aesthetically quote it.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog$arg"
-
- # We need to accept at least all the BSD install flags.
- dest=
- files=
- opts=
- prev=
- install_type=
- isdir=no
- stripme=
- for arg
- do
- if test -n "$dest"; then
- files="$files $dest"
- dest="$arg"
- continue
- fi
-
- case $arg in
- -d) isdir=yes ;;
- -f) prev="-f" ;;
- -g) prev="-g" ;;
- -m) prev="-m" ;;
- -o) prev="-o" ;;
- -s)
- stripme=" -s"
- continue
- ;;
- -*) ;;
-
- *)
- # If the previous option needed an argument, then skip it.
- if test -n "$prev"; then
- prev=
- else
- dest="$arg"
- continue
- fi
- ;;
- esac
-
- # Aesthetically quote the argument.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog $arg"
- done
-
- if test -z "$install_prog"; then
- $echo "$modename: you must specify an install program" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- if test -n "$prev"; then
- $echo "$modename: the \`$prev' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- if test -z "$files"; then
- if test -z "$dest"; then
- $echo "$modename: no file or destination specified" 1>&2
- else
- $echo "$modename: you must specify a destination" 1>&2
- fi
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Strip any trailing slash from the destination.
- dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
-
- # Check to see that the destination is a directory.
- test -d "$dest" && isdir=yes
- if test "$isdir" = yes; then
- destdir="$dest"
- destname=
- else
- destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
- test "X$destdir" = "X$dest" && destdir=.
- destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
-
- # Not a directory, so check to see that there is only one file specified.
- set dummy $files
- if test $# -gt 2; then
- $echo "$modename: \`$dest' is not a directory" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
- fi
- case $destdir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- for file in $files; do
- case $file in
- *.lo) ;;
- *)
- $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
- esac
- done
+ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
;;
esac
+ exit $EXIT_SUCCESS
+}
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
-
- staticlibs=
- future_libdirs=
- current_libdirs=
- for file in $files; do
-
- # Do each installation.
- case $file in
- *.$libext)
- # Do the static libraries later.
- staticlibs="$staticlibs $file"
- ;;
-
- *.la)
- # Check to see that this really is a libtool archive.
- if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- library_names=
- old_library=
- relink_command=
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Add the libdir to current_libdirs if it is the destination.
- if test "X$destdir" = "X$libdir"; then
- case "$current_libdirs " in
- *" $libdir "*) ;;
- *) current_libdirs="$current_libdirs $libdir" ;;
- esac
- else
- # Note the libdir as a future libdir.
- case "$future_libdirs " in
- *" $libdir "*) ;;
- *) future_libdirs="$future_libdirs $libdir" ;;
- esac
- fi
-
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
- test "X$dir" = "X$file/" && dir=
- dir="$dir$objdir"
-
- if test -n "$relink_command"; then
- $echo "$modename: warning: relinking \`$file'" 1>&2
- $show "$relink_command"
- if $run eval "$relink_command"; then :
- else
- $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- exit 1
- fi
- fi
-
- # See the names of the shared library.
- set dummy $library_names
- if test -n "$2"; then
- realname="$2"
- shift
- shift
-
- srcname="$realname"
- test -n "$relink_command" && srcname="$realname"T
-
- # Install the shared library and build the symlinks.
- $show "$install_prog $dir/$srcname $destdir/$realname"
- $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
- if test -n "$stripme" && test -n "$striplib"; then
- $show "$striplib $destdir/$realname"
- $run eval "$striplib $destdir/$realname" || exit $?
- fi
-
- if test $# -gt 0; then
- # Delete the old symlinks, and create new ones.
- for linkname
- do
- if test "$linkname" != "$realname"; then
- $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- fi
- done
- fi
-
- # Do each command in the postinstall commands.
- lib="$destdir/$realname"
- eval cmds=\"$postinstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
-
- # Install the pseudo-library for information purposes.
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- instname="$dir/$name"i
- $show "$install_prog $instname $destdir/$name"
- $run eval "$install_prog $instname $destdir/$name" || exit $?
-
- # Maybe install the static library, too.
- test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
- ;;
-
- *.lo)
- # Install (i.e. copy) a libtool object.
-
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # Deduce the name of the destination old-style object file.
- case $destfile in
- *.lo)
- staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
- ;;
- *.$objext)
- staticdest="$destfile"
- destfile=
- ;;
- *)
- $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
- esac
-
- # Install the libtool object if requested.
- if test -n "$destfile"; then
- $show "$install_prog $file $destfile"
- $run eval "$install_prog $file $destfile" || exit $?
- fi
-
- # Install the old object if enabled.
- if test "$build_old_libs" = yes; then
- # Deduce the name of the old-style object file.
- staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
-
- $show "$install_prog $staticobj $staticdest"
- $run eval "$install_prog \$staticobj \$staticdest" || exit $?
- fi
- exit 0
- ;;
-
- *)
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # Do a test to see if this is really a libtool program.
- if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- notinst_deplibs=
- relink_command=
-
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Check the variables that should have been set.
- if test -z "$notinst_deplibs"; then
- $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
- exit 1
- fi
-
- finalize=yes
- for lib in $notinst_deplibs; do
- # Check to see that each library is installed.
- libdir=
- if test -f "$lib"; then
- # If there is no directory component, then add one.
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
- fi
- libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
- if test -n "$libdir" && test ! -f "$libfile"; then
- $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
- finalize=no
- fi
- done
-
- relink_command=
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- outputname=
- if test "$fast_install" = no && test -n "$relink_command"; then
- if test "$finalize" = yes && test -z "$run"; then
- tmpdir="/tmp"
- test -n "$TMPDIR" && tmpdir="$TMPDIR"
- tmpdir="$tmpdir/libtool-$$"
- if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
- else
- $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
- continue
- fi
- file=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- outputname="$tmpdir/$file"
- # Replace the output file specification.
- relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
-
- $show "$relink_command"
- if $run eval "$relink_command"; then :
- else
- $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- ${rm}r "$tmpdir"
- continue
- fi
- file="$outputname"
- else
- $echo "$modename: warning: cannot relink \`$file'" 1>&2
- fi
- else
- # Install the binary that we compiled earlier.
- file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
- fi
- fi
-
-
- # remove .exe since cygwin /usr/bin/install will append another
- # one anyways
- case $install_prog,$host in
- */usr/bin/install*,*cygwin*)
- case $file:$destfile in
- *.exe:*.exe)
- # this is ok
- ;;
- *.exe:*)
- destfile=$destfile.exe
- ;;
- *:*.exe)
- destfile=`echo $destfile | sed -e 's,.exe$,,'`
- ;;
- esac
- ;;
- esac
-
- $show "$install_prog$stripme $file $destfile"
- $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
- test -n "$outputname" && ${rm}r "$tmpdir"
- ;;
- esac
- done
-
- for file in $staticlibs; do
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
- # Set up the ranlib parameters.
- oldlib="$destdir/$name"
-
- $show "$install_prog $file $oldlib"
- $run eval "$install_prog \$file \$oldlib" || exit $?
-
- if test -n "$stripme" && test -n "$striplib"; then
- $show "$old_striplib $oldlib"
- $run eval "$old_striplib $oldlib" || exit $?
- fi
-
- # Do each command in the postinstall commands.
- eval cmds=\"$old_postinstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- done
-
- if test -n "$future_libdirs"; then
- $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
- fi
-
- if test -n "$current_libdirs"; then
- # Maybe just do a dry run.
- test -n "$run" && current_libdirs=" -n$current_libdirs"
- exec_cmd='$SHELL $0 --finish$current_libdirs'
- else
- exit 0
- fi
- ;;
-
- # libtool finish mode
- finish)
- modename="$modename: finish"
- libdirs="$nonopt"
- admincmds=
-
- if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
- for dir
- do
- libdirs="$libdirs $dir"
- done
-
- for libdir in $libdirs; do
- if test -n "$finish_cmds"; then
- # Do each command in the finish commands.
- eval cmds=\"$finish_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || admincmds="$admincmds
- $cmd"
- done
- IFS="$save_ifs"
- fi
- if test -n "$finish_eval"; then
- # Do the single finish_eval.
- eval cmds=\"$finish_eval\"
- $run eval "$cmds" || admincmds="$admincmds
- $cmds"
- fi
- done
- fi
-
- # Exit here if they wanted silent mode.
- test "$show" = ":" && exit 0
-
- echo "----------------------------------------------------------------------"
- echo "Libraries have been installed in:"
- for libdir in $libdirs; do
- echo " $libdir"
- done
- echo
- echo "If you ever happen to want to link against installed libraries"
- echo "in a given directory, LIBDIR, you must either use libtool, and"
- echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
- echo "flag during linking and do at least one of the following:"
- if test -n "$shlibpath_var"; then
- echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
- echo " during execution"
- fi
- if test -n "$runpath_var"; then
- echo " - add LIBDIR to the \`$runpath_var' environment variable"
- echo " during linking"
- fi
- if test -n "$hardcode_libdir_flag_spec"; then
- libdir=LIBDIR
- eval flag=\"$hardcode_libdir_flag_spec\"
-
- echo " - use the \`$flag' linker flag"
- fi
- if test -n "$admincmds"; then
- echo " - have your system administrator run these commands:$admincmds"
- fi
- if test -f /etc/ld.so.conf; then
- echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
- fi
- echo
- echo "See any operating system documentation about shared libraries for"
- echo "more information, such as the ld(1) and ld.so(8) manual pages."
- echo "----------------------------------------------------------------------"
- exit 0
- ;;
-
- # libtool execute mode
- execute)
- modename="$modename: execute"
-
- # The first argument is the command name.
- cmd="$nonopt"
- if test -z "$cmd"; then
- $echo "$modename: you must specify a COMMAND" 1>&2
- $echo "$help"
- exit 1
- fi
-
- # Handle -dlopen flags immediately.
- for file in $execute_dlfiles; do
- if test ! -f "$file"; then
- $echo "$modename: \`$file' is not a file" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- dir=
- case $file in
- *.la)
- # Check to see that this really is a libtool archive.
- if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Read the libtool library.
- dlname=
- library_names=
-
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Skip this library if it cannot be dlopened.
- if test -z "$dlname"; then
- # Warn if it was a shared library.
- test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
- continue
- fi
-
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
-
- if test -f "$dir/$objdir/$dlname"; then
- dir="$dir/$objdir"
- else
- $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
- exit 1
- fi
- ;;
-
- *.lo)
- # Just add the directory containing the .lo file.
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
- ;;
-
- *)
- $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
- continue
- ;;
- esac
-
- # Get the absolute pathname.
- absdir=`cd "$dir" && pwd`
- test -n "$absdir" && dir="$absdir"
-
- # Now add the directory to shlibpath_var.
- if eval "test -z \"\$$shlibpath_var\""; then
- eval "$shlibpath_var=\"\$dir\""
- else
- eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
- fi
- done
-
- # This variable tells wrapper scripts just to set shlibpath_var
- # rather than running their programs.
- libtool_execute_magic="$magic"
-
- # Check if any of the arguments is a wrapper script.
- args=
- for file
- do
- case $file in
- -*) ;;
- *)
- # Do a test to see if this is really a libtool program.
- if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Transform arg to wrapped name.
- file="$progdir/$program"
- fi
- ;;
- esac
- # Quote arguments (to preserve shell metacharacters).
- file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
- args="$args \"$file\""
- done
-
- if test -z "$run"; then
- if test -n "$shlibpath_var"; then
- # Export the shlibpath_var.
- eval "export $shlibpath_var"
- fi
-
- # Restore saved enviroment variables
- if test "${save_LC_ALL+set}" = set; then
- LC_ALL="$save_LC_ALL"; export LC_ALL
- fi
- if test "${save_LANG+set}" = set; then
- LANG="$save_LANG"; export LANG
- fi
+{ test "$mode" = link || test "$mode" = relink; } &&
+ func_mode_link ${1+"$@"}
- # Now prepare to actually exec the command.
- exec_cmd='"$cmd"$args'
- else
- # Display what would be done.
- if test -n "$shlibpath_var"; then
- eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
- $echo "export $shlibpath_var"
- fi
- $echo "$cmd$args"
- exit 0
- fi
- ;;
- # libtool clean and uninstall mode
- clean | uninstall)
- modename="$modename: $mode"
- rm="$nonopt"
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+ $opt_debug
+ RM="$nonopt"
files=
rmforce=
exit_status=0
@@ -5144,33 +7191,32 @@ relink_command=\"$relink_command\""
for arg
do
case $arg in
- -f) rm="$rm $arg"; rmforce=yes ;;
- -*) rm="$rm $arg" ;;
+ -f) RM="$RM $arg"; rmforce=yes ;;
+ -*) RM="$RM $arg" ;;
*) files="$files $arg" ;;
esac
done
- if test -z "$rm"; then
- $echo "$modename: you must specify an RM program" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
+ test -z "$RM" && \
+ func_fatal_help "you must specify an RM program"
rmdirs=
+ origobjdir="$objdir"
for file in $files; do
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$dir" = "X$file"; then
- dir=.
- objdir="$objdir"
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ if test "X$dir" = X.; then
+ objdir="$origobjdir"
else
- objdir="$dir/$objdir"
+ objdir="$dir/$origobjdir"
fi
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- test $mode = uninstall && objdir="$dir"
+ func_basename "$file"
+ name="$func_basename_result"
+ test "$mode" = uninstall && objdir="$dir"
# Remember objdir for removal later, being careful to avoid duplicates
- if test $mode = clean; then
+ if test "$mode" = clean; then
case " $rmdirs " in
*" $objdir "*) ;;
*) rmdirs="$rmdirs $objdir" ;;
@@ -5178,15 +7224,15 @@ relink_command=\"$relink_command\""
fi
# Don't error if the file doesn't exist and rm -f was used.
- if (test -L "$file") >/dev/null 2>&1 \
- || (test -h "$file") >/dev/null 2>&1 \
- || test -f "$file"; then
- :
+ if { test -L "$file"; } >/dev/null 2>&1 ||
+ { test -h "$file"; } >/dev/null 2>&1 ||
+ test -f "$file"; then
+ :
elif test -d "$file"; then
- exit_status=1
+ exit_status=1
continue
elif test "$rmforce" = yes; then
- continue
+ continue
fi
rmfiles="$file"
@@ -5194,312 +7240,125 @@ relink_command=\"$relink_command\""
case $name in
*.la)
# Possibly a libtool archive, so verify it.
- if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- . $dir/$name
+ if func_lalib_p "$file"; then
+ func_source $dir/$name
# Delete the libtool libraries and symlinks.
for n in $library_names; do
rmfiles="$rmfiles $objdir/$n"
done
test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
- test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
- if test $mode = uninstall; then
+ case "$mode" in
+ clean)
+ case " $library_names " in
+ # " " in the beginning catches empty $dlname
+ *" $dlname "*) ;;
+ *) rmfiles="$rmfiles $objdir/$dlname" ;;
+ esac
+ test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+ ;;
+ uninstall)
if test -n "$library_names"; then
# Do each command in the postuninstall commands.
- eval cmds=\"$postuninstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd"
- if test $? != 0 && test "$rmforce" != yes; then
- exit_status=1
- fi
- done
- IFS="$save_ifs"
+ func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
fi
if test -n "$old_library"; then
# Do each command in the old_postuninstall commands.
- eval cmds=\"$old_postuninstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd"
- if test $? != 0 && test "$rmforce" != yes; then
- exit_status=1
- fi
- done
- IFS="$save_ifs"
+ func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
fi
# FIXME: should reinstall the best remaining shared library.
- fi
+ ;;
+ esac
fi
;;
*.lo)
# Possibly a libtool object, so verify it.
- if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ if func_lalib_p "$file"; then
- # Read the .lo file
- . $dir/$name
+ # Read the .lo file
+ func_source $dir/$name
# Add PIC object to the list of files to remove.
- if test -n "$pic_object" \
- && test "$pic_object" != none; then
+ if test -n "$pic_object" &&
+ test "$pic_object" != none; then
rmfiles="$rmfiles $dir/$pic_object"
- fi
+ fi
# Add non-PIC object to the list of files to remove.
- if test -n "$non_pic_object" \
- && test "$non_pic_object" != none; then
+ if test -n "$non_pic_object" &&
+ test "$non_pic_object" != none; then
rmfiles="$rmfiles $dir/$non_pic_object"
- fi
+ fi
fi
;;
*)
- # Do a test to see if this is a libtool program.
- if test $mode = clean &&
- (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- relink_command=
- . $dir/$file
+ if test "$mode" = clean ; then
+ noexename=$name
+ case $file in
+ *.exe)
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ func_stripname '' '.exe' "$name"
+ noexename=$func_stripname_result
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ rmfiles="$rmfiles $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if func_ltwrapper_p "$file"; then
+ relink_command=
+ func_source $dir/$noexename
- rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
- if test "$fast_install" = yes && test -n "$relink_command"; then
- rmfiles="$rmfiles $objdir/lt-$name"
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+ if test "$fast_install" = yes && test -n "$relink_command"; then
+ rmfiles="$rmfiles $objdir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name" ; then
+ rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+ fi
fi
fi
;;
esac
- $show "$rm $rmfiles"
- $run $rm $rmfiles || exit_status=1
+ func_show_eval "$RM $rmfiles" 'exit_status=1'
done
+ objdir="$origobjdir"
# Try to remove the ${objdir}s in the directories where we deleted files
for dir in $rmdirs; do
if test -d "$dir"; then
- $show "rmdir $dir"
- $run rmdir $dir >/dev/null 2>&1
+ func_show_eval "rmdir $dir >/dev/null 2>&1"
fi
done
exit $exit_status
- ;;
+}
- "")
- $echo "$modename: you must specify a MODE" 1>&2
- $echo "$generic_help" 1>&2
- exit 1
- ;;
- esac
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
+ func_mode_uninstall ${1+"$@"}
- if test -z "$exec_cmd"; then
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$generic_help" 1>&2
- exit 1
- fi
-fi # test -z "$show_help"
+test -z "$mode" && {
+ help="$generic_help"
+ func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+ func_fatal_help "invalid operation mode \`$mode'"
if test -n "$exec_cmd"; then
- eval exec $exec_cmd
- exit 1
+ eval exec "$exec_cmd"
+ exit $EXIT_FAILURE
fi
-# We need to display help for each of the modes.
-case $mode in
-"") $echo \
-"Usage: $modename [OPTION]... [MODE-ARG]...
-
-Provide generalized library-building support services.
-
- --config show all configuration variables
- --debug enable verbose shell tracing
--n, --dry-run display commands without modifying any files
- --features display basic configuration information and exit
- --finish same as \`--mode=finish'
- --help display this help message and exit
- --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
- --quiet same as \`--silent'
- --silent don't print informational messages
- --tag=TAG use configuration variables from tag TAG
- --version print version information
-
-MODE must be one of the following:
-
- clean remove files from the build directory
- compile compile a source file into a libtool object
- execute automatically set library path, then run a program
- finish complete the installation of libtool libraries
- install install libraries or executables
- link create a library or an executable
- uninstall remove libraries from an installed directory
-
-MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE."
- exit 0
- ;;
-
-clean)
- $echo \
-"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-
-Remove files from the build directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, object or program, all the files associated
-with it are deleted. Otherwise, only FILE itself is deleted using RM."
- ;;
-
-compile)
- $echo \
-"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
- -o OUTPUT-FILE set the output file name to OUTPUT-FILE
- -prefer-pic try to building PIC objects only
- -prefer-non-pic try to building non-PIC objects only
- -static always build a \`.o' file suitable for static linking
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
- ;;
-
-execute)
- $echo \
-"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
- -dlopen FILE add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to \`-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
- ;;
-
-finish)
- $echo \
-"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges. Use
-the \`--dry-run' option if you just want to see what would be executed."
- ;;
-
-install)
- $echo \
-"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command. The first component should be
-either the \`install' or \`cp' program.
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
- ;;
-
-link)
- $echo \
-"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
- -all-static do not do any dynamic linking at all
- -avoid-version do not add a version suffix if possible
- -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
- -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
- -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
- -export-symbols SYMFILE
- try to export only the symbols listed in SYMFILE
- -export-symbols-regex REGEX
- try to export only the symbols matching REGEX
- -LLIBDIR search LIBDIR for required installed libraries
- -lNAME OUTPUT-FILE requires the installed library libNAME
- -module build a library that can dlopened
- -no-fast-install disable the fast-install mode
- -no-install link a not-installable executable
- -no-undefined declare that a library does not refer to external symbols
- -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
- -objectlist FILE Use a list of object files found in FILE to specify objects
- -release RELEASE specify package release information
- -rpath LIBDIR the created library will eventually be installed in LIBDIR
- -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
- -static do not do any dynamic linking of libtool libraries
- -version-info CURRENT[:REVISION[:AGE]]
- specify library version info [each variable defaults to 0]
-
-All other options (arguments beginning with \`-') are ignored.
-
-Every other argument is treated as a filename. Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-is created, otherwise an executable program is created."
- ;;
-
-uninstall)
- $echo \
-"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
- ;;
-
-*)
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
-esac
-
-echo
-$echo "Try \`$modename --help' for more information about other modes."
+exit $exit_status
-exit 0
# The TAGs below are defined such that we never get into a situation
# in which we disable both kinds of libraries. Given conflicting
@@ -5512,16 +7371,17 @@ exit 0
# If a disable-shared tag is given, we'll fallback to a static-only
# configuration. But we'll never go from static-only to shared-only.
-### BEGIN LIBTOOL TAG CONFIG: disable-shared
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
build_libtool_libs=no
build_old_libs=yes
-### END LIBTOOL TAG CONFIG: disable-shared
+# ### END LIBTOOL TAG CONFIG: disable-shared
-### BEGIN LIBTOOL TAG CONFIG: disable-static
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
-### END LIBTOOL TAG CONFIG: disable-static
+# ### END LIBTOOL TAG CONFIG: disable-static
# Local Variables:
# mode:shell-script
# sh-indentation:2
# End:
+# vi:sw=2
diff --git a/ltoptions.m4 b/ltoptions.m4
new file mode 100644
index 000000000000..7961b9f47241
--- /dev/null
+++ b/ltoptions.m4
@@ -0,0 +1,342 @@
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan <gary@gnu.org>
+#
+# 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 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(NAME)
+# -----------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(NAME)
+# --------------------
+# Set option NAME, and if there is a matching handler defined,
+# dispatch to it. Other NAMEs are saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1]),
+ _LT_MANGLE_DEFUN([$1]),
+ [m4_warning([Unknown Libtool option `$1'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1]), [$2], [$3])])
+
+
+# _LT_UNLESS_OPTIONS(OPTIONS, IF-NOT-SET)
+# ---------------------------------------
+# Execute IF-NOT-SET if all OPTIONS are not set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$1])),
+ [m4_ifdef(_LT_MANGLE_OPTION(_LT_Option),
+ [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$2
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Libtool options.
+# If any OPTION has a handler macro declared with LT_OPTION_DEFINE,
+# dispatch to that macro; otherwise complain about the unknown option
+# and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$1])),
+ [_LT_SET_OPTION(_LT_Option)])
+dnl
+dnl Simply set some default values (i.e off) if boolean options were not
+dnl specified:
+_LT_UNLESS_OPTIONS([dlopen], [enable_dlopen=no
+])
+_LT_UNLESS_OPTIONS([win32-dll], [enable_win32_dll=no
+])
+dnl
+dnl If no reference was made to various pairs of opposing options, then
+dnl we run the default mode handler for the pair. For example, if neither
+dnl `shared' nor `disable-shared' was passed, we enable building of shared
+dnl archives by default:
+_LT_UNLESS_OPTIONS([shared disable-shared], [_LT_ENABLE_SHARED])
+_LT_UNLESS_OPTIONS([static disable-static], [_LT_ENABLE_STATIC])
+_LT_UNLESS_OPTIONS([pic-only no-pic], [_LT_WITH_PIC])
+_LT_UNLESS_OPTIONS([fast-install disable-fast-install],
+ [_LT_ENABLE_FAST_INSTALL])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(NAME, CODE)
+# ----------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1]), [$2])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS], [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[_LT_SET_OPTION([win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+ _LT_DECL([build_libtool_libs], [enable_shared], [0],
+ [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+ _LT_DECL([build_old_libs], [enable_static], [0],
+ [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+ [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+ [AS_HELP_STRING([--with-pic],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [pic_mode="$withval"],
+ [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
diff --git a/ltsugar.m4 b/ltsugar.m4
new file mode 100644
index 000000000000..fc51dc7e8964
--- /dev/null
+++ b/ltsugar.m4
@@ -0,0 +1,111 @@
+# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan.
+#
+# 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 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+m4_define([lt_join],
+[m4_case([$#],
+ [0], [m4_fatal([$0: too few arguments: $#])],
+ [1], [],
+ [2], [[$2]],
+ [m4_ifval([$2],
+ [[$2][]m4_foreach(_lt_Arg, lt_car([m4_shiftn(2, $@)]),
+ [_$0([$1], _lt_Arg)])],
+ [$0([$1], m4_shiftn(2, $@))])])[]dnl
+])
+m4_define([_lt_join],
+[m4_ifval([$2],[$1][$2])[]dnl
+])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+ [$#], 1, [],
+ [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+m4_define([lt_combine],
+[m4_if([$2], [], [],
+ [m4_if([$4], [], [],
+ [lt_join(m4_quote(m4_default([$1], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_prefix, [$2],
+ [m4_foreach(_Lt_suffix, lt_car([m4_shiftn(3, $@)]),
+ [_Lt_prefix[]$3[]_Lt_suffix ])])))))])])dnl
+])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+ [m4_bmatch($3[]m4_defn([$1])$3, $3[]m4_re_escape([$2])$3,
+ [$5],
+ [m4_append([$1], [$2], [$3])$4])],
+ [m4_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$4])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+ [$5],
+ [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+ [lt_join(m4_quote(m4_default([$4], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/ltversion.m4 b/ltversion.m4
new file mode 100644
index 000000000000..7c82eacae1c3
--- /dev/null
+++ b/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers -*- Autoconf -*-
+#
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Written by Scott James Remnant.
+#
+## 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.
+
+# Generated from ltversion.in; do not edit by hand
+
+# serial 2435 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.1a])
+m4_define([LT_PACKAGE_REVISION], [1.2435])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.1a'
+macro_revision='1.2435'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index aa7e202640d6..f6c641836166 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,305 +1,639 @@
-2006-06-09 Nick Clifton <nickc@redhat.com>
+2007-07-03 Nathan Sidwell <nathan@codesourcery.com>
- * po/fi.po: Updated Finnish translation.
+ * m68k-dis.c (fetch_arg): Add E. Replace length switch with
+ direct masking.
+ (print_ins_arg): Add j & K operand types.
+ (match_insn_m68k): Check and skip initial '.' arg character.
+ (m68k_scan_mask): Likewise.
+ * m68k-opc.c (m68k_opcodes): Add coprocessor instructions.
-2006-06-07 Joseph S. Myers <joseph@codesourcery.com>
+2007-07-02 Alan Modra <amodra@bigpond.net.au>
- * po/Make-in (pdf, ps): New dummy targets.
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * config.in: Regenerate.
+ * po/POTFILES.in: Regenerate.
+ * po/opcodes.pot: Regenerate.
-2006-05-30 Nick Clifton <nickc@redhat.com>
+2007-06-30 H.J. Lu <hongjiu.lu@intel.com>
- * po/es.po: Updated Spanish translation.
+ * aclocal.m4: Regenerated.
+ * Makefile.in: Likewise.
-2006-05-26 Richard Sandiford <richard@codesourcery.com>
+2007-06-29 H.J. Lu <hongjiu.lu@intel.com>
- * m68k-opc.c (m68k_opcodes): Fix the masks of the Coldfire fmovemd
- and fmovem entries. Put register list entries before immediate
- mask entries. Use "l" rather than "L" in the fmovem entries.
- * m68k-dis.c (match_insn_m68k): Remove the PRIV argument and work it
- out from INFO.
- (m68k_scan_mask): New function, split out from...
- (print_insn_m68k): ...here. If no architecture has been set,
- first try printing an m680x0 instruction, then try a Coldfire one.
+ * i386-reg.tbl: Remove spaces before comments.
-2006-05-24 Nick Clifton <nickc@redhat.com>
+2007-06-29 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
- * po/ga.po: Updated Irish translation.
+ * cr16-opc.c: New file.
+ * cr16-dis.c: New file.
+ * Makefile.am: Entries for cr16.
+ * Makefile.in: Regenerate.
+ * cofigure.in: Add cr16 target information.
+ * configure : Regenerate.
+ * disassemble.c: Add cr16 target information.
-2006-05-22 Nick Clifton <nickc@redhat.com>
+2007-06-28 H.J. Lu <hongjiu.lu@intel.com>
- * crx-dis.c (EXTRACT): Make macro work on 64-bit hosts.
+ * Makefile.am (HFILES): Add i386-opc.h and i386-tbl.h.
+ (CFILES): Add i386-gen.c.
+ (i386-gen): New rule.
+ (i386-gen.o): Likewise.
+ (i386-tbl.h): Likewise.
+ Run "make dep-am".
+ * Makefile.in: Regenerated.
-2006-05-22 Nick Clifton <nickc@redhat.com>
+ * i386-gen.c: New file.
+ * i386-opc.tbl: Likewise.
+ * i386-reg.tbl: Likewise.
+ * i386-tbl.h: Likewise.
- * po/nl.po: Updated translation.
+ * i386-opc.c: Include "i386-tbl.h".
+ (i386_optab): Removed.
+ (i386_regtab): Likewise.
+ (i386_regtab_size): Likewise.
-2006-05-18 Alan Modra <amodra@bigpond.net.au>
+2007-06-26 Paul Brook <paul@codesourcery.com>
- * avr-dis.c (avr_operand): Warning fix.
+ * arm-dis.c (coprocessor_opcodes): Add fmxr/fmrx mvfr0/mvfr1.
-2006-05-04 Thiemo Seufer <ths@mips.com>
+2007-06-25 H.J. Lu <hongjiu.lu@intel.com>
- * mips-opc.c (mips_builtin_opcodes): Fix mftr argument order.
+ * i386-opc.h (regKludge): Renamed to ...
+ (RegKludge): This.
-2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+ * i386-opc.c (i386_optab): Replace regKludge with RegKludge.
- * po/POTFILES.in: Regenerated.
+2007-06-23 H.J. Lu <hongjiu.lu@intel.com>
-2006-04-12 Hochstein <hochstein@algo.informatik.tu-darmstadt.de>
+ PR binutils/4667
+ * i386-dis.c (EX): Removed.
+ (EMd): New.
+ (EMq): Likewise.
+ (EXd): Likewise.
+ (EXq): Likewise.
+ (EXx): Likewise.
+ (PREGRP93...PREGRP97): Likewise.
+ (dis386_twobyte): Updated.
+ (prefix_user_table): Updated. Add PREGRP93...PREGRP97.
+ (OP_EX): Remove Intel syntax handling.
- PR binutils/2454
- * avr-dis.c (avr_operand): Arrange for a comment to appear before
- the symolic form of an address, so that the output of objdump -d
- can be reassembled.
+2007-06-18 Nathan Sidwell <nathan@codesourcery.com>
-2006-04-10 DJ Delorie <dj@redhat.com>
+ * m68k-opc.c (m68k_opcodes): Add wdebugl variants.
- * m32c-asm.c: Regenerate.
+2007-06-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (ACLOCAL_AMFLAGS): Add -I ../config -I ../bfd.
+
+ * acinclude.m4: Removed.
+
+ * Makefile.in: Regenerated.
+ * doc/Makefile.in: Likewise.
+ * aclocal.m4: Likewise.
+ * configure: Likewise.
+
+2007-06-05 Paul Brook <paul@codesourcery.com>
+
+ * arm-dis.c (thumb32_opcodes): Display writeback ldrd/strd addresses.
+
+2007-05-24 Steve Ellcey <sje@cup.hp.com>
+
+ * Makefile.in: Regnerate.
+ * configure: Regenerate.
+ * aclocal.m4: Regenerate.
+
+2007-05-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ppc-dis.c (print_insn_powerpc): Don't skip all operands
+ after setting skip_optional.
+
+2007-05-16 Peter Bergner <bergner@vnet.ibm.com>
+
+ * ppc-dis.c (operand_value_powerpc, skip_optional_operands): New.
+ (print_insn_powerpc): Use the new operand_value_powerpc and
+ skip_optional_operands functions to omit or print all optional
+ operands as a group.
+ * ppc-opc.c (BFF, W, XFL_L, XWRA_MASK): New.
+ (XFL_MASK): Delete L and W bits from the mask.
+ (mtfsfi, mtfsfi.): Replace use of BF with BFF. Relpace use of XRA_MASK
+ with XWRA_MASK. Use W.
+ (mtfsf, mtfsf.): Use XFL_L and W.
+
+2007-05-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/4502
+ * i386-dis.c (Suffix3DNow): Replace "pfmulhrw" with "pmulhrw".
+
+2007-05-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-opc.h (ShortForm): Redefined.
+ (Jump): Likewise.
+ (JumpDword): Likewise.
+ (JumpByte): Likewise.
+ (JumpInterSegment): Likewise.
+ (FloatMF): Likewise.
+ (FloatR): Likewise.
+ (FloatD): Likewise.
+ (Size16): Likewise.
+ (Size32): Likewise.
+ (Size64): Likewise.
+ (IgnoreSize): Likewise.
+ (DefaultSize): Likewise.
+ (No_bSuf): Likewise.
+ (No_wSuf): Likewise.
+ (No_lSuf): Likewise.
+ (No_sSuf): Likewise.
+ (No_qSuf): Likewise.
+ (No_xSuf): Likewise.
+ (FWait): Likewise.
+ (IsString): Likewise.
+ (regKludge): Likewise.
+ (IsPrefix): Likewise.
+ (ImmExt): Likewise.
+ (NoRex64): Likewise.
+ (Rex64): Likewise.
+ (Ugh): Likewise.
+
+2007-05-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (threebyte_0x38_uses_DATA_prefix): Correct entries
+ for some SSE4 instructions.
+ (threebyte_0x3a_uses_DATA_prefix): Likewise.
+
+2007-05-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (CRC32_Fixup): Don't print suffix in Intel mode.
+
+ * i386-opc.c (i386_optab): Remove IgnoreSize and correct operand
+ type for crc32.
+
+2007-05-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (CRC32_Fixup): Properly handle Intel mode and
+ check data size prefix in 16bit mode.
+
+ * i386-opc.c (i386_optab): Default crc32 to non-8bit and
+ support Intel mode.
+
+2007-04-30 Mark Salter <msalter@redhat.com>
+
+ * frv-desc.c: Regenerate.
+ * frv-desc.h: Regenerate.
+
+2007-04-30 Alan Modra <amodra@bigpond.net.au>
+
+ PR 4436
+ * ppc-opc.c (powerpc_operands): Correct bitm for second entry of MBE.
+
+2007-04-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (modrm): Put reg before rm.
+
+2007-04-26 H.J. Lu <hongjiu.lu@intel.com>
-2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
+ PR binutils/4430
+ * i386-dis.c (print_displacement): New.
+ (OP_E): Call print_displacement instead of print_operand_value
+ to output displacement when either base or index exist. Print
+ the explicit zero displacement in 16bit mode.
- * Makefile.am: Add install-html target.
+2007-04-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/4429
+ * i386-dis.c (print_insn): Also swap the order of op_riprel
+ when swapping op_index. Break when the RIP relative address
+ is printed.
+ (OP_E): Properly handle RIP relative addressing and print the
+ explicit zero displacement for Intel mode.
+
+2007-04-27 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
* Makefile.in: Regenerate.
+ * ns32k-dis.c: Include sysdep.h first.
-2006-04-06 Nick Clifton <nickc@redhat.com>
+2007-04-24 Andreas Krebbel <krebbel1@de.ibm.com>
- * po/vi/po: Updated Vietnamese translation.
+ * opcodes/s390-opc.c (MASK_SSF_RRDRD): Fourth nybble belongs to the
+ opcode.
+ * opcodes/s390-opc.txt (pfpo, ectg, csst): Add new z9-ec instructions.
-2006-03-31 Paul Koning <ni1d@arrl.net>
+2007-04-24 Nick Clifton <nickc@redhat.com>
- * pdp11-opc.c (pdp11_opcodes): Fix opcode for SEC instruction.
+ * arm-dis.c (print_insn): Initialise type.
-2006-03-16 Bernd Schmidt <bernd.schmidt@analog.com>
+2007-04-24 Alan Modra <amodra@bigpond.net.au>
- * bfin-dis.c (decode_dsp32shiftimm_0): Simplify and correct the
- logic to identify halfword shifts.
+ * cgen-types.h: Include bfd_stdint.h, not stdint.h.
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
-2006-03-16 Paul Brook <paul@codesourcery.com>
+2007-04-23 Nathan Sidwell <nathan@codesourcery.com>
- * arm-dis.c (arm_opcodes): Rename swi to svc.
- (thumb_opcodes): Ditto.
+ * m68k-opc.c: Mark mcfisa_c instructions.
-2006-03-13 DJ Delorie <dj@redhat.com>
+2007-04-21 Richard Earnshaw <rearnsha@arm.com>
- * m32c-asm.c: Regenerate.
- * m32c-desc.c: Likewise.
- * m32c-desc.h: Likewise.
- * m32c-dis.c: Likewise.
- * m32c-ibld.c: Likewise.
- * m32c-opc.c: Likewise.
- * m32c-opc.h: Likewise.
-
-2006-03-10 DJ Delorie <dj@redhat.com>
-
- * m32c-desc.c: Regenerate with mul.l, mulu.l.
- * m32c-opc.c: Likewise.
- * m32c-opc.h: Likewise.
-
-
-2006-03-09 Nick Clifton <nickc@redhat.com>
-
- * po/sv.po: Updated Swedish translation.
-
-2006-03-07 H.J. Lu <hongjiu.lu@intel.com>
-
- PR binutils/2428
- * i386-dis.c (REP_Fixup): New function.
- (AL): Remove duplicate.
- (Xbr): New.
- (Xvr): Likewise.
- (Ybr): Likewise.
- (Yvr): Likewise.
- (indirDXr): Likewise.
- (ALr): Likewise.
- (eAXr): Likewise.
- (dis386): Updated entries of ins, outs, movs, lods and stos.
-
-2006-03-05 Nick Clifton <nickc@redhat.com>
-
- * cgen-ibld.in (insert_normal): Cope with attempts to insert a
- signed 32-bit value into an unsigned 32-bit field when the host is
- a 64-bit machine.
- * fr30-ibld.c: Regenerate.
- * frv-ibld.c: Regenerate.
- * ip2k-ibld.c: Regenerate.
- * iq2000-asm.c: Regenerate.
- * iq2000-ibld.c: Regenerate.
- * m32c-ibld.c: Regenerate.
- * m32r-ibld.c: Regenerate.
- * openrisc-ibld.c: Regenerate.
- * xc16x-ibld.c: Regenerate.
- * xstormy16-ibld.c: Regenerate.
+ * arm-dis.c (arm_opcodes): Disassemble to unified syntax.
+ (thumb_opcodes): Add missing white space in adr.
+ (arm_decode_shift): New parameter, print_shift. Only decode the
+ shift parameter if set. Adjust callers.
+ (print_insn_arm): Support for operand type q with no shift decode.
-2006-03-03 Shrirang Khisti <shrirangk@kpitcummins.com)
+2007-04-21 Alan Modra <amodra@bigpond.net.au>
- * xc16x-asm.c: Regenerate.
- * xc16x-dis.c: Regenerate.
+ * i386-opc.c (i386_float_regtab, i386_float_regtab_size): Delete.
+ Move contents to..
+ (i386_regtab): ..here.
+ * i386-opc.h (i386_float_regtab, i386_float_regtab_size): Delete.
+
+ * ppc-opc.c (powerpc_operands): Delete duplicate entries.
+ (BA_MASK, FXM_MASK, STRM_MASK, VA_MASK, VB_MASK, VC_MASK): Delete.
+ (VD_MASK, WS_MASK, MTMSRD_L, XRT_L): Delete.
+ (powerpc_opcodes): Replace uses of MTMSRD_L and XRT_L.
-2006-02-27 Carlos O'Donell <carlos@codesourcery.com>
+2007-04-20 Nathan Sidwell <nathan@codesourcery.com>
- * po/Make-in: Add html target.
+ * m68k-dis.c (print_insn_arg): Show c04 as rambar0 and c05 as
+ rambar1.
-2006-02-27 H.J. Lu <hongjiu.lu@intel.com>
+2007-04-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ppc-dis.c (print_insn_powerpc): Adjust for struct powerpc_operand
+ change.
+ * ppc-opc.c (powerpc_operands): Replace bit count with bit mask
+ in all entries. Add PPC_OPERAND_SIGNED to DE entry. Remove
+ references to following deleted functions.
+ (insert_bd, extract_bd, insert_dq, extract_dq): Delete.
+ (insert_ds, extract_ds, insert_de, extract_de): Delete.
+ (insert_des, extract_des, insert_li, extract_li): Delete.
+ (insert_nb, insert_rsq, insert_rtq, insert_ev2, extract_ev2): Delete.
+ (insert_ev4, extract_ev4, insert_ev8, extract_ev8): Delete.
+ (num_powerpc_operands): New constant.
+ (XSPRG_MASK): Remove entire SPRG field.
+ (powerpc_opcodes <bcctre, bcctrel>): Use XLBB_MASK not XLYBB_MASK.
+
+2007-04-20 Alan Modra <amodra@bigpond.net.au>
+
+ * ppc-opc.c (DCM, DGM, TE, RMC, R, SP, S): Correct shift.
+ (Z2_MASK): Define.
+ (powerpc_opcodes): Use Z2_MASK in all insns taking RMC operand.
+
+2007-04-20 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm-dis.c (print_insn): Only look for a mapping symbol in the section
+ being disassembled.
+
+2007-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * po/POTFILES.in: Regenerate.
- * i386-dis.c (IS_3BYTE_OPCODE): New for 3-byte opcodes used by
- Intel Merom New Instructions.
- (THREE_BYTE_0): Likewise.
- (THREE_BYTE_1): Likewise.
+2007-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * ppc-opc.c (powerpc_opcodes): Add cctpl, cctpm, cctph, db8cyc,
+ db10cyc, db12cyc, db16cyc.
+
+2007-04-19 Nathan Froyd <froydnj@codesourcery.com>
+
+ * ppc-opc.c (powerpc_opcodes): Recognize three-operand tlbsxe.
+
+2007-04-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (CRC32_Fixup): New.
+ (PREGRP85, PREGRP86, PREGRP87, PREGRP88, PREGRP89, PREGRP90,
+ PREGRP91): New.
+ (threebyte_0x38_uses_DATA_prefix): Updated for SSE4.2.
+ (threebyte_0x3a_uses_DATA_prefix): Likewise.
+ (prefix_user_table): Add PREGRP85, PREGRP86, PREGRP87,
+ PREGRP88, PREGRP89, PREGRP90 and PREGRP91.
(three_byte_table): Likewise.
- (dis386_twobyte): Use THREE_BYTE_0 for entry 0x38. Use
- THREE_BYTE_1 for entry 0x3a.
- (twobyte_has_modrm): Updated.
- (twobyte_uses_SSE_prefix): Likewise.
- (print_insn): Handle 3-byte opcodes used by Intel Merom New
- Instructions.
-
-2006-02-24 David S. Miller <davem@sunset.davemloft.net>
-
- * sparc-dis.c (v9_priv_reg_names): Add "gl" entry.
- (v9_hpriv_reg_names): New table.
- (print_insn_sparc): Allow values up to 16 for '?' and '!'.
- New cases '$' and '%' for read/write hyperprivileged register.
- * sparc-opc.c (sparc_opcodes): Add new entries for UA2005
- window handling and rdhpr/wrhpr instructions.
-
-2006-02-24 DJ Delorie <dj@redhat.com>
-
- * m32c-desc.c: Regenerate with linker relaxation attributes.
- * m32c-desc.h: Likewise.
- * m32c-dis.c: Likewise.
- * m32c-opc.c: Likewise.
-
-2006-02-24 Paul Brook <paul@codesourcery.com>
-
- * arm-dis.c (arm_opcodes): Add V7 instructions.
- (thumb32_opcodes): Ditto. Handle V7M MSR/MRS variants.
- (print_arm_address): New function.
- (print_insn_arm): Use it. Add 'P' and 'U' cases.
- (psr_name): New function.
- (print_insn_thumb32): Add 'U', 'C' and 'D' cases.
-
-2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
-
- * ia64-opc-i.c (bXc): New.
- (mXc): Likewise.
- (OpX2TaTbYaXcC): Likewise.
- (TF). Likewise.
- (TFCM). Likewise.
- (ia64_opcodes_i): Add instructions for tf.
-
- * ia64-opc.h (IMMU5b): New.
-
- * ia64-asmtab.c: Regenerated.
-
-2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
-
- * ia64-gen.c: Update copyright years.
- * ia64-opc-b.c: Likewise.
-
-2006-02-22 H.J. Lu <hongjiu.lu@intel.com>
-
- * ia64-gen.c (lookup_regindex): Handle ".vm".
- (print_dependency_table): Handle '\"'.
-
- * ia64-ic.tbl: Updated from SDM 2.2.
- * ia64-raw.tbl: Likewise.
- * ia64-waw.tbl: Likewise.
- * ia64-asmtab.c: Regenerated.
-
- * ia64-opc-b.c (ia64_opcodes_b): Add vmsw.0 and vmsw.1.
-
-2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
- Anil Paranjape <anilp1@kpitcummins.com>
- Shilin Shakti <shilins@kpitcummins.com>
-
- * xc16x-desc.h: New file
- * xc16x-desc.c: New file
- * xc16x-opc.h: New file
- * xc16x-opc.c: New file
- * xc16x-ibld.c: New file
- * xc16x-asm.c: New file
- * xc16x-dis.c: New file
- * Makefile.am: Entries for xc16x
- * Makefile.in: Regenerate
- * cofigure.in: Add xc16x target information.
- * configure: Regenerate.
- * disassemble.c: Add xc16x target information.
-2006-02-11 H.J. Lu <hongjiu.lu@intel.com>
+ * i386-opc.c (i386_optab): Add SSE4.2 opcodes.
- * i386-dis.c (dis386_twobyte): Use "movZ" for debug register
- moves.
+ * i386-opc.h (CpuSSE4_2): New.
+ (CpuSSE4): Likewise.
+ (CpuUnknownFlags): Add CpuSSE4_2.
-2006-02-11 H.J. Lu <hongjiu.lu@intel.com>
+2007-04-18 H.J. Lu <hongjiu.lu@intel.com>
- * i386-dis.c ('Z'): Add a new macro.
- (dis386_twobyte): Use "movZ" for control register moves.
+ * i386-dis.c (XMM_Fixup): New.
+ (Edqb): New.
+ (Edqd): New.
+ (XMM0): New.
+ (dqb_mode): New.
+ (dqd_mode): New.
+ (PREGRP39 ... PREGRP85): New.
+ (threebyte_0x38_uses_DATA_prefix): Updated for SSE4.
+ (threebyte_0x3a_uses_DATA_prefix): Likewise.
+ (prefix_user_table): Add PREGRP39 ... PREGRP85.
+ (three_byte_table): Likewise.
+ (putop): Handle 'K'.
+ (intel_operand_size): Handle dqb_mode, dqd_mode):
+ (OP_E): Likewise.
+ (OP_G): Likewise.
-2006-02-10 Nick Clifton <nickc@redhat.com>
+ * i386-opc.c (i386_optab): Add SSE4.1 opcodes.
- * iq2000-asm.c: Regenerate.
+ * i386-opc.h (CpuSSE4_1): New.
+ (CpuUnknownFlags): Add CpuSSE4_1.
+ (regKludge): Update comment.
-2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
+2007-04-18 Matthias Klose <doko@ubuntu.com>
- * m68k-dis.c (print_insn_m68k): Use bfd_m68k_mach_to_features.
+ * Makefile.am (libopcodes_la_LDFLAGS): Use bfd soversion.
+ * Makefile.in: Regenerate.
+
+2007-04-14 Steve Ellcey <sje@cup.hp.com>
+
+ * Makefile.am: Add ACLOCAL_AMFLAGS.
+ * Makefile.in: Regenerate.
-2006-01-26 David Ung <davidu@mips.com>
+2007-04-13 H.J. Lu <hongjiu.lu@intel.com>
- * mips-opc.c: Add I33 masks to these MIPS32R2 instructions: prefx,
- ceil.l.d, ceil.l.s, cvt.d.l, cvt.l.d, cvt.l.s, cvt.s.l, floor.l.d,
- floor.l.s, ldxc1, lwxc1, madd.d, madd.s, msub.d, msub.s, nmadd.d,
- nmadd.s, nmsub.d, nmsub.s, recip.d, recip.s, round.l.d, rsqrt.d,
- rsqrt.s, sdxc1, swxc1, trunc.l.d, trunc.l.s.
+ * i386-dis.c: Remove trailing white spaces.
+ * i386-opc.c: Likewise.
+ * i386-opc.h: Likewise.
-2006-01-18 Arnold Metselaar <arnoldm@sourceware.org>
+2007-04-11 H.J. Lu <hongjiu.lu@intel.com>
- * z80-dis.c (struct buffer, prt_d, prt_d_n, arit_d, ld_r_d,
- ld_d_r, pref_xd_cb): Use signed char to hold data to be
- disassembled.
- * z80-dis.c (TXTSIZ): Increase buffer size to 24, this fixes
- buffer overflows when disassembling instructions like
- ld (ix+123),0x23
- * z80-dis.c (opc_ind, pref_xd_cb): Suppress '+' in an indexed
- operand, if the offset is negative.
+ PR binutils/4333
+ * i386-dis.c (GRP1a): New.
+ (GRP1b ... GRPPADLCK2): Update index.
+ (dis386): Use GRP1a for entry 0x8f.
+ (mod, rm, reg): Removed. Replaced by ...
+ (modrm): This.
+ (grps): Add GRP1a.
-2006-01-17 Arnold Metselaar <arnoldm@sourceware.org>
+2007-04-09 Kazu Hirata <kazu@codesourcery.com>
- * z80-dis.c (struct buffer, prt_d, prt_d_n, pref_xd_cb): Use
- unsigned char to hold data to be disassembled.
+ * m68k-dis.c (print_insn_m68k): Restore info->fprintf_func and
+ info->print_address_func if longjmp is called.
-2006-01-17 Andreas Schwab <schwab@suse.de>
+2007-03-29 DJ Delorie <dj@redhat.com>
- PR binutils/1486
- * disassemble.c (disassemble_init_for_target): Set
- disassembler_needs_relocs for bfd_arch_arm.
+ * m32c-desc.c: Regenerate.
+ * m32c-dis.c: Regenerate.
+ * m32c-opc.c: Regenerate.
-2006-01-16 Paul Brook <paul@codesourcery.com>
+2007-03-28 H.J. Lu <hongjiu.lu@intel.com>
- * m68k-opc.c (m68k_opcodes): Fix opcodes for ColdFire f?abss,
- f?add?, and f?sub? instructions.
+ * i386-opc.c (i386_optab): Change InvMem to RegMem for mov and
+ movq. Remove InvMem from sldt, smsw and str.
-2006-01-16 Nick Clifton <nickc@redhat.com>
+ * i386-opc.h (InvMem): Renamed to ...
+ (RegMem): Update comments.
+ (AnyMem): Remove InvMem.
- * po/zh_CN.po: New Chinese (simplified) translation.
- * configure.in (ALL_LINGUAS): Add "zh_CH".
- * configure: Regenerate.
+2007-03-27 Paul Brook <paul@codesourcery.com>
+
+ * arm-dis.c (thumb_opcodes): Add entry for undefined insns (0xbe??).
-2006-01-05 Paul Brook <paul@codesourcery.com>
+2007-03-24 Paul Brook <paul@codesourcery.com>
- * m68k-opc.c (m68k_opcodes): Add missing ColdFire fdsqrtd entry.
+ * arm-dis.c (coprocessor_opcodes): Remove superfluous 0x.
+ (print_insn_coprocessor): Handle %<bitfield>x.
-2006-01-06 DJ Delorie <dj@redhat.com>
+2007-03-24 Paul Brook <paul@codesourcery.com>
+ Mark Shinwell <shinwell@codesourcery.com>
+ * arm-dis.c (arm_opcodes): Print SRS base register.
+
+2007-03-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (prefix_name): Replace rex64XYZ with rex.WRXB.
+
+ * i386-opc.c (i386_optab): Add rex.wrxb.
+
+2007-03-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (REX_MODE64): Remove definition.
+ (REX_EXTX): Likewise.
+ (REX_EXTY): Likewise.
+ (REX_EXTZ): Likewise.
+ (USED_REX): Use REX_OPCODE instead of 0x40.
+ Replace REX_MODE64, REX_EXTX, REX_EXTY and REX_EXTZ with REX_W,
+ REX_R, REX_X and REX_B respectively.
+
+2007-03-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/4218
+ * i386-dis.c (PREGRP38): New.
+ (dis386): Use PREGRP38 for 0x90.
+ (prefix_user_table): Add PREGRP38.
+ (print_insn): Set uses_REPZ_prefix to 1 for pause.
+ (NOP_Fixup1): Properly handle REX bits.
+ (NOP_Fixup2): Likewise.
+
+ * i386-opc.c (i386_optab): Allow %eax with xchg in 64bit.
+ Allow register with nop.
+
+2007-03-20 DJ Delorie <dj@redhat.com>
+
+ * m32c-asm.c: Regenerate.
* m32c-desc.c: Regenerate.
+ * m32c-desc.h: Regenerate.
+ * m32c-dis.h: Regenerate.
+ * m32c-ibld.c: Regenerate.
* m32c-opc.c: Regenerate.
* m32c-opc.h: Regenerate.
-2006-01-03 DJ Delorie <dj@redhat.com>
+2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-opc.c: Include "libiberty.h".
+ (i386_regtab): Remove the last entry.
+ (i386_regtab_size): New.
+ (i386_float_regtab_size): Likewise.
+
+ * i386-opc.h (i386_regtab_size): New.
+ (i386_float_regtab_size): Likewise.
+
+2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.am (CFILES): Add i386-opc.c.
+ (ALL_MACHINES): Add i386-opc.lo.
+ Run "make dep-am".
+ * Makefile.in: Regenerated.
+
+ * configure.in: Add i386-opc.lo for bfd_i386_arch.
+ * configure: Regenerated.
+
+ * i386-dis.c: Include "opcode/i386.h".
+ (MAXLEN): Renamed to MAX_MNEM_SIZE. Remove definition.
+ (FWAIT_OPCODE): Remove definition.
+ (UNIXWARE_COMPAT): Renamed to SYSV386_COMPAT. Remove definition.
+ (MAX_OPERANDS): Remove definition.
+
+ * i386-opc.c: New file.
+ * i386-opc.h: Likewise.
+
+2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makefile.in: Regenerated.
+
+2007-03-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (OP_Rd): Renamed to ...
+ (OP_R): This.
+ (Rd): Updated.
+ (Rm): Likewise.
+
+2007-03-08 Alan Modra <amodra@bigpond.net.au>
+
+ * fr30-asm.c: Regenerate.
+ * frv-asm.c: Regenerate.
+ * ip2k-asm.c: Regenerate.
+ * iq2000-asm.c: Regenerate.
+ * m32c-asm.c: Regenerate.
+ * m32r-asm.c: Regenerate.
+ * m32r-dis.c: Regenerate.
+ * mt-asm.c: Regenerate.
+ * mt-ibld.c: Regenerate.
+ * mt-opc.c: Regenerate.
+ * openrisc-asm.c: Regenerate.
+ * xc16x-asm.c: Regenerate.
+ * xstormy16-asm.c: Regenerate.
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * po/POTFILES.in: Regenerate.
+
+2007-03-06 Andreas Krebbel <krebbel1@de.ibm.com>
+
+ * opcodes/s390-opc.c (INSTR_RRE_FR, INSTR_RRF_F0FF2, INSTR_RRF_F0FR,
+ INSTR_RRF_UUFF, INSTR_RRF_0UFF, INSTR_RRF_FFFU, INSTR_RRR_F0FF): New
+ instruction formats added.
+ (MASK_RRE_FR, MASK_RRF_F0FF2, MASK_RRF_F0FR, MASK_RRF_UUFF,
+ MASK_RRF_0UFF, MASK_RRF_FFFU, MASK_RRR_F0FF): New instruction format
+ masks added.
+ * opcodes/s390-opc.txt (lpdfr - tgxt): Decimal floating point
+ instructions added.
+ * opcodes/s390-mkopc.c (s390_opcode_cpu_val): S390_OPCODE_Z9_EC added.
+ (main): z9-ec cpu type option added.
+ * include/opcode/s390.h (s390_opcode_cpu_val): S390_OPCODE_Z9_EC added.
+
+2007-02-22 DJ Delorie <dj@redhat.com>
+
+ * s390-opc.c (INSTR_SS_L2RDRD): New.
+ (MASK_SS_L2RDRD): New.
+ * s390-opc.txt (pka): Use it.
+
+2007-02-20 Thiemo Seufer <ths@mips.com>
+ Chao-Ying Fu <fu@mips.com>
+
+ * mips-dis.c (mips_arch_choices): Add DSP R2 support.
+ (print_insn_args): Add support for balign instruction.
+ * mips-opc.c (D33): New shortcut for DSP R2 instructions.
+ (mips_builtin_opcodes): Add DSP R2 instructions.
+
+2007-02-19 Andreas Krebbel <krebbel1@de.ibm.com>
+
+ * s390-opc.c (INSTR_RRF_U0FR, MASK_RRF_U0FR): Removed.
+ (INSTR_RRF_U0RF, MASK_RRF_U0RF): Added.
+ * s390-opc.txt (cfxbr, cfdbr, cfebr, cgebr, cgdbr, cgxbr, cger, cgdr,
+ cgxr, cfxr, cfdr, cfer): Instruction type set to INSTR_RRF_U0RF.
+
+2007-02-19 Andreas Krebbel <krebbel1@de.ibm.com>
+
+ * s390-opc.txt ("efpc", "sfpc"): Set to RRE_RR_OPT instruction type.
+ * s390-opc.c (s390_operands): Add RO_28 as optional gpr.
+ (INSTR_RRE_RR_OPT, MASK_RRE_RR_OPT): New instruction type for efpc
+ and sfpc.
+
+2007-02-16 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/4045
+ * avr-dis.c (comment_start): New variable, contains the prefix to
+ use when printing addresses in comments.
+ (print_insn_avr): Set comment_start to an empty space if there is
+ no symbol table available as the generic address printing code
+ will prefix the numeric value of the address with 0x.
+
+2007-02-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c: Updated to use an array of MAX_OPERANDS operands
+ in struct dis386.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+ Richard Sandiford <rsandifo@redhat.com>
+ DJ Delorie <dj@redhat.com>
+ Graydon Hoare <graydon@redhat.com>
+ Frank Ch. Eigler <fche@redhat.com>
+ Ben Elliston <bje@redhat.com>
+
+ * Makefile.am (HFILES): Add mep-desc.h mep-opc.h.
+ (CFILES): Add mep-*.c
+ (ALL_MACHINES): Add mep-*.lo.
+ (CLEANFILES): Add stamp-mep.
+ (CGEN_CPUS): Add mep.
+ (MEP_DEPS): New variable.
+ (mep-*): New targets.
+ * configure.in: Handle bfd_mep_arch.
+ * disassemble.c (ARCH_mep): New macro.
+ (disassembler): Handle bfd_arch_mep.
+ (disassemble_init_for_target): Likewise.
+ * mep-*: New files for Toshiba Media Processor (MeP).
+ * Makefile.in: Regenerated.
+ * configure: Regenerated.
+
+2007-02-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (OP_J): Undo the last change. Properly handle 64K
+ wrap around within the same segment in 16bit mode.
+
+2007-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (OP_J): Mask to 16bit only if there is a data16
+ prefix.
+
+2007-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * avr-dis.c (avr_operand): Correct PR number in comment.
+
+2007-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * disassemble.c (disassembler_usage): Call
+ print_i386_disassembler_options for i386 disassembler.
+
+ * i386-dis.c (print_i386_disassembler_options): New.
+ (print_insn): Support the new addr64 option.
+
+2007-02-02 Hiroki Kaminaga <kaminaga@sm.sony.co.jp>
+
+ * ppc-dis.c (powerpc_dialect): Handle ppc440.
+ * ppc-dis.c (print_ppc_disassembler_options): Note the -M440 can
+ be used.
+
+2007-02-02 Alan Modra <amodra@bigpond.net.au>
+
+ * ppc-opc.c (insert_bdm): -Many comment.
+ (valid_bo): Add "extract" param. Accept both powerpc and power4
+ BO fields when disassembling with -Many.
+ (insert_bo, extract_bo, insert_boe, extract_boe): Adjust valid_bo call.
+
+2007-01-08 Kazu Hirata <kazu@codesourcery.com>
+
+ * m68k-opc.c (m68k_opcodes): Replace cpu32 with
+ cpu32 | fido_a except on tbl instructions.
+
+2007-01-04 Paul Brook <paul@codesourcery.com>
+
+ * arm-dis.c (arm_opcodes): Fix cpsie and cpsid entries.
+
+2007-01-04 Andreas Schwab <schwab@suse.de>
+
+ * m68k-opc.c: Fix encoding of signed bit in the cpu32 tbls insns.
+
+2007-01-04 Julian Brown <julian@codesourcery.com>
- * cgen-ibld.in (extract_normal): Avoid memory range errors.
- * m32c-ibld.c: Regenerated.
+ * arm-dis.c (neon_opcode): Fix disassembly for vshl, vqshl, vrshl,
+ vqrshl instructions.
-For older changes see ChangeLog-2005
+For older changes see ChangeLog-2006
Local Variables:
mode: change-log
diff --git a/opcodes/ChangeLog-2006 b/opcodes/ChangeLog-2006
new file mode 100644
index 000000000000..cc5ec75d9c01
--- /dev/null
+++ b/opcodes/ChangeLog-2006
@@ -0,0 +1,837 @@
+2006-12-27 Kazu Hirata <kazu@codesourcery.com>
+
+ * m68k-dis.c (print_insn_arg): Add support for cac and mbb.
+
+2006-12-27 Kazu Hirata <kazu@codesourcery.com>
+
+ * m68k-opc.c (m68k_opcodes): Add sleep and trapx.
+
+2006-12-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (o_mode): New for 16-byte operand.
+ (intel_operand_size): Generate "OWORD PTR " for o_mode.
+ (CMPXCHG8B_Fixup): Set bytemode to o_mode instead of x_mode.
+
+2006-12-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (CMPXCHG8B_Fixup): New.
+ (grps): Use CMPXCHG8B_Fixup for cmpxchg8b.
+
+2006-12-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (Eq): Replaced by ...
+ (Mq): New. This.
+ (Ma): Defined with OP_M instead of OP_E.
+ (grps): Updated cmpxchg8b and vmptrst for Eq -> Mq.
+ (OP_M): Added bound, cmpxchg8b and vmptrst to bad modrm list.
+
+2006-12-11 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/Make-in (.po.gmo): Put gmo files in objdir.
+
+2006-12-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (X86_64_1): New.
+ (X86_64_2): Likewise.
+ (X86_64_3): Likewise.
+ (dis386): Replace 0x60, 0x61 and 0x62 entries with x86-64
+ tables.
+ (x86_64_table): Add entries for 0x60, 0x61 and 0x62.
+
+2006-12-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c: Adjust white spaces.
+
+2006-12-04 Jan Beulich <jbeulich@novell.com>
+
+ * i386-dis.c (OP_J): Update used_prefixes in v_mode.
+
+2006-11-30 Jan Beulich <jbeulich@novell.com>
+
+ * i386-dis.c (SEG_Fixup): Delete.
+ (Sv): Use OP_SEG.
+ (putop): New suffix character 'D'.
+ (dis386): Use it.
+ (grps): Likewise.
+ (OP_SEG): Handle bytemode other than w_mode.
+
+2006-11-30 Jan Beulich <jbeulich@novell.com>
+
+ * i386-dis.c (zAX): New.
+ (Xz): New.
+ (Yzr): New.
+ (z_mode): New.
+ (z_mode_ax_reg): New.
+ (putop): New suffix character 'G'.
+ (dis386): Use it for in, out, ins, and outs.
+ (intel_operand_size): Handle z_mode.
+ (OP_REG): Delete unreachable case indir_dx_reg.
+ (OP_IMREG): Fix Intel syntax output for case indir_dx_reg. Handle
+ z_mode_ax_reg.
+ (OP_ESreg): Fix Intel syntax operand size handling.
+ (OP_DSreg): Likewise.
+
+2006-11-30 Jan Beulich <jbeulich@novell.com>
+
+ * i386-dis.c (dis386): Use 'R' and 'O' for cbw/cwd unconditionally.
+ (putop): For 'O' suffix, print 'q' in Intel mode, and mark data prefix
+ used. For 'R' and 'W' suffix, simplify and fix Intel mode.
+
+2006-11-29 Paul Brook <paul@codesourcery.com>
+
+ * arm-dis.c (coprocessor_opcodes): Fix bitfields for fconstd/fconstd.
+
+2006-11-22 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * arm-dis.c (last_is_thumb): Delete.
+ (enum map_type, last_type): New.
+ (print_insn_data): New.
+ (get_sym_code_type): Take MAP_TYPE argument. Check the type of
+ the right symbol. Handle $d.
+ (print_insn): Check for mapping symbols even without a normal
+ symbol. Adjust searching. If $d is found see how much data
+ to print. Handle data.
+
+2006-11-16 Nathan Sidwell <nathan@codesourcery.com>
+
+ * m68k-opc.c (m68k_opcodes): Place trap instructions before set
+ conditionals. Add tpf coldfire instruction as alias for trapf.
+
+2006-11-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (print_insn): Check PREFIX_REPNZ before
+ PREFIX_DATA when prefix user table is used.
+
+2006-11-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (twobyte_uses_SSE_prefix): Renamed to ...
+ (twobyte_uses_DATA_prefix): This.
+ (twobyte_uses_REPNZ_prefix): New.
+ (twobyte_uses_REPZ_prefix): Likewise.
+ (threebyte_0x38_uses_DATA_prefix): Likewise.
+ (threebyte_0x38_uses_REPNZ_prefix): Likewise.
+ (threebyte_0x38_uses_REPZ_prefix): Likewise.
+ (threebyte_0x3a_uses_DATA_prefix): Likewise.
+ (threebyte_0x3a_uses_REPNZ_prefix): Likewise.
+ (threebyte_0x3a_uses_REPZ_prefix): Likewise.
+ (print_insn): Updated checking usages of DATA/REPNZ/REPZ
+ prefixes.
+
+2006-11-06 Troy Rollo <troy@corvu.com.au>
+
+ * ppc-opc.c: Restore COM to mfcr wrongly removed 2003-07-04.
+
+2006-11-01 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * score-opc.h (score_opcodes): Delete modifier '0x'.
+
+2006-10-30 Paul Brook <paul@codesourcery.com>
+
+ * arm-dis.c (last_is_thumb, last_mapping_sym, last_mapping_addr): New.
+ (get_sym_code_type): New function.
+ (print_insn): Search for mapping symbols.
+
+2006-10-31 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * score-dis.c (print_insn): Correct the error code to print
+ correct PCE instruction disassembly.
+
+2006-10-26 Ben Elliston <bje@au.ibm.com>
+ Anton Blanchard <anton@samba.org>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * ppc-opc.c (A_L, DCM, DGM, TE, RMC, R, SP, S, SH16, XRT_L, EH,
+ AFRALFRC_MASK, Z, ZRC, Z_MASK, XLRT_MASK, XEH_MASK): Define.
+ (POWER6): Define.
+ (powerpc_opcodes): Extend "lwarx", "ldarx", "dcbf", "fres", "fres.",
+ "frsqrtes", "frsqrtes." "fre", "fre.", "frsqrte" and "frsqrte.".
+ Add "doze", "nap", "sleep", "rvwinkle", "dcbfl", "prtyw", "prtyd",
+ "mfcfar", "cmpb", "lfdpx", "stfdpx", "mtcfar", "mffgpr", "mftgpr",
+ "lwzcix", "lhzcix", "lbzcix", "ldcix", "lfiwax", "stwcix", "sthcix",
+ "stbcix", "stdcix", "lfdp", "dadd", "dadd.", "dqua", "dqua.", "dmul",
+ "dmul.", "drrnd", "drrnd.", "dscli", "dscli.", "dquai", "dquai.",
+ "dscri", "dscri.", "drintx", "drintx.", "dcmpo", "dtstex", "dtstdc",
+ "dtstdg", "dtstsf", "drintn", "drintn.", "dctdp", "dctdp.", "dctfix",
+ "dctfix.", "ddedpd", "ddedpd.", "dxex", "dxex.", "dsub", "dsub.",
+ "ddiv", "ddiv.", "dcmpu", "drsp", "drsp.", "dcffix", "dcffix.",
+ "denbcd", "denbcd.", "diex", "diex.", "stfdp", "daddq", "daddq.",
+ "dquaq", "dquaq.", "fcpsgn", "fcpsgn.", "dmulq", "dmulq.",
+ "drrndq", "drrndq.", "dscliq", "dscliq.", "dquaiq", "dquaiq.",
+ "dscriq", "dscriq.", "drintxq", "drintxq.", "dcmpoq", "dtstexq",
+ "dtstdcq", "dtstdgq", "dtstsfq", "drintnq", "drintnq.",
+ "dctqpq", "dctqpq.", "dctfixq", "dctfixq.", "ddedpdq", "ddedpdq.",
+ "dxexq", "dxexq.", "dsubq", "dsubq.", "ddivq", "ddivq.", "dcmpuq",
+ "drdpq", "drdpq.", "dcffixq", "dcffixq.", "denbcdq", "denbcdq.",
+ "diexq" and "diexq." opcodes.
+
+2006-10-26 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * h8300-dis.c (bfd_h8_disassemble): Add missing consts.
+
+2006-10-25 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
+ Yukishige Shibata <shibata@rd.scei.sony.co.jp>
+ Nobuhisa Fujinami <fnami@rd.scei.sony.co.jp>
+ Takeaki Fukuoka <fukuoka@rd.scei.sony.co.jp>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * spu-dis.c: New file.
+ * spu-opc.c: New file.
+ * configure.in: Add SPU support.
+ * disassemble.c: Likewise.
+ * Makefile.am: Likewise. Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * po/POTFILES.in: Regenerate.
+
+2006-10-24 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ * ppc-opc.c (CELL): New define.
+ (powerpc_opcodes): Enable hrfid for Cell. Add ldbrx and stdbrx,
+ cell specific instructions. Add {st,l}x{r,l}{,l} cell specific
+ VMX instructions.
+ * ppc-dis.c (powerpc_dialect): Handle cell.
+
+2006-10-23 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+
+ * i386-dis.c (dis386): Add support for the change in POPCNT opcode in
+ amdfam10 architecture.
+ (PREGRP37): NEW.
+ (print_insn): Disallow REP prefix for POPCNT.
+
+2006-10-20 Andrew Stubbs <andrew.stubbs@st.com>
+
+ * sh-dis.c (print_insn_sh): Remove 0x from output to prevent GDB
+ duplicating it.
+
+2006-10-18 Dave Brolley <brolley@redhat.com>
+
+ * configure.in (BFD_MACHINES): Add cgen-bitset.lo for bfd_sh_arch.
+ * configure: Regenerated.
+
+2006-09-29 Alan Modra <amodra@bigpond.net.au>
+
+ * po/POTFILES.in: Regenerate.
+
+2006-09-26 Mark Shinwell <shinwell@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+ Ian Lance Taylor <ian@wasabisystems.com>
+ Ben Elliston <bje@wasabisystems.com>
+
+ * arm-dis.c (coprocessor_opcodes): The X-qualifier to WMADD may
+ only be used with the default multiply-add operation, so if N is
+ set, don't bother printing X. Add new iwmmxt instructions.
+ (IWMMXT_INSN_COUNT): Update.
+ (iwmmxt_wwssnames): Qualify "wwss" names at index 2, 6, 10 and 14
+ with a 'c' suffix.
+ (print_insn_coprocessor): Check for iWMMXt2. Handle format
+ specifiers 'r', 'i'.
+
+2006-09-24 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+
+ PR binutils/3100
+ * i386-dis.c (prefix_user_table): Fix the second operand of
+ maskmovdqu instruction to allow only %xmm register instead of
+ both %xmm register and memory.
+
+2006-09-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/3235
+ * i386-dis.c (OP_OFF64): Get 32bit offset if there is an
+ address size prefix.
+
+2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
+
+ * score-dis.c: New file.
+ * score-opc.h: New file.
+ * Makefile.am: Add Score files.
+ * Makefile.in: Regenerate.
+ * configure.in: Add support for Score target.
+ * configure: Regenerate.
+ * disassemble.c: Add support for Score target.
+
+2006-09-16 Nick Clifton <nickc@redhat.com>
+ Pedro Alves <pedro_alves@portugalmail.pt>
+
+ * arm-dis.c: Make use of new STRING_COMMA_LEN and CONST_STRNEQ
+ macros defined in bfd.h.
+ * cris-dis.c: Likewise.
+ * h8300-dis.c: Likewise.
+ * i386-dis.c: Likewise.
+ * ia64-gen.c: Likewise.
+ * mips-dis: Likewise.
+
+2006-09-04 Paul Brook <paul@codesourcery.com>
+
+ * arm-dis.c (neon_opcode): Fix suffix on VMOVN.
+
+2006-08-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (three_byte_table): Expand to 256 elements.
+
+2006-08-04 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+
+ PR binutils/3000
+ * i386-dis.c (MXC,EMC): Define.
+ (OP_MXC): New function to handle cvt* (convert instructions) between
+ %xmm and %mm register correctly.
+ (OP_EMC): ditto.
+ (prefix_user_table): Modified cvtpi2pd,cvtpd2pi and cvttpd2pi
+ instruction operands in PREGRP2,PREGRP3,PREGRP4 appropriately
+ with EMC/MXC.
+
+2006-07-29 Richard Sandiford <richard@codesourcery.com>
+
+ * m68k-opc.c (m68k_opcodes): Fix operand specificer in the Coldfire
+ "fdaddl" entry.
+
+2006-07-19 Paul Brook <paul@codesourcery.com>
+
+ * armd-dis.c (arm_opcodes): Fix rbit opcode.
+
+2006-07-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (grps): Change "sldtQ", "strQ" and "smswQ" to
+ "sldt", "str" and "smsw".
+
+2006-07-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/2829
+ * i386-dis.c (GRP11_C6): NEW.
+ (GRP11_C7): Likewise.
+ (GRP12): Updated.
+ (GRP13): Likewise.
+ (GRP14): Likewise.
+ (GRP15): Likewise.
+ (GRP16): Likewise.
+ (GRPAMD): Likewise.
+ (GRPPADLCK1): Likewise.
+ (GRPPADLCK2): Likewise.
+ (dis386): Use GRP11_C6 and GRP11_C7 for entres 0xc6 and 0xc7,
+ respectively.
+ (grps): Add entries for GRP11_C6 and GRP11_C7.
+
+2006-07-10 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
+ Michael Meissner <michael.meissner@amd.com>
+
+ * i386-dis.c (dis386): Add support for 4 operand instructions. Add
+ support for amdfam10 SSE4a/ABM instructions. Modify all
+ initializer macros to have additional arguments. Disallow REP
+ prefix for non-string instructions.
+ (print_insn): Ditto.
+
+2006-07-05 Julian Brown <julian@codesourcery.com>
+
+ * arm-dis.c (coprocessor): Alter fmsrr disassembly syntax.
+
+2006-06-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (dis386_twobyte): Use "nopQ" for 0x1f.
+ (twobyte_has_modrm): Set 1 for 0x1f.
+
+2006-06-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (NOP_Fixup): Removed.
+ (NOP_Fixup1): New.
+ (NOP_Fixup2): Likewise.
+ (dis386): Use NOP_Fixup1 and NOP_Fixup2 on 0x90.
+
+2006-06-12 Julian Brown <julian@codesourcery.com>
+
+ * arm-dis.c (print_insn_neon): Disassemble 32-bit immediates as signed
+ on 64-bit hosts.
+
+2006-06-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386.c (GRP10): Renamed to ...
+ (GRP12): This.
+ (GRP11): Renamed to ...
+ (GRP13): This.
+ (GRP12): Renamed to ...
+ (GRP14): This.
+ (GRP13): Renamed to ...
+ (GRP15): This.
+ (GRP14): Renamed to ...
+ (GRP16): This.
+ (dis386_twobyte): Updated.
+ (grps): Likewise.
+
+2006-06-09 Nick Clifton <nickc@redhat.com>
+
+ * po/fi.po: Updated Finnish translation.
+
+2006-06-07 Joseph S. Myers <joseph@codesourcery.com>
+
+ * po/Make-in (pdf, ps): New dummy targets.
+
+2006-06-06 Paul Brook <paul@codesourcery.com>
+
+ * arm-dis.c (coprocessor_opcodes): Add %c to unconditional arm
+ instructions.
+ (neon_opcodes): Add conditional execution specifiers.
+ (thumb_opcodes): Ditto.
+ (thumb32_opcodes): Ditto.
+ (arm_conditional): Change 0xe to "al" and add "" to end.
+ (ifthen_state, ifthen_next_state, ifthen_address): New.
+ (IFTHEN_COND): Define.
+ (print_insn_coprocessor, print_insn_neon): Print thumb conditions.
+ (print_insn_arm): Change %c to use new values of arm_conditional.
+ (print_insn_thumb16): Print thumb conditions. Add %I.
+ (print_insn_thumb32): Print thumb conditions.
+ (find_ifthen_state): New function.
+ (print_insn): Track IT block state.
+
+2006-06-06 Ben Elliston <bje@au.ibm.com>
+ Anton Blanchard <anton@samba.org>
+ Peter Bergner <bergner@vnet.ibm.com>
+
+ * ppc-dis.c (powerpc_dialect): Handle power6 option.
+ (print_ppc_disassembler_options): Mention power6.
+
+2006-06-06 Thiemo Seufer <ths@mips.com>
+ Chao-ying Fu <fu@mips.com>
+
+ * mips-dis.c: Disassemble DSP64 instructions for MIPS64R2.
+ * mips-opc.c: Add DSP64 instructions.
+
+2006-06-06 Alan Modra <amodra@bigpond.net.au>
+
+ * m68hc11-dis.c (print_insn): Warning fix.
+
+2006-06-05 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/Make-in (top_builddir): Define.
+
+2006-06-05 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+ * config.in: Regenerate.
+
+2006-05-31 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * Makefile.am (INCLUDES): Use @INCINTL@.
+ * acinclude.m4: Include new gettext macros.
+ * configure.in: Use ZW_GNU_GETTEXT_SISTER_DIR and AM_PO_SUBDIRS.
+ Remove local code for po/Makefile.
+ * Makefile.in, aclocal.m4, configure: Regenerated.
+
+2006-05-30 Nick Clifton <nickc@redhat.com>
+
+ * po/es.po: Updated Spanish translation.
+
+2006-05-25 Richard Sandiford <richard@codesourcery.com>
+
+ * m68k-opc.c (m68k_opcodes): Fix the masks of the Coldfire fmovemd
+ and fmovem entries. Put register list entries before immediate
+ mask entries. Use "l" rather than "L" in the fmovem entries.
+ * m68k-dis.c (match_insn_m68k): Remove the PRIV argument and work it
+ out from INFO.
+ (m68k_scan_mask): New function, split out from...
+ (print_insn_m68k): ...here. If no architecture has been set,
+ first try printing an m680x0 instruction, then try a Coldfire one.
+
+2006-05-24 Nick Clifton <nickc@redhat.com>
+
+ * po/ga.po: Updated Irish translation.
+
+2006-05-22 Nick Clifton <nickc@redhat.com>
+
+ * crx-dis.c (EXTRACT): Make macro work on 64-bit hosts.
+
+2006-05-22 Nick Clifton <nickc@redhat.com>
+
+ * po/nl.po: Updated translation.
+
+2006-05-18 Alan Modra <amodra@bigpond.net.au>
+
+ * avr-dis.c: Formatting fix.
+
+2006-05-14 Thiemo Seufer <ths@mips.com>
+
+ * mips16-opc.c (I1, I32, I64): New shortcut defines.
+ (mips16_opcodes): Change membership of instructions to their
+ lowest baseline ISA.
+
+2006-05-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (grps): Update sgdt/sidt for 64bit.
+
+2006-05-05 Julian Brown <julian@codesourcery.com>
+
+ * arm-dis.c (coprocessor_opcodes): Don't interpret fldmx/fstmx as
+ vldm/vstm.
+
+2006-05-05 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+
+ * mips-opc.c: Add macro for cache instruction.
+
+2006-05-04 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+ David Ung <davidu@mips.com>
+
+ * mips-dis.c (mips_arch_choices): Add smartmips instruction
+ decoding to MIPS32 and MIPS32R2. Limit DSP decoding to release
+ 2 ISAs. Add MIPS3D decoding to MIPS32R2. Add MT decoding to
+ MIPS64R2.
+ * mips-opc.c: fix random typos in comments.
+ (INSN_SMARTMIPS): New defines.
+ (mips_builtin_opcodes): Add paired single support for MIPS32R2.
+ Move bc3f, bc3fl, bc3t, bc3tl downwards. Move flushi, flushd,
+ flushid, wb upwards. Move cfc3, ctc3 downwards. Rework the
+ FP_S and FP_D flags to denote single and double register
+ accesses separately. Move dmfc3, dmtc3, mfc3, mtc3 downwards.
+ Allow jr.hb and jalr.hb for release 1 ISAs. Allow luxc1, suxc1
+ for MIPS32R2. Add SmartMIPS instructions. Add two-argument
+ variants of bc2f, bc2fl, bc2t, bc2tl. Add mfhc2, mthc2 to
+ release 2 ISAs.
+ * mips16-opc.c (mips16_opcodes): Add sdbbp instruction.
+
+2006-05-03 Thiemo Seufer <ths@mips.com>
+
+ * mips-opc.c (mips_builtin_opcodes): Fix mftr argument order.
+
+2006-05-02 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+ David Ung <davidu@mips.com>
+
+ * mips-dis.c (print_insn_args): Force mips16 to odd addresses.
+ (print_mips16_insn_arg): Force mips16 to odd addresses.
+
+2006-04-30 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+
+ * mips-opc.c (mips_builtin_opcodes): Add udi instructions
+ "udi0" to "udi15".
+ * mips-dis.c (print_insn_args): Adds udi argument handling.
+
+2006-04-28 James E Wilson <wilson@specifix.com>
+
+ * m68k-dis.c (match_insn_m68k): Restore fprintf_func before printing
+ error message.
+
+2006-04-28 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * mips-dis.c (mips_cp0sel_names_mips3264r2): Add MT register
+ names.
+
+2006-04-28 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+ David Ung <davidu@mips.com>
+
+ * mips-dis.c (print_insn_args): Add mips_opcode argument.
+ (print_insn_mips): Adjust print_insn_args call.
+
+2006-04-28 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * mips-dis.c (print_insn_args): Print $fcc only for FP
+ instructions, use $cc elsewise.
+
+2006-04-28 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * opcodes/mips-dis.c (mips16_to_32_reg_map, mips16_reg_names):
+ Map MIPS16 registers to O32 names.
+ (print_mips16_insn_arg): Use mips16_reg_names.
+
+2006-04-26 Julian Brown <julian@codesourcery.com>
+
+ * arm-dis.c (print_insn_neon): Disassemble floating-point constant
+ VMOV.
+
+2006-04-26 Nathan Sidwell <nathan@codesourcery.com>
+ Julian Brown <julian@codesourcery.com>
+
+ * opcodes/arm-dis.c (coprocessor_opcodes): Add %A, %B, %k, convert
+ %<code>[zy] into %[zy]<code>. Expand meaning of %<bitfield>['`?].
+ Add unified load/store instruction names.
+ (neon_opcode_table): New.
+ (arm_opcodes): Expand meaning of %<bitfield>['`?].
+ (arm_decode_bitfield): New.
+ (print_insn_coprocessor): Add pc argument. Add %A & %B specifiers.
+ Use arm_decode_bitfield and adjust numeric specifiers. Adjust %z & %y.
+ (print_insn_neon): New.
+ (print_insn_arm): Adjust print_insn_coprocessor call. Call
+ print_insn_neon. Use arm_decode_bitfield and adjust numeric specifiers.
+ (print_insn_thumb32): Likewise.
+
+2006-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * Makefile.am: Run "make dep-am".
+ * Makefile.in: Regenerate.
+
+2006-04-19 Alan Modra <amodra@bigpond.net.au>
+
+ * avr-dis.c (avr_operand): Warning fix.
+
+ * configure: Regenerate.
+
+2006-04-16 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * po/POTFILES.in: Regenerated.
+
+2006-04-12 Hochstein <hochstein@algo.informatik.tu-darmstadt.de>
+
+ PR binutils/2454
+ * avr-dis.c (avr_operand): Arrange for a comment to appear before
+ the symolic form of an address, so that the output of objdump -d
+ can be reassembled.
+
+2006-04-10 DJ Delorie <dj@redhat.com>
+
+ * m32c-asm.c: Regenerate.
+
+2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
+
+ * Makefile.am: Add install-html target.
+ * Makefile.in: Regenerate.
+
+2006-04-06 Nick Clifton <nickc@redhat.com>
+
+ * po/vi/po: Updated Vietnamese translation.
+
+2006-03-31 Paul Koning <ni1d@arrl.net>
+
+ * pdp11-opc.c (pdp11_opcodes): Fix opcode for SEC instruction.
+
+2006-03-16 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * bfin-dis.c (decode_dsp32shiftimm_0): Simplify and correct the
+ logic to identify halfword shifts.
+
+2006-03-16 Paul Brook <paul@codesourcery.com>
+
+ * arm-dis.c (arm_opcodes): Rename swi to svc.
+ (thumb_opcodes): Ditto.
+
+2006-03-13 DJ Delorie <dj@redhat.com>
+
+ * m32c-asm.c: Regenerate.
+ * m32c-desc.c: Likewise.
+ * m32c-desc.h: Likewise.
+ * m32c-dis.c: Likewise.
+ * m32c-ibld.c: Likewise.
+ * m32c-opc.c: Likewise.
+ * m32c-opc.h: Likewise.
+
+2006-03-10 DJ Delorie <dj@redhat.com>
+
+ * m32c-desc.c: Regenerate with mul.l, mulu.l.
+ * m32c-opc.c: Likewise.
+ * m32c-opc.h: Likewise.
+
+
+2006-03-09 Nick Clifton <nickc@redhat.com>
+
+ * po/sv.po: Updated Swedish translation.
+
+2006-03-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/2428
+ * i386-dis.c (REP_Fixup): New function.
+ (AL): Remove duplicate.
+ (Xbr): New.
+ (Xvr): Likewise.
+ (Ybr): Likewise.
+ (Yvr): Likewise.
+ (indirDXr): Likewise.
+ (ALr): Likewise.
+ (eAXr): Likewise.
+ (dis386): Updated entries of ins, outs, movs, lods and stos.
+
+2006-03-05 Nick Clifton <nickc@redhat.com>
+
+ * cgen-ibld.in (insert_normal): Cope with attempts to insert a
+ signed 32-bit value into an unsigned 32-bit field when the host is
+ a 64-bit machine.
+ * fr30-ibld.c: Regenerate.
+ * frv-ibld.c: Regenerate.
+ * ip2k-ibld.c: Regenerate.
+ * iq2000-asm.c: Regenerate.
+ * iq2000-ibld.c: Regenerate.
+ * m32c-ibld.c: Regenerate.
+ * m32r-ibld.c: Regenerate.
+ * openrisc-ibld.c: Regenerate.
+ * xc16x-ibld.c: Regenerate.
+ * xstormy16-ibld.c: Regenerate.
+
+2006-03-03 Shrirang Khisti <shrirangk@kpitcummins.com)
+
+ * xc16x-asm.c: Regenerate.
+ * xc16x-dis.c: Regenerate.
+
+2006-02-27 Carlos O'Donell <carlos@codesourcery.com>
+
+ * po/Make-in: Add html target.
+
+2006-02-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (IS_3BYTE_OPCODE): New for 3-byte opcodes used by
+ Intel Merom New Instructions.
+ (THREE_BYTE_0): Likewise.
+ (THREE_BYTE_1): Likewise.
+ (three_byte_table): Likewise.
+ (dis386_twobyte): Use THREE_BYTE_0 for entry 0x38. Use
+ THREE_BYTE_1 for entry 0x3a.
+ (twobyte_has_modrm): Updated.
+ (twobyte_uses_SSE_prefix): Likewise.
+ (print_insn): Handle 3-byte opcodes used by Intel Merom New
+ Instructions.
+
+2006-02-24 David S. Miller <davem@sunset.davemloft.net>
+
+ * sparc-dis.c (v9_priv_reg_names): Add "gl" entry.
+ (v9_hpriv_reg_names): New table.
+ (print_insn_sparc): Allow values up to 16 for '?' and '!'.
+ New cases '$' and '%' for read/write hyperprivileged register.
+ * sparc-opc.c (sparc_opcodes): Add new entries for UA2005
+ window handling and rdhpr/wrhpr instructions.
+
+2006-02-24 DJ Delorie <dj@redhat.com>
+
+ * m32c-desc.c: Regenerate with linker relaxation attributes.
+ * m32c-desc.h: Likewise.
+ * m32c-dis.c: Likewise.
+ * m32c-opc.c: Likewise.
+
+2006-02-24 Paul Brook <paul@codesourcery.com>
+
+ * arm-dis.c (arm_opcodes): Add V7 instructions.
+ (thumb32_opcodes): Ditto. Handle V7M MSR/MRS variants.
+ (print_arm_address): New function.
+ (print_insn_arm): Use it. Add 'P' and 'U' cases.
+ (psr_name): New function.
+ (print_insn_thumb32): Add 'U', 'C' and 'D' cases.
+
+2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ia64-opc-i.c (bXc): New.
+ (mXc): Likewise.
+ (OpX2TaTbYaXcC): Likewise.
+ (TF). Likewise.
+ (TFCM). Likewise.
+ (ia64_opcodes_i): Add instructions for tf.
+
+ * ia64-opc.h (IMMU5b): New.
+
+ * ia64-asmtab.c: Regenerated.
+
+2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ia64-gen.c: Update copyright years.
+ * ia64-opc-b.c: Likewise.
+
+2006-02-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ia64-gen.c (lookup_regindex): Handle ".vm".
+ (print_dependency_table): Handle '\"'.
+
+ * ia64-ic.tbl: Updated from SDM 2.2.
+ * ia64-raw.tbl: Likewise.
+ * ia64-waw.tbl: Likewise.
+ * ia64-asmtab.c: Regenerated.
+
+ * ia64-opc-b.c (ia64_opcodes_b): Add vmsw.0 and vmsw.1.
+
+2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
+ Anil Paranjape <anilp1@kpitcummins.com>
+ Shilin Shakti <shilins@kpitcummins.com>
+
+ * xc16x-desc.h: New file
+ * xc16x-desc.c: New file
+ * xc16x-opc.h: New file
+ * xc16x-opc.c: New file
+ * xc16x-ibld.c: New file
+ * xc16x-asm.c: New file
+ * xc16x-dis.c: New file
+ * Makefile.am: Entries for xc16x
+ * Makefile.in: Regenerate
+ * cofigure.in: Add xc16x target information.
+ * configure: Regenerate.
+ * disassemble.c: Add xc16x target information.
+
+2006-02-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (dis386_twobyte): Use "movZ" for debug register
+ moves.
+
+2006-02-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c ('Z'): Add a new macro.
+ (dis386_twobyte): Use "movZ" for control register moves.
+
+2006-02-10 Nick Clifton <nickc@redhat.com>
+
+ * iq2000-asm.c: Regenerate.
+
+2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
+
+ * m68k-dis.c (print_insn_m68k): Use bfd_m68k_mach_to_features.
+
+2006-01-26 David Ung <davidu@mips.com>
+
+ * mips-opc.c: Add I33 masks to these MIPS32R2 instructions: prefx,
+ ceil.l.d, ceil.l.s, cvt.d.l, cvt.l.d, cvt.l.s, cvt.s.l, floor.l.d,
+ floor.l.s, ldxc1, lwxc1, madd.d, madd.s, msub.d, msub.s, nmadd.d,
+ nmadd.s, nmsub.d, nmsub.s, recip.d, recip.s, round.l.d, rsqrt.d,
+ rsqrt.s, sdxc1, swxc1, trunc.l.d, trunc.l.s.
+
+2006-01-18 Arnold Metselaar <arnoldm@sourceware.org>
+
+ * z80-dis.c (struct buffer, prt_d, prt_d_n, arit_d, ld_r_d,
+ ld_d_r, pref_xd_cb): Use signed char to hold data to be
+ disassembled.
+ * z80-dis.c (TXTSIZ): Increase buffer size to 24, this fixes
+ buffer overflows when disassembling instructions like
+ ld (ix+123),0x23
+ * z80-dis.c (opc_ind, pref_xd_cb): Suppress '+' in an indexed
+ operand, if the offset is negative.
+
+2006-01-17 Arnold Metselaar <arnoldm@sourceware.org>
+
+ * z80-dis.c (struct buffer, prt_d, prt_d_n, pref_xd_cb): Use
+ unsigned char to hold data to be disassembled.
+
+2006-01-17 Andreas Schwab <schwab@suse.de>
+
+ PR binutils/1486
+ * disassemble.c (disassemble_init_for_target): Set
+ disassembler_needs_relocs for bfd_arch_arm.
+
+2006-01-16 Paul Brook <paul@codesourcery.com>
+
+ * m68k-opc.c (m68k_opcodes): Fix opcodes for ColdFire f?abss,
+ f?add?, and f?sub? instructions.
+
+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-05 Paul Brook <paul@codesourcery.com>
+
+ * m68k-opc.c (m68k_opcodes): Add missing ColdFire fdsqrtd entry.
+
+2006-01-06 DJ Delorie <dj@redhat.com>
+
+ * m32c-desc.c: Regenerate.
+ * m32c-opc.c: Regenerate.
+ * m32c-opc.h: Regenerate.
+
+2006-01-03 DJ Delorie <dj@redhat.com>
+
+ * cgen-ibld.in (extract_normal): Avoid memory range errors.
+ * m32c-ibld.c: Regenerated.
+
+For older changes see ChangeLog-2005
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/opcodes/Makefile.am b/opcodes/Makefile.am
index 57bdb4a716a3..99a2b765fe10 100644
--- a/opcodes/Makefile.am
+++ b/opcodes/Makefile.am
@@ -1,6 +1,7 @@
## Process this file with automake to generate Makefile.in
AUTOMAKE_OPTIONS = 1.9 cygnus
+ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd
SUBDIRS = po
@@ -32,6 +33,8 @@ HFILES = \
fr30-desc.h fr30-opc.h \
frv-desc.h frv-opc.h \
h8500-opc.h \
+ i386-opc.h \
+ i386-tbl.h \
ia64-asmtab.h \
ia64-opc.h \
ip2k-desc.h ip2k-opc.h \
@@ -39,8 +42,10 @@ HFILES = \
m32c-desc.h m32c-opc.h \
m32r-desc.h m32r-opc.h \
mcore-opc.h \
+ mep-desc.h mep-opc.h \
mt-desc.h mt-opc.h \
openrisc-desc.h openrisc-opc.h \
+ score-opc.h \
sh-opc.h \
sh64-opc.h \
sysdep.h \
@@ -63,6 +68,8 @@ CFILES = \
cgen-bitset.c \
cgen-dis.c \
cgen-opc.c \
+ cr16-dis.c \
+ cr16-opc.c \
cris-dis.c \
cris-opc.c \
crx-dis.c \
@@ -91,6 +98,8 @@ CFILES = \
i370-dis.c \
i370-opc.c \
i386-dis.c \
+ i386-opc.c \
+ i386-gen.c \
i860-dis.c \
i960-dis.c \
ia64-dis.c \
@@ -131,6 +140,11 @@ CFILES = \
m88k-dis.c \
maxq-dis.c \
mcore-dis.c \
+ mep-asm.c \
+ mep-desc.c \
+ mep-dis.c \
+ mep-ibld.c \
+ mep-opc.c \
mips-dis.c \
mips-opc.c \
mips16-opc.c \
@@ -162,11 +176,14 @@ CFILES = \
s390-mkopc.c \
s390-opc.c \
s390-dis.c \
+ score-dis.c \
sh-dis.c \
sh64-dis.c \
sh64-opc.c \
sparc-dis.c \
sparc-opc.c \
+ spu-dis.c \
+ spu-opc.c \
tic30-dis.c \
tic4x-dis.c \
tic54x-dis.c \
@@ -205,6 +222,8 @@ ALL_MACHINES = \
cgen-bitset.lo \
cgen-dis.lo \
cgen-opc.lo \
+ cr16-dis.lo \
+ cr16-opc.lo \
cris-dis.lo \
cris-opc.lo \
crx-dis.lo \
@@ -228,6 +247,7 @@ ALL_MACHINES = \
h8500-dis.lo \
hppa-dis.lo \
i386-dis.lo \
+ i386-opc.lo \
i370-dis.lo \
i370-opc.lo \
i860-dis.lo \
@@ -266,6 +286,11 @@ ALL_MACHINES = \
m10300-opc.lo \
maxq-dis.lo \
mcore-dis.lo \
+ mep-asm.lo \
+ mep-desc.lo \
+ mep-dis.lo \
+ mep-ibld.lo \
+ mep-opc.lo \
mips-dis.lo \
mips-opc.lo \
mips16-opc.lo \
@@ -293,11 +318,14 @@ ALL_MACHINES = \
ppc-opc.lo \
s390-dis.lo \
s390-opc.lo \
+ score-dis.lo \
sh-dis.lo \
sh64-dis.lo \
sh64-opc.lo \
sparc-dis.lo \
sparc-opc.lo \
+ spu-dis.lo \
+ spu-opc.lo \
tic30-dis.lo \
tic4x-dis.lo \
tic54x-dis.lo \
@@ -328,7 +356,7 @@ OFILES = @BFD_MACHINES@
# that's where the version number in Makefile comes from.
CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/configure.in
-INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(INCDIR) -I$(BFDDIR) @HDEFINES@ -I$(srcdir)/../intl -I../intl
+INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(INCDIR) -I$(BFDDIR) @HDEFINES@ @INCINTL@
disassemble.lo: disassemble.c $(INCDIR)/dis-asm.h
$(LIBTOOL) --mode=compile $(COMPILE) -c @archdefs@ $(srcdir)/disassemble.c
@@ -341,7 +369,7 @@ libopcodes_la_SOURCES = dis-buf.c disassemble.c dis-init.c
# if host != build.
libopcodes_la_DEPENDENCIES = $(OFILES)
libopcodes_la_LIBADD = $(OFILES) @WIN32LIBADD@
-libopcodes_la_LDFLAGS = -release $(VERSION) @WIN32LDFLAGS@
+libopcodes_la_LDFLAGS = -release `cat ../bfd/libtool-soversion` @WIN32LDFLAGS@
# libtool will build .libs/libopcodes.a. We create libopcodes.a in
# the build directory so that we don't have to convert all the
@@ -392,7 +420,7 @@ uninstall_libopcodes:
CLEANFILES = \
stamp-ip2k stamp-m32c stamp-m32r stamp-fr30 stamp-frv \
- stamp-openrisc stamp-iq2000 stamp-mt stamp-xstormy16 stamp-xc16x\
+ stamp-openrisc stamp-iq2000 stamp-mep stamp-mt stamp-xstormy16 stamp-xc16x\
libopcodes.a stamp-lib dep.sed DEP DEPA DEP1 DEP2
@@ -408,7 +436,7 @@ CGENDEPS = \
$(CGENDIR)/opc-opinst.scm \
cgen-asm.in cgen-dis.in cgen-ibld.in
-CGEN_CPUS = fr30 frv ip2k m32c m32r mt openrisc xc16x xstormy16
+CGEN_CPUS = fr30 frv ip2k m32c m32r mep mt openrisc xc16x xstormy16
if CGEN_MAINT
IP2K_DEPS = stamp-ip2k
@@ -416,6 +444,7 @@ M32C_DEPS = stamp-m32c
M32R_DEPS = stamp-m32r
FR30_DEPS = stamp-fr30
FRV_DEPS = stamp-frv
+MEP_DEPS = stamp-mep
MT_DEPS = stamp-mt
OPENRISC_DEPS = stamp-openrisc
IQ2000_DEPS = stamp-iq2000
@@ -427,6 +456,7 @@ M32C_DEPS =
M32R_DEPS =
FR30_DEPS =
FRV_DEPS =
+MEP_DEPS =
MT_DEPS =
OPENRISC_DEPS =
IQ2000_DEPS =
@@ -500,6 +530,12 @@ stamp-frv: $(CGENDEPS) $(srcdir)/../cpu/frv.cpu $(srcdir)/../cpu/frv.opc
$(MAKE) run-cgen arch=frv prefix=frv options= \
archfile=$(srcdir)/../cpu/frv.cpu opcfile=$(srcdir)/../cpu/frv.opc extrafiles=
+$(srcdir)/mep-desc.h $(srcdir)/mep-desc.c $(srcdir)/mep-opc.h $(srcdir)/mep-opc.c $(srcdir)/mep-ibld.c $(srcdir)/mep-asm.c $(srcdir)/mep-dis.c: $(MEP_DEPS)
+ @true
+stamp-mep: $(CGENDEPS) $(CPUDIR)/mep.cpu $(CPUDIR)/mep-default.cpu $(CPUDIR)/mep-core.cpu $(CPUDIR)/mep-h1.cpu $(CPUDIR)/mep-ext-cop.cpu $(CPUDIR)/mep-sample-ucidsp.cpu $(CPUDIR)/mep-rhcop.cpu $(CPUDIR)/mep-fmax.cpu $(CPUDIR)/mep.opc
+ $(MAKE) run-cgen arch=mep prefix=mep options= \
+ archfile=$(CPUDIR)/mep.cpu opcfile=$(CPUDIR)/mep.opc extrafiles=
+
$(srcdir)/mt-desc.h $(srcdir)/mt-desc.c $(srcdir)/mt-opc.h $(srcdir)/mt-opc.c $(srcdir)/mt-ibld.c $(srcdir)/mt-asm.c $(srcdir)/mt-dis.c: $(MT_DEPS)
@true
stamp-mt: $(CGENDEPS) $(srcdir)/../cpu/mt.cpu $(srcdir)/../cpu/mt.opc
@@ -534,6 +570,14 @@ stamp-xc16x: $(CGENDEPS) $(CPUDIR)/xc16x.cpu $(CPUDIR)/xc16x.opc
$(MAKE) run-cgen arch=xc16x prefix=xc16x options= \
archfile=$(CPUDIR)/xc16x.cpu opcfile=$(CPUDIR)/xc16x.opc extrafiles=
+i386-gen: i386-gen.o
+ $(LINK) i386-gen.o $(LIBIBERTY)
+
+i386-gen.o: i386-gen.c i386-opc.h
+
+i386-tbl.h: @MAINT@ i386-gen i386-opc.tbl i386-reg.tbl
+ ./i386-gen --srcdir $(srcdir) > $(srcdir)/i386-tbl.h
+
ia64-gen: ia64-gen.o
$(LINK) ia64-gen.o $(LIBIBERTY)
@@ -601,131 +645,176 @@ dep-am: DEP
# DO NOT DELETE THIS LINE -- mkdep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
alpha-dis.lo: alpha-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/alpha.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/alpha.h
alpha-opc.lo: alpha-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/opcode/alpha.h $(BFD_H) $(INCDIR)/symcat.h \
- opintl.h
+ $(INCDIR)/opcode/alpha.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h opintl.h
arc-dis.lo: arc-dis.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/arc.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/arc.h \
- $(INCDIR)/elf/reloc-macros.h opintl.h arc-dis.h arc-ext.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/arc.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/elf/arc.h $(INCDIR)/elf/reloc-macros.h \
+ opintl.h arc-dis.h arc-ext.h
arc-opc.lo: arc-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/arc.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/opcode/arc.h \
opintl.h
arc-ext.lo: arc-ext.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h arc-ext.h $(INCDIR)/libiberty.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h arc-ext.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
arm-dis.lo: arm-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/arm.h \
- opintl.h $(INCDIR)/safe-ctype.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/arm.h opintl.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/floatformat.h $(INCDIR)/ansidecl.h $(INCDIR)/coff/internal.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(BFDDIR)/elf-bfd.h \
$(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
- $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h
avr-dis.lo: avr-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h opintl.h \
- $(INCDIR)/libiberty.h $(INCDIR)/opcode/avr.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/opcode/avr.h
bfin-dis.lo: bfin-dis.c $(INCDIR)/opcode/bfin.h $(INCDIR)/dis-asm.h \
$(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
cgen-asm.lo: cgen-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h $(BFD_H) \
- $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
opintl.h
cgen-bitset.lo: cgen-bitset.c $(INCDIR)/libiberty.h \
$(INCDIR)/ansidecl.h $(INCDIR)/opcode/cgen-bitset.h
cgen-dis.lo: cgen-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen.h \
- $(INCDIR)/opcode/cgen-bitset.h
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(BFD_H) \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h
cgen-opc.lo: cgen-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h $(BFD_H) \
- $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen.h $(INCDIR)/opcode/cgen-bitset.h
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h
+cr16-dis.lo: cr16-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h sysdep.h config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/opcode/cr16.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h
+cr16-opc.lo: cr16-opc.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cr16.h
cris-dis.lo: cris-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h sysdep.h config.h \
- $(INCDIR)/opcode/cris.h $(INCDIR)/libiberty.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/opcode/cris.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h
cris-opc.lo: cris-opc.c $(INCDIR)/opcode/cris.h
crx-dis.lo: crx-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h sysdep.h config.h \
- $(INCDIR)/opcode/crx.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/opcode/crx.h
crx-opc.lo: crx-opc.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/symcat.h $(INCDIR)/opcode/crx.h
d10v-dis.lo: d10v-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/d10v.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
d10v-opc.lo: d10v-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/d10v.h
d30v-dis.lo: d30v-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/d30v.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h opintl.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h opintl.h
d30v-opc.lo: d30v-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/d30v.h
dlx-dis.lo: dlx-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/dlx.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/dlx.h
dis-buf.lo: dis-buf.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h opintl.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ opintl.h
dis-init.lo: dis-init.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H)
disassemble.lo: disassemble.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
fr30-asm.lo: fr30-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h fr30-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h fr30-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
fr30-desc.lo: fr30-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h fr30-opc.h opintl.h $(INCDIR)/libiberty.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h fr30-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/xregex.h $(INCDIR)/xregex2.h
fr30-dis.lo: fr30-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- fr30-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h fr30-opc.h \
+ opintl.h
fr30-ibld.lo: fr30-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
fr30-opc.h opintl.h $(INCDIR)/safe-ctype.h
fr30-opc.lo: fr30-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h fr30-opc.h $(INCDIR)/libiberty.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h fr30-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
frv-asm.lo: frv-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h frv-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h frv-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ frv-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h frv-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
frv-desc.lo: frv-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h frv-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h frv-opc.h opintl.h $(INCDIR)/libiberty.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ frv-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h frv-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/xregex.h $(INCDIR)/xregex2.h
frv-dis.lo: frv-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
frv-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- frv-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h frv-opc.h \
+ opintl.h
frv-ibld.lo: frv-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h frv-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h frv-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
frv-opc.h opintl.h $(INCDIR)/safe-ctype.h
frv-opc.lo: frv-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h frv-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h frv-opc.h $(INCDIR)/libiberty.h \
- $(INCDIR)/elf/frv.h $(INCDIR)/elf/reloc-macros.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ frv-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h frv-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/elf/frv.h \
+ $(INCDIR)/elf/reloc-macros.h
h8300-dis.lo: h8300-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/h8300.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h opintl.h $(INCDIR)/libiberty.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h opintl.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h
h8500-dis.lo: h8500-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- h8500-opc.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h \
- opintl.h
+ h8500-opc.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h opintl.h
hppa-dis.lo: hppa-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(BFDDIR)/libhppa.h \
- $(INCDIR)/opcode/hppa.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFDDIR)/libhppa.h $(INCDIR)/opcode/hppa.h
i370-dis.lo: i370-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/i370.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/i370.h
i370-opc.lo: i370-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/i370.h
i386-dis.lo: i386-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h sysdep.h config.h \
- opintl.h
+ $(INCDIR)/ansidecl.h opintl.h $(INCDIR)/opcode/i386.h
+i386-opc.lo: i386-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h i386-opc.h \
+ $(INCDIR)/opcode/i386.h i386-tbl.h
+i386-gen.lo: i386-gen.c $(INCDIR)/getopt.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h i386-opc.h \
+ $(INCDIR)/opcode/i386.h
i860-dis.lo: i860-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/opcode/i860.h
i960-dis.lo: i960-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
ia64-dis.lo: ia64-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/opcode/ia64.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/opcode/ia64.h \
+ $(BFD_H)
ia64-opc-a.lo: ia64-opc-a.c ia64-opc.h $(INCDIR)/opcode/ia64.h \
$(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
ia64-opc-b.lo: ia64-opc-b.c ia64-opc.h $(INCDIR)/opcode/ia64.h \
@@ -738,288 +827,424 @@ ia64-opc-m.lo: ia64-opc-m.c ia64-opc.h $(INCDIR)/opcode/ia64.h \
$(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
ia64-opc-d.lo: ia64-opc-d.c
ia64-opc.lo: ia64-opc.c $(INCDIR)/ansidecl.h sysdep.h \
- config.h $(INCDIR)/libiberty.h ia64-asmtab.h $(INCDIR)/opcode/ia64.h \
- $(BFD_H) $(INCDIR)/symcat.h ia64-asmtab.c
+ config.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ ia64-asmtab.h $(INCDIR)/opcode/ia64.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h ia64-asmtab.c
ia64-gen.lo: ia64-gen.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h sysdep.h config.h $(INCDIR)/getopt.h \
- ia64-opc.h $(INCDIR)/opcode/ia64.h $(BFD_H) $(INCDIR)/symcat.h \
- ia64-opc-a.c ia64-opc-i.c ia64-opc-m.c ia64-opc-b.c \
- ia64-opc-f.c ia64-opc-x.c ia64-opc-d.c
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h sysdep.h \
+ config.h $(INCDIR)/getopt.h ia64-opc.h $(INCDIR)/opcode/ia64.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h ia64-opc-a.c \
+ ia64-opc-i.c ia64-opc-m.c ia64-opc-b.c ia64-opc-f.c \
+ ia64-opc-x.c ia64-opc-d.c
ia64-asmtab.lo: ia64-asmtab.c
ip2k-asm.lo: ip2k-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h ip2k-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h ip2k-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
ip2k-desc.lo: ip2k-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h ip2k-opc.h opintl.h $(INCDIR)/libiberty.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h ip2k-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/xregex.h $(INCDIR)/xregex2.h
ip2k-dis.lo: ip2k-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- ip2k-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h ip2k-opc.h \
+ opintl.h
ip2k-ibld.lo: ip2k-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h ip2k-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
ip2k-opc.h opintl.h $(INCDIR)/safe-ctype.h
ip2k-opc.lo: ip2k-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h ip2k-opc.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h ip2k-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
iq2000-asm.lo: iq2000-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h iq2000-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h iq2000-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
iq2000-desc.lo: iq2000-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h iq2000-opc.h opintl.h $(INCDIR)/libiberty.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h iq2000-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/xregex.h $(INCDIR)/xregex2.h
iq2000-dis.lo: iq2000-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- iq2000-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h iq2000-opc.h \
+ opintl.h
iq2000-ibld.lo: iq2000-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h iq2000-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
iq2000-opc.h opintl.h $(INCDIR)/safe-ctype.h
iq2000-opc.lo: iq2000-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h iq2000-opc.h $(INCDIR)/libiberty.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h iq2000-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
m32c-asm.lo: m32c-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32c-opc.h cgen-types.h cgen-ops.h \
- opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32c-opc.h \
+ cgen-types.h ../bfd/bfd_stdint.h cgen-ops.h opintl.h \
+ $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
m32c-desc.lo: m32c-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32c-opc.h cgen-types.h cgen-ops.h \
- opintl.h $(INCDIR)/libiberty.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32c-opc.h \
+ cgen-types.h ../bfd/bfd_stdint.h cgen-ops.h opintl.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/xregex.h \
+ $(INCDIR)/xregex2.h
m32c-dis.lo: m32c-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- m32c-opc.h cgen-types.h cgen-ops.h opintl.h $(INCDIR)/elf/m32c.h \
- $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32c-opc.h \
+ cgen-types.h ../bfd/bfd_stdint.h cgen-ops.h opintl.h \
+ $(INCDIR)/elf/m32c.h $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h
m32c-ibld.lo: m32c-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h m32c-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- m32c-opc.h cgen-types.h cgen-ops.h opintl.h $(INCDIR)/safe-ctype.h
-m32c-opc.lo: m32c-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
$(BFD_H) $(INCDIR)/symcat.h m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32c-opc.h cgen-types.h cgen-ops.h \
- $(INCDIR)/libiberty.h
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
+ m32c-opc.h cgen-types.h ../bfd/bfd_stdint.h cgen-ops.h \
+ opintl.h $(INCDIR)/safe-ctype.h
+m32c-opc.lo: m32c-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32c-opc.h \
+ cgen-types.h ../bfd/bfd_stdint.h cgen-ops.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h
m32r-asm.lo: m32r-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32r-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32r-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
m32r-desc.lo: m32r-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32r-opc.h opintl.h $(INCDIR)/libiberty.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32r-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/xregex.h $(INCDIR)/xregex2.h
m32r-dis.lo: m32r-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- m32r-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32r-opc.h \
+ opintl.h
m32r-ibld.lo: m32r-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
m32r-opc.h opintl.h $(INCDIR)/safe-ctype.h
m32r-opc.lo: m32r-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32r-opc.h $(INCDIR)/libiberty.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32r-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
m32r-opinst.lo: m32r-opinst.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32r-opc.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32r-opc.h
m68hc11-dis.lo: m68hc11-dis.c $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/m68hc11.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
m68hc11-opc.lo: m68hc11-opc.c $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/m68hc11.h
m68k-dis.lo: m68k-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/floatformat.h \
- $(INCDIR)/libiberty.h opintl.h $(INCDIR)/opcode/m68k.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/floatformat.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+ opintl.h $(INCDIR)/opcode/m68k.h
m68k-opc.lo: m68k-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/m68k.h
m88k-dis.lo: m88k-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/m88k.h \
- opintl.h $(INCDIR)/libiberty.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/m88k.h opintl.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h
maxq-dis.lo: maxq-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/maxq.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/maxq.h
mcore-dis.lo: mcore-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- mcore-opc.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ mcore-opc.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h
+mep-asm.lo: mep-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ mep-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mep-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+mep-desc.lo: mep-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ mep-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mep-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
+mep-dis.lo: mep-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ mep-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mep-opc.h \
+ opintl.h $(INCDIR)/elf/mep.h $(INCDIR)/elf/reloc-macros.h \
+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h
+mep-ibld.lo: mep-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h mep-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
+ mep-opc.h opintl.h $(INCDIR)/safe-ctype.h
+mep-opc.lo: mep-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ mep-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mep-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/elf/mep.h \
+ $(INCDIR)/elf/reloc-macros.h
mips-dis.lo: mips-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
- $(INCDIR)/opcode/mips.h opintl.h $(BFDDIR)/elf-bfd.h \
- $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/opcode/mips.h \
+ opintl.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h
mips-opc.lo: mips-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/mips.h
mips16-opc.lo: mips16-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/mips.h
m10200-dis.lo: m10200-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/mn10200.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h opintl.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h opintl.h
m10200-opc.lo: m10200-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/mn10200.h
m10300-dis.lo: m10300-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/mn10300.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h opintl.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h opintl.h
m10300-opc.lo: m10300-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/mn10300.h
mmix-dis.lo: mmix-dis.c $(INCDIR)/opcode/mmix.h $(INCDIR)/dis-asm.h \
$(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
- opintl.h
+ $(INCDIR)/ansidecl.h $(BFD_H) opintl.h
mmix-opc.lo: mmix-opc.c $(INCDIR)/opcode/mmix.h $(INCDIR)/symcat.h
mt-asm.lo: mt-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h mt-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h mt-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ mt-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mt-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
mt-desc.lo: mt-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h mt-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h mt-opc.h opintl.h $(INCDIR)/libiberty.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ mt-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mt-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/xregex.h $(INCDIR)/xregex2.h
mt-dis.lo: mt-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
mt-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- mt-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mt-opc.h \
+ opintl.h
mt-ibld.lo: mt-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h mt-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h mt-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
mt-opc.h opintl.h $(INCDIR)/safe-ctype.h
mt-opc.lo: mt-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h mt-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h mt-opc.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h
-ns32k-dis.lo: ns32k-dis.c $(BFD_H) $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/dis-asm.h \
- $(INCDIR)/opcode/ns32k.h opintl.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ mt-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mt-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+ns32k-dis.lo: ns32k-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/dis-asm.h \
+ $(BFD_H) $(INCDIR)/opcode/ns32k.h opintl.h
openrisc-asm.lo: openrisc-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h openrisc-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h openrisc-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
openrisc-desc.lo: openrisc-desc.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/symcat.h openrisc-desc.h \
+ $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/symcat.h openrisc-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- openrisc-opc.h opintl.h $(INCDIR)/libiberty.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h openrisc-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
openrisc-dis.lo: openrisc-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- openrisc-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h openrisc-opc.h \
+ opintl.h
openrisc-ibld.lo: openrisc-ibld.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h \
- openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- openrisc-opc.h opintl.h $(INCDIR)/safe-ctype.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(BFD_H) $(INCDIR)/symcat.h openrisc-desc.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h openrisc-opc.h \
+ opintl.h $(INCDIR)/safe-ctype.h
openrisc-opc.lo: openrisc-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h openrisc-opc.h $(INCDIR)/libiberty.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h openrisc-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
or32-dis.lo: or32-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/opcode/or32.h \
$(INCDIR)/safe-ctype.h
or32-opc.lo: or32-opc.c $(INCDIR)/safe-ctype.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/or32.h
pdp11-dis.lo: pdp11-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/pdp11.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/pdp11.h
pdp11-opc.lo: pdp11-opc.c $(INCDIR)/opcode/pdp11.h
pj-dis.lo: pj-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/pj.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
pj-opc.lo: pj-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/pj.h
ppc-dis.lo: ppc-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/ppc.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/ppc.h
ppc-opc.lo: ppc-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/ppc.h opintl.h
s390-mkopc.lo: s390-mkopc.c
s390-opc.lo: s390-opc.c $(INCDIR)/ansidecl.h $(INCDIR)/opcode/s390.h \
s390-opc.tab
s390-dis.lo: s390-dis.c $(INCDIR)/ansidecl.h sysdep.h \
- config.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h \
- $(INCDIR)/opcode/s390.h
+ config.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/s390.h
+score-dis.lo: score-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ score-opc.h opintl.h $(BFD_H) $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/score.h $(INCDIR)/elf/reloc-macros.h
sh-dis.lo: sh-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- sh-opc.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/dis-asm.h
+ sh-opc.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/dis-asm.h $(BFD_H)
sh64-dis.lo: sh64-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h sysdep.h config.h \
- sh64-opc.h $(INCDIR)/libiberty.h $(BFDDIR)/elf-bfd.h \
- $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
- $(BFDDIR)/elf32-sh64.h
+ $(INCDIR)/ansidecl.h sh64-opc.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/elf32-sh64.h
sh64-opc.lo: sh64-opc.c sh64-opc.h
sparc-dis.lo: sparc-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/opcode/sparc.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h opintl.h
+ $(INCDIR)/opcode/sparc.h $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h opintl.h
sparc-opc.lo: sparc-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/opcode/sparc.h
+ $(INCDIR)/opcode/sparc.h $(INCDIR)/ansidecl.h
+spu-dis.lo: spu-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/spu.h $(INCDIR)/opcode/spu-insns.h
+spu-opc.lo: spu-opc.c $(INCDIR)/opcode/spu.h $(INCDIR)/opcode/spu-insns.h \
+ $(INCDIR)/opcode/spu-insns.h
tic30-dis.lo: tic30-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/tic30.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/tic30.h
tic4x-dis.lo: tic4x-dis.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/tic4x.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/tic4x.h
tic54x-dis.lo: tic54x-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/tic54x.h \
- $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/tic54x.h $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h
tic54x-opc.lo: tic54x-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/tic54x.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/tic54x.h
tic80-dis.lo: tic80-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/tic80.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
tic80-opc.lo: tic80-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/tic80.h
v850-dis.lo: v850-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/v850.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h opintl.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h opintl.h
v850-opc.lo: v850-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/v850.h opintl.h
vax-dis.lo: vax-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/vax.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
w65-dis.lo: w65-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- w65-opc.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ w65-opc.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h
+xc16x-asm.lo: xc16x-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ xc16x-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xc16x-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+xc16x-desc.lo: xc16x-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ xc16x-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xc16x-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
+xc16x-dis.lo: xc16x-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ xc16x-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xc16x-opc.h \
+ opintl.h
+xc16x-ibld.lo: xc16x-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h xc16x-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
+ xc16x-opc.h opintl.h $(INCDIR)/safe-ctype.h
+xc16x-opc.lo: xc16x-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ xc16x-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xc16x-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
xstormy16-asm.lo: xstormy16-asm.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/symcat.h xstormy16-desc.h \
+ $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/symcat.h xstormy16-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- xstormy16-opc.h opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xstormy16-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
xstormy16-desc.lo: xstormy16-desc.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/symcat.h xstormy16-desc.h \
+ $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/symcat.h xstormy16-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- xstormy16-opc.h opintl.h $(INCDIR)/libiberty.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xstormy16-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
xstormy16-dis.lo: xstormy16-dis.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h \
- $(INCDIR)/libiberty.h xstormy16-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h xstormy16-opc.h opintl.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h xstormy16-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
+ xstormy16-opc.h opintl.h
xstormy16-ibld.lo: xstormy16-ibld.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h \
- xstormy16-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- xstormy16-opc.h opintl.h $(INCDIR)/safe-ctype.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(BFD_H) $(INCDIR)/symcat.h xstormy16-desc.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xstormy16-opc.h \
+ opintl.h $(INCDIR)/safe-ctype.h
xstormy16-opc.lo: xstormy16-opc.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/symcat.h xstormy16-desc.h \
+ $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/symcat.h xstormy16-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- xstormy16-opc.h $(INCDIR)/libiberty.h
-xc16x-asm.lo: xc16x-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h xc16x-desc.h $(INCDIR)/opcode/cgen.h \
- xc16x-opc.h opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
-xc16x-desc.lo: xc16x-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h xc16x-desc.h $(INCDIR)/opcode/cgen.h \
- xc16x-opc.h opintl.h $(INCDIR)/libiberty.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h
-xc16x-dis.lo: xc16x-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
- xc16x-desc.h $(INCDIR)/opcode/cgen.h xc16x-opc.h opintl.h
-xc16x-ibld.lo: xc16x-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h xc16x-desc.h \
- $(INCDIR)/opcode/cgen.h xc16x-opc.h opintl.h $(INCDIR)/safe-ctype.h
-xc16x-opc.lo: xc16x-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h xc16x-desc.h $(INCDIR)/opcode/cgen.h \
- xc16x-opc.h $(INCDIR)/libiberty.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xstormy16-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
xtensa-dis.lo: xtensa-dis.c $(INCDIR)/xtensa-isa.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h sysdep.h \
- config.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ sysdep.h config.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h
z80-dis.lo: z80-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
z8k-dis.lo: z8k-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h z8k-opc.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ z8k-opc.h
z8kgen.lo: z8kgen.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/opcodes/Makefile.in b/opcodes/Makefile.in
index 78faab920aeb..29252e9ded25 100644
--- a/opcodes/Makefile.in
+++ b/opcodes/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -15,8 +15,6 @@
@SET_MAKE@
-SOURCES = libopcodes.c $(libopcodes_la_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
@@ -48,11 +46,16 @@ DIST_COMMON = $(srcdir)/../config.guess $(srcdir)/../config.sub \
$(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__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \
+ $(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/../config/acx.m4 \
+ $(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/gettext-sister.m4 \
+ $(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/nls.m4 $(top_srcdir)/../config/po.m4 \
+ $(top_srcdir)/../config/progtest.m4 \
+ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \
+ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \
+ $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -83,11 +86,11 @@ depcomp =
am__depfiles_maybe =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = libopcodes.c $(libopcodes_la_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
@@ -100,7 +103,6 @@ ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
@@ -124,18 +126,19 @@ CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
+DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
-GMOFILES = @GMOFILES@
+FGREP = @FGREP@
+GENCAT = @GENCAT@
GMSGFMT = @GMSGFMT@
-GT_NO = @GT_NO@
-GT_YES = @GT_YES@
+GREP = @GREP@
HDEFINES = @HDEFINES@
-INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
+INCINTL = @INCINTL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_LIBBFD_FALSE = @INSTALL_LIBBFD_FALSE@
INSTALL_LIBBFD_TRUE = @INSTALL_LIBBFD_TRUE@
@@ -143,10 +146,10 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTOBJEXT = @INSTOBJEXT@
-INTLDEPS = @INTLDEPS@
-INTLLIBS = @INTLLIBS@
-INTLOBJS = @INTLOBJS@
+LD = @LD@
LDFLAGS = @LDFLAGS@
+LIBINTL = @LIBINTL@
+LIBINTL_DEP = @LIBINTL_DEP@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
@@ -158,6 +161,8 @@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
NO_WERROR = @NO_WERROR@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
@@ -167,13 +172,12 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-POFILES = @POFILES@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
-USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
@@ -182,6 +186,7 @@ WIN32LIBADD = @WIN32LIBADD@
XGETTEXT = @XGETTEXT@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
@@ -212,10 +217,10 @@ host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
-l = @l@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -231,6 +236,7 @@ target_noncanonical = @target_noncanonical@
target_os = @target_os@
target_vendor = @target_vendor@
AUTOMAKE_OPTIONS = 1.9 cygnus
+ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd
SUBDIRS = po
INCDIR = $(srcdir)/../include
BFDDIR = $(srcdir)/../bfd
@@ -250,6 +256,8 @@ HFILES = \
fr30-desc.h fr30-opc.h \
frv-desc.h frv-opc.h \
h8500-opc.h \
+ i386-opc.h \
+ i386-tbl.h \
ia64-asmtab.h \
ia64-opc.h \
ip2k-desc.h ip2k-opc.h \
@@ -257,8 +265,10 @@ HFILES = \
m32c-desc.h m32c-opc.h \
m32r-desc.h m32r-opc.h \
mcore-opc.h \
+ mep-desc.h mep-opc.h \
mt-desc.h mt-opc.h \
openrisc-desc.h openrisc-opc.h \
+ score-opc.h \
sh-opc.h \
sh64-opc.h \
sysdep.h \
@@ -282,6 +292,8 @@ CFILES = \
cgen-bitset.c \
cgen-dis.c \
cgen-opc.c \
+ cr16-dis.c \
+ cr16-opc.c \
cris-dis.c \
cris-opc.c \
crx-dis.c \
@@ -310,6 +322,8 @@ CFILES = \
i370-dis.c \
i370-opc.c \
i386-dis.c \
+ i386-opc.c \
+ i386-gen.c \
i860-dis.c \
i960-dis.c \
ia64-dis.c \
@@ -350,6 +364,11 @@ CFILES = \
m88k-dis.c \
maxq-dis.c \
mcore-dis.c \
+ mep-asm.c \
+ mep-desc.c \
+ mep-dis.c \
+ mep-ibld.c \
+ mep-opc.c \
mips-dis.c \
mips-opc.c \
mips16-opc.c \
@@ -381,11 +400,14 @@ CFILES = \
s390-mkopc.c \
s390-opc.c \
s390-dis.c \
+ score-dis.c \
sh-dis.c \
sh64-dis.c \
sh64-opc.c \
sparc-dis.c \
sparc-opc.c \
+ spu-dis.c \
+ spu-opc.c \
tic30-dis.c \
tic4x-dis.c \
tic54x-dis.c \
@@ -424,6 +446,8 @@ ALL_MACHINES = \
cgen-bitset.lo \
cgen-dis.lo \
cgen-opc.lo \
+ cr16-dis.lo \
+ cr16-opc.lo \
cris-dis.lo \
cris-opc.lo \
crx-dis.lo \
@@ -447,6 +471,7 @@ ALL_MACHINES = \
h8500-dis.lo \
hppa-dis.lo \
i386-dis.lo \
+ i386-opc.lo \
i370-dis.lo \
i370-opc.lo \
i860-dis.lo \
@@ -485,6 +510,11 @@ ALL_MACHINES = \
m10300-opc.lo \
maxq-dis.lo \
mcore-dis.lo \
+ mep-asm.lo \
+ mep-desc.lo \
+ mep-dis.lo \
+ mep-ibld.lo \
+ mep-opc.lo \
mips-dis.lo \
mips-opc.lo \
mips16-opc.lo \
@@ -512,11 +542,14 @@ ALL_MACHINES = \
ppc-opc.lo \
s390-dis.lo \
s390-opc.lo \
+ score-dis.lo \
sh-dis.lo \
sh64-dis.lo \
sh64-opc.lo \
sparc-dis.lo \
sparc-opc.lo \
+ spu-dis.lo \
+ spu-opc.lo \
tic30-dis.lo \
tic4x-dis.lo \
tic54x-dis.lo \
@@ -546,7 +579,7 @@ OFILES = @BFD_MACHINES@
# We should reconfigure whenever bfd/configure.in changes, because
# that's where the version number in Makefile comes from.
CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/configure.in
-INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(INCDIR) -I$(BFDDIR) @HDEFINES@ -I$(srcdir)/../intl -I../intl
+INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(INCDIR) -I$(BFDDIR) @HDEFINES@ @INCINTL@
libopcodes_la_SOURCES = dis-buf.c disassemble.c dis-init.c
# It's desirable to list ../bfd/libbfd.la in DEPENDENCIES and LIBADD.
# Unfortunately this causes libtool to add -L$(libdir), referring to the
@@ -555,7 +588,7 @@ libopcodes_la_SOURCES = dis-buf.c disassemble.c dis-init.c
# if host != build.
libopcodes_la_DEPENDENCIES = $(OFILES)
libopcodes_la_LIBADD = $(OFILES) @WIN32LIBADD@
-libopcodes_la_LDFLAGS = -release $(VERSION) @WIN32LDFLAGS@
+libopcodes_la_LDFLAGS = -release `cat ../bfd/libtool-soversion` @WIN32LDFLAGS@
# libtool will build .libs/libopcodes.a. We create libopcodes.a in
# the build directory so that we don't have to convert all the
@@ -565,7 +598,7 @@ noinst_LIBRARIES = libopcodes.a
POTFILES = $(HFILES) $(CFILES)
CLEANFILES = \
stamp-ip2k stamp-m32c stamp-m32r stamp-fr30 stamp-frv \
- stamp-openrisc stamp-iq2000 stamp-mt stamp-xstormy16 stamp-xc16x\
+ stamp-openrisc stamp-iq2000 stamp-mep stamp-mt stamp-xstormy16 stamp-xc16x\
libopcodes.a stamp-lib dep.sed DEP DEPA DEP1 DEP2
CGENDIR = @cgendir@
@@ -579,7 +612,7 @@ CGENDEPS = \
$(CGENDIR)/opc-opinst.scm \
cgen-asm.in cgen-dis.in cgen-ibld.in
-CGEN_CPUS = fr30 frv ip2k m32c m32r mt openrisc xc16x xstormy16
+CGEN_CPUS = fr30 frv ip2k m32c m32r mep mt openrisc xc16x xstormy16
@CGEN_MAINT_FALSE@IP2K_DEPS =
@CGEN_MAINT_TRUE@IP2K_DEPS = stamp-ip2k
@CGEN_MAINT_FALSE@M32C_DEPS =
@@ -590,6 +623,8 @@ CGEN_CPUS = fr30 frv ip2k m32c m32r mt openrisc xc16x xstormy16
@CGEN_MAINT_TRUE@FR30_DEPS = stamp-fr30
@CGEN_MAINT_FALSE@FRV_DEPS =
@CGEN_MAINT_TRUE@FRV_DEPS = stamp-frv
+@CGEN_MAINT_FALSE@MEP_DEPS =
+@CGEN_MAINT_TRUE@MEP_DEPS = stamp-mep
@CGEN_MAINT_FALSE@MT_DEPS =
@CGEN_MAINT_TRUE@MT_DEPS = stamp-mt
@CGEN_MAINT_FALSE@OPENRISC_DEPS =
@@ -1042,6 +1077,12 @@ stamp-frv: $(CGENDEPS) $(srcdir)/../cpu/frv.cpu $(srcdir)/../cpu/frv.opc
$(MAKE) run-cgen arch=frv prefix=frv options= \
archfile=$(srcdir)/../cpu/frv.cpu opcfile=$(srcdir)/../cpu/frv.opc extrafiles=
+$(srcdir)/mep-desc.h $(srcdir)/mep-desc.c $(srcdir)/mep-opc.h $(srcdir)/mep-opc.c $(srcdir)/mep-ibld.c $(srcdir)/mep-asm.c $(srcdir)/mep-dis.c: $(MEP_DEPS)
+ @true
+stamp-mep: $(CGENDEPS) $(CPUDIR)/mep.cpu $(CPUDIR)/mep-default.cpu $(CPUDIR)/mep-core.cpu $(CPUDIR)/mep-h1.cpu $(CPUDIR)/mep-ext-cop.cpu $(CPUDIR)/mep-sample-ucidsp.cpu $(CPUDIR)/mep-rhcop.cpu $(CPUDIR)/mep-fmax.cpu $(CPUDIR)/mep.opc
+ $(MAKE) run-cgen arch=mep prefix=mep options= \
+ archfile=$(CPUDIR)/mep.cpu opcfile=$(CPUDIR)/mep.opc extrafiles=
+
$(srcdir)/mt-desc.h $(srcdir)/mt-desc.c $(srcdir)/mt-opc.h $(srcdir)/mt-opc.c $(srcdir)/mt-ibld.c $(srcdir)/mt-asm.c $(srcdir)/mt-dis.c: $(MT_DEPS)
@true
stamp-mt: $(CGENDEPS) $(srcdir)/../cpu/mt.cpu $(srcdir)/../cpu/mt.opc
@@ -1076,6 +1117,14 @@ stamp-xc16x: $(CGENDEPS) $(CPUDIR)/xc16x.cpu $(CPUDIR)/xc16x.opc
$(MAKE) run-cgen arch=xc16x prefix=xc16x options= \
archfile=$(CPUDIR)/xc16x.cpu opcfile=$(CPUDIR)/xc16x.opc extrafiles=
+i386-gen: i386-gen.o
+ $(LINK) i386-gen.o $(LIBIBERTY)
+
+i386-gen.o: i386-gen.c i386-opc.h
+
+i386-tbl.h: @MAINT@ i386-gen i386-opc.tbl i386-reg.tbl
+ ./i386-gen --srcdir $(srcdir) > $(srcdir)/i386-tbl.h
+
ia64-gen: ia64-gen.o
$(LINK) ia64-gen.o $(LIBIBERTY)
@@ -1143,131 +1192,176 @@ dep-am: DEP
# DO NOT DELETE THIS LINE -- mkdep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
alpha-dis.lo: alpha-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/alpha.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/alpha.h
alpha-opc.lo: alpha-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/opcode/alpha.h $(BFD_H) $(INCDIR)/symcat.h \
- opintl.h
+ $(INCDIR)/opcode/alpha.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h opintl.h
arc-dis.lo: arc-dis.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/arc.h \
- $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
- $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/arc.h \
- $(INCDIR)/elf/reloc-macros.h opintl.h arc-dis.h arc-ext.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/arc.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/elf/arc.h $(INCDIR)/elf/reloc-macros.h \
+ opintl.h arc-dis.h arc-ext.h
arc-opc.lo: arc-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/arc.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/opcode/arc.h \
opintl.h
arc-ext.lo: arc-ext.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h arc-ext.h $(INCDIR)/libiberty.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h arc-ext.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
arm-dis.lo: arm-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/arm.h \
- opintl.h $(INCDIR)/safe-ctype.h $(INCDIR)/coff/internal.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/arm.h opintl.h $(INCDIR)/safe-ctype.h \
+ $(INCDIR)/floatformat.h $(INCDIR)/ansidecl.h $(INCDIR)/coff/internal.h \
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(BFDDIR)/elf-bfd.h \
$(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
- $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h
avr-dis.lo: avr-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h opintl.h \
- $(INCDIR)/libiberty.h $(INCDIR)/opcode/avr.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/opcode/avr.h
bfin-dis.lo: bfin-dis.c $(INCDIR)/opcode/bfin.h $(INCDIR)/dis-asm.h \
$(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
cgen-asm.lo: cgen-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h $(BFD_H) \
- $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
opintl.h
cgen-bitset.lo: cgen-bitset.c $(INCDIR)/libiberty.h \
$(INCDIR)/ansidecl.h $(INCDIR)/opcode/cgen-bitset.h
cgen-dis.lo: cgen-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen.h \
- $(INCDIR)/opcode/cgen-bitset.h
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(BFD_H) \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h
cgen-opc.lo: cgen-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h $(BFD_H) \
- $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen.h $(INCDIR)/opcode/cgen-bitset.h
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h
+cr16-dis.lo: cr16-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h sysdep.h config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/opcode/cr16.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h
+cr16-opc.lo: cr16-opc.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cr16.h
cris-dis.lo: cris-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h sysdep.h config.h \
- $(INCDIR)/opcode/cris.h $(INCDIR)/libiberty.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/opcode/cris.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h
cris-opc.lo: cris-opc.c $(INCDIR)/opcode/cris.h
crx-dis.lo: crx-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h sysdep.h config.h \
- $(INCDIR)/opcode/crx.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/opcode/crx.h
crx-opc.lo: crx-opc.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/symcat.h $(INCDIR)/opcode/crx.h
d10v-dis.lo: d10v-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/d10v.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
d10v-opc.lo: d10v-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/d10v.h
d30v-dis.lo: d30v-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/d30v.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h opintl.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h opintl.h
d30v-opc.lo: d30v-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/d30v.h
dlx-dis.lo: dlx-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/dlx.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/dlx.h
dis-buf.lo: dis-buf.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h opintl.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ opintl.h
dis-init.lo: dis-init.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H)
disassemble.lo: disassemble.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
fr30-asm.lo: fr30-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h fr30-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h fr30-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
fr30-desc.lo: fr30-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h fr30-opc.h opintl.h $(INCDIR)/libiberty.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h fr30-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/xregex.h $(INCDIR)/xregex2.h
fr30-dis.lo: fr30-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- fr30-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h fr30-opc.h \
+ opintl.h
fr30-ibld.lo: fr30-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
fr30-opc.h opintl.h $(INCDIR)/safe-ctype.h
fr30-opc.lo: fr30-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h fr30-opc.h $(INCDIR)/libiberty.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ fr30-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h fr30-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
frv-asm.lo: frv-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h frv-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h frv-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ frv-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h frv-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
frv-desc.lo: frv-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h frv-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h frv-opc.h opintl.h $(INCDIR)/libiberty.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ frv-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h frv-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/xregex.h $(INCDIR)/xregex2.h
frv-dis.lo: frv-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
frv-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- frv-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h frv-opc.h \
+ opintl.h
frv-ibld.lo: frv-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h frv-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h frv-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
frv-opc.h opintl.h $(INCDIR)/safe-ctype.h
frv-opc.lo: frv-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h frv-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h frv-opc.h $(INCDIR)/libiberty.h \
- $(INCDIR)/elf/frv.h $(INCDIR)/elf/reloc-macros.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ frv-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h frv-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/elf/frv.h \
+ $(INCDIR)/elf/reloc-macros.h
h8300-dis.lo: h8300-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/h8300.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h opintl.h $(INCDIR)/libiberty.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h opintl.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h
h8500-dis.lo: h8500-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- h8500-opc.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h \
- opintl.h
+ h8500-opc.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h opintl.h
hppa-dis.lo: hppa-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(BFDDIR)/libhppa.h \
- $(INCDIR)/opcode/hppa.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFDDIR)/libhppa.h $(INCDIR)/opcode/hppa.h
i370-dis.lo: i370-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/i370.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/i370.h
i370-opc.lo: i370-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/i370.h
i386-dis.lo: i386-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h sysdep.h config.h \
- opintl.h
+ $(INCDIR)/ansidecl.h opintl.h $(INCDIR)/opcode/i386.h
+i386-opc.lo: i386-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h i386-opc.h \
+ $(INCDIR)/opcode/i386.h i386-tbl.h
+i386-gen.lo: i386-gen.c $(INCDIR)/getopt.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h i386-opc.h \
+ $(INCDIR)/opcode/i386.h
i860-dis.lo: i860-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/opcode/i860.h
i960-dis.lo: i960-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
ia64-dis.lo: ia64-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/opcode/ia64.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/opcode/ia64.h \
+ $(BFD_H)
ia64-opc-a.lo: ia64-opc-a.c ia64-opc.h $(INCDIR)/opcode/ia64.h \
$(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
ia64-opc-b.lo: ia64-opc-b.c ia64-opc.h $(INCDIR)/opcode/ia64.h \
@@ -1280,290 +1374,426 @@ ia64-opc-m.lo: ia64-opc-m.c ia64-opc.h $(INCDIR)/opcode/ia64.h \
$(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
ia64-opc-d.lo: ia64-opc-d.c
ia64-opc.lo: ia64-opc.c $(INCDIR)/ansidecl.h sysdep.h \
- config.h $(INCDIR)/libiberty.h ia64-asmtab.h $(INCDIR)/opcode/ia64.h \
- $(BFD_H) $(INCDIR)/symcat.h ia64-asmtab.c
+ config.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ ia64-asmtab.h $(INCDIR)/opcode/ia64.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h ia64-asmtab.c
ia64-gen.lo: ia64-gen.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h sysdep.h config.h $(INCDIR)/getopt.h \
- ia64-opc.h $(INCDIR)/opcode/ia64.h $(BFD_H) $(INCDIR)/symcat.h \
- ia64-opc-a.c ia64-opc-i.c ia64-opc-m.c ia64-opc-b.c \
- ia64-opc-f.c ia64-opc-x.c ia64-opc-d.c
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h sysdep.h \
+ config.h $(INCDIR)/getopt.h ia64-opc.h $(INCDIR)/opcode/ia64.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h ia64-opc-a.c \
+ ia64-opc-i.c ia64-opc-m.c ia64-opc-b.c ia64-opc-f.c \
+ ia64-opc-x.c ia64-opc-d.c
ia64-asmtab.lo: ia64-asmtab.c
ip2k-asm.lo: ip2k-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h ip2k-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h ip2k-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
ip2k-desc.lo: ip2k-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h ip2k-opc.h opintl.h $(INCDIR)/libiberty.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h ip2k-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/xregex.h $(INCDIR)/xregex2.h
ip2k-dis.lo: ip2k-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- ip2k-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h ip2k-opc.h \
+ opintl.h
ip2k-ibld.lo: ip2k-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h ip2k-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
ip2k-opc.h opintl.h $(INCDIR)/safe-ctype.h
ip2k-opc.lo: ip2k-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h ip2k-opc.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ ip2k-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h ip2k-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
iq2000-asm.lo: iq2000-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h iq2000-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h iq2000-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
iq2000-desc.lo: iq2000-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h iq2000-opc.h opintl.h $(INCDIR)/libiberty.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h iq2000-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/xregex.h $(INCDIR)/xregex2.h
iq2000-dis.lo: iq2000-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- iq2000-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h iq2000-opc.h \
+ opintl.h
iq2000-ibld.lo: iq2000-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h iq2000-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
iq2000-opc.h opintl.h $(INCDIR)/safe-ctype.h
iq2000-opc.lo: iq2000-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h iq2000-opc.h $(INCDIR)/libiberty.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ iq2000-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h iq2000-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
m32c-asm.lo: m32c-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32c-opc.h cgen-types.h cgen-ops.h \
- opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32c-opc.h \
+ cgen-types.h ../bfd/bfd_stdint.h cgen-ops.h opintl.h \
+ $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
m32c-desc.lo: m32c-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32c-opc.h cgen-types.h cgen-ops.h \
- opintl.h $(INCDIR)/libiberty.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32c-opc.h \
+ cgen-types.h ../bfd/bfd_stdint.h cgen-ops.h opintl.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/xregex.h \
+ $(INCDIR)/xregex2.h
m32c-dis.lo: m32c-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- m32c-opc.h cgen-types.h cgen-ops.h opintl.h $(INCDIR)/elf/m32c.h \
- $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
- $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32c-opc.h \
+ cgen-types.h ../bfd/bfd_stdint.h cgen-ops.h opintl.h \
+ $(INCDIR)/elf/m32c.h $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+ $(INCDIR)/bfdlink.h
m32c-ibld.lo: m32c-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h m32c-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- m32c-opc.h cgen-types.h cgen-ops.h opintl.h $(INCDIR)/safe-ctype.h
-m32c-opc.lo: m32c-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
$(BFD_H) $(INCDIR)/symcat.h m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32c-opc.h cgen-types.h cgen-ops.h \
- $(INCDIR)/libiberty.h
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
+ m32c-opc.h cgen-types.h ../bfd/bfd_stdint.h cgen-ops.h \
+ opintl.h $(INCDIR)/safe-ctype.h
+m32c-opc.lo: m32c-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32c-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32c-opc.h \
+ cgen-types.h ../bfd/bfd_stdint.h cgen-ops.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h
m32r-asm.lo: m32r-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32r-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32r-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
m32r-desc.lo: m32r-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32r-opc.h opintl.h $(INCDIR)/libiberty.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32r-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/xregex.h $(INCDIR)/xregex2.h
m32r-dis.lo: m32r-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- m32r-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32r-opc.h \
+ opintl.h
m32r-ibld.lo: m32r-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
m32r-opc.h opintl.h $(INCDIR)/safe-ctype.h
m32r-opc.lo: m32r-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32r-opc.h $(INCDIR)/libiberty.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32r-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
m32r-opinst.lo: m32r-opinst.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h m32r-opc.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ m32r-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h m32r-opc.h
m68hc11-dis.lo: m68hc11-dis.c $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/m68hc11.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
m68hc11-opc.lo: m68hc11-opc.c $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/m68hc11.h
m68k-dis.lo: m68k-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/floatformat.h \
- $(INCDIR)/libiberty.h opintl.h $(INCDIR)/opcode/m68k.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/floatformat.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+ opintl.h $(INCDIR)/opcode/m68k.h
m68k-opc.lo: m68k-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/m68k.h
m88k-dis.lo: m88k-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/m88k.h \
- opintl.h $(INCDIR)/libiberty.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/m88k.h opintl.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h
maxq-dis.lo: maxq-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/maxq.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/maxq.h
mcore-dis.lo: mcore-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- mcore-opc.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ mcore-opc.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h
+mep-asm.lo: mep-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ mep-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mep-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+mep-desc.lo: mep-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ mep-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mep-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
+mep-dis.lo: mep-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ mep-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mep-opc.h \
+ opintl.h $(INCDIR)/elf/mep.h $(INCDIR)/elf/reloc-macros.h \
+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h
+mep-ibld.lo: mep-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h mep-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
+ mep-opc.h opintl.h $(INCDIR)/safe-ctype.h
+mep-opc.lo: mep-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ mep-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mep-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/elf/mep.h \
+ $(INCDIR)/elf/reloc-macros.h
mips-dis.lo: mips-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
- $(INCDIR)/opcode/mips.h opintl.h $(BFDDIR)/elf-bfd.h \
- $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/opcode/mips.h \
+ opintl.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/elf/mips.h $(INCDIR)/elf/reloc-macros.h
mips-opc.lo: mips-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/mips.h
mips16-opc.lo: mips16-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/mips.h
m10200-dis.lo: m10200-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/mn10200.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h opintl.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h opintl.h
m10200-opc.lo: m10200-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/mn10200.h
m10300-dis.lo: m10300-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/mn10300.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h opintl.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h opintl.h
m10300-opc.lo: m10300-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/mn10300.h
mmix-dis.lo: mmix-dis.c $(INCDIR)/opcode/mmix.h $(INCDIR)/dis-asm.h \
$(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
- opintl.h
+ $(INCDIR)/ansidecl.h $(BFD_H) opintl.h
mmix-opc.lo: mmix-opc.c $(INCDIR)/opcode/mmix.h $(INCDIR)/symcat.h
mt-asm.lo: mt-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h mt-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h mt-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ mt-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mt-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
mt-desc.lo: mt-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h mt-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h mt-opc.h opintl.h $(INCDIR)/libiberty.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ mt-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mt-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
$(INCDIR)/xregex.h $(INCDIR)/xregex2.h
mt-dis.lo: mt-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
mt-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- mt-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mt-opc.h \
+ opintl.h
mt-ibld.lo: mt-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h mt-desc.h \
- $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h mt-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
mt-opc.h opintl.h $(INCDIR)/safe-ctype.h
mt-opc.lo: mt-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h mt-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h mt-opc.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h
-ns32k-dis.lo: ns32k-dis.c $(BFD_H) $(INCDIR)/ansidecl.h \
- $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/dis-asm.h \
- $(INCDIR)/opcode/ns32k.h opintl.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ mt-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h mt-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+ns32k-dis.lo: ns32k-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/dis-asm.h \
+ $(BFD_H) $(INCDIR)/opcode/ns32k.h opintl.h
openrisc-asm.lo: openrisc-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h openrisc-opc.h opintl.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h openrisc-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
openrisc-desc.lo: openrisc-desc.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/symcat.h openrisc-desc.h \
+ $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/symcat.h openrisc-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- openrisc-opc.h opintl.h $(INCDIR)/libiberty.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h openrisc-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
openrisc-dis.lo: openrisc-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- openrisc-opc.h opintl.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h openrisc-opc.h \
+ opintl.h
openrisc-ibld.lo: openrisc-ibld.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h \
- openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- openrisc-opc.h opintl.h $(INCDIR)/safe-ctype.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(BFD_H) $(INCDIR)/symcat.h openrisc-desc.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h openrisc-opc.h \
+ opintl.h $(INCDIR)/safe-ctype.h
openrisc-opc.lo: openrisc-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h openrisc-opc.h $(INCDIR)/libiberty.h
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ openrisc-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h openrisc-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
or32-dis.lo: or32-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/opcode/or32.h \
$(INCDIR)/safe-ctype.h
or32-opc.lo: or32-opc.c $(INCDIR)/safe-ctype.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/or32.h
pdp11-dis.lo: pdp11-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/pdp11.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/pdp11.h
pdp11-opc.lo: pdp11-opc.c $(INCDIR)/opcode/pdp11.h
pj-dis.lo: pj-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/pj.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
pj-opc.lo: pj-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/pj.h
ppc-dis.lo: ppc-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/ppc.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/ppc.h
ppc-opc.lo: ppc-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/ppc.h opintl.h
s390-mkopc.lo: s390-mkopc.c
s390-opc.lo: s390-opc.c $(INCDIR)/ansidecl.h $(INCDIR)/opcode/s390.h \
s390-opc.tab
s390-dis.lo: s390-dis.c $(INCDIR)/ansidecl.h sysdep.h \
- config.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h \
- $(INCDIR)/opcode/s390.h
+ config.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/s390.h
+score-dis.lo: score-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ score-opc.h opintl.h $(BFD_H) $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/score.h $(INCDIR)/elf/reloc-macros.h
sh-dis.lo: sh-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- sh-opc.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/dis-asm.h
+ sh-opc.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/dis-asm.h $(BFD_H)
sh64-dis.lo: sh64-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h sysdep.h config.h \
- sh64-opc.h $(INCDIR)/libiberty.h $(BFDDIR)/elf-bfd.h \
- $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
- $(INCDIR)/bfdlink.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
- $(BFDDIR)/elf32-sh64.h
+ $(INCDIR)/ansidecl.h sh64-opc.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h $(BFDDIR)/elf32-sh64.h
sh64-opc.lo: sh64-opc.c sh64-opc.h
sparc-dis.lo: sparc-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/opcode/sparc.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h $(INCDIR)/libiberty.h opintl.h
+ $(INCDIR)/opcode/sparc.h $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h opintl.h
sparc-opc.lo: sparc-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/opcode/sparc.h
+ $(INCDIR)/opcode/sparc.h $(INCDIR)/ansidecl.h
+spu-dis.lo: spu-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/spu.h $(INCDIR)/opcode/spu-insns.h
+spu-opc.lo: spu-opc.c $(INCDIR)/opcode/spu.h $(INCDIR)/opcode/spu-insns.h \
+ $(INCDIR)/opcode/spu-insns.h
tic30-dis.lo: tic30-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/tic30.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/tic30.h
tic4x-dis.lo: tic4x-dis.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/tic4x.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/tic4x.h
tic54x-dis.lo: tic54x-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/tic54x.h \
- $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/tic54x.h $(INCDIR)/coff/tic54x.h $(INCDIR)/coff/ti.h
tic54x-opc.lo: tic54x-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/opcode/tic54x.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(INCDIR)/opcode/tic54x.h
tic80-dis.lo: tic80-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/tic80.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
tic80-opc.lo: tic80-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/tic80.h
v850-dis.lo: v850-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/v850.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h opintl.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h opintl.h
v850-opc.lo: v850-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/v850.h opintl.h
vax-dis.lo: vax-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/vax.h $(INCDIR)/dis-asm.h $(BFD_H) \
- $(INCDIR)/symcat.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
w65-dis.lo: w65-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- w65-opc.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ w65-opc.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h
+xc16x-asm.lo: xc16x-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ xc16x-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xc16x-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+xc16x-desc.lo: xc16x-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ xc16x-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xc16x-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
+xc16x-dis.lo: xc16x-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ xc16x-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xc16x-opc.h \
+ opintl.h
+xc16x-ibld.lo: xc16x-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ $(BFD_H) $(INCDIR)/symcat.h xc16x-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
+ xc16x-opc.h opintl.h $(INCDIR)/safe-ctype.h
+xc16x-opc.lo: xc16x-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
+ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/symcat.h \
+ xc16x-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xc16x-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
xstormy16-asm.lo: xstormy16-asm.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/symcat.h xstormy16-desc.h \
+ $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/symcat.h xstormy16-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- xstormy16-opc.h opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xstormy16-opc.h \
+ opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
xstormy16-desc.lo: xstormy16-desc.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/symcat.h xstormy16-desc.h \
+ $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/symcat.h xstormy16-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- xstormy16-opc.h opintl.h $(INCDIR)/libiberty.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xstormy16-opc.h \
+ opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
xstormy16-dis.lo: xstormy16-dis.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h \
- $(INCDIR)/libiberty.h xstormy16-desc.h $(INCDIR)/opcode/cgen-bitset.h \
- $(INCDIR)/opcode/cgen.h xstormy16-opc.h opintl.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/ansidecl.h xstormy16-desc.h $(INCDIR)/opcode/cgen-bitset.h \
+ $(INCDIR)/opcode/cgen.h $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h \
+ xstormy16-opc.h opintl.h
xstormy16-ibld.lo: xstormy16-ibld.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h \
- xstormy16-desc.h $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- xstormy16-opc.h opintl.h $(INCDIR)/safe-ctype.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(BFD_H) $(INCDIR)/symcat.h xstormy16-desc.h \
+ $(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xstormy16-opc.h \
+ opintl.h $(INCDIR)/safe-ctype.h
xstormy16-opc.lo: xstormy16-opc.c sysdep.h config.h \
- $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/symcat.h xstormy16-desc.h \
+ $(INCDIR)/ansidecl.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/symcat.h xstormy16-desc.h \
$(INCDIR)/opcode/cgen-bitset.h $(INCDIR)/opcode/cgen.h \
- xstormy16-opc.h $(INCDIR)/libiberty.h
-xc16x-asm.lo: xc16x-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h xc16x-desc.h $(INCDIR)/opcode/cgen.h \
- xc16x-opc.h opintl.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
-xc16x-desc.lo: xc16x-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h xc16x-desc.h $(INCDIR)/opcode/cgen.h \
- xc16x-opc.h opintl.h $(INCDIR)/libiberty.h $(INCDIR)/xregex.h \
- $(INCDIR)/xregex2.h
-xc16x-dis.lo: xc16x-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \
- xc16x-desc.h $(INCDIR)/opcode/cgen.h xc16x-opc.h opintl.h
-xc16x-ibld.lo: xc16x-ibld.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h xc16x-desc.h \
- $(INCDIR)/opcode/cgen.h xc16x-opc.h opintl.h $(INCDIR)/safe-ctype.h
-xc16x-opc.lo: xc16x-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(BFD_H) $(INCDIR)/symcat.h xc16x-desc.h $(INCDIR)/opcode/cgen.h \
- xc16x-opc.h $(INCDIR)/libiberty.h
+ $(INCDIR)/symcat.h $(INCDIR)/opcode/cgen-bitset.h xstormy16-opc.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h
xtensa-dis.lo: xtensa-dis.c $(INCDIR)/xtensa-isa.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h sysdep.h \
- config.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ sysdep.h config.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h
z80-dis.lo: z80-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h
z8k-dis.lo: z8k-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h z8k-opc.h
+ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ z8k-opc.h
z8kgen.lo: z8kgen.c sysdep.h config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
+ $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.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.
diff --git a/opcodes/acinclude.m4 b/opcodes/acinclude.m4
deleted file mode 100644
index 3a47b1b67c48..000000000000
--- a/opcodes/acinclude.m4
+++ /dev/null
@@ -1,24 +0,0 @@
-sinclude(../bfd/acinclude.m4)
-
-dnl sinclude(../libtool.m4) already included in bfd/acinclude.m4
-dnl The lines below arrange for aclocal not to bring libtool.m4
-dnl AM_PROG_LIBTOOL into aclocal.m4, while still arranging for automake
-dnl to add a definition of LIBTOOL to Makefile.in.
-ifelse(yes,no,[
-AC_DEFUN([AM_PROG_LIBTOOL],)
-AC_DEFUN([AM_DISABLE_SHARED],)
-AC_SUBST(LIBTOOL)
-])
-
-dnl sinclude(../gettext.m4) already included in bfd/acinclude.m4
-ifelse(yes,no,[
-AC_DEFUN([CY_WITH_NLS],)
-AC_SUBST(INTLLIBS)
-])
-
-dnl AM_INSTALL_LIBBFD already included in bfd/acinclude.m4
-ifelse(yes,no,[
-AC_DEFUN([AM_INSTALL_LIBBFD],)
-AC_SUBST(bfdlibdir)
-AC_SUBST(bfdincludedir)
-])
diff --git a/opcodes/aclocal.m4 b/opcodes/aclocal.m4
index d5f315805a9c..2785579b9692 100644
--- a/opcodes/aclocal.m4
+++ b/opcodes/aclocal.m4
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.9.5 -*- Autoconf -*-
+# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005 Free Software Foundation, Inc.
@@ -28,7 +28,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
# 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.5])])
+ [AM_AUTOMAKE_VERSION([1.9.6])])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
@@ -480,27 +480,6 @@ AC_DEFUN([AM_PROG_INSTALL_SH],
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])])
-
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering
@@ -889,4 +868,16 @@ AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
-m4_include([acinclude.m4])
+m4_include([../bfd/acinclude.m4])
+m4_include([../bfd/warning.m4])
+m4_include([../config/acx.m4])
+m4_include([../config/depstand.m4])
+m4_include([../config/gettext-sister.m4])
+m4_include([../config/lead-dot.m4])
+m4_include([../config/nls.m4])
+m4_include([../config/po.m4])
+m4_include([../config/progtest.m4])
+m4_include([../libtool.m4])
+m4_include([../ltoptions.m4])
+m4_include([../ltsugar.m4])
+m4_include([../ltversion.m4])
diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c
index bc5b52cf9c08..2af8fdaff978 100644
--- a/opcodes/arm-dis.c
+++ b/opcodes/arm-dis.c
@@ -1,6 +1,6 @@
/* Instruction printing code for the ARM
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
+ 2007, Free Software Foundation, Inc.
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
Modification by James G. Smith (jsmith@cygnus.co.uk)
@@ -26,6 +26,7 @@
#include "opcode/arm.h"
#include "opintl.h"
#include "safe-ctype.h"
+#include "floatformat.h"
/* FIXME: This shouldn't be done here. */
#include "coff/internal.h"
@@ -61,8 +62,12 @@ struct opcode16
%% %
- %c print condition code (always bits 28-31)
+ %c print condition code (always bits 28-31 in ARM mode)
+ %q print shifter argument
+ %u print condition code (unconditional in ARM mode)
%A print address for ldc/stc/ldf/stf instruction
+ %B print vstm/vldm register list
+ %C print vstr/vldr address operand
%I print cirrus signed shift immediate: bits 0..3|4..6
%F print the COUNT field of a LFM/SFM instruction.
%P print floating point precision in arithmetic insn
@@ -71,6 +76,7 @@ struct opcode16
%<bitfield>r print as an ARM register
%<bitfield>d print the bitfield in decimal
+ %<bitfield>k print immediate for VFPv3 conversion instruction
%<bitfield>x print the bitfield in hex
%<bitfield>X print the bitfield as 1 hex digit without leading "0x"
%<bitfield>f print a floating point constant if >7 else a
@@ -78,19 +84,26 @@ struct opcode16
%<bitfield>w print as an iWMMXt width field - [bhwd]ss/us
%<bitfield>g print as an iWMMXt 64-bit register
%<bitfield>G print as an iWMMXt general purpose or control register
+ %<bitfield>D print as a NEON D register
+ %<bitfield>Q print as a NEON Q register
- %<code>y print a single precision VFP reg.
+ %y<code> print a single precision VFP reg.
Codes: 0=>Sm, 1=>Sd, 2=>Sn, 3=>multi-list, 4=>Sm pair
- %<code>z print a double precision VFP reg
+ %z<code> print a double precision VFP reg
Codes: 0=>Dm, 1=>Dd, 2=>Dn, 3=>multi-list
- %<bitnum>'c print specified char iff bit is one
- %<bitnum>`c print specified char iff bit is zero
- %<bitnum>?ab print a if bit is one else print b
+ %<bitfield>'c print specified char iff bitfield is all ones
+ %<bitfield>`c print specified char iff bitfield is all zeroes
+ %<bitfield>?ab... select from array of values in big endian order
+
%L print as an iWMMXt N/M width field.
%Z print the Immediate of a WSHUFH instruction.
%l like 'A' except use byte offsets for 'B' & 'H'
- versions. */
+ versions.
+ %i print 5-bit immediate in bits 8,3..0
+ (print "32" when 0)
+ %r print register offset address for wldt/wstr instruction
+*/
/* Common coprocessor opcodes shared between Arm and Thumb-2. */
@@ -105,7 +118,7 @@ static const struct opcode32 coprocessor_opcodes[] =
/* Intel Wireless MMX technology instructions. */
#define FIRST_IWMMXT_INSN 0x0e130130
-#define IWMMXT_INSN_COUNT 47
+#define IWMMXT_INSN_COUNT 73
{ARM_CEXT_IWMMXT, 0x0e130130, 0x0f3f0fff, "tandc%22-23w%c\t%12-15r"},
{ARM_CEXT_XSCALE, 0x0e400010, 0x0ff00f3f, "tbcst%6-7w%c\t%16-19g, %12-15r"},
{ARM_CEXT_XSCALE, 0x0e130170, 0x0f3f0ff8, "textrc%22-23w%c\t%12-15r, #%0-2d"},
@@ -120,37 +133,63 @@ static const struct opcode32 coprocessor_opcodes[] =
{ARM_CEXT_XSCALE, 0x0e100110, 0x0ff00ff0, "tmrc%c\t%12-15r, %16-19G"},
{ARM_CEXT_XSCALE, 0x0c500000, 0x0ff00ff0, "tmrrc%c\t%12-15r, %16-19r, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e130150, 0x0f3f0fff, "torc%22-23w%c\t%12-15r"},
+ {ARM_CEXT_XSCALE, 0x0e130190, 0x0f3f0fff, "torvsc%22-23w%c\t%12-15r"},
+ {ARM_CEXT_XSCALE, 0x0e2001c0, 0x0f300fff, "wabs%22-23w%c\t%12-15g, %16-19g"},
{ARM_CEXT_XSCALE, 0x0e0001c0, 0x0f300fff, "wacc%22-23w%c\t%12-15g, %16-19g"},
{ARM_CEXT_XSCALE, 0x0e000180, 0x0f000ff0, "wadd%20-23w%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0e2001a0, 0x0f300ff0, "waddbhus%22?ml%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0ea001a0, 0x0ff00ff0, "waddsubhx%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e000020, 0x0f800ff0, "waligni%c\t%12-15g, %16-19g, %0-3g, #%20-22d"},
{ARM_CEXT_XSCALE, 0x0e800020, 0x0fc00ff0, "walignr%20-21d%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e200000, 0x0fe00ff0, "wand%20'n%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e800000, 0x0fa00ff0, "wavg2%22?hb%20'r%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0e400000, 0x0fe00ff0, "wavg4%20'r%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e000060, 0x0f300ff0, "wcmpeq%22-23w%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e100060, 0x0f100ff0, "wcmpgt%21?su%22-23w%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0xfc500100, 0xfe500f00, "wldrd\t%12-15g, %r"},
{ARM_CEXT_XSCALE, 0xfc100100, 0xfe500f00, "wldrw\t%12-15G, %A"},
{ARM_CEXT_XSCALE, 0x0c100000, 0x0e100e00, "wldr%L%c\t%12-15g, %l"},
{ARM_CEXT_XSCALE, 0x0e400100, 0x0fc00ff0, "wmac%21?su%20'z%c\t%12-15g, %16-19g, %0-3g"},
- {ARM_CEXT_XSCALE, 0x0e800100, 0x0fd00ff0, "wmadd%21?su%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0e800100, 0x0fc00ff0, "wmadd%21?su%20'x%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0ec00100, 0x0fd00ff0, "wmadd%21?sun%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e000160, 0x0f100ff0, "wmax%21?su%22-23w%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0e000080, 0x0f100fe0, "wmerge%c\t%12-15g, %16-19g, %0-3g, #%21-23d"},
+ {ARM_CEXT_XSCALE, 0x0e0000a0, 0x0f800ff0, "wmia%21?tb%20?tb%22'n%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0e800120, 0x0f800ff0, "wmiaw%21?tb%20?tb%22'n%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e100160, 0x0f100ff0, "wmin%21?su%22-23w%c\t%12-15g, %16-19g, %0-3g"},
- {ARM_CEXT_XSCALE, 0x0e000100, 0x0fc00ff0, "wmul%21?su%20?ml%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0e000100, 0x0fc00ff0, "wmul%21?su%20?ml%23'r%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0ed00100, 0x0fd00ff0, "wmul%21?sumr%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0ee000c0, 0x0fe00ff0, "wmulwsm%20`r%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0ec000c0, 0x0fe00ff0, "wmulwum%20`r%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0eb000c0, 0x0ff00ff0, "wmulwl%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0e8000a0, 0x0f800ff0, "wqmia%21?tb%20?tb%22'n%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0e100080, 0x0fd00ff0, "wqmulm%21'r%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0ec000e0, 0x0fd00ff0, "wqmulwm%21'r%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e000000, 0x0ff00ff0, "wor%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e000080, 0x0f000ff0, "wpack%20-23w%c\t%12-15g, %16-19g, %0-3g"},
- {ARM_CEXT_XSCALE, 0x0e300040, 0x0f300ff0, "wror%22-23w%8'g%c\t%12-15g, %16-19g, %0-3g"},
- {ARM_CEXT_XSCALE, 0x0e300148, 0x0f300ffc, "wror%22-23w%8'g%c\t%12-15g, %16-19g, %0-3G"},
+ {ARM_CEXT_XSCALE, 0xfe300040, 0xff300ef0, "wror%22-23w\t%12-15g, %16-19g, #%i"},
+ {ARM_CEXT_XSCALE, 0x0e300040, 0x0f300ff0, "wror%22-23w%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0e300140, 0x0f300ff0, "wror%22-23wg%c\t%12-15g, %16-19g, %0-3G"},
{ARM_CEXT_XSCALE, 0x0e000120, 0x0fa00ff0, "wsad%22?hb%20'z%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e0001e0, 0x0f000ff0, "wshufh%c\t%12-15g, %16-19g, #%Z"},
+ {ARM_CEXT_XSCALE, 0xfe100040, 0xff300ef0, "wsll%22-23w\t%12-15g, %16-19g, #%i"},
{ARM_CEXT_XSCALE, 0x0e100040, 0x0f300ff0, "wsll%22-23w%8'g%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e100148, 0x0f300ffc, "wsll%22-23w%8'g%c\t%12-15g, %16-19g, %0-3G"},
+ {ARM_CEXT_XSCALE, 0xfe000040, 0xff300ef0, "wsra%22-23w\t%12-15g, %16-19g, #%i"},
{ARM_CEXT_XSCALE, 0x0e000040, 0x0f300ff0, "wsra%22-23w%8'g%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e000148, 0x0f300ffc, "wsra%22-23w%8'g%c\t%12-15g, %16-19g, %0-3G"},
+ {ARM_CEXT_XSCALE, 0xfe200040, 0xff300ef0, "wsrl%22-23w\t%12-15g, %16-19g, #%i"},
{ARM_CEXT_XSCALE, 0x0e200040, 0x0f300ff0, "wsrl%22-23w%8'g%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e200148, 0x0f300ffc, "wsrl%22-23w%8'g%c\t%12-15g, %16-19g, %0-3G"},
+ {ARM_CEXT_XSCALE, 0xfc400100, 0xfe500f00, "wstrd\t%12-15g, %r"},
{ARM_CEXT_XSCALE, 0xfc000100, 0xfe500f00, "wstrw\t%12-15G, %A"},
{ARM_CEXT_XSCALE, 0x0c000000, 0x0e100e00, "wstr%L%c\t%12-15g, %l"},
{ARM_CEXT_XSCALE, 0x0e0001a0, 0x0f000ff0, "wsub%20-23w%c\t%12-15g, %16-19g, %0-3g"},
- {ARM_CEXT_XSCALE, 0x0e0000c0, 0x0f100fff, "wunpckeh%21?su%22-23w%c\t%12-15g, %16-19g"},
+ {ARM_CEXT_XSCALE, 0x0ed001c0, 0x0ff00ff0, "wsubaddhx%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0e1001c0, 0x0f300ff0, "wabsdiff%22-23w%c\t%12-15g, %16-19g, %0-3g"},
+ {ARM_CEXT_XSCALE, 0x0e0000c0, 0x0fd00fff, "wunpckeh%21?sub%c\t%12-15g, %16-19g"},
+ {ARM_CEXT_XSCALE, 0x0e4000c0, 0x0fd00fff, "wunpckeh%21?suh%c\t%12-15g, %16-19g"},
+ {ARM_CEXT_XSCALE, 0x0e8000c0, 0x0fd00fff, "wunpckeh%21?suw%c\t%12-15g, %16-19g"},
{ARM_CEXT_XSCALE, 0x0e0000e0, 0x0f100fff, "wunpckel%21?su%22-23w%c\t%12-15g, %16-19g"},
{ARM_CEXT_XSCALE, 0x0e1000c0, 0x0f300ff0, "wunpckih%22-23w%c\t%12-15g, %16-19g, %0-3g"},
{ARM_CEXT_XSCALE, 0x0e1000e0, 0x0f300ff0, "wunpckil%22-23w%c\t%12-15g, %16-19g, %0-3g"},
@@ -201,80 +240,114 @@ static const struct opcode32 coprocessor_opcodes[] =
{FPU_FPA_EXT_V2, 0x0c000200, 0x0e100f00, "sfm%c\t%12-14f, %F, %A"},
{FPU_FPA_EXT_V2, 0x0c100200, 0x0e100f00, "lfm%c\t%12-14f, %F, %A"},
+ /* Register load/store */
+ {FPU_NEON_EXT_V1, 0x0d200b00, 0x0fb00f01, "vstmdb%c\t%16-19r%21'!, %B"},
+ {FPU_NEON_EXT_V1, 0x0d300b00, 0x0fb00f01, "vldmdb%c\t%16-19r%21'!, %B"},
+ {FPU_NEON_EXT_V1, 0x0c800b00, 0x0f900f01, "vstmia%c\t%16-19r%21'!, %B"},
+ {FPU_NEON_EXT_V1, 0x0c900b00, 0x0f900f01, "vldmia%c\t%16-19r%21'!, %B"},
+ {FPU_NEON_EXT_V1, 0x0d000b00, 0x0f300f00, "vstr%c\t%12-15,22D, %C"},
+ {FPU_NEON_EXT_V1, 0x0d100b00, 0x0f300f00, "vldr%c\t%12-15,22D, %C"},
+
+ /* Data transfer between ARM and NEON registers */
+ {FPU_NEON_EXT_V1, 0x0e800b10, 0x0ff00f70, "vdup%c.32\t%16-19,7D, %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0e800b30, 0x0ff00f70, "vdup%c.16\t%16-19,7D, %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0ea00b10, 0x0ff00f70, "vdup%c.32\t%16-19,7Q, %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0ea00b30, 0x0ff00f70, "vdup%c.16\t%16-19,7Q, %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0ec00b10, 0x0ff00f70, "vdup%c.8\t%16-19,7D, %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0ee00b10, 0x0ff00f70, "vdup%c.8\t%16-19,7Q, %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0c400b10, 0x0ff00fd0, "vmov%c\t%0-3,5D, %12-15r, %16-19r"},
+ {FPU_NEON_EXT_V1, 0x0c500b10, 0x0ff00fd0, "vmov%c\t%12-15r, %16-19r, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0x0e000b10, 0x0fd00f70, "vmov%c.32\t%16-19,7D[%21d], %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0e100b10, 0x0f500f70, "vmov%c.32\t%12-15r, %16-19,7D[%21d]"},
+ {FPU_NEON_EXT_V1, 0x0e000b30, 0x0fd00f30, "vmov%c.16\t%16-19,7D[%6,21d], %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0e100b30, 0x0f500f30, "vmov%c.%23?us16\t%12-15r, %16-19,7D[%6,21d]"},
+ {FPU_NEON_EXT_V1, 0x0e400b10, 0x0fd00f10, "vmov%c.8\t%16-19,7D[%5,6,21d], %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0e500b10, 0x0f500f10, "vmov%c.%23?us8\t%12-15r, %16-19,7D[%5,6,21d]"},
+
/* Floating point coprocessor (VFP) instructions */
- {FPU_VFP_EXT_V1, 0x0eb00bc0, 0x0fff0ff0, "fabsd%c\t%1z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0eb00ac0, 0x0fbf0fd0, "fabss%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0e300b00, 0x0ff00ff0, "faddd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e300a00, 0x0fb00f50, "fadds%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb40b40, 0x0fff0f70, "fcmp%7'ed%c\t%1z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0eb40a40, 0x0fbf0f50, "fcmp%7'es%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb50b40, 0x0fff0f70, "fcmp%7'ezd%c\t%1z"},
- {FPU_VFP_EXT_V1xD, 0x0eb50a40, 0x0fbf0f70, "fcmp%7'ezs%c\t%1y"},
- {FPU_VFP_EXT_V1, 0x0eb00b40, 0x0fff0ff0, "fcpyd%c\t%1z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0eb00a40, 0x0fbf0fd0, "fcpys%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb70ac0, 0x0fff0fd0, "fcvtds%c\t%1z, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb70bc0, 0x0fbf0ff0, "fcvtsd%c\t%1y, %0z"},
- {FPU_VFP_EXT_V1, 0x0e800b00, 0x0ff00ff0, "fdivd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e800a00, 0x0fb00f50, "fdivs%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0d100b00, 0x0f700f00, "fldd%c\t%1z, %A"},
- {FPU_VFP_EXT_V1xD, 0x0c900b00, 0x0fd00f00, "fldmia%0?xd%c\t%16-19r%21'!, %3z"},
- {FPU_VFP_EXT_V1xD, 0x0d300b00, 0x0ff00f00, "fldmdb%0?xd%c\t%16-19r!, %3z"},
- {FPU_VFP_EXT_V1xD, 0x0d100a00, 0x0f300f00, "flds%c\t%1y, %A"},
- {FPU_VFP_EXT_V1xD, 0x0c900a00, 0x0f900f00, "fldmias%c\t%16-19r%21'!, %3y"},
- {FPU_VFP_EXT_V1xD, 0x0d300a00, 0x0fb00f00, "fldmdbs%c\t%16-19r!, %3y"},
- {FPU_VFP_EXT_V1, 0x0e000b00, 0x0ff00ff0, "fmacd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e000a00, 0x0fb00f50, "fmacs%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0e200b10, 0x0ff00fff, "fmdhr%c\t%2z, %12-15r"},
- {FPU_VFP_EXT_V1, 0x0e000b10, 0x0ff00fff, "fmdlr%c\t%2z, %12-15r"},
- {FPU_VFP_EXT_V2, 0x0c400b10, 0x0ff00ff0, "fmdrr%c\t%0z, %12-15r, %16-19r"},
- {FPU_VFP_EXT_V1, 0x0e300b10, 0x0ff00fff, "fmrdh%c\t%12-15r, %2z"},
- {FPU_VFP_EXT_V1, 0x0e100b10, 0x0ff00fff, "fmrdl%c\t%12-15r, %2z"},
- {FPU_VFP_EXT_V1, 0x0c500b10, 0x0ff00ff0, "fmrrd%c\t%12-15r, %16-19r, %0z"},
- {FPU_VFP_EXT_V2, 0x0c500a10, 0x0ff00fd0, "fmrrs%c\t%12-15r, %16-19r, %4y"},
- {FPU_VFP_EXT_V1xD, 0x0e100a10, 0x0ff00f7f, "fmrs%c\t%12-15r, %2y"},
{FPU_VFP_EXT_V1xD, 0x0ef1fa10, 0x0fffffff, "fmstat%c"},
- {FPU_VFP_EXT_V1xD, 0x0ef00a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpsid"},
- {FPU_VFP_EXT_V1xD, 0x0ef10a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpscr"},
- {FPU_VFP_EXT_V1xD, 0x0ef80a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpexc"},
- {FPU_VFP_EXT_V1xD, 0x0ef90a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpinst\t@ Impl def"},
- {FPU_VFP_EXT_V1xD, 0x0efa0a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpinst2\t@ Impl def"},
- {FPU_VFP_EXT_V1xD, 0x0ef00a10, 0x0ff00fff, "fmrx%c\t%12-15r, <impl def 0x%16-19x>"},
- {FPU_VFP_EXT_V1, 0x0e100b00, 0x0ff00ff0, "fmscd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e100a00, 0x0fb00f50, "fmscs%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1xD, 0x0e000a10, 0x0ff00f7f, "fmsr%c\t%2y, %12-15r"},
- {FPU_VFP_EXT_V2, 0x0c400a10, 0x0ff00fd0, "fmsrr%c\t%12-15r, %16-19r, %4y"},
- {FPU_VFP_EXT_V1, 0x0e200b00, 0x0ff00ff0, "fmuld%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e200a00, 0x0fb00f50, "fmuls%c\t%1y, %2y, %0y"},
{FPU_VFP_EXT_V1xD, 0x0ee00a10, 0x0fff0fff, "fmxr%c\tfpsid, %12-15r"},
{FPU_VFP_EXT_V1xD, 0x0ee10a10, 0x0fff0fff, "fmxr%c\tfpscr, %12-15r"},
+ {FPU_VFP_EXT_V1xD, 0x0ee60a10, 0x0fff0fff, "fmxr%c\tmvfr1, %12-15r"},
+ {FPU_VFP_EXT_V1xD, 0x0ee70a10, 0x0fff0fff, "fmxr%c\tmvfr0, %12-15r"},
{FPU_VFP_EXT_V1xD, 0x0ee80a10, 0x0fff0fff, "fmxr%c\tfpexc, %12-15r"},
{FPU_VFP_EXT_V1xD, 0x0ee90a10, 0x0fff0fff, "fmxr%c\tfpinst, %12-15r\t@ Impl def"},
{FPU_VFP_EXT_V1xD, 0x0eea0a10, 0x0fff0fff, "fmxr%c\tfpinst2, %12-15r\t@ Impl def"},
- {FPU_VFP_EXT_V1xD, 0x0ee00a10, 0x0ff00fff, "fmxr%c\t<impl def 0x%16-19x>, %12-15r"},
- {FPU_VFP_EXT_V1, 0x0eb10b40, 0x0fff0ff0, "fnegd%c\t%1z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0eb10a40, 0x0fbf0fd0, "fnegs%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0e000b40, 0x0ff00ff0, "fnmacd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e000a40, 0x0fb00f50, "fnmacs%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0e100b40, 0x0ff00ff0, "fnmscd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e100a40, 0x0fb00f50, "fnmscs%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0e200b40, 0x0ff00ff0, "fnmuld%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e200a40, 0x0fb00f50, "fnmuls%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb80bc0, 0x0fff0fd0, "fsitod%c\t%1z, %0y"},
- {FPU_VFP_EXT_V1xD, 0x0eb80ac0, 0x0fbf0fd0, "fsitos%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb10bc0, 0x0fff0ff0, "fsqrtd%c\t%1z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0eb10ac0, 0x0fbf0fd0, "fsqrts%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0d000b00, 0x0f700f00, "fstd%c\t%1z, %A"},
- {FPU_VFP_EXT_V1xD, 0x0c800b00, 0x0fd00f00, "fstmia%0?xd%c\t%16-19r%21'!, %3z"},
- {FPU_VFP_EXT_V1xD, 0x0d200b00, 0x0ff00f00, "fstmdb%0?xd%c\t%16-19r!, %3z"},
- {FPU_VFP_EXT_V1xD, 0x0d000a00, 0x0f300f00, "fsts%c\t%1y, %A"},
- {FPU_VFP_EXT_V1xD, 0x0c800a00, 0x0f900f00, "fstmias%c\t%16-19r%21'!, %3y"},
- {FPU_VFP_EXT_V1xD, 0x0d200a00, 0x0fb00f00, "fstmdbs%c\t%16-19r!, %3y"},
- {FPU_VFP_EXT_V1, 0x0e300b40, 0x0ff00ff0, "fsubd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e300a40, 0x0fb00f50, "fsubs%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0ebc0b40, 0x0fbe0f70, "fto%16?sui%7'zd%c\t%1y, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0ebc0a40, 0x0fbe0f50, "fto%16?sui%7'zs%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb80b40, 0x0fff0fd0, "fuitod%c\t%1z, %0y"},
- {FPU_VFP_EXT_V1xD, 0x0eb80a40, 0x0fbf0fd0, "fuitos%c\t%1y, %0y"},
+ {FPU_VFP_EXT_V1xD, 0x0ef00a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpsid"},
+ {FPU_VFP_EXT_V1xD, 0x0ef10a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpscr"},
+ {FPU_VFP_EXT_V1xD, 0x0ef60a10, 0x0fff0fff, "fmrx%c\t%12-15r, mvfr1"},
+ {FPU_VFP_EXT_V1xD, 0x0ef70a10, 0x0fff0fff, "fmrx%c\t%12-15r, mvfr0"},
+ {FPU_VFP_EXT_V1xD, 0x0ef80a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpexc"},
+ {FPU_VFP_EXT_V1xD, 0x0ef90a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpinst\t@ Impl def"},
+ {FPU_VFP_EXT_V1xD, 0x0efa0a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpinst2\t@ Impl def"},
+ {FPU_VFP_EXT_V1, 0x0e000b10, 0x0ff00fff, "fmdlr%c\t%z2, %12-15r"},
+ {FPU_VFP_EXT_V1, 0x0e100b10, 0x0ff00fff, "fmrdl%c\t%12-15r, %z2"},
+ {FPU_VFP_EXT_V1, 0x0e200b10, 0x0ff00fff, "fmdhr%c\t%z2, %12-15r"},
+ {FPU_VFP_EXT_V1, 0x0e300b10, 0x0ff00fff, "fmrdh%c\t%12-15r, %z2"},
+ {FPU_VFP_EXT_V1xD, 0x0ee00a10, 0x0ff00fff, "fmxr%c\t<impl def %16-19x>, %12-15r"},
+ {FPU_VFP_EXT_V1xD, 0x0ef00a10, 0x0ff00fff, "fmrx%c\t%12-15r, <impl def %16-19x>"},
+ {FPU_VFP_EXT_V1xD, 0x0e000a10, 0x0ff00f7f, "fmsr%c\t%y2, %12-15r"},
+ {FPU_VFP_EXT_V1xD, 0x0e100a10, 0x0ff00f7f, "fmrs%c\t%12-15r, %y2"},
+ {FPU_VFP_EXT_V1xD, 0x0eb50a40, 0x0fbf0f70, "fcmp%7'ezs%c\t%y1"},
+ {FPU_VFP_EXT_V1, 0x0eb50b40, 0x0fbf0f70, "fcmp%7'ezd%c\t%z1"},
+ {FPU_VFP_EXT_V1xD, 0x0eb00a40, 0x0fbf0fd0, "fcpys%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0eb00ac0, 0x0fbf0fd0, "fabss%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0eb00b40, 0x0fbf0fd0, "fcpyd%c\t%z1, %z0"},
+ {FPU_VFP_EXT_V1, 0x0eb00bc0, 0x0fbf0fd0, "fabsd%c\t%z1, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0eb10a40, 0x0fbf0fd0, "fnegs%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0eb10ac0, 0x0fbf0fd0, "fsqrts%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0eb10b40, 0x0fbf0fd0, "fnegd%c\t%z1, %z0"},
+ {FPU_VFP_EXT_V1, 0x0eb10bc0, 0x0fbf0fd0, "fsqrtd%c\t%z1, %z0"},
+ {FPU_VFP_EXT_V1, 0x0eb70ac0, 0x0fbf0fd0, "fcvtds%c\t%z1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0eb70bc0, 0x0fbf0fd0, "fcvtsd%c\t%y1, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0eb80a40, 0x0fbf0fd0, "fuitos%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0eb80ac0, 0x0fbf0fd0, "fsitos%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0eb80b40, 0x0fbf0fd0, "fuitod%c\t%z1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0eb80bc0, 0x0fbf0fd0, "fsitod%c\t%z1, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0eb40a40, 0x0fbf0f50, "fcmp%7'es%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0eb40b40, 0x0fbf0f50, "fcmp%7'ed%c\t%z1, %z0"},
+ {FPU_VFP_EXT_V3, 0x0eba0a40, 0x0fbe0f50, "f%16?us%7?lhtos%c\t%y1, #%5,0-3k"},
+ {FPU_VFP_EXT_V3, 0x0eba0b40, 0x0fbe0f50, "f%16?us%7?lhtod%c\t%z1, #%5,0-3k"},
+ {FPU_VFP_EXT_V1xD, 0x0ebc0a40, 0x0fbe0f50, "fto%16?sui%7'zs%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0ebc0b40, 0x0fbe0f50, "fto%16?sui%7'zd%c\t%y1, %z0"},
+ {FPU_VFP_EXT_V3, 0x0ebe0a40, 0x0fbe0f50, "fto%16?us%7?lhs%c\t%y1, #%5,0-3k"},
+ {FPU_VFP_EXT_V3, 0x0ebe0b40, 0x0fbe0f50, "fto%16?us%7?lhd%c\t%z1, #%5,0-3k"},
+ {FPU_VFP_EXT_V1, 0x0c500b10, 0x0fb00ff0, "fmrrd%c\t%12-15r, %16-19r, %z0"},
+ {FPU_VFP_EXT_V3, 0x0eb00a00, 0x0fb00ff0, "fconsts%c\t%y1, #%0-3,16-19d"},
+ {FPU_VFP_EXT_V3, 0x0eb00b00, 0x0fb00ff0, "fconstd%c\t%z1, #%0-3,16-19d"},
+ {FPU_VFP_EXT_V2, 0x0c400a10, 0x0ff00fd0, "fmsrr%c\t%y4, %12-15r, %16-19r"},
+ {FPU_VFP_EXT_V2, 0x0c400b10, 0x0ff00fd0, "fmdrr%c\t%z0, %12-15r, %16-19r"},
+ {FPU_VFP_EXT_V2, 0x0c500a10, 0x0ff00fd0, "fmrrs%c\t%12-15r, %16-19r, %y4"},
+ {FPU_VFP_EXT_V1xD, 0x0e000a00, 0x0fb00f50, "fmacs%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0e000a40, 0x0fb00f50, "fnmacs%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1, 0x0e000b00, 0x0fb00f50, "fmacd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1, 0x0e000b40, 0x0fb00f50, "fnmacd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0e100a00, 0x0fb00f50, "fmscs%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0e100a40, 0x0fb00f50, "fnmscs%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1, 0x0e100b00, 0x0fb00f50, "fmscd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1, 0x0e100b40, 0x0fb00f50, "fnmscd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0e200a00, 0x0fb00f50, "fmuls%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0e200a40, 0x0fb00f50, "fnmuls%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1, 0x0e200b00, 0x0fb00f50, "fmuld%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1, 0x0e200b40, 0x0fb00f50, "fnmuld%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0e300a00, 0x0fb00f50, "fadds%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0e300a40, 0x0fb00f50, "fsubs%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1, 0x0e300b00, 0x0fb00f50, "faddd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1, 0x0e300b40, 0x0fb00f50, "fsubd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0e800a00, 0x0fb00f50, "fdivs%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1, 0x0e800b00, 0x0fb00f50, "fdivd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0d200a00, 0x0fb00f00, "fstmdbs%c\t%16-19r!, %y3"},
+ {FPU_VFP_EXT_V1xD, 0x0d200b00, 0x0fb00f00, "fstmdb%0?xd%c\t%16-19r!, %z3"},
+ {FPU_VFP_EXT_V1xD, 0x0d300a00, 0x0fb00f00, "fldmdbs%c\t%16-19r!, %y3"},
+ {FPU_VFP_EXT_V1xD, 0x0d300b00, 0x0fb00f00, "fldmdb%0?xd%c\t%16-19r!, %z3"},
+ {FPU_VFP_EXT_V1xD, 0x0d000a00, 0x0f300f00, "fsts%c\t%y1, %A"},
+ {FPU_VFP_EXT_V1, 0x0d000b00, 0x0f300f00, "fstd%c\t%z1, %A"},
+ {FPU_VFP_EXT_V1xD, 0x0d100a00, 0x0f300f00, "flds%c\t%y1, %A"},
+ {FPU_VFP_EXT_V1, 0x0d100b00, 0x0f300f00, "fldd%c\t%z1, %A"},
+ {FPU_VFP_EXT_V1xD, 0x0c800a00, 0x0f900f00, "fstmias%c\t%16-19r%21'!, %y3"},
+ {FPU_VFP_EXT_V1xD, 0x0c800b00, 0x0f900f00, "fstmia%0?xd%c\t%16-19r%21'!, %z3"},
+ {FPU_VFP_EXT_V1xD, 0x0c900a00, 0x0f900f00, "fldmias%c\t%16-19r%21'!, %y3"},
+ {FPU_VFP_EXT_V1xD, 0x0c900b00, 0x0f900f00, "fldmia%0?xd%c\t%16-19r%21'!, %z3"},
/* Cirrus coprocessor instructions. */
{ARM_CEXT_MAVERICK, 0x0d100400, 0x0f500f00, "cfldrs%c\tmvf%12-15d, %A"},
@@ -368,22 +441,300 @@ static const struct opcode32 coprocessor_opcodes[] =
{ARM_EXT_V2, 0x0e000000, 0x0f000010, "cdp%c\t%8-11d, %20-23d, cr%12-15d, cr%16-19d, cr%0-3d, {%5-7d}"},
{ARM_EXT_V2, 0x0e100010, 0x0f100010, "mrc%c\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
{ARM_EXT_V2, 0x0e000010, 0x0f100010, "mcr%c\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
- {ARM_EXT_V2, 0x0c000000, 0x0e100000, "stc%c%22'l\t%8-11d, cr%12-15d, %A"},
- {ARM_EXT_V2, 0x0c100000, 0x0e100000, "ldc%c%22'l\t%8-11d, cr%12-15d, %A"},
+ {ARM_EXT_V2, 0x0c000000, 0x0e100000, "stc%22'l%c\t%8-11d, cr%12-15d, %A"},
+ {ARM_EXT_V2, 0x0c100000, 0x0e100000, "ldc%22'l%c\t%8-11d, cr%12-15d, %A"},
/* V6 coprocessor instructions */
- {ARM_EXT_V6, 0xfc500000, 0xfff00000, "mrrc2\t%8-11d, %4-7d, %12-15r, %16-19r, cr%0-3d"},
- {ARM_EXT_V6, 0xfc400000, 0xfff00000, "mcrr2\t%8-11d, %4-7d, %12-15r, %16-19r, cr%0-3d"},
+ {ARM_EXT_V6, 0xfc500000, 0xfff00000, "mrrc2%c\t%8-11d, %4-7d, %12-15r, %16-19r, cr%0-3d"},
+ {ARM_EXT_V6, 0xfc400000, 0xfff00000, "mcrr2%c\t%8-11d, %4-7d, %12-15r, %16-19r, cr%0-3d"},
/* V5 coprocessor instructions */
- {ARM_EXT_V5, 0xfc100000, 0xfe100000, "ldc2%22'l\t%8-11d, cr%12-15d, %A"},
- {ARM_EXT_V5, 0xfc000000, 0xfe100000, "stc2%22'l\t%8-11d, cr%12-15d, %A"},
- {ARM_EXT_V5, 0xfe000000, 0xff000010, "cdp2\t%8-11d, %20-23d, cr%12-15d, cr%16-19d, cr%0-3d, {%5-7d}"},
- {ARM_EXT_V5, 0xfe000010, 0xff100010, "mcr2\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
- {ARM_EXT_V5, 0xfe100010, 0xff100010, "mrc2\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
+ {ARM_EXT_V5, 0xfc100000, 0xfe100000, "ldc2%22'l%c\t%8-11d, cr%12-15d, %A"},
+ {ARM_EXT_V5, 0xfc000000, 0xfe100000, "stc2%22'l%c\t%8-11d, cr%12-15d, %A"},
+ {ARM_EXT_V5, 0xfe000000, 0xff000010, "cdp2%c\t%8-11d, %20-23d, cr%12-15d, cr%16-19d, cr%0-3d, {%5-7d}"},
+ {ARM_EXT_V5, 0xfe000010, 0xff100010, "mcr2%c\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
+ {ARM_EXT_V5, 0xfe100010, 0xff100010, "mrc2%c\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
+
{0, 0, 0, 0}
};
+/* Neon opcode table: This does not encode the top byte -- that is
+ checked by the print_insn_neon routine, as it depends on whether we are
+ doing thumb32 or arm32 disassembly. */
+
+/* print_insn_neon recognizes the following format control codes:
+
+ %% %
+
+ %c print condition code
+ %A print v{st,ld}[1234] operands
+ %B print v{st,ld}[1234] any one operands
+ %C print v{st,ld}[1234] single->all operands
+ %D print scalar
+ %E print vmov, vmvn, vorr, vbic encoded constant
+ %F print vtbl,vtbx register list
+
+ %<bitfield>r print as an ARM register
+ %<bitfield>d print the bitfield in decimal
+ %<bitfield>e print the 2^N - bitfield in decimal
+ %<bitfield>D print as a NEON D register
+ %<bitfield>Q print as a NEON Q register
+ %<bitfield>R print as a NEON D or Q register
+ %<bitfield>Sn print byte scaled width limited by n
+ %<bitfield>Tn print short scaled width limited by n
+ %<bitfield>Un print long scaled width limited by n
+
+ %<bitfield>'c print specified char iff bitfield is all ones
+ %<bitfield>`c print specified char iff bitfield is all zeroes
+ %<bitfield>?ab... select from array of values in big endian order */
+
+static const struct opcode32 neon_opcodes[] =
+{
+ /* Extract */
+ {FPU_NEON_EXT_V1, 0xf2b00840, 0xffb00850, "vext%c.8\t%12-15,22R, %16-19,7R, %0-3,5R, #%8-11d"},
+ {FPU_NEON_EXT_V1, 0xf2b00000, 0xffb00810, "vext%c.8\t%12-15,22R, %16-19,7R, %0-3,5R, #%8-11d"},
+
+ /* Move data element to all lanes */
+ {FPU_NEON_EXT_V1, 0xf3b40c00, 0xffb70f90, "vdup%c.32\t%12-15,22R, %0-3,5D[%19d]"},
+ {FPU_NEON_EXT_V1, 0xf3b20c00, 0xffb30f90, "vdup%c.16\t%12-15,22R, %0-3,5D[%18-19d]"},
+ {FPU_NEON_EXT_V1, 0xf3b10c00, 0xffb10f90, "vdup%c.8\t%12-15,22R, %0-3,5D[%17-19d]"},
+
+ /* Table lookup */
+ {FPU_NEON_EXT_V1, 0xf3b00800, 0xffb00c50, "vtbl%c.8\t%12-15,22D, %F, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf3b00840, 0xffb00c50, "vtbx%c.8\t%12-15,22D, %F, %0-3,5D"},
+
+ /* Two registers, miscellaneous */
+ {FPU_NEON_EXT_V1, 0xf2880a10, 0xfebf0fd0, "vmovl%c.%24?us8\t%12-15,22Q, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2900a10, 0xfebf0fd0, "vmovl%c.%24?us16\t%12-15,22Q, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2a00a10, 0xfebf0fd0, "vmovl%c.%24?us32\t%12-15,22Q, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf3b00500, 0xffbf0f90, "vcnt%c.8\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00580, 0xffbf0f90, "vmvn%c\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b20000, 0xffbf0f90, "vswp%c\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b20200, 0xffb30fd0, "vmovn%c.i%18-19T2\t%12-15,22D, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf3b20240, 0xffb30fd0, "vqmovun%c.s%18-19T2\t%12-15,22D, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf3b20280, 0xffb30fd0, "vqmovn%c.s%18-19T2\t%12-15,22D, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf3b202c0, 0xffb30fd0, "vqmovn%c.u%18-19T2\t%12-15,22D, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf3b20300, 0xffb30fd0, "vshll%c.i%18-19S2\t%12-15,22Q, %0-3,5D, #%18-19S2"},
+ {FPU_NEON_EXT_V1, 0xf3bb0400, 0xffbf0e90, "vrecpe%c.%8?fu%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3bb0480, 0xffbf0e90, "vrsqrte%c.%8?fu%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00000, 0xffb30f90, "vrev64%c.%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00080, 0xffb30f90, "vrev32%c.%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00100, 0xffb30f90, "vrev16%c.%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00400, 0xffb30f90, "vcls%c.s%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00480, 0xffb30f90, "vclz%c.i%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00700, 0xffb30f90, "vqabs%c.s%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00780, 0xffb30f90, "vqneg%c.s%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b20080, 0xffb30f90, "vtrn%c.%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b20100, 0xffb30f90, "vuzp%c.%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b20180, 0xffb30f90, "vzip%c.%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b10000, 0xffb30b90, "vcgt%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
+ {FPU_NEON_EXT_V1, 0xf3b10080, 0xffb30b90, "vcge%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
+ {FPU_NEON_EXT_V1, 0xf3b10100, 0xffb30b90, "vceq%c.%10?fi%18-19S2\t%12-15,22R, %0-3,5R, #0"},
+ {FPU_NEON_EXT_V1, 0xf3b10180, 0xffb30b90, "vcle%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
+ {FPU_NEON_EXT_V1, 0xf3b10200, 0xffb30b90, "vclt%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
+ {FPU_NEON_EXT_V1, 0xf3b10300, 0xffb30b90, "vabs%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b10380, 0xffb30b90, "vneg%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00200, 0xffb30f10, "vpaddl%c.%7?us%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00600, 0xffb30f10, "vpadal%c.%7?us%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b30600, 0xffb30e10, "vcvt%c.%7-8?usff%18-19Sa.%7-8?ffus%18-19Sa\t%12-15,22R, %0-3,5R"},
+
+ /* Three registers of the same length */
+ {FPU_NEON_EXT_V1, 0xf2000110, 0xffb00f10, "vand%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2100110, 0xffb00f10, "vbic%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2200110, 0xffb00f10, "vorr%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2300110, 0xffb00f10, "vorn%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000110, 0xffb00f10, "veor%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3100110, 0xffb00f10, "vbsl%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3200110, 0xffb00f10, "vbit%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3300110, 0xffb00f10, "vbif%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000d00, 0xffa00f10, "vadd%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000d10, 0xffa00f10, "vmla%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000e00, 0xffa00f10, "vceq%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000f00, 0xffa00f10, "vmax%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000f10, 0xffa00f10, "vrecps%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2200d00, 0xffa00f10, "vsub%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2200d10, 0xffa00f10, "vmls%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2200f00, 0xffa00f10, "vmin%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2200f10, 0xffa00f10, "vrsqrts%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000d00, 0xffa00f10, "vpadd%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000d10, 0xffa00f10, "vmul%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000e00, 0xffa00f10, "vcge%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000e10, 0xffa00f10, "vacge%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000f00, 0xffa00f10, "vpmax%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3200d00, 0xffa00f10, "vabd%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3200e00, 0xffa00f10, "vcgt%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3200e10, 0xffa00f10, "vacgt%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3200f00, 0xffa00f10, "vpmin%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000800, 0xff800f10, "vadd%c.i%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000810, 0xff800f10, "vtst%c.%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000900, 0xff800f10, "vmla%c.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000b00, 0xff800f10, "vqdmulh%c.s%20-21S6\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000b10, 0xff800f10, "vpadd%c.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000800, 0xff800f10, "vsub%c.i%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000810, 0xff800f10, "vceq%c.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000900, 0xff800f10, "vmls%c.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000b00, 0xff800f10, "vqrdmulh%c.s%20-21S6\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000000, 0xfe800f10, "vhadd%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000010, 0xfe800f10, "vqadd%c.%24?us%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000100, 0xfe800f10, "vrhadd%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000200, 0xfe800f10, "vhsub%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000210, 0xfe800f10, "vqsub%c.%24?us%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000300, 0xfe800f10, "vcgt%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000310, 0xfe800f10, "vcge%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000400, 0xfe800f10, "vshl%c.%24?us%20-21S3\t%12-15,22R, %0-3,5R, %16-19,7R"},
+ {FPU_NEON_EXT_V1, 0xf2000410, 0xfe800f10, "vqshl%c.%24?us%20-21S3\t%12-15,22R, %0-3,5R, %16-19,7R"},
+ {FPU_NEON_EXT_V1, 0xf2000500, 0xfe800f10, "vrshl%c.%24?us%20-21S3\t%12-15,22R, %0-3,5R, %16-19,7R"},
+ {FPU_NEON_EXT_V1, 0xf2000510, 0xfe800f10, "vqrshl%c.%24?us%20-21S3\t%12-15,22R, %0-3,5R, %16-19,7R"},
+ {FPU_NEON_EXT_V1, 0xf2000600, 0xfe800f10, "vmax%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000610, 0xfe800f10, "vmin%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000700, 0xfe800f10, "vabd%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000710, 0xfe800f10, "vaba%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000910, 0xfe800f10, "vmul%c.%24?pi%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000a00, 0xfe800f10, "vpmax%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000a10, 0xfe800f10, "vpmin%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+
+ /* One register and an immediate value */
+ {FPU_NEON_EXT_V1, 0xf2800e10, 0xfeb80fb0, "vmov%c.i8\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800e30, 0xfeb80fb0, "vmov%c.i64\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800f10, 0xfeb80fb0, "vmov%c.f32\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800810, 0xfeb80db0, "vmov%c.i16\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800830, 0xfeb80db0, "vmvn%c.i16\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800910, 0xfeb80db0, "vorr%c.i16\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800930, 0xfeb80db0, "vbic%c.i16\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800c10, 0xfeb80eb0, "vmov%c.i32\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800c30, 0xfeb80eb0, "vmvn%c.i32\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800110, 0xfeb809b0, "vorr%c.i32\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800130, 0xfeb809b0, "vbic%c.i32\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800010, 0xfeb808b0, "vmov%c.i32\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800030, 0xfeb808b0, "vmvn%c.i32\t%12-15,22R, %E"},
+
+ /* Two registers and a shift amount */
+ {FPU_NEON_EXT_V1, 0xf2880810, 0xffb80fd0, "vshrn%c.i16\t%12-15,22D, %0-3,5Q, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880850, 0xffb80fd0, "vrshrn%c.i16\t%12-15,22D, %0-3,5Q, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880810, 0xfeb80fd0, "vqshrun%c.s16\t%12-15,22D, %0-3,5Q, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880850, 0xfeb80fd0, "vqrshrun%c.s16\t%12-15,22D, %0-3,5Q, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880910, 0xfeb80fd0, "vqshrn%c.%24?us16\t%12-15,22D, %0-3,5Q, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880950, 0xfeb80fd0, "vqrshrn%c.%24?us16\t%12-15,22D, %0-3,5Q, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880a10, 0xfeb80fd0, "vshll%c.%24?us8\t%12-15,22D, %0-3,5Q, #%16-18d"},
+ {FPU_NEON_EXT_V1, 0xf2900810, 0xffb00fd0, "vshrn%c.i32\t%12-15,22D, %0-3,5Q, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900850, 0xffb00fd0, "vrshrn%c.i32\t%12-15,22D, %0-3,5Q, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2880510, 0xffb80f90, "vshl%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18d"},
+ {FPU_NEON_EXT_V1, 0xf3880410, 0xffb80f90, "vsri%c.8\t%12-15,22R, %0-3,5R, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf3880510, 0xffb80f90, "vsli%c.8\t%12-15,22R, %0-3,5R, #%16-18d"},
+ {FPU_NEON_EXT_V1, 0xf3880610, 0xffb80f90, "vqshlu%c.s8\t%12-15,22R, %0-3,5R, #%16-18d"},
+ {FPU_NEON_EXT_V1, 0xf2900810, 0xfeb00fd0, "vqshrun%c.s32\t%12-15,22D, %0-3,5Q, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900850, 0xfeb00fd0, "vqrshrun%c.s32\t%12-15,22D, %0-3,5Q, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900910, 0xfeb00fd0, "vqshrn%c.%24?us32\t%12-15,22D, %0-3,5Q, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900950, 0xfeb00fd0, "vqrshrn%c.%24?us32\t%12-15,22D, %0-3,5Q, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900a10, 0xfeb00fd0, "vshll%c.%24?us16\t%12-15,22D, %0-3,5Q, #%16-19d"},
+ {FPU_NEON_EXT_V1, 0xf2880010, 0xfeb80f90, "vshr%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880110, 0xfeb80f90, "vsra%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880210, 0xfeb80f90, "vrshr%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880310, 0xfeb80f90, "vrsra%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880710, 0xfeb80f90, "vqshl%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18d"},
+ {FPU_NEON_EXT_V1, 0xf2a00810, 0xffa00fd0, "vshrn%c.i64\t%12-15,22D, %0-3,5Q, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2a00850, 0xffa00fd0, "vrshrn%c.i64\t%12-15,22D, %0-3,5Q, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2900510, 0xffb00f90, "vshl%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19d"},
+ {FPU_NEON_EXT_V1, 0xf3900410, 0xffb00f90, "vsri%c.16\t%12-15,22R, %0-3,5R, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf3900510, 0xffb00f90, "vsli%c.16\t%12-15,22R, %0-3,5R, #%16-19d"},
+ {FPU_NEON_EXT_V1, 0xf3900610, 0xffb00f90, "vqshlu%c.s16\t%12-15,22R, %0-3,5R, #%16-19d"},
+ {FPU_NEON_EXT_V1, 0xf2a00a10, 0xfea00fd0, "vshll%c.%24?us32\t%12-15,22D, %0-3,5Q, #%16-20d"},
+ {FPU_NEON_EXT_V1, 0xf2900010, 0xfeb00f90, "vshr%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900110, 0xfeb00f90, "vsra%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900210, 0xfeb00f90, "vrshr%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900310, 0xfeb00f90, "vrsra%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900710, 0xfeb00f90, "vqshl%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19d"},
+ {FPU_NEON_EXT_V1, 0xf2800810, 0xfec00fd0, "vqshrun%c.s64\t%12-15,22D, %0-3,5Q, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2800850, 0xfec00fd0, "vqrshrun%c.s64\t%12-15,22D, %0-3,5Q, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2800910, 0xfec00fd0, "vqshrn%c.%24?us64\t%12-15,22D, %0-3,5Q, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2800950, 0xfec00fd0, "vqrshrn%c.%24?us64\t%12-15,22D, %0-3,5Q, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2a00510, 0xffa00f90, "vshl%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20d"},
+ {FPU_NEON_EXT_V1, 0xf3a00410, 0xffa00f90, "vsri%c.32\t%12-15,22R, %0-3,5R, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf3a00510, 0xffa00f90, "vsli%c.32\t%12-15,22R, %0-3,5R, #%16-20d"},
+ {FPU_NEON_EXT_V1, 0xf3a00610, 0xffa00f90, "vqshlu%c.s32\t%12-15,22R, %0-3,5R, #%16-20d"},
+ {FPU_NEON_EXT_V1, 0xf2a00010, 0xfea00f90, "vshr%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2a00110, 0xfea00f90, "vsra%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2a00210, 0xfea00f90, "vrshr%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2a00310, 0xfea00f90, "vrsra%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2a00710, 0xfea00f90, "vqshl%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20d"},
+ {FPU_NEON_EXT_V1, 0xf2800590, 0xff800f90, "vshl%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21d"},
+ {FPU_NEON_EXT_V1, 0xf3800490, 0xff800f90, "vsri%c.64\t%12-15,22R, %0-3,5R, #%16-21e"},
+ {FPU_NEON_EXT_V1, 0xf3800590, 0xff800f90, "vsli%c.64\t%12-15,22R, %0-3,5R, #%16-21d"},
+ {FPU_NEON_EXT_V1, 0xf3800690, 0xff800f90, "vqshlu%c.s64\t%12-15,22R, %0-3,5R, #%16-21d"},
+ {FPU_NEON_EXT_V1, 0xf2800090, 0xfe800f90, "vshr%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
+ {FPU_NEON_EXT_V1, 0xf2800190, 0xfe800f90, "vsra%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
+ {FPU_NEON_EXT_V1, 0xf2800290, 0xfe800f90, "vrshr%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
+ {FPU_NEON_EXT_V1, 0xf2800390, 0xfe800f90, "vrsra%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
+ {FPU_NEON_EXT_V1, 0xf2800790, 0xfe800f90, "vqshl%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21d"},
+ {FPU_NEON_EXT_V1, 0xf2a00e10, 0xfea00e90, "vcvt%c.%24,8?usff32.%24,8?ffus32\t%12-15,22R, %0-3,5R, #%16-20e"},
+
+ /* Three registers of different lengths */
+ {FPU_NEON_EXT_V1, 0xf2800e00, 0xfea00f50, "vmull%c.p%20S0\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800400, 0xff800f50, "vaddhn%c.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf2800600, 0xff800f50, "vsubhn%c.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf2800900, 0xff800f50, "vqdmlal%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800b00, 0xff800f50, "vqdmlsl%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800d00, 0xff800f50, "vqdmull%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf3800400, 0xff800f50, "vraddhn%c.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf3800600, 0xff800f50, "vrsubhn%c.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf2800000, 0xfe800f50, "vaddl%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800100, 0xfe800f50, "vaddw%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7Q, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800200, 0xfe800f50, "vsubl%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800300, 0xfe800f50, "vsubw%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7Q, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800500, 0xfe800f50, "vabal%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800700, 0xfe800f50, "vabdl%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800800, 0xfe800f50, "vmlal%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800a00, 0xfe800f50, "vmlsl%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800c00, 0xfe800f50, "vmull%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+
+ /* Two registers and a scalar */
+ {FPU_NEON_EXT_V1, 0xf2800040, 0xff800f50, "vmla%c.i%20-21S6\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800140, 0xff800f50, "vmla%c.f%20-21Sa\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800340, 0xff800f50, "vqdmlal%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800440, 0xff800f50, "vmls%c.i%20-21S6\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800540, 0xff800f50, "vmls%c.f%20-21S6\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800740, 0xff800f50, "vqdmlsl%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800840, 0xff800f50, "vmul%c.i%20-21S6\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800940, 0xff800f50, "vmul%c.f%20-21Sa\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800b40, 0xff800f50, "vqdmull%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800c40, 0xff800f50, "vqdmulh%c.s%20-21S6\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800d40, 0xff800f50, "vqrdmulh%c.s%20-21S6\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800040, 0xff800f50, "vmla%c.i%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800140, 0xff800f50, "vmla%c.f%20-21Sa\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800440, 0xff800f50, "vmls%c.i%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800540, 0xff800f50, "vmls%c.f%20-21Sa\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800840, 0xff800f50, "vmul%c.i%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800940, 0xff800f50, "vmul%c.f%20-21Sa\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800c40, 0xff800f50, "vqdmulh%c.s%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800d40, 0xff800f50, "vqrdmulh%c.s%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800240, 0xfe800f50, "vmlal%c.%24?us%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800640, 0xfe800f50, "vmlsl%c.%24?us%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800a40, 0xfe800f50, "vmull%c.%24?us%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
+
+ /* Element and structure load/store */
+ {FPU_NEON_EXT_V1, 0xf4a00fc0, 0xffb00fc0, "vld4%c.32\t%C"},
+ {FPU_NEON_EXT_V1, 0xf4a00c00, 0xffb00f00, "vld1%c.%6-7S2\t%C"},
+ {FPU_NEON_EXT_V1, 0xf4a00d00, 0xffb00f00, "vld2%c.%6-7S2\t%C"},
+ {FPU_NEON_EXT_V1, 0xf4a00e00, 0xffb00f00, "vld3%c.%6-7S2\t%C"},
+ {FPU_NEON_EXT_V1, 0xf4a00f00, 0xffb00f00, "vld4%c.%6-7S2\t%C"},
+ {FPU_NEON_EXT_V1, 0xf4000200, 0xff900f00, "v%21?ls%21?dt1%c.%6-7S3\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000300, 0xff900f00, "v%21?ls%21?dt2%c.%6-7S2\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000400, 0xff900f00, "v%21?ls%21?dt3%c.%6-7S2\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000500, 0xff900f00, "v%21?ls%21?dt3%c.%6-7S2\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000600, 0xff900f00, "v%21?ls%21?dt1%c.%6-7S3\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000700, 0xff900f00, "v%21?ls%21?dt1%c.%6-7S3\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000800, 0xff900f00, "v%21?ls%21?dt2%c.%6-7S2\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000900, 0xff900f00, "v%21?ls%21?dt2%c.%6-7S2\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000a00, 0xff900f00, "v%21?ls%21?dt1%c.%6-7S3\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000000, 0xff900e00, "v%21?ls%21?dt4%c.%6-7S2\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4800000, 0xff900300, "v%21?ls%21?dt1%c.%10-11S2\t%B"},
+ {FPU_NEON_EXT_V1, 0xf4800100, 0xff900300, "v%21?ls%21?dt2%c.%10-11S2\t%B"},
+ {FPU_NEON_EXT_V1, 0xf4800200, 0xff900300, "v%21?ls%21?dt3%c.%10-11S2\t%B"},
+ {FPU_NEON_EXT_V1, 0xf4800300, 0xff900300, "v%21?ls%21?dt4%c.%10-11S2\t%B"},
+
+ {0,0 ,0, 0}
+};
+
/* Opcode tables: ARM, 16-bit Thumb, 32-bit Thumb. All three are partially
ordered: they must be searched linearly from the top to obtain a correct
match. */
@@ -410,10 +761,10 @@ static const struct opcode32 coprocessor_opcodes[] =
%<bitfield>W print the bitfield plus one in decimal
%<bitfield>x print the bitfield in hex
%<bitfield>X print the bitfield as 1 hex digit without leading "0x"
-
- %<bitnum>'c print specified char iff bit is one
- %<bitnum>`c print specified char iff bit is zero
- %<bitnum>?ab print a if bit is one else print b
+
+ %<bitfield>'c print specified char iff bitfield is all ones
+ %<bitfield>`c print specified char iff bitfield is all zeroes
+ %<bitfield>?ab... select from array of values in big endian order
%e print arm SMI operand (bits 0..7,8..19).
%E print the LSB and WIDTH fields of a BFI or BFC instruction.
@@ -424,11 +775,11 @@ static const struct opcode32 arm_opcodes[] =
/* ARM instructions. */
{ARM_EXT_V1, 0xe1a00000, 0xffffffff, "nop\t\t\t(mov r0,r0)"},
{ARM_EXT_V4T | ARM_EXT_V5, 0x012FFF10, 0x0ffffff0, "bx%c\t%0-3r"},
- {ARM_EXT_V2, 0x00000090, 0x0fe000f0, "mul%c%20's\t%16-19r, %0-3r, %8-11r"},
- {ARM_EXT_V2, 0x00200090, 0x0fe000f0, "mla%c%20's\t%16-19r, %0-3r, %8-11r, %12-15r"},
- {ARM_EXT_V2S, 0x01000090, 0x0fb00ff0, "swp%c%22'b\t%12-15r, %0-3r, [%16-19r]"},
- {ARM_EXT_V3M, 0x00800090, 0x0fa000f0, "%22?sumull%c%20's\t%12-15r, %16-19r, %0-3r, %8-11r"},
- {ARM_EXT_V3M, 0x00a00090, 0x0fa000f0, "%22?sumlal%c%20's\t%12-15r, %16-19r, %0-3r, %8-11r"},
+ {ARM_EXT_V2, 0x00000090, 0x0fe000f0, "mul%20's%c\t%16-19r, %0-3r, %8-11r"},
+ {ARM_EXT_V2, 0x00200090, 0x0fe000f0, "mla%20's%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
+ {ARM_EXT_V2S, 0x01000090, 0x0fb00ff0, "swp%22'b%c\t%12-15r, %0-3r, [%16-19r]"},
+ {ARM_EXT_V3M, 0x00800090, 0x0fa000f0, "%22?sumull%20's%c\t%12-15r, %16-19r, %0-3r, %8-11r"},
+ {ARM_EXT_V3M, 0x00a00090, 0x0fa000f0, "%22?sumlal%20's%c\t%12-15r, %16-19r, %0-3r, %8-11r"},
/* V7 instructions. */
{ARM_EXT_V7, 0xf450f000, 0xfd70f000, "pli\t%P"},
@@ -441,11 +792,11 @@ static const struct opcode32 arm_opcodes[] =
{ARM_EXT_V6T2, 0x07c0001f, 0x0fe0007f, "bfc%c\t%12-15r, %E"},
{ARM_EXT_V6T2, 0x07c00010, 0x0fe00070, "bfi%c\t%12-15r, %0-3r, %E"},
{ARM_EXT_V6T2, 0x00600090, 0x0ff000f0, "mls%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
- {ARM_EXT_V6T2, 0x006000b0, 0x0f7000f0, "str%cht\t%12-15r, %s"},
- {ARM_EXT_V6T2, 0x00300090, 0x0f300090, "ldr%c%6's%5?hbt\t%12-15r, %s"},
+ {ARM_EXT_V6T2, 0x006000b0, 0x0f7000f0, "strht%c\t%12-15r, %s"},
+ {ARM_EXT_V6T2, 0x00300090, 0x0f300090, "ldr%6's%5?hbt%c\t%12-15r, %s"},
{ARM_EXT_V6T2, 0x03000000, 0x0ff00000, "movw%c\t%12-15r, %V"},
{ARM_EXT_V6T2, 0x03400000, 0x0ff00000, "movt%c\t%12-15r, %V"},
- {ARM_EXT_V6T2, 0x03ff0f30, 0x0fff0ff0, "rbit%c\t%12-15r, %0-3r"},
+ {ARM_EXT_V6T2, 0x06ff0f30, 0x0fff0ff0, "rbit%c\t%12-15r, %0-3r"},
{ARM_EXT_V6T2, 0x07a00050, 0x0fa00070, "%22?usbfx%c\t%12-15r, %0-3r, #%7-11d, #%16-20W"},
/* ARM V6Z instructions. */
@@ -468,15 +819,15 @@ static const struct opcode32 arm_opcodes[] =
{ARM_EXT_V6K, 0x0320f000, 0x0fffff00, "nop%c\t{%0-7d}"},
/* ARM V6 instructions. */
- {ARM_EXT_V6, 0xf1080000, 0xfffdfe3f, "cpsie\t%8'a%7'i%6'f"},
- {ARM_EXT_V6, 0xf1080000, 0xfffdfe20, "cpsie\t%8'a%7'i%6'f,#%0-4d"},
- {ARM_EXT_V6, 0xf10C0000, 0xfffdfe3f, "cpsid\t%8'a%7'i%6'f"},
- {ARM_EXT_V6, 0xf10C0000, 0xfffdfe20, "cpsid\t%8'a%7'i%6'f,#%0-4d"},
+ {ARM_EXT_V6, 0xf1080000, 0xfffffe3f, "cpsie\t%8'a%7'i%6'f"},
+ {ARM_EXT_V6, 0xf10a0000, 0xfffffe20, "cpsie\t%8'a%7'i%6'f,#%0-4d"},
+ {ARM_EXT_V6, 0xf10C0000, 0xfffffe3f, "cpsid\t%8'a%7'i%6'f"},
+ {ARM_EXT_V6, 0xf10e0000, 0xfffffe20, "cpsid\t%8'a%7'i%6'f,#%0-4d"},
{ARM_EXT_V6, 0xf1000000, 0xfff1fe20, "cps\t#%0-4d"},
{ARM_EXT_V6, 0x06800010, 0x0ff00ff0, "pkhbt%c\t%12-15r, %16-19r, %0-3r"},
- {ARM_EXT_V6, 0x06800010, 0x0ff00070, "pkhbt%c\t%12-15r, %16-19r, %0-3r, LSL #%7-11d"},
- {ARM_EXT_V6, 0x06800050, 0x0ff00ff0, "pkhtb%c\t%12-15r, %16-19r, %0-3r, ASR #32"},
- {ARM_EXT_V6, 0x06800050, 0x0ff00070, "pkhtb%c\t%12-15r, %16-19r, %0-3r, ASR #%7-11d"},
+ {ARM_EXT_V6, 0x06800010, 0x0ff00070, "pkhbt%c\t%12-15r, %16-19r, %0-3r, lsl #%7-11d"},
+ {ARM_EXT_V6, 0x06800050, 0x0ff00ff0, "pkhtb%c\t%12-15r, %16-19r, %0-3r, asr #32"},
+ {ARM_EXT_V6, 0x06800050, 0x0ff00070, "pkhtb%c\t%12-15r, %16-19r, %0-3r, asr #%7-11d"},
{ARM_EXT_V6, 0x01900f9f, 0x0ff00fff, "ldrex%c\tr%12-15d, [%16-19r]"},
{ARM_EXT_V6, 0x06200f10, 0x0ff00ff0, "qadd16%c\t%12-15r, %16-19r, %0-3r"},
{ARM_EXT_V6, 0x06200f90, 0x0ff00ff0, "qadd8%c\t%12-15r, %16-19r, %0-3r"},
@@ -518,54 +869,54 @@ static const struct opcode32 arm_opcodes[] =
{ARM_EXT_V6, 0x06bf0fb0, 0x0fff0ff0, "rev16%c\t\%12-15r, %0-3r"},
{ARM_EXT_V6, 0x06ff0fb0, 0x0fff0ff0, "revsh%c\t\%12-15r, %0-3r"},
{ARM_EXT_V6, 0xf8100a00, 0xfe50ffff, "rfe%23?id%24?ba\t\%16-19r%21'!"},
- {ARM_EXT_V6, 0x06bf0070, 0x0fff0ff0, "sxth%c %12-15r,%0-3r"},
- {ARM_EXT_V6, 0x06bf0470, 0x0fff0ff0, "sxth%c %12-15r,%0-3r, ROR #8"},
- {ARM_EXT_V6, 0x06bf0870, 0x0fff0ff0, "sxth%c %12-15r,%0-3r, ROR #16"},
- {ARM_EXT_V6, 0x06bf0c70, 0x0fff0ff0, "sxth%c %12-15r,%0-3r, ROR #24"},
- {ARM_EXT_V6, 0x068f0070, 0x0fff0ff0, "sxtb16%c %12-15r,%0-3r"},
- {ARM_EXT_V6, 0x068f0470, 0x0fff0ff0, "sxtb16%c %12-15r,%0-3r, ROR #8"},
- {ARM_EXT_V6, 0x068f0870, 0x0fff0ff0, "sxtb16%c %12-15r,%0-3r, ROR #16"},
- {ARM_EXT_V6, 0x068f0c70, 0x0fff0ff0, "sxtb16%c %12-15r,%0-3r, ROR #24"},
- {ARM_EXT_V6, 0x06af0070, 0x0fff0ff0, "sxtb%c %12-15r,%0-3r"},
- {ARM_EXT_V6, 0x06af0470, 0x0fff0ff0, "sxtb%c %12-15r,%0-3r, ROR #8"},
- {ARM_EXT_V6, 0x06af0870, 0x0fff0ff0, "sxtb%c %12-15r,%0-3r, ROR #16"},
- {ARM_EXT_V6, 0x06af0c70, 0x0fff0ff0, "sxtb%c %12-15r,%0-3r, ROR #24"},
- {ARM_EXT_V6, 0x06ff0070, 0x0fff0ff0, "uxth%c %12-15r,%0-3r"},
- {ARM_EXT_V6, 0x06ff0470, 0x0fff0ff0, "uxth%c %12-15r,%0-3r, ROR #8"},
- {ARM_EXT_V6, 0x06ff0870, 0x0fff0ff0, "uxth%c %12-15r,%0-3r, ROR #16"},
- {ARM_EXT_V6, 0x06ff0c70, 0x0fff0ff0, "uxth%c %12-15r,%0-3r, ROR #24"},
- {ARM_EXT_V6, 0x06cf0070, 0x0fff0ff0, "uxtb16%c %12-15r,%0-3r"},
- {ARM_EXT_V6, 0x06cf0470, 0x0fff0ff0, "uxtb16%c %12-15r,%0-3r, ROR #8"},
- {ARM_EXT_V6, 0x06cf0870, 0x0fff0ff0, "uxtb16%c %12-15r,%0-3r, ROR #16"},
- {ARM_EXT_V6, 0x06cf0c70, 0x0fff0ff0, "uxtb16%c %12-15r,%0-3r, ROR #24"},
- {ARM_EXT_V6, 0x06ef0070, 0x0fff0ff0, "uxtb%c %12-15r,%0-3r"},
- {ARM_EXT_V6, 0x06ef0470, 0x0fff0ff0, "uxtb%c %12-15r,%0-3r, ROR #8"},
- {ARM_EXT_V6, 0x06ef0870, 0x0fff0ff0, "uxtb%c %12-15r,%0-3r, ROR #16"},
- {ARM_EXT_V6, 0x06ef0c70, 0x0fff0ff0, "uxtb%c %12-15r,%0-3r, ROR #24"},
+ {ARM_EXT_V6, 0x06bf0070, 0x0fff0ff0, "sxth%c\t%12-15r, %0-3r"},
+ {ARM_EXT_V6, 0x06bf0470, 0x0fff0ff0, "sxth%c\t%12-15r, %0-3r, ror #8"},
+ {ARM_EXT_V6, 0x06bf0870, 0x0fff0ff0, "sxth%c\t%12-15r, %0-3r, ror #16"},
+ {ARM_EXT_V6, 0x06bf0c70, 0x0fff0ff0, "sxth%c\t%12-15r, %0-3r, ror #24"},
+ {ARM_EXT_V6, 0x068f0070, 0x0fff0ff0, "sxtb16%c\t%12-15r, %0-3r"},
+ {ARM_EXT_V6, 0x068f0470, 0x0fff0ff0, "sxtb16%c\t%12-15r, %0-3r, ror #8"},
+ {ARM_EXT_V6, 0x068f0870, 0x0fff0ff0, "sxtb16%c\t%12-15r, %0-3r, ror #16"},
+ {ARM_EXT_V6, 0x068f0c70, 0x0fff0ff0, "sxtb16%c\t%12-15r, %0-3r, ror #24"},
+ {ARM_EXT_V6, 0x06af0070, 0x0fff0ff0, "sxtb%c\t%12-15r, %0-3r"},
+ {ARM_EXT_V6, 0x06af0470, 0x0fff0ff0, "sxtb%c\t%12-15r, %0-3r, ror #8"},
+ {ARM_EXT_V6, 0x06af0870, 0x0fff0ff0, "sxtb%c\t%12-15r, %0-3r, ror #16"},
+ {ARM_EXT_V6, 0x06af0c70, 0x0fff0ff0, "sxtb%c\t%12-15r, %0-3r, ror #24"},
+ {ARM_EXT_V6, 0x06ff0070, 0x0fff0ff0, "uxth%c\t%12-15r, %0-3r"},
+ {ARM_EXT_V6, 0x06ff0470, 0x0fff0ff0, "uxth%c\t%12-15r, %0-3r, ror #8"},
+ {ARM_EXT_V6, 0x06ff0870, 0x0fff0ff0, "uxth%c\t%12-15r, %0-3r, ror #16"},
+ {ARM_EXT_V6, 0x06ff0c70, 0x0fff0ff0, "uxth%c\t%12-15r, %0-3r, ror #24"},
+ {ARM_EXT_V6, 0x06cf0070, 0x0fff0ff0, "uxtb16%c\t%12-15r, %0-3r"},
+ {ARM_EXT_V6, 0x06cf0470, 0x0fff0ff0, "uxtb16%c\t%12-15r, %0-3r, ror #8"},
+ {ARM_EXT_V6, 0x06cf0870, 0x0fff0ff0, "uxtb16%c\t%12-15r, %0-3r, ror #16"},
+ {ARM_EXT_V6, 0x06cf0c70, 0x0fff0ff0, "uxtb16%c\t%12-15r, %0-3r, ror #24"},
+ {ARM_EXT_V6, 0x06ef0070, 0x0fff0ff0, "uxtb%c\t%12-15r, %0-3r"},
+ {ARM_EXT_V6, 0x06ef0470, 0x0fff0ff0, "uxtb%c\t%12-15r, %0-3r, ror #8"},
+ {ARM_EXT_V6, 0x06ef0870, 0x0fff0ff0, "uxtb%c\t%12-15r, %0-3r, ror #16"},
+ {ARM_EXT_V6, 0x06ef0c70, 0x0fff0ff0, "uxtb%c\t%12-15r, %0-3r, ror #24"},
{ARM_EXT_V6, 0x06b00070, 0x0ff00ff0, "sxtah%c\t%12-15r, %16-19r, %0-3r"},
- {ARM_EXT_V6, 0x06b00470, 0x0ff00ff0, "sxtah%c\t%12-15r, %16-19r, %0-3r, ROR #8"},
- {ARM_EXT_V6, 0x06b00870, 0x0ff00ff0, "sxtah%c\t%12-15r, %16-19r, %0-3r, ROR #16"},
- {ARM_EXT_V6, 0x06b00c70, 0x0ff00ff0, "sxtah%c\t%12-15r, %16-19r, %0-3r, ROR #24"},
+ {ARM_EXT_V6, 0x06b00470, 0x0ff00ff0, "sxtah%c\t%12-15r, %16-19r, %0-3r, ror #8"},
+ {ARM_EXT_V6, 0x06b00870, 0x0ff00ff0, "sxtah%c\t%12-15r, %16-19r, %0-3r, ror #16"},
+ {ARM_EXT_V6, 0x06b00c70, 0x0ff00ff0, "sxtah%c\t%12-15r, %16-19r, %0-3r, ror #24"},
{ARM_EXT_V6, 0x06800070, 0x0ff00ff0, "sxtab16%c\t%12-15r, %16-19r, %0-3r"},
- {ARM_EXT_V6, 0x06800470, 0x0ff00ff0, "sxtab16%c\t%12-15r, %16-19r, %0-3r, ROR #8"},
- {ARM_EXT_V6, 0x06800870, 0x0ff00ff0, "sxtab16%c\t%12-15r, %16-19r, %0-3r, ROR #16"},
- {ARM_EXT_V6, 0x06800c70, 0x0ff00ff0, "sxtab16%c\t%12-15r, %16-19r, %0-3r, ROR #24"},
+ {ARM_EXT_V6, 0x06800470, 0x0ff00ff0, "sxtab16%c\t%12-15r, %16-19r, %0-3r, ror #8"},
+ {ARM_EXT_V6, 0x06800870, 0x0ff00ff0, "sxtab16%c\t%12-15r, %16-19r, %0-3r, ror #16"},
+ {ARM_EXT_V6, 0x06800c70, 0x0ff00ff0, "sxtab16%c\t%12-15r, %16-19r, %0-3r, ror #24"},
{ARM_EXT_V6, 0x06a00070, 0x0ff00ff0, "sxtab%c\t%12-15r, %16-19r, %0-3r"},
- {ARM_EXT_V6, 0x06a00470, 0x0ff00ff0, "sxtab%c\t%12-15r, %16-19r, %0-3r, ROR #8"},
- {ARM_EXT_V6, 0x06a00870, 0x0ff00ff0, "sxtab%c\t%12-15r, %16-19r, %0-3r, ROR #16"},
- {ARM_EXT_V6, 0x06a00c70, 0x0ff00ff0, "sxtab%c\t%12-15r, %16-19r, %0-3r, ROR #24"},
+ {ARM_EXT_V6, 0x06a00470, 0x0ff00ff0, "sxtab%c\t%12-15r, %16-19r, %0-3r, ror #8"},
+ {ARM_EXT_V6, 0x06a00870, 0x0ff00ff0, "sxtab%c\t%12-15r, %16-19r, %0-3r, ror #16"},
+ {ARM_EXT_V6, 0x06a00c70, 0x0ff00ff0, "sxtab%c\t%12-15r, %16-19r, %0-3r, ror #24"},
{ARM_EXT_V6, 0x06f00070, 0x0ff00ff0, "uxtah%c\t%12-15r, %16-19r, %0-3r"},
- {ARM_EXT_V6, 0x06f00470, 0x0ff00ff0, "uxtah%c\t%12-15r, %16-19r, %0-3r, ROR #8"},
- {ARM_EXT_V6, 0x06f00870, 0x0ff00ff0, "uxtah%c\t%12-15r, %16-19r, %0-3r, ROR #16"},
- {ARM_EXT_V6, 0x06f00c70, 0x0ff00ff0, "uxtah%c\t%12-15r, %16-19r, %0-3r, ROR #24"},
+ {ARM_EXT_V6, 0x06f00470, 0x0ff00ff0, "uxtah%c\t%12-15r, %16-19r, %0-3r, ror #8"},
+ {ARM_EXT_V6, 0x06f00870, 0x0ff00ff0, "uxtah%c\t%12-15r, %16-19r, %0-3r, ror #16"},
+ {ARM_EXT_V6, 0x06f00c70, 0x0ff00ff0, "uxtah%c\t%12-15r, %16-19r, %0-3r, ror #24"},
{ARM_EXT_V6, 0x06c00070, 0x0ff00ff0, "uxtab16%c\t%12-15r, %16-19r, %0-3r"},
- {ARM_EXT_V6, 0x06c00470, 0x0ff00ff0, "uxtab16%c\t%12-15r, %16-19r, %0-3r, ROR #8"},
- {ARM_EXT_V6, 0x06c00870, 0x0ff00ff0, "uxtab16%c\t%12-15r, %16-19r, %0-3r, ROR #16"},
+ {ARM_EXT_V6, 0x06c00470, 0x0ff00ff0, "uxtab16%c\t%12-15r, %16-19r, %0-3r, ror #8"},
+ {ARM_EXT_V6, 0x06c00870, 0x0ff00ff0, "uxtab16%c\t%12-15r, %16-19r, %0-3r, ror #16"},
{ARM_EXT_V6, 0x06c00c70, 0x0ff00ff0, "uxtab16%c\t%12-15r, %16-19r, %0-3r, ROR #24"},
{ARM_EXT_V6, 0x06e00070, 0x0ff00ff0, "uxtab%c\t%12-15r, %16-19r, %0-3r"},
- {ARM_EXT_V6, 0x06e00470, 0x0ff00ff0, "uxtab%c\t%12-15r, %16-19r, %0-3r, ROR #8"},
- {ARM_EXT_V6, 0x06e00870, 0x0ff00ff0, "uxtab%c\t%12-15r, %16-19r, %0-3r, ROR #16"},
- {ARM_EXT_V6, 0x06e00c70, 0x0ff00ff0, "uxtab%c\t%12-15r, %16-19r, %0-3r, ROR #24"},
+ {ARM_EXT_V6, 0x06e00470, 0x0ff00ff0, "uxtab%c\t%12-15r, %16-19r, %0-3r, ror #8"},
+ {ARM_EXT_V6, 0x06e00870, 0x0ff00ff0, "uxtab%c\t%12-15r, %16-19r, %0-3r, ror #16"},
+ {ARM_EXT_V6, 0x06e00c70, 0x0ff00ff0, "uxtab%c\t%12-15r, %16-19r, %0-3r, ror #24"},
{ARM_EXT_V6, 0x06800fb0, 0x0ff00ff0, "sel%c\t%12-15r, %16-19r, %0-3r"},
{ARM_EXT_V6, 0xf1010000, 0xfffffc00, "setend\t%9?ble"},
{ARM_EXT_V6, 0x0700f010, 0x0ff0f0d0, "smuad%5'x%c\t%16-19r, %0-3r, %8-11r"},
@@ -577,18 +928,18 @@ static const struct opcode32 arm_opcodes[] =
{ARM_EXT_V6, 0x0750f010, 0x0ff0f0d0, "smmul%5'r%c\t%16-19r, %0-3r, %8-11r"},
{ARM_EXT_V6, 0x07500010, 0x0ff000d0, "smmla%5'r%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
{ARM_EXT_V6, 0x075000d0, 0x0ff000d0, "smmls%5'r%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
- {ARM_EXT_V6, 0xf84d0500, 0xfe5fffe0, "srs%23?id%24?ba\t#%0-4d%21'!"},
+ {ARM_EXT_V6, 0xf84d0500, 0xfe5fffe0, "srs%23?id%24?ba\t%16-19r%21'!, #%0-4d"},
{ARM_EXT_V6, 0x06a00010, 0x0fe00ff0, "ssat%c\t%12-15r, #%16-20W, %0-3r"},
- {ARM_EXT_V6, 0x06a00010, 0x0fe00070, "ssat%c\t%12-15r, #%16-20W, %0-3r, LSL #%7-11d"},
- {ARM_EXT_V6, 0x06a00050, 0x0fe00070, "ssat%c\t%12-15r, #%16-20W, %0-3r, ASR #%7-11d"},
+ {ARM_EXT_V6, 0x06a00010, 0x0fe00070, "ssat%c\t%12-15r, #%16-20W, %0-3r, lsl #%7-11d"},
+ {ARM_EXT_V6, 0x06a00050, 0x0fe00070, "ssat%c\t%12-15r, #%16-20W, %0-3r, asr #%7-11d"},
{ARM_EXT_V6, 0x06a00f30, 0x0ff00ff0, "ssat16%c\t%12-15r, #%16-19W, %0-3r"},
{ARM_EXT_V6, 0x01800f90, 0x0ff00ff0, "strex%c\t%12-15r, %0-3r, [%16-19r]"},
{ARM_EXT_V6, 0x00400090, 0x0ff000f0, "umaal%c\t%12-15r, %16-19r, %0-3r, %8-11r"},
{ARM_EXT_V6, 0x0780f010, 0x0ff0f0f0, "usad8%c\t%16-19r, %0-3r, %8-11r"},
{ARM_EXT_V6, 0x07800010, 0x0ff000f0, "usada8%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
{ARM_EXT_V6, 0x06e00010, 0x0fe00ff0, "usat%c\t%12-15r, #%16-20d, %0-3r"},
- {ARM_EXT_V6, 0x06e00010, 0x0fe00070, "usat%c\t%12-15r, #%16-20d, %0-3r, LSL #%7-11d"},
- {ARM_EXT_V6, 0x06e00050, 0x0fe00070, "usat%c\t%12-15r, #%16-20d, %0-3r, ASR #%7-11d"},
+ {ARM_EXT_V6, 0x06e00010, 0x0fe00070, "usat%c\t%12-15r, #%16-20d, %0-3r, lsl #%7-11d"},
+ {ARM_EXT_V6, 0x06e00050, 0x0fe00070, "usat%c\t%12-15r, #%16-20d, %0-3r, asr #%7-11d"},
{ARM_EXT_V6, 0x06e00f30, 0x0ff00ff0, "usat16%c\t%12-15r, #%16-19d, %0-3r"},
/* V5J instruction. */
@@ -601,8 +952,8 @@ static const struct opcode32 arm_opcodes[] =
{ARM_EXT_V5, 0x016f0f10, 0x0fff0ff0, "clz%c\t%12-15r, %0-3r"},
/* V5E "El Segundo" Instructions. */
- {ARM_EXT_V5E, 0x000000d0, 0x0e1000f0, "ldr%cd\t%12-15r, %s"},
- {ARM_EXT_V5E, 0x000000f0, 0x0e1000f0, "str%cd\t%12-15r, %s"},
+ {ARM_EXT_V5E, 0x000000d0, 0x0e1000f0, "ldrd%c\t%12-15r, %s"},
+ {ARM_EXT_V5E, 0x000000f0, 0x0e1000f0, "strd%c\t%12-15r, %s"},
{ARM_EXT_V5E, 0xf450f000, 0xfc70f000, "pld\t%a"},
{ARM_EXT_V5ExP, 0x01000080, 0x0ff000f0, "smlabb%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
{ARM_EXT_V5ExP, 0x010000a0, 0x0ff000f0, "smlatb%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
@@ -631,33 +982,45 @@ static const struct opcode32 arm_opcodes[] =
{ARM_EXT_V5ExP, 0x01600050, 0x0ff00ff0, "qdsub%c\t%12-15r, %0-3r, %16-19r"},
/* ARM Instructions. */
- {ARM_EXT_V1, 0x00000090, 0x0e100090, "str%c%6's%5?hb\t%12-15r, %s"},
- {ARM_EXT_V1, 0x00100090, 0x0e100090, "ldr%c%6's%5?hb\t%12-15r, %s"},
- {ARM_EXT_V1, 0x00000000, 0x0de00000, "and%c%20's\t%12-15r, %16-19r, %o"},
- {ARM_EXT_V1, 0x00200000, 0x0de00000, "eor%c%20's\t%12-15r, %16-19r, %o"},
- {ARM_EXT_V1, 0x00400000, 0x0de00000, "sub%c%20's\t%12-15r, %16-19r, %o"},
- {ARM_EXT_V1, 0x00600000, 0x0de00000, "rsb%c%20's\t%12-15r, %16-19r, %o"},
- {ARM_EXT_V1, 0x00800000, 0x0de00000, "add%c%20's\t%12-15r, %16-19r, %o"},
- {ARM_EXT_V1, 0x00a00000, 0x0de00000, "adc%c%20's\t%12-15r, %16-19r, %o"},
- {ARM_EXT_V1, 0x00c00000, 0x0de00000, "sbc%c%20's\t%12-15r, %16-19r, %o"},
- {ARM_EXT_V1, 0x00e00000, 0x0de00000, "rsc%c%20's\t%12-15r, %16-19r, %o"},
+ {ARM_EXT_V1, 0x00000090, 0x0e100090, "str%6's%5?hb%c\t%12-15r, %s"},
+ {ARM_EXT_V1, 0x00100090, 0x0e100090, "ldr%6's%5?hb%c\t%12-15r, %s"},
+ {ARM_EXT_V1, 0x00000000, 0x0de00000, "and%20's%c\t%12-15r, %16-19r, %o"},
+ {ARM_EXT_V1, 0x00200000, 0x0de00000, "eor%20's%c\t%12-15r, %16-19r, %o"},
+ {ARM_EXT_V1, 0x00400000, 0x0de00000, "sub%20's%c\t%12-15r, %16-19r, %o"},
+ {ARM_EXT_V1, 0x00600000, 0x0de00000, "rsb%20's%c\t%12-15r, %16-19r, %o"},
+ {ARM_EXT_V1, 0x00800000, 0x0de00000, "add%20's%c\t%12-15r, %16-19r, %o"},
+ {ARM_EXT_V1, 0x00a00000, 0x0de00000, "adc%20's%c\t%12-15r, %16-19r, %o"},
+ {ARM_EXT_V1, 0x00c00000, 0x0de00000, "sbc%20's%c\t%12-15r, %16-19r, %o"},
+ {ARM_EXT_V1, 0x00e00000, 0x0de00000, "rsc%20's%c\t%12-15r, %16-19r, %o"},
{ARM_EXT_V3, 0x0120f000, 0x0db0f000, "msr%c\t%22?SCPSR%C, %o"},
{ARM_EXT_V3, 0x010f0000, 0x0fbf0fff, "mrs%c\t%12-15r, %22?SCPSR"},
- {ARM_EXT_V1, 0x01000000, 0x0de00000, "tst%c%p\t%16-19r, %o"},
- {ARM_EXT_V1, 0x01200000, 0x0de00000, "teq%c%p\t%16-19r, %o"},
- {ARM_EXT_V1, 0x01400000, 0x0de00000, "cmp%c%p\t%16-19r, %o"},
- {ARM_EXT_V1, 0x01600000, 0x0de00000, "cmn%c%p\t%16-19r, %o"},
- {ARM_EXT_V1, 0x01800000, 0x0de00000, "orr%c%20's\t%12-15r, %16-19r, %o"},
- {ARM_EXT_V1, 0x01a00000, 0x0de00000, "mov%c%20's\t%12-15r, %o"},
- {ARM_EXT_V1, 0x01c00000, 0x0de00000, "bic%c%20's\t%12-15r, %16-19r, %o"},
- {ARM_EXT_V1, 0x01e00000, 0x0de00000, "mvn%c%20's\t%12-15r, %o"},
- {ARM_EXT_V1, 0x04000000, 0x0e100000, "str%c%22'b%t\t%12-15r, %a"},
- {ARM_EXT_V1, 0x06000000, 0x0e100ff0, "str%c%22'b%t\t%12-15r, %a"},
- {ARM_EXT_V1, 0x04000000, 0x0c100010, "str%c%22'b%t\t%12-15r, %a"},
+ {ARM_EXT_V1, 0x01000000, 0x0de00000, "tst%p%c\t%16-19r, %o"},
+ {ARM_EXT_V1, 0x01200000, 0x0de00000, "teq%p%c\t%16-19r, %o"},
+ {ARM_EXT_V1, 0x01400000, 0x0de00000, "cmp%p%c\t%16-19r, %o"},
+ {ARM_EXT_V1, 0x01600000, 0x0de00000, "cmn%p%c\t%16-19r, %o"},
+ {ARM_EXT_V1, 0x01800000, 0x0de00000, "orr%20's%c\t%12-15r, %16-19r, %o"},
+ {ARM_EXT_V1, 0x03a00000, 0x0fef0000, "mov%20's%c\t%12-15r, %o"},
+ {ARM_EXT_V1, 0x01a00000, 0x0def0ff0, "mov%20's%c\t%12-15r, %0-3r"},
+ {ARM_EXT_V1, 0x01a00000, 0x0def0060, "lsl%20's%c\t%12-15r, %q"},
+ {ARM_EXT_V1, 0x01a00020, 0x0def0060, "lsr%20's%c\t%12-15r, %q"},
+ {ARM_EXT_V1, 0x01a00040, 0x0def0060, "asr%20's%c\t%12-15r, %q"},
+ {ARM_EXT_V1, 0x01a00060, 0x0def0ff0, "rrx%20's%c\t%12-15r, %0-3r"},
+ {ARM_EXT_V1, 0x01a00060, 0x0def0060, "ror%20's%c\t%12-15r, %q"},
+ {ARM_EXT_V1, 0x01c00000, 0x0de00000, "bic%20's%c\t%12-15r, %16-19r, %o"},
+ {ARM_EXT_V1, 0x01e00000, 0x0de00000, "mvn%20's%c\t%12-15r, %o"},
+ {ARM_EXT_V1, 0x052d0004, 0x0fff0fff, "push%c\t{%12-15r}\t\t; (str%c %12-15r, %a)"},
+ {ARM_EXT_V1, 0x04000000, 0x0e100000, "str%22'b%t%c\t%12-15r, %a"},
+ {ARM_EXT_V1, 0x06000000, 0x0e100ff0, "str%22'b%t%c\t%12-15r, %a"},
+ {ARM_EXT_V1, 0x04000000, 0x0c100010, "str%22'b%t%c\t%12-15r, %a"},
{ARM_EXT_V1, 0x06000010, 0x0e000010, "undefined"},
- {ARM_EXT_V1, 0x04100000, 0x0c100000, "ldr%c%22'b%t\t%12-15r, %a"},
- {ARM_EXT_V1, 0x08000000, 0x0e100000, "stm%c%23?id%24?ba\t%16-19r%21'!, %m%22'^"},
- {ARM_EXT_V1, 0x08100000, 0x0e100000, "ldm%c%23?id%24?ba\t%16-19r%21'!, %m%22'^"},
+ {ARM_EXT_V1, 0x049d0004, 0x0fff0fff, "pop%c\t{%12-15r}\t\t; (ldr%c %12-15r, %a)"},
+ {ARM_EXT_V1, 0x04100000, 0x0c100000, "ldr%22'b%t%c\t%12-15r, %a"},
+ {ARM_EXT_V1, 0x092d0000, 0x0fff0000, "push%c\t%m"},
+ {ARM_EXT_V1, 0x08800000, 0x0ff00000, "stm%c\t%16-19r%21'!, %m%22'^"},
+ {ARM_EXT_V1, 0x08000000, 0x0e100000, "stm%23?id%24?ba%c\t%16-19r%21'!, %m%22'^"},
+ {ARM_EXT_V1, 0x08bd0000, 0x0fff0000, "pop%c\t%m"},
+ {ARM_EXT_V1, 0x08900000, 0x0f900000, "ldm%c\t%16-19r%21'!, %m%22'^"},
+ {ARM_EXT_V1, 0x08100000, 0x0e100000, "ldm%23?id%24?ba%c\t%16-19r%21'!, %m%22'^"},
{ARM_EXT_V1, 0x0a000000, 0x0e000000, "b%24'l%c\t%b"},
{ARM_EXT_V1, 0x0f000000, 0x0f000000, "svc%c\t%0-23x"},
@@ -677,6 +1040,11 @@ static const struct opcode32 arm_opcodes[] =
%M print Thumb register mask
%b print CZB's 6-bit unsigned branch destination
%s print Thumb right-shift immediate (6..10; 0 == 32).
+ %c print the condition code
+ %C print the condition code, or "s" if not conditional
+ %x print warning if conditional an not at end of IT block"
+ %X print "\t; unpredictable <IT:code>" if conditional
+ %I print IT instruction suffix and operands
%<bitfield>r print bitfield as an ARM register
%<bitfield>d print bitfield as a decimal
%<bitfield>H print (bitfield * 2) as a decimal
@@ -692,117 +1060,112 @@ static const struct opcode16 thumb_opcodes[] =
/* Thumb instructions. */
/* ARM V6K no-argument instructions. */
- {ARM_EXT_V6K, 0xbf00, 0xffff, "nop"},
- {ARM_EXT_V6K, 0xbf10, 0xffff, "yield"},
- {ARM_EXT_V6K, 0xbf20, 0xffff, "wfe"},
- {ARM_EXT_V6K, 0xbf30, 0xffff, "wfi"},
- {ARM_EXT_V6K, 0xbf40, 0xffff, "sev"},
- {ARM_EXT_V6K, 0xbf00, 0xff0f, "nop\t{%4-7d}"},
+ {ARM_EXT_V6K, 0xbf00, 0xffff, "nop%c"},
+ {ARM_EXT_V6K, 0xbf10, 0xffff, "yield%c"},
+ {ARM_EXT_V6K, 0xbf20, 0xffff, "wfe%c"},
+ {ARM_EXT_V6K, 0xbf30, 0xffff, "wfi%c"},
+ {ARM_EXT_V6K, 0xbf40, 0xffff, "sev%c"},
+ {ARM_EXT_V6K, 0xbf00, 0xff0f, "nop%c\t{%4-7d}"},
/* ARM V6T2 instructions. */
- {ARM_EXT_V6T2, 0xb900, 0xfd00, "cbnz\t%0-2r, %b"},
- {ARM_EXT_V6T2, 0xb100, 0xfd00, "cbz\t%0-2r, %b"},
- {ARM_EXT_V6T2, 0xbf08, 0xff0f, "it\t%4-7c"},
- {ARM_EXT_V6T2, 0xbf14, 0xff17, "it%3?te\t%4-7c"},
- {ARM_EXT_V6T2, 0xbf04, 0xff17, "it%3?et\t%4-7c"},
- {ARM_EXT_V6T2, 0xbf12, 0xff13, "it%3?te%2?te\t%4-7c"},
- {ARM_EXT_V6T2, 0xbf02, 0xff13, "it%3?et%2?et\t%4-7c"},
- {ARM_EXT_V6T2, 0xbf11, 0xff11, "it%3?te%2?te%1?te\t%4-7c"},
- {ARM_EXT_V6T2, 0xbf01, 0xff11, "it%3?et%2?et%1?et\t%4-7c"},
+ {ARM_EXT_V6T2, 0xb900, 0xfd00, "cbnz\t%0-2r, %b%X"},
+ {ARM_EXT_V6T2, 0xb100, 0xfd00, "cbz\t%0-2r, %b%X"},
+ {ARM_EXT_V6T2, 0xbf00, 0xff00, "it%I%X"},
/* ARM V6. */
- {ARM_EXT_V6, 0xb660, 0xfff8, "cpsie\t%2'a%1'i%0'f"},
- {ARM_EXT_V6, 0xb670, 0xfff8, "cpsid\t%2'a%1'i%0'f"},
- {ARM_EXT_V6, 0x4600, 0xffc0, "mov\t%0-2r, %3-5r"},
- {ARM_EXT_V6, 0xba00, 0xffc0, "rev\t%0-2r, %3-5r"},
- {ARM_EXT_V6, 0xba40, 0xffc0, "rev16\t%0-2r, %3-5r"},
- {ARM_EXT_V6, 0xbac0, 0xffc0, "revsh\t%0-2r, %3-5r"},
- {ARM_EXT_V6, 0xb650, 0xfff7, "setend\t%3?ble"},
- {ARM_EXT_V6, 0xb200, 0xffc0, "sxth\t%0-2r, %3-5r"},
- {ARM_EXT_V6, 0xb240, 0xffc0, "sxtb\t%0-2r, %3-5r"},
- {ARM_EXT_V6, 0xb280, 0xffc0, "uxth\t%0-2r, %3-5r"},
- {ARM_EXT_V6, 0xb2c0, 0xffc0, "uxtb\t%0-2r, %3-5r"},
+ {ARM_EXT_V6, 0xb660, 0xfff8, "cpsie\t%2'a%1'i%0'f%X"},
+ {ARM_EXT_V6, 0xb670, 0xfff8, "cpsid\t%2'a%1'i%0'f%X"},
+ {ARM_EXT_V6, 0x4600, 0xffc0, "mov%c\t%0-2r, %3-5r"},
+ {ARM_EXT_V6, 0xba00, 0xffc0, "rev%c\t%0-2r, %3-5r"},
+ {ARM_EXT_V6, 0xba40, 0xffc0, "rev16%c\t%0-2r, %3-5r"},
+ {ARM_EXT_V6, 0xbac0, 0xffc0, "revsh%c\t%0-2r, %3-5r"},
+ {ARM_EXT_V6, 0xb650, 0xfff7, "setend\t%3?ble%X"},
+ {ARM_EXT_V6, 0xb200, 0xffc0, "sxth%c\t%0-2r, %3-5r"},
+ {ARM_EXT_V6, 0xb240, 0xffc0, "sxtb%c\t%0-2r, %3-5r"},
+ {ARM_EXT_V6, 0xb280, 0xffc0, "uxth%c\t%0-2r, %3-5r"},
+ {ARM_EXT_V6, 0xb2c0, 0xffc0, "uxtb%c\t%0-2r, %3-5r"},
/* ARM V5 ISA extends Thumb. */
- {ARM_EXT_V5T, 0xbe00, 0xff00, "bkpt\t%0-7x"},
+ {ARM_EXT_V5T, 0xbe00, 0xff00, "bkpt\t%0-7x"}, /* Is always unconditional. */
/* This is BLX(2). BLX(1) is a 32-bit instruction. */
- {ARM_EXT_V5T, 0x4780, 0xff87, "blx\t%3-6r"}, /* note: 4 bit register number. */
+ {ARM_EXT_V5T, 0x4780, 0xff87, "blx%c\t%3-6r%x"}, /* note: 4 bit register number. */
/* ARM V4T ISA (Thumb v1). */
- {ARM_EXT_V4T, 0x46C0, 0xFFFF, "nop\t\t\t(mov r8, r8)"},
+ {ARM_EXT_V4T, 0x46C0, 0xFFFF, "nop%c\t\t\t(mov r8, r8)"},
/* Format 4. */
- {ARM_EXT_V4T, 0x4000, 0xFFC0, "ands\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x4040, 0xFFC0, "eors\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x4080, 0xFFC0, "lsls\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x40C0, 0xFFC0, "lsrs\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x4100, 0xFFC0, "asrs\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x4140, 0xFFC0, "adcs\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x4180, 0xFFC0, "sbcs\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x41C0, 0xFFC0, "rors\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x4200, 0xFFC0, "tst\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x4240, 0xFFC0, "negs\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x4280, 0xFFC0, "cmp\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x42C0, 0xFFC0, "cmn\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x4300, 0xFFC0, "orrs\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x4340, 0xFFC0, "muls\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x4380, 0xFFC0, "bics\t%0-2r, %3-5r"},
- {ARM_EXT_V4T, 0x43C0, 0xFFC0, "mvns\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x4000, 0xFFC0, "and%C\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x4040, 0xFFC0, "eor%C\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x4080, 0xFFC0, "lsl%C\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x40C0, 0xFFC0, "lsr%C\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x4100, 0xFFC0, "asr%C\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x4140, 0xFFC0, "adc%C\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x4180, 0xFFC0, "sbc%C\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x41C0, 0xFFC0, "ror%C\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x4200, 0xFFC0, "tst%c\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x4240, 0xFFC0, "neg%C\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x4280, 0xFFC0, "cmp%c\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x42C0, 0xFFC0, "cmn%c\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x4300, 0xFFC0, "orr%C\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x4340, 0xFFC0, "mul%C\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x4380, 0xFFC0, "bic%C\t%0-2r, %3-5r"},
+ {ARM_EXT_V4T, 0x43C0, 0xFFC0, "mvn%C\t%0-2r, %3-5r"},
/* format 13 */
- {ARM_EXT_V4T, 0xB000, 0xFF80, "add\tsp, #%0-6W"},
- {ARM_EXT_V4T, 0xB080, 0xFF80, "sub\tsp, #%0-6W"},
+ {ARM_EXT_V4T, 0xB000, 0xFF80, "add%c\tsp, #%0-6W"},
+ {ARM_EXT_V4T, 0xB080, 0xFF80, "sub%c\tsp, #%0-6W"},
/* format 5 */
- {ARM_EXT_V4T, 0x4700, 0xFF80, "bx\t%S"},
- {ARM_EXT_V4T, 0x4400, 0xFF00, "add\t%D, %S"},
- {ARM_EXT_V4T, 0x4500, 0xFF00, "cmp\t%D, %S"},
- {ARM_EXT_V4T, 0x4600, 0xFF00, "mov\t%D, %S"},
+ {ARM_EXT_V4T, 0x4700, 0xFF80, "bx%c\t%S%x"},
+ {ARM_EXT_V4T, 0x4400, 0xFF00, "add%c\t%D, %S"},
+ {ARM_EXT_V4T, 0x4500, 0xFF00, "cmp%c\t%D, %S"},
+ {ARM_EXT_V4T, 0x4600, 0xFF00, "mov%c\t%D, %S"},
/* format 14 */
- {ARM_EXT_V4T, 0xB400, 0xFE00, "push\t%N"},
- {ARM_EXT_V4T, 0xBC00, 0xFE00, "pop\t%O"},
+ {ARM_EXT_V4T, 0xB400, 0xFE00, "push%c\t%N"},
+ {ARM_EXT_V4T, 0xBC00, 0xFE00, "pop%c\t%O"},
/* format 2 */
- {ARM_EXT_V4T, 0x1800, 0xFE00, "adds\t%0-2r, %3-5r, %6-8r"},
- {ARM_EXT_V4T, 0x1A00, 0xFE00, "subs\t%0-2r, %3-5r, %6-8r"},
- {ARM_EXT_V4T, 0x1C00, 0xFE00, "adds\t%0-2r, %3-5r, #%6-8d"},
- {ARM_EXT_V4T, 0x1E00, 0xFE00, "subs\t%0-2r, %3-5r, #%6-8d"},
+ {ARM_EXT_V4T, 0x1800, 0xFE00, "add%C\t%0-2r, %3-5r, %6-8r"},
+ {ARM_EXT_V4T, 0x1A00, 0xFE00, "sub%C\t%0-2r, %3-5r, %6-8r"},
+ {ARM_EXT_V4T, 0x1C00, 0xFE00, "add%C\t%0-2r, %3-5r, #%6-8d"},
+ {ARM_EXT_V4T, 0x1E00, 0xFE00, "sub%C\t%0-2r, %3-5r, #%6-8d"},
/* format 8 */
- {ARM_EXT_V4T, 0x5200, 0xFE00, "strh\t%0-2r, [%3-5r, %6-8r]"},
- {ARM_EXT_V4T, 0x5A00, 0xFE00, "ldrh\t%0-2r, [%3-5r, %6-8r]"},
- {ARM_EXT_V4T, 0x5600, 0xF600, "ldrs%11?hb\t%0-2r, [%3-5r, %6-8r]"},
+ {ARM_EXT_V4T, 0x5200, 0xFE00, "strh%c\t%0-2r, [%3-5r, %6-8r]"},
+ {ARM_EXT_V4T, 0x5A00, 0xFE00, "ldrh%c\t%0-2r, [%3-5r, %6-8r]"},
+ {ARM_EXT_V4T, 0x5600, 0xF600, "ldrs%11?hb%c\t%0-2r, [%3-5r, %6-8r]"},
/* format 7 */
- {ARM_EXT_V4T, 0x5000, 0xFA00, "str%10'b\t%0-2r, [%3-5r, %6-8r]"},
- {ARM_EXT_V4T, 0x5800, 0xFA00, "ldr%10'b\t%0-2r, [%3-5r, %6-8r]"},
+ {ARM_EXT_V4T, 0x5000, 0xFA00, "str%10'b%c\t%0-2r, [%3-5r, %6-8r]"},
+ {ARM_EXT_V4T, 0x5800, 0xFA00, "ldr%10'b%c\t%0-2r, [%3-5r, %6-8r]"},
/* format 1 */
- {ARM_EXT_V4T, 0x0000, 0xF800, "lsls\t%0-2r, %3-5r, #%6-10d"},
- {ARM_EXT_V4T, 0x0800, 0xF800, "lsrs\t%0-2r, %3-5r, %s"},
- {ARM_EXT_V4T, 0x1000, 0xF800, "asrs\t%0-2r, %3-5r, %s"},
+ {ARM_EXT_V4T, 0x0000, 0xF800, "lsl%C\t%0-2r, %3-5r, #%6-10d"},
+ {ARM_EXT_V4T, 0x0800, 0xF800, "lsr%C\t%0-2r, %3-5r, %s"},
+ {ARM_EXT_V4T, 0x1000, 0xF800, "asr%C\t%0-2r, %3-5r, %s"},
/* format 3 */
- {ARM_EXT_V4T, 0x2000, 0xF800, "movs\t%8-10r, #%0-7d"},
- {ARM_EXT_V4T, 0x2800, 0xF800, "cmp\t%8-10r, #%0-7d"},
- {ARM_EXT_V4T, 0x3000, 0xF800, "adds\t%8-10r, #%0-7d"},
- {ARM_EXT_V4T, 0x3800, 0xF800, "subs\t%8-10r, #%0-7d"},
+ {ARM_EXT_V4T, 0x2000, 0xF800, "mov%C\t%8-10r, #%0-7d"},
+ {ARM_EXT_V4T, 0x2800, 0xF800, "cmp%c\t%8-10r, #%0-7d"},
+ {ARM_EXT_V4T, 0x3000, 0xF800, "add%C\t%8-10r, #%0-7d"},
+ {ARM_EXT_V4T, 0x3800, 0xF800, "sub%C\t%8-10r, #%0-7d"},
/* format 6 */
- {ARM_EXT_V4T, 0x4800, 0xF800, "ldr\t%8-10r, [pc, #%0-7W]\t(%0-7a)"}, /* TODO: Disassemble PC relative "LDR rD,=<symbolic>" */
+ {ARM_EXT_V4T, 0x4800, 0xF800, "ldr%c\t%8-10r, [pc, #%0-7W]\t(%0-7a)"}, /* TODO: Disassemble PC relative "LDR rD,=<symbolic>" */
/* format 9 */
- {ARM_EXT_V4T, 0x6000, 0xF800, "str\t%0-2r, [%3-5r, #%6-10W]"},
- {ARM_EXT_V4T, 0x6800, 0xF800, "ldr\t%0-2r, [%3-5r, #%6-10W]"},
- {ARM_EXT_V4T, 0x7000, 0xF800, "strb\t%0-2r, [%3-5r, #%6-10d]"},
- {ARM_EXT_V4T, 0x7800, 0xF800, "ldrb\t%0-2r, [%3-5r, #%6-10d]"},
+ {ARM_EXT_V4T, 0x6000, 0xF800, "str%c\t%0-2r, [%3-5r, #%6-10W]"},
+ {ARM_EXT_V4T, 0x6800, 0xF800, "ldr%c\t%0-2r, [%3-5r, #%6-10W]"},
+ {ARM_EXT_V4T, 0x7000, 0xF800, "strb%c\t%0-2r, [%3-5r, #%6-10d]"},
+ {ARM_EXT_V4T, 0x7800, 0xF800, "ldrb%c\t%0-2r, [%3-5r, #%6-10d]"},
/* format 10 */
- {ARM_EXT_V4T, 0x8000, 0xF800, "strh\t%0-2r, [%3-5r, #%6-10H]"},
- {ARM_EXT_V4T, 0x8800, 0xF800, "ldrh\t%0-2r, [%3-5r, #%6-10H]"},
+ {ARM_EXT_V4T, 0x8000, 0xF800, "strh%c\t%0-2r, [%3-5r, #%6-10H]"},
+ {ARM_EXT_V4T, 0x8800, 0xF800, "ldrh%c\t%0-2r, [%3-5r, #%6-10H]"},
/* format 11 */
- {ARM_EXT_V4T, 0x9000, 0xF800, "str\t%8-10r, [sp, #%0-7W]"},
- {ARM_EXT_V4T, 0x9800, 0xF800, "ldr\t%8-10r, [sp, #%0-7W]"},
+ {ARM_EXT_V4T, 0x9000, 0xF800, "str%c\t%8-10r, [sp, #%0-7W]"},
+ {ARM_EXT_V4T, 0x9800, 0xF800, "ldr%c\t%8-10r, [sp, #%0-7W]"},
/* format 12 */
- {ARM_EXT_V4T, 0xA000, 0xF800, "add\t%8-10r, pc, #%0-7W\t(adr %8-10r,%0-7a)"},
- {ARM_EXT_V4T, 0xA800, 0xF800, "add\t%8-10r, sp, #%0-7W"},
+ {ARM_EXT_V4T, 0xA000, 0xF800, "add%c\t%8-10r, pc, #%0-7W\t(adr %8-10r, %0-7a)"},
+ {ARM_EXT_V4T, 0xA800, 0xF800, "add%c\t%8-10r, sp, #%0-7W"},
/* format 15 */
- {ARM_EXT_V4T, 0xC000, 0xF800, "stmia\t%8-10r!, %M"},
- {ARM_EXT_V4T, 0xC800, 0xF800, "ldmia\t%8-10r!, %M"},
+ {ARM_EXT_V4T, 0xC000, 0xF800, "stmia%c\t%8-10r!, %M"},
+ {ARM_EXT_V4T, 0xC800, 0xF800, "ldmia%c\t%8-10r!, %M"},
/* format 17 */
- {ARM_EXT_V4T, 0xDF00, 0xFF00, "svc\t%0-7d"},
+ {ARM_EXT_V4T, 0xDF00, 0xFF00, "svc%c\t%0-7d"},
/* format 16 */
- {ARM_EXT_V4T, 0xD000, 0xF000, "b%8-11c.n\t%0-7B"},
+ {ARM_EXT_V4T, 0xDE00, 0xFE00, "undefined"},
+ {ARM_EXT_V4T, 0xD000, 0xF000, "b%8-11c.n\t%0-7B%X"},
/* format 18 */
- {ARM_EXT_V4T, 0xE000, 0xF800, "b.n\t%0-10B"},
+ {ARM_EXT_V4T, 0xE000, 0xF800, "b%c.n\t%0-10B%x"},
/* The E800 .. FFFF range is unconditionally redirected to the
32-bit table, because even in pre-V6T2 ISAs, BL and BLX(1) pairs
@@ -838,15 +1201,18 @@ static const struct opcode16 thumb_opcodes[] =
%R print the rotation field of an SXT instruction
%U print barrier type.
%P print address for pli instruction.
+ %c print the condition code
+ %x print warning if conditional an not at end of IT block"
+ %X print "\t; unpredictable <IT:code>" if conditional
%<bitfield>d print bitfield in decimal
%<bitfield>W print bitfield*4 in decimal
%<bitfield>r print bitfield as an ARM register
%<bitfield>c print bitfield as a condition code
- %<bitnum>'c print "c" iff bit is one
- %<bitnum>`c print "c" iff bit is zero
- %<bitnum>?ab print "a" if bit is one, else "b"
+ %<bitfield>'c print specified char iff bitfield is all ones
+ %<bitfield>`c print specified char iff bitfield is all zeroes
+ %<bitfield>?ab... select from array of values in big endian order
With one exception at the bottom (done because BL and BLX(1) need
to come dead last), this table was machine-sorted first in
@@ -859,202 +1225,204 @@ static const struct opcode16 thumb_opcodes[] =
static const struct opcode32 thumb32_opcodes[] =
{
/* V7 instructions. */
- {ARM_EXT_V7, 0xf910f000, 0xff70f000, "pli\t%a"},
- {ARM_EXT_V7, 0xf3af80f0, 0xfffffff0, "dbg\t#%0-3d"},
- {ARM_EXT_V7, 0xf3bf8f50, 0xfffffff0, "dmb\t%U"},
- {ARM_EXT_V7, 0xf3bf8f40, 0xfffffff0, "dsb\t%U"},
- {ARM_EXT_V7, 0xf3bf8f60, 0xfffffff0, "isb\t%U"},
- {ARM_EXT_DIV, 0xfb90f0f0, 0xfff0f0f0, "sdiv\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_DIV, 0xfbb0f0f0, 0xfff0f0f0, "udiv\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V7, 0xf910f000, 0xff70f000, "pli%c\t%a"},
+ {ARM_EXT_V7, 0xf3af80f0, 0xfffffff0, "dbg%c\t#%0-3d"},
+ {ARM_EXT_V7, 0xf3bf8f50, 0xfffffff0, "dmb%c\t%U"},
+ {ARM_EXT_V7, 0xf3bf8f40, 0xfffffff0, "dsb%c\t%U"},
+ {ARM_EXT_V7, 0xf3bf8f60, 0xfffffff0, "isb%c\t%U"},
+ {ARM_EXT_DIV, 0xfb90f0f0, 0xfff0f0f0, "sdiv%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_DIV, 0xfbb0f0f0, 0xfff0f0f0, "udiv%c\t%8-11r, %16-19r, %0-3r"},
/* Instructions defined in the basic V6T2 set. */
- {ARM_EXT_V6T2, 0xf3af8000, 0xffffffff, "nop.w"},
- {ARM_EXT_V6T2, 0xf3af8001, 0xffffffff, "yield.w"},
- {ARM_EXT_V6T2, 0xf3af8002, 0xffffffff, "wfe.w"},
- {ARM_EXT_V6T2, 0xf3af8003, 0xffffffff, "wfi.w"},
- {ARM_EXT_V6T2, 0xf3af9004, 0xffffffff, "sev.w"},
- {ARM_EXT_V6T2, 0xf3af8000, 0xffffff00, "nop.w\t{%0-7d}"},
-
- {ARM_EXT_V6T2, 0xf3bf8f2f, 0xffffffff, "clrex"},
- {ARM_EXT_V6T2, 0xf3af8400, 0xffffff1f, "cpsie.w\t%7'a%6'i%5'f"},
- {ARM_EXT_V6T2, 0xf3af8600, 0xffffff1f, "cpsid.w\t%7'a%6'i%5'f"},
- {ARM_EXT_V6T2, 0xf3c08f00, 0xfff0ffff, "bxj\t%16-19r"},
- {ARM_EXT_V6T2, 0xe810c000, 0xffd0ffff, "rfedb\t%16-19r%21'!"},
- {ARM_EXT_V6T2, 0xe990c000, 0xffd0ffff, "rfeia\t%16-19r%21'!"},
- {ARM_EXT_V6T2, 0xf3ef8000, 0xffeff000, "mrs\t%8-11r, %D"},
- {ARM_EXT_V6T2, 0xf3af8100, 0xffffffe0, "cps\t#%0-4d"},
- {ARM_EXT_V6T2, 0xe8d0f000, 0xfff0fff0, "tbb\t[%16-19r, %0-3r]"},
- {ARM_EXT_V6T2, 0xe8d0f010, 0xfff0fff0, "tbh\t[%16-19r, %0-3r, lsl #1]"},
- {ARM_EXT_V6T2, 0xf3af8500, 0xffffff00, "cpsie\t%7'a%6'i%5'f, #%0-4d"},
- {ARM_EXT_V6T2, 0xf3af8700, 0xffffff00, "cpsid\t%7'a%6'i%5'f, #%0-4d"},
- {ARM_EXT_V6T2, 0xf3de8f00, 0xffffff00, "subs\tpc, lr, #%0-7d"},
- {ARM_EXT_V6T2, 0xf3808000, 0xffe0f000, "msr\t%C, %16-19r"},
- {ARM_EXT_V6T2, 0xe8500f00, 0xfff00fff, "ldrex\t%12-15r, [%16-19r]"},
- {ARM_EXT_V6T2, 0xe8d00f4f, 0xfff00fef, "ldrex%4?hb\t%12-15r, [%16-19r]"},
- {ARM_EXT_V6T2, 0xe800c000, 0xffd0ffe0, "srsdb\t#%0-4d%21'!"},
- {ARM_EXT_V6T2, 0xe980c000, 0xffd0ffe0, "srsia\t#%0-4d%21'!"},
- {ARM_EXT_V6T2, 0xfa0ff080, 0xfffff0c0, "sxth.w\t%8-11r, %0-3r%R"},
- {ARM_EXT_V6T2, 0xfa1ff080, 0xfffff0c0, "uxth.w\t%8-11r, %0-3r%R"},
- {ARM_EXT_V6T2, 0xfa2ff080, 0xfffff0c0, "sxtb16\t%8-11r, %0-3r%R"},
- {ARM_EXT_V6T2, 0xfa3ff080, 0xfffff0c0, "uxtb16\t%8-11r, %0-3r%R"},
- {ARM_EXT_V6T2, 0xfa4ff080, 0xfffff0c0, "sxtb.w\t%8-11r, %0-3r%R"},
- {ARM_EXT_V6T2, 0xfa5ff080, 0xfffff0c0, "uxtb.w\t%8-11r, %0-3r%R"},
- {ARM_EXT_V6T2, 0xe8400000, 0xfff000ff, "strex\t%8-11r, %12-15r, [%16-19r]"},
- {ARM_EXT_V6T2, 0xe8d0007f, 0xfff000ff, "ldrexd\t%12-15r, %8-11r, [%16-19r]"},
- {ARM_EXT_V6T2, 0xfa80f000, 0xfff0f0f0, "sadd8\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa80f010, 0xfff0f0f0, "qadd8\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa80f020, 0xfff0f0f0, "shadd8\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa80f040, 0xfff0f0f0, "uadd8\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa80f050, 0xfff0f0f0, "uqadd8\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa80f060, 0xfff0f0f0, "uhadd8\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa80f080, 0xfff0f0f0, "qadd\t%8-11r, %0-3r, %16-19r"},
- {ARM_EXT_V6T2, 0xfa80f090, 0xfff0f0f0, "qdadd\t%8-11r, %0-3r, %16-19r"},
- {ARM_EXT_V6T2, 0xfa80f0a0, 0xfff0f0f0, "qsub\t%8-11r, %0-3r, %16-19r"},
- {ARM_EXT_V6T2, 0xfa80f0b0, 0xfff0f0f0, "qdsub\t%8-11r, %0-3r, %16-19r"},
- {ARM_EXT_V6T2, 0xfa90f000, 0xfff0f0f0, "sadd16\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa90f010, 0xfff0f0f0, "qadd16\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa90f020, 0xfff0f0f0, "shadd16\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa90f040, 0xfff0f0f0, "uadd16\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa90f050, 0xfff0f0f0, "uqadd16\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa90f060, 0xfff0f0f0, "uhadd16\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa90f080, 0xfff0f0f0, "rev.w\t%8-11r, %16-19r"},
- {ARM_EXT_V6T2, 0xfa90f090, 0xfff0f0f0, "rev16.w\t%8-11r, %16-19r"},
- {ARM_EXT_V6T2, 0xfa90f0a0, 0xfff0f0f0, "rbit\t%8-11r, %16-19r"},
- {ARM_EXT_V6T2, 0xfa90f0b0, 0xfff0f0f0, "revsh.w\t%8-11r, %16-19r"},
- {ARM_EXT_V6T2, 0xfaa0f000, 0xfff0f0f0, "saddsubx\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfaa0f010, 0xfff0f0f0, "qaddsubx\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfaa0f020, 0xfff0f0f0, "shaddsubx\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfaa0f040, 0xfff0f0f0, "uaddsubx\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfaa0f050, 0xfff0f0f0, "uqaddsubx\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfaa0f060, 0xfff0f0f0, "uhaddsubx\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfaa0f080, 0xfff0f0f0, "sel\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfab0f080, 0xfff0f0f0, "clz\t%8-11r, %16-19r"},
- {ARM_EXT_V6T2, 0xfac0f000, 0xfff0f0f0, "ssub8\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfac0f010, 0xfff0f0f0, "qsub8\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfac0f020, 0xfff0f0f0, "shsub8\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfac0f040, 0xfff0f0f0, "usub8\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfac0f050, 0xfff0f0f0, "uqsub8\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfac0f060, 0xfff0f0f0, "uhsub8\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfad0f000, 0xfff0f0f0, "ssub16\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfad0f010, 0xfff0f0f0, "qsub16\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfad0f020, 0xfff0f0f0, "shsub16\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfad0f040, 0xfff0f0f0, "usub16\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfad0f050, 0xfff0f0f0, "uqsub16\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfad0f060, 0xfff0f0f0, "uhsub16\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfae0f000, 0xfff0f0f0, "ssubaddx\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfae0f010, 0xfff0f0f0, "qsubaddx\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfae0f020, 0xfff0f0f0, "shsubaddx\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfae0f040, 0xfff0f0f0, "usubaddx\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfae0f050, 0xfff0f0f0, "uqsubaddx\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfae0f060, 0xfff0f0f0, "uhsubaddx\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfb00f000, 0xfff0f0f0, "mul.w\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfb70f000, 0xfff0f0f0, "usad8\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa00f000, 0xffe0f0f0, "lsl%20's.w\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa20f000, 0xffe0f0f0, "lsr%20's.w\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa40f000, 0xffe0f0f0, "asr%20's.w\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa60f000, 0xffe0f0f0, "ror%20's.w\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xe8c00f40, 0xfff00fe0, "strex%4?hb\t%0-3r, %12-15r, [%16-19r]"},
- {ARM_EXT_V6T2, 0xf3200000, 0xfff0f0e0, "ssat16\t%8-11r, #%0-4d, %16-19r"},
- {ARM_EXT_V6T2, 0xf3a00000, 0xfff0f0e0, "usat16\t%8-11r, #%0-4d, %16-19r"},
- {ARM_EXT_V6T2, 0xfb20f000, 0xfff0f0e0, "smuad%4'x\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfb30f000, 0xfff0f0e0, "smulw%4?tb\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfb40f000, 0xfff0f0e0, "smusd%4'x\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfb50f000, 0xfff0f0e0, "smmul%4'r\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfa00f080, 0xfff0f0c0, "sxtah\t%8-11r, %16-19r, %0-3r%R"},
- {ARM_EXT_V6T2, 0xfa10f080, 0xfff0f0c0, "uxtah\t%8-11r, %16-19r, %0-3r%R"},
- {ARM_EXT_V6T2, 0xfa20f080, 0xfff0f0c0, "sxtab16\t%8-11r, %16-19r, %0-3r%R"},
- {ARM_EXT_V6T2, 0xfa30f080, 0xfff0f0c0, "uxtab16\t%8-11r, %16-19r, %0-3r%R"},
- {ARM_EXT_V6T2, 0xfa40f080, 0xfff0f0c0, "sxtab\t%8-11r, %16-19r, %0-3r%R"},
- {ARM_EXT_V6T2, 0xfa50f080, 0xfff0f0c0, "uxtab\t%8-11r, %16-19r, %0-3r%R"},
- {ARM_EXT_V6T2, 0xfb10f000, 0xfff0f0c0, "smul%5?tb%4?tb\t%8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xf36f0000, 0xffff8020, "bfc\t%8-11r, %E"},
- {ARM_EXT_V6T2, 0xea100f00, 0xfff08f00, "tst.w\t%16-19r, %S"},
- {ARM_EXT_V6T2, 0xea900f00, 0xfff08f00, "teq\t%16-19r, %S"},
- {ARM_EXT_V6T2, 0xeb100f00, 0xfff08f00, "cmn.w\t%16-19r, %S"},
- {ARM_EXT_V6T2, 0xebb00f00, 0xfff08f00, "cmp.w\t%16-19r, %S"},
- {ARM_EXT_V6T2, 0xf0100f00, 0xfbf08f00, "tst.w\t%16-19r, %M"},
- {ARM_EXT_V6T2, 0xf0900f00, 0xfbf08f00, "teq\t%16-19r, %M"},
- {ARM_EXT_V6T2, 0xf1100f00, 0xfbf08f00, "cmn.w\t%16-19r, %M"},
- {ARM_EXT_V6T2, 0xf1b00f00, 0xfbf08f00, "cmp.w\t%16-19r, %M"},
- {ARM_EXT_V6T2, 0xea4f0000, 0xffef8000, "mov%20's.w\t%8-11r, %S"},
- {ARM_EXT_V6T2, 0xea6f0000, 0xffef8000, "mvn%20's.w\t%8-11r, %S"},
- {ARM_EXT_V6T2, 0xe8c00070, 0xfff000f0, "strexd\t%0-3r, %12-15r, %8-11r, [%16-19r]"},
- {ARM_EXT_V6T2, 0xfb000000, 0xfff000f0, "mla\t%8-11r, %16-19r, %0-3r, %12-15r"},
- {ARM_EXT_V6T2, 0xfb000010, 0xfff000f0, "mls\t%8-11r, %16-19r, %0-3r, %12-15r"},
- {ARM_EXT_V6T2, 0xfb700000, 0xfff000f0, "usada8\t%8-11r, %16-19r, %0-3r, %12-15r"},
- {ARM_EXT_V6T2, 0xfb800000, 0xfff000f0, "smull\t%12-15r, %8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfba00000, 0xfff000f0, "umull\t%12-15r, %8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfbc00000, 0xfff000f0, "smlal\t%12-15r, %8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfbe00000, 0xfff000f0, "umlal\t%12-15r, %8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfbe00060, 0xfff000f0, "umaal\t%12-15r, %8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xe8500f00, 0xfff00f00, "ldrex\t%12-15r, [%16-19r, #%0-7W]"},
- {ARM_EXT_V6T2, 0xf7f08000, 0xfff0f000, "smc\t%K"},
- {ARM_EXT_V6T2, 0xf04f0000, 0xfbef8000, "mov%20's.w\t%8-11r, %M"},
- {ARM_EXT_V6T2, 0xf06f0000, 0xfbef8000, "mvn%20's.w\t%8-11r, %M"},
- {ARM_EXT_V6T2, 0xf810f000, 0xff70f000, "pld\t%a"},
- {ARM_EXT_V6T2, 0xfb200000, 0xfff000e0, "smlad%4'x\t%8-11r, %16-19r, %0-3r, %12-15r"},
- {ARM_EXT_V6T2, 0xfb300000, 0xfff000e0, "smlaw%4?tb\t%8-11r, %16-19r, %0-3r, %12-15r"},
- {ARM_EXT_V6T2, 0xfb400000, 0xfff000e0, "smlsd%4'x\t%8-11r, %16-19r, %0-3r, %12-15r"},
- {ARM_EXT_V6T2, 0xfb500000, 0xfff000e0, "smmla%4'r\t%8-11r, %16-19r, %0-3r, %12-15r"},
- {ARM_EXT_V6T2, 0xfb600000, 0xfff000e0, "smmls%4'r\t%8-11r, %16-19r, %0-3r, %12-15r"},
- {ARM_EXT_V6T2, 0xfbc000c0, 0xfff000e0, "smlald%4'x\t%12-15r, %8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xfbd000c0, 0xfff000e0, "smlsld%4'x\t%12-15r, %8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xeac00000, 0xfff08030, "pkhbt\t%8-11r, %16-19r, %S"},
- {ARM_EXT_V6T2, 0xeac00020, 0xfff08030, "pkhtb\t%8-11r, %16-19r, %S"},
- {ARM_EXT_V6T2, 0xf3400000, 0xfff08020, "sbfx\t%8-11r, %16-19r, %F"},
- {ARM_EXT_V6T2, 0xf3c00000, 0xfff08020, "ubfx\t%8-11r, %16-19r, %F"},
- {ARM_EXT_V6T2, 0xf8000e00, 0xff900f00, "str%wt\t%12-15r, %a"},
- {ARM_EXT_V6T2, 0xfb100000, 0xfff000c0, "smla%5?tb%4?tb\t%8-11r, %16-19r, %0-3r, %12-15r"},
- {ARM_EXT_V6T2, 0xfbc00080, 0xfff000c0, "smlal%5?tb%4?tb\t%12-15r, %8-11r, %16-19r, %0-3r"},
- {ARM_EXT_V6T2, 0xf3600000, 0xfff08020, "bfi\t%8-11r, %16-19r, %E"},
- {ARM_EXT_V6T2, 0xf8100e00, 0xfe900f00, "ldr%wt\t%12-15r, %a"},
- {ARM_EXT_V6T2, 0xf3000000, 0xffd08020, "ssat\t%8-11r, #%0-4d, %16-19r%s"},
- {ARM_EXT_V6T2, 0xf3800000, 0xffd08020, "usat\t%8-11r, #%0-4d, %16-19r%s"},
- {ARM_EXT_V6T2, 0xf2000000, 0xfbf08000, "addw\t%8-11r, %16-19r, %I"},
- {ARM_EXT_V6T2, 0xf2400000, 0xfbf08000, "movw\t%8-11r, %J"},
- {ARM_EXT_V6T2, 0xf2a00000, 0xfbf08000, "subw\t%8-11r, %16-19r, %I"},
- {ARM_EXT_V6T2, 0xf2c00000, 0xfbf08000, "movt\t%8-11r, %J"},
- {ARM_EXT_V6T2, 0xea000000, 0xffe08000, "and%20's.w\t%8-11r, %16-19r, %S"},
- {ARM_EXT_V6T2, 0xea200000, 0xffe08000, "bic%20's.w\t%8-11r, %16-19r, %S"},
- {ARM_EXT_V6T2, 0xea400000, 0xffe08000, "orr%20's.w\t%8-11r, %16-19r, %S"},
- {ARM_EXT_V6T2, 0xea600000, 0xffe08000, "orn%20's\t%8-11r, %16-19r, %S"},
- {ARM_EXT_V6T2, 0xea800000, 0xffe08000, "eor%20's.w\t%8-11r, %16-19r, %S"},
- {ARM_EXT_V6T2, 0xeb000000, 0xffe08000, "add%20's.w\t%8-11r, %16-19r, %S"},
- {ARM_EXT_V6T2, 0xeb400000, 0xffe08000, "adc%20's.w\t%8-11r, %16-19r, %S"},
- {ARM_EXT_V6T2, 0xeb600000, 0xffe08000, "sbc%20's.w\t%8-11r, %16-19r, %S"},
- {ARM_EXT_V6T2, 0xeba00000, 0xffe08000, "sub%20's.w\t%8-11r, %16-19r, %S"},
- {ARM_EXT_V6T2, 0xebc00000, 0xffe08000, "rsb%20's\t%8-11r, %16-19r, %S"},
- {ARM_EXT_V6T2, 0xe8400000, 0xfff00000, "strex\t%8-11r, %12-15r, [%16-19r, #%0-7W]"},
- {ARM_EXT_V6T2, 0xf0000000, 0xfbe08000, "and%20's.w\t%8-11r, %16-19r, %M"},
- {ARM_EXT_V6T2, 0xf0200000, 0xfbe08000, "bic%20's.w\t%8-11r, %16-19r, %M"},
- {ARM_EXT_V6T2, 0xf0400000, 0xfbe08000, "orr%20's.w\t%8-11r, %16-19r, %M"},
- {ARM_EXT_V6T2, 0xf0600000, 0xfbe08000, "orn%20's\t%8-11r, %16-19r, %M"},
- {ARM_EXT_V6T2, 0xf0800000, 0xfbe08000, "eor%20's.w\t%8-11r, %16-19r, %M"},
- {ARM_EXT_V6T2, 0xf1000000, 0xfbe08000, "add%20's.w\t%8-11r, %16-19r, %M"},
- {ARM_EXT_V6T2, 0xf1400000, 0xfbe08000, "adc%20's.w\t%8-11r, %16-19r, %M"},
- {ARM_EXT_V6T2, 0xf1600000, 0xfbe08000, "sbc%20's.w\t%8-11r, %16-19r, %M"},
- {ARM_EXT_V6T2, 0xf1a00000, 0xfbe08000, "sub%20's.w\t%8-11r, %16-19r, %M"},
- {ARM_EXT_V6T2, 0xf1c00000, 0xfbe08000, "rsb%20's\t%8-11r, %16-19r, %M"},
- {ARM_EXT_V6T2, 0xe8800000, 0xffd00000, "stmia.w\t%16-19r%21'!, %m"},
- {ARM_EXT_V6T2, 0xe8900000, 0xffd00000, "ldmia.w\t%16-19r%21'!, %m"},
- {ARM_EXT_V6T2, 0xe9000000, 0xffd00000, "stmdb\t%16-19r%21'!, %m"},
- {ARM_EXT_V6T2, 0xe9100000, 0xffd00000, "ldmdb\t%16-19r%21'!, %m"},
- {ARM_EXT_V6T2, 0xe9c00000, 0xffd000ff, "strd\t%12-15r, %8-11r, [%16-19r]"},
- {ARM_EXT_V6T2, 0xe9d00000, 0xffd000ff, "ldrd\t%12-15r, %8-11r, [%16-19r]"},
- {ARM_EXT_V6T2, 0xe9400000, 0xff500000, "strd\t%12-15r, %8-11r, [%16-19r, #%23`-%0-7W]"},
- {ARM_EXT_V6T2, 0xe9500000, 0xff500000, "ldrd\t%12-15r, %8-11r, [%16-19r, #%23`-%0-7W]"},
- {ARM_EXT_V6T2, 0xf8000000, 0xff100000, "str%w.w\t%12-15r, %a"},
- {ARM_EXT_V6T2, 0xf8100000, 0xfe100000, "ldr%w.w\t%12-15r, %a"},
+ {ARM_EXT_V6T2, 0xf3af8000, 0xffffffff, "nop%c.w"},
+ {ARM_EXT_V6T2, 0xf3af8001, 0xffffffff, "yield%c.w"},
+ {ARM_EXT_V6T2, 0xf3af8002, 0xffffffff, "wfe%c.w"},
+ {ARM_EXT_V6T2, 0xf3af8003, 0xffffffff, "wfi%c.w"},
+ {ARM_EXT_V6T2, 0xf3af9004, 0xffffffff, "sev%c.w"},
+ {ARM_EXT_V6T2, 0xf3af8000, 0xffffff00, "nop%c.w\t{%0-7d}"},
+
+ {ARM_EXT_V6T2, 0xf3bf8f2f, 0xffffffff, "clrex%c"},
+ {ARM_EXT_V6T2, 0xf3af8400, 0xffffff1f, "cpsie.w\t%7'a%6'i%5'f%X"},
+ {ARM_EXT_V6T2, 0xf3af8600, 0xffffff1f, "cpsid.w\t%7'a%6'i%5'f%X"},
+ {ARM_EXT_V6T2, 0xf3c08f00, 0xfff0ffff, "bxj%c\t%16-19r%x"},
+ {ARM_EXT_V6T2, 0xe810c000, 0xffd0ffff, "rfedb%c\t%16-19r%21'!"},
+ {ARM_EXT_V6T2, 0xe990c000, 0xffd0ffff, "rfeia%c\t%16-19r%21'!"},
+ {ARM_EXT_V6T2, 0xf3ef8000, 0xffeff000, "mrs%c\t%8-11r, %D"},
+ {ARM_EXT_V6T2, 0xf3af8100, 0xffffffe0, "cps\t#%0-4d%X"},
+ {ARM_EXT_V6T2, 0xe8d0f000, 0xfff0fff0, "tbb%c\t[%16-19r, %0-3r]%x"},
+ {ARM_EXT_V6T2, 0xe8d0f010, 0xfff0fff0, "tbh%c\t[%16-19r, %0-3r, lsl #1]%x"},
+ {ARM_EXT_V6T2, 0xf3af8500, 0xffffff00, "cpsie\t%7'a%6'i%5'f, #%0-4d%X"},
+ {ARM_EXT_V6T2, 0xf3af8700, 0xffffff00, "cpsid\t%7'a%6'i%5'f, #%0-4d%X"},
+ {ARM_EXT_V6T2, 0xf3de8f00, 0xffffff00, "subs%c\tpc, lr, #%0-7d"},
+ {ARM_EXT_V6T2, 0xf3808000, 0xffe0f000, "msr%c\t%C, %16-19r"},
+ {ARM_EXT_V6T2, 0xe8500f00, 0xfff00fff, "ldrex%c\t%12-15r, [%16-19r]"},
+ {ARM_EXT_V6T2, 0xe8d00f4f, 0xfff00fef, "ldrex%4?hb%c\t%12-15r, [%16-19r]"},
+ {ARM_EXT_V6T2, 0xe800c000, 0xffd0ffe0, "srsdb%c\t%16-19r%21'!, #%0-4d"},
+ {ARM_EXT_V6T2, 0xe980c000, 0xffd0ffe0, "srsia%c\t%16-19r%21'!, #%0-4d"},
+ {ARM_EXT_V6T2, 0xfa0ff080, 0xfffff0c0, "sxth%c.w\t%8-11r, %0-3r%R"},
+ {ARM_EXT_V6T2, 0xfa1ff080, 0xfffff0c0, "uxth%c.w\t%8-11r, %0-3r%R"},
+ {ARM_EXT_V6T2, 0xfa2ff080, 0xfffff0c0, "sxtb16%c\t%8-11r, %0-3r%R"},
+ {ARM_EXT_V6T2, 0xfa3ff080, 0xfffff0c0, "uxtb16%c\t%8-11r, %0-3r%R"},
+ {ARM_EXT_V6T2, 0xfa4ff080, 0xfffff0c0, "sxtb%c.w\t%8-11r, %0-3r%R"},
+ {ARM_EXT_V6T2, 0xfa5ff080, 0xfffff0c0, "uxtb%c.w\t%8-11r, %0-3r%R"},
+ {ARM_EXT_V6T2, 0xe8400000, 0xfff000ff, "strex%c\t%8-11r, %12-15r, [%16-19r]"},
+ {ARM_EXT_V6T2, 0xe8d0007f, 0xfff000ff, "ldrexd%c\t%12-15r, %8-11r, [%16-19r]"},
+ {ARM_EXT_V6T2, 0xfa80f000, 0xfff0f0f0, "sadd8%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa80f010, 0xfff0f0f0, "qadd8%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa80f020, 0xfff0f0f0, "shadd8%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa80f040, 0xfff0f0f0, "uadd8%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa80f050, 0xfff0f0f0, "uqadd8%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa80f060, 0xfff0f0f0, "uhadd8%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa80f080, 0xfff0f0f0, "qadd%c\t%8-11r, %0-3r, %16-19r"},
+ {ARM_EXT_V6T2, 0xfa80f090, 0xfff0f0f0, "qdadd%c\t%8-11r, %0-3r, %16-19r"},
+ {ARM_EXT_V6T2, 0xfa80f0a0, 0xfff0f0f0, "qsub%c\t%8-11r, %0-3r, %16-19r"},
+ {ARM_EXT_V6T2, 0xfa80f0b0, 0xfff0f0f0, "qdsub%c\t%8-11r, %0-3r, %16-19r"},
+ {ARM_EXT_V6T2, 0xfa90f000, 0xfff0f0f0, "sadd16%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa90f010, 0xfff0f0f0, "qadd16%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa90f020, 0xfff0f0f0, "shadd16%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa90f040, 0xfff0f0f0, "uadd16%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa90f050, 0xfff0f0f0, "uqadd16%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa90f060, 0xfff0f0f0, "uhadd16%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa90f080, 0xfff0f0f0, "rev%c.w\t%8-11r, %16-19r"},
+ {ARM_EXT_V6T2, 0xfa90f090, 0xfff0f0f0, "rev16%c.w\t%8-11r, %16-19r"},
+ {ARM_EXT_V6T2, 0xfa90f0a0, 0xfff0f0f0, "rbit%c\t%8-11r, %16-19r"},
+ {ARM_EXT_V6T2, 0xfa90f0b0, 0xfff0f0f0, "revsh%c.w\t%8-11r, %16-19r"},
+ {ARM_EXT_V6T2, 0xfaa0f000, 0xfff0f0f0, "saddsubx%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfaa0f010, 0xfff0f0f0, "qaddsubx%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfaa0f020, 0xfff0f0f0, "shaddsubx%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfaa0f040, 0xfff0f0f0, "uaddsubx%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfaa0f050, 0xfff0f0f0, "uqaddsubx%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfaa0f060, 0xfff0f0f0, "uhaddsubx%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfaa0f080, 0xfff0f0f0, "sel%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfab0f080, 0xfff0f0f0, "clz%c\t%8-11r, %16-19r"},
+ {ARM_EXT_V6T2, 0xfac0f000, 0xfff0f0f0, "ssub8%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfac0f010, 0xfff0f0f0, "qsub8%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfac0f020, 0xfff0f0f0, "shsub8%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfac0f040, 0xfff0f0f0, "usub8%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfac0f050, 0xfff0f0f0, "uqsub8%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfac0f060, 0xfff0f0f0, "uhsub8%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfad0f000, 0xfff0f0f0, "ssub16%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfad0f010, 0xfff0f0f0, "qsub16%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfad0f020, 0xfff0f0f0, "shsub16%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfad0f040, 0xfff0f0f0, "usub16%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfad0f050, 0xfff0f0f0, "uqsub16%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfad0f060, 0xfff0f0f0, "uhsub16%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfae0f000, 0xfff0f0f0, "ssubaddx%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfae0f010, 0xfff0f0f0, "qsubaddx%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfae0f020, 0xfff0f0f0, "shsubaddx%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfae0f040, 0xfff0f0f0, "usubaddx%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfae0f050, 0xfff0f0f0, "uqsubaddx%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfae0f060, 0xfff0f0f0, "uhsubaddx%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfb00f000, 0xfff0f0f0, "mul%c.w\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfb70f000, 0xfff0f0f0, "usad8%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa00f000, 0xffe0f0f0, "lsl%20's%c.w\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa20f000, 0xffe0f0f0, "lsr%20's%c.w\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa40f000, 0xffe0f0f0, "asr%20's%c.w\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa60f000, 0xffe0f0f0, "ror%20's%c.w\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xe8c00f40, 0xfff00fe0, "strex%4?hb%c\t%0-3r, %12-15r, [%16-19r]"},
+ {ARM_EXT_V6T2, 0xf3200000, 0xfff0f0e0, "ssat16%c\t%8-11r, #%0-4d, %16-19r"},
+ {ARM_EXT_V6T2, 0xf3a00000, 0xfff0f0e0, "usat16%c\t%8-11r, #%0-4d, %16-19r"},
+ {ARM_EXT_V6T2, 0xfb20f000, 0xfff0f0e0, "smuad%4'x%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfb30f000, 0xfff0f0e0, "smulw%4?tb%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfb40f000, 0xfff0f0e0, "smusd%4'x%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfb50f000, 0xfff0f0e0, "smmul%4'r%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfa00f080, 0xfff0f0c0, "sxtah%c\t%8-11r, %16-19r, %0-3r%R"},
+ {ARM_EXT_V6T2, 0xfa10f080, 0xfff0f0c0, "uxtah%c\t%8-11r, %16-19r, %0-3r%R"},
+ {ARM_EXT_V6T2, 0xfa20f080, 0xfff0f0c0, "sxtab16%c\t%8-11r, %16-19r, %0-3r%R"},
+ {ARM_EXT_V6T2, 0xfa30f080, 0xfff0f0c0, "uxtab16%c\t%8-11r, %16-19r, %0-3r%R"},
+ {ARM_EXT_V6T2, 0xfa40f080, 0xfff0f0c0, "sxtab%c\t%8-11r, %16-19r, %0-3r%R"},
+ {ARM_EXT_V6T2, 0xfa50f080, 0xfff0f0c0, "uxtab%c\t%8-11r, %16-19r, %0-3r%R"},
+ {ARM_EXT_V6T2, 0xfb10f000, 0xfff0f0c0, "smul%5?tb%4?tb%c\t%8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xf36f0000, 0xffff8020, "bfc%c\t%8-11r, %E"},
+ {ARM_EXT_V6T2, 0xea100f00, 0xfff08f00, "tst%c.w\t%16-19r, %S"},
+ {ARM_EXT_V6T2, 0xea900f00, 0xfff08f00, "teq%c\t%16-19r, %S"},
+ {ARM_EXT_V6T2, 0xeb100f00, 0xfff08f00, "cmn%c.w\t%16-19r, %S"},
+ {ARM_EXT_V6T2, 0xebb00f00, 0xfff08f00, "cmp%c.w\t%16-19r, %S"},
+ {ARM_EXT_V6T2, 0xf0100f00, 0xfbf08f00, "tst%c.w\t%16-19r, %M"},
+ {ARM_EXT_V6T2, 0xf0900f00, 0xfbf08f00, "teq%c\t%16-19r, %M"},
+ {ARM_EXT_V6T2, 0xf1100f00, 0xfbf08f00, "cmn%c.w\t%16-19r, %M"},
+ {ARM_EXT_V6T2, 0xf1b00f00, 0xfbf08f00, "cmp%c.w\t%16-19r, %M"},
+ {ARM_EXT_V6T2, 0xea4f0000, 0xffef8000, "mov%20's%c.w\t%8-11r, %S"},
+ {ARM_EXT_V6T2, 0xea6f0000, 0xffef8000, "mvn%20's%c.w\t%8-11r, %S"},
+ {ARM_EXT_V6T2, 0xe8c00070, 0xfff000f0, "strexd%c\t%0-3r, %12-15r, %8-11r, [%16-19r]"},
+ {ARM_EXT_V6T2, 0xfb000000, 0xfff000f0, "mla%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
+ {ARM_EXT_V6T2, 0xfb000010, 0xfff000f0, "mls%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
+ {ARM_EXT_V6T2, 0xfb700000, 0xfff000f0, "usada8%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
+ {ARM_EXT_V6T2, 0xfb800000, 0xfff000f0, "smull%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfba00000, 0xfff000f0, "umull%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfbc00000, 0xfff000f0, "smlal%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfbe00000, 0xfff000f0, "umlal%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfbe00060, 0xfff000f0, "umaal%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xe8500f00, 0xfff00f00, "ldrex%c\t%12-15r, [%16-19r, #%0-7W]"},
+ {ARM_EXT_V6T2, 0xf7f08000, 0xfff0f000, "smc%c\t%K"},
+ {ARM_EXT_V6T2, 0xf04f0000, 0xfbef8000, "mov%20's%c.w\t%8-11r, %M"},
+ {ARM_EXT_V6T2, 0xf06f0000, 0xfbef8000, "mvn%20's%c.w\t%8-11r, %M"},
+ {ARM_EXT_V6T2, 0xf810f000, 0xff70f000, "pld%c\t%a"},
+ {ARM_EXT_V6T2, 0xfb200000, 0xfff000e0, "smlad%4'x%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
+ {ARM_EXT_V6T2, 0xfb300000, 0xfff000e0, "smlaw%4?tb%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
+ {ARM_EXT_V6T2, 0xfb400000, 0xfff000e0, "smlsd%4'x%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
+ {ARM_EXT_V6T2, 0xfb500000, 0xfff000e0, "smmla%4'r%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
+ {ARM_EXT_V6T2, 0xfb600000, 0xfff000e0, "smmls%4'r%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
+ {ARM_EXT_V6T2, 0xfbc000c0, 0xfff000e0, "smlald%4'x%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xfbd000c0, 0xfff000e0, "smlsld%4'x%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xeac00000, 0xfff08030, "pkhbt%c\t%8-11r, %16-19r, %S"},
+ {ARM_EXT_V6T2, 0xeac00020, 0xfff08030, "pkhtb%c\t%8-11r, %16-19r, %S"},
+ {ARM_EXT_V6T2, 0xf3400000, 0xfff08020, "sbfx%c\t%8-11r, %16-19r, %F"},
+ {ARM_EXT_V6T2, 0xf3c00000, 0xfff08020, "ubfx%c\t%8-11r, %16-19r, %F"},
+ {ARM_EXT_V6T2, 0xf8000e00, 0xff900f00, "str%wt%c\t%12-15r, %a"},
+ {ARM_EXT_V6T2, 0xfb100000, 0xfff000c0, "smla%5?tb%4?tb%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
+ {ARM_EXT_V6T2, 0xfbc00080, 0xfff000c0, "smlal%5?tb%4?tb%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
+ {ARM_EXT_V6T2, 0xf3600000, 0xfff08020, "bfi%c\t%8-11r, %16-19r, %E"},
+ {ARM_EXT_V6T2, 0xf8100e00, 0xfe900f00, "ldr%wt%c\t%12-15r, %a"},
+ {ARM_EXT_V6T2, 0xf3000000, 0xffd08020, "ssat%c\t%8-11r, #%0-4d, %16-19r%s"},
+ {ARM_EXT_V6T2, 0xf3800000, 0xffd08020, "usat%c\t%8-11r, #%0-4d, %16-19r%s"},
+ {ARM_EXT_V6T2, 0xf2000000, 0xfbf08000, "addw%c\t%8-11r, %16-19r, %I"},
+ {ARM_EXT_V6T2, 0xf2400000, 0xfbf08000, "movw%c\t%8-11r, %J"},
+ {ARM_EXT_V6T2, 0xf2a00000, 0xfbf08000, "subw%c\t%8-11r, %16-19r, %I"},
+ {ARM_EXT_V6T2, 0xf2c00000, 0xfbf08000, "movt%c\t%8-11r, %J"},
+ {ARM_EXT_V6T2, 0xea000000, 0xffe08000, "and%20's%c.w\t%8-11r, %16-19r, %S"},
+ {ARM_EXT_V6T2, 0xea200000, 0xffe08000, "bic%20's%c.w\t%8-11r, %16-19r, %S"},
+ {ARM_EXT_V6T2, 0xea400000, 0xffe08000, "orr%20's%c.w\t%8-11r, %16-19r, %S"},
+ {ARM_EXT_V6T2, 0xea600000, 0xffe08000, "orn%20's%c\t%8-11r, %16-19r, %S"},
+ {ARM_EXT_V6T2, 0xea800000, 0xffe08000, "eor%20's%c.w\t%8-11r, %16-19r, %S"},
+ {ARM_EXT_V6T2, 0xeb000000, 0xffe08000, "add%20's%c.w\t%8-11r, %16-19r, %S"},
+ {ARM_EXT_V6T2, 0xeb400000, 0xffe08000, "adc%20's%c.w\t%8-11r, %16-19r, %S"},
+ {ARM_EXT_V6T2, 0xeb600000, 0xffe08000, "sbc%20's%c.w\t%8-11r, %16-19r, %S"},
+ {ARM_EXT_V6T2, 0xeba00000, 0xffe08000, "sub%20's%c.w\t%8-11r, %16-19r, %S"},
+ {ARM_EXT_V6T2, 0xebc00000, 0xffe08000, "rsb%20's%c\t%8-11r, %16-19r, %S"},
+ {ARM_EXT_V6T2, 0xe8400000, 0xfff00000, "strex%c\t%8-11r, %12-15r, [%16-19r, #%0-7W]"},
+ {ARM_EXT_V6T2, 0xf0000000, 0xfbe08000, "and%20's%c.w\t%8-11r, %16-19r, %M"},
+ {ARM_EXT_V6T2, 0xf0200000, 0xfbe08000, "bic%20's%c.w\t%8-11r, %16-19r, %M"},
+ {ARM_EXT_V6T2, 0xf0400000, 0xfbe08000, "orr%20's%c.w\t%8-11r, %16-19r, %M"},
+ {ARM_EXT_V6T2, 0xf0600000, 0xfbe08000, "orn%20's%c\t%8-11r, %16-19r, %M"},
+ {ARM_EXT_V6T2, 0xf0800000, 0xfbe08000, "eor%20's%c.w\t%8-11r, %16-19r, %M"},
+ {ARM_EXT_V6T2, 0xf1000000, 0xfbe08000, "add%20's%c.w\t%8-11r, %16-19r, %M"},
+ {ARM_EXT_V6T2, 0xf1400000, 0xfbe08000, "adc%20's%c.w\t%8-11r, %16-19r, %M"},
+ {ARM_EXT_V6T2, 0xf1600000, 0xfbe08000, "sbc%20's%c.w\t%8-11r, %16-19r, %M"},
+ {ARM_EXT_V6T2, 0xf1a00000, 0xfbe08000, "sub%20's%c.w\t%8-11r, %16-19r, %M"},
+ {ARM_EXT_V6T2, 0xf1c00000, 0xfbe08000, "rsb%20's%c\t%8-11r, %16-19r, %M"},
+ {ARM_EXT_V6T2, 0xe8800000, 0xffd00000, "stmia%c.w\t%16-19r%21'!, %m"},
+ {ARM_EXT_V6T2, 0xe8900000, 0xffd00000, "ldmia%c.w\t%16-19r%21'!, %m"},
+ {ARM_EXT_V6T2, 0xe9000000, 0xffd00000, "stmdb%c\t%16-19r%21'!, %m"},
+ {ARM_EXT_V6T2, 0xe9100000, 0xffd00000, "ldmdb%c\t%16-19r%21'!, %m"},
+ {ARM_EXT_V6T2, 0xe9c00000, 0xffd000ff, "strd%c\t%12-15r, %8-11r, [%16-19r]"},
+ {ARM_EXT_V6T2, 0xe9d00000, 0xffd000ff, "ldrd%c\t%12-15r, %8-11r, [%16-19r]"},
+ {ARM_EXT_V6T2, 0xe9400000, 0xff500000, "strd%c\t%12-15r, %8-11r, [%16-19r, #%23`-%0-7W]%21'!"},
+ {ARM_EXT_V6T2, 0xe9500000, 0xff500000, "ldrd%c\t%12-15r, %8-11r, [%16-19r, #%23`-%0-7W]%21'!"},
+ {ARM_EXT_V6T2, 0xe8600000, 0xff700000, "strd%c\t%12-15r, %8-11r, [%16-19r], #%23`-%0-7W"},
+ {ARM_EXT_V6T2, 0xe8700000, 0xff700000, "ldrd%c\t%12-15r, %8-11r, [%16-19r], #%23`-%0-7W"},
+ {ARM_EXT_V6T2, 0xf8000000, 0xff100000, "str%w%c.w\t%12-15r, %a"},
+ {ARM_EXT_V6T2, 0xf8100000, 0xfe100000, "ldr%w%c.w\t%12-15r, %a"},
/* Filter out Bcc with cond=E or F, which are used for other instructions. */
{ARM_EXT_V6T2, 0xf3c08000, 0xfbc0d000, "undefined (bcc, cond=0xF)"},
{ARM_EXT_V6T2, 0xf3808000, 0xfbc0d000, "undefined (bcc, cond=0xE)"},
- {ARM_EXT_V6T2, 0xf0008000, 0xf800d000, "b%22-25c.w\t%b"},
- {ARM_EXT_V6T2, 0xf0009000, 0xf800d000, "b.w\t%B"},
+ {ARM_EXT_V6T2, 0xf0008000, 0xf800d000, "b%22-25c.w\t%b%X"},
+ {ARM_EXT_V6T2, 0xf0009000, 0xf800d000, "b%c.w\t%B%x"},
/* These have been 32-bit since the invention of Thumb. */
- {ARM_EXT_V4T, 0xf000c000, 0xf800d000, "blx\t%B"},
- {ARM_EXT_V4T, 0xf000d000, 0xf800d000, "bl\t%B"},
+ {ARM_EXT_V4T, 0xf000c000, 0xf800d000, "blx%c\t%B%x"},
+ {ARM_EXT_V4T, 0xf000d000, 0xf800d000, "bl%c\t%B%x"},
/* Fallback. */
{ARM_EXT_V1, 0x00000000, 0x00000000, "undefined"},
@@ -1063,7 +1431,7 @@ static const struct opcode32 thumb32_opcodes[] =
static const char *const arm_conditional[] =
{"eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc",
- "hi", "ls", "ge", "lt", "gt", "le", "", "<und>"};
+ "hi", "ls", "ge", "lt", "gt", "le", "al", "<und>", ""};
static const char *const arm_fp_const[] =
{"0.0", "1.0", "2.0", "3.0", "4.0", "5.0", "0.5", "10.0"};
@@ -1099,10 +1467,10 @@ static const char *const iwmmxt_wwnames[] =
{"b", "h", "w", "d"};
static const char *const iwmmxt_wwssnames[] =
-{"b", "bus", "b", "bss",
- "h", "hus", "h", "hss",
- "w", "wus", "w", "wss",
- "d", "dus", "d", "dss"
+{"b", "bus", "bc", "bss",
+ "h", "hus", "hc", "hss",
+ "w", "wus", "wc", "wss",
+ "d", "dus", "dc", "dss"
};
static const char *const iwmmxt_regnames[] =
@@ -1123,6 +1491,26 @@ static unsigned int regname_selected = 1;
static bfd_boolean force_thumb = FALSE;
+/* Current IT instruction state. This contains the same state as the IT
+ bits in the CPSR. */
+static unsigned int ifthen_state;
+/* IT state for the next instruction. */
+static unsigned int ifthen_next_state;
+/* The address of the insn for which the IT state is valid. */
+static bfd_vma ifthen_address;
+#define IFTHEN_COND ((ifthen_state >> 4) & 0xf)
+
+/* Cached mapping symbol state. */
+enum map_type {
+ MAP_ARM,
+ MAP_THUMB,
+ MAP_DATA
+};
+
+enum map_type last_type;
+int last_mapping_sym = -1;
+bfd_vma last_mapping_addr = 0;
+
/* Functions. */
int
@@ -1149,8 +1537,46 @@ get_arm_regnames (int option, const char **setname, const char **setdescription,
return 16;
}
+/* Decode a bitfield of the form matching regexp (N(-N)?,)*N(-N)?.
+ Returns pointer to following character of the format string and
+ fills in *VALUEP and *WIDTHP with the extracted value and number of
+ bits extracted. WIDTHP can be NULL. */
+
+static const char *
+arm_decode_bitfield (const char *ptr, unsigned long insn,
+ unsigned long *valuep, int *widthp)
+{
+ unsigned long value = 0;
+ int width = 0;
+
+ do
+ {
+ int start, end;
+ int bits;
+
+ for (start = 0; *ptr >= '0' && *ptr <= '9'; ptr++)
+ start = start * 10 + *ptr - '0';
+ if (*ptr == '-')
+ for (end = 0, ptr++; *ptr >= '0' && *ptr <= '9'; ptr++)
+ end = end * 10 + *ptr - '0';
+ else
+ end = start;
+ bits = end - start;
+ if (bits < 0)
+ abort ();
+ value |= ((insn >> start) & ((2ul << bits) - 1)) << width;
+ width += bits + 1;
+ }
+ while (*ptr++ == ',');
+ *valuep = value;
+ if (widthp)
+ *widthp = width;
+ return ptr - 1;
+}
+
static void
-arm_decode_shift (long given, fprintf_ftype func, void *stream)
+arm_decode_shift (long given, fprintf_ftype func, void *stream,
+ int print_shift)
{
func (stream, "%s", arm_regnames[given & 0xf]);
@@ -1172,11 +1598,16 @@ arm_decode_shift (long given, fprintf_ftype func, void *stream)
amount = 32;
}
- func (stream, ", %s #%d", arm_shift[shift], amount);
+ if (print_shift)
+ func (stream, ", %s #%d", arm_shift[shift], amount);
+ else
+ func (stream, ", #%d", amount);
}
- else
+ else if (print_shift)
func (stream, ", %s %s", arm_shift[(given & 0x60) >> 5],
arm_regnames[(given & 0xf00) >> 8]);
+ else
+ func (stream, ", %s", arm_regnames[(given & 0xf00) >> 8]);
}
}
@@ -1185,7 +1616,7 @@ arm_decode_shift (long given, fprintf_ftype func, void *stream)
recognised coprocessor instruction. */
static bfd_boolean
-print_insn_coprocessor (struct disassemble_info *info, long given,
+print_insn_coprocessor (bfd_vma pc, struct disassemble_info *info, long given,
bfd_boolean thumb)
{
const struct opcode32 *insn;
@@ -1193,12 +1624,14 @@ print_insn_coprocessor (struct disassemble_info *info, long given,
fprintf_ftype func = info->fprintf_func;
unsigned long mask;
unsigned long value;
+ int cond;
for (insn = coprocessor_opcodes; insn->assembler; insn++)
{
if (insn->value == FIRST_IWMMXT_INSN
&& info->mach != bfd_mach_arm_XScale
- && info->mach != bfd_mach_arm_iWMMXt)
+ && info->mach != bfd_mach_arm_iWMMXt
+ && info->mach != bfd_mach_arm_iWMMXt2)
insn = insn + IWMMXT_INSN_COUNT;
mask = insn->mask;
@@ -1210,13 +1643,26 @@ print_insn_coprocessor (struct disassemble_info *info, long given,
encoding is the same. */
mask |= 0xf0000000;
value |= 0xe0000000;
+ if (ifthen_state)
+ cond = IFTHEN_COND;
+ else
+ cond = 16;
}
else
{
/* Only match unconditional instuctions against unconditional
patterns. */
if ((given & 0xf0000000) == 0xf0000000)
- mask |= 0xf0000000;
+ {
+ mask |= 0xf0000000;
+ cond = 16;
+ }
+ else
+ {
+ cond = (given >> 28) & 0xf;
+ if (cond == 0xe)
+ cond = 16;
+ }
}
if ((given & mask) == value)
{
@@ -1265,9 +1711,48 @@ print_insn_coprocessor (struct disassemble_info *info, long given,
}
break;
+ case 'B':
+ {
+ int regno = ((given >> 12) & 0xf) | ((given >> (22 - 4)) & 0x10);
+ int offset = (given >> 1) & 0x3f;
+
+ if (offset == 1)
+ func (stream, "{d%d}", regno);
+ else if (regno + offset > 32)
+ func (stream, "{d%d-<overflow reg d%d>}", regno, regno + offset - 1);
+ else
+ func (stream, "{d%d-d%d}", regno, regno + offset - 1);
+ }
+ break;
+
+ case 'C':
+ {
+ int rn = (given >> 16) & 0xf;
+ int offset = (given & 0xff) * 4;
+ int add = (given >> 23) & 1;
+
+ func (stream, "[%s", arm_regnames[rn]);
+
+ if (offset)
+ {
+ if (!add)
+ offset = -offset;
+ func (stream, ", #%d", offset);
+ }
+ func (stream, "]");
+ if (rn == 15)
+ {
+ func (stream, "\t; ");
+ /* FIXME: Unsure if info->bytes_per_chunk is the
+ right thing to use here. */
+ info->print_address_func (offset + pc
+ + info->bytes_per_chunk * 2, info);
+ }
+ }
+ break;
+
case 'c':
- func (stream, "%s",
- arm_conditional [(given >> 28) & 0xf]);
+ func (stream, "%s", arm_conditional[cond]);
break;
case 'I':
@@ -1360,206 +1845,163 @@ print_insn_coprocessor (struct disassemble_info *info, long given,
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
- int bitstart = *c++ - '0';
- int bitend = 0;
- while (*c >= '0' && *c <= '9')
- bitstart = (bitstart * 10) + *c++ - '0';
+ int width;
+ unsigned long value;
+
+ c = arm_decode_bitfield (c, given, &value, &width);
switch (*c)
{
- case '-':
- c++;
-
- while (*c >= '0' && *c <= '9')
- bitend = (bitend * 10) + *c++ - '0';
-
- if (!bitend)
- abort ();
+ case 'r':
+ func (stream, "%s", arm_regnames[value]);
+ break;
+ case 'D':
+ func (stream, "d%ld", value);
+ break;
+ case 'Q':
+ if (value & 1)
+ func (stream, "<illegal reg q%ld.5>", value >> 1);
+ else
+ func (stream, "q%ld", value >> 1);
+ break;
+ case 'd':
+ func (stream, "%ld", value);
+ break;
+ case 'k':
+ {
+ int from = (given & (1 << 7)) ? 32 : 16;
+ func (stream, "%ld", from - value);
+ }
+ break;
+
+ case 'f':
+ if (value > 7)
+ func (stream, "#%s", arm_fp_const[value & 7]);
+ else
+ func (stream, "f%ld", value);
+ break;
- switch (*c)
- {
- case 'r':
- {
- long reg;
+ case 'w':
+ if (width == 2)
+ func (stream, "%s", iwmmxt_wwnames[value]);
+ else
+ func (stream, "%s", iwmmxt_wwssnames[value]);
+ break;
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
+ case 'g':
+ func (stream, "%s", iwmmxt_regnames[value]);
+ break;
+ case 'G':
+ func (stream, "%s", iwmmxt_cregnames[value]);
+ break;
- func (stream, "%s", arm_regnames[reg]);
- }
- break;
- case 'd':
- {
- long reg;
+ case 'x':
+ func (stream, "0x%lx", value);
+ break;
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
+ case '`':
+ c++;
+ if (value == 0)
+ func (stream, "%c", *c);
+ break;
+ case '\'':
+ c++;
+ if (value == ((1ul << width) - 1))
+ func (stream, "%c", *c);
+ break;
+ case '?':
+ func (stream, "%c", c[(1 << width) - (int)value]);
+ c += 1 << width;
+ break;
+ default:
+ abort ();
+ }
+ break;
- func (stream, "%ld", reg);
- }
- break;
- case 'f':
+ case 'y':
+ case 'z':
+ {
+ int single = *c++ == 'y';
+ int regno;
+
+ switch (*c)
+ {
+ case '4': /* Sm pair */
+ func (stream, "{");
+ /* Fall through. */
+ case '0': /* Sm, Dm */
+ regno = given & 0x0000000f;
+ if (single)
{
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- if (reg > 7)
- func (stream, "#%s",
- arm_fp_const[reg & 7]);
- else
- func (stream, "f%ld", reg);
+ regno <<= 1;
+ regno += (given >> 5) & 1;
}
- break;
+ else
+ regno += ((given >> 5) & 1) << 4;
+ break;
- case 'w':
+ case '1': /* Sd, Dd */
+ regno = (given >> 12) & 0x0000000f;
+ if (single)
{
- long reg;
-
- if (bitstart != bitend)
- {
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
- if (bitend - bitstart == 1)
- func (stream, "%s", iwmmxt_wwnames[reg]);
- else
- func (stream, "%s", iwmmxt_wwssnames[reg]);
- }
- else
- {
- reg = (((given >> 8) & 0x1) |
- ((given >> 22) & 0x1));
- func (stream, "%s", iwmmxt_wwnames[reg]);
- }
+ regno <<= 1;
+ regno += (given >> 22) & 1;
}
- break;
+ else
+ regno += ((given >> 22) & 1) << 4;
+ break;
- case 'g':
+ case '2': /* Sn, Dn */
+ regno = (given >> 16) & 0x0000000f;
+ if (single)
{
- long reg;
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
- func (stream, "%s", iwmmxt_regnames[reg]);
+ regno <<= 1;
+ regno += (given >> 7) & 1;
}
- break;
-
- case 'G':
+ else
+ regno += ((given >> 7) & 1) << 4;
+ break;
+
+ case '3': /* List */
+ func (stream, "{");
+ regno = (given >> 12) & 0x0000000f;
+ if (single)
{
- long reg;
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
- func (stream, "%s", iwmmxt_cregnames[reg]);
+ regno <<= 1;
+ regno += (given >> 22) & 1;
}
- break;
+ else
+ regno += ((given >> 22) & 1) << 4;
+ break;
+
+ default:
+ abort ();
+ }
- default:
- abort ();
- }
- break;
+ func (stream, "%c%d", single ? 's' : 'd', regno);
- case 'y':
- case 'z':
+ if (*c == '3')
{
- int single = *c == 'y';
- int regno;
-
- switch (bitstart)
+ int count = given & 0xff;
+
+ if (single == 0)
+ count >>= 1;
+
+ if (--count)
{
- case 4: /* Sm pair */
- func (stream, "{");
- /* Fall through. */
- case 0: /* Sm, Dm */
- regno = given & 0x0000000f;
- if (single)
- {
- regno <<= 1;
- regno += (given >> 5) & 1;
- }
- break;
-
- case 1: /* Sd, Dd */
- regno = (given >> 12) & 0x0000000f;
- if (single)
- {
- regno <<= 1;
- regno += (given >> 22) & 1;
- }
- break;
-
- case 2: /* Sn, Dn */
- regno = (given >> 16) & 0x0000000f;
- if (single)
- {
- regno <<= 1;
- regno += (given >> 7) & 1;
- }
- break;
-
- case 3: /* List */
- func (stream, "{");
- regno = (given >> 12) & 0x0000000f;
- if (single)
- {
- regno <<= 1;
- regno += (given >> 22) & 1;
- }
- break;
-
-
- default:
- abort ();
+ func (stream, "-%c%d",
+ single ? 's' : 'd',
+ regno + count);
}
-
- func (stream, "%c%d", single ? 's' : 'd', regno);
-
- if (bitstart == 3)
- {
- int count = given & 0xff;
-
- if (single == 0)
- count >>= 1;
-
- if (--count)
- {
- func (stream, "-%c%d",
- single ? 's' : 'd',
- regno + count);
- }
-
- func (stream, "}");
- }
- else if (bitstart == 4)
- func (stream, ", %c%d}", single ? 's' : 'd',
- regno + 1);
-
- break;
+
+ func (stream, "}");
}
-
- break;
-
- case '`':
- c++;
- if ((given & (1 << bitstart)) == 0)
- func (stream, "%c", *c);
- break;
- case '\'':
- c++;
- if ((given & (1 << bitstart)) != 0)
- func (stream, "%c", *c);
- break;
- case '?':
- ++c;
- if ((given & (1 << bitstart)) != 0)
- func (stream, "%c", *c++);
- else
- func (stream, "%c", *++c);
- break;
- default:
- abort ();
- }
+ else if (*c == '4')
+ func (stream, ", %c%d}", single ? 's' : 'd',
+ regno + 1);
+ }
break;
-
+
case 'L':
switch (given & 0x00400100)
{
@@ -1608,6 +2050,53 @@ print_insn_coprocessor (struct disassemble_info *info, long given,
}
break;
+ case 'r':
+ {
+ int imm4 = (given >> 4) & 0xf;
+ int puw_bits = ((given >> 22) & 6) | ((given >> 21) & 1);
+ int ubit = (given >> 23) & 1;
+ const char *rm = arm_regnames [given & 0xf];
+ const char *rn = arm_regnames [(given >> 16) & 0xf];
+
+ switch (puw_bits)
+ {
+ case 1:
+ /* fall through */
+ case 3:
+ func (stream, "[%s], %c%s", rn, ubit ? '+' : '-', rm);
+ if (imm4)
+ func (stream, ", lsl #%d", imm4);
+ break;
+
+ case 4:
+ /* fall through */
+ case 5:
+ /* fall through */
+ case 6:
+ /* fall through */
+ case 7:
+ func (stream, "[%s, %c%s", rn, ubit ? '+' : '-', rm);
+ if (imm4 > 0)
+ func (stream, ", lsl #%d", imm4);
+ func (stream, "]");
+ if (puw_bits == 5 || puw_bits == 7)
+ func (stream, "!");
+ break;
+
+ default:
+ func (stream, "INVALID");
+ }
+ }
+ break;
+
+ case 'i':
+ {
+ long imm5;
+ imm5 = ((given & 0x100) >> 4) | (given & 0xf);
+ func (stream, "%ld", (imm5 == 0) ? 32 : imm5);
+ }
+ break;
+
default:
abort ();
}
@@ -1683,7 +2172,7 @@ print_arm_address (bfd_vma pc, struct disassemble_info *info, long given)
func (stream, ", %s",
(((given & 0x00800000) == 0)
? "-" : ""));
- arm_decode_shift (given, func, stream);
+ arm_decode_shift (given, func, stream, 1);
}
func (stream, "]%s",
@@ -1706,12 +2195,471 @@ print_arm_address (bfd_vma pc, struct disassemble_info *info, long given)
func (stream, "], %s",
(((given & 0x00800000) == 0)
? "-" : ""));
- arm_decode_shift (given, func, stream);
+ arm_decode_shift (given, func, stream, 1);
}
}
}
}
+/* Print one neon instruction on INFO->STREAM.
+ Return TRUE if the instuction matched, FALSE if this is not a
+ recognised neon instruction. */
+
+static bfd_boolean
+print_insn_neon (struct disassemble_info *info, long given, bfd_boolean thumb)
+{
+ const struct opcode32 *insn;
+ void *stream = info->stream;
+ fprintf_ftype func = info->fprintf_func;
+
+ if (thumb)
+ {
+ if ((given & 0xef000000) == 0xef000000)
+ {
+ /* move bit 28 to bit 24 to translate Thumb2 to ARM encoding. */
+ unsigned long bit28 = given & (1 << 28);
+
+ given &= 0x00ffffff;
+ if (bit28)
+ given |= 0xf3000000;
+ else
+ given |= 0xf2000000;
+ }
+ else if ((given & 0xff000000) == 0xf9000000)
+ given ^= 0xf9000000 ^ 0xf4000000;
+ else
+ return FALSE;
+ }
+
+ for (insn = neon_opcodes; insn->assembler; insn++)
+ {
+ if ((given & insn->mask) == insn->value)
+ {
+ const char *c;
+
+ for (c = insn->assembler; *c; c++)
+ {
+ if (*c == '%')
+ {
+ switch (*++c)
+ {
+ case '%':
+ func (stream, "%%");
+ break;
+
+ case 'c':
+ if (thumb && ifthen_state)
+ func (stream, "%s", arm_conditional[IFTHEN_COND]);
+ break;
+
+ case 'A':
+ {
+ static const unsigned char enc[16] =
+ {
+ 0x4, 0x14, /* st4 0,1 */
+ 0x4, /* st1 2 */
+ 0x4, /* st2 3 */
+ 0x3, /* st3 4 */
+ 0x13, /* st3 5 */
+ 0x3, /* st1 6 */
+ 0x1, /* st1 7 */
+ 0x2, /* st2 8 */
+ 0x12, /* st2 9 */
+ 0x2, /* st1 10 */
+ 0, 0, 0, 0, 0
+ };
+ int rd = ((given >> 12) & 0xf) | (((given >> 22) & 1) << 4);
+ int rn = ((given >> 16) & 0xf);
+ int rm = ((given >> 0) & 0xf);
+ int align = ((given >> 4) & 0x3);
+ int type = ((given >> 8) & 0xf);
+ int n = enc[type] & 0xf;
+ int stride = (enc[type] >> 4) + 1;
+ int ix;
+
+ func (stream, "{");
+ if (stride > 1)
+ for (ix = 0; ix != n; ix++)
+ func (stream, "%sd%d", ix ? "," : "", rd + ix * stride);
+ else if (n == 1)
+ func (stream, "d%d", rd);
+ else
+ func (stream, "d%d-d%d", rd, rd + n - 1);
+ func (stream, "}, [%s", arm_regnames[rn]);
+ if (align)
+ func (stream, ", :%d", 32 << align);
+ func (stream, "]");
+ if (rm == 0xd)
+ func (stream, "!");
+ else if (rm != 0xf)
+ func (stream, ", %s", arm_regnames[rm]);
+ }
+ break;
+
+ case 'B':
+ {
+ int rd = ((given >> 12) & 0xf) | (((given >> 22) & 1) << 4);
+ int rn = ((given >> 16) & 0xf);
+ int rm = ((given >> 0) & 0xf);
+ int idx_align = ((given >> 4) & 0xf);
+ int align = 0;
+ int size = ((given >> 10) & 0x3);
+ int idx = idx_align >> (size + 1);
+ int length = ((given >> 8) & 3) + 1;
+ int stride = 1;
+ int i;
+
+ if (length > 1 && size > 0)
+ stride = (idx_align & (1 << size)) ? 2 : 1;
+
+ switch (length)
+ {
+ case 1:
+ {
+ int amask = (1 << size) - 1;
+ if ((idx_align & (1 << size)) != 0)
+ return FALSE;
+ if (size > 0)
+ {
+ if ((idx_align & amask) == amask)
+ align = 8 << size;
+ else if ((idx_align & amask) != 0)
+ return FALSE;
+ }
+ }
+ break;
+
+ case 2:
+ if (size == 2 && (idx_align & 2) != 0)
+ return FALSE;
+ align = (idx_align & 1) ? 16 << size : 0;
+ break;
+
+ case 3:
+ if ((size == 2 && (idx_align & 3) != 0)
+ || (idx_align & 1) != 0)
+ return FALSE;
+ break;
+
+ case 4:
+ if (size == 2)
+ {
+ if ((idx_align & 3) == 3)
+ return FALSE;
+ align = (idx_align & 3) * 64;
+ }
+ else
+ align = (idx_align & 1) ? 32 << size : 0;
+ break;
+
+ default:
+ abort ();
+ }
+
+ func (stream, "{");
+ for (i = 0; i < length; i++)
+ func (stream, "%sd%d[%d]", (i == 0) ? "" : ",",
+ rd + i * stride, idx);
+ func (stream, "}, [%s", arm_regnames[rn]);
+ if (align)
+ func (stream, ", :%d", align);
+ func (stream, "]");
+ if (rm == 0xd)
+ func (stream, "!");
+ else if (rm != 0xf)
+ func (stream, ", %s", arm_regnames[rm]);
+ }
+ break;
+
+ case 'C':
+ {
+ int rd = ((given >> 12) & 0xf) | (((given >> 22) & 1) << 4);
+ int rn = ((given >> 16) & 0xf);
+ int rm = ((given >> 0) & 0xf);
+ int align = ((given >> 4) & 0x1);
+ int size = ((given >> 6) & 0x3);
+ int type = ((given >> 8) & 0x3);
+ int n = type + 1;
+ int stride = ((given >> 5) & 0x1);
+ int ix;
+
+ if (stride && (n == 1))
+ n++;
+ else
+ stride++;
+
+ func (stream, "{");
+ if (stride > 1)
+ for (ix = 0; ix != n; ix++)
+ func (stream, "%sd%d[]", ix ? "," : "", rd + ix * stride);
+ else if (n == 1)
+ func (stream, "d%d[]", rd);
+ else
+ func (stream, "d%d[]-d%d[]", rd, rd + n - 1);
+ func (stream, "}, [%s", arm_regnames[rn]);
+ if (align)
+ {
+ int align = (8 * (type + 1)) << size;
+ if (type == 3)
+ align = (size > 1) ? align >> 1 : align;
+ if (type == 2 || (type == 0 && !size))
+ func (stream, ", :<bad align %d>", align);
+ else
+ func (stream, ", :%d", align);
+ }
+ func (stream, "]");
+ if (rm == 0xd)
+ func (stream, "!");
+ else if (rm != 0xf)
+ func (stream, ", %s", arm_regnames[rm]);
+ }
+ break;
+
+ case 'D':
+ {
+ int raw_reg = (given & 0xf) | ((given >> 1) & 0x10);
+ int size = (given >> 20) & 3;
+ int reg = raw_reg & ((4 << size) - 1);
+ int ix = raw_reg >> size >> 2;
+
+ func (stream, "d%d[%d]", reg, ix);
+ }
+ break;
+
+ case 'E':
+ /* Neon encoded constant for mov, mvn, vorr, vbic */
+ {
+ int bits = 0;
+ int cmode = (given >> 8) & 0xf;
+ int op = (given >> 5) & 0x1;
+ unsigned long value = 0, hival = 0;
+ unsigned shift;
+ int size = 0;
+ int isfloat = 0;
+
+ bits |= ((given >> 24) & 1) << 7;
+ bits |= ((given >> 16) & 7) << 4;
+ bits |= ((given >> 0) & 15) << 0;
+
+ if (cmode < 8)
+ {
+ shift = (cmode >> 1) & 3;
+ value = (unsigned long)bits << (8 * shift);
+ size = 32;
+ }
+ else if (cmode < 12)
+ {
+ shift = (cmode >> 1) & 1;
+ value = (unsigned long)bits << (8 * shift);
+ size = 16;
+ }
+ else if (cmode < 14)
+ {
+ shift = (cmode & 1) + 1;
+ value = (unsigned long)bits << (8 * shift);
+ value |= (1ul << (8 * shift)) - 1;
+ size = 32;
+ }
+ else if (cmode == 14)
+ {
+ if (op)
+ {
+ /* bit replication into bytes */
+ int ix;
+ unsigned long mask;
+
+ value = 0;
+ hival = 0;
+ for (ix = 7; ix >= 0; ix--)
+ {
+ mask = ((bits >> ix) & 1) ? 0xff : 0;
+ if (ix <= 3)
+ value = (value << 8) | mask;
+ else
+ hival = (hival << 8) | mask;
+ }
+ size = 64;
+ }
+ else
+ {
+ /* byte replication */
+ value = (unsigned long)bits;
+ size = 8;
+ }
+ }
+ else if (!op)
+ {
+ /* floating point encoding */
+ int tmp;
+
+ value = (unsigned long)(bits & 0x7f) << 19;
+ value |= (unsigned long)(bits & 0x80) << 24;
+ tmp = bits & 0x40 ? 0x3c : 0x40;
+ value |= (unsigned long)tmp << 24;
+ size = 32;
+ isfloat = 1;
+ }
+ else
+ {
+ func (stream, "<illegal constant %.8x:%x:%x>",
+ bits, cmode, op);
+ size = 32;
+ break;
+ }
+ switch (size)
+ {
+ case 8:
+ func (stream, "#%ld\t; 0x%.2lx", value, value);
+ break;
+
+ case 16:
+ func (stream, "#%ld\t; 0x%.4lx", value, value);
+ break;
+
+ case 32:
+ if (isfloat)
+ {
+ unsigned char valbytes[4];
+ double fvalue;
+
+ /* Do this a byte at a time so we don't have to
+ worry about the host's endianness. */
+ valbytes[0] = value & 0xff;
+ valbytes[1] = (value >> 8) & 0xff;
+ valbytes[2] = (value >> 16) & 0xff;
+ valbytes[3] = (value >> 24) & 0xff;
+
+ floatformat_to_double
+ (&floatformat_ieee_single_little, valbytes,
+ &fvalue);
+
+ func (stream, "#%.7g\t; 0x%.8lx", fvalue,
+ value);
+ }
+ else
+ func (stream, "#%ld\t; 0x%.8lx",
+ (long) ((value & 0x80000000)
+ ? value | ~0xffffffffl : value), value);
+ break;
+
+ case 64:
+ func (stream, "#0x%.8lx%.8lx", hival, value);
+ break;
+
+ default:
+ abort ();
+ }
+ }
+ break;
+
+ case 'F':
+ {
+ int regno = ((given >> 16) & 0xf) | ((given >> (7 - 4)) & 0x10);
+ int num = (given >> 8) & 0x3;
+
+ if (!num)
+ func (stream, "{d%d}", regno);
+ else if (num + regno >= 32)
+ func (stream, "{d%d-<overflow reg d%d}", regno, regno + num);
+ else
+ func (stream, "{d%d-d%d}", regno, regno + num);
+ }
+ break;
+
+
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ {
+ int width;
+ unsigned long value;
+
+ c = arm_decode_bitfield (c, given, &value, &width);
+
+ switch (*c)
+ {
+ case 'r':
+ func (stream, "%s", arm_regnames[value]);
+ break;
+ case 'd':
+ func (stream, "%ld", value);
+ break;
+ case 'e':
+ func (stream, "%ld", (1ul << width) - value);
+ break;
+
+ case 'S':
+ case 'T':
+ case 'U':
+ /* various width encodings */
+ {
+ int base = 8 << (*c - 'S'); /* 8,16 or 32 */
+ int limit;
+ unsigned low, high;
+
+ c++;
+ if (*c >= '0' && *c <= '9')
+ limit = *c - '0';
+ else if (*c >= 'a' && *c <= 'f')
+ limit = *c - 'a' + 10;
+ else
+ abort ();
+ low = limit >> 2;
+ high = limit & 3;
+
+ if (value < low || value > high)
+ func (stream, "<illegal width %d>", base << value);
+ else
+ func (stream, "%d", base << value);
+ }
+ break;
+ case 'R':
+ if (given & (1 << 6))
+ goto Q;
+ /* FALLTHROUGH */
+ case 'D':
+ func (stream, "d%ld", value);
+ break;
+ case 'Q':
+ Q:
+ if (value & 1)
+ func (stream, "<illegal reg q%ld.5>", value >> 1);
+ else
+ func (stream, "q%ld", value >> 1);
+ break;
+
+ case '`':
+ c++;
+ if (value == 0)
+ func (stream, "%c", *c);
+ break;
+ case '\'':
+ c++;
+ if (value == ((1ul << width) - 1))
+ func (stream, "%c", *c);
+ break;
+ case '?':
+ func (stream, "%c", c[(1 << width) - (int)value]);
+ c += 1 << width;
+ break;
+ default:
+ abort ();
+ }
+ break;
+
+ default:
+ abort ();
+ }
+ }
+ }
+ else
+ func (stream, "%c", *c);
+ }
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
/* Print one ARM instruction from PC on INFO->STREAM. */
static void
@@ -1721,7 +2669,10 @@ print_insn_arm (bfd_vma pc, struct disassemble_info *info, long given)
void *stream = info->stream;
fprintf_ftype func = info->fprintf_func;
- if (print_insn_coprocessor (info, given, FALSE))
+ if (print_insn_coprocessor (pc, info, given, FALSE))
+ return;
+
+ if (print_insn_neon (info, given, FALSE))
return;
for (insn = arm_opcodes; insn->assembler; insn++)
@@ -1835,8 +2786,9 @@ print_insn_arm (bfd_vma pc, struct disassemble_info *info, long given)
break;
case 'c':
- func (stream, "%s",
- arm_conditional [(given >> 28) & 0xf]);
+ if (((given >> 28) & 0xf) != 0xe)
+ func (stream, "%s",
+ arm_conditional [(given >> 28) & 0xf]);
break;
case 'm':
@@ -1857,6 +2809,10 @@ print_insn_arm (bfd_vma pc, struct disassemble_info *info, long given)
}
break;
+ case 'q':
+ arm_decode_shift (given, func, stream, 0);
+ break;
+
case 'o':
if ((given & 0x02000000) != 0)
{
@@ -1867,7 +2823,7 @@ print_insn_arm (bfd_vma pc, struct disassemble_info *info, long given)
func (stream, "#%d\t; 0x%x", immed, immed);
}
else
- arm_decode_shift (given, func, stream);
+ arm_decode_shift (given, func, stream, 1);
break;
case 'p':
@@ -1964,102 +2920,51 @@ print_insn_arm (bfd_vma pc, struct disassemble_info *info, long given)
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
- int bitstart = *c++ - '0';
- int bitend = 0;
- while (*c >= '0' && *c <= '9')
- bitstart = (bitstart * 10) + *c++ - '0';
+ int width;
+ unsigned long value;
+ c = arm_decode_bitfield (c, given, &value, &width);
+
switch (*c)
{
- case '-':
- c++;
-
- while (*c >= '0' && *c <= '9')
- bitend = (bitend * 10) + *c++ - '0';
-
- if (!bitend)
- abort ();
-
- switch (*c)
- {
- case 'r':
- {
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- func (stream, "%s", arm_regnames[reg]);
- }
- break;
- case 'd':
- {
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- func (stream, "%ld", reg);
- }
- break;
- case 'W':
- {
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- func (stream, "%ld", reg + 1);
- }
- break;
- case 'x':
- {
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- func (stream, "0x%08lx", reg);
-
- /* Some SWI instructions have special
- meanings. */
- if ((given & 0x0fffffff) == 0x0FF00000)
- func (stream, "\t; IMB");
- else if ((given & 0x0fffffff) == 0x0FF00001)
- func (stream, "\t; IMBRange");
- }
- break;
- case 'X':
- {
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- func (stream, "%01lx", reg & 0xf);
- }
- break;
- default:
- abort ();
- }
+ case 'r':
+ func (stream, "%s", arm_regnames[value]);
+ break;
+ case 'd':
+ func (stream, "%ld", value);
+ break;
+ case 'b':
+ func (stream, "%ld", value * 8);
+ break;
+ case 'W':
+ func (stream, "%ld", value + 1);
+ break;
+ case 'x':
+ func (stream, "0x%08lx", value);
+
+ /* Some SWI instructions have special
+ meanings. */
+ if ((given & 0x0fffffff) == 0x0FF00000)
+ func (stream, "\t; IMB");
+ else if ((given & 0x0fffffff) == 0x0FF00001)
+ func (stream, "\t; IMBRange");
+ break;
+ case 'X':
+ func (stream, "%01lx", value & 0xf);
break;
-
case '`':
c++;
- if ((given & (1 << bitstart)) == 0)
+ if (value == 0)
func (stream, "%c", *c);
break;
case '\'':
c++;
- if ((given & (1 << bitstart)) != 0)
+ if (value == ((1ul << width) - 1))
func (stream, "%c", *c);
break;
case '?':
- ++c;
- if ((given & (1 << bitstart)) != 0)
- func (stream, "%c", *c++);
- else
- func (stream, "%c", *++c);
+ func (stream, "%c", c[(1 << width) - (int)value]);
+ c += 1 << width;
break;
default:
abort ();
@@ -2145,6 +3050,40 @@ print_insn_thumb16 (bfd_vma pc, struct disassemble_info *info, long given)
func (stream, "%%");
break;
+ case 'c':
+ if (ifthen_state)
+ func (stream, "%s", arm_conditional[IFTHEN_COND]);
+ break;
+
+ case 'C':
+ if (ifthen_state)
+ func (stream, "%s", arm_conditional[IFTHEN_COND]);
+ else
+ func (stream, "s");
+ break;
+
+ case 'I':
+ {
+ unsigned int tmp;
+
+ ifthen_next_state = given & 0xff;
+ for (tmp = given << 1; tmp & 0xf; tmp <<= 1)
+ func (stream, ((given ^ tmp) & 0x10) ? "e" : "t");
+ func (stream, "\t%s", arm_conditional[(given >> 4) & 0xf]);
+ }
+ break;
+
+ case 'x':
+ if (ifthen_next_state)
+ func (stream, "\t; unpredictable branch in IT block\n");
+ break;
+
+ case 'X':
+ if (ifthen_state)
+ func (stream, "\t; unpredictable <IT:%s>",
+ arm_conditional[IFTHEN_COND]);
+ break;
+
case 'S':
{
long reg;
@@ -2293,14 +3232,7 @@ print_insn_thumb16 (bfd_vma pc, struct disassemble_info *info, long given)
break;
case 'c':
- {
- /* Must print 0xE as 'al' to distinguish
- unconditional B from conditional BAL. */
- if (reg == 0xE)
- func (stream, "al");
- else
- func (stream, "%s", arm_conditional [reg]);
- }
+ func (stream, "%s", arm_conditional [reg]);
break;
default:
@@ -2373,7 +3305,10 @@ print_insn_thumb32 (bfd_vma pc, struct disassemble_info *info, long given)
void *stream = info->stream;
fprintf_ftype func = info->fprintf_func;
- if (print_insn_coprocessor (info, given, TRUE))
+ if (print_insn_coprocessor (pc, info, given, TRUE))
+ return;
+
+ if (print_insn_neon (info, given, TRUE))
return;
for (insn = thumb32_opcodes; insn->assembler; insn++)
@@ -2394,6 +3329,22 @@ print_insn_thumb32 (bfd_vma pc, struct disassemble_info *info, long given)
func (stream, "%%");
break;
+ case 'c':
+ if (ifthen_state)
+ func (stream, "%s", arm_conditional[IFTHEN_COND]);
+ break;
+
+ case 'x':
+ if (ifthen_next_state)
+ func (stream, "\t; unpredictable branch in IT block\n");
+ break;
+
+ case 'X':
+ if (ifthen_state)
+ func (stream, "\t; unpredictable <IT:%s>",
+ arm_conditional[IFTHEN_COND]);
+ break;
+
case 'I':
{
unsigned int imm12 = 0;
@@ -2752,54 +3703,36 @@ print_insn_thumb32 (bfd_vma pc, struct disassemble_info *info, long given)
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
- int bitstart = *c++ - '0';
- int bitend = 0;
- unsigned int val;
- while (*c >= '0' && *c <= '9')
- bitstart = (bitstart * 10) + *c++ - '0';
-
- if (*c == '-')
- {
- c++;
- while (*c >= '0' && *c <= '9')
- bitend = (bitend * 10) + *c++ - '0';
- if (!bitend)
- abort ();
-
- val = given >> bitstart;
- val &= (2 << (bitend - bitstart)) - 1;
- }
- else
- val = (given >> bitstart) & 1;
+ int width;
+ unsigned long val;
+ c = arm_decode_bitfield (c, given, &val, &width);
+
switch (*c)
{
- case 'd': func (stream, "%u", val); break;
- case 'W': func (stream, "%u", val * 4); break;
+ case 'd': func (stream, "%lu", val); break;
+ case 'W': func (stream, "%lu", val * 4); break;
case 'r': func (stream, "%s", arm_regnames[val]); break;
case 'c':
- if (val == 0xE)
- func (stream, "al");
- else
- func (stream, "%s", arm_conditional[val]);
+ func (stream, "%s", arm_conditional[val]);
break;
case '\'':
- if (val)
- func (stream, "%c", c[1]);
c++;
+ if (val == ((1ul << width) - 1))
+ func (stream, "%c", *c);
break;
case '`':
- if (!val)
- func (stream, "%c", c[1]);
c++;
+ if (val == 0)
+ func (stream, "%c", *c);
break;
case '?':
- func (stream, "%c", val ? c[1] : c[2]);
- c += 2;
+ func (stream, "%c", c[(1 << width) - (int)val]);
+ c += 1 << width;
break;
default:
@@ -2819,6 +3752,28 @@ print_insn_thumb32 (bfd_vma pc, struct disassemble_info *info, long given)
abort ();
}
+/* Print data bytes on INFO->STREAM. */
+
+static void
+print_insn_data (bfd_vma pc ATTRIBUTE_UNUSED, struct disassemble_info *info,
+ long given)
+{
+ switch (info->bytes_per_chunk)
+ {
+ case 1:
+ info->fprintf_func (info->stream, ".byte\t0x%02lx", given);
+ break;
+ case 2:
+ info->fprintf_func (info->stream, ".short\t0x%04lx", given);
+ break;
+ case 4:
+ info->fprintf_func (info->stream, ".word\t0x%08lx", given);
+ break;
+ default:
+ abort ();
+ }
+}
+
/* Disallow mapping symbols ($a, $b, $d, $t etc) from
being displayed in symbol relative addresses. */
@@ -2844,7 +3799,7 @@ parse_arm_disassembler_option (char *option)
if (option == NULL)
return;
- if (strneq (option, "reg-names-", 10))
+ if (CONST_STRNEQ (option, "reg-names-"))
{
int i;
@@ -2861,9 +3816,9 @@ parse_arm_disassembler_option (char *option)
/* XXX - should break 'option' at following delimiter. */
fprintf (stderr, _("Unrecognised register name set: %s\n"), option);
}
- else if (strneq (option, "force-thumb", 11))
+ else if (CONST_STRNEQ (option, "force-thumb"))
force_thumb = 1;
- else if (strneq (option, "no-force-thumb", 14))
+ else if (CONST_STRNEQ (option, "no-force-thumb"))
force_thumb = 0;
else
/* XXX - should break 'option' at following delimiter. */
@@ -2894,6 +3849,119 @@ parse_disassembler_options (char *options)
}
}
+/* Search back through the insn stream to determine if this instruction is
+ conditionally executed. */
+static void
+find_ifthen_state (bfd_vma pc, struct disassemble_info *info,
+ bfd_boolean little)
+{
+ unsigned char b[2];
+ unsigned int insn;
+ int status;
+ /* COUNT is twice the number of instructions seen. It will be odd if we
+ just crossed an instruction boundary. */
+ int count;
+ int it_count;
+ unsigned int seen_it;
+ bfd_vma addr;
+
+ ifthen_address = pc;
+ ifthen_state = 0;
+
+ addr = pc;
+ count = 1;
+ it_count = 0;
+ seen_it = 0;
+ /* Scan backwards looking for IT instructions, keeping track of where
+ instruction boundaries are. We don't know if something is actually an
+ IT instruction until we find a definite instruction boundary. */
+ for (;;)
+ {
+ if (addr == 0 || info->symbol_at_address_func(addr, info))
+ {
+ /* A symbol must be on an instruction boundary, and will not
+ be within an IT block. */
+ if (seen_it && (count & 1))
+ break;
+
+ return;
+ }
+ addr -= 2;
+ status = info->read_memory_func (addr, (bfd_byte *)b, 2, info);
+ if (status)
+ return;
+
+ if (little)
+ insn = (b[0]) | (b[1] << 8);
+ else
+ insn = (b[1]) | (b[0] << 8);
+ if (seen_it)
+ {
+ if ((insn & 0xf800) < 0xe800)
+ {
+ /* Addr + 2 is an instruction boundary. See if this matches
+ the expected boundary based on the position of the last
+ IT candidate. */
+ if (count & 1)
+ break;
+ seen_it = 0;
+ }
+ }
+ if ((insn & 0xff00) == 0xbf00 && (insn & 0xf) != 0)
+ {
+ /* This could be an IT instruction. */
+ seen_it = insn;
+ it_count = count >> 1;
+ }
+ if ((insn & 0xf800) >= 0xe800)
+ count++;
+ else
+ count = (count + 2) | 1;
+ /* IT blocks contain at most 4 instructions. */
+ if (count >= 8 && !seen_it)
+ return;
+ }
+ /* We found an IT instruction. */
+ ifthen_state = (seen_it & 0xe0) | ((seen_it << it_count) & 0x1f);
+ if ((ifthen_state & 0xf) == 0)
+ ifthen_state = 0;
+}
+
+/* Try to infer the code type (Arm or Thumb) from a symbol.
+ Returns nonzero if *MAP_TYPE was set. */
+
+static int
+get_sym_code_type (struct disassemble_info *info, int n,
+ enum map_type *map_type)
+{
+ elf_symbol_type *es;
+ unsigned int type;
+ const char *name;
+
+ es = *(elf_symbol_type **)(info->symtab + n);
+ type = ELF_ST_TYPE (es->internal_elf_sym.st_info);
+
+ /* If the symbol has function type then use that. */
+ if (type == STT_FUNC || type == STT_ARM_TFUNC)
+ {
+ *map_type = (type == STT_ARM_TFUNC) ? MAP_THUMB : MAP_ARM;
+ return TRUE;
+ }
+
+ /* Check for mapping symbols. */
+ name = bfd_asymbol_name(info->symtab[n]);
+ if (name[0] == '$' && (name[1] == 'a' || name[1] == 't' || name[1] == 'd')
+ && (name[2] == 0 || name[2] == '.'))
+ {
+ *map_type = ((name[1] == 'a') ? MAP_ARM
+ : (name[1] == 't') ? MAP_THUMB
+ : MAP_DATA);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
/* NOTE: There are no checks in these routines that
the relevant number of data bytes exist. */
@@ -2903,9 +3971,11 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
unsigned char b[4];
long given;
int status;
- int is_thumb;
- int size;
+ int is_thumb = FALSE;
+ int is_data = FALSE;
+ unsigned int size = 4;
void (*printer) (bfd_vma, struct disassemble_info *, long);
+ bfd_boolean found = FALSE;
if (info->disassembler_options)
{
@@ -2915,9 +3985,91 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
info->disassembler_options = NULL;
}
- is_thumb = force_thumb;
+ /* First check the full symtab for a mapping symbol, even if there
+ are no usable non-mapping symbols for this address. */
+ if (info->symtab != NULL
+ && bfd_asymbol_flavour (*info->symtab) == bfd_target_elf_flavour)
+ {
+ bfd_vma addr;
+ int n;
+ int last_sym = -1;
+ enum map_type type = MAP_ARM;
+
+ if (pc <= last_mapping_addr)
+ last_mapping_sym = -1;
+ is_thumb = (last_type == MAP_THUMB);
+ found = FALSE;
+ /* Start scanning at the start of the function, or wherever
+ we finished last time. */
+ n = info->symtab_pos + 1;
+ if (n < last_mapping_sym)
+ n = last_mapping_sym;
+
+ /* Scan up to the location being disassembled. */
+ for (; n < info->symtab_size; n++)
+ {
+ addr = bfd_asymbol_value (info->symtab[n]);
+ if (addr > pc)
+ break;
+ if ((info->section == NULL
+ || info->section == info->symtab[n]->section)
+ && get_sym_code_type (info, n, &type))
+ {
+ last_sym = n;
+ found = TRUE;
+ }
+ }
+
+ if (!found)
+ {
+ n = info->symtab_pos;
+ if (n < last_mapping_sym - 1)
+ n = last_mapping_sym - 1;
+
+ /* No mapping symbol found at this address. Look backwards
+ for a preceeding one. */
+ for (; n >= 0; n--)
+ {
+ if (get_sym_code_type (info, n, &type))
+ {
+ last_sym = n;
+ found = TRUE;
+ break;
+ }
+ }
+ }
+
+ last_mapping_sym = last_sym;
+ last_type = type;
+ is_thumb = (last_type == MAP_THUMB);
+ is_data = (last_type == MAP_DATA);
- if (!is_thumb && info->symbols != NULL)
+ /* Look a little bit ahead to see if we should print out
+ two or four bytes of data. If there's a symbol,
+ mapping or otherwise, after two bytes then don't
+ print more. */
+ if (is_data)
+ {
+ size = 4 - (pc & 3);
+ for (n = last_sym + 1; n < info->symtab_size; n++)
+ {
+ addr = bfd_asymbol_value (info->symtab[n]);
+ if (addr > pc)
+ {
+ if (addr - pc < size)
+ size = addr - pc;
+ break;
+ }
+ }
+ /* If the next symbol is after three bytes, we need to
+ print only part of the data, so that we can use either
+ .byte or .short. */
+ if (size == 3)
+ size = (pc & 1) ? 1 : 2;
+ }
+ }
+
+ if (info->symbols != NULL)
{
if (bfd_asymbol_flavour (*info->symbols) == bfd_target_coff_flavour)
{
@@ -2930,8 +4082,11 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
|| cs->native->u.syment.n_sclass == C_THUMBEXTFUNC
|| cs->native->u.syment.n_sclass == C_THUMBSTATFUNC);
}
- else if (bfd_asymbol_flavour (*info->symbols) == bfd_target_elf_flavour)
+ else if (bfd_asymbol_flavour (*info->symbols) == bfd_target_elf_flavour
+ && !found)
{
+ /* If no mapping symbol has been found then fall back to the type
+ of the function symbol. */
elf_symbol_type * es;
unsigned int type;
@@ -2942,10 +4097,30 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
}
}
- info->display_endian = little ? BFD_ENDIAN_LITTLE : BFD_ENDIAN_BIG;
+ if (force_thumb)
+ is_thumb = TRUE;
+
+ info->display_endian = little ? BFD_ENDIAN_LITTLE : BFD_ENDIAN_BIG;
info->bytes_per_line = 4;
- if (!is_thumb)
+ if (is_data)
+ {
+ int i;
+
+ /* size was already set above. */
+ info->bytes_per_chunk = size;
+ printer = print_insn_data;
+
+ status = info->read_memory_func (pc, (bfd_byte *)b, size, info);
+ given = 0;
+ if (little)
+ for (i = size - 1; i >= 0; i--)
+ given = b[i] | (given << 8);
+ else
+ for (i = 0; i < (int) size; i++)
+ given = b[i] | (given << 8);
+ }
+ else if (!is_thumb)
{
/* In ARM mode endianness is a straightforward issue: the instruction
is four bytes long and is either ordered 0123 or 3210. */
@@ -2993,6 +4168,18 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
size = 4;
}
}
+
+ if (ifthen_address != pc)
+ find_ifthen_state(pc, info, little);
+
+ if (ifthen_state)
+ {
+ if ((ifthen_state & 0xf) == 0x8)
+ ifthen_next_state = 0;
+ else
+ ifthen_next_state = (ifthen_state & 0xe0)
+ | ((ifthen_state & 0xf) << 1);
+ }
}
if (status)
@@ -3009,6 +4196,12 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
pc = 0;
printer (pc, info, given);
+
+ if (is_thumb)
+ {
+ ifthen_state = ifthen_next_state;
+ ifthen_address += size;
+ }
return size;
}
diff --git a/opcodes/avr-dis.c b/opcodes/avr-dis.c
index 7e792c9d1574..aea807e9255d 100644
--- a/opcodes/avr-dis.c
+++ b/opcodes/avr-dis.c
@@ -43,6 +43,8 @@ const struct avr_opcodes_s avr_opcodes[] =
{NULL, NULL, NULL, 0, 0, 0}
};
+static const char * comment_start = "0x";
+
static int
avr_operand (unsigned int insn, unsigned int insn2, unsigned int pc, int constraint,
char *buf, char *comment, int regs, int *sym, bfd_vma *sym_addr)
@@ -140,12 +142,11 @@ avr_operand (unsigned int insn, unsigned int insn2, unsigned int pc, int constra
case 'h':
*sym = 1;
*sym_addr = ((((insn & 1) | ((insn & 0x1f0) >> 3)) << 16) | insn2) * 2;
- /* See PR binutils/2545. Ideally we would like to display the hex
+ /* See PR binutils/2454. Ideally we would like to display the hex
value of the address only once, but this would mean recoding
objdump_print_address() which would affect many targets. */
sprintf (buf, "%#lx", (unsigned long) *sym_addr);
- sprintf (comment, "0x");
-
+ sprintf (comment, comment_start);
break;
case 'L':
@@ -154,17 +155,18 @@ avr_operand (unsigned int insn, unsigned int insn2, unsigned int pc, int constra
sprintf (buf, ".%+-8d", rel_addr);
*sym = 1;
*sym_addr = pc + 2 + rel_addr;
- sprintf (comment, "0x");
+ sprintf (comment, comment_start);
}
break;
case 'l':
{
int rel_addr = ((((insn >> 3) & 0x7f) ^ 0x40) - 0x40) * 2;
+
sprintf (buf, ".%+-8d", rel_addr);
*sym = 1;
*sym_addr = pc + 2 + rel_addr;
- sprintf (comment, "0x");
+ sprintf (comment, comment_start);
}
break;
@@ -267,10 +269,17 @@ print_insn_avr (bfd_vma addr, disassemble_info *info)
int sym_op1 = 0, sym_op2 = 0;
bfd_vma sym_addr1, sym_addr2;
+
if (!initialized)
{
unsigned int nopcodes;
+ /* PR 4045: Try to avoid duplicating the 0x prefix that
+ objdump_print_addr() will put on addresses when there
+ is no symbol table available. */
+ if (info->symtab_size == 0)
+ comment_start = " ";
+
nopcodes = sizeof (avr_opcodes) / sizeof (struct avr_opcodes_s);
avr_bin_masks = xmalloc (nopcodes * sizeof (unsigned int));
diff --git a/opcodes/cgen-types.h b/opcodes/cgen-types.h
index 68363283eaad..e713088d070b 100644
--- a/opcodes/cgen-types.h
+++ b/opcodes/cgen-types.h
@@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#ifndef CGEN_TYPES_H
#define CGEN_TYPES_H
-#include <stdint.h>
+#include "../bfd/bfd_stdint.h"
typedef int8_t QI;
typedef uint8_t UQI;
diff --git a/opcodes/config.in b/opcodes/config.in
index 9d143c337287..6dec095be102 100644
--- a/opcodes/config.in
+++ b/opcodes/config.in
@@ -1,102 +1,34 @@
/* 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 */
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
#undef ENABLE_NLS
-/* 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 `basename', and to 0 if you
don't. */
#undef HAVE_DECL_BASENAME
-/* 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 <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
/* 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 <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 `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/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
@@ -106,17 +38,9 @@
/* 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
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#undef LT_OBJDIR
/* Name of package */
#undef PACKAGE
@@ -136,31 +60,8 @@
/* 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
/* Version number of package */
#undef VERSION
-
-/* 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/opcodes/configure b/opcodes/configure
index b692e8381603..7b91e405ca51 100755
--- a/opcodes/configure
+++ b/opcodes/configure
@@ -241,6 +241,155 @@ IFS=" $as_nl"
$as_unset CDPATH
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+ ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<_LT_EOF
+$*
+_LT_EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+ if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+ then
+ break
+ fi
+ done
+ fi
+
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+ else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$ECHO" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ ECHO='print -r'
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+ else
+ # Try using printf.
+ ECHO='printf %s\n'
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "$0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ ECHO=echo
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
# Name of the host.
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
# so uname gets run too.
@@ -309,7 +458,7 @@ ac_includes_default="\
# 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 AR ac_ct_AR RANLIB ac_ct_RANLIB LN_S LIBTOOL WARN_CFLAGS NO_WERROR MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT INSTALL_LIBBFD_TRUE INSTALL_LIBBFD_FALSE host_noncanonical target_noncanonical bfdlibdir bfdincludedir 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 CC_FOR_BUILD EXEEXT_FOR_BUILD HDEFINES CGEN_MAINT_TRUE CGEN_MAINT_FALSE cgendir WIN32LDFLAGS WIN32LIBADD archdefs BFD_MACHINES LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir 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 AR ac_ct_AR RANLIB ac_ct_RANLIB LIBTOOL SED EGREP FGREP GREP LD DUMPBIN ac_ct_DUMPBIN NM LN_S lt_ECHO CPP WARN_CFLAGS NO_WERROR MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT INSTALL_LIBBFD_TRUE INSTALL_LIBBFD_FALSE host_noncanonical target_noncanonical bfdlibdir bfdincludedir USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT MKINSTALLDIRS MSGFMT MSGMERGE CC_FOR_BUILD EXEEXT_FOR_BUILD HDEFINES CGEN_MAINT_TRUE CGEN_MAINT_FALSE cgendir WIN32LDFLAGS WIN32LIBADD archdefs BFD_MACHINES LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -852,14 +1001,17 @@ Optional Features:
--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=no
- --enable-static=PKGS build static libraries default=yes
- --enable-fast-install=PKGS optimize for fast installation default=yes
+ --enable-shared[=PKGS]
+ build shared libraries [default=no]
+ --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-commonbfdlib build shared BFD/opcodes/libiberty library
- --enable-werror treat compile warnings as errors
- --enable-build-warnings Enable build-time compiler warnings
+ --enable-werror treat compile warnings as errors
+ --enable-build-warnings enable build-time compiler warnings
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
--enable-install-libbfd controls installation of libbfd and related headers
@@ -869,9 +1021,9 @@ Optional Features:
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-included-gettext use the GNU gettext library included here
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
Some influential environment variables:
CC C compiler command
@@ -3243,70 +3395,262 @@ fi
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
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
enable_shared=no
fi;
+
+
+
+
+
+
+
+
+
+
+macro_version='2.1a'
+macro_revision='1.2435'
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Set options
+
+enable_dlopen=no
+
+
+enable_win32_dll=no
+
+
+
# 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
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
enable_static=yes
fi;
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+ withval="$with_pic"
+ pic_mode="$withval"
+else
+ pic_mode=default
+fi;
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
# Check whether --enable-fast-install 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
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
enable_fast_install=yes
fi;
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
+if test "${lt_cv_path_SED+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+
+fi
+
+SED=$lt_cv_path_SED
+
+echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+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 fgrep" >&5
+echo $ECHO_N "checking for fgrep... $ECHO_C" >&6
+if test "${ac_cv_prog_fgrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo 'ab*c' | (grep -F 'ab*c') >/dev/null 2>&1
+ then ac_cv_prog_fgrep='grep -F'
+ else ac_cv_prog_fgrep='fgrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_fgrep" >&5
+echo "${ECHO_T}$ac_cv_prog_fgrep" >&6
+ FGREP=$ac_cv_prog_fgrep
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
# Check whether --with-gnu-ld or --without-gnu-ld was given.
if test "${with_gnu_ld+set}" = set; then
withval="$with_gnu_ld"
@@ -3317,8 +3661,8 @@ 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
+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -3328,12 +3672,12 @@ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
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%/%"`
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
done
test -z "$LD" && LD="$ac_prog"
;;
@@ -3357,22 +3701,26 @@ 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-:}"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
lt_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
+ # but apparently some variants of GNU ld 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
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
test "$with_gnu_ld" != no && break
- else
+ ;;
+ *)
test "$with_gnu_ld" != yes && break
- fi
+ ;;
+ esac
fi
done
- IFS="$ac_save_ifs"
+ IFS="$lt_save_ifs"
else
lt_cv_path_LD="$LD" # Let the user override the test with a path.
fi
@@ -3394,32 +3742,31 @@ 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
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
lt_cv_prog_gnu_ld=yes
-else
+ ;;
+*)
lt_cv_prog_gnu_ld=no
-fi
+ ;;
+esac
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
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
+echo $ECHO_N "checking for BSD- or MS-compatible name lister (nm)... $ECHO_C" >&6
if test "${lt_cv_path_NM+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -3427,35 +3774,173 @@ else
# 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
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
fi
- fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+ 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_DUMPBIN+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DUMPBIN="$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
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+echo "${ECHO_T}$DUMPBIN" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$DUMPBIN" && break
done
- IFS="$ac_save_ifs"
- test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+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_DUMPBIN+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
+echo "${ECHO_T}$ac_ct_DUMPBIN" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-NM="$lt_cv_path_NM"
-echo "$as_me:$LINENO: result: $NM" >&5
-echo "${ECHO_T}$NM" >&6
+ test -n "$ac_ct_DUMPBIN" && break
+done
+test -n "$ac_ct_DUMPBIN" || ac_ct_DUMPBIN=":"
+
+ DUMPBIN=$ac_ct_DUMPBIN
+fi
+
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+echo $ECHO_N "checking the name lister ($NM) interface... $ECHO_C" >&6
+if test "${lt_cv_nm_interface+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:3929: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:3932: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:3935: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
+echo "${ECHO_T}$lt_cv_nm_interface" >&6
echo "$as_me:$LINENO: checking whether ln -s works" >&5
echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
@@ -3468,8 +3953,234 @@ else
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
+# 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
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # 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 all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`getconf ARG_MAX 2> /dev/null`
+ if test -n $lt_cv_sys_max_cmd_len; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ 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
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+echo $ECHO_N "checking whether the shell understands some XSI constructs... $ECHO_C" >&6
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+echo "$as_me:$LINENO: result: $xsi_shell" >&5
+echo "${ECHO_T}$xsi_shell" >&6
+
+
+echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+echo $ECHO_N "checking whether the shell understands \"+=\"... $ECHO_C" >&6
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+echo "$as_me:$LINENO: result: $lt_shell_append" >&5
+echo "${ECHO_T}$lt_shell_append" >&6
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+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
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6
if test "${lt_cv_deplibs_check_method+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -3482,13 +4193,13 @@ lt_cv_deplibs_check_method='unknown'
# `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.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
# If you have `file' or equivalent on your system and you're not sure
# whether `pass_all' will *always* work, you probably want this one.
case $host_os in
-aix*)
+aix4* | aix5*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -3496,39 +4207,42 @@ beos*)
lt_cv_deplibs_check_method=pass_all
;;
-bsdi4*)
+bsdi[45]*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
lt_cv_file_magic_cmd='/usr/bin/file -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
-cygwin* | mingw* |pw32*)
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
;;
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
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
@@ -3542,92 +4256,116 @@ gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-hpux10.20*|hpux11*)
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
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"
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
;;
*)
- 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"
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
;;
esac
- lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
lt_cv_deplibs_check_method=pass_all
;;
# This must be Linux ELF.
-linux-gnu*)
+linux* | k*bsd*-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]+$'
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
else
- lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
fi
;;
-newsos6)
+newos6*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
osf3* | osf4* | osf5*)
- # 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*)
+rdos*)
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*)
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
lt_cv_deplibs_check_method=pass_all
;;
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+sysv4 | sysv4.3*)
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*`
;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
fi
@@ -3635,222 +4373,29 @@ 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
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
-# 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
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
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
+if test "${ac_cv_prog_AR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -3859,7 +4404,7 @@ do
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"
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -3868,27 +4413,27 @@ 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
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&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
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
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
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -3897,30 +4442,43 @@ do
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"
+ ac_cv_prog_ac_ct_AR="ar"
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=":"
+ test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
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
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
else
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
- RANLIB=$ac_ct_RANLIB
+ AR=$ac_ct_AR
else
- RANLIB="$ac_cv_prog_RANLIB"
+ AR="$ac_cv_prog_AR"
fi
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
@@ -4001,1179 +4559,555 @@ else
STRIP="$ac_cv_prog_STRIP"
fi
+test -z "$STRIP" && STRIP=:
-# 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"
+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
- 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 4038 "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
+ 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
- rm -rf conftest*
- ;;
+done
+done
-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*
- ;;
+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
-*-*-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
+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
-
-
- 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
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $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
-lt_cv_cc_needs_belf=no
+ 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
-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
+ RANLIB=$ac_ct_RANLIB
+else
+ RANLIB="$ac_cv_prog_RANLIB"
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
- ;;
+test -z "$RANLIB" && RANLIB=:
-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; }; }
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
-# 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
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
fi
-# 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 --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-commonbfdlib or --disable-commonbfdlib was given.
-if test "${enable_commonbfdlib+set}" = set; then
- enableval="$enable_commonbfdlib"
- case "${enableval}" in
- yes) commonbfdlib=true ;;
- no) commonbfdlib=false ;;
- *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for opcodes commonbfdlib option" >&5
-echo "$as_me: error: bad value ${enableval} for opcodes commonbfdlib option" >&2;}
- { (exit 1); exit 1; }; } ;;
-esac
-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
-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
- case ${build_alias} in
- "") build_noncanonical=${build} ;;
- *) build_noncanonical=${build_alias} ;;
-esac
- case ${host_alias} in
- "") host_noncanonical=${build_noncanonical} ;;
- *) host_noncanonical=${host_alias} ;;
-esac
- case ${target_alias} in
- "") target_noncanonical=${host_noncanonical} ;;
- *) target_noncanonical=${target_alias} ;;
-esac
-echo "$as_me:$LINENO: checking whether to install libbfd" >&5
-echo $ECHO_N "checking whether to install libbfd... $ECHO_C" >&6
- # Check whether --enable-install-libbfd or --disable-install-libbfd was given.
-if test "${enable_install_libbfd+set}" = set; then
- enableval="$enable_install_libbfd"
- install_libbfd_p=$enableval
-else
- if test "${host}" = "${target}" || test "$enable_shared" = "yes"; then
- install_libbfd_p=yes
- else
- install_libbfd_p=no
- fi
-fi;
- echo "$as_me:$LINENO: result: $install_libbfd_p" >&5
-echo "${ECHO_T}$install_libbfd_p" >&6
-if test $install_libbfd_p = yes; then
- INSTALL_LIBBFD_TRUE=
- INSTALL_LIBBFD_FALSE='#'
-else
- INSTALL_LIBBFD_TRUE='#'
- INSTALL_LIBBFD_FALSE=
-fi
- # Need _noncanonical variables for this.
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+# Allow CC to be a program name with arguments.
+compiler=$CC
- # libbfd.a is a host library containing target dependent code
- bfdlibdir='$(libdir)'
- bfdincludedir='$(includedir)'
- if test "${host}" != "${target}"; then
- bfdlibdir='$(exec_prefix)/$(host_noncanonical)/$(target_noncanonical)/lib'
- bfdincludedir='$(exec_prefix)/$(host_noncanonical)/$(target_noncanonical)/include'
- fi
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
-# host-specific stuff:
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-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
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
-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
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
-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
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
fi
-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
+ # Check to see that the pipe works correctly.
+ pipe_works=no
-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
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
-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
+ 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
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
-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
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
-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
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
- CC=$ac_ct_CC
-else
- CC="$ac_cv_prog_CC"
-fi
+ cat <<_LT_EOF >> conftest.$ac_ext
-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
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
-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+' '}$@"
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
fi
-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
+ rm -f conftest* conftst*
-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
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
fi
done
-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
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
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
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&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
+ echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&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
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+ enableval="$enable_libtool_lock"
-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
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-# 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
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ (exit $ac_status); }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line 4990 "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); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&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*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
+ (exit $ac_status); }; then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ 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
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ 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
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-$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
+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
@@ -5187,120 +5121,57 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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
- 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
-
+ 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_ext
-ac_ext=c
+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
-
-ALL_LINGUAS="fr sv tr es da de id pt_BR ro nl fi vi ga 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
+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
-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
+ ;;
+sparc*-*solaris*)
+ # 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
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *) LD="${LD-ld} -64" ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
- RANLIB=$ac_ct_RANLIB
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
+need_locks="$enable_libtool_lock"
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -5537,21 +5408,6 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
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
@@ -5718,132 +5574,34 @@ _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. */
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
-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
+
+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
- 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
+$ac_includes_default
+#include <$ac_header>
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
@@ -5867,47 +5625,29 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_c_inline=$ac_kw; break
+ 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
-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
+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
- ;;
-esac
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
+fi
+done
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
+for ac_header in dlfcn.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -5968,98 +5708,1364 @@ 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
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+if test "${lt_cv_objdir+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;
-}
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
_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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ 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
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
-ac_cv_type_off_t=no
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+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
-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
- :
+
+
+
+
+
+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_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
-cat >>confdefs.h <<_ACEOF
-#define off_t long
-_ACEOF
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ 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
-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
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6090: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:6094: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ fi
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ lt_prog_compiler_pic='-qnocommon'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6412: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:6416: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
+
+if test x"$lt_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
+if test "${lt_prog_compiler_static_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_static_works=yes
+ fi
+ else
+ lt_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
+
+if test x"$lt_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6517: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:6521: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6572: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:6576: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ fi
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ ld_shlibs=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ *)
+ tmp_sharedflag='-shared' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >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
+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
@@ -6073,51 +7079,55 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_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
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
fi
-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
+ 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 -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >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;
}
@@ -6144,65 +7154,277 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_working_alloca_h=yes
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
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
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_ALLOCA_H 1
-_ACEOF
+ amigaos*)
+ if test "$host_cpu" = m68k; then
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ fi
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
-fi
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
-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
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[012])
+ allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ ;;
+ esac
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ whole_archive_flag_spec=''
+ link_all_deplibs=yes
+ if test "$GCC" = yes ; then
+ if test "${lt_cv_apple_cc_single_mod+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
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi-module to the
+ # link flags.
+ echo "int foo(void){return 1;}" > conftest.c
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib ${wl}-single_module conftest.c
+ if test -f libconftest.dylib; then
+ lt_cv_apple_cc_single_mod=yes
+ rm libconftest.dylib
+ fi
+ rm conftest.$ac_ext
+ fi
+fi
-int
-main ()
-{
-char *p = (char *) alloca (1);
- ;
- return 0;
-}
+ output_verbose_link_cmd=echo
+ if test "X$lt_cv_apple_cc_single_mod" = Xyes ; then
+ archive_cmds='$CC -dynamiclib $single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $single_module -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ module_expsym_cmds='sed -e "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd=echo
+ archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`$ECHO $rpath/$soname` $verstring'
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ archive_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ module_expsym_cmds='sed "s,^,_," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat >conftest.$ac_ext <<_ACEOF
+int foo(void) {}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
@@ -6226,122 +7448,933 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_func_alloca_works=yes
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
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
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
-if test $ac_cv_func_alloca_works = yes; then
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_ALLOCA 1
-_ACEOF
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
-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.
+ *nto* | *qnx*)
+ ;;
-ALLOCA=alloca.$ac_objext
+ openbsd*)
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
-cat >>confdefs.h <<\_ACEOF
-#define C_ALLOCA 1
-_ACEOF
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
-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
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-_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*
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
-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
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > 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); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc=no
+ else
+ archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+withGCC=$GCC
+if test "$withGCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ if test "$host_cpu" = m68k; then
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ else
+ dynamic_linker=no
+ fi
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $withGCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
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;
}
@@ -6368,126 +8401,425 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir"; then
+ shlibpath_overrides_runpath=yes
+fi
+
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
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
-cat >>confdefs.h <<_ACEOF
-#define CRAY_STACKSEG_END $ac_func
-_ACEOF
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
- break
-fi
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
- done
-fi
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
-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 ();
- }
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
else
- return (&dummy > addr) ? 1 : -1;
-}
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
-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
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
-( exit $ac_status )
-ac_cv_c_stack_direction=-1
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
fi
-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
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+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
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
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>
+
+/* 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 dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (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
@@ -6501,122 +8833,41 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_header_compiler=yes
+ ac_cv_lib_dl_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ac_cv_lib_dl_dlopen=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
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
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
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
-# 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 "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -6625,12 +8876,12 @@ _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.
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
+#define shl_load innocuous_shl_load
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
+ which can conflict with char shl_load (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
@@ -6640,7 +8891,7 @@ cat >>conftest.$ac_ext <<_ACEOF
# include <assert.h>
#endif
-#undef $ac_func
+#undef shl_load
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
@@ -6649,14 +8900,14 @@ 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 ();
+char shl_load ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
choke me
#else
-char (*f) () = $ac_func;
+char (*f) () = shl_load;
#endif
#ifdef __cplusplus
}
@@ -6665,7 +8916,7 @@ char (*f) () = $ac_func;
int
main ()
{
-return f != $ac_func;
+return f != shl_load;
;
return 0;
}
@@ -6692,239 +8943,53 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_func_shl_load=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_func_shl_load=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
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
else
- if test "$cross_compiling" = yes; then
- ac_cv_func_mmap_fixed_mapped=no
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+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 */
+/* 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 shl_load ();
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);
+shl_load ();
+ ;
+ return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
+rm -f conftest.$ac_objext 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
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -6938,132 +9003,31 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_header_compiler=yes
+ ac_cv_lib_dld_shl_load=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ac_cv_lib_dld_shl_load=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
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
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
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
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 "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -7072,12 +9036,12 @@ _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.
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
+#define dlopen innocuous_dlopen
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
+ which can conflict with char dlopen (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
@@ -7087,7 +9051,7 @@ cat >>conftest.$ac_ext <<_ACEOF
# include <assert.h>
#endif
-#undef $ac_func
+#undef dlopen
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
@@ -7096,14 +9060,14 @@ 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 ();
+char dlopen ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
choke me
#else
-char (*f) () = $ac_func;
+char (*f) () = dlopen;
#endif
#ifdef __cplusplus
}
@@ -7112,7 +9076,7 @@ char (*f) () = $ac_func;
int
main ()
{
-return f != $ac_func;
+return f != dlopen;
;
return 0;
}
@@ -7139,84 +9103,46 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_func_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_func_dlopen=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 "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+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
-
+char dlopen ();
int
main ()
{
-return f != $ac_func;
+dlopen ();
;
return 0;
}
@@ -7243,52 +9169,47 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_lib_dl_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ac_cv_lib_dl_dlopen=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: `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 "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+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>
+
+/* 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 dlopen ();
int
main ()
{
-return LC_MESSAGES
+dlopen ();
;
return 0;
}
@@ -7315,85 +9236,54 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- am_cv_val_LC_MESSAGES=yes
+ ac_cv_lib_svld_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-am_cv_val_LC_MESSAGES=no
+ac_cv_lib_svld_dlopen=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: $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
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
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 "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+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
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
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>
+
+/* 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 dld_link ();
+int
+main ()
+{
+dld_link ();
+ ;
+ return 0;
+}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (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
@@ -7407,110 +9297,914 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
+ { 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_header_compiler=yes
+ ac_cv_lib_dld_dld_link=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
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
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
else
- ac_cpp_err=
+ enable_dlopen=no
fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cpp_err=yes
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 9369 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}
+_LT_EOF
+ 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); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 9469 "configure"
+#include "confdefs.h"
- ac_header_preproc=no
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}
+_LT_EOF
+ 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); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
+rm -fr conftest*
-# 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
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
;;
- 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
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+ echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+# 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-commonbfdlib or --disable-commonbfdlib was given.
+if test "${enable_commonbfdlib+set}" = set; then
+ enableval="$enable_commonbfdlib"
+ case "${enableval}" in
+ yes) commonbfdlib=true ;;
+ no) commonbfdlib=false ;;
+ *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for opcodes commonbfdlib option" >&5
+echo "$as_me: error: bad value ${enableval} for opcodes commonbfdlib option" >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+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
-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
+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
+
+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
+
+
+ case ${build_alias} in
+ "") build_noncanonical=${build} ;;
+ *) build_noncanonical=${build_alias} ;;
+esac
+
+ case ${host_alias} in
+ "") host_noncanonical=${build_noncanonical} ;;
+ *) host_noncanonical=${host_alias} ;;
+esac
+
+ case ${target_alias} in
+ "") target_noncanonical=${host_noncanonical} ;;
+ *) target_noncanonical=${target_alias} ;;
+esac
+
+echo "$as_me:$LINENO: checking whether to install libbfd" >&5
+echo $ECHO_N "checking whether to install libbfd... $ECHO_C" >&6
+ # Check whether --enable-install-libbfd or --disable-install-libbfd was given.
+if test "${enable_install_libbfd+set}" = set; then
+ enableval="$enable_install_libbfd"
+ install_libbfd_p=$enableval
+else
+ if test "${host}" = "${target}" || test "$enable_shared" = "yes"; then
+ install_libbfd_p=yes
+ else
+ install_libbfd_p=no
+ fi
+fi;
+ echo "$as_me:$LINENO: result: $install_libbfd_p" >&5
+echo "${ECHO_T}$install_libbfd_p" >&6
+
+
+if test $install_libbfd_p = yes; then
+ INSTALL_LIBBFD_TRUE=
+ INSTALL_LIBBFD_FALSE='#'
+else
+ INSTALL_LIBBFD_TRUE='#'
+ INSTALL_LIBBFD_FALSE=
+fi
+
+ # Need _noncanonical variables for this.
+
+
+
+
+ # libbfd.a is a host library containing target dependent code
+ bfdlibdir='$(libdir)'
+ bfdincludedir='$(includedir)'
+ if test "${host}" != "${target}"; then
+ bfdlibdir='$(exec_prefix)/$(host_noncanonical)/$(target_noncanonical)/lib'
+ bfdincludedir='$(exec_prefix)/$(host_noncanonical)/$(target_noncanonical)/include'
+ 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
- ac_cv_header_libintl_h=$ac_header_preproc
+ 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
-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
+ test -n "$CC" && break
+ done
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
+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
@@ -7519,18 +10213,21 @@ _ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <libintl.h>
+
int
main ()
{
-return (int) gettext ("")
+#ifndef __GNUC__
+ choke me
+#endif
+
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+rm -f conftest.$ac_objext
+if { (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
@@ -7544,58 +10241,52 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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
- gt_cv_func_gettext_libc=yes
+ ac_compiler_gnu=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
+ac_compiler_gnu=no
fi
-echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5
-echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
- 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
+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
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lintl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char 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
+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
@@ -7609,49 +10300,110 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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_lib_intl_bindtextdomain=yes
+ ac_cv_prog_cc_g=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_intl_bindtextdomain=no
+ac_cv_prog_cc_g=no
fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
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 "$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
- cat >conftest.$ac_ext <<_ACEOF
+ 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 (int) gettext ("")
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[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
+# 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
@@ -7665,134 +10417,94 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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
- gt_cv_func_gettext_libintl=yes
+ ac_cv_prog_cc_stdc=$ac_arg
+break
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
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETTEXT 1
-_ACEOF
+fi
- # 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.
- ;;
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
*)
- 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"
- ;;
+ 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
-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
+# 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
-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
-
+$ac_declaration
+#include <stdlib.h>
int
main ()
{
-return f != $ac_func;
+exit (42);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+rm -f conftest.$ac_objext
+if { (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
@@ -7806,127 +10518,38 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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_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
+continue
fi
-
- cat >conftest.$ac_ext <<_ACEOF
+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 ()
{
-extern int _nl_msg_cat_cntr;
- return _nl_msg_cat_cntr
+exit (42);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+rm -f conftest.$ac_objext
+if { (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
@@ -7940,42 +10563,173 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
+ { 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
- CATOBJEXT=.gmo
- DATADIRNAME=share
+ break
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
+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
+ALL_LINGUAS="fr sv tr es da de id pt_BR ro nl fi vi ga zh_CN"
+# If we haven't got the data from the intl directory,
+# assume NLS is disabled.
+USE_NLS=no
+LIBINTL=
+LIBINTL_DEP=
+INCINTL=
+XGETTEXT=
+GMSGFMT=
+POSUB=
+
+if test -f ../intl/config.intl; then
+ . ../intl/config.intl
+fi
+echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
+if test x"$USE_NLS" != xyes; then
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+
+ echo "$as_me:$LINENO: checking for catalogs to be installed" >&5
+echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6
+ # Look for .po and .gmo files in the source directory.
+ CATALOGS=
+ XLINGUAS=
+ for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
+ # If there aren't any .gmo files the shell will give us the
+ # literal string "../path/to/srcdir/po/*.gmo" which has to be
+ # weeded out.
+ case "$cat" in *\**)
+ continue;;
+ esac
+ # The quadruple backslash is collapsed to a double backslash
+ # by the backticks, then collapsed again by the double quotes,
+ # leaving us with one backslash in the sed expression (right
+ # before the dot that mustn't act as a wildcard).
+ cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
+ lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
+ # The user is allowed to set LINGUAS to a list of languages to
+ # install catalogs for. If it's empty that means "all of them."
+ if test "x$LINGUAS" = x; then
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ else
+ case "$LINGUAS" in *$lang*)
+ CATALOGS="$CATALOGS $cat"
+ XLINGUAS="$XLINGUAS $lang"
+ ;;
+ esac
+ fi
+ done
+ LINGUAS="$XLINGUAS"
+ echo "$as_me:$LINENO: result: $LINGUAS" >&5
+echo "${ECHO_T}$LINGUAS" >&6
+
+
+ DATADIRNAME=share
+
+ INSTOBJEXT=.mo
+
+ GENCAT=gencat
+
+ CATOBJEXT=.gmo
+
+fi
+
+ MKINSTALLDIRS=
+ if test -n "$ac_aux_dir"; then
+ case "$ac_aux_dir" in
+ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+ esac
+ fi
+ if test -z "$MKINSTALLDIRS"; then
+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+ fi
+
+
+
+ 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
- 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.
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
@@ -7983,27 +10737,31 @@ 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.
- ;;
+ [\\/]* | ?:[\\/]*)
+ 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"
- ;;
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
esac
fi
MSGFMT="$ac_cv_path_MSGFMT"
-if test -n "$MSGFMT"; then
+if test "$MSGFMT" != ":"; then
echo "$as_me:$LINENO: result: $MSGFMT" >&5
echo "${ECHO_T}$MSGFMT" >&6
else
@@ -8011,7 +10769,7 @@ else
echo "${ECHO_T}no" >&6
fi
- # Extract the first word of "gmsgfmt", so it can be a program name with args.
+ # 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
@@ -8051,7 +10809,37 @@ else
echo "${ECHO_T}no" >&6
fi
- # Extract the first word of "xgettext", so it can be a program name with args.
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
@@ -8059,27 +10847,31 @@ 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.
- ;;
+ [\\/]* | ?:[\\/]*)
+ 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"
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
- ;;
+ ;;
esac
fi
XGETTEXT="$ac_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
+if test "$XGETTEXT" != ":"; then
echo "$as_me:$LINENO: result: $XGETTEXT" >&5
echo "${ECHO_T}$XGETTEXT" >&6
else
@@ -8087,282 +10879,103 @@ else
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
-
-
-
+ rm -f messages.po
-
-
-
-
-
-
-
- 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
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
else
- ac_cpp_err=
+ PATH_SEPARATOR=:
fi
-else
- ac_cpp_err=yes
+ rm -f conf$$.sh
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
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
+rm -f conf$$.file
-# 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
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; 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_MSGMERGE+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
;;
- 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
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
;;
esac
-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
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+echo "${ECHO_T}$MSGMERGE" >&6
else
- msgformat=xopen
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+ if test "$GMSGFMT" != ":"; then
+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+ echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6
+ GMSGFMT=":"
+ fi
+ 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"
+ if test "$XGETTEXT" != ":"; then
+ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
+echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
+ XGETTEXT=":"
+ fi
+ rm -f messages.po
+ fi
+ ac_config_commands="$ac_config_commands default-1"
- 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
. ${srcdir}/../bfd/configure.host
@@ -8806,6 +11419,7 @@ if test x${all_targets} = xfalse ; then
bfd_arm_arch) ta="$ta arm-dis.lo" ;;
bfd_avr_arch) ta="$ta avr-dis.lo" ;;
bfd_bfin_arch) ta="$ta bfin-dis.lo" ;;
+ bfd_cr16_arch) ta="$ta cr16-dis.lo cr16-opc.lo" ;;
bfd_cris_arch) ta="$ta cris-dis.lo cris-opc.lo cgen-bitset.lo" ;;
bfd_crx_arch) ta="$ta crx-dis.lo crx-opc.lo" ;;
bfd_d10v_arch) ta="$ta d10v-dis.lo d10v-opc.lo" ;;
@@ -8817,7 +11431,7 @@ if test x${all_targets} = xfalse ; then
bfd_h8500_arch) ta="$ta h8500-dis.lo" ;;
bfd_hppa_arch) ta="$ta hppa-dis.lo" ;;
bfd_i370_arch) ta="$ta i370-dis.lo i370-opc.lo" ;;
- bfd_i386_arch) ta="$ta i386-dis.lo" ;;
+ bfd_i386_arch) ta="$ta i386-dis.lo i386-opc.lo" ;;
bfd_i860_arch) ta="$ta i860-dis.lo" ;;
bfd_i960_arch) ta="$ta i960-dis.lo" ;;
bfd_ia64_arch) ta="$ta ia64-dis.lo ia64-opc.lo" ;;
@@ -8831,6 +11445,7 @@ if test x${all_targets} = xfalse ; then
bfd_m88k_arch) ta="$ta m88k-dis.lo" ;;
bfd_maxq_arch) ta="$ta maxq-dis.lo" ;;
bfd_mcore_arch) ta="$ta mcore-dis.lo" ;;
+ bfd_mep_arch) ta="$ta mep-asm.lo mep-desc.lo mep-dis.lo mep-ibld.lo mep-opc.lo" using_cgen=yes ;;
bfd_mips_arch) ta="$ta mips-dis.lo mips-opc.lo mips16-opc.lo" ;;
bfd_mmix_arch) ta="$ta mmix-dis.lo mmix-opc.lo" ;;
bfd_mn10200_arch) ta="$ta m10200-dis.lo m10200-opc.lo" ;;
@@ -8848,6 +11463,7 @@ if test x${all_targets} = xfalse ; then
bfd_romp_arch) ;;
bfd_rs6000_arch) ta="$ta ppc-dis.lo ppc-opc.lo" ;;
bfd_s390_arch) ta="$ta s390-dis.lo s390-opc.lo" ;;
+ bfd_score_arch) ta="$ta score-dis.lo" ;;
bfd_sh_arch)
# We can't decide what we want just from the CPU family.
# We want SH5 support unless a specific version of sh is
@@ -8862,8 +11478,9 @@ if test x${all_targets} = xfalse ; then
break;;
esac;
done
- ta="$ta sh-dis.lo" ;;
+ ta="$ta sh-dis.lo cgen-bitset.lo" ;;
bfd_sparc_arch) ta="$ta sparc-dis.lo sparc-opc.lo" ;;
+ bfd_spu_arch) ta="$ta spu-dis.lo spu-opc.lo" ;;
bfd_tahoe_arch) ;;
bfd_tic30_arch) ta="$ta tic30-dis.lo" ;;
bfd_tic4x_arch) ta="$ta tic4x-dis.lo" ;;
@@ -8924,8 +11541,6 @@ 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
@@ -9488,6 +12103,253 @@ cat >>$CONFIG_STATUS <<_ACEOF
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+ ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+ # from automake.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+
_ACEOF
@@ -9500,7 +12362,8 @@ do
"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" ;;
+ "libtool" ) CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
"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;}
@@ -9641,8 +12504,18 @@ s,@AR@,$AR,;t t
s,@ac_ct_AR@,$ac_ct_AR,;t t
s,@RANLIB@,$RANLIB,;t t
s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s,@LN_S@,$LN_S,;t t
s,@LIBTOOL@,$LIBTOOL,;t t
+s,@SED@,$SED,;t t
+s,@EGREP@,$EGREP,;t t
+s,@FGREP@,$FGREP,;t t
+s,@GREP@,$GREP,;t t
+s,@LD@,$LD,;t t
+s,@DUMPBIN@,$DUMPBIN,;t t
+s,@ac_ct_DUMPBIN@,$ac_ct_DUMPBIN,;t t
+s,@NM@,$NM,;t t
+s,@LN_S@,$LN_S,;t t
+s,@lt_ECHO@,$lt_ECHO,;t t
+s,@CPP@,$CPP,;t t
s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t
s,@NO_WERROR@,$NO_WERROR,;t t
s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
@@ -9654,29 +12527,21 @@ s,@host_noncanonical@,$host_noncanonical,;t t
s,@target_noncanonical@,$target_noncanonical,;t t
s,@bfdlibdir@,$bfdlibdir,;t t
s,@bfdincludedir@,$bfdincludedir,;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,@LIBINTL@,$LIBINTL,;t t
+s,@LIBINTL_DEP@,$LIBINTL_DEP,;t t
+s,@INCINTL@,$INCINTL,;t t
s,@XGETTEXT@,$XGETTEXT,;t t
-s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t
+s,@GMSGFMT@,$GMSGFMT,;t t
+s,@POSUB@,$POSUB,;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,@GENCAT@,$GENCAT,;t t
+s,@CATOBJEXT@,$CATOBJEXT,;t t
s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
-s,@l@,$l,;t t
+s,@MSGFMT@,$MSGFMT,;t t
+s,@MSGMERGE@,$MSGMERGE,;t t
s,@CC_FOR_BUILD@,$CC_FOR_BUILD,;t t
s,@EXEEXT_FOR_BUILD@,$EXEEXT_FOR_BUILD,;t t
s,@HDEFINES@,$HDEFINES,;t t
@@ -10371,7 +13236,656 @@ echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
done
done
;;
- default ) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;;
+ libtool )
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# 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, a copy can be downloaded from
+# http://www.gnu.org/copyleft/gpl.html, or by writing to the Free
+# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1+=\$2"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1=\$$1\$2"
+}
+_LT_EOF
+ ;;
+ esac
+
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+ ;;
+ default-1 )
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ GMOFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
esac
done
_ACEOF
diff --git a/opcodes/configure.in b/opcodes/configure.in
index d19d23cdbdca..104653f27d5f 100644
--- a/opcodes/configure.in
+++ b/opcodes/configure.in
@@ -61,7 +61,8 @@ AC_EXEEXT
AC_PROG_CC
ALL_LINGUAS="fr sv tr es da de id pt_BR ro nl fi vi ga zh_CN"
-CY_GNU_GETTEXT
+ZW_GNU_GETTEXT_SISTER_DIR
+AM_PO_SUBDIRS
. ${srcdir}/../bfd/configure.host
@@ -158,6 +159,7 @@ if test x${all_targets} = xfalse ; then
bfd_arm_arch) ta="$ta arm-dis.lo" ;;
bfd_avr_arch) ta="$ta avr-dis.lo" ;;
bfd_bfin_arch) ta="$ta bfin-dis.lo" ;;
+ bfd_cr16_arch) ta="$ta cr16-dis.lo cr16-opc.lo" ;;
bfd_cris_arch) ta="$ta cris-dis.lo cris-opc.lo cgen-bitset.lo" ;;
bfd_crx_arch) ta="$ta crx-dis.lo crx-opc.lo" ;;
bfd_d10v_arch) ta="$ta d10v-dis.lo d10v-opc.lo" ;;
@@ -169,7 +171,7 @@ if test x${all_targets} = xfalse ; then
bfd_h8500_arch) ta="$ta h8500-dis.lo" ;;
bfd_hppa_arch) ta="$ta hppa-dis.lo" ;;
bfd_i370_arch) ta="$ta i370-dis.lo i370-opc.lo" ;;
- bfd_i386_arch) ta="$ta i386-dis.lo" ;;
+ bfd_i386_arch) ta="$ta i386-dis.lo i386-opc.lo" ;;
bfd_i860_arch) ta="$ta i860-dis.lo" ;;
bfd_i960_arch) ta="$ta i960-dis.lo" ;;
bfd_ia64_arch) ta="$ta ia64-dis.lo ia64-opc.lo" ;;
@@ -183,6 +185,7 @@ if test x${all_targets} = xfalse ; then
bfd_m88k_arch) ta="$ta m88k-dis.lo" ;;
bfd_maxq_arch) ta="$ta maxq-dis.lo" ;;
bfd_mcore_arch) ta="$ta mcore-dis.lo" ;;
+ bfd_mep_arch) ta="$ta mep-asm.lo mep-desc.lo mep-dis.lo mep-ibld.lo mep-opc.lo" using_cgen=yes ;;
bfd_mips_arch) ta="$ta mips-dis.lo mips-opc.lo mips16-opc.lo" ;;
bfd_mmix_arch) ta="$ta mmix-dis.lo mmix-opc.lo" ;;
bfd_mn10200_arch) ta="$ta m10200-dis.lo m10200-opc.lo" ;;
@@ -200,6 +203,7 @@ if test x${all_targets} = xfalse ; then
bfd_romp_arch) ;;
bfd_rs6000_arch) ta="$ta ppc-dis.lo ppc-opc.lo" ;;
bfd_s390_arch) ta="$ta s390-dis.lo s390-opc.lo" ;;
+ bfd_score_arch) ta="$ta score-dis.lo" ;;
bfd_sh_arch)
# We can't decide what we want just from the CPU family.
# We want SH5 support unless a specific version of sh is
@@ -214,8 +218,9 @@ if test x${all_targets} = xfalse ; then
break;;
esac;
done
- ta="$ta sh-dis.lo" ;;
+ ta="$ta sh-dis.lo cgen-bitset.lo" ;;
bfd_sparc_arch) ta="$ta sparc-dis.lo sparc-opc.lo" ;;
+ bfd_spu_arch) ta="$ta spu-dis.lo spu-opc.lo" ;;
bfd_tahoe_arch) ;;
bfd_tic30_arch) ta="$ta tic30-dis.lo" ;;
bfd_tic4x_arch) ta="$ta tic4x-dis.lo" ;;
@@ -273,5 +278,4 @@ AC_SUBST(archdefs)
AC_SUBST(BFD_MACHINES)
AC_CONFIG_FILES([Makefile po/Makefile.in:po/Make-in])
-AC_CONFIG_COMMANDS([default],[[sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile]],[[]])
AC_OUTPUT
diff --git a/opcodes/cr16-dis.c b/opcodes/cr16-dis.c
new file mode 100644
index 000000000000..724cb9bb8901
--- /dev/null
+++ b/opcodes/cr16-dis.c
@@ -0,0 +1,820 @@
+/* Disassembler code for CR16.
+ Copyright 2007 Free Software Foundation, Inc.
+ Contributed by M R Swami Reddy (MR.Swami.Reddy@nsc.com).
+
+ This file is part of GAS, GDB and the GNU binutils.
+
+ This program is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 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. */
+
+#include "dis-asm.h"
+#include "sysdep.h"
+#include "opcode/cr16.h"
+#include "libiberty.h"
+
+/* String to print when opcode was not matched. */
+#define ILLEGAL "illegal"
+ /* Escape to 16-bit immediate. */
+#define ESCAPE_16_BIT 0xB
+
+/* Extract 'n_bits' from 'a' starting from offset 'offs'. */
+#define EXTRACT(a, offs, n_bits) \
+ (n_bits == 32 ? (((a) >> (offs)) & 0xffffffffL) \
+ : (((a) >> (offs)) & ((1 << (n_bits)) -1)))
+
+/* Set Bit Mask - a mask to set all bits starting from offset 'offs'. */
+#define SBM(offs) ((((1 << (32 - offs)) -1) << (offs)))
+
+typedef unsigned long dwordU;
+typedef unsigned short wordU;
+
+typedef struct
+{
+ dwordU val;
+ int nbits;
+} parameter;
+
+/* Structure to map valid 'cinv' instruction options. */
+
+typedef struct
+ {
+ /* Cinv printed string. */
+ char *istr;
+ /* Value corresponding to the string. */
+ char *ostr;
+ }
+cinv_entry;
+
+/* CR16 'cinv' options mapping. */
+const cinv_entry cr16_cinvs[] =
+{
+ {"cinv[i]", "cinv [i]"},
+ {"cinv[i,u]", "cinv [i,u]"},
+ {"cinv[d]", "cinv [d]"},
+ {"cinv[d,u]", "cinv [d,u]"},
+ {"cinv[d,i]", "cinv [d,i]"},
+ {"cinv[d,i,u]", "cinv [d,i,u]"}
+};
+
+/* Number of valid 'cinv' instruction options. */
+static int NUMCINVS = ARRAY_SIZE (cr16_cinvs);
+
+/* Enum to distinguish different registers argument types. */
+typedef enum REG_ARG_TYPE
+ {
+ /* General purpose register (r<N>). */
+ REG_ARG = 0,
+ /*Processor register */
+ P_ARG,
+ }
+REG_ARG_TYPE;
+
+/* Current opcode table entry we're disassembling. */
+const inst *instruction;
+/* Current instruction we're disassembling. */
+ins currInsn;
+/* The current instruction is read into 3 consecutive words. */
+wordU words[3];
+/* Contains all words in appropriate order. */
+ULONGLONG allWords;
+/* Holds the current processed argument number. */
+int processing_argument_number;
+/* Nonzero means a IMM4 instruction. */
+int imm4flag;
+/* Nonzero means the instruction's original size is
+ incremented (escape sequence is used). */
+int size_changed;
+
+
+/* Print the constant expression length. */
+
+static char *
+print_exp_len (int size)
+{
+ switch (size)
+ {
+ case 4:
+ case 5:
+ case 6:
+ case 8:
+ case 14:
+ case 16:
+ return ":s";
+ case 20:
+ case 24:
+ case 32:
+ return ":m";
+ case 48:
+ return ":l";
+ default:
+ return "";
+ }
+}
+
+
+/* Retrieve the number of operands for the current assembled instruction. */
+
+static int
+get_number_of_operands (void)
+{
+ int i;
+
+ for (i = 0; instruction->operands[i].op_type && i < MAX_OPERANDS; i++)
+ ;
+
+ return i;
+}
+
+/* Return the bit size for a given operand. */
+
+static int
+getbits (operand_type op)
+{
+ if (op < MAX_OPRD)
+ return cr16_optab[op].bit_size;
+
+ return 0;
+}
+
+/* Return the argument type of a given operand. */
+
+static argtype
+getargtype (operand_type op)
+{
+ if (op < MAX_OPRD)
+ return cr16_optab[op].arg_type;
+
+ return nullargs;
+}
+
+/* Given a 'CC' instruction constant operand, return its corresponding
+ string. This routine is used when disassembling the 'CC' instruction. */
+
+static char *
+getccstring (unsigned cc)
+{
+ return (char *) cr16_b_cond_tab[cc];
+}
+
+
+/* Given a 'cinv' instruction constant operand, return its corresponding
+ string. This routine is used when disassembling the 'cinv' instruction. */
+
+static char *
+getcinvstring (char *str)
+{
+ const cinv_entry *cinv;
+
+ for (cinv = cr16_cinvs; cinv < (cr16_cinvs + NUMCINVS); cinv++)
+ if (strcmp (cinv->istr, str) == 0)
+ return cinv->ostr;
+
+ return ILLEGAL;
+}
+
+/* Given the trap index in dispatch table, return its name.
+ This routine is used when disassembling the 'excp' instruction. */
+
+static char *
+gettrapstring (unsigned int index)
+{
+ const trap_entry *trap;
+
+ for (trap = cr16_traps; trap < cr16_traps + NUMTRAPS; trap++)
+ if (trap->entry == index)
+ return trap->name;
+
+ return ILLEGAL;
+}
+
+/* Given a register enum value, retrieve its name. */
+
+static char *
+getregname (reg r)
+{
+ const reg_entry *reg = cr16_regtab + r;
+
+ if (reg->type != CR16_R_REGTYPE)
+ return ILLEGAL;
+
+ return reg->name;
+}
+
+/* Given a register pair enum value, retrieve its name. */
+
+static char *
+getregpname (reg r)
+{
+ const reg_entry *reg = cr16_regptab + r;
+
+ if (reg->type != CR16_RP_REGTYPE)
+ return ILLEGAL;
+
+ return reg->name;
+}
+
+/* Given a index register pair enum value, retrieve its name. */
+
+static char *
+getidxregpname (reg r)
+{
+ const reg_entry *reg;
+
+ switch (r)
+ {
+ case 0: r = 0; break;
+ case 1: r = 2; break;
+ case 2: r = 4; break;
+ case 3: r = 6; break;
+ case 4: r = 8; break;
+ case 5: r = 10; break;
+ case 6: r = 3; break;
+ case 7: r = 5; break;
+ default:
+ break;
+ }
+
+ reg = cr16_regptab + r;
+
+ if (reg->type != CR16_RP_REGTYPE)
+ return ILLEGAL;
+
+ return reg->name;
+}
+
+/* Getting a processor register name. */
+
+static char *
+getprocregname (int index)
+{
+ const reg_entry *r;
+
+ for (r = cr16_pregtab; r < cr16_pregtab + NUMPREGS; r++)
+ if (r->image == index)
+ return r->name;
+
+ return "ILLEGAL REGISTER";
+}
+
+/* Getting a processor register name - 32 bit size. */
+
+static char *
+getprocpregname (int index)
+{
+ const reg_entry *r;
+
+ for (r = cr16_pregptab; r < cr16_pregptab + NUMPREGPS; r++)
+ if (r->image == index)
+ return r->name;
+
+ return "ILLEGAL REGISTER";
+}
+
+/* START and END are relating 'allWords' struct, which is 48 bits size.
+
+ START|--------|END
+ +---------+---------+---------+---------+
+ | | V | A | L |
+ +---------+---------+---------+---------+
+ 0 16 32 48
+ words [0] [1] [2] */
+
+static parameter
+makelongparameter (ULONGLONG val, int start, int end)
+{
+ parameter p;
+
+ p.val = (dwordU) EXTRACT (val, 48 - end, end - start);
+ p.nbits = end - start;
+ return p;
+}
+
+/* Build a mask of the instruction's 'constant' opcode,
+ based on the instruction's printing flags. */
+
+static unsigned long
+build_mask (void)
+{
+ unsigned long mask = SBM (instruction->match_bits);
+ return mask;
+}
+
+/* Search for a matching opcode. Return 1 for success, 0 for failure. */
+
+static int
+match_opcode (void)
+{
+ unsigned long mask;
+ /* The instruction 'constant' opcode doewsn't exceed 32 bits. */
+ unsigned long doubleWord = words[1] + (words[0] << 16);
+
+ /* Start searching from end of instruction table. */
+ instruction = &cr16_instruction[NUMOPCODES - 2];
+
+ /* Loop over instruction table until a full match is found. */
+ while (instruction >= cr16_instruction)
+ {
+ mask = build_mask ();
+ if ((doubleWord & mask) == BIN (instruction->match,
+ instruction->match_bits))
+ return 1;
+ else
+ instruction--;
+ }
+ return 0;
+}
+
+/* Set the proper parameter value for different type of arguments. */
+
+static void
+make_argument (argument * a, int start_bits)
+{
+ int inst_bit_size;
+ parameter p;
+
+ if ((instruction->size == 3) && a->size >= 16)
+ inst_bit_size = 48;
+ else
+ inst_bit_size = 32;
+
+ switch (a->type)
+ {
+ case arg_r:
+ p = makelongparameter (allWords, inst_bit_size - (start_bits + a->size),
+ inst_bit_size - start_bits);
+ a->r = p.val;
+ break;
+
+ case arg_rp:
+ p = makelongparameter (allWords, inst_bit_size - (start_bits + a->size),
+ inst_bit_size - start_bits);
+ a->rp = p.val;
+ break;
+
+ case arg_pr:
+ p = makelongparameter (allWords, inst_bit_size - (start_bits + a->size),
+ inst_bit_size - start_bits);
+ a->pr = p.val;
+ break;
+
+ case arg_prp:
+ p = makelongparameter (allWords, inst_bit_size - (start_bits + a->size),
+ inst_bit_size - start_bits);
+ a->prp = p.val;
+ break;
+
+ case arg_ic:
+ p = makelongparameter (allWords, inst_bit_size - (start_bits + a->size),
+ inst_bit_size - start_bits);
+ a->constant = p.val;
+ break;
+
+ case arg_cc:
+ p = makelongparameter (allWords, inst_bit_size - (start_bits + a->size),
+ inst_bit_size - start_bits);
+
+ a->cc = p.val;
+ break;
+
+ case arg_idxr:
+ if ((IS_INSN_MNEMONIC ("cbitb"))
+ || (IS_INSN_MNEMONIC ("sbitb"))
+ || (IS_INSN_MNEMONIC ("tbitb")))
+ p = makelongparameter (allWords, 8, 9);
+ else
+ p = makelongparameter (allWords, 9, 10);
+ a->i_r = p.val;
+ p = makelongparameter (allWords, inst_bit_size - a->size, inst_bit_size);
+ a->constant = p.val;
+ break;
+
+ case arg_idxrp:
+ p = makelongparameter (allWords, start_bits + 12, start_bits + 13);
+ a->i_r = p.val;
+ p = makelongparameter (allWords, start_bits + 13, start_bits + 16);
+ a->rp = p.val;
+ if (inst_bit_size > 32)
+ {
+ p = makelongparameter (allWords, inst_bit_size - start_bits - 12,
+ inst_bit_size);
+ a->constant = ((p.val & 0xffff) | (p.val >> 8 & 0xf0000));
+ }
+ else if (instruction->size == 2)
+ {
+ p = makelongparameter (allWords, inst_bit_size - 22, inst_bit_size);
+ a->constant = (p.val & 0xf) | (((p.val >>20) & 0x3) << 4)
+ | ((p.val >>14 & 0x3) << 6) | (((p.val >>7) & 0x1f) <<7);
+ }
+ else if (instruction->size == 1 && a->size == 0)
+ a->constant = 0;
+
+ break;
+
+ case arg_rbase:
+ p = makelongparameter (allWords, inst_bit_size, inst_bit_size);
+ a->constant = p.val;
+ p = makelongparameter (allWords, inst_bit_size - (start_bits + 4),
+ inst_bit_size - start_bits);
+ a->r = p.val;
+ break;
+
+ case arg_cr:
+ p = makelongparameter (allWords, start_bits + 12, start_bits + 16);
+ a->r = p.val;
+ p = makelongparameter (allWords, inst_bit_size - 16, inst_bit_size);
+ a->constant = p.val;
+ break;
+
+ case arg_crp:
+ if (instruction->size == 1)
+ p = makelongparameter (allWords, 12, 16);
+ else
+ p = makelongparameter (allWords, start_bits + 12, start_bits + 16);
+ a->rp = p.val;
+
+ if (inst_bit_size > 32)
+ {
+ p = makelongparameter (allWords, inst_bit_size - start_bits - 12,
+ inst_bit_size);
+ a->constant = ((p.val & 0xffff) | (p.val >> 8 & 0xf0000));
+ }
+ else if (instruction->size == 2)
+ {
+ p = makelongparameter (allWords, inst_bit_size - 16, inst_bit_size);
+ a->constant = p.val;
+ }
+ else if (instruction->size == 1 && a->size != 0)
+ {
+ p = makelongparameter (allWords, 4, 8);
+ if (IS_INSN_MNEMONIC ("loadw")
+ || IS_INSN_MNEMONIC ("loadd")
+ || IS_INSN_MNEMONIC ("storw")
+ || IS_INSN_MNEMONIC ("stord"))
+ a->constant = (p.val * 2);
+ else
+ a->constant = p.val;
+ }
+ else /* below case for 0x0(reg pair) */
+ a->constant = 0;
+
+ break;
+
+ case arg_c:
+
+ if ((IS_INSN_TYPE (BRANCH_INS))
+ || (IS_INSN_MNEMONIC ("bal"))
+ || (IS_INSN_TYPE (CSTBIT_INS))
+ || (IS_INSN_TYPE (LD_STOR_INS)))
+ {
+ switch (a->size)
+ {
+ case 8 :
+ p = makelongparameter (allWords, 0, start_bits);
+ a->constant = ((((p.val&0xf00)>>4)) | (p.val&0xf));
+ break;
+
+ case 24:
+ if (instruction->size == 3)
+ {
+ p = makelongparameter (allWords, 16, inst_bit_size);
+ a->constant = ((((p.val>>16)&0xf) << 20)
+ | (((p.val>>24)&0xf) << 16)
+ | (p.val & 0xffff));
+ }
+ else if (instruction->size == 2)
+ {
+ p = makelongparameter (allWords, 8, inst_bit_size);
+ a->constant = p.val;
+ }
+ break;
+
+ default:
+ p = makelongparameter (allWords, inst_bit_size - (start_bits +
+ a->size), inst_bit_size - start_bits);
+ a->constant = p.val;
+ break;
+ }
+ }
+ else
+ {
+ p = makelongparameter (allWords, inst_bit_size -
+ (start_bits + a->size),
+ inst_bit_size - start_bits);
+ a->constant = p.val;
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* Print a single argument. */
+
+static void
+print_arg (argument *a, bfd_vma memaddr, struct disassemble_info *info)
+{
+ LONGLONG longdisp, mask;
+ int sign_flag = 0;
+ int relative = 0;
+ bfd_vma number;
+ PTR stream = info->stream;
+ fprintf_ftype func = info->fprintf_func;
+
+ switch (a->type)
+ {
+ case arg_r:
+ func (stream, "%s", getregname (a->r));
+ break;
+
+ case arg_rp:
+ func (stream, "%s", getregpname (a->rp));
+ break;
+
+ case arg_pr:
+ func (stream, "%s", getprocregname (a->pr));
+ break;
+
+ case arg_prp:
+ func (stream, "%s", getprocpregname (a->prp));
+ break;
+
+ case arg_cc:
+ func (stream, "%s", getccstring (a->cc));
+ func (stream, "%s", "\t");
+ break;
+
+ case arg_ic:
+ if (IS_INSN_MNEMONIC ("excp"))
+ {
+ func (stream, "%s", gettrapstring (a->constant));
+ break;
+ }
+ else if ((IS_INSN_TYPE (ARITH_INS) || IS_INSN_TYPE (ARITH_BYTE_INS))
+ && ((instruction->size == 1) && (a->constant == 9)))
+ func (stream, "$%d", -1);
+ else if (INST_HAS_REG_LIST)
+ func (stream, "$0x%lx", a->constant +1);
+ else if (IS_INSN_TYPE (SHIFT_INS))
+ {
+ longdisp = a->constant;
+ mask = ((LONGLONG)1 << a->size) - 1;
+ if (longdisp & ((LONGLONG)1 << (a->size -1)))
+ {
+ sign_flag = 1;
+ longdisp = ~(longdisp) + 1;
+ }
+ a->constant = (unsigned long int) (longdisp & mask);
+ func (stream, "$%d", ((int)(sign_flag ? -a->constant :
+ a->constant)));
+ }
+ else
+ func (stream, "$0x%lx", a->constant);
+ switch (a->size)
+ {
+ case 4 : case 5 : case 6 : case 8 :
+ func (stream, "%s", ":s"); break;
+ case 16 : case 20 : func (stream, "%s", ":m"); break;
+ case 24 : case 32 : func (stream, "%s", ":l"); break;
+ default: break;
+ }
+ break;
+
+ case arg_idxr:
+ if (a->i_r == 0) func (stream, "[r12]");
+ if (a->i_r == 1) func (stream, "[r13]");
+ func (stream, "0x%lx", a->constant);
+ func (stream, "%s", print_exp_len (instruction->size * 16));
+ break;
+
+ case arg_idxrp:
+ if (a->i_r == 0) func (stream, "[r12]");
+ if (a->i_r == 1) func (stream, "[r13]");
+ func (stream, "0x%lx", a->constant);
+ func (stream, "%s", print_exp_len (instruction->size * 16));
+ func (stream, "%s", getidxregpname (a->rp));
+ break;
+
+ case arg_rbase:
+ func (stream, "(%s)", getregname (a->r));
+ break;
+
+ case arg_cr:
+ func (stream, "0x%lx", a->constant);
+ func (stream, "%s", print_exp_len (instruction->size * 16));
+ func (stream, "(%s)", getregname (a->r));
+ break;
+
+ case arg_crp:
+ func (stream, "0x%lx", a->constant);
+ func (stream, "%s", print_exp_len (instruction->size * 16));
+ func (stream, "%s", getregpname (a->rp));
+ break;
+
+ case arg_c:
+ /*Removed the *2 part as because implicit zeros are no more required.
+ Have to fix this as this needs a bit of extension in terms of branch
+ instructions. */
+ if (IS_INSN_TYPE (BRANCH_INS) || IS_INSN_MNEMONIC ("bal"))
+ {
+ relative = 1;
+ longdisp = a->constant;
+ /* REVISIT: To sync with WinIDEA and CR16 4.1tools, the below
+ line commented */
+ /* longdisp <<= 1; */
+ mask = ((LONGLONG)1 << a->size) - 1;
+ switch (a->size)
+ {
+ case 8 :
+ {
+ longdisp <<= 1;
+ if (longdisp & ((LONGLONG)1 << a->size))
+ {
+ sign_flag = 1;
+ longdisp = ~(longdisp) + 1;
+ }
+ break;
+ }
+ case 16 :
+ case 24 :
+ {
+ if (longdisp & 1)
+ {
+ sign_flag = 1;
+ longdisp = ~(longdisp) + 1;
+ }
+ break;
+ }
+ default:
+ func (stream, "Wrong offset used in branch/bal instruction");
+ break;
+ }
+ a->constant = (unsigned long int) (longdisp & mask);
+ }
+ /* For branch Neq instruction it is 2*offset + 2. */
+ else if (IS_INSN_TYPE (BRANCH_NEQ_INS))
+ a->constant = 2 * a->constant + 2;
+
+ if ((!IS_INSN_TYPE (CSTBIT_INS)) && (!IS_INSN_TYPE (LD_STOR_INS)))
+ (sign_flag) ? func (stream, "%s", "*-"): func (stream, "%s","*+");
+
+ func (stream, "%s", "0x");
+ number = ((relative ? memaddr : 0) +
+ (sign_flag ? ((- a->constant) & 0xffffffe) : a->constant));
+
+ (*info->print_address_func) ((number & ((1 << 24) - 1)), info);
+
+ func (stream, "%s", print_exp_len (instruction->size * 16));
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* Print all the arguments of CURRINSN instruction. */
+
+static void
+print_arguments (ins *currInsn, bfd_vma memaddr, struct disassemble_info *info)
+{
+ int i;
+
+ /* For "pop/push/popret RA instruction only. */
+ if ((IS_INSN_MNEMONIC ("pop")
+ || (IS_INSN_MNEMONIC ("popret")
+ || (IS_INSN_MNEMONIC ("push"))))
+ && currInsn->nargs == 1)
+ {
+ info->fprintf_func (info->stream, "RA");
+ return;
+ }
+
+ for (i = 0; i < currInsn->nargs; i++)
+ {
+ processing_argument_number = i;
+
+ /* For "bal (ra), disp17" instruction only. */
+ if ((IS_INSN_MNEMONIC ("bal")) && (i == 0) && instruction->size == 2)
+ {
+ info->fprintf_func (info->stream, "(ra),");
+ continue;
+ }
+
+ if ((INST_HAS_REG_LIST) && (i == 2))
+ info->fprintf_func (info->stream, "RA");
+ else
+ print_arg (&currInsn->arg[i], memaddr, info);
+
+ if ((i != currInsn->nargs - 1) && (!IS_INSN_MNEMONIC ("b")))
+ info->fprintf_func (info->stream, ",");
+ }
+}
+
+/* Build the instruction's arguments. */
+
+static void
+make_instruction (void)
+{
+ int i;
+ unsigned int shift;
+
+ for (i = 0; i < currInsn.nargs; i++)
+ {
+ argument a;
+
+ memset (&a, 0, sizeof (a));
+ a.type = getargtype (instruction->operands[i].op_type);
+ a.size = getbits (instruction->operands[i].op_type);
+ shift = instruction->operands[i].shift;
+
+ make_argument (&a, shift);
+ currInsn.arg[i] = a;
+ }
+
+ /* Calculate instruction size (in bytes). */
+ currInsn.size = instruction->size + (size_changed ? 1 : 0);
+ /* Now in bits. */
+ currInsn.size *= 2;
+}
+
+/* Retrieve a single word from a given memory address. */
+
+static wordU
+get_word_at_PC (bfd_vma memaddr, struct disassemble_info *info)
+{
+ bfd_byte buffer[4];
+ int status;
+ wordU insn = 0;
+
+ status = info->read_memory_func (memaddr, buffer, 2, info);
+
+ if (status == 0)
+ insn = (wordU) bfd_getl16 (buffer);
+
+ return insn;
+}
+
+/* Retrieve multiple words (3) from a given memory address. */
+
+static void
+get_words_at_PC (bfd_vma memaddr, struct disassemble_info *info)
+{
+ int i;
+ bfd_vma mem;
+
+ for (i = 0, mem = memaddr; i < 3; i++, mem += 2)
+ words[i] = get_word_at_PC (mem, info);
+
+ allWords =
+ ((ULONGLONG) words[0] << 32) + ((unsigned long) words[1] << 16) + words[2];
+}
+
+/* Prints the instruction by calling print_arguments after proper matching. */
+
+int
+print_insn_cr16 (bfd_vma memaddr, struct disassemble_info *info)
+{
+ int is_decoded; /* Nonzero means instruction has a match. */
+
+ /* Initialize global variables. */
+ imm4flag = 0;
+ size_changed = 0;
+
+ /* Retrieve the encoding from current memory location. */
+ get_words_at_PC (memaddr, info);
+ /* Find a matching opcode in table. */
+ is_decoded = match_opcode ();
+ /* If found, print the instruction's mnemonic and arguments. */
+ if (is_decoded > 0 && (words[0] << 16 || words[1]) != 0)
+ {
+ if (strneq (instruction->mnemonic, "cinv", 4))
+ info->fprintf_func (info->stream,"%s", getcinvstring ((char *)instruction->mnemonic));
+ else
+ info->fprintf_func (info->stream, "%s", instruction->mnemonic);
+
+ if (((currInsn.nargs = get_number_of_operands ()) != 0)
+ && ! (IS_INSN_MNEMONIC ("b")))
+ info->fprintf_func (info->stream, "\t");
+ make_instruction ();
+ /* For push/pop/pushrtn with RA instructions. */
+ if ((INST_HAS_REG_LIST) && ((words[0] >> 7) & 0x1))
+ currInsn.nargs +=1;
+ print_arguments (&currInsn, memaddr, info);
+ return currInsn.size;
+ }
+
+ /* No match found. */
+ info->fprintf_func (info->stream,"%s ",ILLEGAL);
+ return 2;
+}
diff --git a/opcodes/cr16-opc.c b/opcodes/cr16-opc.c
new file mode 100644
index 000000000000..8b8bf2f421ed
--- /dev/null
+++ b/opcodes/cr16-opc.c
@@ -0,0 +1,611 @@
+/* cr16-opc.c -- Table of opcodes for the CR16 processor.
+ Copyright 2007 Free Software Foundation, Inc.
+ Contributed by M R Swami Reddy (MR.Swami.Reddy@nsc.com)
+
+ This file is part of GAS, GDB and the GNU binutils.
+
+ GAS, GDB, and GNU binutils is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2, or (at your
+ option) any later version.
+
+ GAS, GDB, and GNU binutils are distributed in the hope that they will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public 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 "symcat.h"
+#include "opcode/cr16.h"
+
+const inst cr16_instruction[] =
+{
+/* Create an arithmetic instruction - INST[bw]. */
+#define ARITH_BYTE_INST(NAME, OPC, OP1) \
+ /* opc8 imm4 r */ \
+ {NAME, 1, OPC, 24, ARITH_BYTE_INS, {{uimm4_1,20}, {regr,16}}}, \
+ /* opc8 imm16 r */ \
+ {NAME, 2, (OPC<<4)+0xB, 20, ARITH_BYTE_INS, {{OP1,0}, {regr,16}}}, \
+ /* opc8 r r */ \
+ {NAME, 1, OPC+0x1, 24, ARITH_BYTE_INS, {{regr,20}, {regr,16}}}
+
+/* for Logincal operations, allow unsinged imm16 also */
+#define ARITH1_BYTE_INST(NAME, OPC, OP1) \
+ /* opc8 imm16 r */ \
+ {NAME, 2, (OPC<<4)+0xB, 20, ARITH_BYTE_INS, {{OP1,0}, {regr,16}}}
+
+
+ ARITH_BYTE_INST ("andb", 0x20, uimm16),
+ ARITH1_BYTE_INST ("andb", 0x20, imm16),
+ ARITH_BYTE_INST ("andw", 0x22, uimm16),
+ ARITH1_BYTE_INST ("andw", 0x22, imm16),
+
+ ARITH_BYTE_INST ("orb", 0x24, uimm16),
+ ARITH1_BYTE_INST ("orb", 0x24, imm16),
+ ARITH_BYTE_INST ("orw", 0x26, uimm16),
+ ARITH1_BYTE_INST ("orw", 0x26, imm16),
+
+ ARITH_BYTE_INST ("xorb", 0x28, uimm16),
+ ARITH1_BYTE_INST ("xorb", 0x28, imm16),
+ ARITH_BYTE_INST ("xorw", 0x2A, uimm16),
+ ARITH1_BYTE_INST ("xorw", 0x2A, imm16),
+
+ ARITH_BYTE_INST ("addub", 0x2C, imm16),
+ ARITH_BYTE_INST ("adduw", 0x2E, imm16),
+ ARITH_BYTE_INST ("addb", 0x30, imm16),
+ ARITH_BYTE_INST ("addw", 0x32, imm16),
+ ARITH_BYTE_INST ("addcb", 0x34, imm16),
+ ARITH_BYTE_INST ("addcw", 0x36, imm16),
+
+ ARITH_BYTE_INST ("subb", 0x38, imm16),
+ ARITH_BYTE_INST ("subw", 0x3A, imm16),
+ ARITH_BYTE_INST ("subcb", 0x3C, imm16),
+ ARITH_BYTE_INST ("subcw", 0x3E, imm16),
+
+ ARITH_BYTE_INST ("cmpb", 0x50, imm16),
+ ARITH_BYTE_INST ("cmpw", 0x52, imm16),
+
+ ARITH_BYTE_INST ("movb", 0x58, imm16),
+ ARITH_BYTE_INST ("movw", 0x5A, imm16),
+
+ ARITH_BYTE_INST ("mulb", 0x64, imm16),
+ ARITH_BYTE_INST ("mulw", 0x66, imm16),
+
+#define ARITH_BYTE_INST1(NAME, OPC) \
+ /* opc8 r r */ \
+ {NAME, 1, OPC, 24, ARITH_BYTE_INS, {{regr,20}, {regr,16}}}
+
+ ARITH_BYTE_INST1 ("movxb", 0x5C),
+ ARITH_BYTE_INST1 ("movzb", 0x5D),
+ ARITH_BYTE_INST1 ("mulsb", 0x0B),
+
+#define ARITH_BYTE_INST2(NAME, OPC) \
+ /* opc8 r rp */ \
+ {NAME, 1, OPC, 24, ARITH_BYTE_INS, {{regr,20}, {regp,16}}}
+
+ ARITH_BYTE_INST2 ("movxw", 0x5E),
+ ARITH_BYTE_INST2 ("movzw", 0x5F),
+ ARITH_BYTE_INST2 ("mulsw", 0x62),
+ ARITH_BYTE_INST2 ("muluw", 0x63),
+
+/* Create an arithmetic instruction - INST[d]- with 3 types. */
+#define ARITH_INST_D(NAME, OPC) \
+ /* opc8 imm4 rp */ \
+ {NAME, 1, OPC, 24, ARITH_INS, {{uimm4_1,20}, {regp,16}}}, \
+ /* opc8 imm16 rp */ \
+ {NAME, 2, (OPC<<4)+0xB, 20, ARITH_INS, {{imm16,0}, {regp,16}}}, \
+ /* opc8 rp rp */ \
+ {NAME, 1, OPC+1, 24, ARITH_INS, {{regp,20}, {regp,16}}}
+
+/* Create an arithmetic instruction - INST[d]-20 bit types. */
+#define ARITH_INST20(NAME, OPC) \
+ /* opc8 uimm20 rp */ \
+ {NAME, 2, OPC, 24, ARITH_INS, {{uimm20,0}, {regp,20}}}
+
+/* Create an arithmetic instruction - INST[d]-32 bit types. */
+#define ARITH_INST32(NAME, OPC, OP1) \
+ /* opc12 imm32 rp */ \
+ {NAME, 3, OPC, 20, ARITH_INS, {{OP1,0}, {regp,16}}}
+
+/* Create an arithmetic instruction - INST[d]-32bit types(reg pairs).*/
+#define ARITH_INST32RP(NAME, OPC) \
+ /* opc24 rp rp */ \
+ {NAME, 2, OPC, 12, ARITH_INS, {{regp,4}, {regp,0}}}
+
+ ARITH_INST_D ("movd", 0x54),
+ ARITH_INST20 ("movd", 0x05),
+ ARITH_INST32 ("movd", 0x007, imm32),
+ ARITH_INST_D ("addd", 0x60),
+ ARITH_INST20 ("addd", 0x04),
+ ARITH_INST32 ("addd", 0x002, imm32),
+ ARITH_INST32 ("subd", 0x003, imm32),
+ ARITH_INST32RP ("subd", 0x0014C),
+ ARITH_INST_D ("cmpd", 0x56),
+ ARITH_INST32 ("cmpd", 0x009, imm32),
+ ARITH_INST32 ("andd", 0x004, uimm32),
+ ARITH_INST32RP ("andd", 0x0014B),
+ ARITH_INST32 ("ord", 0x005, uimm32),
+ ARITH_INST32RP ("ord", 0x00149),
+ ARITH_INST32 ("xord", 0x006, uimm32),
+ ARITH_INST32RP ("xord", 0x0014A),
+
+/* Create a shift instruction. */
+#define SHIFT_INST_A(NAME, OPC1, OPC2, SHIFT, OP1, OP2) \
+ /* opc imm r */ \
+ {NAME, 1, OPC1, SHIFT, SHIFT_INS, {{OP1,20}, {OP2,16}}}, \
+ /* opc imm r */ \
+ {NAME, 1, OPC1+1, SHIFT, SHIFT_INS, {{OP1,20}, {OP2,16}}},\
+ /* opc r r */ \
+ {NAME, 1, OPC2, 24, SHIFT_INS, {{regr,20}, {OP2,16}}}
+
+ SHIFT_INST_A("ashub", 0x80, 0x41, 23, imm4, regr),
+ SHIFT_INST_A("ashud", 0x26, 0x48, 25, imm6, regp),
+ SHIFT_INST_A("ashuw", 0x42, 0x45, 24, imm5, regr),
+
+#define SHIFT_INST_L(NAME, OPC1, OPC2, SHIFT, OP1, OP2) \
+ /* opc imm r */ \
+ {NAME, 1, OPC1, SHIFT, SHIFT_INS, {{OP1,20}, {OP2,16}}}, \
+ /* opc r r */ \
+ {NAME, 1, OPC2, 24, SHIFT_INS, {{regr,20}, {OP2,16}}}
+
+ SHIFT_INST_L("lshb", 0x13, 0x44, 23, imm4, regr),
+ SHIFT_INST_L("lshd", 0x25, 0x47, 25, imm6, regp),
+ SHIFT_INST_L("lshw", 0x49, 0x46, 24, imm5, regr),
+
+/* Create a conditional branch instruction. */
+#define BRANCH_INST(NAME, OPC) \
+ /* opc4 c4 dispe9 */ \
+ {NAME, 1, OPC, 28, BRANCH_INS, {{cc,20}, {dispe9,16}}}, \
+ /* opc4 c4 disps17 */ \
+ {NAME, 2, ((OPC<<4)+0x8), 24, BRANCH_INS, {{cc,20}, {disps17,0}}}, \
+ /* opc4 c4 disps25 */ \
+ {NAME, 3, (OPC<<4), 16 , BRANCH_INS, {{cc,4}, {disps25,16}}}
+
+ BRANCH_INST ("b", 0x1),
+
+/* Create a 'Branch if Equal to 0' instruction. */
+#define BRANCH_NEQ_INST(NAME, OPC) \
+ /* opc8 disps5 r */ \
+ {NAME, 1, OPC, 24, BRANCH_NEQ_INS, {{regr,16}, {disps5,20}}}
+
+ BRANCH_NEQ_INST ("beq0b", 0x0C),
+ BRANCH_NEQ_INST ("bne0b", 0x0D),
+ BRANCH_NEQ_INST ("beq0w", 0x0E),
+ BRANCH_NEQ_INST ("bne0w", 0x0F),
+
+
+/* Create an instruction using a single register operand. */
+#define REG1_INST(NAME, OPC) \
+ /* opc8 c4 r */ \
+ {NAME, 1, OPC, 20, NO_TYPE_INS, {{regr,16}}}
+
+#define REGP1_INST(NAME, OPC) \
+ /* opc8 c4 r */ \
+ {NAME, 1, OPC, 20, NO_TYPE_INS, {{regp,16}}}
+
+/* Same as REG1_INST, with additional FLAGS. */
+#define REG1_FLAG_INST(NAME, OPC, FLAGS) \
+ /* opc8 c4 r */ \
+ {NAME, 1, OPC, 20, NO_TYPE_INS | FLAGS, {{regp,16}}}
+
+ /* JCond instructions */
+ REGP1_INST ("jeq", 0x0A0),
+ REGP1_INST ("jne", 0x0A1),
+ REGP1_INST ("jcs", 0x0A2),
+ REGP1_INST ("jcc", 0x0A3),
+ REGP1_INST ("jhi", 0x0A4),
+ REGP1_INST ("jls", 0x0A5),
+ REGP1_INST ("jgt", 0x0A6),
+ REGP1_INST ("jle", 0x0A7),
+ REGP1_INST ("jfs", 0x0A8),
+ REGP1_INST ("jfc", 0x0A9),
+ REGP1_INST ("jlo", 0x0AA),
+ REGP1_INST ("jhs", 0x0AB),
+ REGP1_INST ("jlt", 0x0AC),
+ REGP1_INST ("jge", 0x0AD),
+ REGP1_INST ("jump", 0x0AE),
+ REGP1_INST ("jusr", 0x0AF),
+
+ /* SCond instructions */
+ REG1_INST ("seq", 0x080),
+ REG1_INST ("sne", 0x081),
+ REG1_INST ("scs", 0x082),
+ REG1_INST ("scc", 0x083),
+ REG1_INST ("shi", 0x084),
+ REG1_INST ("sls", 0x085),
+ REG1_INST ("sgt", 0x086),
+ REG1_INST ("sle", 0x087),
+ REG1_INST ("sfs", 0x088),
+ REG1_INST ("sfc", 0x089),
+ REG1_INST ("slo", 0x08A),
+ REG1_INST ("shs", 0x08B),
+ REG1_INST ("slt", 0x08C),
+ REG1_INST ("sge", 0x08D),
+
+
+/* Create an instruction using two register operands. */
+#define REG3_INST(NAME, OPC) \
+ /* opc24 r r rp */ \
+ {NAME, 2, OPC, 12, NO_TYPE_INS, {{regr,4}, {regr,0}, {regp,8}}}
+
+ /* MULTIPLY INSTRUCTIONS */
+ REG3_INST ("macqw", 0x0014d),
+ REG3_INST ("macuw", 0x0014e),
+ REG3_INST ("macsw", 0x0014f),
+
+/* Create a branch instruction. */
+#define BR_INST(NAME, OPC) \
+ /* opc12 ra disps25 */ \
+ {NAME, 2, OPC, 24, NO_TYPE_INS, {{rra,0}, {disps25,0}}}
+
+#define BR_INST_RP(NAME, OPC) \
+ /* opc8 rp disps25 */ \
+ {NAME, 3, OPC, 12, NO_TYPE_INS, {{regp,4}, {disps25,16}}}
+
+ BR_INST ("bal", 0xC0),
+ BR_INST_RP ("bal", 0x00102),
+
+#define REGPP2_INST(NAME, OPC) \
+ /* opc16 rp rp */ \
+ {NAME, 2, OPC, 12, NO_TYPE_INS, {{regp,0}, {regp,4}}}
+ /* Jump and link instructions. */
+ REGP1_INST ("jal",0x00D),
+ REGPP2_INST ("jal",0x00148),
+
+
+/* Instructions including a register list (opcode is represented as a mask). */
+#define REGLIST_INST(NAME, OPC, TYPE) \
+ /* opc7 r count3 RA */ \
+ {NAME,1, (OPC<<1)+1, 23, TYPE, {{uimm3_1,20},{regr,16},{regr,0}}}, \
+ /* opc8 r count3 */ \
+ {NAME, 1, OPC, 24, TYPE, {{uimm3_1,20}, {regr,16}}}, \
+ /* opc12 RA */ \
+ {NAME, 1, (OPC<<8)+0x1E, 16, TYPE, {{regr,0}}}
+
+ REGLIST_INST ("push", 0x01, (NO_TYPE_INS | REG_LIST)),
+ REGLIST_INST ("pop", 0x02, (NO_TYPE_INS | REG_LIST)),
+ REGLIST_INST ("popret", 0x03, (NO_TYPE_INS | REG_LIST)),
+
+ {"loadm", 1, 0x14, 19, NO_TYPE_INS | REG_LIST, {{uimm3_1,16}}},
+ {"loadmp", 1, 0x15, 19, NO_TYPE_INS | REG_LIST, {{uimm3_1,16}}},
+ {"storm", 1, 0x16, 19, NO_TYPE_INS | REG_LIST, {{uimm3_1,16}}},
+ {"stormp", 1, 0x17, 19, NO_TYPE_INS | REG_LIST, {{uimm3_1,16}}},
+
+ /* Processor Regsiter Manipulation instructions */
+ /* opc16 reg, preg */
+ {"lpr", 2, 0x00140, 12, NO_TYPE_INS, {{regr,0}, {pregr,4}}},
+ /* opc16 regp, pregp */
+ {"lprd", 2, 0x00141, 12, NO_TYPE_INS, {{regp,0}, {pregrp,4}}},
+ /* opc16 preg, reg */
+ {"spr", 2, 0x00142, 12, NO_TYPE_INS, {{pregr,4}, {regr,0}}},
+ /* opc16 pregp, regp */
+ {"sprd", 2, 0x00143, 12, NO_TYPE_INS, {{pregrp,4}, {regp,0}}},
+
+ /* Miscellaneous. */
+ /* opc12 ui4 */
+ {"excp", 1, 0x00C, 20, NO_TYPE_INS, {{uimm4,16}}},
+
+/* Create a bit-b instruction. */
+#define CSTBIT_INST_B(NAME, OP, OPC1, OPC2, OPC3, OPC4) \
+ /* opcNN iN abs20 */ \
+ {NAME, 2, (OPC3+1), 23, CSTBIT_INS, {{OP,20},{abs20,0}}}, \
+ /* opcNN iN abs24 */ \
+ {NAME, 3, (OPC2+3), 12, CSTBIT_INS, {{OP,4},{abs24,16}}}, \
+ /* opcNN iN (Rindex)abs20 */ \
+ {NAME, 2, OPC1, 24, CSTBIT_INS, {{OP,20}, {rindex7_abs20,0}}}, \
+ /* opcNN iN (prp) disps14(RPbase) */ \
+ {NAME, 2, OPC4, 22, CSTBIT_INS, {{OP,4},{rpindex_disps14,0}}}, \
+ /* opcNN iN disps20(Rbase) */ \
+ {NAME, 3, OPC2, 12, CSTBIT_INS, {{OP,4}, {rbase_disps20,16}}}, \
+ /* opcNN iN (rp) disps0(RPbase) */ \
+ {NAME, 1, OPC3-2, 23, CSTBIT_INS, {{OP,20}, {rpbase_disps0,16}}}, \
+ /* opcNN iN (rp) disps16(RPBase) */ \
+ {NAME, 2, OPC3, 23, CSTBIT_INS, {{OP,20}, {rpbase_disps16,0}}}, \
+ /* opcNN iN (rp) disps20(RPBase) */ \
+ {NAME, 3, (OPC2+1), 12, CSTBIT_INS, {{OP,4}, {rpbase_disps20,16}}}, \
+ /* opcNN iN rrp (Rindex)disps20(RPbase) */ \
+ {NAME, 3, (OPC2+2), 12, CSTBIT_INS, {{OP,4}, {rpindex_disps20,16}}}
+
+ CSTBIT_INST_B ("cbitb", uimm3, 0x68, 0x00104, 0xD6, 0x1AA),
+ CSTBIT_INST_B ("sbitb", uimm3, 0x70, 0x00108, 0xE6, 0x1CA),
+ CSTBIT_INST_B ("tbitb", uimm3, 0x78, 0x0010C, 0xF6, 0x1EA),
+
+/* Create a bit-w instruction. */
+#define CSTBIT_INST_W(NAME, OP, OPC1, OPC2, OPC3, OPC4) \
+ /* opcNN iN abs20 */ \
+ {NAME, 2, OPC1+6, 24, CSTBIT_INS, {{OP,20},{abs20,0}}}, \
+ /* opcNN iN abs24 */ \
+ {NAME, 3, OPC2+3, 12, CSTBIT_INS, {{OP,4},{abs24,16}}}, \
+ /* opcNN iN (Rindex)abs20 */ \
+ {NAME, 2, OPC3, 25, CSTBIT_INS, {{OP,20}, {rindex8_abs20,0}}}, \
+ /* opcNN iN (prp) disps14(RPbase) */ \
+ {NAME, 2, OPC4, 22, CSTBIT_INS, {{OP,4},{rpindex_disps14,0}}}, \
+ /* opcNN iN disps20(Rbase) */ \
+ {NAME, 3, OPC2, 12, CSTBIT_INS, {{OP,4}, {rbase_disps20,16}}}, \
+ /* opcNN iN (rp) disps0(RPbase) */ \
+ {NAME, 1, OPC1+5, 24, CSTBIT_INS, {{OP,20}, {rpbase_disps0,16}}}, \
+ /* opcNN iN (rp) disps16(RPBase) */ \
+ {NAME, 2, OPC1, 24, CSTBIT_INS, {{OP,20}, {rpbase_disps16,0}}}, \
+ /* opcNN iN (rp) disps20(RPBase) */ \
+ {NAME, 3, OPC2+1, 12, CSTBIT_INS, {{OP,4}, {rpbase_disps20,16}}}, \
+ /* opcNN iN rrp (Rindex)disps20(RPbase) */ \
+ {NAME, 3, OPC2+2, 12, CSTBIT_INS, {{OP,4}, {rpindex_disps20,16}}}
+
+ CSTBIT_INST_W ("cbitw", uimm4, 0x69, 0x00114, 0x36, 0x1AB),
+ CSTBIT_INST_W ("sbitw", uimm4, 0x71, 0x00118, 0x3A, 0x1CB),
+ CSTBIT_INST_W ("tbitw", uimm4, 0x79, 0x0011C, 0x3E, 0x1EB),
+
+ /* tbit cnt */
+ {"tbit", 1, 0x06, 24, CSTBIT_INS, {{uimm4,20}, {regr,16}}},
+ /* tbit reg reg */
+ {"tbit", 1, 0x07, 24, CSTBIT_INS, {{regr,20}, {regr,16}}},
+
+
+/* Load instructions (from memory to register). */
+#define LD_REG_INST(NAME, OPC1, OPC2, OPC3, OPC4, OPC5, OP_S, OP_D) \
+ /* opc8 reg abs20 */ \
+ {NAME, 2, OPC3, 24, LD_STOR_INS, {{abs20,0}, {OP_D,20}}}, \
+ /* opc20 reg abs24 */ \
+ {NAME, 3, OPC1+3, 12, LD_STOR_INS, {{abs24,16}, {OP_D,4}}}, \
+ /* opc7 reg rindex8_abs20 */ \
+ {NAME, 2, OPC5, 25, LD_STOR_INS, {{rindex8_abs20,0}, {OP_D,20}}}, \
+ /* opc4 reg disps4(RPbase) */ \
+ {NAME, 1, (OPC2>>4), 28, LD_STOR_INS, {{OP_S,24}, {OP_D,20}}}, \
+ /* opcNN reg disps0(RPbase) */ \
+ {NAME, 1, OPC2, 24, LD_STOR_INS, {{rpindex_disps0,0}, {OP_D,20}}}, \
+ /* opc reg disps14(RPbase) */ \
+ {NAME, 2, OPC4, 22, LD_STOR_INS, {{rpindex_disps14,0}, {OP_D,20}}}, \
+ /* opc reg -disps20(Rbase) */ \
+ {NAME, 3, OPC1+0x60, 12, LD_STOR_INS, {{rbase_dispe20,16}, {OP_D,4}}}, \
+ /* opc reg disps20(Rbase) */ \
+ {NAME, 3, OPC1, 12, LD_STOR_INS, {{rbase_disps20,16}, {OP_D,4}}}, \
+ /* opc reg (rp) disps16(RPbase) */ \
+ {NAME, 2, OPC2+1, 24, LD_STOR_INS, {{rpbase_disps16,0}, {OP_D,20}}}, \
+ /* opc16 reg (rp) disps20(RPbase) */ \
+ {NAME, 3, OPC1+1, 12, LD_STOR_INS, {{rpbase_disps20,16}, {OP_D,4}}}, \
+ /* op reg (rp) -disps20(RPbase) */ \
+ {NAME, 3, OPC1+0x61, 12, LD_STOR_INS, {{rpbase_dispe20,16}, {OP_D,4}}}, \
+ /* opc reg rrp (Rindex)disps20(RPbase) */ \
+ {NAME, 3, (OPC1+2), 12, LD_STOR_INS, {{rpindex_disps20,16}, {OP_D,4}}}
+
+ LD_REG_INST ("loadb", 0x00124, 0xBE, 0x88, 0x219, 0x45, rpbase_disps4, regr),
+ LD_REG_INST ("loadd", 0x00128, 0xAE, 0x87, 0x21A, 0x46, rpbase_dispe4, regp),
+ LD_REG_INST ("loadw", 0x0012C, 0x9E, 0x89, 0x21B, 0x47, rpbase_dispe4, regr),
+
+/* Store instructions (from reg to memory). */
+#define ST_REG_INST(NAME, OPC1, OPC2, OPC3, OPC4, OPC5, OP_D, OP_S) \
+ /* opc8 reg abs20 */ \
+ {NAME, 2, OPC3, 24, LD_STOR_INS, {{OP_S,20}, {abs20,0}}}, \
+ /* opc20 reg abs24 */ \
+ {NAME, 3, OPC1+3, 12, LD_STOR_INS, {{OP_S,4}, {abs24,16}}}, \
+ /* opc7 reg rindex8_abs20 */ \
+ {NAME, 2, OPC5, 25, LD_STOR_INS, {{OP_S,20}, {rindex8_abs20,0}}}, \
+ /* opc4 reg disps4(RPbase) */ \
+ {NAME, 1, (OPC2>>4), 28, LD_STOR_INS, {{OP_S,20}, {OP_D,24}}}, \
+ /* opcNN reg disps0(RPbase) */ \
+ {NAME, 1, OPC2, 24, LD_STOR_INS, {{OP_S,20}, {rpindex_disps0,0}}}, \
+ /* opc reg disps14(RPbase) */ \
+ {NAME, 2, OPC4, 22, LD_STOR_INS, {{OP_S,20}, {rpindex_disps14,0}}}, \
+ /* opc reg -disps20(Rbase) */ \
+ {NAME, 3, OPC1+0x60, 12, LD_STOR_INS, {{OP_S,4}, {rbase_dispe20,16}}}, \
+ /* opc reg disps20(Rbase) */ \
+ {NAME, 3, OPC1, 12, LD_STOR_INS, {{OP_S,4}, {rbase_disps20,16}}}, \
+ /* opc reg disps16(RPbase) */ \
+ {NAME, 2, OPC2+1, 24, LD_STOR_INS, {{OP_S,20}, {rpbase_disps16,0}}}, \
+ /* opc16 reg disps20(RPbase) */ \
+ {NAME, 3, OPC1+1, 12, LD_STOR_INS, {{OP_S,4}, {rpbase_disps20,16}}}, \
+ /* op reg (rp) -disps20(RPbase) */ \
+ {NAME, 3, OPC1+0x61, 12, LD_STOR_INS, {{OP_S,4}, {rpbase_dispe20,16}}}, \
+ /* opc reg rrp (Rindex)disps20(RPbase) */ \
+ {NAME, 3, OPC1+2, 12, LD_STOR_INS, {{OP_S,4}, {rpindex_disps20,16}}}
+
+
+/* Store instructions (from imm to memory). */
+#define ST_IMM_INST(NAME, OPC1, OPC2, OPC3, OPC4) \
+ /* opcNN iN abs20 */ \
+ {NAME, 2, OPC1, 24, LD_STOR_INS, {{uimm4,20},{abs20,0}}}, \
+ /* opcNN iN abs24 */ \
+ {NAME, 3, OPC2+3, 12, LD_STOR_INS, {{uimm4,4},{abs24,16}}}, \
+ /* opcNN iN (Rindex)abs20 */ \
+ {NAME, 2, OPC3, 25, LD_STOR_INS, {{uimm4,20}, {rindex8_abs20,0}}}, \
+ /* opcNN iN (prp) disps14(RPbase) */ \
+ {NAME, 2, OPC4, 22, LD_STOR_INS, {{uimm4,4},{rpindex_disps14,0}}}, \
+ /* opcNN iN (rp) disps0(RPbase) */ \
+ {NAME, 1, OPC1+1, 24, LD_STOR_INS, {{uimm4,20}, {rpbase_disps0,16}}}, \
+ /* opcNN iN disps20(Rbase) */ \
+ {NAME, 3, OPC2, 12, LD_STOR_INS, {{uimm4,4}, {rbase_disps20,16}}}, \
+ /* opcNN iN (rp) disps16(RPBase) */ \
+ {NAME, 2, OPC1+2, 24, LD_STOR_INS, {{uimm4,20}, {rpbase_disps16,0}}}, \
+ /* opcNN iN (rp) disps20(RPBase) */ \
+ {NAME, 3, OPC2+1, 12, LD_STOR_INS, {{uimm4,4}, {rpbase_disps20,16}}}, \
+ /* opcNN iN rrp (Rindex)disps20(RPbase) */ \
+ {NAME, 3, OPC2+2, 12, LD_STOR_INS, {{uimm4,4}, {rpindex_disps20,16}}}
+
+ ST_REG_INST ("storb", 0x00134, 0xFE, 0xC8, 0x319, 0x65, rpbase_disps4, regr),
+ ST_IMM_INST ("storb", 0x81, 0x00120, 0x42, 0x218),
+ ST_REG_INST ("stord", 0x00138, 0xEE, 0xC7, 0x31A, 0x66, rpbase_dispe4, regp),
+ ST_REG_INST ("storw", 0x0013C, 0xDE, 0xC9, 0x31B, 0x67, rpbase_dispe4, regr),
+ ST_IMM_INST ("storw", 0xC1, 0x00130, 0x62, 0x318),
+
+/* Create instruction with no operands. */
+#define NO_OP_INST(NAME, OPC) \
+ /* opc16 */ \
+ {NAME, 1, OPC, 16, 0, {{0, 0}}}
+
+ NO_OP_INST ("cinv[i]", 0x000A),
+ NO_OP_INST ("cinv[i,u]", 0x000B),
+ NO_OP_INST ("cinv[d]", 0x000C),
+ NO_OP_INST ("cinv[d,u]", 0x000D),
+ NO_OP_INST ("cinv[d,i]", 0x000E),
+ NO_OP_INST ("cinv[d,i,u]", 0x000F),
+ NO_OP_INST ("nop", 0x2C00),
+ NO_OP_INST ("retx", 0x0003),
+ NO_OP_INST ("di", 0x0004),
+ NO_OP_INST ("ei", 0x0005),
+ NO_OP_INST ("wait", 0x0006),
+ NO_OP_INST ("eiwait", 0x0007),
+
+ {NULL, 0, 0, 0, 0, {{0, 0}}}
+};
+
+const unsigned int cr16_num_opcodes = ARRAY_SIZE (cr16_instruction);
+
+/* Macro to build a reg_entry, which have an opcode image :
+ For example :
+ REG(u4, 0x84, CR16_U_REGTYPE)
+ is interpreted as :
+ {"u4", u4, 0x84, CR16_U_REGTYPE} */
+#define REG(NAME, N, TYPE) {STRINGX(NAME), {NAME}, N, TYPE}
+
+#define REGP(NAME, BNAME, N, TYPE) {STRINGX(NAME), {BNAME}, N, TYPE}
+
+const reg_entry cr16_regtab[] =
+{ /* Build a general purpose register r<N>. */
+#define REG_R(N) REG(CONCAT2(r,N), N, CR16_R_REGTYPE)
+
+ REG_R(0), REG_R(1), REG_R(2), REG_R(3),
+ REG_R(4), REG_R(5), REG_R(6), REG_R(7),
+ REG_R(8), REG_R(9), REG_R(10), REG_R(11),
+ REG_R(12), REG_R(13), REG_R(14), REG_R(15),
+ REG(r12_L, 12, CR16_R_REGTYPE),
+ REG(r13_L, 13, CR16_R_REGTYPE),
+ REG(ra, 0xe, CR16_R_REGTYPE),
+ REG(sp, 0xf, CR16_R_REGTYPE),
+ REG(sp_L, 0xf, CR16_R_REGTYPE),
+ REG(RA, 0xe, CR16_R_REGTYPE),
+};
+
+const reg_entry cr16_regptab[] =
+{ /* Build a general purpose register r<N>. */
+
+#define REG_RP(M,N) REGP((CONCAT2(r,M),CONCAT2(r,N)), CONCAT2(r,N), N, CR16_RP_REGTYPE)
+
+ REG_RP(1,0), REG_RP(2,1), REG_RP(3,2), REG_RP(4,3),
+ REG_RP(5,4), REG_RP(6,5), REG_RP(7,6), REG_RP(8,7),
+ REG_RP(9,8), REG_RP(10,9), REG_RP(11,10), REG_RP(12,11),
+ REG((r12), 0xc, CR16_RP_REGTYPE),
+ REG((r13), 0xd, CR16_RP_REGTYPE),
+ //REG((r14), 0xe, CR16_RP_REGTYPE),
+ REG((ra), 0xe, CR16_RP_REGTYPE),
+ REG((sp), 0xf, CR16_RP_REGTYPE),
+};
+
+
+const unsigned int cr16_num_regs = ARRAY_SIZE (cr16_regtab) ;
+const unsigned int cr16_num_regps = ARRAY_SIZE (cr16_regptab) ;
+
+const reg_entry cr16_pregtab[] =
+{
+/* Build a processor register. */
+ REG(dbs, 0x0, CR16_P_REGTYPE),
+ REG(dsr, 0x1, CR16_P_REGTYPE),
+ REG(dcrl, 0x2, CR16_P_REGTYPE),
+ REG(dcrh, 0x3, CR16_P_REGTYPE),
+ REG(car0l, 0x4, CR16_P_REGTYPE),
+ REG(car0h, 0x5, CR16_P_REGTYPE),
+ REG(car1l, 0x6, CR16_P_REGTYPE),
+ REG(car1h, 0x7, CR16_P_REGTYPE),
+ REG(cfg, 0x8, CR16_P_REGTYPE),
+ REG(psr, 0x9, CR16_P_REGTYPE),
+ REG(intbasel, 0xa, CR16_P_REGTYPE),
+ REG(intbaseh, 0xb, CR16_P_REGTYPE),
+ REG(ispl, 0xc, CR16_P_REGTYPE),
+ REG(isph, 0xd, CR16_P_REGTYPE),
+ REG(uspl, 0xe, CR16_P_REGTYPE),
+ REG(usph, 0xf, CR16_P_REGTYPE),
+};
+
+const reg_entry cr16_pregptab[] =
+{
+ REG(dbs, 0, CR16_P_REGTYPE),
+ REG(dsr, 1, CR16_P_REGTYPE),
+ REG(dcr, 2, CR16_P_REGTYPE),
+ REG(car0, 4, CR16_P_REGTYPE),
+ REG(car1, 6, CR16_P_REGTYPE),
+ REG(cfg, 8, CR16_P_REGTYPE),
+ REG(psr, 9, CR16_P_REGTYPE),
+ REG(intbase, 10, CR16_P_REGTYPE),
+ REG(isp, 12, CR16_P_REGTYPE),
+ REG(usp, 14, CR16_P_REGTYPE),
+};
+
+const unsigned int cr16_num_pregs = ARRAY_SIZE (cr16_pregtab);
+const unsigned int cr16_num_pregps = ARRAY_SIZE (cr16_pregptab);
+
+const char *cr16_b_cond_tab[]=
+{
+ "eq","ne","cs","cc","hi","ls","gt","le","fs","fc",
+ "lo","hs","lt","ge","r", "???"
+};
+
+const unsigned int cr16_num_cc = ARRAY_SIZE (cr16_b_cond_tab);
+
+/* CR16 operands table. */
+const operand_entry cr16_optab[] =
+{
+ /* Index 0 is dummy, so we can count the instruction's operands. */
+ {0, nullargs, 0}, /* dummy */
+ {3, arg_ic, OP_SIGNED}, /* imm3 */
+ {4, arg_ic, OP_SIGNED}, /* imm4 */
+ {5, arg_ic, OP_SIGNED}, /* imm5 */
+ {6, arg_ic, OP_SIGNED}, /* imm6 */
+ {16, arg_ic, OP_SIGNED}, /* imm16 */
+ {20, arg_ic, OP_SIGNED}, /* imm20 */
+ {32, arg_ic, OP_SIGNED}, /* imm32 */
+ {3, arg_ic, OP_UNSIGNED}, /* uimm3 */
+ {3, arg_ic, OP_UNSIGNED|OP_DEC}, /* uimm3_1 */
+ {4, arg_ic, OP_UNSIGNED}, /* uimm4 */
+ {4, arg_ic, OP_UNSIGNED|OP_ESC}, /* uimm4_1 */
+ {5, arg_ic, OP_UNSIGNED}, /* uimm5 */
+ {16, arg_ic, OP_UNSIGNED}, /* uimm16 */
+ {20, arg_ic, OP_UNSIGNED}, /* uimm20 */
+ {32, arg_ic, OP_UNSIGNED}, /* uimm32 */
+ {5, arg_c, OP_EVEN|OP_SHIFT_DEC|OP_SIGNED}, /* disps5 */
+ {16, arg_c, OP_EVEN|OP_UNSIGNED}, /* disps17 */
+ {24, arg_c, OP_EVEN|OP_UNSIGNED}, /* disps25 */
+ {8, arg_c, OP_EVEN|OP_UNSIGNED}, /* dispe9 */
+ {20, arg_c, OP_UNSIGNED|OP_ABS20}, /* abs20 */
+ {24, arg_c, OP_UNSIGNED|OP_ABS24}, /* abs24 */
+ {4, arg_rp, 0}, /* rra */
+ {4, arg_rbase, 0}, /* rbase */
+ {20, arg_cr, OP_UNSIGNED}, /* rbase_disps20 */
+ {21, arg_cr, OP_NEG}, /* rbase_dispe20 */
+ {0, arg_crp, 0}, /* rpbase_disps0 */
+ {4, arg_crp, OP_EVEN|OP_SHIFT|OP_UNSIGNED|OP_ESC1},/* rpbase_dispe4 */
+ {4, arg_crp, OP_UNSIGNED|OP_ESC1}, /* rpbase_disps4 */
+ {16, arg_crp, OP_UNSIGNED}, /* rpbase_disps16 */
+ {20, arg_crp, OP_UNSIGNED}, /* rpbase_disps20 */
+ {21, arg_crp, OP_NEG}, /* rpbase_dispe20 */
+ {20, arg_idxr, OP_UNSIGNED}, /* rindex7_abs20 */
+ {20, arg_idxr, OP_UNSIGNED}, /* rindex8_abs20 */
+ {0, arg_idxrp, OP_UNSIGNED}, /* rpindex_disps0 */
+ {14, arg_idxrp, OP_UNSIGNED}, /* rpindex_disps14 */
+ {20, arg_idxrp, OP_UNSIGNED}, /* rpindex_disps20 */
+ {4, arg_r, 0}, /* regr */
+ {4, arg_rp, 0}, /* reg pair */
+ {4, arg_pr, 0}, /* proc reg */
+ {4, arg_prp, 0}, /* 32 bit proc reg */
+ {4, arg_cc, OP_UNSIGNED} /* cc - code */
+};
+
+
+/* CR16 traps/interrupts. */
+const trap_entry cr16_traps[] =
+{
+ {"svc", 5}, {"dvz", 6}, {"flg", 7}, {"bpt", 8}, {"trc", 9},
+ {"und", 10}, {"iad", 12}, {"dbg",14}, {"ise",15}
+};
+
+const unsigned int cr16_num_traps = ARRAY_SIZE (cr16_traps);
+
+/* CR16 instructions that don't have arguments. */
+const char * cr16_no_op_insn[] =
+{
+ "cinv[i]", "cinv[i,u]", "cinv[d]", "cinv[d,u]", "cinv[d,i]", "cinv[d,i,u]",
+ "di", "ei", "eiwait", "nop", "retx", "wait", NULL
+};
diff --git a/opcodes/cris-dis.c b/opcodes/cris-dis.c
index f6c63cb280dd..137bed7e6d5d 100644
--- a/opcodes/cris-dis.c
+++ b/opcodes/cris-dis.c
@@ -1,5 +1,5 @@
/* Disassembler code for CRIS.
- Copyright 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright 2000, 2001, 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
Contributed by Axis Communications AB, Lund, Sweden.
Written by Hans-Peter Nilsson.
@@ -783,7 +783,7 @@ print_with_operands (const struct cris_opcode *opcodep,
better way). */
if (opcodep->name[0] == 'j')
{
- if (strncmp (opcodep->name, "jsr", 3) == 0)
+ if (CONST_STRNEQ (opcodep->name, "jsr"))
/* It's "jsr" or "jsrc". */
info->insn_type = dis_jsr;
else
@@ -1360,16 +1360,16 @@ print_with_operands (const struct cris_opcode *opcodep,
itself or in a "move.d const,rN, sub.d rN,rM"-like sequence. */
if (TRACE_CASE && case_offset_counter == 0)
{
- if (strncmp (opcodep->name, "sub", 3) == 0)
+ if (CONST_STRNEQ (opcodep->name, "sub"))
case_offset = last_immediate;
/* It could also be an "add", if there are negative case-values. */
- else if (strncmp (opcodep->name, "add", 3) == 0)
+ else if (CONST_STRNEQ (opcodep->name, "add"))
/* The first case is the negated operand to the add. */
case_offset = -last_immediate;
/* A bound insn will tell us the number of cases. */
- else if (strncmp (opcodep->name, "bound", 5) == 0)
+ else if (CONST_STRNEQ (opcodep->name, "bound"))
no_of_case_offsets = last_immediate + 1;
/* A jump or jsr or branch breaks the chain of insns for a
diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c
index 3ea45830334e..df98dc2de9fa 100644
--- a/opcodes/disassemble.c
+++ b/opcodes/disassemble.c
@@ -1,6 +1,6 @@
/* Select disassembly routine for specified architecture.
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005 Free Software Foundation, Inc.
+ 2004, 2005, 2006 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -25,6 +25,7 @@
#define ARCH_arm
#define ARCH_avr
#define ARCH_bfin
+#define ARCH_cr16
#define ARCH_cris
#define ARCH_crx
#define ARCH_d10v
@@ -50,6 +51,7 @@
#define ARCH_m88k
#define ARCH_maxq
#define ARCH_mcore
+#define ARCH_mep
#define ARCH_mips
#define ARCH_mmix
#define ARCH_mn10200
@@ -64,8 +66,10 @@
#define ARCH_powerpc
#define ARCH_rs6000
#define ARCH_s390
+#define ARCH_score
#define ARCH_sh
#define ARCH_sparc
+#define ARCH_spu
#define ARCH_tic30
#define ARCH_tic4x
#define ARCH_tic54x
@@ -126,6 +130,11 @@ disassembler (abfd)
disassemble = print_insn_bfin;
break;
#endif
+#ifdef ARCH_cr16
+ case bfd_arch_cr16:
+ disassemble = print_insn_cr16;
+ break;
+#endif
#ifdef ARCH_cris
case bfd_arch_cris:
disassemble = cris_get_disassembler (abfd);
@@ -259,6 +268,11 @@ disassembler (abfd)
disassemble = print_insn_mcore;
break;
#endif
+#ifdef ARCH_mep
+ case bfd_arch_mep:
+ disassemble = print_insn_mep;
+ break;
+#endif
#ifdef ARCH_mips
case bfd_arch_mips:
if (bfd_big_endian (abfd))
@@ -326,6 +340,14 @@ disassembler (abfd)
disassemble = print_insn_s390;
break;
#endif
+#ifdef ARCH_score
+ case bfd_arch_score:
+ if (bfd_big_endian (abfd))
+ disassemble = print_insn_big_score;
+ else
+ disassemble = print_insn_little_score;
+ break;
+#endif
#ifdef ARCH_sh
case bfd_arch_sh:
disassemble = print_insn_sh;
@@ -336,6 +358,11 @@ disassembler (abfd)
disassemble = print_insn_sparc;
break;
#endif
+#ifdef ARCH_spu
+ case bfd_arch_spu:
+ disassemble = print_insn_spu;
+ break;
+#endif
#ifdef ARCH_tic30
case bfd_arch_tic30:
disassemble = print_insn_tic30;
@@ -433,6 +460,9 @@ disassembler_usage (stream)
#ifdef ARCH_powerpc
print_ppc_disassembler_options (stream);
#endif
+#ifdef ARCH_i386
+ print_i386_disassembler_options (stream);
+#endif
return;
}
@@ -461,6 +491,12 @@ disassemble_init_for_target (struct disassemble_info * info)
info->skip_zeroes = 32;
break;
#endif
+#ifdef ARCH_mep
+ case bfd_arch_mep:
+ info->skip_zeroes = 256;
+ info->skip_zeroes_at_end = 0;
+ break;
+#endif
#ifdef ARCH_m32c
case bfd_arch_m32c:
info->endian = BFD_ENDIAN_BIG;
diff --git a/opcodes/fr30-asm.c b/opcodes/fr30-asm.c
index 82381e8c400a..686ff223920c 100644
--- a/opcodes/fr30-asm.c
+++ b/opcodes/fr30-asm.c
@@ -325,6 +325,9 @@ fr30_cgen_init_asm (CGEN_CPU_DESC cd)
fr30_cgen_init_ibld_table (cd);
cd->parse_handlers = & fr30_cgen_parse_handlers[0];
cd->parse_operand = fr30_cgen_parse_operand;
+#ifdef CGEN_ASM_INIT_HOOK
+CGEN_ASM_INIT_HOOK
+#endif
}
diff --git a/opcodes/frv-asm.c b/opcodes/frv-asm.c
index 7792d9dad2d0..44114b9f6415 100644
--- a/opcodes/frv-asm.c
+++ b/opcodes/frv-asm.c
@@ -1278,6 +1278,9 @@ frv_cgen_init_asm (CGEN_CPU_DESC cd)
frv_cgen_init_ibld_table (cd);
cd->parse_handlers = & frv_cgen_parse_handlers[0];
cd->parse_operand = frv_cgen_parse_operand;
+#ifdef CGEN_ASM_INIT_HOOK
+CGEN_ASM_INIT_HOOK
+#endif
}
diff --git a/opcodes/frv-desc.c b/opcodes/frv-desc.c
index 39235a6a1645..394b0cc78e05 100644
--- a/opcodes/frv-desc.c
+++ b/opcodes/frv-desc.c
@@ -1537,20 +1537,47 @@ static CGEN_KEYWORD_ENTRY frv_cgen_opval_spr_names_entries[] =
{ "dbmr31", 2089, {0, {{{0, 0}}}}, 0, 0 },
{ "dbmr32", 2090, {0, {{{0, 0}}}}, 0, 0 },
{ "dbmr33", 2091, {0, {{{0, 0}}}}, 0, 0 },
- { "cpcfr", 2092, {0, {{{0, 0}}}}, 0, 0 },
- { "cpcr", 2093, {0, {{{0, 0}}}}, 0, 0 },
- { "cpsr", 2094, {0, {{{0, 0}}}}, 0, 0 },
- { "cpesr0", 2096, {0, {{{0, 0}}}}, 0, 0 },
- { "cpesr1", 2097, {0, {{{0, 0}}}}, 0, 0 },
- { "cpemr0", 2098, {0, {{{0, 0}}}}, 0, 0 },
- { "cpemr1", 2099, {0, {{{0, 0}}}}, 0, 0 },
- { "ihsr8", 3848, {0, {{{0, 0}}}}, 0, 0 }
+ { "cpcfr", 2304, {0, {{{0, 0}}}}, 0, 0 },
+ { "cpcr", 2305, {0, {{{0, 0}}}}, 0, 0 },
+ { "cpsr", 2306, {0, {{{0, 0}}}}, 0, 0 },
+ { "cptr", 2307, {0, {{{0, 0}}}}, 0, 0 },
+ { "cphsr0", 2308, {0, {{{0, 0}}}}, 0, 0 },
+ { "cphsr1", 2309, {0, {{{0, 0}}}}, 0, 0 },
+ { "cpesr0", 2320, {0, {{{0, 0}}}}, 0, 0 },
+ { "cpesr1", 2321, {0, {{{0, 0}}}}, 0, 0 },
+ { "cpemr0", 2322, {0, {{{0, 0}}}}, 0, 0 },
+ { "cpemr1", 2323, {0, {{{0, 0}}}}, 0, 0 },
+ { "iperr0", 2324, {0, {{{0, 0}}}}, 0, 0 },
+ { "iperr1", 2325, {0, {{{0, 0}}}}, 0, 0 },
+ { "ipjsr", 2326, {0, {{{0, 0}}}}, 0, 0 },
+ { "ipjrr", 2327, {0, {{{0, 0}}}}, 0, 0 },
+ { "ipcsr0", 2336, {0, {{{0, 0}}}}, 0, 0 },
+ { "ipcsr1", 2337, {0, {{{0, 0}}}}, 0, 0 },
+ { "ipcwer0", 2338, {0, {{{0, 0}}}}, 0, 0 },
+ { "ipcwer1", 2339, {0, {{{0, 0}}}}, 0, 0 },
+ { "ipcwr", 2340, {0, {{{0, 0}}}}, 0, 0 },
+ { "mbhsr", 2352, {0, {{{0, 0}}}}, 0, 0 },
+ { "mbssr", 2353, {0, {{{0, 0}}}}, 0, 0 },
+ { "mbrsr", 2354, {0, {{{0, 0}}}}, 0, 0 },
+ { "mbsdr", 2355, {0, {{{0, 0}}}}, 0, 0 },
+ { "mbrdr", 2356, {0, {{{0, 0}}}}, 0, 0 },
+ { "mbsmr", 2357, {0, {{{0, 0}}}}, 0, 0 },
+ { "mbstr0", 2359, {0, {{{0, 0}}}}, 0, 0 },
+ { "mbstr1", 2360, {0, {{{0, 0}}}}, 0, 0 },
+ { "slpr", 2368, {0, {{{0, 0}}}}, 0, 0 },
+ { "sldr", 2369, {0, {{{0, 0}}}}, 0, 0 },
+ { "slhsr", 2370, {0, {{{0, 0}}}}, 0, 0 },
+ { "sltr", 2371, {0, {{{0, 0}}}}, 0, 0 },
+ { "slwr", 2372, {0, {{{0, 0}}}}, 0, 0 },
+ { "ihsr8", 3848, {0, {{{0, 0}}}}, 0, 0 },
+ { "ihsr9", 3849, {0, {{{0, 0}}}}, 0, 0 },
+ { "ihsr10", 3850, {0, {{{0, 0}}}}, 0, 0 }
};
CGEN_KEYWORD frv_cgen_opval_spr_names =
{
& frv_cgen_opval_spr_names_entries[0],
- 1022,
+ 1049,
0, 0, 0, 0, ""
};
diff --git a/opcodes/frv-desc.h b/opcodes/frv-desc.h
index d94447f9fdba..96a3d99ca2f2 100644
--- a/opcodes/frv-desc.h
+++ b/opcodes/frv-desc.h
@@ -470,9 +470,16 @@ typedef enum spr_names {
, H_SPR_DBMR02 = 2078, H_SPR_DBMR03 = 2079, H_SPR_DBMR10 = 2080, H_SPR_DBMR11 = 2081
, H_SPR_DBMR12 = 2082, H_SPR_DBMR13 = 2083, H_SPR_DBMR20 = 2084, H_SPR_DBMR21 = 2085
, H_SPR_DBMR22 = 2086, H_SPR_DBMR23 = 2087, H_SPR_DBMR30 = 2088, H_SPR_DBMR31 = 2089
- , H_SPR_DBMR32 = 2090, H_SPR_DBMR33 = 2091, H_SPR_CPCFR = 2092, H_SPR_CPCR = 2093
- , H_SPR_CPSR = 2094, H_SPR_CPESR0 = 2096, H_SPR_CPESR1 = 2097, H_SPR_CPEMR0 = 2098
- , H_SPR_CPEMR1 = 2099, H_SPR_IHSR8 = 3848
+ , H_SPR_DBMR32 = 2090, H_SPR_DBMR33 = 2091, H_SPR_CPCFR = 2304, H_SPR_CPCR = 2305
+ , H_SPR_CPSR = 2306, H_SPR_CPTR = 2307, H_SPR_CPHSR0 = 2308, H_SPR_CPHSR1 = 2309
+ , H_SPR_CPESR0 = 2320, H_SPR_CPESR1 = 2321, H_SPR_CPEMR0 = 2322, H_SPR_CPEMR1 = 2323
+ , H_SPR_IPERR0 = 2324, H_SPR_IPERR1 = 2325, H_SPR_IPJSR = 2326, H_SPR_IPJRR = 2327
+ , H_SPR_IPCSR0 = 2336, H_SPR_IPCSR1 = 2337, H_SPR_IPCWER0 = 2338, H_SPR_IPCWER1 = 2339
+ , H_SPR_IPCWR = 2340, H_SPR_MBHSR = 2352, H_SPR_MBSSR = 2353, H_SPR_MBRSR = 2354
+ , H_SPR_MBSDR = 2355, H_SPR_MBRDR = 2356, H_SPR_MBSMR = 2357, H_SPR_MBSTR0 = 2359
+ , H_SPR_MBSTR1 = 2360, H_SPR_SLPR = 2368, H_SPR_SLDR = 2369, H_SPR_SLHSR = 2370
+ , H_SPR_SLTR = 2371, H_SPR_SLWR = 2372, H_SPR_IHSR8 = 3848, H_SPR_IHSR9 = 3849
+ , H_SPR_IHSR10 = 3850
} SPR_NAMES;
/* Enum declaration for . */
diff --git a/opcodes/h8300-dis.c b/opcodes/h8300-dis.c
index 769c12e37d43..d0e300656d7c 100644
--- a/opcodes/h8300-dis.c
+++ b/opcodes/h8300-dis.c
@@ -1,5 +1,5 @@
/* Disassemble h8300 instructions.
- Copyright 1993, 1994, 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1993, 1994, 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
@@ -362,7 +362,7 @@ bfd_h8_disassemble (bfd_vma addr, disassemble_info *info, int mach)
for (qi = h8_instructions; qi->opcode->name; qi++)
{
const struct h8_opcode *q = qi->opcode;
- op_type *nib = q->data.nib;
+ const op_type *nib = q->data.nib;
unsigned int len = 0;
while (1)
@@ -638,9 +638,9 @@ bfd_h8_disassemble (bfd_vma addr, disassemble_info *info, int mach)
regno[1]);
return qi->length;
}
- if (strncmp (q->name, "mova", 4) == 0)
+ if (CONST_STRNEQ (q->name, "mova"))
{
- op_type *args = q->args.nib;
+ const op_type *args = q->args.nib;
if (args[1] == (op_type) E)
{
@@ -666,7 +666,7 @@ bfd_h8_disassemble (bfd_vma addr, disassemble_info *info, int mach)
}
/* Fill in the args. */
{
- op_type *args = q->args.nib;
+ const op_type *args = q->args.nib;
int hadone = 0;
int nargs;
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index f73e883e779c..e84d31459535 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -1,6 +1,6 @@
/* Print i386 instructions for GDB, the GNU debugger.
Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GDB.
@@ -34,17 +34,10 @@
#include "dis-asm.h"
#include "sysdep.h"
#include "opintl.h"
-
-#define MAXLEN 15
+#include "opcode/i386.h"
#include <setjmp.h>
-#ifndef UNIXWARE_COMPAT
-/* Set non-zero for broken, compatible instructions. Set to zero for
- non-broken opcodes. */
-#define UNIXWARE_COMPAT 1
-#endif
-
static int fetch_data (struct disassemble_info *, bfd_byte *);
static void ckprefix (void);
static const char *prefix_name (int, int);
@@ -57,6 +50,7 @@ static void oappend (const char *);
static void append_seg (void);
static void OP_indirE (int, int);
static void print_operand_value (char *, int, bfd_vma);
+static void print_displacement (char *, bfd_vma);
static void OP_E (int, int);
static void OP_G (int, int);
static bfd_vma get64 (void);
@@ -80,18 +74,21 @@ static void OP_DSreg (int, int);
static void OP_C (int, int);
static void OP_D (int, int);
static void OP_T (int, int);
-static void OP_Rd (int, int);
+static void OP_R (int, int);
static void OP_MMX (int, int);
static void OP_XMM (int, int);
static void OP_EM (int, int);
static void OP_EX (int, int);
+static void OP_EMC (int,int);
+static void OP_MXC (int,int);
static void OP_MS (int, int);
static void OP_XS (int, int);
static void OP_M (int, int);
static void OP_VMX (int, int);
static void OP_0fae (int, int);
static void OP_0f07 (int, int);
-static void NOP_Fixup (int, int);
+static void NOP_Fixup1 (int, int);
+static void NOP_Fixup2 (int, int);
static void OP_3DNowSuffix (int, int);
static void OP_SIMD_Suffix (int, int);
static void SIMD_Fixup (int, int);
@@ -99,23 +96,21 @@ static void PNI_Fixup (int, int);
static void SVME_Fixup (int, int);
static void INVLPG_Fixup (int, int);
static void BadOp (void);
-static void SEG_Fixup (int, int);
static void VMX_Fixup (int, int);
static void REP_Fixup (int, int);
+static void CMPXCHG8B_Fixup (int, int);
+static void XMM_Fixup (int, int);
+static void CRC32_Fixup (int, int);
struct dis_private {
/* Points to first byte not fetched. */
bfd_byte *max_fetched;
- bfd_byte the_buffer[MAXLEN];
+ bfd_byte the_buffer[MAX_MNEM_SIZE];
bfd_vma insn_start;
int orig_sizeflag;
jmp_buf bailout;
};
-/* The opcode for the fwait instruction, which we treat as a prefix
- when we can. */
-#define FWAIT_OPCODE (0x9b)
-
enum address_mode
{
mode_16bit,
@@ -132,10 +127,6 @@ static int prefixes;
static int rex;
/* Bits of REX we've already used. */
static int rex_used;
-#define REX_MODE64 8
-#define REX_EXTX 4
-#define REX_EXTY 2
-#define REX_EXTZ 1
/* Mark parts used in the REX prefix. When we are testing for
empty prefix (for 8bit register REX extension), just mask it
out. Otherwise test for REX bit is excuse for existence of REX
@@ -143,9 +134,12 @@ static int rex_used;
#define USED_REX(value) \
{ \
if (value) \
- rex_used |= (rex & value) ? (value) | 0x40 : 0; \
+ { \
+ if ((rex & value)) \
+ rex_used |= (value) | REX_OPCODE; \
+ } \
else \
- rex_used |= 0x40; \
+ rex_used |= REX_OPCODE; \
}
/* Flags for prefixes which we somehow handled when printing the
@@ -180,7 +174,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
struct dis_private *priv = (struct dis_private *) info->private_data;
bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
- if (addr <= priv->the_buffer + MAXLEN)
+ if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
status = (*info->read_memory_func) (start,
priv->max_fetched,
addr - priv->max_fetched,
@@ -202,130 +196,142 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
return 1;
}
-#define XX NULL, 0
-
-#define Eb OP_E, b_mode
-#define Ev OP_E, v_mode
-#define Ed OP_E, d_mode
-#define Eq OP_E, q_mode
-#define Edq OP_E, dq_mode
-#define Edqw OP_E, dqw_mode
-#define indirEv OP_indirE, stack_v_mode
-#define indirEp OP_indirE, f_mode
-#define stackEv OP_E, stack_v_mode
-#define Em OP_E, m_mode
-#define Ew OP_E, w_mode
-#define Ma OP_E, v_mode
-#define M OP_M, 0 /* lea, lgdt, etc. */
-#define Mp OP_M, f_mode /* 32 or 48 bit memory operand for LDS, LES etc */
-#define Gb OP_G, b_mode
-#define Gv OP_G, v_mode
-#define Gd OP_G, d_mode
-#define Gdq OP_G, dq_mode
-#define Gm OP_G, m_mode
-#define Gw OP_G, w_mode
-#define Rd OP_Rd, d_mode
-#define Rm OP_Rd, m_mode
-#define Ib OP_I, b_mode
-#define sIb OP_sI, b_mode /* sign extened byte */
-#define Iv OP_I, v_mode
-#define Iq OP_I, q_mode
-#define Iv64 OP_I64, v_mode
-#define Iw OP_I, w_mode
-#define I1 OP_I, const_1_mode
-#define Jb OP_J, b_mode
-#define Jv OP_J, v_mode
-#define Cm OP_C, m_mode
-#define Dm OP_D, m_mode
-#define Td OP_T, d_mode
-#define Sv SEG_Fixup, v_mode
-
-#define RMeAX OP_REG, eAX_reg
-#define RMeBX OP_REG, eBX_reg
-#define RMeCX OP_REG, eCX_reg
-#define RMeDX OP_REG, eDX_reg
-#define RMeSP OP_REG, eSP_reg
-#define RMeBP OP_REG, eBP_reg
-#define RMeSI OP_REG, eSI_reg
-#define RMeDI OP_REG, eDI_reg
-#define RMrAX OP_REG, rAX_reg
-#define RMrBX OP_REG, rBX_reg
-#define RMrCX OP_REG, rCX_reg
-#define RMrDX OP_REG, rDX_reg
-#define RMrSP OP_REG, rSP_reg
-#define RMrBP OP_REG, rBP_reg
-#define RMrSI OP_REG, rSI_reg
-#define RMrDI OP_REG, rDI_reg
-#define RMAL OP_REG, al_reg
-#define RMAL OP_REG, al_reg
-#define RMCL OP_REG, cl_reg
-#define RMDL OP_REG, dl_reg
-#define RMBL OP_REG, bl_reg
-#define RMAH OP_REG, ah_reg
-#define RMCH OP_REG, ch_reg
-#define RMDH OP_REG, dh_reg
-#define RMBH OP_REG, bh_reg
-#define RMAX OP_REG, ax_reg
-#define RMDX OP_REG, dx_reg
-
-#define eAX OP_IMREG, eAX_reg
-#define eBX OP_IMREG, eBX_reg
-#define eCX OP_IMREG, eCX_reg
-#define eDX OP_IMREG, eDX_reg
-#define eSP OP_IMREG, eSP_reg
-#define eBP OP_IMREG, eBP_reg
-#define eSI OP_IMREG, eSI_reg
-#define eDI OP_IMREG, eDI_reg
-#define AL OP_IMREG, al_reg
-#define CL OP_IMREG, cl_reg
-#define DL OP_IMREG, dl_reg
-#define BL OP_IMREG, bl_reg
-#define AH OP_IMREG, ah_reg
-#define CH OP_IMREG, ch_reg
-#define DH OP_IMREG, dh_reg
-#define BH OP_IMREG, bh_reg
-#define AX OP_IMREG, ax_reg
-#define DX OP_IMREG, dx_reg
-#define indirDX OP_IMREG, indir_dx_reg
-
-#define Sw OP_SEG, w_mode
-#define Ap OP_DIR, 0
-#define Ob OP_OFF64, b_mode
-#define Ov OP_OFF64, v_mode
-#define Xb OP_DSreg, eSI_reg
-#define Xv OP_DSreg, eSI_reg
-#define Yb OP_ESreg, eDI_reg
-#define Yv OP_ESreg, eDI_reg
-#define DSBX OP_DSreg, eBX_reg
-
-#define es OP_REG, es_reg
-#define ss OP_REG, ss_reg
-#define cs OP_REG, cs_reg
-#define ds OP_REG, ds_reg
-#define fs OP_REG, fs_reg
-#define gs OP_REG, gs_reg
-
-#define MX OP_MMX, 0
-#define XM OP_XMM, 0
-#define EM OP_EM, v_mode
-#define EX OP_EX, v_mode
-#define MS OP_MS, v_mode
-#define XS OP_XS, v_mode
-#define VM OP_VMX, q_mode
-#define OPSUF OP_3DNowSuffix, 0
-#define OPSIMD OP_SIMD_Suffix, 0
+#define XX { NULL, 0 }
+
+#define Eb { OP_E, b_mode }
+#define Ev { OP_E, v_mode }
+#define Ed { OP_E, d_mode }
+#define Edq { OP_E, dq_mode }
+#define Edqw { OP_E, dqw_mode }
+#define Edqb { OP_E, dqb_mode }
+#define Edqd { OP_E, dqd_mode }
+#define indirEv { OP_indirE, stack_v_mode }
+#define indirEp { OP_indirE, f_mode }
+#define stackEv { OP_E, stack_v_mode }
+#define Em { OP_E, m_mode }
+#define Ew { OP_E, w_mode }
+#define M { OP_M, 0 } /* lea, lgdt, etc. */
+#define Ma { OP_M, v_mode }
+#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
+#define Mq { OP_M, q_mode }
+#define Gb { OP_G, b_mode }
+#define Gv { OP_G, v_mode }
+#define Gd { OP_G, d_mode }
+#define Gdq { OP_G, dq_mode }
+#define Gm { OP_G, m_mode }
+#define Gw { OP_G, w_mode }
+#define Rd { OP_R, d_mode }
+#define Rm { OP_R, m_mode }
+#define Ib { OP_I, b_mode }
+#define sIb { OP_sI, b_mode } /* sign extened byte */
+#define Iv { OP_I, v_mode }
+#define Iq { OP_I, q_mode }
+#define Iv64 { OP_I64, v_mode }
+#define Iw { OP_I, w_mode }
+#define I1 { OP_I, const_1_mode }
+#define Jb { OP_J, b_mode }
+#define Jv { OP_J, v_mode }
+#define Cm { OP_C, m_mode }
+#define Dm { OP_D, m_mode }
+#define Td { OP_T, d_mode }
+
+#define RMeAX { OP_REG, eAX_reg }
+#define RMeBX { OP_REG, eBX_reg }
+#define RMeCX { OP_REG, eCX_reg }
+#define RMeDX { OP_REG, eDX_reg }
+#define RMeSP { OP_REG, eSP_reg }
+#define RMeBP { OP_REG, eBP_reg }
+#define RMeSI { OP_REG, eSI_reg }
+#define RMeDI { OP_REG, eDI_reg }
+#define RMrAX { OP_REG, rAX_reg }
+#define RMrBX { OP_REG, rBX_reg }
+#define RMrCX { OP_REG, rCX_reg }
+#define RMrDX { OP_REG, rDX_reg }
+#define RMrSP { OP_REG, rSP_reg }
+#define RMrBP { OP_REG, rBP_reg }
+#define RMrSI { OP_REG, rSI_reg }
+#define RMrDI { OP_REG, rDI_reg }
+#define RMAL { OP_REG, al_reg }
+#define RMAL { OP_REG, al_reg }
+#define RMCL { OP_REG, cl_reg }
+#define RMDL { OP_REG, dl_reg }
+#define RMBL { OP_REG, bl_reg }
+#define RMAH { OP_REG, ah_reg }
+#define RMCH { OP_REG, ch_reg }
+#define RMDH { OP_REG, dh_reg }
+#define RMBH { OP_REG, bh_reg }
+#define RMAX { OP_REG, ax_reg }
+#define RMDX { OP_REG, dx_reg }
+
+#define eAX { OP_IMREG, eAX_reg }
+#define eBX { OP_IMREG, eBX_reg }
+#define eCX { OP_IMREG, eCX_reg }
+#define eDX { OP_IMREG, eDX_reg }
+#define eSP { OP_IMREG, eSP_reg }
+#define eBP { OP_IMREG, eBP_reg }
+#define eSI { OP_IMREG, eSI_reg }
+#define eDI { OP_IMREG, eDI_reg }
+#define AL { OP_IMREG, al_reg }
+#define CL { OP_IMREG, cl_reg }
+#define DL { OP_IMREG, dl_reg }
+#define BL { OP_IMREG, bl_reg }
+#define AH { OP_IMREG, ah_reg }
+#define CH { OP_IMREG, ch_reg }
+#define DH { OP_IMREG, dh_reg }
+#define BH { OP_IMREG, bh_reg }
+#define AX { OP_IMREG, ax_reg }
+#define DX { OP_IMREG, dx_reg }
+#define zAX { OP_IMREG, z_mode_ax_reg }
+#define indirDX { OP_IMREG, indir_dx_reg }
+
+#define Sw { OP_SEG, w_mode }
+#define Sv { OP_SEG, v_mode }
+#define Ap { OP_DIR, 0 }
+#define Ob { OP_OFF64, b_mode }
+#define Ov { OP_OFF64, v_mode }
+#define Xb { OP_DSreg, eSI_reg }
+#define Xv { OP_DSreg, eSI_reg }
+#define Xz { OP_DSreg, eSI_reg }
+#define Yb { OP_ESreg, eDI_reg }
+#define Yv { OP_ESreg, eDI_reg }
+#define DSBX { OP_DSreg, eBX_reg }
+
+#define es { OP_REG, es_reg }
+#define ss { OP_REG, ss_reg }
+#define cs { OP_REG, cs_reg }
+#define ds { OP_REG, ds_reg }
+#define fs { OP_REG, fs_reg }
+#define gs { OP_REG, gs_reg }
+
+#define MX { OP_MMX, 0 }
+#define XM { OP_XMM, 0 }
+#define EM { OP_EM, v_mode }
+#define EMd { OP_EM, d_mode }
+#define EMq { OP_EM, q_mode }
+#define EXd { OP_EX, d_mode }
+#define EXq { OP_EX, q_mode }
+#define EXx { OP_EX, x_mode }
+#define MS { OP_MS, v_mode }
+#define XS { OP_XS, v_mode }
+#define EMC { OP_EMC, v_mode }
+#define MXC { OP_MXC, 0 }
+#define VM { OP_VMX, q_mode }
+#define OPSUF { OP_3DNowSuffix, 0 }
+#define OPSIMD { OP_SIMD_Suffix, 0 }
+#define XMM0 { XMM_Fixup, 0 }
/* Used handle "rep" prefix for string instructions. */
-#define Xbr REP_Fixup, eSI_reg
-#define Xvr REP_Fixup, eSI_reg
-#define Ybr REP_Fixup, eDI_reg
-#define Yvr REP_Fixup, eDI_reg
-#define indirDXr REP_Fixup, indir_dx_reg
-#define ALr REP_Fixup, al_reg
-#define eAXr REP_Fixup, eAX_reg
-
-#define cond_jump_flag NULL, cond_jump_mode
-#define loop_jcxz_flag NULL, loop_jcxz_mode
+#define Xbr { REP_Fixup, eSI_reg }
+#define Xvr { REP_Fixup, eSI_reg }
+#define Ybr { REP_Fixup, eDI_reg }
+#define Yvr { REP_Fixup, eDI_reg }
+#define Yzr { REP_Fixup, eDI_reg }
+#define indirDXr { REP_Fixup, indir_dx_reg }
+#define ALr { REP_Fixup, al_reg }
+#define eAXr { REP_Fixup, eAX_reg }
+
+#define cond_jump_flag { NULL, cond_jump_mode }
+#define loop_jcxz_flag { NULL, loop_jcxz_mode }
/* bits in sizeflag */
#define SUFFIX_ALWAYS 4
@@ -347,6 +353,10 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
#define f_mode 13 /* 4- or 6-byte pointer operand */
#define const_1_mode 14
#define stack_v_mode 15 /* v_mode for stack-related opcodes. */
+#define z_mode 16 /* non-quad operand size depends on prefixes */
+#define o_mode 17 /* 16-byte operand */
+#define dqb_mode 18 /* registers like dq_mode, memory like b_mode. */
+#define dqd_mode 19 /* registers like dq_mode, memory like d_mode. */
#define es_reg 100
#define cs_reg 101
@@ -391,6 +401,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
#define rSI_reg 138
#define rDI_reg 139
+#define z_mode_ax_reg 149
#define indir_dx_reg 150
#define FLOATCODE 1
@@ -399,83 +410,154 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
#define X86_64_SPECIAL 4
#define IS_3BYTE_OPCODE 5
-#define FLOAT NULL, NULL, FLOATCODE, NULL, 0, NULL, 0
-
-#define GRP1b NULL, NULL, USE_GROUPS, NULL, 0, NULL, 0
-#define GRP1S NULL, NULL, USE_GROUPS, NULL, 1, NULL, 0
-#define GRP1Ss NULL, NULL, USE_GROUPS, NULL, 2, NULL, 0
-#define GRP2b NULL, NULL, USE_GROUPS, NULL, 3, NULL, 0
-#define GRP2S NULL, NULL, USE_GROUPS, NULL, 4, NULL, 0
-#define GRP2b_one NULL, NULL, USE_GROUPS, NULL, 5, NULL, 0
-#define GRP2S_one NULL, NULL, USE_GROUPS, NULL, 6, NULL, 0
-#define GRP2b_cl NULL, NULL, USE_GROUPS, NULL, 7, NULL, 0
-#define GRP2S_cl NULL, NULL, USE_GROUPS, NULL, 8, NULL, 0
-#define GRP3b NULL, NULL, USE_GROUPS, NULL, 9, NULL, 0
-#define GRP3S NULL, NULL, USE_GROUPS, NULL, 10, NULL, 0
-#define GRP4 NULL, NULL, USE_GROUPS, NULL, 11, NULL, 0
-#define GRP5 NULL, NULL, USE_GROUPS, NULL, 12, NULL, 0
-#define GRP6 NULL, NULL, USE_GROUPS, NULL, 13, NULL, 0
-#define GRP7 NULL, NULL, USE_GROUPS, NULL, 14, NULL, 0
-#define GRP8 NULL, NULL, USE_GROUPS, NULL, 15, NULL, 0
-#define GRP9 NULL, NULL, USE_GROUPS, NULL, 16, NULL, 0
-#define GRP10 NULL, NULL, USE_GROUPS, NULL, 17, NULL, 0
-#define GRP11 NULL, NULL, USE_GROUPS, NULL, 18, NULL, 0
-#define GRP12 NULL, NULL, USE_GROUPS, NULL, 19, NULL, 0
-#define GRP13 NULL, NULL, USE_GROUPS, NULL, 20, NULL, 0
-#define GRP14 NULL, NULL, USE_GROUPS, NULL, 21, NULL, 0
-#define GRPAMD NULL, NULL, USE_GROUPS, NULL, 22, NULL, 0
-#define GRPPADLCK1 NULL, NULL, USE_GROUPS, NULL, 23, NULL, 0
-#define GRPPADLCK2 NULL, NULL, USE_GROUPS, NULL, 24, NULL, 0
-
-#define PREGRP0 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 0, NULL, 0
-#define PREGRP1 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 1, NULL, 0
-#define PREGRP2 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 2, NULL, 0
-#define PREGRP3 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 3, NULL, 0
-#define PREGRP4 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 4, NULL, 0
-#define PREGRP5 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 5, NULL, 0
-#define PREGRP6 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 6, NULL, 0
-#define PREGRP7 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 7, NULL, 0
-#define PREGRP8 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 8, NULL, 0
-#define PREGRP9 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 9, NULL, 0
-#define PREGRP10 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 10, NULL, 0
-#define PREGRP11 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 11, NULL, 0
-#define PREGRP12 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 12, NULL, 0
-#define PREGRP13 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 13, NULL, 0
-#define PREGRP14 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 14, NULL, 0
-#define PREGRP15 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 15, NULL, 0
-#define PREGRP16 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 16, NULL, 0
-#define PREGRP17 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 17, NULL, 0
-#define PREGRP18 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 18, NULL, 0
-#define PREGRP19 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 19, NULL, 0
-#define PREGRP20 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 20, NULL, 0
-#define PREGRP21 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 21, NULL, 0
-#define PREGRP22 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 22, NULL, 0
-#define PREGRP23 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 23, NULL, 0
-#define PREGRP24 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 24, NULL, 0
-#define PREGRP25 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 25, NULL, 0
-#define PREGRP26 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 26, NULL, 0
-#define PREGRP27 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 27, NULL, 0
-#define PREGRP28 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 28, NULL, 0
-#define PREGRP29 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 29, NULL, 0
-#define PREGRP30 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 30, NULL, 0
-#define PREGRP31 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 31, NULL, 0
-#define PREGRP32 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 32, NULL, 0
-
-#define X86_64_0 NULL, NULL, X86_64_SPECIAL, NULL, 0, NULL, 0
-
-#define THREE_BYTE_0 NULL, NULL, IS_3BYTE_OPCODE, NULL, 0, NULL, 0
-#define THREE_BYTE_1 NULL, NULL, IS_3BYTE_OPCODE, NULL, 1, NULL, 0
+#define FLOAT NULL, { { NULL, FLOATCODE } }
+
+#define GRP1a NULL, { { NULL, USE_GROUPS }, { NULL, 0 } }
+#define GRP1b NULL, { { NULL, USE_GROUPS }, { NULL, 1 } }
+#define GRP1S NULL, { { NULL, USE_GROUPS }, { NULL, 2 } }
+#define GRP1Ss NULL, { { NULL, USE_GROUPS }, { NULL, 3 } }
+#define GRP2b NULL, { { NULL, USE_GROUPS }, { NULL, 4 } }
+#define GRP2S NULL, { { NULL, USE_GROUPS }, { NULL, 5 } }
+#define GRP2b_one NULL, { { NULL, USE_GROUPS }, { NULL, 6 } }
+#define GRP2S_one NULL, { { NULL, USE_GROUPS }, { NULL, 7 } }
+#define GRP2b_cl NULL, { { NULL, USE_GROUPS }, { NULL, 8 } }
+#define GRP2S_cl NULL, { { NULL, USE_GROUPS }, { NULL, 9 } }
+#define GRP3b NULL, { { NULL, USE_GROUPS }, { NULL, 10 } }
+#define GRP3S NULL, { { NULL, USE_GROUPS }, { NULL, 11 } }
+#define GRP4 NULL, { { NULL, USE_GROUPS }, { NULL, 12 } }
+#define GRP5 NULL, { { NULL, USE_GROUPS }, { NULL, 13 } }
+#define GRP6 NULL, { { NULL, USE_GROUPS }, { NULL, 14 } }
+#define GRP7 NULL, { { NULL, USE_GROUPS }, { NULL, 15 } }
+#define GRP8 NULL, { { NULL, USE_GROUPS }, { NULL, 16 } }
+#define GRP9 NULL, { { NULL, USE_GROUPS }, { NULL, 17 } }
+#define GRP11_C6 NULL, { { NULL, USE_GROUPS }, { NULL, 18 } }
+#define GRP11_C7 NULL, { { NULL, USE_GROUPS }, { NULL, 19 } }
+#define GRP12 NULL, { { NULL, USE_GROUPS }, { NULL, 20 } }
+#define GRP13 NULL, { { NULL, USE_GROUPS }, { NULL, 21 } }
+#define GRP14 NULL, { { NULL, USE_GROUPS }, { NULL, 22 } }
+#define GRP15 NULL, { { NULL, USE_GROUPS }, { NULL, 23 } }
+#define GRP16 NULL, { { NULL, USE_GROUPS }, { NULL, 24 } }
+#define GRPAMD NULL, { { NULL, USE_GROUPS }, { NULL, 25 } }
+#define GRPPADLCK1 NULL, { { NULL, USE_GROUPS }, { NULL, 26 } }
+#define GRPPADLCK2 NULL, { { NULL, USE_GROUPS }, { NULL, 27 } }
+
+#define PREGRP0 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 0 } }
+#define PREGRP1 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 1 } }
+#define PREGRP2 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 2 } }
+#define PREGRP3 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 3 } }
+#define PREGRP4 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 4 } }
+#define PREGRP5 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 5 } }
+#define PREGRP6 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 6 } }
+#define PREGRP7 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 7 } }
+#define PREGRP8 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 8 } }
+#define PREGRP9 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 9 } }
+#define PREGRP10 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 10 } }
+#define PREGRP11 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 11 } }
+#define PREGRP12 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 12 } }
+#define PREGRP13 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 13 } }
+#define PREGRP14 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 14 } }
+#define PREGRP15 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 15 } }
+#define PREGRP16 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 16 } }
+#define PREGRP17 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 17 } }
+#define PREGRP18 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 18 } }
+#define PREGRP19 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 19 } }
+#define PREGRP20 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 20 } }
+#define PREGRP21 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 21 } }
+#define PREGRP22 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 22 } }
+#define PREGRP23 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 23 } }
+#define PREGRP24 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 24 } }
+#define PREGRP25 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 25 } }
+#define PREGRP26 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 26 } }
+#define PREGRP27 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 27 } }
+#define PREGRP28 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 28 } }
+#define PREGRP29 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 29 } }
+#define PREGRP30 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 30 } }
+#define PREGRP31 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 31 } }
+#define PREGRP32 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 32 } }
+#define PREGRP33 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 33 } }
+#define PREGRP34 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 34 } }
+#define PREGRP35 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 35 } }
+#define PREGRP36 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 36 } }
+#define PREGRP37 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 37 } }
+#define PREGRP38 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 38 } }
+#define PREGRP39 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 39 } }
+#define PREGRP40 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 40 } }
+#define PREGRP41 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 41 } }
+#define PREGRP42 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 42 } }
+#define PREGRP43 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 43 } }
+#define PREGRP44 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 44 } }
+#define PREGRP45 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 45 } }
+#define PREGRP46 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 46 } }
+#define PREGRP47 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 47 } }
+#define PREGRP48 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 48 } }
+#define PREGRP49 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 49 } }
+#define PREGRP50 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 50 } }
+#define PREGRP51 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 51 } }
+#define PREGRP52 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 52 } }
+#define PREGRP53 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 53 } }
+#define PREGRP54 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 54 } }
+#define PREGRP55 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 55 } }
+#define PREGRP56 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 56 } }
+#define PREGRP57 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 57 } }
+#define PREGRP58 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 58 } }
+#define PREGRP59 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 59 } }
+#define PREGRP60 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 60 } }
+#define PREGRP61 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 61 } }
+#define PREGRP62 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 62 } }
+#define PREGRP63 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 63 } }
+#define PREGRP64 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 64 } }
+#define PREGRP65 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 65 } }
+#define PREGRP66 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 66 } }
+#define PREGRP67 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 67 } }
+#define PREGRP68 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 68 } }
+#define PREGRP69 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 69 } }
+#define PREGRP70 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 70 } }
+#define PREGRP71 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 71 } }
+#define PREGRP72 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 72 } }
+#define PREGRP73 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 73 } }
+#define PREGRP74 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 74 } }
+#define PREGRP75 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 75 } }
+#define PREGRP76 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 76 } }
+#define PREGRP77 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 77 } }
+#define PREGRP78 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 78 } }
+#define PREGRP79 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 79 } }
+#define PREGRP80 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 80 } }
+#define PREGRP81 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 81 } }
+#define PREGRP82 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 82 } }
+#define PREGRP83 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 83 } }
+#define PREGRP84 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 84 } }
+#define PREGRP85 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 85 } }
+#define PREGRP86 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 86 } }
+#define PREGRP87 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 87 } }
+#define PREGRP88 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 88 } }
+#define PREGRP89 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 89 } }
+#define PREGRP90 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 90 } }
+#define PREGRP91 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 91 } }
+#define PREGRP92 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 92 } }
+#define PREGRP93 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 93 } }
+#define PREGRP94 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 94 } }
+#define PREGRP95 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 95 } }
+#define PREGRP96 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 96 } }
+#define PREGRP97 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 97 } }
+
+
+#define X86_64_0 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 0 } }
+#define X86_64_1 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 1 } }
+#define X86_64_2 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 2 } }
+#define X86_64_3 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 3 } }
+
+#define THREE_BYTE_0 NULL, { { NULL, IS_3BYTE_OPCODE }, { NULL, 0 } }
+#define THREE_BYTE_1 NULL, { { NULL, IS_3BYTE_OPCODE }, { NULL, 1 } }
typedef void (*op_rtn) (int bytemode, int sizeflag);
struct dis386 {
const char *name;
- op_rtn op1;
- int bytemode1;
- op_rtn op2;
- int bytemode2;
- op_rtn op3;
- int bytemode3;
+ struct
+ {
+ op_rtn rtn;
+ int bytemode;
+ } op[MAX_OPERANDS];
};
/* Upper case letters in the instruction names here are macros.
@@ -483,25 +565,29 @@ struct dis386 {
'B' => print 'b' if suffix_always is true
'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
. size prefix
+ 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
+ . suffix_always is true
'E' => print 'e' if 32-bit form of jcxz
'F' => print 'w' or 'l' depending on address size prefix (loop insns)
+ 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
'H' => print ",pt" or ",pn" branch hint
'I' => honor following macro letter even in Intel mode (implemented only
. for some of the macro letters)
'J' => print 'l'
+ 'K' => print 'd' or 'q' if rex prefix is present.
'L' => print 'l' if suffix_always is true
'N' => print 'n' if instruction has no wait "prefix"
- 'O' => print 'd', or 'o'
+ 'O' => print 'd' or 'o' (or 'q' in Intel mode)
'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
. or suffix_always is true. print 'q' if rex prefix is present.
'Q' => print 'w', 'l' or 'q' if no register operands or suffix_always
. is true
- 'R' => print 'w', 'l' or 'q' ("wd" or "dq" in intel mode)
+ 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
'S' => print 'w', 'l' or 'q' if suffix_always is true
'T' => print 'q' in 64bit mode and behave as 'P' otherwise
'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
'V' => print 'q' in 64bit mode and behave as 'S' otherwise
- 'W' => print 'b' or 'w' ("w" or "de" in intel mode)
+ 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
'X' => print 's', 'd' depending on data16 prefix (for XMM)
'Y' => 'q' if instruction has an REX 64bit overwrite prefix
'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
@@ -517,248 +603,248 @@ struct dis386 {
static const struct dis386 dis386[] = {
/* 00 */
- { "addB", Eb, Gb, XX },
- { "addS", Ev, Gv, XX },
- { "addB", Gb, Eb, XX },
- { "addS", Gv, Ev, XX },
- { "addB", AL, Ib, XX },
- { "addS", eAX, Iv, XX },
- { "push{T|}", es, XX, XX },
- { "pop{T|}", es, XX, XX },
+ { "addB", { Eb, Gb } },
+ { "addS", { Ev, Gv } },
+ { "addB", { Gb, Eb } },
+ { "addS", { Gv, Ev } },
+ { "addB", { AL, Ib } },
+ { "addS", { eAX, Iv } },
+ { "push{T|}", { es } },
+ { "pop{T|}", { es } },
/* 08 */
- { "orB", Eb, Gb, XX },
- { "orS", Ev, Gv, XX },
- { "orB", Gb, Eb, XX },
- { "orS", Gv, Ev, XX },
- { "orB", AL, Ib, XX },
- { "orS", eAX, Iv, XX },
- { "push{T|}", cs, XX, XX },
- { "(bad)", XX, XX, XX }, /* 0x0f extended opcode escape */
+ { "orB", { Eb, Gb } },
+ { "orS", { Ev, Gv } },
+ { "orB", { Gb, Eb } },
+ { "orS", { Gv, Ev } },
+ { "orB", { AL, Ib } },
+ { "orS", { eAX, Iv } },
+ { "push{T|}", { cs } },
+ { "(bad)", { XX } }, /* 0x0f extended opcode escape */
/* 10 */
- { "adcB", Eb, Gb, XX },
- { "adcS", Ev, Gv, XX },
- { "adcB", Gb, Eb, XX },
- { "adcS", Gv, Ev, XX },
- { "adcB", AL, Ib, XX },
- { "adcS", eAX, Iv, XX },
- { "push{T|}", ss, XX, XX },
- { "pop{T|}", ss, XX, XX },
+ { "adcB", { Eb, Gb } },
+ { "adcS", { Ev, Gv } },
+ { "adcB", { Gb, Eb } },
+ { "adcS", { Gv, Ev } },
+ { "adcB", { AL, Ib } },
+ { "adcS", { eAX, Iv } },
+ { "push{T|}", { ss } },
+ { "pop{T|}", { ss } },
/* 18 */
- { "sbbB", Eb, Gb, XX },
- { "sbbS", Ev, Gv, XX },
- { "sbbB", Gb, Eb, XX },
- { "sbbS", Gv, Ev, XX },
- { "sbbB", AL, Ib, XX },
- { "sbbS", eAX, Iv, XX },
- { "push{T|}", ds, XX, XX },
- { "pop{T|}", ds, XX, XX },
+ { "sbbB", { Eb, Gb } },
+ { "sbbS", { Ev, Gv } },
+ { "sbbB", { Gb, Eb } },
+ { "sbbS", { Gv, Ev } },
+ { "sbbB", { AL, Ib } },
+ { "sbbS", { eAX, Iv } },
+ { "push{T|}", { ds } },
+ { "pop{T|}", { ds } },
/* 20 */
- { "andB", Eb, Gb, XX },
- { "andS", Ev, Gv, XX },
- { "andB", Gb, Eb, XX },
- { "andS", Gv, Ev, XX },
- { "andB", AL, Ib, XX },
- { "andS", eAX, Iv, XX },
- { "(bad)", XX, XX, XX }, /* SEG ES prefix */
- { "daa{|}", XX, XX, XX },
+ { "andB", { Eb, Gb } },
+ { "andS", { Ev, Gv } },
+ { "andB", { Gb, Eb } },
+ { "andS", { Gv, Ev } },
+ { "andB", { AL, Ib } },
+ { "andS", { eAX, Iv } },
+ { "(bad)", { XX } }, /* SEG ES prefix */
+ { "daa{|}", { XX } },
/* 28 */
- { "subB", Eb, Gb, XX },
- { "subS", Ev, Gv, XX },
- { "subB", Gb, Eb, XX },
- { "subS", Gv, Ev, XX },
- { "subB", AL, Ib, XX },
- { "subS", eAX, Iv, XX },
- { "(bad)", XX, XX, XX }, /* SEG CS prefix */
- { "das{|}", XX, XX, XX },
+ { "subB", { Eb, Gb } },
+ { "subS", { Ev, Gv } },
+ { "subB", { Gb, Eb } },
+ { "subS", { Gv, Ev } },
+ { "subB", { AL, Ib } },
+ { "subS", { eAX, Iv } },
+ { "(bad)", { XX } }, /* SEG CS prefix */
+ { "das{|}", { XX } },
/* 30 */
- { "xorB", Eb, Gb, XX },
- { "xorS", Ev, Gv, XX },
- { "xorB", Gb, Eb, XX },
- { "xorS", Gv, Ev, XX },
- { "xorB", AL, Ib, XX },
- { "xorS", eAX, Iv, XX },
- { "(bad)", XX, XX, XX }, /* SEG SS prefix */
- { "aaa{|}", XX, XX, XX },
+ { "xorB", { Eb, Gb } },
+ { "xorS", { Ev, Gv } },
+ { "xorB", { Gb, Eb } },
+ { "xorS", { Gv, Ev } },
+ { "xorB", { AL, Ib } },
+ { "xorS", { eAX, Iv } },
+ { "(bad)", { XX } }, /* SEG SS prefix */
+ { "aaa{|}", { XX } },
/* 38 */
- { "cmpB", Eb, Gb, XX },
- { "cmpS", Ev, Gv, XX },
- { "cmpB", Gb, Eb, XX },
- { "cmpS", Gv, Ev, XX },
- { "cmpB", AL, Ib, XX },
- { "cmpS", eAX, Iv, XX },
- { "(bad)", XX, XX, XX }, /* SEG DS prefix */
- { "aas{|}", XX, XX, XX },
+ { "cmpB", { Eb, Gb } },
+ { "cmpS", { Ev, Gv } },
+ { "cmpB", { Gb, Eb } },
+ { "cmpS", { Gv, Ev } },
+ { "cmpB", { AL, Ib } },
+ { "cmpS", { eAX, Iv } },
+ { "(bad)", { XX } }, /* SEG DS prefix */
+ { "aas{|}", { XX } },
/* 40 */
- { "inc{S|}", RMeAX, XX, XX },
- { "inc{S|}", RMeCX, XX, XX },
- { "inc{S|}", RMeDX, XX, XX },
- { "inc{S|}", RMeBX, XX, XX },
- { "inc{S|}", RMeSP, XX, XX },
- { "inc{S|}", RMeBP, XX, XX },
- { "inc{S|}", RMeSI, XX, XX },
- { "inc{S|}", RMeDI, XX, XX },
+ { "inc{S|}", { RMeAX } },
+ { "inc{S|}", { RMeCX } },
+ { "inc{S|}", { RMeDX } },
+ { "inc{S|}", { RMeBX } },
+ { "inc{S|}", { RMeSP } },
+ { "inc{S|}", { RMeBP } },
+ { "inc{S|}", { RMeSI } },
+ { "inc{S|}", { RMeDI } },
/* 48 */
- { "dec{S|}", RMeAX, XX, XX },
- { "dec{S|}", RMeCX, XX, XX },
- { "dec{S|}", RMeDX, XX, XX },
- { "dec{S|}", RMeBX, XX, XX },
- { "dec{S|}", RMeSP, XX, XX },
- { "dec{S|}", RMeBP, XX, XX },
- { "dec{S|}", RMeSI, XX, XX },
- { "dec{S|}", RMeDI, XX, XX },
+ { "dec{S|}", { RMeAX } },
+ { "dec{S|}", { RMeCX } },
+ { "dec{S|}", { RMeDX } },
+ { "dec{S|}", { RMeBX } },
+ { "dec{S|}", { RMeSP } },
+ { "dec{S|}", { RMeBP } },
+ { "dec{S|}", { RMeSI } },
+ { "dec{S|}", { RMeDI } },
/* 50 */
- { "pushV", RMrAX, XX, XX },
- { "pushV", RMrCX, XX, XX },
- { "pushV", RMrDX, XX, XX },
- { "pushV", RMrBX, XX, XX },
- { "pushV", RMrSP, XX, XX },
- { "pushV", RMrBP, XX, XX },
- { "pushV", RMrSI, XX, XX },
- { "pushV", RMrDI, XX, XX },
+ { "pushV", { RMrAX } },
+ { "pushV", { RMrCX } },
+ { "pushV", { RMrDX } },
+ { "pushV", { RMrBX } },
+ { "pushV", { RMrSP } },
+ { "pushV", { RMrBP } },
+ { "pushV", { RMrSI } },
+ { "pushV", { RMrDI } },
/* 58 */
- { "popV", RMrAX, XX, XX },
- { "popV", RMrCX, XX, XX },
- { "popV", RMrDX, XX, XX },
- { "popV", RMrBX, XX, XX },
- { "popV", RMrSP, XX, XX },
- { "popV", RMrBP, XX, XX },
- { "popV", RMrSI, XX, XX },
- { "popV", RMrDI, XX, XX },
+ { "popV", { RMrAX } },
+ { "popV", { RMrCX } },
+ { "popV", { RMrDX } },
+ { "popV", { RMrBX } },
+ { "popV", { RMrSP } },
+ { "popV", { RMrBP } },
+ { "popV", { RMrSI } },
+ { "popV", { RMrDI } },
/* 60 */
- { "pusha{P|}", XX, XX, XX },
- { "popa{P|}", XX, XX, XX },
- { "bound{S|}", Gv, Ma, XX },
{ X86_64_0 },
- { "(bad)", XX, XX, XX }, /* seg fs */
- { "(bad)", XX, XX, XX }, /* seg gs */
- { "(bad)", XX, XX, XX }, /* op size prefix */
- { "(bad)", XX, XX, XX }, /* adr size prefix */
+ { X86_64_1 },
+ { X86_64_2 },
+ { X86_64_3 },
+ { "(bad)", { XX } }, /* seg fs */
+ { "(bad)", { XX } }, /* seg gs */
+ { "(bad)", { XX } }, /* op size prefix */
+ { "(bad)", { XX } }, /* adr size prefix */
/* 68 */
- { "pushT", Iq, XX, XX },
- { "imulS", Gv, Ev, Iv },
- { "pushT", sIb, XX, XX },
- { "imulS", Gv, Ev, sIb },
- { "ins{b||b|}", Ybr, indirDX, XX },
- { "ins{R||R|}", Yvr, indirDX, XX },
- { "outs{b||b|}", indirDXr, Xb, XX },
- { "outs{R||R|}", indirDXr, Xv, XX },
+ { "pushT", { Iq } },
+ { "imulS", { Gv, Ev, Iv } },
+ { "pushT", { sIb } },
+ { "imulS", { Gv, Ev, sIb } },
+ { "ins{b||b|}", { Ybr, indirDX } },
+ { "ins{R||G|}", { Yzr, indirDX } },
+ { "outs{b||b|}", { indirDXr, Xb } },
+ { "outs{R||G|}", { indirDXr, Xz } },
/* 70 */
- { "joH", Jb, XX, cond_jump_flag },
- { "jnoH", Jb, XX, cond_jump_flag },
- { "jbH", Jb, XX, cond_jump_flag },
- { "jaeH", Jb, XX, cond_jump_flag },
- { "jeH", Jb, XX, cond_jump_flag },
- { "jneH", Jb, XX, cond_jump_flag },
- { "jbeH", Jb, XX, cond_jump_flag },
- { "jaH", Jb, XX, cond_jump_flag },
+ { "joH", { Jb, XX, cond_jump_flag } },
+ { "jnoH", { Jb, XX, cond_jump_flag } },
+ { "jbH", { Jb, XX, cond_jump_flag } },
+ { "jaeH", { Jb, XX, cond_jump_flag } },
+ { "jeH", { Jb, XX, cond_jump_flag } },
+ { "jneH", { Jb, XX, cond_jump_flag } },
+ { "jbeH", { Jb, XX, cond_jump_flag } },
+ { "jaH", { Jb, XX, cond_jump_flag } },
/* 78 */
- { "jsH", Jb, XX, cond_jump_flag },
- { "jnsH", Jb, XX, cond_jump_flag },
- { "jpH", Jb, XX, cond_jump_flag },
- { "jnpH", Jb, XX, cond_jump_flag },
- { "jlH", Jb, XX, cond_jump_flag },
- { "jgeH", Jb, XX, cond_jump_flag },
- { "jleH", Jb, XX, cond_jump_flag },
- { "jgH", Jb, XX, cond_jump_flag },
+ { "jsH", { Jb, XX, cond_jump_flag } },
+ { "jnsH", { Jb, XX, cond_jump_flag } },
+ { "jpH", { Jb, XX, cond_jump_flag } },
+ { "jnpH", { Jb, XX, cond_jump_flag } },
+ { "jlH", { Jb, XX, cond_jump_flag } },
+ { "jgeH", { Jb, XX, cond_jump_flag } },
+ { "jleH", { Jb, XX, cond_jump_flag } },
+ { "jgH", { Jb, XX, cond_jump_flag } },
/* 80 */
{ GRP1b },
{ GRP1S },
- { "(bad)", XX, XX, XX },
+ { "(bad)", { XX } },
{ GRP1Ss },
- { "testB", Eb, Gb, XX },
- { "testS", Ev, Gv, XX },
- { "xchgB", Eb, Gb, XX },
- { "xchgS", Ev, Gv, XX },
+ { "testB", { Eb, Gb } },
+ { "testS", { Ev, Gv } },
+ { "xchgB", { Eb, Gb } },
+ { "xchgS", { Ev, Gv } },
/* 88 */
- { "movB", Eb, Gb, XX },
- { "movS", Ev, Gv, XX },
- { "movB", Gb, Eb, XX },
- { "movS", Gv, Ev, XX },
- { "movQ", Sv, Sw, XX },
- { "leaS", Gv, M, XX },
- { "movQ", Sw, Sv, XX },
- { "popU", stackEv, XX, XX },
+ { "movB", { Eb, Gb } },
+ { "movS", { Ev, Gv } },
+ { "movB", { Gb, Eb } },
+ { "movS", { Gv, Ev } },
+ { "movD", { Sv, Sw } },
+ { "leaS", { Gv, M } },
+ { "movD", { Sw, Sv } },
+ { GRP1a },
/* 90 */
- { "nop", NOP_Fixup, 0, XX, XX },
- { "xchgS", RMeCX, eAX, XX },
- { "xchgS", RMeDX, eAX, XX },
- { "xchgS", RMeBX, eAX, XX },
- { "xchgS", RMeSP, eAX, XX },
- { "xchgS", RMeBP, eAX, XX },
- { "xchgS", RMeSI, eAX, XX },
- { "xchgS", RMeDI, eAX, XX },
+ { PREGRP38 },
+ { "xchgS", { RMeCX, eAX } },
+ { "xchgS", { RMeDX, eAX } },
+ { "xchgS", { RMeBX, eAX } },
+ { "xchgS", { RMeSP, eAX } },
+ { "xchgS", { RMeBP, eAX } },
+ { "xchgS", { RMeSI, eAX } },
+ { "xchgS", { RMeDI, eAX } },
/* 98 */
- { "cW{tR||tR|}", XX, XX, XX },
- { "cR{tO||tO|}", XX, XX, XX },
- { "Jcall{T|}", Ap, XX, XX },
- { "(bad)", XX, XX, XX }, /* fwait */
- { "pushfT", XX, XX, XX },
- { "popfT", XX, XX, XX },
- { "sahf{|}", XX, XX, XX },
- { "lahf{|}", XX, XX, XX },
+ { "cW{t||t|}R", { XX } },
+ { "cR{t||t|}O", { XX } },
+ { "Jcall{T|}", { Ap } },
+ { "(bad)", { XX } }, /* fwait */
+ { "pushfT", { XX } },
+ { "popfT", { XX } },
+ { "sahf{|}", { XX } },
+ { "lahf{|}", { XX } },
/* a0 */
- { "movB", AL, Ob, XX },
- { "movS", eAX, Ov, XX },
- { "movB", Ob, AL, XX },
- { "movS", Ov, eAX, XX },
- { "movs{b||b|}", Ybr, Xb, XX },
- { "movs{R||R|}", Yvr, Xv, XX },
- { "cmps{b||b|}", Xb, Yb, XX },
- { "cmps{R||R|}", Xv, Yv, XX },
+ { "movB", { AL, Ob } },
+ { "movS", { eAX, Ov } },
+ { "movB", { Ob, AL } },
+ { "movS", { Ov, eAX } },
+ { "movs{b||b|}", { Ybr, Xb } },
+ { "movs{R||R|}", { Yvr, Xv } },
+ { "cmps{b||b|}", { Xb, Yb } },
+ { "cmps{R||R|}", { Xv, Yv } },
/* a8 */
- { "testB", AL, Ib, XX },
- { "testS", eAX, Iv, XX },
- { "stosB", Ybr, AL, XX },
- { "stosS", Yvr, eAX, XX },
- { "lodsB", ALr, Xb, XX },
- { "lodsS", eAXr, Xv, XX },
- { "scasB", AL, Yb, XX },
- { "scasS", eAX, Yv, XX },
+ { "testB", { AL, Ib } },
+ { "testS", { eAX, Iv } },
+ { "stosB", { Ybr, AL } },
+ { "stosS", { Yvr, eAX } },
+ { "lodsB", { ALr, Xb } },
+ { "lodsS", { eAXr, Xv } },
+ { "scasB", { AL, Yb } },
+ { "scasS", { eAX, Yv } },
/* b0 */
- { "movB", RMAL, Ib, XX },
- { "movB", RMCL, Ib, XX },
- { "movB", RMDL, Ib, XX },
- { "movB", RMBL, Ib, XX },
- { "movB", RMAH, Ib, XX },
- { "movB", RMCH, Ib, XX },
- { "movB", RMDH, Ib, XX },
- { "movB", RMBH, Ib, XX },
+ { "movB", { RMAL, Ib } },
+ { "movB", { RMCL, Ib } },
+ { "movB", { RMDL, Ib } },
+ { "movB", { RMBL, Ib } },
+ { "movB", { RMAH, Ib } },
+ { "movB", { RMCH, Ib } },
+ { "movB", { RMDH, Ib } },
+ { "movB", { RMBH, Ib } },
/* b8 */
- { "movS", RMeAX, Iv64, XX },
- { "movS", RMeCX, Iv64, XX },
- { "movS", RMeDX, Iv64, XX },
- { "movS", RMeBX, Iv64, XX },
- { "movS", RMeSP, Iv64, XX },
- { "movS", RMeBP, Iv64, XX },
- { "movS", RMeSI, Iv64, XX },
- { "movS", RMeDI, Iv64, XX },
+ { "movS", { RMeAX, Iv64 } },
+ { "movS", { RMeCX, Iv64 } },
+ { "movS", { RMeDX, Iv64 } },
+ { "movS", { RMeBX, Iv64 } },
+ { "movS", { RMeSP, Iv64 } },
+ { "movS", { RMeBP, Iv64 } },
+ { "movS", { RMeSI, Iv64 } },
+ { "movS", { RMeDI, Iv64 } },
/* c0 */
{ GRP2b },
{ GRP2S },
- { "retT", Iw, XX, XX },
- { "retT", XX, XX, XX },
- { "les{S|}", Gv, Mp, XX },
- { "ldsS", Gv, Mp, XX },
- { "movA", Eb, Ib, XX },
- { "movQ", Ev, Iv, XX },
+ { "retT", { Iw } },
+ { "retT", { XX } },
+ { "les{S|}", { Gv, Mp } },
+ { "ldsS", { Gv, Mp } },
+ { GRP11_C6 },
+ { GRP11_C7 },
/* c8 */
- { "enterT", Iw, Ib, XX },
- { "leaveT", XX, XX, XX },
- { "lretP", Iw, XX, XX },
- { "lretP", XX, XX, XX },
- { "int3", XX, XX, XX },
- { "int", Ib, XX, XX },
- { "into{|}", XX, XX, XX },
- { "iretP", XX, XX, XX },
+ { "enterT", { Iw, Ib } },
+ { "leaveT", { XX } },
+ { "lretP", { Iw } },
+ { "lretP", { XX } },
+ { "int3", { XX } },
+ { "int", { Ib } },
+ { "into{|}", { XX } },
+ { "iretP", { XX } },
/* d0 */
{ GRP2b_one },
{ GRP2S_one },
{ GRP2b_cl },
{ GRP2S_cl },
- { "aam{|}", sIb, XX, XX },
- { "aad{|}", sIb, XX, XX },
- { "(bad)", XX, XX, XX },
- { "xlat", DSBX, XX, XX },
+ { "aam{|}", { sIb } },
+ { "aad{|}", { sIb } },
+ { "(bad)", { XX } },
+ { "xlat", { DSBX } },
/* d8 */
{ FLOAT },
{ FLOAT },
@@ -769,39 +855,39 @@ static const struct dis386 dis386[] = {
{ FLOAT },
{ FLOAT },
/* e0 */
- { "loopneFH", Jb, XX, loop_jcxz_flag },
- { "loopeFH", Jb, XX, loop_jcxz_flag },
- { "loopFH", Jb, XX, loop_jcxz_flag },
- { "jEcxzH", Jb, XX, loop_jcxz_flag },
- { "inB", AL, Ib, XX },
- { "inS", eAX, Ib, XX },
- { "outB", Ib, AL, XX },
- { "outS", Ib, eAX, XX },
+ { "loopneFH", { Jb, XX, loop_jcxz_flag } },
+ { "loopeFH", { Jb, XX, loop_jcxz_flag } },
+ { "loopFH", { Jb, XX, loop_jcxz_flag } },
+ { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
+ { "inB", { AL, Ib } },
+ { "inG", { zAX, Ib } },
+ { "outB", { Ib, AL } },
+ { "outG", { Ib, zAX } },
/* e8 */
- { "callT", Jv, XX, XX },
- { "jmpT", Jv, XX, XX },
- { "Jjmp{T|}", Ap, XX, XX },
- { "jmp", Jb, XX, XX },
- { "inB", AL, indirDX, XX },
- { "inS", eAX, indirDX, XX },
- { "outB", indirDX, AL, XX },
- { "outS", indirDX, eAX, XX },
+ { "callT", { Jv } },
+ { "jmpT", { Jv } },
+ { "Jjmp{T|}", { Ap } },
+ { "jmp", { Jb } },
+ { "inB", { AL, indirDX } },
+ { "inG", { zAX, indirDX } },
+ { "outB", { indirDX, AL } },
+ { "outG", { indirDX, zAX } },
/* f0 */
- { "(bad)", XX, XX, XX }, /* lock prefix */
- { "icebp", XX, XX, XX },
- { "(bad)", XX, XX, XX }, /* repne */
- { "(bad)", XX, XX, XX }, /* repz */
- { "hlt", XX, XX, XX },
- { "cmc", XX, XX, XX },
+ { "(bad)", { XX } }, /* lock prefix */
+ { "icebp", { XX } },
+ { "(bad)", { XX } }, /* repne */
+ { "(bad)", { XX } }, /* repz */
+ { "hlt", { XX } },
+ { "cmc", { XX } },
{ GRP3b },
{ GRP3S },
/* f8 */
- { "clc", XX, XX, XX },
- { "stc", XX, XX, XX },
- { "cli", XX, XX, XX },
- { "sti", XX, XX, XX },
- { "cld", XX, XX, XX },
- { "std", XX, XX, XX },
+ { "clc", { XX } },
+ { "stc", { XX } },
+ { "cli", { XX } },
+ { "sti", { XX } },
+ { "cld", { XX } },
+ { "std", { XX } },
{ GRP4 },
{ GRP5 },
};
@@ -810,102 +896,102 @@ static const struct dis386 dis386_twobyte[] = {
/* 00 */
{ GRP6 },
{ GRP7 },
- { "larS", Gv, Ew, XX },
- { "lslS", Gv, Ew, XX },
- { "(bad)", XX, XX, XX },
- { "syscall", XX, XX, XX },
- { "clts", XX, XX, XX },
- { "sysretP", XX, XX, XX },
+ { "larS", { Gv, Ew } },
+ { "lslS", { Gv, Ew } },
+ { "(bad)", { XX } },
+ { "syscall", { XX } },
+ { "clts", { XX } },
+ { "sysretP", { XX } },
/* 08 */
- { "invd", XX, XX, XX },
- { "wbinvd", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "ud2a", XX, XX, XX },
- { "(bad)", XX, XX, XX },
+ { "invd", { XX } },
+ { "wbinvd", { XX } },
+ { "(bad)", { XX } },
+ { "ud2a", { XX } },
+ { "(bad)", { XX } },
{ GRPAMD },
- { "femms", XX, XX, XX },
- { "", MX, EM, OPSUF }, /* See OP_3DNowSuffix. */
+ { "femms", { XX } },
+ { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
/* 10 */
{ PREGRP8 },
{ PREGRP9 },
{ PREGRP30 },
- { "movlpX", EX, XM, SIMD_Fixup, 'h' },
- { "unpcklpX", XM, EX, XX },
- { "unpckhpX", XM, EX, XX },
+ { "movlpX", { EXq, XM, { SIMD_Fixup, 'h' } } },
+ { "unpcklpX", { XM, EXq } },
+ { "unpckhpX", { XM, EXq } },
{ PREGRP31 },
- { "movhpX", EX, XM, SIMD_Fixup, 'l' },
+ { "movhpX", { EXq, XM, { SIMD_Fixup, 'l' } } },
/* 18 */
- { GRP14 },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
+ { GRP16 },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "nopQ", { Ev } },
/* 20 */
- { "movZ", Rm, Cm, XX },
- { "movZ", Rm, Dm, XX },
- { "movZ", Cm, Rm, XX },
- { "movZ", Dm, Rm, XX },
- { "movL", Rd, Td, XX },
- { "(bad)", XX, XX, XX },
- { "movL", Td, Rd, XX },
- { "(bad)", XX, XX, XX },
+ { "movZ", { Rm, Cm } },
+ { "movZ", { Rm, Dm } },
+ { "movZ", { Cm, Rm } },
+ { "movZ", { Dm, Rm } },
+ { "movL", { Rd, Td } },
+ { "(bad)", { XX } },
+ { "movL", { Td, Rd } },
+ { "(bad)", { XX } },
/* 28 */
- { "movapX", XM, EX, XX },
- { "movapX", EX, XM, XX },
+ { "movapX", { XM, EXx } },
+ { "movapX", { EXx, XM } },
{ PREGRP2 },
- { "movntpX", Ev, XM, XX },
+ { PREGRP33 },
{ PREGRP4 },
{ PREGRP3 },
- { "ucomisX", XM,EX, XX },
- { "comisX", XM,EX, XX },
+ { PREGRP93 },
+ { PREGRP94 },
/* 30 */
- { "wrmsr", XX, XX, XX },
- { "rdtsc", XX, XX, XX },
- { "rdmsr", XX, XX, XX },
- { "rdpmc", XX, XX, XX },
- { "sysenter", XX, XX, XX },
- { "sysexit", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
+ { "wrmsr", { XX } },
+ { "rdtsc", { XX } },
+ { "rdmsr", { XX } },
+ { "rdpmc", { XX } },
+ { "sysenter", { XX } },
+ { "sysexit", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 38 */
{ THREE_BYTE_0 },
- { "(bad)", XX, XX, XX },
+ { "(bad)", { XX } },
{ THREE_BYTE_1 },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 40 */
- { "cmovo", Gv, Ev, XX },
- { "cmovno", Gv, Ev, XX },
- { "cmovb", Gv, Ev, XX },
- { "cmovae", Gv, Ev, XX },
- { "cmove", Gv, Ev, XX },
- { "cmovne", Gv, Ev, XX },
- { "cmovbe", Gv, Ev, XX },
- { "cmova", Gv, Ev, XX },
+ { "cmovo", { Gv, Ev } },
+ { "cmovno", { Gv, Ev } },
+ { "cmovb", { Gv, Ev } },
+ { "cmovae", { Gv, Ev } },
+ { "cmove", { Gv, Ev } },
+ { "cmovne", { Gv, Ev } },
+ { "cmovbe", { Gv, Ev } },
+ { "cmova", { Gv, Ev } },
/* 48 */
- { "cmovs", Gv, Ev, XX },
- { "cmovns", Gv, Ev, XX },
- { "cmovp", Gv, Ev, XX },
- { "cmovnp", Gv, Ev, XX },
- { "cmovl", Gv, Ev, XX },
- { "cmovge", Gv, Ev, XX },
- { "cmovle", Gv, Ev, XX },
- { "cmovg", Gv, Ev, XX },
+ { "cmovs", { Gv, Ev } },
+ { "cmovns", { Gv, Ev } },
+ { "cmovp", { Gv, Ev } },
+ { "cmovnp", { Gv, Ev } },
+ { "cmovl", { Gv, Ev } },
+ { "cmovge", { Gv, Ev } },
+ { "cmovle", { Gv, Ev } },
+ { "cmovg", { Gv, Ev } },
/* 50 */
- { "movmskpX", Gdq, XS, XX },
+ { "movmskpX", { Gdq, XS } },
{ PREGRP13 },
{ PREGRP12 },
{ PREGRP11 },
- { "andpX", XM, EX, XX },
- { "andnpX", XM, EX, XX },
- { "orpX", XM, EX, XX },
- { "xorpX", XM, EX, XX },
+ { "andpX", { XM, EXx } },
+ { "andnpX", { XM, EXx } },
+ { "orpX", { XM, EXx } },
+ { "xorpX", { XM, EXx } },
/* 58 */
{ PREGRP0 },
{ PREGRP10 },
@@ -916,185 +1002,185 @@ static const struct dis386 dis386_twobyte[] = {
{ PREGRP5 },
{ PREGRP6 },
/* 60 */
- { "punpcklbw", MX, EM, XX },
- { "punpcklwd", MX, EM, XX },
- { "punpckldq", MX, EM, XX },
- { "packsswb", MX, EM, XX },
- { "pcmpgtb", MX, EM, XX },
- { "pcmpgtw", MX, EM, XX },
- { "pcmpgtd", MX, EM, XX },
- { "packuswb", MX, EM, XX },
+ { PREGRP95 },
+ { PREGRP96 },
+ { PREGRP97 },
+ { "packsswb", { MX, EM } },
+ { "pcmpgtb", { MX, EM } },
+ { "pcmpgtw", { MX, EM } },
+ { "pcmpgtd", { MX, EM } },
+ { "packuswb", { MX, EM } },
/* 68 */
- { "punpckhbw", MX, EM, XX },
- { "punpckhwd", MX, EM, XX },
- { "punpckhdq", MX, EM, XX },
- { "packssdw", MX, EM, XX },
+ { "punpckhbw", { MX, EM } },
+ { "punpckhwd", { MX, EM } },
+ { "punpckhdq", { MX, EM } },
+ { "packssdw", { MX, EM } },
{ PREGRP26 },
{ PREGRP24 },
- { "movd", MX, Edq, XX },
+ { "movd", { MX, Edq } },
{ PREGRP19 },
/* 70 */
{ PREGRP22 },
- { GRP10 },
- { GRP11 },
{ GRP12 },
- { "pcmpeqb", MX, EM, XX },
- { "pcmpeqw", MX, EM, XX },
- { "pcmpeqd", MX, EM, XX },
- { "emms", XX, XX, XX },
+ { GRP13 },
+ { GRP14 },
+ { "pcmpeqb", { MX, EM } },
+ { "pcmpeqw", { MX, EM } },
+ { "pcmpeqd", { MX, EM } },
+ { "emms", { XX } },
/* 78 */
- { "vmread", Em, Gm, XX },
- { "vmwrite", Gm, Em, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
+ { PREGRP34 },
+ { PREGRP35 },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ PREGRP28 },
{ PREGRP29 },
{ PREGRP23 },
{ PREGRP20 },
/* 80 */
- { "joH", Jv, XX, cond_jump_flag },
- { "jnoH", Jv, XX, cond_jump_flag },
- { "jbH", Jv, XX, cond_jump_flag },
- { "jaeH", Jv, XX, cond_jump_flag },
- { "jeH", Jv, XX, cond_jump_flag },
- { "jneH", Jv, XX, cond_jump_flag },
- { "jbeH", Jv, XX, cond_jump_flag },
- { "jaH", Jv, XX, cond_jump_flag },
+ { "joH", { Jv, XX, cond_jump_flag } },
+ { "jnoH", { Jv, XX, cond_jump_flag } },
+ { "jbH", { Jv, XX, cond_jump_flag } },
+ { "jaeH", { Jv, XX, cond_jump_flag } },
+ { "jeH", { Jv, XX, cond_jump_flag } },
+ { "jneH", { Jv, XX, cond_jump_flag } },
+ { "jbeH", { Jv, XX, cond_jump_flag } },
+ { "jaH", { Jv, XX, cond_jump_flag } },
/* 88 */
- { "jsH", Jv, XX, cond_jump_flag },
- { "jnsH", Jv, XX, cond_jump_flag },
- { "jpH", Jv, XX, cond_jump_flag },
- { "jnpH", Jv, XX, cond_jump_flag },
- { "jlH", Jv, XX, cond_jump_flag },
- { "jgeH", Jv, XX, cond_jump_flag },
- { "jleH", Jv, XX, cond_jump_flag },
- { "jgH", Jv, XX, cond_jump_flag },
+ { "jsH", { Jv, XX, cond_jump_flag } },
+ { "jnsH", { Jv, XX, cond_jump_flag } },
+ { "jpH", { Jv, XX, cond_jump_flag } },
+ { "jnpH", { Jv, XX, cond_jump_flag } },
+ { "jlH", { Jv, XX, cond_jump_flag } },
+ { "jgeH", { Jv, XX, cond_jump_flag } },
+ { "jleH", { Jv, XX, cond_jump_flag } },
+ { "jgH", { Jv, XX, cond_jump_flag } },
/* 90 */
- { "seto", Eb, XX, XX },
- { "setno", Eb, XX, XX },
- { "setb", Eb, XX, XX },
- { "setae", Eb, XX, XX },
- { "sete", Eb, XX, XX },
- { "setne", Eb, XX, XX },
- { "setbe", Eb, XX, XX },
- { "seta", Eb, XX, XX },
+ { "seto", { Eb } },
+ { "setno", { Eb } },
+ { "setb", { Eb } },
+ { "setae", { Eb } },
+ { "sete", { Eb } },
+ { "setne", { Eb } },
+ { "setbe", { Eb } },
+ { "seta", { Eb } },
/* 98 */
- { "sets", Eb, XX, XX },
- { "setns", Eb, XX, XX },
- { "setp", Eb, XX, XX },
- { "setnp", Eb, XX, XX },
- { "setl", Eb, XX, XX },
- { "setge", Eb, XX, XX },
- { "setle", Eb, XX, XX },
- { "setg", Eb, XX, XX },
+ { "sets", { Eb } },
+ { "setns", { Eb } },
+ { "setp", { Eb } },
+ { "setnp", { Eb } },
+ { "setl", { Eb } },
+ { "setge", { Eb } },
+ { "setle", { Eb } },
+ { "setg", { Eb } },
/* a0 */
- { "pushT", fs, XX, XX },
- { "popT", fs, XX, XX },
- { "cpuid", XX, XX, XX },
- { "btS", Ev, Gv, XX },
- { "shldS", Ev, Gv, Ib },
- { "shldS", Ev, Gv, CL },
+ { "pushT", { fs } },
+ { "popT", { fs } },
+ { "cpuid", { XX } },
+ { "btS", { Ev, Gv } },
+ { "shldS", { Ev, Gv, Ib } },
+ { "shldS", { Ev, Gv, CL } },
{ GRPPADLCK2 },
{ GRPPADLCK1 },
/* a8 */
- { "pushT", gs, XX, XX },
- { "popT", gs, XX, XX },
- { "rsm", XX, XX, XX },
- { "btsS", Ev, Gv, XX },
- { "shrdS", Ev, Gv, Ib },
- { "shrdS", Ev, Gv, CL },
- { GRP13 },
- { "imulS", Gv, Ev, XX },
+ { "pushT", { gs } },
+ { "popT", { gs } },
+ { "rsm", { XX } },
+ { "btsS", { Ev, Gv } },
+ { "shrdS", { Ev, Gv, Ib } },
+ { "shrdS", { Ev, Gv, CL } },
+ { GRP15 },
+ { "imulS", { Gv, Ev } },
/* b0 */
- { "cmpxchgB", Eb, Gb, XX },
- { "cmpxchgS", Ev, Gv, XX },
- { "lssS", Gv, Mp, XX },
- { "btrS", Ev, Gv, XX },
- { "lfsS", Gv, Mp, XX },
- { "lgsS", Gv, Mp, XX },
- { "movz{bR|x|bR|x}", Gv, Eb, XX },
- { "movz{wR|x|wR|x}", Gv, Ew, XX }, /* yes, there really is movzww ! */
+ { "cmpxchgB", { Eb, Gb } },
+ { "cmpxchgS", { Ev, Gv } },
+ { "lssS", { Gv, Mp } },
+ { "btrS", { Ev, Gv } },
+ { "lfsS", { Gv, Mp } },
+ { "lgsS", { Gv, Mp } },
+ { "movz{bR|x|bR|x}", { Gv, Eb } },
+ { "movz{wR|x|wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
/* b8 */
- { "(bad)", XX, XX, XX },
- { "ud2b", XX, XX, XX },
+ { PREGRP37 },
+ { "ud2b", { XX } },
{ GRP8 },
- { "btcS", Ev, Gv, XX },
- { "bsfS", Gv, Ev, XX },
- { "bsrS", Gv, Ev, XX },
- { "movs{bR|x|bR|x}", Gv, Eb, XX },
- { "movs{wR|x|wR|x}", Gv, Ew, XX }, /* yes, there really is movsww ! */
+ { "btcS", { Ev, Gv } },
+ { "bsfS", { Gv, Ev } },
+ { PREGRP36 },
+ { "movs{bR|x|bR|x}", { Gv, Eb } },
+ { "movs{wR|x|wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
/* c0 */
- { "xaddB", Eb, Gb, XX },
- { "xaddS", Ev, Gv, XX },
+ { "xaddB", { Eb, Gb } },
+ { "xaddS", { Ev, Gv } },
{ PREGRP1 },
- { "movntiS", Ev, Gv, XX },
- { "pinsrw", MX, Edqw, Ib },
- { "pextrw", Gdq, MS, Ib },
- { "shufpX", XM, EX, Ib },
+ { "movntiS", { Ev, Gv } },
+ { "pinsrw", { MX, Edqw, Ib } },
+ { "pextrw", { Gdq, MS, Ib } },
+ { "shufpX", { XM, EXx, Ib } },
{ GRP9 },
/* c8 */
- { "bswap", RMeAX, XX, XX },
- { "bswap", RMeCX, XX, XX },
- { "bswap", RMeDX, XX, XX },
- { "bswap", RMeBX, XX, XX },
- { "bswap", RMeSP, XX, XX },
- { "bswap", RMeBP, XX, XX },
- { "bswap", RMeSI, XX, XX },
- { "bswap", RMeDI, XX, XX },
+ { "bswap", { RMeAX } },
+ { "bswap", { RMeCX } },
+ { "bswap", { RMeDX } },
+ { "bswap", { RMeBX } },
+ { "bswap", { RMeSP } },
+ { "bswap", { RMeBP } },
+ { "bswap", { RMeSI } },
+ { "bswap", { RMeDI } },
/* d0 */
{ PREGRP27 },
- { "psrlw", MX, EM, XX },
- { "psrld", MX, EM, XX },
- { "psrlq", MX, EM, XX },
- { "paddq", MX, EM, XX },
- { "pmullw", MX, EM, XX },
+ { "psrlw", { MX, EM } },
+ { "psrld", { MX, EM } },
+ { "psrlq", { MX, EM } },
+ { "paddq", { MX, EM } },
+ { "pmullw", { MX, EM } },
{ PREGRP21 },
- { "pmovmskb", Gdq, MS, XX },
+ { "pmovmskb", { Gdq, MS } },
/* d8 */
- { "psubusb", MX, EM, XX },
- { "psubusw", MX, EM, XX },
- { "pminub", MX, EM, XX },
- { "pand", MX, EM, XX },
- { "paddusb", MX, EM, XX },
- { "paddusw", MX, EM, XX },
- { "pmaxub", MX, EM, XX },
- { "pandn", MX, EM, XX },
+ { "psubusb", { MX, EM } },
+ { "psubusw", { MX, EM } },
+ { "pminub", { MX, EM } },
+ { "pand", { MX, EM } },
+ { "paddusb", { MX, EM } },
+ { "paddusw", { MX, EM } },
+ { "pmaxub", { MX, EM } },
+ { "pandn", { MX, EM } },
/* e0 */
- { "pavgb", MX, EM, XX },
- { "psraw", MX, EM, XX },
- { "psrad", MX, EM, XX },
- { "pavgw", MX, EM, XX },
- { "pmulhuw", MX, EM, XX },
- { "pmulhw", MX, EM, XX },
+ { "pavgb", { MX, EM } },
+ { "psraw", { MX, EM } },
+ { "psrad", { MX, EM } },
+ { "pavgw", { MX, EM } },
+ { "pmulhuw", { MX, EM } },
+ { "pmulhw", { MX, EM } },
{ PREGRP15 },
{ PREGRP25 },
/* e8 */
- { "psubsb", MX, EM, XX },
- { "psubsw", MX, EM, XX },
- { "pminsw", MX, EM, XX },
- { "por", MX, EM, XX },
- { "paddsb", MX, EM, XX },
- { "paddsw", MX, EM, XX },
- { "pmaxsw", MX, EM, XX },
- { "pxor", MX, EM, XX },
+ { "psubsb", { MX, EM } },
+ { "psubsw", { MX, EM } },
+ { "pminsw", { MX, EM } },
+ { "por", { MX, EM } },
+ { "paddsb", { MX, EM } },
+ { "paddsw", { MX, EM } },
+ { "pmaxsw", { MX, EM } },
+ { "pxor", { MX, EM } },
/* f0 */
{ PREGRP32 },
- { "psllw", MX, EM, XX },
- { "pslld", MX, EM, XX },
- { "psllq", MX, EM, XX },
- { "pmuludq", MX, EM, XX },
- { "pmaddwd", MX, EM, XX },
- { "psadbw", MX, EM, XX },
+ { "psllw", { MX, EM } },
+ { "pslld", { MX, EM } },
+ { "psllq", { MX, EM } },
+ { "pmuludq", { MX, EM } },
+ { "pmaddwd", { MX, EM } },
+ { "psadbw", { MX, EM } },
{ PREGRP18 },
/* f8 */
- { "psubb", MX, EM, XX },
- { "psubw", MX, EM, XX },
- { "psubd", MX, EM, XX },
- { "psubq", MX, EM, XX },
- { "paddb", MX, EM, XX },
- { "paddw", MX, EM, XX },
- { "paddd", MX, EM, XX },
- { "(bad)", XX, XX, XX }
+ { "psubb", { MX, EM } },
+ { "psubw", { MX, EM } },
+ { "psubd", { MX, EM } },
+ { "psubq", { MX, EM } },
+ { "paddb", { MX, EM } },
+ { "paddw", { MX, EM } },
+ { "paddd", { MX, EM } },
+ { "(bad)", { XX } },
};
static const unsigned char onebyte_has_modrm[256] = {
@@ -1124,7 +1210,7 @@ static const unsigned char twobyte_has_modrm[256] = {
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
/* ------------------------------- */
/* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
- /* 10 */ 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, /* 1f */
+ /* 10 */ 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1, /* 1f */
/* 20 */ 1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1, /* 2f */
/* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
/* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
@@ -1134,7 +1220,7 @@ static const unsigned char twobyte_has_modrm[256] = {
/* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
/* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
/* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
- /* b0 */ 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1, /* bf */
+ /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
/* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
/* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
/* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
@@ -1143,17 +1229,17 @@ static const unsigned char twobyte_has_modrm[256] = {
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
};
-static const unsigned char twobyte_uses_SSE_prefix[256] = {
+static const unsigned char twobyte_uses_DATA_prefix[256] = {
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
/* ------------------------------- */
/* 00 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0f */
/* 10 */ 1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0, /* 1f */
- /* 20 */ 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0, /* 2f */
+ /* 20 */ 0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0, /* 2f */
/* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
/* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */
/* 50 */ 0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* 5f */
/* 60 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1, /* 6f */
- /* 70 */ 1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, /* 7f */
+ /* 70 */ 1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1, /* 7f */
/* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
/* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */
/* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */
@@ -1166,6 +1252,196 @@ static const unsigned char twobyte_uses_SSE_prefix[256] = {
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
};
+static const unsigned char twobyte_uses_REPNZ_prefix[256] = {
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+ /* ------------------------------- */
+ /* 00 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0f */
+ /* 10 */ 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 1f */
+ /* 20 */ 0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0, /* 2f */
+ /* 30 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 3f */
+ /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */
+ /* 50 */ 0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1, /* 5f */
+ /* 60 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 6f */
+ /* 70 */ 1,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0, /* 7f */
+ /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
+ /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */
+ /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */
+ /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* bf */
+ /* c0 */ 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, /* cf */
+ /* d0 */ 1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, /* df */
+ /* e0 */ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, /* ef */
+ /* f0 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ff */
+ /* ------------------------------- */
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+};
+
+static const unsigned char twobyte_uses_REPZ_prefix[256] = {
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+ /* ------------------------------- */
+ /* 00 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0f */
+ /* 10 */ 1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0, /* 1f */
+ /* 20 */ 0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0, /* 2f */
+ /* 30 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 3f */
+ /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */
+ /* 50 */ 0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* 5f */
+ /* 60 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 6f */
+ /* 70 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1, /* 7f */
+ /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
+ /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */
+ /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */
+ /* b0 */ 0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0, /* bf */
+ /* c0 */ 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, /* cf */
+ /* d0 */ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, /* df */
+ /* e0 */ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, /* ef */
+ /* f0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ff */
+ /* ------------------------------- */
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+};
+
+/* This is used to determine if opcode 0f 38 XX uses DATA prefix. */
+static const unsigned char threebyte_0x38_uses_DATA_prefix[256] = {
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+ /* ------------------------------- */
+ /* 00 */ 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0, /* 0f */
+ /* 10 */ 1,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0, /* 1f */
+ /* 20 */ 1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0, /* 2f */
+ /* 30 */ 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1, /* 3f */
+ /* 40 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */
+ /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 5f */
+ /* 60 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 6f */
+ /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 7f */
+ /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
+ /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */
+ /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */
+ /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* bf */
+ /* c0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* cf */
+ /* d0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* df */
+ /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ef */
+ /* f0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ff */
+ /* ------------------------------- */
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+};
+
+/* This is used to determine if opcode 0f 38 XX uses REPNZ prefix. */
+static const unsigned char threebyte_0x38_uses_REPNZ_prefix[256] = {
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+ /* ------------------------------- */
+ /* 00 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0f */
+ /* 10 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 1f */
+ /* 20 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 2f */
+ /* 30 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 3f */
+ /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */
+ /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 5f */
+ /* 60 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 6f */
+ /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 7f */
+ /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
+ /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */
+ /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */
+ /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* bf */
+ /* c0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* cf */
+ /* d0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* df */
+ /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ef */
+ /* f0 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ff */
+ /* ------------------------------- */
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+};
+
+/* This is used to determine if opcode 0f 38 XX uses REPZ prefix. */
+static const unsigned char threebyte_0x38_uses_REPZ_prefix[256] = {
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+ /* ------------------------------- */
+ /* 00 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0f */
+ /* 10 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 1f */
+ /* 20 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 2f */
+ /* 30 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 3f */
+ /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */
+ /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 5f */
+ /* 60 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 6f */
+ /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 7f */
+ /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
+ /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */
+ /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */
+ /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* bf */
+ /* c0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* cf */
+ /* d0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* df */
+ /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ef */
+ /* f0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ff */
+ /* ------------------------------- */
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+};
+
+/* This is used to determine if opcode 0f 3a XX uses DATA prefix. */
+static const unsigned char threebyte_0x3a_uses_DATA_prefix[256] = {
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+ /* ------------------------------- */
+ /* 00 */ 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, /* 0f */
+ /* 10 */ 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* 1f */
+ /* 20 */ 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 2f */
+ /* 30 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 3f */
+ /* 40 */ 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */
+ /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 5f */
+ /* 60 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, /* 6f */
+ /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 7f */
+ /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
+ /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */
+ /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */
+ /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* bf */
+ /* c0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* cf */
+ /* d0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* df */
+ /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ef */
+ /* f0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ff */
+ /* ------------------------------- */
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+};
+
+/* This is used to determine if opcode 0f 3a XX uses REPNZ prefix. */
+static const unsigned char threebyte_0x3a_uses_REPNZ_prefix[256] = {
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+ /* ------------------------------- */
+ /* 00 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0f */
+ /* 10 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 1f */
+ /* 20 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 2f */
+ /* 30 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 3f */
+ /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */
+ /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 5f */
+ /* 60 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 6f */
+ /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 7f */
+ /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
+ /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */
+ /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */
+ /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* bf */
+ /* c0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* cf */
+ /* d0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* df */
+ /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ef */
+ /* f0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ff */
+ /* ------------------------------- */
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+};
+
+/* This is used to determine if opcode 0f 3a XX uses REPZ prefix. */
+static const unsigned char threebyte_0x3a_uses_REPZ_prefix[256] = {
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+ /* ------------------------------- */
+ /* 00 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0f */
+ /* 10 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 1f */
+ /* 20 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 2f */
+ /* 30 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 3f */
+ /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */
+ /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 5f */
+ /* 60 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 6f */
+ /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 7f */
+ /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
+ /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */
+ /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */
+ /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* bf */
+ /* c0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* cf */
+ /* d0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* df */
+ /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ef */
+ /* f0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ff */
+ /* ------------------------------- */
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+};
+
static char obuf[100];
static char *obufp;
static char scratchbuf[100];
@@ -1173,9 +1449,13 @@ static unsigned char *start_codep;
static unsigned char *insn_codep;
static unsigned char *codep;
static disassemble_info *the_info;
-static int mod;
-static int rm;
-static int reg;
+static struct
+ {
+ int mod;
+ int reg;
+ int rm;
+ }
+modrm;
static unsigned char need_modrm;
/* If we are accessing mod/rm/reg without need_modrm set, then the
@@ -1244,595 +1524,1671 @@ static const char *att_index16[] = {
};
static const struct dis386 grps[][8] = {
+ /* GRP1a */
+ {
+ { "popU", { stackEv } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ },
/* GRP1b */
{
- { "addA", Eb, Ib, XX },
- { "orA", Eb, Ib, XX },
- { "adcA", Eb, Ib, XX },
- { "sbbA", Eb, Ib, XX },
- { "andA", Eb, Ib, XX },
- { "subA", Eb, Ib, XX },
- { "xorA", Eb, Ib, XX },
- { "cmpA", Eb, Ib, XX }
+ { "addA", { Eb, Ib } },
+ { "orA", { Eb, Ib } },
+ { "adcA", { Eb, Ib } },
+ { "sbbA", { Eb, Ib } },
+ { "andA", { Eb, Ib } },
+ { "subA", { Eb, Ib } },
+ { "xorA", { Eb, Ib } },
+ { "cmpA", { Eb, Ib } },
},
/* GRP1S */
{
- { "addQ", Ev, Iv, XX },
- { "orQ", Ev, Iv, XX },
- { "adcQ", Ev, Iv, XX },
- { "sbbQ", Ev, Iv, XX },
- { "andQ", Ev, Iv, XX },
- { "subQ", Ev, Iv, XX },
- { "xorQ", Ev, Iv, XX },
- { "cmpQ", Ev, Iv, XX }
+ { "addQ", { Ev, Iv } },
+ { "orQ", { Ev, Iv } },
+ { "adcQ", { Ev, Iv } },
+ { "sbbQ", { Ev, Iv } },
+ { "andQ", { Ev, Iv } },
+ { "subQ", { Ev, Iv } },
+ { "xorQ", { Ev, Iv } },
+ { "cmpQ", { Ev, Iv } },
},
/* GRP1Ss */
{
- { "addQ", Ev, sIb, XX },
- { "orQ", Ev, sIb, XX },
- { "adcQ", Ev, sIb, XX },
- { "sbbQ", Ev, sIb, XX },
- { "andQ", Ev, sIb, XX },
- { "subQ", Ev, sIb, XX },
- { "xorQ", Ev, sIb, XX },
- { "cmpQ", Ev, sIb, XX }
+ { "addQ", { Ev, sIb } },
+ { "orQ", { Ev, sIb } },
+ { "adcQ", { Ev, sIb } },
+ { "sbbQ", { Ev, sIb } },
+ { "andQ", { Ev, sIb } },
+ { "subQ", { Ev, sIb } },
+ { "xorQ", { Ev, sIb } },
+ { "cmpQ", { Ev, sIb } },
},
/* GRP2b */
{
- { "rolA", Eb, Ib, XX },
- { "rorA", Eb, Ib, XX },
- { "rclA", Eb, Ib, XX },
- { "rcrA", Eb, Ib, XX },
- { "shlA", Eb, Ib, XX },
- { "shrA", Eb, Ib, XX },
- { "(bad)", XX, XX, XX },
- { "sarA", Eb, Ib, XX },
+ { "rolA", { Eb, Ib } },
+ { "rorA", { Eb, Ib } },
+ { "rclA", { Eb, Ib } },
+ { "rcrA", { Eb, Ib } },
+ { "shlA", { Eb, Ib } },
+ { "shrA", { Eb, Ib } },
+ { "(bad)", { XX } },
+ { "sarA", { Eb, Ib } },
},
/* GRP2S */
{
- { "rolQ", Ev, Ib, XX },
- { "rorQ", Ev, Ib, XX },
- { "rclQ", Ev, Ib, XX },
- { "rcrQ", Ev, Ib, XX },
- { "shlQ", Ev, Ib, XX },
- { "shrQ", Ev, Ib, XX },
- { "(bad)", XX, XX, XX },
- { "sarQ", Ev, Ib, XX },
+ { "rolQ", { Ev, Ib } },
+ { "rorQ", { Ev, Ib } },
+ { "rclQ", { Ev, Ib } },
+ { "rcrQ", { Ev, Ib } },
+ { "shlQ", { Ev, Ib } },
+ { "shrQ", { Ev, Ib } },
+ { "(bad)", { XX } },
+ { "sarQ", { Ev, Ib } },
},
/* GRP2b_one */
{
- { "rolA", Eb, I1, XX },
- { "rorA", Eb, I1, XX },
- { "rclA", Eb, I1, XX },
- { "rcrA", Eb, I1, XX },
- { "shlA", Eb, I1, XX },
- { "shrA", Eb, I1, XX },
- { "(bad)", XX, XX, XX },
- { "sarA", Eb, I1, XX },
+ { "rolA", { Eb, I1 } },
+ { "rorA", { Eb, I1 } },
+ { "rclA", { Eb, I1 } },
+ { "rcrA", { Eb, I1 } },
+ { "shlA", { Eb, I1 } },
+ { "shrA", { Eb, I1 } },
+ { "(bad)", { XX } },
+ { "sarA", { Eb, I1 } },
},
/* GRP2S_one */
{
- { "rolQ", Ev, I1, XX },
- { "rorQ", Ev, I1, XX },
- { "rclQ", Ev, I1, XX },
- { "rcrQ", Ev, I1, XX },
- { "shlQ", Ev, I1, XX },
- { "shrQ", Ev, I1, XX },
- { "(bad)", XX, XX, XX},
- { "sarQ", Ev, I1, XX },
+ { "rolQ", { Ev, I1 } },
+ { "rorQ", { Ev, I1 } },
+ { "rclQ", { Ev, I1 } },
+ { "rcrQ", { Ev, I1 } },
+ { "shlQ", { Ev, I1 } },
+ { "shrQ", { Ev, I1 } },
+ { "(bad)", { XX } },
+ { "sarQ", { Ev, I1 } },
},
/* GRP2b_cl */
{
- { "rolA", Eb, CL, XX },
- { "rorA", Eb, CL, XX },
- { "rclA", Eb, CL, XX },
- { "rcrA", Eb, CL, XX },
- { "shlA", Eb, CL, XX },
- { "shrA", Eb, CL, XX },
- { "(bad)", XX, XX, XX },
- { "sarA", Eb, CL, XX },
+ { "rolA", { Eb, CL } },
+ { "rorA", { Eb, CL } },
+ { "rclA", { Eb, CL } },
+ { "rcrA", { Eb, CL } },
+ { "shlA", { Eb, CL } },
+ { "shrA", { Eb, CL } },
+ { "(bad)", { XX } },
+ { "sarA", { Eb, CL } },
},
/* GRP2S_cl */
{
- { "rolQ", Ev, CL, XX },
- { "rorQ", Ev, CL, XX },
- { "rclQ", Ev, CL, XX },
- { "rcrQ", Ev, CL, XX },
- { "shlQ", Ev, CL, XX },
- { "shrQ", Ev, CL, XX },
- { "(bad)", XX, XX, XX },
- { "sarQ", Ev, CL, XX }
+ { "rolQ", { Ev, CL } },
+ { "rorQ", { Ev, CL } },
+ { "rclQ", { Ev, CL } },
+ { "rcrQ", { Ev, CL } },
+ { "shlQ", { Ev, CL } },
+ { "shrQ", { Ev, CL } },
+ { "(bad)", { XX } },
+ { "sarQ", { Ev, CL } },
},
/* GRP3b */
{
- { "testA", Eb, Ib, XX },
- { "(bad)", Eb, XX, XX },
- { "notA", Eb, XX, XX },
- { "negA", Eb, XX, XX },
- { "mulA", Eb, XX, XX }, /* Don't print the implicit %al register, */
- { "imulA", Eb, XX, XX }, /* to distinguish these opcodes from other */
- { "divA", Eb, XX, XX }, /* mul/imul opcodes. Do the same for div */
- { "idivA", Eb, XX, XX } /* and idiv for consistency. */
+ { "testA", { Eb, Ib } },
+ { "(bad)", { Eb } },
+ { "notA", { Eb } },
+ { "negA", { Eb } },
+ { "mulA", { Eb } }, /* Don't print the implicit %al register, */
+ { "imulA", { Eb } }, /* to distinguish these opcodes from other */
+ { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
+ { "idivA", { Eb } }, /* and idiv for consistency. */
},
/* GRP3S */
{
- { "testQ", Ev, Iv, XX },
- { "(bad)", XX, XX, XX },
- { "notQ", Ev, XX, XX },
- { "negQ", Ev, XX, XX },
- { "mulQ", Ev, XX, XX }, /* Don't print the implicit register. */
- { "imulQ", Ev, XX, XX },
- { "divQ", Ev, XX, XX },
- { "idivQ", Ev, XX, XX },
+ { "testQ", { Ev, Iv } },
+ { "(bad)", { XX } },
+ { "notQ", { Ev } },
+ { "negQ", { Ev } },
+ { "mulQ", { Ev } }, /* Don't print the implicit register. */
+ { "imulQ", { Ev } },
+ { "divQ", { Ev } },
+ { "idivQ", { Ev } },
},
/* GRP4 */
{
- { "incA", Eb, XX, XX },
- { "decA", Eb, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
+ { "incA", { Eb } },
+ { "decA", { Eb } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
/* GRP5 */
{
- { "incQ", Ev, XX, XX },
- { "decQ", Ev, XX, XX },
- { "callT", indirEv, XX, XX },
- { "JcallT", indirEp, XX, XX },
- { "jmpT", indirEv, XX, XX },
- { "JjmpT", indirEp, XX, XX },
- { "pushU", stackEv, XX, XX },
- { "(bad)", XX, XX, XX },
+ { "incQ", { Ev } },
+ { "decQ", { Ev } },
+ { "callT", { indirEv } },
+ { "JcallT", { indirEp } },
+ { "jmpT", { indirEv } },
+ { "JjmpT", { indirEp } },
+ { "pushU", { stackEv } },
+ { "(bad)", { XX } },
},
/* GRP6 */
{
- { "sldtQ", Ev, XX, XX },
- { "strQ", Ev, XX, XX },
- { "lldt", Ew, XX, XX },
- { "ltr", Ew, XX, XX },
- { "verr", Ew, XX, XX },
- { "verw", Ew, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX }
+ { "sldtD", { Sv } },
+ { "strD", { Sv } },
+ { "lldt", { Ew } },
+ { "ltr", { Ew } },
+ { "verr", { Ew } },
+ { "verw", { Ew } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
/* GRP7 */
{
- { "sgdtIQ", VMX_Fixup, 0, XX, XX },
- { "sidtIQ", PNI_Fixup, 0, XX, XX },
- { "lgdt{Q|Q||}", M, XX, XX },
- { "lidt{Q|Q||}", SVME_Fixup, 0, XX, XX },
- { "smswQ", Ev, XX, XX },
- { "(bad)", XX, XX, XX },
- { "lmsw", Ew, XX, XX },
- { "invlpg", INVLPG_Fixup, w_mode, XX, XX },
+ { "sgdt{Q|IQ||}", { { VMX_Fixup, 0 } } },
+ { "sidt{Q|IQ||}", { { PNI_Fixup, 0 } } },
+ { "lgdt{Q|Q||}", { M } },
+ { "lidt{Q|Q||}", { { SVME_Fixup, 0 } } },
+ { "smswD", { Sv } },
+ { "(bad)", { XX } },
+ { "lmsw", { Ew } },
+ { "invlpg", { { INVLPG_Fixup, w_mode } } },
},
/* GRP8 */
{
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "btQ", Ev, Ib, XX },
- { "btsQ", Ev, Ib, XX },
- { "btrQ", Ev, Ib, XX },
- { "btcQ", Ev, Ib, XX },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "btQ", { Ev, Ib } },
+ { "btsQ", { Ev, Ib } },
+ { "btrQ", { Ev, Ib } },
+ { "btcQ", { Ev, Ib } },
},
/* GRP9 */
{
- { "(bad)", XX, XX, XX },
- { "cmpxchg8b", Eq, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "", VM, XX, XX }, /* See OP_VMX. */
- { "vmptrst", Eq, XX, XX },
- },
- /* GRP10 */
- {
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "psrlw", MS, Ib, XX },
- { "(bad)", XX, XX, XX },
- { "psraw", MS, Ib, XX },
- { "(bad)", XX, XX, XX },
- { "psllw", MS, Ib, XX },
- { "(bad)", XX, XX, XX },
- },
- /* GRP11 */
- {
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "psrld", MS, Ib, XX },
- { "(bad)", XX, XX, XX },
- { "psrad", MS, Ib, XX },
- { "(bad)", XX, XX, XX },
- { "pslld", MS, Ib, XX },
- { "(bad)", XX, XX, XX },
+ { "(bad)", { XX } },
+ { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "", { VM } }, /* See OP_VMX. */
+ { "vmptrst", { Mq } },
+ },
+ /* GRP11_C6 */
+ {
+ { "movA", { Eb, Ib } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ },
+ /* GRP11_C7 */
+ {
+ { "movQ", { Ev, Iv } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
/* GRP12 */
{
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "psrlq", MS, Ib, XX },
- { "psrldq", MS, Ib, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "psllq", MS, Ib, XX },
- { "pslldq", MS, Ib, XX },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "psrlw", { MS, Ib } },
+ { "(bad)", { XX } },
+ { "psraw", { MS, Ib } },
+ { "(bad)", { XX } },
+ { "psllw", { MS, Ib } },
+ { "(bad)", { XX } },
},
/* GRP13 */
{
- { "fxsave", Ev, XX, XX },
- { "fxrstor", Ev, XX, XX },
- { "ldmxcsr", Ev, XX, XX },
- { "stmxcsr", Ev, XX, XX },
- { "(bad)", XX, XX, XX },
- { "lfence", OP_0fae, 0, XX, XX },
- { "mfence", OP_0fae, 0, XX, XX },
- { "clflush", OP_0fae, 0, XX, XX },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "psrld", { MS, Ib } },
+ { "(bad)", { XX } },
+ { "psrad", { MS, Ib } },
+ { "(bad)", { XX } },
+ { "pslld", { MS, Ib } },
+ { "(bad)", { XX } },
},
/* GRP14 */
{
- { "prefetchnta", Ev, XX, XX },
- { "prefetcht0", Ev, XX, XX },
- { "prefetcht1", Ev, XX, XX },
- { "prefetcht2", Ev, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "psrlq", { MS, Ib } },
+ { "psrldq", { MS, Ib } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "psllq", { MS, Ib } },
+ { "pslldq", { MS, Ib } },
+ },
+ /* GRP15 */
+ {
+ { "fxsave", { Ev } },
+ { "fxrstor", { Ev } },
+ { "ldmxcsr", { Ev } },
+ { "stmxcsr", { Ev } },
+ { "(bad)", { XX } },
+ { "lfence", { { OP_0fae, 0 } } },
+ { "mfence", { { OP_0fae, 0 } } },
+ { "clflush", { { OP_0fae, 0 } } },
+ },
+ /* GRP16 */
+ {
+ { "prefetchnta", { Ev } },
+ { "prefetcht0", { Ev } },
+ { "prefetcht1", { Ev } },
+ { "prefetcht2", { Ev } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
/* GRPAMD */
{
- { "prefetch", Eb, XX, XX },
- { "prefetchw", Eb, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
+ { "prefetch", { Eb } },
+ { "prefetchw", { Eb } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
/* GRPPADLCK1 */
{
- { "xstore-rng", OP_0f07, 0, XX, XX },
- { "xcrypt-ecb", OP_0f07, 0, XX, XX },
- { "xcrypt-cbc", OP_0f07, 0, XX, XX },
- { "xcrypt-ctr", OP_0f07, 0, XX, XX },
- { "xcrypt-cfb", OP_0f07, 0, XX, XX },
- { "xcrypt-ofb", OP_0f07, 0, XX, XX },
- { "(bad)", OP_0f07, 0, XX, XX },
- { "(bad)", OP_0f07, 0, XX, XX },
+ { "xstore-rng", { { OP_0f07, 0 } } },
+ { "xcrypt-ecb", { { OP_0f07, 0 } } },
+ { "xcrypt-cbc", { { OP_0f07, 0 } } },
+ { "xcrypt-ctr", { { OP_0f07, 0 } } },
+ { "xcrypt-cfb", { { OP_0f07, 0 } } },
+ { "xcrypt-ofb", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
},
/* GRPPADLCK2 */
{
- { "montmul", OP_0f07, 0, XX, XX },
- { "xsha1", OP_0f07, 0, XX, XX },
- { "xsha256", OP_0f07, 0, XX, XX },
- { "(bad)", OP_0f07, 0, XX, XX },
- { "(bad)", OP_0f07, 0, XX, XX },
- { "(bad)", OP_0f07, 0, XX, XX },
- { "(bad)", OP_0f07, 0, XX, XX },
- { "(bad)", OP_0f07, 0, XX, XX },
+ { "montmul", { { OP_0f07, 0 } } },
+ { "xsha1", { { OP_0f07, 0 } } },
+ { "xsha256", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
}
};
static const struct dis386 prefix_user_table[][4] = {
/* PREGRP0 */
{
- { "addps", XM, EX, XX },
- { "addss", XM, EX, XX },
- { "addpd", XM, EX, XX },
- { "addsd", XM, EX, XX },
+ { "addps", { XM, EXx } },
+ { "addss", { XM, EXd } },
+ { "addpd", { XM, EXx } },
+ { "addsd", { XM, EXq } },
},
/* PREGRP1 */
{
- { "", XM, EX, OPSIMD }, /* See OP_SIMD_SUFFIX. */
- { "", XM, EX, OPSIMD },
- { "", XM, EX, OPSIMD },
- { "", XM, EX, OPSIMD },
+ { "", { XM, EXx, OPSIMD } }, /* See OP_SIMD_SUFFIX. */
+ { "", { XM, EXx, OPSIMD } },
+ { "", { XM, EXx, OPSIMD } },
+ { "", { XM, EXx, OPSIMD } },
},
/* PREGRP2 */
{
- { "cvtpi2ps", XM, EM, XX },
- { "cvtsi2ssY", XM, Ev, XX },
- { "cvtpi2pd", XM, EM, XX },
- { "cvtsi2sdY", XM, Ev, XX },
+ { "cvtpi2ps", { XM, EMC } },
+ { "cvtsi2ssY", { XM, Ev } },
+ { "cvtpi2pd", { XM, EMC } },
+ { "cvtsi2sdY", { XM, Ev } },
},
/* PREGRP3 */
{
- { "cvtps2pi", MX, EX, XX },
- { "cvtss2siY", Gv, EX, XX },
- { "cvtpd2pi", MX, EX, XX },
- { "cvtsd2siY", Gv, EX, XX },
+ { "cvtps2pi", { MXC, EXx } },
+ { "cvtss2siY", { Gv, EXx } },
+ { "cvtpd2pi", { MXC, EXx } },
+ { "cvtsd2siY", { Gv, EXx } },
},
/* PREGRP4 */
{
- { "cvttps2pi", MX, EX, XX },
- { "cvttss2siY", Gv, EX, XX },
- { "cvttpd2pi", MX, EX, XX },
- { "cvttsd2siY", Gv, EX, XX },
+ { "cvttps2pi", { MXC, EXx } },
+ { "cvttss2siY", { Gv, EXx } },
+ { "cvttpd2pi", { MXC, EXx } },
+ { "cvttsd2siY", { Gv, EXx } },
},
/* PREGRP5 */
{
- { "divps", XM, EX, XX },
- { "divss", XM, EX, XX },
- { "divpd", XM, EX, XX },
- { "divsd", XM, EX, XX },
+ { "divps", { XM, EXx } },
+ { "divss", { XM, EXx } },
+ { "divpd", { XM, EXx } },
+ { "divsd", { XM, EXx } },
},
/* PREGRP6 */
{
- { "maxps", XM, EX, XX },
- { "maxss", XM, EX, XX },
- { "maxpd", XM, EX, XX },
- { "maxsd", XM, EX, XX },
+ { "maxps", { XM, EXx } },
+ { "maxss", { XM, EXx } },
+ { "maxpd", { XM, EXx } },
+ { "maxsd", { XM, EXx } },
},
/* PREGRP7 */
{
- { "minps", XM, EX, XX },
- { "minss", XM, EX, XX },
- { "minpd", XM, EX, XX },
- { "minsd", XM, EX, XX },
+ { "minps", { XM, EXx } },
+ { "minss", { XM, EXx } },
+ { "minpd", { XM, EXx } },
+ { "minsd", { XM, EXx } },
},
/* PREGRP8 */
{
- { "movups", XM, EX, XX },
- { "movss", XM, EX, XX },
- { "movupd", XM, EX, XX },
- { "movsd", XM, EX, XX },
+ { "movups", { XM, EXx } },
+ { "movss", { XM, EXx } },
+ { "movupd", { XM, EXx } },
+ { "movsd", { XM, EXx } },
},
/* PREGRP9 */
{
- { "movups", EX, XM, XX },
- { "movss", EX, XM, XX },
- { "movupd", EX, XM, XX },
- { "movsd", EX, XM, XX },
+ { "movups", { EXx, XM } },
+ { "movss", { EXx, XM } },
+ { "movupd", { EXx, XM } },
+ { "movsd", { EXx, XM } },
},
/* PREGRP10 */
{
- { "mulps", XM, EX, XX },
- { "mulss", XM, EX, XX },
- { "mulpd", XM, EX, XX },
- { "mulsd", XM, EX, XX },
+ { "mulps", { XM, EXx } },
+ { "mulss", { XM, EXx } },
+ { "mulpd", { XM, EXx } },
+ { "mulsd", { XM, EXx } },
},
/* PREGRP11 */
{
- { "rcpps", XM, EX, XX },
- { "rcpss", XM, EX, XX },
- { "(bad)", XM, EX, XX },
- { "(bad)", XM, EX, XX },
+ { "rcpps", { XM, EXx } },
+ { "rcpss", { XM, EXx } },
+ { "(bad)", { XM, EXx } },
+ { "(bad)", { XM, EXx } },
},
/* PREGRP12 */
{
- { "rsqrtps", XM, EX, XX },
- { "rsqrtss", XM, EX, XX },
- { "(bad)", XM, EX, XX },
- { "(bad)", XM, EX, XX },
+ { "rsqrtps",{ XM, EXx } },
+ { "rsqrtss",{ XM, EXx } },
+ { "(bad)", { XM, EXx } },
+ { "(bad)", { XM, EXx } },
},
/* PREGRP13 */
{
- { "sqrtps", XM, EX, XX },
- { "sqrtss", XM, EX, XX },
- { "sqrtpd", XM, EX, XX },
- { "sqrtsd", XM, EX, XX },
+ { "sqrtps", { XM, EXx } },
+ { "sqrtss", { XM, EXx } },
+ { "sqrtpd", { XM, EXx } },
+ { "sqrtsd", { XM, EXx } },
},
/* PREGRP14 */
{
- { "subps", XM, EX, XX },
- { "subss", XM, EX, XX },
- { "subpd", XM, EX, XX },
- { "subsd", XM, EX, XX },
+ { "subps", { XM, EXx } },
+ { "subss", { XM, EXx } },
+ { "subpd", { XM, EXx } },
+ { "subsd", { XM, EXx } },
},
/* PREGRP15 */
{
- { "(bad)", XM, EX, XX },
- { "cvtdq2pd", XM, EX, XX },
- { "cvttpd2dq", XM, EX, XX },
- { "cvtpd2dq", XM, EX, XX },
+ { "(bad)", { XM, EXx } },
+ { "cvtdq2pd", { XM, EXq } },
+ { "cvttpd2dq", { XM, EXx } },
+ { "cvtpd2dq", { XM, EXx } },
},
/* PREGRP16 */
{
- { "cvtdq2ps", XM, EX, XX },
- { "cvttps2dq",XM, EX, XX },
- { "cvtps2dq",XM, EX, XX },
- { "(bad)", XM, EX, XX },
+ { "cvtdq2ps", { XM, EXx } },
+ { "cvttps2dq", { XM, EXx } },
+ { "cvtps2dq", { XM, EXx } },
+ { "(bad)", { XM, EXx } },
},
/* PREGRP17 */
{
- { "cvtps2pd", XM, EX, XX },
- { "cvtss2sd", XM, EX, XX },
- { "cvtpd2ps", XM, EX, XX },
- { "cvtsd2ss", XM, EX, XX },
+ { "cvtps2pd", { XM, EXq } },
+ { "cvtss2sd", { XM, EXx } },
+ { "cvtpd2ps", { XM, EXx } },
+ { "cvtsd2ss", { XM, EXx } },
},
/* PREGRP18 */
{
- { "maskmovq", MX, MS, XX },
- { "(bad)", XM, EX, XX },
- { "maskmovdqu", XM, EX, XX },
- { "(bad)", XM, EX, XX },
+ { "maskmovq", { MX, MS } },
+ { "(bad)", { XM, EXx } },
+ { "maskmovdqu", { XM, XS } },
+ { "(bad)", { XM, EXx } },
},
/* PREGRP19 */
{
- { "movq", MX, EM, XX },
- { "movdqu", XM, EX, XX },
- { "movdqa", XM, EX, XX },
- { "(bad)", XM, EX, XX },
+ { "movq", { MX, EM } },
+ { "movdqu", { XM, EXx } },
+ { "movdqa", { XM, EXx } },
+ { "(bad)", { XM, EXx } },
},
/* PREGRP20 */
{
- { "movq", EM, MX, XX },
- { "movdqu", EX, XM, XX },
- { "movdqa", EX, XM, XX },
- { "(bad)", EX, XM, XX },
+ { "movq", { EM, MX } },
+ { "movdqu", { EXx, XM } },
+ { "movdqa", { EXx, XM } },
+ { "(bad)", { EXx, XM } },
},
/* PREGRP21 */
{
- { "(bad)", EX, XM, XX },
- { "movq2dq", XM, MS, XX },
- { "movq", EX, XM, XX },
- { "movdq2q", MX, XS, XX },
+ { "(bad)", { EXx, XM } },
+ { "movq2dq",{ XM, MS } },
+ { "movq", { EXx, XM } },
+ { "movdq2q",{ MX, XS } },
},
/* PREGRP22 */
{
- { "pshufw", MX, EM, Ib },
- { "pshufhw", XM, EX, Ib },
- { "pshufd", XM, EX, Ib },
- { "pshuflw", XM, EX, Ib },
+ { "pshufw", { MX, EM, Ib } },
+ { "pshufhw",{ XM, EXx, Ib } },
+ { "pshufd", { XM, EXx, Ib } },
+ { "pshuflw",{ XM, EXx, Ib } },
},
/* PREGRP23 */
{
- { "movd", Edq, MX, XX },
- { "movq", XM, EX, XX },
- { "movd", Edq, XM, XX },
- { "(bad)", Ed, XM, XX },
+ { "movd", { Edq, MX } },
+ { "movq", { XM, EXx } },
+ { "movd", { Edq, XM } },
+ { "(bad)", { Ed, XM } },
},
/* PREGRP24 */
{
- { "(bad)", MX, EX, XX },
- { "(bad)", XM, EX, XX },
- { "punpckhqdq", XM, EX, XX },
- { "(bad)", XM, EX, XX },
+ { "(bad)", { MX, EXx } },
+ { "(bad)", { XM, EXx } },
+ { "punpckhqdq", { XM, EXx } },
+ { "(bad)", { XM, EXx } },
},
/* PREGRP25 */
{
- { "movntq", EM, MX, XX },
- { "(bad)", EM, XM, XX },
- { "movntdq", EM, XM, XX },
- { "(bad)", EM, XM, XX },
+ { "movntq", { EM, MX } },
+ { "(bad)", { EM, XM } },
+ { "movntdq",{ EM, XM } },
+ { "(bad)", { EM, XM } },
},
/* PREGRP26 */
{
- { "(bad)", MX, EX, XX },
- { "(bad)", XM, EX, XX },
- { "punpcklqdq", XM, EX, XX },
- { "(bad)", XM, EX, XX },
+ { "(bad)", { MX, EXx } },
+ { "(bad)", { XM, EXx } },
+ { "punpcklqdq", { XM, EXx } },
+ { "(bad)", { XM, EXx } },
},
/* PREGRP27 */
{
- { "(bad)", MX, EX, XX },
- { "(bad)", XM, EX, XX },
- { "addsubpd", XM, EX, XX },
- { "addsubps", XM, EX, XX },
+ { "(bad)", { MX, EXx } },
+ { "(bad)", { XM, EXx } },
+ { "addsubpd", { XM, EXx } },
+ { "addsubps", { XM, EXx } },
},
/* PREGRP28 */
{
- { "(bad)", MX, EX, XX },
- { "(bad)", XM, EX, XX },
- { "haddpd", XM, EX, XX },
- { "haddps", XM, EX, XX },
+ { "(bad)", { MX, EXx } },
+ { "(bad)", { XM, EXx } },
+ { "haddpd", { XM, EXx } },
+ { "haddps", { XM, EXx } },
},
/* PREGRP29 */
{
- { "(bad)", MX, EX, XX },
- { "(bad)", XM, EX, XX },
- { "hsubpd", XM, EX, XX },
- { "hsubps", XM, EX, XX },
+ { "(bad)", { MX, EXx } },
+ { "(bad)", { XM, EXx } },
+ { "hsubpd", { XM, EXx } },
+ { "hsubps", { XM, EXx } },
},
/* PREGRP30 */
{
- { "movlpX", XM, EX, SIMD_Fixup, 'h' }, /* really only 2 operands */
- { "movsldup", XM, EX, XX },
- { "movlpd", XM, EX, XX },
- { "movddup", XM, EX, XX },
+ { "movlpX", { XM, EXq, { SIMD_Fixup, 'h' } } }, /* really only 2 operands */
+ { "movsldup", { XM, EXx } },
+ { "movlpd", { XM, EXq } },
+ { "movddup", { XM, EXq } },
},
/* PREGRP31 */
{
- { "movhpX", XM, EX, SIMD_Fixup, 'l' },
- { "movshdup", XM, EX, XX },
- { "movhpd", XM, EX, XX },
- { "(bad)", XM, EX, XX },
+ { "movhpX", { XM, EXq, { SIMD_Fixup, 'l' } } },
+ { "movshdup", { XM, EXx } },
+ { "movhpd", { XM, EXq } },
+ { "(bad)", { XM, EXq } },
},
/* PREGRP32 */
{
- { "(bad)", XM, EX, XX },
- { "(bad)", XM, EX, XX },
- { "(bad)", XM, EX, XX },
- { "lddqu", XM, M, XX },
+ { "(bad)", { XM, EXx } },
+ { "(bad)", { XM, EXx } },
+ { "(bad)", { XM, EXx } },
+ { "lddqu", { XM, M } },
+ },
+ /* PREGRP33 */
+ {
+ {"movntps", { Ev, XM } },
+ {"movntss", { Ev, XM } },
+ {"movntpd", { Ev, XM } },
+ {"movntsd", { Ev, XM } },
+ },
+
+ /* PREGRP34 */
+ {
+ {"vmread", { Em, Gm } },
+ {"(bad)", { XX } },
+ {"extrq", { XS, Ib, Ib } },
+ {"insertq", { XM, XS, Ib, Ib } },
+ },
+
+ /* PREGRP35 */
+ {
+ {"vmwrite", { Gm, Em } },
+ {"(bad)", { XX } },
+ {"extrq", { XM, XS } },
+ {"insertq", { XM, XS } },
+ },
+
+ /* PREGRP36 */
+ {
+ { "bsrS", { Gv, Ev } },
+ { "lzcntS", { Gv, Ev } },
+ { "bsrS", { Gv, Ev } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP37 */
+ {
+ { "(bad)", { XX } },
+ { "popcntS", { Gv, Ev } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP38 */
+ {
+ { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
+ { "pause", { XX } },
+ { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP39 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pblendvb", {XM, EXx, XMM0 } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP40 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "blendvps", {XM, EXx, XMM0 } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP41 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "blendvpd", { XM, EXx, XMM0 } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP42 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "ptest", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP43 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmovsxbw", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP44 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmovsxbd", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP45 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmovsxbq", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP46 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmovsxwd", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP47 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmovsxwq", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP48 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmovsxdq", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP49 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmuldq", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP50 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pcmpeqq", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP51 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "movntdqa", { XM, EM } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP52 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "packusdw", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP53 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmovzxbw", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP54 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmovzxbd", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP55 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmovzxbq", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP56 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmovzxwd", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP57 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmovzxwq", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP58 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmovzxdq", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP59 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pminsb", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP60 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pminsd", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP61 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pminuw", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP62 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pminud", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP63 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmaxsb", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP64 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmaxsd", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP65 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmaxuw", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP66 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmaxud", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP67 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pmulld", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP68 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "phminposuw", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP69 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "roundps", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP70 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "roundpd", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP71 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "roundss", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP72 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "roundsd", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP73 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "blendps", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP74 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "blendpd", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP75 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pblendw", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP76 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pextrb", { Edqb, XM, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP77 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pextrw", { Edqw, XM, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP78 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pextrK", { Edq, XM, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP79 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "extractps", { Edqd, XM, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP80 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pinsrb", { XM, Edqb, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP81 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "insertps", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP82 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pinsrK", { XM, Edq, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP83 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "dpps", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP84 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "dppd", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP85 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "mpsadbw", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP86 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pcmpgtq", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP87 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
+ },
+
+ /* PREGRP88 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
+ },
+
+ /* PREGRP89 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pcmpestrm", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP90 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pcmpestri", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP91 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pcmpistrm", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP92 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pcmpistri", { XM, EXx, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP93 */
+ {
+ { "ucomiss",{ XM, EXd } },
+ { "(bad)", { XX } },
+ { "ucomisd",{ XM, EXq } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP94 */
+ {
+ { "comiss", { XM, EXd } },
+ { "(bad)", { XX } },
+ { "comisd", { XM, EXq } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP95 */
+ {
+ { "punpcklbw",{ MX, EMd } },
+ { "(bad)", { XX } },
+ { "punpcklbw",{ MX, EMq } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP96 */
+ {
+ { "punpcklwd",{ MX, EMd } },
+ { "(bad)", { XX } },
+ { "punpcklwd",{ MX, EMq } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP97 */
+ {
+ { "punpckldq",{ MX, EMd } },
+ { "(bad)", { XX } },
+ { "punpckldq",{ MX, EMq } },
+ { "(bad)", { XX } },
},
};
static const struct dis386 x86_64_table[][2] = {
{
- { "arpl", Ew, Gw, XX },
- { "movs{||lq|xd}", Gv, Ed, XX },
+ { "pusha{P|}", { XX } },
+ { "(bad)", { XX } },
+ },
+ {
+ { "popa{P|}", { XX } },
+ { "(bad)", { XX } },
+ },
+ {
+ { "bound{S|}", { Gv, Ma } },
+ { "(bad)", { XX } },
+ },
+ {
+ { "arpl", { Ew, Gw } },
+ { "movs{||lq|xd}", { Gv, Ed } },
},
};
-static const struct dis386 three_byte_table[][32] = {
+static const struct dis386 three_byte_table[][256] = {
/* THREE_BYTE_0 */
{
- { "pshufb", MX, EM, XX },
- { "phaddw", MX, EM, XX },
- { "phaddd", MX, EM, XX },
- { "phaddsw", MX, EM, XX },
- { "pmaddubsw", MX, EM, XX },
- { "phsubw", MX, EM, XX },
- { "phsubd", MX, EM, XX },
- { "phsubsw", MX, EM, XX },
- { "psignb", MX, EM, XX },
- { "psignw", MX, EM, XX },
- { "psignd", MX, EM, XX },
- { "pmulhrsw", MX, EM, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "pabsb", MX, EM, XX },
- { "pabsw", MX, EM, XX },
- { "pabsd", MX, EM, XX },
- { "(bad)", XX, XX, XX }
+ /* 00 */
+ { "pshufb", { MX, EM } },
+ { "phaddw", { MX, EM } },
+ { "phaddd", { MX, EM } },
+ { "phaddsw", { MX, EM } },
+ { "pmaddubsw", { MX, EM } },
+ { "phsubw", { MX, EM } },
+ { "phsubd", { MX, EM } },
+ { "phsubsw", { MX, EM } },
+ /* 08 */
+ { "psignb", { MX, EM } },
+ { "psignw", { MX, EM } },
+ { "psignd", { MX, EM } },
+ { "pmulhrsw", { MX, EM } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 10 */
+ { PREGRP39 },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { PREGRP40 },
+ { PREGRP41 },
+ { "(bad)", { XX } },
+ { PREGRP42 },
+ /* 18 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pabsb", { MX, EM } },
+ { "pabsw", { MX, EM } },
+ { "pabsd", { MX, EM } },
+ { "(bad)", { XX } },
+ /* 20 */
+ { PREGRP43 },
+ { PREGRP44 },
+ { PREGRP45 },
+ { PREGRP46 },
+ { PREGRP47 },
+ { PREGRP48 },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 28 */
+ { PREGRP49 },
+ { PREGRP50 },
+ { PREGRP51 },
+ { PREGRP52 },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 30 */
+ { PREGRP53 },
+ { PREGRP54 },
+ { PREGRP55 },
+ { PREGRP56 },
+ { PREGRP57 },
+ { PREGRP58 },
+ { "(bad)", { XX } },
+ { PREGRP86 },
+ /* 38 */
+ { PREGRP59 },
+ { PREGRP60 },
+ { PREGRP61 },
+ { PREGRP62 },
+ { PREGRP63 },
+ { PREGRP64 },
+ { PREGRP65 },
+ { PREGRP66 },
+ /* 40 */
+ { PREGRP67 },
+ { PREGRP68 },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 48 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 50 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 58 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 60 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 68 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 70 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 78 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 80 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 88 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 90 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 98 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* a0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* a8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* b0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* b8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* c0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* c8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* d0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* d8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* e0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* e8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* f0 */
+ { PREGRP87 },
+ { PREGRP88 },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* f8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
/* THREE_BYTE_1 */
{
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "palignr", MX, EM, Ib },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX }
- },
+ /* 00 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 08 */
+ { PREGRP69 },
+ { PREGRP70 },
+ { PREGRP71 },
+ { PREGRP72 },
+ { PREGRP73 },
+ { PREGRP74 },
+ { PREGRP75 },
+ { "palignr", { MX, EM, Ib } },
+ /* 10 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { PREGRP76 },
+ { PREGRP77 },
+ { PREGRP78 },
+ { PREGRP79 },
+ /* 18 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 20 */
+ { PREGRP80 },
+ { PREGRP81 },
+ { PREGRP82 },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 28 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 30 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 38 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 40 */
+ { PREGRP83 },
+ { PREGRP84 },
+ { PREGRP85 },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 48 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 50 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 58 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 60 */
+ { PREGRP89 },
+ { PREGRP90 },
+ { PREGRP91 },
+ { PREGRP92 },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 68 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 70 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 78 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 80 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 88 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 90 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 98 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* a0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* a8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* b0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* b8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* c0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* c8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* d0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* d8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* e0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* e8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* f0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* f8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ }
};
#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
@@ -1938,41 +3294,46 @@ ckprefix (void)
static const char *
prefix_name (int pref, int sizeflag)
{
+ static const char *rexes [16] =
+ {
+ "rex", /* 0x40 */
+ "rex.B", /* 0x41 */
+ "rex.X", /* 0x42 */
+ "rex.XB", /* 0x43 */
+ "rex.R", /* 0x44 */
+ "rex.RB", /* 0x45 */
+ "rex.RX", /* 0x46 */
+ "rex.RXB", /* 0x47 */
+ "rex.W", /* 0x48 */
+ "rex.WB", /* 0x49 */
+ "rex.WX", /* 0x4a */
+ "rex.WXB", /* 0x4b */
+ "rex.WR", /* 0x4c */
+ "rex.WRB", /* 0x4d */
+ "rex.WRX", /* 0x4e */
+ "rex.WRXB", /* 0x4f */
+ };
+
switch (pref)
{
/* REX prefixes family. */
case 0x40:
- return "rex";
case 0x41:
- return "rexZ";
case 0x42:
- return "rexY";
case 0x43:
- return "rexYZ";
case 0x44:
- return "rexX";
case 0x45:
- return "rexXZ";
case 0x46:
- return "rexXY";
case 0x47:
- return "rexXYZ";
case 0x48:
- return "rex64";
case 0x49:
- return "rex64Z";
case 0x4a:
- return "rex64Y";
case 0x4b:
- return "rex64YZ";
case 0x4c:
- return "rex64X";
case 0x4d:
- return "rex64XZ";
case 0x4e:
- return "rex64XY";
case 0x4f:
- return "rex64XYZ";
+ return rexes [pref - 0x40];
case 0xf3:
return "repz";
case 0xf2:
@@ -2005,13 +3366,13 @@ prefix_name (int pref, int sizeflag)
}
}
-static char op1out[100], op2out[100], op3out[100];
-static int op_ad, op_index[3];
+static char op_out[MAX_OPERANDS][100];
+static int op_ad, op_index[MAX_OPERANDS];
static int two_source_ops;
-static bfd_vma op_address[3];
-static bfd_vma op_riprel[3];
+static bfd_vma op_address[MAX_OPERANDS];
+static bfd_vma op_riprel[MAX_OPERANDS];
static bfd_vma start_pc;
-
+
/*
* On the 386's of 1988, the maximum length of an instruction is 15 bytes.
* (see topic "Redundant prefixes" in the "Differences from 8086"
@@ -2054,17 +3415,39 @@ print_insn_i386 (bfd_vma pc, disassemble_info *info)
return print_insn (pc, info);
}
+void
+print_i386_disassembler_options (FILE *stream)
+{
+ fprintf (stream, _("\n\
+The following i386/x86-64 specific disassembler options are supported for use\n\
+with the -M switch (multiple options should be separated by commas):\n"));
+
+ fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
+ fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
+ fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
+ fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
+ fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
+ fprintf (stream, _(" addr64 Assume 64bit address size\n"));
+ fprintf (stream, _(" addr32 Assume 32bit address size\n"));
+ fprintf (stream, _(" addr16 Assume 16bit address size\n"));
+ fprintf (stream, _(" data32 Assume 32bit data size\n"));
+ fprintf (stream, _(" data16 Assume 16bit data size\n"));
+ fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
+}
+
static int
print_insn (bfd_vma pc, disassemble_info *info)
{
const struct dis386 *dp;
int i;
- char *first, *second, *third;
+ char *op_txt[MAX_OPERANDS];
int needcomma;
- unsigned char uses_SSE_prefix, uses_LOCK_prefix;
+ unsigned char uses_DATA_prefix, uses_LOCK_prefix;
+ unsigned char uses_REPNZ_prefix, uses_REPZ_prefix;
int sizeflag;
const char *p;
struct dis_private priv;
+ unsigned char op;
if (info->mach == bfd_mach_x86_64_intel_syntax
|| info->mach == bfd_mach_x86_64)
@@ -2088,44 +3471,54 @@ print_insn (bfd_vma pc, disassemble_info *info)
for (p = info->disassembler_options; p != NULL; )
{
- if (strncmp (p, "x86-64", 6) == 0)
+ if (CONST_STRNEQ (p, "x86-64"))
{
address_mode = mode_64bit;
priv.orig_sizeflag = AFLAG | DFLAG;
}
- else if (strncmp (p, "i386", 4) == 0)
+ else if (CONST_STRNEQ (p, "i386"))
{
address_mode = mode_32bit;
priv.orig_sizeflag = AFLAG | DFLAG;
}
- else if (strncmp (p, "i8086", 5) == 0)
+ else if (CONST_STRNEQ (p, "i8086"))
{
address_mode = mode_16bit;
priv.orig_sizeflag = 0;
}
- else if (strncmp (p, "intel", 5) == 0)
+ else if (CONST_STRNEQ (p, "intel"))
{
intel_syntax = 1;
}
- else if (strncmp (p, "att", 3) == 0)
+ else if (CONST_STRNEQ (p, "att"))
{
intel_syntax = 0;
}
- else if (strncmp (p, "addr", 4) == 0)
+ else if (CONST_STRNEQ (p, "addr"))
{
- if (p[4] == '1' && p[5] == '6')
- priv.orig_sizeflag &= ~AFLAG;
- else if (p[4] == '3' && p[5] == '2')
- priv.orig_sizeflag |= AFLAG;
+ if (address_mode == mode_64bit)
+ {
+ if (p[4] == '3' && p[5] == '2')
+ priv.orig_sizeflag &= ~AFLAG;
+ else if (p[4] == '6' && p[5] == '4')
+ priv.orig_sizeflag |= AFLAG;
+ }
+ else
+ {
+ if (p[4] == '1' && p[5] == '6')
+ priv.orig_sizeflag &= ~AFLAG;
+ else if (p[4] == '3' && p[5] == '2')
+ priv.orig_sizeflag |= AFLAG;
+ }
}
- else if (strncmp (p, "data", 4) == 0)
+ else if (CONST_STRNEQ (p, "data"))
{
if (p[4] == '1' && p[5] == '6')
priv.orig_sizeflag &= ~DFLAG;
else if (p[4] == '3' && p[5] == '2')
priv.orig_sizeflag |= DFLAG;
}
- else if (strncmp (p, "suffix", 6) == 0)
+ else if (CONST_STRNEQ (p, "suffix"))
priv.orig_sizeflag |= SUFFIX_ALWAYS;
p = strchr (p, ',');
@@ -2171,11 +3564,11 @@ print_insn (bfd_vma pc, disassemble_info *info)
priv.insn_start = pc;
obuf[0] = 0;
- op1out[0] = 0;
- op2out[0] = 0;
- op3out[0] = 0;
-
- op_index[0] = op_index[1] = op_index[2] = -1;
+ for (i = 0; i < MAX_OPERANDS; ++i)
+ {
+ op_out[i][0] = 0;
+ op_index[i] = -1;
+ }
the_info = info;
start_pc = pc;
@@ -2231,33 +3624,63 @@ print_insn (bfd_vma pc, disassemble_info *info)
return 1;
}
+ op = 0;
if (*codep == 0x0f)
{
+ unsigned char threebyte;
FETCH_DATA (info, codep + 2);
- dp = &dis386_twobyte[*++codep];
+ threebyte = *++codep;
+ dp = &dis386_twobyte[threebyte];
need_modrm = twobyte_has_modrm[*codep];
- uses_SSE_prefix = twobyte_uses_SSE_prefix[*codep];
+ uses_DATA_prefix = twobyte_uses_DATA_prefix[*codep];
+ uses_REPNZ_prefix = twobyte_uses_REPNZ_prefix[*codep];
+ uses_REPZ_prefix = twobyte_uses_REPZ_prefix[*codep];
uses_LOCK_prefix = (*codep & ~0x02) == 0x20;
+ codep++;
+ if (dp->name == NULL && dp->op[0].bytemode == IS_3BYTE_OPCODE)
+ {
+ FETCH_DATA (info, codep + 2);
+ op = *codep++;
+ switch (threebyte)
+ {
+ case 0x38:
+ uses_DATA_prefix = threebyte_0x38_uses_DATA_prefix[op];
+ uses_REPNZ_prefix = threebyte_0x38_uses_REPNZ_prefix[op];
+ uses_REPZ_prefix = threebyte_0x38_uses_REPZ_prefix[op];
+ break;
+ case 0x3a:
+ uses_DATA_prefix = threebyte_0x3a_uses_DATA_prefix[op];
+ uses_REPNZ_prefix = threebyte_0x3a_uses_REPNZ_prefix[op];
+ uses_REPZ_prefix = threebyte_0x3a_uses_REPZ_prefix[op];
+ break;
+ default:
+ break;
+ }
+ }
}
else
{
dp = &dis386[*codep];
need_modrm = onebyte_has_modrm[*codep];
- uses_SSE_prefix = 0;
+ uses_DATA_prefix = 0;
+ uses_REPNZ_prefix = 0;
+ /* pause is 0xf3 0x90. */
+ uses_REPZ_prefix = *codep == 0x90;
uses_LOCK_prefix = 0;
+ codep++;
}
- codep++;
- if (!uses_SSE_prefix && (prefixes & PREFIX_REPZ))
+ if (!uses_REPZ_prefix && (prefixes & PREFIX_REPZ))
{
oappend ("repz ");
used_prefixes |= PREFIX_REPZ;
}
- if (!uses_SSE_prefix && (prefixes & PREFIX_REPNZ))
+ if (!uses_REPNZ_prefix && (prefixes & PREFIX_REPNZ))
{
oappend ("repnz ");
used_prefixes |= PREFIX_REPNZ;
}
+
if (!uses_LOCK_prefix && (prefixes & PREFIX_LOCK))
{
oappend ("lock ");
@@ -2267,7 +3690,7 @@ print_insn (bfd_vma pc, disassemble_info *info)
if (prefixes & PREFIX_ADDR)
{
sizeflag ^= AFLAG;
- if (dp->bytemode3 != loop_jcxz_mode || intel_syntax)
+ if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
{
if ((sizeflag & AFLAG) || address_mode == mode_64bit)
oappend ("addr32 ");
@@ -2277,11 +3700,11 @@ print_insn (bfd_vma pc, disassemble_info *info)
}
}
- if (!uses_SSE_prefix && (prefixes & PREFIX_DATA))
+ if (!uses_DATA_prefix && (prefixes & PREFIX_DATA))
{
sizeflag ^= DFLAG;
- if (dp->bytemode3 == cond_jump_mode
- && dp->bytemode1 == v_mode
+ if (dp->op[2].bytemode == cond_jump_mode
+ && dp->op[0].bytemode == v_mode
&& !intel_syntax)
{
if (sizeflag & DFLAG)
@@ -2292,23 +3715,22 @@ print_insn (bfd_vma pc, disassemble_info *info)
}
}
- if (dp->name == NULL && dp->bytemode1 == IS_3BYTE_OPCODE)
+ if (dp->name == NULL && dp->op[0].bytemode == IS_3BYTE_OPCODE)
{
- FETCH_DATA (info, codep + 2);
- dp = &three_byte_table[dp->bytemode2][*codep++];
- mod = (*codep >> 6) & 3;
- reg = (*codep >> 3) & 7;
- rm = *codep & 7;
+ dp = &three_byte_table[dp->op[1].bytemode][op];
+ modrm.mod = (*codep >> 6) & 3;
+ modrm.reg = (*codep >> 3) & 7;
+ modrm.rm = *codep & 7;
}
else if (need_modrm)
{
FETCH_DATA (info, codep + 1);
- mod = (*codep >> 6) & 3;
- reg = (*codep >> 3) & 7;
- rm = *codep & 7;
+ modrm.mod = (*codep >> 6) & 3;
+ modrm.reg = (*codep >> 3) & 7;
+ modrm.rm = *codep & 7;
}
- if (dp->name == NULL && dp->bytemode1 == FLOATCODE)
+ if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
{
dofloat (sizeflag);
}
@@ -2317,10 +3739,10 @@ print_insn (bfd_vma pc, disassemble_info *info)
int index;
if (dp->name == NULL)
{
- switch (dp->bytemode1)
+ switch (dp->op[0].bytemode)
{
case USE_GROUPS:
- dp = &grps[dp->bytemode2][reg];
+ dp = &grps[dp->op[1].bytemode][modrm.reg];
break;
case USE_PREFIX_USER_TABLE:
@@ -2330,22 +3752,24 @@ print_insn (bfd_vma pc, disassemble_info *info)
index = 1;
else
{
- used_prefixes |= (prefixes & PREFIX_DATA);
- if (prefixes & PREFIX_DATA)
- index = 2;
+ /* We should check PREFIX_REPNZ and PREFIX_REPZ
+ before PREFIX_DATA. */
+ used_prefixes |= (prefixes & PREFIX_REPNZ);
+ if (prefixes & PREFIX_REPNZ)
+ index = 3;
else
{
- used_prefixes |= (prefixes & PREFIX_REPNZ);
- if (prefixes & PREFIX_REPNZ)
- index = 3;
+ used_prefixes |= (prefixes & PREFIX_DATA);
+ if (prefixes & PREFIX_DATA)
+ index = 2;
}
}
- dp = &prefix_user_table[dp->bytemode2][index];
+ dp = &prefix_user_table[dp->op[1].bytemode][index];
break;
case X86_64_SPECIAL:
index = address_mode == mode_64bit ? 1 : 0;
- dp = &x86_64_table[dp->bytemode2][index];
+ dp = &x86_64_table[dp->op[1].bytemode][index];
break;
default:
@@ -2355,21 +3779,14 @@ print_insn (bfd_vma pc, disassemble_info *info)
}
if (putop (dp->name, sizeflag) == 0)
- {
- obufp = op1out;
- op_ad = 2;
- if (dp->op1)
- (*dp->op1) (dp->bytemode1, sizeflag);
-
- obufp = op2out;
- op_ad = 1;
- if (dp->op2)
- (*dp->op2) (dp->bytemode2, sizeflag);
-
- obufp = op3out;
- op_ad = 0;
- if (dp->op3)
- (*dp->op3) (dp->bytemode3, sizeflag);
+ {
+ for (i = 0; i < MAX_OPERANDS; ++i)
+ {
+ obufp = op_out[i];
+ op_ad = MAX_OPERANDS - 1 - i;
+ if (dp->op[i].rtn)
+ (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
+ }
}
}
@@ -2406,53 +3823,47 @@ print_insn (bfd_vma pc, disassemble_info *info)
order as the intel book; everything else is printed in reverse order. */
if (intel_syntax || two_source_ops)
{
- first = op1out;
- second = op2out;
- third = op3out;
- op_ad = op_index[0];
- op_index[0] = op_index[2];
- op_index[2] = op_ad;
+ bfd_vma riprel;
+
+ for (i = 0; i < MAX_OPERANDS; ++i)
+ op_txt[i] = op_out[i];
+
+ for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
+ {
+ op_ad = op_index[i];
+ op_index[i] = op_index[MAX_OPERANDS - 1 - i];
+ op_index[MAX_OPERANDS - 1 - i] = op_ad;
+ riprel = op_riprel[i];
+ op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
+ op_riprel[MAX_OPERANDS - 1 - i] = riprel;
+ }
}
else
{
- first = op3out;
- second = op2out;
- third = op1out;
+ for (i = 0; i < MAX_OPERANDS; ++i)
+ op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
}
+
needcomma = 0;
- if (*first)
- {
- if (op_index[0] != -1 && !op_riprel[0])
- (*info->print_address_func) ((bfd_vma) op_address[op_index[0]], info);
- else
- (*info->fprintf_func) (info->stream, "%s", first);
- needcomma = 1;
- }
- if (*second)
- {
- if (needcomma)
- (*info->fprintf_func) (info->stream, ",");
- if (op_index[1] != -1 && !op_riprel[1])
- (*info->print_address_func) ((bfd_vma) op_address[op_index[1]], info);
- else
- (*info->fprintf_func) (info->stream, "%s", second);
- needcomma = 1;
- }
- if (*third)
- {
- if (needcomma)
- (*info->fprintf_func) (info->stream, ",");
- if (op_index[2] != -1 && !op_riprel[2])
- (*info->print_address_func) ((bfd_vma) op_address[op_index[2]], info);
- else
- (*info->fprintf_func) (info->stream, "%s", third);
- }
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAX_OPERANDS; ++i)
+ if (*op_txt[i])
+ {
+ if (needcomma)
+ (*info->fprintf_func) (info->stream, ",");
+ if (op_index[i] != -1 && !op_riprel[i])
+ (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
+ else
+ (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
+ needcomma = 1;
+ }
+
+ for (i = 0; i < MAX_OPERANDS; i++)
if (op_index[i] != -1 && op_riprel[i])
{
(*info->fprintf_func) (info->stream, " # ");
(*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
+ op_address[op_index[i]]), info);
+ break;
}
return codep - priv.the_buffer;
}
@@ -2607,37 +4018,37 @@ static const unsigned char float_mem_mode[] = {
q_mode
};
-#define ST OP_ST, 0
-#define STi OP_STi, 0
+#define ST { OP_ST, 0 }
+#define STi { OP_STi, 0 }
-#define FGRPd9_2 NULL, NULL, 0, NULL, 0, NULL, 0
-#define FGRPd9_4 NULL, NULL, 1, NULL, 0, NULL, 0
-#define FGRPd9_5 NULL, NULL, 2, NULL, 0, NULL, 0
-#define FGRPd9_6 NULL, NULL, 3, NULL, 0, NULL, 0
-#define FGRPd9_7 NULL, NULL, 4, NULL, 0, NULL, 0
-#define FGRPda_5 NULL, NULL, 5, NULL, 0, NULL, 0
-#define FGRPdb_4 NULL, NULL, 6, NULL, 0, NULL, 0
-#define FGRPde_3 NULL, NULL, 7, NULL, 0, NULL, 0
-#define FGRPdf_4 NULL, NULL, 8, NULL, 0, NULL, 0
+#define FGRPd9_2 NULL, { { NULL, 0 } }
+#define FGRPd9_4 NULL, { { NULL, 1 } }
+#define FGRPd9_5 NULL, { { NULL, 2 } }
+#define FGRPd9_6 NULL, { { NULL, 3 } }
+#define FGRPd9_7 NULL, { { NULL, 4 } }
+#define FGRPda_5 NULL, { { NULL, 5 } }
+#define FGRPdb_4 NULL, { { NULL, 6 } }
+#define FGRPde_3 NULL, { { NULL, 7 } }
+#define FGRPdf_4 NULL, { { NULL, 8 } }
static const struct dis386 float_reg[][8] = {
/* d8 */
{
- { "fadd", ST, STi, XX },
- { "fmul", ST, STi, XX },
- { "fcom", STi, XX, XX },
- { "fcomp", STi, XX, XX },
- { "fsub", ST, STi, XX },
- { "fsubr", ST, STi, XX },
- { "fdiv", ST, STi, XX },
- { "fdivr", ST, STi, XX },
+ { "fadd", { ST, STi } },
+ { "fmul", { ST, STi } },
+ { "fcom", { STi } },
+ { "fcomp", { STi } },
+ { "fsub", { ST, STi } },
+ { "fsubr", { ST, STi } },
+ { "fdiv", { ST, STi } },
+ { "fdivr", { ST, STi } },
},
/* d9 */
{
- { "fld", STi, XX, XX },
- { "fxch", STi, XX, XX },
+ { "fld", { STi } },
+ { "fxch", { STi } },
{ FGRPd9_2 },
- { "(bad)", XX, XX, XX },
+ { "(bad)", { XX } },
{ FGRPd9_4 },
{ FGRPd9_5 },
{ FGRPd9_6 },
@@ -2645,83 +4056,83 @@ static const struct dis386 float_reg[][8] = {
},
/* da */
{
- { "fcmovb", ST, STi, XX },
- { "fcmove", ST, STi, XX },
- { "fcmovbe",ST, STi, XX },
- { "fcmovu", ST, STi, XX },
- { "(bad)", XX, XX, XX },
+ { "fcmovb", { ST, STi } },
+ { "fcmove", { ST, STi } },
+ { "fcmovbe",{ ST, STi } },
+ { "fcmovu", { ST, STi } },
+ { "(bad)", { XX } },
{ FGRPda_5 },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
/* db */
{
- { "fcmovnb",ST, STi, XX },
- { "fcmovne",ST, STi, XX },
- { "fcmovnbe",ST, STi, XX },
- { "fcmovnu",ST, STi, XX },
+ { "fcmovnb",{ ST, STi } },
+ { "fcmovne",{ ST, STi } },
+ { "fcmovnbe",{ ST, STi } },
+ { "fcmovnu",{ ST, STi } },
{ FGRPdb_4 },
- { "fucomi", ST, STi, XX },
- { "fcomi", ST, STi, XX },
- { "(bad)", XX, XX, XX },
+ { "fucomi", { ST, STi } },
+ { "fcomi", { ST, STi } },
+ { "(bad)", { XX } },
},
/* dc */
{
- { "fadd", STi, ST, XX },
- { "fmul", STi, ST, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
-#if UNIXWARE_COMPAT
- { "fsub", STi, ST, XX },
- { "fsubr", STi, ST, XX },
- { "fdiv", STi, ST, XX },
- { "fdivr", STi, ST, XX },
+ { "fadd", { STi, ST } },
+ { "fmul", { STi, ST } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+#if SYSV386_COMPAT
+ { "fsub", { STi, ST } },
+ { "fsubr", { STi, ST } },
+ { "fdiv", { STi, ST } },
+ { "fdivr", { STi, ST } },
#else
- { "fsubr", STi, ST, XX },
- { "fsub", STi, ST, XX },
- { "fdivr", STi, ST, XX },
- { "fdiv", STi, ST, XX },
+ { "fsubr", { STi, ST } },
+ { "fsub", { STi, ST } },
+ { "fdivr", { STi, ST } },
+ { "fdiv", { STi, ST } },
#endif
},
/* dd */
{
- { "ffree", STi, XX, XX },
- { "(bad)", XX, XX, XX },
- { "fst", STi, XX, XX },
- { "fstp", STi, XX, XX },
- { "fucom", STi, XX, XX },
- { "fucomp", STi, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
+ { "ffree", { STi } },
+ { "(bad)", { XX } },
+ { "fst", { STi } },
+ { "fstp", { STi } },
+ { "fucom", { STi } },
+ { "fucomp", { STi } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
/* de */
{
- { "faddp", STi, ST, XX },
- { "fmulp", STi, ST, XX },
- { "(bad)", XX, XX, XX },
+ { "faddp", { STi, ST } },
+ { "fmulp", { STi, ST } },
+ { "(bad)", { XX } },
{ FGRPde_3 },
-#if UNIXWARE_COMPAT
- { "fsubp", STi, ST, XX },
- { "fsubrp", STi, ST, XX },
- { "fdivp", STi, ST, XX },
- { "fdivrp", STi, ST, XX },
+#if SYSV386_COMPAT
+ { "fsubp", { STi, ST } },
+ { "fsubrp", { STi, ST } },
+ { "fdivp", { STi, ST } },
+ { "fdivrp", { STi, ST } },
#else
- { "fsubrp", STi, ST, XX },
- { "fsubp", STi, ST, XX },
- { "fdivrp", STi, ST, XX },
- { "fdivp", STi, ST, XX },
+ { "fsubrp", { STi, ST } },
+ { "fsubp", { STi, ST } },
+ { "fdivrp", { STi, ST } },
+ { "fdivp", { STi, ST } },
#endif
},
/* df */
{
- { "ffreep", STi, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
- { "(bad)", XX, XX, XX },
+ { "ffreep", { STi } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ FGRPdf_4 },
- { "fucomip",ST, STi, XX },
- { "fcomip", ST, STi, XX },
- { "(bad)", XX, XX, XX },
+ { "fucomip", { ST, STi } },
+ { "fcomip", { ST, STi } },
+ { "(bad)", { XX } },
},
};
@@ -2781,12 +4192,12 @@ dofloat (int sizeflag)
floatop = codep[-1];
- if (mod != 3)
+ if (modrm.mod != 3)
{
- int fp_indx = (floatop - 0xd8) * 8 + reg;
+ int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
putop (float_mem[fp_indx], sizeflag);
- obufp = op1out;
+ obufp = op_out[0];
op_ad = 2;
OP_E (float_mem_mode[fp_indx], sizeflag);
return;
@@ -2795,28 +4206,28 @@ dofloat (int sizeflag)
MODRM_CHECK;
codep++;
- dp = &float_reg[floatop - 0xd8][reg];
+ dp = &float_reg[floatop - 0xd8][modrm.reg];
if (dp->name == NULL)
{
- putop (fgrps[dp->bytemode1][rm], sizeflag);
+ putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
/* Instruction fnstsw is only one with strange arg. */
if (floatop == 0xdf && codep[-1] == 0xe0)
- strcpy (op1out, names16[0]);
+ strcpy (op_out[0], names16[0]);
}
else
{
putop (dp->name, sizeflag);
- obufp = op1out;
+ obufp = op_out[0];
op_ad = 2;
- if (dp->op1)
- (*dp->op1) (dp->bytemode1, sizeflag);
+ if (dp->op[0].rtn)
+ (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
- obufp = op2out;
+ obufp = op_out[1];
op_ad = 1;
- if (dp->op2)
- (*dp->op2) (dp->bytemode2, sizeflag);
+ if (dp->op[1].rtn)
+ (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
}
}
@@ -2829,7 +4240,7 @@ OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
static void
OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
- sprintf (scratchbuf, "%%st(%d)", rm);
+ sprintf (scratchbuf, "%%st(%d)", modrm.rm);
oappend (scratchbuf + intel_syntax);
}
@@ -2885,7 +4296,7 @@ putop (const char *template, int sizeflag)
case 'A':
if (intel_syntax)
break;
- if (mod != 3 || (sizeflag & SUFFIX_ALWAYS))
+ if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
*obufp++ = 'b';
break;
case 'B':
@@ -2906,6 +4317,23 @@ putop (const char *template, int sizeflag)
used_prefixes |= (prefixes & PREFIX_DATA);
}
break;
+ case 'D':
+ if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
+ break;
+ USED_REX (REX_W);
+ if (modrm.mod == 3)
+ {
+ if (rex & REX_W)
+ *obufp++ = 'q';
+ else if (sizeflag & DFLAG)
+ *obufp++ = intel_syntax ? 'd' : 'l';
+ else
+ *obufp++ = 'w';
+ used_prefixes |= (prefixes & PREFIX_DATA);
+ }
+ else
+ *obufp++ = 'w';
+ break;
case 'E': /* For jcxz/jecxz */
if (address_mode == mode_64bit)
{
@@ -2931,6 +4359,16 @@ putop (const char *template, int sizeflag)
used_prefixes |= (prefixes & PREFIX_ADDR);
}
break;
+ case 'G':
+ if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
+ break;
+ if ((rex & REX_W) || (sizeflag & DFLAG))
+ *obufp++ = 'l';
+ else
+ *obufp++ = 'w';
+ if (!(rex & REX_W))
+ used_prefixes |= (prefixes & PREFIX_DATA);
+ break;
case 'H':
if (intel_syntax)
break;
@@ -2951,6 +4389,13 @@ putop (const char *template, int sizeflag)
break;
*obufp++ = 'l';
break;
+ case 'K':
+ USED_REX (REX_W);
+ if (rex & REX_W)
+ *obufp++ = 'q';
+ else
+ *obufp++ = 'd';
+ break;
case 'Z':
if (intel_syntax)
break;
@@ -2973,11 +4418,15 @@ putop (const char *template, int sizeflag)
used_prefixes |= PREFIX_FWAIT;
break;
case 'O':
- USED_REX (REX_MODE64);
- if (rex & REX_MODE64)
+ USED_REX (REX_W);
+ if (rex & REX_W)
*obufp++ = 'o';
+ else if (intel_syntax && (sizeflag & DFLAG))
+ *obufp++ = 'q';
else
*obufp++ = 'd';
+ if (!(rex & REX_W))
+ used_prefixes |= (prefixes & PREFIX_DATA);
break;
case 'T':
if (intel_syntax)
@@ -2992,11 +4441,11 @@ putop (const char *template, int sizeflag)
if (intel_syntax)
break;
if ((prefixes & PREFIX_DATA)
- || (rex & REX_MODE64)
+ || (rex & REX_W)
|| (sizeflag & SUFFIX_ALWAYS))
{
- USED_REX (REX_MODE64);
- if (rex & REX_MODE64)
+ USED_REX (REX_W);
+ if (rex & REX_W)
*obufp++ = 'q';
else
{
@@ -3013,7 +4462,7 @@ putop (const char *template, int sizeflag)
break;
if (address_mode == mode_64bit && (sizeflag & DFLAG))
{
- if (mod != 3 || (sizeflag & SUFFIX_ALWAYS))
+ if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
*obufp++ = 'q';
break;
}
@@ -3021,10 +4470,10 @@ putop (const char *template, int sizeflag)
case 'Q':
if (intel_syntax && !alt)
break;
- USED_REX (REX_MODE64);
- if (mod != 3 || (sizeflag & SUFFIX_ALWAYS))
+ USED_REX (REX_W);
+ if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
{
- if (rex & REX_MODE64)
+ if (rex & REX_W)
*obufp++ = 'q';
else
{
@@ -3037,35 +4486,22 @@ putop (const char *template, int sizeflag)
}
break;
case 'R':
- USED_REX (REX_MODE64);
- if (intel_syntax)
+ USED_REX (REX_W);
+ if (rex & REX_W)
+ *obufp++ = 'q';
+ else if (sizeflag & DFLAG)
{
- if (rex & REX_MODE64)
- {
- *obufp++ = 'q';
- *obufp++ = 't';
- }
- else if (sizeflag & DFLAG)
- {
+ if (intel_syntax)
*obufp++ = 'd';
- *obufp++ = 'q';
- }
else
- {
- *obufp++ = 'w';
- *obufp++ = 'd';
- }
+ *obufp++ = 'l';
}
else
- {
- if (rex & REX_MODE64)
- *obufp++ = 'q';
- else if (sizeflag & DFLAG)
- *obufp++ = 'l';
- else
- *obufp++ = 'w';
- }
- if (!(rex & REX_MODE64))
+ *obufp++ = 'w';
+ if (intel_syntax && !p[1]
+ && ((rex & REX_W) || (sizeflag & DFLAG)))
+ *obufp++ = 'e';
+ if (!(rex & REX_W))
used_prefixes |= (prefixes & PREFIX_DATA);
break;
case 'V':
@@ -3083,7 +4519,7 @@ putop (const char *template, int sizeflag)
break;
if (sizeflag & SUFFIX_ALWAYS)
{
- if (rex & REX_MODE64)
+ if (rex & REX_W)
*obufp++ = 'q';
else
{
@@ -3105,40 +4541,28 @@ putop (const char *template, int sizeflag)
case 'Y':
if (intel_syntax)
break;
- if (rex & REX_MODE64)
+ if (rex & REX_W)
{
- USED_REX (REX_MODE64);
+ USED_REX (REX_W);
*obufp++ = 'q';
}
break;
/* implicit operand size 'l' for i386 or 'q' for x86-64 */
case 'W':
/* operand size flag for cwtl, cbtw */
- USED_REX (0);
- if (rex)
- *obufp++ = 'l';
+ USED_REX (REX_W);
+ if (rex & REX_W)
+ {
+ if (intel_syntax)
+ *obufp++ = 'd';
+ else
+ *obufp++ = 'l';
+ }
else if (sizeflag & DFLAG)
*obufp++ = 'w';
else
*obufp++ = 'b';
- if (intel_syntax)
- {
- if (rex)
- {
- *obufp++ = 'q';
- *obufp++ = 'e';
- }
- if (sizeflag & DFLAG)
- {
- *obufp++ = 'd';
- *obufp++ = 'e';
- }
- else
- {
- *obufp++ = 'w';
- }
- }
- if (!rex)
+ if (!(rex & REX_W))
used_prefixes |= (prefixes & PREFIX_DATA);
break;
}
@@ -3255,12 +4679,57 @@ print_operand_value (char *buf, int hex, bfd_vma disp)
}
}
+/* Put DISP in BUF as signed hex number. */
+
+static void
+print_displacement (char *buf, bfd_vma disp)
+{
+ bfd_signed_vma val = disp;
+ char tmp[30];
+ int i, j = 0;
+
+ if (val < 0)
+ {
+ buf[j++] = '-';
+ val = -disp;
+
+ /* Check for possible overflow. */
+ if (val < 0)
+ {
+ switch (address_mode)
+ {
+ case mode_64bit:
+ strcpy (buf + j, "0x8000000000000000");
+ break;
+ case mode_32bit:
+ strcpy (buf + j, "0x80000000");
+ break;
+ case mode_16bit:
+ strcpy (buf + j, "0x8000");
+ break;
+ }
+ return;
+ }
+ }
+
+ buf[j++] = '0';
+ buf[j++] = 'x';
+
+ sprintf_vma (tmp, val);
+ for (i = 0; tmp[i] == '0'; i++)
+ continue;
+ if (tmp[i] == '\0')
+ i--;
+ strcpy (buf + j, tmp + i);
+}
+
static void
intel_operand_size (int bytemode, int sizeflag)
{
switch (bytemode)
{
case b_mode:
+ case dqb_mode:
oappend ("BYTE PTR ");
break;
case w_mode:
@@ -3277,8 +4746,8 @@ intel_operand_size (int bytemode, int sizeflag)
/* FALLTHRU */
case v_mode:
case dq_mode:
- USED_REX (REX_MODE64);
- if (rex & REX_MODE64)
+ USED_REX (REX_W);
+ if (rex & REX_W)
oappend ("QWORD PTR ");
else if ((sizeflag & DFLAG) || bytemode == dq_mode)
oappend ("DWORD PTR ");
@@ -3286,7 +4755,15 @@ intel_operand_size (int bytemode, int sizeflag)
oappend ("WORD PTR ");
used_prefixes |= (prefixes & PREFIX_DATA);
break;
+ case z_mode:
+ if ((rex & REX_W) || (sizeflag & DFLAG))
+ *obufp++ = 'D';
+ oappend ("WORD PTR ");
+ if (!(rex & REX_W))
+ used_prefixes |= (prefixes & PREFIX_DATA);
+ break;
case d_mode:
+ case dqd_mode:
oappend ("DWORD PTR ");
break;
case q_mode:
@@ -3311,6 +4788,9 @@ intel_operand_size (int bytemode, int sizeflag)
case x_mode:
oappend ("XMMWORD PTR ");
break;
+ case o_mode:
+ oappend ("OWORD PTR ");
+ break;
default:
break;
}
@@ -3322,44 +4802,44 @@ OP_E (int bytemode, int sizeflag)
bfd_vma disp;
int add = 0;
int riprel = 0;
- USED_REX (REX_EXTZ);
- if (rex & REX_EXTZ)
+ USED_REX (REX_B);
+ if (rex & REX_B)
add += 8;
/* Skip mod/rm byte. */
MODRM_CHECK;
codep++;
- if (mod == 3)
+ if (modrm.mod == 3)
{
switch (bytemode)
{
case b_mode:
USED_REX (0);
if (rex)
- oappend (names8rex[rm + add]);
+ oappend (names8rex[modrm.rm + add]);
else
- oappend (names8[rm + add]);
+ oappend (names8[modrm.rm + add]);
break;
case w_mode:
- oappend (names16[rm + add]);
+ oappend (names16[modrm.rm + add]);
break;
case d_mode:
- oappend (names32[rm + add]);
+ oappend (names32[modrm.rm + add]);
break;
case q_mode:
- oappend (names64[rm + add]);
+ oappend (names64[modrm.rm + add]);
break;
case m_mode:
if (address_mode == mode_64bit)
- oappend (names64[rm + add]);
+ oappend (names64[modrm.rm + add]);
else
- oappend (names32[rm + add]);
+ oappend (names32[modrm.rm + add]);
break;
case stack_v_mode:
if (address_mode == mode_64bit && (sizeflag & DFLAG))
{
- oappend (names64[rm + add]);
+ oappend (names64[modrm.rm + add]);
used_prefixes |= (prefixes & PREFIX_DATA);
break;
}
@@ -3367,14 +4847,16 @@ OP_E (int bytemode, int sizeflag)
/* FALLTHRU */
case v_mode:
case dq_mode:
+ case dqb_mode:
+ case dqd_mode:
case dqw_mode:
- USED_REX (REX_MODE64);
- if (rex & REX_MODE64)
- oappend (names64[rm + add]);
+ USED_REX (REX_W);
+ if (rex & REX_W)
+ oappend (names64[modrm.rm + add]);
else if ((sizeflag & DFLAG) || bytemode != v_mode)
- oappend (names32[rm + add]);
+ oappend (names32[modrm.rm + add]);
else
- oappend (names16[rm + add]);
+ oappend (names16[modrm.rm + add]);
used_prefixes |= (prefixes & PREFIX_DATA);
break;
case 0:
@@ -3391,8 +4873,10 @@ OP_E (int bytemode, int sizeflag)
intel_operand_size (bytemode, sizeflag);
append_seg ();
- if ((sizeflag & AFLAG) || address_mode == mode_64bit) /* 32 bit address mode */
+ if ((sizeflag & AFLAG) || address_mode == mode_64bit)
{
+ /* 32/64 bit address mode */
+ int havedisp;
int havesib;
int havebase;
int base;
@@ -3401,7 +4885,7 @@ OP_E (int bytemode, int sizeflag)
havesib = 0;
havebase = 1;
- base = rm;
+ base = modrm.rm;
if (base == 4)
{
@@ -3412,14 +4896,14 @@ OP_E (int bytemode, int sizeflag)
/* When INDEX == 0x4 in 32 bit mode, SCALE is ignored. */
scale = (*codep >> 6) & 3;
base = *codep & 7;
- USED_REX (REX_EXTY);
- if (rex & REX_EXTY)
+ USED_REX (REX_X);
+ if (rex & REX_X)
index += 8;
codep++;
}
base += add;
- switch (mod)
+ switch (modrm.mod)
{
case 0:
if ((base & 7) == 5)
@@ -3441,10 +4925,15 @@ OP_E (int bytemode, int sizeflag)
break;
}
+ havedisp = havebase || (havesib && (index != 4 || scale != 0));
+
if (!intel_syntax)
- if (mod != 0 || (base & 7) == 5)
+ if (modrm.mod != 0 || (base & 7) == 5)
{
- print_operand_value (scratchbuf, !riprel, disp);
+ if (havedisp || riprel)
+ print_displacement (scratchbuf, disp);
+ else
+ print_operand_value (scratchbuf, 1, disp);
oappend (scratchbuf);
if (riprel)
{
@@ -3453,11 +4942,14 @@ OP_E (int bytemode, int sizeflag)
}
}
- if (havebase || (havesib && (index != 4 || scale != 0)))
+ if (havedisp || (intel_syntax && riprel))
{
*obufp++ = open_char;
if (intel_syntax && riprel)
- oappend ("rip + ");
+ {
+ set_op (disp, 1);
+ oappend ("rip");
+ }
*obufp = '\0';
if (havebase)
oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
@@ -3482,21 +4974,22 @@ OP_E (int bytemode, int sizeflag)
oappend (scratchbuf);
}
}
- if (intel_syntax && disp)
+ if (intel_syntax
+ && (disp || modrm.mod != 0 || (base & 7) == 5))
{
- if ((bfd_signed_vma) disp > 0)
+ if ((bfd_signed_vma) disp >= 0)
{
*obufp++ = '+';
*obufp = '\0';
}
- else if (mod != 1)
+ else if (modrm.mod != 1)
{
*obufp++ = '-';
*obufp = '\0';
disp = - (bfd_signed_vma) disp;
}
- print_operand_value (scratchbuf, mod != 1, disp);
+ print_displacement (scratchbuf, disp);
oappend (scratchbuf);
}
@@ -3505,7 +4998,7 @@ OP_E (int bytemode, int sizeflag)
}
else if (intel_syntax)
{
- if (mod != 0 || (base & 7) == 5)
+ if (modrm.mod != 0 || (base & 7) == 5)
{
if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
| PREFIX_ES | PREFIX_FS | PREFIX_GS))
@@ -3522,10 +5015,10 @@ OP_E (int bytemode, int sizeflag)
}
else
{ /* 16 bit address mode */
- switch (mod)
+ switch (modrm.mod)
{
case 0:
- if (rm == 6)
+ if (modrm.rm == 6)
{
disp = get16 ();
if ((disp & 0x8000) != 0)
@@ -3546,32 +5039,33 @@ OP_E (int bytemode, int sizeflag)
}
if (!intel_syntax)
- if (mod != 0 || rm == 6)
+ if (modrm.mod != 0 || modrm.rm == 6)
{
- print_operand_value (scratchbuf, 0, disp);
+ print_displacement (scratchbuf, disp);
oappend (scratchbuf);
}
- if (mod != 0 || rm != 6)
+ if (modrm.mod != 0 || modrm.rm != 6)
{
*obufp++ = open_char;
*obufp = '\0';
- oappend (index16[rm]);
- if (intel_syntax && disp)
+ oappend (index16[modrm.rm]);
+ if (intel_syntax
+ && (disp || modrm.mod != 0 || modrm.rm == 6))
{
- if ((bfd_signed_vma) disp > 0)
+ if ((bfd_signed_vma) disp >= 0)
{
*obufp++ = '+';
*obufp = '\0';
}
- else if (mod != 1)
+ else if (modrm.mod != 1)
{
*obufp++ = '-';
*obufp = '\0';
disp = - (bfd_signed_vma) disp;
}
- print_operand_value (scratchbuf, mod != 1, disp);
+ print_displacement (scratchbuf, disp);
oappend (scratchbuf);
}
@@ -3598,44 +5092,46 @@ static void
OP_G (int bytemode, int sizeflag)
{
int add = 0;
- USED_REX (REX_EXTX);
- if (rex & REX_EXTX)
+ USED_REX (REX_R);
+ if (rex & REX_R)
add += 8;
switch (bytemode)
{
case b_mode:
USED_REX (0);
if (rex)
- oappend (names8rex[reg + add]);
+ oappend (names8rex[modrm.reg + add]);
else
- oappend (names8[reg + add]);
+ oappend (names8[modrm.reg + add]);
break;
case w_mode:
- oappend (names16[reg + add]);
+ oappend (names16[modrm.reg + add]);
break;
case d_mode:
- oappend (names32[reg + add]);
+ oappend (names32[modrm.reg + add]);
break;
case q_mode:
- oappend (names64[reg + add]);
+ oappend (names64[modrm.reg + add]);
break;
case v_mode:
case dq_mode:
+ case dqb_mode:
+ case dqd_mode:
case dqw_mode:
- USED_REX (REX_MODE64);
- if (rex & REX_MODE64)
- oappend (names64[reg + add]);
+ USED_REX (REX_W);
+ if (rex & REX_W)
+ oappend (names64[modrm.reg + add]);
else if ((sizeflag & DFLAG) || bytemode != v_mode)
- oappend (names32[reg + add]);
+ oappend (names32[modrm.reg + add]);
else
- oappend (names16[reg + add]);
+ oappend (names16[modrm.reg + add]);
used_prefixes |= (prefixes & PREFIX_DATA);
break;
case m_mode:
if (address_mode == mode_64bit)
- oappend (names64[reg + add]);
+ oappend (names64[modrm.reg + add]);
else
- oappend (names32[reg + add]);
+ oappend (names32[modrm.reg + add]);
break;
default:
oappend (INTERNAL_DISASSEMBLER_ERROR);
@@ -3730,18 +5226,12 @@ OP_REG (int code, int sizeflag)
{
const char *s;
int add = 0;
- USED_REX (REX_EXTZ);
- if (rex & REX_EXTZ)
+ USED_REX (REX_B);
+ if (rex & REX_B)
add = 8;
switch (code)
{
- case indir_dx_reg:
- if (intel_syntax)
- s = "[dx]";
- else
- s = "(%dx)";
- break;
case ax_reg: case cx_reg: case dx_reg: case bx_reg:
case sp_reg: case bp_reg: case si_reg: case di_reg:
s = names16[code - ax_reg + add];
@@ -3769,8 +5259,8 @@ OP_REG (int code, int sizeflag)
/* Fall through. */
case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
- USED_REX (REX_MODE64);
- if (rex & REX_MODE64)
+ USED_REX (REX_W);
+ if (rex & REX_W)
s = names64[code - eAX_reg + add];
else if (sizeflag & DFLAG)
s = names32[code - eAX_reg + add];
@@ -3794,7 +5284,7 @@ OP_IMREG (int code, int sizeflag)
{
case indir_dx_reg:
if (intel_syntax)
- s = "[dx]";
+ s = "dx";
else
s = "(%dx)";
break;
@@ -3816,8 +5306,8 @@ OP_IMREG (int code, int sizeflag)
break;
case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
- USED_REX (REX_MODE64);
- if (rex & REX_MODE64)
+ USED_REX (REX_W);
+ if (rex & REX_W)
s = names64[code - eAX_reg];
else if (sizeflag & DFLAG)
s = names32[code - eAX_reg];
@@ -3825,6 +5315,14 @@ OP_IMREG (int code, int sizeflag)
s = names16[code - eAX_reg];
used_prefixes |= (prefixes & PREFIX_DATA);
break;
+ case z_mode_ax_reg:
+ if ((rex & REX_W) || (sizeflag & DFLAG))
+ s = *names32;
+ else
+ s = *names16;
+ if (!(rex & REX_W))
+ used_prefixes |= (prefixes & PREFIX_DATA);
+ break;
default:
s = INTERNAL_DISASSEMBLER_ERROR;
break;
@@ -3853,8 +5351,8 @@ OP_I (int bytemode, int sizeflag)
}
/* Fall through. */
case v_mode:
- USED_REX (REX_MODE64);
- if (rex & REX_MODE64)
+ USED_REX (REX_W);
+ if (rex & REX_W)
op = get32s ();
else if (sizeflag & DFLAG)
{
@@ -3908,8 +5406,8 @@ OP_I64 (int bytemode, int sizeflag)
mask = 0xff;
break;
case v_mode:
- USED_REX (REX_MODE64);
- if (rex & REX_MODE64)
+ USED_REX (REX_W);
+ if (rex & REX_W)
op = get64 ();
else if (sizeflag & DFLAG)
{
@@ -3955,8 +5453,8 @@ OP_sI (int bytemode, int sizeflag)
mask = 0xffffffff;
break;
case v_mode:
- USED_REX (REX_MODE64);
- if (rex & REX_MODE64)
+ USED_REX (REX_W);
+ if (rex & REX_W)
op = get32s ();
else if (sizeflag & DFLAG)
{
@@ -3993,6 +5491,7 @@ OP_J (int bytemode, int sizeflag)
{
bfd_vma disp;
bfd_vma mask = -1;
+ bfd_vma segment = 0;
switch (bytemode)
{
@@ -4003,31 +5502,41 @@ OP_J (int bytemode, int sizeflag)
disp -= 0x100;
break;
case v_mode:
- if ((sizeflag & DFLAG) || (rex & REX_MODE64))
+ if ((sizeflag & DFLAG) || (rex & REX_W))
disp = get32s ();
else
{
disp = get16 ();
- /* For some reason, a data16 prefix on a jump instruction
- means that the pc is masked to 16 bits after the
- displacement is added! */
+ if ((disp & 0x8000) != 0)
+ disp -= 0x10000;
+ /* In 16bit mode, address is wrapped around at 64k within
+ the same segment. Otherwise, a data16 prefix on a jump
+ instruction means that the pc is masked to 16 bits after
+ the displacement is added! */
mask = 0xffff;
+ if ((prefixes & PREFIX_DATA) == 0)
+ segment = ((start_pc + codep - start_codep)
+ & ~((bfd_vma) 0xffff));
}
+ used_prefixes |= (prefixes & PREFIX_DATA);
break;
default:
oappend (INTERNAL_DISASSEMBLER_ERROR);
return;
}
- disp = (start_pc + codep - start_codep + disp) & mask;
+ disp = ((start_pc + codep - start_codep + disp) & mask) | segment;
set_op (disp, 0);
print_operand_value (scratchbuf, 1, disp);
oappend (scratchbuf);
}
static void
-OP_SEG (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
+OP_SEG (int bytemode, int sizeflag)
{
- oappend (names_seg[reg]);
+ if (bytemode == w_mode)
+ oappend (names_seg[modrm.reg]);
+ else
+ OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
}
static void
@@ -4085,7 +5594,8 @@ OP_OFF64 (int bytemode, int sizeflag)
{
bfd_vma off;
- if (address_mode != mode_64bit)
+ if (address_mode != mode_64bit
+ || (prefixes & PREFIX_ADDR))
{
OP_OFF (bytemode, sizeflag);
return;
@@ -4137,7 +5647,22 @@ static void
OP_ESreg (int code, int sizeflag)
{
if (intel_syntax)
- intel_operand_size (codep[-1] & 1 ? v_mode : b_mode, sizeflag);
+ {
+ switch (codep[-1])
+ {
+ case 0x6d: /* insw/insl */
+ intel_operand_size (z_mode, sizeflag);
+ break;
+ case 0xa5: /* movsw/movsl/movsq */
+ case 0xa7: /* cmpsw/cmpsl/cmpsq */
+ case 0xab: /* stosw/stosl */
+ case 0xaf: /* scasw/scasl */
+ intel_operand_size (v_mode, sizeflag);
+ break;
+ default:
+ intel_operand_size (b_mode, sizeflag);
+ }
+ }
oappend ("%es:" + intel_syntax);
ptr_reg (code, sizeflag);
}
@@ -4146,10 +5671,21 @@ static void
OP_DSreg (int code, int sizeflag)
{
if (intel_syntax)
- intel_operand_size (codep[-1] != 0xd7 && (codep[-1] & 1)
- ? v_mode
- : b_mode,
- sizeflag);
+ {
+ switch (codep[-1])
+ {
+ case 0x6f: /* outsw/outsl */
+ intel_operand_size (z_mode, sizeflag);
+ break;
+ case 0xa5: /* movsw/movsl/movsq */
+ case 0xa7: /* cmpsw/cmpsl/cmpsq */
+ case 0xad: /* lodsw/lodsl/lodsq */
+ intel_operand_size (v_mode, sizeflag);
+ break;
+ default:
+ intel_operand_size (b_mode, sizeflag);
+ }
+ }
if ((prefixes
& (PREFIX_CS
| PREFIX_DS
@@ -4166,9 +5702,9 @@ static void
OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
int add = 0;
- if (rex & REX_EXTX)
+ if (rex & REX_R)
{
- USED_REX (REX_EXTX);
+ USED_REX (REX_R);
add = 8;
}
else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
@@ -4176,7 +5712,7 @@ OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
used_prefixes |= PREFIX_LOCK;
add = 8;
}
- sprintf (scratchbuf, "%%cr%d", reg + add);
+ sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
oappend (scratchbuf + intel_syntax);
}
@@ -4184,27 +5720,27 @@ static void
OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
int add = 0;
- USED_REX (REX_EXTX);
- if (rex & REX_EXTX)
+ USED_REX (REX_R);
+ if (rex & REX_R)
add = 8;
if (intel_syntax)
- sprintf (scratchbuf, "db%d", reg + add);
+ sprintf (scratchbuf, "db%d", modrm.reg + add);
else
- sprintf (scratchbuf, "%%db%d", reg + add);
+ sprintf (scratchbuf, "%%db%d", modrm.reg + add);
oappend (scratchbuf);
}
static void
OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
- sprintf (scratchbuf, "%%tr%d", reg);
+ sprintf (scratchbuf, "%%tr%d", modrm.reg);
oappend (scratchbuf + intel_syntax);
}
static void
-OP_Rd (int bytemode, int sizeflag)
+OP_R (int bytemode, int sizeflag)
{
- if (mod == 3)
+ if (modrm.mod == 3)
OP_E (bytemode, sizeflag);
else
BadOp ();
@@ -4217,13 +5753,13 @@ OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
if (prefixes & PREFIX_DATA)
{
int add = 0;
- USED_REX (REX_EXTX);
- if (rex & REX_EXTX)
+ USED_REX (REX_R);
+ if (rex & REX_R)
add = 8;
- sprintf (scratchbuf, "%%xmm%d", reg + add);
+ sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
}
else
- sprintf (scratchbuf, "%%mm%d", reg);
+ sprintf (scratchbuf, "%%mm%d", modrm.reg);
oappend (scratchbuf + intel_syntax);
}
@@ -4231,17 +5767,17 @@ static void
OP_XMM (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
int add = 0;
- USED_REX (REX_EXTX);
- if (rex & REX_EXTX)
+ USED_REX (REX_R);
+ if (rex & REX_R)
add = 8;
- sprintf (scratchbuf, "%%xmm%d", reg + add);
+ sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
oappend (scratchbuf + intel_syntax);
}
static void
OP_EM (int bytemode, int sizeflag)
{
- if (mod != 3)
+ if (modrm.mod != 3)
{
if (intel_syntax && bytemode == v_mode)
{
@@ -4260,51 +5796,75 @@ OP_EM (int bytemode, int sizeflag)
{
int add = 0;
- USED_REX (REX_EXTZ);
- if (rex & REX_EXTZ)
+ USED_REX (REX_B);
+ if (rex & REX_B)
add = 8;
- sprintf (scratchbuf, "%%xmm%d", rm + add);
+ sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
}
else
- sprintf (scratchbuf, "%%mm%d", rm);
+ sprintf (scratchbuf, "%%mm%d", modrm.rm);
oappend (scratchbuf + intel_syntax);
}
+/* cvt* are the only instructions in sse2 which have
+ both SSE and MMX operands and also have 0x66 prefix
+ in their opcode. 0x66 was originally used to differentiate
+ between SSE and MMX instruction(operands). So we have to handle the
+ cvt* separately using OP_EMC and OP_MXC */
static void
-OP_EX (int bytemode, int sizeflag)
+OP_EMC (int bytemode, int sizeflag)
{
- int add = 0;
- if (mod != 3)
+ if (modrm.mod != 3)
{
if (intel_syntax && bytemode == v_mode)
{
- switch (prefixes & (PREFIX_DATA|PREFIX_REPZ|PREFIX_REPNZ))
- {
- case 0: bytemode = x_mode; break;
- case PREFIX_REPZ: bytemode = d_mode; used_prefixes |= PREFIX_REPZ; break;
- case PREFIX_DATA: bytemode = x_mode; used_prefixes |= PREFIX_DATA; break;
- case PREFIX_REPNZ: bytemode = q_mode; used_prefixes |= PREFIX_REPNZ; break;
- default: bytemode = 0; break;
- }
- }
+ bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
+ used_prefixes |= (prefixes & PREFIX_DATA);
+ }
OP_E (bytemode, sizeflag);
return;
}
- USED_REX (REX_EXTZ);
- if (rex & REX_EXTZ)
+
+ /* Skip mod/rm byte. */
+ MODRM_CHECK;
+ codep++;
+ used_prefixes |= (prefixes & PREFIX_DATA);
+ sprintf (scratchbuf, "%%mm%d", modrm.rm);
+ oappend (scratchbuf + intel_syntax);
+}
+
+static void
+OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
+{
+ used_prefixes |= (prefixes & PREFIX_DATA);
+ sprintf (scratchbuf, "%%mm%d", modrm.reg);
+ oappend (scratchbuf + intel_syntax);
+}
+
+static void
+OP_EX (int bytemode, int sizeflag)
+{
+ int add = 0;
+ if (modrm.mod != 3)
+ {
+ OP_E (bytemode, sizeflag);
+ return;
+ }
+ USED_REX (REX_B);
+ if (rex & REX_B)
add = 8;
/* Skip mod/rm byte. */
MODRM_CHECK;
codep++;
- sprintf (scratchbuf, "%%xmm%d", rm + add);
+ sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
oappend (scratchbuf + intel_syntax);
}
static void
OP_MS (int bytemode, int sizeflag)
{
- if (mod == 3)
+ if (modrm.mod == 3)
OP_EM (bytemode, sizeflag);
else
BadOp ();
@@ -4313,7 +5873,7 @@ OP_MS (int bytemode, int sizeflag)
static void
OP_XS (int bytemode, int sizeflag)
{
- if (mod == 3)
+ if (modrm.mod == 3)
OP_EX (bytemode, sizeflag);
else
BadOp ();
@@ -4322,8 +5882,9 @@ OP_XS (int bytemode, int sizeflag)
static void
OP_M (int bytemode, int sizeflag)
{
- if (mod == 3)
- BadOp (); /* bad lea,lds,les,lfs,lgs,lss modrm */
+ if (modrm.mod == 3)
+ /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
+ BadOp ();
else
OP_E (bytemode, sizeflag);
}
@@ -4331,7 +5892,7 @@ OP_M (int bytemode, int sizeflag)
static void
OP_0f07 (int bytemode, int sizeflag)
{
- if (mod != 3 || rm != 0)
+ if (modrm.mod != 3 || modrm.rm != 0)
BadOp ();
else
OP_E (bytemode, sizeflag);
@@ -4340,18 +5901,18 @@ OP_0f07 (int bytemode, int sizeflag)
static void
OP_0fae (int bytemode, int sizeflag)
{
- if (mod == 3)
+ if (modrm.mod == 3)
{
- if (reg == 7)
+ if (modrm.reg == 7)
strcpy (obuf + strlen (obuf) - sizeof ("clflush") + 1, "sfence");
- if (reg < 5 || rm != 0)
+ if (modrm.reg < 5 || modrm.rm != 0)
{
BadOp (); /* bad sfence, mfence, or lfence */
return;
}
}
- else if (reg != 7)
+ else if (modrm.reg != 7)
{
BadOp (); /* bad clflush */
return;
@@ -4360,12 +5921,29 @@ OP_0fae (int bytemode, int sizeflag)
OP_E (bytemode, sizeflag);
}
+/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
+ 32bit mode and "xchg %rax,%rax" in 64bit mode. */
+
+static void
+NOP_Fixup1 (int bytemode, int sizeflag)
+{
+ if ((prefixes & PREFIX_DATA) != 0
+ || (rex != 0
+ && rex != 0x48
+ && address_mode == mode_64bit))
+ OP_REG (bytemode, sizeflag);
+ else
+ strcpy (obuf, "nop");
+}
+
static void
-NOP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
+NOP_Fixup2 (int bytemode, int sizeflag)
{
- /* NOP with REPZ prefix is called PAUSE. */
- if (prefixes == PREFIX_REPZ)
- strcpy (obuf, "pause");
+ if ((prefixes & PREFIX_DATA) != 0
+ || (rex != 0
+ && rex != 0x48
+ && address_mode == mode_64bit))
+ OP_IMREG (bytemode, sizeflag);
}
static const char *const Suffix3DNow[] = {
@@ -4414,7 +5992,7 @@ static const char *const Suffix3DNow[] = {
/* A8 */ NULL, NULL, "pfsubr", NULL,
/* AC */ NULL, NULL, "pfacc", NULL,
/* B0 */ "pfcmpeq", NULL, NULL, NULL,
-/* B4 */ "pfmul", NULL, "pfrcpit2", "pfmulhrw",
+/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
/* B8 */ NULL, NULL, NULL, "pswapd",
/* BC */ NULL, NULL, NULL, "pavgusb",
/* C0 */ NULL, NULL, NULL, NULL,
@@ -4454,8 +6032,8 @@ OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
of the opcode (0x0f0f) and the opcode suffix, we need to do
all the modrm processing first, and don't know until now that
we have a bad opcode. This necessitates some cleaning up. */
- op1out[0] = '\0';
- op2out[0] = '\0';
+ op_out[0][0] = '\0';
+ op_out[1][0] = '\0';
BadOp ();
}
}
@@ -4505,8 +6083,8 @@ OP_SIMD_Suffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
else
{
/* We have a bad extension byte. Clean up. */
- op1out[0] = '\0';
- op2out[0] = '\0';
+ op_out[0][0] = '\0';
+ op_out[1][0] = '\0';
BadOp ();
}
}
@@ -4516,7 +6094,7 @@ SIMD_Fixup (int extrachar, int sizeflag ATTRIBUTE_UNUSED)
{
/* Change movlps/movhps to movhlps/movlhps for 2 register operand
forms of these instructions. */
- if (mod == 3)
+ if (modrm.mod == 3)
{
char *p = obuf + strlen (obuf);
*(p + 1) = '\0';
@@ -4530,7 +6108,7 @@ SIMD_Fixup (int extrachar, int sizeflag ATTRIBUTE_UNUSED)
static void
PNI_Fixup (int extrachar ATTRIBUTE_UNUSED, int sizeflag)
{
- if (mod == 3 && reg == 1 && rm <= 1)
+ if (modrm.mod == 3 && modrm.reg == 1 && modrm.rm <= 1)
{
/* Override "sidt". */
size_t olen = strlen (obuf);
@@ -4547,17 +6125,17 @@ PNI_Fixup (int extrachar ATTRIBUTE_UNUSED, int sizeflag)
&& (prefixes & PREFIX_ADDR)
&& olen >= (4 + 7)
&& *(p - 1) == ' '
- && strncmp (p - 7, "addr", 4) == 0
- && (strncmp (p - 3, "16", 2) == 0
- || strncmp (p - 3, "32", 2) == 0))
+ && CONST_STRNEQ (p - 7, "addr")
+ && (CONST_STRNEQ (p - 3, "16")
+ || CONST_STRNEQ (p - 3, "32")))
p -= 7;
- if (rm)
+ if (modrm.rm)
{
/* mwait %eax,%ecx */
strcpy (p, "mwait");
if (!intel_syntax)
- strcpy (op1out, names[0]);
+ strcpy (op_out[0], names[0]);
}
else
{
@@ -4575,13 +6153,13 @@ PNI_Fixup (int extrachar ATTRIBUTE_UNUSED, int sizeflag)
? names32 : names16);
used_prefixes |= PREFIX_ADDR;
}
- strcpy (op1out, op1_names[0]);
- strcpy (op3out, names[2]);
+ strcpy (op_out[0], op1_names[0]);
+ strcpy (op_out[2], names[2]);
}
}
if (!intel_syntax)
{
- strcpy (op2out, names[1]);
+ strcpy (op_out[1], names[1]);
two_source_ops = 1;
}
@@ -4642,7 +6220,7 @@ SVME_Fixup (int bytemode, int sizeflag)
switch (*codep++)
{
case 0xdf:
- strcpy (op2out, names32[1]);
+ strcpy (op_out[1], names32[1]);
two_source_ops = 1;
/* Fall through. */
case 0xd8:
@@ -4692,58 +6270,12 @@ BadOp (void)
}
static void
-SEG_Fixup (int extrachar, int sizeflag)
-{
- if (mod == 3)
- {
- /* We need to add a proper suffix with
-
- movw %ds,%ax
- movl %ds,%eax
- movq %ds,%rax
- movw %ax,%ds
- movl %eax,%ds
- movq %rax,%ds
- */
- const char *suffix;
-
- if (prefixes & PREFIX_DATA)
- suffix = "w";
- else
- {
- USED_REX (REX_MODE64);
- if (rex & REX_MODE64)
- suffix = "q";
- else
- suffix = "l";
- }
- strcat (obuf, suffix);
- }
- else
- {
- /* We need to fix the suffix for
-
- movw %ds,(%eax)
- movw %ds,(%rax)
- movw (%eax),%ds
- movw (%rax),%ds
-
- Override "mov[l|q]". */
- char *p = obuf + strlen (obuf) - 1;
-
- /* We might not have a suffix. */
- if (*p == 'v')
- ++p;
- *p = 'w';
- }
-
- OP_E (extrachar, sizeflag);
-}
-
-static void
VMX_Fixup (int extrachar ATTRIBUTE_UNUSED, int sizeflag)
{
- if (mod == 3 && reg == 0 && rm >=1 && rm <= 4)
+ if (modrm.mod == 3
+ && modrm.reg == 0
+ && modrm.rm >=1
+ && modrm.rm <= 4)
{
/* Override "sgdt". */
char *p = obuf + strlen (obuf) - 4;
@@ -4752,7 +6284,7 @@ VMX_Fixup (int extrachar ATTRIBUTE_UNUSED, int sizeflag)
if (*p == 'g')
--p;
- switch (rm)
+ switch (modrm.rm)
{
case 1:
strcpy (p, "vmcall");
@@ -4795,7 +6327,7 @@ REP_Fixup (int bytemode, int sizeflag)
size_t ilen = 0;
if (prefixes & PREFIX_REPZ)
- switch (*insn_codep)
+ switch (*insn_codep)
{
case 0x6e: /* outsb */
case 0x6f: /* outsw/outsl */
@@ -4859,3 +6391,90 @@ REP_Fixup (int bytemode, int sizeflag)
break;
}
}
+
+static void
+CMPXCHG8B_Fixup (int bytemode, int sizeflag)
+{
+ USED_REX (REX_W);
+ if (rex & REX_W)
+ {
+ /* Change cmpxchg8b to cmpxchg16b. */
+ char *p = obuf + strlen (obuf) - 2;
+ strcpy (p, "16b");
+ bytemode = o_mode;
+ }
+ OP_M (bytemode, sizeflag);
+}
+
+static void
+XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
+{
+ sprintf (scratchbuf, "%%xmm%d", reg);
+ oappend (scratchbuf + intel_syntax);
+}
+
+static void
+CRC32_Fixup (int bytemode, int sizeflag)
+{
+ /* Add proper suffix to "crc32". */
+ char *p = obuf + strlen (obuf);
+
+ switch (bytemode)
+ {
+ case b_mode:
+ if (intel_syntax)
+ break;
+
+ *p++ = 'b';
+ break;
+ case v_mode:
+ if (intel_syntax)
+ break;
+
+ USED_REX (REX_W);
+ if (rex & REX_W)
+ *p++ = 'q';
+ else if (sizeflag & DFLAG)
+ *p++ = 'l';
+ else
+ *p++ = 'w';
+ used_prefixes |= (prefixes & PREFIX_DATA);
+ break;
+ default:
+ oappend (INTERNAL_DISASSEMBLER_ERROR);
+ break;
+ }
+ *p = '\0';
+
+ if (modrm.mod == 3)
+ {
+ int add;
+
+ /* Skip mod/rm byte. */
+ MODRM_CHECK;
+ codep++;
+
+ USED_REX (REX_B);
+ add = (rex & REX_B) ? 8 : 0;
+ if (bytemode == b_mode)
+ {
+ USED_REX (0);
+ if (rex)
+ oappend (names8rex[modrm.rm + add]);
+ else
+ oappend (names8[modrm.rm + add]);
+ }
+ else
+ {
+ USED_REX (REX_W);
+ if (rex & REX_W)
+ oappend (names64[modrm.rm + add]);
+ else if ((prefixes & PREFIX_DATA))
+ oappend (names16[modrm.rm + add]);
+ else
+ oappend (names32[modrm.rm + add]);
+ }
+ }
+ else
+ OP_E (bytemode, sizeflag);
+}
diff --git a/opcodes/i386-gen.c b/opcodes/i386-gen.c
new file mode 100644
index 000000000000..80d414f4a80a
--- /dev/null
+++ b/opcodes/i386-gen.c
@@ -0,0 +1,394 @@
+/* Copyright 2007 Free Software Foundation, Inc.
+
+ This file is part of GAS, the GNU Assembler, and GDB, the GNU Debugger.
+
+ 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 <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include "getopt.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+
+#include "i386-opc.h"
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+static const char *program_name = NULL;
+static int debug = 0;
+
+static void
+fail (const char *message, ...)
+{
+ va_list args;
+
+ va_start (args, message);
+ fprintf (stderr, _("%s: Error: "), program_name);
+ vfprintf (stderr, message, args);
+ va_end (args);
+ xexit (1);
+}
+
+/* Remove leading white spaces. */
+
+static char *
+remove_leading_whitespaces (char *str)
+{
+ while (ISSPACE (*str))
+ str++;
+ return str;
+}
+
+/* Remove trailing white spaces. */
+
+static void
+remove_trailing_whitespaces (char *str)
+{
+ size_t last = strlen (str);
+
+ if (last == 0)
+ return;
+
+ do
+ {
+ last--;
+ if (ISSPACE (str [last]))
+ str[last] = '\0';
+ else
+ break;
+ }
+ while (last != 0);
+}
+
+/* Find next field separated by '.' and terminate it. Return a
+ pointer to the one after it. */
+
+static char *
+next_field (char *str, char **next)
+{
+ char *p;
+
+ p = remove_leading_whitespaces (str);
+ for (str = p; *str != ',' && *str != '\0'; str++);
+
+ *str = '\0';
+ remove_trailing_whitespaces (p);
+
+ *next = str + 1;
+
+ return p;
+}
+
+static void
+process_i386_opcodes (void)
+{
+ FILE *fp = fopen ("i386-opc.tbl", "r");
+ char buf[2048];
+ unsigned int i;
+ char *str, *p, *last;
+ char *name, *operands, *base_opcode, *extension_opcode;
+ char *cpu_flags, *opcode_modifier, *operand_types [MAX_OPERANDS];
+
+ if (fp == NULL)
+ fail (_("can't find i386-opc.tbl for reading\n"));
+
+ printf ("\n/* i386 opcode table. */\n\n");
+ printf ("const template i386_optab[] =\n{\n");
+
+ while (!feof (fp))
+ {
+ if (fgets (buf, sizeof (buf), fp) == NULL)
+ break;
+
+ p = remove_leading_whitespaces (buf);
+
+ /* Skip comments. */
+ str = strstr (p, "//");
+ if (str != NULL)
+ str[0] = '\0';
+
+ /* Remove trailing white spaces. */
+ remove_trailing_whitespaces (p);
+
+ switch (p[0])
+ {
+ case '#':
+ printf ("%s\n", p);
+ case '\0':
+ continue;
+ break;
+ default:
+ break;
+ }
+
+ last = p + strlen (p);
+
+ /* Find name. */
+ name = next_field (p, &str);
+
+ if (str >= last)
+ abort ();
+
+ /* Find number of operands. */
+ operands = next_field (str, &str);
+
+ if (str >= last)
+ abort ();
+
+ /* Find base_opcode. */
+ base_opcode = next_field (str, &str);
+
+ if (str >= last)
+ abort ();
+
+ /* Find extension_opcode. */
+ extension_opcode = next_field (str, &str);
+
+ if (str >= last)
+ abort ();
+
+ /* Find cpu_flags. */
+ cpu_flags = next_field (str, &str);
+
+ if (str >= last)
+ abort ();
+
+ /* Find opcode_modifier. */
+ opcode_modifier = next_field (str, &str);
+
+ if (str >= last)
+ abort ();
+
+ /* Remove the first {. */
+ str = remove_leading_whitespaces (str);
+ if (*str != '{')
+ abort ();
+ str = remove_leading_whitespaces (str + 1);
+
+ i = strlen (str);
+
+ /* There are at least "X}". */
+ if (i < 2)
+ abort ();
+
+ /* Remove trailing white spaces and }. */
+ do
+ {
+ i--;
+ if (ISSPACE (str[i]) || str[i] == '}')
+ str[i] = '\0';
+ else
+ break;
+ }
+ while (i != 0);
+
+ last = str + i;
+
+ /* Find operand_types. */
+ for (i = 0; i < ARRAY_SIZE (operand_types); i++)
+ {
+ if (str >= last)
+ {
+ operand_types [i] = NULL;
+ break;
+ }
+
+ operand_types [i] = next_field (str, &str);
+ if (*operand_types[i] == '0')
+ {
+ if (i != 0)
+ operand_types[i] = NULL;
+ break;
+ }
+ }
+
+ printf (" { \"%s\", %s, %s, %s, %s,\n",
+ name, operands, base_opcode, extension_opcode,
+ cpu_flags);
+
+ printf (" %s,\n", opcode_modifier);
+
+ printf (" { ");
+
+ for (i = 0; i < ARRAY_SIZE (operand_types); i++)
+ {
+ if (operand_types[i] == NULL
+ || *operand_types[i] == '0')
+ {
+ if (i == 0)
+ printf ("0");
+ break;
+ }
+
+ if (i != 0)
+ printf (",\n ");
+
+ printf ("%s", operand_types[i]);
+ }
+ printf (" } },\n");
+ }
+
+ printf (" { NULL, 0, 0, 0, 0, 0, { 0 } }\n");
+ printf ("};\n");
+}
+
+static void
+process_i386_registers (void)
+{
+ FILE *fp = fopen ("i386-reg.tbl", "r");
+ char buf[2048];
+ char *str, *p, *last;
+ char *reg_name, *reg_type, *reg_flags, *reg_num;
+
+ if (fp == NULL)
+ fail (_("can't find i386-reg.tbl for reading\n"));
+
+ printf ("\n/* i386 register table. */\n\n");
+ printf ("const reg_entry i386_regtab[] =\n{\n");
+
+ while (!feof (fp))
+ {
+ if (fgets (buf, sizeof (buf), fp) == NULL)
+ break;
+
+ p = remove_leading_whitespaces (buf);
+
+ /* Skip comments. */
+ str = strstr (p, "//");
+ if (str != NULL)
+ str[0] = '\0';
+
+ /* Remove trailing white spaces. */
+ remove_trailing_whitespaces (p);
+
+ switch (p[0])
+ {
+ case '#':
+ printf ("%s\n", p);
+ case '\0':
+ continue;
+ break;
+ default:
+ break;
+ }
+
+ last = p + strlen (p);
+
+ /* Find reg_name. */
+ reg_name = next_field (p, &str);
+
+ if (str >= last)
+ abort ();
+
+ /* Find reg_type. */
+ reg_type = next_field (str, &str);
+
+ if (str >= last)
+ abort ();
+
+ /* Find reg_flags. */
+ reg_flags = next_field (str, &str);
+
+ if (str >= last)
+ abort ();
+
+ /* Find reg_num. */
+ reg_num = next_field (str, &str);
+
+ printf (" { \"%s\", %s, %s, %s },\n",
+ reg_name, reg_type, reg_flags, reg_num);
+ }
+
+ printf ("};\n");
+
+ printf ("\nconst unsigned int i386_regtab_size = ARRAY_SIZE (i386_regtab);\n");
+}
+
+/* Program options. */
+#define OPTION_SRCDIR 200
+
+struct option long_options[] =
+{
+ {"srcdir", required_argument, NULL, OPTION_SRCDIR},
+ {"debug", no_argument, NULL, 'd'},
+ {"version", no_argument, NULL, 'V'},
+ {"help", no_argument, NULL, 'h'},
+ {0, no_argument, NULL, 0}
+};
+
+static void
+print_version (void)
+{
+ printf ("%s: version 1.0\n", program_name);
+ xexit (0);
+}
+
+static void
+usage (FILE * stream, int status)
+{
+ fprintf (stream, "Usage: %s [-V | --version] [-d | --debug] [--srcdir=dirname] [--help]\n",
+ program_name);
+ xexit (status);
+}
+
+int
+main (int argc, char **argv)
+{
+ extern int chdir (char *);
+ char *srcdir = NULL;
+ int c;
+
+ program_name = *argv;
+ xmalloc_set_program_name (program_name);
+
+ while ((c = getopt_long (argc, argv, "vVdh", long_options, 0)) != EOF)
+ switch (c)
+ {
+ case OPTION_SRCDIR:
+ srcdir = optarg;
+ break;
+ case 'V':
+ case 'v':
+ print_version ();
+ break;
+ case 'd':
+ debug = 1;
+ break;
+ case 'h':
+ case '?':
+ usage (stderr, 0);
+ default:
+ case 0:
+ break;
+ }
+
+ if (optind != argc)
+ usage (stdout, 1);
+
+ if (srcdir != NULL)
+ if (chdir (srcdir) != 0)
+ fail (_("unable to change directory to \"%s\", errno = %s\n"),
+ srcdir, strerror (errno));
+
+ printf ("/* This file is automatically generated by i386-gen. Do not edit! */\n");
+
+ process_i386_opcodes ();
+ process_i386_registers ();
+
+ exit (0);
+}
diff --git a/opcodes/i386-opc.c b/opcodes/i386-opc.c
new file mode 100644
index 000000000000..201848863a5b
--- /dev/null
+++ b/opcodes/i386-opc.c
@@ -0,0 +1,32 @@
+/* Intel 80386 opcode table
+ Copyright 2007
+ Free Software Foundation, Inc.
+
+ This file is part of GAS, the GNU Assembler, and GDB, the GNU Debugger.
+
+ 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 "sysdep.h"
+#include "libiberty.h"
+#include "i386-opc.h"
+#include "i386-tbl.h"
+
+/* Segment stuff. */
+const seg_entry cs = { "cs", 0x2e };
+const seg_entry ds = { "ds", 0x3e };
+const seg_entry ss = { "ss", 0x36 };
+const seg_entry es = { "es", 0x26 };
+const seg_entry fs = { "fs", 0x64 };
+const seg_entry gs = { "gs", 0x65 };
diff --git a/opcodes/i386-opc.h b/opcodes/i386-opc.h
new file mode 100644
index 000000000000..5372d4a65aa8
--- /dev/null
+++ b/opcodes/i386-opc.h
@@ -0,0 +1,239 @@
+/* Declarations for Intel 80386 opcode table
+ Copyright 2007
+ Free Software Foundation, Inc.
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to the Free
+ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+ 02110-1301, USA. */
+
+#include "opcode/i386.h"
+
+typedef struct template
+{
+ /* instruction name sans width suffix ("mov" for movl insns) */
+ char *name;
+
+ /* how many operands */
+ unsigned int operands;
+
+ /* base_opcode is the fundamental opcode byte without optional
+ prefix(es). */
+ unsigned int base_opcode;
+#define Opcode_D 0x2 /* Direction bit:
+ set if Reg --> Regmem;
+ unset if Regmem --> Reg. */
+#define Opcode_FloatR 0x8 /* Bit to swap src/dest for float insns. */
+#define Opcode_FloatD 0x400 /* Direction bit for float insns. */
+
+ /* extension_opcode is the 3 bit extension for group <n> insns.
+ This field is also used to store the 8-bit opcode suffix for the
+ AMD 3DNow! instructions.
+ If this template has no extension opcode (the usual case) use None */
+ unsigned int extension_opcode;
+#define None 0xffff /* If no extension_opcode is possible. */
+
+ /* cpu feature flags */
+ unsigned int cpu_flags;
+#define Cpu186 0x1 /* i186 or better required */
+#define Cpu286 0x2 /* i286 or better required */
+#define Cpu386 0x4 /* i386 or better required */
+#define Cpu486 0x8 /* i486 or better required */
+#define Cpu586 0x10 /* i585 or better required */
+#define Cpu686 0x20 /* i686 or better required */
+#define CpuP4 0x40 /* Pentium4 or better required */
+#define CpuK6 0x80 /* AMD K6 or better required*/
+#define CpuSledgehammer 0x100 /* Sledgehammer or better required */
+#define CpuMMX 0x200 /* MMX support required */
+#define CpuMMX2 0x400 /* extended MMX support (with SSE or 3DNow!Ext) required */
+#define CpuSSE 0x800 /* Streaming SIMD extensions required */
+#define CpuSSE2 0x1000 /* Streaming SIMD extensions 2 required */
+#define Cpu3dnow 0x2000 /* 3dnow! support required */
+#define Cpu3dnowA 0x4000 /* 3dnow!Extensions support required */
+#define CpuSSE3 0x8000 /* Streaming SIMD extensions 3 required */
+#define CpuPadLock 0x10000 /* VIA PadLock required */
+#define CpuSVME 0x20000 /* AMD Secure Virtual Machine Ext-s required */
+#define CpuVMX 0x40000 /* VMX Instructions required */
+#define CpuSSSE3 0x80000 /* Supplemental Streaming SIMD extensions 3 required */
+#define CpuSSE4a 0x100000 /* SSE4a New Instuctions required */
+#define CpuABM 0x200000 /* ABM New Instructions required */
+#define CpuSSE4_1 0x400000 /* SSE4.1 Instructions required */
+#define CpuSSE4_2 0x800000 /* SSE4.2 Instructions required */
+
+/* SSE4.1/4.2 Instructions required */
+#define CpuSSE4 (CpuSSE4_1|CpuSSE4_2)
+
+ /* These flags are set by gas depending on the flag_code. */
+#define Cpu64 0x4000000 /* 64bit support required */
+#define CpuNo64 0x8000000 /* Not supported in the 64bit mode */
+
+ /* The default value for unknown CPUs - enable all features to avoid problems. */
+#define CpuUnknownFlags (Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686 \
+ |CpuP4|CpuSledgehammer|CpuMMX|CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3|CpuVMX \
+ |Cpu3dnow|Cpu3dnowA|CpuK6|CpuPadLock|CpuSVME|CpuSSSE3|CpuSSE4_1 \
+ |CpuSSE4_2|CpuABM|CpuSSE4a)
+
+ /* the bits in opcode_modifier are used to generate the final opcode from
+ the base_opcode. These bits also are used to detect alternate forms of
+ the same instruction */
+ unsigned int opcode_modifier;
+
+ /* opcode_modifier bits: */
+#define D 0x1 /* has direction bit. */
+#define W 0x2 /* set if operands can be words or dwords
+ encoded the canonical way */
+#define Modrm 0x4 /* insn has a modrm byte. */
+#define ShortForm 0x8 /* register is in low 3 bits of opcode */
+#define Jump 0x10 /* special case for jump insns. */
+#define JumpDword 0x20 /* call and jump */
+#define JumpByte 0x40 /* loop and jecxz */
+#define JumpInterSegment 0x80 /* special case for intersegment leaps/calls */
+#define FloatMF 0x100 /* FP insn memory format bit, sized by 0x4 */
+#define FloatR 0x200 /* src/dest swap for floats. */
+#define FloatD 0x400 /* has float insn direction bit. */
+#define Size16 0x800 /* needs size prefix if in 32-bit mode */
+#define Size32 0x1000 /* needs size prefix if in 16-bit mode */
+#define Size64 0x2000 /* needs size prefix if in 64-bit mode */
+#define IgnoreSize 0x4000 /* instruction ignores operand size prefix */
+#define DefaultSize 0x8000 /* default insn size depends on mode */
+#define No_bSuf 0x10000 /* b suffix on instruction illegal */
+#define No_wSuf 0x20000 /* w suffix on instruction illegal */
+#define No_lSuf 0x40000 /* l suffix on instruction illegal */
+#define No_sSuf 0x80000 /* s suffix on instruction illegal */
+#define No_qSuf 0x100000 /* q suffix on instruction illegal */
+#define No_xSuf 0x200000 /* x suffix on instruction illegal */
+#define FWait 0x400000 /* instruction needs FWAIT */
+#define IsString 0x800000 /* quick test for string instructions */
+#define RegKludge 0x1000000 /* fake an extra reg operand for clr, imul
+ and special register processing for
+ some instructions. */
+#define IsPrefix 0x2000000 /* opcode is a prefix */
+#define ImmExt 0x4000000 /* instruction has extension in 8 bit imm */
+#define NoRex64 0x8000000 /* instruction don't need Rex64 prefix. */
+#define Rex64 0x10000000 /* instruction require Rex64 prefix. */
+#define Ugh 0x20000000 /* deprecated fp insn, gets a warning */
+
+ /* operand_types[i] describes the type of operand i. This is made
+ by OR'ing together all of the possible type masks. (e.g.
+ 'operand_types[i] = Reg|Imm' specifies that operand i can be
+ either a register or an immediate operand. */
+ unsigned int operand_types[MAX_OPERANDS];
+
+ /* operand_types[i] bits */
+ /* register */
+#define Reg8 0x1 /* 8 bit reg */
+#define Reg16 0x2 /* 16 bit reg */
+#define Reg32 0x4 /* 32 bit reg */
+#define Reg64 0x8 /* 64 bit reg */
+ /* immediate */
+#define Imm8 0x10 /* 8 bit immediate */
+#define Imm8S 0x20 /* 8 bit immediate sign extended */
+#define Imm16 0x40 /* 16 bit immediate */
+#define Imm32 0x80 /* 32 bit immediate */
+#define Imm32S 0x100 /* 32 bit immediate sign extended */
+#define Imm64 0x200 /* 64 bit immediate */
+#define Imm1 0x400 /* 1 bit immediate */
+ /* memory */
+#define BaseIndex 0x800
+ /* Disp8,16,32 are used in different ways, depending on the
+ instruction. For jumps, they specify the size of the PC relative
+ displacement, for baseindex type instructions, they specify the
+ size of the offset relative to the base register, and for memory
+ offset instructions such as `mov 1234,%al' they specify the size of
+ the offset relative to the segment base. */
+#define Disp8 0x1000 /* 8 bit displacement */
+#define Disp16 0x2000 /* 16 bit displacement */
+#define Disp32 0x4000 /* 32 bit displacement */
+#define Disp32S 0x8000 /* 32 bit signed displacement */
+#define Disp64 0x10000 /* 64 bit displacement */
+ /* specials */
+#define InOutPortReg 0x20000 /* register to hold in/out port addr = dx */
+#define ShiftCount 0x40000 /* register to hold shift count = cl */
+#define Control 0x80000 /* Control register */
+#define Debug 0x100000 /* Debug register */
+#define Test 0x200000 /* Test register */
+#define FloatReg 0x400000 /* Float register */
+#define FloatAcc 0x800000 /* Float stack top %st(0) */
+#define SReg2 0x1000000 /* 2 bit segment register */
+#define SReg3 0x2000000 /* 3 bit segment register */
+#define Acc 0x4000000 /* Accumulator %al or %ax or %eax */
+#define JumpAbsolute 0x8000000
+#define RegMMX 0x10000000 /* MMX register */
+#define RegXMM 0x20000000 /* XMM registers in PIII */
+#define EsSeg 0x40000000 /* String insn operand with fixed es segment */
+
+ /* RegMem is for instructions with a modrm byte where the register
+ destination operand should be encoded in the mod and regmem fields.
+ Normally, it will be encoded in the reg field. We add a RegMem
+ flag to the destination register operand to indicate that it should
+ be encoded in the regmem field. */
+#define RegMem 0x80000000
+
+#define Reg (Reg8|Reg16|Reg32|Reg64) /* gen'l register */
+#define WordReg (Reg16|Reg32|Reg64)
+#define ImplicitRegister (InOutPortReg|ShiftCount|Acc|FloatAcc)
+#define Imm (Imm8|Imm8S|Imm16|Imm32S|Imm32|Imm64) /* gen'l immediate */
+#define EncImm (Imm8|Imm16|Imm32|Imm32S) /* Encodable gen'l immediate */
+#define Disp (Disp8|Disp16|Disp32|Disp32S|Disp64) /* General displacement */
+#define AnyMem (Disp8|Disp16|Disp32|Disp32S|BaseIndex) /* General memory */
+ /* The following aliases are defined because the opcode table
+ carefully specifies the allowed memory types for each instruction.
+ At the moment we can only tell a memory reference size by the
+ instruction suffix, so there's not much point in defining Mem8,
+ Mem16, Mem32 and Mem64 opcode modifiers - We might as well just use
+ the suffix directly to check memory operands. */
+#define LLongMem AnyMem /* 64 bits (or more) */
+#define LongMem AnyMem /* 32 bit memory ref */
+#define ShortMem AnyMem /* 16 bit memory ref */
+#define WordMem AnyMem /* 16, 32 or 64 bit memory ref */
+#define ByteMem AnyMem /* 8 bit memory ref */
+}
+template;
+
+extern const template i386_optab[];
+
+/* these are for register name --> number & type hash lookup */
+typedef struct
+{
+ char *reg_name;
+ unsigned int reg_type;
+ unsigned int reg_flags;
+#define RegRex 0x1 /* Extended register. */
+#define RegRex64 0x2 /* Extended 8 bit register. */
+ unsigned int reg_num;
+}
+reg_entry;
+
+/* Entries in i386_regtab. */
+#define REGNAM_AL 1
+#define REGNAM_AX 25
+#define REGNAM_EAX 41
+
+extern const reg_entry i386_regtab[];
+extern const unsigned int i386_regtab_size;
+
+typedef struct
+{
+ char *seg_name;
+ unsigned int seg_prefix;
+}
+seg_entry;
+
+extern const seg_entry cs;
+extern const seg_entry ds;
+extern const seg_entry ss;
+extern const seg_entry es;
+extern const seg_entry fs;
+extern const seg_entry gs;
diff --git a/opcodes/i386-opc.tbl b/opcodes/i386-opc.tbl
new file mode 100644
index 000000000000..5465608ebeea
--- /dev/null
+++ b/opcodes/i386-opc.tbl
@@ -0,0 +1,1489 @@
+// i386 opcode table.
+
+// Move instructions.
+// We put the 64bit displacement first and we only mark constants
+// larger than 32bit as Disp64.
+mov, 2, 0xa0, None, Cpu64, D|W|No_sSuf|No_xSuf, { Disp64, Acc }
+mov, 2, 0xa0, None, CpuNo64, D|W|No_sSuf|No_qSuf|No_xSuf, { Disp16|Disp32, Acc }
+mov, 2, 0x88, None, 0, D|W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+// In the 64bit mode the short form mov immediate is redefined to have
+// 64bit value.
+mov, 2, 0xb0, None, 0, W|ShortForm|No_sSuf|No_qSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32 }
+mov, 2, 0xc6, 0x0, 0, W|Modrm|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+mov, 2, 0xb0, None, Cpu64, W|ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf, { Imm64, Reg64 }
+// The segment register moves accept WordReg so that a segment register
+// can be copied to a 32 bit register, and vice versa, without using a
+// size prefix. When moving to a 32 bit register, the upper 16 bits
+// are set to an implementation defined value (on the Pentium Pro, the
+// implementation defined value is zero).
+mov, 2, 0x8c, None, 0, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { SReg2, Reg16|Reg32|Reg64|RegMem }
+mov, 2, 0x8c, None, 0, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { SReg2, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+mov, 2, 0x8c, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { SReg3, Reg16|Reg32|Reg64|RegMem }
+mov, 2, 0x8c, None, Cpu386, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { SReg3, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+mov, 2, 0x8e, None, 0, Modrm|IgnoreSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|Reg32|Reg64, SReg2 }
+mov, 2, 0x8e, None, 0, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, SReg2 }
+mov, 2, 0x8e, None, Cpu386, Modrm|IgnoreSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|Reg32|Reg64, SReg3 }
+mov, 2, 0x8e, None, Cpu386, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, SReg3 }
+// Move to/from control debug registers. In the 16 or 32bit modes
+// they are 32bit. In the 64bit mode they are 64bit.
+mov, 2, 0xf20, None, Cpu386|CpuNo64, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf, { Control, Reg32|RegMem }
+mov, 2, 0xf20, None, Cpu64, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Control, Reg64|RegMem }
+mov, 2, 0xf21, None, Cpu386|CpuNo64, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf, { Debug, Reg32|RegMem }
+mov, 2, 0xf21, None, Cpu64, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Debug, Reg64|RegMem }
+mov, 2, 0xf24, None, Cpu386|CpuNo64, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf, { Test, Reg32|RegMem }
+movabs, 2, 0xa0, None, Cpu64, D|W|No_sSuf|No_xSuf, { Disp64, Acc }
+movabs, 2, 0xb0, None, Cpu64, W|ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf, { Imm64, Reg64 }
+
+// Move with sign extend.
+// "movsbl" & "movsbw" must not be unified into "movsb" to avoid
+// conflict with the "movs" string move instruction.
+movsbl, 2, 0xfbe, None, Cpu386, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32 }
+movsbw, 2, 0xfbe, None, Cpu386, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16 }
+movswl, 2, 0xfbf, None, Cpu386, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32 }
+movsbq, 2, 0xfbe, None, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg64 }
+movswq, 2, 0xfbf, None, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64, { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg64 }
+movslq, 2, 0x63, None, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64, { Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg64 }
+// Intel Syntax next 3 insns
+movsx, 2, 0xfbe, None, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+movsx, 2, 0xfbf, None, Cpu386, Modrm|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32|Reg64 }
+movsx, 2, 0x63, None, Cpu64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|Rex64, { Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg64 }
+
+// Move with zero extend. We can't remove "movzb" since existing
+// assembly codes may use it.
+movzb, 2, 0xfb6, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+// "movzbl" & "movzbw" should not be unified into "movzb" for
+// consistency with the sign extending moves above.
+movzbl, 2, 0xfb6, None, Cpu386, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32 }
+movzbw, 2, 0xfb6, None, Cpu386, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16 }
+movzwl, 2, 0xfb7, None, Cpu386, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32 }
+// These instructions are not particulary useful, since the zero extend
+// 32->64 is implicit, but we can encode them.
+movzbq, 2, 0xfb6, None, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg64 }
+movzwq, 2, 0xfb7, None, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64, { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg64 }
+// Intel Syntax next 2 insns (the 64-bit variants are not particulary
+// useful since the zero extend 32->64 is implicit, but we can encode them).
+movzx, 2, 0xfb6, None, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+movzx, 2, 0xfb7, None, Cpu386, Modrm|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32|Reg64 }
+
+// Push instructions.
+push, 1, 0x50, None, CpuNo64, ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|Reg32|Reg64 }
+push, 1, 0xff, 0x6, CpuNo64, Modrm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+push, 1, 0x6a, None, Cpu186|CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8S }
+push, 1, 0x68, None, Cpu186|CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Imm16|Imm32 }
+push, 1, 0x6, None, CpuNo64, ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { SReg2 }
+push, 1, 0xfa0, None, Cpu386|CpuNo64, ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { SReg3 }
+// In 64bit mode, the operand size is implicitly 64bit.
+push, 1, 0x50, None, Cpu64, ShortForm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Reg16|Reg64 }
+push, 1, 0xff, 0x6, Cpu64, Modrm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Reg16|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+push, 1, 0x6a, None, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Imm8S }
+push, 1, 0x68, None, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Imm16|Imm32S }
+push, 1, 0xfa0, None, Cpu64, ShortForm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { SReg3 }
+
+pusha, 0, 0x60, None, Cpu186|CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+// Pop instructions.
+pop, 1, 0x58, None, CpuNo64, ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|Reg32|Reg64 }
+pop, 1, 0x8f, 0x0, CpuNo64, Modrm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+pop, 1, 0x7, None, CpuNo64, ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { SReg2 }
+pop, 1, 0xfa1, None, Cpu386|CpuNo64, ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { SReg3 }
+// In 64bit mode, the operand size is implicitly 64bit.
+pop, 1, 0x58, None, Cpu64, ShortForm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Reg16|Reg64 }
+pop, 1, 0x8f, 0x0, Cpu64, Modrm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Reg16|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+pop, 1, 0xfa1, None, Cpu64, ShortForm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { SReg3 }
+
+popa, 0, 0x61, None, Cpu186|CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+// Exchange instructions.
+// xchg commutes: we allow both operand orders.
+
+// In the 64bit code, xchg rax, rax is reused for new nop instruction.
+xchg, 2, 0x90, None, 0, ShortForm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64, Acc }
+xchg, 2, 0x90, None, 0, ShortForm|No_bSuf|No_sSuf|No_xSuf, { Acc, Reg16|Reg32|Reg64 }
+xchg, 2, 0x86, None, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+xchg, 2, 0x86, None, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg8|Reg16|Reg32|Reg64 }
+
+// In/out from ports.
+// XXX should reject %rax
+in, 2, 0xe4, None, 0, W|No_sSuf|No_qSuf|No_xSuf, { Imm8, Acc }
+in, 2, 0xec, None, 0, W|No_sSuf|No_qSuf|No_xSuf, { InOutPortReg, Acc }
+in, 1, 0xe4, None, 0, W|No_sSuf|No_qSuf|No_xSuf, { Imm8 }
+in, 1, 0xec, None, 0, W|No_sSuf|No_qSuf|No_xSuf, { InOutPortReg }
+out, 2, 0xe6, None, 0, W|No_sSuf|No_qSuf|No_xSuf, { Acc, Imm8 }
+out, 2, 0xee, None, 0, W|No_sSuf|No_qSuf|No_xSuf, { Acc, InOutPortReg }
+out, 1, 0xe6, None, 0, W|No_sSuf|No_qSuf|No_xSuf, { Imm8 }
+out, 1, 0xee, None, 0, W|No_sSuf|No_qSuf|No_xSuf, { InOutPortReg }
+
+// Load effective address.
+lea, 2, 0x8d, None, 0, Modrm|No_bSuf|No_sSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+
+// Load segment registers from memory.
+lds, 2, 0xc5, None, CpuNo64, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+les, 2, 0xc4, None, CpuNo64, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+lfs, 2, 0xfb4, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+lgs, 2, 0xfb5, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+lss, 2, 0xfb2, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+
+// Flags register instructions.
+clc, 0, 0xf8, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cld, 0, 0xfc, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cli, 0, 0xfa, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+clts, 0, 0xf06, None, Cpu286, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cmc, 0, 0xf5, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+lahf, 0, 0x9f, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+sahf, 0, 0x9e, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+pushf, 0, 0x9c, None, CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+pushf, 0, 0x9c, None, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { 0 }
+popf, 0, 0x9d, None, CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+popf, 0, 0x9d, None, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { 0 }
+stc, 0, 0xf9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+std, 0, 0xfd, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+sti, 0, 0xfb, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+// Arithmetic.
+add, 2, 0x0, None, 0, D|W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+add, 2, 0x83, 0x0, 0, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8S, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+add, 2, 0x4, None, 0, W|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Acc }
+add, 2, 0x80, 0x0, 0, W|Modrm|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+inc, 1, 0x40, None, CpuNo64, ShortForm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|Reg32|Reg64 }
+inc, 1, 0xfe, 0x0, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+sub, 2, 0x28, None, 0, D|W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sub, 2, 0x83, 0x5, 0, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8S, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sub, 2, 0x2c, None, 0, W|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Acc }
+sub, 2, 0x80, 0x5, 0, W|Modrm|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+dec, 1, 0x48, None, CpuNo64, ShortForm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|Reg32|Reg64 }
+dec, 1, 0xfe, 0x1, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+sbb, 2, 0x18, None, 0, D|W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sbb, 2, 0x83, 0x3, 0, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8S, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sbb, 2, 0x1c, None, 0, W|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Acc }
+sbb, 2, 0x80, 0x3, 0, W|Modrm|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+cmp, 2, 0x38, None, 0, D|W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+cmp, 2, 0x83, 0x7, 0, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8S, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+cmp, 2, 0x3c, None, 0, W|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Acc }
+cmp, 2, 0x80, 0x7, 0, W|Modrm|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+test, 2, 0x84, None, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+test, 2, 0x84, None, 0, W|Modrm|No_sSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg8|Reg16|Reg32|Reg64 }
+test, 2, 0xa8, None, 0, W|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Acc }
+test, 2, 0xf6, 0x0, 0, W|Modrm|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+and, 2, 0x20, None, 0, D|W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+and, 2, 0x83, 0x4, 0, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8S, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+and, 2, 0x24, None, 0, W|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Acc }
+and, 2, 0x80, 0x4, 0, W|Modrm|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+or, 2, 0x8, None, 0, D|W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+or, 2, 0x83, 0x1, 0, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8S, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+or, 2, 0xc, None, 0, W|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Acc }
+or, 2, 0x80, 0x1, 0, W|Modrm|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+xor, 2, 0x30, None, 0, D|W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+xor, 2, 0x83, 0x6, 0, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8S, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+xor, 2, 0x34, None, 0, W|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Acc }
+xor, 2, 0x80, 0x6, 0, W|Modrm|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// clr with 1 operand is really xor with 2 operands.
+clr, 1, 0x30, None, 0, W|Modrm|No_sSuf|No_xSuf|RegKludge, { Reg8|Reg16|Reg32|Reg64 }
+
+adc, 2, 0x10, None, 0, D|W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+adc, 2, 0x83, 0x2, 0, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8S, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+adc, 2, 0x14, None, 0, W|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Acc }
+adc, 2, 0x80, 0x2, 0, W|Modrm|No_sSuf|No_xSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+neg, 1, 0xf6, 0x3, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+not, 1, 0xf6, 0x2, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+aaa, 0, 0x37, None, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+aas, 0, 0x3f, None, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+daa, 0, 0x27, None, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+das, 0, 0x2f, None, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+aad, 0, 0xd50a, None, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+aad, 1, 0xd5, None, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8 }
+aam, 0, 0xd40a, None, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+aam, 1, 0xd4, None, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8 }
+
+// Conversion insns.
+// Intel naming
+cbw, 0, 0x98, None, 0, Size16|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cdqe, 0, 0x98, None, Cpu64, Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cwde, 0, 0x98, None, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cwd, 0, 0x99, None, 0, Size16|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cdq, 0, 0x99, None, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cqo, 0, 0x99, None, Cpu64, Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+// AT&T naming
+cbtw, 0, 0x98, None, 0, Size16|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cltq, 0, 0x98, None, Cpu64, Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cwtl, 0, 0x98, None, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cwtd, 0, 0x99, None, 0, Size16|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cltd, 0, 0x99, None, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cqto, 0, 0x99, None, Cpu64, Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+// Warning! the mul/imul (opcode 0xf6) must only have 1 operand! They are
+// expanding 64-bit multiplies, and *cannot* be selected to accomplish
+// 'imul %ebx, %eax' (opcode 0x0faf must be used in this case)
+// These multiplies can only be selected with single operand forms.
+mul, 1, 0xf6, 0x4, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+imul, 1, 0xf6, 0x5, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+imul, 2, 0xfaf, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+imul, 3, 0x6b, None, Cpu186, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8S, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+imul, 3, 0x69, None, Cpu186, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm16|Imm32|Imm32S, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+// imul with 2 operands mimics imul with 3 by putting the register in
+// both i.rm.reg & i.rm.regmem fields. RegKludge enables this
+// transformation.
+imul, 2, 0x6b, None, Cpu186, Modrm|No_bSuf|No_sSuf|No_xSuf|RegKludge, { Imm8S, Reg16|Reg32|Reg64 }
+imul, 2, 0x69, None, Cpu186, Modrm|No_bSuf|No_sSuf|No_xSuf|RegKludge, { Imm16|Imm32|Imm32S, Reg16|Reg32|Reg64 }
+
+div, 1, 0xf6, 0x6, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+div, 2, 0xf6, 0x6, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Acc }
+idiv, 1, 0xf6, 0x7, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+idiv, 2, 0xf6, 0x7, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Acc }
+
+rol, 2, 0xd0, 0x0, 0, W|Modrm|No_sSuf|No_xSuf, { Imm1, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+rol, 2, 0xc0, 0x0, Cpu186, W|Modrm|No_sSuf|No_xSuf, { Imm8, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+rol, 2, 0xd2, 0x0, 0, W|Modrm|No_sSuf|No_xSuf, { ShiftCount, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+rol, 1, 0xd0, 0x0, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+ror, 2, 0xd0, 0x1, 0, W|Modrm|No_sSuf|No_xSuf, { Imm1, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+ror, 2, 0xc0, 0x1, Cpu186, W|Modrm|No_sSuf|No_xSuf, { Imm8, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+ror, 2, 0xd2, 0x1, 0, W|Modrm|No_sSuf|No_xSuf, { ShiftCount, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+ror, 1, 0xd0, 0x1, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+rcl, 2, 0xd0, 0x2, 0, W|Modrm|No_sSuf|No_xSuf, { Imm1, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+rcl, 2, 0xc0, 0x2, Cpu186, W|Modrm|No_sSuf|No_xSuf, { Imm8, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+rcl, 2, 0xd2, 0x2, 0, W|Modrm|No_sSuf|No_xSuf, { ShiftCount, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+rcl, 1, 0xd0, 0x2, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+rcr, 2, 0xd0, 0x3, 0, W|Modrm|No_sSuf|No_xSuf, { Imm1, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+rcr, 2, 0xc0, 0x3, Cpu186, W|Modrm|No_sSuf|No_xSuf, { Imm8, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+rcr, 2, 0xd2, 0x3, 0, W|Modrm|No_sSuf|No_xSuf, { ShiftCount, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+rcr, 1, 0xd0, 0x3, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+sal, 2, 0xd0, 0x4, 0, W|Modrm|No_sSuf|No_xSuf, { Imm1, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sal, 2, 0xc0, 0x4, Cpu186, W|Modrm|No_sSuf|No_xSuf, { Imm8, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sal, 2, 0xd2, 0x4, 0, W|Modrm|No_sSuf|No_xSuf, { ShiftCount, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sal, 1, 0xd0, 0x4, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+shl, 2, 0xd0, 0x4, 0, W|Modrm|No_sSuf|No_xSuf, { Imm1, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+shl, 2, 0xc0, 0x4, Cpu186, W|Modrm|No_sSuf|No_xSuf, { Imm8, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+shl, 2, 0xd2, 0x4, 0, W|Modrm|No_sSuf|No_xSuf, { ShiftCount, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+shl, 1, 0xd0, 0x4, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+shr, 2, 0xd0, 0x5, 0, W|Modrm|No_sSuf|No_xSuf, { Imm1, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+shr, 2, 0xc0, 0x5, Cpu186, W|Modrm|No_sSuf|No_xSuf, { Imm8, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+shr, 2, 0xd2, 0x5, 0, W|Modrm|No_sSuf|No_xSuf, { ShiftCount, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+shr, 1, 0xd0, 0x5, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+sar, 2, 0xd0, 0x7, 0, W|Modrm|No_sSuf|No_xSuf, { Imm1, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sar, 2, 0xc0, 0x7, Cpu186, W|Modrm|No_sSuf|No_xSuf, { Imm8, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sar, 2, 0xd2, 0x7, 0, W|Modrm|No_sSuf|No_xSuf, { ShiftCount, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sar, 1, 0xd0, 0x7, 0, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+shld, 3, 0xfa4, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8, Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+shld, 3, 0xfa5, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { ShiftCount, Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+shld, 2, 0xfa5, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+shrd, 3, 0xfac, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8, Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+shrd, 3, 0xfad, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { ShiftCount, Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+shrd, 2, 0xfad, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// Control transfer instructions.
+call, 1, 0xe8, None, CpuNo64, JumpDword|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Disp16|Disp32 }
+call, 1, 0xe8, None, Cpu64, JumpDword|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Disp16|Disp32 }
+call, 1, 0xff, 0x2, CpuNo64, Modrm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute }
+call, 1, 0xff, 0x2, Cpu64, Modrm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Reg16|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute }
+// Intel Syntax
+call, 2, 0x9a, None, CpuNo64, JumpInterSegment|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Imm16, Imm16|Imm32 }
+// Intel Syntax
+call, 1, 0xff, 0x3, 0, Modrm|DefaultSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute }
+lcall, 2, 0x9a, None, CpuNo64, JumpInterSegment|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Imm16, Imm16|Imm32 }
+lcall, 1, 0xff, 0x3, 0, Modrm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute }
+
+jmp, 1, 0xeb, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jmp, 1, 0xff, 0x4, CpuNo64, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute }
+jmp, 1, 0xff, 0x4, Cpu64, Modrm|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Reg16|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute }
+// Intel Syntax.
+jmp, 2, 0xea, None, CpuNo64, JumpInterSegment|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Imm16, Imm16|Imm32 }
+// Intel Syntax.
+jmp, 1, 0xff, 0x5, 0, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute }
+ljmp, 2, 0xea, None, CpuNo64, JumpInterSegment|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Imm16, Imm16|Imm32 }
+ljmp, 1, 0xff, 0x5, 0, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute }
+
+ret, 0, 0xc3, None, CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+ret, 1, 0xc2, None, CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Imm16 }
+ret, 0, 0xc3, None, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { 0 }
+ret, 1, 0xc2, None, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Imm16 }
+lret, 0, 0xcb, None, 0, DefaultSize|No_bSuf|No_sSuf|No_xSuf, { 0 }
+lret, 1, 0xca, None, 0, DefaultSize|No_bSuf|No_sSuf|No_xSuf, { Imm16 }
+enter, 2, 0xc8, None, Cpu186|CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Imm16, Imm8 }
+enter, 2, 0xc8, None, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Imm16, Imm8 }
+leave, 0, 0xc9, None, Cpu186|CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+leave, 0, 0xc9, None, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { 0 }
+
+// Conditional jumps.
+jo, 1, 0x70, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jno, 1, 0x71, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jb, 1, 0x72, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jc, 1, 0x72, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jnae, 1, 0x72, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jnb, 1, 0x73, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jnc, 1, 0x73, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jae, 1, 0x73, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+je, 1, 0x74, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jz, 1, 0x74, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jne, 1, 0x75, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jnz, 1, 0x75, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jbe, 1, 0x76, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jna, 1, 0x76, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jnbe, 1, 0x77, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+ja, 1, 0x77, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+js, 1, 0x78, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jns, 1, 0x79, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jp, 1, 0x7a, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jpe, 1, 0x7a, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jnp, 1, 0x7b, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jpo, 1, 0x7b, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jl, 1, 0x7c, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jnge, 1, 0x7c, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jnl, 1, 0x7d, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jge, 1, 0x7d, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jle, 1, 0x7e, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jng, 1, 0x7e, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jnle, 1, 0x7f, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jg, 1, 0x7f, None, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+
+// jcxz vs. jecxz is chosen on the basis of the address size prefix.
+jcxz, 1, 0xe3, None, CpuNo64, JumpByte|Size16|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jecxz, 1, 0xe3, None, CpuNo64, JumpByte|Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jecxz, 1, 0x67e3, None, Cpu64, JumpByte|Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+jrcxz, 1, 0xe3, None, Cpu64, JumpByte|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+
+// The loop instructions also use the address size prefix to select
+// %cx rather than %ecx for the loop count, so the `w' form of these
+// instructions emit an address size prefix rather than a data size
+// prefix.
+loop, 1, 0xe2, None, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+loop, 1, 0xe2, None, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_xSuf|NoRex64, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+loopz, 1, 0xe1, None, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+loopz, 1, 0xe1, None, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_xSuf|NoRex64, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+loope, 1, 0xe1, None, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+loope, 1, 0xe1, None, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_xSuf|NoRex64, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+loopnz, 1, 0xe0, None, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+loopnz, 1, 0xe0, None, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_xSuf|NoRex64, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+loopne, 1, 0xe0, None, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+loopne, 1, 0xe0, None, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_xSuf|NoRex64, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
+
+// Set byte on flag instructions.
+seto, 1, 0xf90, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setno, 1, 0xf91, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setb, 1, 0xf92, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setc, 1, 0xf92, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setnae, 1, 0xf92, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setnb, 1, 0xf93, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setnc, 1, 0xf93, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setae, 1, 0xf93, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sete, 1, 0xf94, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setz, 1, 0xf94, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setne, 1, 0xf95, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setnz, 1, 0xf95, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setbe, 1, 0xf96, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setna, 1, 0xf96, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setnbe, 1, 0xf97, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+seta, 1, 0xf97, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sets, 1, 0xf98, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setns, 1, 0xf99, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setp, 1, 0xf9a, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setpe, 1, 0xf9a, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setnp, 1, 0xf9b, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setpo, 1, 0xf9b, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setl, 1, 0xf9c, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setnge, 1, 0xf9c, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setnl, 1, 0xf9d, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setge, 1, 0xf9d, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setle, 1, 0xf9e, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setng, 1, 0xf9e, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setnle, 1, 0xf9f, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+setg, 1, 0xf9f, 0x0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// String manipulation.
+cmps, 0, 0xa6, None, 0, W|No_sSuf|No_xSuf|IsString, { 0 }
+cmps, 2, 0xa6, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+scmp, 0, 0xa6, None, 0, W|No_sSuf|No_xSuf|IsString, { 0 }
+scmp, 2, 0xa6, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+ins, 0, 0x6c, None, Cpu186, W|No_sSuf|No_qSuf|No_xSuf|IsString, { 0 }
+ins, 2, 0x6c, None, Cpu186, W|No_sSuf|No_qSuf|No_xSuf|IsString, { InOutPortReg, BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+outs, 0, 0x6e, None, Cpu186, W|No_sSuf|No_qSuf|No_xSuf|IsString, { 0 }
+outs, 2, 0x6e, None, Cpu186, W|No_sSuf|No_qSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, InOutPortReg }
+lods, 0, 0xac, None, 0, W|No_sSuf|No_xSuf|IsString, { 0 }
+lods, 1, 0xac, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+lods, 2, 0xac, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Acc }
+slod, 0, 0xac, None, 0, W|No_sSuf|No_xSuf|IsString, { 0 }
+slod, 1, 0xac, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+slod, 2, 0xac, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Acc }
+movs, 0, 0xa4, None, 0, W|No_sSuf|No_xSuf|IsString, { 0 }
+movs, 2, 0xa4, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+smov, 0, 0xa4, None, 0, W|No_sSuf|No_xSuf|IsString, { 0 }
+smov, 2, 0xa4, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+scas, 0, 0xae, None, 0, W|No_sSuf|No_xSuf|IsString, { 0 }
+scas, 1, 0xae, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+scas, 2, 0xae, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg, Acc }
+ssca, 0, 0xae, None, 0, W|No_sSuf|No_xSuf|IsString, { 0 }
+ssca, 1, 0xae, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+ssca, 2, 0xae, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg, Acc }
+stos, 0, 0xaa, None, 0, W|No_sSuf|No_xSuf|IsString, { 0 }
+stos, 1, 0xaa, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+stos, 2, 0xaa, None, 0, W|No_sSuf|No_xSuf|IsString, { Acc, BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+ssto, 0, 0xaa, None, 0, W|No_sSuf|No_xSuf|IsString, { 0 }
+ssto, 1, 0xaa, None, 0, W|No_sSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+ssto, 2, 0xaa, None, 0, W|No_sSuf|No_xSuf|IsString, { Acc, BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+xlat, 0, 0xd7, None, 0, No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString, { 0 }
+xlat, 1, 0xd7, None, 0, No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// Bit manipulation.
+bsf, 2, 0xfbc, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+bsr, 2, 0xfbd, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+bt, 2, 0xfa3, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+bt, 2, 0xfba, 0x4, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+btc, 2, 0xfbb, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+btc, 2, 0xfba, 0x7, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+btr, 2, 0xfb3, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+btr, 2, 0xfba, 0x6, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+bts, 2, 0xfab, None, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+bts, 2, 0xfba, 0x5, Cpu386, Modrm|No_bSuf|No_sSuf|No_xSuf, { Imm8, Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// Interrupts & op. sys insns.
+// See gas/config/tc-i386.c for conversion of 'int $3' into the special
+// int 3 insn.
+int, 1, 0xcd, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8 }
+int3, 0, 0xcc, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+into, 0, 0xce, None, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+iret, 0, 0xcf, None, 0, DefaultSize|No_bSuf|No_sSuf|No_xSuf, { 0 }
+// i386sl, i486sl, later 486, and Pentium.
+rsm, 0, 0xfaa, None, Cpu386, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+bound, 2, 0x62, None, Cpu186|CpuNo64, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|Reg32|Reg64, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+hlt, 0, 0xf4, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+nop, 1, 0xf1f, 0x0, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// nop is actually "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
+// 32bit mode and "xchg %rax,%rax" in 64bit mode.
+nop, 0, 0x90, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+// Protection control.
+arpl, 2, 0x63, None, Cpu286|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16, Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+lar, 2, 0xf02, None, Cpu286, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+lgdt, 1, 0xf01, 0x2, Cpu286|CpuNo64, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+lgdt, 1, 0xf01, 0x2, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+lidt, 1, 0xf01, 0x3, Cpu286|CpuNo64, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+lidt, 1, 0xf01, 0x3, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+lldt, 1, 0xf00, 0x2, Cpu286, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+lmsw, 1, 0xf01, 0x6, Cpu286, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+lsl, 2, 0xf03, None, Cpu286, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+ltr, 1, 0xf00, 0x3, Cpu286, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+sgdt, 1, 0xf01, 0x0, Cpu286|CpuNo64, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sgdt, 1, 0xf01, 0x0, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sidt, 1, 0xf01, 0x1, Cpu286|CpuNo64, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sidt, 1, 0xf01, 0x1, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sldt, 1, 0xf00, 0x0, Cpu286, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64 }
+sldt, 1, 0xf00, 0x0, Cpu286, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+smsw, 1, 0xf01, 0x4, Cpu286, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64 }
+smsw, 1, 0xf01, 0x4, Cpu286, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+str, 1, 0xf00, 0x1, Cpu286, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64 }
+str, 1, 0xf00, 0x1, Cpu286, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+verr, 1, 0xf00, 0x4, Cpu286, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+verw, 1, 0xf00, 0x5, Cpu286, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// Floating point instructions.
+
+// load
+fld, 1, 0xd9c0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+fld, 1, 0xd9, 0x0, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fld, 1, 0xd9c0, None, 0, ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { FloatReg }
+// Intel Syntax
+fld, 1, 0xdb, 0x5, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fild, 1, 0xdf, 0x0, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fild, 1, 0xdf, 0x5, 0, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fildll, 1, 0xdf, 0x5, 0, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fldt, 1, 0xdb, 0x5, 0, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fbld, 1, 0xdf, 0x4, 0, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// store (no pop)
+fst, 1, 0xddd0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+fst, 1, 0xd9, 0x2, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fst, 1, 0xddd0, None, 0, ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { FloatReg }
+fist, 1, 0xdf, 0x2, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// store (with pop)
+fstp, 1, 0xddd8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+fstp, 1, 0xd9, 0x3, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fstp, 1, 0xddd8, None, 0, ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { FloatReg }
+// Intel Syntax
+fstp, 1, 0xdb, 0x7, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fistp, 1, 0xdf, 0x3, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fistp, 1, 0xdf, 0x7, 0, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fistpll, 1, 0xdf, 0x7, 0, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fstpt, 1, 0xdb, 0x7, 0, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fbstp, 1, 0xdf, 0x6, 0, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// exchange %st<n> with %st0
+fxch, 1, 0xd9c8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+// alias for fxch %st(1)
+fxch, 0, 0xd9c9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+// comparison (without pop)
+fcom, 1, 0xd8d0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+// alias for fcom %st(1)
+fcom, 0, 0xd8d1, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fcom, 1, 0xd8, 0x2, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fcom, 1, 0xd8d0, None, 0, ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { FloatReg }
+ficom, 1, 0xde, 0x2, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// comparison (with pop)
+fcomp, 1, 0xd8d8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+// alias for fcomp %st(1)
+fcomp, 0, 0xd8d9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fcomp, 1, 0xd8, 0x3, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fcomp, 1, 0xd8d8, None, 0, ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { FloatReg }
+ficomp, 1, 0xde, 0x3, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fcompp, 0, 0xded9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+// unordered comparison (with pop)
+fucom, 1, 0xdde0, None, Cpu286, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+// alias for fucom %st(1)
+fucom, 0, 0xdde1, None, Cpu286, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fucomp, 1, 0xdde8, None, Cpu286, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+// alias for fucomp %st(1)
+fucomp, 0, 0xdde9, None, Cpu286, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fucompp, 0, 0xdae9, None, Cpu286, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+ftst, 0, 0xd9e4, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fxam, 0, 0xd9e5, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+// load constants into %st0
+fld1, 0, 0xd9e8, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fldl2t, 0, 0xd9e9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fldl2e, 0, 0xd9ea, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fldpi, 0, 0xd9eb, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fldlg2, 0, 0xd9ec, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fldln2, 0, 0xd9ed, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fldz, 0, 0xd9ee, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+// Arithmetic.
+
+// add
+fadd, 2, 0xd8c0, None, 0, ShortForm|FloatD|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+// alias for fadd %st(i), %st
+fadd, 1, 0xd8c0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+#if SYSV386_COMPAT
+// alias for faddp
+fadd, 0, 0xdec1, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { 0 }
+#endif
+fadd, 1, 0xd8, 0x0, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fiadd, 1, 0xde, 0x0, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+faddp, 2, 0xdec0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatAcc, FloatReg }
+faddp, 1, 0xdec0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+// alias for faddp %st, %st(1)
+faddp, 0, 0xdec1, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+faddp, 2, 0xdec0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { FloatReg, FloatAcc }
+
+// subtract
+fsub, 1, 0xd8e0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+#if SYSV386_COMPAT
+fsub, 2, 0xd8e0, None, 0, ShortForm|FloatD|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+// alias for fsubp
+fsub, 0, 0xdee1, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { 0 }
+#else
+fsub, 2, 0xd8e0, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm|FloatD|FloatR, { FloatReg, FloatAcc }
+#endif
+fsub, 1, 0xd8, 0x4, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fisub, 1, 0xde, 0x4, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+#if SYSV386_COMPAT
+fsubp, 2, 0xdee0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatAcc, FloatReg }
+fsubp, 1, 0xdee0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+fsubp, 0, 0xdee1, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+#if OLDGCC_COMPAT
+fsubp, 2, 0xdee0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { FloatReg, FloatAcc }
+#endif
+#else
+fsubp, 2, 0xdee8, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm, { FloatAcc, FloatReg }
+fsubp, 1, 0xdee8, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm, { FloatReg }
+fsubp, 0, 0xdee9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf, { 0 }
+#endif
+
+// subtract reverse
+fsubr, 1, 0xd8e8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+#if SYSV386_COMPAT
+fsubr, 2, 0xd8e8, None, 0, ShortForm|FloatD|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+// alias for fsubrp
+fsubr, 0, 0xdee9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { 0 }
+#else
+fsubr, 2, 0xd8e8, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm|FloatD|FloatR, { FloatReg, FloatAcc }
+#endif
+fsubr, 1, 0xd8, 0x5, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fisubr, 1, 0xde, 0x5, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+#if SYSV386_COMPAT
+fsubrp, 2, 0xdee8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatAcc, FloatReg }
+fsubrp, 1, 0xdee8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+fsubrp, 0, 0xdee9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+#if OLDGCC_COMPAT
+fsubrp, 2, 0xdee8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { FloatReg, FloatAcc }
+#endif
+#else
+fsubrp, 2, 0xdee0, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm, { FloatAcc, FloatReg }
+fsubrp, 1, 0xdee0, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm, { FloatReg }
+fsubrp, 0, 0xdee1, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf, { 0 }
+#endif
+
+// multiply
+fmul, 2, 0xd8c8, None, 0, ShortForm|FloatD|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fmul, 1, 0xd8c8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+#if SYSV386_COMPAT
+// alias for fmulp
+fmul, 0, 0xdec9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { 0 }
+#endif
+fmul, 1, 0xd8, 0x1, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fimul, 1, 0xde, 0x1, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+fmulp, 2, 0xdec8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatAcc, FloatReg }
+fmulp, 1, 0xdec8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+fmulp, 0, 0xdec9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fmulp, 2, 0xdec8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { FloatReg, FloatAcc }
+
+// divide
+fdiv, 1, 0xd8f0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+#if SYSV386_COMPAT
+fdiv, 2, 0xd8f0, None, 0, ShortForm|FloatD|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+// alias for fdivp
+fdiv, 0, 0xdef1, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { 0 }
+#else
+fdiv, 2, 0xd8f0, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm|FloatD|FloatR, { FloatReg, FloatAcc }
+#endif
+fdiv, 1, 0xd8, 0x6, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fidiv, 1, 0xde, 0x6, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+#if SYSV386_COMPAT
+fdivp, 2, 0xdef0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatAcc, FloatReg }
+fdivp, 1, 0xdef0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+fdivp, 0, 0xdef1, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+#if OLDGCC_COMPAT
+fdivp, 2, 0xdef0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { FloatReg, FloatAcc }
+#endif
+#else
+fdivp, 2, 0xdef8, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm, { FloatAcc, FloatReg }
+fdivp, 1, 0xdef8, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm, { FloatReg }
+fdivp, 0, 0xdef9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf, { 0 }
+#endif
+
+// divide reverse
+fdivr, 1, 0xd8f8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+#if SYSV386_COMPAT
+fdivr, 2, 0xd8f8, None, 0, ShortForm|FloatD|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+// alias for fdivrp
+fdivr, 0, 0xdef9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { 0 }
+#else
+fdivr, 2, 0xd8f8, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm|FloatD|FloatR, { FloatReg, FloatAcc }
+#endif
+fdivr, 1, 0xd8, 0x7, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fidivr, 1, 0xde, 0x7, 0, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+#if SYSV386_COMPAT
+fdivrp, 2, 0xdef8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatAcc, FloatReg }
+fdivrp, 1, 0xdef8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+fdivrp, 0, 0xdef9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+#if OLDGCC_COMPAT
+fdivrp, 2, 0xdef8, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh, { FloatReg, FloatAcc }
+#endif
+#else
+fdivrp, 2, 0xdef0, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm, { FloatAcc, FloatReg }
+fdivrp, 1, 0xdef0, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm, { FloatReg }
+fdivrp, 0, 0xdef1, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf, { 0 }
+#endif
+
+f2xm1, 0, 0xd9f0, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fyl2x, 0, 0xd9f1, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fptan, 0, 0xd9f2, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fpatan, 0, 0xd9f3, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fxtract, 0, 0xd9f4, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fprem1, 0, 0xd9f5, None, Cpu286, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fdecstp, 0, 0xd9f6, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fincstp, 0, 0xd9f7, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fprem, 0, 0xd9f8, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fyl2xp1, 0, 0xd9f9, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fsqrt, 0, 0xd9fa, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fsincos, 0, 0xd9fb, None, Cpu286, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+frndint, 0, 0xd9fc, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fscale, 0, 0xd9fd, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fsin, 0, 0xd9fe, None, Cpu286, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fcos, 0, 0xd9ff, None, Cpu286, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fchs, 0, 0xd9e0, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fabs, 0, 0xd9e1, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+// processor control
+fninit, 0, 0xdbe3, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+finit, 0, 0xdbe3, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|FWait, { 0 }
+fldcw, 1, 0xd9, 0x5, 0, Modrm|FloatMF|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fnstcw, 1, 0xd9, 0x7, 0, Modrm|FloatMF|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fstcw, 1, 0xd9, 0x7, 0, Modrm|FloatMF|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|FWait, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+// XXX should reject %al, %eax, and %rax
+fnstsw, 1, 0xdfe0, None, 0, IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Acc }
+fnstsw, 1, 0xdd, 0x7, 0, Modrm|FloatMF|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fnstsw, 0, 0xdfe0, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+// XXX should reject %al, %eax, and %rax
+fstsw, 1, 0xdfe0, None, 0, IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|FWait, { Acc }
+fstsw, 1, 0xdd, 0x7, 0, Modrm|FloatMF|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|FWait, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fstsw, 0, 0xdfe0, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|FWait, { 0 }
+fnclex, 0, 0xdbe2, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fclex, 0, 0xdbe2, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|FWait, { 0 }
+// Short forms of fldenv, fstenv use data size prefix.
+fnstenv, 1, 0xd9, 0x6, 0, Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fstenv, 1, 0xd9, 0x6, 0, Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_xSuf|FWait, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fldenv, 1, 0xd9, 0x4, 0, Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fnsave, 1, 0xdd, 0x6, 0, Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fsave, 1, 0xdd, 0x6, 0, Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_xSuf|FWait, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+frstor, 1, 0xdd, 0x4, 0, Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+ffree, 1, 0xddc0, None, 0, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+// P6:free st(i), pop st
+ffreep, 1, 0xdfc0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+fnop, 0, 0xd9d0, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fwait, 0, 0x9b, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+// Opcode prefixes; we allow them as separate insns too.
+
+addr16, 0, 0x67, None, Cpu386|CpuNo64, Size16|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+addr32, 0, 0x67, None, Cpu386, Size32|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+aword, 0, 0x67, None, Cpu386|CpuNo64, Size16|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+adword, 0, 0x67, None, Cpu386, Size32|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+data16, 0, 0x66, None, Cpu386, Size16|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+data32, 0, 0x66, None, Cpu386|CpuNo64, Size32|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+word, 0, 0x66, None, Cpu386, Size16|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+dword, 0, 0x66, None, Cpu386|CpuNo64, Size32|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+lock, 0, 0xf0, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+wait, 0, 0x9b, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+cs, 0, 0x2e, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+ds, 0, 0x3e, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+es, 0, 0x26, None, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+fs, 0, 0x64, None, Cpu386, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+gs, 0, 0x65, None, Cpu386, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+ss, 0, 0x36, None, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rep, 0, 0xf3, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+repe, 0, 0xf3, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+repz, 0, 0xf3, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+repne, 0, 0xf2, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+repnz, 0, 0xf2, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+ht, 0, 0x3e, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+hnt, 0, 0x2e, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex, 0, 0x40, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rexz, 0, 0x41, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rexy, 0, 0x42, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rexyz, 0, 0x43, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rexx, 0, 0x44, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rexxz, 0, 0x45, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rexxy, 0, 0x46, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rexxyz, 0, 0x47, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex64, 0, 0x48, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex64z, 0, 0x49, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex64y, 0, 0x4a, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex64yz, 0, 0x4b, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex64x, 0, 0x4c, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex64xz, 0, 0x4d, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex64xy, 0, 0x4e, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex64xyz, 0, 0x4f, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.b, 0, 0x41, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.x, 0, 0x42, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.xb, 0, 0x43, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.r, 0, 0x44, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.rb, 0, 0x45, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.rx, 0, 0x46, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.rxb, 0, 0x47, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.w, 0, 0x48, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.wb, 0, 0x49, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.wx, 0, 0x4a, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.wxb, 0, 0x4b, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.wr, 0, 0x4c, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.wrb, 0, 0x4d, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.wrx, 0, 0x4e, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+rex.wrxb, 0, 0x4f, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix, { 0 }
+
+// 486 extensions.
+
+bswap, 1, 0xfc8, None, Cpu486, ShortForm|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { Reg32|Reg64 }
+xadd, 2, 0xfc0, None, Cpu486, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+cmpxchg, 2, 0xfb0, None, Cpu486, W|Modrm|No_sSuf|No_xSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+invd, 0, 0xf08, None, Cpu486, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+wbinvd, 0, 0xf09, None, Cpu486, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+invlpg, 1, 0xf01, 0x7, Cpu486, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// 586 and late 486 extensions.
+cpuid, 0, 0xfa2, None, Cpu486, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+// Pentium extensions.
+wrmsr, 0, 0xf30, None, Cpu586, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+rdtsc, 0, 0xf31, None, Cpu586, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+rdmsr, 0, 0xf32, None, Cpu586, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+cmpxchg8b, 1, 0xfc7, 0x1, Cpu586, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// Pentium II/Pentium Pro extensions.
+sysenter, 0, 0xf34, None, Cpu686, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+sysexit, 0, 0xf35, None, Cpu686, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fxsave, 1, 0xfae, 0x0, Cpu686, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fxrstor, 1, 0xfae, 0x1, Cpu686, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+rdpmc, 0, 0xf33, None, Cpu686, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+// official undefined instr.
+ud2, 0, 0xf0b, None, Cpu686, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+// alias for ud2
+ud2a, 0, 0xf0b, None, Cpu686, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+// 2nd. official undefined instr.
+ud2b, 0, 0xfb9, None, Cpu686, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+cmovo, 2, 0xf40, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovno, 2, 0xf41, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovb, 2, 0xf42, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovc, 2, 0xf42, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovnae, 2, 0xf42, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovae, 2, 0xf43, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovnc, 2, 0xf43, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovnb, 2, 0xf43, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmove, 2, 0xf44, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovz, 2, 0xf44, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovne, 2, 0xf45, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovnz, 2, 0xf45, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovbe, 2, 0xf46, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovna, 2, 0xf46, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmova, 2, 0xf47, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovnbe, 2, 0xf47, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovs, 2, 0xf48, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovns, 2, 0xf49, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovp, 2, 0xf4a, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovnp, 2, 0xf4b, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovl, 2, 0xf4c, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovnge, 2, 0xf4c, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovge, 2, 0xf4d, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovnl, 2, 0xf4d, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovle, 2, 0xf4e, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovng, 2, 0xf4e, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovg, 2, 0xf4f, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+cmovnle, 2, 0xf4f, None, Cpu686, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+
+fcmovb, 2, 0xdac0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcmovnae, 2, 0xdac0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcmove, 2, 0xdac8, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcmovbe, 2, 0xdad0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcmovna, 2, 0xdad0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcmovu, 2, 0xdad8, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcmovae, 2, 0xdbc0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcmovnb, 2, 0xdbc0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcmovne, 2, 0xdbc8, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcmova, 2, 0xdbd0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcmovnbe, 2, 0xdbd0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcmovnu, 2, 0xdbd8, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+
+fcomi, 2, 0xdbf0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcomi, 0, 0xdbf1, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fcomi, 1, 0xdbf0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+fucomi, 2, 0xdbe8, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fucomi, 0, 0xdbe9, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fucomi, 1, 0xdbe8, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+fcomip, 2, 0xdff0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcompi, 2, 0xdff0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fcompi, 0, 0xdff1, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fcompi, 1, 0xdff0, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+fucomip, 2, 0xdfe8, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fucompi, 2, 0xdfe8, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg, FloatAcc }
+fucompi, 0, 0xdfe9, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+fucompi, 1, 0xdfe8, None, Cpu686, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { FloatReg }
+
+// Pentium4 extensions.
+
+movnti, 2, 0xfc3, None, CpuP4, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+clflush, 1, 0xfae, 0x7, CpuP4, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+lfence, 0, 0xfae, 0xe8, CpuP4, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+mfence, 0, 0xfae, 0xf0, CpuP4, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+pause, 0, 0xf390, None, CpuP4, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+
+// MMX/SSE2 instructions.
+
+emms, 0, 0xf77, None, CpuMMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+// These really shouldn't allow for Reg64 (movq is the right mnemonic for
+// copying between Reg64/Mem64 and RegXMM/RegMMX, as is mandated by Intel's
+// spec). AMD's spec, having been in existence for much longer, failed to
+// recognize that and specified movd for 32- and 64-bit operations.
+movd, 2, 0xf6e, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegMMX }
+movd, 2, 0xf7e, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegMMX, Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+movd, 2, 0x660f6e, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+movd, 2, 0x660f7e, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+// In the 64bit mode the short form mov immediate is redefined to have
+// 64bit displacement value.
+movq, 2, 0xf6f, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+movq, 2, 0xf7f, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { RegMMX, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX }
+movq, 2, 0xf30f7e, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movq, 2, 0x660fd6, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM }
+movq, 2, 0xf6e, None, Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegMMX }
+movq, 2, 0xf7e, None, Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegMMX, Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+movq, 2, 0x660f6e, None, Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+movq, 2, 0x660f7e, None, Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+// We put the 64bit displacement first and we only mark constants
+// larger than 32bit as Disp64.
+movq, 2, 0xa0, None, Cpu64, D|W|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Disp64, Acc }
+movq, 2, 0x88, None, Cpu64, D|W|Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg64, Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+movq, 2, 0xc6, 0x0, Cpu64, W|Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm32S, Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+movq, 2, 0xb0, None, Cpu64, W|ShortForm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm64, Reg64 }
+// The segment register moves accept Reg64 so that a segment register
+// can be copied to a 64 bit register, and vice versa.
+movq, 2, 0x8c, None, Cpu64, Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { SReg2|SReg3, Reg64|RegMem }
+movq, 2, 0x8e, None, Cpu64, Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg64, SReg2|SReg3 }
+// Move to/from control debug registers. In the 16 or 32bit modes they
+// are 32bit. In the 64bit mode they are 64bit.
+movq, 2, 0xf20, None, Cpu64, D|Modrm|Size64|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { Control, Reg64|RegMem }
+movq, 2, 0xf21, None, Cpu64, D|Modrm|Size64|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { Debug, Reg64|RegMem }
+// Real MMX instructions.
+packssdw, 2, 0xf6b, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+packssdw, 2, 0x660f6b, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+packsswb, 2, 0xf63, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+packsswb, 2, 0x660f63, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+packuswb, 2, 0xf67, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+packuswb, 2, 0x660f67, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+paddb, 2, 0xffc, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+paddb, 2, 0x660ffc, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+paddw, 2, 0xffd, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+paddw, 2, 0x660ffd, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+paddd, 2, 0xffe, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+paddd, 2, 0x660ffe, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+paddq, 2, 0xfd4, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+paddq, 2, 0x660fd4, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+paddsb, 2, 0xfec, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+paddsb, 2, 0x660fec, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+paddsw, 2, 0xfed, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+paddsw, 2, 0x660fed, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+paddusb, 2, 0xfdc, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+paddusb, 2, 0x660fdc, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+paddusw, 2, 0xfdd, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+paddusw, 2, 0x660fdd, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pand, 2, 0xfdb, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pand, 2, 0x660fdb, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pandn, 2, 0xfdf, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pandn, 2, 0x660fdf, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pcmpeqb, 2, 0xf74, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pcmpeqb, 2, 0x660f74, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pcmpeqw, 2, 0xf75, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pcmpeqw, 2, 0x660f75, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pcmpeqd, 2, 0xf76, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pcmpeqd, 2, 0x660f76, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pcmpgtb, 2, 0xf64, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pcmpgtb, 2, 0x660f64, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pcmpgtw, 2, 0xf65, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pcmpgtw, 2, 0x660f65, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pcmpgtd, 2, 0xf66, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pcmpgtd, 2, 0x660f66, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmaddwd, 2, 0xff5, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pmaddwd, 2, 0x660ff5, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmulhw, 2, 0xfe5, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pmulhw, 2, 0x660fe5, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmullw, 2, 0xfd5, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pmullw, 2, 0x660fd5, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+por, 2, 0xfeb, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+por, 2, 0x660feb, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psllw, 2, 0xff1, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psllw, 2, 0x660ff1, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psllw, 2, 0xf71, 0x6, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegMMX }
+psllw, 2, 0x660f71, 0x6, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM }
+pslld, 2, 0xff2, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pslld, 2, 0x660ff2, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pslld, 2, 0xf72, 0x6, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegMMX }
+pslld, 2, 0x660f72, 0x6, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM }
+psllq, 2, 0xff3, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psllq, 2, 0x660ff3, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psllq, 2, 0xf73, 0x6, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegMMX }
+psllq, 2, 0x660f73, 0x6, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM }
+psraw, 2, 0xfe1, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psraw, 2, 0x660fe1, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psraw, 2, 0xf71, 0x4, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegMMX }
+psraw, 2, 0x660f71, 0x4, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM }
+psrad, 2, 0xfe2, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psrad, 2, 0x660fe2, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psrad, 2, 0xf72, 0x4, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegMMX }
+psrad, 2, 0x660f72, 0x4, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM }
+psrlw, 2, 0xfd1, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psrlw, 2, 0x660fd1, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psrlw, 2, 0xf71, 0x2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegMMX }
+psrlw, 2, 0x660f71, 0x2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM }
+psrld, 2, 0xfd2, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psrld, 2, 0x660fd2, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psrld, 2, 0xf72, 0x2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegMMX }
+psrld, 2, 0x660f72, 0x2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM }
+psrlq, 2, 0xfd3, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psrlq, 2, 0x660fd3, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psrlq, 2, 0xf73, 0x2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegMMX }
+psrlq, 2, 0x660f73, 0x2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM }
+psubb, 2, 0xff8, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psubb, 2, 0x660ff8, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psubw, 2, 0xff9, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psubw, 2, 0x660ff9, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psubd, 2, 0xffa, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psubd, 2, 0x660ffa, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psubq, 2, 0xffb, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psubq, 2, 0x660ffb, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psubsb, 2, 0xfe8, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psubsb, 2, 0x660fe8, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psubsw, 2, 0xfe9, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psubsw, 2, 0x660fe9, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psubusb, 2, 0xfd8, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psubusb, 2, 0x660fd8, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psubusw, 2, 0xfd9, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psubusw, 2, 0x660fd9, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+punpckhbw, 2, 0xf68, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+punpckhbw, 2, 0x660f68, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+punpckhwd, 2, 0xf69, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+punpckhwd, 2, 0x660f69, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+punpckhdq, 2, 0xf6a, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+punpckhdq, 2, 0x660f6a, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+punpcklbw, 2, 0xf60, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+punpcklbw, 2, 0x660f60, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+punpcklwd, 2, 0xf61, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+punpcklwd, 2, 0x660f61, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+punpckldq, 2, 0xf62, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+punpckldq, 2, 0x660f62, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pxor, 2, 0xfef, None, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pxor, 2, 0x660fef, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+
+// PIII Katmai New Instructions / SIMD instructions.
+
+addps, 2, 0xf58, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+addss, 2, 0xf30f58, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+andnps, 2, 0xf55, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+andps, 2, 0xf54, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpeqps, 2, 0xfc2, 0x0, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpeqss, 2, 0xf30fc2, 0x0, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpleps, 2, 0xfc2, 0x2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpless, 2, 0xf30fc2, 0x2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpltps, 2, 0xfc2, 0x1, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpltss, 2, 0xf30fc2, 0x1, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpneqps, 2, 0xfc2, 0x4, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpneqss, 2, 0xf30fc2, 0x4, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpnleps, 2, 0xfc2, 0x6, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpnless, 2, 0xf30fc2, 0x6, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpnltps, 2, 0xfc2, 0x5, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpnltss, 2, 0xf30fc2, 0x5, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpordps, 2, 0xfc2, 0x7, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpordss, 2, 0xf30fc2, 0x7, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpunordps, 2, 0xfc2, 0x3, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpunordss, 2, 0xf30fc2, 0x3, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpps, 3, 0xfc2, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpss, 3, 0xf30fc2, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+comiss, 2, 0xf2f, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cvtpi2ps, 2, 0xf2a, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegXMM }
+cvtps2pi, 2, 0xf2d, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegMMX }
+cvtsi2ss, 2, 0xf30f2a, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+cvtss2si, 2, 0xf30f2d, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, Reg32|Reg64 }
+cvttps2pi, 2, 0xf2c, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegMMX }
+cvttss2si, 2, 0xf30f2c, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, Reg32|Reg64 }
+divps, 2, 0xf5e, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+divss, 2, 0xf30f5e, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+ldmxcsr, 1, 0xfae, 0x2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+maskmovq, 2, 0xff7, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegMMX, RegMMX }
+maxps, 2, 0xf5f, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+maxss, 2, 0xf30f5f, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+minps, 2, 0xf5d, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+minss, 2, 0xf30f5d, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movaps, 2, 0xf28, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movaps, 2, 0xf29, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM }
+movhlps, 2, 0xf12, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, RegXMM }
+movhps, 2, 0xf16, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+movhps, 2, 0xf17, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+movlhps, 2, 0xf16, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, RegXMM }
+movlps, 2, 0xf12, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+movlps, 2, 0xf13, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+movmskps, 2, 0xf50, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { RegXMM, Reg32|Reg64 }
+movntps, 2, 0xf2b, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+movntq, 2, 0xfe7, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegMMX, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+movntdq, 2, 0x660fe7, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+movss, 2, 0xf30f10, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movss, 2, 0xf30f11, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM }
+movups, 2, 0xf10, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movups, 2, 0xf11, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM }
+mulps, 2, 0xf59, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+mulss, 2, 0xf30f59, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+orps, 2, 0xf56, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pavgb, 2, 0xfe0, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pavgb, 2, 0x660fe0, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pavgw, 2, 0xfe3, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pavgw, 2, 0x660fe3, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pextrw, 3, 0xfc5, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { Imm8, RegMMX, Reg32|Reg64 }
+pextrw, 3, 0x660fc5, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { Imm8, RegXMM, Reg32|Reg64 }
+
+// Streaming SIMD extensions 4.1 Instructions.
+pextrw, 3, 0x660f3a15, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM, Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+pinsrw, 3, 0xfc4, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { Imm8, Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegMMX }
+pinsrw, 3, 0x660fc4, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { Imm8, Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+pmaxsw, 2, 0xfee, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pmaxsw, 2, 0x660fee, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmaxub, 2, 0xfde, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pmaxub, 2, 0x660fde, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pminsw, 2, 0xfea, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pminsw, 2, 0x660fea, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pminub, 2, 0xfda, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pminub, 2, 0x660fda, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmovmskb, 2, 0xfd7, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { RegMMX, Reg32|Reg64 }
+pmovmskb, 2, 0x660fd7, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { RegXMM, Reg32|Reg64 }
+pmulhuw, 2, 0xfe4, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pmulhuw, 2, 0x660fe4, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+prefetchnta, 1, 0xf18, 0x0, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+prefetcht0, 1, 0xf18, 0x1, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+prefetcht1, 1, 0xf18, 0x2, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+prefetcht2, 1, 0xf18, 0x3, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+psadbw, 2, 0xff6, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psadbw, 2, 0x660ff6, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pshufw, 3, 0xf70, None, CpuMMX2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+rcpps, 2, 0xf53, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+rcpss, 2, 0xf30f53, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+rsqrtps, 2, 0xf52, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+rsqrtss, 2, 0xf30f52, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+sfence, 0, 0xfae, 0xf8, CpuMMX2, IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+shufps, 3, 0xfc6, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+sqrtps, 2, 0xf51, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+sqrtss, 2, 0xf30f51, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+stmxcsr, 1, 0xfae, 0x3, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+subps, 2, 0xf5c, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+subss, 2, 0xf30f5c, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+ucomiss, 2, 0xf2e, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+unpckhps, 2, 0xf15, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+unpcklps, 2, 0xf14, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+xorps, 2, 0xf57, None, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+
+// SSE-2 instructions.
+
+addpd, 2, 0x660f58, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+addsd, 2, 0xf20f58, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+andnpd, 2, 0x660f55, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+andpd, 2, 0x660f54, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpeqpd, 2, 0x660fc2, 0x0, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpeqsd, 2, 0xf20fc2, 0x0, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmplepd, 2, 0x660fc2, 0x2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmplesd, 2, 0xf20fc2, 0x2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpltpd, 2, 0x660fc2, 0x1, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpltsd, 2, 0xf20fc2, 0x1, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpneqpd, 2, 0x660fc2, 0x4, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpneqsd, 2, 0xf20fc2, 0x4, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpnlepd, 2, 0x660fc2, 0x6, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpnlesd, 2, 0xf20fc2, 0x6, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpnltpd, 2, 0x660fc2, 0x5, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpnltsd, 2, 0xf20fc2, 0x5, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpordpd, 2, 0x660fc2, 0x7, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpordsd, 2, 0xf20fc2, 0x7, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpunordpd, 2, 0x660fc2, 0x3, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpunordsd, 2, 0xf20fc2, 0x3, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmppd, 3, 0x660fc2, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+// Intel mode string compare.
+cmpsd, 0, 0xa7, None, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString, { 0 }
+cmpsd, 2, 0xa7, None, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+cmpsd, 3, 0xf20fc2, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+comisd, 2, 0x660f2f, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cvtpi2pd, 2, 0x660f2a, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegXMM }
+cvtsi2sd, 2, 0xf20f2a, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+divpd, 2, 0x660f5e, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+divsd, 2, 0xf20f5e, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+maxpd, 2, 0x660f5f, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+maxsd, 2, 0xf20f5f, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+minpd, 2, 0x660f5d, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+minsd, 2, 0xf20f5d, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movapd, 2, 0x660f28, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movapd, 2, 0x660f29, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM }
+movhpd, 2, 0x660f16, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+movhpd, 2, 0x660f17, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+movlpd, 2, 0x660f12, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+movlpd, 2, 0x660f13, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+movmskpd, 2, 0x660f50, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { RegXMM, Reg32|Reg64 }
+movntpd, 2, 0x660f2b, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+// Intel mode string move.
+movsd, 0, 0xa5, None, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString, { 0 }
+movsd, 2, 0xa5, None, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+movsd, 2, 0xf20f10, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movsd, 2, 0xf20f11, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM }
+movupd, 2, 0x660f10, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movupd, 2, 0x660f11, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM }
+mulpd, 2, 0x660f59, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+mulsd, 2, 0xf20f59, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+orpd, 2, 0x660f56, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+shufpd, 3, 0x660fc6, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+sqrtpd, 2, 0x660f51, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+sqrtsd, 2, 0xf20f51, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+subpd, 2, 0x660f5c, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+subsd, 2, 0xf20f5c, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+ucomisd, 2, 0x660f2e, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+unpckhpd, 2, 0x660f15, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+unpcklpd, 2, 0x660f14, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+xorpd, 2, 0x660f57, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cvtdq2pd, 2, 0xf30fe6, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cvtpd2dq, 2, 0xf20fe6, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cvtdq2ps, 2, 0xf5b, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cvtpd2pi, 2, 0x660f2d, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegMMX }
+cvtpd2ps, 2, 0x660f5a, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cvtps2pd, 2, 0xf5a, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cvtps2dq, 2, 0x660f5b, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cvtsd2si, 2, 0xf20f2d, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, Reg32|Reg64 }
+cvtsd2ss, 2, 0xf20f5a, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cvtss2sd, 2, 0xf30f5a, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cvttpd2pi, 2, 0x660f2c, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegMMX }
+cvttsd2si, 2, 0xf20f2c, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, Reg32|Reg64 }
+cvttpd2dq, 2, 0x660fe6, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cvttps2dq, 2, 0xf30f5b, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+maskmovdqu, 2, 0x660ff7, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, RegXMM }
+movdqa, 2, 0x660f6f, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movdqa, 2, 0x660f7f, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM }
+movdqu, 2, 0xf30f6f, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movdqu, 2, 0xf30f7f, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM }
+movdq2q, 2, 0xf20fd6, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, RegMMX }
+movq2dq, 2, 0xf30fd6, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegMMX, RegXMM }
+pmuludq, 2, 0xff4, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pmuludq, 2, 0x660ff4, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pshufd, 3, 0x660f70, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pshufhw, 3, 0xf30f70, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pshuflw, 3, 0xf20f70, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pslldq, 2, 0x660f73, 0x7, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM }
+psrldq, 2, 0x660f73, 0x3, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM }
+punpckhqdq, 2, 0x660f6d, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+punpcklqdq, 2, 0x660f6c, None, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+
+// SSE-3 instructions.
+
+addsubpd, 2, 0x660fd0, None, CpuSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+addsubps, 2, 0xf20fd0, None, CpuSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+cmpxchg16b, 1, 0xfc7, 0x1, CpuSSE3|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fisttp, 1, 0xdf, 0x1, CpuSSE3, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fisttp, 1, 0xdd, 0x1, CpuSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+fisttpll, 1, 0xdd, 0x1, CpuSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+haddpd, 2, 0x660f7c, None, CpuSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+haddps, 2, 0xf20f7c, None, CpuSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+hsubpd, 2, 0x660f7d, None, CpuSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+hsubps, 2, 0xf20f7d, None, CpuSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+lddqu, 2, 0xf20ff0, None, CpuSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+monitor, 0, 0xf01, 0xc8, CpuSSE3, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+// monitor is very special. CX and DX are always 64bits with zero upper
+// 32bits in 64bit mode, and 32bits in 16bit and 32bit modes. The
+// address size override prefix can be used to overrride the AX size in
+// all modes.
+// Need to ensure only "monitor %eax/%ax,%ecx,%edx" is accepted.
+monitor, 3, 0xf01, 0xc8, CpuSSE3|CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { Reg16|Reg32, Reg32, Reg32 }
+// Need to ensure only "monitor %rax/%eax,%rcx,%rdx" is accepted.
+monitor, 3, 0xf01, 0xc8, CpuSSE3|Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt|NoRex64, { Reg32|Reg64, Reg64, Reg64 }
+movddup, 2, 0xf20f12, None, CpuSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movshdup, 2, 0xf30f16, None, CpuSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movsldup, 2, 0xf30f12, None, CpuSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+mwait, 0, 0xf01, 0xc9, CpuSSE3, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+// mwait is very special. AX and CX are always 64bits with zero upper
+// 32bits in 64bit mode, and 32bits in 16bit and 32bit modes.
+// Need to ensure only "mwait %eax,%ecx" is accepted.
+mwait, 2, 0xf01, 0xc9, CpuSSE3|CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { Reg32, Reg32 }
+// Need to ensure only "mwait %rax,%rcx" is accepted.
+mwait, 2, 0xf01, 0xc9, CpuSSE3|Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt|NoRex64, { Reg64, Reg64 }
+
+// VMX instructions.
+vmcall, 0, 0xf01, 0xc1, CpuVMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+vmclear, 1, 0x660fc7, 0x6, CpuVMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+vmlaunch, 0, 0xf01, 0xc2, CpuVMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+vmresume, 0, 0xf01, 0xc3, CpuVMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+vmptrld, 1, 0xfc7, 0x6, CpuVMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+vmptrst, 1, 0xfc7, 0x7, CpuVMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+vmread, 2, 0xf78, None, CpuVMX|CpuNo64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf, { Reg32, Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+vmread, 2, 0xf78, None, CpuVMX|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Reg64, Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+vmwrite, 2, 0xf79, None, CpuVMX|CpuNo64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf, { Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32 }
+vmwrite, 2, 0xf79, None, CpuVMX|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg64 }
+vmxoff, 0, 0xf01, 0xc4, CpuVMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+vmxon, 1, 0xf30fc7, 0x6, CpuVMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+// Supplemental Streaming SIMD extensions 3 Instructions.
+
+phaddw, 2, 0xf3801, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+phaddw, 2, 0x660f3801, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+phaddd, 2, 0xf3802, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+phaddd, 2, 0x660f3802, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+phaddsw, 2, 0xf3803, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+phaddsw, 2, 0x660f3803, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+phsubw, 2, 0xf3805, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+phsubw, 2, 0x660f3805, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+phsubd, 2, 0xf3806, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+phsubd, 2, 0x660f3806, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+phsubsw, 2, 0xf3807, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+phsubsw, 2, 0x660f3807, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmaddubsw, 2, 0xf3804, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pmaddubsw, 2, 0x660f3804, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmulhrsw, 2, 0xf380b, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pmulhrsw, 2, 0x660f380b, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pshufb, 2, 0xf3800, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pshufb, 2, 0x660f3800, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psignb, 2, 0xf3808, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psignb, 2, 0x660f3808, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psignw, 2, 0xf3809, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psignw, 2, 0x660f3809, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+psignd, 2, 0xf380a, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+psignd, 2, 0x660f380a, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+palignr, 3, 0xf3a0f, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+palignr, 3, 0x660f3a0f, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pabsb, 2, 0xf381c, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pabsb, 2, 0x660f381c, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pabsw, 2, 0xf381d, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pabsw, 2, 0x660f381d, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pabsd, 2, 0xf381e, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pabsd, 2, 0x660f381e, None, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+
+// Streaming SIMD extensions 4.1 Instructions.
+
+blendpd, 3, 0x660f3a0d, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+blendps, 3, 0x660f3a0c, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+blendvpd, 3, 0x660f3815, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|RegKludge, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+blendvps, 3, 0x660f3814, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|RegKludge, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+dppd, 3, 0x660f3a41, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+dpps, 3, 0x660f3a40, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+extractps, 3, 0x660f3a17, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM, Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+insertps, 3, 0x660f3a21, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+movntdqa, 2, 0x660f382a, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+mpsadbw, 3, 0x660f3a42, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+packusdw, 2, 0x660f382b, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pblendvb, 3, 0x660f3810, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|RegKludge, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pblendw, 3, 0x660f3a0e, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pcmpeqq, 2, 0x660f3829, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pextrb, 3, 0x660f3a14, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM, Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+pextrd, 3, 0x660f3a16, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM, Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+pextrq, 3, 0x660f3a16, None, CpuSSE4_1|Cpu64, Modrm|Size64|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, RegXMM, Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+phminposuw, 2, 0x660f3841, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pinsrb, 3, 0x660f3a20, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+pinsrd, 3, 0x660f3a22, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+pinsrq, 3, 0x660f3a22, None, CpuSSE4_1|Cpu64, Modrm|Size64|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
+pmaxsb, 2, 0x660f383c, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmaxsd, 2, 0x660f383d, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmaxud, 2, 0x660f383f, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmaxuw, 2, 0x660f383e, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pminsb, 2, 0x660f3838, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pminsd, 2, 0x660f3839, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pminud, 2, 0x660f383b, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pminuw, 2, 0x660f383a, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmovsxbw, 2, 0x660f3820, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmovsxbd, 2, 0x660f3821, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmovsxbq, 2, 0x660f3822, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmovsxwd, 2, 0x660f3823, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmovsxwq, 2, 0x660f3824, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmovsxdq, 2, 0x660f3825, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmovzxbw, 2, 0x660f3830, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmovzxbd, 2, 0x660f3831, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmovzxbq, 2, 0x660f3832, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmovzxwd, 2, 0x660f3833, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmovzxwq, 2, 0x660f3834, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmovzxdq, 2, 0x660f3835, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmuldq, 2, 0x660f3828, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pmulld, 2, 0x660f3840, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+ptest, 2, 0x660f3817, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+roundpd, 3, 0x660f3a09, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+roundps, 3, 0x660f3a08, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+roundsd, 3, 0x660f3a0b, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+roundss, 3, 0x660f3a0a, None, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+
+// Streaming SIMD extensions 4.2 Instructions.
+
+pcmpgtq, 2, 0x660f3837, None, CpuSSE4_2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pcmpestri, 3, 0x660f3a61, None, CpuSSE4_2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pcmpestrm, 3, 0x660f3a60, None, CpuSSE4_2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pcmpistri, 3, 0x660f3a63, None, CpuSSE4_2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+pcmpistrm, 3, 0x660f3a62, None, CpuSSE4_2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
+// We put non-8bit version before 8bit so that crc32 with memory operand
+// defaults to non-8bit.
+crc32, 2, 0xf20f38f1, None, CpuSSE4_2, Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf, { Reg16|Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32 }
+crc32, 2, 0xf20f38f1, None, CpuSSE4_2|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|Rex64, { Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg64 }
+crc32, 2, 0xf20f38f0, None, CpuSSE4_2, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32 }
+crc32, 2, 0xf20f38f0, None, CpuSSE4_2|Cpu64, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64, { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg64 }
+
+// AMD 3DNow! instructions.
+
+prefetch, 1, 0xf0d, 0x0, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+prefetchw, 1, 0xf0d, 0x1, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+femms, 0, 0xf0e, None, Cpu3dnow, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+pavgusb, 2, 0xf0f, 0xbf, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pf2id, 2, 0xf0f, 0x1d, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pf2iw, 2, 0xf0f, 0x1c, Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfacc, 2, 0xf0f, 0xae, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfadd, 2, 0xf0f, 0x9e, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfcmpeq, 2, 0xf0f, 0xb0, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfcmpge, 2, 0xf0f, 0x90, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfcmpgt, 2, 0xf0f, 0xa0, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfmax, 2, 0xf0f, 0xa4, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfmin, 2, 0xf0f, 0x94, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfmul, 2, 0xf0f, 0xb4, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfnacc, 2, 0xf0f, 0x8a, Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfpnacc, 2, 0xf0f, 0x8e, Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfrcp, 2, 0xf0f, 0x96, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfrcpit1, 2, 0xf0f, 0xa6, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfrcpit2, 2, 0xf0f, 0xb6, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfrsqit1, 2, 0xf0f, 0xa7, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfrsqrt, 2, 0xf0f, 0x97, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfsub, 2, 0xf0f, 0x9a, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pfsubr, 2, 0xf0f, 0xaa, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pi2fd, 2, 0xf0f, 0xd, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pi2fw, 2, 0xf0f, 0xc, Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pmulhrw, 2, 0xf0f, 0xb7, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+pswapd, 2, 0xf0f, 0xbb, Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
+
+// AMD extensions.
+syscall, 0, 0xf05, None, CpuK6, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { 0 }
+sysret, 0, 0xf07, None, CpuK6, DefaultSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf, { 0 }
+swapgs, 0, 0xf01, 0xf8, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+rdtscp, 0, 0xf01, 0xf9, CpuSledgehammer, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+
+// AMD Pacifica additions.
+clgi, 0, 0xf01, 0xdd, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+invlpga, 0, 0xf01, 0xdf, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+// Need to ensure only "invlpga ...,%ecx" is accepted.
+invlpga, 2, 0xf01, 0xdf, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32 }
+skinit, 0, 0xf01, 0xde, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+skinit, 1, 0xf01, 0xde, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+stgi, 0, 0xf01, 0xdc, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+vmload, 0, 0xf01, 0xda, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+vmload, 1, 0xf01, 0xda, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+vmmcall, 0, 0xf01, 0xd9, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+vmrun, 0, 0xf01, 0xd8, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+vmrun, 1, 0xf01, 0xd8, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+vmsave, 0, 0xf01, 0xdb, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0 }
+vmsave, 1, 0xf01, 0xdb, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+
+
+// SSE4a instructions
+movntsd, 2, 0xf20f2b, None, CpuSSE4a, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+movntss, 2, 0xf30f2b, None, CpuSSE4a, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+extrq, 3, 0x660f78, 0x0, CpuSSE4a, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, Imm8, RegXMM }
+extrq, 2, 0x660f79, None, CpuSSE4a, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, RegXMM }
+insertq, 2, 0xf20f79, None, CpuSSE4a, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { RegXMM, RegXMM }
+insertq, 4, 0xf20f78, None, CpuSSE4a, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf, { Imm8, Imm8, RegXMM, RegXMM }
+
+// ABM instructions
+popcnt, 2, 0xf30fb8, None, CpuABM|CpuSSE4_2, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+lzcnt, 2, 0xf30fbd, None, CpuABM, Modrm|No_bSuf|No_sSuf|No_xSuf, { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+
+
+// VIA PadLock extensions.
+xstore-rng, 0, 0xfa7, 0xc0, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+xcrypt-ecb, 0, 0xf30fa7, 0xc8, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+xcrypt-cbc, 0, 0xf30fa7, 0xd0, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+xcrypt-ctr, 0, 0xf30fa7, 0xd8, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+xcrypt-cfb, 0, 0xf30fa7, 0xe0, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+xcrypt-ofb, 0, 0xf30fa7, 0xe8, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+montmul, 0, 0xf30fa6, 0xc0, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+xsha1, 0, 0xf30fa6, 0xc8, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+xsha256, 0, 0xf30fa6, 0xd0, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+// Aliases without hyphens.
+xstorerng, 0, 0xfa7, 0xc0, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+xcryptecb, 0, 0xf30fa7, 0xc8, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+xcryptcbc, 0, 0xf30fa7, 0xd0, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+xcryptctr, 0, 0xf30fa7, 0xd8, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+xcryptcfb, 0, 0xf30fa7, 0xe0, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+xcryptofb, 0, 0xf30fa7, 0xe8, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
+// Alias for xstore-rng.
+xstore, 0, 0xfa7, 0xc0, Cpu686|CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt, { 0 }
diff --git a/opcodes/i386-reg.tbl b/opcodes/i386-reg.tbl
new file mode 100644
index 000000000000..7240a10fa404
--- /dev/null
+++ b/opcodes/i386-reg.tbl
@@ -0,0 +1,182 @@
+// i386 register table.
+
+// Make %st first as we test for it.
+st, FloatReg|FloatAcc, 0, 0
+// 8 bit regs
+al, Reg8|Acc, 0, 0
+cl, Reg8|ShiftCount, 0, 1
+dl, Reg8, 0, 2
+bl, Reg8, 0, 3
+ah, Reg8, 0, 4
+ch, Reg8, 0, 5
+dh, Reg8, 0, 6
+bh, Reg8, 0, 7
+axl, Reg8|Acc, RegRex64, 0
+cxl, Reg8, RegRex64, 1
+dxl, Reg8, RegRex64, 2
+bxl, Reg8, RegRex64, 3
+spl, Reg8, RegRex64, 4
+bpl, Reg8, RegRex64, 5
+sil, Reg8, RegRex64, 6
+dil, Reg8, RegRex64, 7
+r8b, Reg8, RegRex|RegRex64, 0
+r9b, Reg8, RegRex|RegRex64, 1
+r10b, Reg8, RegRex|RegRex64, 2
+r11b, Reg8, RegRex|RegRex64, 3
+r12b, Reg8, RegRex|RegRex64, 4
+r13b, Reg8, RegRex|RegRex64, 5
+r14b, Reg8, RegRex|RegRex64, 6
+r15b, Reg8, RegRex|RegRex64, 7
+// 16 bit regs
+ax, Reg16|Acc, 0, 0
+cx, Reg16, 0, 1
+dx, Reg16|InOutPortReg, 0, 2
+bx, Reg16|BaseIndex, 0, 3
+sp, Reg16, 0, 4
+bp, Reg16|BaseIndex, 0, 5
+si, Reg16|BaseIndex, 0, 6
+di, Reg16|BaseIndex, 0, 7
+r8w, Reg16, RegRex, 0
+r9w, Reg16, RegRex, 1
+r10w, Reg16, RegRex, 2
+r11w, Reg16, RegRex, 3
+r12w, Reg16, RegRex, 4
+r13w, Reg16, RegRex, 5
+r14w, Reg16, RegRex, 6
+r15w, Reg16, RegRex, 7
+// 32 bit regs
+eax, Reg32|BaseIndex|Acc, 0, 0
+ecx, Reg32|BaseIndex, 0, 1
+edx, Reg32|BaseIndex, 0, 2
+ebx, Reg32|BaseIndex, 0, 3
+esp, Reg32, 0, 4
+ebp, Reg32|BaseIndex, 0, 5
+esi, Reg32|BaseIndex, 0, 6
+edi, Reg32|BaseIndex, 0, 7
+r8d, Reg32|BaseIndex, RegRex, 0
+r9d, Reg32|BaseIndex, RegRex, 1
+r10d, Reg32|BaseIndex, RegRex, 2
+r11d, Reg32|BaseIndex, RegRex, 3
+r12d, Reg32|BaseIndex, RegRex, 4
+r13d, Reg32|BaseIndex, RegRex, 5
+r14d, Reg32|BaseIndex, RegRex, 6
+r15d, Reg32|BaseIndex, RegRex, 7
+rax, Reg64|BaseIndex|Acc, 0, 0
+rcx, Reg64|BaseIndex, 0, 1
+rdx, Reg64|BaseIndex, 0, 2
+rbx, Reg64|BaseIndex, 0, 3
+rsp, Reg64, 0, 4
+rbp, Reg64|BaseIndex, 0, 5
+rsi, Reg64|BaseIndex, 0, 6
+rdi, Reg64|BaseIndex, 0, 7
+r8, Reg64|BaseIndex, RegRex, 0
+r9, Reg64|BaseIndex, RegRex, 1
+r10, Reg64|BaseIndex, RegRex, 2
+r11, Reg64|BaseIndex, RegRex, 3
+r12, Reg64|BaseIndex, RegRex, 4
+r13, Reg64|BaseIndex, RegRex, 5
+r14, Reg64|BaseIndex, RegRex, 6
+r15, Reg64|BaseIndex, RegRex, 7
+// Segment registers.
+es, SReg2, 0, 0
+cs, SReg2, 0, 1
+ss, SReg2, 0, 2
+ds, SReg2, 0, 3
+fs, SReg3, 0, 4
+gs, SReg3, 0, 5
+// Control registers.
+cr0, Control, 0, 0
+cr1, Control, 0, 1
+cr2, Control, 0, 2
+cr3, Control, 0, 3
+cr4, Control, 0, 4
+cr5, Control, 0, 5
+cr6, Control, 0, 6
+cr7, Control, 0, 7
+cr8, Control, RegRex, 0
+cr9, Control, RegRex, 1
+cr10, Control, RegRex, 2
+cr11, Control, RegRex, 3
+cr12, Control, RegRex, 4
+cr13, Control, RegRex, 5
+cr14, Control, RegRex, 6
+cr15, Control, RegRex, 7
+// Debug registers.
+db0, Debug, 0, 0
+db1, Debug, 0, 1
+db2, Debug, 0, 2
+db3, Debug, 0, 3
+db4, Debug, 0, 4
+db5, Debug, 0, 5
+db6, Debug, 0, 6
+db7, Debug, 0, 7
+db8, Debug, RegRex, 0
+db9, Debug, RegRex, 1
+db10, Debug, RegRex, 2
+db11, Debug, RegRex, 3
+db12, Debug, RegRex, 4
+db13, Debug, RegRex, 5
+db14, Debug, RegRex, 6
+db15, Debug, RegRex, 7
+dr0, Debug, 0, 0
+dr1, Debug, 0, 1
+dr2, Debug, 0, 2
+dr3, Debug, 0, 3
+dr4, Debug, 0, 4
+dr5, Debug, 0, 5
+dr6, Debug, 0, 6
+dr7, Debug, 0, 7
+dr8, Debug, RegRex, 0
+dr9, Debug, RegRex, 1
+dr10, Debug, RegRex, 2
+dr11, Debug, RegRex, 3
+dr12, Debug, RegRex, 4
+dr13, Debug, RegRex, 5
+dr14, Debug, RegRex, 6
+dr15, Debug, RegRex, 7
+// Test registers.
+tr0, Test, 0, 0
+tr1, Test, 0, 1
+tr2, Test, 0, 2
+tr3, Test, 0, 3
+tr4, Test, 0, 4
+tr5, Test, 0, 5
+tr6, Test, 0, 6
+tr7, Test, 0, 7
+// MMX and simd registers.
+mm0, RegMMX, 0, 0
+mm1, RegMMX, 0, 1
+mm2, RegMMX, 0, 2
+mm3, RegMMX, 0, 3
+mm4, RegMMX, 0, 4
+mm5, RegMMX, 0, 5
+mm6, RegMMX, 0, 6
+mm7, RegMMX, 0, 7
+xmm0, RegXMM, 0, 0
+xmm1, RegXMM, 0, 1
+xmm2, RegXMM, 0, 2
+xmm3, RegXMM, 0, 3
+xmm4, RegXMM, 0, 4
+xmm5, RegXMM, 0, 5
+xmm6, RegXMM, 0, 6
+xmm7, RegXMM, 0, 7
+xmm8, RegXMM, RegRex, 0
+xmm9, RegXMM, RegRex, 1
+xmm10, RegXMM, RegRex, 2
+xmm11, RegXMM, RegRex, 3
+xmm12, RegXMM, RegRex, 4
+xmm13, RegXMM, RegRex, 5
+xmm14, RegXMM, RegRex, 6
+xmm15, RegXMM, RegRex, 7
+// No type will make this register rejected for all purposes except
+// for addressing. This saves creating one extra type for RIP.
+rip, BaseIndex, 0, 0
+// fp regs.
+st(0), FloatReg|FloatAcc, 0, 0
+st(1), FloatReg, 0, 1
+st(2), FloatReg, 0, 2
+st(3), FloatReg, 0, 3
+st(4), FloatReg, 0, 4
+st(5), FloatReg, 0, 5
+st(6), FloatReg, 0, 6
+st(7), FloatReg, 0, 7
diff --git a/opcodes/i386-tbl.h b/opcodes/i386-tbl.h
new file mode 100644
index 000000000000..fa843b334736
--- /dev/null
+++ b/opcodes/i386-tbl.h
@@ -0,0 +1,4468 @@
+/* This file is automatically generated by i386-gen. Do not edit! */
+
+/* i386 opcode table. */
+
+const template i386_optab[] =
+{
+ { "mov", 2, 0xa0, None, Cpu64,
+ D|W|No_sSuf|No_xSuf,
+ { Disp64,
+ Acc } },
+ { "mov", 2, 0xa0, None, CpuNo64,
+ D|W|No_sSuf|No_qSuf|No_xSuf,
+ { Disp16|Disp32,
+ Acc } },
+ { "mov", 2, 0x88, None, 0,
+ D|W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "mov", 2, 0xb0, None, 0,
+ W|ShortForm|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Reg8|Reg16|Reg32 } },
+ { "mov", 2, 0xc6, 0x0, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "mov", 2, 0xb0, None, Cpu64,
+ W|ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf,
+ { Imm64,
+ Reg64 } },
+ { "mov", 2, 0x8c, None, 0,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { SReg2,
+ Reg16|Reg32|Reg64|RegMem } },
+ { "mov", 2, 0x8c, None, 0,
+ Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { SReg2,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "mov", 2, 0x8c, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { SReg3,
+ Reg16|Reg32|Reg64|RegMem } },
+ { "mov", 2, 0x8c, None, Cpu386,
+ Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { SReg3,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "mov", 2, 0x8e, None, 0,
+ Modrm|IgnoreSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|Reg32|Reg64,
+ SReg2 } },
+ { "mov", 2, 0x8e, None, 0,
+ Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ SReg2 } },
+ { "mov", 2, 0x8e, None, Cpu386,
+ Modrm|IgnoreSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|Reg32|Reg64,
+ SReg3 } },
+ { "mov", 2, 0x8e, None, Cpu386,
+ Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ SReg3 } },
+ { "mov", 2, 0xf20, None, Cpu386|CpuNo64,
+ D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Control,
+ Reg32|RegMem } },
+ { "mov", 2, 0xf20, None, Cpu64,
+ D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Control,
+ Reg64|RegMem } },
+ { "mov", 2, 0xf21, None, Cpu386|CpuNo64,
+ D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Debug,
+ Reg32|RegMem } },
+ { "mov", 2, 0xf21, None, Cpu64,
+ D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Debug,
+ Reg64|RegMem } },
+ { "mov", 2, 0xf24, None, Cpu386|CpuNo64,
+ D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Test,
+ Reg32|RegMem } },
+ { "movabs", 2, 0xa0, None, Cpu64,
+ D|W|No_sSuf|No_xSuf,
+ { Disp64,
+ Acc } },
+ { "movabs", 2, 0xb0, None, Cpu64,
+ W|ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf,
+ { Imm64,
+ Reg64 } },
+ { "movsbl", 2, 0xfbe, None, Cpu386,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg32 } },
+ { "movsbw", 2, 0xfbe, None, Cpu386,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16 } },
+ { "movswl", 2, 0xfbf, None, Cpu386,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg32 } },
+ { "movsbq", 2, 0xfbe, None, Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg64 } },
+ { "movswq", 2, 0xfbf, None, Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64,
+ { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg64 } },
+ { "movslq", 2, 0x63, None, Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64,
+ { Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg64 } },
+ { "movsx", 2, 0xfbe, None, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "movsx", 2, 0xfbf, None, Cpu386,
+ Modrm|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg32|Reg64 } },
+ { "movsx", 2, 0x63, None, Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|Rex64,
+ { Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg64 } },
+ { "movzb", 2, 0xfb6, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "movzbl", 2, 0xfb6, None, Cpu386,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg32 } },
+ { "movzbw", 2, 0xfb6, None, Cpu386,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16 } },
+ { "movzwl", 2, 0xfb7, None, Cpu386,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg32 } },
+ { "movzbq", 2, 0xfb6, None, Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg64 } },
+ { "movzwq", 2, 0xfb7, None, Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64,
+ { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg64 } },
+ { "movzx", 2, 0xfb6, None, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "movzx", 2, 0xfb7, None, Cpu386,
+ Modrm|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg32|Reg64 } },
+ { "push", 1, 0x50, None, CpuNo64,
+ ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|Reg32|Reg64 } },
+ { "push", 1, 0xff, 0x6, CpuNo64,
+ Modrm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "push", 1, 0x6a, None, Cpu186|CpuNo64,
+ DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8S } },
+ { "push", 1, 0x68, None, Cpu186|CpuNo64,
+ DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm16|Imm32 } },
+ { "push", 1, 0x6, None, CpuNo64,
+ ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { SReg2 } },
+ { "push", 1, 0xfa0, None, Cpu386|CpuNo64,
+ ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { SReg3 } },
+ { "push", 1, 0x50, None, Cpu64,
+ ShortForm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Reg16|Reg64 } },
+ { "push", 1, 0xff, 0x6, Cpu64,
+ Modrm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Reg16|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "push", 1, 0x6a, None, Cpu64,
+ DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Imm8S } },
+ { "push", 1, 0x68, None, Cpu64,
+ DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Imm16|Imm32S } },
+ { "push", 1, 0xfa0, None, Cpu64,
+ ShortForm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { SReg3 } },
+ { "pusha", 0, 0x60, None, Cpu186|CpuNo64,
+ DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "pop", 1, 0x58, None, CpuNo64,
+ ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|Reg32|Reg64 } },
+ { "pop", 1, 0x8f, 0x0, CpuNo64,
+ Modrm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "pop", 1, 0x7, None, CpuNo64,
+ ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { SReg2 } },
+ { "pop", 1, 0xfa1, None, Cpu386|CpuNo64,
+ ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { SReg3 } },
+ { "pop", 1, 0x58, None, Cpu64,
+ ShortForm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Reg16|Reg64 } },
+ { "pop", 1, 0x8f, 0x0, Cpu64,
+ Modrm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Reg16|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "pop", 1, 0xfa1, None, Cpu64,
+ ShortForm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { SReg3 } },
+ { "popa", 0, 0x61, None, Cpu186|CpuNo64,
+ DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "xchg", 2, 0x90, None, 0,
+ ShortForm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64,
+ Acc } },
+ { "xchg", 2, 0x90, None, 0,
+ ShortForm|No_bSuf|No_sSuf|No_xSuf,
+ { Acc,
+ Reg16|Reg32|Reg64 } },
+ { "xchg", 2, 0x86, None, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "xchg", 2, 0x86, None, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg8|Reg16|Reg32|Reg64 } },
+ { "in", 2, 0xe4, None, 0,
+ W|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ Acc } },
+ { "in", 2, 0xec, None, 0,
+ W|No_sSuf|No_qSuf|No_xSuf,
+ { InOutPortReg,
+ Acc } },
+ { "in", 1, 0xe4, None, 0,
+ W|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8 } },
+ { "in", 1, 0xec, None, 0,
+ W|No_sSuf|No_qSuf|No_xSuf,
+ { InOutPortReg } },
+ { "out", 2, 0xe6, None, 0,
+ W|No_sSuf|No_qSuf|No_xSuf,
+ { Acc,
+ Imm8 } },
+ { "out", 2, 0xee, None, 0,
+ W|No_sSuf|No_qSuf|No_xSuf,
+ { Acc,
+ InOutPortReg } },
+ { "out", 1, 0xe6, None, 0,
+ W|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8 } },
+ { "out", 1, 0xee, None, 0,
+ W|No_sSuf|No_qSuf|No_xSuf,
+ { InOutPortReg } },
+ { "lea", 2, 0x8d, None, 0,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "lds", 2, 0xc5, None, CpuNo64,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "les", 2, 0xc4, None, CpuNo64,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "lfs", 2, 0xfb4, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "lgs", 2, 0xfb5, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "lss", 2, 0xfb2, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "clc", 0, 0xf8, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cld", 0, 0xfc, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cli", 0, 0xfa, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "clts", 0, 0xf06, None, Cpu286,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cmc", 0, 0xf5, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "lahf", 0, 0x9f, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "sahf", 0, 0x9e, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "pushf", 0, 0x9c, None, CpuNo64,
+ DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "pushf", 0, 0x9c, None, Cpu64,
+ DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { 0 } },
+ { "popf", 0, 0x9d, None, CpuNo64,
+ DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "popf", 0, 0x9d, None, Cpu64,
+ DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { 0 } },
+ { "stc", 0, 0xf9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "std", 0, 0xfd, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "sti", 0, 0xfb, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "add", 2, 0x0, None, 0,
+ D|W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "add", 2, 0x83, 0x0, 0,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8S,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "add", 2, 0x4, None, 0,
+ W|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Acc } },
+ { "add", 2, 0x80, 0x0, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "inc", 1, 0x40, None, CpuNo64,
+ ShortForm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|Reg32|Reg64 } },
+ { "inc", 1, 0xfe, 0x0, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sub", 2, 0x28, None, 0,
+ D|W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sub", 2, 0x83, 0x5, 0,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8S,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sub", 2, 0x2c, None, 0,
+ W|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Acc } },
+ { "sub", 2, 0x80, 0x5, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "dec", 1, 0x48, None, CpuNo64,
+ ShortForm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|Reg32|Reg64 } },
+ { "dec", 1, 0xfe, 0x1, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sbb", 2, 0x18, None, 0,
+ D|W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sbb", 2, 0x83, 0x3, 0,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8S,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sbb", 2, 0x1c, None, 0,
+ W|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Acc } },
+ { "sbb", 2, 0x80, 0x3, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "cmp", 2, 0x38, None, 0,
+ D|W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "cmp", 2, 0x83, 0x7, 0,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8S,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "cmp", 2, 0x3c, None, 0,
+ W|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Acc } },
+ { "cmp", 2, 0x80, 0x7, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "test", 2, 0x84, None, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "test", 2, 0x84, None, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg8|Reg16|Reg32|Reg64 } },
+ { "test", 2, 0xa8, None, 0,
+ W|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Acc } },
+ { "test", 2, 0xf6, 0x0, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "and", 2, 0x20, None, 0,
+ D|W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "and", 2, 0x83, 0x4, 0,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8S,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "and", 2, 0x24, None, 0,
+ W|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Acc } },
+ { "and", 2, 0x80, 0x4, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "or", 2, 0x8, None, 0,
+ D|W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "or", 2, 0x83, 0x1, 0,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8S,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "or", 2, 0xc, None, 0,
+ W|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Acc } },
+ { "or", 2, 0x80, 0x1, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "xor", 2, 0x30, None, 0,
+ D|W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "xor", 2, 0x83, 0x6, 0,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8S,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "xor", 2, 0x34, None, 0,
+ W|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Acc } },
+ { "xor", 2, 0x80, 0x6, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "clr", 1, 0x30, None, 0,
+ W|Modrm|No_sSuf|No_xSuf|RegKludge,
+ { Reg8|Reg16|Reg32|Reg64 } },
+ { "adc", 2, 0x10, None, 0,
+ D|W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "adc", 2, 0x83, 0x2, 0,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8S,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "adc", 2, 0x14, None, 0,
+ W|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Acc } },
+ { "adc", 2, 0x80, 0x2, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8|Imm16|Imm32|Imm32S,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "neg", 1, 0xf6, 0x3, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "not", 1, 0xf6, 0x2, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "aaa", 0, 0x37, None, CpuNo64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "aas", 0, 0x3f, None, CpuNo64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "daa", 0, 0x27, None, CpuNo64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "das", 0, 0x2f, None, CpuNo64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "aad", 0, 0xd50a, None, CpuNo64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "aad", 1, 0xd5, None, CpuNo64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8 } },
+ { "aam", 0, 0xd40a, None, CpuNo64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "aam", 1, 0xd4, None, CpuNo64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8 } },
+ { "cbw", 0, 0x98, None, 0,
+ Size16|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cdqe", 0, 0x98, None, Cpu64,
+ Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cwde", 0, 0x98, None, 0,
+ Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cwd", 0, 0x99, None, 0,
+ Size16|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cdq", 0, 0x99, None, 0,
+ Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cqo", 0, 0x99, None, Cpu64,
+ Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cbtw", 0, 0x98, None, 0,
+ Size16|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cltq", 0, 0x98, None, Cpu64,
+ Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cwtl", 0, 0x98, None, 0,
+ Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cwtd", 0, 0x99, None, 0,
+ Size16|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cltd", 0, 0x99, None, 0,
+ Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cqto", 0, 0x99, None, Cpu64,
+ Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "mul", 1, 0xf6, 0x4, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "imul", 1, 0xf6, 0x5, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "imul", 2, 0xfaf, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "imul", 3, 0x6b, None, Cpu186,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8S,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "imul", 3, 0x69, None, Cpu186,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm16|Imm32|Imm32S,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "imul", 2, 0x6b, None, Cpu186,
+ Modrm|No_bSuf|No_sSuf|No_xSuf|RegKludge,
+ { Imm8S,
+ Reg16|Reg32|Reg64 } },
+ { "imul", 2, 0x69, None, Cpu186,
+ Modrm|No_bSuf|No_sSuf|No_xSuf|RegKludge,
+ { Imm16|Imm32|Imm32S,
+ Reg16|Reg32|Reg64 } },
+ { "div", 1, 0xf6, 0x6, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "div", 2, 0xf6, 0x6, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Acc } },
+ { "idiv", 1, 0xf6, 0x7, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "idiv", 2, 0xf6, 0x7, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Acc } },
+ { "rol", 2, 0xd0, 0x0, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm1,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "rol", 2, 0xc0, 0x0, Cpu186,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "rol", 2, 0xd2, 0x0, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { ShiftCount,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "rol", 1, 0xd0, 0x0, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "ror", 2, 0xd0, 0x1, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm1,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "ror", 2, 0xc0, 0x1, Cpu186,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "ror", 2, 0xd2, 0x1, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { ShiftCount,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "ror", 1, 0xd0, 0x1, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "rcl", 2, 0xd0, 0x2, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm1,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "rcl", 2, 0xc0, 0x2, Cpu186,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "rcl", 2, 0xd2, 0x2, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { ShiftCount,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "rcl", 1, 0xd0, 0x2, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "rcr", 2, 0xd0, 0x3, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm1,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "rcr", 2, 0xc0, 0x3, Cpu186,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "rcr", 2, 0xd2, 0x3, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { ShiftCount,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "rcr", 1, 0xd0, 0x3, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sal", 2, 0xd0, 0x4, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm1,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sal", 2, 0xc0, 0x4, Cpu186,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sal", 2, 0xd2, 0x4, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { ShiftCount,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sal", 1, 0xd0, 0x4, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shl", 2, 0xd0, 0x4, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm1,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shl", 2, 0xc0, 0x4, Cpu186,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shl", 2, 0xd2, 0x4, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { ShiftCount,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shl", 1, 0xd0, 0x4, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shr", 2, 0xd0, 0x5, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm1,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shr", 2, 0xc0, 0x5, Cpu186,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shr", 2, 0xd2, 0x5, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { ShiftCount,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shr", 1, 0xd0, 0x5, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sar", 2, 0xd0, 0x7, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm1,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sar", 2, 0xc0, 0x7, Cpu186,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sar", 2, 0xd2, 0x7, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { ShiftCount,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sar", 1, 0xd0, 0x7, 0,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shld", 3, 0xfa4, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg16|Reg32|Reg64,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shld", 3, 0xfa5, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { ShiftCount,
+ Reg16|Reg32|Reg64,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shld", 2, 0xfa5, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shrd", 3, 0xfac, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg16|Reg32|Reg64,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shrd", 3, 0xfad, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { ShiftCount,
+ Reg16|Reg32|Reg64,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "shrd", 2, 0xfad, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "call", 1, 0xe8, None, CpuNo64,
+ JumpDword|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp16|Disp32 } },
+ { "call", 1, 0xe8, None, Cpu64,
+ JumpDword|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Disp16|Disp32 } },
+ { "call", 1, 0xff, 0x2, CpuNo64,
+ Modrm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute } },
+ { "call", 1, 0xff, 0x2, Cpu64,
+ Modrm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Reg16|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute } },
+ { "call", 2, 0x9a, None, CpuNo64,
+ JumpInterSegment|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm16,
+ Imm16|Imm32 } },
+ { "call", 1, 0xff, 0x3, 0,
+ Modrm|DefaultSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute } },
+ { "lcall", 2, 0x9a, None, CpuNo64,
+ JumpInterSegment|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm16,
+ Imm16|Imm32 } },
+ { "lcall", 1, 0xff, 0x3, 0,
+ Modrm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute } },
+ { "jmp", 1, 0xeb, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jmp", 1, 0xff, 0x4, CpuNo64,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute } },
+ { "jmp", 1, 0xff, 0x4, Cpu64,
+ Modrm|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Reg16|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute } },
+ { "jmp", 2, 0xea, None, CpuNo64,
+ JumpInterSegment|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm16,
+ Imm16|Imm32 } },
+ { "jmp", 1, 0xff, 0x5, 0,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute } },
+ { "ljmp", 2, 0xea, None, CpuNo64,
+ JumpInterSegment|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm16,
+ Imm16|Imm32 } },
+ { "ljmp", 1, 0xff, 0x5, 0,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute } },
+ { "ret", 0, 0xc3, None, CpuNo64,
+ DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "ret", 1, 0xc2, None, CpuNo64,
+ DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm16 } },
+ { "ret", 0, 0xc3, None, Cpu64,
+ DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { 0 } },
+ { "ret", 1, 0xc2, None, Cpu64,
+ DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Imm16 } },
+ { "lret", 0, 0xcb, None, 0,
+ DefaultSize|No_bSuf|No_sSuf|No_xSuf,
+ { 0 } },
+ { "lret", 1, 0xca, None, 0,
+ DefaultSize|No_bSuf|No_sSuf|No_xSuf,
+ { Imm16 } },
+ { "enter", 2, 0xc8, None, Cpu186|CpuNo64,
+ DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm16,
+ Imm8 } },
+ { "enter", 2, 0xc8, None, Cpu64,
+ DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Imm16,
+ Imm8 } },
+ { "leave", 0, 0xc9, None, Cpu186|CpuNo64,
+ DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "leave", 0, 0xc9, None, Cpu64,
+ DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { 0 } },
+ { "jo", 1, 0x70, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jno", 1, 0x71, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jb", 1, 0x72, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jc", 1, 0x72, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jnae", 1, 0x72, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jnb", 1, 0x73, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jnc", 1, 0x73, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jae", 1, 0x73, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "je", 1, 0x74, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jz", 1, 0x74, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jne", 1, 0x75, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jnz", 1, 0x75, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jbe", 1, 0x76, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jna", 1, 0x76, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jnbe", 1, 0x77, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "ja", 1, 0x77, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "js", 1, 0x78, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jns", 1, 0x79, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jp", 1, 0x7a, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jpe", 1, 0x7a, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jnp", 1, 0x7b, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jpo", 1, 0x7b, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jl", 1, 0x7c, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jnge", 1, 0x7c, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jnl", 1, 0x7d, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jge", 1, 0x7d, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jle", 1, 0x7e, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jng", 1, 0x7e, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jnle", 1, 0x7f, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jg", 1, 0x7f, None, 0,
+ Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jcxz", 1, 0xe3, None, CpuNo64,
+ JumpByte|Size16|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jecxz", 1, 0xe3, None, CpuNo64,
+ JumpByte|Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jecxz", 1, 0x67e3, None, Cpu64,
+ JumpByte|Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "jrcxz", 1, 0xe3, None, Cpu64,
+ JumpByte|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "loop", 1, 0xe2, None, CpuNo64,
+ JumpByte|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "loop", 1, 0xe2, None, Cpu64,
+ JumpByte|No_bSuf|No_wSuf|No_sSuf|No_xSuf|NoRex64,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "loopz", 1, 0xe1, None, CpuNo64,
+ JumpByte|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "loopz", 1, 0xe1, None, Cpu64,
+ JumpByte|No_bSuf|No_wSuf|No_sSuf|No_xSuf|NoRex64,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "loope", 1, 0xe1, None, CpuNo64,
+ JumpByte|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "loope", 1, 0xe1, None, Cpu64,
+ JumpByte|No_bSuf|No_wSuf|No_sSuf|No_xSuf|NoRex64,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "loopnz", 1, 0xe0, None, CpuNo64,
+ JumpByte|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "loopnz", 1, 0xe0, None, Cpu64,
+ JumpByte|No_bSuf|No_wSuf|No_sSuf|No_xSuf|NoRex64,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "loopne", 1, 0xe0, None, CpuNo64,
+ JumpByte|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "loopne", 1, 0xe0, None, Cpu64,
+ JumpByte|No_bSuf|No_wSuf|No_sSuf|No_xSuf|NoRex64,
+ { Disp8|Disp16|Disp32|Disp32S|Disp64 } },
+ { "seto", 1, 0xf90, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setno", 1, 0xf91, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setb", 1, 0xf92, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setc", 1, 0xf92, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setnae", 1, 0xf92, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setnb", 1, 0xf93, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setnc", 1, 0xf93, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setae", 1, 0xf93, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sete", 1, 0xf94, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setz", 1, 0xf94, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setne", 1, 0xf95, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setnz", 1, 0xf95, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setbe", 1, 0xf96, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setna", 1, 0xf96, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setnbe", 1, 0xf97, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "seta", 1, 0xf97, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sets", 1, 0xf98, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setns", 1, 0xf99, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setp", 1, 0xf9a, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setpe", 1, 0xf9a, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setnp", 1, 0xf9b, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setpo", 1, 0xf9b, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setl", 1, 0xf9c, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setnge", 1, 0xf9c, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setnl", 1, 0xf9d, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setge", 1, 0xf9d, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setle", 1, 0xf9e, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setng", 1, 0xf9e, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setnle", 1, 0xf9f, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "setg", 1, 0xf9f, 0x0, Cpu386,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "cmps", 0, 0xa6, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { 0 } },
+ { "cmps", 2, 0xa6, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "scmp", 0, 0xa6, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { 0 } },
+ { "scmp", 2, 0xa6, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "ins", 0, 0x6c, None, Cpu186,
+ W|No_sSuf|No_qSuf|No_xSuf|IsString,
+ { 0 } },
+ { "ins", 2, 0x6c, None, Cpu186,
+ W|No_sSuf|No_qSuf|No_xSuf|IsString,
+ { InOutPortReg,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg } },
+ { "outs", 0, 0x6e, None, Cpu186,
+ W|No_sSuf|No_qSuf|No_xSuf|IsString,
+ { 0 } },
+ { "outs", 2, 0x6e, None, Cpu186,
+ W|No_sSuf|No_qSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ InOutPortReg } },
+ { "lods", 0, 0xac, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { 0 } },
+ { "lods", 1, 0xac, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "lods", 2, 0xac, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Acc } },
+ { "slod", 0, 0xac, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { 0 } },
+ { "slod", 1, 0xac, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "slod", 2, 0xac, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Acc } },
+ { "movs", 0, 0xa4, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { 0 } },
+ { "movs", 2, 0xa4, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg } },
+ { "smov", 0, 0xa4, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { 0 } },
+ { "smov", 2, 0xa4, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg } },
+ { "scas", 0, 0xae, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { 0 } },
+ { "scas", 1, 0xae, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg } },
+ { "scas", 2, 0xae, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg,
+ Acc } },
+ { "ssca", 0, 0xae, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { 0 } },
+ { "ssca", 1, 0xae, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg } },
+ { "ssca", 2, 0xae, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg,
+ Acc } },
+ { "stos", 0, 0xaa, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { 0 } },
+ { "stos", 1, 0xaa, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg } },
+ { "stos", 2, 0xaa, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { Acc,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg } },
+ { "ssto", 0, 0xaa, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { 0 } },
+ { "ssto", 1, 0xaa, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg } },
+ { "ssto", 2, 0xaa, None, 0,
+ W|No_sSuf|No_xSuf|IsString,
+ { Acc,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg } },
+ { "xlat", 0, 0xd7, None, 0,
+ No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString,
+ { 0 } },
+ { "xlat", 1, 0xd7, None, 0,
+ No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "bsf", 2, 0xfbc, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "bsr", 2, 0xfbd, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "bt", 2, 0xfa3, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "bt", 2, 0xfba, 0x4, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "btc", 2, 0xfbb, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "btc", 2, 0xfba, 0x7, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "btr", 2, 0xfb3, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "btr", 2, 0xfba, 0x6, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "bts", 2, 0xfab, None, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "bts", 2, 0xfba, 0x5, Cpu386,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "int", 1, 0xcd, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8 } },
+ { "int3", 0, 0xcc, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "into", 0, 0xce, None, CpuNo64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "iret", 0, 0xcf, None, 0,
+ DefaultSize|No_bSuf|No_sSuf|No_xSuf,
+ { 0 } },
+ { "rsm", 0, 0xfaa, None, Cpu386,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "bound", 2, 0x62, None, Cpu186|CpuNo64,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|Reg32|Reg64,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "hlt", 0, 0xf4, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "nop", 1, 0xf1f, 0x0, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "nop", 0, 0x90, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "arpl", 2, 0x63, None, Cpu286|CpuNo64,
+ Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16,
+ Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "lar", 2, 0xf02, None, Cpu286,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "lgdt", 1, 0xf01, 0x2, Cpu286|CpuNo64,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "lgdt", 1, 0xf01, 0x2, Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "lidt", 1, 0xf01, 0x3, Cpu286|CpuNo64,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "lidt", 1, 0xf01, 0x3, Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "lldt", 1, 0xf00, 0x2, Cpu286,
+ Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "lmsw", 1, 0xf01, 0x6, Cpu286,
+ Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "lsl", 2, 0xf03, None, Cpu286,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "ltr", 1, 0xf00, 0x3, Cpu286,
+ Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sgdt", 1, 0xf01, 0x0, Cpu286|CpuNo64,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sgdt", 1, 0xf01, 0x0, Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sidt", 1, 0xf01, 0x1, Cpu286|CpuNo64,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sidt", 1, 0xf01, 0x1, Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sldt", 1, 0xf00, 0x0, Cpu286,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64 } },
+ { "sldt", 1, 0xf00, 0x0, Cpu286,
+ Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "smsw", 1, 0xf01, 0x4, Cpu286,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64 } },
+ { "smsw", 1, 0xf01, 0x4, Cpu286,
+ Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "str", 1, 0xf00, 0x1, Cpu286,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64 } },
+ { "str", 1, 0xf00, 0x1, Cpu286,
+ Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "verr", 1, 0xf00, 0x4, Cpu286,
+ Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "verw", 1, 0xf00, 0x5, Cpu286,
+ Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fld", 1, 0xd9c0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fld", 1, 0xd9, 0x0, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fld", 1, 0xd9c0, None, 0,
+ ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { FloatReg } },
+ { "fld", 1, 0xdb, 0x5, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fild", 1, 0xdf, 0x0, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fild", 1, 0xdf, 0x5, 0,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fildll", 1, 0xdf, 0x5, 0,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fldt", 1, 0xdb, 0x5, 0,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fbld", 1, 0xdf, 0x4, 0,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fst", 1, 0xddd0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fst", 1, 0xd9, 0x2, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fst", 1, 0xddd0, None, 0,
+ ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { FloatReg } },
+ { "fist", 1, 0xdf, 0x2, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fstp", 1, 0xddd8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fstp", 1, 0xd9, 0x3, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fstp", 1, 0xddd8, None, 0,
+ ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { FloatReg } },
+ { "fstp", 1, 0xdb, 0x7, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fistp", 1, 0xdf, 0x3, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fistp", 1, 0xdf, 0x7, 0,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fistpll", 1, 0xdf, 0x7, 0,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fstpt", 1, 0xdb, 0x7, 0,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fbstp", 1, 0xdf, 0x6, 0,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fxch", 1, 0xd9c8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fxch", 0, 0xd9c9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fcom", 1, 0xd8d0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fcom", 0, 0xd8d1, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fcom", 1, 0xd8, 0x2, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fcom", 1, 0xd8d0, None, 0,
+ ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { FloatReg } },
+ { "ficom", 1, 0xde, 0x2, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fcomp", 1, 0xd8d8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fcomp", 0, 0xd8d9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fcomp", 1, 0xd8, 0x3, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fcomp", 1, 0xd8d8, None, 0,
+ ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { FloatReg } },
+ { "ficomp", 1, 0xde, 0x3, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fcompp", 0, 0xded9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fucom", 1, 0xdde0, None, Cpu286,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fucom", 0, 0xdde1, None, Cpu286,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fucomp", 1, 0xdde8, None, Cpu286,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fucomp", 0, 0xdde9, None, Cpu286,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fucompp", 0, 0xdae9, None, Cpu286,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "ftst", 0, 0xd9e4, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fxam", 0, 0xd9e5, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fld1", 0, 0xd9e8, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fldl2t", 0, 0xd9e9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fldl2e", 0, 0xd9ea, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fldpi", 0, 0xd9eb, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fldlg2", 0, 0xd9ec, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fldln2", 0, 0xd9ed, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fldz", 0, 0xd9ee, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fadd", 2, 0xd8c0, None, 0,
+ ShortForm|FloatD|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fadd", 1, 0xd8c0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+#if SYSV386_COMPAT
+ { "fadd", 0, 0xdec1, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { 0 } },
+#endif
+ { "fadd", 1, 0xd8, 0x0, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fiadd", 1, 0xde, 0x0, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "faddp", 2, 0xdec0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatAcc,
+ FloatReg } },
+ { "faddp", 1, 0xdec0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "faddp", 0, 0xdec1, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "faddp", 2, 0xdec0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { FloatReg,
+ FloatAcc } },
+ { "fsub", 1, 0xd8e0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+#if SYSV386_COMPAT
+ { "fsub", 2, 0xd8e0, None, 0,
+ ShortForm|FloatD|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fsub", 0, 0xdee1, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { 0 } },
+#else
+ { "fsub", 2, 0xd8e0, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm|FloatD|FloatR,
+ { FloatReg,
+ FloatAcc } },
+#endif
+ { "fsub", 1, 0xd8, 0x4, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fisub", 1, 0xde, 0x4, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+#if SYSV386_COMPAT
+ { "fsubp", 2, 0xdee0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatAcc,
+ FloatReg } },
+ { "fsubp", 1, 0xdee0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fsubp", 0, 0xdee1, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+#if OLDGCC_COMPAT
+ { "fsubp", 2, 0xdee0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { FloatReg,
+ FloatAcc } },
+#endif
+#else
+ { "fsubp", 2, 0xdee8, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm,
+ { FloatAcc,
+ FloatReg } },
+ { "fsubp", 1, 0xdee8, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm,
+ { FloatReg } },
+ { "fsubp", 0, 0xdee9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf,
+ { 0 } },
+#endif
+ { "fsubr", 1, 0xd8e8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+#if SYSV386_COMPAT
+ { "fsubr", 2, 0xd8e8, None, 0,
+ ShortForm|FloatD|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fsubr", 0, 0xdee9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { 0 } },
+#else
+ { "fsubr", 2, 0xd8e8, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm|FloatD|FloatR,
+ { FloatReg,
+ FloatAcc } },
+#endif
+ { "fsubr", 1, 0xd8, 0x5, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fisubr", 1, 0xde, 0x5, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+#if SYSV386_COMPAT
+ { "fsubrp", 2, 0xdee8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatAcc,
+ FloatReg } },
+ { "fsubrp", 1, 0xdee8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fsubrp", 0, 0xdee9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+#if OLDGCC_COMPAT
+ { "fsubrp", 2, 0xdee8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { FloatReg,
+ FloatAcc } },
+#endif
+#else
+ { "fsubrp", 2, 0xdee0, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm,
+ { FloatAcc,
+ FloatReg } },
+ { "fsubrp", 1, 0xdee0, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm,
+ { FloatReg } },
+ { "fsubrp", 0, 0xdee1, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf,
+ { 0 } },
+#endif
+ { "fmul", 2, 0xd8c8, None, 0,
+ ShortForm|FloatD|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fmul", 1, 0xd8c8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+#if SYSV386_COMPAT
+ { "fmul", 0, 0xdec9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { 0 } },
+#endif
+ { "fmul", 1, 0xd8, 0x1, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fimul", 1, 0xde, 0x1, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fmulp", 2, 0xdec8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatAcc,
+ FloatReg } },
+ { "fmulp", 1, 0xdec8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fmulp", 0, 0xdec9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fmulp", 2, 0xdec8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { FloatReg,
+ FloatAcc } },
+ { "fdiv", 1, 0xd8f0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+#if SYSV386_COMPAT
+ { "fdiv", 2, 0xd8f0, None, 0,
+ ShortForm|FloatD|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fdiv", 0, 0xdef1, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { 0 } },
+#else
+ { "fdiv", 2, 0xd8f0, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm|FloatD|FloatR,
+ { FloatReg,
+ FloatAcc } },
+#endif
+ { "fdiv", 1, 0xd8, 0x6, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fidiv", 1, 0xde, 0x6, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+#if SYSV386_COMPAT
+ { "fdivp", 2, 0xdef0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatAcc,
+ FloatReg } },
+ { "fdivp", 1, 0xdef0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fdivp", 0, 0xdef1, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+#if OLDGCC_COMPAT
+ { "fdivp", 2, 0xdef0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { FloatReg,
+ FloatAcc } },
+#endif
+#else
+ { "fdivp", 2, 0xdef8, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm,
+ { FloatAcc,
+ FloatReg } },
+ { "fdivp", 1, 0xdef8, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm,
+ { FloatReg } },
+ { "fdivp", 0, 0xdef9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf,
+ { 0 } },
+#endif
+ { "fdivr", 1, 0xd8f8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+#if SYSV386_COMPAT
+ { "fdivr", 2, 0xd8f8, None, 0,
+ ShortForm|FloatD|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fdivr", 0, 0xdef9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { 0 } },
+#else
+ { "fdivr", 2, 0xd8f8, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm|FloatD|FloatR,
+ { FloatReg,
+ FloatAcc } },
+#endif
+ { "fdivr", 1, 0xd8, 0x7, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fidivr", 1, 0xde, 0x7, 0,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+#if SYSV386_COMPAT
+ { "fdivrp", 2, 0xdef8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatAcc,
+ FloatReg } },
+ { "fdivrp", 1, 0xdef8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fdivrp", 0, 0xdef9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+#if OLDGCC_COMPAT
+ { "fdivrp", 2, 0xdef8, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Ugh,
+ { FloatReg,
+ FloatAcc } },
+#endif
+#else
+ { "fdivrp", 2, 0xdef0, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm,
+ { FloatAcc,
+ FloatReg } },
+ { "fdivrp", 1, 0xdef0, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf|ShortForm,
+ { FloatReg } },
+ { "fdivrp", 0, 0xdef1, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf,
+ { 0 } },
+#endif
+ { "f2xm1", 0, 0xd9f0, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fyl2x", 0, 0xd9f1, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fptan", 0, 0xd9f2, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fpatan", 0, 0xd9f3, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fxtract", 0, 0xd9f4, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fprem1", 0, 0xd9f5, None, Cpu286,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fdecstp", 0, 0xd9f6, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fincstp", 0, 0xd9f7, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fprem", 0, 0xd9f8, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fyl2xp1", 0, 0xd9f9, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fsqrt", 0, 0xd9fa, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fsincos", 0, 0xd9fb, None, Cpu286,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "frndint", 0, 0xd9fc, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fscale", 0, 0xd9fd, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fsin", 0, 0xd9fe, None, Cpu286,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fcos", 0, 0xd9ff, None, Cpu286,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fchs", 0, 0xd9e0, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fabs", 0, 0xd9e1, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fninit", 0, 0xdbe3, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "finit", 0, 0xdbe3, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|FWait,
+ { 0 } },
+ { "fldcw", 1, 0xd9, 0x5, 0,
+ Modrm|FloatMF|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fnstcw", 1, 0xd9, 0x7, 0,
+ Modrm|FloatMF|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fstcw", 1, 0xd9, 0x7, 0,
+ Modrm|FloatMF|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|FWait,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fnstsw", 1, 0xdfe0, None, 0,
+ IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Acc } },
+ { "fnstsw", 1, 0xdd, 0x7, 0,
+ Modrm|FloatMF|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fnstsw", 0, 0xdfe0, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fstsw", 1, 0xdfe0, None, 0,
+ IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|FWait,
+ { Acc } },
+ { "fstsw", 1, 0xdd, 0x7, 0,
+ Modrm|FloatMF|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|FWait,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fstsw", 0, 0xdfe0, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|FWait,
+ { 0 } },
+ { "fnclex", 0, 0xdbe2, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fclex", 0, 0xdbe2, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|FWait,
+ { 0 } },
+ { "fnstenv", 1, 0xd9, 0x6, 0,
+ Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fstenv", 1, 0xd9, 0x6, 0,
+ Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_xSuf|FWait,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fldenv", 1, 0xd9, 0x4, 0,
+ Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fnsave", 1, 0xdd, 0x6, 0,
+ Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fsave", 1, 0xdd, 0x6, 0,
+ Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_xSuf|FWait,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "frstor", 1, 0xdd, 0x4, 0,
+ Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "ffree", 1, 0xddc0, None, 0,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "ffreep", 1, 0xdfc0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fnop", 0, 0xd9d0, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fwait", 0, 0x9b, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "addr16", 0, 0x67, None, Cpu386|CpuNo64,
+ Size16|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "addr32", 0, 0x67, None, Cpu386,
+ Size32|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "aword", 0, 0x67, None, Cpu386|CpuNo64,
+ Size16|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "adword", 0, 0x67, None, Cpu386,
+ Size32|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "data16", 0, 0x66, None, Cpu386,
+ Size16|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "data32", 0, 0x66, None, Cpu386|CpuNo64,
+ Size32|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "word", 0, 0x66, None, Cpu386,
+ Size16|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "dword", 0, 0x66, None, Cpu386|CpuNo64,
+ Size32|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "lock", 0, 0xf0, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "wait", 0, 0x9b, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "cs", 0, 0x2e, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "ds", 0, 0x3e, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "es", 0, 0x26, None, CpuNo64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "fs", 0, 0x64, None, Cpu386,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "gs", 0, 0x65, None, Cpu386,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "ss", 0, 0x36, None, CpuNo64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rep", 0, 0xf3, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "repe", 0, 0xf3, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "repz", 0, 0xf3, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "repne", 0, 0xf2, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "repnz", 0, 0xf2, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "ht", 0, 0x3e, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "hnt", 0, 0x2e, None, 0,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex", 0, 0x40, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rexz", 0, 0x41, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rexy", 0, 0x42, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rexyz", 0, 0x43, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rexx", 0, 0x44, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rexxz", 0, 0x45, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rexxy", 0, 0x46, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rexxyz", 0, 0x47, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex64", 0, 0x48, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex64z", 0, 0x49, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex64y", 0, 0x4a, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex64yz", 0, 0x4b, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex64x", 0, 0x4c, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex64xz", 0, 0x4d, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex64xy", 0, 0x4e, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex64xyz", 0, 0x4f, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.b", 0, 0x41, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.x", 0, 0x42, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.xb", 0, 0x43, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.r", 0, 0x44, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.rb", 0, 0x45, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.rx", 0, 0x46, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.rxb", 0, 0x47, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.w", 0, 0x48, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.wb", 0, 0x49, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.wx", 0, 0x4a, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.wxb", 0, 0x4b, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.wr", 0, 0x4c, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.wrb", 0, 0x4d, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.wrx", 0, 0x4e, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "rex.wrxb", 0, 0x4f, None, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsPrefix,
+ { 0 } },
+ { "bswap", 1, 0xfc8, None, Cpu486,
+ ShortForm|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { Reg32|Reg64 } },
+ { "xadd", 2, 0xfc0, None, Cpu486,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "cmpxchg", 2, 0xfb0, None, Cpu486,
+ W|Modrm|No_sSuf|No_xSuf,
+ { Reg8|Reg16|Reg32|Reg64,
+ Reg8|Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "invd", 0, 0xf08, None, Cpu486,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "wbinvd", 0, 0xf09, None, Cpu486,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "invlpg", 1, 0xf01, 0x7, Cpu486,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "cpuid", 0, 0xfa2, None, Cpu486,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "wrmsr", 0, 0xf30, None, Cpu586,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "rdtsc", 0, 0xf31, None, Cpu586,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "rdmsr", 0, 0xf32, None, Cpu586,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cmpxchg8b", 1, 0xfc7, 0x1, Cpu586,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "sysenter", 0, 0xf34, None, Cpu686,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "sysexit", 0, 0xf35, None, Cpu686,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fxsave", 1, 0xfae, 0x0, Cpu686,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fxrstor", 1, 0xfae, 0x1, Cpu686,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "rdpmc", 0, 0xf33, None, Cpu686,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "ud2", 0, 0xf0b, None, Cpu686,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "ud2a", 0, 0xf0b, None, Cpu686,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "ud2b", 0, 0xfb9, None, Cpu686,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "cmovo", 2, 0xf40, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovno", 2, 0xf41, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovb", 2, 0xf42, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovc", 2, 0xf42, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovnae", 2, 0xf42, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovae", 2, 0xf43, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovnc", 2, 0xf43, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovnb", 2, 0xf43, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmove", 2, 0xf44, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovz", 2, 0xf44, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovne", 2, 0xf45, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovnz", 2, 0xf45, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovbe", 2, 0xf46, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovna", 2, 0xf46, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmova", 2, 0xf47, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovnbe", 2, 0xf47, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovs", 2, 0xf48, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovns", 2, 0xf49, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovp", 2, 0xf4a, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovnp", 2, 0xf4b, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovl", 2, 0xf4c, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovnge", 2, 0xf4c, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovge", 2, 0xf4d, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovnl", 2, 0xf4d, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovle", 2, 0xf4e, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovng", 2, 0xf4e, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovg", 2, 0xf4f, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "cmovnle", 2, 0xf4f, None, Cpu686,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "fcmovb", 2, 0xdac0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcmovnae", 2, 0xdac0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcmove", 2, 0xdac8, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcmovbe", 2, 0xdad0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcmovna", 2, 0xdad0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcmovu", 2, 0xdad8, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcmovae", 2, 0xdbc0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcmovnb", 2, 0xdbc0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcmovne", 2, 0xdbc8, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcmova", 2, 0xdbd0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcmovnbe", 2, 0xdbd0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcmovnu", 2, 0xdbd8, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcomi", 2, 0xdbf0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcomi", 0, 0xdbf1, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fcomi", 1, 0xdbf0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fucomi", 2, 0xdbe8, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fucomi", 0, 0xdbe9, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fucomi", 1, 0xdbe8, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fcomip", 2, 0xdff0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcompi", 2, 0xdff0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fcompi", 0, 0xdff1, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fcompi", 1, 0xdff0, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "fucomip", 2, 0xdfe8, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fucompi", 2, 0xdfe8, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg,
+ FloatAcc } },
+ { "fucompi", 0, 0xdfe9, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "fucompi", 1, 0xdfe8, None, Cpu686,
+ ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { FloatReg } },
+ { "movnti", 2, 0xfc3, None, CpuP4,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "clflush", 1, 0xfae, 0x7, CpuP4,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "lfence", 0, 0xfae, 0xe8, CpuP4,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "mfence", 0, 0xfae, 0xf0, CpuP4,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "pause", 0, 0xf390, None, CpuP4,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "emms", 0, 0xf77, None, CpuMMX,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "movd", 2, 0xf6e, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegMMX } },
+ { "movd", 2, 0xf7e, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegMMX,
+ Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movd", 2, 0x660f6e, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "movd", 2, 0x660f7e, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movq", 2, 0xf6f, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "movq", 2, 0xf7f, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64,
+ { RegMMX,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX } },
+ { "movq", 2, 0xf30f7e, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movq", 2, 0x660fd6, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM } },
+ { "movq", 2, 0xf6e, None, Cpu64,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegMMX } },
+ { "movq", 2, 0xf7e, None, Cpu64,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegMMX,
+ Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movq", 2, 0x660f6e, None, Cpu64,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "movq", 2, 0x660f7e, None, Cpu64,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movq", 2, 0xa0, None, Cpu64,
+ D|W|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Disp64,
+ Acc } },
+ { "movq", 2, 0x88, None, Cpu64,
+ D|W|Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg64,
+ Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movq", 2, 0xc6, 0x0, Cpu64,
+ W|Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm32S,
+ Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movq", 2, 0xb0, None, Cpu64,
+ W|ShortForm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm64,
+ Reg64 } },
+ { "movq", 2, 0x8c, None, Cpu64,
+ Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { SReg2|SReg3,
+ Reg64|RegMem } },
+ { "movq", 2, 0x8e, None, Cpu64,
+ Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg64,
+ SReg2|SReg3 } },
+ { "movq", 2, 0xf20, None, Cpu64,
+ D|Modrm|Size64|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64,
+ { Control,
+ Reg64|RegMem } },
+ { "movq", 2, 0xf21, None, Cpu64,
+ D|Modrm|Size64|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64,
+ { Debug,
+ Reg64|RegMem } },
+ { "packssdw", 2, 0xf6b, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "packssdw", 2, 0x660f6b, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "packsswb", 2, 0xf63, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "packsswb", 2, 0x660f63, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "packuswb", 2, 0xf67, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "packuswb", 2, 0x660f67, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "paddb", 2, 0xffc, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "paddb", 2, 0x660ffc, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "paddw", 2, 0xffd, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "paddw", 2, 0x660ffd, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "paddd", 2, 0xffe, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "paddd", 2, 0x660ffe, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "paddq", 2, 0xfd4, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "paddq", 2, 0x660fd4, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "paddsb", 2, 0xfec, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "paddsb", 2, 0x660fec, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "paddsw", 2, 0xfed, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "paddsw", 2, 0x660fed, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "paddusb", 2, 0xfdc, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "paddusb", 2, 0x660fdc, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "paddusw", 2, 0xfdd, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "paddusw", 2, 0x660fdd, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pand", 2, 0xfdb, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pand", 2, 0x660fdb, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pandn", 2, 0xfdf, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pandn", 2, 0x660fdf, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pcmpeqb", 2, 0xf74, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pcmpeqb", 2, 0x660f74, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pcmpeqw", 2, 0xf75, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pcmpeqw", 2, 0x660f75, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pcmpeqd", 2, 0xf76, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pcmpeqd", 2, 0x660f76, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pcmpgtb", 2, 0xf64, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pcmpgtb", 2, 0x660f64, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pcmpgtw", 2, 0xf65, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pcmpgtw", 2, 0x660f65, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pcmpgtd", 2, 0xf66, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pcmpgtd", 2, 0x660f66, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmaddwd", 2, 0xff5, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pmaddwd", 2, 0x660ff5, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmulhw", 2, 0xfe5, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pmulhw", 2, 0x660fe5, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmullw", 2, 0xfd5, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pmullw", 2, 0x660fd5, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "por", 2, 0xfeb, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "por", 2, 0x660feb, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psllw", 2, 0xff1, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psllw", 2, 0x660ff1, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psllw", 2, 0xf71, 0x6, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegMMX } },
+ { "psllw", 2, 0x660f71, 0x6, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM } },
+ { "pslld", 2, 0xff2, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pslld", 2, 0x660ff2, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pslld", 2, 0xf72, 0x6, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegMMX } },
+ { "pslld", 2, 0x660f72, 0x6, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM } },
+ { "psllq", 2, 0xff3, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psllq", 2, 0x660ff3, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psllq", 2, 0xf73, 0x6, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegMMX } },
+ { "psllq", 2, 0x660f73, 0x6, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM } },
+ { "psraw", 2, 0xfe1, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psraw", 2, 0x660fe1, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psraw", 2, 0xf71, 0x4, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegMMX } },
+ { "psraw", 2, 0x660f71, 0x4, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM } },
+ { "psrad", 2, 0xfe2, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psrad", 2, 0x660fe2, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psrad", 2, 0xf72, 0x4, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegMMX } },
+ { "psrad", 2, 0x660f72, 0x4, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM } },
+ { "psrlw", 2, 0xfd1, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psrlw", 2, 0x660fd1, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psrlw", 2, 0xf71, 0x2, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegMMX } },
+ { "psrlw", 2, 0x660f71, 0x2, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM } },
+ { "psrld", 2, 0xfd2, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psrld", 2, 0x660fd2, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psrld", 2, 0xf72, 0x2, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegMMX } },
+ { "psrld", 2, 0x660f72, 0x2, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM } },
+ { "psrlq", 2, 0xfd3, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psrlq", 2, 0x660fd3, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psrlq", 2, 0xf73, 0x2, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegMMX } },
+ { "psrlq", 2, 0x660f73, 0x2, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM } },
+ { "psubb", 2, 0xff8, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psubb", 2, 0x660ff8, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psubw", 2, 0xff9, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psubw", 2, 0x660ff9, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psubd", 2, 0xffa, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psubd", 2, 0x660ffa, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psubq", 2, 0xffb, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psubq", 2, 0x660ffb, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psubsb", 2, 0xfe8, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psubsb", 2, 0x660fe8, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psubsw", 2, 0xfe9, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psubsw", 2, 0x660fe9, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psubusb", 2, 0xfd8, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psubusb", 2, 0x660fd8, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psubusw", 2, 0xfd9, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psubusw", 2, 0x660fd9, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "punpckhbw", 2, 0xf68, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "punpckhbw", 2, 0x660f68, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "punpckhwd", 2, 0xf69, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "punpckhwd", 2, 0x660f69, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "punpckhdq", 2, 0xf6a, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "punpckhdq", 2, 0x660f6a, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "punpcklbw", 2, 0xf60, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "punpcklbw", 2, 0x660f60, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "punpcklwd", 2, 0xf61, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "punpcklwd", 2, 0x660f61, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "punpckldq", 2, 0xf62, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "punpckldq", 2, 0x660f62, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pxor", 2, 0xfef, None, CpuMMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pxor", 2, 0x660fef, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "addps", 2, 0xf58, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "addss", 2, 0xf30f58, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "andnps", 2, 0xf55, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "andps", 2, 0xf54, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpeqps", 2, 0xfc2, 0x0, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpeqss", 2, 0xf30fc2, 0x0, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpleps", 2, 0xfc2, 0x2, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpless", 2, 0xf30fc2, 0x2, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpltps", 2, 0xfc2, 0x1, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpltss", 2, 0xf30fc2, 0x1, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpneqps", 2, 0xfc2, 0x4, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpneqss", 2, 0xf30fc2, 0x4, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpnleps", 2, 0xfc2, 0x6, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpnless", 2, 0xf30fc2, 0x6, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpnltps", 2, 0xfc2, 0x5, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpnltss", 2, 0xf30fc2, 0x5, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpordps", 2, 0xfc2, 0x7, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpordss", 2, 0xf30fc2, 0x7, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpunordps", 2, 0xfc2, 0x3, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpunordss", 2, 0xf30fc2, 0x3, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpps", 3, 0xfc2, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpss", 3, 0xf30fc2, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "comiss", 2, 0xf2f, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cvtpi2ps", 2, 0xf2a, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegXMM } },
+ { "cvtps2pi", 2, 0xf2d, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegMMX } },
+ { "cvtsi2ss", 2, 0xf30f2a, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "cvtss2si", 2, 0xf30f2d, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ Reg32|Reg64 } },
+ { "cvttps2pi", 2, 0xf2c, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegMMX } },
+ { "cvttss2si", 2, 0xf30f2c, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ Reg32|Reg64 } },
+ { "divps", 2, 0xf5e, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "divss", 2, 0xf30f5e, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "ldmxcsr", 1, 0xfae, 0x2, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "maskmovq", 2, 0xff7, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegMMX,
+ RegMMX } },
+ { "maxps", 2, 0xf5f, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "maxss", 2, 0xf30f5f, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "minps", 2, 0xf5d, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "minss", 2, 0xf30f5d, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movaps", 2, 0xf28, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movaps", 2, 0xf29, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM } },
+ { "movhlps", 2, 0xf12, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ RegXMM } },
+ { "movhps", 2, 0xf16, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "movhps", 2, 0xf17, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movlhps", 2, 0xf16, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ RegXMM } },
+ { "movlps", 2, 0xf12, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "movlps", 2, 0xf13, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movmskps", 2, 0xf50, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { RegXMM,
+ Reg32|Reg64 } },
+ { "movntps", 2, 0xf2b, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movntq", 2, 0xfe7, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegMMX,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movntdq", 2, 0x660fe7, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movss", 2, 0xf30f10, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movss", 2, 0xf30f11, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM } },
+ { "movups", 2, 0xf10, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movups", 2, 0xf11, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM } },
+ { "mulps", 2, 0xf59, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "mulss", 2, 0xf30f59, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "orps", 2, 0xf56, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pavgb", 2, 0xfe0, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pavgb", 2, 0x660fe0, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pavgw", 2, 0xfe3, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pavgw", 2, 0x660fe3, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pextrw", 3, 0xfc5, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { Imm8,
+ RegMMX,
+ Reg32|Reg64 } },
+ { "pextrw", 3, 0x660fc5, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { Imm8,
+ RegXMM,
+ Reg32|Reg64 } },
+ { "pextrw", 3, 0x660f3a15, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM,
+ Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "pinsrw", 3, 0xfc4, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegMMX } },
+ { "pinsrw", 3, 0x660fc4, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { Imm8,
+ Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "pmaxsw", 2, 0xfee, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pmaxsw", 2, 0x660fee, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmaxub", 2, 0xfde, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pmaxub", 2, 0x660fde, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pminsw", 2, 0xfea, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pminsw", 2, 0x660fea, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pminub", 2, 0xfda, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pminub", 2, 0x660fda, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmovmskb", 2, 0xfd7, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { RegMMX,
+ Reg32|Reg64 } },
+ { "pmovmskb", 2, 0x660fd7, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { RegXMM,
+ Reg32|Reg64 } },
+ { "pmulhuw", 2, 0xfe4, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pmulhuw", 2, 0x660fe4, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "prefetchnta", 1, 0xf18, 0x0, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "prefetcht0", 1, 0xf18, 0x1, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "prefetcht1", 1, 0xf18, 0x2, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "prefetcht2", 1, 0xf18, 0x3, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "psadbw", 2, 0xff6, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psadbw", 2, 0x660ff6, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pshufw", 3, 0xf70, None, CpuMMX2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "rcpps", 2, 0xf53, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "rcpss", 2, 0xf30f53, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "rsqrtps", 2, 0xf52, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "rsqrtss", 2, 0xf30f52, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "sfence", 0, 0xfae, 0xf8, CpuMMX2,
+ IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "shufps", 3, 0xfc6, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "sqrtps", 2, 0xf51, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "sqrtss", 2, 0xf30f51, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "stmxcsr", 1, 0xfae, 0x3, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "subps", 2, 0xf5c, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "subss", 2, 0xf30f5c, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "ucomiss", 2, 0xf2e, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "unpckhps", 2, 0xf15, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "unpcklps", 2, 0xf14, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "xorps", 2, 0xf57, None, CpuSSE,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "addpd", 2, 0x660f58, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "addsd", 2, 0xf20f58, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "andnpd", 2, 0x660f55, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "andpd", 2, 0x660f54, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpeqpd", 2, 0x660fc2, 0x0, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpeqsd", 2, 0xf20fc2, 0x0, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmplepd", 2, 0x660fc2, 0x2, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmplesd", 2, 0xf20fc2, 0x2, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpltpd", 2, 0x660fc2, 0x1, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpltsd", 2, 0xf20fc2, 0x1, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpneqpd", 2, 0x660fc2, 0x4, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpneqsd", 2, 0xf20fc2, 0x4, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpnlepd", 2, 0x660fc2, 0x6, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpnlesd", 2, 0xf20fc2, 0x6, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpnltpd", 2, 0x660fc2, 0x5, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpnltsd", 2, 0xf20fc2, 0x5, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpordpd", 2, 0x660fc2, 0x7, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpordsd", 2, 0xf20fc2, 0x7, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpunordpd", 2, 0x660fc2, 0x3, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpunordsd", 2, 0xf20fc2, 0x3, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmppd", 3, 0x660fc2, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpsd", 0, 0xa7, None, 0,
+ Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString,
+ { 0 } },
+ { "cmpsd", 2, 0xa7, None, 0,
+ Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg } },
+ { "cmpsd", 3, 0xf20fc2, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "comisd", 2, 0x660f2f, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cvtpi2pd", 2, 0x660f2a, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegXMM } },
+ { "cvtsi2sd", 2, 0xf20f2a, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "divpd", 2, 0x660f5e, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "divsd", 2, 0xf20f5e, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "maxpd", 2, 0x660f5f, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "maxsd", 2, 0xf20f5f, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "minpd", 2, 0x660f5d, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "minsd", 2, 0xf20f5d, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movapd", 2, 0x660f28, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movapd", 2, 0x660f29, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM } },
+ { "movhpd", 2, 0x660f16, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "movhpd", 2, 0x660f17, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movlpd", 2, 0x660f12, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "movlpd", 2, 0x660f13, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movmskpd", 2, 0x660f50, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { RegXMM,
+ Reg32|Reg64 } },
+ { "movntpd", 2, 0x660f2b, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movsd", 0, 0xa5, None, 0,
+ Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString,
+ { 0 } },
+ { "movsd", 2, 0xa5, None, 0,
+ Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg } },
+ { "movsd", 2, 0xf20f10, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movsd", 2, 0xf20f11, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM } },
+ { "movupd", 2, 0x660f10, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movupd", 2, 0x660f11, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM } },
+ { "mulpd", 2, 0x660f59, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "mulsd", 2, 0xf20f59, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "orpd", 2, 0x660f56, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "shufpd", 3, 0x660fc6, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "sqrtpd", 2, 0x660f51, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "sqrtsd", 2, 0xf20f51, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "subpd", 2, 0x660f5c, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "subsd", 2, 0xf20f5c, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "ucomisd", 2, 0x660f2e, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "unpckhpd", 2, 0x660f15, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "unpcklpd", 2, 0x660f14, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "xorpd", 2, 0x660f57, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cvtdq2pd", 2, 0xf30fe6, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cvtpd2dq", 2, 0xf20fe6, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cvtdq2ps", 2, 0xf5b, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cvtpd2pi", 2, 0x660f2d, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegMMX } },
+ { "cvtpd2ps", 2, 0x660f5a, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cvtps2pd", 2, 0xf5a, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cvtps2dq", 2, 0x660f5b, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cvtsd2si", 2, 0xf20f2d, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ Reg32|Reg64 } },
+ { "cvtsd2ss", 2, 0xf20f5a, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cvtss2sd", 2, 0xf30f5a, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cvttpd2pi", 2, 0x660f2c, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegMMX } },
+ { "cvttsd2si", 2, 0xf20f2c, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ Reg32|Reg64 } },
+ { "cvttpd2dq", 2, 0x660fe6, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cvttps2dq", 2, 0xf30f5b, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "maskmovdqu", 2, 0x660ff7, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ RegXMM } },
+ { "movdqa", 2, 0x660f6f, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movdqa", 2, 0x660f7f, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM } },
+ { "movdqu", 2, 0xf30f6f, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movdqu", 2, 0xf30f7f, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM } },
+ { "movdq2q", 2, 0xf20fd6, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ RegMMX } },
+ { "movq2dq", 2, 0xf30fd6, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegMMX,
+ RegXMM } },
+ { "pmuludq", 2, 0xff4, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pmuludq", 2, 0x660ff4, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pshufd", 3, 0x660f70, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pshufhw", 3, 0xf30f70, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pshuflw", 3, 0xf20f70, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pslldq", 2, 0x660f73, 0x7, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM } },
+ { "psrldq", 2, 0x660f73, 0x3, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM } },
+ { "punpckhqdq", 2, 0x660f6d, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "punpcklqdq", 2, 0x660f6c, None, CpuSSE2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "addsubpd", 2, 0x660fd0, None, CpuSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "addsubps", 2, 0xf20fd0, None, CpuSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "cmpxchg16b", 1, 0xfc7, 0x1, CpuSSE3|Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fisttp", 1, 0xdf, 0x1, CpuSSE3,
+ Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fisttp", 1, 0xdd, 0x1, CpuSSE3,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "fisttpll", 1, 0xdd, 0x1, CpuSSE3,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "haddpd", 2, 0x660f7c, None, CpuSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "haddps", 2, 0xf20f7c, None, CpuSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "hsubpd", 2, 0x660f7d, None, CpuSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "hsubps", 2, 0xf20f7d, None, CpuSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "lddqu", 2, 0xf20ff0, None, CpuSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "monitor", 0, 0xf01, 0xc8, CpuSSE3,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "monitor", 3, 0xf01, 0xc8, CpuSSE3|CpuNo64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { Reg16|Reg32,
+ Reg32,
+ Reg32 } },
+ { "monitor", 3, 0xf01, 0xc8, CpuSSE3|Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt|NoRex64,
+ { Reg32|Reg64,
+ Reg64,
+ Reg64 } },
+ { "movddup", 2, 0xf20f12, None, CpuSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movshdup", 2, 0xf30f16, None, CpuSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movsldup", 2, 0xf30f12, None, CpuSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "mwait", 0, 0xf01, 0xc9, CpuSSE3,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "mwait", 2, 0xf01, 0xc9, CpuSSE3|CpuNo64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { Reg32,
+ Reg32 } },
+ { "mwait", 2, 0xf01, 0xc9, CpuSSE3|Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt|NoRex64,
+ { Reg64,
+ Reg64 } },
+ { "vmcall", 0, 0xf01, 0xc1, CpuVMX,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "vmclear", 1, 0x660fc7, 0x6, CpuVMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "vmlaunch", 0, 0xf01, 0xc2, CpuVMX,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "vmresume", 0, 0xf01, 0xc3, CpuVMX,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "vmptrld", 1, 0xfc7, 0x6, CpuVMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "vmptrst", 1, 0xfc7, 0x7, CpuVMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "vmread", 2, 0xf78, None, CpuVMX|CpuNo64,
+ Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg32,
+ Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "vmread", 2, 0xf78, None, CpuVMX|Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Reg64,
+ Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "vmwrite", 2, 0xf79, None, CpuVMX|CpuNo64,
+ Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg32 } },
+ { "vmwrite", 2, 0xf79, None, CpuVMX|Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64,
+ { Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg64 } },
+ { "vmxoff", 0, 0xf01, 0xc4, CpuVMX,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "vmxon", 1, 0xf30fc7, 0x6, CpuVMX,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "phaddw", 2, 0xf3801, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "phaddw", 2, 0x660f3801, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "phaddd", 2, 0xf3802, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "phaddd", 2, 0x660f3802, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "phaddsw", 2, 0xf3803, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "phaddsw", 2, 0x660f3803, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "phsubw", 2, 0xf3805, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "phsubw", 2, 0x660f3805, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "phsubd", 2, 0xf3806, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "phsubd", 2, 0x660f3806, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "phsubsw", 2, 0xf3807, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "phsubsw", 2, 0x660f3807, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmaddubsw", 2, 0xf3804, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pmaddubsw", 2, 0x660f3804, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmulhrsw", 2, 0xf380b, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pmulhrsw", 2, 0x660f380b, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pshufb", 2, 0xf3800, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pshufb", 2, 0x660f3800, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psignb", 2, 0xf3808, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psignb", 2, 0x660f3808, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psignw", 2, 0xf3809, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psignw", 2, 0x660f3809, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "psignd", 2, 0xf380a, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "psignd", 2, 0x660f380a, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "palignr", 3, 0xf3a0f, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "palignr", 3, 0x660f3a0f, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pabsb", 2, 0xf381c, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pabsb", 2, 0x660f381c, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pabsw", 2, 0xf381d, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pabsw", 2, 0x660f381d, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pabsd", 2, 0xf381e, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pabsd", 2, 0x660f381e, None, CpuSSSE3,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "blendpd", 3, 0x660f3a0d, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "blendps", 3, 0x660f3a0c, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "blendvpd", 3, 0x660f3815, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|RegKludge,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "blendvps", 3, 0x660f3814, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|RegKludge,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "dppd", 3, 0x660f3a41, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "dpps", 3, 0x660f3a40, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "extractps", 3, 0x660f3a17, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM,
+ Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "insertps", 3, 0x660f3a21, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "movntdqa", 2, 0x660f382a, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "mpsadbw", 3, 0x660f3a42, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "packusdw", 2, 0x660f382b, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pblendvb", 3, 0x660f3810, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|RegKludge,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pblendw", 3, 0x660f3a0e, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pcmpeqq", 2, 0x660f3829, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pextrb", 3, 0x660f3a14, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM,
+ Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "pextrd", 3, 0x660f3a16, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM,
+ Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "pextrq", 3, 0x660f3a16, None, CpuSSE4_1|Cpu64,
+ Modrm|Size64|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ RegXMM,
+ Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "phminposuw", 2, 0x660f3841, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pinsrb", 3, 0x660f3a20, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "pinsrd", 3, 0x660f3a22, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "pinsrq", 3, 0x660f3a22, None, CpuSSE4_1|Cpu64,
+ Modrm|Size64|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ RegXMM } },
+ { "pmaxsb", 2, 0x660f383c, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmaxsd", 2, 0x660f383d, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmaxud", 2, 0x660f383f, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmaxuw", 2, 0x660f383e, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pminsb", 2, 0x660f3838, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pminsd", 2, 0x660f3839, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pminud", 2, 0x660f383b, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pminuw", 2, 0x660f383a, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmovsxbw", 2, 0x660f3820, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmovsxbd", 2, 0x660f3821, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmovsxbq", 2, 0x660f3822, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmovsxwd", 2, 0x660f3823, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmovsxwq", 2, 0x660f3824, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmovsxdq", 2, 0x660f3825, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmovzxbw", 2, 0x660f3830, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmovzxbd", 2, 0x660f3831, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmovzxbq", 2, 0x660f3832, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmovzxwd", 2, 0x660f3833, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmovzxwq", 2, 0x660f3834, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmovzxdq", 2, 0x660f3835, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmuldq", 2, 0x660f3828, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pmulld", 2, 0x660f3840, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "ptest", 2, 0x660f3817, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "roundpd", 3, 0x660f3a09, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "roundps", 3, 0x660f3a08, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "roundsd", 3, 0x660f3a0b, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "roundss", 3, 0x660f3a0a, None, CpuSSE4_1,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pcmpgtq", 2, 0x660f3837, None, CpuSSE4_2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pcmpestri", 3, 0x660f3a61, None, CpuSSE4_2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pcmpestrm", 3, 0x660f3a60, None, CpuSSE4_2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pcmpistri", 3, 0x660f3a63, None, CpuSSE4_2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "pcmpistrm", 3, 0x660f3a62, None, CpuSSE4_2,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM,
+ RegXMM } },
+ { "crc32", 2, 0xf20f38f1, None, CpuSSE4_2,
+ Modrm|No_bSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg16|Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg32 } },
+ { "crc32", 2, 0xf20f38f1, None, CpuSSE4_2|Cpu64,
+ Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|Rex64,
+ { Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg64 } },
+ { "crc32", 2, 0xf20f38f0, None, CpuSSE4_2,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg32 } },
+ { "crc32", 2, 0xf20f38f0, None, CpuSSE4_2|Cpu64,
+ Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|Rex64,
+ { Reg8|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg64 } },
+ { "prefetch", 1, 0xf0d, 0x0, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "prefetchw", 1, 0xf0d, 0x1, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "femms", 0, 0xf0e, None, Cpu3dnow,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "pavgusb", 2, 0xf0f, 0xbf, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pf2id", 2, 0xf0f, 0x1d, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pf2iw", 2, 0xf0f, 0x1c, Cpu3dnowA,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfacc", 2, 0xf0f, 0xae, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfadd", 2, 0xf0f, 0x9e, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfcmpeq", 2, 0xf0f, 0xb0, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfcmpge", 2, 0xf0f, 0x90, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfcmpgt", 2, 0xf0f, 0xa0, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfmax", 2, 0xf0f, 0xa4, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfmin", 2, 0xf0f, 0x94, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfmul", 2, 0xf0f, 0xb4, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfnacc", 2, 0xf0f, 0x8a, Cpu3dnowA,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfpnacc", 2, 0xf0f, 0x8e, Cpu3dnowA,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfrcp", 2, 0xf0f, 0x96, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfrcpit1", 2, 0xf0f, 0xa6, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfrcpit2", 2, 0xf0f, 0xb6, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfrsqit1", 2, 0xf0f, 0xa7, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfrsqrt", 2, 0xf0f, 0x97, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfsub", 2, 0xf0f, 0x9a, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pfsubr", 2, 0xf0f, 0xaa, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pi2fd", 2, 0xf0f, 0xd, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pi2fw", 2, 0xf0f, 0xc, Cpu3dnowA,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pmulhrw", 2, 0xf0f, 0xb7, Cpu3dnow,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "pswapd", 2, 0xf0f, 0xbb, Cpu3dnowA,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX,
+ RegMMX } },
+ { "syscall", 0, 0xf05, None, CpuK6,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { 0 } },
+ { "sysret", 0, 0xf07, None, CpuK6,
+ DefaultSize|No_bSuf|No_wSuf|No_sSuf|No_xSuf,
+ { 0 } },
+ { "swapgs", 0, 0xf01, 0xf8, Cpu64,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "rdtscp", 0, 0xf01, 0xf9, CpuSledgehammer,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "clgi", 0, 0xf01, 0xdd, CpuSVME,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "invlpga", 0, 0xf01, 0xdf, CpuSVME,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "invlpga", 2, 0xf01, 0xdf, CpuSVME,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg32 } },
+ { "skinit", 0, 0xf01, 0xde, CpuSVME,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "skinit", 1, 0xf01, 0xde, CpuSVME,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "stgi", 0, 0xf01, 0xdc, CpuSVME,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "vmload", 0, 0xf01, 0xda, CpuSVME,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "vmload", 1, 0xf01, 0xda, CpuSVME,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "vmmcall", 0, 0xf01, 0xd9, CpuSVME,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "vmrun", 0, 0xf01, 0xd8, CpuSVME,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "vmrun", 1, 0xf01, 0xd8, CpuSVME,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "vmsave", 0, 0xf01, 0xdb, CpuSVME,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { 0 } },
+ { "vmsave", 1, 0xf01, 0xdb, CpuSVME,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt,
+ { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movntsd", 2, 0xf20f2b, None, CpuSSE4a,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "movntss", 2, 0xf30f2b, None, CpuSSE4a,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
+ { "extrq", 3, 0x660f78, 0x0, CpuSSE4a,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ Imm8,
+ RegXMM } },
+ { "extrq", 2, 0x660f79, None, CpuSSE4a,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ RegXMM } },
+ { "insertq", 2, 0xf20f79, None, CpuSSE4a,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { RegXMM,
+ RegXMM } },
+ { "insertq", 4, 0xf20f78, None, CpuSSE4a,
+ Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf,
+ { Imm8,
+ Imm8,
+ RegXMM,
+ RegXMM } },
+ { "popcnt", 2, 0xf30fb8, None, CpuABM|CpuSSE4_2,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "lzcnt", 2, 0xf30fbd, None, CpuABM,
+ Modrm|No_bSuf|No_sSuf|No_xSuf,
+ { Reg16|Reg32|Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S,
+ Reg16|Reg32|Reg64 } },
+ { "xstore-rng", 0, 0xfa7, 0xc0, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xcrypt-ecb", 0, 0xf30fa7, 0xc8, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xcrypt-cbc", 0, 0xf30fa7, 0xd0, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xcrypt-ctr", 0, 0xf30fa7, 0xd8, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xcrypt-cfb", 0, 0xf30fa7, 0xe0, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xcrypt-ofb", 0, 0xf30fa7, 0xe8, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "montmul", 0, 0xf30fa6, 0xc0, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xsha1", 0, 0xf30fa6, 0xc8, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xsha256", 0, 0xf30fa6, 0xd0, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xstorerng", 0, 0xfa7, 0xc0, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xcryptecb", 0, 0xf30fa7, 0xc8, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xcryptcbc", 0, 0xf30fa7, 0xd0, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xcryptctr", 0, 0xf30fa7, 0xd8, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xcryptcfb", 0, 0xf30fa7, 0xe0, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xcryptofb", 0, 0xf30fa7, 0xe8, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { "xstore", 0, 0xfa7, 0xc0, Cpu686|CpuPadLock,
+ No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|IsString|ImmExt,
+ { 0 } },
+ { NULL, 0, 0, 0, 0, 0, { 0 } }
+};
+
+/* i386 register table. */
+
+const reg_entry i386_regtab[] =
+{
+ { "st", FloatReg|FloatAcc, 0, 0 },
+ { "al", Reg8|Acc, 0, 0 },
+ { "cl", Reg8|ShiftCount, 0, 1 },
+ { "dl", Reg8, 0, 2 },
+ { "bl", Reg8, 0, 3 },
+ { "ah", Reg8, 0, 4 },
+ { "ch", Reg8, 0, 5 },
+ { "dh", Reg8, 0, 6 },
+ { "bh", Reg8, 0, 7 },
+ { "axl", Reg8|Acc, RegRex64, 0 },
+ { "cxl", Reg8, RegRex64, 1 },
+ { "dxl", Reg8, RegRex64, 2 },
+ { "bxl", Reg8, RegRex64, 3 },
+ { "spl", Reg8, RegRex64, 4 },
+ { "bpl", Reg8, RegRex64, 5 },
+ { "sil", Reg8, RegRex64, 6 },
+ { "dil", Reg8, RegRex64, 7 },
+ { "r8b", Reg8, RegRex|RegRex64, 0 },
+ { "r9b", Reg8, RegRex|RegRex64, 1 },
+ { "r10b", Reg8, RegRex|RegRex64, 2 },
+ { "r11b", Reg8, RegRex|RegRex64, 3 },
+ { "r12b", Reg8, RegRex|RegRex64, 4 },
+ { "r13b", Reg8, RegRex|RegRex64, 5 },
+ { "r14b", Reg8, RegRex|RegRex64, 6 },
+ { "r15b", Reg8, RegRex|RegRex64, 7 },
+ { "ax", Reg16|Acc, 0, 0 },
+ { "cx", Reg16, 0, 1 },
+ { "dx", Reg16|InOutPortReg, 0, 2 },
+ { "bx", Reg16|BaseIndex, 0, 3 },
+ { "sp", Reg16, 0, 4 },
+ { "bp", Reg16|BaseIndex, 0, 5 },
+ { "si", Reg16|BaseIndex, 0, 6 },
+ { "di", Reg16|BaseIndex, 0, 7 },
+ { "r8w", Reg16, RegRex, 0 },
+ { "r9w", Reg16, RegRex, 1 },
+ { "r10w", Reg16, RegRex, 2 },
+ { "r11w", Reg16, RegRex, 3 },
+ { "r12w", Reg16, RegRex, 4 },
+ { "r13w", Reg16, RegRex, 5 },
+ { "r14w", Reg16, RegRex, 6 },
+ { "r15w", Reg16, RegRex, 7 },
+ { "eax", Reg32|BaseIndex|Acc, 0, 0 },
+ { "ecx", Reg32|BaseIndex, 0, 1 },
+ { "edx", Reg32|BaseIndex, 0, 2 },
+ { "ebx", Reg32|BaseIndex, 0, 3 },
+ { "esp", Reg32, 0, 4 },
+ { "ebp", Reg32|BaseIndex, 0, 5 },
+ { "esi", Reg32|BaseIndex, 0, 6 },
+ { "edi", Reg32|BaseIndex, 0, 7 },
+ { "r8d", Reg32|BaseIndex, RegRex, 0 },
+ { "r9d", Reg32|BaseIndex, RegRex, 1 },
+ { "r10d", Reg32|BaseIndex, RegRex, 2 },
+ { "r11d", Reg32|BaseIndex, RegRex, 3 },
+ { "r12d", Reg32|BaseIndex, RegRex, 4 },
+ { "r13d", Reg32|BaseIndex, RegRex, 5 },
+ { "r14d", Reg32|BaseIndex, RegRex, 6 },
+ { "r15d", Reg32|BaseIndex, RegRex, 7 },
+ { "rax", Reg64|BaseIndex|Acc, 0, 0 },
+ { "rcx", Reg64|BaseIndex, 0, 1 },
+ { "rdx", Reg64|BaseIndex, 0, 2 },
+ { "rbx", Reg64|BaseIndex, 0, 3 },
+ { "rsp", Reg64, 0, 4 },
+ { "rbp", Reg64|BaseIndex, 0, 5 },
+ { "rsi", Reg64|BaseIndex, 0, 6 },
+ { "rdi", Reg64|BaseIndex, 0, 7 },
+ { "r8", Reg64|BaseIndex, RegRex, 0 },
+ { "r9", Reg64|BaseIndex, RegRex, 1 },
+ { "r10", Reg64|BaseIndex, RegRex, 2 },
+ { "r11", Reg64|BaseIndex, RegRex, 3 },
+ { "r12", Reg64|BaseIndex, RegRex, 4 },
+ { "r13", Reg64|BaseIndex, RegRex, 5 },
+ { "r14", Reg64|BaseIndex, RegRex, 6 },
+ { "r15", Reg64|BaseIndex, RegRex, 7 },
+ { "es", SReg2, 0, 0 },
+ { "cs", SReg2, 0, 1 },
+ { "ss", SReg2, 0, 2 },
+ { "ds", SReg2, 0, 3 },
+ { "fs", SReg3, 0, 4 },
+ { "gs", SReg3, 0, 5 },
+ { "cr0", Control, 0, 0 },
+ { "cr1", Control, 0, 1 },
+ { "cr2", Control, 0, 2 },
+ { "cr3", Control, 0, 3 },
+ { "cr4", Control, 0, 4 },
+ { "cr5", Control, 0, 5 },
+ { "cr6", Control, 0, 6 },
+ { "cr7", Control, 0, 7 },
+ { "cr8", Control, RegRex, 0 },
+ { "cr9", Control, RegRex, 1 },
+ { "cr10", Control, RegRex, 2 },
+ { "cr11", Control, RegRex, 3 },
+ { "cr12", Control, RegRex, 4 },
+ { "cr13", Control, RegRex, 5 },
+ { "cr14", Control, RegRex, 6 },
+ { "cr15", Control, RegRex, 7 },
+ { "db0", Debug, 0, 0 },
+ { "db1", Debug, 0, 1 },
+ { "db2", Debug, 0, 2 },
+ { "db3", Debug, 0, 3 },
+ { "db4", Debug, 0, 4 },
+ { "db5", Debug, 0, 5 },
+ { "db6", Debug, 0, 6 },
+ { "db7", Debug, 0, 7 },
+ { "db8", Debug, RegRex, 0 },
+ { "db9", Debug, RegRex, 1 },
+ { "db10", Debug, RegRex, 2 },
+ { "db11", Debug, RegRex, 3 },
+ { "db12", Debug, RegRex, 4 },
+ { "db13", Debug, RegRex, 5 },
+ { "db14", Debug, RegRex, 6 },
+ { "db15", Debug, RegRex, 7 },
+ { "dr0", Debug, 0, 0 },
+ { "dr1", Debug, 0, 1 },
+ { "dr2", Debug, 0, 2 },
+ { "dr3", Debug, 0, 3 },
+ { "dr4", Debug, 0, 4 },
+ { "dr5", Debug, 0, 5 },
+ { "dr6", Debug, 0, 6 },
+ { "dr7", Debug, 0, 7 },
+ { "dr8", Debug, RegRex, 0 },
+ { "dr9", Debug, RegRex, 1 },
+ { "dr10", Debug, RegRex, 2 },
+ { "dr11", Debug, RegRex, 3 },
+ { "dr12", Debug, RegRex, 4 },
+ { "dr13", Debug, RegRex, 5 },
+ { "dr14", Debug, RegRex, 6 },
+ { "dr15", Debug, RegRex, 7 },
+ { "tr0", Test, 0, 0 },
+ { "tr1", Test, 0, 1 },
+ { "tr2", Test, 0, 2 },
+ { "tr3", Test, 0, 3 },
+ { "tr4", Test, 0, 4 },
+ { "tr5", Test, 0, 5 },
+ { "tr6", Test, 0, 6 },
+ { "tr7", Test, 0, 7 },
+ { "mm0", RegMMX, 0, 0 },
+ { "mm1", RegMMX, 0, 1 },
+ { "mm2", RegMMX, 0, 2 },
+ { "mm3", RegMMX, 0, 3 },
+ { "mm4", RegMMX, 0, 4 },
+ { "mm5", RegMMX, 0, 5 },
+ { "mm6", RegMMX, 0, 6 },
+ { "mm7", RegMMX, 0, 7 },
+ { "xmm0", RegXMM, 0, 0 },
+ { "xmm1", RegXMM, 0, 1 },
+ { "xmm2", RegXMM, 0, 2 },
+ { "xmm3", RegXMM, 0, 3 },
+ { "xmm4", RegXMM, 0, 4 },
+ { "xmm5", RegXMM, 0, 5 },
+ { "xmm6", RegXMM, 0, 6 },
+ { "xmm7", RegXMM, 0, 7 },
+ { "xmm8", RegXMM, RegRex, 0 },
+ { "xmm9", RegXMM, RegRex, 1 },
+ { "xmm10", RegXMM, RegRex, 2 },
+ { "xmm11", RegXMM, RegRex, 3 },
+ { "xmm12", RegXMM, RegRex, 4 },
+ { "xmm13", RegXMM, RegRex, 5 },
+ { "xmm14", RegXMM, RegRex, 6 },
+ { "xmm15", RegXMM, RegRex, 7 },
+ { "rip", BaseIndex, 0, 0 },
+ { "st(0)", FloatReg|FloatAcc, 0, 0 },
+ { "st(1)", FloatReg, 0, 1 },
+ { "st(2)", FloatReg, 0, 2 },
+ { "st(3)", FloatReg, 0, 3 },
+ { "st(4)", FloatReg, 0, 4 },
+ { "st(5)", FloatReg, 0, 5 },
+ { "st(6)", FloatReg, 0, 6 },
+ { "st(7)", FloatReg, 0, 7 },
+};
+
+const unsigned int i386_regtab_size = ARRAY_SIZE (i386_regtab);
diff --git a/opcodes/ia64-gen.c b/opcodes/ia64-gen.c
index 556228319a85..b1d0225262ff 100644
--- a/opcodes/ia64-gen.c
+++ b/opcodes/ia64-gen.c
@@ -467,7 +467,7 @@ fetch_insn_class (const char *full_name, int create)
int ind;
int is_class = 0;
- if (strncmp (full_name, "IC:", 3) == 0)
+ if (CONST_STRNEQ (full_name, "IC:"))
{
name = xstrdup (full_name + 3);
is_class = 1;
@@ -749,7 +749,7 @@ parse_resource_users (ref, usersp, nusersp, notesp)
are read. Only create new classes if it's *not* an insn class,
or if it's a composite class (which wouldn't necessarily be in the IC
table). */
- if (strncmp (name, "IC:", 3) != 0 || xsect != NULL)
+ if (! CONST_STRNEQ (name, "IC:") || xsect != NULL)
create = 1;
iclass = fetch_insn_class (name, create);
@@ -1034,7 +1034,7 @@ in_iclass (struct ia64_opcode *idesc, struct iclass *ic,
if (ic->comment)
{
- if (!strncmp (ic->comment, "Format", 6))
+ if (CONST_STRNEQ (ic->comment, "Format"))
{
/* Assume that the first format seen is the most restrictive, and
only keep a later one if it looks like it's more restrictive. */
@@ -1050,7 +1050,7 @@ in_iclass (struct ia64_opcode *idesc, struct iclass *ic,
else
format = ic->comment;
}
- else if (!strncmp (ic->comment, "Field", 5))
+ else if (CONST_STRNEQ (ic->comment, "Field"))
{
if (field)
warn (_("overlapping field %s->%s\n"),
@@ -1064,7 +1064,7 @@ in_iclass (struct ia64_opcode *idesc, struct iclass *ic,
instructions. */
if (ic->nsubs == 0 && ic->nxsubs == 0)
{
- int is_mov = strncmp (idesc->name, "mov", 3) == 0;
+ int is_mov = CONST_STRNEQ (idesc->name, "mov");
int plain_mov = strcmp (idesc->name, "mov") == 0;
int len = strlen(ic->name);
@@ -1123,32 +1123,32 @@ in_iclass (struct ia64_opcode *idesc, struct iclass *ic,
if (resolved && format)
{
- if (strncmp (idesc->name, "dep", 3) == 0
+ if (CONST_STRNEQ (idesc->name, "dep")
&& strstr (format, "I13") != NULL)
resolved = idesc->operands[1] == IA64_OPND_IMM8;
- else if (strncmp (idesc->name, "chk", 3) == 0
+ else if (CONST_STRNEQ (idesc->name, "chk")
&& strstr (format, "M21") != NULL)
resolved = idesc->operands[0] == IA64_OPND_F2;
- else if (strncmp (idesc->name, "lfetch", 6) == 0)
+ else if (CONST_STRNEQ (idesc->name, "lfetch"))
resolved = (strstr (format, "M14 M15") != NULL
&& (idesc->operands[1] == IA64_OPND_R2
|| idesc->operands[1] == IA64_OPND_IMM9b));
- else if (strncmp (idesc->name, "br.call", 7) == 0
+ else if (CONST_STRNEQ (idesc->name, "br.call")
&& strstr (format, "B5") != NULL)
resolved = idesc->operands[1] == IA64_OPND_B2;
- else if (strncmp (idesc->name, "br.call", 7) == 0
+ else if (CONST_STRNEQ (idesc->name, "br.call")
&& strstr (format, "B3") != NULL)
resolved = idesc->operands[1] == IA64_OPND_TGT25c;
- else if (strncmp (idesc->name, "brp", 3) == 0
+ else if (CONST_STRNEQ (idesc->name, "brp")
&& strstr (format, "B7") != NULL)
resolved = idesc->operands[0] == IA64_OPND_B2;
else if (strcmp (ic->name, "invala") == 0)
resolved = strcmp (idesc->name, ic->name) == 0;
- else if (strncmp (idesc->name, "st", 2) == 0
+ else if (CONST_STRNEQ (idesc->name, "st")
&& (strstr (format, "M5") != NULL
|| strstr (format, "M10") != NULL))
resolved = idesc->flags & IA64_OPCODE_POSTINC;
- else if (strncmp (idesc->name, "ld", 2) == 0
+ else if (CONST_STRNEQ (idesc->name, "ld")
&& (strstr (format, "M2 M3") != NULL
|| strstr (format, "M12") != NULL
|| strstr (format, "M7 M8") != NULL))
@@ -1161,7 +1161,7 @@ in_iclass (struct ia64_opcode *idesc, struct iclass *ic,
plain brl matches brl.cond. */
if (!resolved
&& (strcmp (idesc->name, "brl") == 0
- || strncmp (idesc->name, "brl.", 4) == 0)
+ || CONST_STRNEQ (idesc->name, "brl."))
&& strcmp (ic->name, "brl.cond") == 0)
{
resolved = 1;
@@ -1170,7 +1170,7 @@ in_iclass (struct ia64_opcode *idesc, struct iclass *ic,
/* Misc br variations ('.cond' is optional). */
if (!resolved
&& (strcmp (idesc->name, "br") == 0
- || strncmp (idesc->name, "br.", 3) == 0)
+ || CONST_STRNEQ (idesc->name, "br."))
&& strcmp (ic->name, "br.cond") == 0)
{
if (format)
@@ -1183,7 +1183,7 @@ in_iclass (struct ia64_opcode *idesc, struct iclass *ic,
}
/* probe variations. */
- if (!resolved && strncmp (idesc->name, "probe", 5) == 0)
+ if (!resolved && CONST_STRNEQ (idesc->name, "probe"))
{
resolved = strcmp (ic->name, "probe") == 0
&& !((strstr (idesc->name, "fault") != NULL)
@@ -1217,7 +1217,7 @@ in_iclass (struct ia64_opcode *idesc, struct iclass *ic,
}
/* Some variants of mov and mov.[im]. */
- if (!resolved && strncmp (ic->name, "mov_", 4) == 0)
+ if (!resolved && CONST_STRNEQ (ic->name, "mov_"))
resolved = in_iclass_mov_x (idesc, ic, format, field);
}
@@ -1476,13 +1476,13 @@ lookup_specifier (const char *name)
warn (_("Don't know how to specify # dependency %s\n"),
name);
}
- else if (strncmp (name, "AR[FPSR]", 8) == 0)
+ else if (CONST_STRNEQ (name, "AR[FPSR]"))
return IA64_RS_AR_FPSR;
- else if (strncmp (name, "AR[", 3) == 0)
+ else if (CONST_STRNEQ (name, "AR["))
return IA64_RS_ARX;
- else if (strncmp (name, "CR[", 3) == 0)
+ else if (CONST_STRNEQ (name, "CR["))
return IA64_RS_CRX;
- else if (strncmp (name, "PSR.", 4) == 0)
+ else if (CONST_STRNEQ (name, "PSR."))
return IA64_RS_PSR;
else if (strcmp (name, "InService*") == 0)
return IA64_RS_INSERVICE;
@@ -2448,7 +2448,7 @@ insert_opcode_dependencies (opc, cmp)
int j;
if (strcmp (opc->name, "cmp.eq.and") == 0
- && strncmp (rs->name, "PR%", 3) == 0
+ && CONST_STRNEQ (rs->name, "PR%")
&& rs->mode == 1)
no_class_found = 99;
@@ -2459,7 +2459,7 @@ insert_opcode_dependencies (opc, cmp)
if (in_iclass (opc, ics[rs->regs[j]], NULL, NULL, &ic_note))
{
/* We can ignore ic_note 11 for non PR resources. */
- if (ic_note == 11 && strncmp (rs->name, "PR", 2) != 0)
+ if (ic_note == 11 && ! CONST_STRNEQ (rs->name, "PR"))
ic_note = 0;
if (ic_note != 0 && rs->regnotes[j] != 0
@@ -2487,7 +2487,7 @@ insert_opcode_dependencies (opc, cmp)
if (in_iclass (opc, ics[rs->chks[j]], NULL, NULL, &ic_note))
{
/* We can ignore ic_note 11 for non PR resources. */
- if (ic_note == 11 && strncmp (rs->name, "PR", 2) != 0)
+ if (ic_note == 11 && ! CONST_STRNEQ (rs->name, "PR"))
ic_note = 0;
if (ic_note != 0 && rs->chknotes[j] != 0
diff --git a/opcodes/ip2k-asm.c b/opcodes/ip2k-asm.c
index 4a2408ca3d23..2d2b7d42d763 100644
--- a/opcodes/ip2k-asm.c
+++ b/opcodes/ip2k-asm.c
@@ -526,6 +526,9 @@ ip2k_cgen_init_asm (CGEN_CPU_DESC cd)
ip2k_cgen_init_ibld_table (cd);
cd->parse_handlers = & ip2k_cgen_parse_handlers[0];
cd->parse_operand = ip2k_cgen_parse_operand;
+#ifdef CGEN_ASM_INIT_HOOK
+CGEN_ASM_INIT_HOOK
+#endif
}
diff --git a/opcodes/iq2000-asm.c b/opcodes/iq2000-asm.c
index 92590867d14b..0fbc03fd4b9e 100644
--- a/opcodes/iq2000-asm.c
+++ b/opcodes/iq2000-asm.c
@@ -474,6 +474,9 @@ iq2000_cgen_init_asm (CGEN_CPU_DESC cd)
iq2000_cgen_init_ibld_table (cd);
cd->parse_handlers = & iq2000_cgen_parse_handlers[0];
cd->parse_operand = iq2000_cgen_parse_operand;
+#ifdef CGEN_ASM_INIT_HOOK
+CGEN_ASM_INIT_HOOK
+#endif
}
diff --git a/opcodes/m32c-asm.c b/opcodes/m32c-asm.c
index 5af5d75bab46..7d2aac85125a 100644
--- a/opcodes/m32c-asm.c
+++ b/opcodes/m32c-asm.c
@@ -1114,6 +1114,9 @@ m32c_cgen_parse_operand (CGEN_CPU_DESC cd,
case M32C_OPERAND_DSP_40_U16 :
errmsg = parse_unsigned16 (cd, strp, M32C_OPERAND_DSP_40_U16, (unsigned long *) (& fields->f_dsp_40_u16));
break;
+ case M32C_OPERAND_DSP_40_U20 :
+ errmsg = parse_unsigned20 (cd, strp, M32C_OPERAND_DSP_40_U20, (unsigned long *) (& fields->f_dsp_40_u20));
+ break;
case M32C_OPERAND_DSP_40_U24 :
errmsg = parse_unsigned24 (cd, strp, M32C_OPERAND_DSP_40_U24, (unsigned long *) (& fields->f_dsp_40_u24));
break;
@@ -1129,6 +1132,9 @@ m32c_cgen_parse_operand (CGEN_CPU_DESC cd,
case M32C_OPERAND_DSP_48_U16 :
errmsg = parse_unsigned16 (cd, strp, M32C_OPERAND_DSP_48_U16, (unsigned long *) (& fields->f_dsp_48_u16));
break;
+ case M32C_OPERAND_DSP_48_U20 :
+ errmsg = parse_unsigned24 (cd, strp, M32C_OPERAND_DSP_48_U20, (unsigned long *) (& fields->f_dsp_48_u20));
+ break;
case M32C_OPERAND_DSP_48_U24 :
errmsg = parse_unsigned24 (cd, strp, M32C_OPERAND_DSP_48_U24, (unsigned long *) (& fields->f_dsp_48_u24));
break;
@@ -1598,6 +1604,9 @@ m32c_cgen_init_asm (CGEN_CPU_DESC cd)
m32c_cgen_init_ibld_table (cd);
cd->parse_handlers = & m32c_cgen_parse_handlers[0];
cd->parse_operand = m32c_cgen_parse_operand;
+#ifdef CGEN_ASM_INIT_HOOK
+CGEN_ASM_INIT_HOOK
+#endif
}
diff --git a/opcodes/m32c-desc.c b/opcodes/m32c-desc.c
index c87ddc7631e3..75769028e720 100644
--- a/opcodes/m32c-desc.c
+++ b/opcodes/m32c-desc.c
@@ -916,8 +916,10 @@ const CGEN_IFLD m32c_cgen_ifld_table[] =
{ M32C_F_DSP_16_U24, "f-dsp-16-u24", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
{ M32C_F_DSP_24_U24, "f-dsp-24-u24", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
{ M32C_F_DSP_32_U24, "f-dsp-32-u24", 32, 32, 0, 24, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
+ { M32C_F_DSP_40_U20, "f-dsp-40-u20", 32, 32, 8, 20, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
{ M32C_F_DSP_40_U24, "f-dsp-40-u24", 32, 32, 8, 24, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
{ M32C_F_DSP_40_S32, "f-dsp-40-s32", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
+ { M32C_F_DSP_48_U20, "f-dsp-48-u20", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
{ M32C_F_DSP_48_U24, "f-dsp-48-u24", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
{ M32C_F_DSP_16_S32, "f-dsp-16-s32", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
{ M32C_F_DSP_24_S32, "f-dsp-24-s32", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
@@ -968,6 +970,7 @@ const CGEN_MAYBE_MULTI_IFLD M32C_F_DSP_24_S16_MULTI_IFIELD [];
const CGEN_MAYBE_MULTI_IFLD M32C_F_DSP_16_U24_MULTI_IFIELD [];
const CGEN_MAYBE_MULTI_IFLD M32C_F_DSP_24_U24_MULTI_IFIELD [];
const CGEN_MAYBE_MULTI_IFLD M32C_F_DSP_40_S32_MULTI_IFIELD [];
+const CGEN_MAYBE_MULTI_IFLD M32C_F_DSP_48_U20_MULTI_IFIELD [];
const CGEN_MAYBE_MULTI_IFLD M32C_F_DSP_48_U24_MULTI_IFIELD [];
const CGEN_MAYBE_MULTI_IFLD M32C_F_DSP_16_S32_MULTI_IFIELD [];
const CGEN_MAYBE_MULTI_IFLD M32C_F_DSP_24_S32_MULTI_IFIELD [];
@@ -1028,6 +1031,12 @@ const CGEN_MAYBE_MULTI_IFLD M32C_F_DSP_40_S32_MULTI_IFIELD [] =
{ 0, { (const PTR) &m32c_cgen_ifld_table[M32C_F_DSP_64_U8] } },
{ 0, { (const PTR) 0 } }
};
+const CGEN_MAYBE_MULTI_IFLD M32C_F_DSP_48_U20_MULTI_IFIELD [] =
+{
+ { 0, { (const PTR) &m32c_cgen_ifld_table[M32C_F_DSP_48_U16] } },
+ { 0, { (const PTR) &m32c_cgen_ifld_table[M32C_F_DSP_64_U8] } },
+ { 0, { (const PTR) 0 } }
+};
const CGEN_MAYBE_MULTI_IFLD M32C_F_DSP_48_U24_MULTI_IFIELD [] =
{
{ 0, { (const PTR) &m32c_cgen_ifld_table[M32C_F_DSP_48_U16] } },
@@ -1584,6 +1593,10 @@ const CGEN_OPERAND m32c_cgen_operand_table[] =
{ "Dsp-40-s16", M32C_OPERAND_DSP_40_S16, HW_H_SINT, 8, 16,
{ 0, { (const PTR) &m32c_cgen_ifld_table[M32C_F_DSP_40_S16] } },
{ 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
+/* Dsp-40-u20: unsigned 20 bit displacement at offset 40 bits */
+ { "Dsp-40-u20", M32C_OPERAND_DSP_40_U20, HW_H_UINT, 8, 20,
+ { 0, { (const PTR) &m32c_cgen_ifld_table[M32C_F_DSP_40_U20] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
/* Dsp-40-u24: unsigned 24 bit displacement at offset 40 bits */
{ "Dsp-40-u24", M32C_OPERAND_DSP_40_U24, HW_H_UINT, 8, 24,
{ 0, { (const PTR) &m32c_cgen_ifld_table[M32C_F_DSP_40_U24] } },
@@ -1604,6 +1617,10 @@ const CGEN_OPERAND m32c_cgen_operand_table[] =
{ "Dsp-48-s16", M32C_OPERAND_DSP_48_S16, HW_H_SINT, 16, 16,
{ 0, { (const PTR) &m32c_cgen_ifld_table[M32C_F_DSP_48_S16] } },
{ 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
+/* Dsp-48-u20: unsigned 24 bit displacement at offset 40 bits */
+ { "Dsp-48-u20", M32C_OPERAND_DSP_48_U20, HW_H_UINT, 0, 24,
+ { 2, { (const PTR) &M32C_F_DSP_48_U20_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
/* Dsp-48-u24: unsigned 24 bit displacement at offset 48 bits */
{ "Dsp-48-u24", M32C_OPERAND_DSP_48_U24, HW_H_UINT, 0, 24,
{ 2, { (const PTR) &M32C_F_DSP_48_U24_MULTI_IFIELD[0] } },
@@ -1831,15 +1848,15 @@ const CGEN_OPERAND m32c_cgen_operand_table[] =
/* Lab-24-8: 8 bit label */
{ "Lab-24-8", M32C_OPERAND_LAB_24_8, HW_H_IADDR, 24, 8,
{ 0, { (const PTR) &m32c_cgen_ifld_table[M32C_F_LAB_24_8] } },
- { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
+ { 0|A(RELAX)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
/* Lab-32-8: 8 bit label */
{ "Lab-32-8", M32C_OPERAND_LAB_32_8, HW_H_IADDR, 0, 8,
{ 0, { (const PTR) &m32c_cgen_ifld_table[M32C_F_LAB_32_8] } },
- { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
+ { 0|A(RELAX)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
/* Lab-40-8: 8 bit label */
{ "Lab-40-8", M32C_OPERAND_LAB_40_8, HW_H_IADDR, 8, 8,
{ 0, { (const PTR) &m32c_cgen_ifld_table[M32C_F_LAB_40_8] } },
- { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
+ { 0|A(RELAX)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } }, { { RL_TYPE_NONE, 0 } } } } },
/* sbit: negative bit */
{ "sbit", M32C_OPERAND_SBIT, HW_H_SBIT, 0, 0,
{ 0, { (const PTR) 0 } },
@@ -2025,11 +2042,13 @@ const CGEN_OPERAND m32c_cgen_operand_table[] =
/* src16-16-8-FB-relative-QI: m16c dsp:8[fb] relative destination QI */
/* src16-16-8-An-relative-QI: m16c dsp:8[An] relative destination QI */
/* src16-16-16-An-relative-QI: m16c dsp:16[An] relative destination QI */
+/* src16-16-20-An-relative-QI: m16c dsp:20[An] relative destination QI */
/* src16-16-8-SB-relative-HI: m16c dsp:8[sb] relative destination HI */
/* src16-16-16-SB-relative-HI: m16c dsp:16[sb] relative destination HI */
/* src16-16-8-FB-relative-HI: m16c dsp:8[fb] relative destination HI */
/* src16-16-8-An-relative-HI: m16c dsp:8[An] relative destination HI */
/* src16-16-16-An-relative-HI: m16c dsp:16[An] relative destination HI */
+/* src16-16-20-An-relative-HI: m16c dsp:20[An] relative destination HI */
/* src32-16-8-SB-relative-Unprefixed-QI: m32c dsp:8[sb] relative destination QI */
/* src32-16-16-SB-relative-Unprefixed-QI: m32c dsp:16[sb] relative destination QI */
/* src32-16-8-FB-relative-Unprefixed-QI: m32c dsp:8[fb] relative destination QI */
@@ -2134,76 +2153,91 @@ const CGEN_OPERAND m32c_cgen_operand_table[] =
/* dst16-16-8-FB-relative-QI: m16c dsp:8[fb] relative destination QI */
/* dst16-16-8-An-relative-QI: m16c dsp:8[An] relative destination QI */
/* dst16-16-16-An-relative-QI: m16c dsp:16[An] relative destination QI */
+/* dst16-16-20-An-relative-QI: m16c dsp:20[An] relative destination QI */
/* dst16-24-8-SB-relative-QI: m16c dsp:8[sb] relative destination QI */
/* dst16-24-16-SB-relative-QI: m16c dsp:16[sb] relative destination QI */
/* dst16-24-8-FB-relative-QI: m16c dsp:8[fb] relative destination QI */
/* dst16-24-8-An-relative-QI: m16c dsp:8[An] relative destination QI */
/* dst16-24-16-An-relative-QI: m16c dsp:16[An] relative destination QI */
+/* dst16-24-20-An-relative-QI: m16c dsp:20[An] relative destination QI */
/* dst16-32-8-SB-relative-QI: m16c dsp:8[sb] relative destination QI */
/* dst16-32-16-SB-relative-QI: m16c dsp:16[sb] relative destination QI */
/* dst16-32-8-FB-relative-QI: m16c dsp:8[fb] relative destination QI */
/* dst16-32-8-An-relative-QI: m16c dsp:8[An] relative destination QI */
/* dst16-32-16-An-relative-QI: m16c dsp:16[An] relative destination QI */
+/* dst16-32-20-An-relative-QI: m16c dsp:20[An] relative destination QI */
/* dst16-40-8-SB-relative-QI: m16c dsp:8[sb] relative destination QI */
/* dst16-40-16-SB-relative-QI: m16c dsp:16[sb] relative destination QI */
/* dst16-40-8-FB-relative-QI: m16c dsp:8[fb] relative destination QI */
/* dst16-40-8-An-relative-QI: m16c dsp:8[An] relative destination QI */
/* dst16-40-16-An-relative-QI: m16c dsp:16[An] relative destination QI */
+/* dst16-40-20-An-relative-QI: m16c dsp:20[An] relative destination QI */
/* dst16-48-8-SB-relative-QI: m16c dsp:8[sb] relative destination QI */
/* dst16-48-16-SB-relative-QI: m16c dsp:16[sb] relative destination QI */
/* dst16-48-8-FB-relative-QI: m16c dsp:8[fb] relative destination QI */
/* dst16-48-8-An-relative-QI: m16c dsp:8[An] relative destination QI */
/* dst16-48-16-An-relative-QI: m16c dsp:16[An] relative destination QI */
+/* dst16-48-20-An-relative-QI: m16c dsp:20[An] relative destination QI */
/* dst16-16-8-SB-relative-HI: m16c dsp:8[sb] relative destination HI */
/* dst16-16-16-SB-relative-HI: m16c dsp:16[sb] relative destination HI */
/* dst16-16-8-FB-relative-HI: m16c dsp:8[fb] relative destination HI */
/* dst16-16-8-An-relative-HI: m16c dsp:8[An] relative destination HI */
/* dst16-16-16-An-relative-HI: m16c dsp:16[An] relative destination HI */
+/* dst16-16-20-An-relative-HI: m16c dsp:20[An] relative destination HI */
/* dst16-24-8-SB-relative-HI: m16c dsp:8[sb] relative destination HI */
/* dst16-24-16-SB-relative-HI: m16c dsp:16[sb] relative destination HI */
/* dst16-24-8-FB-relative-HI: m16c dsp:8[fb] relative destination HI */
/* dst16-24-8-An-relative-HI: m16c dsp:8[An] relative destination HI */
/* dst16-24-16-An-relative-HI: m16c dsp:16[An] relative destination HI */
+/* dst16-24-20-An-relative-HI: m16c dsp:20[An] relative destination HI */
/* dst16-32-8-SB-relative-HI: m16c dsp:8[sb] relative destination HI */
/* dst16-32-16-SB-relative-HI: m16c dsp:16[sb] relative destination HI */
/* dst16-32-8-FB-relative-HI: m16c dsp:8[fb] relative destination HI */
/* dst16-32-8-An-relative-HI: m16c dsp:8[An] relative destination HI */
/* dst16-32-16-An-relative-HI: m16c dsp:16[An] relative destination HI */
+/* dst16-32-20-An-relative-HI: m16c dsp:20[An] relative destination HI */
/* dst16-40-8-SB-relative-HI: m16c dsp:8[sb] relative destination HI */
/* dst16-40-16-SB-relative-HI: m16c dsp:16[sb] relative destination HI */
/* dst16-40-8-FB-relative-HI: m16c dsp:8[fb] relative destination HI */
/* dst16-40-8-An-relative-HI: m16c dsp:8[An] relative destination HI */
/* dst16-40-16-An-relative-HI: m16c dsp:16[An] relative destination HI */
+/* dst16-40-20-An-relative-HI: m16c dsp:20[An] relative destination HI */
/* dst16-48-8-SB-relative-HI: m16c dsp:8[sb] relative destination HI */
/* dst16-48-16-SB-relative-HI: m16c dsp:16[sb] relative destination HI */
/* dst16-48-8-FB-relative-HI: m16c dsp:8[fb] relative destination HI */
/* dst16-48-8-An-relative-HI: m16c dsp:8[An] relative destination HI */
/* dst16-48-16-An-relative-HI: m16c dsp:16[An] relative destination HI */
+/* dst16-48-20-An-relative-HI: m16c dsp:20[An] relative destination HI */
/* dst16-16-8-SB-relative-SI: m16c dsp:8[sb] relative destination SI */
/* dst16-16-16-SB-relative-SI: m16c dsp:16[sb] relative destination SI */
/* dst16-16-8-FB-relative-SI: m16c dsp:8[fb] relative destination SI */
/* dst16-16-8-An-relative-SI: m16c dsp:8[An] relative destination SI */
/* dst16-16-16-An-relative-SI: m16c dsp:16[An] relative destination SI */
+/* dst16-16-20-An-relative-SI: m16c dsp:20[An] relative destination SI */
/* dst16-24-8-SB-relative-SI: m16c dsp:8[sb] relative destination SI */
/* dst16-24-16-SB-relative-SI: m16c dsp:16[sb] relative destination SI */
/* dst16-24-8-FB-relative-SI: m16c dsp:8[fb] relative destination SI */
/* dst16-24-8-An-relative-SI: m16c dsp:8[An] relative destination SI */
/* dst16-24-16-An-relative-SI: m16c dsp:16[An] relative destination SI */
+/* dst16-24-20-An-relative-SI: m16c dsp:20[An] relative destination SI */
/* dst16-32-8-SB-relative-SI: m16c dsp:8[sb] relative destination SI */
/* dst16-32-16-SB-relative-SI: m16c dsp:16[sb] relative destination SI */
/* dst16-32-8-FB-relative-SI: m16c dsp:8[fb] relative destination SI */
/* dst16-32-8-An-relative-SI: m16c dsp:8[An] relative destination SI */
/* dst16-32-16-An-relative-SI: m16c dsp:16[An] relative destination SI */
+/* dst16-32-20-An-relative-SI: m16c dsp:20[An] relative destination SI */
/* dst16-40-8-SB-relative-SI: m16c dsp:8[sb] relative destination SI */
/* dst16-40-16-SB-relative-SI: m16c dsp:16[sb] relative destination SI */
/* dst16-40-8-FB-relative-SI: m16c dsp:8[fb] relative destination SI */
/* dst16-40-8-An-relative-SI: m16c dsp:8[An] relative destination SI */
/* dst16-40-16-An-relative-SI: m16c dsp:16[An] relative destination SI */
+/* dst16-40-20-An-relative-SI: m16c dsp:20[An] relative destination SI */
/* dst16-48-8-SB-relative-SI: m16c dsp:8[sb] relative destination SI */
/* dst16-48-16-SB-relative-SI: m16c dsp:16[sb] relative destination SI */
/* dst16-48-8-FB-relative-SI: m16c dsp:8[fb] relative destination SI */
/* dst16-48-8-An-relative-SI: m16c dsp:8[An] relative destination SI */
/* dst16-48-16-An-relative-SI: m16c dsp:16[An] relative destination SI */
+/* dst16-48-20-An-relative-SI: m16c dsp:20[An] relative destination SI */
/* dst16-16-8-SB-relative-Ext-QI: m16c dsp:8[sb] relative destination QI */
/* dst16-16-16-SB-relative-Ext-QI: m16c dsp:16[sb] relative destination QI */
/* dst16-16-8-FB-relative-Ext-QI: m16c dsp:8[fb] relative destination QI */
@@ -2560,12 +2594,18 @@ const CGEN_OPERAND m32c_cgen_operand_table[] =
/* dst16-16-QI: m16c destination operand of size QI with additional fields at offset 16 */
/* dst16-16-8-QI: m16c destination operand of size QI with additional fields at offset 16 */
/* dst16-16-16-QI: m16c destination operand of size QI with additional fields at offset 16 */
+/* dst16-16-16sa-QI: m16c destination operand of size QI with additional fields at offset 16 */
+/* dst16-16-20ar-QI: m16c destination operand of size QI with additional fields at offset 16 */
/* dst16-16-HI: m16c destination operand of size HI with additional fields at offset 16 */
/* dst16-16-8-HI: m16c destination operand of size HI with additional fields at offset 16 */
/* dst16-16-16-HI: m16c destination operand of size HI with additional fields at offset 16 */
+/* dst16-16-16sa-HI: m16c destination operand of size HI with additional fields at offset 16 */
+/* dst16-16-20ar-HI: m16c destination operand of size HI with additional fields at offset 16 */
/* dst16-16-SI: m16c destination operand of size SI with additional fields at offset 16 */
/* dst16-16-8-SI: m16c destination operand of size SI with additional fields at offset 16 */
/* dst16-16-16-SI: m16c destination operand of size SI with additional fields at offset 16 */
+/* dst16-16-16sa-SI: m16c destination operand of size SI with additional fields at offset 16 */
+/* dst16-16-20ar-SI: m16c destination operand of size SI with additional fields at offset 16 */
/* dst16-16-Ext-QI: m16c destination operand of size QI for 'ext' insns with additional fields at offset 16 */
/* dst16-An-indirect-Mova-HI: m16c addressof An indirect destination HI */
/* dst16-16-8-An-relative-Mova-HI: m16c addressof dsp:8[An] relative destination HI */
@@ -2589,14 +2629,17 @@ const CGEN_OPERAND m32c_cgen_operand_table[] =
/* dst32-16-Unprefixed-QI: m32c destination operand of size QI with additional fields at offset 16 */
/* dst32-16-8-Unprefixed-QI: m32c destination operand of size QI with additional fields at offset 16 */
/* dst32-16-16-Unprefixed-QI: m32c destination operand of size QI with additional fields at offset 16 */
+/* dst32-16-16sa-Unprefixed-QI: m32c destination operand of size QI with additional fields at offset 16 */
/* dst32-16-24-Unprefixed-QI: m32c destination operand of size QI with additional fields at offset 16 */
/* dst32-16-Unprefixed-HI: m32c destination operand of size HI with additional fields at offset 16 */
/* dst32-16-8-Unprefixed-HI: m32c destination operand of size HI with additional fields at offset 16 */
/* dst32-16-16-Unprefixed-HI: m32c destination operand of size HI with additional fields at offset 16 */
+/* dst32-16-16sa-Unprefixed-HI: m32c destination operand of size HI with additional fields at offset 16 */
/* dst32-16-24-Unprefixed-HI: m32c destination operand of size HI with additional fields at offset 16 */
/* dst32-16-Unprefixed-SI: m32c destination operand of size SI with additional fields at offset 16 */
/* dst32-16-8-Unprefixed-SI: m32c destination operand of size SI with additional fields at offset 16 */
/* dst32-16-16-Unprefixed-SI: m32c destination operand of size SI with additional fields at offset 16 */
+/* dst32-16-16sa-Unprefixed-SI: m32c destination operand of size SI with additional fields at offset 16 */
/* dst32-16-24-Unprefixed-SI: m32c destination operand of size SI with additional fields at offset 16 */
/* dst32-16-ExtUnprefixed-QI: m32c destination operand of size QI with additional fields at offset 16 */
/* dst32-16-ExtUnprefixed-HI: m32c destination operand of size HI with additional fields at offset 16 */
@@ -12660,212 +12703,212 @@ static const CGEN_IBASE m32c_cgen_insn_table[MAX_INSNS] =
/* sbjnz.w #${Imm-12-s4n},${Dsp-16-u8}[$Dst32AnUnprefixed],${Lab-24-8} */
{
M32C_INSN_SBJNZ32_W_IMM4_16_8_UNPREFIXED_DST32_16_8_AN_RELATIVE_UNPREFIXED_HI, "sbjnz32.w-imm4-16-8-Unprefixed-dst32-16-8-An-relative-Unprefixed-HI", "sbjnz.w", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-12-s4n},${Dsp-16-u8}[sb],${Lab-24-8} */
{
M32C_INSN_SBJNZ32_W_IMM4_16_8_UNPREFIXED_DST32_16_8_SB_RELATIVE_UNPREFIXED_HI, "sbjnz32.w-imm4-16-8-Unprefixed-dst32-16-8-SB-relative-Unprefixed-HI", "sbjnz.w", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-12-s4n},${Dsp-16-s8}[fb],${Lab-24-8} */
{
M32C_INSN_SBJNZ32_W_IMM4_16_8_UNPREFIXED_DST32_16_8_FB_RELATIVE_UNPREFIXED_HI, "sbjnz32.w-imm4-16-8-Unprefixed-dst32-16-8-FB-relative-Unprefixed-HI", "sbjnz.w", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-12-s4n},${Dsp-16-u16}[$Dst32AnUnprefixed],${Lab-32-8} */
{
M32C_INSN_SBJNZ32_W_IMM4_16_16_UNPREFIXED_DST32_16_16_AN_RELATIVE_UNPREFIXED_HI, "sbjnz32.w-imm4-16-16-Unprefixed-dst32-16-16-An-relative-Unprefixed-HI", "sbjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-12-s4n},${Dsp-16-u16}[sb],${Lab-32-8} */
{
M32C_INSN_SBJNZ32_W_IMM4_16_16_UNPREFIXED_DST32_16_16_SB_RELATIVE_UNPREFIXED_HI, "sbjnz32.w-imm4-16-16-Unprefixed-dst32-16-16-SB-relative-Unprefixed-HI", "sbjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-12-s4n},${Dsp-16-s16}[fb],${Lab-32-8} */
{
M32C_INSN_SBJNZ32_W_IMM4_16_16_UNPREFIXED_DST32_16_16_FB_RELATIVE_UNPREFIXED_HI, "sbjnz32.w-imm4-16-16-Unprefixed-dst32-16-16-FB-relative-Unprefixed-HI", "sbjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-12-s4n},${Dsp-16-u16},${Lab-32-8} */
{
M32C_INSN_SBJNZ32_W_IMM4_16_16_UNPREFIXED_DST32_16_16_ABSOLUTE_UNPREFIXED_HI, "sbjnz32.w-imm4-16-16-Unprefixed-dst32-16-16-absolute-Unprefixed-HI", "sbjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-12-s4n},${Dsp-16-u24}[$Dst32AnUnprefixed],${Lab-40-8} */
{
M32C_INSN_SBJNZ32_W_IMM4_16_24_UNPREFIXED_DST32_16_24_AN_RELATIVE_UNPREFIXED_HI, "sbjnz32.w-imm4-16-24-Unprefixed-dst32-16-24-An-relative-Unprefixed-HI", "sbjnz.w", 48,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-12-s4n},${Dsp-16-u24},${Lab-40-8} */
{
M32C_INSN_SBJNZ32_W_IMM4_16_24_UNPREFIXED_DST32_16_24_ABSOLUTE_UNPREFIXED_HI, "sbjnz32.w-imm4-16-24-Unprefixed-dst32-16-24-absolute-Unprefixed-HI", "sbjnz.w", 48,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-12-s4n},$Dst32RnUnprefixedHI,${Lab-16-8} */
{
M32C_INSN_SBJNZ32_W_IMM4_BASIC_UNPREFIXED_DST32_RN_DIRECT_UNPREFIXED_HI, "sbjnz32.w-imm4-basic-Unprefixed-dst32-Rn-direct-Unprefixed-HI", "sbjnz.w", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-12-s4n},$Dst32AnUnprefixedHI,${Lab-16-8} */
{
M32C_INSN_SBJNZ32_W_IMM4_BASIC_UNPREFIXED_DST32_AN_DIRECT_UNPREFIXED_HI, "sbjnz32.w-imm4-basic-Unprefixed-dst32-An-direct-Unprefixed-HI", "sbjnz.w", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-12-s4n},[$Dst32AnUnprefixed],${Lab-16-8} */
{
M32C_INSN_SBJNZ32_W_IMM4_BASIC_UNPREFIXED_DST32_AN_INDIRECT_UNPREFIXED_HI, "sbjnz32.w-imm4-basic-Unprefixed-dst32-An-indirect-Unprefixed-HI", "sbjnz.w", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-12-s4n},${Dsp-16-u8}[$Dst32AnUnprefixed],${Lab-24-8} */
{
M32C_INSN_SBJNZ32_B_IMM4_16_8_UNPREFIXED_DST32_16_8_AN_RELATIVE_UNPREFIXED_QI, "sbjnz32.b-imm4-16-8-Unprefixed-dst32-16-8-An-relative-Unprefixed-QI", "sbjnz.b", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-12-s4n},${Dsp-16-u8}[sb],${Lab-24-8} */
{
M32C_INSN_SBJNZ32_B_IMM4_16_8_UNPREFIXED_DST32_16_8_SB_RELATIVE_UNPREFIXED_QI, "sbjnz32.b-imm4-16-8-Unprefixed-dst32-16-8-SB-relative-Unprefixed-QI", "sbjnz.b", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-12-s4n},${Dsp-16-s8}[fb],${Lab-24-8} */
{
M32C_INSN_SBJNZ32_B_IMM4_16_8_UNPREFIXED_DST32_16_8_FB_RELATIVE_UNPREFIXED_QI, "sbjnz32.b-imm4-16-8-Unprefixed-dst32-16-8-FB-relative-Unprefixed-QI", "sbjnz.b", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-12-s4n},${Dsp-16-u16}[$Dst32AnUnprefixed],${Lab-32-8} */
{
M32C_INSN_SBJNZ32_B_IMM4_16_16_UNPREFIXED_DST32_16_16_AN_RELATIVE_UNPREFIXED_QI, "sbjnz32.b-imm4-16-16-Unprefixed-dst32-16-16-An-relative-Unprefixed-QI", "sbjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-12-s4n},${Dsp-16-u16}[sb],${Lab-32-8} */
{
M32C_INSN_SBJNZ32_B_IMM4_16_16_UNPREFIXED_DST32_16_16_SB_RELATIVE_UNPREFIXED_QI, "sbjnz32.b-imm4-16-16-Unprefixed-dst32-16-16-SB-relative-Unprefixed-QI", "sbjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-12-s4n},${Dsp-16-s16}[fb],${Lab-32-8} */
{
M32C_INSN_SBJNZ32_B_IMM4_16_16_UNPREFIXED_DST32_16_16_FB_RELATIVE_UNPREFIXED_QI, "sbjnz32.b-imm4-16-16-Unprefixed-dst32-16-16-FB-relative-Unprefixed-QI", "sbjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-12-s4n},${Dsp-16-u16},${Lab-32-8} */
{
M32C_INSN_SBJNZ32_B_IMM4_16_16_UNPREFIXED_DST32_16_16_ABSOLUTE_UNPREFIXED_QI, "sbjnz32.b-imm4-16-16-Unprefixed-dst32-16-16-absolute-Unprefixed-QI", "sbjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-12-s4n},${Dsp-16-u24}[$Dst32AnUnprefixed],${Lab-40-8} */
{
M32C_INSN_SBJNZ32_B_IMM4_16_24_UNPREFIXED_DST32_16_24_AN_RELATIVE_UNPREFIXED_QI, "sbjnz32.b-imm4-16-24-Unprefixed-dst32-16-24-An-relative-Unprefixed-QI", "sbjnz.b", 48,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-12-s4n},${Dsp-16-u24},${Lab-40-8} */
{
M32C_INSN_SBJNZ32_B_IMM4_16_24_UNPREFIXED_DST32_16_24_ABSOLUTE_UNPREFIXED_QI, "sbjnz32.b-imm4-16-24-Unprefixed-dst32-16-24-absolute-Unprefixed-QI", "sbjnz.b", 48,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-12-s4n},$Dst32RnUnprefixedQI,${Lab-16-8} */
{
M32C_INSN_SBJNZ32_B_IMM4_BASIC_UNPREFIXED_DST32_RN_DIRECT_UNPREFIXED_QI, "sbjnz32.b-imm4-basic-Unprefixed-dst32-Rn-direct-Unprefixed-QI", "sbjnz.b", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-12-s4n},$Dst32AnUnprefixedQI,${Lab-16-8} */
{
M32C_INSN_SBJNZ32_B_IMM4_BASIC_UNPREFIXED_DST32_AN_DIRECT_UNPREFIXED_QI, "sbjnz32.b-imm4-basic-Unprefixed-dst32-An-direct-Unprefixed-QI", "sbjnz.b", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-12-s4n},[$Dst32AnUnprefixed],${Lab-16-8} */
{
M32C_INSN_SBJNZ32_B_IMM4_BASIC_UNPREFIXED_DST32_AN_INDIRECT_UNPREFIXED_QI, "sbjnz32.b-imm4-basic-Unprefixed-dst32-An-indirect-Unprefixed-QI", "sbjnz.b", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-8-s4n},${Dsp-16-u8}[$Dst16An],${Lab-24-8} */
{
M32C_INSN_SBJNZ16_W_IMM4_16_8_DST16_16_8_AN_RELATIVE_HI, "sbjnz16.w-imm4-16-8-dst16-16-8-An-relative-HI", "sbjnz.w", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-8-s4n},${Dsp-16-u8}[sb],${Lab-24-8} */
{
M32C_INSN_SBJNZ16_W_IMM4_16_8_DST16_16_8_SB_RELATIVE_HI, "sbjnz16.w-imm4-16-8-dst16-16-8-SB-relative-HI", "sbjnz.w", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-8-s4n},${Dsp-16-s8}[fb],${Lab-24-8} */
{
M32C_INSN_SBJNZ16_W_IMM4_16_8_DST16_16_8_FB_RELATIVE_HI, "sbjnz16.w-imm4-16-8-dst16-16-8-FB-relative-HI", "sbjnz.w", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-8-s4n},${Dsp-16-u16}[$Dst16An],${Lab-32-8} */
{
M32C_INSN_SBJNZ16_W_IMM4_16_16_DST16_16_16_AN_RELATIVE_HI, "sbjnz16.w-imm4-16-16-dst16-16-16-An-relative-HI", "sbjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-8-s4n},${Dsp-16-u16}[sb],${Lab-32-8} */
{
M32C_INSN_SBJNZ16_W_IMM4_16_16_DST16_16_16_SB_RELATIVE_HI, "sbjnz16.w-imm4-16-16-dst16-16-16-SB-relative-HI", "sbjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-8-s4n},${Dsp-16-u16},${Lab-32-8} */
{
M32C_INSN_SBJNZ16_W_IMM4_16_16_DST16_16_16_ABSOLUTE_HI, "sbjnz16.w-imm4-16-16-dst16-16-16-absolute-HI", "sbjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-8-s4n},$Dst16RnHI,${Lab-16-8} */
{
M32C_INSN_SBJNZ16_W_IMM4_BASIC_DST16_RN_DIRECT_HI, "sbjnz16.w-imm4-basic-dst16-Rn-direct-HI", "sbjnz.w", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-8-s4n},$Dst16AnHI,${Lab-16-8} */
{
M32C_INSN_SBJNZ16_W_IMM4_BASIC_DST16_AN_DIRECT_HI, "sbjnz16.w-imm4-basic-dst16-An-direct-HI", "sbjnz.w", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.w #${Imm-8-s4n},[$Dst16An],${Lab-16-8} */
{
M32C_INSN_SBJNZ16_W_IMM4_BASIC_DST16_AN_INDIRECT_HI, "sbjnz16.w-imm4-basic-dst16-An-indirect-HI", "sbjnz.w", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-8-s4n},${Dsp-16-u8}[$Dst16An],${Lab-24-8} */
{
M32C_INSN_SBJNZ16_B_IMM4_16_8_DST16_16_8_AN_RELATIVE_QI, "sbjnz16.b-imm4-16-8-dst16-16-8-An-relative-QI", "sbjnz.b", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-8-s4n},${Dsp-16-u8}[sb],${Lab-24-8} */
{
M32C_INSN_SBJNZ16_B_IMM4_16_8_DST16_16_8_SB_RELATIVE_QI, "sbjnz16.b-imm4-16-8-dst16-16-8-SB-relative-QI", "sbjnz.b", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-8-s4n},${Dsp-16-s8}[fb],${Lab-24-8} */
{
M32C_INSN_SBJNZ16_B_IMM4_16_8_DST16_16_8_FB_RELATIVE_QI, "sbjnz16.b-imm4-16-8-dst16-16-8-FB-relative-QI", "sbjnz.b", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-8-s4n},${Dsp-16-u16}[$Dst16An],${Lab-32-8} */
{
M32C_INSN_SBJNZ16_B_IMM4_16_16_DST16_16_16_AN_RELATIVE_QI, "sbjnz16.b-imm4-16-16-dst16-16-16-An-relative-QI", "sbjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-8-s4n},${Dsp-16-u16}[sb],${Lab-32-8} */
{
M32C_INSN_SBJNZ16_B_IMM4_16_16_DST16_16_16_SB_RELATIVE_QI, "sbjnz16.b-imm4-16-16-dst16-16-16-SB-relative-QI", "sbjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-8-s4n},${Dsp-16-u16},${Lab-32-8} */
{
M32C_INSN_SBJNZ16_B_IMM4_16_16_DST16_16_16_ABSOLUTE_QI, "sbjnz16.b-imm4-16-16-dst16-16-16-absolute-QI", "sbjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-8-s4n},$Dst16RnQI,${Lab-16-8} */
{
M32C_INSN_SBJNZ16_B_IMM4_BASIC_DST16_RN_DIRECT_QI, "sbjnz16.b-imm4-basic-dst16-Rn-direct-QI", "sbjnz.b", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-8-s4n},$Dst16AnQI,${Lab-16-8} */
{
M32C_INSN_SBJNZ16_B_IMM4_BASIC_DST16_AN_DIRECT_QI, "sbjnz16.b-imm4-basic-dst16-An-direct-QI", "sbjnz.b", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbjnz.b #${Imm-8-s4n},[$Dst16An],${Lab-16-8} */
{
M32C_INSN_SBJNZ16_B_IMM4_BASIC_DST16_AN_INDIRECT_QI, "sbjnz16.b-imm4-basic-dst16-An-indirect-QI", "sbjnz.b", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* sbb.w${X} ${Dsp-24-u8}[$Src32AnPrefixed],$Dst32RnPrefixedHI */
{
@@ -34487,14 +34530,14 @@ static const CGEN_IBASE m32c_cgen_insn_table[MAX_INSNS] =
M32C_INSN_LDC16_DST_DST16_16_16_ABSOLUTE_HI, "ldc16.dst-dst16-16-16-absolute-HI", "ldc", 32,
{ 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
},
-/* jsri.w ${Dsp-16-u24}[$Dst32AnUnprefixed] */
+/* jsri.a ${Dsp-16-u24}[$Dst32AnUnprefixed] */
{
- M32C_INSN_JSRI32_A_DST32_16_24_AN_RELATIVE_UNPREFIXED_SI, "jsri32.a-dst32-16-24-An-relative-Unprefixed-SI", "jsri.w", 40,
+ M32C_INSN_JSRI32_A_DST32_16_24_AN_RELATIVE_UNPREFIXED_SI, "jsri32.a-dst32-16-24-An-relative-Unprefixed-SI", "jsri.a", 40,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-u24} */
+/* jsri.a ${Dsp-16-u24} */
{
- M32C_INSN_JSRI32_A_DST32_16_24_ABSOLUTE_UNPREFIXED_SI, "jsri32.a-dst32-16-24-absolute-Unprefixed-SI", "jsri.w", 40,
+ M32C_INSN_JSRI32_A_DST32_16_24_ABSOLUTE_UNPREFIXED_SI, "jsri32.a-dst32-16-24-absolute-Unprefixed-SI", "jsri.a", 40,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
/* jsri.a $Dst32RnUnprefixedSI */
@@ -34527,39 +34570,29 @@ static const CGEN_IBASE m32c_cgen_insn_table[MAX_INSNS] =
M32C_INSN_JSRI16A_DST16_BASIC_SI_DST16_AN_INDIRECT_SI, "jsri16a-dst16-basic-SI-dst16-An-indirect-SI", "jsri.a", 16,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.a ${Dsp-16-u16}[$Dst32AnUnprefixed] */
- {
- M32C_INSN_JSRI32A_DST32_16_16_UNPREFIXED_SI_DST32_16_16_AN_RELATIVE_UNPREFIXED_SI, "jsri32a-dst32-16-16-Unprefixed-SI-dst32-16-16-An-relative-Unprefixed-SI", "jsri.a", 32,
- { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
- },
/* jsri.a ${Dsp-16-u16}[sb] */
{
- M32C_INSN_JSRI32A_DST32_16_16_UNPREFIXED_SI_DST32_16_16_SB_RELATIVE_UNPREFIXED_SI, "jsri32a-dst32-16-16-Unprefixed-SI-dst32-16-16-SB-relative-Unprefixed-SI", "jsri.a", 32,
+ M32C_INSN_JSRI32A_DST32_16_16SA_UNPREFIXED_SI_DST32_16_16_SB_RELATIVE_UNPREFIXED_SI, "jsri32a-dst32-16-16sa-Unprefixed-SI-dst32-16-16-SB-relative-Unprefixed-SI", "jsri.a", 32,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
/* jsri.a ${Dsp-16-s16}[fb] */
{
- M32C_INSN_JSRI32A_DST32_16_16_UNPREFIXED_SI_DST32_16_16_FB_RELATIVE_UNPREFIXED_SI, "jsri32a-dst32-16-16-Unprefixed-SI-dst32-16-16-FB-relative-Unprefixed-SI", "jsri.a", 32,
+ M32C_INSN_JSRI32A_DST32_16_16SA_UNPREFIXED_SI_DST32_16_16_FB_RELATIVE_UNPREFIXED_SI, "jsri32a-dst32-16-16sa-Unprefixed-SI-dst32-16-16-FB-relative-Unprefixed-SI", "jsri.a", 32,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
/* jsri.a ${Dsp-16-u16} */
{
- M32C_INSN_JSRI32A_DST32_16_16_UNPREFIXED_SI_DST32_16_16_ABSOLUTE_UNPREFIXED_SI, "jsri32a-dst32-16-16-Unprefixed-SI-dst32-16-16-absolute-Unprefixed-SI", "jsri.a", 32,
+ M32C_INSN_JSRI32A_DST32_16_16SA_UNPREFIXED_SI_DST32_16_16_ABSOLUTE_UNPREFIXED_SI, "jsri32a-dst32-16-16sa-Unprefixed-SI-dst32-16-16-absolute-Unprefixed-SI", "jsri.a", 32,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.a ${Dsp-16-u16}[$Dst16An] */
- {
- M32C_INSN_JSRI16A_DST16_16_16_SI_DST16_16_16_AN_RELATIVE_SI, "jsri16a-dst16-16-16-SI-dst16-16-16-An-relative-SI", "jsri.a", 32,
- { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_1ADDR, 0 } } } }
- },
/* jsri.a ${Dsp-16-u16}[sb] */
{
- M32C_INSN_JSRI16A_DST16_16_16_SI_DST16_16_16_SB_RELATIVE_SI, "jsri16a-dst16-16-16-SI-dst16-16-16-SB-relative-SI", "jsri.a", 32,
+ M32C_INSN_JSRI16A_DST16_16_16SA_SI_DST16_16_16_SB_RELATIVE_SI, "jsri16a-dst16-16-16sa-SI-dst16-16-16-SB-relative-SI", "jsri.a", 32,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
/* jsri.a ${Dsp-16-u16} */
{
- M32C_INSN_JSRI16A_DST16_16_16_SI_DST16_16_16_ABSOLUTE_SI, "jsri16a-dst16-16-16-SI-dst16-16-16-absolute-SI", "jsri.a", 32,
+ M32C_INSN_JSRI16A_DST16_16_16SA_SI_DST16_16_16_ABSOLUTE_SI, "jsri16a-dst16-16-16sa-SI-dst16-16-16-absolute-SI", "jsri.a", 32,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
/* jsri.a ${Dsp-16-u8}[$Dst32AnUnprefixed] */
@@ -34592,16 +34625,21 @@ static const CGEN_IBASE m32c_cgen_insn_table[MAX_INSNS] =
M32C_INSN_JSRI16A_DST16_16_8_SI_DST16_16_8_FB_RELATIVE_SI, "jsri16a-dst16-16-8-SI-dst16-16-8-FB-relative-SI", "jsri.a", 24,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-u24}[$Dst32AnUnprefixed] */
+/* jsri.a ${Dsp-16-u24}[$Dst32AnUnprefixed] */
{
- M32C_INSN_JSRI32_W_DST32_16_24_AN_RELATIVE_UNPREFIXED_HI, "jsri32.w-dst32-16-24-An-relative-Unprefixed-HI", "jsri.w", 40,
+ M32C_INSN_JSRI32A_DST32_16_24_UNPREFIXED_SI_DST32_16_24_AN_RELATIVE_UNPREFIXED_SI, "jsri32a-dst32-16-24-Unprefixed-SI-dst32-16-24-An-relative-Unprefixed-SI", "jsri.a", 40,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-u24} */
+/* jsri.a ${Dsp-16-u24} */
{
- M32C_INSN_JSRI32_W_DST32_16_24_ABSOLUTE_UNPREFIXED_HI, "jsri32.w-dst32-16-24-absolute-Unprefixed-HI", "jsri.w", 40,
+ M32C_INSN_JSRI32A_DST32_16_24_UNPREFIXED_SI_DST32_16_24_ABSOLUTE_UNPREFIXED_SI, "jsri32a-dst32-16-24-Unprefixed-SI-dst32-16-24-absolute-Unprefixed-SI", "jsri.a", 40,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
+/* jsri.a ${Dsp-16-u20}[$Dst16An] */
+ {
+ M32C_INSN_JSRI16A_DST16_16_20AR_SI_DST16_16_20_AN_RELATIVE_SI, "jsri16a-dst16-16-20ar-SI-dst16-16-20-An-relative-SI", "jsri.a", 40,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_1ADDR, 0 } } } }
+ },
/* jsri.w $Dst32RnUnprefixedHI */
{
M32C_INSN_JSRI32W_DST32_BASIC_UNPREFIXED_HI_DST32_RN_DIRECT_UNPREFIXED_HI, "jsri32w-dst32-basic-Unprefixed-HI-dst32-Rn-direct-Unprefixed-HI", "jsri.w", 16,
@@ -34632,69 +34670,74 @@ static const CGEN_IBASE m32c_cgen_insn_table[MAX_INSNS] =
M32C_INSN_JSRI16W_DST16_BASIC_HI_DST16_AN_INDIRECT_HI, "jsri16w-dst16-basic-HI-dst16-An-indirect-HI", "jsri.w", 16,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-u16}[$Dst32AnUnprefixed] */
- {
- M32C_INSN_JSRI32W_DST32_16_16_UNPREFIXED_HI_DST32_16_16_AN_RELATIVE_UNPREFIXED_HI, "jsri32w-dst32-16-16-Unprefixed-HI-dst32-16-16-An-relative-Unprefixed-HI", "jsri.w", 32,
- { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
- },
-/* jsri.w ${Dsp-16-u16}[sb] */
+/* jsri.w ${Dsp-16-u8}[$Dst32AnUnprefixed] */
{
- M32C_INSN_JSRI32W_DST32_16_16_UNPREFIXED_HI_DST32_16_16_SB_RELATIVE_UNPREFIXED_HI, "jsri32w-dst32-16-16-Unprefixed-HI-dst32-16-16-SB-relative-Unprefixed-HI", "jsri.w", 32,
+ M32C_INSN_JSRI32W_DST32_16_8_UNPREFIXED_HI_DST32_16_8_AN_RELATIVE_UNPREFIXED_HI, "jsri32w-dst32-16-8-Unprefixed-HI-dst32-16-8-An-relative-Unprefixed-HI", "jsri.w", 24,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-s16}[fb] */
+/* jsri.w ${Dsp-16-u8}[sb] */
{
- M32C_INSN_JSRI32W_DST32_16_16_UNPREFIXED_HI_DST32_16_16_FB_RELATIVE_UNPREFIXED_HI, "jsri32w-dst32-16-16-Unprefixed-HI-dst32-16-16-FB-relative-Unprefixed-HI", "jsri.w", 32,
+ M32C_INSN_JSRI32W_DST32_16_8_UNPREFIXED_HI_DST32_16_8_SB_RELATIVE_UNPREFIXED_HI, "jsri32w-dst32-16-8-Unprefixed-HI-dst32-16-8-SB-relative-Unprefixed-HI", "jsri.w", 24,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-u16} */
+/* jsri.w ${Dsp-16-s8}[fb] */
{
- M32C_INSN_JSRI32W_DST32_16_16_UNPREFIXED_HI_DST32_16_16_ABSOLUTE_UNPREFIXED_HI, "jsri32w-dst32-16-16-Unprefixed-HI-dst32-16-16-absolute-Unprefixed-HI", "jsri.w", 32,
+ M32C_INSN_JSRI32W_DST32_16_8_UNPREFIXED_HI_DST32_16_8_FB_RELATIVE_UNPREFIXED_HI, "jsri32w-dst32-16-8-Unprefixed-HI-dst32-16-8-FB-relative-Unprefixed-HI", "jsri.w", 24,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-u16}[$Dst16An] */
+/* jsri.w ${Dsp-16-u8}[$Dst16An] */
{
- M32C_INSN_JSRI16W_DST16_16_16_HI_DST16_16_16_AN_RELATIVE_HI, "jsri16w-dst16-16-16-HI-dst16-16-16-An-relative-HI", "jsri.w", 32,
+ M32C_INSN_JSRI16W_DST16_16_8_HI_DST16_16_8_AN_RELATIVE_HI, "jsri16w-dst16-16-8-HI-dst16-16-8-An-relative-HI", "jsri.w", 24,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-u16}[sb] */
+/* jsri.w ${Dsp-16-u8}[sb] */
{
- M32C_INSN_JSRI16W_DST16_16_16_HI_DST16_16_16_SB_RELATIVE_HI, "jsri16w-dst16-16-16-HI-dst16-16-16-SB-relative-HI", "jsri.w", 32,
+ M32C_INSN_JSRI16W_DST16_16_8_HI_DST16_16_8_SB_RELATIVE_HI, "jsri16w-dst16-16-8-HI-dst16-16-8-SB-relative-HI", "jsri.w", 24,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-u16} */
+/* jsri.w ${Dsp-16-s8}[fb] */
{
- M32C_INSN_JSRI16W_DST16_16_16_HI_DST16_16_16_ABSOLUTE_HI, "jsri16w-dst16-16-16-HI-dst16-16-16-absolute-HI", "jsri.w", 32,
+ M32C_INSN_JSRI16W_DST16_16_8_HI_DST16_16_8_FB_RELATIVE_HI, "jsri16w-dst16-16-8-HI-dst16-16-8-FB-relative-HI", "jsri.w", 24,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-u8}[$Dst32AnUnprefixed] */
+/* jsri.w ${Dsp-16-u16}[sb] */
{
- M32C_INSN_JSRI32W_DST32_16_8_UNPREFIXED_HI_DST32_16_8_AN_RELATIVE_UNPREFIXED_HI, "jsri32w-dst32-16-8-Unprefixed-HI-dst32-16-8-An-relative-Unprefixed-HI", "jsri.w", 24,
+ M32C_INSN_JSRI32W_DST32_16_16SA_UNPREFIXED_HI_DST32_16_16_SB_RELATIVE_UNPREFIXED_HI, "jsri32w-dst32-16-16sa-Unprefixed-HI-dst32-16-16-SB-relative-Unprefixed-HI", "jsri.w", 32,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-u8}[sb] */
+/* jsri.w ${Dsp-16-s16}[fb] */
{
- M32C_INSN_JSRI32W_DST32_16_8_UNPREFIXED_HI_DST32_16_8_SB_RELATIVE_UNPREFIXED_HI, "jsri32w-dst32-16-8-Unprefixed-HI-dst32-16-8-SB-relative-Unprefixed-HI", "jsri.w", 24,
+ M32C_INSN_JSRI32W_DST32_16_16SA_UNPREFIXED_HI_DST32_16_16_FB_RELATIVE_UNPREFIXED_HI, "jsri32w-dst32-16-16sa-Unprefixed-HI-dst32-16-16-FB-relative-Unprefixed-HI", "jsri.w", 32,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-s8}[fb] */
+/* jsri.w ${Dsp-16-u16} */
{
- M32C_INSN_JSRI32W_DST32_16_8_UNPREFIXED_HI_DST32_16_8_FB_RELATIVE_UNPREFIXED_HI, "jsri32w-dst32-16-8-Unprefixed-HI-dst32-16-8-FB-relative-Unprefixed-HI", "jsri.w", 24,
+ M32C_INSN_JSRI32W_DST32_16_16SA_UNPREFIXED_HI_DST32_16_16_ABSOLUTE_UNPREFIXED_HI, "jsri32w-dst32-16-16sa-Unprefixed-HI-dst32-16-16-absolute-Unprefixed-HI", "jsri.w", 32,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-u8}[$Dst16An] */
+/* jsri.w ${Dsp-16-u16}[sb] */
{
- M32C_INSN_JSRI16W_DST16_16_8_HI_DST16_16_8_AN_RELATIVE_HI, "jsri16w-dst16-16-8-HI-dst16-16-8-An-relative-HI", "jsri.w", 24,
+ M32C_INSN_JSRI16W_DST16_16_16SA_HI_DST16_16_16_SB_RELATIVE_HI, "jsri16w-dst16-16-16sa-HI-dst16-16-16-SB-relative-HI", "jsri.w", 32,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-u8}[sb] */
+/* jsri.w ${Dsp-16-u16} */
{
- M32C_INSN_JSRI16W_DST16_16_8_HI_DST16_16_8_SB_RELATIVE_HI, "jsri16w-dst16-16-8-HI-dst16-16-8-SB-relative-HI", "jsri.w", 24,
+ M32C_INSN_JSRI16W_DST16_16_16SA_HI_DST16_16_16_ABSOLUTE_HI, "jsri16w-dst16-16-16sa-HI-dst16-16-16-absolute-HI", "jsri.w", 32,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
-/* jsri.w ${Dsp-16-s8}[fb] */
+/* jsri.w ${Dsp-16-u24}[$Dst32AnUnprefixed] */
{
- M32C_INSN_JSRI16W_DST16_16_8_HI_DST16_16_8_FB_RELATIVE_HI, "jsri16w-dst16-16-8-HI-dst16-16-8-FB-relative-HI", "jsri.w", 24,
+ M32C_INSN_JSRI32W_DST32_16_24_UNPREFIXED_HI_DST32_16_24_AN_RELATIVE_UNPREFIXED_HI, "jsri32w-dst32-16-24-Unprefixed-HI-dst32-16-24-An-relative-Unprefixed-HI", "jsri.w", 40,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
+ },
+/* jsri.w ${Dsp-16-u24} */
+ {
+ M32C_INSN_JSRI32W_DST32_16_24_UNPREFIXED_HI_DST32_16_24_ABSOLUTE_UNPREFIXED_HI, "jsri32w-dst32-16-24-Unprefixed-HI-dst32-16-24-absolute-Unprefixed-HI", "jsri.w", 40,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_1ADDR, 0 } } } }
+ },
+/* jsri.w ${Dsp-16-u20}[$Dst16An] */
+ {
+ M32C_INSN_JSRI16W_DST16_16_20AR_HI_DST16_16_20_AN_RELATIVE_HI, "jsri16w-dst16-16-20ar-HI-dst16-16-20-An-relative-HI", "jsri.w", 40,
{ 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_1ADDR, 0 } } } }
},
/* jmpi.a $Dst32RnUnprefixedSI */
@@ -51435,212 +51478,212 @@ static const CGEN_IBASE m32c_cgen_insn_table[MAX_INSNS] =
/* adjnz.w #${Imm-12-s4},${Dsp-16-u8}[$Dst32AnUnprefixed],${Lab-24-8} */
{
M32C_INSN_ADJNZ32_W_IMM4_16_8_UNPREFIXED_DST32_16_8_AN_RELATIVE_UNPREFIXED_HI, "adjnz32.w-imm4-16-8-Unprefixed-dst32-16-8-An-relative-Unprefixed-HI", "adjnz.w", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-12-s4},${Dsp-16-u8}[sb],${Lab-24-8} */
{
M32C_INSN_ADJNZ32_W_IMM4_16_8_UNPREFIXED_DST32_16_8_SB_RELATIVE_UNPREFIXED_HI, "adjnz32.w-imm4-16-8-Unprefixed-dst32-16-8-SB-relative-Unprefixed-HI", "adjnz.w", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-12-s4},${Dsp-16-s8}[fb],${Lab-24-8} */
{
M32C_INSN_ADJNZ32_W_IMM4_16_8_UNPREFIXED_DST32_16_8_FB_RELATIVE_UNPREFIXED_HI, "adjnz32.w-imm4-16-8-Unprefixed-dst32-16-8-FB-relative-Unprefixed-HI", "adjnz.w", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-12-s4},${Dsp-16-u16}[$Dst32AnUnprefixed],${Lab-32-8} */
{
M32C_INSN_ADJNZ32_W_IMM4_16_16_UNPREFIXED_DST32_16_16_AN_RELATIVE_UNPREFIXED_HI, "adjnz32.w-imm4-16-16-Unprefixed-dst32-16-16-An-relative-Unprefixed-HI", "adjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-12-s4},${Dsp-16-u16}[sb],${Lab-32-8} */
{
M32C_INSN_ADJNZ32_W_IMM4_16_16_UNPREFIXED_DST32_16_16_SB_RELATIVE_UNPREFIXED_HI, "adjnz32.w-imm4-16-16-Unprefixed-dst32-16-16-SB-relative-Unprefixed-HI", "adjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-12-s4},${Dsp-16-s16}[fb],${Lab-32-8} */
{
M32C_INSN_ADJNZ32_W_IMM4_16_16_UNPREFIXED_DST32_16_16_FB_RELATIVE_UNPREFIXED_HI, "adjnz32.w-imm4-16-16-Unprefixed-dst32-16-16-FB-relative-Unprefixed-HI", "adjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-12-s4},${Dsp-16-u16},${Lab-32-8} */
{
M32C_INSN_ADJNZ32_W_IMM4_16_16_UNPREFIXED_DST32_16_16_ABSOLUTE_UNPREFIXED_HI, "adjnz32.w-imm4-16-16-Unprefixed-dst32-16-16-absolute-Unprefixed-HI", "adjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-12-s4},${Dsp-16-u24}[$Dst32AnUnprefixed],${Lab-40-8} */
{
M32C_INSN_ADJNZ32_W_IMM4_16_24_UNPREFIXED_DST32_16_24_AN_RELATIVE_UNPREFIXED_HI, "adjnz32.w-imm4-16-24-Unprefixed-dst32-16-24-An-relative-Unprefixed-HI", "adjnz.w", 48,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-12-s4},${Dsp-16-u24},${Lab-40-8} */
{
M32C_INSN_ADJNZ32_W_IMM4_16_24_UNPREFIXED_DST32_16_24_ABSOLUTE_UNPREFIXED_HI, "adjnz32.w-imm4-16-24-Unprefixed-dst32-16-24-absolute-Unprefixed-HI", "adjnz.w", 48,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-12-s4},$Dst32RnUnprefixedHI,${Lab-16-8} */
{
M32C_INSN_ADJNZ32_W_IMM4_BASIC_UNPREFIXED_DST32_RN_DIRECT_UNPREFIXED_HI, "adjnz32.w-imm4-basic-Unprefixed-dst32-Rn-direct-Unprefixed-HI", "adjnz.w", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-12-s4},$Dst32AnUnprefixedHI,${Lab-16-8} */
{
M32C_INSN_ADJNZ32_W_IMM4_BASIC_UNPREFIXED_DST32_AN_DIRECT_UNPREFIXED_HI, "adjnz32.w-imm4-basic-Unprefixed-dst32-An-direct-Unprefixed-HI", "adjnz.w", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-12-s4},[$Dst32AnUnprefixed],${Lab-16-8} */
{
M32C_INSN_ADJNZ32_W_IMM4_BASIC_UNPREFIXED_DST32_AN_INDIRECT_UNPREFIXED_HI, "adjnz32.w-imm4-basic-Unprefixed-dst32-An-indirect-Unprefixed-HI", "adjnz.w", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-12-s4},${Dsp-16-u8}[$Dst32AnUnprefixed],${Lab-24-8} */
{
M32C_INSN_ADJNZ32_B_IMM4_16_8_UNPREFIXED_DST32_16_8_AN_RELATIVE_UNPREFIXED_QI, "adjnz32.b-imm4-16-8-Unprefixed-dst32-16-8-An-relative-Unprefixed-QI", "adjnz.b", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-12-s4},${Dsp-16-u8}[sb],${Lab-24-8} */
{
M32C_INSN_ADJNZ32_B_IMM4_16_8_UNPREFIXED_DST32_16_8_SB_RELATIVE_UNPREFIXED_QI, "adjnz32.b-imm4-16-8-Unprefixed-dst32-16-8-SB-relative-Unprefixed-QI", "adjnz.b", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-12-s4},${Dsp-16-s8}[fb],${Lab-24-8} */
{
M32C_INSN_ADJNZ32_B_IMM4_16_8_UNPREFIXED_DST32_16_8_FB_RELATIVE_UNPREFIXED_QI, "adjnz32.b-imm4-16-8-Unprefixed-dst32-16-8-FB-relative-Unprefixed-QI", "adjnz.b", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-12-s4},${Dsp-16-u16}[$Dst32AnUnprefixed],${Lab-32-8} */
{
M32C_INSN_ADJNZ32_B_IMM4_16_16_UNPREFIXED_DST32_16_16_AN_RELATIVE_UNPREFIXED_QI, "adjnz32.b-imm4-16-16-Unprefixed-dst32-16-16-An-relative-Unprefixed-QI", "adjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-12-s4},${Dsp-16-u16}[sb],${Lab-32-8} */
{
M32C_INSN_ADJNZ32_B_IMM4_16_16_UNPREFIXED_DST32_16_16_SB_RELATIVE_UNPREFIXED_QI, "adjnz32.b-imm4-16-16-Unprefixed-dst32-16-16-SB-relative-Unprefixed-QI", "adjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-12-s4},${Dsp-16-s16}[fb],${Lab-32-8} */
{
M32C_INSN_ADJNZ32_B_IMM4_16_16_UNPREFIXED_DST32_16_16_FB_RELATIVE_UNPREFIXED_QI, "adjnz32.b-imm4-16-16-Unprefixed-dst32-16-16-FB-relative-Unprefixed-QI", "adjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-12-s4},${Dsp-16-u16},${Lab-32-8} */
{
M32C_INSN_ADJNZ32_B_IMM4_16_16_UNPREFIXED_DST32_16_16_ABSOLUTE_UNPREFIXED_QI, "adjnz32.b-imm4-16-16-Unprefixed-dst32-16-16-absolute-Unprefixed-QI", "adjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-12-s4},${Dsp-16-u24}[$Dst32AnUnprefixed],${Lab-40-8} */
{
M32C_INSN_ADJNZ32_B_IMM4_16_24_UNPREFIXED_DST32_16_24_AN_RELATIVE_UNPREFIXED_QI, "adjnz32.b-imm4-16-24-Unprefixed-dst32-16-24-An-relative-Unprefixed-QI", "adjnz.b", 48,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-12-s4},${Dsp-16-u24},${Lab-40-8} */
{
M32C_INSN_ADJNZ32_B_IMM4_16_24_UNPREFIXED_DST32_16_24_ABSOLUTE_UNPREFIXED_QI, "adjnz32.b-imm4-16-24-Unprefixed-dst32-16-24-absolute-Unprefixed-QI", "adjnz.b", 48,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-12-s4},$Dst32RnUnprefixedQI,${Lab-16-8} */
{
M32C_INSN_ADJNZ32_B_IMM4_BASIC_UNPREFIXED_DST32_RN_DIRECT_UNPREFIXED_QI, "adjnz32.b-imm4-basic-Unprefixed-dst32-Rn-direct-Unprefixed-QI", "adjnz.b", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-12-s4},$Dst32AnUnprefixedQI,${Lab-16-8} */
{
M32C_INSN_ADJNZ32_B_IMM4_BASIC_UNPREFIXED_DST32_AN_DIRECT_UNPREFIXED_QI, "adjnz32.b-imm4-basic-Unprefixed-dst32-An-direct-Unprefixed-QI", "adjnz.b", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-12-s4},[$Dst32AnUnprefixed],${Lab-16-8} */
{
M32C_INSN_ADJNZ32_B_IMM4_BASIC_UNPREFIXED_DST32_AN_INDIRECT_UNPREFIXED_QI, "adjnz32.b-imm4-basic-Unprefixed-dst32-An-indirect-Unprefixed-QI", "adjnz.b", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-8-s4},${Dsp-16-u8}[$Dst16An],${Lab-24-8} */
{
M32C_INSN_ADJNZ16_W_IMM4_16_8_DST16_16_8_AN_RELATIVE_HI, "adjnz16.w-imm4-16-8-dst16-16-8-An-relative-HI", "adjnz.w", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-8-s4},${Dsp-16-u8}[sb],${Lab-24-8} */
{
M32C_INSN_ADJNZ16_W_IMM4_16_8_DST16_16_8_SB_RELATIVE_HI, "adjnz16.w-imm4-16-8-dst16-16-8-SB-relative-HI", "adjnz.w", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-8-s4},${Dsp-16-s8}[fb],${Lab-24-8} */
{
M32C_INSN_ADJNZ16_W_IMM4_16_8_DST16_16_8_FB_RELATIVE_HI, "adjnz16.w-imm4-16-8-dst16-16-8-FB-relative-HI", "adjnz.w", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-8-s4},${Dsp-16-u16}[$Dst16An],${Lab-32-8} */
{
M32C_INSN_ADJNZ16_W_IMM4_16_16_DST16_16_16_AN_RELATIVE_HI, "adjnz16.w-imm4-16-16-dst16-16-16-An-relative-HI", "adjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-8-s4},${Dsp-16-u16}[sb],${Lab-32-8} */
{
M32C_INSN_ADJNZ16_W_IMM4_16_16_DST16_16_16_SB_RELATIVE_HI, "adjnz16.w-imm4-16-16-dst16-16-16-SB-relative-HI", "adjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-8-s4},${Dsp-16-u16},${Lab-32-8} */
{
M32C_INSN_ADJNZ16_W_IMM4_16_16_DST16_16_16_ABSOLUTE_HI, "adjnz16.w-imm4-16-16-dst16-16-16-absolute-HI", "adjnz.w", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-8-s4},$Dst16RnHI,${Lab-16-8} */
{
M32C_INSN_ADJNZ16_W_IMM4_BASIC_DST16_RN_DIRECT_HI, "adjnz16.w-imm4-basic-dst16-Rn-direct-HI", "adjnz.w", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-8-s4},$Dst16AnHI,${Lab-16-8} */
{
M32C_INSN_ADJNZ16_W_IMM4_BASIC_DST16_AN_DIRECT_HI, "adjnz16.w-imm4-basic-dst16-An-direct-HI", "adjnz.w", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.w #${Imm-8-s4},[$Dst16An],${Lab-16-8} */
{
M32C_INSN_ADJNZ16_W_IMM4_BASIC_DST16_AN_INDIRECT_HI, "adjnz16.w-imm4-basic-dst16-An-indirect-HI", "adjnz.w", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-8-s4},${Dsp-16-u8}[$Dst16An],${Lab-24-8} */
{
M32C_INSN_ADJNZ16_B_IMM4_16_8_DST16_16_8_AN_RELATIVE_QI, "adjnz16.b-imm4-16-8-dst16-16-8-An-relative-QI", "adjnz.b", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-8-s4},${Dsp-16-u8}[sb],${Lab-24-8} */
{
M32C_INSN_ADJNZ16_B_IMM4_16_8_DST16_16_8_SB_RELATIVE_QI, "adjnz16.b-imm4-16-8-dst16-16-8-SB-relative-QI", "adjnz.b", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-8-s4},${Dsp-16-s8}[fb],${Lab-24-8} */
{
M32C_INSN_ADJNZ16_B_IMM4_16_8_DST16_16_8_FB_RELATIVE_QI, "adjnz16.b-imm4-16-8-dst16-16-8-FB-relative-QI", "adjnz.b", 32,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-8-s4},${Dsp-16-u16}[$Dst16An],${Lab-32-8} */
{
M32C_INSN_ADJNZ16_B_IMM4_16_16_DST16_16_16_AN_RELATIVE_QI, "adjnz16.b-imm4-16-16-dst16-16-16-An-relative-QI", "adjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-8-s4},${Dsp-16-u16}[sb],${Lab-32-8} */
{
M32C_INSN_ADJNZ16_B_IMM4_16_16_DST16_16_16_SB_RELATIVE_QI, "adjnz16.b-imm4-16-16-dst16-16-16-SB-relative-QI", "adjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-8-s4},${Dsp-16-u16},${Lab-32-8} */
{
M32C_INSN_ADJNZ16_B_IMM4_16_16_DST16_16_16_ABSOLUTE_QI, "adjnz16.b-imm4-16-16-dst16-16-16-absolute-QI", "adjnz.b", 40,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-8-s4},$Dst16RnQI,${Lab-16-8} */
{
M32C_INSN_ADJNZ16_B_IMM4_BASIC_DST16_RN_DIRECT_QI, "adjnz16.b-imm4-basic-dst16-Rn-direct-QI", "adjnz.b", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-8-s4},$Dst16AnQI,${Lab-16-8} */
{
M32C_INSN_ADJNZ16_B_IMM4_BASIC_DST16_AN_DIRECT_QI, "adjnz16.b-imm4-basic-dst16-An-direct-QI", "adjnz.b", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* adjnz.b #${Imm-8-s4},[$Dst16An],${Lab-16-8} */
{
M32C_INSN_ADJNZ16_B_IMM4_BASIC_DST16_AN_INDIRECT_QI, "adjnz16.b-imm4-basic-dst16-An-indirect-QI", "adjnz.b", 24,
- { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_NONE, 0 } } } }
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { RL_TYPE_JUMP, 0 } } } }
},
/* addx${X} ${Dsp-16-u8}[$Src32AnUnprefixed],$Dst32RnUnprefixedSI */
{
diff --git a/opcodes/m32c-desc.h b/opcodes/m32c-desc.h
index 95d8adbff1b2..115a02d78ef5 100644
--- a/opcodes/m32c-desc.h
+++ b/opcodes/m32c-desc.h
@@ -142,16 +142,16 @@ typedef enum ifield_type {
, M32C_F_DSP_32_U16, M32C_F_DSP_32_S16, M32C_F_DSP_40_U16, M32C_F_DSP_40_S16
, M32C_F_DSP_48_U16, M32C_F_DSP_48_S16, M32C_F_DSP_64_U16, M32C_F_DSP_8_S24
, M32C_F_DSP_8_U24, M32C_F_DSP_16_U24, M32C_F_DSP_24_U24, M32C_F_DSP_32_U24
- , M32C_F_DSP_40_U24, M32C_F_DSP_40_S32, M32C_F_DSP_48_U24, M32C_F_DSP_16_S32
- , M32C_F_DSP_24_S32, M32C_F_DSP_32_S32, M32C_F_DSP_48_U32, M32C_F_DSP_48_S32
- , M32C_F_DSP_56_S16, M32C_F_DSP_64_S16, M32C_F_BITNO16_S, M32C_F_BITNO32_PREFIXED
- , M32C_F_BITNO32_UNPREFIXED, M32C_F_BITBASE16_U11_S, M32C_F_BITBASE32_16_U11_UNPREFIXED, M32C_F_BITBASE32_16_S11_UNPREFIXED
- , M32C_F_BITBASE32_16_U19_UNPREFIXED, M32C_F_BITBASE32_16_S19_UNPREFIXED, M32C_F_BITBASE32_16_U27_UNPREFIXED, M32C_F_BITBASE32_24_U11_PREFIXED
- , M32C_F_BITBASE32_24_S11_PREFIXED, M32C_F_BITBASE32_24_U19_PREFIXED, M32C_F_BITBASE32_24_S19_PREFIXED, M32C_F_BITBASE32_24_U27_PREFIXED
- , M32C_F_LAB_5_3, M32C_F_LAB32_JMP_S, M32C_F_LAB_8_8, M32C_F_LAB_8_16
- , M32C_F_LAB_8_24, M32C_F_LAB_16_8, M32C_F_LAB_24_8, M32C_F_LAB_32_8
- , M32C_F_LAB_40_8, M32C_F_COND16, M32C_F_COND16J_5, M32C_F_COND32
- , M32C_F_COND32J, M32C_F_MAX
+ , M32C_F_DSP_40_U20, M32C_F_DSP_40_U24, M32C_F_DSP_40_S32, M32C_F_DSP_48_U20
+ , M32C_F_DSP_48_U24, M32C_F_DSP_16_S32, M32C_F_DSP_24_S32, M32C_F_DSP_32_S32
+ , M32C_F_DSP_48_U32, M32C_F_DSP_48_S32, M32C_F_DSP_56_S16, M32C_F_DSP_64_S16
+ , M32C_F_BITNO16_S, M32C_F_BITNO32_PREFIXED, M32C_F_BITNO32_UNPREFIXED, M32C_F_BITBASE16_U11_S
+ , M32C_F_BITBASE32_16_U11_UNPREFIXED, M32C_F_BITBASE32_16_S11_UNPREFIXED, M32C_F_BITBASE32_16_U19_UNPREFIXED, M32C_F_BITBASE32_16_S19_UNPREFIXED
+ , M32C_F_BITBASE32_16_U27_UNPREFIXED, M32C_F_BITBASE32_24_U11_PREFIXED, M32C_F_BITBASE32_24_S11_PREFIXED, M32C_F_BITBASE32_24_U19_PREFIXED
+ , M32C_F_BITBASE32_24_S19_PREFIXED, M32C_F_BITBASE32_24_U27_PREFIXED, M32C_F_LAB_5_3, M32C_F_LAB32_JMP_S
+ , M32C_F_LAB_8_8, M32C_F_LAB_8_16, M32C_F_LAB_8_24, M32C_F_LAB_16_8
+ , M32C_F_LAB_24_8, M32C_F_LAB_32_8, M32C_F_LAB_40_8, M32C_F_COND16
+ , M32C_F_COND16J_5, M32C_F_COND32, M32C_F_COND32J, M32C_F_MAX
} IFIELD_TYPE;
#define MAX_IFLD ((int) M32C_F_MAX)
@@ -256,41 +256,42 @@ typedef enum cgen_operand_type {
, M32C_OPERAND_DSP_24_S8, M32C_OPERAND_DSP_24_S16, M32C_OPERAND_DSP_32_U8, M32C_OPERAND_DSP_32_U16
, M32C_OPERAND_DSP_32_U24, M32C_OPERAND_DSP_32_U20, M32C_OPERAND_DSP_32_S8, M32C_OPERAND_DSP_32_S16
, M32C_OPERAND_DSP_40_U8, M32C_OPERAND_DSP_40_S8, M32C_OPERAND_DSP_40_U16, M32C_OPERAND_DSP_40_S16
- , M32C_OPERAND_DSP_40_U24, M32C_OPERAND_DSP_48_U8, M32C_OPERAND_DSP_48_S8, M32C_OPERAND_DSP_48_U16
- , M32C_OPERAND_DSP_48_S16, M32C_OPERAND_DSP_48_U24, M32C_OPERAND_IMM_8_S4, M32C_OPERAND_IMM_8_S4N
- , M32C_OPERAND_IMM_SH_8_S4, M32C_OPERAND_IMM_8_QI, M32C_OPERAND_IMM_8_HI, M32C_OPERAND_IMM_12_S4
- , M32C_OPERAND_IMM_12_S4N, M32C_OPERAND_IMM_SH_12_S4, M32C_OPERAND_IMM_13_U3, M32C_OPERAND_IMM_20_S4
- , M32C_OPERAND_IMM_SH_20_S4, M32C_OPERAND_IMM_16_QI, M32C_OPERAND_IMM_16_HI, M32C_OPERAND_IMM_16_SI
- , M32C_OPERAND_IMM_24_QI, M32C_OPERAND_IMM_24_HI, M32C_OPERAND_IMM_24_SI, M32C_OPERAND_IMM_32_QI
- , M32C_OPERAND_IMM_32_SI, M32C_OPERAND_IMM_32_HI, M32C_OPERAND_IMM_40_QI, M32C_OPERAND_IMM_40_HI
- , M32C_OPERAND_IMM_40_SI, M32C_OPERAND_IMM_48_QI, M32C_OPERAND_IMM_48_HI, M32C_OPERAND_IMM_48_SI
- , M32C_OPERAND_IMM_56_QI, M32C_OPERAND_IMM_56_HI, M32C_OPERAND_IMM_64_HI, M32C_OPERAND_IMM1_S
- , M32C_OPERAND_IMM3_S, M32C_OPERAND_BIT3_S, M32C_OPERAND_BITNO16R, M32C_OPERAND_BITNO32PREFIXED
- , M32C_OPERAND_BITNO32UNPREFIXED, M32C_OPERAND_BITBASE16_16_U8, M32C_OPERAND_BITBASE16_16_S8, M32C_OPERAND_BITBASE16_16_U16
- , M32C_OPERAND_BITBASE16_8_U11_S, M32C_OPERAND_BITBASE32_16_U11_UNPREFIXED, M32C_OPERAND_BITBASE32_16_S11_UNPREFIXED, M32C_OPERAND_BITBASE32_16_U19_UNPREFIXED
- , M32C_OPERAND_BITBASE32_16_S19_UNPREFIXED, M32C_OPERAND_BITBASE32_16_U27_UNPREFIXED, M32C_OPERAND_BITBASE32_24_U11_PREFIXED, M32C_OPERAND_BITBASE32_24_S11_PREFIXED
- , M32C_OPERAND_BITBASE32_24_U19_PREFIXED, M32C_OPERAND_BITBASE32_24_S19_PREFIXED, M32C_OPERAND_BITBASE32_24_U27_PREFIXED, M32C_OPERAND_LAB_5_3
- , M32C_OPERAND_LAB32_JMP_S, M32C_OPERAND_LAB_8_8, M32C_OPERAND_LAB_8_16, M32C_OPERAND_LAB_8_24
- , M32C_OPERAND_LAB_16_8, M32C_OPERAND_LAB_24_8, M32C_OPERAND_LAB_32_8, M32C_OPERAND_LAB_40_8
- , M32C_OPERAND_SBIT, M32C_OPERAND_OBIT, M32C_OPERAND_ZBIT, M32C_OPERAND_CBIT
- , M32C_OPERAND_UBIT, M32C_OPERAND_IBIT, M32C_OPERAND_BBIT, M32C_OPERAND_DBIT
- , M32C_OPERAND_COND16_16, M32C_OPERAND_COND16_24, M32C_OPERAND_COND16_32, M32C_OPERAND_COND32_16
- , M32C_OPERAND_COND32_24, M32C_OPERAND_COND32_32, M32C_OPERAND_COND32_40, M32C_OPERAND_COND16C
- , M32C_OPERAND_COND16J, M32C_OPERAND_COND16J5, M32C_OPERAND_COND32, M32C_OPERAND_COND32J
- , M32C_OPERAND_SCCOND32, M32C_OPERAND_FLAGS16, M32C_OPERAND_FLAGS32, M32C_OPERAND_CR16
- , M32C_OPERAND_CR1_UNPREFIXED_32, M32C_OPERAND_CR1_PREFIXED_32, M32C_OPERAND_CR2_32, M32C_OPERAND_CR3_UNPREFIXED_32
- , M32C_OPERAND_CR3_PREFIXED_32, M32C_OPERAND_Z, M32C_OPERAND_S, M32C_OPERAND_Q
- , M32C_OPERAND_G, M32C_OPERAND_X, M32C_OPERAND_SIZE, M32C_OPERAND_BITINDEX
- , M32C_OPERAND_SRCINDEX, M32C_OPERAND_DSTINDEX, M32C_OPERAND_NOREMAINDER, M32C_OPERAND_SRC16_RN_DIRECT_QI
- , M32C_OPERAND_SRC16_RN_DIRECT_HI, M32C_OPERAND_SRC32_RN_DIRECT_UNPREFIXED_QI, M32C_OPERAND_SRC32_RN_DIRECT_PREFIXED_QI, M32C_OPERAND_SRC32_RN_DIRECT_UNPREFIXED_HI
- , M32C_OPERAND_SRC32_RN_DIRECT_PREFIXED_HI, M32C_OPERAND_SRC32_RN_DIRECT_UNPREFIXED_SI, M32C_OPERAND_SRC32_RN_DIRECT_PREFIXED_SI, M32C_OPERAND_SRC16_AN_DIRECT_QI
- , M32C_OPERAND_SRC16_AN_DIRECT_HI, M32C_OPERAND_SRC32_AN_DIRECT_UNPREFIXED_QI, M32C_OPERAND_SRC32_AN_DIRECT_UNPREFIXED_HI, M32C_OPERAND_SRC32_AN_DIRECT_UNPREFIXED_SI
- , M32C_OPERAND_SRC32_AN_DIRECT_PREFIXED_QI, M32C_OPERAND_SRC32_AN_DIRECT_PREFIXED_HI, M32C_OPERAND_SRC32_AN_DIRECT_PREFIXED_SI, M32C_OPERAND_SRC16_AN_INDIRECT_QI
- , M32C_OPERAND_SRC16_AN_INDIRECT_HI, M32C_OPERAND_SRC32_AN_INDIRECT_UNPREFIXED_QI, M32C_OPERAND_SRC32_AN_INDIRECT_UNPREFIXED_HI, M32C_OPERAND_SRC32_AN_INDIRECT_UNPREFIXED_SI
- , M32C_OPERAND_SRC32_AN_INDIRECT_PREFIXED_QI, M32C_OPERAND_SRC32_AN_INDIRECT_PREFIXED_HI, M32C_OPERAND_SRC32_AN_INDIRECT_PREFIXED_SI, M32C_OPERAND_SRC16_16_8_SB_RELATIVE_QI
- , M32C_OPERAND_SRC16_16_16_SB_RELATIVE_QI, M32C_OPERAND_SRC16_16_8_FB_RELATIVE_QI, M32C_OPERAND_SRC16_16_8_AN_RELATIVE_QI, M32C_OPERAND_SRC16_16_16_AN_RELATIVE_QI
- , M32C_OPERAND_SRC16_16_8_SB_RELATIVE_HI, M32C_OPERAND_SRC16_16_16_SB_RELATIVE_HI, M32C_OPERAND_SRC16_16_8_FB_RELATIVE_HI, M32C_OPERAND_SRC16_16_8_AN_RELATIVE_HI
- , M32C_OPERAND_SRC16_16_16_AN_RELATIVE_HI, M32C_OPERAND_SRC32_16_8_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_SRC32_16_16_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_SRC32_16_8_FB_RELATIVE_UNPREFIXED_QI
+ , M32C_OPERAND_DSP_40_U20, M32C_OPERAND_DSP_40_U24, M32C_OPERAND_DSP_48_U8, M32C_OPERAND_DSP_48_S8
+ , M32C_OPERAND_DSP_48_U16, M32C_OPERAND_DSP_48_S16, M32C_OPERAND_DSP_48_U20, M32C_OPERAND_DSP_48_U24
+ , M32C_OPERAND_IMM_8_S4, M32C_OPERAND_IMM_8_S4N, M32C_OPERAND_IMM_SH_8_S4, M32C_OPERAND_IMM_8_QI
+ , M32C_OPERAND_IMM_8_HI, M32C_OPERAND_IMM_12_S4, M32C_OPERAND_IMM_12_S4N, M32C_OPERAND_IMM_SH_12_S4
+ , M32C_OPERAND_IMM_13_U3, M32C_OPERAND_IMM_20_S4, M32C_OPERAND_IMM_SH_20_S4, M32C_OPERAND_IMM_16_QI
+ , M32C_OPERAND_IMM_16_HI, M32C_OPERAND_IMM_16_SI, M32C_OPERAND_IMM_24_QI, M32C_OPERAND_IMM_24_HI
+ , M32C_OPERAND_IMM_24_SI, M32C_OPERAND_IMM_32_QI, M32C_OPERAND_IMM_32_SI, M32C_OPERAND_IMM_32_HI
+ , M32C_OPERAND_IMM_40_QI, M32C_OPERAND_IMM_40_HI, M32C_OPERAND_IMM_40_SI, M32C_OPERAND_IMM_48_QI
+ , M32C_OPERAND_IMM_48_HI, M32C_OPERAND_IMM_48_SI, M32C_OPERAND_IMM_56_QI, M32C_OPERAND_IMM_56_HI
+ , M32C_OPERAND_IMM_64_HI, M32C_OPERAND_IMM1_S, M32C_OPERAND_IMM3_S, M32C_OPERAND_BIT3_S
+ , M32C_OPERAND_BITNO16R, M32C_OPERAND_BITNO32PREFIXED, M32C_OPERAND_BITNO32UNPREFIXED, M32C_OPERAND_BITBASE16_16_U8
+ , M32C_OPERAND_BITBASE16_16_S8, M32C_OPERAND_BITBASE16_16_U16, M32C_OPERAND_BITBASE16_8_U11_S, M32C_OPERAND_BITBASE32_16_U11_UNPREFIXED
+ , M32C_OPERAND_BITBASE32_16_S11_UNPREFIXED, M32C_OPERAND_BITBASE32_16_U19_UNPREFIXED, M32C_OPERAND_BITBASE32_16_S19_UNPREFIXED, M32C_OPERAND_BITBASE32_16_U27_UNPREFIXED
+ , M32C_OPERAND_BITBASE32_24_U11_PREFIXED, M32C_OPERAND_BITBASE32_24_S11_PREFIXED, M32C_OPERAND_BITBASE32_24_U19_PREFIXED, M32C_OPERAND_BITBASE32_24_S19_PREFIXED
+ , M32C_OPERAND_BITBASE32_24_U27_PREFIXED, M32C_OPERAND_LAB_5_3, M32C_OPERAND_LAB32_JMP_S, M32C_OPERAND_LAB_8_8
+ , M32C_OPERAND_LAB_8_16, M32C_OPERAND_LAB_8_24, M32C_OPERAND_LAB_16_8, M32C_OPERAND_LAB_24_8
+ , M32C_OPERAND_LAB_32_8, M32C_OPERAND_LAB_40_8, M32C_OPERAND_SBIT, M32C_OPERAND_OBIT
+ , M32C_OPERAND_ZBIT, M32C_OPERAND_CBIT, M32C_OPERAND_UBIT, M32C_OPERAND_IBIT
+ , M32C_OPERAND_BBIT, M32C_OPERAND_DBIT, M32C_OPERAND_COND16_16, M32C_OPERAND_COND16_24
+ , M32C_OPERAND_COND16_32, M32C_OPERAND_COND32_16, M32C_OPERAND_COND32_24, M32C_OPERAND_COND32_32
+ , M32C_OPERAND_COND32_40, M32C_OPERAND_COND16C, M32C_OPERAND_COND16J, M32C_OPERAND_COND16J5
+ , M32C_OPERAND_COND32, M32C_OPERAND_COND32J, M32C_OPERAND_SCCOND32, M32C_OPERAND_FLAGS16
+ , M32C_OPERAND_FLAGS32, M32C_OPERAND_CR16, M32C_OPERAND_CR1_UNPREFIXED_32, M32C_OPERAND_CR1_PREFIXED_32
+ , M32C_OPERAND_CR2_32, M32C_OPERAND_CR3_UNPREFIXED_32, M32C_OPERAND_CR3_PREFIXED_32, M32C_OPERAND_Z
+ , M32C_OPERAND_S, M32C_OPERAND_Q, M32C_OPERAND_G, M32C_OPERAND_X
+ , M32C_OPERAND_SIZE, M32C_OPERAND_BITINDEX, M32C_OPERAND_SRCINDEX, M32C_OPERAND_DSTINDEX
+ , M32C_OPERAND_NOREMAINDER, M32C_OPERAND_SRC16_RN_DIRECT_QI, M32C_OPERAND_SRC16_RN_DIRECT_HI, M32C_OPERAND_SRC32_RN_DIRECT_UNPREFIXED_QI
+ , M32C_OPERAND_SRC32_RN_DIRECT_PREFIXED_QI, M32C_OPERAND_SRC32_RN_DIRECT_UNPREFIXED_HI, M32C_OPERAND_SRC32_RN_DIRECT_PREFIXED_HI, M32C_OPERAND_SRC32_RN_DIRECT_UNPREFIXED_SI
+ , M32C_OPERAND_SRC32_RN_DIRECT_PREFIXED_SI, M32C_OPERAND_SRC16_AN_DIRECT_QI, M32C_OPERAND_SRC16_AN_DIRECT_HI, M32C_OPERAND_SRC32_AN_DIRECT_UNPREFIXED_QI
+ , M32C_OPERAND_SRC32_AN_DIRECT_UNPREFIXED_HI, M32C_OPERAND_SRC32_AN_DIRECT_UNPREFIXED_SI, M32C_OPERAND_SRC32_AN_DIRECT_PREFIXED_QI, M32C_OPERAND_SRC32_AN_DIRECT_PREFIXED_HI
+ , M32C_OPERAND_SRC32_AN_DIRECT_PREFIXED_SI, M32C_OPERAND_SRC16_AN_INDIRECT_QI, M32C_OPERAND_SRC16_AN_INDIRECT_HI, M32C_OPERAND_SRC32_AN_INDIRECT_UNPREFIXED_QI
+ , M32C_OPERAND_SRC32_AN_INDIRECT_UNPREFIXED_HI, M32C_OPERAND_SRC32_AN_INDIRECT_UNPREFIXED_SI, M32C_OPERAND_SRC32_AN_INDIRECT_PREFIXED_QI, M32C_OPERAND_SRC32_AN_INDIRECT_PREFIXED_HI
+ , M32C_OPERAND_SRC32_AN_INDIRECT_PREFIXED_SI, M32C_OPERAND_SRC16_16_8_SB_RELATIVE_QI, M32C_OPERAND_SRC16_16_16_SB_RELATIVE_QI, M32C_OPERAND_SRC16_16_8_FB_RELATIVE_QI
+ , M32C_OPERAND_SRC16_16_8_AN_RELATIVE_QI, M32C_OPERAND_SRC16_16_16_AN_RELATIVE_QI, M32C_OPERAND_SRC16_16_20_AN_RELATIVE_QI, M32C_OPERAND_SRC16_16_8_SB_RELATIVE_HI
+ , M32C_OPERAND_SRC16_16_16_SB_RELATIVE_HI, M32C_OPERAND_SRC16_16_8_FB_RELATIVE_HI, M32C_OPERAND_SRC16_16_8_AN_RELATIVE_HI, M32C_OPERAND_SRC16_16_16_AN_RELATIVE_HI
+ , M32C_OPERAND_SRC16_16_20_AN_RELATIVE_HI, M32C_OPERAND_SRC32_16_8_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_SRC32_16_16_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_SRC32_16_8_FB_RELATIVE_UNPREFIXED_QI
, M32C_OPERAND_SRC32_16_16_FB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_SRC32_16_8_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_SRC32_16_16_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_SRC32_16_24_AN_RELATIVE_UNPREFIXED_QI
, M32C_OPERAND_SRC32_16_8_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_SRC32_16_16_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_SRC32_16_8_FB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_SRC32_16_16_FB_RELATIVE_UNPREFIXED_HI
, M32C_OPERAND_SRC32_16_8_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_SRC32_16_16_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_SRC32_16_24_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_SRC32_16_8_SB_RELATIVE_UNPREFIXED_SI
@@ -316,122 +317,128 @@ typedef enum cgen_operand_type {
, M32C_OPERAND_DST32_AN_INDIRECT_UNPREFIXED_QI, M32C_OPERAND_DST32_AN_INDIRECT_PREFIXED_QI, M32C_OPERAND_DST32_AN_INDIRECT_UNPREFIXED_HI, M32C_OPERAND_DST32_AN_INDIRECT_PREFIXED_HI
, M32C_OPERAND_DST32_AN_INDIRECT_UNPREFIXED_SI, M32C_OPERAND_DST32_AN_INDIRECT_PREFIXED_SI, M32C_OPERAND_DST32_AN_INDIRECT_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_AN_INDIRECT_EXTUNPREFIXED_HI
, M32C_OPERAND_DST16_16_8_SB_RELATIVE_QI, M32C_OPERAND_DST16_16_16_SB_RELATIVE_QI, M32C_OPERAND_DST16_16_8_FB_RELATIVE_QI, M32C_OPERAND_DST16_16_8_AN_RELATIVE_QI
- , M32C_OPERAND_DST16_16_16_AN_RELATIVE_QI, M32C_OPERAND_DST16_24_8_SB_RELATIVE_QI, M32C_OPERAND_DST16_24_16_SB_RELATIVE_QI, M32C_OPERAND_DST16_24_8_FB_RELATIVE_QI
- , M32C_OPERAND_DST16_24_8_AN_RELATIVE_QI, M32C_OPERAND_DST16_24_16_AN_RELATIVE_QI, M32C_OPERAND_DST16_32_8_SB_RELATIVE_QI, M32C_OPERAND_DST16_32_16_SB_RELATIVE_QI
- , M32C_OPERAND_DST16_32_8_FB_RELATIVE_QI, M32C_OPERAND_DST16_32_8_AN_RELATIVE_QI, M32C_OPERAND_DST16_32_16_AN_RELATIVE_QI, M32C_OPERAND_DST16_40_8_SB_RELATIVE_QI
- , M32C_OPERAND_DST16_40_16_SB_RELATIVE_QI, M32C_OPERAND_DST16_40_8_FB_RELATIVE_QI, M32C_OPERAND_DST16_40_8_AN_RELATIVE_QI, M32C_OPERAND_DST16_40_16_AN_RELATIVE_QI
+ , M32C_OPERAND_DST16_16_16_AN_RELATIVE_QI, M32C_OPERAND_DST16_16_20_AN_RELATIVE_QI, M32C_OPERAND_DST16_24_8_SB_RELATIVE_QI, M32C_OPERAND_DST16_24_16_SB_RELATIVE_QI
+ , M32C_OPERAND_DST16_24_8_FB_RELATIVE_QI, M32C_OPERAND_DST16_24_8_AN_RELATIVE_QI, M32C_OPERAND_DST16_24_16_AN_RELATIVE_QI, M32C_OPERAND_DST16_24_20_AN_RELATIVE_QI
+ , M32C_OPERAND_DST16_32_8_SB_RELATIVE_QI, M32C_OPERAND_DST16_32_16_SB_RELATIVE_QI, M32C_OPERAND_DST16_32_8_FB_RELATIVE_QI, M32C_OPERAND_DST16_32_8_AN_RELATIVE_QI
+ , M32C_OPERAND_DST16_32_16_AN_RELATIVE_QI, M32C_OPERAND_DST16_32_20_AN_RELATIVE_QI, M32C_OPERAND_DST16_40_8_SB_RELATIVE_QI, M32C_OPERAND_DST16_40_16_SB_RELATIVE_QI
+ , M32C_OPERAND_DST16_40_8_FB_RELATIVE_QI, M32C_OPERAND_DST16_40_8_AN_RELATIVE_QI, M32C_OPERAND_DST16_40_16_AN_RELATIVE_QI, M32C_OPERAND_DST16_40_20_AN_RELATIVE_QI
, M32C_OPERAND_DST16_48_8_SB_RELATIVE_QI, M32C_OPERAND_DST16_48_16_SB_RELATIVE_QI, M32C_OPERAND_DST16_48_8_FB_RELATIVE_QI, M32C_OPERAND_DST16_48_8_AN_RELATIVE_QI
- , M32C_OPERAND_DST16_48_16_AN_RELATIVE_QI, M32C_OPERAND_DST16_16_8_SB_RELATIVE_HI, M32C_OPERAND_DST16_16_16_SB_RELATIVE_HI, M32C_OPERAND_DST16_16_8_FB_RELATIVE_HI
- , M32C_OPERAND_DST16_16_8_AN_RELATIVE_HI, M32C_OPERAND_DST16_16_16_AN_RELATIVE_HI, M32C_OPERAND_DST16_24_8_SB_RELATIVE_HI, M32C_OPERAND_DST16_24_16_SB_RELATIVE_HI
- , M32C_OPERAND_DST16_24_8_FB_RELATIVE_HI, M32C_OPERAND_DST16_24_8_AN_RELATIVE_HI, M32C_OPERAND_DST16_24_16_AN_RELATIVE_HI, M32C_OPERAND_DST16_32_8_SB_RELATIVE_HI
- , M32C_OPERAND_DST16_32_16_SB_RELATIVE_HI, M32C_OPERAND_DST16_32_8_FB_RELATIVE_HI, M32C_OPERAND_DST16_32_8_AN_RELATIVE_HI, M32C_OPERAND_DST16_32_16_AN_RELATIVE_HI
+ , M32C_OPERAND_DST16_48_16_AN_RELATIVE_QI, M32C_OPERAND_DST16_48_20_AN_RELATIVE_QI, M32C_OPERAND_DST16_16_8_SB_RELATIVE_HI, M32C_OPERAND_DST16_16_16_SB_RELATIVE_HI
+ , M32C_OPERAND_DST16_16_8_FB_RELATIVE_HI, M32C_OPERAND_DST16_16_8_AN_RELATIVE_HI, M32C_OPERAND_DST16_16_16_AN_RELATIVE_HI, M32C_OPERAND_DST16_16_20_AN_RELATIVE_HI
+ , M32C_OPERAND_DST16_24_8_SB_RELATIVE_HI, M32C_OPERAND_DST16_24_16_SB_RELATIVE_HI, M32C_OPERAND_DST16_24_8_FB_RELATIVE_HI, M32C_OPERAND_DST16_24_8_AN_RELATIVE_HI
+ , M32C_OPERAND_DST16_24_16_AN_RELATIVE_HI, M32C_OPERAND_DST16_24_20_AN_RELATIVE_HI, M32C_OPERAND_DST16_32_8_SB_RELATIVE_HI, M32C_OPERAND_DST16_32_16_SB_RELATIVE_HI
+ , M32C_OPERAND_DST16_32_8_FB_RELATIVE_HI, M32C_OPERAND_DST16_32_8_AN_RELATIVE_HI, M32C_OPERAND_DST16_32_16_AN_RELATIVE_HI, M32C_OPERAND_DST16_32_20_AN_RELATIVE_HI
, M32C_OPERAND_DST16_40_8_SB_RELATIVE_HI, M32C_OPERAND_DST16_40_16_SB_RELATIVE_HI, M32C_OPERAND_DST16_40_8_FB_RELATIVE_HI, M32C_OPERAND_DST16_40_8_AN_RELATIVE_HI
- , M32C_OPERAND_DST16_40_16_AN_RELATIVE_HI, M32C_OPERAND_DST16_48_8_SB_RELATIVE_HI, M32C_OPERAND_DST16_48_16_SB_RELATIVE_HI, M32C_OPERAND_DST16_48_8_FB_RELATIVE_HI
- , M32C_OPERAND_DST16_48_8_AN_RELATIVE_HI, M32C_OPERAND_DST16_48_16_AN_RELATIVE_HI, M32C_OPERAND_DST16_16_8_SB_RELATIVE_SI, M32C_OPERAND_DST16_16_16_SB_RELATIVE_SI
- , M32C_OPERAND_DST16_16_8_FB_RELATIVE_SI, M32C_OPERAND_DST16_16_8_AN_RELATIVE_SI, M32C_OPERAND_DST16_16_16_AN_RELATIVE_SI, M32C_OPERAND_DST16_24_8_SB_RELATIVE_SI
- , M32C_OPERAND_DST16_24_16_SB_RELATIVE_SI, M32C_OPERAND_DST16_24_8_FB_RELATIVE_SI, M32C_OPERAND_DST16_24_8_AN_RELATIVE_SI, M32C_OPERAND_DST16_24_16_AN_RELATIVE_SI
+ , M32C_OPERAND_DST16_40_16_AN_RELATIVE_HI, M32C_OPERAND_DST16_40_20_AN_RELATIVE_HI, M32C_OPERAND_DST16_48_8_SB_RELATIVE_HI, M32C_OPERAND_DST16_48_16_SB_RELATIVE_HI
+ , M32C_OPERAND_DST16_48_8_FB_RELATIVE_HI, M32C_OPERAND_DST16_48_8_AN_RELATIVE_HI, M32C_OPERAND_DST16_48_16_AN_RELATIVE_HI, M32C_OPERAND_DST16_48_20_AN_RELATIVE_HI
+ , M32C_OPERAND_DST16_16_8_SB_RELATIVE_SI, M32C_OPERAND_DST16_16_16_SB_RELATIVE_SI, M32C_OPERAND_DST16_16_8_FB_RELATIVE_SI, M32C_OPERAND_DST16_16_8_AN_RELATIVE_SI
+ , M32C_OPERAND_DST16_16_16_AN_RELATIVE_SI, M32C_OPERAND_DST16_16_20_AN_RELATIVE_SI, M32C_OPERAND_DST16_24_8_SB_RELATIVE_SI, M32C_OPERAND_DST16_24_16_SB_RELATIVE_SI
+ , M32C_OPERAND_DST16_24_8_FB_RELATIVE_SI, M32C_OPERAND_DST16_24_8_AN_RELATIVE_SI, M32C_OPERAND_DST16_24_16_AN_RELATIVE_SI, M32C_OPERAND_DST16_24_20_AN_RELATIVE_SI
, M32C_OPERAND_DST16_32_8_SB_RELATIVE_SI, M32C_OPERAND_DST16_32_16_SB_RELATIVE_SI, M32C_OPERAND_DST16_32_8_FB_RELATIVE_SI, M32C_OPERAND_DST16_32_8_AN_RELATIVE_SI
- , M32C_OPERAND_DST16_32_16_AN_RELATIVE_SI, M32C_OPERAND_DST16_40_8_SB_RELATIVE_SI, M32C_OPERAND_DST16_40_16_SB_RELATIVE_SI, M32C_OPERAND_DST16_40_8_FB_RELATIVE_SI
- , M32C_OPERAND_DST16_40_8_AN_RELATIVE_SI, M32C_OPERAND_DST16_40_16_AN_RELATIVE_SI, M32C_OPERAND_DST16_48_8_SB_RELATIVE_SI, M32C_OPERAND_DST16_48_16_SB_RELATIVE_SI
- , M32C_OPERAND_DST16_48_8_FB_RELATIVE_SI, M32C_OPERAND_DST16_48_8_AN_RELATIVE_SI, M32C_OPERAND_DST16_48_16_AN_RELATIVE_SI, M32C_OPERAND_DST16_16_8_SB_RELATIVE_EXT_QI
- , M32C_OPERAND_DST16_16_16_SB_RELATIVE_EXT_QI, M32C_OPERAND_DST16_16_8_FB_RELATIVE_EXT_QI, M32C_OPERAND_DST16_16_8_AN_RELATIVE_EXT_QI, M32C_OPERAND_DST16_16_16_AN_RELATIVE_EXT_QI
- , M32C_OPERAND_DST32_16_8_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_16_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_8_FB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_16_FB_RELATIVE_UNPREFIXED_QI
- , M32C_OPERAND_DST32_16_8_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_16_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_24_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_24_8_SB_RELATIVE_UNPREFIXED_QI
- , M32C_OPERAND_DST32_24_16_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_24_8_FB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_24_16_FB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_24_8_AN_RELATIVE_UNPREFIXED_QI
- , M32C_OPERAND_DST32_24_16_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_24_24_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_8_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_16_SB_RELATIVE_UNPREFIXED_QI
- , M32C_OPERAND_DST32_32_8_FB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_16_FB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_8_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_16_AN_RELATIVE_UNPREFIXED_QI
- , M32C_OPERAND_DST32_32_24_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_40_8_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_40_16_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_40_8_FB_RELATIVE_UNPREFIXED_QI
- , M32C_OPERAND_DST32_40_16_FB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_40_8_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_40_16_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_40_24_AN_RELATIVE_UNPREFIXED_QI
- , M32C_OPERAND_DST32_16_8_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_16_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_8_FB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_16_FB_RELATIVE_UNPREFIXED_HI
- , M32C_OPERAND_DST32_16_8_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_16_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_24_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_24_8_SB_RELATIVE_UNPREFIXED_HI
- , M32C_OPERAND_DST32_24_16_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_24_8_FB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_24_16_FB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_24_8_AN_RELATIVE_UNPREFIXED_HI
- , M32C_OPERAND_DST32_24_16_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_24_24_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_8_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_16_SB_RELATIVE_UNPREFIXED_HI
- , M32C_OPERAND_DST32_32_8_FB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_16_FB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_8_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_16_AN_RELATIVE_UNPREFIXED_HI
- , M32C_OPERAND_DST32_32_24_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_40_8_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_40_16_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_40_8_FB_RELATIVE_UNPREFIXED_HI
- , M32C_OPERAND_DST32_40_16_FB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_40_8_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_40_16_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_40_24_AN_RELATIVE_UNPREFIXED_HI
- , M32C_OPERAND_DST32_16_8_SB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_16_16_SB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_16_8_FB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_16_16_FB_RELATIVE_UNPREFIXED_SI
- , M32C_OPERAND_DST32_16_8_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_16_16_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_16_24_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_8_SB_RELATIVE_UNPREFIXED_SI
- , M32C_OPERAND_DST32_24_16_SB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_8_FB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_16_FB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_8_AN_RELATIVE_UNPREFIXED_SI
- , M32C_OPERAND_DST32_24_16_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_24_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_8_SB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_16_SB_RELATIVE_UNPREFIXED_SI
- , M32C_OPERAND_DST32_32_8_FB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_16_FB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_8_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_16_AN_RELATIVE_UNPREFIXED_SI
- , M32C_OPERAND_DST32_32_24_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_40_8_SB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_40_16_SB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_40_8_FB_RELATIVE_UNPREFIXED_SI
- , M32C_OPERAND_DST32_40_16_FB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_40_8_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_40_16_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_40_24_AN_RELATIVE_UNPREFIXED_SI
- , M32C_OPERAND_DST32_24_8_SB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_24_16_SB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_24_8_FB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_24_16_FB_RELATIVE_PREFIXED_QI
- , M32C_OPERAND_DST32_24_8_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_24_16_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_24_24_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_32_8_SB_RELATIVE_PREFIXED_QI
- , M32C_OPERAND_DST32_32_16_SB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_32_8_FB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_32_16_FB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_32_8_AN_RELATIVE_PREFIXED_QI
- , M32C_OPERAND_DST32_32_16_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_32_24_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_40_8_SB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_40_16_SB_RELATIVE_PREFIXED_QI
- , M32C_OPERAND_DST32_40_8_FB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_40_16_FB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_40_8_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_40_16_AN_RELATIVE_PREFIXED_QI
- , M32C_OPERAND_DST32_40_24_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_48_8_SB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_48_16_SB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_48_8_FB_RELATIVE_PREFIXED_QI
- , M32C_OPERAND_DST32_48_16_FB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_48_8_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_48_16_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_48_24_AN_RELATIVE_PREFIXED_QI
- , M32C_OPERAND_DST32_24_8_SB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_24_16_SB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_24_8_FB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_24_16_FB_RELATIVE_PREFIXED_HI
- , M32C_OPERAND_DST32_24_8_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_24_16_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_24_24_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_32_8_SB_RELATIVE_PREFIXED_HI
- , M32C_OPERAND_DST32_32_16_SB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_32_8_FB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_32_16_FB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_32_8_AN_RELATIVE_PREFIXED_HI
- , M32C_OPERAND_DST32_32_16_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_32_24_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_40_8_SB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_40_16_SB_RELATIVE_PREFIXED_HI
- , M32C_OPERAND_DST32_40_8_FB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_40_16_FB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_40_8_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_40_16_AN_RELATIVE_PREFIXED_HI
- , M32C_OPERAND_DST32_40_24_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_48_8_SB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_48_16_SB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_48_8_FB_RELATIVE_PREFIXED_HI
- , M32C_OPERAND_DST32_48_16_FB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_48_8_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_48_16_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_48_24_AN_RELATIVE_PREFIXED_HI
- , M32C_OPERAND_DST32_24_8_SB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_24_16_SB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_24_8_FB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_24_16_FB_RELATIVE_PREFIXED_SI
- , M32C_OPERAND_DST32_24_8_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_24_16_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_24_24_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_32_8_SB_RELATIVE_PREFIXED_SI
- , M32C_OPERAND_DST32_32_16_SB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_32_8_FB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_32_16_FB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_32_8_AN_RELATIVE_PREFIXED_SI
- , M32C_OPERAND_DST32_32_16_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_32_24_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_40_8_SB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_40_16_SB_RELATIVE_PREFIXED_SI
- , M32C_OPERAND_DST32_40_8_FB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_40_16_FB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_40_8_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_40_16_AN_RELATIVE_PREFIXED_SI
- , M32C_OPERAND_DST32_40_24_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_48_8_SB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_48_16_SB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_48_8_FB_RELATIVE_PREFIXED_SI
- , M32C_OPERAND_DST32_48_16_FB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_48_8_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_48_16_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_48_24_AN_RELATIVE_PREFIXED_SI
- , M32C_OPERAND_DST32_16_8_SB_RELATIVE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_16_SB_RELATIVE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_8_FB_RELATIVE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_16_FB_RELATIVE_EXTUNPREFIXED_QI
- , M32C_OPERAND_DST32_16_8_AN_RELATIVE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_16_AN_RELATIVE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_24_AN_RELATIVE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_8_SB_RELATIVE_EXTUNPREFIXED_HI
- , M32C_OPERAND_DST32_16_16_SB_RELATIVE_EXTUNPREFIXED_HI, M32C_OPERAND_DST32_16_8_FB_RELATIVE_EXTUNPREFIXED_HI, M32C_OPERAND_DST32_16_16_FB_RELATIVE_EXTUNPREFIXED_HI, M32C_OPERAND_DST32_16_8_AN_RELATIVE_EXTUNPREFIXED_HI
- , M32C_OPERAND_DST32_16_16_AN_RELATIVE_EXTUNPREFIXED_HI, M32C_OPERAND_DST32_16_24_AN_RELATIVE_EXTUNPREFIXED_HI, M32C_OPERAND_DST16_16_16_ABSOLUTE_QI, M32C_OPERAND_DST16_24_16_ABSOLUTE_QI
- , M32C_OPERAND_DST16_32_16_ABSOLUTE_QI, M32C_OPERAND_DST16_40_16_ABSOLUTE_QI, M32C_OPERAND_DST16_48_16_ABSOLUTE_QI, M32C_OPERAND_DST16_16_16_ABSOLUTE_HI
- , M32C_OPERAND_DST16_24_16_ABSOLUTE_HI, M32C_OPERAND_DST16_32_16_ABSOLUTE_HI, M32C_OPERAND_DST16_40_16_ABSOLUTE_HI, M32C_OPERAND_DST16_48_16_ABSOLUTE_HI
- , M32C_OPERAND_DST16_16_16_ABSOLUTE_SI, M32C_OPERAND_DST16_24_16_ABSOLUTE_SI, M32C_OPERAND_DST16_32_16_ABSOLUTE_SI, M32C_OPERAND_DST16_40_16_ABSOLUTE_SI
- , M32C_OPERAND_DST16_48_16_ABSOLUTE_SI, M32C_OPERAND_DST16_16_16_ABSOLUTE_EXT_QI, M32C_OPERAND_DST32_16_16_ABSOLUTE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_24_ABSOLUTE_UNPREFIXED_QI
- , M32C_OPERAND_DST32_24_16_ABSOLUTE_UNPREFIXED_QI, M32C_OPERAND_DST32_24_24_ABSOLUTE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_16_ABSOLUTE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_24_ABSOLUTE_UNPREFIXED_QI
- , M32C_OPERAND_DST32_40_16_ABSOLUTE_UNPREFIXED_QI, M32C_OPERAND_DST32_40_24_ABSOLUTE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_16_ABSOLUTE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_24_ABSOLUTE_UNPREFIXED_HI
- , M32C_OPERAND_DST32_24_16_ABSOLUTE_UNPREFIXED_HI, M32C_OPERAND_DST32_24_24_ABSOLUTE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_16_ABSOLUTE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_24_ABSOLUTE_UNPREFIXED_HI
- , M32C_OPERAND_DST32_40_16_ABSOLUTE_UNPREFIXED_HI, M32C_OPERAND_DST32_40_24_ABSOLUTE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_16_ABSOLUTE_UNPREFIXED_SI, M32C_OPERAND_DST32_16_24_ABSOLUTE_UNPREFIXED_SI
- , M32C_OPERAND_DST32_24_16_ABSOLUTE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_24_ABSOLUTE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_16_ABSOLUTE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_24_ABSOLUTE_UNPREFIXED_SI
- , M32C_OPERAND_DST32_40_16_ABSOLUTE_UNPREFIXED_SI, M32C_OPERAND_DST32_40_24_ABSOLUTE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_16_ABSOLUTE_PREFIXED_QI, M32C_OPERAND_DST32_24_24_ABSOLUTE_PREFIXED_QI
- , M32C_OPERAND_DST32_32_16_ABSOLUTE_PREFIXED_QI, M32C_OPERAND_DST32_32_24_ABSOLUTE_PREFIXED_QI, M32C_OPERAND_DST32_40_16_ABSOLUTE_PREFIXED_QI, M32C_OPERAND_DST32_40_24_ABSOLUTE_PREFIXED_QI
- , M32C_OPERAND_DST32_48_16_ABSOLUTE_PREFIXED_QI, M32C_OPERAND_DST32_48_24_ABSOLUTE_PREFIXED_QI, M32C_OPERAND_DST32_24_16_ABSOLUTE_PREFIXED_HI, M32C_OPERAND_DST32_24_24_ABSOLUTE_PREFIXED_HI
- , M32C_OPERAND_DST32_32_16_ABSOLUTE_PREFIXED_HI, M32C_OPERAND_DST32_32_24_ABSOLUTE_PREFIXED_HI, M32C_OPERAND_DST32_40_16_ABSOLUTE_PREFIXED_HI, M32C_OPERAND_DST32_40_24_ABSOLUTE_PREFIXED_HI
- , M32C_OPERAND_DST32_48_16_ABSOLUTE_PREFIXED_HI, M32C_OPERAND_DST32_48_24_ABSOLUTE_PREFIXED_HI, M32C_OPERAND_DST32_24_16_ABSOLUTE_PREFIXED_SI, M32C_OPERAND_DST32_24_24_ABSOLUTE_PREFIXED_SI
- , M32C_OPERAND_DST32_32_16_ABSOLUTE_PREFIXED_SI, M32C_OPERAND_DST32_32_24_ABSOLUTE_PREFIXED_SI, M32C_OPERAND_DST32_40_16_ABSOLUTE_PREFIXED_SI, M32C_OPERAND_DST32_40_24_ABSOLUTE_PREFIXED_SI
- , M32C_OPERAND_DST32_48_16_ABSOLUTE_PREFIXED_SI, M32C_OPERAND_DST32_48_24_ABSOLUTE_PREFIXED_SI, M32C_OPERAND_DST32_16_16_ABSOLUTE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_24_ABSOLUTE_EXTUNPREFIXED_QI
- , M32C_OPERAND_DST32_16_16_ABSOLUTE_EXTUNPREFIXED_HI, M32C_OPERAND_DST32_16_24_ABSOLUTE_EXTUNPREFIXED_HI, M32C_OPERAND_BIT16_RN_DIRECT, M32C_OPERAND_BIT32_RN_DIRECT_UNPREFIXED
- , M32C_OPERAND_BIT32_RN_DIRECT_PREFIXED, M32C_OPERAND_BIT16_AN_DIRECT, M32C_OPERAND_BIT32_AN_DIRECT_UNPREFIXED, M32C_OPERAND_BIT32_AN_DIRECT_PREFIXED
- , M32C_OPERAND_BIT16_AN_INDIRECT, M32C_OPERAND_BIT32_AN_INDIRECT_UNPREFIXED, M32C_OPERAND_BIT32_AN_INDIRECT_PREFIXED, M32C_OPERAND_BIT16_16_8_SB_RELATIVE
- , M32C_OPERAND_BIT16_16_16_SB_RELATIVE, M32C_OPERAND_BIT16_16_8_FB_RELATIVE, M32C_OPERAND_BIT16_16_8_AN_RELATIVE, M32C_OPERAND_BIT16_16_16_AN_RELATIVE
- , M32C_OPERAND_BIT32_16_11_SB_RELATIVE_UNPREFIXED, M32C_OPERAND_BIT32_16_19_SB_RELATIVE_UNPREFIXED, M32C_OPERAND_BIT32_16_11_FB_RELATIVE_UNPREFIXED, M32C_OPERAND_BIT32_16_19_FB_RELATIVE_UNPREFIXED
- , M32C_OPERAND_BIT32_16_11_AN_RELATIVE_UNPREFIXED, M32C_OPERAND_BIT32_16_19_AN_RELATIVE_UNPREFIXED, M32C_OPERAND_BIT32_16_27_AN_RELATIVE_UNPREFIXED, M32C_OPERAND_BIT32_24_11_SB_RELATIVE_PREFIXED
- , M32C_OPERAND_BIT32_24_19_SB_RELATIVE_PREFIXED, M32C_OPERAND_BIT32_24_11_FB_RELATIVE_PREFIXED, M32C_OPERAND_BIT32_24_19_FB_RELATIVE_PREFIXED, M32C_OPERAND_BIT32_24_11_AN_RELATIVE_PREFIXED
- , M32C_OPERAND_BIT32_24_19_AN_RELATIVE_PREFIXED, M32C_OPERAND_BIT32_24_27_AN_RELATIVE_PREFIXED, M32C_OPERAND_BIT16_11_SB_RELATIVE_S, M32C_OPERAND_RN16_PUSH_S_DERIVED
- , M32C_OPERAND_AN16_PUSH_S_DERIVED, M32C_OPERAND_BIT16_16_16_ABSOLUTE, M32C_OPERAND_BIT32_16_19_ABSOLUTE_UNPREFIXED, M32C_OPERAND_BIT32_16_27_ABSOLUTE_UNPREFIXED
- , M32C_OPERAND_BIT32_24_19_ABSOLUTE_PREFIXED, M32C_OPERAND_BIT32_24_27_ABSOLUTE_PREFIXED, M32C_OPERAND_DST16_3_S_R0L_DIRECT_QI, M32C_OPERAND_DST16_3_S_R0H_DIRECT_QI
- , M32C_OPERAND_DST16_3_S_8_8_SB_RELATIVE_QI, M32C_OPERAND_DST16_3_S_8_8_FB_RELATIVE_QI, M32C_OPERAND_DST16_3_S_8_16_ABSOLUTE_QI, M32C_OPERAND_DST16_3_S_16_8_SB_RELATIVE_QI
- , M32C_OPERAND_DST16_3_S_16_8_FB_RELATIVE_QI, M32C_OPERAND_DST16_3_S_16_16_ABSOLUTE_QI, M32C_OPERAND_SRCDST16_R0L_R0H_S_DERIVED, M32C_OPERAND_DST32_2_S_R0L_DIRECT_QI
- , M32C_OPERAND_DST32_2_S_R0_DIRECT_HI, M32C_OPERAND_DST32_1_S_A0_DIRECT_HI, M32C_OPERAND_DST32_1_S_A1_DIRECT_HI, M32C_OPERAND_DST32_2_S_8_SB_RELATIVE_QI
- , M32C_OPERAND_DST32_2_S_8_FB_RELATIVE_QI, M32C_OPERAND_DST32_2_S_16_ABSOLUTE_QI, M32C_OPERAND_DST32_2_S_8_SB_RELATIVE_HI, M32C_OPERAND_DST32_2_S_8_FB_RELATIVE_HI
- , M32C_OPERAND_DST32_2_S_16_ABSOLUTE_HI, M32C_OPERAND_DST32_2_S_8_SB_RELATIVE_SI, M32C_OPERAND_DST32_2_S_8_FB_RELATIVE_SI, M32C_OPERAND_DST32_2_S_16_ABSOLUTE_SI
- , M32C_OPERAND_SRC16_BASIC_QI, M32C_OPERAND_SRC16_BASIC_HI, M32C_OPERAND_SRC32_BASIC_UNPREFIXED_QI, M32C_OPERAND_SRC32_BASIC_PREFIXED_QI
- , M32C_OPERAND_SRC32_BASIC_UNPREFIXED_HI, M32C_OPERAND_SRC32_BASIC_PREFIXED_HI, M32C_OPERAND_SRC32_BASIC_UNPREFIXED_SI, M32C_OPERAND_SRC32_BASIC_PREFIXED_SI
- , M32C_OPERAND_SRC32_BASIC_EXTPREFIXED_QI, M32C_OPERAND_SRC16_16_8_QI, M32C_OPERAND_SRC16_16_16_QI, M32C_OPERAND_SRC16_16_8_HI
- , M32C_OPERAND_SRC16_16_16_HI, M32C_OPERAND_SRC32_16_8_UNPREFIXED_QI, M32C_OPERAND_SRC32_16_16_UNPREFIXED_QI, M32C_OPERAND_SRC32_16_24_UNPREFIXED_QI
- , M32C_OPERAND_SRC32_16_8_UNPREFIXED_HI, M32C_OPERAND_SRC32_16_16_UNPREFIXED_HI, M32C_OPERAND_SRC32_16_24_UNPREFIXED_HI, M32C_OPERAND_SRC32_16_8_UNPREFIXED_SI
- , M32C_OPERAND_SRC32_16_16_UNPREFIXED_SI, M32C_OPERAND_SRC32_16_24_UNPREFIXED_SI, M32C_OPERAND_SRC32_24_8_PREFIXED_QI, M32C_OPERAND_SRC32_24_16_PREFIXED_QI
- , M32C_OPERAND_SRC32_24_24_PREFIXED_QI, M32C_OPERAND_SRC32_24_8_PREFIXED_HI, M32C_OPERAND_SRC32_24_16_PREFIXED_HI, M32C_OPERAND_SRC32_24_24_PREFIXED_HI
- , M32C_OPERAND_SRC32_24_8_PREFIXED_SI, M32C_OPERAND_SRC32_24_16_PREFIXED_SI, M32C_OPERAND_SRC32_24_24_PREFIXED_SI, M32C_OPERAND_DST16_BASIC_QI
- , M32C_OPERAND_DST16_BASIC_HI, M32C_OPERAND_DST16_BASIC_SI, M32C_OPERAND_DST32_BASIC_UNPREFIXED_QI, M32C_OPERAND_DST32_BASIC_PREFIXED_QI
- , M32C_OPERAND_DST32_BASIC_UNPREFIXED_HI, M32C_OPERAND_DST32_BASIC_PREFIXED_HI, M32C_OPERAND_DST32_BASIC_UNPREFIXED_SI, M32C_OPERAND_DST32_BASIC_PREFIXED_SI
- , M32C_OPERAND_DST16_16_QI, M32C_OPERAND_DST16_16_8_QI, M32C_OPERAND_DST16_16_16_QI, M32C_OPERAND_DST16_16_HI
- , M32C_OPERAND_DST16_16_8_HI, M32C_OPERAND_DST16_16_16_HI, M32C_OPERAND_DST16_16_SI, M32C_OPERAND_DST16_16_8_SI
- , M32C_OPERAND_DST16_16_16_SI, M32C_OPERAND_DST16_16_EXT_QI, M32C_OPERAND_DST16_AN_INDIRECT_MOVA_HI, M32C_OPERAND_DST16_16_8_AN_RELATIVE_MOVA_HI
- , M32C_OPERAND_DST16_16_16_AN_RELATIVE_MOVA_HI, M32C_OPERAND_DST16_16_8_SB_RELATIVE_MOVA_HI, M32C_OPERAND_DST16_16_16_SB_RELATIVE_MOVA_HI, M32C_OPERAND_DST16_16_8_FB_RELATIVE_MOVA_HI
- , M32C_OPERAND_DST16_16_16_ABSOLUTE_MOVA_HI, M32C_OPERAND_DST16_16_MOVA_HI, M32C_OPERAND_DST32_AN_INDIRECT_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_8_AN_RELATIVE_UNPREFIXED_MOVA_SI
- , M32C_OPERAND_DST32_16_16_AN_RELATIVE_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_24_AN_RELATIVE_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_8_SB_RELATIVE_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_16_SB_RELATIVE_UNPREFIXED_MOVA_SI
- , M32C_OPERAND_DST32_16_8_FB_RELATIVE_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_16_FB_RELATIVE_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_16_ABSOLUTE_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_24_ABSOLUTE_UNPREFIXED_MOVA_SI
- , M32C_OPERAND_DST32_16_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_UNPREFIXED_QI, M32C_OPERAND_DST32_16_8_UNPREFIXED_QI, M32C_OPERAND_DST32_16_16_UNPREFIXED_QI
- , M32C_OPERAND_DST32_16_24_UNPREFIXED_QI, M32C_OPERAND_DST32_16_UNPREFIXED_HI, M32C_OPERAND_DST32_16_8_UNPREFIXED_HI, M32C_OPERAND_DST32_16_16_UNPREFIXED_HI
- , M32C_OPERAND_DST32_16_24_UNPREFIXED_HI, M32C_OPERAND_DST32_16_UNPREFIXED_SI, M32C_OPERAND_DST32_16_8_UNPREFIXED_SI, M32C_OPERAND_DST32_16_16_UNPREFIXED_SI
+ , M32C_OPERAND_DST16_32_16_AN_RELATIVE_SI, M32C_OPERAND_DST16_32_20_AN_RELATIVE_SI, M32C_OPERAND_DST16_40_8_SB_RELATIVE_SI, M32C_OPERAND_DST16_40_16_SB_RELATIVE_SI
+ , M32C_OPERAND_DST16_40_8_FB_RELATIVE_SI, M32C_OPERAND_DST16_40_8_AN_RELATIVE_SI, M32C_OPERAND_DST16_40_16_AN_RELATIVE_SI, M32C_OPERAND_DST16_40_20_AN_RELATIVE_SI
+ , M32C_OPERAND_DST16_48_8_SB_RELATIVE_SI, M32C_OPERAND_DST16_48_16_SB_RELATIVE_SI, M32C_OPERAND_DST16_48_8_FB_RELATIVE_SI, M32C_OPERAND_DST16_48_8_AN_RELATIVE_SI
+ , M32C_OPERAND_DST16_48_16_AN_RELATIVE_SI, M32C_OPERAND_DST16_48_20_AN_RELATIVE_SI, M32C_OPERAND_DST16_16_8_SB_RELATIVE_EXT_QI, M32C_OPERAND_DST16_16_16_SB_RELATIVE_EXT_QI
+ , M32C_OPERAND_DST16_16_8_FB_RELATIVE_EXT_QI, M32C_OPERAND_DST16_16_8_AN_RELATIVE_EXT_QI, M32C_OPERAND_DST16_16_16_AN_RELATIVE_EXT_QI, M32C_OPERAND_DST32_16_8_SB_RELATIVE_UNPREFIXED_QI
+ , M32C_OPERAND_DST32_16_16_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_8_FB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_16_FB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_8_AN_RELATIVE_UNPREFIXED_QI
+ , M32C_OPERAND_DST32_16_16_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_24_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_24_8_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_24_16_SB_RELATIVE_UNPREFIXED_QI
+ , M32C_OPERAND_DST32_24_8_FB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_24_16_FB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_24_8_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_24_16_AN_RELATIVE_UNPREFIXED_QI
+ , M32C_OPERAND_DST32_24_24_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_8_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_16_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_8_FB_RELATIVE_UNPREFIXED_QI
+ , M32C_OPERAND_DST32_32_16_FB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_8_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_16_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_24_AN_RELATIVE_UNPREFIXED_QI
+ , M32C_OPERAND_DST32_40_8_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_40_16_SB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_40_8_FB_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_40_16_FB_RELATIVE_UNPREFIXED_QI
+ , M32C_OPERAND_DST32_40_8_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_40_16_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_40_24_AN_RELATIVE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_8_SB_RELATIVE_UNPREFIXED_HI
+ , M32C_OPERAND_DST32_16_16_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_8_FB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_16_FB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_8_AN_RELATIVE_UNPREFIXED_HI
+ , M32C_OPERAND_DST32_16_16_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_24_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_24_8_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_24_16_SB_RELATIVE_UNPREFIXED_HI
+ , M32C_OPERAND_DST32_24_8_FB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_24_16_FB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_24_8_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_24_16_AN_RELATIVE_UNPREFIXED_HI
+ , M32C_OPERAND_DST32_24_24_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_8_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_16_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_8_FB_RELATIVE_UNPREFIXED_HI
+ , M32C_OPERAND_DST32_32_16_FB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_8_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_16_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_24_AN_RELATIVE_UNPREFIXED_HI
+ , M32C_OPERAND_DST32_40_8_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_40_16_SB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_40_8_FB_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_40_16_FB_RELATIVE_UNPREFIXED_HI
+ , M32C_OPERAND_DST32_40_8_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_40_16_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_40_24_AN_RELATIVE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_8_SB_RELATIVE_UNPREFIXED_SI
+ , M32C_OPERAND_DST32_16_16_SB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_16_8_FB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_16_16_FB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_16_8_AN_RELATIVE_UNPREFIXED_SI
+ , M32C_OPERAND_DST32_16_16_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_16_24_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_8_SB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_16_SB_RELATIVE_UNPREFIXED_SI
+ , M32C_OPERAND_DST32_24_8_FB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_16_FB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_8_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_16_AN_RELATIVE_UNPREFIXED_SI
+ , M32C_OPERAND_DST32_24_24_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_8_SB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_16_SB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_8_FB_RELATIVE_UNPREFIXED_SI
+ , M32C_OPERAND_DST32_32_16_FB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_8_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_16_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_24_AN_RELATIVE_UNPREFIXED_SI
+ , M32C_OPERAND_DST32_40_8_SB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_40_16_SB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_40_8_FB_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_40_16_FB_RELATIVE_UNPREFIXED_SI
+ , M32C_OPERAND_DST32_40_8_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_40_16_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_40_24_AN_RELATIVE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_8_SB_RELATIVE_PREFIXED_QI
+ , M32C_OPERAND_DST32_24_16_SB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_24_8_FB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_24_16_FB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_24_8_AN_RELATIVE_PREFIXED_QI
+ , M32C_OPERAND_DST32_24_16_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_24_24_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_32_8_SB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_32_16_SB_RELATIVE_PREFIXED_QI
+ , M32C_OPERAND_DST32_32_8_FB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_32_16_FB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_32_8_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_32_16_AN_RELATIVE_PREFIXED_QI
+ , M32C_OPERAND_DST32_32_24_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_40_8_SB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_40_16_SB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_40_8_FB_RELATIVE_PREFIXED_QI
+ , M32C_OPERAND_DST32_40_16_FB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_40_8_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_40_16_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_40_24_AN_RELATIVE_PREFIXED_QI
+ , M32C_OPERAND_DST32_48_8_SB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_48_16_SB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_48_8_FB_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_48_16_FB_RELATIVE_PREFIXED_QI
+ , M32C_OPERAND_DST32_48_8_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_48_16_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_48_24_AN_RELATIVE_PREFIXED_QI, M32C_OPERAND_DST32_24_8_SB_RELATIVE_PREFIXED_HI
+ , M32C_OPERAND_DST32_24_16_SB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_24_8_FB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_24_16_FB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_24_8_AN_RELATIVE_PREFIXED_HI
+ , M32C_OPERAND_DST32_24_16_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_24_24_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_32_8_SB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_32_16_SB_RELATIVE_PREFIXED_HI
+ , M32C_OPERAND_DST32_32_8_FB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_32_16_FB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_32_8_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_32_16_AN_RELATIVE_PREFIXED_HI
+ , M32C_OPERAND_DST32_32_24_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_40_8_SB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_40_16_SB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_40_8_FB_RELATIVE_PREFIXED_HI
+ , M32C_OPERAND_DST32_40_16_FB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_40_8_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_40_16_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_40_24_AN_RELATIVE_PREFIXED_HI
+ , M32C_OPERAND_DST32_48_8_SB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_48_16_SB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_48_8_FB_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_48_16_FB_RELATIVE_PREFIXED_HI
+ , M32C_OPERAND_DST32_48_8_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_48_16_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_48_24_AN_RELATIVE_PREFIXED_HI, M32C_OPERAND_DST32_24_8_SB_RELATIVE_PREFIXED_SI
+ , M32C_OPERAND_DST32_24_16_SB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_24_8_FB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_24_16_FB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_24_8_AN_RELATIVE_PREFIXED_SI
+ , M32C_OPERAND_DST32_24_16_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_24_24_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_32_8_SB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_32_16_SB_RELATIVE_PREFIXED_SI
+ , M32C_OPERAND_DST32_32_8_FB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_32_16_FB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_32_8_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_32_16_AN_RELATIVE_PREFIXED_SI
+ , M32C_OPERAND_DST32_32_24_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_40_8_SB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_40_16_SB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_40_8_FB_RELATIVE_PREFIXED_SI
+ , M32C_OPERAND_DST32_40_16_FB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_40_8_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_40_16_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_40_24_AN_RELATIVE_PREFIXED_SI
+ , M32C_OPERAND_DST32_48_8_SB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_48_16_SB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_48_8_FB_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_48_16_FB_RELATIVE_PREFIXED_SI
+ , M32C_OPERAND_DST32_48_8_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_48_16_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_48_24_AN_RELATIVE_PREFIXED_SI, M32C_OPERAND_DST32_16_8_SB_RELATIVE_EXTUNPREFIXED_QI
+ , M32C_OPERAND_DST32_16_16_SB_RELATIVE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_8_FB_RELATIVE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_16_FB_RELATIVE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_8_AN_RELATIVE_EXTUNPREFIXED_QI
+ , M32C_OPERAND_DST32_16_16_AN_RELATIVE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_24_AN_RELATIVE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_8_SB_RELATIVE_EXTUNPREFIXED_HI, M32C_OPERAND_DST32_16_16_SB_RELATIVE_EXTUNPREFIXED_HI
+ , M32C_OPERAND_DST32_16_8_FB_RELATIVE_EXTUNPREFIXED_HI, M32C_OPERAND_DST32_16_16_FB_RELATIVE_EXTUNPREFIXED_HI, M32C_OPERAND_DST32_16_8_AN_RELATIVE_EXTUNPREFIXED_HI, M32C_OPERAND_DST32_16_16_AN_RELATIVE_EXTUNPREFIXED_HI
+ , M32C_OPERAND_DST32_16_24_AN_RELATIVE_EXTUNPREFIXED_HI, M32C_OPERAND_DST16_16_16_ABSOLUTE_QI, M32C_OPERAND_DST16_24_16_ABSOLUTE_QI, M32C_OPERAND_DST16_32_16_ABSOLUTE_QI
+ , M32C_OPERAND_DST16_40_16_ABSOLUTE_QI, M32C_OPERAND_DST16_48_16_ABSOLUTE_QI, M32C_OPERAND_DST16_16_16_ABSOLUTE_HI, M32C_OPERAND_DST16_24_16_ABSOLUTE_HI
+ , M32C_OPERAND_DST16_32_16_ABSOLUTE_HI, M32C_OPERAND_DST16_40_16_ABSOLUTE_HI, M32C_OPERAND_DST16_48_16_ABSOLUTE_HI, M32C_OPERAND_DST16_16_16_ABSOLUTE_SI
+ , M32C_OPERAND_DST16_24_16_ABSOLUTE_SI, M32C_OPERAND_DST16_32_16_ABSOLUTE_SI, M32C_OPERAND_DST16_40_16_ABSOLUTE_SI, M32C_OPERAND_DST16_48_16_ABSOLUTE_SI
+ , M32C_OPERAND_DST16_16_16_ABSOLUTE_EXT_QI, M32C_OPERAND_DST32_16_16_ABSOLUTE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_24_ABSOLUTE_UNPREFIXED_QI, M32C_OPERAND_DST32_24_16_ABSOLUTE_UNPREFIXED_QI
+ , M32C_OPERAND_DST32_24_24_ABSOLUTE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_16_ABSOLUTE_UNPREFIXED_QI, M32C_OPERAND_DST32_32_24_ABSOLUTE_UNPREFIXED_QI, M32C_OPERAND_DST32_40_16_ABSOLUTE_UNPREFIXED_QI
+ , M32C_OPERAND_DST32_40_24_ABSOLUTE_UNPREFIXED_QI, M32C_OPERAND_DST32_16_16_ABSOLUTE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_24_ABSOLUTE_UNPREFIXED_HI, M32C_OPERAND_DST32_24_16_ABSOLUTE_UNPREFIXED_HI
+ , M32C_OPERAND_DST32_24_24_ABSOLUTE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_16_ABSOLUTE_UNPREFIXED_HI, M32C_OPERAND_DST32_32_24_ABSOLUTE_UNPREFIXED_HI, M32C_OPERAND_DST32_40_16_ABSOLUTE_UNPREFIXED_HI
+ , M32C_OPERAND_DST32_40_24_ABSOLUTE_UNPREFIXED_HI, M32C_OPERAND_DST32_16_16_ABSOLUTE_UNPREFIXED_SI, M32C_OPERAND_DST32_16_24_ABSOLUTE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_16_ABSOLUTE_UNPREFIXED_SI
+ , M32C_OPERAND_DST32_24_24_ABSOLUTE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_16_ABSOLUTE_UNPREFIXED_SI, M32C_OPERAND_DST32_32_24_ABSOLUTE_UNPREFIXED_SI, M32C_OPERAND_DST32_40_16_ABSOLUTE_UNPREFIXED_SI
+ , M32C_OPERAND_DST32_40_24_ABSOLUTE_UNPREFIXED_SI, M32C_OPERAND_DST32_24_16_ABSOLUTE_PREFIXED_QI, M32C_OPERAND_DST32_24_24_ABSOLUTE_PREFIXED_QI, M32C_OPERAND_DST32_32_16_ABSOLUTE_PREFIXED_QI
+ , M32C_OPERAND_DST32_32_24_ABSOLUTE_PREFIXED_QI, M32C_OPERAND_DST32_40_16_ABSOLUTE_PREFIXED_QI, M32C_OPERAND_DST32_40_24_ABSOLUTE_PREFIXED_QI, M32C_OPERAND_DST32_48_16_ABSOLUTE_PREFIXED_QI
+ , M32C_OPERAND_DST32_48_24_ABSOLUTE_PREFIXED_QI, M32C_OPERAND_DST32_24_16_ABSOLUTE_PREFIXED_HI, M32C_OPERAND_DST32_24_24_ABSOLUTE_PREFIXED_HI, M32C_OPERAND_DST32_32_16_ABSOLUTE_PREFIXED_HI
+ , M32C_OPERAND_DST32_32_24_ABSOLUTE_PREFIXED_HI, M32C_OPERAND_DST32_40_16_ABSOLUTE_PREFIXED_HI, M32C_OPERAND_DST32_40_24_ABSOLUTE_PREFIXED_HI, M32C_OPERAND_DST32_48_16_ABSOLUTE_PREFIXED_HI
+ , M32C_OPERAND_DST32_48_24_ABSOLUTE_PREFIXED_HI, M32C_OPERAND_DST32_24_16_ABSOLUTE_PREFIXED_SI, M32C_OPERAND_DST32_24_24_ABSOLUTE_PREFIXED_SI, M32C_OPERAND_DST32_32_16_ABSOLUTE_PREFIXED_SI
+ , M32C_OPERAND_DST32_32_24_ABSOLUTE_PREFIXED_SI, M32C_OPERAND_DST32_40_16_ABSOLUTE_PREFIXED_SI, M32C_OPERAND_DST32_40_24_ABSOLUTE_PREFIXED_SI, M32C_OPERAND_DST32_48_16_ABSOLUTE_PREFIXED_SI
+ , M32C_OPERAND_DST32_48_24_ABSOLUTE_PREFIXED_SI, M32C_OPERAND_DST32_16_16_ABSOLUTE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_24_ABSOLUTE_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_16_ABSOLUTE_EXTUNPREFIXED_HI
+ , M32C_OPERAND_DST32_16_24_ABSOLUTE_EXTUNPREFIXED_HI, M32C_OPERAND_BIT16_RN_DIRECT, M32C_OPERAND_BIT32_RN_DIRECT_UNPREFIXED, M32C_OPERAND_BIT32_RN_DIRECT_PREFIXED
+ , M32C_OPERAND_BIT16_AN_DIRECT, M32C_OPERAND_BIT32_AN_DIRECT_UNPREFIXED, M32C_OPERAND_BIT32_AN_DIRECT_PREFIXED, M32C_OPERAND_BIT16_AN_INDIRECT
+ , M32C_OPERAND_BIT32_AN_INDIRECT_UNPREFIXED, M32C_OPERAND_BIT32_AN_INDIRECT_PREFIXED, M32C_OPERAND_BIT16_16_8_SB_RELATIVE, M32C_OPERAND_BIT16_16_16_SB_RELATIVE
+ , M32C_OPERAND_BIT16_16_8_FB_RELATIVE, M32C_OPERAND_BIT16_16_8_AN_RELATIVE, M32C_OPERAND_BIT16_16_16_AN_RELATIVE, M32C_OPERAND_BIT32_16_11_SB_RELATIVE_UNPREFIXED
+ , M32C_OPERAND_BIT32_16_19_SB_RELATIVE_UNPREFIXED, M32C_OPERAND_BIT32_16_11_FB_RELATIVE_UNPREFIXED, M32C_OPERAND_BIT32_16_19_FB_RELATIVE_UNPREFIXED, M32C_OPERAND_BIT32_16_11_AN_RELATIVE_UNPREFIXED
+ , M32C_OPERAND_BIT32_16_19_AN_RELATIVE_UNPREFIXED, M32C_OPERAND_BIT32_16_27_AN_RELATIVE_UNPREFIXED, M32C_OPERAND_BIT32_24_11_SB_RELATIVE_PREFIXED, M32C_OPERAND_BIT32_24_19_SB_RELATIVE_PREFIXED
+ , M32C_OPERAND_BIT32_24_11_FB_RELATIVE_PREFIXED, M32C_OPERAND_BIT32_24_19_FB_RELATIVE_PREFIXED, M32C_OPERAND_BIT32_24_11_AN_RELATIVE_PREFIXED, M32C_OPERAND_BIT32_24_19_AN_RELATIVE_PREFIXED
+ , M32C_OPERAND_BIT32_24_27_AN_RELATIVE_PREFIXED, M32C_OPERAND_BIT16_11_SB_RELATIVE_S, M32C_OPERAND_RN16_PUSH_S_DERIVED, M32C_OPERAND_AN16_PUSH_S_DERIVED
+ , M32C_OPERAND_BIT16_16_16_ABSOLUTE, M32C_OPERAND_BIT32_16_19_ABSOLUTE_UNPREFIXED, M32C_OPERAND_BIT32_16_27_ABSOLUTE_UNPREFIXED, M32C_OPERAND_BIT32_24_19_ABSOLUTE_PREFIXED
+ , M32C_OPERAND_BIT32_24_27_ABSOLUTE_PREFIXED, M32C_OPERAND_DST16_3_S_R0L_DIRECT_QI, M32C_OPERAND_DST16_3_S_R0H_DIRECT_QI, M32C_OPERAND_DST16_3_S_8_8_SB_RELATIVE_QI
+ , M32C_OPERAND_DST16_3_S_8_8_FB_RELATIVE_QI, M32C_OPERAND_DST16_3_S_8_16_ABSOLUTE_QI, M32C_OPERAND_DST16_3_S_16_8_SB_RELATIVE_QI, M32C_OPERAND_DST16_3_S_16_8_FB_RELATIVE_QI
+ , M32C_OPERAND_DST16_3_S_16_16_ABSOLUTE_QI, M32C_OPERAND_SRCDST16_R0L_R0H_S_DERIVED, M32C_OPERAND_DST32_2_S_R0L_DIRECT_QI, M32C_OPERAND_DST32_2_S_R0_DIRECT_HI
+ , M32C_OPERAND_DST32_1_S_A0_DIRECT_HI, M32C_OPERAND_DST32_1_S_A1_DIRECT_HI, M32C_OPERAND_DST32_2_S_8_SB_RELATIVE_QI, M32C_OPERAND_DST32_2_S_8_FB_RELATIVE_QI
+ , M32C_OPERAND_DST32_2_S_16_ABSOLUTE_QI, M32C_OPERAND_DST32_2_S_8_SB_RELATIVE_HI, M32C_OPERAND_DST32_2_S_8_FB_RELATIVE_HI, M32C_OPERAND_DST32_2_S_16_ABSOLUTE_HI
+ , M32C_OPERAND_DST32_2_S_8_SB_RELATIVE_SI, M32C_OPERAND_DST32_2_S_8_FB_RELATIVE_SI, M32C_OPERAND_DST32_2_S_16_ABSOLUTE_SI, M32C_OPERAND_SRC16_BASIC_QI
+ , M32C_OPERAND_SRC16_BASIC_HI, M32C_OPERAND_SRC32_BASIC_UNPREFIXED_QI, M32C_OPERAND_SRC32_BASIC_PREFIXED_QI, M32C_OPERAND_SRC32_BASIC_UNPREFIXED_HI
+ , M32C_OPERAND_SRC32_BASIC_PREFIXED_HI, M32C_OPERAND_SRC32_BASIC_UNPREFIXED_SI, M32C_OPERAND_SRC32_BASIC_PREFIXED_SI, M32C_OPERAND_SRC32_BASIC_EXTPREFIXED_QI
+ , M32C_OPERAND_SRC16_16_8_QI, M32C_OPERAND_SRC16_16_16_QI, M32C_OPERAND_SRC16_16_8_HI, M32C_OPERAND_SRC16_16_16_HI
+ , M32C_OPERAND_SRC32_16_8_UNPREFIXED_QI, M32C_OPERAND_SRC32_16_16_UNPREFIXED_QI, M32C_OPERAND_SRC32_16_24_UNPREFIXED_QI, M32C_OPERAND_SRC32_16_8_UNPREFIXED_HI
+ , M32C_OPERAND_SRC32_16_16_UNPREFIXED_HI, M32C_OPERAND_SRC32_16_24_UNPREFIXED_HI, M32C_OPERAND_SRC32_16_8_UNPREFIXED_SI, M32C_OPERAND_SRC32_16_16_UNPREFIXED_SI
+ , M32C_OPERAND_SRC32_16_24_UNPREFIXED_SI, M32C_OPERAND_SRC32_24_8_PREFIXED_QI, M32C_OPERAND_SRC32_24_16_PREFIXED_QI, M32C_OPERAND_SRC32_24_24_PREFIXED_QI
+ , M32C_OPERAND_SRC32_24_8_PREFIXED_HI, M32C_OPERAND_SRC32_24_16_PREFIXED_HI, M32C_OPERAND_SRC32_24_24_PREFIXED_HI, M32C_OPERAND_SRC32_24_8_PREFIXED_SI
+ , M32C_OPERAND_SRC32_24_16_PREFIXED_SI, M32C_OPERAND_SRC32_24_24_PREFIXED_SI, M32C_OPERAND_DST16_BASIC_QI, M32C_OPERAND_DST16_BASIC_HI
+ , M32C_OPERAND_DST16_BASIC_SI, M32C_OPERAND_DST32_BASIC_UNPREFIXED_QI, M32C_OPERAND_DST32_BASIC_PREFIXED_QI, M32C_OPERAND_DST32_BASIC_UNPREFIXED_HI
+ , M32C_OPERAND_DST32_BASIC_PREFIXED_HI, M32C_OPERAND_DST32_BASIC_UNPREFIXED_SI, M32C_OPERAND_DST32_BASIC_PREFIXED_SI, M32C_OPERAND_DST16_16_QI
+ , M32C_OPERAND_DST16_16_8_QI, M32C_OPERAND_DST16_16_16_QI, M32C_OPERAND_DST16_16_16SA_QI, M32C_OPERAND_DST16_16_20AR_QI
+ , M32C_OPERAND_DST16_16_HI, M32C_OPERAND_DST16_16_8_HI, M32C_OPERAND_DST16_16_16_HI, M32C_OPERAND_DST16_16_16SA_HI
+ , M32C_OPERAND_DST16_16_20AR_HI, M32C_OPERAND_DST16_16_SI, M32C_OPERAND_DST16_16_8_SI, M32C_OPERAND_DST16_16_16_SI
+ , M32C_OPERAND_DST16_16_16SA_SI, M32C_OPERAND_DST16_16_20AR_SI, M32C_OPERAND_DST16_16_EXT_QI, M32C_OPERAND_DST16_AN_INDIRECT_MOVA_HI
+ , M32C_OPERAND_DST16_16_8_AN_RELATIVE_MOVA_HI, M32C_OPERAND_DST16_16_16_AN_RELATIVE_MOVA_HI, M32C_OPERAND_DST16_16_8_SB_RELATIVE_MOVA_HI, M32C_OPERAND_DST16_16_16_SB_RELATIVE_MOVA_HI
+ , M32C_OPERAND_DST16_16_8_FB_RELATIVE_MOVA_HI, M32C_OPERAND_DST16_16_16_ABSOLUTE_MOVA_HI, M32C_OPERAND_DST16_16_MOVA_HI, M32C_OPERAND_DST32_AN_INDIRECT_UNPREFIXED_MOVA_SI
+ , M32C_OPERAND_DST32_16_8_AN_RELATIVE_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_16_AN_RELATIVE_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_24_AN_RELATIVE_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_8_SB_RELATIVE_UNPREFIXED_MOVA_SI
+ , M32C_OPERAND_DST32_16_16_SB_RELATIVE_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_8_FB_RELATIVE_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_16_FB_RELATIVE_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_16_ABSOLUTE_UNPREFIXED_MOVA_SI
+ , M32C_OPERAND_DST32_16_24_ABSOLUTE_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_UNPREFIXED_MOVA_SI, M32C_OPERAND_DST32_16_UNPREFIXED_QI, M32C_OPERAND_DST32_16_8_UNPREFIXED_QI
+ , M32C_OPERAND_DST32_16_16_UNPREFIXED_QI, M32C_OPERAND_DST32_16_16SA_UNPREFIXED_QI, M32C_OPERAND_DST32_16_24_UNPREFIXED_QI, M32C_OPERAND_DST32_16_UNPREFIXED_HI
+ , M32C_OPERAND_DST32_16_8_UNPREFIXED_HI, M32C_OPERAND_DST32_16_16_UNPREFIXED_HI, M32C_OPERAND_DST32_16_16SA_UNPREFIXED_HI, M32C_OPERAND_DST32_16_24_UNPREFIXED_HI
+ , M32C_OPERAND_DST32_16_UNPREFIXED_SI, M32C_OPERAND_DST32_16_8_UNPREFIXED_SI, M32C_OPERAND_DST32_16_16_UNPREFIXED_SI, M32C_OPERAND_DST32_16_16SA_UNPREFIXED_SI
, M32C_OPERAND_DST32_16_24_UNPREFIXED_SI, M32C_OPERAND_DST32_16_EXTUNPREFIXED_QI, M32C_OPERAND_DST32_16_EXTUNPREFIXED_HI, M32C_OPERAND_DST32_16_UNPREFIXED_MULEX_HI
, M32C_OPERAND_DST16_24_QI, M32C_OPERAND_DST16_24_HI, M32C_OPERAND_DST32_24_UNPREFIXED_QI, M32C_OPERAND_DST32_24_PREFIXED_QI
, M32C_OPERAND_DST32_24_8_PREFIXED_QI, M32C_OPERAND_DST32_24_16_PREFIXED_QI, M32C_OPERAND_DST32_24_24_PREFIXED_QI, M32C_OPERAND_DST32_24_UNPREFIXED_HI
@@ -452,7 +459,7 @@ typedef enum cgen_operand_type {
} CGEN_OPERAND_TYPE;
/* Number of operands types. */
-#define MAX_OPERANDS 874
+#define MAX_OPERANDS 902
/* Maximum number of operands referenced by any insn. */
#define MAX_OPERAND_INSTANCES 8
diff --git a/opcodes/m32c-dis.c b/opcodes/m32c-dis.c
index 4d94a64bb08a..69323eaa2e8e 100644
--- a/opcodes/m32c-dis.c
+++ b/opcodes/m32c-dis.c
@@ -453,6 +453,9 @@ m32c_cgen_print_operand (CGEN_CPU_DESC cd,
case M32C_OPERAND_DSP_40_U16 :
print_normal (cd, info, fields->f_dsp_40_u16, 0, pc, length);
break;
+ case M32C_OPERAND_DSP_40_U20 :
+ print_normal (cd, info, fields->f_dsp_40_u20, 0, pc, length);
+ break;
case M32C_OPERAND_DSP_40_U24 :
print_normal (cd, info, fields->f_dsp_40_u24, 0, pc, length);
break;
@@ -468,6 +471,9 @@ m32c_cgen_print_operand (CGEN_CPU_DESC cd,
case M32C_OPERAND_DSP_48_U16 :
print_normal (cd, info, fields->f_dsp_48_u16, 0, pc, length);
break;
+ case M32C_OPERAND_DSP_48_U20 :
+ print_normal (cd, info, fields->f_dsp_48_u20, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
+ break;
case M32C_OPERAND_DSP_48_U24 :
print_normal (cd, info, fields->f_dsp_48_u24, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
break;
@@ -661,7 +667,7 @@ m32c_cgen_print_operand (CGEN_CPU_DESC cd,
print_normal (cd, info, fields->f_imm_8_s4, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
break;
case M32C_OPERAND_IMM_8_S4N :
- print_normal (cd, info, fields->f_imm_8_s4, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
+ print_signed4n (cd, info, fields->f_imm_8_s4, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
break;
case M32C_OPERAND_IMM_SH_12_S4 :
print_keyword (cd, info, & m32c_cgen_opval_h_shimm, fields->f_imm_12_s4, 0);
@@ -682,13 +688,13 @@ m32c_cgen_print_operand (CGEN_CPU_DESC cd,
print_address (cd, info, fields->f_lab_16_8, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
break;
case M32C_OPERAND_LAB_24_8 :
- print_address (cd, info, fields->f_lab_24_8, 0|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
+ print_address (cd, info, fields->f_lab_24_8, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
break;
case M32C_OPERAND_LAB_32_8 :
- print_address (cd, info, fields->f_lab_32_8, 0|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
+ print_address (cd, info, fields->f_lab_32_8, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
break;
case M32C_OPERAND_LAB_40_8 :
- print_address (cd, info, fields->f_lab_40_8, 0|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
+ print_address (cd, info, fields->f_lab_40_8, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
break;
case M32C_OPERAND_LAB_5_3 :
print_address (cd, info, fields->f_lab_5_3, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
diff --git a/opcodes/m32c-ibld.c b/opcodes/m32c-ibld.c
index 31d5f9f99cf6..5ccde3424445 100644
--- a/opcodes/m32c-ibld.c
+++ b/opcodes/m32c-ibld.c
@@ -1000,6 +1000,13 @@ m32c_cgen_insert_operand (CGEN_CPU_DESC cd,
errmsg = insert_normal (cd, value, 0, 32, 8, 16, 32, total_length, buffer);
}
break;
+ case M32C_OPERAND_DSP_40_U20 :
+ {
+ long value = fields->f_dsp_40_u20;
+ value = ((((((((unsigned int) (value) >> (16))) & (255))) | (((value) & (65280))))) | (((((value) << (16))) & (983040))));
+ errmsg = insert_normal (cd, value, 0, 32, 8, 20, 32, total_length, buffer);
+ }
+ break;
case M32C_OPERAND_DSP_40_U24 :
{
long value = fields->f_dsp_40_u24;
@@ -1027,6 +1034,24 @@ m32c_cgen_insert_operand (CGEN_CPU_DESC cd,
errmsg = insert_normal (cd, value, 0, 32, 16, 16, 32, total_length, buffer);
}
break;
+ case M32C_OPERAND_DSP_48_U20 :
+ {
+{
+ FLD (f_dsp_64_u8) = ((((unsigned int) (FLD (f_dsp_48_u20)) >> (16))) & (15));
+ FLD (f_dsp_48_u16) = ((FLD (f_dsp_48_u20)) & (65535));
+}
+ {
+ long value = fields->f_dsp_48_u16;
+ value = ((((((unsigned int) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))));
+ errmsg = insert_normal (cd, value, 0, 32, 16, 16, 32, total_length, buffer);
+ }
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_dsp_64_u8, 0, 64, 0, 8, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
case M32C_OPERAND_DSP_48_U24 :
{
{
@@ -2131,6 +2156,14 @@ m32c_cgen_extract_operand (CGEN_CPU_DESC cd,
fields->f_dsp_40_u16 = value;
}
break;
+ case M32C_OPERAND_DSP_40_U20 :
+ {
+ long value;
+ length = extract_normal (cd, ex_info, insn_value, 0, 32, 8, 20, 32, total_length, pc, & value);
+ value = ((((((((unsigned int) (value) >> (16))) & (255))) | (((value) & (65280))))) | (((((value) << (16))) & (983040))));
+ fields->f_dsp_40_u20 = value;
+ }
+ break;
case M32C_OPERAND_DSP_40_U24 :
{
long value;
@@ -2161,6 +2194,22 @@ m32c_cgen_extract_operand (CGEN_CPU_DESC cd,
fields->f_dsp_48_u16 = value;
}
break;
+ case M32C_OPERAND_DSP_48_U20 :
+ {
+ {
+ long value;
+ length = extract_normal (cd, ex_info, insn_value, 0, 32, 16, 16, 32, total_length, pc, & value);
+ value = ((((((unsigned int) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))));
+ fields->f_dsp_48_u16 = value;
+ }
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 64, 0, 8, 32, total_length, pc, & fields->f_dsp_64_u8);
+ if (length <= 0) break;
+{
+ FLD (f_dsp_48_u20) = ((((FLD (f_dsp_48_u16)) & (65535))) | (((((FLD (f_dsp_64_u8)) << (16))) & (983040))));
+}
+ }
+ break;
case M32C_OPERAND_DSP_48_U24 :
{
{
@@ -3018,6 +3067,9 @@ m32c_cgen_get_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
case M32C_OPERAND_DSP_40_U16 :
value = fields->f_dsp_40_u16;
break;
+ case M32C_OPERAND_DSP_40_U20 :
+ value = fields->f_dsp_40_u20;
+ break;
case M32C_OPERAND_DSP_40_U24 :
value = fields->f_dsp_40_u24;
break;
@@ -3033,6 +3085,9 @@ m32c_cgen_get_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
case M32C_OPERAND_DSP_48_U16 :
value = fields->f_dsp_48_u16;
break;
+ case M32C_OPERAND_DSP_48_U20 :
+ value = fields->f_dsp_48_u20;
+ break;
case M32C_OPERAND_DSP_48_U24 :
value = fields->f_dsp_48_u24;
break;
@@ -3611,6 +3666,9 @@ m32c_cgen_get_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
case M32C_OPERAND_DSP_40_U16 :
value = fields->f_dsp_40_u16;
break;
+ case M32C_OPERAND_DSP_40_U20 :
+ value = fields->f_dsp_40_u20;
+ break;
case M32C_OPERAND_DSP_40_U24 :
value = fields->f_dsp_40_u24;
break;
@@ -3626,6 +3684,9 @@ m32c_cgen_get_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
case M32C_OPERAND_DSP_48_U16 :
value = fields->f_dsp_48_u16;
break;
+ case M32C_OPERAND_DSP_48_U20 :
+ value = fields->f_dsp_48_u20;
+ break;
case M32C_OPERAND_DSP_48_U24 :
value = fields->f_dsp_48_u24;
break;
@@ -4209,6 +4270,9 @@ m32c_cgen_set_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
case M32C_OPERAND_DSP_40_U16 :
fields->f_dsp_40_u16 = value;
break;
+ case M32C_OPERAND_DSP_40_U20 :
+ fields->f_dsp_40_u20 = value;
+ break;
case M32C_OPERAND_DSP_40_U24 :
fields->f_dsp_40_u24 = value;
break;
@@ -4224,6 +4288,9 @@ m32c_cgen_set_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
case M32C_OPERAND_DSP_48_U16 :
fields->f_dsp_48_u16 = value;
break;
+ case M32C_OPERAND_DSP_48_U20 :
+ fields->f_dsp_48_u20 = value;
+ break;
case M32C_OPERAND_DSP_48_U24 :
fields->f_dsp_48_u24 = value;
break;
@@ -4780,6 +4847,9 @@ m32c_cgen_set_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
case M32C_OPERAND_DSP_40_U16 :
fields->f_dsp_40_u16 = value;
break;
+ case M32C_OPERAND_DSP_40_U20 :
+ fields->f_dsp_40_u20 = value;
+ break;
case M32C_OPERAND_DSP_40_U24 :
fields->f_dsp_40_u24 = value;
break;
@@ -4795,6 +4865,9 @@ m32c_cgen_set_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
case M32C_OPERAND_DSP_48_U16 :
fields->f_dsp_48_u16 = value;
break;
+ case M32C_OPERAND_DSP_48_U20 :
+ fields->f_dsp_48_u20 = value;
+ break;
case M32C_OPERAND_DSP_48_U24 :
fields->f_dsp_48_u24 = value;
break;
diff --git a/opcodes/m32c-opc.c b/opcodes/m32c-opc.c
index 2d051cbc4ddd..2afc1d53e422 100644
--- a/opcodes/m32c-opc.c
+++ b/opcodes/m32c-opc.c
@@ -5310,27 +5310,27 @@ static const CGEN_IFMT ifmt_sbjnz32_b_imm4_basic_Unprefixed_dst32_An_indirect_Un
};
static const CGEN_IFMT ifmt_sbjnz16_w_imm4_16_8_dst16_16_8_An_relative_HI ATTRIBUTE_UNUSED = {
- 32, 32, 0xff0e0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U8) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 32, 0xff0e0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U8) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_24_8) }, { 0 } }
};
static const CGEN_IFMT ifmt_sbjnz16_w_imm4_16_8_dst16_16_8_SB_relative_HI ATTRIBUTE_UNUSED = {
- 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_24_8) }, { 0 } }
};
static const CGEN_IFMT ifmt_sbjnz16_w_imm4_16_8_dst16_16_8_FB_relative_HI ATTRIBUTE_UNUSED = {
- 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_S8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_S8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_24_8) }, { 0 } }
};
static const CGEN_IFMT ifmt_sbjnz16_w_imm4_16_16_dst16_16_16_An_relative_HI ATTRIBUTE_UNUSED = {
- 32, 40, 0xff0e0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U16) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 40, 0xff0e0000, { { F (F_0_4) }, { F (F_LAB_32_8) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U16) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { 0 } }
};
static const CGEN_IFMT ifmt_sbjnz16_w_imm4_16_16_dst16_16_16_SB_relative_HI ATTRIBUTE_UNUSED = {
- 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_LAB_32_8) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { 0 } }
};
static const CGEN_IFMT ifmt_sbjnz16_w_imm4_16_16_dst16_16_16_absolute_HI ATTRIBUTE_UNUSED = {
- 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_LAB_32_8) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { 0 } }
};
static const CGEN_IFMT ifmt_sbjnz16_w_imm4_basic_dst16_Rn_direct_HI ATTRIBUTE_UNUSED = {
@@ -5346,27 +5346,27 @@ static const CGEN_IFMT ifmt_sbjnz16_w_imm4_basic_dst16_An_indirect_HI ATTRIBUTE_
};
static const CGEN_IFMT ifmt_sbjnz16_b_imm4_16_8_dst16_16_8_An_relative_QI ATTRIBUTE_UNUSED = {
- 32, 32, 0xff0e0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U8) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 32, 0xff0e0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U8) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_24_8) }, { 0 } }
};
static const CGEN_IFMT ifmt_sbjnz16_b_imm4_16_8_dst16_16_8_SB_relative_QI ATTRIBUTE_UNUSED = {
- 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_24_8) }, { 0 } }
};
static const CGEN_IFMT ifmt_sbjnz16_b_imm4_16_8_dst16_16_8_FB_relative_QI ATTRIBUTE_UNUSED = {
- 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_S8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_S8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_24_8) }, { 0 } }
};
static const CGEN_IFMT ifmt_sbjnz16_b_imm4_16_16_dst16_16_16_An_relative_QI ATTRIBUTE_UNUSED = {
- 32, 40, 0xff0e0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U16) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 40, 0xff0e0000, { { F (F_0_4) }, { F (F_LAB_32_8) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U16) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { 0 } }
};
static const CGEN_IFMT ifmt_sbjnz16_b_imm4_16_16_dst16_16_16_SB_relative_QI ATTRIBUTE_UNUSED = {
- 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_LAB_32_8) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { 0 } }
};
static const CGEN_IFMT ifmt_sbjnz16_b_imm4_16_16_dst16_16_16_absolute_QI ATTRIBUTE_UNUSED = {
- 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_LAB_32_8) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { 0 } }
};
static const CGEN_IFMT ifmt_sbjnz16_b_imm4_basic_dst16_Rn_direct_QI ATTRIBUTE_UNUSED = {
@@ -7081,15 +7081,11 @@ static const CGEN_IFMT ifmt_jsri16a_dst16_basic_SI_dst16_An_indirect_SI ATTRIBUT
16, 16, 0xfffe, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DST16_AN) }, { F (F_4_4) }, { F (F_8_4) }, { 0 } }
};
-static const CGEN_IFMT ifmt_jsri16a_dst16_16_16_SI_dst16_16_16_An_relative_SI ATTRIBUTE_UNUSED = {
- 32, 32, 0xfffe0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U16) }, { F (F_DST16_AN) }, { F (F_4_4) }, { F (F_8_4) }, { 0 } }
-};
-
-static const CGEN_IFMT ifmt_jsri16a_dst16_16_16_SI_dst16_16_16_SB_relative_SI ATTRIBUTE_UNUSED = {
+static const CGEN_IFMT ifmt_jsri16a_dst16_16_16sa_SI_dst16_16_16_SB_relative_SI ATTRIBUTE_UNUSED = {
32, 32, 0xffff0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_4) }, { F (F_8_4) }, { 0 } }
};
-static const CGEN_IFMT ifmt_jsri16a_dst16_16_16_SI_dst16_16_16_absolute_SI ATTRIBUTE_UNUSED = {
+static const CGEN_IFMT ifmt_jsri16a_dst16_16_16sa_SI_dst16_16_16_absolute_SI ATTRIBUTE_UNUSED = {
32, 32, 0xffff0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_4) }, { F (F_8_4) }, { 0 } }
};
@@ -7105,6 +7101,18 @@ static const CGEN_IFMT ifmt_jsri16a_dst16_16_8_SI_dst16_16_8_FB_relative_SI ATTR
24, 24, 0xffff00, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_S8) }, { F (F_4_4) }, { F (F_8_4) }, { 0 } }
};
+static const CGEN_IFMT ifmt_jsri16a_dst16_16_20ar_SI_dst16_16_20_An_relative_SI ATTRIBUTE_UNUSED = {
+ 32, 40, 0xfffe0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U24) }, { F (F_DST16_AN) }, { F (F_4_4) }, { F (F_8_4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_jsri16w_dst16_16_20ar_HI_dst16_16_20_An_relative_HI ATTRIBUTE_UNUSED = {
+ 32, 40, 0xfffe0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U24) }, { F (F_DST16_AN) }, { F (F_4_4) }, { F (F_8_4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_jmpi16_a_16_dst16_16_16_An_relative_SI ATTRIBUTE_UNUSED = {
+ 32, 32, 0xfffe0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U16) }, { F (F_DST16_AN) }, { F (F_4_4) }, { F (F_8_4) }, { 0 } }
+};
+
static const CGEN_IFMT ifmt_cmp32_w_S_src2_r0_HI_src32_2_S_8_SB_relative_HI ATTRIBUTE_UNUSED = {
16, 16, 0xff00, { { F (F_0_2) }, { F (F_2_2) }, { F (F_DSP_8_U8) }, { F (F_4_3) }, { F (F_7_1) }, { 0 } }
};
@@ -7542,27 +7550,27 @@ static const CGEN_IFMT ifmt_adjnz32_b_imm4_basic_Unprefixed_dst32_An_indirect_Un
};
static const CGEN_IFMT ifmt_adjnz16_w_imm4_16_8_dst16_16_8_An_relative_HI ATTRIBUTE_UNUSED = {
- 32, 32, 0xff0e0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U8) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 32, 0xff0e0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U8) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_24_8) }, { 0 } }
};
static const CGEN_IFMT ifmt_adjnz16_w_imm4_16_8_dst16_16_8_SB_relative_HI ATTRIBUTE_UNUSED = {
- 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_24_8) }, { 0 } }
};
static const CGEN_IFMT ifmt_adjnz16_w_imm4_16_8_dst16_16_8_FB_relative_HI ATTRIBUTE_UNUSED = {
- 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_S8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_S8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_24_8) }, { 0 } }
};
static const CGEN_IFMT ifmt_adjnz16_w_imm4_16_16_dst16_16_16_An_relative_HI ATTRIBUTE_UNUSED = {
- 32, 40, 0xff0e0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U16) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 40, 0xff0e0000, { { F (F_0_4) }, { F (F_LAB_32_8) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U16) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { 0 } }
};
static const CGEN_IFMT ifmt_adjnz16_w_imm4_16_16_dst16_16_16_SB_relative_HI ATTRIBUTE_UNUSED = {
- 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_LAB_32_8) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { 0 } }
};
static const CGEN_IFMT ifmt_adjnz16_w_imm4_16_16_dst16_16_16_absolute_HI ATTRIBUTE_UNUSED = {
- 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_LAB_32_8) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { 0 } }
};
static const CGEN_IFMT ifmt_adjnz16_w_imm4_basic_dst16_Rn_direct_HI ATTRIBUTE_UNUSED = {
@@ -7578,27 +7586,27 @@ static const CGEN_IFMT ifmt_adjnz16_w_imm4_basic_dst16_An_indirect_HI ATTRIBUTE_
};
static const CGEN_IFMT ifmt_adjnz16_b_imm4_16_8_dst16_16_8_An_relative_QI ATTRIBUTE_UNUSED = {
- 32, 32, 0xff0e0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U8) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 32, 0xff0e0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U8) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_24_8) }, { 0 } }
};
static const CGEN_IFMT ifmt_adjnz16_b_imm4_16_8_dst16_16_8_SB_relative_QI ATTRIBUTE_UNUSED = {
- 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_24_8) }, { 0 } }
};
static const CGEN_IFMT ifmt_adjnz16_b_imm4_16_8_dst16_16_8_FB_relative_QI ATTRIBUTE_UNUSED = {
- 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_S8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 32, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_S8) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_24_8) }, { 0 } }
};
static const CGEN_IFMT ifmt_adjnz16_b_imm4_16_16_dst16_16_16_An_relative_QI ATTRIBUTE_UNUSED = {
- 32, 40, 0xff0e0000, { { F (F_0_4) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U16) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 40, 0xff0e0000, { { F (F_0_4) }, { F (F_LAB_32_8) }, { F (F_12_2) }, { F (F_14_1) }, { F (F_DSP_16_U16) }, { F (F_DST16_AN) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { 0 } }
};
static const CGEN_IFMT ifmt_adjnz16_b_imm4_16_16_dst16_16_16_SB_relative_QI ATTRIBUTE_UNUSED = {
- 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_LAB_32_8) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { 0 } }
};
static const CGEN_IFMT ifmt_adjnz16_b_imm4_16_16_dst16_16_16_absolute_QI ATTRIBUTE_UNUSED = {
- 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { F (F_LAB_16_8) }, { 0 } }
+ 32, 40, 0xff0f0000, { { F (F_0_4) }, { F (F_LAB_32_8) }, { F (F_12_4) }, { F (F_DSP_16_U16) }, { F (F_4_3) }, { F (F_7_1) }, { F (F_IMM_8_S4) }, { 0 } }
};
static const CGEN_IFMT ifmt_adjnz16_b_imm4_basic_dst16_Rn_direct_QI ATTRIBUTE_UNUSED = {
@@ -46044,13 +46052,13 @@ static const CGEN_OPCODE m32c_cgen_insn_opcode_table[MAX_INSNS] =
{ { MNEM, ' ', OP (DSP_16_U16), ',', OP (CR16), 0 } },
& ifmt_stc16_src_dst16_16_16_absolute_HI, { 0x7a8f0000 }
},
-/* jsri.w ${Dsp-16-u24}[$Dst32AnUnprefixed] */
+/* jsri.a ${Dsp-16-u24}[$Dst32AnUnprefixed] */
{
{ 0, 0, 0, 0 },
{ { MNEM, ' ', OP (DSP_16_U24), '[', OP (DST32ANUNPREFIXED), ']', 0 } },
& ifmt_shl32_l_dst_dst32_16_24_An_relative_Unprefixed_SI, { 0x96010000 }
},
-/* jsri.w ${Dsp-16-u24} */
+/* jsri.a ${Dsp-16-u24} */
{
{ 0, 0, 0, 0 },
{ { MNEM, ' ', OP (DSP_16_U24), 0 } },
@@ -46092,12 +46100,6 @@ static const CGEN_OPCODE m32c_cgen_insn_opcode_table[MAX_INSNS] =
{ { MNEM, ' ', '[', OP (DST16AN), ']', 0 } },
& ifmt_jsri16a_dst16_basic_SI_dst16_An_indirect_SI, { 0x7d16 }
},
-/* jsri.a ${Dsp-16-u16}[$Dst32AnUnprefixed] */
- {
- { 0, 0, 0, 0 },
- { { MNEM, ' ', OP (DSP_16_U16), '[', OP (DST32ANUNPREFIXED), ']', 0 } },
- & ifmt_shl32_l_dst_dst32_16_16_An_relative_Unprefixed_SI, { 0x94010000 }
- },
/* jsri.a ${Dsp-16-u16}[sb] */
{
{ 0, 0, 0, 0 },
@@ -46116,23 +46118,17 @@ static const CGEN_OPCODE m32c_cgen_insn_opcode_table[MAX_INSNS] =
{ { MNEM, ' ', OP (DSP_16_U16), 0 } },
& ifmt_shl32_l_dst_dst32_16_16_absolute_Unprefixed_SI, { 0x96c10000 }
},
-/* jsri.a ${Dsp-16-u16}[$Dst16An] */
- {
- { 0, 0, 0, 0 },
- { { MNEM, ' ', OP (DSP_16_U16), '[', OP (DST16AN), ']', 0 } },
- & ifmt_jsri16a_dst16_16_16_SI_dst16_16_16_An_relative_SI, { 0x7d1c0000 }
- },
/* jsri.a ${Dsp-16-u16}[sb] */
{
{ 0, 0, 0, 0 },
{ { MNEM, ' ', OP (DSP_16_U16), '[', 's', 'b', ']', 0 } },
- & ifmt_jsri16a_dst16_16_16_SI_dst16_16_16_SB_relative_SI, { 0x7d1e0000 }
+ & ifmt_jsri16a_dst16_16_16sa_SI_dst16_16_16_SB_relative_SI, { 0x7d1e0000 }
},
/* jsri.a ${Dsp-16-u16} */
{
{ 0, 0, 0, 0 },
{ { MNEM, ' ', OP (DSP_16_U16), 0 } },
- & ifmt_jsri16a_dst16_16_16_SI_dst16_16_16_absolute_SI, { 0x7d1f0000 }
+ & ifmt_jsri16a_dst16_16_16sa_SI_dst16_16_16_absolute_SI, { 0x7d1f0000 }
},
/* jsri.a ${Dsp-16-u8}[$Dst32AnUnprefixed] */
{
@@ -46170,17 +46166,23 @@ static const CGEN_OPCODE m32c_cgen_insn_opcode_table[MAX_INSNS] =
{ { MNEM, ' ', OP (DSP_16_S8), '[', 'f', 'b', ']', 0 } },
& ifmt_jsri16a_dst16_16_8_SI_dst16_16_8_FB_relative_SI, { 0x7d1b00 }
},
-/* jsri.w ${Dsp-16-u24}[$Dst32AnUnprefixed] */
+/* jsri.a ${Dsp-16-u24}[$Dst32AnUnprefixed] */
{
{ 0, 0, 0, 0 },
{ { MNEM, ' ', OP (DSP_16_U24), '[', OP (DST32ANUNPREFIXED), ']', 0 } },
- & ifmt_shl32_w_dst_dst32_16_24_An_relative_Unprefixed_HI, { 0xc71f0000 }
+ & ifmt_shl32_l_dst_dst32_16_24_An_relative_Unprefixed_SI, { 0x96010000 }
},
-/* jsri.w ${Dsp-16-u24} */
+/* jsri.a ${Dsp-16-u24} */
{
{ 0, 0, 0, 0 },
{ { MNEM, ' ', OP (DSP_16_U24), 0 } },
- & ifmt_shl32_w_dst_dst32_16_24_absolute_Unprefixed_HI, { 0xc79f0000 }
+ & ifmt_shl32_l_dst_dst32_16_24_absolute_Unprefixed_SI, { 0x96810000 }
+ },
+/* jsri.a ${Dsp-16-u20}[$Dst16An] */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (DSP_16_U20), '[', OP (DST16AN), ']', 0 } },
+ & ifmt_jsri16a_dst16_16_20ar_SI_dst16_16_20_An_relative_SI, { 0x7d1c0000 }
},
/* jsri.w $Dst32RnUnprefixedHI */
{
@@ -46218,11 +46220,41 @@ static const CGEN_OPCODE m32c_cgen_insn_opcode_table[MAX_INSNS] =
{ { MNEM, ' ', '[', OP (DST16AN), ']', 0 } },
& ifmt_shl16_w_dst_dst16_An_indirect_HI, { 0x7d36 }
},
-/* jsri.w ${Dsp-16-u16}[$Dst32AnUnprefixed] */
+/* jsri.w ${Dsp-16-u8}[$Dst32AnUnprefixed] */
{
{ 0, 0, 0, 0 },
- { { MNEM, ' ', OP (DSP_16_U16), '[', OP (DST32ANUNPREFIXED), ']', 0 } },
- & ifmt_shl32_w_dst_dst32_16_16_An_relative_Unprefixed_HI, { 0xc51f0000 }
+ { { MNEM, ' ', OP (DSP_16_U8), '[', OP (DST32ANUNPREFIXED), ']', 0 } },
+ & ifmt_shl32_w_dst_dst32_16_8_An_relative_Unprefixed_HI, { 0xc31f00 }
+ },
+/* jsri.w ${Dsp-16-u8}[sb] */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (DSP_16_U8), '[', 's', 'b', ']', 0 } },
+ & ifmt_shl32_w_dst_dst32_16_8_SB_relative_Unprefixed_HI, { 0xc39f00 }
+ },
+/* jsri.w ${Dsp-16-s8}[fb] */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (DSP_16_S8), '[', 'f', 'b', ']', 0 } },
+ & ifmt_shl32_w_dst_dst32_16_8_FB_relative_Unprefixed_HI, { 0xc3df00 }
+ },
+/* jsri.w ${Dsp-16-u8}[$Dst16An] */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (DSP_16_U8), '[', OP (DST16AN), ']', 0 } },
+ & ifmt_shl16_w_dst_dst16_16_8_An_relative_HI, { 0x7d3800 }
+ },
+/* jsri.w ${Dsp-16-u8}[sb] */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (DSP_16_U8), '[', 's', 'b', ']', 0 } },
+ & ifmt_shl16_w_dst_dst16_16_8_SB_relative_HI, { 0x7d3a00 }
+ },
+/* jsri.w ${Dsp-16-s8}[fb] */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (DSP_16_S8), '[', 'f', 'b', ']', 0 } },
+ & ifmt_shl16_w_dst_dst16_16_8_FB_relative_HI, { 0x7d3b00 }
},
/* jsri.w ${Dsp-16-u16}[sb] */
{
@@ -46242,12 +46274,6 @@ static const CGEN_OPCODE m32c_cgen_insn_opcode_table[MAX_INSNS] =
{ { MNEM, ' ', OP (DSP_16_U16), 0 } },
& ifmt_shl32_w_dst_dst32_16_16_absolute_Unprefixed_HI, { 0xc7df0000 }
},
-/* jsri.w ${Dsp-16-u16}[$Dst16An] */
- {
- { 0, 0, 0, 0 },
- { { MNEM, ' ', OP (DSP_16_U16), '[', OP (DST16AN), ']', 0 } },
- & ifmt_shl16_w_dst_dst16_16_16_An_relative_HI, { 0x7d3c0000 }
- },
/* jsri.w ${Dsp-16-u16}[sb] */
{
{ 0, 0, 0, 0 },
@@ -46260,41 +46286,23 @@ static const CGEN_OPCODE m32c_cgen_insn_opcode_table[MAX_INSNS] =
{ { MNEM, ' ', OP (DSP_16_U16), 0 } },
& ifmt_shl16_w_dst_dst16_16_16_absolute_HI, { 0x7d3f0000 }
},
-/* jsri.w ${Dsp-16-u8}[$Dst32AnUnprefixed] */
- {
- { 0, 0, 0, 0 },
- { { MNEM, ' ', OP (DSP_16_U8), '[', OP (DST32ANUNPREFIXED), ']', 0 } },
- & ifmt_shl32_w_dst_dst32_16_8_An_relative_Unprefixed_HI, { 0xc31f00 }
- },
-/* jsri.w ${Dsp-16-u8}[sb] */
- {
- { 0, 0, 0, 0 },
- { { MNEM, ' ', OP (DSP_16_U8), '[', 's', 'b', ']', 0 } },
- & ifmt_shl32_w_dst_dst32_16_8_SB_relative_Unprefixed_HI, { 0xc39f00 }
- },
-/* jsri.w ${Dsp-16-s8}[fb] */
- {
- { 0, 0, 0, 0 },
- { { MNEM, ' ', OP (DSP_16_S8), '[', 'f', 'b', ']', 0 } },
- & ifmt_shl32_w_dst_dst32_16_8_FB_relative_Unprefixed_HI, { 0xc3df00 }
- },
-/* jsri.w ${Dsp-16-u8}[$Dst16An] */
+/* jsri.w ${Dsp-16-u24}[$Dst32AnUnprefixed] */
{
{ 0, 0, 0, 0 },
- { { MNEM, ' ', OP (DSP_16_U8), '[', OP (DST16AN), ']', 0 } },
- & ifmt_shl16_w_dst_dst16_16_8_An_relative_HI, { 0x7d3800 }
+ { { MNEM, ' ', OP (DSP_16_U24), '[', OP (DST32ANUNPREFIXED), ']', 0 } },
+ & ifmt_shl32_w_dst_dst32_16_24_An_relative_Unprefixed_HI, { 0xc71f0000 }
},
-/* jsri.w ${Dsp-16-u8}[sb] */
+/* jsri.w ${Dsp-16-u24} */
{
{ 0, 0, 0, 0 },
- { { MNEM, ' ', OP (DSP_16_U8), '[', 's', 'b', ']', 0 } },
- & ifmt_shl16_w_dst_dst16_16_8_SB_relative_HI, { 0x7d3a00 }
+ { { MNEM, ' ', OP (DSP_16_U24), 0 } },
+ & ifmt_shl32_w_dst_dst32_16_24_absolute_Unprefixed_HI, { 0xc79f0000 }
},
-/* jsri.w ${Dsp-16-s8}[fb] */
+/* jsri.w ${Dsp-16-u20}[$Dst16An] */
{
{ 0, 0, 0, 0 },
- { { MNEM, ' ', OP (DSP_16_S8), '[', 'f', 'b', ']', 0 } },
- & ifmt_shl16_w_dst_dst16_16_8_FB_relative_HI, { 0x7d3b00 }
+ { { MNEM, ' ', OP (DSP_16_U20), '[', OP (DST16AN), ']', 0 } },
+ & ifmt_jsri16w_dst16_16_20ar_HI_dst16_16_20_An_relative_HI, { 0x7d3c0000 }
},
/* jmpi.a $Dst32RnUnprefixedSI */
{
@@ -46396,7 +46404,7 @@ static const CGEN_OPCODE m32c_cgen_insn_opcode_table[MAX_INSNS] =
{
{ 0, 0, 0, 0 },
{ { MNEM, ' ', OP (DSP_16_U16), '[', OP (DST16AN), ']', 0 } },
- & ifmt_jsri16a_dst16_16_16_SI_dst16_16_16_An_relative_SI, { 0x7d0c0000 }
+ & ifmt_jmpi16_a_16_dst16_16_16_An_relative_SI, { 0x7d0c0000 }
},
/* jmpi.a ${Dsp-16-u8}[sb] */
{
@@ -46408,7 +46416,7 @@ static const CGEN_OPCODE m32c_cgen_insn_opcode_table[MAX_INSNS] =
{
{ 0, 0, 0, 0 },
{ { MNEM, ' ', OP (DSP_16_U16), '[', 's', 'b', ']', 0 } },
- & ifmt_jsri16a_dst16_16_16_SI_dst16_16_16_SB_relative_SI, { 0x7d0e0000 }
+ & ifmt_jsri16a_dst16_16_16sa_SI_dst16_16_16_SB_relative_SI, { 0x7d0e0000 }
},
/* jmpi.a ${Dsp-16-s8}[fb] */
{
@@ -46420,7 +46428,7 @@ static const CGEN_OPCODE m32c_cgen_insn_opcode_table[MAX_INSNS] =
{
{ 0, 0, 0, 0 },
{ { MNEM, ' ', OP (DSP_16_U16), 0 } },
- & ifmt_jsri16a_dst16_16_16_SI_dst16_16_16_absolute_SI, { 0x7d0f0000 }
+ & ifmt_jsri16a_dst16_16_16sa_SI_dst16_16_16_absolute_SI, { 0x7d0f0000 }
},
/* jmpi.w $Dst32RnUnprefixedHI */
{
@@ -80002,7 +80010,7 @@ static const CGEN_OPCODE m32c_cgen_insn_opcode_table[MAX_INSNS] =
{
{ 0, 0, 0, 0 },
{ { MNEM, ' ', '#', OP (IMM_8_QI), ',', '#', OP (IMM_32_QI), ',', OP (DSP_16_U16), 0 } },
- & ifmt_stzx16_imm8_imm8_abs16, { 0xde000000 }
+ & ifmt_stzx16_imm8_imm8_abs16, { 0xdf000000 }
},
/* und */
{
diff --git a/opcodes/m32c-opc.h b/opcodes/m32c-opc.h
index 7f0e6e566dca..50defe434a9a 100644
--- a/opcodes/m32c-opc.h
+++ b/opcodes/m32c-opc.h
@@ -1638,15 +1638,15 @@ typedef enum cgen_insn_type {
, M32C_INSN_LDC16_DST_DST16_16_16_AN_RELATIVE_HI, M32C_INSN_LDC16_DST_DST16_16_8_SB_RELATIVE_HI, M32C_INSN_LDC16_DST_DST16_16_16_SB_RELATIVE_HI, M32C_INSN_LDC16_DST_DST16_16_8_FB_RELATIVE_HI
, M32C_INSN_LDC16_DST_DST16_16_16_ABSOLUTE_HI, M32C_INSN_JSRI32_A_DST32_16_24_AN_RELATIVE_UNPREFIXED_SI, M32C_INSN_JSRI32_A_DST32_16_24_ABSOLUTE_UNPREFIXED_SI, M32C_INSN_JSRI32A_DST32_BASIC_UNPREFIXED_SI_DST32_RN_DIRECT_UNPREFIXED_SI
, M32C_INSN_JSRI32A_DST32_BASIC_UNPREFIXED_SI_DST32_AN_DIRECT_UNPREFIXED_SI, M32C_INSN_JSRI32A_DST32_BASIC_UNPREFIXED_SI_DST32_AN_INDIRECT_UNPREFIXED_SI, M32C_INSN_JSRI16A_DST16_BASIC_SI_DST16_RN_DIRECT_SI, M32C_INSN_JSRI16A_DST16_BASIC_SI_DST16_AN_DIRECT_SI
- , M32C_INSN_JSRI16A_DST16_BASIC_SI_DST16_AN_INDIRECT_SI, M32C_INSN_JSRI32A_DST32_16_16_UNPREFIXED_SI_DST32_16_16_AN_RELATIVE_UNPREFIXED_SI, M32C_INSN_JSRI32A_DST32_16_16_UNPREFIXED_SI_DST32_16_16_SB_RELATIVE_UNPREFIXED_SI, M32C_INSN_JSRI32A_DST32_16_16_UNPREFIXED_SI_DST32_16_16_FB_RELATIVE_UNPREFIXED_SI
- , M32C_INSN_JSRI32A_DST32_16_16_UNPREFIXED_SI_DST32_16_16_ABSOLUTE_UNPREFIXED_SI, M32C_INSN_JSRI16A_DST16_16_16_SI_DST16_16_16_AN_RELATIVE_SI, M32C_INSN_JSRI16A_DST16_16_16_SI_DST16_16_16_SB_RELATIVE_SI, M32C_INSN_JSRI16A_DST16_16_16_SI_DST16_16_16_ABSOLUTE_SI
- , M32C_INSN_JSRI32A_DST32_16_8_UNPREFIXED_SI_DST32_16_8_AN_RELATIVE_UNPREFIXED_SI, M32C_INSN_JSRI32A_DST32_16_8_UNPREFIXED_SI_DST32_16_8_SB_RELATIVE_UNPREFIXED_SI, M32C_INSN_JSRI32A_DST32_16_8_UNPREFIXED_SI_DST32_16_8_FB_RELATIVE_UNPREFIXED_SI, M32C_INSN_JSRI16A_DST16_16_8_SI_DST16_16_8_AN_RELATIVE_SI
- , M32C_INSN_JSRI16A_DST16_16_8_SI_DST16_16_8_SB_RELATIVE_SI, M32C_INSN_JSRI16A_DST16_16_8_SI_DST16_16_8_FB_RELATIVE_SI, M32C_INSN_JSRI32_W_DST32_16_24_AN_RELATIVE_UNPREFIXED_HI, M32C_INSN_JSRI32_W_DST32_16_24_ABSOLUTE_UNPREFIXED_HI
- , M32C_INSN_JSRI32W_DST32_BASIC_UNPREFIXED_HI_DST32_RN_DIRECT_UNPREFIXED_HI, M32C_INSN_JSRI32W_DST32_BASIC_UNPREFIXED_HI_DST32_AN_DIRECT_UNPREFIXED_HI, M32C_INSN_JSRI32W_DST32_BASIC_UNPREFIXED_HI_DST32_AN_INDIRECT_UNPREFIXED_HI, M32C_INSN_JSRI16W_DST16_BASIC_HI_DST16_RN_DIRECT_HI
- , M32C_INSN_JSRI16W_DST16_BASIC_HI_DST16_AN_DIRECT_HI, M32C_INSN_JSRI16W_DST16_BASIC_HI_DST16_AN_INDIRECT_HI, M32C_INSN_JSRI32W_DST32_16_16_UNPREFIXED_HI_DST32_16_16_AN_RELATIVE_UNPREFIXED_HI, M32C_INSN_JSRI32W_DST32_16_16_UNPREFIXED_HI_DST32_16_16_SB_RELATIVE_UNPREFIXED_HI
- , M32C_INSN_JSRI32W_DST32_16_16_UNPREFIXED_HI_DST32_16_16_FB_RELATIVE_UNPREFIXED_HI, M32C_INSN_JSRI32W_DST32_16_16_UNPREFIXED_HI_DST32_16_16_ABSOLUTE_UNPREFIXED_HI, M32C_INSN_JSRI16W_DST16_16_16_HI_DST16_16_16_AN_RELATIVE_HI, M32C_INSN_JSRI16W_DST16_16_16_HI_DST16_16_16_SB_RELATIVE_HI
- , M32C_INSN_JSRI16W_DST16_16_16_HI_DST16_16_16_ABSOLUTE_HI, M32C_INSN_JSRI32W_DST32_16_8_UNPREFIXED_HI_DST32_16_8_AN_RELATIVE_UNPREFIXED_HI, M32C_INSN_JSRI32W_DST32_16_8_UNPREFIXED_HI_DST32_16_8_SB_RELATIVE_UNPREFIXED_HI, M32C_INSN_JSRI32W_DST32_16_8_UNPREFIXED_HI_DST32_16_8_FB_RELATIVE_UNPREFIXED_HI
- , M32C_INSN_JSRI16W_DST16_16_8_HI_DST16_16_8_AN_RELATIVE_HI, M32C_INSN_JSRI16W_DST16_16_8_HI_DST16_16_8_SB_RELATIVE_HI, M32C_INSN_JSRI16W_DST16_16_8_HI_DST16_16_8_FB_RELATIVE_HI, M32C_INSN_JMPI32_A_16_UNPREFIXED_DST32_RN_DIRECT_UNPREFIXED_SI
+ , M32C_INSN_JSRI16A_DST16_BASIC_SI_DST16_AN_INDIRECT_SI, M32C_INSN_JSRI32A_DST32_16_16SA_UNPREFIXED_SI_DST32_16_16_SB_RELATIVE_UNPREFIXED_SI, M32C_INSN_JSRI32A_DST32_16_16SA_UNPREFIXED_SI_DST32_16_16_FB_RELATIVE_UNPREFIXED_SI, M32C_INSN_JSRI32A_DST32_16_16SA_UNPREFIXED_SI_DST32_16_16_ABSOLUTE_UNPREFIXED_SI
+ , M32C_INSN_JSRI16A_DST16_16_16SA_SI_DST16_16_16_SB_RELATIVE_SI, M32C_INSN_JSRI16A_DST16_16_16SA_SI_DST16_16_16_ABSOLUTE_SI, M32C_INSN_JSRI32A_DST32_16_8_UNPREFIXED_SI_DST32_16_8_AN_RELATIVE_UNPREFIXED_SI, M32C_INSN_JSRI32A_DST32_16_8_UNPREFIXED_SI_DST32_16_8_SB_RELATIVE_UNPREFIXED_SI
+ , M32C_INSN_JSRI32A_DST32_16_8_UNPREFIXED_SI_DST32_16_8_FB_RELATIVE_UNPREFIXED_SI, M32C_INSN_JSRI16A_DST16_16_8_SI_DST16_16_8_AN_RELATIVE_SI, M32C_INSN_JSRI16A_DST16_16_8_SI_DST16_16_8_SB_RELATIVE_SI, M32C_INSN_JSRI16A_DST16_16_8_SI_DST16_16_8_FB_RELATIVE_SI
+ , M32C_INSN_JSRI32A_DST32_16_24_UNPREFIXED_SI_DST32_16_24_AN_RELATIVE_UNPREFIXED_SI, M32C_INSN_JSRI32A_DST32_16_24_UNPREFIXED_SI_DST32_16_24_ABSOLUTE_UNPREFIXED_SI, M32C_INSN_JSRI16A_DST16_16_20AR_SI_DST16_16_20_AN_RELATIVE_SI, M32C_INSN_JSRI32W_DST32_BASIC_UNPREFIXED_HI_DST32_RN_DIRECT_UNPREFIXED_HI
+ , M32C_INSN_JSRI32W_DST32_BASIC_UNPREFIXED_HI_DST32_AN_DIRECT_UNPREFIXED_HI, M32C_INSN_JSRI32W_DST32_BASIC_UNPREFIXED_HI_DST32_AN_INDIRECT_UNPREFIXED_HI, M32C_INSN_JSRI16W_DST16_BASIC_HI_DST16_RN_DIRECT_HI, M32C_INSN_JSRI16W_DST16_BASIC_HI_DST16_AN_DIRECT_HI
+ , M32C_INSN_JSRI16W_DST16_BASIC_HI_DST16_AN_INDIRECT_HI, M32C_INSN_JSRI32W_DST32_16_8_UNPREFIXED_HI_DST32_16_8_AN_RELATIVE_UNPREFIXED_HI, M32C_INSN_JSRI32W_DST32_16_8_UNPREFIXED_HI_DST32_16_8_SB_RELATIVE_UNPREFIXED_HI, M32C_INSN_JSRI32W_DST32_16_8_UNPREFIXED_HI_DST32_16_8_FB_RELATIVE_UNPREFIXED_HI
+ , M32C_INSN_JSRI16W_DST16_16_8_HI_DST16_16_8_AN_RELATIVE_HI, M32C_INSN_JSRI16W_DST16_16_8_HI_DST16_16_8_SB_RELATIVE_HI, M32C_INSN_JSRI16W_DST16_16_8_HI_DST16_16_8_FB_RELATIVE_HI, M32C_INSN_JSRI32W_DST32_16_16SA_UNPREFIXED_HI_DST32_16_16_SB_RELATIVE_UNPREFIXED_HI
+ , M32C_INSN_JSRI32W_DST32_16_16SA_UNPREFIXED_HI_DST32_16_16_FB_RELATIVE_UNPREFIXED_HI, M32C_INSN_JSRI32W_DST32_16_16SA_UNPREFIXED_HI_DST32_16_16_ABSOLUTE_UNPREFIXED_HI, M32C_INSN_JSRI16W_DST16_16_16SA_HI_DST16_16_16_SB_RELATIVE_HI, M32C_INSN_JSRI16W_DST16_16_16SA_HI_DST16_16_16_ABSOLUTE_HI
+ , M32C_INSN_JSRI32W_DST32_16_24_UNPREFIXED_HI_DST32_16_24_AN_RELATIVE_UNPREFIXED_HI, M32C_INSN_JSRI32W_DST32_16_24_UNPREFIXED_HI_DST32_16_24_ABSOLUTE_UNPREFIXED_HI, M32C_INSN_JSRI16W_DST16_16_20AR_HI_DST16_16_20_AN_RELATIVE_HI, M32C_INSN_JMPI32_A_16_UNPREFIXED_DST32_RN_DIRECT_UNPREFIXED_SI
, M32C_INSN_JMPI32_A_16_UNPREFIXED_DST32_AN_DIRECT_UNPREFIXED_SI, M32C_INSN_JMPI32_A_16_UNPREFIXED_DST32_AN_INDIRECT_UNPREFIXED_SI, M32C_INSN_JMPI32_A_16_UNPREFIXED_DST32_16_8_AN_RELATIVE_UNPREFIXED_SI, M32C_INSN_JMPI32_A_16_UNPREFIXED_DST32_16_16_AN_RELATIVE_UNPREFIXED_SI
, M32C_INSN_JMPI32_A_16_UNPREFIXED_DST32_16_24_AN_RELATIVE_UNPREFIXED_SI, M32C_INSN_JMPI32_A_16_UNPREFIXED_DST32_16_8_SB_RELATIVE_UNPREFIXED_SI, M32C_INSN_JMPI32_A_16_UNPREFIXED_DST32_16_16_SB_RELATIVE_UNPREFIXED_SI, M32C_INSN_JMPI32_A_16_UNPREFIXED_DST32_16_8_FB_RELATIVE_UNPREFIXED_SI
, M32C_INSN_JMPI32_A_16_UNPREFIXED_DST32_16_16_FB_RELATIVE_UNPREFIXED_SI, M32C_INSN_JMPI32_A_16_UNPREFIXED_DST32_16_16_ABSOLUTE_UNPREFIXED_SI, M32C_INSN_JMPI32_A_16_UNPREFIXED_DST32_16_24_ABSOLUTE_UNPREFIXED_SI, M32C_INSN_JMPI16_A_16_DST16_RN_DIRECT_SI
@@ -3186,8 +3186,10 @@ struct cgen_fields
long f_dsp_16_u24;
long f_dsp_24_u24;
long f_dsp_32_u24;
+ long f_dsp_40_u20;
long f_dsp_40_u24;
long f_dsp_40_s32;
+ long f_dsp_48_u20;
long f_dsp_48_u24;
long f_dsp_16_s32;
long f_dsp_24_s32;
diff --git a/opcodes/m32r-asm.c b/opcodes/m32r-asm.c
index a5bd36331682..e02c747abffc 100644
--- a/opcodes/m32r-asm.c
+++ b/opcodes/m32r-asm.c
@@ -88,7 +88,7 @@ parse_hi16 (CGEN_CPU_DESC cd,
return MISSING_CLOSING_PARENTHESIS;
++*strp;
if (errmsg == NULL
- && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
+ && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
{
value >>= 16;
value &= 0xffff;
@@ -100,17 +100,17 @@ parse_hi16 (CGEN_CPU_DESC cd,
{
*strp += 6;
errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32R_HI16_SLO,
- & result_type, & value);
+ & result_type, & value);
if (**strp != ')')
return MISSING_CLOSING_PARENTHESIS;
++*strp;
if (errmsg == NULL
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
- {
- value += 0x8000;
- value >>= 16;
+ {
+ value += 0x8000;
+ value >>= 16;
value &= 0xffff;
- }
+ }
*valuep = value;
return errmsg;
}
@@ -145,7 +145,7 @@ parse_slo16 (CGEN_CPU_DESC cd,
++*strp;
if (errmsg == NULL
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
- value = ((value & 0xffff) ^ 0x8000) - 0x8000;
+ value = ((value & 0xffff) ^ 0x8000) - 0x8000;
*valuep = value;
return errmsg;
}
@@ -343,6 +343,9 @@ m32r_cgen_init_asm (CGEN_CPU_DESC cd)
m32r_cgen_init_ibld_table (cd);
cd->parse_handlers = & m32r_cgen_parse_handlers[0];
cd->parse_operand = m32r_cgen_parse_operand;
+#ifdef CGEN_ASM_INIT_HOOK
+CGEN_ASM_INIT_HOOK
+#endif
}
diff --git a/opcodes/m32r-dis.c b/opcodes/m32r-dis.c
index e381c919d75d..7590a200b86c 100644
--- a/opcodes/m32r-dis.c
+++ b/opcodes/m32r-dis.c
@@ -65,7 +65,7 @@ static int read_insn
do \
{ \
if (CGEN_BOOL_ATTR ((attrs), CGEN_OPERAND_HASH_PREFIX)) \
- (*info->fprintf_func) (info->stream, "#"); \
+ (*info->fprintf_func) (info->stream, "#"); \
} \
while (0)
@@ -102,7 +102,7 @@ my_print_insn (CGEN_CPU_DESC cd,
/* Read the base part of the insn. */
status = (*info->read_memory_func) (pc - ((!big_p && (pc & 3) != 0) ? 2 : 0),
- buf, buflen, info);
+ buf, buflen, info);
if (status != 0)
{
(*info->memory_error_func) (status, pc, info);
diff --git a/opcodes/m68hc11-dis.c b/opcodes/m68hc11-dis.c
index 9860013c2d78..ae94271dde5b 100644
--- a/opcodes/m68hc11-dis.c
+++ b/opcodes/m68hc11-dis.c
@@ -1,5 +1,6 @@
/* m68hc11-dis.c -- Motorola 68HC11 & 68HC12 disassembly
- Copyright 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+ Copyright 1999, 2000, 2001, 2002, 2003, 2006
+ Free Software Foundation, Inc.
Written by Stephane Carrez (stcarrez@nerim.fr)
This program is free software; you can redistribute it and/or modify
@@ -692,11 +693,11 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
opcode table content. */
if (format & ~(M6811_OP_PAGE4 | M6811_OP_PAGE3 | M6811_OP_PAGE2))
{
- (*info->fprintf_func) (info->stream, "; Error, format: %x", format);
+ (*info->fprintf_func) (info->stream, "; Error, format: %lx", format);
}
if (pos != opcode->size)
{
- (*info->fprintf_func) (info->stream, "; Error, size: %d expect %d",
+ (*info->fprintf_func) (info->stream, "; Error, size: %ld expect %d",
pos, opcode->size);
}
#endif
diff --git a/opcodes/m68k-dis.c b/opcodes/m68k-dis.c
index 42fb14582a20..99d4533079b9 100644
--- a/opcodes/m68k-dis.c
+++ b/opcodes/m68k-dis.c
@@ -280,6 +280,11 @@ fetch_arg (unsigned char *buffer,
val = (buffer[1] >> 6);
break;
+ case 'E':
+ FETCH_DATA (info, buffer + 3);
+ val = (buffer[2] >> 1);
+ break;
+
case 'm':
val = (buffer[1] & 0x40 ? 0x8 : 0)
| ((buffer[0] >> 1) & 0x7)
@@ -310,29 +315,8 @@ fetch_arg (unsigned char *buffer,
abort ();
}
- switch (bits)
- {
- case 1:
- return val & 1;
- case 2:
- return val & 3;
- case 3:
- return val & 7;
- case 4:
- return val & 017;
- case 5:
- return val & 037;
- case 6:
- return val & 077;
- case 7:
- return val & 0177;
- case 8:
- return val & 0377;
- case 12:
- return val & 07777;
- default:
- abort ();
- }
+ /* bits is never too big. */
+ return val & ((1 << bits) - 1);
}
/* Check if an EA is valid for a particular code. This is required
@@ -645,12 +629,17 @@ print_insn_arg (const char *d,
{"%dtt0",0x006}, {"%dtt1",0x007}, {"%buscr",0x008},
{"%usp", 0x800}, {"%vbr", 0x801}, {"%caar", 0x802},
{"%msp", 0x803}, {"%isp", 0x804},
- {"%flashbar", 0xc04}, {"%rambar", 0xc05}, /* mcf528x added these. */
+ /* reg c04 is sometimes called flashbar or rambar.
+ rec c05 is also sometimes called rambar. */
+ {"%rambar0", 0xc04}, {"%rambar1", 0xc05},
/* Should we be calling this psr like we do in case 'Y'? */
{"%mmusr",0x805},
- {"%urp", 0x806}, {"%srp", 0x807}, {"%pcr", 0x808}};
+ {"%urp", 0x806}, {"%srp", 0x807}, {"%pcr", 0x808},
+
+ /* Fido added these. */
+ {"%cac", 0xffe}, {"%mbb", 0xfff}};
val = fetch_arg (buffer, place, 12, info);
for (regno = sizeof names / sizeof names[0] - 1; regno >= 0; regno--)
@@ -680,6 +669,16 @@ print_insn_arg (const char *d,
(*info->fprintf_func) (info->stream, "#%d", val);
break;
+ case 'j':
+ val = fetch_arg (buffer, place, 3, info);
+ (*info->fprintf_func) (info->stream, "#%d", val+1);
+ break;
+
+ case 'K':
+ val = fetch_arg (buffer, place, 9, info);
+ (*info->fprintf_func) (info->stream, "#%d", val);
+ break;
+
case 'M':
if (place == 'h')
{
@@ -1209,6 +1208,7 @@ match_insn_m68k (bfd_vma memaddr,
unsigned char *save_p;
unsigned char *p;
const char *d;
+ const char *args = best->args;
struct private *priv = (struct private *) info->private_data;
bfd_byte *buffer = priv->the_buffer;
@@ -1216,6 +1216,9 @@ match_insn_m68k (bfd_vma memaddr,
void (* save_print_address) (bfd_vma, struct disassemble_info *)
= info->print_address_func;
+ if (*args == '.')
+ args++;
+
/* Point at first word of argument data,
and at descriptor for first argument. */
p = buffer + 2;
@@ -1224,7 +1227,7 @@ match_insn_m68k (bfd_vma memaddr,
The only place this is stored in the opcode table is
in the arguments--look for arguments which specify fields in the 2nd
or 3rd words of the instruction. */
- for (d = best->args; *d; d += 2)
+ for (d = args; *d; d += 2)
{
/* I don't think it is necessary to be checking d[0] here;
I suspect all this could be moved to the case statement below. */
@@ -1271,8 +1274,8 @@ match_insn_m68k (bfd_vma memaddr,
three words long. */
if (p - buffer < 6
&& (best->match & 0xffff) == 0xffff
- && best->args[0] == '#'
- && best->args[1] == 'w')
+ && args[0] == '#'
+ && args[1] == 'w')
{
/* Copy the one word argument into the usual location for a one
word argument, to simplify printing it. We can get away with
@@ -1286,15 +1289,13 @@ match_insn_m68k (bfd_vma memaddr,
FETCH_DATA (info, p);
- d = best->args;
-
save_p = p;
info->print_address_func = dummy_print_address;
info->fprintf_func = (fprintf_ftype) dummy_printer;
/* We scan the operands twice. The first time we don't print anything,
but look for errors. */
- for (; *d; d += 2)
+ for (d = args; *d; d += 2)
{
int eaten = print_insn_arg (d, buffer, p, memaddr + (p - buffer), info);
@@ -1308,12 +1309,14 @@ match_insn_m68k (bfd_vma memaddr,
}
else
{
+ /* We must restore the print functions before trying to print the
+ error message. */
+ info->fprintf_func = save_printer;
+ info->print_address_func = save_print_address;
info->fprintf_func (info->stream,
/* xgettext:c-format */
_("<internal error in opcode table: %s %s>\n"),
best->name, best->args);
- info->fprintf_func = save_printer;
- info->print_address_func = save_print_address;
return 2;
}
}
@@ -1322,7 +1325,7 @@ match_insn_m68k (bfd_vma memaddr,
info->fprintf_func = save_printer;
info->print_address_func = save_print_address;
- d = best->args;
+ d = args;
info->fprintf_func (info->stream, "%s", best->name);
@@ -1394,6 +1397,10 @@ m68k_scan_mask (bfd_vma memaddr, disassemble_info *info,
const struct m68k_opcode *opc = opcodes[major_opcode][i];
unsigned long opcode = opc->opcode;
unsigned long match = opc->match;
+ const char *args = opc->args;
+
+ if (*args == '.')
+ args++;
if (((0xff & buffer[0] & (match >> 24)) == (0xff & (opcode >> 24)))
&& ((0xff & buffer[1] & (match >> 16)) == (0xff & (opcode >> 16)))
@@ -1409,7 +1416,7 @@ m68k_scan_mask (bfd_vma memaddr, disassemble_info *info,
/* Don't use for printout the variants of divul and divsl
that have the same register number in two places.
The more general variants will match instead. */
- for (d = opc->args; *d; d += 2)
+ for (d = args; *d; d += 2)
if (d[1] == 'D')
break;
@@ -1417,7 +1424,7 @@ m68k_scan_mask (bfd_vma memaddr, disassemble_info *info,
point coprocessor instructions which use the same
register number in two places, as above. */
if (*d == '\0')
- for (d = opc->args; *d; d += 2)
+ for (d = args; *d; d += 2)
if (d[1] == 't')
break;
@@ -1425,7 +1432,7 @@ m68k_scan_mask (bfd_vma memaddr, disassemble_info *info,
wait for fmoveml. */
if (*d == '\0')
{
- for (d = opc->args; *d; d += 2)
+ for (d = args; *d; d += 2)
{
if (d[0] == 's' && d[1] == '8')
{
@@ -1439,7 +1446,7 @@ m68k_scan_mask (bfd_vma memaddr, disassemble_info *info,
/* Don't match FPU insns with non-default coprocessor ID. */
if (*d == '\0')
{
- for (d = opc->args; *d; d += 2)
+ for (d = args; *d; d += 2)
{
if (d[0] == 'I')
{
@@ -1470,6 +1477,12 @@ print_insn_m68k (bfd_vma memaddr, disassemble_info *info)
bfd_byte *buffer = priv.the_buffer;
+ /* Save these printing functions in case we need to restore them
+ later. */
+ fprintf_ftype save_printer = info->fprintf_func;
+ void (* save_print_address) (bfd_vma, struct disassemble_info *)
+ = info->print_address_func;
+
info->private_data = (PTR) &priv;
/* Tell objdump to use two bytes per chunk
and six bytes per line for displaying raw data. */
@@ -1480,8 +1493,26 @@ print_insn_m68k (bfd_vma memaddr, disassemble_info *info)
priv.insn_start = memaddr;
if (setjmp (priv.bailout) != 0)
- /* Error return. */
- return -1;
+ {
+ /* longjmp may be called while these printing functions are
+ temporarily replaced with dummy functions. Restore them
+ before we leave.
+
+ Admittedly, this save-and-restore operation is somewhat ugly
+ in that we are exposing the fact that match_insn_m68k
+ temporarily replaces insn->fprintf_func and
+ insn->print_address_func. Perhaps, a real fix is to report a
+ FETCH_DATA failure with a return value of some sort, without
+ using setjmp/longjmp. A better fix may be to teach the m68k
+ disassembler do its job without temporarily replacing
+ insn->fprintf_func and insn->print_address_func, but that's a
+ task for another day. */
+ info->fprintf_func = save_printer;
+ info->print_address_func = save_print_address;
+
+ /* Error return. */
+ return -1;
+ }
arch_mask = bfd_m68k_mach_to_features (info->mach);
if (!arch_mask)
diff --git a/opcodes/m68k-opc.c b/opcodes/m68k-opc.c
index 867bbe16caa9..7f3b0d87c7fe 100644
--- a/opcodes/m68k-opc.c
+++ b/opcodes/m68k-opc.c
@@ -30,6 +30,10 @@
be consecutive. If they aren't, the assembler will bomb at
runtime. */
+/* Format strings consist of pairs of characters. The first describes
+ the type of the operand and the second describes the encoding.
+ include/opcodes/m68k.h describes them in detail. */
+
const struct m68k_opcode m68k_opcodes[] =
{
{"abcd", 2, one(0140400), one(0170770), "DsDd", m68000up },
@@ -131,20 +135,20 @@ const struct m68k_opcode m68k_opcodes[] =
{"bgtw", 2, one(0067000), one(0177777), "BW", m68000up | mcfisa_a },
{"blew", 2, one(0067400), one(0177777), "BW", m68000up | mcfisa_a },
-{"bhil", 2, one(0061377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"blsl", 2, one(0061777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bccl", 2, one(0062377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bcsl", 2, one(0062777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bnel", 2, one(0063377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"beql", 2, one(0063777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bvcl", 2, one(0064377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bvsl", 2, one(0064777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bpll", 2, one(0065377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bmil", 2, one(0065777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bgel", 2, one(0066377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bltl", 2, one(0066777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bgtl", 2, one(0067377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"blel", 2, one(0067777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
+{"bhil", 2, one(0061377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
+{"blsl", 2, one(0061777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
+{"bccl", 2, one(0062377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
+{"bcsl", 2, one(0062777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
+{"bnel", 2, one(0063377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
+{"beql", 2, one(0063777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
+{"bvcl", 2, one(0064377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
+{"bvsl", 2, one(0064777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
+{"bpll", 2, one(0065377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
+{"bmil", 2, one(0065777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
+{"bgel", 2, one(0066377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
+{"bltl", 2, one(0066777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
+{"bgtl", 2, one(0067377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
+{"blel", 2, one(0067777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
{"bhis", 2, one(0061000), one(0177400), "BB", m68000up | mcfisa_a },
{"blss", 2, one(0061400), one(0177400), "BB", m68000up | mcfisa_a },
@@ -193,14 +197,14 @@ const struct m68k_opcode m68k_opcodes[] =
{"bfset", 4, two(0167300, 0), two(0177700, 0170000), "?sO2O3", m68020up },
{"bftst", 4, two(0164300, 0), two(0177700, 0170000), "/sO2O3", m68020up },
-{"bgnd", 2, one(0045372), one(0177777), "", cpu32 },
+{"bgnd", 2, one(0045372), one(0177777), "", cpu32 | fido_a },
-{"bitrev", 2, one(0000300), one(0177770), "Ds", mcfisa_aa},
+{"bitrev", 2, one(0000300), one(0177770), "Ds", mcfisa_aa | mcfisa_c},
{"bkpt", 2, one(0044110), one(0177770), "ts", m68010up },
{"braw", 2, one(0060000), one(0177777), "BW", m68000up | mcfisa_a },
-{"bral", 2, one(0060377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
+{"bral", 2, one(0060377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
{"bras", 2, one(0060000), one(0177400), "BB", m68000up | mcfisa_a },
{"bset", 2, one(0000700), one(0170700), "Dd$s", m68000up | mcfisa_a },
@@ -209,14 +213,14 @@ const struct m68k_opcode m68k_opcodes[] =
{"bset", 4, one(0004300), one(0177700), "#bqs", mcfisa_a },
{"bsrw", 2, one(0060400), one(0177777), "BW", m68000up | mcfisa_a },
-{"bsrl", 2, one(0060777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
+{"bsrl", 2, one(0060777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c},
{"bsrs", 2, one(0060400), one(0177400), "BB", m68000up | mcfisa_a },
{"btst", 2, one(0000400), one(0170700), "Dd;b", m68000up | mcfisa_a },
{"btst", 4, one(0004000), one(0177700), "#b@s", m68000up },
{"btst", 4, one(0004000), one(0177700), "#bqs", mcfisa_a },
-{"byterev", 2, one(0001300), one(0177770), "Ds", mcfisa_aa},
+{"byterev", 2, one(0001300), one(0177770), "Ds", mcfisa_aa | mcfisa_c},
{"callm", 4, one(0003300), one(0177700), "#b!s", m68020 },
@@ -229,9 +233,9 @@ const struct m68k_opcode m68k_opcodes[] =
{"casw", 4, two(0006300, 0), two(0177700, 0177070), "D3D2~s", m68020up },
{"casl", 4, two(0007300, 0), two(0177700, 0177070), "D3D2~s", m68020up },
-{"chk2b", 4, two(0000300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 },
-{"chk2w", 4, two(0001300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 },
-{"chk2l", 4, two(0002300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 },
+{"chk2b", 4, two(0000300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a },
+{"chk2w", 4, two(0001300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a },
+{"chk2l", 4, two(0002300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a },
{"chkl", 2, one(0040400), one(0170700), ";lDd", m68000up },
{"chkw", 2, one(0040600), one(0170700), ";wDd", m68000up },
@@ -256,17 +260,17 @@ const struct m68k_opcode m68k_opcodes[] =
{"clrw", 2, one(0041100), one(0177700), "$s", m68000up | mcfisa_a },
{"clrl", 2, one(0041200), one(0177700), "$s", m68000up | mcfisa_a },
-{"cmp2b", 4, two(0000300,0), two(0177700,07777), "!sR1", m68020up | cpu32 },
-{"cmp2w", 4, two(0001300,0), two(0177700,07777), "!sR1", m68020up | cpu32 },
-{"cmp2l", 4, two(0002300,0), two(0177700,07777), "!sR1", m68020up | cpu32 },
+{"cmp2b", 4, two(0000300,0), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a },
+{"cmp2w", 4, two(0001300,0), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a },
+{"cmp2l", 4, two(0002300,0), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a },
{"cmpaw", 2, one(0130300), one(0170700), "*wAd", m68000up },
{"cmpal", 2, one(0130700), one(0170700), "*lAd", m68000up | mcfisa_a },
{"cmpib", 4, one(0006000), one(0177700), "#b@s", m68000up },
-{"cmpib", 4, one(0006000), one(0177700), "#bDs", mcfisa_b },
+{"cmpib", 4, one(0006000), one(0177700), "#bDs", mcfisa_b | mcfisa_c },
{"cmpiw", 4, one(0006100), one(0177700), "#w@s", m68000up },
-{"cmpiw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b },
+{"cmpiw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b | mcfisa_c },
{"cmpil", 6, one(0006200), one(0177700), "#l@s", m68000up },
{"cmpil", 6, one(0006200), one(0177700), "#lDs", mcfisa_a },
@@ -276,21 +280,45 @@ const struct m68k_opcode m68k_opcodes[] =
/* The cmp opcode can generate the cmpa, cmpm, and cmpi instructions. */
{"cmpb", 4, one(0006000), one(0177700), "#b@s", m68000up },
-{"cmpb", 4, one(0006000), one(0177700), "#bDs", mcfisa_b },
+{"cmpb", 4, one(0006000), one(0177700), "#bDs", mcfisa_b | mcfisa_c },
{"cmpb", 2, one(0130410), one(0170770), "+s+d", m68000up },
{"cmpb", 2, one(0130000), one(0170700), ";bDd", m68000up },
-{"cmpb", 2, one(0130000), one(0170700), "*bDd", mcfisa_b },
+{"cmpb", 2, one(0130000), one(0170700), "*bDd", mcfisa_b | mcfisa_c },
{"cmpw", 2, one(0130300), one(0170700), "*wAd", m68000up },
{"cmpw", 4, one(0006100), one(0177700), "#w@s", m68000up },
-{"cmpw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b },
+{"cmpw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b | mcfisa_c },
{"cmpw", 2, one(0130510), one(0170770), "+s+d", m68000up },
-{"cmpw", 2, one(0130100), one(0170700), "*wDd", m68000up | mcfisa_b },
+{"cmpw", 2, one(0130100), one(0170700), "*wDd", m68000up | mcfisa_b | mcfisa_c },
{"cmpl", 2, one(0130700), one(0170700), "*lAd", m68000up | mcfisa_a },
{"cmpl", 6, one(0006200), one(0177700), "#l@s", m68000up },
{"cmpl", 6, one(0006200), one(0177700), "#lDs", mcfisa_a },
{"cmpl", 2, one(0130610), one(0170770), "+s+d", m68000up },
{"cmpl", 2, one(0130200), one(0170700), "*lDd", m68000up | mcfisa_a },
-
+
+{"cp0bcbusy",2, one (0176300), one (01777770), "BW", mcfisa_a},
+{"cp1bcbusy",2, one (0177300), one (01777770), "BW", mcfisa_a},
+{"cp0nop", 4, two (0176000,0), two (01777477,0170777), "jE", mcfisa_a},
+{"cp1nop", 4, two (0177000,0), two (01777477,0170777), "jE", mcfisa_a},
+/* These all have 2 opcode words, but no fixed bits in the second
+ word. We use a leading ' ' in the args string to indicate the
+ extra opcode word. */
+{"cp0ldb", 6, one (0176000), one (01777700), ".pwR1jEK3", mcfisa_a},
+{"cp1ldb", 6, one (0177000), one (01777700), ".pwR1jEK3", mcfisa_a},
+{"cp0ldw", 6, one (0176100), one (01777700), ".pwR1jEK3", mcfisa_a},
+{"cp1ldw", 6, one (0177100), one (01777700), ".pwR1jEK3", mcfisa_a},
+{"cp0ldl", 6, one (0176200), one (01777700), ".pwR1jEK3", mcfisa_a},
+{"cp1ldl", 6, one (0177200), one (01777700), ".pwR1jEK3", mcfisa_a},
+{"cp0ld", 6, one (0176200), one (01777700), ".pwR1jEK3", mcfisa_a},
+{"cp1ld", 6, one (0177200), one (01777700), ".pwR1jEK3", mcfisa_a},
+{"cp0stb", 6, one (0176400), one (01777700), ".R1pwjEK3", mcfisa_a},
+{"cp1stb", 6, one (0177400), one (01777700), ".R1pwjEK3", mcfisa_a},
+{"cp0stw", 6, one (0176500), one (01777700), ".R1pwjEK3", mcfisa_a},
+{"cp1stw", 6, one (0177500), one (01777700), ".R1pwjEK3", mcfisa_a},
+{"cp0stl", 6, one (0176600), one (01777700), ".R1pwjEK3", mcfisa_a},
+{"cp1stl", 6, one (0177600), one (01777700), ".R1pwjEK3", mcfisa_a},
+{"cp0st", 6, one (0176600), one (01777700), ".R1pwjEK3", mcfisa_a},
+{"cp1st", 6, one (0177600), one (01777700), ".R1pwjEK3", mcfisa_a},
+
{"dbcc", 2, one(0052310), one(0177770), "DsBw", m68000up },
{"dbcs", 2, one(0052710), one(0177770), "DsBw", m68000up },
{"dbeq", 2, one(0053710), one(0177770), "DsBw", m68000up },
@@ -310,21 +338,21 @@ const struct m68k_opcode m68k_opcodes[] =
{"divsw", 2, one(0100700), one(0170700), ";wDd", m68000up | mcfhwdiv },
-{"divsl", 4, two(0046100,0006000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
-{"divsl", 4, two(0046100,0004000),two(0177700,0107770),";lDD", m68020up|cpu32 },
+{"divsl", 4, two(0046100,0006000),two(0177700,0107770),";lD3D1", m68020up | cpu32 | fido_a },
+{"divsl", 4, two(0046100,0004000),two(0177700,0107770),";lDD", m68020up | cpu32 | fido_a },
{"divsl", 4, two(0046100,0004000),two(0177700,0107770),"qsDD", mcfhwdiv },
-{"divsll", 4, two(0046100,0004000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
-{"divsll", 4, two(0046100,0004000),two(0177700,0107770),";lDD", m68020up|cpu32 },
+{"divsll", 4, two(0046100,0004000),two(0177700,0107770),";lD3D1",m68020up | cpu32 | fido_a },
+{"divsll", 4, two(0046100,0004000),two(0177700,0107770),";lDD", m68020up | cpu32 | fido_a },
{"divuw", 2, one(0100300), one(0170700), ";wDd", m68000up | mcfhwdiv },
-{"divul", 4, two(0046100,0002000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
-{"divul", 4, two(0046100,0000000),two(0177700,0107770),";lDD", m68020up|cpu32 },
+{"divul", 4, two(0046100,0002000),two(0177700,0107770),";lD3D1", m68020up | cpu32 | fido_a },
+{"divul", 4, two(0046100,0000000),two(0177700,0107770),";lDD", m68020up | cpu32 | fido_a },
{"divul", 4, two(0046100,0000000),two(0177700,0107770),"qsDD", mcfhwdiv },
-{"divull", 4, two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
-{"divull", 4, two(0046100,0000000),two(0177700,0107770),";lDD", m68020up|cpu32 },
+{"divull", 4, two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up | cpu32 | fido_a },
+{"divull", 4, two(0046100,0000000),two(0177700,0107770),";lDD", m68020up | cpu32 | fido_a },
{"eorib", 4, one(0005000), one(0177700), "#b$s", m68000up },
{"eorib", 4, one(0005074), one(0177777), "#bCs", m68000up },
@@ -358,9 +386,9 @@ const struct m68k_opcode m68k_opcodes[] =
{"extw", 2, one(0044200), one(0177770), "Ds", m68000up|mcfisa_a },
{"extl", 2, one(0044300), one(0177770), "Ds", m68000up|mcfisa_a },
-{"extbl", 2, one(0044700), one(0177770), "Ds", m68020up|cpu32|mcfisa_a },
+{"extbl", 2, one(0044700), one(0177770), "Ds", m68020up | cpu32 | fido_a | mcfisa_a },
-{"ff1", 2, one(0002300), one(0177770), "Ds", mcfisa_aa},
+{"ff1", 2, one(0002300), one(0177770), "Ds", mcfisa_aa | mcfisa_c},
/* float stuff starts here */
@@ -461,7 +489,7 @@ const struct m68k_opcode m68k_opcodes[] =
{"fdaddd", 4, two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
{"fdaddd", 4, two(0xF000, 0x5466), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
{"fdaddd", 4, two(0xF000, 0x5466), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
-{"fdaddl", 4, two(0xF000, 0x4066), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
+{"fdaddl", 4, two(0xF000, 0x4066), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
{"fdaddl", 4, two(0xF000, 0x4066), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
{"fdaddp", 4, two(0xF000, 0x4C66), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
{"fdadds", 4, two(0xF000, 0x4466), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
@@ -1423,26 +1451,26 @@ const struct m68k_opcode m68k_opcodes[] =
{"halt", 2, one(0045310), one(0177777), "", m68060 | mcfisa_a },
{"illegal", 2, one(0045374), one(0177777), "", m68000up | mcfisa_a },
-{"intouch", 2, one(0xf428), one(0xfff8), "As", mcfisa_b },
+{"intouch", 2, one(0xf428), one(0xfff8), "As", mcfisa_b | mcfisa_c },
{"jmp", 2, one(0047300), one(0177700), "!s", m68000up | mcfisa_a },
-{"jra", 2, one(0060000), one(0177400), "Bg", m68000up | mcfisa_a },
+{"jra", 2, one(0060000), one(0177400), "Bb", m68000up | mcfisa_a },
{"jra", 2, one(0047300), one(0177700), "!s", m68000up | mcfisa_a },
{"jsr", 2, one(0047200), one(0177700), "!s", m68000up | mcfisa_a },
-{"jbsr", 2, one(0060400), one(0177400), "Bg", m68000up | mcfisa_a },
+{"jbsr", 2, one(0060400), one(0177400), "Bs", m68000up | mcfisa_a },
{"jbsr", 2, one(0047200), one(0177700), "!s", m68000up | mcfisa_a },
{"lea", 2, one(0040700), one(0170700), "!sAd", m68000up | mcfisa_a },
-{"lpstop", 6, two(0174000,0000700),two(0177777,0177777),"#w", cpu32|m68060 },
+{"lpstop", 6, two(0174000,0000700),two(0177777,0177777),"#w", cpu32 | fido_a | m68060 },
{"linkw", 4, one(0047120), one(0177770), "As#w", m68000up | mcfisa_a },
-{"linkl", 6, one(0044010), one(0177770), "As#l", m68020up | cpu32 },
+{"linkl", 6, one(0044010), one(0177770), "As#l", m68020up | cpu32 | fido_a },
{"link", 4, one(0047120), one(0177770), "As#W", m68000up | mcfisa_a },
-{"link", 6, one(0044010), one(0177770), "As#l", m68020up | cpu32 },
+{"link", 6, one(0044010), one(0177770), "As#l", m68020up | cpu32 | fido_a },
{"lslb", 2, one(0160410), one(0170770), "QdDs", m68000up },
{"lslb", 2, one(0160450), one(0170770), "DdDs", m68000up },
@@ -1553,13 +1581,13 @@ const struct m68k_opcode m68k_opcodes[] =
{"moveb", 2, one(0010200), one(0170700), "obad", mcfisa_a },
{"moveb", 2, one(0010300), one(0170700), "ob+d", mcfisa_a },
{"moveb", 2, one(0010400), one(0170700), "ob-d", mcfisa_a },
-{"moveb", 2, one(0010000), one(0170000), "obnd", mcfisa_b },
+{"moveb", 2, one(0010000), one(0170000), "obnd", mcfisa_b | mcfisa_c },
{"movew", 2, one(0030000), one(0170000), "*w%d", m68000up },
{"movew", 2, one(0030000), one(0170000), "ms%d", mcfisa_a },
{"movew", 2, one(0030000), one(0170000), "nspd", mcfisa_a },
{"movew", 2, one(0030000), one(0170000), "owmd", mcfisa_a },
-{"movew", 2, one(0030000), one(0170000), "ownd", mcfisa_b },
+{"movew", 2, one(0030000), one(0170000), "ownd", mcfisa_b | mcfisa_c },
{"movew", 2, one(0040300), one(0177700), "Ss$s", m68000up },
{"movew", 2, one(0040300), one(0177770), "SsDs", mcfisa_a },
{"movew", 2, one(0041300), one(0177700), "Cs$s", m68010up },
@@ -1576,7 +1604,7 @@ const struct m68k_opcode m68k_opcodes[] =
{"movel", 2, one(0020000), one(0170000), "ms%d", mcfisa_a },
{"movel", 2, one(0020000), one(0170000), "nspd", mcfisa_a },
{"movel", 2, one(0020000), one(0170000), "olmd", mcfisa_a },
-{"movel", 2, one(0020000), one(0170000), "olnd", mcfisa_b },
+{"movel", 2, one(0020000), one(0170000), "olnd", mcfisa_b | mcfisa_c },
{"movel", 2, one(0047140), one(0177770), "AsUd", m68000up | mcfusp },
{"movel", 2, one(0047150), one(0177770), "UdAs", m68000up | mcfusp },
{"movel", 2, one(0120600), one(0177760), "EsRs", mcfmac },
@@ -1609,7 +1637,7 @@ const struct m68k_opcode m68k_opcodes[] =
{"move", 2, one(0030000), one(0170000), "ms%d", mcfisa_a },
{"move", 2, one(0030000), one(0170000), "nspd", mcfisa_a },
{"move", 2, one(0030000), one(0170000), "owmd", mcfisa_a },
-{"move", 2, one(0030000), one(0170000), "ownd", mcfisa_b },
+{"move", 2, one(0030000), one(0170000), "ownd", mcfisa_b | mcfisa_c },
{"move", 2, one(0040300), one(0177700), "Ss$s", m68000up },
{"move", 2, one(0040300), one(0177770), "SsDs", mcfisa_a },
{"move", 2, one(0041300), one(0177700), "Cs$s", m68010up },
@@ -1624,11 +1652,11 @@ const struct m68k_opcode m68k_opcodes[] =
{"move", 2, one(0047140), one(0177770), "AsUd", m68000up },
{"move", 2, one(0047150), one(0177770), "UdAs", m68000up },
-{"mov3ql", 2, one(0120500), one(0170700), "xd%s", mcfisa_b },
-{"mvsb", 2, one(0070400), one(0170700), "*bDd", mcfisa_b },
-{"mvsw", 2, one(0070500), one(0170700), "*wDd", mcfisa_b },
-{"mvzb", 2, one(0070600), one(0170700), "*bDd", mcfisa_b },
-{"mvzw", 2, one(0070700), one(0170700), "*wDd", mcfisa_b },
+{"mov3ql", 2, one(0120500), one(0170700), "xd%s", mcfisa_b | mcfisa_c },
+{"mvsb", 2, one(0070400), one(0170700), "*bDd", mcfisa_b | mcfisa_c },
+{"mvsw", 2, one(0070500), one(0170700), "*wDd", mcfisa_b | mcfisa_c },
+{"mvzb", 2, one(0070600), one(0170700), "*bDd", mcfisa_b | mcfisa_c },
+{"mvzw", 2, one(0070700), one(0170700), "*wDd", mcfisa_b | mcfisa_c },
{"movesb", 4, two(0007000, 0), two(0177700, 07777), "~sR1", m68010up },
{"movesb", 4, two(0007000, 04000), two(0177700, 07777), "R1~s", m68010up },
@@ -1672,14 +1700,14 @@ const struct m68k_opcode m68k_opcodes[] =
{"msacl", 4, two(0xa000, 0x0900), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
{"mulsw", 2, one(0140700), one(0170700), ";wDd", m68000up|mcfisa_a },
-{"mulsl", 4, two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
+{"mulsl", 4, two(0046000,004000), two(0177700,0107770), ";lD1", m68020up | cpu32 | fido_a },
{"mulsl", 4, two(0046000,004000), two(0177700,0107770), "qsD1", mcfisa_a },
-{"mulsl", 4, two(0046000,006000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
+{"mulsl", 4, two(0046000,006000), two(0177700,0107770), ";lD3D1",m68020up | cpu32 | fido_a },
{"muluw", 2, one(0140300), one(0170700), ";wDd", m68000up|mcfisa_a },
-{"mulul", 4, two(0046000,000000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
+{"mulul", 4, two(0046000,000000), two(0177700,0107770), ";lD1", m68020up | cpu32 | fido_a },
{"mulul", 4, two(0046000,000000), two(0177700,0107770), "qsD1", mcfisa_a },
-{"mulul", 4, two(0046000,002000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
+{"mulul", 4, two(0046000,002000), two(0177700,0107770), ";lD3D1",m68020up | cpu32 | fido_a },
{"nbcd", 2, one(0044000), one(0177700), "$s", m68000up },
@@ -1993,11 +2021,69 @@ const struct m68k_opcode m68k_opcodes[] =
{"rts", 2, one(0047165), one(0177777), "", m68000up | mcfisa_a },
-{"satsl", 2, one(0046200), one(0177770), "Ds", mcfisa_b },
+{"satsl", 2, one(0046200), one(0177770), "Ds", mcfisa_b | mcfisa_c },
{"sbcd", 2, one(0100400), one(0170770), "DsDd", m68000up },
{"sbcd", 2, one(0100410), one(0170770), "-s-d", m68000up },
+ /* Traps have to come before conditional sets, as they have a more
+ specific opcode. */
+{"trapcc", 2, one(0052374), one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapcs", 2, one(0052774), one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapeq", 2, one(0053774), one(0177777), "", m68020up | cpu32 | fido_a },
+{"tpf", 2, one(0050774), one(0177777), "", mcfisa_a },
+{"trapf", 2, one(0050774), one(0177777), "", m68020up | cpu32 | fido_a | mcfisa_a },
+{"trapge", 2, one(0056374), one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapgt", 2, one(0057374), one(0177777), "", m68020up | cpu32 | fido_a },
+{"traphi", 2, one(0051374), one(0177777), "", m68020up | cpu32 | fido_a },
+{"traple", 2, one(0057774), one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapls", 2, one(0051774), one(0177777), "", m68020up | cpu32 | fido_a },
+{"traplt", 2, one(0056774), one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapmi", 2, one(0055774), one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapne", 2, one(0053374), one(0177777), "", m68020up | cpu32 | fido_a },
+{"trappl", 2, one(0055374), one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapt", 2, one(0050374), one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapvc", 2, one(0054374), one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapvs", 2, one(0054774), one(0177777), "", m68020up | cpu32 | fido_a },
+
+{"trapccw", 4, one(0052372), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapcsw", 4, one(0052772), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapeqw", 4, one(0053772), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"tpfw", 4, one(0050772), one(0177777), "#w", mcfisa_a},
+{"trapfw", 4, one(0050772), one(0177777), "#w", m68020up | cpu32 | fido_a | mcfisa_a},
+{"trapgew", 4, one(0056372), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapgtw", 4, one(0057372), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"traphiw", 4, one(0051372), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"traplew", 4, one(0057772), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"traplsw", 4, one(0051772), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapltw", 4, one(0056772), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapmiw", 4, one(0055772), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapnew", 4, one(0053372), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapplw", 4, one(0055372), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"traptw", 4, one(0050372), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapvcw", 4, one(0054372), one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapvsw", 4, one(0054772), one(0177777), "#w", m68020up | cpu32 | fido_a },
+
+{"trapccl", 6, one(0052373), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapcsl", 6, one(0052773), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapeql", 6, one(0053773), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"tpfl", 6, one(0050773), one(0177777), "#l", mcfisa_a},
+{"trapfl", 6, one(0050773), one(0177777), "#l", m68020up | cpu32 | fido_a | mcfisa_a},
+{"trapgel", 6, one(0056373), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapgtl", 6, one(0057373), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"traphil", 6, one(0051373), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"traplel", 6, one(0057773), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"traplsl", 6, one(0051773), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapltl", 6, one(0056773), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapmil", 6, one(0055773), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapnel", 6, one(0053373), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trappll", 6, one(0055373), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"traptl", 6, one(0050373), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapvcl", 6, one(0054373), one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapvsl", 6, one(0054773), one(0177777), "#l", m68020up | cpu32 | fido_a },
+
+{"trapv", 2, one(0047166), one(0177777), "", m68000up },
+
{"scc", 2, one(0052300), one(0177700), "$s", m68000up },
{"scc", 2, one(0052300), one(0177700), "Ds", mcfisa_a },
{"scs", 2, one(0052700), one(0177700), "$s", m68000up },
@@ -2021,15 +2107,17 @@ const struct m68k_opcode m68k_opcodes[] =
{"smi", 2, one(0055700), one(0177700), "$s", m68000up },
{"smi", 2, one(0055700), one(0177700), "Ds", mcfisa_a },
{"sne", 2, one(0053300), one(0177700), "$s", m68000up },
-{"sne", 2, one(0053300), one(0177700), "Ds", mcfisa_a },
+{"sne", 2, one(0053300), one(0177770), "Ds", mcfisa_a },
{"spl", 2, one(0055300), one(0177700), "$s", m68000up },
-{"spl", 2, one(0055300), one(0177700), "Ds", mcfisa_a },
+{"spl", 2, one(0055300), one(0177770), "Ds", mcfisa_a },
{"st", 2, one(0050300), one(0177700), "$s", m68000up },
-{"st", 2, one(0050300), one(0177700), "Ds", mcfisa_a },
+{"st", 2, one(0050300), one(0177770), "Ds", mcfisa_a },
{"svc", 2, one(0054300), one(0177700), "$s", m68000up },
-{"svc", 2, one(0054300), one(0177700), "Ds", mcfisa_a },
+{"svc", 2, one(0054300), one(0177770), "Ds", mcfisa_a },
{"svs", 2, one(0054700), one(0177700), "$s", m68000up },
-{"svs", 2, one(0054700), one(0177700), "Ds", mcfisa_a },
+{"svs", 2, one(0054700), one(0177770), "Ds", mcfisa_a },
+
+{"sleep", 2, one(0047170), one(0177777), "", fido_a },
{"stop", 4, one(0047162), one(0177777), "#w", m68000up | mcfisa_a },
@@ -2082,7 +2170,7 @@ const struct m68k_opcode m68k_opcodes[] =
{"swbeg", 4, one(0045374), one(0177777), "#w", m68000up | mcfisa_a },
{"swbegl", 6, one(0045375), one(0177777), "#l", m68000up | mcfisa_a },
-{"tas", 2, one(0045300), one(0177700), "$s", m68000up | mcfisa_b},
+{"tas", 2, one(0045300), one(0177700), "$s", m68000up | mcfisa_b | mcfisa_c},
#define TBL1(name,insn_size,signed,round,size) \
{name, insn_size, two(0174000, (signed<<11)|(!round<<10)|(size<<6)|0000400), \
@@ -2091,71 +2179,20 @@ const struct m68k_opcode m68k_opcodes[] =
two(0177770,0107770), "DsD3D1", cpu32 }
#define TBL(name1, name2, name3, s, r) \
TBL1(name1, 4, s, r, 0), TBL1(name2, 4, s, r, 1), TBL1(name3, 4, s, r, 2)
-TBL("tblsb", "tblsw", "tblsl", 2, 1),
-TBL("tblsnb", "tblsnw", "tblsnl", 2, 0),
+TBL("tblsb", "tblsw", "tblsl", 1, 1),
+TBL("tblsnb", "tblsnw", "tblsnl", 1, 0),
TBL("tblub", "tbluw", "tblul", 0, 1),
TBL("tblunb", "tblunw", "tblunl", 0, 0),
{"trap", 2, one(0047100), one(0177760), "Ts", m68000up | mcfisa_a },
-{"trapcc", 2, one(0052374), one(0177777), "", m68020up | cpu32 },
-{"trapcs", 2, one(0052774), one(0177777), "", m68020up | cpu32 },
-{"trapeq", 2, one(0053774), one(0177777), "", m68020up | cpu32 },
-{"trapf", 2, one(0050774), one(0177777), "", m68020up | cpu32 | mcfisa_a },
-{"trapge", 2, one(0056374), one(0177777), "", m68020up | cpu32 },
-{"trapgt", 2, one(0057374), one(0177777), "", m68020up | cpu32 },
-{"traphi", 2, one(0051374), one(0177777), "", m68020up | cpu32 },
-{"traple", 2, one(0057774), one(0177777), "", m68020up | cpu32 },
-{"trapls", 2, one(0051774), one(0177777), "", m68020up | cpu32 },
-{"traplt", 2, one(0056774), one(0177777), "", m68020up | cpu32 },
-{"trapmi", 2, one(0055774), one(0177777), "", m68020up | cpu32 },
-{"trapne", 2, one(0053374), one(0177777), "", m68020up | cpu32 },
-{"trappl", 2, one(0055374), one(0177777), "", m68020up | cpu32 },
-{"trapt", 2, one(0050374), one(0177777), "", m68020up | cpu32 },
-{"trapvc", 2, one(0054374), one(0177777), "", m68020up | cpu32 },
-{"trapvs", 2, one(0054774), one(0177777), "", m68020up | cpu32 },
-
-{"trapccw", 4, one(0052372), one(0177777), "#w", m68020up|cpu32 },
-{"trapcsw", 4, one(0052772), one(0177777), "#w", m68020up|cpu32 },
-{"trapeqw", 4, one(0053772), one(0177777), "#w", m68020up|cpu32 },
-{"trapfw", 4, one(0050772), one(0177777), "#w", m68020up|cpu32|mcfisa_a},
-{"trapgew", 4, one(0056372), one(0177777), "#w", m68020up|cpu32 },
-{"trapgtw", 4, one(0057372), one(0177777), "#w", m68020up|cpu32 },
-{"traphiw", 4, one(0051372), one(0177777), "#w", m68020up|cpu32 },
-{"traplew", 4, one(0057772), one(0177777), "#w", m68020up|cpu32 },
-{"traplsw", 4, one(0051772), one(0177777), "#w", m68020up|cpu32 },
-{"trapltw", 4, one(0056772), one(0177777), "#w", m68020up|cpu32 },
-{"trapmiw", 4, one(0055772), one(0177777), "#w", m68020up|cpu32 },
-{"trapnew", 4, one(0053372), one(0177777), "#w", m68020up|cpu32 },
-{"trapplw", 4, one(0055372), one(0177777), "#w", m68020up|cpu32 },
-{"traptw", 4, one(0050372), one(0177777), "#w", m68020up|cpu32 },
-{"trapvcw", 4, one(0054372), one(0177777), "#w", m68020up|cpu32 },
-{"trapvsw", 4, one(0054772), one(0177777), "#w", m68020up|cpu32 },
-
-{"trapccl", 6, one(0052373), one(0177777), "#l", m68020up|cpu32 },
-{"trapcsl", 6, one(0052773), one(0177777), "#l", m68020up|cpu32 },
-{"trapeql", 6, one(0053773), one(0177777), "#l", m68020up|cpu32 },
-{"trapfl", 6, one(0050773), one(0177777), "#l", m68020up|cpu32|mcfisa_a},
-{"trapgel", 6, one(0056373), one(0177777), "#l", m68020up|cpu32 },
-{"trapgtl", 6, one(0057373), one(0177777), "#l", m68020up|cpu32 },
-{"traphil", 6, one(0051373), one(0177777), "#l", m68020up|cpu32 },
-{"traplel", 6, one(0057773), one(0177777), "#l", m68020up|cpu32 },
-{"traplsl", 6, one(0051773), one(0177777), "#l", m68020up|cpu32 },
-{"trapltl", 6, one(0056773), one(0177777), "#l", m68020up|cpu32 },
-{"trapmil", 6, one(0055773), one(0177777), "#l", m68020up|cpu32 },
-{"trapnel", 6, one(0053373), one(0177777), "#l", m68020up|cpu32 },
-{"trappll", 6, one(0055373), one(0177777), "#l", m68020up|cpu32 },
-{"traptl", 6, one(0050373), one(0177777), "#l", m68020up|cpu32 },
-{"trapvcl", 6, one(0054373), one(0177777), "#l", m68020up|cpu32 },
-{"trapvsl", 6, one(0054773), one(0177777), "#l", m68020up|cpu32 },
-
-{"trapv", 2, one(0047166), one(0177777), "", m68000up },
+{"trapx", 2, one(0047060), one(0177760), "Ts", fido_a },
-{"tstb", 2, one(0045000), one(0177700), ";b", m68020up|cpu32|mcfisa_a },
+{"tstb", 2, one(0045000), one(0177700), ";b", m68020up | cpu32 | fido_a | mcfisa_a },
{"tstb", 2, one(0045000), one(0177700), "$b", m68000up },
-{"tstw", 2, one(0045100), one(0177700), "*w", m68020up|cpu32|mcfisa_a },
+{"tstw", 2, one(0045100), one(0177700), "*w", m68020up | cpu32 | fido_a | mcfisa_a },
{"tstw", 2, one(0045100), one(0177700), "$w", m68000up },
-{"tstl", 2, one(0045200), one(0177700), "*l", m68020up|cpu32|mcfisa_a },
+{"tstl", 2, one(0045200), one(0177700), "*l", m68020up | cpu32 | fido_a | mcfisa_a },
{"tstl", 2, one(0045200), one(0177700), "$l", m68000up },
{"unlk", 2, one(0047130), one(0177770), "As", m68000up | mcfisa_a },
@@ -2167,6 +2204,8 @@ TBL("tblunb", "tblunw", "tblunl", 0, 0),
{"wddataw", 2, one(0175500), one(0177700), "~s", mcfisa_a },
{"wddatal", 2, one(0175600), one(0177700), "~s", mcfisa_a },
+{"wdebugl", 4, two(0175720, 03), two(0177770, 0xffff), "as", mcfisa_a },
+{"wdebugl", 4, two(0175750, 03), two(0177770, 0xffff), "ds", mcfisa_a },
{"wdebug", 4, two(0175720, 03), two(0177770, 0xffff), "as", mcfisa_a },
{"wdebug", 4, two(0175750, 03), two(0177770, 0xffff), "ds", mcfisa_a },
};
diff --git a/opcodes/mep-asm.c b/opcodes/mep-asm.c
new file mode 100644
index 000000000000..66f20a7479f4
--- /dev/null
+++ b/opcodes/mep-asm.c
@@ -0,0 +1,1398 @@
+/* Assembler interface for targets using CGEN. -*- C -*-
+ CGEN: Cpu tools GENerator
+
+ THIS FILE IS MACHINE GENERATED WITH CGEN.
+ - the resultant file is machine generated, cgen-asm.in isn't
+
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2005
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils and GDB, the GNU debugger.
+
+ 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. */
+
+/* ??? Eventually more and more of this stuff can go to cpu-independent files.
+ Keep that in mind. */
+
+#include "sysdep.h"
+#include <stdio.h>
+#include "ansidecl.h"
+#include "bfd.h"
+#include "symcat.h"
+#include "mep-desc.h"
+#include "mep-opc.h"
+#include "opintl.h"
+#include "xregex.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+
+#undef min
+#define min(a,b) ((a) < (b) ? (a) : (b))
+#undef max
+#define max(a,b) ((a) > (b) ? (a) : (b))
+
+static const char * parse_insn_normal
+ (CGEN_CPU_DESC, const CGEN_INSN *, const char **, CGEN_FIELDS *);
+
+/* -- assembler routines inserted here. */
+
+/* -- asm.c */
+
+#define CGEN_VALIDATE_INSN_SUPPORTED
+
+ const char * parse_csrn (CGEN_CPU_DESC, const char **, CGEN_KEYWORD *, long *);
+ const char * parse_tpreg (CGEN_CPU_DESC, const char **, CGEN_KEYWORD *, long *);
+ const char * parse_spreg (CGEN_CPU_DESC, const char **, CGEN_KEYWORD *, long *);
+ const char * parse_mep_align (CGEN_CPU_DESC, const char **, enum cgen_operand_type, long *);
+ const char * parse_mep_alignu (CGEN_CPU_DESC, const char **, enum cgen_operand_type, unsigned long *);
+static const char * parse_signed16 (CGEN_CPU_DESC, const char **, int, long *);
+static const char * parse_unsigned16 (CGEN_CPU_DESC, const char **, int, unsigned long *);
+static const char * parse_lo16 (CGEN_CPU_DESC, const char **, int, long *, long);
+static const char * parse_unsigned7 (CGEN_CPU_DESC, const char **, enum cgen_operand_type, unsigned long *);
+static const char * parse_zero (CGEN_CPU_DESC, const char **, int, long *);
+
+const char *
+parse_csrn (CGEN_CPU_DESC cd, const char **strp,
+ CGEN_KEYWORD *keyword_table, long *field)
+{
+ const char *err;
+ unsigned long value;
+
+ err = cgen_parse_keyword (cd, strp, keyword_table, field);
+ if (!err)
+ return NULL;
+
+ err = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_CSRN_IDX, & value);
+ if (err)
+ return err;
+ *field = value;
+ return NULL;
+}
+
+/* begin-cop-ip-parse-handlers */
+static const char *
+parse_fmax_cr (CGEN_CPU_DESC cd,
+ const char **strp,
+ CGEN_KEYWORD *keyword_table ATTRIBUTE_UNUSED,
+ long *field)
+{
+ return cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_cr_fmax, field);
+}
+static const char *
+parse_fmax_ccr (CGEN_CPU_DESC cd,
+ const char **strp,
+ CGEN_KEYWORD *keyword_table ATTRIBUTE_UNUSED,
+ long *field)
+{
+ return cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_fmax, field);
+}
+/* end-cop-ip-parse-handlers */
+
+const char *
+parse_tpreg (CGEN_CPU_DESC cd, const char ** strp,
+ CGEN_KEYWORD *keyword_table, long *field)
+{
+ const char *err;
+
+ err = cgen_parse_keyword (cd, strp, keyword_table, field);
+ if (err)
+ return err;
+ if (*field != 13)
+ return _("Only $tp or $13 allowed for this opcode");
+ return NULL;
+}
+
+const char *
+parse_spreg (CGEN_CPU_DESC cd, const char ** strp,
+ CGEN_KEYWORD *keyword_table, long *field)
+{
+ const char *err;
+
+ err = cgen_parse_keyword (cd, strp, keyword_table, field);
+ if (err)
+ return err;
+ if (*field != 15)
+ return _("Only $sp or $15 allowed for this opcode");
+ return NULL;
+}
+
+const char *
+parse_mep_align (CGEN_CPU_DESC cd, const char ** strp,
+ enum cgen_operand_type type, long *field)
+{
+ long lsbs = 0;
+ const char *err;
+
+ switch (type)
+ {
+ case MEP_OPERAND_PCREL8A2:
+ case MEP_OPERAND_PCREL12A2:
+ case MEP_OPERAND_PCREL17A2:
+ case MEP_OPERAND_PCREL24A2:
+ case MEP_OPERAND_CDISP8A2:
+ case MEP_OPERAND_CDISP8A4:
+ case MEP_OPERAND_CDISP8A8:
+ err = cgen_parse_signed_integer (cd, strp, type, field);
+ break;
+ case MEP_OPERAND_PCABS24A2:
+ case MEP_OPERAND_UDISP7:
+ case MEP_OPERAND_UDISP7A2:
+ case MEP_OPERAND_UDISP7A4:
+ case MEP_OPERAND_UIMM7A4:
+ case MEP_OPERAND_ADDR24A4:
+ err = cgen_parse_unsigned_integer (cd, strp, type, (unsigned long *) field);
+ break;
+ default:
+ abort();
+ }
+ if (err)
+ return err;
+ switch (type)
+ {
+ case MEP_OPERAND_UDISP7:
+ lsbs = 0;
+ break;
+ case MEP_OPERAND_PCREL8A2:
+ case MEP_OPERAND_PCREL12A2:
+ case MEP_OPERAND_PCREL17A2:
+ case MEP_OPERAND_PCREL24A2:
+ case MEP_OPERAND_PCABS24A2:
+ case MEP_OPERAND_UDISP7A2:
+ case MEP_OPERAND_CDISP8A2:
+ lsbs = *field & 1;
+ break;
+ case MEP_OPERAND_UDISP7A4:
+ case MEP_OPERAND_UIMM7A4:
+ case MEP_OPERAND_ADDR24A4:
+ case MEP_OPERAND_CDISP8A4:
+ lsbs = *field & 3;
+ break;
+ case MEP_OPERAND_CDISP8A8:
+ lsbs = *field & 7;
+ break;
+ default:
+ /* Safe assumption? */
+ abort ();
+ }
+ if (lsbs)
+ return "Value is not aligned enough";
+ return NULL;
+}
+
+const char *
+parse_mep_alignu (CGEN_CPU_DESC cd, const char ** strp,
+ enum cgen_operand_type type, unsigned long *field)
+{
+ return parse_mep_align (cd, strp, type, (long *) field);
+}
+
+
+/* Handle %lo(), %tpoff(), %sdaoff(), %hi(), and other signed
+ constants in a signed context. */
+
+static const char *
+parse_signed16 (CGEN_CPU_DESC cd,
+ const char **strp,
+ int opindex,
+ long *valuep)
+{
+ return parse_lo16 (cd, strp, opindex, valuep, 1);
+}
+
+static const char *
+parse_lo16 (CGEN_CPU_DESC cd,
+ const char **strp,
+ int opindex,
+ long *valuep,
+ long signedp)
+{
+ const char *errmsg;
+ enum cgen_parse_operand_result result_type;
+ bfd_vma value;
+
+ if (strncasecmp (*strp, "%lo(", 4) == 0)
+ {
+ *strp += 4;
+ errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_MEP_LOW16,
+ & result_type, & value);
+ if (**strp != ')')
+ return _("missing `)'");
+ ++*strp;
+ if (errmsg == NULL
+ && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
+ value &= 0xffff;
+ if (signedp)
+ *valuep = (long)(short) value;
+ else
+ *valuep = value;
+ return errmsg;
+ }
+
+ if (strncasecmp (*strp, "%hi(", 4) == 0)
+ {
+ *strp += 4;
+ errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_MEP_HI16S,
+ & result_type, & value);
+ if (**strp != ')')
+ return _("missing `)'");
+ ++*strp;
+ if (errmsg == NULL
+ && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
+ value = (value + 0x8000) >> 16;
+ *valuep = value;
+ return errmsg;
+ }
+
+ if (strncasecmp (*strp, "%uhi(", 5) == 0)
+ {
+ *strp += 5;
+ errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_MEP_HI16U,
+ & result_type, & value);
+ if (**strp != ')')
+ return _("missing `)'");
+ ++*strp;
+ if (errmsg == NULL
+ && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
+ value = value >> 16;
+ *valuep = value;
+ return errmsg;
+ }
+
+ if (strncasecmp (*strp, "%sdaoff(", 8) == 0)
+ {
+ *strp += 8;
+ errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_MEP_GPREL,
+ NULL, & value);
+ if (**strp != ')')
+ return _("missing `)'");
+ ++*strp;
+ *valuep = value;
+ return errmsg;
+ }
+
+ if (strncasecmp (*strp, "%tpoff(", 7) == 0)
+ {
+ *strp += 7;
+ errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_MEP_TPREL,
+ NULL, & value);
+ if (**strp != ')')
+ return _("missing `)'");
+ ++*strp;
+ *valuep = value;
+ return errmsg;
+ }
+
+ if (**strp == '%')
+ return _("invalid %function() here");
+
+ return cgen_parse_signed_integer (cd, strp, opindex, valuep);
+}
+
+static const char *
+parse_unsigned16 (CGEN_CPU_DESC cd,
+ const char **strp,
+ int opindex,
+ unsigned long *valuep)
+{
+ return parse_lo16 (cd, strp, opindex, (long *) valuep, 0);
+}
+
+/* A special case of parse_signed16 which accepts only the value zero. */
+
+static const char *
+parse_zero (CGEN_CPU_DESC cd, const char **strp, int opindex, long *valuep)
+{
+ const char *errmsg;
+ enum cgen_parse_operand_result result_type;
+ bfd_vma value;
+
+ /*fprintf(stderr, "dj: signed parse opindex `%s'\n", *strp);*/
+
+ /* Prevent ($ry) from being attempted as an expression on 'sw $rx,($ry)'.
+ It will fail and cause ry to be listed as an undefined symbol in the
+ listing. */
+ if (strncmp (*strp, "($", 2) == 0)
+ return "not zero"; /* any string will do -- will never be seen. */
+
+ if (strncasecmp (*strp, "%lo(", 4) == 0)
+ {
+ *strp += 4;
+ errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_MEP_LOW16,
+ &result_type, &value);
+ if (**strp != ')')
+ return "missing `)'";
+ ++*strp;
+ if (errmsg == NULL
+ && (result_type != CGEN_PARSE_OPERAND_RESULT_NUMBER || value != 0))
+ return "not zero"; /* any string will do -- will never be seen. */
+ *valuep = value;
+ return errmsg;
+ }
+
+ if (strncasecmp (*strp, "%hi(", 4) == 0)
+ {
+ *strp += 4;
+ errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_MEP_HI16S,
+ &result_type, &value);
+ if (**strp != ')')
+ return "missing `)'";
+ ++*strp;
+ if (errmsg == NULL
+ && (result_type != CGEN_PARSE_OPERAND_RESULT_NUMBER || value != 0))
+ return "not zero"; /* any string will do -- will never be seen. */
+ *valuep = value;
+ return errmsg;
+ }
+
+ if (strncasecmp (*strp, "%uhi(", 5) == 0)
+ {
+ *strp += 5;
+ errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_MEP_HI16U,
+ &result_type, &value);
+ if (**strp != ')')
+ return "missing `)'";
+ ++*strp;
+ if (errmsg == NULL
+ && (result_type != CGEN_PARSE_OPERAND_RESULT_NUMBER || value != 0))
+ return "not zero"; /* any string will do -- will never be seen. */
+ *valuep = value;
+ return errmsg;
+ }
+
+ if (strncasecmp (*strp, "%sdaoff(", 8) == 0)
+ {
+ *strp += 8;
+ errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_MEP_GPREL,
+ &result_type, &value);
+ if (**strp != ')')
+ return "missing `)'";
+ ++*strp;
+ if (errmsg == NULL
+ && (result_type != CGEN_PARSE_OPERAND_RESULT_NUMBER || value != 0))
+ return "not zero"; /* any string will do -- will never be seen. */
+ *valuep = value;
+ return errmsg;
+ }
+
+ if (strncasecmp (*strp, "%tpoff(", 7) == 0)
+ {
+ *strp += 7;
+ errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_MEP_TPREL,
+ &result_type, &value);
+ if (**strp != ')')
+ return "missing `)'";
+ ++*strp;
+ if (errmsg == NULL
+ && (result_type != CGEN_PARSE_OPERAND_RESULT_NUMBER || value != 0))
+ return "not zero"; /* any string will do -- will never be seen. */
+ *valuep = value;
+ return errmsg;
+ }
+
+ if (**strp == '%')
+ return "invalid %function() here";
+
+ errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_NONE,
+ &result_type, &value);
+ if (errmsg == NULL
+ && (result_type != CGEN_PARSE_OPERAND_RESULT_NUMBER || value != 0))
+ return "not zero"; /* any string will do -- will never be seen. */
+
+ return errmsg;
+}
+
+static const char *
+parse_unsigned7 (CGEN_CPU_DESC cd, const char **strp,
+ enum cgen_operand_type opindex, unsigned long *valuep)
+{
+ const char *errmsg;
+ bfd_vma value;
+
+ /* fprintf(stderr, "dj: unsigned7 parse `%s'\n", *strp); */
+
+ if (strncasecmp (*strp, "%tpoff(", 7) == 0)
+ {
+ int reloc;
+ *strp += 7;
+ switch (opindex)
+ {
+ case MEP_OPERAND_UDISP7:
+ reloc = BFD_RELOC_MEP_TPREL7;
+ break;
+ case MEP_OPERAND_UDISP7A2:
+ reloc = BFD_RELOC_MEP_TPREL7A2;
+ break;
+ case MEP_OPERAND_UDISP7A4:
+ reloc = BFD_RELOC_MEP_TPREL7A4;
+ break;
+ default:
+ /* Safe assumption? */
+ abort ();
+ }
+ errmsg = cgen_parse_address (cd, strp, opindex, reloc,
+ NULL, &value);
+ if (**strp != ')')
+ return "missing `)'";
+ ++*strp;
+ *valuep = value;
+ return errmsg;
+ }
+
+ if (**strp == '%')
+ return _("invalid %function() here");
+
+ return parse_mep_alignu (cd, strp, opindex, valuep);
+}
+
+/* BEGIN LIGHTWEIGHT MACRO PROCESSOR. */
+
+#define MAXARGS 9
+
+typedef struct
+{
+ char *name;
+ char *expansion;
+} macro;
+
+typedef struct
+{
+ const char *start;
+ int len;
+} arg;
+
+macro macros[] =
+{
+ { "sizeof", "(`1.end + (- `1))"},
+ { "startof", "(`1 | 0)" },
+ { "align4", "(`1&(~3))"},
+/*{ "hi", "(((`1+0x8000)>>16) & 0xffff)" }, */
+/*{ "lo", "(`1 & 0xffff)" }, */
+/*{ "sdaoff", "((`1-__sdabase) & 0x7f)"}, */
+/*{ "tpoff", "((`1-__tpbase) & 0x7f)"}, */
+ { 0,0 }
+};
+
+static char * expand_string (const char *, int);
+
+static const char *
+mep_cgen_expand_macros_and_parse_operand
+ (CGEN_CPU_DESC, int, const char **, CGEN_FIELDS *);
+
+static char *
+str_append (char *dest, const char *input, int len)
+{
+ char *new_dest;
+ int oldlen;
+
+ if (len == 0)
+ return dest;
+ /* printf("str_append: <<%s>>, <<%s>>, %d\n", dest, input, len); */
+ oldlen = (dest ? strlen(dest) : 0);
+ new_dest = realloc (dest, oldlen + len + 1);
+ memset (new_dest + oldlen, 0, len + 1);
+ return strncat (new_dest, input, len);
+}
+
+static macro *
+lookup_macro (const char *name)
+{
+ macro *m;
+
+ for (m = macros; m->name; ++m)
+ if (strncmp (m->name, name, strlen(m->name)) == 0)
+ return m;
+
+ return 0;
+}
+
+static char *
+expand_macro (arg *args, int narg, macro *mac)
+{
+ char *result = 0, *rescanned_result = 0;
+ char *e = mac->expansion;
+ char *mark = e;
+ int arg = 0;
+
+ /* printf("expanding macro %s with %d args\n", mac->name, narg + 1); */
+ while (*e)
+ {
+ if (*e == '`' &&
+ (*e+1) &&
+ ((*(e + 1) - '1') <= MAXARGS) &&
+ ((*(e + 1) - '1') <= narg))
+ {
+ result = str_append (result, mark, e - mark);
+ arg = (*(e + 1) - '1');
+ /* printf("replacing `%d with %s\n", arg+1, args[arg].start); */
+ result = str_append (result, args[arg].start, args[arg].len);
+ ++e;
+ mark = e+1;
+ }
+ ++e;
+ }
+
+ if (mark != e)
+ result = str_append (result, mark, e - mark);
+
+ if (result)
+ {
+ rescanned_result = expand_string (result, 0);
+ free (result);
+ return rescanned_result;
+ }
+ else
+ return result;
+}
+
+#define IN_TEXT 0
+#define IN_ARGS 1
+
+static char *
+expand_string (const char *in, int first_only)
+{
+ int num_expansions = 0;
+ int depth = 0;
+ int narg = -1;
+ arg args[MAXARGS];
+ int state = IN_TEXT;
+ const char *mark = in;
+ macro *macro = 0;
+
+ char *expansion = 0;
+ char *result = 0;
+
+ while (*in)
+ {
+ switch (state)
+ {
+ case IN_TEXT:
+ if (*in == '%' && *(in + 1) && (!first_only || num_expansions == 0))
+ {
+ macro = lookup_macro (in + 1);
+ if (macro)
+ {
+ /* printf("entering state %d at '%s'...\n", state, in); */
+ result = str_append (result, mark, in - mark);
+ mark = in;
+ in += 1 + strlen (macro->name);
+ while (*in == ' ') ++in;
+ if (*in != '(')
+ {
+ state = IN_TEXT;
+ macro = 0;
+ }
+ else
+ {
+ state = IN_ARGS;
+ narg = 0;
+ args[narg].start = in + 1;
+ args[narg].len = 0;
+ mark = in + 1;
+ }
+ }
+ }
+ break;
+ case IN_ARGS:
+ if (depth == 0)
+ {
+ switch (*in)
+ {
+ case ',':
+ narg++;
+ args[narg].start = (in + 1);
+ args[narg].len = 0;
+ break;
+ case ')':
+ state = IN_TEXT;
+ /* printf("entering state %d at '%s'...\n", state, in); */
+ if (macro)
+ {
+ expansion = 0;
+ expansion = expand_macro (args, narg, macro);
+ num_expansions++;
+ if (expansion)
+ {
+ result = str_append (result, expansion, strlen (expansion));
+ free (expansion);
+ }
+ }
+ else
+ {
+ result = str_append (result, mark, in - mark);
+ }
+ macro = 0;
+ mark = in + 1;
+ break;
+ case '(':
+ depth++;
+ default:
+ args[narg].len++;
+ break;
+ }
+ }
+ else
+ {
+ if (*in == ')')
+ depth--;
+ if (narg > -1)
+ args[narg].len++;
+ }
+
+ }
+ ++in;
+ }
+
+ if (mark != in)
+ result = str_append (result, mark, in - mark);
+
+ return result;
+}
+
+#undef IN_ARGS
+#undef IN_TEXT
+#undef MAXARGS
+
+
+/* END LIGHTWEIGHT MACRO PROCESSOR. */
+
+const char * mep_cgen_parse_operand
+ (CGEN_CPU_DESC, int, const char **, CGEN_FIELDS *);
+
+const char *
+mep_cgen_expand_macros_and_parse_operand (CGEN_CPU_DESC cd, int opindex,
+ const char ** strp_in, CGEN_FIELDS * fields)
+{
+ const char * errmsg = NULL;
+ char *str = 0, *hold = 0;
+ const char **strp = 0;
+
+ /* Set up a new pointer to macro-expanded string. */
+ str = expand_string (*strp_in, 1);
+ /* fprintf (stderr, " expanded <<%s>> to <<%s>>\n", *strp_in, str); */
+
+ hold = str;
+ strp = (const char **)(&str);
+
+ errmsg = mep_cgen_parse_operand (cd, opindex, strp, fields);
+
+ /* Now work out the advance. */
+ if (strlen (str) == 0)
+ *strp_in += strlen (*strp_in);
+
+ else
+ {
+ if (strstr (*strp_in, str))
+ /* A macro-expansion was pulled off the front. */
+ *strp_in = strstr (*strp_in, str);
+ else
+ /* A non-macro-expansion was pulled off the front. */
+ *strp_in += (str - hold);
+ }
+
+ if (hold)
+ free (hold);
+
+ return errmsg;
+}
+
+#define CGEN_ASM_INIT_HOOK (cd->parse_operand = mep_cgen_expand_macros_and_parse_operand);
+
+/* -- dis.c */
+
+const char * mep_cgen_parse_operand
+ (CGEN_CPU_DESC, int, const char **, CGEN_FIELDS *);
+
+/* Main entry point for operand parsing.
+
+ This function is basically just a big switch statement. Earlier versions
+ used tables to look up the function to use, but
+ - if the table contains both assembler and disassembler functions then
+ the disassembler contains much of the assembler and vice-versa,
+ - there's a lot of inlining possibilities as things grow,
+ - using a switch statement avoids the function call overhead.
+
+ This function could be moved into `parse_insn_normal', but keeping it
+ separate makes clear the interface between `parse_insn_normal' and each of
+ the handlers. */
+
+const char *
+mep_cgen_parse_operand (CGEN_CPU_DESC cd,
+ int opindex,
+ const char ** strp,
+ CGEN_FIELDS * fields)
+{
+ const char * errmsg = NULL;
+ /* Used by scalar operands that still need to be parsed. */
+ long junk ATTRIBUTE_UNUSED;
+
+ switch (opindex)
+ {
+ case MEP_OPERAND_ADDR24A4 :
+ errmsg = parse_mep_alignu (cd, strp, MEP_OPERAND_ADDR24A4, (unsigned long *) (& fields->f_24u8a4n));
+ break;
+ case MEP_OPERAND_CALLNUM :
+ errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_CALLNUM, (unsigned long *) (& fields->f_callnum));
+ break;
+ case MEP_OPERAND_CCCC :
+ errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_CCCC, (unsigned long *) (& fields->f_rm));
+ break;
+ case MEP_OPERAND_CCRN :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr, & fields->f_ccrn);
+ break;
+ case MEP_OPERAND_CDISP8 :
+ errmsg = cgen_parse_signed_integer (cd, strp, MEP_OPERAND_CDISP8, (long *) (& fields->f_8s24));
+ break;
+ case MEP_OPERAND_CDISP8A2 :
+ errmsg = parse_mep_align (cd, strp, MEP_OPERAND_CDISP8A2, (long *) (& fields->f_8s24a2));
+ break;
+ case MEP_OPERAND_CDISP8A4 :
+ errmsg = parse_mep_align (cd, strp, MEP_OPERAND_CDISP8A4, (long *) (& fields->f_8s24a4));
+ break;
+ case MEP_OPERAND_CDISP8A8 :
+ errmsg = parse_mep_align (cd, strp, MEP_OPERAND_CDISP8A8, (long *) (& fields->f_8s24a8));
+ break;
+ case MEP_OPERAND_CIMM4 :
+ errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_CIMM4, (unsigned long *) (& fields->f_rn));
+ break;
+ case MEP_OPERAND_CIMM5 :
+ errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_CIMM5, (unsigned long *) (& fields->f_5u24));
+ break;
+ case MEP_OPERAND_CODE16 :
+ errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_CODE16, (unsigned long *) (& fields->f_16u16));
+ break;
+ case MEP_OPERAND_CODE24 :
+ errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_CODE24, (unsigned long *) (& fields->f_24u4n));
+ break;
+ case MEP_OPERAND_CP_FLAG :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr, & junk);
+ break;
+ case MEP_OPERAND_CRN :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_cr, & fields->f_crn);
+ break;
+ case MEP_OPERAND_CRN64 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_cr64, & fields->f_crn);
+ break;
+ case MEP_OPERAND_CRNX :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_cr, & fields->f_crnx);
+ break;
+ case MEP_OPERAND_CRNX64 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_cr64, & fields->f_crnx);
+ break;
+ case MEP_OPERAND_CSRN :
+ errmsg = parse_csrn (cd, strp, & mep_cgen_opval_h_csr, & fields->f_csrn);
+ break;
+ case MEP_OPERAND_CSRN_IDX :
+ errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_CSRN_IDX, (unsigned long *) (& fields->f_csrn));
+ break;
+ case MEP_OPERAND_DBG :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_DEPC :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_EPC :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_EXC :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_FMAX_CCRN :
+ errmsg = parse_fmax_ccr (cd, strp, & mep_cgen_opval_h_ccr, & fields->f_fmax_4_4);
+ break;
+ case MEP_OPERAND_FMAX_FRD :
+ errmsg = parse_fmax_cr (cd, strp, & mep_cgen_opval_h_cr, & fields->f_fmax_frd);
+ break;
+ case MEP_OPERAND_FMAX_FRD_INT :
+ errmsg = parse_fmax_cr (cd, strp, & mep_cgen_opval_h_cr, & fields->f_fmax_frd);
+ break;
+ case MEP_OPERAND_FMAX_FRM :
+ errmsg = parse_fmax_cr (cd, strp, & mep_cgen_opval_h_cr, & fields->f_fmax_frm);
+ break;
+ case MEP_OPERAND_FMAX_FRN :
+ errmsg = parse_fmax_cr (cd, strp, & mep_cgen_opval_h_cr, & fields->f_fmax_frn);
+ break;
+ case MEP_OPERAND_FMAX_FRN_INT :
+ errmsg = parse_fmax_cr (cd, strp, & mep_cgen_opval_h_cr, & fields->f_fmax_frn);
+ break;
+ case MEP_OPERAND_FMAX_RM :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_fmax_rm);
+ break;
+ case MEP_OPERAND_HI :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_LO :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_LP :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_MB0 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_MB1 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_ME0 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_ME1 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_NPC :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_OPT :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_PCABS24A2 :
+ errmsg = parse_mep_alignu (cd, strp, MEP_OPERAND_PCABS24A2, (unsigned long *) (& fields->f_24u5a2n));
+ break;
+ case MEP_OPERAND_PCREL12A2 :
+ errmsg = parse_mep_align (cd, strp, MEP_OPERAND_PCREL12A2, (long *) (& fields->f_12s4a2));
+ break;
+ case MEP_OPERAND_PCREL17A2 :
+ errmsg = parse_mep_align (cd, strp, MEP_OPERAND_PCREL17A2, (long *) (& fields->f_17s16a2));
+ break;
+ case MEP_OPERAND_PCREL24A2 :
+ errmsg = parse_mep_align (cd, strp, MEP_OPERAND_PCREL24A2, (long *) (& fields->f_24s5a2n));
+ break;
+ case MEP_OPERAND_PCREL8A2 :
+ errmsg = parse_mep_align (cd, strp, MEP_OPERAND_PCREL8A2, (long *) (& fields->f_8s8a2));
+ break;
+ case MEP_OPERAND_PSW :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_R0 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & junk);
+ break;
+ case MEP_OPERAND_R1 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & junk);
+ break;
+ case MEP_OPERAND_RL :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rl);
+ break;
+ case MEP_OPERAND_RM :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rm);
+ break;
+ case MEP_OPERAND_RMA :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rm);
+ break;
+ case MEP_OPERAND_RN :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn);
+ break;
+ case MEP_OPERAND_RN3 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RN3C :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RN3L :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RN3S :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RN3UC :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RN3UL :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RN3US :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RNC :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn);
+ break;
+ case MEP_OPERAND_RNL :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn);
+ break;
+ case MEP_OPERAND_RNS :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn);
+ break;
+ case MEP_OPERAND_RNUC :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn);
+ break;
+ case MEP_OPERAND_RNUL :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn);
+ break;
+ case MEP_OPERAND_RNUS :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & fields->f_rn);
+ break;
+ case MEP_OPERAND_SAR :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
+ break;
+ case MEP_OPERAND_SDISP16 :
+ errmsg = parse_signed16 (cd, strp, MEP_OPERAND_SDISP16, (long *) (& fields->f_16s16));
+ break;
+ case MEP_OPERAND_SIMM16 :
+ errmsg = parse_signed16 (cd, strp, MEP_OPERAND_SIMM16, (long *) (& fields->f_16s16));
+ break;
+ case MEP_OPERAND_SIMM6 :
+ errmsg = cgen_parse_signed_integer (cd, strp, MEP_OPERAND_SIMM6, (long *) (& fields->f_6s8));
+ break;
+ case MEP_OPERAND_SIMM8 :
+ errmsg = cgen_parse_signed_integer (cd, strp, MEP_OPERAND_SIMM8, (long *) (& fields->f_8s8));
+ break;
+ case MEP_OPERAND_SP :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & junk);
+ break;
+ case MEP_OPERAND_SPR :
+ errmsg = parse_spreg (cd, strp, & mep_cgen_opval_h_gpr, & junk);
+ break;
+ case MEP_OPERAND_TP :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_gpr, & junk);
+ break;
+ case MEP_OPERAND_TPR :
+ errmsg = parse_tpreg (cd, strp, & mep_cgen_opval_h_gpr, & junk);
+ break;
+ case MEP_OPERAND_UDISP2 :
+ errmsg = cgen_parse_signed_integer (cd, strp, MEP_OPERAND_UDISP2, (long *) (& fields->f_2u6));
+ break;
+ case MEP_OPERAND_UDISP7 :
+ errmsg = parse_unsigned7 (cd, strp, MEP_OPERAND_UDISP7, (unsigned long *) (& fields->f_7u9));
+ break;
+ case MEP_OPERAND_UDISP7A2 :
+ errmsg = parse_unsigned7 (cd, strp, MEP_OPERAND_UDISP7A2, (unsigned long *) (& fields->f_7u9a2));
+ break;
+ case MEP_OPERAND_UDISP7A4 :
+ errmsg = parse_unsigned7 (cd, strp, MEP_OPERAND_UDISP7A4, (unsigned long *) (& fields->f_7u9a4));
+ break;
+ case MEP_OPERAND_UIMM16 :
+ errmsg = parse_unsigned16 (cd, strp, MEP_OPERAND_UIMM16, (unsigned long *) (& fields->f_16u16));
+ break;
+ case MEP_OPERAND_UIMM2 :
+ errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_UIMM2, (unsigned long *) (& fields->f_2u10));
+ break;
+ case MEP_OPERAND_UIMM24 :
+ errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_UIMM24, (unsigned long *) (& fields->f_24u8n));
+ break;
+ case MEP_OPERAND_UIMM3 :
+ errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_UIMM3, (unsigned long *) (& fields->f_3u5));
+ break;
+ case MEP_OPERAND_UIMM4 :
+ errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_UIMM4, (unsigned long *) (& fields->f_4u8));
+ break;
+ case MEP_OPERAND_UIMM5 :
+ errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_UIMM5, (unsigned long *) (& fields->f_5u8));
+ break;
+ case MEP_OPERAND_UIMM7A4 :
+ errmsg = parse_mep_alignu (cd, strp, MEP_OPERAND_UIMM7A4, (unsigned long *) (& fields->f_7u9a4));
+ break;
+ case MEP_OPERAND_ZERO :
+ errmsg = parse_zero (cd, strp, MEP_OPERAND_ZERO, (long *) (& junk));
+ break;
+
+ default :
+ /* xgettext:c-format */
+ fprintf (stderr, _("Unrecognized field %d while parsing.\n"), opindex);
+ abort ();
+ }
+
+ return errmsg;
+}
+
+cgen_parse_fn * const mep_cgen_parse_handlers[] =
+{
+ parse_insn_normal,
+};
+
+void
+mep_cgen_init_asm (CGEN_CPU_DESC cd)
+{
+ mep_cgen_init_opcode_table (cd);
+ mep_cgen_init_ibld_table (cd);
+ cd->parse_handlers = & mep_cgen_parse_handlers[0];
+ cd->parse_operand = mep_cgen_parse_operand;
+#ifdef CGEN_ASM_INIT_HOOK
+CGEN_ASM_INIT_HOOK
+#endif
+}
+
+
+
+/* Regex construction routine.
+
+ This translates an opcode syntax string into a regex string,
+ by replacing any non-character syntax element (such as an
+ opcode) with the pattern '.*'
+
+ It then compiles the regex and stores it in the opcode, for
+ later use by mep_cgen_assemble_insn
+
+ Returns NULL for success, an error message for failure. */
+
+char *
+mep_cgen_build_insn_regex (CGEN_INSN *insn)
+{
+ CGEN_OPCODE *opc = (CGEN_OPCODE *) CGEN_INSN_OPCODE (insn);
+ const char *mnem = CGEN_INSN_MNEMONIC (insn);
+ char rxbuf[CGEN_MAX_RX_ELEMENTS];
+ char *rx = rxbuf;
+ const CGEN_SYNTAX_CHAR_TYPE *syn;
+ int reg_err;
+
+ syn = CGEN_SYNTAX_STRING (CGEN_OPCODE_SYNTAX (opc));
+
+ /* Mnemonics come first in the syntax string. */
+ if (! CGEN_SYNTAX_MNEMONIC_P (* syn))
+ return _("missing mnemonic in syntax string");
+ ++syn;
+
+ /* Generate a case sensitive regular expression that emulates case
+ insensitive matching in the "C" locale. We cannot generate a case
+ insensitive regular expression because in Turkish locales, 'i' and 'I'
+ are not equal modulo case conversion. */
+
+ /* Copy the literal mnemonic out of the insn. */
+ for (; *mnem; mnem++)
+ {
+ char c = *mnem;
+
+ if (ISALPHA (c))
+ {
+ *rx++ = '[';
+ *rx++ = TOLOWER (c);
+ *rx++ = TOUPPER (c);
+ *rx++ = ']';
+ }
+ else
+ *rx++ = c;
+ }
+
+ /* Copy any remaining literals from the syntax string into the rx. */
+ for(; * syn != 0 && rx <= rxbuf + (CGEN_MAX_RX_ELEMENTS - 7 - 4); ++syn)
+ {
+ if (CGEN_SYNTAX_CHAR_P (* syn))
+ {
+ char c = CGEN_SYNTAX_CHAR (* syn);
+
+ switch (c)
+ {
+ /* Escape any regex metacharacters in the syntax. */
+ case '.': case '[': case '\\':
+ case '*': case '^': case '$':
+
+#ifdef CGEN_ESCAPE_EXTENDED_REGEX
+ case '?': case '{': case '}':
+ case '(': case ')': case '*':
+ case '|': case '+': case ']':
+#endif
+ *rx++ = '\\';
+ *rx++ = c;
+ break;
+
+ default:
+ if (ISALPHA (c))
+ {
+ *rx++ = '[';
+ *rx++ = TOLOWER (c);
+ *rx++ = TOUPPER (c);
+ *rx++ = ']';
+ }
+ else
+ *rx++ = c;
+ break;
+ }
+ }
+ else
+ {
+ /* Replace non-syntax fields with globs. */
+ *rx++ = '.';
+ *rx++ = '*';
+ }
+ }
+
+ /* Trailing whitespace ok. */
+ * rx++ = '[';
+ * rx++ = ' ';
+ * rx++ = '\t';
+ * rx++ = ']';
+ * rx++ = '*';
+
+ /* But anchor it after that. */
+ * rx++ = '$';
+ * rx = '\0';
+
+ CGEN_INSN_RX (insn) = xmalloc (sizeof (regex_t));
+ reg_err = regcomp ((regex_t *) CGEN_INSN_RX (insn), rxbuf, REG_NOSUB);
+
+ if (reg_err == 0)
+ return NULL;
+ else
+ {
+ static char msg[80];
+
+ regerror (reg_err, (regex_t *) CGEN_INSN_RX (insn), msg, 80);
+ regfree ((regex_t *) CGEN_INSN_RX (insn));
+ free (CGEN_INSN_RX (insn));
+ (CGEN_INSN_RX (insn)) = NULL;
+ return msg;
+ }
+}
+
+
+/* Default insn parser.
+
+ The syntax string is scanned and operands are parsed and stored in FIELDS.
+ Relocs are queued as we go via other callbacks.
+
+ ??? Note that this is currently an all-or-nothing parser. If we fail to
+ parse the instruction, we return 0 and the caller will start over from
+ the beginning. Backtracking will be necessary in parsing subexpressions,
+ but that can be handled there. Not handling backtracking here may get
+ expensive in the case of the m68k. Deal with later.
+
+ Returns NULL for success, an error message for failure. */
+
+static const char *
+parse_insn_normal (CGEN_CPU_DESC cd,
+ const CGEN_INSN *insn,
+ const char **strp,
+ CGEN_FIELDS *fields)
+{
+ /* ??? Runtime added insns not handled yet. */
+ const CGEN_SYNTAX *syntax = CGEN_INSN_SYNTAX (insn);
+ const char *str = *strp;
+ const char *errmsg;
+ const char *p;
+ const CGEN_SYNTAX_CHAR_TYPE * syn;
+#ifdef CGEN_MNEMONIC_OPERANDS
+ /* FIXME: wip */
+ int past_opcode_p;
+#endif
+
+ /* For now we assume the mnemonic is first (there are no leading operands).
+ We can parse it without needing to set up operand parsing.
+ GAS's input scrubber will ensure mnemonics are lowercase, but we may
+ not be called from GAS. */
+ p = CGEN_INSN_MNEMONIC (insn);
+ while (*p && TOLOWER (*p) == TOLOWER (*str))
+ ++p, ++str;
+
+ if (* p)
+ return _("unrecognized instruction");
+
+#ifndef CGEN_MNEMONIC_OPERANDS
+ if (* str && ! ISSPACE (* str))
+ return _("unrecognized instruction");
+#endif
+
+ CGEN_INIT_PARSE (cd);
+ cgen_init_parse_operand (cd);
+#ifdef CGEN_MNEMONIC_OPERANDS
+ past_opcode_p = 0;
+#endif
+
+ /* We don't check for (*str != '\0') here because we want to parse
+ any trailing fake arguments in the syntax string. */
+ syn = CGEN_SYNTAX_STRING (syntax);
+
+ /* Mnemonics come first for now, ensure valid string. */
+ if (! CGEN_SYNTAX_MNEMONIC_P (* syn))
+ abort ();
+
+ ++syn;
+
+ while (* syn != 0)
+ {
+ /* Non operand chars must match exactly. */
+ if (CGEN_SYNTAX_CHAR_P (* syn))
+ {
+ /* FIXME: While we allow for non-GAS callers above, we assume the
+ first char after the mnemonic part is a space. */
+ /* FIXME: We also take inappropriate advantage of the fact that
+ GAS's input scrubber will remove extraneous blanks. */
+ if (TOLOWER (*str) == TOLOWER (CGEN_SYNTAX_CHAR (* syn)))
+ {
+#ifdef CGEN_MNEMONIC_OPERANDS
+ if (CGEN_SYNTAX_CHAR(* syn) == ' ')
+ past_opcode_p = 1;
+#endif
+ ++ syn;
+ ++ str;
+ }
+ else if (*str)
+ {
+ /* Syntax char didn't match. Can't be this insn. */
+ static char msg [80];
+
+ /* xgettext:c-format */
+ sprintf (msg, _("syntax error (expected char `%c', found `%c')"),
+ CGEN_SYNTAX_CHAR(*syn), *str);
+ return msg;
+ }
+ else
+ {
+ /* Ran out of input. */
+ static char msg [80];
+
+ /* xgettext:c-format */
+ sprintf (msg, _("syntax error (expected char `%c', found end of instruction)"),
+ CGEN_SYNTAX_CHAR(*syn));
+ return msg;
+ }
+ continue;
+ }
+
+ /* We have an operand of some sort. */
+ errmsg = cd->parse_operand (cd, CGEN_SYNTAX_FIELD (*syn),
+ &str, fields);
+ if (errmsg)
+ return errmsg;
+
+ /* Done with this operand, continue with next one. */
+ ++ syn;
+ }
+
+ /* If we're at the end of the syntax string, we're done. */
+ if (* syn == 0)
+ {
+ /* FIXME: For the moment we assume a valid `str' can only contain
+ blanks now. IE: We needn't try again with a longer version of
+ the insn and it is assumed that longer versions of insns appear
+ before shorter ones (eg: lsr r2,r3,1 vs lsr r2,r3). */
+ while (ISSPACE (* str))
+ ++ str;
+
+ if (* str != '\0')
+ return _("junk at end of line"); /* FIXME: would like to include `str' */
+
+ return NULL;
+ }
+
+ /* We couldn't parse it. */
+ return _("unrecognized instruction");
+}
+
+/* Main entry point.
+ This routine is called for each instruction to be assembled.
+ STR points to the insn to be assembled.
+ We assume all necessary tables have been initialized.
+ The assembled instruction, less any fixups, is stored in BUF.
+ Remember that if CGEN_INT_INSN_P then BUF is an int and thus the value
+ still needs to be converted to target byte order, otherwise BUF is an array
+ of bytes in target byte order.
+ The result is a pointer to the insn's entry in the opcode table,
+ or NULL if an error occured (an error message will have already been
+ printed).
+
+ Note that when processing (non-alias) macro-insns,
+ this function recurses.
+
+ ??? It's possible to make this cpu-independent.
+ One would have to deal with a few minor things.
+ At this point in time doing so would be more of a curiosity than useful
+ [for example this file isn't _that_ big], but keeping the possibility in
+ mind helps keep the design clean. */
+
+const CGEN_INSN *
+mep_cgen_assemble_insn (CGEN_CPU_DESC cd,
+ const char *str,
+ CGEN_FIELDS *fields,
+ CGEN_INSN_BYTES_PTR buf,
+ char **errmsg)
+{
+ const char *start;
+ CGEN_INSN_LIST *ilist;
+ const char *parse_errmsg = NULL;
+ const char *insert_errmsg = NULL;
+ int recognized_mnemonic = 0;
+
+ /* Skip leading white space. */
+ while (ISSPACE (* str))
+ ++ str;
+
+ /* The instructions are stored in hashed lists.
+ Get the first in the list. */
+ ilist = CGEN_ASM_LOOKUP_INSN (cd, str);
+
+ /* Keep looking until we find a match. */
+ start = str;
+ for ( ; ilist != NULL ; ilist = CGEN_ASM_NEXT_INSN (ilist))
+ {
+ const CGEN_INSN *insn = ilist->insn;
+ recognized_mnemonic = 1;
+
+#ifdef CGEN_VALIDATE_INSN_SUPPORTED
+ /* Not usually needed as unsupported opcodes
+ shouldn't be in the hash lists. */
+ /* Is this insn supported by the selected cpu? */
+ if (! mep_cgen_insn_supported (cd, insn))
+ continue;
+#endif
+ /* If the RELAXED attribute is set, this is an insn that shouldn't be
+ chosen immediately. Instead, it is used during assembler/linker
+ relaxation if possible. */
+ if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_RELAXED) != 0)
+ continue;
+
+ str = start;
+
+ /* Skip this insn if str doesn't look right lexically. */
+ if (CGEN_INSN_RX (insn) != NULL &&
+ regexec ((regex_t *) CGEN_INSN_RX (insn), str, 0, NULL, 0) == REG_NOMATCH)
+ continue;
+
+ /* Allow parse/insert handlers to obtain length of insn. */
+ CGEN_FIELDS_BITSIZE (fields) = CGEN_INSN_BITSIZE (insn);
+
+ parse_errmsg = CGEN_PARSE_FN (cd, insn) (cd, insn, & str, fields);
+ if (parse_errmsg != NULL)
+ continue;
+
+ /* ??? 0 is passed for `pc'. */
+ insert_errmsg = CGEN_INSERT_FN (cd, insn) (cd, insn, fields, buf,
+ (bfd_vma) 0);
+ if (insert_errmsg != NULL)
+ continue;
+
+ /* It is up to the caller to actually output the insn and any
+ queued relocs. */
+ return insn;
+ }
+
+ {
+ static char errbuf[150];
+#ifdef CGEN_VERBOSE_ASSEMBLER_ERRORS
+ const char *tmp_errmsg;
+
+ /* If requesting verbose error messages, use insert_errmsg.
+ Failing that, use parse_errmsg. */
+ tmp_errmsg = (insert_errmsg ? insert_errmsg :
+ parse_errmsg ? parse_errmsg :
+ recognized_mnemonic ?
+ _("unrecognized form of instruction") :
+ _("unrecognized instruction"));
+
+ if (strlen (start) > 50)
+ /* xgettext:c-format */
+ sprintf (errbuf, "%s `%.50s...'", tmp_errmsg, start);
+ else
+ /* xgettext:c-format */
+ sprintf (errbuf, "%s `%.50s'", tmp_errmsg, start);
+#else
+ if (strlen (start) > 50)
+ /* xgettext:c-format */
+ sprintf (errbuf, _("bad instruction `%.50s...'"), start);
+ else
+ /* xgettext:c-format */
+ sprintf (errbuf, _("bad instruction `%.50s'"), start);
+#endif
+
+ *errmsg = errbuf;
+ return NULL;
+ }
+}
diff --git a/opcodes/mep-desc.c b/opcodes/mep-desc.c
new file mode 100644
index 000000000000..ab0f9bd51850
--- /dev/null
+++ b/opcodes/mep-desc.c
@@ -0,0 +1,2729 @@
+/* CPU data for mep.
+
+THIS FILE IS MACHINE GENERATED WITH CGEN.
+
+Copyright 1996-2005 Free Software Foundation, Inc.
+
+This file is part of the GNU Binutils and/or GDB, the GNU debugger.
+
+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.
+
+*/
+
+#include "sysdep.h"
+#include <stdio.h>
+#include <stdarg.h>
+#include "ansidecl.h"
+#include "bfd.h"
+#include "symcat.h"
+#include "mep-desc.h"
+#include "mep-opc.h"
+#include "opintl.h"
+#include "libiberty.h"
+#include "xregex.h"
+
+/* Attributes. */
+
+static const CGEN_ATTR_ENTRY bool_attr[] =
+{
+ { "#f", 0 },
+ { "#t", 1 },
+ { 0, 0 }
+};
+
+static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED =
+{
+ { "base", MACH_BASE },
+ { "mep", MACH_MEP },
+ { "h1", MACH_H1 },
+ { "max", MACH_MAX },
+ { 0, 0 }
+};
+
+static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED =
+{
+ { "mep", ISA_MEP },
+ { "ext_core1", ISA_EXT_CORE1 },
+ { "ext_core2", ISA_EXT_CORE2 },
+ { "ext_cop2_16", ISA_EXT_COP2_16 },
+ { "ext_cop2_32", ISA_EXT_COP2_32 },
+ { "ext_cop2_48", ISA_EXT_COP2_48 },
+ { "ext_cop2_64", ISA_EXT_COP2_64 },
+ { "max", ISA_MAX },
+ { 0, 0 }
+};
+
+static const CGEN_ATTR_ENTRY CDATA_attr[] ATTRIBUTE_UNUSED =
+{
+ { "LABEL", CDATA_LABEL },
+ { "REGNUM", CDATA_REGNUM },
+ { "FMAX_FLOAT", CDATA_FMAX_FLOAT },
+ { "FMAX_INT", CDATA_FMAX_INT },
+ { "POINTER", CDATA_POINTER },
+ { "LONG", CDATA_LONG },
+ { "ULONG", CDATA_ULONG },
+ { "SHORT", CDATA_SHORT },
+ { "USHORT", CDATA_USHORT },
+ { "CHAR", CDATA_CHAR },
+ { "UCHAR", CDATA_UCHAR },
+ { "CP_DATA_BUS_INT", CDATA_CP_DATA_BUS_INT },
+ { 0, 0 }
+};
+
+static const CGEN_ATTR_ENTRY ALIGN_attr [] ATTRIBUTE_UNUSED =
+{
+ {"integer", 1},
+ { 0, 0 }
+};
+
+static const CGEN_ATTR_ENTRY LATENCY_attr [] ATTRIBUTE_UNUSED =
+{
+ {"integer", 0},
+ { 0, 0 }
+};
+
+static const CGEN_ATTR_ENTRY CONFIG_attr[] ATTRIBUTE_UNUSED =
+{
+ { "NONE", CONFIG_NONE },
+ { "simple", CONFIG_SIMPLE },
+ { "fmax", CONFIG_FMAX },
+ { 0, 0 }
+};
+
+const CGEN_ATTR_TABLE mep_cgen_ifield_attr_table[] =
+{
+ { "MACH", & MACH_attr[0], & MACH_attr[0] },
+ { "ISA", & ISA_attr[0], & ISA_attr[0] },
+ { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
+ { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
+ { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
+ { "RESERVED", &bool_attr[0], &bool_attr[0] },
+ { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
+ { "SIGNED", &bool_attr[0], &bool_attr[0] },
+ { 0, 0, 0 }
+};
+
+const CGEN_ATTR_TABLE mep_cgen_hardware_attr_table[] =
+{
+ { "MACH", & MACH_attr[0], & MACH_attr[0] },
+ { "ISA", & ISA_attr[0], & ISA_attr[0] },
+ { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
+ { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
+ { "PC", &bool_attr[0], &bool_attr[0] },
+ { "PROFILE", &bool_attr[0], &bool_attr[0] },
+ { "IS_FLOAT", &bool_attr[0], &bool_attr[0] },
+ { 0, 0, 0 }
+};
+
+const CGEN_ATTR_TABLE mep_cgen_operand_attr_table[] =
+{
+ { "MACH", & MACH_attr[0], & MACH_attr[0] },
+ { "ISA", & ISA_attr[0], & ISA_attr[0] },
+ { "CDATA", & CDATA_attr[0], & CDATA_attr[0] },
+ { "ALIGN", & ALIGN_attr[0], & ALIGN_attr[0] },
+ { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
+ { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
+ { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
+ { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
+ { "SIGNED", &bool_attr[0], &bool_attr[0] },
+ { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
+ { "RELAX", &bool_attr[0], &bool_attr[0] },
+ { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
+ { "RELOC_IMPLIES_OVERFLOW", &bool_attr[0], &bool_attr[0] },
+ { 0, 0, 0 }
+};
+
+const CGEN_ATTR_TABLE mep_cgen_insn_attr_table[] =
+{
+ { "MACH", & MACH_attr[0], & MACH_attr[0] },
+ { "ISA", & ISA_attr[0], & ISA_attr[0] },
+ { "LATENCY", & LATENCY_attr[0], & LATENCY_attr[0] },
+ { "CONFIG", & CONFIG_attr[0], & CONFIG_attr[0] },
+ { "ALIAS", &bool_attr[0], &bool_attr[0] },
+ { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
+ { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
+ { "COND-CTI", &bool_attr[0], &bool_attr[0] },
+ { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
+ { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
+ { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
+ { "RELAXED", &bool_attr[0], &bool_attr[0] },
+ { "NO-DIS", &bool_attr[0], &bool_attr[0] },
+ { "PBB", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_BIT_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_MUL_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_DIV_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_DEBUG_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_LDZ_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_ABS_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_AVE_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_MINMAX_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_CLIP_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_SAT_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_UCI_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_DSP_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_CP_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_CP64_INSN", &bool_attr[0], &bool_attr[0] },
+ { "OPTIONAL_VLIW64", &bool_attr[0], &bool_attr[0] },
+ { "MAY_TRAP", &bool_attr[0], &bool_attr[0] },
+ { "VLIW_ALONE", &bool_attr[0], &bool_attr[0] },
+ { "VLIW_NO_CORE_NOP", &bool_attr[0], &bool_attr[0] },
+ { "VLIW_NO_COP_NOP", &bool_attr[0], &bool_attr[0] },
+ { "VLIW64_NO_MATCHING_NOP", &bool_attr[0], &bool_attr[0] },
+ { "VLIW32_NO_MATCHING_NOP", &bool_attr[0], &bool_attr[0] },
+ { "VOLATILE", &bool_attr[0], &bool_attr[0] },
+ { 0, 0, 0 }
+};
+
+/* Instruction set variants. */
+
+static const CGEN_ISA mep_cgen_isa_table[] = {
+ { "mep", 32, 32, 16, 32 },
+ { "ext_core1", 32, 32, 16, 32 },
+ { "ext_core2", 32, 32, 16, 32 },
+ { "ext_cop2_16", 32, 32, 65535, 0 },
+ { "ext_cop2_32", 32, 32, 65535, 0 },
+ { "ext_cop2_48", 32, 32, 65535, 0 },
+ { "ext_cop2_64", 32, 32, 65535, 0 },
+ { 0, 0, 0, 0, 0 }
+};
+
+/* Machine variants. */
+
+static const CGEN_MACH mep_cgen_mach_table[] = {
+ { "mep", "mep", MACH_MEP, 16 },
+ { "h1", "h1", MACH_H1, 16 },
+ { 0, 0, 0, 0 }
+};
+
+static CGEN_KEYWORD_ENTRY mep_cgen_opval_h_gpr_entries[] =
+{
+ { "$0", 0, {0, {{{0, 0}}}}, 0, 0 },
+ { "$1", 1, {0, {{{0, 0}}}}, 0, 0 },
+ { "$2", 2, {0, {{{0, 0}}}}, 0, 0 },
+ { "$3", 3, {0, {{{0, 0}}}}, 0, 0 },
+ { "$4", 4, {0, {{{0, 0}}}}, 0, 0 },
+ { "$5", 5, {0, {{{0, 0}}}}, 0, 0 },
+ { "$6", 6, {0, {{{0, 0}}}}, 0, 0 },
+ { "$7", 7, {0, {{{0, 0}}}}, 0, 0 },
+ { "$8", 8, {0, {{{0, 0}}}}, 0, 0 },
+ { "$9", 9, {0, {{{0, 0}}}}, 0, 0 },
+ { "$10", 10, {0, {{{0, 0}}}}, 0, 0 },
+ { "$11", 11, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fp", 8, {0, {{{0, 0}}}}, 0, 0 },
+ { "$tp", 13, {0, {{{0, 0}}}}, 0, 0 },
+ { "$gp", 14, {0, {{{0, 0}}}}, 0, 0 },
+ { "$sp", 15, {0, {{{0, 0}}}}, 0, 0 },
+ { "$12", 12, {0, {{{0, 0}}}}, 0, 0 },
+ { "$13", 13, {0, {{{0, 0}}}}, 0, 0 },
+ { "$14", 14, {0, {{{0, 0}}}}, 0, 0 },
+ { "$15", 15, {0, {{{0, 0}}}}, 0, 0 }
+};
+
+CGEN_KEYWORD mep_cgen_opval_h_gpr =
+{
+ & mep_cgen_opval_h_gpr_entries[0],
+ 20,
+ 0, 0, 0, 0, ""
+};
+
+static CGEN_KEYWORD_ENTRY mep_cgen_opval_h_csr_entries[] =
+{
+ { "$pc", 0, {0, {{{0, 0}}}}, 0, 0 },
+ { "$lp", 1, {0, {{{0, 0}}}}, 0, 0 },
+ { "$sar", 2, {0, {{{0, 0}}}}, 0, 0 },
+ { "$rpb", 4, {0, {{{0, 0}}}}, 0, 0 },
+ { "$rpe", 5, {0, {{{0, 0}}}}, 0, 0 },
+ { "$rpc", 6, {0, {{{0, 0}}}}, 0, 0 },
+ { "$hi", 7, {0, {{{0, 0}}}}, 0, 0 },
+ { "$lo", 8, {0, {{{0, 0}}}}, 0, 0 },
+ { "$mb0", 12, {0, {{{0, 0}}}}, 0, 0 },
+ { "$me0", 13, {0, {{{0, 0}}}}, 0, 0 },
+ { "$mb1", 14, {0, {{{0, 0}}}}, 0, 0 },
+ { "$me1", 15, {0, {{{0, 0}}}}, 0, 0 },
+ { "$psw", 16, {0, {{{0, 0}}}}, 0, 0 },
+ { "$id", 17, {0, {{{0, 0}}}}, 0, 0 },
+ { "$tmp", 18, {0, {{{0, 0}}}}, 0, 0 },
+ { "$epc", 19, {0, {{{0, 0}}}}, 0, 0 },
+ { "$exc", 20, {0, {{{0, 0}}}}, 0, 0 },
+ { "$cfg", 21, {0, {{{0, 0}}}}, 0, 0 },
+ { "$npc", 23, {0, {{{0, 0}}}}, 0, 0 },
+ { "$dbg", 24, {0, {{{0, 0}}}}, 0, 0 },
+ { "$depc", 25, {0, {{{0, 0}}}}, 0, 0 },
+ { "$opt", 26, {0, {{{0, 0}}}}, 0, 0 },
+ { "$rcfg", 27, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccfg", 28, {0, {{{0, 0}}}}, 0, 0 }
+};
+
+CGEN_KEYWORD mep_cgen_opval_h_csr =
+{
+ & mep_cgen_opval_h_csr_entries[0],
+ 24,
+ 0, 0, 0, 0, ""
+};
+
+static CGEN_KEYWORD_ENTRY mep_cgen_opval_h_cr64_entries[] =
+{
+ { "$c0", 0, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c1", 1, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c2", 2, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c3", 3, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c4", 4, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c5", 5, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c6", 6, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c7", 7, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c8", 8, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c9", 9, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c10", 10, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c11", 11, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c12", 12, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c13", 13, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c14", 14, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c15", 15, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c16", 16, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c17", 17, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c18", 18, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c19", 19, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c20", 20, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c21", 21, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c22", 22, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c23", 23, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c24", 24, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c25", 25, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c26", 26, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c27", 27, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c28", 28, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c29", 29, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c30", 30, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c31", 31, {0, {{{0, 0}}}}, 0, 0 }
+};
+
+CGEN_KEYWORD mep_cgen_opval_h_cr64 =
+{
+ & mep_cgen_opval_h_cr64_entries[0],
+ 32,
+ 0, 0, 0, 0, ""
+};
+
+static CGEN_KEYWORD_ENTRY mep_cgen_opval_h_cr_entries[] =
+{
+ { "$c0", 0, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c1", 1, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c2", 2, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c3", 3, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c4", 4, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c5", 5, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c6", 6, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c7", 7, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c8", 8, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c9", 9, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c10", 10, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c11", 11, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c12", 12, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c13", 13, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c14", 14, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c15", 15, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c16", 16, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c17", 17, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c18", 18, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c19", 19, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c20", 20, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c21", 21, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c22", 22, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c23", 23, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c24", 24, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c25", 25, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c26", 26, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c27", 27, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c28", 28, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c29", 29, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c30", 30, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c31", 31, {0, {{{0, 0}}}}, 0, 0 }
+};
+
+CGEN_KEYWORD mep_cgen_opval_h_cr =
+{
+ & mep_cgen_opval_h_cr_entries[0],
+ 32,
+ 0, 0, 0, 0, ""
+};
+
+static CGEN_KEYWORD_ENTRY mep_cgen_opval_h_ccr_entries[] =
+{
+ { "$ccr0", 0, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr1", 1, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr2", 2, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr3", 3, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr4", 4, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr5", 5, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr6", 6, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr7", 7, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr8", 8, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr9", 9, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr10", 10, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr11", 11, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr12", 12, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr13", 13, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr14", 14, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr15", 15, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr16", 16, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr17", 17, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr18", 18, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr19", 19, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr20", 20, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr21", 21, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr22", 22, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr23", 23, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr24", 24, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr25", 25, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr26", 26, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr27", 27, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr28", 28, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr29", 29, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr30", 30, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr31", 31, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr32", 32, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr33", 33, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr34", 34, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr35", 35, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr36", 36, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr37", 37, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr38", 38, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr39", 39, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr40", 40, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr41", 41, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr42", 42, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr43", 43, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr44", 44, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr45", 45, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr46", 46, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr47", 47, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr48", 48, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr49", 49, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr50", 50, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr51", 51, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr52", 52, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr53", 53, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr54", 54, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr55", 55, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr56", 56, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr57", 57, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr58", 58, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr59", 59, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr60", 60, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr61", 61, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr62", 62, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr63", 63, {0, {{{0, 0}}}}, 0, 0 }
+};
+
+CGEN_KEYWORD mep_cgen_opval_h_ccr =
+{
+ & mep_cgen_opval_h_ccr_entries[0],
+ 64,
+ 0, 0, 0, 0, ""
+};
+
+static CGEN_KEYWORD_ENTRY mep_cgen_opval_h_cr_fmax_entries[] =
+{
+ { "$fr0", 0, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr1", 1, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr2", 2, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr3", 3, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr4", 4, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr5", 5, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr6", 6, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr7", 7, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr8", 8, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr9", 9, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr10", 10, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr11", 11, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr12", 12, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr13", 13, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr14", 14, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr15", 15, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr16", 16, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr17", 17, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr18", 18, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr19", 19, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr20", 20, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr21", 21, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr22", 22, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr23", 23, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr24", 24, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr25", 25, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr26", 26, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr27", 27, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr28", 28, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr29", 29, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr30", 30, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fr31", 31, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c0", 0, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c1", 1, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c2", 2, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c3", 3, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c4", 4, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c5", 5, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c6", 6, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c7", 7, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c8", 8, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c9", 9, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c10", 10, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c11", 11, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c12", 12, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c13", 13, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c14", 14, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c15", 15, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c16", 16, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c17", 17, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c18", 18, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c19", 19, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c20", 20, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c21", 21, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c22", 22, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c23", 23, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c24", 24, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c25", 25, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c26", 26, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c27", 27, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c28", 28, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c29", 29, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c30", 30, {0, {{{0, 0}}}}, 0, 0 },
+ { "$c31", 31, {0, {{{0, 0}}}}, 0, 0 }
+};
+
+CGEN_KEYWORD mep_cgen_opval_h_cr_fmax =
+{
+ & mep_cgen_opval_h_cr_fmax_entries[0],
+ 64,
+ 0, 0, 0, 0, ""
+};
+
+static CGEN_KEYWORD_ENTRY mep_cgen_opval_h_ccr_fmax_entries[] =
+{
+ { "$cirr", 0, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fcr0", 0, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr0", 0, {0, {{{0, 0}}}}, 0, 0 },
+ { "$cbcr", 1, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fcr1", 1, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr1", 1, {0, {{{0, 0}}}}, 0, 0 },
+ { "$cerr", 15, {0, {{{0, 0}}}}, 0, 0 },
+ { "$fcr15", 15, {0, {{{0, 0}}}}, 0, 0 },
+ { "$ccr15", 15, {0, {{{0, 0}}}}, 0, 0 }
+};
+
+CGEN_KEYWORD mep_cgen_opval_h_ccr_fmax =
+{
+ & mep_cgen_opval_h_ccr_fmax_entries[0],
+ 9,
+ 0, 0, 0, 0, ""
+};
+
+
+/* The hardware table. */
+
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define A(a) (1 << CGEN_HW_##a)
+#else
+#define A(a) (1 << CGEN_HW_/**/a)
+#endif
+
+const CGEN_HW_ENTRY mep_cgen_hw_table[] =
+{
+ { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { "h-gpr", HW_H_GPR, CGEN_ASM_KEYWORD, (PTR) & mep_cgen_opval_h_gpr, { 0|A(PROFILE)|A(CACHE_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { "h-csr", HW_H_CSR, CGEN_ASM_KEYWORD, (PTR) & mep_cgen_opval_h_csr, { 0|A(PROFILE), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { "h-cr64", HW_H_CR64, CGEN_ASM_KEYWORD, (PTR) & mep_cgen_opval_h_cr64, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { "h-cr", HW_H_CR, CGEN_ASM_KEYWORD, (PTR) & mep_cgen_opval_h_cr, { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { "h-ccr", HW_H_CCR, CGEN_ASM_KEYWORD, (PTR) & mep_cgen_opval_h_ccr, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { "h-cr-fmax", HW_H_CR_FMAX, CGEN_ASM_KEYWORD, (PTR) & mep_cgen_opval_h_cr_fmax, { 0|A(IS_FLOAT)|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { "h-ccr-fmax", HW_H_CCR_FMAX, CGEN_ASM_KEYWORD, (PTR) & mep_cgen_opval_h_ccr_fmax, { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { "h-fmax-compare-i-p", HW_H_FMAX_COMPARE_I_P, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }
+};
+
+#undef A
+
+
+/* The instruction field table. */
+
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define A(a) (1 << CGEN_IFLD_##a)
+#else
+#define A(a) (1 << CGEN_IFLD_/**/a)
+#endif
+
+const CGEN_IFLD mep_cgen_ifld_table[] =
+{
+ { MEP_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } },
+ { MEP_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } },
+ { MEP_F_MAJOR, "f-major", 0, 32, 0, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_RN, "f-rn", 0, 32, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_RN3, "f-rn3", 0, 32, 5, 3, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_RM, "f-rm", 0, 32, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_RL, "f-rl", 0, 32, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_SUB2, "f-sub2", 0, 32, 14, 2, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_SUB3, "f-sub3", 0, 32, 13, 3, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_SUB4, "f-sub4", 0, 32, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_EXT, "f-ext", 0, 32, 16, 8, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_CRN, "f-crn", 0, 32, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_CSRN_HI, "f-csrn-hi", 0, 32, 15, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_CSRN_LO, "f-csrn-lo", 0, 32, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_CSRN, "f-csrn", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_CRNX_HI, "f-crnx-hi", 0, 32, 28, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_CRNX_LO, "f-crnx-lo", 0, 32, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_CRNX, "f-crnx", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_0, "f-0", 0, 32, 0, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_1, "f-1", 0, 32, 1, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_2, "f-2", 0, 32, 2, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_3, "f-3", 0, 32, 3, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_4, "f-4", 0, 32, 4, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_5, "f-5", 0, 32, 5, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_6, "f-6", 0, 32, 6, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_7, "f-7", 0, 32, 7, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_8, "f-8", 0, 32, 8, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_9, "f-9", 0, 32, 9, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_10, "f-10", 0, 32, 10, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_11, "f-11", 0, 32, 11, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_12, "f-12", 0, 32, 12, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_13, "f-13", 0, 32, 13, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_14, "f-14", 0, 32, 14, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_15, "f-15", 0, 32, 15, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_16, "f-16", 0, 32, 16, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_17, "f-17", 0, 32, 17, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_18, "f-18", 0, 32, 18, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_19, "f-19", 0, 32, 19, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_20, "f-20", 0, 32, 20, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_21, "f-21", 0, 32, 21, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_22, "f-22", 0, 32, 22, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_23, "f-23", 0, 32, 23, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_24, "f-24", 0, 32, 24, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_25, "f-25", 0, 32, 25, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_26, "f-26", 0, 32, 26, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_27, "f-27", 0, 32, 27, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_28, "f-28", 0, 32, 28, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_29, "f-29", 0, 32, 29, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_30, "f-30", 0, 32, 30, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_31, "f-31", 0, 32, 31, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } } } } },
+ { MEP_F_8S8A2, "f-8s8a2", 0, 32, 8, 7, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_12S4A2, "f-12s4a2", 0, 32, 4, 11, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_17S16A2, "f-17s16a2", 0, 32, 16, 16, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24S5A2N_HI, "f-24s5a2n-hi", 0, 32, 16, 16, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24S5A2N_LO, "f-24s5a2n-lo", 0, 32, 5, 7, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24S5A2N, "f-24s5a2n", 0, 0, 0, 0,{ 0|A(PCREL_ADDR)|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24U5A2N_HI, "f-24u5a2n-hi", 0, 32, 16, 16, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24U5A2N_LO, "f-24u5a2n-lo", 0, 32, 5, 7, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24U5A2N, "f-24u5a2n", 0, 0, 0, 0,{ 0|A(ABS_ADDR)|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_2U6, "f-2u6", 0, 32, 6, 2, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_7U9, "f-7u9", 0, 32, 9, 7, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_7U9A2, "f-7u9a2", 0, 32, 9, 6, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_7U9A4, "f-7u9a4", 0, 32, 9, 5, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_16S16, "f-16s16", 0, 32, 16, 16, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_2U10, "f-2u10", 0, 32, 10, 2, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_3U5, "f-3u5", 0, 32, 5, 3, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_4U8, "f-4u8", 0, 32, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_5U8, "f-5u8", 0, 32, 8, 5, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_5U24, "f-5u24", 0, 32, 24, 5, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_6S8, "f-6s8", 0, 32, 8, 6, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_8S8, "f-8s8", 0, 32, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_16U16, "f-16u16", 0, 32, 16, 16, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_12U16, "f-12u16", 0, 32, 16, 12, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_3U29, "f-3u29", 0, 32, 29, 3, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_8S24, "f-8s24", 0, 32, 24, 8, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_8S24A2, "f-8s24a2", 0, 32, 24, 7, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_8S24A4, "f-8s24a4", 0, 32, 24, 6, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_8S24A8, "f-8s24a8", 0, 32, 24, 5, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24U8A4N_HI, "f-24u8a4n-hi", 0, 32, 16, 16, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24U8A4N_LO, "f-24u8a4n-lo", 0, 32, 8, 6, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24U8A4N, "f-24u8a4n", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24U8N_HI, "f-24u8n-hi", 0, 32, 16, 16, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24U8N_LO, "f-24u8n-lo", 0, 32, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24U8N, "f-24u8n", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24U4N_HI, "f-24u4n-hi", 0, 32, 4, 8, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24U4N_LO, "f-24u4n-lo", 0, 32, 16, 16, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_24U4N, "f-24u4n", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_CALLNUM, "f-callnum", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_CCRN_HI, "f-ccrn-hi", 0, 32, 28, 2, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_CCRN_LO, "f-ccrn-lo", 0, 32, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_CCRN, "f-ccrn", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } } } } },
+ { MEP_F_FMAX_0_4, "f-fmax-0-4", 0, 32, 0, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_4_4, "f-fmax-4-4", 0, 32, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_8_4, "f-fmax-8-4", 0, 32, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_12_4, "f-fmax-12-4", 0, 32, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_16_4, "f-fmax-16-4", 0, 32, 16, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_20_4, "f-fmax-20-4", 0, 32, 20, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_24_4, "f-fmax-24-4", 0, 32, 24, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_28_1, "f-fmax-28-1", 0, 32, 28, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_29_1, "f-fmax-29-1", 0, 32, 29, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_30_1, "f-fmax-30-1", 0, 32, 30, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_31_1, "f-fmax-31-1", 0, 32, 31, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_FRD, "f-fmax-frd", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_FRN, "f-fmax-frn", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_FRM, "f-fmax-frm", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { MEP_F_FMAX_RM, "f-fmax-rm", 0, 32, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } },
+ { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }
+};
+
+#undef A
+
+
+
+/* multi ifield declarations */
+
+const CGEN_MAYBE_MULTI_IFLD MEP_F_CSRN_MULTI_IFIELD [];
+const CGEN_MAYBE_MULTI_IFLD MEP_F_CRNX_MULTI_IFIELD [];
+const CGEN_MAYBE_MULTI_IFLD MEP_F_24S5A2N_MULTI_IFIELD [];
+const CGEN_MAYBE_MULTI_IFLD MEP_F_24U5A2N_MULTI_IFIELD [];
+const CGEN_MAYBE_MULTI_IFLD MEP_F_24U8A4N_MULTI_IFIELD [];
+const CGEN_MAYBE_MULTI_IFLD MEP_F_24U8N_MULTI_IFIELD [];
+const CGEN_MAYBE_MULTI_IFLD MEP_F_24U4N_MULTI_IFIELD [];
+const CGEN_MAYBE_MULTI_IFLD MEP_F_CALLNUM_MULTI_IFIELD [];
+const CGEN_MAYBE_MULTI_IFLD MEP_F_CCRN_MULTI_IFIELD [];
+const CGEN_MAYBE_MULTI_IFLD MEP_F_FMAX_FRD_MULTI_IFIELD [];
+const CGEN_MAYBE_MULTI_IFLD MEP_F_FMAX_FRN_MULTI_IFIELD [];
+const CGEN_MAYBE_MULTI_IFLD MEP_F_FMAX_FRM_MULTI_IFIELD [];
+
+
+/* multi ifield definitions */
+
+const CGEN_MAYBE_MULTI_IFLD MEP_F_CSRN_MULTI_IFIELD [] =
+{
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_CSRN_HI] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_CSRN_LO] } },
+ { 0, { (const PTR) 0 } }
+};
+const CGEN_MAYBE_MULTI_IFLD MEP_F_CRNX_MULTI_IFIELD [] =
+{
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_CRNX_HI] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_CRNX_LO] } },
+ { 0, { (const PTR) 0 } }
+};
+const CGEN_MAYBE_MULTI_IFLD MEP_F_24S5A2N_MULTI_IFIELD [] =
+{
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_24S5A2N_HI] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_24S5A2N_LO] } },
+ { 0, { (const PTR) 0 } }
+};
+const CGEN_MAYBE_MULTI_IFLD MEP_F_24U5A2N_MULTI_IFIELD [] =
+{
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_24U5A2N_HI] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_24U5A2N_LO] } },
+ { 0, { (const PTR) 0 } }
+};
+const CGEN_MAYBE_MULTI_IFLD MEP_F_24U8A4N_MULTI_IFIELD [] =
+{
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_24U8A4N_HI] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_24U8A4N_LO] } },
+ { 0, { (const PTR) 0 } }
+};
+const CGEN_MAYBE_MULTI_IFLD MEP_F_24U8N_MULTI_IFIELD [] =
+{
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_24U8N_HI] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_24U8N_LO] } },
+ { 0, { (const PTR) 0 } }
+};
+const CGEN_MAYBE_MULTI_IFLD MEP_F_24U4N_MULTI_IFIELD [] =
+{
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_24U4N_HI] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_24U4N_LO] } },
+ { 0, { (const PTR) 0 } }
+};
+const CGEN_MAYBE_MULTI_IFLD MEP_F_CALLNUM_MULTI_IFIELD [] =
+{
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_5] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_6] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_7] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_11] } },
+ { 0, { (const PTR) 0 } }
+};
+const CGEN_MAYBE_MULTI_IFLD MEP_F_CCRN_MULTI_IFIELD [] =
+{
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_CCRN_HI] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_CCRN_LO] } },
+ { 0, { (const PTR) 0 } }
+};
+const CGEN_MAYBE_MULTI_IFLD MEP_F_FMAX_FRD_MULTI_IFIELD [] =
+{
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_FMAX_28_1] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_FMAX_4_4] } },
+ { 0, { (const PTR) 0 } }
+};
+const CGEN_MAYBE_MULTI_IFLD MEP_F_FMAX_FRN_MULTI_IFIELD [] =
+{
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_FMAX_29_1] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_FMAX_20_4] } },
+ { 0, { (const PTR) 0 } }
+};
+const CGEN_MAYBE_MULTI_IFLD MEP_F_FMAX_FRM_MULTI_IFIELD [] =
+{
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_FMAX_30_1] } },
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_FMAX_24_4] } },
+ { 0, { (const PTR) 0 } }
+};
+
+/* The operand table. */
+
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define A(a) (1 << CGEN_OPERAND_##a)
+#else
+#define A(a) (1 << CGEN_OPERAND_/**/a)
+#endif
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define OPERAND(op) MEP_OPERAND_##op
+#else
+#define OPERAND(op) MEP_OPERAND_/**/op
+#endif
+
+const CGEN_OPERAND mep_cgen_operand_table[] =
+{
+/* pc: program counter */
+ { "pc", MEP_OPERAND_PC, HW_H_PC, 0, 0,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_NIL] } },
+ { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* r0: register 0 */
+ { "r0", MEP_OPERAND_R0, HW_H_GPR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* rn: register Rn */
+ { "rn", MEP_OPERAND_RN, HW_H_GPR, 4, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* rm: register Rm */
+ { "rm", MEP_OPERAND_RM, HW_H_GPR, 8, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RM] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* rl: register Rl */
+ { "rl", MEP_OPERAND_RL, HW_H_GPR, 12, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RL] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* rn3: register 0-7 */
+ { "rn3", MEP_OPERAND_RN3, HW_H_GPR, 5, 3,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN3] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* rma: register Rm holding pointer */
+ { "rma", MEP_OPERAND_RMA, HW_H_GPR, 8, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RM] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_POINTER, 0 } }, { { 1, 0 } } } } },
+/* rnc: register Rn holding char */
+ { "rnc", MEP_OPERAND_RNC, HW_H_GPR, 4, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_CHAR, 0 } }, { { 1, 0 } } } } },
+/* rnuc: register Rn holding unsigned char */
+ { "rnuc", MEP_OPERAND_RNUC, HW_H_GPR, 4, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_UCHAR, 0 } }, { { 1, 0 } } } } },
+/* rns: register Rn holding short */
+ { "rns", MEP_OPERAND_RNS, HW_H_GPR, 4, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_SHORT, 0 } }, { { 1, 0 } } } } },
+/* rnus: register Rn holding unsigned short */
+ { "rnus", MEP_OPERAND_RNUS, HW_H_GPR, 4, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_USHORT, 0 } }, { { 1, 0 } } } } },
+/* rnl: register Rn holding long */
+ { "rnl", MEP_OPERAND_RNL, HW_H_GPR, 4, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* rnul: register Rn holding unsigned long */
+ { "rnul", MEP_OPERAND_RNUL, HW_H_GPR, 4, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_ULONG, 0 } }, { { 1, 0 } } } } },
+/* rn3c: register 0-7 holding unsigned char */
+ { "rn3c", MEP_OPERAND_RN3C, HW_H_GPR, 5, 3,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN3] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_CHAR, 0 } }, { { 1, 0 } } } } },
+/* rn3uc: register 0-7 holding byte */
+ { "rn3uc", MEP_OPERAND_RN3UC, HW_H_GPR, 5, 3,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN3] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_UCHAR, 0 } }, { { 1, 0 } } } } },
+/* rn3s: register 0-7 holding unsigned short */
+ { "rn3s", MEP_OPERAND_RN3S, HW_H_GPR, 5, 3,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN3] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_SHORT, 0 } }, { { 1, 0 } } } } },
+/* rn3us: register 0-7 holding short */
+ { "rn3us", MEP_OPERAND_RN3US, HW_H_GPR, 5, 3,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN3] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_USHORT, 0 } }, { { 1, 0 } } } } },
+/* rn3l: register 0-7 holding unsigned long */
+ { "rn3l", MEP_OPERAND_RN3L, HW_H_GPR, 5, 3,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN3] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* rn3ul: register 0-7 holding long */
+ { "rn3ul", MEP_OPERAND_RN3UL, HW_H_GPR, 5, 3,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN3] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_ULONG, 0 } }, { { 1, 0 } } } } },
+/* lp: link pointer */
+ { "lp", MEP_OPERAND_LP, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* sar: shift amount register */
+ { "sar", MEP_OPERAND_SAR, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* hi: high result */
+ { "hi", MEP_OPERAND_HI, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* lo: low result */
+ { "lo", MEP_OPERAND_LO, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* mb0: modulo begin register 0 */
+ { "mb0", MEP_OPERAND_MB0, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* me0: modulo end register 0 */
+ { "me0", MEP_OPERAND_ME0, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* mb1: modulo begin register 1 */
+ { "mb1", MEP_OPERAND_MB1, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* me1: modulo end register 1 */
+ { "me1", MEP_OPERAND_ME1, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* psw: program status word */
+ { "psw", MEP_OPERAND_PSW, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* epc: exception prog counter */
+ { "epc", MEP_OPERAND_EPC, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* exc: exception cause */
+ { "exc", MEP_OPERAND_EXC, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* npc: nmi program counter */
+ { "npc", MEP_OPERAND_NPC, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* dbg: debug register */
+ { "dbg", MEP_OPERAND_DBG, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* depc: debug exception pc */
+ { "depc", MEP_OPERAND_DEPC, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* opt: option register */
+ { "opt", MEP_OPERAND_OPT, HW_H_CSR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* r1: register 1 */
+ { "r1", MEP_OPERAND_R1, HW_H_GPR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* tp: tiny data area pointer */
+ { "tp", MEP_OPERAND_TP, HW_H_GPR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* sp: stack pointer */
+ { "sp", MEP_OPERAND_SP, HW_H_GPR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* tpr: comment */
+ { "tpr", MEP_OPERAND_TPR, HW_H_GPR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* spr: comment */
+ { "spr", MEP_OPERAND_SPR, HW_H_GPR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* csrn: control/special register */
+ { "csrn", MEP_OPERAND_CSRN, HW_H_CSR, 8, 5,
+ { 2, { (const PTR) &MEP_F_CSRN_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_REGNUM, 0 } }, { { 1, 0 } } } } },
+/* csrn-idx: control/special reg idx */
+ { "csrn-idx", MEP_OPERAND_CSRN_IDX, HW_H_UINT, 8, 5,
+ { 2, { (const PTR) &MEP_F_CSRN_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* crn64: copro Rn (64-bit) */
+ { "crn64", MEP_OPERAND_CRN64, HW_H_CR64, 4, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_CRN] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_CP_DATA_BUS_INT, 0 } }, { { 1, 0 } } } } },
+/* crn: copro Rn (32-bit) */
+ { "crn", MEP_OPERAND_CRN, HW_H_CR, 4, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_CRN] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_CP_DATA_BUS_INT, 0 } }, { { 1, 0 } } } } },
+/* crnx64: copro Rn (0-31, 64-bit) */
+ { "crnx64", MEP_OPERAND_CRNX64, HW_H_CR64, 4, 5,
+ { 2, { (const PTR) &MEP_F_CRNX_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_CP_DATA_BUS_INT, 0 } }, { { 1, 0 } } } } },
+/* crnx: copro Rn (0-31, 32-bit) */
+ { "crnx", MEP_OPERAND_CRNX, HW_H_CR, 4, 5,
+ { 2, { (const PTR) &MEP_F_CRNX_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_CP_DATA_BUS_INT, 0 } }, { { 1, 0 } } } } },
+/* ccrn: copro control reg CCRn */
+ { "ccrn", MEP_OPERAND_CCRN, HW_H_CCR, 4, 6,
+ { 2, { (const PTR) &MEP_F_CCRN_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_REGNUM, 0 } }, { { 1, 0 } } } } },
+/* cccc: copro flags */
+ { "cccc", MEP_OPERAND_CCCC, HW_H_UINT, 8, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RM] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* pcrel8a2: comment */
+ { "pcrel8a2", MEP_OPERAND_PCREL8A2, HW_H_SINT, 8, 7,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_8S8A2] } },
+ { 0|A(RELAX)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LABEL, 0 } }, { { 1, 0 } } } } },
+/* pcrel12a2: comment */
+ { "pcrel12a2", MEP_OPERAND_PCREL12A2, HW_H_SINT, 4, 11,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_12S4A2] } },
+ { 0|A(RELAX)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LABEL, 0 } }, { { 1, 0 } } } } },
+/* pcrel17a2: comment */
+ { "pcrel17a2", MEP_OPERAND_PCREL17A2, HW_H_SINT, 16, 16,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_17S16A2] } },
+ { 0|A(RELAX)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LABEL, 0 } }, { { 1, 0 } } } } },
+/* pcrel24a2: comment */
+ { "pcrel24a2", MEP_OPERAND_PCREL24A2, HW_H_SINT, 5, 23,
+ { 2, { (const PTR) &MEP_F_24S5A2N_MULTI_IFIELD[0] } },
+ { 0|A(PCREL_ADDR)|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LABEL, 0 } }, { { 1, 0 } } } } },
+/* pcabs24a2: comment */
+ { "pcabs24a2", MEP_OPERAND_PCABS24A2, HW_H_UINT, 5, 23,
+ { 2, { (const PTR) &MEP_F_24U5A2N_MULTI_IFIELD[0] } },
+ { 0|A(ABS_ADDR)|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LABEL, 0 } }, { { 1, 0 } } } } },
+/* sdisp16: comment */
+ { "sdisp16", MEP_OPERAND_SDISP16, HW_H_SINT, 16, 16,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_16S16] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* simm16: comment */
+ { "simm16", MEP_OPERAND_SIMM16, HW_H_SINT, 16, 16,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_16S16] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* uimm16: comment */
+ { "uimm16", MEP_OPERAND_UIMM16, HW_H_UINT, 16, 16,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_16U16] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* code16: uci/dsp code (16 bits) */
+ { "code16", MEP_OPERAND_CODE16, HW_H_UINT, 16, 16,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_16U16] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* udisp2: SSARB addend (2 bits) */
+ { "udisp2", MEP_OPERAND_UDISP2, HW_H_SINT, 6, 2,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_2U6] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* uimm2: interrupt (2 bits) */
+ { "uimm2", MEP_OPERAND_UIMM2, HW_H_UINT, 10, 2,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_2U10] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* simm6: add const (6 bits) */
+ { "simm6", MEP_OPERAND_SIMM6, HW_H_SINT, 8, 6,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_6S8] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* simm8: mov const (8 bits) */
+ { "simm8", MEP_OPERAND_SIMM8, HW_H_SINT, 8, 8,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_8S8] } },
+ { 0|A(RELOC_IMPLIES_OVERFLOW), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* addr24a4: comment */
+ { "addr24a4", MEP_OPERAND_ADDR24A4, HW_H_UINT, 8, 22,
+ { 2, { (const PTR) &MEP_F_24U8A4N_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 4, 0 } } } } },
+/* code24: coprocessor code */
+ { "code24", MEP_OPERAND_CODE24, HW_H_UINT, 4, 24,
+ { 2, { (const PTR) &MEP_F_24U4N_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* callnum: system call number */
+ { "callnum", MEP_OPERAND_CALLNUM, HW_H_UINT, 5, 4,
+ { 4, { (const PTR) &MEP_F_CALLNUM_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* uimm3: bit immediate (3 bits) */
+ { "uimm3", MEP_OPERAND_UIMM3, HW_H_UINT, 5, 3,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_3U5] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* uimm4: bCC const (4 bits) */
+ { "uimm4", MEP_OPERAND_UIMM4, HW_H_UINT, 8, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_4U8] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* uimm5: bit/shift val (5 bits) */
+ { "uimm5", MEP_OPERAND_UIMM5, HW_H_UINT, 8, 5,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_5U8] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* udisp7: comment */
+ { "udisp7", MEP_OPERAND_UDISP7, HW_H_UINT, 9, 7,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_7U9] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* udisp7a2: comment */
+ { "udisp7a2", MEP_OPERAND_UDISP7A2, HW_H_UINT, 9, 6,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_7U9A2] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 2, 0 } } } } },
+/* udisp7a4: comment */
+ { "udisp7a4", MEP_OPERAND_UDISP7A4, HW_H_UINT, 9, 5,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_7U9A4] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 4, 0 } } } } },
+/* uimm7a4: comment */
+ { "uimm7a4", MEP_OPERAND_UIMM7A4, HW_H_UINT, 9, 5,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_7U9A4] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 4, 0 } } } } },
+/* uimm24: immediate (24 bits) */
+ { "uimm24", MEP_OPERAND_UIMM24, HW_H_UINT, 8, 24,
+ { 2, { (const PTR) &MEP_F_24U8N_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* cimm4: cache immed'te (4 bits) */
+ { "cimm4", MEP_OPERAND_CIMM4, HW_H_UINT, 4, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_RN] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* cimm5: clip immediate (5 bits) */
+ { "cimm5", MEP_OPERAND_CIMM5, HW_H_UINT, 24, 5,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_5U24] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* cdisp8: copro addend (8 bits) */
+ { "cdisp8", MEP_OPERAND_CDISP8, HW_H_SINT, 24, 8,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_8S24] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* cdisp8a2: comment */
+ { "cdisp8a2", MEP_OPERAND_CDISP8A2, HW_H_SINT, 24, 7,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_8S24A2] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 2, 0 } } } } },
+/* cdisp8a4: comment */
+ { "cdisp8a4", MEP_OPERAND_CDISP8A4, HW_H_SINT, 24, 6,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_8S24A4] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 4, 0 } } } } },
+/* cdisp8a8: comment */
+ { "cdisp8a8", MEP_OPERAND_CDISP8A8, HW_H_SINT, 24, 5,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_8S24A8] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 8, 0 } } } } },
+/* zero: Zero operand */
+ { "zero", MEP_OPERAND_ZERO, HW_H_SINT, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* cp_flag: branch condition register */
+ { "cp_flag", MEP_OPERAND_CP_FLAG, HW_H_CCR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xfe" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* fmax-FRd: FRd */
+ { "fmax-FRd", MEP_OPERAND_FMAX_FRD, HW_H_CR, 4, 5,
+ { 2, { (const PTR) &MEP_F_FMAX_FRD_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { CDATA_FMAX_FLOAT, 0 } }, { { 1, 0 } } } } },
+/* fmax-FRn: FRn */
+ { "fmax-FRn", MEP_OPERAND_FMAX_FRN, HW_H_CR, 20, 5,
+ { 2, { (const PTR) &MEP_F_FMAX_FRN_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { CDATA_FMAX_FLOAT, 0 } }, { { 1, 0 } } } } },
+/* fmax-FRm: FRm */
+ { "fmax-FRm", MEP_OPERAND_FMAX_FRM, HW_H_CR, 24, 5,
+ { 2, { (const PTR) &MEP_F_FMAX_FRM_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { CDATA_FMAX_FLOAT, 0 } }, { { 1, 0 } } } } },
+/* fmax-FRd-int: FRd as an integer */
+ { "fmax-FRd-int", MEP_OPERAND_FMAX_FRD_INT, HW_H_CR, 4, 5,
+ { 2, { (const PTR) &MEP_F_FMAX_FRD_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { CDATA_FMAX_INT, 0 } }, { { 1, 0 } } } } },
+/* fmax-FRn-int: FRn as an integer */
+ { "fmax-FRn-int", MEP_OPERAND_FMAX_FRN_INT, HW_H_CR, 20, 5,
+ { 2, { (const PTR) &MEP_F_FMAX_FRN_MULTI_IFIELD[0] } },
+ { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { CDATA_FMAX_INT, 0 } }, { { 1, 0 } } } } },
+/* fmax-CCRn: CCRn */
+ { "fmax-CCRn", MEP_OPERAND_FMAX_CCRN, HW_H_CCR, 4, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_FMAX_4_4] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { CDATA_REGNUM, 0 } }, { { 1, 0 } } } } },
+/* fmax-CIRR: CIRR */
+ { "fmax-CIRR", MEP_OPERAND_FMAX_CIRR, HW_H_CCR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* fmax-CBCR: CBCR */
+ { "fmax-CBCR", MEP_OPERAND_FMAX_CBCR, HW_H_CCR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* fmax-CERR: CERR */
+ { "fmax-CERR", MEP_OPERAND_FMAX_CERR, HW_H_CCR, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* fmax-Rm: Rm */
+ { "fmax-Rm", MEP_OPERAND_FMAX_RM, HW_H_GPR, 8, 4,
+ { 0, { (const PTR) &mep_cgen_ifld_table[MEP_F_FMAX_RM] } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* fmax-Compare-i-p: flag */
+ { "fmax-Compare-i-p", MEP_OPERAND_FMAX_COMPARE_I_P, HW_H_FMAX_COMPARE_I_P, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } },
+/* sentinel */
+ { 0, 0, 0, 0, 0,
+ { 0, { (const PTR) 0 } },
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { CDATA_LONG, 0 } }, { { 1, 0 } } } } }
+};
+
+#undef A
+
+
+/* The instruction table. */
+
+#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define A(a) (1 << CGEN_INSN_##a)
+#else
+#define A(a) (1 << CGEN_INSN_/**/a)
+#endif
+
+static const CGEN_IBASE mep_cgen_insn_table[MAX_INSNS] =
+{
+ /* Special null first entry.
+ A `num' value of zero is thus invalid.
+ Also, the special `invalid' insn resides here. */
+ { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } } },
+/* sb $rnc,($rma) */
+ {
+ MEP_INSN_SB, "sb", "sb", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sh $rns,($rma) */
+ {
+ MEP_INSN_SH, "sh", "sh", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sw $rnl,($rma) */
+ {
+ MEP_INSN_SW, "sw", "sw", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lb $rnc,($rma) */
+ {
+ MEP_INSN_LB, "lb", "lb", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lh $rns,($rma) */
+ {
+ MEP_INSN_LH, "lh", "lh", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lw $rnl,($rma) */
+ {
+ MEP_INSN_LW, "lw", "lw", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lbu $rnuc,($rma) */
+ {
+ MEP_INSN_LBU, "lbu", "lbu", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lhu $rnus,($rma) */
+ {
+ MEP_INSN_LHU, "lhu", "lhu", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sw $rnl,$udisp7a4($spr) */
+ {
+ MEP_INSN_SW_SP, "sw-sp", "sw", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lw $rnl,$udisp7a4($spr) */
+ {
+ MEP_INSN_LW_SP, "lw-sp", "lw", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sb $rn3c,$udisp7($tpr) */
+ {
+ MEP_INSN_SB_TP, "sb-tp", "sb", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sh $rn3s,$udisp7a2($tpr) */
+ {
+ MEP_INSN_SH_TP, "sh-tp", "sh", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sw $rn3l,$udisp7a4($tpr) */
+ {
+ MEP_INSN_SW_TP, "sw-tp", "sw", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lb $rn3c,$udisp7($tpr) */
+ {
+ MEP_INSN_LB_TP, "lb-tp", "lb", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lh $rn3s,$udisp7a2($tpr) */
+ {
+ MEP_INSN_LH_TP, "lh-tp", "lh", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lw $rn3l,$udisp7a4($tpr) */
+ {
+ MEP_INSN_LW_TP, "lw-tp", "lw", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lbu $rn3uc,$udisp7($tpr) */
+ {
+ MEP_INSN_LBU_TP, "lbu-tp", "lbu", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lhu $rn3us,$udisp7a2($tpr) */
+ {
+ MEP_INSN_LHU_TP, "lhu-tp", "lhu", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sb $rnc,$sdisp16($rma) */
+ {
+ MEP_INSN_SB16, "sb16", "sb", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sh $rns,$sdisp16($rma) */
+ {
+ MEP_INSN_SH16, "sh16", "sh", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sw $rnl,$sdisp16($rma) */
+ {
+ MEP_INSN_SW16, "sw16", "sw", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lb $rnc,$sdisp16($rma) */
+ {
+ MEP_INSN_LB16, "lb16", "lb", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lh $rns,$sdisp16($rma) */
+ {
+ MEP_INSN_LH16, "lh16", "lh", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lw $rnl,$sdisp16($rma) */
+ {
+ MEP_INSN_LW16, "lw16", "lw", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lbu $rnuc,$sdisp16($rma) */
+ {
+ MEP_INSN_LBU16, "lbu16", "lbu", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lhu $rnus,$sdisp16($rma) */
+ {
+ MEP_INSN_LHU16, "lhu16", "lhu", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sw $rnl,($addr24a4) */
+ {
+ MEP_INSN_SW24, "sw24", "sw", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lw $rnl,($addr24a4) */
+ {
+ MEP_INSN_LW24, "lw24", "lw", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* extb $rn */
+ {
+ MEP_INSN_EXTB, "extb", "extb", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* exth $rn */
+ {
+ MEP_INSN_EXTH, "exth", "exth", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* extub $rn */
+ {
+ MEP_INSN_EXTUB, "extub", "extub", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* extuh $rn */
+ {
+ MEP_INSN_EXTUH, "extuh", "extuh", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ssarb $udisp2($rm) */
+ {
+ MEP_INSN_SSARB, "ssarb", "ssarb", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* mov $rn,$rm */
+ {
+ MEP_INSN_MOV, "mov", "mov", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* mov $rn,$simm8 */
+ {
+ MEP_INSN_MOVI8, "movi8", "mov", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* mov $rn,$simm16 */
+ {
+ MEP_INSN_MOVI16, "movi16", "mov", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* movu $rn3,$uimm24 */
+ {
+ MEP_INSN_MOVU24, "movu24", "movu", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* movu $rn,$uimm16 */
+ {
+ MEP_INSN_MOVU16, "movu16", "movu", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* movh $rn,$uimm16 */
+ {
+ MEP_INSN_MOVH, "movh", "movh", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* add3 $rl,$rn,$rm */
+ {
+ MEP_INSN_ADD3, "add3", "add3", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* add $rn,$simm6 */
+ {
+ MEP_INSN_ADD, "add", "add", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* add3 $rn,$spr,$uimm7a4 */
+ {
+ MEP_INSN_ADD3I, "add3i", "add3", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* advck3 \$0,$rn,$rm */
+ {
+ MEP_INSN_ADVCK3, "advck3", "advck3", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sub $rn,$rm */
+ {
+ MEP_INSN_SUB, "sub", "sub", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sbvck3 \$0,$rn,$rm */
+ {
+ MEP_INSN_SBVCK3, "sbvck3", "sbvck3", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* neg $rn,$rm */
+ {
+ MEP_INSN_NEG, "neg", "neg", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* slt3 \$0,$rn,$rm */
+ {
+ MEP_INSN_SLT3, "slt3", "slt3", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sltu3 \$0,$rn,$rm */
+ {
+ MEP_INSN_SLTU3, "sltu3", "sltu3", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* slt3 \$0,$rn,$uimm5 */
+ {
+ MEP_INSN_SLT3I, "slt3i", "slt3", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sltu3 \$0,$rn,$uimm5 */
+ {
+ MEP_INSN_SLTU3I, "sltu3i", "sltu3", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sl1ad3 \$0,$rn,$rm */
+ {
+ MEP_INSN_SL1AD3, "sl1ad3", "sl1ad3", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sl2ad3 \$0,$rn,$rm */
+ {
+ MEP_INSN_SL2AD3, "sl2ad3", "sl2ad3", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* add3 $rn,$rm,$simm16 */
+ {
+ MEP_INSN_ADD3X, "add3x", "add3", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* slt3 $rn,$rm,$simm16 */
+ {
+ MEP_INSN_SLT3X, "slt3x", "slt3", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sltu3 $rn,$rm,$uimm16 */
+ {
+ MEP_INSN_SLTU3X, "sltu3x", "sltu3", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* or $rn,$rm */
+ {
+ MEP_INSN_OR, "or", "or", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* and $rn,$rm */
+ {
+ MEP_INSN_AND, "and", "and", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* xor $rn,$rm */
+ {
+ MEP_INSN_XOR, "xor", "xor", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* nor $rn,$rm */
+ {
+ MEP_INSN_NOR, "nor", "nor", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* or3 $rn,$rm,$uimm16 */
+ {
+ MEP_INSN_OR3, "or3", "or3", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* and3 $rn,$rm,$uimm16 */
+ {
+ MEP_INSN_AND3, "and3", "and3", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* xor3 $rn,$rm,$uimm16 */
+ {
+ MEP_INSN_XOR3, "xor3", "xor3", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sra $rn,$rm */
+ {
+ MEP_INSN_SRA, "sra", "sra", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* srl $rn,$rm */
+ {
+ MEP_INSN_SRL, "srl", "srl", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sll $rn,$rm */
+ {
+ MEP_INSN_SLL, "sll", "sll", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sra $rn,$uimm5 */
+ {
+ MEP_INSN_SRAI, "srai", "sra", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* srl $rn,$uimm5 */
+ {
+ MEP_INSN_SRLI, "srli", "srl", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sll $rn,$uimm5 */
+ {
+ MEP_INSN_SLLI, "slli", "sll", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sll3 \$0,$rn,$uimm5 */
+ {
+ MEP_INSN_SLL3, "sll3", "sll3", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fsft $rn,$rm */
+ {
+ MEP_INSN_FSFT, "fsft", "fsft", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bra $pcrel12a2 */
+ {
+ MEP_INSN_BRA, "bra", "bra", 16,
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* beqz $rn,$pcrel8a2 */
+ {
+ MEP_INSN_BEQZ, "beqz", "beqz", 16,
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bnez $rn,$pcrel8a2 */
+ {
+ MEP_INSN_BNEZ, "bnez", "bnez", 16,
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* beqi $rn,$uimm4,$pcrel17a2 */
+ {
+ MEP_INSN_BEQI, "beqi", "beqi", 32,
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bnei $rn,$uimm4,$pcrel17a2 */
+ {
+ MEP_INSN_BNEI, "bnei", "bnei", 32,
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* blti $rn,$uimm4,$pcrel17a2 */
+ {
+ MEP_INSN_BLTI, "blti", "blti", 32,
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bgei $rn,$uimm4,$pcrel17a2 */
+ {
+ MEP_INSN_BGEI, "bgei", "bgei", 32,
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* beq $rn,$rm,$pcrel17a2 */
+ {
+ MEP_INSN_BEQ, "beq", "beq", 32,
+ { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bne $rn,$rm,$pcrel17a2 */
+ {
+ MEP_INSN_BNE, "bne", "bne", 32,
+ { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bsr $pcrel12a2 */
+ {
+ MEP_INSN_BSR12, "bsr12", "bsr", 16,
+ { 0|A(RELAXABLE)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bsr $pcrel24a2 */
+ {
+ MEP_INSN_BSR24, "bsr24", "bsr", 32,
+ { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* jmp $rm */
+ {
+ MEP_INSN_JMP, "jmp", "jmp", 16,
+ { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* jmp $pcabs24a2 */
+ {
+ MEP_INSN_JMP24, "jmp24", "jmp", 32,
+ { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* jsr $rm */
+ {
+ MEP_INSN_JSR, "jsr", "jsr", 16,
+ { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ret */
+ {
+ MEP_INSN_RET, "ret", "ret", 16,
+ { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* repeat $rn,$pcrel17a2 */
+ {
+ MEP_INSN_REPEAT, "repeat", "repeat", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* erepeat $pcrel17a2 */
+ {
+ MEP_INSN_EREPEAT, "erepeat", "erepeat", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* stc $rn,\$lp */
+ {
+ MEP_INSN_STC_LP, "stc_lp", "stc", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* stc $rn,\$hi */
+ {
+ MEP_INSN_STC_HI, "stc_hi", "stc", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* stc $rn,\$lo */
+ {
+ MEP_INSN_STC_LO, "stc_lo", "stc", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* stc $rn,$csrn */
+ {
+ MEP_INSN_STC, "stc", "stc", 16,
+ { 0|A(VOLATILE), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ldc $rn,\$lp */
+ {
+ MEP_INSN_LDC_LP, "ldc_lp", "ldc", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ldc $rn,\$hi */
+ {
+ MEP_INSN_LDC_HI, "ldc_hi", "ldc", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ldc $rn,\$lo */
+ {
+ MEP_INSN_LDC_LO, "ldc_lo", "ldc", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ldc $rn,$csrn */
+ {
+ MEP_INSN_LDC, "ldc", "ldc", 16,
+ { 0|A(VOLATILE), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 2, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* di */
+ {
+ MEP_INSN_DI, "di", "di", 16,
+ { 0|A(VOLATILE), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ei */
+ {
+ MEP_INSN_EI, "ei", "ei", 16,
+ { 0|A(VOLATILE), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* reti */
+ {
+ MEP_INSN_RETI, "reti", "reti", 16,
+ { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* halt */
+ {
+ MEP_INSN_HALT, "halt", "halt", 16,
+ { 0|A(VOLATILE), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sleep */
+ {
+ MEP_INSN_SLEEP, "sleep", "sleep", 16,
+ { 0|A(VOLATILE), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* swi $uimm2 */
+ {
+ MEP_INSN_SWI, "swi", "swi", 16,
+ { 0|A(VOLATILE)|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* break */
+ {
+ MEP_INSN_BREAK, "break", "break", 16,
+ { 0|A(VOLATILE)|A(MAY_TRAP)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* syncm */
+ {
+ MEP_INSN_SYNCM, "syncm", "syncm", 16,
+ { 0|A(VOLATILE), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* stcb $rn,$uimm16 */
+ {
+ MEP_INSN_STCB, "stcb", "stcb", 32,
+ { 0|A(VOLATILE), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ldcb $rn,$uimm16 */
+ {
+ MEP_INSN_LDCB, "ldcb", "ldcb", 32,
+ { 0|A(VOLATILE), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 3, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bsetm ($rma),$uimm3 */
+ {
+ MEP_INSN_BSETM, "bsetm", "bsetm", 16,
+ { 0|A(OPTIONAL_BIT_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bclrm ($rma),$uimm3 */
+ {
+ MEP_INSN_BCLRM, "bclrm", "bclrm", 16,
+ { 0|A(OPTIONAL_BIT_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bnotm ($rma),$uimm3 */
+ {
+ MEP_INSN_BNOTM, "bnotm", "bnotm", 16,
+ { 0|A(OPTIONAL_BIT_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* btstm \$0,($rma),$uimm3 */
+ {
+ MEP_INSN_BTSTM, "btstm", "btstm", 16,
+ { 0|A(OPTIONAL_BIT_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* tas $rn,($rma) */
+ {
+ MEP_INSN_TAS, "tas", "tas", 16,
+ { 0|A(OPTIONAL_BIT_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* cache $cimm4,($rma) */
+ {
+ MEP_INSN_CACHE, "cache", "cache", 16,
+ { 0|A(VOLATILE), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* mul $rn,$rm */
+ {
+ MEP_INSN_MUL, "mul", "mul", 16,
+ { 0|A(OPTIONAL_MUL_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* mulu $rn,$rm */
+ {
+ MEP_INSN_MULU, "mulu", "mulu", 16,
+ { 0|A(OPTIONAL_MUL_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* mulr $rn,$rm */
+ {
+ MEP_INSN_MULR, "mulr", "mulr", 16,
+ { 0|A(OPTIONAL_MUL_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 3, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* mulru $rn,$rm */
+ {
+ MEP_INSN_MULRU, "mulru", "mulru", 16,
+ { 0|A(OPTIONAL_MUL_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 3, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* madd $rn,$rm */
+ {
+ MEP_INSN_MADD, "madd", "madd", 32,
+ { 0|A(OPTIONAL_MUL_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* maddu $rn,$rm */
+ {
+ MEP_INSN_MADDU, "maddu", "maddu", 32,
+ { 0|A(OPTIONAL_MUL_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* maddr $rn,$rm */
+ {
+ MEP_INSN_MADDR, "maddr", "maddr", 32,
+ { 0|A(OPTIONAL_MUL_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 3, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* maddru $rn,$rm */
+ {
+ MEP_INSN_MADDRU, "maddru", "maddru", 32,
+ { 0|A(OPTIONAL_MUL_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 3, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* div $rn,$rm */
+ {
+ MEP_INSN_DIV, "div", "div", 16,
+ { 0|A(MAY_TRAP)|A(OPTIONAL_DIV_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 34, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* divu $rn,$rm */
+ {
+ MEP_INSN_DIVU, "divu", "divu", 16,
+ { 0|A(MAY_TRAP)|A(OPTIONAL_DIV_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 34, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* dret */
+ {
+ MEP_INSN_DRET, "dret", "dret", 16,
+ { 0|A(OPTIONAL_DEBUG_INSN)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* dbreak */
+ {
+ MEP_INSN_DBREAK, "dbreak", "dbreak", 16,
+ { 0|A(VOLATILE)|A(MAY_TRAP)|A(OPTIONAL_DEBUG_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ldz $rn,$rm */
+ {
+ MEP_INSN_LDZ, "ldz", "ldz", 32,
+ { 0|A(OPTIONAL_LDZ_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* abs $rn,$rm */
+ {
+ MEP_INSN_ABS, "abs", "abs", 32,
+ { 0|A(OPTIONAL_ABS_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ave $rn,$rm */
+ {
+ MEP_INSN_AVE, "ave", "ave", 32,
+ { 0|A(OPTIONAL_AVE_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* min $rn,$rm */
+ {
+ MEP_INSN_MIN, "min", "min", 32,
+ { 0|A(OPTIONAL_MINMAX_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* max $rn,$rm */
+ {
+ MEP_INSN_MAX, "max", "max", 32,
+ { 0|A(OPTIONAL_MINMAX_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* minu $rn,$rm */
+ {
+ MEP_INSN_MINU, "minu", "minu", 32,
+ { 0|A(OPTIONAL_MINMAX_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* maxu $rn,$rm */
+ {
+ MEP_INSN_MAXU, "maxu", "maxu", 32,
+ { 0|A(OPTIONAL_MINMAX_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* clip $rn,$cimm5 */
+ {
+ MEP_INSN_CLIP, "clip", "clip", 32,
+ { 0|A(OPTIONAL_CLIP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* clipu $rn,$cimm5 */
+ {
+ MEP_INSN_CLIPU, "clipu", "clipu", 32,
+ { 0|A(OPTIONAL_CLIP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sadd $rn,$rm */
+ {
+ MEP_INSN_SADD, "sadd", "sadd", 32,
+ { 0|A(OPTIONAL_SAT_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ssub $rn,$rm */
+ {
+ MEP_INSN_SSUB, "ssub", "ssub", 32,
+ { 0|A(OPTIONAL_SAT_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* saddu $rn,$rm */
+ {
+ MEP_INSN_SADDU, "saddu", "saddu", 32,
+ { 0|A(OPTIONAL_SAT_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ssubu $rn,$rm */
+ {
+ MEP_INSN_SSUBU, "ssubu", "ssubu", 32,
+ { 0|A(OPTIONAL_SAT_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* swcp $crn,($rma) */
+ {
+ MEP_INSN_SWCP, "swcp", "swcp", 16,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lwcp $crn,($rma) */
+ {
+ MEP_INSN_LWCP, "lwcp", "lwcp", 16,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* smcp $crn64,($rma) */
+ {
+ MEP_INSN_SMCP, "smcp", "smcp", 16,
+ { 0|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lmcp $crn64,($rma) */
+ {
+ MEP_INSN_LMCP, "lmcp", "lmcp", 16,
+ { 0|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* swcpi $crn,($rma+) */
+ {
+ MEP_INSN_SWCPI, "swcpi", "swcpi", 16,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lwcpi $crn,($rma+) */
+ {
+ MEP_INSN_LWCPI, "lwcpi", "lwcpi", 16,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* smcpi $crn64,($rma+) */
+ {
+ MEP_INSN_SMCPI, "smcpi", "smcpi", 16,
+ { 0|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lmcpi $crn64,($rma+) */
+ {
+ MEP_INSN_LMCPI, "lmcpi", "lmcpi", 16,
+ { 0|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* swcp $crn,$sdisp16($rma) */
+ {
+ MEP_INSN_SWCP16, "swcp16", "swcp", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lwcp $crn,$sdisp16($rma) */
+ {
+ MEP_INSN_LWCP16, "lwcp16", "lwcp", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* smcp $crn64,$sdisp16($rma) */
+ {
+ MEP_INSN_SMCP16, "smcp16", "smcp", 32,
+ { 0|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lmcp $crn64,$sdisp16($rma) */
+ {
+ MEP_INSN_LMCP16, "lmcp16", "lmcp", 32,
+ { 0|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sbcpa $crn,($rma+),$cdisp8 */
+ {
+ MEP_INSN_SBCPA, "sbcpa", "sbcpa", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lbcpa $crn,($rma+),$cdisp8 */
+ {
+ MEP_INSN_LBCPA, "lbcpa", "lbcpa", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* shcpa $crn,($rma+),$cdisp8a2 */
+ {
+ MEP_INSN_SHCPA, "shcpa", "shcpa", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lhcpa $crn,($rma+),$cdisp8a2 */
+ {
+ MEP_INSN_LHCPA, "lhcpa", "lhcpa", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* swcpa $crn,($rma+),$cdisp8a4 */
+ {
+ MEP_INSN_SWCPA, "swcpa", "swcpa", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lwcpa $crn,($rma+),$cdisp8a4 */
+ {
+ MEP_INSN_LWCPA, "lwcpa", "lwcpa", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* smcpa $crn64,($rma+),$cdisp8a8 */
+ {
+ MEP_INSN_SMCPA, "smcpa", "smcpa", 32,
+ { 0|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lmcpa $crn64,($rma+),$cdisp8a8 */
+ {
+ MEP_INSN_LMCPA, "lmcpa", "lmcpa", 32,
+ { 0|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sbcpm0 $crn,($rma+),$cdisp8 */
+ {
+ MEP_INSN_SBCPM0, "sbcpm0", "sbcpm0", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lbcpm0 $crn,($rma+),$cdisp8 */
+ {
+ MEP_INSN_LBCPM0, "lbcpm0", "lbcpm0", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* shcpm0 $crn,($rma+),$cdisp8a2 */
+ {
+ MEP_INSN_SHCPM0, "shcpm0", "shcpm0", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lhcpm0 $crn,($rma+),$cdisp8a2 */
+ {
+ MEP_INSN_LHCPM0, "lhcpm0", "lhcpm0", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* swcpm0 $crn,($rma+),$cdisp8a4 */
+ {
+ MEP_INSN_SWCPM0, "swcpm0", "swcpm0", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lwcpm0 $crn,($rma+),$cdisp8a4 */
+ {
+ MEP_INSN_LWCPM0, "lwcpm0", "lwcpm0", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* smcpm0 $crn64,($rma+),$cdisp8a8 */
+ {
+ MEP_INSN_SMCPM0, "smcpm0", "smcpm0", 32,
+ { 0|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lmcpm0 $crn64,($rma+),$cdisp8a8 */
+ {
+ MEP_INSN_LMCPM0, "lmcpm0", "lmcpm0", 32,
+ { 0|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sbcpm1 $crn,($rma+),$cdisp8 */
+ {
+ MEP_INSN_SBCPM1, "sbcpm1", "sbcpm1", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lbcpm1 $crn,($rma+),$cdisp8 */
+ {
+ MEP_INSN_LBCPM1, "lbcpm1", "lbcpm1", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* shcpm1 $crn,($rma+),$cdisp8a2 */
+ {
+ MEP_INSN_SHCPM1, "shcpm1", "shcpm1", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lhcpm1 $crn,($rma+),$cdisp8a2 */
+ {
+ MEP_INSN_LHCPM1, "lhcpm1", "lhcpm1", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* swcpm1 $crn,($rma+),$cdisp8a4 */
+ {
+ MEP_INSN_SWCPM1, "swcpm1", "swcpm1", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lwcpm1 $crn,($rma+),$cdisp8a4 */
+ {
+ MEP_INSN_LWCPM1, "lwcpm1", "lwcpm1", 32,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* smcpm1 $crn64,($rma+),$cdisp8a8 */
+ {
+ MEP_INSN_SMCPM1, "smcpm1", "smcpm1", 32,
+ { 0|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lmcpm1 $crn64,($rma+),$cdisp8a8 */
+ {
+ MEP_INSN_LMCPM1, "lmcpm1", "lmcpm1", 32,
+ { 0|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bcpeq $cccc,$pcrel17a2 */
+ {
+ MEP_INSN_BCPEQ, "bcpeq", "bcpeq", 32,
+ { 0|A(RELAXABLE)|A(OPTIONAL_CP_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bcpne $cccc,$pcrel17a2 */
+ {
+ MEP_INSN_BCPNE, "bcpne", "bcpne", 32,
+ { 0|A(RELAXABLE)|A(OPTIONAL_CP_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bcpat $cccc,$pcrel17a2 */
+ {
+ MEP_INSN_BCPAT, "bcpat", "bcpat", 32,
+ { 0|A(RELAXABLE)|A(OPTIONAL_CP_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bcpaf $cccc,$pcrel17a2 */
+ {
+ MEP_INSN_BCPAF, "bcpaf", "bcpaf", 32,
+ { 0|A(RELAXABLE)|A(OPTIONAL_CP_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* synccp */
+ {
+ MEP_INSN_SYNCCP, "synccp", "synccp", 16,
+ { 0|A(OPTIONAL_CP_INSN), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* jsrv $rm */
+ {
+ MEP_INSN_JSRV, "jsrv", "jsrv", 16,
+ { 0|A(OPTIONAL_CP_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* bsrv $pcrel24a2 */
+ {
+ MEP_INSN_BSRV, "bsrv", "bsrv", 32,
+ { 0|A(OPTIONAL_CP_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --unused-- */
+ {
+ MEP_INSN_SIM_SYSCALL, "sim-syscall", "--unused--", 16,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_0, "ri-0", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_1, "ri-1", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_2, "ri-2", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_3, "ri-3", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_4, "ri-4", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_5, "ri-5", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_6, "ri-6", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_7, "ri-7", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_8, "ri-8", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_9, "ri-9", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_10, "ri-10", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_11, "ri-11", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_12, "ri-12", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_13, "ri-13", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_14, "ri-14", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_15, "ri-15", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_17, "ri-17", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_20, "ri-20", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_21, "ri-21", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_22, "ri-22", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_23, "ri-23", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_24, "ri-24", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_25, "ri-25", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_26, "ri-26", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_16, "ri-16", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_18, "ri-18", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* --reserved-- */
+ {
+ MEP_INSN_RI_19, "ri-19", "--reserved--", 16,
+ { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fadds ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FADDS, "fadds", "fadds", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fsubs ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FSUBS, "fsubs", "fsubs", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fmuls ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FMULS, "fmuls", "fmuls", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fdivs ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FDIVS, "fdivs", "fdivs", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fsqrts ${fmax-FRd},${fmax-FRn} */
+ {
+ MEP_INSN_FSQRTS, "fsqrts", "fsqrts", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fabss ${fmax-FRd},${fmax-FRn} */
+ {
+ MEP_INSN_FABSS, "fabss", "fabss", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fnegs ${fmax-FRd},${fmax-FRn} */
+ {
+ MEP_INSN_FNEGS, "fnegs", "fnegs", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fmovs ${fmax-FRd},${fmax-FRn} */
+ {
+ MEP_INSN_FMOVS, "fmovs", "fmovs", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* froundws ${fmax-FRd-int},${fmax-FRn} */
+ {
+ MEP_INSN_FROUNDWS, "froundws", "froundws", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ftruncws ${fmax-FRd-int},${fmax-FRn} */
+ {
+ MEP_INSN_FTRUNCWS, "ftruncws", "ftruncws", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fceilws ${fmax-FRd-int},${fmax-FRn} */
+ {
+ MEP_INSN_FCEILWS, "fceilws", "fceilws", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* ffloorws ${fmax-FRd-int},${fmax-FRn} */
+ {
+ MEP_INSN_FFLOORWS, "ffloorws", "ffloorws", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcvtws ${fmax-FRd-int},${fmax-FRn} */
+ {
+ MEP_INSN_FCVTWS, "fcvtws", "fcvtws", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcvtsw ${fmax-FRd},${fmax-FRn-int} */
+ {
+ MEP_INSN_FCVTSW, "fcvtsw", "fcvtsw", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpfs ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPFS, "fcmpfs", "fcmpfs", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpus ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPUS, "fcmpus", "fcmpus", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpes ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPES, "fcmpes", "fcmpes", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpues ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPUES, "fcmpues", "fcmpues", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpls ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPLS, "fcmpls", "fcmpls", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpuls ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPULS, "fcmpuls", "fcmpuls", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmples ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPLES, "fcmples", "fcmples", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpules ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPULES, "fcmpules", "fcmpules", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpfis ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPFIS, "fcmpfis", "fcmpfis", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpuis ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPUIS, "fcmpuis", "fcmpuis", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpeis ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPEIS, "fcmpeis", "fcmpeis", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpueis ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPUEIS, "fcmpueis", "fcmpueis", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmplis ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPLIS, "fcmplis", "fcmplis", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpulis ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPULIS, "fcmpulis", "fcmpulis", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpleis ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPLEIS, "fcmpleis", "fcmpleis", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* fcmpuleis ${fmax-FRn},${fmax-FRm} */
+ {
+ MEP_INSN_FCMPULEIS, "fcmpuleis", "fcmpuleis", 32,
+ { 0|A(MAY_TRAP), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* cmov ${fmax-FRd-int},${fmax-Rm} */
+ {
+ MEP_INSN_CMOV_FRN_RM, "cmov-frn-rm", "cmov", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* cmov ${fmax-Rm},${fmax-FRd-int} */
+ {
+ MEP_INSN_CMOV_RM_FRN, "cmov-rm-frn", "cmov", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* cmovc ${fmax-CCRn},${fmax-Rm} */
+ {
+ MEP_INSN_CMOVC_CCRN_RM, "cmovc-ccrn-rm", "cmovc", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* cmovc ${fmax-Rm},${fmax-CCRn} */
+ {
+ MEP_INSN_CMOVC_RM_CCRN, "cmovc-rm-ccrn", "cmovc", 32,
+ { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+};
+
+#undef OP
+#undef A
+
+/* Initialize anything needed to be done once, before any cpu_open call. */
+
+static void
+init_tables (void)
+{
+}
+
+static const CGEN_MACH * lookup_mach_via_bfd_name (const CGEN_MACH *, const char *);
+static void build_hw_table (CGEN_CPU_TABLE *);
+static void build_ifield_table (CGEN_CPU_TABLE *);
+static void build_operand_table (CGEN_CPU_TABLE *);
+static void build_insn_table (CGEN_CPU_TABLE *);
+static void mep_cgen_rebuild_tables (CGEN_CPU_TABLE *);
+
+/* Subroutine of mep_cgen_cpu_open to look up a mach via its bfd name. */
+
+static const CGEN_MACH *
+lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name)
+{
+ while (table->name)
+ {
+ if (strcmp (name, table->bfd_name) == 0)
+ return table;
+ ++table;
+ }
+ abort ();
+}
+
+/* Subroutine of mep_cgen_cpu_open to build the hardware table. */
+
+static void
+build_hw_table (CGEN_CPU_TABLE *cd)
+{
+ int i;
+ int machs = cd->machs;
+ const CGEN_HW_ENTRY *init = & mep_cgen_hw_table[0];
+ /* MAX_HW is only an upper bound on the number of selected entries.
+ However each entry is indexed by it's enum so there can be holes in
+ the table. */
+ const CGEN_HW_ENTRY **selected =
+ (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
+
+ cd->hw_table.init_entries = init;
+ cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
+ memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
+ /* ??? For now we just use machs to determine which ones we want. */
+ for (i = 0; init[i].name != NULL; ++i)
+ if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
+ & machs)
+ selected[init[i].type] = &init[i];
+ cd->hw_table.entries = selected;
+ cd->hw_table.num_entries = MAX_HW;
+}
+
+/* Subroutine of mep_cgen_cpu_open to build the hardware table. */
+
+static void
+build_ifield_table (CGEN_CPU_TABLE *cd)
+{
+ cd->ifld_table = & mep_cgen_ifld_table[0];
+}
+
+/* Subroutine of mep_cgen_cpu_open to build the hardware table. */
+
+static void
+build_operand_table (CGEN_CPU_TABLE *cd)
+{
+ int i;
+ int machs = cd->machs;
+ const CGEN_OPERAND *init = & mep_cgen_operand_table[0];
+ /* MAX_OPERANDS is only an upper bound on the number of selected entries.
+ However each entry is indexed by it's enum so there can be holes in
+ the table. */
+ const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));
+
+ cd->operand_table.init_entries = init;
+ cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
+ memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
+ /* ??? For now we just use mach to determine which ones we want. */
+ for (i = 0; init[i].name != NULL; ++i)
+ if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
+ & machs)
+ selected[init[i].type] = &init[i];
+ cd->operand_table.entries = selected;
+ cd->operand_table.num_entries = MAX_OPERANDS;
+}
+
+/* Subroutine of mep_cgen_cpu_open to build the hardware table.
+ ??? This could leave out insns not supported by the specified mach/isa,
+ but that would cause errors like "foo only supported by bar" to become
+ "unknown insn", so for now we include all insns and require the app to
+ do the checking later.
+ ??? On the other hand, parsing of such insns may require their hardware or
+ operand elements to be in the table [which they mightn't be]. */
+
+static void
+build_insn_table (CGEN_CPU_TABLE *cd)
+{
+ int i;
+ const CGEN_IBASE *ib = & mep_cgen_insn_table[0];
+ CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
+
+ memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
+ for (i = 0; i < MAX_INSNS; ++i)
+ insns[i].base = &ib[i];
+ cd->insn_table.init_entries = insns;
+ cd->insn_table.entry_size = sizeof (CGEN_IBASE);
+ cd->insn_table.num_init_entries = MAX_INSNS;
+}
+
+/* Subroutine of mep_cgen_cpu_open to rebuild the tables. */
+
+static void
+mep_cgen_rebuild_tables (CGEN_CPU_TABLE *cd)
+{
+ int i;
+ CGEN_BITSET *isas = cd->isas;
+ unsigned int machs = cd->machs;
+
+ cd->int_insn_p = CGEN_INT_INSN_P;
+
+ /* Data derived from the isa spec. */
+#define UNSET (CGEN_SIZE_UNKNOWN + 1)
+ cd->default_insn_bitsize = UNSET;
+ cd->base_insn_bitsize = UNSET;
+ cd->min_insn_bitsize = 65535; /* Some ridiculously big number. */
+ cd->max_insn_bitsize = 0;
+ for (i = 0; i < MAX_ISAS; ++i)
+ if (cgen_bitset_contains (isas, i))
+ {
+ const CGEN_ISA *isa = & mep_cgen_isa_table[i];
+
+ /* Default insn sizes of all selected isas must be
+ equal or we set the result to 0, meaning "unknown". */
+ if (cd->default_insn_bitsize == UNSET)
+ cd->default_insn_bitsize = isa->default_insn_bitsize;
+ else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
+ ; /* This is ok. */
+ else
+ cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN;
+
+ /* Base insn sizes of all selected isas must be equal
+ or we set the result to 0, meaning "unknown". */
+ if (cd->base_insn_bitsize == UNSET)
+ cd->base_insn_bitsize = isa->base_insn_bitsize;
+ else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
+ ; /* This is ok. */
+ else
+ cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
+
+ /* Set min,max insn sizes. */
+ if (isa->min_insn_bitsize < cd->min_insn_bitsize)
+ cd->min_insn_bitsize = isa->min_insn_bitsize;
+ if (isa->max_insn_bitsize > cd->max_insn_bitsize)
+ cd->max_insn_bitsize = isa->max_insn_bitsize;
+ }
+
+ /* Data derived from the mach spec. */
+ for (i = 0; i < MAX_MACHS; ++i)
+ if (((1 << i) & machs) != 0)
+ {
+ const CGEN_MACH *mach = & mep_cgen_mach_table[i];
+
+ if (mach->insn_chunk_bitsize != 0)
+ {
+ if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
+ {
+ fprintf (stderr, "mep_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'\n",
+ cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
+ abort ();
+ }
+
+ cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
+ }
+ }
+
+ /* Determine which hw elements are used by MACH. */
+ build_hw_table (cd);
+
+ /* Build the ifield table. */
+ build_ifield_table (cd);
+
+ /* Determine which operands are used by MACH/ISA. */
+ build_operand_table (cd);
+
+ /* Build the instruction table. */
+ build_insn_table (cd);
+}
+
+/* Initialize a cpu table and return a descriptor.
+ It's much like opening a file, and must be the first function called.
+ The arguments are a set of (type/value) pairs, terminated with
+ CGEN_CPU_OPEN_END.
+
+ Currently supported values:
+ CGEN_CPU_OPEN_ISAS: bitmap of values in enum isa_attr
+ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr
+ CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name
+ CGEN_CPU_OPEN_ENDIAN: specify endian choice
+ CGEN_CPU_OPEN_END: terminates arguments
+
+ ??? Simultaneous multiple isas might not make sense, but it's not (yet)
+ precluded.
+
+ ??? We only support ISO C stdargs here, not K&R.
+ Laziness, plus experiment to see if anything requires K&R - eventually
+ K&R will no longer be supported - e.g. GDB is currently trying this. */
+
+CGEN_CPU_DESC
+mep_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
+{
+ CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
+ static int init_p;
+ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */
+ unsigned int machs = 0; /* 0 = "unspecified" */
+ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
+ va_list ap;
+
+ if (! init_p)
+ {
+ init_tables ();
+ init_p = 1;
+ }
+
+ memset (cd, 0, sizeof (*cd));
+
+ va_start (ap, arg_type);
+ while (arg_type != CGEN_CPU_OPEN_END)
+ {
+ switch (arg_type)
+ {
+ case CGEN_CPU_OPEN_ISAS :
+ isas = va_arg (ap, CGEN_BITSET *);
+ break;
+ case CGEN_CPU_OPEN_MACHS :
+ machs = va_arg (ap, unsigned int);
+ break;
+ case CGEN_CPU_OPEN_BFDMACH :
+ {
+ const char *name = va_arg (ap, const char *);
+ const CGEN_MACH *mach =
+ lookup_mach_via_bfd_name (mep_cgen_mach_table, name);
+
+ machs |= 1 << mach->num;
+ break;
+ }
+ case CGEN_CPU_OPEN_ENDIAN :
+ endian = va_arg (ap, enum cgen_endian);
+ break;
+ default :
+ fprintf (stderr, "mep_cgen_cpu_open: unsupported argument `%d'\n",
+ arg_type);
+ abort (); /* ??? return NULL? */
+ }
+ arg_type = va_arg (ap, enum cgen_cpu_open_arg);
+ }
+ va_end (ap);
+
+ /* Mach unspecified means "all". */
+ if (machs == 0)
+ machs = (1 << MAX_MACHS) - 1;
+ /* Base mach is always selected. */
+ machs |= 1;
+ if (endian == CGEN_ENDIAN_UNKNOWN)
+ {
+ /* ??? If target has only one, could have a default. */
+ fprintf (stderr, "mep_cgen_cpu_open: no endianness specified\n");
+ abort ();
+ }
+
+ cd->isas = cgen_bitset_copy (isas);
+ cd->machs = machs;
+ cd->endian = endian;
+ /* FIXME: for the sparc case we can determine insn-endianness statically.
+ The worry here is where both data and insn endian can be independently
+ chosen, in which case this function will need another argument.
+ Actually, will want to allow for more arguments in the future anyway. */
+ cd->insn_endian = endian;
+
+ /* Table (re)builder. */
+ cd->rebuild_tables = mep_cgen_rebuild_tables;
+ mep_cgen_rebuild_tables (cd);
+
+ /* Default to not allowing signed overflow. */
+ cd->signed_overflow_ok_p = 0;
+
+ return (CGEN_CPU_DESC) cd;
+}
+
+/* Cover fn to mep_cgen_cpu_open to handle the simple case of 1 isa, 1 mach.
+ MACH_NAME is the bfd name of the mach. */
+
+CGEN_CPU_DESC
+mep_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian)
+{
+ return mep_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
+ CGEN_CPU_OPEN_ENDIAN, endian,
+ CGEN_CPU_OPEN_END);
+}
+
+/* Close a cpu table.
+ ??? This can live in a machine independent file, but there's currently
+ no place to put this file (there's no libcgen). libopcodes is the wrong
+ place as some simulator ports use this but they don't use libopcodes. */
+
+void
+mep_cgen_cpu_close (CGEN_CPU_DESC cd)
+{
+ unsigned int i;
+ const CGEN_INSN *insns;
+
+ if (cd->macro_insn_table.init_entries)
+ {
+ insns = cd->macro_insn_table.init_entries;
+ for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
+ if (CGEN_INSN_RX ((insns)))
+ regfree (CGEN_INSN_RX (insns));
+ }
+
+ if (cd->insn_table.init_entries)
+ {
+ insns = cd->insn_table.init_entries;
+ for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
+ if (CGEN_INSN_RX (insns))
+ regfree (CGEN_INSN_RX (insns));
+ }
+
+ if (cd->macro_insn_table.init_entries)
+ free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
+
+ if (cd->insn_table.init_entries)
+ free ((CGEN_INSN *) cd->insn_table.init_entries);
+
+ if (cd->hw_table.entries)
+ free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
+
+ if (cd->operand_table.entries)
+ free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
+
+ free (cd);
+}
+
diff --git a/opcodes/mep-desc.h b/opcodes/mep-desc.h
new file mode 100644
index 000000000000..606d347f7b80
--- /dev/null
+++ b/opcodes/mep-desc.h
@@ -0,0 +1,342 @@
+/* CPU data header for mep.
+
+THIS FILE IS MACHINE GENERATED WITH CGEN.
+
+Copyright 1996-2005 Free Software Foundation, Inc.
+
+This file is part of the GNU Binutils and/or GDB, the GNU debugger.
+
+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.
+
+*/
+
+#ifndef MEP_CPU_H
+#define MEP_CPU_H
+
+#include "opcode/cgen-bitset.h"
+
+#define CGEN_ARCH mep
+
+/* Given symbol S, return mep_cgen_<S>. */
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define CGEN_SYM(s) mep##_cgen_##s
+#else
+#define CGEN_SYM(s) mep/**/_cgen_/**/s
+#endif
+
+
+/* Selected cpu families. */
+#define HAVE_CPU_MEPF
+
+#define CGEN_INSN_LSB0_P 0
+
+/* Minimum size of any insn (in bytes). */
+#define CGEN_MIN_INSN_SIZE 2
+
+/* Maximum size of any insn (in bytes). */
+#define CGEN_MAX_INSN_SIZE 4
+
+#define CGEN_INT_INSN_P 1
+
+/* Maximum number of syntax elements in an instruction. */
+#define CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS 17
+
+/* CGEN_MNEMONIC_OPERANDS is defined if mnemonics have operands.
+ e.g. In "b,a foo" the ",a" is an operand. If mnemonics have operands
+ we can't hash on everything up to the space. */
+#define CGEN_MNEMONIC_OPERANDS
+
+/* Maximum number of fields in an instruction. */
+#define CGEN_ACTUAL_MAX_IFMT_OPERANDS 11
+
+/* Enums. */
+
+/* Enum declaration for major opcodes. */
+typedef enum major {
+ MAJ_0, MAJ_1, MAJ_2, MAJ_3
+ , MAJ_4, MAJ_5, MAJ_6, MAJ_7
+ , MAJ_8, MAJ_9, MAJ_10, MAJ_11
+ , MAJ_12, MAJ_13, MAJ_14, MAJ_15
+} MAJOR;
+
+/* Enum declaration for condition opcode enum. */
+typedef enum fmax_cond {
+ FMAX_F, FMAX_U, FMAX_E, FMAX_UE
+ , FMAX_L, FMAX_UL, FMAX_LE, FMAX_ULE
+ , FMAX_FI, FMAX_UI, FMAX_EI, FMAX_UEI
+ , FMAX_LI, FMAX_ULI, FMAX_LEI, FMAX_ULEI
+} FMAX_COND;
+
+/* Attributes. */
+
+/* Enum declaration for machine type selection. */
+typedef enum mach_attr {
+ MACH_BASE, MACH_MEP, MACH_H1, MACH_MAX
+} MACH_ATTR;
+
+/* Enum declaration for instruction set selection. */
+typedef enum isa_attr {
+ ISA_MEP, ISA_EXT_CORE1, ISA_EXT_CORE2, ISA_EXT_COP2_16
+ , ISA_EXT_COP2_32, ISA_EXT_COP2_48, ISA_EXT_COP2_64, ISA_MAX
+} ISA_ATTR;
+
+/* Enum declaration for datatype to use for C intrinsics mapping. */
+typedef enum cdata_attr {
+ CDATA_LABEL, CDATA_REGNUM, CDATA_FMAX_FLOAT, CDATA_FMAX_INT
+ , CDATA_POINTER, CDATA_LONG, CDATA_ULONG, CDATA_SHORT
+ , CDATA_USHORT, CDATA_CHAR, CDATA_UCHAR, CDATA_CP_DATA_BUS_INT
+} CDATA_ATTR;
+
+/* Enum declaration for . */
+typedef enum config_attr {
+ CONFIG_NONE, CONFIG_SIMPLE, CONFIG_FMAX
+} CONFIG_ATTR;
+
+/* Number of architecture variants. */
+#define MAX_ISAS ((int) ISA_MAX)
+#define MAX_MACHS ((int) MACH_MAX)
+
+/* Ifield support. */
+
+/* Ifield attribute indices. */
+
+/* Enum declaration for cgen_ifld attrs. */
+typedef enum cgen_ifld_attr {
+ CGEN_IFLD_VIRTUAL, CGEN_IFLD_PCREL_ADDR, CGEN_IFLD_ABS_ADDR, CGEN_IFLD_RESERVED
+ , CGEN_IFLD_SIGN_OPT, CGEN_IFLD_SIGNED, CGEN_IFLD_END_BOOLS, CGEN_IFLD_START_NBOOLS = 31
+ , CGEN_IFLD_MACH, CGEN_IFLD_ISA, CGEN_IFLD_END_NBOOLS
+} CGEN_IFLD_ATTR;
+
+/* Number of non-boolean elements in cgen_ifld_attr. */
+#define CGEN_IFLD_NBOOL_ATTRS (CGEN_IFLD_END_NBOOLS - CGEN_IFLD_START_NBOOLS - 1)
+
+/* cgen_ifld attribute accessor macros. */
+#define CGEN_ATTR_CGEN_IFLD_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_IFLD_MACH-CGEN_IFLD_START_NBOOLS-1].nonbitset)
+#define CGEN_ATTR_CGEN_IFLD_ISA_VALUE(attrs) ((attrs)->nonbool[CGEN_IFLD_ISA-CGEN_IFLD_START_NBOOLS-1].bitset)
+#define CGEN_ATTR_CGEN_IFLD_VIRTUAL_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_VIRTUAL)) != 0)
+#define CGEN_ATTR_CGEN_IFLD_PCREL_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_PCREL_ADDR)) != 0)
+#define CGEN_ATTR_CGEN_IFLD_ABS_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_ABS_ADDR)) != 0)
+#define CGEN_ATTR_CGEN_IFLD_RESERVED_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_RESERVED)) != 0)
+#define CGEN_ATTR_CGEN_IFLD_SIGN_OPT_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_SIGN_OPT)) != 0)
+#define CGEN_ATTR_CGEN_IFLD_SIGNED_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_SIGNED)) != 0)
+
+/* Enum declaration for mep ifield types. */
+typedef enum ifield_type {
+ MEP_F_NIL, MEP_F_ANYOF, MEP_F_MAJOR, MEP_F_RN
+ , MEP_F_RN3, MEP_F_RM, MEP_F_RL, MEP_F_SUB2
+ , MEP_F_SUB3, MEP_F_SUB4, MEP_F_EXT, MEP_F_CRN
+ , MEP_F_CSRN_HI, MEP_F_CSRN_LO, MEP_F_CSRN, MEP_F_CRNX_HI
+ , MEP_F_CRNX_LO, MEP_F_CRNX, MEP_F_0, MEP_F_1
+ , MEP_F_2, MEP_F_3, MEP_F_4, MEP_F_5
+ , MEP_F_6, MEP_F_7, MEP_F_8, MEP_F_9
+ , MEP_F_10, MEP_F_11, MEP_F_12, MEP_F_13
+ , MEP_F_14, MEP_F_15, MEP_F_16, MEP_F_17
+ , MEP_F_18, MEP_F_19, MEP_F_20, MEP_F_21
+ , MEP_F_22, MEP_F_23, MEP_F_24, MEP_F_25
+ , MEP_F_26, MEP_F_27, MEP_F_28, MEP_F_29
+ , MEP_F_30, MEP_F_31, MEP_F_8S8A2, MEP_F_12S4A2
+ , MEP_F_17S16A2, MEP_F_24S5A2N_HI, MEP_F_24S5A2N_LO, MEP_F_24S5A2N
+ , MEP_F_24U5A2N_HI, MEP_F_24U5A2N_LO, MEP_F_24U5A2N, MEP_F_2U6
+ , MEP_F_7U9, MEP_F_7U9A2, MEP_F_7U9A4, MEP_F_16S16
+ , MEP_F_2U10, MEP_F_3U5, MEP_F_4U8, MEP_F_5U8
+ , MEP_F_5U24, MEP_F_6S8, MEP_F_8S8, MEP_F_16U16
+ , MEP_F_12U16, MEP_F_3U29, MEP_F_8S24, MEP_F_8S24A2
+ , MEP_F_8S24A4, MEP_F_8S24A8, MEP_F_24U8A4N_HI, MEP_F_24U8A4N_LO
+ , MEP_F_24U8A4N, MEP_F_24U8N_HI, MEP_F_24U8N_LO, MEP_F_24U8N
+ , MEP_F_24U4N_HI, MEP_F_24U4N_LO, MEP_F_24U4N, MEP_F_CALLNUM
+ , MEP_F_CCRN_HI, MEP_F_CCRN_LO, MEP_F_CCRN, MEP_F_FMAX_0_4
+ , MEP_F_FMAX_4_4, MEP_F_FMAX_8_4, MEP_F_FMAX_12_4, MEP_F_FMAX_16_4
+ , MEP_F_FMAX_20_4, MEP_F_FMAX_24_4, MEP_F_FMAX_28_1, MEP_F_FMAX_29_1
+ , MEP_F_FMAX_30_1, MEP_F_FMAX_31_1, MEP_F_FMAX_FRD, MEP_F_FMAX_FRN
+ , MEP_F_FMAX_FRM, MEP_F_FMAX_RM, MEP_F_MAX
+} IFIELD_TYPE;
+
+#define MAX_IFLD ((int) MEP_F_MAX)
+
+/* Hardware attribute indices. */
+
+/* Enum declaration for cgen_hw attrs. */
+typedef enum cgen_hw_attr {
+ CGEN_HW_VIRTUAL, CGEN_HW_CACHE_ADDR, CGEN_HW_PC, CGEN_HW_PROFILE
+ , CGEN_HW_IS_FLOAT, CGEN_HW_END_BOOLS, CGEN_HW_START_NBOOLS = 31, CGEN_HW_MACH
+ , CGEN_HW_ISA, CGEN_HW_END_NBOOLS
+} CGEN_HW_ATTR;
+
+/* Number of non-boolean elements in cgen_hw_attr. */
+#define CGEN_HW_NBOOL_ATTRS (CGEN_HW_END_NBOOLS - CGEN_HW_START_NBOOLS - 1)
+
+/* cgen_hw attribute accessor macros. */
+#define CGEN_ATTR_CGEN_HW_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_HW_MACH-CGEN_HW_START_NBOOLS-1].nonbitset)
+#define CGEN_ATTR_CGEN_HW_ISA_VALUE(attrs) ((attrs)->nonbool[CGEN_HW_ISA-CGEN_HW_START_NBOOLS-1].bitset)
+#define CGEN_ATTR_CGEN_HW_VIRTUAL_VALUE(attrs) (((attrs)->bool & (1 << CGEN_HW_VIRTUAL)) != 0)
+#define CGEN_ATTR_CGEN_HW_CACHE_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_HW_CACHE_ADDR)) != 0)
+#define CGEN_ATTR_CGEN_HW_PC_VALUE(attrs) (((attrs)->bool & (1 << CGEN_HW_PC)) != 0)
+#define CGEN_ATTR_CGEN_HW_PROFILE_VALUE(attrs) (((attrs)->bool & (1 << CGEN_HW_PROFILE)) != 0)
+#define CGEN_ATTR_CGEN_HW_IS_FLOAT_VALUE(attrs) (((attrs)->bool & (1 << CGEN_HW_IS_FLOAT)) != 0)
+
+/* Enum declaration for mep hardware types. */
+typedef enum cgen_hw_type {
+ HW_H_MEMORY, HW_H_SINT, HW_H_UINT, HW_H_ADDR
+ , HW_H_IADDR, HW_H_PC, HW_H_GPR, HW_H_CSR
+ , HW_H_CR64, HW_H_CR, HW_H_CCR, HW_H_CR_FMAX
+ , HW_H_CCR_FMAX, HW_H_FMAX_COMPARE_I_P, HW_MAX
+} CGEN_HW_TYPE;
+
+#define MAX_HW ((int) HW_MAX)
+
+/* Operand attribute indices. */
+
+/* Enum declaration for cgen_operand attrs. */
+typedef enum cgen_operand_attr {
+ CGEN_OPERAND_VIRTUAL, CGEN_OPERAND_PCREL_ADDR, CGEN_OPERAND_ABS_ADDR, CGEN_OPERAND_SIGN_OPT
+ , CGEN_OPERAND_SIGNED, CGEN_OPERAND_NEGATIVE, CGEN_OPERAND_RELAX, CGEN_OPERAND_SEM_ONLY
+ , CGEN_OPERAND_RELOC_IMPLIES_OVERFLOW, CGEN_OPERAND_END_BOOLS, CGEN_OPERAND_START_NBOOLS = 31, CGEN_OPERAND_MACH
+ , CGEN_OPERAND_ISA, CGEN_OPERAND_CDATA, CGEN_OPERAND_ALIGN, CGEN_OPERAND_END_NBOOLS
+} CGEN_OPERAND_ATTR;
+
+/* Number of non-boolean elements in cgen_operand_attr. */
+#define CGEN_OPERAND_NBOOL_ATTRS (CGEN_OPERAND_END_NBOOLS - CGEN_OPERAND_START_NBOOLS - 1)
+
+/* cgen_operand attribute accessor macros. */
+#define CGEN_ATTR_CGEN_OPERAND_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_OPERAND_MACH-CGEN_OPERAND_START_NBOOLS-1].nonbitset)
+#define CGEN_ATTR_CGEN_OPERAND_ISA_VALUE(attrs) ((attrs)->nonbool[CGEN_OPERAND_ISA-CGEN_OPERAND_START_NBOOLS-1].bitset)
+#define CGEN_ATTR_CGEN_OPERAND_CDATA_VALUE(attrs) ((attrs)->nonbool[CGEN_OPERAND_CDATA-CGEN_OPERAND_START_NBOOLS-1].nonbitset)
+#define CGEN_ATTR_CGEN_OPERAND_ALIGN_VALUE(attrs) ((attrs)->nonbool[CGEN_OPERAND_ALIGN-CGEN_OPERAND_START_NBOOLS-1].nonbitset)
+#define CGEN_ATTR_CGEN_OPERAND_VIRTUAL_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_VIRTUAL)) != 0)
+#define CGEN_ATTR_CGEN_OPERAND_PCREL_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_PCREL_ADDR)) != 0)
+#define CGEN_ATTR_CGEN_OPERAND_ABS_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_ABS_ADDR)) != 0)
+#define CGEN_ATTR_CGEN_OPERAND_SIGN_OPT_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_SIGN_OPT)) != 0)
+#define CGEN_ATTR_CGEN_OPERAND_SIGNED_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_SIGNED)) != 0)
+#define CGEN_ATTR_CGEN_OPERAND_NEGATIVE_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_NEGATIVE)) != 0)
+#define CGEN_ATTR_CGEN_OPERAND_RELAX_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_RELAX)) != 0)
+#define CGEN_ATTR_CGEN_OPERAND_SEM_ONLY_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_SEM_ONLY)) != 0)
+#define CGEN_ATTR_CGEN_OPERAND_RELOC_IMPLIES_OVERFLOW_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_RELOC_IMPLIES_OVERFLOW)) != 0)
+
+/* Enum declaration for mep operand types. */
+typedef enum cgen_operand_type {
+ MEP_OPERAND_PC, MEP_OPERAND_R0, MEP_OPERAND_RN, MEP_OPERAND_RM
+ , MEP_OPERAND_RL, MEP_OPERAND_RN3, MEP_OPERAND_RMA, MEP_OPERAND_RNC
+ , MEP_OPERAND_RNUC, MEP_OPERAND_RNS, MEP_OPERAND_RNUS, MEP_OPERAND_RNL
+ , MEP_OPERAND_RNUL, MEP_OPERAND_RN3C, MEP_OPERAND_RN3UC, MEP_OPERAND_RN3S
+ , MEP_OPERAND_RN3US, MEP_OPERAND_RN3L, MEP_OPERAND_RN3UL, MEP_OPERAND_LP
+ , MEP_OPERAND_SAR, MEP_OPERAND_HI, MEP_OPERAND_LO, MEP_OPERAND_MB0
+ , MEP_OPERAND_ME0, MEP_OPERAND_MB1, MEP_OPERAND_ME1, MEP_OPERAND_PSW
+ , MEP_OPERAND_EPC, MEP_OPERAND_EXC, MEP_OPERAND_NPC, MEP_OPERAND_DBG
+ , MEP_OPERAND_DEPC, MEP_OPERAND_OPT, MEP_OPERAND_R1, MEP_OPERAND_TP
+ , MEP_OPERAND_SP, MEP_OPERAND_TPR, MEP_OPERAND_SPR, MEP_OPERAND_CSRN
+ , MEP_OPERAND_CSRN_IDX, MEP_OPERAND_CRN64, MEP_OPERAND_CRN, MEP_OPERAND_CRNX64
+ , MEP_OPERAND_CRNX, MEP_OPERAND_CCRN, MEP_OPERAND_CCCC, MEP_OPERAND_PCREL8A2
+ , MEP_OPERAND_PCREL12A2, MEP_OPERAND_PCREL17A2, MEP_OPERAND_PCREL24A2, MEP_OPERAND_PCABS24A2
+ , MEP_OPERAND_SDISP16, MEP_OPERAND_SIMM16, MEP_OPERAND_UIMM16, MEP_OPERAND_CODE16
+ , MEP_OPERAND_UDISP2, MEP_OPERAND_UIMM2, MEP_OPERAND_SIMM6, MEP_OPERAND_SIMM8
+ , MEP_OPERAND_ADDR24A4, MEP_OPERAND_CODE24, MEP_OPERAND_CALLNUM, MEP_OPERAND_UIMM3
+ , MEP_OPERAND_UIMM4, MEP_OPERAND_UIMM5, MEP_OPERAND_UDISP7, MEP_OPERAND_UDISP7A2
+ , MEP_OPERAND_UDISP7A4, MEP_OPERAND_UIMM7A4, MEP_OPERAND_UIMM24, MEP_OPERAND_CIMM4
+ , MEP_OPERAND_CIMM5, MEP_OPERAND_CDISP8, MEP_OPERAND_CDISP8A2, MEP_OPERAND_CDISP8A4
+ , MEP_OPERAND_CDISP8A8, MEP_OPERAND_ZERO, MEP_OPERAND_CP_FLAG, MEP_OPERAND_FMAX_FRD
+ , MEP_OPERAND_FMAX_FRN, MEP_OPERAND_FMAX_FRM, MEP_OPERAND_FMAX_FRD_INT, MEP_OPERAND_FMAX_FRN_INT
+ , MEP_OPERAND_FMAX_CCRN, MEP_OPERAND_FMAX_CIRR, MEP_OPERAND_FMAX_CBCR, MEP_OPERAND_FMAX_CERR
+ , MEP_OPERAND_FMAX_RM, MEP_OPERAND_FMAX_COMPARE_I_P, MEP_OPERAND_MAX
+} CGEN_OPERAND_TYPE;
+
+/* Number of operands types. */
+#define MAX_OPERANDS 90
+
+/* Maximum number of operands referenced by any insn. */
+#define MAX_OPERAND_INSTANCES 8
+
+/* Insn attribute indices. */
+
+/* Enum declaration for cgen_insn attrs. */
+typedef enum cgen_insn_attr {
+ CGEN_INSN_ALIAS, CGEN_INSN_VIRTUAL, CGEN_INSN_UNCOND_CTI, CGEN_INSN_COND_CTI
+ , CGEN_INSN_SKIP_CTI, CGEN_INSN_DELAY_SLOT, CGEN_INSN_RELAXABLE, CGEN_INSN_RELAXED
+ , CGEN_INSN_NO_DIS, CGEN_INSN_PBB, CGEN_INSN_OPTIONAL_BIT_INSN, CGEN_INSN_OPTIONAL_MUL_INSN
+ , CGEN_INSN_OPTIONAL_DIV_INSN, CGEN_INSN_OPTIONAL_DEBUG_INSN, CGEN_INSN_OPTIONAL_LDZ_INSN, CGEN_INSN_OPTIONAL_ABS_INSN
+ , CGEN_INSN_OPTIONAL_AVE_INSN, CGEN_INSN_OPTIONAL_MINMAX_INSN, CGEN_INSN_OPTIONAL_CLIP_INSN, CGEN_INSN_OPTIONAL_SAT_INSN
+ , CGEN_INSN_OPTIONAL_UCI_INSN, CGEN_INSN_OPTIONAL_DSP_INSN, CGEN_INSN_OPTIONAL_CP_INSN, CGEN_INSN_OPTIONAL_CP64_INSN
+ , CGEN_INSN_OPTIONAL_VLIW64, CGEN_INSN_MAY_TRAP, CGEN_INSN_VLIW_ALONE, CGEN_INSN_VLIW_NO_CORE_NOP
+ , CGEN_INSN_VLIW_NO_COP_NOP, CGEN_INSN_VLIW64_NO_MATCHING_NOP, CGEN_INSN_VLIW32_NO_MATCHING_NOP, CGEN_INSN_VOLATILE
+ , CGEN_INSN_END_BOOLS, CGEN_INSN_START_NBOOLS = 31, CGEN_INSN_MACH, CGEN_INSN_ISA
+ , CGEN_INSN_LATENCY, CGEN_INSN_CONFIG, CGEN_INSN_END_NBOOLS
+} CGEN_INSN_ATTR;
+
+/* Number of non-boolean elements in cgen_insn_attr. */
+#define CGEN_INSN_NBOOL_ATTRS (CGEN_INSN_END_NBOOLS - CGEN_INSN_START_NBOOLS - 1)
+
+/* cgen_insn attribute accessor macros. */
+#define CGEN_ATTR_CGEN_INSN_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_INSN_MACH-CGEN_INSN_START_NBOOLS-1].nonbitset)
+#define CGEN_ATTR_CGEN_INSN_ISA_VALUE(attrs) ((attrs)->nonbool[CGEN_INSN_ISA-CGEN_INSN_START_NBOOLS-1].bitset)
+#define CGEN_ATTR_CGEN_INSN_LATENCY_VALUE(attrs) ((attrs)->nonbool[CGEN_INSN_LATENCY-CGEN_INSN_START_NBOOLS-1].nonbitset)
+#define CGEN_ATTR_CGEN_INSN_CONFIG_VALUE(attrs) ((attrs)->nonbool[CGEN_INSN_CONFIG-CGEN_INSN_START_NBOOLS-1].nonbitset)
+#define CGEN_ATTR_CGEN_INSN_ALIAS_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_ALIAS)) != 0)
+#define CGEN_ATTR_CGEN_INSN_VIRTUAL_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_VIRTUAL)) != 0)
+#define CGEN_ATTR_CGEN_INSN_UNCOND_CTI_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_UNCOND_CTI)) != 0)
+#define CGEN_ATTR_CGEN_INSN_COND_CTI_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_COND_CTI)) != 0)
+#define CGEN_ATTR_CGEN_INSN_SKIP_CTI_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_SKIP_CTI)) != 0)
+#define CGEN_ATTR_CGEN_INSN_DELAY_SLOT_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_DELAY_SLOT)) != 0)
+#define CGEN_ATTR_CGEN_INSN_RELAXABLE_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_RELAXABLE)) != 0)
+#define CGEN_ATTR_CGEN_INSN_RELAXED_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_RELAXED)) != 0)
+#define CGEN_ATTR_CGEN_INSN_NO_DIS_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_NO_DIS)) != 0)
+#define CGEN_ATTR_CGEN_INSN_PBB_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_PBB)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_BIT_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_BIT_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_MUL_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_MUL_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_DIV_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_DIV_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_DEBUG_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_DEBUG_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_LDZ_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_LDZ_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_ABS_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_ABS_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_AVE_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_AVE_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_MINMAX_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_MINMAX_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_CLIP_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_CLIP_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_SAT_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_SAT_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_UCI_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_UCI_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_DSP_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_DSP_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_CP_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_CP_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_CP64_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_CP64_INSN)) != 0)
+#define CGEN_ATTR_CGEN_INSN_OPTIONAL_VLIW64_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_OPTIONAL_VLIW64)) != 0)
+#define CGEN_ATTR_CGEN_INSN_MAY_TRAP_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_MAY_TRAP)) != 0)
+#define CGEN_ATTR_CGEN_INSN_VLIW_ALONE_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_VLIW_ALONE)) != 0)
+#define CGEN_ATTR_CGEN_INSN_VLIW_NO_CORE_NOP_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_VLIW_NO_CORE_NOP)) != 0)
+#define CGEN_ATTR_CGEN_INSN_VLIW_NO_COP_NOP_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_VLIW_NO_COP_NOP)) != 0)
+#define CGEN_ATTR_CGEN_INSN_VLIW64_NO_MATCHING_NOP_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_VLIW64_NO_MATCHING_NOP)) != 0)
+#define CGEN_ATTR_CGEN_INSN_VLIW32_NO_MATCHING_NOP_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_VLIW32_NO_MATCHING_NOP)) != 0)
+#define CGEN_ATTR_CGEN_INSN_VOLATILE_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_VOLATILE)) != 0)
+
+/* cgen.h uses things we just defined. */
+#include "opcode/cgen.h"
+
+extern const struct cgen_ifld mep_cgen_ifld_table[];
+
+/* Attributes. */
+extern const CGEN_ATTR_TABLE mep_cgen_hardware_attr_table[];
+extern const CGEN_ATTR_TABLE mep_cgen_ifield_attr_table[];
+extern const CGEN_ATTR_TABLE mep_cgen_operand_attr_table[];
+extern const CGEN_ATTR_TABLE mep_cgen_insn_attr_table[];
+
+/* Hardware decls. */
+
+extern CGEN_KEYWORD mep_cgen_opval_h_gpr;
+extern CGEN_KEYWORD mep_cgen_opval_h_csr;
+extern CGEN_KEYWORD mep_cgen_opval_h_cr64;
+extern CGEN_KEYWORD mep_cgen_opval_h_cr;
+extern CGEN_KEYWORD mep_cgen_opval_h_ccr;
+extern CGEN_KEYWORD mep_cgen_opval_h_cr_fmax;
+extern CGEN_KEYWORD mep_cgen_opval_h_ccr_fmax;
+
+extern const CGEN_HW_ENTRY mep_cgen_hw_table[];
+
+
+
+#endif /* MEP_CPU_H */
diff --git a/opcodes/mep-dis.c b/opcodes/mep-dis.c
new file mode 100644
index 000000000000..769a80afcd4f
--- /dev/null
+++ b/opcodes/mep-dis.c
@@ -0,0 +1,1205 @@
+/* Disassembler interface for targets using CGEN. -*- C -*-
+ CGEN: Cpu tools GENerator
+
+ THIS FILE IS MACHINE GENERATED WITH CGEN.
+ - the resultant file is machine generated, cgen-dis.in isn't
+
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils and GDB, the GNU debugger.
+
+ 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. */
+
+/* ??? Eventually more and more of this stuff can go to cpu-independent files.
+ Keep that in mind. */
+
+#include "sysdep.h"
+#include <stdio.h>
+#include "ansidecl.h"
+#include "dis-asm.h"
+#include "bfd.h"
+#include "symcat.h"
+#include "libiberty.h"
+#include "mep-desc.h"
+#include "mep-opc.h"
+#include "opintl.h"
+
+/* Default text to print if an instruction isn't recognized. */
+#define UNKNOWN_INSN_MSG _("*unknown*")
+
+static void print_normal
+ (CGEN_CPU_DESC, void *, long, unsigned int, bfd_vma, int);
+static void print_address
+ (CGEN_CPU_DESC, void *, bfd_vma, unsigned int, bfd_vma, int) ATTRIBUTE_UNUSED;
+static void print_keyword
+ (CGEN_CPU_DESC, void *, CGEN_KEYWORD *, long, unsigned int) ATTRIBUTE_UNUSED;
+static void print_insn_normal
+ (CGEN_CPU_DESC, void *, const CGEN_INSN *, CGEN_FIELDS *, bfd_vma, int);
+static int print_insn
+ (CGEN_CPU_DESC, bfd_vma, disassemble_info *, bfd_byte *, unsigned);
+static int default_print_insn
+ (CGEN_CPU_DESC, bfd_vma, disassemble_info *) ATTRIBUTE_UNUSED;
+static int read_insn
+ (CGEN_CPU_DESC, bfd_vma, disassemble_info *, bfd_byte *, int, CGEN_EXTRACT_INFO *,
+ unsigned long *);
+
+/* -- disassembler routines inserted here. */
+
+/* -- dis.c */
+
+#include "elf/mep.h"
+#include "elf-bfd.h"
+
+#define CGEN_VALIDATE_INSN_SUPPORTED
+
+static void print_tpreg (CGEN_CPU_DESC, PTR, CGEN_KEYWORD *, long, unsigned int);
+static void print_spreg (CGEN_CPU_DESC, PTR, CGEN_KEYWORD *, long, unsigned int);
+
+static void
+print_tpreg (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, PTR dis_info,
+ CGEN_KEYWORD *table ATTRIBUTE_UNUSED, long val ATTRIBUTE_UNUSED,
+ unsigned int flags ATTRIBUTE_UNUSED)
+{
+ disassemble_info *info = (disassemble_info *) dis_info;
+
+ (*info->fprintf_func) (info->stream, "$tp");
+}
+
+static void
+print_spreg (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, PTR dis_info,
+ CGEN_KEYWORD *table ATTRIBUTE_UNUSED, long val ATTRIBUTE_UNUSED,
+ unsigned int flags ATTRIBUTE_UNUSED)
+{
+ disassemble_info *info = (disassemble_info *) dis_info;
+
+ (*info->fprintf_func) (info->stream, "$sp");
+}
+
+/* begin-cop-ip-print-handlers */
+static void
+print_fmax_cr (CGEN_CPU_DESC cd,
+ void *dis_info,
+ CGEN_KEYWORD *keyword_table ATTRIBUTE_UNUSED,
+ long value,
+ unsigned int attrs)
+{
+ print_keyword (cd, dis_info, & mep_cgen_opval_h_cr_fmax, value, attrs);
+}
+static void
+print_fmax_ccr (CGEN_CPU_DESC cd,
+ void *dis_info,
+ CGEN_KEYWORD *keyword_table ATTRIBUTE_UNUSED,
+ long value,
+ unsigned int attrs)
+{
+ print_keyword (cd, dis_info, & mep_cgen_opval_h_ccr_fmax, value, attrs);
+}
+/* end-cop-ip-print-handlers */
+
+/************************************************************\
+*********************** Experimental *************************
+\************************************************************/
+
+#undef CGEN_PRINT_INSN
+#define CGEN_PRINT_INSN mep_print_insn
+
+static int
+mep_print_vliw_insns (CGEN_CPU_DESC cd, bfd_vma pc, disassemble_info *info,
+ bfd_byte *buf, int corelength, int copro1length,
+ int copro2length ATTRIBUTE_UNUSED)
+{
+ int i;
+ int status = 0;
+ /* char insnbuf[CGEN_MAX_INSN_SIZE]; */
+ bfd_byte insnbuf[64];
+
+ /* If corelength > 0 then there is a core insn present. It
+ will be at the beginning of the buffer. After printing
+ the core insn, we need to print the + on the next line. */
+ if (corelength > 0)
+ {
+ int my_status = 0;
+
+ for (i = 0; i < corelength; i++ )
+ insnbuf[i] = buf[i];
+ cd->isas = & MEP_CORE_ISA;
+
+ my_status = print_insn (cd, pc, info, insnbuf, corelength);
+ if (my_status != corelength)
+ {
+ (*info->fprintf_func) (info->stream, UNKNOWN_INSN_MSG);
+ my_status = corelength;
+ }
+ status += my_status;
+
+ /* Print the + to indicate that the following copro insn is */
+ /* part of a vliw group. */
+ if (copro1length > 0)
+ (*info->fprintf_func) (info->stream, " + ");
+ }
+
+ /* Now all that is left to be processed is the coprocessor insns
+ In vliw mode, there will always be one. Its positioning will
+ be from byte corelength to byte corelength+copro1length -1.
+ No need to check for existence. Also, the first vliw insn,
+ will, as spec'd, always be at least as long as the core insn
+ so we don't need to flush the buffer. */
+ if (copro1length > 0)
+ {
+ int my_status = 0;
+
+ for (i = corelength; i < corelength + copro1length; i++ )
+ insnbuf[i - corelength] = buf[i];
+
+ switch (copro1length)
+ {
+ case 0:
+ break;
+ case 2:
+ cd->isas = & MEP_COP16_ISA;
+ break;
+ case 4:
+ cd->isas = & MEP_COP32_ISA;
+ break;
+ case 6:
+ cd->isas = & MEP_COP48_ISA;
+ break;
+ case 8:
+ cd->isas = & MEP_COP64_ISA;
+ break;
+ default:
+ /* Shouldn't be anything but 16,32,48,64. */
+ break;
+ }
+
+ my_status = print_insn (cd, pc, info, insnbuf, copro1length);
+
+ if (my_status != copro1length)
+ {
+ (*info->fprintf_func) (info->stream, UNKNOWN_INSN_MSG);
+ my_status = copro1length;
+ }
+ status += my_status;
+ }
+
+#if 0
+ /* Now we need to process the second copro insn if it exists. We
+ have no guarantee that the second copro insn will be longer
+ than the first, so we have to flush the buffer if we are have
+ a second copro insn to process. If present, this insn will
+ be in the position from byte corelength+copro1length to byte
+ corelength+copro1length+copro2length-1 (which better equal 8
+ or else we're in big trouble. */
+ if (copro2length > 0)
+ {
+ int my_status = 0;
+
+ for (i = 0; i < 64 ; i++)
+ insnbuf[i] = 0;
+
+ for (i = corelength + copro1length; i < 64; i++)
+ insnbuf[i - (corelength + copro1length)] = buf[i];
+
+ switch (copro2length)
+ {
+ case 2:
+ cd->isas = 1 << ISA_EXT_COP1_16;
+ break;
+ case 4:
+ cd->isas = 1 << ISA_EXT_COP1_32;
+ break;
+ case 6:
+ cd->isas = 1 << ISA_EXT_COP1_48;
+ break;
+ case 8:
+ cd->isas = 1 << ISA_EXT_COP1_64;
+ break;
+ default:
+ /* Shouldn't be anything but 16,32,48,64. */
+ break;
+ }
+
+ my_status = print_insn (cd, pc, info, insnbuf, copro2length);
+
+ if (my_status != copro2length)
+ {
+ (*info->fprintf_func) (info->stream, UNKNOWN_INSN_MSG);
+ my_status = copro2length;
+ }
+
+ status += my_status;
+ }
+#endif
+
+ /* Status should now be the number of bytes that were printed
+ which should be 4 for VLIW32 mode and 64 for VLIW64 mode. */
+
+ if ((!MEP_VLIW64 && (status != 4)) || (MEP_VLIW64 && (status != 8)))
+ return -1;
+ else
+ return status;
+}
+
+/* The two functions mep_examine_vliw[32,64]_insns are used find out
+ which vliw combinaion (16 bit core with 48 bit copro, 32 bit core
+ with 32 bit copro, etc.) is present. Later on, when internally
+ parallel coprocessors are handled, only these functions should
+ need to be changed.
+
+ At this time only the following combinations are supported:
+
+ VLIW32 Mode:
+ 16 bit core insn (core) and 16 bit coprocessor insn (cop1)
+ 32 bit core insn (core)
+ 32 bit coprocessor insn (cop1)
+ Note: As of this time, I do not believe we have enough information
+ to distinguish a 32 bit core insn from a 32 bit cop insn. Also,
+ no 16 bit coprocessor insns have been specified.
+
+ VLIW64 Mode:
+ 16 bit core insn (core) and 48 bit coprocessor insn (cop1)
+ 32 bit core insn (core) and 32 bit coprocessor insn (cop1)
+ 64 bit coprocessor insn (cop1)
+
+ The framework for an internally parallel coprocessor is also
+ present (2nd coprocessor insn is cop2), but at this time it
+ is not used. This only appears to be valid in VLIW64 mode. */
+
+static int
+mep_examine_vliw32_insns (CGEN_CPU_DESC cd, bfd_vma pc, disassemble_info *info)
+{
+ int status;
+ int buflength;
+ int corebuflength;
+ int cop1buflength;
+ int cop2buflength;
+ bfd_byte buf[CGEN_MAX_INSN_SIZE];
+ char indicator16[1];
+ char indicatorcop32[2];
+
+ /* At this time we're not supporting internally parallel coprocessors,
+ so cop2buflength will always be 0. */
+ cop2buflength = 0;
+
+ /* Read in 32 bits. */
+ buflength = 4; /* VLIW insn spans 4 bytes. */
+ status = (*info->read_memory_func) (pc, buf, buflength, info);
+
+ if (status != 0)
+ {
+ (*info->memory_error_func) (status, pc, info);
+ return -1;
+ }
+
+ /* Put the big endian representation of the bytes to be examined
+ in the temporary buffers for examination. */
+
+ if (info->endian == BFD_ENDIAN_BIG)
+ {
+ indicator16[0] = buf[0];
+ indicatorcop32[0] = buf[0];
+ indicatorcop32[1] = buf[1];
+ }
+ else
+ {
+ indicator16[0] = buf[1];
+ indicatorcop32[0] = buf[1];
+ indicatorcop32[1] = buf[0];
+ }
+
+ /* If the two high order bits are 00, 01 or 10, we have a 16 bit
+ core insn and a 48 bit copro insn. */
+
+ if ((indicator16[0] & 0x80) && (indicator16[0] & 0x40))
+ {
+ if ((indicatorcop32[0] & 0xf0) == 0xf0 && (indicatorcop32[1] & 0x07) == 0x07)
+ {
+ /* We have a 32 bit copro insn. */
+ corebuflength = 0;
+ /* All 4 4ytes are one copro insn. */
+ cop1buflength = 4;
+ }
+ else
+ {
+ /* We have a 32 bit core. */
+ corebuflength = 4;
+ cop1buflength = 0;
+ }
+ }
+ else
+ {
+ /* We have a 16 bit core insn and a 16 bit copro insn. */
+ corebuflength = 2;
+ cop1buflength = 2;
+ }
+
+ /* Now we have the distrubution set. Print them out. */
+ status = mep_print_vliw_insns (cd, pc, info, buf, corebuflength,
+ cop1buflength, cop2buflength);
+
+ return status;
+}
+
+static int
+mep_examine_vliw64_insns (CGEN_CPU_DESC cd, bfd_vma pc, disassemble_info *info)
+{
+ int status;
+ int buflength;
+ int corebuflength;
+ int cop1buflength;
+ int cop2buflength;
+ bfd_byte buf[CGEN_MAX_INSN_SIZE];
+ char indicator16[1];
+ char indicator64[4];
+
+ /* At this time we're not supporting internally parallel
+ coprocessors, so cop2buflength will always be 0. */
+ cop2buflength = 0;
+
+ /* Read in 64 bits. */
+ buflength = 8; /* VLIW insn spans 8 bytes. */
+ status = (*info->read_memory_func) (pc, buf, buflength, info);
+
+ if (status != 0)
+ {
+ (*info->memory_error_func) (status, pc, info);
+ return -1;
+ }
+
+ /* We have all 64 bits in the buffer now. We have to figure out
+ what combination of instruction sizes are present. The two
+ high order bits will indicate whether or not we have a 16 bit
+ core insn or not. If not, then we have to look at the 7,8th
+ bytes to tell whether we have 64 bit copro insn or a 32 bit
+ core insn with a 32 bit copro insn. Endianness will make a
+ difference here. */
+
+ /* Put the big endian representation of the bytes to be examined
+ in the temporary buffers for examination. */
+
+ /* indicator16[0] = buf[0]; */
+ if (info->endian == BFD_ENDIAN_BIG)
+ {
+ indicator16[0] = buf[0];
+ indicator64[0] = buf[0];
+ indicator64[1] = buf[1];
+ indicator64[2] = buf[2];
+ indicator64[3] = buf[3];
+ }
+ else
+ {
+ indicator16[0] = buf[1];
+ indicator64[0] = buf[1];
+ indicator64[1] = buf[0];
+ indicator64[2] = buf[3];
+ indicator64[3] = buf[2];
+ }
+
+ /* If the two high order bits are 00, 01 or 10, we have a 16 bit
+ core insn and a 48 bit copro insn. */
+
+ if ((indicator16[0] & 0x80) && (indicator16[0] & 0x40))
+ {
+ if ((indicator64[0] & 0xf0) == 0xf0 && (indicator64[1] & 0x07) == 0x07
+ && ((indicator64[2] & 0xfe) != 0xf0 || (indicator64[3] & 0xf4) != 0))
+ {
+ /* We have a 64 bit copro insn. */
+ corebuflength = 0;
+ /* All 8 bytes are one copro insn. */
+ cop1buflength = 8;
+ }
+ else
+ {
+ /* We have a 32 bit core insn and a 32 bit copro insn. */
+ corebuflength = 4;
+ cop1buflength = 4;
+ }
+ }
+ else
+ {
+ /* We have a 16 bit core insn and a 48 bit copro insn. */
+ corebuflength = 2;
+ cop1buflength = 6;
+ }
+
+ /* Now we have the distrubution set. Print them out. */
+ status = mep_print_vliw_insns (cd, pc, info, buf, corebuflength,
+ cop1buflength, cop2buflength);
+
+ return status;
+}
+
+static int
+mep_print_insn (CGEN_CPU_DESC cd, bfd_vma pc, disassemble_info *info)
+{
+ int status;
+
+ /* Extract and adapt to configuration number, if available. */
+ if (info->section && info->section->owner)
+ {
+ bfd *abfd = info->section->owner;
+ mep_config_index = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_INDEX_MASK;
+ /* This instantly redefines MEP_CONFIG, MEP_OMASK, .... MEP_VLIW64 */
+ }
+
+ /* Picking the right ISA bitmask for the current context is tricky. */
+ if (info->section)
+ {
+ if (info->section->flags & SEC_MEP_VLIW)
+ {
+ /* Are we in 32 or 64 bit vliw mode? */
+ if (MEP_VLIW64)
+ status = mep_examine_vliw64_insns (cd, pc, info);
+ else
+ status = mep_examine_vliw32_insns (cd, pc, info);
+ /* Both the above branches set their own isa bitmasks. */
+ }
+ else
+ {
+ cd->isas = & MEP_CORE_ISA;
+ status = default_print_insn (cd, pc, info);
+ }
+ }
+ else /* sid or gdb */
+ {
+ status = default_print_insn (cd, pc, info);
+ }
+
+ return status;
+}
+
+
+/* -- opc.c */
+
+void mep_cgen_print_operand
+ (CGEN_CPU_DESC, int, PTR, CGEN_FIELDS *, void const *, bfd_vma, int);
+
+/* Main entry point for printing operands.
+ XINFO is a `void *' and not a `disassemble_info *' to not put a requirement
+ of dis-asm.h on cgen.h.
+
+ This function is basically just a big switch statement. Earlier versions
+ used tables to look up the function to use, but
+ - if the table contains both assembler and disassembler functions then
+ the disassembler contains much of the assembler and vice-versa,
+ - there's a lot of inlining possibilities as things grow,
+ - using a switch statement avoids the function call overhead.
+
+ This function could be moved into `print_insn_normal', but keeping it
+ separate makes clear the interface between `print_insn_normal' and each of
+ the handlers. */
+
+void
+mep_cgen_print_operand (CGEN_CPU_DESC cd,
+ int opindex,
+ void * xinfo,
+ CGEN_FIELDS *fields,
+ void const *attrs ATTRIBUTE_UNUSED,
+ bfd_vma pc,
+ int length)
+{
+ disassemble_info *info = (disassemble_info *) xinfo;
+
+ switch (opindex)
+ {
+ case MEP_OPERAND_ADDR24A4 :
+ print_normal (cd, info, fields->f_24u8a4n, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
+ break;
+ case MEP_OPERAND_CALLNUM :
+ print_normal (cd, info, fields->f_callnum, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
+ break;
+ case MEP_OPERAND_CCCC :
+ print_normal (cd, info, fields->f_rm, 0, pc, length);
+ break;
+ case MEP_OPERAND_CCRN :
+ print_keyword (cd, info, & mep_cgen_opval_h_ccr, fields->f_ccrn, 0|(1<<CGEN_OPERAND_VIRTUAL));
+ break;
+ case MEP_OPERAND_CDISP8 :
+ print_normal (cd, info, fields->f_8s24, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
+ break;
+ case MEP_OPERAND_CDISP8A2 :
+ print_normal (cd, info, fields->f_8s24a2, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
+ break;
+ case MEP_OPERAND_CDISP8A4 :
+ print_normal (cd, info, fields->f_8s24a4, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
+ break;
+ case MEP_OPERAND_CDISP8A8 :
+ print_normal (cd, info, fields->f_8s24a8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
+ break;
+ case MEP_OPERAND_CIMM4 :
+ print_normal (cd, info, fields->f_rn, 0, pc, length);
+ break;
+ case MEP_OPERAND_CIMM5 :
+ print_normal (cd, info, fields->f_5u24, 0, pc, length);
+ break;
+ case MEP_OPERAND_CODE16 :
+ print_normal (cd, info, fields->f_16u16, 0, pc, length);
+ break;
+ case MEP_OPERAND_CODE24 :
+ print_normal (cd, info, fields->f_24u4n, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
+ break;
+ case MEP_OPERAND_CP_FLAG :
+ print_keyword (cd, info, & mep_cgen_opval_h_ccr, 0, 0);
+ break;
+ case MEP_OPERAND_CRN :
+ print_keyword (cd, info, & mep_cgen_opval_h_cr, fields->f_crn, 0);
+ break;
+ case MEP_OPERAND_CRN64 :
+ print_keyword (cd, info, & mep_cgen_opval_h_cr64, fields->f_crn, 0);
+ break;
+ case MEP_OPERAND_CRNX :
+ print_keyword (cd, info, & mep_cgen_opval_h_cr, fields->f_crnx, 0|(1<<CGEN_OPERAND_VIRTUAL));
+ break;
+ case MEP_OPERAND_CRNX64 :
+ print_keyword (cd, info, & mep_cgen_opval_h_cr64, fields->f_crnx, 0|(1<<CGEN_OPERAND_VIRTUAL));
+ break;
+ case MEP_OPERAND_CSRN :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, fields->f_csrn, 0|(1<<CGEN_OPERAND_VIRTUAL));
+ break;
+ case MEP_OPERAND_CSRN_IDX :
+ print_normal (cd, info, fields->f_csrn, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
+ break;
+ case MEP_OPERAND_DBG :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_DEPC :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_EPC :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_EXC :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_FMAX_CCRN :
+ print_fmax_ccr (cd, info, & mep_cgen_opval_h_ccr, fields->f_fmax_4_4, 0);
+ break;
+ case MEP_OPERAND_FMAX_FRD :
+ print_fmax_cr (cd, info, & mep_cgen_opval_h_cr, fields->f_fmax_frd, 0|(1<<CGEN_OPERAND_VIRTUAL));
+ break;
+ case MEP_OPERAND_FMAX_FRD_INT :
+ print_fmax_cr (cd, info, & mep_cgen_opval_h_cr, fields->f_fmax_frd, 0|(1<<CGEN_OPERAND_VIRTUAL));
+ break;
+ case MEP_OPERAND_FMAX_FRM :
+ print_fmax_cr (cd, info, & mep_cgen_opval_h_cr, fields->f_fmax_frm, 0|(1<<CGEN_OPERAND_VIRTUAL));
+ break;
+ case MEP_OPERAND_FMAX_FRN :
+ print_fmax_cr (cd, info, & mep_cgen_opval_h_cr, fields->f_fmax_frn, 0|(1<<CGEN_OPERAND_VIRTUAL));
+ break;
+ case MEP_OPERAND_FMAX_FRN_INT :
+ print_fmax_cr (cd, info, & mep_cgen_opval_h_cr, fields->f_fmax_frn, 0|(1<<CGEN_OPERAND_VIRTUAL));
+ break;
+ case MEP_OPERAND_FMAX_RM :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_fmax_rm, 0);
+ break;
+ case MEP_OPERAND_HI :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_LO :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_LP :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_MB0 :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_MB1 :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_ME0 :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_ME1 :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_NPC :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_OPT :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_PCABS24A2 :
+ print_address (cd, info, fields->f_24u5a2n, 0|(1<<CGEN_OPERAND_ABS_ADDR)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
+ break;
+ case MEP_OPERAND_PCREL12A2 :
+ print_address (cd, info, fields->f_12s4a2, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
+ break;
+ case MEP_OPERAND_PCREL17A2 :
+ print_address (cd, info, fields->f_17s16a2, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
+ break;
+ case MEP_OPERAND_PCREL24A2 :
+ print_address (cd, info, fields->f_24s5a2n, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_PCREL_ADDR)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
+ break;
+ case MEP_OPERAND_PCREL8A2 :
+ print_address (cd, info, fields->f_8s8a2, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
+ break;
+ case MEP_OPERAND_PSW :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_R0 :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, 0, 0);
+ break;
+ case MEP_OPERAND_R1 :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, 0, 0);
+ break;
+ case MEP_OPERAND_RL :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rl, 0);
+ break;
+ case MEP_OPERAND_RM :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rm, 0);
+ break;
+ case MEP_OPERAND_RMA :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rm, 0);
+ break;
+ case MEP_OPERAND_RN :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn, 0);
+ break;
+ case MEP_OPERAND_RN3 :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn3, 0);
+ break;
+ case MEP_OPERAND_RN3C :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn3, 0);
+ break;
+ case MEP_OPERAND_RN3L :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn3, 0);
+ break;
+ case MEP_OPERAND_RN3S :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn3, 0);
+ break;
+ case MEP_OPERAND_RN3UC :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn3, 0);
+ break;
+ case MEP_OPERAND_RN3UL :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn3, 0);
+ break;
+ case MEP_OPERAND_RN3US :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn3, 0);
+ break;
+ case MEP_OPERAND_RNC :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn, 0);
+ break;
+ case MEP_OPERAND_RNL :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn, 0);
+ break;
+ case MEP_OPERAND_RNS :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn, 0);
+ break;
+ case MEP_OPERAND_RNUC :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn, 0);
+ break;
+ case MEP_OPERAND_RNUL :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn, 0);
+ break;
+ case MEP_OPERAND_RNUS :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, fields->f_rn, 0);
+ break;
+ case MEP_OPERAND_SAR :
+ print_keyword (cd, info, & mep_cgen_opval_h_csr, 0, 0);
+ break;
+ case MEP_OPERAND_SDISP16 :
+ print_normal (cd, info, fields->f_16s16, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
+ break;
+ case MEP_OPERAND_SIMM16 :
+ print_normal (cd, info, fields->f_16s16, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
+ break;
+ case MEP_OPERAND_SIMM6 :
+ print_normal (cd, info, fields->f_6s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
+ break;
+ case MEP_OPERAND_SIMM8 :
+ print_normal (cd, info, fields->f_8s8, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_RELOC_IMPLIES_OVERFLOW), pc, length);
+ break;
+ case MEP_OPERAND_SP :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, 0, 0);
+ break;
+ case MEP_OPERAND_SPR :
+ print_spreg (cd, info, & mep_cgen_opval_h_gpr, 0, 0);
+ break;
+ case MEP_OPERAND_TP :
+ print_keyword (cd, info, & mep_cgen_opval_h_gpr, 0, 0);
+ break;
+ case MEP_OPERAND_TPR :
+ print_tpreg (cd, info, & mep_cgen_opval_h_gpr, 0, 0);
+ break;
+ case MEP_OPERAND_UDISP2 :
+ print_normal (cd, info, fields->f_2u6, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
+ break;
+ case MEP_OPERAND_UDISP7 :
+ print_normal (cd, info, fields->f_7u9, 0, pc, length);
+ break;
+ case MEP_OPERAND_UDISP7A2 :
+ print_normal (cd, info, fields->f_7u9a2, 0, pc, length);
+ break;
+ case MEP_OPERAND_UDISP7A4 :
+ print_normal (cd, info, fields->f_7u9a4, 0, pc, length);
+ break;
+ case MEP_OPERAND_UIMM16 :
+ print_normal (cd, info, fields->f_16u16, 0, pc, length);
+ break;
+ case MEP_OPERAND_UIMM2 :
+ print_normal (cd, info, fields->f_2u10, 0, pc, length);
+ break;
+ case MEP_OPERAND_UIMM24 :
+ print_normal (cd, info, fields->f_24u8n, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
+ break;
+ case MEP_OPERAND_UIMM3 :
+ print_normal (cd, info, fields->f_3u5, 0, pc, length);
+ break;
+ case MEP_OPERAND_UIMM4 :
+ print_normal (cd, info, fields->f_4u8, 0, pc, length);
+ break;
+ case MEP_OPERAND_UIMM5 :
+ print_normal (cd, info, fields->f_5u8, 0, pc, length);
+ break;
+ case MEP_OPERAND_UIMM7A4 :
+ print_normal (cd, info, fields->f_7u9a4, 0, pc, length);
+ break;
+ case MEP_OPERAND_ZERO :
+ print_normal (cd, info, 0, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
+ break;
+
+ default :
+ /* xgettext:c-format */
+ fprintf (stderr, _("Unrecognized field %d while printing insn.\n"),
+ opindex);
+ abort ();
+ }
+}
+
+cgen_print_fn * const mep_cgen_print_handlers[] =
+{
+ print_insn_normal,
+};
+
+
+void
+mep_cgen_init_dis (CGEN_CPU_DESC cd)
+{
+ mep_cgen_init_opcode_table (cd);
+ mep_cgen_init_ibld_table (cd);
+ cd->print_handlers = & mep_cgen_print_handlers[0];
+ cd->print_operand = mep_cgen_print_operand;
+}
+
+
+/* Default print handler. */
+
+static void
+print_normal (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+ void *dis_info,
+ long value,
+ unsigned int attrs,
+ bfd_vma pc ATTRIBUTE_UNUSED,
+ int length ATTRIBUTE_UNUSED)
+{
+ disassemble_info *info = (disassemble_info *) dis_info;
+
+#ifdef CGEN_PRINT_NORMAL
+ CGEN_PRINT_NORMAL (cd, info, value, attrs, pc, length);
+#endif
+
+ /* Print the operand as directed by the attributes. */
+ if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_SEM_ONLY))
+ ; /* nothing to do */
+ else if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_SIGNED))
+ (*info->fprintf_func) (info->stream, "%ld", value);
+ else
+ (*info->fprintf_func) (info->stream, "0x%lx", value);
+}
+
+/* Default address handler. */
+
+static void
+print_address (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+ void *dis_info,
+ bfd_vma value,
+ unsigned int attrs,
+ bfd_vma pc ATTRIBUTE_UNUSED,
+ int length ATTRIBUTE_UNUSED)
+{
+ disassemble_info *info = (disassemble_info *) dis_info;
+
+#ifdef CGEN_PRINT_ADDRESS
+ CGEN_PRINT_ADDRESS (cd, info, value, attrs, pc, length);
+#endif
+
+ /* Print the operand as directed by the attributes. */
+ if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_SEM_ONLY))
+ ; /* Nothing to do. */
+ else if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_PCREL_ADDR))
+ (*info->print_address_func) (value, info);
+ else if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_ABS_ADDR))
+ (*info->print_address_func) (value, info);
+ else if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_SIGNED))
+ (*info->fprintf_func) (info->stream, "%ld", (long) value);
+ else
+ (*info->fprintf_func) (info->stream, "0x%lx", (long) value);
+}
+
+/* Keyword print handler. */
+
+static void
+print_keyword (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+ void *dis_info,
+ CGEN_KEYWORD *keyword_table,
+ long value,
+ unsigned int attrs ATTRIBUTE_UNUSED)
+{
+ disassemble_info *info = (disassemble_info *) dis_info;
+ const CGEN_KEYWORD_ENTRY *ke;
+
+ ke = cgen_keyword_lookup_value (keyword_table, value);
+ if (ke != NULL)
+ (*info->fprintf_func) (info->stream, "%s", ke->name);
+ else
+ (*info->fprintf_func) (info->stream, "???");
+}
+
+/* Default insn printer.
+
+ DIS_INFO is defined as `void *' so the disassembler needn't know anything
+ about disassemble_info. */
+
+static void
+print_insn_normal (CGEN_CPU_DESC cd,
+ void *dis_info,
+ const CGEN_INSN *insn,
+ CGEN_FIELDS *fields,
+ bfd_vma pc,
+ int length)
+{
+ const CGEN_SYNTAX *syntax = CGEN_INSN_SYNTAX (insn);
+ disassemble_info *info = (disassemble_info *) dis_info;
+ const CGEN_SYNTAX_CHAR_TYPE *syn;
+
+ CGEN_INIT_PRINT (cd);
+
+ for (syn = CGEN_SYNTAX_STRING (syntax); *syn; ++syn)
+ {
+ if (CGEN_SYNTAX_MNEMONIC_P (*syn))
+ {
+ (*info->fprintf_func) (info->stream, "%s", CGEN_INSN_MNEMONIC (insn));
+ continue;
+ }
+ if (CGEN_SYNTAX_CHAR_P (*syn))
+ {
+ (*info->fprintf_func) (info->stream, "%c", CGEN_SYNTAX_CHAR (*syn));
+ continue;
+ }
+
+ /* We have an operand. */
+ mep_cgen_print_operand (cd, CGEN_SYNTAX_FIELD (*syn), info,
+ fields, CGEN_INSN_ATTRS (insn), pc, length);
+ }
+}
+
+/* Subroutine of print_insn. Reads an insn into the given buffers and updates
+ the extract info.
+ Returns 0 if all is well, non-zero otherwise. */
+
+static int
+read_insn (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+ bfd_vma pc,
+ disassemble_info *info,
+ bfd_byte *buf,
+ int buflen,
+ CGEN_EXTRACT_INFO *ex_info,
+ unsigned long *insn_value)
+{
+ int status = (*info->read_memory_func) (pc, buf, buflen, info);
+
+ if (status != 0)
+ {
+ (*info->memory_error_func) (status, pc, info);
+ return -1;
+ }
+
+ ex_info->dis_info = info;
+ ex_info->valid = (1 << buflen) - 1;
+ ex_info->insn_bytes = buf;
+
+ *insn_value = bfd_get_bits (buf, buflen * 8, info->endian == BFD_ENDIAN_BIG);
+ return 0;
+}
+
+/* Utility to print an insn.
+ BUF is the base part of the insn, target byte order, BUFLEN bytes long.
+ The result is the size of the insn in bytes or zero for an unknown insn
+ or -1 if an error occurs fetching data (memory_error_func will have
+ been called). */
+
+static int
+print_insn (CGEN_CPU_DESC cd,
+ bfd_vma pc,
+ disassemble_info *info,
+ bfd_byte *buf,
+ unsigned int buflen)
+{
+ CGEN_INSN_INT insn_value;
+ const CGEN_INSN_LIST *insn_list;
+ CGEN_EXTRACT_INFO ex_info;
+ int basesize;
+
+ /* Extract base part of instruction, just in case CGEN_DIS_* uses it. */
+ basesize = cd->base_insn_bitsize < buflen * 8 ?
+ cd->base_insn_bitsize : buflen * 8;
+ insn_value = cgen_get_insn_value (cd, buf, basesize);
+
+
+ /* Fill in ex_info fields like read_insn would. Don't actually call
+ read_insn, since the incoming buffer is already read (and possibly
+ modified a la m32r). */
+ ex_info.valid = (1 << buflen) - 1;
+ ex_info.dis_info = info;
+ ex_info.insn_bytes = buf;
+
+ /* The instructions are stored in hash lists.
+ Pick the first one and keep trying until we find the right one. */
+
+ insn_list = CGEN_DIS_LOOKUP_INSN (cd, (char *) buf, insn_value);
+ while (insn_list != NULL)
+ {
+ const CGEN_INSN *insn = insn_list->insn;
+ CGEN_FIELDS fields;
+ int length;
+ unsigned long insn_value_cropped;
+
+#ifdef CGEN_VALIDATE_INSN_SUPPORTED
+ /* Not needed as insn shouldn't be in hash lists if not supported. */
+ /* Supported by this cpu? */
+ if (! mep_cgen_insn_supported (cd, insn))
+ {
+ insn_list = CGEN_DIS_NEXT_INSN (insn_list);
+ continue;
+ }
+#endif
+
+ /* Basic bit mask must be correct. */
+ /* ??? May wish to allow target to defer this check until the extract
+ handler. */
+
+ /* Base size may exceed this instruction's size. Extract the
+ relevant part from the buffer. */
+ if ((unsigned) (CGEN_INSN_BITSIZE (insn) / 8) < buflen &&
+ (unsigned) (CGEN_INSN_BITSIZE (insn) / 8) <= sizeof (unsigned long))
+ insn_value_cropped = bfd_get_bits (buf, CGEN_INSN_BITSIZE (insn),
+ info->endian == BFD_ENDIAN_BIG);
+ else
+ insn_value_cropped = insn_value;
+
+ if ((insn_value_cropped & CGEN_INSN_BASE_MASK (insn))
+ == CGEN_INSN_BASE_VALUE (insn))
+ {
+ /* Printing is handled in two passes. The first pass parses the
+ machine insn and extracts the fields. The second pass prints
+ them. */
+
+ /* Make sure the entire insn is loaded into insn_value, if it
+ can fit. */
+ if (((unsigned) CGEN_INSN_BITSIZE (insn) > cd->base_insn_bitsize) &&
+ (unsigned) (CGEN_INSN_BITSIZE (insn) / 8) <= sizeof (unsigned long))
+ {
+ unsigned long full_insn_value;
+ int rc = read_insn (cd, pc, info, buf,
+ CGEN_INSN_BITSIZE (insn) / 8,
+ & ex_info, & full_insn_value);
+ if (rc != 0)
+ return rc;
+ length = CGEN_EXTRACT_FN (cd, insn)
+ (cd, insn, &ex_info, full_insn_value, &fields, pc);
+ }
+ else
+ length = CGEN_EXTRACT_FN (cd, insn)
+ (cd, insn, &ex_info, insn_value_cropped, &fields, pc);
+
+ /* Length < 0 -> error. */
+ if (length < 0)
+ return length;
+ if (length > 0)
+ {
+ CGEN_PRINT_FN (cd, insn) (cd, info, insn, &fields, pc, length);
+ /* Length is in bits, result is in bytes. */
+ return length / 8;
+ }
+ }
+
+ insn_list = CGEN_DIS_NEXT_INSN (insn_list);
+ }
+
+ return 0;
+}
+
+/* Default value for CGEN_PRINT_INSN.
+ The result is the size of the insn in bytes or zero for an unknown insn
+ or -1 if an error occured fetching bytes. */
+
+#ifndef CGEN_PRINT_INSN
+#define CGEN_PRINT_INSN default_print_insn
+#endif
+
+static int
+default_print_insn (CGEN_CPU_DESC cd, bfd_vma pc, disassemble_info *info)
+{
+ bfd_byte buf[CGEN_MAX_INSN_SIZE];
+ int buflen;
+ int status;
+
+ /* Attempt to read the base part of the insn. */
+ buflen = cd->base_insn_bitsize / 8;
+ status = (*info->read_memory_func) (pc, buf, buflen, info);
+
+ /* Try again with the minimum part, if min < base. */
+ if (status != 0 && (cd->min_insn_bitsize < cd->base_insn_bitsize))
+ {
+ buflen = cd->min_insn_bitsize / 8;
+ status = (*info->read_memory_func) (pc, buf, buflen, info);
+ }
+
+ if (status != 0)
+ {
+ (*info->memory_error_func) (status, pc, info);
+ return -1;
+ }
+
+ return print_insn (cd, pc, info, buf, buflen);
+}
+
+/* Main entry point.
+ Print one instruction from PC on INFO->STREAM.
+ Return the size of the instruction (in bytes). */
+
+typedef struct cpu_desc_list
+{
+ struct cpu_desc_list *next;
+ CGEN_BITSET *isa;
+ int mach;
+ int endian;
+ CGEN_CPU_DESC cd;
+} cpu_desc_list;
+
+int
+print_insn_mep (bfd_vma pc, disassemble_info *info)
+{
+ static cpu_desc_list *cd_list = 0;
+ cpu_desc_list *cl = 0;
+ static CGEN_CPU_DESC cd = 0;
+ static CGEN_BITSET *prev_isa;
+ static int prev_mach;
+ static int prev_endian;
+ int length;
+ CGEN_BITSET *isa;
+ int mach;
+ int endian = (info->endian == BFD_ENDIAN_BIG
+ ? CGEN_ENDIAN_BIG
+ : CGEN_ENDIAN_LITTLE);
+ enum bfd_architecture arch;
+
+ /* ??? gdb will set mach but leave the architecture as "unknown" */
+#ifndef CGEN_BFD_ARCH
+#define CGEN_BFD_ARCH bfd_arch_mep
+#endif
+ arch = info->arch;
+ if (arch == bfd_arch_unknown)
+ arch = CGEN_BFD_ARCH;
+
+ /* There's no standard way to compute the machine or isa number
+ so we leave it to the target. */
+#ifdef CGEN_COMPUTE_MACH
+ mach = CGEN_COMPUTE_MACH (info);
+#else
+ mach = info->mach;
+#endif
+
+#ifdef CGEN_COMPUTE_ISA
+ {
+ static CGEN_BITSET *permanent_isa;
+
+ if (!permanent_isa)
+ permanent_isa = cgen_bitset_create (MAX_ISAS);
+ isa = permanent_isa;
+ cgen_bitset_clear (isa);
+ cgen_bitset_add (isa, CGEN_COMPUTE_ISA (info));
+ }
+#else
+ isa = info->insn_sets;
+#endif
+
+ /* If we've switched cpu's, try to find a handle we've used before */
+ if (cd
+ && (cgen_bitset_compare (isa, prev_isa) != 0
+ || mach != prev_mach
+ || endian != prev_endian))
+ {
+ cd = 0;
+ for (cl = cd_list; cl; cl = cl->next)
+ {
+ if (cgen_bitset_compare (cl->isa, isa) == 0 &&
+ cl->mach == mach &&
+ cl->endian == endian)
+ {
+ cd = cl->cd;
+ prev_isa = cd->isas;
+ break;
+ }
+ }
+ }
+
+ /* If we haven't initialized yet, initialize the opcode table. */
+ if (! cd)
+ {
+ const bfd_arch_info_type *arch_type = bfd_lookup_arch (arch, mach);
+ const char *mach_name;
+
+ if (!arch_type)
+ abort ();
+ mach_name = arch_type->printable_name;
+
+ prev_isa = cgen_bitset_copy (isa);
+ prev_mach = mach;
+ prev_endian = endian;
+ cd = mep_cgen_cpu_open (CGEN_CPU_OPEN_ISAS, prev_isa,
+ CGEN_CPU_OPEN_BFDMACH, mach_name,
+ CGEN_CPU_OPEN_ENDIAN, prev_endian,
+ CGEN_CPU_OPEN_END);
+ if (!cd)
+ abort ();
+
+ /* Save this away for future reference. */
+ cl = xmalloc (sizeof (struct cpu_desc_list));
+ cl->cd = cd;
+ cl->isa = prev_isa;
+ cl->mach = mach;
+ cl->endian = endian;
+ cl->next = cd_list;
+ cd_list = cl;
+
+ mep_cgen_init_dis (cd);
+ }
+
+ /* We try to have as much common code as possible.
+ But at this point some targets need to take over. */
+ /* ??? Some targets may need a hook elsewhere. Try to avoid this,
+ but if not possible try to move this hook elsewhere rather than
+ have two hooks. */
+ length = CGEN_PRINT_INSN (cd, pc, info);
+ if (length > 0)
+ return length;
+ if (length < 0)
+ return -1;
+
+ (*info->fprintf_func) (info->stream, UNKNOWN_INSN_MSG);
+ return cd->default_insn_bitsize / 8;
+}
diff --git a/opcodes/mep-ibld.c b/opcodes/mep-ibld.c
new file mode 100644
index 000000000000..7dd64967b305
--- /dev/null
+++ b/opcodes/mep-ibld.c
@@ -0,0 +1,2541 @@
+/* Instruction building/extraction support for mep. -*- C -*-
+
+ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator.
+ - the resultant file is machine generated, cgen-ibld.in isn't
+
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2005, 2006
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU Binutils and GDB, the GNU debugger.
+
+ 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. */
+
+/* ??? Eventually more and more of this stuff can go to cpu-independent files.
+ Keep that in mind. */
+
+#include "sysdep.h"
+#include <stdio.h>
+#include "ansidecl.h"
+#include "dis-asm.h"
+#include "bfd.h"
+#include "symcat.h"
+#include "mep-desc.h"
+#include "mep-opc.h"
+#include "opintl.h"
+#include "safe-ctype.h"
+
+#undef min
+#define min(a,b) ((a) < (b) ? (a) : (b))
+#undef max
+#define max(a,b) ((a) > (b) ? (a) : (b))
+
+/* Used by the ifield rtx function. */
+#define FLD(f) (fields->f)
+
+static const char * insert_normal
+ (CGEN_CPU_DESC, long, unsigned int, unsigned int, unsigned int,
+ unsigned int, unsigned int, unsigned int, CGEN_INSN_BYTES_PTR);
+static const char * insert_insn_normal
+ (CGEN_CPU_DESC, const CGEN_INSN *,
+ CGEN_FIELDS *, CGEN_INSN_BYTES_PTR, bfd_vma);
+static int extract_normal
+ (CGEN_CPU_DESC, CGEN_EXTRACT_INFO *, CGEN_INSN_INT,
+ unsigned int, unsigned int, unsigned int, unsigned int,
+ unsigned int, unsigned int, bfd_vma, long *);
+static int extract_insn_normal
+ (CGEN_CPU_DESC, const CGEN_INSN *, CGEN_EXTRACT_INFO *,
+ CGEN_INSN_INT, CGEN_FIELDS *, bfd_vma);
+#if CGEN_INT_INSN_P
+static void put_insn_int_value
+ (CGEN_CPU_DESC, CGEN_INSN_BYTES_PTR, int, int, CGEN_INSN_INT);
+#endif
+#if ! CGEN_INT_INSN_P
+static CGEN_INLINE void insert_1
+ (CGEN_CPU_DESC, unsigned long, int, int, int, unsigned char *);
+static CGEN_INLINE int fill_cache
+ (CGEN_CPU_DESC, CGEN_EXTRACT_INFO *, int, int, bfd_vma);
+static CGEN_INLINE long extract_1
+ (CGEN_CPU_DESC, CGEN_EXTRACT_INFO *, int, int, int, unsigned char *, bfd_vma);
+#endif
+
+/* Operand insertion. */
+
+#if ! CGEN_INT_INSN_P
+
+/* Subroutine of insert_normal. */
+
+static CGEN_INLINE void
+insert_1 (CGEN_CPU_DESC cd,
+ unsigned long value,
+ int start,
+ int length,
+ int word_length,
+ unsigned char *bufp)
+{
+ unsigned long x,mask;
+ int shift;
+
+ x = cgen_get_insn_value (cd, bufp, word_length);
+
+ /* Written this way to avoid undefined behaviour. */
+ mask = (((1L << (length - 1)) - 1) << 1) | 1;
+ if (CGEN_INSN_LSB0_P)
+ shift = (start + 1) - length;
+ else
+ shift = (word_length - (start + length));
+ x = (x & ~(mask << shift)) | ((value & mask) << shift);
+
+ cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x);
+}
+
+#endif /* ! CGEN_INT_INSN_P */
+
+/* Default insertion routine.
+
+ ATTRS is a mask of the boolean attributes.
+ WORD_OFFSET is the offset in bits from the start of the insn of the value.
+ WORD_LENGTH is the length of the word in bits in which the value resides.
+ START is the starting bit number in the word, architecture origin.
+ LENGTH is the length of VALUE in bits.
+ TOTAL_LENGTH is the total length of the insn in bits.
+
+ The result is an error message or NULL if success. */
+
+/* ??? This duplicates functionality with bfd's howto table and
+ bfd_install_relocation. */
+/* ??? This doesn't handle bfd_vma's. Create another function when
+ necessary. */
+
+static const char *
+insert_normal (CGEN_CPU_DESC cd,
+ long value,
+ unsigned int attrs,
+ unsigned int word_offset,
+ unsigned int start,
+ unsigned int length,
+ unsigned int word_length,
+ unsigned int total_length,
+ CGEN_INSN_BYTES_PTR buffer)
+{
+ static char errbuf[100];
+ /* Written this way to avoid undefined behaviour. */
+ unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1;
+
+ /* If LENGTH is zero, this operand doesn't contribute to the value. */
+ if (length == 0)
+ return NULL;
+
+ if (word_length > 32)
+ abort ();
+
+ /* For architectures with insns smaller than the base-insn-bitsize,
+ word_length may be too big. */
+ if (cd->min_insn_bitsize < cd->base_insn_bitsize)
+ {
+ if (word_offset == 0
+ && word_length > total_length)
+ word_length = total_length;
+ }
+
+ /* Ensure VALUE will fit. */
+ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT))
+ {
+ long minval = - (1L << (length - 1));
+ unsigned long maxval = mask;
+
+ if ((value > 0 && (unsigned long) value > maxval)
+ || value < minval)
+ {
+ /* xgettext:c-format */
+ sprintf (errbuf,
+ _("operand out of range (%ld not between %ld and %lu)"),
+ value, minval, maxval);
+ return errbuf;
+ }
+ }
+ else if (! CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED))
+ {
+ unsigned long maxval = mask;
+ unsigned long val = (unsigned long) value;
+
+ /* For hosts with a word size > 32 check to see if value has been sign
+ extended beyond 32 bits. If so then ignore these higher sign bits
+ as the user is attempting to store a 32-bit signed value into an
+ unsigned 32-bit field which is allowed. */
+ if (sizeof (unsigned long) > 4 && ((value >> 32) == -1))
+ val &= 0xFFFFFFFF;
+
+ if (val > maxval)
+ {
+ /* xgettext:c-format */
+ sprintf (errbuf,
+ _("operand out of range (0x%lx not between 0 and 0x%lx)"),
+ val, maxval);
+ return errbuf;
+ }
+ }
+ else
+ {
+ if (! cgen_signed_overflow_ok_p (cd))
+ {
+ long minval = - (1L << (length - 1));
+ long maxval = (1L << (length - 1)) - 1;
+
+ if (value < minval || value > maxval)
+ {
+ sprintf
+ /* xgettext:c-format */
+ (errbuf, _("operand out of range (%ld not between %ld and %ld)"),
+ value, minval, maxval);
+ return errbuf;
+ }
+ }
+ }
+
+#if CGEN_INT_INSN_P
+
+ {
+ int shift;
+
+ if (CGEN_INSN_LSB0_P)
+ shift = (word_offset + start + 1) - length;
+ else
+ shift = total_length - (word_offset + start + length);
+ *buffer = (*buffer & ~(mask << shift)) | ((value & mask) << shift);
+ }
+
+#else /* ! CGEN_INT_INSN_P */
+
+ {
+ unsigned char *bufp = (unsigned char *) buffer + word_offset / 8;
+
+ insert_1 (cd, value, start, length, word_length, bufp);
+ }
+
+#endif /* ! CGEN_INT_INSN_P */
+
+ return NULL;
+}
+
+/* Default insn builder (insert handler).
+ The instruction is recorded in CGEN_INT_INSN_P byte order (meaning
+ that if CGEN_INSN_BYTES_PTR is an int * and thus, the value is
+ recorded in host byte order, otherwise BUFFER is an array of bytes
+ and the value is recorded in target byte order).
+ The result is an error message or NULL if success. */
+
+static const char *
+insert_insn_normal (CGEN_CPU_DESC cd,
+ const CGEN_INSN * insn,
+ CGEN_FIELDS * fields,
+ CGEN_INSN_BYTES_PTR buffer,
+ bfd_vma pc)
+{
+ const CGEN_SYNTAX *syntax = CGEN_INSN_SYNTAX (insn);
+ unsigned long value;
+ const CGEN_SYNTAX_CHAR_TYPE * syn;
+
+ CGEN_INIT_INSERT (cd);
+ value = CGEN_INSN_BASE_VALUE (insn);
+
+ /* If we're recording insns as numbers (rather than a string of bytes),
+ target byte order handling is deferred until later. */
+
+#if CGEN_INT_INSN_P
+
+ put_insn_int_value (cd, buffer, cd->base_insn_bitsize,
+ CGEN_FIELDS_BITSIZE (fields), value);
+
+#else
+
+ cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize,
+ (unsigned) CGEN_FIELDS_BITSIZE (fields)),
+ value);
+
+#endif /* ! CGEN_INT_INSN_P */
+
+ /* ??? It would be better to scan the format's fields.
+ Still need to be able to insert a value based on the operand though;
+ e.g. storing a branch displacement that got resolved later.
+ Needs more thought first. */
+
+ for (syn = CGEN_SYNTAX_STRING (syntax); * syn; ++ syn)
+ {
+ const char *errmsg;
+
+ if (CGEN_SYNTAX_CHAR_P (* syn))
+ continue;
+
+ errmsg = (* cd->insert_operand) (cd, CGEN_SYNTAX_FIELD (*syn),
+ fields, buffer, pc);
+ if (errmsg)
+ return errmsg;
+ }
+
+ return NULL;
+}
+
+#if CGEN_INT_INSN_P
+/* Cover function to store an insn value into an integral insn. Must go here
+ because it needs <prefix>-desc.h for CGEN_INT_INSN_P. */
+
+static void
+put_insn_int_value (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+ CGEN_INSN_BYTES_PTR buf,
+ int length,
+ int insn_length,
+ CGEN_INSN_INT value)
+{
+ /* For architectures with insns smaller than the base-insn-bitsize,
+ length may be too big. */
+ if (length > insn_length)
+ *buf = value;
+ else
+ {
+ int shift = insn_length - length;
+ /* Written this way to avoid undefined behaviour. */
+ CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1;
+
+ *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift);
+ }
+}
+#endif
+
+/* Operand extraction. */
+
+#if ! CGEN_INT_INSN_P
+
+/* Subroutine of extract_normal.
+ Ensure sufficient bytes are cached in EX_INFO.
+ OFFSET is the offset in bytes from the start of the insn of the value.
+ BYTES is the length of the needed value.
+ Returns 1 for success, 0 for failure. */
+
+static CGEN_INLINE int
+fill_cache (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+ CGEN_EXTRACT_INFO *ex_info,
+ int offset,
+ int bytes,
+ bfd_vma pc)
+{
+ /* It's doubtful that the middle part has already been fetched so
+ we don't optimize that case. kiss. */
+ unsigned int mask;
+ disassemble_info *info = (disassemble_info *) ex_info->dis_info;
+
+ /* First do a quick check. */
+ mask = (1 << bytes) - 1;
+ if (((ex_info->valid >> offset) & mask) == mask)
+ return 1;
+
+ /* Search for the first byte we need to read. */
+ for (mask = 1 << offset; bytes > 0; --bytes, ++offset, mask <<= 1)
+ if (! (mask & ex_info->valid))
+ break;
+
+ if (bytes)
+ {
+ int status;
+
+ pc += offset;
+ status = (*info->read_memory_func)
+ (pc, ex_info->insn_bytes + offset, bytes, info);
+
+ if (status != 0)
+ {
+ (*info->memory_error_func) (status, pc, info);
+ return 0;
+ }
+
+ ex_info->valid |= ((1 << bytes) - 1) << offset;
+ }
+
+ return 1;
+}
+
+/* Subroutine of extract_normal. */
+
+static CGEN_INLINE long
+extract_1 (CGEN_CPU_DESC cd,
+ CGEN_EXTRACT_INFO *ex_info ATTRIBUTE_UNUSED,
+ int start,
+ int length,
+ int word_length,
+ unsigned char *bufp,
+ bfd_vma pc ATTRIBUTE_UNUSED)
+{
+ unsigned long x;
+ int shift;
+
+ x = cgen_get_insn_value (cd, bufp, word_length);
+
+ if (CGEN_INSN_LSB0_P)
+ shift = (start + 1) - length;
+ else
+ shift = (word_length - (start + length));
+ return x >> shift;
+}
+
+#endif /* ! CGEN_INT_INSN_P */
+
+/* Default extraction routine.
+
+ INSN_VALUE is the first base_insn_bitsize bits of the insn in host order,
+ or sometimes less for cases like the m32r where the base insn size is 32
+ but some insns are 16 bits.
+ ATTRS is a mask of the boolean attributes. We only need `SIGNED',
+ but for generality we take a bitmask of all of them.
+ WORD_OFFSET is the offset in bits from the start of the insn of the value.
+ WORD_LENGTH is the length of the word in bits in which the value resides.
+ START is the starting bit number in the word, architecture origin.
+ LENGTH is the length of VALUE in bits.
+ TOTAL_LENGTH is the total length of the insn in bits.
+
+ Returns 1 for success, 0 for failure. */
+
+/* ??? The return code isn't properly used. wip. */
+
+/* ??? This doesn't handle bfd_vma's. Create another function when
+ necessary. */
+
+static int
+extract_normal (CGEN_CPU_DESC cd,
+#if ! CGEN_INT_INSN_P
+ CGEN_EXTRACT_INFO *ex_info,
+#else
+ CGEN_EXTRACT_INFO *ex_info ATTRIBUTE_UNUSED,
+#endif
+ CGEN_INSN_INT insn_value,
+ unsigned int attrs,
+ unsigned int word_offset,
+ unsigned int start,
+ unsigned int length,
+ unsigned int word_length,
+ unsigned int total_length,
+#if ! CGEN_INT_INSN_P
+ bfd_vma pc,
+#else
+ bfd_vma pc ATTRIBUTE_UNUSED,
+#endif
+ long *valuep)
+{
+ long value, mask;
+
+ /* If LENGTH is zero, this operand doesn't contribute to the value
+ so give it a standard value of zero. */
+ if (length == 0)
+ {
+ *valuep = 0;
+ return 1;
+ }
+
+ if (word_length > 32)
+ abort ();
+
+ /* For architectures with insns smaller than the insn-base-bitsize,
+ word_length may be too big. */
+ if (cd->min_insn_bitsize < cd->base_insn_bitsize)
+ {
+ if (word_offset + word_length > total_length)
+ word_length = total_length - word_offset;
+ }
+
+ /* Does the value reside in INSN_VALUE, and at the right alignment? */
+
+ if (CGEN_INT_INSN_P || (word_offset == 0 && word_length == total_length))
+ {
+ if (CGEN_INSN_LSB0_P)
+ value = insn_value >> ((word_offset + start + 1) - length);
+ else
+ value = insn_value >> (total_length - ( word_offset + start + length));
+ }
+
+#if ! CGEN_INT_INSN_P
+
+ else
+ {
+ unsigned char *bufp = ex_info->insn_bytes + word_offset / 8;
+
+ if (word_length > 32)
+ abort ();
+
+ if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0)
+ return 0;
+
+ value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc);
+ }
+
+#endif /* ! CGEN_INT_INSN_P */
+
+ /* Written this way to avoid undefined behaviour. */
+ mask = (((1L << (length - 1)) - 1) << 1) | 1;
+
+ value &= mask;
+ /* sign extend? */
+ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED)
+ && (value & (1L << (length - 1))))
+ value |= ~mask;
+
+ *valuep = value;
+
+ return 1;
+}
+
+/* Default insn extractor.
+
+ INSN_VALUE is the first base_insn_bitsize bits, translated to host order.
+ The extracted fields are stored in FIELDS.
+ EX_INFO is used to handle reading variable length insns.
+ Return the length of the insn in bits, or 0 if no match,
+ or -1 if an error occurs fetching data (memory_error_func will have
+ been called). */
+
+static int
+extract_insn_normal (CGEN_CPU_DESC cd,
+ const CGEN_INSN *insn,
+ CGEN_EXTRACT_INFO *ex_info,
+ CGEN_INSN_INT insn_value,
+ CGEN_FIELDS *fields,
+ bfd_vma pc)
+{
+ const CGEN_SYNTAX *syntax = CGEN_INSN_SYNTAX (insn);
+ const CGEN_SYNTAX_CHAR_TYPE *syn;
+
+ CGEN_FIELDS_BITSIZE (fields) = CGEN_INSN_BITSIZE (insn);
+
+ CGEN_INIT_EXTRACT (cd);
+
+ for (syn = CGEN_SYNTAX_STRING (syntax); *syn; ++syn)
+ {
+ int length;
+
+ if (CGEN_SYNTAX_CHAR_P (*syn))
+ continue;
+
+ length = (* cd->extract_operand) (cd, CGEN_SYNTAX_FIELD (*syn),
+ ex_info, insn_value, fields, pc);
+ if (length <= 0)
+ return length;
+ }
+
+ /* We recognized and successfully extracted this insn. */
+ return CGEN_INSN_BITSIZE (insn);
+}
+
+/* Machine generated code added here. */
+
+const char * mep_cgen_insert_operand
+ (CGEN_CPU_DESC, int, CGEN_FIELDS *, CGEN_INSN_BYTES_PTR, bfd_vma);
+
+/* Main entry point for operand insertion.
+
+ This function is basically just a big switch statement. Earlier versions
+ used tables to look up the function to use, but
+ - if the table contains both assembler and disassembler functions then
+ the disassembler contains much of the assembler and vice-versa,
+ - there's a lot of inlining possibilities as things grow,
+ - using a switch statement avoids the function call overhead.
+
+ This function could be moved into `parse_insn_normal', but keeping it
+ separate makes clear the interface between `parse_insn_normal' and each of
+ the handlers. It's also needed by GAS to insert operands that couldn't be
+ resolved during parsing. */
+
+const char *
+mep_cgen_insert_operand (CGEN_CPU_DESC cd,
+ int opindex,
+ CGEN_FIELDS * fields,
+ CGEN_INSN_BYTES_PTR buffer,
+ bfd_vma pc ATTRIBUTE_UNUSED)
+{
+ const char * errmsg = NULL;
+ unsigned int total_length = CGEN_FIELDS_BITSIZE (fields);
+
+ switch (opindex)
+ {
+ case MEP_OPERAND_ADDR24A4 :
+ {
+{
+ FLD (f_24u8a4n_hi) = ((unsigned int) (FLD (f_24u8a4n)) >> (8));
+ FLD (f_24u8a4n_lo) = ((unsigned int) (((FLD (f_24u8a4n)) & (252))) >> (2));
+}
+ errmsg = insert_normal (cd, fields->f_24u8a4n_hi, 0, 0, 16, 16, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_24u8a4n_lo, 0, 0, 8, 6, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_CALLNUM :
+ {
+{
+ FLD (f_5) = ((((unsigned int) (FLD (f_callnum)) >> (3))) & (1));
+ FLD (f_6) = ((((unsigned int) (FLD (f_callnum)) >> (2))) & (1));
+ FLD (f_7) = ((((unsigned int) (FLD (f_callnum)) >> (1))) & (1));
+ FLD (f_11) = ((FLD (f_callnum)) & (1));
+}
+ errmsg = insert_normal (cd, fields->f_5, 0, 0, 5, 1, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_6, 0, 0, 6, 1, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_7, 0, 0, 7, 1, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_11, 0, 0, 11, 1, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_CCCC :
+ errmsg = insert_normal (cd, fields->f_rm, 0, 0, 8, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_CCRN :
+ {
+{
+ FLD (f_ccrn_hi) = ((((unsigned int) (FLD (f_ccrn)) >> (4))) & (3));
+ FLD (f_ccrn_lo) = ((FLD (f_ccrn)) & (15));
+}
+ errmsg = insert_normal (cd, fields->f_ccrn_hi, 0, 0, 28, 2, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_ccrn_lo, 0, 0, 4, 4, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_CDISP8 :
+ errmsg = insert_normal (cd, fields->f_8s24, 0|(1<<CGEN_IFLD_SIGNED), 0, 24, 8, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_CDISP8A2 :
+ {
+ long value = fields->f_8s24a2;
+ value = ((int) (value) >> (1));
+ errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 0, 24, 7, 32, total_length, buffer);
+ }
+ break;
+ case MEP_OPERAND_CDISP8A4 :
+ {
+ long value = fields->f_8s24a4;
+ value = ((int) (value) >> (2));
+ errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 0, 24, 6, 32, total_length, buffer);
+ }
+ break;
+ case MEP_OPERAND_CDISP8A8 :
+ {
+ long value = fields->f_8s24a8;
+ value = ((int) (value) >> (3));
+ errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 0, 24, 5, 32, total_length, buffer);
+ }
+ break;
+ case MEP_OPERAND_CIMM4 :
+ errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_CIMM5 :
+ errmsg = insert_normal (cd, fields->f_5u24, 0, 0, 24, 5, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_CODE16 :
+ errmsg = insert_normal (cd, fields->f_16u16, 0, 0, 16, 16, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_CODE24 :
+ {
+{
+ FLD (f_24u4n_hi) = ((unsigned int) (FLD (f_24u4n)) >> (16));
+ FLD (f_24u4n_lo) = ((FLD (f_24u4n)) & (65535));
+}
+ errmsg = insert_normal (cd, fields->f_24u4n_hi, 0, 0, 4, 8, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_24u4n_lo, 0, 0, 16, 16, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_CP_FLAG :
+ break;
+ case MEP_OPERAND_CRN :
+ errmsg = insert_normal (cd, fields->f_crn, 0, 0, 4, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_CRN64 :
+ errmsg = insert_normal (cd, fields->f_crn, 0, 0, 4, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_CRNX :
+ {
+{
+ FLD (f_crnx_lo) = ((FLD (f_crnx)) & (15));
+ FLD (f_crnx_hi) = ((unsigned int) (FLD (f_crnx)) >> (4));
+}
+ errmsg = insert_normal (cd, fields->f_crnx_hi, 0, 0, 28, 1, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_crnx_lo, 0, 0, 4, 4, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_CRNX64 :
+ {
+{
+ FLD (f_crnx_lo) = ((FLD (f_crnx)) & (15));
+ FLD (f_crnx_hi) = ((unsigned int) (FLD (f_crnx)) >> (4));
+}
+ errmsg = insert_normal (cd, fields->f_crnx_hi, 0, 0, 28, 1, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_crnx_lo, 0, 0, 4, 4, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_CSRN :
+ {
+{
+ FLD (f_csrn_lo) = ((FLD (f_csrn)) & (15));
+ FLD (f_csrn_hi) = ((unsigned int) (FLD (f_csrn)) >> (4));
+}
+ errmsg = insert_normal (cd, fields->f_csrn_hi, 0, 0, 15, 1, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_csrn_lo, 0, 0, 8, 4, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_CSRN_IDX :
+ {
+{
+ FLD (f_csrn_lo) = ((FLD (f_csrn)) & (15));
+ FLD (f_csrn_hi) = ((unsigned int) (FLD (f_csrn)) >> (4));
+}
+ errmsg = insert_normal (cd, fields->f_csrn_hi, 0, 0, 15, 1, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_csrn_lo, 0, 0, 8, 4, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_DBG :
+ break;
+ case MEP_OPERAND_DEPC :
+ break;
+ case MEP_OPERAND_EPC :
+ break;
+ case MEP_OPERAND_EXC :
+ break;
+ case MEP_OPERAND_FMAX_CCRN :
+ errmsg = insert_normal (cd, fields->f_fmax_4_4, 0, 0, 4, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_FMAX_FRD :
+ {
+{
+ FLD (f_fmax_4_4) = ((FLD (f_fmax_frd)) & (15));
+ FLD (f_fmax_28_1) = ((unsigned int) (FLD (f_fmax_frd)) >> (4));
+}
+ errmsg = insert_normal (cd, fields->f_fmax_28_1, 0, 0, 28, 1, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_fmax_4_4, 0, 0, 4, 4, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_FMAX_FRD_INT :
+ {
+{
+ FLD (f_fmax_4_4) = ((FLD (f_fmax_frd)) & (15));
+ FLD (f_fmax_28_1) = ((unsigned int) (FLD (f_fmax_frd)) >> (4));
+}
+ errmsg = insert_normal (cd, fields->f_fmax_28_1, 0, 0, 28, 1, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_fmax_4_4, 0, 0, 4, 4, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_FMAX_FRM :
+ {
+{
+ FLD (f_fmax_24_4) = ((FLD (f_fmax_frm)) & (15));
+ FLD (f_fmax_30_1) = ((unsigned int) (FLD (f_fmax_frm)) >> (4));
+}
+ errmsg = insert_normal (cd, fields->f_fmax_30_1, 0, 0, 30, 1, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_fmax_24_4, 0, 0, 24, 4, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_FMAX_FRN :
+ {
+{
+ FLD (f_fmax_20_4) = ((FLD (f_fmax_frn)) & (15));
+ FLD (f_fmax_29_1) = ((unsigned int) (FLD (f_fmax_frn)) >> (4));
+}
+ errmsg = insert_normal (cd, fields->f_fmax_29_1, 0, 0, 29, 1, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_fmax_20_4, 0, 0, 20, 4, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_FMAX_FRN_INT :
+ {
+{
+ FLD (f_fmax_20_4) = ((FLD (f_fmax_frn)) & (15));
+ FLD (f_fmax_29_1) = ((unsigned int) (FLD (f_fmax_frn)) >> (4));
+}
+ errmsg = insert_normal (cd, fields->f_fmax_29_1, 0, 0, 29, 1, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_fmax_20_4, 0, 0, 20, 4, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_FMAX_RM :
+ errmsg = insert_normal (cd, fields->f_fmax_rm, 0, 0, 8, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_HI :
+ break;
+ case MEP_OPERAND_LO :
+ break;
+ case MEP_OPERAND_LP :
+ break;
+ case MEP_OPERAND_MB0 :
+ break;
+ case MEP_OPERAND_MB1 :
+ break;
+ case MEP_OPERAND_ME0 :
+ break;
+ case MEP_OPERAND_ME1 :
+ break;
+ case MEP_OPERAND_NPC :
+ break;
+ case MEP_OPERAND_OPT :
+ break;
+ case MEP_OPERAND_PCABS24A2 :
+ {
+{
+ FLD (f_24u5a2n_lo) = ((unsigned int) (((FLD (f_24u5a2n)) & (255))) >> (1));
+ FLD (f_24u5a2n_hi) = ((unsigned int) (FLD (f_24u5a2n)) >> (8));
+}
+ errmsg = insert_normal (cd, fields->f_24u5a2n_hi, 0, 0, 16, 16, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_24u5a2n_lo, 0, 0, 5, 7, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_PCREL12A2 :
+ {
+ long value = fields->f_12s4a2;
+ value = ((int) (((value) - (pc))) >> (1));
+ errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 4, 11, 32, total_length, buffer);
+ }
+ break;
+ case MEP_OPERAND_PCREL17A2 :
+ {
+ long value = fields->f_17s16a2;
+ value = ((int) (((value) - (pc))) >> (1));
+ errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 16, 16, 32, total_length, buffer);
+ }
+ break;
+ case MEP_OPERAND_PCREL24A2 :
+ {
+{
+ FLD (f_24s5a2n) = ((FLD (f_24s5a2n)) - (pc));
+ FLD (f_24s5a2n_lo) = ((unsigned int) (((FLD (f_24s5a2n)) & (254))) >> (1));
+ FLD (f_24s5a2n_hi) = ((int) (FLD (f_24s5a2n)) >> (8));
+}
+ errmsg = insert_normal (cd, fields->f_24s5a2n_hi, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 16, 16, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_24s5a2n_lo, 0|(1<<CGEN_IFLD_PCREL_ADDR), 0, 5, 7, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_PCREL8A2 :
+ {
+ long value = fields->f_8s8a2;
+ value = ((int) (((value) - (pc))) >> (1));
+ errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 8, 7, 32, total_length, buffer);
+ }
+ break;
+ case MEP_OPERAND_PSW :
+ break;
+ case MEP_OPERAND_R0 :
+ break;
+ case MEP_OPERAND_R1 :
+ break;
+ case MEP_OPERAND_RL :
+ errmsg = insert_normal (cd, fields->f_rl, 0, 0, 12, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RM :
+ errmsg = insert_normal (cd, fields->f_rm, 0, 0, 8, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RMA :
+ errmsg = insert_normal (cd, fields->f_rm, 0, 0, 8, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RN :
+ errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RN3 :
+ errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RN3C :
+ errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RN3L :
+ errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RN3S :
+ errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RN3UC :
+ errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RN3UL :
+ errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RN3US :
+ errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RNC :
+ errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RNL :
+ errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RNS :
+ errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RNUC :
+ errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RNUL :
+ errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_RNUS :
+ errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_SAR :
+ break;
+ case MEP_OPERAND_SDISP16 :
+ errmsg = insert_normal (cd, fields->f_16s16, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_SIMM16 :
+ errmsg = insert_normal (cd, fields->f_16s16, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_SIMM6 :
+ errmsg = insert_normal (cd, fields->f_6s8, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 6, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_SIMM8 :
+ errmsg = insert_normal (cd, fields->f_8s8, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 8, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_SP :
+ break;
+ case MEP_OPERAND_SPR :
+ break;
+ case MEP_OPERAND_TP :
+ break;
+ case MEP_OPERAND_TPR :
+ break;
+ case MEP_OPERAND_UDISP2 :
+ errmsg = insert_normal (cd, fields->f_2u6, 0, 0, 6, 2, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_UDISP7 :
+ errmsg = insert_normal (cd, fields->f_7u9, 0, 0, 9, 7, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_UDISP7A2 :
+ {
+ long value = fields->f_7u9a2;
+ value = ((unsigned int) (value) >> (1));
+ errmsg = insert_normal (cd, value, 0, 0, 9, 6, 32, total_length, buffer);
+ }
+ break;
+ case MEP_OPERAND_UDISP7A4 :
+ {
+ long value = fields->f_7u9a4;
+ value = ((unsigned int) (value) >> (2));
+ errmsg = insert_normal (cd, value, 0, 0, 9, 5, 32, total_length, buffer);
+ }
+ break;
+ case MEP_OPERAND_UIMM16 :
+ errmsg = insert_normal (cd, fields->f_16u16, 0, 0, 16, 16, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_UIMM2 :
+ errmsg = insert_normal (cd, fields->f_2u10, 0, 0, 10, 2, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_UIMM24 :
+ {
+{
+ FLD (f_24u8n_hi) = ((unsigned int) (FLD (f_24u8n)) >> (8));
+ FLD (f_24u8n_lo) = ((FLD (f_24u8n)) & (255));
+}
+ errmsg = insert_normal (cd, fields->f_24u8n_hi, 0, 0, 16, 16, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ errmsg = insert_normal (cd, fields->f_24u8n_lo, 0, 0, 8, 8, 32, total_length, buffer);
+ if (errmsg)
+ break;
+ }
+ break;
+ case MEP_OPERAND_UIMM3 :
+ errmsg = insert_normal (cd, fields->f_3u5, 0, 0, 5, 3, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_UIMM4 :
+ errmsg = insert_normal (cd, fields->f_4u8, 0, 0, 8, 4, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_UIMM5 :
+ errmsg = insert_normal (cd, fields->f_5u8, 0, 0, 8, 5, 32, total_length, buffer);
+ break;
+ case MEP_OPERAND_UIMM7A4 :
+ {
+ long value = fields->f_7u9a4;
+ value = ((unsigned int) (value) >> (2));
+ errmsg = insert_normal (cd, value, 0, 0, 9, 5, 32, total_length, buffer);
+ }
+ break;
+ case MEP_OPERAND_ZERO :
+ break;
+
+ default :
+ /* xgettext:c-format */
+ fprintf (stderr, _("Unrecognized field %d while building insn.\n"),
+ opindex);
+ abort ();
+ }
+
+ return errmsg;
+}
+
+int mep_cgen_extract_operand
+ (CGEN_CPU_DESC, int, CGEN_EXTRACT_INFO *, CGEN_INSN_INT, CGEN_FIELDS *, bfd_vma);
+
+/* Main entry point for operand extraction.
+ The result is <= 0 for error, >0 for success.
+ ??? Actual values aren't well defined right now.
+
+ This function is basically just a big switch statement. Earlier versions
+ used tables to look up the function to use, but
+ - if the table contains both assembler and disassembler functions then
+ the disassembler contains much of the assembler and vice-versa,
+ - there's a lot of inlining possibilities as things grow,
+ - using a switch statement avoids the function call overhead.
+
+ This function could be moved into `print_insn_normal', but keeping it
+ separate makes clear the interface between `print_insn_normal' and each of
+ the handlers. */
+
+int
+mep_cgen_extract_operand (CGEN_CPU_DESC cd,
+ int opindex,
+ CGEN_EXTRACT_INFO *ex_info,
+ CGEN_INSN_INT insn_value,
+ CGEN_FIELDS * fields,
+ bfd_vma pc)
+{
+ /* Assume success (for those operands that are nops). */
+ int length = 1;
+ unsigned int total_length = CGEN_FIELDS_BITSIZE (fields);
+
+ switch (opindex)
+ {
+ case MEP_OPERAND_ADDR24A4 :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_24u8a4n_hi);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 6, 32, total_length, pc, & fields->f_24u8a4n_lo);
+ if (length <= 0) break;
+ FLD (f_24u8a4n) = ((((FLD (f_24u8a4n_hi)) << (8))) | (((FLD (f_24u8a4n_lo)) << (2))));
+ }
+ break;
+ case MEP_OPERAND_CALLNUM :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 1, 32, total_length, pc, & fields->f_5);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 6, 1, 32, total_length, pc, & fields->f_6);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 7, 1, 32, total_length, pc, & fields->f_7);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 11, 1, 32, total_length, pc, & fields->f_11);
+ if (length <= 0) break;
+ FLD (f_callnum) = ((((FLD (f_5)) << (3))) | (((((FLD (f_6)) << (2))) | (((((FLD (f_7)) << (1))) | (FLD (f_11)))))));
+ }
+ break;
+ case MEP_OPERAND_CCCC :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_rm);
+ break;
+ case MEP_OPERAND_CCRN :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 28, 2, 32, total_length, pc, & fields->f_ccrn_hi);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_ccrn_lo);
+ if (length <= 0) break;
+ FLD (f_ccrn) = ((((FLD (f_ccrn_hi)) << (4))) | (FLD (f_ccrn_lo)));
+ }
+ break;
+ case MEP_OPERAND_CDISP8 :
+ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 24, 8, 32, total_length, pc, & fields->f_8s24);
+ break;
+ case MEP_OPERAND_CDISP8A2 :
+ {
+ long value;
+ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 24, 7, 32, total_length, pc, & value);
+ value = ((value) << (1));
+ fields->f_8s24a2 = value;
+ }
+ break;
+ case MEP_OPERAND_CDISP8A4 :
+ {
+ long value;
+ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 24, 6, 32, total_length, pc, & value);
+ value = ((value) << (2));
+ fields->f_8s24a4 = value;
+ }
+ break;
+ case MEP_OPERAND_CDISP8A8 :
+ {
+ long value;
+ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 24, 5, 32, total_length, pc, & value);
+ value = ((value) << (3));
+ fields->f_8s24a8 = value;
+ }
+ break;
+ case MEP_OPERAND_CIMM4 :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
+ break;
+ case MEP_OPERAND_CIMM5 :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 24, 5, 32, total_length, pc, & fields->f_5u24);
+ break;
+ case MEP_OPERAND_CODE16 :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_16u16);
+ break;
+ case MEP_OPERAND_CODE24 :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 8, 32, total_length, pc, & fields->f_24u4n_hi);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_24u4n_lo);
+ if (length <= 0) break;
+ FLD (f_24u4n) = ((((FLD (f_24u4n_hi)) << (16))) | (FLD (f_24u4n_lo)));
+ }
+ break;
+ case MEP_OPERAND_CP_FLAG :
+ break;
+ case MEP_OPERAND_CRN :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_crn);
+ break;
+ case MEP_OPERAND_CRN64 :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_crn);
+ break;
+ case MEP_OPERAND_CRNX :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 28, 1, 32, total_length, pc, & fields->f_crnx_hi);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_crnx_lo);
+ if (length <= 0) break;
+ FLD (f_crnx) = ((((FLD (f_crnx_hi)) << (4))) | (FLD (f_crnx_lo)));
+ }
+ break;
+ case MEP_OPERAND_CRNX64 :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 28, 1, 32, total_length, pc, & fields->f_crnx_hi);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_crnx_lo);
+ if (length <= 0) break;
+ FLD (f_crnx) = ((((FLD (f_crnx_hi)) << (4))) | (FLD (f_crnx_lo)));
+ }
+ break;
+ case MEP_OPERAND_CSRN :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 15, 1, 32, total_length, pc, & fields->f_csrn_hi);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_csrn_lo);
+ if (length <= 0) break;
+ FLD (f_csrn) = ((((FLD (f_csrn_hi)) << (4))) | (FLD (f_csrn_lo)));
+ }
+ break;
+ case MEP_OPERAND_CSRN_IDX :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 15, 1, 32, total_length, pc, & fields->f_csrn_hi);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_csrn_lo);
+ if (length <= 0) break;
+ FLD (f_csrn) = ((((FLD (f_csrn_hi)) << (4))) | (FLD (f_csrn_lo)));
+ }
+ break;
+ case MEP_OPERAND_DBG :
+ break;
+ case MEP_OPERAND_DEPC :
+ break;
+ case MEP_OPERAND_EPC :
+ break;
+ case MEP_OPERAND_EXC :
+ break;
+ case MEP_OPERAND_FMAX_CCRN :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_fmax_4_4);
+ break;
+ case MEP_OPERAND_FMAX_FRD :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 28, 1, 32, total_length, pc, & fields->f_fmax_28_1);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_fmax_4_4);
+ if (length <= 0) break;
+ FLD (f_fmax_frd) = ((((FLD (f_fmax_28_1)) << (4))) | (FLD (f_fmax_4_4)));
+ }
+ break;
+ case MEP_OPERAND_FMAX_FRD_INT :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 28, 1, 32, total_length, pc, & fields->f_fmax_28_1);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_fmax_4_4);
+ if (length <= 0) break;
+ FLD (f_fmax_frd) = ((((FLD (f_fmax_28_1)) << (4))) | (FLD (f_fmax_4_4)));
+ }
+ break;
+ case MEP_OPERAND_FMAX_FRM :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 30, 1, 32, total_length, pc, & fields->f_fmax_30_1);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 24, 4, 32, total_length, pc, & fields->f_fmax_24_4);
+ if (length <= 0) break;
+ FLD (f_fmax_frm) = ((((FLD (f_fmax_30_1)) << (4))) | (FLD (f_fmax_24_4)));
+ }
+ break;
+ case MEP_OPERAND_FMAX_FRN :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 29, 1, 32, total_length, pc, & fields->f_fmax_29_1);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 4, 32, total_length, pc, & fields->f_fmax_20_4);
+ if (length <= 0) break;
+ FLD (f_fmax_frn) = ((((FLD (f_fmax_29_1)) << (4))) | (FLD (f_fmax_20_4)));
+ }
+ break;
+ case MEP_OPERAND_FMAX_FRN_INT :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 29, 1, 32, total_length, pc, & fields->f_fmax_29_1);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 4, 32, total_length, pc, & fields->f_fmax_20_4);
+ if (length <= 0) break;
+ FLD (f_fmax_frn) = ((((FLD (f_fmax_29_1)) << (4))) | (FLD (f_fmax_20_4)));
+ }
+ break;
+ case MEP_OPERAND_FMAX_RM :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_fmax_rm);
+ break;
+ case MEP_OPERAND_HI :
+ break;
+ case MEP_OPERAND_LO :
+ break;
+ case MEP_OPERAND_LP :
+ break;
+ case MEP_OPERAND_MB0 :
+ break;
+ case MEP_OPERAND_MB1 :
+ break;
+ case MEP_OPERAND_ME0 :
+ break;
+ case MEP_OPERAND_ME1 :
+ break;
+ case MEP_OPERAND_NPC :
+ break;
+ case MEP_OPERAND_OPT :
+ break;
+ case MEP_OPERAND_PCABS24A2 :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_24u5a2n_hi);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 7, 32, total_length, pc, & fields->f_24u5a2n_lo);
+ if (length <= 0) break;
+ FLD (f_24u5a2n) = ((((FLD (f_24u5a2n_hi)) << (8))) | (((FLD (f_24u5a2n_lo)) << (1))));
+ }
+ break;
+ case MEP_OPERAND_PCREL12A2 :
+ {
+ long value;
+ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 4, 11, 32, total_length, pc, & value);
+ value = ((((value) << (1))) + (pc));
+ fields->f_12s4a2 = value;
+ }
+ break;
+ case MEP_OPERAND_PCREL17A2 :
+ {
+ long value;
+ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 16, 16, 32, total_length, pc, & value);
+ value = ((((value) << (1))) + (pc));
+ fields->f_17s16a2 = value;
+ }
+ break;
+ case MEP_OPERAND_PCREL24A2 :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 16, 16, 32, total_length, pc, & fields->f_24s5a2n_hi);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_PCREL_ADDR), 0, 5, 7, 32, total_length, pc, & fields->f_24s5a2n_lo);
+ if (length <= 0) break;
+ FLD (f_24s5a2n) = ((((((FLD (f_24s5a2n_hi)) << (8))) | (((FLD (f_24s5a2n_lo)) << (1))))) + (pc));
+ }
+ break;
+ case MEP_OPERAND_PCREL8A2 :
+ {
+ long value;
+ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 8, 7, 32, total_length, pc, & value);
+ value = ((((value) << (1))) + (pc));
+ fields->f_8s8a2 = value;
+ }
+ break;
+ case MEP_OPERAND_PSW :
+ break;
+ case MEP_OPERAND_R0 :
+ break;
+ case MEP_OPERAND_R1 :
+ break;
+ case MEP_OPERAND_RL :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 12, 4, 32, total_length, pc, & fields->f_rl);
+ break;
+ case MEP_OPERAND_RM :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_rm);
+ break;
+ case MEP_OPERAND_RMA :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_rm);
+ break;
+ case MEP_OPERAND_RN :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
+ break;
+ case MEP_OPERAND_RN3 :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RN3C :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RN3L :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RN3S :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RN3UC :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RN3UL :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RN3US :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
+ break;
+ case MEP_OPERAND_RNC :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
+ break;
+ case MEP_OPERAND_RNL :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
+ break;
+ case MEP_OPERAND_RNS :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
+ break;
+ case MEP_OPERAND_RNUC :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
+ break;
+ case MEP_OPERAND_RNUL :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
+ break;
+ case MEP_OPERAND_RNUS :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
+ break;
+ case MEP_OPERAND_SAR :
+ break;
+ case MEP_OPERAND_SDISP16 :
+ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, pc, & fields->f_16s16);
+ break;
+ case MEP_OPERAND_SIMM16 :
+ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, pc, & fields->f_16s16);
+ break;
+ case MEP_OPERAND_SIMM6 :
+ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 6, 32, total_length, pc, & fields->f_6s8);
+ break;
+ case MEP_OPERAND_SIMM8 :
+ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 8, 32, total_length, pc, & fields->f_8s8);
+ break;
+ case MEP_OPERAND_SP :
+ break;
+ case MEP_OPERAND_SPR :
+ break;
+ case MEP_OPERAND_TP :
+ break;
+ case MEP_OPERAND_TPR :
+ break;
+ case MEP_OPERAND_UDISP2 :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 6, 2, 32, total_length, pc, & fields->f_2u6);
+ break;
+ case MEP_OPERAND_UDISP7 :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 9, 7, 32, total_length, pc, & fields->f_7u9);
+ break;
+ case MEP_OPERAND_UDISP7A2 :
+ {
+ long value;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 9, 6, 32, total_length, pc, & value);
+ value = ((value) << (1));
+ fields->f_7u9a2 = value;
+ }
+ break;
+ case MEP_OPERAND_UDISP7A4 :
+ {
+ long value;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 9, 5, 32, total_length, pc, & value);
+ value = ((value) << (2));
+ fields->f_7u9a4 = value;
+ }
+ break;
+ case MEP_OPERAND_UIMM16 :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_16u16);
+ break;
+ case MEP_OPERAND_UIMM2 :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 10, 2, 32, total_length, pc, & fields->f_2u10);
+ break;
+ case MEP_OPERAND_UIMM24 :
+ {
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_24u8n_hi);
+ if (length <= 0) break;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 8, 32, total_length, pc, & fields->f_24u8n_lo);
+ if (length <= 0) break;
+ FLD (f_24u8n) = ((((FLD (f_24u8n_hi)) << (8))) | (FLD (f_24u8n_lo)));
+ }
+ break;
+ case MEP_OPERAND_UIMM3 :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_3u5);
+ break;
+ case MEP_OPERAND_UIMM4 :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_4u8);
+ break;
+ case MEP_OPERAND_UIMM5 :
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 5, 32, total_length, pc, & fields->f_5u8);
+ break;
+ case MEP_OPERAND_UIMM7A4 :
+ {
+ long value;
+ length = extract_normal (cd, ex_info, insn_value, 0, 0, 9, 5, 32, total_length, pc, & value);
+ value = ((value) << (2));
+ fields->f_7u9a4 = value;
+ }
+ break;
+ case MEP_OPERAND_ZERO :
+ break;
+
+ default :
+ /* xgettext:c-format */
+ fprintf (stderr, _("Unrecognized field %d while decoding insn.\n"),
+ opindex);
+ abort ();
+ }
+
+ return length;
+}
+
+cgen_insert_fn * const mep_cgen_insert_handlers[] =
+{
+ insert_insn_normal,
+};
+
+cgen_extract_fn * const mep_cgen_extract_handlers[] =
+{
+ extract_insn_normal,
+};
+
+int mep_cgen_get_int_operand (CGEN_CPU_DESC, int, const CGEN_FIELDS *);
+bfd_vma mep_cgen_get_vma_operand (CGEN_CPU_DESC, int, const CGEN_FIELDS *);
+
+/* Getting values from cgen_fields is handled by a collection of functions.
+ They are distinguished by the type of the VALUE argument they return.
+ TODO: floating point, inlining support, remove cases where result type
+ not appropriate. */
+
+int
+mep_cgen_get_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+ int opindex,
+ const CGEN_FIELDS * fields)
+{
+ int value;
+
+ switch (opindex)
+ {
+ case MEP_OPERAND_ADDR24A4 :
+ value = fields->f_24u8a4n;
+ break;
+ case MEP_OPERAND_CALLNUM :
+ value = fields->f_callnum;
+ break;
+ case MEP_OPERAND_CCCC :
+ value = fields->f_rm;
+ break;
+ case MEP_OPERAND_CCRN :
+ value = fields->f_ccrn;
+ break;
+ case MEP_OPERAND_CDISP8 :
+ value = fields->f_8s24;
+ break;
+ case MEP_OPERAND_CDISP8A2 :
+ value = fields->f_8s24a2;
+ break;
+ case MEP_OPERAND_CDISP8A4 :
+ value = fields->f_8s24a4;
+ break;
+ case MEP_OPERAND_CDISP8A8 :
+ value = fields->f_8s24a8;
+ break;
+ case MEP_OPERAND_CIMM4 :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_CIMM5 :
+ value = fields->f_5u24;
+ break;
+ case MEP_OPERAND_CODE16 :
+ value = fields->f_16u16;
+ break;
+ case MEP_OPERAND_CODE24 :
+ value = fields->f_24u4n;
+ break;
+ case MEP_OPERAND_CP_FLAG :
+ value = 0;
+ break;
+ case MEP_OPERAND_CRN :
+ value = fields->f_crn;
+ break;
+ case MEP_OPERAND_CRN64 :
+ value = fields->f_crn;
+ break;
+ case MEP_OPERAND_CRNX :
+ value = fields->f_crnx;
+ break;
+ case MEP_OPERAND_CRNX64 :
+ value = fields->f_crnx;
+ break;
+ case MEP_OPERAND_CSRN :
+ value = fields->f_csrn;
+ break;
+ case MEP_OPERAND_CSRN_IDX :
+ value = fields->f_csrn;
+ break;
+ case MEP_OPERAND_DBG :
+ value = 0;
+ break;
+ case MEP_OPERAND_DEPC :
+ value = 0;
+ break;
+ case MEP_OPERAND_EPC :
+ value = 0;
+ break;
+ case MEP_OPERAND_EXC :
+ value = 0;
+ break;
+ case MEP_OPERAND_FMAX_CCRN :
+ value = fields->f_fmax_4_4;
+ break;
+ case MEP_OPERAND_FMAX_FRD :
+ value = fields->f_fmax_frd;
+ break;
+ case MEP_OPERAND_FMAX_FRD_INT :
+ value = fields->f_fmax_frd;
+ break;
+ case MEP_OPERAND_FMAX_FRM :
+ value = fields->f_fmax_frm;
+ break;
+ case MEP_OPERAND_FMAX_FRN :
+ value = fields->f_fmax_frn;
+ break;
+ case MEP_OPERAND_FMAX_FRN_INT :
+ value = fields->f_fmax_frn;
+ break;
+ case MEP_OPERAND_FMAX_RM :
+ value = fields->f_fmax_rm;
+ break;
+ case MEP_OPERAND_HI :
+ value = 0;
+ break;
+ case MEP_OPERAND_LO :
+ value = 0;
+ break;
+ case MEP_OPERAND_LP :
+ value = 0;
+ break;
+ case MEP_OPERAND_MB0 :
+ value = 0;
+ break;
+ case MEP_OPERAND_MB1 :
+ value = 0;
+ break;
+ case MEP_OPERAND_ME0 :
+ value = 0;
+ break;
+ case MEP_OPERAND_ME1 :
+ value = 0;
+ break;
+ case MEP_OPERAND_NPC :
+ value = 0;
+ break;
+ case MEP_OPERAND_OPT :
+ value = 0;
+ break;
+ case MEP_OPERAND_PCABS24A2 :
+ value = fields->f_24u5a2n;
+ break;
+ case MEP_OPERAND_PCREL12A2 :
+ value = fields->f_12s4a2;
+ break;
+ case MEP_OPERAND_PCREL17A2 :
+ value = fields->f_17s16a2;
+ break;
+ case MEP_OPERAND_PCREL24A2 :
+ value = fields->f_24s5a2n;
+ break;
+ case MEP_OPERAND_PCREL8A2 :
+ value = fields->f_8s8a2;
+ break;
+ case MEP_OPERAND_PSW :
+ value = 0;
+ break;
+ case MEP_OPERAND_R0 :
+ value = 0;
+ break;
+ case MEP_OPERAND_R1 :
+ value = 0;
+ break;
+ case MEP_OPERAND_RL :
+ value = fields->f_rl;
+ break;
+ case MEP_OPERAND_RM :
+ value = fields->f_rm;
+ break;
+ case MEP_OPERAND_RMA :
+ value = fields->f_rm;
+ break;
+ case MEP_OPERAND_RN :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_RN3 :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RN3C :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RN3L :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RN3S :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RN3UC :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RN3UL :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RN3US :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RNC :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_RNL :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_RNS :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_RNUC :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_RNUL :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_RNUS :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_SAR :
+ value = 0;
+ break;
+ case MEP_OPERAND_SDISP16 :
+ value = fields->f_16s16;
+ break;
+ case MEP_OPERAND_SIMM16 :
+ value = fields->f_16s16;
+ break;
+ case MEP_OPERAND_SIMM6 :
+ value = fields->f_6s8;
+ break;
+ case MEP_OPERAND_SIMM8 :
+ value = fields->f_8s8;
+ break;
+ case MEP_OPERAND_SP :
+ value = 0;
+ break;
+ case MEP_OPERAND_SPR :
+ value = 0;
+ break;
+ case MEP_OPERAND_TP :
+ value = 0;
+ break;
+ case MEP_OPERAND_TPR :
+ value = 0;
+ break;
+ case MEP_OPERAND_UDISP2 :
+ value = fields->f_2u6;
+ break;
+ case MEP_OPERAND_UDISP7 :
+ value = fields->f_7u9;
+ break;
+ case MEP_OPERAND_UDISP7A2 :
+ value = fields->f_7u9a2;
+ break;
+ case MEP_OPERAND_UDISP7A4 :
+ value = fields->f_7u9a4;
+ break;
+ case MEP_OPERAND_UIMM16 :
+ value = fields->f_16u16;
+ break;
+ case MEP_OPERAND_UIMM2 :
+ value = fields->f_2u10;
+ break;
+ case MEP_OPERAND_UIMM24 :
+ value = fields->f_24u8n;
+ break;
+ case MEP_OPERAND_UIMM3 :
+ value = fields->f_3u5;
+ break;
+ case MEP_OPERAND_UIMM4 :
+ value = fields->f_4u8;
+ break;
+ case MEP_OPERAND_UIMM5 :
+ value = fields->f_5u8;
+ break;
+ case MEP_OPERAND_UIMM7A4 :
+ value = fields->f_7u9a4;
+ break;
+ case MEP_OPERAND_ZERO :
+ value = 0;
+ break;
+
+ default :
+ /* xgettext:c-format */
+ fprintf (stderr, _("Unrecognized field %d while getting int operand.\n"),
+ opindex);
+ abort ();
+ }
+
+ return value;
+}
+
+bfd_vma
+mep_cgen_get_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+ int opindex,
+ const CGEN_FIELDS * fields)
+{
+ bfd_vma value;
+
+ switch (opindex)
+ {
+ case MEP_OPERAND_ADDR24A4 :
+ value = fields->f_24u8a4n;
+ break;
+ case MEP_OPERAND_CALLNUM :
+ value = fields->f_callnum;
+ break;
+ case MEP_OPERAND_CCCC :
+ value = fields->f_rm;
+ break;
+ case MEP_OPERAND_CCRN :
+ value = fields->f_ccrn;
+ break;
+ case MEP_OPERAND_CDISP8 :
+ value = fields->f_8s24;
+ break;
+ case MEP_OPERAND_CDISP8A2 :
+ value = fields->f_8s24a2;
+ break;
+ case MEP_OPERAND_CDISP8A4 :
+ value = fields->f_8s24a4;
+ break;
+ case MEP_OPERAND_CDISP8A8 :
+ value = fields->f_8s24a8;
+ break;
+ case MEP_OPERAND_CIMM4 :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_CIMM5 :
+ value = fields->f_5u24;
+ break;
+ case MEP_OPERAND_CODE16 :
+ value = fields->f_16u16;
+ break;
+ case MEP_OPERAND_CODE24 :
+ value = fields->f_24u4n;
+ break;
+ case MEP_OPERAND_CP_FLAG :
+ value = 0;
+ break;
+ case MEP_OPERAND_CRN :
+ value = fields->f_crn;
+ break;
+ case MEP_OPERAND_CRN64 :
+ value = fields->f_crn;
+ break;
+ case MEP_OPERAND_CRNX :
+ value = fields->f_crnx;
+ break;
+ case MEP_OPERAND_CRNX64 :
+ value = fields->f_crnx;
+ break;
+ case MEP_OPERAND_CSRN :
+ value = fields->f_csrn;
+ break;
+ case MEP_OPERAND_CSRN_IDX :
+ value = fields->f_csrn;
+ break;
+ case MEP_OPERAND_DBG :
+ value = 0;
+ break;
+ case MEP_OPERAND_DEPC :
+ value = 0;
+ break;
+ case MEP_OPERAND_EPC :
+ value = 0;
+ break;
+ case MEP_OPERAND_EXC :
+ value = 0;
+ break;
+ case MEP_OPERAND_FMAX_CCRN :
+ value = fields->f_fmax_4_4;
+ break;
+ case MEP_OPERAND_FMAX_FRD :
+ value = fields->f_fmax_frd;
+ break;
+ case MEP_OPERAND_FMAX_FRD_INT :
+ value = fields->f_fmax_frd;
+ break;
+ case MEP_OPERAND_FMAX_FRM :
+ value = fields->f_fmax_frm;
+ break;
+ case MEP_OPERAND_FMAX_FRN :
+ value = fields->f_fmax_frn;
+ break;
+ case MEP_OPERAND_FMAX_FRN_INT :
+ value = fields->f_fmax_frn;
+ break;
+ case MEP_OPERAND_FMAX_RM :
+ value = fields->f_fmax_rm;
+ break;
+ case MEP_OPERAND_HI :
+ value = 0;
+ break;
+ case MEP_OPERAND_LO :
+ value = 0;
+ break;
+ case MEP_OPERAND_LP :
+ value = 0;
+ break;
+ case MEP_OPERAND_MB0 :
+ value = 0;
+ break;
+ case MEP_OPERAND_MB1 :
+ value = 0;
+ break;
+ case MEP_OPERAND_ME0 :
+ value = 0;
+ break;
+ case MEP_OPERAND_ME1 :
+ value = 0;
+ break;
+ case MEP_OPERAND_NPC :
+ value = 0;
+ break;
+ case MEP_OPERAND_OPT :
+ value = 0;
+ break;
+ case MEP_OPERAND_PCABS24A2 :
+ value = fields->f_24u5a2n;
+ break;
+ case MEP_OPERAND_PCREL12A2 :
+ value = fields->f_12s4a2;
+ break;
+ case MEP_OPERAND_PCREL17A2 :
+ value = fields->f_17s16a2;
+ break;
+ case MEP_OPERAND_PCREL24A2 :
+ value = fields->f_24s5a2n;
+ break;
+ case MEP_OPERAND_PCREL8A2 :
+ value = fields->f_8s8a2;
+ break;
+ case MEP_OPERAND_PSW :
+ value = 0;
+ break;
+ case MEP_OPERAND_R0 :
+ value = 0;
+ break;
+ case MEP_OPERAND_R1 :
+ value = 0;
+ break;
+ case MEP_OPERAND_RL :
+ value = fields->f_rl;
+ break;
+ case MEP_OPERAND_RM :
+ value = fields->f_rm;
+ break;
+ case MEP_OPERAND_RMA :
+ value = fields->f_rm;
+ break;
+ case MEP_OPERAND_RN :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_RN3 :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RN3C :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RN3L :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RN3S :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RN3UC :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RN3UL :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RN3US :
+ value = fields->f_rn3;
+ break;
+ case MEP_OPERAND_RNC :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_RNL :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_RNS :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_RNUC :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_RNUL :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_RNUS :
+ value = fields->f_rn;
+ break;
+ case MEP_OPERAND_SAR :
+ value = 0;
+ break;
+ case MEP_OPERAND_SDISP16 :
+ value = fields->f_16s16;
+ break;
+ case MEP_OPERAND_SIMM16 :
+ value = fields->f_16s16;
+ break;
+ case MEP_OPERAND_SIMM6 :
+ value = fields->f_6s8;
+ break;
+ case MEP_OPERAND_SIMM8 :
+ value = fields->f_8s8;
+ break;
+ case MEP_OPERAND_SP :
+ value = 0;
+ break;
+ case MEP_OPERAND_SPR :
+ value = 0;
+ break;
+ case MEP_OPERAND_TP :
+ value = 0;
+ break;
+ case MEP_OPERAND_TPR :
+ value = 0;
+ break;
+ case MEP_OPERAND_UDISP2 :
+ value = fields->f_2u6;
+ break;
+ case MEP_OPERAND_UDISP7 :
+ value = fields->f_7u9;
+ break;
+ case MEP_OPERAND_UDISP7A2 :
+ value = fields->f_7u9a2;
+ break;
+ case MEP_OPERAND_UDISP7A4 :
+ value = fields->f_7u9a4;
+ break;
+ case MEP_OPERAND_UIMM16 :
+ value = fields->f_16u16;
+ break;
+ case MEP_OPERAND_UIMM2 :
+ value = fields->f_2u10;
+ break;
+ case MEP_OPERAND_UIMM24 :
+ value = fields->f_24u8n;
+ break;
+ case MEP_OPERAND_UIMM3 :
+ value = fields->f_3u5;
+ break;
+ case MEP_OPERAND_UIMM4 :
+ value = fields->f_4u8;
+ break;
+ case MEP_OPERAND_UIMM5 :
+ value = fields->f_5u8;
+ break;
+ case MEP_OPERAND_UIMM7A4 :
+ value = fields->f_7u9a4;
+ break;
+ case MEP_OPERAND_ZERO :
+ value = 0;
+ break;
+
+ default :
+ /* xgettext:c-format */
+ fprintf (stderr, _("Unrecognized field %d while getting vma operand.\n"),
+ opindex);
+ abort ();
+ }
+
+ return value;
+}
+
+void mep_cgen_set_int_operand (CGEN_CPU_DESC, int, CGEN_FIELDS *, int);
+void mep_cgen_set_vma_operand (CGEN_CPU_DESC, int, CGEN_FIELDS *, bfd_vma);
+
+/* Stuffing values in cgen_fields is handled by a collection of functions.
+ They are distinguished by the type of the VALUE argument they accept.
+ TODO: floating point, inlining support, remove cases where argument type
+ not appropriate. */
+
+void
+mep_cgen_set_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+ int opindex,
+ CGEN_FIELDS * fields,
+ int value)
+{
+ switch (opindex)
+ {
+ case MEP_OPERAND_ADDR24A4 :
+ fields->f_24u8a4n = value;
+ break;
+ case MEP_OPERAND_CALLNUM :
+ fields->f_callnum = value;
+ break;
+ case MEP_OPERAND_CCCC :
+ fields->f_rm = value;
+ break;
+ case MEP_OPERAND_CCRN :
+ fields->f_ccrn = value;
+ break;
+ case MEP_OPERAND_CDISP8 :
+ fields->f_8s24 = value;
+ break;
+ case MEP_OPERAND_CDISP8A2 :
+ fields->f_8s24a2 = value;
+ break;
+ case MEP_OPERAND_CDISP8A4 :
+ fields->f_8s24a4 = value;
+ break;
+ case MEP_OPERAND_CDISP8A8 :
+ fields->f_8s24a8 = value;
+ break;
+ case MEP_OPERAND_CIMM4 :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_CIMM5 :
+ fields->f_5u24 = value;
+ break;
+ case MEP_OPERAND_CODE16 :
+ fields->f_16u16 = value;
+ break;
+ case MEP_OPERAND_CODE24 :
+ fields->f_24u4n = value;
+ break;
+ case MEP_OPERAND_CP_FLAG :
+ break;
+ case MEP_OPERAND_CRN :
+ fields->f_crn = value;
+ break;
+ case MEP_OPERAND_CRN64 :
+ fields->f_crn = value;
+ break;
+ case MEP_OPERAND_CRNX :
+ fields->f_crnx = value;
+ break;
+ case MEP_OPERAND_CRNX64 :
+ fields->f_crnx = value;
+ break;
+ case MEP_OPERAND_CSRN :
+ fields->f_csrn = value;
+ break;
+ case MEP_OPERAND_CSRN_IDX :
+ fields->f_csrn = value;
+ break;
+ case MEP_OPERAND_DBG :
+ break;
+ case MEP_OPERAND_DEPC :
+ break;
+ case MEP_OPERAND_EPC :
+ break;
+ case MEP_OPERAND_EXC :
+ break;
+ case MEP_OPERAND_FMAX_CCRN :
+ fields->f_fmax_4_4 = value;
+ break;
+ case MEP_OPERAND_FMAX_FRD :
+ fields->f_fmax_frd = value;
+ break;
+ case MEP_OPERAND_FMAX_FRD_INT :
+ fields->f_fmax_frd = value;
+ break;
+ case MEP_OPERAND_FMAX_FRM :
+ fields->f_fmax_frm = value;
+ break;
+ case MEP_OPERAND_FMAX_FRN :
+ fields->f_fmax_frn = value;
+ break;
+ case MEP_OPERAND_FMAX_FRN_INT :
+ fields->f_fmax_frn = value;
+ break;
+ case MEP_OPERAND_FMAX_RM :
+ fields->f_fmax_rm = value;
+ break;
+ case MEP_OPERAND_HI :
+ break;
+ case MEP_OPERAND_LO :
+ break;
+ case MEP_OPERAND_LP :
+ break;
+ case MEP_OPERAND_MB0 :
+ break;
+ case MEP_OPERAND_MB1 :
+ break;
+ case MEP_OPERAND_ME0 :
+ break;
+ case MEP_OPERAND_ME1 :
+ break;
+ case MEP_OPERAND_NPC :
+ break;
+ case MEP_OPERAND_OPT :
+ break;
+ case MEP_OPERAND_PCABS24A2 :
+ fields->f_24u5a2n = value;
+ break;
+ case MEP_OPERAND_PCREL12A2 :
+ fields->f_12s4a2 = value;
+ break;
+ case MEP_OPERAND_PCREL17A2 :
+ fields->f_17s16a2 = value;
+ break;
+ case MEP_OPERAND_PCREL24A2 :
+ fields->f_24s5a2n = value;
+ break;
+ case MEP_OPERAND_PCREL8A2 :
+ fields->f_8s8a2 = value;
+ break;
+ case MEP_OPERAND_PSW :
+ break;
+ case MEP_OPERAND_R0 :
+ break;
+ case MEP_OPERAND_R1 :
+ break;
+ case MEP_OPERAND_RL :
+ fields->f_rl = value;
+ break;
+ case MEP_OPERAND_RM :
+ fields->f_rm = value;
+ break;
+ case MEP_OPERAND_RMA :
+ fields->f_rm = value;
+ break;
+ case MEP_OPERAND_RN :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_RN3 :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RN3C :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RN3L :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RN3S :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RN3UC :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RN3UL :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RN3US :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RNC :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_RNL :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_RNS :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_RNUC :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_RNUL :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_RNUS :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_SAR :
+ break;
+ case MEP_OPERAND_SDISP16 :
+ fields->f_16s16 = value;
+ break;
+ case MEP_OPERAND_SIMM16 :
+ fields->f_16s16 = value;
+ break;
+ case MEP_OPERAND_SIMM6 :
+ fields->f_6s8 = value;
+ break;
+ case MEP_OPERAND_SIMM8 :
+ fields->f_8s8 = value;
+ break;
+ case MEP_OPERAND_SP :
+ break;
+ case MEP_OPERAND_SPR :
+ break;
+ case MEP_OPERAND_TP :
+ break;
+ case MEP_OPERAND_TPR :
+ break;
+ case MEP_OPERAND_UDISP2 :
+ fields->f_2u6 = value;
+ break;
+ case MEP_OPERAND_UDISP7 :
+ fields->f_7u9 = value;
+ break;
+ case MEP_OPERAND_UDISP7A2 :
+ fields->f_7u9a2 = value;
+ break;
+ case MEP_OPERAND_UDISP7A4 :
+ fields->f_7u9a4 = value;
+ break;
+ case MEP_OPERAND_UIMM16 :
+ fields->f_16u16 = value;
+ break;
+ case MEP_OPERAND_UIMM2 :
+ fields->f_2u10 = value;
+ break;
+ case MEP_OPERAND_UIMM24 :
+ fields->f_24u8n = value;
+ break;
+ case MEP_OPERAND_UIMM3 :
+ fields->f_3u5 = value;
+ break;
+ case MEP_OPERAND_UIMM4 :
+ fields->f_4u8 = value;
+ break;
+ case MEP_OPERAND_UIMM5 :
+ fields->f_5u8 = value;
+ break;
+ case MEP_OPERAND_UIMM7A4 :
+ fields->f_7u9a4 = value;
+ break;
+ case MEP_OPERAND_ZERO :
+ break;
+
+ default :
+ /* xgettext:c-format */
+ fprintf (stderr, _("Unrecognized field %d while setting int operand.\n"),
+ opindex);
+ abort ();
+ }
+}
+
+void
+mep_cgen_set_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+ int opindex,
+ CGEN_FIELDS * fields,
+ bfd_vma value)
+{
+ switch (opindex)
+ {
+ case MEP_OPERAND_ADDR24A4 :
+ fields->f_24u8a4n = value;
+ break;
+ case MEP_OPERAND_CALLNUM :
+ fields->f_callnum = value;
+ break;
+ case MEP_OPERAND_CCCC :
+ fields->f_rm = value;
+ break;
+ case MEP_OPERAND_CCRN :
+ fields->f_ccrn = value;
+ break;
+ case MEP_OPERAND_CDISP8 :
+ fields->f_8s24 = value;
+ break;
+ case MEP_OPERAND_CDISP8A2 :
+ fields->f_8s24a2 = value;
+ break;
+ case MEP_OPERAND_CDISP8A4 :
+ fields->f_8s24a4 = value;
+ break;
+ case MEP_OPERAND_CDISP8A8 :
+ fields->f_8s24a8 = value;
+ break;
+ case MEP_OPERAND_CIMM4 :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_CIMM5 :
+ fields->f_5u24 = value;
+ break;
+ case MEP_OPERAND_CODE16 :
+ fields->f_16u16 = value;
+ break;
+ case MEP_OPERAND_CODE24 :
+ fields->f_24u4n = value;
+ break;
+ case MEP_OPERAND_CP_FLAG :
+ break;
+ case MEP_OPERAND_CRN :
+ fields->f_crn = value;
+ break;
+ case MEP_OPERAND_CRN64 :
+ fields->f_crn = value;
+ break;
+ case MEP_OPERAND_CRNX :
+ fields->f_crnx = value;
+ break;
+ case MEP_OPERAND_CRNX64 :
+ fields->f_crnx = value;
+ break;
+ case MEP_OPERAND_CSRN :
+ fields->f_csrn = value;
+ break;
+ case MEP_OPERAND_CSRN_IDX :
+ fields->f_csrn = value;
+ break;
+ case MEP_OPERAND_DBG :
+ break;
+ case MEP_OPERAND_DEPC :
+ break;
+ case MEP_OPERAND_EPC :
+ break;
+ case MEP_OPERAND_EXC :
+ break;
+ case MEP_OPERAND_FMAX_CCRN :
+ fields->f_fmax_4_4 = value;
+ break;
+ case MEP_OPERAND_FMAX_FRD :
+ fields->f_fmax_frd = value;
+ break;
+ case MEP_OPERAND_FMAX_FRD_INT :
+ fields->f_fmax_frd = value;
+ break;
+ case MEP_OPERAND_FMAX_FRM :
+ fields->f_fmax_frm = value;
+ break;
+ case MEP_OPERAND_FMAX_FRN :
+ fields->f_fmax_frn = value;
+ break;
+ case MEP_OPERAND_FMAX_FRN_INT :
+ fields->f_fmax_frn = value;
+ break;
+ case MEP_OPERAND_FMAX_RM :
+ fields->f_fmax_rm = value;
+ break;
+ case MEP_OPERAND_HI :
+ break;
+ case MEP_OPERAND_LO :
+ break;
+ case MEP_OPERAND_LP :
+ break;
+ case MEP_OPERAND_MB0 :
+ break;
+ case MEP_OPERAND_MB1 :
+ break;
+ case MEP_OPERAND_ME0 :
+ break;
+ case MEP_OPERAND_ME1 :
+ break;
+ case MEP_OPERAND_NPC :
+ break;
+ case MEP_OPERAND_OPT :
+ break;
+ case MEP_OPERAND_PCABS24A2 :
+ fields->f_24u5a2n = value;
+ break;
+ case MEP_OPERAND_PCREL12A2 :
+ fields->f_12s4a2 = value;
+ break;
+ case MEP_OPERAND_PCREL17A2 :
+ fields->f_17s16a2 = value;
+ break;
+ case MEP_OPERAND_PCREL24A2 :
+ fields->f_24s5a2n = value;
+ break;
+ case MEP_OPERAND_PCREL8A2 :
+ fields->f_8s8a2 = value;
+ break;
+ case MEP_OPERAND_PSW :
+ break;
+ case MEP_OPERAND_R0 :
+ break;
+ case MEP_OPERAND_R1 :
+ break;
+ case MEP_OPERAND_RL :
+ fields->f_rl = value;
+ break;
+ case MEP_OPERAND_RM :
+ fields->f_rm = value;
+ break;
+ case MEP_OPERAND_RMA :
+ fields->f_rm = value;
+ break;
+ case MEP_OPERAND_RN :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_RN3 :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RN3C :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RN3L :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RN3S :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RN3UC :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RN3UL :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RN3US :
+ fields->f_rn3 = value;
+ break;
+ case MEP_OPERAND_RNC :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_RNL :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_RNS :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_RNUC :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_RNUL :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_RNUS :
+ fields->f_rn = value;
+ break;
+ case MEP_OPERAND_SAR :
+ break;
+ case MEP_OPERAND_SDISP16 :
+ fields->f_16s16 = value;
+ break;
+ case MEP_OPERAND_SIMM16 :
+ fields->f_16s16 = value;
+ break;
+ case MEP_OPERAND_SIMM6 :
+ fields->f_6s8 = value;
+ break;
+ case MEP_OPERAND_SIMM8 :
+ fields->f_8s8 = value;
+ break;
+ case MEP_OPERAND_SP :
+ break;
+ case MEP_OPERAND_SPR :
+ break;
+ case MEP_OPERAND_TP :
+ break;
+ case MEP_OPERAND_TPR :
+ break;
+ case MEP_OPERAND_UDISP2 :
+ fields->f_2u6 = value;
+ break;
+ case MEP_OPERAND_UDISP7 :
+ fields->f_7u9 = value;
+ break;
+ case MEP_OPERAND_UDISP7A2 :
+ fields->f_7u9a2 = value;
+ break;
+ case MEP_OPERAND_UDISP7A4 :
+ fields->f_7u9a4 = value;
+ break;
+ case MEP_OPERAND_UIMM16 :
+ fields->f_16u16 = value;
+ break;
+ case MEP_OPERAND_UIMM2 :
+ fields->f_2u10 = value;
+ break;
+ case MEP_OPERAND_UIMM24 :
+ fields->f_24u8n = value;
+ break;
+ case MEP_OPERAND_UIMM3 :
+ fields->f_3u5 = value;
+ break;
+ case MEP_OPERAND_UIMM4 :
+ fields->f_4u8 = value;
+ break;
+ case MEP_OPERAND_UIMM5 :
+ fields->f_5u8 = value;
+ break;
+ case MEP_OPERAND_UIMM7A4 :
+ fields->f_7u9a4 = value;
+ break;
+ case MEP_OPERAND_ZERO :
+ break;
+
+ default :
+ /* xgettext:c-format */
+ fprintf (stderr, _("Unrecognized field %d while setting vma operand.\n"),
+ opindex);
+ abort ();
+ }
+}
+
+/* Function to call before using the instruction builder tables. */
+
+void
+mep_cgen_init_ibld_table (CGEN_CPU_DESC cd)
+{
+ cd->insert_handlers = & mep_cgen_insert_handlers[0];
+ cd->extract_handlers = & mep_cgen_extract_handlers[0];
+
+ cd->insert_operand = mep_cgen_insert_operand;
+ cd->extract_operand = mep_cgen_extract_operand;
+
+ cd->get_int_operand = mep_cgen_get_int_operand;
+ cd->set_int_operand = mep_cgen_set_int_operand;
+ cd->get_vma_operand = mep_cgen_get_vma_operand;
+ cd->set_vma_operand = mep_cgen_set_vma_operand;
+}
diff --git a/opcodes/mep-opc.c b/opcodes/mep-opc.c
new file mode 100644
index 000000000000..ab5cf4aba124
--- /dev/null
+++ b/opcodes/mep-opc.c
@@ -0,0 +1,2274 @@
+/* Instruction opcode table for mep.
+
+THIS FILE IS MACHINE GENERATED WITH CGEN.
+
+Copyright 1996-2005 Free Software Foundation, Inc.
+
+This file is part of the GNU Binutils and/or GDB, the GNU debugger.
+
+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.
+
+*/
+
+#include "sysdep.h"
+#include "ansidecl.h"
+#include "bfd.h"
+#include "symcat.h"
+#include "mep-desc.h"
+#include "mep-opc.h"
+#include "libiberty.h"
+
+/* -- opc.c */
+#include "elf/mep.h"
+
+/* A mask for all ISAs executed by the core. */
+CGEN_ATTR_VALUE_BITSET_TYPE mep_all_core_isas_mask = {0, 0};
+
+void
+init_mep_all_core_isas_mask (void)
+{
+ if (mep_all_core_isas_mask.length != 0)
+ return;
+ cgen_bitset_init (& mep_all_core_isas_mask, ISA_MAX);
+ cgen_bitset_set (& mep_all_core_isas_mask, ISA_MEP);
+ /* begin-all-core-isas */
+ cgen_bitset_add (& mep_all_core_isas_mask, ISA_EXT_CORE1);
+ cgen_bitset_add (& mep_all_core_isas_mask, ISA_EXT_CORE2);
+ /* end-all-core-isas */
+}
+
+CGEN_ATTR_VALUE_BITSET_TYPE mep_all_cop_isas_mask = {0, 0};
+
+void
+init_mep_all_cop_isas_mask (void)
+{
+ if (mep_all_cop_isas_mask.length != 0)
+ return;
+ cgen_bitset_init (& mep_all_cop_isas_mask, ISA_MAX);
+ /* begin-all-cop-isas */
+ cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_16);
+ cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_32);
+ cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_48);
+ cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_64);
+ /* end-all-cop-isas */
+}
+
+int
+mep_insn_supported_by_isa (const CGEN_INSN *insn, CGEN_ATTR_VALUE_BITSET_TYPE *isa_mask)
+{
+ CGEN_BITSET insn_isas = CGEN_INSN_BITSET_ATTR_VALUE (insn, CGEN_INSN_ISA);
+ return cgen_bitset_intersect_p (& insn_isas, isa_mask);
+}
+
+#define OPTION_MASK \
+ ( (1 << CGEN_INSN_OPTIONAL_BIT_INSN) \
+ | (1 << CGEN_INSN_OPTIONAL_MUL_INSN) \
+ | (1 << CGEN_INSN_OPTIONAL_DIV_INSN) \
+ | (1 << CGEN_INSN_OPTIONAL_DEBUG_INSN) \
+ | (1 << CGEN_INSN_OPTIONAL_LDZ_INSN) \
+ | (1 << CGEN_INSN_OPTIONAL_ABS_INSN) \
+ | (1 << CGEN_INSN_OPTIONAL_AVE_INSN) \
+ | (1 << CGEN_INSN_OPTIONAL_MINMAX_INSN) \
+ | (1 << CGEN_INSN_OPTIONAL_CLIP_INSN) \
+ | (1 << CGEN_INSN_OPTIONAL_SAT_INSN) \
+ | (1 << CGEN_INSN_OPTIONAL_UCI_INSN) \
+ | (1 << CGEN_INSN_OPTIONAL_DSP_INSN) \
+ | (1 << CGEN_INSN_OPTIONAL_CP_INSN) \
+ | (1 << CGEN_INSN_OPTIONAL_CP64_INSN) )
+
+
+mep_config_map_struct mep_config_map[] =
+{
+ /* config-map-start */
+ /* Default entry: mep core only, all options enabled. */
+ { "", 0, EF_MEP_CPU_C2, 1, 0, {1,"\x0"}, {1,"\x0"}, {1,"\x0"}, {1,"\x0"}, {1,"\x0"}, {1,"\x80"}, OPTION_MASK },
+ { "simple", CONFIG_SIMPLE, EF_MEP_CPU_C2, 1, 0, { 1, "\x0" }, { 1, "\x0" }, { 1, "\x0" }, { 1, "\x0" }, { 1, "\x0" }, { 1, "\xc0" },
+ 0 },
+ { "fmax", CONFIG_FMAX, EF_MEP_CPU_C2, 1, 0, { 1, "\x10" }, { 1, "\x8" }, { 1, "\x4" }, { 1, "\x2" }, { 1, "\x1e" }, { 1, "\xa0" },
+ 0
+ | (1 << CGEN_INSN_OPTIONAL_CP_INSN)
+ | (1 << CGEN_INSN_OPTIONAL_MUL_INSN)
+ | (1 << CGEN_INSN_OPTIONAL_DIV_INSN)
+ | (1 << CGEN_INSN_OPTIONAL_BIT_INSN)
+ | (1 << CGEN_INSN_OPTIONAL_LDZ_INSN)
+ | (1 << CGEN_INSN_OPTIONAL_ABS_INSN)
+ | (1 << CGEN_INSN_OPTIONAL_AVE_INSN)
+ | (1 << CGEN_INSN_OPTIONAL_MINMAX_INSN)
+ | (1 << CGEN_INSN_OPTIONAL_CLIP_INSN)
+ | (1 << CGEN_INSN_OPTIONAL_SAT_INSN) },
+ /* config-map-end */
+ { 0, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, 0 }
+};
+
+int mep_config_index = 0;
+
+static int
+check_configured_mach (int machs)
+{
+ /* All base insns are supported. */
+ int mach = 1 << MACH_BASE;
+ switch (MEP_CPU)
+ {
+ case EF_MEP_CPU_C2:
+ case EF_MEP_CPU_C3:
+ mach |= (1 << MACH_MEP);
+ break;
+ case EF_MEP_CPU_H1:
+ mach |= (1 << MACH_H1);
+ break;
+ default:
+ break;
+ }
+ return machs & mach;
+}
+
+int
+mep_cgen_insn_supported (CGEN_CPU_DESC cd, const CGEN_INSN *insn)
+{
+ int iconfig = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_CONFIG);
+ int machs = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_MACH);
+ CGEN_BITSET isas = CGEN_INSN_BITSET_ATTR_VALUE (insn, CGEN_INSN_ISA);
+ int ok1;
+ int ok2;
+ int ok3;
+
+ /* If the insn has an option bit set that we don't want,
+ reject it. */
+ if (CGEN_INSN_ATTRS (insn)->bool & OPTION_MASK & ~MEP_OMASK)
+ return 0;
+
+ /* If attributes are absent, assume no restriction. */
+ if (machs == 0)
+ machs = ~0;
+
+ ok1 = ((machs & cd->machs) && cgen_bitset_intersect_p (& isas, cd->isas));
+ /* If the insn is config-specific, make sure it matches. */
+ ok2 = (iconfig == 0 || iconfig == MEP_CONFIG);
+ /* Make sure the insn is supported by the configured mach */
+ ok3 = check_configured_mach (machs);
+
+ return (ok1 && ok2 && ok3);
+}
+/* The hash functions are recorded here to help keep assembler code out of
+ the disassembler and vice versa. */
+
+static int asm_hash_insn_p (const CGEN_INSN *);
+static unsigned int asm_hash_insn (const char *);
+static int dis_hash_insn_p (const CGEN_INSN *);
+static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT);
+
+/* Instruction formats. */
+
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define F(f) & mep_cgen_ifld_table[MEP_##f]
+#else
+#define F(f) & mep_cgen_ifld_table[MEP_/**/f]
+#endif
+static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
+ 0, 0, 0x0, { { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sb ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sh ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sw ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_lbu ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_lhu ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sw_sp ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf083, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8) }, { F (F_7U9A4) }, { F (F_SUB2) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sb_tp ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf880, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sh_tp ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf881, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9A2) }, { F (F_15) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sw_tp ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf883, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9A4) }, { F (F_SUB2) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_lbu_tp ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf880, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_lhu_tp ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf881, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9A2) }, { F (F_15) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sb16 ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sh16 ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sw16 ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_lbu16 ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_lhu16 ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sw24 ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf0030000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_24U8A4N) }, { F (F_SUB2) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_extb ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf0ff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_ssarb ATTRIBUTE_UNUSED = {
+ 16, 16, 0xfc0f, { { F (F_MAJOR) }, { F (F_4) }, { F (F_5) }, { F (F_2U6) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_mov ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_movi8 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8S8) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_movi16 ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf0ff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_movu24 ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf8000000, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_24U8N) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_movu16 ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf0ff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16U16) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_add3 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_RL) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf003, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_6S8) }, { F (F_SUB2) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_add3i ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf083, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8) }, { F (F_7U9A4) }, { F (F_SUB2) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_slt3i ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf007, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_5U8) }, { F (F_SUB3) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_add3x ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sltu3x ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16U16) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_bra ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf001, { { F (F_MAJOR) }, { F (F_12S4A2) }, { F (F_15) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_beqz ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf001, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8S8A2) }, { F (F_15) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_beqi ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_4U8) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_beq ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_bsr24 ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf80f0000, { { F (F_MAJOR) }, { F (F_4) }, { F (F_24S5A2N) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_jmp ATTRIBUTE_UNUSED = {
+ 16, 16, 0xff0f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_jmp24 ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf80f0000, { { F (F_MAJOR) }, { F (F_4) }, { F (F_24U5A2N) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_ret ATTRIBUTE_UNUSED = {
+ 16, 16, 0xffff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_repeat ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf0ff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_erepeat ATTRIBUTE_UNUSED = {
+ 32, 32, 0xffff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_stc_lp ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf0ff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_CSRN_LO) }, { F (F_12) }, { F (F_13) }, { F (F_14) }, { F (F_CSRN_HI) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_stc ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00e, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_CSRN) }, { F (F_12) }, { F (F_13) }, { F (F_14) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_swi ATTRIBUTE_UNUSED = {
+ 16, 16, 0xffcf, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8) }, { F (F_9) }, { F (F_2U10) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_bsetm ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf80f, { { F (F_MAJOR) }, { F (F_4) }, { F (F_3U5) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_tas ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_cache ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_madd ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00fffff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16U16) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_clip ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf0ffff07, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_5U24) }, { F (F_29) }, { F (F_30) }, { F (F_31) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_swcp ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_smcp ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_swcp16 ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_smcp16 ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sbcpa ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00fff00, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_8S24) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_shcpa ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00fff01, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_8S24A2) }, { F (F_31) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_swcpa ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00fff03, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_8S24A4) }, { F (F_30) }, { F (F_31) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_smcpa ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00fff07, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_8S24A8) }, { F (F_29) }, { F (F_30) }, { F (F_31) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_bcpeq ATTRIBUTE_UNUSED = {
+ 32, 32, 0xff0f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sim_syscall ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf8ef, { { F (F_MAJOR) }, { F (F_4) }, { F (F_CALLNUM) }, { F (F_8) }, { F (F_9) }, { F (F_10) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_fadds ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf0fff001, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_FRM) }, { F (F_FMAX_31_1) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_fsqrts ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf0fff0f3, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_24_4) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_froundws ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf0fff0f3, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_24_4) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_fcvtsw ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf0fff0f3, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_24_4) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_fcmpfs ATTRIBUTE_UNUSED = {
+ 32, 32, 0xfffff009, { { F (F_FMAX_0_4) }, { F (F_FMAX_4_4) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_FRM) }, { F (F_FMAX_28_1) }, { F (F_FMAX_31_1) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_cmov_frn_rm ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00ffff7, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_RM) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_20_4) }, { F (F_FMAX_24_4) }, { F (F_FMAX_29_1) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_cmovc_ccrn_rm ATTRIBUTE_UNUSED = {
+ 32, 32, 0xf00fffff, { { F (F_FMAX_0_4) }, { F (F_FMAX_4_4) }, { F (F_FMAX_RM) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_20_4) }, { F (F_FMAX_24_4) }, { F (F_FMAX_28_1) }, { F (F_FMAX_29_1) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } }
+};
+
+#undef F
+
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define A(a) (1 << CGEN_INSN_##a)
+#else
+#define A(a) (1 << CGEN_INSN_/**/a)
+#endif
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define OPERAND(op) MEP_OPERAND_##op
+#else
+#define OPERAND(op) MEP_OPERAND_/**/op
+#endif
+#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
+#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
+
+/* The instruction table. */
+
+static const CGEN_OPCODE mep_cgen_insn_opcode_table[MAX_INSNS] =
+{
+ /* Special null first entry.
+ A `num' value of zero is thus invalid.
+ Also, the special `invalid' insn resides here. */
+ { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
+/* sb $rnc,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNC), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_sb, { 0x8 }
+ },
+/* sh $rns,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNS), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_sh, { 0x9 }
+ },
+/* sw $rnl,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNL), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_sw, { 0xa }
+ },
+/* lb $rnc,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNC), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_sb, { 0xc }
+ },
+/* lh $rns,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNS), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_sh, { 0xd }
+ },
+/* lw $rnl,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNL), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_sw, { 0xe }
+ },
+/* lbu $rnuc,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNUC), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_lbu, { 0xb }
+ },
+/* lhu $rnus,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNUS), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_lhu, { 0xf }
+ },
+/* sw $rnl,$udisp7a4($spr) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNL), ',', OP (UDISP7A4), '(', OP (SPR), ')', 0 } },
+ & ifmt_sw_sp, { 0x4002 }
+ },
+/* lw $rnl,$udisp7a4($spr) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNL), ',', OP (UDISP7A4), '(', OP (SPR), ')', 0 } },
+ & ifmt_sw_sp, { 0x4003 }
+ },
+/* sb $rn3c,$udisp7($tpr) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN3C), ',', OP (UDISP7), '(', OP (TPR), ')', 0 } },
+ & ifmt_sb_tp, { 0x8000 }
+ },
+/* sh $rn3s,$udisp7a2($tpr) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN3S), ',', OP (UDISP7A2), '(', OP (TPR), ')', 0 } },
+ & ifmt_sh_tp, { 0x8080 }
+ },
+/* sw $rn3l,$udisp7a4($tpr) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN3L), ',', OP (UDISP7A4), '(', OP (TPR), ')', 0 } },
+ & ifmt_sw_tp, { 0x4082 }
+ },
+/* lb $rn3c,$udisp7($tpr) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN3C), ',', OP (UDISP7), '(', OP (TPR), ')', 0 } },
+ & ifmt_sb_tp, { 0x8800 }
+ },
+/* lh $rn3s,$udisp7a2($tpr) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN3S), ',', OP (UDISP7A2), '(', OP (TPR), ')', 0 } },
+ & ifmt_sh_tp, { 0x8880 }
+ },
+/* lw $rn3l,$udisp7a4($tpr) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN3L), ',', OP (UDISP7A4), '(', OP (TPR), ')', 0 } },
+ & ifmt_sw_tp, { 0x4083 }
+ },
+/* lbu $rn3uc,$udisp7($tpr) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN3UC), ',', OP (UDISP7), '(', OP (TPR), ')', 0 } },
+ & ifmt_lbu_tp, { 0x4880 }
+ },
+/* lhu $rn3us,$udisp7a2($tpr) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN3US), ',', OP (UDISP7A2), '(', OP (TPR), ')', 0 } },
+ & ifmt_lhu_tp, { 0x8881 }
+ },
+/* sb $rnc,$sdisp16($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNC), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
+ & ifmt_sb16, { 0xc0080000 }
+ },
+/* sh $rns,$sdisp16($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNS), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
+ & ifmt_sh16, { 0xc0090000 }
+ },
+/* sw $rnl,$sdisp16($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNL), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
+ & ifmt_sw16, { 0xc00a0000 }
+ },
+/* lb $rnc,$sdisp16($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNC), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
+ & ifmt_sb16, { 0xc00c0000 }
+ },
+/* lh $rns,$sdisp16($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNS), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
+ & ifmt_sh16, { 0xc00d0000 }
+ },
+/* lw $rnl,$sdisp16($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNL), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
+ & ifmt_sw16, { 0xc00e0000 }
+ },
+/* lbu $rnuc,$sdisp16($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNUC), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
+ & ifmt_lbu16, { 0xc00b0000 }
+ },
+/* lhu $rnus,$sdisp16($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNUS), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
+ & ifmt_lhu16, { 0xc00f0000 }
+ },
+/* sw $rnl,($addr24a4) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNL), ',', '(', OP (ADDR24A4), ')', 0 } },
+ & ifmt_sw24, { 0xe0020000 }
+ },
+/* lw $rnl,($addr24a4) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNL), ',', '(', OP (ADDR24A4), ')', 0 } },
+ & ifmt_sw24, { 0xe0030000 }
+ },
+/* extb $rn */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), 0 } },
+ & ifmt_extb, { 0x100d }
+ },
+/* exth $rn */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), 0 } },
+ & ifmt_extb, { 0x102d }
+ },
+/* extub $rn */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), 0 } },
+ & ifmt_extb, { 0x108d }
+ },
+/* extuh $rn */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), 0 } },
+ & ifmt_extb, { 0x10ad }
+ },
+/* ssarb $udisp2($rm) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (UDISP2), '(', OP (RM), ')', 0 } },
+ & ifmt_ssarb, { 0x100c }
+ },
+/* mov $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x0 }
+ },
+/* mov $rn,$simm8 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (SIMM8), 0 } },
+ & ifmt_movi8, { 0x5000 }
+ },
+/* mov $rn,$simm16 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (SIMM16), 0 } },
+ & ifmt_movi16, { 0xc0010000 }
+ },
+/* movu $rn3,$uimm24 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN3), ',', OP (UIMM24), 0 } },
+ & ifmt_movu24, { 0xd0000000 }
+ },
+/* movu $rn,$uimm16 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } },
+ & ifmt_movu16, { 0xc0110000 }
+ },
+/* movh $rn,$uimm16 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } },
+ & ifmt_movu16, { 0xc0210000 }
+ },
+/* add3 $rl,$rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RL), ',', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_add3, { 0x9000 }
+ },
+/* add $rn,$simm6 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (SIMM6), 0 } },
+ & ifmt_add, { 0x6000 }
+ },
+/* add3 $rn,$spr,$uimm7a4 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (SPR), ',', OP (UIMM7A4), 0 } },
+ & ifmt_add3i, { 0x4000 }
+ },
+/* advck3 \$0,$rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x7 }
+ },
+/* sub $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x4 }
+ },
+/* sbvck3 \$0,$rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x5 }
+ },
+/* neg $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x1 }
+ },
+/* slt3 \$0,$rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x2 }
+ },
+/* sltu3 \$0,$rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x3 }
+ },
+/* slt3 \$0,$rn,$uimm5 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (UIMM5), 0 } },
+ & ifmt_slt3i, { 0x6001 }
+ },
+/* sltu3 \$0,$rn,$uimm5 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (UIMM5), 0 } },
+ & ifmt_slt3i, { 0x6005 }
+ },
+/* sl1ad3 \$0,$rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x2006 }
+ },
+/* sl2ad3 \$0,$rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x2007 }
+ },
+/* add3 $rn,$rm,$simm16 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (SIMM16), 0 } },
+ & ifmt_add3x, { 0xc0000000 }
+ },
+/* slt3 $rn,$rm,$simm16 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (SIMM16), 0 } },
+ & ifmt_add3x, { 0xc0020000 }
+ },
+/* sltu3 $rn,$rm,$uimm16 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } },
+ & ifmt_sltu3x, { 0xc0030000 }
+ },
+/* or $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x1000 }
+ },
+/* and $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x1001 }
+ },
+/* xor $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x1002 }
+ },
+/* nor $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x1003 }
+ },
+/* or3 $rn,$rm,$uimm16 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } },
+ & ifmt_sltu3x, { 0xc0040000 }
+ },
+/* and3 $rn,$rm,$uimm16 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } },
+ & ifmt_sltu3x, { 0xc0050000 }
+ },
+/* xor3 $rn,$rm,$uimm16 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } },
+ & ifmt_sltu3x, { 0xc0060000 }
+ },
+/* sra $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x200d }
+ },
+/* srl $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x200c }
+ },
+/* sll $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x200e }
+ },
+/* sra $rn,$uimm5 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (UIMM5), 0 } },
+ & ifmt_slt3i, { 0x6003 }
+ },
+/* srl $rn,$uimm5 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (UIMM5), 0 } },
+ & ifmt_slt3i, { 0x6002 }
+ },
+/* sll $rn,$uimm5 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (UIMM5), 0 } },
+ & ifmt_slt3i, { 0x6006 }
+ },
+/* sll3 \$0,$rn,$uimm5 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (UIMM5), 0 } },
+ & ifmt_slt3i, { 0x6007 }
+ },
+/* fsft $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x200f }
+ },
+/* bra $pcrel12a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (PCREL12A2), 0 } },
+ & ifmt_bra, { 0xb000 }
+ },
+/* beqz $rn,$pcrel8a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (PCREL8A2), 0 } },
+ & ifmt_beqz, { 0xa000 }
+ },
+/* bnez $rn,$pcrel8a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (PCREL8A2), 0 } },
+ & ifmt_beqz, { 0xa001 }
+ },
+/* beqi $rn,$uimm4,$pcrel17a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } },
+ & ifmt_beqi, { 0xe0000000 }
+ },
+/* bnei $rn,$uimm4,$pcrel17a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } },
+ & ifmt_beqi, { 0xe0040000 }
+ },
+/* blti $rn,$uimm4,$pcrel17a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } },
+ & ifmt_beqi, { 0xe00c0000 }
+ },
+/* bgei $rn,$uimm4,$pcrel17a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } },
+ & ifmt_beqi, { 0xe0080000 }
+ },
+/* beq $rn,$rm,$pcrel17a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (PCREL17A2), 0 } },
+ & ifmt_beq, { 0xe0010000 }
+ },
+/* bne $rn,$rm,$pcrel17a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (PCREL17A2), 0 } },
+ & ifmt_beq, { 0xe0050000 }
+ },
+/* bsr $pcrel12a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (PCREL12A2), 0 } },
+ & ifmt_bra, { 0xb001 }
+ },
+/* bsr $pcrel24a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (PCREL24A2), 0 } },
+ & ifmt_bsr24, { 0xd8090000 }
+ },
+/* jmp $rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RM), 0 } },
+ & ifmt_jmp, { 0x100e }
+ },
+/* jmp $pcabs24a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (PCABS24A2), 0 } },
+ & ifmt_jmp24, { 0xd8080000 }
+ },
+/* jsr $rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RM), 0 } },
+ & ifmt_jmp, { 0x100f }
+ },
+/* ret */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_ret, { 0x7002 }
+ },
+/* repeat $rn,$pcrel17a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (PCREL17A2), 0 } },
+ & ifmt_repeat, { 0xe0090000 }
+ },
+/* erepeat $pcrel17a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (PCREL17A2), 0 } },
+ & ifmt_erepeat, { 0xe0190000 }
+ },
+/* stc $rn,\$lp */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', '$', 'l', 'p', 0 } },
+ & ifmt_stc_lp, { 0x7018 }
+ },
+/* stc $rn,\$hi */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', '$', 'h', 'i', 0 } },
+ & ifmt_stc_lp, { 0x7078 }
+ },
+/* stc $rn,\$lo */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', '$', 'l', 'o', 0 } },
+ & ifmt_stc_lp, { 0x7088 }
+ },
+/* stc $rn,$csrn */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (CSRN), 0 } },
+ & ifmt_stc, { 0x7008 }
+ },
+/* ldc $rn,\$lp */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', '$', 'l', 'p', 0 } },
+ & ifmt_stc_lp, { 0x701a }
+ },
+/* ldc $rn,\$hi */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', '$', 'h', 'i', 0 } },
+ & ifmt_stc_lp, { 0x707a }
+ },
+/* ldc $rn,\$lo */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', '$', 'l', 'o', 0 } },
+ & ifmt_stc_lp, { 0x708a }
+ },
+/* ldc $rn,$csrn */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (CSRN), 0 } },
+ & ifmt_stc, { 0x700a }
+ },
+/* di */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_ret, { 0x7000 }
+ },
+/* ei */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_ret, { 0x7010 }
+ },
+/* reti */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_ret, { 0x7012 }
+ },
+/* halt */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_ret, { 0x7022 }
+ },
+/* sleep */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_ret, { 0x7062 }
+ },
+/* swi $uimm2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (UIMM2), 0 } },
+ & ifmt_swi, { 0x7006 }
+ },
+/* break */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_ret, { 0x7032 }
+ },
+/* syncm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_ret, { 0x7011 }
+ },
+/* stcb $rn,$uimm16 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } },
+ & ifmt_movu16, { 0xf0040000 }
+ },
+/* ldcb $rn,$uimm16 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } },
+ & ifmt_movu16, { 0xf0140000 }
+ },
+/* bsetm ($rma),$uimm3 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } },
+ & ifmt_bsetm, { 0x2000 }
+ },
+/* bclrm ($rma),$uimm3 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } },
+ & ifmt_bsetm, { 0x2001 }
+ },
+/* bnotm ($rma),$uimm3 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } },
+ & ifmt_bsetm, { 0x2002 }
+ },
+/* btstm \$0,($rma),$uimm3 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', '$', '0', ',', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } },
+ & ifmt_bsetm, { 0x2003 }
+ },
+/* tas $rn,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_tas, { 0x2004 }
+ },
+/* cache $cimm4,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CIMM4), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_cache, { 0x7004 }
+ },
+/* mul $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x1004 }
+ },
+/* mulu $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x1005 }
+ },
+/* mulr $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x1006 }
+ },
+/* mulru $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x1007 }
+ },
+/* madd $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf0013004 }
+ },
+/* maddu $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf0013005 }
+ },
+/* maddr $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf0013006 }
+ },
+/* maddru $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf0013007 }
+ },
+/* div $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x1008 }
+ },
+/* divu $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_mov, { 0x1009 }
+ },
+/* dret */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_ret, { 0x7013 }
+ },
+/* dbreak */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_ret, { 0x7033 }
+ },
+/* ldz $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf0010000 }
+ },
+/* abs $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf0010003 }
+ },
+/* ave $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf0010002 }
+ },
+/* min $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf0010004 }
+ },
+/* max $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf0010005 }
+ },
+/* minu $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf0010006 }
+ },
+/* maxu $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf0010007 }
+ },
+/* clip $rn,$cimm5 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (CIMM5), 0 } },
+ & ifmt_clip, { 0xf0011000 }
+ },
+/* clipu $rn,$cimm5 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (CIMM5), 0 } },
+ & ifmt_clip, { 0xf0011001 }
+ },
+/* sadd $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf0010008 }
+ },
+/* ssub $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf001000a }
+ },
+/* saddu $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf0010009 }
+ },
+/* ssubu $rn,$rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
+ & ifmt_madd, { 0xf001000b }
+ },
+/* swcp $crn,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_swcp, { 0x3008 }
+ },
+/* lwcp $crn,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_swcp, { 0x3009 }
+ },
+/* smcp $crn64,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_smcp, { 0x300a }
+ },
+/* lmcp $crn64,($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), ')', 0 } },
+ & ifmt_smcp, { 0x300b }
+ },
+/* swcpi $crn,($rma+) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', 0 } },
+ & ifmt_swcp, { 0x3000 }
+ },
+/* lwcpi $crn,($rma+) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', 0 } },
+ & ifmt_swcp, { 0x3001 }
+ },
+/* smcpi $crn64,($rma+) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', 0 } },
+ & ifmt_smcp, { 0x3002 }
+ },
+/* lmcpi $crn64,($rma+) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', 0 } },
+ & ifmt_smcp, { 0x3003 }
+ },
+/* swcp $crn,$sdisp16($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
+ & ifmt_swcp16, { 0xf00c0000 }
+ },
+/* lwcp $crn,$sdisp16($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
+ & ifmt_swcp16, { 0xf00d0000 }
+ },
+/* smcp $crn64,$sdisp16($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
+ & ifmt_smcp16, { 0xf00e0000 }
+ },
+/* lmcp $crn64,$sdisp16($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
+ & ifmt_smcp16, { 0xf00f0000 }
+ },
+/* sbcpa $crn,($rma+),$cdisp8 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
+ & ifmt_sbcpa, { 0xf0050000 }
+ },
+/* lbcpa $crn,($rma+),$cdisp8 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
+ & ifmt_sbcpa, { 0xf0054000 }
+ },
+/* shcpa $crn,($rma+),$cdisp8a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
+ & ifmt_shcpa, { 0xf0051000 }
+ },
+/* lhcpa $crn,($rma+),$cdisp8a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
+ & ifmt_shcpa, { 0xf0055000 }
+ },
+/* swcpa $crn,($rma+),$cdisp8a4 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
+ & ifmt_swcpa, { 0xf0052000 }
+ },
+/* lwcpa $crn,($rma+),$cdisp8a4 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
+ & ifmt_swcpa, { 0xf0056000 }
+ },
+/* smcpa $crn64,($rma+),$cdisp8a8 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
+ & ifmt_smcpa, { 0xf0053000 }
+ },
+/* lmcpa $crn64,($rma+),$cdisp8a8 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
+ & ifmt_smcpa, { 0xf0057000 }
+ },
+/* sbcpm0 $crn,($rma+),$cdisp8 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
+ & ifmt_sbcpa, { 0xf0050800 }
+ },
+/* lbcpm0 $crn,($rma+),$cdisp8 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
+ & ifmt_sbcpa, { 0xf0054800 }
+ },
+/* shcpm0 $crn,($rma+),$cdisp8a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
+ & ifmt_shcpa, { 0xf0051800 }
+ },
+/* lhcpm0 $crn,($rma+),$cdisp8a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
+ & ifmt_shcpa, { 0xf0055800 }
+ },
+/* swcpm0 $crn,($rma+),$cdisp8a4 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
+ & ifmt_swcpa, { 0xf0052800 }
+ },
+/* lwcpm0 $crn,($rma+),$cdisp8a4 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
+ & ifmt_swcpa, { 0xf0056800 }
+ },
+/* smcpm0 $crn64,($rma+),$cdisp8a8 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
+ & ifmt_smcpa, { 0xf0053800 }
+ },
+/* lmcpm0 $crn64,($rma+),$cdisp8a8 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
+ & ifmt_smcpa, { 0xf0057800 }
+ },
+/* sbcpm1 $crn,($rma+),$cdisp8 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
+ & ifmt_sbcpa, { 0xf0050c00 }
+ },
+/* lbcpm1 $crn,($rma+),$cdisp8 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
+ & ifmt_sbcpa, { 0xf0054c00 }
+ },
+/* shcpm1 $crn,($rma+),$cdisp8a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
+ & ifmt_shcpa, { 0xf0051c00 }
+ },
+/* lhcpm1 $crn,($rma+),$cdisp8a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
+ & ifmt_shcpa, { 0xf0055c00 }
+ },
+/* swcpm1 $crn,($rma+),$cdisp8a4 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
+ & ifmt_swcpa, { 0xf0052c00 }
+ },
+/* lwcpm1 $crn,($rma+),$cdisp8a4 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
+ & ifmt_swcpa, { 0xf0056c00 }
+ },
+/* smcpm1 $crn64,($rma+),$cdisp8a8 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
+ & ifmt_smcpa, { 0xf0053c00 }
+ },
+/* lmcpm1 $crn64,($rma+),$cdisp8a8 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
+ & ifmt_smcpa, { 0xf0057c00 }
+ },
+/* bcpeq $cccc,$pcrel17a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } },
+ & ifmt_bcpeq, { 0xd8040000 }
+ },
+/* bcpne $cccc,$pcrel17a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } },
+ & ifmt_bcpeq, { 0xd8050000 }
+ },
+/* bcpat $cccc,$pcrel17a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } },
+ & ifmt_bcpeq, { 0xd8060000 }
+ },
+/* bcpaf $cccc,$pcrel17a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } },
+ & ifmt_bcpeq, { 0xd8070000 }
+ },
+/* synccp */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_ret, { 0x7021 }
+ },
+/* jsrv $rm */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RM), 0 } },
+ & ifmt_jmp, { 0x180f }
+ },
+/* bsrv $pcrel24a2 */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (PCREL24A2), 0 } },
+ & ifmt_bsr24, { 0xd80b0000 }
+ },
+/* --unused-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_sim_syscall, { 0x7800 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x6 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x100a }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x100b }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x2005 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x2008 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x2009 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x200a }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x200b }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x3004 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x3005 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x3006 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x3007 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x300c }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x300d }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x300e }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x300f }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x7007 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x700e }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x700f }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0xc007 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0xe00d }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0xf003 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0xf006 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0xf008 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x7005 }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x700c }
+ },
+/* --reserved-- */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_mov, { 0x700d }
+ },
+/* fadds ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fadds, { 0xf0070000 }
+ },
+/* fsubs ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fadds, { 0xf0170000 }
+ },
+/* fmuls ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fadds, { 0xf0270000 }
+ },
+/* fdivs ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fadds, { 0xf0370000 }
+ },
+/* fsqrts ${fmax-FRd},${fmax-FRn} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } },
+ & ifmt_fsqrts, { 0xf0470000 }
+ },
+/* fabss ${fmax-FRd},${fmax-FRn} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } },
+ & ifmt_fsqrts, { 0xf0570000 }
+ },
+/* fnegs ${fmax-FRd},${fmax-FRn} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } },
+ & ifmt_fsqrts, { 0xf0770000 }
+ },
+/* fmovs ${fmax-FRd},${fmax-FRn} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } },
+ & ifmt_fsqrts, { 0xf0670000 }
+ },
+/* froundws ${fmax-FRd-int},${fmax-FRn} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
+ & ifmt_froundws, { 0xf0c70000 }
+ },
+/* ftruncws ${fmax-FRd-int},${fmax-FRn} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
+ & ifmt_froundws, { 0xf0d70000 }
+ },
+/* fceilws ${fmax-FRd-int},${fmax-FRn} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
+ & ifmt_froundws, { 0xf0e70000 }
+ },
+/* ffloorws ${fmax-FRd-int},${fmax-FRn} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
+ & ifmt_froundws, { 0xf0f70000 }
+ },
+/* fcvtws ${fmax-FRd-int},${fmax-FRn} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
+ & ifmt_froundws, { 0xf0471000 }
+ },
+/* fcvtsw ${fmax-FRd},${fmax-FRn-int} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN_INT), 0 } },
+ & ifmt_fcvtsw, { 0xf0079000 }
+ },
+/* fcmpfs ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0072000 }
+ },
+/* fcmpus ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0172000 }
+ },
+/* fcmpes ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0272000 }
+ },
+/* fcmpues ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0372000 }
+ },
+/* fcmpls ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0472000 }
+ },
+/* fcmpuls ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0572000 }
+ },
+/* fcmples ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0672000 }
+ },
+/* fcmpules ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0772000 }
+ },
+/* fcmpfis ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0872000 }
+ },
+/* fcmpuis ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0972000 }
+ },
+/* fcmpeis ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0a72000 }
+ },
+/* fcmpueis ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0b72000 }
+ },
+/* fcmplis ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0c72000 }
+ },
+/* fcmpulis ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0d72000 }
+ },
+/* fcmpleis ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0e72000 }
+ },
+/* fcmpuleis ${fmax-FRn},${fmax-FRm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
+ & ifmt_fcmpfs, { 0xf0f72000 }
+ },
+/* cmov ${fmax-FRd-int},${fmax-Rm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_RM), 0 } },
+ & ifmt_cmov_frn_rm, { 0xf007f000 }
+ },
+/* cmov ${fmax-Rm},${fmax-FRd-int} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_RM), ',', OP (FMAX_FRD_INT), 0 } },
+ & ifmt_cmov_frn_rm, { 0xf007f001 }
+ },
+/* cmovc ${fmax-CCRn},${fmax-Rm} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_CCRN), ',', OP (FMAX_RM), 0 } },
+ & ifmt_cmovc_ccrn_rm, { 0xf007f002 }
+ },
+/* cmovc ${fmax-Rm},${fmax-CCRn} */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (FMAX_RM), ',', OP (FMAX_CCRN), 0 } },
+ & ifmt_cmovc_ccrn_rm, { 0xf007f003 }
+ },
+};
+
+#undef A
+#undef OPERAND
+#undef MNEM
+#undef OP
+
+/* Formats for ALIAS macro-insns. */
+
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define F(f) & mep_cgen_ifld_table[MEP_##f]
+#else
+#define F(f) & mep_cgen_ifld_table[MEP_/**/f]
+#endif
+static const CGEN_IFMT ifmt_nop ATTRIBUTE_UNUSED = {
+ 16, 16, 0xffff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sb16_0 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sh16_0 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_sw16_0 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_lb16_0 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_lh16_0 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_lw16_0 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_lbu16_0 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_lhu16_0 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_swcp16_0 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_lwcp16_0 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_smcp16_0 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+static const CGEN_IFMT ifmt_lmcp16_0 ATTRIBUTE_UNUSED = {
+ 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
+};
+
+#undef F
+
+/* Each non-simple macro entry points to an array of expansion possibilities. */
+
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define A(a) (1 << CGEN_INSN_##a)
+#else
+#define A(a) (1 << CGEN_INSN_/**/a)
+#endif
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define OPERAND(op) MEP_OPERAND_##op
+#else
+#define OPERAND(op) MEP_OPERAND_/**/op
+#endif
+#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
+#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
+
+/* The macro instruction table. */
+
+static const CGEN_IBASE mep_cgen_macro_insn_table[] =
+{
+/* nop */
+ {
+ -1, "nop", "nop", 16,
+ { 0|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sb $rnc,$zero($rma) */
+ {
+ -1, "sb16-0", "sb", 16,
+ { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sh $rns,$zero($rma) */
+ {
+ -1, "sh16-0", "sh", 16,
+ { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* sw $rnl,$zero($rma) */
+ {
+ -1, "sw16-0", "sw", 16,
+ { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lb $rnc,$zero($rma) */
+ {
+ -1, "lb16-0", "lb", 16,
+ { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lh $rns,$zero($rma) */
+ {
+ -1, "lh16-0", "lh", 16,
+ { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lw $rnl,$zero($rma) */
+ {
+ -1, "lw16-0", "lw", 16,
+ { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lbu $rnuc,$zero($rma) */
+ {
+ -1, "lbu16-0", "lbu", 16,
+ { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lhu $rnus,$zero($rma) */
+ {
+ -1, "lhu16-0", "lhu", 16,
+ { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* swcp $crn,$zero($rma) */
+ {
+ -1, "swcp16-0", "swcp", 16,
+ { 0|A(NO_DIS)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lwcp $crn,$zero($rma) */
+ {
+ -1, "lwcp16-0", "lwcp", 16,
+ { 0|A(NO_DIS)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* smcp $crn64,$zero($rma) */
+ {
+ -1, "smcp16-0", "smcp", 16,
+ { 0|A(NO_DIS)|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+/* lmcp $crn64,$zero($rma) */
+ {
+ -1, "lmcp16-0", "lmcp", 16,
+ { 0|A(NO_DIS)|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
+ },
+};
+
+/* The macro instruction opcode table. */
+
+static const CGEN_OPCODE mep_cgen_macro_insn_opcode_table[] =
+{
+/* nop */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, 0 } },
+ & ifmt_nop, { 0x0 }
+ },
+/* sb $rnc,$zero($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNC), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
+ & ifmt_sb16_0, { 0x8 }
+ },
+/* sh $rns,$zero($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNS), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
+ & ifmt_sh16_0, { 0x9 }
+ },
+/* sw $rnl,$zero($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNL), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
+ & ifmt_sw16_0, { 0xa }
+ },
+/* lb $rnc,$zero($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNC), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
+ & ifmt_lb16_0, { 0xc }
+ },
+/* lh $rns,$zero($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNS), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
+ & ifmt_lh16_0, { 0xd }
+ },
+/* lw $rnl,$zero($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNL), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
+ & ifmt_lw16_0, { 0xe }
+ },
+/* lbu $rnuc,$zero($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNUC), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
+ & ifmt_lbu16_0, { 0xb }
+ },
+/* lhu $rnus,$zero($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (RNUS), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
+ & ifmt_lhu16_0, { 0xf }
+ },
+/* swcp $crn,$zero($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
+ & ifmt_swcp16_0, { 0x3008 }
+ },
+/* lwcp $crn,$zero($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
+ & ifmt_lwcp16_0, { 0x3009 }
+ },
+/* smcp $crn64,$zero($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
+ & ifmt_smcp16_0, { 0x300a }
+ },
+/* lmcp $crn64,$zero($rma) */
+ {
+ { 0, 0, 0, 0 },
+ { { MNEM, ' ', OP (CRN64), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
+ & ifmt_lmcp16_0, { 0x300b }
+ },
+};
+
+#undef A
+#undef OPERAND
+#undef MNEM
+#undef OP
+
+#ifndef CGEN_ASM_HASH_P
+#define CGEN_ASM_HASH_P(insn) 1
+#endif
+
+#ifndef CGEN_DIS_HASH_P
+#define CGEN_DIS_HASH_P(insn) 1
+#endif
+
+/* Return non-zero if INSN is to be added to the hash table.
+ Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */
+
+static int
+asm_hash_insn_p (insn)
+ const CGEN_INSN *insn ATTRIBUTE_UNUSED;
+{
+ return CGEN_ASM_HASH_P (insn);
+}
+
+static int
+dis_hash_insn_p (insn)
+ const CGEN_INSN *insn;
+{
+ /* If building the hash table and the NO-DIS attribute is present,
+ ignore. */
+ if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
+ return 0;
+ return CGEN_DIS_HASH_P (insn);
+}
+
+#ifndef CGEN_ASM_HASH
+#define CGEN_ASM_HASH_SIZE 127
+#ifdef CGEN_MNEMONIC_OPERANDS
+#define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
+#else
+#define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/
+#endif
+#endif
+
+/* It doesn't make much sense to provide a default here,
+ but while this is under development we do.
+ BUFFER is a pointer to the bytes of the insn, target order.
+ VALUE is the first base_insn_bitsize bits as an int in host order. */
+
+#ifndef CGEN_DIS_HASH
+#define CGEN_DIS_HASH_SIZE 256
+#define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
+#endif
+
+/* The result is the hash value of the insn.
+ Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */
+
+static unsigned int
+asm_hash_insn (mnem)
+ const char * mnem;
+{
+ return CGEN_ASM_HASH (mnem);
+}
+
+/* BUF is a pointer to the bytes of the insn, target order.
+ VALUE is the first base_insn_bitsize bits as an int in host order. */
+
+static unsigned int
+dis_hash_insn (buf, value)
+ const char * buf ATTRIBUTE_UNUSED;
+ CGEN_INSN_INT value ATTRIBUTE_UNUSED;
+{
+ return CGEN_DIS_HASH (buf, value);
+}
+
+/* Set the recorded length of the insn in the CGEN_FIELDS struct. */
+
+static void
+set_fields_bitsize (CGEN_FIELDS *fields, int size)
+{
+ CGEN_FIELDS_BITSIZE (fields) = size;
+}
+
+/* Function to call before using the operand instance table.
+ This plugs the opcode entries and macro instructions into the cpu table. */
+
+void
+mep_cgen_init_opcode_table (CGEN_CPU_DESC cd)
+{
+ int i;
+ int num_macros = (sizeof (mep_cgen_macro_insn_table) /
+ sizeof (mep_cgen_macro_insn_table[0]));
+ const CGEN_IBASE *ib = & mep_cgen_macro_insn_table[0];
+ const CGEN_OPCODE *oc = & mep_cgen_macro_insn_opcode_table[0];
+ CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN));
+
+ memset (insns, 0, num_macros * sizeof (CGEN_INSN));
+ for (i = 0; i < num_macros; ++i)
+ {
+ insns[i].base = &ib[i];
+ insns[i].opcode = &oc[i];
+ mep_cgen_build_insn_regex (& insns[i]);
+ }
+ cd->macro_insn_table.init_entries = insns;
+ cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
+ cd->macro_insn_table.num_init_entries = num_macros;
+
+ oc = & mep_cgen_insn_opcode_table[0];
+ insns = (CGEN_INSN *) cd->insn_table.init_entries;
+ for (i = 0; i < MAX_INSNS; ++i)
+ {
+ insns[i].opcode = &oc[i];
+ mep_cgen_build_insn_regex (& insns[i]);
+ }
+
+ cd->sizeof_fields = sizeof (CGEN_FIELDS);
+ cd->set_fields_bitsize = set_fields_bitsize;
+
+ cd->asm_hash_p = asm_hash_insn_p;
+ cd->asm_hash = asm_hash_insn;
+ cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
+
+ cd->dis_hash_p = dis_hash_insn_p;
+ cd->dis_hash = dis_hash_insn;
+ cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
+}
diff --git a/opcodes/mep-opc.h b/opcodes/mep-opc.h
new file mode 100644
index 000000000000..d9dbd4ba7e55
--- /dev/null
+++ b/opcodes/mep-opc.h
@@ -0,0 +1,294 @@
+/* Instruction opcode header for mep.
+
+THIS FILE IS MACHINE GENERATED WITH CGEN.
+
+Copyright 1996-2005 Free Software Foundation, Inc.
+
+This file is part of the GNU Binutils and/or GDB, the GNU debugger.
+
+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.
+
+*/
+
+#ifndef MEP_OPC_H
+#define MEP_OPC_H
+
+/* -- opc.h */
+
+#undef CGEN_DIS_HASH_SIZE
+#define CGEN_DIS_HASH_SIZE 1
+
+#undef CGEN_DIS_HASH
+#define CGEN_DIS_HASH(buffer, insn) 0
+
+#define CGEN_VERBOSE_ASSEMBLER_ERRORS
+
+typedef struct
+{
+ char * name;
+ int config_enum;
+ unsigned cpu_flag;
+ int big_endian;
+ int vliw_bits;
+ CGEN_ATTR_VALUE_BITSET_TYPE cop16_isa;
+ CGEN_ATTR_VALUE_BITSET_TYPE cop32_isa;
+ CGEN_ATTR_VALUE_BITSET_TYPE cop48_isa;
+ CGEN_ATTR_VALUE_BITSET_TYPE cop64_isa;
+ CGEN_ATTR_VALUE_BITSET_TYPE cop_isa;
+ CGEN_ATTR_VALUE_BITSET_TYPE core_isa;
+ unsigned int option_mask;
+} mep_config_map_struct;
+
+extern mep_config_map_struct mep_config_map[];
+extern int mep_config_index;
+
+extern void init_mep_all_core_isas_mask (void);
+extern void init_mep_all_cop_isas_mask (void);
+extern CGEN_ATTR_VALUE_BITSET_TYPE mep_cop_isa (void);
+
+#define MEP_CONFIG (mep_config_map[mep_config_index].config_enum)
+#define MEP_CPU (mep_config_map[mep_config_index].cpu_flag)
+#define MEP_OMASK (mep_config_map[mep_config_index].option_mask)
+#define MEP_VLIW (mep_config_map[mep_config_index].vliw_bits > 0)
+#define MEP_VLIW32 (mep_config_map[mep_config_index].vliw_bits == 32)
+#define MEP_VLIW64 (mep_config_map[mep_config_index].vliw_bits == 64)
+#define MEP_COP16_ISA (mep_config_map[mep_config_index].cop16_isa)
+#define MEP_COP32_ISA (mep_config_map[mep_config_index].cop32_isa)
+#define MEP_COP48_ISA (mep_config_map[mep_config_index].cop48_isa)
+#define MEP_COP64_ISA (mep_config_map[mep_config_index].cop64_isa)
+#define MEP_COP_ISA (mep_config_map[mep_config_index].cop_isa)
+#define MEP_CORE_ISA (mep_config_map[mep_config_index].core_isa)
+
+extern int mep_insn_supported_by_isa (const CGEN_INSN *, CGEN_ATTR_VALUE_BITSET_TYPE *);
+
+/* A mask for all ISAs executed by the core. */
+#define MEP_ALL_CORE_ISAS_MASK mep_all_core_isas_mask
+extern CGEN_ATTR_VALUE_BITSET_TYPE mep_all_core_isas_mask;
+
+#define MEP_INSN_CORE_P(insn) ( \
+ init_mep_all_core_isas_mask (), \
+ mep_insn_supported_by_isa (insn, & MEP_ALL_CORE_ISAS_MASK) \
+)
+
+/* A mask for all ISAs executed by a VLIW coprocessor. */
+#define MEP_ALL_COP_ISAS_MASK mep_all_cop_isas_mask
+extern CGEN_ATTR_VALUE_BITSET_TYPE mep_all_cop_isas_mask;
+
+#define MEP_INSN_COP_P(insn) ( \
+ init_mep_all_cop_isas_mask (), \
+ mep_insn_supported_by_isa (insn, & MEP_ALL_COP_ISAS_MASK) \
+)
+
+extern int mep_cgen_insn_supported (CGEN_CPU_DESC, const CGEN_INSN *);
+
+/* -- asm.c */
+/* Enum declaration for mep instruction types. */
+typedef enum cgen_insn_type {
+ MEP_INSN_INVALID, MEP_INSN_SB, MEP_INSN_SH, MEP_INSN_SW
+ , MEP_INSN_LB, MEP_INSN_LH, MEP_INSN_LW, MEP_INSN_LBU
+ , MEP_INSN_LHU, MEP_INSN_SW_SP, MEP_INSN_LW_SP, MEP_INSN_SB_TP
+ , MEP_INSN_SH_TP, MEP_INSN_SW_TP, MEP_INSN_LB_TP, MEP_INSN_LH_TP
+ , MEP_INSN_LW_TP, MEP_INSN_LBU_TP, MEP_INSN_LHU_TP, MEP_INSN_SB16
+ , MEP_INSN_SH16, MEP_INSN_SW16, MEP_INSN_LB16, MEP_INSN_LH16
+ , MEP_INSN_LW16, MEP_INSN_LBU16, MEP_INSN_LHU16, MEP_INSN_SW24
+ , MEP_INSN_LW24, MEP_INSN_EXTB, MEP_INSN_EXTH, MEP_INSN_EXTUB
+ , MEP_INSN_EXTUH, MEP_INSN_SSARB, MEP_INSN_MOV, MEP_INSN_MOVI8
+ , MEP_INSN_MOVI16, MEP_INSN_MOVU24, MEP_INSN_MOVU16, MEP_INSN_MOVH
+ , MEP_INSN_ADD3, MEP_INSN_ADD, MEP_INSN_ADD3I, MEP_INSN_ADVCK3
+ , MEP_INSN_SUB, MEP_INSN_SBVCK3, MEP_INSN_NEG, MEP_INSN_SLT3
+ , MEP_INSN_SLTU3, MEP_INSN_SLT3I, MEP_INSN_SLTU3I, MEP_INSN_SL1AD3
+ , MEP_INSN_SL2AD3, MEP_INSN_ADD3X, MEP_INSN_SLT3X, MEP_INSN_SLTU3X
+ , MEP_INSN_OR, MEP_INSN_AND, MEP_INSN_XOR, MEP_INSN_NOR
+ , MEP_INSN_OR3, MEP_INSN_AND3, MEP_INSN_XOR3, MEP_INSN_SRA
+ , MEP_INSN_SRL, MEP_INSN_SLL, MEP_INSN_SRAI, MEP_INSN_SRLI
+ , MEP_INSN_SLLI, MEP_INSN_SLL3, MEP_INSN_FSFT, MEP_INSN_BRA
+ , MEP_INSN_BEQZ, MEP_INSN_BNEZ, MEP_INSN_BEQI, MEP_INSN_BNEI
+ , MEP_INSN_BLTI, MEP_INSN_BGEI, MEP_INSN_BEQ, MEP_INSN_BNE
+ , MEP_INSN_BSR12, MEP_INSN_BSR24, MEP_INSN_JMP, MEP_INSN_JMP24
+ , MEP_INSN_JSR, MEP_INSN_RET, MEP_INSN_REPEAT, MEP_INSN_EREPEAT
+ , MEP_INSN_STC_LP, MEP_INSN_STC_HI, MEP_INSN_STC_LO, MEP_INSN_STC
+ , MEP_INSN_LDC_LP, MEP_INSN_LDC_HI, MEP_INSN_LDC_LO, MEP_INSN_LDC
+ , MEP_INSN_DI, MEP_INSN_EI, MEP_INSN_RETI, MEP_INSN_HALT
+ , MEP_INSN_SLEEP, MEP_INSN_SWI, MEP_INSN_BREAK, MEP_INSN_SYNCM
+ , MEP_INSN_STCB, MEP_INSN_LDCB, MEP_INSN_BSETM, MEP_INSN_BCLRM
+ , MEP_INSN_BNOTM, MEP_INSN_BTSTM, MEP_INSN_TAS, MEP_INSN_CACHE
+ , MEP_INSN_MUL, MEP_INSN_MULU, MEP_INSN_MULR, MEP_INSN_MULRU
+ , MEP_INSN_MADD, MEP_INSN_MADDU, MEP_INSN_MADDR, MEP_INSN_MADDRU
+ , MEP_INSN_DIV, MEP_INSN_DIVU, MEP_INSN_DRET, MEP_INSN_DBREAK
+ , MEP_INSN_LDZ, MEP_INSN_ABS, MEP_INSN_AVE, MEP_INSN_MIN
+ , MEP_INSN_MAX, MEP_INSN_MINU, MEP_INSN_MAXU, MEP_INSN_CLIP
+ , MEP_INSN_CLIPU, MEP_INSN_SADD, MEP_INSN_SSUB, MEP_INSN_SADDU
+ , MEP_INSN_SSUBU, MEP_INSN_SWCP, MEP_INSN_LWCP, MEP_INSN_SMCP
+ , MEP_INSN_LMCP, MEP_INSN_SWCPI, MEP_INSN_LWCPI, MEP_INSN_SMCPI
+ , MEP_INSN_LMCPI, MEP_INSN_SWCP16, MEP_INSN_LWCP16, MEP_INSN_SMCP16
+ , MEP_INSN_LMCP16, MEP_INSN_SBCPA, MEP_INSN_LBCPA, MEP_INSN_SHCPA
+ , MEP_INSN_LHCPA, MEP_INSN_SWCPA, MEP_INSN_LWCPA, MEP_INSN_SMCPA
+ , MEP_INSN_LMCPA, MEP_INSN_SBCPM0, MEP_INSN_LBCPM0, MEP_INSN_SHCPM0
+ , MEP_INSN_LHCPM0, MEP_INSN_SWCPM0, MEP_INSN_LWCPM0, MEP_INSN_SMCPM0
+ , MEP_INSN_LMCPM0, MEP_INSN_SBCPM1, MEP_INSN_LBCPM1, MEP_INSN_SHCPM1
+ , MEP_INSN_LHCPM1, MEP_INSN_SWCPM1, MEP_INSN_LWCPM1, MEP_INSN_SMCPM1
+ , MEP_INSN_LMCPM1, MEP_INSN_BCPEQ, MEP_INSN_BCPNE, MEP_INSN_BCPAT
+ , MEP_INSN_BCPAF, MEP_INSN_SYNCCP, MEP_INSN_JSRV, MEP_INSN_BSRV
+ , MEP_INSN_SIM_SYSCALL, MEP_INSN_RI_0, MEP_INSN_RI_1, MEP_INSN_RI_2
+ , MEP_INSN_RI_3, MEP_INSN_RI_4, MEP_INSN_RI_5, MEP_INSN_RI_6
+ , MEP_INSN_RI_7, MEP_INSN_RI_8, MEP_INSN_RI_9, MEP_INSN_RI_10
+ , MEP_INSN_RI_11, MEP_INSN_RI_12, MEP_INSN_RI_13, MEP_INSN_RI_14
+ , MEP_INSN_RI_15, MEP_INSN_RI_17, MEP_INSN_RI_20, MEP_INSN_RI_21
+ , MEP_INSN_RI_22, MEP_INSN_RI_23, MEP_INSN_RI_24, MEP_INSN_RI_25
+ , MEP_INSN_RI_26, MEP_INSN_RI_16, MEP_INSN_RI_18, MEP_INSN_RI_19
+ , MEP_INSN_FADDS, MEP_INSN_FSUBS, MEP_INSN_FMULS, MEP_INSN_FDIVS
+ , MEP_INSN_FSQRTS, MEP_INSN_FABSS, MEP_INSN_FNEGS, MEP_INSN_FMOVS
+ , MEP_INSN_FROUNDWS, MEP_INSN_FTRUNCWS, MEP_INSN_FCEILWS, MEP_INSN_FFLOORWS
+ , MEP_INSN_FCVTWS, MEP_INSN_FCVTSW, MEP_INSN_FCMPFS, MEP_INSN_FCMPUS
+ , MEP_INSN_FCMPES, MEP_INSN_FCMPUES, MEP_INSN_FCMPLS, MEP_INSN_FCMPULS
+ , MEP_INSN_FCMPLES, MEP_INSN_FCMPULES, MEP_INSN_FCMPFIS, MEP_INSN_FCMPUIS
+ , MEP_INSN_FCMPEIS, MEP_INSN_FCMPUEIS, MEP_INSN_FCMPLIS, MEP_INSN_FCMPULIS
+ , MEP_INSN_FCMPLEIS, MEP_INSN_FCMPULEIS, MEP_INSN_CMOV_FRN_RM, MEP_INSN_CMOV_RM_FRN
+ , MEP_INSN_CMOVC_CCRN_RM, MEP_INSN_CMOVC_RM_CCRN
+} CGEN_INSN_TYPE;
+
+/* Index of `invalid' insn place holder. */
+#define CGEN_INSN_INVALID MEP_INSN_INVALID
+
+/* Total number of insns in table. */
+#define MAX_INSNS ((int) MEP_INSN_CMOVC_RM_CCRN + 1)
+
+/* This struct records data prior to insertion or after extraction. */
+struct cgen_fields
+{
+ int length;
+ long f_nil;
+ long f_anyof;
+ long f_major;
+ long f_rn;
+ long f_rn3;
+ long f_rm;
+ long f_rl;
+ long f_sub2;
+ long f_sub3;
+ long f_sub4;
+ long f_ext;
+ long f_crn;
+ long f_csrn_hi;
+ long f_csrn_lo;
+ long f_csrn;
+ long f_crnx_hi;
+ long f_crnx_lo;
+ long f_crnx;
+ long f_0;
+ long f_1;
+ long f_2;
+ long f_3;
+ long f_4;
+ long f_5;
+ long f_6;
+ long f_7;
+ long f_8;
+ long f_9;
+ long f_10;
+ long f_11;
+ long f_12;
+ long f_13;
+ long f_14;
+ long f_15;
+ long f_16;
+ long f_17;
+ long f_18;
+ long f_19;
+ long f_20;
+ long f_21;
+ long f_22;
+ long f_23;
+ long f_24;
+ long f_25;
+ long f_26;
+ long f_27;
+ long f_28;
+ long f_29;
+ long f_30;
+ long f_31;
+ long f_8s8a2;
+ long f_12s4a2;
+ long f_17s16a2;
+ long f_24s5a2n_hi;
+ long f_24s5a2n_lo;
+ long f_24s5a2n;
+ long f_24u5a2n_hi;
+ long f_24u5a2n_lo;
+ long f_24u5a2n;
+ long f_2u6;
+ long f_7u9;
+ long f_7u9a2;
+ long f_7u9a4;
+ long f_16s16;
+ long f_2u10;
+ long f_3u5;
+ long f_4u8;
+ long f_5u8;
+ long f_5u24;
+ long f_6s8;
+ long f_8s8;
+ long f_16u16;
+ long f_12u16;
+ long f_3u29;
+ long f_8s24;
+ long f_8s24a2;
+ long f_8s24a4;
+ long f_8s24a8;
+ long f_24u8a4n_hi;
+ long f_24u8a4n_lo;
+ long f_24u8a4n;
+ long f_24u8n_hi;
+ long f_24u8n_lo;
+ long f_24u8n;
+ long f_24u4n_hi;
+ long f_24u4n_lo;
+ long f_24u4n;
+ long f_callnum;
+ long f_ccrn_hi;
+ long f_ccrn_lo;
+ long f_ccrn;
+ long f_fmax_0_4;
+ long f_fmax_4_4;
+ long f_fmax_8_4;
+ long f_fmax_12_4;
+ long f_fmax_16_4;
+ long f_fmax_20_4;
+ long f_fmax_24_4;
+ long f_fmax_28_1;
+ long f_fmax_29_1;
+ long f_fmax_30_1;
+ long f_fmax_31_1;
+ long f_fmax_frd;
+ long f_fmax_frn;
+ long f_fmax_frm;
+ long f_fmax_rm;
+};
+
+#define CGEN_INIT_PARSE(od) \
+{\
+}
+#define CGEN_INIT_INSERT(od) \
+{\
+}
+#define CGEN_INIT_EXTRACT(od) \
+{\
+}
+#define CGEN_INIT_PRINT(od) \
+{\
+}
+
+
+#endif /* MEP_OPC_H */
diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c
index 9a48d86d2d10..fdeb9a84c0fe 100644
--- a/opcodes/mips-dis.c
+++ b/opcodes/mips-dis.c
@@ -51,12 +51,15 @@ struct mips_cp0sel_name
const char * const name;
};
-/* The mips16 register names. */
-static const char * const mips16_reg_names[] =
+/* The mips16 registers. */
+static const unsigned int mips16_to_32_reg_map[] =
{
- "s0", "s1", "v0", "v1", "a0", "a1", "a2", "a3"
+ 16, 17, 2, 3, 4, 5, 6, 7
};
+#define mips16_reg_names(rn) mips_gpr_names[mips16_to_32_reg_map[rn]]
+
+
static const char * const mips_gpr_names_numeric[32] =
{
"$0", "$1", "$2", "$3", "$4", "$5", "$6", "$7",
@@ -181,7 +184,28 @@ static const char * const mips_cp0_names_mips3264r2[32] =
static const struct mips_cp0sel_name mips_cp0sel_names_mips3264r2[] =
{
{ 4, 1, "c0_contextconfig" },
+ { 0, 1, "c0_mvpcontrol" },
+ { 0, 2, "c0_mvpconf0" },
+ { 0, 3, "c0_mvpconf1" },
+ { 1, 1, "c0_vpecontrol" },
+ { 1, 2, "c0_vpeconf0" },
+ { 1, 3, "c0_vpeconf1" },
+ { 1, 4, "c0_yqmask" },
+ { 1, 5, "c0_vpeschedule" },
+ { 1, 6, "c0_vpeschefback" },
+ { 2, 1, "c0_tcstatus" },
+ { 2, 2, "c0_tcbind" },
+ { 2, 3, "c0_tcrestart" },
+ { 2, 4, "c0_tchalt" },
+ { 2, 5, "c0_tccontext" },
+ { 2, 6, "c0_tcschedule" },
+ { 2, 7, "c0_tcschefback" },
{ 5, 1, "c0_pagegrain" },
+ { 6, 1, "c0_srsconf0" },
+ { 6, 2, "c0_srsconf1" },
+ { 6, 3, "c0_srsconf2" },
+ { 6, 4, "c0_srsconf3" },
+ { 6, 5, "c0_srsconf4" },
{ 12, 1, "c0_intctl" },
{ 12, 2, "c0_srsctl" },
{ 12, 3, "c0_srsmap" },
@@ -370,26 +394,28 @@ const struct mips_arch_choice mips_arch_choices[] =
MIPS32 Architecture_ (MIPS Document Number MD00082, Revision 0.95),
page 1. */
{ "mips32", 1, bfd_mach_mipsisa32, CPU_MIPS32,
- ISA_MIPS32 | INSN_MIPS16 | INSN_DSP,
+ ISA_MIPS32 | INSN_MIPS16 | INSN_SMARTMIPS,
mips_cp0_names_mips3264,
mips_cp0sel_names_mips3264, ARRAY_SIZE (mips_cp0sel_names_mips3264),
mips_hwr_names_numeric },
{ "mips32r2", 1, bfd_mach_mipsisa32r2, CPU_MIPS32R2,
- ISA_MIPS32R2 | INSN_MIPS16 | INSN_DSP | INSN_MT,
+ (ISA_MIPS32R2 | INSN_MIPS16 | INSN_SMARTMIPS | INSN_DSP | INSN_DSPR2
+ | INSN_MIPS3D | INSN_MT),
mips_cp0_names_mips3264r2,
mips_cp0sel_names_mips3264r2, ARRAY_SIZE (mips_cp0sel_names_mips3264r2),
mips_hwr_names_mips3264r2 },
/* For stock MIPS64, disassemble all applicable MIPS-specified ASEs. */
{ "mips64", 1, bfd_mach_mipsisa64, CPU_MIPS64,
- ISA_MIPS64 | INSN_MIPS16 | INSN_MIPS3D | INSN_MDMX | INSN_DSP,
+ ISA_MIPS64 | INSN_MIPS16 | INSN_MIPS3D | INSN_MDMX,
mips_cp0_names_mips3264,
mips_cp0sel_names_mips3264, ARRAY_SIZE (mips_cp0sel_names_mips3264),
mips_hwr_names_numeric },
{ "mips64r2", 1, bfd_mach_mipsisa64r2, CPU_MIPS64R2,
- ISA_MIPS64R2 | INSN_MIPS16 | INSN_MIPS3D | INSN_MDMX | INSN_DSP,
+ (ISA_MIPS64R2 | INSN_MIPS16 | INSN_MIPS3D | INSN_DSP | INSN_DSPR2
+ | INSN_DSP64 | INSN_MT | INSN_MDMX),
mips_cp0_names_mips3264r2,
mips_cp0sel_names_mips3264r2, ARRAY_SIZE (mips_cp0sel_names_mips3264r2),
mips_hwr_names_mips3264r2 },
@@ -549,7 +575,7 @@ parse_mips_dis_option (const char *option, unsigned int len)
const struct mips_arch_choice *chosen_arch;
/* Try to match options that are simple flags */
- if (strncmp (option, "no-aliases", 10) == 0)
+ if (CONST_STRNEQ (option, "no-aliases"))
{
no_aliases = 1;
return;
@@ -688,7 +714,8 @@ static void
print_insn_args (const char *d,
register unsigned long int l,
bfd_vma pc,
- struct disassemble_info *info)
+ struct disassemble_info *info,
+ const struct mips_opcode *opp)
{
int op, delta;
unsigned int lsb, msb, msbd;
@@ -728,6 +755,26 @@ print_insn_args (const char *d,
(*info->fprintf_func) (info->stream, "0x%x", msb - lsb + 1);
break;
+ case '1':
+ (*info->fprintf_func) (info->stream, "0x%lx",
+ (l >> OP_SH_UDI1) & OP_MASK_UDI1);
+ break;
+
+ case '2':
+ (*info->fprintf_func) (info->stream, "0x%lx",
+ (l >> OP_SH_UDI2) & OP_MASK_UDI2);
+ break;
+
+ case '3':
+ (*info->fprintf_func) (info->stream, "0x%lx",
+ (l >> OP_SH_UDI3) & OP_MASK_UDI3);
+ break;
+
+ case '4':
+ (*info->fprintf_func) (info->stream, "0x%lx",
+ (l >> OP_SH_UDI4) & OP_MASK_UDI4);
+ break;
+
case 'C':
case 'H':
msbd = (l >> OP_SH_EXTMSBD) & OP_MASK_EXTMSBD;
@@ -808,6 +855,11 @@ print_insn_args (const char *d,
}
break;
+ case '2':
+ (*info->fprintf_func) (info->stream, "0x%lx",
+ (l >> OP_SH_BP) & OP_MASK_BP);
+ break;
+
case '3':
(*info->fprintf_func) (info->stream, "0x%lx",
(l >> OP_SH_SA3) & OP_MASK_SA3);
@@ -939,6 +991,10 @@ print_insn_args (const char *d,
case 'a':
info->target = (((pc + 4) & ~(bfd_vma) 0x0fffffff)
| (((l >> OP_SH_TARGET) & OP_MASK_TARGET) << 2));
+ /* For gdb disassembler, force odd address on jalx. */
+ if (info->flavour == bfd_target_unknown_flavour
+ && strcmp (opp->name, "jalx") == 0)
+ info->target |= 1;
(*info->print_address_func) (info->target, info);
break;
@@ -1069,7 +1125,9 @@ print_insn_args (const char *d,
break;
case 'N':
- (*info->fprintf_func) (info->stream, "$fcc%ld",
+ (*info->fprintf_func) (info->stream,
+ ((opp->pinfo & (FP_D | FP_S)) != 0
+ ? "$fcc%ld" : "$cc%ld"),
(l >> OP_SH_BCC) & OP_MASK_BCC);
break;
@@ -1247,7 +1305,7 @@ print_insn_mips (bfd_vma memaddr,
if (d != NULL && *d != '\0')
{
(*info->fprintf_func) (info->stream, "\t");
- print_insn_args (d, word, memaddr, info);
+ print_insn_args (d, word, memaddr, info, op);
}
return INSNLEN;
@@ -1283,27 +1341,27 @@ print_mips16_insn_arg (char type,
case 'y':
case 'w':
(*info->fprintf_func) (info->stream, "%s",
- mips16_reg_names[((l >> MIPS16OP_SH_RY)
- & MIPS16OP_MASK_RY)]);
+ mips16_reg_names(((l >> MIPS16OP_SH_RY)
+ & MIPS16OP_MASK_RY)));
break;
case 'x':
case 'v':
(*info->fprintf_func) (info->stream, "%s",
- mips16_reg_names[((l >> MIPS16OP_SH_RX)
- & MIPS16OP_MASK_RX)]);
+ mips16_reg_names(((l >> MIPS16OP_SH_RX)
+ & MIPS16OP_MASK_RX)));
break;
case 'z':
(*info->fprintf_func) (info->stream, "%s",
- mips16_reg_names[((l >> MIPS16OP_SH_RZ)
- & MIPS16OP_MASK_RZ)]);
+ mips16_reg_names(((l >> MIPS16OP_SH_RZ)
+ & MIPS16OP_MASK_RZ)));
break;
case 'Z':
(*info->fprintf_func) (info->stream, "%s",
- mips16_reg_names[((l >> MIPS16OP_SH_MOVE32Z)
- & MIPS16OP_MASK_MOVE32Z)]);
+ mips16_reg_names(((l >> MIPS16OP_SH_MOVE32Z)
+ & MIPS16OP_MASK_MOVE32Z)));
break;
case '0':
@@ -1585,15 +1643,26 @@ print_mips16_insn_arg (char type,
}
}
info->target = (baseaddr & ~((1 << shift) - 1)) + immed;
+ if (pcrel && branch
+ && info->flavour == bfd_target_unknown_flavour)
+ /* For gdb disassembler, maintain odd address. */
+ info->target |= 1;
(*info->print_address_func) (info->target, info);
}
}
break;
case 'a':
- if (! use_extend)
- extend = 0;
- l = ((l & 0x1f) << 23) | ((l & 0x3e0) << 13) | (extend << 2);
+ {
+ int jalx = l & 0x400;
+
+ if (! use_extend)
+ extend = 0;
+ l = ((l & 0x1f) << 23) | ((l & 0x3e0) << 13) | (extend << 2);
+ if (!jalx && info->flavour == bfd_target_unknown_flavour)
+ /* For gdb disassembler, maintain odd address. */
+ l |= 1;
+ }
info->target = ((memaddr + 4) & ~(bfd_vma) 0x0fffffff) | l;
(*info->print_address_func) (info->target, info);
info->insn_type = dis_jsr;
diff --git a/opcodes/mips-opc.c b/opcodes/mips-opc.c
index cd92a9fe217c..0b9384150a85 100644
--- a/opcodes/mips-opc.c
+++ b/opcodes/mips-opc.c
@@ -89,12 +89,15 @@ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, US
#define I33 INSN_ISA32R2
#define I65 INSN_ISA64R2
-/* MIPS64 MIPS-3D ASE support. */
+/* MIPS16 ASE support. */
#define I16 INSN_MIPS16
/* MIPS64 MIPS-3D ASE support. */
#define M3D INSN_MIPS3D
+/* MIPS32 SmartMIPS ASE support. */
+#define SMT INSN_SMARTMIPS
+
/* MIPS64 MDMX ASE support. */
#define MX INSN_MDMX
@@ -125,29 +128,31 @@ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, US
of original HI and LO. $ac1, $ac2 and $ac3 are new registers, and have
the same structure as $ac0 (HI + LO). For DSP instructions that write or
read accumulators (that may be $ac0), we add WR_a (WR_HILO) or RD_a
- (RD_HILO) attritubes, such that HILO dependences are maintained
+ (RD_HILO) attributes, such that HILO dependencies are maintained
conservatively.
2. For some mul. instructions that use integer registers as destinations
- but destroy HI+LO as side-effect, we add WR_HILO to their attritubes.
+ but destroy HI+LO as side-effect, we add WR_HILO to their attributes.
3. MIPS DSP ASE includes a new DSP control register, which has 6 fields
(ccond, outflag, EFI, c, scount, pos). Many DSP instructions read or write
certain fields of the DSP control register. For simplicity, we decide not
- to track dependences of these fields.
+ to track dependencies of these fields.
However, "bposge32" is a branch instruction that depends on the "pos"
field. In order to make sure that GAS does not reorder DSP instructions
that writes the "pos" field and "bposge32", we add DSP_VOLA (INSN_TRAP)
- attritube to those instructions that write the "pos" field. */
+ attribute to those instructions that write the "pos" field. */
#define WR_a WR_HILO /* Write dsp accumulators (reuse WR_HILO) */
#define RD_a RD_HILO /* Read dsp accumulators (reuse RD_HILO) */
#define MOD_a WR_a|RD_a
#define DSP_VOLA INSN_TRAP
-#define D32 (INSN_DSP)
+#define D32 INSN_DSP
+#define D33 INSN_DSPR2
+#define D64 INSN_DSP64
/* MIPS MT ASE support. */
-#define MT32 (INSN_MT)
+#define MT32 INSN_MT
/* The order of overloaded instructions matters. Label arguments and
register arguments look the same. Instructions that can have either
@@ -187,7 +192,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"abs", "d,v", 0, (int) M_ABS, INSN_MACRO, 0, I1 },
{"abs.s", "D,V", 0x46000005, 0xffff003f, WR_D|RD_S|FP_S, 0, I1 },
{"abs.d", "D,V", 0x46200005, 0xffff003f, WR_D|RD_S|FP_D, 0, I1 },
-{"abs.ps", "D,V", 0x46c00005, 0xffff003f, WR_D|RD_S|FP_D, 0, I5 },
+{"abs.ps", "D,V", 0x46c00005, 0xffff003f, WR_D|RD_S|FP_D, 0, I5|I33 },
{"add", "d,v,t", 0x00000020, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
{"add", "t,r,I", 0, (int) M_ADD_I, INSN_MACRO, 0, I1 },
{"add.s", "D,V,T", 0x46000000, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I1 },
@@ -196,7 +201,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"add.ob", "D,S,T", 0x4ac0000b, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
{"add.ob", "D,S,T[e]", 0x4800000b, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
{"add.ob", "D,S,k", 0x4bc0000b, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
-{"add.ps", "D,V,T", 0x46c00000, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5 },
+{"add.ps", "D,V,T", 0x46c00000, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
{"add.qh", "X,Y,Q", 0x7820000b, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
{"adda.ob", "Y,Q", 0x78000037, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX|SB1 },
{"adda.qh", "Y,Q", 0x78200037, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX },
@@ -210,7 +215,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"alni.ob", "X,Y,Z,O", 0x78000018, 0xff00003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
{"alni.ob", "D,S,T,%", 0x48000018, 0xff00003f, WR_D|RD_S|RD_T, 0, N54 },
{"alni.qh", "X,Y,Z,O", 0x7800001a, 0xff00003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
-{"alnv.ps", "D,V,T,s", 0x4c00001e, 0xfc00003f, WR_D|RD_S|RD_T|FP_D, 0, I5 },
+{"alnv.ps", "D,V,T,s", 0x4c00001e, 0xfc00003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
{"alnv.ob", "X,Y,Z,s", 0x78000019, 0xfc00003f, WR_D|RD_S|RD_T|RD_s|FP_D, 0, MX|SB1 },
{"alnv.qh", "X,Y,Z,s", 0x7800001b, 0xfc00003f, WR_D|RD_S|RD_T|RD_s|FP_D, 0, MX },
{"and", "d,v,t", 0x00000024, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
@@ -237,10 +242,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"bc1tl", "p", 0x45030000, 0xffff0000, CBL|RD_CC|FP_S, 0, I2|T3 },
{"bc1tl", "N,p", 0x45030000, 0xffe30000, CBL|RD_CC|FP_S, 0, I4|I32 },
/* bc2* are at the bottom of the table. */
-{"bc3f", "p", 0x4d000000, 0xffff0000, CBD|RD_CC, 0, I1 },
-{"bc3fl", "p", 0x4d020000, 0xffff0000, CBL|RD_CC, 0, I2|T3 },
-{"bc3t", "p", 0x4d010000, 0xffff0000, CBD|RD_CC, 0, I1 },
-{"bc3tl", "p", 0x4d030000, 0xffff0000, CBL|RD_CC, 0, I2|T3 },
+/* bc3* are at the bottom of the table. */
{"beqz", "s,p", 0x10000000, 0xfc1f0000, CBD|RD_s, 0, I1 },
{"beqzl", "s,p", 0x50000000, 0xfc1f0000, CBL|RD_s, 0, I2|T3 },
{"beq", "s,t,p", 0x10000000, 0xfc000000, CBD|RD_s|RD_t, 0, I1 },
@@ -304,14 +306,14 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"c.f.d", "M,S,T", 0x46200030, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.f.s", "S,T", 0x46000030, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
{"c.f.s", "M,S,T", 0x46000030, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
-{"c.f.ps", "S,T", 0x46c00030, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.f.ps", "M,S,T", 0x46c00030, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.f.ps", "S,T", 0x46c00030, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.f.ps", "M,S,T", 0x46c00030, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.un.d", "S,T", 0x46200031, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.un.d", "M,S,T", 0x46200031, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.un.s", "S,T", 0x46000031, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
{"c.un.s", "M,S,T", 0x46000031, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
-{"c.un.ps", "S,T", 0x46c00031, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.un.ps", "M,S,T", 0x46c00031, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.un.ps", "S,T", 0x46c00031, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.un.ps", "M,S,T", 0x46c00031, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.eq.d", "S,T", 0x46200032, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.eq.d", "M,S,T", 0x46200032, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.eq.s", "S,T", 0x46000032, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
@@ -320,63 +322,63 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"c.eq.ob", "S,T", 0x4ac00001, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
{"c.eq.ob", "S,T[e]", 0x48000001, 0xfe2007ff, WR_CC|RD_S|RD_T, 0, N54 },
{"c.eq.ob", "S,k", 0x4bc00001, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
-{"c.eq.ps", "S,T", 0x46c00032, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.eq.ps", "M,S,T", 0x46c00032, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.eq.ps", "S,T", 0x46c00032, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.eq.ps", "M,S,T", 0x46c00032, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.eq.qh", "Y,Q", 0x78200001, 0xfc2007ff, WR_CC|RD_S|RD_T|FP_D, 0, MX },
{"c.ueq.d", "S,T", 0x46200033, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.ueq.d", "M,S,T", 0x46200033, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.ueq.s", "S,T", 0x46000033, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
{"c.ueq.s", "M,S,T", 0x46000033, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
-{"c.ueq.ps","S,T", 0x46c00033, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.ueq.ps","M,S,T", 0x46c00033, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.ueq.ps","S,T", 0x46c00033, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.ueq.ps","M,S,T", 0x46c00033, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.olt.d", "S,T", 0x46200034, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.olt.d", "M,S,T", 0x46200034, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.olt.s", "S,T", 0x46000034, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
{"c.olt.s", "M,S,T", 0x46000034, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
-{"c.olt.ps","S,T", 0x46c00034, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.olt.ps","M,S,T", 0x46c00034, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.olt.ps","S,T", 0x46c00034, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.olt.ps","M,S,T", 0x46c00034, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.ult.d", "S,T", 0x46200035, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.ult.d", "M,S,T", 0x46200035, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.ult.s", "S,T", 0x46000035, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
{"c.ult.s", "M,S,T", 0x46000035, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
-{"c.ult.ps","S,T", 0x46c00035, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.ult.ps","M,S,T", 0x46c00035, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.ult.ps","S,T", 0x46c00035, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.ult.ps","M,S,T", 0x46c00035, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.ole.d", "S,T", 0x46200036, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.ole.d", "M,S,T", 0x46200036, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.ole.s", "S,T", 0x46000036, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
{"c.ole.s", "M,S,T", 0x46000036, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
-{"c.ole.ps","S,T", 0x46c00036, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.ole.ps","M,S,T", 0x46c00036, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.ole.ps","S,T", 0x46c00036, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.ole.ps","M,S,T", 0x46c00036, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.ule.d", "S,T", 0x46200037, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.ule.d", "M,S,T", 0x46200037, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.ule.s", "S,T", 0x46000037, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
{"c.ule.s", "M,S,T", 0x46000037, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
-{"c.ule.ps","S,T", 0x46c00037, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.ule.ps","M,S,T", 0x46c00037, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.ule.ps","S,T", 0x46c00037, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.ule.ps","M,S,T", 0x46c00037, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.sf.d", "S,T", 0x46200038, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.sf.d", "M,S,T", 0x46200038, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.sf.s", "S,T", 0x46000038, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
{"c.sf.s", "M,S,T", 0x46000038, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
-{"c.sf.ps", "S,T", 0x46c00038, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.sf.ps", "M,S,T", 0x46c00038, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.sf.ps", "S,T", 0x46c00038, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.sf.ps", "M,S,T", 0x46c00038, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.ngle.d","S,T", 0x46200039, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.ngle.d","M,S,T", 0x46200039, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.ngle.s","S,T", 0x46000039, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
{"c.ngle.s","M,S,T", 0x46000039, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
-{"c.ngle.ps","S,T", 0x46c00039, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.ngle.ps","M,S,T", 0x46c00039, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.ngle.ps","S,T", 0x46c00039, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.ngle.ps","M,S,T", 0x46c00039, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.seq.d", "S,T", 0x4620003a, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.seq.d", "M,S,T", 0x4620003a, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.seq.s", "S,T", 0x4600003a, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
{"c.seq.s", "M,S,T", 0x4600003a, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
-{"c.seq.ps","S,T", 0x46c0003a, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.seq.ps","M,S,T", 0x46c0003a, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.seq.ps","S,T", 0x46c0003a, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.seq.ps","M,S,T", 0x46c0003a, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.ngl.d", "S,T", 0x4620003b, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.ngl.d", "M,S,T", 0x4620003b, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.ngl.s", "S,T", 0x4600003b, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
{"c.ngl.s", "M,S,T", 0x4600003b, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
-{"c.ngl.ps","S,T", 0x46c0003b, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.ngl.ps","M,S,T", 0x46c0003b, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.ngl.ps","S,T", 0x46c0003b, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.ngl.ps","M,S,T", 0x46c0003b, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.lt.d", "S,T", 0x4620003c, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.lt.d", "M,S,T", 0x4620003c, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.lt.s", "S,T", 0x4600003c, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
@@ -385,15 +387,15 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"c.lt.ob", "S,T", 0x4ac00004, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
{"c.lt.ob", "S,T[e]", 0x48000004, 0xfe2007ff, WR_CC|RD_S|RD_T, 0, N54 },
{"c.lt.ob", "S,k", 0x4bc00004, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
-{"c.lt.ps", "S,T", 0x46c0003c, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.lt.ps", "M,S,T", 0x46c0003c, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.lt.ps", "S,T", 0x46c0003c, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.lt.ps", "M,S,T", 0x46c0003c, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.lt.qh", "Y,Q", 0x78200004, 0xfc2007ff, WR_CC|RD_S|RD_T|FP_D, 0, MX },
{"c.nge.d", "S,T", 0x4620003d, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.nge.d", "M,S,T", 0x4620003d, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.nge.s", "S,T", 0x4600003d, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
{"c.nge.s", "M,S,T", 0x4600003d, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
-{"c.nge.ps","S,T", 0x46c0003d, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.nge.ps","M,S,T", 0x46c0003d, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.nge.ps","S,T", 0x46c0003d, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.nge.ps","M,S,T", 0x46c0003d, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.le.d", "S,T", 0x4620003e, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.le.d", "M,S,T", 0x4620003e, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.le.s", "S,T", 0x4600003e, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
@@ -402,15 +404,15 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"c.le.ob", "S,T", 0x4ac00005, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
{"c.le.ob", "S,T[e]", 0x48000005, 0xfe2007ff, WR_CC|RD_S|RD_T, 0, N54 },
{"c.le.ob", "S,k", 0x4bc00005, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
-{"c.le.ps", "S,T", 0x46c0003e, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.le.ps", "M,S,T", 0x46c0003e, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.le.ps", "S,T", 0x46c0003e, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.le.ps", "M,S,T", 0x46c0003e, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"c.le.qh", "Y,Q", 0x78200005, 0xfc2007ff, WR_CC|RD_S|RD_T|FP_D, 0, MX },
{"c.ngt.d", "S,T", 0x4620003f, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
{"c.ngt.d", "M,S,T", 0x4620003f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
{"c.ngt.s", "S,T", 0x4600003f, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
{"c.ngt.s", "M,S,T", 0x4600003f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
-{"c.ngt.ps","S,T", 0x46c0003f, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
-{"c.ngt.ps","M,S,T", 0x46c0003f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5 },
+{"c.ngt.ps","S,T", 0x46c0003f, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
+{"c.ngt.ps","M,S,T", 0x46c0003f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
{"cabs.eq.d", "M,S,T", 0x46200072, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
{"cabs.eq.ps", "M,S,T", 0x46c00072, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
{"cabs.eq.s", "M,S,T", 0x46000072, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
@@ -459,7 +461,13 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"cabs.un.d", "M,S,T", 0x46200071, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
{"cabs.un.ps", "M,S,T", 0x46c00071, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
{"cabs.un.s", "M,S,T", 0x46000071, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
+/* CW4010 instructions which are aliases for the cache instruction. */
+{"flushi", "", 0xbc010000, 0xffffffff, 0, 0, L1 },
+{"flushd", "", 0xbc020000, 0xffffffff, 0, 0, L1 },
+{"flushid", "", 0xbc030000, 0xffffffff, 0, 0, L1 },
+{"wb", "o(b)", 0xbc040000, 0xfc1f0000, SM|RD_b, 0, L1 },
{"cache", "k,o(b)", 0xbc000000, 0xfc000000, RD_b, 0, I3|I32|T3},
+{"cache", "k,A(b)", 0, (int) M_CACHE_AB, INSN_MACRO, 0, I3|I32|T3},
{"ceil.l.d", "D,S", 0x4620000a, 0xffff003f, WR_D|RD_S|FP_D, 0, I3|I33 },
{"ceil.l.s", "D,S", 0x4600000a, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I3|I33 },
{"ceil.w.d", "D,S", 0x4620000e, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I2 },
@@ -468,7 +476,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"cfc1", "t,G", 0x44400000, 0xffe007ff, LCD|WR_t|RD_C1|FP_S, 0, I1 },
{"cfc1", "t,S", 0x44400000, 0xffe007ff, LCD|WR_t|RD_C1|FP_S, 0, I1 },
/* cfc2 is at the bottom of the table. */
-{"cfc3", "t,G", 0x4c400000, 0xffe007ff, LCD|WR_t|RD_C3, 0, I1 },
+/* cfc3 is at the bottom of the table. */
{"cftc1", "d,E", 0x41000023, 0xffe007ff, TRAP|LCD|WR_d|RD_C1|FP_S, 0, MT32 },
{"cftc1", "d,T", 0x41000023, 0xffe007ff, TRAP|LCD|WR_d|RD_C1|FP_S, 0, MT32 },
{"cftc2", "d,E", 0x41000025, 0xffe007ff, TRAP|LCD|WR_d|RD_C2, 0, MT32 },
@@ -478,7 +486,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"ctc1", "t,G", 0x44c00000, 0xffe007ff, COD|RD_t|WR_CC|FP_S, 0, I1 },
{"ctc1", "t,S", 0x44c00000, 0xffe007ff, COD|RD_t|WR_CC|FP_S, 0, I1 },
/* ctc2 is at the bottom of the table. */
-{"ctc3", "t,G", 0x4cc00000, 0xffe007ff, COD|RD_t|WR_CC, 0, I1 },
+/* ctc3 is at the bottom of the table. */
{"cttc1", "t,g", 0x41800023, 0xffe007ff, TRAP|COD|RD_t|WR_CC|FP_S, 0, MT32 },
{"cttc1", "t,S", 0x41800023, 0xffe007ff, TRAP|COD|RD_t|WR_CC|FP_S, 0, MT32 },
{"cttc2", "t,g", 0x41800025, 0xffe007ff, TRAP|COD|RD_t|WR_CC, 0, MT32 },
@@ -486,16 +494,16 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"cvt.d.s", "D,S", 0x46000021, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I1 },
{"cvt.d.w", "D,S", 0x46800021, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I1 },
{"cvt.l.d", "D,S", 0x46200025, 0xffff003f, WR_D|RD_S|FP_D, 0, I3|I33 },
-{"cvt.l.s", "D,S", 0x46000025, 0xffff003f, WR_D|RD_S|FP_S|FP_S, 0, I3|I33 },
-{"cvt.s.l", "D,S", 0x46a00020, 0xffff003f, WR_D|RD_S|FP_S|FP_S, 0, I3|I33 },
+{"cvt.l.s", "D,S", 0x46000025, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I3|I33 },
+{"cvt.s.l", "D,S", 0x46a00020, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I3|I33 },
{"cvt.s.d", "D,S", 0x46200020, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I1 },
{"cvt.s.w", "D,S", 0x46800020, 0xffff003f, WR_D|RD_S|FP_S, 0, I1 },
-{"cvt.s.pl","D,S", 0x46c00028, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I5 },
-{"cvt.s.pu","D,S", 0x46c00020, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I5 },
+{"cvt.s.pl","D,S", 0x46c00028, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I5|I33 },
+{"cvt.s.pu","D,S", 0x46c00020, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I5|I33 },
{"cvt.w.d", "D,S", 0x46200024, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I1 },
{"cvt.w.s", "D,S", 0x46000024, 0xffff003f, WR_D|RD_S|FP_S, 0, I1 },
{"cvt.ps.pw", "D,S", 0x46800026, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, M3D },
-{"cvt.ps.s","D,V,T", 0x46000026, 0xffe0003f, WR_D|RD_S|RD_T|FP_S|FP_D, 0, I5 },
+{"cvt.ps.s","D,V,T", 0x46000026, 0xffe0003f, WR_D|RD_S|RD_T|FP_S|FP_D, 0, I5|I33 },
{"cvt.pw.ps", "D,S", 0x46c00024, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, M3D },
{"dabs", "d,v", 0, (int) M_DABS, INSN_MACRO, 0, I3 },
{"dadd", "d,v,t", 0x0000002c, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I3 },
@@ -573,10 +581,8 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"dmtc1", "t,G", 0x44a00000, 0xffe007ff, COD|RD_t|WR_S|FP_D, 0, I3 },
/* dmfc2 is at the bottom of the table. */
/* dmtc2 is at the bottom of the table. */
-{"dmfc3", "t,G", 0x4c200000, 0xffe007ff, LCD|WR_t|RD_C3, 0, I3 },
-{"dmfc3", "t,G,H", 0x4c200000, 0xffe007f8, LCD|WR_t|RD_C3, 0, I64 },
-{"dmtc3", "t,G", 0x4ca00000, 0xffe007ff, COD|RD_t|WR_C3|WR_CC, 0, I3 },
-{"dmtc3", "t,G,H", 0x4ca00000, 0xffe007f8, COD|RD_t|WR_C3|WR_CC, 0, I64 },
+/* dmfc3 is at the bottom of the table. */
+/* dmtc3 is at the bottom of the table. */
{"dmul", "d,v,t", 0, (int) M_DMUL, INSN_MACRO, 0, I3 },
{"dmul", "d,v,I", 0, (int) M_DMUL_I, INSN_MACRO, 0, I3 },
{"dmulo", "d,v,t", 0, (int) M_DMULO, INSN_MACRO, 0, I3 },
@@ -639,16 +645,15 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"evpe", "t", 0x41600021, 0xffe0ffff, TRAP|WR_t, 0, MT32 },
{"ext", "t,r,+A,+C", 0x7c000000, 0xfc00003f, WR_t|RD_s, 0, I33 },
{"floor.l.d", "D,S", 0x4620000b, 0xffff003f, WR_D|RD_S|FP_D, 0, I3|I33 },
-{"floor.l.s", "D,S", 0x4600000b, 0xffff003f, WR_D|RD_S|FP_S|FP_S, 0, I3|I33 },
+{"floor.l.s", "D,S", 0x4600000b, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I3|I33 },
{"floor.w.d", "D,S", 0x4620000f, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I2 },
{"floor.w.s", "D,S", 0x4600000f, 0xffff003f, WR_D|RD_S|FP_S, 0, I2 },
-{"flushi", "", 0xbc010000, 0xffffffff, 0, 0, L1 },
-{"flushd", "", 0xbc020000, 0xffffffff, 0, 0, L1 },
-{"flushid", "", 0xbc030000, 0xffffffff, 0, 0, L1 },
{"hibernate","", 0x42000023, 0xffffffff, 0, 0, V1 },
{"ins", "t,r,+A,+B", 0x7c000004, 0xfc00003f, WR_t|RD_s, 0, I33 },
{"jr", "s", 0x00000008, 0xfc1fffff, UBD|RD_s, 0, I1 },
-{"jr.hb", "s", 0x00000408, 0xfc1fffff, UBD|RD_s, 0, I33 },
+/* jr.hb is officially MIPS{32,64}R2, but it works on R1 as jr with
+ the same hazard barrier effect. */
+{"jr.hb", "s", 0x00000408, 0xfc1fffff, UBD|RD_s, 0, I32 },
{"j", "s", 0x00000008, 0xfc1fffff, UBD|RD_s, 0, I1 }, /* jr */
/* SVR4 PIC code requires special handling for j, so it must be a
macro. */
@@ -659,8 +664,10 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"j", "a", 0x08000000, 0xfc000000, UBD, 0, I1 },
{"jalr", "s", 0x0000f809, 0xfc1fffff, UBD|RD_s|WR_d, 0, I1 },
{"jalr", "d,s", 0x00000009, 0xfc1f07ff, UBD|RD_s|WR_d, 0, I1 },
-{"jalr.hb", "s", 0x0000fc09, 0xfc1fffff, UBD|RD_s|WR_d, 0, I33 },
-{"jalr.hb", "d,s", 0x00000409, 0xfc1f07ff, UBD|RD_s|WR_d, 0, I33 },
+/* jalr.hb is officially MIPS{32,64}R2, but it works on R1 as jalr
+ with the same hazard barrier effect. */
+{"jalr.hb", "s", 0x0000fc09, 0xfc1fffff, UBD|RD_s|WR_d, 0, I32 },
+{"jalr.hb", "d,s", 0x00000409, 0xfc1f07ff, UBD|RD_s|WR_d, 0, I32 },
/* SVR4 PIC code requires special handling for jal, so it must be a
macro. */
{"jal", "d,s", 0, (int) M_JAL_2, INSN_MACRO, 0, I1 },
@@ -710,7 +717,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"lld", "t,o(b)", 0xd0000000, 0xfc000000, LDD|RD_b|WR_t, 0, I3 },
{"lld", "t,A(b)", 0, (int) M_LLD_AB, INSN_MACRO, 0, I3 },
{"lui", "t,u", 0x3c000000, 0xffe00000, WR_t, 0, I1 },
-{"luxc1", "D,t(b)", 0x4c000005, 0xfc00f83f, LDD|WR_D|RD_t|RD_b, 0, I5|N55 },
+{"luxc1", "D,t(b)", 0x4c000005, 0xfc00f83f, LDD|WR_D|RD_t|RD_b|FP_D, 0, I5|I33|N55},
{"lw", "t,o(b)", 0x8c000000, 0xfc000000, LDD|RD_b|WR_t, 0, I1 },
{"lw", "t,A(b)", 0, (int) M_LW_AB, INSN_MACRO, 0, I1 },
{"lwc0", "E,o(b)", 0xc0000000, 0xfc000000, CLD|RD_b|WR_CC, 0, I1 },
@@ -737,6 +744,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"lwu", "t,o(b)", 0x9c000000, 0xfc000000, LDD|RD_b|WR_t, 0, I3 },
{"lwu", "t,A(b)", 0, (int) M_LWU_AB, INSN_MACRO, 0, I3 },
{"lwxc1", "D,t(b)", 0x4c000000, 0xfc00f83f, LDD|WR_D|RD_t|RD_b|FP_D, 0, I4|I33 },
+{"lwxs", "d,t(b)", 0x70000088, 0xfc0007ff, LDD|RD_b|RD_t|WR_d, 0, SMT },
{"macc", "d,s,t", 0x00000028, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N412 },
{"macc", "d,s,t", 0x00000158, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
{"maccs", "d,s,t", 0x00000428, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N412 },
@@ -753,14 +761,17 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"madu", "s,t", 0x70000001, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, P3 },
{"madd.d", "D,R,S,T", 0x4c000021, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I4|I33 },
{"madd.s", "D,R,S,T", 0x4c000020, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, 0, I4|I33 },
-{"madd.ps", "D,R,S,T", 0x4c000026, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5 },
-{"madd", "s,t", 0x0000001c, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, L1 },
-{"madd", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, I32|N55},
-{"madd", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M, 0, G1 },
-{"madd", "d,s,t", 0x70000000, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d|IS_M, 0, G1 },
-{"maddu", "s,t", 0x0000001d, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, L1 },
-{"maddu", "s,t", 0x70000001, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, I32|N55},
+{"madd.ps", "D,R,S,T", 0x4c000026, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5|I33 },
+{"madd", "s,t", 0x0000001c, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, L1 },
+{"madd", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, I32|N55 },
+{"madd", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M, 0, G1 },
+{"madd", "7,s,t", 0x70000000, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
+{"madd", "d,s,t", 0x70000000, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d|IS_M, 0, G1 },
+{"maddp", "s,t", 0x70000441, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, SMT },
+{"maddu", "s,t", 0x0000001d, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, L1 },
+{"maddu", "s,t", 0x70000001, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, I32|N55 },
{"maddu", "s,t", 0x70000001, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M, 0, G1 },
+{"maddu", "7,s,t", 0x70000001, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
{"maddu", "d,s,t", 0x70000001, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d|IS_M, 0, G1 },
{"madd16", "s,t", 0x00000028, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, N411 },
{"max.ob", "X,Y,Q", 0x78000007, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
@@ -797,13 +808,13 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"mfhc1", "t,G", 0x44600000, 0xffe007ff, LCD|WR_t|RD_S|FP_D, 0, I33 },
/* mfc2 is at the bottom of the table. */
/* mfhc2 is at the bottom of the table. */
-{"mfc3", "t,G", 0x4c000000, 0xffe007ff, LCD|WR_t|RD_C3, 0, I1 },
-{"mfc3", "t,G,H", 0x4c000000, 0xffe007f8, LCD|WR_t|RD_C3, 0, I32 },
+/* mfc3 is at the bottom of the table. */
{"mfdr", "t,G", 0x7000003d, 0xffe007ff, LCD|WR_t|RD_C0, 0, N5 },
{"mfhi", "d", 0x00000010, 0xffff07ff, WR_d|RD_HI, 0, I1 },
{"mfhi", "d,9", 0x00000010, 0xff9f07ff, WR_d|RD_HI, 0, D32 },
{"mflo", "d", 0x00000012, 0xffff07ff, WR_d|RD_LO, 0, I1 },
{"mflo", "d,9", 0x00000012, 0xff9f07ff, WR_d|RD_LO, 0, D32 },
+{"mflhxu", "d", 0x00000052, 0xffff07ff, WR_d|MOD_HILO, 0, SMT },
{"min.ob", "X,Y,Q", 0x78000006, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
{"min.ob", "D,S,T", 0x4ac00006, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
{"min.ob", "D,S,T[e]", 0x48000006, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
@@ -811,33 +822,33 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"min.qh", "X,Y,Q", 0x78200006, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
{"mov.d", "D,S", 0x46200006, 0xffff003f, WR_D|RD_S|FP_D, 0, I1 },
{"mov.s", "D,S", 0x46000006, 0xffff003f, WR_D|RD_S|FP_S, 0, I1 },
-{"mov.ps", "D,S", 0x46c00006, 0xffff003f, WR_D|RD_S|FP_D, 0, I5 },
+{"mov.ps", "D,S", 0x46c00006, 0xffff003f, WR_D|RD_S|FP_D, 0, I5|I33 },
{"movf", "d,s,N", 0x00000001, 0xfc0307ff, WR_d|RD_s|RD_CC|FP_S|FP_D, 0, I4|I32 },
{"movf.d", "D,S,N", 0x46200011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, I4|I32 },
{"movf.l", "D,S,N", 0x46a00011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, MX|SB1 },
{"movf.l", "X,Y,N", 0x46a00011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, MX|SB1 },
{"movf.s", "D,S,N", 0x46000011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_S, 0, I4|I32 },
-{"movf.ps", "D,S,N", 0x46c00011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, I5 },
+{"movf.ps", "D,S,N", 0x46c00011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, I5|I33 },
{"movn", "d,v,t", 0x0000000b, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I4|I32 },
{"ffc", "d,v", 0x0000000b, 0xfc1f07ff, WR_d|RD_s, 0, L1 },
{"movn.d", "D,S,t", 0x46200013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, I4|I32 },
{"movn.l", "D,S,t", 0x46a00013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, MX|SB1 },
{"movn.l", "X,Y,t", 0x46a00013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, MX|SB1 },
{"movn.s", "D,S,t", 0x46000013, 0xffe0003f, WR_D|RD_S|RD_t|FP_S, 0, I4|I32 },
-{"movn.ps", "D,S,t", 0x46c00013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, I5 },
+{"movn.ps", "D,S,t", 0x46c00013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, I5|I33 },
{"movt", "d,s,N", 0x00010001, 0xfc0307ff, WR_d|RD_s|RD_CC|FP_S|FP_D, 0, I4|I32 },
{"movt.d", "D,S,N", 0x46210011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, I4|I32 },
{"movt.l", "D,S,N", 0x46a10011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, MX|SB1 },
{"movt.l", "X,Y,N", 0x46a10011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, MX|SB1 },
{"movt.s", "D,S,N", 0x46010011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_S, 0, I4|I32 },
-{"movt.ps", "D,S,N", 0x46c10011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, I5 },
+{"movt.ps", "D,S,N", 0x46c10011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, I5|I33 },
{"movz", "d,v,t", 0x0000000a, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I4|I32 },
{"ffs", "d,v", 0x0000000a, 0xfc1f07ff, WR_d|RD_s, 0, L1 },
{"movz.d", "D,S,t", 0x46200012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, I4|I32 },
{"movz.l", "D,S,t", 0x46a00012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, MX|SB1 },
{"movz.l", "X,Y,t", 0x46a00012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, MX|SB1 },
{"movz.s", "D,S,t", 0x46000012, 0xffe0003f, WR_D|RD_S|RD_t|FP_S, 0, I4|I32 },
-{"movz.ps", "D,S,t", 0x46c00012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, I5 },
+{"movz.ps", "D,S,t", 0x46c00012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, I5|I33 },
{"msac", "d,s,t", 0x000001d8, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
{"msacu", "d,s,t", 0x000001d9, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
{"msachi", "d,s,t", 0x000003d8, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
@@ -846,11 +857,13 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"msgn.qh", "X,Y,Q", 0x78200000, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
{"msub.d", "D,R,S,T", 0x4c000029, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I4|I33 },
{"msub.s", "D,R,S,T", 0x4c000028, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, 0, I4|I33 },
-{"msub.ps", "D,R,S,T", 0x4c00002e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5 },
+{"msub.ps", "D,R,S,T", 0x4c00002e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5|I33 },
{"msub", "s,t", 0x0000001e, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, L1 },
{"msub", "s,t", 0x70000004, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, I32|N55 },
+{"msub", "7,s,t", 0x70000004, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
{"msubu", "s,t", 0x0000001f, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, L1 },
{"msubu", "s,t", 0x70000005, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, I32|N55 },
+{"msubu", "7,s,t", 0x70000005, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
{"mtpc", "t,P", 0x4080c801, 0xffe0ffc1, COD|RD_t|WR_C0, 0, M1|N5 },
{"mtps", "t,P", 0x4080c800, 0xffe0ffc1, COD|RD_t|WR_C0, 0, M1|N5 },
{"mtc0", "t,G", 0x40800000, 0xffe007ff, COD|RD_t|WR_C0|WR_CC, 0, I1 },
@@ -862,13 +875,13 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"mthc1", "t,G", 0x44e00000, 0xffe007ff, COD|RD_t|WR_S|FP_D, 0, I33 },
/* mtc2 is at the bottom of the table. */
/* mthc2 is at the bottom of the table. */
-{"mtc3", "t,G", 0x4c800000, 0xffe007ff, COD|RD_t|WR_C3|WR_CC, 0, I1 },
-{"mtc3", "t,G,H", 0x4c800000, 0xffe007f8, COD|RD_t|WR_C3|WR_CC, 0, I32 },
+/* mtc3 is at the bottom of the table. */
{"mtdr", "t,G", 0x7080003d, 0xffe007ff, COD|RD_t|WR_C0, 0, N5 },
{"mthi", "s", 0x00000011, 0xfc1fffff, RD_s|WR_HI, 0, I1 },
{"mthi", "s,7", 0x00000011, 0xfc1fe7ff, RD_s|WR_HI, 0, D32 },
{"mtlo", "s", 0x00000013, 0xfc1fffff, RD_s|WR_LO, 0, I1 },
{"mtlo", "s,7", 0x00000013, 0xfc1fe7ff, RD_s|WR_LO, 0, D32 },
+{"mtlhx", "s", 0x00000053, 0xfc1fffff, RD_s|MOD_HILO, 0, SMT },
{"mttc0", "t,G", 0x41800000, 0xffe007ff, TRAP|COD|RD_t|WR_C0|WR_CC, 0, MT32 },
{"mttc0", "t,+D", 0x41800000, 0xffe007f8, TRAP|COD|RD_t|WR_C0|WR_CC, 0, MT32 },
{"mttc0", "t,G,H", 0x41800000, 0xffe007f8, TRAP|COD|RD_t|WR_C0|WR_CC, 0, MT32 },
@@ -893,7 +906,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"mul.ob", "D,S,T", 0x4ac00030, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
{"mul.ob", "D,S,T[e]", 0x48000030, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
{"mul.ob", "D,S,k", 0x4bc00030, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
-{"mul.ps", "D,V,T", 0x46c00002, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5 },
+{"mul.ps", "D,V,T", 0x46c00002, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
{"mul.qh", "X,Y,Q", 0x78200030, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
{"mul", "d,v,t", 0x70000002, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, I32|P3|N55},
{"mul", "d,s,t", 0x00000058, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N54 },
@@ -931,21 +944,24 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"mulsl.ob", "S,k", 0x4bc00432, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
{"mulsl.qh", "Y,Q", 0x78200432, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX },
{"mult", "s,t", 0x00000018, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M, 0, I1 },
+{"mult", "7,s,t", 0x00000018, 0xfc00e7ff, WR_a|RD_s|RD_t, 0, D33 },
{"mult", "d,s,t", 0x00000018, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d|IS_M, 0, G1 },
+{"multp", "s,t", 0x00000459, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, SMT },
{"multu", "s,t", 0x00000019, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M, 0, I1 },
+{"multu", "7,s,t", 0x00000019, 0xfc00e7ff, WR_a|RD_s|RD_t, 0, D33 },
{"multu", "d,s,t", 0x00000019, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d|IS_M, 0, G1 },
{"mulu", "d,s,t", 0x00000059, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
{"neg", "d,w", 0x00000022, 0xffe007ff, WR_d|RD_t, 0, I1 }, /* sub 0 */
{"negu", "d,w", 0x00000023, 0xffe007ff, WR_d|RD_t, 0, I1 }, /* subu 0 */
{"neg.d", "D,V", 0x46200007, 0xffff003f, WR_D|RD_S|FP_D, 0, I1 },
{"neg.s", "D,V", 0x46000007, 0xffff003f, WR_D|RD_S|FP_S, 0, I1 },
-{"neg.ps", "D,V", 0x46c00007, 0xffff003f, WR_D|RD_S|FP_D, 0, I5 },
+{"neg.ps", "D,V", 0x46c00007, 0xffff003f, WR_D|RD_S|FP_D, 0, I5|I33 },
{"nmadd.d", "D,R,S,T", 0x4c000031, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I4|I33 },
{"nmadd.s", "D,R,S,T", 0x4c000030, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, 0, I4|I33 },
-{"nmadd.ps","D,R,S,T", 0x4c000036, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5 },
+{"nmadd.ps","D,R,S,T", 0x4c000036, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5|I33 },
{"nmsub.d", "D,R,S,T", 0x4c000039, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I4|I33 },
{"nmsub.s", "D,R,S,T", 0x4c000038, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, 0, I4|I33 },
-{"nmsub.ps","D,R,S,T", 0x4c00003e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5 },
+{"nmsub.ps","D,R,S,T", 0x4c00003e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5|I33 },
/* nop is at the start of the table. */
{"nor", "d,v,t", 0x00000027, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
{"nor", "t,r,I", 0, (int) M_NOR_I, INSN_MACRO, 0, I1 },
@@ -976,11 +992,12 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"pickt.ob", "D,S,T[e]",0x48000003, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
{"pickt.ob", "D,S,k", 0x4bc00003, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
{"pickt.qh", "X,Y,Q", 0x78200003, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
-{"pll.ps", "D,V,T", 0x46c0002c, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5 },
-{"plu.ps", "D,V,T", 0x46c0002d, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5 },
+{"pll.ps", "D,V,T", 0x46c0002c, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
+{"plu.ps", "D,V,T", 0x46c0002d, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
/* pref and prefx are at the start of the table. */
-{"pul.ps", "D,V,T", 0x46c0002e, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5 },
-{"puu.ps", "D,V,T", 0x46c0002f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5 },
+{"pul.ps", "D,V,T", 0x46c0002e, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
+{"puu.ps", "D,V,T", 0x46c0002f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
+{"pperm", "s,t", 0x70000481, 0xfc00ffff, MOD_HILO|RD_s|RD_t, 0, SMT },
{"rach.ob", "X", 0x7a00003f, 0xfffff83f, WR_D|FP_D, RD_MACC, MX|SB1 },
{"rach.ob", "D", 0x4a00003f, 0xfffff83f, WR_D, 0, N54 },
{"rach.qh", "X", 0x7a20003f, 0xfffff83f, WR_D|FP_D, RD_MACC, MX },
@@ -1018,15 +1035,15 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"rol", "d,v,I", 0, (int) M_ROL_I, INSN_MACRO, 0, I1 },
{"ror", "d,v,t", 0, (int) M_ROR, INSN_MACRO, 0, I1 },
{"ror", "d,v,I", 0, (int) M_ROR_I, INSN_MACRO, 0, I1 },
-{"ror", "d,w,<", 0x00200002, 0xffe0003f, WR_d|RD_t, 0, N5|I33 },
-{"rorv", "d,t,s", 0x00000046, 0xfc0007ff, RD_t|RD_s|WR_d, 0, N5|I33 },
-{"rotl", "d,v,t", 0, (int) M_ROL, INSN_MACRO, 0, I33 },
-{"rotl", "d,v,I", 0, (int) M_ROL_I, INSN_MACRO, 0, I33 },
-{"rotr", "d,v,t", 0, (int) M_ROR, INSN_MACRO, 0, I33 },
-{"rotr", "d,v,I", 0, (int) M_ROR_I, INSN_MACRO, 0, I33 },
-{"rotrv", "d,t,s", 0x00000046, 0xfc0007ff, RD_t|RD_s|WR_d, 0, I33 },
+{"ror", "d,w,<", 0x00200002, 0xffe0003f, WR_d|RD_t, 0, N5|I33|SMT },
+{"rorv", "d,t,s", 0x00000046, 0xfc0007ff, RD_t|RD_s|WR_d, 0, N5|I33|SMT },
+{"rotl", "d,v,t", 0, (int) M_ROL, INSN_MACRO, 0, I33|SMT },
+{"rotl", "d,v,I", 0, (int) M_ROL_I, INSN_MACRO, 0, I33|SMT },
+{"rotr", "d,v,t", 0, (int) M_ROR, INSN_MACRO, 0, I33|SMT },
+{"rotr", "d,v,I", 0, (int) M_ROR_I, INSN_MACRO, 0, I33|SMT },
+{"rotrv", "d,t,s", 0x00000046, 0xfc0007ff, RD_t|RD_s|WR_d, 0, I33|SMT },
{"round.l.d", "D,S", 0x46200008, 0xffff003f, WR_D|RD_S|FP_D, 0, I3|I33 },
-{"round.l.s", "D,S", 0x46000008, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I3 },
+{"round.l.s", "D,S", 0x46000008, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I3|I33 },
{"round.w.d", "D,S", 0x4620000c, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I2 },
{"round.w.s", "D,S", 0x4600000c, 0xffff003f, WR_D|RD_S|FP_S, 0, I2 },
{"rsqrt.d", "D,S", 0x46200016, 0xffff003f, WR_D|RD_S|FP_D, 0, I4|I33 },
@@ -1145,7 +1162,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"sub.ob", "D,S,T", 0x4ac0000a, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
{"sub.ob", "D,S,T[e]", 0x4800000a, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
{"sub.ob", "D,S,k", 0x4bc0000a, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
-{"sub.ps", "D,V,T", 0x46c00001, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5 },
+{"sub.ps", "D,V,T", 0x46c00001, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
{"sub.qh", "X,Y,Q", 0x7820000a, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
{"suba.ob", "Y,Q", 0x78000036, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX|SB1 },
{"suba.qh", "Y,Q", 0x78200036, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX },
@@ -1154,7 +1171,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"subu", "d,v,t", 0x00000023, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
{"subu", "d,v,I", 0, (int) M_SUBU_I, INSN_MACRO, 0, I1 },
{"suspend", "", 0x42000022, 0xffffffff, 0, 0, V1 },
-{"suxc1", "S,t(b)", 0x4c00000d, 0xfc0007ff, SM|RD_S|RD_t|RD_b, 0, I5|N55 },
+{"suxc1", "S,t(b)", 0x4c00000d, 0xfc0007ff, SM|RD_S|RD_t|RD_b, 0, I5|I33|N55},
{"sw", "t,o(b)", 0xac000000, 0xfc000000, SM|RD_t|RD_b, 0, I1 },
{"sw", "t,A(b)", 0, (int) M_SW_AB, INSN_MACRO, 0, I1 },
{"swc0", "E,o(b)", 0xe0000000, 0xfc000000, SM|RD_C0|RD_b, 0, I1 },
@@ -1249,7 +1266,6 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"wait", "", 0x42000020, 0xffffffff, TRAP, 0, I3|I32 },
{"wait", "J", 0x42000020, 0xfe00003f, TRAP, 0, I32|N55 },
{"waiti", "", 0x42000020, 0xffffffff, TRAP, 0, L1 },
-{"wb", "o(b)", 0xbc040000, 0xfc1f0000, SM|RD_b, 0, L1 },
{"wrpgpr", "d,w", 0x41c00000, 0xffe007ff, RD_t, 0, I33 },
{"wsbh", "d,w", 0x7c0000a0, 0xffe007ff, WR_d|RD_t, 0, I33 },
{"xor", "d,v,t", 0x00000026, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
@@ -1263,12 +1279,82 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"yield", "s", 0x7c000009, 0xfc1fffff, TRAP|RD_s, 0, MT32 },
{"yield", "d,s", 0x7c000009, 0xfc1f07ff, TRAP|WR_d|RD_s, 0, MT32 },
+/* User Defined Instruction. */
+{"udi0", "s,t,d,+1",0x70000010, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi0", "s,t,+2", 0x70000010, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi0", "s,+3", 0x70000010, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi0", "+4", 0x70000010, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi1", "s,t,d,+1",0x70000011, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi1", "s,t,+2", 0x70000011, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi1", "s,+3", 0x70000011, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi1", "+4", 0x70000011, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi2", "s,t,d,+1",0x70000012, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi2", "s,t,+2", 0x70000012, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi2", "s,+3", 0x70000012, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi2", "+4", 0x70000012, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi3", "s,t,d,+1",0x70000013, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi3", "s,t,+2", 0x70000013, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi3", "s,+3", 0x70000013, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi3", "+4", 0x70000013, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi4", "s,t,d,+1",0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi4", "s,t,+2", 0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi4", "s,+3", 0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi4", "+4", 0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi5", "s,t,d,+1",0x70000015, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi5", "s,t,+2", 0x70000015, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi5", "s,+3", 0x70000015, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi5", "+4", 0x70000015, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi6", "s,t,d,+1",0x70000016, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi6", "s,t,+2", 0x70000016, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi6", "s,+3", 0x70000016, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi6", "+4", 0x70000016, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi7", "s,t,d,+1",0x70000017, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi7", "s,t,+2", 0x70000017, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi7", "s,+3", 0x70000017, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi7", "+4", 0x70000017, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi8", "s,t,d,+1",0x70000018, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi8", "s,t,+2", 0x70000018, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi8", "s,+3", 0x70000018, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi8", "+4", 0x70000018, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi9", "s,t,d,+1",0x70000019, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi9", "s,t,+2", 0x70000019, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi9", "s,+3", 0x70000019, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi9", "+4", 0x70000019, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi10", "s,t,d,+1",0x7000001a, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi10", "s,t,+2", 0x7000001a, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi10", "s,+3", 0x7000001a, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi10", "+4", 0x7000001a, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi11", "s,t,d,+1",0x7000001b, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi11", "s,t,+2", 0x7000001b, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi11", "s,+3", 0x7000001b, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi11", "+4", 0x7000001b, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi12", "s,t,d,+1",0x7000001c, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi12", "s,t,+2", 0x7000001c, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi12", "s,+3", 0x7000001c, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi12", "+4", 0x7000001c, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi13", "s,t,d,+1",0x7000001d, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi13", "s,t,+2", 0x7000001d, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi13", "s,+3", 0x7000001d, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi13", "+4", 0x7000001d, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi14", "s,t,d,+1",0x7000001e, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi14", "s,t,+2", 0x7000001e, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi14", "s,+3", 0x7000001e, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi14", "+4", 0x7000001e, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi15", "s,t,d,+1",0x7000001f, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi15", "s,t,+2", 0x7000001f, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi15", "s,+3", 0x7000001f, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi15", "+4", 0x7000001f, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+
/* Coprocessor 2 move/branch operations overlap with VR5400 .ob format
instructions so they are here for the latters to take precedence. */
{"bc2f", "p", 0x49000000, 0xffff0000, CBD|RD_CC, 0, I1 },
+{"bc2f", "N,p", 0x49000000, 0xffe30000, CBD|RD_CC, 0, I32 },
{"bc2fl", "p", 0x49020000, 0xffff0000, CBL|RD_CC, 0, I2|T3 },
+{"bc2fl", "N,p", 0x49020000, 0xffe30000, CBL|RD_CC, 0, I32 },
{"bc2t", "p", 0x49010000, 0xffff0000, CBD|RD_CC, 0, I1 },
+{"bc2t", "N,p", 0x49010000, 0xffe30000, CBD|RD_CC, 0, I32 },
{"bc2tl", "p", 0x49030000, 0xffff0000, CBL|RD_CC, 0, I2|T3 },
+{"bc2tl", "N,p", 0x49030000, 0xffe30000, CBL|RD_CC, 0, I32 },
{"cfc2", "t,G", 0x48400000, 0xffe007ff, LCD|WR_t|RD_C2, 0, I1 },
{"ctc2", "t,G", 0x48c00000, 0xffe007ff, COD|RD_t|WR_CC, 0, I1 },
{"dmfc2", "t,G", 0x48200000, 0xffe007ff, LCD|WR_t|RD_C2, 0, I3 },
@@ -1277,11 +1363,30 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"dmtc2", "t,G,H", 0x48a00000, 0xffe007f8, COD|RD_t|WR_C2|WR_CC, 0, I64 },
{"mfc2", "t,G", 0x48000000, 0xffe007ff, LCD|WR_t|RD_C2, 0, I1 },
{"mfc2", "t,G,H", 0x48000000, 0xffe007f8, LCD|WR_t|RD_C2, 0, I32 },
+{"mfhc2", "t,G", 0x48600000, 0xffe007ff, LCD|WR_t|RD_C2, 0, I33 },
+{"mfhc2", "t,G,H", 0x48600000, 0xffe007f8, LCD|WR_t|RD_C2, 0, I33 },
{"mfhc2", "t,i", 0x48600000, 0xffe00000, LCD|WR_t|RD_C2, 0, I33 },
{"mtc2", "t,G", 0x48800000, 0xffe007ff, COD|RD_t|WR_C2|WR_CC, 0, I1 },
{"mtc2", "t,G,H", 0x48800000, 0xffe007f8, COD|RD_t|WR_C2|WR_CC, 0, I32 },
+{"mthc2", "t,G", 0x48e00000, 0xffe007ff, COD|RD_t|WR_C2|WR_CC, 0, I33 },
+{"mthc2", "t,G,H", 0x48e00000, 0xffe007f8, COD|RD_t|WR_C2|WR_CC, 0, I33 },
{"mthc2", "t,i", 0x48e00000, 0xffe00000, COD|RD_t|WR_C2|WR_CC, 0, I33 },
+/* Coprocessor 3 move/branch operations overlap with MIPS IV COP1X
+ instructions, so they are here for the latters to take precedence. */
+{"bc3f", "p", 0x4d000000, 0xffff0000, CBD|RD_CC, 0, I1 },
+{"bc3fl", "p", 0x4d020000, 0xffff0000, CBL|RD_CC, 0, I2|T3 },
+{"bc3t", "p", 0x4d010000, 0xffff0000, CBD|RD_CC, 0, I1 },
+{"bc3tl", "p", 0x4d030000, 0xffff0000, CBL|RD_CC, 0, I2|T3 },
+{"cfc3", "t,G", 0x4c400000, 0xffe007ff, LCD|WR_t|RD_C3, 0, I1 },
+{"ctc3", "t,G", 0x4cc00000, 0xffe007ff, COD|RD_t|WR_CC, 0, I1 },
+{"dmfc3", "t,G", 0x4c200000, 0xffe007ff, LCD|WR_t|RD_C3, 0, I3 },
+{"dmtc3", "t,G", 0x4ca00000, 0xffe007ff, COD|RD_t|WR_C3|WR_CC, 0, I3 },
+{"mfc3", "t,G", 0x4c000000, 0xffe007ff, LCD|WR_t|RD_C3, 0, I1 },
+{"mfc3", "t,G,H", 0x4c000000, 0xffe007f8, LCD|WR_t|RD_C3, 0, I32 },
+{"mtc3", "t,G", 0x4c800000, 0xffe007ff, COD|RD_t|WR_C3|WR_CC, 0, I1 },
+{"mtc3", "t,G,H", 0x4c800000, 0xffe007f8, COD|RD_t|WR_C3|WR_CC, 0, I32 },
+
/* No hazard protection on coprocessor instructions--they shouldn't
change the state of the processor and if they do it's up to the
user to put in nops as necessary. These are at the end so that the
@@ -1294,40 +1399,94 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"cop1", "C", 0, (int) M_COP1, INSN_MACRO, 0, I1 },
{"cop2", "C", 0, (int) M_COP2, INSN_MACRO, 0, I1 },
{"cop3", "C", 0, (int) M_COP3, INSN_MACRO, 0, I1 },
-
/* Conflicts with the 4650's "mul" instruction. Nobody's using the
4010 any more, so move this insn out of the way. If the object
format gave us more info, we could do this right. */
{"addciu", "t,r,j", 0x70000000, 0xfc000000, WR_t|RD_s, 0, L1 },
/* MIPS DSP ASE */
{"absq_s.ph", "d,t", 0x7c000252, 0xffe007ff, WR_d|RD_t, 0, D32 },
+{"absq_s.pw", "d,t", 0x7c000456, 0xffe007ff, WR_d|RD_t, 0, D64 },
+{"absq_s.qh", "d,t", 0x7c000256, 0xffe007ff, WR_d|RD_t, 0, D64 },
{"absq_s.w", "d,t", 0x7c000452, 0xffe007ff, WR_d|RD_t, 0, D32 },
{"addq.ph", "d,s,t", 0x7c000290, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"addq.pw", "d,s,t", 0x7c000494, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
+{"addq.qh", "d,s,t", 0x7c000294, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"addq_s.ph", "d,s,t", 0x7c000390, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"addq_s.pw", "d,s,t", 0x7c000594, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
+{"addq_s.qh", "d,s,t", 0x7c000394, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"addq_s.w", "d,s,t", 0x7c000590, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
{"addsc", "d,s,t", 0x7c000410, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"addu.ob", "d,s,t", 0x7c000014, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"addu.qb", "d,s,t", 0x7c000010, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"addu_s.ob", "d,s,t", 0x7c000114, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"addu_s.qb", "d,s,t", 0x7c000110, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
{"addwc", "d,s,t", 0x7c000450, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
{"bitrev", "d,t", 0x7c0006d2, 0xffe007ff, WR_d|RD_t, 0, D32 },
{"bposge32", "p", 0x041c0000, 0xffff0000, CBD, 0, D32 },
+{"bposge64", "p", 0x041d0000, 0xffff0000, CBD, 0, D64 },
{"cmp.eq.ph", "s,t", 0x7c000211, 0xfc00ffff, RD_s|RD_t, 0, D32 },
+{"cmp.eq.pw", "s,t", 0x7c000415, 0xfc00ffff, RD_s|RD_t, 0, D64 },
+{"cmp.eq.qh", "s,t", 0x7c000215, 0xfc00ffff, RD_s|RD_t, 0, D64 },
+{"cmpgu.eq.ob", "d,s,t", 0x7c000115, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"cmpgu.eq.qb", "d,s,t", 0x7c000111, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"cmpgu.le.ob", "d,s,t", 0x7c000195, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"cmpgu.le.qb", "d,s,t", 0x7c000191, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"cmpgu.lt.ob", "d,s,t", 0x7c000155, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"cmpgu.lt.qb", "d,s,t", 0x7c000151, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
{"cmp.le.ph", "s,t", 0x7c000291, 0xfc00ffff, RD_s|RD_t, 0, D32 },
+{"cmp.le.pw", "s,t", 0x7c000495, 0xfc00ffff, RD_s|RD_t, 0, D64 },
+{"cmp.le.qh", "s,t", 0x7c000295, 0xfc00ffff, RD_s|RD_t, 0, D64 },
{"cmp.lt.ph", "s,t", 0x7c000251, 0xfc00ffff, RD_s|RD_t, 0, D32 },
+{"cmp.lt.pw", "s,t", 0x7c000455, 0xfc00ffff, RD_s|RD_t, 0, D64 },
+{"cmp.lt.qh", "s,t", 0x7c000255, 0xfc00ffff, RD_s|RD_t, 0, D64 },
+{"cmpu.eq.ob", "s,t", 0x7c000015, 0xfc00ffff, RD_s|RD_t, 0, D64 },
{"cmpu.eq.qb", "s,t", 0x7c000011, 0xfc00ffff, RD_s|RD_t, 0, D32 },
+{"cmpu.le.ob", "s,t", 0x7c000095, 0xfc00ffff, RD_s|RD_t, 0, D64 },
{"cmpu.le.qb", "s,t", 0x7c000091, 0xfc00ffff, RD_s|RD_t, 0, D32 },
+{"cmpu.lt.ob", "s,t", 0x7c000055, 0xfc00ffff, RD_s|RD_t, 0, D64 },
{"cmpu.lt.qb", "s,t", 0x7c000051, 0xfc00ffff, RD_s|RD_t, 0, D32 },
+{"dextpdp", "t,7,6", 0x7c0002bc, 0xfc00e7ff, WR_t|RD_a|DSP_VOLA, 0, D64 },
+{"dextpdpv", "t,7,s", 0x7c0002fc, 0xfc00e7ff, WR_t|RD_a|RD_s|DSP_VOLA, 0, D64 },
+{"dextp", "t,7,6", 0x7c0000bc, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
+{"dextpv", "t,7,s", 0x7c0000fc, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
+{"dextr.l", "t,7,6", 0x7c00043c, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
+{"dextr_r.l", "t,7,6", 0x7c00053c, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
+{"dextr_rs.l", "t,7,6", 0x7c0005bc, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
+{"dextr_rs.w", "t,7,6", 0x7c0001bc, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
+{"dextr_r.w", "t,7,6", 0x7c00013c, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
+{"dextr_s.h", "t,7,6", 0x7c0003bc, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
+{"dextrv.l", "t,7,s", 0x7c00047c, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
+{"dextrv_r.l", "t,7,s", 0x7c00057c, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
+{"dextrv_rs.l", "t,7,s", 0x7c0005fc, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
+{"dextrv_rs.w", "t,7,s", 0x7c0001fc, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
+{"dextrv_r.w", "t,7,s", 0x7c00017c, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
+{"dextrv_s.h", "t,7,s", 0x7c0003fc, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
+{"dextrv.w", "t,7,s", 0x7c00007c, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
+{"dextr.w", "t,7,6", 0x7c00003c, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
+{"dinsv", "t,s", 0x7c00000d, 0xfc00ffff, WR_t|RD_s, 0, D64 },
+{"dmadd", "7,s,t", 0x7c000674, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"dmaddu", "7,s,t", 0x7c000774, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"dmsub", "7,s,t", 0x7c0006f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"dmsubu", "7,s,t", 0x7c0007f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"dmthlip", "s,7", 0x7c0007fc, 0xfc1fe7ff, RD_s|MOD_a|DSP_VOLA, 0, D64 },
+{"dpaq_sa.l.pw", "7,s,t", 0x7c000334, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
{"dpaq_sa.l.w", "7,s,t", 0x7c000330, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
{"dpaq_s.w.ph", "7,s,t", 0x7c000130, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
+{"dpaq_s.w.qh", "7,s,t", 0x7c000134, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"dpau.h.obl", "7,s,t", 0x7c0000f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"dpau.h.obr", "7,s,t", 0x7c0001f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
{"dpau.h.qbl", "7,s,t", 0x7c0000f0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
{"dpau.h.qbr", "7,s,t", 0x7c0001f0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
+{"dpsq_sa.l.pw", "7,s,t", 0x7c000374, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
{"dpsq_sa.l.w", "7,s,t", 0x7c000370, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
{"dpsq_s.w.ph", "7,s,t", 0x7c000170, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
+{"dpsq_s.w.qh", "7,s,t", 0x7c000174, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"dpsu.h.obl", "7,s,t", 0x7c0002f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"dpsu.h.obr", "7,s,t", 0x7c0003f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
{"dpsu.h.qbl", "7,s,t", 0x7c0002f0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
{"dpsu.h.qbr", "7,s,t", 0x7c0003f0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
+{"dshilo", "7,:", 0x7c0006bc, 0xfc07e7ff, MOD_a, 0, D64 },
+{"dshilov", "7,s", 0x7c0006fc, 0xfc1fe7ff, MOD_a|RD_s, 0, D64 },
{"extpdp", "t,7,6", 0x7c0002b8, 0xfc00e7ff, WR_t|RD_a|DSP_VOLA, 0, D32 },
{"extpdpv", "t,7,s", 0x7c0002f8, 0xfc00e7ff, WR_t|RD_a|RD_s|DSP_VOLA, 0, D32 },
{"extp", "t,7,6", 0x7c0000b8, 0xfc00e7ff, WR_t|RD_a, 0, D32 },
@@ -1342,69 +1501,191 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"extr.w", "t,7,6", 0x7c000038, 0xfc00e7ff, WR_t|RD_a, 0, D32 },
{"insv", "t,s", 0x7c00000c, 0xfc00ffff, WR_t|RD_s, 0, D32 },
{"lbux", "d,t(b)", 0x7c00018a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b, 0, D32 },
+{"ldx", "d,t(b)", 0x7c00020a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b, 0, D64 },
{"lhx", "d,t(b)", 0x7c00010a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b, 0, D32 },
{"lwx", "d,t(b)", 0x7c00000a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b, 0, D32 },
{"maq_sa.w.phl", "7,s,t", 0x7c000430, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
{"maq_sa.w.phr", "7,s,t", 0x7c0004b0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
+{"maq_sa.w.qhll", "7,s,t", 0x7c000434, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"maq_sa.w.qhlr", "7,s,t", 0x7c000474, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"maq_sa.w.qhrl", "7,s,t", 0x7c0004b4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"maq_sa.w.qhrr", "7,s,t", 0x7c0004f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"maq_s.l.pwl", "7,s,t", 0x7c000734, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"maq_s.l.pwr", "7,s,t", 0x7c0007b4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
{"maq_s.w.phl", "7,s,t", 0x7c000530, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
{"maq_s.w.phr", "7,s,t", 0x7c0005b0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
+{"maq_s.w.qhll", "7,s,t", 0x7c000534, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"maq_s.w.qhlr", "7,s,t", 0x7c000574, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"maq_s.w.qhrl", "7,s,t", 0x7c0005b4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
+{"maq_s.w.qhrr", "7,s,t", 0x7c0005f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
{"modsub", "d,s,t", 0x7c000490, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
{"mthlip", "s,7", 0x7c0007f8, 0xfc1fe7ff, RD_s|MOD_a|DSP_VOLA, 0, D32 },
+{"muleq_s.pw.qhl", "d,s,t", 0x7c000714, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D64 },
+{"muleq_s.pw.qhr", "d,s,t", 0x7c000754, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D64 },
{"muleq_s.w.phl", "d,s,t", 0x7c000710, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D32 },
{"muleq_s.w.phr", "d,s,t", 0x7c000750, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D32 },
{"muleu_s.ph.qbl", "d,s,t", 0x7c000190, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D32 },
{"muleu_s.ph.qbr", "d,s,t", 0x7c0001d0, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D32 },
+{"muleu_s.qh.obl", "d,s,t", 0x7c000194, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D64 },
+{"muleu_s.qh.obr", "d,s,t", 0x7c0001d4, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D64 },
{"mulq_rs.ph", "d,s,t", 0x7c0007d0, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D32 },
+{"mulq_rs.qh", "d,s,t", 0x7c0007d4, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D64 },
+{"mulsaq_s.l.pw", "7,s,t", 0x7c0003b4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
{"mulsaq_s.w.ph", "7,s,t", 0x7c0001b0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
+{"mulsaq_s.w.qh", "7,s,t", 0x7c0001b4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
{"packrl.ph", "d,s,t", 0x7c000391, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"packrl.pw", "d,s,t", 0x7c000395, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
+{"pick.ob", "d,s,t", 0x7c0000d5, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"pick.ph", "d,s,t", 0x7c0002d1, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"pick.pw", "d,s,t", 0x7c0004d5, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"pick.qb", "d,s,t", 0x7c0000d1, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"pick.qh", "d,s,t", 0x7c0002d5, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
+{"preceq.pw.qhla", "d,t", 0x7c000396, 0xffe007ff, WR_d|RD_t, 0, D64 },
+{"preceq.pw.qhl", "d,t", 0x7c000316, 0xffe007ff, WR_d|RD_t, 0, D64 },
+{"preceq.pw.qhra", "d,t", 0x7c0003d6, 0xffe007ff, WR_d|RD_t, 0, D64 },
+{"preceq.pw.qhr", "d,t", 0x7c000356, 0xffe007ff, WR_d|RD_t, 0, D64 },
+{"preceq.s.l.pwl", "d,t", 0x7c000516, 0xffe007ff, WR_d|RD_t, 0, D64 },
+{"preceq.s.l.pwr", "d,t", 0x7c000556, 0xffe007ff, WR_d|RD_t, 0, D64 },
{"precequ.ph.qbla", "d,t", 0x7c000192, 0xffe007ff, WR_d|RD_t, 0, D32 },
{"precequ.ph.qbl", "d,t", 0x7c000112, 0xffe007ff, WR_d|RD_t, 0, D32 },
{"precequ.ph.qbra", "d,t", 0x7c0001d2, 0xffe007ff, WR_d|RD_t, 0, D32 },
{"precequ.ph.qbr", "d,t", 0x7c000152, 0xffe007ff, WR_d|RD_t, 0, D32 },
+{"precequ.pw.qhla", "d,t", 0x7c000196, 0xffe007ff, WR_d|RD_t, 0, D64 },
+{"precequ.pw.qhl", "d,t", 0x7c000116, 0xffe007ff, WR_d|RD_t, 0, D64 },
+{"precequ.pw.qhra", "d,t", 0x7c0001d6, 0xffe007ff, WR_d|RD_t, 0, D64 },
+{"precequ.pw.qhr", "d,t", 0x7c000156, 0xffe007ff, WR_d|RD_t, 0, D64 },
{"preceq.w.phl", "d,t", 0x7c000312, 0xffe007ff, WR_d|RD_t, 0, D32 },
{"preceq.w.phr", "d,t", 0x7c000352, 0xffe007ff, WR_d|RD_t, 0, D32 },
{"preceu.ph.qbla", "d,t", 0x7c000792, 0xffe007ff, WR_d|RD_t, 0, D32 },
{"preceu.ph.qbl", "d,t", 0x7c000712, 0xffe007ff, WR_d|RD_t, 0, D32 },
{"preceu.ph.qbra", "d,t", 0x7c0007d2, 0xffe007ff, WR_d|RD_t, 0, D32 },
{"preceu.ph.qbr", "d,t", 0x7c000752, 0xffe007ff, WR_d|RD_t, 0, D32 },
+{"preceu.qh.obla", "d,t", 0x7c000796, 0xffe007ff, WR_d|RD_t, 0, D64 },
+{"preceu.qh.obl", "d,t", 0x7c000716, 0xffe007ff, WR_d|RD_t, 0, D64 },
+{"preceu.qh.obra", "d,t", 0x7c0007d6, 0xffe007ff, WR_d|RD_t, 0, D64 },
+{"preceu.qh.obr", "d,t", 0x7c000756, 0xffe007ff, WR_d|RD_t, 0, D64 },
+{"precrq.ob.qh", "d,s,t", 0x7c000315, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"precrq.ph.w", "d,s,t", 0x7c000511, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"precrq.pw.l", "d,s,t", 0x7c000715, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"precrq.qb.ph", "d,s,t", 0x7c000311, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"precrq.qh.pw", "d,s,t", 0x7c000515, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"precrq_rs.ph.w", "d,s,t", 0x7c000551, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"precrq_rs.qh.pw", "d,s,t", 0x7c000555, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
+{"precrqu_s.ob.qh", "d,s,t", 0x7c0003d5, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"precrqu_s.qb.ph", "d,s,t", 0x7c0003d1, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"raddu.l.ob", "d,s", 0x7c000514, 0xfc1f07ff, WR_d|RD_s, 0, D64 },
{"raddu.w.qb", "d,s", 0x7c000510, 0xfc1f07ff, WR_d|RD_s, 0, D32 },
{"rddsp", "d", 0x7fff04b8, 0xffff07ff, WR_d, 0, D32 },
{"rddsp", "d,'", 0x7c0004b8, 0xffc007ff, WR_d, 0, D32 },
+{"repl.ob", "d,5", 0x7c000096, 0xff0007ff, WR_d, 0, D64 },
{"repl.ph", "d,@", 0x7c000292, 0xfc0007ff, WR_d, 0, D32 },
+{"repl.pw", "d,@", 0x7c000496, 0xfc0007ff, WR_d, 0, D64 },
{"repl.qb", "d,5", 0x7c000092, 0xff0007ff, WR_d, 0, D32 },
+{"repl.qh", "d,@", 0x7c000296, 0xfc0007ff, WR_d, 0, D64 },
+{"replv.ob", "d,t", 0x7c0000d6, 0xffe007ff, WR_d|RD_t, 0, D64 },
{"replv.ph", "d,t", 0x7c0002d2, 0xffe007ff, WR_d|RD_t, 0, D32 },
+{"replv.pw", "d,t", 0x7c0004d6, 0xffe007ff, WR_d|RD_t, 0, D64 },
{"replv.qb", "d,t", 0x7c0000d2, 0xffe007ff, WR_d|RD_t, 0, D32 },
+{"replv.qh", "d,t", 0x7c0002d6, 0xffe007ff, WR_d|RD_t, 0, D64 },
{"shilo", "7,0", 0x7c0006b8, 0xfc0fe7ff, MOD_a, 0, D32 },
{"shilov", "7,s", 0x7c0006f8, 0xfc1fe7ff, MOD_a|RD_s, 0, D32 },
+{"shll.ob", "d,t,3", 0x7c000017, 0xff0007ff, WR_d|RD_t, 0, D64 },
{"shll.ph", "d,t,4", 0x7c000213, 0xfe0007ff, WR_d|RD_t, 0, D32 },
+{"shll.pw", "d,t,6", 0x7c000417, 0xfc0007ff, WR_d|RD_t, 0, D64 },
{"shll.qb", "d,t,3", 0x7c000013, 0xff0007ff, WR_d|RD_t, 0, D32 },
+{"shll.qh", "d,t,4", 0x7c000217, 0xfe0007ff, WR_d|RD_t, 0, D64 },
{"shll_s.ph", "d,t,4", 0x7c000313, 0xfe0007ff, WR_d|RD_t, 0, D32 },
+{"shll_s.pw", "d,t,6", 0x7c000517, 0xfc0007ff, WR_d|RD_t, 0, D64 },
+{"shll_s.qh", "d,t,4", 0x7c000317, 0xfe0007ff, WR_d|RD_t, 0, D64 },
{"shll_s.w", "d,t,6", 0x7c000513, 0xfc0007ff, WR_d|RD_t, 0, D32 },
+{"shllv.ob", "d,t,s", 0x7c000097, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"shllv.ph", "d,t,s", 0x7c000293, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"shllv.pw", "d,t,s", 0x7c000497, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"shllv.qb", "d,t,s", 0x7c000093, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"shllv.qh", "d,t,s", 0x7c000297, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"shllv_s.ph", "d,t,s", 0x7c000393, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"shllv_s.pw", "d,t,s", 0x7c000597, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
+{"shllv_s.qh", "d,t,s", 0x7c000397, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"shllv_s.w", "d,t,s", 0x7c000593, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
{"shra.ph", "d,t,4", 0x7c000253, 0xfe0007ff, WR_d|RD_t, 0, D32 },
+{"shra.pw", "d,t,6", 0x7c000457, 0xfc0007ff, WR_d|RD_t, 0, D64 },
+{"shra.qh", "d,t,4", 0x7c000257, 0xfe0007ff, WR_d|RD_t, 0, D64 },
{"shra_r.ph", "d,t,4", 0x7c000353, 0xfe0007ff, WR_d|RD_t, 0, D32 },
+{"shra_r.pw", "d,t,6", 0x7c000557, 0xfc0007ff, WR_d|RD_t, 0, D64 },
+{"shra_r.qh", "d,t,4", 0x7c000357, 0xfe0007ff, WR_d|RD_t, 0, D64 },
{"shra_r.w", "d,t,6", 0x7c000553, 0xfc0007ff, WR_d|RD_t, 0, D32 },
{"shrav.ph", "d,t,s", 0x7c0002d3, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"shrav.pw", "d,t,s", 0x7c0004d7, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
+{"shrav.qh", "d,t,s", 0x7c0002d7, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"shrav_r.ph", "d,t,s", 0x7c0003d3, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"shrav_r.pw", "d,t,s", 0x7c0005d7, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
+{"shrav_r.qh", "d,t,s", 0x7c0003d7, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"shrav_r.w", "d,t,s", 0x7c0005d3, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"shrl.ob", "d,t,3", 0x7c000057, 0xff0007ff, WR_d|RD_t, 0, D64 },
{"shrl.qb", "d,t,3", 0x7c000053, 0xff0007ff, WR_d|RD_t, 0, D32 },
+{"shrlv.ob", "d,t,s", 0x7c0000d7, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"shrlv.qb", "d,t,s", 0x7c0000d3, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
{"subq.ph", "d,s,t", 0x7c0002d0, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"subq.pw", "d,s,t", 0x7c0004d4, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
+{"subq.qh", "d,s,t", 0x7c0002d4, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"subq_s.ph", "d,s,t", 0x7c0003d0, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"subq_s.pw", "d,s,t", 0x7c0005d4, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
+{"subq_s.qh", "d,s,t", 0x7c0003d4, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"subq_s.w", "d,s,t", 0x7c0005d0, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"subu.ob", "d,s,t", 0x7c000054, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"subu.qb", "d,s,t", 0x7c000050, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
+{"subu_s.ob", "d,s,t", 0x7c000154, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
{"subu_s.qb", "d,s,t", 0x7c000150, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
{"wrdsp", "s", 0x7c1ffcf8, 0xfc1fffff, RD_s|DSP_VOLA, 0, D32 },
{"wrdsp", "s,8", 0x7c0004f8, 0xfc1e07ff, RD_s|DSP_VOLA, 0, D32 },
+/* MIPS DSP ASE Rev2 */
+{"absq_s.qb", "d,t", 0x7c000052, 0xffe007ff, WR_d|RD_t, 0, D33 },
+{"addu.ph", "d,s,t", 0x7c000210, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"addu_s.ph", "d,s,t", 0x7c000310, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"adduh.qb", "d,s,t", 0x7c000018, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"adduh_r.qb", "d,s,t", 0x7c000098, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"append", "t,s,h", 0x7c000031, 0xfc0007ff, WR_t|RD_t|RD_s, 0, D33 },
+{"balign", "t,s,I", 0, (int) M_BALIGN, INSN_MACRO, 0, D33 },
+{"balign", "t,s,2", 0x7c000431, 0xfc00e7ff, WR_t|RD_t|RD_s, 0, D33 },
+{"cmpgdu.eq.qb", "d,s,t", 0x7c000611, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"cmpgdu.lt.qb", "d,s,t", 0x7c000651, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"cmpgdu.le.qb", "d,s,t", 0x7c000691, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"dpa.w.ph", "7,s,t", 0x7c000030, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
+{"dps.w.ph", "7,s,t", 0x7c000070, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
+{"mul.ph", "d,s,t", 0x7c000318, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D33 },
+{"mul_s.ph", "d,s,t", 0x7c000398, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D33 },
+{"mulq_rs.w", "d,s,t", 0x7c0005d8, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D33 },
+{"mulq_s.ph", "d,s,t", 0x7c000790, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D33 },
+{"mulq_s.w", "d,s,t", 0x7c000598, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D33 },
+{"mulsa.w.ph", "7,s,t", 0x7c0000b0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
+{"precr.qb.ph", "d,s,t", 0x7c000351, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"precr_sra.ph.w", "t,s,h", 0x7c000791, 0xfc0007ff, WR_t|RD_t|RD_s, 0, D33 },
+{"precr_sra_r.ph.w", "t,s,h", 0x7c0007d1, 0xfc0007ff, WR_t|RD_t|RD_s, 0, D33 },
+{"prepend", "t,s,h", 0x7c000071, 0xfc0007ff, WR_t|RD_t|RD_s, 0, D33 },
+{"shra.qb", "d,t,3", 0x7c000113, 0xff0007ff, WR_d|RD_t, 0, D33 },
+{"shra_r.qb", "d,t,3", 0x7c000153, 0xff0007ff, WR_d|RD_t, 0, D33 },
+{"shrav.qb", "d,t,s", 0x7c000193, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"shrav_r.qb", "d,t,s", 0x7c0001d3, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"shrl.ph", "d,t,4", 0x7c000653, 0xfe0007ff, WR_d|RD_t, 0, D33 },
+{"shrlv.ph", "d,t,s", 0x7c0006d3, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"subu.ph", "d,s,t", 0x7c000250, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"subu_s.ph", "d,s,t", 0x7c000350, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"subuh.qb", "d,s,t", 0x7c000058, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"subuh_r.qb", "d,s,t", 0x7c0000d8, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"addqh.ph", "d,s,t", 0x7c000218, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"addqh_r.ph", "d,s,t", 0x7c000298, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"addqh.w", "d,s,t", 0x7c000418, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"addqh_r.w", "d,s,t", 0x7c000498, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"subqh.ph", "d,s,t", 0x7c000258, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"subqh_r.ph", "d,s,t", 0x7c0002d8, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"subqh.w", "d,s,t", 0x7c000458, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"subqh_r.w", "d,s,t", 0x7c0004d8, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
+{"dpax.w.ph", "7,s,t", 0x7c000230, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
+{"dpsx.w.ph", "7,s,t", 0x7c000270, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
+{"dpaqx_s.w.ph", "7,s,t", 0x7c000630, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
+{"dpaqx_sa.w.ph", "7,s,t", 0x7c0006b0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
+{"dpsqx_s.w.ph", "7,s,t", 0x7c000670, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
+{"dpsqx_sa.w.ph", "7,s,t", 0x7c0006f0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
/* Move bc0* after mftr and mttr to avoid opcode collision. */
{"bc0f", "p", 0x41000000, 0xffff0000, CBD|RD_CC, 0, I1 },
{"bc0fl", "p", 0x41020000, 0xffff0000, CBL|RD_CC, 0, I2|T3 },
diff --git a/opcodes/mips16-opc.c b/opcodes/mips16-opc.c
index 4e5ae44752f3..8144986df794 100644
--- a/opcodes/mips16-opc.c
+++ b/opcodes/mips16-opc.c
@@ -58,58 +58,61 @@ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
#define TRAP INSN_TRAP
+#define I1 INSN_ISA1
#define I3 INSN_ISA3
-
-#define T3 INSN_3900
+#define I32 INSN_ISA32
+#define I64 INSN_ISA64
+#define T3 INSN_3900
const struct mips_opcode mips16_opcodes[] =
{
-{"nop", "", 0x6500, 0xffff, RD_Z, 0, 0 }, /* move $0,$Z */
-{"la", "x,A", 0x0800, 0xf800, WR_x|RD_PC, 0, 0 },
-{"abs", "x,w", 0, (int) M_ABS, INSN_MACRO, 0, 0 },
-{"addiu", "y,x,4", 0x4000, 0xf810, WR_y|RD_x, 0, 0 },
-{"addiu", "x,k", 0x4800, 0xf800, WR_x|RD_x, 0, 0 },
-{"addiu", "S,K", 0x6300, 0xff00, WR_SP|RD_SP, 0, 0 },
-{"addiu", "S,S,K", 0x6300, 0xff00, WR_SP|RD_SP, 0, 0 },
-{"addiu", "x,P,V", 0x0800, 0xf800, WR_x|RD_PC, 0, 0 },
-{"addiu", "x,S,V", 0x0000, 0xf800, WR_x|RD_SP, 0, 0 },
-{"addu", "z,v,y", 0xe001, 0xf803, WR_z|RD_x|RD_y, 0, 0 },
-{"addu", "y,x,4", 0x4000, 0xf810, WR_y|RD_x, 0, 0 },
-{"addu", "x,k", 0x4800, 0xf800, WR_x|RD_x, 0, 0 },
-{"addu", "S,K", 0x6300, 0xff00, WR_SP|RD_SP, 0, 0 },
-{"addu", "S,S,K", 0x6300, 0xff00, WR_SP|RD_SP, 0, 0 },
-{"addu", "x,P,V", 0x0800, 0xf800, WR_x|RD_PC, 0, 0 },
-{"addu", "x,S,V", 0x0000, 0xf800, WR_x|RD_SP, 0, 0 },
-{"and", "x,y", 0xe80c, 0xf81f, WR_x|RD_x|RD_y, 0, 0 },
-{"b", "q", 0x1000, 0xf800, BR, 0, 0 },
-{"beq", "x,y,p", 0, (int) M_BEQ, INSN_MACRO, 0, 0 },
-{"beq", "x,U,p", 0, (int) M_BEQ_I, INSN_MACRO, 0, 0 },
-{"beqz", "x,p", 0x2000, 0xf800, BR|RD_x, 0, 0 },
-{"bge", "x,y,p", 0, (int) M_BGE, INSN_MACRO, 0, 0 },
-{"bge", "x,8,p", 0, (int) M_BGE_I, INSN_MACRO, 0, 0 },
-{"bgeu", "x,y,p", 0, (int) M_BGEU, INSN_MACRO, 0, 0 },
-{"bgeu", "x,8,p", 0, (int) M_BGEU_I, INSN_MACRO, 0, 0 },
-{"bgt", "x,y,p", 0, (int) M_BGT, INSN_MACRO, 0, 0 },
-{"bgt", "x,8,p", 0, (int) M_BGT_I, INSN_MACRO, 0, 0 },
-{"bgtu", "x,y,p", 0, (int) M_BGTU, INSN_MACRO, 0, 0 },
-{"bgtu", "x,8,p", 0, (int) M_BGTU_I, INSN_MACRO, 0, 0 },
-{"ble", "x,y,p", 0, (int) M_BLE, INSN_MACRO, 0, 0 },
-{"ble", "x,8,p", 0, (int) M_BLE_I, INSN_MACRO, 0, 0 },
-{"bleu", "x,y,p", 0, (int) M_BLEU, INSN_MACRO, 0, 0 },
-{"bleu", "x,8,p", 0, (int) M_BLEU_I, INSN_MACRO, 0, 0 },
-{"blt", "x,y,p", 0, (int) M_BLT, INSN_MACRO, 0, 0 },
-{"blt", "x,8,p", 0, (int) M_BLT_I, INSN_MACRO, 0, 0 },
-{"bltu", "x,y,p", 0, (int) M_BLTU, INSN_MACRO, 0, 0 },
-{"bltu", "x,8,p", 0, (int) M_BLTU_I, INSN_MACRO, 0, 0 },
-{"bne", "x,y,p", 0, (int) M_BNE, INSN_MACRO, 0, 0 },
-{"bne", "x,U,p", 0, (int) M_BNE_I, INSN_MACRO, 0, 0 },
-{"bnez", "x,p", 0x2800, 0xf800, BR|RD_x, 0, 0 },
-{"break", "6", 0xe805, 0xf81f, TRAP, 0, 0 },
-{"bteqz", "p", 0x6000, 0xff00, BR|RD_T, 0, 0 },
-{"btnez", "p", 0x6100, 0xff00, BR|RD_T, 0, 0 },
-{"cmpi", "x,U", 0x7000, 0xf800, WR_T|RD_x, 0, 0 },
-{"cmp", "x,y", 0xe80a, 0xf81f, WR_T|RD_x|RD_y, 0, 0 },
-{"cmp", "x,U", 0x7000, 0xf800, WR_T|RD_x, 0, 0 },
+/* name, args, match, mask, pinfo, pinfo2, membership */
+{"nop", "", 0x6500, 0xffff, RD_Z, 0, I1 }, /* move $0,$Z */
+{"la", "x,A", 0x0800, 0xf800, WR_x|RD_PC, 0, I1 },
+{"abs", "x,w", 0, (int) M_ABS, INSN_MACRO, 0, I1 },
+{"addiu", "y,x,4", 0x4000, 0xf810, WR_y|RD_x, 0, I1 },
+{"addiu", "x,k", 0x4800, 0xf800, WR_x|RD_x, 0, I1 },
+{"addiu", "S,K", 0x6300, 0xff00, WR_SP|RD_SP, 0, I1 },
+{"addiu", "S,S,K", 0x6300, 0xff00, WR_SP|RD_SP, 0, I1 },
+{"addiu", "x,P,V", 0x0800, 0xf800, WR_x|RD_PC, 0, I1 },
+{"addiu", "x,S,V", 0x0000, 0xf800, WR_x|RD_SP, 0, I1 },
+{"addu", "z,v,y", 0xe001, 0xf803, WR_z|RD_x|RD_y, 0, I1 },
+{"addu", "y,x,4", 0x4000, 0xf810, WR_y|RD_x, 0, I1 },
+{"addu", "x,k", 0x4800, 0xf800, WR_x|RD_x, 0, I1 },
+{"addu", "S,K", 0x6300, 0xff00, WR_SP|RD_SP, 0, I1 },
+{"addu", "S,S,K", 0x6300, 0xff00, WR_SP|RD_SP, 0, I1 },
+{"addu", "x,P,V", 0x0800, 0xf800, WR_x|RD_PC, 0, I1 },
+{"addu", "x,S,V", 0x0000, 0xf800, WR_x|RD_SP, 0, I1 },
+{"and", "x,y", 0xe80c, 0xf81f, WR_x|RD_x|RD_y, 0, I1 },
+{"b", "q", 0x1000, 0xf800, BR, 0, I1 },
+{"beq", "x,y,p", 0, (int) M_BEQ, INSN_MACRO, 0, I1 },
+{"beq", "x,U,p", 0, (int) M_BEQ_I, INSN_MACRO, 0, I1 },
+{"beqz", "x,p", 0x2000, 0xf800, BR|RD_x, 0, I1 },
+{"bge", "x,y,p", 0, (int) M_BGE, INSN_MACRO, 0, I1 },
+{"bge", "x,8,p", 0, (int) M_BGE_I, INSN_MACRO, 0, I1 },
+{"bgeu", "x,y,p", 0, (int) M_BGEU, INSN_MACRO, 0, I1 },
+{"bgeu", "x,8,p", 0, (int) M_BGEU_I, INSN_MACRO, 0, I1 },
+{"bgt", "x,y,p", 0, (int) M_BGT, INSN_MACRO, 0, I1 },
+{"bgt", "x,8,p", 0, (int) M_BGT_I, INSN_MACRO, 0, I1 },
+{"bgtu", "x,y,p", 0, (int) M_BGTU, INSN_MACRO, 0, I1 },
+{"bgtu", "x,8,p", 0, (int) M_BGTU_I, INSN_MACRO, 0, I1 },
+{"ble", "x,y,p", 0, (int) M_BLE, INSN_MACRO, 0, I1 },
+{"ble", "x,8,p", 0, (int) M_BLE_I, INSN_MACRO, 0, I1 },
+{"bleu", "x,y,p", 0, (int) M_BLEU, INSN_MACRO, 0, I1 },
+{"bleu", "x,8,p", 0, (int) M_BLEU_I, INSN_MACRO, 0, I1 },
+{"blt", "x,y,p", 0, (int) M_BLT, INSN_MACRO, 0, I1 },
+{"blt", "x,8,p", 0, (int) M_BLT_I, INSN_MACRO, 0, I1 },
+{"bltu", "x,y,p", 0, (int) M_BLTU, INSN_MACRO, 0, I1 },
+{"bltu", "x,8,p", 0, (int) M_BLTU_I, INSN_MACRO, 0, I1 },
+{"bne", "x,y,p", 0, (int) M_BNE, INSN_MACRO, 0, I1 },
+{"bne", "x,U,p", 0, (int) M_BNE_I, INSN_MACRO, 0, I1 },
+{"bnez", "x,p", 0x2800, 0xf800, BR|RD_x, 0, I1 },
+{"break", "6", 0xe805, 0xf81f, TRAP, 0, I1 },
+{"bteqz", "p", 0x6000, 0xff00, BR|RD_T, 0, I1 },
+{"btnez", "p", 0x6100, 0xff00, BR|RD_T, 0, I1 },
+{"cmpi", "x,U", 0x7000, 0xf800, WR_T|RD_x, 0, I1 },
+{"cmp", "x,y", 0xe80a, 0xf81f, WR_T|RD_x|RD_y, 0, I1 },
+{"cmp", "x,U", 0x7000, 0xf800, WR_T|RD_x, 0, I1 },
{"dla", "y,E", 0xfe00, 0xff00, WR_y|RD_PC, 0, I3 },
{"daddiu", "y,x,4", 0x4010, 0xf810, WR_y|RD_x, 0, I3 },
{"daddiu", "y,j", 0xfd00, 0xff00, WR_y|RD_y, 0, I3 },
@@ -125,20 +128,20 @@ const struct mips_opcode mips16_opcodes[] =
{"daddu", "y,P,W", 0xfe00, 0xff00, WR_y|RD_PC, 0, I3 },
{"daddu", "y,S,W", 0xff00, 0xff00, WR_y|RD_SP, 0, I3 },
{"ddiv", "0,x,y", 0xe81e, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, I3 },
-{"ddiv", "z,v,y", 0, (int) M_DDIV_3, INSN_MACRO, 0, 0 },
+{"ddiv", "z,v,y", 0, (int) M_DDIV_3, INSN_MACRO, 0, I1 },
{"ddivu", "0,x,y", 0xe81f, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, I3 },
-{"ddivu", "z,v,y", 0, (int) M_DDIVU_3, INSN_MACRO, 0, 0 },
-{"div", "0,x,y", 0xe81a, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, 0 },
-{"div", "z,v,y", 0, (int) M_DIV_3, INSN_MACRO, 0, 0 },
-{"divu", "0,x,y", 0xe81b, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, 0 },
-{"divu", "z,v,y", 0, (int) M_DIVU_3, INSN_MACRO, 0, 0 },
+{"ddivu", "z,v,y", 0, (int) M_DDIVU_3, INSN_MACRO, 0, I1 },
+{"div", "0,x,y", 0xe81a, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, I1 },
+{"div", "z,v,y", 0, (int) M_DIV_3, INSN_MACRO, 0, I1 },
+{"divu", "0,x,y", 0xe81b, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, I1 },
+{"divu", "z,v,y", 0, (int) M_DIVU_3, INSN_MACRO, 0, I1 },
{"dmul", "z,v,y", 0, (int) M_DMUL, INSN_MACRO, 0, I3 },
{"dmult", "x,y", 0xe81c, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, I3 },
{"dmultu", "x,y", 0xe81d, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, I3 },
{"drem", "0,x,y", 0xe81e, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, I3 },
-{"drem", "z,v,y", 0, (int) M_DREM_3, INSN_MACRO, 0, 0 },
+{"drem", "z,v,y", 0, (int) M_DREM_3, INSN_MACRO, 0, I1 },
{"dremu", "0,x,y", 0xe81f, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, I3 },
-{"dremu", "z,v,y", 0, (int) M_DREMU_3, INSN_MACRO, 0, 0 },
+{"dremu", "z,v,y", 0, (int) M_DREMU_3, INSN_MACRO, 0, I1 },
{"dsllv", "y,x", 0xe814, 0xf81f, WR_y|RD_y|RD_x, 0, I3 },
{"dsll", "x,w,[", 0x3001, 0xf803, WR_x|RD_y, 0, I3 },
{"dsll", "y,x", 0xe814, 0xf81f, WR_y|RD_y|RD_x, 0, I3 },
@@ -149,91 +152,92 @@ const struct mips_opcode mips16_opcodes[] =
{"dsrl", "y,]", 0xe808, 0xf81f, WR_y|RD_y, 0, I3 },
{"dsrl", "y,x", 0xe816, 0xf81f, WR_y|RD_y|RD_x, 0, I3 },
{"dsubu", "z,v,y", 0xe002, 0xf803, WR_z|RD_x|RD_y, 0, I3 },
-{"dsubu", "y,x,4", 0, (int) M_DSUBU_I, INSN_MACRO, 0, 0 },
-{"dsubu", "y,j", 0, (int) M_DSUBU_I_2, INSN_MACRO, 0, 0 },
-{"exit", "L", 0xed09, 0xff1f, TRAP, 0, 0 },
-{"exit", "L", 0xee09, 0xff1f, TRAP, 0, 0 },
-{"exit", "L", 0xef09, 0xff1f, TRAP, 0, 0 },
-{"entry", "l", 0xe809, 0xf81f, TRAP, 0, 0 },
-{"extend", "e", 0xf000, 0xf800, 0, 0, 0 },
-{"jalr", "x", 0xe840, 0xf8ff, UBD|WR_31|RD_x, 0, 0 },
-{"jalr", "R,x", 0xe840, 0xf8ff, UBD|WR_31|RD_x, 0, 0 },
-{"jal", "x", 0xe840, 0xf8ff, UBD|WR_31|RD_x, 0, 0 },
-{"jal", "R,x", 0xe840, 0xf8ff, UBD|WR_31|RD_x, 0, 0 },
-{"jal", "a", 0x1800, 0xfc00, UBD|WR_31, 0, 0 },
-{"jalx", "a", 0x1c00, 0xfc00, UBD|WR_31, 0, 0 },
-{"jr", "x", 0xe800, 0xf8ff, UBD|RD_x, 0, 0 },
-{"jr", "R", 0xe820, 0xffff, UBD|RD_31, 0, 0 },
-{"j", "x", 0xe800, 0xf8ff, UBD|RD_x, 0, 0 },
-{"j", "R", 0xe820, 0xffff, UBD|RD_31, 0, 0 },
-{"lb", "y,5(x)", 0x8000, 0xf800, WR_y|RD_x, 0, 0 },
-{"lbu", "y,5(x)", 0xa000, 0xf800, WR_y|RD_x, 0, 0 },
+{"dsubu", "y,x,4", 0, (int) M_DSUBU_I, INSN_MACRO, 0, I1 },
+{"dsubu", "y,j", 0, (int) M_DSUBU_I_2, INSN_MACRO, 0, I1 },
+{"exit", "L", 0xed09, 0xff1f, TRAP, 0, I1 },
+{"exit", "L", 0xee09, 0xff1f, TRAP, 0, I1 },
+{"exit", "L", 0xef09, 0xff1f, TRAP, 0, I1 },
+{"entry", "l", 0xe809, 0xf81f, TRAP, 0, I1 },
+{"extend", "e", 0xf000, 0xf800, 0, 0, I1 },
+{"jalr", "x", 0xe840, 0xf8ff, UBD|WR_31|RD_x, 0, I1 },
+{"jalr", "R,x", 0xe840, 0xf8ff, UBD|WR_31|RD_x, 0, I1 },
+{"jal", "x", 0xe840, 0xf8ff, UBD|WR_31|RD_x, 0, I1 },
+{"jal", "R,x", 0xe840, 0xf8ff, UBD|WR_31|RD_x, 0, I1 },
+{"jal", "a", 0x1800, 0xfc00, UBD|WR_31, 0, I1 },
+{"jalx", "a", 0x1c00, 0xfc00, UBD|WR_31, 0, I1 },
+{"jr", "x", 0xe800, 0xf8ff, UBD|RD_x, 0, I1 },
+{"jr", "R", 0xe820, 0xffff, UBD|RD_31, 0, I1 },
+{"j", "x", 0xe800, 0xf8ff, UBD|RD_x, 0, I1 },
+{"j", "R", 0xe820, 0xffff, UBD|RD_31, 0, I1 },
+{"lb", "y,5(x)", 0x8000, 0xf800, WR_y|RD_x, 0, I1 },
+{"lbu", "y,5(x)", 0xa000, 0xf800, WR_y|RD_x, 0, I1 },
{"ld", "y,D(x)", 0x3800, 0xf800, WR_y|RD_x, 0, I3 },
{"ld", "y,B", 0xfc00, 0xff00, WR_y|RD_PC, 0, I3 },
{"ld", "y,D(P)", 0xfc00, 0xff00, WR_y|RD_PC, 0, I3 },
{"ld", "y,D(S)", 0xf800, 0xff00, WR_y|RD_SP, 0, I3 },
-{"lh", "y,H(x)", 0x8800, 0xf800, WR_y|RD_x, 0, 0 },
-{"lhu", "y,H(x)", 0xa800, 0xf800, WR_y|RD_x, 0, 0 },
-{"li", "x,U", 0x6800, 0xf800, WR_x, 0, 0 },
-{"lw", "y,W(x)", 0x9800, 0xf800, WR_y|RD_x, 0, 0 },
-{"lw", "x,A", 0xb000, 0xf800, WR_x|RD_PC, 0, 0 },
-{"lw", "x,V(P)", 0xb000, 0xf800, WR_x|RD_PC, 0, 0 },
-{"lw", "x,V(S)", 0x9000, 0xf800, WR_x|RD_SP, 0, 0 },
+{"lh", "y,H(x)", 0x8800, 0xf800, WR_y|RD_x, 0, I1 },
+{"lhu", "y,H(x)", 0xa800, 0xf800, WR_y|RD_x, 0, I1 },
+{"li", "x,U", 0x6800, 0xf800, WR_x, 0, I1 },
+{"lw", "y,W(x)", 0x9800, 0xf800, WR_y|RD_x, 0, I1 },
+{"lw", "x,A", 0xb000, 0xf800, WR_x|RD_PC, 0, I1 },
+{"lw", "x,V(P)", 0xb000, 0xf800, WR_x|RD_PC, 0, I1 },
+{"lw", "x,V(S)", 0x9000, 0xf800, WR_x|RD_SP, 0, I1 },
{"lwu", "y,W(x)", 0xb800, 0xf800, WR_y|RD_x, 0, I3 },
-{"mfhi", "x", 0xe810, 0xf8ff, WR_x|RD_HI, 0, 0 },
-{"mflo", "x", 0xe812, 0xf8ff, WR_x|RD_LO, 0, 0 },
-{"move", "y,X", 0x6700, 0xff00, WR_y|RD_X, 0, 0 },
-{"move", "Y,Z", 0x6500, 0xff00, WR_Y|RD_Z, 0, 0 },
-{"mul", "z,v,y", 0, (int) M_MUL, INSN_MACRO, 0, 0 },
-{"mult", "x,y", 0xe818, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, 0 },
-{"multu", "x,y", 0xe819, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, 0 },
-{"neg", "x,w", 0xe80b, 0xf81f, WR_x|RD_y, 0, 0 },
-{"not", "x,w", 0xe80f, 0xf81f, WR_x|RD_y, 0, 0 },
-{"or", "x,y", 0xe80d, 0xf81f, WR_x|RD_x|RD_y, 0, 0 },
-{"rem", "0,x,y", 0xe81a, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, 0 },
-{"rem", "z,v,y", 0, (int) M_REM_3, INSN_MACRO, 0, 0 },
-{"remu", "0,x,y", 0xe81b, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, 0 },
-{"remu", "z,v,y", 0, (int) M_REMU_3, INSN_MACRO, 0, 0 },
-{"sb", "y,5(x)", 0xc000, 0xf800, RD_y|RD_x, 0, 0 },
+{"mfhi", "x", 0xe810, 0xf8ff, WR_x|RD_HI, 0, I1 },
+{"mflo", "x", 0xe812, 0xf8ff, WR_x|RD_LO, 0, I1 },
+{"move", "y,X", 0x6700, 0xff00, WR_y|RD_X, 0, I1 },
+{"move", "Y,Z", 0x6500, 0xff00, WR_Y|RD_Z, 0, I1 },
+{"mul", "z,v,y", 0, (int) M_MUL, INSN_MACRO, 0, I1 },
+{"mult", "x,y", 0xe818, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, I1 },
+{"multu", "x,y", 0xe819, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, I1 },
+{"neg", "x,w", 0xe80b, 0xf81f, WR_x|RD_y, 0, I1 },
+{"not", "x,w", 0xe80f, 0xf81f, WR_x|RD_y, 0, I1 },
+{"or", "x,y", 0xe80d, 0xf81f, WR_x|RD_x|RD_y, 0, I1 },
+{"rem", "0,x,y", 0xe81a, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, I1 },
+{"rem", "z,v,y", 0, (int) M_REM_3, INSN_MACRO, 0, I1 },
+{"remu", "0,x,y", 0xe81b, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0, I1 },
+{"remu", "z,v,y", 0, (int) M_REMU_3, INSN_MACRO, 0, I1 },
+{"sb", "y,5(x)", 0xc000, 0xf800, RD_y|RD_x, 0, I1 },
{"sd", "y,D(x)", 0x7800, 0xf800, RD_y|RD_x, 0, I3 },
{"sd", "y,D(S)", 0xf900, 0xff00, RD_y|RD_PC, 0, I3 },
-{"sd", "R,C(S)", 0xfa00, 0xff00, RD_31|RD_PC, 0, 0 },
-{"sh", "y,H(x)", 0xc800, 0xf800, RD_y|RD_x, 0, 0 },
-{"sllv", "y,x", 0xe804, 0xf81f, WR_y|RD_y|RD_x, 0, 0 },
-{"sll", "x,w,<", 0x3000, 0xf803, WR_x|RD_y, 0, 0 },
-{"sll", "y,x", 0xe804, 0xf81f, WR_y|RD_y|RD_x, 0, 0 },
-{"slti", "x,8", 0x5000, 0xf800, WR_T|RD_x, 0, 0 },
-{"slt", "x,y", 0xe802, 0xf81f, WR_T|RD_x|RD_y, 0, 0 },
-{"slt", "x,8", 0x5000, 0xf800, WR_T|RD_x, 0, 0 },
-{"sltiu", "x,8", 0x5800, 0xf800, WR_T|RD_x, 0, 0 },
-{"sltu", "x,y", 0xe803, 0xf81f, WR_T|RD_x|RD_y, 0, 0 },
-{"sltu", "x,8", 0x5800, 0xf800, WR_T|RD_x, 0, 0 },
-{"srav", "y,x", 0xe807, 0xf81f, WR_y|RD_y|RD_x, 0, 0 },
-{"sra", "x,w,<", 0x3003, 0xf803, WR_x|RD_y, 0, 0 },
-{"sra", "y,x", 0xe807, 0xf81f, WR_y|RD_y|RD_x, 0, 0 },
-{"srlv", "y,x", 0xe806, 0xf81f, WR_y|RD_y|RD_x, 0, 0 },
-{"srl", "x,w,<", 0x3002, 0xf803, WR_x|RD_y, 0, 0 },
-{"srl", "y,x", 0xe806, 0xf81f, WR_y|RD_y|RD_x, 0, 0 },
-{"subu", "z,v,y", 0xe003, 0xf803, WR_z|RD_x|RD_y, 0, 0 },
-{"subu", "y,x,4", 0, (int) M_SUBU_I, INSN_MACRO, 0, 0 },
-{"subu", "x,k", 0, (int) M_SUBU_I_2, INSN_MACRO,0, 0 },
-{"sw", "y,W(x)", 0xd800, 0xf800, RD_y|RD_x, 0, 0 },
-{"sw", "x,V(S)", 0xd000, 0xf800, RD_x|RD_SP, 0, 0 },
-{"sw", "R,V(S)", 0x6200, 0xff00, RD_31|RD_SP, 0, 0 },
-{"xor", "x,y", 0xe80e, 0xf81f, WR_x|RD_x|RD_y, 0, 0 },
+{"sd", "R,C(S)", 0xfa00, 0xff00, RD_31|RD_PC, 0, I1 },
+{"sh", "y,H(x)", 0xc800, 0xf800, RD_y|RD_x, 0, I1 },
+{"sllv", "y,x", 0xe804, 0xf81f, WR_y|RD_y|RD_x, 0, I1 },
+{"sll", "x,w,<", 0x3000, 0xf803, WR_x|RD_y, 0, I1 },
+{"sll", "y,x", 0xe804, 0xf81f, WR_y|RD_y|RD_x, 0, I1 },
+{"slti", "x,8", 0x5000, 0xf800, WR_T|RD_x, 0, I1 },
+{"slt", "x,y", 0xe802, 0xf81f, WR_T|RD_x|RD_y, 0, I1 },
+{"slt", "x,8", 0x5000, 0xf800, WR_T|RD_x, 0, I1 },
+{"sltiu", "x,8", 0x5800, 0xf800, WR_T|RD_x, 0, I1 },
+{"sltu", "x,y", 0xe803, 0xf81f, WR_T|RD_x|RD_y, 0, I1 },
+{"sltu", "x,8", 0x5800, 0xf800, WR_T|RD_x, 0, I1 },
+{"srav", "y,x", 0xe807, 0xf81f, WR_y|RD_y|RD_x, 0, I1 },
+{"sra", "x,w,<", 0x3003, 0xf803, WR_x|RD_y, 0, I1 },
+{"sra", "y,x", 0xe807, 0xf81f, WR_y|RD_y|RD_x, 0, I1 },
+{"srlv", "y,x", 0xe806, 0xf81f, WR_y|RD_y|RD_x, 0, I1 },
+{"srl", "x,w,<", 0x3002, 0xf803, WR_x|RD_y, 0, I1 },
+{"srl", "y,x", 0xe806, 0xf81f, WR_y|RD_y|RD_x, 0, I1 },
+{"subu", "z,v,y", 0xe003, 0xf803, WR_z|RD_x|RD_y, 0, I1 },
+{"subu", "y,x,4", 0, (int) M_SUBU_I, INSN_MACRO, 0, I1 },
+{"subu", "x,k", 0, (int) M_SUBU_I_2, INSN_MACRO,0, I1 },
+{"sw", "y,W(x)", 0xd800, 0xf800, RD_y|RD_x, 0, I1 },
+{"sw", "x,V(S)", 0xd000, 0xf800, RD_x|RD_SP, 0, I1 },
+{"sw", "R,V(S)", 0x6200, 0xff00, RD_31|RD_SP, 0, I1 },
+{"xor", "x,y", 0xe80e, 0xf81f, WR_x|RD_x|RD_y, 0, I1 },
/* MIPS16e additions */
-{"jalrc", "x", 0xe8c0, 0xf8ff, WR_31|RD_x|TRAP, 0, 0 },
-{"jalrc", "R,x", 0xe8c0, 0xf8ff, WR_31|RD_x|TRAP, 0, 0 },
-{"jrc", "x", 0xe880, 0xf8ff, RD_x|TRAP, 0, 0 },
-{"jrc", "R", 0xe8a0, 0xffff, RD_31|TRAP, 0, 0 },
-{"restore", "M", 0x6400, 0xff80, WR_31|RD_SP|WR_SP|TRAP, 0, 0 },
-{"save", "m", 0x6480, 0xff80, RD_31|RD_SP|WR_SP|TRAP, 0, 0 },
-{"seb", "x", 0xe891, 0xf8ff, WR_x|RD_x, 0, 0 },
-{"seh", "x", 0xe8b1, 0xf8ff, WR_x|RD_x, 0, 0 },
-{"sew", "x", 0xe8d1, 0xf8ff, WR_x|RD_x, 0, I3 },
-{"zeb", "x", 0xe811, 0xf8ff, WR_x|RD_x, 0, 0 },
-{"zeh", "x", 0xe831, 0xf8ff, WR_x|RD_x, 0, 0 },
-{"zew", "x", 0xe851, 0xf8ff, WR_x|RD_x, 0, I3 },
+{"jalrc", "x", 0xe8c0, 0xf8ff, WR_31|RD_x|TRAP, 0, I32 },
+{"jalrc", "R,x", 0xe8c0, 0xf8ff, WR_31|RD_x|TRAP, 0, I32 },
+{"jrc", "x", 0xe880, 0xf8ff, RD_x|TRAP, 0, I32 },
+{"jrc", "R", 0xe8a0, 0xffff, RD_31|TRAP, 0, I32 },
+{"restore", "M", 0x6400, 0xff80, WR_31|RD_SP|WR_SP|TRAP, 0, I32 },
+{"save", "m", 0x6480, 0xff80, RD_31|RD_SP|WR_SP|TRAP, 0, I32 },
+{"sdbbp", "6", 0xe801, 0xf81f, TRAP, 0, I32 },
+{"seb", "x", 0xe891, 0xf8ff, WR_x|RD_x, 0, I32 },
+{"seh", "x", 0xe8b1, 0xf8ff, WR_x|RD_x, 0, I32 },
+{"sew", "x", 0xe8d1, 0xf8ff, WR_x|RD_x, 0, I64 },
+{"zeb", "x", 0xe811, 0xf8ff, WR_x|RD_x, 0, I32 },
+{"zeh", "x", 0xe831, 0xf8ff, WR_x|RD_x, 0, I32 },
+{"zew", "x", 0xe851, 0xf8ff, WR_x|RD_x, 0, I64 },
};
const int bfd_mips16_num_opcodes =
diff --git a/opcodes/mt-asm.c b/opcodes/mt-asm.c
index 85e1249b6869..21374bc541ed 100644
--- a/opcodes/mt-asm.c
+++ b/opcodes/mt-asm.c
@@ -610,6 +610,9 @@ mt_cgen_init_asm (CGEN_CPU_DESC cd)
mt_cgen_init_ibld_table (cd);
cd->parse_handlers = & mt_cgen_parse_handlers[0];
cd->parse_operand = mt_cgen_parse_operand;
+#ifdef CGEN_ASM_INIT_HOOK
+CGEN_ASM_INIT_HOOK
+#endif
}
diff --git a/opcodes/mt-ibld.c b/opcodes/mt-ibld.c
index 6778ac4ce1d4..d1022a971647 100644
--- a/opcodes/mt-ibld.c
+++ b/opcodes/mt-ibld.c
@@ -3,7 +3,7 @@
THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator.
- the resultant file is machine generated, cgen-ibld.in isn't
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2005
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2005, 2006
Free Software Foundation, Inc.
This file is part of the GNU Binutils and GDB, the GNU debugger.
@@ -168,13 +168,21 @@ insert_normal (CGEN_CPU_DESC cd,
else if (! CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED))
{
unsigned long maxval = mask;
-
- if ((unsigned long) value > maxval)
+ unsigned long val = (unsigned long) value;
+
+ /* For hosts with a word size > 32 check to see if value has been sign
+ extended beyond 32 bits. If so then ignore these higher sign bits
+ as the user is attempting to store a 32-bit signed value into an
+ unsigned 32-bit field which is allowed. */
+ if (sizeof (unsigned long) > 4 && ((value >> 32) == -1))
+ val &= 0xFFFFFFFF;
+
+ if (val > maxval)
{
/* xgettext:c-format */
sprintf (errbuf,
- _("operand out of range (%lu not between 0 and %lu)"),
- value, maxval);
+ _("operand out of range (0x%lx not between 0 and 0x%lx)"),
+ val, maxval);
return errbuf;
}
}
@@ -440,9 +448,8 @@ extract_normal (CGEN_CPU_DESC cd,
word_length may be too big. */
if (cd->min_insn_bitsize < cd->base_insn_bitsize)
{
- if (word_offset == 0
- && word_length > total_length)
- word_length = total_length;
+ if (word_offset + word_length > total_length)
+ word_length = total_length - word_offset;
}
/* Does the value reside in INSN_VALUE, and at the right alignment? */
diff --git a/opcodes/mt-opc.c b/opcodes/mt-opc.c
index ef7d7fd69339..465686f03d99 100644
--- a/opcodes/mt-opc.c
+++ b/opcodes/mt-opc.c
@@ -36,8 +36,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
/* Special check to ensure that instruction exists for given machine. */
int
-mt_cgen_insn_supported (CGEN_CPU_DESC cd,
- const CGEN_INSN *insn)
+mt_cgen_insn_supported (CGEN_CPU_DESC cd, const CGEN_INSN *insn)
{
int machs = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_MACH);
diff --git a/opcodes/ns32k-dis.c b/opcodes/ns32k-dis.c
index 7ed4ab2fbe57..8e73e6dc96db 100644
--- a/opcodes/ns32k-dis.c
+++ b/opcodes/ns32k-dis.c
@@ -1,5 +1,5 @@
/* Print National Semiconductor 32000 instructions.
- Copyright 1986, 1988, 1991, 1992, 1994, 1998, 2001, 2002, 2005
+ Copyright 1986, 1988, 1991, 1992, 1994, 1998, 2001, 2002, 2005, 2007
Free Software Foundation, Inc.
This file is part of opcodes library.
@@ -20,8 +20,8 @@
MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "dis-asm.h"
#if !defined(const) && !defined(__STDC__)
#define const
diff --git a/opcodes/openrisc-asm.c b/opcodes/openrisc-asm.c
index 0b67e98a68fb..c83956a03bf3 100644
--- a/opcodes/openrisc-asm.c
+++ b/opcodes/openrisc-asm.c
@@ -256,6 +256,9 @@ openrisc_cgen_init_asm (CGEN_CPU_DESC cd)
openrisc_cgen_init_ibld_table (cd);
cd->parse_handlers = & openrisc_cgen_parse_handlers[0];
cd->parse_operand = openrisc_cgen_parse_operand;
+#ifdef CGEN_ASM_INIT_HOOK
+CGEN_ASM_INIT_HOOK
+#endif
}
diff --git a/opcodes/po/Make-in b/opcodes/po/Make-in
index 199100da8d86..9bc5bb1f2f70 100644
--- a/opcodes/po/Make-in
+++ b/opcodes/po/Make-in
@@ -16,6 +16,7 @@ SHELL = /bin/sh
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
+top_builddir = @top_builddir@
prefix = @prefix@
exec_prefix = @exec_prefix@
@@ -72,7 +73,7 @@ INSTOBJEXT = @INSTOBJEXT@
$(MSGFMT) -o $@ $<
.po.gmo:
- file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+ file=`echo $* | sed 's,.*/,,'`.gmo \
&& rm -f $$file && $(GMSGFMT) -o $$file $<
.po.cat:
diff --git a/opcodes/po/POTFILES.in b/opcodes/po/POTFILES.in
index 67e98c43cb16..c8837a08a59c 100644
--- a/opcodes/po/POTFILES.in
+++ b/opcodes/po/POTFILES.in
@@ -12,6 +12,8 @@ cgen-dis.c
cgen-opc.c
cgen-ops.h
cgen-types.h
+cr16-dis.c
+cr16-opc.c
cris-dis.c
cris-opc.c
crx-dis.c
@@ -45,6 +47,10 @@ hppa-dis.c
i370-dis.c
i370-opc.c
i386-dis.c
+i386-gen.c
+i386-opc.c
+i386-opc.h
+i386-tbl.h
i860-dis.c
i960-dis.c
ia64-asmtab.c
@@ -100,6 +106,13 @@ m88k-dis.c
maxq-dis.c
mcore-dis.c
mcore-opc.h
+mep-asm.c
+mep-desc.c
+mep-desc.h
+mep-dis.c
+mep-ibld.c
+mep-opc.c
+mep-opc.h
mips16-opc.c
mips-dis.c
mips-opc.c
@@ -131,6 +144,8 @@ ppc-opc.c
s390-dis.c
s390-mkopc.c
s390-opc.c
+score-dis.c
+score-opc.h
sh64-dis.c
sh64-opc.c
sh64-opc.h
@@ -138,6 +153,8 @@ sh-dis.c
sh-opc.h
sparc-dis.c
sparc-opc.c
+spu-dis.c
+spu-opc.c
sysdep.h
tic30-dis.c
tic4x-dis.c
diff --git a/opcodes/po/da.gmo b/opcodes/po/da.gmo
deleted file mode 100644
index 42d668d18272..000000000000
--- a/opcodes/po/da.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/po/de.gmo b/opcodes/po/de.gmo
deleted file mode 100644
index acd983f25e64..000000000000
--- a/opcodes/po/de.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/po/es.gmo b/opcodes/po/es.gmo
deleted file mode 100644
index 8e4253f5dc9b..000000000000
--- a/opcodes/po/es.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/po/fi.gmo b/opcodes/po/fi.gmo
deleted file mode 100644
index 927782db1cf9..000000000000
--- a/opcodes/po/fi.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/po/fr.gmo b/opcodes/po/fr.gmo
deleted file mode 100644
index 47a17c62c283..000000000000
--- a/opcodes/po/fr.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/po/ga.gmo b/opcodes/po/ga.gmo
deleted file mode 100644
index 79c304c8f8f1..000000000000
--- a/opcodes/po/ga.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/po/id.gmo b/opcodes/po/id.gmo
deleted file mode 100644
index 5d6dcd45e5e8..000000000000
--- a/opcodes/po/id.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/po/nl.gmo b/opcodes/po/nl.gmo
deleted file mode 100644
index 6e28b2528bf0..000000000000
--- a/opcodes/po/nl.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/po/opcodes.pot b/opcodes/po/opcodes.pot
index e387290cd4a4..a988933c1914 100644
--- a/opcodes/po/opcodes.pot
+++ b/opcodes/po/opcodes.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-10-25 10:50+0930\n"
+"POT-Creation-Date: 2007-07-01 13:40+0930\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"
@@ -110,23 +110,23 @@ msgstr ""
msgid "must specify .jd or no nullify suffix"
msgstr ""
-#: arm-dis.c:1302
+#: arm-dis.c:1807
msgid "<illegal precision>"
msgstr ""
#. XXX - should break 'option' at following delimiter.
-#: arm-dis.c:2746
+#: arm-dis.c:3817
#, c-format
msgid "Unrecognised register name set: %s\n"
msgstr ""
#. XXX - should break 'option' at following delimiter.
-#: arm-dis.c:2754
+#: arm-dis.c:3825
#, c-format
msgid "Unrecognised disassembler option: %s\n"
msgstr ""
-#: arm-dis.c:2916
+#: arm-dis.c:4225
#, c-format
msgid ""
"\n"
@@ -134,24 +134,24 @@ msgid ""
"the -M switch:\n"
msgstr ""
-#: avr-dis.c:109 avr-dis.c:119
+#: avr-dis.c:112 avr-dis.c:122
#, c-format
msgid "undefined"
msgstr ""
-#: avr-dis.c:176
+#: avr-dis.c:184
#, c-format
msgid "Internal disassembler error"
msgstr ""
-#: avr-dis.c:225
+#: avr-dis.c:233
#, c-format
msgid "unknown constraint `%c'"
msgstr ""
-#: cgen-asm.c:336 fr30-ibld.c:192 frv-ibld.c:192 ip2k-ibld.c:192
-#: iq2000-ibld.c:192 m32c-ibld.c:192 m32r-ibld.c:192 ms1-ibld.c:192
-#: openrisc-ibld.c:192 xstormy16-ibld.c:192
+#: cgen-asm.c:336 fr30-ibld.c:200 frv-ibld.c:200 ip2k-ibld.c:200
+#: iq2000-ibld.c:200 m32c-ibld.c:200 m32r-ibld.c:200 mep-ibld.c:200
+#: mt-ibld.c:200 openrisc-ibld.c:200 xc16x-ibld.c:200 xstormy16-ibld.c:200
#, c-format
msgid "operand out of range (%ld not between %ld and %ld)"
msgstr ""
@@ -177,7 +177,7 @@ msgstr ""
msgid "Address 0x%s is out of bounds.\n"
msgstr ""
-#: fr30-asm.c:92 m32c-asm.c:782 m32c-asm.c:789
+#: fr30-asm.c:92 m32c-asm.c:876 m32c-asm.c:883
msgid "Register number is not valid"
msgstr ""
@@ -189,141 +189,144 @@ msgstr ""
msgid "Register must be between r8 and r15"
msgstr ""
-#: fr30-asm.c:115 m32c-asm.c:820
+#: fr30-asm.c:115 m32c-asm.c:914
msgid "Register list is not valid"
msgstr ""
-#: fr30-asm.c:309 frv-asm.c:1262 ip2k-asm.c:510 iq2000-asm.c:456
-#: m32c-asm.c:1476 m32r-asm.c:323 ms1-asm.c:546 openrisc-asm.c:240
-#: xstormy16-asm.c:275
+#: fr30-asm.c:309 frv-asm.c:1262 ip2k-asm.c:510 iq2000-asm.c:458
+#: m32c-asm.c:1588 m32r-asm.c:327 mep-asm.c:1000 mt-asm.c:594
+#: openrisc-asm.c:240 xc16x-asm.c:375 xstormy16-asm.c:275
#, c-format
msgid "Unrecognized field %d while parsing.\n"
msgstr ""
-#: fr30-asm.c:357 frv-asm.c:1310 ip2k-asm.c:558 iq2000-asm.c:504
-#: m32c-asm.c:1524 m32r-asm.c:371 ms1-asm.c:594 openrisc-asm.c:288
-#: xstormy16-asm.c:323
+#: fr30-asm.c:360 frv-asm.c:1313 ip2k-asm.c:561 iq2000-asm.c:509
+#: m32c-asm.c:1639 m32r-asm.c:378 mep-asm.c:1051 mt-asm.c:645
+#: openrisc-asm.c:291 xc16x-asm.c:426 xstormy16-asm.c:326
msgid "missing mnemonic in syntax string"
msgstr ""
#. We couldn't parse it.
-#: fr30-asm.c:492 fr30-asm.c:496 fr30-asm.c:583 fr30-asm.c:684 frv-asm.c:1445
-#: frv-asm.c:1449 frv-asm.c:1536 frv-asm.c:1637 ip2k-asm.c:693 ip2k-asm.c:697
-#: ip2k-asm.c:784 ip2k-asm.c:885 iq2000-asm.c:639 iq2000-asm.c:643
-#: iq2000-asm.c:730 iq2000-asm.c:831 m32c-asm.c:1659 m32c-asm.c:1663
-#: m32c-asm.c:1750 m32c-asm.c:1851 m32r-asm.c:506 m32r-asm.c:510
-#: m32r-asm.c:597 m32r-asm.c:698 ms1-asm.c:729 ms1-asm.c:733 ms1-asm.c:820
-#: ms1-asm.c:921 openrisc-asm.c:423 openrisc-asm.c:427 openrisc-asm.c:514
-#: openrisc-asm.c:615 xstormy16-asm.c:458 xstormy16-asm.c:462
-#: xstormy16-asm.c:549 xstormy16-asm.c:650
+#: fr30-asm.c:495 fr30-asm.c:499 fr30-asm.c:586 fr30-asm.c:687 frv-asm.c:1448
+#: frv-asm.c:1452 frv-asm.c:1539 frv-asm.c:1640 ip2k-asm.c:696 ip2k-asm.c:700
+#: ip2k-asm.c:787 ip2k-asm.c:888 iq2000-asm.c:644 iq2000-asm.c:648
+#: iq2000-asm.c:735 iq2000-asm.c:836 m32c-asm.c:1774 m32c-asm.c:1778
+#: m32c-asm.c:1865 m32c-asm.c:1966 m32r-asm.c:513 m32r-asm.c:517
+#: m32r-asm.c:604 m32r-asm.c:705 mep-asm.c:1186 mep-asm.c:1190 mep-asm.c:1277
+#: mep-asm.c:1378 mt-asm.c:780 mt-asm.c:784 mt-asm.c:871 mt-asm.c:972
+#: openrisc-asm.c:426 openrisc-asm.c:430 openrisc-asm.c:517 openrisc-asm.c:618
+#: xc16x-asm.c:561 xc16x-asm.c:565 xc16x-asm.c:652 xc16x-asm.c:753
+#: xstormy16-asm.c:461 xstormy16-asm.c:465 xstormy16-asm.c:552
+#: xstormy16-asm.c:653
msgid "unrecognized instruction"
msgstr ""
-#: fr30-asm.c:539 frv-asm.c:1492 ip2k-asm.c:740 iq2000-asm.c:686
-#: m32c-asm.c:1706 m32r-asm.c:553 ms1-asm.c:776 openrisc-asm.c:470
-#: xstormy16-asm.c:505
+#: fr30-asm.c:542 frv-asm.c:1495 ip2k-asm.c:743 iq2000-asm.c:691
+#: m32c-asm.c:1821 m32r-asm.c:560 mep-asm.c:1233 mt-asm.c:827
+#: openrisc-asm.c:473 xc16x-asm.c:608 xstormy16-asm.c:508
#, c-format
msgid "syntax error (expected char `%c', found `%c')"
msgstr ""
-#: fr30-asm.c:549 frv-asm.c:1502 ip2k-asm.c:750 iq2000-asm.c:696
-#: m32c-asm.c:1716 m32r-asm.c:563 ms1-asm.c:786 openrisc-asm.c:480
-#: xstormy16-asm.c:515
+#: fr30-asm.c:552 frv-asm.c:1505 ip2k-asm.c:753 iq2000-asm.c:701
+#: m32c-asm.c:1831 m32r-asm.c:570 mep-asm.c:1243 mt-asm.c:837
+#: openrisc-asm.c:483 xc16x-asm.c:618 xstormy16-asm.c:518
#, c-format
msgid "syntax error (expected char `%c', found end of instruction)"
msgstr ""
-#: fr30-asm.c:577 frv-asm.c:1530 ip2k-asm.c:778 iq2000-asm.c:724
-#: m32c-asm.c:1744 m32r-asm.c:591 ms1-asm.c:814 openrisc-asm.c:508
-#: xstormy16-asm.c:543
+#: fr30-asm.c:580 frv-asm.c:1533 ip2k-asm.c:781 iq2000-asm.c:729
+#: m32c-asm.c:1859 m32r-asm.c:598 mep-asm.c:1271 mt-asm.c:865
+#: openrisc-asm.c:511 xc16x-asm.c:646 xstormy16-asm.c:546
msgid "junk at end of line"
msgstr ""
-#: fr30-asm.c:683 frv-asm.c:1636 ip2k-asm.c:884 iq2000-asm.c:830
-#: m32c-asm.c:1850 m32r-asm.c:697 ms1-asm.c:920 openrisc-asm.c:614
-#: xstormy16-asm.c:649
+#: fr30-asm.c:686 frv-asm.c:1639 ip2k-asm.c:887 iq2000-asm.c:835
+#: m32c-asm.c:1965 m32r-asm.c:704 mep-asm.c:1377 mt-asm.c:971
+#: openrisc-asm.c:617 xc16x-asm.c:752 xstormy16-asm.c:652
msgid "unrecognized form of instruction"
msgstr ""
-#: fr30-asm.c:695 frv-asm.c:1648 ip2k-asm.c:896 iq2000-asm.c:842
-#: m32c-asm.c:1862 m32r-asm.c:709 ms1-asm.c:932 openrisc-asm.c:626
-#: xstormy16-asm.c:661
+#: fr30-asm.c:698 frv-asm.c:1651 ip2k-asm.c:899 iq2000-asm.c:847
+#: m32c-asm.c:1977 m32r-asm.c:716 mep-asm.c:1389 mt-asm.c:983
+#: openrisc-asm.c:629 xc16x-asm.c:764 xstormy16-asm.c:664
#, c-format
msgid "bad instruction `%.50s...'"
msgstr ""
-#: fr30-asm.c:698 frv-asm.c:1651 ip2k-asm.c:899 iq2000-asm.c:845
-#: m32c-asm.c:1865 m32r-asm.c:712 ms1-asm.c:935 openrisc-asm.c:629
-#: xstormy16-asm.c:664
+#: fr30-asm.c:701 frv-asm.c:1654 ip2k-asm.c:902 iq2000-asm.c:850
+#: m32c-asm.c:1980 m32r-asm.c:719 mep-asm.c:1392 mt-asm.c:986
+#: openrisc-asm.c:632 xc16x-asm.c:767 xstormy16-asm.c:667
#, c-format
msgid "bad instruction `%.50s'"
msgstr ""
#. Default text to print if an instruction isn't recognized.
#: fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 iq2000-dis.c:41 m32c-dis.c:41
-#: m32r-dis.c:41 mmix-dis.c:278 ms1-dis.c:41 openrisc-dis.c:41
-#: xstormy16-dis.c:41
+#: m32r-dis.c:41 mep-dis.c:41 mmix-dis.c:278 mt-dis.c:41 openrisc-dis.c:41
+#: xc16x-dis.c:41 xstormy16-dis.c:41
msgid "*unknown*"
msgstr ""
-#: fr30-dis.c:299 frv-dis.c:396 ip2k-dis.c:288 iq2000-dis.c:189 m32c-dis.c:860
-#: m32r-dis.c:256 ms1-dis.c:258 openrisc-dis.c:135 xstormy16-dis.c:168
+#: fr30-dis.c:299 frv-dis.c:396 ip2k-dis.c:288 iq2000-dis.c:189 m32c-dis.c:891
+#: m32r-dis.c:256 mep-dis.c:776 mt-dis.c:290 openrisc-dis.c:135
+#: xc16x-dis.c:375 xstormy16-dis.c:168
#, c-format
msgid "Unrecognized field %d while printing insn.\n"
msgstr ""
#: fr30-ibld.c:163 frv-ibld.c:163 ip2k-ibld.c:163 iq2000-ibld.c:163
-#: m32c-ibld.c:163 m32r-ibld.c:163 ms1-ibld.c:163 openrisc-ibld.c:163
-#: xstormy16-ibld.c:163
+#: m32c-ibld.c:163 m32r-ibld.c:163 mep-ibld.c:163 mt-ibld.c:163
+#: openrisc-ibld.c:163 xc16x-ibld.c:163 xstormy16-ibld.c:163
#, c-format
msgid "operand out of range (%ld not between %ld and %lu)"
msgstr ""
-#: fr30-ibld.c:176 frv-ibld.c:176 ip2k-ibld.c:176 iq2000-ibld.c:176
-#: m32c-ibld.c:176 m32r-ibld.c:176 ms1-ibld.c:176 openrisc-ibld.c:176
-#: xstormy16-ibld.c:176
+#: fr30-ibld.c:184 frv-ibld.c:184 ip2k-ibld.c:184 iq2000-ibld.c:184
+#: m32c-ibld.c:184 m32r-ibld.c:184 mep-ibld.c:184 mt-ibld.c:184
+#: openrisc-ibld.c:184 xc16x-ibld.c:184 xstormy16-ibld.c:184
#, c-format
-msgid "operand out of range (%lu not between 0 and %lu)"
+msgid "operand out of range (0x%lx not between 0 and 0x%lx)"
msgstr ""
-#: fr30-ibld.c:719 frv-ibld.c:845 ip2k-ibld.c:596 iq2000-ibld.c:702
-#: m32c-ibld.c:1668 m32r-ibld.c:654 ms1-ibld.c:713 openrisc-ibld.c:622
-#: xstormy16-ibld.c:667
+#: fr30-ibld.c:726 frv-ibld.c:852 ip2k-ibld.c:603 iq2000-ibld.c:709
+#: m32c-ibld.c:1727 m32r-ibld.c:661 mep-ibld.c:1024 mt-ibld.c:745
+#: openrisc-ibld.c:629 xc16x-ibld.c:748 xstormy16-ibld.c:674
#, c-format
msgid "Unrecognized field %d while building insn.\n"
msgstr ""
-#: fr30-ibld.c:924 frv-ibld.c:1162 ip2k-ibld.c:671 iq2000-ibld.c:877
-#: m32c-ibld.c:2780 m32r-ibld.c:791 ms1-ibld.c:907 openrisc-ibld.c:722
-#: xstormy16-ibld.c:813
+#: fr30-ibld.c:931 frv-ibld.c:1169 ip2k-ibld.c:678 iq2000-ibld.c:884
+#: m32c-ibld.c:2888 m32r-ibld.c:798 mep-ibld.c:1444 mt-ibld.c:965
+#: openrisc-ibld.c:729 xc16x-ibld.c:968 xstormy16-ibld.c:820
#, c-format
msgid "Unrecognized field %d while decoding insn.\n"
msgstr ""
-#: fr30-ibld.c:1070 frv-ibld.c:1440 ip2k-ibld.c:745 iq2000-ibld.c:1008
-#: m32c-ibld.c:3379 m32r-ibld.c:904 ms1-ibld.c:1086 openrisc-ibld.c:799
-#: xstormy16-ibld.c:923
+#: fr30-ibld.c:1077 frv-ibld.c:1447 ip2k-ibld.c:752 iq2000-ibld.c:1015
+#: m32c-ibld.c:3505 m32r-ibld.c:911 mep-ibld.c:1737 mt-ibld.c:1165
+#: openrisc-ibld.c:806 xc16x-ibld.c:1189 xstormy16-ibld.c:930
#, c-format
msgid "Unrecognized field %d while getting int operand.\n"
msgstr ""
-#: fr30-ibld.c:1198 frv-ibld.c:1700 ip2k-ibld.c:801 iq2000-ibld.c:1121
-#: m32c-ibld.c:3960 m32r-ibld.c:999 ms1-ibld.c:1247 openrisc-ibld.c:858
-#: xstormy16-ibld.c:1015
+#: fr30-ibld.c:1205 frv-ibld.c:1707 ip2k-ibld.c:808 iq2000-ibld.c:1128
+#: m32c-ibld.c:4104 m32r-ibld.c:1006 mep-ibld.c:2012 mt-ibld.c:1347
+#: openrisc-ibld.c:865 xc16x-ibld.c:1392 xstormy16-ibld.c:1022
#, c-format
msgid "Unrecognized field %d while getting vma operand.\n"
msgstr ""
-#: fr30-ibld.c:1329 frv-ibld.c:1967 ip2k-ibld.c:860 iq2000-ibld.c:1241
-#: m32c-ibld.c:4529 m32r-ibld.c:1100 ms1-ibld.c:1415 openrisc-ibld.c:924
-#: xstormy16-ibld.c:1114
+#: fr30-ibld.c:1336 frv-ibld.c:1974 ip2k-ibld.c:867 iq2000-ibld.c:1248
+#: m32c-ibld.c:4691 m32r-ibld.c:1107 mep-ibld.c:2271 mt-ibld.c:1536
+#: openrisc-ibld.c:931 xc16x-ibld.c:1596 xstormy16-ibld.c:1121
#, c-format
msgid "Unrecognized field %d while setting int operand.\n"
msgstr ""
-#: fr30-ibld.c:1450 frv-ibld.c:2224 ip2k-ibld.c:909 iq2000-ibld.c:1351
-#: m32c-ibld.c:5088 m32r-ibld.c:1191 ms1-ibld.c:1573 openrisc-ibld.c:980
-#: xstormy16-ibld.c:1203
+#: fr30-ibld.c:1457 frv-ibld.c:2231 ip2k-ibld.c:916 iq2000-ibld.c:1358
+#: m32c-ibld.c:5268 m32r-ibld.c:1198 mep-ibld.c:2520 mt-ibld.c:1715
+#: openrisc-ibld.c:987 xc16x-ibld.c:1790 xstormy16-ibld.c:1210
#, c-format
msgid "Unrecognized field %d while setting vma operand.\n"
msgstr ""
@@ -346,8 +349,9 @@ msgstr ""
#. -- assembler routines inserted here.
#. -- asm.c
-#: frv-asm.c:971 iq2000-asm.c:55 m32c-asm.c:140 m32c-asm.c:211 m32c-asm.c:253
-#: m32c-asm.c:312 m32c-asm.c:334 m32r-asm.c:52 openrisc-asm.c:53
+#: frv-asm.c:971 iq2000-asm.c:55 m32c-asm.c:140 m32c-asm.c:236 m32c-asm.c:278
+#: m32c-asm.c:337 m32c-asm.c:359 m32r-asm.c:52 mep-asm.c:231 mep-asm.c:249
+#: mep-asm.c:264 mep-asm.c:279 mep-asm.c:291 openrisc-asm.c:53
msgid "missing `)'"
msgstr ""
@@ -372,116 +376,188 @@ msgstr ""
msgid "%02x\t\t*unknown*"
msgstr ""
-#: i386-dis.c:1742
+#: i386-dis.c:3194
msgid "<internal disassembler error>"
msgstr ""
-#: ia64-gen.c:297
+#: i386-dis.c:3421
+#, c-format
+msgid ""
+"\n"
+"The following i386/x86-64 specific disassembler options are supported for "
+"use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
+msgstr ""
+
+#: i386-dis.c:3425
+#, c-format
+msgid " x86-64 Disassemble in 64bit mode\n"
+msgstr ""
+
+#: i386-dis.c:3426
+#, c-format
+msgid " i386 Disassemble in 32bit mode\n"
+msgstr ""
+
+#: i386-dis.c:3427
+#, c-format
+msgid " i8086 Disassemble in 16bit mode\n"
+msgstr ""
+
+#: i386-dis.c:3428
+#, c-format
+msgid " att Display instruction in AT&T syntax\n"
+msgstr ""
+
+#: i386-dis.c:3429
+#, c-format
+msgid " intel Display instruction in Intel syntax\n"
+msgstr ""
+
+#: i386-dis.c:3430
+#, c-format
+msgid " addr64 Assume 64bit address size\n"
+msgstr ""
+
+#: i386-dis.c:3431
+#, c-format
+msgid " addr32 Assume 32bit address size\n"
+msgstr ""
+
+#: i386-dis.c:3432
+#, c-format
+msgid " addr16 Assume 16bit address size\n"
+msgstr ""
+
+#: i386-dis.c:3433
+#, c-format
+msgid " data32 Assume 32bit data size\n"
+msgstr ""
+
+#: i386-dis.c:3434
+#, c-format
+msgid " data16 Assume 16bit data size\n"
+msgstr ""
+
+#: i386-dis.c:3435
+#, c-format
+msgid " suffix Always display instruction suffix in AT&T syntax\n"
+msgstr ""
+
+#: i386-gen.c:41 ia64-gen.c:306
#, c-format
msgid "%s: Error: "
msgstr ""
-#: ia64-gen.c:310
+#: i386-gen.c:108
+msgid "can't find i386-opc.tbl for reading\n"
+msgstr ""
+
+#: i386-gen.c:259
+msgid "can't find i386-reg.tbl for reading\n"
+msgstr ""
+
+#: i386-gen.c:385 ia64-gen.c:2840
+#, c-format
+msgid "unable to change directory to \"%s\", errno = %s\n"
+msgstr ""
+
+#: ia64-gen.c:319
#, c-format
msgid "%s: Warning: "
msgstr ""
-#: ia64-gen.c:496 ia64-gen.c:730
+#: ia64-gen.c:505 ia64-gen.c:739
#, c-format
msgid "multiple note %s not handled\n"
msgstr ""
-#: ia64-gen.c:607
+#: ia64-gen.c:616
msgid "can't find ia64-ic.tbl for reading\n"
msgstr ""
-#: ia64-gen.c:812
+#: ia64-gen.c:821
#, c-format
msgid "can't find %s for reading\n"
msgstr ""
-#: ia64-gen.c:1036
+#: ia64-gen.c:1045
#, c-format
msgid ""
"most recent format '%s'\n"
"appears more restrictive than '%s'\n"
msgstr ""
-#: ia64-gen.c:1047
+#: ia64-gen.c:1056
#, c-format
msgid "overlapping field %s->%s\n"
msgstr ""
-#: ia64-gen.c:1244
+#: ia64-gen.c:1253
#, c-format
msgid "overwriting note %d with note %d (IC:%s)\n"
msgstr ""
-#: ia64-gen.c:1443
+#: ia64-gen.c:1454
#, c-format
msgid "don't know how to specify %% dependency %s\n"
msgstr ""
-#: ia64-gen.c:1465
+#: ia64-gen.c:1476
#, c-format
msgid "Don't know how to specify # dependency %s\n"
msgstr ""
-#: ia64-gen.c:1504
+#: ia64-gen.c:1515
#, c-format
msgid "IC:%s [%s] has no terminals or sub-classes\n"
msgstr ""
-#: ia64-gen.c:1507
+#: ia64-gen.c:1518
#, c-format
msgid "IC:%s has no terminals or sub-classes\n"
msgstr ""
-#: ia64-gen.c:1516
+#: ia64-gen.c:1527
#, c-format
msgid "no insns mapped directly to terminal IC %s [%s]"
msgstr ""
-#: ia64-gen.c:1519
+#: ia64-gen.c:1530
#, c-format
msgid "no insns mapped directly to terminal IC %s\n"
msgstr ""
-#: ia64-gen.c:1530
+#: ia64-gen.c:1541
#, c-format
msgid "class %s is defined but not used\n"
msgstr ""
-#: ia64-gen.c:1541
+#: ia64-gen.c:1552
#, c-format
msgid "Warning: rsrc %s (%s) has no chks%s\n"
msgstr ""
-#: ia64-gen.c:1545
+#: ia64-gen.c:1556
#, c-format
msgid "rsrc %s (%s) has no regs\n"
msgstr ""
-#: ia64-gen.c:2444
+#: ia64-gen.c:2468
#, c-format
msgid "IC note %d in opcode %s (IC:%s) conflicts with resource %s note %d\n"
msgstr ""
-#: ia64-gen.c:2472
+#: ia64-gen.c:2496
#, c-format
msgid "IC note %d for opcode %s (IC:%s) conflicts with resource %s note %d\n"
msgstr ""
-#: ia64-gen.c:2486
+#: ia64-gen.c:2510
#, c-format
msgid "opcode %s has no class (ops %d %d %d)\n"
msgstr ""
-#: ia64-gen.c:2816
-#, c-format
-msgid "unable to change directory to \"%s\", errno = %s\n"
-msgstr ""
-
#. We've been passed a w. Return with an error message so that
#. cgen will try the next parsing option.
#: ip2k-asm.c:80
@@ -565,7 +641,7 @@ msgstr ""
msgid "%dsp8() takes a symbolic address, not a number"
msgstr ""
-#: m32c-asm.c:159 m32c-asm.c:163 m32c-asm.c:229
+#: m32c-asm.c:159 m32c-asm.c:163 m32c-asm.c:254
msgid "dsp:8 immediate is out of range"
msgstr ""
@@ -573,57 +649,69 @@ msgstr ""
msgid "Immediate is out of range -8 to 7"
msgstr ""
-#: m32c-asm.c:259
+#: m32c-asm.c:209 m32c-asm.c:213
+msgid "Immediate is out of range -7 to 8"
+msgstr ""
+
+#: m32c-asm.c:284
#, c-format
msgid "%dsp16() takes a symbolic address, not a number"
msgstr ""
-#: m32c-asm.c:282 m32c-asm.c:289 m32c-asm.c:352
+#: m32c-asm.c:307 m32c-asm.c:314 m32c-asm.c:377
msgid "dsp:16 immediate is out of range"
msgstr ""
-#: m32c-asm.c:378
+#: m32c-asm.c:403
msgid "dsp:20 immediate is out of range"
msgstr ""
-#: m32c-asm.c:404
+#: m32c-asm.c:429 m32c-asm.c:449
msgid "dsp:24 immediate is out of range"
msgstr ""
-#: m32c-asm.c:437
+#: m32c-asm.c:482
msgid "immediate is out of range 1-2"
msgstr ""
-#: m32c-asm.c:455
+#: m32c-asm.c:500
msgid "immediate is out of range 1-8"
msgstr ""
-#: m32c-asm.c:491
+#: m32c-asm.c:518
+msgid "immediate is out of range 0-7"
+msgstr ""
+
+#: m32c-asm.c:554
msgid "immediate is out of range 2-9"
msgstr ""
-#: m32c-asm.c:509
+#: m32c-asm.c:572
msgid "Bit number for indexing general register is out of range 0-15"
msgstr ""
-#: m32c-asm.c:541 m32c-asm.c:576
+#: m32c-asm.c:610 m32c-asm.c:666
msgid "bit,base is out of range"
msgstr ""
-#: m32c-asm.c:712
+#: m32c-asm.c:617 m32c-asm.c:622 m32c-asm.c:670
+msgid "bit,base out of range for symbol"
+msgstr ""
+
+#: m32c-asm.c:806
msgid "not a valid r0l/r0h pair"
msgstr ""
-#: m32c-asm.c:742
+#: m32c-asm.c:836
msgid "Invalid size specifier"
msgstr ""
-#: m68k-dis.c:1162
+#: m68k-dis.c:1167
#, c-format
msgid "<function code %d>"
msgstr ""
-#: m68k-dis.c:1313
+#: m68k-dis.c:1322
#, c-format
msgid "<internal error in opcode table: %s %s>\n"
msgstr ""
@@ -633,26 +721,39 @@ msgstr ""
msgid "# <dis error: %08lx>"
msgstr ""
-#: mips-dis.c:718
+#: mep-asm.c:113
+msgid "Only $tp or $13 allowed for this opcode"
+msgstr ""
+
+#: mep-asm.c:127
+msgid "Only $sp or $15 allowed for this opcode"
+msgstr ""
+
+#: mep-asm.c:298 mep-asm.c:454
+#, c-format
+msgid "invalid %function() here"
+msgstr ""
+
+#: mips-dis.c:745
msgid "# internal error, incomplete extension sequence (+)"
msgstr ""
-#: mips-dis.c:805
+#: mips-dis.c:852
#, c-format
msgid "# internal error, undefined extension sequence (+%c)"
msgstr ""
-#: mips-dis.c:1153
+#: mips-dis.c:1211
#, c-format
msgid "# internal error, undefined modifier(%c)"
msgstr ""
-#: mips-dis.c:1663
+#: mips-dis.c:1818
#, c-format
msgid "# internal disassembler error, unrecognised modifier (%c)"
msgstr ""
-#: mips-dis.c:1894
+#: mips-dis.c:2049
#, c-format
msgid ""
"\n"
@@ -660,7 +761,7 @@ msgid ""
"with the -M switch (multiple options should be separated by commas):\n"
msgstr ""
-#: mips-dis.c:1898
+#: mips-dis.c:2053
#, c-format
msgid ""
"\n"
@@ -668,7 +769,7 @@ msgid ""
" Default: based on binary being disassembled.\n"
msgstr ""
-#: mips-dis.c:1902
+#: mips-dis.c:2057
#, c-format
msgid ""
"\n"
@@ -676,7 +777,7 @@ msgid ""
" Default: numeric.\n"
msgstr ""
-#: mips-dis.c:1906
+#: mips-dis.c:2061
#, c-format
msgid ""
"\n"
@@ -685,7 +786,7 @@ msgid ""
" Default: based on binary being disassembled.\n"
msgstr ""
-#: mips-dis.c:1911
+#: mips-dis.c:2066
#, c-format
msgid ""
"\n"
@@ -694,7 +795,7 @@ msgid ""
" Default: based on binary being disassembled.\n"
msgstr ""
-#: mips-dis.c:1916
+#: mips-dis.c:2071
#, c-format
msgid ""
"\n"
@@ -702,7 +803,7 @@ msgid ""
" specified ABI.\n"
msgstr ""
-#: mips-dis.c:1920
+#: mips-dis.c:2075
#, c-format
msgid ""
"\n"
@@ -710,7 +811,7 @@ msgid ""
" specified architecture.\n"
msgstr ""
-#: mips-dis.c:1924
+#: mips-dis.c:2079
#, c-format
msgid ""
"\n"
@@ -718,12 +819,12 @@ msgid ""
" "
msgstr ""
-#: mips-dis.c:1929 mips-dis.c:1937 mips-dis.c:1939
+#: mips-dis.c:2084 mips-dis.c:2092 mips-dis.c:2094
#, c-format
msgid "\n"
msgstr ""
-#: mips-dis.c:1931
+#: mips-dis.c:2086
#, c-format
msgid ""
"\n"
@@ -750,20 +851,20 @@ msgstr ""
msgid "*unknown operands type: %d*"
msgstr ""
-#: ms1-asm.c:84 ms1-asm.c:162
+#: mt-asm.c:109 mt-asm.c:189
msgid "Operand out of range. Must be between -32768 and 32767."
msgstr ""
-#: ms1-asm.c:121
+#: mt-asm.c:148
msgid "Biiiig Trouble in parse_imm16!"
msgstr ""
-#: ms1-asm.c:129
+#: mt-asm.c:156
#, c-format
msgid "%operator operand is not a symbol"
msgstr ""
-#: ms1-asm.c:367
+#: mt-asm.c:394
msgid "invalid operand. type may have values 0,1,2 only."
msgstr ""
@@ -777,111 +878,63 @@ msgstr ""
msgid "$<undefined>"
msgstr ""
-#: ppc-opc.c:800 ppc-opc.c:828
+#: ppc-opc.c:782 ppc-opc.c:810
msgid "invalid conditional option"
msgstr ""
-#: ppc-opc.c:830
+#: ppc-opc.c:812
msgid "attempt to set y bit when using + or - modifier"
msgstr ""
-#: ppc-opc.c:858
-msgid "offset not a multiple of 16"
-msgstr ""
-
-#: ppc-opc.c:877
-msgid "offset not a multiple of 2"
-msgstr ""
-
-#: ppc-opc.c:879
-msgid "offset greater than 62"
-msgstr ""
-
-#: ppc-opc.c:898 ppc-opc.c:943 ppc-opc.c:987
-msgid "offset not a multiple of 4"
-msgstr ""
-
-#: ppc-opc.c:900
-msgid "offset greater than 124"
-msgstr ""
-
-#: ppc-opc.c:919
-msgid "offset not a multiple of 8"
-msgstr ""
-
-#: ppc-opc.c:921
-msgid "offset greater than 248"
-msgstr ""
-
-#: ppc-opc.c:964
-msgid "offset not between -2048 and 2047"
-msgstr ""
-
-#: ppc-opc.c:985
-msgid "offset not between -8192 and 8191"
-msgstr ""
-
-#: ppc-opc.c:1013
+#: ppc-opc.c:844
msgid "invalid mask field"
msgstr ""
-#: ppc-opc.c:1039
+#: ppc-opc.c:870
msgid "ignoring invalid mfcr mask"
msgstr ""
-#: ppc-opc.c:1081
-msgid "ignoring least significant bits in branch offset"
-msgstr ""
-
-#: ppc-opc.c:1111 ppc-opc.c:1146
+#: ppc-opc.c:920 ppc-opc.c:955
msgid "illegal bitmask"
msgstr ""
-#: ppc-opc.c:1211
-msgid "value out of range"
-msgstr ""
-
-#: ppc-opc.c:1279
+#: ppc-opc.c:1075
msgid "index register in load range"
msgstr ""
-#: ppc-opc.c:1295
+#: ppc-opc.c:1091
msgid "source and target register operands must be different"
msgstr ""
-#: ppc-opc.c:1310
+#: ppc-opc.c:1106
msgid "invalid register operand when updating"
msgstr ""
-#: ppc-opc.c:1349
-msgid "target register operand must be even"
-msgstr ""
-
-#: ppc-opc.c:1363
-msgid "source register operand must be even"
+#: ppc-opc.c:1188
+msgid "invalid sprg number"
msgstr ""
-#: ppc-opc.c:1420
-msgid "invalid sprg number"
+#: score-dis.c:220 score-dis.c:383
+msgid "<illegal instruction>"
msgstr ""
-#: sparc-dis.c:269
+#: sparc-dis.c:280
#, c-format
msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
msgstr ""
-#: sparc-dis.c:280
+#: sparc-dis.c:291
#, c-format
msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
msgstr ""
-#: sparc-dis.c:330
+#: sparc-dis.c:341
#, c-format
msgid "Internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n"
msgstr ""
#. Mark as non-valid instruction.
-#: sparc-dis.c:984
+#: sparc-dis.c:1011
msgid "unknown"
msgstr ""
@@ -944,6 +997,30 @@ msgstr ""
msgid "immediate value must be even"
msgstr ""
+#: xc16x-asm.c:65
+msgid "Missing '#' prefix"
+msgstr ""
+
+#: xc16x-asm.c:81
+msgid "Missing '.' prefix"
+msgstr ""
+
+#: xc16x-asm.c:97
+msgid "Missing 'pof:' prefix"
+msgstr ""
+
+#: xc16x-asm.c:113
+msgid "Missing 'pag:' prefix"
+msgstr ""
+
+#: xc16x-asm.c:129
+msgid "Missing 'sof:' prefix"
+msgstr ""
+
+#: xc16x-asm.c:145
+msgid "Missing 'seg:' prefix"
+msgstr ""
+
#: xstormy16-asm.c:70
msgid "Bad register in preincrement"
msgstr ""
diff --git a/opcodes/po/pt_BR.gmo b/opcodes/po/pt_BR.gmo
deleted file mode 100644
index 083e8f42199b..000000000000
--- a/opcodes/po/pt_BR.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/po/ro.gmo b/opcodes/po/ro.gmo
deleted file mode 100644
index 6125448e6239..000000000000
--- a/opcodes/po/ro.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/po/sv.gmo b/opcodes/po/sv.gmo
deleted file mode 100644
index 2347bdcdad12..000000000000
--- a/opcodes/po/sv.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/po/tr.gmo b/opcodes/po/tr.gmo
deleted file mode 100644
index 98b9df15351b..000000000000
--- a/opcodes/po/tr.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/po/vi.gmo b/opcodes/po/vi.gmo
deleted file mode 100644
index 1ab0155639ac..000000000000
--- a/opcodes/po/vi.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/po/zh_CN.gmo b/opcodes/po/zh_CN.gmo
deleted file mode 100644
index 333eed53c4e8..000000000000
--- a/opcodes/po/zh_CN.gmo
+++ /dev/null
Binary files differ
diff --git a/opcodes/ppc-dis.c b/opcodes/ppc-dis.c
index 35875d1ac33f..2545a36f21a5 100644
--- a/opcodes/ppc-dis.c
+++ b/opcodes/ppc-dis.c
@@ -1,5 +1,5 @@
/* ppc-dis.c -- Disassemble PowerPC instructions
- Copyright 1994, 1995, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1994, 1995, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support
@@ -61,6 +61,10 @@ powerpc_dialect (struct disassemble_info *info)
else if (info->disassembler_options
&& strstr (info->disassembler_options, "e300") != NULL)
dialect |= PPC_OPCODE_E300 | PPC_OPCODE_CLASSIC | PPC_OPCODE_COMMON;
+ else if (info->disassembler_options
+ && strstr (info->disassembler_options, "440") != NULL)
+ dialect |= PPC_OPCODE_BOOKE | PPC_OPCODE_32
+ | PPC_OPCODE_440 | PPC_OPCODE_ISEL | PPC_OPCODE_RFMCI;
else
dialect |= (PPC_OPCODE_403 | PPC_OPCODE_601 | PPC_OPCODE_CLASSIC
| PPC_OPCODE_COMMON | PPC_OPCODE_ALTIVEC);
@@ -74,6 +78,14 @@ powerpc_dialect (struct disassemble_info *info)
dialect |= PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5;
if (info->disassembler_options
+ && strstr (info->disassembler_options, "cell") != NULL)
+ dialect |= PPC_OPCODE_POWER4 | PPC_OPCODE_CELL | PPC_OPCODE_ALTIVEC;
+
+ if (info->disassembler_options
+ && strstr (info->disassembler_options, "power6") != NULL)
+ dialect |= PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6 | PPC_OPCODE_ALTIVEC;
+
+ if (info->disassembler_options
&& strstr (info->disassembler_options, "any") != NULL)
dialect |= PPC_OPCODE_ANY;
@@ -115,6 +127,56 @@ print_insn_rs6000 (bfd_vma memaddr, struct disassemble_info *info)
return print_insn_powerpc (memaddr, info, 1, PPC_OPCODE_POWER);
}
+/* Extract the operand value from the PowerPC or POWER instruction. */
+
+static long
+operand_value_powerpc (const struct powerpc_operand *operand,
+ unsigned long insn, int dialect)
+{
+ long value;
+ int invalid;
+ /* Extract the value from the instruction. */
+ if (operand->extract)
+ value = (*operand->extract) (insn, dialect, &invalid);
+ else
+ {
+ value = (insn >> operand->shift) & operand->bitm;
+ if ((operand->flags & PPC_OPERAND_SIGNED) != 0)
+ {
+ /* BITM is always some number of zeros followed by some
+ number of ones, followed by some numer of zeros. */
+ unsigned long top = operand->bitm;
+ /* top & -top gives the rightmost 1 bit, so this
+ fills in any trailing zeros. */
+ top |= (top & -top) - 1;
+ top &= ~(top >> 1);
+ value = (value ^ top) - top;
+ }
+ }
+
+ return value;
+}
+
+/* Determine whether the optional operand(s) should be printed. */
+
+static int
+skip_optional_operands (const unsigned char *opindex,
+ unsigned long insn, int dialect)
+{
+ const struct powerpc_operand *operand;
+
+ for (; *opindex != 0; opindex++)
+ {
+ operand = &powerpc_operands[*opindex];
+ if ((operand->flags & PPC_OPERAND_NEXT) != 0
+ || ((operand->flags & PPC_OPERAND_OPTIONAL) != 0
+ && operand_value_powerpc (operand, insn, dialect) != 0))
+ return 0;
+ }
+
+ return 1;
+}
+
/* Print a PowerPC or POWER instruction. */
static int
@@ -160,6 +222,7 @@ print_insn_powerpc (bfd_vma memaddr,
int invalid;
int need_comma;
int need_paren;
+ int skip_optional;
table_op = PPC_OP (opcode->opcode);
if (op < table_op)
@@ -193,6 +256,7 @@ print_insn_powerpc (bfd_vma memaddr,
/* Now extract and print the operands. */
need_comma = 0;
need_paren = 0;
+ skip_optional = -1;
for (opindex = opcode->operands; *opindex != 0; opindex++)
{
long value;
@@ -205,23 +269,18 @@ print_insn_powerpc (bfd_vma memaddr,
if ((operand->flags & PPC_OPERAND_FAKE) != 0)
continue;
- /* Extract the value from the instruction. */
- if (operand->extract)
- value = (*operand->extract) (insn, dialect, &invalid);
- else
+ /* If all of the optional operands have the value zero,
+ then don't print any of them. */
+ if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0)
{
- value = (insn >> operand->shift) & ((1 << operand->bits) - 1);
- if ((operand->flags & PPC_OPERAND_SIGNED) != 0
- && (value & (1 << (operand->bits - 1))) != 0)
- value -= 1 << operand->bits;
+ if (skip_optional < 0)
+ skip_optional = skip_optional_operands (opindex, insn,
+ dialect);
+ if (skip_optional)
+ continue;
}
- /* If the operand is optional, and the value is zero, don't
- print anything. */
- if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0
- && (operand->flags & PPC_OPERAND_NEXT) == 0
- && value == 0)
- continue;
+ value = operand_value_powerpc (operand, insn, dialect);
if (need_comma)
{
@@ -246,7 +305,7 @@ print_insn_powerpc (bfd_vma memaddr,
(*info->fprintf_func) (info->stream, "%ld", value);
else
{
- if (operand->bits == 3)
+ if (operand->bitm == 7)
(*info->fprintf_func) (info->stream, "cr%ld", value);
else
{
@@ -303,9 +362,11 @@ the -M switch:\n");
fprintf (stream, " booke|booke32|booke64 Disassemble the BookE instructions\n");
fprintf (stream, " e300 Disassemble the e300 instructions\n");
fprintf (stream, " e500|e500x2 Disassemble the e500 instructions\n");
+ fprintf (stream, " 440 Disassemble the 440 instructions\n");
fprintf (stream, " efs Disassemble the EFS instructions\n");
fprintf (stream, " power4 Disassemble the Power4 instructions\n");
fprintf (stream, " power5 Disassemble the Power5 instructions\n");
+ fprintf (stream, " power6 Disassemble the Power6 instructions\n");
fprintf (stream, " 32 Do not disassemble 64-bit instructions\n");
fprintf (stream, " 64 Allow disassembly of 64-bit instructions\n");
}
diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
index 84e6d6a04e9d..5995f81de9ff 100644
--- a/opcodes/ppc-opc.c
+++ b/opcodes/ppc-opc.c
@@ -1,6 +1,6 @@
/* ppc-opc.c -- PowerPC opcode list
Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004,
- 2005 Free Software Foundation, Inc.
+ 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support
This file is part of GDB, GAS, and the GNU binutils.
@@ -42,8 +42,6 @@ static unsigned long insert_bat (unsigned long, long, int, const char **);
static long extract_bat (unsigned long, int, int *);
static unsigned long insert_bba (unsigned long, long, int, const char **);
static long extract_bba (unsigned long, int, int *);
-static unsigned long insert_bd (unsigned long, long, int, const char **);
-static long extract_bd (unsigned long, int, int *);
static unsigned long insert_bdm (unsigned long, long, int, const char **);
static long extract_bdm (unsigned long, int, int *);
static unsigned long insert_bdp (unsigned long, long, int, const char **);
@@ -52,23 +50,12 @@ static unsigned long insert_bo (unsigned long, long, int, const char **);
static long extract_bo (unsigned long, int, int *);
static unsigned long insert_boe (unsigned long, long, int, const char **);
static long extract_boe (unsigned long, int, int *);
-static unsigned long insert_dq (unsigned long, long, int, const char **);
-static long extract_dq (unsigned long, int, int *);
-static unsigned long insert_ds (unsigned long, long, int, const char **);
-static long extract_ds (unsigned long, int, int *);
-static unsigned long insert_de (unsigned long, long, int, const char **);
-static long extract_de (unsigned long, int, int *);
-static unsigned long insert_des (unsigned long, long, int, const char **);
-static long extract_des (unsigned long, int, int *);
static unsigned long insert_fxm (unsigned long, long, int, const char **);
static long extract_fxm (unsigned long, int, int *);
-static unsigned long insert_li (unsigned long, long, int, const char **);
-static long extract_li (unsigned long, int, int *);
static unsigned long insert_mbe (unsigned long, long, int, const char **);
static long extract_mbe (unsigned long, int, int *);
static unsigned long insert_mb6 (unsigned long, long, int, const char **);
static long extract_mb6 (unsigned long, int, int *);
-static unsigned long insert_nb (unsigned long, long, int, const char **);
static long extract_nb (unsigned long, int, int *);
static unsigned long insert_nsi (unsigned long, long, int, const char **);
static long extract_nsi (unsigned long, int, int *);
@@ -78,8 +65,6 @@ static unsigned long insert_raq (unsigned long, long, int, const char **);
static unsigned long insert_ras (unsigned long, long, int, const char **);
static unsigned long insert_rbs (unsigned long, long, int, const char **);
static long extract_rbs (unsigned long, int, int *);
-static unsigned long insert_rsq (unsigned long, long, int, const char **);
-static unsigned long insert_rtq (unsigned long, long, int, const char **);
static unsigned long insert_sh6 (unsigned long, long, int, const char **);
static long extract_sh6 (unsigned long, int, int *);
static unsigned long insert_spr (unsigned long, long, int, const char **);
@@ -88,16 +73,10 @@ static unsigned long insert_sprg (unsigned long, long, int, const char **);
static long extract_sprg (unsigned long, int, int *);
static unsigned long insert_tbr (unsigned long, long, int, const char **);
static long extract_tbr (unsigned long, int, int *);
-static unsigned long insert_ev2 (unsigned long, long, int, const char **);
-static long extract_ev2 (unsigned long, int, int *);
-static unsigned long insert_ev4 (unsigned long, long, int, const char **);
-static long extract_ev4 (unsigned long, int, int *);
-static unsigned long insert_ev8 (unsigned long, long, int, const char **);
-static long extract_ev8 (unsigned long, int, int *);
/* The operands table.
- The fields are bits, shift, insert, extract, flags.
+ The fields are bitm, shift, insert, extract, flags.
We used to put parens around the various additions, like the one
for BA just below. However, that caused trouble with feeble
@@ -115,302 +94,298 @@ const struct powerpc_operand powerpc_operands[] =
/* The BA field in an XL form instruction. */
#define BA UNUSED + 1
-#define BA_MASK (0x1f << 16)
- { 5, 16, NULL, NULL, PPC_OPERAND_CR },
+ /* The BI field in a B form or XL form instruction. */
+#define BI BA
+#define BI_MASK (0x1f << 16)
+ { 0x1f, 16, NULL, NULL, PPC_OPERAND_CR },
/* The BA field in an XL form instruction when it must be the same
as the BT field in the same instruction. */
#define BAT BA + 1
- { 5, 16, insert_bat, extract_bat, PPC_OPERAND_FAKE },
+ { 0x1f, 16, insert_bat, extract_bat, PPC_OPERAND_FAKE },
/* The BB field in an XL form instruction. */
#define BB BAT + 1
#define BB_MASK (0x1f << 11)
- { 5, 11, NULL, NULL, PPC_OPERAND_CR },
+ { 0x1f, 11, NULL, NULL, PPC_OPERAND_CR },
/* The BB field in an XL form instruction when it must be the same
as the BA field in the same instruction. */
#define BBA BB + 1
- { 5, 11, insert_bba, extract_bba, PPC_OPERAND_FAKE },
+ { 0x1f, 11, insert_bba, extract_bba, PPC_OPERAND_FAKE },
/* The BD field in a B form instruction. The lower two bits are
forced to zero. */
#define BD BBA + 1
- { 16, 0, insert_bd, extract_bd, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
+ { 0xfffc, 0, NULL, NULL, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
/* The BD field in a B form instruction when absolute addressing is
used. */
#define BDA BD + 1
- { 16, 0, insert_bd, extract_bd, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
+ { 0xfffc, 0, NULL, NULL, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
/* The BD field in a B form instruction when the - modifier is used.
This sets the y bit of the BO field appropriately. */
#define BDM BDA + 1
- { 16, 0, insert_bdm, extract_bdm,
+ { 0xfffc, 0, insert_bdm, extract_bdm,
PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
/* The BD field in a B form instruction when the - modifier is used
and absolute address is used. */
#define BDMA BDM + 1
- { 16, 0, insert_bdm, extract_bdm,
+ { 0xfffc, 0, insert_bdm, extract_bdm,
PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
/* The BD field in a B form instruction when the + modifier is used.
This sets the y bit of the BO field appropriately. */
#define BDP BDMA + 1
- { 16, 0, insert_bdp, extract_bdp,
+ { 0xfffc, 0, insert_bdp, extract_bdp,
PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
/* The BD field in a B form instruction when the + modifier is used
and absolute addressing is used. */
#define BDPA BDP + 1
- { 16, 0, insert_bdp, extract_bdp,
+ { 0xfffc, 0, insert_bdp, extract_bdp,
PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
/* The BF field in an X or XL form instruction. */
#define BF BDPA + 1
- { 3, 23, NULL, NULL, PPC_OPERAND_CR },
+ /* The CRFD field in an X form instruction. */
+#define CRFD BF
+ { 0x7, 23, NULL, NULL, PPC_OPERAND_CR },
+
+ /* The BF field in an X or XL form instruction. */
+#define BFF BF + 1
+ { 0x7, 23, NULL, NULL, 0 },
/* An optional BF field. This is used for comparison instructions,
in which an omitted BF field is taken as zero. */
-#define OBF BF + 1
- { 3, 23, NULL, NULL, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
+#define OBF BFF + 1
+ { 0x7, 23, NULL, NULL, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
/* The BFA field in an X or XL form instruction. */
#define BFA OBF + 1
- { 3, 18, NULL, NULL, PPC_OPERAND_CR },
-
- /* The BI field in a B form or XL form instruction. */
-#define BI BFA + 1
-#define BI_MASK (0x1f << 16)
- { 5, 16, NULL, NULL, PPC_OPERAND_CR },
+ { 0x7, 18, NULL, NULL, PPC_OPERAND_CR },
/* The BO field in a B form instruction. Certain values are
illegal. */
-#define BO BI + 1
+#define BO BFA + 1
#define BO_MASK (0x1f << 21)
- { 5, 21, insert_bo, extract_bo, 0 },
+ { 0x1f, 21, insert_bo, extract_bo, 0 },
/* The BO field in a B form instruction when the + or - modifier is
used. This is like the BO field, but it must be even. */
#define BOE BO + 1
- { 5, 21, insert_boe, extract_boe, 0 },
+ { 0x1e, 21, insert_boe, extract_boe, 0 },
#define BH BOE + 1
- { 2, 11, NULL, NULL, PPC_OPERAND_OPTIONAL },
+ { 0x3, 11, NULL, NULL, PPC_OPERAND_OPTIONAL },
/* The BT field in an X or XL form instruction. */
#define BT BH + 1
- { 5, 21, NULL, NULL, PPC_OPERAND_CR },
+ { 0x1f, 21, NULL, NULL, PPC_OPERAND_CR },
/* The condition register number portion of the BI field in a B form
or XL form instruction. This is used for the extended
conditional branch mnemonics, which set the lower two bits of the
BI field. This field is optional. */
#define CR BT + 1
- { 3, 18, NULL, NULL, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
+ { 0x7, 18, NULL, NULL, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
/* The CRB field in an X form instruction. */
#define CRB CR + 1
- { 5, 6, NULL, NULL, 0 },
-
- /* The CRFD field in an X form instruction. */
-#define CRFD CRB + 1
- { 3, 23, NULL, NULL, PPC_OPERAND_CR },
+ /* The MB field in an M form instruction. */
+#define MB CRB
+#define MB_MASK (0x1f << 6)
+ { 0x1f, 6, NULL, NULL, 0 },
/* The CRFS field in an X form instruction. */
-#define CRFS CRFD + 1
- { 3, 0, NULL, NULL, PPC_OPERAND_CR },
+#define CRFS CRB + 1
+ { 0x7, 0, NULL, NULL, PPC_OPERAND_CR },
/* The CT field in an X form instruction. */
#define CT CRFS + 1
- { 5, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
+ /* The MO field in an mbar instruction. */
+#define MO CT
+ { 0x1f, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
/* The D field in a D form instruction. This is a displacement off
a register, and implies that the next operand is a register in
parentheses. */
#define D CT + 1
- { 16, 0, NULL, NULL, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
+ { 0xffff, 0, NULL, NULL, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
/* The DE field in a DE form instruction. This is like D, but is 12
bits only. */
#define DE D + 1
- { 14, 0, insert_de, extract_de, PPC_OPERAND_PARENS },
+ { 0xfff, 4, NULL, NULL, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
/* The DES field in a DES form instruction. This is like DS, but is 14
bits only (12 stored.) */
#define DES DE + 1
- { 14, 0, insert_des, extract_des, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
+ { 0x3ffc, 2, NULL, NULL, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
/* The DQ field in a DQ form instruction. This is like D, but the
lower four bits are forced to zero. */
#define DQ DES + 1
- { 16, 0, insert_dq, extract_dq,
- PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DQ },
+ { 0xfff0, 0, NULL, NULL,
+ PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DQ },
/* The DS field in a DS form instruction. This is like D, but the
lower two bits are forced to zero. */
#define DS DQ + 1
- { 16, 0, insert_ds, extract_ds,
- PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DS },
+ { 0xfffc, 0, NULL, NULL,
+ PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DS },
/* The E field in a wrteei instruction. */
#define E DS + 1
- { 1, 15, NULL, NULL, 0 },
+ { 0x1, 15, NULL, NULL, 0 },
/* The FL1 field in a POWER SC form instruction. */
#define FL1 E + 1
- { 4, 12, NULL, NULL, 0 },
+ /* The U field in an X form instruction. */
+#define U FL1
+ { 0xf, 12, NULL, NULL, 0 },
/* The FL2 field in a POWER SC form instruction. */
#define FL2 FL1 + 1
- { 3, 2, NULL, NULL, 0 },
+ { 0x7, 2, NULL, NULL, 0 },
/* The FLM field in an XFL form instruction. */
#define FLM FL2 + 1
- { 8, 17, NULL, NULL, 0 },
+ { 0xff, 17, NULL, NULL, 0 },
/* The FRA field in an X or A form instruction. */
#define FRA FLM + 1
#define FRA_MASK (0x1f << 16)
- { 5, 16, NULL, NULL, PPC_OPERAND_FPR },
+ { 0x1f, 16, NULL, NULL, PPC_OPERAND_FPR },
/* The FRB field in an X or A form instruction. */
#define FRB FRA + 1
#define FRB_MASK (0x1f << 11)
- { 5, 11, NULL, NULL, PPC_OPERAND_FPR },
+ { 0x1f, 11, NULL, NULL, PPC_OPERAND_FPR },
/* The FRC field in an A form instruction. */
#define FRC FRB + 1
#define FRC_MASK (0x1f << 6)
- { 5, 6, NULL, NULL, PPC_OPERAND_FPR },
+ { 0x1f, 6, NULL, NULL, PPC_OPERAND_FPR },
/* The FRS field in an X form instruction or the FRT field in a D, X
or A form instruction. */
#define FRS FRC + 1
#define FRT FRS
- { 5, 21, NULL, NULL, PPC_OPERAND_FPR },
+ { 0x1f, 21, NULL, NULL, PPC_OPERAND_FPR },
/* The FXM field in an XFX instruction. */
#define FXM FRS + 1
-#define FXM_MASK (0xff << 12)
- { 8, 12, insert_fxm, extract_fxm, 0 },
+ { 0xff, 12, insert_fxm, extract_fxm, 0 },
/* Power4 version for mfcr. */
#define FXM4 FXM + 1
- { 8, 12, insert_fxm, extract_fxm, PPC_OPERAND_OPTIONAL },
+ { 0xff, 12, insert_fxm, extract_fxm, PPC_OPERAND_OPTIONAL },
/* The L field in a D or X form instruction. */
#define L FXM4 + 1
- { 1, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
+ { 0x1, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
/* The LEV field in a POWER SVC form instruction. */
#define SVC_LEV L + 1
- { 7, 5, NULL, NULL, 0 },
+ { 0x7f, 5, NULL, NULL, 0 },
/* The LEV field in an SC form instruction. */
#define LEV SVC_LEV + 1
- { 7, 5, NULL, NULL, PPC_OPERAND_OPTIONAL },
+ { 0x7f, 5, NULL, NULL, PPC_OPERAND_OPTIONAL },
/* The LI field in an I form instruction. The lower two bits are
forced to zero. */
#define LI LEV + 1
- { 26, 0, insert_li, extract_li, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
+ { 0x3fffffc, 0, NULL, NULL, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
/* The LI field in an I form instruction when used as an absolute
address. */
#define LIA LI + 1
- { 26, 0, insert_li, extract_li, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
+ { 0x3fffffc, 0, NULL, NULL, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
/* The LS field in an X (sync) form instruction. */
#define LS LIA + 1
- { 2, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
-
- /* The MB field in an M form instruction. */
-#define MB LS + 1
-#define MB_MASK (0x1f << 6)
- { 5, 6, NULL, NULL, 0 },
+ { 0x3, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
/* The ME field in an M form instruction. */
-#define ME MB + 1
+#define ME LS + 1
#define ME_MASK (0x1f << 1)
- { 5, 1, NULL, NULL, 0 },
+ { 0x1f, 1, NULL, NULL, 0 },
/* The MB and ME fields in an M form instruction expressed a single
operand which is a bitmask indicating which bits to select. This
is a two operand form using PPC_OPERAND_NEXT. See the
description in opcode/ppc.h for what this means. */
#define MBE ME + 1
- { 5, 6, NULL, NULL, PPC_OPERAND_OPTIONAL | PPC_OPERAND_NEXT },
- { 32, 0, insert_mbe, extract_mbe, 0 },
+ { 0x1f, 6, NULL, NULL, PPC_OPERAND_OPTIONAL | PPC_OPERAND_NEXT },
+ { -1, 0, insert_mbe, extract_mbe, 0 },
/* The MB or ME field in an MD or MDS form instruction. The high
bit is wrapped to the low end. */
#define MB6 MBE + 2
#define ME6 MB6
#define MB6_MASK (0x3f << 5)
- { 6, 5, insert_mb6, extract_mb6, 0 },
-
- /* The MO field in an mbar instruction. */
-#define MO MB6 + 1
- { 5, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
+ { 0x3f, 5, insert_mb6, extract_mb6, 0 },
/* The NB field in an X form instruction. The value 32 is stored as
0. */
-#define NB MO + 1
- { 6, 11, insert_nb, extract_nb, 0 },
+#define NB MB6 + 1
+ { 0x1f, 11, NULL, extract_nb, PPC_OPERAND_PLUS1 },
/* The NSI field in a D form instruction. This is the same as the
SI field, only negated. */
#define NSI NB + 1
- { 16, 0, insert_nsi, extract_nsi,
+ { 0xffff, 0, insert_nsi, extract_nsi,
PPC_OPERAND_NEGATIVE | PPC_OPERAND_SIGNED },
/* The RA field in an D, DS, DQ, X, XO, M, or MDS form instruction. */
#define RA NSI + 1
#define RA_MASK (0x1f << 16)
- { 5, 16, NULL, NULL, PPC_OPERAND_GPR },
+ { 0x1f, 16, NULL, NULL, PPC_OPERAND_GPR },
/* As above, but 0 in the RA field means zero, not r0. */
#define RA0 RA + 1
- { 5, 16, NULL, NULL, PPC_OPERAND_GPR_0 },
+ { 0x1f, 16, NULL, NULL, PPC_OPERAND_GPR_0 },
/* The RA field in the DQ form lq instruction, which has special
value restrictions. */
#define RAQ RA0 + 1
- { 5, 16, insert_raq, NULL, PPC_OPERAND_GPR_0 },
+ { 0x1f, 16, insert_raq, NULL, PPC_OPERAND_GPR_0 },
/* The RA field in a D or X form instruction which is an updating
load, which means that the RA field may not be zero and may not
equal the RT field. */
#define RAL RAQ + 1
- { 5, 16, insert_ral, NULL, PPC_OPERAND_GPR_0 },
+ { 0x1f, 16, insert_ral, NULL, PPC_OPERAND_GPR_0 },
/* The RA field in an lmw instruction, which has special value
restrictions. */
#define RAM RAL + 1
- { 5, 16, insert_ram, NULL, PPC_OPERAND_GPR_0 },
+ { 0x1f, 16, insert_ram, NULL, PPC_OPERAND_GPR_0 },
/* The RA field in a D or X form instruction which is an updating
store or an updating floating point load, which means that the RA
field may not be zero. */
#define RAS RAM + 1
- { 5, 16, insert_ras, NULL, PPC_OPERAND_GPR_0 },
+ { 0x1f, 16, insert_ras, NULL, PPC_OPERAND_GPR_0 },
/* The RA field of the tlbwe instruction, which is optional. */
#define RAOPT RAS + 1
- { 5, 16, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL },
+ { 0x1f, 16, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL },
/* The RB field in an X, XO, M, or MDS form instruction. */
#define RB RAOPT + 1
#define RB_MASK (0x1f << 11)
- { 5, 11, NULL, NULL, PPC_OPERAND_GPR },
+ { 0x1f, 11, NULL, NULL, PPC_OPERAND_GPR },
/* The RB field in an X form instruction when it must be the same as
the RS field in the instruction. This is used for extended
mnemonics like mr. */
#define RBS RB + 1
- { 5, 1, insert_rbs, extract_rbs, PPC_OPERAND_FAKE },
+ { 0x1f, 11, insert_rbs, extract_rbs, PPC_OPERAND_FAKE },
/* The RS field in a D, DS, X, XFX, XS, M, MD or MDS form
instruction or the RT field in a D, DS, X, XFX or XO form
@@ -418,153 +393,168 @@ const struct powerpc_operand powerpc_operands[] =
#define RS RBS + 1
#define RT RS
#define RT_MASK (0x1f << 21)
- { 5, 21, NULL, NULL, PPC_OPERAND_GPR },
+ { 0x1f, 21, NULL, NULL, PPC_OPERAND_GPR },
- /* The RS field of the DS form stq instruction, which has special
- value restrictions. */
+ /* The RS and RT fields of the DS form stq instruction, which have
+ special value restrictions. */
#define RSQ RS + 1
- { 5, 21, insert_rsq, NULL, PPC_OPERAND_GPR_0 },
-
- /* The RT field of the DQ form lq instruction, which has special
- value restrictions. */
-#define RTQ RSQ + 1
- { 5, 21, insert_rtq, NULL, PPC_OPERAND_GPR_0 },
+#define RTQ RSQ
+ { 0x1e, 21, NULL, NULL, PPC_OPERAND_GPR_0 },
/* The RS field of the tlbwe instruction, which is optional. */
-#define RSO RTQ + 1
+#define RSO RSQ + 1
#define RTO RSO
- { 5, 21, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL },
+ { 0x1f, 21, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL },
/* The SH field in an X or M form instruction. */
#define SH RSO + 1
#define SH_MASK (0x1f << 11)
- { 5, 11, NULL, NULL, 0 },
+ /* The other UIMM field in a EVX form instruction. */
+#define EVUIMM SH
+ { 0x1f, 11, NULL, NULL, 0 },
/* The SH field in an MD form instruction. This is split. */
#define SH6 SH + 1
#define SH6_MASK ((0x1f << 11) | (1 << 1))
- { 6, 1, insert_sh6, extract_sh6, 0 },
+ { 0x3f, -1, insert_sh6, extract_sh6, 0 },
/* The SH field of the tlbwe instruction, which is optional. */
#define SHO SH6 + 1
- { 5, 11,NULL, NULL, PPC_OPERAND_OPTIONAL },
+ { 0x1f, 11, NULL, NULL, PPC_OPERAND_OPTIONAL },
/* The SI field in a D form instruction. */
#define SI SHO + 1
- { 16, 0, NULL, NULL, PPC_OPERAND_SIGNED },
+ { 0xffff, 0, NULL, NULL, PPC_OPERAND_SIGNED },
/* The SI field in a D form instruction when we accept a wide range
of positive values. */
#define SISIGNOPT SI + 1
- { 16, 0, NULL, NULL, PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT },
+ { 0xffff, 0, NULL, NULL, PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT },
/* The SPR field in an XFX form instruction. This is flipped--the
lower 5 bits are stored in the upper 5 and vice- versa. */
#define SPR SISIGNOPT + 1
#define PMR SPR
#define SPR_MASK (0x3ff << 11)
- { 10, 11, insert_spr, extract_spr, 0 },
+ { 0x3ff, 11, insert_spr, extract_spr, 0 },
/* The BAT index number in an XFX form m[ft]ibat[lu] instruction. */
#define SPRBAT SPR + 1
#define SPRBAT_MASK (0x3 << 17)
- { 2, 17, NULL, NULL, 0 },
+ { 0x3, 17, NULL, NULL, 0 },
/* The SPRG register number in an XFX form m[ft]sprg instruction. */
#define SPRG SPRBAT + 1
- { 5, 16, insert_sprg, extract_sprg, 0 },
+ { 0x1f, 16, insert_sprg, extract_sprg, 0 },
/* The SR field in an X form instruction. */
#define SR SPRG + 1
- { 4, 16, NULL, NULL, 0 },
+ { 0xf, 16, NULL, NULL, 0 },
/* The STRM field in an X AltiVec form instruction. */
#define STRM SR + 1
-#define STRM_MASK (0x3 << 21)
- { 2, 21, NULL, NULL, 0 },
+ { 0x3, 21, NULL, NULL, 0 },
/* The SV field in a POWER SC form instruction. */
#define SV STRM + 1
- { 14, 2, NULL, NULL, 0 },
+ { 0x3fff, 2, NULL, NULL, 0 },
/* The TBR field in an XFX form instruction. This is like the SPR
field, but it is optional. */
#define TBR SV + 1
- { 10, 11, insert_tbr, extract_tbr, PPC_OPERAND_OPTIONAL },
+ { 0x3ff, 11, insert_tbr, extract_tbr, PPC_OPERAND_OPTIONAL },
/* The TO field in a D or X form instruction. */
#define TO TBR + 1
#define TO_MASK (0x1f << 21)
- { 5, 21, NULL, NULL, 0 },
-
- /* The U field in an X form instruction. */
-#define U TO + 1
- { 4, 12, NULL, NULL, 0 },
+ { 0x1f, 21, NULL, NULL, 0 },
/* The UI field in a D form instruction. */
-#define UI U + 1
- { 16, 0, NULL, NULL, 0 },
+#define UI TO + 1
+ { 0xffff, 0, NULL, NULL, 0 },
/* The VA field in a VA, VX or VXR form instruction. */
#define VA UI + 1
-#define VA_MASK (0x1f << 16)
- { 5, 16, NULL, NULL, PPC_OPERAND_VR },
+ { 0x1f, 16, NULL, NULL, PPC_OPERAND_VR },
/* The VB field in a VA, VX or VXR form instruction. */
#define VB VA + 1
-#define VB_MASK (0x1f << 11)
- { 5, 11, NULL, NULL, PPC_OPERAND_VR },
+ { 0x1f, 11, NULL, NULL, PPC_OPERAND_VR },
/* The VC field in a VA form instruction. */
#define VC VB + 1
-#define VC_MASK (0x1f << 6)
- { 5, 6, NULL, NULL, PPC_OPERAND_VR },
+ { 0x1f, 6, NULL, NULL, PPC_OPERAND_VR },
/* The VD or VS field in a VA, VX, VXR or X form instruction. */
#define VD VC + 1
#define VS VD
-#define VD_MASK (0x1f << 21)
- { 5, 21, NULL, NULL, PPC_OPERAND_VR },
+ { 0x1f, 21, NULL, NULL, PPC_OPERAND_VR },
/* The SIMM field in a VX form instruction. */
#define SIMM VD + 1
- { 5, 16, NULL, NULL, PPC_OPERAND_SIGNED},
+ { 0x1f, 16, NULL, NULL, PPC_OPERAND_SIGNED},
- /* The UIMM field in a VX form instruction. */
+ /* The UIMM field in a VX form instruction, and TE in Z form. */
#define UIMM SIMM + 1
- { 5, 16, NULL, NULL, 0 },
+#define TE UIMM
+ { 0x1f, 16, NULL, NULL, 0 },
/* The SHB field in a VA form instruction. */
#define SHB UIMM + 1
- { 4, 6, NULL, NULL, 0 },
-
- /* The other UIMM field in a EVX form instruction. */
-#define EVUIMM SHB + 1
- { 5, 11, NULL, NULL, 0 },
+ { 0xf, 6, NULL, NULL, 0 },
/* The other UIMM field in a half word EVX form instruction. */
-#define EVUIMM_2 EVUIMM + 1
- { 32, 11, insert_ev2, extract_ev2, PPC_OPERAND_PARENS },
+#define EVUIMM_2 SHB + 1
+ { 0x3e, 10, NULL, NULL, PPC_OPERAND_PARENS },
/* The other UIMM field in a word EVX form instruction. */
#define EVUIMM_4 EVUIMM_2 + 1
- { 32, 11, insert_ev4, extract_ev4, PPC_OPERAND_PARENS },
+ { 0x7c, 9, NULL, NULL, PPC_OPERAND_PARENS },
/* The other UIMM field in a double EVX form instruction. */
#define EVUIMM_8 EVUIMM_4 + 1
- { 32, 11, insert_ev8, extract_ev8, PPC_OPERAND_PARENS },
+ { 0xf8, 8, NULL, NULL, PPC_OPERAND_PARENS },
/* The WS field. */
#define WS EVUIMM_8 + 1
-#define WS_MASK (0x7 << 11)
- { 3, 11, NULL, NULL, 0 },
+ { 0x7, 11, NULL, NULL, 0 },
+
+ /* The L field in an mtmsrd or A form instruction or W in an X form. */
+#define A_L WS + 1
+#define W A_L
+ { 0x1, 16, NULL, NULL, PPC_OPERAND_OPTIONAL },
+
+#define RMC A_L + 1
+ { 0x3, 9, NULL, NULL, 0 },
+
+#define R RMC + 1
+ { 0x1, 16, NULL, NULL, 0 },
- /* The L field in an mtmsrd instruction */
-#define MTMSRD_L WS + 1
- { 1, 16, NULL, NULL, PPC_OPERAND_OPTIONAL },
+#define SP R + 1
+ { 0x3, 19, NULL, NULL, 0 },
+#define S SP + 1
+ { 0x1, 20, NULL, NULL, 0 },
+
+ /* SH field starting at bit position 16. */
+#define SH16 S + 1
+ /* The DCM and DGM fields in a Z form instruction. */
+#define DCM SH16
+#define DGM DCM
+ { 0x3f, 10, NULL, NULL, 0 },
+
+ /* The EH field in larx instruction. */
+#define EH SH16 + 1
+ { 0x1, 0, NULL, NULL, PPC_OPERAND_OPTIONAL },
+
+ /* The L field in an mtfsf or XFL form instruction. */
+#define XFL_L EH + 1
+ { 0x1, 25, NULL, NULL, PPC_OPERAND_OPTIONAL},
};
+const unsigned int num_powerpc_operands = (sizeof (powerpc_operands)
+ / sizeof (powerpc_operands[0]));
+
/* The functions used to insert and extract complicated operands. */
/* The BA field in an XL form instruction when it must be the same as
@@ -617,26 +607,6 @@ extract_bba (unsigned long insn,
return 0;
}
-/* The BD field in a B form instruction. The lower two bits are
- forced to zero. */
-
-static unsigned long
-insert_bd (unsigned long insn,
- long value,
- int dialect ATTRIBUTE_UNUSED,
- const char **errmsg ATTRIBUTE_UNUSED)
-{
- return insn | (value & 0xfffc);
-}
-
-static long
-extract_bd (unsigned long insn,
- int dialect ATTRIBUTE_UNUSED,
- int *invalid ATTRIBUTE_UNUSED)
-{
- return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
-}
-
/* The BD field in a B form instruction when the - modifier is used.
This modifier means that the branch is not expected to be taken.
For chips built to versions of the architecture prior to version 2
@@ -648,7 +618,11 @@ extract_bd (unsigned long insn,
the "y" bit. "at" == 00 => no hint, "at" == 01 => unpredictable,
"at" == 10 => not taken, "at" == 11 => taken. The "t" bit is 00001
in BO field, the "a" bit is 00010 for branch on CR(BI) and 01000
- for branch on CTR. We only handle the taken/not-taken hint here. */
+ for branch on CTR. We only handle the taken/not-taken hint here.
+ Note that we don't relax the conditions tested here when
+ disassembling with -Many because insns using extract_bdm and
+ extract_bdp always occur in pairs. One or the other will always
+ be valid. */
static unsigned long
insert_bdm (unsigned long insn,
@@ -739,10 +713,11 @@ extract_bdp (unsigned long insn,
/* Check for legal values of a BO field. */
static int
-valid_bo (long value, int dialect)
+valid_bo (long value, int dialect, int extract)
{
if ((dialect & PPC_OPCODE_POWER4) == 0)
{
+ int valid;
/* Certain encodings have bits that are required to be zero.
These are (z must be zero, y may be anything):
001zy
@@ -755,36 +730,43 @@ valid_bo (long value, int dialect)
{
default:
case 0:
- return 1;
+ valid = 1;
+ break;
case 0x4:
- return (value & 0x2) == 0;
+ valid = (value & 0x2) == 0;
+ break;
case 0x10:
- return (value & 0x8) == 0;
+ valid = (value & 0x8) == 0;
+ break;
case 0x14:
- return value == 0x14;
+ valid = value == 0x14;
+ break;
}
+ /* When disassembling with -Many, accept power4 encodings too. */
+ if (valid
+ || (dialect & PPC_OPCODE_ANY) == 0
+ || !extract)
+ return valid;
}
+
+ /* Certain encodings have bits that are required to be zero.
+ These are (z must be zero, a & t may be anything):
+ 0000z
+ 0001z
+ 0100z
+ 0101z
+ 001at
+ 011at
+ 1a00t
+ 1a01t
+ 1z1zz
+ */
+ if ((value & 0x14) == 0)
+ return (value & 0x1) == 0;
+ else if ((value & 0x14) == 0x14)
+ return value == 0x14;
else
- {
- /* Certain encodings have bits that are required to be zero.
- These are (z must be zero, a & t may be anything):
- 0000z
- 0001z
- 0100z
- 0101z
- 001at
- 011at
- 1a00t
- 1a01t
- 1z1zz
- */
- if ((value & 0x14) == 0)
- return (value & 0x1) == 0;
- else if ((value & 0x14) == 0x14)
- return value == 0x14;
- else
- return 1;
- }
+ return 1;
}
/* The BO field in a B form instruction. Warn about attempts to set
@@ -796,7 +778,7 @@ insert_bo (unsigned long insn,
int dialect,
const char **errmsg)
{
- if (!valid_bo (value, dialect))
+ if (!valid_bo (value, dialect, 0))
*errmsg = _("invalid conditional option");
return insn | ((value & 0x1f) << 21);
}
@@ -809,7 +791,7 @@ extract_bo (unsigned long insn,
long value;
value = (insn >> 21) & 0x1f;
- if (!valid_bo (value, dialect))
+ if (!valid_bo (value, dialect, 1))
*invalid = 1;
return value;
}
@@ -824,7 +806,7 @@ insert_boe (unsigned long insn,
int dialect,
const char **errmsg)
{
- if (!valid_bo (value, dialect))
+ if (!valid_bo (value, dialect, 0))
*errmsg = _("invalid conditional option");
else if ((value & 1) != 0)
*errmsg = _("attempt to set y bit when using + or - modifier");
@@ -840,162 +822,11 @@ extract_boe (unsigned long insn,
long value;
value = (insn >> 21) & 0x1f;
- if (!valid_bo (value, dialect))
+ if (!valid_bo (value, dialect, 1))
*invalid = 1;
return value & 0x1e;
}
-/* The DQ field in a DQ form instruction. This is like D, but the
- lower four bits are forced to zero. */
-
-static unsigned long
-insert_dq (unsigned long insn,
- long value,
- int dialect ATTRIBUTE_UNUSED,
- const char **errmsg)
-{
- if ((value & 0xf) != 0)
- *errmsg = _("offset not a multiple of 16");
- return insn | (value & 0xfff0);
-}
-
-static long
-extract_dq (unsigned long insn,
- int dialect ATTRIBUTE_UNUSED,
- int *invalid ATTRIBUTE_UNUSED)
-{
- return ((insn & 0xfff0) ^ 0x8000) - 0x8000;
-}
-
-static unsigned long
-insert_ev2 (unsigned long insn,
- long value,
- int dialect ATTRIBUTE_UNUSED,
- const char **errmsg)
-{
- if ((value & 1) != 0)
- *errmsg = _("offset not a multiple of 2");
- if ((value > 62) != 0)
- *errmsg = _("offset greater than 62");
- return insn | ((value & 0x3e) << 10);
-}
-
-static long
-extract_ev2 (unsigned long insn,
- int dialect ATTRIBUTE_UNUSED,
- int *invalid ATTRIBUTE_UNUSED)
-{
- return (insn >> 10) & 0x3e;
-}
-
-static unsigned long
-insert_ev4 (unsigned long insn,
- long value,
- int dialect ATTRIBUTE_UNUSED,
- const char **errmsg)
-{
- if ((value & 3) != 0)
- *errmsg = _("offset not a multiple of 4");
- if ((value > 124) != 0)
- *errmsg = _("offset greater than 124");
- return insn | ((value & 0x7c) << 9);
-}
-
-static long
-extract_ev4 (unsigned long insn,
- int dialect ATTRIBUTE_UNUSED,
- int *invalid ATTRIBUTE_UNUSED)
-{
- return (insn >> 9) & 0x7c;
-}
-
-static unsigned long
-insert_ev8 (unsigned long insn,
- long value,
- int dialect ATTRIBUTE_UNUSED,
- const char **errmsg)
-{
- if ((value & 7) != 0)
- *errmsg = _("offset not a multiple of 8");
- if ((value > 248) != 0)
- *errmsg = _("offset greater than 248");
- return insn | ((value & 0xf8) << 8);
-}
-
-static long
-extract_ev8 (unsigned long insn,
- int dialect ATTRIBUTE_UNUSED,
- int *invalid ATTRIBUTE_UNUSED)
-{
- return (insn >> 8) & 0xf8;
-}
-
-/* The DS field in a DS form instruction. This is like D, but the
- lower two bits are forced to zero. */
-
-static unsigned long
-insert_ds (unsigned long insn,
- long value,
- int dialect ATTRIBUTE_UNUSED,
- const char **errmsg)
-{
- if ((value & 3) != 0)
- *errmsg = _("offset not a multiple of 4");
- return insn | (value & 0xfffc);
-}
-
-static long
-extract_ds (unsigned long insn,
- int dialect ATTRIBUTE_UNUSED,
- int *invalid ATTRIBUTE_UNUSED)
-{
- return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
-}
-
-/* The DE field in a DE form instruction. */
-
-static unsigned long
-insert_de (unsigned long insn,
- long value,
- int dialect ATTRIBUTE_UNUSED,
- const char **errmsg)
-{
- if (value > 2047 || value < -2048)
- *errmsg = _("offset not between -2048 and 2047");
- return insn | ((value << 4) & 0xfff0);
-}
-
-static long
-extract_de (unsigned long insn,
- int dialect ATTRIBUTE_UNUSED,
- int *invalid ATTRIBUTE_UNUSED)
-{
- return (insn & 0xfff0) >> 4;
-}
-
-/* The DES field in a DES form instruction. */
-
-static unsigned long
-insert_des (unsigned long insn,
- long value,
- int dialect ATTRIBUTE_UNUSED,
- const char **errmsg)
-{
- if (value > 8191 || value < -8192)
- *errmsg = _("offset not between -8192 and 8191");
- else if ((value & 3) != 0)
- *errmsg = _("offset not a multiple of 4");
- return insn | ((value << 2) & 0xfff0);
-}
-
-static long
-extract_des (unsigned long insn,
- int dialect ATTRIBUTE_UNUSED,
- int *invalid ATTRIBUTE_UNUSED)
-{
- return (((insn >> 2) & 0x3ffc) ^ 0x2000) - 0x2000;
-}
-
/* FXM mask in mfcr and mtcrf instructions. */
static unsigned long
@@ -1068,28 +899,6 @@ extract_fxm (unsigned long insn,
return mask;
}
-/* The LI field in an I form instruction. The lower two bits are
- forced to zero. */
-
-static unsigned long
-insert_li (unsigned long insn,
- long value,
- int dialect ATTRIBUTE_UNUSED,
- const char **errmsg)
-{
- if ((value & 3) != 0)
- *errmsg = _("ignoring least significant bits in branch offset");
- return insn | (value & 0x3fffffc);
-}
-
-static long
-extract_li (unsigned long insn,
- int dialect ATTRIBUTE_UNUSED,
- int *invalid ATTRIBUTE_UNUSED)
-{
- return ((insn & 0x3fffffc) ^ 0x2000000) - 0x2000000;
-}
-
/* The MB and ME fields in an M form instruction expressed as a single
operand which is itself a bitmask. The extraction function always
marks it as invalid, since we never want to recognize an
@@ -1201,19 +1010,6 @@ extract_mb6 (unsigned long insn,
/* The NB field in an X form instruction. The value 32 is stored as
0. */
-static unsigned long
-insert_nb (unsigned long insn,
- long value,
- int dialect ATTRIBUTE_UNUSED,
- const char **errmsg)
-{
- if (value < 0 || value > 32)
- *errmsg = _("value out of range");
- if (value == 32)
- value = 0;
- return insn | ((value & 0x1f) << 11);
-}
-
static long
extract_nb (unsigned long insn,
int dialect ATTRIBUTE_UNUSED,
@@ -1336,34 +1132,6 @@ extract_rbs (unsigned long insn,
return 0;
}
-/* The RT field of the DQ form lq instruction, which has special
- value restrictions. */
-
-static unsigned long
-insert_rtq (unsigned long insn,
- long value,
- int dialect ATTRIBUTE_UNUSED,
- const char **errmsg)
-{
- if ((value & 1) != 0)
- *errmsg = _("target register operand must be even");
- return insn | ((value & 0x1f) << 21);
-}
-
-/* The RS field of the DS form stq instruction, which has special
- value restrictions. */
-
-static unsigned long
-insert_rsq (unsigned long insn,
- long value ATTRIBUTE_UNUSED,
- int dialect ATTRIBUTE_UNUSED,
- const char **errmsg)
-{
- if ((value & 1) != 0)
- *errmsg = _("source register operand must be even");
- return insn | ((value & 0x1f) << 21);
-}
-
/* The SH field in an MD form instruction. This is split. */
static unsigned long
@@ -1509,6 +1277,9 @@ extract_tbr (unsigned long insn,
/* An A_MASK with the FRA and FRC fields fixed. */
#define AFRAFRC_MASK (A_MASK | FRA_MASK | FRC_MASK)
+/* An AFRAFRC_MASK, but with L bit clear. */
+#define AFRALFRC_MASK (AFRAFRC_MASK & ~((unsigned long) 1 << 16))
+
/* A B form instruction. */
#define B(op, aa, lk) (OP (op) | ((((unsigned long)(aa)) & 1) << 1) | ((lk) & 1))
#define B_MASK B (0x3f, 1, 1)
@@ -1619,21 +1390,37 @@ extract_tbr (unsigned long insn,
/* An X form instruction. */
#define X(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))
+/* A Z form instruction. */
+#define Z(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 1))
+
/* An X form instruction with the RC bit specified. */
#define XRC(op, xop, rc) (X ((op), (xop)) | ((rc) & 1))
+/* A Z form instruction with the RC bit specified. */
+#define ZRC(op, xop, rc) (Z ((op), (xop)) | ((rc) & 1))
+
/* The mask for an X form instruction. */
#define X_MASK XRC (0x3f, 0x3ff, 1)
+/* The mask for a Z form instruction. */
+#define Z_MASK ZRC (0x3f, 0x1ff, 1)
+#define Z2_MASK ZRC (0x3f, 0xff, 1)
+
/* An X_MASK with the RA field fixed. */
#define XRA_MASK (X_MASK | RA_MASK)
+/* An XRA_MASK with the W field clear. */
+#define XWRA_MASK (XRA_MASK & ~((unsigned long) 1 << 16))
+
/* An X_MASK with the RB field fixed. */
#define XRB_MASK (X_MASK | RB_MASK)
/* An X_MASK with the RT field fixed. */
#define XRT_MASK (X_MASK | RT_MASK)
+/* An XRT_MASK mask with the L bits clear. */
+#define XLRT_MASK (XRT_MASK & ~((unsigned long) 0x3 << 21))
+
/* An X_MASK with the RA and RB fields fixed. */
#define XRARB_MASK (X_MASK | RA_MASK | RB_MASK)
@@ -1670,13 +1457,16 @@ extract_tbr (unsigned long insn,
/* An X form sync instruction with everything filled in except the LS field. */
#define XSYNC_MASK (0xff9fffff)
+/* An X_MASK, but with the EH bit clear. */
+#define XEH_MASK (X_MASK & ~((unsigned long )1))
+
/* An X form AltiVec dss instruction. */
#define XDSS(op, xop, a) (X ((op), (xop)) | ((((unsigned long)(a)) & 1) << 25))
#define XDSS_MASK XDSS(0x3f, 0x3ff, 1)
/* An XFL form instruction. */
#define XFL(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1) | (((unsigned long)(rc)) & 1))
-#define XFL_MASK (XFL (0x3f, 0x3ff, 1) | (((unsigned long)1) << 25) | (((unsigned long)1) << 16))
+#define XFL_MASK XFL (0x3f, 0x3ff, 1)
/* An X form isel instruction. */
#define XISEL(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1))
@@ -1752,7 +1542,7 @@ extract_tbr (unsigned long insn,
/* An XFX form instruction with the SPR field filled in except for the
SPRG field. */
-#define XSPRG_MASK (XSPR_MASK & ~(0x17 << 16))
+#define XSPRG_MASK (XSPR_MASK & ~(0x1f << 16))
/* An X form instruction with everything filled in except the E field. */
#define XE_MASK (0xffff7fff)
@@ -1823,6 +1613,8 @@ extract_tbr (unsigned long insn,
#define NOPOWER4 PPC_OPCODE_NOPOWER4 | PPCCOM
#define POWER4 PPC_OPCODE_POWER4
#define POWER5 PPC_OPCODE_POWER5
+#define POWER6 PPC_OPCODE_POWER6
+#define CELL PPC_OPCODE_CELL
#define PPC32 PPC_OPCODE_32 | PPC_OPCODE_PPC
#define PPC64 PPC_OPCODE_64 | PPC_OPCODE_PPC
#define PPC403 PPC_OPCODE_403
@@ -3014,16 +2806,23 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "crand", XL(19,257), XL_MASK, COM, { BT, BA, BB } },
-{ "hrfid", XL(19,274), 0xffffffff, POWER5, { 0 } },
+{ "hrfid", XL(19,274), 0xffffffff, POWER5 | CELL, { 0 } },
{ "crset", XL(19,289), XL_MASK, PPCCOM, { BT, BAT, BBA } },
{ "creqv", XL(19,289), XL_MASK, COM, { BT, BA, BB } },
+{ "doze", XL(19,402), 0xffffffff, POWER6, { 0 } },
+
{ "crorc", XL(19,417), XL_MASK, COM, { BT, BA, BB } },
+{ "nap", XL(19,434), 0xffffffff, POWER6, { 0 } },
+
{ "crmove", XL(19,449), XL_MASK, PPCCOM, { BT, BA, BBA } },
{ "cror", XL(19,449), XL_MASK, COM, { BT, BA, BB } },
+{ "sleep", XL(19,466), 0xffffffff, POWER6, { 0 } },
+{ "rvwinkle", XL(19,498), 0xffffffff, POWER6, { 0 } },
+
{ "bctr", XLO(19,BOU,528,0), XLBOBIBB_MASK, COM, { 0 } },
{ "bctrl", XLO(19,BOU,528,1), XLBOBIBB_MASK, COM, { 0 } },
{ "bltctr", XLOCB(19,BOT,CBLT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
@@ -3174,8 +2973,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "bcctrl", XLLK(19,528,1), XLBH_MASK, PPCCOM, { BO, BI, BH } },
{ "bcc", XLLK(19,528,0), XLBB_MASK, PWRCOM, { BO, BI } },
{ "bccl", XLLK(19,528,1), XLBB_MASK, PWRCOM, { BO, BI } },
-{ "bcctre", XLLK(19,529,0), XLYBB_MASK, BOOKE64, { BO, BI } },
-{ "bcctrel", XLLK(19,529,1), XLYBB_MASK, BOOKE64, { BO, BI } },
+{ "bcctre", XLLK(19,529,0), XLBB_MASK, BOOKE64, { BO, BI } },
+{ "bcctrel", XLLK(19,529,1), XLBB_MASK, BOOKE64, { BO, BI } },
{ "rlwimi", M(20,0), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
{ "rlimi", M(20,0), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
@@ -3321,10 +3120,10 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "isel", XISEL(31,15), XISEL_MASK, PPCISEL, { RT, RA, RB, CRB } },
{ "mfocrf", XFXM(31,19,0,1), XFXFXM_MASK, COM, { RT, FXM } },
-{ "mfcr", X(31,19), XRARB_MASK, NOPOWER4, { RT } },
+{ "mfcr", X(31,19), XRARB_MASK, NOPOWER4 | COM, { RT } },
{ "mfcr", X(31,19), XFXFXM_MASK, POWER4, { RT, FXM4 } },
-{ "lwarx", X(31,20), X_MASK, PPC, { RT, RA0, RB } },
+{ "lwarx", X(31,20), XEH_MASK, PPC, { RT, RA0, RB, EH } },
{ "ldx", X(31,21), X_MASK, PPC64, { RT, RA0, RB } },
@@ -3417,9 +3216,10 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "mfmsr", X(31,83), XRARB_MASK, COM, { RT } },
-{ "ldarx", X(31,84), X_MASK, PPC64, { RT, RA0, RB } },
+{ "ldarx", X(31,84), XEH_MASK, PPC64, { RT, RA0, RB, EH } },
-{ "dcbf", X(31,86), XRT_MASK, PPC, { RA, RB } },
+{ "dcbfl", XOPL(31,86,1), XRT_MASK, POWER5, { RA, RB } },
+{ "dcbf", X(31,86), XLRT_MASK, PPC, { RA, RB, L } },
{ "lbzx", X(31,87), X_MASK, COM, { RT, RA0, RB } },
@@ -3501,12 +3301,14 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "sle", XRC(31,153,0), X_MASK, M601, { RA, RS, RB } },
{ "sle.", XRC(31,153,1), X_MASK, M601, { RA, RS, RB } },
+{ "prtyw", X(31,154), XRB_MASK, POWER6, { RA, RS } },
+
{ "wrteei", X(31,163), XE_MASK, PPC403 | BOOKE, { E } },
{ "dcbtls", X(31,166), X_MASK, PPCCHLK, { CT, RA, RB }},
{ "dcbtlse", X(31,174), X_MASK, PPCCHLK64, { CT, RA, RB }},
-{ "mtmsrd", X(31,178), XRLARB_MASK, PPC64, { RS, MTMSRD_L } },
+{ "mtmsrd", X(31,178), XRLARB_MASK, PPC64, { RS, A_L } },
{ "stdux", X(31,181), X_MASK, PPC64, { RS, RAS, RB } },
@@ -3516,6 +3318,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "sliq", XRC(31,184,0), X_MASK, M601, { RA, RS, SH } },
{ "sliq.", XRC(31,184,1), X_MASK, M601, { RA, RS, SH } },
+{ "prtyd", X(31,186), XRB_MASK, POWER6, { RA, RS } },
+
{ "stwuxe", X(31,191), X_MASK, BOOKE64, { RS, RAS, RB } },
{ "subfze", XO(31,200,0,0), XORB_MASK, PPCCOM, { RT, RA } },
@@ -3622,7 +3426,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "lscbx", XRC(31,277,0), X_MASK, M601, { RT, RA, RB } },
{ "lscbx.", XRC(31,277,1), X_MASK, M601, { RT, RA, RB } },
-{ "dcbt", X(31,278), X_MASK, PPC, { CT, RA, RB } },
+{ "dcbt", X(31,278), X_MASK, PPC, { CT, RA, RB } },
{ "lhzx", X(31,279), X_MASK, COM, { RT, RA0, RB } },
@@ -3703,6 +3507,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "mfsdr1", XSPR(31,339,25), XSPR_MASK, COM, { RT } },
{ "mfsrr0", XSPR(31,339,26), XSPR_MASK, COM, { RT } },
{ "mfsrr1", XSPR(31,339,27), XSPR_MASK, COM, { RT } },
+{ "mfcfar", XSPR(31,339,28), XSPR_MASK, POWER6, { RT } },
{ "mfpid", XSPR(31,339,48), XSPR_MASK, BOOKE, { RT } },
{ "mfpid", XSPR(31,339,945), XSPR_MASK, PPC403, { RT } },
{ "mfcsrr0", XSPR(31,339,58), XSPR_MASK, BOOKE, { RT } },
@@ -3924,12 +3729,18 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "sthx", X(31,407), X_MASK, COM, { RS, RA0, RB } },
+{ "cmpb", X(31,508), X_MASK, POWER6, { RA, RS, RB } },
+
{ "lfqx", X(31,791), X_MASK, POWER2, { FRT, RA, RB } },
+{ "lfdpx", X(31,791), X_MASK, POWER6, { FRT, RA, RB } },
+
{ "lfqux", X(31,823), X_MASK, POWER2, { FRT, RA, RB } },
{ "stfqx", X(31,919), X_MASK, POWER2, { FRS, RA, RB } },
+{ "stfdpx", X(31,919), X_MASK, POWER6, { FRS, RA, RB } },
+
{ "stfqux", X(31,951), X_MASK, POWER2, { FRS, RA, RB } },
{ "orc", XRC(31,412,0), X_MASK, COM, { RA, RS, RB } },
@@ -3948,6 +3759,13 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "sthuxe", X(31,447), X_MASK, BOOKE64, { RS, RAS, RB } },
+{ "cctpl", 0x7c210b78, 0xffffffff, CELL, { 0 }},
+{ "cctpm", 0x7c421378, 0xffffffff, CELL, { 0 }},
+{ "cctph", 0x7c631b78, 0xffffffff, CELL, { 0 }},
+{ "db8cyc", 0x7f9ce378, 0xffffffff, CELL, { 0 }},
+{ "db10cyc", 0x7fbdeb78, 0xffffffff, CELL, { 0 }},
+{ "db12cyc", 0x7fdef378, 0xffffffff, CELL, { 0 }},
+{ "db16cyc", 0x7ffffb78, 0xffffffff, CELL, { 0 }},
{ "mr", XRC(31,444,0), X_MASK, COM, { RA, RS, RBS } },
{ "or", XRC(31,444,0), X_MASK, COM, { RA, RS, RB } },
{ "mr.", XRC(31,444,1), X_MASK, COM, { RA, RS, RBS } },
@@ -4019,6 +3837,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "mtsdr1", XSPR(31,467,25), XSPR_MASK, COM, { RS } },
{ "mtsrr0", XSPR(31,467,26), XSPR_MASK, COM, { RS } },
{ "mtsrr1", XSPR(31,467,27), XSPR_MASK, COM, { RS } },
+{ "mtcfar", XSPR(31,467,28), XSPR_MASK, POWER6, { RS } },
{ "mtpid", XSPR(31,467,48), XSPR_MASK, BOOKE, { RS } },
{ "mtpid", XSPR(31,467,945), XSPR_MASK, PPC403, { RS } },
{ "mtdecar", XSPR(31,467,54), XSPR_MASK, BOOKE, { RS } },
@@ -4206,6 +4025,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "clcs", X(31,531), XRB_MASK, M601, { RT, RA } },
+{ "ldbrx", X(31,532), X_MASK, CELL, { RT, RA0, RB } },
+
{ "lswx", X(31,533), X_MASK, PPCCOM, { RT, RA0, RB } },
{ "lsx", X(31,533), X_MASK, PWRCOM, { RT, RA, RB } },
@@ -4255,6 +4076,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "lfdxe", X(31,607), X_MASK, BOOKE64, { FRT, RA0, RB } },
+{ "mffgpr", XRC(31,607,0), XRA_MASK, POWER6, { FRT, RB } },
+
{ "mfsri", X(31,627), X_MASK, PWRCOM, { RT, RA, RB } },
{ "dclst", X(31,630), XRB_MASK, PWRCOM, { RS, RA } },
@@ -4265,6 +4088,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "mfsrin", X(31,659), XRA_MASK, PPC32, { RT, RB } },
+{ "stdbrx", X(31,660), X_MASK, CELL, { RS, RA0, RB } },
+
{ "stswx", X(31,661), X_MASK, PPCCOM, { RS, RA0, RB } },
{ "stsx", X(31,661), X_MASK, PWRCOM, { RS, RA0, RB } },
@@ -4303,6 +4128,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "stfdxe", X(31,735), X_MASK, BOOKE64, { FRS, RA0, RB } },
+{ "mftgpr", XRC(31,735,0), XRA_MASK, POWER6, { RT, FRB } },
+
{ "dcba", X(31,758), XRT_MASK, PPC405 | BOOKE, { RA, RB } },
{ "stfdux", X(31,759), X_MASK, COM, { FRS, RAS, RB } },
@@ -4317,6 +4144,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "tlbivax", X(31,786), XRT_MASK, BOOKE, { RA, RB } },
{ "tlbivaxe",X(31,787), XRT_MASK, BOOKE64, { RA, RB } },
+{ "lwzcix", X(31,789), X_MASK, POWER6, { RT, RA0, RB } },
+
{ "lhbrx", X(31,790), X_MASK, COM, { RT, RA0, RB } },
{ "sraw", XRC(31,792,0), X_MASK, PPCCOM, { RA, RS, RB } },
@@ -4334,6 +4163,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "rac", X(31,818), X_MASK, PWRCOM, { RT, RA, RB } },
+{ "lhzcix", X(31,821), X_MASK, POWER6, { RT, RA0, RB } },
+
{ "dss", XDSS(31,822,0), XDSS_MASK, PPCVEC, { STRM } },
{ "dssall", XDSS(31,822,1), XDSS_MASK, PPCVEC, { 0 } },
@@ -4344,16 +4175,24 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "slbmfev", X(31,851), XRA_MASK, PPC64, { RT, RB } },
+{ "lbzcix", X(31,853), X_MASK, POWER6, { RT, RA0, RB } },
+
{ "mbar", X(31,854), X_MASK, BOOKE, { MO } },
{ "eieio", X(31,854), 0xffffffff, PPC, { 0 } },
+{ "lfiwax", X(31,855), X_MASK, POWER6, { FRT, RA0, RB } },
+
+{ "ldcix", X(31,885), X_MASK, POWER6, { RT, RA0, RB } },
+
{ "tlbsx", XRC(31,914,0), X_MASK, PPC403|BOOKE, { RTO, RA, RB } },
{ "tlbsx.", XRC(31,914,1), X_MASK, PPC403|BOOKE, { RTO, RA, RB } },
-{ "tlbsxe", XRC(31,915,0), X_MASK, BOOKE64, { RA, RB } },
-{ "tlbsxe.", XRC(31,915,1), X_MASK, BOOKE64, { RA, RB } },
+{ "tlbsxe", XRC(31,915,0), X_MASK, BOOKE64, { RTO, RA, RB } },
+{ "tlbsxe.", XRC(31,915,1), X_MASK, BOOKE64, { RTO, RA, RB } },
{ "slbmfee", X(31,915), XRA_MASK, PPC64, { RT, RB } },
+{ "stwcix", X(31,917), X_MASK, POWER6, { RS, RA0, RB } },
+
{ "sthbrx", X(31,918), X_MASK, COM, { RS, RA0, RB } },
{ "sraq", XRC(31,920,0), X_MASK, M601, { RA, RS, RB } },
@@ -4375,6 +4214,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "tlbrelo", XTLB(31,946,1), XTLB_MASK, PPC403, { RT, RA } },
{ "tlbre", X(31,946), X_MASK, PPC403|BOOKE, { RSO, RAOPT, SHO } },
+{ "sthcix", X(31,949), X_MASK, POWER6, { RS, RA0, RB } },
+
{ "sraiq", XRC(31,952,0), X_MASK, M601, { RA, RS, SH } },
{ "sraiq.", XRC(31,952,1), X_MASK, M601, { RA, RS, SH } },
@@ -4390,6 +4231,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "tlbwe", X(31,978), X_MASK, PPC403|BOOKE, { RSO, RAOPT, SHO } },
{ "tlbld", X(31,978), XRTRA_MASK, PPC, { RB } },
+{ "stbcix", X(31,981), X_MASK, POWER6, { RS, RA0, RB } },
+
{ "icbi", X(31,982), XRT_MASK, PPC, { RA, RB } },
{ "stfiwx", X(31,983), X_MASK, PPC, { FRS, RA0, RB } },
@@ -4404,6 +4247,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "tlbli", X(31,1010), XRTRA_MASK, PPC, { RB } },
+{ "stdcix", X(31,1013), X_MASK, POWER6, { RS, RA0, RB } },
+
{ "dcbzl", XOPL(31,1014,1), XRT_MASK,POWER4, { RA, RB } },
{ "dcbz", X(31,1014), XRT_MASK, PPC, { RA, RB } },
{ "dclz", X(31,1014), XRT_MASK, PPC, { RA, RB } },
@@ -4423,6 +4268,16 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "stvx", X(31, 231), X_MASK, PPCVEC, { VS, RA, RB } },
{ "stvxl", X(31, 487), X_MASK, PPCVEC, { VS, RA, RB } },
+/* New load/store left/right index vector instructions that are in the Cell only. */
+{ "lvlx", X(31, 519), X_MASK, CELL, { VD, RA0, RB } },
+{ "lvlxl", X(31, 775), X_MASK, CELL, { VD, RA0, RB } },
+{ "lvrx", X(31, 551), X_MASK, CELL, { VD, RA0, RB } },
+{ "lvrxl", X(31, 807), X_MASK, CELL, { VD, RA0, RB } },
+{ "stvlx", X(31, 647), X_MASK, CELL, { VS, RA0, RB } },
+{ "stvlxl", X(31, 903), X_MASK, CELL, { VS, RA0, RB } },
+{ "stvrx", X(31, 679), X_MASK, CELL, { VS, RA0, RB } },
+{ "stvrxl", X(31, 935), X_MASK, CELL, { VS, RA0, RB } },
+
{ "lwz", OP(32), OP_MASK, PPCCOM, { RT, D, RA0 } },
{ "l", OP(32), OP_MASK, PWRCOM, { RT, D, RA0 } },
@@ -4483,6 +4338,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "lfqu", OP(57), OP_MASK, POWER2, { FRT, D, RA0 } },
+{ "lfdp", OP(57), OP_MASK, POWER6, { FRT, D, RA0 } },
+
{ "lbze", DEO(58,0), DE_MASK, BOOKE64, { RT, DE, RA0 } },
{ "lbzue", DEO(58,1), DE_MASK, BOOKE64, { RT, DE, RAL } },
{ "lhze", DEO(58,2), DE_MASK, BOOKE64, { RT, DE, RA0 } },
@@ -4504,6 +4361,12 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "lwa", DSO(58,2), DS_MASK, PPC64, { RT, DS, RA0 } },
+{ "dadd", XRC(59,2,0), X_MASK, POWER6, { FRT, FRA, FRB } },
+{ "dadd.", XRC(59,2,1), X_MASK, POWER6, { FRT, FRA, FRB } },
+
+{ "dqua", ZRC(59,3,0), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
+{ "dqua.", ZRC(59,3,1), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
+
{ "fdivs", A(59,18,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
{ "fdivs.", A(59,18,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
@@ -4516,14 +4379,14 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "fsqrts", A(59,22,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
{ "fsqrts.", A(59,22,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
-{ "fres", A(59,24,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
-{ "fres.", A(59,24,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
+{ "fres", A(59,24,0), AFRALFRC_MASK, PPC, { FRT, FRB, A_L } },
+{ "fres.", A(59,24,1), AFRALFRC_MASK, PPC, { FRT, FRB, A_L } },
{ "fmuls", A(59,25,0), AFRB_MASK, PPC, { FRT, FRA, FRC } },
{ "fmuls.", A(59,25,1), AFRB_MASK, PPC, { FRT, FRA, FRC } },
-{ "frsqrtes", A(59,26,0), AFRAFRC_MASK, POWER5, { FRT, FRB } },
-{ "frsqrtes.",A(59,26,1), AFRAFRC_MASK, POWER5, { FRT, FRB } },
+{ "frsqrtes", A(59,26,0), AFRALFRC_MASK,POWER5, { FRT, FRB, A_L } },
+{ "frsqrtes.",A(59,26,1), AFRALFRC_MASK,POWER5, { FRT, FRB, A_L } },
{ "fmsubs", A(59,28,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
{ "fmsubs.", A(59,28,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
@@ -4537,10 +4400,73 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "fnmadds", A(59,31,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
{ "fnmadds.",A(59,31,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
+{ "dmul", XRC(59,34,0), X_MASK, POWER6, { FRT, FRA, FRB } },
+{ "dmul.", XRC(59,34,1), X_MASK, POWER6, { FRT, FRA, FRB } },
+
+{ "drrnd", ZRC(59,35,0), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
+{ "drrnd.", ZRC(59,35,1), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
+
+{ "dscli", ZRC(59,66,0), Z_MASK, POWER6, { FRT, FRA, SH16 } },
+{ "dscli.", ZRC(59,66,1), Z_MASK, POWER6, { FRT, FRA, SH16 } },
+
+{ "dquai", ZRC(59,67,0), Z2_MASK, POWER6, { TE, FRT, FRB, RMC } },
+{ "dquai.", ZRC(59,67,1), Z2_MASK, POWER6, { TE, FRT, FRB, RMC } },
+
+{ "dscri", ZRC(59,98,0), Z_MASK, POWER6, { FRT, FRA, SH16 } },
+{ "dscri.", ZRC(59,98,1), Z_MASK, POWER6, { FRT, FRA, SH16 } },
+
+{ "drintx", ZRC(59,99,0), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
+{ "drintx.", ZRC(59,99,1), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
+
+{ "dcmpo", X(59,130), X_MASK, POWER6, { BF, FRA, FRB } },
+
+{ "dtstex", X(59,162), X_MASK, POWER6, { BF, FRA, FRB } },
+{ "dtstdc", Z(59,194), Z_MASK, POWER6, { BF, FRA, DCM } },
+{ "dtstdg", Z(59,226), Z_MASK, POWER6, { BF, FRA, DGM } },
+
+{ "drintn", ZRC(59,227,0), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
+{ "drintn.", ZRC(59,227,1), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
+
+{ "dctdp", XRC(59,258,0), X_MASK, POWER6, { FRT, FRB } },
+{ "dctdp.", XRC(59,258,1), X_MASK, POWER6, { FRT, FRB } },
+
+{ "dctfix", XRC(59,290,0), X_MASK, POWER6, { FRT, FRB } },
+{ "dctfix.", XRC(59,290,1), X_MASK, POWER6, { FRT, FRB } },
+
+{ "ddedpd", XRC(59,322,0), X_MASK, POWER6, { SP, FRT, FRB } },
+{ "ddedpd.", XRC(59,322,1), X_MASK, POWER6, { SP, FRT, FRB } },
+
+{ "dxex", XRC(59,354,0), X_MASK, POWER6, { FRT, FRB } },
+{ "dxex.", XRC(59,354,1), X_MASK, POWER6, { FRT, FRB } },
+
+{ "dsub", XRC(59,514,0), X_MASK, POWER6, { FRT, FRA, FRB } },
+{ "dsub.", XRC(59,514,1), X_MASK, POWER6, { FRT, FRA, FRB } },
+
+{ "ddiv", XRC(59,546,0), X_MASK, POWER6, { FRT, FRA, FRB } },
+{ "ddiv.", XRC(59,546,1), X_MASK, POWER6, { FRT, FRA, FRB } },
+
+{ "dcmpu", X(59,642), X_MASK, POWER6, { BF, FRA, FRB } },
+
+{ "dtstsf", X(59,674), X_MASK, POWER6, { BF, FRA, FRB } },
+
+{ "drsp", XRC(59,770,0), X_MASK, POWER6, { FRT, FRB } },
+{ "drsp.", XRC(59,770,1), X_MASK, POWER6, { FRT, FRB } },
+
+{ "dcffix", XRC(59,802,0), X_MASK, POWER6, { FRT, FRB } },
+{ "dcffix.", XRC(59,802,1), X_MASK, POWER6, { FRT, FRB } },
+
+{ "denbcd", XRC(59,834,0), X_MASK, POWER6, { S, FRT, FRB } },
+{ "denbcd.", XRC(59,834,1), X_MASK, POWER6, { S, FRT, FRB } },
+
+{ "diex", XRC(59,866,0), X_MASK, POWER6, { FRT, FRA, FRB } },
+{ "diex.", XRC(59,866,1), X_MASK, POWER6, { FRT, FRA, FRB } },
+
{ "stfq", OP(60), OP_MASK, POWER2, { FRS, D, RA } },
{ "stfqu", OP(61), OP_MASK, POWER2, { FRS, D, RA } },
+{ "stfdp", OP(61), OP_MASK, POWER6, { FRT, D, RA0 } },
+
{ "lde", DEO(62,0), DE_MASK, BOOKE64, { RT, DES, RA0 } },
{ "ldue", DEO(62,1), DE_MASK, BOOKE64, { RT, DES, RA0 } },
{ "lfse", DEO(62,4), DE_MASK, BOOKE64, { FRT, DES, RA0 } },
@@ -4562,6 +4488,15 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "fcmpu", X(63,0), X_MASK|(3<<21), COM, { BF, FRA, FRB } },
+{ "daddq", XRC(63,2,0), X_MASK, POWER6, { FRT, FRA, FRB } },
+{ "daddq.", XRC(63,2,1), X_MASK, POWER6, { FRT, FRA, FRB } },
+
+{ "dquaq", ZRC(63,3,0), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
+{ "dquaq.", ZRC(63,3,1), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
+
+{ "fcpsgn", XRC(63,8,0), X_MASK, POWER6, { FRT, FRA, FRB } },
+{ "fcpsgn.", XRC(63,8,1), X_MASK, POWER6, { FRT, FRA, FRB } },
+
{ "frsp", XRC(63,12,0), XRA_MASK, COM, { FRT, FRB } },
{ "frsp.", XRC(63,12,1), XRA_MASK, COM, { FRT, FRB } },
@@ -4596,16 +4531,16 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "fsel", A(63,23,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
{ "fsel.", A(63,23,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
-{ "fre", A(63,24,0), AFRAFRC_MASK, POWER5, { FRT, FRB } },
-{ "fre.", A(63,24,1), AFRAFRC_MASK, POWER5, { FRT, FRB } },
+{ "fre", A(63,24,0), AFRALFRC_MASK, POWER5, { FRT, FRB, A_L } },
+{ "fre.", A(63,24,1), AFRALFRC_MASK, POWER5, { FRT, FRB, A_L } },
{ "fmul", A(63,25,0), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } },
{ "fm", A(63,25,0), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } },
{ "fmul.", A(63,25,1), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } },
{ "fm.", A(63,25,1), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } },
-{ "frsqrte", A(63,26,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
-{ "frsqrte.",A(63,26,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
+{ "frsqrte", A(63,26,0), AFRALFRC_MASK, PPC, { FRT, FRB, A_L } },
+{ "frsqrte.",A(63,26,1), AFRALFRC_MASK, PPC, { FRT, FRB, A_L } },
{ "fmsub", A(63,28,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
{ "fms", A(63,28,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
@@ -4629,6 +4564,12 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "fcmpo", X(63,32), X_MASK|(3<<21), COM, { BF, FRA, FRB } },
+{ "dmulq", XRC(63,34,0), X_MASK, POWER6, { FRT, FRA, FRB } },
+{ "dmulq.", XRC(63,34,1), X_MASK, POWER6, { FRT, FRA, FRB } },
+
+{ "drrndq", ZRC(63,35,0), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
+{ "drrndq.", ZRC(63,35,1), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
+
{ "mtfsb1", XRC(63,38,0), XRARB_MASK, COM, { BT } },
{ "mtfsb1.", XRC(63,38,1), XRARB_MASK, COM, { BT } },
@@ -4637,21 +4578,54 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "mcrfs", X(63,64), XRB_MASK|(3<<21)|(3<<16), COM, { BF, BFA } },
+{ "dscliq", ZRC(63,66,0), Z_MASK, POWER6, { FRT, FRA, SH16 } },
+{ "dscliq.", ZRC(63,66,1), Z_MASK, POWER6, { FRT, FRA, SH16 } },
+
+{ "dquaiq", ZRC(63,67,0), Z2_MASK, POWER6, { TE, FRT, FRB, RMC } },
+{ "dquaiq.", ZRC(63,67,1), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
+
{ "mtfsb0", XRC(63,70,0), XRARB_MASK, COM, { BT } },
{ "mtfsb0.", XRC(63,70,1), XRARB_MASK, COM, { BT } },
{ "fmr", XRC(63,72,0), XRA_MASK, COM, { FRT, FRB } },
{ "fmr.", XRC(63,72,1), XRA_MASK, COM, { FRT, FRB } },
-{ "mtfsfi", XRC(63,134,0), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } },
-{ "mtfsfi.", XRC(63,134,1), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } },
+{ "dscriq", ZRC(63,98,0), Z_MASK, POWER6, { FRT, FRA, SH16 } },
+{ "dscriq.", ZRC(63,98,1), Z_MASK, POWER6, { FRT, FRA, SH16 } },
+
+{ "drintxq", ZRC(63,99,0), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
+{ "drintxq.",ZRC(63,99,1), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
+
+{ "dcmpoq", X(63,130), X_MASK, POWER6, { BF, FRA, FRB } },
+
+{ "mtfsfi", XRC(63,134,0), XWRA_MASK|(3<<21)|(1<<11), COM, { BFF, U, W } },
+{ "mtfsfi.", XRC(63,134,1), XWRA_MASK|(3<<21)|(1<<11), COM, { BFF, U, W } },
{ "fnabs", XRC(63,136,0), XRA_MASK, COM, { FRT, FRB } },
{ "fnabs.", XRC(63,136,1), XRA_MASK, COM, { FRT, FRB } },
+{ "dtstexq", X(63,162), X_MASK, POWER6, { BF, FRA, FRB } },
+{ "dtstdcq", Z(63,194), Z_MASK, POWER6, { BF, FRA, DCM } },
+{ "dtstdgq", Z(63,226), Z_MASK, POWER6, { BF, FRA, DGM } },
+
+{ "drintnq", ZRC(63,227,0), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
+{ "drintnq.",ZRC(63,227,1), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
+
+{ "dctqpq", XRC(63,258,0), X_MASK, POWER6, { FRT, FRB } },
+{ "dctqpq.", XRC(63,258,1), X_MASK, POWER6, { FRT, FRB } },
+
{ "fabs", XRC(63,264,0), XRA_MASK, COM, { FRT, FRB } },
{ "fabs.", XRC(63,264,1), XRA_MASK, COM, { FRT, FRB } },
+{ "dctfixq", XRC(63,290,0), X_MASK, POWER6, { FRT, FRB } },
+{ "dctfixq.",XRC(63,290,1), X_MASK, POWER6, { FRT, FRB } },
+
+{ "ddedpdq", XRC(63,322,0), X_MASK, POWER6, { SP, FRT, FRB } },
+{ "ddedpdq.",XRC(63,322,1), X_MASK, POWER6, { SP, FRT, FRB } },
+
+{ "dxexq", XRC(63,354,0), X_MASK, POWER6, { FRT, FRB } },
+{ "dxexq.", XRC(63,354,1), X_MASK, POWER6, { FRT, FRB } },
+
{ "frin", XRC(63,392,0), XRA_MASK, POWER5, { FRT, FRB } },
{ "frin.", XRC(63,392,1), XRA_MASK, POWER5, { FRT, FRB } },
{ "friz", XRC(63,424,0), XRA_MASK, POWER5, { FRT, FRB } },
@@ -4661,11 +4635,27 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "frim", XRC(63,488,0), XRA_MASK, POWER5, { FRT, FRB } },
{ "frim.", XRC(63,488,1), XRA_MASK, POWER5, { FRT, FRB } },
+{ "dsubq", XRC(63,514,0), X_MASK, POWER6, { FRT, FRA, FRB } },
+{ "dsubq.", XRC(63,514,1), X_MASK, POWER6, { FRT, FRA, FRB } },
+
+{ "ddivq", XRC(63,546,0), X_MASK, POWER6, { FRT, FRA, FRB } },
+{ "ddivq.", XRC(63,546,1), X_MASK, POWER6, { FRT, FRA, FRB } },
+
{ "mffs", XRC(63,583,0), XRARB_MASK, COM, { FRT } },
{ "mffs.", XRC(63,583,1), XRARB_MASK, COM, { FRT } },
-{ "mtfsf", XFL(63,711,0), XFL_MASK, COM, { FLM, FRB } },
-{ "mtfsf.", XFL(63,711,1), XFL_MASK, COM, { FLM, FRB } },
+{ "dcmpuq", X(63,642), X_MASK, POWER6, { BF, FRA, FRB } },
+
+{ "dtstsfq", X(63,674), X_MASK, POWER6, { BF, FRA, FRB } },
+
+{ "mtfsf", XFL(63,711,0), XFL_MASK, COM, { FLM, FRB, XFL_L, W } },
+{ "mtfsf.", XFL(63,711,1), XFL_MASK, COM, { FLM, FRB, XFL_L, W } },
+
+{ "drdpq", XRC(63,770,0), X_MASK, POWER6, { FRT, FRB } },
+{ "drdpq.", XRC(63,770,1), X_MASK, POWER6, { FRT, FRB } },
+
+{ "dcffixq", XRC(63,802,0), X_MASK, POWER6, { FRT, FRB } },
+{ "dcffixq.",XRC(63,802,1), X_MASK, POWER6, { FRT, FRB } },
{ "fctid", XRC(63,814,0), XRA_MASK, PPC64, { FRT, FRB } },
{ "fctid.", XRC(63,814,1), XRA_MASK, PPC64, { FRT, FRB } },
@@ -4673,9 +4663,15 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "fctidz", XRC(63,815,0), XRA_MASK, PPC64, { FRT, FRB } },
{ "fctidz.", XRC(63,815,1), XRA_MASK, PPC64, { FRT, FRB } },
+{ "denbcdq", XRC(63,834,0), X_MASK, POWER6, { S, FRT, FRB } },
+{ "denbcdq.",XRC(63,834,1), X_MASK, POWER6, { S, FRT, FRB } },
+
{ "fcfid", XRC(63,846,0), XRA_MASK, PPC64, { FRT, FRB } },
{ "fcfid.", XRC(63,846,1), XRA_MASK, PPC64, { FRT, FRB } },
+{ "diexq", XRC(63,866,0), X_MASK, POWER6, { FRT, FRA, FRB } },
+{ "diexq.", XRC(63,866,1), X_MASK, POWER6, { FRT, FRA, FRB } },
+
};
const int powerpc_num_opcodes =
diff --git a/opcodes/s390-mkopc.c b/opcodes/s390-mkopc.c
index 5a794fdd5dc8..9e94f24871da 100644
--- a/opcodes/s390-mkopc.c
+++ b/opcodes/s390-mkopc.c
@@ -36,7 +36,8 @@ enum s390_opcode_cpu_val
S390_OPCODE_G6,
S390_OPCODE_Z900,
S390_OPCODE_Z990,
- S390_OPCODE_Z9_109
+ S390_OPCODE_Z9_109,
+ S390_OPCODE_Z9_EC
};
struct op_struct
@@ -198,6 +199,8 @@ main (void)
min_cpu = S390_OPCODE_Z990;
else if (strcmp (cpu_string, "z9-109") == 0)
min_cpu = S390_OPCODE_Z9_109;
+ else if (strcmp (cpu_string, "z9-ec") == 0)
+ min_cpu = S390_OPCODE_Z9_EC;
else {
fprintf (stderr, "Couldn't parse cpu string %s\n", cpu_string);
exit (1);
diff --git a/opcodes/s390-opc.c b/opcodes/s390-opc.c
index aa2e5a35ad53..a443fcfd05c6 100644
--- a/opcodes/s390-opc.c
+++ b/opcodes/s390-opc.c
@@ -133,7 +133,10 @@ const struct s390_operand s390_operands[] =
#define U32_16 41 /* 32 bit unsigned value starting at 16 */
{ 32, 16, 0 },
#define M_16 42 /* 4 bit optional mask starting at 16 */
- { 4, 16, S390_OPERAND_OPTIONAL }
+ { 4, 16, S390_OPERAND_OPTIONAL },
+#define RO_28 43 /* optional GPR starting at position 28 */
+ { 4, 28, (S390_OPERAND_GPR | S390_OPERAND_OPTIONAL) }
+
};
@@ -202,13 +205,21 @@ const struct s390_operand s390_operands[] =
#define INSTR_RRE_RA 4, { R_24,A_28,0,0,0,0 } /* e.g. ear */
#define INSTR_RRE_RF 4, { R_24,F_28,0,0,0,0 } /* e.g. cefbr */
#define INSTR_RRE_RR 4, { R_24,R_28,0,0,0,0 } /* e.g. lura */
+#define INSTR_RRE_FR 4, { F_24,R_28,0,0,0,0 } /* e.g. ldgr */
+/* Actually efpc and sfpc do not take an optional operand.
+ This is just a workaround for existing code e.g. glibc. */
+#define INSTR_RRE_RR_OPT 4, { R_24,RO_28,0,0,0,0 } /* efpc, sfpc */
#define INSTR_RRF_F0FF 4, { F_16,F_24,F_28,0,0,0 } /* e.g. madbr */
+#define INSTR_RRF_F0FF2 4, { F_24,F_16,F_28,0,0,0 } /* e.g. cpsdr */
+#define INSTR_RRF_F0FR 4, { F_24,F_16,R_28,0,0,0 } /* e.g. iedtr */
#define INSTR_RRF_FUFF 4, { F_24,F_16,F_28,U4_20,0,0 } /* e.g. didbr */
#define INSTR_RRF_RURR 4, { R_24,R_28,R_16,U4_20,0,0 } /* e.g. .insn */
#define INSTR_RRF_R0RR 4, { R_24,R_28,R_16,0,0,0 } /* e.g. idte */
-#define INSTR_RRF_U0FF 4, { F_24,U4_16,F_28,0,0,0 } /* e.g. cfxbr */
-#define INSTR_RRF_U0FR 4, { F_24,U4_16,R_28,0,0,0 } /* e.g. cfebr */
-#define INSTR_RRF_U0FR 4, { F_24,U4_16,R_28,0,0,0 } /* e.g. cfxbr */
+#define INSTR_RRF_U0FF 4, { F_24,U4_16,F_28,0,0,0 } /* e.g. fixr */
+#define INSTR_RRF_U0RF 4, { R_24,U4_16,F_28,0,0,0 } /* e.g. cfebr */
+#define INSTR_RRF_UUFF 4, { F_24,U4_16,F_28,U4_20,0,0 } /* e.g. fidtr */
+#define INSTR_RRF_0UFF 4, { F_24,F_28,U4_20,0,0,0 } /* e.g. ldetr */
+#define INSTR_RRF_FFFU 4, { F_24,F_16,F_28,U4_20,0,0 } /* e.g. qadtr */
#define INSTR_RRF_M0RR 4, { R_24,R_28,M_16,0,0,0 } /* e.g. sske */
#define INSTR_RR_0R 2, { R_12, 0,0,0,0,0 } /* e.g. br */
#define INSTR_RR_FF 2, { F_8,F_12,0,0,0,0 } /* e.g. adr */
@@ -216,6 +227,7 @@ const struct s390_operand s390_operands[] =
#define INSTR_RR_RR 2, { R_8,R_12,0,0,0,0 } /* e.g. lr */
#define INSTR_RR_U0 2, { U8_8, 0,0,0,0,0 } /* e.g. svc */
#define INSTR_RR_UR 2, { U4_8,R_12,0,0,0,0 } /* e.g. bcr */
+#define INSTR_RRR_F0FF 4, { F_24,F_28,F_16,0,0,0 } /* e.g. ddtr */
#define INSTR_RSE_RRRD 6, { R_8,R_12,D_20,B_16,0,0 } /* e.g. lmh */
#define INSTR_RSE_CCRD 6, { C_8,C_12,D_20,B_16,0,0 } /* e.g. lmh */
#define INSTR_RSE_RURD 6, { R_8,U4_12,D_20,B_16,0,0 } /* e.g. icmh */
@@ -244,6 +256,7 @@ const struct s390_operand s390_operands[] =
#define INSTR_SIY_URD 6, { D20_20,B_16,U8_8,0,0,0 } /* e.g. tmy */
#define INSTR_SSE_RDRD 6, { D_20,B_16,D_36,B_32,0,0 } /* e.g. mvsdk */
#define INSTR_SS_L0RDRD 6, { D_20,L8_8,B_16,D_36,B_32,0 } /* e.g. mvc */
+#define INSTR_SS_L2RDRD 6, { D_20,B_16,D_36,L8_8,B_32,0 } /* e.g. pka */
#define INSTR_SS_LIRDRD 6, { D_20,L4_8,B_16,D_36,B_32,U4_12 } /* e.g. srp */
#define INSTR_SS_LLRDRD 6, { D_20,L4_8,B_16,D_36,L4_12,B_32 } /* e.g. pack */
#define INSTR_SS_RRRDRD 6, { D_20,R_8,B_16,D_36,B_32,R_12 } /* e.g. mvck */
@@ -275,13 +288,19 @@ const struct s390_operand s390_operands[] =
#define MASK_RRE_RA { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
#define MASK_RRE_RF { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
#define MASK_RRE_RR { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
+#define MASK_RRE_FR { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
+#define MASK_RRE_RR_OPT { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
#define MASK_RRF_F0FF { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
+#define MASK_RRF_F0FF2 { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
+#define MASK_RRF_F0FR { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
#define MASK_RRF_FUFF { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RRF_RURR { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RRF_R0RR { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RRF_U0FF { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
-#define MASK_RRF_U0FR { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
-#define MASK_RRF_U0FR { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
+#define MASK_RRF_U0RF { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
+#define MASK_RRF_UUFF { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RRF_0UFF { 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00 }
+#define MASK_RRF_FFFU { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RRF_M0RR { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
#define MASK_RR_0R { 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RR_FF { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
@@ -289,6 +308,7 @@ const struct s390_operand s390_operands[] =
#define MASK_RR_RR { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RR_U0 { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_RR_UR { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RRR_F0FF { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
#define MASK_RSE_RRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
#define MASK_RSE_CCRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
#define MASK_RSE_RURD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
@@ -317,6 +337,7 @@ const struct s390_operand s390_operands[] =
#define MASK_SIY_URD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
#define MASK_SSE_RDRD { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
#define MASK_SS_L0RDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_SS_L2RDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_SS_LIRDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_SS_LLRDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_SS_RRRDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
@@ -324,7 +345,7 @@ const struct s390_operand s390_operands[] =
#define MASK_SS_RRRDRD3 { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define MASK_S_00 { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00 }
#define MASK_S_RD { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
-#define MASK_SSF_RRDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_SSF_RRDRD { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
/* The opcode formats table (blueprints for .insn pseudo mnemonic). */
diff --git a/opcodes/s390-opc.txt b/opcodes/s390-opc.txt
index bbe1588e142a..865e264cf9c5 100644
--- a/opcodes/s390-opc.txt
+++ b/opcodes/s390-opc.txt
@@ -344,9 +344,9 @@ ed0000000008 keb RXE_FRRD "compare and signal short bfp" g5 esa,zarch
b396 cxfbr RRE_RF "convert from fixed 32 to extended bfp" g5 esa,zarch
b395 cdfbr RRE_RF "convert from fixed 32 to long bfp" g5 esa,zarch
b394 cefbr RRE_RF "convert from fixed 32 to short bfp" g5 esa,zarch
-b39a cfxbr RRF_U0FR "convert to fixed extended bfp to 32" g5 esa,zarch
-b399 cfdbr RRF_U0FR "convert to fixed long bfp to 32" g5 esa,zarch
-b398 cfebr RRF_U0FR "convert to fixed short bfp to 32" g5 esa,zarch
+b39a cfxbr RRF_U0RF "convert to fixed extended bfp to 32" g5 esa,zarch
+b399 cfdbr RRF_U0RF "convert to fixed long bfp to 32" g5 esa,zarch
+b398 cfebr RRF_U0RF "convert to fixed short bfp to 32" g5 esa,zarch
b34d dxbr RRE_FF "divide extended bfp" g5 esa,zarch
b31d ddbr RRE_FF "divide long bfp" g5 esa,zarch
ed000000001d ddb RXE_FRRD "divide long bfp" g5 esa,zarch
@@ -354,7 +354,7 @@ b30d debr RRE_FF "divide short bfp" g5 esa,zarch
ed000000000d deb RXE_FRRD "divide short bfp" g5 esa,zarch
b35b didbr RRF_FUFF "divide to integer long bfp" g5 esa,zarch
b353 diebr RRF_FUFF "divide to integer short bfp" g5 esa,zarch
-b38c efpc RRE_RR "extract fpc" g5 esa,zarch
+b38c efpc RRE_RR_OPT "extract fpc" g5 esa,zarch
b342 ltxbr RRE_FF "load and test extended bfp" g5 esa,zarch
b312 ltdbr RRE_FF "load and test long bfp" g5 esa,zarch
b302 ltebr RRE_FF "load and test short bfp" g5 esa,zarch
@@ -397,7 +397,7 @@ b31f msdbr RRF_F0FF "multiply and subtract long bfp" g5 esa,zarch
ed000000001f msdb RXF_FRRDF "multiply and subtract long bfp" g5 esa,zarch
b30f msebr RRF_F0FF "multiply and subtract short bfp" g5 esa,zarch
ed000000000f mseb RXF_FRRDF "multiply and subtract short bfp" g5 esa,zarch
-b384 sfpc RRE_RR "set fpc" g5 esa,zarch
+b384 sfpc RRE_RR_OPT "set fpc" g5 esa,zarch
b299 srnm S_RD "set rounding mode" g5 esa,zarch
b316 sqxbr RRE_FF "square root extended bfp" g5 esa,zarch
b315 sqdbr RRE_FF "square root long bfp" g5 esa,zarch
@@ -428,7 +428,7 @@ a701 tmll RI_RU "test under mask low low" g5 esa,zarch
b278 stcke S_RD "store clock extended" g5 esa,zarch
b2a5 tre RRE_RR "translate extended" g5 esa,zarch
eb000000008e mvclu RSE_RRRD "move long unicode" g5 esa,zarch
-e9 pka SS_L0RDRD "pack ascii" g5 esa,zarch
+e9 pka SS_L2RDRD "pack ascii" g5 esa,zarch
e1 pku SS_L0RDRD "pack unicode" g5 esa,zarch
b993 troo RRE_RR "translate one to one" g5 esa,zarch
b992 trot RRE_RR "translate one to two" g5 esa,zarch
@@ -555,15 +555,15 @@ b91c msgfr RRE_RR "multiply single 64<32" z900 zarch
b3a4 cegbr RRE_RR "convert from fixed 64 to short bfp" z900 zarch
b3a5 cdgbr RRE_RR "convert from fixed 64 to long bfp" z900 zarch
b3a6 cxgbr RRE_RR "convert from fixed 64 to extended bfp" z900 zarch
-b3a8 cgebr RRF_U0FR "convert to fixed short bfd to 64" z900 zarch
-b3a9 cgdbr RRF_U0FR "convert to fixed long bfp to 64" z900 zarch
-b3aa cgxbr RRF_U0FR "convert to fixed extended bfp to 64" z900 zarch
+b3a8 cgebr RRF_U0RF "convert to fixed short bfd to 64" z900 zarch
+b3a9 cgdbr RRF_U0RF "convert to fixed long bfp to 64" z900 zarch
+b3aa cgxbr RRF_U0RF "convert to fixed extended bfp to 64" z900 zarch
b3c4 cegr RRE_RR "convert from fixed 64 to short hfp" z900 zarch
b3c5 cdgr RRE_RR "convert from fixed 64 to long hfp" z900 zarch
b3c6 cxgr RRE_RR "convert from fixed 64 to extended hfp" z900 zarch
-b3c8 cger RRF_U0FR "convert to fixed short hfp to 64" z900 zarch
-b3c9 cgdr RRF_U0FR "convert to fixed long hfp to 64" z900 zarch
-b3ca cgxr RRF_U0FR "convert to fixed extended hfp to 64" z900 zarch
+b3c8 cger RRF_U0RF "convert to fixed short hfp to 64" z900 zarch
+b3c9 cgdr RRF_U0RF "convert to fixed long hfp to 64" z900 zarch
+b3ca cgxr RRF_U0RF "convert to fixed extended hfp to 64" z900 zarch
010b tam E "test addressing mode" z900 esa,zarch
010c sam24 E "set addressing mode 24" z900 esa,zarch
010d sam31 E "set addressing mode 31" z900 esa,zarch
@@ -631,9 +631,9 @@ b369 cxr RRE_FF "compare extended hfp" g5 esa,zarch
b3b6 cxfr RRE_RF "convert from fixed 32 to extended hfp" g5 esa,zarch
b3b5 cdfr RRE_RF "convert from fixed 32 to long hfp" g5 esa,zarch
b3b4 cefr RRE_RF "convert from fixed 32 to short hfp" g5 esa,zarch
-b3ba cfxr RRF_U0FR "convert to fixed extended hfp to 32" z900 zarch
-b3b9 cfdr RRF_U0FR "convert to fixed long hfp to 32" z900 zarch
-b3b8 cfer RRF_U0FR "convert to fixed short hfp to 32" z900 zarch
+b3ba cfxr RRF_U0RF "convert to fixed extended hfp to 32" z900 zarch
+b3b9 cfdr RRF_U0RF "convert to fixed long hfp to 32" z900 zarch
+b3b8 cfer RRF_U0RF "convert to fixed short hfp to 32" z900 zarch
b362 ltxr RRE_FF "load and test extended hfp" g5 esa,zarch
b363 lcxr RRE_FF "load complement extended hfp" g5 esa,zarch
b367 fixr RRF_U0FF "load fp integer extended hfp" g5 esa,zarch
@@ -863,3 +863,69 @@ b338 maylr RRF_F0FF "multiply and add unnormalized long hfp low" z9-109 zarch
ed000000003a may RXF_FRRDF "multiply and add unnormalized long hfp" z9-109 zarch
ed000000003c mayh RXF_FRRDF "multiply and add unnormalized long hfp high" z9-109 zarch
ed0000000038 mayl RXF_FRRDF "multiply and add unnormalized long hfp low" z9-109 zarch
+b370 lpdfr RRE_FF "load positive no cc" z9-ec zarch
+b371 lndfr RRE_FF "load negative no cc" z9-ec zarch
+b372 cpsdr RRF_F0FF2 "copy sign" z9-ec zarch
+b373 lcdfr RRE_FF "load complement no cc" z9-ec zarch
+b3c1 ldgr RRE_FR "load fpr from gr" z9-ec zarch
+b3cd lgdr RRE_RF "load gr from fpr" z9-ec zarch
+b3d2 adtr RRR_F0FF "add long dfp" z9-ec zarch
+b3da axtr RRR_F0FF "add extended dfp" z9-ec zarch
+b3e4 cdtr RRE_FF "compare long dfp" z9-ec zarch
+b3ec cxtr RRE_FF "compare extended dfp" z9-ec zarch
+b3e0 kdtr RRE_FF "compare and signal long dfp" z9-ec zarch
+b3e8 kxtr RRE_FF "compare and signal extended dfp" z9-ec zarch
+b3f4 cedtr RRE_FF "compare exponent long dfp" z9-ec zarch
+b3fc cextr RRE_FF "compare exponent extended dfp" z9-ec zarch
+b3f1 cdgtr RRE_FR "convert from fixed long dfp" z9-ec zarch
+b3f9 cxgtr RRE_FR "convert from fixed extended dfp" z9-ec zarch
+b3f3 cdstr RRE_FR "convert from signed bcd long dfp" z9-ec zarch
+b3fb cxstr RRE_FR "convert from signed bcd extended dfp" z9-ec zarch
+b3f2 cdutr RRE_FR "convert from unsigned bcd to long dfp" z9-ec zarch
+b3fa cxutr RRE_FR "convert from unsigned bcd to extended dfp" z9-ec zarch
+b3e1 cgdtr RRF_U0RF "convert from long dfp to fixed" z9-ec zarch
+b3e9 cgxtr RRF_U0RF "convert from extended dfp to fixed" z9-ec zarch
+b3e3 csdtr RRE_RF "convert from long dfp to signed bcd" z9-ec zarch
+b3eb csxtr RRE_RF "convert from extended dfp to signed bcd" z9-ec zarch
+b3e2 cudtr RRE_RF "convert from long dfp to unsigned bcd" z9-ec zarch
+b3ea cuxtr RRE_RF "convert from extended dfp to unsigned bcd" z9-ec zarch
+b3d1 ddtr RRR_F0FF "divide long dfp" z9-ec zarch
+b3d9 dxtr RRR_F0FF "divide extended dfp" z9-ec zarch
+b3e5 eedtr RRE_RF "extract biased exponent from long dfp" z9-ec zarch
+b3ed eextr RRE_RF "extract biased exponent from extended dfp" z9-ec zarch
+b3e7 esdtr RRE_RF "extract significance from long dfp" z9-ec zarch
+b3ef esxtr RRE_RF "extract significance from extended dfp" z9-ec zarch
+b3f6 iedtr RRF_F0FR "insert biased exponent long dfp" z9-ec zarch
+b3fe iextr RRF_F0FR "insert biased exponent extended dfp" z9-ec zarch
+b3d6 ltdtr RRE_FF "load and test long dfp" z9-ec zarch
+b3de ltxtr RRE_FF "load and test extended dfp" z9-ec zarch
+b3d7 fidtr RRF_UUFF "load fp integer long dfp" z9-ec zarch
+b3df fixtr RRF_UUFF "load fp integer extended dfp" z9-ec zarch
+b2bd lfas S_RD "load fpd and signal" z9-ec zarch
+b3d4 ldetr RRF_0UFF "load lengthened long dfp" z9-ec zarch
+b3dc lxdtr RRF_0UFF "load lengthened extended dfp" z9-ec zarch
+b3d5 ledtr RRF_UUFF "load rounded long dfp" z9-ec zarch
+b3dd ldxtr RRF_UUFF "load rounded extended dfp" z9-ec zarch
+b3d0 mdtr RRR_F0FF "multiply long dfp" z9-ec zarch
+b3d8 mxtr RRR_F0FF "multiply extended dfp" z9-ec zarch
+b3f5 qadtr RRF_FFFU "Quantize long dfp" z9-ec zarch
+b3fd qaxtr RRF_FFFU "Quantize extended dfp" z9-ec zarch
+b3f7 rrdtr RRF_FFFU "Reround long dfp" z9-ec zarch
+b3ff rrxtr RRF_FFFU "Reround extended dfp" z9-ec zarch
+b2b9 srnmt S_RD "set rounding mode dfp" z9-ec zarch
+b385 sfasr RRE_R0 "set fpc and signal" z9-ec zarch
+ed0000000040 sldt RXF_FRRDF "shift coefficient left long dfp" z9-ec zarch
+ed0000000048 slxt RXF_FRRDF "shift coefficient left extended dfp" z9-ec zarch
+ed0000000041 srdt RXF_FRRDF "shift coefficient right long dfp" z9-ec zarch
+ed0000000049 srxt RXF_FRRDF "shift coefficient right extended dfp" z9-ec zarch
+b3d3 sdtr RRR_F0FF "subtract long dfp" z9-ec zarch
+b3db sxtr RRR_F0FF "subtract extended dfp" z9-ec zarch
+ed0000000050 tcet RXE_FRRD "test data class short dfp" z9-ec zarch
+ed0000000054 tcdt RXE_FRRD "test data class long dfp" z9-ec zarch
+ed0000000058 tcxt RXE_FRRD "test data class extended dfp" z9-ec zarch
+ed0000000051 tget RXE_FRRD "test data group short dfp" z9-ec zarch
+ed0000000055 tgdt RXE_FRRD "test data group long dfp" z9-ec zarch
+ed0000000059 tgxt RXE_FRRD "test data group extended dfp" z9-ec zarch
+010a pfpo E "perform floating point operation" z9-ec zarch
+c801 ectg SSF_RRDRD "extract cpu time" z9-ec zarch
+c802 csst SSF_RRDRD "compare and swap and store" z9-ec zarch
diff --git a/opcodes/score-dis.c b/opcodes/score-dis.c
new file mode 100644
index 000000000000..96d1ec4c43d8
--- /dev/null
+++ b/opcodes/score-dis.c
@@ -0,0 +1,504 @@
+/* Instruction printing code for Score
+ Copyright 2006 Free Software Foundation, Inc.
+ Contributed by:
+ Mei Ligang (ligang@sunnorth.com.cn)
+ Pei-Lin Tsai (pltsai@sunplus.com)
+
+ This file is part of libopcodes.
+
+ 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 "sysdep.h"
+#include "dis-asm.h"
+#define DEFINE_TABLE
+#include "score-opc.h"
+#include "opintl.h"
+#include "bfd.h"
+
+/* FIXME: This shouldn't be done here. */
+#include "elf-bfd.h"
+#include "elf/internal.h"
+#include "elf/score.h"
+
+#ifndef streq
+#define streq(a,b) (strcmp ((a), (b)) == 0)
+#endif
+
+#ifndef strneq
+#define strneq(a,b,n) (strncmp ((a), (b), (n)) == 0)
+#endif
+
+#ifndef NUM_ELEM
+#define NUM_ELEM(a) (sizeof (a) / sizeof (a)[0])
+#endif
+
+typedef struct
+{
+ const char *name;
+ const char *description;
+ const char *reg_names[32];
+} score_regname;
+
+static score_regname regnames[] =
+{
+ {"gcc", "Select register names used by GCC",
+ {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
+ "r11", "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20",
+ "r21", "r22", "r23", "r24", "r25", "r26", "r27", "gp", "r29", "r30", "r31"}},
+};
+
+static unsigned int regname_selected = 0;
+
+#define NUM_SCORE_REGNAMES NUM_ELEM (regnames)
+#define score_regnames regnames[regname_selected].reg_names
+
+/* Print one instruction from PC on INFO->STREAM.
+ Return the size of the instruction. */
+static int
+print_insn_score32 (bfd_vma pc, struct disassemble_info *info, long given)
+{
+ struct score_opcode *insn;
+ void *stream = info->stream;
+ fprintf_ftype func = info->fprintf_func;
+
+ for (insn = score_opcodes; insn->assembler; insn++)
+ {
+ if ((insn->mask & 0xffff0000) && (given & insn->mask) == insn->value)
+ {
+ char *c;
+
+ for (c = insn->assembler; *c; c++)
+ {
+ if (*c == '%')
+ {
+ switch (*++c)
+ {
+ case 'j':
+ {
+ int target;
+
+ if (info->flags & INSN_HAS_RELOC)
+ pc = 0;
+ target = (pc & 0xfe000000) | (given & 0x01fffffe);
+ (*info->print_address_func) (target, info);
+ }
+ break;
+ case 'b':
+ {
+ /* Sign-extend a 20-bit number. */
+#define SEXT20(x) ((((x) & 0xfffff) ^ (~ 0x7ffff)) + 0x80000)
+ int disp = ((given & 0x01ff8000) >> 5) | (given & 0x3fe);
+ int target = (pc + SEXT20 (disp));
+
+ (*info->print_address_func) (target, info);
+ }
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ {
+ int bitstart = *c++ - '0';
+ int bitend = 0;
+
+ while (*c >= '0' && *c <= '9')
+ bitstart = (bitstart * 10) + *c++ - '0';
+
+ switch (*c)
+ {
+ case '-':
+ c++;
+ while (*c >= '0' && *c <= '9')
+ bitend = (bitend * 10) + *c++ - '0';
+
+ if (!bitend)
+ abort ();
+
+ switch (*c)
+ {
+ case 'r':
+ {
+ long reg;
+
+ reg = given >> bitstart;
+ reg &= (2 << (bitend - bitstart)) - 1;
+
+ func (stream, "%s", score_regnames[reg]);
+ }
+ break;
+ case 'd':
+ {
+ long reg;
+
+ reg = given >> bitstart;
+ reg &= (2 << (bitend - bitstart)) - 1;
+
+ func (stream, "%ld", reg);
+ }
+ break;
+ case 'i':
+ {
+ long reg;
+
+ reg = given >> bitstart;
+ reg &= (2 << (bitend - bitstart)) - 1;
+ reg = ((reg ^ (1 << (bitend - bitstart))) -
+ (1 << (bitend - bitstart)));
+
+ if (((given & insn->mask) == 0x0c00000a) /* ldc1 */
+ || ((given & insn->mask) == 0x0c000012) /* ldc2 */
+ || ((given & insn->mask) == 0x0c00001c) /* ldc3 */
+ || ((given & insn->mask) == 0x0c00000b) /* stc1 */
+ || ((given & insn->mask) == 0x0c000013) /* stc2 */
+ || ((given & insn->mask) == 0x0c00001b)) /* stc3 */
+ reg <<= 2;
+
+ func (stream, "%ld", reg);
+ }
+ break;
+ case 'x':
+ {
+ long reg;
+
+ reg = given >> bitstart;
+ reg &= (2 << (bitend - bitstart)) - 1;
+
+ func (stream, "%lx", reg);
+ }
+ break;
+ default:
+ abort ();
+ }
+ break;
+ case '`':
+ c++;
+ if ((given & (1 << bitstart)) == 0)
+ func (stream, "%c", *c);
+ break;
+ case '\'':
+ c++;
+ if ((given & (1 << bitstart)) != 0)
+ func (stream, "%c", *c);
+ break;
+ default:
+ abort ();
+ }
+ break;
+
+ default:
+ abort ();
+ }
+ }
+ }
+ else
+ func (stream, "%c", *c);
+ }
+ return 4;
+ }
+ }
+
+#if (SCORE_SIMULATOR_ACTIVE)
+ func (stream, _("<illegal instruction>"));
+ return 4;
+#endif
+
+ abort ();
+}
+
+static void
+print_insn_parallel_sym (struct disassemble_info *info)
+{
+ void *stream = info->stream;
+ fprintf_ftype func = info->fprintf_func;
+
+ /* 10: 0000 nop!
+ 4 space + 1 colon + 1 space + 1 tab + 8 opcode + 2 space + 1 tab.
+ FIXME: the space number is not accurate. */
+ func (stream, "%s", " ||\n \t \t");
+}
+
+/* Print one instruction from PC on INFO->STREAM.
+ Return the size of the instruction. */
+static int
+print_insn_score16 (bfd_vma pc, struct disassemble_info *info, long given)
+{
+ struct score_opcode *insn;
+ void *stream = info->stream;
+ fprintf_ftype func = info->fprintf_func;
+
+ given &= 0xffff;
+ for (insn = score_opcodes; insn->assembler; insn++)
+ {
+ if (!(insn->mask & 0xffff0000) && (given & insn->mask) == insn->value)
+ {
+ char *c = insn->assembler;
+
+ info->bytes_per_chunk = 2;
+ info->bytes_per_line = 4;
+ given &= 0xffff;
+
+ for (; *c; c++)
+ {
+ if (*c == '%')
+ {
+ switch (*++c)
+ {
+
+ case 'j':
+ {
+ int target;
+
+ if (info->flags & INSN_HAS_RELOC)
+ pc = 0;
+
+ target = (pc & 0xfffff000) | (given & 0x00000ffe);
+ (*info->print_address_func) (target, info);
+ }
+ break;
+ case 'b':
+ {
+ /* Sign-extend a 9-bit number. */
+#define SEXT9(x) ((((x) & 0x1ff) ^ (~ 0xff)) + 0x100)
+ int disp = (given & 0xff) << 1;
+ int target = (pc + SEXT9 (disp));
+
+ (*info->print_address_func) (target, info);
+ }
+ break;
+
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ {
+ int bitstart = *c++ - '0';
+ int bitend = 0;
+
+ while (*c >= '0' && *c <= '9')
+ bitstart = (bitstart * 10) + *c++ - '0';
+
+ switch (*c)
+ {
+ case '-':
+ {
+ long reg;
+
+ c++;
+ while (*c >= '0' && *c <= '9')
+ bitend = (bitend * 10) + *c++ - '0';
+ if (!bitend)
+ abort ();
+ reg = given >> bitstart;
+ reg &= (2 << (bitend - bitstart)) - 1;
+ switch (*c)
+ {
+ case 'R':
+ func (stream, "%s", score_regnames[reg + 16]);
+ break;
+ case 'r':
+ func (stream, "%s", score_regnames[reg]);
+ break;
+ case 'd':
+ if (*(c + 1) == '\0')
+ func (stream, "%ld", reg);
+ else
+ {
+ c++;
+ if (*c == '1')
+ func (stream, "%ld", reg << 1);
+ else if (*c == '2')
+ func (stream, "%ld", reg << 2);
+ }
+ break;
+
+ case 'x':
+ if (*(c + 1) == '\0')
+ func (stream, "%lx", reg);
+ else
+ {
+ c++;
+ if (*c == '1')
+ func (stream, "%lx", reg << 1);
+ else if (*c == '2')
+ func (stream, "%lx", reg << 2);
+ }
+ break;
+ case 'i':
+ reg = ((reg ^ (1 << bitend)) - (1 << bitend));
+ func (stream, "%ld", reg);
+ break;
+ default:
+ abort ();
+ }
+ }
+ break;
+
+ case '\'':
+ c++;
+ if ((given & (1 << bitstart)) != 0)
+ func (stream, "%c", *c);
+ break;
+ default:
+ abort ();
+ }
+ }
+ break;
+ default:
+ abort ();
+ }
+ }
+ else
+ func (stream, "%c", *c);
+ }
+
+ return 2;
+ }
+ }
+#if (SCORE_SIMULATOR_ACTIVE)
+ func (stream, _("<illegal instruction>"));
+ return 2;
+#endif
+ /* No match. */
+ abort ();
+}
+
+/* NOTE: There are no checks in these routines that
+ the relevant number of data bytes exist. */
+static int
+print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
+{
+ unsigned char b[4];
+ long given;
+ long ridparity;
+ int status;
+ bfd_boolean insn_pce_p = FALSE;
+ bfd_boolean insn_16_p = FALSE;
+
+ info->display_endian = little ? BFD_ENDIAN_LITTLE : BFD_ENDIAN_BIG;
+
+ if (pc & 0x2)
+ {
+ info->bytes_per_chunk = 2;
+ status = info->read_memory_func (pc, (bfd_byte *) b, 2, info);
+ b[3] = b[2] = 0;
+ insn_16_p = TRUE;
+ }
+ else
+ {
+ info->bytes_per_chunk = 4;
+ status = info->read_memory_func (pc, (bfd_byte *) & b[0], 4, info);
+ if (status != 0)
+ {
+ info->bytes_per_chunk = 2;
+ status = info->read_memory_func (pc, (bfd_byte *) b, 2, info);
+ b[3] = b[2] = 0;
+ insn_16_p = TRUE;
+ }
+ }
+
+ if (status != 0)
+ {
+ info->memory_error_func (status, pc, info);
+ return -1;
+ }
+
+ if (little)
+ {
+ given = (b[0]) | (b[1] << 8) | (b[2] << 16) | (b[3] << 24);
+ }
+ else
+ {
+ given = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | (b[3]);
+ }
+
+ if ((given & 0x80008000) == 0x80008000)
+ {
+ insn_pce_p = FALSE;
+ insn_16_p = FALSE;
+ }
+ else if ((given & 0x8000) == 0x8000)
+ {
+ insn_pce_p = TRUE;
+ }
+ else
+ {
+ insn_16_p = TRUE;
+ }
+
+ /* 16 bit instruction. */
+ if (insn_16_p)
+ {
+ if (little)
+ {
+ given = b[0] | (b[1] << 8);
+ }
+ else
+ {
+ given = (b[0] << 8) | b[1];
+ }
+
+ status = print_insn_score16 (pc, info, given);
+ }
+ /* pce instruction. */
+ else if (insn_pce_p)
+ {
+ long other;
+
+ other = given & 0xFFFF;
+ given = (given & 0xFFFF0000) >> 16;
+
+ status = print_insn_score16 (pc, info, given);
+ print_insn_parallel_sym (info);
+ status += print_insn_score16 (pc, info, other);
+ /* disassemble_bytes() will output 4 byte per chunk for pce instructio. */
+ info->bytes_per_chunk = 4;
+ }
+ /* 32 bit instruction. */
+ else
+ {
+ /* Get rid of parity. */
+ ridparity = (given & 0x7FFF);
+ ridparity |= (given & 0x7FFF0000) >> 1;
+ given = ridparity;
+ status = print_insn_score32 (pc, info, given);
+ }
+
+ return status;
+}
+
+int
+print_insn_big_score (bfd_vma pc, struct disassemble_info *info)
+{
+ return print_insn (pc, info, FALSE);
+}
+
+int
+print_insn_little_score (bfd_vma pc, struct disassemble_info *info)
+{
+ return print_insn (pc, info, TRUE);
+}
diff --git a/opcodes/score-opc.h b/opcodes/score-opc.h
new file mode 100644
index 000000000000..20437d7af308
--- /dev/null
+++ b/opcodes/score-opc.h
@@ -0,0 +1,487 @@
+/* Copyright 2006 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+ 02110-1301, USA. */
+
+struct score_opcode
+{
+ unsigned long value;
+ unsigned long mask; /* Recognise instruction if (op & mask) == value. */
+ char *assembler; /* Disassembly string. */
+};
+
+/* Note: There is a partial ordering in this table - it must be searched from
+ the top to obtain a correct match. */
+
+static struct score_opcode score_opcodes[] =
+{
+ /* Score Instructions. */
+ {0x3800000a, 0x3e007fff, "abs\t\t%20-24r, %15-19r"},
+ {0x3800004b, 0x3e007fff, "abs.s\t\t%20-24r, %15-19r"},
+ {0x00000010, 0x3e0003ff, "add\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000011, 0x3e0003ff, "add.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x38000048, 0x3e0003ff, "add.s\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000012, 0x3e0003ff, "addc\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000013, 0x3e0003ff, "addc.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x02000000, 0x3e0e0001, "addi\t\t%20-24r, %1-16i"},
+ {0x02000001, 0x3e0e0001, "addi.c\t\t%20-24r, %1-16i"},
+ {0x0a000000, 0x3e0e0001, "addis\t\t%20-24r, %1-16d(0x%1-16x)"},
+ {0x0a000001, 0x3e0e0001, "addis.c\t\t%20-24r, %1-16d(0x%1-16x)"},
+ {0x10000000, 0x3e000001, "addri\t\t%20-24r, %15-19r, %1-14i"},
+ {0x10000001, 0x3e000001, "addri.c\t\t%20-24r, %15-19r, %1-14i"},
+ {0x00000009, 0x0000700f, "addc!\t\t%8-11r, %4-7r"},
+ {0x00002000, 0x0000700f, "add!\t\t%8-11r, %4-7r"},
+ {0x00006000, 0x00007087, "addei!\t\t%8-11r, %3-6d"},
+ {0x00000020, 0x3e0003ff, "and\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000021, 0x3e0003ff, "and.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x02080000, 0x3e0e0001, "andi\t\t%20-24r, 0x%1-16x"},
+ {0x02080001, 0x3e0e0001, "andi.c\t\t%20-24r, 0x%1-16x"},
+ {0x0a080000, 0x3e0e0001, "andis\t\t%20-24r, 0x%1-16x"},
+ {0x0a080001, 0x3e0e0001, "andis.c\t\t%20-24r, 0x%1-16x"},
+ {0x18000000, 0x3e000001, "andri\t\t%20-24r, %15-19r, 0x%1-14x"},
+ {0x18000001, 0x3e000001, "andri.c\t\t%20-24r, %15-19r,0x%1-14x"},
+ {0x00002004, 0x0000700f, "and!\t\t%8-11r, %4-7r"},
+ {0x08000000, 0x3e007c01, "bcs\t\t%b" },
+ {0x08000400, 0x3e007c01, "bcc\t\t%b" },
+ {0x08003800, 0x3e007c01, "bcnz\t\t%b" },
+ {0x08000001, 0x3e007c01, "bcsl\t\t%b" },
+ {0x08000401, 0x3e007c01, "bccl\t\t%b" },
+ {0x08003801, 0x3e007c01, "bcnzl\t\t%b" },
+ {0x00004000, 0x00007f00, "bcs!\t\t%b" },
+ {0x00004100, 0x00007f00, "bcc!\t\t%b" },
+ {0x00004e00, 0x00007f00, "bcnz!\t\t%b" },
+ {0x08001000, 0x3e007c01, "beq\t\t%b" },
+ {0x08001001, 0x3e007c01, "beql\t\t%b" },
+ {0x00004400, 0x00007f00, "beq!\t\t%b" },
+ {0x08000800, 0x3e007c01, "bgtu\t\t%b" },
+ {0x08001800, 0x3e007c01, "bgt\t\t%b" },
+ {0x08002000, 0x3e007c01, "bge\t\t%b" },
+ {0x08000801, 0x3e007c01, "bgtul\t\t%b" },
+ {0x08001801, 0x3e007c01, "bgtl\t\t%b" },
+ {0x08002001, 0x3e007c01, "bgel\t\t%b" },
+ {0x00004200, 0x00007f00, "bgtu!\t\t%b" },
+ {0x00004600, 0x00007f00, "bgt!\t\t%b" },
+ {0x00004800, 0x00007f00, "bge!\t\t%b" },
+ {0x00000029, 0x3e0003ff, "bitclr.c\t%20-24r, %15-19r, 0x%10-14x"},
+ {0x0000002b, 0x3e0003ff, "bitset.c\t%20-24r, %15-19r, 0x%10-14x"},
+ {0x0000002d, 0x3e0003ff, "bittst.c\t%15-19r, 0x%10-14x"},
+ {0x0000002f, 0x3e0003ff, "bittgl.c\t%20-24r, %15-19r, 0x%10-14x"},
+ {0x00006004, 0x00007007, "bitclr!\t\t%8-11r, 0x%3-7x"},
+ {0x3800000c, 0x3e0003ff, "bitrev\t\t%20-24r, %15-19r,%10-14r"},
+ {0x00006005, 0x00007007, "bitset!\t\t%8-11r, 0x%3-7x"},
+ {0x00006006, 0x00007007, "bittst!\t\t%8-11r, 0x%3-7x"},
+ {0x00006007, 0x00007007, "bittgl!\t\t%8-11r, 0x%3-7x"},
+ {0x08000c00, 0x3e007c01, "bleu\t\t%b" },
+ {0x08001c00, 0x3e007c01, "ble\t\t%b" },
+ {0x08002400, 0x3e007c01, "blt\t\t%b" },
+ {0x08000c01, 0x3e007c01, "bleul\t\t%b" },
+ {0x08001c01, 0x3e007c01, "blel\t\t%b" },
+ {0x08002401, 0x3e007c01, "bltl\t\t%b" },
+ {0x08003c01, 0x3e007c01, "bl\t\t%b" },
+ {0x00004300, 0x00007f00, "bleu!\t\t%b" },
+ {0x00004700, 0x00007f00, "ble!\t\t%b" },
+ {0x00004900, 0x00007f00, "blt!\t\t%b" },
+ {0x08002800, 0x3e007c01, "bmi\t\t%b" },
+ {0x08002801, 0x3e007c01, "bmil\t\t%b" },
+ {0x00004a00, 0x00007f00, "bmi!\t\t%b" },
+ {0x08001400, 0x3e007c01, "bne\t\t%b" },
+ {0x08001401, 0x3e007c01, "bnel\t\t%b" },
+ {0x00004500, 0x00007f00, "bne!\t\t%b" },
+ {0x08002c00, 0x3e007c01, "bpl\t\t%b" },
+ {0x08002c01, 0x3e007c01, "bpll\t\t%b" },
+ {0x00004b00, 0x00007f00, "bpl!\t\t%b" },
+ {0x00000008, 0x3e007fff, "brcs\t\t%15-19r" },
+ {0x00000408, 0x3e007fff, "brcc\t\t%15-19r" },
+ {0x00000808, 0x3e007fff, "brgtu\t\t%15-19r" },
+ {0x00000c08, 0x3e007fff, "brleu\t\t%15-19r" },
+ {0x00001008, 0x3e007fff, "breq\t\t%15-19r" },
+ {0x00001408, 0x3e007fff, "brne\t\t%15-19r" },
+ {0x00001808, 0x3e007fff, "brgt\t\t%15-19r" },
+ {0x00001c08, 0x3e007fff, "brle\t\t%15-19r" },
+ {0x00002008, 0x3e007fff, "brge\t\t%15-19r" },
+ {0x00002408, 0x3e007fff, "brlt\t\t%15-19r" },
+ {0x00002808, 0x3e007fff, "brmi\t\t%15-19r" },
+ {0x00002c08, 0x3e007fff, "brpl\t\t%15-19r" },
+ {0x00003008, 0x3e007fff, "brvs\t\t%15-19r" },
+ {0x00003408, 0x3e007fff, "brvc\t\t%15-19r" },
+ {0x00003808, 0x3e007fff, "brcnz\t\t%15-19r" },
+ {0x00003c08, 0x3e007fff, "br\t\t%15-19r" },
+ {0x00000009, 0x3e007fff, "brcsl\t\t%15-19r" },
+ {0x00000409, 0x3e007fff, "brccl\t\t%15-19r" },
+ {0x00000809, 0x3e007fff, "brgtul\t\t%15-19r" },
+ {0x00000c09, 0x3e007fff, "brleul\t\t%15-19r" },
+ {0x00001009, 0x3e007fff, "breql\t\t%15-19r" },
+ {0x00001409, 0x3e007fff, "brnel\t\t%15-19r" },
+ {0x00001809, 0x3e007fff, "brgtl\t\t%15-19r" },
+ {0x00001c09, 0x3e007fff, "brlel\t\t%15-19r" },
+ {0x00002009, 0x3e007fff, "brgel\t\t%15-19r" },
+ {0x00002409, 0x3e007fff, "brltl\t\t%15-19r" },
+ {0x00002809, 0x3e007fff, "brmil\t\t%15-19r" },
+ {0x00002c09, 0x3e007fff, "brpll\t\t%15-19r" },
+ {0x00003009, 0x3e007fff, "brvsl\t\t%15-19r" },
+ {0x00003409, 0x3e007fff, "brvcl\t\t%15-19r" },
+ {0x00003809, 0x3e007fff, "brcnzl\t\t%15-19r" },
+ {0x00003c09, 0x3e007fff, "brl\t\t%15-19r" },
+ {0x00000004, 0x00007f0f, "brcs!\t\t%4-7r" },
+ {0x00000104, 0x00007f0f, "brcc!\t\t%4-7r" },
+ {0x00000204, 0x00007f0f, "brgtu!\t\t%4-7r" },
+ {0x00000304, 0x00007f0f, "brleu!\t\t%4-7r" },
+ {0x00000404, 0x00007f0f, "breq!\t\t%4-7r" },
+ {0x00000504, 0x00007f0f, "brne!\t\t%4-7r" },
+ {0x00000604, 0x00007f0f, "brgt!\t\t%4-7r" },
+ {0x00000704, 0x00007f0f, "brle!\t\t%4-7r" },
+ {0x00000804, 0x00007f0f, "brge!\t\t%4-7r" },
+ {0x00000904, 0x00007f0f, "brlt!\t\t%4-7r" },
+ {0x00000a04, 0x00007f0f, "brmi!\t\t%4-7r" },
+ {0x00000b04, 0x00007f0f, "brpl!\t\t%4-7r" },
+ {0x00000c04, 0x00007f0f, "brvs!\t\t%4-7r" },
+ {0x00000d04, 0x00007f0f, "brvc!\t\t%4-7r" },
+ {0x00000e04, 0x00007f0f, "brcnz!\t\t%4-7r" },
+ {0x00000f04, 0x00007f0f, "br!\t\t%4-7r" },
+ {0x0000000c, 0x00007f0f, "brcsl!\t\t%4-7r" },
+ {0x0000010c, 0x00007f0f, "brccl!\t\t%4-7r" },
+ {0x0000020c, 0x00007f0f, "brgtul!\t\t%4-7r" },
+ {0x0000030c, 0x00007f0f, "brleul!\t\t%4-7r" },
+ {0x0000040c, 0x00007f0f, "breql!\t\t%4-7r" },
+ {0x0000050c, 0x00007f0f, "brnel!\t\t%4-7r" },
+ {0x0000060c, 0x00007f0f, "brgtl!\t\t%4-7r" },
+ {0x0000070c, 0x00007f0f, "brlel!\t\t%4-7r" },
+ {0x0000080c, 0x00007f0f, "brgel!\t\t%4-7r" },
+ {0x0000090c, 0x00007f0f, "brltl!\t\t%4-7r" },
+ {0x00000a0c, 0x00007f0f, "brmil!\t\t%4-7r" },
+ {0x00000b0c, 0x00007f0f, "brpll!\t\t%4-7r" },
+ {0x00000c0c, 0x00007f0f, "brvsl!\t\t%4-7r" },
+ {0x00000d0c, 0x00007f0f, "brvcl!\t\t%4-7r" },
+ {0x00000e0c, 0x00007f0f, "brcnzl!\t\t%4-7r" },
+ {0x00000f0c, 0x00007f0f, "brl!\t\t%4-7r" },
+ {0x08003000, 0x3e007c01, "bvs\t\t%b" },
+ {0x08003400, 0x3e007c01, "bvc\t\t%b" },
+ {0x08003001, 0x3e007c01, "bvsl\t\t%b" },
+ {0x08003401, 0x3e007c01, "bvcl\t\t%b" },
+ {0x00004c00, 0x00007f00, "bvs!\t\t%b" },
+ {0x00004d00, 0x00007f00, "bvc!\t\t%b" },
+ {0x00004f00, 0x00007f00, "b!\t\t%b" },
+ {0x08003c00, 0x3e007c01, "b\t\t%b" },
+ {0x30000000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x30100000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x30200000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x30300000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x30400000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x30800000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x30900000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x30a00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x30b00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x30c00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x30d00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x30e00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x31000000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x31100000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x31800000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x31a00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x31b00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x31c00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x31d00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x31e00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x31f00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
+ {0x38000000, 0x3ff003ff, "mad\t\t%15-19r, %10-14r"},
+ {0x38000020, 0x3ff003ff, "madu\t\t%15-19r, %10-14r"},
+ {0x38000080, 0x3ff003ff, "mad.f\t\t%15-19r, %10-14r"},
+ {0x38000001, 0x3ff003ff, "msb\t\t%15-19r, %10-14r"},
+ {0x38000021, 0x3ff003ff, "msbu\t\t%15-19r, %10-14r"},
+ {0x38000081, 0x3ff003ff, "msb.f\t\t%15-19r, %10-14r"},
+ {0x38000102, 0x3ff003ff, "mazl\t\t%15-19r, %10-14r"},
+ {0x38000182, 0x3ff003ff, "mazl.f\t\t%15-19r, %10-14r"},
+ {0x38000002, 0x3ff003ff, "madl\t\t%15-19r, %10-14r"},
+ {0x380000c2, 0x3ff003ff, "madl.fs\t\t%15-19r, %10-14r"},
+ {0x38000303, 0x3ff003ff, "mazh\t\t%15-19r, %10-14r"},
+ {0x38000383, 0x3ff003ff, "mazh.f\t\t%15-19r, %10-14r"},
+ {0x38000203, 0x3ff003ff, "madh\t\t%15-19r, %10-14r"},
+ {0x380002c3, 0x3ff003ff, "madh.fs\t\t%15-19r, %10-14r"},
+ {0x38000007, 0x3e0003ff, "max\t\t%20-24r, %15-19r, %10-14r"},
+ {0x38000006, 0x3e0003ff, "min\t\t%20-24r, %15-19r, %10-14r"},
+ {0x38000104, 0x3ff003ff, "mszl\t\t%15-19r, %10-14r"},
+ {0x38000184, 0x3ff003ff, "mszl.f\t\t%15-19r, %10-14r"},
+ {0x38000004, 0x3ff003ff, "msbl\t\t%15-19r, %10-14r"},
+ {0x380000c4, 0x3ff003ff, "msbl.fs\t\t%15-19r, %10-14r"},
+ {0x38000305, 0x3ff003ff, "mszh\t\t%15-19r, %10-14r"},
+ {0x38000385, 0x3ff003ff, "mszh.f\t\t%15-19r, %10-14r"},
+ {0x38000205, 0x3ff003ff, "msbh\t\t%15-19r, %10-14r"},
+ {0x380002c5, 0x3ff003ff, "msbh.fs\t\t%15-19r, %10-14r"},
+ {0x3800004e, 0x3e0003ff, "sll.s\t\t%20-24r, %15-19r, %10-14r"},
+ {0x38000049, 0x3e0003ff, "sub.s\t\t%20-24r, %15-19r, %10-14r"},
+ {0x3800000d, 0x3e007fff, "clz\t\t%20-24r, %15-19r"},
+ {0x38000000, 0x3e000000, "ceinst\t\t%20-24d, %15-19r, %10-14r, %5-9d, %0-4d"},
+ {0x00000019, 0x3ff003ff, "cmpteq.c\t\t%15-19r, %10-14r"},
+ {0x00100019, 0x3ff003ff, "cmptmi.c\t\t%15-19r, %10-14r"},
+ {0x00300019, 0x3ff003ff, "cmp.c\t\t%15-19r, %10-14r"},
+ {0x0000001b, 0x3ff07fff, "cmpzteq.c\t%15-19r"},
+ {0x0010001b, 0x3ff07fff, "cmpztmi.c\t%15-19r"},
+ {0x0030001b, 0x3ff07fff, "cmpz.c\t\t%15-19r"},
+ {0x02040001, 0x3e0e0001, "cmpi.c\t\t%20-24r, %1-16i"},
+ {0x00002003, 0x0000700f, "cmp!\t\t%8-11r, %4-7r"},
+ {0x0c00000c, 0x3e00001f, "cop1\t\tc%20-24r, c%15-19r, c%10-14r, %5-9d"},
+ {0x0c000014, 0x3e00001f, "cop2\t\tc%20-24r, c%15-19r, c%10-14r, %5-9d"},
+ {0x0c00001c, 0x3e00001f, "cop3\t\tc%20-24r, c%15-19r, c%10-14r, %5-9d"},
+ {0x00000044, 0x3e0003ff, "div\t\t%15-19r, %10-14r"},
+ {0x00000046, 0x3e0003ff, "divu\t\t%15-19r, %10-14r"},
+ {0x0c0000a4, 0x3e0003ff, "drte" },
+ {0x00000058, 0x3e0003ff, "extsb\t\t%20-24r, %15-19r"},
+ {0x00000059, 0x3e0003ff, "extsb.c\t\t%20-24r, %15-19r"},
+ {0x0000005a, 0x3e0003ff, "extsh\t\t%20-24r, %15-19r"},
+ {0x0000005b, 0x3e0003ff, "extsh.c\t\t%20-24r, %15-19r"},
+ {0x0000005c, 0x3e0003ff, "extzb\t\t%20-24r, %15-19r"},
+ {0x0000005d, 0x3e0003ff, "extzb.c\t\t%20-24r, %15-19r"},
+ {0x0000005e, 0x3e0003ff, "extzh\t\t%20-24r, %15-19r"},
+ {0x0000005f, 0x3e0003ff, "extzh.c\t\t%20-24r, %15-19r"},
+ {0x04000001, 0x3e000001, "jl\t\t%j"},
+ {0x00003001, 0x00007001, "jl!\t\t%j" },
+ {0x00003000, 0x00007001, "j!\t\t%j" },
+ {0x04000000, 0x3e000001, "j\t\t%j"},
+ {0x26000000, 0x3e000000, "lb\t\t%20-24r, [%15-19r, %0-14i]"},
+ {0x2c000000, 0x3e000000, "lbu\t\t%20-24r, [%15-19r, %0-14i]"},
+ {0x06000003, 0x3e000007, "lb\t\t%20-24r, [%15-19r, %3-14i]+"},
+ {0x06000006, 0x3e000007, "lbu\t\t%20-24r, [%15-19r, %3-14i]+"},
+ {0x0e000003, 0x3e000007, "lb\t\t%20-24r, [%15-19r]+, %3-14i"},
+ {0x0e000006, 0x3e000007, "lbu\t\t%20-24r, [%15-19r]+, %3-14i"},
+ {0x0000200b, 0x0000700f, "lbu!\t\t%8-11r, [%4-7r]"},
+ {0x00007003, 0x00007007, "lbup!\t\t%8-11r, %3-7d"},
+ {0x00000060, 0x3e0003ff, "lcb\t\t[%15-19r]+"},
+ {0x00000062, 0x3e0003ff, "lcw\t\t%20-24r, [%15-19r]+"},
+ {0x00000066, 0x3e0003ff, "lce\t\t%20-24r, [%15-19r]+"},
+ {0x0c00000a, 0x3e00001f, "ldc1\t\tc%15-19r, [%20-24r, %5-14i]"},
+ {0x0c000012, 0x3e00001f, "ldc2\t\tc%15-19r, [%20-24r, %5-14i]"},
+ {0x0c00001a, 0x3e00001f, "ldc3\t\tc%15-19r, [%20-24r, %5-14i]"},
+ {0x22000000, 0x3e000000, "lh\t\t%20-24r, [%15-19r, %0-14i]"},
+ {0x24000000, 0x3e000000, "lhu\t\t%20-24r, [%15-19r, %0-14i]"},
+ {0x06000001, 0x3e000007, "lh\t\t%20-24r, [%15-19r, %3-14i]+"},
+ {0x06000002, 0x3e000007, "lhu\t\t%20-24r, [%15-19r, %3-14i]+"},
+ {0x0e000001, 0x3e000007, "lh\t\t%20-24r, [%15-19r]+, %3-14i"},
+ {0x0e000002, 0x3e000007, "lhu\t\t%20-24r, [%15-19r]+, %3-14i"},
+ {0x00002009, 0x0000700f, "lh!\t\t%8-11r, [%4-7r]"},
+ {0x00007001, 0x00007007, "lhp!\t\t%8-11r, %3-7d1"},
+ {0x020c0000, 0x3e0e0000, "ldi\t\t%20-24r, 0x%1-16x(%1-16i)"},
+ {0x0a0c0000, 0x3e0e0000, "ldis\t\t%20-24r, 0x%1-16x(%1-16i)"},
+ {0x00005000, 0x00007000, "ldiu!\t\t%8-11r, %0-7d"},
+ {0x0000000c, 0x3e0003ff, "alw\t\t%20-24r, [%15-19r]"},
+ {0x20000000, 0x3e000000, "lw\t\t%20-24r, [%15-19r, %0-14i]"},
+ {0x06000000, 0x3e000007, "lw\t\t%20-24r, [%15-19r, %3-14i]+"},
+ {0x0e000000, 0x3e000007, "lw\t\t%20-24r, [%15-19r]+, %3-14i"},
+ {0x00002008, 0x0000700f, "lw!\t\t%8-11r, [%4-7r]"},
+ {0x00007000, 0x00007007, "lwp!\t\t%8-11r, %3-7d2"},
+ {0x0000100b, 0x0000700f, "madh.fs!\t\t%8-11r, %4-7r"},
+ {0x0000100a, 0x0000700f, "madl.fs!\t\t%8-11r, %4-7r"},
+ {0x00001005, 0x0000700f, "madu!\t\t%8-11r, %4-7r"},
+ {0x00001004, 0x0000700f, "mad.f!\t\t%8-11r, %4-7r"},
+ {0x00001009, 0x0000700f, "mazh.f!\t\t%8-11r, %4-7r"},
+ {0x00001008, 0x0000700f, "mazl.f!\t\t%8-11r, %4-7r"},
+ {0x00000448, 0x3e007fff, "mfcel\t\t%20-24r"},
+ {0x00001001, 0x00007f0f, "mfcel!\t\t%4-7r"},
+ {0x00000848, 0x3e007fff, "mfceh\t\t%20-24r"},
+ {0x00001101, 0x00007f0f, "mfceh!\t\t%4-7r"},
+ {0x00000c48, 0x3e007fff, "mfcehl\t\t%20-24r, %15-19r"},
+ {0x00000048, 0x3e0003ff, "mfce\t\t%20-24r, er%10-14d"},
+ {0x00000050, 0x3e0003ff, "mfsr\t\t%20-24r, sr%10-14d"},
+ {0x0c000001, 0x3e00001f, "mfcr\t\t%20-24r, c%15-19r"},
+ {0x0c000009, 0x3e00001f, "mfc1\t\t%20-24r, c%15-19r"},
+ {0x0c000011, 0x3e00001f, "mfc2\t\t%20-24r, c%15-19r"},
+ {0x0c000019, 0x3e00001f, "mfc3\t\t%20-24r, c%15-19r"},
+ {0x0c00000f, 0x3e00001f, "mfcc1\t\t%20-24r, c%15-19r"},
+ {0x0c000017, 0x3e00001f, "mfcc2\t\t%20-24r, c%15-19r"},
+ {0x0c00001f, 0x3e00001f, "mfcc3\t\t%20-24r, c%15-19r"},
+ {0x00000002, 0x0000700f, "mhfl!\t\t%8-11R, %4-7r"},
+ {0x00000001, 0x0000700f, "mlfh!\t\t%8-11r, %4-7R"},
+ {0x00001006, 0x0000700f, "msb.f!\t\t%8-11r, %4-7r"},
+ {0x0000100f, 0x0000700f, "msbh.fs!\t\t%8-11r, %4-7r"},
+ {0x0000100e, 0x0000700f, "msbl.fs!\t\t%8-11r, %4-7r"},
+ {0x00001007, 0x0000700f, "msbu!\t\t%8-11r, %4-7r"},
+ {0x0000100d, 0x0000700f, "mszh.f!\t\t%8-11r, %4-7r"},
+ {0x0000100c, 0x0000700f, "mszl.f!\t\t%8-11r, %4-7r"},
+ {0x0000044a, 0x3e007fff, "mtcel\t\t%20-24r"},
+ {0x00001000, 0x00007f0f, "mtcel!\t\t%4-7r"},
+ {0x0000084a, 0x3e007fff, "mtceh\t\t%20-24r"},
+ {0x00001100, 0x00007f0f, "mtceh!\t\t%4-7r"},
+ {0x00000c4a, 0x3e007fff, "mtcehl\t\t%20-24r, %15-19r"},
+ {0x0000004a, 0x3e0003ff, "mtce\t\t%20-24r, er%10-14d"},
+ {0x00000052, 0x3e0003ff, "mtsr\t\t%15-19r, sr%10-14d"},
+ {0x0c000000, 0x3e00001f, "mtcr\t\t%20-24r, c%15-19r"},
+ {0x0c000008, 0x3e00001f, "mtc1\t\t%20-24r, c%15-19r"},
+ {0x0c000010, 0x3e00001f, "mtc2\t\t%20-24r, c%15-19r"},
+ {0x0c000018, 0x3e00001f, "mtc3\t\t%20-24r, c%15-19r"},
+ {0x0c00000e, 0x3e00001f, "mtcc1\t\t%20-24r, c%15-19r"},
+ {0x0c000016, 0x3e00001f, "mtcc2\t\t%20-24r, c%15-19r"},
+ {0x0c00001e, 0x3e00001f, "mtcc3\t\t%20-24r, c%15-19r"},
+ {0x00000040, 0x3e0003ff, "mul\t\t%15-19r, %10-14r"},
+ {0x00000040, 0x3e0003ff, "maz\t\t%15-19r, %10-14r"},
+ {0x00000041, 0x3e0003ff, "mul.f\t\t%15-19r, %10-14r"},
+ {0x00000041, 0x3e0003ff, "maz.f\t\t%15-19r, %10-14r"},
+ {0x00001002, 0x0000700f, "mul.f!\t\t%8-11r, %4-7r"},
+ {0x00000042, 0x3e0003ff, "mulu\t\t%15-19r, %10-14r"},
+ {0x00000042, 0x3e0003ff, "mazu\t\t%15-19r, %10-14r"},
+ {0x00001003, 0x0000700f, "mulu!\t\t%8-11r, %4-7r"},
+ {0x00000056, 0x3e007fff, "mvcs\t\t%20-24r, %15-19r"},
+ {0x00000456, 0x3e007fff, "mvcc\t\t%20-24r, %15-19r"},
+ {0x00000856, 0x3e007fff, "mvgtu\t\t%20-24r, %15-19r"},
+ {0x00000c56, 0x3e007fff, "mvleu\t\t%20-24r, %15-19r"},
+ {0x00001056, 0x3e007fff, "mveq\t\t%20-24r, %15-19r"},
+ {0x00001456, 0x3e007fff, "mvne\t\t%20-24r, %15-19r"},
+ {0x00001856, 0x3e007fff, "mvgt\t\t%20-24r, %15-19r"},
+ {0x00001c56, 0x3e007fff, "mvle\t\t%20-24r, %15-19r"},
+ {0x00002056, 0x3e007fff, "mvge\t\t%20-24r, %15-19r"},
+ {0x00002456, 0x3e007fff, "mvlt\t\t%20-24r, %15-19r"},
+ {0x00002856, 0x3e007fff, "mvmi\t\t%20-24r, %15-19r"},
+ {0x00002c56, 0x3e007fff, "mvpl\t\t%20-24r, %15-19r"},
+ {0x00003056, 0x3e007fff, "mvvs\t\t%20-24r, %15-19r"},
+ {0x00003456, 0x3e007fff, "mvvc\t\t%20-24r, %15-19r"},
+ {0x00003c56, 0x3e007fff, "mv\t\t%20-24r, %15-19r"},
+ {0x00000003, 0x0000700f, "mv!\t\t%8-11r, %4-7r"},
+ {0x0000001e, 0x3e0003ff, "neg\t\t%20-24r, %10-14r" },
+ {0x0000001f, 0x3e0003ff, "neg.c\t\t%20-24r, %10-14r" },
+ {0x00002002, 0x0000700f, "neg!\t\t%8-11r, %4-7r"},
+ {0x00000000, 0x3e0003ff, "nop" },
+ {0x00000024, 0x3e0003ff, "not\t\t%20-24r, %15-19r" },
+ {0x00000025, 0x3e0003ff, "not.c\t\t%20-24r, %15-19r" },
+ {0x00000000, 0x0000700f, "nop!" },
+ {0x00002006, 0x0000700f, "not!\t\t%8-11r, %4-7r"},
+ {0x00000022, 0x3e0003ff, "or\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000023, 0x3e0003ff, "or.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x020a0000, 0x3e0e0001, "ori\t\t%20-24r, 0x%1-16x"},
+ {0x020a0001, 0x3e0e0001, "ori.c\t\t%20-24r, 0x%1-16x"},
+ {0x0a0a0000, 0x3e0e0001, "oris\t\t%20-24r, 0x%1-16x"},
+ {0x0a0a0001, 0x3e0e0001, "oris.c\t\t%20-24r, 0x%1-16x"},
+ {0x1a000000, 0x3e000001, "orri\t\t%20-24r, %15-19r, 0x%1-14x"},
+ {0x1a000001, 0x3e000001, "orri.c\t\t%20-24r, %15-19r, 0x%1-14x"},
+ {0x00002005, 0x0000700f, "or!\t\t%8-11r, %4-7r"},
+ {0x0000000a, 0x3e0003ff, "pflush"},
+ {0x0000208a, 0x0000708f, "pop!\t\t%8-11R, [%4-6r]"},
+ {0x0000200a, 0x0000700f, "pop!\t\t%8-11r, [%4-7r]"},
+ {0x0000208e, 0x0000708f, "push!\t\t%8-11R, [%4-6r]"},
+ {0x0000200e, 0x0000700f, "push!\t\t%8-11r, [%4-7r]"},
+ {0x00000038, 0x3e0003ff, "ror\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000039, 0x3e0003ff, "ror.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x0000003b, 0x3e0003ff, "rorc.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x0000003c, 0x3e0003ff, "rol\t\t%20-24r, %15-19r, %10-14r"},
+ {0x0000003d, 0x3e0003ff, "rol.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x0000003f, 0x3e0003ff, "rolc.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000078, 0x3e0003ff, "rori\t\t%20-24r, %15-19r, %10-14d"},
+ {0x00000079, 0x3e0003ff, "rori.c\t\t%20-24r, %15-19r, %10-14d"},
+ {0x0000007b, 0x3e0003ff, "roric.c\t\t%20-24r, %15-19r, %10-14d"},
+ {0x0000007c, 0x3e0003ff, "roli\t\t%20-24r, %15-19r, %10-14d"},
+ {0x0000007d, 0x3e0003ff, "roli.c\t\t%20-24r, %15-19r, %10-14d"},
+ {0x0000007f, 0x3e0003ff, "rolic.c\t\t%20-24r, %15-19r, %10-14d"},
+ {0x0c000084, 0x3e0003ff, "rte" },
+ {0x2e000000, 0x3e000000, "sb\t\t%20-24r, [%15-19r, %0-14i]"},
+ {0x06000007, 0x3e000007, "sb\t\t%20-24r, [%15-19r, %3-14i]+"},
+ {0x0e000007, 0x3e000007, "sb\t\t%20-24r, [%15-19r]+, %3-14i"},
+ {0x0000200f, 0x0000700f, "sb!\t\t%8-11r, [%4-7r]"},
+ {0x00007007, 0x00007007, "sbp!\t\t%8-11r, %3-7d"},
+ {0x0000000e, 0x3e0003ff, "asw\t\t%20-24r, [%15-19r]"},
+ {0x00000068, 0x3e0003ff, "scb\t\t%20-24r, [%15-19r]+"},
+ {0x0000006a, 0x3e0003ff, "scw\t\t%20-24r, [%15-19r]+"},
+ {0x0000006e, 0x3e0003ff, "sce\t\t[%15-19r]+"},
+ {0x00000006, 0x3e0003ff, "sdbbp\t\t%15-19d"},
+ {0x00006002, 0x00007007, "sdbbp!\t\t%3-7d"},
+ {0x2a000000, 0x3e000000, "sh\t\t%20-24r, [%15-19r, %0-14i]"},
+ {0x06000005, 0x3e000007, "sh\t\t%20-24r, [%15-19r, %3-14i]+"},
+ {0x0e000005, 0x3e000007, "sh\t\t%20-24r, [%15-19r]+, %3-14i"},
+ {0x0000200d, 0x0000700f, "sh!\t\t%8-11r, [%4-7r]"},
+ {0x00007005, 0x00007007, "shp!\t\t%8-11r, %3-7d1"},
+ {0x0c0000c4, 0x3e0003ff, "sleep" },
+ {0x00000030, 0x3e0003ff, "sll\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000031, 0x3e0003ff, "sll.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000070, 0x3e0003ff, "slli\t\t%20-24r, %15-19r, %10-14d"},
+ {0x00000071, 0x3e0003ff, "slli.c\t\t%20-24r, %15-19r, %10-14d"},
+ {0x00000008, 0x0000700f, "sll!\t\t%8-11r, %4-7r"},
+ {0x00006001, 0x00007007, "slli!\t\t%8-11r, %3-7d"},
+ {0x00000034, 0x3e0003ff, "srl\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000035, 0x3e0003ff, "srl.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000036, 0x3e0003ff, "sra\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000037, 0x3e0003ff, "sra.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000074, 0x3e0003ff, "srli\t\t%20-24r, %15-19r, %10-14d"},
+ {0x00000075, 0x3e0003ff, "srli.c\t\t%20-24r, %15-19r, %10-14d"},
+ {0x00000076, 0x3e0003ff, "srai\t\t%20-24r, %15-19r, %10-14d"},
+ {0x00000077, 0x3e0003ff, "srai.c\t\t%20-24r, %15-19r, %10-14d"},
+ {0x0000000a, 0x0000700f, "srl!\t\t%8-11r, %4-7r"},
+ {0x00006003, 0x00007007, "srli!\t\t%8-11r, %3-7d"},
+ {0x0000000b, 0x0000700f, "sra!\t\t%8-11r, %4-7r"},
+ {0x0c00000b, 0x3e00001f, "stc1\t\tc%15-19r, [%20-24r, %5-14i]"},
+ {0x0c000013, 0x3e00001f, "stc2\t\tc%15-19r, [%20-24r, %5-14i]"},
+ {0x0c00001b, 0x3e00001f, "stc3\t\tc%15-19r, [%20-24r, %5-14i]"},
+ {0x00000014, 0x3e0003ff, "sub\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000015, 0x3e0003ff, "sub.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000016, 0x3e0003ff, "subc\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000017, 0x3e0003ff, "subc.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00002001, 0x0000700f, "sub!\t\t%8-11r, %4-7r"},
+ {0x00006080, 0x00007087, "subei!\t\t%8-11r, %3-6d"},
+ {0x28000000, 0x3e000000, "sw\t\t%20-24r, [%15-19r, %0-14i]"},
+ {0x06000004, 0x3e000007, "sw\t\t%20-24r, [%15-19r, %3-14i]+"},
+ {0x0e000004, 0x3e000007, "sw\t\t%20-24r, [%15-19r]+, %3-14i"},
+ {0x0000200c, 0x0000700f, "sw!\t\t%8-11r, [%4-7r]"},
+ {0x00007004, 0x00007007, "swp!\t\t%8-11r, %3-7d2"},
+ {0x00000002, 0x3e0003ff, "syscall\t\t%10-24d"},
+ {0x00000054, 0x3e007fff, "tcs" },
+ {0x00000454, 0x3e007fff, "tcc" },
+ {0x00003854, 0x3e007fff, "tcnz" },
+ {0x00000005, 0x00007f0f, "tcs!" },
+ {0x00000105, 0x00007f0f, "tcc!" },
+ {0x00000e05, 0x00007f0f, "tcnz!" },
+ {0x00001054, 0x3e007fff, "teq" },
+ {0x00000405, 0x00007f0f, "teq!" },
+ {0x00000854, 0x3e007fff, "tgtu" },
+ {0x00001854, 0x3e007fff, "tgt" },
+ {0x00002054, 0x3e007fff, "tge" },
+ {0x00000205, 0x00007f0f, "tgtu!" },
+ {0x00000605, 0x00007f0f, "tgt!" },
+ {0x00000805, 0x00007f0f, "tge!" },
+ {0x00000c54, 0x3e007fff, "tleu" },
+ {0x00001c54, 0x3e007fff, "tle" },
+ {0x00002454, 0x3e007fff, "tlt" },
+ {0x0c000004, 0x3e0003ff, "stlb" },
+ {0x0c000024, 0x3e0003ff, "mftlb" },
+ {0x0c000044, 0x3e0003ff, "mtptlb" },
+ {0x0c000064, 0x3e0003ff, "mtrtlb" },
+ {0x00000305, 0x00007f0f, "tleu!" },
+ {0x00000705, 0x00007f0f, "tle!" },
+ {0x00000905, 0x00007f0f, "tlt!" },
+ {0x00002854, 0x3e007fff, "tmi" },
+ {0x00000a05, 0x00007f0f, "tmi!" },
+ {0x00001454, 0x3e007fff, "tne" },
+ {0x00000505, 0x00007f0f, "tne!" },
+ {0x00002c54, 0x3e007fff, "tpl" },
+ {0x00000b05, 0x00007f0f, "tpl!" },
+ {0x00000004, 0x3e007fff, "trapcs\t\t%15-19d"},
+ {0x00000404, 0x3e007fff, "trapcc\t\t%15-19d"},
+ {0x00000804, 0x3e007fff, "trapgtu\t\t%15-19d"},
+ {0x00000c04, 0x3e007fff, "trapleu\t\t%15-19d"},
+ {0x00001004, 0x3e007fff, "trapeq\t\t%15-19d"},
+ {0x00001404, 0x3e007fff, "trapne\t\t%15-19d"},
+ {0x00001804, 0x3e007fff, "trapgt\t\t%15-19d"},
+ {0x00001c04, 0x3e007fff, "traple\t\t%15-19d"},
+ {0x00002004, 0x3e007fff, "trapge\t\t%15-19d"},
+ {0x00002404, 0x3e007fff, "traplt\t\t%15-19d"},
+ {0x00002804, 0x3e007fff, "trapmi\t\t%15-19d"},
+ {0x00002c04, 0x3e007fff, "trappl\t\t%15-19d"},
+ {0x00003004, 0x3e007fff, "trapvs\t\t%15-19d"},
+ {0x00003404, 0x3e007fff, "trapvc\t\t%15-19d"},
+ {0x00003c04, 0x3e007fff, "trap\t\t%15-19d"},
+ {0x00003c54, 0x3e007fff, "tset" },
+ {0x00000f05, 0x00007f0f, "tset!" },
+ {0x00003054, 0x3e007fff, "tvs" },
+ {0x00003454, 0x3e007fff, "tvc" },
+ {0x00000c05, 0x00007f0f, "tvs!" },
+ {0x00000d05, 0x00007f0f, "tvc!" },
+ {0x00000026, 0x3e0003ff, "xor\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00000027, 0x3e0003ff, "xor.c\t\t%20-24r, %15-19r, %10-14r"},
+ {0x00002007, 0x0000700f, "xor!\t\t%8-11r, %4-7r"}
+};
diff --git a/opcodes/sh-dis.c b/opcodes/sh-dis.c
index 381fa4da8d99..0dee9109cdf0 100644
--- a/opcodes/sh-dis.c
+++ b/opcodes/sh-dis.c
@@ -924,11 +924,11 @@ print_insn_sh (bfd_vma memaddr, struct disassemble_info *info)
}
if ((*info->symbol_at_address_func) (val, info))
{
- fprintf_fn (stream, "\t! 0x");
+ fprintf_fn (stream, "\t! ");
(*info->print_address_func) (val, info);
}
else
- fprintf_fn (stream, "\t! 0x%x", val);
+ fprintf_fn (stream, "\t! %x", val);
}
}
diff --git a/opcodes/spu-dis.c b/opcodes/spu-dis.c
new file mode 100644
index 000000000000..a0dd1a0742eb
--- /dev/null
+++ b/opcodes/spu-dis.c
@@ -0,0 +1,260 @@
+/* Disassemble SPU instructions
+
+ Copyright 2006 Free Software Foundation, Inc.
+
+ This file is part of GDB, GAS, and the GNU binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 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 "sysdep.h"
+#include "dis-asm.h"
+#include "opcode/spu.h"
+
+/* This file provides a disassembler function which uses
+ the disassembler interface defined in dis-asm.h. */
+
+extern const struct spu_opcode spu_opcodes[];
+extern const int spu_num_opcodes;
+
+static const struct spu_opcode *spu_disassemble_table[(1<<11)];
+
+static void
+init_spu_disassemble (void)
+{
+ int i;
+
+ /* If two instructions have the same opcode then we prefer the first
+ * one. In most cases it is just an alternate mnemonic. */
+ for (i = 0; i < spu_num_opcodes; i++)
+ {
+ int o = spu_opcodes[i].opcode;
+ if (o >= (1 << 11))
+ abort ();
+ if (spu_disassemble_table[o] == 0)
+ spu_disassemble_table[o] = &spu_opcodes[i];
+ }
+}
+
+/* Determine the instruction from the 10 least significant bits. */
+static const struct spu_opcode *
+get_index_for_opcode (unsigned int insn)
+{
+ const struct spu_opcode *index;
+ unsigned int opcode = insn >> (32-11);
+
+ /* Init the table. This assumes that element 0/opcode 0 (currently
+ * NOP) is always used */
+ if (spu_disassemble_table[0] == 0)
+ init_spu_disassemble ();
+
+ if ((index = spu_disassemble_table[opcode & 0x780]) != 0
+ && index->insn_type == RRR)
+ return index;
+
+ if ((index = spu_disassemble_table[opcode & 0x7f0]) != 0
+ && (index->insn_type == RI18 || index->insn_type == LBT))
+ return index;
+
+ if ((index = spu_disassemble_table[opcode & 0x7f8]) != 0
+ && index->insn_type == RI10)
+ return index;
+
+ if ((index = spu_disassemble_table[opcode & 0x7fc]) != 0
+ && (index->insn_type == RI16))
+ return index;
+
+ if ((index = spu_disassemble_table[opcode & 0x7fe]) != 0
+ && (index->insn_type == RI8))
+ return index;
+
+ if ((index = spu_disassemble_table[opcode & 0x7ff]) != 0)
+ return index;
+
+ return 0;
+}
+
+/* Print a Spu instruction. */
+
+int
+print_insn_spu (bfd_vma memaddr, struct disassemble_info *info)
+{
+ bfd_byte buffer[4];
+ int value;
+ int hex_value;
+ int status;
+ unsigned int insn;
+ const struct spu_opcode *index;
+ enum spu_insns tag;
+
+ status = (*info->read_memory_func) (memaddr, buffer, 4, info);
+ if (status != 0)
+ {
+ (*info->memory_error_func) (status, memaddr, info);
+ return -1;
+ }
+
+ insn = bfd_getb32 (buffer);
+
+ index = get_index_for_opcode (insn);
+
+ if (index == 0)
+ {
+ (*info->fprintf_func) (info->stream, ".long 0x%x", insn);
+ }
+ else
+ {
+ int i;
+ int paren = 0;
+ tag = (enum spu_insns)(index - spu_opcodes);
+ (*info->fprintf_func) (info->stream, "%s", index->mnemonic);
+ if (tag == M_BI || tag == M_BISL || tag == M_IRET || tag == M_BISLED
+ || tag == M_BIHNZ || tag == M_BIHZ || tag == M_BINZ || tag == M_BIZ
+ || tag == M_SYNC || tag == M_HBR)
+ {
+ int fb = (insn >> (32-18)) & 0x7f;
+ if (fb & 0x40)
+ (*info->fprintf_func) (info->stream, tag == M_SYNC ? "c" : "p");
+ if (fb & 0x20)
+ (*info->fprintf_func) (info->stream, "d");
+ if (fb & 0x10)
+ (*info->fprintf_func) (info->stream, "e");
+ }
+ if (index->arg[0] != 0)
+ (*info->fprintf_func) (info->stream, "\t");
+ hex_value = 0;
+ for (i = 1; i <= index->arg[0]; i++)
+ {
+ int arg = index->arg[i];
+ if (arg != A_P && !paren && i > 1)
+ (*info->fprintf_func) (info->stream, ",");
+
+ switch (arg)
+ {
+ case A_T:
+ (*info->fprintf_func) (info->stream, "$%d",
+ DECODE_INSN_RT (insn));
+ break;
+ case A_A:
+ (*info->fprintf_func) (info->stream, "$%d",
+ DECODE_INSN_RA (insn));
+ break;
+ case A_B:
+ (*info->fprintf_func) (info->stream, "$%d",
+ DECODE_INSN_RB (insn));
+ break;
+ case A_C:
+ (*info->fprintf_func) (info->stream, "$%d",
+ DECODE_INSN_RC (insn));
+ break;
+ case A_S:
+ (*info->fprintf_func) (info->stream, "$sp%d",
+ DECODE_INSN_RA (insn));
+ break;
+ case A_H:
+ (*info->fprintf_func) (info->stream, "$ch%d",
+ DECODE_INSN_RA (insn));
+ break;
+ case A_P:
+ paren++;
+ (*info->fprintf_func) (info->stream, "(");
+ break;
+ case A_U7A:
+ (*info->fprintf_func) (info->stream, "%d",
+ 173 - DECODE_INSN_U8 (insn));
+ break;
+ case A_U7B:
+ (*info->fprintf_func) (info->stream, "%d",
+ 155 - DECODE_INSN_U8 (insn));
+ break;
+ case A_S3:
+ case A_S6:
+ case A_S7:
+ case A_S7N:
+ case A_U3:
+ case A_U5:
+ case A_U6:
+ case A_U7:
+ hex_value = DECODE_INSN_I7 (insn);
+ (*info->fprintf_func) (info->stream, "%d", hex_value);
+ break;
+ case A_S11:
+ (*info->print_address_func) (memaddr + DECODE_INSN_I9a (insn) * 4,
+ info);
+ break;
+ case A_S11I:
+ (*info->print_address_func) (memaddr + DECODE_INSN_I9b (insn) * 4,
+ info);
+ break;
+ case A_S10:
+ case A_S10B:
+ hex_value = DECODE_INSN_I10 (insn);
+ (*info->fprintf_func) (info->stream, "%d", hex_value);
+ break;
+ case A_S14:
+ hex_value = DECODE_INSN_I10 (insn) * 16;
+ (*info->fprintf_func) (info->stream, "%d", hex_value);
+ break;
+ case A_S16:
+ hex_value = DECODE_INSN_I16 (insn);
+ (*info->fprintf_func) (info->stream, "%d", hex_value);
+ break;
+ case A_X16:
+ hex_value = DECODE_INSN_U16 (insn);
+ (*info->fprintf_func) (info->stream, "%u", hex_value);
+ break;
+ case A_R18:
+ value = DECODE_INSN_I16 (insn) * 4;
+ if (value == 0)
+ (*info->fprintf_func) (info->stream, "%d", value);
+ else
+ {
+ hex_value = memaddr + value;
+ (*info->print_address_func) (hex_value & 0x3ffff, info);
+ }
+ break;
+ case A_S18:
+ value = DECODE_INSN_U16 (insn) * 4;
+ if (value == 0)
+ (*info->fprintf_func) (info->stream, "%d", value);
+ else
+ (*info->print_address_func) (value, info);
+ break;
+ case A_U18:
+ value = DECODE_INSN_U18 (insn);
+ if (value == 0 || !(*info->symbol_at_address_func)(0, info))
+ {
+ hex_value = value;
+ (*info->fprintf_func) (info->stream, "%u", value);
+ }
+ else
+ (*info->print_address_func) (value, info);
+ break;
+ case A_U14:
+ hex_value = DECODE_INSN_U14 (insn);
+ (*info->fprintf_func) (info->stream, "%u", hex_value);
+ break;
+ }
+ if (arg != A_P && paren)
+ {
+ (*info->fprintf_func) (info->stream, ")");
+ paren--;
+ }
+ }
+ if (hex_value > 16)
+ (*info->fprintf_func) (info->stream, "\t# %x", hex_value);
+ }
+ return 4;
+}
diff --git a/opcodes/spu-opc.c b/opcodes/spu-opc.c
new file mode 100644
index 000000000000..683f96f5de98
--- /dev/null
+++ b/opcodes/spu-opc.c
@@ -0,0 +1,44 @@
+/* SPU opcode list
+
+ Copyright 2006 Free Software Foundation, Inc.
+
+ This file is part of GDB, GAS, and the GNU binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 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 "opcode/spu.h"
+
+/* This file holds the Spu opcode table */
+
+
+/*
+ Example contents of spu-insn.h
+ id_tag mode mode type opcode mnemonic asmtype dependency FPU L/S? branch? instruction
+ QUAD WORD (0,RC,RB,RA,RT) latency
+ APUOP(M_LQD, 1, 0, RI9, 0x1f8, "lqd", ASM_RI9IDX, 00012, FXU, 1, 0) Load Quadword d-form
+ */
+
+const struct spu_opcode spu_opcodes[] = {
+#define APUOP(TAG,MACFORMAT,OPCODE,MNEMONIC,ASMFORMAT,DEP,PIPE) \
+ { MACFORMAT, OPCODE, MNEMONIC, ASMFORMAT },
+#define APUOPFB(TAG,MACFORMAT,OPCODE,FB,MNEMONIC,ASMFORMAT,DEP,PIPE) \
+ { MACFORMAT, OPCODE, MNEMONIC, ASMFORMAT },
+#include "opcode/spu-insns.h"
+#undef APUOP
+#undef APUOPFB
+};
+
+const int spu_num_opcodes =
+ sizeof (spu_opcodes) / sizeof (spu_opcodes[0]);
diff --git a/opcodes/xc16x-asm.c b/opcodes/xc16x-asm.c
index 63d7318ce0ef..2293992adeb4 100644
--- a/opcodes/xc16x-asm.c
+++ b/opcodes/xc16x-asm.c
@@ -391,6 +391,9 @@ xc16x_cgen_init_asm (CGEN_CPU_DESC cd)
xc16x_cgen_init_ibld_table (cd);
cd->parse_handlers = & xc16x_cgen_parse_handlers[0];
cd->parse_operand = xc16x_cgen_parse_operand;
+#ifdef CGEN_ASM_INIT_HOOK
+CGEN_ASM_INIT_HOOK
+#endif
}
diff --git a/opcodes/xstormy16-asm.c b/opcodes/xstormy16-asm.c
index 0b10878cd224..0f9e9c72543f 100644
--- a/opcodes/xstormy16-asm.c
+++ b/opcodes/xstormy16-asm.c
@@ -291,6 +291,9 @@ xstormy16_cgen_init_asm (CGEN_CPU_DESC cd)
xstormy16_cgen_init_ibld_table (cd);
cd->parse_handlers = & xstormy16_cgen_parse_handlers[0];
cd->parse_operand = xstormy16_cgen_parse_operand;
+#ifdef CGEN_ASM_INIT_HOOK
+CGEN_ASM_INIT_HOOK
+#endif
}
diff --git a/src-release b/src-release
index 9b366f1d59dc..62ec4301bebe 100644
--- a/src-release
+++ b/src-release
@@ -46,12 +46,12 @@ PWD = $${PWDCMD-pwd}
# Files in devo used in any net release.
# ChangeLog omitted because it may refer to files which are not in this
# distribution (perhaps it would be better to include it anyway).
-DEVO_SUPPORT= README Makefile.in configure configure.in \
+DEVO_SUPPORT= README Makefile.in configure configure.ac \
config.guess config.sub config move-if-change \
COPYING COPYING.LIB install-sh config-ml.in symlink-tree \
- mkinstalldirs ltconfig ltmain.sh missing ylwrap \
- libtool.m4 gettext.m4 ltcf-c.sh ltcf-cxx.sh ltcf-gcj.sh \
- Makefile.def Makefile.tpl src-release
+ mkinstalldirs ltmain.sh missing ylwrap \
+ libtool.m4 ltsugar.m4 ltversion.m4 ltoptions.m4 \
+ Makefile.def Makefile.tpl src-release config.rpath
# Files in devo/etc used in any net release.
# ChangeLog omitted because it may refer to files which are not in this
@@ -144,7 +144,7 @@ do-proto-toplev: $(DEVO_SUPPORT) $(SUPPORT_FILES) texinfo/texinfo.tex
CC_FOR_TARGET="$(CC)" CXX_FOR_TARGET="$(CXX)"
# Make links, and run "make diststuff" or "make info" when needed.
rm -rf proto-toplev ; mkdir proto-toplev
- set -e ; dirs="$(TOOL) $(DEVO_SUPPORT) $(SUPPORT_FILES)" ; \
+ set -e ; dirs="$(DEVO_SUPPORT) $(SUPPORT_FILES) $(TOOL)" ; \
for d in $$dirs ; do \
if [ -d $$d ]; then \
if [ ! -f $$d/Makefile ] ; then true ; \
@@ -184,9 +184,9 @@ do-proto-toplev: $(DEVO_SUPPORT) $(SUPPORT_FILES) texinfo/texinfo.tex
done)
#
# Take out texinfo from configurable dirs
- rm proto-toplev/configure.in
+ rm proto-toplev/configure.ac
sed -e '/^host_tools=/s/texinfo //' \
- <configure.in >proto-toplev/configure.in
+ <configure.ac >proto-toplev/configure.ac
#
mkdir proto-toplev/texinfo
ln -s ../../texinfo/texinfo.tex proto-toplev/texinfo/
@@ -270,7 +270,7 @@ gnats.tar.bz2: $(DIST_SUPPORT) $(GNATS_SUPPORT_DIRS) gnats
SUPPORT_FILES="$(GNATS_SUPPORT_DIRS)"
.PHONY: gdb.tar.bz2
-GDB_SUPPORT_DIRS= bfd include libiberty opcodes readline sim
+GDB_SUPPORT_DIRS= bfd include libiberty opcodes readline sim intl
gdb.tar.bz2: $(DIST_SUPPORT) $(GDB_SUPPORT_DIRS) gdb
$(MAKE) -f $(SELF) gdb-taz TOOL=gdb \
MD5PROG="$(MD5PROG)" \